ZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS8uY3ZzaWdub3JlIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNDQ4N2MuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1idWlsZC54bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQzMjcwZC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmU8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmJiYjZkLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBmZWF0dXJlLnhtbCxcCi0gICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAotICAgICAgICAgICAgICAgZWNsaXBzZV91cGRhdGVfMTIwLmpwZyxcCi0gICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwKLXNyYy5pbmNsdWRlcyA9IGxpY2Vuc2UuaHRtbCxcCi0gICAgICAgICAgICAgICBmZWF0dXJlLnhtbCxcCi0gICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAotICAgICAgICAgICAgICAgZWNsaXBzZV91cGRhdGVfMTIwLmpwZyxcCi0gICAgICAgICAgICAgICBidWlsZC5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRmNzA4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9lcGwtdjEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNGIxOTYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlL2VwbC12MTAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi08aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCi14bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgotCi08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgotPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgotPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+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+Ci0KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlNGYzYTUuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmZWF0dXJlCi0gICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlIgotICAgICAgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZSIKLSAgICAgIHZlcnNpb249IjEuMC4wIj4KLQotICAgPGRlc2NyaXB0aW9uPgotICAgICAgJWRlc2NyaXB0aW9uCi0gICA8L2Rlc2NyaXB0aW9uPgotCi0KLQotICAgPGxpY2Vuc2UgdXJsPSJsaWNlbnNlLmh0bWwiPgotICAgICAgJWxpY2Vuc2UKLSAgIDwvbGljZW5zZT4KLQotICAgPHJlcXVpcmVzPgotICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS50ZXN0Ii8+Ci0gICA8L3JlcXVpcmVzPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLnBlcmZvcm1hbmNlIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLnBlcmZvcm1hbmNlIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLTwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvbGljZW5zZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzQ3MDYwLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53M2Mub3JnL1RSLzE5OTkvUkVDLWh0bWw0MDEtMTk5OTEyMjQvbG9vc2UuZHRkIj4KLTwhLS0gc2F2ZWQgZnJvbSB1cmw9KDAwNDQpaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwvbm90aWNlLmh0bWwgLS0+Ci08SFRNTD48SEVBRD48VElUTEU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L1RJVExFPgotPE1FVEEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPE1FVEEgY29udGVudD0iTVNIVE1MIDYuMDAuMjgwMC4xNDc5IiBuYW1lPUdFTkVSQVRPUj48L0hFQUQ+Ci08Qk9EWSBsYW5nPUVOLVVTIHZMaW5rPXB1cnBsZSBsaW5rPWJsdWU+Ci08SDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9IMj4KLTxQPkphbnVhcnkgMjgsIDIwMDU8L1A+Ci08SDM+VXNhZ2UgT2YgQ29udGVudDwvSDM+Ci08UD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gCi1BTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuIFVTRSBPRiAKLVRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgCi1CRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIAotQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIAotQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIAotQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgCi1NQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L1A+Ci08SDM+QXBwbGljYWJsZSBMaWNlbnNlczwvSDM+Ci08UD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgCi1Gb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgCi1QdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8QSAKLWhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotPFA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgCi0oIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIAotYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS48L1A+Ci08UD5Db250ZW50IG1heSBiZSBhcHBvcnRpb25lZCBpbnRvIHBsdWctaW5zICgiUGx1Zy1pbnMiKSwgcGx1Zy1pbiBmcmFnbWVudHMgCi0oIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLiBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgCi1QbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiBGaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSAKLWNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIAotYXNzb2NpYXRlZCB3aXRoIGEgRmVhdHVyZS4gUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyAKLW5hbWVkICJwbHVnaW5zIiBhbmQgRmVhdHVyZXMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgbmFtZWQgImZlYXR1cmVzIi48L1A+Ci08UD5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWQgCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCAKLUZlYXR1cmVzLjwvUD4KLTxQPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIAotaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgCi1GZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAKLSgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IAotZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgCi1sb2NhdGlvbnM6PC9QPgotPFVMPgotICA8TEk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5IAotICA8TEk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXMgCi0gIDxMST5TdWJkaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnMgCi0gIDxMST5GZWF0dXJlIGRpcmVjdG9yaWVzIDwvTEk+PC9VTD4KLTxQPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCAKLXVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZSAKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCAKLUZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gCi1sb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgCi1maWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgCi1VcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyAKLWFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgCi1kaXJlY3RvcnkuPC9QPgotPFA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgCi1PUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuIFNPTUUgT0YgVEhFU0UgCi1PVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvUD4KLTxVTD4KLSAgPExJPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L0E+KSAKLQotICA8TEk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L0E+KSAKLQotICA8TEk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvQT4pIAotCi0gIDxMST5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9BPikgCi0gIDwvTEk+PC9VTD4KLTxQPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyAKLXByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCAKLWNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvUD4KLTxIMz5DcnlwdG9ncmFwaHk8L0gzPgotPFA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgCi1yZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IAotZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIAotY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgCi10byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9QPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvLmN2c2lnbm9yZSBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWM5OWQwLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1idWlsZC54bWwKLW9yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZV8xLjAuMC5iaW4uZGlzdC56aXAKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZmMzI4Ny4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmU8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmJiYjZkLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBmZWF0dXJlLnhtbCxcCi0gICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAotICAgICAgICAgICAgICAgZWNsaXBzZV91cGRhdGVfMTIwLmpwZyxcCi0gICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwKLXNyYy5pbmNsdWRlcyA9IGxpY2Vuc2UuaHRtbCxcCi0gICAgICAgICAgICAgICBmZWF0dXJlLnhtbCxcCi0gICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAotICAgICAgICAgICAgICAgZWNsaXBzZV91cGRhdGVfMTIwLmpwZyxcCi0gICAgICAgICAgICAgICBidWlsZC5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRmNzA4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9lcGwtdjEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNGIxOTYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2VwbC12MTAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi08aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCi14bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgotCi08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgotPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgotPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+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+Ci0KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlMmY1OTQuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmZWF0dXJlCi0gICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlIgotICAgICAgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZSIKLSAgICAgIHZlcnNpb249IjEuMC4wIj4KLQotICAgPGRlc2NyaXB0aW9uPgotICAgICAgJWRlc2NyaXB0aW9uCi0gICA8L2Rlc2NyaXB0aW9uPgotCi0KLQotICAgPGxpY2Vuc2UgdXJsPSJsaWNlbnNlLmh0bWwiPgotICAgICAgJWxpY2Vuc2UKLSAgIDwvbGljZW5zZT4KLQotICAgPHJlcXVpcmVzPgotICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS53c3QueG1sX3VpLmZlYXR1cmUiLz4KLSAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2UudGVzdCIvPgotICAgPC9yZXF1aXJlcz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMucGVyZm9ybWFuY2UiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5wZXJmb3JtYW5jZSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNkLnRlc3RzLnBlcmZvcm1hbmNlIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLTwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvbGljZW5zZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzQ3MDYwLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53M2Mub3JnL1RSLzE5OTkvUkVDLWh0bWw0MDEtMTk5OTEyMjQvbG9vc2UuZHRkIj4KLTwhLS0gc2F2ZWQgZnJvbSB1cmw9KDAwNDQpaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwvbm90aWNlLmh0bWwgLS0+Ci08SFRNTD48SEVBRD48VElUTEU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L1RJVExFPgotPE1FVEEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPE1FVEEgY29udGVudD0iTVNIVE1MIDYuMDAuMjgwMC4xNDc5IiBuYW1lPUdFTkVSQVRPUj48L0hFQUQ+Ci08Qk9EWSBsYW5nPUVOLVVTIHZMaW5rPXB1cnBsZSBsaW5rPWJsdWU+Ci08SDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9IMj4KLTxQPkphbnVhcnkgMjgsIDIwMDU8L1A+Ci08SDM+VXNhZ2UgT2YgQ29udGVudDwvSDM+Ci08UD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gCi1BTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuIFVTRSBPRiAKLVRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgCi1CRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIAotQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIAotQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIAotQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgCi1NQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L1A+Ci08SDM+QXBwbGljYWJsZSBMaWNlbnNlczwvSDM+Ci08UD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgCi1Gb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgCi1QdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8QSAKLWhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotPFA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgCi0oIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIAotYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS48L1A+Ci08UD5Db250ZW50IG1heSBiZSBhcHBvcnRpb25lZCBpbnRvIHBsdWctaW5zICgiUGx1Zy1pbnMiKSwgcGx1Zy1pbiBmcmFnbWVudHMgCi0oIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLiBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgCi1QbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiBGaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSAKLWNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIAotYXNzb2NpYXRlZCB3aXRoIGEgRmVhdHVyZS4gUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyAKLW5hbWVkICJwbHVnaW5zIiBhbmQgRmVhdHVyZXMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgbmFtZWQgImZlYXR1cmVzIi48L1A+Ci08UD5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWQgCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCAKLUZlYXR1cmVzLjwvUD4KLTxQPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIAotaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgCi1GZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAKLSgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IAotZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgCi1sb2NhdGlvbnM6PC9QPgotPFVMPgotICA8TEk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5IAotICA8TEk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXMgCi0gIDxMST5TdWJkaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnMgCi0gIDxMST5GZWF0dXJlIGRpcmVjdG9yaWVzIDwvTEk+PC9VTD4KLTxQPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCAKLXVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZSAKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCAKLUZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gCi1sb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgCi1maWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgCi1VcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyAKLWFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgCi1kaXJlY3RvcnkuPC9QPgotPFA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgCi1PUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuIFNPTUUgT0YgVEhFU0UgCi1PVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvUD4KLTxVTD4KLSAgPExJPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L0E+KSAKLQotICA8TEk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L0E+KSAKLQotICA8TEk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvQT4pIAotCi0gIDxMST5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9BPikgCi0gIDwvTEk+PC9VTD4KLTxQPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyAKLXByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCAKLWNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvUD4KLTxIMz5DcnlwdG9ncmFwaHk8L0gzPgotPFA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgCi1yZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IAotZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIAotY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgCi10byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9QPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTFjOGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM1NTI1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotYmluCi1iaW4ucHJvamVjdAotYnVpbGQueG1sCi1vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHNfMS4wLjAuamFyCi1qc3Bjb3JldGVzdHMuamFyCi10ZW1wLmZvbGRlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTMzNTBmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdiMThjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotI1dlZCBKYW4gMTIgMTY6NDY6MzIgRVNUIDIwMDUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9YWJvcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0ZTA5ZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jRnJpIE1heSAyNyAyMzozOTowMyBFRFQgMjAwNQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmQ2OGVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6IEpTUCBDb3JlIFRlc3RzCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMAotQnVuZGxlLUNsYXNzUGF0aDoganNwY29yZXRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLkpTUENvcmVUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cywKLSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuY2xlYW51cGZvcm1hdCwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuY2xlYW51cGZvcm1hdC50ZXN0ZmlsZXMsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLmNvbnRlbnR0eXBlaWRlbnRpZmllci5jb250ZW50c3BlY2lmaWMsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLmRvbQotUmVxdWlyZS1CdW5kbGU6IG9yZy5qdW5pdCwKLSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUKLUVjbGlwc2UtQXV0b1N0YXJ0OiB0cnVlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjZiOTZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci08Ym9keSBsYW5nPSJFTi1VUyI+Ci08aDI+QWJvdXQgVGhpcyBDb250ZW50PC9oMj4KLSAKLTxwPkZlYnJ1YXJ5IDI0LCAyMDA1PC9wPgkKLTxoMz5MaWNlbnNlPC9oMz4KLQotPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluICgmcXVvdDtDb250ZW50JnF1b3Q7KS4gIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQotRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KLQotPHA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCZxdW90O1JlZGlzdHJpYnV0b3ImcXVvdDspIGFuZCBkaWZmZXJlbnQgdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5Ci1hcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuICBDaGVjayB0aGUgUmVkaXN0cmlidXRvcidzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gIElmIG5vIHN1Y2ggbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuICBVbmxlc3Mgb3RoZXJ3aXNlCi1pbmRpY2F0ZWQgYmVsb3csIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudC48L3A+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDExYmM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAganNwY29yZXRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICB0ZXN0ZmlsZXMvCi1qYXJzLmNvbXBpbGUub3JkZXIgPSBqc3Bjb3JldGVzdHMuamFyCi1zb3VyY2UuanNwY29yZXRlc3RzLmphciA9IHNyYy8KLW91dHB1dC5qc3Bjb3JldGVzdHMuamFyID0gYmluLwotc3JjLmluY2x1ZGVzID0gdGVzdC54bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgdGVzdGZpbGVzLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvSlNQQ29yZVRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvSlNQQ29yZVRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjllNjU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL0pTUENvcmVUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5jbGVhbnVwZm9ybWF0LkZvcm1hdFRlc3RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuY29udGVudHR5cGVpZGVudGlmaWVyLmNvbnRlbnRzcGVjaWZpYy5UZXN0Q29udGVudFR5cGVIYW5kbGVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuY29udGVudHR5cGVpZGVudGlmaWVyLmNvbnRlbnRzcGVjaWZpYy5UZXN0TW9kZWxIYW5kbGVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMubW9kZWwuVGVzdE1vZGVsUmVsZWFzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMubW9kZWwuVGVzdE1vZGVsV2l0aE5vRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMudGFnbGliaW5kZXguVGVzdEluZGV4OwotCi0KLQotcHVibGljIGNsYXNzIEpTUENvcmVUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBKU1BDb3JlVGVzdFN1aXRlKCk7Ci0JfQotCi0JcHVibGljIEpTUENvcmVUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJTU0VNb2RlbFRlc3RTdWl0ZUZvckpTUCIpOwotCi0JCWFkZFRlc3QoVGVzdENlYW51cEZvcm1hdC5zdWl0ZSgpKTsKLQkJYWRkVGVzdChNb2RlbENsb25lU3VpdGUuc3VpdGUoKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0TW9kZWxIYW5kbGVycy5jbGFzcywgIlRlc3RNb2RlbEhhbmRsZXJzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdENvbnRlbnRUeXBlSGFuZGxlcnMuY2xhc3MsICJUZXN0Q29udGVudFR5cGVIYW5kbGVycyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RNb2RlbE1hbmFnZXIuY2xhc3MsICJUZXN0TW9kZWxNYW5hZ2VyIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRm9ybWF0VGVzdGVyLmNsYXNzLCAiRm9ybWF0VGVzdGVyIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdE1vZGVsUmVsZWFzZS5jbGFzcywgIkpTUCBNb2RlbCBUZXN0cyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RNb2RlbFdpdGhOb0ZpbGUuY2xhc3MsICJKU1AgTW9kZWwgVGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0SW5kZXguY2xhc3MsICJUYWdsaWJJbmRleCBUZXN0cyIpKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvSlNQQ29yZVRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9KU1BDb3JlVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2YzOGVhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9KU1BDb3JlVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBKU1BDb3JlVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBKU1BDb3JlVGVzdHNQbHVnaW4gcGx1Z2luOwotCS8vUmVzb3VyY2UgYnVuZGxlLgotCXByaXZhdGUgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VCdW5kbGU7Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIEpTUENvcmVUZXN0c1BsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQkJdHJ5IHsKLQkJCXJlc291cmNlQnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuVGVzdHNQbHVnaW5SZXNvdXJjZXMiKTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpIHsKLQkJCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEpTUENvcmVUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICogb3IgJ2tleScgaWYgbm90IGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gSlNQQ29yZVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRSZXNvdXJjZUJ1bmRsZSgpOwotCQl0cnkgewotCQkJcmV0dXJuIChidW5kbGUgIT0gbnVsbCkgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXk7Ci0JCX0KLQkJY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4ga2V5OwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJcmV0dXJuIHJlc291cmNlQnVuZGxlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgVVJMIGdldEluc3RhbGxMb2NhdGlvbigpIHsKLQkJVVJMIGluc3RhbGxMb2NhdGlvbiA9IFBsYXRmb3JtLmdldEJ1bmRsZSgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzIikuZ2V0RW50cnkoIi8iKTsKLQkJVVJMIHJlc29sdmVkTG9jYXRpb24gPSBudWxsOwotCQl0cnkgewotCQkJcmVzb2x2ZWRMb2NhdGlvbiA9IFBsYXRmb3JtLnJlc29sdmUoaW5zdGFsbExvY2F0aW9uKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJLy8gaW1wb3NzaWJsZQotCQkJdGhyb3cgbmV3IEVycm9yKGUpOwotCQl9Ci0JCXJldHVybiByZXNvbHZlZExvY2F0aW9uOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIEZpbGUgZ2V0VGVzdEZpbGUoU3RyaW5nIGZpbGVwYXRoKSB7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIGZpbGVwYXRoOwotCQlGaWxlIHJlc3VsdCA9IG5ldyBGaWxlKGxvY2F0aW9uKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9Mb2dnZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL0xvZ2dlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzQzZTNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL0xvZ2dlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBTbWFsbCBjb252ZW5pZW5jZSBjbGFzcyB0byBsb2cgbWVzc2FnZXMgdG8gcGx1Z2luJ3MgbG9nIGZpbGUgYW5kIGFsc28sIGlmIGRlc2lyZWQsCi0gKiB0aGUgY29uc29sZS4gVGhpcyBjbGFzcyBzaG91bGQgb25seSBiZSB1c2VkIGJ5IGNsYXNzZXMgaW4gdGhpcyBwbHVnaW4uIE90aGVyCi0gKiBwbHVnaW5zIHNob3VsZCBtYWtlIHRoZWlyIG93biBjb3B5LCB3aXRoIGFwcHJvcHJpYXRlIElELgotICovCi1wdWJsaWMgY2xhc3MgTG9nZ2VyIHsKLQlwcml2YXRlIHN0YXRpYyBQbHVnaW4gZlBsdWdpbiA9IEpTUENvcmVUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCk7Ci0JcHJpdmF0ZSBzdGF0aWMgQnVuZGxlIGZCdW5kbGUgPSBmUGx1Z2luLmdldEJ1bmRsZSgpOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBmUGx1Z2luSWQgPSBmQnVuZGxlLmdldFN5bWJvbGljTmFtZSgpOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQUNFRklMVEVSX0xPQ0FUSU9OID0gIi9kZWJ1Zy90cmFjZWZpbHRlciI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LID0gSVN0YXR1cy5PSzsgLy8gMAotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk8gPSBJU3RhdHVzLklORk87IC8vIDEKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HID0gSVN0YXR1cy5XQVJOSU5HOyAvLyAyCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1IgPSBJU3RhdHVzLkVSUk9SOyAvLyA0Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPS19ERUJVRyA9IDIwMCArIE9LOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk9fREVCVUcgPSAyMDAgKyBJTkZPOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkdfREVCVUcgPSAyMDAgKyBXQVJOSU5HOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0RFQlVHID0gMjAwICsgRVJST1I7Ci0KLQkvKioKLQkgKiBBZGRzIG1lc3NhZ2UgdG8gbG9nLgotCSAqIEBwYXJhbSBsZXZlbCBzZXZlcml0eSBsZXZlbCBvZiB0aGUgbWVzc2FnZSAoT0ssIElORk8sIFdBUk5JTkcsIEVSUk9SLCBPS19ERUJVRywgSU5GT19ERUJVRywgV0FSTklOR19ERUJVRywgRVJST1JfREVCVUcpCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBhZGQgdG8gdGhlIGxvZwotCSAqIEBwYXJhbSBleGNlcHRpb24gZXhjZXB0aW9uIHRocm93bgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGxldmVsID09IE9LX0RFQlVHIHx8IGxldmVsID09IElORk9fREVCVUcgfHwgbGV2ZWwgPT0gV0FSTklOR19ERUJVRyB8fCBsZXZlbCA9PSBFUlJPUl9ERUJVRykgewotCQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJCXJldHVybjsKLQkJfQotCi0JCWludCBzZXZlcml0eSA9IElTdGF0dXMuT0s7Ci0JCXN3aXRjaCAobGV2ZWwpIHsKLQkJCWNhc2UgSU5GT19ERUJVRyA6Ci0JCQljYXNlIElORk8gOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5JTkZPOwotCQkJCWJyZWFrOwotCQkJY2FzZSBXQVJOSU5HX0RFQlVHIDoKLQkJCWNhc2UgV0FSTklORyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLldBUk5JTkc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEVSUk9SX0RFQlVHIDoKLQkJCWNhc2UgRVJST1IgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5FUlJPUjsKLQkJfQotCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKHNldmVyaXR5LCBmUGx1Z2luSWQsIHNldmVyaXR5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQlmUGx1Z2luLmdldExvZygpLmxvZyhzdGF0dXNPYmopOwotCX0KLQotCS8qKgotCSAqIFByaW50cyBtZXNzYWdlIHRvIGxvZyBpZiBjYXRlZ29yeSBtYXRjaGVzIC9kZWJ1Zy90cmFjZWZpbHRlciBvcHRpb24uCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBwcmludAotCSAqIEBwYXJhbSBjYXRlZ29yeSBjYXRlZ29yeSBvZiB0aGUgbWVzc2FnZSwgdG8gYmUgY29tcGFyZWQgd2l0aCAvZGVidWcvdHJhY2VmaWx0ZXIKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX3RyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGlzVHJhY2luZyhjYXRlZ29yeSkpIHsKLQkJCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIGZQbHVnaW5JZCwgSVN0YXR1cy5PSywgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJCWZQbHVnaW4uZ2V0TG9nKCkubG9nKHN0YXR1c09iaik7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHBsdWdpbiBmb3IgdGhpcyBsb2dnZXIgaXMgZGVidWdnaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRGVidWdnaW5nKCkgewotCQlyZXR1cm4gZlBsdWdpbi5pc0RlYnVnZ2luZygpOwotCX0KLQotCS8qKgotCSAqIERldGVybWluZXMgaWYgY3VycmVudGx5IHRyYWNpbmcgYSBjYXRlZ29yeQotCSAqIEBwYXJhbSBjYXRlZ29yeQotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0cmFjaW5nIGNhdGVnb3J5LCBmYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUcmFjaW5nKFN0cmluZyBjYXRlZ29yeSkgewotCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nIHRyYWNlRmlsdGVyID0gUGxhdGZvcm0uZ2V0RGVidWdPcHRpb24oZlBsdWdpbklkICsgVFJBQ0VGSUxURVJfTE9DQVRJT04pOwotCQlpZiAodHJhY2VGaWx0ZXIgIT0gbnVsbCkgewotCQkJU3RyaW5nVG9rZW5pemVyIHRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodHJhY2VGaWx0ZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKLQkJCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJU3RyaW5nIGNhdCA9IHRva2VuaXplci5uZXh0VG9rZW4oKS50cmltKCk7Ci0JCQkJaWYgKGNhdGVnb3J5LmVxdWFscyhjYXQpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIG51bGwpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvTW9kZWxDbG9uZVN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9Nb2RlbENsb25lU3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJmMmNiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9Nb2RlbENsb25lU3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotcHVibGljIGNsYXNzIE1vZGVsQ2xvbmVTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IE1vZGVsQ2xvbmVTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBNb2RlbENsb25lU3VpdGUoKSB7Ci0JCXN1cGVyKCJNb2RlbENsb25lU3VpdGUiKTsKLQotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFN0cnVjdHVyZWREb2N1bWVudENsb25lLmNsYXNzLCAiVGVzdFN0cnVjdHVyZWREb2N1bWVudENsb25lIikpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9OdWxsSW5wdXRTdHJlYW0uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL051bGxJbnB1dFN0cmVhbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWJmYWNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL051bGxJbnB1dFN0cmVhbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZW5zIEx1a293c2tpL0lubm9vcHJhY3QgLSBpbml0aWFsIHJlbmFtaW5nL3Jlc3RydWN0dXJpbmcKLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLQotY2xhc3MgTnVsbElucHV0U3RyZWFtIGV4dGVuZHMgSW5wdXRTdHJlYW0gewotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBqYXZhLmlvLklucHV0U3RyZWFtI21hcmsoaW50KQotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBtYXJrKGludCByZWFkbGltaXQpIHsKLQkJLy8gbm90aGluZyB0byBkbwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNtYXJrU3VwcG9ydGVkKCkKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBtYXJrU3VwcG9ydGVkKCkgewotCQkvLyB3ZSBjYW4gbWFyayBub3RoaW5nLgotCQkvLyBhbmQsIHdlIGFyZSB1c2luZyB0aGlzIE51bGwgY2xhc3Mgc3BlY2lmaWNhbGx5IGZvcgotCQkvLyBhICJmYWtlIiByZXNldHRhYmxlIHN0cmVhbS4KLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBqYXZhLmlvLklucHV0U3RyZWFtI3JlYWQoKQotCSAqLwotCXB1YmxpYyBpbnQgcmVhZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0KLQkJcmV0dXJuIC0xOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNyZXNldCgpCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJlc2V0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gbm90aGluZyB0byBkbwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNza2lwKGxvbmcpCi0JICovCi0JcHVibGljIGxvbmcgc2tpcChsb25nIG4pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXJldHVybiAwOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL1Rlc3RDZWFudXBGb3JtYXQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL1Rlc3RDZWFudXBGb3JtYXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZlNjcxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9UZXN0Q2VhbnVwRm9ybWF0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuY2xlYW51cGZvcm1hdC5DbGVhbnVwVGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5jbGVhbnVwZm9ybWF0LkZvcm1hdFRlc3RlcjsKLQotCi1wdWJsaWMgY2xhc3MgVGVzdENlYW51cEZvcm1hdCBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RDZWFudXBGb3JtYXQoKTsKLQl9Ci0KLQlwdWJsaWMgVGVzdENlYW51cEZvcm1hdCgpIHsKLQkJc3VwZXIoIlRlc3RDZWFudXBGb3JtYXQiKTsKLQotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoQ2xlYW51cFRlc3Rlci5jbGFzcywgIkNsZWFudXBUZXN0ZXIiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShGb3JtYXRUZXN0ZXIuY2xhc3MsICJGb3JtYXRUZXN0ZXIiKSk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL1Rlc3RNb2RlbE1hbmFnZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL1Rlc3RNb2RlbE1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFmOGUwMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9UZXN0TW9kZWxNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci0KLS8qKgotICogVGhpcyBjbGFzcyB0ZXN0cyBiYXNpYyBjcmVhdGlvbiBvZiBJTW9kZWxNYW5hZ2VyIHBsdWdpbiBhbmQgdGhlCi0gKiBNb2RlbE1hbmdlci4KLSAqIAotICogQXBwcm9wcmlhdGUgZm9yIEJWVC4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RNb2RlbE1hbmFnZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVGVzdE1vZGVsTWFuYWdlci4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBUZXN0TW9kZWxNYW5hZ2VyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbE1hbmFnZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlhc3NlcnRUcnVlKCJtb2RlbE1hbmFnZXIgbXVzdCBub3QgYmUgbnVsbCIsIG1vZGVsTWFuYWdlciAhPSBudWxsKTsKLQotCQl0cnkgewotCQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KCJ0ZXN0LnhtbCIsIG5ldyBOdWxsSW5wdXRTdHJlYW0oKSwgbnVsbCk7Ci0JCQlhc3NlcnRUcnVlKCJiYXNpYyBYTUwgZW1wdHkgbW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQiLCBtb2RlbCAhPSBudWxsKTsKLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROdWxsQXJndW1lbnQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJRXhjZXB0aW9uIGUgPSBudWxsOwotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoKFN0cmluZykgbnVsbCwgbnVsbCwgbnVsbCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKLQkJCWUgPSBleGNlcHRpb247Ci0JCQlhc3NlcnRUcnVlKCJpbGxlZ2FsIGFyZ3VtZW50IGZhaWxlZCB0byB0aHJvdyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iLCBlIGluc3RhbmNlb2YgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKTsKLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvVGVzdFN0cnVjdHVyZWREb2N1bWVudENsb25lLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9UZXN0U3RydWN0dXJlZERvY3VtZW50Q2xvbmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJmN2QwNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9UZXN0U3RydWN0dXJlZERvY3VtZW50Q2xvbmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLS8qKgotICogQGF1dGhvciBkYXZpZHcKLSAqCi0gKiBUbyBjaGFuZ2UgdGhpcyBnZW5lcmF0ZWQgY29tbWVudCBlZGl0IHRoZSB0ZW1wbGF0ZSB2YXJpYWJsZSAidHlwZWNvbW1lbnQiOgotICogV2luZG93PlByZWZlcmVuY2VzPkphdmE+VGVtcGxhdGVzLgotICogVG8gZW5hYmxlIGFuZCBkaXNhYmxlIHRoZSBjcmVhdGlvbiBvZiB0eXBlIGNvbW1lbnRzIGdvIHRvCi0gKiBXaW5kb3c+UHJlZmVyZW5jZXM+SmF2YT5Db2RlIEdlbmVyYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0U3RydWN0dXJlZERvY3VtZW50Q2xvbmUgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVGVzdE1vZGVsQ2xvbmUuCi0JICovCi0JcHVibGljIFRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRDbG9uZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3QgZ2V0VGVzdCgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0U3RydWN0dXJlZERvY3VtZW50Q2xvbmUoInRlc3RDbG9uZVN0cnVjdHVyZWRNb2RlbEpTUFhNTCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDbG9uZVN0cnVjdHVyZWREb2N1bWVudFhNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsTWFuYWdlci5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoImR1bW15LnhtbCIsIChJbnB1dFN0cmVhbSkgbnVsbCwgbnVsbCk7Ci0JCWFzc2VydFRydWUoInN0cnVjdHVyZWREb2N1bWVudCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBzdHJ1Y3R1cmVkRG9jdW1lbnQgIT0gbnVsbCk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudCBjbG9uZWRTdHJ1Y3R1cmVkRG9jdW1lbnQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQubmV3SW5zdGFuY2UoKTsKLQkJLy8gbWFrZSBzdXJlIHRoZSBjcml0aWNhbCB2YXJpYWJsZXMgYXJlIE5PVCBpZGVudGljYWwsIGJ1dCB0aGF0IG5ldyBpbnN0YW5jZXMgCi0JCS8vIGhhdmUgYmVlbiBtYWRlCi0JCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQkJaWYgKGNsb25lZFN0cnVjdHVyZWREb2N1bWVudC5nZXRFbmNvZGluZ01lbWVudG8oKSA9PSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0RW5jb2RpbmdNZW1lbnRvKCkpCi0JCQlwYXNzZWQgPSBmYWxzZTsKLQkJaWYgKGNsb25lZFN0cnVjdHVyZWREb2N1bWVudC5nZXRQYXJzZXIoKSA9PSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UGFyc2VyKCkpCi0JCQlwYXNzZWQgPSBmYWxzZTsKLQkJaWYgKGNsb25lZFN0cnVjdHVyZWREb2N1bWVudC5nZXRSZVBhcnNlcigpID09IHN0cnVjdHVyZWREb2N1bWVudC5nZXRSZVBhcnNlcigpKQotCQkJcGFzc2VkID0gZmFsc2U7Ci0JCWFzc2VydFRydWUoIm5ld0luc3RhbmNlIG9mIFhNTCBzdHJ1Y3R1cmVkRG9jdW1lbnQgaXMgbm90IGNvcnJlY3QiLCBwYXNzZWQpOwotCi0JfQotCi0JLyoqCi0JICogVGhpcyB0ZXN0IGlzIG1vc3QgdXNlZnVsIHRvIGNoZWNrIGJyZWFrcG9pbnRzIGFuZCBkaWcgZGVlcCBpbiBvYmplY3QgCi0JICogdG8gY2hlY2sgY2xvbmVzIHZhbHVlcwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDbG9uZVN0cnVjdHVyZWREb2N1bWVudEpTUCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsTWFuYWdlci5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoImR1bW15LmpzcCIsIChJbnB1dFN0cmVhbSkgbnVsbCwgbnVsbCk7Ci0JCWFzc2VydFRydWUoInN0cnVjdHVyZWREb2N1bWVudCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBzdHJ1Y3R1cmVkRG9jdW1lbnQgIT0gbnVsbCk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudCBjbG9uZWRTdHJ1Y3R1cmVkRG9jdW1lbnQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQubmV3SW5zdGFuY2UoKTsKLQkJLy8gbWFrZSBzdXJlIHRoZSBjcml0aWNhbCB2YXJpYWJsZXMgYXJlIE5PVCBpZGVudGljYWwsIGJ1dCB0aGF0IG5ldyBpbnN0YW5jZXMgCi0JCS8vIGhhdmUgYmVlbiBtYWRlCi0JCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQkJaWYgKGNsb25lZFN0cnVjdHVyZWREb2N1bWVudC5nZXRFbmNvZGluZ01lbWVudG8oKSA9PSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0RW5jb2RpbmdNZW1lbnRvKCkpCi0JCQlwYXNzZWQgPSBmYWxzZTsKLQkJaWYgKGNsb25lZFN0cnVjdHVyZWREb2N1bWVudC5nZXRQYXJzZXIoKSA9PSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UGFyc2VyKCkpCi0JCQlwYXNzZWQgPSBmYWxzZTsKLQkJaWYgKGNsb25lZFN0cnVjdHVyZWREb2N1bWVudC5nZXRSZVBhcnNlcigpID09IHN0cnVjdHVyZWREb2N1bWVudC5nZXRSZVBhcnNlcigpKQotCQkJcGFzc2VkID0gZmFsc2U7Ci0JCWFzc2VydFRydWUoIm5ld0luc3RhbmNlIG9mIEpTUCBzdHJ1Y3R1cmVkRG9jdW1lbnQgaXMgbm90IGNvcnJlY3QiLCBwYXNzZWQpOwotCi0JfQotCi0JLyoqCi0JICogVGhpcyB0ZXN0IGlzIG1vc3QgdXNlZnVsIHRvIGNoZWNrIGJyZWFrcG9pbnRzIGFuZCBkaWcgZGVlcCBpbiBvYmplY3QgCi0JICogdG8gY2hlY2sgY2xvbmVzIHZhbHVlcwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDbG9uZVN0cnVjdHVyZWREb2N1bWVudEpTUFhNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlTdHJpbmcgdGVzdENvbnRlbnQgPSAiPEAhIHBhZ2UgY29udGVudFR5cGU9XCJ0ZXh0L3htbFwiIEA+IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbE1hbmFnZXIuY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKCJkdW1teS5qc3AiLCB0ZXN0Q29udGVudCwgbnVsbCk7Ci0JCWFzc2VydFRydWUoInN0cnVjdHVyZWREb2N1bWVudCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBzdHJ1Y3R1cmVkRG9jdW1lbnQgIT0gbnVsbCk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudCBjbG9uZWRTdHJ1Y3R1cmVkRG9jdW1lbnQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQubmV3SW5zdGFuY2UoKTsKLQkJLy8gbWFrZSBzdXJlIHRoZSBjcml0aWNhbCB2YXJpYWJsZXMgYXJlIE5PVCBpZGVudGljYWwsIGJ1dCB0aGF0IG5ldyBpbnN0YW5jZXMgCi0JCS8vIGhhdmUgYmVlbiBtYWRlCi0JCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQkJaWYgKGNsb25lZFN0cnVjdHVyZWREb2N1bWVudC5nZXRFbmNvZGluZ01lbWVudG8oKSA9PSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0RW5jb2RpbmdNZW1lbnRvKCkpCi0JCQlwYXNzZWQgPSBmYWxzZTsKLQkJaWYgKGNsb25lZFN0cnVjdHVyZWREb2N1bWVudC5nZXRQYXJzZXIoKSA9PSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UGFyc2VyKCkpCi0JCQlwYXNzZWQgPSBmYWxzZTsKLQkJaWYgKGNsb25lZFN0cnVjdHVyZWREb2N1bWVudC5nZXRSZVBhcnNlcigpID09IHN0cnVjdHVyZWREb2N1bWVudC5nZXRSZVBhcnNlcigpKQotCQkJcGFzc2VkID0gZmFsc2U7Ci0JCWFzc2VydFRydWUoIm5ld0luc3RhbmNlIG9mIEpTUFhNTCBzdHJ1Y3R1cmVkRG9jdW1lbnQgaXMgbm90IGNvcnJlY3QiLCBwYXNzZWQpOwotCi0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC9DbGVhbnVwVGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L0NsZWFudXBUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZiN2FkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L0NsZWFudXBUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5jbGVhbnVwZm9ybWF0OwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5jbGVhbnVwLkhUTUxDbGVhbnVwUHJvY2Vzc29ySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkhUTUxDb3JlUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5jbGVhbnVwLkFic3RyYWN0U3RydWN0dXJlZENsZWFudXBQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmNsZWFudXAuSVN0cnVjdHVyZWRDbGVhbnVwUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnV0aWwuRGVidWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnV0aWwuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNsZWFudXAuQ2xlYW51cFByb2Nlc3NvclhNTDsKLQotcHVibGljIGNsYXNzIENsZWFudXBUZXN0ZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIElNb2RlbE1hbmFnZXIgZk1vZGVsTWFuYWdlciA9IG51bGw7Ci0JcHJvdGVjdGVkIENsZWFudXBQcm9jZXNzb3JYTUwgZkNsZWFudXBQcm9jZXNzb3IgPSBudWxsOwotCXByb3RlY3RlZCBIVE1MQ2xlYW51cFByb2Nlc3NvckltcGwgZkhUTUxDbGVhbnVwUHJvY2Vzc29yID0gbnVsbDsKLQotCXB1YmxpYyBDbGVhbnVwVGVzdGVyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCQkvLyBnZXQgbW9kZWwgbWFuYWdlcgotCQlmTW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQotCQkvLyBnZXQgY2xlYW51cCBwcm9jZXNzb3IKLQkJZkNsZWFudXBQcm9jZXNzb3IgPSBuZXcgQ2xlYW51cFByb2Nlc3NvclhNTCgpOwotCi0JCS8vIGdldCBIVE1MIGNsZWFudXAgcHJvY2Vzc29yCi0JCWZIVE1MQ2xlYW51cFByb2Nlc3NvciA9IG5ldyBIVE1MQ2xlYW51cFByb2Nlc3NvckltcGwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cEluc2VydFRhZ3NRdW90ZUF0dHJzKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoImludm9pY2UueG1sIik7Ci0KLQkJLy8gdXNlIGZvciBkZWJ1Z2dpbmcKLS8vCQlTdHJpbmcgcHJlY2xlYW5lZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQotCQkvLyBpbml0IENsZWFudXBQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZENsZWFudXBQcmVmZXJlbmNlcyBjbGVhbnVwUHJlZmVyZW5jZXMgPSBmQ2xlYW51cFByb2Nlc3Nvci5nZXRDbGVhbnVwUHJlZmVyZW5jZXMoKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldENvbXByZXNzRW1wdHlFbGVtZW50VGFncyhmYWxzZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRJbnNlcnRSZXF1aXJlZEF0dHJzKGZhbHNlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldEluc2VydE1pc3NpbmdUYWdzKHRydWUpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0UXVvdGVBdHRyVmFsdWVzKHRydWUpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0Rm9ybWF0U291cmNlKGZhbHNlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldENvbnZlcnRFT0xDb2RlcyhmYWxzZSk7Ci0KLQkJLy8gY2xlYW51cAotCQkoKEFic3RyYWN0U3RydWN0dXJlZENsZWFudXBQcm9jZXNzb3IpIGZDbGVhbnVwUHJvY2Vzc29yKS5yZWZyZXNoQ2xlYW51cFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCWZDbGVhbnVwUHJvY2Vzc29yLmNsZWFudXBNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZENsZWFudXBQcm9jZXNzb3IpIGZDbGVhbnVwUHJvY2Vzc29yKS5yZWZyZXNoQ2xlYW51cFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBjbGVhbmVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJpbnZvaWNlLmFmdGVyQ2xlYW51cEluc2VydFRhZ3NRdW90ZUF0dHJzLnhtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGNsZWFuZWQpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwSW5zZXJ0VGFncygpIHRocm93cyBJT0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgiaW52b2ljZS54bWwiKTsKLQotCQkvLyBpbml0IENsZWFudXBQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZENsZWFudXBQcmVmZXJlbmNlcyBjbGVhbnVwUHJlZmVyZW5jZXMgPSBmQ2xlYW51cFByb2Nlc3Nvci5nZXRDbGVhbnVwUHJlZmVyZW5jZXMoKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldENvbXByZXNzRW1wdHlFbGVtZW50VGFncyhmYWxzZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRJbnNlcnRSZXF1aXJlZEF0dHJzKGZhbHNlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldEluc2VydE1pc3NpbmdUYWdzKHRydWUpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0UXVvdGVBdHRyVmFsdWVzKGZhbHNlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldEZvcm1hdFNvdXJjZShmYWxzZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRDb252ZXJ0RU9MQ29kZXMoZmFsc2UpOwotCi0JCS8vIGNsZWFudXAKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRDbGVhbnVwUHJvY2Vzc29yKSBmQ2xlYW51cFByb2Nlc3NvcikucmVmcmVzaENsZWFudXBQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmQ2xlYW51cFByb2Nlc3Nvci5jbGVhbnVwTW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRDbGVhbnVwUHJvY2Vzc29yKSBmQ2xlYW51cFByb2Nlc3NvcikucmVmcmVzaENsZWFudXBQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgY2xlYW5lZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAiaW52b2ljZS5hZnRlckNsZWFudXBJbnNlcnRUYWdzLnhtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGNsZWFuZWQpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwQ29tcHJlc3NFbXB0eUVsZW1lbnRUYWdzKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoInNtYWxsLnhtbCIpOwotCi0JCS8vIGluaXQgQ2xlYW51cFByZWZlcmVuY2VzCi0JCUlTdHJ1Y3R1cmVkQ2xlYW51cFByZWZlcmVuY2VzIGNsZWFudXBQcmVmZXJlbmNlcyA9IGZDbGVhbnVwUHJvY2Vzc29yLmdldENsZWFudXBQcmVmZXJlbmNlcygpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0Q29tcHJlc3NFbXB0eUVsZW1lbnRUYWdzKHRydWUpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0SW5zZXJ0UmVxdWlyZWRBdHRycyhmYWxzZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRJbnNlcnRNaXNzaW5nVGFncyhmYWxzZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRRdW90ZUF0dHJWYWx1ZXMoZmFsc2UpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0Rm9ybWF0U291cmNlKHRydWUpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0Q29udmVydEVPTENvZGVzKGZhbHNlKTsKLQotCQkvLyBjbGVhbnVwCi0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkQ2xlYW51cFByb2Nlc3NvcikgZkNsZWFudXBQcm9jZXNzb3IpLnJlZnJlc2hDbGVhbnVwUHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkNsZWFudXBQcm9jZXNzb3IuY2xlYW51cE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkQ2xlYW51cFByb2Nlc3NvcikgZkNsZWFudXBQcm9jZXNzb3IpLnJlZnJlc2hDbGVhbnVwUHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGNsZWFuZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gInNtYWxsLmFmdGVyQ29tcHJlc3NFbXB0eUVsZW1lbnRUYWdzLnhtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGNsZWFuZWQpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwSFRNTCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCS8vIGdldCBtb2RlbAotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJjbGVhbnVwLmh0bWwiKTsKLQotCQkvLyBpbml0IENsZWFudXBQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZENsZWFudXBQcmVmZXJlbmNlcyBjbGVhbnVwUHJlZmVyZW5jZXMgPSBmSFRNTENsZWFudXBQcm9jZXNzb3IuZ2V0Q2xlYW51cFByZWZlcmVuY2VzKCk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRUYWdOYW1lQ2FzZShIVE1MQ29yZVByZWZlcmVuY2VOYW1lcy5VUFBFUik7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRBdHRyTmFtZUNhc2UoSFRNTENvcmVQcmVmZXJlbmNlTmFtZXMuTE9XRVIpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0Q29tcHJlc3NFbXB0eUVsZW1lbnRUYWdzKGZhbHNlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldEluc2VydFJlcXVpcmVkQXR0cnMoZmFsc2UpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0SW5zZXJ0TWlzc2luZ1RhZ3ModHJ1ZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRRdW90ZUF0dHJWYWx1ZXModHJ1ZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRGb3JtYXRTb3VyY2UoZmFsc2UpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0Q29udmVydEVPTENvZGVzKGZhbHNlKTsKLQotCQkvLyBjbGVhbnVwCi0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkQ2xlYW51cFByb2Nlc3NvcikgZkhUTUxDbGVhbnVwUHJvY2Vzc29yKS5yZWZyZXNoQ2xlYW51cFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCWZIVE1MQ2xlYW51cFByb2Nlc3Nvci5jbGVhbnVwTW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRDbGVhbnVwUHJvY2Vzc29yKSBmSFRNTENsZWFudXBQcm9jZXNzb3IpLnJlZnJlc2hDbGVhbnVwUHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGNsZWFuZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gImNsZWFudXAuYWZ0ZXJDbGVhbnVwLmh0bWwiOwotCQlTdHJpbmcgZXhwZWN0ZWQgPSBnZXRGaWxlKGV4cGVjdGVkRmlsZU5hbWUpOwotCQljb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBjbGVhbmVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cEhUTUx0d2ljZSgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCS8vIGdldCBtb2RlbAotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJjbGVhbnVwLmFmdGVyQ2xlYW51cC5odG1sIik7Ci0KLQkJLy8gaW5pdCBDbGVhbnVwUHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRDbGVhbnVwUHJlZmVyZW5jZXMgY2xlYW51cFByZWZlcmVuY2VzID0gZkhUTUxDbGVhbnVwUHJvY2Vzc29yLmdldENsZWFudXBQcmVmZXJlbmNlcygpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0VGFnTmFtZUNhc2UoSFRNTENvcmVQcmVmZXJlbmNlTmFtZXMuVVBQRVIpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0QXR0ck5hbWVDYXNlKEhUTUxDb3JlUHJlZmVyZW5jZU5hbWVzLkxPV0VSKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldENvbXByZXNzRW1wdHlFbGVtZW50VGFncyhmYWxzZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRJbnNlcnRSZXF1aXJlZEF0dHJzKGZhbHNlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldEluc2VydE1pc3NpbmdUYWdzKHRydWUpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0UXVvdGVBdHRyVmFsdWVzKHRydWUpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0Rm9ybWF0U291cmNlKGZhbHNlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldENvbnZlcnRFT0xDb2RlcyhmYWxzZSk7Ci0KLQkJLy8gY2xlYW51cAotCQkoKEFic3RyYWN0U3RydWN0dXJlZENsZWFudXBQcm9jZXNzb3IpIGZIVE1MQ2xlYW51cFByb2Nlc3NvcikucmVmcmVzaENsZWFudXBQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmSFRNTENsZWFudXBQcm9jZXNzb3IuY2xlYW51cE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkQ2xlYW51cFByb2Nlc3NvcikgZkhUTUxDbGVhbnVwUHJvY2Vzc29yKS5yZWZyZXNoQ2xlYW51cFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBjbGVhbmVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJjbGVhbnVwLmFmdGVyQ2xlYW51cC5odG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgY2xlYW5lZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0vLwlwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cEpTUEVtcHR5VGFnczEoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCS8vIGdldCBtb2RlbAotLy8JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoImxvZ2luLmpzcCIpOwotLy8KLS8vCQkvLyBpbml0IENsZWFudXBQcmVmZXJlbmNlcwotLy8JCUlTdHJ1Y3R1cmVkQ2xlYW51cFByZWZlcmVuY2VzIGNsZWFudXBQcmVmZXJlbmNlcyA9IGZIVE1MQ2xlYW51cFByb2Nlc3Nvci5nZXRDbGVhbnVwUHJlZmVyZW5jZXMoKTsKLS8vCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0VGFnTmFtZUNhc2UoQ29tbW9uTW9kZWxQcmVmZXJlbmNlTmFtZXMuVVBQRVIpOwotLy8JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRBdHRyTmFtZUNhc2UoQ29tbW9uTW9kZWxQcmVmZXJlbmNlTmFtZXMuTE9XRVIpOwotLy8JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRDb21wcmVzc0VtcHR5RWxlbWVudFRhZ3MoZmFsc2UpOwotLy8JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRJbnNlcnRSZXF1aXJlZEF0dHJzKGZhbHNlKTsKLS8vCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0SW5zZXJ0TWlzc2luZ1RhZ3ModHJ1ZSk7Ci0vLwkJY2xlYW51cFByZWZlcmVuY2VzLnNldFF1b3RlQXR0clZhbHVlcyh0cnVlKTsKLS8vCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0Rm9ybWF0U291cmNlKHRydWUpOwotLy8JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRDb252ZXJ0RU9MQ29kZXMoZmFsc2UpOwotLy8KLS8vCQkvLyBjbGVhbnVwCi0vLwkJKChBYnN0cmFjdFN0cnVjdHVyZWRDbGVhbnVwUHJvY2Vzc29yKSBmSFRNTENsZWFudXBQcm9jZXNzb3IpLnJlZnJlc2hDbGVhbnVwUHJlZmVyZW5jZXMgPSBmYWxzZTsKLS8vCQlmSFRNTENsZWFudXBQcm9jZXNzb3IuY2xlYW51cE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0vLwkJKChBYnN0cmFjdFN0cnVjdHVyZWRDbGVhbnVwUHJvY2Vzc29yKSBmSFRNTENsZWFudXBQcm9jZXNzb3IpLnJlZnJlc2hDbGVhbnVwUHJlZmVyZW5jZXMgPSB0cnVlOwotLy8KLS8vCQkvLyBjb21wYXJlCi0vLwkJU3RyaW5nIGNsZWFuZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0vLwkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAibG9naW4uYWZ0ZXJDbGVhbnVwLmpzcCI7Ci0vLwkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLS8vCQljb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBjbGVhbmVkKTsKLS8vCi0vLwkJLy8gcmVsZWFzZSBtb2RlbAotLy8JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLS8vCX0KLS8vCi0vLwlwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cEpTUEVtcHR5VGFnczIoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCS8vIGdldCBtb2RlbAotLy8JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoInN1YnNjcmlwdGlvbi5qc3AiKTsKLS8vCi0vLwkJLy8gaW5pdCBDbGVhbnVwUHJlZmVyZW5jZXMKLS8vCQlJU3RydWN0dXJlZENsZWFudXBQcmVmZXJlbmNlcyBjbGVhbnVwUHJlZmVyZW5jZXMgPSBmSFRNTENsZWFudXBQcm9jZXNzb3IuZ2V0Q2xlYW51cFByZWZlcmVuY2VzKCk7Ci0vLwkJY2xlYW51cFByZWZlcmVuY2VzLnNldFRhZ05hbWVDYXNlKENvbW1vbk1vZGVsUHJlZmVyZW5jZU5hbWVzLlVQUEVSKTsKLS8vCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0QXR0ck5hbWVDYXNlKENvbW1vbk1vZGVsUHJlZmVyZW5jZU5hbWVzLkxPV0VSKTsKLS8vCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0Q29tcHJlc3NFbXB0eUVsZW1lbnRUYWdzKGZhbHNlKTsKLS8vCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0SW5zZXJ0UmVxdWlyZWRBdHRycyhmYWxzZSk7Ci0vLwkJY2xlYW51cFByZWZlcmVuY2VzLnNldEluc2VydE1pc3NpbmdUYWdzKHRydWUpOwotLy8JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRRdW90ZUF0dHJWYWx1ZXModHJ1ZSk7Ci0vLwkJY2xlYW51cFByZWZlcmVuY2VzLnNldEZvcm1hdFNvdXJjZSh0cnVlKTsKLS8vCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0Q29udmVydEVPTENvZGVzKGZhbHNlKTsKLS8vCi0vLwkJLy8gY2xlYW51cAotLy8JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkQ2xlYW51cFByb2Nlc3NvcikgZkhUTUxDbGVhbnVwUHJvY2Vzc29yKS5yZWZyZXNoQ2xlYW51cFByZWZlcmVuY2VzID0gZmFsc2U7Ci0vLwkJZkhUTUxDbGVhbnVwUHJvY2Vzc29yLmNsZWFudXBNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotLy8JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkQ2xlYW51cFByb2Nlc3NvcikgZkhUTUxDbGVhbnVwUHJvY2Vzc29yKS5yZWZyZXNoQ2xlYW51cFByZWZlcmVuY2VzID0gdHJ1ZTsKLS8vCi0vLwkJLy8gY29tcGFyZQotLy8JCVN0cmluZyBjbGVhbmVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotLy8JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gInN1YnNjcmlwdGlvbi5hZnRlckNsZWFudXAuanNwIjsKLS8vCQlTdHJpbmcgZXhwZWN0ZWQgPSBnZXRGaWxlKGV4cGVjdGVkRmlsZU5hbWUpOwotLy8JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGNsZWFuZWQpOwotLy8KLS8vCQkvLyByZWxlYXNlIG1vZGVsCi0vLwkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotLy8JfQotCi0JcHJvdGVjdGVkIFN0cmluZyByZWFkRmlsZShTdHJpbmcgZmlsZU5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBpbnB1dFN0cmluZyA9IG51bGw7Ci0JCUlucHV0U3RyZWFtIGZpbGVJbnB1dFN0cmVhbSA9IG51bGw7Ci0KLQkJdHJ5IHsKLQkJCWZpbGVJbnB1dFN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlTmFtZSk7Ci0KLQkJCWJ5dGVbXSBpbnB1dEJ1ZmZlciA9IG5ldyBieXRlWzIwNDhdOwotCQkJaW5wdXRTdHJpbmcgPSBuZXcgU3RyaW5nKCk7Ci0JCQlpbnQgYnl0ZXNSZWFkID0gLTE7Ci0KLQkJCXdoaWxlICh0cnVlKSB7Ci0JCQkJYnl0ZXNSZWFkID0gZmlsZUlucHV0U3RyZWFtLnJlYWQoaW5wdXRCdWZmZXIpOwotCQkJCWlmIChieXRlc1JlYWQgPT0gLTEpCi0JCQkJCWJyZWFrOwotCQkJCVN0cmluZyBidWZmZXJTdHJpbmcgPSBuZXcgU3RyaW5nKGlucHV0QnVmZmVyLCAwLCBieXRlc1JlYWQpOwotCQkJCS8vYnVmZmVyU3RyaW5nID0gYnVmZmVyU3RyaW5nLnN1YnN0cmluZygwLCBieXRlc1JlYWQpOwotCQkJCWlucHV0U3RyaW5nID0gaW5wdXRTdHJpbmcuY29uY2F0KGJ1ZmZlclN0cmluZyk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAoZmlsZUlucHV0U3RyZWFtICE9IG51bGwpCi0JCQkJZmlsZUlucHV0U3RyZWFtLmNsb3NlKCk7Ci0JCX0KLQotCQlyZXR1cm4gaW5wdXRTdHJpbmc7Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIHByaW50RXhjZXB0aW9uKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKLQkJZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSgpOwotCX0KLQotCXByb3RlY3RlZCBJU3RydWN0dXJlZE1vZGVsIGdldE1vZGVsKFN0cmluZyBmaWxlTmFtZSkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBudWxsOwotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG51bGw7Ci0KLQkJdHJ5IHsKLQkJCVN0cmluZyBpbnB1dCA9IGdldEZpbGUoZmlsZU5hbWUpOwotCQkJaW5wdXRTdHJlYW0gPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oaW5wdXQuZ2V0Qnl0ZXMoIlVURi04IikpOwotCQkJU3RyaW5nIGlkID0gaW5wdXRTdHJlYW0udG9TdHJpbmcoKS5jb25jYXQoZmlsZU5hbWUpOwotCQkJc3RydWN0dXJlZE1vZGVsID0gZk1vZGVsTWFuYWdlci5nZXRNb2RlbEZvclJlYWQoaWQsIGlucHV0U3RyZWFtLCBudWxsKTsKLQkJfQotCQkvLyBzaW5jZSBpbiB0ZXN0IGNvZGUsIG5vIG5lZWQgdG8gY2F0Y2ggdGhpcwotCQkvLwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKLQkJLy8JCQlMb2dnZXIubG9nRXhjZXB0aW9uKGV4Y2VwdGlvbik7Ci0JCS8vCQl9Ci0JCWZpbmFsbHkgewotCQkJdHJ5IHsKLQkJCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKLQkJCQkvLyBob3BlbGVzcwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHN0cnVjdHVyZWRNb2RlbDsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGUoU3RyaW5nIGZpbGVOYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlyZXR1cm4gcmVhZEZpbGUoInRlc3RmaWxlcy8iLmNvbmNhdChmaWxlTmFtZSkpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNvbXBhcmUoU3RyaW5nIHRlc3RjYXNlTmFtZSwgU3RyaW5nIGV4cGVjdGVkLCBTdHJpbmcgY2xlYW5lZCkgewotCQlpZiAoY2xlYW5lZC5jb21wYXJlVG8oZXhwZWN0ZWQpICE9IDApIHsKLQkJCWlmIChEZWJ1Zy5mYWlsZWRUZXN0cykgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbih0ZXN0Y2FzZU5hbWUgKyAiIGZhaWxlZCIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiPT09PT09PT09PSBleHBlY3RlZCBmaWxlID09PT09PT09PT0iKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZXhwZWN0ZWQpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiPT09PT09PT09PSBjbGVhbmVkIGZpbGUgPT09PT09PT09PSIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihjbGVhbmVkKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIj09PT09PT09PT0gZXhwZWN0ZWQgZmlsZSA9PT09PT09PT09Iik7Ci0JCQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gU3RyaW5nVXRpbHMucmVwbGFjZShleHBlY3RlZCwgIlxyIiwgIlxcciIpOwotCQkJCWV4cGVjdGVkU3RyaW5nID0gU3RyaW5nVXRpbHMucmVwbGFjZShleHBlY3RlZFN0cmluZywgIlxuIiwgIlxcbiIpOwotCQkJCWV4cGVjdGVkU3RyaW5nID0gU3RyaW5nVXRpbHMucmVwbGFjZShleHBlY3RlZFN0cmluZywgIlx0IiwgIlxcdCIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihleHBlY3RlZFN0cmluZyk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCI9PT09PT09PT09IGNsZWFuZWQgZmlsZSA9PT09PT09PT09Iik7Ci0JCQkJU3RyaW5nIGNsZWFuZWRTdHJpbmcgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGNsZWFuZWQsICJcciIsICJcXHIiKTsKLQkJCQljbGVhbmVkU3RyaW5nID0gU3RyaW5nVXRpbHMucmVwbGFjZShjbGVhbmVkU3RyaW5nLCAiXG4iLCAiXFxuIik7Ci0JCQkJY2xlYW5lZFN0cmluZyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoY2xlYW5lZFN0cmluZywgIlx0IiwgIlxcdCIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihjbGVhbmVkU3RyaW5nKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIpOwotCQkJfQotCQkJYXNzZXJ0VHJ1ZShmYWxzZSk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC9Gb3JtYXRUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvRm9ybWF0VGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MjAzNTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC9Gb3JtYXRUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5jbGVhbnVwZm9ybWF0OwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLmZvcm1hdC5IVE1MRm9ybWF0UHJvY2Vzc29ySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZm9ybWF0LkFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZm9ybWF0LklTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnV0aWwuRGVidWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnV0aWwuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmZvcm1hdC5Gb3JtYXRQcm9jZXNzb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmZvcm1hdC5JU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MOwotCi1wdWJsaWMgY2xhc3MgRm9ybWF0VGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotCXByb3RlY3RlZCBJTW9kZWxNYW5hZ2VyIGZNb2RlbE1hbmFnZXIgPSBudWxsOwotCXByb3RlY3RlZCBGb3JtYXRQcm9jZXNzb3JYTUwgZkZvcm1hdFByb2Nlc3NvciA9IG51bGw7Ci0JcHJvdGVjdGVkIEhUTUxGb3JtYXRQcm9jZXNzb3JJbXBsIGZIVE1MRm9ybWF0UHJvY2Vzc29yID0gbnVsbDsKLQotCXB1YmxpYyBGb3JtYXRUZXN0ZXIoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0KLQkJLy8gZ2V0IG1vZGVsIG1hbmFnZXIKLQkJZk1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0KLQkJLy8gZ2V0IGZvcm1hdCBwcm9jZXNzb3IKLQkJZkZvcm1hdFByb2Nlc3NvciA9IG5ldyBGb3JtYXRQcm9jZXNzb3JYTUwoKTsKLQotCQkvLyBnZXQgSFRNTCBmb3JtYXQgcHJvY2Vzc29yCi0JCWZIVE1MRm9ybWF0UHJvY2Vzc29yID0gbmV3IEhUTUxGb3JtYXRQcm9jZXNzb3JJbXBsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdDI2MTk2OCgpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoIjI2MTk2OC54bWwiKTsKLQotCQkvLyBpbml0IEZvcm1hdFByZWZlcmVuY2VzCi0JCUlTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXMgZm9ybWF0UHJlZmVyZW5jZXMgPSBmRm9ybWF0UHJvY2Vzc29yLmdldEZvcm1hdFByZWZlcmVuY2VzKCk7Ci0JCSgoSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyhmYWxzZSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldExpbmVXaWR0aCg5OTkpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoIlx0Iik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhmYWxzZSk7Ci0KLQkJLy8gZm9ybWF0Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBmb3JtYXR0ZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gIjI2MTk2OC5hZnRlckRlZmF1bHRGb3JtYXQueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0VGFnT3BlbigpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoInRhZ09wZW4ueG1sIik7Ci0KLQkJLy8gaW5pdCBGb3JtYXRQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZkZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKElTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnMoZmFsc2UpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRMaW5lV2lkdGgoOTk5KTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0SW5kZW50KCJcdCIpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRDbGVhckFsbEJsYW5rTGluZXMoZmFsc2UpOwotCi0JCS8vIGZvcm1hdAotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCWZGb3JtYXRQcm9jZXNzb3IuZm9ybWF0TW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgZm9ybWF0dGVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJ0YWdPcGVuLnhtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGZvcm1hdHRlZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdFRhZ09wZW5UYWdDbG9zZSgpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoInRhZ09wZW5UYWdDbG9zZS54bWwiKTsKLQotCQkvLyBpbml0IEZvcm1hdFByZWZlcmVuY2VzCi0JCUlTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXMgZm9ybWF0UHJlZmVyZW5jZXMgPSBmRm9ybWF0UHJvY2Vzc29yLmdldEZvcm1hdFByZWZlcmVuY2VzKCk7Ci0JCSgoSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyhmYWxzZSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldExpbmVXaWR0aCg5OTkpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoIlx0Iik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhmYWxzZSk7Ci0KLQkJLy8gZm9ybWF0Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBmb3JtYXR0ZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gInRhZ09wZW5UYWdDbG9zZS54bWwiOwotCQlTdHJpbmcgZXhwZWN0ZWQgPSBnZXRGaWxlKGV4cGVjdGVkRmlsZU5hbWUpOwotCQljb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBmb3JtYXR0ZWQpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRUYWdzKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgidGFncy54bWwiKTsKLQotCQkvLyBpbml0IEZvcm1hdFByZWZlcmVuY2VzCi0JCUlTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXMgZm9ybWF0UHJlZmVyZW5jZXMgPSBmRm9ybWF0UHJvY2Vzc29yLmdldEZvcm1hdFByZWZlcmVuY2VzKCk7Ci0JCSgoSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyhmYWxzZSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldExpbmVXaWR0aCg5OTkpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoIlx0Iik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhmYWxzZSk7Ci0KLQkJLy8gZm9ybWF0Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBmb3JtYXR0ZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gInRhZ3MuYWZ0ZXJEZWZhdWx0Rm9ybWF0LnhtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGZvcm1hdHRlZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdEVtcHR5KCkgewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgiZW1wdHkueG1sIik7Ci0KLQkJLy8gaW5pdCBGb3JtYXRQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZkZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKElTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnMoZmFsc2UpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRMaW5lV2lkdGgoOTk5KTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0SW5kZW50KCJcdCIpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRDbGVhckFsbEJsYW5rTGluZXMoZmFsc2UpOwotCi0JCS8vIGZvcm1hdAotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCWZGb3JtYXRQcm9jZXNzb3IuZm9ybWF0TW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgZm9ybWF0dGVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJlbXB0eS54bWwiOwotCQlTdHJpbmcgZXhwZWN0ZWQgPSBnZXRGaWxlKGV4cGVjdGVkRmlsZU5hbWUpOwotCQljb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBmb3JtYXR0ZWQpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRPbmVTcGFjZSgpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoIm9uZVNwYWNlLnhtbCIpOwotCi0JCS8vIGluaXQgRm9ybWF0UHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZGb3JtYXRQcm9jZXNzb3IuZ2V0Rm9ybWF0UHJlZmVyZW5jZXMoKTsKLQkJKChJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKGZhbHNlKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0TGluZVdpZHRoKDk5OSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldEluZGVudCgiXHQiKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKGZhbHNlKTsKLQotCQkvLyBmb3JtYXQKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmRm9ybWF0UHJvY2Vzc29yLmZvcm1hdE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGZvcm1hdHRlZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAiZW1wdHkueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0T25lQ2hhcigpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoIm9uZUNoYXIueG1sIik7Ci0KLQkJLy8gaW5pdCBGb3JtYXRQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZkZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKElTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnMoZmFsc2UpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRMaW5lV2lkdGgoOTk5KTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0SW5kZW50KCJcdCIpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRDbGVhckFsbEJsYW5rTGluZXMoZmFsc2UpOwotCi0JCS8vIGZvcm1hdAotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCWZGb3JtYXRQcm9jZXNzb3IuZm9ybWF0TW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgZm9ybWF0dGVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJvbmVDaGFyLnhtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGZvcm1hdHRlZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdFNwYWNlcygpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoInNwYWNlcy54bWwiKTsKLQotCQkvLyBpbml0IEZvcm1hdFByZWZlcmVuY2VzCi0JCUlTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXMgZm9ybWF0UHJlZmVyZW5jZXMgPSBmRm9ybWF0UHJvY2Vzc29yLmdldEZvcm1hdFByZWZlcmVuY2VzKCk7Ci0JCSgoSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyhmYWxzZSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldExpbmVXaWR0aCg5OTkpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoIlx0Iik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhmYWxzZSk7Ci0KLQkJLy8gZm9ybWF0Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBmb3JtYXR0ZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gImVtcHR5LnhtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGZvcm1hdHRlZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdENoYXJzKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgiY2hhcnMueG1sIik7Ci0KLQkJLy8gaW5pdCBGb3JtYXRQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZkZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKElTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnMoZmFsc2UpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRMaW5lV2lkdGgoOTk5KTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0SW5kZW50KCJcdCIpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRDbGVhckFsbEJsYW5rTGluZXMoZmFsc2UpOwotCi0JCS8vIGZvcm1hdAotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCWZGb3JtYXRQcm9jZXNzb3IuZm9ybWF0TW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgZm9ybWF0dGVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJjaGFycy54bWwiOwotCQlTdHJpbmcgZXhwZWN0ZWQgPSBnZXRGaWxlKGV4cGVjdGVkRmlsZU5hbWUpOwotCQljb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBmb3JtYXR0ZWQpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRTcGFjZXNBbmRDaGFycygpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoInNwYWNlc0FuZENoYXJzLnhtbCIpOwotCi0JCS8vIGluaXQgRm9ybWF0UHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZGb3JtYXRQcm9jZXNzb3IuZ2V0Rm9ybWF0UHJlZmVyZW5jZXMoKTsKLQkJKChJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKGZhbHNlKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0TGluZVdpZHRoKDk5OSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldEluZGVudCgiXHQiKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKGZhbHNlKTsKLQotCQkvLyBmb3JtYXQKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmRm9ybWF0UHJvY2Vzc29yLmZvcm1hdE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGZvcm1hdHRlZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAiY2hhcnMueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0KCkgewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgic21hbGwueG1sIik7Ci0KLQkJLy8gaW5pdCBGb3JtYXRQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZkZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKElTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnMoZmFsc2UpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRMaW5lV2lkdGgoOTk5KTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0SW5kZW50KCJcdCIpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRDbGVhckFsbEJsYW5rTGluZXMoZmFsc2UpOwotCi0JCS8vIGZvcm1hdAotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCWZGb3JtYXRQcm9jZXNzb3IuZm9ybWF0TW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgZm9ybWF0dGVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJzbWFsbC5hZnRlckRlZmF1bHRGb3JtYXQueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0U3BsaXRMaW5lc1NwbGl0TXVsdGlBdHRycygpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoInNtYWxsLnhtbCIpOwotCi0JCS8vIGluaXQgRm9ybWF0UHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZGb3JtYXRQcm9jZXNzb3IuZ2V0Rm9ybWF0UHJlZmVyZW5jZXMoKTsKLQkJKChJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKHRydWUpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRMaW5lV2lkdGgoNzIpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoIlx0Iik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhmYWxzZSk7Ci0KLQkJLy8gZm9ybWF0Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBmb3JtYXR0ZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gInNtYWxsLmFmdGVyU3BsaXRMaW5lc1NwbGl0TXVsdGlBdHRyc0Zvcm1hdC54bWwiOwotCQlTdHJpbmcgZXhwZWN0ZWQgPSBnZXRGaWxlKGV4cGVjdGVkRmlsZU5hbWUpOwotCQljb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBmb3JtYXR0ZWQpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRTcGxpdExpbmVzKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgic21hbGwueG1sIik7Ci0KLQkJLy8gaW5pdCBGb3JtYXRQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZkZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKElTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnMoZmFsc2UpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRMaW5lV2lkdGgoNzIpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoIlx0Iik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhmYWxzZSk7Ci0KLQkJLy8gZm9ybWF0Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBmb3JtYXR0ZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gInNtYWxsLmFmdGVyU3BsaXRMaW5lc0Zvcm1hdC54bWwiOwotCQlTdHJpbmcgZXhwZWN0ZWQgPSBnZXRGaWxlKGV4cGVjdGVkRmlsZU5hbWUpOwotCQljb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBmb3JtYXR0ZWQpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRCbG9ja0NvbW1lbnRzKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgiYmxvY2tDb21tZW50cy54bWwiKTsKLQotCQkvLyBpbml0IEZvcm1hdFByZWZlcmVuY2VzCi0JCUlTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXMgZm9ybWF0UHJlZmVyZW5jZXMgPSBmRm9ybWF0UHJvY2Vzc29yLmdldEZvcm1hdFByZWZlcmVuY2VzKCk7Ci0JCSgoSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyhmYWxzZSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldExpbmVXaWR0aCg5OTkpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoIlx0Iik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhmYWxzZSk7Ci0KLQkJLy8gZm9ybWF0Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBmb3JtYXR0ZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gImJsb2NrQ29tbWVudHMuYWZ0ZXJEZWZhdWx0Rm9ybWF0LnhtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGZvcm1hdHRlZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdElubGluZUNvbW1lbnRzKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgiaW5saW5lQ29tbWVudHMueG1sIik7Ci0KLQkJLy8gaW5pdCBGb3JtYXRQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZkZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKElTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnMoZmFsc2UpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRMaW5lV2lkdGgoOTk5KTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0SW5kZW50KCJcdCIpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRDbGVhckFsbEJsYW5rTGluZXMoZmFsc2UpOwotCi0JCS8vIGZvcm1hdAotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCWZGb3JtYXRQcm9jZXNzb3IuZm9ybWF0TW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgZm9ybWF0dGVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJpbmxpbmVDb21tZW50cy5hZnRlckRlZmF1bHRGb3JtYXQueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0SW5saW5lQ29tbWVudHNTcGxpdExpbmVzU3BsaXRNdWx0aUF0dHJzKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgiaW5saW5lQ29tbWVudHMueG1sIik7Ci0KLQkJLy8gaW5pdCBGb3JtYXRQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZkZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKElTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnModHJ1ZSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldExpbmVXaWR0aCg3Mik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldEluZGVudCgiXHQiKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKGZhbHNlKTsKLQotCQkvLyBmb3JtYXQKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmRm9ybWF0UHJvY2Vzc29yLmZvcm1hdE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGZvcm1hdHRlZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAiaW5saW5lQ29tbWVudHMuYWZ0ZXJTcGxpdExpbmVzU3BsaXRNdWx0aUF0dHJzRm9ybWF0LnhtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGZvcm1hdHRlZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEhUTUxGb3JtYXQoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJIaXRDb3VudGVySW50cm8uaHRtbCIpOwotCi0JCS8vIGluaXQgRm9ybWF0UHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZIVE1MRm9ybWF0UHJvY2Vzc29yLmdldEZvcm1hdFByZWZlcmVuY2VzKCk7Ci0JCSgoSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyhmYWxzZSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldExpbmVXaWR0aCg3Mik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldEluZGVudCgiXHQiKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKGZhbHNlKTsKLQotCQkvLyBmb3JtYXQKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZIVE1MRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkhUTUxGb3JtYXRQcm9jZXNzb3IuZm9ybWF0TW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZIVE1MRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGZvcm1hdHRlZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAiSGl0Q291bnRlckludHJvLmFmdGVyRGVmYXVsdEZvcm1hdC5odG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIHJlYWRGaWxlKFN0cmluZyBmaWxlTmFtZSkgewotCQlTdHJpbmcgaW5wdXRTdHJpbmcgPSBudWxsOwotCQlJbnB1dFN0cmVhbSBmaWxlSW5wdXRTdHJlYW0gPSBudWxsOwotCi0JCXRyeSB7Ci0JCQlmaWxlSW5wdXRTdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZU5hbWUpOwotCi0JCQlieXRlW10gaW5wdXRCdWZmZXIgPSBuZXcgYnl0ZVsxMDI0XTsKLQkJCWlucHV0U3RyaW5nID0gbmV3IFN0cmluZygpOwotCQkJaW50IGJ5dGVzUmVhZCA9IC0xOwotCi0JCQl3aGlsZSAodHJ1ZSkgewotCQkJCWJ5dGVzUmVhZCA9IGZpbGVJbnB1dFN0cmVhbS5yZWFkKGlucHV0QnVmZmVyKTsKLQkJCQlpZiAoYnl0ZXNSZWFkID09IC0xKQotCQkJCQlicmVhazsKLQkJCQlTdHJpbmcgYnVmZmVyU3RyaW5nID0gbmV3IFN0cmluZyhpbnB1dEJ1ZmZlcik7Ci0JCQkJYnVmZmVyU3RyaW5nID0gYnVmZmVyU3RyaW5nLnN1YnN0cmluZygwLCBieXRlc1JlYWQpOwotCQkJCWlucHV0U3RyaW5nID0gaW5wdXRTdHJpbmcuY29uY2F0KGJ1ZmZlclN0cmluZyk7Ci0JCQl9Ci0KLQkJCWlmIChmaWxlSW5wdXRTdHJlYW0gIT0gbnVsbCkKLQkJCQlmaWxlSW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7Ci0JCQlwcmludEV4Y2VwdGlvbihleGNlcHRpb24pOwotCQl9Ci0KLQkJcmV0dXJuIGlucHV0U3RyaW5nOwotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBwcmludEV4Y2VwdGlvbihFeGNlcHRpb24gZXhjZXB0aW9uKSB7Ci0JCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSVN0cnVjdHVyZWRNb2RlbCBnZXRNb2RlbChTdHJpbmcgZmlsZU5hbWUpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBudWxsOwotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG51bGw7Ci0KLQkJdHJ5IHsKLQkJCVN0cmluZyBpbnB1dCA9IGdldEZpbGUoZmlsZU5hbWUpOwotCQkJaW5wdXRTdHJlYW0gPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oaW5wdXQuZ2V0Qnl0ZXMoIlVURjgiKSk7Ci0JCQlTdHJpbmcgaWQgPSBpbnB1dFN0cmVhbS50b1N0cmluZygpLmNvbmNhdChmaWxlTmFtZSk7Ci0JCQlzdHJ1Y3R1cmVkTW9kZWwgPSBmTW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yUmVhZChpZCwgaW5wdXRTdHJlYW0sIG51bGwpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7Ci0JCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQl0cnkgewotCQkJCWlucHV0U3RyZWFtLmNsb3NlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgewotCQkJCS8vIGhvcGVsZXNzCi0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gc3RydWN0dXJlZE1vZGVsOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZShTdHJpbmcgZmlsZU5hbWUpIHsKLQkJcmV0dXJuIHJlYWRGaWxlKCJ0ZXN0ZmlsZXMvIi5jb25jYXQoZmlsZU5hbWUpKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBjb21wYXJlKFN0cmluZyB0ZXN0Y2FzZU5hbWUsIFN0cmluZyBleHBlY3RlZCwgU3RyaW5nIGZvcm1hdHRlZCkgewotCQlpZiAoZm9ybWF0dGVkLmNvbXBhcmVUbyhleHBlY3RlZCkgIT0gMCkgewotCQkJaWYgKERlYnVnLmZhaWxlZFRlc3RzKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKHRlc3RjYXNlTmFtZSArICIgZmFpbGVkIik7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCI9PT09PT09PT09IGV4cGVjdGVkIGZpbGUgPT09PT09PT09PSIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihleHBlY3RlZCk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCI9PT09PT09PT09IGZvcm1hdHRlZCBmaWxlID09PT09PT09PT0iKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZm9ybWF0dGVkKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIj09PT09PT09PT0gZXhwZWN0ZWQgZmlsZSA9PT09PT09PT09Iik7Ci0JCQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gU3RyaW5nVXRpbHMucmVwbGFjZShleHBlY3RlZCwgIlxyIiwgIlxcciIpOwotCQkJCWV4cGVjdGVkU3RyaW5nID0gU3RyaW5nVXRpbHMucmVwbGFjZShleHBlY3RlZFN0cmluZywgIlxuIiwgIlxcbiIpOwotCQkJCWV4cGVjdGVkU3RyaW5nID0gU3RyaW5nVXRpbHMucmVwbGFjZShleHBlY3RlZFN0cmluZywgIlx0IiwgIlxcdCIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihleHBlY3RlZFN0cmluZyk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCI9PT09PT09PT09IGZvcm1hdHRlZCBmaWxlID09PT09PT09PT0iKTsKLQkJCQlTdHJpbmcgZm9ybWF0dGVkU3RyaW5nID0gU3RyaW5nVXRpbHMucmVwbGFjZShmb3JtYXR0ZWQsICJcciIsICJcXHIiKTsKLQkJCQlmb3JtYXR0ZWRTdHJpbmcgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGZvcm1hdHRlZFN0cmluZywgIlxuIiwgIlxcbiIpOwotCQkJCWZvcm1hdHRlZFN0cmluZyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoZm9ybWF0dGVkU3RyaW5nLCAiXHQiLCAiXFx0Iik7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKGZvcm1hdHRlZFN0cmluZyk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iKTsKLQkJCX0KLQkJCWFzc2VydFRydWUoZmFsc2UpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzLzI2MTk2OC5hZnRlckRlZmF1bHRGb3JtYXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvMjYxOTY4LmFmdGVyRGVmYXVsdEZvcm1hdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ODM4ODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvMjYxOTY4LmFmdGVyRGVmYXVsdEZvcm1hdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08dGFnPgotCTx0MT48L3QxPgotCTx0Mj48L3QyCi0JPHQzPjwvdDM+Ci08L3RhZz4KLTx0YWc+Ci0JPHQxPjwvdDE+Ci0JPHQyPgotCQkvdDI+Ci0JCTx0Mz48L3QzPgotPC90YWc+Ci08dGFnPgotCTx0MT48L3QxPgotCXQyPgotCTwvdDI+Ci0JPHQzPjwvdDM+Ci08L3RhZz4KLTx0YWc+Ci0JPHQxPjwvdDE+Ci0JPHQyPC90Mj4KLQk8dDM+PC90Mz4KLTwvdGFnPgotPHRhZz4KLQk8dDE+PC90MT4KLQk8dDI8L3QyCi0JPHQzPjwvdDM+Ci08L3RhZz4KLTx0YWc+Ci0JPHQxPjwvdDE+Ci0JPHQyPC90Mj4KLQk8dDM+PC90Mz4KLTwvdGFnPgotPHRhZz4KLQk8dDE+PC90MT4KLQk8dDI8L3QyPgotCTx0Mz48L3QzPgotPC90YWc+Ci08dGFnPgotCTx0MT48L3QxPgotCTx0MjwvdDI+Ci0JdDM+Ci0JPC90Mz4KLTwvdGFnPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzLzI2MTk2OC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy8yNjE5NjgueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTk4MWU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzLzI2MTk2OC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08dGFnPgotICAgICAgIDx0MT48L3QxPgotICAgICAgIDx0Mj48L3QyCi0gICAgICAgPHQzPjwvdDM+Ci08L3RhZz4KLTx0YWc+Ci0gICAgICAgPHQxPjwvdDE+Ci0gICAgICAgPHQyPi90Mj4KLSAgICAgICA8dDM+PC90Mz4KLTwvdGFnPgotPHRhZz4KLSAgICAgICA8dDE+PC90MT4KLSAgICAgICB0Mj48L3QyPgotICAgICAgIDx0Mz48L3QzPgotPC90YWc+Ci08dGFnPgotICAgICAgIDx0MT48L3QxPgotICAgICAgIDx0MjwvdDI+Ci0gICAgICAgPHQzPjwvdDM+Ci08L3RhZz4KLTx0YWc+Ci0gICAgICAgPHQxPjwvdDE+Ci0gICAgICAgPHQyPC90MiAgICAgICA8dDM+PC90Mz4KLTwvdGFnPgotPHRhZz4KLSAgICAgICA8dDE+PC90MT4KLSAgICAgICA8dDI8L3QyICAgICAgPiAgICAgICA8dDM+PC90Mz4KLTwvdGFnPgotPHRhZz4KLSAgICAgICA8dDE+PC90MT4KLSAgICAgICA8dDI8L3QyICAgICAgPjx0Mz48L3QzPgotPC90YWc+Ci08dGFnPgotICAgICAgIDx0MT48L3QxPgotICAgICAgIDx0MjwvdDIgICAgICA+dDM+PC90Mz4KLTwvdGFnPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL0hpdENvdW50ZXJJbnRyby5hZnRlckRlZmF1bHRGb3JtYXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL0hpdENvdW50ZXJJbnRyby5hZnRlckRlZmF1bHRGb3JtYXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNjYjY0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9IaXRDb3VudGVySW50cm8uYWZ0ZXJEZWZhdWx0Rm9ybWF0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08SFRNTD4KLTxIRUFEPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPgotPFRJVExFPlBhZ2UgSGl0IENvdW50ZXIgSW50cm9kdWN0aW9uPC9USVRMRT4KLTxMSU5LIHJlbD0iU1RZTEVTSEVFVCIgaHJlZj0iLi4vdGhlbWUvTWFzdGVyLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9IRUFEPgotPEJPRFk+Ci08Q0VOVEVSPgotPEZPUk0gbmFtZT0ibXlGb3JtIiBtZXRob2Q9InBvc3QiCi0JYWN0aW9uPSIuLi9Db250cm9sbGVycy9TYW1wbGVDb250cm9sbGVyIj4KLTxUQUJMRSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjUwMCI+Ci0JPFRCT0RZPgotCQk8VFI+Ci0JCQk8VEQgY29sc3Bhbj0iMiI+PElNRyBzcmM9Ii4uL2ltYWdlcy9jbGVhclBpeGVsLmdpZiIgd2lkdGg9IjEiCi0JCQkJaGVpZ2h0PSIyNSIgYWx0PSIiPjwvVEQ+Ci0JCTwvVFI+Ci0JCTxUUj4KLQkJCTxURCByb3dzcGFuPSIyIiBhbGlnbj0iTEVGVCIgd2lkdGg9IjIyMCIgaGVpZ2h0PSIzMDAiPjxJTUcKLQkJCQlzcmM9Ii4uL2ltYWdlcy9oaXRDb3VudGVyMDEuZ2lmIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwMCIgYWx0PSIiPjwvVEQ+Ci0JCQk8VEQgYWxpZ249IkxFRlQiIHdpZHRoPSIzODAiPgotCQkJPFA+PEZPTlQgc2l6ZT0iKzEiPjxCPlBhZ2UgSGl0IENvdW50ZXIgU2FtcGxlPC9CPjwvRk9OVD48L1A+Ci0JCQk8L1REPgotCQk8L1RSPgotCQk8VFI+Ci0JCQk8VEQgYWxpZ249IkxFRlQiIHZhbGlnbj0iVE9QIj4KLQkJCTxQPjxGT05UIHNpemU9Ii0xIj5UaGlzIHNhbXBsZSBzaG93cyB5b3UgaG93IHRvIHVzZSBhIEphdmEgc2VydmxldCB0bwotCQkJY291bnQgaG93IG1hbnkgdGltZXMgYSBwYWdlIHdhcyB2aXNpdGVkLjwvRk9OVD48L1A+Ci0JCQk8UD48Rk9OVCBzaXplPSItMSI+VGhpcyBzYW1wbGUgcmVxdWlyZXMgYSBkYXRhYmFzZSB0byBzdG9yZSB0aGUKLQkJCWNvdW50ZXIuIElmIHlvdSBoYXZlIG5vdCBhbHJlYWR5IGluc3RhbGxlZCBhbmQgY29uZmlndXJlZCB5b3VyCi0JCQlkYXRhYmFzZSBmb3IgdGhlIFdlYlNwaGVyZSBzYW1wbGVzLCByZWZlciB0byA8QQotCQkJCWhyZWY9Ii4uL0NvbmZpZ3VyYXRpb24vREJDb25maWcuaHRtbCI+RGF0YWJhc2UgQ29uZmlndXJhdGlvbjwvQT4gZm9yCi0JCQlpbnN0cnVjdGlvbnMuIDwvRk9OVD48L1A+Ci0JCQk8UD48Rk9OVCBzaXplPSItMSI+PEEgaHJlZj0iamF2YXNjcmlwdDpkb2N1bWVudC5teUZvcm0uc3VibWl0KCkiCi0JCQkJdGFyZ2V0PSJfc2VsZiI+IDxCPlJ1biB0aGlzIHNhbXBsZTwvQj48L0E+IDwvRk9OVD48L1A+Ci0JCQk8SU5QVVQgbmFtZT0iY29tbWFuZCIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iSGl0Q291bnRlclZpZXciIC8+IDxJTlBVVAotCQkJCW5hbWU9ImRiX3JlZ2lvbiIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0idHJ1ZSIgLz48L1REPgotCQk8L1RSPgotPC9UQUJMRT4KLTwvRk9STT4KLTxCUj4KLTxUQUJMRSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjUwMCI+Ci0JPFRCT0RZPgotCQk8VFI+Ci0JCQk8VEQgYWxpZ249IkNFTlRFUiI+Ci0JCQk8UD48Qj48Rk9OVCBzaXplPSItMSI+SG93IHRoaXMgc2FtcGxlIHdvcmtzOjwvRk9OVD4KLQkJCTwvVEQ+Ci0JCTwvVFI+Ci0JCTxUUj4KLQkJCTxURD4KLQkJCTxUQUJMRSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIj4KLQkJCQk8VEJPRFk+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD48IS0tICMjIyMjIyMjIyMjIyBob3Jpem9udGFsIHNwYWNlciAjIyMjIyMjIyMjIyMgLS0+IDxJTUcKLQkJCQkJCQlzcmM9Ii4uL2ltYWdlcy9jbGVhclBpeGVsLmdpZiIgd2lkdGg9IjE1IiBoZWlnaHQ9IjEiIGFsdD0iIj4gPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPjwvVEQ+Ci0JCQkJCQk8VEQ+Ci0JCQkJCQk8UD48Rk9OVCBzaXplPSItMSI+VGhpcyBzYW1wbGUgaGFzOjwvRk9OVD48L1A+Ci0JCQkJCQk8VUw+Ci0JCQkJCQkJPExJPjxGT05UIHNpemU9Ii0xIj5BIEphdmEgc2VydmxldCB0aGF0IGluY3JlbWVudHMgYSBjb3VudGVyCi0JCQkJCQkJZXZlcnkgdGltZSBpdCBpcyBpbnZva2VkIDwvRk9OVD4KLQkJCQkJCQk8VUw+Ci0JCQkJCQkJCTxMST48Rk9OVCBzaXplPSItMSI+QSBKYXZhIFNlcnZlciBQYWdlIChKU1ApIHRoYXQgaW52b2tlcyB0aGUKLQkJCQkJCQkJc2VydmxldCBhbmQgZGlzcGxheXMgdGhlIGNvdW50ZXIgPC9GT05UPgotCQkJCQkJCQk8TEk+PEZPTlQgc2l6ZT0iLTEiPkEgLnNlcnZsZXQgZmlsZSB0aGF0IHByb3ZpZGVzIGluZm9ybWF0aW9uCi0JCQkJCQkJCWFib3V0IHRoZSBzZXJ2bGV0IHRvIHRoZSBXZWJTcGhlcmUgQXBwbGljYXRpb24gU2VydmVyIDwvRk9OVD4KLQkJCQkJCQk8L1VMPgotCQkJCQkJPC9VTD4KLQkJCQkJCTxQPjxGT05UIHNpemU9Ii0xIj5UaGUgQXBwbGljYXRpb24gU2VydmVyIHByb2Nlc3NlcyAuanNwIGZpbGVzCi0JCQkJCQl3aXRoIGl0cyBKU1AgMS4wIHByb2Nlc3NvciBzZXJ2bGV0LiBJdCBoYW5kbGVzIHRoZSAmbHQ7anNwOmluY2x1ZGUKLQkJCQkJCS4uLiAvJmd0OyB0YWcgYXMgYSBzZXJ2ZXItc2lkZSBpbmNsdWRlLCByZXBsYWNpbmcgdGhlIHRhZyB3aXRoIHRoZQotCQkJCQkJdmFyaWFibGUgZGF0YSBnZW5lcmF0ZWQgYnkgdGhlIHNlcnZsZXQuPC9GT05UPjwvUD4KLQkJCQkJCTwvVEQ+Ci0JCQkJCQk8VEQ+PCEtLSAjIyMjIyMjIyMjIyMgaG9yaXpvbnRhbCBzcGFjZXIgIyMjIyMjIyMjIyMjIC0tPiA8SU1HCi0JCQkJCQkJc3JjPSIuLi9pbWFnZXMvY2xlYXJQaXhlbC5naWYiIHdpZHRoPSIxNSIgaGVpZ2h0PSIxIiBhbHQ9IiI+IDwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT48L1REPgotCQkJCTwvVEJPRFk+Ci0JCQk8L1RBQkxFPgotCQkJPC9URD4KLQkJPC9UUj4KLQk8L1RCT0RZPgotPC9UQUJMRT4KLTxCUj4KLTxUQUJMRSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjUwMCIgYm9yZGVyPSIwIgotCWNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjUwMCIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIKLQljZWxsc3BhY2luZz0iMCIgd2lkdGg9IjUwMCIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiCi0Jd2lkdGg9IjUwMCI+Ci0JPFRCT0RZPgotCQk8VFI+Ci0JCQk8VEQgYWxpZ249IkNFTlRFUiI+Ci0JCQk8UD48Qj48Rk9OVCBzaXplPSItMSI+IEhvdyB0byB1c2UgdGhpcyBzYW1wbGUgb24geW91ciB3ZWIgcGFnZTo8L0ZPTlQ+PC9CPjwvUD4KLQkJCTwvVEQ+Ci0JCTwvVFI+Ci0JCTxUUj4KLQkJCTxURD4KLQkJCTxUQUJMRSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIj4KLQkJCQk8VEJPRFk+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD48IS0tICMjIyMjIyMjIyMjIyBob3Jpem9udGFsIHNwYWNlciAjIyMjIyMjIyMjIyMgLS0+IDxJTUcKLQkJCQkJCQlzcmM9Ii4uL2ltYWdlcy9jbGVhclBpeGVsLmdpZiIgd2lkdGg9IjE1IiBoZWlnaHQ9IjEiIGFsdD0iIj4gPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPjwvVEQ+Ci0JCQkJCQk8VEQ+Ci0JCQkJCQk8UD48Rk9OVCBzaXplPSItMSI+WW91IGNhbiBhZGQgdGhpcyBleGFjdCB0YWcgdG8gYW55IEhUTUwgcGFnZSB5b3UKLQkJCQkJCWhhdmUgb24geW91ciBzaXRlLiBSZW5hbWUgdGhlIEhUTUwgZmlsZSB3aXRoIGEgLmpzcCBmaWxlCi0JCQkJCQlleHRlbnNpb24sIHB1dCB0aGUgSmF2YSAuY2xhc3MgYW5kIC5zZXJ2bGV0IGZpbGVzIGluIHRoZSBjbGFzc2VzCi0JCQkJCQlmb2xkZXIsIHB1Ymxpc2guLi4uIGFuZCB5b3UncmUgcmVhZHkgdG8gZ28uPC9GT05UPjwvUD4KLQkJCQkJCTwvVEQ+Ci0JCQkJCQk8VEQ+PCEtLSAjIyMjIyMjIyMjIyMgaG9yaXpvbnRhbCBzcGFjZXIgIyMjIyMjIyMjIyMjIC0tPiA8SU1HCi0JCQkJCQkJc3JjPSIuLi9pbWFnZXMvY2xlYXJQaXhlbC5naWYiIHdpZHRoPSIxNSIgaGVpZ2h0PSIxIiBhbHQ9IiI+IDwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT48L1REPgotCQkJCQk8L1RSPgotCQkJCTwvVEJPRFk+Ci0JCQk8L1RBQkxFPgotCQkJPC9URD4KLQkJPC9UUj4KLQk8L1RCT0RZPgotPC9UQUJMRT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL0hpdENvdW50ZXJJbnRyby5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvSGl0Q291bnRlckludHJvLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjY2NhMTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvSGl0Q291bnRlckludHJvLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxIVE1MPgotCQk8SEVBRD4KLTxNRVRBIGh0dHAtZXF1aXYKLT0KLSJDb250ZW50LVR5cGUiCi1jb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPgotPFRJVExFPlBhZ2UgSGl0IENvdW50ZXIgSW50cm9kdWN0aW9uPC9USVRMRT4KLTxMSU5LIHJlbD0iU1RZTEVTSEVFVCIgaHJlZj0iLi4vdGhlbWUvTWFzdGVyLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9IRUFEPgotPEJPRFk+Ci08Q0VOVEVSPgotPEZPUk0gbmFtZSAgID0gICAibXlGb3JtIiBtZXRob2Q9InBvc3QiIGFjdGlvbj0iLi4vQ29udHJvbGxlcnMvU2FtcGxlQ29udHJvbGxlciI+Ci0JPFRBQkxFIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iNTAwIj4KLQk8VEJPRFk+Ci0JCTxUUj4KLQkJCTxURCBjb2xzcGFuPSIyIj4KLQkJCTxJTUcgc3JjPSIuLi9pbWFnZXMvY2xlYXJQaXhlbC5naWYiIHdpZHRoPSIxIiBoZWlnaHQ9IjI1IiBhbHQ9IiI+PC9URD4KLQkJPC9UUj4KLQkJPFRSPgotCQkJPFREIHJvd3NwYW49IjIiIGFsaWduPSJMRUZUIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjMwMCI+PElNRyBzcmM9Ii4uL2ltYWdlcy9oaXRDb3VudGVyMDEuZ2lmIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwMCIgYWx0PSIiPjwvVEQ+Ci0JCQk8VEQgYWxpZ249IkxFRlQiIHdpZHRoPSIzODAiPgotCQkJPFA+PEZPTlQgc2l6ZT0iKzEiPjxCPlBhZ2UgSGl0IENvdW50ZXIgU2FtcGxlPC9CPjwvRk9OVD48L1A+Ci0JCQk8L1REPgotCQk8L1RSPgotCQk8VFI+Ci0JCQk8VEQgYWxpZ249IkxFRlQiIHZhbGlnbj0iVE9QIj4KLQkJCTxQPjxGT05UIHNpemU9Ii0xIj5UaGlzIHNhbXBsZSBzaG93cyB5b3UgaG93IHRvIHVzZSBhIEphdmEgc2VydmxldCB0byBjb3VudCBob3cgbWFueSB0aW1lcyBhIHBhZ2Ugd2FzIHZpc2l0ZWQuPC9GT05UPjwvUD4KLQkJCTxQPjxGT05UIHNpemU9Ii0xIj5UaGlzIHNhbXBsZSByZXF1aXJlcyBhIGRhdGFiYXNlIHRvIHN0b3JlIHRoZSBjb3VudGVyLiBJZiB5b3UgaGF2ZSBub3QgYWxyZWFkeSBpbnN0YWxsZWQgYW5kIGNvbmZpZ3VyZWQgeW91ciBkYXRhYmFzZSBmb3IgdGhlIFdlYlNwaGVyZSBzYW1wbGVzLCByZWZlciB0byA8QSBocmVmPSIuLi9Db25maWd1cmF0aW9uL0RCQ29uZmlnLmh0bWwiPkRhdGFiYXNlIENvbmZpZ3VyYXRpb248L0E+IGZvciBpbnN0cnVjdGlvbnMuIDwvRk9OVD48L1A+Ci0JCQk8UD48Rk9OVCBzaXplPSItMSI+PEEgaHJlZj0iamF2YXNjcmlwdDpkb2N1bWVudC5teUZvcm0uc3VibWl0KCkiIHRhcmdldD0iX3NlbGYiPiA8Qj5SdW4gdGhpcyBzYW1wbGU8L0I+PC9BPiA8L0ZPTlQ+PC9QPgotCQkJPElOUFVUIG5hbWU9ImNvbW1hbmQiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IkhpdENvdW50ZXJWaWV3IiAvPiA8SU5QVVQgbmFtZT0iZGJfcmVnaW9uIiB0eXBlPSJoaWRkZW4iIHZhbHVlPSJ0cnVlIiAvPjwvVEQ+Ci0JCTwvVFI+Ci08L1RBQkxFPgotPC9GT1JNPgotPEJSPgotPFRBQkxFIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iNTAwIj4KLQk8VEJPRFk+Ci0JCTxUUj4KLQkJCTxURCBhbGlnbj0iQ0VOVEVSIj4KLQkJCTxQPjxCPjxGT05UIHNpemU9Ii0xIj5Ib3cgdGhpcyBzYW1wbGUgd29ya3M6PC9GT05UPgotCQkJPC9URD4KLQkJPC9UUj4KLQkJPFRSPgotCQkJPFREPgotCQkJPFRBQkxFIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiPgotCQkJCTxUQk9EWT4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwhLS0gIyMjIyMjIyMjIyMjIGhvcml6b250YWwgc3BhY2VyICMjIyMjIyMjIyMjIyAtLT4gPElNRyBzcmM9Ii4uL2ltYWdlcy9jbGVhclBpeGVsLmdpZiIgd2lkdGg9IjE1IiBoZWlnaHQ9IjEiIGFsdD0iIj4gPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPjwvVEQ+Ci0JCQkJCQk8VEQ+Ci0JCQkJCQk8UD48Rk9OVCBzaXplPSItMSI+VGhpcyBzYW1wbGUgaGFzOjwvRk9OVD48L1A+Ci0JCQkJCQk8VUw+Ci0JCQkJCQkJPExJPjxGT05UIHNpemU9Ii0xIj5BIEphdmEgc2VydmxldCB0aGF0IGluY3JlbWVudHMgYSBjb3VudGVyIGV2ZXJ5IHRpbWUgaXQgaXMgaW52b2tlZCA8L0ZPTlQ+Ci08VUw+Ci0JPExJPjxGT05UIHNpemU9Ii0xIj5BIEphdmEgU2VydmVyIFBhZ2UgKEpTUCkgdGhhdCBpbnZva2VzIHRoZSBzZXJ2bGV0IGFuZCBkaXNwbGF5cyB0aGUgY291bnRlciA8L0ZPTlQ+Ci0JPExJPjxGT05UIHNpemU9Ii0xIj5BIC5zZXJ2bGV0IGZpbGUgdGhhdCBwcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VydmxldCB0byB0aGUgV2ViU3BoZXJlIEFwcGxpY2F0aW9uIFNlcnZlciA8L0ZPTlQ+Ci08L1VMPgotCQkJCQkJPC9VTD4KLQkJCQkJCTxQPjxGT05UIHNpemU9Ii0xIj5UaGUgQXBwbGljYXRpb24gU2VydmVyIHByb2Nlc3NlcyAuanNwIGZpbGVzIHdpdGggaXRzIEpTUCAxLjAgcHJvY2Vzc29yIHNlcnZsZXQuIEl0IGhhbmRsZXMgdGhlICZsdDtqc3A6aW5jbHVkZSAuLi4gLyZndDsgdGFnIGFzIGEgc2VydmVyLXNpZGUgaW5jbHVkZSwgcmVwbGFjaW5nIHRoZSB0YWcgd2l0aCB0aGUgdmFyaWFibGUgZGF0YSBnZW5lcmF0ZWQgYnkgdGhlIHNlcnZsZXQuPC9GT05UPjwvUD4KLQkJCQkJCTwvVEQ+Ci0JCQkJCQk8VEQ+PCEtLSAjIyMjIyMjIyMjIyMgaG9yaXpvbnRhbCBzcGFjZXIgIyMjIyMjIyMjIyMjIC0tPiA8SU1HIHNyYz0iLi4vaW1hZ2VzL2NsZWFyUGl4ZWwuZ2lmIiB3aWR0aD0iMTUiIGhlaWdodD0iMSIgYWx0PSIiPiA8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+PC9URD4KLQkJCQk8L1RCT0RZPgotCQkJPC9UQUJMRT4KLQkJCTwvVEQ+Ci0JCTwvVFI+Ci0JPC9UQk9EWT4KLTwvVEFCTEU+Ci08QlI+Ci08VEFCTEUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI1MDAiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iNTAwIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjUwMCIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI1MDAiPgotCTxUQk9EWT4KLQkJPFRSPgotCQkJPFREIGFsaWduPSJDRU5URVIiPgotCQkJPFA+PEI+PEZPTlQgc2l6ZT0iLTEiPgotSG93IHRvIHVzZSB0aGlzIHNhbXBsZSBvbiB5b3VyIHdlYiBwYWdlOjwvRk9OVD48L0I+PC9QPgotCQkJPC9URD4KLQkJPC9UUj4KLQkJPFRSPgotCQkJPFREPgotCQkJPFRBQkxFIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiPgotCQkJCTxUQk9EWT4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwhLS0gIyMjIyMjIyMjIyMjIGhvcml6b250YWwgc3BhY2VyICMjIyMjIyMjIyMjIyAtLT4gPElNRyBzcmM9Ii4uL2ltYWdlcy9jbGVhclBpeGVsLmdpZiIgd2lkdGg9IjE1IiBoZWlnaHQ9IjEiIGFsdD0iIj4gPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPjwvVEQ+Ci0JCQkJCQk8VEQ+Ci0JCQkJCQk8UD48Rk9OVCBzaXplPSItMSI+WW91IGNhbiBhZGQgdGhpcyBleGFjdCB0YWcgdG8gYW55IEhUTUwgcGFnZSB5b3UgaGF2ZSBvbiB5b3VyIHNpdGUuIFJlbmFtZSB0aGUgSFRNTCBmaWxlIHdpdGggYSAuanNwIGZpbGUgZXh0ZW5zaW9uLCBwdXQgdGhlIEphdmEgLmNsYXNzIGFuZCAuc2VydmxldCBmaWxlcyBpbiB0aGUgY2xhc3NlcyBmb2xkZXIsIHB1Ymxpc2guLi4uIGFuZCB5b3UncmUgcmVhZHkgdG8gZ28uPC9GT05UPjwvUD4KLQkJCQkJCTwvVEQ+Ci0JCQkJCQk8VEQ+PCEtLSAjIyMjIyMjIyMjIyMgaG9yaXpvbnRhbCBzcGFjZXIgIyMjIyMjIyMjIyMjIC0tPiA8SU1HIHNyYz0iLi4vaW1hZ2VzL2NsZWFyUGl4ZWwuZ2lmIiB3aWR0aD0iMTUiIGhlaWdodD0iMSIgYWx0PSIiPiA8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQk8L1RCT0RZPgotCQkJPC9UQUJMRT4KLQkJCTwvVEQ+Ci0JCQkJPC9UUj4KLQkJCQkJPC9UQk9EWT4KLQkJCQkJCTwvVEFCTEU+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9ibG9ja0NvbW1lbnRzLmFmdGVyRGVmYXVsdEZvcm1hdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9ibG9ja0NvbW1lbnRzLmFmdGVyRGVmYXVsdEZvcm1hdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3Yjg0MTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvYmxvY2tDb21tZW50cy5hZnRlckRlZmF1bHRGb3JtYXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCEtLSBjb21tZW50IG9uIGEgbmV3IGxpbmUgLS0+Ci08bWVudSBkYXRlPSIxMS8zMC8yMDAwIj48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT4KLQk8cm5hbWU+TGlhbSdzIENob3dkZXIgSG91c2UgYW5kIEdyaWxsPC9ybmFtZT48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT4KLQk8IS0tIGJsb2NrIGNvbW1lbnQKLQkJQmxhY2sgPSAjMDAwMDAwCi0JCVNpbHZlcj0gI0MwQzBDMAotCQlHcmF5ICA9ICM4MDgwODAKLQkJV2hpdGUgPSAjRkZGRkZGCi0JLS0+Ci0JPCEtLSBibG9jayBjb21tZW50Ci0JCUJsYWNrID0gIzAwMDAwMAotCQlTaWx2ZXI9ICNDMEMwQzAKLQkJR3JheSAgPSAjODA4MDgwCi0JCVdoaXRlID0gI0ZGRkZGRgotCS0tPgotCTxpdGVtIHR5cGU9ImFwcGV0aXplciI+Ci0JCTxkZXNjPldhcm1lZCBsZWVrIHNhbGFkPC9kZXNjPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPgotCQk8cHJpY2UgdW5pdHM9InVzZCI+Ni45NTwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGV4dCAtLT48L3ByaWNlPgotCQk8cHJpY2UgdW5pdHM9InVzZCIgdW5pdHM9InVzZCI+Ni45NTwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGV4dCAtLT48L3ByaWNlPgotCTwvaXRlbT4KLQk8IS0tIGNvbW1lbnQgb24gYSBuZXcgbGluZSAtLT4KLQk8IS0tICAgY29tbWVudCAgIG9uICAgYSAgIG5ldyAgIGxpbmUgICAtLT4KLQk8IS0tY29tbWVudCBvbiBhIG5ldyBsaW5lIHdpdGggbm8gc3BhY2UtLT4KLQk8IS0tCi0JCU5vIHNwYWNlCi0JLS0+Ci0JPCEtLQotCQlPbmVTcGFjZQotCS0tPgotCTwhLS0KLQkJT25lIHRhYgotCS0tPgotCTwhLS0KLQkJVGhpcyBpcyBhIGxvbmcgcGFyYWdyYXBoLgotCQkKLQkJVGhlIHRleHQKLQkJaW4gdGhpcyBwYXJhZ3JhcGggc2hvdWxkIE5PVCBiZSByZS1mbG93ZWQuLS0+Ci0JPCEtLQotCQlUaGlzIGlzIGEgbG9uZyBwYXJhZ3JhcGguCi0JCQotCQlUaGUgdGV4dAotCQlpbiB0aGlzIHBhcmFncmFwaCBzaG91bGQgTk9UIGJlIHJlLWZsb3dlZC4KLQktLT4KLQk8IS0tCi0JCVRoaXMgaXMgYSBsb25nIHBhcmFncmFwaC4KLQkJCi0JCQotCQlUaGUgdGV4dAotCQlpbiB0aGlzIHBhcmFncmFwaCBzaG91bGQgTk9UIGJlIHJlLWZsb3dlZC4KLQktLT4KLQk8IS0tCi0JCVRoaXMgaXMgYSBsb25nIHBhcmFncmFwaC4KLQkJCi0JCQotCQkKLQkJVGhlIHRleHQKLQkJaW4gdGhpcyBwYXJhZ3JhcGggc2hvdWxkIE5PVCBiZSByZS1mbG93ZWQuCi0JLS0+Ci0JPCEtLQotCQkKLQkJVGhpcyBpcyBhIGxvbmcgcGFyYWdyYXBoLgotCQkKLQkJVGhlIHRleHQKLQkJaW4gdGhpcyBwYXJhZ3JhcGggc2hvdWxkIE5PVCBiZSByZS1mbG93ZWQuCi0JLS0+Ci0JPCEtLQotCQkKLQkJVGhpcyBpcyBhIGxvbmcgcGFyYWdyYXBoLgotCQkKLQkJVGhlIHRleHQKLQkJaW4gdGhpcyBwYXJhZ3JhcGggc2hvdWxkIE5PVCBiZSByZS1mbG93ZWQuCi0JCQotCS0tPgotCTwhLS0KLQkJCi0JCQotCQkKLQkJVGhpcyBpcyBhIGxvbmcgcGFyYWdyYXBoLgotCQkKLQkJCi0JCQotCQlUaGUgdGV4dAotCQlpbiB0aGlzIHBhcmFncmFwaCBzaG91bGQgTk9UIGJlIHJlLWZsb3dlZC4KLQkJCi0JCQotCQkKLQktLT4KLQk8aXRlbSB0eXBlPSJhcHBldGl6ZXIiPgotCQk8IS0tIGEKLQkJCWItLT4KLQkJPCEtLSBhCi0JCQliIC0tPgotCQk8IS0tCi0JCQlhCi0JCQliLS0+Ci0JCTwhLS0KLQkJCWEKLQkJCWIgLS0+Ci0JCTwhLS0KLQkJCWEKLQkJCWIKLQkJLS0+Ci0JCTwhLS0gYQotCQkJYgotCQktLT4KLQkJPCEtLQotCQkJCi0JCQkKLQkJCQotCQkJYQotCQkJCi0JCQkKLQkJCQotCQkJYgotCQkJCi0JCQkKLQkJCQotCQktLT4KLQkJPGRlc2M+UHJvc2NpdXR0byBoYW0gd2l0aCBtZWxvbjwvZGVzYz4KLQkJPCEtLSB0aGlzIGJsb2NrIGNvbW1lbnQgc2hvdWxkIGxpbmUgdXAgd2l0aCB0aGUgc2liaWxpbmdzCi0JCQlCbGFjayA9ICMwMDAwMDAKLQkJCVNpbHZlcj0gI0MwQzBDMAotCQkJR3JheSAgPSAjODA4MDgwCi0JCQlXaGl0ZSA9ICNGRkZGRkYKLQkJLS0+Ci0JCTxwcmljZSB1bml0cz0idXNkIj43Ljk1PC9wcmljZT4KLQkJPCEtLSBjb21tZW50IGJlZm9yZSBtaXNzaW5nIGVuZCB0YWcgLS0+Ci08L21lbnU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvYmxvY2tDb21tZW50cy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9ibG9ja0NvbW1lbnRzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk2OTg3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9ibG9ja0NvbW1lbnRzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLQk8IS0tIGNvbW1lbnQgb24gYSBuZXcgbGluZSAtLT4KLQkJPG1lbnUgZGF0ZT0iMTEvMzAvMjAwMCI+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+Ci0JPHJuYW1lPkxpYW0ncyBDaG93ZGVyIEhvdXNlIGFuZCBHcmlsbDwvcm5hbWU+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+Ci0JPCEtLSBibG9jayBjb21tZW50Ci0JCUJsYWNrID0gIzAwMDAwMAotCQlTaWx2ZXI9ICNDMEMwQzAKLQkJR3JheSAgPSAjODA4MDgwCi0JCVdoaXRlID0gI0ZGRkZGRgotCS0tPgotCTwhLS0gYmxvY2sgY29tbWVudAotCQkJQmxhY2sgPSAjMDAwMDAwCi0JCVNpbHZlcj0gI0MwQzBDMAotCQkJCUdyYXkgID0gIzgwODA4MAotCVdoaXRlID0gI0ZGRkZGRgotLS0+Ci0JPGl0ZW0gdHlwZT0iYXBwZXRpemVyIj4KLQkJPGRlc2M+V2FybWVkIGxlZWsgc2FsYWQ8L2Rlc2M+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+PHByaWNlIHVuaXRzPSJ1c2QiPjYuOTU8IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRleHQgLS0+PC9wcmljZT48cHJpY2UgdW5pdHM9InVzZCIgdW5pdHM9InVzZCI+Ni45NTwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGV4dCAtLT48L3ByaWNlPgotCTwvaXRlbT4KLQk8IS0tIGNvbW1lbnQgb24gYSBuZXcgbGluZSAtLT4KLQk8IS0tICAgY29tbWVudCAgIG9uICAgYSAgIG5ldyAgIGxpbmUgICAtLT4KLQk8IS0tY29tbWVudCBvbiBhIG5ldyBsaW5lIHdpdGggbm8gc3BhY2UtLT4KLTwhLS0KLU5vIHNwYWNlCi0tLT4KLTwhLS0KLSBPbmVTcGFjZQotLS0+Ci08IS0tCi0JT25lIHRhYgotLS0+Ci08IS0tCi1UaGlzIGlzIGEgbG9uZyBwYXJhZ3JhcGguCi0KLVRoZSB0ZXh0Ci1pbiB0aGlzIHBhcmFncmFwaCBzaG91bGQgTk9UIGJlIHJlLWZsb3dlZC4tLT4KLTwhLS0KLVRoaXMgaXMgYSBsb25nIHBhcmFncmFwaC4KLQotVGhlIHRleHQKLWluIHRoaXMgcGFyYWdyYXBoIHNob3VsZCBOT1QgYmUgcmUtZmxvd2VkLgotLS0+Ci08IS0tCi1UaGlzIGlzIGEgbG9uZyBwYXJhZ3JhcGguCi0KLQotVGhlIHRleHQKLWluIHRoaXMgcGFyYWdyYXBoIHNob3VsZCBOT1QgYmUgcmUtZmxvd2VkLgotLS0+Ci08IS0tCi1UaGlzIGlzIGEgbG9uZyBwYXJhZ3JhcGguCi0KLQotCi1UaGUgdGV4dAotaW4gdGhpcyBwYXJhZ3JhcGggc2hvdWxkIE5PVCBiZSByZS1mbG93ZWQuCi0tLT4KLTwhLS0KLQotVGhpcyBpcyBhIGxvbmcgcGFyYWdyYXBoLgotCi1UaGUgdGV4dAotaW4gdGhpcyBwYXJhZ3JhcGggc2hvdWxkIE5PVCBiZSByZS1mbG93ZWQuCi0tLT4KLTwhLS0KLQotVGhpcyBpcyBhIGxvbmcgcGFyYWdyYXBoLgotCi1UaGUgdGV4dAotaW4gdGhpcyBwYXJhZ3JhcGggc2hvdWxkIE5PVCBiZSByZS1mbG93ZWQuCi0KLS0tPgotPCEtLQotCi0KLQotVGhpcyBpcyBhIGxvbmcgcGFyYWdyYXBoLgotCi0KLQotVGhlIHRleHQKLWluIHRoaXMgcGFyYWdyYXBoIHNob3VsZCBOT1QgYmUgcmUtZmxvd2VkLgotCi0KLQotLS0+Ci0JPGl0ZW0gdHlwZT0iYXBwZXRpemVyIj4KLTwhLS0gYQotICAgICBiLS0+Ci08IS0tIGEKLSAgICAgYiAtLT4KLTwhLS0KLWEKLSAgICAgYi0tPgotPCEtLQotYQotICAgICBiIC0tPgotPCEtLQotYQotICAgICBiCi0tLT4KLTwhLS0gYQotICAgICBiCi0gICAgICAtLT4KLTwhLS0KLQotCi0KLWEKLQotCi0KLWIKLQotCi0KLS0tPgotCQk8ZGVzYz5Qcm9zY2l1dHRvIGhhbSB3aXRoIG1lbG9uPC9kZXNjPgotPCEtLSB0aGlzIGJsb2NrIGNvbW1lbnQgc2hvdWxkIGxpbmUgdXAgd2l0aCB0aGUgc2liaWxpbmdzCi0JQmxhY2sgPSAjMDAwMDAwCi0JU2lsdmVyPSAjQzBDMEMwCi0JR3JheSAgPSAjODA4MDgwCi0JV2hpdGUgPSAjRkZGRkZGCi0tLT4KLQk8cHJpY2UgdW5pdHM9InVzZCI+Ny45NTwvcHJpY2U+Ci0JPCEtLSBjb21tZW50IGJlZm9yZSBtaXNzaW5nIGVuZCB0YWcgLS0+Ci08L21lbnU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvY2hhcnMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvY2hhcnMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmJhOGY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2NoYXJzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWFiYwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2NsZWFudXAuYWZ0ZXJDbGVhbnVwLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9jbGVhbnVwLmFmdGVyQ2xlYW51cC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDdkOGQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2NsZWFudXAuYWZ0ZXJDbGVhbnVwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotPEhUTUw+Ci08SEVBRD4KLSAgIDxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiIC8+Ci0gICA8TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9Ik1vemlsbGEvNC43MiBbZW5dIChXaW5kb3dzIE5UIDUuMDsgVSkgW05ldHNjYXBlXSIgLz4KLTxUSVRMRT48L1RJVExFPgotPC9IRUFEPgotCi1UaGlzIGlzIGEgcGFnZSBvZiBzb21lIG9mIHRoZSB0ZWNobmljYWwgc3R1ZmYgdGhhdCBJJ3ZlIHdyaXR0ZW4gdXNpbmcgdmFyaW91cwotcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLiAgQ2xpY2sgb24gdGhlIGxpbmtzIHRvIGxlYXJuIG1vcmUgYWJvdXQgdGhlIHByb2plY3RzIG9yCi10byBzZWUgdGhlIHNvdXJjZSBjb2RlLjxCUj4KLTxJPk5vdGU6IEZlZWwgZnJlZSB0byBjb3B5LCBzdGVhbCwgbW9kaWZ5LCBkZXN0cm95IHdoYXQgeW91IHdpbGwuLi48L0k+PEJSPjxCUj4KLTxIUj4KLQotPEgyPiBQcm9ncmFtcyBhbmQgVXRpbGl0aWVzIDwvSDI+Ci08VUw+Ci08TEk+PEEgaHJlZj0ibWFrZW1ha2UuaHRtbCI+IDxJPiBBdXRvbWF0aWMKLU1ha2VmaWxlIFV0aWxpdHk6IDwvST48L0E+IFRoaXMgZ2VuZXJhdGVzIGEgTWFrZWZpbGUgYW5kIHVwZGF0ZXMgaXQgYWNjb3JkaW5nCi10byB0aGUgZmlsZXMgY3VycmVudGx5IGluIHlvdXIgZGlyZWN0b3J5LgotVGFrZSBhIGdhbmRlciBhdCB0aGUgc291cmNlIGhlcmU6IDxBCi1ocmVmPSJtYWtlbWFrZS5jIj4gPEk+IG1ha2VtYWtlLmMgCi0gPC9JPjwvQT4gCi0KLTxCUj48QlI+Ci08L0xJPjxMST48QSBocmVmPSJtYWlsc29ydC5wbCIgPiA8ST4KLW1haWwgZmlsZSBzb3J0ZXI6ICA8L0k+IDwvQT4gCi1UaGlzIHV0aWxpdHkgcGFyc2VzIGEgbWFpbCBmaWxlIGFuZCBjcmVhdGVzIGFub3RoZXIgbWFpbCBmaWxlIGNvbnRhaW5pbmcgb25seQotdGhlIG1lc3NhZ2VzIHNwZWNpZmllZCBieSBwYXJhbWF0ZXJzLiAgRm9yIGV4YW1wbGUsIHBhcnNlIGEgbWFpbCBhcmNoaXZlIGZpbGUKLShvbGQtbWFpbC1KYW4tMjAwMCkgYW5kIGV4dHJhY3QgYWxsIG9mIHRoZSBtZXNzYWdlcyBmcm9tIGRhdmVrQHlvdXJtb20uY29tIG9yCi13aXRoIHRoZSBzdWJqZWN0IE1hcmlsbGlvbi4gIFRoaXMgZ3V5IHdhcyB3aGlwcGVkIHVwIGluIFBlcmwuCi08QlI+PEJSPgotCi08L0xJPjxMST48QSBocmVmPSJlbGVjdHJvbmljTm90ZXMuaHRtbCIgPiA8ST4KLUVsZWN0cm9uaWMgTm90ZXM6ICA8L0k+IDwvQT4gVGhpcyBpcyBhbiBvcmlnaW5hbCBpZGVhIChnYXNwISkgdGhhdCBJIGRldmVsb3BlZCB3aGljaCBpcyBhCi1zeXN0ZW0gZm9yIGtlZXBpbmcgbGl0dGxlIHJlbWluZGVycyB0byB5b3Vyc2VsZiBkdXJpbmcgdGhlIGRheSBhbmQgaGF2aW5nIHRoZW0KLXNlbnQgdG8geW91IGFsbCBpbiBvbmUgY29udmVuaWVudCBmaWxlIHZpYSBlbWFpbCBhdCB0aGUgZW5kIG9mIHRoZSBkYXkuICAKLTxCUj48QlI+Ci0KLTwvTEk+PExJPjxBIGhyZWY9ImhlYWRlci5odG1sIiA+IDxJPiBDL0MrKyBIZWFkZXIgZmlsZQotdG8gSW1wbGVtZW50YXRpb24gZmlsZSBjb252ZXJ0ZXI6IDwvST4gPC9BPgotVGhpcyBpcyBhIHZlcnkgdXNlZnVsIHRvb2wgd3JpdHRlbiBpbiBDKysgdGhhdCBjb252ZXJ0cyAuaCBmaWxlcyB0byBlbXB0eQotaW1wbGVtZW50YXRpb24gKC5DKSBmaWxlcy4gIAotPEJSPjxCUj4KLTwvTEk+PExJPjxBIGhyZWY9Im1hdHJpeC5odG1sIiA+IDxJPiBNYXRyaXggTWFuaXB1bGF0aW9uCi1QYWNrYWdlOiA8L0k+PC9BPiBUaGlzIGlzIGEgcGFja2FnZSB0aGF0IGRvZXMgYWxsIHNvcnRzIG9mIGNvb2wgbWFuaXB1bGF0aW9ucwotd2l0aCBtYXRyaWNlcywgc3VjaCBhcyBHYXVzc2lhbiBFbGltaW5hdGlvbiwgTm9ybWFsIEVxdWF0aW9ucywgVmFuZGVybW9uZGUKLU1hdHJpY2VzLCBDaG9sZXNreSBGYWN0b3JpemF0aW9uLCBFcnJvciBBbmFseXNpcywgYW5kIG1vcmUgc3R1ZmYgdGhhbiB5b3Ugd291bGQKLWV2ZXIgd2FudCB0byBkbyB3aXRoIGEgbWF0cml4LiAgSXQgaXMgd3JpdHRlbiBpbiBnb29kIG9sJyBDLgotCi08QlIgPjxCUiAgPgotPC9MST48TEk+IAotPEEgaHJlZj0ibGlzcC5odG1sIiA+IDxJPlNldCBPcGVyYXRpb25zOiA8L0k+PC9BPiA8ST48L0k+IEEgcHJvZ3JhbSB0aGF0IHBlcmZvcm1zIHNldAotb3BlcmF0aW9ucyBvbiBhIGxpc3QuICBUaGlzIGlzIHdyaXR0ZW4gaW4gTGlzcCwgb2YgYWxsIHRoaW5ncy4gIFRoZXJlJ3MgYWxzbwotc29tZSBleGFtcGxlcyBvZiBteSBvd24gaW50ZXJwcmV0YXRpb25zIG9mIHNvbWUgTGlzcCBmdW5jdGlvbnMuIExpc3AgaXMgYSBnb29kCi1sYW5ndWFnZSBmb3IgQUkgYW5kIHRoaW5ncyBvZiB0aGF0IG5hdHVyZS4gIAotSXQgcmVsaWVzIGhlYXZpbHkgb24gcmVjdXJzaW9uLCBzbyBpdCB0YWtlcyBhIGRpZmZlcmVudAotbWluZHNldCB0byBwcm9ncmFtIGluIHRoaXMgbGFuZ3VhZ2UuICBCdXQgdXNlZCBjb3JyZWN0bHkgYW5kIGZvciBpdHMgaW50ZW5kZWQKLXB1cnBvc2UsIExpc3AgaXMgYSB2ZXJ5IHVuaXF1ZSBhbmQgcG93ZXJmdWwgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuCi08QlIgICA+PEJSICAgID4KLQotPC9MST48TEk+IAotPEEgaHJlZj0ibG9jLmh0bWwiID4gPEk+IExpbmVzIE9mIENvZGUgQ291bnRlcjoKLTwvST48L0E+PEk+PC9JPiAgVGhpcyBpcyBpcyBMT0MgY291bnRlciB0aGF0IEkgd3JvdGUgaW4gUGVybCB0aGF0IGNhbGN1bGF0ZXMgdGhlIG51bWJlciBvZgotdW5jb21tZW50ZWQgbGluZXMgb2YgY29kZSBpbiBhIHByb2dyYW0uICBUaGlzIHdvcmtzIGZvciBhbnkgcHJvZ3JhbW1pbmcKLWxhbmd1YWdlIGFzIHlvdSBjYW4gc3VwcGx5IHRoZSBjb21tZW50IGNoYXJhY3RlciBvbiB0aGUgY29tbWFuZCBsaW5lLiAgVGhpcyBpcwotYW4gZXh0cmVtZWx5IHVzZWZ1bCBwcm9ncmFtIGZvciB1c2UgaW4gc29mdHdhcmUgbWV0cmljcy4KLTxCUiBhYmM9ImRlZiI+PEJSIGFiYz0iZGVmIiA+Ci0KLTwvTEk+PExJPjxBIGhyZWY9Imxpbndpbi5odG1sIj4gPEk+IFNpbXBsZSAqbml4IHRvCi13aW5kb3dzIHRleHQgY29udmVydGVyIDwvST48L0E+IFRoaXMgdGFrZXMgZmlsZXMgd3JpdHRlbiBpbiBMaW51eCAoYW5kIGluIHZpIG9yCi0gICAgICAgIGFuIGVkaXRvciB3aXRoIGF1dG9tYXRpYyBsaW5lIGJyZWFrcyBhZnRlciBldmVyeSA4MCBvciBzbyBjaGFycykgYW5kCi1mb3JtYXRzIGl0IHNvIGl0IHdpbGwgZGlzcGxheSBwcm9wZXJseSBpbiBXaW5kb3dzIGVudmlyb25tZW50IHNob3VsZCB5b3UgYmUKLWZvcmNlZCB0byBkbyBzby4gIAotUGVydXNlIChwZXJ1c2UsIG1pbmQgeW91LiAgSSBkb24ndCB3YW50IHRvIHNlZSBhbnkgPEk+YnJvd3Npbmc8L0k+KSB0aGUgc291cmNlIGhlcmU6IDxBCi1ocmVmPSJsaW53aW4uYyI+IDxJPiBsaW53aW4uYyAKLSA8L0k+PC9BPiAKLTxCUiBhYmMgPSAiZGVmIj48QlIgYWJjICA9ICAiZGVmIj4KLQotCi08L0xJPjxMST48Qj4gUmVncmVzc2lvbiBhbmQgU3RhbmRhcmQgRGV2aWF0aW9uOiA8L0I+IAotQSBtYXRoIGNsYXNzIHdyaXR0ZW4gaW4gSmF2YSB1c2luZyBPYmplY3QgT3JpZW50ZWQgZGVzaWduIHByaW5jaXBsZXMuICBUaGUgbWFpbgotYXNwZWN0cyBvZiB0aGUgcHJvZ3JhbSBhcmUgZm9yIGZpZ3VyaW5nIG91dCBTdGFuZGFyZCBEZXZpYXRpb24gYW5kIHRoZQotUmVncmVzc2lvbiwgd2hlbiB5b3UgaW5wdXQgYSBzZXQgb2YgeCBhbmQgeSB2YWx1ZXMuICBSZWdyZXNzaW9uIGNhbGN1bGF0aW9ucwotYXJlIG9mdGVuIHVzZWQgaW4gU29mdHdhcmUgTWV0cmljcyB0byB0byBoZWxwIGluIGVzdGltYXRpbmcgbGVuZ3RoIG9mIGNvZGUsIGFuZAotdGltZSBzcGVudCBvbiB0aGUgcHJvamVjdC48QlI+Ci0KLTxBIGhyZWY9IlJlZ3Jlc3Npb25DYWxjLmh0bWwiID4gCi08ST4gUmVncmVzc2lvbkNhbGMuamF2YSA8L0k+IDwvQT4gIFRoaXMgaXMgdGhlIG1haW4gY2xhc3MgdGhhdCBkb2VzIHRoZQotY2FsY3VsYXRpb25zLiAgSXQgY2FsY3VsYXRlcyBCMSwgQjAsIGFuZCByXjIsIHdoaWNoIGFyZSBhbGwgcGFyYW1ldGVycyBvZgotUmVncmVzc2lvbi4KLTxCUiBhYmM9ICJkZWYiPgotPEEgaHJlZj0iTWF0aENsYXNzLmh0bWwiID4gCi08ST4gTWF0aENsYXNzLmphdmEgPC9JPiAgPC9BPiBUaGlzIGlzIHNpbXBseSBhIHNtYWxsIGNsYXNzIHdoaWNoIGNhbGN1bGF0ZXMgdGhlCi1tZWFuIGFuZCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGEgdmVjdG9yIG9mIG51bWJlcnMuICBUaGlzIGlzIHVzZWQgYnkgdGhlCi1SZWdyZXNzaW9uQ2FsYyBjbGFzcyBpbiBpdHMgY2FsY3VsYXRpb25zLgotPEJSIGFiYyA9ImRlZiI+Ci08QSBocmVmPSJSZWdyZXNzaW9uLmh0bWwiID4gCi08ST4gUmVncmVzc2lvbi5qYXZhIDwvST4gIDwvQT4gVGhpcyBpcyBiYXNpY2FsbHkgdGhlIG1haW4gcm91dGluZSwgb3Igd2hlcmUgdGhlCi1wcm9ncmFtIHN0YXJ0cy4gIEl0IHB1dHMgYWxsIG9mIHRoZSBpbnB1dCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgaW50byB0d28KLXNlcGFyYXRlIHZlY3RvcnMgZm9yIHRoZSB4IGFuZCB5IHZhbHVlcy48QlI+PEJSPgotCi1BbiBleGFtcGxlIG9mIHRoZSB1c2FnZSBvZiB0aGlzIHByb2dyYW0gd291bGQgYmU6ICA8QlI+Ci1JZiB5b3UgaGFkIGEgaGlzdG9yeSBvZiBkYXRhIG9uIHlvdXIgZXN0aW1hdGVkIExpbmVzIE9mIENvZGUgKExPQykgcGVyIGNsYXNzLAotYXMgd2VsbCBhcyB0aGUgYWN0dWFsIExPQyBwZXIgY2xhc3MsIHlvdSBjb3VsZCBwdXQgdGhlc2UgaW4gdGhlIGZvcm11bGEgYW5kCi1maW5kIG91dCB0aGUgUmVncmVzc2lvbiBvZiB0aGUgZGF0YSAob3IgaG93IGZhciBhd2F5IGVhY2ggcG9pbnQgaXMgZnJvbSB0aGUKLWZ1bmN0aW9uIGxpbmUuKSAgCi0KLVlvdSB3b3VsZCBpbnB1dCB0aGUgZGF0YSBmb3IgdGhlIGVzdGltYXRlZCBMT0MsIHNlcGFyYXRlZCBieSBhIGNvbW1hLCBhbmQKLWZvbGxvd2VkIGJ5IHRoZSBhY3R1YWwgTE9DLiAgVGhlIHJlc3VsdCB3b3VsZCBiZSB0aGUgcmVncmVzc2lvbiBjYWxjdWxhdGlvbi4KLTxQUkU+Ci0lamF2YSBSZWdyZXNzaW9uIDEzMCA2NTAgOTkgMTUwICwgMTg2IDY5OSAxMzIgMjcyIAotCi1YIERhdGEgPSBbIDEzMC4wIDY1MC4wIDk5LjAgMTUwLjAgXQotWSBEYXRhID0gWyAxODYuMCA2OTkuMCAxMzIuMCAyNzIuMCBdCi1OID0gNAotQmV0YTAgPSA3Mi42OTA1MDMwNzgwMzYxCi1CZXRhMSA9IDAuOTcwMTA0OTQ0MzAzMDY2NwotclNxdWFyZWQgPSAyMjEyLjUwNDY5NzY3MzY4OQotPC9QUkU+Ci0KLTwvTEk+PC9VTD4KLQotPEhSPgotPEgyPiBLbm93bGVkZ2UgPC9IMj4KLTxVTD4KLTxMST48QSBocmVmPSJ2aW0uaHRtbCI+IDxJPiBFc3BvdXNpbmcgbXkgbG92ZQotZm9yIHZpbSEgPC9JPjwvQT4gdmltIGp1c3Qgcm9ja3MsIG9rYXkuICBSZWFsbHkuICBJZiBJIGhhZCB0byBjaG9vc2UgYmV0d2VlbiwKLWxpa2UsIHNleCwgb3IgdXNpbmcgdmltLS1sZXQncyBqdXN0IHNheSBJJ2QgYmUgb25lIG1hc3RlcmZ1bC1lZGl0aW5nIG1vbmsuIAotPEJSPjxCUj4KLQotCi08L0xJPjxMST4KLTxBIGhyZWY9Ik1CUi1MSUxPLnR4dCI+IAotPEk+IExvc3QgTElMTz8gIFJlY292ZXIuPC9JPiAgPC9BPiBJZiB5b3UgaGF2ZSBMaW51eCBpbnN0YWxsZWQgaW4gYSBtdWx0aS1ib290Ci1lbnZpcm9ubWVudCwgYW5kIHlvdSBvdmVyd3JpdGUgeW91ciBNQlIsIHlvdSBjYW4gbG9zZSBMSUxPLiAgSSByZWluc3RhbGxlZAotV2luZG93cyAoaGV5LCBJIG5lZWRlZCB0byBwbGF5IEZpbmFsIEZhbnRhc3kgVklJSSEpIGFuZCBjb3VsZG4ndCBib290IGludG8KLUxpbnV4LiAgSGVyZSdzIGhvdyBJIHJlY292ZXJlZC4KLTxCUj48QlI+Ci0KLQotCi08L0xJPjwvVUw+PEJPRFk+PC9CT0RZPgotPC9IVE1MPjxIVE1MPgotPC9IVE1MPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2NsZWFudXAuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2NsZWFudXAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI5N2EwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9jbGVhbnVwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotPGh0bWw+Ci08SEVBRD4KLSAgIDxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiIC8+Ci0gICA8TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9Ik1vemlsbGEvNC43MiBbZW5dIChXaW5kb3dzIE5UIDUuMDsgVSkgW05ldHNjYXBlXSIgLz4KLTxUSVRMRT48L1RJVExFPgotPC9IRUFEPgotCi1UaGlzIGlzIGEgcGFnZSBvZiBzb21lIG9mIHRoZSB0ZWNobmljYWwgc3R1ZmYgdGhhdCBJJ3ZlIHdyaXR0ZW4gdXNpbmcgdmFyaW91cwotcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLiAgQ2xpY2sgb24gdGhlIGxpbmtzIHRvIGxlYXJuIG1vcmUgYWJvdXQgdGhlIHByb2plY3RzIG9yCi10byBzZWUgdGhlIHNvdXJjZSBjb2RlLjxCUj4KLTxJPk5vdGU6IEZlZWwgZnJlZSB0byBjb3B5LCBzdGVhbCwgbW9kaWZ5LCBkZXN0cm95IHdoYXQgeW91IHdpbGwuLi48L0k+PEJSPjxCUj4KLTxIUj4KLQotPEgyPiBQcm9ncmFtcyBhbmQgVXRpbGl0aWVzIDwvSDI+Ci08VUw+Ci08TEk+PEEgaHJlZj0ibWFrZW1ha2UuaHRtbCI+IDxJPiBBdXRvbWF0aWMKLU1ha2VmaWxlIFV0aWxpdHk6IDwvST48L0E+IFRoaXMgZ2VuZXJhdGVzIGEgTWFrZWZpbGUgYW5kIHVwZGF0ZXMgaXQgYWNjb3JkaW5nCi10byB0aGUgZmlsZXMgY3VycmVudGx5IGluIHlvdXIgZGlyZWN0b3J5LgotVGFrZSBhIGdhbmRlciBhdCB0aGUgc291cmNlIGhlcmU6IDxBCi1ocmVmPSJtYWtlbWFrZS5jIj4gPEk+IG1ha2VtYWtlLmMgCi0gPC9JPjwvQT4gCi0KLTxicj48QlI+Ci08L0xJPjxMST48QSBocmVmPSJtYWlsc29ydC5wbCIgPiA8ST4KLW1haWwgZmlsZSBzb3J0ZXI6ICA8L0k+IDwvQT4gCi1UaGlzIHV0aWxpdHkgcGFyc2VzIGEgbWFpbCBmaWxlIGFuZCBjcmVhdGVzIGFub3RoZXIgbWFpbCBmaWxlIGNvbnRhaW5pbmcgb25seQotdGhlIG1lc3NhZ2VzIHNwZWNpZmllZCBieSBwYXJhbWF0ZXJzLiAgRm9yIGV4YW1wbGUsIHBhcnNlIGEgbWFpbCBhcmNoaXZlIGZpbGUKLShvbGQtbWFpbC1KYW4tMjAwMCkgYW5kIGV4dHJhY3QgYWxsIG9mIHRoZSBtZXNzYWdlcyBmcm9tIGRhdmVrQHlvdXJtb20uY29tIG9yCi13aXRoIHRoZSBzdWJqZWN0IE1hcmlsbGlvbi4gIFRoaXMgZ3V5IHdhcyB3aGlwcGVkIHVwIGluIFBlcmwuCi08QlI+PGJyPgotCi08L0xJPjxMST48QSBocmVmPSJlbGVjdHJvbmljTm90ZXMuaHRtbCIgPiA8ST4KLUVsZWN0cm9uaWMgTm90ZXM6ICA8L0k+IDwvQT4gVGhpcyBpcyBhbiBvcmlnaW5hbCBpZGVhIChnYXNwISkgdGhhdCBJIGRldmVsb3BlZCB3aGljaCBpcyBhCi1zeXN0ZW0gZm9yIGtlZXBpbmcgbGl0dGxlIHJlbWluZGVycyB0byB5b3Vyc2VsZiBkdXJpbmcgdGhlIGRheSBhbmQgaGF2aW5nIHRoZW0KLXNlbnQgdG8geW91IGFsbCBpbiBvbmUgY29udmVuaWVudCBmaWxlIHZpYSBlbWFpbCBhdCB0aGUgZW5kIG9mIHRoZSBkYXkuICAKLTxicj48YnI+Ci0KLTwvTEk+PExJPjxBIGhyZWY9ImhlYWRlci5odG1sIiA+IDxJPiBDL0MrKyBIZWFkZXIgZmlsZQotdG8gSW1wbGVtZW50YXRpb24gZmlsZSBjb252ZXJ0ZXI6IDwvST4gPC9BPgotVGhpcyBpcyBhIHZlcnkgdXNlZnVsIHRvb2wgd3JpdHRlbiBpbiBDKysgdGhhdCBjb252ZXJ0cyAuaCBmaWxlcyB0byBlbXB0eQotaW1wbGVtZW50YXRpb24gKC5DKSBmaWxlcy4gIAotPEJSPjxCUj4KLTwvTEk+PExJPjxBIGhyZWY9Im1hdHJpeC5odG1sIiA+IDxJPiBNYXRyaXggTWFuaXB1bGF0aW9uCi1QYWNrYWdlOiA8L0k+PC9BPiBUaGlzIGlzIGEgcGFja2FnZSB0aGF0IGRvZXMgYWxsIHNvcnRzIG9mIGNvb2wgbWFuaXB1bGF0aW9ucwotd2l0aCBtYXRyaWNlcywgc3VjaCBhcyBHYXVzc2lhbiBFbGltaW5hdGlvbiwgTm9ybWFsIEVxdWF0aW9ucywgVmFuZGVybW9uZGUKLU1hdHJpY2VzLCBDaG9sZXNreSBGYWN0b3JpemF0aW9uLCBFcnJvciBBbmFseXNpcywgYW5kIG1vcmUgc3R1ZmYgdGhhbiB5b3Ugd291bGQKLWV2ZXIgd2FudCB0byBkbyB3aXRoIGEgbWF0cml4LiAgSXQgaXMgd3JpdHRlbiBpbiBnb29kIG9sJyBDLgotCi08QlIgPjxCUiAgPgotPC9MST48TEk+IAotPEEgaHJlZj0ibGlzcC5odG1sIiA+IDxJPlNldCBPcGVyYXRpb25zOiA8L0k+PC9BPiA8ST48L0k+IEEgcHJvZ3JhbSB0aGF0IHBlcmZvcm1zIHNldAotb3BlcmF0aW9ucyBvbiBhIGxpc3QuICBUaGlzIGlzIHdyaXR0ZW4gaW4gTGlzcCwgb2YgYWxsIHRoaW5ncy4gIFRoZXJlJ3MgYWxzbwotc29tZSBleGFtcGxlcyBvZiBteSBvd24gaW50ZXJwcmV0YXRpb25zIG9mIHNvbWUgTGlzcCBmdW5jdGlvbnMuIExpc3AgaXMgYSBnb29kCi1sYW5ndWFnZSBmb3IgQUkgYW5kIHRoaW5ncyBvZiB0aGF0IG5hdHVyZS4gIAotSXQgcmVsaWVzIGhlYXZpbHkgb24gcmVjdXJzaW9uLCBzbyBpdCB0YWtlcyBhIGRpZmZlcmVudAotbWluZHNldCB0byBwcm9ncmFtIGluIHRoaXMgbGFuZ3VhZ2UuICBCdXQgdXNlZCBjb3JyZWN0bHkgYW5kIGZvciBpdHMgaW50ZW5kZWQKLXB1cnBvc2UsIExpc3AgaXMgYSB2ZXJ5IHVuaXF1ZSBhbmQgcG93ZXJmdWwgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuCi08QlIgICA+PEJSICAgID4KLQotPC9MST48TEk+IAotPEEgaHJlZj0ibG9jLmh0bWwiID4gPEk+IExpbmVzIE9mIENvZGUgQ291bnRlcjoKLTwvST48L0E+PEk+PC9JPiAgVGhpcyBpcyBpcyBMT0MgY291bnRlciB0aGF0IEkgd3JvdGUgaW4gUGVybCB0aGF0IGNhbGN1bGF0ZXMgdGhlIG51bWJlciBvZgotdW5jb21tZW50ZWQgbGluZXMgb2YgY29kZSBpbiBhIHByb2dyYW0uICBUaGlzIHdvcmtzIGZvciBhbnkgcHJvZ3JhbW1pbmcKLWxhbmd1YWdlIGFzIHlvdSBjYW4gc3VwcGx5IHRoZSBjb21tZW50IGNoYXJhY3RlciBvbiB0aGUgY29tbWFuZCBsaW5lLiAgVGhpcyBpcwotYW4gZXh0cmVtZWx5IHVzZWZ1bCBwcm9ncmFtIGZvciB1c2UgaW4gc29mdHdhcmUgbWV0cmljcy4KLTxCUiBhYmM9ImRlZiI+PEJSIGFiYz0iZGVmIiA+Ci0KLTwvTEk+PExJPjxBIGhyZWY9Imxpbndpbi5odG1sIj4gPEk+IFNpbXBsZSAqbml4IHRvCi13aW5kb3dzIHRleHQgY29udmVydGVyIDwvST48L0E+IFRoaXMgdGFrZXMgZmlsZXMgd3JpdHRlbiBpbiBMaW51eCAoYW5kIGluIHZpIG9yCi0gICAgICAgIGFuIGVkaXRvciB3aXRoIGF1dG9tYXRpYyBsaW5lIGJyZWFrcyBhZnRlciBldmVyeSA4MCBvciBzbyBjaGFycykgYW5kCi1mb3JtYXRzIGl0IHNvIGl0IHdpbGwgZGlzcGxheSBwcm9wZXJseSBpbiBXaW5kb3dzIGVudmlyb25tZW50IHNob3VsZCB5b3UgYmUKLWZvcmNlZCB0byBkbyBzby4gIAotUGVydXNlIChwZXJ1c2UsIG1pbmQgeW91LiAgSSBkb24ndCB3YW50IHRvIHNlZSBhbnkgPEk+YnJvd3Npbmc8L0k+KSB0aGUgc291cmNlIGhlcmU6IDxBCi1ocmVmPSJsaW53aW4uYyI+IDxJPiBsaW53aW4uYyAKLSA8L0k+PC9BPiAKLTxCUiBhYmMgPSAiZGVmIj48QlIgYWJjICA9ICAiZGVmIj4KLQotCi08L0xJPjxMST48Qj4gUmVncmVzc2lvbiBhbmQgU3RhbmRhcmQgRGV2aWF0aW9uOiA8L0I+IAotQSBtYXRoIGNsYXNzIHdyaXR0ZW4gaW4gSmF2YSB1c2luZyBPYmplY3QgT3JpZW50ZWQgZGVzaWduIHByaW5jaXBsZXMuICBUaGUgbWFpbgotYXNwZWN0cyBvZiB0aGUgcHJvZ3JhbSBhcmUgZm9yIGZpZ3VyaW5nIG91dCBTdGFuZGFyZCBEZXZpYXRpb24gYW5kIHRoZQotUmVncmVzc2lvbiwgd2hlbiB5b3UgaW5wdXQgYSBzZXQgb2YgeCBhbmQgeSB2YWx1ZXMuICBSZWdyZXNzaW9uIGNhbGN1bGF0aW9ucwotYXJlIG9mdGVuIHVzZWQgaW4gU29mdHdhcmUgTWV0cmljcyB0byB0byBoZWxwIGluIGVzdGltYXRpbmcgbGVuZ3RoIG9mIGNvZGUsIGFuZAotdGltZSBzcGVudCBvbiB0aGUgcHJvamVjdC48QlI+Ci0KLTxBIGhyZWY9IlJlZ3Jlc3Npb25DYWxjLmh0bWwiID4gCi08ST4gUmVncmVzc2lvbkNhbGMuamF2YSA8L0k+IDwvQT4gIFRoaXMgaXMgdGhlIG1haW4gY2xhc3MgdGhhdCBkb2VzIHRoZQotY2FsY3VsYXRpb25zLiAgSXQgY2FsY3VsYXRlcyBCMSwgQjAsIGFuZCByXjIsIHdoaWNoIGFyZSBhbGwgcGFyYW1ldGVycyBvZgotUmVncmVzc2lvbi4KLTxCUiBhYmM9ICJkZWYiPgotPEEgaHJlZj0iTWF0aENsYXNzLmh0bWwiID4gCi08ST4gTWF0aENsYXNzLmphdmEgPC9JPiAgPC9BPiBUaGlzIGlzIHNpbXBseSBhIHNtYWxsIGNsYXNzIHdoaWNoIGNhbGN1bGF0ZXMgdGhlCi1tZWFuIGFuZCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGEgdmVjdG9yIG9mIG51bWJlcnMuICBUaGlzIGlzIHVzZWQgYnkgdGhlCi1SZWdyZXNzaW9uQ2FsYyBjbGFzcyBpbiBpdHMgY2FsY3VsYXRpb25zLgotPEJSIGFiYyA9ImRlZiI+Ci08QSBocmVmPSJSZWdyZXNzaW9uLmh0bWwiID4gCi08ST4gUmVncmVzc2lvbi5qYXZhIDwvST4gIDwvQT4gVGhpcyBpcyBiYXNpY2FsbHkgdGhlIG1haW4gcm91dGluZSwgb3Igd2hlcmUgdGhlCi1wcm9ncmFtIHN0YXJ0cy4gIEl0IHB1dHMgYWxsIG9mIHRoZSBpbnB1dCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgaW50byB0d28KLXNlcGFyYXRlIHZlY3RvcnMgZm9yIHRoZSB4IGFuZCB5IHZhbHVlcy48QlI+PEJSPgotCi1BbiBleGFtcGxlIG9mIHRoZSB1c2FnZSBvZiB0aGlzIHByb2dyYW0gd291bGQgYmU6ICA8QlI+Ci1JZiB5b3UgaGFkIGEgaGlzdG9yeSBvZiBkYXRhIG9uIHlvdXIgZXN0aW1hdGVkIExpbmVzIE9mIENvZGUgKExPQykgcGVyIGNsYXNzLAotYXMgd2VsbCBhcyB0aGUgYWN0dWFsIExPQyBwZXIgY2xhc3MsIHlvdSBjb3VsZCBwdXQgdGhlc2UgaW4gdGhlIGZvcm11bGEgYW5kCi1maW5kIG91dCB0aGUgUmVncmVzc2lvbiBvZiB0aGUgZGF0YSAob3IgaG93IGZhciBhd2F5IGVhY2ggcG9pbnQgaXMgZnJvbSB0aGUKLWZ1bmN0aW9uIGxpbmUuKSAgCi0KLVlvdSB3b3VsZCBpbnB1dCB0aGUgZGF0YSBmb3IgdGhlIGVzdGltYXRlZCBMT0MsIHNlcGFyYXRlZCBieSBhIGNvbW1hLCBhbmQKLWZvbGxvd2VkIGJ5IHRoZSBhY3R1YWwgTE9DLiAgVGhlIHJlc3VsdCB3b3VsZCBiZSB0aGUgcmVncmVzc2lvbiBjYWxjdWxhdGlvbi4KLTxQUkU+Ci0lamF2YSBSZWdyZXNzaW9uIDEzMCA2NTAgOTkgMTUwICwgMTg2IDY5OSAxMzIgMjcyIAotCi1YIERhdGEgPSBbIDEzMC4wIDY1MC4wIDk5LjAgMTUwLjAgXQotWSBEYXRhID0gWyAxODYuMCA2OTkuMCAxMzIuMCAyNzIuMCBdCi1OID0gNAotQmV0YTAgPSA3Mi42OTA1MDMwNzgwMzYxCi1CZXRhMSA9IDAuOTcwMTA0OTQ0MzAzMDY2NwotclNxdWFyZWQgPSAyMjEyLjUwNDY5NzY3MzY4OQotPC9QUkU+Ci0KLTwvTEk+PC9VTD4KLQotPEhSPgotPEgyPiBLbm93bGVkZ2UgPC9IMj4KLTxVTD4KLTxMST48QSBocmVmPSJ2aW0uaHRtbCI+IDxJPiBFc3BvdXNpbmcgbXkgbG92ZQotZm9yIHZpbSEgPC9JPjwvQT4gdmltIGp1c3Qgcm9ja3MsIG9rYXkuICBSZWFsbHkuICBJZiBJIGhhZCB0byBjaG9vc2UgYmV0d2VlbiwKLWxpa2UsIHNleCwgb3IgdXNpbmcgdmltLS1sZXQncyBqdXN0IHNheSBJJ2QgYmUgb25lIG1hc3RlcmZ1bC1lZGl0aW5nIG1vbmsuIAotPEJSPjxCUj4KLQotCi08L0xJPjxMST4KLTxBIGhyZWY9Ik1CUi1MSUxPLnR4dCI+IAotPEk+IExvc3QgTElMTz8gIFJlY292ZXIuPC9JPiAgPC9BPiBJZiB5b3UgaGF2ZSBMaW51eCBpbnN0YWxsZWQgaW4gYSBtdWx0aS1ib290Ci1lbnZpcm9ubWVudCwgYW5kIHlvdSBvdmVyd3JpdGUgeW91ciBNQlIsIHlvdSBjYW4gbG9zZSBMSUxPLiAgSSByZWluc3RhbGxlZAotV2luZG93cyAoaGV5LCBJIG5lZWRlZCB0byBwbGF5IEZpbmFsIEZhbnRhc3kgVklJSSEpIGFuZCBjb3VsZG4ndCBib290IGludG8KLUxpbnV4LiAgSGVyZSdzIGhvdyBJIHJlY292ZXJlZC4KLTxCUj48QlI+Ci0KLQotCi08L0xJPjwvVUw+PC9ib2R5PgotPGh0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9lbXB0eS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9lbXB0eS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvZW1wdHkueG1sCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2lubGluZUNvbW1lbnRzLmFmdGVyRGVmYXVsdEZvcm1hdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9pbmxpbmVDb21tZW50cy5hZnRlckRlZmF1bHRGb3JtYXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzIyZDRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2lubGluZUNvbW1lbnRzLmFmdGVyRGVmYXVsdEZvcm1hdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08cm9vdD4KLQk8ZGVzYz5XYXJtZWQgbGVlayBzYWxhZDwvZGVzYz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT4KLQk8ZGVzYz5XYXJtZWQgbGVlayBzYWxhZDwvZGVzYz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRleHQgLS0+Ci0JPHByaWNlIHVuaXRzPSJ1c2QiPjYuOTU8IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRleHQgLS0+PC9wcmljZT4KLQk8cHJpY2UgdW5pdHM9InVzZCI+Ci0JCTxudW1iZXIgLz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT4KLQk8L3ByaWNlPgotCTxwcmljZSB1bml0cz0idXNkIj4KLQkJPG51bWJlciAvPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPgotCTwvcHJpY2U+Ci0JPHByaWNlIHVuaXRzPSJ1c2QiPgotCQk8bnVtYmVyIC8+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+Ci0JPC9wcmljZT4KLQk8cHJpY2UgdW5pdHM9InVzZCIgdW5pdHM9InVzZCI+Ni45NTwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGV4dCAtLT48L3ByaWNlPgotCTxwcmljZSB1bml0cz0idXNkIiB1bml0cz0idXNkIj42Ljk1PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0ZXh0IGFuZCBmb2xsb3dlZCBieSB0ZXh0IC0tPgotCQlkb2xsYXJzCi0JPC9wcmljZT4KLQk8cHJpY2UgdW5pdHM9InVzZCIgdW5pdHM9InVzZCI+Ci0JCTxudW1iZXIgLz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT4KLQkJPHVuaXQgLz4KLQk8L3ByaWNlPgotCTxwcmljZT4KLQkJPG51bWJlciAvPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPgotCQk8dW5pdCAvPgotCTwvcHJpY2U+Ci0JPHByaWNlPgotCQk8bnVtYmVyIC8+Ci0JCTwhLS0gY29tbWVudCBvbiBhIG5ldyBsaW5lIC0tPgotCQk8dW5pdCAvPgotCTwvcHJpY2U+Ci0JPHByaWNlPjwhLS0gaW5saW5lIGNvbW1lbnQgLS0+PC9wcmljZT4KLQk8dGg+Ci0JCTxiPkZhaHJlbmhlaXQ8IS0tIHRlc3RpbmcgLS0+PC9iPgotCTwvdGg+Ci08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvaW5saW5lQ29tbWVudHMuYWZ0ZXJTcGxpdExpbmVzU3BsaXRNdWx0aUF0dHJzRm9ybWF0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2lubGluZUNvbW1lbnRzLmFmdGVyU3BsaXRMaW5lc1NwbGl0TXVsdGlBdHRyc0Zvcm1hdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmZGRhZjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvaW5saW5lQ29tbWVudHMuYWZ0ZXJTcGxpdExpbmVzU3BsaXRNdWx0aUF0dHJzRm9ybWF0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLTxyb290PgotCTxkZXNjPldhcm1lZCBsZWVrIHNhbGFkPC9kZXNjPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPgotCTxkZXNjPldhcm1lZCBsZWVrIHNhbGFkPC9kZXNjPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGV4dCAtLT4KLQk8cHJpY2UgdW5pdHM9InVzZCI+Ni45NTwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGV4dCAtLT48L3ByaWNlPgotCTxwcmljZSB1bml0cz0idXNkIj4KLQkJPG51bWJlciAvPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPgotCTwvcHJpY2U+Ci0JPHByaWNlIHVuaXRzPSJ1c2QiPgotCQk8bnVtYmVyIC8+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+Ci0JPC9wcmljZT4KLQk8cHJpY2UgdW5pdHM9InVzZCI+Ci0JCTxudW1iZXIgLz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT4KLQk8L3ByaWNlPgotCTxwcmljZQotCQl1bml0cz0idXNkIgotCQl1bml0cz0idXNkIj4KLQkJNi45NTwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGV4dCAtLT4KLQk8L3ByaWNlPgotCTxwcmljZQotCQl1bml0cz0idXNkIgotCQl1bml0cz0idXNkIj4KLQkJNi45NTwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGV4dCBhbmQgZm9sbG93ZWQgYnkgdGV4dCAtLT4KLQkJZG9sbGFycwotCTwvcHJpY2U+Ci0JPHByaWNlCi0JCXVuaXRzPSJ1c2QiCi0JCXVuaXRzPSJ1c2QiPgotCQk8bnVtYmVyIC8+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+Ci0JCTx1bml0IC8+Ci0JPC9wcmljZT4KLQk8cHJpY2U+Ci0JCTxudW1iZXIgLz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT4KLQkJPHVuaXQgLz4KLQk8L3ByaWNlPgotCTxwcmljZT4KLQkJPG51bWJlciAvPgotCQk8IS0tIGNvbW1lbnQgb24gYSBuZXcgbGluZSAtLT4KLQkJPHVuaXQgLz4KLQk8L3ByaWNlPgotCTxwcmljZT48IS0tIGlubGluZSBjb21tZW50IC0tPjwvcHJpY2U+Ci0JPHRoPgotCQk8Yj5GYWhyZW5oZWl0PCEtLSB0ZXN0aW5nIC0tPjwvYj4KLQk8L3RoPgotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2lubGluZUNvbW1lbnRzLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2lubGluZUNvbW1lbnRzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFhMTFiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9pbmxpbmVDb21tZW50cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08cm9vdD48ZGVzYz5XYXJtZWQgbGVlayBzYWxhZDwvZGVzYz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT4KLTxkZXNjPldhcm1lZCBsZWVrIHNhbGFkPC9kZXNjPiAgIDwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGV4dCAtLT4KLTxwcmljZSB1bml0cz0idXNkIj42Ljk1PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0ZXh0IC0tPjwvcHJpY2U+Ci08cHJpY2UgdW5pdHM9InVzZCI+PG51bWJlci8+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+PC9wcmljZT4KLTxwcmljZSB1bml0cz0idXNkIj48bnVtYmVyLz4gICA8IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT48L3ByaWNlPgotPHByaWNlIHVuaXRzPSJ1c2QiPiAgIDxudW1iZXIvPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPjwvcHJpY2U+Ci08cHJpY2UgdW5pdHM9InVzZCIgdW5pdHM9InVzZCI+Ni45NTwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGV4dCAtLT48L3ByaWNlPgotPHByaWNlIHVuaXRzPSJ1c2QiIHVuaXRzPSJ1c2QiPjYuOTU8IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRleHQgYW5kIGZvbGxvd2VkIGJ5IHRleHQgLS0+ZG9sbGFyczwvcHJpY2U+Ci08cHJpY2UgdW5pdHM9InVzZCIgdW5pdHM9InVzZCI+PG51bWJlci8+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+PHVuaXQvPjwvcHJpY2U+Ci08cHJpY2U+PG51bWJlci8+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+PHVuaXQvPjwvcHJpY2U+Ci08cHJpY2U+PG51bWJlci8+Ci08IS0tIGNvbW1lbnQgb24gYSBuZXcgbGluZSAtLT48dW5pdC8+PC9wcmljZT4KLTxwcmljZT48IS0tIGlubGluZSBjb21tZW50IC0tPjwvcHJpY2U+Ci08dGg+PGI+RmFocmVuaGVpdCA8IS0tIHRlc3RpbmcgLS0+PC9iPjwvdGg+Ci08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvaW52b2ljZS5hZnRlckNsZWFudXBJbnNlcnRUYWdzLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2ludm9pY2UuYWZ0ZXJDbGVhbnVwSW5zZXJ0VGFncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxMmM5ODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvaW52b2ljZS5hZnRlckNsZWFudXBJbnNlcnRUYWdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgSW52b2ljZSBQVUJMSUMgIkludm9pY2VJZCIgIkludm9pY2UuZHRkIiA+Ci08SW52b2ljZT4KLSAgPEhlYWRlciBpbnZvaWNlTnVtYmVyPTEyMzQ1PgotICAgIDxEYXRlPgotICAgICAgPE1vbnRoPkp1bHk8L01vbnRoPgotICAgICAgPERheT4xNTwvRGF5PgotICAgICAgPFllYXI+MjAwMQotICAgIDwvWWVhcj48L0RhdGU+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyPS8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyPSAgIC8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyICAgPS8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyICAgPSAgIC8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyIG5hbWU9Q3JhaWcgICAgcGhvbmUgPSAgICAgNDE2LTQ0OC00NDE0IC8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyICAgPSAgIFg1NzM5IG5hbWUgICAgcGhvbmUgPSAgICAgNDE2LTQ0OC00NDE0IC8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyICAgPSAgIFg1NzM5IG5hbWUgICA9IENyYWlnICAgIHBob25lLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgbmFtZSBwaG9uZS8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyICAgPSAgIFg1NzM5IG5hbWU9IkNyYWlnIFNhbHRlciIgcGhvbmU9NDE2LTQ0OC00NDE0PgotICAgICAgPEFkZHJlc3M+Ci0gICAgICAgIDxzdHJlZXQxPklCTTwvc3RyZWV0MT4KLSAgICAgICAgPHN0cmVldDI+MTE1MCBFZ2xpbnRvbiBBdmUgRWFzdDwvc3RyZWV0Mj4KLSAgICAgICAgPGNpdHk+VG9yb250bzwvY2l0eT4KLSAgICAgICAgPHN0YXRlPk9udGFyaW88L3N0YXRlPgotICAgICAgICA8emlwPk0zQyAxSDc8L3ppcD4KLSAgICAgICAgPGNvdW50cnk+Q2FuYWRhCi0gIDwvY291bnRyeT48L0FkZHJlc3M+PC9CaWxsVG8+PC9IZWFkZXI+Ci0gIDxJdGVtIGRpc2NvdW50PXByb21vdGlvbiBwcmljZT01Nz4KLSAgICA8ZGVzY3JpcHRpb24+QSB3ZWRkaW5nIHJpbmc8L2Rlc2NyaXB0aW9uPjwvSXRlbT48L0ludm9pY2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvaW52b2ljZS5hZnRlckNsZWFudXBJbnNlcnRUYWdzUXVvdGVBdHRycy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9pbnZvaWNlLmFmdGVyQ2xlYW51cEluc2VydFRhZ3NRdW90ZUF0dHJzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU3ODEyZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9pbnZvaWNlLmFmdGVyQ2xlYW51cEluc2VydFRhZ3NRdW90ZUF0dHJzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgSW52b2ljZSBQVUJMSUMgIkludm9pY2VJZCIgIkludm9pY2UuZHRkIiA+Ci08SW52b2ljZT4KLSAgPEhlYWRlciBpbnZvaWNlTnVtYmVyPSIxMjM0NSI+Ci0gICAgPERhdGU+Ci0gICAgICA8TW9udGg+SnVseTwvTW9udGg+Ci0gICAgICA8RGF5PjE1PC9EYXk+Ci0gICAgICA8WWVhcj4yMDAxCi0gICAgPC9ZZWFyPjwvRGF0ZT4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXI9ImN1c3ROdW1iZXIiLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXI9ICAgImN1c3ROdW1iZXIiLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgICA9ImN1c3ROdW1iZXIiLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgICA9ICAgImN1c3ROdW1iZXIiLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXI9ImN1c3ROdW1iZXIiIG5hbWU9IkNyYWlnIiAgICBwaG9uZSA9ICAgICAiNDE2LTQ0OC00NDE0IiAvPgotICAgIDxCaWxsVG8gY3VzdE51bWJlciAgID0gICAiWDU3MzkiIG5hbWU9Im5hbWUiICAgIHBob25lID0gICAgICI0MTYtNDQ4LTQ0MTQiIC8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyICAgPSAgICJYNTczOSIgbmFtZSAgID0gIkNyYWlnIiAgICBwaG9uZT0icGhvbmUiLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXI9ImN1c3ROdW1iZXIiIG5hbWU9Im5hbWUiIHBob25lPSJwaG9uZSIvPgotICAgIDxCaWxsVG8gY3VzdE51bWJlciAgID0gICAiWDU3MzkiIG5hbWU9IkNyYWlnIFNhbHRlciIgcGhvbmU9IjQxNi00NDgtNDQxNCI+Ci0gICAgICA8QWRkcmVzcz4KLSAgICAgICAgPHN0cmVldDE+SUJNPC9zdHJlZXQxPgotICAgICAgICA8c3RyZWV0Mj4xMTUwIEVnbGludG9uIEF2ZSBFYXN0PC9zdHJlZXQyPgotICAgICAgICA8Y2l0eT5Ub3JvbnRvPC9jaXR5PgotICAgICAgICA8c3RhdGU+T250YXJpbzwvc3RhdGU+Ci0gICAgICAgIDx6aXA+TTNDIDFINzwvemlwPgotICAgICAgICA8Y291bnRyeT5DYW5hZGEKLSAgPC9jb3VudHJ5PjwvQWRkcmVzcz48L0JpbGxUbz48L0hlYWRlcj4KLSAgPEl0ZW0gZGlzY291bnQ9InByb21vdGlvbiIgcHJpY2U9IjU3Ij4KLSAgICA8ZGVzY3JpcHRpb24+QSB3ZWRkaW5nIHJpbmc8L2Rlc2NyaXB0aW9uPjwvSXRlbT48L0ludm9pY2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvaW52b2ljZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9pbnZvaWNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhhMjZiNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9pbnZvaWNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgSW52b2ljZSBQVUJMSUMgIkludm9pY2VJZCIgIkludm9pY2UuZHRkIiA+Ci08SW52b2ljZT4KLSAgPEhlYWRlciBpbnZvaWNlTnVtYmVyPTEyMzQ1PgotICAgIDxEYXRlPgotICAgICAgPE1vbnRoPkp1bHk8L01vbnRoPgotICAgICAgPERheT4xNTwvRGF5PgotICAgICAgPFllYXI+MjAwMQotICAgIDwvRGF0ZT4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXI9Lz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXI9ICAgLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgICA9Lz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgICA9ICAgLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgbmFtZT1DcmFpZyAgICBwaG9uZSA9ICAgICA0MTYtNDQ4LTQ0MTQgLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgICA9ICAgWDU3MzkgbmFtZSAgICBwaG9uZSA9ICAgICA0MTYtNDQ4LTQ0MTQgLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgICA9ICAgWDU3MzkgbmFtZSAgID0gQ3JhaWcgICAgcGhvbmUvPgotICAgIDxCaWxsVG8gY3VzdE51bWJlciBuYW1lIHBob25lLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgICA9ICAgWDU3MzkgbmFtZT0iQ3JhaWcgU2FsdGVyIiBwaG9uZT00MTYtNDQ4LTQ0MTQ+Ci0gICAgICA8QWRkcmVzcz4KLSAgICAgICAgPHN0cmVldDE+SUJNPC9zdHJlZXQxPgotICAgICAgICA8c3RyZWV0Mj4xMTUwIEVnbGludG9uIEF2ZSBFYXN0PC9zdHJlZXQyPgotICAgICAgICA8Y2l0eT5Ub3JvbnRvPC9jaXR5PgotICAgICAgICA8c3RhdGU+T250YXJpbzwvc3RhdGU+Ci0gICAgICAgIDx6aXA+TTNDIDFINzwvemlwPgotICAgICAgICA8Y291bnRyeT5DYW5hZGEKLSAgPC9IZWFkZXI+Ci0gIDxJdGVtIGRpc2NvdW50PXByb21vdGlvbiBwcmljZT01Nz4KLSAgICA8ZGVzY3JpcHRpb24+QSB3ZWRkaW5nIHJpbmcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9sb2dpbi5hZnRlckNsZWFudXAuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvbG9naW4uYWZ0ZXJDbGVhbnVwLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U5MDZjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9sb2dpbi5hZnRlckNsZWFudXAuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+DQotPEhUTUw+DQotPEhFQUQ+DQotPFRJVExFPkxvZ2luPC9USVRMRT4NCi08TElOSyBocmVmPSIuLi90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08L0hFQUQ+DQotPEJPRFkgYmdjb2xvcj0iI2ZmZmZjYyI+DQotPFNDUklQVD4NCi0gICAgICBmdW5jdGlvbiBzdWJtaXRGb3JtKGRlc3Qpew0KLSAgICAgICAgIGRvY3VtZW50Lm15Rm9ybS5hY3Rpb24gPSBkZXN0DQotICAgICAgICAgZG9jdW1lbnQubXlGb3JtLnN1Ym1pdCgpDQotICAgICAgfQ0KLSAgICAgIDwvU0NSSVBUPg0KLTxDRU5URVI+DQotPEgxPkRhdGFiYXNlIENvbm5lY3Rpdml0eTwvSDE+DQotPEhSPg0KLTwvQ0VOVEVSPg0KLTxQPkVudGVyIHRoZSB1c2VybmFtZSAmYW1wOyBwYXNzd29yZCB0byBjb25uZWN0IHRvIHRoZSBkYXRhYmFzZS48QlI+DQotVGhpcyB1c2VybmFtZSAmYW1wOyBwYXNzd29yZCBzaG91bGQgYmUgdGhlIG9uZSB1c2VkIHdoaWxlIGNyZWF0aW5nIHRoZQ0KLWRhdGFiYXNlLjwvUD4NCi08JSBpZihzZXNzaW9uLmdldEF0dHJpYnV0ZSgiZXJyb3JfbWVzc2FnZSIpICE9IG51bGwpIHsgJT4NCi08UD4qIEluY29ycmVjdCBMb2dpbiBvciBQYXNzd29yZDwvUD4NCi08JSAgc2Vzc2lvbi5yZW1vdmVBdHRyaWJ1dGUoImVycm9yX21lc3NhZ2UiKTsNCi0gICAgICB9ICAlPg0KLTxGT1JNIG5hbWU9Im15Rm9ybSIgbWV0aG9kPSJQT1NUIiBhY3Rpb249Ii4uL0xvZ2luL0xvZ29uU2VydmxldCI+PElOUFVUDQotCXR5cGU9ImhpZGRlbiIgbmFtZT0iY29tbWFuZCINCi0JdmFsdWU9JzwlPXNlc3Npb24uZ2V0QXR0cmlidXRlKCJmaW5hbF9wYWdlIikgJT4nPiA8SU5QVVQgdHlwZT0iaGlkZGVuIg0KLQluYW1lPSJwcmV2aW91c19wYWdlIiB2YWx1ZT0iTG9naW4vTG9naW4uanNwIj4gPEENCi0JaHJlZj0iamF2YXNjcmlwdDpzdWJtaXRGb3JtKCcuLi9Mb2dpbi9Mb2dvblNlcnZsZXQnKSI+T0s8L0E+DQotPFRBQkxFIGJvcmRlcj0iMCI+DQotCTxUQk9EWT4NCi0JCTxUUj4NCi0JCQk8VEQ+PEZPTlQgY29sb3I9IiM5OTMzMzMiPiB1c2VybmFtZTogPC9GT05UPjwvVEQ+DQotCQkJPFREPjxJTlBVVCBuYW1lPSJ1c2VySUQiIHR5cGU9InRleHQiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjQwIj48L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEQ+PEZPTlQgY29sb3I9IiM5OTMzMzMiPiBwYXNzd29yZDogPC9GT05UPjwvVEQ+DQotCQkJPFREPjxJTlBVVCBuYW1lPSJwYXNzd29yZCIgdHlwZT0icGFzc3dvcmQiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjQwIj48L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEQ+PEZPTlQgY29sb3I9IiM5OTMzMzMiPiBkcml2ZXJuYW1lOiA8L0ZPTlQ+PC9URD4NCi0JCQk8VEQ+PElOUFVUIG5hbWU9ImRyaXZlciIgdHlwZT0idGV4dCIgc2l6ZT0iMzAiIG1heGxlbmd0aD0iNDAiDQotCQkJCXZhbHVlPSJDT00uaWJtLmRiMi5qZGJjLmFwcC5EQjJEcml2ZXIiPjwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxURD48Rk9OVCBjb2xvcj0iIzk5MzMzMyI+IHVybDogPC9GT05UPjwvVEQ+DQotCQkJPFREPjxJTlBVVCBuYW1lPSJ1cmwiIHR5cGU9InRleHQiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjQwIg0KLQkJCQl2YWx1ZT0iamRiYzpkYjI6V1NTQU1QTEUiPjwvVEQ+DQotCQk8L1RSPg0KLQk8L1RCT0RZPg0KLTwvVEFCTEU+DQotPC9GT1JNPg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvbG9naW4uanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvbG9naW4uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzlhNjdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2xvZ2luLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTxUSVRMRT5Mb2dpbjwvVElUTEU+DQotPExJTksgaHJlZj0iLi4vdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPC9IRUFEPg0KLTxCT0RZIGJnY29sb3I9IiNmZmZmY2MiPg0KLTxTQ1JJUFQ+DQotICAgICAgZnVuY3Rpb24gc3VibWl0Rm9ybShkZXN0KXsNCi0gICAgICAgICBkb2N1bWVudC5teUZvcm0uYWN0aW9uID0gZGVzdA0KLSAgICAgICAgIGRvY3VtZW50Lm15Rm9ybS5zdWJtaXQoKQ0KLSAgICAgIH0NCi0gICAgICA8L1NDUklQVD4NCi08Q0VOVEVSPg0KLTxIMT5EYXRhYmFzZSBDb25uZWN0aXZpdHk8L0gxPg0KLTxIUj4NCi08L0NFTlRFUj4NCi08UD5FbnRlciB0aGUgdXNlcm5hbWUgJmFtcDsgcGFzc3dvcmQgdG8gY29ubmVjdCB0byB0aGUgZGF0YWJhc2UuPEJSPg0KLVRoaXMgdXNlcm5hbWUgJmFtcDsgcGFzc3dvcmQgc2hvdWxkIGJlIHRoZSBvbmUgdXNlZCB3aGlsZSBjcmVhdGluZyB0aGUgZGF0YWJhc2UuPC9QPg0KLTwlIGlmKHNlc3Npb24uZ2V0QXR0cmlidXRlKCJlcnJvcl9tZXNzYWdlIikgIT0gbnVsbCkgeyAlPg0KLTxQPiogSW5jb3JyZWN0IExvZ2luIG9yIFBhc3N3b3JkPC9QPg0KLTwlICBzZXNzaW9uLnJlbW92ZUF0dHJpYnV0ZSgiZXJyb3JfbWVzc2FnZSIpOw0KLSAgICAgIH0gICU+DQotPEZPUk0gbmFtZT0ibXlGb3JtIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iLi4vTG9naW4vTG9nb25TZXJ2bGV0Ij48SU5QVVQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjb21tYW5kIiB2YWx1ZT0nPCU9c2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImZpbmFsX3BhZ2UiKSAlPic+IDxJTlBVVCB0eXBlPSJoaWRkZW4iIG5hbWU9InByZXZpb3VzX3BhZ2UiIHZhbHVlPSJMb2dpbi9Mb2dpbi5qc3AiPiA8QSBocmVmPSJqYXZhc2NyaXB0OnN1Ym1pdEZvcm0oJy4uL0xvZ2luL0xvZ29uU2VydmxldCcpIj5PSzwvQT4NCi08VEFCTEUgYm9yZGVyPSIwIj4NCi0JPFRCT0RZPg0KLQkJPFRSPg0KLQkJCTxURD48Rk9OVCBjb2xvcj0iIzk5MzMzMyI+IHVzZXJuYW1lOiA8L0ZPTlQ+PC9URD4NCi0JCQk8VEQ+PElOUFVUIG5hbWU9InVzZXJJRCIgdHlwZT0idGV4dCIgc2l6ZT0iMzAiIG1heGxlbmd0aD0iNDAiPjwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxURD48Rk9OVCBjb2xvcj0iIzk5MzMzMyI+IHBhc3N3b3JkOiA8L0ZPTlQ+PC9URD4NCi0JCQk8VEQ+PElOUFVUIG5hbWU9InBhc3N3b3JkIiB0eXBlPSJwYXNzd29yZCIgc2l6ZT0iMzAiIG1heGxlbmd0aD0iNDAiPjwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxURD48Rk9OVCBjb2xvcj0iIzk5MzMzMyI+IGRyaXZlcm5hbWU6IDwvRk9OVD48L1REPg0KLQkJCTxURD48SU5QVVQgbmFtZT0iZHJpdmVyIiB0eXBlPSJ0ZXh0IiBzaXplPSIzMCIgbWF4bGVuZ3RoPSI0MCIgdmFsdWU9IkNPTS5pYm0uZGIyLmpkYmMuYXBwLkRCMkRyaXZlciI+PC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFREPjxGT05UIGNvbG9yPSIjOTkzMzMzIj4gdXJsOiA8L0ZPTlQ+PC9URD4NCi0JCQk8VEQ+PElOUFVUIG5hbWU9InVybCIgdHlwZT0idGV4dCIgc2l6ZT0iMzAiIG1heGxlbmd0aD0iNDAiIHZhbHVlPSJqZGJjOmRiMjpXU1NBTVBMRSI+PC9URD4NCi0JCTwvVFI+DQotCTwvVEJPRFk+DQotPC9UQUJMRT4NCi08L0ZPUk0+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9vbmVDaGFyLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL29uZUNoYXIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTY1ZWZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL29uZUNoYXIueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL29uZVNwYWNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL29uZVNwYWNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDUxOWVjYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9vbmVTcGFjZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0gClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc21hbGwuYWZ0ZXJDb21wcmVzc0VtcHR5RWxlbWVudFRhZ3MueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc21hbGwuYWZ0ZXJDb21wcmVzc0VtcHR5RWxlbWVudFRhZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmE5YzdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NtYWxsLmFmdGVyQ29tcHJlc3NFbXB0eUVsZW1lbnRUYWdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxYTUkgeG1pLnZlcnNpb249IjEuMCIgdGltZXN0YW1wPSJUdWUgTm92IDI4IDA4OjE5OjIxIEVTVCAyMDAwIj4KLQotCTxYTUkuaGVhZGVyPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyPlhNSSBUb29sa2l0PC9YTUkuZXhwb3J0ZXI+Ci0KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPjEuMDU8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uIC8+Ci0JCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uIC8+Ci0JCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj4xLjA1PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj4xLjA1PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbiB4bWkubmFtZT0iVU1MIiB4bWkudmVyc2lvbj0iMS4xIiAvPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbiB4bWkubmFtZT0iVU1MIiB4bWkudmVyc2lvbj0iMS4xIiAvPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbiB4bWkubmFtZT0iVU1MIiB4bWkudmVyc2lvbj0iMS4xIj4KLQkJCQkJMS4wNQotCQkJCTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24geG1pLm5hbWU9IlVNTCIgeG1pLnZlcnNpb249IjEuMSI+Ci0JCQkJCTEuMDUKLQkJCQk8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5tZXRhbW9kZWwgeG1pLm5hbWU9IlVNTCIgeG1pLnZlcnNpb249IjEuMSIgLz4KLQk8L1hNSS5oZWFkZXI+Ci0KLQk8WE1JLmNvbnRlbnQ+Ci0JCTxNb2RlbF9NYW5hZ2VtZW50LlBhY2thZ2UgeG1pLmlkPSJfMSIgeG1pLnV1aWQ9Ik5hbWU6ZWpiIj4KLQkJCTxGb3VuZGF0aW9uLkNvcmUuTW9kZWxFbGVtZW50Lm5hbWU+Ci0JCQkJZWpiCi0JCQk8L0ZvdW5kYXRpb24uQ29yZS5Nb2RlbEVsZW1lbnQubmFtZT4KLQkJCTxGb3VuZGF0aW9uLkNvcmUuTW9kZWxFbGVtZW50LnZpc2liaWxpdHkgeG1pLnZhbHVlPSJwdWJsaWMiIC8+Ci0JCQk8WE1JLmV4dGVuc2lvbiB4bWkuZXh0ZW5kZXI9IklYVCIgeG1pLmV4dGVuZGVySUQ9IiI+Ci0JCQkJPGl4dHMgcz0iSURMIj4KLQkJCQkJPGl4dHR2IHQ9InV1aWQiCi0JCQkJCQl2PSJEQ0U6ZDhhMjU2NjAtODgyNi0xMWUxLTAwMDAtMDA1ZDllNmFkZWM0OjEiIC8+Ci0JCQkJPC9peHRzPgotCQkJCTxpeHRzIHM9IlJvc2UiPgotCQkJCQk8aXh0dHYgdD0icXVpZCIgdj0iMzc4MEUyNzIwMzJEIiAvPgotCQkJCQk8aXh0dHYgdD0iaXNfdW5pdCIgdj0iVFJVRSIgLz4KLQkJCQkJPGl4dHR2IHQ9ImZpbGVfbmFtZSIKLQkJCQkJCXY9IiYjMzQ7JEVDTElQU0VfUkVTT1VSQ0VTXFxlVG9vbHMgRUpCIGxpYnJhcmllc1xcZWpic2NoZW1hLmNhdCYjMzQ7IiAvPgotCQkJCQk8aXh0dHYgdD0iaXNfbG9hZGVkIiB2PSJUUlVFIiAvPgotCQkJCTwvaXh0cz4KLQkJCQk8aXh0cyBzPSJSb3NlUGV0YWwiPgotCQkJCQk8aXh0dHYgdD0iY2hhclNldCIgdj0iMCIgLz4KLQkJCQkJPGl4dHR2IHQ9InZlcnNpb24iIHY9IjQzIiAvPgotCQkJCQk8aXh0dHYgdD0iX3dyaXR0ZW4iIHY9IiYjMzQ7Um9zZSA2LjUuOTIzMi4xMCYjMzQ7IiAvPgotCQkJCTwvaXh0cz4KLQkJCTwvWE1JLmV4dGVuc2lvbj4KLQkJPC9Nb2RlbF9NYW5hZ2VtZW50LlBhY2thZ2U+Ci0JPC9YTUkuY29udGVudD4KLQotPC9YTUk+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc21hbGwuYWZ0ZXJEZWZhdWx0Rm9ybWF0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NtYWxsLmFmdGVyRGVmYXVsdEZvcm1hdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNjZiYTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc21hbGwuYWZ0ZXJEZWZhdWx0Rm9ybWF0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxYTUkgeG1pLnZlcnNpb249IjEuMCIgdGltZXN0YW1wPSJUdWUgTm92IDI4IDA4OjE5OjIxIEVTVCAyMDAwIj4KLQotCTxYTUkuaGVhZGVyPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyPlhNSSBUb29sa2l0PC9YTUkuZXhwb3J0ZXI+Ci0KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPjEuMDU8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPjwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlclZlcnNpb24+PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24+MS4wNTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24+MS4wNTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24geG1pLm5hbWU9IlVNTCIgeG1pLnZlcnNpb249IjEuMSI+PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbiB4bWkubmFtZT0iVU1MIiB4bWkudmVyc2lvbj0iMS4xIj48L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uIHhtaS5uYW1lPSJVTUwiIHhtaS52ZXJzaW9uPSIxLjEiPjEuMDU8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uIHhtaS5uYW1lPSJVTUwiIHhtaS52ZXJzaW9uPSIxLjEiPjEuMDU8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5tZXRhbW9kZWwgeG1pLm5hbWU9IlVNTCIgeG1pLnZlcnNpb249IjEuMSIgLz4KLQk8L1hNSS5oZWFkZXI+Ci0KLQk8WE1JLmNvbnRlbnQ+Ci0JCTxNb2RlbF9NYW5hZ2VtZW50LlBhY2thZ2UgeG1pLmlkPSJfMSIgeG1pLnV1aWQ9Ik5hbWU6ZWpiIj4KLQkJCTxGb3VuZGF0aW9uLkNvcmUuTW9kZWxFbGVtZW50Lm5hbWU+ZWpiPC9Gb3VuZGF0aW9uLkNvcmUuTW9kZWxFbGVtZW50Lm5hbWU+Ci0JCQk8Rm91bmRhdGlvbi5Db3JlLk1vZGVsRWxlbWVudC52aXNpYmlsaXR5IHhtaS52YWx1ZT0icHVibGljIiAvPgotCQkJPFhNSS5leHRlbnNpb24geG1pLmV4dGVuZGVyPSJJWFQiIHhtaS5leHRlbmRlcklEPSIiPgotCQkJCTxpeHRzIHM9IklETCI+Ci0JCQkJCTxpeHR0diB0PSJ1dWlkIiB2PSJEQ0U6ZDhhMjU2NjAtODgyNi0xMWUxLTAwMDAtMDA1ZDllNmFkZWM0OjEiIC8+Ci0JCQkJPC9peHRzPgotCQkJCTxpeHRzIHM9IlJvc2UiPgotCQkJCQk8aXh0dHYgdD0icXVpZCIgdj0iMzc4MEUyNzIwMzJEIiAvPgotCQkJCQk8aXh0dHYgdD0iaXNfdW5pdCIgdj0iVFJVRSIgLz4KLQkJCQkJPGl4dHR2IHQ9ImZpbGVfbmFtZSIgdj0iJiMzNDskRUNMSVBTRV9SRVNPVVJDRVNcXGVUb29scyBFSkIgbGlicmFyaWVzXFxlamJzY2hlbWEuY2F0JiMzNDsiIC8+Ci0JCQkJCTxpeHR0diB0PSJpc19sb2FkZWQiIHY9IlRSVUUiIC8+Ci0JCQkJPC9peHRzPgotCQkJCTxpeHRzIHM9IlJvc2VQZXRhbCI+Ci0JCQkJCTxpeHR0diB0PSJjaGFyU2V0IiB2PSIwIiAvPgotCQkJCQk8aXh0dHYgdD0idmVyc2lvbiIgdj0iNDMiIC8+Ci0JCQkJCTxpeHR0diB0PSJfd3JpdHRlbiIgdj0iJiMzNDtSb3NlIDYuNS45MjMyLjEwJiMzNDsiIC8+Ci0JCQkJPC9peHRzPgotCQkJPC9YTUkuZXh0ZW5zaW9uPgotCQk8L01vZGVsX01hbmFnZW1lbnQuUGFja2FnZT4KLQk8L1hNSS5jb250ZW50PgotCi08L1hNST4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zbWFsbC5hZnRlclNwbGl0TGluZXNGb3JtYXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc21hbGwuYWZ0ZXJTcGxpdExpbmVzRm9ybWF0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcwOGY2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zbWFsbC5hZnRlclNwbGl0TGluZXNGb3JtYXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPFhNSSB4bWkudmVyc2lvbj0iMS4wIiB0aW1lc3RhbXA9IlR1ZSBOb3YgMjggMDg6MTk6MjEgRVNUIDIwMDAiPgotCi0JPFhNSS5oZWFkZXI+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXI+WE1JIFRvb2xraXQ8L1hNSS5leHBvcnRlcj4KLQotCQkJPFhNSS5leHBvcnRlclZlcnNpb24+MS4wNTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlclZlcnNpb24+PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj48L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj4xLjA1PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj4xLjA1PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbiB4bWkubmFtZT0iVU1MIiB4bWkudmVyc2lvbj0iMS4xIj48L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uIHhtaS5uYW1lPSJVTUwiIHhtaS52ZXJzaW9uPSIxLjEiPjwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24geG1pLm5hbWU9IlVNTCIgeG1pLnZlcnNpb249IjEuMSI+Ci0JCQkJCTEuMDUKLQkJCQk8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uIHhtaS5uYW1lPSJVTUwiIHhtaS52ZXJzaW9uPSIxLjEiPgotCQkJCQkxLjA1Ci0JCQkJPC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkubWV0YW1vZGVsIHhtaS5uYW1lPSJVTUwiIHhtaS52ZXJzaW9uPSIxLjEiIC8+Ci0JPC9YTUkuaGVhZGVyPgotCi0JPFhNSS5jb250ZW50PgotCQk8TW9kZWxfTWFuYWdlbWVudC5QYWNrYWdlIHhtaS5pZD0iXzEiIHhtaS51dWlkPSJOYW1lOmVqYiI+Ci0JCQk8Rm91bmRhdGlvbi5Db3JlLk1vZGVsRWxlbWVudC5uYW1lPgotCQkJCWVqYgotCQkJPC9Gb3VuZGF0aW9uLkNvcmUuTW9kZWxFbGVtZW50Lm5hbWU+Ci0JCQk8Rm91bmRhdGlvbi5Db3JlLk1vZGVsRWxlbWVudC52aXNpYmlsaXR5IHhtaS52YWx1ZT0icHVibGljIiAvPgotCQkJPFhNSS5leHRlbnNpb24geG1pLmV4dGVuZGVyPSJJWFQiIHhtaS5leHRlbmRlcklEPSIiPgotCQkJCTxpeHRzIHM9IklETCI+Ci0JCQkJCTxpeHR0diB0PSJ1dWlkIgotCQkJCQkJdj0iRENFOmQ4YTI1NjYwLTg4MjYtMTFlMS0wMDAwLTAwNWQ5ZTZhZGVjNDoxIiAvPgotCQkJCTwvaXh0cz4KLQkJCQk8aXh0cyBzPSJSb3NlIj4KLQkJCQkJPGl4dHR2IHQ9InF1aWQiIHY9IjM3ODBFMjcyMDMyRCIgLz4KLQkJCQkJPGl4dHR2IHQ9ImlzX3VuaXQiIHY9IlRSVUUiIC8+Ci0JCQkJCTxpeHR0diB0PSJmaWxlX25hbWUiCi0JCQkJCQl2PSImIzM0OyRFQ0xJUFNFX1JFU09VUkNFU1xcZVRvb2xzIEVKQiBsaWJyYXJpZXNcXGVqYnNjaGVtYS5jYXQmIzM0OyIgLz4KLQkJCQkJPGl4dHR2IHQ9ImlzX2xvYWRlZCIgdj0iVFJVRSIgLz4KLQkJCQk8L2l4dHM+Ci0JCQkJPGl4dHMgcz0iUm9zZVBldGFsIj4KLQkJCQkJPGl4dHR2IHQ9ImNoYXJTZXQiIHY9IjAiIC8+Ci0JCQkJCTxpeHR0diB0PSJ2ZXJzaW9uIiB2PSI0MyIgLz4KLQkJCQkJPGl4dHR2IHQ9Il93cml0dGVuIiB2PSImIzM0O1Jvc2UgNi41LjkyMzIuMTAmIzM0OyIgLz4KLQkJCQk8L2l4dHM+Ci0JCQk8L1hNSS5leHRlbnNpb24+Ci0JCTwvTW9kZWxfTWFuYWdlbWVudC5QYWNrYWdlPgotCTwvWE1JLmNvbnRlbnQ+Ci0KLTwvWE1JPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NtYWxsLmFmdGVyU3BsaXRMaW5lc1NwbGl0TXVsdGlBdHRyc0Zvcm1hdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zbWFsbC5hZnRlclNwbGl0TGluZXNTcGxpdE11bHRpQXR0cnNGb3JtYXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTViYmYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NtYWxsLmFmdGVyU3BsaXRMaW5lc1NwbGl0TXVsdGlBdHRyc0Zvcm1hdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPFhNSQotCXhtaS52ZXJzaW9uPSIxLjAiCi0JdGltZXN0YW1wPSJUdWUgTm92IDI4IDA4OjE5OjIxIEVTVCAyMDAwIj4KLQotCTxYTUkuaGVhZGVyPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyPlhNSSBUb29sa2l0PC9YTUkuZXhwb3J0ZXI+Ci0KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPjEuMDU8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPjwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlclZlcnNpb24+PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24+MS4wNTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24+MS4wNTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24KLQkJCQkJeG1pLm5hbWU9IlVNTCIKLQkJCQkJeG1pLnZlcnNpb249IjEuMSI+Ci0JCQkJPC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbgotCQkJCQl4bWkubmFtZT0iVU1MIgotCQkJCQl4bWkudmVyc2lvbj0iMS4xIj4KLQkJCQk8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uCi0JCQkJCXhtaS5uYW1lPSJVTUwiCi0JCQkJCXhtaS52ZXJzaW9uPSIxLjEiPgotCQkJCQkxLjA1Ci0JCQkJPC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbgotCQkJCQl4bWkubmFtZT0iVU1MIgotCQkJCQl4bWkudmVyc2lvbj0iMS4xIj4KLQkJCQkJMS4wNQotCQkJCTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLm1ldGFtb2RlbAotCQkJCXhtaS5uYW1lPSJVTUwiCi0JCQkJeG1pLnZlcnNpb249IjEuMSIgLz4KLQk8L1hNSS5oZWFkZXI+Ci0KLQk8WE1JLmNvbnRlbnQ+Ci0JCTxNb2RlbF9NYW5hZ2VtZW50LlBhY2thZ2UKLQkJCXhtaS5pZD0iXzEiCi0JCQl4bWkudXVpZD0iTmFtZTplamIiPgotCQkJPEZvdW5kYXRpb24uQ29yZS5Nb2RlbEVsZW1lbnQubmFtZT4KLQkJCQllamIKLQkJCTwvRm91bmRhdGlvbi5Db3JlLk1vZGVsRWxlbWVudC5uYW1lPgotCQkJPEZvdW5kYXRpb24uQ29yZS5Nb2RlbEVsZW1lbnQudmlzaWJpbGl0eSB4bWkudmFsdWU9InB1YmxpYyIgLz4KLQkJCTxYTUkuZXh0ZW5zaW9uCi0JCQkJeG1pLmV4dGVuZGVyPSJJWFQiCi0JCQkJeG1pLmV4dGVuZGVySUQ9IiI+Ci0JCQkJPGl4dHMgcz0iSURMIj4KLQkJCQkJPGl4dHR2Ci0JCQkJCQl0PSJ1dWlkIgotCQkJCQkJdj0iRENFOmQ4YTI1NjYwLTg4MjYtMTFlMS0wMDAwLTAwNWQ5ZTZhZGVjNDoxIiAvPgotCQkJCTwvaXh0cz4KLQkJCQk8aXh0cyBzPSJSb3NlIj4KLQkJCQkJPGl4dHR2Ci0JCQkJCQl0PSJxdWlkIgotCQkJCQkJdj0iMzc4MEUyNzIwMzJEIiAvPgotCQkJCQk8aXh0dHYKLQkJCQkJCXQ9ImlzX3VuaXQiCi0JCQkJCQl2PSJUUlVFIiAvPgotCQkJCQk8aXh0dHYKLQkJCQkJCXQ9ImZpbGVfbmFtZSIKLQkJCQkJCXY9IiYjMzQ7JEVDTElQU0VfUkVTT1VSQ0VTXFxlVG9vbHMgRUpCIGxpYnJhcmllc1xcZWpic2NoZW1hLmNhdCYjMzQ7IiAvPgotCQkJCQk8aXh0dHYKLQkJCQkJCXQ9ImlzX2xvYWRlZCIKLQkJCQkJCXY9IlRSVUUiIC8+Ci0JCQkJPC9peHRzPgotCQkJCTxpeHRzIHM9IlJvc2VQZXRhbCI+Ci0JCQkJCTxpeHR0dgotCQkJCQkJdD0iY2hhclNldCIKLQkJCQkJCXY9IjAiIC8+Ci0JCQkJCTxpeHR0dgotCQkJCQkJdD0idmVyc2lvbiIKLQkJCQkJCXY9IjQzIiAvPgotCQkJCQk8aXh0dHYKLQkJCQkJCXQ9Il93cml0dGVuIgotCQkJCQkJdj0iJiMzNDtSb3NlIDYuNS45MjMyLjEwJiMzNDsiIC8+Ci0JCQkJPC9peHRzPgotCQkJPC9YTUkuZXh0ZW5zaW9uPgotCQk8L01vZGVsX01hbmFnZW1lbnQuUGFja2FnZT4KLQk8L1hNSS5jb250ZW50PgotCi08L1hNST4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zbWFsbC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zbWFsbC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyOTVkNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc21hbGwueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPFhNSSB4bWkudmVyc2lvbj0iMS4wIiB0aW1lc3RhbXA9IlR1ZSBOb3YgMjggMDg6MTk6MjEgRVNUIDIwMDAiPgotCi0JPFhNSS5oZWFkZXI+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXI+Ci0JCQlYTUkgVG9vbGtpdAotCQkJPC9YTUkuZXhwb3J0ZXI+Ci0JCQkKLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPiAgICAxLjA1ICAgIDwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlclZlcnNpb24+PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPjwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPjwvWE1JLmV4cG9ydGVyVmVyc2lvbj4gPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj4gICAgMS4wNSAgICA8L1hNSS5leHBvcnRlclZlcnNpb24+PC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlclZlcnNpb24+ICAgIDEuMDUgICAgPC9YTUkuZXhwb3J0ZXJWZXJzaW9uPiA8L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbiB4bWkubmFtZSA9CSJVTUwiIHhtaS52ZXJzaW9uID0gIjEuMSI+PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPjwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uIHhtaS5uYW1lID0JIlVNTCIgeG1pLnZlcnNpb24gPSAiMS4xIj48L1hNSS5leHBvcnRlclZlcnNpb24+IDwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uIHhtaS5uYW1lID0JIlVNTCIgeG1pLnZlcnNpb24gPSAiMS4xIj4gICAgMS4wNSAgICA8L1hNSS5leHBvcnRlclZlcnNpb24+PC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlclZlcnNpb24geG1pLm5hbWUgPQkiVU1MIiB4bWkudmVyc2lvbiA9ICIxLjEiPiAgICAxLjA1ICAgIDwvWE1JLmV4cG9ydGVyVmVyc2lvbj4gPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5tZXRhbW9kZWwgeG1pLm5hbWUgICAgPQkJCSJVTUwiIHhtaS52ZXJzaW9uCi0JCT0KLQkJIjEuMSIgLz4KLQk8L1hNSS5oZWFkZXI+Ci0KLQk8WE1JLmNvbnRlbnQ+Ci0JCTxNb2RlbF9NYW5hZ2VtZW50LlBhY2thZ2UKLQkJCXhtaS5pZD0iXzEiCQkJCQl4bWkudXVpZD0iTmFtZTplamIiPgotCQkJPEZvdW5kYXRpb24uQ29yZS5Nb2RlbEVsZW1lbnQubmFtZT5lamIgICAgPC9Gb3VuZGF0aW9uLkNvcmUuTW9kZWxFbGVtZW50Lm5hbWU+Ci0JCQk8Rm91bmRhdGlvbi5Db3JlLk1vZGVsRWxlbWVudC52aXNpYmlsaXR5IHhtaS52YWx1ZT0icHVibGljIi8+Ci0JCQk8WE1JLmV4dGVuc2lvbiB4bWkuZXh0ZW5kZXI9IklYVCIgeG1pLmV4dGVuZGVySUQ9IiI+Ci0JCQkJPGl4dHMgcz0iSURMIj4KLQkJCQkJPGl4dHR2IHQ9InV1aWQiIHY9IkRDRTpkOGEyNTY2MC04ODI2LTExZTEtMDAwMC0wMDVkOWU2YWRlYzQ6MSIKLQkJCQkJLz4KLQkJCQk8L2l4dHM+Ci0JCQkJPGl4dHMgcz0iUm9zZSI+Ci0JCQkJCTxpeHR0dgotCQkJCQkJdD0icXVpZCIKLQkJCQkJCXY9IjM3ODBFMjcyMDMyRCIKLQkJCQkJCS8+Ci0JCQkJCTxpeHR0dgotCQkJCQl0PSJpc191bml0IgotCQkJCQl2PSJUUlVFIgotCQkJCQkvPgotCQkJCQk8aXh0dHYgdD0iZmlsZV9uYW1lIgotCQkJCQkJdj0iJiMzNDskRUNMSVBTRV9SRVNPVVJDRVNcXGVUb29scyBFSkIgbGlicmFyaWVzXFxlamJzY2hlbWEuY2F0JiMzNDsiCi0JCQkJCQkJCQkvPgotCQkJCQk8aXh0dHYgdD0iaXNfbG9hZGVkIiB2PSJUUlVFIiAvPgotCQkJCTwvaXh0cz4KLQkJCQk8aXh0cyBzPSJSb3NlUGV0YWwiPgotCQkJCQk8aXh0dHYgdD0iY2hhclNldCIgdj0iMCIgLz4KLQkJCQkJCQk8aXh0dHYgdD0idmVyc2lvbiIgdj0iNDMiIC8+Ci0JPGl4dHR2IHQ9Il93cml0dGVuIiB2PSImIzM0O1Jvc2UgNi41LjkyMzIuMTAmIzM0OyIgLz48L2l4dHM+PC9YTUkuZXh0ZW5zaW9uPgotCQk8L01vZGVsX01hbmFnZW1lbnQuUGFja2FnZT4KLQk8L1hNSS5jb250ZW50PgotCi08L1hNST4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zcGFjZXMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc3BhY2VzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFhZDJmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zcGFjZXMueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc3BhY2VzQW5kQ2hhcnMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc3BhY2VzQW5kQ2hhcnMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzA0ZWI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NwYWNlc0FuZENoYXJzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSAgIGFiYyAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3N1YnNjcmlwdGlvbi5hZnRlckNsZWFudXAuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc3Vic2NyaXB0aW9uLmFmdGVyQ2xlYW51cC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjNTdmZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc3Vic2NyaXB0aW9uLmFmdGVyQ2xlYW51cC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDtjaGFyc2V0PVVURi04IiBsYW5ndWFnZT0iamF2YSIlPg0KLTwlQCB0YWdsaWIgdXJpPSIvV0VCLUlORi9hcHAudGxkIiBwcmVmaXg9ImFwcCIlPg0KLTwlQCB0YWdsaWIgdXJpPSIvV0VCLUlORi9zdHJ1dHMtYmVhbi50bGQiIHByZWZpeD0iYmVhbiIlPg0KLTwlQCB0YWdsaWIgdXJpPSIvV0VCLUlORi9zdHJ1dHMtaHRtbC50bGQiIHByZWZpeD0iaHRtbCIlPg0KLTwlQCB0YWdsaWIgdXJpPSIvV0VCLUlORi9zdHJ1dHMtbG9naWMudGxkIiBwcmVmaXg9ImxvZ2ljIiU+DQotPGFwcDpjaGVja0xvZ29uIC8+DQotDQotPCUtLSBJbiByZWFsIGxpZmUsIHRoZXNlIHdvdWxkIGJlIGxvYWRlZCBmcm9tIGEgZGF0YWJhc2UgLS0lPg0KLTwlDQotICBqYXZhLnV0aWwuQXJyYXlMaXN0IGxpc3QgPSBuZXcgamF2YS51dGlsLkFycmF5TGlzdCgpOw0KLSAgbGlzdC5hZGQobmV3IG9yZy5hcGFjaGUuc3RydXRzLnV0aWwuTGFiZWxWYWx1ZUJlYW4oIklNQVAgUHJvdG9jb2wiLCAiaW1hcCIpKTsNCi0gIGxpc3QuYWRkKG5ldyBvcmcuYXBhY2hlLnN0cnV0cy51dGlsLkxhYmVsVmFsdWVCZWFuKCJQT1AzIFByb3RvY29sIiwgInBvcDMiKSk7DQotICBwYWdlQ29udGV4dC5zZXRBdHRyaWJ1dGUoInNlcnZlclR5cGVzIiwgbGlzdCk7DQotJT4NCi0NCi08aHRtbDpodG1sPg0KLTxIRUFEPg0KLTxsb2dpYzplcXVhbCBuYW1lPSJzdWJzY3JpcHRpb25Gb3JtIiBwcm9wZXJ0eT0iYWN0aW9uIiBzY29wZT0icmVxdWVzdCINCi0JdmFsdWU9IkNyZWF0ZSI+DQotCTxUSVRMRT48YmVhbjptZXNzYWdlIGtleT0ic3Vic2NyaXB0aW9uLnRpdGxlLmNyZWF0ZSIgLz48L1RJVExFPg0KLTwvbG9naWM6ZXF1YWw+DQotPGxvZ2ljOmVxdWFsIG5hbWU9InN1YnNjcmlwdGlvbkZvcm0iIHByb3BlcnR5PSJhY3Rpb24iIHNjb3BlPSJyZXF1ZXN0Ig0KLQl2YWx1ZT0iRGVsZXRlIj4NCi0JPFRJVExFPjxiZWFuOm1lc3NhZ2Uga2V5PSJzdWJzY3JpcHRpb24udGl0bGUuZGVsZXRlIiAvPjwvVElUTEU+DQotPC9sb2dpYzplcXVhbD4NCi08bG9naWM6ZXF1YWwgbmFtZT0ic3Vic2NyaXB0aW9uRm9ybSIgcHJvcGVydHk9ImFjdGlvbiIgc2NvcGU9InJlcXVlc3QiDQotCXZhbHVlPSJFZGl0Ij4NCi0JPFRJVExFPjxiZWFuOm1lc3NhZ2Uga2V5PSJzdWJzY3JpcHRpb24udGl0bGUuZWRpdCIgLz48L1RJVExFPg0KLTwvbG9naWM6ZXF1YWw+DQotPGh0bWw6YmFzZSAvPg0KLTwvSEVBRD4NCi08Qk9EWSBiZ2NvbG9yPSJ3aGl0ZSI+DQotDQotPGh0bWw6ZXJyb3JzIC8+DQotDQotPGh0bWw6Zm9ybSBhY3Rpb249Ii9zYXZlU3Vic2NyaXB0aW9uIiBmb2N1cz0iaG9zdCI+DQotCTxodG1sOmhpZGRlbiBwcm9wZXJ0eT0iYWN0aW9uIiAvPg0KLQk8VEFCTEUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSI+DQotDQotCQk8VFI+DQotCQkJPFRIIGFsaWduPSJyaWdodCI+PGJlYW46bWVzc2FnZSBrZXk9InByb21wdC51c2VybmFtZSIgLz46PC9USD4NCi0JCQk8VEQgYWxpZ249ImxlZnQiPjxiZWFuOndyaXRlIG5hbWU9InVzZXIiIHByb3BlcnR5PSJ1c2VybmFtZSINCi0JCQkJZmlsdGVyPSJ0cnVlIiAvPjwvVEQ+DQotCQk8L1RSPg0KLQ0KLQkJPFRSPg0KLQkJCTxUSCBhbGlnbj0icmlnaHQiPjxiZWFuOm1lc3NhZ2Uga2V5PSJwcm9tcHQubWFpbEhvc3RuYW1lIiAvPjo8L1RIPg0KLQkJCTxURCBhbGlnbj0ibGVmdCI+PGxvZ2ljOmVxdWFsIG5hbWU9InN1YnNjcmlwdGlvbkZvcm0iDQotCQkJCXByb3BlcnR5PSJhY3Rpb24iIHNjb3BlPSJyZXF1ZXN0IiB2YWx1ZT0iQ3JlYXRlIj4NCi0JCQkJPGh0bWw6dGV4dCBwcm9wZXJ0eT0iaG9zdCIgc2l6ZT0iNTAiIC8+DQotCQkJPC9sb2dpYzplcXVhbD4gPGxvZ2ljOm5vdEVxdWFsIG5hbWU9InN1YnNjcmlwdGlvbkZvcm0iDQotCQkJCXByb3BlcnR5PSJhY3Rpb24iIHNjb3BlPSJyZXF1ZXN0IiB2YWx1ZT0iQ3JlYXRlIj4NCi0JCQkJPGh0bWw6aGlkZGVuIHByb3BlcnR5PSJob3N0IiB3cml0ZT0idHJ1ZSIgLz4NCi0JCQk8L2xvZ2ljOm5vdEVxdWFsPjwvVEQ+DQotCQk8L1RSPg0KLQ0KLQkJPFRSPg0KLQkJCTxUSCBhbGlnbj0icmlnaHQiPjxiZWFuOm1lc3NhZ2Uga2V5PSJwcm9tcHQubWFpbFVzZXJuYW1lIiAvPjo8L1RIPg0KLQkJCTxURCBhbGlnbj0ibGVmdCI+PGh0bWw6dGV4dCBwcm9wZXJ0eT0idXNlcm5hbWUiIHNpemU9IjUwIiAvPjwvVEQ+DQotCQk8L1RSPg0KLQ0KLQkJPFRSPg0KLQkJCTxUSCBhbGlnbj0icmlnaHQiPjxiZWFuOm1lc3NhZ2Uga2V5PSJwcm9tcHQubWFpbFBhc3N3b3JkIiAvPjo8L1RIPg0KLQkJCTxURCBhbGlnbj0ibGVmdCI+PGh0bWw6cGFzc3dvcmQgcHJvcGVydHk9InBhc3N3b3JkIiBzaXplPSI1MCIgLz48L1REPg0KLQkJPC9UUj4NCi0NCi0JCTxUUj4NCi0JCQk8VEggYWxpZ249InJpZ2h0Ij48YmVhbjptZXNzYWdlIGtleT0icHJvbXB0Lm1haWxTZXJ2ZXJUeXBlIiAvPjo8L1RIPg0KLQkJCTxURCBhbGlnbj0ibGVmdCI+PGh0bWw6c2VsZWN0IHByb3BlcnR5PSJ0eXBlIj4NCi0JCQkJPGh0bWw6b3B0aW9ucyBjb2xsZWN0aW9uPSJzZXJ2ZXJUeXBlcyIgcHJvcGVydHk9InZhbHVlIg0KLQkJCQkJbGFiZWxQcm9wZXJ0eT0ibGFiZWwiIC8+DQotCQkJPC9odG1sOnNlbGVjdD48L1REPg0KLQkJPC9UUj4NCi0NCi0JCTxUUj4NCi0JCQk8VEggYWxpZ249InJpZ2h0Ij48YmVhbjptZXNzYWdlIGtleT0icHJvbXB0LmF1dG9Db25uZWN0IiAvPjo8L1RIPg0KLQkJCTxURCBhbGlnbj0ibGVmdCI+PGh0bWw6Y2hlY2tib3ggcHJvcGVydHk9ImF1dG9Db25uZWN0IiAvPjwvVEQ+DQotCQk8L1RSPg0KLQ0KLQkJPFRSPg0KLQkJCTxURCBhbGlnbj0icmlnaHQiPjxsb2dpYzplcXVhbCBuYW1lPSJzdWJzY3JpcHRpb25Gb3JtIg0KLQkJCQlwcm9wZXJ0eT0iYWN0aW9uIiBzY29wZT0icmVxdWVzdCIgdmFsdWU9IkNyZWF0ZSI+DQotCQkJCTxodG1sOnN1Ym1pdD4NCi0JCQkJCTxiZWFuOm1lc3NhZ2Uga2V5PSJidXR0b24uc2F2ZSIgLz4NCi0JCQkJPC9odG1sOnN1Ym1pdD4NCi0JCQk8L2xvZ2ljOmVxdWFsPiA8bG9naWM6ZXF1YWwgbmFtZT0ic3Vic2NyaXB0aW9uRm9ybSIgcHJvcGVydHk9ImFjdGlvbiINCi0JCQkJc2NvcGU9InJlcXVlc3QiIHZhbHVlPSJEZWxldGUiPg0KLQkJCQk8aHRtbDpzdWJtaXQ+DQotCQkJCQk8YmVhbjptZXNzYWdlIGtleT0iYnV0dG9uLmNvbmZpcm0iIC8+DQotCQkJCTwvaHRtbDpzdWJtaXQ+DQotCQkJPC9sb2dpYzplcXVhbD4gPGxvZ2ljOmVxdWFsIG5hbWU9InN1YnNjcmlwdGlvbkZvcm0iIHByb3BlcnR5PSJhY3Rpb24iDQotCQkJCXNjb3BlPSJyZXF1ZXN0IiB2YWx1ZT0iRWRpdCI+DQotCQkJCTxodG1sOnN1Ym1pdD4NCi0JCQkJCTxiZWFuOm1lc3NhZ2Uga2V5PSJidXR0b24uc2F2ZSIgLz4NCi0JCQkJPC9odG1sOnN1Ym1pdD4NCi0JCQk8L2xvZ2ljOmVxdWFsPjwvVEQ+DQotCQkJPFREIGFsaWduPSJsZWZ0Ij48bG9naWM6bm90RXF1YWwgbmFtZT0ic3Vic2NyaXB0aW9uRm9ybSINCi0JCQkJcHJvcGVydHk9ImFjdGlvbiIgc2NvcGU9InJlcXVlc3QiIHZhbHVlPSJEZWxldGUiPg0KLQkJCQk8aHRtbDpyZXNldD4NCi0JCQkJCTxiZWFuOm1lc3NhZ2Uga2V5PSJidXR0b24ucmVzZXQiIC8+DQotCQkJCTwvaHRtbDpyZXNldD4NCi0JCQk8L2xvZ2ljOm5vdEVxdWFsPiAmbmJzcDsgPGh0bWw6Y2FuY2VsPg0KLQkJCQk8YmVhbjptZXNzYWdlIGtleT0iYnV0dG9uLmNhbmNlbCIgLz4NCi0JCQk8L2h0bWw6Y2FuY2VsPjwvVEQ+DQotCQk8L1RSPg0KLQ0KLQk8L1RBQkxFPg0KLQ0KLTwvaHRtbDpmb3JtPg0KLQ0KLTwvQk9EWT4NCi08L2h0bWw6aHRtbD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zdWJzY3JpcHRpb24uanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc3Vic2NyaXB0aW9uLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBiZjNlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zdWJzY3JpcHRpb24uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7Y2hhcnNldD1VVEYtOCIgbGFuZ3VhZ2U9ImphdmEiICU+DQotPCVAIHRhZ2xpYiB1cmk9Ii9XRUItSU5GL2FwcC50bGQiICAgIHByZWZpeD0iYXBwIiAlPg0KLTwlQCB0YWdsaWIgdXJpPSIvV0VCLUlORi9zdHJ1dHMtYmVhbi50bGQiIHByZWZpeD0iYmVhbiIgJT4NCi08JUAgdGFnbGliIHVyaT0iL1dFQi1JTkYvc3RydXRzLWh0bWwudGxkIiBwcmVmaXg9Imh0bWwiICU+DQotPCVAIHRhZ2xpYiB1cmk9Ii9XRUItSU5GL3N0cnV0cy1sb2dpYy50bGQiIHByZWZpeD0ibG9naWMiICU+DQotPGFwcDpjaGVja0xvZ29uLz4NCi0NCi08JS0tIEluIHJlYWwgbGlmZSwgdGhlc2Ugd291bGQgYmUgbG9hZGVkIGZyb20gYSBkYXRhYmFzZSAtLSU+DQotPCUNCi0gIGphdmEudXRpbC5BcnJheUxpc3QgbGlzdCA9IG5ldyBqYXZhLnV0aWwuQXJyYXlMaXN0KCk7DQotICBsaXN0LmFkZChuZXcgb3JnLmFwYWNoZS5zdHJ1dHMudXRpbC5MYWJlbFZhbHVlQmVhbigiSU1BUCBQcm90b2NvbCIsICJpbWFwIikpOw0KLSAgbGlzdC5hZGQobmV3IG9yZy5hcGFjaGUuc3RydXRzLnV0aWwuTGFiZWxWYWx1ZUJlYW4oIlBPUDMgUHJvdG9jb2wiLCAicG9wMyIpKTsNCi0gIHBhZ2VDb250ZXh0LnNldEF0dHJpYnV0ZSgic2VydmVyVHlwZXMiLCBsaXN0KTsNCi0lPg0KLQ0KLTxodG1sOmh0bWw+DQotPGhlYWQ+DQotPGxvZ2ljOmVxdWFsIG5hbWU9InN1YnNjcmlwdGlvbkZvcm0iIHByb3BlcnR5PSJhY3Rpb24iDQotICAgICAgICAgICAgc2NvcGU9InJlcXVlc3QiIHZhbHVlPSJDcmVhdGUiPg0KLSAgPHRpdGxlPjxiZWFuOm1lc3NhZ2Uga2V5PSJzdWJzY3JpcHRpb24udGl0bGUuY3JlYXRlIi8+PC90aXRsZT4NCi08L2xvZ2ljOmVxdWFsPg0KLTxsb2dpYzplcXVhbCBuYW1lPSJzdWJzY3JpcHRpb25Gb3JtIiBwcm9wZXJ0eT0iYWN0aW9uIg0KLSAgICAgICAgICAgIHNjb3BlPSJyZXF1ZXN0IiB2YWx1ZT0iRGVsZXRlIj4NCi0gIDx0aXRsZT48YmVhbjptZXNzYWdlIGtleT0ic3Vic2NyaXB0aW9uLnRpdGxlLmRlbGV0ZSIvPjwvdGl0bGU+DQotPC9sb2dpYzplcXVhbD4NCi08bG9naWM6ZXF1YWwgbmFtZT0ic3Vic2NyaXB0aW9uRm9ybSIgcHJvcGVydHk9ImFjdGlvbiINCi0gICAgICAgICAgICBzY29wZT0icmVxdWVzdCIgdmFsdWU9IkVkaXQiPg0KLSAgPHRpdGxlPjxiZWFuOm1lc3NhZ2Uga2V5PSJzdWJzY3JpcHRpb24udGl0bGUuZWRpdCIvPjwvdGl0bGU+DQotPC9sb2dpYzplcXVhbD4NCi08aHRtbDpiYXNlLz4NCi08L2hlYWQ+DQotPGJvZHkgYmdjb2xvcj0id2hpdGUiPg0KLQ0KLTxodG1sOmVycm9ycy8+DQotDQotPGh0bWw6Zm9ybSBhY3Rpb249Ii9zYXZlU3Vic2NyaXB0aW9uIiBmb2N1cz0iaG9zdCI+DQotPGh0bWw6aGlkZGVuIHByb3BlcnR5PSJhY3Rpb24iLz4NCi08dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSI+DQotDQotICA8dHI+DQotICAgIDx0aCBhbGlnbj0icmlnaHQiPg0KLSAgICAgIDxiZWFuOm1lc3NhZ2Uga2V5PSJwcm9tcHQudXNlcm5hbWUiLz46DQotICAgIDwvdGg+DQotICAgIDx0ZCBhbGlnbj0ibGVmdCI+DQotICAgICAgICA8YmVhbjp3cml0ZSBuYW1lPSJ1c2VyIiBwcm9wZXJ0eT0idXNlcm5hbWUiIGZpbHRlcj0idHJ1ZSIvPg0KLSAgICA8L3RkPg0KLSAgPC90cj4NCi0NCi0gIDx0cj4NCi0gICAgPHRoIGFsaWduPSJyaWdodCI+DQotICAgICAgPGJlYW46bWVzc2FnZSBrZXk9InByb21wdC5tYWlsSG9zdG5hbWUiLz46DQotICAgIDwvdGg+DQotICAgIDx0ZCBhbGlnbj0ibGVmdCI+DQotICAgICAgPGxvZ2ljOmVxdWFsIG5hbWU9InN1YnNjcmlwdGlvbkZvcm0iIHByb3BlcnR5PSJhY3Rpb24iDQotICAgICAgICAgICAgICAgICAgc2NvcGU9InJlcXVlc3QiIHZhbHVlPSJDcmVhdGUiPg0KLSAgICAgICAgPGh0bWw6dGV4dCBwcm9wZXJ0eT0iaG9zdCIgc2l6ZT0iNTAiLz4NCi0gICAgICA8L2xvZ2ljOmVxdWFsPg0KLSAgICAgIDxsb2dpYzpub3RFcXVhbCBuYW1lPSJzdWJzY3JpcHRpb25Gb3JtIiBwcm9wZXJ0eT0iYWN0aW9uIg0KLSAgICAgICAgICAgICAgICAgICAgIHNjb3BlPSJyZXF1ZXN0IiB2YWx1ZT0iQ3JlYXRlIj4NCi0gICAgICAgIDxodG1sOmhpZGRlbiBwcm9wZXJ0eT0iaG9zdCIgd3JpdGU9InRydWUiLz4NCi0gICAgICA8L2xvZ2ljOm5vdEVxdWFsPg0KLSAgICA8L3RkPg0KLSAgPC90cj4NCi0NCi0gIDx0cj4NCi0gICAgPHRoIGFsaWduPSJyaWdodCI+DQotICAgICAgPGJlYW46bWVzc2FnZSBrZXk9InByb21wdC5tYWlsVXNlcm5hbWUiLz46DQotICAgIDwvdGg+DQotICAgIDx0ZCBhbGlnbj0ibGVmdCI+DQotICAgICAgPGh0bWw6dGV4dCBwcm9wZXJ0eT0idXNlcm5hbWUiIHNpemU9IjUwIi8+DQotICAgIDwvdGQ+DQotICA8L3RyPg0KLQ0KLSAgPHRyPg0KLSAgICA8dGggYWxpZ249InJpZ2h0Ij4NCi0gICAgICA8YmVhbjptZXNzYWdlIGtleT0icHJvbXB0Lm1haWxQYXNzd29yZCIvPjoNCi0gICAgPC90aD4NCi0gICAgPHRkIGFsaWduPSJsZWZ0Ij4NCi0gICAgICA8aHRtbDpwYXNzd29yZCBwcm9wZXJ0eT0icGFzc3dvcmQiIHNpemU9IjUwIi8+DQotICAgIDwvdGQ+DQotICA8L3RyPg0KLQ0KLSAgPHRyPg0KLSAgICA8dGggYWxpZ249InJpZ2h0Ij4NCi0gICAgICA8YmVhbjptZXNzYWdlIGtleT0icHJvbXB0Lm1haWxTZXJ2ZXJUeXBlIi8+Og0KLSAgICA8L3RoPg0KLSAgICA8dGQgYWxpZ249ImxlZnQiPg0KLSAgICAgIDxodG1sOnNlbGVjdCBwcm9wZXJ0eT0idHlwZSI+DQotICAgICAgICA8aHRtbDpvcHRpb25zIGNvbGxlY3Rpb249InNlcnZlclR5cGVzIiBwcm9wZXJ0eT0idmFsdWUiDQotICAgICAgICAgICAgICAgICAgIGxhYmVsUHJvcGVydHk9ImxhYmVsIi8+DQotICAgICAgPC9odG1sOnNlbGVjdD4NCi0gICAgPC90ZD4NCi0gIDwvdHI+DQotDQotICA8dHI+DQotICAgIDx0aCBhbGlnbj0icmlnaHQiPg0KLSAgICAgIDxiZWFuOm1lc3NhZ2Uga2V5PSJwcm9tcHQuYXV0b0Nvbm5lY3QiLz46DQotICAgIDwvdGg+DQotICAgIDx0ZCBhbGlnbj0ibGVmdCI+DQotICAgICAgPGh0bWw6Y2hlY2tib3ggcHJvcGVydHk9ImF1dG9Db25uZWN0Ii8+DQotICAgIDwvdGQ+DQotICA8L3RyPg0KLQ0KLSAgPHRyPg0KLSAgICA8dGQgYWxpZ249InJpZ2h0Ij4NCi0gICAgICA8bG9naWM6ZXF1YWwgbmFtZT0ic3Vic2NyaXB0aW9uRm9ybSIgcHJvcGVydHk9ImFjdGlvbiINCi0gICAgICAgICAgICAgICAgICBzY29wZT0icmVxdWVzdCIgdmFsdWU9IkNyZWF0ZSI+DQotICAgICAgICA8aHRtbDpzdWJtaXQ+DQotICAgICAgICAgIDxiZWFuOm1lc3NhZ2Uga2V5PSJidXR0b24uc2F2ZSIvPg0KLSAgICAgICAgPC9odG1sOnN1Ym1pdD4NCi0gICAgICA8L2xvZ2ljOmVxdWFsPg0KLSAgICAgIDxsb2dpYzplcXVhbCBuYW1lPSJzdWJzY3JpcHRpb25Gb3JtIiBwcm9wZXJ0eT0iYWN0aW9uIg0KLSAgICAgICAgICAgICAgICAgIHNjb3BlPSJyZXF1ZXN0IiB2YWx1ZT0iRGVsZXRlIj4NCi0gICAgICAgIDxodG1sOnN1Ym1pdD4NCi0gICAgICAgICAgPGJlYW46bWVzc2FnZSBrZXk9ImJ1dHRvbi5jb25maXJtIi8+DQotICAgICAgICA8L2h0bWw6c3VibWl0Pg0KLSAgICAgIDwvbG9naWM6ZXF1YWw+DQotICAgICAgPGxvZ2ljOmVxdWFsIG5hbWU9InN1YnNjcmlwdGlvbkZvcm0iIHByb3BlcnR5PSJhY3Rpb24iDQotICAgICAgICAgICAgICAgICAgc2NvcGU9InJlcXVlc3QiIHZhbHVlPSJFZGl0Ij4NCi0gICAgICAgIDxodG1sOnN1Ym1pdD4NCi0gICAgICAgICAgPGJlYW46bWVzc2FnZSBrZXk9ImJ1dHRvbi5zYXZlIi8+DQotICAgICAgICA8L2h0bWw6c3VibWl0Pg0KLSAgICAgIDwvbG9naWM6ZXF1YWw+DQotICAgIDwvdGQ+DQotICAgIDx0ZCBhbGlnbj0ibGVmdCI+DQotICAgICAgPGxvZ2ljOm5vdEVxdWFsIG5hbWU9InN1YnNjcmlwdGlvbkZvcm0iIHByb3BlcnR5PSJhY3Rpb24iDQotICAgICAgICAgICAgICAgICAgICAgc2NvcGU9InJlcXVlc3QiIHZhbHVlPSJEZWxldGUiPg0KLSAgICAgICAgPGh0bWw6cmVzZXQ+DQotICAgICAgICAgIDxiZWFuOm1lc3NhZ2Uga2V5PSJidXR0b24ucmVzZXQiLz4NCi0gICAgICAgIDwvaHRtbDpyZXNldD4NCi0gICAgICA8L2xvZ2ljOm5vdEVxdWFsPg0KLSAgICAgICZuYnNwOw0KLSAgICAgIDxodG1sOmNhbmNlbD4NCi0gICAgICAgIDxiZWFuOm1lc3NhZ2Uga2V5PSJidXR0b24uY2FuY2VsIi8+DQotICAgICAgPC9odG1sOmNhbmNlbD4NCi0gICAgPC90ZD4NCi0gIDwvdHI+DQotDQotPC90YWJsZT4NCi0NCi08L2h0bWw6Zm9ybT4NCi0NCi08L2JvZHk+DQotPC9odG1sOmh0bWw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvdGFnT3Blbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy90YWdPcGVuLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVmYTc4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy90YWdPcGVuLnhtbAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy90YWdPcGVuVGFnQ2xvc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvdGFnT3BlblRhZ0Nsb3NlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc4N2U0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy90YWdPcGVuVGFnQ2xvc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy90YWdzLmFmdGVyRGVmYXVsdEZvcm1hdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy90YWdzLmFmdGVyRGVmYXVsdEZvcm1hdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2OTIzNWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvdGFncy5hZnRlckRlZmF1bHRGb3JtYXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPHRhZz4KLQk8dGFnPjwvdGFnPgotCTx0YWc+PC90YWc+Ci0JPHRhZz48L3RhZz4KLQk8dGFnPjwvdGFnPgotCTx0YWc+Ci0JCTx0YWc+PC90YWc+Ci0JCTx0YWc+PC90YWc+Ci0JCTx0YWc+PC90YWc+Ci0JCTx0YWc+PC90YWc+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvdGFncy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy90YWdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZhOTQ5Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy90YWdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTx0YWc+Ci08dGFnPjwvdGFnPgotPHRhZz48L3RhZyA+Ci08dGFnPiA8L3RhZz4KLTx0YWc+IDwvdGFnID4KLTx0YWcgPgotPHRhZyA+PC90YWc+Ci08dGFnID48L3RhZyA+Ci08dGFnID4gPC90YWc+Ci08dGFnID4gPC90YWcgPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NvbnRlbnR0eXBlaWRlbnRpZmllci9jb250ZW50c3BlY2lmaWMvTnVsbFN0cmVhbS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY29udGVudHR5cGVpZGVudGlmaWVyL2NvbnRlbnRzcGVjaWZpYy9OdWxsU3RyZWFtLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMTZmODMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY29udGVudHR5cGVpZGVudGlmaWVyL2NvbnRlbnRzcGVjaWZpYy9OdWxsU3RyZWFtLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLmNvbnRlbnR0eXBlaWRlbnRpZmllci5jb250ZW50c3BlY2lmaWM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLQotcHVibGljIGNsYXNzIE51bGxTdHJlYW0gZXh0ZW5kcyBJbnB1dFN0cmVhbSB7Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBqYXZhLmlvLklucHV0U3RyZWFtI3JlYWQoKQotCSAqLwotCXB1YmxpYyBpbnQgcmVhZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jb250ZW50dHlwZWlkZW50aWZpZXIvY29udGVudHNwZWNpZmljL1Rlc3RDb250ZW50VHlwZUhhbmRsZXJzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jb250ZW50dHlwZWlkZW50aWZpZXIvY29udGVudHNwZWNpZmljL1Rlc3RDb250ZW50VHlwZUhhbmRsZXJzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmZTQ4NzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY29udGVudHR5cGVpZGVudGlmaWVyL2NvbnRlbnRzcGVjaWZpYy9UZXN0Q29udGVudFR5cGVIYW5kbGVycy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLmNvbnRlbnR0eXBlaWRlbnRpZmllci5jb250ZW50c3BlY2lmaWM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50VHlwZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JDU1M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvclhNTDsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGlzIHRvIHRlc3QgdmVyeSBiYXNpY3Mgb2YgY29udGVudCB0eXBlIGhhbmRsZXJzLgotICogCi0gKiBJdCB0ZXN0cyB0aGF0Ci0gKiAKLSAqIEJWVDogY29udGVudCByZWdpc3RyeSBjYW4gYmUgLyBpcyBjcmVhdGVkIDUgZXhwZWN0ZWQgY29udGVudFR5cGVJZGVudGlmaWVycwotICogY2FuIGJlIGNyZWF0ZWQvZm91bmQgYmFzZWQgb24gaWQuIHRoZXJlIGlzIG9uZSBhbmQgb25seSBvbmUgZGVmYXVsdCBjb250ZW50Ci0gKiB0eXBlIGhhbmRsZXIuCi0gKiAKLSAqIAotICogCi0gKiAgCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0Q29udGVudFR5cGVIYW5kbGVycyBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQlwdWJsaWMgVGVzdENvbnRlbnRUeXBlSGFuZGxlcnMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgSUNvbnRlbnRUeXBlTWFuYWdlciBnZXRDb250ZW50VHlwZVJlZ2lzdHJ5KCkgewotCQlJQ29udGVudFR5cGVNYW5hZ2VyIHJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0Q29udGVudFR5cGVNYW5hZ2VyKCk7Ci0JCXJldHVybiByZWdpc3RyeTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRpb24oKSB7Ci0JCUlDb250ZW50VHlwZU1hbmFnZXIgcmVnaXN0cnkgPSBnZXRDb250ZW50VHlwZVJlZ2lzdHJ5KCk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnQgdHlwZSBpZGVudGlmZXIgcmVnaXN0cnkgbXVzdCBleGlzdCIsIHJlZ2lzdHJ5ICE9IG51bGwpOwotCQlpZiAoREVCVUcpIHsKLQkJCUlDb250ZW50VHlwZVtdIGFsbFR5cGVzID0gcmVnaXN0cnkuZ2V0QWxsQ29udGVudFR5cGVzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGFsbFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKGFsbFR5cGVzW2ldKTsKLQotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTEV4aXN0cygpIHsKLQkJU3RyaW5nIGlkID0gQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1NTRVhNTDsKLQkJSUNvbnRlbnRUeXBlTWFuYWdlciByZWdpc3RyeSA9IGdldENvbnRlbnRUeXBlUmVnaXN0cnkoKTsKLQkJSUNvbnRlbnRUeXBlIGlkZW50aWZpZXIgPSByZWdpc3RyeS5nZXRDb250ZW50VHlwZShpZCk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnQgdHlwZSBpZGVudGlmaWVyICIgKyBpZCArICIgZG9lcyBub3QgaGF2ZSBjdXN0b20gWE1MIHR5cGUgIiwgaWRlbnRpZmllciAhPSBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SFRNTEV4aXN0cygpIHsKLQkJU3RyaW5nIGlkID0gQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MOwotCQlJQ29udGVudFR5cGVNYW5hZ2VyIHJlZ2lzdHJ5ID0gZ2V0Q29udGVudFR5cGVSZWdpc3RyeSgpOwotCQlJQ29udGVudFR5cGUgaWRlbnRpZmllciA9IHJlZ2lzdHJ5LmdldENvbnRlbnRUeXBlKGlkKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudCB0eXBlIGlkZW50aWZpZXIgIiArIGlkICsgIiBkb2VzIG5vdCBoYXZlIEhUTUwgdHlwZSAiLCBpZGVudGlmaWVyICE9IG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BFeGlzdHMoKSB7Ci0JCVN0cmluZyBpZCA9IENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1A7Ci0JCUlDb250ZW50VHlwZU1hbmFnZXIgcmVnaXN0cnkgPSBnZXRDb250ZW50VHlwZVJlZ2lzdHJ5KCk7Ci0JCUlDb250ZW50VHlwZSBpZGVudGlmaWVyID0gcmVnaXN0cnkuZ2V0Q29udGVudFR5cGUoaWQpOwotCQlhc3NlcnRUcnVlKCJjb250ZW50IHR5cGUgaWRlbnRpZmllciAiICsgaWQgKyAiIGRvZXMgbm90IGhhdmUgSlNQIHR5cGUgIiwgaWRlbnRpZmllciAhPSBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q1NTRXhpc3RzKCkgewotCQlTdHJpbmcgaWQgPSBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTOwotCQlJQ29udGVudFR5cGVNYW5hZ2VyIHJlZ2lzdHJ5ID0gZ2V0Q29udGVudFR5cGVSZWdpc3RyeSgpOwotCQlJQ29udGVudFR5cGUgaWRlbnRpZmllciA9IHJlZ2lzdHJ5LmdldENvbnRlbnRUeXBlKGlkKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudCB0eXBlIGlkZW50aWZpZXIgIiArIGlkICsgIiBkb2VzIG5vdCBoYXZlIENTUyB0eXBlICIsIGlkZW50aWZpZXIgIT0gbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERUREV4aXN0cygpIHsKLQkJU3RyaW5nIGlkID0gIm9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5kdGRzb3VyY2UiOwotCQlJQ29udGVudFR5cGVNYW5hZ2VyIHJlZ2lzdHJ5ID0gZ2V0Q29udGVudFR5cGVSZWdpc3RyeSgpOwotCQlJQ29udGVudFR5cGUgaWRlbnRpZmllciA9IHJlZ2lzdHJ5LmdldENvbnRlbnRUeXBlKGlkKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudCB0eXBlIGlkZW50aWZpZXIgIiArIGlkICsgIiBkb2VzIG5vdCBoYXZlIERURCB0eXBlICIsIGlkZW50aWZpZXIgIT0gbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTEV4aXN0c0J5RmlsZUV4dGVuc2lvbigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9ICJ0ZXN0LnhtbCI7Ci0JCUlDb250ZW50VHlwZU1hbmFnZXIgcmVnaXN0cnkgPSBnZXRDb250ZW50VHlwZVJlZ2lzdHJ5KCk7Ci0JCUlDb250ZW50VHlwZSBpZGVudGlmaWVyID0gcmVnaXN0cnkuZ2V0RGVzY3JpcHRpb25Gb3IobmV3IE51bGxTdHJlYW0oKSwgZmlsZW5hbWUsIElDb250ZW50RGVzY3JpcHRpb24uQUxMKS5nZXRDb250ZW50VHlwZSgpOwotCQlhc3NlcnRUcnVlKCJjb250ZW50IHR5cGUgaWRlbnRpZmllciBmb3IgIiArIGZpbGVuYW1lICsgIiBkb2VzIG5vdCBoYXZlIFhNTCB0eXBlICIsIGlkZW50aWZpZXIgIT0gbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEhUTUxFeGlzdHNCeUZpbGVFeHRlbnNpb24oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSAidGVzdC5odG1sIjsKLQkJSUNvbnRlbnRUeXBlTWFuYWdlciByZWdpc3RyeSA9IGdldENvbnRlbnRUeXBlUmVnaXN0cnkoKTsKLQkJSUNvbnRlbnRUeXBlIGlkZW50aWZpZXIgPSByZWdpc3RyeS5nZXREZXNjcmlwdGlvbkZvcihuZXcgTnVsbFN0cmVhbSgpLCBmaWxlbmFtZSwgSUNvbnRlbnREZXNjcmlwdGlvbi5BTEwpLmdldENvbnRlbnRUeXBlKCk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnQgdHlwZSBpZGVudGlmaWVyIGZvciAiICsgZmlsZW5hbWUgKyAiIGRvZXMgbm90IGhhdmUgSFRNTCB0eXBlICIsIGlkZW50aWZpZXIgIT0gbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUEV4aXN0c0J5RmlsZUV4dGVuc2lvbigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9ICJ0ZXN0LmpzcCI7Ci0JCUlDb250ZW50VHlwZU1hbmFnZXIgcmVnaXN0cnkgPSBnZXRDb250ZW50VHlwZVJlZ2lzdHJ5KCk7Ci0JCUlDb250ZW50VHlwZSBpZGVudGlmaWVyID0gcmVnaXN0cnkuZ2V0RGVzY3JpcHRpb25Gb3IobmV3IE51bGxTdHJlYW0oKSwgZmlsZW5hbWUsIElDb250ZW50RGVzY3JpcHRpb24uQUxMKS5nZXRDb250ZW50VHlwZSgpOwotCQlhc3NlcnRUcnVlKCJjb250ZW50IHR5cGUgaWRlbnRpZmllciBmb3IgIiArIGZpbGVuYW1lICsgIiBkb2VzIG5vdCBoYXZlIEpTUCB0eXBlICIsIGlkZW50aWZpZXIgIT0gbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENTU0V4aXN0c0J5RmlsZUV4dGVuc2lvbigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9ICJ0ZXN0LmNzcyI7Ci0JCUlDb250ZW50VHlwZU1hbmFnZXIgcmVnaXN0cnkgPSBnZXRDb250ZW50VHlwZVJlZ2lzdHJ5KCk7Ci0JCUlDb250ZW50VHlwZSBpZGVudGlmaWVyID0gcmVnaXN0cnkuZ2V0RGVzY3JpcHRpb25Gb3IobmV3IE51bGxTdHJlYW0oKSwgZmlsZW5hbWUsIElDb250ZW50RGVzY3JpcHRpb24uQUxMKS5nZXRDb250ZW50VHlwZSgpOwotCQlhc3NlcnRUcnVlKCJjb250ZW50IHR5cGUgaWRlbnRpZmllciBmb3IgIiArIGZpbGVuYW1lICsgIiBkb2VzIG5vdCBoYXZlIENTUyB0eXBlICIsIGlkZW50aWZpZXIgIT0gbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERUREV4aXN0c0J5RmlsZUV4dGVuc2lvbigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9ICJ0ZXN0LmR0ZCI7Ci0JCUlDb250ZW50VHlwZU1hbmFnZXIgcmVnaXN0cnkgPSBnZXRDb250ZW50VHlwZVJlZ2lzdHJ5KCk7Ci0JCUlDb250ZW50VHlwZSBpZGVudGlmaWVyID0gcmVnaXN0cnkuZ2V0RGVzY3JpcHRpb25Gb3IobmV3IE51bGxTdHJlYW0oKSwgZmlsZW5hbWUsIElDb250ZW50RGVzY3JpcHRpb24uQUxMKS5nZXRDb250ZW50VHlwZSgpOwotCQlhc3NlcnRUcnVlKCJjb250ZW50IHR5cGUgaWRlbnRpZmllciBmb3IgIiArIGZpbGVuYW1lICsgIiBkb2VzIG5vdCBoYXZlIERURCB0eXBlICIsIGlkZW50aWZpZXIgIT0gbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE11bHRpcGxlRGVmaW5pdGlvbnMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgaWQgPSBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTOwotCQlTdHJpbmcgZmlsZW5hbWUgPSAidGVzdC5jc3MiOwotCQlJQ29udGVudFR5cGVNYW5hZ2VyIHJlZ2lzdHJ5ID0gZ2V0Q29udGVudFR5cGVSZWdpc3RyeSgpOwotCQlJQ29udGVudFR5cGUgaWRlbnRpZmllcjEgPSByZWdpc3RyeS5nZXRDb250ZW50VHlwZShpZCk7Ci0JCUlDb250ZW50VHlwZSBpZGVudGlmaWVyMiA9IHJlZ2lzdHJ5LmdldERlc2NyaXB0aW9uRm9yKG5ldyBOdWxsU3RyZWFtKCksIGZpbGVuYW1lLCBJQ29udGVudERlc2NyaXB0aW9uLkFMTCkuZ2V0Q29udGVudFR5cGUoKTsKLQkJYXNzZXJ0VHJ1ZSgibXVsaXRwbGUgY29udGVudCB0eXBlIGlkZW50aWZpZXJzIG5lZWQgdG8gYmUgZXF1YWwgKGJ1dCBub3Qgc2FtZSBpbnN0YW5jZSkgIiwgaWRlbnRpZmllcjEuZXF1YWxzKGlkZW50aWZpZXIyKSk7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY29udGVudHR5cGVpZGVudGlmaWVyL2NvbnRlbnRzcGVjaWZpYy9UZXN0TW9kZWxIYW5kbGVycy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY29udGVudHR5cGVpZGVudGlmaWVyL2NvbnRlbnRzcGVjaWZpYy9UZXN0TW9kZWxIYW5kbGVycy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjBmZmI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NvbnRlbnR0eXBlaWRlbnRpZmllci9jb250ZW50c3BlY2lmaWMvVGVzdE1vZGVsSGFuZGxlcnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5jb250ZW50dHlwZWlkZW50aWZpZXIuY29udGVudHNwZWNpZmljOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yQ1NTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmx0ay5tb2RlbGhhbmRsZXIuSU1vZGVsSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLk1vZGVsSGFuZGxlclJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotCi1wdWJsaWMgY2xhc3MgVGVzdE1vZGVsSGFuZGxlcnMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgTW9kZWxIYW5kbGVyUmVnaXN0cnkgZ2V0TW9kZWxIYW5kbGVyUmVnaXN0cnkoKSB7Ci0JCU1vZGVsSGFuZGxlclJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gTW9kZWxIYW5kbGVyUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLQkJcmV0dXJuIHJlZ2lzdHJ5OwotCX0KLQotCXB1YmxpYyBUZXN0TW9kZWxIYW5kbGVycygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRpb24oKSB7Ci0JCU1vZGVsSGFuZGxlclJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gZ2V0TW9kZWxIYW5kbGVyUmVnaXN0cnkoKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgaGFuZGxlciByZWdpc3RyeSBtdXN0IGV4aXN0IiwgcmVnaXN0cnkgIT0gbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENTU0V4aXN0cygpIHsKLQkJU3RyaW5nIGlkID0gQ29udGVudFR5cGVJZEZvckNTUy5Db250ZW50VHlwZUlEX0NTUzsgIAotCQlNb2RlbEhhbmRsZXJSZWdpc3RyeSByZWdpc3RyeSA9IGdldE1vZGVsSGFuZGxlclJlZ2lzdHJ5KCk7Ci0JCUlNb2RlbEhhbmRsZXIgaGFuZGxlciA9IHJlZ2lzdHJ5LmdldEhhbmRsZXJGb3JDb250ZW50VHlwZUlkKGlkKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgaGFuZGxlciByZWdpc3RyeSBkb2VzIG5vdCBoYXZlIENTUyB0eXBlICIsIGhhbmRsZXIgIT0gbnVsbCAmJiBoYW5kbGVyLmdldEFzc29jaWF0ZWRDb250ZW50VHlwZUlkKCkuZXF1YWxzKGlkKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENTU0V4aXN0c0Zyb21GaWxlbmFtZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9ICJ0ZXN0LmNzcyI7Ci0JCU1vZGVsSGFuZGxlclJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gZ2V0TW9kZWxIYW5kbGVyUmVnaXN0cnkoKTsKLQkJSU1vZGVsSGFuZGxlciBoYW5kbGVyID0gcmVnaXN0cnkuZ2V0SGFuZGxlckZvcihmaWxlbmFtZSwgbnVsbCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGhhbmRsZXIgcmVnaXN0cnkgZG9lcyBub3QgaGF2ZSBDU1MgdHlwZSAiLCBoYW5kbGVyICE9IG51bGwgJiYgaGFuZGxlci5nZXRBc3NvY2lhdGVkQ29udGVudFR5cGVJZCgpLmVxdWFscyhDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERUREV4aXN0cygpIHsKLQkJU3RyaW5nIGlkID0gIm9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5kdGRzb3VyY2UiOyAKLQkJTW9kZWxIYW5kbGVyUmVnaXN0cnkgcmVnaXN0cnkgPSBnZXRNb2RlbEhhbmRsZXJSZWdpc3RyeSgpOwotCQlJTW9kZWxIYW5kbGVyIGhhbmRsZXIgPSByZWdpc3RyeS5nZXRIYW5kbGVyRm9yQ29udGVudFR5cGVJZChpZCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGhhbmRsZXIgcmVnaXN0cnkgZG9lcyBub3QgaGF2ZSBEVEQgdHlwZSAiLCBoYW5kbGVyICE9IG51bGwgJiYgaGFuZGxlci5nZXRBc3NvY2lhdGVkQ29udGVudFR5cGVJZCgpLmVxdWFscyhpZCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REVERFeGlzdHNGcm9tRmlsZW5hbWUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSAidGVzdC5kdGQiOwotCQlNb2RlbEhhbmRsZXJSZWdpc3RyeSByZWdpc3RyeSA9IGdldE1vZGVsSGFuZGxlclJlZ2lzdHJ5KCk7Ci0JCUlNb2RlbEhhbmRsZXIgaGFuZGxlciA9IHJlZ2lzdHJ5LmdldEhhbmRsZXJGb3IoZmlsZW5hbWUsIG51bGwpOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBoYW5kbGVyIHJlZ2lzdHJ5IGRvZXMgbm90IGhhdmUgRFREIHR5cGUgIiwgaGFuZGxlciAhPSBudWxsICYmIGhhbmRsZXIuZ2V0QXNzb2NpYXRlZENvbnRlbnRUeXBlSWQoKS5lcXVhbHMoIm9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5kdGRzb3VyY2UiKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEhUTUxFeGlzdHMoKSB7Ci0JCVN0cmluZyBpZCA9IENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTDsKLQkJTW9kZWxIYW5kbGVyUmVnaXN0cnkgcmVnaXN0cnkgPSBnZXRNb2RlbEhhbmRsZXJSZWdpc3RyeSgpOwotCQlJTW9kZWxIYW5kbGVyIGhhbmRsZXIgPSByZWdpc3RyeS5nZXRIYW5kbGVyRm9yQ29udGVudFR5cGVJZChpZCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGhhbmRsZXIgcmVnaXN0cnkgZG9lcyBub3QgaGF2ZSBIVE1MIHR5cGUgIiwgaGFuZGxlciAhPSBudWxsICYmIGhhbmRsZXIuZ2V0QXNzb2NpYXRlZENvbnRlbnRUeXBlSWQoKS5lcXVhbHMoaWQpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SFRNTEV4aXN0c0Zyb21GaWxlbmFtZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9ICJ0ZXN0Lmh0bWwiOwotCQlNb2RlbEhhbmRsZXJSZWdpc3RyeSByZWdpc3RyeSA9IGdldE1vZGVsSGFuZGxlclJlZ2lzdHJ5KCk7Ci0JCUlNb2RlbEhhbmRsZXIgaGFuZGxlciA9IHJlZ2lzdHJ5LmdldEhhbmRsZXJGb3IoZmlsZW5hbWUsIG51bGwpOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBoYW5kbGVyIHJlZ2lzdHJ5IGRvZXMgbm90IGhhdmUgSFRNTCB0eXBlICIsIGhhbmRsZXIgIT0gbnVsbCAmJiBoYW5kbGVyLmdldEFzc29jaWF0ZWRDb250ZW50VHlwZUlkKCkuZXF1YWxzKENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BFeGlzdHMoKSB7Ci0JCVN0cmluZyBpZCA9IENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1A7Ci0JCU1vZGVsSGFuZGxlclJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gZ2V0TW9kZWxIYW5kbGVyUmVnaXN0cnkoKTsKLQkJSU1vZGVsSGFuZGxlciBoYW5kbGVyID0gcmVnaXN0cnkuZ2V0SGFuZGxlckZvckNvbnRlbnRUeXBlSWQoaWQpOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBoYW5kbGVyIHJlZ2lzdHJ5IGRvZXMgbm90IGhhdmUgSlNQIHR5cGUgIiwgaGFuZGxlciAhPSBudWxsICYmIGhhbmRsZXIuZ2V0QXNzb2NpYXRlZENvbnRlbnRUeXBlSWQoKS5lcXVhbHMoaWQpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQRXhpc3RzRnJvbUZpbGVuYW1lKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gInRlc3QuanNwIjsKLQkJTW9kZWxIYW5kbGVyUmVnaXN0cnkgcmVnaXN0cnkgPSBnZXRNb2RlbEhhbmRsZXJSZWdpc3RyeSgpOwotCQlJTW9kZWxIYW5kbGVyIGhhbmRsZXIgPSByZWdpc3RyeS5nZXRIYW5kbGVyRm9yKGZpbGVuYW1lLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgaGFuZGxlciByZWdpc3RyeSBkb2VzIG5vdCBoYXZlIEpTUCB0eXBlICIsIGhhbmRsZXIgIT0gbnVsbCAmJiBoYW5kbGVyLmdldEFzc29jaWF0ZWRDb250ZW50VHlwZUlkKCkuZXF1YWxzKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WE1MRXhpc3RzKCkgewotCQlTdHJpbmcgaWQgPSBDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MOwotCQlNb2RlbEhhbmRsZXJSZWdpc3RyeSByZWdpc3RyeSA9IGdldE1vZGVsSGFuZGxlclJlZ2lzdHJ5KCk7Ci0JCUlNb2RlbEhhbmRsZXIgaGFuZGxlciA9IHJlZ2lzdHJ5LmdldEhhbmRsZXJGb3JDb250ZW50VHlwZUlkKGlkKTsKLQkJYXNzZXJ0RXF1YWxzKCJtb2RlbCBoYW5kbGVyIHJlZ2lzdHJ5IGRvZXMgbm90IGhhdmUgWE1MIHR5cGUgIiwgaWQsIGhhbmRsZXIuZ2V0QXNzb2NpYXRlZENvbnRlbnRUeXBlSWQoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTEV4aXN0c0Zyb21GaWxlbmFtZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9ICJ0ZXN0LnhtbCI7Ci0JCU1vZGVsSGFuZGxlclJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gZ2V0TW9kZWxIYW5kbGVyUmVnaXN0cnkoKTsKLQkJSU1vZGVsSGFuZGxlciBoYW5kbGVyID0gcmVnaXN0cnkuZ2V0SGFuZGxlckZvcihmaWxlbmFtZSwgbnVsbCk7Ci0JCWFzc2VydEVxdWFscygibW9kZWwgaGFuZGxlciByZWdpc3RyeSBkb2VzIG5vdCBoYXZlIFhNTCB0eXBlICIsIENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwsIGhhbmRsZXIuZ2V0QXNzb2NpYXRlZENvbnRlbnRUeXBlSWQoKSk7Ci0JfQotCi0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9kb20vVGVzdE9ycGhhbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvZG9tL1Rlc3RPcnBoYW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NiODkyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9kb20vVGVzdE9ycGhhbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLmRvbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5Mb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuQXR0ckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIFRoaXMgdGVzdCB3aWxsIGNhdXNlIGEgInJlZ2lvbiBtYW5hZ2VtZW50IGVycm9yIiB0byBiZSB0aHJvd24gaW4gRE9NIHBhcnNlcgotICogKGFuZCBpdHMgc3Vic2VxdWVudCAnaGFuZGxlUmVmcmVzaCcgdG8gYmUgY2FsbGVkKS4gVGhpcyBpcyAibm9ybWFsIiBpbiB0aGlzCi0gKiBlcnJvciBjYXNlLCBvZiBhcHBlbmRpbmcgYW4ganNwIGVsZW1lbnQgdG8gYW4gaHRtbCBkb2N1bWVudC4gVGhpcwotICogZXJyb3IvZXhjZXB0aW9uIGlzIG5vdCBub3JtYWxseSBwcmludGVkIG91dCwgYnV0IGlzIGlmICdkZWJ1ZycgaXMgdHVybmVkIG9uLgotICovCi0KLXB1YmxpYyBjbGFzcyBUZXN0T3JwaGFuIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGZDYXRlZ29yeSA9ICJ1bml0dGVzdHMiOwotCi0JcHVibGljIFRlc3RPcnBoYW4oU3RyaW5nIG5hbWUpIHsKLQotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwcml2YXRlIERvY3VtZW50IGdldEpTUERvYygpIHsKLQkJSURPTU1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlEb2N1bWVudCBkb2MgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJcmV0dXJuIGRvYzsKLQl9Ci0KLQlwcml2YXRlIERvY3VtZW50IGdldEhUTUxEb2MoKSB7Ci0KLQkJSURPTU1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCk7Ci0JCURvY3VtZW50IGRvYyA9IHN0cnVjdHVyZWRNb2RlbC5nZXREb2N1bWVudCgpOwotCQlyZXR1cm4gZG9jOwotCX0KLQotCXByaXZhdGUgRWxlbWVudCBtYWtlRWxlbWVudChEb2N1bWVudCBkb2N1bWVudCkgewotCi0JCUVsZW1lbnQgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklNRyIpOwotCQllbGVtZW50LnNldEF0dHJpYnV0ZSgic3JjIiwgIjxiZWFuOm1lc3NhZ2UgLz4iKTsKLQkJcmV0dXJuIGVsZW1lbnQ7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbk9ycGhhbkluSFRNTERvYygpIHsKLQotCQlMb2dnZXIudHJhY2UoZkNhdGVnb3J5LCAidGVzdE5vbk9ycGhhbkluSFRNTERvYyIpOwotCQlEb2N1bWVudCBkb2MgPSBnZXRIVE1MRG9jKCk7Ci0JCUVsZW1lbnQgZWxlbWVudCA9IG1ha2VFbGVtZW50KGRvYyk7Ci0JCUF0dHJJbXBsIGF0dHIgPSAoQXR0ckltcGwpIGVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZSgic3JjIik7Ci0JCVN0cmluZyBhdHRyVmFsdWUgPSBhdHRyLmdldFZhbHVlKCk7Ci0JCUxvZ2dlci50cmFjZShmQ2F0ZWdvcnksICJhdHRyVmFsdWU6ICIgKyBhdHRyVmFsdWUpOwotCQlkb2MuYXBwZW5kQ2hpbGQoZWxlbWVudCk7Ci0JCWJvb2xlYW4gaXNKc3BWYWx1ZSA9IGF0dHIuaGFzTmVzdGVkVmFsdWUoKTsKLQkJTG9nZ2VyLnRyYWNlKGZDYXRlZ29yeSwgImlzSnNwVmFsdWU6ICIgKyBpc0pzcFZhbHVlKTsKLQkJYXNzZXJ0RmFsc2UoaXNKc3BWYWx1ZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbk9ycGhhbkluSlNQRG9jKCkgewotCi0JCUxvZ2dlci50cmFjZShmQ2F0ZWdvcnksICJ0ZXN0Tm9uT3JwaGFuSW5KU1BEb2MiKTsKLQkJRG9jdW1lbnQgZG9jID0gZ2V0SlNQRG9jKCk7Ci0JCUVsZW1lbnQgZWxlbWVudCA9IG1ha2VFbGVtZW50KGRvYyk7Ci0JCUF0dHJJbXBsIGF0dHIgPSAoQXR0ckltcGwpIGVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZSgic3JjIik7Ci0JCVN0cmluZyBhdHRyVmFsdWUgPSBhdHRyLmdldFZhbHVlKCk7Ci0JCUxvZ2dlci50cmFjZShmQ2F0ZWdvcnksICJhdHRyVmFsdWU6ICIgKyBhdHRyVmFsdWUpOwotCQlkb2MuYXBwZW5kQ2hpbGQoZWxlbWVudCk7Ci0JCWJvb2xlYW4gaXNKc3BWYWx1ZSA9IGF0dHIuaGFzTmVzdGVkVmFsdWUoKTsKLQkJTG9nZ2VyLnRyYWNlKGZDYXRlZ29yeSwgImlzSnNwVmFsdWU6ICIgKyBpc0pzcFZhbHVlKTsKLQkJYXNzZXJ0VHJ1ZShpc0pzcFZhbHVlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uT3JwaGFuSW5Cb3RoKCkgewotCi0JCUxvZ2dlci50cmFjZShmQ2F0ZWdvcnksICJ0ZXN0Tm9uT3JwaGFuSW5Cb3RoIik7Ci0JCURvY3VtZW50IGpzcERvYyA9IGdldEpTUERvYygpOwotCQlFbGVtZW50IGNvbW1vbkVsZW1lbnQgPSBtYWtlRWxlbWVudChqc3BEb2MpOwotCQlBdHRySW1wbCBhdHRyID0gKEF0dHJJbXBsKSBjb21tb25FbGVtZW50LmdldEF0dHJpYnV0ZU5vZGUoInNyYyIpOwotCQlTdHJpbmcgYXR0clZhbHVlID0gYXR0ci5nZXRWYWx1ZSgpOwotCQlMb2dnZXIudHJhY2UoZkNhdGVnb3J5LCAiYXR0clZhbHVlOiAiICsgYXR0clZhbHVlKTsKLQkJanNwRG9jLmFwcGVuZENoaWxkKGNvbW1vbkVsZW1lbnQpOwotCQlib29sZWFuIGlzSnNwVmFsdWUgPSBhdHRyLmhhc05lc3RlZFZhbHVlKCk7Ci0JCUxvZ2dlci50cmFjZShmQ2F0ZWdvcnksICJpc0pzcFZhbHVlOiAiICsgaXNKc3BWYWx1ZSk7Ci0JCWFzc2VydFRydWUoaXNKc3BWYWx1ZSk7Ci0JCURvY3VtZW50IGh0bWxEb2MgPSBnZXRIVE1MRG9jKCk7Ci0JCS8vIHRoaXMgdGVzdCB3aWxsIGNhdXNlIGEgInJlZ2lvbiBtYW5hZ2VtZW50IGVycm9yIiB0byBiZQotCQkvLyB0aHJvd24gaW4gcGFyc2VyIChhbmQgaXRzIHN1YnNlcXVlbnQgJ2hhbmRsZVJlZnJlc2gnKS4KLQkJLy8gdGhpcyBpcyAibm9ybWFsIiBpbiB0aGlzIGVycm9yIGNhc2UsIG9mIGFwcGVuZGluZyBhbiBqc3AKLQkJLy8gZWxlbWVudCB0byBhbiBodG1sIGRvY3VtZW50LiBUaGlzIGVycm9yL2V4Y2VwdGlvbiBpcyBub3QKLQkJLy8gbm9ybWFsbHkgcHJpbnRlZCBvdXQsIGJ1dCBpcyBpZiAnZGVidWcnIGlzIHR1cm5lZCBvbi4KLQkJaHRtbERvYy5hcHBlbmRDaGlsZChjb21tb25FbGVtZW50KTsKLQkJaXNKc3BWYWx1ZSA9IGF0dHIuaGFzTmVzdGVkVmFsdWUoKTsKLQkJTG9nZ2VyLnRyYWNlKGZDYXRlZ29yeSwgImlzSnNwVmFsdWU6ICIgKyBpc0pzcFZhbHVlKTsKLQkJYXNzZXJ0RmFsc2UoaXNKc3BWYWx1ZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbk9ycGhhbkluQm90aFJldmVyc2VkT3JkZXIoKSB7Ci0KLQkJTG9nZ2VyLnRyYWNlKGZDYXRlZ29yeSwgInRlc3ROb25PcnBoYW5JbkJvdGhSZXZlcnNlZE9yZGVyIik7Ci0JCURvY3VtZW50IGh0bWxEb2MgPSBnZXRIVE1MRG9jKCk7Ci0JCUVsZW1lbnQgY29tbW9uRWxlbWVudCA9IG1ha2VFbGVtZW50KGh0bWxEb2MpOwotCQlBdHRySW1wbCBhdHRyID0gKEF0dHJJbXBsKSBjb21tb25FbGVtZW50LmdldEF0dHJpYnV0ZU5vZGUoInNyYyIpOwotCQlTdHJpbmcgYXR0clZhbHVlID0gYXR0ci5nZXRWYWx1ZSgpOwotCQlMb2dnZXIudHJhY2UoZkNhdGVnb3J5LCAiYXR0clZhbHVlOiAiICsgYXR0clZhbHVlKTsKLQkJaHRtbERvYy5hcHBlbmRDaGlsZChjb21tb25FbGVtZW50KTsKLQkJYm9vbGVhbiBpc0pzcFZhbHVlID0gYXR0ci5oYXNOZXN0ZWRWYWx1ZSgpOwotCQlMb2dnZXIudHJhY2UoZkNhdGVnb3J5LCAiaXNKc3BWYWx1ZTogIiArIGlzSnNwVmFsdWUpOwotCQlhc3NlcnRGYWxzZShpc0pzcFZhbHVlKTsKLQkJRG9jdW1lbnQganNwRG9jID0gZ2V0SlNQRG9jKCk7Ci0JCS8vIHRoaXMgbGl0dGxlIHRlc3Qgc2hvd3MgaXRzIGltcG9ydGFudCB0bwotCQkvLyBhY3R1YWxseSBjcmVhdGUgdGhlIGVsZW1lbnQgd2l0aCB0aGUgcmlnaHQga2luZCBvZgotCQkvLyBkb2N1bWVudCwgbm90IGp1c3QgYXBwZW5kLgotCQkvLyAoYW5kLCBhcHBlbmQgaXMgbmVlZGVkIHRvbywgYXMgY2FuIGJlIHNlZW4gYnkKLQkJLy8gY29tbWVudGluZyBvdXQgb25lIG9yIHRoZSBvdGhlciBvZiB0aGUgZm9sbG93aW5nCi0JCS8vIHR3byBsaW5lcy4KLQkJY29tbW9uRWxlbWVudCA9IG1ha2VFbGVtZW50KGpzcERvYyk7Ci0JCWpzcERvYy5hcHBlbmRDaGlsZChjb21tb25FbGVtZW50KTsKLQkJLy8KLQkJYXR0ciA9IChBdHRySW1wbCkgY29tbW9uRWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlKCJzcmMiKTsKLQkJYXR0clZhbHVlID0gYXR0ci5nZXRWYWx1ZSgpOwotCQlMb2dnZXIudHJhY2UoZkNhdGVnb3J5LCAiYXR0clZhbHVlOiAiICsgYXR0clZhbHVlKTsKLQkJaXNKc3BWYWx1ZSA9IGF0dHIuaGFzTmVzdGVkVmFsdWUoKTsKLQkJTG9nZ2VyLnRyYWNlKGZDYXRlZ29yeSwgImlzSnNwVmFsdWU6ICIgKyBpc0pzcFZhbHVlKTsKLQkJYXNzZXJ0VHJ1ZShpc0pzcFZhbHVlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkb0JvdGhUZXN0cygpIHsKLQotCQl0ZXN0Tm9uT3JwaGFuSW5IVE1MRG9jKCk7Ci0JCXRlc3ROb25PcnBoYW5JbkpTUERvYygpOwotCQl0ZXN0Tm9uT3JwaGFuSW5Cb3RoKCk7Ci0JCXRlc3ROb25PcnBoYW5JbkJvdGhSZXZlcnNlZE9yZGVyKCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbEFkYXB0ZXJzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9tb2RlbC9UZXN0TW9kZWxBZGFwdGVycy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWY1Y2Y0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbEFkYXB0ZXJzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnNzZW1vZGVscXVlcnkuTW9kZWxRdWVyeUFkYXB0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0TW9kZWxBZGFwdGVycyBleHRlbmRzIFRlc3RDYXNlIHsKLQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQTW9kZWwoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IGdldE1vZGVsTWFuYWdlcigpOwotCQlJRE9NTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gKElET01Nb2RlbCkgbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJdHJ5IHsKLQkJCWJvb2xlYW4gdGVzdCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRJZCgpLmVxdWFscyhJTW9kZWxNYW5hZ2VyLlVOTUFOQUdFRF9NT0RFTCk7Ci0JCQlhc3NlcnRUcnVlKHRlc3QpOwotCQkJTW9kZWxRdWVyeUFkYXB0ZXIgbW9kZWxRdWVyeUFkYXB0ZXIgPSAoTW9kZWxRdWVyeUFkYXB0ZXIpIHN0cnVjdHVyZWRNb2RlbC5nZXRBZGFwdGVyKE1vZGVsUXVlcnlBZGFwdGVyLmNsYXNzKTsKLQkJCWFzc2VydE5vdE51bGwoImluaXRpYWwgbW9kZWxRdWVyeUFkYXB0ZXIgc2hvdWxkIG5vdCBiZSBudWxsIiwgbW9kZWxRdWVyeUFkYXB0ZXIpOwotCQkJSVN0cnVjdHVyZWRNb2RlbCBuZXdNb2RlbCA9IHN0cnVjdHVyZWRNb2RlbC5uZXdJbnN0YW5jZSgpOwotCQkJLy8gSURPTURvY3VtZW50IG5ld0RvY3VtZW50ID0gKChJRE9NTW9kZWwpCi0JCQkvLyBuZXdNb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJCS8vIElOb2RlTm90aWZpZXIgbm90aWZpZXIgPSBuZXdEb2N1bWVudDsKLQkJCU1vZGVsUXVlcnlBZGFwdGVyIHJlc3VsdCA9IChNb2RlbFF1ZXJ5QWRhcHRlcikgbmV3TW9kZWwuZ2V0QWRhcHRlcihNb2RlbFF1ZXJ5QWRhcHRlci5jbGFzcyk7Ci0JCQlhc3NlcnROb3ROdWxsKCJuZXdJbnN0YW5jZSBtb2RlbFF1ZXJ5QWRhcHRlciBzaG91bGQgbm90IGJlIG51bGwiLCByZXN1bHQpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQkvLyBldmVuIHRob3VnaCBtb2RlbCBpcyB1bm1hbmFnZWQsIHJlbGVhc2Ugc3RpbGwgcmVxdWlyZWQsIHNpbmNlCi0JCQkvLyBhZGFwdGVyIGZhY3RvcmllcywgZXRjLiwgbWF5IGJlIGRlcGVuZGluZyBvbiBpdC4KLQkJCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCS8vIGlmIGFib3ZlIGNvbXBsZXRlJ3Mgbm9ybWFsbHkgKHdpdGggbm8gZXhjZXB0aW9ucykKLQkJCS8vIGNvbnNpZGVyIHBhc3NlZC4KLQkJCWFzc2VydFRydWUodHJ1ZSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIElNb2RlbE1hbmFnZXIgZ2V0TW9kZWxNYW5hZ2VyKCkgewotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCXJldHVybiBtb2RlbE1hbmFnZXI7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsUmVsZWFzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsUmVsZWFzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWZhZGNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbFJlbGVhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotCi1wdWJsaWMgY2xhc3MgVGVzdE1vZGVsUmVsZWFzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQotCQotCQotCXB1YmxpYyB2b2lkIHRlc3RKU1BNb2RlbCgpIHsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBnZXRNb2RlbE1hbmFnZXIoKTsKLQkJSURPTU1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IChJRE9NTW9kZWwpIG1vZGVsTWFuYWdlci5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCWJvb2xlYW4gdGVzdCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRJZCgpLmVxdWFscyhJTW9kZWxNYW5hZ2VyLlVOTUFOQUdFRF9NT0RFTCk7Ci0JCWFzc2VydFRydWUodGVzdCk7Ci0JCS8vIGV2ZW4gdGhvdWdoIG1vZGVsIGlzIHVubWFuYWdlZCwgcmVsZWFzZSBzdGlsbCByZXF1aXJlZCwgc2luY2UgCi0JCS8vIGFkYXB0ZXIgZmFjdG9yaWVzLCBldGMuLCBtYXkgYmUgZGVwZW5kaW5nIG9uIGl0LiAKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkvLyBpZiBhYm92ZSBjb21wbGV0ZSdzIG5vcm1hbGx5ICh3aXRoIG5vIGV4Y2VwdGlvbnMpIAotCQkvLyBjb25zaWRlciBwYXNzZWQuIAotCQlhc3NlcnRUcnVlKHRydWUpOwotCX0KLQotCXByaXZhdGUgSU1vZGVsTWFuYWdlciBnZXRNb2RlbE1hbmFnZXIoKSB7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJcmV0dXJuIG1vZGVsTWFuYWdlcjsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9tb2RlbC9UZXN0TW9kZWxXaXRoTm9GaWxlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9tb2RlbC9UZXN0TW9kZWxXaXRoTm9GaWxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5Zjc4NmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsV2l0aE5vRmlsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLkpTUENvcmVUZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotCi1wdWJsaWMgY2xhc3MgVGVzdE1vZGVsV2l0aE5vRmlsZSBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BNb2RlbCgpIHsKLQkJSURPTU1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlib29sZWFuIHRlc3QgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0SWQoKS5lcXVhbHMoSU1vZGVsTWFuYWdlci5VTk1BTkFHRURfTU9ERUwpOwotCQlhc3NlcnRUcnVlKHRlc3QpOwotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCWFzc2VydFRydWUodHJ1ZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJ1ZzExNjA2Nl8xKCkgewotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCi0JCS8vIENyZWF0ZSBuZXcgcHJvamVjdAotCQlJUHJvamVjdCBwcm9qZWN0ID0gY3JlYXRlU2ltcGxlUHJvamVjdCgiYnVnMTE2MDY2XzEiLCBudWxsLCBudWxsKTsKLQotCQlJRmlsZSB0ZXN0RmlsZSA9IHByb2plY3QuZ2V0RmlsZSgibm9uRXhpc3RhbnQuanNwIik7Ci0JCWFzc2VydEZhbHNlKCJub25FeGlzdGFudC5qc3AgdGVzdCBmaWxlIGFscmVhZHkgZXhpc3RzIChub3QgYSBjbGVhbiB3b3Jrc3BhY2UpPyIsIHRlc3RGaWxlLmV4aXN0cygpKTsKLQotCQkvLyBHZXQgdGhlIG1vZGVsIGFuZCBzZXQgYSByZWZlcmVuY2UgdG8gdGhhdCB0YWcgbGlicmFyeSBpbnRvIGl0Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXROZXdNb2RlbEZvckVkaXQodGVzdEZpbGUsIGZhbHNlKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkbid0IGdldCBuZXcgbW9kZWwgZm9yICIgKyB0ZXN0RmlsZS5nZXRGdWxsUGF0aCgpLCBtb2RlbCk7Ci0JCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoIjwlQHRhZ2xpYiBwcmVmaXg9XCJ0YWdkZXBlbmRlbnRcIiB1cmk9XCJ0YWdkZXBlbmRlbnRcIj5cbjx0YWdkZXBlbmRlbnQ6Y29kZT4gPDw8IDwvdGFnZGVwZW5kZW50OmNvZGU+Iik7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCdWcxMTYwNjZfMigpIHsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQotCQkvLyBDcmVhdGUgbmV3IHByb2plY3QKLQkJSVByb2plY3QgcHJvamVjdCA9IGNyZWF0ZVNpbXBsZVByb2plY3QoImJ1ZzExNjA2Nl8yIiwgbnVsbCwgbnVsbCk7Ci0JCS8vIENvcHkgYSBUTEQgaW50byB0aGUgcHJvamVjdAotCQlJRmlsZSB0bGQgPSBjb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLzExNjA2Ni90YWdkZXAudGxkIiwgIi9idWcxMTYwNjZfMi90YWdkZXAudGxkIik7Ci0JCWFzc2VydE5vdE51bGwoIlRMRCBlbnRyeSB3YXMgbm90IGNvcGllZCBwcm9wZXJseSIsIHRsZCk7Ci0JCWFzc2VydFRydWUoIlRMRCBJRmlsZSBkb2VzIG5vdCBleGlzdCIsIHRsZC5leGlzdHMoKSk7Ci0KLQkJSUZpbGUgdGVzdEZpbGUgPSBwcm9qZWN0LmdldEZpbGUoIm5vbkV4aXN0YW50LmpzcCIpOwotCQlhc3NlcnRGYWxzZSgibm9uRXhpc3RhbnQuanNwIHRlc3QgZmlsZSBhbHJlYWR5IGV4aXN0cyAobm90IGEgY2xlYW4gd29ya3NwYWNlKT8iLCB0ZXN0RmlsZS5leGlzdHMoKSk7Ci0KLQkJLy8gR2V0IHRoZSBtb2RlbCBhbmQgc2V0IGEgcmVmZXJlbmNlIHRvIHRoYXQgdGFnIGxpYnJhcnkgaW50byBpdAotCQl0cnkgewotCQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TmV3TW9kZWxGb3JFZGl0KHRlc3RGaWxlLCBmYWxzZSk7Ci0JCQlhc3NlcnROb3ROdWxsKCJjb3VsZG4ndCBnZXQgbmV3IG1vZGVsIGZvciAiICsgdGVzdEZpbGUuZ2V0RnVsbFBhdGgoKSwgbW9kZWwpOwotCQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KCI8JUB0YWdsaWIgcHJlZml4PVwidGFnZGVwZW5kZW50XCIgdXJpPVwidGFnZGVwZW5kZW50XCI+XG48dGFnZGVwZW5kZW50OmNvZGU+IDw8PCA8L3RhZ2RlcGVuZGVudDpjb2RlPiIpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIElGaWxlIGNvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoU3RyaW5nIGVudHJ5bmFtZSwgU3RyaW5nIGZ1bGxQYXRoKSB7Ci0JCUlGaWxlIGZpbGUgPSBudWxsOwotCQlVUkwgZW50cnkgPSBKU1BDb3JlVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KGVudHJ5bmFtZSk7Ci0JCWlmIChlbnRyeSAhPSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCWJ5dGVbXSBiID0gbmV3IGJ5dGVbMjA0OF07Ci0JCQkJSW5wdXRTdHJlYW0gaW5wdXQgPSBlbnRyeS5vcGVuU3RyZWFtKCk7Ci0JCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG91dHB1dCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCQlpbnQgaSA9IC0xOwotCQkJCXdoaWxlICgoaSA9IGlucHV0LnJlYWQoYikpID4gLTEpIHsKLQkJCQkJb3V0cHV0LndyaXRlKGIsIDAsIGkpOwotCQkJCX0KLQkJCQlmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZ1bGxQYXRoKSk7Ci0JCQkJaWYgKGZpbGUgIT0gbnVsbCkgewotCQkJCQlmaWxlLmNyZWF0ZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ob3V0cHV0LnRvQnl0ZUFycmF5KCkpLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCXJldHVybiBmaWxlOwotCX0KLQotCXByaXZhdGUgSVByb2plY3QgY3JlYXRlU2ltcGxlUHJvamVjdChTdHJpbmcgbmFtZSwgSVBhdGggbG9jYXRpb24sIFN0cmluZ1tdIG5hdHVyZUlkcykgewotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihuYW1lKTsKLQkJaWYgKGxvY2F0aW9uICE9IG51bGwpIHsKLQkJCWRlc2NyaXB0aW9uLnNldExvY2F0aW9uKGxvY2F0aW9uKTsKLQkJfQotCQlpZiAobmF0dXJlSWRzICE9IG51bGwpIHsKLQkJCWRlc2NyaXB0aW9uLnNldE5hdHVyZUlkcyhuYXR1cmVJZHMpOwotCQl9Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QobmFtZSk7Ci0JCXRyeSB7Ci0JCQlwcm9qZWN0LmNyZWF0ZShkZXNjcmlwdGlvbiwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQlhc3NlcnRUcnVlKHByb2plY3QuZXhpc3RzKCkpOwotCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIHByb2plY3Q7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3RhZ2xpYmluZGV4L0J1bmRsZVJlc291cmNlVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdGFnbGliaW5kZXgvQnVuZGxlUmVzb3VyY2VVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzYTFhYzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdGFnbGliaW5kZXgvQnVuZGxlUmVzb3VyY2VVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMudGFnbGliaW5kZXg7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSdW5uYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5KU1BDb3JlVGVzdHNQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBCdW5kbGVSZXNvdXJjZVV0aWwgewotCi0JcHVibGljIHN0YXRpYyB2b2lkIF9jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoZmluYWwgU3RyaW5nIHJvb3RFbnRyeSwgZmluYWwgU3RyaW5nIGZ1bGxUYXJnZXRQYXRoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUVudW1lcmF0aW9uIGVudHJpZXMgPSBKU1BDb3JlVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5UGF0aHMocm9vdEVudHJ5KTsKLQkJd2hpbGUgKGVudHJpZXMgIT0gbnVsbCAmJiBlbnRyaWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0JCQlTdHJpbmcgZW50cnlQYXRoID0gZW50cmllcy5uZXh0RWxlbWVudCgpLnRvU3RyaW5nKCk7Ci0JCQlTdHJpbmcgdGFyZ2V0UGF0aCA9IG5ldyBQYXRoKGZ1bGxUYXJnZXRQYXRoICsgIi8iICsgZW50cnlQYXRoLnN1YnN0cmluZyhyb290RW50cnkubGVuZ3RoKCkpKS50b1N0cmluZygpOwotCQkJaWYgKGVudHJ5UGF0aC5lbmRzV2l0aCgiLyIpKSB7Ci0JCQkJSUZvbGRlciBmb2xkZXIgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZvbGRlcihuZXcgUGF0aCh0YXJnZXRQYXRoKSk7Ci0JCQkJaWYgKCFmb2xkZXIuZXhpc3RzKCkpIHsKLQkJCQkJZm9sZGVyLmNyZWF0ZSh0cnVlLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQl9Ci0JCQkJX2NvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShlbnRyeVBhdGgsIHRhcmdldFBhdGgpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJX2NvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoZW50cnlQYXRoLCB0YXJnZXRQYXRoKTsKLQkJCX0KLQkJCS8vIFN5c3RlbS5vdXQucHJpbnRsbihlbnRyeVBhdGggKyAiIC0+ICIgKyB0YXJnZXRQYXRoKTsKLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgSUZpbGUgX2NvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoU3RyaW5nIGVudHJ5bmFtZSwgU3RyaW5nIGZ1bGxQYXRoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSBudWxsOwotCQlVUkwgZW50cnkgPSBKU1BDb3JlVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KGVudHJ5bmFtZSk7Ci0JCWlmIChlbnRyeSAhPSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCWJ5dGVbXSBiID0gbmV3IGJ5dGVbMjA0OF07Ci0JCQkJSW5wdXRTdHJlYW0gaW5wdXQgPSBlbnRyeS5vcGVuU3RyZWFtKCk7Ci0JCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG91dHB1dCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCQlpbnQgaSA9IC0xOwotCQkJCXdoaWxlICgoaSA9IGlucHV0LnJlYWQoYikpID4gLTEpIHsKLQkJCQkJb3V0cHV0LndyaXRlKGIsIDAsIGkpOwotCQkJCX0KLQkJCQlmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZ1bGxQYXRoKSk7Ci0JCQkJaWYgKGZpbGUgIT0gbnVsbCkgewotCQkJCQlpZiAoIWZpbGUuZXhpc3RzKCkpIHsKLQkJCQkJCWZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShvdXRwdXQudG9CeXRlQXJyYXkoKSksIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJZmlsZS5zZXRDb250ZW50cyhuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ob3V0cHV0LnRvQnl0ZUFycmF5KCkpLCB0cnVlLCBmYWxzZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCXJldHVybiBmaWxlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBjb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoZmluYWwgU3RyaW5nIHJvb3RFbnRyeSwgZmluYWwgU3RyaW5nIGZ1bGxUYXJnZXRQYXRoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlXb3Jrc3BhY2VSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBJV29ya3NwYWNlUnVubmFibGUoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJX2NvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShyb290RW50cnksIGZ1bGxUYXJnZXRQYXRoKTsKLQkJCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuY2hlY2twb2ludChSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuaXNBdXRvQnVpbGRpbmcoKSk7Ci0JCQl9Ci0JCX07Ci0JCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5ydW4ocnVubmFibGUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSUZpbGUgY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShmaW5hbCBTdHJpbmcgZW50cnluYW1lLCBmaW5hbCBTdHJpbmcgZnVsbFBhdGgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJZmluYWwgSUZpbGUgZmlsZVtdID0gbmV3IElGaWxlWzFdOwotCQlJV29ya3NwYWNlUnVubmFibGUgcnVubmFibGUgPSBuZXcgSVdvcmtzcGFjZVJ1bm5hYmxlKCkgewotCQkJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCWZpbGVbMF0gPSBfY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShlbnRyeW5hbWUsIGZ1bGxQYXRoKTsKLQkJCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuY2hlY2twb2ludChSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuaXNBdXRvQnVpbGRpbmcoKSk7Ci0JCQl9Ci0JCX07Ci0JCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5ydW4ocnVubmFibGUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQlyZXR1cm4gZmlsZVswXTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElQcm9qZWN0IGNyZWF0ZVNpbXBsZVByb2plY3QoU3RyaW5nIG5hbWUsIElQYXRoIGxvY2F0aW9uLCBTdHJpbmdbXSBuYXR1cmVJZHMpIHsKLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24obmFtZSk7Ci0JCWlmIChsb2NhdGlvbiAhPSBudWxsKSB7Ci0JCQlkZXNjcmlwdGlvbi5zZXRMb2NhdGlvbihsb2NhdGlvbik7Ci0JCX0KLQkJaWYgKG5hdHVyZUlkcyAhPSBudWxsKSB7Ci0JCQlkZXNjcmlwdGlvbi5zZXROYXR1cmVJZHMobmF0dXJlSWRzKTsKLQkJfQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KG5hbWUpOwotCQl0cnkgewotCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIHByb2plY3Q7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdGFnbGliaW5kZXgvVGVzdEluZGV4LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy90YWdsaWJpbmRleC9UZXN0SW5kZXguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg2NWQwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy90YWdsaWJpbmRleC9UZXN0SW5kZXguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLnRhZ2xpYmluZGV4OwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRhZ2xpYi5JVGFnbGliUmVjb3JkOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50YWdsaWIuSVVSTFJlY29yZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGFnbGliLlRhZ2xpYkluZGV4OwotCi0vKioKLSAqIFRlc3RzIGZvciB0aGUgVGFnbGliSW5kZXguCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0SW5kZXggZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JU3RyaW5nIHd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSA9IG51bGw7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQlTdHJpbmcgbm9uaW50ZXJhY3RpdmUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIpOwotCQlpZiAobm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkKLQkJCXd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSA9IG5vbmludGVyYWN0aXZlOwotCQlTeXN0ZW0uc2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIsICJ0cnVlIik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQkJaWYgKHd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSAhPSBudWxsKQotCQkJU3lzdGVtLnNldFByb3BlcnR5KCJ3dHAuYXV0b3Rlc3Qubm9uaW50ZXJhY3RpdmUiLCB3dHBfYXV0b3Rlc3Rfbm9uaW50ZXJhY3RpdmUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCdWcxMTgyNTFfZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgdXJsID0gImh0dHA6Ly9leGFtcGxlLmNvbS9zYW1wbGUyX2Zvcl8xMTgyNTEtZSI7Ci0KLQkJLy8gQ3JlYXRlIG5ldyBwcm9qZWN0Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdCgiYnVnXzExODI1MS1lIiwgbnVsbCwgbnVsbCk7Ci0JCWFzc2VydFRydWUocHJvamVjdC5leGlzdHMoKSk7Ci0JCUlUYWdsaWJSZWNvcmRbXSByZWNvcmRzID0gVGFnbGliSW5kZXguZ2V0QXZhaWxhYmxlVGFnbGliUmVjb3JkcyhuZXcgUGF0aCgiL2J1Z18xMTgyNTEtZSIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2YgdGFnbGliIHJlY29yZHMgZm91bmQgYmVmb3JlIHVucGFja2luZyIsIDAsIHJlY29yZHMubGVuZ3RoKTsKLQotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZSIsICIvYnVnXzExODI1MS1lIik7Ci0JCS8vIGJ1Z18xMTgyNTEtZS9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbAotCQkvLyBidWdfMTE4MjUxLWUvV2ViQ29udGVudC9XRUItSU5GL3RsZC9zYW1wbGUyX2Zvcl8xMTgyNTEtZS50bGQKLQkJLy8gYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKLQkJLy8gYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvdGVzdDEuanNwCi0JCS8vIGJ1Z18xMTgyNTEtZS8uY2xhc3NwYXRoCi0JCS8vIGJ1Z18xMTgyNTEtZS8ucHJvamVjdAotCQlJVGFnbGliUmVjb3JkIHRhZ2xpYlJlY29yZCA9IFRhZ2xpYkluZGV4LnJlc29sdmUoIi9idWdfMTE4MjUxLWUvV2ViQ29udGVudC90ZXN0MS5qc3AiLCB1cmwsIGZhbHNlKTsKLQkJYXNzZXJ0Tm90TnVsbCgicmVjb3JkIGZvdW5kIGZvciAiICsgdXJsLCB0YWdsaWJSZWNvcmQpOwotCi0JCXJlY29yZHMgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvIikpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG51bWJlciBvZiB0YWdsaWIgcmVjb3JkcyBmb3VuZCBhZnRlciB1bnBhY2tpbmcgYnV0IGJlZm9yZSBjb3B5aW5nIiwgMiwgcmVjb3Jkcy5sZW5ndGgpOwotCi0JCS8qCi0JCSAqIGluY3JlYXNlIGJ5IDxiPm9uZTwvYj4gZm9yIHRoZSBVUkwgdG8gdGhlIFRMRCBpbiB0aGUgamFyIChvbmUKLQkJICogaW1wbGljaXQgZm9yIHRoZSBUTEQgaW4gdGhlIGphciBhcyBhIHJlc291cmNlIGFuZCBhbm90aGVyIGltcGxpY2l0Ci0JCSAqIG92ZXJ3cml0aW5nIGl0IHdpdGggdGhlIHNhbWUgVVJMIHRvIHRoZSBUTEQgaW4gdGhlIGphciBvbiB0aGUKLQkJICogY2xhc3NwYXRoKQotCQkgKi8KLQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvYnVnXzExODI1MS1zYW1wbGUvc2FtcGxlX3RsZC5qYXIiLCAiL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50L1dFQi1JTkYvc2FtcGxlX3RsZC5qYXIiKTsKLQotCQl1cmwgPSAiaHR0cDovL2V4YW1wbGUuY29tL3NhbXBsZS10YWdsaWIiOwotCQl0YWdsaWJSZWNvcmQgPSBUYWdsaWJJbmRleC5yZXNvbHZlKCIvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvdGVzdDEuanNwIiwgdXJsLCBmYWxzZSk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIHJlY29yZCBmb3VuZCBmb3IgIiArIHVybCwgdGFnbGliUmVjb3JkKTsKLQotCQlyZWNvcmRzID0gVGFnbGliSW5kZXguZ2V0QXZhaWxhYmxlVGFnbGliUmVjb3JkcyhuZXcgUGF0aCgiL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50LyIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2YgdGFnbGliIHJlY29yZHMgZm91bmQgYWZ0ZXIgY29weWluZyIsIDMsIHJlY29yZHMubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QnVnMTE4MjUxX2YoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gQ3JlYXRlIG5ldyBwcm9qZWN0Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdCgiYnVnXzExODI1MS1mIiwgbnVsbCwgbnVsbCk7Ci0JCWFzc2VydFRydWUocHJvamVjdC5leGlzdHMoKSk7Ci0JCUlUYWdsaWJSZWNvcmRbXSByZWNvcmRzID0gVGFnbGliSW5kZXguZ2V0QXZhaWxhYmxlVGFnbGliUmVjb3JkcyhuZXcgUGF0aCgiL2J1Z18xMTgyNTEtZiIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2YgdGFnbGliIHJlY29yZHMgZm91bmQgYmVmb3JlIHVucGFja2luZyIsIDAsIHJlY29yZHMubGVuZ3RoKTsKLQotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZiIsICIvYnVnXzExODI1MS1mIik7Ci0JCS8vIGJ1Z18xMTgyNTEtZi9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbAotCQkvLyBidWdfMTE4MjUxLWYvV2ViQ29udGVudC9XRUItSU5GL3RsZC9zYW1wbGUyX2Zvcl8xMTgyNTEtZS50bGQKLQkJLy8gYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKLQkJLy8gYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvdGVzdDEuanNwCi0JCS8vIGJ1Z18xMTgyNTEtZi8uY2xhc3NwYXRoCi0JCS8vIGJ1Z18xMTgyNTEtZi8ucHJvamVjdAotCQlTdHJpbmcgdXJsID0gImh0dHA6Ly9leGFtcGxlLmNvbS9zYW1wbGUtdGFnbGliIjsKLQkJSVRhZ2xpYlJlY29yZCB0YWdsaWJSZWNvcmQgPSBUYWdsaWJJbmRleC5yZXNvbHZlKCIvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvdGVzdDEuanNwIiwgdXJsLCBmYWxzZSk7Ci0JCWFzc2VydE51bGwoInJlY29yZCBmb3VuZCBmb3IgIiArIHVybCwgdGFnbGliUmVjb3JkKTsKLQotCQlyZWNvcmRzID0gVGFnbGliSW5kZXguZ2V0QXZhaWxhYmxlVGFnbGliUmVjb3JkcyhuZXcgUGF0aCgiL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50LyIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2YgdGFnbGliIHJlY29yZHMgZm91bmQgYWZ0ZXIgdW5wYWNraW5nIGJ1dCBiZWZvcmUgY29weWluZyIsIDMsIHJlY29yZHMubGVuZ3RoKTsKLQotCQkvKgotCQkgKiBpbmNyZWFzZSBieSA8Yj5vbmU8L2I+IGZvciB0aGUgVVJMIHRvIHRoZSBUTEQgaW4gdGhlIGphciAob25lCi0JCSAqIGltcGxpY2l0IGZvciB0aGUgVExEIGluIHRoZSBqYXIgYXMgYSByZXNvdXJjZSBhbmQgYW5vdGhlciBpbXBsaWNpdAotCQkgKiBvdmVyd3JpdGluZyBpdCB3aXRoIHRoZSBzYW1lIFVSTCB0byB0aGUgVExEIGluIHRoZSBqYXIgb24gdGhlCi0JCSAqIGNsYXNzcGF0aCkKLQkJICovCi0JCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzL2J1Z18xMTgyNTEtc2FtcGxlL3NhbXBsZV90bGQuamFyIiwgIi9idWdfMTE4MjUxLWYvV2ViQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphciIpOwotCi0JCXRhZ2xpYlJlY29yZCA9IFRhZ2xpYkluZGV4LnJlc29sdmUoIi9idWdfMTE4MjUxLWYvV2ViQ29udGVudC90ZXN0MS5qc3AiLCB1cmwsIGZhbHNlKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gcmVjb3JkIGZvdW5kIGZvciAiICsgdXJsLCB0YWdsaWJSZWNvcmQpOwotCQlhc3NlcnRUcnVlKCJyZWNvcmQgZm91bmQgd2FzIHdyb25nIHR5cGUiLCB0YWdsaWJSZWNvcmQgaW5zdGFuY2VvZiBJVVJMUmVjb3JkKTsKLQkJYXNzZXJ0Tm90TnVsbCgicmVjb3JkIGhhcyBubyBiYXNlIGxvY2F0aW9uIiwgKChJVVJMUmVjb3JkKSB0YWdsaWJSZWNvcmQpLmdldEJhc2VMb2NhdGlvbigpKTsKLQkJYXNzZXJ0RXF1YWxzKCJyZWNvcmQgaGFzIHdyb25nIHNob3J0IG5hbWUiLCAic2FtcGxlIiwgKChJVVJMUmVjb3JkKSB0YWdsaWJSZWNvcmQpLmdldFNob3J0TmFtZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJyZWNvcmQgaGFzIHdyb25nIFVSSSIsIHVybCwgKChJVVJMUmVjb3JkKSB0YWdsaWJSZWNvcmQpLmdldFVSSSgpKTsKLQkJVVJMIHJlY29yZFVSTCA9ICgoSVVSTFJlY29yZCkgdGFnbGliUmVjb3JkKS5nZXRVUkwoKTsKLQkJYXNzZXJ0Tm90TnVsbCgicmVjb3JkIGhhcyBubyBVUkwiLCByZWNvcmRVUkwpOwotCQlhc3NlcnRUcnVlKCJyZWNvcmQgaGFzIHdyb25nIFVSTCIsIHJlY29yZFVSTC50b1N0cmluZygpLmxlbmd0aCgpID4gNCk7Ci0JCWFzc2VydEVxdWFscygicmVjb3JkIGhhcyB3cm9uZyBVUkwgcHJvdG9jb2wiLCAiamFyOiIsIHJlY29yZFVSTC50b1N0cmluZygpLnN1YnN0cmluZygwLCA0KSk7Ci0JCWFzc2VydEVxdWFscygicmVjb3JkIGhhcyB3cm9uZyBVUkwiLCAiL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L1dFQi1JTkYvbGliL3NhbXBsZV90bGQuamFyIS9mb2xkZXIvc2FtcGxlX2Zvcl8xMTgyNTEudGxkIiwgcmVjb3JkVVJMLnRvU3RyaW5nKCkuc3Vic3RyaW5nKHJlY29yZFVSTC50b1N0cmluZygpLmxlbmd0aCgpIC0gODEpKTsKLQotCQlyZWNvcmRzID0gVGFnbGliSW5kZXguZ2V0QXZhaWxhYmxlVGFnbGliUmVjb3JkcyhuZXcgUGF0aCgiL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50LyIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2YgdGFnbGliIHJlY29yZHMgZm91bmQgYWZ0ZXIgY29weWluZyIsIDQsIHJlY29yZHMubGVuZ3RoKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDllMjliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdAotCW5hbWU9InRlc3RzdWl0ZSIKLQlkZWZhdWx0PSJydW4iCi0JYmFzZWRpcj0iLiI+Ci0JPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLQk8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgotCTwhLS0gPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiR7YmFzZWRpcn1cLi5cLi4iIC8+IC0tPgotCi0JPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIHBsdWdpbi1uYW1lLCBhbmQgbGlicmFyeS1maWxlIC0tPgotCTxwcm9wZXJ0eQotCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cyIgLz4KLQk8cHJvcGVydHkKLQkJbmFtZT0ibGlicmFyeS1maWxlIgotCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLQotCTxlY2hvIG1lc3NhZ2U9ImJhc2VkaXIgJHtiYXNlZGlyfSIgLz4KLQk8ZWNobyBtZXNzYWdlPSJlY2xpcHNlIHBsYWNlICR7ZWNsaXBzZS1ob21lfSIgLz4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLQk8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotCTwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotCTx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0JCTx0c3RhbXAgLz4KLQkJPGRlbGV0ZT4KLQkJCTxmaWxlc2V0Ci0JCQkJZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0JCQkJaW5jbHVkZXM9Im9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy4qeG1sIiAvPgotCQk8L2RlbGV0ZT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0JPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0JCTxwcm9wZXJ0eQotCQkJbmFtZT0id3N0LWZvbGRlciIKLQkJCXZhbHVlPSIke2VjbGlwc2UtaG9tZX0vd3N0X2ZvbGRlciIgLz4KLQkJPGRlbGV0ZQotCQkJZGlyPSIke3dzdC1mb2xkZXJ9IgotCQkJcXVpZXQ9InRydWUiIC8+Ci0JCTxhbnQKLQkJCXRhcmdldD0iY29yZS10ZXN0IgotCQkJYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotCQkJZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iZGF0YS1kaXIiCi0JCQkJdmFsdWU9IiR7d3N0LWZvbGRlcn0iIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJCQl2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJjbGFzc25hbWUiCi0JCQkJdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5KU1BDb3JlVGVzdFN1aXRlIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0icGx1Z2luLXBhdGgiCi0JCQkJdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLQk8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLQkJPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0JPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotCTx0YXJnZXQKLQkJbmFtZT0icnVuIgotCQlkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotCQk8YW50Ci0JCQl0YXJnZXQ9ImNvbGxlY3QiCi0JCQlhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0JCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJpbmNsdWRlcyIKLQkJCQl2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLip4bWwiIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJvdXRwdXQtZmlsZSIKLQkJCQl2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvMTE2MDY2L3RhZ2RlcC50bGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzLzExNjA2Ni90YWdkZXAudGxkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRkNjczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvMTE2MDY2L3RhZ2RlcC50bGQKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi08P3htbCB2ZXJzaW9uID0gIjEuMCIgPz4KLTwhRE9DVFlQRSB0YWdsaWIgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgSlNQIFRhZyBMaWJyYXJ5IDEuMS8vRU4iICJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvZHRkcy93ZWItanNwdGFnbGliXzFfMi5kdGQiPgotPHRhZ2xpYj4KLQk8dGxpYi12ZXJzaW9uPjEuMTwvdGxpYi12ZXJzaW9uPgotCTxqc3AtdmVyc2lvbj4xLjE8L2pzcC12ZXJzaW9uPgotCTx1cmk+dGFnZGVwZW5kZW50PC91cmk+Ci0JPHNob3J0LW5hbWU+dGFnZGVwZW5kZW50PC9zaG9ydC1uYW1lPgotCTxkZXNjcmlwdGlvbj4KLQkJVGhpcyB0YWcgbGlicmFyeSBkZW1vbnN0cmF0ZXMgdGFnZGVwZW5kZW50IHRhZyBoYW5kbGluZwotCQl1c2luZyBpdHMgImNvZGUiIHRhZy4KLQk8L2Rlc2NyaXB0aW9uPgotCTx0YWc+Ci0JCTxuYW1lPmNvZGU8L25hbWU+Ci0JCTx0YWctY2xhc3M+Y29tLmV4YW1wbGUudGFnZGVwLkNvZGVUYWc8L3RhZy1jbGFzcz4KLQkJPGJvZHktY29udGVudD50YWdkZXBlbmRlbnQ8L2JvZHktY29udGVudD4KLQkJPGF0dHJpYnV0ZT4KLQkJCTxuYW1lPmZvbnROYW1lPC9uYW1lPgotCQkJPHJlcXVpcmVkPnRydWU8L3JlcXVpcmVkPgotCQkJPHR5cGU+amF2YS5sYW5nLlN0cmluZzwvdHlwZT4KLQkJPC9hdHRyaWJ1dGU+Ci0JCTxhdHRyaWJ1dGU+Ci0JCQk8bmFtZT5ib2xkPC9uYW1lPgotCQkJPHR5cGU+Ym9vbGVhbjwvdHlwZT4KLQkJPC9hdHRyaWJ1dGU+Ci0JCTxhdHRyaWJ1dGU+Ci0JCQk8bmFtZT5pdGFsaWM8L25hbWU+Ci0JCQk8dHlwZT5ib29sZWFuPC90eXBlPgotCQk8L2F0dHJpYnV0ZT4KLQk8L3RhZz4KLQk8c21hbGwtaWNvbj5icm93c2VyX2VkaXRvci5naWY8L3NtYWxsLWljb24+Ci08L3RhZ2xpYj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWMzYjNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9IldlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMDhkYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5idWdfMTE4MjUxLWU8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi52YWxpZGF0aW9uYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1DbGFzcy1QYXRoOiAKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC9XRUItSU5GL3RsZC9zYW1wbGUyX2Zvcl8xMTgyNTEtZS50bGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ZjliYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC9XRUItSU5GL3RsZC9zYW1wbGUyX2Zvcl8xMTgyNTEtZS50bGQKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08dGFnbGliPgotCi0gICAgIDx0bGlidmVyc2lvbj4wLjAuMTwvdGxpYnZlcnNpb24+Ci0gICAgIDxqc3B2ZXJzaW9uPjEuMjwvanNwdmVyc2lvbj4KLSAgICAgPHNob3J0bmFtZT5zYW1wbGU8L3Nob3J0bmFtZT4KLSAgICAgPHVyaT5odHRwOi8vZXhhbXBsZS5jb20vc2FtcGxlMl9mb3JfMTE4MjUxLWU8L3VyaT4KLSAgICAgPGluZm8+Ci0gICAgICAgIFRoaXMgdGFnIGxpYnJhcnkgY29udGFpbnMganVzdCBvbmUgdGFnLiAgSGEgaGEhIAotICAgICA8L2luZm8+Ci0KLSAgICAgPHRhZz4KLSAgICAgICA8bmFtZT5jb2RlPC9uYW1lPgotICAgICAgIDx0YWdjbGFzcz5zYW1wbGUudGFnbGliLkNvZGVUYWc8L3RhZ2NsYXNzPgotICAgICAgIDxib2R5Y29udGVudD50YWdkZXBlbmRlbnQ8L2JvZHljb250ZW50PgotICAgICAgIDxhdHRyaWJ1dGU+Ci0gICAgICAgICA8bmFtZT5mb250QXR0cmlidXRlczwvbmFtZT4KLSAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICA8YXR0cmlidXRlPgotICAgICAgICAgPG5hbWU+Y29tbWVudENvbG9yPC9uYW1lPgotICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgIDxhdHRyaWJ1dGU+Ci0gICAgICAgICA8bmFtZT5zdHJpbmdDb2xvcjwvbmFtZT4KLSAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgPC90YWc+Ci0gICA8L3RhZ2xpYj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzMWU1NzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdlYi1hcHAgaWQ9IldlYkFwcF9JRCIgdmVyc2lvbj0iMi40IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLQk8ZGlzcGxheS1uYW1lPgotCXRlc3QxPC9kaXNwbGF5LW5hbWU+Ci0JPHdlbGNvbWUtZmlsZS1saXN0PgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuanNwPC93ZWxjb21lLWZpbGU+Ci0JPC93ZWxjb21lLWZpbGUtbGlzdD4KLTwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvdGVzdDEuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC90ZXN0MS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiZTAwY2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC90ZXN0MS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08JUB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzZi9jb3JlIiBwcmVmaXg9ImMiJT4KLTwlQHRhZ2xpYiBwcmVmaXg9InNhbXBsZSIgdXJpPSJodHRwOi8vZXhhbXBsZS5jb20vc2FtcGxlLXRhZ2xpYiIgJT4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotPHNhbXBsZTpjb2RlPiBhc2RnamFsc2tqZ2EgIDw8IDwvc2FtcGxlOmNvZGU+Ci0KLTxjOm91dCB2YWx1ZT0iIj48L2M6b3V0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvYnVpbGQvY2xhc3Nlcy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvYnVpbGQvY2xhc3Nlcy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL2J1aWxkL2NsYXNzZXMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9zcmMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL3NyYy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL3NyYy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTlmMmJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJsaWIiIHBhdGg9IldlYkNvbnRlbnQvV0VCLUlORi9saWIvc2FtcGxlX3RsZC5qYXIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJXZWJDb250ZW50L1dFQi1JTkYvY2xhc3NlcyIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmU1NTBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+YnVnXzExODI1MS1mPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24udmFsaWRhdGlvbmJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTQyNzJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQ2xhc3MtUGF0aDogCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWYvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWYvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L1dFQi1JTkYvdGxkL3NhbXBsZTJfZm9yXzExODI1MS1lLnRsZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGY5YmM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPHRhZ2xpYj4KLQotICAgICA8dGxpYnZlcnNpb24+MC4wLjE8L3RsaWJ2ZXJzaW9uPgotICAgICA8anNwdmVyc2lvbj4xLjI8L2pzcHZlcnNpb24+Ci0gICAgIDxzaG9ydG5hbWU+c2FtcGxlPC9zaG9ydG5hbWU+Ci0gICAgIDx1cmk+aHR0cDovL2V4YW1wbGUuY29tL3NhbXBsZTJfZm9yXzExODI1MS1lPC91cmk+Ci0gICAgIDxpbmZvPgotICAgICAgICBUaGlzIHRhZyBsaWJyYXJ5IGNvbnRhaW5zIGp1c3Qgb25lIHRhZy4gIEhhIGhhISAKLSAgICAgPC9pbmZvPgotCi0gICAgIDx0YWc+Ci0gICAgICAgPG5hbWU+Y29kZTwvbmFtZT4KLSAgICAgICA8dGFnY2xhc3M+c2FtcGxlLnRhZ2xpYi5Db2RlVGFnPC90YWdjbGFzcz4KLSAgICAgICA8Ym9keWNvbnRlbnQ+dGFnZGVwZW5kZW50PC9ib2R5Y29udGVudD4KLSAgICAgICA8YXR0cmlidXRlPgotICAgICAgICAgPG5hbWU+Zm9udEF0dHJpYnV0ZXM8L25hbWU+Ci0gICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgPGF0dHJpYnV0ZT4KLSAgICAgICAgIDxuYW1lPmNvbW1lbnRDb2xvcjwvbmFtZT4KLSAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICA8YXR0cmlidXRlPgotICAgICAgICAgPG5hbWU+c3RyaW5nQ29sb3I8L25hbWU+Ci0gICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgIDwvdGFnPgotICAgPC90YWdsaWI+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2QwN2YwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIGlkPSJXZWJBcHBfSUQiIHZlcnNpb249IjIuNCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+Ci0JPGRpc3BsYXktbmFtZT4KLQl0ZXN0MTwvZGlzcGxheS1uYW1lPgotCTx3ZWxjb21lLWZpbGUtbGlzdD4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguanNwPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0LmpzcDwvd2VsY29tZS1maWxlPgotCTwvd2VsY29tZS1maWxlLWxpc3Q+Ci0JPHRhZ2xpYj4KLQkgIDx0YWdsaWItdXJpPi90YWdzL3NhbXBsZTI8L3RhZ2xpYi11cmk+Ci0JICA8dGFnbGliLWxvY2F0aW9uPi9XRUItSU5GL3RsZC9zYW1wbGUyX2Zvcl8xMTgyNTEtZS50bGQ8L3RhZ2xpYi1sb2NhdGlvbj4KLQk8L3RhZ2xpYj4KLTwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvdGVzdDEuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWYvV2ViQ29udGVudC90ZXN0MS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiZTAwY2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWYvV2ViQ29udGVudC90ZXN0MS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08JUB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzZi9jb3JlIiBwcmVmaXg9ImMiJT4KLTwlQHRhZ2xpYiBwcmVmaXg9InNhbXBsZSIgdXJpPSJodHRwOi8vZXhhbXBsZS5jb20vc2FtcGxlLXRhZ2xpYiIgJT4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotPHNhbXBsZTpjb2RlPiBhc2RnamFsc2tqZ2EgIDw8IDwvc2FtcGxlOmNvZGU+Ci0KLTxjOm91dCB2YWx1ZT0iIj48L2M6b3V0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWYvc3JjLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9zcmMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9zcmMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtc2FtcGxlL3NhbXBsZV90bGQuamFyIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLXNhbXBsZS9zYW1wbGVfdGxkLmphcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE5OGM0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtc2FtcGxlL3NhbXBsZV90bGQuamFyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLXNhbXBsZS9zYW1wbGVfdGxkLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1zYW1wbGUvc2FtcGxlX3RsZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4MDMwMzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLXNhbXBsZS9zYW1wbGVfdGxkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotVGhlIGFjY29tcGFueWluZyBqYXIgY29udGFpbnMgYSBUTEQgd2l0aCBhIFVSSSBzcGVjaWZpZWQgaW4KLWl0IGFzIHdlbGwgYXMgYSBiaWcgbG9uZyBmaWxlIHRoYXQgc2hvdWxkIHNsb3cgZG93biB0aGUKLXRhZ2xpYiBpbmRleGluZy4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUxYzhmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmODJjN2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLWpzcGVuY29kaW5ndGVzdHMuamFyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVhNjFkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZzwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzdkYmVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotI01vbiBNYXkgMzAgMTk6MDg6NTMgRURUIDIwMDUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9YWJvcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTEzNmRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNGcmkgTWF5IDI3IDIzOjM5OjA4IEVEVCAyMDA1Ci1jb21waWxlcnMucC5pbGxlZ2FsLWF0dC12YWx1ZT0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMucC51bnVzZWQtZWxlbWVudC1vci1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGI0MDBmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogSlNQIEVuY29kaW5nIFRlc3RzIFBsdWctaW4KLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMAotQnVuZGxlLUNsYXNzUGF0aDoganNwZW5jb2Rpbmd0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcuSlNQRW5jb2RpbmdUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy5qc3AKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuanVuaXQsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcKLUVjbGlwc2UtQXV0b1N0YXJ0OiB0cnVlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNmI5NmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci08Ym9keSBsYW5nPSJFTi1VUyI+Ci08aDI+QWJvdXQgVGhpcyBDb250ZW50PC9oMj4KLSAKLTxwPkZlYnJ1YXJ5IDI0LCAyMDA1PC9wPgkKLTxoMz5MaWNlbnNlPC9oMz4KLQotPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluICgmcXVvdDtDb250ZW50JnF1b3Q7KS4gIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQotRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KLQotPHA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCZxdW90O1JlZGlzdHJpYnV0b3ImcXVvdDspIGFuZCBkaWZmZXJlbnQgdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5Ci1hcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuICBDaGVjayB0aGUgUmVkaXN0cmlidXRvcidzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gIElmIG5vIHN1Y2ggbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuICBVbmxlc3Mgb3RoZXJ3aXNlCi1pbmRpY2F0ZWQgYmVsb3csIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudC48L3A+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhODIwY2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotc291cmNlLmpzcGVuY29kaW5ndGVzdHMuamFyID0gc3JjLwotb3V0cHV0LmpzcGVuY29kaW5ndGVzdHMuamFyID0gYmluLwotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBqc3BlbmNvZGluZ3Rlc3RzLmphcixcCi0gICAgICAgICAgICAgICB0ZXN0ZmlsZXMvLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCi1zcmMuaW5jbHVkZXMgPSB0ZXN0ZmlsZXMvLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL0pTUEVuY29kaW5nVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL0pTUEVuY29kaW5nVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3Y2ZhYTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC90ZXN0cy9lbmNvZGluZy9KU1BFbmNvZGluZ1Rlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcuanNwLkpTUEVuY29kaW5nVGVzdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy5qc3AuSlNQSGVhZFRva2VuaXplclRlc3RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLmpzcC5UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JKU1A7Ci0KLXB1YmxpYyBjbGFzcyBKU1BFbmNvZGluZ1Rlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBDbGFzc1tdIGNsYXNzZXMgPSBuZXcgQ2xhc3NbXXtKU1BFbmNvZGluZ1Rlc3RzLmNsYXNzLCBKU1BIZWFkVG9rZW5pemVyVGVzdGVyLmNsYXNzLCBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JKU1AuY2xhc3N9OwotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IEpTUEVuY29kaW5nVGVzdFN1aXRlKCk7Ci0JfQotCi0JcHVibGljIEpTUEVuY29kaW5nVGVzdFN1aXRlKCkgewotCQlzdXBlcigiSlNQIEVuY29kaW5nIFRlc3QgU3VpdGUiKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoY2xhc3Nlc1tpXSwgY2xhc3Nlc1tpXS5nZXROYW1lKCkpKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0aGVDbGFzcwotCSAqLwotCXB1YmxpYyBKU1BFbmNvZGluZ1Rlc3RTdWl0ZShDbGFzcyB0aGVDbGFzcykgewotCQlzdXBlcih0aGVDbGFzcyk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHRoZUNsYXNzCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgSlNQRW5jb2RpbmdUZXN0U3VpdGUoQ2xhc3MgdGhlQ2xhc3MsIFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKHRoZUNsYXNzLCBuYW1lKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBKU1BFbmNvZGluZ1Rlc3RTdWl0ZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC90ZXN0cy9lbmNvZGluZy9KU1BFbmNvZGluZ1Rlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL0pTUEVuY29kaW5nVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc5OGNjYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL0pTUEVuY29kaW5nVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmc7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIEpTUEVuY29kaW5nVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgSlNQRW5jb2RpbmdUZXN0c1BsdWdpbiBwbHVnaW47Ci0KLQlwdWJsaWMgc3RhdGljIExpc3QgZ2V0QWxsVGVzdEZpbGVzKFN0cmluZyB0b3BEaXJOYW1lKSB7Ci0JCUxpc3QgcmVzdWx0ID0gbnVsbDsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIHRvcERpck5hbWU7Ci0JCUZpbGUgdG9wRGlyID0gbmV3IEZpbGUobG9jYXRpb24pOwotCQlpZiAoIXRvcERpci5pc0RpcmVjdG9yeSgpKSB7Ci0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKHRvcERpck5hbWUgKyAiIGlzIG5vdCBhIGRpcmVjdG9yeSIpOwotCQl9Ci0JCWVsc2UgewotCQkJcmVzdWx0ID0gZ2V0RmlsZXNJbkRpcih0b3BEaXIpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSlNQRW5jb2RpbmdUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCXByaXZhdGUgc3RhdGljIExpc3QgZ2V0RmlsZXNJbkRpcihGaWxlIHRvcERpcikgewotCQlMaXN0IGZpbGVzID0gbmV3IEFycmF5TGlzdCgpOwotCQlGaWxlW10gdG9wRmlsZXMgPSB0b3BEaXIubGlzdEZpbGVzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgdG9wRmlsZXMubGVuZ3RoOyBpKyspIHsKLQkJCUZpbGUgZmlsZSA9IHRvcEZpbGVzW2ldOwotCQkJaWYgKGZpbGUuaXNGaWxlKCkpIHsKLQkJCQlmaWxlcy5hZGQoZmlsZSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChmaWxlLmlzRGlyZWN0b3J5KCkgJiYgIWZpbGUuZ2V0TmFtZSgpLmVuZHNXaXRoKCJDVlMiKSkgewotCQkJCUxpc3QgaW5uZXJGaWxlcyA9IGdldEZpbGVzSW5EaXIoZmlsZSk7Ci0JCQkJZmlsZXMuYWRkQWxsKGlubmVyRmlsZXMpOwotCQkJfQotCQl9Ci0JCXJldHVybiBmaWxlczsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFVSTCBnZXRJbnN0YWxsTG9jYXRpb24oKSB7Ci0JCVVSTCBpbnN0YWxsTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmciKS5nZXRFbnRyeSgiLyIpOwotCQlVUkwgcmVzb2x2ZWRMb2NhdGlvbiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlyZXNvbHZlZExvY2F0aW9uID0gUGxhdGZvcm0ucmVzb2x2ZShpbnN0YWxsTG9jYXRpb24pOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpbXBvc3NpYmxlCi0JCQl0aHJvdyBuZXcgRXJyb3IoZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc29sdmVkTG9jYXRpb247Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwgb3IgJ2tleScgaWYgbm90Ci0JICogZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBKU1BFbmNvZGluZ1Rlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRSZXNvdXJjZUJ1bmRsZSgpOwotCQl0cnkgewotCQkJcmV0dXJuIChidW5kbGUgIT0gbnVsbCA/IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KSA6IGtleSk7Ci0JCX0KLQkJY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4ga2V5OwotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBGaWxlIGdldFRlc3RGaWxlKFN0cmluZyBmaWxlcGF0aCkgewotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvLyBTdHJpbmcgc2NoZW1lID0gaW5zdGFsbFVSTC5nZXRQcm90b2NvbCgpOwotCQlTdHJpbmcgcGF0aCA9IGluc3RhbGxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgbG9jYXRpb24gPSBwYXRoICsgZmlsZXBhdGg7Ci0JCUZpbGUgcmVzdWx0ID0gbmV3IEZpbGUobG9jYXRpb24pOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgUmVhZGVyIGdldFRlc3RSZWFkZXIoU3RyaW5nIGZpbGVwYXRoKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIGZpbGVwYXRoOwotCQlSZWFkZXIgcmVzdWx0ID0gbmV3IEZpbGVSZWFkZXIobG9jYXRpb24pOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHdvcmtzcGFjZSBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElXb3Jrc3BhY2UgZ2V0V29ya3NwYWNlKCkgewotCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCX0KLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgSlNQRW5jb2RpbmdUZXN0c1BsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICovCi0JcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9KU1BFbmNvZGluZ1Rlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9KU1BFbmNvZGluZ1Rlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZDkzNGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC90ZXN0cy9lbmNvZGluZy9qc3AvSlNQRW5jb2RpbmdUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy5qc3A7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXREZWNvZGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ29kaW5nRXJyb3JBY3Rpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcuSlNQRW5jb2RpbmdUZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuRW5jb2RpbmdNZW1lbnRvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5JUmVzb3VyY2VDaGFyc2V0RGV0ZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBKU1BFbmNvZGluZ1Rlc3RzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogRW5zdXJlcyB0aGF0IGFuIElucHV0U3RyZWFtIGhhcyBtYXJrL3Jlc2V0IHN1cHBvcnQuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSW5wdXRTdHJlYW0gZ2V0TWFya1N1cHBvcnRlZFN0cmVhbShJbnB1dFN0cmVhbSBvcmlnaW5hbCkgewotCQlpZiAob3JpZ2luYWwgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCQlpZiAob3JpZ2luYWwubWFya1N1cHBvcnRlZCgpKQotCQkJcmV0dXJuIG9yaWdpbmFsOwotCQlyZXR1cm4gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0ob3JpZ2luYWwpOwotCX0KLQlwcml2YXRlIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlRGlyID0gImpzcC8iOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVIb21lID0gInRlc3RmaWxlcy8iOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGZpbGVIb21lICsgZmlsZURpcjsKLQlwcml2YXRlIGludCBSRUFEX0JVRkZFUl9TSVpFID0gODAwMDsKLQotCXB1YmxpYyBKU1BFbmNvZGluZ1Rlc3RzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RGaWxlU3RyZWFtKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGV4cGVjdGVkSUFOQUVuY29kaW5nLCBJUmVzb3VyY2VDaGFyc2V0RGV0ZWN0b3IgZGV0ZWN0b3IpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUZpbGUgZmlsZSA9IEpTUEVuY29kaW5nVGVzdHNQbHVnaW4uZ2V0VGVzdEZpbGUoZmlsZW5hbWUpOwotCQlpZiAoIWZpbGUuZXhpc3RzKCkpCi0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKGZpbGVuYW1lICsgIiB3YXMgbm90IGZvdW5kIik7Ci0JCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKTsKLQkJLy8gSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlJbnB1dFN0cmVhbSBpc3RyZWFtID0gZ2V0TWFya1N1cHBvcnRlZFN0cmVhbShpbnB1dFN0cmVhbSk7Ci0JCXRyeSB7Ci0JCQlkZXRlY3Rvci5zZXQoaXN0cmVhbSk7Ci0JCQlFbmNvZGluZ01lbWVudG8gZW5jb2RpbmdNZW1lbnRvID0gKChKU1BSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IpZGV0ZWN0b3IpLmdldEVuY29kaW5nTWVtZW50bygpOwotCQkJU3RyaW5nIGZvdW5kSUFOQUVuY29kaW5nID0gZW5jb2RpbmdNZW1lbnRvLmdldEphdmFDaGFyc2V0TmFtZSgpOwotCQkJLy8gSSBjaGFuZ2VkIG1hbnkgImVxdWFscyIgdG8gImVxdWFsc0lnbm9yZUNhc2UiIG9uIDExLzQvMjAwMiwKLQkJCS8vIHNpbmNlCi0JCQkvLyBzb21lIGlzc3VlcyB3aXRoIFNISUZUX0pJUyB2cy4gU2hpZnRfSklTIHdlcmUgY2F1c2luZyBmYWlsdXJlcy4KLQkJCS8vIFdlIGRvIHdhbnQgdG8gYmUgdG9sZXJhbnQgb24gaW5wdXQsIGFuZCBhY2NlcHQgZWl0aGVyLCBidXQgSQotCQkJLy8gdGhpbmsKLQkJCS8vIHRoYXQgU3VwcG9ydGVkSmF2YUVuY29kaW5ncyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvICJyZWNvbW1lbmQiCi0JCQkvLyBTaGlmdF9KSVMuCi0JCQlib29sZWFuIGV4cGVjdGVkSUFOQVJlc3VsdCA9IGZhbHNlOwotCQkJZXhwZWN0ZWRJQU5BUmVzdWx0ID0gZXhwZWN0ZWRJQU5BRW5jb2RpbmcuZXF1YWxzSWdub3JlQ2FzZShmb3VuZElBTkFFbmNvZGluZyk7Ci0KLQkJCWFzc2VydFRydWUoImVuY29kaW5nIHRlc3QgZmlsZSAiICsgZmlsZW5hbWUgKyAiIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRJQU5BRW5jb2RpbmcgKyAiIGZvdW5kOiAiICsgZm91bmRJQU5BRW5jb2RpbmcsIGV4cGVjdGVkSUFOQVJlc3VsdCk7Ci0JCQkvLyBhIHZlcnkgc2ltcGxlIHJlYWQgdGVzdCAuLi4gd2lsbCBjYXVzZSBKVW5pdCBlcnJvciAobm90IGZhaWwpCi0JCQkvLyBpZiB0aHJvd3MgZXhjZXB0aW9uLgotCQkJZW5zdXJlQ2FuUmVhZChmaWxlbmFtZSwgZm91bmRJQU5BRW5jb2RpbmcsIGlzdHJlYW0pOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKGlzdHJlYW0gIT0gbnVsbCkgewotCQkJCWlzdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJCWlmIChpbnB1dFN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGp1c3QgcmVhZHMgdG8gc3RyZWFtLCB0byBiZSBzdXJlIGl0IGNhbiBiZSByZWFkIHBlcgotCSAqIGVuY29kaW5nLCB3aXRob3V0IGV4Y2VwdGlvbi4KLQkgKi8KLQlwcml2YXRlIHZvaWQgZW5zdXJlQ2FuUmVhZChTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBlbmNvZGluZywgSW5wdXRTdHJlYW0gaW5TdHJlYW0pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUNoYXJzZXQgY2hhcnNldCA9IENoYXJzZXQuZm9yTmFtZShlbmNvZGluZyk7Ci0JCUNoYXJzZXREZWNvZGVyIGNoYXJzZXREZWNvZGVyID0gY2hhcnNldC5uZXdEZWNvZGVyKCk7Ci0JCWNoYXJzZXREZWNvZGVyLm9uTWFsZm9ybWVkSW5wdXQoQ29kaW5nRXJyb3JBY3Rpb24uUkVQT1JUKTsKLQkJY2hhcnNldERlY29kZXIub25Vbm1hcHBhYmxlQ2hhcmFjdGVyKENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0KLQkJSW5wdXRTdHJlYW1SZWFkZXIgcmVhZGVyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKGluU3RyZWFtLCBjaGFyc2V0RGVjb2Rlcik7Ci0JCVN0cmluZ0J1ZmZlciBzdHJpbmdCdWZmZXIgPSByZWFkSW5wdXRTdHJlYW0ocmVhZGVyKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihmaWxlbmFtZSk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oc3RyaW5nQnVmZmVyLnRvU3RyaW5nKCkpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmdCdWZmZXIgcmVhZElucHV0U3RyZWFtKFJlYWRlciByZWFkZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0KLQkJU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJaW50IG51bVJlYWQgPSAwOwotCQljaGFyIHRCdWZmW10gPSBuZXcgY2hhcltSRUFEX0JVRkZFUl9TSVpFXTsKLQkJd2hpbGUgKChudW1SZWFkID0gcmVhZGVyLnJlYWQodEJ1ZmYsIDAsIHRCdWZmLmxlbmd0aCkpICE9IC0xKSB7Ci0JCQlidWZmZXIuYXBwZW5kKHRCdWZmLCAwLCBudW1SZWFkKTsKLQkJfQotCQlyZXR1cm4gYnVmZmVyOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RkZWZlY3Q0MjA1d3BzanNwKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgImRlZmVjdF80MjA1X3dwcy5qc3AiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTgiLCBuZXcgSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BFbXB0eUZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiRW1wdHlGaWxlLmpzcCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJJU08tODg1OS0xIiwgbmV3IEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQkvKioKLQkgKiBDYXV0aW9uLCB3aGVuIHRoaXMgZmlsZSBwcmludHMgb3V0IGluIGNvbnNvbGUgKHdoZW4gZGVidWcgc2V0IHRvIHRydWUsCi0JICogaXQgYXBwZWFycyBpbmNvcnJlY3QgKGR1ZSB0byBmb250IHByb2JsZW1zIGluIGNvbnNvbGUpLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0VVRGMTYuanNwIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNkJFIiwgbmV3IEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIHRlc3Qgc2hvd3MgdW5pY29kZSBCT00gc2hvdWxkIHRha2UgcHJpb3JpdHkgb3ZlciBzZXR0aW5ncy9kZWZhdWx0cwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RVdGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtMTYiLCBuZXcgSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgdGVzdCBzaG93cyB1bmljb2RlIEJPTSBzaG91bGQgdGFrZSBwcmlvcml0eSBvdmVyIHNldHRpbmdzL2RlZmF1bHRzCi0JICogTm90ZTogVVRGLTE2ID09IFVURi0xNkJFCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFV0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUuanNwIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNkJFIiwgbmV3IEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZXaXRoSmFwYW5lc2VDaGFycygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNldpdGhKYXBhbmVzZUNoYXJzLmpzcCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtMTZCRSIsIG5ldyBKU1BSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFVURjgzQnl0ZUJPTSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJVVEY4V2l0aDNCeXRlQk9NLmpzcCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtOCIsIG5ldyBKU1BSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTElsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AiOwotCQlTdHJpbmcgaWFuYUluRmlsZSA9ICJJU08tODg1OS04IjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgaWFuYUluRmlsZSwgbmV3IEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WE1MTm9FbmNvZGluZygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub0VuY29kaW5nLmpzcCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJJU08tODg1OS0xIiwgbmV3IEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WE1MTm9ybWFsTm9uRGVmYXVsdCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb3JtYWxOb25EZWZhdWx0LmpzcCI7Ci0JCVN0cmluZyBpYW5hSW5GaWxlID0gIklTTy04ODU5LTgiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCBpYW5hSW5GaWxlLCBuZXcgSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvanNwL0pTUEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvanNwL0pTUEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNiM2RiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9KU1BIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcuanNwOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5IZWFkUGFyc2VyVG9rZW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkpTUEhlYWRUb2tlbml6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkpTUEhlYWRUb2tlbml6ZXJDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy5KU1BFbmNvZGluZ1Rlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5FbmNvZGluZ1BhcnNlckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuWE1MSGVhZFRva2VuaXplckNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIEpTUEhlYWRUb2tlbml6ZXJUZXN0ZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0JcHJpdmF0ZSBTdHJpbmcgZkNoYXJzZXQ7Ci0JcHJpdmF0ZSBTdHJpbmcgZkNvbnRlbnRUeXBlOwotCXByaXZhdGUgU3RyaW5nIGZDb250ZW50VHlwZVZhbHVlOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAianNwLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUhvbWUgPSAidGVzdGZpbGVzLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUxvY2F0aW9uID0gZmlsZUhvbWUgKyBmaWxlRGlyOwotCXByaXZhdGUgU3RyaW5nIGZQYWdlRW5jb2RpbmdWYWx1ZSA9IG51bGw7Ci0JcHJpdmF0ZSBTdHJpbmcgZlhNTERlY0VuY29kaW5nTmFtZTsKLQlwcml2YXRlIFN0cmluZyBmTGFuZ3VhZ2U7Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0RmlsZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBleHBlY3RlZE5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIGV4cGVjdGVkTmFtZSwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdEZpbGUoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZXhwZWN0ZWROYW1lLCBTdHJpbmcgZmluYWxUb2tlblR5cGUsIFN0cmluZyBleHBlY3RlZENvbnRlbnRUeXBlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlKU1BIZWFkVG9rZW5pemVyIHRva2VuaXplciA9IG51bGw7Ci0JCVJlYWRlciBmaWxlUmVhZGVyID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWlmIChERUJVRykgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICIgKyBmaWxlbmFtZSk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQl9Ci0JCQlmaWxlUmVhZGVyID0gSlNQRW5jb2RpbmdUZXN0c1BsdWdpbi5nZXRUZXN0UmVhZGVyKGZpbGVuYW1lKTsKLQkJCXRva2VuaXplciA9IG5ldyBKU1BIZWFkVG9rZW5pemVyKGZpbGVSZWFkZXIpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIG9wZW5pbmcgZmlsZSBcIiIgKyBmaWxlbmFtZSArICJcIiIpOwotCQl9Ci0KLQkJSGVhZFBhcnNlclRva2VuIHRva2VuID0gcGFyc2VIZWFkZXIodG9rZW5pemVyKTsKLQkJU3RyaW5nIHJlc3VsdFZhbHVlID0gZ2V0QXBwcm9wcmlhdGVFbmNvZGluZygpOwotCQlmaWxlUmVhZGVyLmNsb3NlKCk7Ci0JCWlmIChmaW5hbFRva2VuVHlwZSAhPSBudWxsKSB7Ci0JCQlhc3NlcnRUcnVlKCJkaWQgbm90IGVuZCBhcyBleHBlY3RlZC4gZm91bmQ6ICAiICsgdG9rZW4uZ2V0VHlwZSgpLCBmaW5hbFRva2VuVHlwZS5lcXVhbHModG9rZW4uZ2V0VHlwZSgpKSk7Ci0JCX0KLQotCQlpZiAoZXhwZWN0ZWROYW1lID09IG51bGwpIHsKLQkJCWFzc2VydFRydWUoImV4cGVjdGVkIG5vIGVuY29kaW5nLCBidXQgZm91bmQ6ICIgKyByZXN1bHRWYWx1ZSwgcmVzdWx0VmFsdWUgPT0gbnVsbCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlhc3NlcnRUcnVlKCJleHBlY3RlZCAiICsgZXhwZWN0ZWROYW1lICsgIiBidXQgZm91bmQgIiArIHJlc3VsdFZhbHVlLCBleHBlY3RlZE5hbWUuZXF1YWxzKHJlc3VsdFZhbHVlKSk7Ci0JCX0KLQotCQlTdHJpbmcgZm91bmRDb250ZW50VHlwZSA9IGdldENvbnRlbnRUeXBlKCk7Ci0JCWlmIChleHBlY3RlZENvbnRlbnRUeXBlID09IG51bGwpIHsKLQkJCWFzc2VydFRydWUoImV4cGVjdGVkIG5vIGNvbnRlbnRUeXBlLCBidXQgZm91bmQ6ICIgKyBmb3VuZENvbnRlbnRUeXBlLCBmb3VuZENvbnRlbnRUeXBlID09IG51bGwpOwotCQl9Ci0JCWVsc2UgewotCQkJYXNzZXJ0VHJ1ZSgiZXhwZWN0ZWQgIiArIGV4cGVjdGVkQ29udGVudFR5cGUgKyAiIGJ1dCBmb3VuZCAiICsgZm91bmRDb250ZW50VHlwZSwgZXhwZWN0ZWRDb250ZW50VHlwZS5lcXVhbHMoZm91bmRDb250ZW50VHlwZSkpOwotCQl9Ci0KLQl9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0TWFsZm9ybWVkTm9FbmNvZGluZygpIHsKLQkvLyBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTWFsZm9ybWVkTm9FbmNvZGluZy5qc3AiOwotCS8vIGRvVGVzdEZpbGUoZmlsZW5hbWUpOwotCS8vIH0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0TWFsZm9ybWVkTm9FbmNvZGluZ1hTTCgpIHsKLQkvLyBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTWFsZm9ybWVkTm9FbmNvZGluZ1hTTC5qc3AiOwotCS8vIGRvVGVzdEZpbGUoZmlsZW5hbWUpOwotCS8vIH0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0Tm9FbmNvZGluZygpIHsKLQkvLyBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTm9FbmNvZGluZy5qc3AiOwotCS8vIGRvVGVzdEZpbGUoZmlsZW5hbWUpOwotCS8vIH0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsTm9uRGVmYXVsdCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb3JtYWxOb25EZWZhdWx0LmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS04Iik7Ci0JfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdE5vcm1hbFBhZ2VDYXNlTm9uRGVmYXVsdCgpIHsKLQkvLyBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0LmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3RkZWZlY3QyMjMzNjUoKSB7Ci0JLy8gU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIlNlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8qKgotCSAqIHJldHVybnMgZW5jb2RpbmcgYWNjb3JkaW5nIHRvIHByaW9yaXR5OiAxLiBYTUwgRGVjbGFyYXRpb24gMi4gcGFnZQotCSAqIGRpcmVjdGl2ZSBwYWdlRW5jb2RpbmcgbmFtZSAzLiBwYWdlIGRpcmVjdGl2ZSBjb250ZW50VHlwZSBjaGFyc2V0IG5hbWUKLQkgKi8KLQlwcml2YXRlIFN0cmluZyBnZXRBcHByb3ByaWF0ZUVuY29kaW5nKCkgewotCQlTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQkJaWYgKGZYTUxEZWNFbmNvZGluZ05hbWUgIT0gbnVsbCkKLQkJCXJlc3VsdCA9IGZYTUxEZWNFbmNvZGluZ05hbWU7Ci0JCWVsc2UgaWYgKGZQYWdlRW5jb2RpbmdWYWx1ZSAhPSBudWxsKQotCQkJcmVzdWx0ID0gZlBhZ2VFbmNvZGluZ1ZhbHVlOwotCQllbHNlIGlmIChmQ2hhcnNldCAhPSBudWxsKQotCQkJcmVzdWx0ID0gZkNoYXJzZXQ7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0Q29udGVudFR5cGUoKSB7Ci0JCXJldHVybiBmQ29udGVudFR5cGU7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzTGVnYWxTdHJpbmcoU3RyaW5nIHRva2VuVHlwZSkgewotCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCQlpZiAodG9rZW5UeXBlICE9IG51bGwpIHsKLQkJCXJlc3VsdCA9IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuU3RyaW5nVmFsdWUpIHx8IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVW5EZWxpbWl0ZWRTdHJpbmdWYWx1ZSkgfHwgdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5JbnZhbGlkVGVybWluYXRlZFN0cmluZ1ZhbHVlKSB8fCB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLkludmFsaWRUZXJtaW50YXRlZFVuRGVsaW1pdGVkU3RyaW5nVmFsdWUpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGV4YWN0bHkgdGhlIHNhbWUgYXMgd2hhdCBpcyBpbgotCSAqIEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcgotCSAqIAotCSAqIEBwYXJhbSBjb250ZW50VHlwZQotCSAqLwotCXByaXZhdGUgdm9pZCBwYXJzZUNvbnRlbnRUeXBlVmFsdWUoU3RyaW5nIGNvbnRlbnRUeXBlKSB7Ci0JCVBhdHRlcm4gcGF0dGVybiA9IFBhdHRlcm4uY29tcGlsZSgiO1xccypjaGFyc2V0XFxzKj1cXHMqIik7IC8vJE5PTi1OTFMtMSQKLQkJU3RyaW5nW10gcGFydHMgPSBwYXR0ZXJuLnNwbGl0KGNvbnRlbnRUeXBlKTsKLQkJaWYgKHBhcnRzLmxlbmd0aCA+IDApIHsKLQkJCS8vIGlmIG9ubHkgb25lIGl0ZW0sIGl0IGNhbiBzdGlsbCBiZSBjaGFyc2V0IGluc3RlYWQgb2YKLQkJCS8vIGNvbnRlbnRUeXBlCi0JCQlpZiAocGFydHMubGVuZ3RoID09IDEpIHsKLQkJCQlpZiAocGFydHNbMF0ubGVuZ3RoKCkgPiA2KSB7Ci0JCQkJCVN0cmluZyBjaGVja0ZvckNoYXJzZXQgPSBwYXJ0c1swXS5zdWJzdHJpbmcoMCwgNyk7Ci0JCQkJCWlmIChjaGVja0ZvckNoYXJzZXQuZXF1YWxzSWdub3JlQ2FzZSgiY2hhcnNldCIpKSB7Ci0JCQkJCQlpbnQgZXFwb3MgPSBwYXJ0c1swXS5pbmRleE9mKCc9Jyk7Ci0JCQkJCQllcXBvcyA9IGVxcG9zICsgMTsKLQkJCQkJCWlmIChlcXBvcyA8IHBhcnRzWzBdLmxlbmd0aCgpKSB7Ci0JCQkJCQkJZkNoYXJzZXQgPSBwYXJ0c1swXS5zdWJzdHJpbmcoZXFwb3MpOwotCQkJCQkJCWZDaGFyc2V0ID0gZkNoYXJzZXQudHJpbSgpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJZkNvbnRlbnRUeXBlID0gcGFydHNbMF07Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlmQ29udGVudFR5cGUgPSBwYXJ0c1swXTsKLQkJCX0KLQkJfQotCQlpZiAocGFydHMubGVuZ3RoID4gMSkgewotCQkJZkNoYXJzZXQgPSBwYXJ0c1sxXTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEdpdmUncyBwcmlvcml0eSB0byBlbmNvZGluZyB2YWx1ZSwgaWYgZm91bmQgZWxzZSwgbG9va3MgZm9yIGNvbnRlbnRUeXBlCi0JICogdmFsdWU7Ci0JICovCi0JcHJpdmF0ZSBIZWFkUGFyc2VyVG9rZW4gcGFyc2VIZWFkZXIoSlNQSGVhZFRva2VuaXplciB0b2tlbml6ZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWZQYWdlRW5jb2RpbmdWYWx1ZSA9IG51bGw7Ci0JCWZDaGFyc2V0ID0gbnVsbDsKLQkJZkNvbnRlbnRUeXBlID0gbnVsbDsKLQkJSGVhZFBhcnNlclRva2VuIHRva2VuID0gbnVsbDsKLQkJSGVhZFBhcnNlclRva2VuIGZpbmFsVG9rZW4gPSBudWxsOwotCQlkbyB7Ci0JCQl0b2tlbiA9IHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsKLQkJCVN0cmluZyB0b2tlblR5cGUgPSB0b2tlbi5nZXRUeXBlKCk7Ci0KLQkJCWlmICh0b2tlblR5cGUgPT0gWE1MSGVhZFRva2VuaXplckNvbnN0YW50cy5YTUxEZWxFbmNvZGluZykgewotCQkJCWlmICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJCUhlYWRQYXJzZXJUb2tlbiB2YWx1ZVRva2VuID0gdG9rZW5pemVyLmdldE5leHRUb2tlbigpOwotCQkJCQlTdHJpbmcgdmFsdWVUb2tlblR5cGUgPSB2YWx1ZVRva2VuLmdldFR5cGUoKTsKLQkJCQkJaWYgKGlzTGVnYWxTdHJpbmcodmFsdWVUb2tlblR5cGUpKSB7Ci0JCQkJCQlmWE1MRGVjRW5jb2RpbmdOYW1lID0gdmFsdWVUb2tlbi5nZXRUZXh0KCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIGlmICh0b2tlblR5cGUgPT0gSlNQSGVhZFRva2VuaXplckNvbnN0YW50cy5QYWdlRW5jb2RpbmcpIHsKLQkJCQlpZiAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgewotCQkJCQlIZWFkUGFyc2VyVG9rZW4gdmFsdWVUb2tlbiA9IHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsKLQkJCQkJU3RyaW5nIHZhbHVlVG9rZW5UeXBlID0gdmFsdWVUb2tlbi5nZXRUeXBlKCk7Ci0JCQkJCWlmIChpc0xlZ2FsU3RyaW5nKHZhbHVlVG9rZW5UeXBlKSkgewotCQkJCQkJZlBhZ2VFbmNvZGluZ1ZhbHVlID0gdmFsdWVUb2tlbi5nZXRUZXh0KCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIGlmICh0b2tlblR5cGUgPT0gSlNQSGVhZFRva2VuaXplckNvbnN0YW50cy5QYWdlQ29udGVudFR5cGUpIHsKLQkJCQlpZiAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgewotCQkJCQlIZWFkUGFyc2VyVG9rZW4gdmFsdWVUb2tlbiA9IHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsKLQkJCQkJU3RyaW5nIHZhbHVlVG9rZW5UeXBlID0gdmFsdWVUb2tlbi5nZXRUeXBlKCk7Ci0JCQkJCWlmIChpc0xlZ2FsU3RyaW5nKHZhbHVlVG9rZW5UeXBlKSkgewotCQkJCQkJZkNvbnRlbnRUeXBlVmFsdWUgPSB2YWx1ZVRva2VuLmdldFRleHQoKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWVsc2UgaWYgKHRva2VuVHlwZSA9PSBKU1BIZWFkVG9rZW5pemVyQ29uc3RhbnRzLlBhZ2VMYW5ndWFnZSkgewotCQkJCWlmICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJCUhlYWRQYXJzZXJUb2tlbiB2YWx1ZVRva2VuID0gdG9rZW5pemVyLmdldE5leHRUb2tlbigpOwotCQkJCQlTdHJpbmcgdmFsdWVUb2tlblR5cGUgPSB2YWx1ZVRva2VuLmdldFR5cGUoKTsKLQkJCQkJaWYgKGlzTGVnYWxTdHJpbmcodmFsdWVUb2tlblR5cGUpKSB7Ci0JCQkJCQlmTGFuZ3VhZ2UgPSB2YWx1ZVRva2VuLmdldFRleHQoKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQl3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSk7Ci0JCWlmIChmQ29udGVudFR5cGVWYWx1ZSAhPSBudWxsKSB7Ci0JCQlwYXJzZUNvbnRlbnRUeXBlVmFsdWUoZkNvbnRlbnRUeXBlVmFsdWUpOwotCQl9Ci0JCWZpbmFsVG9rZW4gPSB0b2tlbjsKLQkJcmV0dXJuIGZpbmFsVG9rZW47Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJlc3RDYXNlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIm5vbWFsRGlyZWN0aXZlQ2FzZS5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktMiIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TWluaW1hbFBhZ2VEaXJlY3RpdmUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibWluaW1hbFBhZ2VEaXJlY3RpdmUuanNwIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbGxGb3JtZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdElsbEZvcm1lZC5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SWxsRm9ybWVkMigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0SWxsRm9ybWVkMi5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTgiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS04IiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbXB0eUZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiRW1wdHlGaWxlLmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb21hbERpcmVjdGl2ZUNhc2VVc2luZ1hNTFN5bnRheCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub21hbERpcmVjdGl2ZUNhc2VVc2luZ1hNTFN5bnRheC5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktMiIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9QYWdlRGlyZWN0aXZlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3ROb1BhZ2VEaXJlY3RpdmUuanNwIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vcm1hbFBhZ2VEaXJlY3RpdmVXaXRoWE1MRGVjbCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub21hbERpcmVjdGl2ZUNhc2V3aXRoWE1MRGVjbC5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktMSIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0LmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS0yIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0Tm9QYWdlRGlyZWN0aXZlSW5MYXJnZUZpbGUuanNwIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCwgRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuTUFYX0NIQVJTX1JFQUNIRUQsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb3JtYWxDYXNlV2l0aE5laXRoZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibm9tYWxEaXJlY3RpdmVDYXNlTm9FbmNvZGluZy5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsQ2hhcnNldCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTMiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRMYW5ndWFnZSgpIHsKLQkJcmV0dXJuIGZMYW5ndWFnZTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JKU1AuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvanNwL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckpTUC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTExM2RiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvanNwL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckpTUC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjExICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLmpzcDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5JQ29udGVudERlc2NyaXB0aW9uRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucmVhZC5UZXN0Q29udGVudFR5cGVEZXRlY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JKU1AgZXh0ZW5kcyBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb24gewotCi0JcHJvdGVjdGVkIHZvaWQgZG9UZXN0KFN0cmluZyBleHBlY3RlZENvbnRlbnRUeXBlLCBTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRXhjZXB0aW9uLCBTdHJpbmcgZXhwZWN0ZWRKU1BDb250ZW50VHlwZSkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJc3VwZXIuZG9UZXN0KGV4cGVjdGVkQ29udGVudFR5cGUsIGZpbGVQYXRoLCBleHBlY3RlZEV4Y2VwdGlvbik7Ci0JCQotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBnZXRUZXN0UHJvamVjdCgpLmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlhc3NlcnROb3ROdWxsKCJFcnJvciBpbiB0ZXN0IGNhc2U6IGZpbGUgbm90IGZvdW5kOiAiICsgZmlsZVBhdGgsIGZpbGUpOwotCi0KLQkJSUNvbnRlbnREZXNjcmlwdGlvbiBzdHJlYW1Db250ZW50RGVzY3JpcHRpb24gPSBkb0dldENvbnRlbnRUeXBlQmFzZWRPblN0cmVhbShmaWxlKTsKLQkJSUNvbnRlbnREZXNjcmlwdGlvbiBmaWxlQ29udGVudERlc2NyaXB0aW9uID0gZG9HZXRDb250ZW50VHlwZUJhc2VkT25GaWxlKGZpbGUpOwotCi0JCVN0cmluZyBzdHJlYW1KU1BDb250ZW50VHlwZSA9IChTdHJpbmcpIHN0cmVhbUNvbnRlbnREZXNjcmlwdGlvbi5nZXRQcm9wZXJ0eShJQ29udGVudERlc2NyaXB0aW9uRm9ySlNQLkNPTlRFTlRfVFlQRV9BVFRSSUJVVEUpOwotCi0JCWNoZWNrUmVzdWx0cyhleHBlY3RlZEpTUENvbnRlbnRUeXBlLCBzdHJlYW1KU1BDb250ZW50VHlwZSk7Ci0JCQotCQkKLQkJU3RyaW5nIGZpbGVKU1BDb250ZW50VHlwZSA9IChTdHJpbmcpIGZpbGVDb250ZW50RGVzY3JpcHRpb24uZ2V0UHJvcGVydHkoSUNvbnRlbnREZXNjcmlwdGlvbkZvckpTUC5DT05URU5UX1RZUEVfQVRUUklCVVRFKTsKLQkJY2hlY2tSZXN1bHRzKGV4cGVjdGVkSlNQQ29udGVudFR5cGUsIGZpbGVKU1BDb250ZW50VHlwZSk7Ci0KLQotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja1Jlc3VsdHMoU3RyaW5nIGV4cGVjdGVkSlNQQ29udGVudFR5cGUsIFN0cmluZyBmb3VuZEpTUENvbnRlbnRUeXBlKSB7Ci0JCWlmIChleHBlY3RlZEpTUENvbnRlbnRUeXBlID09IG51bGwpIHsKLQkJCWFzc2VydFRydWUoImV4cGVjdGVkIG5vIGNvbnRlbnRUeXBlLCBidXQgZm91bmQ6ICIgKyBmb3VuZEpTUENvbnRlbnRUeXBlLCBmb3VuZEpTUENvbnRlbnRUeXBlID09IG51bGwpOwotCQl9Ci0JCWVsc2UgewotCQkJYXNzZXJ0VHJ1ZSgiZXhwZWN0ZWQgIiArIGV4cGVjdGVkSlNQQ29udGVudFR5cGUgKyAiIGJ1dCBmb3VuZCAiICsgZm91bmRKU1BDb250ZW50VHlwZSwgZXhwZWN0ZWRKU1BDb250ZW50VHlwZS5lcXVhbHMoZm91bmRKU1BDb250ZW50VHlwZSkpOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybUIuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyNDI5My90ZXN0c2hpZnRqaXNYbWxTeW50YXguanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyOTY2Ny9hdWRpLmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvRW1wdHlGaWxlLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvaW5WYWxpZEVuY29kaW5nVmFsdWUuanNwIiwgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmV4Y2VwdGlvbnMuVW5zdXBwb3J0ZWRDaGFyc2V0RXhjZXB0aW9uV2l0aERldGFpbC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL2phdmFFbmNvZGluZ1ZhbHVlLmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZy5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZ1hTTC5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3Avbm9FbmNvZGluZy5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL05vRW5jb2RpbmdpblhNTERlY2wuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZS5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZU5vRW5jb2RpbmcuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nQ2hhcnNldC5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nWE1MU3ludGF4LmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0JcHVibGljIHZvaWQgbm9tYWxEaXJlY3RpdmVDYXNld2l0aFhNTERlY2woKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2V3aXRoWE1MRGVjbC5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9Ob3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RCcm9rZW5MaW5lLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nLmpzcCIsIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5leGNlcHRpb25zLlVuc3VwcG9ydGVkQ2hhcnNldEV4Y2VwdGlvbldpdGhEZXRhaWwuY2xhc3MsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZ1dpdGhKdW5rLmpzcCIsIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5leGNlcHRpb25zLlVuc3VwcG9ydGVkQ2hhcnNldEV4Y2VwdGlvbldpdGhEZXRhaWwuY2xhc3MsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdGVzdEV4dHJhSnVuay5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdGVzdEV4dHJhVmFsaWRTdHVmZi5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZC5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZDIuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb0VuY29kaW5nVmFsdWUuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmUuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUF0Rmlyc3QuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlSW5MYXJnZUZpbGUuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb3JtYWxDYXNlLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL1VURjhXaXRoM0J5dGVCT00uanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL1dlbGxGb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzgwYmRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QKLQluYW1lPSJ0ZXN0c3VpdGUiCi0JZGVmYXVsdD0icnVuIgotCWJhc2VkaXI9Ii4iPgotCi0JPCEtLSBDb25maWd1cmFibGUgUHJvcGVydGllcyAtLT4KLQotCTwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0JPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KLQk8IS0tIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIke2Jhc2VkaXJ9XC4uXC4uIiAvPiAtLT4KLQotCTxlY2hvIG1lc3NhZ2U9ImJhc2VkaXIgJHtiYXNlZGlyfSIgLz4KLQk8ZWNobyBtZXNzYWdlPSJlY2xpcHNlIHBsYWNlICR7ZWNsaXBzZS1ob21lfSIgLz4KLQotCTwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBwbHVnaW4tbmFtZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLQk8cHJvcGVydHkKLQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCXZhbHVlPSJvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nIiAvPgotCTxwcm9wZXJ0eQotCQluYW1lPSJsaWJyYXJ5LWZpbGUiCi0JCXZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotCTwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0JPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJpbml0Ij4KLQkJPGRlbGV0ZT4KLQkJCTxmaWxlc2V0Ci0JCQkJZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0JCQkJaW5jbHVkZXM9Im9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcuKnhtbCIgLz4KLQkJPC9kZWxldGU+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotCTx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCQk8cHJvcGVydHkKLQkJCW5hbWU9IndzdC1mb2xkZXIiCi0JCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3dzdF9mb2xkZXIiIC8+Ci0JCTxkZWxldGUKLQkJCWRpcj0iJHt3c3QtZm9sZGVyfSIKLQkJCXF1aWV0PSJ0cnVlIiAvPgotCQk8YW50Ci0JCQl0YXJnZXQ9ImNvcmUtdGVzdCIKLQkJCWFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLQkJCWRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9ImRhdGEtZGlyIgotCQkJCXZhbHVlPSIke3dzdC1mb2xkZXJ9IiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCQkJdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmciIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJjbGFzc25hbWUiCi0JCQkJdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcuSlNQRW5jb2RpbmdUZXN0U3VpdGUiIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJwbHVnaW4tcGF0aCIKLQkJCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0JCTwvYW50PgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0JPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotCTwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLQk8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotCQk8IS0tPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+LS0+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0JPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotCTx0YXJnZXQKLQkJbmFtZT0icnVuIgotCQlkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotCQk8YW50Ci0JCQl0YXJnZXQ9ImNvbGxlY3QiCi0JCQlhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0JCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJpbmNsdWRlcyIKLQkJCQl2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy4qeG1sIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0ib3V0cHV0LWZpbGUiCi0JCQkJdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLQkJPC9hbnQ+Ci0JCTwhLS08ZW1haWxSZXN1bHRzIHJlc3VsdHNGaWxlPSIke2J1aWxkLXJlc3VsdHMtaG9tZX0vJHtwbHVnaW4tbmFtZX0ueG1sIiBhZGRyZXNzbGlzdD0iZGF2aWRfd2lsbGlhbXNAdXMuaWJtLmNvbSIgLz4gLS0+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+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5Gcm9tTm90ZXBhZGpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuRnJvbU5vdGVwYWRqc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1Yjk4NTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5Gcm9tTm90ZXBhZGpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkOWU4MTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5qc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdlNjkxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIuanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdmZmQ2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLmpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRiYTliYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy5qc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MWM4ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTVlOTMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotYmluCi1iaW4ucHJvamVjdAotYnVpbGQueG1sCi1kZXYucHJvcGVydGllcwotb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0c18xLjAuMC5qYXIKLWpzcHVpdGVzdHMuamFyCi10ZW1wLmZvbGRlcgotUGVyZm9ybWFuY2VSZXN1bHRzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFhNTBmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjExOTRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotI1dlZCBKYW4gMTIgMTY6NDc6MDYgRVNUIDIwMDUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9YWJvcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ1N2RhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jRnJpIE1heSAyNyAyMzozOToxMyBFRFQgMjAwNQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiOGI1MzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6IFN0cnVjdHVyZWQgU291cmNlIEVkaXRvciBmb3IgSlNQIFRlc3RzCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMAotQnVuZGxlLUNsYXNzUGF0aDoganNwdWl0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuSlNQVUlUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5jb250ZW50YXNzaXN0LAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuY29udGVudGFzc2lzdC50ZXN0ZmlsZXMsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5kb2N1bWVudCwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmV4YW1wbGVzLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMubW9kZWwsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5tb2RlbHF1ZXJ5LAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMub3RoZXIsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5wYWdlZGlyZWN0aXZlLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMucGFydGl0aW9uaW5nLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMucGFydGl0aW9uaW5nLnRlc3RmaWxlcy5qc3AsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5yZWdpc3RyeSwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnNlYXJjaCwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWwsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy52aWV3ZXIKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LAotIG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLmpkdC5jb3JlLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWksCi0gb3JnLmp1bml0LAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS51aSwKLSBvcmcuZWNsaXBzZS51aS5pZGUsCi0gb3JnLmVjbGlwc2UudWkuZWRpdG9ycywKLSBvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gudGV4dGVkaXRvciwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUsCi0gb3JnLmVjbGlwc2UudWkudmlld3MsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLndzdC54bWwudWksCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkKLUVjbGlwc2UtQXV0b1N0YXJ0OiB0cnVlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNmI5NmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci08Ym9keSBsYW5nPSJFTi1VUyI+Ci08aDI+QWJvdXQgVGhpcyBDb250ZW50PC9oMj4KLSAKLTxwPkZlYnJ1YXJ5IDI0LCAyMDA1PC9wPgkKLTxoMz5MaWNlbnNlPC9oMz4KLQotPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluICgmcXVvdDtDb250ZW50JnF1b3Q7KS4gIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQotRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KLQotPHA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCZxdW90O1JlZGlzdHJpYnV0b3ImcXVvdDspIGFuZCBkaWZmZXJlbnQgdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5Ci1hcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuICBDaGVjayB0aGUgUmVkaXN0cmlidXRvcidzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gIElmIG5vIHN1Y2ggbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuICBVbmxlc3Mgb3RoZXJ3aXNlCi1pbmRpY2F0ZWQgYmVsb3csIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudC48L3A+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3MWE1MGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgUGVyZm9ybWFuY2VSZXN1bHRzLyxcCi0gICAgICAgICAgICAgICB0ZXN0ZmlsZXMuemlwLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIHByb2plY3R0ZXN0ZmlsZXMvLFwKLSAgICAgICAgICAgICAgIHRlc3RmaWxlcy8sXAotICAgICAgICAgICAgICAganNwdWl0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLWphcnMuY29tcGlsZS5vcmRlciA9IGpzcHVpdGVzdHMuamFyCi1zb3VyY2UuanNwdWl0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuanNwdWl0ZXN0cy5qYXIgPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2ljb25zL3NvdXJjZUVkaXRvci5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2ljb25zL3NvdXJjZUVkaXRvci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ZWJkYjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9pY29ucy9zb3VyY2VFZGl0b3IuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2FkZjlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08cGx1Z2luPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MiPgotCQk8dmlldwotCQkJbmFtZT0iRW1iZWRkZWQgSlNQIFN0cnVjdHVyZWQgVGV4dCBWaWV3ZXIiCi0JCQlpY29uPSJpY29ucy9zb3VyY2VFZGl0b3IuZ2lmIgotCQkJY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy52aWV3ZXIuVmlld2VyVGVzdEpTUCIKLQkJCWlkPSJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnZpZXdlci5WaWV3ZXJUZXN0SlNQIiAvPgotCTwvZXh0ZW5zaW9uPgotCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9iZWFuaW5mb190ZXN0cy56aXAgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMvYmVhbmluZm9fdGVzdHMuemlwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTBhOWE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9iZWFuaW5mb190ZXN0cy56aXAKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMvaW5jbHVkZXNfdGVzdHMuemlwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL2luY2x1ZGVzX3Rlc3RzLnppcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIyMDRmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMvaW5jbHVkZXNfdGVzdHMuemlwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL2pzcHNlYXJjaF90ZXN0cy56aXAgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMvanNwc2VhcmNoX3Rlc3RzLnppcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzczYTMwMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMvanNwc2VhcmNoX3Rlc3RzLnppcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvSlNQVUlQcmVmZXJlbmNlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvSlNQVUlQcmVmZXJlbmNlc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTIxNTZjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0pTUFVJUHJlZmVyZW5jZXNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLmludGVybmFsLkpTUFVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuSlNQVUlQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOwotCi0vKioKLSAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgdGVzdCBpcyB0byB2ZXJpZnkgdGhlIHZhbGlkaXR5IG9mIHRoZSBKU1AgU291cmNlCi0gKiBlZGl0b3IgcHJlZmVyZW5jZXMuIFRlc3RzIGluY2x1ZGUgc2V0dGluZy9nZXR0aW5nIHByZWZlcmVuY2VzLgotICogCi0gKiBOT1RFOiBUaGlzIHRlc3Qgc2hvdWxkIGJlIHByZWZvcm1lZCBvbiBhIGNsZWFuIHdvcmtzcGFjZS4gSWYgcGVyZm9ybWVkIG9uCi0gKiBhbiBleGlzdGluZyB3b3Jrc3BhY2UsIHRoaXMgdGVzdCB3aWxsIG1hbmlwdWxhdGUgcHJlZmVyZW5jZXMgaW4gdGhlCi0gKiB3b3Jrc3BhY2UsIHRob3VnaCBhdHRlbXB0cyB3aWxsIGJlIG1hZGUgdG8gcmVzdG9yZSBvcmlnaW5hbCB2YWx1ZXMgYWZ0ZXIKLSAqIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBKU1BVSVByZWZlcmVuY2VzVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiBUZXN0cyBleGlzdGFuY2Ugb2YgcHJlZmVyZW5jZSB2YWx1ZXMgd2hlbiBnZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzCi0JICogdGhyb3VnaCBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdW5kbGVHZXRQcmVmZXJlbmNlcygpIHsKLQkJZmluYWwgU3RyaW5nIGJ1bmRsZU5hbWUgPSAib3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkiOwotCi0JCS8vIG5lZWQgdG8gc3RhcnQgdXAgYnVuZGxlIGZvciBkZWZhdWx0IHZhbHVlcyB0byBiZSBsb2FkZWQKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShidW5kbGVOYW1lKTsKLQkJdHJ5IHsKLQkJCWlmIChidW5kbGUgIT0gbnVsbCkKLQkJCQlidW5kbGUuc3RhcnQoKTsKLQkJCWVsc2UKLQkJCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBjb3VsZCBub3QgZmluZCBidW5kbGU6ICIgKyBidW5kbGVOYW1lKTsKLQkJfSBjYXRjaCAoQnVuZGxlRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCBiZWNhdXNlIG9mIGV4Y2VwdGlvbiBzdGFydGluZyBidW5kbGU6ICIgKyBidW5kbGVOYW1lICsgIiBleGNlcHRpb246ICIgKyBlKTsKLQkJfQotCi0JCWJ1bmRsZUdldFByZWZlcmVuY2UoYnVuZGxlTmFtZSwgSlNQVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFKTsKLQkJYnVuZGxlR2V0UHJlZmVyZW5jZShidW5kbGVOYW1lLCBKU1BVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0VfQ09ERSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1bmRsZUdldFByZWZlcmVuY2UoU3RyaW5nIGJ1bmRsZU5hbWUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCVN0cmluZyBkZWZhdWx0VmFsdWUgPSBMb25nLnRvU3RyaW5nKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsgLy8gcmFuZG9tCi0JCQkJCQkJCQkJCQkJCQkJCQkJLy8gc3RyaW5nCi0KLQkJU3RyaW5nIHZhbHVlID0gUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlKCkuZ2V0U3RyaW5nKGJ1bmRsZU5hbWUsIHByZWZLZXksIGRlZmF1bHRWYWx1ZSwgbnVsbCk7Ci0JCWFzc2VydE5vdFNhbWUoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UuIEtleTogIiArIHByZWZLZXksIGRlZmF1bHRWYWx1ZSwgdmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGRlZmF1bHQgdmFsdWVzIG9mIHByZWZlcmVuY2VzLgotCSAqIAotCSAqIE5PVEU6IEV4cGVjdGVkIGRlZmF1bHQgdmFsdWVzIGFyZSBoYXJkLWNvZGVkLCBzbyBpZiBkZWZhdWx0IHZhbHVlcyBkbwotCSAqIGdldCBjaGFuZ2VkLCBhc3NlcnRpb25zIG5lZWQgdG8gYmUgdXBkYXRlZCBhcyB3ZWxsCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlcygpIHsKLQkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IEpTUFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQotCQlwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShzdG9yZSwgSlNQVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFLCBCb29sZWFuLnRvU3RyaW5nKHRydWUpKTsKLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uoc3RvcmUsIEpTUFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRV9DT0RFLCAiPCIpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShJUHJlZmVyZW5jZVN0b3JlIHN0b3JlLCBTdHJpbmcgcHJlZktleSwgU3RyaW5nIGV4cGVjdGVkKSB7Ci0JCVN0cmluZyBkZWZhdWx0VmFsdWUgPSBzdG9yZS5nZXREZWZhdWx0U3RyaW5nKHByZWZLZXkpOwotCQlhc3NlcnRFcXVhbHMoIkdldCBkZWZhdWx0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXksIGV4cGVjdGVkLCBkZWZhdWx0VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMgYnkgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlIHRvIGJlIGEKLQkgKiBjZXJ0YWluIHZhbHVlLCB0aGVuIGdldHRpbmcgdGhlIHByZWZlcmVuY2UgdmFsdWUgdG8gdmVyaWZ5IGl0IHdhcyBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpblNldFByZWZlcmVuY2VzKCkgewotCQlJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gSlNQVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotCi0JCXBsdWdpblNldFByZWZlcmVuY2VCb29sZWFuKHN0b3JlLCBKU1BVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0UpOwotCQlwbHVnaW5TZXRQcmVmZXJlbmNlU3RyaW5nKHN0b3JlLCBKU1BVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0VfQ09ERSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpblNldFByZWZlcmVuY2VCb29sZWFuKElQcmVmZXJlbmNlU3RvcmUgc3RvcmUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCWJvb2xlYW4gb3JpZ2luYWxWYWx1ZSA9IHN0b3JlLmdldEJvb2xlYW4ocHJlZktleSk7Ci0JCWJvb2xlYW4gZXhwZWN0ZWRWYWx1ZSA9ICFvcmlnaW5hbFZhbHVlOwotCQlzdG9yZS5zZXRWYWx1ZShwcmVmS2V5LCBleHBlY3RlZFZhbHVlKTsKLQkJYm9vbGVhbiBmb3VuZFZhbHVlID0gc3RvcmUuZ2V0Qm9vbGVhbihwcmVmS2V5KTsKLQkJYXNzZXJ0RXF1YWxzKCJTZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiICsgcHJlZktleSArICIgIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIgZm91bmQ6ICIgKyBmb3VuZFZhbHVlLCBleHBlY3RlZFZhbHVlLCBmb3VuZFZhbHVlKTsKLQotCQkvLyBhdHRlbXB0IHRvIHJlc3RvcmUgb3JpZ2luYWwgcHJlZmVyZW5jZSB2YWx1ZQotCQlzdG9yZS5zZXRWYWx1ZShwcmVmS2V5LCBvcmlnaW5hbFZhbHVlKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luU2V0UHJlZmVyZW5jZVN0cmluZyhJUHJlZmVyZW5jZVN0b3JlIHN0b3JlLCBTdHJpbmcgcHJlZktleSkgewotCQlTdHJpbmcgb3JpZ2luYWxWYWx1ZSA9IHN0b3JlLmdldFN0cmluZyhwcmVmS2V5KTsKLQkJU3RyaW5nIGV4cGVjdGVkVmFsdWUgPSBMb25nLnRvU3RyaW5nKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsgLy8gcmFuZG9tCi0JCQkJCQkJCQkJCQkJCQkJCQkJLy8gc3RyaW5nCi0JCXN0b3JlLnNldFZhbHVlKHByZWZLZXksIGV4cGVjdGVkVmFsdWUpOwotCQlTdHJpbmcgZm91bmRWYWx1ZSA9IHN0b3JlLmdldFN0cmluZyhwcmVmS2V5KTsKLQkJYXNzZXJ0RXF1YWxzKCJTZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiICsgcHJlZktleSArICIgIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIgZm91bmQ6ICIgKyBmb3VuZFZhbHVlLCBleHBlY3RlZFZhbHVlLCBmb3VuZFZhbHVlKTsKLQotCQkvLyBhdHRlbXB0IHRvIHJlc3RvcmUgb3JpZ2luYWwgcHJlZmVyZW5jZSB2YWx1ZQotCQlzdG9yZS5zZXRWYWx1ZShwcmVmS2V5LCBvcmlnaW5hbFZhbHVlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0pTUFVJVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0pTUFVJVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNDFhMTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9KU1BVSVRlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuY29udGVudGFzc2lzdC5CZWFuSW5mb1Byb3ZpZGVyVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmNvbnRlbnRhc3Npc3QuSlNQSmF2YVRyYW5zbGF0b3JUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuY29udGVudGFzc2lzdC5KU1BUcmFuc2xhdGlvblRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5jb250ZW50ZGVzY3JpcHRpb24uVGVzdENvbnRlbnREZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmRvY3VtZW50LkZpbGVCdWZmZXJEb2N1bWVudFRlc3RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm1vZGVsLlRlc3RNb2RlbHNGcm9tRmlsZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlUZXN0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5vdGhlci5TY2FubmVyVW5pdFRlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMub3RoZXIuVW5pdFRlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMucGFnZWRpcmVjdGl2ZS5UZXN0UGFnZURpcmVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnBhcnRpdGlvbmluZy5UZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMucmVnaXN0cnkuQWRhcHRlckZhY3RvcnlSZWdpc3RyeVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy52aWV3ZXIuVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25KU1A7Ci0KLQotCi0KLXB1YmxpYyBjbGFzcyBKU1BVSVRlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IEpTUFVJVGVzdFN1aXRlKCk7Ci0JfQotCi0JcHVibGljIEpTUFVJVGVzdFN1aXRlKCkgewotCQlzdXBlcigiU1NFIEpTUCBVSSBUZXN0IFN1aXRlIik7Ci0JCQotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoU2Nhbm5lclVuaXRUZXN0cy5jbGFzcywgIlNjYW5uZXJVbml0VGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShVbml0VGVzdHMuY2xhc3MsICJVbml0VGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVySlNQLmNsYXNzLCAiVGVzdFN0cnVjdHVyZWRQYXJ0aW9uZXIiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShNb2RlbFF1ZXJ5VGVzdGVyLmNsYXNzLCAiTW9kZWxRdWVyeVRlc3RlciIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEpTUEphdmFUcmFuc2xhdG9yVGVzdC5jbGFzcywgIkpTUEphdmFUcmFuc2xhdG9yVGVzdCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RFbWFpbE5vdGljZS5jbGFzcywgIlRlc3RFbWFpbE5vdGljZSIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEJlYW5JbmZvUHJvdmlkZXJUZXN0LmNsYXNzLCAiQmVhbkluZm9Qcm92aWRlclRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShKU1BUcmFuc2xhdGlvblRlc3QuY2xhc3MsICJKU1BUcmFuc2xhdGlvblRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShBZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5VGVzdC5jbGFzcywgIkFkYXB0ZXJGYWN0b3J5UmVnaXN0cnlUZXh0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoSlNQVUlQcmVmZXJlbmNlc1Rlc3QuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uSlNQLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0RWRpdG9yQ29uZmlndXJhdGlvbkpTUC5jbGFzcykpOwotCQkKLQkJLy8gbW92ZWQgZnJvbSBqc3AgY29yZSB0ZXN0cyBiZWNhdXNlIHRoZXkgcmVxdWlyZSBVSQotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFBhZ2VEaXJlY3RpdmUuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEZpbGVCdWZmZXJEb2N1bWVudFRlc3Rlci5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdE1vZGVsQ2xvbmUuY2xhc3MpKTsKLQkJCi0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0TW9kZWxzRnJvbUZpbGVzLmNsYXNzLCAiVGVzdE1vZGVsc0Zyb21GaWxlcyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RNb2RlbEVtYmVkZGVkQ29udGVudFR5cGUuY2xhc3MsICJUZXN0TW9kZWxFbWJlZGRlZENvbnRlbnRUeXBlIikpOwotCi0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0Q29udGVudERlc2NyaXB0aW9uLmNsYXNzLCAiQ29udGVudCBEZXNjcmlwdGlvbiBUZXN0cyIpKTsKLQkJLy8gcGFfVE9ETyBmaXggdGhpcyB0ZXN0Ci0JCS8vYWRkVGVzdChuZXcgVGVzdFN1aXRlKEpTUFNlYXJjaFRlc3RzLmNsYXNzKSk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvSlNQVUlUZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9KU1BVSVRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzZjUwNGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9KU1BVSVRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIEpTUFVJVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBKU1BVSVRlc3RzUGx1Z2luIHBsdWdpbjsKLQkvL1Jlc291cmNlIGJ1bmRsZS4KLQlwcml2YXRlIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0gIm9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMiOwotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBKU1BVSVRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCQl0cnkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuU1NFRm9ySlNQVGVzdHNQbHVnaW5SZXNvdXJjZXMiKTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpIHsKLQkJCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEpTUFVJVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqIG9yICdrZXknIGlmIG5vdCBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IEpTUFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFJlc291cmNlQnVuZGxlKCk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gKGJ1bmRsZSAhPSBudWxsKSA/IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KSA6IGtleTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBrZXk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICovCi0JcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkgewotCQlyZXR1cm4gcmVzb3VyY2VCdW5kbGU7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgVVJMIGdldEluc3RhbGxMb2NhdGlvbigpIHsKLQkJVVJMIGluc3RhbGxMb2NhdGlvbiA9IFBsYXRmb3JtLmdldEJ1bmRsZSgib3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cyIpLmdldEVudHJ5KCIvIik7Ci0JCVVSTCByZXNvbHZlZExvY2F0aW9uID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlc29sdmVkTG9jYXRpb24gPSBQbGF0Zm9ybS5yZXNvbHZlKGluc3RhbGxMb2NhdGlvbik7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGltcG9zc2libGUKLQkJCXRocm93IG5ldyBFcnJvcihlKTsKLQkJfQotCQlyZXR1cm4gcmVzb2x2ZWRMb2NhdGlvbjsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBGaWxlIGdldFRlc3RGaWxlKFN0cmluZyBmaWxlcGF0aCkgewotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvL1N0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJRmlsZSByZXN1bHQgPSBuZXcgRmlsZShsb2NhdGlvbik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvTG9nZ2VyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0xvZ2dlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGRlODcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvTG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogU21hbGwgY29udmVuaWVuY2UgY2xhc3MgdG8gbG9nIG1lc3NhZ2VzIHRvIHBsdWdpbidzIGxvZyBmaWxlIGFuZCBhbHNvLCBpZiBkZXNpcmVkLAotICogdGhlIGNvbnNvbGUuIFRoaXMgY2xhc3Mgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBjbGFzc2VzIGluIHRoaXMgcGx1Z2luLiBPdGhlcgotICogcGx1Z2lucyBzaG91bGQgbWFrZSB0aGVpciBvd24gY29weSwgd2l0aCBhcHByb3ByaWF0ZSBJRC4KLSAqLwotcHVibGljIGNsYXNzIExvZ2dlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQUNFRklMVEVSX0xPQ0FUSU9OID0gIi9kZWJ1Zy90cmFjZWZpbHRlciI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LID0gSVN0YXR1cy5PSzsgLy8gMAotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk8gPSBJU3RhdHVzLklORk87IC8vIDEKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HID0gSVN0YXR1cy5XQVJOSU5HOyAvLyAyCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1IgPSBJU3RhdHVzLkVSUk9SOyAvLyA0Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPS19ERUJVRyA9IDIwMCArIE9LOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk9fREVCVUcgPSAyMDAgKyBJTkZPOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkdfREVCVUcgPSAyMDAgKyBXQVJOSU5HOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0RFQlVHID0gMjAwICsgRVJST1I7Ci0KLQkvKioKLQkgKiBBZGRzIG1lc3NhZ2UgdG8gbG9nLgotCSAqIEBwYXJhbSBsZXZlbCBzZXZlcml0eSBsZXZlbCBvZiB0aGUgbWVzc2FnZSAoT0ssIElORk8sIFdBUk5JTkcsIEVSUk9SLCBPS19ERUJVRywgSU5GT19ERUJVRywgV0FSTklOR19ERUJVRywgRVJST1JfREVCVUcpCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBhZGQgdG8gdGhlIGxvZwotCSAqIEBwYXJhbSBleGNlcHRpb24gZXhjZXB0aW9uIHRocm93bgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGxldmVsID09IE9LX0RFQlVHIHx8IGxldmVsID09IElORk9fREVCVUcgfHwgbGV2ZWwgPT0gV0FSTklOR19ERUJVRyB8fCBsZXZlbCA9PSBFUlJPUl9ERUJVRykgewotCQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJCXJldHVybjsKLQkJfQotCi0JCWludCBzZXZlcml0eSA9IElTdGF0dXMuT0s7Ci0JCXN3aXRjaCAobGV2ZWwpIHsKLQkJCWNhc2UgSU5GT19ERUJVRyA6Ci0JCQljYXNlIElORk8gOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5JTkZPOwotCQkJCWJyZWFrOwotCQkJY2FzZSBXQVJOSU5HX0RFQlVHIDoKLQkJCWNhc2UgV0FSTklORyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLldBUk5JTkc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEVSUk9SX0RFQlVHIDoKLQkJCWNhc2UgRVJST1IgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5FUlJPUjsKLQkJfQotCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKHNldmVyaXR5LCBQTFVHSU5fSUQsIHNldmVyaXR5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQl9Ci0KLQkvKioKLQkgKiBQcmludHMgbWVzc2FnZSB0byBsb2cgaWYgY2F0ZWdvcnkgbWF0Y2hlcyAvZGVidWcvdHJhY2VmaWx0ZXIgb3B0aW9uLgotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gcHJpbnQKLQkgKiBAcGFyYW0gY2F0ZWdvcnkgY2F0ZWdvcnkgb2YgdGhlIG1lc3NhZ2UsIHRvIGJlIGNvbXBhcmVkIHdpdGggL2RlYnVnL3RyYWNlZmlsdGVyCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF90cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChpc1RyYWNpbmcoY2F0ZWdvcnkpKSB7Ci0JCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBQTFVHSU5fSUQsIElTdGF0dXMuT0ssIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybSBpcyBkZWJ1Z2dpbmcKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEZWJ1Z2dpbmcoKSB7Ci0JCXJldHVybiBQbGF0Zm9ybS5pbkRlYnVnTW9kZSgpOwotCX0KLQotCS8qKgotCSAqIERldGVybWluZXMgaWYgY3VycmVudGx5IHRyYWNpbmcgYSBjYXRlZ29yeQotCSAqIEBwYXJhbSBjYXRlZ29yeQotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0cmFjaW5nIGNhdGVnb3J5LCBmYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUcmFjaW5nKFN0cmluZyBjYXRlZ29yeSkgewotCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nIHRyYWNlRmlsdGVyID0gUGxhdGZvcm0uZ2V0RGVidWdPcHRpb24oUExVR0lOX0lEICsgVFJBQ0VGSUxURVJfTE9DQVRJT04pOwotCQlpZiAodHJhY2VGaWx0ZXIgIT0gbnVsbCkgewotCQkJU3RyaW5nVG9rZW5pemVyIHRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodHJhY2VGaWx0ZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKLQkJCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJU3RyaW5nIGNhdCA9IHRva2VuaXplci5uZXh0VG9rZW4oKS50cmltKCk7Ci0JCQkJaWYgKGNhdGVnb3J5LmVxdWFscyhjYXQpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIG51bGwpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkpTUC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkpTUC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2U0OGJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25KU1AuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgSmVucyBMdWtvd3NraS9Jbm5vb3ByYWN0IC0gaW5pdGlhbCByZW5hbWluZy9yZXN0cnVjdHVyaW5nCi0gKiAKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS52aWV3cy5jb250ZW50b3V0bGluZS5KU1BDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5FeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkudmlld3MucHJvcGVydGllcy5YTUxQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbjsKLQotLyoqCi0gKiBUZXN0cyByZXRyaWV2aW5nIGVkaXRvciBjb250cmlidXRpb25zIGZvciBqc3AgY29udGVudCB0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0RWRpdG9yQ29uZmlndXJhdGlvbkpTUCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0U291cmNlVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLlNPVVJDRVZJRVdFUkNPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnROb3ROdWxsKCJubyBzb3VyY2Ugdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQLCBvKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIHNvdXJjZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1AsIG8uZ2V0Q2xhc3MoKSwgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudE91dGxpbmVWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuQ09OVEVOVE9VVExJTkVDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gY29udGVudCBvdXRsaW5lIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBjb250ZW50IG91dGxpbmUgdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQLCBvLmdldENsYXNzKCksIEpTUENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbi5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuUFJPUEVSVFlTSEVFVENPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnROb3ROdWxsKCJubyBwcm9wZXJ0eSBzaGVldCBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBwcm9wZXJ0eSBzaGVldCBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCwgby5nZXRDbGFzcygpLCBYTUxQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbi5jbGFzcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UZXN0RW1haWxOb3RpY2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvVGVzdEVtYWlsTm90aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1NDE1NmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UZXN0RW1haWxOb3RpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIFRlc3RFbWFpbE5vdGljZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIGJvb2xlYW4gc2VuZE5vdGlmaWNhdGlvbnMgPSBmYWxzZTsKLQotCXB1YmxpYyBUZXN0RW1haWxOb3RpY2UoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIFRlc3RFbWFpbE5vdGljZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW1haWwoKSB7Ci0JCWFzc2VydEZhbHNlKCJTaW1wbGUgdGVzdCB0byBiZSBzdXJlIGVtYWlsIGdldHMgc2VudCBvbiBmYWlsdXJlIiwgc2VuZE5vdGlmaWNhdGlvbnMpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Rlc3RNb2RlbENsb25lLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Rlc3RNb2RlbENsb25lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4YmI4YTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UZXN0TW9kZWxDbG9uZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5QYWdlRGlyZWN0aXZlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5FbWJlZGRlZEhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLm1vZGVsaGFuZGxlci5FbWJlZGRlZFR5cGVIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZU5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuRW1iZWRkZWRYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotLyoqCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIFRlc3RNb2RlbENsb25lIGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFRlc3RNb2RlbENsb25lLgotCSAqLwotCXB1YmxpYyBUZXN0TW9kZWxDbG9uZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3QgZ2V0VGVzdCgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0TW9kZWxDbG9uZSgidGVzdENyZWF0ZVN0cnVjdHVyZWRNb2RlbEpTUCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDbG9uZVN0cnVjdHVyZWRNb2RlbFhNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBjbG9uZWRNb2RlbCA9IG1vZGVsLm5ld0luc3RhbmNlKCk7Ci0JCWFzc2VydFRydWUoImNsb25lZCBtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBjbG9uZWRNb2RlbCAhPSBudWxsKTsKLQkJLy8gbWFrZSBzdXJlIHRoZSBjcml0aWNhbCB2YXJpYWJsZXMgYXJlIE5PVCBpZGVudGljYWwsIGJ1dCB0aGF0IG5ldyBpbnN0YW5jZXMgCi0JCS8vIGhhdmUgYmVlbiBtYWRlCi0JCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQkJLy8JCWlmIChjbG9uZWRNb2RlbC5nZXRFbmNvZGluZ01lbWVudG8oKSA9PSBtb2RlbC5nZXRFbmNvZGluZ01lbWVudG8oKSkgcGFzc2VkID0gZmFsc2U7Ci0JCS8vCQlpZiAoY2xvbmVkTW9kZWwuZ2V0UGFyc2VyKCkgPT0gbW9kZWwuZ2V0UGFyc2VyKCkpIHBhc3NlZCA9IGZhbHNlOwotCQkvLwkJaWYgKGNsb25lZE1vZGVsLmdldFJlUGFyc2VyKCkgPT0gbW9kZWwuZ2V0UmVQYXJzZXIoKSkgcGFzc2VkID0gZmFsc2U7Ci0JCWFzc2VydFRydWUoIm5ld0luc3RhbmNlIG9mIHN0cnVjdHVyZWQgbW9kZWwgaXMgbm90IGNvcnJlY3QiLCBwYXNzZWQpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdENsb25lU3RydWN0dXJlZE1vZGVsSFRNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwpOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQotCQlJU3RydWN0dXJlZE1vZGVsIGNsb25lZE1vZGVsID0gbW9kZWwubmV3SW5zdGFuY2UoKTsKLQkJYXNzZXJ0VHJ1ZSgiY2xvbmVkIG1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIGNsb25lZE1vZGVsICE9IG51bGwpOwotCQkvLyBtYWtlIHN1cmUgdGhlIGNyaXRpY2FsIHZhcmlhYmxlcyBhcmUgTk9UIGlkZW50aWNhbCwgYnV0IHRoYXQgbmV3IGluc3RhbmNlcyAKLQkJLy8gaGF2ZSBiZWVuIG1hZGUKLQkJYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCQkvLwkJaWYgKGNsb25lZE1vZGVsLmdldEVuY29kaW5nTWVtZW50bygpID09IG1vZGVsLmdldEVuY29kaW5nTWVtZW50bygpKSBwYXNzZWQgPSBmYWxzZTsKLQkJLy8JCWlmIChjbG9uZWRNb2RlbC5nZXRQYXJzZXIoKSA9PSBtb2RlbC5nZXRQYXJzZXIoKSkgcGFzc2VkID0gZmFsc2U7Ci0JCS8vCQlpZiAoY2xvbmVkTW9kZWwuZ2V0UmVQYXJzZXIoKSA9PSBtb2RlbC5nZXRSZVBhcnNlcigpKSBwYXNzZWQgPSBmYWxzZTsKLQkJYXNzZXJ0VHJ1ZSgibmV3SW5zdGFuY2Ugb2Ygc3RydWN0dXJlZCBtb2RlbCBpcyBub3QgY29ycmVjdCIsIHBhc3NlZCk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xvbmVTdHJ1Y3R1cmVkTW9kZWxKU1AoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBGaXJzdCBtYWtlIChlbXB0eSkgc3RydWN0dXJlZERvY3VtZW50Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIG1vZGVsICE9IG51bGwpOwotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgY2xvbmVkTW9kZWwgPSBtb2RlbC5uZXdJbnN0YW5jZSgpOwotCQlhc3NlcnRUcnVlKCJjbG9uZWQgbW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgY2xvbmVkTW9kZWwgIT0gbnVsbCk7Ci0JCS8vIG1ha2Ugc3VyZSB0aGUgZW1iZWRkZWQgdHlwZSBpcyBjb3JyZWN0Ci0JCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQkJRG9jdW1lbnQgZG9jID0gKChJRE9NTW9kZWwpIGNsb25lZE1vZGVsKS5nZXREb2N1bWVudCgpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgKChJTm9kZU5vdGlmaWVyKSBkb2MpLmdldEV4aXN0aW5nQWRhcHRlcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCWFzc2VydE5vdE51bGwoImNsb25lZCBtb2RlbCBkaWQgbm90IGhhdmUgZW1iZWRkZWQgYWRhcHRlciIsIHBhZ2VEaXJlY3RpdmVBZGFwdGVyKTsKLQotCQlFbWJlZGRlZFR5cGVIYW5kbGVyIGVtYmVkZGVkSGFuZGxlciA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldEVtYmVkZGVkVHlwZSgpOwotCQlhc3NlcnROb3ROdWxsKCJjbG9uZWQgbW9kZWwgZGlkIG5vdCBoYXZlIGVtYmVkZGVkIGhhbmRsZXIiLCBlbWJlZGRlZEhhbmRsZXIpOwotCi0JCS8vCQlpZiAoY2xvbmVkTW9kZWwuZ2V0RW5jb2RpbmdNZW1lbnRvKCkgPT0gbW9kZWwuZ2V0RW5jb2RpbmdNZW1lbnRvKCkpIHBhc3NlZCA9IGZhbHNlOwotCQkvLwkJaWYgKGNsb25lZE1vZGVsLmdldFBhcnNlcigpID09IG1vZGVsLmdldFBhcnNlcigpKSBwYXNzZWQgPSBmYWxzZTsKLQkJLy8JCWlmIChjbG9uZWRNb2RlbC5nZXRSZVBhcnNlcigpID09IG1vZGVsLmdldFJlUGFyc2VyKCkpIHBhc3NlZCA9IGZhbHNlOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBzdHJ1Y3R1cmVkIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDbG9uZVN0cnVjdHVyZWRNb2RlbEpTUFhNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0JCS8vIG5vdGUsIHdlIGluaXRpYWx5IGV4cGVjdCBIVE1MLCBzaW5jZSB0aGVyZSBpcyBub3QgY29udGVudAotCQljaGVja0VtYmVkZGVkVHlwZShtb2RlbCwgRW1iZWRkZWRIVE1MLmNsYXNzKTsKLQotCQlTdHJpbmcgdGVzdENvbnRlbnQgPSAiPCVAIHBhZ2UgY29udGVudFR5cGU9XCJ0ZXh0L3htbFwiICU+IjsKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0VGV4dCh0aGlzLCB0ZXN0Q29udGVudCk7Ci0KLQkJLy8gbW9kaWZpZWQgZm9yIGRlc2lnbiBjaGFuZ2UsIHdoZXJlIHJlLWluaXQgc2hvdWxkIGJlIGhhbmRsZWQgYmVmb3JlIAotCQkvLyBzZXQgcmV0dXJucy4KLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgc2hvdWxkIG5vdCBuZWVkIHJlaW5pdCIsICFtb2RlbC5pc1JlaW5pdGlhbGl6YXRpb25OZWVkZWQoKSk7Ci0KLQkJLy8JCWJ1dCBpZiBpdCBkaWQgbmVlZCByZS1pbml0LCBoZXJlJ3MgdGhlIHJpZ2h0IGNhbGxpbmcgc2VxdWVuY2UJCQotCQkvLwkJaWYgKG1vZGVsLmlzUmVpbml0aWFsaXphdGlvbk5lZWRlZCgpKSB7Ci0JCS8vCQkJbW9kZWwuYWJvdXRUb0NoYW5nZU1vZGVsKCk7Ci0JCS8vCQkJbW9kZWwgPSBtb2RlbC5yZWluaXQoKTsKLQkJLy8JCQltb2RlbC5jaGFuZ2VkTW9kZWwoKTsKLQkJLy8JCX0KLQotCQljaGVja0VtYmVkZGVkVHlwZShtb2RlbCwgRW1iZWRkZWRYTUwuY2xhc3MpOwotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgY2xvbmVkTW9kZWwgPSBtb2RlbC5uZXdJbnN0YW5jZSgpOwotCQlhc3NlcnRUcnVlKCJjbG9uZWQgbW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgY2xvbmVkTW9kZWwgIT0gbnVsbCk7Ci0JCWNoZWNrRW1iZWRkZWRUeXBlKGNsb25lZE1vZGVsLCBFbWJlZGRlZFhNTC5jbGFzcyk7Ci0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tFbWJlZGRlZFR5cGUoSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCwgQ2xhc3MgZXhwZWN0ZWRUeXBlKSB7Ci0JCURvY3VtZW50IGRvYyA9ICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJUGFnZURpcmVjdGl2ZUFkYXB0ZXIgcGFnZURpcmVjdGl2ZUFkYXB0ZXIgPSAoUGFnZURpcmVjdGl2ZUFkYXB0ZXIpICgoSU5vZGVOb3RpZmllcikgZG9jKS5nZXRFeGlzdGluZ0FkYXB0ZXIoUGFnZURpcmVjdGl2ZUFkYXB0ZXIuY2xhc3MpOwotCQlhc3NlcnROb3ROdWxsKCJtb2RlbCBkaWQgbm90IGhhdmUgZW1iZWRkZWQgYWRhcHRlciIsIHBhZ2VEaXJlY3RpdmVBZGFwdGVyKTsKLQotCQlFbWJlZGRlZFR5cGVIYW5kbGVyIGVtYmVkZGVkSGFuZGxlciA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldEVtYmVkZGVkVHlwZSgpOwotCQlhc3NlcnROb3ROdWxsKCJtb2RlbCBkaWQgbm90IGhhdmUgZW1iZWRkZWQgaGFuZGxlciIsIGVtYmVkZGVkSGFuZGxlcik7Ci0KLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkVHlwZSwgZW1iZWRkZWRIYW5kbGVyLmdldENsYXNzKCkpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZVN0cnVjdHVyZWRNb2RlbEpTUCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0KLQkJQXJyYXlMaXN0IGZhY3RvcmllcyA9IChBcnJheUxpc3QpIG1vZGVsLmdldEZhY3RvcnlSZWdpc3RyeSgpLmdldEZhY3RvcmllcygpOwotCQlmYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSBmYWN0b3JpZXMuY2xvbmUoKTsKLQotCQlJU3RydWN0dXJlZE1vZGVsIGNsb25lZE1vZGVsID0gbW9kZWwubmV3SW5zdGFuY2UoKTsKLQkJaWYgKG1vZGVsLmdldE1vZGVsSGFuZGxlcigpID09IG51bGwpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJYXNzZXJ0VHJ1ZShmYWxzZSk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgiY2xvbmVkIG1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIGNsb25lZE1vZGVsICE9IG51bGwpOwotCQkvLyBtYWtlIHN1cmUgdGhlIGNyaXRpY2FsIHZhcmlhYmxlcyBhcmUgY29ycmVjdC4KLQotCQlBcnJheUxpc3QgbmV3RmFjdG9yaWVzID0gKEFycmF5TGlzdCkgY2xvbmVkTW9kZWwuZ2V0RmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RmFjdG9yaWVzKCk7Ci0JCW5ld0ZhY3RvcmllcyA9IChBcnJheUxpc3QpIG5ld0ZhY3Rvcmllcy5jbG9uZSgpOwotCi0JCWJvb2xlYW4gcGFzc2VkID0gY2hlY2tGYWN0b3JpZXNMaXN0Rm9ySWRlbnRpdHkoZmFjdG9yaWVzLCBuZXdGYWN0b3JpZXMpOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBzdHJ1Y3R1cmVkIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCQlwYXNzZWQgPSBjaGVja0ZvclNhbWVFbWJlZGRlZEZhY3Rvcmllcyhtb2RlbCwgY2xvbmVkTW9kZWwpOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBzdHJ1Y3R1cmVkIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCQkvLyBOb3csIGFzc2lnbmluZyBzb21lIGNvbnRlbnQgc2hvdWxkbid0IGNoYW5nZSB0aGUgZmFjdG9yaWVzCi0JCWNsb25lZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnJlcGxhY2VUZXh0KHRoaXMsIDAsIDAsICI8c2FtcGxlPiB0ZXh0Iik7Ci0JCUFycmF5TGlzdCB0d29GYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSBjbG9uZWRNb2RlbC5nZXRGYWN0b3J5UmVnaXN0cnkoKS5nZXRGYWN0b3JpZXMoKTsKLQkJdHdvRmFjdG9yaWVzID0gKEFycmF5TGlzdCkgdHdvRmFjdG9yaWVzLmNsb25lKCk7Ci0KLQkJcGFzc2VkID0gY2hlY2tGYWN0b3JpZXNMaXN0Rm9ySWRlbnRpdHkoZmFjdG9yaWVzLCB0d29GYWN0b3JpZXMpOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBzdHJ1Y3R1cmVkIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCQlwYXNzZWQgPSBjaGVja0ZvclNhbWVFbWJlZGRlZEZhY3Rvcmllcyhtb2RlbCwgY2xvbmVkTW9kZWwpOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBzdHJ1Y3R1cmVkIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCi0JCS8vIE5vdywgYXNzaWduaW5nIHVzZSBhIHBhZ2UgZGlyZWN0aXZlLCBidXQgbGVhdmluZyBlbWJlZGRlZCB0eXBlIHRoZSBzYW1lIGFzIGRlZmF1bHQKLQkJY2xvbmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0VGV4dCh0aGlzLCAiPCVAIHBhZ2UgY29udGVudFR5cGU9XCJ0ZXh0L2h0bWxcIiIpOwotCQlBcnJheUxpc3QgdGhyZWVGYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSBjbG9uZWRNb2RlbC5nZXRGYWN0b3J5UmVnaXN0cnkoKS5nZXRGYWN0b3JpZXMoKTsKLQkJdGhyZWVGYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSB0aHJlZUZhY3Rvcmllcy5jbG9uZSgpOwotCi0JCXBhc3NlZCA9IGNoZWNrRmFjdG9yaWVzTGlzdEZvcklkZW50aXR5KGZhY3RvcmllcywgdGhyZWVGYWN0b3JpZXMpOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBzdHJ1Y3R1cmVkIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCQlwYXNzZWQgPSBjaGVja0ZvclNhbWVFbWJlZGRlZEZhY3Rvcmllcyhtb2RlbCwgY2xvbmVkTW9kZWwpOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBzdHJ1Y3R1cmVkIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCi0JfQotCi0JLyoqCi0JICogTWV0aG9kIGNoZWNrRW1iZWRkZWRGYWN0b3JpZXMuCi0JICogQHBhcmFtIG1vZGVsCi0JICogQHBhcmFtIGNsb25lZE1vZGVsCi0JICogQHJldHVybiBib29sZWFuCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIGNoZWNrRm9yU2FtZUVtYmVkZGVkRmFjdG9yaWVzKElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwsIElTdHJ1Y3R1cmVkTW9kZWwgY2xvbmVkTW9kZWwpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCi0KLQkJRW1iZWRkZWRUeXBlSGFuZGxlciBvbGRFbWJlZGRlZFR5cGUgPSBnZXRFbWJlZGRlZFR5cGUobW9kZWwpOwotCQlFbWJlZGRlZFR5cGVIYW5kbGVyIG5ld0VtYmVkZGVkVHlwZSA9IGdldEVtYmVkZGVkVHlwZShjbG9uZWRNb2RlbCk7Ci0JCS8vIGV4cGVjdCB0byBiZSB0aGUgc2FtZSB0eXBlCi0JCWlmICghb2xkRW1iZWRkZWRUeXBlLmdldENsYXNzKCkuZXF1YWxzKG5ld0VtYmVkZGVkVHlwZS5nZXRDbGFzcygpKSkgewotCQkJcmVzdWx0ID0gZmFsc2U7Ci0JCQlhc3NlcnRUcnVlKHJlc3VsdCk7Ci0JCX0KLQotCQlMaXN0IG9sZEZhY3RvcmllcyA9IG9sZEVtYmVkZGVkVHlwZS5nZXRBZGFwdGVyRmFjdG9yaWVzKCk7Ci0JCUxpc3QgbmV3RmFjdG9yaWVzID0gbmV3RW1iZWRkZWRUeXBlLmdldEFkYXB0ZXJGYWN0b3JpZXMoKTsKLQkJcmVzdWx0ID0gY2hlY2tGYWN0b3JpZXNMaXN0Rm9yRXF1aXZhbGVuY2Uob2xkRmFjdG9yaWVzLCBuZXdGYWN0b3JpZXMpOwotCi0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwcml2YXRlIEVtYmVkZGVkVHlwZUhhbmRsZXIgZ2V0RW1iZWRkZWRUeXBlKElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwpIHsKLQkJRG9jdW1lbnQgZG9jID0gKChJRE9NTW9kZWwpIG1vZGVsKS5nZXREb2N1bWVudCgpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgKChJTm9kZU5vdGlmaWVyKSBkb2MpLmdldEV4aXN0aW5nQWRhcHRlcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCWFzc2VydE5vdE51bGwoIm1vZGVsIGRpZCBub3QgaGF2ZSBlbWJlZGRlZCBhZGFwdGVyIiwgcGFnZURpcmVjdGl2ZUFkYXB0ZXIpOwotCi0JCUVtYmVkZGVkVHlwZUhhbmRsZXIgZW1iZWRkZWRIYW5kbGVyID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0RW1iZWRkZWRUeXBlKCk7Ci0JCWFzc2VydE5vdE51bGwoIm1vZGVsIGRpZCBub3QgaGF2ZSBlbWJlZGRlZCBoYW5kbGVyIiwgZW1iZWRkZWRIYW5kbGVyKTsKLQotCQlyZXR1cm4gZW1iZWRkZWRIYW5kbGVyOwotCX0KLQotCi0JLyoqCi0JICogTWV0aG9kIGNoZWNrRmFjdG9yaWVzTGlzdC4KLQkgKiBAcGFyYW0gZmFjdG9yaWVzCi0JICogQHBhcmFtIG5ld0ZhY3RvcmllcwotCSAqIEByZXR1cm4gYm9vbGVhbgotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBjaGVja0ZhY3Rvcmllc0xpc3RGb3JJZGVudGl0eShMaXN0IGZhY3RvcmllcywgTGlzdCBuZXdGYWN0b3JpZXMpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCQlpZiAoZmFjdG9yaWVzLnNpemUoKSAhPSBuZXdGYWN0b3JpZXMuc2l6ZSgpKSB7Ci0JCQlyZXN1bHQgPSBmYWxzZTsKLQkJfQotCQllbHNlIHsKLQkJCS8vIG5uZWQgbm90IGJlIGlkZW50aWNhbCwgbm9yIHNhbWUgb3JkZXIKLQkJCS8vCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmYWN0b3JpZXMuc2l6ZSgpOyBpKyspIHsKLQkJCS8vCQkJCWlmICghKGZhY3Rvcmllcy5nZXQoaSkgPT0gbmV3RmFjdG9yaWVzLmdldChpKSkpIHsKLQkJCS8vCQkJCQlyZXN1bHQgPSBmYWxzZTsKLQkJCS8vCQkJCQlicmVhazsKLQkJCS8vCQkJCX0KLQkJCS8vCQkJfQotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGNoZWNrRmFjdG9yaWVzTGlzdEZvckVxdWl2YWxlbmNlKExpc3QgZmFjdG9yaWVzLCBMaXN0IG5ld0ZhY3RvcmllcykgewotCQlib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0JCWlmIChmYWN0b3JpZXMuc2l6ZSgpICE9IG5ld0ZhY3Rvcmllcy5zaXplKCkpIHsKLQkJCXJlc3VsdCA9IGZhbHNlOwotCQl9Ci0JCWVsc2UgewotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmYWN0b3JpZXMuc2l6ZSgpOyBpKyspIHsKLQkJCQlpZiAoIWZhY3Rvcmllcy5nZXQoaSkuZ2V0Q2xhc3MoKS5lcXVhbHMobmV3RmFjdG9yaWVzLmdldChpKS5nZXRDbGFzcygpKSkgewotCQkJCQlyZXN1bHQgPSBmYWxzZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlU3RydWN0dXJlZE1vZGVsSFRNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwpOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQotCQlBcnJheUxpc3QgZmFjdG9yaWVzID0gKEFycmF5TGlzdCkgbW9kZWwuZ2V0RmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RmFjdG9yaWVzKCk7Ci0JCWZhY3RvcmllcyA9IChBcnJheUxpc3QpIGZhY3Rvcmllcy5jbG9uZSgpOwotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgY2xvbmVkTW9kZWwgPSBtb2RlbC5uZXdJbnN0YW5jZSgpOwotCQlhc3NlcnRUcnVlKCJjbG9uZWQgbW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgY2xvbmVkTW9kZWwgIT0gbnVsbCk7Ci0JCS8vIG1ha2Ugc3VyZSB0aGUgY3JpdGljYWwgdmFyaWFibGVzIGFyZSBjb3JyZWN0LgotCi0JCUFycmF5TGlzdCBuZXdGYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSBjbG9uZWRNb2RlbC5nZXRGYWN0b3J5UmVnaXN0cnkoKS5nZXRGYWN0b3JpZXMoKTsKLQkJbmV3RmFjdG9yaWVzID0gKEFycmF5TGlzdCkgbmV3RmFjdG9yaWVzLmNsb25lKCk7Ci0KLQkJYm9vbGVhbiBwYXNzZWQgPSBjaGVja0ZhY3Rvcmllc0xpc3RGb3JJZGVudGl0eShmYWN0b3JpZXMsIG5ld0ZhY3Rvcmllcyk7Ci0KLQkJYXNzZXJ0VHJ1ZSgibmV3SW5zdGFuY2Ugb2Ygc3RydWN0dXJlZCBtb2RlbCBpcyBub3QgY29ycmVjdCIsIHBhc3NlZCk7Ci0KLQkJLy8gTm93LCBhc3NpZ25pbmcgc29tZSBjb250ZW50IHNob3VsZG4ndCBjaGFuZ2UgdGhlIGZhY3RvcmllcwotCQljbG9uZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRUZXh0KHRoaXMsICI8c2FtcGxlPiB0ZXh0Iik7Ci0JCUFycmF5TGlzdCB0d29GYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSBjbG9uZWRNb2RlbC5nZXRGYWN0b3J5UmVnaXN0cnkoKS5nZXRGYWN0b3JpZXMoKTsKLQkJdHdvRmFjdG9yaWVzID0gKEFycmF5TGlzdCkgdHdvRmFjdG9yaWVzLmNsb25lKCk7Ci0KLQkJcGFzc2VkID0gY2hlY2tGYWN0b3JpZXNMaXN0Rm9ySWRlbnRpdHkoZmFjdG9yaWVzLCBuZXdGYWN0b3JpZXMpOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBzdHJ1Y3R1cmVkIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCX0KLQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UZXN0TW9kZWxFbWJlZGRlZENvbnRlbnRUeXBlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Rlc3RNb2RlbEVtYmVkZGVkQ29udGVudFR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc1MWM0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Rlc3RNb2RlbEVtYmVkZGVkQ29udGVudFR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmRvY3VtZW50LlBhZ2VEaXJlY3RpdmVBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmx0ay5tb2RlbGhhbmRsZXIuRW1iZWRkZWRUeXBlSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLk1vZGVsSGFuZGxlclV0aWxpdHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotLyoqCi0gKiBAYXV0aG9yIGRhdmlkdwotICogCi0gKiBUbyBjaGFuZ2UgdGhpcyBnZW5lcmF0ZWQgY29tbWVudCBlZGl0IHRoZSB0ZW1wbGF0ZSB2YXJpYWJsZSAidHlwZWNvbW1lbnQiOgotICogV2luZG93PlByZWZlcmVuY2VzPkphdmE+VGVtcGxhdGVzLiBUbyBlbmFibGUgYW5kIGRpc2FibGUgdGhlIGNyZWF0aW9uIG9mCi0gKiB0eXBlIGNvbW1lbnRzIGdvIHRvIFdpbmRvdz5QcmVmZXJlbmNlcz5KYXZhPkNvZGUgR2VuZXJhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RNb2RlbEVtYmVkZGVkQ29udGVudFR5cGUgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVGVzdE1vZGVsQ2xvbmUuCi0JICovCi0JcHVibGljIFRlc3RNb2RlbEVtYmVkZGVkQ29udGVudFR5cGUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCX0KLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBnZXRUZXN0KCkgewotCQlyZXR1cm4gbmV3IFRlc3RNb2RlbEVtYmVkZGVkQ29udGVudFR5cGUoInRlc3RTdHJ1Y3R1cmVkTW9kZWxFbWJlZGRlZEpTUENoYW5nZSIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNoZWNrRW1iZWRkZWRUeXBlKElTdHJ1Y3R1cmVkTW9kZWwgY2xvbmVkTW9kZWwsIE9iamVjdCBleHBlY3RlZFR5cGUpIHsKLQkJRG9jdW1lbnQgZG9jID0gKChJRE9NTW9kZWwpIGNsb25lZE1vZGVsKS5nZXREb2N1bWVudCgpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBlbWJlZGRlZFR5cGVBZGFwdGVyID0gKFBhZ2VEaXJlY3RpdmVBZGFwdGVyKSAoKElOb2RlTm90aWZpZXIpIGRvYykuZ2V0QWRhcHRlckZvcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCWFzc2VydE5vdE51bGwoImNsb25lZCBtb2RlbCBkaWQgbm90IGhhdmUgZW1iZWRkZWQgYWRhcHRlciIsIGVtYmVkZGVkVHlwZUFkYXB0ZXIpOwotCi0JCUVtYmVkZGVkVHlwZUhhbmRsZXIgZW1iZWRkZWRIYW5kbGVyID0gZW1iZWRkZWRUeXBlQWRhcHRlci5nZXRFbWJlZGRlZFR5cGUoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiY2xvbmVkIG1vZGVsIGRpZCBub3QgaGF2ZSBlbWJlZGRlZCBoYW5kbGVyIiwgZW1iZWRkZWRIYW5kbGVyKTsKLQotCQlhc3NlcnRUcnVlKCJjbG9uZWQgbW9kZWwgZW1iZWRkZWRIYW5kbGVyIGlzIHdyb25nIHR5cGUiLCBlbWJlZGRlZEhhbmRsZXIuZXF1YWxzKGV4cGVjdGVkVHlwZSkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTdHJ1Y3R1cmVkTW9kZWxFbWJlZGRlZFhNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0KLQkJLy8gWE1MIHNob3VsZCBOT1QgaGF2ZSBhbiBlbWJlZGRlZCB0eXBlCi0JCURvY3VtZW50IGRvYyA9ICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJRW1iZWRkZWRUeXBlSGFuZGxlciBlbWJlZGRlZEhhbmRsZXIgPSAoRW1iZWRkZWRUeXBlSGFuZGxlcikgKChJTm9kZU5vdGlmaWVyKSBkb2MpLmdldEFkYXB0ZXJGb3IoRW1iZWRkZWRUeXBlSGFuZGxlci5jbGFzcyk7Ci0JCWFzc2VydFRydWUoImVtYmVkZWRIYW5sZGVyIHNob3VsZCBiZSBudWxsIGZvciBYTUwiLCBlbWJlZGRlZEhhbmRsZXIgPT0gbnVsbCk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U3RydWN0dXJlZE1vZGVsRW1iZWRkZWRIVE1MKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIG1vZGVsICE9IG51bGwpOwotCi0JCS8vIHNob3VsZCBOT1QgaGF2ZSBhbiBlbWJlZGRlZCB0eXBlCi0JCURvY3VtZW50IGRvYyA9ICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJRW1iZWRkZWRUeXBlSGFuZGxlciBlbWJlZGRlZEhhbmRsZXIgPSAoRW1iZWRkZWRUeXBlSGFuZGxlcikgKChJTm9kZU5vdGlmaWVyKSBkb2MpLmdldEFkYXB0ZXJGb3IoRW1iZWRkZWRUeXBlSGFuZGxlci5jbGFzcyk7Ci0JCWFzc2VydFRydWUoImVtYmVkZWRIYW5sZGVyIHNob3VsZCBiZSBudWxsIGZvciBIVE1MIiwgZW1iZWRkZWRIYW5kbGVyID09IG51bGwpOwotCi0JfQotCi0JcHJvdGVjdGVkIElTdHJ1Y3R1cmVkTW9kZWwgZG9TdHJ1Y3R1cmVkTW9kZWxFbWJlZGRlZEpTUCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0KLQkJLy8gc2hvdWxkIGhhdmUgYW4gZW1iZWRkZWQgdHlwZQotCQlEb2N1bWVudCBkb2MgPSAoKElET01Nb2RlbCkgbW9kZWwpLmdldERvY3VtZW50KCk7Ci0JCVBhZ2VEaXJlY3RpdmVBZGFwdGVyIGVtYmVkZGVkSGFuZGxlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgKChJTm9kZU5vdGlmaWVyKSBkb2MpLmdldEFkYXB0ZXJGb3IoUGFnZURpcmVjdGl2ZUFkYXB0ZXIuY2xhc3MpOwotCQlhc3NlcnRUcnVlKCJlbWJlZGVkSGFubGRlciBzaG91bGQgTk9UIGJlIG51bGwgZm9yIEpTUCIsIGVtYmVkZGVkSGFuZGxlciAhPSBudWxsKTsKLQotCQkvLyBlbWJlZGRlZCB0eXBlIHNob3VsZCBiZSBIVE1MIHNpbmNlIG5vIGNvbnRlbnQKLQkJY2hlY2tFbWJlZGRlZFR5cGUobW9kZWwsIE1vZGVsSGFuZGxlclV0aWxpdHkuZ2V0RGVmYXVsdEVtYmVkZGVkVHlwZSgpKTsKLQotCQlTdHJpbmcgdGVzdENvbnRlbnQgPSAiPCVAIHBhZ2UgY29udGVudFR5cGU9XCJ0ZXh0L2h0bWxcIiAlPiI7Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnJlcGxhY2VUZXh0KHRoaXMsIDAsIDAsIHRlc3RDb250ZW50KTsKLQkJYXNzZXJ0VHJ1ZSgicmVpbml0IHNob3VsZCBOT1QgYmUgbmVlZGVkIGluIHRoaXMgY2FzZSIsICFtb2RlbC5pc1JlaW5pdGlhbGl6YXRpb25OZWVkZWQoKSk7Ci0KLQkJLy8gZW1iZWRkZWQgdHlwZSBzaG91bGQgU1RJTEwgYmUgSFRNTCBzaW5jZSBubyBjb250ZW50VHlwZSB3YXMKLQkJLy8gdGV4dC9odG1sCi0JCWNoZWNrRW1iZWRkZWRUeXBlKG1vZGVsLCBNb2RlbEhhbmRsZXJVdGlsaXR5LmdldERlZmF1bHRFbWJlZGRlZFR5cGUoKSk7Ci0KLQkJcmV0dXJuIG1vZGVsOwotCQkvLwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTdHJ1Y3R1cmVkTW9kZWxFbWJlZGRlZEpTUCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWRvU3RydWN0dXJlZE1vZGVsRW1iZWRkZWRKU1AoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U3RydWN0dXJlZE1vZGVsRW1iZWRkZWRKU1BDaGFuZ2UoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCi0JCS8vIHN0YXJ0IHdpdGggdGhlIGZ1bGwgdGVzdCBjYXNlCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBkb1N0cnVjdHVyZWRNb2RlbEVtYmVkZGVkSlNQKCk7Ci0JCS8vIGNoYW5nZSAiaHRtbCIgdG8gInhtbCIKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkucmVwbGFjZVRleHQodGhpcywgMjcsIDQsICJ4bWwiKTsKLQkJLy8gd2l0aCByZWluaXQgaW4gWE1MIG1vZGVsIC4uLiBpdHMgYWxyZWFkeSBiZWVuIHJlLWluaXRpYWxpemVkCi0JCS8vIGFzc2VydFRydWUoInJlaW5pdCBTSE9VTEQgYmUgbmVlZGVkIGluIHRoaXMgY2FzZSIsCi0JCS8vIG1vZGVsLmlzUmVpbmlpdGlhbGl6YXRpb25OZWVkZWQoKSk7Ci0KLQkJaWYgKG1vZGVsLmlzUmVpbml0aWFsaXphdGlvbk5lZWRlZCgpKSB7Ci0JCQltb2RlbC5yZWluaXQoKTsKLQkJfQotCi0JCS8vIGVtYmVkZGVkIHR5cGUgc2hvdWxkIG5vdyBiZSBYTUwKLQkJY2hlY2tFbWJlZGRlZFR5cGUobW9kZWwsIE1vZGVsSGFuZGxlclV0aWxpdHkuZ2V0RW1iZWRkZWRDb250ZW50VHlwZUZvcigidGV4dC94bWwiKSk7Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L0JlYW5JbmZvUHJvdmlkZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvQmVhbkluZm9Qcm92aWRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVkY2E4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvQmVhbkluZm9Qcm92aWRlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuY29udGVudGFzc2lzdDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JT3BlbmFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVBhY2thZ2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JUGFja2FnZUZyYWdtZW50Um9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JUGFyZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQmVhbkluZm9Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuSUphdmFQcm9wZXJ0eURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kuc2VydmljZS5kYXRhbG9jYXRpb24uTG9jYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5JT3ZlcndyaXRlUXVlcnk7Ci0KLS8qKgotICogVGhpcyBjbGFzcyB0ZXN0cyB0aGUgQmVhbkluZm9Qcm92aWRlci4gQ3VycmVudGx5IHRlc3Qgd29ya3NwYWNlIE1VU1QgcG9pbnQKLSAqIHRvIHRoZSBzcGVjaWZpYyBvbmUgZm9yIHRoaXMgdGVzdC4KLSAqIAotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIEJlYW5JbmZvUHJvdmlkZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCWNsYXNzIE92ZXJ3cml0ZU5vbmUgaW1wbGVtZW50cyBJT3ZlcndyaXRlUXVlcnkgewotCQlwdWJsaWMgU3RyaW5nIHF1ZXJ5T3ZlcndyaXRlKFN0cmluZyBwYXRoU3RyaW5nKSB7Ci0JCQlyZXR1cm4gSU92ZXJ3cml0ZVF1ZXJ5LkFMTDsKLQkJfQotCX0KLQotCXByaXZhdGUgSVJlc291cmNlIGZSZXNvdXJjZTsKLQlwcml2YXRlIEJlYW5JbmZvUHJvdmlkZXIgZlByb3ZpZGVyOwotCXByaXZhdGUgSGFzaFNldCBmQWxyZWFkeU9wZW4gPSBuZXcgSGFzaFNldCgpOwotCXByaXZhdGUgUHJvamVjdFVuemlwVXRpbGl0eSBmUHJvalV0aWwgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBmSXNTZXR1cCA9IGZhbHNlOwotCi0JcHVibGljIEJlYW5JbmZvUHJvdmlkZXJUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCWlmICghdGhpcy5mSXNTZXR1cCkgewotCQkJaW5pdGlhbGl6ZVJlc291cmNlKCk7Ci0JCQl0aGlzLmZJc1NldHVwID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBpbml0aWFsaXplUmVzb3VyY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZlByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJLy8gcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCUxvY2F0aW9uIHBsYXRmb3JtTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRJbnN0YW5jZUxvY2F0aW9uKCk7Ci0JCS8vIHBsYXRmb3JtIGxvY2F0aW9uIG1heSBiZSBudWxsIC0tIGRlcGVuZHMgb24gIm1vZGUiIG9mIHBsYXRmb3JtCi0JCWlmIChwbGF0Zm9ybUxvY2F0aW9uICE9IG51bGwpIHsKLQkJCUZpbGUgemlwRmlsZSA9IEZpbGVVdGlsLm1ha2VGaWxlRm9yKFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUiwgImJlYW5pbmZvX3Rlc3RzLnppcCIsIFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUik7Ci0JCQlmUHJvalV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgcGxhdGZvcm1Mb2NhdGlvbi5nZXRVUkwoKS5nZXRQYXRoKCkpOwotCQkJZlByb2pVdGlsLmluaXRKYXZhUHJvamVjdCgiQkVBTklORk8iKTsKLQkJCUlXb3Jrc3BhY2VSb290IHJvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQkJU3RyaW5nIHdvcmtzcGFjZVJlbGF0aXZlTG9jYXRpb24gPSAiL0JFQU5JTkZPL0JFQU5fVEVTVFMvYmVhbkluZm9fdGVzdC5qc3AiOwotCQkJZlJlc291cmNlID0gcm9vdC5nZXRGaWxlKG5ldyBQYXRoKHdvcmtzcGFjZVJlbGF0aXZlTG9jYXRpb24pKTsKLQkJCUlKYXZhUHJvamVjdCBqYXZhUHJvaiA9IEphdmFDb3JlLmNyZWF0ZShmUmVzb3VyY2UuZ2V0UHJvamVjdCgpKTsKLQkJCW9wZW5QYXRoKGphdmFQcm9qKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCBGaWxlIGdldFNvdXJjZURpcmVjdG9yeShTdHJpbmcgYWJzb2x1dGVTb3VyY2VEaXJlY3RvcnlQYXRoKSB7Ci0JCUZpbGUgc291cmNlRGlyZWN0b3J5ID0gbmV3IEZpbGUoYWJzb2x1dGVTb3VyY2VEaXJlY3RvcnlQYXRoKTsKLQkJaWYgKCFzb3VyY2VEaXJlY3RvcnkuZXhpc3RzKCkgfHwgIXNvdXJjZURpcmVjdG9yeS5pc0RpcmVjdG9yeSgpKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQlyZXR1cm4gc291cmNlRGlyZWN0b3J5OwotCX0KLQotCXByaXZhdGUgdm9pZCBvcGVuUGF0aChJSmF2YVByb2plY3QgamF2YVByb2opIHsKLQkJdHJ5IHsKLQkJCWlmIChqYXZhUHJvai5leGlzdHMoKSAmJiAhamF2YVByb2ouaXNPcGVuKCkpIHsKLQkJCQlqYXZhUHJvai5vcGVuKG51bGwpOwotCQkJfQotCQkJSVBhY2thZ2VGcmFnbWVudFJvb3Qgcm9vdCA9IGphdmFQcm9qLmdldFBhY2thZ2VGcmFnbWVudFJvb3QoZlJlc291cmNlLmdldFByb2plY3QoKSk7Ci0JCQlpZiAoIXJvb3QuaXNPcGVuKCkpCi0JCQkJcm9vdC5vcGVuKG51bGwpOwotCQkJSVBhY2thZ2VGcmFnbWVudCBmcmFnID0gZ2V0UGFja2FnZUZyYWdtZW50KHJvb3QsICJCRUFOX1RFU1RTIik7Ci0JCQlvcGVuQWxsKGZyYWcpOwotCQkJZnJhZyA9IGdldFBhY2thZ2VGcmFnbWVudChyb290LCAib3JnIik7Ci0JCQlpZiAoZnJhZyAhPSBudWxsICYmICFmcmFnLmlzT3BlbigpKQotCQkJCW9wZW5BbGwoZnJhZyk7Ci0JCQlmcmFnID0gZ2V0UGFja2FnZUZyYWdtZW50KHJvb3QsICJvcmcuZWNsaXBzZSIpOwotCQkJaWYgKGZyYWcgIT0gbnVsbCAmJiAhZnJhZy5pc09wZW4oKSkKLQkJCQlvcGVuQWxsKGZyYWcpOwotCQkJZnJhZyA9IGdldFBhY2thZ2VGcmFnbWVudChyb290LCAib3JnLmVjbGlwc2UuanN0Iik7Ci0JCQlpZiAoZnJhZyAhPSBudWxsICYmICFmcmFnLmlzT3BlbigpKQotCQkJCW9wZW5BbGwoZnJhZyk7Ci0JCQlmcmFnID0gZ2V0UGFja2FnZUZyYWdtZW50KHJvb3QsICJvcmcuZWNsaXBzZS5qc3QuanNwIik7Ci0JCQlpZiAoZnJhZyAhPSBudWxsICYmICFmcmFnLmlzT3BlbigpKQotCQkJCW9wZW5BbGwoZnJhZyk7Ci0JCQlmcmFnID0gZ2V0UGFja2FnZUZyYWdtZW50KHJvb3QsICJvcmcuZWNsaXBzZS5qc3QuanNwLnVpIik7Ci0JCQlpZiAoZnJhZyAhPSBudWxsICYmICFmcmFnLmlzT3BlbigpKQotCQkJCW9wZW5BbGwoZnJhZyk7Ci0JCQlmcmFnID0gZ2V0UGFja2FnZUZyYWdtZW50KHJvb3QsICJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzIik7Ci0JCQlpZiAoZnJhZyAhPSBudWxsICYmICFmcmFnLmlzT3BlbigpKQotCQkJCW9wZW5BbGwoZnJhZyk7Ci0JCX0KLQkJY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBJUGFja2FnZUZyYWdtZW50IGdldFBhY2thZ2VGcmFnbWVudChJUGFja2FnZUZyYWdtZW50Um9vdCByb290LCBTdHJpbmcgZnJhZ21lbnROYW1lKSB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIHsKLQkJSVBhY2thZ2VGcmFnbWVudCBmcmFnID0gbnVsbDsKLQkJSUphdmFFbGVtZW50W10gY2hpbGRyZW4gPSByb290LmdldENoaWxkcmVuKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKLQkJCWlmIChjaGlsZHJlbltpXS5nZXRFbGVtZW50TmFtZSgpLmVxdWFscyhmcmFnbWVudE5hbWUpKSB7Ci0JCQkJZnJhZyA9IChJUGFja2FnZUZyYWdtZW50KSBjaGlsZHJlbltpXTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZnJhZzsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgb3BlbkFsbChJSmF2YUVsZW1lbnQgamF2YUVsZW0pIHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gewotCQlpZiAoamF2YUVsZW0gaW5zdGFuY2VvZiBJT3BlbmFibGUpIHsKLQkJCWlmICghKChJT3BlbmFibGUpIGphdmFFbGVtKS5pc09wZW4oKSkKLQkJCQkoKElPcGVuYWJsZSkgamF2YUVsZW0pLm9wZW4obnVsbCk7Ci0JCX0KLQkJaWYgKGphdmFFbGVtIGluc3RhbmNlb2YgSVBhcmVudCAmJiAoKElQYXJlbnQpIGphdmFFbGVtKS5oYXNDaGlsZHJlbigpKSB7Ci0JCQlJSmF2YUVsZW1lbnRbXSBjaGlsZHJlbiA9ICgoSVBhcmVudCkgamF2YUVsZW0pLmdldENoaWxkcmVuKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7Ci0JCQkJaWYgKCFmQWxyZWFkeU9wZW4uY29udGFpbnMoY2hpbGRyZW5baV0uZ2V0RWxlbWVudE5hbWUoKSkpIHsKLQkJCQkJZkFscmVhZHlPcGVuLmFkZChjaGlsZHJlbltpXS5nZXRFbGVtZW50TmFtZSgpKTsKLQkJCQkJb3BlbkFsbChjaGlsZHJlbltpXSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFsbCgpIHsKLQkJYmVhbk9uQ2xhc3NwYXRoKCk7Ci0JCWJlYW5JblByb2plY3QoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYmVhbk9uQ2xhc3NwYXRoKCkgewotCQkvLyBwYV9UT0RPIGRvbid0IHVzZSBKQnV0dG9uLCBwcm9wZXJ0aWVzIGNoYW5nZQotCQkvLyB1c2Ugc29tZXRoaW5nIG1vcmUgc3RhdGljCi0JCUlKYXZhUHJvcGVydHlEZXNjcmlwdG9yW10gZGVzY3JpcHRvcnMgPSBnZXRQcm92aWRlcigpLmdldFJ1bnRpbWVQcm9wZXJ0aWVzKGZSZXNvdXJjZSwgImphdmF4LnN3aW5nLkpCdXR0b24iKTsKLQkJLy8JCWFzc2VydEVxdWFscygiTnVtYmVyIG9mIHByb3BlcnRpZXMgZm9yIEpCdXR0b246IiwgMTIyLCBkZXNjcmlwdG9ycy5sZW5ndGgpOwotCQlhc3NlcnROb3ROdWxsKCJkZXNjcmlwdG9ycyBzaG91bGRuJ3QgYmUgbnVsbCIsIGRlc2NyaXB0b3JzKTsKLQotCQkvLwkJTGlzdCBnZXRPbmx5ID0gbmV3IEFycmF5TGlzdCgpOwotCQkvLwkJTGlzdCBzZXRPbmx5ID0gbmV3IEFycmF5TGlzdCgpOwotCQkvLwkJTGlzdCBib3RoID0gbmV3IEFycmF5TGlzdCgpOwotCQkvLwkJSUphdmFQcm9wZXJ0eURlc2NyaXB0b3IganBkID0gbnVsbDsKLQkJLy8JCWZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcnMubGVuZ3RoOyBpKyspIHsKLQkJLy8JCQlqcGQgPSBkZXNjcmlwdG9yc1tpXTsKLQkJLy8JCQlpZiAoanBkLmdldFJlYWRhYmxlKCkgJiYganBkLmdldFdyaXRlYWJsZSgpKQotCQkvLwkJCQlib3RoLmFkZChqcGQpOwotCQkvLwkJCWVsc2UgaWYgKGpwZC5nZXRSZWFkYWJsZSgpICYmICFqcGQuZ2V0V3JpdGVhYmxlKCkpCi0JCS8vCQkJCWdldE9ubHkuYWRkKGpwZCk7Ci0JCS8vCQkJZWxzZQotCQkvLwkJCQlzZXRPbmx5LmFkZChqcGQpOwotCQkvLwkJfQotCQkvLwkJYXNzZXJ0RXF1YWxzKCJOdW1iZXIgb2YgZ2V0T25seSBwcm9wZXJ0aWVzOiIsIDYyLCBnZXRPbmx5LnNpemUoKSk7Ci0JCS8vYXNzZXJ0RXF1YWxzKCJOdW1iZXIgb2Ygc2V0T25seSBwcm9wZXJ0aWVzOiIsIDAsIHNldE9ubHkuc2l6ZSgpKTsKLQkJLy9hc3NlcnRFcXVhbHMoIk51bWJlciBvZiBnZXQgJiBzZXQgcHJvcGVydGllcyB0aGF0OiIsIDU5LAotCQkvLyBib3RoLnNpemUoKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJlYW5JblByb2plY3QoKSB7Ci0JCUlKYXZhUHJvcGVydHlEZXNjcmlwdG9yW10gZGVzY3JpcHRvcnMgPSBnZXRQcm92aWRlcigpLmdldFJ1bnRpbWVQcm9wZXJ0aWVzKGZSZXNvdXJjZSwgIm9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuQmFzZUFsYnVtQ29sbGVjdGlvbkJlYW4iKTsKLQkJYXNzZXJ0RXF1YWxzKCJOdW1iZXIgb2YgcHJvcGVydGllcyBmb3IgQmFzZUFsYnVtQ29sbGVjdGlvbkJlYW46IiwgNCwgZGVzY3JpcHRvcnMubGVuZ3RoKTsKLQkJTGlzdCBnZXRPbmx5ID0gbmV3IEFycmF5TGlzdCgpOwotCQlMaXN0IHNldE9ubHkgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUxpc3QgYm90aCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJSUphdmFQcm9wZXJ0eURlc2NyaXB0b3IganBkID0gbnVsbDsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9ycy5sZW5ndGg7IGkrKykgewotCQkJanBkID0gZGVzY3JpcHRvcnNbaV07Ci0JCQlpZiAoanBkLmdldFJlYWRhYmxlKCkgJiYganBkLmdldFdyaXRlYWJsZSgpKQotCQkJCWJvdGguYWRkKGpwZCk7Ci0JCQllbHNlIGlmIChqcGQuZ2V0UmVhZGFibGUoKSAmJiAhanBkLmdldFdyaXRlYWJsZSgpKQotCQkJCWdldE9ubHkuYWRkKGpwZCk7Ci0JCQllbHNlCi0JCQkJc2V0T25seS5hZGQoanBkKTsKLQkJfQotCQlhc3NlcnRFcXVhbHMoIk51bWJlciBvZiBnZXRPbmx5IHByb3BlcnRpZXM6IiwgMSwgZ2V0T25seS5zaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoIk51bWJlciBvZiBzZXRPbmx5IHByb3BlcnRpZXM6IiwgMSwgc2V0T25seS5zaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoIk51bWJlciBvZiBnZXQgJiBzZXQgcHJvcGVydGllcyB0aGF0OiIsIDIsIGJvdGguc2l6ZSgpKTsKLQkJLy8gZ2V0IG9ubHkKLQkJanBkID0gKElKYXZhUHJvcGVydHlEZXNjcmlwdG9yKSBnZXRPbmx5LmdldCgwKTsKLQkJYXNzZXJ0RXF1YWxzKCJnZXQgcmVhZGFibGUgZm9yIGdldCBvbmx5IHByb3BlcnR5OiAiLCB0cnVlLCBqcGQuZ2V0UmVhZGFibGUoKSk7Ci0JCWFzc2VydEVxdWFscygiZ2V0IHdyaXRhYmxlIGZvciBnZXQgb25seSBwcm9wZXJ0eToiLCBmYWxzZSwganBkLmdldFdyaXRlYWJsZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJuYW1lIGZvciBnZXQgb25seSBwcm9wZXJ0eSIsICJudW1DZHMiLCBqcGQuZ2V0RGlzcGxheU5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygidHlwZSBmb3IgZ2V0IG9ubHkgcHJvcGVydHkiLCAiaW50IiwganBkLmdldERlY2xhcmVkVHlwZSgpKTsKLQkJLy8gc2V0IG9ubHkKLQkJanBkID0gKElKYXZhUHJvcGVydHlEZXNjcmlwdG9yKSBzZXRPbmx5LmdldCgwKTsKLQkJYXNzZXJ0RXF1YWxzKCJnZXQgcmVhZGFibGUgZm9yIHNldCBvbmx5IHByb3BlcnR5OiAiLCBmYWxzZSwganBkLmdldFJlYWRhYmxlKCkpOwotCQlhc3NlcnRFcXVhbHMoImdldCB3cml0YWJsZSBmb3Igc2V0IG9ubHkgcHJvcGVydHk6IiwgdHJ1ZSwganBkLmdldFdyaXRlYWJsZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJuYW1lIGZvciBzZXQgb25seSBwcm9wZXJ0eSIsICJjZHMiLCBqcGQuZ2V0RGlzcGxheU5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygidHlwZSBmb3Igc2V0IG9ubHkgcHJvcGVydHkiLCAiU3RyaW5nW10iLCBqcGQuZ2V0RGVjbGFyZWRUeXBlKCkpOwotCQkvLyBib3RoCi0JCWpwZCA9IChJSmF2YVByb3BlcnR5RGVzY3JpcHRvcikgYm90aC5nZXQoMCk7Ci0JCWFzc2VydEVxdWFscygiZ2V0IHJlYWRhYmxlIGZvciBib3RoIHByb3BlcnR5OiAiLCB0cnVlLCBqcGQuZ2V0UmVhZGFibGUoKSk7Ci0JCWFzc2VydEVxdWFscygiZ2V0IHdyaXRhYmxlIGZvciBib3RoIHByb3BlcnR5OiIsIHRydWUsIGpwZC5nZXRXcml0ZWFibGUoKSk7Ci0JfQotCi0JcHJpdmF0ZSBCZWFuSW5mb1Byb3ZpZGVyIGdldFByb3ZpZGVyKCkgewotCQlpZiAoZlByb3ZpZGVyID09IG51bGwpCi0JCQlmUHJvdmlkZXIgPSBuZXcgQmVhbkluZm9Qcm92aWRlcigpOwotCQlyZXR1cm4gZlByb3ZpZGVyOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvSlNQSmF2YVRyYW5zbGF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvSlNQSmF2YVRyYW5zbGF0b3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiMTY1ZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L0pTUEphdmFUcmFuc2xhdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmNvbnRlbnRhc3Npc3Q7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5KU1BUcmFuc2xhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHRlc3RzIHRoZSBzZWQgSlNQSmF2YVRyYW5zbGF0b3IgY2xhc3MKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBKU1BKYXZhVHJhbnNsYXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgSlNQSmF2YVRyYW5zbGF0b3JUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBbGxGaWxlcygpIHsKLQkJLy8gdGhpcyB0ZXN0IGlzIGZvciBQTVI6IDkxOTMwICBDTVZDOjIxODQ2OQotCQl0ZXN0SlNQSW5KYXZhc2NyaXB0KCJ0ZXN0ZmlsZXMvanNwSW5KYXZhc2NyaXB0LmpzcCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BJbkphdmFzY3JpcHQoU3RyaW5nIGZpbGVuYW1lKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgc20gPSBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JSZWFkKGZpbGVuYW1lKTsKLQkJaWYgKHNtICE9IG51bGwpIHsKLQkJCUlET01Ob2RlIHhtbE5vZGUgPSAoSURPTU5vZGUpIHNtLmdldEluZGV4ZWRSZWdpb24oMCk7Ci0KLQkJCWlmICh4bWxOb2RlICE9IG51bGwpIHsKLQkJCQlKU1BUcmFuc2xhdG9yIGpzcHQgPSBuZXcgSlNQVHJhbnNsYXRvcigpOwotCQkJCWpzcHQucmVzZXQoeG1sTm9kZSwgbnVsbCk7Ci0JCQkJLy9pbnQgc291cmNlVGV4dFBvcyA9IHRleHQuaW5kZXhPZigiPCU9IHRlc3RKc3BTdHJpbmciKSArIDE3OwotCQkJCS8vanNwdC5zZXRTb3VyY2VDdXJzb3Ioc291cmNlVGV4dFBvcyk7IC8vIHJpZ2h0IGFmdGVyIHRoZSB0ZXh0Ci0JCQkJanNwdC50cmFuc2xhdGUoKTsKLQkJCQlTdHJpbmcgdHJhbnNsYXRpb24gPSBqc3B0LmdldFRyYW5zbGF0aW9uKCkudG9TdHJpbmcoKTsKLQkJCQkvLyBvZmZzZXRzIGFyZSBmb3VuZCB1c2luZyBKU1BUcmFuc2xhdGlvbiBub3cKLQkJCQkvL2ludCB0cmFuc2xhdGVkQ3Vyc29yUG9zaXRpb24gPSBqc3B0LmdldEN1cnNvclBvc2l0aW9uKCk7Ci0JCQkJLy9hc3NlcnRFcXVhbHMoImluY29ycmVjdCBjdXJzb3IgcG9zaXRpb24gPiIgKyB0cmFuc2xhdGVkQ3Vyc29yUG9zaXRpb24sIDUxOSwgdHJhbnNsYXRlZEN1cnNvclBvc2l0aW9uKTsKLQkJCQkvL2Fzc2VydEVxdWFscygidHJhbnNsYXRpb24gd2FzIGluY29ycmVjdCIsICJ0ZXN0SnNwU3RyaW5nIiwgdHJhbnNsYXRpb24uc3Vic3RyaW5nKDUxOSwgNTMyKSk7Ci0JCQkJaW50IGN1cnNvclN0YXJ0ID0gdHJhbnNsYXRpb24uaW5kZXhPZigib3V0LnByaW50KFwiXCIrXG4gdGVzdEpzcFN0cmluZyIpICsgMTQ7Ci0JCQkJYXNzZXJ0RXF1YWxzKCJpbmNvcnJlY3QgY3Vyc29yIHBvc2l0aW9uID4iICsgY3Vyc29yU3RhcnQsIDY2NywgY3Vyc29yU3RhcnQpOwotCQkJfQotCQkJc20ucmVsZWFzZUZyb21SZWFkKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBJTVBPUlRBTlQgd2hvZXZlciBjYWxscyB0aGlzIG11c3QgcmVsZWFzZUZyb21SZWFkIGFmdGVyIHRoZXkgYXJlIGRvbmUgdXNpbmcgaXQuCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogQHJldHVybgotCSAqLwotCXByb3RlY3RlZCBJU3RydWN0dXJlZE1vZGVsIGdldFN0cnVjdHVyZWRNb2RlbEZvclJlYWQoU3RyaW5nIGZpbGVuYW1lKSB7Ci0JCXRyeSB7Ci0JCQkvLyBjcmVhdGUgbW9kZWwKLQkJCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJCUlTdHJ1Y3R1cmVkTW9kZWwgc01vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yUmVhZChmaWxlbmFtZSwgaW5TdHJlYW0sIG51bGwpOwotCQkJcmV0dXJuIHNNb2RlbDsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gaW9leCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJjb3VsZG4ndCBvcGVuIGZpbGUgPiAiICsgZmlsZW5hbWUpOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvSlNQVHJhbnNsYXRpb25UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvSlNQVHJhbnNsYXRpb25UZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1NGEyOGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L0pTUFRyYW5zbGF0aW9uVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5jb250ZW50YXNzaXN0OwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlBvc2l0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5kb21kb2N1bWVudC5ET01Nb2RlbEZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5JSlNQVHJhbnNsYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSlNQVHJhbnNsYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSlNQVHJhbnNsYXRpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLkpTUFRyYW5zbGF0aW9uQWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5vdGhlci5TY2FubmVyVW5pdFRlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnNlcnZpY2UuZGF0YWxvY2F0aW9uLkxvY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci0KLS8qKgotICogVGhpcyBjbGFzcyB1bml0IHRlc3RzIHRoZSBzZWQgSlNQVHJhbnNsYXRpb24gbWVjaGFuaXNtLgotICogVGhhdCBpbmNsdWRlcyBKU1BUcmFuc2xhdGlvbkFkYXB0ZXJGYWN0b3J5LCBKU1BUcmFuc2xhdGlvbkFkYXB0ZXIsIGFuZCBKU1BUcmFuc2xhdGlvbi4KLSAqIEl0IHVzZXMgdGhlIGpzcF9pbmNsdWRlX3Rlc3QuanNwLCBiZWNhdXNlIG9mIHRoZSBtb3JlIGNvbXBsaWNhdGVkIHRyYW5zbGF0aW9uIGFuZCBvZmZzZXRzLgotICogCi0gKiBAYXV0aG9yIHBhdmVyeQotICovCi1wdWJsaWMgY2xhc3MgSlNQVHJhbnNsYXRpb25UZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBQcm9qZWN0VW56aXBVdGlsaXR5IGZQcm9qVXRpbCA9IG51bGw7Ci0JcHJpdmF0ZSBib29sZWFuIGlzU2V0dXAgPSBmYWxzZTsKLQkKLQlwcml2YXRlIEhhc2hNYXAgZlhNTEpTUFBvc2l0aW9uczsKLQotCXB1YmxpYyBKU1BUcmFuc2xhdGlvblRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJaWYgKCF0aGlzLmlzU2V0dXApIHsKLQkJCWRvU2V0dXAoKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9TZXR1cCgpIHRocm93cyBFeGNlcHRpb24gewotCQlmUHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCi0JCS8vIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQlMb2NhdGlvbiBwbGF0Zm9ybUxvY2F0aW9uID0gUGxhdGZvcm0uZ2V0SW5zdGFuY2VMb2NhdGlvbigpOwotCi0JCUZpbGUgemlwRmlsZSA9IEZpbGVVdGlsLm1ha2VGaWxlRm9yKFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUiwgImluY2x1ZGVzX3Rlc3RzLnppcCIsIFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUik7Ci0JCWZQcm9qVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBwbGF0Zm9ybUxvY2F0aW9uLmdldFVSTCgpLmdldFBhdGgoKSk7Ci0JCWZQcm9qVXRpbC5pbml0SmF2YVByb2plY3QoIklOQ0xVREVTX1RFU1RTIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFRyYW5zbGF0ZVBvc2l0aW9ucygpIHsKLQotCQlJRE9NTW9kZWwgbW9kZWwgPSBnZXRJbmNsdWRlVGVzdE1vZGVsRm9yUmVhZCgpOwotCQlKU1BUcmFuc2xhdGlvbkFkYXB0ZXIgYWRhcHRlciA9IChKU1BUcmFuc2xhdGlvbkFkYXB0ZXIpIG1vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSlNQVHJhbnNsYXRpb24uY2xhc3MpOwotCQlKU1BUcmFuc2xhdGlvbiB0cmFuc2xhdGlvbiA9IGFkYXB0ZXIuZ2V0SlNQVHJhbnNsYXRpb24oKTsKLQkJdHJ5IHsKLQkJCUhhc2hNYXAgamF2YTJqc3AgPSB0cmFuc2xhdGlvbi5nZXRKYXZhMkpzcE1hcCgpOwotCQkJYXNzZXJ0RXF1YWxzKCJqYXZhMmpzcCBtYXAgc2l6ZToiLCAxMywgamF2YTJqc3Auc2l6ZSgpKTsKLQotCQkJSGFzaE1hcCBqc3AyamF2YSA9IHRyYW5zbGF0aW9uLmdldEpzcDJKYXZhTWFwKCk7Ci0JCQlhc3NlcnRFcXVhbHMoImpzcDJqYXZhIG1hcCBzaXplOiIsIDMsIGpzcDJqYXZhLnNpemUoKSk7Ci0KLQkJCS8vIHNvbWUgdGVzdCBwb3NpdGlvbnMgKG91dC5wcmludCgiIiArIHwgKTspCi0JCQkKLQkJCS8vIHdlIG5lZWQgdG8gaWdub3JlIHRoZSBjbGFzc25hbWUgbGVuZ3RoIGluIG91ciBjb21wYXJpc29ucwotCQkJLy8gd2l0aCBqYXZhIG9mZnNldHMgdGhhdCB3ZSBnZXQgZnJvbSB0aGUgdHJhbnNsYXRpb24KLQkJCS8vIHNpbmNlIGl0IGNhbiB2YXJ5IGRlcGVuZGluZyBvbiB3b3Jrc3BhY2UgbG9jYXRpb24KLQkJCWludCBjbGFzc25hbWVMZW5ndGggPSB0cmFuc2xhdGlvbi5nZXRDbGFzc25hbWUoKS5sZW5ndGgoKTsKLQkJCQotCQkJaW50IGpzcFRlc3RQb3NpdGlvbiA9IHRyYW5zbGF0aW9uLmdldEpzcFRleHQoKS5pbmRleE9mKCI8JT0gIikgKyA0OwotCQkJaW50IGphdmFPZmZzZXQgPSB0cmFuc2xhdGlvbi5nZXRKYXZhT2Zmc2V0KGpzcFRlc3RQb3NpdGlvbikgLSBjbGFzc25hbWVMZW5ndGg7Ci0JCQlhc3NlcnRFcXVhbHMoIkpTUFRyYW5zbGF0aW9uIGphdmEgb2Zmc2V0OiIsIDEwMDksIGphdmFPZmZzZXQpOwotCQkJCi0JCQkvLyAoPCU9IHwgJT4pCi0JCQlpbnQgamF2YVRlc3RQb3N0aXRpb24gPSB0cmFuc2xhdGlvbi5nZXRKYXZhVGV4dCgpLmluZGV4T2YoIm91dC5wcmludChcIlwiK1xuICAgXG4pOyIpICsgMTQ7Ci0JCQkvLyBkb250JyBuZWVkIHRvIHdvcnJ5IGFib3V0IGNsYXNzbmFtZSBsZW5ndGggaGVyZSBiZWNhdXNlIHdlIGFyZSBjb21wYXJpbmcKLQkJCS8vIHdpdGggYSBwb3NpdGlvbiBpbiB0aGUgSlNQIGRvY3VtZW50ICh3aGljaCBkb2Vzbid0IGNvbnRhaW4gY2xhc3NuYW1lKQotCQkJaW50IGpzcE9mZnNldCA9IHRyYW5zbGF0aW9uLmdldEpzcE9mZnNldChqYXZhVGVzdFBvc3RpdGlvbik7Ci0JCQlhc3NlcnRFcXVhbHMoIkpTUFRyYW5zbGF0aW9uIGpzcCBvZmZzZXQ6IiwgNTY0LCBqc3BPZmZzZXQpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCX0KLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BUcmFuc2xhdGlvblRleHQoKSB7Ci0KLQkJSURPTU1vZGVsIG1vZGVsID0gZ2V0SW5jbHVkZVRlc3RNb2RlbEZvclJlYWQoKTsKLQkJU2Nhbm5lclVuaXRUZXN0cy52ZXJpZnlMZW5ndGhzKG1vZGVsLCBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKSk7Ci0JCUpTUFRyYW5zbGF0aW9uQWRhcHRlciBhZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKU1BUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCUpTUFRyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gYWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCQkvLyBuYW1lZCBhcyAuYmluIHNvIG5vIGxpbmUgY29udmVyc2lvbiBvY2N1cnMgKFxuIGlzIGluIHVzZSkKLQkJSW5wdXRTdHJlYW0gaW4gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oInRyYW5zbGF0ZWRfdGV4dC5iaW4iKTsKLQkJU3RyaW5nIGtub3duVHJhbnNsYXRpb25UZXh0ID0gbG9hZENoYXJzKGluKTsKLQkJdHJ5IHsKLQkJCS8vIGltcHJvdmVtZW50czogbWF5IG5lZWQgZmluZXIgdHVuZWQgdGV4dCBjb21wYXJlcyBsYXRlcgotCQkJLy8gZm9yIGRpZmZlcmVudCB0eXBlcyBvZiB0cmFuc2xhdGlvbnMgKGluY2x1ZGVzLCB4bWwtanNwIGluIHNjcmlwdCwgYXR0cmlidXRlcywgZXRjLi4uKQotCQkJU3RyaW5nIHRleHQgPSB0cmFuc2xhdGlvbi5nZXRKYXZhVGV4dCgpOwotCQkJCi0JCQlhc3NlcnROb3ROdWxsKCJKU1AgdHJhbnNsYXRpb24gdGV4dDoiLCB0ZXh0KTsKLQkJCWFzc2VydEVxdWFscygiSlNQIHRyYW5zbGF0aW9uIHRleHQgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQiLCBrbm93blRyYW5zbGF0aW9uVGV4dCwgdGV4dCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BUcmFuc2xhdGlvbkFkYXB0ZXIoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGdldEluY2x1ZGVUZXN0TW9kZWxGb3JSZWFkKCk7Ci0JCUpTUFRyYW5zbGF0aW9uQWRhcHRlciBhZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKU1BUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCUpTUFRyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gYWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCi0JCXRyeSB7Ci0JCQlJSmF2YVByb2plY3QgcHJvaiA9IGFkYXB0ZXIuZ2V0SmF2YVByb2plY3QoKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkbid0IGdldCBqYXZhIHByb2plY3Q6IiArIHByb2opOwotCi0JCQl0cmFuc2xhdGlvbiA9IGFkYXB0ZXIuZ2V0SlNQVHJhbnNsYXRpb24oKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkbid0IGdldCB0cmFuc2xhdGlvbjoiLCB0cmFuc2xhdGlvbik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIE1ha2VzIHN1cmUgYm90aCBiZWFucyBhcmUgdHJhbnNsYXRlZCBldmVuIHRob3VnaCB0aGV5IGFyZQotCSAqIHJpZ2h0IG5leHQgdG8gZWFjaCBvdGhlciB3aXRoIG5vIHNwYWNlLgotCSAqIAotCSAqIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMDMwMDQKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VXNlQmVhbk5vU3BhY2UoKSB7Ci0JCUlGaWxlIGYgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoIklOQ0xVREVTX1RFU1RTL3VzZUJlYW5fdGVzdGVyLmpzcCIpKTsKLQkJRE9NTW9kZWxGb3JKU1Agc01vZGVsID0gKERPTU1vZGVsRm9ySlNQKWdldFN0cnVjdHVyZWRNb2RlbEZvclJlYWQoZik7Ci0JCXRyeSB7Ci0JCQlzZXR1cEFkYXB0ZXJGYWN0b3J5KHNNb2RlbCk7Ci0JCQlKU1BUcmFuc2xhdGlvbkFkYXB0ZXIgYWRhcHRlciA9IChKU1BUcmFuc2xhdGlvbkFkYXB0ZXIpIHNNb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJCUpTUFRyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gYWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCQkJU3RyaW5nIGphdmFUZXh0ID0gdHJhbnNsYXRpb24uZ2V0SmF2YVRleHQoKTsKLQkJCWJvb2xlYW4gYmVhbjEgPSBqYXZhVGV4dC5pbmRleE9mKCJqYXZheC5zd2luZy5KQnV0dG9uIHggPSBudWxsOyIpICE9IC0xOwotCQkJYm9vbGVhbiBiZWFuMiA9IGphdmFUZXh0LmluZGV4T2YoImphdmF4LnN3aW5nLkpCdXR0b24geSA9IG51bGw7IikgIT0gLTE7Ci0JCQlhc3NlcnRUcnVlKGJlYW4xKTsKLQkJCWFzc2VydFRydWUoYmVhbjIpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYoc01vZGVsICE9IG51bGwpCi0JCQkJc01vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD04NjM4MgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RYTUxKU1BUcmFuc2xhdGlvblRleHQoKSB7Ci0JCUlGaWxlIGYgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoIklOQ0xVREVTX1RFU1RTL3htbC1qc3AvbW9zdC10YWdzLXhtbC1qc3AuanNwIikpOwotCQlET01Nb2RlbEZvckpTUCBzTW9kZWwgPSAoRE9NTW9kZWxGb3JKU1ApZ2V0U3RydWN0dXJlZE1vZGVsRm9yUmVhZChmKTsKLQkJdHJ5IHsKLQkJCXNldHVwQWRhcHRlckZhY3Rvcnkoc01vZGVsKTsKLQkJCUpTUFRyYW5zbGF0aW9uQWRhcHRlciBhZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgc01vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSlNQVHJhbnNsYXRpb24uY2xhc3MpOwotCQkJSlNQVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSBhZGFwdGVyLmdldEpTUFRyYW5zbGF0aW9uKCk7Ci0JCQkKLQkJCVN0cmluZyBqYXZhVGV4dCA9IHRyYW5zbGF0aW9uLmdldEphdmFUZXh0KCk7Ci0JCQkKLQkJCS8vIG5hbWVkIGFzIC5iaW4gc28gbm8gbGluZSBjb252ZXJzaW9uIG9jY3VycyAoXG4gaXMgaW4gdXNlKQotCQkJSW5wdXRTdHJlYW0gaW4gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oInRyYW5zbGF0ZWRfeG1sX2pzcC5iaW4iKTsKLQkJCVN0cmluZyBrbm93blRyYW5zbGF0aW9uVGV4dCA9IGxvYWRDaGFycyhpbik7Ci0JCQkKLQkJCWFzc2VydEVxdWFscyhrbm93blRyYW5zbGF0aW9uVGV4dCwgamF2YVRleHQpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYoc01vZGVsICE9IG51bGwpCi0JCQkJc01vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RYTUxKU1BNYXBwaW5nKCkgewotCQlJRmlsZSBmID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKCJJTkNMVURFU19URVNUUy94bWwtanNwL21vc3QtdGFncy14bWwtanNwLmpzcCIpKTsKLQkJRE9NTW9kZWxGb3JKU1Agc01vZGVsID0gKERPTU1vZGVsRm9ySlNQKWdldFN0cnVjdHVyZWRNb2RlbEZvclJlYWQoZik7Ci0JCXRyeSB7Ci0JCQlzZXR1cEFkYXB0ZXJGYWN0b3J5KHNNb2RlbCk7Ci0JCQlKU1BUcmFuc2xhdGlvbkFkYXB0ZXIgYWRhcHRlciA9IChKU1BUcmFuc2xhdGlvbkFkYXB0ZXIpIHNNb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJCUpTUFRyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gYWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCQkJCi0JCQlIYXNoTWFwIGpzcDJqYXZhID0gdHJhbnNsYXRpb24uZ2V0SnNwMkphdmFNYXAoKTsKLQkJCU9iamVjdFtdIGpzcFJhbmdlcyA9IGpzcDJqYXZhLmtleVNldCgpLnRvQXJyYXkoKTsKLQkJCVBvc2l0aW9uIGpzcFBvcyA9IG51bGw7Ci0JCQlQb3NpdGlvbiBqYXZhUG9zID0gbnVsbDsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwganNwUmFuZ2VzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJanNwUG9zID0gKFBvc2l0aW9uKWpzcFJhbmdlc1tpXTsKLQkJCQlqYXZhUG9zID0gKFBvc2l0aW9uKWpzcDJqYXZhLmdldChqc3BQb3MpOwotCQkJCS8vU3lzdGVtLm91dC5wcmludGxuKCJqc3A6IiArIHByaW50UG9zKGpzcFBvcykgKyAiID4+IGphdmE6IiArIHByaW50UG9zKGphdmFQb3MpKTsKLQkJCQljaGVja1Bvc2l0aW9uKGpzcFBvcywgamF2YVBvcyk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZihzTW9kZWwgIT0gbnVsbCkKLQkJCQlzTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFhNTEpTUENEQVRBVGV4dCgpIHsKLQkJSUZpbGUgZiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aCgiSU5DTFVERVNfVEVTVFMvY2RhdGEvY2RhdGEuanNwIikpOwotCQlET01Nb2RlbEZvckpTUCBzTW9kZWwgPSAoRE9NTW9kZWxGb3JKU1ApZ2V0U3RydWN0dXJlZE1vZGVsRm9yUmVhZChmKTsKLQkJdHJ5IHsKLQkJCXNldHVwQWRhcHRlckZhY3Rvcnkoc01vZGVsKTsKLQkJCUpTUFRyYW5zbGF0aW9uQWRhcHRlciBhZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgc01vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSlNQVHJhbnNsYXRpb24uY2xhc3MpOwotCQkJSlNQVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSBhZGFwdGVyLmdldEpTUFRyYW5zbGF0aW9uKCk7Ci0JCQkKLQkJCVN0cmluZyB0cmFuc1RleHQgPSB0cmFuc2xhdGlvbi5nZXRKYXZhVGV4dCgpOwotCQkJCi0vLwkJCSBuYW1lZCBhcyAuYmluIHNvIG5vIGxpbmUgY29udmVyc2lvbiBvY2N1cnMgKFxuIGlzIGluIHVzZSkKLQkJCUlucHV0U3RyZWFtIGluID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCJ0cmFuc2xhdGVkX3htbF9qc3BfY2RhdGEuYmluIik7Ci0JCQlTdHJpbmcga25vd25UZXh0ID0gbG9hZENoYXJzKGluKTsKLQkJCQotCQkJYXNzZXJ0RXF1YWxzKGtub3duVGV4dCwgdHJhbnNUZXh0KTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmKHNNb2RlbCAhPSBudWxsKQotCQkJCXNNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCX0KLQkKLQlwcml2YXRlIHZvaWQgY2hlY2tQb3NpdGlvbihQb3NpdGlvbiBqc3BQb3MsIFBvc2l0aW9uIGphdmFQb3MpIHsKLQkJCi0JCUhhc2hNYXAgZXhwZWN0ZWQgPSBnZXRYTUxKU1BQb3NpdGlvbnMoKTsKLQkJT2JqZWN0W10ga2V5cyA9ZXhwZWN0ZWQua2V5U2V0KCkudG9BcnJheSgpOwotCQlQb3NpdGlvbiBleHBlY3RlZEpzcFBvcz0gbnVsbDsKLQkJUG9zaXRpb24gZXhwZWN0ZWRKYXZhUG9zID0gbnVsbDsKLQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKLQkJCWV4cGVjdGVkSnNwUG9zID0gKFBvc2l0aW9uKWtleXNbaV07Ci0JCQlpZihqc3BQb3MuZXF1YWxzKGV4cGVjdGVkSnNwUG9zKSkgewotCQkJCWV4cGVjdGVkSmF2YVBvcyA9IChQb3NpdGlvbilleHBlY3RlZC5nZXQoZXhwZWN0ZWRKc3BQb3MpOwotCQkJCWZvdW5kID0gdHJ1ZTsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJleHBlY3RlZCBKU1AgcG9zaXRpb24gbWlzc2luZzogIiArIGpzcFBvcywgZm91bmQpOwotCQlhc3NlcnROb3ROdWxsKCJubyBleHBlY3RlZCBqYXZhIHBvc2l0aW9uIGZvciBqc3BQb3M6ICIgKyBwcmludFBvcyhqc3BQb3MpLCBleHBlY3RlZEphdmFQb3MpOwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgamF2YSBwb3NpdGlvbiB3YXM6IiArIHByaW50UG9zKGphdmFQb3MpICsgIiBidXQgZXhwZWN0ZWQ6IiArIHByaW50UG9zKGV4cGVjdGVkSmF2YVBvcyksIGphdmFQb3MsIGV4cGVjdGVkSmF2YVBvcyk7Ci0JfQotCXByaXZhdGUgU3RyaW5nIHByaW50UG9zKFBvc2l0aW9uIHBvcykgewotCQlyZXR1cm4gcG9zICE9IG51bGwgPyAiWyIgKyBwb3Mub2Zmc2V0ICsiOiIrIHBvcy5sZW5ndGggKyAiXSIgOiAibnVsbCI7Ci0JfQotCXByaXZhdGUgSGFzaE1hcCBnZXRYTUxKU1BQb3NpdGlvbnMoKSB7Ci0JCWlmKGZYTUxKU1BQb3NpdGlvbnMgPT0gbnVsbCkgewotCQkJZlhNTEpTUFBvc2l0aW9ucyA9IG5ldyBIYXNoTWFwKCk7Ci0JCQlmWE1MSlNQUG9zaXRpb25zLnB1dChuZXcgUG9zaXRpb24oODgyLDUyKSwgbmV3IFBvc2l0aW9uKDkyMCwzMSkpOwotCQkJZlhNTEpTUFBvc2l0aW9ucy5wdXQobmV3IFBvc2l0aW9uKDk2MSw3KSwgbmV3IFBvc2l0aW9uKDk1Miw3KSk7Ci0JCQlmWE1MSlNQUG9zaXRpb25zLnB1dChuZXcgUG9zaXRpb24oMTAxOCwxNCksIG5ldyBQb3NpdGlvbig4OSwxNCkpOwotCQkJZlhNTEpTUFBvc2l0aW9ucy5wdXQobmV3IFBvc2l0aW9uKDY0MCwyKSwgbmV3IFBvc2l0aW9uKDg4OCwyKSk7Ci0JCQlmWE1MSlNQUG9zaXRpb25zLnB1dChuZXcgUG9zaXRpb24oNDA2LDI0KSwgbmV3IFBvc2l0aW9uKDc1OSwyNCkpOwotCQkJZlhNTEpTUFBvc2l0aW9ucy5wdXQobmV3IFBvc2l0aW9uKDY4NSwxOSksIG5ldyBQb3NpdGlvbig4OTcsMTkpKTsKLQkJCWZYTUxKU1BQb3NpdGlvbnMucHV0KG5ldyBQb3NpdGlvbig2NTAsMjYpLCBuZXcgUG9zaXRpb24oODYxLDI2KSk7Ci0JCQlmWE1MSlNQUG9zaXRpb25zLnB1dChuZXcgUG9zaXRpb24oNTYzLDkpLCBuZXcgUG9zaXRpb24oODQ4LDkpKTsKLQkJCWZYTUxKU1BQb3NpdGlvbnMucHV0KG5ldyBQb3NpdGlvbig0NjEsMjMpLCBuZXcgUG9zaXRpb24oNzg0LDIzKSk7Ci0JCQlmWE1MSlNQUG9zaXRpb25zLnB1dChuZXcgUG9zaXRpb24oNTIyLDgpLCBuZXcgUG9zaXRpb24oODIyLDgpKTsKLQkJCWZYTUxKU1BQb3NpdGlvbnMucHV0KG5ldyBQb3NpdGlvbigzMjMsNDQpLCBuZXcgUG9zaXRpb24oMjc0LDQ1KSk7Ci0JCQlmWE1MSlNQUG9zaXRpb25zLnB1dChuZXcgUG9zaXRpb24oMjQ1LDQzKSwgbmV3IFBvc2l0aW9uKDIyOSw0NCkpOwotCQl9Ci0JCXJldHVybiBmWE1MSlNQUG9zaXRpb25zOwotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgbG9hZENoYXJzKElucHV0U3RyZWFtIGlucHV0KSB7Ci0KLQkJU3RyaW5nQnVmZmVyIHMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCXRyeSB7Ci0JCQlpbnQgYyA9IC0xOwotCQkJd2hpbGUgKChjID0gaW5wdXQucmVhZCgpKSA+PSAwKSB7Ci0JCQkJaWYgKGMgPiAyNTUpCi0JCQkJCWJyZWFrOwotCQkJCXMuYXBwZW5kKChjaGFyKSBjKTsKLQkJCX0KLQkJCWlucHV0LmNsb3NlKCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQW4gSS9PIGVycm9yIG9jY3VyZWQgd2hpbGUgbG9hZGluZyA6Iik7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0JCX0KLQkJcmV0dXJuIHMudG9TdHJpbmcoKTsKLQl9Ci0JCi0JLyoqCi0JICogYWRkIHRoZSBmYWN0b3J5IGZvciBKU1BUcmFuc2xhdGlvbkFkYXB0ZXIgaGVyZQotCSAqIEBwYXJhbSBzbQotCSAqLwotCXByaXZhdGUgdm9pZCBzZXR1cEFkYXB0ZXJGYWN0b3J5KElTdHJ1Y3R1cmVkTW9kZWwgc20pIHsKLQkJSlNQVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeSBmYWN0b3J5ID0gbmV3IEpTUFRyYW5zbGF0aW9uQWRhcHRlckZhY3RvcnkoKTsKLQkJc20uZ2V0RmFjdG9yeVJlZ2lzdHJ5KCkuYWRkRmFjdG9yeShmYWN0b3J5KTsKLQl9Ci0KLQkvKioKLQkgKiBJTVBPUlRBTlQgLSByZWxlYXNlIG1vZGVsIChtb2RlbC5yZWxlYXNlRnJvbVJlYWQoKSkgYWZ0ZXIgdXNlCi0JICogQHBhcmFtIGZpbGUKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBJU3RydWN0dXJlZE1vZGVsIGdldFN0cnVjdHVyZWRNb2RlbEZvclJlYWQoSUZpbGUgZmlsZSkgewotCQl0cnkgewotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQkJcmV0dXJuIG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvclJlYWQoZmlsZSk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGlvZXgpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiY291bGRuJ3Qgb3BlbiBmaWxlID4gIiArIGZpbGUpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJpdmF0ZSBJRE9NTW9kZWwgZ2V0SW5jbHVkZVRlc3RNb2RlbEZvclJlYWQoKSB7Ci0KLQkJSVBhdGgganNwVGVzdEZpbGVQYXRoID0gbmV3IFBhdGgoIklOQ0xVREVTX1RFU1RTL2pzcF9pbmNsdWRlX3Rlc3QuanNwIik7Ci0JCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUoanNwVGVzdEZpbGVQYXRoKTsKLQkJSURPTU1vZGVsIHhtbE1vZGVsID0gKElET01Nb2RlbCkgZ2V0U3RydWN0dXJlZE1vZGVsRm9yUmVhZChmaWxlKTsKLQkJc2V0dXBBZGFwdGVyRmFjdG9yeSh4bWxNb2RlbCk7Ci0JCXJldHVybiB4bWxNb2RlbDsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L3Rlc3RmaWxlcy9qc3BJbkphdmFzY3JpcHQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L3Rlc3RmaWxlcy9qc3BJbkphdmFzY3JpcHQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGM3YzAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90ZXN0ZmlsZXMvanNwSW5KYXZhc2NyaXB0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSINCi1wYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiDQotJT4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4NCi08VElUTEU+cG1yLmpzcDwvVElUTEU+DQotDQotPCUhU3RyaW5nIHRlc3RKc3BTdHJpbmcgPSAidGVzdEpzcFN0cmluZyI7ICU+DQotPHNjcmlwdD4gDQotDQotdmFyIHRlc3QgPSA8JT0gdGVzdEpzcFN0cmluZyAlPjsNCi0NCi08L3NjcmlwdD4NCi0NCi0NCi0NCi08L0hFQUQ+DQotPEJPRFk+DQotPCUgICU+DQotPFA+UGxhY2UganNwSW5KYXZhc2NyaXB0LmpzcCdzIGNvbnRlbnQgaGVyZS48L1A+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvdHJhbnNsYXRlZF90ZXh0LmJpbiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90cmFuc2xhdGVkX3RleHQuYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTc2ZTQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90cmFuc2xhdGVkX3RleHQuYmluCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotaW1wb3J0IGphdmF4LnNlcnZsZXQuKjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuKjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0LmpzcC4qOwotCi1wdWJsaWMgY2xhc3MgX18yRl9JTkNMVURFU19URVNUU18yRl9qc3BfaW5jbHVkZV90ZXN0XzJFX2pzcCBleHRlbmRzIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldHsKLSBTdHJpbmcgYXJnaCA9ICJhcmdoIjsgCi0KLSBwcm90ZWN0ZWQgU3RyaW5nIHdpdGhfc3BhY2UgPSAid2l0aHNwYWNlIjsKLQotIHB1YmxpYyBTdHJpbmcgZ2xvYmFsSW5jbHVkZWRTdHJpbmcgPSAiaW5jbHVkZWQiOwotCi1wdWJsaWMgdm9pZCBfanNwU2VydmljZShqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQotCQl0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgamF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKLWphdmF4LnNlcnZsZXQuanNwLlBhZ2VDb250ZXh0IHBhZ2VDb250ZXh0ID0gbnVsbDsKLWphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbiBzZXNzaW9uID0gbnVsbDsKLWphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQgYXBwbGljYXRpb24gPSBudWxsOwotamF2YXguc2VydmxldC5TZXJ2bGV0Q29uZmlnIGNvbmZpZyA9IG51bGw7Ci1qYXZheC5zZXJ2bGV0LmpzcC5Kc3BXcml0ZXIgb3V0ID0gbnVsbDsKLU9iamVjdCBwYWdlID0gbnVsbDsKLQotdHJ5IHsKLSBpbnQgaW5jbHVkZV9pbmNsdWRlX2ludCA9IDU7IAotamF2YXguc3dpbmcuSkJ1dHRvbiBpbmNsdWRlc1VzZUJlYW4gPSBuZXcgamF2YXguc3dpbmcuSkJ1dHRvbigpOwoteyAvLyA8Z2lmdHM6Z2lmdD4KLX0gLy8gPC9naWZ0czpnaWZ0PgotIFN0cmluZyBsb2NhbEluY2x1ZGVkU3RyaW5nID0gZ2xvYmFsSW5jbHVkZWRTdHJpbmc7Ci1mb3IoaW50IGk9MDsgaTw1OyBpKyspIHsKLX0KLWphdmF4LnN3aW5nLkpCdXR0b24gQkVBTl9pbmNsdWRlZEJlYW4gPSBuZXcgamF2YXguc3dpbmcuSkJ1dHRvbigpOwotb3V0LnByaW50KCIiKwotaQotKTsKLW91dC5wcmludCgiIisKLSAgIAotKTsKLSB9IGNhdGNoIChqYXZhLmxhbmcuRXhjZXB0aW9uIGUpIHt9IAotfX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvdHJhbnNsYXRlZF94bWxfanNwLmJpbiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90cmFuc2xhdGVkX3htbF9qc3AuYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTQ2MjMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90cmFuc2xhdGVkX3htbF9qc3AuYmluCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotaW1wb3J0IGphdmF4LnNlcnZsZXQuKjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuKjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0LmpzcC4qOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1wdWJsaWMgY2xhc3MgX18yRl9JTkNMVURFU19URVNUU18yRl94bWxfMkRfanNwXzJGX21vc3RfMkRfdGFnc18yRF94bWxfMkRfanNwXzJFX2pzcCBleHRlbmRzIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldHsKLXB1YmxpYyBTdHJpbmcgbXlGdW5jKCkgeyByZXR1cm4gIm15ZnVuYyI7IH0KLQotcHVibGljIFN0cmluZyBteUZ1bmMyKCkgeyByZXR1cm4gIm15ZnVuYyI7IH0KLQotcHVibGljIHZvaWQgX2pzcFNlcnZpY2UoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKLQkJdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sIGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7Ci1qYXZheC5zZXJ2bGV0LmpzcC5QYWdlQ29udGV4dCBwYWdlQ29udGV4dCA9IG51bGw7Ci1qYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb24gc2Vzc2lvbiA9IG51bGw7Ci1qYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0IGFwcGxpY2F0aW9uID0gbnVsbDsKLWphdmF4LnNlcnZsZXQuU2VydmxldENvbmZpZyBjb25maWcgPSBudWxsOwotamF2YXguc2VydmxldC5qc3AuSnNwV3JpdGVyIG91dCA9IG51bGw7Ci1PYmplY3QgcGFnZSA9IG51bGw7Ci0KLXRyeSB7Ci1TdHJpbmcgY29uc2VjMSA9ICJ0ZXN0IjsKLVN0cmluZyBjb25zZWMyID0gInR3byI7Ci1vdXQucHJpbnQoIiIrCi1teUZ1bmMoKQotKTsKLW91dC5wcmludCgiIisKLW15RnVuYzIoKQotKTsKLWphdmF4LnN3aW5nLkFic3RyYWN0QnV0dG9uIGpiID0gbmV3IGphdmF4LnN3aW5nLkpCdXR0b24oKTsKLVN0cmluZyBpbmNsdWRlZFN0cmluZyA9ICJpbmNkIjsKLSAgIGpiLiAKLSB9IGNhdGNoIChqYXZhLmxhbmcuRXhjZXB0aW9uIGUpIHt9IAotfX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvdHJhbnNsYXRlZF94bWxfanNwX2NkYXRhLmJpbiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90cmFuc2xhdGVkX3htbF9qc3BfY2RhdGEuYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDQ1YWNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90cmFuc2xhdGVkX3htbF9qc3BfY2RhdGEuYmluCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotaW1wb3J0IGphdmF4LnNlcnZsZXQuKjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuKjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0LmpzcC4qOwotCi1wdWJsaWMgY2xhc3MgX18yRl9JTkNMVURFU19URVNUU18yRl9jZGF0YV8yRl9jZGF0YV8yRV9qc3AgZXh0ZW5kcyBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXR7Ci1wdWJsaWMgdm9pZCBfanNwU2VydmljZShqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQotCQl0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgamF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKLWphdmF4LnNlcnZsZXQuanNwLlBhZ2VDb250ZXh0IHBhZ2VDb250ZXh0ID0gbnVsbDsKLWphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbiBzZXNzaW9uID0gbnVsbDsKLWphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQgYXBwbGljYXRpb24gPSBudWxsOwotamF2YXguc2VydmxldC5TZXJ2bGV0Q29uZmlnIGNvbmZpZyA9IG51bGw7Ci1qYXZheC5zZXJ2bGV0LmpzcC5Kc3BXcml0ZXIgb3V0ID0gbnVsbDsKLU9iamVjdCBwYWdlID0gbnVsbDsKLQotdHJ5IHsKLQotaW50IGEgPSAxOwotaWYgKGEgCi08Ci0gMikgewotIG91dC5wcmludGxuKCJ4Iik7Ci19IAotICAgCi1TdHJpbmcgdGVzdCA9ICIiOwotCi0KLSAgIAotaW50IGEgPSAxOwotaWYgKGEgPCAyKSB7ICAgCi0gb3V0LnByaW50bG4oIngiKTsKLX0KLQotCi0gCi0gdGVzdC50b1VwcGVyQ2FzZSgpOwotIH0gY2F0Y2ggKGphdmEubGFuZy5FeGNlcHRpb24gZSkge30gCi19fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGRlc2NyaXB0aW9uL1Rlc3RDb250ZW50RGVzY3JpcHRpb24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGRlc2NyaXB0aW9uL1Rlc3RDb250ZW50RGVzY3JpcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ0ZDFiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRkZXNjcmlwdGlvbi9UZXN0Q29udGVudERlc2NyaXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmNvbnRlbnRkZXNjcmlwdGlvbjsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLkZpbGVCdWZmZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUXVhbGlmaWVkTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5JQ29udGVudERlc2NyaXB0aW9uRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuZG9jdW1lbnQuVW56aXBwZWRQcm9qZWN0VGVzdGVyOwotCi0vKioKLSAqIFRlc3RzIHRoYXQgb3VyIENvbnRlbnREZXNjcmliZXJGb3JKU1AgaXMgd29ya2luZyBhcyBleHBlY3RlZCwKLSAqIFdlIGNoZWNrIHRoYXQgdGhlIGNvbnRlbnQgZGVzY3JpcHRpb24gZm9yIGEgZ2l2ZW4gaW5wdXQgc3RyZWFtIGhhcyBhbGwKLSAqIG9mIHRoZSBhcHByb3ByaWF0ZSBwcm9wZXJ0aWVzLgotICogKHRocm91Z2ggdGhlIFBsYXRmb3JtIGNvbnRlbnQgdHlwZSBmcmFtZXdvcmspCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0Q29udGVudERlc2NyaXB0aW9uIGV4dGVuZHMgVW56aXBwZWRQcm9qZWN0VGVzdGVyIHsKLQotCXB1YmxpYyB2b2lkIHRlc3ROb1hNTFBJV2l0aEpTUFN5bnRheCgpIHsKLQkJSGFzaE1hcCBleHBlY3RlZFByb3BlcnRpZXMgPSBuZXcgSGFzaE1hcCgpOwotCQlleHBlY3RlZFByb3BlcnRpZXMucHV0KElDb250ZW50RGVzY3JpcHRpb25Gb3JKU1AuQ09OVEVOVF9UWVBFX0FUVFJJQlVURSwgInRleHQveG1sIik7Ci0JCWV4cGVjdGVkUHJvcGVydGllcy5wdXQoSUNvbnRlbnREZXNjcmlwdGlvbi5DSEFSU0VULCAiVVRGLTgiKTsKLQkJZG9UZXN0Q29udGVudERlc2NyaXB0aW9uKCIvY29udGVudC1kZXNjcmlwdGlvbi9QdXJjaGFzZU9yZGVyLW5vLVhNTFBJLWpzcC1zeW50YXguanNwIiwgZXhwZWN0ZWRQcm9wZXJ0aWVzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFdpdGhYTUxQSVdpdGhKU1BTeW50YXgoKSB7Ci0JCUhhc2hNYXAgZXhwZWN0ZWRQcm9wZXJ0aWVzID0gbmV3IEhhc2hNYXAoKTsKLQkJZXhwZWN0ZWRQcm9wZXJ0aWVzLnB1dChJQ29udGVudERlc2NyaXB0aW9uRm9ySlNQLkNPTlRFTlRfVFlQRV9BVFRSSUJVVEUsICJ0ZXh0L3htbCIpOwotCQlleHBlY3RlZFByb3BlcnRpZXMucHV0KElDb250ZW50RGVzY3JpcHRpb24uQ0hBUlNFVCwgIlVURi04Iik7Ci0JCWRvVGVzdENvbnRlbnREZXNjcmlwdGlvbigiL2NvbnRlbnQtZGVzY3JpcHRpb24vUHVyY2hhc2VPcmRlci13aXRoLVhNTFBJLWpzcC1zeW50YXguanNwIiwgZXhwZWN0ZWRQcm9wZXJ0aWVzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFdpdGhYTUxQSVdpdGhYTUxTeW50YXgoKSB7Ci0JCUhhc2hNYXAgZXhwZWN0ZWRQcm9wZXJ0aWVzID0gbmV3IEhhc2hNYXAoKTsKLQkJZXhwZWN0ZWRQcm9wZXJ0aWVzLnB1dChJQ29udGVudERlc2NyaXB0aW9uRm9ySlNQLkNPTlRFTlRfVFlQRV9BVFRSSUJVVEUsICJ0ZXh0L3htbCIpOwotCQlleHBlY3RlZFByb3BlcnRpZXMucHV0KElDb250ZW50RGVzY3JpcHRpb24uQ0hBUlNFVCwgIlVURi04Iik7Ci0JCWRvVGVzdENvbnRlbnREZXNjcmlwdGlvbigiL2NvbnRlbnQtZGVzY3JpcHRpb24vUHVyY2hhc2VPcmRlci13aXRoLVhNTFBJLXhtbC1zeW50YXguanNwIiwgZXhwZWN0ZWRQcm9wZXJ0aWVzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEpTUFdpdGhIVE1MT3V0cHV0KCkgewotCQlIYXNoTWFwIGV4cGVjdGVkUHJvcGVydGllcyA9IG5ldyBIYXNoTWFwKCk7Ci0JCWV4cGVjdGVkUHJvcGVydGllcy5wdXQoSUNvbnRlbnREZXNjcmlwdGlvbkZvckpTUC5DT05URU5UX1RZUEVfQVRUUklCVVRFLCAidGV4dC9odG1sIik7Ci0JCWRvVGVzdENvbnRlbnREZXNjcmlwdGlvbigiL2NvbnRlbnQtZGVzY3JpcHRpb24vaHRtbC5qc3AiLCBleHBlY3RlZFByb3BlcnRpZXMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SlNQV2l0aFhIVE1MT3V0cHV0KCkgewotCQlIYXNoTWFwIGV4cGVjdGVkUHJvcGVydGllcyA9IG5ldyBIYXNoTWFwKCk7Ci0JCWV4cGVjdGVkUHJvcGVydGllcy5wdXQoSUNvbnRlbnREZXNjcmlwdGlvbkZvckpTUC5DT05URU5UX1RZUEVfQVRUUklCVVRFLCAidGV4dC94aHRtbCIpOwotCQlkb1Rlc3RDb250ZW50RGVzY3JpcHRpb24oIi9jb250ZW50LWRlc2NyaXB0aW9uL3hodG1sLmpzcCIsIGV4cGVjdGVkUHJvcGVydGllcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RKU1BXaXRoWE1MT3V0cHV0KCkgewotCQlIYXNoTWFwIGV4cGVjdGVkUHJvcGVydGllcyA9IG5ldyBIYXNoTWFwKCk7Ci0JCWV4cGVjdGVkUHJvcGVydGllcy5wdXQoSUNvbnRlbnREZXNjcmlwdGlvbkZvckpTUC5DT05URU5UX1RZUEVfQVRUUklCVVRFLCAidGV4dC94bWwiKTsKLQkJZG9UZXN0Q29udGVudERlc2NyaXB0aW9uKCIvY29udGVudC1kZXNjcmlwdGlvbi94bWwuanNwIiwgZXhwZWN0ZWRQcm9wZXJ0aWVzKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdENvbnRlbnREZXNjcmlwdGlvbihTdHJpbmcgZmlsZVBhdGgsIEhhc2hNYXAgZXhwZWN0ZWRQcm9wZXJ0aWVzKSB7Ci0JCUlDb250ZW50RGVzY3JpcHRpb24gZGVzYyA9IGdldENvbnRlbnREZXNjcmlwdGlvbihmaWxlUGF0aCk7Ci0JCWFzc2VydE5vdE51bGwoImNvdWxkbid0IGdldCBJQ29udGVudERlc2NyaXB0aW9uIGZvciBmaWxlOlsiICsgZmlsZVBhdGggKyAiXSIsIGRlc2MpOwotCQlPYmplY3RbXSBrZXlzID0gZXhwZWN0ZWRQcm9wZXJ0aWVzLmtleVNldCgpLnRvQXJyYXkoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7Ci0JCQkKLQkJCU9iamVjdCBleHBlY3RlZCA9IGV4cGVjdGVkUHJvcGVydGllcy5nZXQoa2V5c1tpXSk7Ci0JCQlPYmplY3QgZGV0ZWN0ZWQgPSBkZXNjLmdldFByb3BlcnR5KCAoUXVhbGlmaWVkTmFtZSlrZXlzW2ldICk7Ci0JCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgcHJvcGVydHkgdmFsdWUiLCBleHBlY3RlZCwgZGV0ZWN0ZWQpOwotCQl9Ci0JfQotCQotCXByaXZhdGUgSUNvbnRlbnREZXNjcmlwdGlvbiBnZXRDb250ZW50RGVzY3JpcHRpb24oU3RyaW5nIGZpbGVQYXRoKSB7Ci0JCWlmKGZpbGVQYXRoID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkKLQkJSW5wdXRTdHJlYW0gaW4gPSBudWxsOwotCQl0cnkgewotCQkJLy8gd29ya3NwYWNlIGZpbGUKLQkJCUlGaWxlIHdzRmlsZSA9IEZpbGVCdWZmZXJzLmdldFdvcmtzcGFjZUZpbGVBdExvY2F0aW9uKG5ldyBQYXRoKGZpbGVQYXRoKSk7Ci0JCQlpZih3c0ZpbGUgIT0gbnVsbCAmJiB3c0ZpbGUuZXhpc3RzKCkpIHsKLQkJCQlpbiA9IHdzRmlsZS5nZXRDb250ZW50cygpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLy8gZXh0ZXJuYWwgZmlsZQotCQkJCUZpbGUgc0ZpbGUgPSBGaWxlQnVmZmVycy5nZXRTeXN0ZW1GaWxlQXRMb2NhdGlvbihuZXcgUGF0aChmaWxlUGF0aCkpOwotCQkJCWlmKHNGaWxlICE9bnVsbCAmJiBzRmlsZS5leGlzdHMoKSkKLQkJCQkJaW4gPSBuZXcgRmlsZUlucHV0U3RyZWFtKHNGaWxlKTsKLQkJCX0KLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQlMb2dnZXIubG9nRXhjZXB0aW9uKGUpOwotCQl9Ci0JCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgewotCQkJTG9nZ2VyLmxvZ0V4Y2VwdGlvbihlKTsKLQkJfQotCQkKLQkJYXNzZXJ0Tm90TnVsbChpbik7Ci0JCQotCQlyZXR1cm4gZ2V0Q29udGVudERlc2NyaXB0aW9uKGluKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBjb250ZW50IGRlc2NyaXB0aW9uIGZvciBhbiBpbnB1dCBzdHJlYW0KLQkgKiBBc3N1bWVzIGl0J3MgSlNQIGNvbnRlbnQuCi0JICogQ2xvc2VzIHRoZSBpbnB1dCBzdHJlYW0gd2hlbiBmaW5pc2hlZC4KLQkgKiAKLQkgKiBAcGFyYW0gaW4KLQkgKiBAcmV0dXJuIHRoZSBJQ29udGVudERlc2NyaXB0aW9uIGZvciBpbgotCSAqLwotCXByaXZhdGUgSUNvbnRlbnREZXNjcmlwdGlvbiBnZXRDb250ZW50RGVzY3JpcHRpb24oSW5wdXRTdHJlYW0gaW4pIHsKLQkJCi0JCWlmKGluID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkJCi0JCUlDb250ZW50RGVzY3JpcHRpb24gZGVzYyA9IG51bGw7Ci0JCXRyeSB7Ci0JCQkKLQkJCUlDb250ZW50VHlwZSBjb250ZW50VHlwZUpTUCA9IFBsYXRmb3JtLmdldENvbnRlbnRUeXBlTWFuYWdlcigpLmdldENvbnRlbnRUeXBlKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQkJZGVzYyA9IGNvbnRlbnRUeXBlSlNQLmdldERlc2NyaXB0aW9uRm9yKGluLCBJQ29udGVudERlc2NyaXB0aW9uLkFMTCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCUxvZ2dlci5sb2dFeGNlcHRpb24oZSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZihpbiAhPSBudWxsKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJaW4uY2xvc2UoKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQkJTG9nZ2VyLmxvZ0V4Y2VwdGlvbihlKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGRlc2M7Ci0JfQotCQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvZG9jdW1lbnQvRmlsZUJ1ZmZlckRvY3VtZW50VGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2RvY3VtZW50L0ZpbGVCdWZmZXJEb2N1bWVudFRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGU4NjZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvZG9jdW1lbnQvRmlsZUJ1ZmZlckRvY3VtZW50VGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmRvY3VtZW50OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuRmlsZUJ1ZmZlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5JVGV4dEZpbGVCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5JVGV4dEZpbGVCdWZmZXJNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudEV4dGVuc2lvbjM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwudGV4dC5TdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC50ZXh0LkJhc2ljU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC51dGlsLlV0aWxpdGllczsKLQotCi1wdWJsaWMgY2xhc3MgRmlsZUJ1ZmZlckRvY3VtZW50VGVzdGVyIGV4dGVuZHMgVW56aXBwZWRQcm9qZWN0VGVzdGVyIHsKLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RDcmVhdGUoU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZERvY3VtZW50Q2xhc3MsIENsYXNzIGV4cGVjdGVkUGFydGlvbmVyKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWFzc2VydE5vdE51bGwoIlRlc3QgQ2FzZSBpbiBlcnJvci4gQ291bGQgbm90IGZpbmQgZmlsZSAiICsgZmlsZVBhdGgsIGZpbGUpOwotCQlJUGF0aCBsb2NhdGlvblBhdGggPSBmaWxlLmdldExvY2F0aW9uKCk7Ci0JCUlUZXh0RmlsZUJ1ZmZlck1hbmFnZXIgYnVmZmVyTWFuYWdlciA9IEZpbGVCdWZmZXJzLmdldFRleHRGaWxlQnVmZmVyTWFuYWdlcigpOwotCQlidWZmZXJNYW5hZ2VyLmNvbm5lY3QobG9jYXRpb25QYXRoLCBudWxsKTsKLQkJSVRleHRGaWxlQnVmZmVyIGJ1ZmZlciA9IGJ1ZmZlck1hbmFnZXIuZ2V0VGV4dEZpbGVCdWZmZXIobG9jYXRpb25QYXRoKTsKLQkJSURvY3VtZW50IGRvY3VtZW50ID0gYnVmZmVyLmdldERvY3VtZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoZG9jdW1lbnQpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBjbGFzcyBvZiBkb2N1bWVudCIsIGV4cGVjdGVkRG9jdW1lbnRDbGFzcy5pc0luc3RhbmNlKGRvY3VtZW50KSk7Ci0JCUlEb2N1bWVudFBhcnRpdGlvbmVyIHNldHVwUGFydGl0aW9uZXIgPSBudWxsOwotCQlpZiAoVXRpbGl0aWVzLmNvbnRhaW5zKGV4cGVjdGVkRG9jdW1lbnRDbGFzcy5nZXRJbnRlcmZhY2VzKCksIElEb2N1bWVudEV4dGVuc2lvbjMuY2xhc3MpKSB7Ci0JCQlzZXR1cFBhcnRpdGlvbmVyID0gKChJRG9jdW1lbnRFeHRlbnNpb24zKSBkb2N1bWVudCkuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcihJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HKTsKLQkJfQotCQllbHNlIHsKLQkJCXNldHVwUGFydGl0aW9uZXIgPSBkb2N1bWVudC5nZXREb2N1bWVudFBhcnRpdGlvbmVyKCk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgcGFydGl0aW9uZXIgaW4gZG9jdW1lbnQuIiwgZXhwZWN0ZWRQYXJ0aW9uZXIuaXNJbnN0YW5jZShzZXR1cFBhcnRpdGlvbmVyKSk7Ci0JCWJ1ZmZlck1hbmFnZXIuZGlzY29ubmVjdChsb2NhdGlvblBhdGgsIG51bGwpOwotCi0vLwkJZG9UZXN0Q3JlYXRlV2l0aEZhY2FkZShmaWxlLCBleHBlY3RlZERvY3VtZW50Q2xhc3MsIGV4cGVjdGVkUGFydGlvbmVyKTsKLQkJIAotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBmaWxlCi0JICogQHBhcmFtIGV4cGVjdGVkRG9jdW1lbnRDbGFzcwotCSAqIEBwYXJhbSBleHBlY3RlZFBhcnRpb25lcgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKi8KLS8vCXByaXZhdGUgdm9pZCBkb1Rlc3RDcmVhdGVXaXRoRmFjYWRlKElGaWxlIGZpbGUsIENsYXNzIGV4cGVjdGVkRG9jdW1lbnRDbGFzcywgQ2xhc3MgZXhwZWN0ZWRQYXJ0aW9uZXIpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0vLwkJRG9jdW1lbnRMb2FkZXJGb3JYTUwgZG9jdW1lbnRMb2FkZXJGb3JYTUwgPSBuZXcgRG9jdW1lbnRMb2FkZXJGb3JYTUwoKTsKLS8vCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSBkb2N1bWVudExvYWRlckZvclhNTC5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoZmlsZSwgbnVsbCk7Ci0vLwkJYXNzZXJ0Tm90TnVsbChkb2N1bWVudCk7Ci0vLwl9Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0Q3JlYXRlQ3JlYXRlRW1wdHkoU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZERvY3VtZW50Q2xhc3MsIENsYXNzIGV4cGVjdGVkUGFydGlvbmVyKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJYXNzZXJ0VHJ1ZSgiVGVzdCBDYXNlIGluIGVycm9yLiBOb24tZXhpc3RlbnQgZmlsZSBleGlzdGVkISAiICsgZmlsZVBhdGgsIGZpbGUgPT0gbnVsbCk7Ci0JCUlQYXRoIGxvY2F0aW9uUGF0aCA9IG5ldyBQYXRoKGZpbGVQYXRoKTsKLQkJSUZpbGUgbm9uRXhpc3RpbmdGaWxlID0gZlRlc3RQcm9qZWN0LmdldEZpbGUobG9jYXRpb25QYXRoKTsKLQkJbG9jYXRpb25QYXRoID0gbm9uRXhpc3RpbmdGaWxlLmdldEZ1bGxQYXRoKCk7Ci0JCUlUZXh0RmlsZUJ1ZmZlck1hbmFnZXIgYnVmZmVyTWFuYWdlciA9IEZpbGVCdWZmZXJzLmdldFRleHRGaWxlQnVmZmVyTWFuYWdlcigpOwotCQkvLyBjYW4gbm90ICJjb25uZWN0IiB0byBub24tZXhpc3RhbnQgbG9jYXRpb24KLQkJLy9idWZmZXJNYW5hZ2VyLmNvbm5lY3QobG9jYXRpb25QYXRoLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywKLQkJLy8gU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JCUlEb2N1bWVudCBkb2N1bWVudCA9IGJ1ZmZlck1hbmFnZXIuY3JlYXRlRW1wdHlEb2N1bWVudChsb2NhdGlvblBhdGgpOwotCQlhc3NlcnROb3ROdWxsKGRvY3VtZW50KTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgY2xhc3Mgb2YgZG9jdW1lbnQiLCBleHBlY3RlZERvY3VtZW50Q2xhc3MuaXNJbnN0YW5jZShkb2N1bWVudCkpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBwYXJ0aXRpb25lciBpbiBkb2N1bWVudCIsIGV4cGVjdGVkUGFydGlvbmVyLmlzSW5zdGFuY2UoZG9jdW1lbnQuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcigpKSk7Ci0JCWJ1ZmZlck1hbmFnZXIuZGlzY29ubmVjdChsb2NhdGlvblBhdGgsIG51bGwpOwotCi0JfQotCi0vKgotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvRW1wdHlGaWxlLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9ldWNqcC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54c2wiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvTm9FbmNvZGluZy54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvTm9ybWFsTm9uRGVmYXVsdC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvc2hpZnRqaXMueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTExKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RFeHRyYUp1bmsueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RFeHRyYVZhbGlkU3R1ZmYueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQyLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMy54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDQueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RNdWx0aUxpbmUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb0VuY29kaW5nVmFsdWUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb3JtYWxDYXNlLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsQXRGaXJzdC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbEluTGFyZ2VGaWxlLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0VVRGMTYueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL1VURjE2TEVBdFN0YXJ0T2ZMYXJnZUZpbGUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL1VURjhXaXRoM0J5dGVCT00ueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb25FeGlzdGVudFhNTCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlQ3JlYXRlRW1wdHkoInRlc3RmaWxlcy94bWwvdGVzdG5vbmV4aXN0ZW50LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlQ2FzZSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0Tm9ybWFsQ2FzZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvY3NzL2VtcHR5RmlsZS5jc3MiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckNTUy5jbGFzcyk7Ci0JfQotCi0qLwotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9NYWxmb3JtZWROb0VuY29kaW5nWFNMLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3RCcm9rZW5MaW5lLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmcuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZ1dpdGhKdW5rLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYUp1bmsuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdEV4dHJhVmFsaWRTdHVmZi5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQyLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb0VuY29kaW5nVmFsdWUuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlQXRGaXJzdC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlSW5MYXJnZUZpbGUuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdE5vcm1hbENhc2UuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdFVURjE2LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL1VURjhXaXRoM0J5dGVCT00uanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvV2VsbEZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybUIuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjQyOTMvdGVzdHNoaWZ0amlzWG1sU3ludGF4LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjI5NjY3L2F1ZGkuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9ub0VuY29kaW5nLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL05vRW5jb2RpbmdpblhNTERlY2wuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZU5vRW5jb2RpbmcuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdDaGFyc2V0LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nWE1MU3ludGF4LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHQuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL05vcm1hbFBhZ2VDYXNlTm9uRGVmYXVsdC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9kb2N1bWVudC9VbnppcHBlZFByb2plY3RUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvZG9jdW1lbnQvVW56aXBwZWRQcm9qZWN0VGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ZjFmZGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9kb2N1bWVudC9VbnppcHBlZFByb2plY3RUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuZG9jdW1lbnQ7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuSlNQVUlUZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLQotLyoqCi0gKiBAYXV0aG9yIHBhdmVyeQotICovCi1wdWJsaWMgY2xhc3MgVW56aXBwZWRQcm9qZWN0VGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJvdGVjdGVkIHN0YXRpYyBJUHJvamVjdCBmVGVzdFByb2plY3Q7Ci0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBmVGVzdFByb2plY3RJbml0aWFsaXplZDsKLQlwcml2YXRlIHN0YXRpYyBpbnQgblNldHVwcyA9IDA7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfUFJPSkVDVF9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5uZXd0ZXN0cyI7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQluU2V0dXBzKys7Ci0JCWlmICghZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQpIHsKLQkJCWdldEFuZENyZWF0ZVByb2plY3QoKTsKLQkJCS8vIHVuemlwIGZpbGVzIHRvIHRoZSByb290IG9mIHdvcmtzcGFjZSBkaXJlY3RvcnkKLQkJCVN0cmluZyBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgPSBmVGVzdFByb2plY3QuZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCk7Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Gb2xkZXIgPSBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgKyAiLyI7Ci0JCQkvLyB0aGlzIHppcCBmaWxlIGlzIHNpdHRpbmcgaW4gdGhlICJyb290IiBvZiB0ZXN0IHBsdWdpbgotCQkJRmlsZSB6aXBGaWxlID0gSlNQVUlUZXN0c1BsdWdpbi5nZXRUZXN0RmlsZSgidGVzdGZpbGVzLnppcCIpOwotCQkJUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCQlwcm9qVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBkZXN0aW5hdGlvbkZvbGRlcik7Ci0JCQlwcm9qVXRpbC5pbml0SmF2YVByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQkJblNldHVwcy0tOwotCQlpZiAoblNldHVwcyA9PSAwKSB7Ci0JCQlpZiAoIURFQlVHKSB7Ci0JCQkJLy8JCQkJRGlzcGxheSBkaXNwbGF5ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCk7Ci0JCQkJLy8JCQkJZGlzcGxheS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgewotCQkJCS8vCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJLy8JCQkJCQlQcm9qZWN0VW56aXBVdGlsaXR5IHByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJCQkvLwkJCQkJCUlQcm9qZWN0IHByb2ogPSBmVGVzdFByb2plY3Q7Ci0JCQkJLy8JCQkJCQlmVGVzdFByb2plY3QgPSBudWxsOwotCQkJCS8vCQkJCQkJdHJ5IHsKLQkJCQkvLwkJCQkJCQlwcm9qVXRpbC5kZWxldGVQcm9qZWN0KHByb2opOwotCQkJCS8vCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkvLwkJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCS8vCQkJCQkJfQotCQkJCS8vCQkJCQl9Ci0JCQkJLy8JCQkJfSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGdldEFuZENyZWF0ZVByb2plY3QoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vVGVzdHNQbHVnaW4gdGVzdHNQbHVnaW4gPSAoVGVzdHNQbHVnaW4pCi0JCS8vIFBsYXRmb3JtLmdldFBsdWdpbigib3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLnRlc3RzIik7Ci0JCUlXb3Jrc3BhY2Ugd29ya3NwYWNlID0gZ2V0V29ya3NwYWNlKCk7Ci0JCUlXb3Jrc3BhY2VSb290IHJvb3QgPSB3b3Jrc3BhY2UuZ2V0Um9vdCgpOwotCQlmVGVzdFByb2plY3QgPSByb290LmdldFByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkvLyB0aGlzIGZvcm0gY3JlYXRlcyBwcm9qZWN0IGFzICJsaW5rZWQiIGJhY2sgdG8gJ2ZpbGVSb290JwotCQkvL2NyZWF0ZVByb2plY3QodGVzdFByb2plY3QsIG5ldyBQYXRoKGZpbGVSb290KSwgbnVsbCk7Ci0JCWNyZWF0ZVByb2plY3QoZlRlc3RQcm9qZWN0LCBudWxsLCBudWxsKTsKLQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQlhc3NlcnRUcnVlKGZUZXN0UHJvamVjdC5leGlzdHMoKSk7Ci0JCS8vCQlJQ29udGFpbmVyIGRvdGVzdEZpbGVzID0gdGVzdFByb2plY3QuZ2V0Rm9sZGVyKCJkb3Rlc3RGaWxlcyIpOwotCQkvLwkJYXNzZXJ0VHJ1ZShkb3Rlc3RGaWxlcy5leGlzdHMoKSk7Ci0JCS8vCQlJUmVzb3VyY2VbXSBhbGxGb2xkZXJzID0gZG90ZXN0RmlsZXMubWVtYmVycygpOwotCQkvLwkJYXNzZXJ0Tm90TnVsbChhbGxGb2xkZXJzKTsKLQl9Ci0gCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQYXRoIGxvY2F0aW9uUGF0aCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCW1vbml0b3IgPSBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOwotCQl9Ci0JCW1vbml0b3IuYmVnaW5UYXNrKCJjcmVhdGluZyB0ZXN0IHByb2plY3QiLCAxMCk7Ci0JCS8vIGNyZWF0ZSB0aGUgcHJvamVjdAotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOwotCQkJCWlmIChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLmVxdWFscyhsb2NhdGlvblBhdGgpKSB7Ci0JCQkJCWxvY2F0aW9uUGF0aCA9IG51bGw7Ci0JCQkJfQotCQkJCWRlc2Muc2V0TG9jYXRpb24obG9jYXRpb25QYXRoKTsKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjLCBtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJCWlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb25pdG9yICE9IG51bGwpIHsKLQkJCQltb25pdG9yLmRvbmUoKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHdvcmtzcGFjZSBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElXb3Jrc3BhY2UgZ2V0V29ya3NwYWNlKCkgewotCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvZXhhbXBsZXMvQ3JlYXRpbmdKU1BFeHByZXNzaW9uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2V4YW1wbGVzL0NyZWF0aW5nSlNQRXhwcmVzc2lvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDFkYTU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvZXhhbXBsZXMvQ3JlYXRpbmdKU1BFeHByZXNzaW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuZXhhbXBsZXM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmZvcm1hdC5Ob2RlRm9ybWF0dGVyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIENyZWF0aW5nSlNQRXhwcmVzc2lvbiBleHRlbmRzIFRlc3RDYXNlIHsKLQotCS8qKgotCSAqIAotCSAqLwotCXB1YmxpYyBDcmVhdGluZ0pTUEV4cHJlc3Npb24oKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgQ3JlYXRpbmdKU1BFeHByZXNzaW9uKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVKU1BFeHByZXNzaW9uKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQotCQkvLyBOb3csIGFzc2lnbmluZyB1c2UgYSBwYWdlIGRpcmVjdGl2ZSwgYnV0IGxlYXZpbmcgZW1iZWRkZWQgdHlwZSB0aGUgc2FtZSBhcyBkZWZhdWx0Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldFRleHQodGhpcywgIjwlQCBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC9odG1sXCIgbGFuZ3VhZ2U9XCJqYXZhXCIgJT4iKTsKLQotCQlEb2N1bWVudCBkb2MgPSAoKElET01Nb2RlbCkgbW9kZWwpLmdldERvY3VtZW50KCk7Ci0KLQkJRWxlbWVudCBqc3BleHByZXNzaW9uID0gZG9jLmNyZWF0ZUVsZW1lbnQoImpzcDpleHByZXNzaW9uIik7Ci0JCSgoSURPTUVsZW1lbnQpIGpzcGV4cHJlc3Npb24pLnNldEpTUFRhZyh0cnVlKTsKLQkJZG9jLmFwcGVuZENoaWxkKGpzcGV4cHJlc3Npb24pOwotCQlUZXh0IGphdmFjb2RlID0gZG9jLmNyZWF0ZVRleHROb2RlKCIgLy8gc29tZSBqYXZhIGNvZGUgaGVyZTsgaWYgKHggPDApIHJldHVybiBuZXcgU3RyaW5nKFwiMFwiKSBlbHNlIHJldHVybiBuZXcgU3RyaW5nIChcIjFcIik7ICIpOwotCQlqc3BleHByZXNzaW9uLmFwcGVuZENoaWxkKGphdmFjb2RlKTsKLQotCi0JCVRleHQgY2RhdGFzZWN0aW9uID0gZG9jLmNyZWF0ZUNEQVRBU2VjdGlvbigiIC8vIHNvbWUgY2RhdGEgamF2YSBjb2RlIGhlcmU7IGlmICh4IDwwKSByZXR1cm4gbmV3IFN0cmluZyhcIjBcIikgZWxzZSByZXR1cm4gbmV3IFN0cmluZyAoXCIxXCIpOyAiKTsKLQkJZG9jLmFwcGVuZENoaWxkKGNkYXRhc2VjdGlvbik7Ci0KLQkJLy8gZm9ybWF0J3Mgbm90IG5lZWRlZCwganVzdCBwcmV0dGllciAuLi4gbm90IHN1cmUgd2h5IAotCQkvLyBpdCB3b24ndCB3b3JrIHJpZ2h0IG9uIHdob2xlIGRvY3VtZW50LgotCQluZXcgTm9kZUZvcm1hdHRlcigpLmZvcm1hdChqc3BleHByZXNzaW9uKTsKLQkJbmV3IE5vZGVGb3JtYXR0ZXIoKS5mb3JtYXQoY2RhdGFzZWN0aW9uKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJkb2N1bWVudCB0ZXh0OiAiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpKTsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbHNGcm9tRmlsZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvbW9kZWwvVGVzdE1vZGVsc0Zyb21GaWxlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTEyNDIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvbW9kZWwvVGVzdE1vZGVsc0Zyb21GaWxlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50RXh0ZW5zaW9uMzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudFBhcnRpdGlvbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC50ZXh0LlN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5kb2N1bWVudC5VbnppcHBlZFByb2plY3RUZXN0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC50ZXh0LlN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JIVE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZU5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5leGNlcHRpb25zLlJlc291cmNlQWxyZWFkeUV4aXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXhjZXB0aW9ucy5SZXNvdXJjZUluVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnV0aWwuVXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuc3NlbW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudGV4dC5ydWxlcy5TdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MOwotCi0KLXB1YmxpYyBjbGFzcyBUZXN0TW9kZWxzRnJvbUZpbGVzIGV4dGVuZHMgVW56aXBwZWRQcm9qZWN0VGVzdGVyIHsKLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uRXhpc3RlbnRYTUwoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0bm9uZXhpc3RlbnQueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb25FeGlzdGVudFhNTERvY3VtZW50KCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3ROb25FeGlzdGVudERvY3VtZW50KCJ0ZXN0ZmlsZXMveG1sL3Rlc3Rub25leGlzdGVudC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbkV4aXN0ZW50WE1MTW9kZWwoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZU1vZGVsV2l0aE5vbkV4aXN0SUZpbGUoInRlc3RmaWxlcy94bWwvdGVzdG5vbmV4aXN0ZW50LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uRXhpc3RlbnRKU1AoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0bm9uZXhpc3RlbnQuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb25FeGlzdGVudEpTUERvY3VtZW50KCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3ROb25FeGlzdGVudERvY3VtZW50KCJ0ZXN0ZmlsZXMvanNwL3Rlc3Rub25leGlzdGVudC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbkV4aXN0ZW50SlNQTW9kZWwoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZU1vZGVsV2l0aE5vbkV4aXN0SUZpbGUoInRlc3RmaWxlcy9qc3AvdGVzdG5vbmV4aXN0ZW50LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlQ2FzZSgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Tm90RW1wdHkoInRlc3RmaWxlcy94bWwvdGVzdE5vcm1hbENhc2UueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVEb2N1bWVudENhc2VYTUwoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdE5vdEVtcHR5RG9jdW1lbnQoInRlc3RmaWxlcy94bWwvdGVzdE5vcm1hbENhc2UueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVEb2N1bWVudENhc2VKU1AoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdE5vdEVtcHR5RG9jdW1lbnQoInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXBsZXhDYXNlKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3ROb3RFbXB0eSgidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVsb2FkKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RSZWxvYWQoInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUFdpdGhYTUxPdXRwdXQoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdFJlbG9hZCgidGVzdGZpbGVzL2pzcC9qc3AteG1sLW91dHB1dC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhIVE1MVHJhbnNpdGlvbmFsMSgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveGh0bWwvdGVzdHguaHRtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySFRNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhIVE1MVHJhbnNpdGlvbmFsMigpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveGh0bWwvdGVzdHguanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYSFRNTFRyYW5zaXRpb25hbDMoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3hodG1sL3Rlc3R4LnhodG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JIVE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SFRNTFRyYW5zaXRpb25hbDEoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2h0bWwvdGVzdGguaHRtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySFRNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEhUTUxUcmFuc2l0aW9uYWwyKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9odG1sL3Rlc3RoLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQkvKgotCSAqIFRPRE86IHRoZXNlIHRlc3QgZmlsZXMgYXJlIG1pc3NpbmcsIGZvciBzb21lIHJlYXNvbiB3aGVuIHJ1bm5pbmcgb24KLQkgKiBidWlsZCBtYWNoaW5lIC4uLiBuZWVkIHRvIHJlLWNvbnN0cnVjdCBwdWJsaWMgdm9pZCB0ZXN0TmVhckVtcHR5SlNQKCkKLQkgKiB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JICogZG9UZXN0Tm90RW1wdHkoInRlc3RmaWxlcy9qc3AvbmVhckVtcHR5LmpzcCIsCi0JICogQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOyB9Ci0JICogCi0JICogcHVibGljIHZvaWQgdGVzdE5lYXJFbXB0eVhNTCgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsCi0JICogUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCSAqIGRvVGVzdE5vdEVtcHR5KCJ0ZXN0ZmlsZXMveG1sL25lYXJFbXB0eS54bWwiLAotCSAqIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsgfQotCSAqIAotCSAqIHB1YmxpYyB2b2lkIHRlc3ROZWFyRW1wdHlIVE1MKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywKLQkgKiBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JICogZG9UZXN0Tm90RW1wdHkoInRlc3RmaWxlcy9odG1sL25lYXJFbXB0eS5odG1sIiwKLQkgKiBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckhUTUwuY2xhc3MpOyB9Ci0JICovCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdE5vdEVtcHR5KFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgZXhwZWN0ZWREb2N1bWVudENsYXNzLCBDbGFzcyBleHBlY3RlZFBhcnRpb25lcikgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlTdHJpbmcgY29udGVudHMgPSBkb1Rlc3RDcmVhdGUoZmlsZVBhdGgsIGV4cGVjdGVkRG9jdW1lbnRDbGFzcywgZXhwZWN0ZWRQYXJ0aW9uZXIpOwotCQlhc3NlcnROb3ROdWxsKCJjb250ZW50cyB3ZXJlIG51bGwiLCBjb250ZW50cyk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnRzIHdlcmUgZW1wdHkiLCBjb250ZW50cy5sZW5ndGgoKSA+IDApOwotCi0JfQotCi0JLyoqCi0JICogQHBhcmFtIHN0cmluZwotCSAqIEBwYXJhbSBjbGFzczEKLQkgKiBAcGFyYW0gY2xhc3MyCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgUmVzb3VyY2VJblVzZQotCSAqIEB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzCi0JICovCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdE5vdEVtcHR5RG9jdW1lbnQoU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZERvY3VtZW50Q2xhc3MsIENsYXNzIGV4cGVjdGVkUGFydGlvbmVyKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjb250ZW50cyA9IG51bGw7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlpZiAoZmlsZSA9PSBudWxsKSB7Ci0JCQlmaWxlID0gZlRlc3RQcm9qZWN0LmdldEZpbGUoZmlsZVBhdGgpOwotCQl9Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbE1hbmFnZXIuY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKGZpbGUpOwotCQlhc3NlcnROb3ROdWxsKGRvY3VtZW50KTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgY2xhc3Mgb2YgZG9jdW1lbnQiLCBleHBlY3RlZERvY3VtZW50Q2xhc3MuaXNJbnN0YW5jZShkb2N1bWVudCkpOwotCQlJRG9jdW1lbnRQYXJ0aXRpb25lciBzZXR1cFBhcnRpdGlvbmVyID0gbnVsbDsKLQkJaWYgKFV0aWxpdGllcy5jb250YWlucyhleHBlY3RlZERvY3VtZW50Q2xhc3MuZ2V0SW50ZXJmYWNlcygpLCBJRG9jdW1lbnRFeHRlbnNpb24zLmNsYXNzKSkgewotCQkJc2V0dXBQYXJ0aXRpb25lciA9ICgoSURvY3VtZW50RXh0ZW5zaW9uMykgZG9jdW1lbnQpLmdldERvY3VtZW50UGFydGl0aW9uZXIoSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmcuREVGQVVMVF9TVFJVQ1RVUkVEX1BBUlRJVElPTklORyk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlzZXR1cFBhcnRpdGlvbmVyID0gZG9jdW1lbnQuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcigpOwotCQl9Ci0JCWFzc2VydFRydWUoIndyb25nIHBhcnRpdGlvbmVyIGluIGRvY3VtZW50LiIsIGV4cGVjdGVkUGFydGlvbmVyLmlzSW5zdGFuY2Uoc2V0dXBQYXJ0aXRpb25lcikpOwotCQljb250ZW50cyA9IGRvY3VtZW50LmdldCgpOwotCQlhc3NlcnROb3ROdWxsKCJjb250ZW50cyB3ZXJlIG51bGwiLCBjb250ZW50cyk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnRzIHdlcmUgZW1wdHkiLCBjb250ZW50cy5sZW5ndGgoKSA+IDApOwotCi0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdE5vbkV4aXN0ZW50RG9jdW1lbnQoU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZERvY3VtZW50Q2xhc3MsIENsYXNzIGV4cGVjdGVkUGFydGlvbmVyKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjb250ZW50cyA9IG51bGw7Ci0JCWJvb2xlYW4gZXhwZWN0ZWRFeGNlcHRpb25DYXVnaHQgPSBmYWxzZTsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWlmIChmaWxlID09IG51bGwpIHsKLQkJCWZpbGUgPSBmVGVzdFByb2plY3QuZ2V0RmlsZShmaWxlUGF0aCk7Ci0JCX0KLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlkb2N1bWVudCA9IG1vZGVsTWFuYWdlci5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoZmlsZSk7Ci0JCX0KLQkJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCQlleHBlY3RlZEV4Y2VwdGlvbkNhdWdodCA9IHRydWU7Ci0JCX0KLQotCQlpZiAoZXhwZWN0ZWRFeGNlcHRpb25DYXVnaHQpIHsKLQkJCWRvY3VtZW50ID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudEZvcihmaWxlKTsKLQkJCWFzc2VydE5vdE51bGwoZG9jdW1lbnQpOwotCQkJYXNzZXJ0VHJ1ZSgid3JvbmcgY2xhc3Mgb2YgZG9jdW1lbnQiLCBleHBlY3RlZERvY3VtZW50Q2xhc3MuaXNJbnN0YW5jZShkb2N1bWVudCkpOwotCQkJSURvY3VtZW50UGFydGl0aW9uZXIgc2V0dXBQYXJ0aXRpb25lciA9IG51bGw7Ci0JCQlpZiAoVXRpbGl0aWVzLmNvbnRhaW5zKGV4cGVjdGVkRG9jdW1lbnRDbGFzcy5nZXRJbnRlcmZhY2VzKCksIElEb2N1bWVudEV4dGVuc2lvbjMuY2xhc3MpKSB7Ci0JCQkJc2V0dXBQYXJ0aXRpb25lciA9ICgoSURvY3VtZW50RXh0ZW5zaW9uMykgZG9jdW1lbnQpLmdldERvY3VtZW50UGFydGl0aW9uZXIoSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmcuREVGQVVMVF9TVFJVQ1RVUkVEX1BBUlRJVElPTklORyk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlzZXR1cFBhcnRpdGlvbmVyID0gZG9jdW1lbnQuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcigpOwotCQkJfQotCQkJYXNzZXJ0VHJ1ZSgid3JvbmcgcGFydGl0aW9uZXIgaW4gZG9jdW1lbnQuIiwgZXhwZWN0ZWRQYXJ0aW9uZXIuaXNJbnN0YW5jZShzZXR1cFBhcnRpdGlvbmVyKSk7Ci0JCQljb250ZW50cyA9IGRvY3VtZW50LmdldCgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY29udGVudHMgd2VyZSBudWxsIiwgY29udGVudHMpOwotCQkJYXNzZXJ0VHJ1ZSgiY29udGVudHMgd2VyZSAqbm90KiBlbXB0eSBhcyBleHBlY3RlZCIsIGNvbnRlbnRzLmxlbmd0aCgpID09IDApOwotCQl9Ci0JCWVsc2UgewotCQkJYXNzZXJ0VHJ1ZSgiRmlsZU5vdEZvdW5kIGV4Y2VwdGlvbiB3YXMgKm5vdCogdGhyb3duIGFzIGV4cGVjdGVkIiwgZmFsc2UpOwotCQl9Ci0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gc3RyaW5nCi0JICogQHBhcmFtIGNsYXNzMQotCSAqIEBwYXJhbSBjbGFzczIKLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBSZXNvdXJjZUluVXNlCi0JICogQHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMKLQkgKi8KLQlwcml2YXRlIHZvaWQgZG9UZXN0UmVsb2FkKFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgZXhwZWN0ZWREb2N1bWVudENsYXNzLCBDbGFzcyBleHBlY3RlZFBhcnRpb25lcikgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJaWYgKGZpbGUgPT0gbnVsbCkgewotCQkJZmlsZSA9IGZUZXN0UHJvamVjdC5nZXRGaWxlKGZpbGVQYXRoKTsKLQkJfQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE5ld01vZGVsRm9yRWRpdChmaWxlLCB0cnVlKTsKLQkJdHJ5IHsKLQkJCWFzc2VydE5vdE51bGwobW9kZWwpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJYXNzZXJ0Tm90TnVsbChkb2N1bWVudCk7Ci0JCQlhc3NlcnRUcnVlKCJ3cm9uZyBjbGFzcyBvZiBkb2N1bWVudCIsIGV4cGVjdGVkRG9jdW1lbnRDbGFzcy5pc0luc3RhbmNlKGRvY3VtZW50KSk7Ci0JCQlJRG9jdW1lbnRQYXJ0aXRpb25lciBzZXR1cFBhcnRpdGlvbmVyID0gbnVsbDsKLQkJCWlmIChVdGlsaXRpZXMuY29udGFpbnMoZXhwZWN0ZWREb2N1bWVudENsYXNzLmdldEludGVyZmFjZXMoKSwgSURvY3VtZW50RXh0ZW5zaW9uMy5jbGFzcykpIHsKLQkJCQlzZXR1cFBhcnRpdGlvbmVyID0gKChJRG9jdW1lbnRFeHRlbnNpb24zKSBkb2N1bWVudCkuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcihJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXNldHVwUGFydGl0aW9uZXIgPSBkb2N1bWVudC5nZXREb2N1bWVudFBhcnRpdGlvbmVyKCk7Ci0JCQl9Ci0JCQlhc3NlcnRUcnVlKCJ3cm9uZyBwYXJ0aXRpb25lciBpbiBkb2N1bWVudC4iLCBleHBlY3RlZFBhcnRpb25lci5pc0luc3RhbmNlKHNldHVwUGFydGl0aW9uZXIpKTsKLQotCQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBudWxsOwotCQkJdHJ5IHsKLQkJCQlpblN0cmVhbSA9IGZpbGUuZ2V0Q29udGVudHMoKTsKLQkJCQltb2RlbC5yZWxvYWQoaW5TdHJlYW0pOwotCQkJCWFzc2VydE5vdE51bGwobW9kZWwpOwotCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnRSZWxvYWRlZCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJCS8vIG5vdGU6IE5PVCBzYW1lIGluc3RhbmNlIG9mIGRvY3VtZW50Ci0JCQkJLy8gRklYTUU6IHRoaXMgdGVzdCBoYXMgdG8gYmUgY2hhbmdlZCBiYWNrLCBvbmNlIHRoZSByZWxvYWQKLQkJCQkvLyBBUEkgaXMKLQkJCQkvLyBmaXhlZCB0byB3b3JrIHdpdGggZGlmZmVyZW50IGRvY3VtZW50LgotCQkJCS8vIGFzc2VydEZhbHNlKGRvY3VtZW50ID09IGRvY3VtZW50UmVsb2FkZWQpOwotCQkJCWFzc2VydFRydWUoZG9jdW1lbnQgPT0gZG9jdW1lbnRSZWxvYWRlZCk7Ci0JCQl9Ci0JCQlmaW5hbGx5IHsKLQkJCQlpZiAoaW5TdHJlYW0gIT0gbnVsbCkgewotCQkJCQlpblN0cmVhbS5jbG9zZSgpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHN0cmluZwotCSAqIEBwYXJhbSBjbGFzczEKLQkgKiBAcGFyYW0gY2xhc3MyCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgUmVzb3VyY2VJblVzZQotCSAqIEB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgZG9UZXN0Q3JlYXRlKFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgZXhwZWN0ZWREb2N1bWVudENsYXNzLCBDbGFzcyBleHBlY3RlZFBhcnRpb25lcikgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlTdHJpbmcgY29udGVudHMgPSBudWxsOwotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJLy8gZmlsZSB3aWxsIGJlIG51bGwgaWYgdGhlIHJlc291cmNlIGRvZXMgbm90IGV4aXN0Ci0JCWlmIChmaWxlID09IG51bGwpIHsKLQkJCWZpbGUgPSBmVGVzdFByb2plY3QuZ2V0RmlsZShmaWxlUGF0aCk7Ci0JCX0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXROZXdNb2RlbEZvckVkaXQoZmlsZSwgdHJ1ZSk7Ci0JCXRyeSB7Ci0JCQlhc3NlcnROb3ROdWxsKG1vZGVsKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCWFzc2VydE5vdE51bGwoZG9jdW1lbnQpOwotCQkJY29udGVudHMgPSBkb2N1bWVudC5nZXQoKTsKLQkJCWFzc2VydFRydWUoIndyb25nIGNsYXNzIG9mIGRvY3VtZW50IiwgZXhwZWN0ZWREb2N1bWVudENsYXNzLmlzSW5zdGFuY2UoZG9jdW1lbnQpKTsKLQkJCUlEb2N1bWVudFBhcnRpdGlvbmVyIHNldHVwUGFydGl0aW9uZXIgPSBudWxsOwotCQkJaWYgKFV0aWxpdGllcy5jb250YWlucyhleHBlY3RlZERvY3VtZW50Q2xhc3MuZ2V0SW50ZXJmYWNlcygpLCBJRG9jdW1lbnRFeHRlbnNpb24zLmNsYXNzKSkgewotCQkJCXNldHVwUGFydGl0aW9uZXIgPSAoKElEb2N1bWVudEV4dGVuc2lvbjMpIGRvY3VtZW50KS5nZXREb2N1bWVudFBhcnRpdGlvbmVyKElTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nLkRFRkFVTFRfU1RSVUNUVVJFRF9QQVJUSVRJT05JTkcpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJc2V0dXBQYXJ0aXRpb25lciA9IGRvY3VtZW50LmdldERvY3VtZW50UGFydGl0aW9uZXIoKTsKLQkJCX0KLQkJCWFzc2VydFRydWUoIndyb25nIHBhcnRpdGlvbmVyIGluIGRvY3VtZW50LiIsIGV4cGVjdGVkUGFydGlvbmVyLmlzSW5zdGFuY2Uoc2V0dXBQYXJ0aXRpb25lcikpOwotCi0JCQl0ZXN0Q2xvbmUobW9kZWwpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCQlyZXR1cm4gY29udGVudHM7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHRlc3RDbG9uZShJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSURPTURvY3VtZW50IGRvY3VtZW50ID0gKChJRE9NTW9kZWwpIHN0cnVjdHVyZWRNb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJSU5vZGVOb3RpZmllciBub3RpZmllciA9IGRvY3VtZW50OwotCQlNb2RlbFF1ZXJ5QWRhcHRlciBtb2RlbFF1ZXJ5QWRhcHRlciA9IChNb2RlbFF1ZXJ5QWRhcHRlcikgbm90aWZpZXIuZ2V0QWRhcHRlckZvcihNb2RlbFF1ZXJ5QWRhcHRlci5jbGFzcyk7Ci0JCWFzc2VydE5vdE51bGwoImluaXRpYWwgbW9kZWxRdWVyeUFkYXB0ZXIgc2hvdWxkIG5vdCBiZSBudWxsIiwgbW9kZWxRdWVyeUFkYXB0ZXIpOwotCQkKLQkJSVN0cnVjdHVyZWRNb2RlbCBuZXdNb2RlbCA9IHN0cnVjdHVyZWRNb2RlbC5uZXdJbnN0YW5jZSgpOwotCQlJRE9NRG9jdW1lbnQgbmV3RG9jdW1lbnQgPSAoKElET01Nb2RlbCkgbmV3TW9kZWwpLmdldERvY3VtZW50KCk7Ci0JCUlOb2RlTm90aWZpZXIgbmV3Tm90aWZpZXIgPSBuZXdEb2N1bWVudDsKLQkJTW9kZWxRdWVyeUFkYXB0ZXIgcmVzdWx0ID0gKE1vZGVsUXVlcnlBZGFwdGVyKSBuZXdOb3RpZmllci5nZXRBZGFwdGVyRm9yKE1vZGVsUXVlcnlBZGFwdGVyLmNsYXNzKTsKLQkJYXNzZXJ0Tm90TnVsbCgibmV3SW5zdGFuY2UgbW9kZWxRdWVyeUFkYXB0ZXIgc2hvdWxkIG5vdCBiZSBudWxsIiwgcmVzdWx0KTsKLQotCi0JfQotCi0JLyoqCi0JICogQHBhcmFtIHN0cmluZwotCSAqIEBwYXJhbSBjbGFzczEKLQkgKiBAcGFyYW0gY2xhc3MyCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgUmVzb3VyY2VJblVzZQotCSAqIEB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgZG9UZXN0Q3JlYXRlTW9kZWxXaXRoTm9uRXhpc3RJRmlsZShTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRG9jdW1lbnRDbGFzcywgQ2xhc3MgZXhwZWN0ZWRQYXJ0aW9uZXIpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNvbnRlbnRzID0gbnVsbDsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCS8vIGZpbGUgd2lsbCBiZSBudWxsIGlmIHRoZSByZXNvdXJjZSBkb2VzIG5vdCBleGlzdAotCQlpZiAoZmlsZSA9PSBudWxsKSB7Ci0JCQlmaWxlID0gZlRlc3RQcm9qZWN0LmdldEZpbGUoZmlsZVBhdGgpOwotCQl9Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TmV3TW9kZWxGb3JFZGl0KGZpbGUsIGZhbHNlKTsKLQkJdHJ5IHsKLQkJCWFzc2VydE5vdE51bGwobW9kZWwpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJYXNzZXJ0Tm90TnVsbChkb2N1bWVudCk7Ci0JCQljb250ZW50cyA9IGRvY3VtZW50LmdldCgpOwotCQkJYXNzZXJ0VHJ1ZSgid3JvbmcgY2xhc3Mgb2YgZG9jdW1lbnQiLCBleHBlY3RlZERvY3VtZW50Q2xhc3MuaXNJbnN0YW5jZShkb2N1bWVudCkpOwotCQkJSURvY3VtZW50UGFydGl0aW9uZXIgc2V0dXBQYXJ0aXRpb25lciA9IG51bGw7Ci0JCQlpZiAoVXRpbGl0aWVzLmNvbnRhaW5zKGV4cGVjdGVkRG9jdW1lbnRDbGFzcy5nZXRJbnRlcmZhY2VzKCksIElEb2N1bWVudEV4dGVuc2lvbjMuY2xhc3MpKSB7Ci0JCQkJc2V0dXBQYXJ0aXRpb25lciA9ICgoSURvY3VtZW50RXh0ZW5zaW9uMykgZG9jdW1lbnQpLmdldERvY3VtZW50UGFydGl0aW9uZXIoSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmcuREVGQVVMVF9TVFJVQ1RVUkVEX1BBUlRJVElPTklORyk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlzZXR1cFBhcnRpdGlvbmVyID0gZG9jdW1lbnQuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcigpOwotCQkJfQotCQkJYXNzZXJ0VHJ1ZSgid3JvbmcgcGFydGl0aW9uZXIgaW4gZG9jdW1lbnQuIiwgZXhwZWN0ZWRQYXJ0aW9uZXIuaXNJbnN0YW5jZShzZXR1cFBhcnRpdGlvbmVyKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCQlyZXR1cm4gY29udGVudHM7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9tb2RlbHF1ZXJ5L01vZGVsUXVlcnlUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvbW9kZWxxdWVyeS9Nb2RlbFF1ZXJ5VGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4ZDczMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9tb2RlbHF1ZXJ5L01vZGVsUXVlcnlUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMubW9kZWxxdWVyeTsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci1pbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS5pbnRlcm5hbC5KU1BVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLkpTUFVJVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5Mb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5IVE1MNDBOYW1lc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnJlZ2lzdHJ5LkFkYXB0ZXJGYWN0b3J5UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5yZWdpc3RyeS5BZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTm9kZUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5tb2RlbHF1ZXJ5LkNNRG9jdW1lbnRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIE1vZGVsUXVlcnlUZXN0ZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIGZpbmFsIGJvb2xlYW4gdGVzdFNoaXBwZWREVERMb29rdXAgPSBmYWxzZTsKLQotCS8vIE91ciBTdHJ1Y3R1cmVkIE1vZGVsLCB3aGljaCBzaG91bGQgYWx3YXlzIGJlIGFuIFhNTE1vZGVsIChvciBzdWJjbGFzcykKLQlwcm90ZWN0ZWQgSURPTU1vZGVsIGZNb2RlbCA9IG51bGw7Ci0KLQlwcm90ZWN0ZWQgTW9kZWxRdWVyeSBmTW9kZWxRdWVyeSA9IG51bGw7Ci0KLQlwdWJsaWMgTW9kZWxRdWVyeVRlc3RlcihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKE1vZGVsUXVlcnlUZXN0ZXIuY2xhc3MpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCWlmIChhcmdzID09IG51bGwgfHwgYXJncy5sZW5ndGggPT0gMCkgewotCQkJcnVuQWxsKCk7Ci0JCX0gZWxzZSBpZiAoYXJncy5sZW5ndGggPT0gMSkgewotCQkJU3RyaW5nIG1ldGhvZFRvUnVuID0gYXJnc1swXS50cmltKCk7Ci0JCQlydW5PbmUobWV0aG9kVG9SdW4pOwotCQl9Ci0KLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgcnVuQWxsKCkgewotCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKLQotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBydW5PbmUoU3RyaW5nIG1ldGhvZE5hbWUpIHsKLQkJVGVzdFN1aXRlIHRlc3RTdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLQkJVGVzdENhc2UgdGVzdCA9IG5ldyBNb2RlbFF1ZXJ5VGVzdGVyKG1ldGhvZE5hbWUpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdCh0ZXN0KTsKLQkJanVuaXQudGV4dHVpLlRlc3RSdW5uZXIucnVuKHRlc3RTdWl0ZSk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlIGFuIGVtcHR5IEhUTUwgbW9kZWwKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcEhUTUwoKSB7Ci0JCWZNb2RlbCA9IChJRE9NTW9kZWwpIGNyZWF0ZU1vZGVsKENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCk7Ci0JCWluaXRWYXJzKCk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlIGFuIGVtcHR5IFhNTCBtb2RlbAotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldFVwWE1MKCkgewotCQlmTW9kZWwgPSAoSURPTU1vZGVsKSBjcmVhdGVNb2RlbChDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJaW5pdFZhcnMoKTsKLQl9Ci0KLQotCS8qKgotCSAqIEluaXRpYWxpemUgbG9jYWwgZmllbGRzIGZvciB0aGlzIHRlc3QKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbml0VmFycygpIHsKLQkJZk1vZGVsUXVlcnkgPSBNb2RlbFF1ZXJ5VXRpbC5nZXRNb2RlbFF1ZXJ5KGZNb2RlbC5nZXREb2N1bWVudCgpKTsKLQotCi0JfQotCi0JLyoqCi0JICogVGVzdCB0aGUgSFRNTCBCT0RZIEVsZW1lbnQgZm9yIHRoZSAiYmdjb2xvciIgYXR0cmlidXRlIGRlY2xhcmF0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJvZHlFbGVtZW50KCkgewotCQlzZXRVcEhUTUwoKTsKLQkJZk1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldCgiPGh0bWw+PGJvZHkgYmdjb2xvcj1cIiNmZmZmZmZcIj48Zm9ybSBtZXRob2Q9XCJwb3N0XCI+PC9mb3JtPjwvYm9keT48L2h0bWw+Iik7IC8vIHNldAotCQkvLyB0ZXh0Ci0KLQkJLy8gVEVTVCBnZXR0aW5nIGEgQ01FbGVtZW50RGVjbGFyYXRpb24KLQkJRWxlbWVudCBib2R5RWxlbWVudCA9IChFbGVtZW50KSBmTW9kZWwuZ2V0SW5kZXhlZFJlZ2lvbig3KTsgLy8gbm9kZSBhdAotCQkvLyBvZmZzZXQ3LS1zaG91bGQKLQkJLy8gYmUKLQkJLy8gPGJvZHk+Ci0JCUNNRWxlbWVudERlY2xhcmF0aW9uIGJvZHlEZWNsID0gZk1vZGVsUXVlcnkuZ2V0Q01FbGVtZW50RGVjbGFyYXRpb24oYm9keUVsZW1lbnQpOwotCi0JCWludCBjb250ZW50VHlwZSA9IGJvZHlEZWNsLmdldENvbnRlbnRUeXBlKCk7Ci0JCWFzc2VydFRydWUoIkNNRWxlbWVudERlY2xhcmF0aW9uIENPTlRFTlQgVFlQRSBJTkNPUlJFQ1QgRk9SIEJPRFkiLCAoY29udGVudFR5cGUgPT0gQ01FbGVtZW50RGVjbGFyYXRpb24uTUlYRUQpKTsKLQotCQkvLyBnZXQgcGVybWlzc2libGUgYXR0cnMKLQkJQ01OYW1lZE5vZGVNYXAgbWFwID0gYm9keURlY2wuZ2V0QXR0cmlidXRlcygpOwotCQlhc3NlcnRUcnVlKCJBVFRSSUJVVEVTIEZST00gRUxFTUVOVCBERUNMQVJBVElPTiA9PSBOVUxMIiwgKG1hcCAhPSBudWxsKSk7Ci0JCVZlY3RvciBhbGxvd2VkID0gbmV3IFZlY3RvcigpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IG1hcC5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQlDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIG5vZGUgPSAoQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbikgbWFwLml0ZW0oaSk7Ci0JCQlTdHJpbmcgbmFtZSA9IG5vZGUuZ2V0Tm9kZU5hbWUoKTsKLQkJCWFsbG93ZWQuYWRkKG5hbWUpOwotCQkJaWYgKG5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiYmdjb2xvciIpKSB7Ci0JCQkJYXNzZXJ0VHJ1ZSgiR09UIElOQ09SUkVDVCBBVFRSSUJVVEUgTk9ERSBUWVBFIiwgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBDTU5vZGUuQVRUUklCVVRFX0RFQ0xBUkFUSU9OKSk7Ci0KLQkJCQlDTURhdGFUeXBlIGF0dHJUeXBlID0gbm9kZS5nZXRBdHRyVHlwZSgpOwotCQkJCS8vIFN5c3RlbS5vdXQucHJpbnRsbigiYXR0cmlidXRlIHR5cGUgPiAiICsgYXR0clR5cGUpOwotCQkJCWFzc2VydFRydWUoIkNPVUxEIE5PVCBHRVQgQVRUUklCVVRFIFRZUEUiLCAoYXR0clR5cGUgIT0gbnVsbCkpOwotCQkJCWFzc2VydFRydWUoIkNPVUxETidUIEdFVCBJTVBMSUVEIFZBTFVFIEtJTkQiLCAoYXR0clR5cGUuZ2V0SW1wbGllZFZhbHVlS2luZCgpID09IENNRGF0YVR5cGUuSU1QTElFRF9WQUxVRV9OT05FKSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUZXN0IHRoZSBIVE1MIEhUTUwgRWxlbWVudCBmb3IgaXRzIGRlY2xhcmVkIGNoaWxkcmVuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEh0bWxDaGlsZHJlbigpIHsKLQkJc2V0VXBIVE1MKCk7Ci0JCWZNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoIjxodG1sPjwvaHRtbD4iKTsgLy8gc2V0IHRleHQKLQkJRWxlbWVudCBodG1sRWxlbWVudCA9IGZNb2RlbC5nZXREb2N1bWVudCgpLmdldERvY3VtZW50RWxlbWVudCgpOwotCQlDTUVsZW1lbnREZWNsYXJhdGlvbiBodG1sRGVjbCA9IGZNb2RlbFF1ZXJ5LmdldENNRWxlbWVudERlY2xhcmF0aW9uKGh0bWxFbGVtZW50KTsKLQotCQkvLyBIVE1MJ3MgY2hpbGRyZW4gYXJlIHdpdGhpbiBhIGdyb3VwCi0JCUNNQ29udGVudCBjb250ZW50cyA9IGh0bWxEZWNsLmdldENvbnRlbnQoKTsKLQotCQlhc3NlcnRUcnVlKCJjb250ZW50IHR5cGUgaXMgbm90IGEgZ3JvdXAiLCBjb250ZW50cy5nZXROb2RlVHlwZSgpID09IENNTm9kZS5HUk9VUCk7Ci0KLQkJQ01Hcm91cCBncm91cCA9IChDTUdyb3VwKSBjb250ZW50czsKLQkJaW50IG9wZXJhdG9yID0gZ3JvdXAuZ2V0T3BlcmF0b3IoKTsKLQkJQ01Ob2RlTGlzdCBjaGlsZExpc3QgPSBncm91cC5nZXRDaGlsZE5vZGVzKCk7Ci0JCWludCBtYXggPSBjb250ZW50cy5nZXRNYXhPY2N1cigpOwotCQlpbnQgbWluID0gY29udGVudHMuZ2V0TWluT2NjdXIoKTsKLQotCQkvLyB0aGUgZ3JvdXAgc2hvdWxkIGJlIGFsbG93ZWQgb25jZSwgd2l0aCBhIHNlcXVlbmNlIHdob3NlIGZpcnN0IGVudHJ5Ci0JCS8vIGlzIHRoZSBkZWNsYXJhdGlvbiBmb3IgSEVBRAotCQlhc3NlcnRUcnVlKCJvY2N1cnJhbmNlIG9mIGdyb3VwIiwgbWluID09IDEgJiYgbWF4ID09IDEpOwotCQlhc3NlcnRUcnVlKCJyZWxhdGlvbnNoaXAgaW4gZ3JvdXAiLCBvcGVyYXRvciA9PSBDTUdyb3VwLlNFUVVFTkNFKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudCBkZXNjcmlwdG9yIHR5cGUsIHBvc2l0aW9uIDAiLCBjb250ZW50cy5nZXROb2RlVHlwZSgpID09IENNTm9kZS5HUk9VUCk7Ci0JCWFzc2VydFRydWUoImNoaWxkIG9yZGVyIChIRUFEIGZpcnN0KSIsIGNoaWxkTGlzdC5pdGVtKDApLmdldE5vZGVOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZShIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuSEVBRCkpOwotCi0JCWFzc2VydFRydWUoImNvbnRlbnQgZGVzY3JpcHRvciB0eXBlLCBwb3NpdGlvbiAxIiwgY2hpbGRMaXN0Lml0ZW0oMSkuZ2V0Tm9kZVR5cGUoKSA9PSBDTU5vZGUuR1JPVVApOwotCQkvLyBUaGUgc2Vjb25kIGNoaWxkIHNob3VsZCBiZSBhIGdyb3VwIGFzIHdlbGwsIGNvbnRhaW5pbmcgQk9EWSBhbmQKLQkJLy8gRlJBTUVTRVQgd2l0aCBhbgotCQkvLyBvcGVyYXRvciBvZiBDTUdyb3VwLkNIT0lDRQotCQlhc3NlcnRUcnVlKCJjb250ZW50IGRlc2NyaXB0b3IgdHlwZSwgcG9zaXRpb24gMSAtIHJlbGF0aW9uc2hpcCBvZiBncm91cCIsICgoQ01Hcm91cCkgY2hpbGRMaXN0Lml0ZW0oMSkpLmdldE9wZXJhdG9yKCkgPT0gQ01Hcm91cC5DSE9JQ0UpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtTWV0aG9kQXR0cigpIHsKLQkJc2V0VXBIVE1MKCk7Ci0JCWZNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoIjxodG1sPjxib2R5IGJnY29sb3I9XCIjZmZmZmZmXCI+PGZvcm0gbWV0aG9kPVwicG9zdFwiPjwvZm9ybT48L2JvZHk+PC9odG1sPiIpOyAvLyBzZXQKLQkJLy8gdGV4dAotCi0JCS8vIFRFU1QgR0VUVElORyBBIENNQXR0cmlidXRlRGVjbGFyYXRvaW4KLQkJRWxlbWVudCBmb3JtRWxlbWVudCA9IChFbGVtZW50KSBmTW9kZWwuZ2V0SW5kZXhlZFJlZ2lvbigzMSk7IC8vIDxmb3JtPgotCQlBdHRyIGF0dHJOb2RlID0gZm9ybUVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZShIVE1MNDBOYW1lc3BhY2UuQVRUUl9OQU1FX01FVEhPRCk7Ci0JCUNNQXR0cmlidXRlRGVjbGFyYXRpb24gbWV0aG9kQXR0ckRlY2wgPSBmTW9kZWxRdWVyeS5nZXRDTUF0dHJpYnV0ZURlY2xhcmF0aW9uKGF0dHJOb2RlKTsKLQkJYXNzZXJ0VHJ1ZSgiQ29udGVudCBNb2RlbCBtaXNzaW5nIHRoZSBhdHRyaWJ1dGUgZGVjbGFyYXRpb24gZm9yIFwibWV0aG9kXCIiLCBtZXRob2RBdHRyRGVjbCAhPSBudWxsKTsKLQotCQlMaXN0IHZhbHVlcyA9IGdldFZhbGlkU3RyaW5ncyhmb3JtRWxlbWVudCwgbWV0aG9kQXR0ckRlY2wpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBudW1iZXIgb2YgdmFsdWVzIGZvciBhdHRyaWJ1dGUgXCJtZXRob2RcIiIsICh2YWx1ZXMuc2l6ZSgpID09IDIpKTsKLQkJYXNzZXJ0VHJ1ZSgiZGVmYXVsdCB2YWx1ZSBmb3IgYXR0cmlidXRlIFwibWV0aG9kXCIgaXMgd3JvbmciLCAobWV0aG9kQXR0ckRlY2wuZ2V0QXR0clR5cGUoKS5nZXRJbXBsaWVkVmFsdWUoKS5lcXVhbHNJZ25vcmVDYXNlKCJnZXQiKSkpOwotCX0KLQotCS8qKgotCSAqIEEgc2hvcnQgdGVzdCB0byBlbnN1cmUgdGhhdCBhIERURCBjYW4gYmUgbG9hZGVkIGZyb20gYSBzeXN0ZW0KLQkgKiByZWZlcmVuY2UuCi0JICogCi0JICogTm90ZTogTWF5IHJlcXVpcmUgYSBmdW5jdGlvbmluZyBuZXR3b3JrIGNvbm5lY3Rpb24gZm9yIHRoZSByZWZlcmVuY2VzCi0JICogdG8gYmUgcmVzb2x2ZWQgcHJvcGVybHkuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdERURExvYWRGcm9tU3lzdGVtSURfMSgpIHsKLQkJaWYgKHRlc3RTaGlwcGVkRFRETG9va3VwKSB7Ci0JCQlzZXRVcFhNTCgpOwotCQkJVVJMIGluc3RhbGxhdGlvblBhdGggPSBQbGF0Zm9ybS5nZXRCdW5kbGUoSlNQVUlUZXN0c1BsdWdpbi5JRCkuZ2V0RW50cnkoIi8iKTsKLQkJCVN0cmluZyBkaXNrTG9jYXRpb24gPSBudWxsOwotCQkJdHJ5IHsKLQkJCQlkaXNrTG9jYXRpb24gPSBQbGF0Zm9ybS5yZXNvbHZlKGluc3RhbGxhdGlvblBhdGgpLnRvRXh0ZXJuYWxGb3JtKCk7Ci0JCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQl9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7Ci0JCQl9Ci0JCQlhc3NlcnRUcnVlKCJmYWlsZWQgdG8gcmVzb2x2ZSBwbHVnaW4gaW5zdGFsbCBwYXRoIiwgZGlza0xvY2F0aW9uICE9IG51bGwpOwotCQkJU3RyaW5nIGNvbnRlbnQgPSAiPD94bWwgdmVyc2lvbj1cIjEuMFwiPz48IURPQ1RZUEUgaHRtbCBTWVNURU0gIiArIGRpc2tMb2NhdGlvbiArICJUZXN0RmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sMjAuZHRkXCIiICsgIj48aHRtbCB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIiB4bWxuczp3bWw9XCJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy8yMDAxL3dtbFwiPjwvaHRtbD4iOwotCQkJZk1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldChjb250ZW50KTsKLQkJCUNNRG9jdW1lbnRNYW5hZ2VyIGRvY3VtZW50TWFuYWdhZXIgPSBmTW9kZWxRdWVyeS5nZXRDTURvY3VtZW50TWFuYWdlcigpOwotCQkJZG9jdW1lbnRNYW5hZ2Flci5zZXRQcm9wZXJ0eUVuYWJsZWQoQ01Eb2N1bWVudE1hbmFnZXIuUFJPUEVSVFlfQVNZTkNfTE9BRCwgZmFsc2UpOwotCQkJZG9jdW1lbnRNYW5hZ2Flci5zZXRQcm9wZXJ0eUVuYWJsZWQoQ01Eb2N1bWVudE1hbmFnZXIuUFJPUEVSVFlfQVVUT19MT0FELCB0cnVlKTsKLQotCQkJTm9kZSBkb21Ob2RlID0gKE5vZGUpIGZNb2RlbC5nZXRJbmRleGVkUmVnaW9uKGNvbnRlbnQubGVuZ3RoKCkgLSAyKTsKLQkJCUNNTm9kZSBub2RlID0gZk1vZGVsUXVlcnkuZ2V0Q01Ob2RlKGRvbU5vZGUpOwotCQkJYXNzZXJ0VHJ1ZSgid21sMjAuZHRkIGZhaWxlZCB0byBsb2FkIiwgbm9kZSAhPSBudWxsICYmIG5vZGUuZ2V0Tm9kZU5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKCJodG1sIikpOwotCQl9Ci0JfQotCi0KLQkvKioKLQkgKiBBIHNob3J0IHRlc3QgdG8gZW5zdXJlIHRoYXQgYSBEVEQsIHRoZSBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsIG9uZSwgY2FuCi0JICogYmUgbG9hZGVkIGZyb20gYSBzeXN0ZW0gcmVmZXJlbmNlLgotCSAqIAotCSAqIE5vdGU6IE1heSByZXF1aXJlIGEgZnVuY3Rpb25pbmcgbmV0d29yayBjb25uZWN0aW9uIGZvciB0aGUgcmVmZXJlbmNlcwotCSAqIHRvIGJlIHJlc29sdmVkIHByb3Blcmx5LgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3REVERMb2FkRnJvbVN5c3RlbUlEXzIoKSB7Ci0JCWlmICh0ZXN0U2hpcHBlZERURExvb2t1cCkgewotCQkJVVJMIGluc3RhbGxhdGlvblBhdGggPSBQbGF0Zm9ybS5nZXRCdW5kbGUoSlNQVUlUZXN0c1BsdWdpbi5JRCkuZ2V0RW50cnkoIi8iKTsKLQkJCVN0cmluZyBkaXNrTG9jYXRpb24gPSBudWxsOwotCQkJdHJ5IHsKLQkJCQlkaXNrTG9jYXRpb24gPSBQbGF0Zm9ybS5yZXNvbHZlKGluc3RhbGxhdGlvblBhdGgpLnRvRXh0ZXJuYWxGb3JtKCk7Ci0JCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQl9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7Ci0JCQl9Ci0JCQlhc3NlcnRUcnVlKCJmYWlsZWQgdG8gcmVzb2x2ZSBwbHVnaW4gaW5zdGFsbCBwYXRoIiwgZGlza0xvY2F0aW9uICE9IG51bGwpOwotCQkJc2V0VXBYTUwoKTsKLQkJCVN0cmluZyBjb250ZW50ID0gIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+PCFET0NUWVBFIGh0bWwgU1lTVEVNICIgKyBkaXNrTG9jYXRpb24gKyAidGVzdGZpbGVzL1hIVE1ML3hodG1sMS10cmFuc2l0aW9uYWwuZHRkXCIiICsgIj48aHRtbD48L2h0bWw+IjsKLQkJCWZNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoY29udGVudCk7Ci0KLQkJCUNNRG9jdW1lbnRNYW5hZ2VyIGRvY3VtZW50TWFuYWdhZXIgPSBmTW9kZWxRdWVyeS5nZXRDTURvY3VtZW50TWFuYWdlcigpOwotCQkJZG9jdW1lbnRNYW5hZ2Flci5zZXRQcm9wZXJ0eUVuYWJsZWQoQ01Eb2N1bWVudE1hbmFnZXIuUFJPUEVSVFlfQVNZTkNfTE9BRCwgZmFsc2UpOwotCQkJZG9jdW1lbnRNYW5hZ2Flci5zZXRQcm9wZXJ0eUVuYWJsZWQoQ01Eb2N1bWVudE1hbmFnZXIuUFJPUEVSVFlfQVVUT19MT0FELCB0cnVlKTsKLQotCQkJLy8gc2VlIGRlZmVjdCAyODI0MjkKLQkJCUNNRWxlbWVudERlY2xhcmF0aW9uIGh0bWxEZWNsID0gKENNRWxlbWVudERlY2xhcmF0aW9uKSBmTW9kZWxRdWVyeS5nZXRDTU5vZGUoKE5vZGUpIGZNb2RlbC5nZXRJbmRleGVkUmVnaW9uKGNvbnRlbnQubGVuZ3RoKCkgLSAyKSk7Ci0JCQlhc3NlcnRUcnVlKCJ4aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCBub3QgbG9hZGVkIiwgaHRtbERlY2wgIT0gbnVsbCk7Ci0KLQkJCS8vIEhUTUwncyBjaGlsZHJlbiBhcmUgd2l0aGluIGEgZ3JvdXAKLQkJCUNNQ29udGVudCBjb250ZW50cyA9IGh0bWxEZWNsLmdldENvbnRlbnQoKTsKLQotCQkJYXNzZXJ0VHJ1ZSgiY29udGVudCB0eXBlIGlzIG5vdCBhIGdyb3VwIiwgY29udGVudHMuZ2V0Tm9kZVR5cGUoKSA9PSBDTU5vZGUuR1JPVVApOwotCi0JCQlDTUdyb3VwIGdyb3VwID0gKENNR3JvdXApIGNvbnRlbnRzOwotCQkJaW50IG9wZXJhdG9yID0gZ3JvdXAuZ2V0T3BlcmF0b3IoKTsKLQkJCUNNTm9kZUxpc3QgY2hpbGRMaXN0ID0gZ3JvdXAuZ2V0Q2hpbGROb2RlcygpOwotCQkJaW50IG1heCA9IGNvbnRlbnRzLmdldE1heE9jY3VyKCk7Ci0JCQlpbnQgbWluID0gY29udGVudHMuZ2V0TWluT2NjdXIoKTsKLQotCQkJLy8gdGhlIGdyb3VwIHNob3VsZCBiZSBhbGxvd2VkIG9uY2UsIHdpdGggYSBzZXF1ZW5jZSB3aG9zZSBmaXJzdAotCQkJLy8gZW50cnkKLQkJCS8vIGlzIHRoZSBkZWNsYXJhdGlvbiBmb3IgSEVBRAotCQkJYXNzZXJ0VHJ1ZSgib2NjdXJyYW5jZSBvZiBncm91cCIsIG1pbiA9PSAxICYmIG1heCA9PSAxKTsKLQkJCWFzc2VydFRydWUoInJlbGF0aW9uc2hpcCBpbiBncm91cCIsIG9wZXJhdG9yID09IENNR3JvdXAuU0VRVUVOQ0UpOwotCQkJYXNzZXJ0VHJ1ZSgiY29udGVudCBkZXNjcmlwdG9yIHR5cGUsIHBvc2l0aW9uIDAiLCBjb250ZW50cy5nZXROb2RlVHlwZSgpID09IENNTm9kZS5HUk9VUCk7Ci0JCQlhc3NlcnRUcnVlKCJjaGlsZCBvcmRlciAoSEVBRCBmaXJzdCkiLCBjaGlsZExpc3QuaXRlbSgwKS5nZXROb2RlTmFtZSgpLmVxdWFscyhIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuSEVBRC50b0xvd2VyQ2FzZSgpKSk7Ci0JCQlhc3NlcnRUcnVlKCJjaGlsZCBvcmRlciAoQk9EWSBzZWNvbmQpIiwgY2hpbGRMaXN0Lml0ZW0oMSkuZ2V0Tm9kZU5hbWUoKS5lcXVhbHMoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLkJPRFkudG9Mb3dlckNhc2UoKSkpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQSBzaG9ydCB0ZXN0IHRvIGVuc3VyZSB0aGF0IHRoZSBEVEQgZm9yIEpTUCAxLjIgdGFnIGxpYnJhcmllcyBjYW4gYmUKLQkgKiBsb2FkZWQgZnJvbSBhIHB1YmxpYyByZWZlcmVuY2UgcmVnaXN0ZXJlZCBpbiB0aGUgWE1MIGNhdGFsb2cKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RFRETG9hZEZyb21QdWJsaWNJRCgpIHsKLQkJLy8gTm8gbG9uZ2VyIHByb3ZpZGVkIGluIFdUUAotCQkvLyBUT0RPOiBwcm92aWRlIERURD8KLS8vCQlpZiAodGVzdFNoaXBwZWREVERMb29rdXApIHsKLS8vCQkJc2V0VXBYTUwoKTsKLS8vCQkJU3RyaW5nIGNvbnRlbnRzID0gIjwhRE9DVFlQRSB0YWdsaWIgUFVCTElDIFwiLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIEpTUCBUYWcgTGlicmFyeSAxLjIvL0VOXCI+IDx0YWdsaWI+PHRhZz5mb288L3RhZz48L3RhZ2xpYj4iOwotLy8JCQlmTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KGNvbnRlbnRzKTsKLS8vCi0vLwkJCUNNRG9jdW1lbnRNYW5hZ2VyIGRvY3VtZW50TWFuYWdhZXIgPSBmTW9kZWxRdWVyeS5nZXRDTURvY3VtZW50TWFuYWdlcigpOwotLy8JCQlkb2N1bWVudE1hbmFnYWVyLnNldFByb3BlcnR5RW5hYmxlZChDTURvY3VtZW50TWFuYWdlci5QUk9QRVJUWV9BU1lOQ19MT0FELCBmYWxzZSk7Ci0vLwkJCWRvY3VtZW50TWFuYWdhZXIuc2V0UHJvcGVydHlFbmFibGVkKENNRG9jdW1lbnRNYW5hZ2VyLlBST1BFUlRZX0FVVE9fTE9BRCwgdHJ1ZSk7Ci0vLwotLy8KLS8vCQkJLy8gdGFnbGliCi0vLwkJCUNNTm9kZSBub2RlID0gZk1vZGVsUXVlcnkuZ2V0Q01Ob2RlKChOb2RlKSBmTW9kZWwuZ2V0SW5kZXhlZFJlZ2lvbihjb250ZW50cy5sZW5ndGgoKSAtIDIpKTsKLS8vCQkJYXNzZXJ0VHJ1ZSgid2ViLWpzcHRhZ2xpYnJhcnlfMV8yLmR0ZCBmYWlsZWQgdG8gbG9hZCB0aHJvdWdoIGNhdGFsb2ciLCBub2RlICE9IG51bGwgJiYgbm9kZS5nZXROb2RlVHlwZSgpID09IENNTm9kZS5FTEVNRU5UX0RFQ0xBUkFUSU9OICYmIG5vZGUuZ2V0Tm9kZU5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKCJ0YWdsaWIiKSk7Ci0vLwotLy8JCQkvLyB0YWcKLS8vCQkJbm9kZSA9IGZNb2RlbFF1ZXJ5LmdldENNTm9kZSgoTm9kZSkgZk1vZGVsLmdldEluZGV4ZWRSZWdpb24oY29udGVudHMubGVuZ3RoKCkgLSAxMikpOwotLy8JCQlhc3NlcnRUcnVlKCJDTUVsZW1lbnREZWNsYXJhdGlvbiBmb3IgXCJ0YWdcIiBmcm9tIHdlYi1qc3B0YWdsaWJyYXJ5XzFfMi5kdGQgaXMgbWlzc2luZyIsIG5vZGUgIT0gbnVsbCAmJiBub2RlLmdldE5vZGVUeXBlKCkgPT0gQ01Ob2RlLkVMRU1FTlRfREVDTEFSQVRJT04gJiYgbm9kZS5nZXROb2RlTmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoInRhZyIpKTsKLS8vCQkJQ01Db250ZW50IGNvbnRlbnQgPSAoKENNRWxlbWVudERlY2xhcmF0aW9uKSBub2RlKS5nZXRDb250ZW50KCk7Ci0vLwkJCWFzc2VydFRydWUoIm9ubHkgb25lIG9jY3VycmVuY2Ugb2YgY2hpbGQgZ3JvdXAgYWxsb3dlZCIsIGNvbnRlbnQuZ2V0Tm9kZVR5cGUoKSA9PSBDTU5vZGUuR1JPVVAgJiYgY29udGVudC5nZXRNYXhPY2N1cigpID09IDEpOwotLy8JCX0KLQl9Ci0KLQotCi0JcHVibGljIHN0YXRpYyBJU3RydWN0dXJlZE1vZGVsIGNyZWF0ZU1vZGVsKFN0cmluZyBjb250ZW50VHlwZUlEKSB7Ci0JCS8vIGNyZWF0ZSBhbiBlbXB0eSBtb2RlbCB3aXRoIGl0cyBkZWZhdWx0IGZhY3RvcmllcwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoY29udGVudFR5cGVJRCk7Ci0KLQkJLy8gYWRkIGVkaXRvciBhZGFwdGVyIGZhY3RvcmllcwotCQlBZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5IGFkYXB0ZXJSZWdpc3RyeSA9IEpTUFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRBZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5KCk7Ci0JCUl0ZXJhdG9yIGFkYXB0ZXJMaXN0ID0gYWRhcHRlclJlZ2lzdHJ5LmdldEFkYXB0ZXJGYWN0b3JpZXMoKTsKLQkJLy8gQW5kIGFsbCB0aG9zZSBhcHByb3ByaWF0ZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHR5cGUgb2YgY29udGVudAotCQl3aGlsZSAoYWRhcHRlckxpc3QuaGFzTmV4dCgpKSB7Ci0JCQl0cnkgewotCQkJCUFkYXB0ZXJGYWN0b3J5UHJvdmlkZXIgcHJvdmlkZXIgPSAoQWRhcHRlckZhY3RvcnlQcm92aWRlcikgYWRhcHRlckxpc3QubmV4dCgpOwotCQkJCWlmIChwcm92aWRlci5pc0Zvcihtb2RlbC5nZXRNb2RlbEhhbmRsZXIoKSkpIHsKLQkJCQkJcHJvdmlkZXIuYWRkQWRhcHRlckZhY3Rvcmllcyhtb2RlbCk7Ci0JCQkJfQotCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQlMb2dnZXIubG9nRXhjZXB0aW9uKGUpOwotCQkJfQotCQl9Ci0JCXJldHVybiBtb2RlbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIHZhbGlkIHZhbHVlcyBmb3IgYW4gYXR0cmlidXRlIHdpdGggdGhlIGdpdmVuIGRlY2xhcmF0aW9uIG9uCi0JICogdGhlIGdpdmVuIGVsZW1lbnQuIERlcml2ZWQgZnJvbSBYTUxQcm9wZXJ0eVNvdXJjZQotCSAqLwotCXByaXZhdGUgTGlzdCBnZXRWYWxpZFN0cmluZ3MoRWxlbWVudCBlbGVtZW50LCBDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIGF0dHJEZWNsKSB7Ci0JCUNNRGF0YVR5cGUgdmFsdWVzSGVscGVyID0gYXR0ckRlY2wuZ2V0QXR0clR5cGUoKTsKLQkJVmVjdG9yIHZhbHVlcyA9IG5ldyBWZWN0b3IoKTsKLQotCQlpZiAodmFsdWVzSGVscGVyLmdldEltcGxpZWRWYWx1ZUtpbmQoKSA9PSBDTURhdGFUeXBlLklNUExJRURfVkFMVUVfRklYRUQgJiYgdmFsdWVzSGVscGVyLmdldEltcGxpZWRWYWx1ZSgpICE9IG51bGwpIHsKLQkJCS8vIEZJWEVEIHZhbHVlCi0JCQl2YWx1ZXMuYWRkKHZhbHVlc0hlbHBlci5nZXRJbXBsaWVkVmFsdWUoKSk7Ci0JCX0gZWxzZSB7Ci0JCQkvLyBFTlVNRVJBVEVEIHZhbHVlcwotCQkJU3RyaW5nW10gdmFsdWVTdHJpbmdzID0gbnVsbDsKLQkJCS8vIG5ldyB3YXkKLQkJCXZhbHVlU3RyaW5ncyA9IGZNb2RlbFF1ZXJ5LmdldFBvc3NpYmxlRGF0YVR5cGVWYWx1ZXMoZWxlbWVudCwgYXR0ckRlY2wpOwotCQkJaWYgKHZhbHVlU3RyaW5ncyA9PSBudWxsKQotCQkJCS8vIG9sZGVyIHdheQotCQkJCXZhbHVlU3RyaW5ncyA9IGF0dHJEZWNsLmdldEF0dHJUeXBlKCkuZ2V0RW51bWVyYXRlZFZhbHVlcygpOwotCQkJaWYgKHZhbHVlU3RyaW5ncyAhPSBudWxsKSB7Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZVN0cmluZ3MubGVuZ3RoOyBpKyspIHsKLQkJCQkJdmFsdWVzLmFkZCh2YWx1ZVN0cmluZ3NbaV0pOwotCQkJCX0KLQkJCX0KLQkJfQotCQlpZiAodmFsdWVzSGVscGVyLmdldEltcGxpZWRWYWx1ZUtpbmQoKSAhPSBDTURhdGFUeXBlLklNUExJRURfVkFMVUVfTk9ORSAmJiB2YWx1ZXNIZWxwZXIuZ2V0SW1wbGllZFZhbHVlKCkgIT0gbnVsbCkgewotCQkJaWYgKCF2YWx1ZXMuY29udGFpbnModmFsdWVzSGVscGVyLmdldEltcGxpZWRWYWx1ZSgpKSkKLQkJCQl2YWx1ZXMuYWRkKHZhbHVlc0hlbHBlci5nZXRJbXBsaWVkVmFsdWUoKSk7Ci0JCX0KLQotCQlyZXR1cm4gdmFsdWVzOwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvQ29sb3JSZWdpb25zLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL0NvbG9yUmVnaW9ucy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmVjY2RmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvQ29sb3JSZWdpb25zLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMub3RoZXI7Ci0KLS8qKgotICogSW5zZXJ0IHRoZSB0eXBlJ3MgZGVzY3JpcHRpb24gaGVyZS4KLSAqIENyZWF0aW9uIGRhdGU6ICg3LzIxLzAwIDQ6MTQ6NDAgUE0pCi0gKiBAYXV0aG9yOiBEYXZpZCBXaWxsaWFtcwotICovCi1wdWJsaWMgY2xhc3MgQ29sb3JSZWdpb25zIGV4dGVuZHMgamF2YS51dGlsLlZlY3RvciB7Ci0JLyoqCi0JICogRGVmYXVsdCA8Y29kZT5zZXJpYWxWZXJzaW9uVUlEPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0JLyoqCi0JICogQ29sb3JSZWdpb25zIGNvbnN0cnVjdG9yIGNvbW1lbnQuCi0JICovCi0JcHVibGljIENvbG9yUmVnaW9ucygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBDb2xvclJlZ2lvbnMgY29uc3RydWN0b3IgY29tbWVudC4KLQkgKiBAcGFyYW0gaW5pdGlhbENhcGFjaXR5IGludAotCSAqLwotCXB1YmxpYyBDb2xvclJlZ2lvbnMoaW50IGluaXRpYWxDYXBhY2l0eSkgewotCQlzdXBlcihpbml0aWFsQ2FwYWNpdHkpOwotCX0KLQotCS8qKgotCSAqIENvbG9yUmVnaW9ucyBjb25zdHJ1Y3RvciBjb21tZW50LgotCSAqIEBwYXJhbSBpbml0aWFsQ2FwYWNpdHkgaW50Ci0JICogQHBhcmFtIGNhcGFjaXR5SW5jcmVtZW50IGludAotCSAqLwotCXB1YmxpYyBDb2xvclJlZ2lvbnMoaW50IGluaXRpYWxDYXBhY2l0eSwgaW50IGNhcGFjaXR5SW5jcmVtZW50KSB7Ci0JCXN1cGVyKGluaXRpYWxDYXBhY2l0eSwgY2FwYWNpdHlJbmNyZW1lbnQpOwotCX0KLQotCXB1YmxpYyBpbnRbXSBhc0ludEFycmF5KCkgewotCQl0cmltVG9TaXplKCk7Ci0JCWludCBhcnJheVNpemUgPSBlbGVtZW50RGF0YS5sZW5ndGg7Ci0JCWludFtdIHJlc3VsdHMgPSBuZXcgaW50W2FycmF5U2l6ZV07Ci0JCS8vCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXlTaXplOyBpKyspIHsKLQkJCXJlc3VsdHNbaV0gPSAoKEludGVnZXIpIGVsZW1lbnREYXRhW2ldKS5pbnRWYWx1ZSgpOwotCQl9Ci0JCS8vCi0JCXJldHVybiByZXN1bHRzOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL0RlYnVnRG9jdW1lbnQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvRGVidWdEb2N1bWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2Y0Njc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvRGVidWdEb2N1bWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgSmVucyBMdWtvd3NraS9Jbm5vb3ByYWN0IC0gaW5pdGlhbCByZW5hbWluZy9yZXN0cnVjdHVyaW5nCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5vdGhlcjsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi0KLXB1YmxpYyBjbGFzcyBEZWJ1Z0RvY3VtZW50IHsKLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBkdW1wKERvY3VtZW50IGRvY3VtZW50KSB7Ci0JCWlmIChkb2N1bWVudCA9PSBudWxsKQotCQkJcmV0dXJuOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkR1bXAgb2YgRE9NIik7IC8vJE5PTi1OTFMtMSQKLQotCQlkdW1wKGRvY3VtZW50LCBTeXN0ZW0ub3V0KTsKLQotCQkvLwotCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCI9ID0gPSA9ID0gPSIpOyAvLyROT04tTkxTLTEkCi0JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCi0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGR1bXAoRG9jdW1lbnQgZG9jdW1lbnQsIFByaW50U3RyZWFtIG91dCkgewotCQlOb2RlIG5vZGUgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCXdoaWxlIChub2RlICE9IG51bGwpIHsKLQkJCWR1bXAobm9kZSwgb3V0KTsKLQkJCW5vZGUgPSBub2RlLmdldE5leHRTaWJsaW5nKCk7Ci0JCX0KLQotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBkdW1wKE5vZGUgdG9wTm9kZSkgewotCQlkdW1wKHRvcE5vZGUsIFN5c3RlbS5vdXQpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBkdW1wKE5vZGUgdG9wTm9kZSwgUHJpbnRTdHJlYW0gb3V0KSB7Ci0JCWlmICh0b3BOb2RlID09IG51bGwpCi0JCQlyZXR1cm47Ci0JCS8vIHByaW50IG91dCB0aGlzIG5vZGUKLQkJLy8KLQkJcHJpbnROb2RlKHRvcE5vZGUsIG91dCk7Ci0KLQkJLy8gbm93IHByaW50IG91dCBpdHMgY2hpbGRyZW4KLQkJLy9Ob2RlTGlzdCBub2RlcyA9IHRvcE5vZGUuZ2V0Q2hpbGROb2RlcygpOwotCQkvL2ludCBsZW4gPSBub2Rlcy5nZXRMZW5ndGgoKTsKLQkJLy9mb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0KLQkJLy9Ob2RlIG5vZGUgPSBub2Rlcy5pdGVtKGkpOwotCQkvL2R1bXAobm9kZSwgb3V0KTsKLQkJLy99Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHByaW50Tm9kZShOb2RlIHRvcE5vZGUpIHsKLQkJcHJpbnROb2RlKHRvcE5vZGUsIFN5c3RlbS5vdXQpOwotCi0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHByaW50Tm9kZShOb2RlIHRvcE5vZGUsIFByaW50U3RyZWFtIG91dCkgewotCQkvLyBwcmludCBvdXQgdGhpcyBub2RlCi0JCS8vCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gPSAoKElET01Ob2RlKSB0b3BOb2RlKS5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGxhc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gPSAoKElET01Ob2RlKSB0b3BOb2RlKS5nZXRMYXN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCWlmICgoZmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gPT0gbnVsbCkgfHwgKGxhc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gPT0gbnVsbCkpIHsKLQkJCS8vIG5vIHRleHQgdG8gb3V0cHV0Ci0JCX0gZWxzZSB7Ci0JCQlpbnQgc3RhcnQgPSBmaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbi5nZXRTdGFydCgpOwotCQkJaW50IGVuZCA9IGxhc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24uZ2V0RW5kKCk7Ci0KLQkJCVN0cmluZyBvdXRTdHJpbmcgPSB0b3BOb2RlLnRvU3RyaW5nKCk7Ci0JCQlvdXRTdHJpbmcgPSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudXRpbC5TdHJpbmdVdGlscy5lc2NhcGUob3V0U3RyaW5nKTsKLQkJCW91dC5wcmludGxuKCJbIiArIHN0YXJ0ICsgIiwgIiArIGVuZCArICJdIiArIG91dFN0cmluZyk7IC8vJE5PTi1OTFMtMyQvLyROT04tTkxTLTIkLy8kTk9OLU5MUy0xJAotCQl9Ci0JCS8vIG5vdyBkbyBpdHMgY2hpbGRyZW4KLQkJTm9kZUxpc3Qgbm9kZXMgPSB0b3BOb2RlLmdldENoaWxkTm9kZXMoKTsKLQkJaW50IGxlbiA9IG5vZGVzLmdldExlbmd0aCgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCQlOb2RlIGNoaWxkTm9kZSA9IG5vZGVzLml0ZW0oaSk7Ci0JCQlwcmludE5vZGUoY2hpbGROb2RlLCBvdXQpOwotCQl9Ci0KLQl9Ci0KLQlwdWJsaWMgRGVidWdEb2N1bWVudCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvU2Nhbm5lclVuaXRUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9TY2FubmVyVW5pdFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhNzZhNmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9TY2FubmVyVW5pdFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5vdGhlcjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuTW9kZWxIYW5kbGVyRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5yZWdpb25zLkRPTUpTUFJlZ2lvbkNvbnRleHRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsubW9kZWxoYW5kbGVyLklNb2RlbEhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmx0ay5wYXJzZXIuQmxvY2tNYXJrZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmx0ay5wYXJzZXIuQmxvY2tUYWdQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5Db3JlTm9kZUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5Nb2RlbEhhbmRsZXJGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnJlZ2lvbnMuRE9NUmVnaW9uQ29udGV4dDsKLQotLyoqCi0gKiBAYXV0aG9yIE5pdGluIERhaHlhYmhhaSA8bml0aW5kQHVzLmlibS5jb20+Ci0gKi8KLXB1YmxpYyBjbGFzcyBTY2FubmVyVW5pdFRlc3RzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKElUZXh0UmVnaW9uTGlzdCByZWdpb25zLCBTdHJpbmdbXSBjb250ZXh0cywgU3RyaW5nW11bXSBlbWJlZGRlZENvbnRleHRzKSB7Ci0KLQkJaW50IGVtYmVkQ291bnQgPSAwOwotCQlJdGVyYXRvciBpdGVyYXRvciA9IHJlZ2lvbnMuaXRlcmF0b3IoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZXh0cy5sZW5ndGg7IGkrKykgewotCQkJaWYgKCFpdGVyYXRvci5oYXNOZXh0KCkpCi0JCQkJcmV0dXJuIGZhbHNlOwotCQkJSVRleHRSZWdpb24gcmVnaW9uID0gKElUZXh0UmVnaW9uKSBpdGVyYXRvci5uZXh0KCk7Ci0JCQlpZiAocmVnaW9uLmdldFR5cGUoKSA9PSBjb250ZXh0c1tpXSkgewotCQkJCWlmIChyZWdpb24gaW5zdGFuY2VvZiBJVGV4dFJlZ2lvbkNvbnRhaW5lcikgewotCQkJCQlJVGV4dFJlZ2lvbkNvbnRhaW5lciBjb250YWluZXIgPSAoSVRleHRSZWdpb25Db250YWluZXIpIHJlZ2lvbjsKLQkJCQkJYm9vbGVhbiBlbWJlZGRlZFJlc3VsdCA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnQoY29udGFpbmVyLCBlbWJlZGRlZENvbnRleHRzW2VtYmVkQ291bnRdLmxlbmd0aCkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhjb250YWluZXIuZ2V0UmVnaW9ucygpLCBlbWJlZGRlZENvbnRleHRzW2VtYmVkQ291bnRdKTsKLQkJCQkJZW1iZWRDb3VudCsrOwotCQkJCQlpZiAoZW1iZWRkZWRSZXN1bHQpCi0JCQkJCQljb250aW51ZTsKLQkJCQkJZWxzZQotCQkJCQkJcmV0dXJuIGZhbHNlOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBjaGVja01vZGVsTGVuZ3RoKElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQsIGludCBsZW5ndGgpIHsKLQkJcmV0dXJuIGNoZWNrTW9kZWxMZW5ndGgoZG9jdW1lbnQuZ2V0TGFzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpLCBsZW5ndGgpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBjaGVja01vZGVsTGVuZ3RoKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uLCBpbnQgbGVuZ3RoKSB7Ci0JCXJldHVybiByZWdpb24uZ2V0RW5kT2Zmc2V0KCkgPT0gbGVuZ3RoOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KElUZXh0UmVnaW9uQ29udGFpbmVyIHJlZ2lvbkNvbnRhaW5lciwgaW50IHNpemUpIHsKLQotCQkvLyB5ZXMsIHRoaXMgbG9va3Mgc2lsbHksIGJ1dCBpdCBtYWtlcyBpdCBlYXNpZXIgdG8gZmluZCB0aGUgZXhhY3QKLQkJLy8gZmFpbHVyZSBwb2ludAotCQlpZiAoIShyZWdpb25Db250YWluZXIuZ2V0UmVnaW9ucygpLnNpemUoKSA9PSBzaXplKSkKLQkJCXJldHVybiBmYWxzZTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IHJlZ2lvbkNvbnRhaW5lcnMsIGludFtdIHNpemVzKSB7Ci0KLQkJaW50IGNvbnRhaW5lcnMgPSByZWdpb25Db250YWluZXJzLmdldExlbmd0aCgpOwotCQlpZiAoY29udGFpbmVycyAhPSBzaXplcy5sZW5ndGgpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZXMubGVuZ3RoOyBpKyspIHsKLQkJCWlmIChpID49IGNvbnRhaW5lcnMpCi0JCQkJcmV0dXJuIGZhbHNlOwotCQkJaWYgKHJlZ2lvbkNvbnRhaW5lcnMuaXRlbShpKS5nZXROdW1iZXJPZlJlZ2lvbnMoKSA9PSBzaXplc1tpXSkKLQkJCQljb250aW51ZTsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhJVGV4dFJlZ2lvbkxpc3QgcmVnaW9ucywgU3RyaW5nW10gY29udGV4dHMpIHsKLQotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRleHRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlJVGV4dFJlZ2lvbiByZWdpb24gPSByZWdpb25zLmdldChpKTsKLQkJCWlmIChyZWdpb24uZ2V0VHlwZSgpID09IGNvbnRleHRzW2ldKQotCQkJCWNvbnRpbnVlOwotCQkJLy8JCQllbHNlCi0JCQkvLwkJCQlTeXMoInJlZ2lvbiAiKyBpICsgIjogIityZWdpb24uZ2V0VHlwZSgpKyIgIT0gIiArIGNvbnRleHRzW2ldKTsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBsb2FkQ2hhcnMoSW5wdXRTdHJlYW0gaW5wdXQpIHsKLQotCQlTdHJpbmdCdWZmZXIgcyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJdHJ5IHsKLQkJCWludCBjID0gLTE7Ci0JCQl3aGlsZSAoKGMgPSBpbnB1dC5yZWFkKCkpID49IDApIHsKLQkJCQlpZiAoYyA+IDI1NSkKLQkJCQkJYnJlYWs7Ci0JCQkJcy5hcHBlbmQoKGNoYXIpIGMpOwotCQkJfQotCQkJaW5wdXQuY2xvc2UoKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJBbiBJL08gZXJyb3Igb2NjdXJlZCB3aGlsZSBzY2FubmluZyA6Iik7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBzLnRvU3RyaW5nKCk7Ci0JfQotCi0JLyoqCi0JICogU3RhcnRzIHRoZSBhcHBsaWNhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYW4gYXJyYXkgb2YgY29tbWFuZC1saW5lIGFyZ3VtZW50cwotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0KLQkJaWYgKGFyZ3MgPT0gbnVsbCB8fCBhcmdzLmxlbmd0aCA9PSAwKSB7Ci0JCQlydW5BbGwoKTsKLQkJfQotCQllbHNlIGlmIChhcmdzLmxlbmd0aCA9PSAxKSB7Ci0JCQlTdHJpbmcgbWV0aG9kVG9SdW4gPSBhcmdzWzBdLnRyaW0oKTsKLQkJCXJ1bk9uZShtZXRob2RUb1J1bik7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgcnVuQWxsKCkgewotCi0JCWp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgcnVuT25lKFN0cmluZyBtZXRob2ROYW1lKSB7Ci0KLQkJVGVzdFN1aXRlIHRlc3RTdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLQkJVGVzdENhc2UgdGVzdCA9IG5ldyBTY2FubmVyVW5pdFRlc3RzKG1ldGhvZE5hbWUpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdCh0ZXN0KTsKLQkJanVuaXQudGV4dHVpLlRlc3RSdW5uZXIucnVuKHRlc3RTdWl0ZSk7Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCi0JCXJldHVybiBuZXcgVGVzdFN1aXRlKFNjYW5uZXJVbml0VGVzdHMuY2xhc3MpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB2ZXJpZnlMZW5ndGhzKGludCBzdGFydE9mZnNldCwgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBmaXJzdERvY3VtZW50UmVnaW9uLCBTdHJpbmcgdGV4dCkgewotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGhvbGRSZWdpb24gPSBmaXJzdERvY3VtZW50UmVnaW9uOwotCQlhc3NlcnRUcnVlKCJkb2N1bWVudCBkb2VzIG5vdCBzdGFydCBhdCBleHBlY3RlZCBvZmZzZXQiLCBob2xkUmVnaW9uLmdldFN0YXJ0T2Zmc2V0KCkgPT0gc3RhcnRPZmZzZXQpOwotCQlpbnQgbGFzdEVuZCA9IDA7Ci0JCXdoaWxlIChob2xkUmVnaW9uICE9IG51bGwgJiYgaG9sZFJlZ2lvbi5nZXRFbmRPZmZzZXQoKSA+IDApIHsKLQkJCWFzc2VydFRydWUoInplcm8tbGVuZ3RoIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBmb3VuZCIsIGhvbGRSZWdpb24uZ2V0U3RhcnRPZmZzZXQoKSA9PSBsYXN0RW5kKTsKLQkJCWFzc2VydFRydWUoIlRleHRSZWdpb25sZXNzIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBmb3VuZCIsIGhvbGRSZWdpb24uZ2V0TnVtYmVyT2ZSZWdpb25zKCkgPiAwKTsKLQkJCUlUZXh0UmVnaW9uTGlzdCBsaXN0ID0gaG9sZFJlZ2lvbi5nZXRSZWdpb25zKCk7Ci0JCQlpbnQgaW5kZXggPSAwOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0LnNpemUoKTsgaSsrKSB7Ci0JCQkJSVRleHRSZWdpb24gcmVnaW9uID0gbGlzdC5nZXQoaSk7Ci0JCQkJYXNzZXJ0VHJ1ZSgidGV4dCByZWdpb24gc2VhbXMgZG9uJ3QgbWF0Y2giLCByZWdpb24uZ2V0U3RhcnQoKSA9PSBpbmRleCk7Ci0JCQkJaW5kZXggKz0gcmVnaW9uLmdldExlbmd0aCgpOwotCQkJfQotCQkJbGFzdEVuZCA9IGhvbGRSZWdpb24uZ2V0RW5kT2Zmc2V0KCk7Ci0JCQlob2xkUmVnaW9uID0gaG9sZFJlZ2lvbi5nZXROZXh0KCk7Ci0JCX0KLQotCQlob2xkUmVnaW9uID0gZmlyc3REb2N1bWVudFJlZ2lvbjsKLQkJd2hpbGUgKGhvbGRSZWdpb24gIT0gbnVsbCAmJiBob2xkUmVnaW9uLmdldE5leHQoKSAhPSBudWxsKSB7Ci0JCQlob2xkUmVnaW9uID0gaG9sZFJlZ2lvbi5nZXROZXh0KCk7Ci0JCX0KLQkJY2hlY2tNb2RlbExlbmd0aChob2xkUmVnaW9uLCB0ZXh0Lmxlbmd0aCgpKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdmVyaWZ5TGVuZ3RocyhpbnQgc3RhcnRPZmZzZXQsIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IGxpc3QsIFN0cmluZyB0ZXh0KSB7Ci0JCXZlcmlmeUxlbmd0aHMoc3RhcnRPZmZzZXQsIGxpc3QuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHZlcmlmeUxlbmd0aHMoSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCwgU3RyaW5nIHRleHQpIHsKLQkJdmVyaWZ5TGVuZ3RocygwLCBkb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdmVyaWZ5TGVuZ3RocyhJU3RydWN0dXJlZE1vZGVsIG1vZGVsLCBTdHJpbmcgdGV4dCkgewotCQl2ZXJpZnlMZW5ndGhzKG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLCB0ZXh0KTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSVN0cnVjdHVyZWREb2N1bWVudCBmTW9kZWw7Ci0JcHJvdGVjdGVkIFN0cmluZyBpbnB1dDsKLQlwcml2YXRlIEJsb2NrVGFnUGFyc2VyIHBhcnNlcjsKLQlwcm90ZWN0ZWQgT2JqZWN0IHR5cGU7Ci0KLQlwdWJsaWMgU2Nhbm5lclVuaXRUZXN0cyhTdHJpbmcgbmFtZSkgewotCi0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGFwcGVuZFRhZ0Jsb2NrKFN0cmluZ0J1ZmZlciBidWZmZXIsIFN0cmluZyB0YWduYW1lLCBpbnQgbGVuZ3RoKSB7Ci0KLQkJYnVmZmVyLmFwcGVuZCgnPCcpOwotCQlidWZmZXIuYXBwZW5kKHRhZ25hbWUpOwotCQlidWZmZXIuYXBwZW5kKCc+Jyk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCi0JCQlidWZmZXIuYXBwZW5kKCdfJyk7Ci0JCWJ1ZmZlci5hcHBlbmQoIjwvIik7Ci0JCWJ1ZmZlci5hcHBlbmQodGFnbmFtZSk7Ci0JCWJ1ZmZlci5hcHBlbmQoJz4nKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHsKLQotCQlzZXRVcFhNTChudWxsKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgc2V0VXBKU1AoU3RyaW5nIHRleHQpIHsKLQotCQlzZXR1cE1vZGVsKG5ldyBNb2RlbEhhbmRsZXJGb3JKU1AoKSk7Ci0JCXBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcgQmxvY2tNYXJrZXIoInNjcmlwdCIsIG51bGwsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwgZmFsc2UpKTsKLQkJcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldyBCbG9ja01hcmtlcigic3R5bGUiLCBudWxsLCBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsIGZhbHNlKSk7Ci0JCXBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcgQmxvY2tNYXJrZXIoImRpc2FsbG93SlNQIiwgbnVsbCwgRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhULCB0cnVlLCBmYWxzZSkpOwotCi0JCS8qCi0JCSAqIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoImNvbnRlbnQgPHNjcmlwdD4KLQkJICogPCU9IGV4cHJlc3Npb24gJT4gPC9zY3JpcHQ+IDxhPiA8L2E+IDxmb286ZGlzYWxsb3dKU1A+IDwlPSAlPgotCQkgKiA8L2ZvbzpkaXNhbGxvd0pTUD4gPiIpOyBwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3Ci0JCSAqIEJsb2NrTWFya2VyKCJqc3A6ZGVjbGFyYXRpb24iLCBudWxsLAotCQkgKiBYTUxKU1BSZWdpb25Db250ZXh0cy5KU1BfQ09OVEVOVCwgdHJ1ZSkpOyBwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3Ci0JCSAqIEJsb2NrTWFya2VyKCJqc3A6ZXhwcmVzc2lvbiIsIG51bGwsCi0JCSAqIFhNTEpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT05URU5ULCB0cnVlKSk7IHBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcKLQkJICogQmxvY2tNYXJrZXIoImpzcDpzY3JpcHRsZXQiLCBudWxsLAotCQkgKiBYTUxKU1BSZWdpb25Db250ZXh0cy5KU1BfQ09OVEVOVCwgdHJ1ZSkpOwotCQkgKi8KLQkJaW5wdXQgPSB0ZXh0OwotCQlmTW9kZWwuc2V0KGlucHV0KTsKLQkJcmV0dXJuIGZNb2RlbC5nZXRSZWdpb25MaXN0KCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0dXBNb2RlbChJTW9kZWxIYW5kbGVyIGNvbnRlbnRUeXBlKSB7Ci0KLQkJZk1vZGVsID0gKElTdHJ1Y3R1cmVkRG9jdW1lbnQpIGNvbnRlbnRUeXBlLmdldERvY3VtZW50TG9hZGVyKCkuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCXRoaXMucGFyc2VyID0gKEJsb2NrVGFnUGFyc2VyKSBmTW9kZWwuZ2V0UGFyc2VyKCk7Ci0JfQotCi0JcHJvdGVjdGVkIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IHNldFVwWE1MKFN0cmluZyB0ZXh0KSB7Ci0KLQkJc2V0dXBNb2RlbChuZXcgTW9kZWxIYW5kbGVyRm9yWE1MKCkpOwotCQlwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3IEJsb2NrTWFya2VyKCJzY3JpcHQiLCBudWxsLCBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsIGZhbHNlKSk7Ci0JCXBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcgQmxvY2tNYXJrZXIoInN0eWxlIiwgbnVsbCwgRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhULCBmYWxzZSkpOwotCQlwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3IEJsb2NrTWFya2VyKCJkaXNhbGxvd0pTUCIsIG51bGwsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwgdHJ1ZSwgZmFsc2UpKTsKLQkJaW5wdXQgPSB0ZXh0OwotCQlmTW9kZWwuc2V0KGlucHV0KTsKLQkJcmV0dXJuIGZNb2RlbC5nZXRSZWdpb25MaXN0KCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVzdEJsb2NrU2NhbkJ1ZmZlckJvdW5kYXJpZXMoU3RyaW5nIGNvbnRlbnRUeXBlSUQpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0JCS8vIHRoZSBpbnRlcmVzdGluZyBvZmZzZXRzIGFyZSBhcm91bmQgMTZrICgxNjM4NCkKLQkJLy8gZm9yIChpbnQgaSA9IDE2NTAwOyBpID4gMTYxMDA7IGktLSkgewotCQkvLyBmb3IgKGludCBpID0gMTcwMDA7IGkgPiAxNTAwMDsgaS0tKSB7Ci0JCWZvciAoaW50IGkgPSAxNjM4NCArIDI1OyBpID4gMTYzNjQgLSAyNTsgaS0tKSB7Ci0JCQlTdHJpbmdCdWZmZXIgdGV4dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCWRvY3VtZW50ID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoY29udGVudFR5cGVJRCk7Ci0JCQlhcHBlbmRUYWdCbG9jayh0ZXh0LCAic2NyaXB0IiwgaSk7Ci0JCQlTdHJpbmcgc3RyaW5nID0gdGV4dC50b1N0cmluZygpOwotCQkJdHJ5IHsKLQkJCQlkb2N1bWVudC5zZXRUZXh0KHRoaXMsIHN0cmluZyk7Ci0JCQkJdmVyaWZ5TGVuZ3Rocyhkb2N1bWVudCwgc3RyaW5nKTsKLQkJCQlhc3NlcnRUcnVlKCJ0b28gZmV3IGRvY3VtZW50IHJlZ2lvbnMgW3J1biB2YWx1ZSAiICsgaSArICJdICIsIG5ldyBDb3JlTm9kZUxpc3QoZG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKSkuZ2V0TGVuZ3RoKCkgPT0gMyk7Ci0JCQkJdmVyaWZ5TGVuZ3Rocyhkb2N1bWVudCwgc3RyaW5nKTsKLQkJCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHN0YXJ0VGFnID0gZG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKTsKLQkJCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIG1pZGRsZUJsb2NrID0gc3RhcnRUYWcuZ2V0TmV4dCgpOwotLy8JCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBlbmRUYWcgPSBtaWRkbGVCbG9jay5nZXROZXh0KCk7Ci0JCQkJYXNzZXJ0VHJ1ZSgibm90IGJsb2NrIHRleHQgaW4gbWlkZGxlIiwgbWlkZGxlQmxvY2suZ2V0Rmlyc3RSZWdpb24oKS5nZXRUeXBlKCkgPT0gRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhUKTsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCWFzc2VydE51bGwoImV4Y2VwdGlvbiBjYXVnaHQiICsgZSwgZSk7Ci0JCQl9Ci0JCQkvL1N5c3RlbS5nYygpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJsb2NrU2NhbkJ1ZmZlckJvdW5kYXJpZXNGb3JIVE1MKCkgewotCQl0ZXN0QmxvY2tTY2FuQnVmZmVyQm91bmRhcmllcygib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5odG1sc291cmNlIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJsb2NrU2NhbkJ1ZmZlckJvdW5kYXJpZXNGb3JKU1AoKSB7Ci0JCXRlc3RCbG9ja1NjYW5CdWZmZXJCb3VuZGFyaWVzKCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIik7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHRlc3RCbG9ja1RhZyhJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcykgewotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgNiwgMSwgMywgMX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLAotCQkJCQkJCQlET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhUfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDMpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0VORF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pCi0JCQkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSg0KS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCbG9ja1RhZ19KU1AoKSB7Ci0JCXRlc3RCbG9ja1RhZyhzZXRVcEpTUCgiYmVnaW4gPHNjcklQdCB0eXBlPVwicGwyXCI+IDwvc2NyaXAgdD48L3NjcmlwdHM+PC9zY3JpcHRzIDwvLy88IS0gLS0tPjwvc0NySVB0PiBlbmQiKSk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgYmxvY2sgdGFnIHNjYW5uaW5nIGJldHdlZW4gWE1MIGNvbnRlbnQKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QmxvY2tUYWdfWE1MKCkgewotCi0JCXRlc3RCbG9ja1RhZyhzZXRVcFhNTCgiYmVnaW4gPHNjcklQdCB0eXBlPVwicGwyXCI+IDwvc2NyaXAgdD48L3NjcmlwdHM+PC9zY3JpcHRzIDwvLy88IS0gLS0tPjwvc0NySVB0PiBlbmQiKSk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgYmxvY2sgdGFnIHNjYW5uaW5nIGJldHdlZW4gWE1MIGNvbnRlbnQKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QmxvY2tUYWdXaXRoSlNQRXhwcmVzc2lvbnMoKSB7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiYmVnaW4gPHNjcmlwdCB0eXBlPVwicGwyXCI+IDwlPSBcImV4cHJlc3Npb25cIiU+IDwvc2NySVB0PiA8YT48L2E+IDxkaXNhbGxvd0pTUD4gPCU9IFwiZXhwcmVzc2lvblwiICU+IDwvZGlzYWxsb3dKU1A+IGVuZCIpOwotCi0JCS8vIE9MRAotCQkvLwkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDYsCi0JCS8vIDMsIDMsIDEsIDMsIDMsIDEsIDMsIDMsIDMsIDF9KTsKLQkJLy8gTkVXCi0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCA2LCAzLCAzLCAxLCAzLCAzLCAxLCAzLCAxLCAzLCAxfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJaW50IGkgPSAwOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsCi0JCQkJCQkJCURPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pCi0JCQkJCSYmIGNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwgRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhUfSwgbmV3IFN0cmluZ1tdW117e0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FWFBSRVNTSU9OX09QRU4sCi0JCQkJCQkJCURPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT05URU5ULCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ0xPU0V9fSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGkrKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfRU5EX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGkrKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pCi0JCQkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGkrKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfRU5EX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGkrKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pCi0JCQkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkKLQkJCQkJLy8gQ09SUkVDVCBCRUhBVklPUgotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFR9KQotCQkJCQkvLyBPTEQsIEJST0tFTiBCRUhBVklPUgotCQkJCQkvLwkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpKyspLmdldFJlZ2lvbnMoKSwKLQkJCQkJLy8gbmV3Ci0JCQkJCS8vIFN0cmluZ1tdewotCQkJCQkvLwkJCQlYTUxSZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsCi0JCQkJCS8vCQkJCVhNTFJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwKLQkJCQkJLy8JCQkJWE1MUmVnaW9uQ29udGV4dC5CTE9DS19URVhUfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGkrKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfRU5EX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGkrKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgdGVzdEJ1ZmZlclVuZGVyUnVuXzEoSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMpIHsKLQotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgNiwgMn0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLAotCQkJCQkJCQlET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX1RFWFR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJ1ZmZlclVuZGVyUnVuXzFfSlNQKCkgewotCQl0ZXN0QnVmZmVyVW5kZXJSdW5fMShzZXRVcEpTUCgiY29udGVudCA8dGFnIGE9Yi8+PCEtLWMiKSk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgZm9yIGJ1ZmZlciB1bmRlci1ydW5zIG9uIGJsb2NrIHNjYW5uaW5nCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJ1ZmZlclVuZGVyUnVuXzFfWE1MKCkgewotCQl0ZXN0QnVmZmVyVW5kZXJSdW5fMShzZXRVcFhNTCgiY29udGVudCA8dGFnIGE9Yi8+PCEtLWMiKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHRlc3RCdWZmZXJVbmRlclJ1bl8yKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzKSB7Ci0KLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDYsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywKLQkJCQkJCQkJRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfT1BFTn0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QnVmZmVyVW5kZXJSdW5fMl9KU1AoKSB7Ci0KLQkJdGVzdEJ1ZmZlclVuZGVyUnVuXzIoc2V0VXBKU1AoImNvbnRlbnQgPHRhZyBhPWIvPjwhLS0iKSk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgZm9yIGJ1ZmZlciB1bmRlci1ydW5zIG9uIGJsb2NrIHNjYW5uaW5nCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJ1ZmZlclVuZGVyUnVuXzJfWE1MKCkgewotCi0JCXRlc3RCdWZmZXJVbmRlclJ1bl8yKHNldFVwWE1MKCJjb250ZW50IDx0YWcgYT1iLz48IS0tIikpOwotCX0KLQotCXByaXZhdGUgdm9pZCB0ZXN0Q0RBVEEoSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMpIHsKLQotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgMywgMX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ0RBVEFfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ0RBVEFfVEVYVCwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ0RBVEFfQ0xPU0V9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFfSlNQKCkgewotCi0JCXRlc3RDREFUQShzZXRVcEpTUCgiYSA8IVtDREFUQVs8PiEhPCEhPjwvJiYmLS08IS0tXV0+IGIiKSk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgQ0RBVEEgc2VjdGlvbiBzY2FubmluZyBiZXR3ZWVuIGNvbnRlbnQKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFfWE1MKCkgewotCi0JCXRlc3RDREFUQShzZXRVcFhNTCgiYSA8IVtDREFUQVs8PiEhPCEhPjwvJiYmLS08IS0tXV0+IGIiKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja0pTUDEoKSB7Ci0JCXNldFVwSlNQKCI8c2NyaXB0PjwhW0NEQVRBWyBjb250ZW50c11dPjwvc2NyaXB0PiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tKU1AyKCkgewotCQlzZXRVcEpTUCgiPHNjcmlwdD48IVtDREFUQVs8L3NjcmlwdD5dXT48L3NjcmlwdD4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrSlNQMmEoKSB7Ci0JCXNldFVwSlNQKCI8c2NyaXB0PjwhW0NEQVRBW2NvbnRlbnRzPC9zY3JpcHQ+XV0+PC9zY3JpcHQ+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja0pTUDJiKCkgewotCQlzZXRVcEpTUCgiPHNjcmlwdD48IVtDREFUQVs8L3NjcmlwdD5jb250ZW50c11dPjwvc2NyaXB0PiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tKU1AzKCkgewotCQlzZXRVcEpTUCgiPHNjcmlwdD48IVtDREFUQVtdXT48L3NjcmlwdD4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrSlNQNCgpIHsKLQkJc2V0VXBKU1AoIjxzY3JpcHQ+PCFbQ0RBVEFbIF1dPiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tKU1A1KCkgewotCQlzZXRVcEpTUCgiPHNjcmlwdD48IVtDREFUQVsgXV1dPiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tKU1A2KCkgewotCQlzZXRVcEpTUCgiPHNjcmlwdD48IVtDREFUQVsgXV0iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrSlNQNygpIHsKLQkJc2V0VXBKU1AoIjxzY3JpcHQ+PCFbQ0RBVEFbICIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tKU1A4KCkgewotCQlzZXRVcEpTUCgiPHNjcmlwdD48IVtDREFUQVsiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrWE1MMSgpIHsKLQkJc2V0VXBYTUwoIjxzY3JpcHQ+PCFbQ0RBVEFbIF1dPjwvc2NyaXB0PiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tYTUwyKCkgewotCQlzZXRVcFhNTCgiPHNjcmlwdD48IVtDREFUQVs8L3NjcmlwdD5dXT48L3NjcmlwdD4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrWE1MMygpIHsKLQkJc2V0VXBYTUwoIjxzY3JpcHQ+PCFbQ0RBVEFbXV0+PC9zY3JpcHQ+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja1hNTDQoKSB7Ci0JCXNldFVwWE1MKCI8c2NyaXB0PjwhW0NEQVRBWyBdXT4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrWE1MNSgpIHsKLQkJc2V0VXBYTUwoIjxzY3JpcHQ+PCFbQ0RBVEFbIF1dXT4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrWE1MNigpIHsKLQkJc2V0VXBYTUwoIjxzY3JpcHQ+PCFbQ0RBVEFbIF1dIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja1hNTDcoKSB7Ci0JCXNldFVwWE1MKCI8c2NyaXB0PjwhW0NEQVRBWyAiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrWE1MOCgpIHsKLQkJc2V0VXBYTUwoIjxzY3JpcHQ+PCFbQ0RBVEFbIik7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgY29tbWVudHMgYmV0d2VlbiBYTUwgY29udGVudAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDb21tZW50c19KU1AoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gImEgPCEtLSAtLT48IS0tLS0+PCUtLSAtLSU+IGIiOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgMywgMiwgMywgMX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX1RFWFQsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfQ0xPU0V9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX0NMT1NFfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDMpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX1RFWFQsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX0NMT1NFfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDQpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgY29tbWVudHMgYmV0d2VlbiBKU1AgY29udGVudAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDb21tZW50c19YTUwoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gImEgPCEtLSAtLT48PCEtLS0tPmIiOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwWE1MKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgMywgMSwgMiwgMX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX1RFWFQsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfQ0xPU0V9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU59KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX0NMT1NFfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDQpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHRlc3RDb250ZW50KElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzKSB7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBzaW1wbGUgY29udGVudCBzY2FubmluZwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDb250ZW50SlNQKCkgewotCi0JCXRlc3RDb250ZW50KHNldFVwSlNQKCJoZWxsbyB3b3JsZCIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29udGVudFhNTCgpIHsKLQotCQl0ZXN0Q29udGVudChzZXRVcFhNTCgiaGVsbG8gd29ybGQiKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERvbGxhcnNpZ25fTGVhZGluZygpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiPGEgdHlwZT1cIiQgXCIvPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117Nn0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywKLQkJCQkJRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REb2xsYXJzaWduX1NpbmdsZSgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiPGEgdHlwZT1cIiRcIi8+Iik7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLAotCQkJCQlET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERvbGxhcnNpZ25fU2luZ2xlV2l0aFNwYWNlcygpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiPGEgdHlwZT1cIiAkIFwiLz4iKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezZ9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsCi0JCQkJCURPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RUxpbkNvbnRlbnQoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gIiR7b3V0LmZvb30iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCXNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnQoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDApKSwgMyk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcygoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoMCkpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FTF9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRUxfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0VMX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEVMdG9sZXJhbmNlX3RyYW5zcGFyZW5jeV9EcXVvdGUoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoIjxhIHR5cGU9XCIke291dC5mb299XCIvPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117Nn0pOwotCQlzaXplQ2hlY2sgJj0gY2hlY2tTaW1wbGVSZWdpb25Db3VudCgoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoNCkpLCA1KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsCi0JCQkJCURPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pOwotCQl0eXBlQ2hlY2sgJj0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcygoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoNCkpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0VMX09QRU4sCi0JCQkJCURPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FTF9DT05URU5ULCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRUxfQ0xPU0UsIERPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RUx0b2xlcmFuY2VfdHJhbnNwYXJlbmN5X0RxdW90ZVdpdGhTcGFjZXMoKSB7Ci0JCS8vIG5vdGU6IHdoaXRlc3BhY2Ugb24gZWl0aGVyIHNpZGUgcmV0dXJucyBhIFdISVRFX1NQQUNFIGNvbnRleHQKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiPGEgdHlwZT1cIl8ke291dC5mb299X1wiLz4iKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezZ9KTsKLQkJc2l6ZUNoZWNrICY9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnQoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKSwgNyk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLAotCQkJCQlET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KTsKLQkJdHlwZUNoZWNrICY9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsCi0JCQkJCURPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FTF9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRUxfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0VMX0NMT1NFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEV9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVMdG9sZXJhbmNlX3RyYW5zcGFyZW5jeV9TcXVvdGUoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoIjxhIHR5cGU9JyR7b3V0LmZvb30nLz4iKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezZ9KTsKLQkJc2l6ZUNoZWNrICY9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnQoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKSwgNSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLAotCQkJCQlET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KTsKLQkJdHlwZUNoZWNrICY9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9TUVVPVEUsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FTF9PUEVOLAotCQkJCQlET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRUxfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0VMX0NMT1NFLCBET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9TUVVPVEV9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtYmVkZGVkSlNQRGVjbGFyYXRpb24oKSB7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiY29udGVudCA8Zm9vIGJhcj1cIjwlISBpbnQgZm9vOyAlPlwiIGJhej1cImlsXCI+Iik7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCA5fSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pCi0JCQkJCSYmIGNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLAotCQkJCQkJCQlET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0UsfSwKLQkJCQkJCQkJbmV3IFN0cmluZ1tdW117e0RPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0RFQ0xBUkFUSU9OX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT05URU5ULCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ0xPU0UsCi0JCQkJCQkJCQkJCURPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URSwgRE9NUmVnaW9uQ29udGV4dC5XSElURV9TUEFDRX19KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtYmVkZGVkSlNQRGVjbGFyYXRpb25JbkNEQVRBKCkgewotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKCI8IVtDREFUQVs8JSElPl1dPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117M30pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tDb21wbGV4UmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9URVhULCBET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9DTE9TRSx9LCBuZXcgU3RyaW5nW11bXXt7Ci0JCQkJCURPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9ERUNMQVJBVElPTl9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ0xPU0V9fSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbWJlZGRlZEpTUEV4cHJlc3Npb24oKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoImNvbnRlbnQgPGZvbyBiYXI9XCI8JT0gXCJIZWxsbywgV29ybGRcIiU+XCIgYmF6PVwiaWxcIj4iKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDl9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkKLQkJCQkJJiYgY2hlY2tDb21wbGV4UmVnaW9uVHlwZXMobm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsCi0JCQkJCQkJCURPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRSx9LAotCQkJCQkJCQluZXcgU3RyaW5nW11bXXt7RE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRVhQUkVTU0lPTl9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NMT1NFLAotCQkJCQkJCQkJCQlET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEUsIERPTVJlZ2lvbkNvbnRleHQuV0hJVEVfU1BBQ0V9fSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbWJlZGRlZEpTUEV4cHJlc3Npb25JbkNEQVRBKCkgewotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKCI8IVtDREFUQVs8JT0lPl1dPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117M30pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tDb21wbGV4UmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9URVhULCBET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9DTE9TRSx9LCBuZXcgU3RyaW5nW11bXXt7Ci0JCQkJCURPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FWFBSRVNTSU9OX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DTE9TRX19KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtYmVkZGVkSlNQU2NyaXB0bGV0KCkgewotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKCJjb250ZW50IDxmb28gYmFyPVwiPCUgICU+XCIgYmF6PVwiaWxcIj4iKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDl9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkKLQkJCQkJJiYgY2hlY2tDb21wbGV4UmVnaW9uVHlwZXMobm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsCi0JCQkJCQkJCURPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRSx9LAotCQkJCQkJCQluZXcgU3RyaW5nW11bXXt7RE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfU0NSSVBUTEVUX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT05URU5ULCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ0xPU0UsCi0JCQkJCQkJCQkJCURPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URSwgRE9NUmVnaW9uQ29udGV4dC5XSElURV9TUEFDRX19KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtYmVkZGVkSlNQU2NyaXB0bGV0SW5DREFUQSgpIHsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKCI8IVtDREFUQVs8JSU+XV0+Iik7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXszfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja0NvbXBsZXhSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NEQVRBX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NEQVRBX1RFWFQsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NEQVRBX0NMT1NFLH0sIG5ldyBTdHJpbmdbXVtde3sKLQkJCQkJRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX1NDUklQVExFVF9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ0xPU0V9fSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbWJlZGRlZFRhZ0luQXR0cigpIHsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKCI8YSBocmVmPVwiPGpzcDpnZXRQcm9wZXJ0eS8+XCI+Iik7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja0NvbXBsZXhSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywKLQkJCQkJRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSwgbmV3IFN0cmluZ1tdW117e0RPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLAotCQkJCQlET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0UsIERPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URX19KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUF9ESFRNTGltcG9ydCgpIHsKLQkJU3RyaW5nIHRleHQgPSAiPGE+IDw/aW1wb3J0IHR5cGU9XCJmb29cIj4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MywgMSwgNn0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1BJX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLAotCQkJCQlET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9QSV9DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2RlcywgdGV4dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUF9QSSgpIHsKLQkJU3RyaW5nIHRleHQgPSAiYmVnaW4gPD9waHAgYXNkYTtsc2dqYWxnO2xhc2psYWpnbGFqc2xrYWpsZ2Fqc2xqZ2FsamdsYWo/PmVuZCI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCA0LCAxfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1BJX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9QSV9DT05URU5ULCBET01SZWdpb25Db250ZXh0LlhNTF9QSV9DTE9TRX0pCi0JCQkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgyKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BBbXBlcnNhbmRJblRhZ05hbWVJbkF0dFZhbHVlKCkgewotCQlTdHJpbmcgdGV4dCA9ICI8YSBocmVmPVwiPGEmYj5cIi8+IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezcsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQgKHRhZykiLCBzaXplQ2hlY2spOwotCQlzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSksIDQpOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCAoYnJva2VuIGVtYmVkZGVkIHRhZykiLCBzaXplQ2hlY2spOwotCi0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywKLQkJCQkJRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayAodGFnKSIsIHR5cGVDaGVjayk7Ci0JCXR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwKLQkJCQkJRE9NUmVnaW9uQ29udGV4dC5VTkRFRklORUR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayAoYnJva2VuIGVtYmVkZGVkIHRhZykiLCB0eXBlQ2hlY2spOwotCQl0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIChjb250ZW50KSIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMsIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BDb21tZW50SW5YTUxDb21tZW50KCkgewotCQlTdHJpbmcgdGV4dCA9ICJzPCEtLVxuPCUtLWMtLSU+XG4tLT5cbjxodG1sPlxuPGJvZHk+PHNjcmlwdD4gPCUtLWMtLSU+IDwvc2NyaXB0PlxuIjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDUsIDEsIDMsIDEsIDMsIDMsIDMsIDMsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlpbnQgaXRlbSA9IDA7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pCi0JCQkJCSYmIGNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaXRlbSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfVEVYVCwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9URVhULCBET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX1RFWFQsCi0JCQkJCQkJCURPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfQ0xPU0V9LCBuZXcgU3RyaW5nW11bXXt7RE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTU1FTlRfT1BFTiwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTU1FTlRfVEVYVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTU1FTlRfQ0xPU0V9fSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pCi0JCQkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pCi0JCQkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KQotCQkJCQkmJiBjaGVja0NvbXBsZXhSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhULCBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVH0sIG5ldyBTdHJpbmdbXVtde3tET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9PUEVOLAotCQkJCQkJCQlET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9URVhULCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9DTE9TRX19KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaXRlbSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9FTkRfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oOSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayB0aGF0IGpzcDpkaXJlY3RpdmUuKGluY2x1ZGV8cGFnZXx0YWdsaWIpIGFyZSByZWNvZ25pemVkIGFuZAotCSAqIHRyZWF0ZWQgcHJvcGVybHkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQRGlyZWN0aXZlVGFncygpIHsKLQkJU3RyaW5nIHRleHQgPSAiYmVnaW4gPGpzcDpkaXJlY3RpdmUudGFnbGliPiA8anNwOmRpcmVjdGl2ZS5wYWdlIGE+IDxqc3A6ZGlyZWN0aXZlLmluY2x1ZGUgYT0+IDxqc3A6ZGlyZWN0aXZlLnBhZ2VzIGE9Yj4gZW5kIjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDMsIDEsIDQsIDEsIDUsIDEsIDYsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRElSRUNUSVZFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pCi0JCQkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgyKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDMpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRElSRUNUSVZFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDQpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9ESVJFQ1RJVkVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywKLQkJCQkJCQkJRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDYpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLAotCQkJCQkJCQlET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oOCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQRG9sbGFyc2lnbl9UcmFpbGluZygpIHsKLQkJU3RyaW5nIHRleHQgPSAiPGEgdHlwZT1cIiAkXCIvPiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLAotCQkJCQlET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUERvbGxhcnNpZ25fVHJhaWxpbmdJbkNvbnRlbnQoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gIm5ubiQ8YSB0eXBlPVwiICRcIi8+IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDEsIDZ9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2sgKGNvbnRlbnQpIiwgdHlwZUNoZWNrKTsKLQkJdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayAoY29udGVudCkiLCB0eXBlQ2hlY2spOwotCQl0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLAotCQkJCQlET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayAodGFnKSIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgSlNQIGNvZGUgc2VjdGlvbnMgYmV0d2VlbiBIVE1MIGNvbnRlbnQKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQRXhwcmVzc2lvbigpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiYmVnaW4gPCU9IFwiSGVsbG8sV29ybGRcIiAlPiBlbmQiKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDEsIDEsIDEsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FWFBSRVNTSU9OX09QRU59KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NMT1NFfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDQpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUEdyZWF0ZXJUaGFuSW5BdHRWYWx1ZSgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiPGEgdHlwZT1cIj5uZXh0XCIvPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117Nn0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBpcyBub3Qgc29tcGxlIiwgIShub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoNCkgaW5zdGFuY2VvZiBJVGV4dFJlZ2lvbkNvbnRhaW5lcikpOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsCi0JCQkJCURPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQSW52YWxpZFRhZ05hbWVJbkF0dFZhbHVlKCkgewotCQlTdHJpbmcgdGV4dCA9ICJTPGEgdHlwZT1cImE8NFwiLz4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgNn0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCAodGFnKSIsIHNpemVDaGVjayk7Ci0JCXNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnQoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCkuZ2V0KDQpKSwgNSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50IChhdHQgdmFsdWUpIiwgc2l6ZUNoZWNrKTsKLQkJdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywKLQkJCQkJRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2sgKHRhZykiLCB0eXBlQ2hlY2spOwotCQl0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLmdldCg0KSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLAotCQkJCQlET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2sgKGF0dCB2YWx1ZSkiLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BMZXNzVGhhbkluQXR0VmFsdWUoKSB7Ci0JCS8vYmFpbHMgb3V0IG9mIHRoZSBhdHRyaWJ1dGUgdmFsdWUgd2l0aCBhbiBVTkRFRklORUQgcmVnaW9uIGZvciB0aGUKLQkJLy8gZW5kIHF1b3RlCi0JCVN0cmluZyB0ZXh0ID0gIjxidXR0b24gbGFiZWw9XCI8cHJldmlvdXNcIi8+IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezZ9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSksIDQpOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCAoYXR0IHZhbHVlKSIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywKLQkJCQkJRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsCi0JCQkJCURPTVJlZ2lvbkNvbnRleHQuVU5ERUZJTkVEfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2sgKGF0dCB2YWx1ZSkiLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIEpTUCBjb2RlIHNlY3Rpb25zLCBhcyBhIHRhZywgc2Nhbm5pbmcgYmV0d2VlbiBIVE1MIGNvbnRlbnQKLQkgKi8KLQkvLwlwdWJsaWMgdm9pZCB0ZXN0SlNQU2NyaXB0bGV0VGFnKCkgewotCS8vCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKCJiZWdpbiA8anNwOnNjcmlwdGxldD4KLQkvLyBpbnQgZm9vID0gYmFyOyAvLzxqc3A6U2NyaXB0bGV0Pi8vPC9qc3A6c2NyaXB0bGV0czwvanNwOnNjcmlwdGxldD4KLQkvLyBlbmQiKTsKLQkvLwkKLQkvLwkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDMsIDEsCi0JLy8gMywKLQkvLyAxfSk7Ci0JLy8JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50IiwKLQkvLyBzaXplQ2hlY2spOwotCS8vCi0JLy8JCWJvb2xlYW4gdHlwZUNoZWNrID0KLQkvLwkJCWNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXsKLQkvLwkJCQlYTUxSZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkKLQkvLwkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXsKLQkvLwkJCQlYTUxSZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwKLQkvLwkJCQlYTUxSZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwKLQkvLwkJCQlYTUxSZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KQotCS8vCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tdewotCS8vCQkJCVhNTEpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT05URU5UfSkKLQkvLwkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgzKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXsKLQkvLwkJCQlYTUxSZWdpb25Db250ZXh0LlhNTF9FTkRfVEFHX09QRU4sCi0JLy8JCQkJWE1MUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsCi0JLy8JCQkJWE1MUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkKLQkvLwkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSg0KS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXsKLQkvLwkJCQlYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfQ09OVEVOVH0pOwotCS8vCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkvLwkJCi0JLy8JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JLy8JfQotCS8qKgotCSAqIENoZWNrIEpTUCBjb2RlIHNlY3Rpb25zLCBhcyBhIHRhZywgc2Nhbm5pbmcgYmV0d2VlbiBIVE1MIGNvbnRlbnQKLQkgKi8KLQkvLwlwdWJsaWMgdm9pZCB0ZXN0SlNQVGV4dFRhZygpIHsKLQkvLwkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiYmVnaW4gPGpzcDp0ZXh0PiBpbnQKLQkvLyBmb28KLQkvLyA9IGJhcjsgLy88anNwOlRFWFQ+Ly88L2pzcDpUZXh0czwvanNwOnRleHQ+IDxhPiA8L2E+IGVuZCIpOwotCS8vCQotCS8vCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgMywgMSwKLQkvLyAzLAotCS8vIDEsIDMsIDEsIDMsIDF9KTsKLQkvLwkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLAotCS8vIHNpemVDaGVjayk7Ci0JLy8KLQkvLwkJYm9vbGVhbiB0eXBlQ2hlY2sgPQotCS8vCQkJY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tdewotCS8vCQkJCVhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9DT05URU5UfSkKLQkvLwkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXsKLQkvLwkJCQlYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX09QRU4sCi0JLy8JCQkJWE1MSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19OQU1FLAotCS8vCQkJCVhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQ0xPU0V9KQotCS8vCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tdewotCS8vCQkJCVhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9DREFUQV9URVhUfSkKLQkvLwkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgzKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXsKLQkvLwkJCQlYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfRU5EX1RBR19PUEVOLAotCS8vCQkJCVhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfTkFNRSwKLQkvLwkJCQlYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0NMT1NFfSkKLQkvLwkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSg0KS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXsKLQkvLwkJCQlYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfQ09OVEVOVH0pCi0JLy8JCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117Ci0JLy8JCQkJWE1MSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19PUEVOLAotCS8vCQkJCVhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfTkFNRSwKLQkvLwkJCQlYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0NMT1NFfSkKLQkvLwkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSg2KS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXsKLQkvLwkJCQlYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfQ09OVEVOVH0pCi0JLy8JCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117Ci0JLy8JCQkJWE1MSlNQUmVnaW9uQ29udGV4dHMuWE1MX0VORF9UQUdfT1BFTiwKLQkvLwkJCQlYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX05BTUUsCi0JLy8JCQkJWE1MSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19DTE9TRX0pCi0JLy8JCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oOCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117Ci0JLy8JCQkJWE1MSlNQUmVnaW9uQ29udGV4dHMuWE1MX0NPTlRFTlR9KTsKLQkvLwkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JLy8JCQotCS8vCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCS8vCX0KLQkvKioKLQkgKiBDaGVjayB0aGF0IGpzcDpyb290IGlzIHJlY29nbml6ZWQgYW5kIHRyZWF0ZWQgcHJvcGVybHkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQUm9vdFRhZygpIHsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKCJiZWdpbiA8anNwOnJvb3Q+IDxqc3A6cm9vdHMgYT4gPGpzcDpyb28gYT0+IDwvanNwOnJvb3QgYT1iPjxhPmVuZCIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgMywgMSwgNCwgMSwgNSwgMSwgNiwgMywgMX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9ST09UX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pCi0JCQkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgzKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDQpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLAotCQkJCQkJCQlET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pCi0JCQkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSg3KS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9FTkRfVEFHX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9ST09UX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLAotCQkJCQkJCQlET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oOCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oOSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQVGFnSW5BdHRWYWx1ZSgpIHsKLQkJU3RyaW5nIHRleHQgPSAiPGEgdHlwZT1cIjxhLz5cIi8+IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezZ9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSksIDUpOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywKLQkJCQkJRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2sgKHRhZykiLCB0eXBlQ2hlY2spOwotCQl0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsCi0JCQkJCURPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2sgKGF0dCB2YWx1ZSkiLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm90aGluZ2luQmxvY2tKU1A5KCkgewotCQlTdHJpbmcgdGV4dCA9ICI8c2NyaXB0PiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXszfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vdGhpbmdpbkJsb2NrWE1MOSgpIHsKLQkJU3RyaW5nIHRleHQgPSAiPHNjcmlwdD4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwWE1MKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117M30pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXByaXZhdGUgdm9pZCB0ZXN0U2ltcGxlVGFnKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzKSB7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCAxMCwgMX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwKLQkJCQkJCQkJRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsCi0JCQkJCQkJCURPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgyKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVUYWdfSlNQKCkgewotCQl0ZXN0U2ltcGxlVGFnKHNldFVwSlNQKCIwIDx0YWduYW1lIGF0dHIxIGF0dHIyPXZhbHVlMiBhdHRyMz1cInZhbHVlM1wiPiAxIikpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIHNpbXBsZSB0YWcgc2Nhbm5pbmcgYmV0d2VlbiBYTUwgY29udGVudAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVUYWdfWE1MKCkgewotCQl0ZXN0U2ltcGxlVGFnKHNldFVwWE1MKCIwIDx0YWduYW1lIGF0dHIxIGF0dHIyPXZhbHVlMiBhdHRyMz1cInZhbHVlM1wiPiAxIikpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RWQkxpbkNvbnRlbnQoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gIiN7b3V0LmZvb30iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCXNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnQoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDApKSwgMyk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcygoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoMCkpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9WQkxfT1BFTiwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX1ZCTF9DT05URU5ULCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfVkJMX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RWQkx0b2xlcmFuY2VfdHJhbnNwYXJlbmN5X0RxdW90ZSgpIHsKLQkJU3RyaW5nIHRleHQgPSAiPGEgdHlwZT1cIiN7b3V0LmZvb31cIi8+IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezZ9KTsKLQkJc2l6ZUNoZWNrICY9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnQoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKSwgNSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLAotCQkJCQlET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KTsKLQkJdHlwZUNoZWNrICY9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEUsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9WQkxfT1BFTiwKLQkJCQkJRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX1ZCTF9DT05URU5ULCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfVkJMX0NMT1NFLCBET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEV9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFZCTHRvbGVyYW5jZV90cmFuc3BhcmVuY3lfRHF1b3RlV2l0aFNwYWNlcygpIHsKLQkJLy8gbm90ZTogd2hpdGVzcGFjZSBvbiBlaXRoZXIgc2lkZSByZXR1cm5zIGEgV0hJVEVfU1BBQ0UgY29udGV4dAotCQlTdHJpbmcgdGV4dCA9ICI8YSB0eXBlPVwiXyN7b3V0LmZvb31fXCIvPiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCXNpemVDaGVjayAmPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSksIDcpOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywKLQkJCQkJRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCXR5cGVDaGVjayAmPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLAotCQkJCQlET01KU1BSZWdpb25Db250ZXh0cy5KU1BfVkJMX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9WQkxfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX1ZCTF9DTE9TRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RWQkx0b2xlcmFuY2VfdHJhbnNwYXJlbmN5X1NxdW90ZSgpIHsKLQkJU3RyaW5nIHRleHQgPSAiPGEgdHlwZT0nI3tvdXQuZm9vfScvPiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCXNpemVDaGVjayAmPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSksIDUpOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywKLQkJCQkJRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCXR5cGVDaGVjayAmPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfU1FVT1RFLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfVkJMX09QRU4sCi0JCQkJCURPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9WQkxfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX1ZCTF9DTE9TRSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfU1FVT1RFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WE1MX0RIVE1MaW1wb3J0KCkgewotCQlTdHJpbmcgdGV4dCA9ICI8YT4gPD9pbXBvcnQgdHlwZT1cImZvb1wiPiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBYTUwodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXszLCAxLCA2fSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfUElfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsCi0JCQkJCURPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1BJX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WE1MX1BJKCkgewotCQlTdHJpbmcgdGV4dCA9ICJiZWdpbiA8P3BocCBhc2RhO2xzZ2phbGc7bGFzamxhamdsYWpzbGthamxnYWpzbGpnYWxqZ2xhaj8+ZW5kIjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcFhNTCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDQsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCi0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfUElfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1BJX0NPTlRFTlQsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1BJX0NMT1NFfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTERvbGxhcnNpZ25fVHJhaWxpbmcoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gIjxhIHR5cGU9XCIgJFwiLz4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwWE1MKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117Nn0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywKLQkJCQkJRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RVbmRlZmluZWRSZWdpb25Db250YWluZXIoKSB7Ci0JCS8vIHNlZSBSQVRMQyBSQVRMQzAwMjg0Nzc2Ci0JCVN0cmluZyB0ZXh0ID0gIjxvcHRpb24gPGVsbXM6aW5wdXRWYWx1ZSB2YWx1ZT1cIjwlPXVvbXZveC51b21JRCU+XCIvPjwlPXVvbXZveC51b21JRC5lcXVhbHModW9tSUQpID8gXCIgc2VsZWN0ZWRcIiA6IFwiXCIlPj4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117NX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBvdmVyYWxsIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJLy8JCWNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcKLQkJLy8gU3RyaW5nW117WE1MUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sCi0JCS8vIFhNTFJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLAotCQkvLyBYTUxSZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsCi0JCS8vIFhNTFJlZ2lvbkNvbnRleHQuVU5ERUZJTkVELCBYTUxSZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9LCBuZXcKLQkJLy8gU3RyaW5nW11bXSB7e319KTsKLQkJdmVyaWZ5RW1iZWRkZWRDb250YWluZXJQYXJlbnRhZ2Uobm9kZXMpOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBub2RlcwotCSAqLwotCXByaXZhdGUgdm9pZCB2ZXJpZnlFbWJlZGRlZENvbnRhaW5lclBhcmVudGFnZShJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcykgewotCQlmb3IgKGludCBpID0gMDsgaSA8IG5vZGVzLmdldExlbmd0aCgpOyBpKyspIHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gciA9IG5vZGVzLml0ZW0oaSk7Ci0JCQlJVGV4dFJlZ2lvbkxpc3QgbGlzdCA9IHIuZ2V0UmVnaW9ucygpOwotCQkJZm9yIChpbnQgaiA9IDA7IGogPCBsaXN0LnNpemUoKTsgaisrKSB7Ci0JCQkJSVRleHRSZWdpb24gcmVnaW9uID0gbGlzdC5nZXQoaik7Ci0JCQkJaWYgKHJlZ2lvbiBpbnN0YW5jZW9mIElUZXh0UmVnaW9uQ29udGFpbmVyKSB7Ci0JCQkJCWFzc2VydE5vdE51bGwoInBhcmVudCBpcyBudWxsIGZvciAiICsgcmVnaW9uLCAoKElUZXh0UmVnaW9uQ29udGFpbmVyKSByZWdpb24pLmdldFBhcmVudCgpKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgYm9vbGVhbiB2ZXJpZnlNb2RlbExlbmd0aCgpIHsKLQkJcmV0dXJuIGNoZWNrTW9kZWxMZW5ndGgoZk1vZGVsLCBpbnB1dC5sZW5ndGgoKSk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvU2Nhbm5pbmdUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9TY2FubmluZ1Rlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNmFhYWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9TY2FubmluZ1Rlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm90aGVyOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wYXJzZXIuSlNQU291cmNlUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5TdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsucGFyc2VyLkJsb2NrTWFya2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsucGFyc2VyLlJlZ2lvblBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb25Db250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb25MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC50ZXh0LlN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkl0ZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC51dGlsLkRlYnVnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC51dGlsLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wYXJzZXIuWE1MU291cmNlUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5yZWdpb25zLkRPTVJlZ2lvbkNvbnRleHQ7Ci0KLS8qKgotICogdGVzdCBjbGFzcyBmb3IgYmFzaWMgcGFyc2luZyBhbmQgc2Nhbm5pbmcKLSAqLwotCi1wdWJsaWMgY2xhc3MgU2Nhbm5pbmdUZXN0cyB7Ci0JcHJpdmF0ZSBzdGF0aWMgSVN0cnVjdHVyZWREb2N1bWVudCB0ZXh0U3RvcmUgPSBudWxsOwotCXByaXZhdGUgc3RhdGljIGxvbmcgc3RhcnRUaW1lID0gMDsKLQlwcml2YXRlIHN0YXRpYyBsb25nIHN0b3BUaW1lID0gMDsKLQotCS8qKgotCSAqIFNjYW5uaW5nVGVzdHMgY29uc3RydWN0b3IgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgU2Nhbm5pbmdUZXN0cygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgY2hlY2tOb2RlU2VhbXMoU3RyaW5nIGZpbGVOYW1lKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ0hFQ0tJTkcgTk9ERSBCT1VOREFSSUVTIEFORCBDT05URU5UUyBGT1IgIiArIGZpbGVOYW1lKTsKLQkJRW51bWVyYXRpb24gZSA9IHBhcnNlRmlsZShmaWxlTmFtZSkuZWxlbWVudHMoKTsKLQkJaW50IGxhc3RFbmQgPSAwOwotCQl3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByID0gKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24pIGUubmV4dEVsZW1lbnQoKTsKLQkJCWlmIChyLmdldFN0YXJ0T2Zmc2V0KCkgIT0gbGFzdEVuZCkKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVSUk9SOiBkcm9wcGVkIGluICIgKyByKTsKLQkJCWlmIChyLmdldE51bWJlck9mUmVnaW9ucygpIDwgMSkKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVSUk9SOiBlbXB0eSBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uICIgKyByKTsKLQkJCWxhc3RFbmQgPSByLmdldEVuZE9mZnNldCgpOwotCQl9Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiRE9ORSIpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBjaGVja1BhcnNlKFN0cmluZyBmaWxlTmFtZSkgewotCQljaGVja1Rva2VuU2VhbXMoZmlsZU5hbWUpOwotCQljaGVja05vZGVTZWFtcyhmaWxlTmFtZSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGNoZWNrVG9rZW5TZWFtcyhTdHJpbmcgZmlsZU5hbWUpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDSEVDS0lORyBUT0tFTklaRVIgUkVHSU9OIEJPVU5EQVJJRVMgRk9SICIgKyBmaWxlTmFtZSk7Ci0JCUl0ZXJhdG9yIGUgPSB0b2tlbml6ZUZpbGUoZmlsZU5hbWUpLml0ZXJhdG9yKCk7Ci0JCWludCBsYXN0RW5kID0gMDsKLQkJd2hpbGUgKGUuaGFzTmV4dCgpKSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHIgPSAoSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbikgZS5uZXh0KCk7Ci0JCQlpZiAoci5nZXRTdGFydE9mZnNldCgpICE9IGxhc3RFbmQpCi0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJFUlJPUjogZHJvcHBlZCBpbiAiICsgcik7Ci0JCQlsYXN0RW5kID0gci5nZXRFbmRPZmZzZXQoKTsKLQkJfQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkRPTkUiKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIGNoYXJbXSBsb2FkQ2hhcnMoU3RyaW5nIGZpbGVOYW1lKSB7Ci0JCWNoYXJbXSBjaGFycyA9IG51bGw7Ci0JCWludCBjID0gMDsKLQkJaW50IGxlbmd0aCA9IDA7Ci0JCWludCBjb3VudCA9IDA7Ci0JCUZpbGUgZmlsZSA9IG51bGw7Ci0JCUZpbGVJbnB1dFN0cmVhbSBmaXMgPSBudWxsOwotCQl0cnkgewotCQkJZmlsZSA9IG5ldyBGaWxlKGZpbGVOYW1lKTsKLQkJCWxlbmd0aCA9IChpbnQpIGZpbGUubGVuZ3RoKCk7Ci0JCQljaGFycyA9IG5ldyBjaGFyW2xlbmd0aF07Ci0JCQlmaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpOwotCQkJd2hpbGUgKCgoYyA9IGZpcy5yZWFkKCkpID49IDApICYmIChjb3VudCA8IGxlbmd0aCkpIHsKLQkJCQljaGFyc1tjb3VudCsrXSA9IChjaGFyKSBjOwotCQkJfQotCQl9Ci0JCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJGaWxlIG5vdCBmb3VuZCA6IFwiIiArIGZpbGVOYW1lICsgIlwiIik7Ci0JCQlTeXN0ZW0uZXhpdCgxKTsKLQkJfQotCQljYXRjaCAoQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVXNhZ2UgOiBqYXZhIEpTUExleGVyMyA8aW5wdXRmaWxlPiIpOwotCQkJU3lzdGVtLmV4aXQoMSk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQW4gSS9PIGVycm9yIG9jY3VyZWQgd2hpbGUgc2Nhbm5pbmcgOiIpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKGUpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gY2hhcnM7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBSZWdpb25QYXJzZXIgbmV3UGFyc2VyKCkgewotCQlKU1BTb3VyY2VQYXJzZXIgcGFyc2VyID0gbmV3IEpTUFNvdXJjZVBhcnNlcigpOwotCQlwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3IEJsb2NrTWFya2VyKCJmb28iLCBudWxsLCBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsIHRydWUpKTsKLQkJcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldyBCbG9ja01hcmtlcigiZ2xvYmFsRm9vIiwgbnVsbCwgRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhULCB0cnVlKSk7Ci0JCS8vCQlwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3IEJsb2NrTWFya2VyKCJqc3A6ZXhwcmVzc2lvbiIsIG51bGwsIFhNTEpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT05URU5ULCB0cnVlKSk7Ci0JCS8vCQlwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3IEJsb2NrTWFya2VyKCJqc3A6c2NyaXB0bGV0IiwgbnVsbCwgWE1MSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTlRFTlQsIHRydWUpKTsKLQkJLy8JCXBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcgQmxvY2tNYXJrZXIoImpzcDpkZWNsYXJhdGlvbiIsIG51bGwsIFhNTEpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT05URU5ULCB0cnVlKSk7Ci0JCS8vCQlwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3IEJsb2NrTWFya2VyKCJqc3A6dGV4dCIsIG51bGwsIFhNTFJlZ2lvbkNvbnRleHQuWE1MX0NEQVRBX1RFWFQsIHRydWUpKTsKLQkJcmV0dXJuIHBhcnNlcjsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFJlZ2lvblBhcnNlciBuZXdYTUxQYXJzZXIoKSB7Ci0JCVhNTFNvdXJjZVBhcnNlciBwYXJzZXIgPSBuZXcgWE1MU291cmNlUGFyc2VyKCk7Ci0JCXBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcgQmxvY2tNYXJrZXIoIlNjcmlwdCIsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwgZmFsc2UpKTsKLQkJcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldyBCbG9ja01hcmtlcigic3R5bEUiLCBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsIGZhbHNlKSk7Ci0JCXJldHVybiBwYXJzZXI7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBWZWN0b3IgcGFyc2UoU3RyaW5nIHN0cmluZ2RhdGEpIHsKLQkJcmV0dXJuIHBhcnNlKHN0cmluZ2RhdGEsIGZhbHNlKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFZlY3RvciBwYXJzZShTdHJpbmcgc3RyaW5nZGF0YSwgYm9vbGVhbiB1c2VYTUwpIHsKLQkJaWYgKERlYnVnLnBlcmZUZXN0KSB7Ci0JCQlzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJfQotCQlSZWdpb25QYXJzZXIgcGFyc2VyID0gbnVsbDsKLQkJaWYgKHVzZVhNTCkKLQkJCXBhcnNlciA9IG5ld1hNTFBhcnNlcigpOwotCQllbHNlCi0JCQlwYXJzZXIgPSBuZXdQYXJzZXIoKTsKLQkJaWYgKERlYnVnLnBlcmZUZXN0KSB7Ci0JCQlzdG9wVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTY2FubmluZ1Rlc3RzIHNwZW50ICIgKyAoc3RvcFRpbWUgLSBzdGFydFRpbWUpICsgIiAobXNlY3MpIGNyZWF0aW5nIGEgIiArIHBhcnNlci5nZXRDbGFzcygpLmdldE5hbWUoKSk7Ci0JCX0KLQkJLy8gQ2F1dGlvbjogY2FzdAotCQlwYXJzZXIucmVzZXQobmV3IFN0cmluZ1JlYWRlcihzdHJpbmdkYXRhKSk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYU5vZGUgPSBzZXROb2RlRG9jdW1lbnQocGFyc2VyLmdldERvY3VtZW50UmVnaW9ucygpKTsKLQkJaWYgKERlYnVnLnBlcmZUZXN0KSB7Ci0JCQlzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJfQotCQl0ZXh0U3RvcmUgPSBTdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5LmdldE5ld1N0cnVjdHVyZWREb2N1bWVudEluc3RhbmNlKHBhcnNlcik7Ci0JCXRleHRTdG9yZS5zZXRUZXh0KG51bGwsIHN0cmluZ2RhdGEpOwotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25JdGVyYXRvci5zZXRQYXJlbnREb2N1bWVudChhTm9kZSwgdGV4dFN0b3JlKTsKLQkJVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7Ci0JCXdoaWxlIChhTm9kZSAhPSBudWxsKSB7Ci0JCQl2LmFkZEVsZW1lbnQoYU5vZGUpOwotCQkJYU5vZGUgPSBhTm9kZS5nZXROZXh0KCk7Ci0JCX0KLQkJaWYgKERlYnVnLnBlcmZUZXN0KSB7Ci0JCQlzdG9wVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTY2FubmluZ1Rlc3RzIHNwZW50ICIgKyAoc3RvcFRpbWUgLSBzdGFydFRpbWUpICsgIiAobXNlY3MpIHNldHRpbmcgdGV4dCBhbmQgc3RvcmluZyBub2RlcyIpOwotCQl9Ci0JCXJldHVybiB2OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgVmVjdG9yIHBhcnNlRmlsZShTdHJpbmcgZmlsZU5hbWUpIHsKLQkJaWYgKERlYnVnLnBlcmZUZXN0KSB7Ci0JCQlzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJfQotCQlpZiAoRGVidWcucGVyZlRlc3QpIHsKLQkJCXN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQl9Ci0JCWNoYXJbXSBpbnB1dCA9IGxvYWRDaGFycyhmaWxlTmFtZSk7Ci0JCWlmIChEZWJ1Zy5wZXJmVGVzdCkgewotCQkJc3RvcFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU2Nhbm5pbmdUZXN0cyBzcGVudCAiICsgKHN0b3BUaW1lIC0gc3RhcnRUaW1lKSArICIgKG1zZWNzKSBsb2FkaW5nICIgKyBmaWxlTmFtZSk7Ci0JCX0KLQkJcmV0dXJuIHBhcnNlKG5ldyBTdHJpbmcoaW5wdXQpKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHNldE5vZGVEb2N1bWVudChJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHN0YXJ0Tm9kZSkgewotCQkvLyBDYXV0aW9uOiBjYXN0Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYU5vZGUgPSBzdGFydE5vZGU7Ci0JCXdoaWxlIChhTm9kZSAhPSBudWxsKSB7Ci0JCQlhTm9kZS5zZXRQYXJlbnREb2N1bWVudCh0ZXh0U3RvcmUpOwotCQkJYU5vZGUgPSBhTm9kZS5nZXROZXh0KCk7Ci0JCX0KLQkJcmV0dXJuIHN0YXJ0Tm9kZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIExpc3QgdG9rZW5pemVGaWxlKFN0cmluZyBmaWxlTmFtZSkgewotCQlMaXN0IHYgPSBudWxsOwotCQlTdHJpbmdCdWZmZXIgYnVmZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJdHJ5IHsKLQkJCS8vY2hhcltdIGlucHV0ID0gbG9hZENoYXJzKGZpbGVOYW1lKTsKLQkJCVJlYWRlciBpbnB1dCA9IG5ldyBGaWxlUmVhZGVyKGZpbGVOYW1lKTsKLQkJCVJlZ2lvblBhcnNlciBwYXJzZXIgPSBuZXdQYXJzZXIoKTsKLQkJCS8vIHBhcnNlciBtdXN0IGJlIGdpdmVuIGlucHV0LCBiZWZvcmUgdG9rZW5pemVyIGlzIHZhbGlkCi0JCQlwYXJzZXIucmVzZXQoaW5wdXQpOwotCQkJaW50IGMgPSAwOwotCQkJcGFyc2VyLmdldERvY3VtZW50UmVnaW9ucygpOwotCQkJdiA9IHBhcnNlci5nZXRSZWdpb25zKCk7Ci0JCQlpbnB1dC5yZXNldCgpOwotCQkJd2hpbGUgKChjID0gaW5wdXQucmVhZCgpKSA+PSAwKSB7Ci0JCQkJYnVmZi5hcHBlbmQoKGNoYXIpIGMpOwotCQkJfQotCQkJdGV4dFN0b3JlID0gU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRJbnN0YW5jZShwYXJzZXIpOwotCQkJdGV4dFN0b3JlLnNldFRleHQobnVsbCwgYnVmZi50b1N0cmluZygpKTsKLQkJfQotCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRmlsZSBub3QgZm91bmQgOiBcIiIgKyBmaWxlTmFtZSArICJcIiIpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCX0KLQkJY2F0Y2ggKEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlVzYWdlIDogamF2YSBKU1BMZXhlcjMgPGlucHV0ZmlsZT4iKTsKLQkJfQotCQlyZXR1cm4gdjsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyB2aWV3YWJsZVRva2VuaXplV2l0aFNlcGFyYXRvcihTdHJpbmcgZGF0YSkgewotCQlTdHJpbmdCdWZmZXIgcyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJcy5hcHBlbmQoIlwiIik7Ci0JCXMuYXBwZW5kKGRhdGEpOwotCQlzLmFwcGVuZCgiXCJcbiIpOwotCQlzLmFwcGVuZCh2aWV3YWJsZVRva2VuaXplKGRhdGEpKTsKLQkJcy5hcHBlbmQoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLQkJcmV0dXJuIHMudG9TdHJpbmcoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyB2aWV3YWJsZVRva2VuaXplKFN0cmluZyBzdHJpbmdkYXRhKSB7Ci0JCXJldHVybiB2aWV3YWJsZVRva2VuaXplKHN0cmluZ2RhdGEsIGZhbHNlKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyB2aWV3YWJsZVRva2VuaXplKFN0cmluZyBzdHJpbmdkYXRhLCBib29sZWFuIHVzZVhNTCkgewotCQlqYXZhLnV0aWwuTGlzdCBsID0gcGFyc2Uoc3RyaW5nZGF0YSwgdXNlWE1MKTsKLQkJU3RyaW5nIHMgPSAiIjsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsLnNpemUoKTsgaSsrKSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIG5vZGUgPSAoSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbikgbC5nZXQoaSk7Ci0JCQl0cnkgewotCQkJCXMgKz0gU3RyaW5nVXRpbHMuZXNjYXBlKG5vZGUudG9TdHJpbmcoKSkgKyAiXG4iOwotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJcyArPSAiWyIgKyBub2RlLmdldFN0YXJ0KCkgKyAiLCAiICsgbm9kZS5nZXRFbmQoKSArICJdIChVTlBSSU5UQUJMRSAiICsgZSArICIpIjsKLQkJCX0KLQkJCUlUZXh0UmVnaW9uTGlzdCBtID0gbm9kZS5nZXRSZWdpb25zKCk7Ci0JCQlmb3IgKGludCBqID0gMDsgaiA8IG0uc2l6ZSgpOyBqKyspCi0JCQkJaWYgKG0uZ2V0KGopIGluc3RhbmNlb2YgSVRleHRSZWdpb25Db250YWluZXIpIHsKLQkJCQkJcyA9IHMgKyAiXHQiICsgU3RyaW5nVXRpbHMuZXNjYXBlKG0uZ2V0KGopLnRvU3RyaW5nKCkpICsgIlxuIjsKLQkJCQkJSVRleHRSZWdpb25MaXN0IG4gPSAoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBtLmdldChqKSkuZ2V0UmVnaW9ucygpOwotCQkJCQlmb3IgKGludCBrID0gMDsgayA8IG4uc2l6ZSgpOyBrKyspCi0JCQkJCQlzID0gcyArICJcdFx0IiArIFN0cmluZ1V0aWxzLmVzY2FwZShuLmdldChrKS50b1N0cmluZygpKSArICJcbiI7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQkJcyA9IHMgKyAiXHQiICsgU3RyaW5nVXRpbHMuZXNjYXBlKG0uZ2V0KGopLnRvU3RyaW5nKCkpICsgIlxuIjsKLQkJfQotCQlyZXR1cm4gczsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyB2aWV3YWJsZVRva2VuaXplRmlsZShTdHJpbmcgZmlsZU5hbWUpIHsKLQkJaWYgKERlYnVnLnBlcmZUZXN0KSB7Ci0JCQlzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJfQotCQlpZiAoRGVidWcucGVyZlRlc3QpIHsKLQkJCXN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQl9Ci0JCWNoYXJbXSBpbnB1dCA9IGxvYWRDaGFycyhmaWxlTmFtZSk7Ci0JCWlmIChEZWJ1Zy5wZXJmVGVzdCkgewotCQkJc3RvcFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU2Nhbm5pbmdUZXN0cyBzcGVudCAiICsgKHN0b3BUaW1lIC0gc3RhcnRUaW1lKSArICIgKG1zZWNzKSBsb2FkaW5nICIgKyBmaWxlTmFtZSk7Ci0JCX0KLQkJcmV0dXJuIHZpZXdhYmxlVG9rZW5pemUobmV3IFN0cmluZyhpbnB1dCkpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1NpbXBsZU5vZGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvU2ltcGxlTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjNkYTdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvU2ltcGxlTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5vdGhlcjsKLQotaW1wb3J0IG9yZy53M2MuZG9tLkRPTUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLWltcG9ydCBvcmcudzNjLmRvbS5UeXBlSW5mbzsKLWltcG9ydCBvcmcudzNjLmRvbS5Vc2VyRGF0YUhhbmRsZXI7Ci0KLS8qKgotICogSW5zZXJ0IHRoZSB0eXBlJ3MgZGVzY3JpcHRpb24gaGVyZS4gQ3JlYXRpb24gZGF0ZTogKDgvMjMvMjAwMCA5OjI0OjAyIFBNKQotICogCi0gKiBAYXV0aG9yOiBLaXQgTG8KLSAqLwotcHVibGljIGNsYXNzIFNpbXBsZU5vZGUgaW1wbGVtZW50cyBOb2RlIHsKLQlTdHJpbmcgZk5vZGVOYW1lOwotCi0JLyoqCi0JICogU2ltcGxlTm9kZSBjb25zdHJ1Y3RvciBjb21tZW50LgotCSAqLwotCXB1YmxpYyBTaW1wbGVOb2RlKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIFNpbXBsZU5vZGUgY29uc3RydWN0b3IgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgU2ltcGxlTm9kZShTdHJpbmcgbm9kZU5hbWUpIHsKLQkJZk5vZGVOYW1lID0gbm9kZU5hbWU7Ci0JfQotCi0JLyoqCi0JICogYXBwZW5kQ2hpbGQgbWV0aG9kIGNvbW1lbnQuCi0JICovCi0JcHVibGljIE5vZGUgYXBwZW5kQ2hpbGQoTm9kZSBuZXdDaGlsZCkgdGhyb3dzIERPTUV4Y2VwdGlvbiB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIGNsb25lTm9kZSBtZXRob2QgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgTm9kZSBjbG9uZU5vZGUoYm9vbGVhbiBkZWVwKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIGdldEF0dHJpYnV0ZXMgbWV0aG9kIGNvbW1lbnQuCi0JICovCi0JcHVibGljIE5hbWVkTm9kZU1hcCBnZXRBdHRyaWJ1dGVzKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBnZXRDaGlsZE5vZGVzIG1ldGhvZCBjb21tZW50LgotCSAqLwotCXB1YmxpYyBOb2RlTGlzdCBnZXRDaGlsZE5vZGVzKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBnZXRGaXJzdENoaWxkIG1ldGhvZCBjb21tZW50LgotCSAqLwotCXB1YmxpYyBOb2RlIGdldEZpcnN0Q2hpbGQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIGdldExhc3RDaGlsZCBtZXRob2QgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgTm9kZSBnZXRMYXN0Q2hpbGQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGxvY2FsIHBhcnQgb2YgdGhlIHF1YWxpZmllZCBuYW1lIG9mIHRoaXMgbm9kZS4gPGJyPgotCSAqIEZvciBub2RlcyBvZiBhbnkgdHlwZSBvdGhlciB0aGFuIDxjb2RlPkVMRU1FTlRfTk9ERTwvY29kZT4gYW5kCi0JICogPGNvZGU+QVRUUklCVVRFX05PREU8L2NvZGU+IGFuZCBub2RlcyBjcmVhdGVkIHdpdGggYSBET00gTGV2ZWwgMQotCSAqIG1ldGhvZCwgc3VjaCBhcyA8Y29kZT5jcmVhdGVFbGVtZW50PC9jb2RlPiBmcm9tIHRoZQotCSAqIDxjb2RlPkRvY3VtZW50PC9jb2RlPiBpbnRlcmZhY2UsIHRoaXMgaXMgYWx3YXlzIDxjb2RlPm51bGw8L2NvZGU+LgotCSAqIAotCSAqIEAgbGluayBET00gTGV2ZWwgMgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TG9jYWxOYW1lKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgbmFtZXNwYWNlIFVSSSBvZiB0aGlzIG5vZGUsIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIGl0IGlzCi0JICogdW5zcGVjaWZpZWQuIDxicj4KLQkgKiBUaGlzIGlzIG5vdCBhIGNvbXB1dGVkIHZhbHVlIHRoYXQgaXMgdGhlIHJlc3VsdCBvZiBhIG5hbWVzcGFjZSBsb29rdXAKLQkgKiBiYXNlZCBvbiBhbiBleGFtaW5hdGlvbiBvZiB0aGUgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucyBpbiBzY29wZS4gSXQgaXMKLQkgKiBtZXJlbHkgdGhlIG5hbWVzcGFjZSBVUkkgZ2l2ZW4gYXQgY3JlYXRpb24gdGltZS4gPGJyPgotCSAqIEZvciBub2RlcyBvZiBhbnkgdHlwZSBvdGhlciB0aGFuIDxjb2RlPkVMRU1FTlRfTk9ERTwvY29kZT4gYW5kCi0JICogPGNvZGU+QVRUUklCVVRFX05PREU8L2NvZGU+IGFuZCBub2RlcyBjcmVhdGVkIHdpdGggYSBET00gTGV2ZWwgMQotCSAqIG1ldGhvZCwgc3VjaCBhcyA8Y29kZT5jcmVhdGVFbGVtZW50PC9jb2RlPiBmcm9tIHRoZQotCSAqIDxjb2RlPkRvY3VtZW50PC9jb2RlPiBpbnRlcmZhY2UsIHRoaXMgaXMgYWx3YXlzIDxjb2RlPm51bGw8L2NvZGU+LlBlcgotCSAqIHRoZSBOYW1lc3BhY2VzIGluIFhNTCBTcGVjaWZpY2F0aW9uIGFuIGF0dHJpYnV0ZSBkb2VzIG5vdCBpbmhlcml0IGl0cwotCSAqIG5hbWVzcGFjZSBmcm9tIHRoZSBlbGVtZW50IGl0IGlzIGF0dGFjaGVkIHRvLiBJZiBhbiBhdHRyaWJ1dGUgaXMgbm90Ci0JICogZXhwbGljaXRseSBnaXZlbiBhIG5hbWVzcGFjZSwgaXQgc2ltcGx5IGhhcyBubyBuYW1lc3BhY2UuCi0JICogCi0JICogQCBsaW5rIERPTSBMZXZlbCAyCi0JICovCi0JcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2VVUkkoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIGdldE5leHRTaWJsaW5nIG1ldGhvZCBjb21tZW50LgotCSAqLwotCXB1YmxpYyBOb2RlIGdldE5leHRTaWJsaW5nKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBnZXROb2RlTmFtZSBtZXRob2QgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE5vZGVOYW1lKCkgewotCQlyZXR1cm4gZk5vZGVOYW1lOwotCX0KLQotCS8qKgotCSAqIGdldE5vZGVUeXBlIG1ldGhvZCBjb21tZW50LgotCSAqLwotCXB1YmxpYyBzaG9ydCBnZXROb2RlVHlwZSgpIHsKLQkJcmV0dXJuIChzaG9ydCkgMDsKLQl9Ci0KLQkvKioKLQkgKiBnZXROb2RlVmFsdWUgbWV0aG9kIGNvbW1lbnQuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXROb2RlVmFsdWUoKSB0aHJvd3MgRE9NRXhjZXB0aW9uIHsKLQkJcmV0dXJuICJOb2RlVmFsdWUiOwotCX0KLQotCS8qKgotCSAqIGdldE93bmVyRG9jdW1lbnQgbWV0aG9kIGNvbW1lbnQuCi0JICovCi0JcHVibGljIERvY3VtZW50IGdldE93bmVyRG9jdW1lbnQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIGdldFBhcmVudE5vZGUgbWV0aG9kIGNvbW1lbnQuCi0JICovCi0JcHVibGljIE5vZGUgZ2V0UGFyZW50Tm9kZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVGhlIG5hbWVzcGFjZSBwcmVmaXggb2YgdGhpcyBub2RlLCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZiBpdCBpcwotCSAqIHVuc3BlY2lmaWVkLiA8YnI+Ci0JICogTm90ZSB0aGF0IHNldHRpbmcgdGhpcyBhdHRyaWJ1dGUsIHdoZW4gcGVybWl0dGVkLCBjaGFuZ2VzIHRoZQotCSAqIDxjb2RlPm5vZGVOYW1lPC9jb2RlPiBhdHRyaWJ1dGUsIHdoaWNoIGhvbGRzIHRoZSBxdWFsaWZpZWQgbmFtZSwgYXMKLQkgKiB3ZWxsIGFzIHRoZSA8Y29kZT50YWdOYW1lPC9jb2RlPiBhbmQgPGNvZGU+bmFtZTwvY29kZT4gYXR0cmlidXRlcwotCSAqIG9mIHRoZSA8Y29kZT5FbGVtZW50PC9jb2RlPiBhbmQgPGNvZGU+QXR0cjwvY29kZT4gaW50ZXJmYWNlcywgd2hlbgotCSAqIGFwcGxpY2FibGUuIDxicj4KLQkgKiBOb3RlIGFsc28gdGhhdCBjaGFuZ2luZyB0aGUgcHJlZml4IG9mIGFuIGF0dHJpYnV0ZSB0aGF0IGlzIGtub3duIHRvCi0JICogaGF2ZSBhIGRlZmF1bHQgdmFsdWUsIGRvZXMgbm90IG1ha2UgYSBuZXcgYXR0cmlidXRlIHdpdGggdGhlIGRlZmF1bHQKLQkgKiB2YWx1ZSBhbmQgdGhlIG9yaWdpbmFsIHByZWZpeCBhcHBlYXIsIHNpbmNlIHRoZQotCSAqIDxjb2RlPm5hbWVzcGFjZVVSSTwvY29kZT4gYW5kIDxjb2RlPmxvY2FsTmFtZTwvY29kZT4gZG8gbm90IGNoYW5nZS4KLQkgKiA8YnI+Ci0JICogRm9yIG5vZGVzIG9mIGFueSB0eXBlIG90aGVyIHRoYW4gPGNvZGU+RUxFTUVOVF9OT0RFPC9jb2RlPiBhbmQKLQkgKiA8Y29kZT5BVFRSSUJVVEVfTk9ERTwvY29kZT4gYW5kIG5vZGVzIGNyZWF0ZWQgd2l0aCBhIERPTSBMZXZlbCAxCi0JICogbWV0aG9kLCBzdWNoIGFzIDxjb2RlPmNyZWF0ZUVsZW1lbnQ8L2NvZGU+IGZyb20gdGhlCi0JICogPGNvZGU+RG9jdW1lbnQ8L2NvZGU+IGludGVyZmFjZSwgdGhpcyBpcyBhbHdheXMgPGNvZGU+bnVsbDwvY29kZT4uCi0JICogCi0JICogQGV4Y2VwdGlvbiBET01FeGNlcHRpb24KLQkgKiAgICAgICAgICAgICAgICBJTlZBTElEX0NIQVJBQ1RFUl9FUlI6IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIHByZWZpeAotCSAqICAgICAgICAgICAgICAgIGNvbnRhaW5zIGFuIGlsbGVnYWwgY2hhcmFjdGVyLiA8YnI+Ci0JICogICAgICAgICAgICAgICAgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhpcyBub2RlIGlzCi0JICogICAgICAgICAgICAgICAgcmVhZG9ubHkuIDxicj4KLQkgKiAgICAgICAgICAgICAgICBOQU1FU1BBQ0VfRVJSOiBSYWlzZWQgaWYgdGhlIHNwZWNpZmllZAotCSAqICAgICAgICAgICAgICAgIDxjb2RlPnByZWZpeDwvY29kZT4gaXMgbWFsZm9ybWVkLCBpZiB0aGUKLQkgKiAgICAgICAgICAgICAgICA8Y29kZT5uYW1lc3BhY2VVUkk8L2NvZGU+IG9mIHRoaXMgbm9kZSBpcwotCSAqICAgICAgICAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+LCBpZiB0aGUgc3BlY2lmaWVkIHByZWZpeCBpcyAieG1sIgotCSAqICAgICAgICAgICAgICAgIGFuZCB0aGUgPGNvZGU+bmFtZXNwYWNlVVJJPC9jb2RlPiBvZiB0aGlzIG5vZGUgaXMKLQkgKiAgICAgICAgICAgICAgICBkaWZmZXJlbnQgZnJvbSAiIGh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsCi0JICogICAgICAgICAgICAgICAgaWYgdGhpcyBub2RlIGlzIGFuIGF0dHJpYnV0ZSBhbmQgdGhlIHNwZWNpZmllZCBwcmVmaXggaXMKLQkgKiAgICAgICAgICAgICAgICAieG1sbnMiIGFuZCB0aGUgPGNvZGU+bmFtZXNwYWNlVVJJPC9jb2RlPiBvZiB0aGlzIG5vZGUKLQkgKiAgICAgICAgICAgICAgICBpcyBkaWZmZXJlbnQgZnJvbSAiIGh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIiwgb3IKLQkgKiAgICAgICAgICAgICAgICBpZiB0aGlzIG5vZGUgaXMgYW4gYXR0cmlidXRlIGFuZCB0aGUKLQkgKiAgICAgICAgICAgICAgICA8Y29kZT5xdWFsaWZpZWROYW1lPC9jb2RlPiBvZiB0aGlzIG5vZGUgaXMgInhtbG5zIiAuCi0JICogQCBsaW5rIERPTSBMZXZlbCAyCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRQcmVmaXgoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIGdldFByZXZpb3VzU2libGluZyBtZXRob2QgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgTm9kZSBnZXRQcmV2aW91c1NpYmxpbmcoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgd2hldGhlciB0aGlzIG5vZGUgKGlmIGl0IGlzIGFuIGVsZW1lbnQpIGhhcyBhbnkgYXR0cmlidXRlcy4KLQkgKiAKLQkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgbm9kZSBoYXMgYW55IGF0dHJpYnV0ZXMsCi0JICogICAgICAgICA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotCSAqIEAgbGluayBET00gTGV2ZWwgMgotCSAqLwotCXB1YmxpYyBib29sZWFuIGhhc0F0dHJpYnV0ZXMoKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBoYXNDaGlsZE5vZGVzIG1ldGhvZCBjb21tZW50LgotCSAqLwotCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkTm9kZXMoKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBpbnNlcnRCZWZvcmUgbWV0aG9kIGNvbW1lbnQuCi0JICovCi0JcHVibGljIE5vZGUgaW5zZXJ0QmVmb3JlKE5vZGUgbmV3Q2hpbGQsIE5vZGUgcmVmQ2hpbGQpIHRocm93cyBET01FeGNlcHRpb24gewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyB3aGV0aGVyIHRoZSBET00gaW1wbGVtZW50YXRpb24gaW1wbGVtZW50cyBhIHNwZWNpZmljIGZlYXR1cmUgYW5kCi0JICogdGhhdCBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGlzIG5vZGUuCi0JICogCi0JICogQHBhcmFtIGZlYXR1cmVUaGUKLQkgKiAgICAgICAgICAgIG5hbWUgb2YgdGhlIGZlYXR1cmUgdG8gdGVzdC4gVGhpcyBpcyB0aGUgc2FtZSBuYW1lIHdoaWNoIGNhbgotCSAqICAgICAgICAgICAgYmUgcGFzc2VkIHRvIHRoZSBtZXRob2QgPGNvZGU+aGFzRmVhdHVyZTwvY29kZT4gb24KLQkgKiAgICAgICAgICAgIDxjb2RlPkRPTUltcGxlbWVudGF0aW9uPC9jb2RlPi4KLQkgKiBAcGFyYW0gdmVyc2lvblRoaXMKLQkgKiAgICAgICAgICAgIGlzIHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgZmVhdHVyZSB0byB0ZXN0LiBJbiBMZXZlbCAyLAotCSAqICAgICAgICAgICAgdmVyc2lvbiAxLCB0aGlzIGlzIHRoZSBzdHJpbmcgIjIuMCIuIElmIHRoZSB2ZXJzaW9uIGlzIG5vdAotCSAqICAgICAgICAgICAgc3BlY2lmaWVkLCBzdXBwb3J0aW5nIGFueSB2ZXJzaW9uIG9mIHRoZSBmZWF0dXJlIHdpbGwgY2F1c2UKLQkgKiAgICAgICAgICAgIHRoZSBtZXRob2QgdG8gcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+LgotCSAqIEByZXR1cm4gUmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgc3BlY2lmaWVkIGZlYXR1cmUgaXMKLQkgKiAgICAgICAgIHN1cHBvcnRlZCBvbiB0aGlzIG5vZGUsIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCi0JICogQCBsaW5rIERPTSBMZXZlbCAyCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNTdXBwb3J0ZWQoU3RyaW5nIGZlYXR1cmUsIFN0cmluZyB2ZXJzaW9uKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBQdXRzIGFsbCA8Y29kZT5UZXh0PC9jb2RlPiBub2RlcyBpbiB0aGUgZnVsbCBkZXB0aCBvZiB0aGUgc3ViLXRyZWUKLQkgKiB1bmRlcm5lYXRoIHRoaXMgPGNvZGU+Tm9kZTwvY29kZT4sIGluY2x1ZGluZyBhdHRyaWJ1dGUgbm9kZXMsIGludG8gYQotCSAqICJub3JtYWwiIGZvcm0gd2hlcmUgb25seSBzdHJ1Y3R1cmUgKGUuZy4sIGVsZW1lbnRzLCBjb21tZW50cywKLQkgKiBwcm9jZXNzaW5nIGluc3RydWN0aW9ucywgQ0RBVEEgc2VjdGlvbnMsIGFuZCBlbnRpdHkgcmVmZXJlbmNlcykKLQkgKiBzZXBhcmF0ZXMgPGNvZGU+VGV4dDwvY29kZT4gbm9kZXMsIGkuZS4sIHRoZXJlIGFyZSBuZWl0aGVyIGFkamFjZW50Ci0JICogPGNvZGU+VGV4dDwvY29kZT4gbm9kZXMgbm9yIGVtcHR5IDxjb2RlPlRleHQ8L2NvZGU+IG5vZGVzLiBUaGlzIGNhbgotCSAqIGJlIHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIERPTSB2aWV3IG9mIGEgZG9jdW1lbnQgaXMgdGhlIHNhbWUgYXMgaWYgaXQKLQkgKiB3ZXJlIHNhdmVkIGFuZCByZS1sb2FkZWQsIGFuZCBpcyB1c2VmdWwgd2hlbiBvcGVyYXRpb25zIChzdWNoIGFzCi0JICogWFBvaW50ZXIgbG9va3VwcykgdGhhdCBkZXBlbmQgb24gYSBwYXJ0aWN1bGFyIGRvY3VtZW50IHRyZWUgc3RydWN0dXJlCi0JICogYXJlIHRvIGJlIHVzZWQuSW4gY2FzZXMgd2hlcmUgdGhlIGRvY3VtZW50IGNvbnRhaW5zCi0JICogPGNvZGU+Q0RBVEFTZWN0aW9uczwvY29kZT4sIHRoZSBub3JtYWxpemUgb3BlcmF0aW9uIGFsb25lIG1heSBub3QgYmUKLQkgKiBzdWZmaWNpZW50LCBzaW5jZSBYUG9pbnRlcnMgZG8gbm90IGRpZmZlcmVudGlhdGUgYmV0d2VlbgotCSAqIDxjb2RlPlRleHQ8L2NvZGU+IG5vZGVzIGFuZCA8Y29kZT5DREFUQVNlY3Rpb248L2NvZGU+IG5vZGVzLgotCSAqIAotCSAqIEB2ZXJzaW9uIERPTSBMZXZlbCAyCi0JICovCi0JcHVibGljIHZvaWQgbm9ybWFsaXplKCkgewotCX0KLQotCS8qKgotCSAqIHJlbW92ZUNoaWxkIG1ldGhvZCBjb21tZW50LgotCSAqLwotCXB1YmxpYyBOb2RlIHJlbW92ZUNoaWxkKE5vZGUgb2xkQ2hpbGQpIHRocm93cyBET01FeGNlcHRpb24gewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiByZXBsYWNlQ2hpbGQgbWV0aG9kIGNvbW1lbnQuCi0JICovCi0JcHVibGljIE5vZGUgcmVwbGFjZUNoaWxkKE5vZGUgbmV3Q2hpbGQsIE5vZGUgb2xkQ2hpbGQpIHRocm93cyBET01FeGNlcHRpb24gewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBzZXROb2RlVmFsdWUgbWV0aG9kIGNvbW1lbnQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0Tm9kZVZhbHVlKFN0cmluZyBub2RlVmFsdWUpIHRocm93cyBET01FeGNlcHRpb24gewotCX0KLQotCS8qKgotCSAqIHNldFByZWZpeCBtZXRob2QgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRQcmVmaXgoU3RyaW5nIHByZWZpeCkgdGhyb3dzIERPTUV4Y2VwdGlvbiB7Ci0JfQotCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJcmV0dXJuIGdldE5vZGVOYW1lKCk7Ci0JfQotCi0JLyoqCi0JICogTk9UIElNUExFTUVOVEVELCBpcyBkZWZpbmVkIGhlcmUgaW4gcHJlcGFyYXRpb24gb2YgRE9NIExldmVsIDMKLQkgKi8KLQlwdWJsaWMgc2hvcnQgY29tcGFyZURvY3VtZW50UG9zaXRpb24oTm9kZSBvdGhlcikgdGhyb3dzIERPTUV4Y2VwdGlvbiB7Ci0JCXRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLk5PVF9TVVBQT1JURURfRVJSLCAiTm90IGltcGxlbWVudGVkIGluIHRoaXMgdmVyc2lvbi4iKTsKLQl9Ci0KLQkvKioKLQkgKiBOT1QgSU1QTEVNRU5URUQsIGlzIGRlZmluZWQgaGVyZSBpbiBwcmVwYXJhdGlvbiBvZiBET00gTGV2ZWwgMwotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0QmFzZVVSSSgpIHsKLQkJdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlIsICJOb3QgaW1wbGVtZW50ZWQgaW4gdGhpcyB2ZXJzaW9uLiIpOwotCX0KLQotCS8qKgotCSAqIE5PVCBJTVBMRU1FTlRFRCwgaXMgZGVmaW5lZCBoZXJlIGluIHByZXBhcmF0aW9uIG9mIERPTSBMZXZlbCAzCi0JICovCi0JcHVibGljIE9iamVjdCBnZXRGZWF0dXJlKFN0cmluZyBmZWF0dXJlLCBTdHJpbmcgdmVyc2lvbikgewotCQl0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5OT1RfU1VQUE9SVEVEX0VSUiwgIk5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHZlcnNpb24uIik7Ci0JfQotCi0JLyoqCi0JICogTk9UIElNUExFTUVOVEVELCBpcyBkZWZpbmVkIGhlcmUgaW4gcHJlcGFyYXRpb24gb2YgRE9NIExldmVsIDMKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFRleHRDb250ZW50KCkgdGhyb3dzIERPTUV4Y2VwdGlvbiB7Ci0JCXRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLk5PVF9TVVBQT1JURURfRVJSLCAiTm90IGltcGxlbWVudGVkIGluIHRoaXMgdmVyc2lvbi4iKTsKLQl9Ci0KLQkvKioKLQkgKiBOT1QgSU1QTEVNRU5URUQsIGlzIGRlZmluZWQgaGVyZSBpbiBwcmVwYXJhdGlvbiBvZiBET00gTGV2ZWwgMwotCSAqLwotCXB1YmxpYyBPYmplY3QgZ2V0VXNlckRhdGEoU3RyaW5nIGtleSkgewotCQl0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5OT1RfU1VQUE9SVEVEX0VSUiwgIk5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHZlcnNpb24uIik7Ci0JfQotCi0JLyoqCi0JICogTk9UIElNUExFTUVOVEVELCBpcyBkZWZpbmVkIGhlcmUgaW4gcHJlcGFyYXRpb24gb2YgRE9NIExldmVsIDMKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0RlZmF1bHROYW1lc3BhY2UoU3RyaW5nIG5hbWVzcGFjZVVSSSkgewotCQl0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5OT1RfU1VQUE9SVEVEX0VSUiwgIk5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHZlcnNpb24uIik7Ci0JfQotCi0JLyoqCi0JICogTk9UIElNUExFTUVOVEVELCBpcyBkZWZpbmVkIGhlcmUgaW4gcHJlcGFyYXRpb24gb2YgRE9NIExldmVsIDMKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0VxdWFsTm9kZShOb2RlIGFyZykgewotCQl0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5OT1RfU1VQUE9SVEVEX0VSUiwgIk5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHZlcnNpb24uIik7Ci0JfQotCi0JLyoqCi0JICogTk9UIElNUExFTUVOVEVELCBpcyBkZWZpbmVkIGhlcmUgaW4gcHJlcGFyYXRpb24gb2YgRE9NIExldmVsIDMKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc1NhbWVOb2RlKE5vZGUgb3RoZXIpIHsKLQkJdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlIsICJOb3QgaW1wbGVtZW50ZWQgaW4gdGhpcyB2ZXJzaW9uLiIpOwotCX0KLQotCS8qKgotCSAqIE5PVCBJTVBMRU1FTlRFRCwgaXMgZGVmaW5lZCBoZXJlIGluIHByZXBhcmF0aW9uIG9mIERPTSBMZXZlbCAzCi0JICovCi0JcHVibGljIFN0cmluZyBsb29rdXBOYW1lc3BhY2VVUkkoU3RyaW5nIHByZWZpeCkgewotCQl0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5OT1RfU1VQUE9SVEVEX0VSUiwgIk5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHZlcnNpb24uIik7Ci0JfQotCi0JLyoqCi0JICogTk9UIElNUExFTUVOVEVELCBpcyBkZWZpbmVkIGhlcmUgaW4gcHJlcGFyYXRpb24gb2YgRE9NIExldmVsIDMKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGxvb2t1cFByZWZpeChTdHJpbmcgbmFtZXNwYWNlVVJJKSB7Ci0JCXRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLk5PVF9TVVBQT1JURURfRVJSLCAiTm90IGltcGxlbWVudGVkIGluIHRoaXMgdmVyc2lvbi4iKTsKLQl9Ci0KLQkvKioKLQkgKiBOT1QgSU1QTEVNRU5URUQsIGlzIGRlZmluZWQgaGVyZSBpbiBwcmVwYXJhdGlvbiBvZiBET00gTGV2ZWwgMwotCSAqLwotCXB1YmxpYyB2b2lkIHNldFRleHRDb250ZW50KFN0cmluZyB0ZXh0Q29udGVudCkgdGhyb3dzIERPTUV4Y2VwdGlvbiB7Ci0JCXRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLk5PVF9TVVBQT1JURURfRVJSLCAiTm90IGltcGxlbWVudGVkIGluIHRoaXMgdmVyc2lvbi4iKTsKLQl9Ci0KLQkvKioKLQkgKiBOT1QgSU1QTEVNRU5URUQsIGlzIGRlZmluZWQgaGVyZSBpbiBwcmVwYXJhdGlvbiBvZiBET00gTGV2ZWwgMwotCSAqLwotCXB1YmxpYyBPYmplY3Qgc2V0VXNlckRhdGEoU3RyaW5nIGtleSwgT2JqZWN0IGRhdGEsIFVzZXJEYXRhSGFuZGxlciBoYW5kbGVyKSB7Ci0JCXRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLk5PVF9TVVBQT1JURURfRVJSLCAiTm90IGltcGxlbWVudGVkIGluIHRoaXMgdmVyc2lvbi4iKTsKLQl9Ci0KLQkvKioKLQkgKiBOT1QgSU1QTEVNRU5URUQsIGlzIGRlZmluZWQgaGVyZSBpbiBwcmVwYXJhdGlvbiBvZiBET00gTGV2ZWwgMwotCSAqLwotCXB1YmxpYyBUeXBlSW5mbyBnZXRTY2hlbWFUeXBlSW5mbygpIHsKLQkJdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlIsICJOb3QgaW1wbGVtZW50ZWQgaW4gdGhpcyB2ZXJzaW9uLiIpOwotCX0KLQotCS8qKgotCSAqIE5PVCBJTVBMRU1FTlRFRCwgaXMgZGVmaW5lZCBoZXJlIGluIHByZXBhcmF0aW9uIG9mIERPTSBMZXZlbCAzCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNJZCgpIHsKLQkJdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlIsICJOb3QgaW1wbGVtZW50ZWQgaW4gdGhpcyB2ZXJzaW9uLiIpOwotCX0KLQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9TdHJ1Y3R1cmVkRG9jdW1lbnRUb0RPTVVuaXRUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9TdHJ1Y3R1cmVkRG9jdW1lbnRUb0RPTVVuaXRUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2FkZTk2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvU3RydWN0dXJlZERvY3VtZW50VG9ET01Vbml0VGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMub3RoZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLkxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLklTdHJ1Y3R1cmVkRG9jdW1lbnRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLk5ld0RvY3VtZW50RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5Ob0NoYW5nZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuUmVnaW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuUmVnaW9uc1JlcGxhY2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5TdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC51dGlsLkRlYnVnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC51dGlsLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5ET01Nb2RlbEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgY2xhc3MgU3RydWN0dXJlZERvY3VtZW50VG9ET01Vbml0VGVzdHMgaW1wbGVtZW50cyBJU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXIgewotCXB1YmxpYyBTdHJ1Y3R1cmVkRG9jdW1lbnRUb0RPTVVuaXRUZXN0cygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlTdHJpbmcgZ2V0VGVzdFN0cmluZzEoKSB7Ci0JCXJldHVybiAiPGE+YTxiIC8+YjwvYT4iOyAvLyAtPiA8YT5hYjwvYT47Ci0JfQotCi0JU3RyaW5nIGdldFRlc3RTdHJpbmcyKCkgewotCQlyZXR1cm4gIjxtZW51PlxuPHJuYW1lPlxuTGlhbSdzIENob3dkZXIgSG91c2UgYW5kIEdyaWxsXG48L3JuYW1lPlxuPC9tZW51PiI7Ci0JfQotCi0JU3RyaW5nIGdldFRlc3RTdHJpbmczKCkgewotCQkvLyByZXR1cm4gIiA8P3htbCB2ZXJzaW9uPVwiMS4wXCIgPz5cbgotCQkvLyA8dGVzdFRvcFNpYmxpbmc+PHA+dGV4dDwvcD48L3Rlc3RUb3BTaWJsaW5nPiI7Ci0JCXJldHVybiAiPHRlc3QvPlxuXG4gPGh0bWw+XG48L2h0bWw+IjsKLQl9Ci0KLQlTdHJpbmcgZ2V0VGVzdFN0cmluZzQoKSB7Ci0JCXJldHVybiAiPD94bWwgdmVyc2lvbj1cIjEuMFwiID8+IjsKLQl9Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZ1tdCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCi0JCXRyeSB7Ci0JCQlTdHJ1Y3R1cmVkRG9jdW1lbnRUb0RPTVVuaXRUZXN0cyBpbnN0YW5jZSA9IG5ldyBTdHJ1Y3R1cmVkRG9jdW1lbnRUb0RPTVVuaXRUZXN0cygpOwotCQkJaW5zdGFuY2UudGVzdE5vZGVEZWxldGlvbjQoKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIHQpIHsKLQkJCXQucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQl2b2lkIG1ha2VDaGFuZ2UxKElET01Nb2RlbCB0cmVlKSB7Ci0KLQkJLy8JCi0JCS8vIHBpY2sgYSBwYXJlbnQgYW5kIG9uZXMgb2YgaXRzIGNoaWxkcmVuIHRvIGRlbGV0ZQotCQkvLyAobm90ZTogdmFsaWRpdHkgb2YgdGhpcyBjb2RlIGlzIGhpZ2hseSBkZXBlbmRlbnQgb24gaW5wdXQgc3RyaW5nKQotCQlvcmcudzNjLmRvbS5Eb2N1bWVudCBkb20gPSB0cmVlLmdldERvY3VtZW50KCk7Ci0JCU5vZGVMaXN0IG5vZGVzID0gZG9tLmdldENoaWxkTm9kZXMoKTsKLQkJLy8KLQkJLyoKLQkJICogZm9yICJmaXJzdCIgdGVzdCBjYXNlIE5vZGUgdGVzdFBhcmVudE5vZGUgPSBub2Rlcy5pdGVtKDApOyBOb2RlCi0JCSAqIHRlc3RDaGlsZE5vZGUgPSB0ZXN0UGFyZW50Tm9kZS5nZXRGaXJzdENoaWxkKCk7Ci0JCSAqLwotCQkvLyBmb3IgInNlY29uZCIgdGVzdCBjYXNlCi0JCU5vZGUgdGVzdFBhcmVudE5vZGUgPSBub2Rlcy5pdGVtKDApOwotCQlOb2RlIHRlc3RDaGlsZE5vZGUgPSB0ZXN0UGFyZW50Tm9kZS5nZXRGaXJzdENoaWxkKCk7Ci0JCXRlc3RDaGlsZE5vZGUgPSB0ZXN0Q2hpbGROb2RlLmdldE5leHRTaWJsaW5nKCk7Ci0KLQkJdGVzdFBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGVzdENoaWxkTm9kZSk7Ci0KLQl9Ci0KLQl2b2lkIG1ha2VDaGFuZ2UyKElTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50KSB7Ci0KLQkJLy8gZGVsZXRlIHRoZSBhcG9zdHJvcGUgaW4gdGVzdCBzdHJpbmcgLy8gNCwgND8KLQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KHRoaXMsIDE5LCAxLCBudWxsKTsKLQl9Ci0KLQl2b2lkIG1ha2VDaGFuZ2UzKElET01Nb2RlbCB0cmVlKSB7Ci0KLQkJLy8JCi0JCS8vIHBpY2sgYSBwYXJlbnQgYW5kIG9uZXMgb2YgaXRzIGNoaWxkcmVuIHRvIGRlbGV0ZQotCQkvLyAobm90ZTogdmFsaWRpdHkgb2YgdGhpcyBjb2RlIGlzIGhpZ2hseSBkZXBlbmRlbnQgb24gaW5wdXQgc3RyaW5nKQotCQlvcmcudzNjLmRvbS5Eb2N1bWVudCBkb20gPSB0cmVlLmdldERvY3VtZW50KCk7Ci0JCS8vIE5vZGVMaXN0IG5vZGVzID0gZG9tLmdldENoaWxkTm9kZXMoKTsKLQkJLy8KLQkJTm9kZSB0ZXN0Q2hpbGROb2RlID0gZG9tLmdldExhc3RDaGlsZCgpOwotCi0JCWRvbS5yZW1vdmVDaGlsZCh0ZXN0Q2hpbGROb2RlKTsKLQotCX0KLQotCS8qKgotCSAqIG5ld01vZGVsIG1ldGhvZCBjb21tZW50LgotCSAqLwotCXB1YmxpYyB2b2lkIG5ld01vZGVsKE5ld0RvY3VtZW50RXZlbnQgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJuZXdNb2RlbDoiKTsKLQl9Ci0KLQkvKioKLQkgKiBub0NoYW5nZSBtZXRob2QgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBub0NoYW5nZShOb0NoYW5nZUV2ZW50IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KSB7Ci0JCS8vIGxvZyBmb3Igbm93LCB1bmxlc3Mgd2UgZmluZCByZWFzb24gbm90IHRvCi0JCUxvZ2dlci5sb2coTG9nZ2VyLklORk8sICJTdHJ1Y3R1cmVkRG9jdW1lbnRUb0RPTVVuaXRUZXN0czo6bm9DaGFuZ2UgbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQiKTsKLQl9Ci0KLQkvKioKLQkgKiBub2Rlc1JlcGxhY2VkIG1ldGhvZCBjb21tZW50LgotCSAqLwotCXB1YmxpYyB2b2lkIG5vZGVzUmVwbGFjZWQoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJub2Rlc1JlcGxhY2VkOiIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlx0TmV3RmxhdE5vZGVzOiIpOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBmbGF0Tm9kZUxpc3QgPSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudC5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCk7Ci0JCWludCBsZW4gPSBmbGF0Tm9kZUxpc3QuZ2V0TGVuZ3RoKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJCVN0cmluZyBvdXRTdHJpbmcgPSBmbGF0Tm9kZUxpc3QuaXRlbShpKS50b1N0cmluZygpOwotCQkJb3V0U3RyaW5nID0gU3RyaW5nVXRpbHMuZXNjYXBlKG91dFN0cmluZyk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlx0XHQiICsgb3V0U3RyaW5nKTsKLQkJfQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlx0T2xkRmxhdE5vZGVzOiIpOwotCQlmbGF0Tm9kZUxpc3QgPSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudC5nZXRPbGRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCk7Ci0JCWxlbiA9IGZsYXROb2RlTGlzdC5nZXRMZW5ndGgoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewotCQkJU3RyaW5nIG91dFN0cmluZyA9IGZsYXROb2RlTGlzdC5pdGVtKGkpLnRvU3RyaW5nKCk7Ci0JCQlvdXRTdHJpbmcgPSBTdHJpbmdVdGlscy5lc2NhcGUob3V0U3RyaW5nKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXHRcdCIgKyBvdXRTdHJpbmcpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogcmVnaW9uQ2hhbmdlZCBtZXRob2QgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgdm9pZCByZWdpb25DaGFuZ2VkKFJlZ2lvbkNoYW5nZWRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oInJlZ2lvbkNoYW5nZWQ6Iik7Ci0JfQotCi0JLyoqCi0JICogcmVnaW9uc1JlcGxhY2VkIG1ldGhvZCBjb21tZW50LgotCSAqLwotCXB1YmxpYyB2b2lkIHJlZ2lvbnNSZXBsYWNlZChSZWdpb25zUmVwbGFjZWRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oInJlZ2lvbnNSZXBsYWNlZDoiKTsKLQl9Ci0KLQkvKioKLQkgKiBVbml0IHRlc3QgLS0gdGVzdHMgYmFzaWMgcGFyc2luZyByZXN1bHRzIG9mIGluc2VydGluZyBhIHRlc3Qgc3RyaW5nCi0JICogaW50byBhbiBpbml0aWFsIHN0cmluZy4KLQkgKi8KLQl2b2lkIHRlc3ROb2RlRGVsZXRpb24oKSB7Ci0JCS8vIFN0cmluZyBpbml0aWFsU3RyaW5nID0KLQkJLy8gIjxwYXI+PHg+XG50ZXh0eFxuPC94PlxuPHk+XG50ZXh0eVxuPC95PjwvcGFyPiI7Ci0JCS8vIFN0cmluZyBpbml0aWFsU3RyaW5nID0gIjxwYXI+PHg+dGV4dHg8L3g+PHk+dGV4dHk8L3k+PC9wYXI+IjsKLQkJLy8gdGVzdCBjYXNlcyBmb3IgdHdvIHRleHQgbm9kZXMgbGVmdCB0b2dldGhlciAocmVtb3ZlIDxiLz4pOgotCQkvLyBmaXJzdCBjYXNlIHdvcmtzLCBzZWNvbmQgZG9lc24ndAotCQkvLyBTdHJpbmcgaW5pdGlhbFN0cmluZyA9ICI8YT5hPGIgLz48L2E+IjsgLy8gLT4gPGE+YTwvYT4KLQkJLy8gU3RyaW5nIGluaXRpYWxTdHJpbmcgPSAiPGE+YTxiIC8+YjwvYT4iOyAvLyAtPiA8YT5hYjwvYT4KLQkJLy8gU3RyaW5nIGluaXRpYWxTdHJpbmcgPSBnZXRUZXN0U3RyaW5nMSgpOwotCQlTdHJpbmcgaW5pdGlhbFN0cmluZyA9IGdldFRlc3RTdHJpbmcyKCk7Ci0KLQkJLy8gcHJpbnQgb3V0IHdoYXQgd2UgYWx3YXlzIGNhbgotCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCBOb2RlIERlbGV0aW9uIik7Ci0JCVN0cmluZyBvdXRTdHJpbmcgPSBTdHJpbmdVdGlscy5lc2NhcGUoaW5pdGlhbFN0cmluZyk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiSW5pdGlhbCBTdHJpbmc6ICIgKyBvdXRTdHJpbmcpOwotCQkvLyBhbHdheXMgc3RhcnQgd2l0aCBmcmVzaCBtb2RlbAotCQlJU3RydWN0dXJlZERvY3VtZW50IGYgPSBudWxsOwotCi0JCUlNb2RlbE1hbmFnZXIgbW0gPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQl0cnkgewotCQkJZiA9IG1tLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcigiZHVtbXkueG1sIiwgKElucHV0U3RyZWFtKSBudWxsLCBudWxsKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJLy8gZG8gbm90aGluZywgc2luY2UgZHVtbXkKLQkJfQotCi0KLQkJLy8KLQkJLy8gd2UnbGwgbGlzdGVuIHRvIHN0cnVjdHVyZWREb2N1bWVudCBldmVudHMgdG8gcHJpbnQgb3V0IGRpYWdub3N0aWNzCi0JCWYuYWRkRG9jdW1lbnRDaGFuZ2VkTGlzdGVuZXIodGhpcyk7Ci0JCS8vCi0KLQkJSURPTU1vZGVsIHRyZWUgPSBuZXcgRE9NTW9kZWxJbXBsKCk7Ci0JCWYuYWRkRG9jdW1lbnRDaGFuZ2luZ0xpc3RlbmVyKChJU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXIpIHRyZWUpOwotCi0JCS8vIHNldCB0ZXh0IHRvIHN0cnVjdHVyZWREb2N1bWVudCAod2hpY2ggdXBkYXRlcyB0cmVlKQotCQlmLnNldFRleHQobnVsbCwgaW5pdGlhbFN0cmluZyk7Ci0KLQkJLy8gZHVtcCBpbml0aWFsIHN0cnVjdHVyZWREb2N1bWVudAotCQlEZWJ1Zy5kdW1wKGYpOwotCQkvLyBkdW1wIGluaXRpYWwgZG9tCi0JCURlYnVnRG9jdW1lbnQuZHVtcCh0cmVlLmdldERvY3VtZW50KCkpOwotCQkvLwotCQkvLwotCQkvLyBtYWtlQ2hhbmdlMSh0cmVlKTsKLQkJbWFrZUNoYW5nZTIoZik7Ci0KLQkJLy8gZGlzcGxheSByZXN1bHRpbmcgdGV4dAotCQlTeXN0ZW0ub3V0LnByaW50bG4oInJlc3VsdFN0cmluZyAoZnJvbSBzdHJ1Y3R1cmVkRG9jdW1lbnQpOiAiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKFN0cmluZ1V0aWxzLmVzY2FwZShmLmdldFRleHQoKSkpOwotCQkvLwotCQkvLwotCQkvLyBkdW1wIHBvc3QgY2hhbmdlIHN0cnVjdHVyZWREb2N1bWVudAotCQlEZWJ1Zy5kdW1wKGYpOwotCQkvLyBkdW1wIHBvc3QgY2hhbmdlIERPTQotCQlEZWJ1Z0RvY3VtZW50LmR1bXAodHJlZS5nZXREb2N1bWVudCgpKTsKLQotCQkvLwotCi0JfQotCi0JLyoqCi0JICogVW5pdCB0ZXN0IC0tIHRlc3RzIGJhc2ljIHBhcnNpbmcgcmVzdWx0cyBvZiBpbnNlcnRpbmcgYSB0ZXN0IHN0cmluZwotCSAqIGludG8gYW4gaW5pdGlhbCBzdHJpbmcuCi0JICovCi0Jdm9pZCB0ZXN0Tm9kZURlbGV0aW9uMygpIHsKLQkJU3RyaW5nIGluaXRpYWxTdHJpbmcgPSBnZXRUZXN0U3RyaW5nMygpOwotCi0JCS8vIHByaW50IG91dCB3aGF0IHdlIGFsd2F5cyBjYW4KLQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLSIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3QgTm9kZSBEZWxldGlvbiIpOwotCQlTdHJpbmcgb3V0U3RyaW5nID0gU3RyaW5nVXRpbHMuZXNjYXBlKGluaXRpYWxTdHJpbmcpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkluaXRpYWwgU3RyaW5nOiAiICsgb3V0U3RyaW5nKTsKLQkJLy8gYWx3YXlzIHN0YXJ0IHdpdGggZnJlc2ggbW9kZWwKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBmID0gbnVsbDsKLQotCQlJTW9kZWxNYW5hZ2VyIG1tID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJdHJ5IHsKLQkJCWYgPSBtbS5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoImR1bW15LnhtbCIsIChJbnB1dFN0cmVhbSkgbnVsbCwgbnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGRvIG5vdGhpbmcsIHNpbmNlIGR1bW15Ci0JCX0KLQkJLy8KLQkJLy8gd2UnbGwgbGlzdGVuIHRvIHN0cnVjdHVyZWREb2N1bWVudCBldmVudHMgdG8gcHJpbnQgb3V0IGRpYWdub3N0aWNzCi0JCWYuYWRkRG9jdW1lbnRDaGFuZ2VkTGlzdGVuZXIodGhpcyk7Ci0JCS8vCi0KLQkJSURPTU1vZGVsIHRyZWUgPSBuZXcgRE9NTW9kZWxJbXBsKCk7Ci0JCWYuYWRkRG9jdW1lbnRDaGFuZ2luZ0xpc3RlbmVyKChJU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXIpIHRyZWUpOwotCi0JCS8vIHNldCB0ZXh0IHRvIHN0cnVjdHVyZWREb2N1bWVudCAod2hpY2ggdXBkYXRlcyB0cmVlKQotCQlmLnNldFRleHQobnVsbCwgaW5pdGlhbFN0cmluZyk7Ci0KLQkJLy8gZHVtcCBpbml0aWFsIHN0cnVjdHVyZWREb2N1bWVudAotCQlEZWJ1Zy5kdW1wKGYpOwotCQkvLyBkdW1wIGluaXRpYWwgZG9tCi0JCURlYnVnRG9jdW1lbnQuZHVtcCh0cmVlLmdldERvY3VtZW50KCkpOwotCQkvLwotCQkvLwotCQkvLyBtYWtlQ2hhbmdlMSh0cmVlKTsKLQkJbWFrZUNoYW5nZTModHJlZSk7Ci0KLQkJLy8gZGlzcGxheSByZXN1bHRpbmcgdGV4dAotCQlTeXN0ZW0ub3V0LnByaW50bG4oInJlc3VsdFN0cmluZyAoZnJvbSBzdHJ1Y3R1cmVkRG9jdW1lbnQpOiAiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKFN0cmluZ1V0aWxzLmVzY2FwZShmLmdldFRleHQoKSkpOwotCQkvLwotCQkvLwotCQkvLyBkdW1wIHBvc3QgY2hhbmdlIHN0cnVjdHVyZWREb2N1bWVudAotCQlEZWJ1Zy5kdW1wKGYpOwotCQkvLyBkdW1wIHBvc3QgY2hhbmdlIERPTQotCQlEZWJ1Z0RvY3VtZW50LmR1bXAodHJlZS5nZXREb2N1bWVudCgpKTsKLQotCQkvLwotCi0JfQotCi0JLyoqCi0JICogVW5pdCB0ZXN0IC0tIHRlc3QgaW5zZXJ0IGZvbGxvd2VkIGJ5IGRlbGV0ZSBhdCBiZWdpbm5pbmcgb2Ygc3RyaW5nLgotCSAqLwotCXZvaWQgdGVzdE5vZGVEZWxldGlvbjQoKSB7Ci0JCVN0cmluZyBpbml0aWFsU3RyaW5nID0gZ2V0VGVzdFN0cmluZzQoKTsKLQotCQkvLyBwcmludCBvdXQgd2hhdCB3ZSBhbHdheXMgY2FuCi0JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0iKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJUZXN0IE5vZGUgSW5zZXJ0IGFuZCBEZWxldGUiKTsKLQkJU3RyaW5nIG91dFN0cmluZyA9IFN0cmluZ1V0aWxzLmVzY2FwZShpbml0aWFsU3RyaW5nKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJJbml0aWFsIFN0cmluZzogIiArIG91dFN0cmluZyk7Ci0JCS8vIGFsd2F5cyBzdGFydCB3aXRoIGZyZXNoIG1vZGVsCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZiA9IG51bGw7Ci0KLQkJSU1vZGVsTWFuYWdlciBtbSA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCXRyeSB7Ci0JCQlmID0gbW0uY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKCJkdW1teS54bWwiLCAoSW5wdXRTdHJlYW0pIG51bGwsIG51bGwpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBkbyBub3RoaW5nLCBzaW5jZSBkdW1teQotCQl9Ci0JCS8vCi0JCS8vIHdlJ2xsIGxpc3RlbiB0byBzdHJ1Y3R1cmVkRG9jdW1lbnQgZXZlbnRzIHRvIHByaW50IG91dCBkaWFnbm9zdGljcwotCQlmLmFkZERvY3VtZW50Q2hhbmdlZExpc3RlbmVyKHRoaXMpOwotCQkvLwotCi0JCUlET01Nb2RlbCB0cmVlID0gbmV3IERPTU1vZGVsSW1wbCgpOwotCQlmLmFkZERvY3VtZW50Q2hhbmdpbmdMaXN0ZW5lcigoSVN0cnVjdHVyZWREb2N1bWVudExpc3RlbmVyKSB0cmVlKTsKLQotCQkvLyBzZXQgdGV4dCB0byBzdHJ1Y3R1cmVkRG9jdW1lbnQgKHdoaWNoIHVwZGF0ZXMgdHJlZSkKLQkJZi5zZXRUZXh0KG51bGwsIGluaXRpYWxTdHJpbmcpOwotCi0JCS8vIGR1bXAgaW5pdGlhbCBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJRGVidWcuZHVtcChmKTsKLQkJLy8gZHVtcCBpbml0aWFsIGRvbQotCQlEZWJ1Z0RvY3VtZW50LmR1bXAodHJlZS5nZXREb2N1bWVudCgpKTsKLQkJLy8KLQkJLy8KLQkJZi5yZXBsYWNlVGV4dChudWxsLCAwLCAwLCAiYSIpOwotCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiID09PT0gUmVzdWx0cyBhZnRlciBpbnNlcnQiKTsKLQkJLy8gZGlzcGxheSByZXN1bHRpbmcgdGV4dAotCQlTeXN0ZW0ub3V0LnByaW50bG4oInJlc3VsdFN0cmluZyAoZnJvbSBzdHJ1Y3R1cmVkRG9jdW1lbnQpOiAiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKFN0cmluZ1V0aWxzLmVzY2FwZShmLmdldFRleHQoKSkpOwotCQkvLwotCQkvLwotCQkvLyBkdW1wIHBvc3QgY2hhbmdlIHN0cnVjdHVyZWREb2N1bWVudAotCQlEZWJ1Zy5kdW1wKGYpOwotCQkvLyBkdW1wIHBvc3QgY2hhbmdlIERPTQotCQlEZWJ1Z0RvY3VtZW50LmR1bXAodHJlZS5nZXREb2N1bWVudCgpKTsKLQotCQkvLwotCi0JCWYucmVwbGFjZVRleHQobnVsbCwgMCwgMSwgIiIpOwotCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiID09PT0gUmVzdWx0cyBhZnRlciBkZWxldGUiKTsKLQkJLy8gZGlzcGxheSByZXN1bHRpbmcgdGV4dAotCQlTeXN0ZW0ub3V0LnByaW50bG4oInJlc3VsdFN0cmluZyAoZnJvbSBzdHJ1Y3R1cmVkRG9jdW1lbnQpOiAiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKFN0cmluZ1V0aWxzLmVzY2FwZShmLmdldFRleHQoKSkpOwotCQkvLwotCQkvLwotCQkvLyBkdW1wIHBvc3QgY2hhbmdlIHN0cnVjdHVyZWREb2N1bWVudAotCQlEZWJ1Zy5kdW1wKGYpOwotCQkvLyBkdW1wIHBvc3QgY2hhbmdlIERPTQotCQlEZWJ1Z0RvY3VtZW50LmR1bXAodHJlZS5nZXREb2N1bWVudCgpKTsKLQotCQkvLwotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvU3R5bGVkVGV4dENvbnRlbnRTcGVjLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1N0eWxlZFRleHRDb250ZW50U3BlYy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWE2ZTBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvU3R5bGVkVGV4dENvbnRlbnRTcGVjLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm90aGVyOwotCi0vKioKLSAqIFVzZSB0aGlzIHRlc3QgY2xhc3MgdG8gdmFsaWRhdGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFN0eWxlZFRleHRDb250ZW50Ci0gKiBpbnRlcmZhY2UuIFRvIHBlcmZvcm0gdGhlIHZhbGlkYXRpb24sIGNvcHkgdGhpcyBjbGFzcyB0byB0aGUgcGFja2FnZSB3aGVyZQotICogeW91ciBTdHlsZWRUZXh0Q29udGVudCBpbXBsZW1lbnRhdGlvbiBsaXZlcy4gVGhlbiBzcGVjaWZ5IHRoZSBmdWxseQotICogcXVhbGlmaWVkIG5hbWUgb2YgeW91ciBTdHlsZWRUZXh0Q29udGVudCBjbGFzcyBhcyBhbiBhcmd1bWVudCB0byB0aGUgbWFpbgotICogbWV0aG9kIG9mIHRoaXMgY2xhc3MuCi0gKiAKLSAqIE5PVEU6IFRoaXMgdGVzdCBjbGFzcyBhc3N1bWVzIHRoYXQgeW91ciBTdHlsZWRUZXh0Q29udGVudCBpbXBsZW1lbnRhdGlvbgotICogaGFuZGxlcyB0aGUgZm9sbG93aW5nIGRlbGltaXRlcnM6Ci0gKiAgL3IgL24gL3IvbgotICogIAotICovCi0vLyBUaGlzIGNsYXNzIGNvbWVzIGNvdXJ0ZXN5IG9mIEx5bm5lIEt1ZXMuIE91ciBTdHlsZWRUZXh0Q29udGVudCBmYWlscyB0ZXN0Ci0vLyBjYXNlcyA2eCBvZgotLy8gIlNwZWNpYWwgY2FzZXMiIHNpbmNlIHdlIChub3IgSkZhY2UpIGhhbmRsZSBpbnNlcnRpb24gYmV0d2VlbiBDUiBhbmQgTEYuIEEKLS8vIG1pbm9yIG1vZGlmaWNhdGlvbgotLy8gd2FzIG5lZWRlZCB0byBnZXRDb250ZW50SW5zdGFuY2UgZm9yIG91dCB2ZXJzaW9uIG9mIFN0eWxlVGV4dENvbnRlbnQKLS8vIChTdHJ1Y3R1cmVkRG9jdW1lbnRUb1RleHRBZGFwdGVyKS4KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TdHlsZWRUZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVkVGV4dENvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5UZXh0Q2hhbmdlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5UZXh0Q2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uVGV4dENoYW5naW5nRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZXNzYWdlQm94OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkRG9jdW1lbnRUb1RleHRBZGFwdGVyOwotCi1wdWJsaWMgY2xhc3MgU3R5bGVkVGV4dENvbnRlbnRTcGVjIGltcGxlbWVudHMgVGV4dENoYW5nZUxpc3RlbmVyIHsKLQlzdGF0aWMgU3RyaW5nIGNvbnRlbnRDbGFzc05hbWU7Ci0Jc3RhdGljIGludCBmYWlsQ291bnQgPSAwOwotCXN0YXRpYyBpbnQgZXJyb3JDb3VudCA9IDA7Ci0JQ2xhc3MgY29udGVudENsYXNzID0gbnVsbDsKLQlTdHlsZWRUZXh0Q29udGVudCBjb250ZW50SW5zdGFuY2UgPSBudWxsOwotCWludCB2ZXJpZnkgPSAwOwotCU1ldGhvZCBjdXJyZW50TWV0aG9kID0gbnVsbDsKLQlib29sZWFuIGZhaWxlZCA9IGZhbHNlOwotCVN0eWxlZFRleHQgd2lkZ2V0ID0gbnVsbDsKLQlTaGVsbCBzaGVsbCA9IG51bGw7Ci0KLQlwdWJsaWMgU3R5bGVkVGV4dENvbnRlbnRTcGVjKCkgewotCX0KLQotCXB1YmxpYyB2b2lkIGFzc2VydFdpdGhNZXNzYWdlKFN0cmluZyBtZXNzYWdlLCBib29sZWFuIGNvbmRpdGlvbikgewotCQlTeXN0ZW0ub3V0LnByaW50KCJcdCIgKyBjdXJyZW50TWV0aG9kLmdldE5hbWUoKSArICIgIiArIG1lc3NhZ2UpOwotCQlpZiAoIWNvbmRpdGlvbikKLQkJCWZhaWwobWVzc2FnZSk7Ci0JCWVsc2UKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiIHBhc3NlZCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIGZhaWwoU3RyaW5nIG1lc3NhZ2UpIHsKLQkJZmFpbGVkID0gdHJ1ZTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgRkFJTEVEIik7Ci0JCWZhaWxDb3VudCsrOwotCX0KLQotCXB1YmxpYyBTdHlsZWRUZXh0Q29udGVudCBnZXRDb250ZW50SW5zdGFuY2UoKSB7Ci0JCWNvbnRlbnRJbnN0YW5jZS5zZXRUZXh0KCIiKTsKLQkJd2lkZ2V0LnNldENvbnRlbnQoY29udGVudEluc3RhbmNlKTsKLQkJLy8gZHcuIEhhZCB0byBhZGQgZm9yIG91ciBzcGVjaWFsIHZlcnNpb24gb2YgU3R5bGVkVGV4dENvbnRlbnQKLQkJLy8gTmVlZHMgdG8gYmUgcmVtb3ZlZCBmb3IgdGVzdGluZyBqZmFjZSdzIERvY3VtZW50QWRhcHRlcgotCQkoKFN0cnVjdHVyZWREb2N1bWVudFRvVGV4dEFkYXB0ZXIpIGNvbnRlbnRJbnN0YW5jZSkuc2V0V2lkZ2V0KHdpZGdldCk7Ci0JCXJldHVybiBjb250ZW50SW5zdGFuY2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VGVzdFRleHQoKSB7Ci0JCXJldHVybiAiVGhpcyBpcyB0aGUgZmlyc3QgbGluZS5cclxuIiArICJUaGlzIGlzIHRoZSBzZWNvbmQgbGluZS5cclxuIiArICJUaGlzIGlzIHRoZSB0aGlyZCBsaW5lLlxyXG4iICsgIlRoaXMgaXMgdGhlIGZvdXJ0aCBsaW5lLlxyXG4iICsgIlRoaXMgaXMgdGhlIGZpZnRoIGxpbmUuXHJcbiIgKyAiXHJcbiIgKyAiVGhpcyBpcyB0aGUgZmlyc3QgbGluZSBhZ2Fpbi5cclxuIiArICJUaGlzIGlzIHRoZSBzZWNvbmQgbGluZSBhZ2Fpbi5cclxuIiArICJUaGlzIGlzIHRoZSB0aGlyZCBsaW5lIGFnYWluLlxyXG4iICsgIlRoaXMgaXMgdGhlIGZvdXJ0aCBsaW5lIGFnYWluLlxyXG4iICsgIlRoaXMgaXMgdGhlIGZpZnRoIGxpbmUgYWdhaW4uXHJcbiIgKyAiXHJcbiIgKyAiVGhpcyBpcyB0aGUgZmlyc3QgbGluZSBvbmNlIGFnYWluLlxyXG4iICsgIlRoaXMgaXMgdGhlIHNlY29uZCBsaW5lIG9uY2UgYWdhaW4uXHJcbiIgKyAiVGhpcyBpcyB0aGUgdGhpcmQgbGluZSBvbmNlIGFnYWluLlxyXG4iICsgIlRoaXMgaXMgdGhlIGZvdXJ0aCBsaW5lIG9uY2UgYWdhaW4uXHJcbiIgKyAiVGhpcyBpcyB0aGUgZmlmdGggbGluZSBvbmNlIGFnYWluLiI7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCQlTdHlsZWRUZXh0Q29udGVudFNwZWMgc3BlYyA9IG5ldyBTdHlsZWRUZXh0Q29udGVudFNwZWMoKTsKLQkJaWYgKGFyZ3MubGVuZ3RoID4gMCkgewotCQkJY29udGVudENsYXNzTmFtZSA9IGFyZ3NbMF07Ci0JCQkvL1N0cmluZyBwYXRoID0gU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLmxpYnJhcnkucGF0aCIpOwotCQkJLy9TeXN0ZW0ub3V0LnByaW50bG4oIkphdmEgTGlicmFyeSBQYXRoOiAiICsgcGF0aCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlNZXNzYWdlQm94IGJveCA9IG5ldyBNZXNzYWdlQm94KGdldERpc3BsYXkoKS5nZXRBY3RpdmVTaGVsbCgpLCBTV1QuSUNPTl9FUlJPUik7Ci0JCQlib3guc2V0TWVzc2FnZSgiQ29udGVudCBjbGFzcyBtdXN0IGJlIHNwZWNpZmllZCBhcyBhbiBleGVjdXRpb24gYXJndW1lbnQuIik7IC8vJE5PTi1OTFMtMSQKLQkJCWJveC5vcGVuKCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJc3BlYy5ydW4oKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihmYWlsQ291bnQgKyAiIFRFU1QgRkFJTFVSRVMuIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihlcnJvckNvdW50ICsgIiBVTkVYUEVDVEVEIEVSUk9SUy4iKTsKLQl9Ci0KLQlzdGF0aWMgcHJpdmF0ZSBEaXNwbGF5IGdldERpc3BsYXkoKSB7Ci0JCXJldHVybiBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmIChjb250ZW50Q2xhc3NOYW1lLmVxdWFscygiIikpIHsKLQkJCU1lc3NhZ2VCb3ggYm94ID0gbmV3IE1lc3NhZ2VCb3goZ2V0RGlzcGxheSgpLmdldEFjdGl2ZVNoZWxsKCksIFNXVC5JQ09OX0VSUk9SKTsKLQkJCWJveC5zZXRNZXNzYWdlKCJDb250ZW50IGNsYXNzIG11c3QgYmUgc3BlY2lmaWVkIGFzIGFuIGV4ZWN1dGlvbiBhcmd1bWVudC4iKTsgLy8kTk9OLU5MUy0xJAotCQkJYm94Lm9wZW4oKTsKLQkJCXJldHVybjsKLQkJfQotCQlpZiAoY29udGVudENsYXNzID09IG51bGwpIHsKLQkJCXRyeSB7Ci0JCQkJY29udGVudENsYXNzID0gQ2xhc3MuZm9yTmFtZShjb250ZW50Q2xhc3NOYW1lKTsKLQkJCX0KLQkJCWNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCQlNZXNzYWdlQm94IGJveCA9IG5ldyBNZXNzYWdlQm94KGdldERpc3BsYXkoKS5nZXRBY3RpdmVTaGVsbCgpLCBTV1QuSUNPTl9FUlJPUik7Ci0JCQkJYm94LnNldE1lc3NhZ2UoIkNvbnRlbnQgY2xhc3M6XG4iICsgY29udGVudENsYXNzTmFtZSArICJcbm5vdCBmb3VuZCIpOyAvLyROT04tTkxTLTEkCi0JCQkJYm94Lm9wZW4oKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJdHJ5IHsKLQkJCWNvbnRlbnRJbnN0YW5jZSA9IChTdHlsZWRUZXh0Q29udGVudCkgY29udGVudENsYXNzLm5ld0luc3RhbmNlKCk7Ci0JCX0KLQkJY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJTWVzc2FnZUJveCBib3ggPSBuZXcgTWVzc2FnZUJveChnZXREaXNwbGF5KCkuZ2V0QWN0aXZlU2hlbGwoKSwgU1dULklDT05fRVJST1IpOwotCQkJYm94LnNldE1lc3NhZ2UoIlVuYWJsZSB0byBhY2Nlc3MgY29udGVudCBjbGFzczpcbiIgKyBjb250ZW50Q2xhc3NOYW1lKTsgLy8kTk9OLU5MUy0xJAotCQkJYm94Lm9wZW4oKTsKLQkJCXJldHVybjsKLQkJfQotCQljYXRjaCAoSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlNZXNzYWdlQm94IGJveCA9IG5ldyBNZXNzYWdlQm94KGdldERpc3BsYXkoKS5nZXRBY3RpdmVTaGVsbCgpLCBTV1QuSUNPTl9FUlJPUik7Ci0JCQlib3guc2V0TWVzc2FnZSgiVW5hYmxlIHRvIGluc3RhbnRpYXRlIGNvbnRlbnQgY2xhc3M6XG4iICsgY29udGVudENsYXNzTmFtZSk7IC8vJE5PTi1OTFMtMSQKLQkJCWJveC5vcGVuKCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJQ2xhc3MgY2xheno7Ci0JCWNsYXp6ID0gdGhpcy5nZXRDbGFzcygpOwotCQlNZXRob2RbXSBtZXRob2RzID0gY2xhenouZ2V0RGVjbGFyZWRNZXRob2RzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkrKykgewotCQkJc2V0VXAoKTsKLQkJCWN1cnJlbnRNZXRob2QgPSBtZXRob2RzW2ldOwotCQkJZmFpbGVkID0gZmFsc2U7Ci0JCQl0cnkgewotCQkJCWlmIChjdXJyZW50TWV0aG9kLmdldE5hbWUoKS5zdGFydHNXaXRoKCJ0ZXN0XyIpKSB7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oY3VycmVudE1ldGhvZC5nZXROYW1lKCkgKyAiLi4uIik7Ci0JCQkJCWN1cnJlbnRNZXRob2QuaW52b2tlKHRoaXMsIG5ldyBPYmplY3RbMF0pOwotCQkJCQlpZiAoIWZhaWxlZCkgewotCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJQQVNTRUQuIik7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZBSUxFRCIpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZXgpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlx0IiArIGN1cnJlbnRNZXRob2QuZ2V0TmFtZSgpICsgIiBFUlJPUiA9PT4gIiArIGV4LmdldFRhcmdldEV4Y2VwdGlvbigpLnRvU3RyaW5nKCkpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRkFJTEVEIik7Ci0JCQkJZXJyb3JDb3VudCsrOwotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXHQiICsgY3VycmVudE1ldGhvZC5nZXROYW1lKCkgKyAiIEVSUk9SID09PiAiICsgZXgudG9TdHJpbmcoKSk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJGQUlMRUQiKTsKLQkJCQllcnJvckNvdW50Kys7Ci0JCQl9Ci0JCQlpZiAodmVyaWZ5ICE9IDApIHsKLQkJCQl2ZXJpZnkgPSAwOwotCQkJCWNvbnRlbnRJbnN0YW5jZS5yZW1vdmVUZXh0Q2hhbmdlTGlzdGVuZXIodGhpcyk7Ci0JCQl9Ci0JCQl0ZWFyRG93bigpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB7Ci0JCS8vIGNyZWF0ZSBzaGVsbAotCQlzaGVsbCA9IG5ldyBTaGVsbCgpOwotCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCWxheW91dC5udW1Db2x1bW5zID0gMTsKLQkJc2hlbGwuc2V0U2l6ZSg1MDAsIDMwMCk7Ci0JCXNoZWxsLnNldExheW91dChsYXlvdXQpOwotCQkvLyBjcmVhdGUgd2lkZ2V0Ci0JCXdpZGdldCA9IG5ldyBTdHlsZWRUZXh0KHNoZWxsLCBTV1QuQk9SREVSIHwgU1dULk1VTFRJIHwgU1dULlZfU0NST0xMIHwgU1dULkhfU0NST0xMKTsKLQkJR3JpZERhdGEgc3BlYyA9IG5ldyBHcmlkRGF0YSgpOwotCQlzcGVjLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotCQlzcGVjLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotCQlzcGVjLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLQkJc3BlYy5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7Ci0JCXdpZGdldC5zZXRMYXlvdXREYXRhKHNwZWMpOwotCQlzaGVsbC5vcGVuKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB7Ci0JCWlmIChzaGVsbCAhPSBudWxsICYmICFzaGVsbC5pc0Rpc3Bvc2VkKCkpCi0JCQlzaGVsbC5kaXNwb3NlKCk7Ci0JCXNoZWxsID0gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X0RlbGV0ZSgpIHsKLQkJU3R5bGVkVGV4dENvbnRlbnQgY29udGVudCA9IGdldENvbnRlbnRJbnN0YW5jZSgpOwotCQlTdHJpbmcgbmV3VGV4dDsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcciIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNiwgMiwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWE6IiwgbmV3VGV4dC5lcXVhbHMoIlRoaXNcbmlhIHRlc3RcciIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJUaGlzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFjOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoImlhIHRlc3QiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xuaXMgYSB0ZXN0XHIiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDUsIDksICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJhOiIsIG5ld1RleHQuZXF1YWxzKCJUaGlzXG5cciIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIlRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcbmxpbmUgM1xubGluZSA0Iik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgyMSwgNywgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2E6IiwgbmV3VGV4dC5lcXVhbHMoIlRoaXNcbmlzIGEgdGVzdFxubGluZSAzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2M6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJpcyBhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2U6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygibGluZSAzIikpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbmlzIGEgdGVzdFxubGluZSAzXG5saW5lIDQiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDUsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRhOiIsIG5ld1RleHQuZXF1YWxzKCJpcyBhIHRlc3RcbmxpbmUgM1xubGluZSA0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiaXMgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoImxpbmUgMyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJsaW5lIDQiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgxNiwgNywgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGY6IiwgbmV3VGV4dC5lcXVhbHMoImlzIGEgdGVzdFxubGluZSAzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRnOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoImlzIGEgdGVzdCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0aDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJsaW5lIDMiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg5LCA3LCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0aToiLCBuZXdUZXh0LmVxdWFscygiaXMgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRqOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoImlzIGEgdGVzdCIpKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDEsIDgsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRrOiIsIG5ld1RleHQuZXF1YWxzKCJpIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRsOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoImkiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAxLCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0bToiLCBuZXdUZXh0LmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRuOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcciIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNSwgOSwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWE6IiwgbmV3VGV4dC5lcXVhbHMoIlRoaXNcblxyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjViOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiIikpOwotCQljb250ZW50LnNldFRleHQoIkwxXHJcbkwyXHJcbkwzXHJcbkw0XHJcbiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNCwgOCwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmE6IiwgbmV3VGV4dC5lcXVhbHMoIkwxXHJcbkw0XHJcbiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2YjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIkwxIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIkw0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJcbkwxXHJcbkwyIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAxLCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3YToiLCBuZXdUZXh0LmVxdWFscygiTDFcclxuTDIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2I6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJMMSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJMMiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJcbkwxXHJcbkwyXHJcbiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNywgMiwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGE6IiwgbmV3VGV4dC5lcXVhbHMoIlxuTDFcclxuTDIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTDEiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiTDIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiXG5MaW5lIDFcbkxpbmUgMlxuIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCA3LCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo5YToiLCBuZXdUZXh0LmVxdWFscygiXG5MaW5lIDJcbiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo5YjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjljOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo5ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJMaW5lIDIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiIikpOwotCQljb250ZW50LnNldFRleHQoIkxpbmUgMVxuTGluZSAyXG4iKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDYsIDgsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEwYToiLCBuZXdUZXh0LmVxdWFscygiTGluZSAxIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEwYjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDEpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEwYzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJMaW5lIDEiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiTGluZSBvbmUgaXMgc2hvcnRcclxuTGluZSAyIGlzIGEgbG9uZ2VyIGxpbmVcclxuTGluZSAzXG4iKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDEyLCAxNywgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTFhOiIsIG5ld1RleHQuZXF1YWxzKCJMaW5lIG9uZSBpcyBhIGxvbmdlciBsaW5lXHJcbkxpbmUgM1xuIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjExYjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjExYzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJMaW5lIG9uZSBpcyBhIGxvbmdlciBsaW5lIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjExZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJMaW5lIDMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTFlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X0VtcHR5KCkgewotCQlTdHlsZWRUZXh0Q29udGVudCBjb250ZW50ID0gZ2V0Q29udGVudEluc3RhbmNlKCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWE6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAxKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgidGVzdCIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgNCwgIiIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJhOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmI6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfSW5zZXJ0KCkgewotCQlTdHlsZWRUZXh0Q29udGVudCBjb250ZW50ID0gZ2V0Q29udGVudEluc3RhbmNlKCk7Ci0JCVN0cmluZyBuZXdUZXh0OwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbmlzIGEgdGVzdFxyIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAidGVzdFxuICIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWE6IiwgbmV3VGV4dC5lcXVhbHMoInRlc3RcbiBUaGlzXG5pcyBhIHRlc3RcciIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDQpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoInRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiIFRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiaXMgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFmOiIsIGNvbnRlbnQuZ2V0TGluZSgzKS5lcXVhbHMoIiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcciIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNSwgMCwgIioqKiAiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJhOiIsIG5ld1RleHQuZXF1YWxzKCJUaGlzXG4qKiogaXMgYSB0ZXN0XHIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJUaGlzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIioqKiBpcyBhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiIikpOwotCQljb250ZW50LnNldFRleHQoIkxpbmUgMVxyXG5MaW5lIDIiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDAsICJcciIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2E6IiwgbmV3VGV4dC5lcXVhbHMoIlxyTGluZSAxXHJcbkxpbmUgMiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJMaW5lIDEiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2U6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiTGluZSAyIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoOSwgMCwgIlxyIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozZjoiLCBuZXdUZXh0LmVxdWFscygiXHJMaW5lIDFcclxuXHJMaW5lIDIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2c6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA0KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozaDoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2k6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTGluZSAxIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNqOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozazoiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCJMaW5lIDIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xuaXMgYSB0ZXN0XHIiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDAsICJcbiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGE6IiwgbmV3VGV4dC5lcXVhbHMoIlxuVGhpc1xuaXMgYSB0ZXN0XHIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA0KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJpcyBhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGY6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiIikpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbmlzIGEgdGVzdFxyIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg3LCAwLCAiXHJcbm5ld0xpbmUiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVhOiIsIG5ld1RleHQuZXF1YWxzKCJUaGlzXG5pc1xyXG5uZXdMaW5lIGEgdGVzdFxyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjViOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gNCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJuZXdMaW5lIGEgdGVzdCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZjoiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAiVGhpc1xuaXNcclxubmV3TGluZSBhIHRlc3RcciIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmE6IiwgbmV3VGV4dC5lcXVhbHMoIlRoaXNcbmlzXHJcbm5ld0xpbmUgYSB0ZXN0XHIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA0KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJUaGlzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoImlzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIm5ld0xpbmUgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZmOiIsIGNvbnRlbnQuZ2V0TGluZSgzKS5lcXVhbHMoIiIpKTsKLQkJLy8gaW5zZXJ0IGF0IGVuZAotCQljb250ZW50LnNldFRleHQoIlRoaXMiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDQsIDAsICJcbiAiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdhOiIsIG5ld1RleHQuZXF1YWxzKCJUaGlzXG4gIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2M6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCIgIikpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNSwgMCwgIlxuIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3ZToiLCBuZXdUZXh0LmVxdWFscygiVGhpc1xuXG4iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2Y6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3ZzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJUaGlzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdoOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3aToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCIiKSk7Ci0JCS8vIGluc2VydCBhdCBiZWdpbm5pbmcKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAiXG4iKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhhOiIsIG5ld1RleHQuZXF1YWxzKCJcblRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiVGhpcyIpKTsKLQkJLy8gaW5zZXJ0IHRleHQKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcciIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNSwgMCwgIioqKiAiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjlhOiIsIG5ld1RleHQuZXF1YWxzKCJUaGlzXG4qKiogaXMgYSB0ZXN0XHIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo5YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJUaGlzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjlkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIioqKiBpcyBhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiIikpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNSwgMCwgImxpbmUiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEwYToiLCBuZXdUZXh0LmVxdWFscygiVGhpc1xubGluZSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMGI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMGM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMGQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygibGluZSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMGU6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoOCkgPT0gMSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTBmOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDkpID09IDEpOwotCQkvLyBpbnNlcnQgYXQgYmVnaW5uaW5nCi0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xuIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAibGluZVxuIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMWE6IiwgbmV3VGV4dC5lcXVhbHMoImxpbmVcblRoaXNcbiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMWI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMWM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygibGluZSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMWQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMWU6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoNSkgPT0gMSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiTGluZSAxXHJcbkxpbmUgMlxyXG5MaW5lIDMiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDAsICJcciIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTJhOiIsIG5ld1RleHQuZXF1YWxzKCJcckxpbmUgMVxyXG5MaW5lIDJcclxuTGluZSAzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEyYjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDQpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEyYzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTJkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIkxpbmUgMSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMmU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiTGluZSAyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEyZjoiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCJMaW5lIDMiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiTGluZSAxXG5MaW5lIDJcbkxpbmUgMyIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNywgMCwgIkxpbmUxYVxuTGluZTFiXG4iKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEzYToiLCBuZXdUZXh0LmVxdWFscygiTGluZSAxXG5MaW5lMWFcbkxpbmUxYlxuTGluZSAyXG5MaW5lIDMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTNiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gNSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTNjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIkxpbmUgMSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxM2Q6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTGluZTFhIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEzZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJMaW5lMWIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTNmOiIsIGNvbnRlbnQuZ2V0TGluZSgzKS5lcXVhbHMoIkxpbmUgMiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxM2c6IiwgY29udGVudC5nZXRMaW5lKDQpLmVxdWFscygiTGluZSAzIikpOwotCQljb250ZW50LnNldFRleHQoIkxpbmUgMVxuTGluZSAyXG5MaW5lIDMiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDExLCAwLCAibDFhIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNGE6IiwgbmV3VGV4dC5lcXVhbHMoIkxpbmUgMVxuTGluZWwxYSAyXG5MaW5lIDMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTRiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTRjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIkxpbmUgMSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNGQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTGluZWwxYSAyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE0ZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJMaW5lIDMiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiTGluZSAxXG5MaW5lIDIgaXMgYSB2ZXJ5IGxvbmcgbGluZSB0aGF0IHNwYW5zIG1hbnkgd29yZHNcbkxpbmUgMyIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMTksIDAsICJ2ZXJ5LCB2ZXJ5LCAiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE1YToiLCBuZXdUZXh0LmVxdWFscygiTGluZSAxXG5MaW5lIDIgaXMgYSB2ZXJ5LCB2ZXJ5LCB2ZXJ5IGxvbmcgbGluZSB0aGF0IHNwYW5zIG1hbnkgd29yZHNcbkxpbmUgMyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNWI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNWM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiTGluZSAxIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE1ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJMaW5lIDIgaXMgYSB2ZXJ5LCB2ZXJ5LCB2ZXJ5IGxvbmcgbGluZSB0aGF0IHNwYW5zIG1hbnkgd29yZHMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTVlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIkxpbmUgMyIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X0xpbmVfQ29udmVyc2lvbigpIHsKLQkJU3R5bGVkVGV4dENvbnRlbnQgY29udGVudCA9IGdldENvbnRlbnRJbnN0YW5jZSgpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbmlzIGEgdGVzdFxycmVwZWF0XG5lbmRcciIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFhOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gNSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWI6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYzoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgwKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJpcyBhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWU6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoNCkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWY6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMSkgPT0gNSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWc6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygicmVwZWF0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFoOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDIpID09IDE1KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxaToiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCJlbmQiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWo6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMykgPT0gMjIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFrOiIsIGNvbnRlbnQuZ2V0TGluZSg0KS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxbDoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSg0KSA9PSAyNik7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xyXG5pcyBhIHRlc3QiKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYToiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJiOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoImlzIGEgdGVzdCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYzoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCg0KSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyZDoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCg1KSA9PSAwKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXHJcbmlzIGEgdGVzdFxyIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2E6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYjoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJpcyBhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2M6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMTUpID09IDEpOwotCQljb250ZW50LnNldFRleHQoIlxyXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YToiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRiOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YzoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGQ6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMCkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGU6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMSkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGY6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMikgPT0gMSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiXHJcblxuXHJcclxuIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWE6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA1KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWM6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMCkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVlOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDEpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVmOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZzoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgyKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1aDoiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWk6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMykgPT0gNCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWo6IiwgY29udGVudC5nZXRMaW5lKDQpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVrOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDQpID09IDYpOwotCQljb250ZW50LnNldFRleHQoInRlc3RcclxydGVzdDJcclxyIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmE6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA1KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2YjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJ0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZjOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDApID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZToiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgxKSA9PSA1KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZjoiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJ0ZXN0MiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZzoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgyKSA9PSA2KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2aDoiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6Nmk6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMykgPT0gMTIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZqOiIsIGNvbnRlbnQuZ2V0TGluZSg0KS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2azoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSg0KSA9PSAxMyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdF9MaW5lX1RvX09mZnNldCgpIHsKLQkJU3R5bGVkVGV4dENvbnRlbnQgY29udGVudCA9IGdldENvbnRlbnRJbnN0YW5jZSgpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbmlzIGEgdGVzdFxycmVwZWF0XG5lbmRcciIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFhOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDApID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFiOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDEpID09IDUpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFjOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDIpID09IDE1KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxZDoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgzKSA9PSAyMik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWU6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoNCkgPT0gMjYpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcclxuaXMgYSB0ZXN0Iik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmE6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMCkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmI6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMSkgPT0gNik7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiXHJcbiIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNhOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDApID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNiOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDEpID09IDIpOwotCQljb250ZW50LnNldFRleHQoIlxyXG5cblxyXHJcbiIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRhOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDApID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRiOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDEpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRjOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDIpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRkOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDMpID09IDQpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRlOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDQpID09IDYpOwotCQljb250ZW50LnNldFRleHQoIlxyXG50ZXN0XHJcbiIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVhOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDApID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjViOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDEpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVjOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDIpID09IDgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfT2Zmc2V0X1RvX0xpbmUoKSB7Ci0JCVN0eWxlZFRleHRDb250ZW50IGNvbnRlbnQgPSBnZXRDb250ZW50SW5zdGFuY2UoKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RccnJlcGVhdFxuZW5kXHIiKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYToiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgwKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYjoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgzKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYzoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCg0KSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxZDoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgyNSkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWU6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMjYpID09IDQpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcclxuaXMgYSB0ZXN0Iik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmE6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoNSkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmI6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoNikgPT0gMSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmM6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMTApID09IDEpOwotCQljb250ZW50LnNldFRleHQoIlxyXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYToiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgwKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYjoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgxKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYzoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgyKSA9PSAxKTsKLQkJY29udGVudC5zZXRUZXh0KCJcclxuXG5cclxyXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YToiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgwKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YjoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgxKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YzoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgyKSA9PSAxKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZDoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgzKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZToiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCg0KSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZjoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCg1KSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZzoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCg2KSA9PSA0KTsKLQkJY29udGVudC5zZXRUZXh0KCJcclxuXHJcbiIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVhOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDApID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjViOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDEpID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVjOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDIpID09IDEpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVkOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDMpID09IDEpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVlOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDQpID09IDIpOwotCQljb250ZW50LnNldFRleHQoIlxyXHJcclxuXHJcbiIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZhOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDApID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZiOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDEpID09IDEpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZjOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDIpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZkOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDQpID09IDMpOwotCQljb250ZW50LnNldFRleHQoIiIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdhOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDApID09IDApOwotCQljb250ZW50ID0gZ2V0Q29udGVudEluc3RhbmNlKCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGE6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMCkgPT0gMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdF9SZXBsYWNlKCkgewotCQlTdHlsZWRUZXh0Q29udGVudCBjb250ZW50ID0gZ2V0Q29udGVudEluc3RhbmNlKCk7Ci0JCVN0cmluZyBuZXdUZXh0OwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbmlzIGEgdGVzdFxyIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg1LCA0LCAiYSIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWE6IiwgbmV3VGV4dC5lcXVhbHMoIlRoaXNcbmEgdGVzdFxyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiIikpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbmlzIGEgdGVzdFxyIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg1LCAyLCAid2FzIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYToiLCBuZXdUZXh0LmVxdWFscygiVGhpc1xud2FzIGEgdGVzdFxyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJ3YXMgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzIGlzIGEgdGVzdFxyIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg1LCAyLCAid2FzIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYToiLCBuZXdUZXh0LmVxdWFscygiVGhpcyB3YXMgYSB0ZXN0XHIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2I6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJUaGlzIHdhcyBhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2Q6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMTUpID09IDApOwotCQljb250ZW50LnNldFRleHQoIkxpbmUgMVxuTGluZSAyXG5MaW5lIDMiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDcsICJMYVxuTGJcbiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGE6IiwgbmV3VGV4dC5lcXVhbHMoIkxhXG5MYlxuTGluZSAyXG5MaW5lIDMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGI6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiTGEiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGM6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTGIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGQ6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiTGluZSAyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRlOiIsIGNvbnRlbnQuZ2V0TGluZSgzKS5lcXVhbHMoIkxpbmUgMyIpKTsKLQkJY29udGVudC5zZXRUZXh0KGdldFRlc3RUZXh0KCkpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWludCBzdGFydCA9IGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDYpOwotCQlpbnQgZW5kID0gY29udGVudC5nZXRPZmZzZXRBdExpbmUoMTEpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2Uoc3RhcnQsIGVuZCAtIHN0YXJ0LCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YToiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDEyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YToiLCBjb250ZW50LmdldExpbmUoNSkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWE6IiwgY29udGVudC5nZXRMaW5lKDYpLmVxdWFscygiIikpOwotCQlzdGFydCA9IGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDcpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2Uoc3RhcnQsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkgLSBzdGFydCwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWE6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA4KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YToiLCBjb250ZW50LmdldExpbmUoNSkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWE6IiwgY29udGVudC5nZXRMaW5lKDYpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVhOiIsIGNvbnRlbnQuZ2V0TGluZSg3KS5lcXVhbHMoIiIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X1NwZWNpYWxfQ2FzZXMoKSB7Ci0JCVN0cmluZyBuZXdUZXh0OwotCQlTdHlsZWRUZXh0Q29udGVudCBjb250ZW50ID0gZ2V0Q29udGVudEluc3RhbmNlKCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MGE6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAxKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjowYjoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgwKSA9PSAwKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAiXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYToiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgxLCAwLCAiXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgyLCAwLCAiXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgzLCAwLCAiXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxZDoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg0LCAwLCAiXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxZToiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg1LCAwLCAiXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxZjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg2LCAwLCAiXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxZzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg3LCAwLCAiXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxaDoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMCwgIlxuIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYToiLCBuZXdUZXh0LmVxdWFscygiXG5UaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJiOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYzoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJUaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMSwgMCwgIlxuIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyZDoiLCBuZXdUZXh0LmVxdWFscygiXG5cblRoaXMgaXMgdGhlIGlucHV0L291dHB1dCB0ZXh0IGNvbXBvbmVudC4iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmU6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJmOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyZzoiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJUaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMiwgMCwgIlxuIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYToiLCBuZXdUZXh0LmVxdWFscygiXG5cblxuVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2M6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNkOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozZToiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCJUaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMywgMCwgIlxuIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozZjoiLCBuZXdUZXh0LmVxdWFscygiXG5cblxuXG5UaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNnOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozaDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2k6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNqOiIsIGNvbnRlbnQuZ2V0TGluZSgzKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozazoiLCBjb250ZW50LmdldExpbmUoNCkuZXF1YWxzKCJUaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMywgMSwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGE6IiwgbmV3VGV4dC5lcXVhbHMoIlxuXG5cblRoaXMgaXMgdGhlIGlucHV0L291dHB1dCB0ZXh0IGNvbXBvbmVudC4iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGI6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRjOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZDoiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGU6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDIsIDEsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRmOiIsIG5ld1RleHQuZXF1YWxzKCJcblxuVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGg6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRpOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIlRoaXMgaXMgdGhlIGlucHV0L291dHB1dCB0ZXh0IGNvbXBvbmVudC4iKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgyLCAwLCAiYSIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWE6IiwgbmV3VGV4dC5lcXVhbHMoIlxuXG5hVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWM6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVkOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoImFUaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIikpOwotCQkvLyBkZWxldGUgb25seSBwYXJ0IG9mIGEgZGVsaW1pdGVyCi0JCWNvbnRlbnQuc2V0VGV4dCgiTDFcclxuTDJcclxuTDNcclxuTDRcclxuIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAzLCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZToiLCBuZXdUZXh0LmVxdWFscygiXG5MMlxyXG5MM1xyXG5MNFxyXG4iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWY6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA1KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWg6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTDIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWk6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiTDMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWo6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiTDQiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWs6IiwgY29udGVudC5nZXRMaW5lKDQpLmVxdWFscygiIikpOwotCQkvLyByZXBsYWNlIHBhcnQgb2YgYSBkZWxpbWl0ZXIKLQkJY29udGVudC5zZXRUZXh0KCJMMVxyXG5MMlxyXG5MM1xyXG5MNFxyXG4iKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDMsIDEsICJ0ZXN0XG4iKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZhOiIsIG5ld1RleHQuZXF1YWxzKCJMMVxydGVzdFxuTDJcclxuTDNcclxuTDRcclxuIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gNik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiTDEiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygidGVzdCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJMMiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZjoiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCJMMyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZzoiLCBjb250ZW50LmdldExpbmUoNCkuZXF1YWxzKCJMNCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2aDoiLCBjb250ZW50LmdldExpbmUoNSkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiYWJjXHJcbmRlZiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMSwgMSwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2E6IiwgbmV3VGV4dC5lcXVhbHMoImFjXHJcbmRlZiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3YjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoImFjIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoImRlZiIpKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDEsIDEsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdlOiIsIG5ld1RleHQuZXF1YWxzKCJhXHJcbmRlZiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3ZjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdnOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoImEiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2g6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiZGVmIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMSwgMiwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2k6IiwgbmV3VGV4dC5lcXVhbHMoImFkZWYiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2o6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAxKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3azoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJhZGVmIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMSwgMSwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2w6IiwgbmV3VGV4dC5lcXVhbHMoImFlZiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3bToiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDEpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjduOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoImFlZiIpKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDEsIDEsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdvOiIsIG5ld1RleHQuZXF1YWxzKCJhZiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3cDoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDEpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdxOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoImFmIikpOwotCQljb250ZW50LnNldFRleHQoImFiYyIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMSwgIjEiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhhOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGI6IiwgbmV3VGV4dC5lcXVhbHMoIjFiYyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIxYmMiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAiXG4iKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhkOiIsIG5ld1RleHQuZXF1YWxzKCJcbjFiYyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4ZToiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhmOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4ZzoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCIxYmMiKSk7Ci0JCWNvbnRlbnQgPSBnZXRDb250ZW50SW5zdGFuY2UoKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDAsICJhIik7Ci0JCWNvbnRlbnQuc2V0VGV4dCgicGFja2FnZSB0ZXN0O1xuLyogTGluZSAxXG4gKiBMaW5lIDJcbiAqL1xucHVibGljIGNsYXNzIFNpbXBsZUNsYXNzIHtcbn0iKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDE0LCAyMywgIlx0LypMaW5lIDFcblx0ICogTGluZSAyXG5cdCAqLyIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWE6IiwgbmV3VGV4dC5lcXVhbHMoInBhY2thZ2UgdGVzdDtcblx0LypMaW5lIDFcblx0ICogTGluZSAyXG5cdCAqL1xucHVibGljIGNsYXNzIFNpbXBsZUNsYXNzIHtcbn0iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA2KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo5YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJwYWNrYWdlIHRlc3Q7IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjlkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIlx0LypMaW5lIDEiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiXHQgKiBMaW5lIDIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWY6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiXHQgKi8iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWc6IiwgY29udGVudC5nZXRMaW5lKDQpLmVxdWFscygicHVibGljIGNsYXNzIFNpbXBsZUNsYXNzIHsiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWg6IiwgY29udGVudC5nZXRMaW5lKDUpLmVxdWFscygifSIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X1RleHRfQ2hhbmdlZF9FdmVudCgpIHsKLQkJU3R5bGVkVGV4dENvbnRlbnQgY29udGVudCA9IGdldENvbnRlbnRJbnN0YW5jZSgpOwotCQljb250ZW50LmFkZFRleHRDaGFuZ2VMaXN0ZW5lcih0aGlzKTsKLQkJdmVyaWZ5ID0gMTsKLQkJY29udGVudC5zZXRUZXh0KCJ0ZXN0aW5nIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAiXG4iKTsKLQkJdmVyaWZ5ID0gMjsKLQkJY29udGVudC5zZXRUZXh0KCJcblxuIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAyLCAiYSIpOwotCQl2ZXJpZnkgPSAzOwotCQljb250ZW50LnNldFRleHQoImEiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDEsICJcblxuIik7Ci0JCXZlcmlmeSA9IDU7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiTGluZSAxXHJcbkxpbmUgMiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMCwgIlxyIik7Ci0JCXZlcmlmeSA9IDY7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xuaXMgYSB0ZXN0XG5saW5lIDNcbmxpbmUgNCIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMjEsIDcsICIiKTsKLQkJdmVyaWZ5ID0gNzsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcciIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNSwgOSwgIiIpOwotCQl2ZXJpZnkgPSA4OwotCQljb250ZW50LnNldFRleHQoIlxuTDFcclxuTDJcclxuIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg3LCAyLCAiIik7Ci0JCXZlcmlmeSA9IDk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiTDFcclxuIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgyLCAyLCAidGVzdCIpOwotCQl2ZXJpZnkgPSAwOwotCQljb250ZW50LnJlbW92ZVRleHRDaGFuZ2VMaXN0ZW5lcih0aGlzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXh0Q2hhbmdlZChUZXh0Q2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JfQotCi0JcHVibGljIHZvaWQgdGV4dENoYW5naW5nKFRleHRDaGFuZ2luZ0V2ZW50IGV2ZW50KSB7Ci0JCXN3aXRjaCAodmVyaWZ5KSB7Ci0JCQljYXNlIDEgOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDApOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAxKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAyIDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MmE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAyKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMyA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6M2I6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDIpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDQgOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDApOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAxKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSA1IDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6NWE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAwKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMSk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgNiA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMSk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6NmI6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDApOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDggOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4YToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDEpOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAwKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSA5IDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6OWE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAxKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo5YjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTAgOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMGE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAwKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMGI6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDApOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDExIDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTFhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTFiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAwKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxMiA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEyYToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDApOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEyYjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTMgOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxM2E6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAwKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxM2I6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDApOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDE0IDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTRhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTRiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAxKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxNSA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE1YToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDEpOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE1YjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMik7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTYgOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNmE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAwKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNmI6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDEpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDE3IDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTdhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTdiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAyKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxOCA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE4YToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDApOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE4YjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMSk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTkgOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxOWE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAwKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxOWI6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDQpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDIwIDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MjBhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MjBiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAyKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGV4dFNldChUZXh0Q2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvU3R5bGVkVGV4dFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvU3R5bGVkVGV4dFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg3NmY0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1N0eWxlZFRleHRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMub3RoZXI7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVkVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLQotLyoqCi0gKiBJbnNlcnQgdGhlIHR5cGUncyBkZXNjcmlwdGlvbiBoZXJlLgotICogQ3JlYXRpb24gZGF0ZTogKDMvMjAvMjAwMSA2OjE5OjU4IFBNKQotICogQGF1dGhvcjogRGF2aWQgV2lsbGlhbXMKLSAqLwotcHVibGljIGNsYXNzIFN0eWxlZFRleHRUZXN0IHsKLQkvKioKLQkgKiBTdHlsZWRUZXh0VGVzdCBjb25zdHJ1Y3RvciBjb21tZW50LgotCSAqLwotCXB1YmxpYyBTdHlsZWRUZXh0VGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBEb24ndCBmb3JnZXQsIHRoZSAqc3d0Ki5kbGwgd2lsbCBoYXZlIHRvIGJlIGNvcGllZCB0byBwcm9ncmFtIGRpcmVjdG9yeSBmb3IgdGhpcyB0byB3b3JrLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQotCQl0cnkgewotCQkJU2hlbGwgc2hlbGwgPSBuZXcgU2hlbGwoKTsKLQkJCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJCXNoZWxsLnNldExheW91dChsYXlvdXQpOwotCi0JCQlCdXR0b24gYnV0dG9uID0gbmV3IEJ1dHRvbihzaGVsbCwgU1dULlBVU0gpOwotCQkJYnV0dG9uLnNldFRleHQoIkFjdGlvbiIpOwotCQkJYnV0dG9uLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIG5ldyBMaXN0ZW5lcigpIHsKLQkJCQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBlKSB7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiYnV0dG9uIHB1c2hlZCIpOwotCQkJCX0KLQkJCX0pOwotCi0JCQlTdHlsZWRUZXh0IHRleHQgPSBuZXcgU3R5bGVkVGV4dChzaGVsbCwgU1dULkJPUkRFUiArIFNXVC5IX1NDUk9MTCArIFNXVC5WX1NDUk9MTCk7Ci0JCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0JCQl0ZXh0LnNldExheW91dERhdGEoZGF0YSk7Ci0KLQkJCS8vCi0JCQkvLwkJU3RyaW5nIGZpbGVOYW1lID0gU3lzdGVtLmdldFByb3BlcnR5KCJ1c2VyLmRpciIpICsgIlxcIiArICJqYXBhbmVzZV91dGYtMTYudHh0IjsKLQkJCS8vCQlTdHJpbmcgZW5jb2RpbmcgPSAiVW5pY29kZUJpZyI7Ci0KLQkJCVN0cmluZyBmaWxlTmFtZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgidXNlci5kaXIiKSArICJcXCIgKyAiamFwYW5lc2VfY3AxMjUyLnR4dCI7Ci0JCQlTdHJpbmcgZW5jb2RpbmcgPSAiQ3AxMjUyIjsKLQkJCS8vc3VuLmlvLkJ5dGVUb0NoYXJDb252ZXJ0ZXIuZ2V0RGVmYXVsdCgpLnRvU3RyaW5nKCk7Ci0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCBmaWxlOiAiICsgZmlsZU5hbWUpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCIgICBFbmNvZGluZzogIiArIGVuY29kaW5nKTsKLQotCQkJSW5wdXRTdHJlYW0gaW4gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGVOYW1lKTsKLQkJCUlucHV0U3RyZWFtUmVhZGVyIGluU3RyZWFtID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKGluLCBlbmNvZGluZyk7Ci0JCQkvL1JlYWRlciBpblN0cmVhbSA9IG5ldyBGaWxlUmVhZGVyKGZpbGVOYW1lKTsKLQkJCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCXdoaWxlIChpblN0cmVhbS5yZWFkeSgpKSB7Ci0JCQkJc2IuYXBwZW5kKChjaGFyKSBpblN0cmVhbS5yZWFkKCkpOwotCQkJfQotCQkJU3RyaW5nIGlucHV0U3RyaW5nID0gc2IudG9TdHJpbmcoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiTGVuZ3RoIG9mIGlucHV0OiAiICsgaW5wdXRTdHJpbmcubGVuZ3RoKCkpOwotCQkJLy8KLQkJCXRleHQuc2V0VGV4dChpbnB1dFN0cmluZyk7Ci0KLQkJCXNoZWxsLnNldFNpemUoNDAwLCAyMDApOwotCQkJc2hlbGwub3BlbigpOwotCi0JCQlEaXNwbGF5IGRpc3BsYXkgPSBzaGVsbC5nZXREaXNwbGF5KCk7Ci0JCQl3aGlsZSAoc2hlbGwgIT0gbnVsbCAmJiAhc2hlbGwuaXNEaXNwb3NlZCgpKSB7Ci0JCQkJaWYgKCFkaXNwbGF5LnJlYWRBbmREaXNwYXRjaCgpKQotCQkJCQlkaXNwbGF5LnNsZWVwKCk7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiB0KSB7Ci0JCQl0LnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvVW5pdFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1VuaXRUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzJmNDA0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvVW5pdFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5vdGhlcjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnBhcnNlci5KU1BTb3VyY2VQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmRvY3VtZW50LlN0cnVjdHVyZWREb2N1bWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmx0ay5wYXJzZXIuQmxvY2tNYXJrZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5JU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5OZXdEb2N1bWVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuTm9DaGFuZ2VFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlJlZ2lvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlJlZ2lvbnNSZXBsYWNlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuU3RydWN0dXJlZERvY3VtZW50RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5TdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb25Db250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb25MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC51dGlsLkRlYnVnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5ET01Nb2RlbEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnBhcnNlci5YTUxTb3VyY2VQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucmVnaW9ucy5ET01SZWdpb25Db250ZXh0OwotCi1wdWJsaWMgY2xhc3MgVW5pdFRlc3RzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJvdGVjdGVkIElTdHJ1Y3R1cmVkRG9jdW1lbnQgZk1vZGVsOwotCXByb3RlY3RlZCBJRE9NTW9kZWwgdHJlZTsKLQlwcm90ZWN0ZWQgaW50IGV2ZW50Q2FzZSA9IDE7Ci0JcHJvdGVjdGVkIGJvb2xlYW4gZXZlbnRSZXN1bHQ7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRU5FUklDX05PREVTX1JFUExBQ0VEX0VWRU5UX0NBU0UgPSAxMDAxOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFTkVSSUNfUkVHSU9OU19SRVBMQUNFRF9FVkVOVF9DQVNFID0gMTAwMjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRU5FUklDX1JFR0lPTl9DSEFOR0VEX0VWRU5UX0NBU0UgPSAxMDAzOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFTkVSSUNfTkVXX01PREVMX0VWRU5UX0NBU0UgPSAxMDA0OwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFTkVSSUNfTk9fQ0hBTkdFX0VWRU5UX0NBU0UgPSAxMDA1OwotCi0JcHJvdGVjdGVkIGNsYXNzIFN0cnVjdHVyZWREb2N1bWVudExpc3RlbmVyUHJveHkgaW1wbGVtZW50cyBJU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXIgewotCQlwdWJsaWMgdm9pZCBuZXdNb2RlbChOZXdEb2N1bWVudEV2ZW50IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KSB7Ci0JCQloYW5kbGVFdmVudChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBub0NoYW5nZShOb0NoYW5nZUV2ZW50IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KSB7Ci0JCQloYW5kbGVFdmVudChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBub2Rlc1JlcGxhY2VkKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KSB7Ci0JCQloYW5kbGVFdmVudChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCByZWdpb25DaGFuZ2VkKFJlZ2lvbkNoYW5nZWRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkJaGFuZGxlRXZlbnQoc3RydWN0dXJlZERvY3VtZW50RXZlbnQpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcmVnaW9uc1JlcGxhY2VkKFJlZ2lvbnNSZXBsYWNlZEV2ZW50IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KSB7Ci0JCQloYW5kbGVFdmVudChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXJQcm94eSBwcm94eSA9IG5ldyBTdHJ1Y3R1cmVkRG9jdW1lbnRMaXN0ZW5lclByb3h5KCk7Ci0KLQkvKioKLQkgKiBNaW5pbWl6YXRpb25UZXN0IGNvbnN0cnVjdG9yIGNvbW1lbnQuCi0JICovCi0JcHVibGljIFVuaXRUZXN0cyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVFdmVudChTdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQlldmVudFJlc3VsdCA9IGZhbHNlOwotCQlzd2l0Y2ggKGV2ZW50Q2FzZSkgewotCQkJY2FzZSAxIDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIE5vQ2hhbmdlRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDIgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgTm9DaGFuZ2VFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMyA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgNCA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgNSA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJaWYgKDMgPT0gKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE9sZFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5nZXRMZW5ndGgoKSkKLQkJCQkJCQlpZiAoMyA9PSAoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLmdldExlbmd0aCgpKQotCQkJCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSA2IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlpZiAoMCA9PSAoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0T2xkU3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLmdldExlbmd0aCgpKQotCQkJCQkJCWlmICgyID09ICgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuZ2V0TGVuZ3RoKCkpCi0JCQkJCQkJCWlmICgiPEI+Ii5lcXVhbHMoKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE5ld1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5pdGVtKDApLmdldFRleHQoKSkpCi0JCQkJCQkJCQlpZiAoIjwvQj4iLmVxdWFscygoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLml0ZW0oMSkuZ2V0VGV4dCgpKSkgewotCQkJCQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJCQkJCX0KLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDcgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWlmICgwID09ICgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXRPbGRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuZ2V0TGVuZ3RoKCkpCi0JCQkJCQkJaWYgKDEgPT0gKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE5ld1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5nZXRMZW5ndGgoKSkKLQkJCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSA4IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlpZiAoMCA9PSAoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0T2xkU3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLmdldExlbmd0aCgpKQotCQkJCQkJCWlmICgyID09ICgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuZ2V0TGVuZ3RoKCkpCi0JCQkJCQkJCS8vaWYgKCI8Qj4iLmVxdWFscygoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLml0ZW0oMCkuZ2V0VGV4dCgpKSkKLQkJCQkJCQkJLy9pZiAoIjwvQj4iLmVxdWFscygoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLml0ZW0oMSkuZ2V0VGV4dCgpKSkgewotCQkJCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSA5IDoKLQkJCWNhc2UgMTAgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWlmICgyID09ICgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXRPbGRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuZ2V0TGVuZ3RoKCkpCi0JCQkJCQkJaWYgKDAgPT0gKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE5ld1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5nZXRMZW5ndGgoKSkKLQkJCQkJCQkJaWYgKCI8VEQ+Ii5lcXVhbHMoKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE9sZFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5pdGVtKDApLmdldFRleHQoKSkpCi0JCQkJCQkJCQlpZiAoIjwvVEQ+Ii5lcXVhbHMoKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE9sZFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5pdGVtKDEpLmdldFRleHQoKSkpCi0JCQkJCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTEgOgotCQkJY2FzZSAxMiA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJaWYgKDIgPT0gKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE9sZFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5nZXRMZW5ndGgoKSkKLQkJCQkJCQlpZiAoMCA9PSAoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLmdldExlbmd0aCgpKQotCQkJCQkJCQlpZiAoIjxURD4iLmVxdWFscygoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0T2xkU3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLml0ZW0oMCkuZ2V0VGV4dCgpKSkKLQkJCQkJCQkJCWlmICgiPC9URD4iLmVxdWFscygoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0T2xkU3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLml0ZW0oMSkuZ2V0VGV4dCgpKSkKLQkJCQkJCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxMyA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJaWYgKDMgPT0gKChSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE5ld1JlZ2lvbnMoKS5zaXplKCkpCi0JCQkJCQkJaWYgKDMgPT0gKChSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE9sZFJlZ2lvbnMoKS5zaXplKCkpCi0JCQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDE0IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlpZiAoMyA9PSAoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0T2xkU3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLmdldExlbmd0aCgpKQotCQkJCQkJCWlmICgxID09ICgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuZ2V0TGVuZ3RoKCkpCi0JCQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDE1IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCkgewotCQkJCQkJUmVnaW9uQ2hhbmdlZEV2ZW50IHJlZ2lvbkNoYW5nZWRFdmVudCA9IChSZWdpb25DaGFuZ2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50OwotCQkJCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbiA9ICgoUmVnaW9uQ2hhbmdlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCQkJCQlpZiAoImIgIi5lcXVhbHMoZG9jdW1lbnRSZWdpb24uZ2V0RnVsbFRleHQocmVnaW9uQ2hhbmdlZEV2ZW50LmdldFJlZ2lvbigpKSkpIHsKLQkJCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxNiA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJaWYgKDAgPT0gKChSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE9sZFJlZ2lvbnMoKS5zaXplKCkpIHsKLQkJCQkJCQlpZiAoMSA9PSAoKFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0TmV3UmVnaW9ucygpLnNpemUoKSkgewotCQkJCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTcgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWlmICgxID09ICgoUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXRPbGRSZWdpb25zKCkuc2l6ZSgpKSB7Ci0JCQkJCQkJaWYgKDMgPT0gKChSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE5ld1JlZ2lvbnMoKS5zaXplKCkpIHsKLQkJCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDE4IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlpZiAoMiA9PSAoKFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0T2xkUmVnaW9ucygpLnNpemUoKSkgewotCQkJCQkJCWlmICgyID09ICgoUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXROZXdSZWdpb25zKCkuc2l6ZSgpKSB7Ci0JCQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxOSA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDIwIDoKLQkJCWNhc2UgMjEgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uQ2hhbmdlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAyMiA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDIzIDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAyNCA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMjUgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDI2IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJLy8gSlNQNQotCQkJY2FzZSAyNyA6Ci0JCQkJewotCQkJCQkvLyBjaGFuZ2VkIDIwMDIsIDkvMTIgdG8gZml0Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAyOCA6Ci0JCQkJewotCQkJCQkvLyBjaGFuZ2VkIDIwMDIsIDkvMTIgdG8gZml0Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAyOSA6Ci0JCQkJewotCQkJCQkvLyBjaGFuZ2VkIDIwMDIsIDkvMTIgdG8gZml0Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAzMCA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCS8vIEpTUDYKLQkJCWNhc2UgMzEgOgotCQkJCXsKLQkJCQkJLy8gY2hhbmdlZCAyMDAyLCA5LzEyIHRvIGZpdAotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMzIgOgotCQkJCXsKLQkJCQkJLy8gY2hhbmdlZCAyMDAyLCA5LzEyIHRvIGZpdCAtLSB0aGlzIGlzIGRlZmluaXRlbHkgYSBjaGFuZ2UKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCVJlZ2lvbnNSZXBsYWNlZEV2ZW50IHJlZ2lvbnNSZXBsYWNlZEV2ZW50ID0gKFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudDsKLQkJCQkJCWlmICgxID09IHJlZ2lvbnNSZXBsYWNlZEV2ZW50LmdldE9sZFJlZ2lvbnMoKS5zaXplKCkpIHsKLQkJCQkJCQlJVGV4dFJlZ2lvbiByZWdpb24gPSByZWdpb25zUmVwbGFjZWRFdmVudC5nZXRPbGRSZWdpb25zKCkuZ2V0KDApOwotCQkJCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24gPSByZWdpb25zUmVwbGFjZWRFdmVudC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKTsKLQkJCQkJCQlTdHJpbmcgdGV4dCA9IGRvY3VtZW50UmVnaW9uLmdldFRleHQocmVnaW9uKTsKLQkJCQkJCQlpZiAoIjwlIGFhYSAlPiIuZXF1YWxzKHRleHQpKSB7Ci0JCQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJCQl9Ci0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCQllbHNlIGlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCBub2Rlc1JlcGxhY2VkRXZlbnQgPSAoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50OwotCQkJCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3QgcmVnaW9ucyA9IG5vZGVzUmVwbGFjZWRFdmVudC5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCk7Ci0KLQkJCQkJCWlmICgxID09IHJlZ2lvbnMuZ2V0TGVuZ3RoKCkpIHsKLQkJCQkJCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbiA9IHJlZ2lvbnMuaXRlbSgwKTsKLQkJCQkJCQlTdHJpbmcgdGV4dCA9IHJlZ2lvbi5nZXRUZXh0KCk7Ci0JCQkJCQkJLy9TeXN0ZW0ub3V0LnByaW50bG4odGV4dCk7Ci0JCQkJCQkJaWYgKCI8YzwlIGFhYSAiLmVxdWFscyh0ZXh0KSkgewotCQkJCQkJCQlldmVudFJlc3VsdCA9IHRydWU7Ci0JCQkJCQkJfQotCQkJCQkJfQotCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAzMyA6Ci0JCQkJewotCQkJCQkvLyBjaGFuZ2VkIDIwMDIsIDkvMTIgdG8gZml0Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQkvLwkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uQ2hhbmdlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAzNCA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJY2FzZSAzNSA6Ci0JCQkJewotCQkJCQkvLyBjaGFuY2VkIHRvIFJlZ2lvbnNSZXBsYWNlZCAyMDAyLCA5LzExIChhdHRyaWJ1dGUgdmFsdWUgdG8gcmVnaW9uIGNvbnRhaW5lcikKLQkJCQkJLy8JCQkJCVN0cmluZyBzdGFydFN0cmluZyA9ICI8cD48aW1nIHNyYz1cImZpbGUuZ2lmXCI+PHA+IjsKLQkJCQkJLy8JCQkJCVN0cmluZyBjaGFuZ2VzID0gIjwiOwotCQkJCQkvLwkJCQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxwPjxpbWcgc3JjPVwiZmlsZTwuZ2lmXCI+PHA+IjsKLQotCQkJCQkvLwkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMzYgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDM3IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAzOCA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDM5IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgNDAgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCWNhc2UgR0VORVJJQ19OT0RFU19SRVBMQUNFRF9FVkVOVF9DQVNFIDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSBHRU5FUklDX1JFR0lPTlNfUkVQTEFDRURfRVZFTlRfQ0FTRSA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgR0VORVJJQ19SRUdJT05fQ0hBTkdFRF9FVkVOVF9DQVNFIDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgR0VORVJJQ19ORVdfTU9ERUxfRVZFTlRfQ0FTRSA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBOZXdEb2N1bWVudEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSBHRU5FUklDX05PX0NIQU5HRV9FVkVOVF9DQVNFIDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIE5vQ2hhbmdlRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCWRlZmF1bHQgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgTmV3RG9jdW1lbnRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogU3RhcnRzIHRoZSBhcHBsaWNhdGlvbi4KLQkgKiBAcGFyYW0gYXJncyBhbiBhcnJheSBvZiBjb21tYW5kLWxpbmUgYXJndW1lbnRzCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJaWYgKGFyZ3MubGVuZ3RoID09IDApIHsKLQkJCXJ1bkFsbCgpOwotCQl9Ci0JCWVsc2UgaWYgKGFyZ3MubGVuZ3RoID09IDEpIHsKLQkJCVN0cmluZyBtZXRob2RUb1J1biA9IGFyZ3NbMF0udHJpbSgpOwotCQkJcnVuT25lKG1ldGhvZFRvUnVuKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBydW5BbGwoKSB7Ci0JCWp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKLQotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBydW5PbmUoU3RyaW5nIG1ldGhvZE5hbWUpIHsKLQkJVGVzdFN1aXRlIHRlc3RTdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLQkJVGVzdENhc2UgdGVzdCA9IG5ldyBVbml0VGVzdHMobWV0aG9kTmFtZSk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0KHRlc3QpOwotCQlqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4odGVzdFN1aXRlKTsKLQotCX0KLQotCS8qKgotCSAqIFNldCB1cCBhbiBYTUwgbW9kZWwKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcFhNTCgpIHsKLQotCQlJTW9kZWxNYW5hZ2VyIG1tID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJdHJ5IHsKLQkJCWZNb2RlbCA9IG1tLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcigiZHVtbXkueG1sIiwgKElucHV0U3RyZWFtKSBudWxsLCBudWxsKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJLy8gZG8gbm90aGluZywgc2luY2UgZHVtbXkKLQkJfQotCQlmTW9kZWwuYWRkRG9jdW1lbnRDaGFuZ2VkTGlzdGVuZXIocHJveHkpOwotCi0JCXRyZWUgPSBuZXcgRE9NTW9kZWxJbXBsKCk7Ci0KLQkJaWYgKHRyZWUgIT0gbnVsbCkgewotCQkJZk1vZGVsLmFkZERvY3VtZW50Q2hhbmdpbmdMaXN0ZW5lcigoSVN0cnVjdHVyZWREb2N1bWVudExpc3RlbmVyKSB0cmVlKTsKLQkJCXRyZWUuc2V0U3RydWN0dXJlZERvY3VtZW50KGZNb2RlbCk7Ci0JCX0KLQotCX0KLQotCS8qKgotCSAqIFNldCB1cCBhIEpTUCBtb2RlbAotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldFVwSlNQKCkgewotCi0JCUlNb2RlbE1hbmFnZXIgbW0gPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQl0cnkgewotCQkJZk1vZGVsID0gbW0uY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKCJkdW1teS5qc3AiLCAoSW5wdXRTdHJlYW0pIG51bGwsIG51bGwpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBkbyBub3RoaW5nLCBzaW5jZSBkdW1teQotCQl9Ci0JCWZNb2RlbCA9IFN0cnVjdHVyZWREb2N1bWVudEZhY3RvcnkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50SW5zdGFuY2UobmV3IEpTUFNvdXJjZVBhcnNlcigpKTsKLQotCQlmTW9kZWwuYWRkRG9jdW1lbnRDaGFuZ2VkTGlzdGVuZXIocHJveHkpOwotCi0JCXRyZWUgPSBuZXcgRE9NTW9kZWxJbXBsKCk7Ci0KLQkJaWYgKHRyZWUgIT0gbnVsbCkgewotCQkJZk1vZGVsLmFkZERvY3VtZW50Q2hhbmdpbmdMaXN0ZW5lcigoSVN0cnVjdHVyZWREb2N1bWVudExpc3RlbmVyKSB0cmVlKTsKLQkJCXRyZWUuc2V0U3RydWN0dXJlZERvY3VtZW50KGZNb2RlbCk7Ci0JCX0KLQotCX0KLQotCS8qKgotCSAqLwotCXB1YmxpYyB2b2lkIHNpbXBsZVRlc3QoKSAgewotCi0JCXNldFVwSlNQKCk7Ci0JCWV2ZW50Q2FzZSA9IDk5OwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiIjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiPGE+PC9hPiI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8YT48L2E+IjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gMDsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJLy8KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCS8vCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCX0KLQotCS8qKgotCSAqLwotCXB1YmxpYyB2b2lkIHNpbXBsZVRlc3QyKCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSA5OTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIjxhPjwvYT4iOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPGE+PC9hPiI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDA7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQl9Ci0KLQkvKioKLQkgKi8KLQlwdWJsaWMgdm9pZCBzaW1wbGVUZXN0MygpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gOTk7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICI8YT48L2E+IjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiIjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxhPjwvYT4iOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSAwOwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzEvMjAwMSA2OjE2OjAyIFBNKQotCSAqIEByZXR1cm4ganVuaXQuZnJhbWV3b3JrLlRlc3QKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKFVuaXRUZXN0cy5jbGFzcyk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzEvMjAwMSA2OjI4OjU5IFBNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3REZWxldGVCZWdpbm5pbmcoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDQ7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8R0hJPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxBQkM+PERFRj48R0hJPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCAwLCAxMCwgIiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8xLzIwMDEgNjoyNzozMSBQTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlRW5kKCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSAzOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPEFCQz48REVGPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxBQkM+PERFRj48R0hJPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCAxMCwgNSwgIiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RFbWJlZGRlZCgpICB7Ci0KLQkJc2V0VXBKU1AoKTsKLQkJZXZlbnRDYXNlID0gR0VORVJJQ19ORVdfTU9ERUxfRVZFTlRfQ0FTRTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjxwPjxpbWcgc3JjPVwiZmlsZS5naWZcIj48cD4iOwotCQlTdHJpbmcgY2hhbmdlcyA9ICI8IjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxwPjxpbWcgc3JjPVwiZmlsZTwuZ2lmXCI+PHA+IjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gMTc7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlldmVudENhc2UgPSAzNTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJwYXJ0IDE6IHRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCAxOiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCWV2ZW50Q2FzZSA9IDM2OwotCQlzdGFydFN0cmluZyA9IGV4cGVjdGVkU3RyaW5nOwotCQljaGFuZ2VzID0gIiUiOwotCQlleHBlY3RlZFN0cmluZyA9ICI8cD48aW1nIHNyYz1cImZpbGU8JS5naWZcIj48cD4iOwotCQlzdGFydE9mQ2hhbmdlcyA9IDE4OwotCQlsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlyZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInBhcnQgMjogdGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDI6IGV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQkJZXZlbnRDYXNlID0gMzc7Ci0JCXN0YXJ0U3RyaW5nID0gZXhwZWN0ZWRTdHJpbmc7Ci0JCWNoYW5nZXMgPSAiICI7Ci0JCWV4cGVjdGVkU3RyaW5nID0gIjxwPjxpbWcgc3JjPVwiZmlsZTwlIC5naWZcIj48cD4iOwotCQlzdGFydE9mQ2hhbmdlcyA9IDE5OwotCQlsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlyZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInBhcnQgMzogdGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDM6IGV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQkJZXZlbnRDYXNlID0gMzg7Ci0JCXN0YXJ0U3RyaW5nID0gZXhwZWN0ZWRTdHJpbmc7Ci0JCWNoYW5nZXMgPSAiYWIgIjsKLQkJZXhwZWN0ZWRTdHJpbmcgPSAiPHA+PGltZyBzcmM9XCJmaWxlPCUgYWIgLmdpZlwiPjxwPiI7Ci0JCXN0YXJ0T2ZDaGFuZ2VzID0gMjA7Ci0JCWxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlyZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCXJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgicGFydCA0OiB0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoInBhcnQgNDogZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCQlldmVudENhc2UgPSAzOTsKLQkJc3RhcnRTdHJpbmcgPSBleHBlY3RlZFN0cmluZzsKLQkJY2hhbmdlcyA9ICIlIjsKLQkJZXhwZWN0ZWRTdHJpbmcgPSAiPHA+PGltZyBzcmM9XCJmaWxlPCUgYWIgJS5naWZcIj48cD4iOwotCQlzdGFydE9mQ2hhbmdlcyA9IDIzOwotCQlsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlyZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInBhcnQgNTogdGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDU6IGV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQkJZXZlbnRDYXNlID0gNDA7Ci0JCXN0YXJ0U3RyaW5nID0gZXhwZWN0ZWRTdHJpbmc7Ci0JCWNoYW5nZXMgPSAiPiI7Ci0JCWV4cGVjdGVkU3RyaW5nID0gIjxwPjxpbWcgc3JjPVwiZmlsZTwlIGFiICU+LmdpZlwiPjxwPiI7Ci0JCXN0YXJ0T2ZDaGFuZ2VzID0gMjQ7Ci0JCWxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlyZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCXJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgicGFydCA2OiB0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoInBhcnQgNjogZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCX0KLQotCS8qKgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RFbWJlZGRlZEpTUDIoKSAgewotCi0JCXNldFVwSlNQKCk7Ci0JCWV2ZW50Q2FzZSA9IEdFTkVSSUNfUkVHSU9OU19SRVBMQUNFRF9FVkVOVF9DQVNFOwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiPGEgPmM8L2E+IjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiPCU9IGIgJT4iOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPGEgPCU9IGIgJT4+YzwvYT4iOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSAzOwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdERlZXBFbWJlZGRlZEpTUCgpICB7Ci0KLQkJc2V0VXBKU1AoKTsKLQkJZXZlbnRDYXNlID0gR0VORVJJQ19SRUdJT05TX1JFUExBQ0VEX0VWRU5UX0NBU0U7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICI8c2NyaXB0PjxhICAgPmM8L2E+PC9zY3JpcHQ+IjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiPCU9IGIgJT4iOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPHNjcmlwdD48YSA8JT0gYiAlPiAgPmM8L2E+PC9zY3JpcHQ+IjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gMTE7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBldmVudCA9IGZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHRlc3RSID0gZk1vZGVsLmdldFJlZ2lvbkF0Q2hhcmFjdGVyT2Zmc2V0KDExKTsKLQkJU3RyaW5nIHRlc3RUZXh0ID0gdGVzdFIuZ2V0VGV4dCgpOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI8YSA8JT0gYiAlPiAgPiIpKTsKLQkJdGVzdFRleHQgPSB0ZXN0Ui5nZXRGdWxsVGV4dCgpOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI8YSA8JT0gYiAlPiAgPiIpKTsKLQotCQlJVGV4dFJlZ2lvbkxpc3QgcmVnaW9uTGlzdCA9IHRlc3RSLmdldFJlZ2lvbnMoKTsKLQotCQlJVGV4dFJlZ2lvbiByZWdpb24gPSByZWdpb25MaXN0LmdldCgwKTsKLQkJdGVzdFRleHQgPSB0ZXN0Ui5nZXRUZXh0KHJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIjwiKSk7Ci0KLQkJcmVnaW9uID0gcmVnaW9uTGlzdC5nZXQoMSk7Ci0JCXRlc3RUZXh0ID0gdGVzdFIuZ2V0VGV4dChyZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCJhIikpOwotCQl0ZXN0VGV4dCA9IHRlc3RSLmdldEZ1bGxUZXh0KHJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoImEgIikpOwotCi0JCXJlZ2lvbiA9IHJlZ2lvbkxpc3QuZ2V0KDIpOwotCQl0ZXN0VGV4dCA9IHRlc3RSLmdldFRleHQocmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiPCU9IGIgJT4iKSk7Ci0JCXRlc3RUZXh0ID0gdGVzdFIuZ2V0RnVsbFRleHQocmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiPCU9IGIgJT4gICIpKTsKLQotCQkvLyA9PT0JCi0KLQkJSVRleHRSZWdpb25Db250YWluZXIgY1JlZ2lvbiA9IChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgcmVnaW9uOwotCi0JCUlUZXh0UmVnaW9uTGlzdCBlUmVnaW9ucyA9IGNSZWdpb24uZ2V0UmVnaW9ucygpOwotCQlJVGV4dFJlZ2lvbiBlUmVnaW9uID0gZVJlZ2lvbnMuZ2V0KDApOwotCQl0ZXN0VGV4dCA9IGNSZWdpb24uZ2V0VGV4dChlUmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiPCU9IikpOwotCQl0ZXN0VGV4dCA9IGNSZWdpb24uZ2V0RnVsbFRleHQoZVJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIjwlPSIpKTsKLQotCQllUmVnaW9uID0gZVJlZ2lvbnMuZ2V0KDEpOwotCQl0ZXN0VGV4dCA9IGNSZWdpb24uZ2V0VGV4dChlUmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiIGIgIikpOwotCQl0ZXN0VGV4dCA9IGNSZWdpb24uZ2V0RnVsbFRleHQoZVJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIiBiICIpKTsKLQotCQllUmVnaW9uID0gZVJlZ2lvbnMuZ2V0KDIpOwotCQl0ZXN0VGV4dCA9IGNSZWdpb24uZ2V0VGV4dChlUmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiJT4iKSk7Ci0JCXRlc3RUZXh0ID0gY1JlZ2lvbi5nZXRGdWxsVGV4dChlUmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiJT4iKSk7Ci0KLQkJZVJlZ2lvbiA9IGVSZWdpb25zLmdldCgzKTsKLQkJdGVzdFRleHQgPSBjUmVnaW9uLmdldFRleHQoZVJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIiIpKTsKLQkJdGVzdFRleHQgPSBjUmVnaW9uLmdldEZ1bGxUZXh0KGVSZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCIgICIpKTsKLQotCQkvLyA9PT09Ci0KLQkJcmVnaW9uID0gcmVnaW9uTGlzdC5nZXQoMyk7Ci0JCXRlc3RUZXh0ID0gdGVzdFIuZ2V0VGV4dChyZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI+IikpOwotCQl0ZXN0VGV4dCA9IHRlc3RSLmdldEZ1bGxUZXh0KHJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIj4iKSk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RGVlcEVtYmVkZGVkSlNQMigpICB7Ci0KLQkJc2V0VXBKU1AoKTsKLQkJZXZlbnRDYXNlID0gR0VORVJJQ19SRUdJT05TX1JFUExBQ0VEX0VWRU5UX0NBU0U7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICI8c2NyaXB0PjxhICAgPmM8L2E+PC9zY3JpcHQ+IjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiPCU9IGIgJSI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8c2NyaXB0PjxhIDwlPSBiICUgID5jPC9hPjwvc2NyaXB0PiI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDExOwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJU3RydWN0dXJlZERvY3VtZW50RXZlbnQgZXZlbnQgPSBmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiB0ZXN0UiA9IGZNb2RlbC5nZXRSZWdpb25BdENoYXJhY3Rlck9mZnNldCgxMSk7Ci0JCVN0cmluZyB0ZXN0VGV4dCA9IHRlc3RSLmdldFRleHQoKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiPGEgPCU9IGIgJSAgPiIpKTsKLQkJdGVzdFRleHQgPSB0ZXN0Ui5nZXRGdWxsVGV4dCgpOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI8YSA8JT0gYiAlICA+IikpOwotCi0JCUlUZXh0UmVnaW9uTGlzdCByZWdpb25MaXN0ID0gdGVzdFIuZ2V0UmVnaW9ucygpOwotCi0JCUlUZXh0UmVnaW9uIHJlZ2lvbiA9IHJlZ2lvbkxpc3QuZ2V0KDApOwotCQl0ZXN0VGV4dCA9IHRlc3RSLmdldFRleHQocmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiPCIpKTsKLQotCQlyZWdpb24gPSByZWdpb25MaXN0LmdldCgxKTsKLQkJdGVzdFRleHQgPSB0ZXN0Ui5nZXRUZXh0KHJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoImEiKSk7Ci0JCXRlc3RUZXh0ID0gdGVzdFIuZ2V0RnVsbFRleHQocmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiYSAiKSk7Ci0KLQkJcmVnaW9uID0gcmVnaW9uTGlzdC5nZXQoMik7Ci0JCXRlc3RUZXh0ID0gdGVzdFIuZ2V0VGV4dChyZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI8JT0gYiAlICA+IikpOwotCQl0ZXN0VGV4dCA9IHRlc3RSLmdldEZ1bGxUZXh0KHJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIjwlPSBiICUgID4iKSk7Ci0KLQkJLy8gPT09CQotCi0JCUlUZXh0UmVnaW9uQ29udGFpbmVyIGNSZWdpb24gPSAoSVRleHRSZWdpb25Db250YWluZXIpIHJlZ2lvbjsKLQotCQlJVGV4dFJlZ2lvbkxpc3QgZVJlZ2lvbnMgPSBjUmVnaW9uLmdldFJlZ2lvbnMoKTsKLQkJSVRleHRSZWdpb24gZVJlZ2lvbiA9IGVSZWdpb25zLmdldCgwKTsKLQkJdGVzdFRleHQgPSBjUmVnaW9uLmdldFRleHQoZVJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIjwlPSIpKTsKLQkJdGVzdFRleHQgPSBjUmVnaW9uLmdldEZ1bGxUZXh0KGVSZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI8JT0iKSk7Ci0KLQkJZVJlZ2lvbiA9IGVSZWdpb25zLmdldCgxKTsKLQkJdGVzdFRleHQgPSBjUmVnaW9uLmdldFRleHQoZVJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIiBiICUgID4iKSk7Ci0JCXRlc3RUZXh0ID0gY1JlZ2lvbi5nZXRGdWxsVGV4dChlUmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiIGIgJSAgPiIpKTsKLQotCi0JCS8vID09PT0JCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdERlZXBFbWJlZGRlZEpTUDMoKSB7Ci0JCS8vIENNVkMgMjQ1NTg2Ci0JCS8vIHRoaXMgaXMgYSB0ZXN0IHRvIG1ha2Ugc3VyZSBDb250ZXh0UmVnaW9uQ29udGFpbmVyIHJldHVybnMgd2hhdCB3ZSBleHBlY3QKLQkJc2V0VXBKU1AoKTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjxodG1sPjxoZWFkPjxzY3JpcHQ+IDwlISBTdHJpbmcgdGVzdHZhciA9IFwidGVzdHZhclwiOyAlPiB2YXIgdGVzdCA9IDwlPSB0ZXN0dmFyICU+IDwvc2NyaXB0PjwvaGVhZD48L2h0bWw+IjsKLQkJU3RyaW5nIGV4cGVjdGVkVGV4dCA9ICI8JSEgU3RyaW5nIHRlc3R2YXIgPSBcInRlc3R2YXJcIjsgJT4iOwotCQkoKFhNTFNvdXJjZVBhcnNlcikgZk1vZGVsLmdldFBhcnNlcigpKS5hZGRCbG9ja01hcmtlcihuZXcgQmxvY2tNYXJrZXIoInNjcmlwdCIsIG51bGwsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwgZmFsc2UpKTsgLy8kTk9OLU5MUy0xJAotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBmTW9kZWwuZ2V0UmVnaW9uTGlzdCgpOwotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gc2NyaXB0QmxvY2tSZWdpb24gPSBmTW9kZWwuZ2V0UmVnaW9uQXRDaGFyYWN0ZXJPZmZzZXQoMjEpOwotCQlJVGV4dFJlZ2lvbkxpc3QgYmxvY2tSZWdpb25zID0gc2NyaXB0QmxvY2tSZWdpb24uZ2V0UmVnaW9ucygpOwotCQlJVGV4dFJlZ2lvbkNvbnRhaW5lciBqc3BEZWNsID0gKElUZXh0UmVnaW9uQ29udGFpbmVyKSBibG9ja1JlZ2lvbnMuZ2V0KDEpOwotCQlTdHJpbmcgZnVsbFRleHQgPSBqc3BEZWNsLmdldEZ1bGxUZXh0KCk7Ci0KLQkJLy9hc3NlcnRUcnVlKCJDb250ZXh0UmVnaW9uQ29udGFpbmVyLmdldEZ1bGxUZXh0KCkiLCBmdWxsVGV4dC5lcXVhbHMoZXhwZWN0ZWRUZXh0KSk7Ci0JCWFzc2VydEVxdWFscygiQ29udGV4dFJlZ2lvbkNvbnRhaW5lci5nZXRGdWxsVGV4dCgpIHZhbHVlIGluY29ycmVjdDogIiwgZXhwZWN0ZWRUZXh0LCBmdWxsVGV4dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUDEoKSAgewotCi0JCXNldFVwSlNQKCk7Ci0JCWV2ZW50Q2FzZSA9IDIzOwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiYWJjZDwlPSBhYmMgJT5lZmdoIjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gImFiY2Q8ICU9IGFiYyAlPmVmZ2giOwotCQlTdHJpbmcgY2hhbmdlcyA9ICIgIjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gNTsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1AyKCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCQlldmVudENhc2UgPSAyNDsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gImFiY2Q8JSBhYmMgJT5lZmdoIjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gImFiY2Q8ICUgYWJjICU+ZWZnaCI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIiAiOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSA1OwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUDMoKSAgewotCi0JCXNldFVwSlNQKCk7Ci0JCWV2ZW50Q2FzZSA9IDI1OwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiPCU9IGFiYyAlPiI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8ICU9IGFiYyAlPiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIiAiOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSAxOwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1A0KCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCQlldmVudENhc2UgPSAyNjsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjwlIGFiYyAlPiI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8ICUgYWJjICU+IjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiICI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDE7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JIEdpdmUgYSBKU1Agc2NyaXB0bGV0IDoKLQkgPCUgYWFhICU+Ci0JIFdoZW4gYW4gdXNlciB0eXBlcyAiPGJiPiIganVzdCBiZWZvcmUKLQkgdGhlIEpTUCBzY3JpcHRsZXQgOgotCSAoMSkgV2hlbiAnPCcgaXMgdHlwZWQsIHJlZ2lvbnNSZXBsYWNlZCgpCi0JIGlzIGNhbGxlZCBmb3IgIjwlIi4KLQkgKDIpIFdoZW4gJ2InIGlzIHR5cGVkLCBub2Rlc1JlcGxhY2VkKCkKLQkgaXMgY2FsbGVkIGZvciAiPDwlIiBhbmQgIiBhYWEgIi4KLQkgKDMpIFdoZW4gJ2InIGlzIHR5cGVkIGFnYWluLCBmaW5hbGx5LAotCSBub2Rlc1JlcGxhY2VkKCkgaXMgY2FsbGVkIGZvcgotCSAiPGI8JSBhYWEiIGFuZCAiJT4iLgotCSBUaGUgZW5kIEpTUCBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHNob3VsZCBiZQotCSByZXBhcnNlZCBhdCAoMSksIGJ1dCBub3Qgd2FpdCB1bnRpbCAoMykuCi0JIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RKU1A1KCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCQlldmVudENhc2UgPSBHRU5FUklDX05FV19NT0RFTF9FVkVOVF9DQVNFOwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiPCUgYWFhICU+PHA+IjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiPCI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8PCUgYWFhICU+PHA+IjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gMDsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCWV2ZW50Q2FzZSA9IDI3OwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDE6IHRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCAxOiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCS8vIHN0ZXAgMgotCQkvLyA/IGRvZXMgYXNzZXJ0VHJ1ZSBwcmV2ZW50IHJlc3QgZnJvbSBleGVjdXRpbmcgaWYgJ2ZhbHNlJz8KLQkJLy8gYW5zOiB5ZXMKLQkJZXZlbnRDYXNlID0gMjg7Ci0JCXN0YXJ0U3RyaW5nID0gZXhwZWN0ZWRTdHJpbmc7Ci0JCWNoYW5nZXMgPSAiYiI7Ci0JCWV4cGVjdGVkU3RyaW5nID0gIjxiPCUgYWFhICU+PHA+IjsKLQkJc3RhcnRPZkNoYW5nZXMgPSAxOwotCQlsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlyZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDI6IHRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCAyOiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCWV2ZW50Q2FzZSA9IDI5OwotCQlzdGFydFN0cmluZyA9IGV4cGVjdGVkU3RyaW5nOwotCQljaGFuZ2VzID0gImIiOwotCQlleHBlY3RlZFN0cmluZyA9ICI8YmI8JSBhYWEgJT48cD4iOwotCQlzdGFydE9mQ2hhbmdlcyA9IDI7Ci0JCWxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlyZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCXJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0JCWFzc2VydFRydWUoInBhcnQgMzogdGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDM6IGV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQkJZXZlbnRDYXNlID0gMzA7Ci0JCXN0YXJ0U3RyaW5nID0gZXhwZWN0ZWRTdHJpbmc7Ci0JCWNoYW5nZXMgPSAiPiI7Ci0JCWV4cGVjdGVkU3RyaW5nID0gIjxiYj48JSBhYWEgJT48cD4iOwotCQlzdGFydE9mQ2hhbmdlcyA9IDM7Ci0JCWxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlyZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCXJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0JCWFzc2VydFRydWUoInBhcnQgNDogdGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDQ6IGV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JIEV4YW1wbGUgNCkKLQkgCi0JIEdpdmVuIHR3byBKU1Agc2NyaXB0bGV0cyA6Ci0JIDwlIGFhYSAlPjwlIGJiYiAlPgotCSBXaGVuIGFuIHVzZXIgdHlwZXMgIjxjY2NjPiIganVzdCBiZWZvcmUKLQkgdGhlIEpTUCBzY3JpcHRsZXQsIHdhdGNoIHRoZSBJU3RydWN0dXJlZERvY3VtZW50IGV2ZW50cwotCSBvbiBlYWNoIGNoYXJhY3RlciB0eXBpbmcuCi0JIFlvdSB3aWxsIHNlZSB0aGUgbmV4dCBKU1AgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBpcyByZXBhcnNlZAotCSAodG8gYmUgYnJva2VuIGludG8gb3RoZXIgdHlwZSBvZiBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uKQotCSBvbmUgYnkgb25lIG9uIGVhY2ggZXZlbnQuCi0JIEJ1dCBpdCBzaG91bGQgYmUgYXQgb25jZSBhdCB0aGUgZmlyc3QgZXZlbnQuCi0JIE9sZCBDb21wb25lbnQ6IHdzYS53ZWIucGFnZWVkaXRpbmcKLQkgTmV3IENvbXBvbmVudDogd3NhLndlYi54bWxlZGl0b3IKLQkgCi0JIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RKU1A2KCkgIHsKLQkJLy8gY2F1dGlvbiAuLi4gd2UncmUgcmUtdXNpbmcgZXZlbnQgY2hlY2tzIGZyb20gSlNQNQotCi0JCXNldFVwSlNQKCk7Ci0KLQkJZXZlbnRDYXNlID0gR0VORVJJQ19ORVdfTU9ERUxfRVZFTlRfQ0FTRTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjwlIGFhYSAlPjwlIGJiYiAlPiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIjwiOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPDwlIGFhYSAlPjwlIGJiYiAlPiI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDA7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQkJZXZlbnRDYXNlID0gMzE7Ci0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDE6IHRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCAxOiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCWV2ZW50Q2FzZSA9IDMyOwotCQlzdGFydFN0cmluZyA9IGV4cGVjdGVkU3RyaW5nOwotCQljaGFuZ2VzID0gImMiOwotCQlleHBlY3RlZFN0cmluZyA9ICI8YzwlIGFhYSAlPjwlIGJiYiAlPiI7Ci0JCXN0YXJ0T2ZDaGFuZ2VzID0gMTsKLQkJbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCXJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCAyOiB0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoInBhcnQgMjogZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCQlldmVudENhc2UgPSAzMzsKLQkJc3RhcnRTdHJpbmcgPSBleHBlY3RlZFN0cmluZzsKLQkJY2hhbmdlcyA9ICJjIjsKLQkJZXhwZWN0ZWRTdHJpbmcgPSAiPGNjPCUgYWFhICU+PCUgYmJiICU+IjsKLQkJc3RhcnRPZkNoYW5nZXMgPSAyOwotCQlsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlyZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDM6IHRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCAzOiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCWV2ZW50Q2FzZSA9IDM0OwotCQlzdGFydFN0cmluZyA9IGV4cGVjdGVkU3RyaW5nOwotCQljaGFuZ2VzID0gIj4iOwotCQlleHBlY3RlZFN0cmluZyA9ICI8Y2M+PCUgYWFhICU+PCUgYmJiICU+IjsKLQkJc3RhcnRPZkNoYW5nZXMgPSAzOwotCQlsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlyZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDQ6IHRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCA0OiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JfQotCi0JLyoqCi0JICogdGhpcyB0ZXN0IGVhc2lseSByZXR1cm5zICJvayIgZXZlbiB3aXRoIHRoZSBuby1zcGFjZSBidWcuIEl0cyBtb3N0bHkgdG8KLQkgKiAiaGFuZCBleGFtaW5lIiB0aGUgc3RydWN0dXJlZERvY3VtZW50IGNyZWF0ZWQgZnJvbSB0aGUgaW5pdGlhbCBzZXRUZXh0LgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RKU1BEaXJlY3RpdmUoKSAgewotCi0JCXNldFVwSlNQKCk7Ci0JCWV2ZW50Q2FzZSA9IEdFTkVSSUNfTk9ERVNfUkVQTEFDRURfRVZFTlRfQ0FTRTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjwlQGluY2x1ZGUlPiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIlQiOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPCVAaW5jbHVkZSU+VCI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDEyOwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJLy8gID8KLQkJLy8JYXNzZXJ0VHJ1ZShyZXN1bHQpOyAvLyAmJiBldmVudFJlc3VsdCk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzEvMjAwMSA2OjUzOjA4IFBNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXRob2QxMCgpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gMTA7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8VEQ+PC9URD4iOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8VEQ+PC9URD48VEQ+PC9URD4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgOSwgOSwgIiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8yLzIwMDEgMTA6NTY6MDQgQU0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1ldGhvZDExKCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSAxMTsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxYWFg+PFREPjwvVEQ+PFhYWD4iOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8WFhYPjxURD48L1REPjxURD48L1REPjxYWFg+Iik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDUsIDksICIiKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMi8yMDAxIDEwOjU5OjM5IEFNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXRob2QxMigpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gMTI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8WFhYPjxURD48L1REPjxYWFg+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPFhYWD48VEQ+PC9URD48VEQ+PC9URD48WFhYPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCAxNCwgOSwgIiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8yLzIwMDEgMTE6MDA6NTkgQU0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1ldGhvZDEzKCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSAxMzsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxBQkM+PEpLTD48R0hJPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxBQkM+PERFRj48R0hJPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCA1LCA1LCAiPEpLTD4iKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMi8yMDAxIDExOjAyOjE5IEFNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXRob2QxNCgpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gMTQ7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8YT5cclxyICA8L2E+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPGE+XHI8Yj5cciAgPC9hPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCA0LCAzLCAiIik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzIvMjAwMSAxMTowMzo1MyBBTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kMTUoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDE1OwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPGE+PGIgPjwvYj48L2E+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPGE+PGI+PC9iPjwvYT4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgNSwgMCwgIiAiKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMi8yMDAxIDExOjA1OjI3IEFNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXRob2QxNigpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gMTY7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8YT48YiB6PjwvYj48L2E+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPGE+PGIgPjwvYj48L2E+Iik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDYsIDAsICJ6Iik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzIvMjAwMSAxMTowNjozMyBBTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kMTcoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDE3OwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPGE+PGIgej1cInRcIj48L2I+PC9hPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxhPjxiIHo+PC9iPjwvYT4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgNiwgMSwgIno9XCJ0XCIiKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMi8yMDAxIDExOjA5OjE3IEFNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXRob2QxOCgpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gMTg7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8YT48YyB6PjwvYj48L2E+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPGE+PGIgej48L2I+PC9hPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCA0LCAzLCAiYyB6Iik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzIvMjAwMSAxMToxMDozMCBBTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kMTkoKSAgewotCi0JCWV2ZW50Q2FzZSA9IDE5OwotCQlzZXRVcEpTUCgpOwotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPEJPRFk+XHI8SU1HIHNyYz1cIjwlPVxyPC9CT0RZPlxyIik7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8Qk9EWT5ccjxJTUcgc3JjPVwiPCU9UVxyPC9CT0RZPlxyIjsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgMjAsIDAsICJRIik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMi8yMDAxIDExOjEyOjA1IEFNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXRob2QyMCgpICB7Ci0KLQkJc2V0VXBKU1AoKTsKLQotCQlldmVudENhc2UgPSAyMDsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxTVFlMRSBUWVBFPVwidGV4dC9jc3NcIj5ccjwhLS1cckJPRFkge1xyXHJ9LS0+XHI8L1NUWUxFPlxyIjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPFNUWUxFIFRZUEU9XCJ0ZXh0L2Nzc1wiPlxyPCEtLVxyLS0+XHI8L1NUWUxFPlxyIik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDI4LCAxLCAiXHJCT0RZIHtcclxyfSIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8yLzIwMDEgMTE6MzI6MjMgQU0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1ldGhvZDIxKCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCi0JCWV2ZW50Q2FzZSA9IDIxOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPCFET0NUWVBFIEhUTUwgUFVCTElDIFwiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU5cIiBcIlwiPlxyPEhUTUw+XHI8SEVBRD5cciAgICAgIDxNRVRBIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMVwiIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIj5ccjxNRVRBIG5hbWU9XCJHRU5FUkFUT1JcIiBjb250ZW50PVwiSUJNIFdlYlNwaGVyZSBQYWdlIERlc2lnbmVyIFY0LjEuMCBmb3IgV2luZG93c1wiPlxyPE1FVEEgY29udGVudD1cInRleHQvY3NzXCIgaHR0cC1lcXVpdj1cIkNvbnRlbnQtU3R5bGUtVHlwZVwiPlxyPFRJVExFPjwvVElUTEU+XHI8U1RZTEUgVFlQRT1cInRleHQvY3NzXCI+XHI8IS0tXHJCT0RZIHtcclxyfS0tPlxyPC9TVFlMRT5cciI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjwhRE9DVFlQRSBIVE1MIFBVQkxJQyBcIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOXCIgXCJcIj5ccjxIVE1MPlxyPEhFQUQ+XHIgICAgICA8TUVUQSBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTFcIiBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCI+XHI8TUVUQSBuYW1lPVwiR0VORVJBVE9SXCIgY29udGVudD1cIklCTSBXZWJTcGhlcmUgUGFnZSBEZXNpZ25lciBWNC4xLjAgZm9yIFdpbmRvd3NcIj5ccjxNRVRBIGNvbnRlbnQ9XCJ0ZXh0L2Nzc1wiIGh0dHAtZXF1aXY9XCJDb250ZW50LVN0eWxlLVR5cGVcIj5ccjxUSVRMRT48L1RJVExFPlxyPFNUWUxFIFRZUEU9XCJ0ZXh0L2Nzc1wiPlxyPCEtLVxyLS0+XHI8L1NUWUxFPlxyIik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDM0MywgMSwgIlxyQk9EWSB7XHJccn0iKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMS8yMDAxIDY6NDU6MjkgUE0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1ldGhvZDkoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDk7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8VEQ+PC9URD4iOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8VEQ+PC9URD48VEQ+PC9URD4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgMCwgOSwgIiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8xLzIwMDEgNjo0NToyOSBQTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kQXR0cmlidXRlTmFtZVJlcGxhY2UxKCkgIHsKLQotCQkvL3Rlc3RFdmVudCA9IDIyOwotCQkvL3RhZ3MgPSAiPHRhZ05hbWUgYWJjPVwiYnNmXCI+IjsKLQkJLy90ZXN0U3RydWN0dXJlZERvY3VtZW50UmVwbGFjZW1lbnQodGVzdEV2ZW50LCB0YWdzLCAiYWJjZGUiLCI8dGFnTmFtZSBhYmNkZT1cImJzZlwiPiIsIDksIDMpOwotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDIyOwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiPHRhZ05hbWUgYWJjPVwiYnNmXCI+IjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjx0YWdOYW1lIGFiY2RlPVwiYnNmXCI+IjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiYWJjZGUiOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSA5OwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMzsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8xLzIwMDEgNjozNTo0MSBQTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kaWZ5TWlkZGxlKCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSA1OwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPEFCQz48SktMPjxHSEk+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPEFCQz48REVGPjxHSEk+Iik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDAsIDE1LCAiPEFCQz48SktMPjxHSEk+Iik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzEvMjAwMSA2OjA2OjMzIFBNKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROb0NoYW5nZTEoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDE7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8QUJDPjxERUY+PEdIST4iOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8QUJDPjxERUY+PEdIST4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgMTAsIDAsICIiKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMS8yMDAxIDY6MjY6MDUgUE0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5vQ2hhbmdlMigpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gMjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxBQkM+PERFRj48R0hJPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxBQkM+PERFRj48R0hJPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCAwLCAxNSwgIjxBQkM+PERFRj48R0hJPiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8xLzIwMDEgNjozODoyNSBQTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltaWxhclN0YXJ0KCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSA2OwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPFA+PEI+PC9CPjxCPjwvQj48L1A+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPFA+PEI+PC9CPjwvUD4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgMywgMCwgIjxCPjwvQj4iKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMS8yMDAxIDY6NDM6MjkgUE0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFNpbWlsYXJTdGFydEVuZCgpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gODsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxQPjxCPjxCPjwvQj48L0I+PC9QPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxQPjxCPjwvQj48L1A+Iik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDYsIDAsICI8Qj48L0I+Iik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzEvMjAwMSA2OjQxOjQ2IFBNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RTaW1pbGlhckVuZCgpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gNzsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxQPjxCPjwvQj48UD48UD4iOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8UD48Qj48L0I+PFA+Iik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDEwLCAwLCAiPFA+Iik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFRhZ1JlRGV0ZWN0aW9uKCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCQkvLyAobnNkKSAyMDAzLjEyLjEwIC0gY2hhbmdlZCBmcm9tIE5vZGVzUmVwbGFjZWQgdG8gUmVnaW9uc1JlcGxhY2VkIHNpbmNlIHRoZSBzdGFydCBjb25kaXRpb24gd2FzIGNoYW5nZWQKLQkJLy8gZnJvbSBiZWluZyAzIGRvY3VtZW50IHJlZ2lvbnMgdG8gNCBzaW5jZSAic2NyaXB0IiBpcyBub3QgJ25lc3RhYmxlJwotCQkvL2V2ZW50Q2FzZSA9IEdFTkVSSUNfUkVHSU9OU19SRVBMQUNFRF9FVkVOVF9DQVNFOwotCQkKLQkJLy8gcmV2ZXJ0ZWQgMjAwNC4wNC4wNQotCQlldmVudENhc2UgPSBHRU5FUklDX05PREVTX1JFUExBQ0VEX0VWRU5UX0NBU0U7Ci0vLwkJZXZlbnRDYXNlID0gR0VORVJJQ19SRUdJT05TX1JFUExBQ0VEX0VWRU5UX0NBU0U7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICI8cD50ZXN0PDxTQ1JJUFQ+IjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiUyI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8cD50ZXN0PFM8U0NSSVBUPiI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDg7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQkvLyAgPwlhc3NlcnRUcnVlKHJlc3VsdCk7IC8vICYmIGV2ZW50UmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JfQotCi0JLyoqCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFRhZ1JlRGV0ZWN0aW9uMigpICB7Ci0KLQkJc2V0VXBKU1AoKTsKLQkJZXZlbnRDYXNlID0gR0VORVJJQ19SRUdJT05fQ0hBTkdFRF9FVkVOVF9DQVNFOwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiPHA+dGVzdDw8U0NSSVBUPiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIlMiOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPHA+dGVzdDw8U0NSSVBUUz4iOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSAxNTsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCS8vCWFzc2VydFRydWUocmVzdWx0KTsgLy8gJiYgZXZlbnRSZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQl9Ci0KLQkvKioKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VGFnUmVEZXRlY3Rpb24zKCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCQlldmVudENhc2UgPSBHRU5FUklDX05PREVTX1JFUExBQ0VEX0VWRU5UX0NBU0U7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICI8cD50ZXN0PHRlc3Q+IjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiJSI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8cD50ZXN0PCV0ZXN0PiI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDg7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQkvLwlhc3NlcnRUcnVlKHJlc3VsdCk7IC8vICYmIGV2ZW50UmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JfQotCi0JLyoqCi0JICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQotCSAqLwotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JCWlmIChmTW9kZWwgIT0gbnVsbCkKLQkJCWZNb2RlbC5yZW1vdmVEb2N1bWVudENoYW5nZWRMaXN0ZW5lcihwcm94eSk7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFBhZ2VEaXJlY3RpdmUoKSAgewotCQlib29sZWFuIHZlcmJvc2UgPSBmYWxzZTsKLQkJc2V0VXBKU1AoKTsKLQkJZXZlbnRDYXNlID0gOTk5OyAvL0dFTkVSSUNfTk9ERVNfUkVQTEFDRURfRVZFTlRfQ0FTRTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjwlQHBhZ2UgbGFuZz1cImphdmFcIiA8U0NSSVBUPnZhciA8JSB0ZXN0ICU+IFN0cmluZzwvU0NSSVBUPiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gInMiOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPCVAcGFnZSBsYW5nPVwiamF2YXNcIiA8U0NSSVBUPnZhciA8JSB0ZXN0ICU+IFN0cmluZzwvU0NSSVBUPiI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDE4OwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJaWYgKHZlcmJvc2UpIHsKLQkJCURlYnVnLmR1bXAoZk1vZGVsLCB0cnVlKTsKLQkJfQotCi0JCVN0cnVjdHVyZWREb2N1bWVudEV2ZW50IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50ID0gZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJLy8JYXNzZXJ0VHJ1ZShyZXN1bHQpOyAvLyAmJiBldmVudFJlc3VsdCk7Ci0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJLy9hc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCWlmICh2ZXJib3NlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigic3RydWN0dXJlZCBkb2N1bWVudDoiKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCURlYnVnLmR1bXAoZG9jdW1lbnQsIHRydWUpOwotCQl9Ci0KLQkJLy8gbm93IGRlbGV0ZSBxdW90ZQotCQljaGFuZ2VzID0gIiI7Ci0JCWV4cGVjdGVkU3RyaW5nID0gIjwlQHBhZ2UgbGFuZz1cImphdmFzXCIgPFNDUklQVD52YXIgPCUgdGVzdCAlPiBTdHJpbmc8L1NDUklQVD4iOwotCQlzdGFydE9mQ2hhbmdlcyA9IDE5OwotCQlsZW5ndGhUb1JlcGxhY2UgPSAxOwotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCXJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQotCQlpZiAodmVyYm9zZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oInN0cnVjdHVyZWQgZG9jdW1lbnQ6Iik7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gc3RydWN0dXJlZERvY3VtZW50RXZlbnQuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlEZWJ1Zy5kdW1wKGRvY3VtZW50LCB0cnVlKTsKLQkJfQotCi0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYWdlZGlyZWN0aXZlL1Rlc3RQYWdlRGlyZWN0aXZlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhZ2VkaXJlY3RpdmUvVGVzdFBhZ2VEaXJlY3RpdmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFhNjU4Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhZ2VkaXJlY3RpdmUvVGVzdFBhZ2VEaXJlY3RpdmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMucGFnZWRpcmVjdGl2ZTsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuUGFnZURpcmVjdGl2ZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmx0ay5tb2RlbGhhbmRsZXIuRW1iZWRkZWRUeXBlSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZUFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZU5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuRW1iZWRkZWRYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuc3NlbW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5QWRhcHRlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIEBhdXRob3IgZGF2aWR3Ci0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0UGFnZURpcmVjdGl2ZSBleHRlbmRzIFRlc3RDYXNlIHsKLQotCWNsYXNzIE15RW1iZWRkZWRGYWN0b3J5IGltcGxlbWVudHMgSU5vZGVBZGFwdGVyRmFjdG9yeSB7Ci0KLQkJcHVibGljIElOb2RlQWRhcHRlciBhZGFwdChJTm9kZU5vdGlmaWVyIG9iamVjdCkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQlwdWJsaWMgSU5vZGVBZGFwdGVyRmFjdG9yeSBjb3B5KCkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCQlyZXR1cm4gdHlwZSBpbnN0YW5jZW9mIE15QWRhcHRlZENsYXNzOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLQkJCS8vIG5vb3AKLQkJfQotCX0KLQkKLQljbGFzcyBNeUFkYXB0ZWRDbGFzcyB7Ci0JCS8vIGR1bW15IGNsYXNzIGlzIGtleQotCX0KLQkKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVGVzdFBhZ2VEaXJlY3RpdmUuCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVGVzdFBhZ2VEaXJlY3RpdmUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJhc2ljUEQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBGaXJzdCBtYWtlIChlbXB0eSkgc3RydWN0dXJlZERvY3VtZW50Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIG1vZGVsICE9IG51bGwpOwotCi0JCS8vIE5vdywgYXNzaWduaW5nIHVzZSBhIHBhZ2UgZGlyZWN0aXZlLCBidXQgbGVhdmluZyBlbWJlZGRlZCB0eXBlIHRoZSBzYW1lIGFzIGRlZmF1bHQKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0VGV4dCh0aGlzLCAiPCVAIHBhZ2UgY29udGVudFR5cGU9XCJ0ZXh0L2h0bWxcIiBsYW5ndWFnZT1cImphdmFcIiAlPiIpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgKChJRE9NTW9kZWwpIG1vZGVsKS5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoUGFnZURpcmVjdGl2ZUFkYXB0ZXIuY2xhc3MpOwotCi0JCVN0cmluZyBjb250ZW50VHlwZSA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldENvbnRlbnRUeXBlKCk7Ci0JCVN0cmluZyBsYW5ndWFnZSA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldExhbmd1YWdlKCk7Ci0KLQkJYXNzZXJ0VHJ1ZSgiY29udGVudFR5cGUgc2hvdWxkIGJlIGh0bWwiLCAidGV4dC9odG1sIi5lcXVhbHMoY29udGVudFR5cGUpKTsKLQkJYXNzZXJ0VHJ1ZSgibGFuZ3VhZ2Ugc2hvdWxkIGJlIGphdmEiLCAiamF2YSIuZXF1YWxzKGxhbmd1YWdlKSk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QmFzaWNDaGFuZ2VkUEQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBGaXJzdCBtYWtlIChlbXB0eSkgc3RydWN0dXJlZERvY3VtZW50Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIG1vZGVsICE9IG51bGwpOwotCi0JCS8vIE5vdywgYXNzaWduaW5nIHVzZSBhIHBhZ2UgZGlyZWN0aXZlLCBidXQgbGVhdmluZyBlbWJlZGRlZCB0eXBlIHRoZSBzYW1lIGFzIGRlZmF1bHQKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0VGV4dCh0aGlzLCAiPCVAIHBhZ2UgY29udGVudFR5cGU9XCJ0ZXh0L2h0bWxcIiBsYW5ndWFnZT1cImphdmFcIiAlPiIpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgKChJRE9NTW9kZWwpIG1vZGVsKS5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoUGFnZURpcmVjdGl2ZUFkYXB0ZXIuY2xhc3MpOwotCi0JCVN0cmluZyBjb250ZW50VHlwZSA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldENvbnRlbnRUeXBlKCk7Ci0JCVN0cmluZyBsYW5ndWFnZSA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldExhbmd1YWdlKCk7Ci0KLQkJYXNzZXJ0VHJ1ZSgiY29udGVudFR5cGUgc2hvdWxkIGJlIGh0bWwiLCAidGV4dC9odG1sIi5lcXVhbHMoY29udGVudFR5cGUpKTsKLQkJYXNzZXJ0VHJ1ZSgibGFuZ3VhZ2Ugc2hvdWxkIGJlIGphdmEiLCAiamF2YSIuZXF1YWxzKGxhbmd1YWdlKSk7Ci0KLQkJLy8gY2hhbmdlIHRvIGphdmFzY3JpcHQKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkucmVwbGFjZVRleHQodGhpcywgNDMsIDQsICJqYXZhc2NyaXB0Iik7Ci0KLQkJY29udGVudFR5cGUgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRDb250ZW50VHlwZSgpOwotCQlsYW5ndWFnZSA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldExhbmd1YWdlKCk7Ci0KLQkJYXNzZXJ0VHJ1ZSgiY29udGVudFR5cGUgc2hvdWxkIGJlIGh0bWwiLCAidGV4dC9odG1sIi5lcXVhbHMoY29udGVudFR5cGUpKTsKLQkJYXNzZXJ0VHJ1ZSgibGFuZ3VhZ2Ugc2hvdWxkIGJlIGphdmFzY3JpcHQiLCAiamF2YXNjcmlwdCIuZXF1YWxzKGxhbmd1YWdlKSk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QmFzaWNDaGFuZ2VkUERCYWNrKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQotCQkvLyBOb3csIGFzc2lnbmluZyB1c2UgYSBwYWdlIGRpcmVjdGl2ZSwgYnV0IGxlYXZpbmcgZW1iZWRkZWQgdHlwZSB0aGUgc2FtZSBhcyBkZWZhdWx0Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldFRleHQodGhpcywgIjwlQCBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC9odG1sXCIgbGFuZ3VhZ2U9XCJqYXZhXCIgJT4iKTsKLQkJUGFnZURpcmVjdGl2ZUFkYXB0ZXIgcGFnZURpcmVjdGl2ZUFkYXB0ZXIgPSAoUGFnZURpcmVjdGl2ZUFkYXB0ZXIpICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKFBhZ2VEaXJlY3RpdmVBZGFwdGVyLmNsYXNzKTsKLQotCQlTdHJpbmcgY29udGVudFR5cGUgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRDb250ZW50VHlwZSgpOwotCQlTdHJpbmcgbGFuZ3VhZ2UgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRMYW5ndWFnZSgpOwotCi0JCWFzc2VydFRydWUoImNvbnRlbnRUeXBlIHNob3VsZCBiZSBodG1sIiwgInRleHQvaHRtbCIuZXF1YWxzKGNvbnRlbnRUeXBlKSk7Ci0JCWFzc2VydFRydWUoImxhbmd1YWdlIHNob3VsZCBiZSBqYXZhIiwgImphdmEiLmVxdWFscyhsYW5ndWFnZSkpOwotCi0JCS8vIGNoYW5nZSB0byBqYXZhc2NyaXB0Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnJlcGxhY2VUZXh0KHRoaXMsIDQzLCA0LCAiamF2YXNjcmlwdCIpOwotCi0JCWNvbnRlbnRUeXBlID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0Q29udGVudFR5cGUoKTsKLQkJbGFuZ3VhZ2UgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRMYW5ndWFnZSgpOwotCi0JCWFzc2VydFRydWUoImNvbnRlbnRUeXBlIHNob3VsZCBiZSBodG1sIiwgInRleHQvaHRtbCIuZXF1YWxzKGNvbnRlbnRUeXBlKSk7Ci0JCWFzc2VydFRydWUoImxhbmd1YWdlIHNob3VsZCBiZSBqYXZhc2NyaXB0IiwgImphdmFzY3JpcHQiLmVxdWFscyhsYW5ndWFnZSkpOwotCi0JCS8vIGNoYW5nZSBiYWNrIHRvIGphdmEKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkucmVwbGFjZVRleHQodGhpcywgNDMsIDEwLCAiamF2YSIpOwotCi0JCWNvbnRlbnRUeXBlID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0Q29udGVudFR5cGUoKTsKLQkJbGFuZ3VhZ2UgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRMYW5ndWFnZSgpOwotCi0JCWFzc2VydFRydWUoImNvbnRlbnRUeXBlIHNob3VsZCBiZSBodG1sIiwgInRleHQvaHRtbCIuZXF1YWxzKGNvbnRlbnRUeXBlKSk7Ci0JCWFzc2VydEVxdWFscygiamF2YSIsIGxhbmd1YWdlKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFNldEVtYmVkZGVkVHlwZSgpewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gY3JlYXRlVW5tYW5hZ2VkSFRNTE1vZGVsKCk7Ci0JCVBhZ2VEaXJlY3RpdmVBZGFwdGVyIHBhZ2VEaXJlY3RpdmVBZGFwdGVyID0gKFBhZ2VEaXJlY3RpdmVBZGFwdGVyKSAoKElET01Nb2RlbCkgbW9kZWwpLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCUVtYmVkZGVkVHlwZUhhbmRsZXIgZW1iZWRkZWRYTUxIYW5kbGVyID0gbmV3IEVtYmVkZGVkWE1MKCk7Ci0JCXBhZ2VEaXJlY3RpdmVBZGFwdGVyLnNldEVtYmVkZGVkVHlwZShlbWJlZGRlZFhNTEhhbmRsZXIpOwotCQkKLQkJRW1iZWRkZWRUeXBlSGFuZGxlciBoYW5kbGVyID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0RW1iZWRkZWRUeXBlKCk7Ci0JCWFzc2VydFRydWUoImluY29ycmVjdCBlbWJlZGRlZCBoYW5kbGVyIiwgaGFuZGxlciA9PSBlbWJlZGRlZFhNTEhhbmRsZXIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QWRhcHQoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVVubWFuYWdlZEhUTUxNb2RlbCgpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKFBhZ2VEaXJlY3RpdmVBZGFwdGVyLmNsYXNzKTsKLQkJTm9kZSBvd25lck5vZGUgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkKLQkJTW9kZWxRdWVyeUFkYXB0ZXIgZW1iZWRkZWRBZGFwdGVyID0gKE1vZGVsUXVlcnlBZGFwdGVyKSBwYWdlRGlyZWN0aXZlQWRhcHRlci5hZGFwdCgoSU5vZGVOb3RpZmllcikgb3duZXJOb2RlLCBNb2RlbFF1ZXJ5QWRhcHRlci5jbGFzcyk7Ci0JCWFzc2VydE5vdE51bGwoImNvdWxkIG5vdCBhZGFwdCBlbWJlZGRlZCBhZGFwdGVyIiwgZW1iZWRkZWRBZGFwdGVyKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEFkZEVtYmVkZGVkRmFjdG9yeSgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlVW5tYW5hZ2VkSFRNTE1vZGVsKCk7Ci0JCVBhZ2VEaXJlY3RpdmVBZGFwdGVyIHBhZ2VEaXJlY3RpdmVBZGFwdGVyID0gKFBhZ2VEaXJlY3RpdmVBZGFwdGVyKSBtb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoUGFnZURpcmVjdGl2ZUFkYXB0ZXIuY2xhc3MpOwotCQlwYWdlRGlyZWN0aXZlQWRhcHRlci5hZGRFbWJlZGRlZEZhY3RvcnkobmV3IE15RW1iZWRkZWRGYWN0b3J5KCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0U2V0TGFuZ3VhZ2UoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVVubWFuYWdlZEhUTUxNb2RlbCgpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKFBhZ2VEaXJlY3RpdmVBZGFwdGVyLmNsYXNzKTsKLQkJcGFnZURpcmVjdGl2ZUFkYXB0ZXIuc2V0TGFuZ3VhZ2UoInRleHQveG1sIik7Ci0JCWFzc2VydFRydWUoInNldCBsYW5ndWFnZSBmYWlsZWQiLCBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRMYW5ndWFnZSgpLmVxdWFscygidGV4dC94bWwiKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRUYXJnZXQoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVVubWFuYWdlZEhUTUxNb2RlbCgpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKFBhZ2VEaXJlY3RpdmVBZGFwdGVyLmNsYXNzKTsKLQkJSU5vZGVOb3RpZmllciBub3RpZmllciA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldFRhcmdldCgpOwotCQlhc3NlcnROb3ROdWxsKCJ0YXJnZXQgaXMgbnVsbCIsIG5vdGlmaWVyKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFJlbGVhc2UoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVVubWFuYWdlZEhUTUxNb2RlbCgpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKFBhZ2VEaXJlY3RpdmVBZGFwdGVyLmNsYXNzKTsKLQkJcGFnZURpcmVjdGl2ZUFkYXB0ZXIucmVsZWFzZSgpOwotCQkvLyBjb25zaWRlcmVkICJzdWNjZXNzIiBpZiBkb2Vzbid0IHRocm91Z2ggZXhjZXB0aW9uCi0JCWFzc2VydFRydWUodHJ1ZSk7Ci0JfQotCQotCXByaXZhdGUgSURPTU1vZGVsIGNyZWF0ZVVubWFuYWdlZEhUTUxNb2RlbCgpIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQotCQkvLyBOb3csIGFzc2lnbmluZyB1c2UgYSBwYWdlIGRpcmVjdGl2ZSwgYnV0IGxlYXZpbmcgZW1iZWRkZWQgdHlwZSB0aGUgc2FtZSBhcyBkZWZhdWx0Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldFRleHQodGhpcywgIjwlQCBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC9odG1sXCIgbGFuZ3VhZ2U9XCJqYXZhXCIgJT4iKTsKLQkJcmV0dXJuIChJRE9NTW9kZWwpbW9kZWw7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL1Rlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJKU1AuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL1Rlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJKU1AuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY4ZjNiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy9UZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVySlNQLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnBhcnRpdGlvbmluZzsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ0J1ZmZlcklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUeXBlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JSlNQUGFydGl0aW9uVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSUNTU1BhcnRpdGlvblR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JSFRNTFBhcnRpdGlvblR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnV0aWwuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVhNTFBhcnRpdGlvbnM7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVySlNQIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBib29sZWFuIERFQlVHX1BSSU5UX1JFU1VMVCA9IGZhbHNlOwotCXByb3RlY3RlZCBJVHlwZWRSZWdpb25bXSBwYXJ0aXRpb25zID0gbnVsbDsKLQotCXByaXZhdGUgYm9vbGVhbiB1c2VGb3JtYXR0ZXIgPSB0cnVlOwotCXByb3RlY3RlZCBEZWNpbWFsRm9ybWF0IGZvcm1hdHRlcjsKLQotCXB1YmxpYyBUZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVySlNQKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCQlpZiAoREVCVUdfUFJJTlRfUkVTVUxUICYmIHVzZUZvcm1hdHRlcikKLQkJCWZvcm1hdHRlciA9IG5ldyBEZWNpbWFsRm9ybWF0KCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RKU1AxKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7IC8vIERXIDA1LzAxLzIwMDMgSSBtb2RpZmllZCB0aGlzIHRlc3QsIGFmdGVyIGNyZWF0aW5nIHRlc3Q2LCAKLQkJLy8gYW5kIGNoYW5naW5nIHBhcnRpb25lciB0byBwaWNrIHVwIGVuZCAqPiBhcyBwYXJ0IG9mIHBhZ2UgZGlyZWN0aXZlCi0JCS8vIHBhcnRpdGlvbiAoZm9yIGhpZ2hsaWdodGluZyB0byB3b3JrIHJpZ2h0KS4KLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDg7Ci0JCWludCBuUGFydGl0aW9ucyA9IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoInRlc3RmaWxlcy9qc3AvZXhhbXBsZTAxLmpzcCIpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBudW1iZXIgb2YgcGFydGl0aW9ucyIsIG5QYXJ0aXRpb25zID09IGV4cGVjdGVkUGFydGl0aW9ucyk7Ci0JCWNoZWNrU2VhbXMoKTsKLQkJdmVyaWZ5UGFydGl0aW9uVHlwZXMocGFydGl0aW9ucywgbmV3IFN0cmluZ1tde0lKU1BQYXJ0aXRpb25UeXBlcy5KU1BfRElSRUNUSVZFLCBJSFRNTFBhcnRpdGlvblR5cGVzLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvblR5cGVzLkpTUF9ESVJFQ1RJVkUsIElIVE1MUGFydGl0aW9uVHlwZXMuSFRNTF9ERUZBVUxULCBJSlNQUGFydGl0aW9uVHlwZXMuSlNQX0NPTlRFTlRfREVMSU1JVEVSLCBJSlNQUGFydGl0aW9uVHlwZXMuSlNQX0NPTlRFTlRfSkFWQSwgSUpTUFBhcnRpdGlvblR5cGVzLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUhUTUxQYXJ0aXRpb25UeXBlcy5IVE1MX0RFRkFVTFR9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQMigpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnQgZXhwZWN0ZWRQYXJ0aXRpb25zID0gMTE7Ci0JCWludCBuUGFydGl0aW9ucyA9IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoInRlc3RmaWxlcy9qc3AvZXhhbXBsZTAyLmpzcCIpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBudW1iZXIgb2YgcGFydGl0aW9ucyIsIG5QYXJ0aXRpb25zID09IGV4cGVjdGVkUGFydGl0aW9ucyk7Ci0JCWNoZWNrU2VhbXMoKTsKLQkJdmVyaWZ5UGFydGl0aW9uVHlwZXMocGFydGl0aW9ucywgbmV3IFN0cmluZ1tde0lIVE1MUGFydGl0aW9uVHlwZXMuSFRNTF9ERUZBVUxULCBJSlNQUGFydGl0aW9uVHlwZXMuSlNQX0NPTlRFTlRfREVMSU1JVEVSLCBJSlNQUGFydGl0aW9uVHlwZXMuSlNQX0NPTlRFTlRfSkFWQSwgSUpTUFBhcnRpdGlvblR5cGVzLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUhUTUxQYXJ0aXRpb25UeXBlcy5IVE1MX0RFRkFVTFQsIElIVE1MUGFydGl0aW9uVHlwZXMuSFRNTF9DT01NRU5ULCBJSFRNTFBhcnRpdGlvblR5cGVzLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvblR5cGVzLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUpTUFBhcnRpdGlvblR5cGVzLkpTUF9DT05URU5UX0pBVkEsIElKU1BQYXJ0aXRpb25UeXBlcy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsIElIVE1MUGFydGl0aW9uVHlwZXMuSFRNTF9ERUZBVUxULH0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1AzKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWludCBleHBlY3RlZFBhcnRpdGlvbnMgPSA1OwotCQlpbnQgblBhcnRpdGlvbnMgPSBkb0NvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KCJ0ZXN0ZmlsZXMvanNwL2V4YW1wbGUwMy5qc3AiKTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBuUGFydGl0aW9ucyA9PSBleHBlY3RlZFBhcnRpdGlvbnMpOwotCQljaGVja1NlYW1zKCk7Ci0JCXZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJSFRNTFBhcnRpdGlvblR5cGVzLkhUTUxfREVGQVVMVCwgSUhUTUxQYXJ0aXRpb25UeXBlcy5TQ1JJUFQsIElIVE1MUGFydGl0aW9uVHlwZXMuSFRNTF9ERUZBVUxULCBJQ1NTUGFydGl0aW9uVHlwZXMuU1RZTEUsIElIVE1MUGFydGl0aW9uVHlwZXMuSFRNTF9ERUZBVUxULH0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1A0KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWludCBleHBlY3RlZFBhcnRpdGlvbnMgPSA4OwotCQlpbnQgblBhcnRpdGlvbnMgPSBkb0NvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KCJ0ZXN0ZmlsZXMvanNwL2V4YW1wbGUwNC5qc3AiKTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBuUGFydGl0aW9ucyA9PSBleHBlY3RlZFBhcnRpdGlvbnMpOwotCQljaGVja1NlYW1zKCk7Ci0JCXZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJSFRNTFBhcnRpdGlvblR5cGVzLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvblR5cGVzLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUpTUFBhcnRpdGlvblR5cGVzLkpTUF9DT05URU5UX0pBVkEsIElKU1BQYXJ0aXRpb25UeXBlcy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsICJvcmcuZWNsaXBzZS53c3QuaHRtbC5TQ1JJUFQubGFuZ3VhZ2UuTVlMQU5HVUFHRSIsIElIVE1MUGFydGl0aW9uVHlwZXMuSFRNTF9ERUZBVUxULCBJSlNQUGFydGl0aW9uVHlwZXMuSlNQX0NPTU1FTlQsIElIVE1MUGFydGl0aW9uVHlwZXMuSFRNTF9ERUZBVUxUfSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUDUoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDE3OwotCQlpbnQgblBhcnRpdGlvbnMgPSBkb0NvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KCJ0ZXN0ZmlsZXMvanNwL2V4YW1wbGUwNS5qc3AiKTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBuUGFydGl0aW9ucyA9PSBleHBlY3RlZFBhcnRpdGlvbnMpOwotCQljaGVja1NlYW1zKCk7Ci0JCXZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJSFRNTFBhcnRpdGlvblR5cGVzLkhUTUxfREVGQVVMVCwgSUhUTUxQYXJ0aXRpb25UeXBlcy5TQ1JJUFQsIElIVE1MUGFydGl0aW9uVHlwZXMuSFRNTF9ERUZBVUxULCBJSlNQUGFydGl0aW9uVHlwZXMuSlNQX0NPTlRFTlRfREVMSU1JVEVSLCBJSlNQUGFydGl0aW9uVHlwZXMuSlNQX0NPTlRFTlRfSkFWQSwgSUpTUFBhcnRpdGlvblR5cGVzLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUhUTUxQYXJ0aXRpb25UeXBlcy5IVE1MX0RFRkFVTFQsIElKU1BQYXJ0aXRpb25UeXBlcy5KU1BfQ09NTUVOVCwgSUhUTUxQYXJ0aXRpb25UeXBlcy5IVE1MX0RFRkFVTFQsIElKU1BQYXJ0aXRpb25UeXBlcy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsIElKU1BQYXJ0aXRpb25UeXBlcy5KU1BfQ09OVEVOVF9KQVZBLCBJSlNQUGFydGl0aW9uVHlwZXMuSlNQX0NPTlRFTlRfREVMSU1JVEVSLCBJSFRNTFBhcnRpdGlvblR5cGVzLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvblR5cGVzLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUpTUFBhcnRpdGlvblR5cGVzLkpTUF9DT05URU5UX0pBVkEsIElKU1BQYXJ0aXRpb25UeXBlcy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsIElIVE1MUGFydGl0aW9uVHlwZXMuSFRNTF9ERUZBVUxUfSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUDYoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDE7Ci0JCWludCBuUGFydGl0aW9ucyA9IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoInRlc3RmaWxlcy9qc3AvZXhhbXBsZTA2LmpzcCIpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBudW1iZXIgb2YgcGFydGl0aW9ucyIsIG5QYXJ0aXRpb25zID09IGV4cGVjdGVkUGFydGl0aW9ucyk7Ci0JCWNoZWNrU2VhbXMoKTsKLQkJdmVyaWZ5UGFydGl0aW9uVHlwZXMocGFydGl0aW9ucywgbmV3IFN0cmluZ1tde0lKU1BQYXJ0aXRpb25UeXBlcy5KU1BfRElSRUNUSVZFLH0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RQZXJmSlNQKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCS8vaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDY7Ci0JCWludCBuUGFydGl0aW9ucyA9IGRvVGltZWRDb21wdXRlUGFydGl0aW9uaW5nVGVzdCgidGVzdGZpbGVzL2pzcC9jb21wYW55MzAway5qc3AiKTsKLQkJLy9hc3NlcnRUcnVlKCJ3cm9uZyBudW1iZXIgb2YgcGFydGl0aW9ucyIsIG5QYXJ0aXRpb25zID09IGV4cGVjdGVkUGFydGl0aW9ucyk7Ci0JCS8vY2hlY2tTZWFtcygpOwotCQkvL3ZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJWE1MUGFydGl0aW9ucy5TVF9YTUxfUEksIElYTUxQYXJ0aXRpb25zLlNUX0RFRkFVTFRfWE1MLCBJWE1MUGFydGl0aW9ucy5TVF9YTUxfREVDTEFSQVRJT04sIElYTUxQYXJ0aXRpb25zLlNUX0RFRkFVTFRfWE1MLCBJWE1MUGFydGl0aW9ucy5TVF9YTUxfQ09NTUVOVCwgSVhNTFBhcnRpdGlvbnMuU1RfREVGQVVMVF9YTUx9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW1wdHkoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDE7Ci0JCWludCBuUGFydGl0aW9ucyA9IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoInRlc3RmaWxlcy94bWwvZW1wdHkueG1sIik7Ci0JCWFzc2VydFRydWUoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgblBhcnRpdGlvbnMgPT0gZXhwZWN0ZWRQYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFR9KTsKLQl9Ci0KLQkvKioKLQkgKiBFbnN1cmUgdGhhdCB0aGUgY3VycmVudCBsaXN0IG9mIHBhcnRpdGlvbnMgYXJlIGFsbCBhZGphY2VudCB0byBvbmUgYW5vdGhlcgotCSAqLwotCXByb3RlY3RlZCB2b2lkIGNoZWNrU2VhbXMoKSB7Ci0JCWlmIChwYXJ0aXRpb25zID09IG51bGwpCi0JCQlyZXR1cm47Ci0JCWludCBvZmZzZXQgPSAwOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscygicGFydGl0aW9ucyBhcmUgbm90IGNvbnRpZ3VvdXMhIiwgcGFydGl0aW9uc1tpXS5nZXRPZmZzZXQoKSwgb2Zmc2V0KTsKLQkJCW9mZnNldCA9IHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCkgKyBwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ29tcHV0ZSB0aGUgcGFydGl0aW9ucyBmb3IgdGhlIGdpdmVuIGZpbGVuYW1lIHVzaW5nIHRoZSBkZWZhdWx0IHBhcnRpdGlvbmVyCi0JICogZm9yIHRoYXQgZmlsZSB0eXBlLgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqIEByZXR1cm4gaW50Ci0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgaW50IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJaWYgKGluU3RyZWFtID09IG51bGwpCi0JCQlpblN0cmVhbSA9IG5ldyBTdHJpbmdCdWZmZXJJbnB1dFN0cmVhbSgiIik7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGZpbGVuYW1lLCBpblN0cmVhbSwgbnVsbCk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCAmJiB1c2VGb3JtYXR0ZXIpIHsKLQkJCWRvdWJsZSBiYXNlVGVuID0gTWF0aC5sb2coMTApOwotCQkJZm9ybWF0dGVyLnNldE1pbmltdW1JbnRlZ2VyRGlnaXRzKChpbnQpIChNYXRoLmxvZyhzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCkpIC8gYmFzZVRlbikgKyAxKTsKLQkJCWZvcm1hdHRlci5zZXRHcm91cGluZ1VzZWQoZmFsc2UpOwotCQl9Ci0KLQkJcGFydGl0aW9ucyA9IHN0cnVjdHVyZWREb2N1bWVudC5jb21wdXRlUGFydGl0aW9uaW5nKDAsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSk7Ci0JCWlmIChERUJVR19QUklOVF9SRVNVTFQpIHsKLQkJCVN0cmluZyBjb250ZW50cyA9IG51bGw7Ci0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXG5maWxlbmFtZTogIiArIGZpbGVuYW1lKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcGFydGl0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJCXRyeSB7Ci0JCQkJCWNvbnRlbnRzID0gc3RydWN0dXJlZERvY3VtZW50LmdldChwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpLCBwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCQkJY29udGVudHMgPSAiKmVycm9yKiI7Ci0JCQkJfQotCQkJCWlmICh1c2VGb3JtYXR0ZXIpCi0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbihmb3JtYXR0ZXIuZm9ybWF0KHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCkpICsgIjoiICsgZm9ybWF0dGVyLmZvcm1hdChwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpKSArICIgLSAiICsgcGFydGl0aW9uc1tpXS5nZXRUeXBlKCkgKyAiIFsiICsgU3RyaW5nVXRpbHMuZXNjYXBlKGNvbnRlbnRzKSArICJdIik7Ci0JCQkJZWxzZQotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4ocGFydGl0aW9uc1tpXSArICIgWyIgKyBTdHJpbmdVdGlscy5lc2NhcGUoY29udGVudHMpICsgIl0iKTsKLQkJCX0KLQkJfQotCQljaGVja1NlYW1zKCk7Ci0JCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQlpblN0cmVhbS5jbG9zZSgpOwotCi0JCWlmIChwYXJ0aXRpb25zID09IG51bGwpCi0JCQlyZXR1cm4gLTE7Ci0JCXJldHVybiBwYXJ0aXRpb25zLmxlbmd0aDsKLQl9Ci0KLQkvKioKLQkgKiBDb21wdXRlIHRoZSBwYXJ0aXRpb25zIGZvciB0aGUgZ2l2ZW4gZmlsZW5hbWUgdXNpbmcgdGhlIGRlZmF1bHQgcGFydGl0aW9uZXIKLQkgKiBmb3IgdGhhdCBmaWxlIHR5cGUuCi0JICogCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogQHJldHVybiBpbnQKLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCBpbnQgZG9UaW1lZENvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCi0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlpZiAoaW5TdHJlYW0gPT0gbnVsbCkKLQkJCWluU3RyZWFtID0gbmV3IFN0cmluZ0J1ZmZlcklucHV0U3RyZWFtKCIiKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoZmlsZW5hbWUsIGluU3RyZWFtLCBudWxsKTsKLQkKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCAmJiB1c2VGb3JtYXR0ZXIpIHsKLQkJCWRvdWJsZSBiYXNlVGVuID0gTWF0aC5sb2coMTApOwotCQkJZm9ybWF0dGVyLnNldE1pbmltdW1JbnRlZ2VyRGlnaXRzKChpbnQpIChNYXRoLmxvZyhzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCkpIC8gYmFzZVRlbikgKyAxKTsKLQkJCWZvcm1hdHRlci5zZXRHcm91cGluZ1VzZWQoZmFsc2UpOwotCQl9Ci0JCWxvbmcgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCXBhcnRpdGlvbnMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuY29tcHV0ZVBhcnRpdGlvbmluZygwLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCkpOwotCQlsb25nIGVuZFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCkgewotCQkJCi0JCQlTdHJpbmcgY29udGVudHMgPSBudWxsOwotCQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJcbmZpbGVuYW1lOiAiICsgZmlsZW5hbWUpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJUaW1lIHRvIGNvbXB1dGUgIiArIHBhcnRpdGlvbnMubGVuZ3RoICsgIjogIiArIChlbmRUaW1lLXN0YXJ0VGltZSkgKyAiIChtc2VjcykiKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcGFydGl0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJCXRyeSB7Ci0JCQkJCWNvbnRlbnRzID0gc3RydWN0dXJlZERvY3VtZW50LmdldChwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpLCBwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCQkJY29udGVudHMgPSAiKmVycm9yKiI7Ci0JCQkJfQotCQkJCWlmICh1c2VGb3JtYXR0ZXIpCi0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbihmb3JtYXR0ZXIuZm9ybWF0KHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCkpICsgIjoiICsgZm9ybWF0dGVyLmZvcm1hdChwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpKSArICIgLSAiICsgcGFydGl0aW9uc1tpXS5nZXRUeXBlKCkgKyAiIFsiICsgU3RyaW5nVXRpbHMuZXNjYXBlKGNvbnRlbnRzKSArICJdIik7Ci0JCQkJZWxzZQotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4ocGFydGl0aW9uc1tpXSArICIgWyIgKyBTdHJpbmdVdGlscy5lc2NhcGUoY29udGVudHMpICsgIl0iKTsKLQkJCX0KLQkJfQotCQljaGVja1NlYW1zKCk7Ci0JCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQlpblN0cmVhbS5jbG9zZSgpOwotCQotCQlpZiAocGFydGl0aW9ucyA9PSBudWxsKQotCQkJcmV0dXJuIC0xOwotCQlyZXR1cm4gcGFydGl0aW9ucy5sZW5ndGg7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBzaW5nbGUgcGFydGl0aW9uIGF0IHRoZSBnaXZlbiBvZmZzZXQgZm9yIHRoZSBnaXZlbiBmaWxlLCB1c2luZyB0aGUKLQkgKiBkZWZhdWx0IHBhcnRpdGlvbmVyIGZvciB0aGF0IGZpbGUgdHlwZS4gIFRoaXMgdGVzdCBhbGxvd3MgZm9yIHZlcmlmeWluZyB0aGUgemVyby1sZW5ndGgKLQkgKiBwYXJ0aXRpb25pbmcgYmVoYXZpb3IuCi0JICogCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogQHBhcmFtIG9mZnNldAotCSAqIEByZXR1cm4gSVR5cGVkUmVnaW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgSVR5cGVkUmVnaW9uIGdldFBhcnRpdGlvblRlc3QoU3RyaW5nIGZpbGVuYW1lLCBpbnQgb2Zmc2V0KSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGZpbGVuYW1lLCBpblN0cmVhbSwgbnVsbCk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQotCQlwYXJ0aXRpb25zID0gbnVsbDsKLQkJSVR5cGVkUmVnaW9uIHBhcnRpdGlvbiA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRQYXJ0aXRpb24ob2Zmc2V0KTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCkgewotCQkJU3RyaW5nIGNvbnRlbnRzID0gbnVsbDsKLQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJcbmZpbGVuYW1lOiAiICsgZmlsZW5hbWUpOwotCQkJdHJ5IHsKLQkJCQljb250ZW50cyA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXQocGFydGl0aW9uLmdldE9mZnNldCgpLCBwYXJ0aXRpb24uZ2V0TGVuZ3RoKCkpOwotCQkJfQotCQkJY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCQljb250ZW50cyA9ICIqZXJyb3IqIjsKLQkJCX0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbihwYXJ0aXRpb24gKyAiIFsiICsgU3RyaW5nVXRpbHMuZXNjYXBlKGNvbnRlbnRzKSArICJdIik7Ci0JCX0KLQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCWluU3RyZWFtLmNsb3NlKCk7Ci0KLQkJcmV0dXJuIHBhcnRpdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBWZXJpZmllcyB0aGF0IHRoZSBnaXZlbiBwYXJ0aXRpb25zIGFyZSBvZiB0aGUgZ2l2ZW4gcGFydGl0aW9uIHR5cGVzCi0JICogQHBhcmFtIHR5cGVkUmVnaW9ucwotCSAqIEBwYXJhbSB0eXBlcwotCSAqLwotCXByb3RlY3RlZCB2b2lkIHZlcmlmeVBhcnRpdGlvblR5cGVzKElUeXBlZFJlZ2lvbiBhY3R1YWxUeXBlZFJlZ2lvbnNbXSwgU3RyaW5nIGV4cGVjdGVkVHlwZXNbXSkgewotCQlmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVkVHlwZXMubGVuZ3RoOyBpKyspCi0JCQlhc3NlcnRFcXVhbHMoInBhcnRpdGlvbiB0eXBlIG1pc21hdGNoZWQiLCBleHBlY3RlZFR5cGVzW2ldLCBhY3R1YWxUeXBlZFJlZ2lvbnNbaV0uZ2V0VHlwZSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBWZXJpZmllcyB0aGF0IHRoZSBnaXZlbiBwYXJ0aXRpb25zIGJlZ2luIGF0IHRoZSBnaXZlbiBvZmZzZXRzCi0JICogQHBhcmFtIHR5cGVkUmVnaW9ucwotCSAqIEBwYXJhbSB0eXBlcwotCSAqLwotCXByb3RlY3RlZCB2b2lkIHZlcmlmeVBhcnRpdGlvblJlZ2lvbnMoSVR5cGVkUmVnaW9uIHR5cGVkUmVnaW9uc1tdLCBpbnQgb2Zmc2V0c1tdKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgb2Zmc2V0cy5sZW5ndGg7IGkrKykgewotCQkJYXNzZXJ0RXF1YWxzKCJvZmZzZXQgbWlzbWF0Y2hlZCIsIHR5cGVkUmVnaW9uc1tpXS5nZXRPZmZzZXQoKSwgb2Zmc2V0c1tpXSk7Ci0JCQlpZiAoaSA+IDApIHsKLQkJCQlhc3NlcnRFcXVhbHMoImxlbmd0aHMgbWlzYWxpZ25lZCIsIHR5cGVkUmVnaW9uc1tpXS5nZXRPZmZzZXQoKSwgdHlwZWRSZWdpb25zW2kgLSAxXS5nZXRPZmZzZXQoKSArIHR5cGVkUmVnaW9uc1tpIC0gMV0uZ2V0TGVuZ3RoKCkpOwotCQkJfQotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvY29tcGFueTMwMGsuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9jb21wYW55MzAway5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhZGY1ZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9jb21wYW55MzAway5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4MDk5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4NCi08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+DQotCTxoZWFkPg0KLQkJPHRpdGxlPlRoZSBVbHRpbWF0ZSBBIENvbXBhbnk8L3RpdGxlPg0KLQk8L2hlYWQ+DQotCTxib2R5Pg0KLQkJPHA+DQotCQkJPGltZyBzcmM9Ii4uL2Jhbm5lci5naWYiIGhlaWdodD0iNTEiIHdpZHRoPSI2NTkiIGFsdD0iIiAvPg0KLQkJPC9wPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTxwPg0KLQkJCTxpbWcgc3JjPSIuLi9mb290ZXIuZ2lmIiBoZWlnaHQ9IjI1IiB3aWR0aD0iNjU5IiBhbHQ9IiIgLz4NCi0JCTwvcD4NCi0JPC9ib2R5Pg0KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwMS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwMS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjN2M1NGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDEuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sIiAlPg0KLTxqc3A6ZGlyZWN0aXZlLnBhZ2UgY29udGVudFR5cGU9dGV4dC9odG1sIiAvPg0KLTxIVE1MIGlkPSI8JSBqYXZhIGNvZGUgInN0cmluZyIgc2VjdGlvbiAlPiI+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDIuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmQwZWM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTAyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotICAgICAgIDxwPg0KLSAgICAgICA8JSB0ZXN0aW5nICIxMjMiIHRlc3QgdGVzdDsNCi0gICAgICAgLy8gdGVzdA0KLSAgICAgICBvbmUgdHdvIHRocmVlDQotICAgICAgICU+DQotICAgICAgIDwhLS0gNzggLS0+DQotICAgICAgIDx0YWJsZSBpZCA9ICI8JSB0ZXN0ICU+IiBhdHRyaWI9anVuaz4NCi0gICAgICAgPC9CT0RZPg0KLSAgICAgICA8L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDMuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmZkMzEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTAzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPEhUTUw+DQotPFNDUklQVD4NCi1qYXZhIHNjcmlwdCBzZWN0aW9uDQotPC9TQ1JJUFQ+DQotPFNUWUxFPg0KLSAgIHN0eWxlIHNlY3Rpb24NCi0gICA8L1NUWUxFPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwNC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwNC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MDg3MDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08c2NyaXB0IGxhbmd1YWdlPSJNeUxhbmd1YWdlIj48JT0gIkEiICU+ICAgICAgDQotIDwvU0NSSVBUPg0KLTwlLS0gLS0lPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTA1LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTA1LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTYxNTFkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwNS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08Zm9ybWF0dGluZz4NCi08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQotLy8JQ29weXJpZ2h0IDIwMDAsMjAwMSBieSB3d3cuZXhhbXBsZS5jb20NCi0gIGRvY3VtZW50LlVSTCA9ImEiOw0KLTwvc2NyaXB0Pg0KLQ0KLTwlIFN0cmluZyBhID0gImEiOyAlPg0KLTwlLS0gdGVzdCBjb21tZW50IC0tJT4NCi08JT0gDQotDQotIiAgIGFhYWFhICINCi0NCi0lPg0KLTwlISAlPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTA2LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTA2LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODUxNzNmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwNi5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08JUBwYWdlIGxhbmd1YWdlPSJqYXZhc2NyaXB0IiAlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcmVnaXN0cnkvQWRhcHRlckZhY3RvcnlSZWdpc3RyeVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcmVnaXN0cnkvQWRhcHRlckZhY3RvcnlSZWdpc3RyeVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmEyZWI2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3JlZ2lzdHJ5L0FkYXB0ZXJGYWN0b3J5UmVnaXN0cnlUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnJlZ2lzdHJ5OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckNTUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JIVE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwucmVnaXN0cnkuQWRhcHRlckZhY3RvcnlSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnJlZ2lzdHJ5LkFkYXB0ZXJGYWN0b3J5UmVnaXN0cnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotCi0vKioKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBBZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIENMQVNTTkFNRV9IVE1MX0ZBQ1RPUlkgPSAib3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkuaW50ZXJuYWwucmVnaXN0cnkuQWRhcHRlckZhY3RvcnlQcm92aWRlckZvckhUTUwiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIENMQVNTTkFNRV9EVERfRkFDVE9SWSA9ICJvcmcuZWNsaXBzZS53c3QuZHRkLnVpLmludGVybmFsLnJlZ2lzdHJ5LkFkYXB0ZXJGYWN0b3J5UHJvdmlkZXJGb3JEVEQiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIENMQVNTTkFNRV9KU1BfRkFDVE9SWSA9ICJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLmludGVybmFsLnJlZ2lzdHJ5LkFkYXB0ZXJGYWN0b3J5UHJvdmlkZXJGb3JKU1AiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIENMQVNTTkFNRV9DU1NfRkFDVE9SWSA9ICJvcmcuZWNsaXBzZS53c3QuY3NzLnVpLmludGVybmFsLnJlZ2lzdHJ5LkFkYXB0ZXJGYWN0b3J5UHJvdmlkZXJDU1MiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIENMQVNTTkFNRV9YTUxfRkFDVE9SWSA9ICJvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnJlZ2lzdHJ5LkFkYXB0ZXJGYWN0b3J5UHJvdmlkZXJGb3JYTUwiOwotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlKCkgewotCQlBZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5IGluc3RhbmNlID0gQWRhcHRlckZhY3RvcnlSZWdpc3RyeUltcGwuZ2V0SW5zdGFuY2UoKTsKLQkJYXNzZXJ0Tm90TnVsbChpbnN0YW5jZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEFsbEZhY3RvcmllcygpIHsKLQkJQWRhcHRlckZhY3RvcnlSZWdpc3RyeSBpbnN0YW5jZSA9IEFkYXB0ZXJGYWN0b3J5UmVnaXN0cnlJbXBsLmdldEluc3RhbmNlKCk7Ci0JCUl0ZXJhdG9yIGl0ID0gaW5zdGFuY2UuZ2V0QWRhcHRlckZhY3RvcmllcygpOwotCQlPYmplY3QgcHJvdmlkZXIgPSBudWxsOwotCi0JCS8vIGFsbCBwcm92aWRlcnMgZXhwZWN0ZWQgY2xhc3NuYW1lcyBhZGRlZCBoZXJlCi0JCUxpc3Qga25vd24gPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWtub3duLmFkZChDTEFTU05BTUVfSFRNTF9GQUNUT1JZKTsKLQkJa25vd24uYWRkKENMQVNTTkFNRV9EVERfRkFDVE9SWSk7Ci0JCWtub3duLmFkZChDTEFTU05BTUVfSlNQX0ZBQ1RPUlkpOwotCQlrbm93bi5hZGQoQ0xBU1NOQU1FX0NTU19GQUNUT1JZKTsKLQkJa25vd24uYWRkKENMQVNTTkFNRV9YTUxfRkFDVE9SWSk7Ci0KLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJcHJvdmlkZXIgPSBpdC5uZXh0KCk7Ci0JCQlrbm93bi5yZW1vdmUocHJvdmlkZXIuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotCQkJLy8gU3lzdGVtLm91dC5wcmludGxuKHByb3ZpZGVyLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLQkJfQotCi0JCS8vIHNob3VsZCBoYXZlIGVuY291bnRlcmVkIGFsbCBleHBlY3RlZCBhZGFwdGVyIGZhY3Rvcmllcy4KLQkJYXNzZXJ0RXF1YWxzKCJ1bmtub3duIChleHRyYSkgYWRhcHRlciBmYWN0b3JpZXMgZm91bmQiLCAwLCBrbm93bi5zaXplKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRGYWN0b3JpZXNYTUwoKSB7Ci0KLQkJTGlzdCBrbm93biA9IG5ldyBBcnJheUxpc3QoKTsKLQkJa25vd24uYWRkKENMQVNTTkFNRV9YTUxfRkFDVE9SWSk7Ci0KLQkJZ2V0RmFjdG9yaWVzRm9yQ29udGVudFR5cGUoa25vd24sIENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwsIENMQVNTTkFNRV9IVE1MX0ZBQ1RPUlkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRGYWN0b3JpZXNIVE1MKCkgewotCi0JCUxpc3Qga25vd24gPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWtub3duLmFkZChDTEFTU05BTUVfSlNQX0ZBQ1RPUlkpOwotCi0JCWdldEZhY3Rvcmllc0ZvckNvbnRlbnRUeXBlKGtub3duLCBDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQLCBDTEFTU05BTUVfWE1MX0ZBQ1RPUlkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRGYWN0b3JpZXNKU1AoKSB7Ci0KLQkJTGlzdCBrbm93biA9IG5ldyBBcnJheUxpc3QoKTsKLQkJa25vd24uYWRkKENMQVNTTkFNRV9IVE1MX0ZBQ1RPUlkpOwotCi0JCWdldEZhY3Rvcmllc0ZvckNvbnRlbnRUeXBlKGtub3duLCBDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwsIENMQVNTTkFNRV9EVERfRkFDVE9SWSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEZhY3Rvcmllc0RURCgpIHsKLQotCQlMaXN0IGtub3duID0gbmV3IEFycmF5TGlzdCgpOwotCQlrbm93bi5hZGQoQ0xBU1NOQU1FX0RURF9GQUNUT1JZKTsKLQotCQlnZXRGYWN0b3JpZXNGb3JDb250ZW50VHlwZShrbm93biwgIm9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5kdGRzb3VyY2UiLCBDTEFTU05BTUVfSFRNTF9GQUNUT1JZKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RmFjdG9yaWVzQ1NTKCkgewotCi0JCUxpc3Qga25vd24gPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWtub3duLmFkZChDTEFTU05BTUVfQ1NTX0ZBQ1RPUlkpOwotCi0JCWdldEZhY3Rvcmllc0ZvckNvbnRlbnRUeXBlKGtub3duLCBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTLCBDTEFTU05BTUVfSlNQX0ZBQ1RPUlkpOwotCX0KLQotCS8qKgotCSAqIENvbXBhcmUgdG8gYSBleHBlY3RlZCBsaXN0IG9mIEFkYXB0ZXJGYWN0b3J5UHJvdmlkZXJzIChtYXkgYmUgc21hbGxlcgotCSAqIHRoYW4gdGhlIGFjdHVhbCBsaXN0KSBmb3IgYSBnaXZlbiBjb250ZW50VHlwZUlkLiBBdCBtaW5pbXVtIHRoZXNlCi0JICogZXhwZWN0ZWQgcHJvdmlkZXJzIG11c3QgYmUgZm91bmQgdG8gcGFzcy4KLQkgKiAKLQkgKiBAcGFyYW0gZXhwZWN0ZWQKLQkgKiBAcGFyYW0gY29udGVudFR5cGVJZAotCSAqLwotCXByaXZhdGUgdm9pZCBnZXRGYWN0b3JpZXNGb3JDb250ZW50VHlwZShMaXN0IGV4cGVjdGVkLCBTdHJpbmcgY29udGVudFR5cGVJZCwgU3RyaW5nIG5vdEV4cGVjdGVkQ2xhc3NuYW1lKSB7Ci0KLQkJQWRhcHRlckZhY3RvcnlSZWdpc3RyeUltcGwgaW5zdGFuY2UgPSAoQWRhcHRlckZhY3RvcnlSZWdpc3RyeUltcGwpIEFkYXB0ZXJGYWN0b3J5UmVnaXN0cnlJbXBsLmdldEluc3RhbmNlKCk7Ci0JCUl0ZXJhdG9yIGl0ID0gaW5zdGFuY2UuZ2V0QWRhcHRlckZhY3Rvcmllcyhjb250ZW50VHlwZUlkKTsKLQkJT2JqZWN0IHByb3ZpZGVyID0gbnVsbDsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJcHJvdmlkZXIgPSBpdC5uZXh0KCk7Ci0JCQlleHBlY3RlZC5yZW1vdmUocHJvdmlkZXIuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotCi0JCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oImVuY291bnRlcmVkIHByb3ZpZGVyOiAiICsKLQkJCS8vIHByb3ZpZGVyLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLQkJCWFzc2VydFRydWUoIiFwcm92aWRlcjogIiArIG5vdEV4cGVjdGVkQ2xhc3NuYW1lICsgIiBzaG91bGRuJ3QgYmUgaW4gdGhlIGxpc3QhIiwgIW5vdEV4cGVjdGVkQ2xhc3NuYW1lLmVxdWFscyhwcm92aWRlci5nZXRDbGFzcygpLmdldE5hbWUoKSkpOwotCQl9Ci0JCS8vIHdlIHNob3VsZCBoYXZlIGF0IGxlYXN0IGZvdW5kIHRoZSBleHBlY3RlZCBmYWN0b3J5IChvciBmYWN0b3JpZXMpCi0JCWFzc2VydFRydWUoImV4dHJhIHByb3ZpZGVycyAoZXhwZWN0ZWQgbm9uZSk6ICIgKyBleHBlY3RlZCwgZXhwZWN0ZWQuaXNFbXB0eSgpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3NlYXJjaC9KU1BTZWFyY2hUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9zZWFyY2gvSlNQU2VhcmNoVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBkOTJhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3NlYXJjaC9KU1BTZWFyY2hUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5zZWFyY2g7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLnNlYXJjaC5JSmF2YVNlYXJjaENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5zZWFyY2guU2VhcmNoRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuc2VhcmNoLlNlYXJjaFBhdHRlcm47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSUpTUFRyYW5zbGF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLkpTUFRyYW5zbGF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLkpTUFRyYW5zbGF0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5KU1BUcmFuc2xhdGlvbkFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLnNlYXJjaC5KU1BTZWFyY2hTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5zZWFyY2guSlNQU2VhcmNoU3VwcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLmludGVybmFsLmphdmEuc2VhcmNoLkJhc2ljSlNQU2VhcmNoUmVxdWVzdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnNlcnZpY2UuZGF0YWxvY2F0aW9uLkxvY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotCi0KLS8qKgotICogVGVzdHMgZm9yIEpTUFNlYXJjaFN1cHBvcnQKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBKU1BTZWFyY2hUZXN0cyBleHRlbmRzIFRlc3RDYXNlIGltcGxlbWVudHMgSUphdmFTZWFyY2hDb25zdGFudHMgewotCi0JLyoqCi0JICogdG8gYWNjZXB0IHNlYXJjaCBtYXRjaGVzCi0JICogYWRkQ2hlY2tNYXRjaCguLi4pIGZvciBtYXRjaGVzIHlvdSBleHBlY3QsIHJ1biBzZWFyY2ggc3VwcG9ydCwgY2hlY2tWYWxpZCgpIHRvIHNlZSBpZiBhbGwgZXhwZWN0ZWQgZ290IGhpdAotCSAqLwotCWNsYXNzIFRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IgZXh0ZW5kcyBCYXNpY0pTUFNlYXJjaFJlcXVlc3RvciB7Ci0KLQkJcHJpdmF0ZSBMaXN0IG1hdGNoZXMgPSBudWxsOwotCi0JCXB1YmxpYyBUZXN0SnNwU2VhcmNoUmVxdWVzdG9yKCkgewotCQkJdGhpcy5tYXRjaGVzID0gbmV3IEFycmF5TGlzdCgpOwotCQl9Ci0KLQkJLy8gY2FsbGVkIGJ5IHNlYXJjaCBmcmFtZXdvcmsKLQkJcHJvdGVjdGVkIHZvaWQgYWRkU2VhcmNoTWF0Y2goSVN0cnVjdHVyZWREb2N1bWVudCBqc3BEb2N1bWVudCwgSUZpbGUganNwRmlsZSwgaW50IGpzcFN0YXJ0LCBpbnQganNwRW5kLCBTdHJpbmcganNwVGV4dCkgewotCQkJdGhpcy5tYXRjaGVzLnJlbW92ZShuZXcgVGVzdFNlYXJjaE1hdGNoKGpzcEZpbGUuZ2V0TmFtZSgpLCBqc3BTdGFydCwganNwRW5kKSk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBiZWdpblJlcG9ydGluZygpIHsKLQkJCS8vIGRvIG5vdGhpbmcgc2luY2Ugd2UgaGF2ZSBubyBVSSwgZG9uJ3QgYWNjZXNzIElTZWFyY2hSZXN1bHRWaWV3Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBlbmRSZXBvcnRpbmcoKSB7Ci0JCQkvLyBkbyBub3RoaW5nIHNpbmNlIHdlIGhhdmUgbm8gVUksIGRvbid0IGFjY2VzcyBJU2VhcmNoUmVzdWx0VmlldwotCQl9Ci0KLQkJcHVibGljIHZvaWQgYWRkQ2hlY2tNYXRjaChTdHJpbmcgZmlsZW5hbWUsIGludCBqc3BTdGFydCwgaW50IGpzcEVuZCkgewotCQkJdGhpcy5tYXRjaGVzLmFkZChuZXcgVGVzdFNlYXJjaE1hdGNoKGZpbGVuYW1lLCBqc3BTdGFydCwganNwRW5kKSk7Ci0JCX0KLQotCQlwdWJsaWMgYm9vbGVhbiBjaGVja1ZhbGlkKCkgewotCQkJcmV0dXJuIHRoaXMubWF0Y2hlcy5pc0VtcHR5KCk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBjbGVhcigpIHsKLQkJCXRoaXMubWF0Y2hlcy5jbGVhcigpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogdG8gdmFsaWRhdGUgc2VhcmNoIG1hdGNoZXMgKGNoZWNrTWF0Y2ggbWF0Y2hlcyBhIHNlYXJjaCBoaXQpCi0JICovCi0JY2xhc3MgVGVzdFNlYXJjaE1hdGNoIHsKLQotCQlwdWJsaWMgU3RyaW5nIGZpbGVuYW1lID0gbnVsbDsKLQkJcHVibGljIGludCBqc3BTdGFydCA9IC0xOwotCQlwdWJsaWMgaW50IGpzcEVuZCA9IC0xOwotCi0JCXB1YmxpYyBUZXN0U2VhcmNoTWF0Y2goU3RyaW5nIGZpbGVuYW1lLCBpbnQganNwU3RhcnQsIGludCBqc3BFbmQpIHsKLQkJCXRoaXMuZmlsZW5hbWUgPSBmaWxlbmFtZTsKLQkJCXRoaXMuanNwU3RhcnQgPSBqc3BTdGFydDsKLQkJCXRoaXMuanNwRW5kID0ganNwRW5kOwotCQl9Ci0KLQkJcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKLQkJCWlmICghKG9iaiBpbnN0YW5jZW9mIFRlc3RTZWFyY2hNYXRjaCkpCi0JCQkJcmV0dXJuIGZhbHNlOwotCi0JCQlUZXN0U2VhcmNoTWF0Y2ggcG9zc2libGUgPSAoVGVzdFNlYXJjaE1hdGNoKSBvYmo7Ci0JCQlyZXR1cm4gdGhpcy5maWxlbmFtZS5lcXVhbHNJZ25vcmVDYXNlKHBvc3NpYmxlLmZpbGVuYW1lKSAmJiB0aGlzLmpzcFN0YXJ0ID09IHBvc3NpYmxlLmpzcFN0YXJ0ICYmIHRoaXMuanNwRW5kID09IHBvc3NpYmxlLmpzcEVuZDsKLQkJfQotCX0KLQotCXByaXZhdGUgUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG51bGw7Ci0JcHJpdmF0ZSBKU1BTZWFyY2hTdXBwb3J0IHNlYXJjaFN1cHBvcnQgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0KLQlwdWJsaWMgSlNQU2VhcmNoVGVzdHMoKSB7Ci0JCXN1cGVyKCJKU1AgU2VhcmNoIFRlc3RzIik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJaWYgKCF0aGlzLmlzU2V0dXApIHsKLQkJCWRvU2V0dXAoKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9TZXR1cCgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCXRoaXMucHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCi0JCS8vIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQlMb2NhdGlvbiBwbGF0Zm9ybUxvY2F0aW9uID0gUGxhdGZvcm0uZ2V0SW5zdGFuY2VMb2NhdGlvbigpOwotCi0JCUZpbGUgemlwRmlsZSA9IEZpbGVVdGlsLm1ha2VGaWxlRm9yKFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUiwgImpzcHNlYXJjaF90ZXN0cy56aXAiLCBQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIpOwotCQl0aGlzLnByb2pVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIHBsYXRmb3JtTG9jYXRpb24uZ2V0VVJMKCkuZ2V0RmlsZSgpKTsKLQkJdGhpcy5wcm9qVXRpbC5pbml0SmF2YVByb2plY3QoImp1ZG8iKTsKLQotCQkvL0pTUFNlYXJjaFN1cHBvcnQuZ2V0SW5zdGFuY2UoKS5pbmRleFdvcmtzcGFjZUFuZFdhaXQoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQkvLyBkbyBub3RoaW5nCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluZGV4V29ya3NwYWNlKCkgewotCQlKU1BTZWFyY2hTdXBwb3J0IHN1cHBvcnQgPSBKU1BTZWFyY2hTdXBwb3J0LmdldEluc3RhbmNlKCk7Ci0JCVNlYXJjaERvY3VtZW50IGRvYyA9IEpTUFNlYXJjaFN1cHBvcnQuZ2V0SW5zdGFuY2UoKS5nZXRTZWFyY2hEb2N1bWVudCgiL2p1ZG8vc2VhcmNoVGVzdEpTUC5qYXZhIik7Ci0JCWFzc2VydE5vdE51bGwoImNvdWxkbid0IHJldHJpZXZlOicvanVkby9zZWFyY2hUZXN0SlNQLmphdmEnIiwgZG9jKTsKLQotCQlkb2MgPSBzdXBwb3J0LmdldFNlYXJjaERvY3VtZW50KCIvanVkby9zZWFyY2hUZXN0SlNQMi5qYXZhIik7Ci0JCWFzc2VydE5vdE51bGwoImNvdWxkbid0IHJldHJpZXZlOicvanVkby9zZWFyY2hUZXN0SlNQMi5qYXZhJyIsIGRvYyk7Ci0KLQkJZG9jID0gc3VwcG9ydC5nZXRTZWFyY2hEb2N1bWVudCgiL2p1ZG8vc2VhcmNoVGVzdEpTUDMuamF2YSIpOwotCQlhc3NlcnROb3ROdWxsKCJjb3VsZG4ndCByZXRyaWV2ZTonL2p1ZG8vc2VhcmNoVGVzdEpTUDMuamF2YSciLCBkb2MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWFyY2hGaWVsZCgpIHsKLQotCQlUZXN0SnNwU2VhcmNoUmVxdWVzdG9yIHJlcXVlc3RvciA9IG5ldyBUZXN0SnNwU2VhcmNoUmVxdWVzdG9yKCk7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQLmpzcCIsIDkzLCAxMDYpOwotCQlKU1BTZWFyY2hTdXBwb3J0LmdldEluc3RhbmNlKCkuc2VhcmNoKCJzZWFyY2hGb3JUaGlzIiwgbmV3IEpTUFNlYXJjaFNjb3BlKCksIEZJRUxELCBBTExfT0NDVVJSRU5DRVMsIFNlYXJjaFBhdHRlcm4uUl9FWEFDVF9NQVRDSCwgdHJ1ZSwgcmVxdWVzdG9yKTsKLQkJYXNzZXJ0VHJ1ZSgiZGlkIG5vdCBmaW5kIGFsbCBleHBlY3RlZCBtYXRjaGVzOiBzZWFyY2hGb3JUaGlzIiwgcmVxdWVzdG9yLmNoZWNrVmFsaWQoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlYXJjaE1ldGhvZCgpIHsKLQotCQlUZXN0SnNwU2VhcmNoUmVxdWVzdG9yIHJlcXVlc3RvciA9IG5ldyBUZXN0SnNwU2VhcmNoUmVxdWVzdG9yKCk7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQLmpzcCIsIDE0MywgMTU4KTsKLQkJcmVxdWVzdG9yLmFkZENoZWNrTWF0Y2goInNlYXJjaFRlc3RKU1AuanNwIiwgMjk4LCAzMTUpOwotCQlKU1BTZWFyY2hTdXBwb3J0LmdldEluc3RhbmNlKCkuc2VhcmNoKCJzZWFyY2hGb3JNZXRob2QiLCBuZXcgSlNQU2VhcmNoU2NvcGUoKSwgTUVUSE9ELCBBTExfT0NDVVJSRU5DRVMsIFNlYXJjaFBhdHRlcm4uUl9FWEFDVF9NQVRDSCwgdHJ1ZSwgcmVxdWVzdG9yKTsKLQkJYXNzZXJ0VHJ1ZSgiZGlkIG5vdCBmaW5kIGFsbCBleHBlY3RlZCBtYXRjaGVzOiBzZWFyY2hGb3JNZXRob2QiLCByZXF1ZXN0b3IuY2hlY2tWYWxpZCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VhcmNoUGF0dGVybk1hdGNoKCkgewotCi0JCVRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IgcmVxdWVzdG9yID0gbmV3IFRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IoKTsKLQkJcmVxdWVzdG9yLmFkZENoZWNrTWF0Y2goInNlYXJjaFRlc3RKU1AuanNwIiwgOTMsIDEwNik7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMi5qc3AiLCAxMTYsIDEyOSk7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMi5qc3AiLCAxNTIsIDE2NSk7Ci0JCUpTUFNlYXJjaFN1cHBvcnQuZ2V0SW5zdGFuY2UoKS5zZWFyY2goInNlYXJjaCoiLCBuZXcgSlNQU2VhcmNoU2NvcGUoKSwgRklFTEQsIEFMTF9PQ0NVUlJFTkNFUywgU2VhcmNoUGF0dGVybi5SX1BBVFRFUk5fTUFUQ0gsIHRydWUsIHJlcXVlc3Rvcik7Ci0JCWFzc2VydFRydWUoImRpZCBub3QgZmluZCBhbGwgZXhwZWN0ZWQgbWF0Y2hlczogc2VhcmNoKiIsIHJlcXVlc3Rvci5jaGVja1ZhbGlkKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWFyY2hQcm9qZWN0Q2xhc3NlcygpIHsKLQotCQlUZXN0SnNwU2VhcmNoUmVxdWVzdG9yIHJlcXVlc3RvciA9IG5ldyBUZXN0SnNwU2VhcmNoUmVxdWVzdG9yKCk7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMy5qc3AiLCAxNDgsIDE1Nyk7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMy5qc3AiLCAxNzAsIDE3OSk7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMy5qc3AiLCAyNjMsIDI3Myk7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMy5qc3AiLCAyOTksIDMwOSk7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMy5qc3AiLCA0MDgsIDQxNyk7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMy5qc3AiLCA0MzAsIDQzOSk7Ci0JCUpTUFNlYXJjaFN1cHBvcnQuZ2V0SW5zdGFuY2UoKS5zZWFyY2goIkplbGx5YmVhbioiLCBuZXcgSlNQU2VhcmNoU2NvcGUoKSwgVFlQRSwgQUxMX09DQ1VSUkVOQ0VTLCBTZWFyY2hQYXR0ZXJuLlJfUEFUVEVSTl9NQVRDSCwgdHJ1ZSwgcmVxdWVzdG9yKTsKLQkJYXNzZXJ0VHJ1ZSgiZGlkIG5vdCBmaW5kIGFsbCBleHBlY3RlZCBtYXRjaGVzOiBzZWFyY2gqIiwgcmVxdWVzdG9yLmNoZWNrVmFsaWQoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlYXJjaExvY2FsVmFyaWFibGUoKSB7Ci0KLQkJSURPTU1vZGVsIHhtbE1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlQYXRoIGpzcFRlc3RGaWxlUGF0aCA9IG5ldyBQYXRoKCJqdWRvL1NFQVJDSC9zZWFyY2hUZXN0SlNQMy5qc3AiKTsKLQkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUoanNwVGVzdEZpbGVQYXRoKTsKLQkJCXhtbE1vZGVsID0gKElET01Nb2RlbCkgZ2V0U3RydWN0dXJlZE1vZGVsRm9yUmVhZChmaWxlKTsKLQkJCXNldHVwQWRhcHRlckZhY3RvcnkoeG1sTW9kZWwpOwotCi0JCQlJRE9NRG9jdW1lbnQgZG9jID0geG1sTW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUpTUFRyYW5zbGF0aW9uQWRhcHRlciBhZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgZG9jLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJCUpTUFRyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gYWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCQkJSUphdmFFbGVtZW50IGVsZW1lbnQgPSB0cmFuc2xhdGlvbi5nZXRFbGVtZW50c0Zyb21Kc3BSYW5nZSgzNzcsIDM4NClbMF07Ci0KLQkJCVRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IgcmVxdWVzdG9yID0gbmV3IFRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IoKTsKLQkJCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMy5qc3AiLCAzNzcsIDM4NCk7Ci0JCQlKU1BTZWFyY2hTdXBwb3J0LmdldEluc3RhbmNlKCkuc2VhcmNoKGVsZW1lbnQsIG5ldyBKU1BTZWFyY2hTY29wZSgpLCByZXF1ZXN0b3IpOwotCQkJYXNzZXJ0VHJ1ZSgiZGlkIG5vdCBmaW5kIGFsbCBleHBlY3RlZCBtYXRjaGVzOiBzZWFyY2gqIiwgcmVxdWVzdG9yLmNoZWNrVmFsaWQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAoeG1sTW9kZWwgIT0gbnVsbCkKLQkJCQl4bWxNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JSZWFkKElGaWxlIGZpbGUpIHsKLQotCQl0cnkgewotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQkJcmV0dXJuIG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvclJlYWQoZmlsZSk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGlvZXgpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiY291bGRuJ3Qgb3BlbiBmaWxlOiIgKyBmaWxlKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIGFkZCB0aGUgZmFjdG9yeSBmb3IgSlNQVHJhbnNsYXRpb25BZGFwdGVyIGhlcmUKLQkgKiBAcGFyYW0gc20KLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBBZGFwdGVyRmFjdG9yeShJU3RydWN0dXJlZE1vZGVsIHNtKSB7Ci0KLQkJSlNQVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeSBmYWN0b3J5ID0gbmV3IEpTUFRyYW5zbGF0aW9uQWRhcHRlckZhY3RvcnkoKTsKLQkJc20uZ2V0RmFjdG9yeVJlZ2lzdHJ5KCkuYWRkRmFjdG9yeShmYWN0b3J5KTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy90aHJlYWRlZC9UaHJlYWRlZE1vZGVsUmVhZEVkaXRUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3RocmVhZGVkL1RocmVhZGVkTW9kZWxSZWFkRWRpdFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVjNjFmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3RocmVhZGVkL1RocmVhZGVkTW9kZWxSZWFkRWRpdFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5MyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudGhyZWFkZWQ7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5GaWxlQnVmZmVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLklUZXh0RmlsZUJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLklUZXh0RmlsZUJ1ZmZlck1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLkpTUFRyYW5zbGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsLlByb2plY3RVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRleHQuZWRpdHMuSW5zZXJ0RWRpdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSW5kZXhlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogQ3JlYXRlZCBmb3I6IGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMTY1MjMKLSAqLwotcHVibGljIGNsYXNzIFRocmVhZGVkTW9kZWxSZWFkRWRpdFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiUFJPSkVDVF8xMTY1MjMiOwotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCQotCXByaXZhdGUgY2xhc3MgVHJhbnNsYXRlSm9iIGV4dGVuZHMgSm9iIHsKLQkJU3RyaW5nIGZGaWxlUGF0aCA9IG51bGw7Ci0JCXB1YmxpYyBUcmFuc2xhdGVKb2IoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgam9ibmFtZSkgewotCQkJc3VwZXIoam9ibmFtZSk7Ci0JCQlmRmlsZVBhdGggPSBmaWxlbmFtZTsKLQkJfQotCQlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0JCQlJRmlsZSBmID0gZ2V0T3JDcmVhdGVGaWxlKGZGaWxlUGF0aCk7Ci0JCQlKU1BUcmFuc2xhdG9yIHRyYW5zID0gbmV3IEpTUFRyYW5zbGF0b3IoKTsKLQkJCUlTdHJ1Y3R1cmVkTW9kZWwgc01vZGVsID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJc01vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvclJlYWQoZik7Ci0JCQkJaWYoc01vZGVsICE9IG51bGwpIHsKLQkJCQkJdHJhbnMucmVzZXQoKElET01Ob2RlKXNNb2RlbC5nZXRJbmRleGVkUmVnaW9uKDApLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQkJdHJhbnMudHJhbnNsYXRlKCk7Ci0JCQkJfQotCQkJCQotCQkJfQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCi0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCi0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJCWZpbmFsbHkgewotCQkJCWlmKHNNb2RlbCAhPSBudWxsKQotCQkJCQlzTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCQl9Ci0JCQkKLQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCQl9Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCWlmKCFpc1NldHVwKSB7Ci0JCQlkb1NldHVwKCk7Ci0JCQlpc1NldHVwID0gdHJ1ZTsKLQkJfQotCX0KLQkKLQlwcml2YXRlIHZvaWQgZG9TZXR1cCgpIHsKLQkJY3JlYXRlUHJvamVjdCgpOwotCX0KLQkvKgotCSAqIGNyZWF0ZSAxMDAgdGVzdCBmaWxlcwotCSAqIHJlcGVhdCBkb1Rlc3QoKSBvbiB0aG9zZSAxMDAgZmlsZXMgNXgKLQkgKi8KLS8vCXB1YmxpYyB2b2lkIHRlc3RfMTE2NTIzKCkgewotLy8KLS8vCQkvLyB0cnkgYW5kIGRvIHNvbWUgY29uY3VycmVudCBlZGl0aW5nL2luZGV4aW5nCi0vLwkJZm9yKGludCBqPTA7IGo8NTsgaisrKSB7Ci0vLwkJCWZvcihpbnQgaT0wOyBpPDEwMDsgaSsrKSAKLS8vCQkJCWRvVGVzdCgidGVzdF8iICsgaSArICIuanNwIik7Ci0vLwkJfQotLy8JfQotLy8JLyoKLS8vCSAqIGRvVGVzdCgpIG9uIHNhbWUgZmlsZSAxMDB4Ci0vLwkgKi8KLS8vCXB1YmxpYyB2b2lkIHRlc3RfMTE2NTIzXzIoKSB7Ci0vLwotLy8JCS8vIHRyeSBhbmQgZG8gc29tZSBjb25jdXJyZW50IGVkaXRpbmcvaW5kZXhpbmcKLS8vCQlmb3IoaW50IGk9MDsgaTwxMDA7IGkrKykgCi0vLwkJCWRvVGVzdCgidGVzdF8xLmpzcCIpOwotLy8JfQotCQotCS8qCi0JICogZG9UZXN0KCkgKGluc2VydCB0ZXh0ICYgZWRpdCBkb20pCi0JICogYW5kIGZvcmNlIEpTUFRyYW5zbGF0aW9uIG9uIGFub3RoZXIgdGhyZWFkCi0JICogCi0JICogcmVwZWF0IGxvdHMgb2YgdGltZXMKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0XzExNjUyM18zKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSAidF90ZXN0XzEuanNwIjsKLQkJCi0JCWdldE9yQ3JlYXRlRmlsZShQUk9KRUNUX05BTUUgKyAiLyIgKyBmaWxlbmFtZSk7Ci0JCQotCQlmb3IoaW50IGo9MDsgajwxMDA7IGorKykgewotCQkJVHJhbnNsYXRlSm9iIHRyYW5zbGF0ZUpvYiA9IG5ldyBUcmFuc2xhdGVKb2IoUFJPSkVDVF9OQU1FICsgIi8iICsgZmlsZW5hbWUsICJKU1AgVHJhbnNsYXRlIEpvYiIpOwotCQkJdHJhbnNsYXRlSm9iLnNjaGVkdWxlKCk7Ci0JCQlwZXJmb3JtRWRpdHMoZmlsZW5hbWUpOwotCQl9Ci0JfQotCQotCXByaXZhdGUgdm9pZCBwZXJmb3JtRWRpdHMoU3RyaW5nIGZpbGVQYXRoKSB7Ci0JCQotCQlJRmlsZSBibGFua0pzcEZpbGUgPSBnZXRPckNyZWF0ZUZpbGUoUFJPSkVDVF9OQU1FICsgIi8iICsgZmlsZVBhdGgpOwotCQkKLQkJLy8gZG9jdW1lbnQgZWRpdAotCQlpRG9jdW1lbnRJbnNlcnQoYmxhbmtKc3BGaWxlLCAgIjxsb2dpYzppdGVyYXRlIGlkPVwiaXRlcmF0ZUlEXCIgdHlwZT1cImphdmEudXRpbC5MaXN0XCIgaW5kZXhJZD1cImluZGV4SURcIj48L2xvZ2ljOml0ZXJhdGU+XG4iLDApOwotCQkKLQkJLy8gZG9tIGVkaXQKLQkJSGFzaE1hcCBhdHRycyA9IG5ldyBIYXNoTWFwKCk7Ci0JCWF0dHJzLnB1dCgidXJpIiwgInN0cnV0cy1sb2dpYy50bGQiKTsKLQkJYXR0cnMucHV0KCJwcmVmaXgiLCAibG9naWMiKTsKLQkJZG9tSW5zZXJ0RWxlbWVudChibGFua0pzcEZpbGUsICJqc3A6ZGlyZWN0aXZlLnRhZ2xpYiIsIGF0dHJzLCAwKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIElGaWxlIGdldE9yQ3JlYXRlRmlsZShTdHJpbmcgZmlsZVBhdGgpIHsKLQkJSUZpbGUgYmxhbmtKc3BGaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZpbGVQYXRoKSk7Ci0JCWlmIChibGFua0pzcEZpbGUgIT0gbnVsbCAmJiAhYmxhbmtKc3BGaWxlLmV4aXN0cygpKSB7Ci0JCQl0cnkgewotCQkJCWJsYW5rSnNwRmlsZS5jcmVhdGUobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG5ldyBieXRlWzBdKSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gYmxhbmtKc3BGaWxlOwotCX0KLQotCXB1YmxpYyB2b2lkIGRvbUluc2VydEVsZW1lbnQoSUZpbGUgZmlsZSwgU3RyaW5nIHRhZ05hbWUsIEhhc2hNYXAgYXR0cmlidXRlcywgaW50IGluc2VydGlvblBvaW50KSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgc01vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXNNb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KGZpbGUpOwotCQkJaWYoc01vZGVsICE9IG51bGwpIHsKLQkJCQlEb2N1bWVudCBkb21Eb2MgPSAoRG9jdW1lbnQpc01vZGVsLmdldEFkYXB0ZXIoRG9jdW1lbnQuY2xhc3MgKTsKLQkJCQlJbmRleGVkUmVnaW9uIHIgPSBzTW9kZWwuZ2V0SW5kZXhlZFJlZ2lvbihpbnNlcnRpb25Qb2ludCk7Ci0JCQkJaWYociBpbnN0YW5jZW9mIE5vZGUpIHsKLQkJCQkJRWxlbWVudCBlID0gZG9tRG9jLmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7Ci0JCQkJCUl0ZXJhdG9yIGl0ZXIgPSBhdHRyaWJ1dGVzLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0JCQkJCS8vIHNldCBhdHRyaWJ1dGVzCi0JCQkJCXdoaWxlIChpdGVyLmhhc05leHQoKSkgewotCQkJCQkJU3RyaW5nIGF0dHIgPSAoU3RyaW5nKSBpdGVyLm5leHQoKTsKLQkJCQkJCVN0cmluZyB2YWwgPSAgKFN0cmluZylhdHRyaWJ1dGVzLmdldChhdHRyKTsKLQkJCQkJCQotCQkJCQkJQXR0ciBhdHRyTm9kZSA9IGRvbURvYy5jcmVhdGVBdHRyaWJ1dGUoYXR0cik7Ci0JCQkJCQlhdHRyTm9kZS5zZXRWYWx1ZSh2YWwpOwotCQkJCQkJZS5zZXRBdHRyaWJ1dGVOb2RlKGF0dHJOb2RlKTsKLQkJCQkJfQotCQkJCQlkb21Eb2MuaW5zZXJ0QmVmb3JlKGUsIChOb2RlKXIpOwotCQkJCQlkb21Eb2MuaW5zZXJ0QmVmb3JlKGRvbURvYy5jcmVhdGVUZXh0Tm9kZSgiXG4iKSwgKE5vZGUpcik7Ci0JCQkJfQotCQkJCXNNb2RlbC5zYXZlKCk7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmKHNNb2RlbCAhPSBudWxsKQotCQkJCXNNb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQkKLQkJLy8gU3lzdGVtLm91dC5wcmludGxuKCJpbnNlcnRlZCBlbGVtZW50LCBkb20gc3R5bGUiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgaURvY3VtZW50SW5zZXJ0KElGaWxlIGZpbGUsIFN0cmluZyB0ZXh0LCBpbnQgaW5zZXJ0aW9uUG9pbnQpIHsKLQkJCi0JCS8vIGdldCB0aGUgZmlsZSdzIHRleHQgYnVmZmVyCi0JCUlUZXh0RmlsZUJ1ZmZlck1hbmFnZXIgYnVmZmVyTWFuYWdlciA9IEZpbGVCdWZmZXJzLmdldFRleHRGaWxlQnVmZmVyTWFuYWdlcigpOwotCQlJUGF0aCBwYXRoID0gZmlsZS5nZXRGdWxsUGF0aCgpOwotCQl0cnkgewotCQkJYnVmZmVyTWFuYWdlci5jb25uZWN0KHBhdGgsIG51bGwpOwotCi0JCQlJRG9jdW1lbnQgZG9jID0gbnVsbDsKLQotCQkJSVRleHRGaWxlQnVmZmVyIGJ1ZmYgPSBidWZmZXJNYW5hZ2VyLmdldFRleHRGaWxlQnVmZmVyKGZpbGUuZ2V0RnVsbFBhdGgoKSk7Ci0JCQlkb2MgPSBidWZmLmdldERvY3VtZW50KCk7Ci0KLQkJCWJvb2xlYW4gc2F2ZVdoZW5Eb25lID0gIWJ1ZmYuaXNEaXJ0eSgpOwotCi0JCQlJbnNlcnRFZGl0IGluc2VydEVkaXQgPSBuZXcgSW5zZXJ0RWRpdChpbnNlcnRpb25Qb2ludCwgdGV4dCk7Ci0JCQlpbnNlcnRFZGl0LmFwcGx5KGRvYyk7Ci0KLQkJCS8vIGlmIHRoZSBkb2N1bWVudCB3YXMgbm90IHByZXZpb3VzbHkgZGlydHksIHNhdmUgaXQKLQkJCWlmIChzYXZlV2hlbkRvbmUpCi0JCQkJYnVmZi5jb21taXQobnVsbCwgZmFsc2UpOwotCQl9Ci0JCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9CQkKLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCXRyeSB7Ci0JCQkJYnVmZmVyTWFuYWdlci5kaXNjb25uZWN0KHBhdGgsIG51bGwpOwotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJLy8gU3lzdGVtLm91dC5wcmludGxuKCJpbnNlcnRlZCB0ZXh0LCBmaWxlIGJ1ZmZlciBzdHlsZSIpOwotCX0KLQotLy8JcHJpdmF0ZSB2b2lkIHN0cnVjdHVyZWREb2NJbnNlcnQoU3RyaW5nIGZpbGVQYXRoKSB7Ci0vLwkJLy8gUFJPSkVDVF9OQU1FICsgIi9ibGFuay5qc3AiCi0vLwkJSUZpbGUgYmxhbmtKc3BGaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZpbGVQYXRoKSk7Ci0vLwkJaWYgKGJsYW5rSnNwRmlsZSAhPSBudWxsKSB7Ci0vLwkJCXRyeSB7Ci0vLwkJCQlibGFua0pzcEZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShuZXcgYnl0ZVswXSksIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotLy8JCQl9Ci0vLwkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLS8vCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0vLwkJCX0KLS8vCQl9Ci0vLwotLy8JCUlTdHJ1Y3R1cmVkTW9kZWwgc01vZGVsID0gbnVsbDsKLS8vCQl0cnkgewotLy8JCQlzTW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdChibGFua0pzcEZpbGUpOwotLy8JCQlpZiAoc01vZGVsICE9IG51bGwpIHsKLS8vCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IHNNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLS8vCi0vLwkJCQlTdHJpbmcgaW5zZXJ0VGV4dDEgPSAiPGxvZ2ljOml0ZXJhdGUgaWQ9XCJpdGVyYXRlSURcIiB0eXBlPVwiamF2YS51dGlsLkxpc3RcIiBpbmRleElkPVwiaW5kZXhJRFwiPjwvbG9naWM6aXRlcmF0ZT5cbiI7Ci0vLwkJCQlTdHJpbmcgaW5zZXJ0VGV4dDIgPSAiPCVAdGFnbGliIHVyaT1cInN0cnV0cy1sb2dpYy50bGRcIiBwcmVmaXg9XCJsb2dpY1wiICU+XG4iOwotLy8KLS8vCQkJCXNEb2MucmVwbGFjZSgwLCAwLCBpbnNlcnRUZXh0MSk7Ci0vLwkJCQlzRG9jLnJlcGxhY2UoMCwgMCwgaW5zZXJ0VGV4dDIpOwotLy8KLS8vCQkJCUpTUFNlYXJjaFN1cHBvcnQuZ2V0SW5zdGFuY2UoKS5hZGRKc3BGaWxlKGJsYW5rSnNwRmlsZSk7Ci0vLwkJCX0KLS8vCQl9Ci0vLwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLS8vCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLS8vCQl9Ci0vLwkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotLy8JCQllLnByaW50U3RhY2tUcmFjZSgpOwotLy8JCX0KLS8vCQljYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotLy8JCQllLnByaW50U3RhY2tUcmFjZSgpOwotLy8JCX0KLS8vCQlmaW5hbGx5IHsKLS8vCQkJaWYgKHNNb2RlbCAhPSBudWxsKQotLy8JCQkJc01vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotLy8JCX0KLS8vCX0KLQotCXByaXZhdGUgdm9pZCBjcmVhdGVQcm9qZWN0KCkgewotCi0JCS8vIGNyZWF0ZSBwcm9qZWN0Ci0JCVN0cmluZ1tdIG5hdHVyZUlkcyA9IHtQcm9qZWN0VXRpbC5KQVZBX05BVFVSRV9JRH07Ci0JCUlQcm9qZWN0IHByb2ogPSBQcm9qZWN0VXRpbC5jcmVhdGVQcm9qZWN0KFBST0pFQ1RfTkFNRSwgbnVsbCwgbmF0dXJlSWRzKTsKLQotCQkvLyBjb3B5IGZpbGVzIGludG8gd29ya3NwYWNlCi0JCUlGaWxlIGYgPSBQcm9qZWN0VXRpbC5jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLzExNjUyMy9zdHJ1dHMuamFyIiwgUFJPSkVDVF9OQU1FICsgIi9zdHJ1dHMuamFyIik7Ci0JCWFzc2VydFRydWUoZi5leGlzdHMoKSk7Ci0JCWYgPSBQcm9qZWN0VXRpbC5jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLzExNjUyMy9zdHJ1dHMtbG9naWMudGxkIiwgUFJPSkVDVF9OQU1FICsgIi9zdHJ1dHMtbG9naWMudGxkIik7Ci0JCWFzc2VydFRydWUoZi5leGlzdHMoKSk7Ci0KLQkJLy8gYWRkIHN0cnV0cyB0byBjbGFzc3BhdGgKLQkJUHJvamVjdFV0aWwuYWRkTGlicmFyeUVudHJ5KHByb2osICJzdHJ1dHMuamFyIik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL0NvbW1vblhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL0NvbW1vblhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTI3MGZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9Db21tb25YTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsOwotCi0KLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uT3V0cHV0S2V5czsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3RvcnlDb25maWd1cmF0aW9uRXJyb3I7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5kb20uRE9NU291cmNlOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLlN0cmVhbVJlc3VsdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuTG9nZ2VyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0vKioKLSAqLwotcHVibGljIGNsYXNzIENvbW1vblhNTCB7Ci0KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBEb2N1bWVudEJ1aWxkZXIgZ2V0RG9jdW1lbnRCdWlsZGVyKCkgewotCQlEb2N1bWVudEJ1aWxkZXIgcmVzdWx0ID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlc3VsdCA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLQkJfQotCQljYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlMb2dnZXIubG9nRXhjZXB0aW9uKGUpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgRG9jdW1lbnRCdWlsZGVyIGdldERvY3VtZW50QnVpbGRlcihib29sZWFuIHZhbGlkYXRpbmcpIHsKLQkJRG9jdW1lbnRCdWlsZGVyIHJlc3VsdCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGluc3RhbmNlID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQkJaW5zdGFuY2Uuc2V0VmFsaWRhdGluZyh2YWxpZGF0aW5nKTsKLQkJCXJlc3VsdCA9IGluc3RhbmNlLm5ld0RvY3VtZW50QnVpbGRlcigpOwotCQl9Ci0JCWNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCUxvZ2dlci5sb2dFeGNlcHRpb24oZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgc2VyaWFsaXplKERvY3VtZW50IGRvY3VtZW50LCBPdXRwdXRTdHJlYW0gb3N0cmVhbSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU291cmNlIGRvbVNvdXJjZSA9IG5ldyBET01Tb3VyY2UoZG9jdW1lbnQpOwotCQl0cnkgewotCQkJVHJhbnNmb3JtZXIgc2VyaWFsaXplciA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1RyYW5zZm9ybWVyKCk7Ci0JCQl0cnkgewotCQkJCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5JTkRFTlQsICJ5ZXMiKTsKLQkJCQlzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KCJ7aHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHR9aW5kZW50LWFtb3VudCIsICI0Iik7Ci0JCQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLkVOQ09ESU5HLCAiVVRGLTE2Iik7Ci0JCQl9Ci0JCQljYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCQkvLyB1bnN1cHBvcnRlZCBwcm9wZXJ0aWVzCi0JCQl9Ci0JCQlzZXJpYWxpemVyLnRyYW5zZm9ybShkb21Tb3VyY2UsIG5ldyBTdHJlYW1SZXN1bHQob3N0cmVhbSkpOwotCQl9Ci0JCWNhdGNoIChUcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCQljYXRjaCAoVHJhbnNmb3JtZXJGYWN0b3J5Q29uZmlndXJhdGlvbkVycm9yIGUpIHsKLQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQkJY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL0RhdGVVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvRGF0ZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJkYjE4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvRGF0ZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsOwotCi1pbXBvcnQgamF2YS50ZXh0LkRhdGVGb3JtYXQ7Ci1pbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7Ci1pbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotCi0vKioKLSAqIEBhdXRob3IgZGF2aWR3Ci0gKgotICogVG8gY2hhbmdlIHRoaXMgZ2VuZXJhdGVkIGNvbW1lbnQgZWRpdCB0aGUgdGVtcGxhdGUgdmFyaWFibGUgInR5cGVjb21tZW50IjoKLSAqIFdpbmRvdz5QcmVmZXJlbmNlcz5KYXZhPlRlbXBsYXRlcy4KLSAqIFRvIGVuYWJsZSBhbmQgZGlzYWJsZSB0aGUgY3JlYXRpb24gb2YgdHlwZSBjb21tZW50cyBnbyB0bwotICogV2luZG93PlByZWZlcmVuY2VzPkphdmE+Q29kZSBHZW5lcmF0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgRGF0ZVV0aWwgewotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEFsbFRlc3RzLgotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIG5vdyA9IG51bGw7Ci0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIG5vdygpIHsKLQkJLy8ganVzdCBjYWxjdWxhdGUgb25jZSwgc28gd2hvbGUgcnVuIGFzIHNhbWUgdGltZXN0YW1wCi0JCWlmIChEYXRlVXRpbC5ub3cgPT0gbnVsbCkgewotCQkJRGF0ZUZvcm1hdCBmb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eSctJ01NJy0nZGQnLSdrayctJ21tJy0nc3MiKTsKLQkJCUNhbGVuZGFyIGNhbGVuZGFyID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKLQkJCURhdGUgdG9kYXkgPSBjYWxlbmRhci5nZXRUaW1lKCk7Ci0JCQlEYXRlVXRpbC5ub3cgPSBmb3JtYXQuZm9ybWF0KHRvZGF5KTsKLQkJfQotCQlyZXR1cm4gRGF0ZVV0aWwubm93OwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9GaWxlVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL0ZpbGVVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkZmYwNzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL0ZpbGVVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlbmFtZUZpbHRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi0vKioKLSAqIEBhdXRob3IgZGF2aWR3Ci0gKgotICovCi1wdWJsaWMgY2xhc3MgRmlsZVV0aWwgewotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZMaW5lU2VwYXJhdG9yID0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZQYXRoU2VwYXJhdG9yID0gU3lzdGVtLmdldFByb3BlcnR5KCJwYXRoLnNlcGFyYXRvciIpOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZGaWxlU2VwYXJhdG9yID0gU3lzdGVtLmdldFByb3BlcnR5KCJmaWxlLnNlcGFyYXRvciIpOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEpTUF9FRElUT1JfVEVTVFNfUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMiOwotCi0Jc3RhdGljIEZpbGUgcHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5ID0gbnVsbDsKLQlzdGF0aWMgcHJpdmF0ZSBTdHJpbmcgbG9nU3ViRGlyZWN0b3J5UGF0aDsKLQotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gbm90VHJpZWRZZXQgPSB0cnVlOwotCi0JcHVibGljIHN0YXRpYyBjbGFzcyBEaXJGaWxlbmFtZUZpbHRlciBpbXBsZW1lbnRzIEZpbGVuYW1lRmlsdGVyIHsKLQkJU3RyaW5nIHN0YXJ0T2ZBY2NlcHRhYmxlTmFtZXM7Ci0KLQkJcHVibGljIERpckZpbGVuYW1lRmlsdGVyKFN0cmluZyBzdGFydE9mRGlyTmFtZSkgewotCQkJc3RhcnRPZkFjY2VwdGFibGVOYW1lcyA9IHN0YXJ0T2ZEaXJOYW1lOwotCQl9Ci0KLQkJLyoqCi0JCSAqIEBzZWUgamF2YS5pby5GaWxlRmlsdGVyI2FjY2VwdChGaWxlKQotCQkgKi8KLQkJcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgcGF0aG5hbWUsIFN0cmluZyBmaWxlbmFtZSkgewotCQkJLy8gd2UnbGwganVzdCBhc3N1bWUgaWYgaXQgc3RhcnRzIHdpdGggcmlnaHQga2V5LCBpdCBpcyBhIGRpcmVjdG9yeSAuLi4gZm9yIG5vdwotCQkJcmV0dXJuIGZpbGVuYW1lLnN0YXJ0c1dpdGgoc3RhcnRPZkFjY2VwdGFibGVOYW1lcyk7Ci0JCX0KLQotCX0KLQotCXB1YmxpYyBzdGF0aWMgRmlsZSBnZXRQcmV2aW91c1Jlc3VsdHNEaXJlY3RvcnkoU3RyaW5nIGRpcmVjdG9yeVJvb3ROYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlpZiAocHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5ID09IG51bGwgJiYgbm90VHJpZWRZZXQpIHsKLQkJCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoSlNQX0VESVRPUl9URVNUU19QTFVHSU5fSUQpOwotCQkJVVJMIHVybCA9IGJ1bmRsZS5nZXRFbnRyeSgiLyIpOwotCQkJLy9TdHJpbmcgaW5zdGFsbFBhdGggPSB1cmwuZ2V0UGF0aCgpOwotCQkJLy8gYWRkIGtub3duIGZpbGUgc28gVVJMIG1ldGhvZCBiZWxvdyBjYW4gYmUgdXNlZAotCQkJLy8gKGRvZXNuJ3Qgc2VlbSB0byB3b3JrIGZvciBkaXJlY3Rvcnk/KQotCQkJVVJMIHRvdGFsVVJMID0gbmV3IFVSTCh1cmwsICJwbHVnaW4ueG1sIik7Ci0JCQlVUkwgZmluYWx1cmwgPSBQbGF0Zm9ybS5hc0xvY2FsVVJMKHRvdGFsVVJMKTsKLQkJCVN0cmluZyBmaW5hbEZpbGUgPSBmaW5hbHVybC5nZXRGaWxlKCk7Ci0JCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShmaW5hbEZpbGUpOwotCQkJU3RyaW5nIGZpbmFsUGF0aCA9IGZpbGUuZ2V0UGFyZW50KCk7Ci0JCQlGaWxlIHBsdWdpbkhvbWVEaXIgPSBuZXcgRmlsZShmaW5hbFBhdGgpOwotCQkJRmlsZW5hbWVGaWx0ZXIgZGlyRmlsdGVyID0gbmV3IERpckZpbGVuYW1lRmlsdGVyKGRpcmVjdG9yeVJvb3ROYW1lKTsKLQkJCUZpbGVbXSBhbGxEaXJzID0gcGx1Z2luSG9tZURpci5saXN0RmlsZXMoZGlyRmlsdGVyKTsKLQotCQkJLy8gYXNzdW1lIGZpcnN0IGluIGxpc3QgaXMgbmV3ZXN0LCB0aGVuIHN0YXJ0IGxvb2tpbmcgd2l0aCB0aGUgCi0JCQkvLyBzZWNvbmQgaXRlbSAuLi4ganVzdCB0byBhdm9pZCAibnVsbCIgY2FzZSBjaGVja2luZwotCQkJaWYgKGFsbERpcnMubGVuZ3RoID4gMCkgewotCQkJCUZpbGUgY3VycmVudE5ld2VzdCA9IGFsbERpcnNbMF07Ci0JCQkJZm9yIChpbnQgaSA9IDE7IGkgPCBhbGxEaXJzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCUZpbGUgY3VycmVudCA9IGFsbERpcnNbaV07Ci0JCQkJCS8vIE5PVEU6IHdlIGdvIGJ5IG1vZGlmaWVkIGRhdGUsIG5vdCBieSB0aGUgYWN0dWFsIHRpbWUgc3RhbXAgaW4gbmFtZS4KLQkJCQkJLy8gVGhpcyBzaG91bGQgd29yayBmb3IgYWxsIG5vcm1hbCBjYXNlcywgYnV0IG1heSBub3QgaWYgc29tZW9uZSBkb2VzIHNvbWUKLQkJCQkJLy8gImZ1bm55IiBjb3B5aW5nLCBvciB1cGRhdGluZyBmcm9tIHJlcG9zaXRvcnkuCi0JCQkJCWlmIChjdXJyZW50Lmxhc3RNb2RpZmllZCgpID4gY3VycmVudE5ld2VzdC5sYXN0TW9kaWZpZWQoKSkgewotCQkJCQkJY3VycmVudE5ld2VzdCA9IGN1cnJlbnQ7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJcHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5ID0gY3VycmVudE5ld2VzdDsKLQkJCX0KLQkJCW5vdFRyaWVkWWV0ID0gZmFsc2U7Ci0JCX0KLQkJcmV0dXJuIHByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIEZpbGUgbWFrZUZpbGVGb3IoU3RyaW5nIGRpcmVjdG9yeSwgU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgdGVzdFJlc3VsdHNEaXJlY3RvcnlQcmVmaXgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoSlNQX0VESVRPUl9URVNUU19QTFVHSU5fSUQpOwotCQlVUkwgdXJsID0gYnVuZGxlLmdldEVudHJ5KCIvIik7Ci0JCVVSTCBsb2NhbFVSTCA9IFBsYXRmb3JtLmFzTG9jYWxVUkwodXJsKTsKLQkJU3RyaW5nIGluc3RhbGxQYXRoID0gbG9jYWxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgdG90YWxEaXJlY3RvcnkgPSBpbnN0YWxsUGF0aCArIGRpcmVjdG9yeTsKLQkJU3RyaW5nIHRvdGFsUGF0aCA9IHRvdGFsRGlyZWN0b3J5ICsgIi8iICsgZmlsZW5hbWU7Ci0JCVVSTCB0b3RhbFVSTCA9IG5ldyBVUkwodXJsLCB0b3RhbFBhdGgpOwotCQkvL1VSTCBmaW5hbHVybCA9IFBsYXRmb3JtLmFzTG9jYWxVUkwodG90YWxVUkwpOwotCQlTdHJpbmcgZmluYWxGaWxlID0gdG90YWxVUkwuZ2V0RmlsZSgpOwotCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShmaW5hbEZpbGUpOwotCQlTdHJpbmcgZmluYWxQYXRoID0gZmlsZS5nZXRQYXJlbnQoKTsKLQkJRmlsZSBkaXIgPSBuZXcgRmlsZShmaW5hbFBhdGgpOwotCQlpZiAoIWRpci5leGlzdHMoKSkgewotCQkJLy8gYSBsaXR0bGUgc2FmZXR5IG5ldCwgYmUgc3VyZSB0aGUgcHJldmlvdXMgbmV3ZXN0IGRpcmVjdG9yeQotCQkJLy8gaXMgaW5pdGlhbGl6ZWQsIGp1c3QgaW4gY2FzZSBubyBvbmUgZWxzZSBoYXMgZG9uZSBzbwotCQkJaWYgKHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4ICE9IG51bGwgJiYgdGVzdFJlc3VsdHNEaXJlY3RvcnlQcmVmaXgubGVuZ3RoKCkgPiAwKSB7Ci0JCQkJRmlsZVV0aWwuZ2V0UHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5KHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4KTsKLQkJCX0KLQkJCS8vIG5vdyBpdHMgInNhZmUiIHRvIG1ha2UgdGhlIG5ldyBvbmUKLQkJCWRpci5ta2RpcnMoKTsKLQkJfQotCQlyZXR1cm4gZmlsZTsKLQl9Ci0KLQkvKioKLQkgKiBKdXN0IGEgZ2VuZXJhbCB1dGlsaXR5IG1ldGhvZAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RXh0ZW5zaW9uKFN0cmluZyBmaWxlbmFtZSkgewotCQlTdHJpbmcgZXh0ZW5zaW9uID0gbnVsbDsKLQkJaW50IGRvdFBvc3Rpb24gPSBmaWxlbmFtZS5sYXN0SW5kZXhPZignLicpOwotCQlpZiAoZG90UG9zdGlvbiA+IC0xKSB7Ci0JCQlleHRlbnNpb24gPSBmaWxlbmFtZS5zdWJzdHJpbmcoZG90UG9zdGlvbiArIDEpOwotCQl9Ci0JCWVsc2UgewotCQkJZXh0ZW5zaW9uID0gbmV3IFN0cmluZygpOwotCQl9Ci0JCXJldHVybiBleHRlbnNpb247Ci0JfQotCi0JLyoqCi0JICogR2VuZXJhbCBwdXJwb3NlIHV0aWxpdHkgbWV0aG9kIHRvIGVuc3VyZSB0aGUgbG9nCi0JICogZGlyZWN0b3J5IGV4aXN0cywgYW5kIHJldHVybnMgdGhlIG5hbWUuIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldExvZ0RpcmVjdG9yeSgpIHsKLQkJaWYgKGxvZ1N1YkRpcmVjdG9yeVBhdGggPT0gbnVsbCkgewotCQkJU3RyaW5nIG1haW5EaXJlY3RvcnkgPSAiL2xvZ3MiOwotCQkJRmlsZSBkaXIgPSBuZXcgRmlsZShtYWluRGlyZWN0b3J5KTsKLQkJCWVuc3VyZUV4aXN0cyhkaXIpOwotCQkJU3RyaW5nIHN1YkRpcmVjdG9yeSA9IFRpbWVzdGFtcFV0aWwudGltZXN0YW1wKCk7Ci0JCQlsb2dTdWJEaXJlY3RvcnlQYXRoID0gbWFpbkRpcmVjdG9yeSArICIvIiArIHN1YkRpcmVjdG9yeTsKLQkJCUZpbGUgc3ViZGlyID0gbmV3IEZpbGUobG9nU3ViRGlyZWN0b3J5UGF0aCk7Ci0JCQllbnN1cmVFeGlzdHMoc3ViZGlyKTsKLQkJfQotCQlyZXR1cm4gbG9nU3ViRGlyZWN0b3J5UGF0aDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgZW5zdXJlRXhpc3RzKEZpbGUgZGlyKSB7Ci0JCWlmICghZGlyLmV4aXN0cygpKSB7Ci0JCQlkaXIubWtkaXJzKCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQZXJmb3JtYW5jZU91dHB1dExvZ05hbWUoKSB7Ci0JCVN0cmluZyByZXN1bHQgPSBudWxsOwotCQlTdHJpbmcgZGlyZWN0b3J5TmFtZSA9IEZpbGVVdGlsLmdldExvZ0RpcmVjdG9yeSgpOwotCQlTdHJpbmcgZXh0ZW5zaW9uID0gIi5vdXQiOwotCQlTdHJpbmcgYmFzZU5hbWUgPSAic2VkVGVzdHMiOwotCQlsb25nIG5vdyA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlTdHJpbmcgbm93U3RyID0gU3RyaW5nLnZhbHVlT2Yobm93KTsKLQkJcmVzdWx0ID0gZGlyZWN0b3J5TmFtZSArIEZpbGVVdGlsLmZGaWxlU2VwYXJhdG9yICsgYmFzZU5hbWUgKyBub3dTdHIgKyBleHRlbnNpb247Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL1Byb2plY3RVbnppcFV0aWxpdHkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9Qcm9qZWN0VW56aXBVdGlsaXR5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNGI4MWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL1Byb2plY3RVbnppcFV0aWxpdHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLnppcC5aaXBFbnRyeTsKLWltcG9ydCBqYXZhLnV0aWwuemlwLlppcEZpbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLklPdmVyd3JpdGVRdWVyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS53aXphcmRzLmRhdGF0cmFuc2Zlci5GaWxlU3lzdGVtU3RydWN0dXJlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkud2l6YXJkcy5kYXRhdHJhbnNmZXIuSUltcG9ydFN0cnVjdHVyZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLndpemFyZHMuZGF0YXRyYW5zZmVyLkltcG9ydE9wZXJhdGlvbjsKLQotLyoqCi0gKiBJbXBvcnRzIHppcHBlZCBmaWxlcyBpbnRvIHRoZSB0ZXN0IHdvcmtzcGFjZS4gRGVsZXRlcyBhbGwgcHJvamVjdHMgaW4KLSAqIHdvcmtzcGFjZS4KLSAqIAotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIFByb2plY3RVbnppcFV0aWxpdHkgewotCWNsYXNzIFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBpbXBsZW1lbnRzIElQcm9ncmVzc01vbml0b3IgewotCQlwcml2YXRlIGJvb2xlYW4gZmluaXNoZWQgPSBmYWxzZTsKLQotCQlwdWJsaWMgdm9pZCBiZWdpblRhc2soU3RyaW5nIG5hbWUsIGludCB0b3RhbFdvcmspIHsKLQkJCS8vIG5vb3AKLQkJfQotCi0JCXB1YmxpYyB2b2lkIGRvbmUoKSB7Ci0JCQlmaW5pc2hlZCA9IHRydWU7Ci0JCX0KLQotCQlwdWJsaWMgYm9vbGVhbiBpc0ZpbmlzaGVkKCkgewotCQkJcmV0dXJuIGZpbmlzaGVkOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgaW50ZXJuYWxXb3JrZWQoZG91YmxlIHdvcmspIHsKLQkJCS8vIG5vb3AKLQkJfQotCi0JCXB1YmxpYyBib29sZWFuIGlzQ2FuY2VsZWQoKSB7Ci0JCQlyZXR1cm4gZmluaXNoZWQ7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBzZXRDYW5jZWxlZChib29sZWFuIHZhbHVlKSB7Ci0JCQlpZiAodmFsdWUgPT0gdHJ1ZSkKLQkJCQlmaW5pc2hlZCA9IHRydWU7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBzZXRUYXNrTmFtZShTdHJpbmcgbmFtZSkgewotCQkJLy8gbm9vcAotCQl9Ci0KLQkJcHVibGljIHZvaWQgc3ViVGFzayhTdHJpbmcgbmFtZSkgewotCQkJLy8gbm9vcAotCQl9Ci0KLQkJcHVibGljIHZvaWQgd29ya2VkKGludCB3b3JrKSB7Ci0JCQkvLyBub29wCi0JCX0KLQl9Ci0KLQljbGFzcyBNeU92ZXJ3cml0ZVF1ZXJ5IGltcGxlbWVudHMgSU92ZXJ3cml0ZVF1ZXJ5IHsKLQkJcHVibGljIFN0cmluZyBxdWVyeU92ZXJ3cml0ZShTdHJpbmcgcGF0aFN0cmluZykgewotCQkJcmV0dXJuIEFMTDsKLQkJfQotCX0KLQotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST0pFQ1RfWklQU19GT0xERVIgPSAicHJvamVjdHRlc3RmaWxlcyI7Ci0JcHJpdmF0ZSBMaXN0IGZDcmVhdGVkUHJvamVjdHMgPSBudWxsOwotCi0JcHVibGljIFByb2plY3RVbnppcFV0aWxpdHkoKSB7Ci0JCS8vIGZvciBkZWxldGlvbiBsYXRlcgotCQlmQ3JlYXRlZFByb2plY3RzID0gbmV3IEFycmF5TGlzdCgpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBmaWxlVG9JbXBvcnQKLQkgKiAgICAgICAgICAgIHRoZSBmaWxlIHlvdSB3aXNoIHRvIGltcG9ydAotCSAqIEBwYXJhbSBmb2xkZXJQYXRoCi0JICogICAgICAgICAgICB0aGUgY29udGFpbmVyIHBhdGggd2l0aGluIHRoZSB3b3Jrc3BhY2UKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbXBvcnRGaWxlKEZpbGUgZmlsZVRvSW1wb3J0LCBTdHJpbmcgZm9sZGVyUGF0aCkgewotCQlXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IgaW1wb3J0UHJvZ3Jlc3MgPSBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCXRyeSB7Ci0JCQlpZiAoZmlsZVRvSW1wb3J0LmV4aXN0cygpKSB7Ci0JCQkJSVBhdGggY29udGFpbmVyUGF0aCA9IG5ldyBQYXRoKGZvbGRlclBhdGgpOwotCQkJCUlJbXBvcnRTdHJ1Y3R1cmVQcm92aWRlciBwcm92aWRlciA9IEZpbGVTeXN0ZW1TdHJ1Y3R1cmVQcm92aWRlci5JTlNUQU5DRTsKLQkJCQlJT3ZlcndyaXRlUXVlcnkgb3ZlcndyaXRlSW1wbGVtZW50b3IgPSBuZXcgTXlPdmVyd3JpdGVRdWVyeSgpOwotCQkJCUZpbGVbXSBmaWxlc1RvSW1wb3J0ID0ge2ZpbGVUb0ltcG9ydH07Ci0JCQkJSW1wb3J0T3BlcmF0aW9uIGltcG9ydE9wID0gbmV3IEltcG9ydE9wZXJhdGlvbihjb250YWluZXJQYXRoLCBudWxsLCBwcm92aWRlciwgb3ZlcndyaXRlSW1wbGVtZW50b3IsIEFycmF5cy5hc0xpc3QoZmlsZXNUb0ltcG9ydCkpOwotCQkJCWltcG9ydE9wLnNldENyZWF0ZUNvbnRhaW5lclN0cnVjdHVyZShmYWxzZSk7Ci0JCQkJaW1wb3J0T3Auc2V0T3ZlcndyaXRlUmVzb3VyY2VzKHRydWUpOwotCQkJCWltcG9ydE9wLnJ1bihpbXBvcnRQcm9ncmVzcyk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oImhhbmRsZSBzb3VyY2UgZG9lc24ndCBleGlzdCIpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaW1wb3J0UHJvZ3Jlc3MuZG9uZSgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogdGhlIGZvbGxvd2luZyBpcyBsb2dpYyBmcm9tCi0JICogaHR0cDovL3d3dy5kZXZzaGVkLmNvbS9jL2EvSmF2YS9aaXAtTWVldHMtSmF2YS8yLwotCSAqLwotCS8vIHNwZWNpZnkgYnVmZmVyIHNpemUgZm9yIGV4dHJhY3Rpb24KLQlzdGF0aWMgZmluYWwgaW50IEJVRkZFUiA9IDIwNDg7Ci0KLQlwdWJsaWMgdm9pZCB1bnppcEFuZEltcG9ydChGaWxlIGluRmlsZSwgU3RyaW5nIGRlc3RpbmF0aW9uRGlyZWN0b3J5KSB7Ci0JCXRyeSB7Ci0JCQkvLyBTcGVjaWZ5IGZpbGUgdG8gZGVjb21wcmVzcwotCQkJLy8gKG5zZCkgcmVkdW5kYW50PwotCQkJLy8gU3RyaW5nIGluRmlsZU5hbWUgPSBpbkZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0JCQkvLyAvLyJjOi9leGFtcGxlLnppcCI7Ci0JCQkvLyBGaWxlIHNvdXJjZVppcEZpbGUgPSBuZXcgRmlsZShpbkZpbGVOYW1lKTsKLQkJCUZpbGUgc291cmNlWmlwRmlsZSA9IGluRmlsZTsKLQotCQkJLy8gU3BlY2lmeSBkZXN0aW5hdGlvbiB3aGVyZSBmaWxlIHdpbGwgYmUgdW56aXBwZWQKLQkJCS8vIFN0cmluZyBkZXN0aW5hdGlvbkRpcmVjdG9yeSA9Ci0JCQkvLyAiZDovZWNsaXBzZWRldi9NNV9TU0VfVEVTVFNfV09SS1NQQUNFLyI7IC8vImM6L3RlbXAvIjsKLQkJCUZpbGUgdW56aXBEZXN0aW5hdGlvbkRpcmVjdG9yeSA9IG5ldyBGaWxlKGRlc3RpbmF0aW9uRGlyZWN0b3J5KTsKLQkJCS8vIE9wZW4gWmlwIGZpbGUgZm9yIHJlYWRpbmcKLQkJCVppcEZpbGUgemlwRmlsZSA9IG5ldyBaaXBGaWxlKHNvdXJjZVppcEZpbGUsIFppcEZpbGUuT1BFTl9SRUFEKTsKLQkJCUlQcm9qZWN0IGN1cnJlbnRQcm9qZWN0ID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJLy8gQ3JlYXRlIGFuIGVudW1lcmF0aW9uIG9mIHRoZSBlbnRyaWVzIGluIHRoZSB6aXAgZmlsZQotCQkJCUVudW1lcmF0aW9uIHppcEZpbGVFbnRyaWVzID0gemlwRmlsZS5lbnRyaWVzKCk7Ci0JCQkJU3RyaW5nIHByb2plY3RGb2xkZXJOYW1lID0gbnVsbDsKLQotCQkJCS8vIFByb2Nlc3MgZWFjaCBlbnRyeQotCQkJCXdoaWxlICh6aXBGaWxlRW50cmllcy5oYXNNb3JlRWxlbWVudHMoKSkgewotCQkJCQkvLyBncmFiIGEgemlwIGZpbGUgZW50cnkKLQkJCQkJWmlwRW50cnkgZW50cnkgPSAoWmlwRW50cnkpIHppcEZpbGVFbnRyaWVzLm5leHRFbGVtZW50KCk7Ci0JCQkJCVN0cmluZyBjdXJyZW50RW50cnkgPSBlbnRyeS5nZXROYW1lKCk7Ci0JCQkJCS8vIFN5c3RlbS5vdXQucHJpbnRsbigiRXh0cmFjdGluZzogIiArIGVudHJ5KTsKLQkJCQkJRmlsZSBkZXN0RmlsZSA9IG5ldyBGaWxlKHVuemlwRGVzdGluYXRpb25EaXJlY3RvcnksIGN1cnJlbnRFbnRyeSk7Ci0JCQkJCS8vIGdyYWIgZmlsZSdzIHBhcmVudCBkaXJlY3Rvcnkgc3RydWN0dXJlCi0JCQkJCUZpbGUgZGVzdGluYXRpb25QYXJlbnQgPSBkZXN0RmlsZS5nZXRQYXJlbnRGaWxlKCk7Ci0JCQkJCS8vIGNyZWF0ZSB0aGUgcGFyZW50IGRpcmVjdG9yeSBzdHJ1Y3R1cmUgaWYgbmVlZGVkCi0JCQkJCWRlc3RpbmF0aW9uUGFyZW50Lm1rZGlycygpOwotCQkJCQkvLyBleHRyYWN0IGZpbGUgaWYgbm90IGEgZGlyZWN0b3J5Ci0JCQkJCWlmICghZW50cnkuaXNEaXJlY3RvcnkoKSkgewotCQkJCQkJQnVmZmVyZWRJbnB1dFN0cmVhbSBpcyA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKHppcEZpbGUuZ2V0SW5wdXRTdHJlYW0oZW50cnkpKTsKLQkJCQkJCWludCBjdXJyZW50Qnl0ZTsKLQkJCQkJCS8vIGVzdGFibGlzaCBidWZmZXIgZm9yIHdyaXRpbmcgZmlsZQotCQkJCQkJYnl0ZSBkYXRhW10gPSBuZXcgYnl0ZVtCVUZGRVJdOwotCQkJCQkJLy8gd3JpdGUgdGhlIGN1cnJlbnQgZmlsZSB0byBkaXNrCi0JCQkJCQlGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGRlc3RGaWxlKTsKLQkJCQkJCUJ1ZmZlcmVkT3V0cHV0U3RyZWFtIGRlc3QgPSBuZXcgQnVmZmVyZWRPdXRwdXRTdHJlYW0oZm9zLCBCVUZGRVIpOwotCQkJCQkJdHJ5IHsKLQkJCQkJCQkvLyByZWFkIGFuZCB3cml0ZSB1bnRpbCBsYXN0IGJ5dGUgaXMgZW5jb3VudGVyZWQKLQkJCQkJCQl3aGlsZSAoKGN1cnJlbnRCeXRlID0gaXMucmVhZChkYXRhLCAwLCBCVUZGRVIpKSAhPSAtMSkgewotCQkJCQkJCQlkZXN0LndyaXRlKGRhdGEsIDAsIGN1cnJlbnRCeXRlKTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCQlmaW5hbGx5IHsKLQkJCQkJCQlkZXN0LmZsdXNoKCk7Ci0JCQkJCQkJZGVzdC5jbG9zZSgpOwotCQkJCQkJCWlzLmNsb3NlKCk7Ci0JCQkJCQkJZm9zLmNsb3NlKCk7Ci0JCQkJCQl9Ci0JCQkJCQlpZiAocHJvamVjdEZvbGRlck5hbWUgIT0gbnVsbCkKLQkJCQkJCQlpbXBvcnRGaWxlKGRlc3RGaWxlLCBwcm9qZWN0Rm9sZGVyTmFtZSk7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQkvLyBuZWVkIGhhbmRsZSB0byB0aGUgbWFpbiBwcm9qZWN0IGZvbGRlciB0byBjcmVhdGUKLQkJCQkJCS8vIGNvbnRhaW5lclBhdGgKLQkJCQkJCWlmIChwcm9qZWN0Rm9sZGVyTmFtZSA9PSBudWxsKSB7Ci0JCQkJCQkJcHJvamVjdEZvbGRlck5hbWUgPSBkZXN0RmlsZS5nZXROYW1lKCk7Ci0JCQkJCQkJZkNyZWF0ZWRQcm9qZWN0cy5hZGQocHJvamVjdEZvbGRlck5hbWUpOwotCi0JCQkJCQkJY3VycmVudFByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdEZvbGRlck5hbWUpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJZmluYWxseSB7Ci0JCQkJemlwRmlsZS5jbG9zZSgpOwotCQkJfQotCi0JCQkvLyBmaXhlcyB3b3Jrc3BhY2UgbWV0YWRhdGEgZm9yIHRoZSBwcm9qZWN0Ci0JCQkvLyBmb3IgY2xlYW4gc3RhcnR1cCBuZXh0IHJ1bgotCQkJaWYgKGN1cnJlbnRQcm9qZWN0ICE9IG51bGwpIHsKLQkJCQl0cnkgewotCQkJCQlQYXRoIHByb2plY3RMb2NhdGlvbiA9IG5ldyBQYXRoKFBsYXRmb3JtLmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpKTsKLQkJCQkJY3JlYXRlUHJvamVjdChjdXJyZW50UHJvamVjdCwgcHJvamVjdExvY2F0aW9uLCBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCX0KLQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZXgpIHsKLQkJCQkJY2V4LnByaW50U3RhY2tUcmFjZSgpOwotCQkJCX0KLQkJCX0KLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7Ci0JCQlpb2UucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCByZWZyZXNoV29ya3NwYWNlKCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQlJUHJvamVjdFtdIHByb2plY3RzID0gd3NSb290LmdldFByb2plY3RzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspIHsKLQkJCXByb2plY3RzW2ldLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQl9Ci0JCXdzUm9vdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBEZWxldGUgcHJvamVjdHMgY3JlYXRlZCAodW56aXBwZWQgYW5kIGltcG9ydGVkKSBieSB0aGlzIHV0aWxpdHkKLQkgKiAKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIGRlbGV0ZVByb2plY3RzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZpbmFsIElQcm9qZWN0W10gcHJvamVjdHMgPSBnZXRDcmVhdGVkUHJvamVjdHMoKTsKLQkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIGRlbGV0ZU9wID0gbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKLQkJCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykgewotCQkJCQlwcm9qZWN0c1tpXS5jbGVhckhpc3RvcnkobnVsbCk7Ci0JCQkJCXByb2plY3RzW2ldLmNsb3NlKG51bGwpOwotCQkJCQlwcm9qZWN0c1tpXS5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JCQkJfQotCQkJCXJlZnJlc2hXb3Jrc3BhY2UoKTsKLQkJCX0KLQkJfTsKLQkJV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzID0gbmV3IFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvcigpOwotCQlkZWxldGVPcC5ydW4ocHJvZ3Jlc3MpOwotCQkvLyBzYXZlcyB0aGUgbmV3IHdvcmtzcGFjZSBtZXRhZGF0YQotCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuc2F2ZSh0cnVlLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkZWxldGVQcm9qZWN0KFN0cmluZyBwcm9qZWN0TmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZpbmFsIFN0cmluZyBuYW1lID0gcHJvamVjdE5hbWU7Ci0JCUlXb3Jrc3BhY2VSb290IHdzUm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCWZpbmFsIElQcm9qZWN0IHByb2ogPSB3c1Jvb3QuZ2V0UHJvamVjdChuYW1lKTsKLQkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIGRlbGV0ZU9wID0gbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbihwcm9qKSB7Ci0JCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCS8vIElXb3Jrc3BhY2VSb290IHdzUm9vdCA9Ci0JCQkJLy8gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJCQkvLyBJUHJvamVjdCBwcm9qID0gd3NSb290LmdldFByb2plY3QobmFtZSk7Ci0JCQkJaWYgKHByb2ogIT0gbnVsbCAmJiBwcm9qLmV4aXN0cygpKSB7Ci0JCQkJCXByb2ouY2xlYXJIaXN0b3J5KG51bGwpOwotCQkJCQkvLyBwcm9qLmNsb3NlKG51bGwpOwotCQkJCQlwcm9qLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJCQl0cnkgewotCQkJCQkJcHJvai5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JCQkJCX0KLQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQkvLyBqdXN0IHRyeSBhZ2FpbiAobm90IHN1cmUgd2h5IHRoZXkgYXJlIG5vdCBiZWluZwotCQkJCQkJLy8gZGVsZXRlZCkKLQkJCQkJCXByb2oucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQkJCQlwcm9qLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJCQkJfQotCQkJCQkvLyBwcm9qID0gbnVsbDsKLQkJCQl9Ci0JCQkJcmVmcmVzaFdvcmtzcGFjZSgpOwotCQkJfQotCQl9OwotCQlXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3MgPSBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCWRlbGV0ZU9wLnJ1bihwcm9ncmVzcyk7Ci0JCS8vIHNhdmVzIHRoZSBuZXcgd29ya3NwYWNlIG1ldGFkYXRhCi0JCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5zYXZlKHRydWUsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gSVByb2plY3RzIHRoYXQgd2VyZSB1bnppcHBlZCBhbmQgaW1wb3J0ZWQgaW50byB0aGUgd29ya3NwYWNlIGJ5Ci0JICogICAgICAgICB0aGlzIHV0aWxpdHkKLQkgKi8KLQlwdWJsaWMgSVByb2plY3RbXSBnZXRDcmVhdGVkUHJvamVjdHMoKSB7Ci0JCUlXb3Jrc3BhY2VSb290IHdzUm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCVN0cmluZ1tdIHByb2plY3ROYW1lcyA9IChTdHJpbmdbXSkgZkNyZWF0ZWRQcm9qZWN0cy50b0FycmF5KG5ldyBTdHJpbmdbZkNyZWF0ZWRQcm9qZWN0cy5zaXplKCldKTsKLQkJSVByb2plY3RbXSBwcm9qZWN0cyA9IG5ldyBJUHJvamVjdFtwcm9qZWN0TmFtZXMubGVuZ3RoXTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0TmFtZXMubGVuZ3RoOyBpKyspIHsKLQkJCXByb2plY3RzW2ldID0gd3NSb290LmdldFByb2plY3QocHJvamVjdE5hbWVzW2ldKTsKLQkJfQotCQlyZXR1cm4gcHJvamVjdHM7Ci0JfQotCi0JcHVibGljIHZvaWQgaW5pdEphdmFQcm9qZWN0KFN0cmluZyBwcm9qTmFtZSkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlQbGF0Zm9ybS5nZXRKb2JNYW5hZ2VyKCkuYmVnaW5SdWxlKFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCksIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkvLyByZXN5bmNoCi0JCXJlZnJlc2hXb3Jrc3BhY2UoKTsKLQkJLy8gY2hhbmdlIHByZXJlcXMgdG8gZ2V0IHRoaXMgZnVuY3Rpb25hbGl0eSBiYWNrIGluCi0JCUlQcm9qZWN0IHByb2ogPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvak5hbWUpOwotCQlib29sZWFuIHNldE5hdHVyZXMgPSBmYWxzZTsKLQkJaWYgKCFwcm9qLmV4aXN0cygpKSB7Ci0JCQlzZXROYXR1cmVzID0gdHJ1ZTsKLQkJCXByb2ouY3JlYXRlKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWlmICghcHJvai5pc09wZW4oKSkgewotCQkJcHJvai5vcGVuKG51bGwpOwotCQl9Ci0JCS8vIG5lZWQgdG8gYWRkIGphdmEgbmF0dXJlLCBvciBlbHNlIHByb2plY3Qgd29uJ3QgImV4aXN0KCkiIGluIHRoZQotCQkvLyBqYXZhCi0JCS8vIGVsZW1lbnQgc2Vuc2UKLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvai5nZXREZXNjcmlwdGlvbigpOwotCQlMaXN0IG5hdHVyZXMgPSBuZXcgQXJyYXlMaXN0KEFycmF5cy5hc0xpc3QoZGVzYy5nZXROYXR1cmVJZHMoKSkpOwotCQlpZiAoIW5hdHVyZXMuY29udGFpbnMoSmF2YUNvcmUuTkFUVVJFX0lEKSkKLQkJCW5hdHVyZXMuYWRkKEphdmFDb3JlLk5BVFVSRV9JRCk7Ci0JCWRlc2Muc2V0TmF0dXJlSWRzKChTdHJpbmdbXSkgbmF0dXJlcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pKTsKLQkJcHJvai5zZXREZXNjcmlwdGlvbihkZXNjLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJUGxhdGZvcm0uZ2V0Sm9iTWFuYWdlcigpLmVuZFJ1bGUoUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVByb2plY3QoSVByb2plY3QgcHJvamVjdCwgSVBhdGggbG9jYXRpb25QYXRoLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJaWYgKG1vbml0b3IgPT0gbnVsbCkgewotCQkJbW9uaXRvciA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJfQotCQltb25pdG9yLmJlZ2luVGFzaygiY3JlYXRpbmcgdGVzdCBwcm9qZWN0IiwgMTApOwotCQkvLyBjcmVhdGUgdGhlIHByb2plY3QKLQkJdHJ5IHsKLQkJCWlmICghcHJvamVjdC5leGlzdHMoKSkgewotCQkJCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzYyA9IHByb2plY3QuZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2plY3QuZ2V0TmFtZSgpKTsKLQkJCQlpZiAoUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS5lcXVhbHMobG9jYXRpb25QYXRoKSkgewotCQkJCQlsb2NhdGlvblBhdGggPSBudWxsOwotCQkJCX0KLQkJCQlkZXNjLnNldExvY2F0aW9uKGxvY2F0aW9uUGF0aCk7Ci0JCQkJcHJvamVjdC5jcmVhdGUoZGVzYywgbW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCQlpZiAoIXByb2plY3QuaXNPcGVuKCkpIHsKLQkJCQlwcm9qZWN0Lm9wZW4obW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9uaXRvciAhPSBudWxsKSB7Ci0JCQkJbW9uaXRvci5kb25lKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBkZWxldGVQcm9qZWN0KElQcm9qZWN0IGZQcm9qZWN0KSB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotCQlmaW5hbCBJUHJvamVjdCBwcm9qID0gZlByb2plY3Q7Ci0JCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBkZWxldGVPcCA9IG5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24ocHJvaikgewotCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQkvLyBJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPQotCQkJCS8vIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCQkJLy8gSVByb2plY3QgcHJvaiA9IHdzUm9vdC5nZXRQcm9qZWN0KG5hbWUpOwotCQkJCWlmIChwcm9qICE9IG51bGwgJiYgcHJvai5leGlzdHMoKSkgewotCQkJCQlwcm9qLmNsZWFySGlzdG9yeShudWxsKTsKLQkJCQkJLy8gcHJvai5jbG9zZShudWxsKTsKLQkJCQkJcHJvai5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCQkJcHJvai5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JCQkJCS8vIHByb2ogPSBudWxsOwotCQkJCX0KLQkJCQlyZWZyZXNoV29ya3NwYWNlKCk7Ci0JCQl9Ci0JCX07Ci0JCS8vIFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBwcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJZGVsZXRlT3AucnVuKG51bGwpOwotCQkvLyBzYXZlcyB0aGUgbmV3IHdvcmtzcGFjZSBtZXRhZGF0YQotCQkvLyBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuc2F2ZSh0cnVlLCBudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL1Byb2plY3RVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvUHJvamVjdFV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGIyYjMwNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvUHJvamVjdFV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUNsYXNzcGF0aEVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhTW9kZWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5KU1BVSVRlc3RzUGx1Z2luOwotCi0vKioKLSAqIFNvbWUgdXRpbGl0aWVzIGZvciBjcmVhdGluZyBwcm9qZWN0cywgYW5kIGNvcHlpbmcgZmlsZXMgaW50byB0aGUgd29ya3NwYWNlLgotICovCi1wdWJsaWMgY2xhc3MgUHJvamVjdFV0aWwgewotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSkFWQV9OQVRVUkVfSUQgPSAib3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZSI7Ci0JCi0JLyoqCi0JICogQWRkIGEgbGlicmFyeSBlbnRyeSAobGlrZSBhIGphcikgdG8gdGhlIGNsYXNzcGF0aCBvZiBhIHByb2plY3QuCi0JICogVGhlIGphciBtdXN0IGJlIGluIHlvdXIgcG9qZWN0LiBZb3UgY2FuIGNvcHkgdGhlIGphciBpbnRvIHlvdXIgd29ya3NwYWNlIHVzaW5nCi0JICogY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShTdHJpbmcgZW50cnluYW1lLCBTdHJpbmcgZnVsbFBhdGgpCi0JICogCi0JICogQHBhcmFtIHByb2ogYXNzdW1lZCBpdCBoYXMgamF2YSBuYXR1cmUKLQkgKiBAcGFyYW0gcGF0aFRvSmFyIHByb2plY3QgcmVsYXRpdmUsIG5vIGxlYWRpbmcgc2xhc2gKLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgYWRkTGlicmFyeUVudHJ5KElQcm9qZWN0IHByb2osIFN0cmluZyBwYXRoVG9KYXIpIHsKLQkJCi0JCUlQYXRoIHByb2pMb2NhdGlvbiA9IHByb2ouZ2V0TG9jYXRpb24oKTsKLQkJSVBhdGggYWJzSmFyUGF0aCA9IHByb2pMb2NhdGlvbi5hcHBlbmQocGF0aFRvSmFyKTsKLQkJCi0JCUlKYXZhUHJvamVjdCBqUHJvaiA9IEphdmFDb3JlLmNyZWF0ZShwcm9qKTsKLQkJCi0JCUlDbGFzc3BhdGhFbnRyeSBzdHJ1dHNKYXJFbnRyeSA9IEphdmFDb3JlLm5ld0xpYnJhcnlFbnRyeShhYnNKYXJQYXRoLCBudWxsLCBudWxsKTsKLQkJdHJ5IHsKLQkJCUlDbGFzc3BhdGhFbnRyeVtdIGN1cnJlbnRFbnRyaWVzID0galByb2ouZ2V0UmF3Q2xhc3NwYXRoKCk7Ci0JCQkKLQkJCUxpc3QgbCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCWwuYWRkQWxsKEFycmF5cy5hc0xpc3QoY3VycmVudEVudHJpZXMpKTsKLQkJCWwuYWRkKHN0cnV0c0phckVudHJ5KTsKLQkJCQotCQkJSUNsYXNzcGF0aEVudHJ5W10gbmV3RW50cmllcyA9IChJQ2xhc3NwYXRoRW50cnlbXSlsLnRvQXJyYXkobmV3IElDbGFzc3BhdGhFbnRyeVtsLnNpemUoKV0pOwotCQkJalByb2ouc2V0UmF3Q2xhc3NwYXRoKG5ld0VudHJpZXMsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQkKLQl9Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gZW50cnluYW1lIHBhdGggcmVsYXRpdmUgdG8gVEVTVCBwbHVnaW4gc3RhcnRpbmcgdy8gYSAiLyIKLQkgKiAJCQkJCQkoZWcuICIvdGVzdGZpbGVzL2J1Z251bWJlci9zdHJ1dHMtbG9naWMudGxkIikKLQkgKiBAcGFyYW0gZnVsbFBhdGggcGF0aCByZWxhdGl2ZSB0byBqdW5pdCB0ZXN0IHdvcmtwYWNlCi0JICogCQkJCQkJKGVnLiAiL215cnVudGltZXByb2ovc3RydXRzLWxvZ2ljLnRsZCIpCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSUZpbGUgY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShTdHJpbmcgZW50cnluYW1lLCBTdHJpbmcgZnVsbFBhdGgpIHsKLQkJSUZpbGUgZmlsZSA9IG51bGw7Ci0JCVVSTCBlbnRyeSA9IEpTUFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KGVudHJ5bmFtZSk7Ci0JCWlmIChlbnRyeSAhPSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCWJ5dGVbXSBiID0gbmV3IGJ5dGVbMjA0OF07Ci0JCQkJSW5wdXRTdHJlYW0gaW5wdXQgPSBlbnRyeS5vcGVuU3RyZWFtKCk7Ci0JCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG91dHB1dCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCQlpbnQgaSA9IC0xOwotCQkJCXdoaWxlICgoaSA9IGlucHV0LnJlYWQoYikpID4gLTEpIHsKLQkJCQkJb3V0cHV0LndyaXRlKGIsIDAsIGkpOwotCQkJCX0KLQkJCQlmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZ1bGxQYXRoKSk7Ci0JCQkJaWYgKGZpbGUgIT0gbnVsbCkgewotCQkJCQlmaWxlLmNyZWF0ZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ob3V0cHV0LnRvQnl0ZUFycmF5KCkpLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyAgSVByb2plY3QgY3JlYXRlUHJvamVjdChTdHJpbmcgbmFtZSwgSVBhdGggbG9jYXRpb24sIFN0cmluZ1tdIG5hdHVyZUlkcykgewotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihuYW1lKTsKLQkJaWYgKGxvY2F0aW9uICE9IG51bGwpIHsKLQkJCWRlc2NyaXB0aW9uLnNldExvY2F0aW9uKGxvY2F0aW9uKTsKLQkJfQotCQlpZiAobmF0dXJlSWRzICE9IG51bGwpIHsKLQkJCWRlc2NyaXB0aW9uLnNldE5hdHVyZUlkcyhuYXR1cmVJZHMpOwotCQl9Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QobmFtZSk7Ci0JCXRyeSB7Ci0JCQlwcm9qZWN0LmNyZWF0ZShkZXNjcmlwdGlvbiwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQlwcm9qZWN0Lm9wZW4obmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gcHJvamVjdDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvVGltZXN0YW1wVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL1RpbWVzdGFtcFV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWUxNzFmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvVGltZXN0YW1wVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnRleHQuRGF0ZUZvcm1hdDsKLWltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci0KLS8qKgotICogQGF1dGhvciBkYXZpZHcKLSAqCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIG9uZSB0aW1lc3RhbXAgcGVyIFZNIHJ1bi4KLSAqIChUZWNobmljYWxseSwgcGVyIGNsYXNzIGxvYWRpbmcuKQotICovCi1wdWJsaWMgY2xhc3MgVGltZXN0YW1wVXRpbCB7Ci0KLQlwcml2YXRlIHN0YXRpYyBEYXRlIHRpbWVzdGFtcCA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgRGF0ZUZvcm1hdCBzaG9ydEZvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5Jy0nTU0nLSdkZCIpOwotCS8vCXByaXZhdGUgc3RhdGljIERhdGVGb3JtYXQgbG9uZ0Zvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5Jy0nTU0nLSdkZCctJ2trJy0nbW0nLSdzcyIpOwotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIG5vd1Nob3J0ID0gbnVsbDsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHRpbWVzdGFtcCgpIHsKLQotCQlpZiAoVGltZXN0YW1wVXRpbC5ub3dTaG9ydCA9PSBudWxsKSB7Ci0JCQlUaW1lc3RhbXBVdGlsLm5vd1Nob3J0ID0gc2hvcnRGb3JtYXQuZm9ybWF0KGVuc3VyZVRpbWVzdGFtcCgpKTsKLQkJfQotCQlyZXR1cm4gVGltZXN0YW1wVXRpbC5ub3dTaG9ydDsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIERhdGUgZW5zdXJlVGltZXN0YW1wKCkgewotCQkvLyBqdXN0IGNhbGN1bGF0ZSAndGltZXN0YW1wJyBvbmNlIHBlciBjbGFzcyBsb2FkaW5nLCAKLQkJLy8gc28gdGhpcyAndGltZXN0YW1wJyByZW1haW5zIHRoZSBzYW1lIGR1cmluZyAKLQkJLy8gZW50aXJlIHJ1bi4gCi0JCWlmIChUaW1lc3RhbXBVdGlsLnRpbWVzdGFtcCA9PSBudWxsKSB7Ci0JCQlDYWxlbmRhciBjYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7Ci0JCQlUaW1lc3RhbXBVdGlsLnRpbWVzdGFtcCA9IGNhbGVuZGFyLmdldFRpbWUoKTsKLQkJfQotCQlyZXR1cm4gVGltZXN0YW1wVXRpbC50aW1lc3RhbXA7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL1dvcmtzcGFjZVByb2dyZXNzTW9uaXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL1dvcmtzcGFjZVByb2dyZXNzTW9uaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2YxMDdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9Xb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci0KLWNsYXNzIFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBpbXBsZW1lbnRzIElQcm9ncmVzc01vbml0b3IgewotCXByaXZhdGUgYm9vbGVhbiBmaW5pc2hlZCA9IGZhbHNlOwotCi0JcHVibGljIHZvaWQgYmVnaW5UYXNrKFN0cmluZyBuYW1lLCBpbnQgdG90YWxXb3JrKSB7Ci0JfQotCi0JcHVibGljIHZvaWQgZG9uZSgpIHsKLQkJZmluaXNoZWQgPSB0cnVlOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzRmluaXNoZWQoKSB7Ci0JCXJldHVybiBmaW5pc2hlZDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbnRlcm5hbFdvcmtlZChkb3VibGUgd29yaykgewotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzQ2FuY2VsZWQoKSB7Ci0JCXJldHVybiBmaW5pc2hlZDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDYW5jZWxlZChib29sZWFuIHZhbHVlKSB7Ci0JCWlmICh2YWx1ZSA9PSB0cnVlKQotCQkJZmluaXNoZWQgPSB0cnVlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFRhc2tOYW1lKFN0cmluZyBuYW1lKSB7Ci0JfQotCi0JcHVibGljIHZvaWQgc3ViVGFzayhTdHJpbmcgbmFtZSkgewotCX0KLQotCXB1YmxpYyB2b2lkIHdvcmtlZChpbnQgd29yaykgewotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkpTUC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25KU1AuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FlMjkyNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkpTUC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy52aWV3ZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklBdXRvRWRpdFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUluZm9ybWF0aW9uQ29udHJvbENyZWF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dERvdWJsZUNsaWNrU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dEhvdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5JQ29udGVudEFzc2lzdGFudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmZvcm1hdHRlci5JQ29udGVudEZvcm1hdHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0Lmh5cGVybGluay5JSHlwZXJsaW5rRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5pbmZvcm1hdGlvbi5JSW5mb3JtYXRpb25QcmVzZW50ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5yZWNvbmNpbGVyLklSZWNvbmNpbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklBbm5vdGF0aW9uSG92ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSUpTUFBhcnRpdGlvblR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSUhUTUxQYXJ0aXRpb25UeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuc3R5bGUuTGluZVN0eWxlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVhNTFBhcnRpdGlvbnM7Ci0KLS8qKgotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uSlNQIGV4dGVuZHMgVGVzdENhc2UgewotICAgIAotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNQIGZDb25maWcgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBmRGlzcGxheUV4aXN0cyA9IHRydWU7Ci0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlciBmVmlld2VyID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCQotICAgIHB1YmxpYyBUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkpTUCgpIHsKLSAgICAgICAgc3VwZXIoIlRlc3RWaWV3ZXJDb25maWd1cmF0aW9uSlNQIik7Ci0gICAgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotICAgIAlzdXBlci5zZXRVcCgpOwotCQlpZighdGhpcy5pc1NldHVwKXsKLQkJCXNldFVwVmlld2VyQ29uZmlndXJhdGlvbigpOwotCQkJdGhpcy5pc1NldHVwID0gdHJ1ZTsKLQkJfQotICAgIH0KLQkKLQlwcml2YXRlIHZvaWQgc2V0VXBWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCi0JCWlmIChEaXNwbGF5LmdldEN1cnJlbnQoKSAhPSBudWxsKSB7Ci0JCQkKLQkJCVNoZWxsIHNoZWxsID0gbnVsbDsKLQkJCUNvbXBvc2l0ZSBwYXJlbnQgPSBudWxsOwotCQkJCi0JCQlpZihQbGF0Zm9ybVVJLmlzV29ya2JlbmNoUnVubmluZygpKSB7Ci0JCQkJc2hlbGwgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCk7Ci0JCQl9Ci0JCQllbHNlIHsJCi0JCQkJc2hlbGwgPSBuZXcgU2hlbGwoRGlzcGxheS5nZXRDdXJyZW50KCkpOwotCQkJfQotCQkJcGFyZW50ID0gbmV3IENvbXBvc2l0ZShzaGVsbCwgU1dULk5PTkUpOwotCQkJCi0JCQkvLyBkdW1teSB2aWV3ZXIKLQkJCWZWaWV3ZXIgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXIocGFyZW50LCBudWxsLCBudWxsLCBmYWxzZSwgU1dULk5PTkUpOwotCQkJZkNvbmZpZyA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU1AoKTsKLQkJfQotCQllbHNlIHsKLQkJCWZEaXNwbGF5RXhpc3RzID0gZmFsc2U7Ci0JCQlMb2dnZXIubG9nKExvZ2dlci5JTkZPLCAiUmVtZW1iZXIsIHZpZXdlciBjb25maWd1cmF0aW9uIHRlc3RzIGFyZSBub3QgcnVuIGJlY2F1c2Ugd29ya2JlbmNoIGlzIG5vdCBvcGVuIChub3JtYWwgb24gYnVpbGQgbWFjaGluZSkiKTsKLQkJfQotCX0KLSAgICAKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldEFubm90YXRpb25Ib3ZlcigpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUFubm90YXRpb25Ib3ZlciBob3ZlciA9IGZDb25maWcuZ2V0QW5ub3RhdGlvbkhvdmVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJBbm5vdGF0aW9uSG92ZXIgaXMgbnVsbCIsIGhvdmVyKTsKLSAgICB9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldEF1dG9FZGl0U3RyYXRlZ2llcygpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUF1dG9FZGl0U3RyYXRlZ3lbXSBzdHJhdGVnaWVzID0gZkNvbmZpZy5nZXRBdXRvRWRpdFN0cmF0ZWdpZXMoZlZpZXdlciwgSUpTUFBhcnRpdGlvblR5cGVzLkpTUF9ERUZBVUxUKTsKLQkJYXNzZXJ0Tm90TnVsbChzdHJhdGVnaWVzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGF1dG8gZWRpdCBzdHJhdGVnaWVzIiwgc3RyYXRlZ2llcy5sZW5ndGggPiAwKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbmZpZ3VyZWRDb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoY29uZmlndXJlZENvbnRlbnRUeXBlcyk7Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGNvbnRlbnQgdHlwZXMiLCBjb25maWd1cmVkQ29udGVudFR5cGVzLmxlbmd0aCA+IDEpOwotCX0KLQkKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRBc3Npc3RhbnQoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlDb250ZW50QXNzaXN0YW50IGNhID0gZkNvbmZpZy5nZXRDb250ZW50QXNzaXN0YW50KGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJ0aGVyZSBpcyBubyBjb250ZW50IGFzc2lzdGFudCIsIGNhKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRGb3JtYXR0ZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlDb250ZW50Rm9ybWF0dGVyIGNmID0gZkNvbmZpZy5nZXRDb250ZW50Rm9ybWF0dGVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJ0aGVyZSBpcyBubyBjb250ZW50IGZvcm1hdHRlciIsIGNmKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldERvdWJsZUNsaWNrU3RyYXRlZ3koKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUlUZXh0RG91YmxlQ2xpY2tTdHJhdGVneSBzdHJhdGVneSA9IGZDb25maWcuZ2V0RG91YmxlQ2xpY2tTdHJhdGVneShmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYoc3RyYXRlZ3kgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBkb3VibGUgY2xpY2sgc3RyYXRlZ2llcyIsIGZhbHNlKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldEh5cGVybGlua0RldGVjdG9ycygpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUh5cGVybGlua0RldGVjdG9yW10gZGV0ZWN0b3JzID0gZkNvbmZpZy5nZXRIeXBlcmxpbmtEZXRlY3RvcnMoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGFyZSBubyBoeXBlcmxpbmsgZGV0ZWN0b3JzIiwgZGV0ZWN0b3JzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGh5cGVybGluayBkZXRlY3RvcnMiLCBkZXRlY3RvcnMubGVuZ3RoID4gMSk7Ci0JfQotCQotICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRJbmRlbnRQcmVmaXhlcygpIHsKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlTdHJpbmdbXSBjb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlTdHJpbmcgcHJlZml4ZXNbXSA9IGZDb25maWcuZ2V0SW5kZW50UHJlZml4ZXMoZlZpZXdlciwgY29udGVudFR5cGVzW2ldKTsKLQkJCWlmKHByZWZpeGVzICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgaW5kZW50IHByZWZpeGVzIiwgZmFsc2UpOwotCX0KLQkKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0gICAgcHVibGljIHZvaWQgdGVzdEdldEluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IgaW5mb0NyZWF0b3IgPSBmQ29uZmlnLmdldEluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IgaXMgbnVsbCIsIGluZm9DcmVhdG9yKTsKLSAgICB9Ci0gICAgCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRJbmZvcm1hdGlvblByZXNlbnRlcigpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUluZm9ybWF0aW9uUHJlc2VudGVyIHByZXNlbnRlciA9IGZDb25maWcuZ2V0SW5mb3JtYXRpb25QcmVzZW50ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkluZm9ybWF0aW9uUHJlc2VudGVyIGlzIG51bGwiLCBwcmVzZW50ZXIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0TGluZVN0eWxlUHJvdmlkZXJzKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUxpbmVTdHlsZVByb3ZpZGVyIHByb3ZpZGVyc1tdID0gZkNvbmZpZy5nZXRMaW5lU3R5bGVQcm92aWRlcnMoZlZpZXdlciwgY29udGVudFR5cGVzW2ldKTsKLQkJCWlmKHByb3ZpZGVycyAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGxpbmUgc3R5bGUgcHJvdmlkZXJzIiwgZmFsc2UpOwotCX0KLQkKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldFJlY29uY2lsZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlSZWNvbmNpbGVyIHIgPSBmQ29uZmlnLmdldFJlY29uY2lsZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIlJlY29uY2lsZXIgaXMgbnVsbCIsIHIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VGV4dEhvdmVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJU3RyaW5nW10gaG92ZXJQYXJ0aXRpb25zID0gbmV3IFN0cmluZ1tde0lIVE1MUGFydGl0aW9uVHlwZXMuSFRNTF9ERUZBVUxULAotCQkJCQkJCQkJCQkJCUlIVE1MUGFydGl0aW9uVHlwZXMuU0NSSVBULAotCQkJCQkJCQkJCQkJCUlKU1BQYXJ0aXRpb25UeXBlcy5KU1BfREVGQVVMVCwKLQkJCQkJCQkJCQkJCQlJSlNQUGFydGl0aW9uVHlwZXMuSlNQX0RJUkVDVElWRSwKLQkJCQkJCQkJCQkJCQlJSlNQUGFydGl0aW9uVHlwZXMuSlNQX0NPTlRFTlRfSkFWQSwKLQkJCQkJCQkJCQkJCQlJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVH07Ci0JCQotCQlmb3IgKGludCBpID0gMDsgaSA8IGhvdmVyUGFydGl0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJSVRleHRIb3ZlciBob3ZlciA9IGZDb25maWcuZ2V0VGV4dEhvdmVyKGZWaWV3ZXIsIGhvdmVyUGFydGl0aW9uc1tpXSwgU1dULk5PTkUpOwotCQkJYXNzZXJ0Tm90TnVsbCgiaG92ZXIgd2FzIG51bGwgZm9yIHBhcnRpdGlvbjogIiArIGhvdmVyUGFydGl0aW9uc1tpXSwgaG92ZXIpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy92aWV3ZXIvVmlld2VyVGVzdEpTUC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy92aWV3ZXIvVmlld2VyVGVzdEpTUC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWM1N2QwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdmlld2VyL1ZpZXdlclRlc3RKU1AuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudmlld2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5KRmFjZVJlc291cmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5CdXN5SW5kaWNhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSU1lbWVudG87Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdTaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JbmRleGVkUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLQotcHVibGljIGNsYXNzIFZpZXdlclRlc3RKU1AgZXh0ZW5kcyBWaWV3UGFydCB7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU1NFX0VESVRPUl9GT05UID0gIm9yZy5lY2xpcHNlLndzdC5zc2UudWkudGV4dGZvbnQiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIERFRkFVTFRfVklFV0VSX0NPTlRFTlRTID0gIjwlQCBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTFcIiAlPlxuIjsKLQotCVN0cnVjdHVyZWRUZXh0Vmlld2VyIGZTb3VyY2VWaWV3ZXIgPSBudWxsOwotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uIGZDb25maWcgPSBudWxsOwotCXByaXZhdGUgSUNvbnRlbnRPdXRsaW5lUGFnZSBmQ29udGVudE91dGxpbmVQYWdlID0gbnVsbDsKLQlwcml2YXRlIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIgPSBudWxsOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmlld2VyJ3MgaGlnaGxpZ2h0aW5nIHRleHQgcmFuZ2UgdG8gdGhlIHRleHQgcmFuZ2UgaW5kaWNhdGVkCi0JICogYnkgdGhlIHNlbGVjdGVkIE5vZGVzLgotCSAqLwotCXByb3RlY3RlZCBjbGFzcyBOb2RlUmFuZ2VTZWxlY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgewotCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgewotCQkJaWYgKCFldmVudC5nZXRTZWxlY3Rpb24oKS5pc0VtcHR5KCkgJiYgZXZlbnQuZ2V0U2VsZWN0aW9uKCkgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgZXZlbnQuZ2V0U2VsZWN0aW9uKCk7Ci0JCQkJSW5kZXhlZFJlZ2lvbiBzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotCQkJCUluZGV4ZWRSZWdpb24gZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSBzZWxlY3Rpb24udG9BcnJheSgpW3NlbGVjdGlvbi5zaXplKCkgLSAxXTsKLQotCQkJCWlmIChzdGFydE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQlzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgKChBdHRyKSBzdGFydE5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotCQkJCWlmIChlbmROb2RlIGluc3RhbmNlb2YgQXR0cikKLQkJCQkJZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIGVuZE5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotCi0JCQkJaW50IHN0YXJ0ID0gc3RhcnROb2RlLmdldFN0YXJ0T2Zmc2V0KCk7Ci0JCQkJaW50IGVuZCA9IGVuZE5vZGUuZ2V0RW5kT2Zmc2V0KCk7Ci0KLQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCWZTb3VyY2VWaWV3ZXIuc2V0VmlzaWJsZVJlZ2lvbihzdGFydCwgZW5kIC0gc3RhcnQpOwotCQkJCWZTb3VyY2VWaWV3ZXIuc2V0U2VsZWN0ZWRSYW5nZShzdGFydCwgMCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIGNsYXNzIE51bWJlcklucHV0RGlhbG9nIGV4dGVuZHMgRGlhbG9nIHsKLQkJcHVibGljIE51bWJlcklucHV0RGlhbG9nKFNoZWxsIHNoZWxsKSB7Ci0JCQlzdXBlcihzaGVsbCk7Ci0JCX0KLQotCQlwdWJsaWMgVGV4dCBzdGFydDsKLQkJaW50IHN0YXJ0VmFsdWU7Ci0JCXB1YmxpYyBUZXh0IGxlbmd0aDsKLQkJaW50IGxlbmd0aFZhbHVlOwotCi0JCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIHBhcmVudCkgewotCQkJQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IChDb21wb3NpdGUpIHN1cGVyLmNyZWF0ZURpYWxvZ0FyZWEocGFyZW50KTsKLQkJCUNvbXBvc2l0ZSBjb250YWluZXIgPSBuZXcgQ29tcG9zaXRlKGNvbXBvc2l0ZSwgU1dULk5VTEwpOwotCQkJY29udGFpbmVyLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCQkJY29udGFpbmVyLnNldExheW91dChuZXcgR3JpZExheW91dCgyLCB0cnVlKSk7Ci0JCQlzZXRTaGVsbFN0eWxlKGdldFNoZWxsKCkuZ2V0U3R5bGUoKSB8IFNXVC5SRVNJWkUpOwotCi0JCQlMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChjb250YWluZXIsIFNXVC5OVUxMKTsKLQkJCWxhYmVsLnNldFRleHQoIlN0YXJ0Iik7Ci0JCQlsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQotCQkJbGFiZWwgPSBuZXcgTGFiZWwoY29udGFpbmVyLCBTV1QuTlVMTCk7Ci0JCQlsYWJlbC5zZXRUZXh0KCJMZW5ndGgiKTsKLQkJCWxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQlzdGFydCA9IG5ldyBUZXh0KGNvbnRhaW5lciwgU1dULkJPUkRFUik7Ci0JCQlzdGFydFZhbHVlID0gZlNvdXJjZVZpZXdlci5nZXRWaXNpYmxlUmVnaW9uKCkuZ2V0T2Zmc2V0KCk7Ci0JCQlzdGFydC5zZXRUZXh0KCIiICsgc3RhcnRWYWx1ZSk7Ci0JCQlzdGFydC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQotCQkJbGVuZ3RoID0gbmV3IFRleHQoY29udGFpbmVyLCBTV1QuQk9SREVSKTsKLQkJCWxlbmd0aFZhbHVlID0gZlNvdXJjZVZpZXdlci5nZXRWaXNpYmxlUmVnaW9uKCkuZ2V0TGVuZ3RoKCk7Ci0JCQlsZW5ndGguc2V0VGV4dCgiIiArIGxlbmd0aFZhbHVlKTsKLQkJCWxlbmd0aC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQotCQkJLy8gc3RhcnQuYWRkTW9kaWZ5TGlzdGVuZXIobmV3IE1vZGlmeUxpc3RlbmVyKCkgewotCQkJLy8gcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7Ci0JCQkvLyBpZiAoZS53aWRnZXQgPT0gc3RhcnQpIHsKLQkJCS8vIHRyeSB7Ci0JCQkvLyBzdGFydFZhbHVlID0gSW50ZWdlci5kZWNvZGUoc3RhcnQuZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJLy8gfQotCQkJLy8gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlMikgewotCQkJLy8gc3RhcnRWYWx1ZSA9IDA7Ci0JCQkvLyB9Ci0JCQkvLyB9Ci0JCQkvLyB9Ci0JCQkvLyB9KTsKLQkJCS8vIGxlbmd0aC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7Ci0JCQkvLyBwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKLQkJCS8vIGlmIChlLndpZGdldCA9PSBsZW5ndGgpIHsKLQkJCS8vIHRyeSB7Ci0JCQkvLyBsZW5ndGhWYWx1ZSA9IEludGVnZXIuZGVjb2RlKGxlbmd0aC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQkvLyB9Ci0JCQkvLyBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkvLyBsZW5ndGhWYWx1ZSA9IDA7Ci0JCQkvLyB9Ci0JCQkvLyB9Ci0JCQkvLyB9Ci0JCQkvLyB9KTsKLQotCQkJcmV0dXJuIGNvbXBvc2l0ZTsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2cjb2tQcmVzc2VkKCkKLQkJICovCi0JCXByb3RlY3RlZCB2b2lkIG9rUHJlc3NlZCgpIHsKLQkJCXRyeSB7Ci0JCQkJc3RhcnRWYWx1ZSA9IEludGVnZXIuZGVjb2RlKHN0YXJ0LmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCX0KLQkJCWNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCQlzdGFydFZhbHVlID0gMDsKLQkJCX0KLQkJCXRyeSB7Ci0JCQkJbGVuZ3RoVmFsdWUgPSBJbnRlZ2VyLmRlY29kZShsZW5ndGguZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJfQotCQkJY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlMikgewotCQkJCWxlbmd0aFZhbHVlID0gMDsKLQkJCX0KLQkJCXN1cGVyLm9rUHJlc3NlZCgpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgYWRkQWN0aW9ucyhJQ29udHJpYnV0aW9uTWFuYWdlciBtZ3IpIHsKLQkJaWYgKG1nciAhPSBudWxsKSB7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIk5ldyBKU1AiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCUJ1c3lJbmRpY2F0b3Iuc2hvd1doaWxlKGdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKSwgbmV3IFJ1bm5hYmxlKCkgewotCQkJCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQkJCXNldHVwVmlld2VyRm9yTmV3KCk7Ci0JCQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQkJCX0KLQkJCQkJfSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBTZXBhcmF0b3IoKSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIkNoYW5nZSBWaXNpYmlsaXR5IjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlOdW1iZXJJbnB1dERpYWxvZyBkbGcgPSBuZXcgTnVtYmVySW5wdXREaWFsb2coZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuZ2V0U2hlbGwoKSk7Ci0JCQkJCWludCBwcm9jZWVkID0gZGxnLm9wZW4oKTsKLQkJCQkJaWYgKHByb2NlZWQgPT0gV2luZG93LkNBTkNFTCkKLQkJCQkJCXJldHVybjsKLQkJCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKGRsZy5zdGFydFZhbHVlLCBkbGcubGVuZ3RoVmFsdWUpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJTaG93IEFsbCI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IFNlcGFyYXRvcigpKTsKLQkJCS8vIG5vIGxvbmdlciBhYmxlIHRvIHNldCBpbnB1dCB0byBOVUxMCi0JCQkvLyBtZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkvLyBwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkvLyByZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCS8vIH0KLQkJCS8vCi0JCQkvLyBwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJLy8gcmV0dXJuICJTZXQgSW5wdXQgdG8gTlVMTCI7Ci0JCQkvLyB9Ci0JCQkvLyBwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkvLyBzdXBlci5ydW4oKTsKLQkJCS8vIHZpZXdlci5zZXRJbnB1dChudWxsKTsKLQkJCS8vIH0KLQkJCS8vIH0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJUYWtlIElucHV0IGZyb20gQWN0aXZlIEVkaXRvciI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJSVRleHRFZGl0b3IgdGV4dEVkaXRvciA9IGdldEFjdGl2ZUVkaXRvcigpOwotCQkJCQlpZiAodGV4dEVkaXRvciAhPSBudWxsKSB7Ci0JCQkJCQlzZXR1cFZpZXdlckZvckVkaXRvcih0ZXh0RWRpdG9yKTsKLQkJCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUodHJ1ZSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiVGFrZSBJbnB1dCBhbmQgRm9sbG93IFNlbGVjdGlvbiI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJZm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUodHJ1ZSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlRha2UgSW5wdXQgYW5kIEZvbGxvdyBTZWxlY3Rpb24gQXMgUmVhZE9ubHkiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCWZvbGxvd1NlbGVjdGlvbigpOwotCQkJCQlmU291cmNlVmlld2VyLnNldEVkaXRhYmxlKGZhbHNlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiU3RvcCBGb2xsb3dpbmcgU2VsZWN0aW9uIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlzdG9wRm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJfQotCQkJfSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I2NyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUlDb250cmlidXRpb25NYW5hZ2VyIG1nciA9IGdldFZpZXdTaXRlKCkuZ2V0QWN0aW9uQmFycygpLmdldE1lbnVNYW5hZ2VyKCk7Ci0JCWFkZEFjdGlvbnMobWdyKTsKLQotCQkvLyBjcmVhdGUgc291cmNlIHZpZXdlciAmIGl0cyBjb250ZW50IHR5cGUtc3BlY2lmaWMgdmlld2VyCi0JCS8vIGNvbmZpZ3VyYXRpb24KLQkJZlNvdXJjZVZpZXdlciA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlcihwYXJlbnQsIG51bGwsIG51bGwsIGZhbHNlLCBTV1QuTk9ORSk7Ci0JCWZDb25maWcgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNQKCk7Ci0KLQkJLy8gc2V0IHVwIHRoZSB2aWV3ZXIgd2l0aCBhIGRvY3VtZW50ICYgdmlld2VyIGNvbmZpZwotCQlzZXR1cFZpZXdlckZvck5ldygpOwotCi0JCXNldHVwVmlld2VyUHJlZmVyZW5jZXMoKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I2Rpc3Bvc2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsKLQkJZlNvdXJjZVZpZXdlci51bmNvbmZpZ3VyZSgpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjc2V0Rm9jdXMoKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgewotCQlpZiAoZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkgIT0gbnVsbCAmJiAhZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKQotCQkJZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuc2V0Rm9jdXMoKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklWaWV3UGFydCNpbml0KElWaWV3U2l0ZSwgSU1lbWVudG8pCi0JICovCi0JcHVibGljIHZvaWQgaW5pdChJVmlld1NpdGUgc2l0ZSwgSU1lbWVudG8gbWVtZW50bykgdGhyb3dzIFBhcnRJbml0RXhjZXB0aW9uIHsKLQkJc3VwZXIuaW5pdChzaXRlLCBtZW1lbnRvKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdXAgc291cmNlIHZpZXdlciB3aXRoIGFueSBhZGRpdGlvbmFsIHByZWZlcmVuY2VzIGl0IHNob3VsZCBoYXZlIEV4OgotCSAqIGZvbnQsIHRhYiB3aWR0aAotCSAqLwotCXByaXZhdGUgdm9pZCBzZXR1cFZpZXdlclByZWZlcmVuY2VzKCkgewotCQlmU291cmNlVmlld2VyLmdldFRleHRXaWRnZXQoKS5zZXRGb250KEpGYWNlUmVzb3VyY2VzLmdldEZvbnQoU1NFX0VESVRPUl9GT05UKSk7Ci0JfQotCi0JLyoqCi0JICogU2V0IHVwIHNvdXJjZSB2aWV3ZXIgd2l0aCBhIG5ldyBkb2N1bWVudCAmIGNvbmZpZ3VyZSBpdAotCSAqLwotCXByaXZhdGUgdm9pZCBzZXR1cFZpZXdlckZvck5ldygpIHsKLQkJc3RvcEZvbGxvd1NlbGVjdGlvbigpOyAvLyBpZiB3YXMgZm9sbG93aW5nIHNlbGVjdGlvbiwgc3RvcAotCi0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQotCQlJRG9jdW1lbnQgZG9jID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcihDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJZG9jLnNldChERUZBVUxUX1ZJRVdFUl9DT05URU5UUyk7Ci0KLQkJZlNvdXJjZVZpZXdlci5zZXREb2N1bWVudChkb2MpOwotCQkvLyBuZWVkIHRvIHJlY29uZmlndXJlIGFmdGVyIHNldCBkb2N1bWVudCBqdXN0IHNvIGhpZ2hsaWdodGVyIHdvcmtzCi0JCWZTb3VyY2VWaWV3ZXIuY29uZmlndXJlKGZDb25maWcpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGN1cnJlbnQgYWN0aXZlIHRleHQgZWRpdG9yIGlmIHBvc3NpYmxlCi0JICogCi0JICogQHJldHVybiBJVGV4dEVkaXRvcgotCSAqLwotCXByaXZhdGUgSVRleHRFZGl0b3IgZ2V0QWN0aXZlRWRpdG9yKCkgewotCQlJVGV4dEVkaXRvciBlZGl0b3IgPSBudWxsOwotCQlJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJaWYgKGVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVGV4dEVkaXRvcikKLQkJCWVkaXRvciA9IChJVGV4dEVkaXRvcikgZWRpdG9yUGFydDsKLQkJaWYgKGVkaXRvciA9PSBudWxsICYmIGVkaXRvclBhcnQgIT0gbnVsbCkKLQkJCWVkaXRvciA9IChJVGV4dEVkaXRvcikgZWRpdG9yUGFydC5nZXRBZGFwdGVyKElUZXh0RWRpdG9yLmNsYXNzKTsKLQkJcmV0dXJuIGVkaXRvcjsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHVwIHRoZSB2aWV3ZXIgd2l0aCB0aGUgc2FtZSBkb2N1bWVudC9pbnB1dCBhcyB0aGUgZ2l2ZW4gZWRpdG9yCi0JICogCi0JICogQHBhcmFtIElUZXh0RWRpdG9yCi0JICogICAgICAgICAgICBlZGl0b3IgLSB0aGUgZWRpdG9yIHRvIHVzZSAqY2Fubm90IHRvIGJlIG51bGwqCi0JICovCi0JcHJpdmF0ZSB2b2lkIHNldHVwVmlld2VyRm9yRWRpdG9yKElUZXh0RWRpdG9yIGVkaXRvcikgewotCQlzdG9wRm9sbG93U2VsZWN0aW9uKCk7IC8vIGlmIHdhcyBmb2xsb3dpbmcgc2VsZWN0aW9uLCBzdG9wCi0JCUlEb2N1bWVudCBkb2MgPSBlZGl0b3IuZ2V0RG9jdW1lbnRQcm92aWRlcigpLmdldERvY3VtZW50KGVkaXRvci5nZXRFZGl0b3JJbnB1dCgpKTsKLQkJZlNvdXJjZVZpZXdlci5zZXREb2N1bWVudChkb2MpOwotCi0JCS8vIG5lZWQgdG8gcmVjb25maWd1cmUgYWZ0ZXIgc2V0IGRvY3VtZW50IGp1c3Qgc28gaGlnaGxpZ2h0ZXIgd29ya3MKLQkJZlNvdXJjZVZpZXdlci5jb25maWd1cmUobmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkpTUCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBIb29rcyB1cCB0aGUgdmlld2VyIHRvIGZvbGxvdyB0aGUgc2VsZWN0aW9uIG1hZGUgaW4gdGhlIGFjdGl2ZSBlZGl0b3IKLQkgKi8KLQlwcml2YXRlIHZvaWQgZm9sbG93U2VsZWN0aW9uKCkgewotCQlJVGV4dEVkaXRvciBlZGl0b3IgPSBnZXRBY3RpdmVFZGl0b3IoKTsKLQkJaWYgKGVkaXRvciAhPSBudWxsKSB7Ci0JCQlzZXR1cFZpZXdlckZvckVkaXRvcihlZGl0b3IpOwotCQkJaWYgKGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyID09IG51bGwpCi0JCQkJZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIgPSBuZXcgTm9kZVJhbmdlU2VsZWN0aW9uTGlzdGVuZXIoKTsKLQotCQkJZkNvbnRlbnRPdXRsaW5lUGFnZSA9ICgoSUNvbnRlbnRPdXRsaW5lUGFnZSkgZWRpdG9yLmdldEFkYXB0ZXIoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcykpOwotCQkJaWYgKGZDb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgewotCQkJCWZDb250ZW50T3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyKTsKLQotCQkJCWlmICghZkNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKS5pc0VtcHR5KCkgJiYgZkNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0KLQkJCQkJT2JqZWN0W10gbm9kZXMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBmQ29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpKS50b0FycmF5KCk7Ci0JCQkJCUluZGV4ZWRSZWdpb24gc3RhcnROb2RlID0gKEluZGV4ZWRSZWdpb24pIG5vZGVzWzBdOwotCQkJCQlJbmRleGVkUmVnaW9uIGVuZE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgbm9kZXNbbm9kZXMubGVuZ3RoIC0gMV07Ci0KLQkJCQkJaWYgKHN0YXJ0Tm9kZSBpbnN0YW5jZW9mIEF0dHIpCi0JCQkJCQlzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgKChBdHRyKSBzdGFydE5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotCQkJCQlpZiAoZW5kTm9kZSBpbnN0YW5jZW9mIEF0dHIpCi0JCQkJCQllbmROb2RlID0gKEluZGV4ZWRSZWdpb24pICgoQXR0cikgZW5kTm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0KLQkJCQkJaW50IHN0YXJ0ID0gc3RhcnROb2RlLmdldFN0YXJ0T2Zmc2V0KCk7Ci0JCQkJCWludCBlbmQgPSBlbmROb2RlLmdldEVuZE9mZnNldCgpOwotCi0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0VmlzaWJsZVJlZ2lvbihzdGFydCwgZW5kIC0gc3RhcnQpOwotCQkJCQlmU291cmNlVmlld2VyLnNldFNlbGVjdGVkUmFuZ2Uoc3RhcnQsIDApOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIENlYXNlIGZvbGxvd2luZyB0aGUgc2VsZWN0aW9uIG1hZGUgaW4gdGhlIGVkaXRvcgotCSAqLwotCXByaXZhdGUgdm9pZCBzdG9wRm9sbG93U2VsZWN0aW9uKCkgewotCQlpZiAoZkNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7Ci0JCQlmQ29udGVudE91dGxpbmVQYWdlLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lcik7Ci0JCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJZkNvbnRlbnRPdXRsaW5lUGFnZSA9IG51bGw7Ci0JCX0KLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRjNDJkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJydW4iIGJhc2VkaXI9Ii4iPgotCTwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0JPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KLQk8IS0tPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiR7YmFzZWRpcn1cLi5cLi4iLz4tLT4KLQotCTwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBwbHVnaW4tbmFtZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLQk8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzIiAvPgotCTxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotCi0KLQk8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0JPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLQk8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLQk8dGFyZ2V0IG5hbWU9ImluaXQiPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQgZGlyPSIke2VjbGlwc2UtaG9tZX0iIGluY2x1ZGVzPSJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLip4bWwiIC8+Ci0JCTwvZGVsZXRlPgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLQk8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQkJPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+Ci0JCTxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuSlNQVUlUZXN0U3VpdGUiIC8+Ci0JCTwvYW50PgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0JPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotCTwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLQk8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotCQk8IS0tPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4tLT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLQk8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0JPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0JCTxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuKnhtbCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLQkJPC9hbnQ+Ci0JCTwhLS0JCTxlbWFpbFJlc3VsdHMgcmVzdWx0c0ZpbGU9IiR7YnVpbGQtcmVzdWx0cy1ob21lfS8ke3BsdWdpbi1uYW1lfS54bWwiIGFkZHJlc3NsaXN0PSJkYXZpZF93aWxsaWFtc0B1cy5pYm0uY29tIiAvPiAtLT4KLQk8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzLnppcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzLnppcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2QzY2RiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy56aXAKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy8xMTY1MjMvc3RydXRzLWxvZ2ljLnRsZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzLzExNjUyMy9zdHJ1dHMtbG9naWMudGxkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTc1OTczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzLzExNjUyMy9zdHJ1dHMtbG9naWMudGxkCisrKyAvZGV2L251bGwKQEAgLTEsNjQyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLQotCi0KLQotCi08IURPQ1RZUEUgdGFnbGliIFBVQkxJQyAiLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIEpTUCBUYWcgTGlicmFyeSAxLjEvL0VOIiAiaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlL2R0ZHMvd2ViLWpzcHRhZ2xpYnJhcnlfMV8xLmR0ZCI+Ci08dGFnbGliPgotPHRsaWJ2ZXJzaW9uPjEuMDwvdGxpYnZlcnNpb24+Ci08anNwdmVyc2lvbj4xLjE8L2pzcHZlcnNpb24+Ci08c2hvcnRuYW1lPmxvZ2ljPC9zaG9ydG5hbWU+Ci08dXJpPmh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvc3RydXRzL3RhZ3MtbG9naWM8L3VyaT4KLTx0YWc+Ci08bmFtZT5lbXB0eTwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuRW1wdHlUYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5zY29wZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTwvdGFnPgotPHRhZz4KLTxuYW1lPmVxdWFsPC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5FcXVhbFRhZzwvdGFnY2xhc3M+Ci08Ym9keWNvbnRlbnQ+SlNQPC9ib2R5Y29udGVudD4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5jb29raWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+aGVhZGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPm5hbWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cGFyYW1ldGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnByb3BlcnR5PC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnNjb3BlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnZhbHVlPC9uYW1lPgotPHJlcXVpcmVkPnRydWU8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTx0YWc+Ci08bmFtZT5mb3J3YXJkPC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5Gb3J3YXJkVGFnPC90YWdjbGFzcz4KLTxib2R5Y29udGVudD5lbXB0eTwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD50cnVlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+Z3JlYXRlckVxdWFsPC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5HcmVhdGVyRXF1YWxUYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+Y29va2llPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPmhlYWRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnBhcmFtZXRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5zY29wZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT52YWx1ZTwvbmFtZT4KLTxyZXF1aXJlZD50cnVlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+Z3JlYXRlclRoYW48L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLkdyZWF0ZXJUaGFuVGFnPC90YWdjbGFzcz4KLTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotPGF0dHJpYnV0ZT4KLTxuYW1lPmNvb2tpZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5oZWFkZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wYXJhbWV0ZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+c2NvcGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+dmFsdWU8L25hbWU+Ci08cmVxdWlyZWQ+dHJ1ZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTwvdGFnPgotPHRhZz4KLTxuYW1lPml0ZXJhdGU8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLkl0ZXJhdGVUYWc8L3RhZ2NsYXNzPgotPHRlaWNsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5JdGVyYXRlVGVpPC90ZWljbGFzcz4KLTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotPGF0dHJpYnV0ZT4KLTxuYW1lPmNvbGxlY3Rpb248L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+aWQ8L25hbWU+Ci08cmVxdWlyZWQ+dHJ1ZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+ZmFsc2U8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+aW5kZXhJZDwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+ZmFsc2U8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+bGVuZ3RoPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPm5hbWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+b2Zmc2V0PC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnByb3BlcnR5PC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnNjb3BlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnR5cGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTx0YWc+Ci08bmFtZT5sZXNzRXF1YWw8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLkxlc3NFcXVhbFRhZzwvdGFnY2xhc3M+Ci08Ym9keWNvbnRlbnQ+SlNQPC9ib2R5Y29udGVudD4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5jb29raWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+aGVhZGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPm5hbWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cGFyYW1ldGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnByb3BlcnR5PC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnNjb3BlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnZhbHVlPC9uYW1lPgotPHJlcXVpcmVkPnRydWU8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTx0YWc+Ci08bmFtZT5sZXNzVGhhbjwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuTGVzc1RoYW5UYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+Y29va2llPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPmhlYWRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnBhcmFtZXRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5zY29wZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT52YWx1ZTwvbmFtZT4KLTxyZXF1aXJlZD50cnVlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+bWF0Y2g8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLk1hdGNoVGFnPC90YWdjbGFzcz4KLTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotPGF0dHJpYnV0ZT4KLTxuYW1lPmNvb2tpZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5oZWFkZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+bG9jYXRpb248L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wYXJhbWV0ZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+c2NvcGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+dmFsdWU8L25hbWU+Ci08cmVxdWlyZWQ+dHJ1ZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTwvdGFnPgotPHRhZz4KLTxuYW1lPm1lc3NhZ2VzTm90UHJlc2VudDwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuTWVzc2FnZXNOb3RQcmVzZW50VGFnPC90YWdjbGFzcz4KLTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotPGF0dHJpYnV0ZT4KLTxuYW1lPm5hbWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+bWVzc2FnZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTwvdGFnPgotPHRhZz4KLTxuYW1lPm1lc3NhZ2VzUHJlc2VudDwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuTWVzc2FnZXNQcmVzZW50VGFnPC90YWdjbGFzcz4KLTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotPGF0dHJpYnV0ZT4KLTxuYW1lPm5hbWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+bWVzc2FnZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTwvdGFnPgotPHRhZz4KLTxuYW1lPm5vdEVtcHR5PC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5Ob3RFbXB0eVRhZzwvdGFnY2xhc3M+Ci08Ym9keWNvbnRlbnQ+SlNQPC9ib2R5Y29udGVudD4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnByb3BlcnR5PC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnNjb3BlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+bm90RXF1YWw8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLk5vdEVxdWFsVGFnPC90YWdjbGFzcz4KLTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotPGF0dHJpYnV0ZT4KLTxuYW1lPmNvb2tpZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5oZWFkZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wYXJhbWV0ZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+c2NvcGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+dmFsdWU8L25hbWU+Ci08cmVxdWlyZWQ+dHJ1ZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTwvdGFnPgotPHRhZz4KLTxuYW1lPm5vdE1hdGNoPC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5Ob3RNYXRjaFRhZzwvdGFnY2xhc3M+Ci08Ym9keWNvbnRlbnQ+SlNQPC9ib2R5Y29udGVudD4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5jb29raWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+aGVhZGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPmxvY2F0aW9uPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPm5hbWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cGFyYW1ldGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnByb3BlcnR5PC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnNjb3BlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnZhbHVlPC9uYW1lPgotPHJlcXVpcmVkPnRydWU8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTx0YWc+Ci08bmFtZT5ub3RQcmVzZW50PC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5Ob3RQcmVzZW50VGFnPC90YWdjbGFzcz4KLTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotPGF0dHJpYnV0ZT4KLTxuYW1lPmNvb2tpZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5oZWFkZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wYXJhbWV0ZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cm9sZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5zY29wZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT51c2VyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+cHJlc2VudDwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuUHJlc2VudFRhZzwvdGFnY2xhc3M+Ci08Ym9keWNvbnRlbnQ+SlNQPC9ib2R5Y29udGVudD4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5jb29raWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+aGVhZGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPm5hbWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cGFyYW1ldGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnByb3BlcnR5PC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnJvbGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+c2NvcGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+dXNlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTwvdGFnPgotPHRhZz4KLTxuYW1lPnJlZGlyZWN0PC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5SZWRpcmVjdFRhZzwvdGFnY2xhc3M+Ci08YXR0cmlidXRlPgotPG5hbWU+YW5jaG9yPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPmZvcndhcmQ8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+aHJlZjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnBhZ2U8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cGFyYW1JZDwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wYXJhbU5hbWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cGFyYW1Qcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wYXJhbVNjb3BlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnByb3BlcnR5PC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnNjb3BlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnRyYW5zYWN0aW9uPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08L3RhZ2xpYj4KLQotCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzLzExNjUyMy9zdHJ1dHMuamFyIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvMTE2NTIzL3N0cnV0cy5qYXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiMzJmOWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvMTE2NTIzL3N0cnV0cy5qYXIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMS93bWxfMV8xLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0xL3dtbF8xXzEuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTQ1MjZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0xL3dtbF8xXzEuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMzUzICswLDAgQEAKLTwhLS0NCi1XaXJlbGVzcyBNYXJrdXAgTGFuZ3VhZ2UgKFdNTCkgRG9jdW1lbnQgVHlwZSBEZWZpbml0aW9uLg0KLQ0KLUNvcHlyaWdodCBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuLCAxOTk4LDE5OTkuDQotICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICANCi0NCi1XTUwgaXMgYW4gWE1MIGxhbmd1YWdlLiAgVHlwaWNhbCB1c2FnZToNCi0gICA8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi0gICA8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiINCi0gICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+DQotICAgPHdtbD4NCi0gICAuLi4NCi0gICA8L3dtbD4NCi0NCi1UZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyANCi1BcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIHdlYiBzaXRlIGF0DQotaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvZG9jcy9jb3B5cmlnaHQuaHRtLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgbGVuZ3RoICAiQ0RBVEEiPiAgICA8IS0tIFswLTldKyBmb3IgcGl4ZWxzIG9yIFswLTldKyIlIiBmb3INCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlIGxlbmd0aCAtLT4NCi08IUVOVElUWSAlIHZkYXRhICAgIkNEQVRBIj4gICAgPCEtLSBhdHRyaWJ1dGUgdmFsdWUgcG9zc2libHkgY29udGFpbmluZw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHJlZmVyZW5jZXMgLS0+DQotPCFFTlRJVFkgJSBIUkVGICAgICIldmRhdGE7Ij4gIDwhLS0gVVJJLCBVUkwgb3IgVVJOIGRlc2lnbmF0aW5nIGEgaHlwZXJ0ZXh0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS4gTWF5IGNvbnRhaW4gdmFyaWFibGUgcmVmZXJlbmNlcyAtLT4NCi08IUVOVElUWSAlIGJvb2xlYW4JIih0cnVlfGZhbHNlKSI+DQotPCFFTlRJVFkgJSBudW1iZXIgICJOTVRPS0VOIj4gIDwhLS0gYSBudW1iZXIsIHdpdGggZm9ybWF0IFswLTldKyAtLT4NCi08IUVOVElUWSAlIGNvcmVhdHRycyAgImlkICAgIElEICAgICAjSU1QTElFRCANCi0gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIENEQVRBICAjSU1QTElFRCI+DQotDQotPCFFTlRJVFkgJSBlbXBoICAgICJlbSB8IHN0cm9uZyB8IGIgfCBpIHwgdSB8IGJpZyB8IHNtYWxsIj4NCi08IUVOVElUWSAlIGxheW91dCAgImJyIj4NCi0NCi08IUVOVElUWSAlIHRleHQgICAgICIjUENEQVRBIHwgJWVtcGg7Ij4NCi0NCi08IS0tIGZsb3cgY292ZXJzICJjYXJkLWxldmVsIiBlbGVtZW50cywgc3VjaCBhcyB0ZXh0IGFuZCBpbWFnZXMgLS0+DQotPCFFTlRJVFkgJSBmbG93ICAgICAiJXRleHQ7IHwgJWxheW91dDsgfCBpbWcgfCBhbmNob3IgfCBhIHwgdGFibGUiPg0KLQ0KLTwhLS0gVGFzayB0eXBlcyAtLT4NCi08IUVOVElUWSAlIHRhc2sgICAiZ28gfCBwcmV2IHwgbm9vcCB8IHJlZnJlc2giPg0KLQ0KLTwhLS0gTmF2aWdhdGlvbiBhbmQgZXZlbnQgZWxlbWVudHMgLS0+DQotPCFFTlRJVFkgJSBuYXZlbG10cyAiZG8gfCBvbmV2ZW50Ij4NCi0NCi08IS0tPT09PT09PT09PT09PT09PSBEZWNrcyBhbmQgQ2FyZHMgPT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRUxFTUVOVCB3bWwgKCBoZWFkPywgdGVtcGxhdGU/LCBjYXJkKyApPg0KLTwhQVRUTElTVCB3bWwNCi0gIHhtbDpsYW5nICAgICAgICBOTVRPS0VOICAgICAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IS0tIGNhcmQgaW50cmluc2ljIGV2ZW50cyAtLT4NCi08IUVOVElUWSAlIGNhcmRldg0KLSAib25lbnRlcmZvcndhcmQgICVIUkVGOyAgICAgICAgICAjSU1QTElFRA0KLSAgb25lbnRlcmJhY2t3YXJkICVIUkVGOyAgICAgICAgICAjSU1QTElFRA0KLSAgb250aW1lciAgICAgICAgICVIUkVGOyAgICAgICAgICAjSU1QTElFRCINCi0gID4NCi0NCi08IS0tIGNhcmQgZmllbGQgdHlwZXMgLS0+DQotPCFFTlRJVFkgJSBmaWVsZHMgICIlZmxvdzsgfCBpbnB1dCB8IHNlbGVjdCB8IGZpZWxkc2V0Ij4NCi0NCi08IUVMRU1FTlQgY2FyZCAob25ldmVudCosIHRpbWVyPywgKGRvIHwgcCkqKT4NCi08IUFUVExJU1QgY2FyZA0KLSAgdGl0bGUgICAgICAgICAgICV2ZGF0YTsgICAgICAgI0lNUExJRUQNCi0gIG5ld2NvbnRleHQgICAgICAlYm9vbGVhbjsgICAgICJmYWxzZSINCi0gIG9yZGVyZWQgICAgICAgICAlYm9vbGVhbjsgICAgICJ0cnVlIg0KLSAgeG1sOmxhbmcgICAgICAgIE5NVE9LRU4gICAgICAgI0lNUExJRUQNCi0gICVjYXJkZXY7DQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09IEV2ZW50IEJpbmRpbmdzID09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVMRU1FTlQgZG8gKCV0YXNrOyk+DQotPCFBVFRMSVNUIGRvDQotICB0eXBlICAgICAgICAgQ0RBVEEgICAgICAgI1JFUVVJUkVEDQotICBsYWJlbCAgICAgICAgJXZkYXRhOyAgICAgI0lNUExJRUQNCi0gIG5hbWUgICAgICAgICBOTVRPS0VOICAgICAjSU1QTElFRA0KLSAgb3B0aW9uYWwgICAgICVib29sZWFuOyAgICJmYWxzZSINCi0gIHhtbDpsYW5nICAgICBOTVRPS0VOICAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgb25ldmVudCAoJXRhc2s7KT4NCi08IUFUVExJU1Qgb25ldmVudA0KLSAgdHlwZSAgICAgICAgIENEQVRBICAgICAgICNSRVFVSVJFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PSBEZWNrLWxldmVsIGRlY2xhcmF0aW9ucyA9PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTEVNRU5UIGhlYWQgKCBhY2Nlc3MgfCBtZXRhICkrPg0KLTwhQVRUTElTVCBoZWFkDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCB0ZW1wbGF0ZSAoJW5hdmVsbXRzOykqPg0KLTwhQVRUTElTVCB0ZW1wbGF0ZQ0KLSAgJWNhcmRldjsNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIGFjY2VzcyBFTVBUWT4NCi08IUFUVExJU1QgYWNjZXNzDQotICBkb21haW4gICAgICAgQ0RBVEEgICAgICAgI0lNUExJRUQNCi0gIHBhdGggICAgICAgICBDREFUQSAgICAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgbWV0YSBFTVBUWT4NCi08IUFUVExJU1QgbWV0YQ0KLSAgaHR0cC1lcXVpdiAgICAgQ0RBVEEgICAgICAjSU1QTElFRA0KLSAgbmFtZSAgICAgICAgICAgQ0RBVEEgICAgICAjSU1QTElFRA0KLSAgZm9ydWEgICAgICAgICAgJWJvb2xlYW47ICAjSU1QTElFRA0KLSAgY29udGVudCAgICAgICAgQ0RBVEEgICAgICAjUkVRVUlSRUQNCi0gIHNjaGVtZSAgICAgICAgIENEQVRBICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT0gVGFza3MgPT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRUxFTUVOVCBnbyAocG9zdGZpZWxkIHwgc2V0dmFyKSo+DQotPCFBVFRMSVNUIGdvDQotICBocmVmICAgICAgICAgICAgJUhSRUY7ICAgICAgICAgICAjUkVRVUlSRUQNCi0gIHNlbmRyZWZlcmVyICAgICAlYm9vbGVhbjsgICAgICAgImZhbHNlIg0KLSAgbWV0aG9kICAgICAgICAgIChwb3N0fGdldCkgICAgICAiZ2V0Ig0KLSAgYWNjZXB0LWNoYXJzZXQgIENEQVRBICAgICAgICAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgcHJldiAoc2V0dmFyKSo+DQotPCFBVFRMSVNUIHByZXYNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIHJlZnJlc2ggKHNldHZhcikqPg0KLTwhQVRUTElTVCByZWZyZXNoDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBub29wIEVNUFRZPg0KLTwhQVRUTElTVCBub29wDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09IHBvc3RmaWVsZCA9PT09PT09PT09PT09PT09LS0+DQotIA0KLTwhRUxFTUVOVCBwb3N0ZmllbGQgRU1QVFk+DQotPCFBVFRMSVNUIHBvc3RmaWVsZA0KLSAgbmFtZSAgICAgICAgICV2ZGF0YTsgICAgICAgICAgICNSRVFVSVJFRA0KLSAgdmFsdWUgICAgICAgICV2ZGF0YTsgICAgICAgICAgICNSRVFVSVJFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PSB2YXJpYWJsZXMgPT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRUxFTUVOVCBzZXR2YXIgRU1QVFk+DQotPCFBVFRMSVNUIHNldHZhcg0KLSAgbmFtZSAgICAgICAgICV2ZGF0YTsgICAgICAgICAgICNSRVFVSVJFRA0KLSAgdmFsdWUgICAgICAgICV2ZGF0YTsgICAgICAgICAgICNSRVFVSVJFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PSBDYXJkIEZpZWxkcyA9PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTEVNRU5UIHNlbGVjdCAob3B0Z3JvdXB8b3B0aW9uKSs+DQotPCFBVFRMSVNUIHNlbGVjdA0KLSAgdGl0bGUgICAgICAgICV2ZGF0YTsgICAgICAgICAgICNJTVBMSUVEDQotICBuYW1lICAgICAgICAgTk1UT0tFTiAgICAgICAgICAgI0lNUExJRUQNCi0gIHZhbHVlICAgICAgICAldmRhdGE7ICAgICAgICAgICAjSU1QTElFRA0KLSAgaW5hbWUgICAgICAgIE5NVE9LRU4gICAgICAgICAgICNJTVBMSUVEDQotICBpdmFsdWUgICAgICAgJXZkYXRhOyAgICAgICAgICAgI0lNUExJRUQNCi0gIG11bHRpcGxlICAgICAlYm9vbGVhbjsgICAgICAgICAiZmFsc2UiDQotICB0YWJpbmRleCAgICAgJW51bWJlcjsgICAgICAgICAgI0lNUExJRUQNCi0gIHhtbDpsYW5nICAgICBOTVRPS0VOICAgICAgICAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgb3B0Z3JvdXAgKG9wdGdyb3VwfG9wdGlvbikrID4NCi08IUFUVExJU1Qgb3B0Z3JvdXANCi0gIHRpdGxlICAgICAgJXZkYXRhOyAgICAjSU1QTElFRA0KLSAgeG1sOmxhbmcgICBOTVRPS0VOICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBvcHRpb24gKCNQQ0RBVEEgfCBvbmV2ZW50KSo+DQotPCFBVFRMSVNUIG9wdGlvbg0KLSAgdmFsdWUgICAgICAldmRhdGE7ICAgICNJTVBMSUVEDQotICB0aXRsZSAgICAgICV2ZGF0YTsgICAgI0lNUExJRUQNCi0gIG9ucGljayAgICAgJUhSRUY7ICAgICAjSU1QTElFRA0KLSAgeG1sOmxhbmcgICBOTVRPS0VOICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBpbnB1dCBFTVBUWT4NCi08IUFUVExJU1QgaW5wdXQNCi0gIG5hbWUgICAgICAgTk1UT0tFTiAgICAgICAgICAgI1JFUVVJUkVEDQotICB0eXBlICAgICAgICh0ZXh0fHBhc3N3b3JkKSAgICJ0ZXh0Ig0KLSAgdmFsdWUgICAgICAldmRhdGE7ICAgICAgICAgICAjSU1QTElFRA0KLSAgZm9ybWF0ICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgZW1wdHlvayAgICAlYm9vbGVhbjsgICAgICAgICAiZmFsc2UiDQotICBzaXplICAgICAgICVudW1iZXI7ICAgICAgICAgICNJTVBMSUVEDQotICBtYXhsZW5ndGggICVudW1iZXI7ICAgICAgICAgICNJTVBMSUVEDQotICB0YWJpbmRleCAgICVudW1iZXI7ICAgICAgICAgICNJTVBMSUVEDQotICB0aXRsZSAgICAgICV2ZGF0YTsgICAgICAgICAgICNJTVBMSUVEDQotICB4bWw6bGFuZyAgIE5NVE9LRU4gICAgICAgICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBmaWVsZHNldCAoJWZpZWxkczsgfCBkbykqID4NCi08IUFUVExJU1QgZmllbGRzZXQNCi0gIHRpdGxlICAgICAgICAgICAldmRhdGE7ICAgICAgI0lNUExJRUQNCi0gIHhtbDpsYW5nICAgICAgICBOTVRPS0VOICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIHRpbWVyIEVNUFRZPg0KLTwhQVRUTElTVCB0aW1lcg0KLSAgbmFtZSAgICAgICBOTVRPS0VOICAgICAgICAgICAjSU1QTElFRA0KLSAgdmFsdWUgICAgICAldmRhdGE7ICAgICAgICAgICAjUkVRVUlSRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT0gSW1hZ2VzID09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVOVElUWSAlIElBbGlnbiAiKHRvcHxtaWRkbGV8Ym90dG9tKSIgPg0KLQ0KLTwhRUxFTUVOVCBpbWcgRU1QVFk+DQotPCFBVFRMSVNUIGltZw0KLSAgYWx0ICAgICAgICAldmRhdGE7ICAgICAgI1JFUVVJUkVEDQotICBzcmMgICAgICAgICVIUkVGOyAgICAgICAjUkVRVUlSRUQNCi0gIGxvY2Fsc3JjICAgJXZkYXRhOyAgICAgICNJTVBMSUVEDQotICB2c3BhY2UgICAgICVsZW5ndGg7ICAgICAiMCINCi0gIGhzcGFjZSAgICAgJWxlbmd0aDsgICAgICIwIg0KLSAgYWxpZ24gICAgICAlSUFsaWduOyAgICAgImJvdHRvbSINCi0gIGhlaWdodCAgICAgJWxlbmd0aDsgICAgICNJTVBMSUVEDQotICB3aWR0aCAgICAgICVsZW5ndGg7ICAgICAjSU1QTElFRA0KLSAgeG1sOmxhbmcgICBOTVRPS0VOICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT0gQW5jaG9yID09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVMRU1FTlQgYW5jaG9yICggI1BDREFUQSB8IGJyIHwgaW1nIHwgZ28gfCBwcmV2IHwgcmVmcmVzaCApKj4NCi08IUFUVExJU1QgYW5jaG9yDQotICB0aXRsZSAgICAgICAgJXZkYXRhOyAgICAgICNJTVBMSUVEDQotICB4bWw6bGFuZyAgICAgTk1UT0tFTiAgICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBhICggI1BDREFUQSB8IGJyIHwgaW1nICkqPg0KLTwhQVRUTElTVCBhDQotICBocmVmICAgICAgICAgJUhSRUY7ICAgICAgICNSRVFVSVJFRA0KLSAgdGl0bGUgICAgICAgICV2ZGF0YTsgICAgICAjSU1QTElFRA0KLSAgeG1sOmxhbmcgICAgIE5NVE9LRU4gICAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PSBUYWJsZXMgPT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRUxFTUVOVCB0YWJsZSAodHIpKz4NCi08IUFUVExJU1QgdGFibGUNCi0gIHRpdGxlICAgICAgICV2ZGF0YTsgICAgI0lNUExJRUQNCi0gIGFsaWduICAgICAgIENEQVRBICAgICAgI0lNUExJRUQNCi0gIGNvbHVtbnMgICAgICVudW1iZXI7ICAgI1JFUVVJUkVEDQotICB4bWw6bGFuZyAgICBOTVRPS0VOICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCB0ciAodGQpKz4NCi08IUFUVExJU1QgdHINCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIHRkICggJXRleHQ7IHwgJWxheW91dDsgfCBpbWcgfCBhbmNob3IgfCBhICkqPg0KLTwhQVRUTElTVCB0ZA0KLSAgeG1sOmxhbmcgICAgICAgIE5NVE9LRU4gICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT0gVGV4dCBsYXlvdXQgYW5kIGxpbmUgYnJlYWtzID09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVMRU1FTlQgZW0gICAgICglZmxvdzspKj4NCi08IUFUVExJU1QgZW0NCi0gIHhtbDpsYW5nICAgICAgICBOTVRPS0VOICAgICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBzdHJvbmcgKCVmbG93OykqPg0KLTwhQVRUTElTVCBzdHJvbmcNCi0gIHhtbDpsYW5nICAgICAgICBOTVRPS0VOICAgICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBiICAgICAgKCVmbG93OykqPg0KLTwhQVRUTElTVCBiDQotICB4bWw6bGFuZyAgICAgICAgTk1UT0tFTiAgICAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgaSAgICAgICglZmxvdzspKj4NCi08IUFUVExJU1QgaQ0KLSAgeG1sOmxhbmcgICAgICAgIE5NVE9LRU4gICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIHUgICAgICAoJWZsb3c7KSo+DQotPCFBVFRMSVNUIHUNCi0gIHhtbDpsYW5nICAgICAgICBOTVRPS0VOICAgICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBiaWcgICAgKCVmbG93OykqPg0KLTwhQVRUTElTVCBiaWcNCi0gIHhtbDpsYW5nICAgICAgICBOTVRPS0VOICAgICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBzbWFsbCAgKCVmbG93OykqPg0KLTwhQVRUTElTVCBzbWFsbA0KLSAgeG1sOmxhbmcgICAgICAgIE5NVE9LRU4gICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTlRJVFkgJSBUQWxpZ24gIihsZWZ0fHJpZ2h0fGNlbnRlcikiPg0KLTwhRU5USVRZICUgV3JhcE1vZGUgIih3cmFwfG5vd3JhcCkiID4NCi08IUVMRU1FTlQgcCAoJWZpZWxkczsgfCBkbykqPg0KLTwhQVRUTElTVCBwDQotICBhbGlnbiAgICAgICAlVEFsaWduOyAgICAgImxlZnQiDQotICBtb2RlICAgICAgICAlV3JhcE1vZGU7ICAgI0lNUExJRUQNCi0gIHhtbDpsYW5nICAgIE5NVE9LRU4gICAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgYnIgRU1QVFk+DQotPCFBVFRMSVNUIGJyDQotICB4bWw6bGFuZyAgICAgICAgTk1UT0tFTiAgICAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVOVElUWSBxdW90ICAiJiMzNDsiPiAgICAgPCEtLSBxdW90YXRpb24gbWFyayAtLT4NCi08IUVOVElUWSBhbXAgICAiJiMzODsjMzg7Ij4gPCEtLSBhbXBlcnNhbmQgLS0+DQotPCFFTlRJVFkgYXBvcyAgIiYjMzk7Ij4gICAgIDwhLS0gYXBvc3Ryb3BoZSAtLT4NCi08IUVOVElUWSBsdCAgICAiJiMzODsjNjA7Ij4gPCEtLSBsZXNzIHRoYW4gLS0+DQotPCFFTlRJVFkgZ3QgICAgIiYjNjI7Ij4gICAgIDwhLS0gZ3JlYXRlciB0aGFuIC0tPg0KLTwhRU5USVRZIG5ic3AgICImIzE2MDsiPiAgICA8IS0tIG5vbi1icmVha2luZyBzcGFjZSAtLT4NCi08IUVOVElUWSBzaHkgICAiJiMxNzM7Ij4gICAgPCEtLSBzb2Z0IGh5cGhlbiAoZGlzY3JldGlvbmFyeSBoeXBoZW4pIC0tPg0KLQ0KLTwhLS0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OCwxOTk5Lg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotLS0+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTItMS9jaGFubmVsMTIuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTItMS9jaGFubmVsMTIuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjIxMDNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yLTEvY2hhbm5lbDEyLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTwhLS0NCi0gICAgICBUaGlzIERURCBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgaWRlbnRpZmllcjoNCi0gICAgIAkiLS8vV0FQRk9SVU0vL0RURCBDSEFOTkVMIDEuMi8vRU4iDQotLS0+DQotDQotPCFFTlRJVFkgJSBCb29sZWFuICIoIHRydWUgfCBmYWxzZSApIj4NCi0NCi08IS0tIGEgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIC0tPg0KLTwhRU5USVRZICUgVVJJICJDREFUQSIgPg0KLQ0KLTwhLS0gb25lIG9yIG1vcmUgZGlnaXRzIChOVU1CRVIpIC0tPg0KLTwhRU5USVRZICUgTnVtYmVyICJDREFUQSIgPiAgDQotDQotPCEtLSBDaGFubmVsIEV2ZW50cyAtLT4NCi08IUVOVElUWSAlIENoYW5uZWxFdmVudC5hdHRyaWJzDQotCSJzdWNjZXNzCQklVVJJOwkJI0lNUExJRUQNCi0JIGZhaWx1cmUJCSVVUkk7CQkjSU1QTElFRCINCi0+DQotDQotPCFFTEVNRU5UIGNoYW5uZWwgKHRpdGxlICwgYWJzdHJhY3Q/ICwgcmVzb3VyY2UqICkgPg0KLTwhQVRUTElTVCBjaGFubmVsDQotCW1heHNwYWNlCQklTnVtYmVyOwkjUkVRVUlSRUQgDQotCWJhc2UJCQklVVJJOwkJI0lNUExJRUQNCi0JZXZlbnRpZAkJCUNEQVRBCQkjSU1QTElFRA0KLQljaGFubmVsaWQJCUNEQVRBCQkjUkVRVUlSRUQgDQotCXVzZXJhY2Nlc3NpYmxlIAkJJUJvb2xlYW47CSJmYWxzZSINCi0JJUNoYW5uZWxFdmVudC5hdHRyaWJzOw0KLT4NCi0NCi08IUVMRU1FTlQgdGl0bGUgKCNQQ0RBVEEpPg0KLTwhRUxFTUVOVCBhYnN0cmFjdCAoI1BDREFUQSk+DQotDQotPCFFTEVNRU5UIHJlc291cmNlIEVNUFRZPg0KLTwhQVRUTElTVCByZXNvdXJjZQ0KLQlocmVmICAgICAgCSVVUkk7CSAgIAkjUkVRVUlSRUQNCi0JbGFzdG1vZAkJJU51bWJlcjsJI0lNUExJRUQNCi0JZXRhZwkJTk1UT0tFTgkJI0lNUExJRUQNCi0JbWQ1CQlOTVRPS0VOCQkjSU1QTElFRA0KLT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi0xL3BhcF8xLjAuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTItMS9wYXBfMS4wLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdlZDBkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi0xL3BhcF8xLjAuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMjE5ICswLDAgQEAKLTwhLS0NCi1QdXNoIEFjY2VzcyBQcm90b2NvbCAoUEFQKSB2MS4wIERvY3VtZW50IFR5cGUgRGVmaW5pdGlvbi4NCi0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OC0yMDAxLg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotDQotUEFQIGlzIGFuIFhNTCBsYW5ndWFnZS4gVHlwaWNhbCB1c2FnZToNCi0gICA8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi0gICA8IURPQ1RZUEUgcGFwIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBQQVAgMS4wLy9FTiINCi0gICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC9wYXBfMS4wLmR0ZCI+DQotICAgPHBhcD4NCi0gICAgICAuLi4NCi0gICA8L3BhcD4NCi0NCi1UZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyANCi1BcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIHdlYiBzaXRlIGF0DQotaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvZG9jcy9jb3B5cmlnaHQuaHRtLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgRGF0ZXRpbWUgIkNEQVRBIj4gICAgIDwhLS0gSVNPIGRhdGUgYW5kIHRpbWUgLS0+DQotPCFFTlRJVFkgJSBTdGF0ZSAgIihyZWplY3RlZCB8IHBlbmRpbmcgDQotICAgICAgICAgICAgICAgICAgfCBkZWxpdmVyZWQgfCB1bmRlbGl2ZXJhYmxlIA0KLSAgICAgICAgICAgICAgICAgIHwgZXhwaXJlZCB8IGFib3J0ZWQgDQotICAgICAgICAgICAgICAgICAgfCB0aW1lb3V0IHwgY2FuY2VsbGVkIHwgdW5rbm93bikiPiAgICAgICAgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBQUEcgTWVzc2FnZSBTdGF0ZSAtLT4NCi0NCi0NCi08IUVMRU1FTlQgcGFwICAgICAgICAgICAgICAgICAgICAoIHB1c2gtbWVzc2FnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHVzaC1yZXNwb25zZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FuY2VsLW1lc3NhZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhbmNlbC1yZXNwb25zZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVzdWx0bm90aWZpY2F0aW9uLW1lc3NhZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlc3VsdG5vdGlmaWNhdGlvbi1yZXNwb25zZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3RhdHVzcXVlcnktbWVzc2FnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3RhdHVzcXVlcnktcmVzcG9uc2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjcS1tZXNzYWdlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY3EtcmVzcG9uc2UgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYWRtZXNzYWdlLXJlc3BvbnNlKSA+DQotPCFBVFRMSVNUIHBhcA0KLSAgICAgICAgICBwcm9kdWN0LW5hbWUgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBwdXNoIHN1Ym1pc3Npb24gbWVzc2FnZSAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBQdXNoIEluaXRpYXRvciB0byB0aGUgcHVzaCBwcm94eSBnYXRld2F5LS0+DQotDQotPCFFTEVNRU5UIHB1c2gtbWVzc2FnZSAoIGFkZHJlc3MrLCBxdWFsaXR5LW9mLXNlcnZpY2U/ICkgPg0KLTwhQVRUTElTVCBwdXNoLW1lc3NhZ2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGRlbGl2ZXItYmVmb3JlLXRpbWVzdGFtcCAgICVEYXRldGltZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIGRlbGl2ZXItYWZ0ZXItdGltZXN0YW1wICAgICVEYXRldGltZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHNvdXJjZS1yZWZlcmVuY2UgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHBwZy1ub3RpZnktcmVxdWVzdGVkLXRvICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEIA0KLSAgICAgICAgICBwcm9ncmVzcy1ub3Rlcy1yZXF1ZXN0ZWQgICAoIHRydWUgfCBmYWxzZSApICAiZmFsc2UiDQotPg0KLQ0KLTwhRUxFTUVOVCBhZGRyZXNzIEVNUFRZID4NCi08IUFUVExJU1QgYWRkcmVzcw0KLSAgICAgICAgICBhZGRyZXNzLXZhbHVlICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRCANCi0+DQotDQotPCFFTEVNRU5UIHF1YWxpdHktb2Ytc2VydmljZSBFTVBUWSA+DQotPCFBVFRMSVNUIHF1YWxpdHktb2Ytc2VydmljZQ0KLSAgICAgICAgICBwcmlvcml0eSAgICAgICAgICAgICAgICggaGlnaCB8IG1lZGl1bSB8IGxvdyApICAgICAgICAibWVkaXVtIg0KLSAgICAgICAgICBkZWxpdmVyeS1tZXRob2QgICAgICAgICggY29uZmlybWVkIHwgcHJlZmVyY29uZmlybWVkIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdW5jb25maXJtZWQgfCBub3RzcGVjaWZpZWQgKSAibm90c3BlY2lmaWVkIg0KLSAgICAgICAgICBuZXR3b3JrICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBuZXR3b3JrLXJlcXVpcmVkICAgICAgICggdHJ1ZSB8IGZhbHNlICkgICAgICAgICAgICAgICAiZmFsc2UiDQotICAgICAgICAgIGJlYXJlciAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIGJlYXJlci1yZXF1aXJlZCAgICAgICAgKCB0cnVlIHwgZmFsc2UgKSAgICAgICAgICAgICAgICJmYWxzZSINCi0+DQotDQotDQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheSB0byB0aGUgUHVzaCBJbml0aWF0b3ItLT4NCi0NCi08IUVMRU1FTlQgcHVzaC1yZXNwb25zZSAoIHByb2dyZXNzLW5vdGUqLCByZXNwb25zZS1yZXN1bHQgKSA+DQotPCFBVFRMSVNUIHB1c2gtcmVzcG9uc2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgc2VuZGVyLWFkZHJlc3MgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBzZW5kZXItbmFtZSAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHJlcGx5LXRpbWUgICAgICAgICAgICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0+DQotDQotPCFFTEVNRU5UIHByb2dyZXNzLW5vdGUgRU1QVFkgPg0KLTwhQVRUTElTVCBwcm9ncmVzcy1ub3RlDQotICAgICAgICAgIHN0YWdlICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIG5vdGUgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgdGltZSAgICAgICAgICAgICAgICAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi08IUVMRU1FTlQgcmVzcG9uc2UtcmVzdWx0IEVNUFRZID4NCi08IUFUVExJU1QgcmVzcG9uc2UtcmVzdWx0DQotICAgICAgICAgIGNvZGUgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGRlc2MgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotDQotDQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIERlY2xhcmF0aW9uIG9mIGNhbmNlbCBvcGVyYXRpb24gICAgICAgICAgIC0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIFB1c2ggSW5pdGlhdG9yIHRvIHRoZSBwdXNoIHByb3h5IGdhdGV3YXktLT4NCi0NCi08IUVMRU1FTlQgY2FuY2VsLW1lc3NhZ2UgKCBhZGRyZXNzKiApID4NCi08IUFUVExJU1QgY2FuY2VsLW1lc3NhZ2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0+DQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheSB0byB0aGUgUHVzaCBJbml0aWF0b3ItLT4NCi0NCi08IUVMRU1FTlQgY2FuY2VsLXJlc3BvbnNlICggY2FuY2VsLXJlc3VsdCsgKSA+DQotPCFBVFRMSVNUIGNhbmNlbC1yZXNwb25zZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLT4NCi0NCi08IUVMRU1FTlQgY2FuY2VsLXJlc3VsdCAoIGFkZHJlc3MqICkgPg0KLTwhQVRUTElTVCBjYW5jZWwtcmVzdWx0DQotICAgICAgICAgIGNvZGUgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGRlc2MgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotDQotDQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIERlY2xhcmF0aW9uIG9mIG5vdGlmeSByZXN1bHQgb3BlcmF0aW9uICAgIC0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheSB0byB0aGUgUHVzaCBJbml0aWF0b3ItLT4NCi0NCi08IUVMRU1FTlQgcmVzdWx0bm90aWZpY2F0aW9uLW1lc3NhZ2UgKCBhZGRyZXNzLCBxdWFsaXR5LW9mLXNlcnZpY2U/ICkgPg0KLTwhQVRUTElTVCByZXN1bHRub3RpZmljYXRpb24tbWVzc2FnZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBzZW5kZXItYWRkcmVzcyAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHNlbmRlci1uYW1lICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgcmVjZWl2ZWQtdGltZSAgICAgICAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBldmVudC10aW1lICAgICAgICAgICAgICVEYXRldGltZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIG1lc3NhZ2Utc3RhdGUgICAgICAgICAgJVN0YXRlOyAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGNvZGUgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGRlc2MgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIFB1c2ggSW5pdGlhdG9yIHRvIHRoZSBwdXNoIHByb3h5IGdhdGV3YXktLT4NCi0NCi08IUVMRU1FTlQgcmVzdWx0bm90aWZpY2F0aW9uLXJlc3BvbnNlICggYWRkcmVzcyApID4NCi08IUFUVExJU1QgcmVzdWx0bm90aWZpY2F0aW9uLXJlc3BvbnNlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGNvZGUgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGRlc2MgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotDQotDQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIERlY2xhcmF0aW9uIG9mIHN0YXR1c3F1ZXJ5IG9wZXJhdGlvbiAgICAgIC0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIFB1c2ggSW5pdGlhdG9yIHRvIHRoZSBwdXNoIHByb3h5IGdhdGV3YXktLT4NCi0NCi08IUVMRU1FTlQgc3RhdHVzcXVlcnktbWVzc2FnZSAoIGFkZHJlc3MqICkgPg0KLTwhQVRUTElTVCBzdGF0dXNxdWVyeS1tZXNzYWdlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIHN0YXR1c3F1ZXJ5LXJlc3BvbnNlICggc3RhdHVzcXVlcnktcmVzdWx0KyApID4NCi08IUFUVExJU1Qgc3RhdHVzcXVlcnktcmVzcG9uc2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0+DQotDQotPCFFTEVNRU5UIHN0YXR1c3F1ZXJ5LXJlc3VsdCAoIGFkZHJlc3MqLCBxdWFsaXR5LW9mLXNlcnZpY2U/ICkgPg0KLTwhQVRUTElTVCBzdGF0dXNxdWVyeS1yZXN1bHQNCi0gICAgICAgICAgZXZlbnQtdGltZSAgICAgICAgICAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBtZXNzYWdlLXN0YXRlICAgICAgICAgICVTdGF0ZTsgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIERlY2xhcmF0aW9uIG9mIGNhcGFiaWxpdGllcyBxdWVyeSBvcGVyYXRpb24gICAgLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBQdXNoIEluaXRpYXRvciB0byB0aGUgcHVzaCBwcm94eSBnYXRld2F5LS0+DQotDQotPCFFTEVNRU5UIGNjcS1tZXNzYWdlICggYWRkcmVzcyApID4NCi08IUFUVExJU1QgY2NxLW1lc3NhZ2UNCi0gICAgICAgICAgcXVlcnktaWQgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBhcHAtaWQgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIGNjcS1yZXNwb25zZSAoIGFkZHJlc3MgKSA+DQotPCFBVFRMSVNUIGNjcS1yZXNwb25zZQ0KLSAgICAgICAgICBxdWVyeS1pZCAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIGNvZGUgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGRlc2MgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gRGVjbGFyYXRpb24gb2YgYmFkIG1lc3NhZ2UgcmVzcG9uc2UgbWVzc2FnZSAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotDQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheSB0byB0aGUgUHVzaCBJbml0aWF0b3ItLT4NCi0NCi08IUVMRU1FTlQgYmFkbWVzc2FnZS1yZXNwb25zZSBFTVBUWSA+DQotPCFBVFRMSVNUIGJhZG1lc3NhZ2UtcmVzcG9uc2UNCi0JY29kZQkJCUNEQVRBCSNSRVFVSVJFRA0KLQlkZXNjCQkJQ0RBVEEJI0lNUExJRUQNCi0JYmFkLW1lc3NhZ2UtZnJhZ21lbnQJQ0RBVEEJI0lNUExJRUQNCi0+DQotDQotPCEtLQ0KLUNvcHlyaWdodCBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuLCAxOTk4LTIwMDEuDQotICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICANCi0tLT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi0xL3NpLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yLTEvc2kuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2U5N2M1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yLTEvc2kuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotPCEtLQ0KLVNlcnZpY2UgSW5kaWNhdGlvbiAoU0kpIERvY3VtZW50IFR5cGUgRGVmaW5pdGlvbi4NCi0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OCwxOTk5Lg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotDQotU0kgaXMgYW4gWE1MIGxhbmd1YWdlLiAgVHlwaWNhbCB1c2FnZToNCi0gICA8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi0gICA8IURPQ1RZUEUgc2kgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFNJIDEuMC8vRU4iDQotICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvc2kuZHRkIj4NCi0gICA8c2k+DQotICAgLi4uDQotICAgPC9zaT4NCi0NCi1UZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyANCi1BcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIHdlYiBzaXRlIGF0DQotaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvZG9jcy9jb3B5cmlnaHQuaHRtLg0KLS0tPg0KLQ0KLQ0KLTwhRU5USVRZICUgRGF0ZXRpbWUgIkNEQVRBIj4gICAgICAgICAgICAgPCEtLSBJU08gZGF0ZSBhbmQgdGltZSAtLT4NCi08IUVOVElUWSAlIFVSSSAgICAgICJDREFUQSI+ICAgICAgICAgICAgIDwhLS0gVVJJIGRlc2lnbmF0aW5nIGEgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh5cGVydGV4dCBub2RlICAgIC0tPg0KLQ0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09PT09IFRoZSBTSSBFbGVtZW50ID09PT09PT09PT09PT09PT09PT09PT0tLT4NCi08IUVMRU1FTlQgc2kgKGluZGljYXRpb24saW5mbz8pPg0KLQ0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT0gVGhlIGluZGljYXRpb24gRWxlbWVudCA9PT09PT09PT09PT09PT09PT0tLT4NCi08IUVMRU1FTlQgaW5kaWNhdGlvbiAoI1BDREFUQSk+DQotPCFBVFRMSVNUIGluZGljYXRpb24NCi0gIGhyZWYJICAgICAgICAlVVJJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gIHNpLWlkCSAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICBjcmVhdGVkCSVEYXRldGltZTsJICAgICAgICAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gIHNpLWV4cGlyZXMJJURhdGV0aW1lOwkgICAgICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgYWN0aW9uCShzaWduYWwtbm9uZXxzaWduYWwtbG93fA0KLSAgICAgICAgICAgICAgICAgc2lnbmFsLW1lZGl1bXxzaWduYWwtaGlnaHxkZWxldGUpICAic2lnbmFsLW1lZGl1bSIgDQotPg0KLQ0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09PT0gVGhlIElORk8gRWxlbWVudCA9PT09PT09PT09PT09PT09PT09PT0tLT4NCi08IUVMRU1FTlQgaW5mbyAoaXRlbSspPg0KLQ0KLTwhRUxFTUVOVCBpdGVtICgjUENEQVRBKT4NCi08IUFUVExJU1QgaXRlbQ0KLSAgY2xhc3MJICAgICAgICBOTVRPS0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjUkVRVUlSRUQgDQotPg0KLQ0KLTwhLS0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OCwxOTk5Lg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotLS0+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTItMS9zbC5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi0xL3NsLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg3MzExYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi0xL3NsLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTwhLS0NCi1TZXJ2aWNlIExvYWRpbmcgKFNMKSBEb2N1bWVudCBUeXBlIERlZmluaXRpb24uDQotDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgsMTk5OS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLQ0KLVNMIGlzIGFuIFhNTCBsYW5ndWFnZS4gIFR5cGljYWwgdXNhZ2U6DQotICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotICAgPCFET0NUWVBFIHNsIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBTTCAxLjAvL0VOIg0KLSAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3NsLmR0ZCI+DQotICAgPHNsPg0KLSAgIC4uLg0KLSAgIDwvc2w+DQotDQotVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgDQotQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiB3ZWIgc2l0ZSBhdA0KLWh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL2RvY3MvY29weXJpZ2h0Lmh0bS4NCi0tLT4NCi0NCi08IUVOVElUWSAlIFVSSSAiQ0RBVEEiPiAgICAgICAgICAgICAgICA8IS0tIFVSSSBkZXNpZ25hdGluZyBhIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHlwZXJ0ZXh0IG5vZGUgICAgLS0+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT09PSBUaGUgU0wgRWxlbWVudCA9PT09PT09PT09PT09PT09PT09PT0tLT4NCi08IUVMRU1FTlQgc2wgRU1QVFk+DQotPCFBVFRMSVNUIHNsDQotICBocmVmICAgICAgICAgICVVUkk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gIGFjdGlvbiAgICAgICAgKGV4ZWN1dGUtbG93fGV4ZWN1dGUtaGlnaHxjYWNoZSkgICAgImV4ZWN1dGUtbG93IiANCi0+DQotDQotPCEtLQ0KLUNvcHlyaWdodCBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuLCAxOTk4LDE5OTkuDQotICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICANCi0tLT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi0xL3dtbDEzLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yLTEvd21sMTMuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjhhNDliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yLTEvd21sMTMuZHRkCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTItMS93dGEtd21sMTIuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTItMS93dGEtd21sMTIuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjBmN2RmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yLTEvd3RhLXdtbDEyLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTwhLS0NCi1XaXJlbGVzcyBUZWxlcGhvbnkgQXBwbGljYXRpb25zIFdpcmVsZXNzIE1hcmt1cCBMYW5ndWFnZSAoV1RBLVdNTCkgRG9jdW1lbnQgVHlwZSBEZWZpbml0aW9uLg0KLVdUQS1XTUwgaXMgYW4gWE1MIGxhbmd1YWdlLiBUeXBpY2FsIHVzYWdlOg0KLTw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLTwhRE9DVFlQRSB3dGEtd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXVEEtV01MIDEuMi8vRU4iDQotCSJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd3RhLXdtbDEyLmR0ZCI+DQotPHd0YS13bWw+DQotLi4uDQotPC93dGEtd21sPg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgd21sLWR0ZCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMi8vRU4iDQotCSJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sMTIuZHRkIj4NCi0NCi0ld21sLWR0ZDsNCi0NCi08IUVMRU1FTlQgd3RhLXdtbCAoIGhlYWQ/LCB0ZW1wbGF0ZT8sIGNhcmQrICk+DQotPCFBVFRMSVNUIHd0YS13bWwNCi0JeG1sOmxhbmcJCU5NVE9LRU4JI0lNUExJRUQNCi0JJWNvcmVhdHRyczsNCi0+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTIvY2hhbm5lbDEyLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yL2NoYW5uZWwxMi5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmMjEwM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTIvY2hhbm5lbDEyLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTwhLS0NCi0gICAgICBUaGlzIERURCBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgaWRlbnRpZmllcjoNCi0gICAgIAkiLS8vV0FQRk9SVU0vL0RURCBDSEFOTkVMIDEuMi8vRU4iDQotLS0+DQotDQotPCFFTlRJVFkgJSBCb29sZWFuICIoIHRydWUgfCBmYWxzZSApIj4NCi0NCi08IS0tIGEgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIC0tPg0KLTwhRU5USVRZICUgVVJJICJDREFUQSIgPg0KLQ0KLTwhLS0gb25lIG9yIG1vcmUgZGlnaXRzIChOVU1CRVIpIC0tPg0KLTwhRU5USVRZICUgTnVtYmVyICJDREFUQSIgPiAgDQotDQotPCEtLSBDaGFubmVsIEV2ZW50cyAtLT4NCi08IUVOVElUWSAlIENoYW5uZWxFdmVudC5hdHRyaWJzDQotCSJzdWNjZXNzCQklVVJJOwkJI0lNUExJRUQNCi0JIGZhaWx1cmUJCSVVUkk7CQkjSU1QTElFRCINCi0+DQotDQotPCFFTEVNRU5UIGNoYW5uZWwgKHRpdGxlICwgYWJzdHJhY3Q/ICwgcmVzb3VyY2UqICkgPg0KLTwhQVRUTElTVCBjaGFubmVsDQotCW1heHNwYWNlCQklTnVtYmVyOwkjUkVRVUlSRUQgDQotCWJhc2UJCQklVVJJOwkJI0lNUExJRUQNCi0JZXZlbnRpZAkJCUNEQVRBCQkjSU1QTElFRA0KLQljaGFubmVsaWQJCUNEQVRBCQkjUkVRVUlSRUQgDQotCXVzZXJhY2Nlc3NpYmxlIAkJJUJvb2xlYW47CSJmYWxzZSINCi0JJUNoYW5uZWxFdmVudC5hdHRyaWJzOw0KLT4NCi0NCi08IUVMRU1FTlQgdGl0bGUgKCNQQ0RBVEEpPg0KLTwhRUxFTUVOVCBhYnN0cmFjdCAoI1BDREFUQSk+DQotDQotPCFFTEVNRU5UIHJlc291cmNlIEVNUFRZPg0KLTwhQVRUTElTVCByZXNvdXJjZQ0KLQlocmVmICAgICAgCSVVUkk7CSAgIAkjUkVRVUlSRUQNCi0JbGFzdG1vZAkJJU51bWJlcjsJI0lNUExJRUQNCi0JZXRhZwkJTk1UT0tFTgkJI0lNUExJRUQNCi0JbWQ1CQlOTVRPS0VOCQkjSU1QTElFRA0KLT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi9wYXBfMS4wLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yL3BhcF8xLjAuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2N2VkMGQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yL3BhcF8xLjAuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMjE5ICswLDAgQEAKLTwhLS0NCi1QdXNoIEFjY2VzcyBQcm90b2NvbCAoUEFQKSB2MS4wIERvY3VtZW50IFR5cGUgRGVmaW5pdGlvbi4NCi0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OC0yMDAxLg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotDQotUEFQIGlzIGFuIFhNTCBsYW5ndWFnZS4gVHlwaWNhbCB1c2FnZToNCi0gICA8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi0gICA8IURPQ1RZUEUgcGFwIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBQQVAgMS4wLy9FTiINCi0gICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC9wYXBfMS4wLmR0ZCI+DQotICAgPHBhcD4NCi0gICAgICAuLi4NCi0gICA8L3BhcD4NCi0NCi1UZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyANCi1BcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIHdlYiBzaXRlIGF0DQotaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvZG9jcy9jb3B5cmlnaHQuaHRtLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgRGF0ZXRpbWUgIkNEQVRBIj4gICAgIDwhLS0gSVNPIGRhdGUgYW5kIHRpbWUgLS0+DQotPCFFTlRJVFkgJSBTdGF0ZSAgIihyZWplY3RlZCB8IHBlbmRpbmcgDQotICAgICAgICAgICAgICAgICAgfCBkZWxpdmVyZWQgfCB1bmRlbGl2ZXJhYmxlIA0KLSAgICAgICAgICAgICAgICAgIHwgZXhwaXJlZCB8IGFib3J0ZWQgDQotICAgICAgICAgICAgICAgICAgfCB0aW1lb3V0IHwgY2FuY2VsbGVkIHwgdW5rbm93bikiPiAgICAgICAgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBQUEcgTWVzc2FnZSBTdGF0ZSAtLT4NCi0NCi0NCi08IUVMRU1FTlQgcGFwICAgICAgICAgICAgICAgICAgICAoIHB1c2gtbWVzc2FnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHVzaC1yZXNwb25zZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FuY2VsLW1lc3NhZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhbmNlbC1yZXNwb25zZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVzdWx0bm90aWZpY2F0aW9uLW1lc3NhZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlc3VsdG5vdGlmaWNhdGlvbi1yZXNwb25zZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3RhdHVzcXVlcnktbWVzc2FnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3RhdHVzcXVlcnktcmVzcG9uc2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjcS1tZXNzYWdlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY3EtcmVzcG9uc2UgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYWRtZXNzYWdlLXJlc3BvbnNlKSA+DQotPCFBVFRMSVNUIHBhcA0KLSAgICAgICAgICBwcm9kdWN0LW5hbWUgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBwdXNoIHN1Ym1pc3Npb24gbWVzc2FnZSAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBQdXNoIEluaXRpYXRvciB0byB0aGUgcHVzaCBwcm94eSBnYXRld2F5LS0+DQotDQotPCFFTEVNRU5UIHB1c2gtbWVzc2FnZSAoIGFkZHJlc3MrLCBxdWFsaXR5LW9mLXNlcnZpY2U/ICkgPg0KLTwhQVRUTElTVCBwdXNoLW1lc3NhZ2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGRlbGl2ZXItYmVmb3JlLXRpbWVzdGFtcCAgICVEYXRldGltZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIGRlbGl2ZXItYWZ0ZXItdGltZXN0YW1wICAgICVEYXRldGltZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHNvdXJjZS1yZWZlcmVuY2UgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHBwZy1ub3RpZnktcmVxdWVzdGVkLXRvICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEIA0KLSAgICAgICAgICBwcm9ncmVzcy1ub3Rlcy1yZXF1ZXN0ZWQgICAoIHRydWUgfCBmYWxzZSApICAiZmFsc2UiDQotPg0KLQ0KLTwhRUxFTUVOVCBhZGRyZXNzIEVNUFRZID4NCi08IUFUVExJU1QgYWRkcmVzcw0KLSAgICAgICAgICBhZGRyZXNzLXZhbHVlICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRCANCi0+DQotDQotPCFFTEVNRU5UIHF1YWxpdHktb2Ytc2VydmljZSBFTVBUWSA+DQotPCFBVFRMSVNUIHF1YWxpdHktb2Ytc2VydmljZQ0KLSAgICAgICAgICBwcmlvcml0eSAgICAgICAgICAgICAgICggaGlnaCB8IG1lZGl1bSB8IGxvdyApICAgICAgICAibWVkaXVtIg0KLSAgICAgICAgICBkZWxpdmVyeS1tZXRob2QgICAgICAgICggY29uZmlybWVkIHwgcHJlZmVyY29uZmlybWVkIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdW5jb25maXJtZWQgfCBub3RzcGVjaWZpZWQgKSAibm90c3BlY2lmaWVkIg0KLSAgICAgICAgICBuZXR3b3JrICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBuZXR3b3JrLXJlcXVpcmVkICAgICAgICggdHJ1ZSB8IGZhbHNlICkgICAgICAgICAgICAgICAiZmFsc2UiDQotICAgICAgICAgIGJlYXJlciAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIGJlYXJlci1yZXF1aXJlZCAgICAgICAgKCB0cnVlIHwgZmFsc2UgKSAgICAgICAgICAgICAgICJmYWxzZSINCi0+DQotDQotDQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheSB0byB0aGUgUHVzaCBJbml0aWF0b3ItLT4NCi0NCi08IUVMRU1FTlQgcHVzaC1yZXNwb25zZSAoIHByb2dyZXNzLW5vdGUqLCByZXNwb25zZS1yZXN1bHQgKSA+DQotPCFBVFRMSVNUIHB1c2gtcmVzcG9uc2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgc2VuZGVyLWFkZHJlc3MgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBzZW5kZXItbmFtZSAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHJlcGx5LXRpbWUgICAgICAgICAgICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0+DQotDQotPCFFTEVNRU5UIHByb2dyZXNzLW5vdGUgRU1QVFkgPg0KLTwhQVRUTElTVCBwcm9ncmVzcy1ub3RlDQotICAgICAgICAgIHN0YWdlICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIG5vdGUgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgdGltZSAgICAgICAgICAgICAgICAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi08IUVMRU1FTlQgcmVzcG9uc2UtcmVzdWx0IEVNUFRZID4NCi08IUFUVExJU1QgcmVzcG9uc2UtcmVzdWx0DQotICAgICAgICAgIGNvZGUgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGRlc2MgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotDQotDQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIERlY2xhcmF0aW9uIG9mIGNhbmNlbCBvcGVyYXRpb24gICAgICAgICAgIC0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIFB1c2ggSW5pdGlhdG9yIHRvIHRoZSBwdXNoIHByb3h5IGdhdGV3YXktLT4NCi0NCi08IUVMRU1FTlQgY2FuY2VsLW1lc3NhZ2UgKCBhZGRyZXNzKiApID4NCi08IUFUVExJU1QgY2FuY2VsLW1lc3NhZ2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0+DQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheSB0byB0aGUgUHVzaCBJbml0aWF0b3ItLT4NCi0NCi08IUVMRU1FTlQgY2FuY2VsLXJlc3BvbnNlICggY2FuY2VsLXJlc3VsdCsgKSA+DQotPCFBVFRMSVNUIGNhbmNlbC1yZXNwb25zZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLT4NCi0NCi08IUVMRU1FTlQgY2FuY2VsLXJlc3VsdCAoIGFkZHJlc3MqICkgPg0KLTwhQVRUTElTVCBjYW5jZWwtcmVzdWx0DQotICAgICAgICAgIGNvZGUgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGRlc2MgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotDQotDQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIERlY2xhcmF0aW9uIG9mIG5vdGlmeSByZXN1bHQgb3BlcmF0aW9uICAgIC0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheSB0byB0aGUgUHVzaCBJbml0aWF0b3ItLT4NCi0NCi08IUVMRU1FTlQgcmVzdWx0bm90aWZpY2F0aW9uLW1lc3NhZ2UgKCBhZGRyZXNzLCBxdWFsaXR5LW9mLXNlcnZpY2U/ICkgPg0KLTwhQVRUTElTVCByZXN1bHRub3RpZmljYXRpb24tbWVzc2FnZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBzZW5kZXItYWRkcmVzcyAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHNlbmRlci1uYW1lICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgcmVjZWl2ZWQtdGltZSAgICAgICAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBldmVudC10aW1lICAgICAgICAgICAgICVEYXRldGltZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIG1lc3NhZ2Utc3RhdGUgICAgICAgICAgJVN0YXRlOyAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGNvZGUgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGRlc2MgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIFB1c2ggSW5pdGlhdG9yIHRvIHRoZSBwdXNoIHByb3h5IGdhdGV3YXktLT4NCi0NCi08IUVMRU1FTlQgcmVzdWx0bm90aWZpY2F0aW9uLXJlc3BvbnNlICggYWRkcmVzcyApID4NCi08IUFUVExJU1QgcmVzdWx0bm90aWZpY2F0aW9uLXJlc3BvbnNlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGNvZGUgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGRlc2MgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotDQotDQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIERlY2xhcmF0aW9uIG9mIHN0YXR1c3F1ZXJ5IG9wZXJhdGlvbiAgICAgIC0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIFB1c2ggSW5pdGlhdG9yIHRvIHRoZSBwdXNoIHByb3h5IGdhdGV3YXktLT4NCi0NCi08IUVMRU1FTlQgc3RhdHVzcXVlcnktbWVzc2FnZSAoIGFkZHJlc3MqICkgPg0KLTwhQVRUTElTVCBzdGF0dXNxdWVyeS1tZXNzYWdlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIHN0YXR1c3F1ZXJ5LXJlc3BvbnNlICggc3RhdHVzcXVlcnktcmVzdWx0KyApID4NCi08IUFUVExJU1Qgc3RhdHVzcXVlcnktcmVzcG9uc2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0+DQotDQotPCFFTEVNRU5UIHN0YXR1c3F1ZXJ5LXJlc3VsdCAoIGFkZHJlc3MqLCBxdWFsaXR5LW9mLXNlcnZpY2U/ICkgPg0KLTwhQVRUTElTVCBzdGF0dXNxdWVyeS1yZXN1bHQNCi0gICAgICAgICAgZXZlbnQtdGltZSAgICAgICAgICAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBtZXNzYWdlLXN0YXRlICAgICAgICAgICVTdGF0ZTsgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIERlY2xhcmF0aW9uIG9mIGNhcGFiaWxpdGllcyBxdWVyeSBvcGVyYXRpb24gICAgLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBQdXNoIEluaXRpYXRvciB0byB0aGUgcHVzaCBwcm94eSBnYXRld2F5LS0+DQotDQotPCFFTEVNRU5UIGNjcS1tZXNzYWdlICggYWRkcmVzcyApID4NCi08IUFUVExJU1QgY2NxLW1lc3NhZ2UNCi0gICAgICAgICAgcXVlcnktaWQgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBhcHAtaWQgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIGNjcS1yZXNwb25zZSAoIGFkZHJlc3MgKSA+DQotPCFBVFRMSVNUIGNjcS1yZXNwb25zZQ0KLSAgICAgICAgICBxdWVyeS1pZCAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIGNvZGUgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGRlc2MgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gRGVjbGFyYXRpb24gb2YgYmFkIG1lc3NhZ2UgcmVzcG9uc2UgbWVzc2FnZSAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotDQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheSB0byB0aGUgUHVzaCBJbml0aWF0b3ItLT4NCi0NCi08IUVMRU1FTlQgYmFkbWVzc2FnZS1yZXNwb25zZSBFTVBUWSA+DQotPCFBVFRMSVNUIGJhZG1lc3NhZ2UtcmVzcG9uc2UNCi0JY29kZQkJCUNEQVRBCSNSRVFVSVJFRA0KLQlkZXNjCQkJQ0RBVEEJI0lNUExJRUQNCi0JYmFkLW1lc3NhZ2UtZnJhZ21lbnQJQ0RBVEEJI0lNUExJRUQNCi0+DQotDQotPCEtLQ0KLUNvcHlyaWdodCBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuLCAxOTk4LTIwMDEuDQotICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICANCi0tLT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi9zaS5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi9zaS5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzZTk3YzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTIvc2kuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotPCEtLQ0KLVNlcnZpY2UgSW5kaWNhdGlvbiAoU0kpIERvY3VtZW50IFR5cGUgRGVmaW5pdGlvbi4NCi0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OCwxOTk5Lg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotDQotU0kgaXMgYW4gWE1MIGxhbmd1YWdlLiAgVHlwaWNhbCB1c2FnZToNCi0gICA8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi0gICA8IURPQ1RZUEUgc2kgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFNJIDEuMC8vRU4iDQotICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvc2kuZHRkIj4NCi0gICA8c2k+DQotICAgLi4uDQotICAgPC9zaT4NCi0NCi1UZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyANCi1BcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIHdlYiBzaXRlIGF0DQotaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvZG9jcy9jb3B5cmlnaHQuaHRtLg0KLS0tPg0KLQ0KLQ0KLTwhRU5USVRZICUgRGF0ZXRpbWUgIkNEQVRBIj4gICAgICAgICAgICAgPCEtLSBJU08gZGF0ZSBhbmQgdGltZSAtLT4NCi08IUVOVElUWSAlIFVSSSAgICAgICJDREFUQSI+ICAgICAgICAgICAgIDwhLS0gVVJJIGRlc2lnbmF0aW5nIGEgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh5cGVydGV4dCBub2RlICAgIC0tPg0KLQ0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09PT09IFRoZSBTSSBFbGVtZW50ID09PT09PT09PT09PT09PT09PT09PT0tLT4NCi08IUVMRU1FTlQgc2kgKGluZGljYXRpb24saW5mbz8pPg0KLQ0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT0gVGhlIGluZGljYXRpb24gRWxlbWVudCA9PT09PT09PT09PT09PT09PT0tLT4NCi08IUVMRU1FTlQgaW5kaWNhdGlvbiAoI1BDREFUQSk+DQotPCFBVFRMSVNUIGluZGljYXRpb24NCi0gIGhyZWYJICAgICAgICAlVVJJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gIHNpLWlkCSAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICBjcmVhdGVkCSVEYXRldGltZTsJICAgICAgICAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gIHNpLWV4cGlyZXMJJURhdGV0aW1lOwkgICAgICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgYWN0aW9uCShzaWduYWwtbm9uZXxzaWduYWwtbG93fA0KLSAgICAgICAgICAgICAgICAgc2lnbmFsLW1lZGl1bXxzaWduYWwtaGlnaHxkZWxldGUpICAic2lnbmFsLW1lZGl1bSIgDQotPg0KLQ0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09PT0gVGhlIElORk8gRWxlbWVudCA9PT09PT09PT09PT09PT09PT09PT0tLT4NCi08IUVMRU1FTlQgaW5mbyAoaXRlbSspPg0KLQ0KLTwhRUxFTUVOVCBpdGVtICgjUENEQVRBKT4NCi08IUFUVExJU1QgaXRlbQ0KLSAgY2xhc3MJICAgICAgICBOTVRPS0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjUkVRVUlSRUQgDQotPg0KLQ0KLTwhLS0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OCwxOTk5Lg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotLS0+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTIvc2wuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTIvc2wuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODczMTFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yL3NsLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTwhLS0NCi1TZXJ2aWNlIExvYWRpbmcgKFNMKSBEb2N1bWVudCBUeXBlIERlZmluaXRpb24uDQotDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgsMTk5OS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLQ0KLVNMIGlzIGFuIFhNTCBsYW5ndWFnZS4gIFR5cGljYWwgdXNhZ2U6DQotICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotICAgPCFET0NUWVBFIHNsIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBTTCAxLjAvL0VOIg0KLSAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3NsLmR0ZCI+DQotICAgPHNsPg0KLSAgIC4uLg0KLSAgIDwvc2w+DQotDQotVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgDQotQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiB3ZWIgc2l0ZSBhdA0KLWh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL2RvY3MvY29weXJpZ2h0Lmh0bS4NCi0tLT4NCi0NCi08IUVOVElUWSAlIFVSSSAiQ0RBVEEiPiAgICAgICAgICAgICAgICA8IS0tIFVSSSBkZXNpZ25hdGluZyBhIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHlwZXJ0ZXh0IG5vZGUgICAgLS0+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT09PSBUaGUgU0wgRWxlbWVudCA9PT09PT09PT09PT09PT09PT09PT0tLT4NCi08IUVMRU1FTlQgc2wgRU1QVFk+DQotPCFBVFRMSVNUIHNsDQotICBocmVmICAgICAgICAgICVVUkk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gIGFjdGlvbiAgICAgICAgKGV4ZWN1dGUtbG93fGV4ZWN1dGUtaGlnaHxjYWNoZSkgICAgImV4ZWN1dGUtbG93IiANCi0+DQotDQotPCEtLQ0KLUNvcHlyaWdodCBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuLCAxOTk4LDE5OTkuDQotICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICANCi0tLT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi93bWwxMi5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi93bWwxMi5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkMDNjNjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTIvd21sMTIuZHRkCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTIvd3RhLXdtbDEyLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yL3d0YS13bWwxMi5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2MGY3ZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTIvd3RhLXdtbDEyLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTwhLS0NCi1XaXJlbGVzcyBUZWxlcGhvbnkgQXBwbGljYXRpb25zIFdpcmVsZXNzIE1hcmt1cCBMYW5ndWFnZSAoV1RBLVdNTCkgRG9jdW1lbnQgVHlwZSBEZWZpbml0aW9uLg0KLVdUQS1XTUwgaXMgYW4gWE1MIGxhbmd1YWdlLiBUeXBpY2FsIHVzYWdlOg0KLTw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLTwhRE9DVFlQRSB3dGEtd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXVEEtV01MIDEuMi8vRU4iDQotCSJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd3RhLXdtbDEyLmR0ZCI+DQotPHd0YS13bWw+DQotLi4uDQotPC93dGEtd21sPg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgd21sLWR0ZCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMi8vRU4iDQotCSJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sMTIuZHRkIj4NCi0NCi0ld21sLWR0ZDsNCi0NCi08IUVMRU1FTlQgd3RhLXdtbCAoIGhlYWQ/LCB0ZW1wbGF0ZT8sIGNhcmQrICk+DQotPCFBVFRMSVNUIHd0YS13bWwNCi0JeG1sOmxhbmcJCU5NVE9LRU4JI0lNUExJRUQNCi0JJWNvcmVhdHRyczsNCi0+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvY2hhbm5lbDEyLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL2NoYW5uZWwxMi5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmMjEwM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvY2hhbm5lbDEyLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTwhLS0NCi0gICAgICBUaGlzIERURCBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgaWRlbnRpZmllcjoNCi0gICAgIAkiLS8vV0FQRk9SVU0vL0RURCBDSEFOTkVMIDEuMi8vRU4iDQotLS0+DQotDQotPCFFTlRJVFkgJSBCb29sZWFuICIoIHRydWUgfCBmYWxzZSApIj4NCi0NCi08IS0tIGEgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIC0tPg0KLTwhRU5USVRZICUgVVJJICJDREFUQSIgPg0KLQ0KLTwhLS0gb25lIG9yIG1vcmUgZGlnaXRzIChOVU1CRVIpIC0tPg0KLTwhRU5USVRZICUgTnVtYmVyICJDREFUQSIgPiAgDQotDQotPCEtLSBDaGFubmVsIEV2ZW50cyAtLT4NCi08IUVOVElUWSAlIENoYW5uZWxFdmVudC5hdHRyaWJzDQotCSJzdWNjZXNzCQklVVJJOwkJI0lNUExJRUQNCi0JIGZhaWx1cmUJCSVVUkk7CQkjSU1QTElFRCINCi0+DQotDQotPCFFTEVNRU5UIGNoYW5uZWwgKHRpdGxlICwgYWJzdHJhY3Q/ICwgcmVzb3VyY2UqICkgPg0KLTwhQVRUTElTVCBjaGFubmVsDQotCW1heHNwYWNlCQklTnVtYmVyOwkjUkVRVUlSRUQgDQotCWJhc2UJCQklVVJJOwkJI0lNUExJRUQNCi0JZXZlbnRpZAkJCUNEQVRBCQkjSU1QTElFRA0KLQljaGFubmVsaWQJCUNEQVRBCQkjUkVRVUlSRUQgDQotCXVzZXJhY2Nlc3NpYmxlIAkJJUJvb2xlYW47CSJmYWxzZSINCi0JJUNoYW5uZWxFdmVudC5hdHRyaWJzOw0KLT4NCi0NCi08IUVMRU1FTlQgdGl0bGUgKCNQQ0RBVEEpPg0KLTwhRUxFTUVOVCBhYnN0cmFjdCAoI1BDREFUQSk+DQotDQotPCFFTEVNRU5UIHJlc291cmNlIEVNUFRZPg0KLTwhQVRUTElTVCByZXNvdXJjZQ0KLQlocmVmICAgICAgCSVVUkk7CSAgIAkjUkVRVUlSRUQNCi0JbGFzdG1vZAkJJU51bWJlcjsJI0lNUExJRUQNCi0JZXRhZwkJTk1UT0tFTgkJI0lNUExJRUQNCi0JbWQ1CQlOTVRPS0VOCQkjSU1QTElFRA0KLT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC9wYXBfMi4wLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3BhcF8yLjAuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjZlOGZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3BhcF8yLjAuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMjIzICswLDAgQEAKLTwhLS0NCi1QdXNoIEFjY2VzcyBQcm90b2NvbCAoUEFQKSB2Mi4wIERvY3VtZW50IFR5cGUgRGVmaW5pdGlvbi4NCi0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OC0yMDAxLg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotDQotUEFQIGlzIGFuIFhNTCBsYW5ndWFnZS4gVHlwaWNhbCB1c2FnZToNCi0gICA8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi0gICA8IURPQ1RZUEUgcGFwIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBQQVAgMi4wLy9FTiINCi0gICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC9wYXBfMi4wLmR0ZCINCi0gICAgICAgICAgICAgWzw/d2FwLXBhcC12ZXIgc3VwcG9ydGVkLXZlcnNpb25zPSIyLjAsMS4qIj8+XT4NCi0gICA8cGFwPg0KLSAgICAgIC4uLg0KLSAgIDwvcGFwPg0KLQ0KLVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIA0KLUFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gd2ViIHNpdGUgYXQNCi1odHRwOi8vd3d3LndhcGZvcnVtLm9yZy9kb2NzL2NvcHlyaWdodC5odG0uDQotLS0+DQotDQotPCFFTlRJVFkgJSBEYXRldGltZSAiQ0RBVEEiPiAgICAgPCEtLSBJU08gZGF0ZSBhbmQgdGltZSAtLT4NCi08IUVOVElUWSAlIFN0YXRlICAiKHJlamVjdGVkIHwgcGVuZGluZyANCi0gICAgICAgICAgICAgICAgICB8IGRlbGl2ZXJlZCB8IHVuZGVsaXZlcmFibGUgDQotICAgICAgICAgICAgICAgICAgfCBleHBpcmVkIHwgYWJvcnRlZCANCi0gICAgICAgICAgICAgICAgICB8IHRpbWVvdXQgfCBjYW5jZWxsZWQgfCB1bmtub3duKSI+ICAgICAgICANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFBQRyBNZXNzYWdlIFN0YXRlIC0tPg0KLQ0KLQ0KLTwhRUxFTUVOVCBwYXAgICAgICAgICAgICAgICAgICAgICggcHVzaC1tZXNzYWdlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwdXNoLXJlc3BvbnNlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYW5jZWwtbWVzc2FnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FuY2VsLXJlc3BvbnNlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXN1bHRub3RpZmljYXRpb24tbWVzc2FnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVzdWx0bm90aWZpY2F0aW9uLXJlc3BvbnNlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzdGF0dXNxdWVyeS1tZXNzYWdlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzdGF0dXNxdWVyeS1yZXNwb25zZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NxLW1lc3NhZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjcS1yZXNwb25zZSANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJhZG1lc3NhZ2UtcmVzcG9uc2UpID4NCi08IUFUVExJU1QgcGFwDQotICAgICAgICAgIHByb2R1Y3QtbmFtZSAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotDQotDQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIERlY2xhcmF0aW9uIG9mIHB1c2ggc3VibWlzc2lvbiBtZXNzYWdlICAgIC0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIFB1c2ggSW5pdGlhdG9yIHRvIHRoZSBwdXNoIHByb3h5IGdhdGV3YXktLT4NCi0NCi08IUVMRU1FTlQgcHVzaC1tZXNzYWdlICggYWRkcmVzcyssIHF1YWxpdHktb2Ytc2VydmljZT8gKSA+DQotPCFBVFRMSVNUIHB1c2gtbWVzc2FnZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgcmVwbGFjZS1wdXNoLWlkICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgcmVwbGFjZS1tZXRob2QgICAgICAgICAgICAgKCBwZW5kaW5nLW9ubHkgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWxsICkgICAgICAgICAgICJhbGwiDQotICAgICAgICAgIGRlbGl2ZXItYmVmb3JlLXRpbWVzdGFtcCAgICVEYXRldGltZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIGRlbGl2ZXItYWZ0ZXItdGltZXN0YW1wICAgICVEYXRldGltZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHNvdXJjZS1yZWZlcmVuY2UgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHBwZy1ub3RpZnktcmVxdWVzdGVkLXRvICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEIA0KLSAgICAgICAgICBwcm9ncmVzcy1ub3Rlcy1yZXF1ZXN0ZWQgICAoIHRydWUgfCBmYWxzZSApICAiZmFsc2UiDQotPg0KLQ0KLTwhRUxFTUVOVCBhZGRyZXNzIEVNUFRZID4NCi08IUFUVExJU1QgYWRkcmVzcw0KLSAgICAgICAgICBhZGRyZXNzLXZhbHVlICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRCANCi0+DQotDQotPCFFTEVNRU5UIHF1YWxpdHktb2Ytc2VydmljZSBFTVBUWSA+DQotPCFBVFRMSVNUIHF1YWxpdHktb2Ytc2VydmljZQ0KLSAgICAgICAgICBwcmlvcml0eSAgICAgICAgICAgICAgICggaGlnaCB8IG1lZGl1bSB8IGxvdyApICAgICAgICAibWVkaXVtIg0KLSAgICAgICAgICBkZWxpdmVyeS1tZXRob2QgICAgICAgICggY29uZmlybWVkIHwgcHJlZmVyY29uZmlybWVkIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdW5jb25maXJtZWQgfCBub3RzcGVjaWZpZWQgKSAibm90c3BlY2lmaWVkIg0KLSAgICAgICAgICBuZXR3b3JrICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBuZXR3b3JrLXJlcXVpcmVkICAgICAgICggdHJ1ZSB8IGZhbHNlICkgICAgICAgICAgICAgICAiZmFsc2UiDQotICAgICAgICAgIGJlYXJlciAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIGJlYXJlci1yZXF1aXJlZCAgICAgICAgKCB0cnVlIHwgZmFsc2UgKSAgICAgICAgICAgICAgICJmYWxzZSINCi0+DQotDQotDQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheSB0byB0aGUgUHVzaCBJbml0aWF0b3ItLT4NCi0NCi08IUVMRU1FTlQgcHVzaC1yZXNwb25zZSAoIHByb2dyZXNzLW5vdGUqLCByZXNwb25zZS1yZXN1bHQgKSA+DQotPCFBVFRMSVNUIHB1c2gtcmVzcG9uc2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgc2VuZGVyLWFkZHJlc3MgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBzZW5kZXItbmFtZSAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHJlcGx5LXRpbWUgICAgICAgICAgICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0+DQotDQotPCFFTEVNRU5UIHByb2dyZXNzLW5vdGUgRU1QVFkgPg0KLTwhQVRUTElTVCBwcm9ncmVzcy1ub3RlDQotICAgICAgICAgIHN0YWdlICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIG5vdGUgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgdGltZSAgICAgICAgICAgICAgICAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi08IUVMRU1FTlQgcmVzcG9uc2UtcmVzdWx0IEVNUFRZID4NCi08IUFUVExJU1QgcmVzcG9uc2UtcmVzdWx0DQotICAgICAgICAgIGNvZGUgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGRlc2MgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotDQotDQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIERlY2xhcmF0aW9uIG9mIGNhbmNlbCBvcGVyYXRpb24gICAgICAgICAgIC0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIFB1c2ggSW5pdGlhdG9yIHRvIHRoZSBwdXNoIHByb3h5IGdhdGV3YXktLT4NCi0NCi08IUVMRU1FTlQgY2FuY2VsLW1lc3NhZ2UgKCBhZGRyZXNzKiApID4NCi08IUFUVExJU1QgY2FuY2VsLW1lc3NhZ2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0+DQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheSB0byB0aGUgUHVzaCBJbml0aWF0b3ItLT4NCi0NCi08IUVMRU1FTlQgY2FuY2VsLXJlc3BvbnNlICggY2FuY2VsLXJlc3VsdCsgKSA+DQotPCFBVFRMSVNUIGNhbmNlbC1yZXNwb25zZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLT4NCi0NCi08IUVMRU1FTlQgY2FuY2VsLXJlc3VsdCAoIGFkZHJlc3MqICkgPg0KLTwhQVRUTElTVCBjYW5jZWwtcmVzdWx0DQotICAgICAgICAgIGNvZGUgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGRlc2MgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotDQotDQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIERlY2xhcmF0aW9uIG9mIG5vdGlmeSByZXN1bHQgb3BlcmF0aW9uICAgIC0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheSB0byB0aGUgUHVzaCBJbml0aWF0b3ItLT4NCi0NCi08IUVMRU1FTlQgcmVzdWx0bm90aWZpY2F0aW9uLW1lc3NhZ2UgKCBhZGRyZXNzLCBxdWFsaXR5LW9mLXNlcnZpY2U/ICkgPg0KLTwhQVRUTElTVCByZXN1bHRub3RpZmljYXRpb24tbWVzc2FnZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBzZW5kZXItYWRkcmVzcyAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHNlbmRlci1uYW1lICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgcmVjZWl2ZWQtdGltZSAgICAgICAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBldmVudC10aW1lICAgICAgICAgICAgICVEYXRldGltZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIG1lc3NhZ2Utc3RhdGUgICAgICAgICAgJVN0YXRlOyAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGNvZGUgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGRlc2MgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIFB1c2ggSW5pdGlhdG9yIHRvIHRoZSBwdXNoIHByb3h5IGdhdGV3YXktLT4NCi0NCi08IUVMRU1FTlQgcmVzdWx0bm90aWZpY2F0aW9uLXJlc3BvbnNlICggYWRkcmVzcyApID4NCi08IUFUVExJU1QgcmVzdWx0bm90aWZpY2F0aW9uLXJlc3BvbnNlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGNvZGUgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGRlc2MgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotDQotDQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIERlY2xhcmF0aW9uIG9mIHN0YXR1c3F1ZXJ5IG9wZXJhdGlvbiAgICAgIC0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIFB1c2ggSW5pdGlhdG9yIHRvIHRoZSBwdXNoIHByb3h5IGdhdGV3YXktLT4NCi0NCi08IUVMRU1FTlQgc3RhdHVzcXVlcnktbWVzc2FnZSAoIGFkZHJlc3MqICkgPg0KLTwhQVRUTElTVCBzdGF0dXNxdWVyeS1tZXNzYWdlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIHN0YXR1c3F1ZXJ5LXJlc3BvbnNlICggc3RhdHVzcXVlcnktcmVzdWx0KyApID4NCi08IUFUVExJU1Qgc3RhdHVzcXVlcnktcmVzcG9uc2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0+DQotDQotPCFFTEVNRU5UIHN0YXR1c3F1ZXJ5LXJlc3VsdCAoIGFkZHJlc3MqLCBxdWFsaXR5LW9mLXNlcnZpY2U/ICkgPg0KLTwhQVRUTElTVCBzdGF0dXNxdWVyeS1yZXN1bHQNCi0gICAgICAgICAgZXZlbnQtdGltZSAgICAgICAgICAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBtZXNzYWdlLXN0YXRlICAgICAgICAgICVTdGF0ZTsgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIERlY2xhcmF0aW9uIG9mIGNhcGFiaWxpdGllcyBxdWVyeSBvcGVyYXRpb24gICAgLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBQdXNoIEluaXRpYXRvciB0byB0aGUgcHVzaCBwcm94eSBnYXRld2F5LS0+DQotDQotPCFFTEVNRU5UIGNjcS1tZXNzYWdlICggYWRkcmVzcyApID4NCi08IUFUVExJU1QgY2NxLW1lc3NhZ2UNCi0gICAgICAgICAgcXVlcnktaWQgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBhcHAtaWQgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIGNjcS1yZXNwb25zZSAoIGFkZHJlc3MgKSA+DQotPCFBVFRMSVNUIGNjcS1yZXNwb25zZQ0KLSAgICAgICAgICBxdWVyeS1pZCAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIGNvZGUgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGRlc2MgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gRGVjbGFyYXRpb24gb2YgYmFkIG1lc3NhZ2UgcmVzcG9uc2UgbWVzc2FnZSAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotDQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheSB0byB0aGUgUHVzaCBJbml0aWF0b3ItLT4NCi0NCi08IUVMRU1FTlQgYmFkbWVzc2FnZS1yZXNwb25zZSBFTVBUWSA+DQotPCFBVFRMSVNUIGJhZG1lc3NhZ2UtcmVzcG9uc2UNCi0gICAgICAgICAgY29kZSAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgZGVzYyAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBiYWQtbWVzc2FnZS1mcmFnbWVudCAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLTwhLS0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OC0yMDAxLg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotLS0+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvcHJvdi5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC9wcm92LmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJjMDQ2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC9wcm92LmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLTwhLS0NCi1DbGllbnQgUHJvdmlzaW9uaW5nIHYxLjAgRG9jdW1lbnQgVHlwZSBEZWZpbml0aW9uLg0KLQ0KLUNvcHlyaWdodCBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuLCAxOTk4LTIwMDEuDQotICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICANCi0NCi1Db25uZWN0aXZpdHkgRG9jdW1lbnQgVHlwZSBEZWZpbml0aW9uDQotQ29ubmVjdGl2aXR5IGlzIGFuIFhNTCBsYW5ndWFnZS4gVHlwaWNhbCBVc2FnZToNCi0NCi0gICA8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi0gICA8IURPQ1RZUEUgd2FwLXByb3Zpc2lvbmluZ2RvYyBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgUFJPViAxLjAvL0VOIg0KLSAgICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3Byb3YuZHRkIj4NCi0gICAgICAgICAgICANCi08d2FwLXByb3Zpc2lvbmluZ2RvYz4NCi0uLi4NCi08L3dhcC1wcm92aXNpb25pbmdkb2M+DQotDQotDQotVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgDQotQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiB3ZWIgc2l0ZSBhdA0KLWh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL2RvY3MvY29weXJpZ2h0Lmh0bS4NCi0tLT4NCi0NCi08IUVMRU1FTlQgd2FwLXByb3Zpc2lvbmluZ2RvYyAoY2hhcmFjdGVyaXN0aWMrKT4NCi08IUFUVExJU1Qgd2FwLXByb3Zpc2lvbmluZ2RvYw0KLSAgdmVyc2lvbiAgIENEQVRBICNJTVBMSUVEDQotPg0KLQ0KLTwhRUxFTUVOVCBjaGFyYWN0ZXJpc3RpYyAocGFybSosIGNoYXJhY3RlcmlzdGljKik+DQotPCFBVFRMSVNUIGNoYXJhY3RlcmlzdGljDQotICB0eXBlIENEQVRBICNSRVFVSVJFRA0KLSANCi0+DQotDQotPCFFTEVNRU5UIHBhcm0gRU1QVFk+DQotPCFBVFRMSVNUIHBhcm0NCi0gIG5hbWUgIENEQVRBICNSRVFVSVJFRA0KLSAgdmFsdWUgQ0RBVEEgI0lNUExJRUQNCi0+DQotDQotDQotDQotPCEtLQ0KLUNvcHlyaWdodCBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuLCAxOTk4LTIwMDEuDQotICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICANCi0tLT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC9zaS5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC9zaS5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzZTk3YzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvc2kuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotPCEtLQ0KLVNlcnZpY2UgSW5kaWNhdGlvbiAoU0kpIERvY3VtZW50IFR5cGUgRGVmaW5pdGlvbi4NCi0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OCwxOTk5Lg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotDQotU0kgaXMgYW4gWE1MIGxhbmd1YWdlLiAgVHlwaWNhbCB1c2FnZToNCi0gICA8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi0gICA8IURPQ1RZUEUgc2kgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFNJIDEuMC8vRU4iDQotICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvc2kuZHRkIj4NCi0gICA8c2k+DQotICAgLi4uDQotICAgPC9zaT4NCi0NCi1UZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyANCi1BcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIHdlYiBzaXRlIGF0DQotaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvZG9jcy9jb3B5cmlnaHQuaHRtLg0KLS0tPg0KLQ0KLQ0KLTwhRU5USVRZICUgRGF0ZXRpbWUgIkNEQVRBIj4gICAgICAgICAgICAgPCEtLSBJU08gZGF0ZSBhbmQgdGltZSAtLT4NCi08IUVOVElUWSAlIFVSSSAgICAgICJDREFUQSI+ICAgICAgICAgICAgIDwhLS0gVVJJIGRlc2lnbmF0aW5nIGEgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh5cGVydGV4dCBub2RlICAgIC0tPg0KLQ0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09PT09IFRoZSBTSSBFbGVtZW50ID09PT09PT09PT09PT09PT09PT09PT0tLT4NCi08IUVMRU1FTlQgc2kgKGluZGljYXRpb24saW5mbz8pPg0KLQ0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT0gVGhlIGluZGljYXRpb24gRWxlbWVudCA9PT09PT09PT09PT09PT09PT0tLT4NCi08IUVMRU1FTlQgaW5kaWNhdGlvbiAoI1BDREFUQSk+DQotPCFBVFRMSVNUIGluZGljYXRpb24NCi0gIGhyZWYJICAgICAgICAlVVJJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gIHNpLWlkCSAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICBjcmVhdGVkCSVEYXRldGltZTsJICAgICAgICAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gIHNpLWV4cGlyZXMJJURhdGV0aW1lOwkgICAgICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgYWN0aW9uCShzaWduYWwtbm9uZXxzaWduYWwtbG93fA0KLSAgICAgICAgICAgICAgICAgc2lnbmFsLW1lZGl1bXxzaWduYWwtaGlnaHxkZWxldGUpICAic2lnbmFsLW1lZGl1bSIgDQotPg0KLQ0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09PT0gVGhlIElORk8gRWxlbWVudCA9PT09PT09PT09PT09PT09PT09PT0tLT4NCi08IUVMRU1FTlQgaW5mbyAoaXRlbSspPg0KLQ0KLTwhRUxFTUVOVCBpdGVtICgjUENEQVRBKT4NCi08IUFUVExJU1QgaXRlbQ0KLSAgY2xhc3MJICAgICAgICBOTVRPS0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjUkVRVUlSRUQgDQotPg0KLQ0KLTwhLS0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OCwxOTk5Lg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotLS0+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvc2wuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvc2wuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODczMTFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3NsLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTwhLS0NCi1TZXJ2aWNlIExvYWRpbmcgKFNMKSBEb2N1bWVudCBUeXBlIERlZmluaXRpb24uDQotDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgsMTk5OS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLQ0KLVNMIGlzIGFuIFhNTCBsYW5ndWFnZS4gIFR5cGljYWwgdXNhZ2U6DQotICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotICAgPCFET0NUWVBFIHNsIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBTTCAxLjAvL0VOIg0KLSAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3NsLmR0ZCI+DQotICAgPHNsPg0KLSAgIC4uLg0KLSAgIDwvc2w+DQotDQotVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgDQotQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiB3ZWIgc2l0ZSBhdA0KLWh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL2RvY3MvY29weXJpZ2h0Lmh0bS4NCi0tLT4NCi0NCi08IUVOVElUWSAlIFVSSSAiQ0RBVEEiPiAgICAgICAgICAgICAgICA8IS0tIFVSSSBkZXNpZ25hdGluZyBhIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHlwZXJ0ZXh0IG5vZGUgICAgLS0+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT09PSBUaGUgU0wgRWxlbWVudCA9PT09PT09PT09PT09PT09PT09PT0tLT4NCi08IUVMRU1FTlQgc2wgRU1QVFk+DQotPCFBVFRMSVNUIHNsDQotICBocmVmICAgICAgICAgICVVUkk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gIGFjdGlvbiAgICAgICAgKGV4ZWN1dGUtbG93fGV4ZWN1dGUtaGlnaHxjYWNoZSkgICAgImV4ZWN1dGUtbG93IiANCi0+DQotDQotPCEtLQ0KLUNvcHlyaWdodCBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuLCAxOTk4LDE5OTkuDQotICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICANCi0tLT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwtZGVwcmVjYXRlZC0xLm1vZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3dtbC1kZXByZWNhdGVkLTEubW9kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjRhZDJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3dtbC1kZXByZWNhdGVkLTEubW9kCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLTwhLS0gV01MIERlcHJlY2F0ZWQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB3bWwtZGVwcmVjYXRlZC0xLm1vZCAtLT4NCi08IS0tIA0KLSAgICBAV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0sIEx0ZC4gMjAwMS4NCi0NCi0JVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiANCi0JV2ViIHNpdGUgKGh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL3doYXQvY29weXJpZ2h0Lmh0bSkuDQotLS0+DQotPCEtLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTEVNRU5UUyBXTUwgRGVwcmVjYXRlZCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gIndtbC1kZXByZWNhdGVkLTEubW9kIg0KLQ0KLQlUaGlzIG1vZHVsZSBjb250YWlucyBkZXByZWNhdGVkIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzLg0KLQkNCi0JCUF0dHJpYnV0ZXM6IFdNTCBtb2RlLCBYSFRNTCBhbGlnbiwgWEhUTUwgdnNwYWNlLCBYSFRNTCBoc3BhY2UNCi0JCQ0KLQkJRWxlbWVudHM6IHUsIGIsIGJpZywgaSwgc21hbGwgDQotCQkNCi0tLT4NCi08IS0tIA0KLQlwIA0KLQkNCi0JKldNTCBtb2RlDQotCSpYSFRNTCBhbGlnbg0KLQkNCi0JUmVwbGFjZW1lbnQ6IFVzZSBDU1Mgc3R5bGUgc2hlZXRzIA0KLS0tPg0KLTwhQVRUTElTVCAlcC5xbmFtZTsNCi0JJWF0dC5tb2RlLnFuYW1lOyAod3JhcCB8IG5vd3JhcCkgI0lNUExJRUQNCi0JYWxpZ24gKGxlZnQgfCByaWdodCB8IGNlbnRlcikgImxlZnQiDQotPg0KLTwhLS0gDQotCXRhYmxlIA0KLQkNCi0JKldNTCBhbGlnbiANCi0JDQotCU5vdGU6IFRoZSBXTUwgYWxpZ24gYXR0cmlidXRlIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgWEhUTUwgYXR0cmlidXRlIHdpdGggdGhlIHNhbWUgbmFtZS4NCi0tLT4NCi08IUFUVExJU1QgJXRhYmxlLnFuYW1lOw0KLQklYXR0LmFsaWduLnFuYW1lOyBDREFUQSAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQlpbWcgDQotCQ0KLQkqWEhUTUwgdnNwYWNlLCBoc3BhY2UsIGFsaWduDQotCQ0KLQlSZXBsYWNlbWVudDogVXNlIENTUyBzdHlsZSBzaGVldHMgDQotLS0+DQotPCFBVFRMSVNUIGltZw0KLQl2c3BhY2UgQ0RBVEEgIjAiDQotCWhzcGFjZSBDREFUQSAiMCINCi0JYWxpZ24gKHRvcCB8IG1pZGRsZSB8IGJvdHRvbSkgImJvdHRvbSINCi0+DQotPCEtLSANCi0JSW5saW5lIFByZXNlbnRhdGlvbiANCi0JDQotCSpYSFRNTCAgYiwgYmlnLCBpLCBzbWFsbAkNCi0JDQotCVJlcGxhY2VtZW50OiBVc2UgQ1NTIHN0eWxlIHNoZWV0cyANCi0tLT4NCi08IUVOVElUWSAlIHN1Yi5lbGVtZW50ICJJR05PUkUiPg0KLTwhRU5USVRZICUgc3ViLmF0dGxpc3QgIklHTk9SRSI+DQotPCFFTlRJVFkgJSBzdXAuZWxlbWVudCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHN1cC5hdHRsaXN0ICJJR05PUkUiPg0KLTwhRU5USVRZICUgdHQuZWxlbWVudCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHR0LmF0dGxpc3QgIklHTk9SRSI+DQotPCFFTlRJVFkgJSB4aHRtbC1pbmxwcmVzLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW5saW5lIFByZXNlbnRhdGlvbiAxLjAvL0VOIg0KLQkJInhodG1sLWlubHByZXMtMS5tb2QiPg0KLSV4aHRtbC1pbmxwcmVzLm1vZDsNCi08IS0tIA0KLQl1DQotDQotCVRoaXMgZWxlbWVudCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBYSFRNTCBpbmxpbmUgcHJlc2VudGF0aW9uIG1vZHVsZS4NCi0JSXQgd2FzIGRlcHJlY2F0ZWQgYWxyZWFkeSBpbiBIVE1MIDQuMC4NCi0JDQotCVJlcGxhY2VtZW50OiBVc2UgQ1NTIHN0eWxlIHNoZWV0cyANCi0tLT4NCi08IUVOVElUWSAlIHUuY29udGVudCAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIj4NCi08IUVOVElUWSAlIHUucW5hbWUgInUiPg0KLTwhRUxFTUVOVCAldS5xbmFtZTsgJXUuY29udGVudDs+DQotPCFBVFRMSVNUICV1LnFuYW1lOw0KLQklQ29tbW9uLmF0dHJpYjsgDQotPg0KLTwhLS0gDQotCW1ldGEgDQotCQ0KLQkqV01MIGZvcnVhIGF0dHJpYnV0ZQ0KLS0tPg0KLTwhQVRUTElTVCAlbWV0YS5xbmFtZTsNCi0JJWF0dC5mb3J1YS5xbmFtZTsgJUJvb2xlYW4uZGF0YXR5cGU7ICJ0cnVlIg0KLT4NCi08IS0tDQotCWh0bWwNCi0JDQotCSpXTUwgdXNlLXhtbC1mcmFnbWVudCBhdHRyaWJ1dGUNCi0tLT4NCi08IUFUVExJU1QgJWh0bWwucW5hbWU7DQotCSVhdHQudXNleG1sZnJhZ21lbnQucW5hbWU7IAklQm9vbGVhbi5kYXRhdHlwZTsgInRydWUiDQotPg0KLQ0KLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3dtbC1mcmFtZXdvcmstMS5tb2QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwtZnJhbWV3b3JrLTEubW9kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDYxYWY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3dtbC1mcmFtZXdvcmstMS5tb2QKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi08IS0tIFdNTCBNb2R1bGFyIEZyYW1ld29yayAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB3bWwtZnJhbWV3b3JrLTEubW9kIC0tPg0KLTwhLS0gDQotICAgIEBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSwgTHRkLiAyMDAxLg0KLQ0KLQlUZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIA0KLQlXZWIgc2l0ZSAoaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvd2hhdC9jb3B5cmlnaHQuaHRtKS4NCi0tLT4NCi08IS0tDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VOVElUSUVTIFdNTCBNb2R1bGFyIEZyYW1ld29yayAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL2R0ZC93bWwtZnJhbWV3b3JrLTEubW9kIg0KLSAgICAgICANCi0gICAgICAgVGhpcyBpcyBhbiBleHRlbnNpb24gb2YgdGhlIFhIVE1MIE1vZHVsYXIgRnJhbWV3b3JrIG1vZHVsZS4gSW4gYWRkaXRpb24gdG8gdGhlIA0KLSAgICAgICByZXF1aXJlZCBYSFRNTCBlbnRpdGllcyBpdCBpbmNsdWRlczoNCi0gICAgICAgDQotICAgICAgIAkJKldNTCBkYXRhdHlwZXMNCi0gICAgICAgCQkqV01MIG5hbWVzcGFjZSBxdWFsaWZpZWQgbmFtZXMNCi0gICAgICAgCQkqV01MIGRvY3VtZW50IG1vZGVsICAgICAgIA0KLS0tPg0KLTwhLS0gDQotCVhIVE1MIG5vdGF0aW9ucw0KLS0tPg0KLTwhRU5USVRZICUgeGh0bWwtbm90YXRpb25zLm1vZCBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT05TIFhIVE1MIE5vdGF0aW9ucyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbm90YXRpb25zLTEubW9kIj4NCi0leGh0bWwtbm90YXRpb25zLm1vZDsNCi08IS0tIA0KLQlXTUwgZGF0YXR5cGVzDQotLS0+DQotPCFFTlRJVFkgJSBCb29sZWFuLmRhdGF0eXBlICIodHJ1ZXxmYWxzZSkiPg0KLTwhLS0gDQotCVhIVE1MIGRhdGF0eXBlcw0KLS0tPg0KLTwhRU5USVRZICUgeGh0bWwtZGF0YXR5cGVzLm1vZCBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgRGF0YXR5cGVzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1kYXRhdHlwZXMtMS5tb2QiPg0KLSV4aHRtbC1kYXRhdHlwZXMubW9kOw0KLTwhLS0gDQotCVdNTCBxdWFsaWZpZWQgbmFtZXMNCi0tLT4NCi08IUVOVElUWSAlIHdtbC1xbmFtZS5tb2QgUFVCTElDICItLy9XQVBGT1JVTS8vRU5USVRJRVMgV01MIFF1YWxpZmllZCBOYW1lcyAxLjAvL0VOIg0KLSAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbC1xbmFtZS0xLm1vZCI+DQotJXdtbC1xbmFtZS5tb2Q7DQotPCEtLSANCi0JWEhUTUwgcXVhbGlmaWVkIG5hbWVzDQotLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1xbmFtZS5tb2QgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIFF1YWxpZmllZCBOYW1lcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtcW5hbWUtMS5tb2QiPg0KLSV4aHRtbC1xbmFtZS5tb2Q7DQotPCEtLQ0KLQlYSFRNTCBnbG9iYWwgYXR0cmlidXRlcw0KLS0tPg0KLTwhRU5USVRZICUgeGh0bWwtaW5sc3R5bGUubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbmxpbmUgU3R5bGUgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWlubHN0eWxlLTEubW9kIj4NCi0leGh0bWwtaW5sc3R5bGUubW9kOw0KLTwhRU5USVRZICUgWEhUTUwuYmlkaSAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHhodG1sLWF0dHJpYnMubW9kIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBDb21tb24gQXR0cmlidXRlcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYXR0cmlicy0xLm1vZCI+DQotJXhodG1sLWF0dHJpYnMubW9kOw0KLTwhLS0gDQotCVhIVE1MIGNoYXJhY3RlciBlbnRpdGllcw0KLS0tPg0KLTwhRU5USVRZICUgeGh0bWwtY2hhcmVudC5tb2QgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIENoYXJhY3RlciBFbnRpdGllcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtY2hhcmVudC0xLm1vZCI+DQotJXhodG1sLWNoYXJlbnQubW9kOw0KLTwhLS0gDQotCVdNTCBkb2N1bWVudCBtb2RlbA0KLS0tPg0KLTwhRU5USVRZICUgd21sLW1vZGVsLm1vZCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTlRJVElFUyBXTUwgMi4wIERvY3VtZW50IE1vZGVsIDEuMC8vRU4iDQotICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sMjAtbW9kZWwtMS5tb2QiPg0KLSV3bWwtbW9kZWwubW9kOw0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3dtbC1xbmFtZS0xLm1vZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3dtbC1xbmFtZS0xLm1vZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNWE1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwtcW5hbWUtMS5tb2QKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi08IS0tIFdNTCBRdWFsaWZpZWQgTmFtZXMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHdtbC1xbmFtZS0xLm1vZCAtLT4NCi08IS0tIA0KLSAgICBAV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0sIEx0ZC4gMjAwMS4NCi0NCi0JVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiANCi0JV2ViIHNpdGUgKGh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL3doYXQvY29weXJpZ2h0Lmh0bSkuDQotLS0+DQotPCEtLQ0KLSAgICANCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0JUFVCTElDICItLy9XQVBGT1JVTS8vRU5USVRJRVMgV01MIFF1YWxpZmllZCBOYW1lcyAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gIndtbC1xbmFtZS0xLm1vZCINCi0NCi0JVGhpcyBtb2R1bGUgZGVjbGFyZXMgV01MIG5hbWVzIHdpdGggdGhlIFdNTCBuYW1lc3BhY2UgcHJlZml4LgkNCi0NCi0tLT4NCi08IS0tDQotCVRoZSBXTUwgbmFtZXNwYWNlIG5hbWUNCi0tLT4NCi08IUVOVElUWSAlIFdNTC54bWxucyAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvMjAwMS93bWwiPg0KLTwhLS0NCi0JV01MIG5hbWVzcGFjZSBwcmVmaXgNCi0JDQotCU9uIFdNTCBlbGVtZW50cyBXTUwgaXMgZGVjbGFyZWQgYXMgdGhlIGRlZmF1bHQgbmFtZXNwYWNlLiANCi0JTmFtZXNwYWNlIHByZWZpeCBpcyB1c2VkIG9ubHkgZm9yIFdNTCBhdHRyaWJ1dGVzIG9uIFhIVE1MIGVsZW1lbnRzLg0KLS0tPg0KLTwhRU5USVRZICUgV01MLnByZWZpeCAid21sIj4NCi08IS0tDQotCVBhcmFtZXRlciBlbnRpdHkgd2l0aCB0aGUgV01MIG5hbWVzcGFjZSBwcmVmaXggcGx1cyB0aGUgIjoiLiANCi0JVGhlIGFjdHVhbCBwcmVmaXgsIFdNTC5wcmVmaXgsIGlzIGRlY2xhcmVkIGluIHRoZSBXTUwgRFREIGRyaXZlci4gDQotLS0+DQotPCFFTlRJVFkgJSBXTUwucGZ4ICIlV01MLnByZWZpeDs6Ij4NCi08IS0tDQotCUF0dHJpYnV0ZSB1c2VkIHRvIGRlY2xhcmUgdGhlIFdNTCBuYW1lc3BhY2Ugd2l0aCB0aGUgV01MIHByZWZpeC4NCi0tLT4NCi08IUVOVElUWSAlIFdNTC54bWxucy5leHRyYS5hdHRyaWIgInhtbG5zOiVXTUwucHJlZml4OwkgJVVSSS5kYXRhdHlwZTsgCQkjRklYRUQgCSclV01MLnhtbG5zOyciPg0KLTwhLS0NCi0JQWxsIFdNTCBxdWFsaWZpZWQgbmFtZXMuIA0KLQkNCi0JTm90ZSB0aGF0IGVsZW1lbnQgbmFtZXMgYXJlIG5vdCBwcmVmaXhlZC4gT25seSBhdHRyaWJ1dGUgbmFtZXMgYXJlLg0KLS0tPg0KLTwhRU5USVRZICUgY2FyZC5xbmFtZSAiJVdNTC5wZng7Y2FyZCI+DQotPCFFTlRJVFkgJSBkby5xbmFtZSAiJVdNTC5wZng7ZG8iPg0KLTwhRU5USVRZICUgYWNjZXNzLnFuYW1lICIlV01MLnBmeDthY2Nlc3MiPg0KLTwhRU5USVRZICUgZ28ucW5hbWUgIiVXTUwucGZ4O2dvIj4NCi08IUVOVElUWSAlIHByZXYucW5hbWUgIiVXTUwucGZ4O3ByZXYiPg0KLTwhRU5USVRZICUgcmVmcmVzaC5xbmFtZSAiJVdNTC5wZng7cmVmcmVzaCI+DQotPCFFTlRJVFkgJSBub29wLnFuYW1lICIlV01MLnBmeDtub29wIj4NCi08IUVOVElUWSAlIG9uZXZlbnQucW5hbWUgIiVXTUwucGZ4O29uZXZlbnQiPg0KLTwhRU5USVRZICUgcG9zdGZpZWxkLnFuYW1lICIlV01MLnBmeDtwb3N0ZmllbGQiPg0KLTwhRU5USVRZICUgc2V0dmFyLnFuYW1lICIlV01MLnBmeDtzZXR2YXIiPg0KLTwhRU5USVRZICUgZ2V0dmFyLnFuYW1lICIlV01MLnBmeDtnZXR2YXIiPg0KLTwhRU5USVRZICUgdGltZXIucW5hbWUgIiVXTUwucGZ4O3RpbWVyIj4NCi08IUVOVElUWSAlIHdpZGdldC5xbmFtZSAiJVdNTC5wZng7d2lkZ2V0Ij4NCi08IUVOVElUWSAlIGFuY2hvci5xbmFtZSAiJVdNTC5wZng7YW5jaG9yIj4NCi08IUVOVElUWSAlIGF0dC5mb3J1YS5xbmFtZSAiJVdNTC5wZng7Zm9ydWEiPg0KLTwhRU5USVRZICUgYXR0LnZhbHVlLnFuYW1lICIlV01MLnBmeDt2YWx1ZSI+DQotPCFFTlRJVFkgJSBhdHQuaW5hbWUucW5hbWUgIiVXTUwucGZ4O2luYW1lIj4NCi08IUVOVElUWSAlIGF0dC5uYW1lLnFuYW1lICIlV01MLnBmeDtuYW1lIj4NCi08IUVOVElUWSAlIGF0dC5pdmFsdWUucW5hbWUgIiVXTUwucGZ4O2l2YWx1ZSI+DQotPCFFTlRJVFkgJSBhdHQuZm9ybWF0LnFuYW1lICIlV01MLnBmeDtmb3JtYXQiPg0KLTwhRU5USVRZICUgYXR0LmVtcHR5b2sucW5hbWUgIiVXTUwucGZ4O2VtcHR5b2siPg0KLTwhRU5USVRZICUgYXR0LmxvY2Fsc3JjLnFuYW1lICIlV01MLnBmeDtsb2NhbHNyYyI+DQotPCFFTlRJVFkgJSBhdHQuY29sdW1ucy5xbmFtZSAiJVdNTC5wZng7Y29sdW1ucyI+DQotPCFFTlRJVFkgJSBhdHQuYWxpZ24ucW5hbWUgIiVXTUwucGZ4O2FsaWduIj4NCi08IUVOVElUWSAlIGF0dC5tb2RlLnFuYW1lICIlV01MLnBmeDttb2RlIj4NCi08IUVOVElUWSAlIGF0dC5vbmVudGVyZm9yd2FyZC5xbmFtZSAiJVdNTC5wZng7b25lbnRlcmZvcndhcmQiPg0KLTwhRU5USVRZICUgYXR0Lm9uZW50ZXJiYWNrd2FyZC5xbmFtZSAiJVdNTC5wZng7b25lbnRlcmJhY2t3YXJkIj4NCi08IUVOVElUWSAlIGF0dC5vbnRpbWVyLnFuYW1lICIlV01MLnBmeDtvbnRpbWVyIj4NCi08IUVOVElUWSAlIGF0dC5vbnBpY2sucW5hbWUgIiVXTUwucGZ4O29ucGljayI+DQotPCFFTlRJVFkgJSBhdHQubmV3Y29udGV4dC5xbmFtZSAiJVdNTC5wZng7bmV3Y29udGV4dCI+DQotPCFFTlRJVFkgJSBhdHQudXNleG1sZnJhZ21lbnQucW5hbWUgIiVXTUwucGZ4O3VzZS14bWwtZnJhZ21lbnRzIj4NCi08IUVOVElUWSAlIGF0dC50eXBlLnFuYW1lICIlV01MLnBmeDt0eXBlIj4NCi08IS0tDQotCVRoZSB1IGVsZW1lbnQgaXMgbm90IGRlY2xhcmVkIGluIFhIVE1MLCBiZWNhdXNlIGl0IGhhcyBiZWVkIHJlbW92ZWQgZnJvbSB0aGUgbGFuZ3VhZ2UuIA0KLQlTbyBpdCBtdXN0IGJlIGRlY2xhcmVkIGhlcmUuIEl0IGlzLCBob3dldmVyLCBkZXByZWNhdGVkIGluIFdNTC4gDQotLS0+DQotPCFFTlRJVFkgJSB1LnFuYW1lICJ1Ij4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwtc3BlY2lhbC0xLm1vZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3dtbC1zcGVjaWFsLTEubW9kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDg1OTExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3dtbC1zcGVjaWFsLTEubW9kCisrKyAvZGV2L251bGwKQEAgLTEsMjQ4ICswLDAgQEAKLTwhLS0gV01MIDIuMCBTcGVjaWFsIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogd21sLXNwZWNpYWwtMS5tb2QgLS0+DQotPCEtLSANCi0gICAgQFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtLCBMdGQuIDIwMDEuDQotDQotCVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gDQotCVdlYiBzaXRlIChodHRwOi8vd3d3LndhcGZvcnVtLm9yZy93aGF0L2NvcHlyaWdodC5odG0pLg0KLS0tPg0KLTwhLS0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XQVBGT1JVTS8vRUxFTUVOVFMgV01MIFNwZWNpYWwgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJ3bWwtc3BlY2lhbC0xLm1vZCINCi0NCi0JVGhpcyBtb2R1bGUgY29udGFpbnMgZGVjbGFyYXRpb25zIG9mIHRoZSBmb2xsb3dpbmcgV01MIGVsZW1lbnRzLiANCi0JDQotCQljYXJkLCBkbywgb25ldmVudCwgYWNjZXNzLCBnbywgcHJldiwNCi0JCXJlZnJlc2gsIG5vb3AsICBwb3N0ZmllbGQsIHNldHZhciwgZ2V0dmFyDQotCQl0aW1lciwgYW5jaG9yDQotCQkNCi0JSXQgYWxzbyBjb250YWlucyBXTUwgZXh0ZW5zaW9ucyBvZiBYSFRNTCBlbGVtZW50cy4gDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIA0KLQlXTUwgR2xvYmFsIGF0dHJpYnV0ZXMNCi0tLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gDQotCVdNTCBFdmVudCBhdHRyaWJ1dGVzDQotCQ0KLQlUaGVzZSBhcmUgdXNlZCBvbiB0aGUgWEhUTUwgYm9keSBhbmQgaHRtbCBlbGVtZW50cy4NCi0JVGhlIHNhbWUgYXR0cmlidXRlcyBhcmUgYWxzbyBhdmFpbGFibGUgb24gdGhlIFdNTCBjYXJkIGVsZW1lbnQsIGJ1dA0KLQl3aXRob3V0IG5hbWVzcGFjZSBwcmVmaXguDQotLS0+DQotPCFFTlRJVFkgJSBXTUwuZXZlbnQuYXR0cmliICIlYXR0Lm9uZW50ZXJmb3J3YXJkLnFuYW1lOyBDREFUQQkjSU1QTElFRA0KLSAlYXR0Lm9uZW50ZXJiYWNrd2FyZC5xbmFtZTsgQ0RBVEEJI0lNUExJRUQNCi0gJWF0dC5vbnRpbWVyLnFuYW1lOyBDREFUQQkjSU1QTElFRCI+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIA0KLQlXTUwgRWxlbWVudHMNCi0tLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gDQotCUNhcmRzIA0KLQkNCi0JVXNlIHNhbWUgY29udGVudCBtb2RlbCBhcyB0aGUgSFRNTCBib2R5IGVsZW1lbnQNCi0tLT4NCi08IUVMRU1FTlQgJWNhcmQucW5hbWU7ICVDYXJkQm9keS5taXg7Pg0KLTwhQVRUTElTVCAlY2FyZC5xbmFtZTsNCi0JJUNvbW1vbi5hdHRyaWI7IA0KLQluZXdjb250ZXh0ICVCb29sZWFuLmRhdGF0eXBlOyAiZmFsc2UiDQotCW9uZW50ZXJmb3J3YXJkIENEQVRBICNJTVBMSUVEDQotCW9uZW50ZXJiYWNrd2FyZCBDREFUQSAjSU1QTElFRA0KLQlvbnRpbWVyIENEQVRBICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCURvIA0KLS0tPg0KLTwhRUxFTUVOVCAlZG8ucW5hbWU7ICglVGFza3MuY2xhc3M7KT4NCi08IUFUVExJU1QgJWRvLnFuYW1lOw0KLQklQ29tbW9uLmF0dHJpYjsgDQotICAJdHlwZSAgICAgICAgICAgICBDREFUQSAgICAgICAjUkVRVUlSRUQNCi0gIAlsYWJlbCAgICAgICAgICAgICBDREFUQSAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQlPbmV2ZW50IA0KLS0tPg0KLTwhRUxFTUVOVCAlb25ldmVudC5xbmFtZTsgJVRhc2tzLmNsYXNzOz4NCi08IUFUVExJU1QgJW9uZXZlbnQucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotCXR5cGUgQ0RBVEEgI1JFUVVJUkVEDQotPg0KLTwhLS0gDQotCUFjY2VzcyANCi0tLT4NCi08IUVMRU1FTlQgJWFjY2Vzcy5xbmFtZTsgRU1QVFk+DQotPCFBVFRMSVNUICVhY2Nlc3MucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotCWRvbWFpbiBDREFUQSAjSU1QTElFRA0KLQlwYXRoIENEQVRBICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCUdvIA0KLS0tPg0KLTwhRU5USVRZICUgY2FjaGUtY29udHJvbCAnKG5vLWNhY2hlKSc+DQotPCFFTEVNRU5UICVnby5xbmFtZTsgKCVwb3N0ZmllbGQucW5hbWU7IHwgJXNldHZhci5xbmFtZTspKj4NCi08IUFUVExJU1QgJWdvLnFuYW1lOw0KLQklQ29yZS5hdHRyaWI7IA0KLQlocmVmICVVUkkuZGF0YXR5cGU7ICNSRVFVSVJFRA0KLQlzZW5kcmVmZXJlciAlQm9vbGVhbi5kYXRhdHlwZTsgImZhbHNlIg0KLQl0eXBlICVDb250ZW50VHlwZS5kYXRhdHlwZTsgI0lNUExJRUQNCi0JbWV0aG9kIChwb3N0IHwgZ2V0KSAiZ2V0Ig0KLQllbmN0eXBlICVDb250ZW50VHlwZS5kYXRhdHlwZTsgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCINCi0JYWNjZXB0LWNoYXJzZXQgQ0RBVEEgI0lNUExJRUQNCi0JY2FjaGUtY29udHJvbCAlY2FjaGUtY29udHJvbDsgI0lNUExJRUQNCi0+DQotPCEtLSANCi0JUHJldiANCi0tLT4NCi08IUVMRU1FTlQgJXByZXYucW5hbWU7ICglc2V0dmFyLnFuYW1lOykqPg0KLTwhQVRUTElTVCAlcHJldi5xbmFtZTsNCi0JJUNvcmUuYXR0cmliOyANCi0+DQotPCEtLSANCi0JUmVmcmVzaCANCi0tLT4NCi08IUVMRU1FTlQgJXJlZnJlc2gucW5hbWU7ICglc2V0dmFyLnFuYW1lOykqPg0KLTwhQVRUTElTVCAlcmVmcmVzaC5xbmFtZTsNCi0JJUNvcmUuYXR0cmliOyANCi0+DQotPCEtLSANCi0JTm9vcCANCi0tLT4NCi08IUVMRU1FTlQgJW5vb3AucW5hbWU7IEVNUFRZPg0KLTwhQVRUTElTVCAlbm9vcC5xbmFtZTsNCi0JJUNvcmUuYXR0cmliOyANCi0+DQotPCEtLSANCi0JUG9zdGZpZWxkIA0KLS0tPg0KLTwhRUxFTUVOVCAlcG9zdGZpZWxkLnFuYW1lOyBFTVBUWT4NCi08IUFUVExJU1QgJXBvc3RmaWVsZC5xbmFtZTsNCi0JJUNvcmUuYXR0cmliOyANCi0JbmFtZSBDREFUQSAjUkVRVUlSRUQNCi0JdmFsdWUgQ0RBVEEgI1JFUVVJUkVEDQotPg0KLTwhLS0gDQotCVNldHZhciANCi0tLT4NCi08IUVMRU1FTlQgJXNldHZhci5xbmFtZTsgRU1QVFk+DQotPCFBVFRMSVNUICVzZXR2YXIucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotCW5hbWUgQ0RBVEEgI1JFUVVJUkVEDQotCXZhbHVlIENEQVRBICNSRVFVSVJFRA0KLT4NCi08IS0tIA0KLQlHZXR2YXINCi0tLT4NCi08IUVMRU1FTlQgJWdldHZhci5xbmFtZTsgRU1QVFk+DQotPCFBVFRMSVNUICVnZXR2YXIucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotCW5hbWUgQ0RBVEEgI1JFUVVJUkVEDQotCWNvbnZlcnNpb24gKGVzY2FwZSB8IG5vZXNjIHwgdW5lc2MpICJub2VzYyINCi0+DQotPCEtLSANCi0JVGltZXIgIA0KLS0tPg0KLTwhRUxFTUVOVCAldGltZXIucW5hbWU7IEVNUFRZPg0KLTwhQVRUTElTVCAldGltZXIucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotCW5hbWUgTk1UT0tFTiAjSU1QTElFRA0KLQl2YWx1ZSBDREFUQSAjUkVRVUlSRUQNCi0+DQotPCEtLSANCi0JQW5jaG9yIA0KLQkNCi0JU2FtZSBjb250ZW50IG1vZGVsIGFzIEhUTUwgYSBlbGVtZW50LCBidXQgZXh0ZW5kZWQgd2l0aCBXTUwgdGFza3MuDQotLS0+DQotPCFFTEVNRU5UICVhbmNob3IucW5hbWU7ICgjUENEQVRBIHwgJUlubE5vQW5jaG9yLm1peDsgfCAlVGFza3Mtbm9ub29wLmNsYXNzOykqPg0KLTwhQVRUTElTVCAlYW5jaG9yLnFuYW1lOw0KLQklQ29tbW9uLmF0dHJpYjsgDQotCWFjY2Vzc2tleSBDREFUQSAjSU1QTElFRA0KLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gDQotCVdNTCBleHRlbnNpb25zIG9mIFhIVE1MIGVsZW1lbnRzDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIA0KLQlzZWxlY3QgDQotCQ0KLQkqV01MIGluYW1lLCBpdmFsdWUsIHZhbHVlLCBhbmQgbmFtZSBhdHRyaWJ1dGVzDQotCSpYSFRNTCB0YWJpbmRleCAobm90IGluIEJhc2ljIEZvcm1zIG1vZHVsZSkNCi0tLT4NCi08IUFUVExJU1QgJXNlbGVjdC5xbmFtZTsNCi0JJWF0dC5pbmFtZS5xbmFtZTsgTk1UT0tFTiAjSU1QTElFRA0KLQklYXR0LnZhbHVlLnFuYW1lOyBDREFUQSAjSU1QTElFRA0KLQklYXR0Lml2YWx1ZS5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0JJWF0dC5uYW1lLnFuYW1lOyBDREFUQSAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQlpbnB1dCANCi0JDQotCSpXTUwgZm9ybWF0LCBlbXB0eW9rLCBhbmQgbmFtZSBhdHRyaWJ1dGVzDQotCSpYSFRNTCB0YWJpbmRleCAobm90IGluIEJhc2ljIEZvcm1zIG1vZHVsZSkNCi0tLT4NCi08IUFUVExJU1QgJWlucHV0LnFuYW1lOw0KLQklYXR0LmZvcm1hdC5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0JJWF0dC5lbXB0eW9rLnFuYW1lOyAlQm9vbGVhbi5kYXRhdHlwZTsgI0lNUExJRUQNCi0JJWF0dC5uYW1lLnFuYW1lOyBDREFUQSAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQl0ZXh0YXJlYQ0KLQkNCi0JKldNTCBmb3JtYXQsIGVtcHR5b2ssIGFuZCBuYW1lIGF0dHJpYnV0ZXMNCi0JKlhIVE1MIHRhYmluZGV4IGF0dHJpYnV0ZSAobm90IGluIEJhc2ljIEZvcm1zIG1vZHVsZSkNCi0tLT4NCi08IUFUVExJU1QgJXRleHRhcmVhLnFuYW1lOw0KLQklYXR0LmZvcm1hdC5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0JJWF0dC5lbXB0eW9rLnFuYW1lOyAlQm9vbGVhbi5kYXRhdHlwZTsgI0lNUExJRUQNCi0JJWF0dC5uYW1lLnFuYW1lOyBDREFUQSAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQlvcHRpb24NCi0JDQotCSpXTUwgb25waWNrIGF0dHJpYnV0ZQ0KLS0tPg0KLTwhQVRUTElTVCAlb3B0aW9uLnFuYW1lOw0KLQklYXR0Lm9ucGljay5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0+DQotPCEtLSANCi0JaW1nIA0KLQ0KLQkqV01MIGxvY2Fsc3JjIGF0dHJpYnV0ZQ0KLS0tPg0KLTwhQVRUTElTVCBpbWcNCi0JJWF0dC5sb2NhbHNyYy5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0JJWF0dC50eXBlLnFuYW1lOyAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCXRhYmxlIA0KLQkNCi0JKldNTCBjb2x1bW5zIGF0dHJpYnV0ZQ0KLQkNCi0tLT4NCi08IUFUVExJU1QgJXRhYmxlLnFuYW1lOw0KLQklYXR0LmNvbHVtbnMucW5hbWU7ICVOdW1iZXIuZGF0YXR5cGU7ICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCWJvZHkgDQotCQ0KLQkqV01MIG5ld2NvbnRleHQgDQotCSpXTUwgZXZlbnQgYXR0cmlidXRlcw0KLS0tPg0KLTwhQVRUTElTVCAlYm9keS5xbmFtZTsNCi0JJWF0dC5uZXdjb250ZXh0LnFuYW1lOyAlQm9vbGVhbi5kYXRhdHlwZTsgImZhbHNlIg0KLQklV01MLmV2ZW50LmF0dHJpYjsgDQotPg0KLTwhLS0gDQotCWh0bWwgDQotCQ0KLQkqRGVjbGFyYXRpb24gb2YgV01MIG5hbWVzcGFjZSB3aXRoIHByZWZpeAkNCi0JKldNTCBldmVudCBhdHRyaWJ1dGVzDQotLS0+DQotPCFBVFRMSVNUICVodG1sLnFuYW1lOw0KLQklV01MLnhtbG5zLmV4dHJhLmF0dHJpYjsgDQotCSVXTUwuZXZlbnQuYXR0cmliOyANCi0+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sMjAtZmxhdC5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwyMC1mbGF0LmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA1NzBhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwyMC1mbGF0LmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDM2MDkgKzAsMCBAQAotPCEtLSBXTUwgMi4wIERURCAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogd21sMjAuZHRkIC0tPg0KLTwhLS0gDQotICAgIEBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSwgTHRkLiAyMDAxLg0KLQ0KLQlUZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIA0KLQlXZWIgc2l0ZSAoaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvd2hhdC9jb3B5cmlnaHQuaHRtKS4NCi0tLT4NCi08IS0tDQotCVRoaXMgaXMgdGhlIFdNTCAyLjAgRFREIGRyaXZlciBmaWxlLiBQbGVhc2UgdXNlIHRoaXMgZm9ybWFsIHB1YmxpYyBpZGVudGlmaWVyIHRvIGlkZW50aWZ5IGl0Og0KLQ0KLSAgICAgICAgICItLy9XQVBGT1JVTS8vRFREIFdNTCAyLjAvL0VOIg0KLSAgICAgICAgICAgICAgICAgICAJICAgICAgICAgIA0KLSAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgdXNpbmcgV01MIDIuMCBkaXJlY3RseSwgdXNlDQotICAgICB0aGUgRlBJIGluIHRoZSBET0NUWVBFIGRlY2xhcmF0aW9uLCB3aXRoIHRoZSB4bWxucyBhdHRyaWJ1dGUNCi0gICAgIG9uIHRoZSBkb2N1bWVudCBlbGVtZW50IHRvIGlkZW50aWZ5IHRoZSBkZWZhdWx0IG5hbWVzcGFjZToNCi0NCi0gICAgICAgICA8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi0gICAgICAgICA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDIuMC8vRU4iDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9kdGQvd21sMjAuZHRkIiA+DQotICAgICAgICAgPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiDQotICAgICAgICAgICAgICAgICAgIHhtbG5zOndtbD0iaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvMjAwMS93bWwiPg0KLSAgICAgICAgIC4uLg0KLSAgICAgICAgIDwvaHRtbD4NCi0NCi0tLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0NCi0JCVZlcnNpb24sIFhNTCBOYW1lc3BhY2VzLCBhbmQgcHJvZmlsZSBpbmZvcm1hdGlvbiANCi0tLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0NCi0JVmFsdWUgb2YgWEhUTUwgdmVyc2lvbiBhdHRyaWJ1dGUgDQotLS0+DQotPCFFTlRJVFkgJSBYSFRNTC52ZXJzaW9uICItLy9XQVBGT1JVTS8vRFREIFdNTCAyLjAvL0VOIj4NCi08IS0tIA0KLQlWYWx1ZSBvZiBYSFRNTCBwcm9maWxlIGF0dHJpYnV0ZQ0KLQkNCi0JUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2Ugd2l0aCBkb2N1bWVudCBwcm9maWxlcyANCi0tLT4NCi08IUVOVElUWSAlIFhIVE1MLnByb2ZpbGUgIiI+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tDQotCQlNb2R1bGFyaXNhdGlvbiBmcmFtZXdvcmsgc2V0dXANCi0tLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhRU5USVRZICUgd21sLWZyYW1ld29yay5tb2QgUFVCTElDICItLy9XQVBGT1JVTS8vRU5USVRJRVMgV01MIE1vZHVsYXIgRnJhbWV3b3JrIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWwtZnJhbWV3b3JrLTEubW9kIj4NCi08IS0tIFdNTCBNb2R1bGFyIEZyYW1ld29yayAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB3bWwtZnJhbWV3b3JrLTEubW9kIC0tPg0KLTwhLS0gDQotICAgIEBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSwgTHRkLiAyMDAxLg0KLQ0KLQlUZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIA0KLQlXZWIgc2l0ZSAoaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvd2hhdC9jb3B5cmlnaHQuaHRtKS4NCi0tLT4NCi08IS0tDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VOVElUSUVTIFdNTCBNb2R1bGFyIEZyYW1ld29yayAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL2R0ZC93bWwtZnJhbWV3b3JrLTEubW9kIg0KLSAgICAgICANCi0gICAgICAgVGhpcyBpcyBhbiBleHRlbnNpb24gb2YgdGhlIFhIVE1MIE1vZHVsYXIgRnJhbWV3b3JrIG1vZHVsZS4gSW4gYWRkaXRpb24gdG8gdGhlIA0KLSAgICAgICByZXF1aXJlZCBYSFRNTCBlbnRpdGllcyBpdCBpbmNsdWRlczoNCi0gICAgICAgDQotICAgICAgIAkJKldNTCBkYXRhdHlwZXMNCi0gICAgICAgCQkqV01MIG5hbWVzcGFjZSBxdWFsaWZpZWQgbmFtZXMNCi0gICAgICAgCQkqV01MIGRvY3VtZW50IG1vZGVsICAgICAgIA0KLS0tPg0KLTwhLS0gDQotCVhIVE1MIG5vdGF0aW9ucw0KLS0tPg0KLTwhRU5USVRZICUgeGh0bWwtbm90YXRpb25zLm1vZCBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT05TIFhIVE1MIE5vdGF0aW9ucyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbm90YXRpb25zLTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBOb3RhdGlvbnMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtbm90YXRpb25zLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OUyBYSFRNTCBOb3RhdGlvbnMgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbm90YXRpb25zLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIE5vdGF0aW9ucw0KLQ0KLSAgICAgZGVmaW5lcyB0aGUgZm9sbG93aW5nIG5vdGF0aW9ucywgbWFueSBvZiB0aGVzZSBpbXBvcnRlZCBmcm9tDQotICAgICBvdGhlciBzcGVjaWZpY2F0aW9ucyBhbmQgc3RhbmRhcmRzLiBXaGVuIGFuIGV4aXN0aW5nIEZQSSBpcw0KLSAgICAga25vd24sIGl0IGlzIGluY29ycG9yYXRlZCBoZXJlLg0KLS0tPg0KLQ0KLTwhLS0gWE1MIE5vdGF0aW9ucyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gU0dNTCBhbmQgWE1MIE5vdGF0aW9ucyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gVzNDIFhNTCAxLjAgUmVjb21tZW5kYXRpb24gLS0+DQotPCFOT1RBVElPTiB3M2MteG1sDQotICAgICBQVUJMSUMgIklTTyA4ODc5Ly9OT1RBVElPTiBFeHRlbnNpYmxlIE1hcmt1cCBMYW5ndWFnZSAoWE1MKSAxLjAvL0VOIiA+DQotDQotPCEtLSBYTUwgMS4wIENEQVRBIC0tPg0KLTwhTk9UQVRJT04gY2RhdGENCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYTUwgMS4wOiBDREFUQS8vRU4iID4NCi0NCi08IS0tIFNHTUwgRm9ybWFsIFB1YmxpYyBJZGVudGlmaWVycyAtLT4NCi08IU5PVEFUSU9OIGZwaQ0KLSAgICAgUFVCTElDICJJU08gODg3OToxOTg2Ly9OT1RBVElPTiBGb3JtYWwgUHVibGljIElkZW50aWZpZXIvL0VOIiA+DQotDQotPCEtLSBYSFRNTCBOb3RhdGlvbnMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBMZW5ndGggZGVmaW5lZCBmb3IgY2VsbHBhZGRpbmcvY2VsbHNwYWNpbmcgLS0+DQotDQotPCEtLSBubiBmb3IgcGl4ZWxzIG9yIG5uJSBmb3IgcGVyY2VudGFnZSBsZW5ndGggLS0+DQotPCFOT1RBVElPTiBsZW5ndGgNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBMZW5ndGgvL0VOIiA+DQotDQotPCEtLSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBsaW5rIHR5cGVzIC0tPg0KLTwhTk9UQVRJT04gbGlua1R5cGVzDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogTGlua1R5cGVzLy9FTiIgPg0KLQ0KLTwhLS0gc2luZ2xlIG9yIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG1lZGlhIGRlc2NyaXB0b3JzIC0tPg0KLTwhTk9UQVRJT04gbWVkaWFEZXNjDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogTWVkaWFEZXNjLy9FTiIgPg0KLQ0KLTwhLS0gcGl4ZWwsIHBlcmNlbnRhZ2UsIG9yIHJlbGF0aXZlIC0tPg0KLTwhTk9UQVRJT04gbXVsdGlMZW5ndGgNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBNdWx0aUxlbmd0aC8vRU4iID4NCi0NCi08IS0tIG9uZSBvciBtb3JlIGRpZ2l0cyAoTlVNQkVSKSAtLT4NCi08IU5PVEFUSU9OIG51bWJlcg0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IE51bWJlci8vRU4iID4NCi0NCi08IS0tIGludGVnZXIgcmVwcmVzZW50aW5nIGxlbmd0aCBpbiBwaXhlbHMgLS0+DQotPCFOT1RBVElPTiBwaXhlbHMNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBQaXhlbHMvL0VOIiA+DQotDQotPCEtLSBzY3JpcHQgZXhwcmVzc2lvbiAtLT4NCi08IU5PVEFUSU9OIHNjcmlwdA0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IFNjcmlwdC8vRU4iID4NCi0NCi08IS0tIHRleHR1YWwgY29udGVudCAtLT4NCi08IU5PVEFUSU9OIHRleHQNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBUZXh0Ly9FTiIgPg0KLQ0KLTwhLS0gSW1wb3J0ZWQgTm90YXRpb25zIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gYSBzaW5nbGUgY2hhcmFjdGVyIGZyb20gW0lTTzEwNjQ2XSAtLT4NCi08IU5PVEFUSU9OIGNoYXJhY3Rlcg0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IENoYXJhY3Rlci8vRU4iID4NCi0NCi08IS0tIGEgY2hhcmFjdGVyIGVuY29kaW5nLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLTwhTk9UQVRJT04gY2hhcnNldA0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IENoYXJzZXQvL0VOIiA+DQotDQotPCEtLSBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNoYXJhY3RlciBlbmNvZGluZ3MsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotPCFOT1RBVElPTiBjaGFyc2V0cw0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IENoYXJzZXRzLy9FTiIgPg0KLQ0KLTwhLS0gbWVkaWEgdHlwZSwgYXMgcGVyIFtSRkMyMDQ1XSAtLT4NCi08IU5PVEFUSU9OIGNvbnRlbnRUeXBlDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogQ29udGVudFR5cGUvL0VOIiA+DQotDQotPCEtLSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBtZWRpYSB0eXBlcywgYXMgcGVyIFtSRkMyMDQ1XSAtLT4NCi08IU5PVEFUSU9OIGNvbnRlbnRUeXBlcw0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IENvbnRlbnRUeXBlcy8vRU4iID4NCi0NCi08IS0tIGRhdGUgYW5kIHRpbWUgaW5mb3JtYXRpb24uIElTTyBkYXRlIGZvcm1hdCAtLT4NCi08IU5PVEFUSU9OIGRhdGV0aW1lDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogRGF0ZXRpbWUvL0VOIiA+DQotDQotPCEtLSBhIGxhbmd1YWdlIGNvZGUsIGFzIHBlciBbUkZDMzA2Nl0gLS0+DQotPCFOT1RBVElPTiBsYW5ndWFnZUNvZGUNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBMYW5ndWFnZUNvZGUvL0VOIiA+DQotDQotPCEtLSBhIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgc2VlIFtVUkldIC0tPg0KLTwhTk9UQVRJT04gdXJpDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogVVJJLy9FTiIgPg0KLQ0KLTwhLS0gYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXJzLCBzZWUgW1VSSV0gLS0+DQotPCFOT1RBVElPTiB1cmlzDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogVVJJcy8vRU4iID4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1ub3RhdGlvbnMtMS5tb2QgLS0+DQotDQotPCEtLSANCi0JV01MIGRhdGF0eXBlcw0KLS0tPg0KLTwhRU5USVRZICUgQm9vbGVhbi5kYXRhdHlwZSAiKHRydWV8ZmFsc2UpIj4NCi08IS0tIA0KLQlYSFRNTCBkYXRhdHlwZXMNCi0tLT4NCi08IUVOVElUWSAlIHhodG1sLWRhdGF0eXBlcy5tb2QgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIERhdGF0eXBlcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtZGF0YXR5cGVzLTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBEYXRhdHlwZXMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtZGF0YXR5cGVzLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBEYXRhdHlwZXMgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtZGF0YXR5cGVzLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIERhdGF0eXBlcw0KLQ0KLSAgICAgZGVmaW5lcyBjb250YWluZXJzIGZvciB0aGUgZm9sbG93aW5nIGRhdGF0eXBlcywgbWFueSBvZg0KLSAgICAgdGhlc2UgaW1wb3J0ZWQgZnJvbSBvdGhlciBzcGVjaWZpY2F0aW9ucyBhbmQgc3RhbmRhcmRzLg0KLS0tPg0KLQ0KLTwhLS0gTGVuZ3RoIGRlZmluZWQgZm9yIGNlbGxwYWRkaW5nL2NlbGxzcGFjaW5nIC0tPg0KLQ0KLTwhLS0gbm4gZm9yIHBpeGVscyBvciBubiUgZm9yIHBlcmNlbnRhZ2UgbGVuZ3RoIC0tPg0KLTwhRU5USVRZICUgTGVuZ3RoLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgbGluayB0eXBlcyAtLT4NCi08IUVOVElUWSAlIExpbmtUeXBlcy5kYXRhdHlwZSAiTk1UT0tFTlMiID4NCi0NCi08IS0tIHNpbmdsZSBvciBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBtZWRpYSBkZXNjcmlwdG9ycyAtLT4NCi08IUVOVElUWSAlIE1lZGlhRGVzYy5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIHBpeGVsLCBwZXJjZW50YWdlLCBvciByZWxhdGl2ZSAtLT4NCi08IUVOVElUWSAlIE11bHRpTGVuZ3RoLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gb25lIG9yIG1vcmUgZGlnaXRzIChOVU1CRVIpIC0tPg0KLTwhRU5USVRZICUgTnVtYmVyLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gaW50ZWdlciByZXByZXNlbnRpbmcgbGVuZ3RoIGluIHBpeGVscyAtLT4NCi08IUVOVElUWSAlIFBpeGVscy5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIHNjcmlwdCBleHByZXNzaW9uIC0tPg0KLTwhRU5USVRZICUgU2NyaXB0LmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gdGV4dHVhbCBjb250ZW50IC0tPg0KLTwhRU5USVRZICUgVGV4dC5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIEltcG9ydGVkIERhdGF0eXBlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIGEgc2luZ2xlIGNoYXJhY3RlciBmcm9tIFtJU08xMDY0Nl0gLS0+DQotPCFFTlRJVFkgJSBDaGFyYWN0ZXIuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBhIGNoYXJhY3RlciBlbmNvZGluZywgYXMgcGVyIFtSRkMyMDQ1XSAtLT4NCi08IUVOVElUWSAlIENoYXJzZXQuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNoYXJhY3RlciBlbmNvZGluZ3MsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotPCFFTlRJVFkgJSBDaGFyc2V0cy5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIENvbG9yIHNwZWNpZmljYXRpb24gdXNpbmcgY29sb3IgbmFtZSBvciBzUkdCICgjUlJHR0JCKSB2YWx1ZXMgLS0+DQotPCFFTlRJVFkgJSBDb2xvci5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIG1lZGlhIHR5cGUsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotPCFFTlRJVFkgJSBDb250ZW50VHlwZS5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG1lZGlhIHR5cGVzLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLTwhRU5USVRZICUgQ29udGVudFR5cGVzLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gZGF0ZSBhbmQgdGltZSBpbmZvcm1hdGlvbi4gSVNPIGRhdGUgZm9ybWF0IC0tPg0KLTwhRU5USVRZICUgRGF0ZXRpbWUuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBmb3JtYWwgcHVibGljIGlkZW50aWZpZXIsIGFzIHBlciBbSVNPODg3OV0gLS0+DQotPCFFTlRJVFkgJSBGUEkuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBhIGxhbmd1YWdlIGNvZGUsIGFzIHBlciBbUkZDMzA2Nl0gLS0+DQotPCFFTlRJVFkgJSBMYW5ndWFnZUNvZGUuZGF0YXR5cGUgIk5NVE9LRU4iID4NCi0NCi08IS0tIGEgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBzZWUgW1VSSV0gLS0+DQotPCFFTlRJVFkgJSBVUkkuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllcnMsIHNlZSBbVVJJXSAtLT4NCi08IUVOVElUWSAlIFVSSXMuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtZGF0YXR5cGVzLTEubW9kIC0tPg0KLQ0KLTwhLS0gDQotCVdNTCBxdWFsaWZpZWQgbmFtZXMNCi0tLT4NCi08IUVOVElUWSAlIHdtbC1xbmFtZS5tb2QgUFVCTElDICItLy9XQVBGT1JVTS8vRU5USVRJRVMgV01MIFF1YWxpZmllZCBOYW1lcyAxLjAvL0VOIg0KLSAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbC1xbmFtZS0xLm1vZCI+DQotPCEtLSBXTUwgUXVhbGlmaWVkIE5hbWVzIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB3bWwtcW5hbWUtMS5tb2QgLS0+DQotPCEtLSANCi0gICAgQFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtLCBMdGQuIDIwMDEuDQotDQotCVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gDQotCVdlYiBzaXRlIChodHRwOi8vd3d3LndhcGZvcnVtLm9yZy93aGF0L2NvcHlyaWdodC5odG0pLg0KLS0tPg0KLTwhLS0NCi0gICAgDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotCVBVQkxJQyAiLS8vV0FQRk9SVU0vL0VOVElUSUVTIFdNTCBRdWFsaWZpZWQgTmFtZXMgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJ3bWwtcW5hbWUtMS5tb2QiDQotDQotCVRoaXMgbW9kdWxlIGRlY2xhcmVzIFdNTCBuYW1lcyB3aXRoIHRoZSBXTUwgbmFtZXNwYWNlIHByZWZpeC4JDQotDQotLS0+DQotPCEtLQ0KLQlUaGUgV01MIG5hbWVzcGFjZSBuYW1lDQotLS0+DQotPCFFTlRJVFkgJSBXTUwueG1sbnMgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnLzIwMDEvd21sIj4NCi08IS0tDQotCVdNTCBuYW1lc3BhY2UgcHJlZml4DQotCQ0KLQlPbiBXTUwgZWxlbWVudHMgV01MIGlzIGRlY2xhcmVkIGFzIHRoZSBkZWZhdWx0IG5hbWVzcGFjZS4gDQotCU5hbWVzcGFjZSBwcmVmaXggaXMgdXNlZCBvbmx5IGZvciBXTUwgYXR0cmlidXRlcyBvbiBYSFRNTCBlbGVtZW50cy4NCi0tLT4NCi08IUVOVElUWSAlIFdNTC5wcmVmaXggIndtbCI+DQotPCEtLQ0KLQlQYXJhbWV0ZXIgZW50aXR5IHdpdGggdGhlIFdNTCBuYW1lc3BhY2UgcHJlZml4IHBsdXMgdGhlICI6Ii4gDQotCVRoZSBhY3R1YWwgcHJlZml4LCBXTUwucHJlZml4LCBpcyBkZWNsYXJlZCBpbiB0aGUgV01MIERURCBkcml2ZXIuIA0KLS0tPg0KLTwhRU5USVRZICUgV01MLnBmeCAiJVdNTC5wcmVmaXg7OiI+DQotPCEtLQ0KLQlBdHRyaWJ1dGUgdXNlZCB0byBkZWNsYXJlIHRoZSBXTUwgbmFtZXNwYWNlIHdpdGggdGhlIFdNTCBwcmVmaXguDQotLS0+DQotPCFFTlRJVFkgJSBXTUwueG1sbnMuZXh0cmEuYXR0cmliICJ4bWxuczolV01MLnByZWZpeDsJICVVUkkuZGF0YXR5cGU7IAkJI0ZJWEVEIAknJVdNTC54bWxuczsnIj4NCi08IS0tDQotCUFsbCBXTUwgcXVhbGlmaWVkIG5hbWVzLiANCi0JDQotCU5vdGUgdGhhdCBlbGVtZW50IG5hbWVzIGFyZSBub3QgcHJlZml4ZWQuIE9ubHkgYXR0cmlidXRlIG5hbWVzIGFyZS4NCi0tLT4NCi08IUVOVElUWSAlIGNhcmQucW5hbWUgIiVXTUwucGZ4O2NhcmQiPg0KLTwhRU5USVRZICUgZG8ucW5hbWUgIiVXTUwucGZ4O2RvIj4NCi08IUVOVElUWSAlIGFjY2Vzcy5xbmFtZSAiJVdNTC5wZng7YWNjZXNzIj4NCi08IUVOVElUWSAlIGdvLnFuYW1lICIlV01MLnBmeDtnbyI+DQotPCFFTlRJVFkgJSBwcmV2LnFuYW1lICIlV01MLnBmeDtwcmV2Ij4NCi08IUVOVElUWSAlIHJlZnJlc2gucW5hbWUgIiVXTUwucGZ4O3JlZnJlc2giPg0KLTwhRU5USVRZICUgbm9vcC5xbmFtZSAiJVdNTC5wZng7bm9vcCI+DQotPCFFTlRJVFkgJSBvbmV2ZW50LnFuYW1lICIlV01MLnBmeDtvbmV2ZW50Ij4NCi08IUVOVElUWSAlIHBvc3RmaWVsZC5xbmFtZSAiJVdNTC5wZng7cG9zdGZpZWxkIj4NCi08IUVOVElUWSAlIHNldHZhci5xbmFtZSAiJVdNTC5wZng7c2V0dmFyIj4NCi08IUVOVElUWSAlIGdldHZhci5xbmFtZSAiJVdNTC5wZng7Z2V0dmFyIj4NCi08IUVOVElUWSAlIHRpbWVyLnFuYW1lICIlV01MLnBmeDt0aW1lciI+DQotPCFFTlRJVFkgJSB3aWRnZXQucW5hbWUgIiVXTUwucGZ4O3dpZGdldCI+DQotPCFFTlRJVFkgJSBhbmNob3IucW5hbWUgIiVXTUwucGZ4O2FuY2hvciI+DQotPCFFTlRJVFkgJSBhdHQuZm9ydWEucW5hbWUgIiVXTUwucGZ4O2ZvcnVhIj4NCi08IUVOVElUWSAlIGF0dC52YWx1ZS5xbmFtZSAiJVdNTC5wZng7dmFsdWUiPg0KLTwhRU5USVRZICUgYXR0LmluYW1lLnFuYW1lICIlV01MLnBmeDtpbmFtZSI+DQotPCFFTlRJVFkgJSBhdHQubmFtZS5xbmFtZSAiJVdNTC5wZng7bmFtZSI+DQotPCFFTlRJVFkgJSBhdHQuaXZhbHVlLnFuYW1lICIlV01MLnBmeDtpdmFsdWUiPg0KLTwhRU5USVRZICUgYXR0LmZvcm1hdC5xbmFtZSAiJVdNTC5wZng7Zm9ybWF0Ij4NCi08IUVOVElUWSAlIGF0dC5lbXB0eW9rLnFuYW1lICIlV01MLnBmeDtlbXB0eW9rIj4NCi08IUVOVElUWSAlIGF0dC5sb2NhbHNyYy5xbmFtZSAiJVdNTC5wZng7bG9jYWxzcmMiPg0KLTwhRU5USVRZICUgYXR0LmNvbHVtbnMucW5hbWUgIiVXTUwucGZ4O2NvbHVtbnMiPg0KLTwhRU5USVRZICUgYXR0LmFsaWduLnFuYW1lICIlV01MLnBmeDthbGlnbiI+DQotPCFFTlRJVFkgJSBhdHQubW9kZS5xbmFtZSAiJVdNTC5wZng7bW9kZSI+DQotPCFFTlRJVFkgJSBhdHQub25lbnRlcmZvcndhcmQucW5hbWUgIiVXTUwucGZ4O29uZW50ZXJmb3J3YXJkIj4NCi08IUVOVElUWSAlIGF0dC5vbmVudGVyYmFja3dhcmQucW5hbWUgIiVXTUwucGZ4O29uZW50ZXJiYWNrd2FyZCI+DQotPCFFTlRJVFkgJSBhdHQub250aW1lci5xbmFtZSAiJVdNTC5wZng7b250aW1lciI+DQotPCFFTlRJVFkgJSBhdHQub25waWNrLnFuYW1lICIlV01MLnBmeDtvbnBpY2siPg0KLTwhRU5USVRZICUgYXR0Lm5ld2NvbnRleHQucW5hbWUgIiVXTUwucGZ4O25ld2NvbnRleHQiPg0KLTwhRU5USVRZICUgYXR0LnVzZXhtbGZyYWdtZW50LnFuYW1lICIlV01MLnBmeDt1c2UteG1sLWZyYWdtZW50cyI+DQotPCFFTlRJVFkgJSBhdHQudHlwZS5xbmFtZSAiJVdNTC5wZng7dHlwZSI+DQotPCEtLQ0KLQlUaGUgdSBlbGVtZW50IGlzIG5vdCBkZWNsYXJlZCBpbiBYSFRNTCwgYmVjYXVzZSBpdCBoYXMgYmVlZCByZW1vdmVkIGZyb20gdGhlIGxhbmd1YWdlLiANCi0JU28gaXQgbXVzdCBiZSBkZWNsYXJlZCBoZXJlLiBJdCBpcywgaG93ZXZlciwgZGVwcmVjYXRlZCBpbiBXTUwuIA0KLS0tPg0KLTwhRU5USVRZICUgdS5xbmFtZSAidSI+DQotDQotPCEtLSANCi0JWEhUTUwgcXVhbGlmaWVkIG5hbWVzDQotLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1xbmFtZS5tb2QgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIFF1YWxpZmllZCBOYW1lcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtcW5hbWUtMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBRbmFtZSBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLXFuYW1lLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBRdWFsaWZpZWQgTmFtZXMgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtcW5hbWUtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotIzIwMDAtMTAtMjI6IGFkZGVkIHFuYW1lIGRlY2xhcmF0aW9ucyBmb3IgcnVieSBlbGVtZW50cw0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBYSFRNTCBRbmFtZSAoUXVhbGlmaWVkIE5hbWUpIE1vZHVsZQ0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgaXMgY29udGFpbmVkIGluIHR3byBwYXJ0cywgbGFiZWxlZCBTZWN0aW9uICdBJyBhbmQgJ0InOg0KLQ0KLSAgICAgICBTZWN0aW9uIEEgZGVjbGFyZXMgcGFyYW1ldGVyIGVudGl0aWVzIHRvIHN1cHBvcnQgbmFtZXNwYWNlLQ0KLSAgICAgICBxdWFsaWZpZWQgbmFtZXMsIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMsIGFuZCBuYW1lIHByZWZpeGluZw0KLSAgICAgICBmb3IgWEhUTUwgYW5kIGV4dGVuc2lvbnMuDQotDQotICAgICAgIFNlY3Rpb24gQiBkZWNsYXJlcyBwYXJhbWV0ZXIgZW50aXRpZXMgdXNlZCB0byBwcm92aWRlDQotICAgICAgIG5hbWVzcGFjZS1xdWFsaWZpZWQgbmFtZXMgZm9yIGFsbCBYSFRNTCBlbGVtZW50IHR5cGVzOg0KLQ0KLSAgICAgICAgICVhcHBsZXQucW5hbWU7ICAgdGhlIHhtbG5zLXF1YWxpZmllZCBuYW1lIGZvciA8YXBwbGV0Pg0KLSAgICAgICAgICViYXNlLnFuYW1lOyAgICAgdGhlIHhtbG5zLXF1YWxpZmllZCBuYW1lIGZvciA8YmFzZT4NCi0gICAgICAgICAuLi4NCi0NCi0gICAgIFhIVE1MIGV4dGVuc2lvbnMgd291bGQgY3JlYXRlIGEgbW9kdWxlIHNpbWlsYXIgdG8gdGhpcyBvbmUuDQotICAgICBJbmNsdWRlZCBpbiB0aGUgWEhUTUwgZGlzdHJpYnV0aW9uIGlzIGEgdGVtcGxhdGUgbW9kdWxlDQotICAgICAoJ3RlbXBsYXRlLXFuYW1lLTEubW9kJykgc3VpdGFibGUgZm9yIHRoaXMgcHVycG9zZS4NCi0tLT4NCi0NCi08IS0tIFNlY3Rpb24gQTogWEhUTUwgWE1MIE5hbWVzcGFjZSBGcmFtZXdvcmsgOjo6Ojo6Ojo6Ojo6Ojo6Ojo6OjogLS0+DQotDQotPCEtLSAxLiBEZWNsYXJlIGEgJVhIVE1MLnByZWZpeGVkOyBjb25kaXRpb25hbCBzZWN0aW9uIGtleXdvcmQsIHVzZWQNCi0gICAgICAgIHRvIGFjdGl2YXRlIG5hbWVzcGFjZSBwcmVmaXhpbmcuIFRoZSBkZWZhdWx0IHZhbHVlIHNob3VsZA0KLSAgICAgICAgaW5oZXJpdCAnJU5TLnByZWZpeGVkOycgZnJvbSB0aGUgRFREIGRyaXZlciwgc28gdGhhdCB1bmxlc3MNCi0gICAgICAgIG92ZXJyaWRkZW4sIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBmb2xsb3dzIHRoZSBvdmVyYWxsIERURA0KLSAgICAgICAgcHJlZml4aW5nIHNjaGVtZS4NCi0tLT4NCi08IUVOVElUWSAlIE5TLnByZWZpeGVkICJJR05PUkUiID4NCi08IUVOVElUWSAlIFhIVE1MLnByZWZpeGVkICIlTlMucHJlZml4ZWQ7IiA+DQotDQotPCEtLSAyLiBEZWNsYXJlIGEgcGFyYW1ldGVyIGVudGl0eSAoZWcuLCAlWEhUTUwueG1sbnM7KSBjb250YWluaW5nDQotICAgICAgICB0aGUgVVJJIHJlZmVyZW5jZSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBYSFRNTCBuYW1lc3BhY2U6DQotLS0+DQotPCFFTlRJVFkgJSBYSFRNTC54bWxucyAgImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiID4NCi0NCi08IS0tIDMuIERlY2xhcmUgcGFyYW1ldGVyIGVudGl0aWVzIChlZy4sICVYSFRNTC5wcmVmaXg7KSBjb250YWluaW5nDQotICAgICAgICB0aGUgZGVmYXVsdCBuYW1lc3BhY2UgcHJlZml4IHN0cmluZyhzKSB0byB1c2Ugd2hlbiBwcmVmaXhpbmcNCi0gICAgICAgIGlzIGVuYWJsZWQuIFRoaXMgbWF5IGJlIG92ZXJyaWRkZW4gaW4gdGhlIERURCBkcml2ZXIgb3IgdGhlDQotICAgICAgICBpbnRlcm5hbCBzdWJzZXQgb2YgYW4gZG9jdW1lbnQgaW5zdGFuY2UuIElmIG5vIGRlZmF1bHQgcHJlZml4DQotICAgICAgICBpcyBkZXNpcmVkLCB0aGlzIG1heSBiZSBkZWNsYXJlZCBhcyBhbiBlbXB0eSBzdHJpbmcuDQotDQotICAgICBOT1RFOiBBcyBzcGVjaWZpZWQgaW4gW1hNTE5BTUVTXSwgdGhlIG5hbWVzcGFjZSBwcmVmaXggc2VydmVzDQotICAgICBhcyBhIHByb3h5IGZvciB0aGUgVVJJIHJlZmVyZW5jZSwgYW5kIGlzIG5vdCBpbiBpdHNlbGYgc2lnbmlmaWNhbnQuDQotLS0+DQotPCFFTlRJVFkgJSBYSFRNTC5wcmVmaXggICIiID4NCi0NCi08IS0tIDQuIERlY2xhcmUgcGFyYW1ldGVyIGVudGl0aWVzIChlZy4sICVYSFRNTC5wZng7KSBjb250YWluaW5nIHRoZQ0KLSAgICAgICAgY29sb25pemVkIHByZWZpeChlcykgKGVnLiwgJyVYSFRNTC5wcmVmaXg7OicpIHVzZWQgd2hlbg0KLSAgICAgICAgcHJlZml4aW5nIGlzIGFjdGl2ZSwgYW4gZW1wdHkgc3RyaW5nIHdoZW4gaXQgaXMgbm90Lg0KLS0tPg0KLTwhWyVYSFRNTC5wcmVmaXhlZDtbDQotPCFFTlRJVFkgJSBYSFRNTC5wZnggICIlWEhUTUwucHJlZml4OzoiID4NCi1dXT4NCi08IUVOVElUWSAlIFhIVE1MLnBmeCAgIiIgPg0KLQ0KLTwhLS0gZGVjbGFyZSBxdWFsaWZpZWQgbmFtZSBleHRlbnNpb25zIGhlcmUgLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtcW5hbWUtZXh0cmEubW9kICIiID4NCi0NCi0NCi08IS0tIDUuIFRoZSBwYXJhbWV0ZXIgZW50aXR5ICVYSFRNTC54bWxucy5leHRyYS5hdHRyaWI7IG1heSBiZQ0KLSAgICAgICAgcmVkZWNsYXJlZCB0byBjb250YWluIGFueSBub24tWEhUTUwgbmFtZXNwYWNlIGRlY2xhcmF0aW9uDQotICAgICAgICBhdHRyaWJ1dGVzIGZvciBuYW1lc3BhY2VzIGVtYmVkZGVkIGluIFhIVE1MLiBUaGUgZGVmYXVsdA0KLSAgICAgICAgaXMgYW4gZW1wdHkgc3RyaW5nLiAgWExpbmsgc2hvdWxkIGJlIGluY2x1ZGVkIGhlcmUgaWYgdXNlZA0KLSAgICAgICAgaW4gdGhlIERURC4NCi0tLT4NCi08IUVOVElUWSAlIFhIVE1MLnhtbG5zLmV4dHJhLmF0dHJpYiAiIiA+DQotDQotPCEtLSBUaGUgcmVtYWluZGVyIG9mIFNlY3Rpb24gQSBpcyBvbmx5IGZvbGxvd2VkIGluIFhIVE1MLCBub3QgZXh0ZW5zaW9ucy4gLS0+DQotDQotPCEtLSBEZWNsYXJlIGEgcGFyYW1ldGVyIGVudGl0eSAlTlMuZGVjbC5hdHRyaWI7IGNvbnRhaW5pbmcNCi0gICAgIGFsbCBYTUwgTmFtZXNwYWNlIGRlY2xhcmF0aW9ucyB1c2VkIGluIHRoZSBEVEQsIHBsdXMgdGhlDQotICAgICB4bWxucyBkZWNsYXJhdGlvbiBmb3IgWEhUTUwsIGl0cyBmb3JtIGRlcGVuZGVudCBvbiB3aGV0aGVyDQotICAgICBwcmVmaXhpbmcgaXMgYWN0aXZlLg0KLS0tPg0KLTwhWyVYSFRNTC5wcmVmaXhlZDtbDQotPCFFTlRJVFkgJSBOUy5kZWNsLmF0dHJpYg0KLSAgICAgInhtbG5zOiVYSFRNTC5wcmVmaXg7ICAlVVJJLmRhdGF0eXBlOyAgICNGSVhFRCAnJVhIVE1MLnhtbG5zOycNCi0gICAgICAlWEhUTUwueG1sbnMuZXh0cmEuYXR0cmliOyINCi0+DQotXV0+DQotPCFFTlRJVFkgJSBOUy5kZWNsLmF0dHJpYg0KLSAgICAgIiVYSFRNTC54bWxucy5leHRyYS5hdHRyaWI7Ig0KLT4NCi0NCi08IS0tIFRoaXMgaXMgYSBwbGFjZWhvbGRlciBmb3IgZnV0dXJlIFhMaW5rIHN1cHBvcnQuDQotLS0+DQotPCFFTlRJVFkgJSBYTElOSy54bWxucy5hdHRyaWIgIiIgPg0KLQ0KLTwhLS0gRGVjbGFyZSBhIHBhcmFtZXRlciBlbnRpdHkgJU5TLmRlY2wuYXR0cmliOyBjb250YWluaW5nIGFsbA0KLSAgICAgWE1MIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiBhdHRyaWJ1dGVzIHVzZWQgYnkgWEhUTUwsIGluY2x1ZGluZw0KLSAgICAgYSBkZWZhdWx0IHhtbG5zIGF0dHJpYnV0ZSB3aGVuIHByZWZpeGluZyBpcyBpbmFjdGl2ZS4NCi0tLT4NCi08IVslWEhUTUwucHJlZml4ZWQ7Ww0KLTwhRU5USVRZICUgWEhUTUwueG1sbnMuYXR0cmliDQotICAgICAiJU5TLmRlY2wuYXR0cmliOw0KLSAgICAgICVYTElOSy54bWxucy5hdHRyaWI7Ig0KLT4NCi1dXT4NCi08IUVOVElUWSAlIFhIVE1MLnhtbG5zLmF0dHJpYg0KLSAgICAgInhtbG5zICAgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI0ZJWEVEICclWEhUTUwueG1sbnM7Jw0KLSAgICAgICVYTElOSy54bWxucy5hdHRyaWI7Ig0KLT4NCi0NCi08IS0tIHBsYWNlaG9sZGVyIGZvciBxdWFsaWZpZWQgbmFtZSByZWRlY2xhcmF0aW9ucyAtLT4NCi08IUVOVElUWSAlIHhodG1sLXFuYW1lLnJlZGVjbCAiIiA+DQotDQotDQotPCEtLSBTZWN0aW9uIEI6IFhIVE1MIFF1YWxpZmllZCBOYW1lcyA6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OiAtLT4NCi0NCi08IS0tIDYuIFRoaXMgc2VjdGlvbiBkZWNsYXJlcyBwYXJhbWV0ZXIgZW50aXRpZXMgdXNlZCB0byBwcm92aWRlDQotICAgICAgICBuYW1lc3BhY2UtcXVhbGlmaWVkIG5hbWVzIGZvciBhbGwgWEhUTUwgZWxlbWVudCB0eXBlcy4NCi0tLT4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWFwcGxldC0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGFwcGxldC5xbmFtZSAgIiVYSFRNTC5wZng7YXBwbGV0IiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1iYXNlLTEubW9kIC0tPg0KLTwhRU5USVRZICUgYmFzZS5xbmFtZSAgICAiJVhIVE1MLnBmeDtiYXNlIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1iZG8tMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBiZG8ucW5hbWUgICAgICIlWEhUTUwucGZ4O2JkbyIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtYmxrcGhyYXMtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBhZGRyZXNzLnFuYW1lICIlWEhUTUwucGZ4O2FkZHJlc3MiID4NCi08IUVOVElUWSAlIGJsb2NrcXVvdGUucW5hbWUgICIlWEhUTUwucGZ4O2Jsb2NrcXVvdGUiID4NCi08IUVOVElUWSAlIHByZS5xbmFtZSAgICAgIiVYSFRNTC5wZng7cHJlIiA+DQotPCFFTlRJVFkgJSBoMS5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2gxIiA+DQotPCFFTlRJVFkgJSBoMi5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2gyIiA+DQotPCFFTlRJVFkgJSBoMy5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2gzIiA+DQotPCFFTlRJVFkgJSBoNC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2g0IiA+DQotPCFFTlRJVFkgJSBoNS5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2g1IiA+DQotPCFFTlRJVFkgJSBoNi5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2g2IiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1ibGtwcmVzLTEubW9kIC0tPg0KLTwhRU5USVRZICUgaHIucW5hbWUgICAgICAiJVhIVE1MLnBmeDtociIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtYmxrc3RydWN0LTEubW9kIC0tPg0KLTwhRU5USVRZICUgZGl2LnFuYW1lICAgICAiJVhIVE1MLnBmeDtkaXYiID4NCi08IUVOVElUWSAlIHAucW5hbWUgICAgICAgIiVYSFRNTC5wZng7cCIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtZWRpdC0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGlucy5xbmFtZSAgICAgIiVYSFRNTC5wZng7aW5zIiA+DQotPCFFTlRJVFkgJSBkZWwucW5hbWUgICAgICIlWEhUTUwucGZ4O2RlbCIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtZm9ybS0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGZvcm0ucW5hbWUgICAgIiVYSFRNTC5wZng7Zm9ybSIgPg0KLTwhRU5USVRZICUgbGFiZWwucW5hbWUgICAiJVhIVE1MLnBmeDtsYWJlbCIgPg0KLTwhRU5USVRZICUgaW5wdXQucW5hbWUgICAiJVhIVE1MLnBmeDtpbnB1dCIgPg0KLTwhRU5USVRZICUgc2VsZWN0LnFuYW1lICAiJVhIVE1MLnBmeDtzZWxlY3QiID4NCi08IUVOVElUWSAlIG9wdGdyb3VwLnFuYW1lICAiJVhIVE1MLnBmeDtvcHRncm91cCIgPg0KLTwhRU5USVRZICUgb3B0aW9uLnFuYW1lICAiJVhIVE1MLnBmeDtvcHRpb24iID4NCi08IUVOVElUWSAlIHRleHRhcmVhLnFuYW1lICAiJVhIVE1MLnBmeDt0ZXh0YXJlYSIgPg0KLTwhRU5USVRZICUgZmllbGRzZXQucW5hbWUgICIlWEhUTUwucGZ4O2ZpZWxkc2V0IiA+DQotPCFFTlRJVFkgJSBsZWdlbmQucW5hbWUgICIlWEhUTUwucGZ4O2xlZ2VuZCIgPg0KLTwhRU5USVRZICUgYnV0dG9uLnFuYW1lICAiJVhIVE1MLnBmeDtidXR0b24iID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWh5cGVydGV4dC0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGEucW5hbWUgICAgICAgIiVYSFRNTC5wZng7YSIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtaW1hZ2UtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBpbWcucW5hbWUgICAgICIlWEhUTUwucGZ4O2ltZyIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtaW5scGhyYXMtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBhYmJyLnFuYW1lICAgICIlWEhUTUwucGZ4O2FiYnIiID4NCi08IUVOVElUWSAlIGFjcm9ueW0ucW5hbWUgIiVYSFRNTC5wZng7YWNyb255bSIgPg0KLTwhRU5USVRZICUgY2l0ZS5xbmFtZSAgICAiJVhIVE1MLnBmeDtjaXRlIiA+DQotPCFFTlRJVFkgJSBjb2RlLnFuYW1lICAgICIlWEhUTUwucGZ4O2NvZGUiID4NCi08IUVOVElUWSAlIGRmbi5xbmFtZSAgICAgIiVYSFRNTC5wZng7ZGZuIiA+DQotPCFFTlRJVFkgJSBlbS5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2VtIiA+DQotPCFFTlRJVFkgJSBrYmQucW5hbWUgICAgICIlWEhUTUwucGZ4O2tiZCIgPg0KLTwhRU5USVRZICUgcS5xbmFtZSAgICAgICAiJVhIVE1MLnBmeDtxIiA+DQotPCFFTlRJVFkgJSBzYW1wLnFuYW1lICAgICIlWEhUTUwucGZ4O3NhbXAiID4NCi08IUVOVElUWSAlIHN0cm9uZy5xbmFtZSAgIiVYSFRNTC5wZng7c3Ryb25nIiA+DQotPCFFTlRJVFkgJSB2YXIucW5hbWUgICAgICIlWEhUTUwucGZ4O3ZhciIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtaW5scHJlcy0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGIucW5hbWUgICAgICAgIiVYSFRNTC5wZng7YiIgPg0KLTwhRU5USVRZICUgYmlnLnFuYW1lICAgICAiJVhIVE1MLnBmeDtiaWciID4NCi08IUVOVElUWSAlIGkucW5hbWUgICAgICAgIiVYSFRNTC5wZng7aSIgPg0KLTwhRU5USVRZICUgc21hbGwucW5hbWUgICAiJVhIVE1MLnBmeDtzbWFsbCIgPg0KLTwhRU5USVRZICUgc3ViLnFuYW1lICAgICAiJVhIVE1MLnBmeDtzdWIiID4NCi08IUVOVElUWSAlIHN1cC5xbmFtZSAgICAgIiVYSFRNTC5wZng7c3VwIiA+DQotPCFFTlRJVFkgJSB0dC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O3R0IiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1pbmxzdHJ1Y3QtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBici5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2JyIiA+DQotPCFFTlRJVFkgJSBzcGFuLnFuYW1lICAgICIlWEhUTUwucGZ4O3NwYW4iID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWlzbWFwLTEubW9kIChhbHNvIGNzaXNtYXAsIHNzaXNtYXApIC0tPg0KLTwhRU5USVRZICUgbWFwLnFuYW1lICAgICAiJVhIVE1MLnBmeDttYXAiID4NCi08IUVOVElUWSAlIGFyZWEucW5hbWUgICAgIiVYSFRNTC5wZng7YXJlYSIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtbGluay0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGxpbmsucW5hbWUgICAgIiVYSFRNTC5wZng7bGluayIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtbGlzdC0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGRsLnFuYW1lICAgICAgIiVYSFRNTC5wZng7ZGwiID4NCi08IUVOVElUWSAlIGR0LnFuYW1lICAgICAgIiVYSFRNTC5wZng7ZHQiID4NCi08IUVOVElUWSAlIGRkLnFuYW1lICAgICAgIiVYSFRNTC5wZng7ZGQiID4NCi08IUVOVElUWSAlIG9sLnFuYW1lICAgICAgIiVYSFRNTC5wZng7b2wiID4NCi08IUVOVElUWSAlIHVsLnFuYW1lICAgICAgIiVYSFRNTC5wZng7dWwiID4NCi08IUVOVElUWSAlIGxpLnFuYW1lICAgICAgIiVYSFRNTC5wZng7bGkiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLW1ldGEtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBtZXRhLnFuYW1lICAgICIlWEhUTUwucGZ4O21ldGEiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLXBhcmFtLTEubW9kIC0tPg0KLTwhRU5USVRZICUgcGFyYW0ucW5hbWUgICAiJVhIVE1MLnBmeDtwYXJhbSIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtb2JqZWN0LTEubW9kIC0tPg0KLTwhRU5USVRZICUgb2JqZWN0LnFuYW1lICAiJVhIVE1MLnBmeDtvYmplY3QiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLXNjcmlwdC0xLm1vZCAtLT4NCi08IUVOVElUWSAlIHNjcmlwdC5xbmFtZSAgIiVYSFRNTC5wZng7c2NyaXB0IiA+DQotPCFFTlRJVFkgJSBub3NjcmlwdC5xbmFtZSAgIiVYSFRNTC5wZng7bm9zY3JpcHQiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLXN0cnVjdC0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGh0bWwucW5hbWUgICAgIiVYSFRNTC5wZng7aHRtbCIgPg0KLTwhRU5USVRZICUgaGVhZC5xbmFtZSAgICAiJVhIVE1MLnBmeDtoZWFkIiA+DQotPCFFTlRJVFkgJSB0aXRsZS5xbmFtZSAgICIlWEhUTUwucGZ4O3RpdGxlIiA+DQotPCFFTlRJVFkgJSBib2R5LnFuYW1lICAgICIlWEhUTUwucGZ4O2JvZHkiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLXN0eWxlLTEubW9kIC0tPg0KLTwhRU5USVRZICUgc3R5bGUucW5hbWUgICAiJVhIVE1MLnBmeDtzdHlsZSIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtdGFibGUtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSB0YWJsZS5xbmFtZSAgICIlWEhUTUwucGZ4O3RhYmxlIiA+DQotPCFFTlRJVFkgJSBjYXB0aW9uLnFuYW1lICIlWEhUTUwucGZ4O2NhcHRpb24iID4NCi08IUVOVElUWSAlIHRoZWFkLnFuYW1lICAgIiVYSFRNTC5wZng7dGhlYWQiID4NCi08IUVOVElUWSAlIHRmb290LnFuYW1lICAgIiVYSFRNTC5wZng7dGZvb3QiID4NCi08IUVOVElUWSAlIHRib2R5LnFuYW1lICAgIiVYSFRNTC5wZng7dGJvZHkiID4NCi08IUVOVElUWSAlIGNvbGdyb3VwLnFuYW1lICAiJVhIVE1MLnBmeDtjb2xncm91cCIgPg0KLTwhRU5USVRZICUgY29sLnFuYW1lICAgICAiJVhIVE1MLnBmeDtjb2wiID4NCi08IUVOVElUWSAlIHRyLnFuYW1lICAgICAgIiVYSFRNTC5wZng7dHIiID4NCi08IUVOVElUWSAlIHRoLnFuYW1lICAgICAgIiVYSFRNTC5wZng7dGgiID4NCi08IUVOVElUWSAlIHRkLnFuYW1lICAgICAgIiVYSFRNTC5wZng7dGQiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLXJ1YnktMS5tb2QgLS0+DQotDQotPCFFTlRJVFkgJSBydWJ5LnFuYW1lICAgICIlWEhUTUwucGZ4O3J1YnkiID4NCi08IUVOVElUWSAlIHJiYy5xbmFtZSAgICAgIiVYSFRNTC5wZng7cmJjIiA+DQotPCFFTlRJVFkgJSBydGMucW5hbWUgICAgICIlWEhUTUwucGZ4O3J0YyIgPg0KLTwhRU5USVRZICUgcmIucW5hbWUgICAgICAiJVhIVE1MLnBmeDtyYiIgPg0KLTwhRU5USVRZICUgcnQucW5hbWUgICAgICAiJVhIVE1MLnBmeDtydCIgPg0KLTwhRU5USVRZICUgcnAucW5hbWUgICAgICAiJVhIVE1MLnBmeDtycCIgPg0KLQ0KLTwhLS0gUHJvdmlzaW9uYWwgWEhUTUwgMi4wIFF1YWxpZmllZCBOYW1lcyAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWltYWdlLTIubW9kIC0tPg0KLTwhRU5USVRZICUgYWx0LnFuYW1lICAgICAiJVhIVE1MLnBmeDthbHQiID4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1xbmFtZS0xLm1vZCAtLT4NCi0NCi08IS0tDQotCVhIVE1MIGdsb2JhbCBhdHRyaWJ1dGVzDQotLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1pbmxzdHlsZS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIElubGluZSBTdHlsZSAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW5sc3R5bGUtMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIElubGluZSBTdHlsZSBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1pbmxzdHlsZS0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBJbmxpbmUgU3R5bGUgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW5sc3R5bGUtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gSW5saW5lIFN0eWxlDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgJ3N0eWxlJyBhdHRyaWJ1dGUsIHVzZWQgdG8gc3VwcG9ydCBpbmxpbmUNCi0gICAgIHN0eWxlIG1hcmt1cC4gVGhpcyBtb2R1bGUgbXVzdCBiZSBpbnN0YW50aWF0ZWQgcHJpb3IgdG8gdGhlIFhIVE1MDQotICAgICBDb21tb24gQXR0cmlidXRlcyBtb2R1bGUgaW4gb3JkZXIgdG8gYmUgaW5jbHVkZWQgaW4gJUNvcmUuYXR0cmliOy4NCi0tLT4NCi0NCi08IUVOVElUWSAlIHN0eWxlLmF0dHJpYg0KLSAgICAgInN0eWxlICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQiDQotPg0KLQ0KLQ0KLTwhRU5USVRZICUgQ29yZS5leHRyYS5hdHRyaWINCi0gICAgICIlc3R5bGUuYXR0cmliOyINCi0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtaW5sc3R5bGUtMS5tb2QgLS0+DQotDQotPCFFTlRJVFkgJSBYSFRNTC5iaWRpICJJR05PUkUiPg0KLTwhRU5USVRZICUgeGh0bWwtYXR0cmlicy5tb2QgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIENvbW1vbiBBdHRyaWJ1dGVzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1hdHRyaWJzLTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBDb21tb24gQXR0cmlidXRlcyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtYXR0cmlicy0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgQ29tbW9uIEF0dHJpYnV0ZXMgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYXR0cmlicy0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBDb21tb24gQXR0cmlidXRlcw0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgbWFueSBvZiB0aGUgY29tbW9uIGF0dHJpYnV0ZXMgZm9yIHRoZSBYSFRNTCBEVEQuDQotICAgICAlTlMuZGVjbC5hdHRyaWI7IGlzIGRlY2xhcmVkIGluIHRoZSBYSFRNTCBRbmFtZSBtb2R1bGUuDQotLS0+DQotDQotPCFFTlRJVFkgJSBpZC5hdHRyaWINCi0gICAgICJpZCAgICAgICAgICAgSUQgICAgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEIg0KLT4NCi0NCi08IUVOVElUWSAlIGNsYXNzLmF0dHJpYg0KLSAgICAgImNsYXNzICAgICAgICBOTVRPS0VOUyAgICAgICAgICAgICAgICAgI0lNUExJRUQiDQotPg0KLQ0KLTwhRU5USVRZICUgdGl0bGUuYXR0cmliDQotICAgICAidGl0bGUgICAgICAgICVUZXh0LmRhdGF0eXBlOyAgICAgICAgICAjSU1QTElFRCINCi0+DQotDQotPCFFTlRJVFkgJSBDb3JlLmV4dHJhLmF0dHJpYiAiIiA+DQotDQotPCFFTlRJVFkgJSBDb3JlLmF0dHJpYg0KLSAgICAgIiVYSFRNTC54bWxucy5hdHRyaWI7DQotICAgICAgJWlkLmF0dHJpYjsNCi0gICAgICAlY2xhc3MuYXR0cmliOw0KLSAgICAgICV0aXRsZS5hdHRyaWI7DQotICAgICAgJUNvcmUuZXh0cmEuYXR0cmliOyINCi0+DQotDQotPCFFTlRJVFkgJSBsYW5nLmF0dHJpYg0KLSAgICAgInhtbDpsYW5nICAgICAlTGFuZ3VhZ2VDb2RlLmRhdGF0eXBlOyAgI0lNUExJRUQiDQotPg0KLQ0KLTwhWyVYSFRNTC5iaWRpO1sNCi08IUVOVElUWSAlIGRpci5hdHRyaWINCi0gICAgICJkaXIgICAgICAgICAgKCBsdHIgfCBydGwgKSAgICAgICAgICAgICNJTVBMSUVEIg0KLT4NCi0NCi08IUVOVElUWSAlIEkxOG4uYXR0cmliDQotICAgICAiJWRpci5hdHRyaWI7DQotICAgICAgJWxhbmcuYXR0cmliOyINCi0+DQotDQotXV0+DQotPCFFTlRJVFkgJSBJMThuLmF0dHJpYg0KLSAgICAgIiVsYW5nLmF0dHJpYjsiDQotPg0KLQ0KLTwhRU5USVRZICUgQ29tbW9uLmV4dHJhLmF0dHJpYiAiIiA+DQotDQotPCEtLSBpbnRyaW5zaWMgZXZlbnQgYXR0cmlidXRlcyBkZWNsYXJlZCBwcmV2aW91c2x5DQotLS0+DQotPCFFTlRJVFkgJSBFdmVudHMuYXR0cmliICIiID4NCi0NCi08IUVOVElUWSAlIENvbW1vbi5hdHRyaWINCi0gICAgICIlQ29yZS5hdHRyaWI7DQotICAgICAgJUkxOG4uYXR0cmliOw0KLSAgICAgICVFdmVudHMuYXR0cmliOw0KLSAgICAgICVDb21tb24uZXh0cmEuYXR0cmliOyINCi0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtYXR0cmlicy0xLm1vZCAtLT4NCi0NCi08IS0tIA0KLQlYSFRNTCBjaGFyYWN0ZXIgZW50aXRpZXMNCi0tLT4NCi08IUVOVElUWSAlIHhodG1sLWNoYXJlbnQubW9kIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBDaGFyYWN0ZXIgRW50aXRpZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWNoYXJlbnQtMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIENoYXJhY3RlciBFbnRpdGllcyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtY2hhcmVudC0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgQ2hhcmFjdGVyIEVudGl0aWVzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWNoYXJlbnQtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gQ2hhcmFjdGVyIEVudGl0aWVzIGZvciBYSFRNTA0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIHNldCBvZiBjaGFyYWN0ZXIgZW50aXRpZXMgZm9yIFhIVE1MLA0KLSAgICAgaW5jbHVkaW5nIHRoZSBMYXRpbiAxLCBTeW1ib2wgYW5kIFNwZWNpYWwgY2hhcmFjdGVyIGNvbGxlY3Rpb25zLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgeGh0bWwtbGF0MQ0KLSAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgTGF0aW4gMSBmb3IgWEhUTUwvL0VOIg0KLSAgICAgICAgICAgInhodG1sLWxhdDEuZW50IiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWE1MLWNvbXBhdGlibGUgSVNPIExhdGluIDEgQ2hhcmFjdGVyIEVudGl0eSBTZXQgZm9yIFhIVE1MIC4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWxhdDEuZW50DQotDQotICAgICBUeXBpY2FsIGludm9jYXRpb246DQotDQotICAgICAgIDwhRU5USVRZICUgeGh0bWwtbGF0MQ0KLSAgICAgICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIExhdGluIDEgZm9yIFhIVE1MLy9FTiINCi0gICAgICAgICAgICAgICAgICAieGh0bWwtbGF0MS5lbnQiID4NCi0gICAgICAgJXhodG1sLWxhdDE7DQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBMYXRpbiAxIGZvciBYSFRNTC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWxhdDEuZW50Ig0KLQ0KLSAgICAgUmV2aXNpb246ICAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgUG9ydGlvbnMgKEMpIEludGVybmF0aW9uYWwgT3JnYW5pemF0aW9uIGZvciBTdGFuZGFyZGl6YXRpb24gMTk4NjoNCi0gICAgIFBlcm1pc3Npb24gdG8gY29weSBpbiBhbnkgZm9ybSBpcyBncmFudGVkIGZvciB1c2Ugd2l0aCBjb25mb3JtaW5nDQotICAgICBTR01MIHN5c3RlbXMgYW5kIGFwcGxpY2F0aW9ucyBhcyBkZWZpbmVkIGluIElTTyA4ODc5LCBwcm92aWRlZA0KLSAgICAgdGhpcyBub3RpY2UgaXMgaW5jbHVkZWQgaW4gYWxsIGNvcGllcy4NCi0tLT4NCi0NCi08IUVOVElUWSBuYnNwICAgIiYjMTYwOyIgPjwhLS0gbm8tYnJlYWsgc3BhY2UgPSBub24tYnJlYWtpbmcgc3BhY2UsIFUrMDBBMCBJU09udW0gLS0+DQotPCFFTlRJVFkgaWV4Y2wgICImIzE2MTsiID48IS0tIGludmVydGVkIGV4Y2xhbWF0aW9uIG1hcmssIFUrMDBBMSBJU09udW0gLS0+DQotPCFFTlRJVFkgY2VudCAgICImIzE2MjsiID48IS0tIGNlbnQgc2lnbiwgVSswMEEyIElTT251bSAtLT4NCi08IUVOVElUWSBwb3VuZCAgIiYjMTYzOyIgPjwhLS0gcG91bmQgc2lnbiwgVSswMEEzIElTT251bSAtLT4NCi08IUVOVElUWSBjdXJyZW4gIiYjMTY0OyIgPjwhLS0gY3VycmVuY3kgc2lnbiwgVSswMEE0IElTT251bSAtLT4NCi08IUVOVElUWSB5ZW4gICAgIiYjMTY1OyIgPjwhLS0geWVuIHNpZ24gPSB5dWFuIHNpZ24sIFUrMDBBNSBJU09udW0gLS0+DQotPCFFTlRJVFkgYnJ2YmFyICImIzE2NjsiID48IS0tIGJyb2tlbiBiYXIgPSBicm9rZW4gdmVydGljYWwgYmFyLCBVKzAwQTYgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHNlY3QgICAiJiMxNjc7IiA+PCEtLSBzZWN0aW9uIHNpZ24sIFUrMDBBNyBJU09udW0gLS0+DQotPCFFTlRJVFkgdW1sICAgICImIzE2ODsiID48IS0tIGRpYWVyZXNpcyA9IHNwYWNpbmcgZGlhZXJlc2lzLCBVKzAwQTggSVNPZGlhIC0tPg0KLTwhRU5USVRZIGNvcHkgICAiJiMxNjk7IiA+PCEtLSBjb3B5cmlnaHQgc2lnbiwgVSswMEE5IElTT251bSAtLT4NCi08IUVOVElUWSBvcmRmICAgIiYjMTcwOyIgPjwhLS0gZmVtaW5pbmUgb3JkaW5hbCBpbmRpY2F0b3IsIFUrMDBBQSBJU09udW0gLS0+DQotPCFFTlRJVFkgbGFxdW8gICImIzE3MTsiID48IS0tIGxlZnQtcG9pbnRpbmcgZG91YmxlIGFuZ2xlIHF1b3RhdGlvbiBtYXJrID0gbGVmdCBwb2ludGluZyBndWlsbGVtZXQsIFUrMDBBQiBJU09udW0gLS0+DQotPCFFTlRJVFkgbm90ICAgICImIzE3MjsiID48IS0tIG5vdCBzaWduLCBVKzAwQUMgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHNoeSAgICAiJiMxNzM7IiA+PCEtLSBzb2Z0IGh5cGhlbiA9IGRpc2NyZXRpb25hcnkgaHlwaGVuLCBVKzAwQUQgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHJlZyAgICAiJiMxNzQ7IiA+PCEtLSByZWdpc3RlcmVkIHNpZ24gPSByZWdpc3RlcmVkIHRyYWRlIG1hcmsgc2lnbiwgVSswMEFFIElTT251bSAtLT4NCi08IUVOVElUWSBtYWNyICAgIiYjMTc1OyIgPjwhLS0gbWFjcm9uID0gc3BhY2luZyBtYWNyb24gPSBvdmVybGluZSA9IEFQTCBvdmVyYmFyLCBVKzAwQUYgSVNPZGlhIC0tPg0KLTwhRU5USVRZIGRlZyAgICAiJiMxNzY7IiA+PCEtLSBkZWdyZWUgc2lnbiwgVSswMEIwIElTT251bSAtLT4NCi08IUVOVElUWSBwbHVzbW4gIiYjMTc3OyIgPjwhLS0gcGx1cy1taW51cyBzaWduID0gcGx1cy1vci1taW51cyBzaWduLCBVKzAwQjEgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHN1cDIgICAiJiMxNzg7IiA+PCEtLSBzdXBlcnNjcmlwdCB0d28gPSBzdXBlcnNjcmlwdCBkaWdpdCB0d28gPSBzcXVhcmVkLCBVKzAwQjIgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHN1cDMgICAiJiMxNzk7IiA+PCEtLSBzdXBlcnNjcmlwdCB0aHJlZSA9IHN1cGVyc2NyaXB0IGRpZ2l0IHRocmVlID0gY3ViZWQsIFUrMDBCMyBJU09udW0gLS0+DQotPCFFTlRJVFkgYWN1dGUgICImIzE4MDsiID48IS0tIGFjdXRlIGFjY2VudCA9IHNwYWNpbmcgYWN1dGUsIFUrMDBCNCBJU09kaWEgLS0+DQotPCFFTlRJVFkgbWljcm8gICImIzE4MTsiID48IS0tIG1pY3JvIHNpZ24sIFUrMDBCNSBJU09udW0gLS0+DQotPCFFTlRJVFkgcGFyYSAgICImIzE4MjsiID48IS0tIHBpbGNyb3cgc2lnbiA9IHBhcmFncmFwaCBzaWduLCBVKzAwQjYgSVNPbnVtIC0tPg0KLTwhRU5USVRZIG1pZGRvdCAiJiMxODM7IiA+PCEtLSBtaWRkbGUgZG90ID0gR2VvcmdpYW4gY29tbWEgPSBHcmVlayBtaWRkbGUgZG90LCBVKzAwQjcgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGNlZGlsICAiJiMxODQ7IiA+PCEtLSBjZWRpbGxhID0gc3BhY2luZyBjZWRpbGxhLCBVKzAwQjggSVNPZGlhIC0tPg0KLTwhRU5USVRZIHN1cDEgICAiJiMxODU7IiA+PCEtLSBzdXBlcnNjcmlwdCBvbmUgPSBzdXBlcnNjcmlwdCBkaWdpdCBvbmUsIFUrMDBCOSBJU09udW0gLS0+DQotPCFFTlRJVFkgb3JkbSAgICImIzE4NjsiID48IS0tIG1hc2N1bGluZSBvcmRpbmFsIGluZGljYXRvciwgVSswMEJBIElTT251bSAtLT4NCi08IUVOVElUWSByYXF1byAgIiYjMTg3OyIgPjwhLS0gcmlnaHQtcG9pbnRpbmcgZG91YmxlIGFuZ2xlIHF1b3RhdGlvbiBtYXJrID0gcmlnaHQgcG9pbnRpbmcgZ3VpbGxlbWV0LCBVKzAwQkIgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGZyYWMxNCAiJiMxODg7IiA+PCEtLSB2dWxnYXIgZnJhY3Rpb24gb25lIHF1YXJ0ZXIgPSBmcmFjdGlvbiBvbmUgcXVhcnRlciwgVSswMEJDIElTT251bSAtLT4NCi08IUVOVElUWSBmcmFjMTIgIiYjMTg5OyIgPjwhLS0gdnVsZ2FyIGZyYWN0aW9uIG9uZSBoYWxmID0gZnJhY3Rpb24gb25lIGhhbGYsIFUrMDBCRCBJU09udW0gLS0+DQotPCFFTlRJVFkgZnJhYzM0ICImIzE5MDsiID48IS0tIHZ1bGdhciBmcmFjdGlvbiB0aHJlZSBxdWFydGVycyA9IGZyYWN0aW9uIHRocmVlIHF1YXJ0ZXJzLCBVKzAwQkUgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGlxdWVzdCAiJiMxOTE7IiA+PCEtLSBpbnZlcnRlZCBxdWVzdGlvbiBtYXJrID0gdHVybmVkIHF1ZXN0aW9uIG1hcmssIFUrMDBCRiBJU09udW0gLS0+DQotPCFFTlRJVFkgQWdyYXZlICImIzE5MjsiID48IS0tIGxhdGluIGNhcGl0YWwgQSB3aXRoIGdyYXZlID0gbGF0aW4gY2FwaXRhbCBBIGdyYXZlLCBVKzAwQzAgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBBYWN1dGUgIiYjMTkzOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBBIHdpdGggYWN1dGUsIFUrMDBDMSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEFjaXJjICAiJiMxOTQ7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEEgd2l0aCBjaXJjdW1mbGV4LCBVKzAwQzIgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBBdGlsZGUgIiYjMTk1OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBBIHdpdGggdGlsZGUsIFUrMDBDMyBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEF1bWwgICAiJiMxOTY7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEEgd2l0aCBkaWFlcmVzaXMsIFUrMDBDNCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEFyaW5nICAiJiMxOTc7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEEgd2l0aCByaW5nIGFib3ZlID0gbGF0aW4gY2FwaXRhbCBBIHJpbmcsIFUrMDBDNSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEFFbGlnICAiJiMxOTg7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEFFID0gbGF0aW4gY2FwaXRhbCBsaWdhdHVyZSBBRSwgVSswMEM2IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgQ2NlZGlsICImIzE5OTsiID48IS0tIGxhdGluIGNhcGl0YWwgQyB3aXRoIGNlZGlsbGEsIFUrMDBDNyBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEVncmF2ZSAiJiMyMDA7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEUgd2l0aCBncmF2ZSwgVSswMEM4IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgRWFjdXRlICImIzIwMTsiID48IS0tIGxhdGluIGNhcGl0YWwgRSB3aXRoIGFjdXRlLCBVKzAwQzkgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBFY2lyYyAgIiYjMjAyOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBFIHdpdGggY2lyY3VtZmxleCwgVSswMENBIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgRXVtbCAgICImIzIwMzsiID48IS0tIGxhdGluIGNhcGl0YWwgRSB3aXRoIGRpYWVyZXNpcywgVSswMENCIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgSWdyYXZlICImIzIwNDsiID48IS0tIGxhdGluIGNhcGl0YWwgSSB3aXRoIGdyYXZlLCBVKzAwQ0MgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBJYWN1dGUgIiYjMjA1OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBJIHdpdGggYWN1dGUsIFUrMDBDRCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEljaXJjICAiJiMyMDY7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEkgd2l0aCBjaXJjdW1mbGV4LCBVKzAwQ0UgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBJdW1sICAgIiYjMjA3OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBJIHdpdGggZGlhZXJlc2lzLCBVKzAwQ0YgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBFVEggICAgIiYjMjA4OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBFVEgsIFUrMDBEMCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIE50aWxkZSAiJiMyMDk7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIE4gd2l0aCB0aWxkZSwgVSswMEQxIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgT2dyYXZlICImIzIxMDsiID48IS0tIGxhdGluIGNhcGl0YWwgTyB3aXRoIGdyYXZlLCBVKzAwRDIgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBPYWN1dGUgIiYjMjExOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBPIHdpdGggYWN1dGUsIFUrMDBEMyBJU09sYXQxIC0tPg0KLTwhRU5USVRZIE9jaXJjICAiJiMyMTI7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIE8gd2l0aCBjaXJjdW1mbGV4LCBVKzAwRDQgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBPdGlsZGUgIiYjMjEzOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBPIHdpdGggdGlsZGUsIFUrMDBENSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIE91bWwgICAiJiMyMTQ7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIE8gd2l0aCBkaWFlcmVzaXMsIFUrMDBENiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIHRpbWVzICAiJiMyMTU7IiA+PCEtLSBtdWx0aXBsaWNhdGlvbiBzaWduLCBVKzAwRDcgSVNPbnVtIC0tPg0KLTwhRU5USVRZIE9zbGFzaCAiJiMyMTY7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIE8gd2l0aCBzdHJva2UgPSBsYXRpbiBjYXBpdGFsIE8gc2xhc2gsIFUrMDBEOCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIFVncmF2ZSAiJiMyMTc7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIFUgd2l0aCBncmF2ZSwgVSswMEQ5IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgVWFjdXRlICImIzIxODsiID48IS0tIGxhdGluIGNhcGl0YWwgVSB3aXRoIGFjdXRlLCBVKzAwREEgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBVY2lyYyAgIiYjMjE5OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBVIHdpdGggY2lyY3VtZmxleCwgVSswMERCIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgVXVtbCAgICImIzIyMDsiID48IS0tIGxhdGluIGNhcGl0YWwgVSB3aXRoIGRpYWVyZXNpcywgVSswMERDIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgWWFjdXRlICImIzIyMTsiID48IS0tIGxhdGluIGNhcGl0YWwgWSB3aXRoIGFjdXRlLCBVKzAwREQgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBUSE9STiAgIiYjMjIyOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBUSE9STiwgVSswMERFIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgc3psaWcgICImIzIyMzsiID48IS0tIGxhdGluIHNtYWxsIHNoYXJwIHMgPSBlc3MtemVkLCBVKzAwREYgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBhZ3JhdmUgIiYjMjI0OyIgPjwhLS0gbGF0aW4gc21hbGwgYSB3aXRoIGdyYXZlID0gbGF0aW4gc21hbGwgYSBncmF2ZSwgVSswMEUwIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgYWFjdXRlICImIzIyNTsiID48IS0tIGxhdGluIHNtYWxsIGEgd2l0aCBhY3V0ZSwgVSswMEUxIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgYWNpcmMgICImIzIyNjsiID48IS0tIGxhdGluIHNtYWxsIGEgd2l0aCBjaXJjdW1mbGV4LCBVKzAwRTIgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBhdGlsZGUgIiYjMjI3OyIgPjwhLS0gbGF0aW4gc21hbGwgYSB3aXRoIHRpbGRlLCBVKzAwRTMgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBhdW1sICAgIiYjMjI4OyIgPjwhLS0gbGF0aW4gc21hbGwgYSB3aXRoIGRpYWVyZXNpcywgVSswMEU0IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgYXJpbmcgICImIzIyOTsiID48IS0tIGxhdGluIHNtYWxsIGEgd2l0aCByaW5nIGFib3ZlID0gbGF0aW4gc21hbGwgYSByaW5nLCBVKzAwRTUgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBhZWxpZyAgIiYjMjMwOyIgPjwhLS0gbGF0aW4gc21hbGwgYWUgPSBsYXRpbiBzbWFsbCBsaWdhdHVyZSBhZSwgVSswMEU2IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgY2NlZGlsICImIzIzMTsiID48IS0tIGxhdGluIHNtYWxsIGMgd2l0aCBjZWRpbGxhLCBVKzAwRTcgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBlZ3JhdmUgIiYjMjMyOyIgPjwhLS0gbGF0aW4gc21hbGwgZSB3aXRoIGdyYXZlLCBVKzAwRTggSVNPbGF0MSAtLT4NCi08IUVOVElUWSBlYWN1dGUgIiYjMjMzOyIgPjwhLS0gbGF0aW4gc21hbGwgZSB3aXRoIGFjdXRlLCBVKzAwRTkgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBlY2lyYyAgIiYjMjM0OyIgPjwhLS0gbGF0aW4gc21hbGwgZSB3aXRoIGNpcmN1bWZsZXgsIFUrMDBFQSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGV1bWwgICAiJiMyMzU7IiA+PCEtLSBsYXRpbiBzbWFsbCBlIHdpdGggZGlhZXJlc2lzLCBVKzAwRUIgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBpZ3JhdmUgIiYjMjM2OyIgPjwhLS0gbGF0aW4gc21hbGwgaSB3aXRoIGdyYXZlLCBVKzAwRUMgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBpYWN1dGUgIiYjMjM3OyIgPjwhLS0gbGF0aW4gc21hbGwgaSB3aXRoIGFjdXRlLCBVKzAwRUQgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBpY2lyYyAgIiYjMjM4OyIgPjwhLS0gbGF0aW4gc21hbGwgaSB3aXRoIGNpcmN1bWZsZXgsIFUrMDBFRSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGl1bWwgICAiJiMyMzk7IiA+PCEtLSBsYXRpbiBzbWFsbCBpIHdpdGggZGlhZXJlc2lzLCBVKzAwRUYgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBldGggICAgIiYjMjQwOyIgPjwhLS0gbGF0aW4gc21hbGwgZXRoLCBVKzAwRjAgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBudGlsZGUgIiYjMjQxOyIgPjwhLS0gbGF0aW4gc21hbGwgbiB3aXRoIHRpbGRlLCBVKzAwRjEgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBvZ3JhdmUgIiYjMjQyOyIgPjwhLS0gbGF0aW4gc21hbGwgbyB3aXRoIGdyYXZlLCBVKzAwRjIgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBvYWN1dGUgIiYjMjQzOyIgPjwhLS0gbGF0aW4gc21hbGwgbyB3aXRoIGFjdXRlLCBVKzAwRjMgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBvY2lyYyAgIiYjMjQ0OyIgPjwhLS0gbGF0aW4gc21hbGwgbyB3aXRoIGNpcmN1bWZsZXgsIFUrMDBGNCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIG90aWxkZSAiJiMyNDU7IiA+PCEtLSBsYXRpbiBzbWFsbCBvIHdpdGggdGlsZGUsIFUrMDBGNSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIG91bWwgICAiJiMyNDY7IiA+PCEtLSBsYXRpbiBzbWFsbCBvIHdpdGggZGlhZXJlc2lzLCBVKzAwRjYgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBkaXZpZGUgIiYjMjQ3OyIgPjwhLS0gZGl2aXNpb24gc2lnbiwgVSswMEY3IElTT251bSAtLT4NCi08IUVOVElUWSBvc2xhc2ggIiYjMjQ4OyIgPjwhLS0gbGF0aW4gc21hbGwgbyB3aXRoIHN0cm9rZSwgPSBsYXRpbiBzbWFsbCBvIHNsYXNoLCBVKzAwRjggSVNPbGF0MSAtLT4NCi08IUVOVElUWSB1Z3JhdmUgIiYjMjQ5OyIgPjwhLS0gbGF0aW4gc21hbGwgdSB3aXRoIGdyYXZlLCBVKzAwRjkgSVNPbGF0MSAtLT4NCi08IUVOVElUWSB1YWN1dGUgIiYjMjUwOyIgPjwhLS0gbGF0aW4gc21hbGwgdSB3aXRoIGFjdXRlLCBVKzAwRkEgSVNPbGF0MSAtLT4NCi08IUVOVElUWSB1Y2lyYyAgIiYjMjUxOyIgPjwhLS0gbGF0aW4gc21hbGwgdSB3aXRoIGNpcmN1bWZsZXgsIFUrMDBGQiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIHV1bWwgICAiJiMyNTI7IiA+PCEtLSBsYXRpbiBzbWFsbCB1IHdpdGggZGlhZXJlc2lzLCBVKzAwRkMgSVNPbGF0MSAtLT4NCi08IUVOVElUWSB5YWN1dGUgIiYjMjUzOyIgPjwhLS0gbGF0aW4gc21hbGwgeSB3aXRoIGFjdXRlLCBVKzAwRkQgSVNPbGF0MSAtLT4NCi08IUVOVElUWSB0aG9ybiAgIiYjMjU0OyIgPjwhLS0gbGF0aW4gc21hbGwgdGhvcm4gd2l0aCwgVSswMEZFIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgeXVtbCAgICImIzI1NTsiID48IS0tIGxhdGluIHNtYWxsIHkgd2l0aCBkaWFlcmVzaXMsIFUrMDBGRiBJU09sYXQxIC0tPg0KLTwhLS0gZW5kIG9mIHhodG1sLWxhdDEuZW50IC0tPg0KLQ0KLQ0KLTwhRU5USVRZICUgeGh0bWwtc3ltYm9sDQotICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBTeW1ib2xzIGZvciBYSFRNTC8vRU4iDQotICAgICAgICAgICAieGh0bWwtc3ltYm9sLmVudCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIElTTyBNYXRoLCBHcmVlayBhbmQgU3ltYm9saWMgQ2hhcmFjdGVyIEVudGl0eSBTZXQgZm9yIFhIVE1MIC4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1zeW1ib2wuZW50DQotDQotICAgICBUeXBpY2FsIGludm9jYXRpb246DQotDQotICAgICAgIDwhRU5USVRZICUgeGh0bWwtc3ltYm9sDQotICAgICAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgU3ltYm9scyBmb3IgWEhUTUwvL0VOIg0KLSAgICAgICAgICAgICAgICAgICJ4aHRtbC1zeW1ib2wuZW50IiA+DQotICAgICAgICV4aHRtbC1zeW1ib2w7DQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBTeW1ib2xzIGZvciBYSFRNTC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXN5bWJvbC5lbnQiDQotDQotICAgICBSZXZpc2lvbjogICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBQb3J0aW9ucyAoQykgSW50ZXJuYXRpb25hbCBPcmdhbml6YXRpb24gZm9yIFN0YW5kYXJkaXphdGlvbiAxOTg2Og0KLSAgICAgUGVybWlzc2lvbiB0byBjb3B5IGluIGFueSBmb3JtIGlzIGdyYW50ZWQgZm9yIHVzZSB3aXRoIGNvbmZvcm1pbmcNCi0gICAgIFNHTUwgc3lzdGVtcyBhbmQgYXBwbGljYXRpb25zIGFzIGRlZmluZWQgaW4gSVNPIDg4NzksIHByb3ZpZGVkDQotICAgICB0aGlzIG5vdGljZSBpcyBpbmNsdWRlZCBpbiBhbGwgY29waWVzLg0KLS0tPg0KLQ0KLTwhLS0gUmVsZXZhbnQgSVNPIGVudGl0eSBzZXQgaXMgZ2l2ZW4gdW5sZXNzIG5hbWVzIGFyZSBuZXdseSBpbnRyb2R1Y2VkLg0KLSAgICAgTmV3IG5hbWVzIChpLmUuLCBub3QgaW4gSVNPIDg4NzkgW1NHTUxdIGxpc3QpIGRvIG5vdCBjbGFzaCB3aXRoDQotICAgICBhbnkgZXhpc3RpbmcgSVNPIDg4NzkgZW50aXR5IG5hbWVzLiBJU08gMTA2NDYgW0lTTzEwNjQ2XSBjaGFyYWN0ZXINCi0gICAgIG51bWJlcnMgYXJlIGdpdmVuIGZvciBlYWNoIGNoYXJhY3RlciwgaW4gaGV4LiBFbnRpdHkgdmFsdWVzIGFyZQ0KLSAgICAgZGVjaW1hbCBjb252ZXJzaW9ucyBvZiB0aGUgSVNPIDEwNjQ2IHZhbHVlcyBhbmQgcmVmZXIgdG8gdGhlDQotICAgICBkb2N1bWVudCBjaGFyYWN0ZXIgc2V0LiBOYW1lcyBhcmUgVW5pY29kZSBbVU5JQ09ERV0gbmFtZXMuDQotLS0+DQotDQotPCEtLSBMYXRpbiBFeHRlbmRlZC1CIC0tPg0KLTwhRU5USVRZIGZub2YgICAgICImIzQwMjsiID48IS0tIGxhdGluIHNtYWxsIGYgd2l0aCBob29rID0gZnVuY3Rpb24NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGZsb3JpbiwgVSswMTkyIElTT3RlY2ggLS0+DQotDQotPCEtLSBHcmVlayAtLT4NCi08IUVOVElUWSBBbHBoYSAgICAiJiM5MTM7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBhbHBoYSwgVSswMzkxIC0tPg0KLTwhRU5USVRZIEJldGEgICAgICImIzkxNDsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIGJldGEsIFUrMDM5MiAtLT4NCi08IUVOVElUWSBHYW1tYSAgICAiJiM5MTU7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBnYW1tYSwgVSswMzkzIElTT2dyazMgLS0+DQotPCFFTlRJVFkgRGVsdGEgICAgIiYjOTE2OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgZGVsdGEsIFUrMDM5NCBJU09ncmszIC0tPg0KLTwhRU5USVRZIEVwc2lsb24gICImIzkxNzsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIGVwc2lsb24sIFUrMDM5NSAtLT4NCi08IUVOVElUWSBaZXRhICAgICAiJiM5MTg7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciB6ZXRhLCBVKzAzOTYgLS0+DQotPCFFTlRJVFkgRXRhICAgICAgIiYjOTE5OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgZXRhLCBVKzAzOTcgLS0+DQotPCFFTlRJVFkgVGhldGEgICAgIiYjOTIwOyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgdGhldGEsIFUrMDM5OCBJU09ncmszIC0tPg0KLTwhRU5USVRZIElvdGEgICAgICImIzkyMTsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIGlvdGEsIFUrMDM5OSAtLT4NCi08IUVOVElUWSBLYXBwYSAgICAiJiM5MjI7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBrYXBwYSwgVSswMzlBIC0tPg0KLTwhRU5USVRZIExhbWJkYSAgICImIzkyMzsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIGxhbWJkYSwgVSswMzlCIElTT2dyazMgLS0+DQotPCFFTlRJVFkgTXUgICAgICAgIiYjOTI0OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgbXUsIFUrMDM5QyAtLT4NCi08IUVOVElUWSBOdSAgICAgICAiJiM5MjU7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBudSwgVSswMzlEIC0tPg0KLTwhRU5USVRZIFhpICAgICAgICImIzkyNjsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHhpLCBVKzAzOUUgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBPbWljcm9uICAiJiM5Mjc7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBvbWljcm9uLCBVKzAzOUYgLS0+DQotPCFFTlRJVFkgUGkgICAgICAgIiYjOTI4OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgcGksIFUrMDNBMCBJU09ncmszIC0tPg0KLTwhRU5USVRZIFJobyAgICAgICImIzkyOTsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHJobywgVSswM0ExIC0tPg0KLTwhLS0gdGhlcmUgaXMgbm8gU2lnbWFmLCBhbmQgbm8gVSswM0EyIGNoYXJhY3RlciBlaXRoZXIgLS0+DQotPCFFTlRJVFkgU2lnbWEgICAgIiYjOTMxOyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgc2lnbWEsIFUrMDNBMyBJU09ncmszIC0tPg0KLTwhRU5USVRZIFRhdSAgICAgICImIzkzMjsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHRhdSwgVSswM0E0IC0tPg0KLTwhRU5USVRZIFVwc2lsb24gICImIzkzMzsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHVwc2lsb24sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVSswM0E1IElTT2dyazMgLS0+DQotPCFFTlRJVFkgUGhpICAgICAgIiYjOTM0OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgcGhpLCBVKzAzQTYgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBDaGkgICAgICAiJiM5MzU7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBjaGksIFUrMDNBNyAtLT4NCi08IUVOVElUWSBQc2kgICAgICAiJiM5MzY7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBwc2ksIFUrMDNBOCBJU09ncmszIC0tPg0KLTwhRU5USVRZIE9tZWdhICAgICImIzkzNzsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIG9tZWdhLCBVKzAzQTkgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBhbHBoYSAgICAiJiM5NDU7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgYWxwaGEsIFUrMDNCMSBJU09ncmszIC0tPg0KLTwhRU5USVRZIGJldGEgICAgICImIzk0NjsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBiZXRhLCBVKzAzQjIgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBnYW1tYSAgICAiJiM5NDc7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgZ2FtbWEsIFUrMDNCMyBJU09ncmszIC0tPg0KLTwhRU5USVRZIGRlbHRhICAgICImIzk0ODsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBkZWx0YSwgVSswM0I0IElTT2dyazMgLS0+DQotPCFFTlRJVFkgZXBzaWxvbiAgIiYjOTQ5OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGVwc2lsb24sIFUrMDNCNSBJU09ncmszIC0tPg0KLTwhRU5USVRZIHpldGEgICAgICImIzk1MDsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciB6ZXRhLCBVKzAzQjYgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBldGEgICAgICAiJiM5NTE7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgZXRhLCBVKzAzQjcgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSB0aGV0YSAgICAiJiM5NTI7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgdGhldGEsIFUrMDNCOCBJU09ncmszIC0tPg0KLTwhRU5USVRZIGlvdGEgICAgICImIzk1MzsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBpb3RhLCBVKzAzQjkgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBrYXBwYSAgICAiJiM5NTQ7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIga2FwcGEsIFUrMDNCQSBJU09ncmszIC0tPg0KLTwhRU5USVRZIGxhbWJkYSAgICImIzk1NTsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBsYW1iZGEsIFUrMDNCQiBJU09ncmszIC0tPg0KLTwhRU5USVRZIG11ICAgICAgICImIzk1NjsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBtdSwgVSswM0JDIElTT2dyazMgLS0+DQotPCFFTlRJVFkgbnUgICAgICAgIiYjOTU3OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIG51LCBVKzAzQkQgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSB4aSAgICAgICAiJiM5NTg7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgeGksIFUrMDNCRSBJU09ncmszIC0tPg0KLTwhRU5USVRZIG9taWNyb24gICImIzk1OTsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBvbWljcm9uLCBVKzAzQkYgTkVXIC0tPg0KLTwhRU5USVRZIHBpICAgICAgICImIzk2MDsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBwaSwgVSswM0MwIElTT2dyazMgLS0+DQotPCFFTlRJVFkgcmhvICAgICAgIiYjOTYxOyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHJobywgVSswM0MxIElTT2dyazMgLS0+DQotPCFFTlRJVFkgc2lnbWFmICAgIiYjOTYyOyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGZpbmFsIHNpZ21hLCBVKzAzQzIgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBzaWdtYSAgICAiJiM5NjM7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgc2lnbWEsIFUrMDNDMyBJU09ncmszIC0tPg0KLTwhRU5USVRZIHRhdSAgICAgICImIzk2NDsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciB0YXUsIFUrMDNDNCBJU09ncmszIC0tPg0KLTwhRU5USVRZIHVwc2lsb24gICImIzk2NTsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciB1cHNpbG9uLCBVKzAzQzUgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBwaGkgICAgICAiJiM5NjY7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgcGhpLCBVKzAzQzYgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBjaGkgICAgICAiJiM5Njc7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgY2hpLCBVKzAzQzcgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBwc2kgICAgICAiJiM5Njg7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgcHNpLCBVKzAzQzggSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBvbWVnYSAgICAiJiM5Njk7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgb21lZ2EsIFUrMDNDOSBJU09ncmszIC0tPg0KLTwhRU5USVRZIHRoZXRhc3ltICImIzk3NzsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciB0aGV0YSBzeW1ib2wsIFUrMDNEMSBORVcgLS0+DQotPCFFTlRJVFkgdXBzaWggICAgIiYjOTc4OyIgPjwhLS0gZ3JlZWsgdXBzaWxvbiB3aXRoIGhvb2sgc3ltYm9sLCBVKzAzRDIgTkVXIC0tPg0KLTwhRU5USVRZIHBpdiAgICAgICImIzk4MjsiID48IS0tIGdyZWVrIHBpIHN5bWJvbCwgVSswM0Q2IElTT2dyazMgLS0+DQotDQotPCEtLSBHZW5lcmFsIFB1bmN0dWF0aW9uIC0tPg0KLTwhRU5USVRZIGJ1bGwgICAgICImIzgyMjY7IiA+PCEtLSBidWxsZXQgPSBibGFjayBzbWFsbCBjaXJjbGUsIFUrMjAyMiBJU09wdWIgIC0tPg0KLTwhLS0gYnVsbGV0IGlzIE5PVCB0aGUgc2FtZSBhcyBidWxsZXQgb3BlcmF0b3IsIFUrMjIxOSAtLT4NCi08IUVOVElUWSBoZWxsaXAgICAiJiM4MjMwOyIgPjwhLS0gaG9yaXpvbnRhbCBlbGxpcHNpcyA9IHRocmVlIGRvdCBsZWFkZXIsIFUrMjAyNiBJU09wdWIgIC0tPg0KLTwhRU5USVRZIHByaW1lICAgICImIzgyNDI7IiA+PCEtLSBwcmltZSA9IG1pbnV0ZXMgPSBmZWV0LCBVKzIwMzIgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBQcmltZSAgICAiJiM4MjQzOyIgPjwhLS0gZG91YmxlIHByaW1lID0gc2Vjb25kcyA9IGluY2hlcywgVSsyMDMzIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgb2xpbmUgICAgIiYjODI1NDsiID48IS0tIG92ZXJsaW5lID0gc3BhY2luZyBvdmVyc2NvcmUsIFUrMjAzRSBORVcgLS0+DQotPCFFTlRJVFkgZnJhc2wgICAgIiYjODI2MDsiID48IS0tIGZyYWN0aW9uIHNsYXNoLCBVKzIwNDQgTkVXIC0tPg0KLQ0KLTwhLS0gTGV0dGVybGlrZSBTeW1ib2xzIC0tPg0KLTwhRU5USVRZIHdlaWVycCAgICImIzg0NzI7IiA+PCEtLSBzY3JpcHQgY2FwaXRhbCBQID0gcG93ZXIgc2V0ID0gV2VpZXJzdHJhc3MgcCwgVSsyMTE4IElTT2Ftc28gLS0+DQotPCFFTlRJVFkgaW1hZ2UgICAgIiYjODQ2NTsiID48IS0tIGJsYWNrbGV0dGVyIGNhcGl0YWwgSSA9IGltYWdpbmFyeSBwYXJ0LCBVKzIxMTEgSVNPYW1zbyAtLT4NCi08IUVOVElUWSByZWFsICAgICAiJiM4NDc2OyIgPjwhLS0gYmxhY2tsZXR0ZXIgY2FwaXRhbCBSID0gcmVhbCBwYXJ0IHN5bWJvbCwgVSsyMTFDIElTT2Ftc28gLS0+DQotPCFFTlRJVFkgdHJhZGUgICAgIiYjODQ4MjsiID48IS0tIHRyYWRlIG1hcmsgc2lnbiwgVSsyMTIyIElTT251bSAtLT4NCi08IUVOVElUWSBhbGVmc3ltICAiJiM4NTAxOyIgPjwhLS0gYWxlZiBzeW1ib2wgPSBmaXJzdCB0cmFuc2Zpbml0ZSBjYXJkaW5hbCwgVSsyMTM1IE5FVyAtLT4NCi08IS0tIGFsZWYgc3ltYm9sIGlzIE5PVCB0aGUgc2FtZSBhcyBoZWJyZXcgbGV0dGVyIGFsZWYsIFUrMDVEMCBhbHRob3VnaA0KLSAgICAgdGhlIHNhbWUgZ2x5cGggY291bGQgYmUgdXNlZCB0byBkZXBpY3QgYm90aCBjaGFyYWN0ZXJzIC0tPg0KLQ0KLTwhLS0gQXJyb3dzIC0tPg0KLTwhRU5USVRZIGxhcnIgICAgICImIzg1OTI7IiA+PCEtLSBsZWZ0d2FyZHMgYXJyb3csIFUrMjE5MCBJU09udW0gLS0+DQotPCFFTlRJVFkgdWFyciAgICAgIiYjODU5MzsiID48IS0tIHVwd2FyZHMgYXJyb3csIFUrMjE5MSBJU09udW0tLT4NCi08IUVOVElUWSByYXJyICAgICAiJiM4NTk0OyIgPjwhLS0gcmlnaHR3YXJkcyBhcnJvdywgVSsyMTkyIElTT251bSAtLT4NCi08IUVOVElUWSBkYXJyICAgICAiJiM4NTk1OyIgPjwhLS0gZG93bndhcmRzIGFycm93LCBVKzIxOTMgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGhhcnIgICAgICImIzg1OTY7IiA+PCEtLSBsZWZ0IHJpZ2h0IGFycm93LCBVKzIxOTQgSVNPYW1zYSAtLT4NCi08IUVOVElUWSBjcmFyciAgICAiJiM4NjI5OyIgPjwhLS0gZG93bndhcmRzIGFycm93IHdpdGggY29ybmVyIGxlZnR3YXJkcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGNhcnJpYWdlIHJldHVybiwgVSsyMUI1IE5FVyAtLT4NCi08IUVOVElUWSBsQXJyICAgICAiJiM4NjU2OyIgPjwhLS0gbGVmdHdhcmRzIGRvdWJsZSBhcnJvdywgVSsyMUQwIElTT3RlY2ggLS0+DQotPCEtLSBVbmljb2RlIGRvZXMgbm90IHNheSB0aGF0IGxBcnIgaXMgdGhlIHNhbWUgYXMgdGhlICdpcyBpbXBsaWVkIGJ5JyBhcnJvdw0KLSAgICBidXQgYWxzbyBkb2VzIG5vdCBoYXZlIGFueSBvdGhlciBjaGFyYWN0ZXIgZm9yIHRoYXQgZnVuY3Rpb24uIFNvID8gbEFyciBjYW4NCi0gICAgYmUgdXNlZCBmb3IgJ2lzIGltcGxpZWQgYnknIGFzIElTT3RlY2ggc3VnZ2VzdHMgLS0+DQotPCFFTlRJVFkgdUFyciAgICAgIiYjODY1NzsiID48IS0tIHVwd2FyZHMgZG91YmxlIGFycm93LCBVKzIxRDEgSVNPYW1zYSAtLT4NCi08IUVOVElUWSByQXJyICAgICAiJiM4NjU4OyIgPjwhLS0gcmlnaHR3YXJkcyBkb3VibGUgYXJyb3csIFUrMjFEMiBJU090ZWNoIC0tPg0KLTwhLS0gVW5pY29kZSBkb2VzIG5vdCBzYXkgdGhpcyBpcyB0aGUgJ2ltcGxpZXMnIGNoYXJhY3RlciBidXQgZG9lcyBub3QgaGF2ZQ0KLSAgICAgYW5vdGhlciBjaGFyYWN0ZXIgd2l0aCB0aGlzIGZ1bmN0aW9uIHNvID8NCi0gICAgIHJBcnIgY2FuIGJlIHVzZWQgZm9yICdpbXBsaWVzJyBhcyBJU090ZWNoIHN1Z2dlc3RzIC0tPg0KLTwhRU5USVRZIGRBcnIgICAgICImIzg2NTk7IiA+PCEtLSBkb3dud2FyZHMgZG91YmxlIGFycm93LCBVKzIxRDMgSVNPYW1zYSAtLT4NCi08IUVOVElUWSBoQXJyICAgICAiJiM4NjYwOyIgPjwhLS0gbGVmdCByaWdodCBkb3VibGUgYXJyb3csIFUrMjFENCBJU09hbXNhIC0tPg0KLQ0KLTwhLS0gTWF0aGVtYXRpY2FsIE9wZXJhdG9ycyAtLT4NCi08IUVOVElUWSBmb3JhbGwgICAiJiM4NzA0OyIgPjwhLS0gZm9yIGFsbCwgVSsyMjAwIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgcGFydCAgICAgIiYjODcwNjsiID48IS0tIHBhcnRpYWwgZGlmZmVyZW50aWFsLCBVKzIyMDIgSVNPdGVjaCAgLS0+DQotPCFFTlRJVFkgZXhpc3QgICAgIiYjODcwNzsiID48IS0tIHRoZXJlIGV4aXN0cywgVSsyMjAzIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgZW1wdHkgICAgIiYjODcwOTsiID48IS0tIGVtcHR5IHNldCA9IG51bGwgc2V0ID0gZGlhbWV0ZXIsIFUrMjIwNSBJU09hbXNvIC0tPg0KLTwhRU5USVRZIG5hYmxhICAgICImIzg3MTE7IiA+PCEtLSBuYWJsYSA9IGJhY2t3YXJkIGRpZmZlcmVuY2UsIFUrMjIwNyBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGlzaW4gICAgICImIzg3MTI7IiA+PCEtLSBlbGVtZW50IG9mLCBVKzIyMDggSVNPdGVjaCAtLT4NCi08IUVOVElUWSBub3RpbiAgICAiJiM4NzEzOyIgPjwhLS0gbm90IGFuIGVsZW1lbnQgb2YsIFUrMjIwOSBJU090ZWNoIC0tPg0KLTwhRU5USVRZIG5pICAgICAgICImIzg3MTU7IiA+PCEtLSBjb250YWlucyBhcyBtZW1iZXIsIFUrMjIwQiBJU090ZWNoIC0tPg0KLTwhLS0gc2hvdWxkIHRoZXJlIGJlIGEgbW9yZSBtZW1vcmFibGUgbmFtZSB0aGFuICduaSc/IC0tPg0KLTwhRU5USVRZIHByb2QgICAgICImIzg3MTk7IiA+PCEtLSBuLWFyeSBwcm9kdWN0ID0gcHJvZHVjdCBzaWduLCBVKzIyMEYgSVNPYW1zYiAtLT4NCi08IS0tIHByb2QgaXMgTk9UIHRoZSBzYW1lIGNoYXJhY3RlciBhcyBVKzAzQTAgJ2dyZWVrIGNhcGl0YWwgbGV0dGVyIHBpJyB0aG91Z2gNCi0gICAgIHRoZSBzYW1lIGdseXBoIG1pZ2h0IGJlIHVzZWQgZm9yIGJvdGggLS0+DQotPCFFTlRJVFkgc3VtICAgICAgIiYjODcyMTsiID48IS0tIG4tYXJ5IHN1bWF0aW9uLCBVKzIyMTEgSVNPYW1zYiAtLT4NCi08IS0tIHN1bSBpcyBOT1QgdGhlIHNhbWUgY2hhcmFjdGVyIGFzIFUrMDNBMyAnZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgc2lnbWEnDQotICAgICB0aG91Z2ggdGhlIHNhbWUgZ2x5cGggbWlnaHQgYmUgdXNlZCBmb3IgYm90aCAtLT4NCi08IUVOVElUWSBtaW51cyAgICAiJiM4NzIyOyIgPjwhLS0gbWludXMgc2lnbiwgVSsyMjEyIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgbG93YXN0ICAgIiYjODcyNzsiID48IS0tIGFzdGVyaXNrIG9wZXJhdG9yLCBVKzIyMTcgSVNPdGVjaCAtLT4NCi08IUVOVElUWSByYWRpYyAgICAiJiM4NzMwOyIgPjwhLS0gc3F1YXJlIHJvb3QgPSByYWRpY2FsIHNpZ24sIFUrMjIxQSBJU090ZWNoIC0tPg0KLTwhRU5USVRZIHByb3AgICAgICImIzg3MzM7IiA+PCEtLSBwcm9wb3J0aW9uYWwgdG8sIFUrMjIxRCBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGluZmluICAgICImIzg3MzQ7IiA+PCEtLSBpbmZpbml0eSwgVSsyMjFFIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgYW5nICAgICAgIiYjODczNjsiID48IS0tIGFuZ2xlLCBVKzIyMjAgSVNPYW1zbyAtLT4NCi08IUVOVElUWSBhbmQgICAgICAiJiM4NzQzOyIgPjwhLS0gbG9naWNhbCBhbmQgPSB3ZWRnZSwgVSsyMjI3IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgb3IgICAgICAgIiYjODc0NDsiID48IS0tIGxvZ2ljYWwgb3IgPSB2ZWUsIFUrMjIyOCBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGNhcCAgICAgICImIzg3NDU7IiA+PCEtLSBpbnRlcnNlY3Rpb24gPSBjYXAsIFUrMjIyOSBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGN1cCAgICAgICImIzg3NDY7IiA+PCEtLSB1bmlvbiA9IGN1cCwgVSsyMjJBIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgaW50ICAgICAgIiYjODc0NzsiID48IS0tIGludGVncmFsLCBVKzIyMkIgSVNPdGVjaCAtLT4NCi08IUVOVElUWSB0aGVyZTQgICAiJiM4NzU2OyIgPjwhLS0gdGhlcmVmb3JlLCBVKzIyMzQgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBzaW0gICAgICAiJiM4NzY0OyIgPjwhLS0gdGlsZGUgb3BlcmF0b3IgPSB2YXJpZXMgd2l0aCA9IHNpbWlsYXIgdG8sIFUrMjIzQyBJU090ZWNoIC0tPg0KLTwhLS0gdGlsZGUgb3BlcmF0b3IgaXMgTk9UIHRoZSBzYW1lIGNoYXJhY3RlciBhcyB0aGUgdGlsZGUsIFUrMDA3RSwNCi0gICAgIGFsdGhvdWdoIHRoZSBzYW1lIGdseXBoIG1pZ2h0IGJlIHVzZWQgdG8gcmVwcmVzZW50IGJvdGggIC0tPg0KLTwhRU5USVRZIGNvbmcgICAgICImIzg3NzM7IiA+PCEtLSBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvLCBVKzIyNDUgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBhc3ltcCAgICAiJiM4Nzc2OyIgPjwhLS0gYWxtb3N0IGVxdWFsIHRvID0gYXN5bXB0b3RpYyB0bywgVSsyMjQ4IElTT2Ftc3IgLS0+DQotPCFFTlRJVFkgbmUgICAgICAgIiYjODgwMDsiID48IS0tIG5vdCBlcXVhbCB0bywgVSsyMjYwIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgZXF1aXYgICAgIiYjODgwMTsiID48IS0tIGlkZW50aWNhbCB0bywgVSsyMjYxIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgbGUgICAgICAgIiYjODgwNDsiID48IS0tIGxlc3MtdGhhbiBvciBlcXVhbCB0bywgVSsyMjY0IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgZ2UgICAgICAgIiYjODgwNTsiID48IS0tIGdyZWF0ZXItdGhhbiBvciBlcXVhbCB0bywgVSsyMjY1IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgc3ViICAgICAgIiYjODgzNDsiID48IS0tIHN1YnNldCBvZiwgVSsyMjgyIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgc3VwICAgICAgIiYjODgzNTsiID48IS0tIHN1cGVyc2V0IG9mLCBVKzIyODMgSVNPdGVjaCAtLT4NCi08IS0tIG5vdGUgdGhhdCBuc3VwLCAnbm90IGEgc3VwZXJzZXQgb2YsIFUrMjI4MycgaXMgbm90IGNvdmVyZWQgYnkgdGhlIFN5bWJvbA0KLSAgICAgZm9udCBlbmNvZGluZyBhbmQgaXMgbm90IGluY2x1ZGVkLiBTaG91bGQgaXQgYmUsIGZvciBzeW1tZXRyeT8NCi0gICAgIEl0IGlzIGluIElTT2Ftc24gIC0tPg0KLTwhRU5USVRZIG5zdWIgICAgICImIzg4MzY7IiA+PCEtLSBub3QgYSBzdWJzZXQgb2YsIFUrMjI4NCBJU09hbXNuIC0tPg0KLTwhRU5USVRZIHN1YmUgICAgICImIzg4Mzg7IiA+PCEtLSBzdWJzZXQgb2Ygb3IgZXF1YWwgdG8sIFUrMjI4NiBJU090ZWNoIC0tPg0KLTwhRU5USVRZIHN1cGUgICAgICImIzg4Mzk7IiA+PCEtLSBzdXBlcnNldCBvZiBvciBlcXVhbCB0bywgVSsyMjg3IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgb3BsdXMgICAgIiYjODg1MzsiID48IS0tIGNpcmNsZWQgcGx1cyA9IGRpcmVjdCBzdW0sIFUrMjI5NSBJU09hbXNiIC0tPg0KLTwhRU5USVRZIG90aW1lcyAgICImIzg4NTU7IiA+PCEtLSBjaXJjbGVkIHRpbWVzID0gdmVjdG9yIHByb2R1Y3QsIFUrMjI5NyBJU09hbXNiIC0tPg0KLTwhRU5USVRZIHBlcnAgICAgICImIzg4Njk7IiA+PCEtLSB1cCB0YWNrID0gb3J0aG9nb25hbCB0byA9IHBlcnBlbmRpY3VsYXIsIFUrMjJBNSBJU090ZWNoIC0tPg0KLTwhRU5USVRZIHNkb3QgICAgICImIzg5MDE7IiA+PCEtLSBkb3Qgb3BlcmF0b3IsIFUrMjJDNSBJU09hbXNiIC0tPg0KLTwhLS0gZG90IG9wZXJhdG9yIGlzIE5PVCB0aGUgc2FtZSBjaGFyYWN0ZXIgYXMgVSswMEI3IG1pZGRsZSBkb3QgLS0+DQotDQotPCEtLSBNaXNjZWxsYW5lb3VzIFRlY2huaWNhbCAtLT4NCi08IUVOVElUWSBsY2VpbCAgICAiJiM4OTY4OyIgPjwhLS0gbGVmdCBjZWlsaW5nID0gYXBsIHVwc3RpbGUsIFUrMjMwOCBJU09hbXNjICAtLT4NCi08IUVOVElUWSByY2VpbCAgICAiJiM4OTY5OyIgPjwhLS0gcmlnaHQgY2VpbGluZywgVSsyMzA5IElTT2Ftc2MgIC0tPg0KLTwhRU5USVRZIGxmbG9vciAgICImIzg5NzA7IiA+PCEtLSBsZWZ0IGZsb29yID0gYXBsIGRvd25zdGlsZSwgVSsyMzBBIElTT2Ftc2MgIC0tPg0KLTwhRU5USVRZIHJmbG9vciAgICImIzg5NzE7IiA+PCEtLSByaWdodCBmbG9vciwgVSsyMzBCIElTT2Ftc2MgIC0tPg0KLTwhRU5USVRZIGxhbmcgICAgICImIzkwMDE7IiA+PCEtLSBsZWZ0LXBvaW50aW5nIGFuZ2xlIGJyYWNrZXQgPSBicmEsIFUrMjMyOSBJU090ZWNoIC0tPg0KLTwhLS0gbGFuZyBpcyBOT1QgdGhlIHNhbWUgY2hhcmFjdGVyIGFzIFUrMDAzQyAnbGVzcyB0aGFuJw0KLSAgICAgb3IgVSsyMDM5ICdzaW5nbGUgbGVmdC1wb2ludGluZyBhbmdsZSBxdW90YXRpb24gbWFyaycgLS0+DQotPCFFTlRJVFkgcmFuZyAgICAgIiYjOTAwMjsiID48IS0tIHJpZ2h0LXBvaW50aW5nIGFuZ2xlIGJyYWNrZXQgPSBrZXQsIFUrMjMyQSBJU090ZWNoIC0tPg0KLTwhLS0gcmFuZyBpcyBOT1QgdGhlIHNhbWUgY2hhcmFjdGVyIGFzIFUrMDAzRSAnZ3JlYXRlciB0aGFuJw0KLSAgICAgb3IgVSsyMDNBICdzaW5nbGUgcmlnaHQtcG9pbnRpbmcgYW5nbGUgcXVvdGF0aW9uIG1hcmsnIC0tPg0KLQ0KLTwhLS0gR2VvbWV0cmljIFNoYXBlcyAtLT4NCi08IUVOVElUWSBsb3ogICAgICAiJiM5Njc0OyIgPjwhLS0gbG96ZW5nZSwgVSsyNUNBIElTT3B1YiAtLT4NCi0NCi08IS0tIE1pc2NlbGxhbmVvdXMgU3ltYm9scyAtLT4NCi08IUVOVElUWSBzcGFkZXMgICAiJiM5ODI0OyIgPjwhLS0gYmxhY2sgc3BhZGUgc3VpdCwgVSsyNjYwIElTT3B1YiAtLT4NCi08IS0tIGJsYWNrIGhlcmUgc2VlbXMgdG8gbWVhbiBmaWxsZWQgYXMgb3Bwb3NlZCB0byBob2xsb3cgLS0+DQotPCFFTlRJVFkgY2x1YnMgICAgIiYjOTgyNzsiID48IS0tIGJsYWNrIGNsdWIgc3VpdCA9IHNoYW1yb2NrLCBVKzI2NjMgSVNPcHViIC0tPg0KLTwhRU5USVRZIGhlYXJ0cyAgICImIzk4Mjk7IiA+PCEtLSBibGFjayBoZWFydCBzdWl0ID0gdmFsZW50aW5lLCBVKzI2NjUgSVNPcHViIC0tPg0KLTwhRU5USVRZIGRpYW1zICAgICImIzk4MzA7IiA+PCEtLSBibGFjayBkaWFtb25kIHN1aXQsIFUrMjY2NiBJU09wdWIgLS0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtc3ltYm9sLmVudCAtLT4NCi0NCi0NCi08IUVOVElUWSAlIHhodG1sLXNwZWNpYWwNCi0gICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFNwZWNpYWwgZm9yIFhIVE1MLy9FTiINCi0gICAgICAgICAgICJ4aHRtbC1zcGVjaWFsLmVudCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhNTC1jb21wYXRpYmxlIElTTyBTcGVjaWFsIENoYXJhY3RlciBFbnRpdHkgU2V0IGZvciBYSFRNTCAuLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1zcGVjaWFsLmVudA0KLQ0KLSAgICAgVHlwaWNhbCBpbnZvY2F0aW9uOg0KLQ0KLSAgICAgICA8IUVOVElUWSAlIHhodG1sLXNwZWNpYWwNCi0gICAgICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBTcGVjaWFsIGZvciBYSFRNTC8vRU4iDQotICAgICAgICAgICAgICAgICAgInhodG1sLXNwZWNpYWwuZW50IiA+DQotICAgICAgICV4aHRtbC1zcGVjaWFsOw0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgU3BlY2lhbCBmb3IgWEhUTUwvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1zcGVjaWFsLmVudCINCi0NCi0gICAgIFJldmlzaW9uOiAgJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFBvcnRpb25zIChDKSBJbnRlcm5hdGlvbmFsIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uIDE5ODY6DQotICAgICBQZXJtaXNzaW9uIHRvIGNvcHkgaW4gYW55IGZvcm0gaXMgZ3JhbnRlZCBmb3IgdXNlIHdpdGggY29uZm9ybWluZw0KLSAgICAgU0dNTCBzeXN0ZW1zIGFuZCBhcHBsaWNhdGlvbnMgYXMgZGVmaW5lZCBpbiBJU08gODg3OSwgcHJvdmlkZWQNCi0gICAgIHRoaXMgbm90aWNlIGlzIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMuDQotDQotICAgICBSZXZpc2lvbnM6DQotMjAwMC0xMC0yODogYWRkZWQgJmFwb3M7IGFuZCBhbHRlcmVkIFhNTCBQcmVkZWZpbmVkIEVudGl0aWVzIGZvciBjb21wYXRpYmlsaXR5DQotLS0+DQotDQotPCEtLSBSZWxldmFudCBJU08gZW50aXR5IHNldCBpcyBnaXZlbiB1bmxlc3MgbmFtZXMgYXJlIG5ld2x5IGludHJvZHVjZWQuDQotICAgICBOZXcgbmFtZXMgKGkuZS4sIG5vdCBpbiBJU08gODg3OSBbU0dNTF0gbGlzdCkgZG8gbm90IGNsYXNoIHdpdGgNCi0gICAgIGFueSBleGlzdGluZyBJU08gODg3OSBlbnRpdHkgbmFtZXMuIElTTyAxMDY0NiBbSVNPMTA2NDZdIGNoYXJhY3Rlcg0KLSAgICAgbnVtYmVycyBhcmUgZ2l2ZW4gZm9yIGVhY2ggY2hhcmFjdGVyLCBpbiBoZXguIEVudGl0eSB2YWx1ZXMgYXJlDQotICAgICBkZWNpbWFsIGNvbnZlcnNpb25zIG9mIHRoZSBJU08gMTA2NDYgdmFsdWVzIGFuZCByZWZlciB0byB0aGUNCi0gICAgIGRvY3VtZW50IGNoYXJhY3RlciBzZXQuIE5hbWVzIGFyZSBVbmljb2RlIFtVTklDT0RFXSBuYW1lcy4NCi0tLT4NCi0NCi08IS0tIEMwIENvbnRyb2xzIGFuZCBCYXNpYyBMYXRpbiAtLT4NCi08IUVOVElUWSBsdCAgICAgICImIzM4OyYjNjA7IiA+PCEtLSBsZXNzLXRoYW4gc2lnbiwgVSswMDNDIElTT251bSAtLT4NCi08IUVOVElUWSBndCAgICAgICImIzYyOyIgPjwhLS0gZ3JlYXRlci10aGFuIHNpZ24sIFUrMDAzRSBJU09udW0gLS0+DQotPCFFTlRJVFkgYW1wICAgICAiJiMzODsmIzM4OyIgPjwhLS0gYW1wZXJzYW5kLCBVKzAwMjYgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGFwb3MgICAgIiYjMzk7IiA+PCEtLSBhcG9zdHJvcGhlLCBVKzAwMjcgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHF1b3QgICAgIiYjMzQ7IiA+PCEtLSBxdW90YXRpb24gbWFyayA9IEFQTCBxdW90ZSwgVSswMDIyIElTT251bSAtLT4NCi0NCi08IS0tIExhdGluIEV4dGVuZGVkLUEgLS0+DQotPCFFTlRJVFkgT0VsaWcgICAiJiMzMzg7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIGxpZ2F0dXJlIE9FLCBVKzAxNTIgSVNPbGF0MiAtLT4NCi08IUVOVElUWSBvZWxpZyAgICImIzMzOTsiID48IS0tIGxhdGluIHNtYWxsIGxpZ2F0dXJlIG9lLCBVKzAxNTMgSVNPbGF0MiAtLT4NCi0NCi08IS0tIGxpZ2F0dXJlIGlzIGEgbWlzbm9tZXIsIHRoaXMgaXMgYSBzZXBhcmF0ZSBjaGFyYWN0ZXIgaW4gc29tZSBsYW5ndWFnZXMgLS0+DQotPCFFTlRJVFkgU2Nhcm9uICAiJiMzNTI7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIGxldHRlciBTIHdpdGggY2Fyb24sIFUrMDE2MCBJU09sYXQyIC0tPg0KLTwhRU5USVRZIHNjYXJvbiAgIiYjMzUzOyIgPjwhLS0gbGF0aW4gc21hbGwgbGV0dGVyIHMgd2l0aCBjYXJvbiwgVSswMTYxIElTT2xhdDIgLS0+DQotPCFFTlRJVFkgWXVtbCAgICAiJiMzNzY7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIGxldHRlciBZIHdpdGggZGlhZXJlc2lzLCBVKzAxNzggSVNPbGF0MiAtLT4NCi0NCi08IS0tIFNwYWNpbmcgTW9kaWZpZXIgTGV0dGVycyAtLT4NCi08IUVOVElUWSBjaXJjICAgICImIzcxMDsiID48IS0tIG1vZGlmaWVyIGxldHRlciBjaXJjdW1mbGV4IGFjY2VudCwgVSswMkM2IElTT3B1YiAtLT4NCi08IUVOVElUWSB0aWxkZSAgICImIzczMjsiID48IS0tIHNtYWxsIHRpbGRlLCBVKzAyREMgSVNPZGlhIC0tPg0KLQ0KLTwhLS0gR2VuZXJhbCBQdW5jdHVhdGlvbiAtLT4NCi08IUVOVElUWSBlbnNwICAgICImIzgxOTQ7IiA+PCEtLSBlbiBzcGFjZSwgVSsyMDAyIElTT3B1YiAtLT4NCi08IUVOVElUWSBlbXNwICAgICImIzgxOTU7IiA+PCEtLSBlbSBzcGFjZSwgVSsyMDAzIElTT3B1YiAtLT4NCi08IUVOVElUWSB0aGluc3AgICImIzgyMDE7IiA+PCEtLSB0aGluIHNwYWNlLCBVKzIwMDkgSVNPcHViIC0tPg0KLTwhRU5USVRZIHp3bmogICAgIiYjODIwNDsiID48IS0tIHplcm8gd2lkdGggbm9uLWpvaW5lciwgVSsyMDBDIE5FVyBSRkMgMjA3MCAtLT4NCi08IUVOVElUWSB6d2ogICAgICImIzgyMDU7IiA+PCEtLSB6ZXJvIHdpZHRoIGpvaW5lciwgVSsyMDBEIE5FVyBSRkMgMjA3MCAtLT4NCi08IUVOVElUWSBscm0gICAgICImIzgyMDY7IiA+PCEtLSBsZWZ0LXRvLXJpZ2h0IG1hcmssIFUrMjAwRSBORVcgUkZDIDIwNzAgLS0+DQotPCFFTlRJVFkgcmxtICAgICAiJiM4MjA3OyIgPjwhLS0gcmlnaHQtdG8tbGVmdCBtYXJrLCBVKzIwMEYgTkVXIFJGQyAyMDcwIC0tPg0KLTwhRU5USVRZIG5kYXNoICAgIiYjODIxMTsiID48IS0tIGVuIGRhc2gsIFUrMjAxMyBJU09wdWIgLS0+DQotPCFFTlRJVFkgbWRhc2ggICAiJiM4MjEyOyIgPjwhLS0gZW0gZGFzaCwgVSsyMDE0IElTT3B1YiAtLT4NCi08IUVOVElUWSBsc3F1byAgICImIzgyMTY7IiA+PCEtLSBsZWZ0IHNpbmdsZSBxdW90YXRpb24gbWFyaywgVSsyMDE4IElTT251bSAtLT4NCi08IUVOVElUWSByc3F1byAgICImIzgyMTc7IiA+PCEtLSByaWdodCBzaW5nbGUgcXVvdGF0aW9uIG1hcmssIFUrMjAxOSBJU09udW0gLS0+DQotPCFFTlRJVFkgc2JxdW8gICAiJiM4MjE4OyIgPjwhLS0gc2luZ2xlIGxvdy05IHF1b3RhdGlvbiBtYXJrLCBVKzIwMUEgTkVXIC0tPg0KLTwhRU5USVRZIGxkcXVvICAgIiYjODIyMDsiID48IS0tIGxlZnQgZG91YmxlIHF1b3RhdGlvbiBtYXJrLCBVKzIwMUMgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHJkcXVvICAgIiYjODIyMTsiID48IS0tIHJpZ2h0IGRvdWJsZSBxdW90YXRpb24gbWFyaywgVSsyMDFEIElTT251bSAtLT4NCi08IUVOVElUWSBiZHF1byAgICImIzgyMjI7IiA+PCEtLSBkb3VibGUgbG93LTkgcXVvdGF0aW9uIG1hcmssIFUrMjAxRSBORVcgLS0+DQotPCFFTlRJVFkgZGFnZ2VyICAiJiM4MjI0OyIgPjwhLS0gZGFnZ2VyLCBVKzIwMjAgSVNPcHViIC0tPg0KLTwhRU5USVRZIERhZ2dlciAgIiYjODIyNTsiID48IS0tIGRvdWJsZSBkYWdnZXIsIFUrMjAyMSBJU09wdWIgLS0+DQotPCFFTlRJVFkgcGVybWlsICAiJiM4MjQwOyIgPjwhLS0gcGVyIG1pbGxlIHNpZ24sIFUrMjAzMCBJU090ZWNoIC0tPg0KLQ0KLTwhLS0gbHNhcXVvIGlzIHByb3Bvc2VkIGJ1dCBub3QgeWV0IElTTyBzdGFuZGFyZGl6ZWQgLS0+DQotPCFFTlRJVFkgbHNhcXVvICAiJiM4MjQ5OyIgPjwhLS0gc2luZ2xlIGxlZnQtcG9pbnRpbmcgYW5nbGUgcXVvdGF0aW9uIG1hcmssIFUrMjAzOSBJU08gcHJvcG9zZWQgLS0+DQotPCEtLSByc2FxdW8gaXMgcHJvcG9zZWQgYnV0IG5vdCB5ZXQgSVNPIHN0YW5kYXJkaXplZCAtLT4NCi08IUVOVElUWSByc2FxdW8gICImIzgyNTA7IiA+PCEtLSBzaW5nbGUgcmlnaHQtcG9pbnRpbmcgYW5nbGUgcXVvdGF0aW9uIG1hcmssIFUrMjAzQSBJU08gcHJvcG9zZWQgLS0+DQotPCFFTlRJVFkgZXVybyAgICAiJiM4MzY0OyIgPjwhLS0gZXVybyBzaWduLCBVKzIwQUMgTkVXIC0tPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLXNwZWNpYWwuZW50IC0tPg0KLQ0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWNoYXJlbnQtMS5tb2QgLS0+DQotDQotPCEtLSANCi0JV01MIGRvY3VtZW50IG1vZGVsDQotLS0+DQotPCFFTlRJVFkgJSB3bWwtbW9kZWwubW9kIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VOVElUSUVTIFdNTCAyLjAgRG9jdW1lbnQgTW9kZWwgMS4wLy9FTiINCi0gICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWwyMC1tb2RlbC0xLm1vZCI+DQotPCEtLSBXTUwgMi4wIERvY3VtZW50IE1vZGVsIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogd21sMjAtbW9kZWwtMS5tb2QgLS0+DQotPCEtLSANCi0gICAgQFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtLCBMdGQuIDIwMDEuDQotDQotCVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gDQotCVdlYiBzaXRlIChodHRwOi8vd3d3LndhcGZvcnVtLm9yZy93aGF0L2NvcHlyaWdodC5odG0pLg0KLS0tPg0KLTwhLS0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XQVBGT1JVTS8vRU5USVRJRVMgV01MIDIuMCBEb2N1bWVudCBNb2RlbCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL2R0ZC93bWwyMC1tb2RlbC0xLm1vZCINCi0gICAgICANCi0gICAgIFRoaXMgbW9kdWxlIGRlc2NyaWJlcyB0aGUgZ3JvdXBpbmdzIG9mIGVsZW1lbnRzIHRoYXQgbWFrZSB1cA0KLSAgICAgY29tbW9uIGNvbnRlbnQgbW9kZWxzIGZvciBXTUwgYW5kIFhIVE1MIGVsZW1lbnRzLg0KLQ0KLSAgICAgVGhyZWUgYmFzaWMgY29udGVudCBtb2RlbHMgYXJlIGRlY2xhcmVkOg0KLQ0KLSAgICAgICAgICVJbmxpbmUubWl4OyAgY2hhcmFjdGVyLWxldmVsIGVsZW1lbnRzDQotICAgICAgICAgJUJsb2NrLm1peDsgICBibG9jay1saWtlIGVsZW1lbnRzLCBlZy4sIHBhcmFncmFwaHMgYW5kIGxpc3RzDQotICAgICAgICAgJUZsb3cubWl4OyAgICBhbnkgYmxvY2sgb3IgaW5saW5lIGVsZW1lbnRzDQotDQotICAgICBBbnkgcGFyYW1ldGVyIGVudGl0aWVzIGRlY2xhcmVkIGluIHRoaXMgbW9kdWxlIG1heSBiZSB1c2VkDQotICAgICB0byBjcmVhdGUgZWxlbWVudCBjb250ZW50IG1vZGVscywgYnV0IHRoZSBhYm92ZSB0aHJlZSBhcmUNCi0gICAgIGNvbnNpZGVyZWQgJ2dsb2JhbCcgKGluc29mYXIgYXMgdGhhdCB0ZXJtIGFwcGxpZXMgaGVyZSkuDQotICAgICANCi0gICAgICAgIAkgICAgIA0KLS0tPg0KLTwhLS0gDQotCU9wdGlvbmFsIEVsZW1lbnRzIGluIGhlYWQgIA0KLS0tPg0KLTwhRU5USVRZICUgSGVhZE9wdHMubWl4ICIoICVtZXRhLnFuYW1lOyANCi0JCXwgJWxpbmsucW5hbWU7IA0KLQkJfCAlc3R5bGUucW5hbWU7IA0KLQkJfCAlb2JqZWN0LnFuYW1lOyANCi0JCXwgJWFjY2Vzcy5xbmFtZTspKiI+DQotPCEtLSANCi0JVGFzayBlbGVtZW50cw0KLQ0KLQlVc2VkIGZvciB0aGUgV01MIGRvIGFuZCBvbmV2ZW50IGVsZW1lbnRzDQotLS0+DQotPCFFTlRJVFkgJSBUYXNrcy5jbGFzcyAiKCVnby5xbmFtZTsgDQotCQl8ICVwcmV2LnFuYW1lOyANCi0JCXwgJW5vb3AucW5hbWU7IA0KLQkJfCAlcmVmcmVzaC5xbmFtZTspIj4NCi08IS0tIA0KLQlUYXNrcyB3aXRob3V0IG5vb3AgZWxlbWVudA0KLQ0KLQlVc2VkIGZvciB0aGUgV01MIGFuY2hvcg0KLS0tPg0KLTwhRU5USVRZICUgVGFza3Mtbm9ub29wLmNsYXNzICIlZ28ucW5hbWU7IA0KLQkJfCAlcHJldi5xbmFtZTsgDQotCQl8ICVyZWZyZXNoLnFuYW1lOyI+DQotPCEtLQ0KLQlEbyBlbGVtZW50DQotLS0+DQotPCFFTlRJVFkgJSBEby5jbGFzcyAiJWRvLnFuYW1lOyI+DQotPCEtLSANCi0JTWlzY2VsbGFuZW91cyBFbGVtZW50cyAgDQotCQ0KLQlUaGlzIGlzIG5vdCB1c2VkIGZvciBhbnl0aGluZyByaWdodCBub3cuIA0KLS0tPg0KLTwhRU5USVRZICUgTWlzYy5jbGFzcyAiIj4NCi08IS0tIA0KLQlJbmxpbmUgRWxlbWVudHMgIA0KLS0tPg0KLTwhRU5USVRZICUgSW5sU3RydWN0LmNsYXNzICIlYnIucW5hbWU7IA0KLQl8ICVzcGFuLnFuYW1lOyI+DQotPCFFTlRJVFkgJSBJbmxQaHJhcy5jbGFzcyAifCAlZW0ucW5hbWU7IA0KLQl8ICVzdHJvbmcucW5hbWU7IA0KLQl8ICVkZm4ucW5hbWU7IA0KLQl8ICVjb2RlLnFuYW1lOyANCi0JfCAlc2FtcC5xbmFtZTsgDQotCXwgJWtiZC5xbmFtZTsgDQotCXwgJXZhci5xbmFtZTsgDQotCXwgJWNpdGUucW5hbWU7IA0KLSAgICAgCXwgJWFiYnIucW5hbWU7IA0KLQl8ICVhY3JvbnltLnFuYW1lOyANCi0JfCAlcS5xbmFtZTsiPg0KLTwhRU5USVRZICUgSW5sUHJlcy5jbGFzcyAifCAlaS5xbmFtZTsgDQotCXwgJWIucW5hbWU7IA0KLQl8ICViaWcucW5hbWU7IA0KLQl8ICVzbWFsbC5xbmFtZTsNCi0JfCAldS5xbmFtZTsiPg0KLTwhRU5USVRZICUgSTE4bi5jbGFzcyAiIj4NCi08IUVOVElUWSAlIEFuY2hvci5jbGFzcyAifCAlYS5xbmFtZTsgDQotCXwgJWFuY2hvci5xbmFtZTsgfCAlZG8ucW5hbWU7Ij4NCi08IUVOVElUWSAlIElubFNwZWNpYWwuY2xhc3MgInwgJWltZy5xbmFtZTsgDQotCSB8ICVvYmplY3QucW5hbWU7IA0KLQl8ICVnZXR2YXIucW5hbWU7Ij4NCi08IUVOVElUWSAlIElubEZvcm0uY2xhc3MgInwgJWlucHV0LnFuYW1lOyANCi0JIHwgJXNlbGVjdC5xbmFtZTsgDQotCSB8ICV0ZXh0YXJlYS5xbmFtZTsNCi0gICAgICAgICB8ICVsYWJlbC5xbmFtZTsiPg0KLTwhRU5USVRZICUgSW5saW5lLmV4dHJhICIiPg0KLTwhRU5USVRZICUgSW5saW5lLmNsYXNzICIlSW5sU3RydWN0LmNsYXNzOw0KLSAgICAgICVJbmxQaHJhcy5jbGFzczsNCi0gICAgICAlSW5sUHJlcy5jbGFzczsNCi0gICAgICAlQW5jaG9yLmNsYXNzOw0KLSAgICAgICVJbmxTcGVjaWFsLmNsYXNzOw0KLSAgICAgICVJbmxGb3JtLmNsYXNzOw0KLSAgICAgICVJbmxpbmUuZXh0cmE7Ij4NCi08IUVOVElUWSAlIElubE5vQW5jaG9yLmNsYXNzICIlSW5sU3RydWN0LmNsYXNzOw0KLSAgICAgICVJbmxQaHJhcy5jbGFzczsNCi0gICAgICAlSW5sUHJlcy5jbGFzczsNCi0gICAgICAlSW5sU3BlY2lhbC5jbGFzczsNCi0gICAgICAlSW5sRm9ybS5jbGFzczsNCi0gICAgICAlSW5saW5lLmV4dHJhOyI+DQotPCFFTlRJVFkgJSBJbmxOb0FuY2hvci5taXggIiVJbmxOb0FuY2hvci5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiPg0KLTwhRU5USVRZICUgSW5saW5lLm1peCAiJUlubGluZS5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiPg0KLTwhLS0gDQotCUJsb2NrIEVsZW1lbnRzICANCi0tLT4NCi08IUVOVElUWSAlIEhlYWRpbmcuY2xhc3MgIiVoMS5xbmFtZTsgDQotCXwgJWgyLnFuYW1lOyANCi0JfCAlaDMucW5hbWU7IA0KLQl8ICVoNC5xbmFtZTsgDQotCXwgJWg1LnFuYW1lOyANCi0JfCAlaDYucW5hbWU7Ij4NCi08IUVOVElUWSAlIExpc3QuY2xhc3MgIiV1bC5xbmFtZTsgDQotCXwgJW9sLnFuYW1lOyANCi0JfCAlZGwucW5hbWU7Ij4NCi08IUVOVElUWSAlIFRhYmxlLmNsYXNzICJ8ICV0YWJsZS5xbmFtZTsiPg0KLTwhRU5USVRZICUgRm9ybS5jbGFzcyAifCAlZm9ybS5xbmFtZTsiPg0KLTwhRU5USVRZICUgRmllbGRzZXQuY2xhc3MgInwgJWZpZWxkc2V0LnFuYW1lOyI+DQotPCFFTlRJVFkgJSBCbGtTdHJ1Y3QuY2xhc3MgIiVwLnFuYW1lOyANCi0JfCAlZGl2LnFuYW1lOyI+DQotPCFFTlRJVFkgJSBCbGtQaHJhcy5jbGFzcyAifCAlcHJlLnFuYW1lOyANCi0JIHwgJWJsb2NrcXVvdGUucW5hbWU7IA0KLQkgfCAlYWRkcmVzcy5xbmFtZTsiPg0KLTwhRU5USVRZICUgQmxrUHJlcy5jbGFzcyAifCAlaHIucW5hbWU7Ij4NCi08IUVOVElUWSAlIEJsa1NwZWNpYWwuY2xhc3MgIiVUYWJsZS5jbGFzczsNCi0gICAgICAlRm9ybS5jbGFzczsNCi0gICAgICAlRmllbGRzZXQuY2xhc3M7Ij4NCi08IUVOVElUWSAlIEJsb2NrLmV4dHJhICIiPg0KLTwhRU5USVRZICUgQmxvY2suY2xhc3MgIiVCbGtTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUJsa1BocmFzLmNsYXNzOw0KLQkgJUJsa1ByZXMuY2xhc3M7DQotICAgICAgJUJsa1NwZWNpYWwuY2xhc3M7DQotICAgICAgJUJsb2NrLmV4dHJhOyI+DQotPCFFTlRJVFkgJSBCbG9jay5taXggIiVIZWFkaW5nLmNsYXNzOw0KLSAgICAgIHwgJUxpc3QuY2xhc3M7DQotICAgICAgfCAlQmxvY2suY2xhc3M7ICAgICANCi0gICAgICB8ICVEby5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiPg0KLTwhRU5USVRZICUgQmxrTm9Gb3JtLm1peCAiJUhlYWRpbmcuY2xhc3M7DQotICAgICAgfCAlTGlzdC5jbGFzczsNCi0gICAgICB8ICVCbGtTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUJsa1BocmFzLmNsYXNzOw0KLSAgICAgICVCbGtQcmVzLmNsYXNzOw0KLSAgICAgIHwgJXRhYmxlLnFuYW1lOw0KLSAgICAgICVCbG9jay5leHRyYTsNCi0gICAgICAlTWlzYy5jbGFzczsiPg0KLTwhLS0gDQotCUFsbCBDb250ZW50IEVsZW1lbnRzICANCi0tLT4NCi08IS0tIA0KLQlkZWNsYXJlcyBhbGwgY29udGVudCBleGNlcHQgdGFibGVzDQotLS0+DQotPCFFTlRJVFkgJSBGbG93Tm9UYWJsZS5taXggIiVIZWFkaW5nLmNsYXNzOw0KLSAgICAgIHwgJUxpc3QuY2xhc3M7DQotICAgICAgfCAlQmxrU3RydWN0LmNsYXNzOw0KLSAgICAgICVCbGtQaHJhcy5jbGFzczsNCi0gICAgICAlRm9ybS5jbGFzczsNCi0gICAgICAlQmxvY2suZXh0cmE7DQotICAgICAgfCAlSW5saW5lLmNsYXNzOw0KLSAgICAgICVNaXNjLmNsYXNzOyI+DQotPCFFTlRJVFkgJSBGbG93Lm1peCAiJUhlYWRpbmcuY2xhc3M7DQotICAgICAgfCAlTGlzdC5jbGFzczsNCi0gICAgICB8ICVCbG9jay5jbGFzczsNCi0gICAgICB8ICVJbmxpbmUuY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ij4NCi08IS0tIAkNCi0JVGVtcGxhdGUgbGV2ZWwgZWxlbWVudHMgDQotLS0+DQotPCFFTlRJVFkgJSBUZW1wbGF0ZS5taXggIiggJW9uZXZlbnQucW5hbWU7KSoiPg0KLTwhLS0gDQotCUNvbnRlbnQgbW9kZWwgb2YgdGhlIFdNTCBjYXJkIGFuZCBYSFRNTCBib2R5IGVsZW1lbnRzDQotLS0+DQotPCFFTlRJVFkgJSBDYXJkQm9keS5taXggIiglb25ldmVudC5xbmFtZTsqLCAldGltZXIucW5hbWU7PywgICggJUJsb2NrLm1peDsgKSspIj4NCi08IS0tIGVuZCBvZiB3bWwyMC1tb2RlbC0xLm1vZCAtLT4NCi0NCi0NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0NCi0JCVhIVE1MIG1vZHVsZXMgDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIFRleHQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHByZS5jb250ZW50ICIoICNQQ0RBVEENCi0gICAgICB8ICVJbmxTdHJ1Y3QuY2xhc3M7IHwgJWkucW5hbWU7IHwgJWIucW5hbWU7IA0KLSAgICAgICVJbmxQaHJhcy5jbGFzczsNCi0gICAgICAlQW5jaG9yLmNsYXNzOw0KLSAgICAgICVJbmxpbmUuZXh0cmE7IA0KLQl8ICVnZXR2YXIucW5hbWU7DQotCXwgJWlucHV0LnFuYW1lO3wgJXNlbGVjdC5xbmFtZTspKiI+DQotPCFFTlRJVFkgJSBwLmNvbnRlbnQgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyB8ICV0YWJsZS5xbmFtZTsgfCAlZmllbGRzZXQucW5hbWU7KSoiPg0KLTwhRU5USVRZICUgeGh0bWwtdGV4dC5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIFRleHQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXRleHQtMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIFRleHQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC10ZXh0LTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBUZXh0IDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXRleHQtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gVGV4dHVhbCBDb250ZW50DQotDQotICAgICBUaGUgVGV4dCBtb2R1bGUgaW5jbHVkZXMgZGVjbGFyYXRpb25zIGZvciBhbGwgY29yZQ0KLSAgICAgdGV4dCBjb250YWluZXIgZWxlbWVudHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMuDQotLS0+DQotDQotPCFFTlRJVFkgJSB4aHRtbC1pbmxzdHJ1Y3QubW9kdWxlICJJTkNMVURFIiA+DQotPCFbJXhodG1sLWlubHN0cnVjdC5tb2R1bGU7Ww0KLTwhRU5USVRZICUgeGh0bWwtaW5sc3RydWN0Lm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIElubGluZSBTdHJ1Y3R1cmFsIDEuMC8vRU4iDQotICAgICAgICAgICAgInhodG1sLWlubHN0cnVjdC0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIElubGluZSBTdHJ1Y3R1cmFsIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1pbmxzdHJ1Y3QtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIElubGluZSBTdHJ1Y3R1cmFsIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWlubHN0cnVjdC0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBJbmxpbmUgU3RydWN0dXJhbA0KLQ0KLSAgICAgICAgYnIsIHNwYW4NCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBlbGVtZW50cyBhbmQgdGhlaXIgYXR0cmlidXRlcw0KLSAgICAgdXNlZCB0byBzdXBwb3J0IGlubGluZS1sZXZlbCBzdHJ1Y3R1cmFsIG1hcmt1cC4NCi0tLT4NCi0NCi08IS0tIGJyOiBmb3JjZWQgbGluZSBicmVhayAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGJyLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWJyLmVsZW1lbnQ7Ww0KLQ0KLTwhRU5USVRZICUgYnIuY29udGVudCAgIkVNUFRZIiA+DQotPCFFTlRJVFkgJSBici5xbmFtZSAgImJyIiA+DQotPCFFTEVNRU5UICVici5xbmFtZTsgICVici5jb250ZW50OyA+DQotDQotPCEtLSBlbmQgb2YgYnIuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGJyLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWJyLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlYnIucW5hbWU7DQotICAgICAgJUNvcmUuYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBici5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gc3BhbjogZ2VuZXJpYyBpbmxpbmUgY29udGFpbmVyIC4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgc3Bhbi5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVzcGFuLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgc3Bhbi5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIHNwYW4ucW5hbWUgICJzcGFuIiA+DQotPCFFTEVNRU5UICVzcGFuLnFuYW1lOyAgJXNwYW4uY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHNwYW4uZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHNwYW4uYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslc3Bhbi5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXNwYW4ucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHNwYW4uYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1pbmxzdHJ1Y3QtMS5tb2QgLS0+DQotXV0+DQotDQotPCFFTlRJVFkgJSB4aHRtbC1pbmxwaHJhcy5tb2R1bGUgIklOQ0xVREUiID4NCi08IVsleGh0bWwtaW5scGhyYXMubW9kdWxlO1sNCi08IUVOVElUWSAlIHhodG1sLWlubHBocmFzLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIElubGluZSBQaHJhc2FsIDEuMC8vRU4iDQotICAgICAgICAgICAgInhodG1sLWlubHBocmFzLTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgSW5saW5lIFBocmFzYWwgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWlubHBocmFzLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbmxpbmUgUGhyYXNhbCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1pbmxwaHJhcy0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBJbmxpbmUgUGhyYXNhbA0KLQ0KLSAgICAgICAgYWJiciwgYWNyb255bSwgY2l0ZSwgY29kZSwgZGZuLCBlbSwga2JkLCBxLCBzYW1wLCBzdHJvbmcsIHZhcg0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGVsZW1lbnRzIGFuZCB0aGVpciBhdHRyaWJ1dGVzIHVzZWQgdG8NCi0gICAgIHN1cHBvcnQgaW5saW5lLWxldmVsIHBocmFzYWwgbWFya3VwLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgYWJici5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVhYmJyLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgYWJici5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGFiYnIucW5hbWUgICJhYmJyIiA+DQotPCFFTEVNRU5UICVhYmJyLnFuYW1lOyAgJWFiYnIuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGFiYnIuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGFiYnIuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslYWJici5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWFiYnIucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGFiYnIuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGFjcm9ueW0uZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYWNyb255bS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGFjcm9ueW0uY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBhY3JvbnltLnFuYW1lICAiYWNyb255bSIgPg0KLTwhRUxFTUVOVCAlYWNyb255bS5xbmFtZTsgICVhY3JvbnltLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBhY3JvbnltLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBhY3JvbnltLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWFjcm9ueW0uYXR0bGlzdDtbDQotPCFBVFRMSVNUICVhY3JvbnltLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBhY3JvbnltLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBjaXRlLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWNpdGUuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBjaXRlLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgY2l0ZS5xbmFtZSAgImNpdGUiID4NCi08IUVMRU1FTlQgJWNpdGUucW5hbWU7ICAlY2l0ZS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgY2l0ZS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgY2l0ZS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVjaXRlLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlY2l0ZS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgY2l0ZS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgY29kZS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVjb2RlLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgY29kZS5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGNvZGUucW5hbWUgICJjb2RlIiA+DQotPCFFTEVNRU5UICVjb2RlLnFuYW1lOyAgJWNvZGUuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGNvZGUuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGNvZGUuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslY29kZS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWNvZGUucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGNvZGUuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGRmbi5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVkZm4uZWxlbWVudDtbDQotPCFFTlRJVFkgJSBkZm4uY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBkZm4ucW5hbWUgICJkZm4iID4NCi08IUVMRU1FTlQgJWRmbi5xbmFtZTsgICVkZm4uY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGRmbi5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgZGZuLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWRmbi5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWRmbi5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgZGZuLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBlbS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVlbS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGVtLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgZW0ucW5hbWUgICJlbSIgPg0KLTwhRUxFTUVOVCAlZW0ucW5hbWU7ICAlZW0uY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGVtLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBlbS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVlbS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWVtLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBlbS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUga2JkLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWtiZC5lbGVtZW50O1sNCi08IUVOVElUWSAlIGtiZC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGtiZC5xbmFtZSAgImtiZCIgPg0KLTwhRUxFTUVOVCAla2JkLnFuYW1lOyAgJWtiZC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Yga2JkLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBrYmQuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVsla2JkLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAla2JkLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBrYmQuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHEuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslcS5lbGVtZW50O1sNCi08IUVOVElUWSAlIHEuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBxLnFuYW1lICAicSIgPg0KLTwhRUxFTUVOVCAlcS5xbmFtZTsgICVxLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBxLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBxLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXEuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVxLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIGNpdGUgICAgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgcS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc2FtcC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVzYW1wLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgc2FtcC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIHNhbXAucW5hbWUgICJzYW1wIiA+DQotPCFFTEVNRU5UICVzYW1wLnFuYW1lOyAgJXNhbXAuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHNhbXAuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHNhbXAuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslc2FtcC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXNhbXAucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHNhbXAuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHN0cm9uZy5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVzdHJvbmcuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBzdHJvbmcuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBzdHJvbmcucW5hbWUgICJzdHJvbmciID4NCi08IUVMRU1FTlQgJXN0cm9uZy5xbmFtZTsgICVzdHJvbmcuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHN0cm9uZy5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc3Ryb25nLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXN0cm9uZy5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXN0cm9uZy5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2Ygc3Ryb25nLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB2YXIuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVsldmFyLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgdmFyLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgdmFyLnFuYW1lICAidmFyIiA+DQotPCFFTEVNRU5UICV2YXIucW5hbWU7ICAldmFyLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiB2YXIuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHZhci5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyV2YXIuYXR0bGlzdDtbDQotPCFBVFRMSVNUICV2YXIucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHZhci5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWlubHBocmFzLTEubW9kIC0tPg0KLV1dPg0KLQ0KLTwhRU5USVRZICUgeGh0bWwtYmxrc3RydWN0Lm1vZHVsZSAiSU5DTFVERSIgPg0KLTwhWyV4aHRtbC1ibGtzdHJ1Y3QubW9kdWxlO1sNCi08IUVOVElUWSAlIHhodG1sLWJsa3N0cnVjdC5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCbG9jayBTdHJ1Y3R1cmFsIDEuMC8vRU4iDQotICAgICAgICAgICAgInhodG1sLWJsa3N0cnVjdC0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIEJsb2NrIFN0cnVjdHVyYWwgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1ibGtzdHJ1Y3QtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJsb2NrIFN0cnVjdHVyYWwgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmxrc3RydWN0LTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIEJsb2NrIFN0cnVjdHVyYWwNCi0NCi0gICAgICAgIGRpdiwgcA0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGVsZW1lbnRzIGFuZCB0aGVpciBhdHRyaWJ1dGVzIHVzZWQgdG8NCi0gICAgIHN1cHBvcnQgYmxvY2stbGV2ZWwgc3RydWN0dXJhbCBtYXJrdXAuDQotLS0+DQotDQotPCFFTlRJVFkgJSBkaXYuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslZGl2LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgZGl2LmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlRmxvdy5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGRpdi5xbmFtZSAgImRpdiIgPg0KLTwhRUxFTUVOVCAlZGl2LnFuYW1lOyAgJWRpdi5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgZGl2LmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBkaXYuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslZGl2LmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlZGl2LnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBkaXYuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHAuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslcC5lbGVtZW50O1sNCi08IUVOVElUWSAlIHAuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiIgPg0KLTwhRU5USVRZICUgcC5xbmFtZSAgInAiID4NCi08IUVMRU1FTlQgJXAucW5hbWU7ICAlcC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgcC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgcC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVwLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlcC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgcC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWJsa3N0cnVjdC0xLm1vZCAtLT4NCi1dXT4NCi0NCi08IUVOVElUWSAlIHhodG1sLWJsa3BocmFzLm1vZHVsZSAiSU5DTFVERSIgPg0KLTwhWyV4aHRtbC1ibGtwaHJhcy5tb2R1bGU7Ww0KLTwhRU5USVRZICUgeGh0bWwtYmxrcGhyYXMubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmxvY2sgUGhyYXNhbCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJ4aHRtbC1ibGtwaHJhcy0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIEJsb2NrIFBocmFzYWwgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1ibGtwaHJhcy0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmxvY2sgUGhyYXNhbCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1ibGtwaHJhcy0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBCbG9jayBQaHJhc2FsDQotDQotICAgICAgICBhZGRyZXNzLCBibG9ja3F1b3RlLCBwcmUsIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBlbGVtZW50cyBhbmQgdGhlaXIgYXR0cmlidXRlcyB1c2VkIHRvDQotICAgICBzdXBwb3J0IGJsb2NrLWxldmVsIHBocmFzYWwgbWFya3VwLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgYWRkcmVzcy5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVhZGRyZXNzLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgYWRkcmVzcy5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIiA+DQotPCFFTlRJVFkgJSBhZGRyZXNzLnFuYW1lICAiYWRkcmVzcyIgPg0KLTwhRUxFTUVOVCAlYWRkcmVzcy5xbmFtZTsgICVhZGRyZXNzLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBhZGRyZXNzLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBhZGRyZXNzLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWFkZHJlc3MuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVhZGRyZXNzLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBhZGRyZXNzLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBibG9ja3F1b3RlLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWJsb2NrcXVvdGUuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBibG9ja3F1b3RlLmNvbnRlbnQNCi0gICAgICIoICVCbG9jay5taXg7ICkrIg0KLT4NCi08IUVOVElUWSAlIGJsb2NrcXVvdGUucW5hbWUgICJibG9ja3F1b3RlIiA+DQotPCFFTEVNRU5UICVibG9ja3F1b3RlLnFuYW1lOyAgJWJsb2NrcXVvdGUuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGJsb2NrcXVvdGUuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGJsb2NrcXVvdGUuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslYmxvY2txdW90ZS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWJsb2NrcXVvdGUucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgY2l0ZSAgICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBibG9ja3F1b3RlLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBwcmUuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslcHJlLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgcHJlLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEENCi0gICAgICB8ICVJbmxTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUlubFBocmFzLmNsYXNzOw0KLSAgICAgIHwgJXR0LnFuYW1lOyB8ICVpLnFuYW1lOyB8ICViLnFuYW1lOw0KLSAgICAgICVJMThuLmNsYXNzOw0KLSAgICAgICVBbmNob3IuY2xhc3M7DQotICAgICAgfCAlc2NyaXB0LnFuYW1lOyB8ICVtYXAucW5hbWU7DQotICAgICAgJUlubGluZS5leHRyYTsgKSoiDQotPg0KLTwhRU5USVRZICUgcHJlLnFuYW1lICAicHJlIiA+DQotPCFFTEVNRU5UICVwcmUucW5hbWU7ICAlcHJlLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBwcmUuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHByZS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVwcmUuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVwcmUucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgeG1sOnNwYWNlICAgICggcHJlc2VydmUgKSAgICAgICAgICAgICAjRklYRUQgJ3ByZXNlcnZlJw0KLT4NCi08IS0tIGVuZCBvZiBwcmUuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4gIEhlYWRpbmcgRWxlbWVudHMgIC4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBIZWFkaW5nLmNvbnRlbnQgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiID4NCi0NCi08IUVOVElUWSAlIGgxLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWgxLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaDEucW5hbWUgICJoMSIgPg0KLTwhRUxFTUVOVCAlaDEucW5hbWU7ICAlSGVhZGluZy5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaDEuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGgxLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWgxLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlaDEucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGgxLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoMi5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVoMi5lbGVtZW50O1sNCi08IUVOVElUWSAlIGgyLnFuYW1lICAiaDIiID4NCi08IUVMRU1FTlQgJWgyLnFuYW1lOyAgJUhlYWRpbmcuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGgyLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoMi5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVoMi5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWgyLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBoMi5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDMuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaDMuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBoMy5xbmFtZSAgImgzIiA+DQotPCFFTEVNRU5UICVoMy5xbmFtZTsgICVIZWFkaW5nLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBoMy5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDMuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaDMuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVoMy5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgaDMuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGg0LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWg0LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaDQucW5hbWUgICJoNCIgPg0KLTwhRUxFTUVOVCAlaDQucW5hbWU7ICAlSGVhZGluZy5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaDQuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGg0LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWg0LmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlaDQucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGg0LmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoNS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVoNS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGg1LnFuYW1lICAiaDUiID4NCi08IUVMRU1FTlQgJWg1LnFuYW1lOyAgJUhlYWRpbmcuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGg1LmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoNS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVoNS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWg1LnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBoNS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDYuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaDYuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBoNi5xbmFtZSAgImg2IiA+DQotPCFFTEVNRU5UICVoNi5xbmFtZTsgICVIZWFkaW5nLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBoNi5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDYuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaDYuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVoNi5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgaDYuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1ibGtwaHJhcy0xLm1vZCAtLT4NCi1dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC10ZXh0LTEubW9kIC0tPg0KLQ0KLTwhRU5USVRZICUgeGh0bWwtaHlwZXJ0ZXh0Lm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSHlwZXJ0ZXh0IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1oeXBlcnRleHQtMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIEh5cGVydGV4dCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1oeXBlcnRleHQtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEh5cGVydGV4dCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1oeXBlcnRleHQtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gSHlwZXJ0ZXh0DQotDQotICAgICAgICBhDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgYW5jaG9yICgnYScpIGVsZW1lbnQgdHlwZSwgd2hpY2gNCi0gICAgIGRlZmluZXMgdGhlIHNvdXJjZSBvZiBhIGh5cGVydGV4dCBsaW5rLiBUaGUgZGVzdGluYXRpb24NCi0gICAgIChvciBsaW5rICd0YXJnZXQnKSBpcyBpZGVudGlmaWVkIHZpYSBpdHMgJ2lkJyBhdHRyaWJ1dGUNCi0gICAgIHJhdGhlciB0aGFuIHRoZSAnbmFtZScgYXR0cmlidXRlIGFzIHdhcyB1c2VkIGluIEhUTUwuDQotLS0+DQotDQotPCEtLSAuLi4uLi4uLi4uLi4gIEFuY2hvciBFbGVtZW50ICAuLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBhLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWEuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBhLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5sTm9BbmNob3IubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBhLnFuYW1lICAiYSIgPg0KLTwhRUxFTUVOVCAlYS5xbmFtZTsgICVhLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBhLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBhLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWEuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVhLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIGhyZWYgICAgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBjaGFyc2V0ICAgICAgJUNoYXJzZXQuZGF0YXR5cGU7ICAgICAgICNJTVBMSUVEDQotICAgICAgdHlwZSAgICAgICAgICVDb250ZW50VHlwZS5kYXRhdHlwZTsgICAjSU1QTElFRA0KLSAgICAgIGhyZWZsYW5nICAgICAlTGFuZ3VhZ2VDb2RlLmRhdGF0eXBlOyAgI0lNUExJRUQNCi0gICAgICByZWwgICAgICAgICAgJUxpbmtUeXBlcy5kYXRhdHlwZTsgICAgICNJTVBMSUVEDQotICAgICAgcmV2ICAgICAgICAgICVMaW5rVHlwZXMuZGF0YXR5cGU7ICAgICAjSU1QTElFRA0KLSAgICAgIGFjY2Vzc2tleSAgICAlQ2hhcmFjdGVyLmRhdGF0eXBlOyAgICAgI0lNUExJRUQNCi0gICAgICB0YWJpbmRleCAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIGEuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1oeXBlcnRleHQtMS5tb2QgLS0+DQotDQotPCEtLSBMaXN0IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1saXN0Lm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgTGlzdHMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWxpc3QtMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIExpc3RzIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1saXN0LTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBMaXN0cyAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1saXN0LTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIExpc3RzDQotDQotICAgICAgICBkbCwgZHQsIGRkLCBvbCwgdWwsIGxpDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgbGlzdC1vcmllbnRlZCBlbGVtZW50IHR5cGVzDQotICAgICBhbmQgdGhlaXIgYXR0cmlidXRlcy4NCi0tLT4NCi0NCi08IUVOVElUWSAlIGRsLnFuYW1lICAiZGwiID4NCi08IUVOVElUWSAlIGR0LnFuYW1lICAiZHQiID4NCi08IUVOVElUWSAlIGRkLnFuYW1lICAiZGQiID4NCi08IUVOVElUWSAlIG9sLnFuYW1lICAib2wiID4NCi08IUVOVElUWSAlIHVsLnFuYW1lICAidWwiID4NCi08IUVOVElUWSAlIGxpLnFuYW1lICAibGkiID4NCi0NCi08IS0tIGRsOiBEZWZpbml0aW9uIExpc3QgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGRsLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWRsLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgZGwuY29udGVudCAgIiggJWR0LnFuYW1lOyB8ICVkZC5xbmFtZTsgKSsiID4NCi08IUVMRU1FTlQgJWRsLnFuYW1lOyAgJWRsLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBkbC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgZGwuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslZGwuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVkbC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgZGwuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGR0OiBEZWZpbml0aW9uIFRlcm0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGR0LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWR0LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgZHQuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTEVNRU5UICVkdC5xbmFtZTsgICVkdC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgZHQuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGR0LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWR0LmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlZHQucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGR0LmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBkZDogRGVmaW5pdGlvbiBEZXNjcmlwdGlvbiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBkZC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVkZC5lbGVtZW50O1sNCi08IUVOVElUWSAlIGRkLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlRmxvdy5taXg7ICkqIg0KLT4NCi08IUVMRU1FTlQgJWRkLnFuYW1lOyAgJWRkLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBkZC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgZGQuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslZGQuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVkZC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgZGQuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIG9sOiBPcmRlcmVkIExpc3QgKG51bWJlcmVkIHN0eWxlcykgLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIG9sLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJW9sLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgb2wuY29udGVudCAgIiggJWxpLnFuYW1lOyApKyIgPg0KLTwhRUxFTUVOVCAlb2wucW5hbWU7ICAlb2wuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIG9sLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBvbC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVvbC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJW9sLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBvbC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gdWw6IFVub3JkZXJlZCBMaXN0IChidWxsZXQgc3R5bGVzKSAuLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgdWwuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVsldWwuZWxlbWVudDtbDQotPCFFTlRJVFkgJSB1bC5jb250ZW50ICAiKCAlbGkucW5hbWU7ICkrIiA+DQotPCFFTEVNRU5UICV1bC5xbmFtZTsgICV1bC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgdWwuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHVsLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXVsLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAldWwucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHVsLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBsaTogTGlzdCBJdGVtIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBsaS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVsaS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGxpLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlRmxvdy5taXg7ICkqIg0KLT4NCi08IUVMRU1FTlQgJWxpLnFuYW1lOyAgJWxpLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBsaS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgbGkuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslbGkuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVsaS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgbGkuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1saXN0LTEubW9kIC0tPg0KLQ0KLTwhLS0gRXh0ZW5kIGxpc3RzIHdpdGggdmFsdWUgYW5kIHN0YXJ0IGF0dHJpYnV0ZXMgLS0+IA0KLTwhQVRUTElTVCAlbGkucW5hbWU7DQotICAgICAgdmFsdWUgICAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAgI0lNUExJRUQNCi0+DQotPCFBVFRMSVNUICVvbC5xbmFtZTsNCi0gICAgICBzdGFydCAgICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gSW1hZ2UgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWltYWdlLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW1hZ2VzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1pbWFnZS0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgSW1hZ2VzIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWltYWdlLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUm92aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbWFnZXMgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW1hZ2UtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gSW1hZ2VzDQotDQotICAgICAgICBpbWcNCi0NCi0gICAgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIG1hcmt1cCB0byBzdXBwb3J0IGJhc2ljIGltYWdlIGVtYmVkZGluZy4NCi0tLT4NCi0NCi08IS0tIFRvIGF2b2lkIHByb2JsZW1zIHdpdGggdGV4dC1vbmx5IFVBcyBhcyB3ZWxsIGFzIHRvIG1ha2UNCi0gICAgIGltYWdlIGNvbnRlbnQgdW5kZXJzdGFuZGFibGUgYW5kIG5hdmlnYWJsZSB0byB1c2VycyBvZg0KLSAgICAgbm9uLXZpc3VhbCBVQXMsIHlvdSBuZWVkIHRvIHByb3ZpZGUgYSBkZXNjcmlwdGlvbiB3aXRoDQotICAgICB0aGUgJ2FsdCcgYXR0cmlidXRlLCBhbmQgYXZvaWQgc2VydmVyLXNpZGUgaW1hZ2UgbWFwcy4NCi0tLT4NCi0NCi08IUVOVElUWSAlIGltZy5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVpbWcuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBpbWcuY29udGVudCAgIkVNUFRZIiA+DQotPCFFTlRJVFkgJSBpbWcucW5hbWUgICJpbWciID4NCi08IUVMRU1FTlQgJWltZy5xbmFtZTsgICVpbWcuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGltZy5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaW1nLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWltZy5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWltZy5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBzcmMgICAgICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgIGFsdCAgICAgICAgICAlVGV4dC5kYXRhdHlwZTsgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgbG9uZ2Rlc2MgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGhlaWdodCAgICAgICAlTGVuZ3RoLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0gICAgICB3aWR0aCAgICAgICAgJUxlbmd0aC5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIGltZy5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWltYWdlLTEubW9kIC0tPg0KLQ0KLTwhLS0gUGFyYW0gRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXBhcmFtLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgUGFyYW0gRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtcGFyYW0tMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIFBhcmFtIEVsZW1lbnQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtcGFyYW0tMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIFBhcmFtIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtcGFyYW0tMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gUGFyYW1ldGVycyBmb3IgSmF2YSBBcHBsZXRzIGFuZCBFbWJlZGRlZCBPYmplY3RzDQotDQotICAgICAgICBwYXJhbQ0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgZGVjbGFyYXRpb25zIGZvciB0aGUgcGFyYW0gZWxlbWVudCwNCi0gICAgIHVzZWQgdG8gcHJvdmlkZSBuYW1lZCBwcm9wZXJ0eSB2YWx1ZXMgZm9yIHRoZSBhcHBsZXQNCi0gICAgIGFuZCBvYmplY3QgZWxlbWVudHMuDQotLS0+DQotDQotPCEtLSBwYXJhbTogTmFtZWQgUHJvcGVydHkgVmFsdWUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBwYXJhbS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVwYXJhbS5lbGVtZW50O1sNCi08IUVOVElUWSAlIHBhcmFtLmNvbnRlbnQgICJFTVBUWSIgPg0KLTwhRU5USVRZICUgcGFyYW0ucW5hbWUgICJwYXJhbSIgPg0KLTwhRUxFTUVOVCAlcGFyYW0ucW5hbWU7ICAlcGFyYW0uY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHBhcmFtLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBwYXJhbS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVwYXJhbS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXBhcmFtLnFuYW1lOw0KLSAgICAgICVYSFRNTC54bWxucy5hdHRyaWI7DQotICAgICAgJWlkLmF0dHJpYjsNCi0gICAgICBuYW1lICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgIHZhbHVlICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICB2YWx1ZXR5cGUgICAgKCBkYXRhIHwgcmVmIHwgb2JqZWN0ICkgICdkYXRhJw0KLSAgICAgIHR5cGUgICAgICAgICAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgcGFyYW0uYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1wYXJhbS0xLm1vZCAtLT4NCi0NCi08IS0tIEVtYmVkZGVkIE9iamVjdCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1vYmplY3QubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBFbWJlZGRlZCBPYmplY3QgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLW9iamVjdC0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgRW1iZWRkZWQgT2JqZWN0IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLW9iamVjdC0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgRW1iZWRkZWQgT2JqZWN0IDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLW9iamVjdC0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBFbWJlZGRlZCBPYmplY3RzDQotDQotICAgICAgICBvYmplY3QNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBvYmplY3QgZWxlbWVudCB0eXBlIGFuZCBpdHMgYXR0cmlidXRlcywgdXNlZA0KLSAgICAgdG8gZW1iZWQgZXh0ZXJuYWwgb2JqZWN0cyBhcyBwYXJ0IG9mIFhIVE1MIHBhZ2VzLiBJbiB0aGUgZG9jdW1lbnQsDQotICAgICBwbGFjZSBwYXJhbSBlbGVtZW50cyBwcmlvciB0byBvdGhlciBjb250ZW50IHdpdGhpbiB0aGUgb2JqZWN0IGVsZW1lbnQuDQotDQotICAgICBOb3RlIHRoYXQgdXNlIG9mIHRoaXMgbW9kdWxlIHJlcXVpcmVzIGluc3RhbnRpYXRpb24gb2YgdGhlIFBhcmFtDQotICAgICBFbGVtZW50IE1vZHVsZS4NCi0tLT4NCi0NCi08IS0tIG9iamVjdDogR2VuZXJpYyBFbWJlZGRlZCBPYmplY3QgLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIG9iamVjdC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVvYmplY3QuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBvYmplY3QuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVGbG93Lm1peDsgfCAlcGFyYW0ucW5hbWU7ICkqIg0KLT4NCi08IUVOVElUWSAlIG9iamVjdC5xbmFtZSAgIm9iamVjdCIgPg0KLTwhRUxFTUVOVCAlb2JqZWN0LnFuYW1lOyAgJW9iamVjdC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygb2JqZWN0LmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBvYmplY3QuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslb2JqZWN0LmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlb2JqZWN0LnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIGRlY2xhcmUgICAgICAoIGRlY2xhcmUgKSAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBjbGFzc2lkICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgY29kZWJhc2UgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGRhdGEgICAgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICB0eXBlICAgICAgICAgJUNvbnRlbnRUeXBlLmRhdGF0eXBlOyAgICNJTVBMSUVEDQotICAgICAgY29kZXR5cGUgICAgICVDb250ZW50VHlwZS5kYXRhdHlwZTsgICAjSU1QTElFRA0KLSAgICAgIGFyY2hpdmUgICAgICAlVVJJcy5kYXRhdHlwZTsgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBzdGFuZGJ5ICAgICAgJVRleHQuZGF0YXR5cGU7ICAgICAgICAgICNJTVBMSUVEDQotICAgICAgaGVpZ2h0ICAgICAgICVMZW5ndGguZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgIHdpZHRoICAgICAgICAlTGVuZ3RoLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0gICAgICBuYW1lICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgdGFiaW5kZXggICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBvYmplY3QuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1vYmplY3QtMS5tb2QgLS0+DQotDQotPCEtLSBUYWJsZXMgTW9kdWxlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtdGFibGUubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNpYyBUYWJsZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2ljLXRhYmxlLTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgQmFzaWMgVGFibGUgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1iYXNpYy10YWJsZS0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCBCYXNpYywgYSBwcm9wZXIgc3Vic2V0IG9mIFhIVE1MLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNpYyBUYWJsZXMgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmFzaWMtdGFibGUtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gQmFzaWMgVGFibGVzDQotDQotICAgICAgICB0YWJsZSwgY2FwdGlvbiwgdHIsIHRoLCB0ZA0KLQ0KLSAgICAgVGhpcyB0YWJsZSBtb2R1bGUgZGVjbGFyZXMgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMgZGVmaW5pbmcNCi0gICAgIGEgdGFibGUgbW9kZWwgYmFzZWQgZnVuZGFtZW50YWxseSBvbiBmZWF0dXJlcyBmb3VuZCBpbiB0aGUNCi0gICAgIHdpZGVseS1kZXBsb3llZCBIVE1MIDMuMiB0YWJsZSBtb2RlbC4gIFdoaWxlIHRoaXMgbW9kdWxlDQotICAgICBtaW1pY3MgdGhlIGNvbnRlbnQgbW9kZWwgYW5kIHRhYmxlIGF0dHJpYnV0ZXMgb2YgSFRNTCAzLjINCi0gICAgIHRhYmxlcywgdGhlIGVsZW1lbnQgdHlwZXMgZGVjbGFyZWQgaGVyZWluIGFsc28gaW5jbHVkZXMgYWxsDQotICAgICBIVE1MIDQgY29tbW9uIGFuZCBtb3N0IG9mIHRoZSBIVE1MIDQgdGFibGUgYXR0cmlidXRlcy4NCi0tLT4NCi0NCi08IS0tIGRlY2xhcmUgcXVhbGlmaWVkIGVsZW1lbnQgdHlwZSBuYW1lczoNCi0tLT4NCi08IUVOVElUWSAlIHRhYmxlLnFuYW1lICAidGFibGUiID4NCi08IUVOVElUWSAlIGNhcHRpb24ucW5hbWUgICJjYXB0aW9uIiA+DQotPCFFTlRJVFkgJSB0ci5xbmFtZSAgInRyIiA+DQotPCFFTlRJVFkgJSB0aC5xbmFtZSAgInRoIiA+DQotPCFFTlRJVFkgJSB0ZC5xbmFtZSAgInRkIiA+DQotDQotPCEtLSBob3Jpem9udGFsIGFsaWdubWVudCBhdHRyaWJ1dGVzIGZvciBjZWxsIGNvbnRlbnRzDQotLS0+DQotPCFFTlRJVFkgJSBDZWxsSEFsaWduLmF0dHJpYg0KLSAgICAgImFsaWduICAgICAgICAoIGxlZnQNCi0gICAgICAgICAgICAgICAgICAgfCBjZW50ZXINCi0gICAgICAgICAgICAgICAgICAgfCByaWdodCApICAgICAgICAgICAgICAgICNJTVBMSUVEIg0KLT4NCi0NCi08IS0tIHZlcnRpY2FsIGFsaWdubWVudCBhdHRyaWJ1dGVzIGZvciBjZWxsIGNvbnRlbnRzDQotLS0+DQotPCFFTlRJVFkgJSBDZWxsVkFsaWduLmF0dHJpYg0KLSAgICAgInZhbGlnbiAgICAgICAoIHRvcA0KLSAgICAgICAgICAgICAgICAgICB8IG1pZGRsZQ0KLSAgICAgICAgICAgICAgICAgICB8IGJvdHRvbSApICAgICAgICAgICAgICAgI0lNUExJRUQiDQotPg0KLQ0KLTwhLS0gc2NvcGUgaXMgc2ltcGxlciB0aGFuIGF4ZXMgYXR0cmlidXRlIGZvciBjb21tb24gdGFibGVzDQotLS0+DQotPCFFTlRJVFkgJSBzY29wZS5hdHRyaWINCi0gICAgICJzY29wZSAgICAgICAgKCByb3cgfCBjb2wgICkgICAgICAgICAgICNJTVBMSUVEIg0KLT4NCi0NCi08IS0tIHRhYmxlOiBUYWJsZSBFbGVtZW50IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIHRhYmxlLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXRhYmxlLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgdGFibGUuY29udGVudA0KLSAgICAgIiggJWNhcHRpb24ucW5hbWU7PywgJXRyLnFuYW1lOysgKSINCi0+DQotPCFFTEVNRU5UICV0YWJsZS5xbmFtZTsgICV0YWJsZS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgdGFibGUuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHRhYmxlLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXRhYmxlLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAldGFibGUucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgc3VtbWFyeSAgICAgICVUZXh0LmRhdGF0eXBlOyAgICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiB0YWJsZS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gY2FwdGlvbjogVGFibGUgQ2FwdGlvbiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgY2FwdGlvbi5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVjYXB0aW9uLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgY2FwdGlvbi5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVMRU1FTlQgJWNhcHRpb24ucW5hbWU7ICAlY2FwdGlvbi5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgY2FwdGlvbi5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgY2FwdGlvbi5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVjYXB0aW9uLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlY2FwdGlvbi5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgY2FwdGlvbi5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gdHI6IFRhYmxlIFJvdyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgdHIuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVsldHIuZWxlbWVudDtbDQotPCFFTlRJVFkgJSB0ci5jb250ZW50ICAiKCAldGgucW5hbWU7IHwgJXRkLnFuYW1lOyApKyIgPg0KLTwhRUxFTUVOVCAldHIucW5hbWU7ICAldHIuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHRyLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB0ci5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyV0ci5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXRyLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgICVDZWxsSEFsaWduLmF0dHJpYjsNCi0gICAgICAlQ2VsbFZBbGlnbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHRyLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSB0aDogVGFibGUgSGVhZGVyIENlbGwgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSB0aCBpcyBmb3IgaGVhZGVyIGNlbGxzLCB0ZCBmb3IgZGF0YSwNCi0gICAgIGJ1dCBmb3IgY2VsbHMgYWN0aW5nIGFzIGJvdGggdXNlIHRkDQotLS0+DQotDQotPCFFTlRJVFkgJSB0aC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyV0aC5lbGVtZW50O1sNCi08IUVOVElUWSAlIHRoLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlRmxvd05vVGFibGUubWl4OyApKiINCi0+DQotPCFFTEVNRU5UICV0aC5xbmFtZTsgICV0aC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgdGguZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHRoLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXRoLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAldGgucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgYWJiciAgICAgICAgICVUZXh0LmRhdGF0eXBlOyAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGF4aXMgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBoZWFkZXJzICAgICAgSURSRUZTICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgJXNjb3BlLmF0dHJpYjsNCi0gICAgICByb3dzcGFuICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICcxJw0KLSAgICAgIGNvbHNwYW4gICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgJzEnDQotICAgICAgJUNlbGxIQWxpZ24uYXR0cmliOw0KLSAgICAgICVDZWxsVkFsaWduLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgdGguYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIHRkOiBUYWJsZSBEYXRhIENlbGwgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIHRkLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXRkLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgdGQuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVGbG93Tm9UYWJsZS5taXg7ICkqIg0KLT4NCi08IUVMRU1FTlQgJXRkLnFuYW1lOyAgJXRkLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiB0ZC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgdGQuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVsldGQuYXR0bGlzdDtbDQotPCFBVFRMSVNUICV0ZC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBhYmJyICAgICAgICAgJVRleHQuZGF0YXR5cGU7ICAgICAgICAgICNJTVBMSUVEDQotICAgICAgYXhpcyAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGhlYWRlcnMgICAgICBJRFJFRlMgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAlc2NvcGUuYXR0cmliOw0KLSAgICAgIHJvd3NwYW4gICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgJzEnDQotICAgICAgY29sc3BhbiAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAnMScNCi0gICAgICAlQ2VsbEhBbGlnbi5hdHRyaWI7DQotICAgICAgJUNlbGxWQWxpZ24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiB0ZC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWJhc2ljLXRhYmxlLTEubW9kIC0tPg0KLQ0KLTwhLS0gRm9ybXMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVMRU1FTlQgJW9wdGdyb3VwLnFuYW1lOyAoJW9wdGlvbi5xbmFtZTspKz4NCi08IUFUVExJU1QgJW9wdGdyb3VwLnFuYW1lOw0KLQklQ29tbW9uLmF0dHJpYjsgCQ0KLQlsYWJlbCAlVGV4dC5kYXRhdHlwZTsgI1JFUVVJUkVEDQotPg0KLTwhRU5USVRZICUgb3B0aW9uLmNvbnRlbnQgIiggI1BDREFUQSB8ICVvbmV2ZW50LnFuYW1lO3wgJWdldHZhci5xbmFtZTspKiI+DQotPCFFTlRJVFkgJSBzZWxlY3QuY29udGVudCAiKCAlb3B0Z3JvdXAucW5hbWU7IHwgJW9wdGlvbi5xbmFtZTsgKSsiPg0KLTwhRUxFTUVOVCAlZmllbGRzZXQucW5hbWU7ICgjUENEQVRBIHwgJUZsb3cubWl4OykqPg0KLTwhQVRUTElTVCAlZmllbGRzZXQucW5hbWU7DQotCSVDb21tb24uYXR0cmliOyANCi0+DQotPCFFTlRJVFkgJSB0ZXh0YXJlYS5jb250ZW50ICIoICNQQ0RBVEEgfCAlZ2V0dmFyLnFuYW1lOyApKiI+DQotPCFFTlRJVFkgJSBmb3JtLmNvbnRlbnQgIiggJUJsa05vRm9ybS5taXg7DQotICAgICAgfCAlZmllbGRzZXQucW5hbWU7ICkrIj4NCi08IUVOVElUWSAlIHhodG1sLWJhc2ljLWZvcm0ubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNpYyBGb3JtcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmFzaWMtZm9ybS0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgU2ltcGxpZmllZCBGb3JtcyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWJhc2ljLWZvcm0tMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwgQmFzaWMsIGEgcHJvcGVyIHN1YnNldCBvZiBYSFRNTC4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzaWMgRm9ybXMgMS4wLy9FTiIgIA0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1iYXNpYy1mb3JtLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIEJhc2ljIEZvcm1zDQotDQotICAgICBUaGlzIGZvcm1zIG1vZHVsZSBpcyBiYXNlZCBvbiB0aGUgSFRNTCAzLjIgZm9ybXMgbW9kZWwsIHdpdGgNCi0gICAgIHRoZSBXQUktcmVxdWVzdGVkIGFkZGl0aW9uIG9mIHRoZSBsYWJlbCBlbGVtZW50LiBXaGlsZSB0aGlzIA0KLSAgICAgbW9kdWxlIGVzc2VudGlhbGx5IG1pbWljcyB0aGUgY29udGVudCBtb2RlbCBhbmQgYXR0cmlidXRlcyBvZiANCi0gICAgIEhUTUwgMy4yIGZvcm1zLCB0aGUgZWxlbWVudCB0eXBlcyBkZWNsYXJlZCBoZXJlaW4gYWxzbyBpbmNsdWRlDQotICAgICBhbGwgSFRNTCA0IGNvbW1vbiBhdHRyaWJ1dGVzLg0KLQ0KLSAgICAgICAgZm9ybSwgbGFiZWwsIGlucHV0LCBzZWxlY3QsIG9wdGlvbiwgdGV4dGFyZWENCi0tLT4NCi0NCi08IS0tIGRlY2xhcmUgcXVhbGlmaWVkIGVsZW1lbnQgdHlwZSBuYW1lczoNCi0tLT4NCi08IUVOVElUWSAlIGZvcm0ucW5hbWUgICJmb3JtIiA+DQotPCFFTlRJVFkgJSBsYWJlbC5xbmFtZSAgImxhYmVsIiA+DQotPCFFTlRJVFkgJSBpbnB1dC5xbmFtZSAgImlucHV0IiA+DQotPCFFTlRJVFkgJSBzZWxlY3QucW5hbWUgICJzZWxlY3QiID4NCi08IUVOVElUWSAlIG9wdGlvbi5xbmFtZSAgIm9wdGlvbiIgPg0KLTwhRU5USVRZICUgdGV4dGFyZWEucW5hbWUgICJ0ZXh0YXJlYSIgPg0KLQ0KLTwhLS0gJUJsa05vRm9ybS5taXg7IGluY2x1ZGVzIGFsbCBub24tZm9ybSBibG9jayBlbGVtZW50cywNCi0gICAgIHBsdXMgJU1pc2MuY2xhc3M7DQotLS0+DQotPCFFTlRJVFkgJSBCbGtOb0Zvcm0ubWl4DQotICAgICAiJUhlYWRpbmcuY2xhc3M7DQotICAgICAgfCAlTGlzdC5jbGFzczsNCi0gICAgICB8ICVCbGtTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUJsa1BocmFzLmNsYXNzOw0KLSAgICAgICVCbGtQcmVzLmNsYXNzOw0KLSAgICAgIHwgJXRhYmxlLnFuYW1lOyANCi0gICAgICAlQmxvY2suZXh0cmE7DQotICAgICAgJU1pc2MuY2xhc3M7Ig0KLT4NCi0NCi08IS0tIGZvcm06IEZvcm0gRWxlbWVudCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGZvcm0uZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslZm9ybS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGZvcm0uY29udGVudA0KLSAgICAgIiggJUJsa05vRm9ybS5taXg7ICkrIg0KLT4NCi08IUVMRU1FTlQgJWZvcm0ucW5hbWU7ICAlZm9ybS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgZm9ybS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgZm9ybS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVmb3JtLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlZm9ybS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBhY3Rpb24gICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgIG1ldGhvZCAgICAgICAoIGdldCB8IHBvc3QgKSAgICAgICAgICAgJ2dldCcNCi0gICAgICBlbmN0eXBlICAgICAgJUNvbnRlbnRUeXBlLmRhdGF0eXBlOyAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnDQotPg0KLTwhLS0gZW5kIG9mIGZvcm0uYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGxhYmVsOiBGb3JtIEZpZWxkIExhYmVsIFRleHQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGxhYmVsLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWxhYmVsLmVsZW1lbnQ7Ww0KLTwhLS0gRWFjaCBsYWJlbCBtdXN0IG5vdCBjb250YWluIG1vcmUgdGhhbiBPTkUgZmllbGQNCi0tLT4NCi08IUVOVElUWSAlIGxhYmVsLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgDQotICAgICAgfCAlaW5wdXQucW5hbWU7IHwgJXNlbGVjdC5xbmFtZTsgfCAldGV4dGFyZWEucW5hbWU7DQotICAgICAgfCAlSW5sU3RydWN0LmNsYXNzOw0KLSAgICAgICVJbmxQaHJhcy5jbGFzczsNCi0gICAgICAlSTE4bi5jbGFzczsNCi0gICAgICAlSW5sUHJlcy5jbGFzczsNCi0gICAgICAlSW5sU3BlY2lhbC5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsgKSoiDQotPg0KLTwhRUxFTUVOVCAlbGFiZWwucW5hbWU7ICAlbGFiZWwuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGxhYmVsLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBsYWJlbC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVsYWJlbC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWxhYmVsLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIGZvciAgICAgICAgICBJRFJFRiAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBhY2Nlc3NrZXkgICAgJUNoYXJhY3Rlci5kYXRhdHlwZTsgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIGxhYmVsLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBpbnB1dDogRm9ybSBDb250cm9sIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBpbnB1dC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVpbnB1dC5lbGVtZW50O1sNCi08IUVOVElUWSAlIGlucHV0LmNvbnRlbnQgICJFTVBUWSIgPg0KLTwhRUxFTUVOVCAlaW5wdXQucW5hbWU7ICAlaW5wdXQuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGlucHV0LmVsZW1lbnQgLS0+XV0+DQotDQotPCEtLSBCYXNpYyBGb3JtcyByZW1vdmVzICdpbWFnZScgYW5kICdmaWxlJyBpbnB1dCB0eXBlcy4NCi0tLT4NCi08IUVOVElUWSAlIGlucHV0LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWlucHV0LmF0dGxpc3Q7Ww0KLTwhRU5USVRZICUgSW5wdXRUeXBlLmNsYXNzDQotICAgICAiKCB0ZXh0IHwgcGFzc3dvcmQgfCBjaGVja2JveCB8IHJhZGlvIA0KLSAgICAgIHwgc3VibWl0IHwgcmVzZXQgfCBoaWRkZW4gKSINCi0+DQotPCEtLSBhdHRyaWJ1dGUgbmFtZSByZXF1aXJlZCBmb3IgYWxsIGJ1dCBzdWJtaXQgJiByZXNldA0KLS0tPg0KLTwhQVRUTElTVCAlaW5wdXQucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgdHlwZSAgICAgICAgICVJbnB1dFR5cGUuY2xhc3M7ICAgICAgICAndGV4dCcNCi0gICAgICBuYW1lICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgdmFsdWUgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGNoZWNrZWQgICAgICAoIGNoZWNrZWQgKSAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBzaXplICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgbWF4bGVuZ3RoICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgIHNyYyAgICAgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICB0YWJpbmRleCAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgYWNjZXNza2V5ICAgICVDaGFyYWN0ZXIuZGF0YXR5cGU7ICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBpbnB1dC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gc2VsZWN0OiBPcHRpb24gU2VsZWN0b3IgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgc2VsZWN0LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXNlbGVjdC5lbGVtZW50O1sNCi08IUVOVElUWSAlIHNlbGVjdC5jb250ZW50ICAiKCAlb3B0aW9uLnFuYW1lOyApKyIgPg0KLTwhRUxFTUVOVCAlc2VsZWN0LnFuYW1lOyAgJXNlbGVjdC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygc2VsZWN0LmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzZWxlY3QuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslc2VsZWN0LmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlc2VsZWN0LnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIG5hbWUgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBzaXplICAgICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgbXVsdGlwbGUgICAgICggbXVsdGlwbGUgKSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHRhYmluZGV4ICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2Ygc2VsZWN0LmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBvcHRpb246IFNlbGVjdGFibGUgQ2hvaWNlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBvcHRpb24uZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslb3B0aW9uLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgb3B0aW9uLmNvbnRlbnQgICIoICNQQ0RBVEEgKSIgPg0KLTwhRUxFTUVOVCAlb3B0aW9uLnFuYW1lOyAgJW9wdGlvbi5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygb3B0aW9uLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBvcHRpb24uYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslb3B0aW9uLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlb3B0aW9uLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIHNlbGVjdGVkICAgICAoIHNlbGVjdGVkICkgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICB2YWx1ZSAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIG9wdGlvbi5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gdGV4dGFyZWE6IE11bHRpLUxpbmUgVGV4dCBGaWVsZCAuLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgdGV4dGFyZWEuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVsldGV4dGFyZWEuZWxlbWVudDtbDQotPCFFTlRJVFkgJSB0ZXh0YXJlYS5jb250ZW50ICAiKCAjUENEQVRBICkiID4NCi08IUVMRU1FTlQgJXRleHRhcmVhLnFuYW1lOyAgJXRleHRhcmVhLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiB0ZXh0YXJlYS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgdGV4dGFyZWEuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVsldGV4dGFyZWEuYXR0bGlzdDtbDQotPCFBVFRMSVNUICV0ZXh0YXJlYS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBuYW1lICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgcm93cyAgICAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjUkVRVUlSRUQNCi0gICAgICBjb2xzICAgICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNSRVFVSVJFRA0KLSAgICAgIHRhYmluZGV4ICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0gICAgICBhY2Nlc3NrZXkgICAgJUNoYXJhY3Rlci5kYXRhdHlwZTsgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIHRleHRhcmVhLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtYmFzaWMtZm9ybS0xLm1vZCAtLT4NCi0NCi08IS0tIExpbmsgRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1saW5rLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgTGluayBFbGVtZW50IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1saW5rLTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBMaW5rIEVsZW1lbnQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtbGluay0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgTGluayBFbGVtZW50IDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWxpbmstMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gTGluayBlbGVtZW50DQotDQotICAgICAgICBsaW5rDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgbGluayBlbGVtZW50IHR5cGUgYW5kIGl0cyBhdHRyaWJ1dGVzLA0KLSAgICAgd2hpY2ggY291bGQgKGluIHByaW5jaXBsZSkgYmUgdXNlZCB0byBkZWZpbmUgZG9jdW1lbnQtbGV2ZWwgbGlua3MNCi0gICAgIHRvIGV4dGVybmFsIHJlc291cmNlcyBzdWNoIGFzOg0KLQ0KLSAgICAgYSkgZm9yIGRvY3VtZW50IHNwZWNpZmljIHRvb2xiYXJzL21lbnVzLCBlLmcuIHN0YXJ0LCBjb250ZW50cywNCi0gICAgICAgIHByZXZpb3VzLCBuZXh0LCBpbmRleCwgZW5kLCBoZWxwDQotICAgICBiKSB0byBsaW5rIHRvIGEgc2VwYXJhdGUgc3R5bGUgc2hlZXQgKHJlbD0ic3R5bGVzaGVldCIpDQotICAgICBjKSB0byBtYWtlIGEgbGluayB0byBhIHNjcmlwdCAocmVsPSJzY3JpcHQiKQ0KLSAgICAgZCkgYnkgc3R5bGUgc2hlZXRzIHRvIGNvbnRyb2wgaG93IGNvbGxlY3Rpb25zIG9mIGh0bWwgbm9kZXMgYXJlDQotICAgICAgICByZW5kZXJlZCBpbnRvIHByaW50ZWQgZG9jdW1lbnRzDQotICAgICBlKSB0byBtYWtlIGEgbGluayB0byBhIHByaW50YWJsZSB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQNCi0gICAgICAgIGUuZy4gYSBwb3N0c2NyaXB0IG9yIHBkZiB2ZXJzaW9uIChyZWw9ImFsdGVybmF0ZSIgbWVkaWE9InByaW50IikNCi0tLT4NCi0NCi08IS0tIGxpbms6IE1lZGlhLUluZGVwZW5kZW50IExpbmsgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGxpbmsuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslbGluay5lbGVtZW50O1sNCi08IUVOVElUWSAlIGxpbmsuY29udGVudCAgIkVNUFRZIiA+DQotPCFFTlRJVFkgJSBsaW5rLnFuYW1lICAibGluayIgPg0KLTwhRUxFTUVOVCAlbGluay5xbmFtZTsgICVsaW5rLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBsaW5rLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBsaW5rLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWxpbmsuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVsaW5rLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIGNoYXJzZXQgICAgICAlQ2hhcnNldC5kYXRhdHlwZTsgICAgICAgI0lNUExJRUQNCi0gICAgICBocmVmICAgICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgaHJlZmxhbmcgICAgICVMYW5ndWFnZUNvZGUuZGF0YXR5cGU7ICAjSU1QTElFRA0KLSAgICAgIHR5cGUgICAgICAgICAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICAgI0lNUExJRUQNCi0gICAgICByZWwgICAgICAgICAgJUxpbmtUeXBlcy5kYXRhdHlwZTsgICAgICNJTVBMSUVEDQotICAgICAgcmV2ICAgICAgICAgICVMaW5rVHlwZXMuZGF0YXR5cGU7ICAgICAjSU1QTElFRA0KLSAgICAgIG1lZGlhICAgICAgICAlTWVkaWFEZXNjLmRhdGF0eXBlOyAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgbGluay5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWxpbmstMS5tb2QgLS0+DQotDQotPCEtLSBEb2N1bWVudCBNZXRhaW5mb3JtYXRpb24gTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtbWV0YS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIE1ldGFpbmZvcm1hdGlvbiAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbWV0YS0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgRG9jdW1lbnQgTWV0YWluZm9ybWF0aW9uIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLW1ldGEtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIE1ldGFpbmZvcm1hdGlvbiAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1tZXRhLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIE1ldGEgSW5mb3JtYXRpb24NCi0NCi0gICAgICAgIG1ldGENCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBtZXRhIGVsZW1lbnQgdHlwZSBhbmQgaXRzIGF0dHJpYnV0ZXMsDQotICAgICB1c2VkIHRvIHByb3ZpZGUgZGVjbGFyYXRpdmUgZG9jdW1lbnQgbWV0YWluZm9ybWF0aW9uLg0KLS0tPg0KLQ0KLTwhLS0gbWV0YTogR2VuZXJpYyBNZXRhaW5mb3JtYXRpb24gLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgbWV0YS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVtZXRhLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgbWV0YS5jb250ZW50ICAiRU1QVFkiID4NCi08IUVOVElUWSAlIG1ldGEucW5hbWUgICJtZXRhIiA+DQotPCFFTEVNRU5UICVtZXRhLnFuYW1lOyAgJW1ldGEuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIG1ldGEuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIG1ldGEuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslbWV0YS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJW1ldGEucW5hbWU7DQotICAgICAgJVhIVE1MLnhtbG5zLmF0dHJpYjsNCi0gICAgICAlSTE4bi5hdHRyaWI7DQotICAgICAgaHR0cC1lcXVpdiAgIE5NVE9LRU4gICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIG5hbWUgICAgICAgICBOTVRPS0VOICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBjb250ZW50ICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgIHNjaGVtZSAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgbWV0YS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLW1ldGEtMS5tb2QgLS0+DQotDQotPCEtLSBCYXNlIEVsZW1lbnQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtYmFzZS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJhc2UgRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmFzZS0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgQmFzZSBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWJhc2UtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJhc2UgRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1iYXNlLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIEJhc2UgZWxlbWVudA0KLQ0KLSAgICAgICAgYmFzZQ0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGJhc2UgZWxlbWVudCB0eXBlIGFuZCBpdHMgYXR0cmlidXRlcywNCi0gICAgIHVzZWQgdG8gZGVmaW5lIGEgYmFzZSBVUkkgYWdhaW5zdCB3aGljaCByZWxhdGl2ZSBVUklzIGluIHRoZQ0KLSAgICAgZG9jdW1lbnQgd2lsbCBiZSByZXNvbHZlZC4NCi0NCi0gICAgIE5vdGUgdGhhdCB0aGlzIG1vZHVsZSBhbHNvIHJlZGVjbGFyZXMgdGhlIGNvbnRlbnQgbW9kZWwgZm9yDQotICAgICB0aGUgaGVhZCBlbGVtZW50IHRvIGluY2x1ZGUgdGhlIGJhc2UgZWxlbWVudC4NCi0tLT4NCi0NCi08IS0tIGJhc2U6IERvY3VtZW50IEJhc2UgVVJJIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGJhc2UuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYmFzZS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGJhc2UuY29udGVudCAgIkVNUFRZIiA+DQotPCFFTlRJVFkgJSBiYXNlLnFuYW1lICAiYmFzZSIgPg0KLTwhRUxFTUVOVCAlYmFzZS5xbmFtZTsgICViYXNlLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBiYXNlLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBiYXNlLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWJhc2UuYXR0bGlzdDtbDQotPCFBVFRMSVNUICViYXNlLnFuYW1lOw0KLSAgICAgICVYSFRNTC54bWxucy5hdHRyaWI7DQotICAgICAgaHJlZiAgICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjUkVRVUlSRUQNCi0+DQotPCEtLSBlbmQgb2YgYmFzZS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaGVhZC5jb250ZW50DQotICAgICIoICVIZWFkT3B0cy5taXg7LA0KLSAgICAgKCAoICV0aXRsZS5xbmFtZTssICVIZWFkT3B0cy5taXg7LCAoICViYXNlLnFuYW1lOywgJUhlYWRPcHRzLm1peDsgKT8gKQ0KLSAgICAgfCAoICViYXNlLnFuYW1lOywgJUhlYWRPcHRzLm1peDssICggJXRpdGxlLnFuYW1lOywgJUhlYWRPcHRzLm1peDsgKSkpKSINCi0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtYmFzZS0xLm1vZCAtLT4NCi0NCi08IS0tIFN0eWxlc2hlZXRzIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1zdHlsZS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIFN0eWxlIFNoZWV0cyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtc3R5bGUtMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIERvY3VtZW50IFN0eWxlIFNoZWV0IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1zdHlsZS0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIFN0eWxlIFNoZWV0cyAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1zdHlsZS0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBTdHlsZSBTaGVldHMNCi0NCi0gICAgICAgIHN0eWxlDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgc3R5bGUgZWxlbWVudCB0eXBlIGFuZCBpdHMgYXR0cmlidXRlcywNCi0gICAgIHVzZWQgdG8gZW1iZWQgc3R5bGUgc2hlZXQgaW5mb3JtYXRpb24gaW4gdGhlIGRvY3VtZW50IGhlYWQgZWxlbWVudC4NCi0tLT4NCi0NCi08IS0tIHN0eWxlOiBTdHlsZSBTaGVldCBJbmZvcm1hdGlvbiAuLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIHN0eWxlLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXN0eWxlLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgc3R5bGUuY29udGVudCAgIiggI1BDREFUQSApIiA+DQotPCFFTlRJVFkgJSBzdHlsZS5xbmFtZSAgInN0eWxlIiA+DQotPCFFTEVNRU5UICVzdHlsZS5xbmFtZTsgICVzdHlsZS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygc3R5bGUuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHN0eWxlLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXN0eWxlLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlc3R5bGUucW5hbWU7DQotICAgICAgJVhIVE1MLnhtbG5zLmF0dHJpYjsNCi0gICAgICAldGl0bGUuYXR0cmliOw0KLSAgICAgICVJMThuLmF0dHJpYjsNCi0gICAgICB0eXBlICAgICAgICAgJUNvbnRlbnRUeXBlLmRhdGF0eXBlOyAgICNSRVFVSVJFRA0KLSAgICAgIG1lZGlhICAgICAgICAlTWVkaWFEZXNjLmRhdGF0eXBlOyAgICAgI0lNUExJRUQNCi0gICAgICB4bWw6c3BhY2UgICAgKCBwcmVzZXJ2ZSApICAgICAgICAgICAgICNGSVhFRCAncHJlc2VydmUnDQotPg0KLTwhLS0gZW5kIG9mIHN0eWxlLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtc3R5bGUtMS5tb2QgLS0+DQotDQotPCEtLSBEb2N1bWVudCBTdHJ1Y3R1cmUgTW9kdWxlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgaHRtbC5jb250ZW50ICIoICVoZWFkLnFuYW1lOywgJVRlbXBsYXRlLm1peDssICglYm9keS5xbmFtZTsgfCAoJWNhcmQucW5hbWU7KykpKSI+DQotPCFFTlRJVFkgJSBib2R5LmNvbnRlbnQgIiglQ2FyZEJvZHkubWl4OykiPg0KLTwhRU5USVRZICUgeGh0bWwtc3RydWN0Lm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgRG9jdW1lbnQgU3RydWN0dXJlIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1zdHJ1Y3QtMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIFN0cnVjdHVyZSBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1zdHJ1Y3QtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIERvY3VtZW50IFN0cnVjdHVyZSAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1zdHJ1Y3QtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gRG9jdW1lbnQgU3RydWN0dXJlDQotDQotICAgICAgICB0aXRsZSwgaGVhZCwgYm9keSwgaHRtbA0KLQ0KLSAgICAgVGhlIFN0cnVjdHVyZSBNb2R1bGUgZGVmaW5lcyB0aGUgbWFqb3Igc3RydWN0dXJhbCBlbGVtZW50cyBhbmQNCi0gICAgIHRoZWlyIGF0dHJpYnV0ZXMuDQotDQotICAgICBOb3RlIHRoYXQgdGhlIGNvbnRlbnQgbW9kZWwgb2YgdGhlIGhlYWQgZWxlbWVudCB0eXBlIGlzIHJlZGVjbGFyZWQNCi0gICAgIHdoZW4gdGhlIEJhc2UgTW9kdWxlIGlzIGluY2x1ZGVkIGluIHRoZSBEVEQuDQotDQotICAgICBUaGUgcGFyYW1ldGVyIGVudGl0eSBjb250YWluaW5nIHRoZSBYTUwgbmFtZXNwYWNlIFVSSSB2YWx1ZSB1c2VkDQotICAgICBmb3IgWEhUTUwgaXMgJyVYSFRNTC54bWxuczsnLCBkZWZpbmVkIGluIHRoZSBRdWFsaWZpZWQgTmFtZXMgbW9kdWxlLg0KLS0tPg0KLQ0KLTwhLS0gdGl0bGU6IERvY3VtZW50IFRpdGxlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gVGhlIHRpdGxlIGVsZW1lbnQgaXMgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgZmxvdyBvZiB0ZXh0Lg0KLSAgICAgSXQgc2hvdWxkIGJlIGRpc3BsYXllZCwgZm9yIGV4YW1wbGUgYXMgdGhlIHBhZ2UgaGVhZGVyIG9yDQotICAgICB3aW5kb3cgdGl0bGUuIEV4YWN0bHkgb25lIHRpdGxlIGlzIHJlcXVpcmVkIHBlciBkb2N1bWVudC4NCi0tLT4NCi0NCi08IUVOVElUWSAlIHRpdGxlLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXRpdGxlLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgdGl0bGUuY29udGVudCAgIiggI1BDREFUQSApIiA+DQotPCFFTlRJVFkgJSB0aXRsZS5xbmFtZSAgInRpdGxlIiA+DQotPCFFTEVNRU5UICV0aXRsZS5xbmFtZTsgICV0aXRsZS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgdGl0bGUuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHRpdGxlLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXRpdGxlLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAldGl0bGUucW5hbWU7DQotICAgICAgJVhIVE1MLnhtbG5zLmF0dHJpYjsNCi0gICAgICAlSTE4bi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHRpdGxlLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBoZWFkOiBEb2N1bWVudCBIZWFkIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBoZWFkLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWhlYWQuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBoZWFkLmNvbnRlbnQNCi0gICAgIiggJUhlYWRPcHRzLm1peDssICV0aXRsZS5xbmFtZTssICVIZWFkT3B0cy5taXg7ICkiDQotPg0KLTwhRU5USVRZICUgaGVhZC5xbmFtZSAgImhlYWQiID4NCi08IUVMRU1FTlQgJWhlYWQucW5hbWU7ICAlaGVhZC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaGVhZC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaGVhZC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVoZWFkLmF0dGxpc3Q7Ww0KLTwhLS0gcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2Ugd2l0aCBkb2N1bWVudCBwcm9maWxlcw0KLS0tPg0KLTwhRU5USVRZICUgcHJvZmlsZS5hdHRyaWINCi0gICAgICJwcm9maWxlICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICclWEhUTUwucHJvZmlsZTsnIg0KLT4NCi0NCi08IUFUVExJU1QgJWhlYWQucW5hbWU7DQotICAgICAgJVhIVE1MLnhtbG5zLmF0dHJpYjsNCi0gICAgICAlSTE4bi5hdHRyaWI7DQotICAgICAgJXByb2ZpbGUuYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBoZWFkLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBib2R5OiBEb2N1bWVudCBCb2R5IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBib2R5LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWJvZHkuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBib2R5LmNvbnRlbnQNCi0gICAgICIoICVCbG9jay5taXg7ICkrIg0KLT4NCi08IUVOVElUWSAlIGJvZHkucW5hbWUgICJib2R5IiA+DQotPCFFTEVNRU5UICVib2R5LnFuYW1lOyAgJWJvZHkuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGJvZHkuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGJvZHkuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslYm9keS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWJvZHkucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGJvZHkuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGh0bWw6IFhIVE1MIERvY3VtZW50IEVsZW1lbnQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGh0bWwuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaHRtbC5lbGVtZW50O1sNCi08IUVOVElUWSAlIGh0bWwuY29udGVudCAgIiggJWhlYWQucW5hbWU7LCAlYm9keS5xbmFtZTsgKSIgPg0KLTwhRU5USVRZICUgaHRtbC5xbmFtZSAgImh0bWwiID4NCi08IUVMRU1FTlQgJWh0bWwucW5hbWU7ICAlaHRtbC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaHRtbC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaHRtbC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVodG1sLmF0dGxpc3Q7Ww0KLTwhLS0gdmVyc2lvbiBhdHRyaWJ1dGUgdmFsdWUgZGVmaW5lZCBpbiBkcml2ZXINCi0tLT4NCi08IUVOVElUWSAlIFhIVE1MLnZlcnNpb24uYXR0cmliDQotICAgICAidmVyc2lvbiAgICAgICVGUEkuZGF0YXR5cGU7ICAgICAgICAgICAjRklYRUQgJyVYSFRNTC52ZXJzaW9uOyciDQotPg0KLQ0KLTwhLS0gc2VlIHRoZSBRdWFsaWZpZWQgTmFtZXMgbW9kdWxlIGZvciBpbmZvcm1hdGlvbg0KLSAgICAgb24gaG93IHRvIGV4dGVuZCBYSFRNTCB1c2luZyBYTUwgbmFtZXNwYWNlcw0KLS0tPg0KLTwhQVRUTElTVCAlaHRtbC5xbmFtZTsNCi0gICAgICAlWEhUTUwueG1sbnMuYXR0cmliOw0KLSAgICAgICVYSFRNTC52ZXJzaW9uLmF0dHJpYjsNCi0gICAgICAlSTE4bi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGh0bWwuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1zdHJ1Y3QtMS5tb2QgLS0+DQotDQotPCEtLSBCbG9jayBQcmVzZW50YXRpb24gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWJsa3ByZXMubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCbG9jayBQcmVzZW50YXRpb24gMS4wLy9FTiINCi0gCQkiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJsa3ByZXMtMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIEJsb2NrIFByZXNlbnRhdGlvbiBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1ibGtwcmVzLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCbG9jayBQcmVzZW50YXRpb24gMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmxrcHJlcy0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBCbG9jayBQcmVzZW50YXRpb25hbCBFbGVtZW50cw0KLQ0KLSAgICAgICAgaHINCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBlbGVtZW50cyBhbmQgdGhlaXIgYXR0cmlidXRlcyB1c2VkIHRvDQotICAgICBzdXBwb3J0IGJsb2NrLWxldmVsIHByZXNlbnRhdGlvbmFsIG1hcmt1cC4NCi0tLT4NCi0NCi08IUVOVElUWSAlIGhyLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWhyLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaHIuY29udGVudCAgIkVNUFRZIiA+DQotPCFFTlRJVFkgJSBoci5xbmFtZSAgImhyIiA+DQotPCFFTEVNRU5UICVoci5xbmFtZTsgICVoci5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaHIuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGhyLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWhyLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlaHIucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGhyLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtYmxrcHJlcy0xLm1vZCAtLT4NCi0NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0NCi0JCVdNTCBEZWNsYXJhdGlvbnMNCi0tLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gU3BlY2lhbCBXTUwgZWxlbWVudHMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgd21sLXNwZWNpYWwubW9kIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VMRU1FTlRTIFdNTCBTcGVjaWFsIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWwtc3BlY2lhbC0xLm1vZCI+DQotPCEtLSBXTUwgMi4wIFNwZWNpYWwgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB3bWwtc3BlY2lhbC0xLm1vZCAtLT4NCi08IS0tIA0KLSAgICBAV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0sIEx0ZC4gMjAwMS4NCi0NCi0JVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiANCi0JV2ViIHNpdGUgKGh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL3doYXQvY29weXJpZ2h0Lmh0bSkuDQotLS0+DQotPCEtLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTEVNRU5UUyBXTUwgU3BlY2lhbCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gIndtbC1zcGVjaWFsLTEubW9kIg0KLQ0KLQlUaGlzIG1vZHVsZSBjb250YWlucyBkZWNsYXJhdGlvbnMgb2YgdGhlIGZvbGxvd2luZyBXTUwgZWxlbWVudHMuIA0KLQkNCi0JCWNhcmQsIGRvLCBvbmV2ZW50LCBhY2Nlc3MsIGdvLCBwcmV2LA0KLQkJcmVmcmVzaCwgbm9vcCwgIHBvc3RmaWVsZCwgc2V0dmFyLCBnZXR2YXINCi0JCXRpbWVyLCBhbmNob3INCi0JCQ0KLQlJdCBhbHNvIGNvbnRhaW5zIFdNTCBleHRlbnNpb25zIG9mIFhIVE1MIGVsZW1lbnRzLiANCi0tLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gDQotCVdNTCBHbG9iYWwgYXR0cmlidXRlcw0KLS0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSANCi0JV01MIEV2ZW50IGF0dHJpYnV0ZXMNCi0JDQotCVRoZXNlIGFyZSB1c2VkIG9uIHRoZSBYSFRNTCBib2R5IGFuZCBodG1sIGVsZW1lbnRzLg0KLQlUaGUgc2FtZSBhdHRyaWJ1dGVzIGFyZSBhbHNvIGF2YWlsYWJsZSBvbiB0aGUgV01MIGNhcmQgZWxlbWVudCwgYnV0DQotCXdpdGhvdXQgbmFtZXNwYWNlIHByZWZpeC4NCi0tLT4NCi08IUVOVElUWSAlIFdNTC5ldmVudC5hdHRyaWIgIiVhdHQub25lbnRlcmZvcndhcmQucW5hbWU7IENEQVRBCSNJTVBMSUVEDQotICVhdHQub25lbnRlcmJhY2t3YXJkLnFuYW1lOyBDREFUQQkjSU1QTElFRA0KLSAlYXR0Lm9udGltZXIucW5hbWU7IENEQVRBCSNJTVBMSUVEIj4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gDQotCVdNTCBFbGVtZW50cw0KLS0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSANCi0JQ2FyZHMgDQotCQ0KLQlVc2Ugc2FtZSBjb250ZW50IG1vZGVsIGFzIHRoZSBIVE1MIGJvZHkgZWxlbWVudA0KLS0tPg0KLTwhRUxFTUVOVCAlY2FyZC5xbmFtZTsgJUNhcmRCb2R5Lm1peDs+DQotPCFBVFRMSVNUICVjYXJkLnFuYW1lOw0KLQklQ29tbW9uLmF0dHJpYjsgDQotCW5ld2NvbnRleHQgJUJvb2xlYW4uZGF0YXR5cGU7ICJmYWxzZSINCi0Jb25lbnRlcmZvcndhcmQgQ0RBVEEgI0lNUExJRUQNCi0Jb25lbnRlcmJhY2t3YXJkIENEQVRBICNJTVBMSUVEDQotCW9udGltZXIgQ0RBVEEgI0lNUExJRUQNCi0+DQotPCEtLSANCi0JRG8gDQotLS0+DQotPCFFTEVNRU5UICVkby5xbmFtZTsgKCVUYXNrcy5jbGFzczspPg0KLTwhQVRUTElTVCAlZG8ucW5hbWU7DQotCSVDb21tb24uYXR0cmliOyANCi0gIAl0eXBlICAgICAgICAgICAgIENEQVRBICAgICAgICNSRVFVSVJFRA0KLSAgCWxhYmVsICAgICAgICAgICAgIENEQVRBICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCU9uZXZlbnQgDQotLS0+DQotPCFFTEVNRU5UICVvbmV2ZW50LnFuYW1lOyAlVGFza3MuY2xhc3M7Pg0KLTwhQVRUTElTVCAlb25ldmVudC5xbmFtZTsNCi0JJUNvcmUuYXR0cmliOyANCi0JdHlwZSBDREFUQSAjUkVRVUlSRUQNCi0+DQotPCEtLSANCi0JQWNjZXNzIA0KLS0tPg0KLTwhRUxFTUVOVCAlYWNjZXNzLnFuYW1lOyBFTVBUWT4NCi08IUFUVExJU1QgJWFjY2Vzcy5xbmFtZTsNCi0JJUNvcmUuYXR0cmliOyANCi0JZG9tYWluIENEQVRBICNJTVBMSUVEDQotCXBhdGggQ0RBVEEgI0lNUExJRUQNCi0+DQotPCEtLSANCi0JR28gDQotLS0+DQotPCFFTlRJVFkgJSBjYWNoZS1jb250cm9sICcobm8tY2FjaGUpJz4NCi08IUVMRU1FTlQgJWdvLnFuYW1lOyAoJXBvc3RmaWVsZC5xbmFtZTsgfCAlc2V0dmFyLnFuYW1lOykqPg0KLTwhQVRUTElTVCAlZ28ucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotCWhyZWYgJVVSSS5kYXRhdHlwZTsgI1JFUVVJUkVEDQotCXNlbmRyZWZlcmVyICVCb29sZWFuLmRhdGF0eXBlOyAiZmFsc2UiDQotCXR5cGUgJUNvbnRlbnRUeXBlLmRhdGF0eXBlOyAjSU1QTElFRA0KLQltZXRob2QgKHBvc3QgfCBnZXQpICJnZXQiDQotCWVuY3R5cGUgJUNvbnRlbnRUeXBlLmRhdGF0eXBlOyAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIg0KLQlhY2NlcHQtY2hhcnNldCBDREFUQSAjSU1QTElFRA0KLQljYWNoZS1jb250cm9sICVjYWNoZS1jb250cm9sOyAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQlQcmV2IA0KLS0tPg0KLTwhRUxFTUVOVCAlcHJldi5xbmFtZTsgKCVzZXR2YXIucW5hbWU7KSo+DQotPCFBVFRMSVNUICVwcmV2LnFuYW1lOw0KLQklQ29yZS5hdHRyaWI7IA0KLT4NCi08IS0tIA0KLQlSZWZyZXNoIA0KLS0tPg0KLTwhRUxFTUVOVCAlcmVmcmVzaC5xbmFtZTsgKCVzZXR2YXIucW5hbWU7KSo+DQotPCFBVFRMSVNUICVyZWZyZXNoLnFuYW1lOw0KLQklQ29yZS5hdHRyaWI7IA0KLT4NCi08IS0tIA0KLQlOb29wIA0KLS0tPg0KLTwhRUxFTUVOVCAlbm9vcC5xbmFtZTsgRU1QVFk+DQotPCFBVFRMSVNUICVub29wLnFuYW1lOw0KLQklQ29yZS5hdHRyaWI7IA0KLT4NCi08IS0tIA0KLQlQb3N0ZmllbGQgDQotLS0+DQotPCFFTEVNRU5UICVwb3N0ZmllbGQucW5hbWU7IEVNUFRZPg0KLTwhQVRUTElTVCAlcG9zdGZpZWxkLnFuYW1lOw0KLQklQ29yZS5hdHRyaWI7IA0KLQluYW1lIENEQVRBICNSRVFVSVJFRA0KLQl2YWx1ZSBDREFUQSAjUkVRVUlSRUQNCi0+DQotPCEtLSANCi0JU2V0dmFyIA0KLS0tPg0KLTwhRUxFTUVOVCAlc2V0dmFyLnFuYW1lOyBFTVBUWT4NCi08IUFUVExJU1QgJXNldHZhci5xbmFtZTsNCi0JJUNvcmUuYXR0cmliOyANCi0JbmFtZSBDREFUQSAjUkVRVUlSRUQNCi0JdmFsdWUgQ0RBVEEgI1JFUVVJUkVEDQotPg0KLTwhLS0gDQotCUdldHZhcg0KLS0tPg0KLTwhRUxFTUVOVCAlZ2V0dmFyLnFuYW1lOyBFTVBUWT4NCi08IUFUVExJU1QgJWdldHZhci5xbmFtZTsNCi0JJUNvcmUuYXR0cmliOyANCi0JbmFtZSBDREFUQSAjUkVRVUlSRUQNCi0JY29udmVyc2lvbiAoZXNjYXBlIHwgbm9lc2MgfCB1bmVzYykgIm5vZXNjIg0KLT4NCi08IS0tIA0KLQlUaW1lciAgDQotLS0+DQotPCFFTEVNRU5UICV0aW1lci5xbmFtZTsgRU1QVFk+DQotPCFBVFRMSVNUICV0aW1lci5xbmFtZTsNCi0JJUNvcmUuYXR0cmliOyANCi0JbmFtZSBOTVRPS0VOICNJTVBMSUVEDQotCXZhbHVlIENEQVRBICNSRVFVSVJFRA0KLT4NCi08IS0tIA0KLQlBbmNob3IgDQotCQ0KLQlTYW1lIGNvbnRlbnQgbW9kZWwgYXMgSFRNTCBhIGVsZW1lbnQsIGJ1dCBleHRlbmRlZCB3aXRoIFdNTCB0YXNrcy4NCi0tLT4NCi08IUVMRU1FTlQgJWFuY2hvci5xbmFtZTsgKCNQQ0RBVEEgfCAlSW5sTm9BbmNob3IubWl4OyB8ICVUYXNrcy1ub25vb3AuY2xhc3M7KSo+DQotPCFBVFRMSVNUICVhbmNob3IucW5hbWU7DQotCSVDb21tb24uYXR0cmliOyANCi0JYWNjZXNza2V5IENEQVRBICNJTVBMSUVEDQotPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSANCi0JV01MIGV4dGVuc2lvbnMgb2YgWEhUTUwgZWxlbWVudHMNCi0tLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gDQotCXNlbGVjdCANCi0JDQotCSpXTUwgaW5hbWUsIGl2YWx1ZSwgdmFsdWUsIGFuZCBuYW1lIGF0dHJpYnV0ZXMNCi0JKlhIVE1MIHRhYmluZGV4IChub3QgaW4gQmFzaWMgRm9ybXMgbW9kdWxlKQ0KLS0tPg0KLTwhQVRUTElTVCAlc2VsZWN0LnFuYW1lOw0KLQklYXR0LmluYW1lLnFuYW1lOyBOTVRPS0VOICNJTVBMSUVEDQotCSVhdHQudmFsdWUucW5hbWU7IENEQVRBICNJTVBMSUVEDQotCSVhdHQuaXZhbHVlLnFuYW1lOyBDREFUQSAjSU1QTElFRA0KLQklYXR0Lm5hbWUucW5hbWU7IENEQVRBICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCWlucHV0IA0KLQkNCi0JKldNTCBmb3JtYXQsIGVtcHR5b2ssIGFuZCBuYW1lIGF0dHJpYnV0ZXMNCi0JKlhIVE1MIHRhYmluZGV4IChub3QgaW4gQmFzaWMgRm9ybXMgbW9kdWxlKQ0KLS0tPg0KLTwhQVRUTElTVCAlaW5wdXQucW5hbWU7DQotCSVhdHQuZm9ybWF0LnFuYW1lOyBDREFUQSAjSU1QTElFRA0KLQklYXR0LmVtcHR5b2sucW5hbWU7ICVCb29sZWFuLmRhdGF0eXBlOyAjSU1QTElFRA0KLQklYXR0Lm5hbWUucW5hbWU7IENEQVRBICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCXRleHRhcmVhDQotCQ0KLQkqV01MIGZvcm1hdCwgZW1wdHlvaywgYW5kIG5hbWUgYXR0cmlidXRlcw0KLQkqWEhUTUwgdGFiaW5kZXggYXR0cmlidXRlIChub3QgaW4gQmFzaWMgRm9ybXMgbW9kdWxlKQ0KLS0tPg0KLTwhQVRUTElTVCAldGV4dGFyZWEucW5hbWU7DQotCSVhdHQuZm9ybWF0LnFuYW1lOyBDREFUQSAjSU1QTElFRA0KLQklYXR0LmVtcHR5b2sucW5hbWU7ICVCb29sZWFuLmRhdGF0eXBlOyAjSU1QTElFRA0KLQklYXR0Lm5hbWUucW5hbWU7IENEQVRBICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCW9wdGlvbg0KLQkNCi0JKldNTCBvbnBpY2sgYXR0cmlidXRlDQotLS0+DQotPCFBVFRMSVNUICVvcHRpb24ucW5hbWU7DQotCSVhdHQub25waWNrLnFuYW1lOyBDREFUQSAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQlpbWcgDQotDQotCSpXTUwgbG9jYWxzcmMgYXR0cmlidXRlDQotLS0+DQotPCFBVFRMSVNUIGltZw0KLQklYXR0LmxvY2Fsc3JjLnFuYW1lOyBDREFUQSAjSU1QTElFRA0KLQklYXR0LnR5cGUucW5hbWU7ICVDb250ZW50VHlwZS5kYXRhdHlwZTsgI0lNUExJRUQNCi0+DQotPCEtLSANCi0JdGFibGUgDQotCQ0KLQkqV01MIGNvbHVtbnMgYXR0cmlidXRlDQotCQ0KLS0tPg0KLTwhQVRUTElTVCAldGFibGUucW5hbWU7DQotCSVhdHQuY29sdW1ucy5xbmFtZTsgJU51bWJlci5kYXRhdHlwZTsgI0lNUExJRUQNCi0+DQotPCEtLSANCi0JYm9keSANCi0JDQotCSpXTUwgbmV3Y29udGV4dCANCi0JKldNTCBldmVudCBhdHRyaWJ1dGVzDQotLS0+DQotPCFBVFRMSVNUICVib2R5LnFuYW1lOw0KLQklYXR0Lm5ld2NvbnRleHQucW5hbWU7ICVCb29sZWFuLmRhdGF0eXBlOyAiZmFsc2UiDQotCSVXTUwuZXZlbnQuYXR0cmliOyANCi0+DQotPCEtLSANCi0JaHRtbCANCi0JDQotCSpEZWNsYXJhdGlvbiBvZiBXTUwgbmFtZXNwYWNlIHdpdGggcHJlZml4CQ0KLQkqV01MIGV2ZW50IGF0dHJpYnV0ZXMNCi0tLT4NCi08IUFUVExJU1QgJWh0bWwucW5hbWU7DQotCSVXTUwueG1sbnMuZXh0cmEuYXR0cmliOyANCi0JJVdNTC5ldmVudC5hdHRyaWI7IA0KLT4NCi0NCi08IS0tIERlcHJlY2F0ZWQgV01MIGVsZW1lbnRzLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHdtbC1kZXByZWNhdGVkLm1vZCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTEVNRU5UUyBXTUwgRGVwcmVjYXRlZCAxLjAvL0VOIg0KLSAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbC1kZXByZWNhdGVkLTEubW9kIj4NCi08IS0tIFdNTCBEZXByZWNhdGVkIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogd21sLWRlcHJlY2F0ZWQtMS5tb2QgLS0+DQotPCEtLSANCi0gICAgQFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtLCBMdGQuIDIwMDEuDQotDQotCVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gDQotCVdlYiBzaXRlIChodHRwOi8vd3d3LndhcGZvcnVtLm9yZy93aGF0L2NvcHlyaWdodC5odG0pLg0KLS0tPg0KLTwhLS0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XQVBGT1JVTS8vRUxFTUVOVFMgV01MIERlcHJlY2F0ZWQgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJ3bWwtZGVwcmVjYXRlZC0xLm1vZCINCi0NCi0JVGhpcyBtb2R1bGUgY29udGFpbnMgZGVwcmVjYXRlZCBlbGVtZW50cyBhbmQgYXR0cmlidXRlcy4NCi0JDQotCQlBdHRyaWJ1dGVzOiBXTUwgbW9kZSwgWEhUTUwgYWxpZ24sIFhIVE1MIHZzcGFjZSwgWEhUTUwgaHNwYWNlDQotCQkNCi0JCUVsZW1lbnRzOiB1LCBiLCBiaWcsIGksIHNtYWxsIA0KLQkJDQotLS0+DQotPCEtLSANCi0JcCANCi0JDQotCSpXTUwgbW9kZQ0KLQkqWEhUTUwgYWxpZ24NCi0JDQotCVJlcGxhY2VtZW50OiBVc2UgQ1NTIHN0eWxlIHNoZWV0cyANCi0tLT4NCi08IUFUVExJU1QgJXAucW5hbWU7DQotCSVhdHQubW9kZS5xbmFtZTsgKHdyYXAgfCBub3dyYXApICNJTVBMSUVEDQotCWFsaWduIChsZWZ0IHwgcmlnaHQgfCBjZW50ZXIpICJsZWZ0Ig0KLT4NCi08IS0tIA0KLQl0YWJsZSANCi0JDQotCSpXTUwgYWxpZ24gDQotCQ0KLQlOb3RlOiBUaGUgV01MIGFsaWduIGF0dHJpYnV0ZSBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIFhIVE1MIGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW1lIG5hbWUuDQotLS0+DQotPCFBVFRMSVNUICV0YWJsZS5xbmFtZTsNCi0JJWF0dC5hbGlnbi5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0+DQotPCEtLSANCi0JaW1nIA0KLQkNCi0JKlhIVE1MIHZzcGFjZSwgaHNwYWNlLCBhbGlnbg0KLQkNCi0JUmVwbGFjZW1lbnQ6IFVzZSBDU1Mgc3R5bGUgc2hlZXRzIA0KLS0tPg0KLTwhQVRUTElTVCBpbWcNCi0JdnNwYWNlIENEQVRBICIwIg0KLQloc3BhY2UgQ0RBVEEgIjAiDQotCWFsaWduICh0b3AgfCBtaWRkbGUgfCBib3R0b20pICJib3R0b20iDQotPg0KLTwhLS0gDQotCUlubGluZSBQcmVzZW50YXRpb24gDQotCQ0KLQkqWEhUTUwgIGIsIGJpZywgaSwgc21hbGwJDQotCQ0KLQlSZXBsYWNlbWVudDogVXNlIENTUyBzdHlsZSBzaGVldHMgDQotLS0+DQotPCFFTlRJVFkgJSBzdWIuZWxlbWVudCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHN1Yi5hdHRsaXN0ICJJR05PUkUiPg0KLTwhRU5USVRZICUgc3VwLmVsZW1lbnQgIklHTk9SRSI+DQotPCFFTlRJVFkgJSBzdXAuYXR0bGlzdCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHR0LmVsZW1lbnQgIklHTk9SRSI+DQotPCFFTlRJVFkgJSB0dC5hdHRsaXN0ICJJR05PUkUiPg0KLTwhRU5USVRZICUgeGh0bWwtaW5scHJlcy5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIElubGluZSBQcmVzZW50YXRpb24gMS4wLy9FTiINCi0JCSJ4aHRtbC1pbmxwcmVzLTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBJbmxpbmUgUHJlc2VudGF0aW9uIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtaW5scHJlcy0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW5saW5lIFByZXNlbnRhdGlvbiAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1pbmxwcmVzLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIElubGluZSBQcmVzZW50YXRpb25hbCBFbGVtZW50cw0KLQ0KLSAgICAgICAgYiwgYmlnLCBpLCBzbWFsbCwgc3ViLCBzdXAsIHR0DQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgZWxlbWVudHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMgdXNlZCB0bw0KLSAgICAgc3VwcG9ydCBpbmxpbmUtbGV2ZWwgcHJlc2VudGF0aW9uYWwgbWFya3VwLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgYi5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyViLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgYi5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGIucW5hbWUgICJiIiA+DQotPCFFTEVNRU5UICViLnFuYW1lOyAgJWIuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGIuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGIuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslYi5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWIucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGIuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGJpZy5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyViaWcuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBiaWcuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBiaWcucW5hbWUgICJiaWciID4NCi08IUVMRU1FTlQgJWJpZy5xbmFtZTsgICViaWcuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGJpZy5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYmlnLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWJpZy5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWJpZy5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgYmlnLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBpLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWkuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBpLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgaS5xbmFtZSAgImkiID4NCi08IUVMRU1FTlQgJWkucW5hbWU7ICAlaS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVpLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlaS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgaS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc21hbGwuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslc21hbGwuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBzbWFsbC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIHNtYWxsLnFuYW1lICAic21hbGwiID4NCi08IUVMRU1FTlQgJXNtYWxsLnFuYW1lOyAgJXNtYWxsLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBzbWFsbC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc21hbGwuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslc21hbGwuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVzbWFsbC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2Ygc21hbGwuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHN1Yi5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVzdWIuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBzdWIuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBzdWIucW5hbWUgICJzdWIiID4NCi08IUVMRU1FTlQgJXN1Yi5xbmFtZTsgICVzdWIuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHN1Yi5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc3ViLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXN1Yi5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXN1Yi5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2Ygc3ViLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzdXAuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslc3VwLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgc3VwLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgc3VwLnFuYW1lICAic3VwIiA+DQotPCFFTEVNRU5UICVzdXAucW5hbWU7ICAlc3VwLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBzdXAuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHN1cC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVzdXAuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVzdXAucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHN1cC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgdHQuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVsldHQuZWxlbWVudDtbDQotPCFFTlRJVFkgJSB0dC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIHR0LnFuYW1lICAidHQiID4NCi08IUVMRU1FTlQgJXR0LnFuYW1lOyAgJXR0LmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiB0dC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgdHQuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVsldHQuYXR0bGlzdDtbDQotPCFBVFRMSVNUICV0dC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgdHQuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1pbmxwcmVzLTEubW9kIC0tPg0KLQ0KLTwhLS0gDQotCXUNCi0NCi0JVGhpcyBlbGVtZW50IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIFhIVE1MIGlubGluZSBwcmVzZW50YXRpb24gbW9kdWxlLg0KLQlJdCB3YXMgZGVwcmVjYXRlZCBhbHJlYWR5IGluIEhUTUwgNC4wLg0KLQkNCi0JUmVwbGFjZW1lbnQ6IFVzZSBDU1Mgc3R5bGUgc2hlZXRzIA0KLS0tPg0KLTwhRU5USVRZICUgdS5jb250ZW50ICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiPg0KLTwhRU5USVRZICUgdS5xbmFtZSAidSI+DQotPCFFTEVNRU5UICV1LnFuYW1lOyAldS5jb250ZW50Oz4NCi08IUFUVExJU1QgJXUucW5hbWU7DQotCSVDb21tb24uYXR0cmliOyANCi0+DQotPCEtLSANCi0JbWV0YSANCi0JDQotCSpXTUwgZm9ydWEgYXR0cmlidXRlDQotLS0+DQotPCFBVFRMSVNUICVtZXRhLnFuYW1lOw0KLQklYXR0LmZvcnVhLnFuYW1lOyAlQm9vbGVhbi5kYXRhdHlwZTsgInRydWUiDQotPg0KLTwhLS0NCi0JaHRtbA0KLQkNCi0JKldNTCB1c2UteG1sLWZyYWdtZW50IGF0dHJpYnV0ZQ0KLS0tPg0KLTwhQVRUTElTVCAlaHRtbC5xbmFtZTsNCi0JJWF0dC51c2V4bWxmcmFnbWVudC5xbmFtZTsgCSVCb29sZWFuLmRhdGF0eXBlOyAidHJ1ZSINCi0+DQotDQotDQotDQotPCEtLSBlbmQgb2YgV01MIDIuMCBEVEQgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sMjAtbW9kZWwtMS5tb2QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwyMC1tb2RlbC0xLm1vZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJkNzYyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwyMC1tb2RlbC0xLm1vZAorKysgL2Rldi9udWxsCkBAIC0xLDE4NCArMCwwIEBACi08IS0tIFdNTCAyLjAgRG9jdW1lbnQgTW9kZWwgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB3bWwyMC1tb2RlbC0xLm1vZCAtLT4NCi08IS0tIA0KLSAgICBAV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0sIEx0ZC4gMjAwMS4NCi0NCi0JVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiANCi0JV2ViIHNpdGUgKGh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL3doYXQvY29weXJpZ2h0Lmh0bSkuDQotLS0+DQotPCEtLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTlRJVElFUyBXTUwgMi4wIERvY3VtZW50IE1vZGVsIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvZHRkL3dtbDIwLW1vZGVsLTEubW9kIg0KLSAgICAgIA0KLSAgICAgVGhpcyBtb2R1bGUgZGVzY3JpYmVzIHRoZSBncm91cGluZ3Mgb2YgZWxlbWVudHMgdGhhdCBtYWtlIHVwDQotICAgICBjb21tb24gY29udGVudCBtb2RlbHMgZm9yIFdNTCBhbmQgWEhUTUwgZWxlbWVudHMuDQotDQotICAgICBUaHJlZSBiYXNpYyBjb250ZW50IG1vZGVscyBhcmUgZGVjbGFyZWQ6DQotDQotICAgICAgICAgJUlubGluZS5taXg7ICBjaGFyYWN0ZXItbGV2ZWwgZWxlbWVudHMNCi0gICAgICAgICAlQmxvY2subWl4OyAgIGJsb2NrLWxpa2UgZWxlbWVudHMsIGVnLiwgcGFyYWdyYXBocyBhbmQgbGlzdHMNCi0gICAgICAgICAlRmxvdy5taXg7ICAgIGFueSBibG9jayBvciBpbmxpbmUgZWxlbWVudHMNCi0NCi0gICAgIEFueSBwYXJhbWV0ZXIgZW50aXRpZXMgZGVjbGFyZWQgaW4gdGhpcyBtb2R1bGUgbWF5IGJlIHVzZWQNCi0gICAgIHRvIGNyZWF0ZSBlbGVtZW50IGNvbnRlbnQgbW9kZWxzLCBidXQgdGhlIGFib3ZlIHRocmVlIGFyZQ0KLSAgICAgY29uc2lkZXJlZCAnZ2xvYmFsJyAoaW5zb2ZhciBhcyB0aGF0IHRlcm0gYXBwbGllcyBoZXJlKS4NCi0gICAgIA0KLSAgICAgICAgCSAgICAgDQotLS0+DQotPCEtLSANCi0JT3B0aW9uYWwgRWxlbWVudHMgaW4gaGVhZCAgDQotLS0+DQotPCFFTlRJVFkgJSBIZWFkT3B0cy5taXggIiggJW1ldGEucW5hbWU7IA0KLQkJfCAlbGluay5xbmFtZTsgDQotCQl8ICVzdHlsZS5xbmFtZTsgDQotCQl8ICVvYmplY3QucW5hbWU7IA0KLQkJfCAlYWNjZXNzLnFuYW1lOykqIj4NCi08IS0tIA0KLQlUYXNrIGVsZW1lbnRzDQotDQotCVVzZWQgZm9yIHRoZSBXTUwgZG8gYW5kIG9uZXZlbnQgZWxlbWVudHMNCi0tLT4NCi08IUVOVElUWSAlIFRhc2tzLmNsYXNzICIoJWdvLnFuYW1lOyANCi0JCXwgJXByZXYucW5hbWU7IA0KLQkJfCAlbm9vcC5xbmFtZTsgDQotCQl8ICVyZWZyZXNoLnFuYW1lOykiPg0KLTwhLS0gDQotCVRhc2tzIHdpdGhvdXQgbm9vcCBlbGVtZW50DQotDQotCVVzZWQgZm9yIHRoZSBXTUwgYW5jaG9yDQotLS0+DQotPCFFTlRJVFkgJSBUYXNrcy1ub25vb3AuY2xhc3MgIiVnby5xbmFtZTsgDQotCQl8ICVwcmV2LnFuYW1lOyANCi0JCXwgJXJlZnJlc2gucW5hbWU7Ij4NCi08IS0tDQotCURvIGVsZW1lbnQNCi0tLT4NCi08IUVOVElUWSAlIERvLmNsYXNzICIlZG8ucW5hbWU7Ij4NCi08IS0tIA0KLQlNaXNjZWxsYW5lb3VzIEVsZW1lbnRzICANCi0JDQotCVRoaXMgaXMgbm90IHVzZWQgZm9yIGFueXRoaW5nIHJpZ2h0IG5vdy4gDQotLS0+DQotPCFFTlRJVFkgJSBNaXNjLmNsYXNzICIiPg0KLTwhLS0gDQotCUlubGluZSBFbGVtZW50cyAgDQotLS0+DQotPCFFTlRJVFkgJSBJbmxTdHJ1Y3QuY2xhc3MgIiVici5xbmFtZTsgDQotCXwgJXNwYW4ucW5hbWU7Ij4NCi08IUVOVElUWSAlIElubFBocmFzLmNsYXNzICJ8ICVlbS5xbmFtZTsgDQotCXwgJXN0cm9uZy5xbmFtZTsgDQotCXwgJWRmbi5xbmFtZTsgDQotCXwgJWNvZGUucW5hbWU7IA0KLQl8ICVzYW1wLnFuYW1lOyANCi0JfCAla2JkLnFuYW1lOyANCi0JfCAldmFyLnFuYW1lOyANCi0JfCAlY2l0ZS5xbmFtZTsgDQotICAgICAJfCAlYWJici5xbmFtZTsgDQotCXwgJWFjcm9ueW0ucW5hbWU7IA0KLQl8ICVxLnFuYW1lOyI+DQotPCFFTlRJVFkgJSBJbmxQcmVzLmNsYXNzICJ8ICVpLnFuYW1lOyANCi0JfCAlYi5xbmFtZTsgDQotCXwgJWJpZy5xbmFtZTsgDQotCXwgJXNtYWxsLnFuYW1lOw0KLQl8ICV1LnFuYW1lOyI+DQotPCFFTlRJVFkgJSBJMThuLmNsYXNzICIiPg0KLTwhRU5USVRZICUgQW5jaG9yLmNsYXNzICJ8ICVhLnFuYW1lOyANCi0JfCAlYW5jaG9yLnFuYW1lOyB8ICVkby5xbmFtZTsiPg0KLTwhRU5USVRZICUgSW5sU3BlY2lhbC5jbGFzcyAifCAlaW1nLnFuYW1lOyANCi0JIHwgJW9iamVjdC5xbmFtZTsgDQotCXwgJWdldHZhci5xbmFtZTsiPg0KLTwhRU5USVRZICUgSW5sRm9ybS5jbGFzcyAifCAlaW5wdXQucW5hbWU7IA0KLQkgfCAlc2VsZWN0LnFuYW1lOyANCi0JIHwgJXRleHRhcmVhLnFuYW1lOw0KLSAgICAgICAgIHwgJWxhYmVsLnFuYW1lOyI+DQotPCFFTlRJVFkgJSBJbmxpbmUuZXh0cmEgIiI+DQotPCFFTlRJVFkgJSBJbmxpbmUuY2xhc3MgIiVJbmxTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUlubFBocmFzLmNsYXNzOw0KLSAgICAgICVJbmxQcmVzLmNsYXNzOw0KLSAgICAgICVBbmNob3IuY2xhc3M7DQotICAgICAgJUlubFNwZWNpYWwuY2xhc3M7DQotICAgICAgJUlubEZvcm0uY2xhc3M7DQotICAgICAgJUlubGluZS5leHRyYTsiPg0KLTwhRU5USVRZICUgSW5sTm9BbmNob3IuY2xhc3MgIiVJbmxTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUlubFBocmFzLmNsYXNzOw0KLSAgICAgICVJbmxQcmVzLmNsYXNzOw0KLSAgICAgICVJbmxTcGVjaWFsLmNsYXNzOw0KLSAgICAgICVJbmxGb3JtLmNsYXNzOw0KLSAgICAgICVJbmxpbmUuZXh0cmE7Ij4NCi08IUVOVElUWSAlIElubE5vQW5jaG9yLm1peCAiJUlubE5vQW5jaG9yLmNsYXNzOw0KLSAgICAgICVNaXNjLmNsYXNzOyI+DQotPCFFTlRJVFkgJSBJbmxpbmUubWl4ICIlSW5saW5lLmNsYXNzOw0KLSAgICAgICVNaXNjLmNsYXNzOyI+DQotPCEtLSANCi0JQmxvY2sgRWxlbWVudHMgIA0KLS0tPg0KLTwhRU5USVRZICUgSGVhZGluZy5jbGFzcyAiJWgxLnFuYW1lOyANCi0JfCAlaDIucW5hbWU7IA0KLQl8ICVoMy5xbmFtZTsgDQotCXwgJWg0LnFuYW1lOyANCi0JfCAlaDUucW5hbWU7IA0KLQl8ICVoNi5xbmFtZTsiPg0KLTwhRU5USVRZICUgTGlzdC5jbGFzcyAiJXVsLnFuYW1lOyANCi0JfCAlb2wucW5hbWU7IA0KLQl8ICVkbC5xbmFtZTsiPg0KLTwhRU5USVRZICUgVGFibGUuY2xhc3MgInwgJXRhYmxlLnFuYW1lOyI+DQotPCFFTlRJVFkgJSBGb3JtLmNsYXNzICJ8ICVmb3JtLnFuYW1lOyI+DQotPCFFTlRJVFkgJSBGaWVsZHNldC5jbGFzcyAifCAlZmllbGRzZXQucW5hbWU7Ij4NCi08IUVOVElUWSAlIEJsa1N0cnVjdC5jbGFzcyAiJXAucW5hbWU7IA0KLQl8ICVkaXYucW5hbWU7Ij4NCi08IUVOVElUWSAlIEJsa1BocmFzLmNsYXNzICJ8ICVwcmUucW5hbWU7IA0KLQkgfCAlYmxvY2txdW90ZS5xbmFtZTsgDQotCSB8ICVhZGRyZXNzLnFuYW1lOyI+DQotPCFFTlRJVFkgJSBCbGtQcmVzLmNsYXNzICJ8ICVoci5xbmFtZTsiPg0KLTwhRU5USVRZICUgQmxrU3BlY2lhbC5jbGFzcyAiJVRhYmxlLmNsYXNzOw0KLSAgICAgICVGb3JtLmNsYXNzOw0KLSAgICAgICVGaWVsZHNldC5jbGFzczsiPg0KLTwhRU5USVRZICUgQmxvY2suZXh0cmEgIiI+DQotPCFFTlRJVFkgJSBCbG9jay5jbGFzcyAiJUJsa1N0cnVjdC5jbGFzczsNCi0gICAgICAlQmxrUGhyYXMuY2xhc3M7DQotCSAlQmxrUHJlcy5jbGFzczsNCi0gICAgICAlQmxrU3BlY2lhbC5jbGFzczsNCi0gICAgICAlQmxvY2suZXh0cmE7Ij4NCi08IUVOVElUWSAlIEJsb2NrLm1peCAiJUhlYWRpbmcuY2xhc3M7DQotICAgICAgfCAlTGlzdC5jbGFzczsNCi0gICAgICB8ICVCbG9jay5jbGFzczsgICAgIA0KLSAgICAgIHwgJURvLmNsYXNzOw0KLSAgICAgICVNaXNjLmNsYXNzOyI+DQotPCFFTlRJVFkgJSBCbGtOb0Zvcm0ubWl4ICIlSGVhZGluZy5jbGFzczsNCi0gICAgICB8ICVMaXN0LmNsYXNzOw0KLSAgICAgIHwgJUJsa1N0cnVjdC5jbGFzczsNCi0gICAgICAlQmxrUGhyYXMuY2xhc3M7DQotICAgICAgJUJsa1ByZXMuY2xhc3M7DQotICAgICAgfCAldGFibGUucW5hbWU7DQotICAgICAgJUJsb2NrLmV4dHJhOw0KLSAgICAgICVNaXNjLmNsYXNzOyI+DQotPCEtLSANCi0JQWxsIENvbnRlbnQgRWxlbWVudHMgIA0KLS0tPg0KLTwhLS0gDQotCWRlY2xhcmVzIGFsbCBjb250ZW50IGV4Y2VwdCB0YWJsZXMNCi0tLT4NCi08IUVOVElUWSAlIEZsb3dOb1RhYmxlLm1peCAiJUhlYWRpbmcuY2xhc3M7DQotICAgICAgfCAlTGlzdC5jbGFzczsNCi0gICAgICB8ICVCbGtTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUJsa1BocmFzLmNsYXNzOw0KLSAgICAgICVGb3JtLmNsYXNzOw0KLSAgICAgICVCbG9jay5leHRyYTsNCi0gICAgICB8ICVJbmxpbmUuY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ij4NCi08IUVOVElUWSAlIEZsb3cubWl4ICIlSGVhZGluZy5jbGFzczsNCi0gICAgICB8ICVMaXN0LmNsYXNzOw0KLSAgICAgIHwgJUJsb2NrLmNsYXNzOw0KLSAgICAgIHwgJUlubGluZS5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiPg0KLTwhLS0gCQ0KLQlUZW1wbGF0ZSBsZXZlbCBlbGVtZW50cyANCi0tLT4NCi08IUVOVElUWSAlIFRlbXBsYXRlLm1peCAiKCAlb25ldmVudC5xbmFtZTspKiI+DQotPCEtLSANCi0JQ29udGVudCBtb2RlbCBvZiB0aGUgV01MIGNhcmQgYW5kIFhIVE1MIGJvZHkgZWxlbWVudHMNCi0tLT4NCi08IUVOVElUWSAlIENhcmRCb2R5Lm1peCAiKCVvbmV2ZW50LnFuYW1lOyosICV0aW1lci5xbmFtZTs/LCAgKCAlQmxvY2subWl4OyApKykiPg0KLTwhLS0gZW5kIG9mIHdtbDIwLW1vZGVsLTEubW9kIC0tPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3dtbDIwLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3dtbDIwLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q2ZjhkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwyMC5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotPCEtLSBXTUwgMi4wIERURCAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogd21sMjAuZHRkIC0tPg0KLTwhLS0gDQotICAgIEBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSwgTHRkLiAyMDAxLg0KLQ0KLQlUZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIA0KLQlXZWIgc2l0ZSAoaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvd2hhdC9jb3B5cmlnaHQuaHRtKS4NCi0tLT4NCi08IS0tDQotCVRoaXMgaXMgdGhlIFdNTCAyLjAgRFREIGRyaXZlciBmaWxlLiBQbGVhc2UgdXNlIHRoaXMgZm9ybWFsIHB1YmxpYyBpZGVudGlmaWVyIHRvIGlkZW50aWZ5IGl0Og0KLQ0KLSAgICAgICAgICItLy9XQVBGT1JVTS8vRFREIFdNTCAyLjAvL0VOIg0KLSAgICAgICAgICAgICAgICAgICAJICAgICAgICAgIA0KLSAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgdXNpbmcgV01MIDIuMCBkaXJlY3RseSwgdXNlDQotICAgICB0aGUgRlBJIGluIHRoZSBET0NUWVBFIGRlY2xhcmF0aW9uLCB3aXRoIHRoZSB4bWxucyBhdHRyaWJ1dGUNCi0gICAgIG9uIHRoZSBkb2N1bWVudCBlbGVtZW50IHRvIGlkZW50aWZ5IHRoZSBkZWZhdWx0IG5hbWVzcGFjZToNCi0NCi0gICAgICAgICA8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi0gICAgICAgICA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDIuMC8vRU4iDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9kdGQvd21sMjAuZHRkIiA+DQotICAgICAgICAgPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiDQotICAgICAgICAgICAgICAgICAgIHhtbG5zOndtbD0iaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvMjAwMS93bWwiPg0KLSAgICAgICAgIC4uLg0KLSAgICAgICAgIDwvaHRtbD4NCi0NCi0tLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0NCi0JCVZlcnNpb24sIFhNTCBOYW1lc3BhY2VzLCBhbmQgcHJvZmlsZSBpbmZvcm1hdGlvbiANCi0tLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0NCi0JVmFsdWUgb2YgWEhUTUwgdmVyc2lvbiBhdHRyaWJ1dGUgDQotLS0+DQotPCFFTlRJVFkgJSBYSFRNTC52ZXJzaW9uICItLy9XQVBGT1JVTS8vRFREIFdNTCAyLjAvL0VOIj4NCi08IS0tIA0KLQlWYWx1ZSBvZiBYSFRNTCBwcm9maWxlIGF0dHJpYnV0ZQ0KLQkNCi0JUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2Ugd2l0aCBkb2N1bWVudCBwcm9maWxlcyANCi0tLT4NCi08IUVOVElUWSAlIFhIVE1MLnByb2ZpbGUgIiI+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tDQotCQlNb2R1bGFyaXNhdGlvbiBmcmFtZXdvcmsgc2V0dXANCi0tLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhRU5USVRZICUgd21sLWZyYW1ld29yay5tb2QgUFVCTElDICItLy9XQVBGT1JVTS8vRU5USVRJRVMgV01MIE1vZHVsYXIgRnJhbWV3b3JrIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWwtZnJhbWV3b3JrLTEubW9kIj4NCi0ld21sLWZyYW1ld29yay5tb2Q7DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tDQotCQlYSFRNTCBtb2R1bGVzIA0KLS0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBUZXh0IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSBwcmUuY29udGVudCAiKCAjUENEQVRBDQotICAgICAgfCAlSW5sU3RydWN0LmNsYXNzOyB8ICVpLnFuYW1lOyB8ICViLnFuYW1lOyANCi0gICAgICAlSW5sUGhyYXMuY2xhc3M7DQotICAgICAgJUFuY2hvci5jbGFzczsNCi0gICAgICAlSW5saW5lLmV4dHJhOyANCi0JfCAlZ2V0dmFyLnFuYW1lOw0KLQl8ICVpbnB1dC5xbmFtZTt8ICVzZWxlY3QucW5hbWU7KSoiPg0KLTwhRU5USVRZICUgcC5jb250ZW50ICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgfCAldGFibGUucW5hbWU7IHwgJWZpZWxkc2V0LnFuYW1lOykqIj4NCi08IUVOVElUWSAlIHhodG1sLXRleHQubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBUZXh0IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC10ZXh0LTEubW9kIj4NCi0leGh0bWwtdGV4dC5tb2Q7DQotPCFFTlRJVFkgJSB4aHRtbC1oeXBlcnRleHQubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBIeXBlcnRleHQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWh5cGVydGV4dC0xLm1vZCI+DQotJXhodG1sLWh5cGVydGV4dC5tb2Q7DQotPCEtLSBMaXN0IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1saXN0Lm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgTGlzdHMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWxpc3QtMS5tb2QiPg0KLSV4aHRtbC1saXN0Lm1vZDsNCi08IS0tIEV4dGVuZCBsaXN0cyB3aXRoIHZhbHVlIGFuZCBzdGFydCBhdHRyaWJ1dGVzIC0tPiANCi08IUFUVExJU1QgJWxpLnFuYW1lOw0KLSAgICAgIHZhbHVlICAgICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgICNJTVBMSUVEDQotPg0KLTwhQVRUTElTVCAlb2wucW5hbWU7DQotICAgICAgc3RhcnQgICAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIEltYWdlIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1pbWFnZS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEltYWdlcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW1hZ2UtMS5tb2QiPg0KLSV4aHRtbC1pbWFnZS5tb2Q7DQotPCEtLSBQYXJhbSBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtcGFyYW0ubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBQYXJhbSBFbGVtZW50IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1wYXJhbS0xLm1vZCI+DQotJXhodG1sLXBhcmFtLm1vZDsNCi08IS0tIEVtYmVkZGVkIE9iamVjdCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1vYmplY3QubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBFbWJlZGRlZCBPYmplY3QgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLW9iamVjdC0xLm1vZCI+DQotJXhodG1sLW9iamVjdC5tb2Q7DQotPCEtLSBUYWJsZXMgTW9kdWxlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtdGFibGUubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNpYyBUYWJsZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2ljLXRhYmxlLTEubW9kIj4NCi0leGh0bWwtdGFibGUubW9kOw0KLTwhLS0gRm9ybXMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVMRU1FTlQgJW9wdGdyb3VwLnFuYW1lOyAoJW9wdGlvbi5xbmFtZTspKz4NCi08IUFUVExJU1QgJW9wdGdyb3VwLnFuYW1lOw0KLQklQ29tbW9uLmF0dHJpYjsgCQ0KLQlsYWJlbCAlVGV4dC5kYXRhdHlwZTsgI1JFUVVJUkVEDQotPg0KLTwhRU5USVRZICUgb3B0aW9uLmNvbnRlbnQgIiggI1BDREFUQSB8ICVvbmV2ZW50LnFuYW1lO3wgJWdldHZhci5xbmFtZTspKiI+DQotPCFFTlRJVFkgJSBzZWxlY3QuY29udGVudCAiKCAlb3B0Z3JvdXAucW5hbWU7IHwgJW9wdGlvbi5xbmFtZTsgKSsiPg0KLTwhRUxFTUVOVCAlZmllbGRzZXQucW5hbWU7ICgjUENEQVRBIHwgJUZsb3cubWl4OykqPg0KLTwhQVRUTElTVCAlZmllbGRzZXQucW5hbWU7DQotCSVDb21tb24uYXR0cmliOyANCi0+DQotPCFFTlRJVFkgJSB0ZXh0YXJlYS5jb250ZW50ICIoICNQQ0RBVEEgfCAlZ2V0dmFyLnFuYW1lOyApKiI+DQotPCFFTlRJVFkgJSBmb3JtLmNvbnRlbnQgIiggJUJsa05vRm9ybS5taXg7DQotICAgICAgfCAlZmllbGRzZXQucW5hbWU7ICkrIj4NCi08IUVOVElUWSAlIHhodG1sLWJhc2ljLWZvcm0ubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNpYyBGb3JtcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmFzaWMtZm9ybS0xLm1vZCI+DQotJXhodG1sLWJhc2ljLWZvcm0ubW9kOw0KLTwhLS0gTGluayBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWxpbmsubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBMaW5rIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWxpbmstMS5tb2QiPg0KLSV4aHRtbC1saW5rLm1vZDsNCi08IS0tIERvY3VtZW50IE1ldGFpbmZvcm1hdGlvbiBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1tZXRhLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgTWV0YWluZm9ybWF0aW9uIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1tZXRhLTEubW9kIj4NCi0leGh0bWwtbWV0YS5tb2Q7DQotPCEtLSBCYXNlIEVsZW1lbnQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtYmFzZS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJhc2UgRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmFzZS0xLm1vZCI+DQotJXhodG1sLWJhc2UubW9kOw0KLTwhLS0gU3R5bGVzaGVldHMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXN0eWxlLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgU3R5bGUgU2hlZXRzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1zdHlsZS0xLm1vZCI+DQotJXhodG1sLXN0eWxlLm1vZDsNCi08IS0tIERvY3VtZW50IFN0cnVjdHVyZSBNb2R1bGUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSBodG1sLmNvbnRlbnQgIiggJWhlYWQucW5hbWU7LCAlVGVtcGxhdGUubWl4OywgKCVib2R5LnFuYW1lOyB8ICglY2FyZC5xbmFtZTsrKSkpIj4NCi08IUVOVElUWSAlIGJvZHkuY29udGVudCAiKCVDYXJkQm9keS5taXg7KSI+DQotPCFFTlRJVFkgJSB4aHRtbC1zdHJ1Y3QubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBEb2N1bWVudCBTdHJ1Y3R1cmUgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXN0cnVjdC0xLm1vZCI+DQotJXhodG1sLXN0cnVjdC5tb2Q7DQotPCEtLSBCbG9jayBQcmVzZW50YXRpb24gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWJsa3ByZXMubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCbG9jayBQcmVzZW50YXRpb24gMS4wLy9FTiINCi0gCQkiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJsa3ByZXMtMS5tb2QiPg0KLSV4aHRtbC1ibGtwcmVzLm1vZDsNCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0NCi0JCVdNTCBEZWNsYXJhdGlvbnMNCi0tLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gU3BlY2lhbCBXTUwgZWxlbWVudHMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgd21sLXNwZWNpYWwubW9kIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VMRU1FTlRTIFdNTCBTcGVjaWFsIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWwtc3BlY2lhbC0xLm1vZCI+DQotJXdtbC1zcGVjaWFsLm1vZDsNCi08IS0tIERlcHJlY2F0ZWQgV01MIGVsZW1lbnRzLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHdtbC1kZXByZWNhdGVkLm1vZCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTEVNRU5UUyBXTUwgRGVwcmVjYXRlZCAxLjAvL0VOIg0KLSAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbC1kZXByZWNhdGVkLTEubW9kIj4NCi0ld21sLWRlcHJlY2F0ZWQubW9kOw0KLTwhLS0gZW5kIG9mIFdNTCAyLjAgRFREICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3d0YS13bWwxMi5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93dGEtd21sMTIuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjBmN2RmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3d0YS13bWwxMi5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08IS0tDQotV2lyZWxlc3MgVGVsZXBob255IEFwcGxpY2F0aW9ucyBXaXJlbGVzcyBNYXJrdXAgTGFuZ3VhZ2UgKFdUQS1XTUwpIERvY3VtZW50IFR5cGUgRGVmaW5pdGlvbi4NCi1XVEEtV01MIGlzIGFuIFhNTCBsYW5ndWFnZS4gVHlwaWNhbCB1c2FnZToNCi08P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi08IURPQ1RZUEUgd3RhLXdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV1RBLVdNTCAxLjIvL0VOIg0KLQkiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3d0YS13bWwxMi5kdGQiPg0KLTx3dGEtd21sPg0KLS4uLg0KLTwvd3RhLXdtbD4NCi0tLT4NCi0NCi08IUVOVElUWSAlIHdtbC1kdGQgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjIvL0VOIg0KLQkiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbDEyLmR0ZCI+DQotDQotJXdtbC1kdGQ7DQotDQotPCFFTEVNRU5UIHd0YS13bWwgKCBoZWFkPywgdGVtcGxhdGU/LCBjYXJkKyApPg0KLTwhQVRUTElTVCB3dGEtd21sDQotCXhtbDpsYW5nCQlOTVRPS0VOCSNJTVBMSUVEDQotCSVjb3JlYXR0cnM7DQotPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3hodG1sLW1vYmlsZTEwLWZsYXQuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAveGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhM2U3M2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAveGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwzMjE2ICswLDAgQEAKLTwhLS0gWEhUTUwgTW9iaWxlIDEuMCBEVEQgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLW1vYmlsZTEwLmR0ZCAtLT4NCi08IS0tIA0KLSAgICAgVGhpcyBpcyBYSFRNTCBNb2JpbGUgcHJvZmlsZSwgYSBwcm9wZXIgc3Vic2V0IG9mIFhIVE1MLg0KLSAgICAgDQotICAgICAJQFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtLCBMdGQuIDIwMDEuDQotDQotCVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gDQotCVdlYiBzaXRlIChodHRwOi8vd3d3LndhcGZvcnVtLm9yZy93aGF0L2NvcHlyaWdodC5odG0pLg0KLSAgICANCi0tLT4NCi08IS0tIFRoaXMgaXMgdGhlIGRyaXZlciBmaWxlIGZvciB2ZXJzaW9uIDEuMCBvZiB0aGUgWEhUTUwgTW9iaWxlIERURC4NCi0NCi0gICAgIFRoaXMgRFREIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgUFVCTElDOiAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiINCi0gICAgIFNZU1RFTTogImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC94aHRtbC1tb2JpbGUxMC5kdGQiDQotLS0+DQotPCFFTlRJVFkgJSBYSFRNTC52ZXJzaW9uICAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIgPg0KLQ0KLTwhLS0gVXNlIHRoaXMgVVJJIHRvIGlkZW50aWZ5IHRoZSBkZWZhdWx0IG5hbWVzcGFjZToNCi0NCi0gICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCINCi0NCi0gICAgIFNlZSB0aGUgUXVhbGlmaWVkIE5hbWVzIG1vZHVsZSBmb3IgaW5mb3JtYXRpb24NCi0gICAgIG9uIHRoZSB1c2Ugb2YgbmFtZXNwYWNlIHByZWZpeGVzIGluIHRoZSBEVEQuDQotLS0+DQotPCFFTlRJVFkgJSBOUy5wcmVmaXhlZCAiSUdOT1JFIiA+DQotPCFFTlRJVFkgJSBYSFRNTC5wcmVmaXggICIiID4NCi0NCi08IS0tIEZvciBleGFtcGxlLCBpZiB5b3UgYXJlIHVzaW5nIFhIVE1MIE1vYmlsZSAxLjAgZGlyZWN0bHksIHVzZQ0KLSAgICAgdGhlIEZQSSBpbiB0aGUgRE9DVFlQRSBkZWNsYXJhdGlvbiwgd2l0aCB0aGUgeG1sbnMgYXR0cmlidXRlDQotICAgICBvbiB0aGUgZG9jdW1lbnQgZWxlbWVudCB0byBpZGVudGlmeSB0aGUgZGVmYXVsdCBuYW1lc3BhY2U6DQotDQotICAgICAgICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotICAgICAgICAgPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIg0KLSAgICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3hodG1sLW1vYmlsZTEwLmR0ZCIgPg0KLSAgICAgICAgIDxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIg0KLSAgICAgICAgICAgICAgIHhtbDpsYW5nPSJlbiIgPg0KLSAgICAgICAgIC4uLg0KLSAgICAgICAgIDwvaHRtbD4NCi0tLT4NCi0NCi08IS0tIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIHdpdGggZG9jdW1lbnQgcHJvZmlsZXMgLS0+DQotPCFFTlRJVFkgJSBYSFRNTC5wcm9maWxlICAiIiA+DQotDQotPCEtLSBJbmxpbmUgU3R5bGUgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtaW5sc3R5bGUubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW5saW5lIFN0eWxlIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1pbmxzdHlsZS0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIElubGluZSBTdHlsZSBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1pbmxzdHlsZS0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBJbmxpbmUgU3R5bGUgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW5sc3R5bGUtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gSW5saW5lIFN0eWxlDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgJ3N0eWxlJyBhdHRyaWJ1dGUsIHVzZWQgdG8gc3VwcG9ydCBpbmxpbmUNCi0gICAgIHN0eWxlIG1hcmt1cC4gVGhpcyBtb2R1bGUgbXVzdCBiZSBpbnN0YW50aWF0ZWQgcHJpb3IgdG8gdGhlIFhIVE1MDQotICAgICBDb21tb24gQXR0cmlidXRlcyBtb2R1bGUgaW4gb3JkZXIgdG8gYmUgaW5jbHVkZWQgaW4gJUNvcmUuYXR0cmliOy4NCi0tLT4NCi0NCi08IUVOVElUWSAlIHN0eWxlLmF0dHJpYg0KLSAgICAgInN0eWxlICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQiDQotPg0KLQ0KLQ0KLTwhRU5USVRZICUgQ29yZS5leHRyYS5hdHRyaWINCi0gICAgICIlc3R5bGUuYXR0cmliOyINCi0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtaW5sc3R5bGUtMS5tb2QgLS0+DQotDQotDQotPCEtLSBEb2N1bWVudCBNb2RlbCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtbW9kZWwubW9kDQotICAgICBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTlRJVElFUyBYSFRNTCBNb2JpbGUgMS4wIERvY3VtZW50IE1vZGVsIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC94aHRtbC1tb2JpbGUxMC1tb2RlbC0xLm1vZCIgPg0KLQ0KLTwhLS0gWEhUTUwgRnJhbWV3b3JrIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSBYSFRNTC5iaWRpICAiSUdOT1JFIiA+DQotPCFFTlRJVFkgJSB4aHRtbC1mcmFtZXdvcmsubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgTW9kdWxhciBGcmFtZXdvcmsgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWZyYW1ld29yay0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIE1vZHVsYXIgRnJhbWV3b3JrIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1mcmFtZXdvcmstMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIE1vZHVsYXIgRnJhbWV3b3JrIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWZyYW1ld29yay0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBNb2R1bGFyIEZyYW1ld29yaw0KLQ0KLSAgICAgVGhpcyByZXF1aXJlZCBtb2R1bGUgaW5zdGFudGlhdGVzIHRoZSBtb2R1bGVzIG5lZWRlZA0KLSAgICAgdG8gc3VwcG9ydCB0aGUgWEhUTUwgbW9kdWxhcml6YXRpb24gbW9kZWwsIGluY2x1ZGluZzoNCi0NCi0gICAgICAgICsgIG5vdGF0aW9ucw0KLSAgICAgICAgKyAgZGF0YXR5cGVzDQotICAgICAgICArICBuYW1lc3BhY2UtcXVhbGlmaWVkIG5hbWVzDQotICAgICAgICArICBjb21tb24gYXR0cmlidXRlcw0KLSAgICAgICAgKyAgZG9jdW1lbnQgbW9kZWwNCi0gICAgICAgICsgIGNoYXJhY3RlciBlbnRpdGllcw0KLQ0KLSAgICAgVGhlIEludHJpbnNpYyBFdmVudHMgbW9kdWxlIGlzIGlnbm9yZWQgYnkgZGVmYXVsdCBidXQNCi0gICAgIG9jY3VycyBpbiB0aGlzIG1vZHVsZSBiZWNhdXNlIGl0IG11c3QgYmUgaW5zdGFudGlhdGVkDQotICAgICBwcmlvciB0byBBdHRyaWJ1dGVzIGJ1dCBhZnRlciBEYXRhdHlwZXMuDQotLS0+DQotDQotPCFFTlRJVFkgJSB4aHRtbC1hcmNoLm1vZHVsZSAiSUdOT1JFIiA+DQotPCFbJXhodG1sLWFyY2gubW9kdWxlO1sNCi08IUVOVElUWSAlIHhodG1sLWFyY2gubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzZSBBcmNoaXRlY3R1cmUgMS4wLy9FTiINCi0gICAgICAgICAgICAieGh0bWwtYXJjaC0xLm1vZCIgPg0KLSV4aHRtbC1hcmNoLm1vZDtdXT4NCi0NCi08IUVOVElUWSAlIHhodG1sLW5vdGF0aW9ucy5tb2R1bGUgIklOQ0xVREUiID4NCi08IVsleGh0bWwtbm90YXRpb25zLm1vZHVsZTtbDQotPCFFTlRJVFkgJSB4aHRtbC1ub3RhdGlvbnMubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT05TIFhIVE1MIE5vdGF0aW9ucyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJ4aHRtbC1ub3RhdGlvbnMtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBOb3RhdGlvbnMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtbm90YXRpb25zLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OUyBYSFRNTCBOb3RhdGlvbnMgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbm90YXRpb25zLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIE5vdGF0aW9ucw0KLQ0KLSAgICAgZGVmaW5lcyB0aGUgZm9sbG93aW5nIG5vdGF0aW9ucywgbWFueSBvZiB0aGVzZSBpbXBvcnRlZCBmcm9tDQotICAgICBvdGhlciBzcGVjaWZpY2F0aW9ucyBhbmQgc3RhbmRhcmRzLiBXaGVuIGFuIGV4aXN0aW5nIEZQSSBpcw0KLSAgICAga25vd24sIGl0IGlzIGluY29ycG9yYXRlZCBoZXJlLg0KLS0tPg0KLQ0KLTwhLS0gWE1MIE5vdGF0aW9ucyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gU0dNTCBhbmQgWE1MIE5vdGF0aW9ucyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gVzNDIFhNTCAxLjAgUmVjb21tZW5kYXRpb24gLS0+DQotPCFOT1RBVElPTiB3M2MteG1sDQotICAgICBQVUJMSUMgIklTTyA4ODc5Ly9OT1RBVElPTiBFeHRlbnNpYmxlIE1hcmt1cCBMYW5ndWFnZSAoWE1MKSAxLjAvL0VOIiA+DQotDQotPCEtLSBYTUwgMS4wIENEQVRBIC0tPg0KLTwhTk9UQVRJT04gY2RhdGENCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYTUwgMS4wOiBDREFUQS8vRU4iID4NCi0NCi08IS0tIFNHTUwgRm9ybWFsIFB1YmxpYyBJZGVudGlmaWVycyAtLT4NCi08IU5PVEFUSU9OIGZwaQ0KLSAgICAgUFVCTElDICJJU08gODg3OToxOTg2Ly9OT1RBVElPTiBGb3JtYWwgUHVibGljIElkZW50aWZpZXIvL0VOIiA+DQotDQotPCEtLSBYSFRNTCBOb3RhdGlvbnMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBMZW5ndGggZGVmaW5lZCBmb3IgY2VsbHBhZGRpbmcvY2VsbHNwYWNpbmcgLS0+DQotDQotPCEtLSBubiBmb3IgcGl4ZWxzIG9yIG5uJSBmb3IgcGVyY2VudGFnZSBsZW5ndGggLS0+DQotPCFOT1RBVElPTiBsZW5ndGgNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBMZW5ndGgvL0VOIiA+DQotDQotPCEtLSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBsaW5rIHR5cGVzIC0tPg0KLTwhTk9UQVRJT04gbGlua1R5cGVzDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogTGlua1R5cGVzLy9FTiIgPg0KLQ0KLTwhLS0gc2luZ2xlIG9yIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG1lZGlhIGRlc2NyaXB0b3JzIC0tPg0KLTwhTk9UQVRJT04gbWVkaWFEZXNjDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogTWVkaWFEZXNjLy9FTiIgPg0KLQ0KLTwhLS0gcGl4ZWwsIHBlcmNlbnRhZ2UsIG9yIHJlbGF0aXZlIC0tPg0KLTwhTk9UQVRJT04gbXVsdGlMZW5ndGgNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBNdWx0aUxlbmd0aC8vRU4iID4NCi0NCi08IS0tIG9uZSBvciBtb3JlIGRpZ2l0cyAoTlVNQkVSKSAtLT4NCi08IU5PVEFUSU9OIG51bWJlcg0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IE51bWJlci8vRU4iID4NCi0NCi08IS0tIGludGVnZXIgcmVwcmVzZW50aW5nIGxlbmd0aCBpbiBwaXhlbHMgLS0+DQotPCFOT1RBVElPTiBwaXhlbHMNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBQaXhlbHMvL0VOIiA+DQotDQotPCEtLSBzY3JpcHQgZXhwcmVzc2lvbiAtLT4NCi08IU5PVEFUSU9OIHNjcmlwdA0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IFNjcmlwdC8vRU4iID4NCi0NCi08IS0tIHRleHR1YWwgY29udGVudCAtLT4NCi08IU5PVEFUSU9OIHRleHQNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBUZXh0Ly9FTiIgPg0KLQ0KLTwhLS0gSW1wb3J0ZWQgTm90YXRpb25zIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gYSBzaW5nbGUgY2hhcmFjdGVyIGZyb20gW0lTTzEwNjQ2XSAtLT4NCi08IU5PVEFUSU9OIGNoYXJhY3Rlcg0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IENoYXJhY3Rlci8vRU4iID4NCi0NCi08IS0tIGEgY2hhcmFjdGVyIGVuY29kaW5nLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLTwhTk9UQVRJT04gY2hhcnNldA0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IENoYXJzZXQvL0VOIiA+DQotDQotPCEtLSBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNoYXJhY3RlciBlbmNvZGluZ3MsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotPCFOT1RBVElPTiBjaGFyc2V0cw0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IENoYXJzZXRzLy9FTiIgPg0KLQ0KLTwhLS0gbWVkaWEgdHlwZSwgYXMgcGVyIFtSRkMyMDQ1XSAtLT4NCi08IU5PVEFUSU9OIGNvbnRlbnRUeXBlDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogQ29udGVudFR5cGUvL0VOIiA+DQotDQotPCEtLSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBtZWRpYSB0eXBlcywgYXMgcGVyIFtSRkMyMDQ1XSAtLT4NCi08IU5PVEFUSU9OIGNvbnRlbnRUeXBlcw0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IENvbnRlbnRUeXBlcy8vRU4iID4NCi0NCi08IS0tIGRhdGUgYW5kIHRpbWUgaW5mb3JtYXRpb24uIElTTyBkYXRlIGZvcm1hdCAtLT4NCi08IU5PVEFUSU9OIGRhdGV0aW1lDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogRGF0ZXRpbWUvL0VOIiA+DQotDQotPCEtLSBhIGxhbmd1YWdlIGNvZGUsIGFzIHBlciBbUkZDMzA2Nl0gLS0+DQotPCFOT1RBVElPTiBsYW5ndWFnZUNvZGUNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBMYW5ndWFnZUNvZGUvL0VOIiA+DQotDQotPCEtLSBhIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgc2VlIFtVUkldIC0tPg0KLTwhTk9UQVRJT04gdXJpDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogVVJJLy9FTiIgPg0KLQ0KLTwhLS0gYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXJzLCBzZWUgW1VSSV0gLS0+DQotPCFOT1RBVElPTiB1cmlzDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogVVJJcy8vRU4iID4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1ub3RhdGlvbnMtMS5tb2QgLS0+DQotXV0+DQotDQotPCFFTlRJVFkgJSB4aHRtbC1kYXRhdHlwZXMubW9kdWxlICJJTkNMVURFIiA+DQotPCFbJXhodG1sLWRhdGF0eXBlcy5tb2R1bGU7Ww0KLTwhRU5USVRZICUgeGh0bWwtZGF0YXR5cGVzLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIERhdGF0eXBlcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJ4aHRtbC1kYXRhdHlwZXMtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBEYXRhdHlwZXMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtZGF0YXR5cGVzLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBEYXRhdHlwZXMgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtZGF0YXR5cGVzLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIERhdGF0eXBlcw0KLQ0KLSAgICAgZGVmaW5lcyBjb250YWluZXJzIGZvciB0aGUgZm9sbG93aW5nIGRhdGF0eXBlcywgbWFueSBvZg0KLSAgICAgdGhlc2UgaW1wb3J0ZWQgZnJvbSBvdGhlciBzcGVjaWZpY2F0aW9ucyBhbmQgc3RhbmRhcmRzLg0KLS0tPg0KLQ0KLTwhLS0gTGVuZ3RoIGRlZmluZWQgZm9yIGNlbGxwYWRkaW5nL2NlbGxzcGFjaW5nIC0tPg0KLQ0KLTwhLS0gbm4gZm9yIHBpeGVscyBvciBubiUgZm9yIHBlcmNlbnRhZ2UgbGVuZ3RoIC0tPg0KLTwhRU5USVRZICUgTGVuZ3RoLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgbGluayB0eXBlcyAtLT4NCi08IUVOVElUWSAlIExpbmtUeXBlcy5kYXRhdHlwZSAiTk1UT0tFTlMiID4NCi0NCi08IS0tIHNpbmdsZSBvciBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBtZWRpYSBkZXNjcmlwdG9ycyAtLT4NCi08IUVOVElUWSAlIE1lZGlhRGVzYy5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIHBpeGVsLCBwZXJjZW50YWdlLCBvciByZWxhdGl2ZSAtLT4NCi08IUVOVElUWSAlIE11bHRpTGVuZ3RoLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gb25lIG9yIG1vcmUgZGlnaXRzIChOVU1CRVIpIC0tPg0KLTwhRU5USVRZICUgTnVtYmVyLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gaW50ZWdlciByZXByZXNlbnRpbmcgbGVuZ3RoIGluIHBpeGVscyAtLT4NCi08IUVOVElUWSAlIFBpeGVscy5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIHNjcmlwdCBleHByZXNzaW9uIC0tPg0KLTwhRU5USVRZICUgU2NyaXB0LmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gdGV4dHVhbCBjb250ZW50IC0tPg0KLTwhRU5USVRZICUgVGV4dC5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIEltcG9ydGVkIERhdGF0eXBlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIGEgc2luZ2xlIGNoYXJhY3RlciBmcm9tIFtJU08xMDY0Nl0gLS0+DQotPCFFTlRJVFkgJSBDaGFyYWN0ZXIuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBhIGNoYXJhY3RlciBlbmNvZGluZywgYXMgcGVyIFtSRkMyMDQ1XSAtLT4NCi08IUVOVElUWSAlIENoYXJzZXQuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNoYXJhY3RlciBlbmNvZGluZ3MsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotPCFFTlRJVFkgJSBDaGFyc2V0cy5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIENvbG9yIHNwZWNpZmljYXRpb24gdXNpbmcgY29sb3IgbmFtZSBvciBzUkdCICgjUlJHR0JCKSB2YWx1ZXMgLS0+DQotPCFFTlRJVFkgJSBDb2xvci5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIG1lZGlhIHR5cGUsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotPCFFTlRJVFkgJSBDb250ZW50VHlwZS5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG1lZGlhIHR5cGVzLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLTwhRU5USVRZICUgQ29udGVudFR5cGVzLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gZGF0ZSBhbmQgdGltZSBpbmZvcm1hdGlvbi4gSVNPIGRhdGUgZm9ybWF0IC0tPg0KLTwhRU5USVRZICUgRGF0ZXRpbWUuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBmb3JtYWwgcHVibGljIGlkZW50aWZpZXIsIGFzIHBlciBbSVNPODg3OV0gLS0+DQotPCFFTlRJVFkgJSBGUEkuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBhIGxhbmd1YWdlIGNvZGUsIGFzIHBlciBbUkZDMzA2Nl0gLS0+DQotPCFFTlRJVFkgJSBMYW5ndWFnZUNvZGUuZGF0YXR5cGUgIk5NVE9LRU4iID4NCi0NCi08IS0tIGEgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBzZWUgW1VSSV0gLS0+DQotPCFFTlRJVFkgJSBVUkkuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllcnMsIHNlZSBbVVJJXSAtLT4NCi08IUVOVElUWSAlIFVSSXMuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtZGF0YXR5cGVzLTEubW9kIC0tPg0KLV1dPg0KLQ0KLTwhLS0gcGxhY2Vob2xkZXIgZm9yIFhMaW5rIHN1cHBvcnQgbW9kdWxlIC0tPg0KLTwhRU5USVRZICUgeGh0bWwteGxpbmsubW9kICIiID4NCi0NCi0NCi08IUVOVElUWSAlIHhodG1sLXFuYW1lLm1vZHVsZSAiSU5DTFVERSIgPg0KLTwhWyV4aHRtbC1xbmFtZS5tb2R1bGU7Ww0KLTwhRU5USVRZICUgeGh0bWwtcW5hbWUubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgUXVhbGlmaWVkIE5hbWVzIDEuMC8vRU4iDQotICAgICAgICAgICAgInhodG1sLXFuYW1lLTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIFFuYW1lIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtcW5hbWUtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIFF1YWxpZmllZCBOYW1lcyAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1xbmFtZS0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0jMjAwMC0xMC0yMjogYWRkZWQgcW5hbWUgZGVjbGFyYXRpb25zIGZvciBydWJ5IGVsZW1lbnRzDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIFhIVE1MIFFuYW1lIChRdWFsaWZpZWQgTmFtZSkgTW9kdWxlDQotDQotICAgICBUaGlzIG1vZHVsZSBpcyBjb250YWluZWQgaW4gdHdvIHBhcnRzLCBsYWJlbGVkIFNlY3Rpb24gJ0EnIGFuZCAnQic6DQotDQotICAgICAgIFNlY3Rpb24gQSBkZWNsYXJlcyBwYXJhbWV0ZXIgZW50aXRpZXMgdG8gc3VwcG9ydCBuYW1lc3BhY2UtDQotICAgICAgIHF1YWxpZmllZCBuYW1lcywgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucywgYW5kIG5hbWUgcHJlZml4aW5nDQotICAgICAgIGZvciBYSFRNTCBhbmQgZXh0ZW5zaW9ucy4NCi0NCi0gICAgICAgU2VjdGlvbiBCIGRlY2xhcmVzIHBhcmFtZXRlciBlbnRpdGllcyB1c2VkIHRvIHByb3ZpZGUNCi0gICAgICAgbmFtZXNwYWNlLXF1YWxpZmllZCBuYW1lcyBmb3IgYWxsIFhIVE1MIGVsZW1lbnQgdHlwZXM6DQotDQotICAgICAgICAgJWFwcGxldC5xbmFtZTsgICB0aGUgeG1sbnMtcXVhbGlmaWVkIG5hbWUgZm9yIDxhcHBsZXQ+DQotICAgICAgICAgJWJhc2UucW5hbWU7ICAgICB0aGUgeG1sbnMtcXVhbGlmaWVkIG5hbWUgZm9yIDxiYXNlPg0KLSAgICAgICAgIC4uLg0KLQ0KLSAgICAgWEhUTUwgZXh0ZW5zaW9ucyB3b3VsZCBjcmVhdGUgYSBtb2R1bGUgc2ltaWxhciB0byB0aGlzIG9uZS4NCi0gICAgIEluY2x1ZGVkIGluIHRoZSBYSFRNTCBkaXN0cmlidXRpb24gaXMgYSB0ZW1wbGF0ZSBtb2R1bGUNCi0gICAgICgndGVtcGxhdGUtcW5hbWUtMS5tb2QnKSBzdWl0YWJsZSBmb3IgdGhpcyBwdXJwb3NlLg0KLS0tPg0KLQ0KLTwhLS0gU2VjdGlvbiBBOiBYSFRNTCBYTUwgTmFtZXNwYWNlIEZyYW1ld29yayA6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OiAtLT4NCi0NCi08IS0tIDEuIERlY2xhcmUgYSAlWEhUTUwucHJlZml4ZWQ7IGNvbmRpdGlvbmFsIHNlY3Rpb24ga2V5d29yZCwgdXNlZA0KLSAgICAgICAgdG8gYWN0aXZhdGUgbmFtZXNwYWNlIHByZWZpeGluZy4gVGhlIGRlZmF1bHQgdmFsdWUgc2hvdWxkDQotICAgICAgICBpbmhlcml0ICclTlMucHJlZml4ZWQ7JyBmcm9tIHRoZSBEVEQgZHJpdmVyLCBzbyB0aGF0IHVubGVzcw0KLSAgICAgICAgb3ZlcnJpZGRlbiwgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIGZvbGxvd3MgdGhlIG92ZXJhbGwgRFREDQotICAgICAgICBwcmVmaXhpbmcgc2NoZW1lLg0KLS0tPg0KLTwhRU5USVRZICUgTlMucHJlZml4ZWQgIklHTk9SRSIgPg0KLTwhRU5USVRZICUgWEhUTUwucHJlZml4ZWQgIiVOUy5wcmVmaXhlZDsiID4NCi0NCi08IS0tIDIuIERlY2xhcmUgYSBwYXJhbWV0ZXIgZW50aXR5IChlZy4sICVYSFRNTC54bWxuczspIGNvbnRhaW5pbmcNCi0gICAgICAgIHRoZSBVUkkgcmVmZXJlbmNlIHVzZWQgdG8gaWRlbnRpZnkgdGhlIFhIVE1MIG5hbWVzcGFjZToNCi0tLT4NCi08IUVOVElUWSAlIFhIVE1MLnhtbG5zICAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgPg0KLQ0KLTwhLS0gMy4gRGVjbGFyZSBwYXJhbWV0ZXIgZW50aXRpZXMgKGVnLiwgJVhIVE1MLnByZWZpeDspIGNvbnRhaW5pbmcNCi0gICAgICAgIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSBwcmVmaXggc3RyaW5nKHMpIHRvIHVzZSB3aGVuIHByZWZpeGluZw0KLSAgICAgICAgaXMgZW5hYmxlZC4gVGhpcyBtYXkgYmUgb3ZlcnJpZGRlbiBpbiB0aGUgRFREIGRyaXZlciBvciB0aGUNCi0gICAgICAgIGludGVybmFsIHN1YnNldCBvZiBhbiBkb2N1bWVudCBpbnN0YW5jZS4gSWYgbm8gZGVmYXVsdCBwcmVmaXgNCi0gICAgICAgIGlzIGRlc2lyZWQsIHRoaXMgbWF5IGJlIGRlY2xhcmVkIGFzIGFuIGVtcHR5IHN0cmluZy4NCi0NCi0gICAgIE5PVEU6IEFzIHNwZWNpZmllZCBpbiBbWE1MTkFNRVNdLCB0aGUgbmFtZXNwYWNlIHByZWZpeCBzZXJ2ZXMNCi0gICAgIGFzIGEgcHJveHkgZm9yIHRoZSBVUkkgcmVmZXJlbmNlLCBhbmQgaXMgbm90IGluIGl0c2VsZiBzaWduaWZpY2FudC4NCi0tLT4NCi08IUVOVElUWSAlIFhIVE1MLnByZWZpeCAgIiIgPg0KLQ0KLTwhLS0gNC4gRGVjbGFyZSBwYXJhbWV0ZXIgZW50aXRpZXMgKGVnLiwgJVhIVE1MLnBmeDspIGNvbnRhaW5pbmcgdGhlDQotICAgICAgICBjb2xvbml6ZWQgcHJlZml4KGVzKSAoZWcuLCAnJVhIVE1MLnByZWZpeDs6JykgdXNlZCB3aGVuDQotICAgICAgICBwcmVmaXhpbmcgaXMgYWN0aXZlLCBhbiBlbXB0eSBzdHJpbmcgd2hlbiBpdCBpcyBub3QuDQotLS0+DQotPCFbJVhIVE1MLnByZWZpeGVkO1sNCi08IUVOVElUWSAlIFhIVE1MLnBmeCAgIiVYSFRNTC5wcmVmaXg7OiIgPg0KLV1dPg0KLTwhRU5USVRZICUgWEhUTUwucGZ4ICAiIiA+DQotDQotPCEtLSBkZWNsYXJlIHF1YWxpZmllZCBuYW1lIGV4dGVuc2lvbnMgaGVyZSAuLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1xbmFtZS1leHRyYS5tb2QgIiIgPg0KLQ0KLQ0KLTwhLS0gNS4gVGhlIHBhcmFtZXRlciBlbnRpdHkgJVhIVE1MLnhtbG5zLmV4dHJhLmF0dHJpYjsgbWF5IGJlDQotICAgICAgICByZWRlY2xhcmVkIHRvIGNvbnRhaW4gYW55IG5vbi1YSFRNTCBuYW1lc3BhY2UgZGVjbGFyYXRpb24NCi0gICAgICAgIGF0dHJpYnV0ZXMgZm9yIG5hbWVzcGFjZXMgZW1iZWRkZWQgaW4gWEhUTUwuIFRoZSBkZWZhdWx0DQotICAgICAgICBpcyBhbiBlbXB0eSBzdHJpbmcuICBYTGluayBzaG91bGQgYmUgaW5jbHVkZWQgaGVyZSBpZiB1c2VkDQotICAgICAgICBpbiB0aGUgRFRELg0KLS0tPg0KLTwhRU5USVRZICUgWEhUTUwueG1sbnMuZXh0cmEuYXR0cmliICIiID4NCi0NCi08IS0tIFRoZSByZW1haW5kZXIgb2YgU2VjdGlvbiBBIGlzIG9ubHkgZm9sbG93ZWQgaW4gWEhUTUwsIG5vdCBleHRlbnNpb25zLiAtLT4NCi0NCi08IS0tIERlY2xhcmUgYSBwYXJhbWV0ZXIgZW50aXR5ICVOUy5kZWNsLmF0dHJpYjsgY29udGFpbmluZw0KLSAgICAgYWxsIFhNTCBOYW1lc3BhY2UgZGVjbGFyYXRpb25zIHVzZWQgaW4gdGhlIERURCwgcGx1cyB0aGUNCi0gICAgIHhtbG5zIGRlY2xhcmF0aW9uIGZvciBYSFRNTCwgaXRzIGZvcm0gZGVwZW5kZW50IG9uIHdoZXRoZXINCi0gICAgIHByZWZpeGluZyBpcyBhY3RpdmUuDQotLS0+DQotPCFbJVhIVE1MLnByZWZpeGVkO1sNCi08IUVOVElUWSAlIE5TLmRlY2wuYXR0cmliDQotICAgICAieG1sbnM6JVhIVE1MLnByZWZpeDsgICVVUkkuZGF0YXR5cGU7ICAgI0ZJWEVEICclWEhUTUwueG1sbnM7Jw0KLSAgICAgICVYSFRNTC54bWxucy5leHRyYS5hdHRyaWI7Ig0KLT4NCi1dXT4NCi08IUVOVElUWSAlIE5TLmRlY2wuYXR0cmliDQotICAgICAiJVhIVE1MLnhtbG5zLmV4dHJhLmF0dHJpYjsiDQotPg0KLQ0KLTwhLS0gVGhpcyBpcyBhIHBsYWNlaG9sZGVyIGZvciBmdXR1cmUgWExpbmsgc3VwcG9ydC4NCi0tLT4NCi08IUVOVElUWSAlIFhMSU5LLnhtbG5zLmF0dHJpYiAiIiA+DQotDQotPCEtLSBEZWNsYXJlIGEgcGFyYW1ldGVyIGVudGl0eSAlTlMuZGVjbC5hdHRyaWI7IGNvbnRhaW5pbmcgYWxsDQotICAgICBYTUwgbmFtZXNwYWNlIGRlY2xhcmF0aW9uIGF0dHJpYnV0ZXMgdXNlZCBieSBYSFRNTCwgaW5jbHVkaW5nDQotICAgICBhIGRlZmF1bHQgeG1sbnMgYXR0cmlidXRlIHdoZW4gcHJlZml4aW5nIGlzIGluYWN0aXZlLg0KLS0tPg0KLTwhWyVYSFRNTC5wcmVmaXhlZDtbDQotPCFFTlRJVFkgJSBYSFRNTC54bWxucy5hdHRyaWINCi0gICAgICIlTlMuZGVjbC5hdHRyaWI7DQotICAgICAgJVhMSU5LLnhtbG5zLmF0dHJpYjsiDQotPg0KLV1dPg0KLTwhRU5USVRZICUgWEhUTUwueG1sbnMuYXR0cmliDQotICAgICAieG1sbnMgICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjRklYRUQgJyVYSFRNTC54bWxuczsnDQotICAgICAgJVhMSU5LLnhtbG5zLmF0dHJpYjsiDQotPg0KLQ0KLTwhLS0gcGxhY2Vob2xkZXIgZm9yIHF1YWxpZmllZCBuYW1lIHJlZGVjbGFyYXRpb25zIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtcW5hbWUucmVkZWNsICIiID4NCi0NCi0NCi08IS0tIFNlY3Rpb24gQjogWEhUTUwgUXVhbGlmaWVkIE5hbWVzIDo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6IC0tPg0KLQ0KLTwhLS0gNi4gVGhpcyBzZWN0aW9uIGRlY2xhcmVzIHBhcmFtZXRlciBlbnRpdGllcyB1c2VkIHRvIHByb3ZpZGUNCi0gICAgICAgIG5hbWVzcGFjZS1xdWFsaWZpZWQgbmFtZXMgZm9yIGFsbCBYSFRNTCBlbGVtZW50IHR5cGVzLg0KLS0tPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtYXBwbGV0LTEubW9kIC0tPg0KLTwhRU5USVRZICUgYXBwbGV0LnFuYW1lICAiJVhIVE1MLnBmeDthcHBsZXQiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWJhc2UtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBiYXNlLnFuYW1lICAgICIlWEhUTUwucGZ4O2Jhc2UiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWJkby0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGJkby5xbmFtZSAgICAgIiVYSFRNTC5wZng7YmRvIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1ibGtwaHJhcy0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGFkZHJlc3MucW5hbWUgIiVYSFRNTC5wZng7YWRkcmVzcyIgPg0KLTwhRU5USVRZICUgYmxvY2txdW90ZS5xbmFtZSAgIiVYSFRNTC5wZng7YmxvY2txdW90ZSIgPg0KLTwhRU5USVRZICUgcHJlLnFuYW1lICAgICAiJVhIVE1MLnBmeDtwcmUiID4NCi08IUVOVElUWSAlIGgxLnFuYW1lICAgICAgIiVYSFRNTC5wZng7aDEiID4NCi08IUVOVElUWSAlIGgyLnFuYW1lICAgICAgIiVYSFRNTC5wZng7aDIiID4NCi08IUVOVElUWSAlIGgzLnFuYW1lICAgICAgIiVYSFRNTC5wZng7aDMiID4NCi08IUVOVElUWSAlIGg0LnFuYW1lICAgICAgIiVYSFRNTC5wZng7aDQiID4NCi08IUVOVElUWSAlIGg1LnFuYW1lICAgICAgIiVYSFRNTC5wZng7aDUiID4NCi08IUVOVElUWSAlIGg2LnFuYW1lICAgICAgIiVYSFRNTC5wZng7aDYiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWJsa3ByZXMtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBoci5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2hyIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1ibGtzdHJ1Y3QtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBkaXYucW5hbWUgICAgICIlWEhUTUwucGZ4O2RpdiIgPg0KLTwhRU5USVRZICUgcC5xbmFtZSAgICAgICAiJVhIVE1MLnBmeDtwIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1lZGl0LTEubW9kIC0tPg0KLTwhRU5USVRZICUgaW5zLnFuYW1lICAgICAiJVhIVE1MLnBmeDtpbnMiID4NCi08IUVOVElUWSAlIGRlbC5xbmFtZSAgICAgIiVYSFRNTC5wZng7ZGVsIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1mb3JtLTEubW9kIC0tPg0KLTwhRU5USVRZICUgZm9ybS5xbmFtZSAgICAiJVhIVE1MLnBmeDtmb3JtIiA+DQotPCFFTlRJVFkgJSBsYWJlbC5xbmFtZSAgICIlWEhUTUwucGZ4O2xhYmVsIiA+DQotPCFFTlRJVFkgJSBpbnB1dC5xbmFtZSAgICIlWEhUTUwucGZ4O2lucHV0IiA+DQotPCFFTlRJVFkgJSBzZWxlY3QucW5hbWUgICIlWEhUTUwucGZ4O3NlbGVjdCIgPg0KLTwhRU5USVRZICUgb3B0Z3JvdXAucW5hbWUgICIlWEhUTUwucGZ4O29wdGdyb3VwIiA+DQotPCFFTlRJVFkgJSBvcHRpb24ucW5hbWUgICIlWEhUTUwucGZ4O29wdGlvbiIgPg0KLTwhRU5USVRZICUgdGV4dGFyZWEucW5hbWUgICIlWEhUTUwucGZ4O3RleHRhcmVhIiA+DQotPCFFTlRJVFkgJSBmaWVsZHNldC5xbmFtZSAgIiVYSFRNTC5wZng7ZmllbGRzZXQiID4NCi08IUVOVElUWSAlIGxlZ2VuZC5xbmFtZSAgIiVYSFRNTC5wZng7bGVnZW5kIiA+DQotPCFFTlRJVFkgJSBidXR0b24ucW5hbWUgICIlWEhUTUwucGZ4O2J1dHRvbiIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtaHlwZXJ0ZXh0LTEubW9kIC0tPg0KLTwhRU5USVRZICUgYS5xbmFtZSAgICAgICAiJVhIVE1MLnBmeDthIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1pbWFnZS0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGltZy5xbmFtZSAgICAgIiVYSFRNTC5wZng7aW1nIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1pbmxwaHJhcy0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGFiYnIucW5hbWUgICAgIiVYSFRNTC5wZng7YWJiciIgPg0KLTwhRU5USVRZICUgYWNyb255bS5xbmFtZSAiJVhIVE1MLnBmeDthY3JvbnltIiA+DQotPCFFTlRJVFkgJSBjaXRlLnFuYW1lICAgICIlWEhUTUwucGZ4O2NpdGUiID4NCi08IUVOVElUWSAlIGNvZGUucW5hbWUgICAgIiVYSFRNTC5wZng7Y29kZSIgPg0KLTwhRU5USVRZICUgZGZuLnFuYW1lICAgICAiJVhIVE1MLnBmeDtkZm4iID4NCi08IUVOVElUWSAlIGVtLnFuYW1lICAgICAgIiVYSFRNTC5wZng7ZW0iID4NCi08IUVOVElUWSAlIGtiZC5xbmFtZSAgICAgIiVYSFRNTC5wZng7a2JkIiA+DQotPCFFTlRJVFkgJSBxLnFuYW1lICAgICAgICIlWEhUTUwucGZ4O3EiID4NCi08IUVOVElUWSAlIHNhbXAucW5hbWUgICAgIiVYSFRNTC5wZng7c2FtcCIgPg0KLTwhRU5USVRZICUgc3Ryb25nLnFuYW1lICAiJVhIVE1MLnBmeDtzdHJvbmciID4NCi08IUVOVElUWSAlIHZhci5xbmFtZSAgICAgIiVYSFRNTC5wZng7dmFyIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1pbmxwcmVzLTEubW9kIC0tPg0KLTwhRU5USVRZICUgYi5xbmFtZSAgICAgICAiJVhIVE1MLnBmeDtiIiA+DQotPCFFTlRJVFkgJSBiaWcucW5hbWUgICAgICIlWEhUTUwucGZ4O2JpZyIgPg0KLTwhRU5USVRZICUgaS5xbmFtZSAgICAgICAiJVhIVE1MLnBmeDtpIiA+DQotPCFFTlRJVFkgJSBzbWFsbC5xbmFtZSAgICIlWEhUTUwucGZ4O3NtYWxsIiA+DQotPCFFTlRJVFkgJSBzdWIucW5hbWUgICAgICIlWEhUTUwucGZ4O3N1YiIgPg0KLTwhRU5USVRZICUgc3VwLnFuYW1lICAgICAiJVhIVE1MLnBmeDtzdXAiID4NCi08IUVOVElUWSAlIHR0LnFuYW1lICAgICAgIiVYSFRNTC5wZng7dHQiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWlubHN0cnVjdC0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGJyLnFuYW1lICAgICAgIiVYSFRNTC5wZng7YnIiID4NCi08IUVOVElUWSAlIHNwYW4ucW5hbWUgICAgIiVYSFRNTC5wZng7c3BhbiIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtaXNtYXAtMS5tb2QgKGFsc28gY3Npc21hcCwgc3Npc21hcCkgLS0+DQotPCFFTlRJVFkgJSBtYXAucW5hbWUgICAgICIlWEhUTUwucGZ4O21hcCIgPg0KLTwhRU5USVRZICUgYXJlYS5xbmFtZSAgICAiJVhIVE1MLnBmeDthcmVhIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1saW5rLTEubW9kIC0tPg0KLTwhRU5USVRZICUgbGluay5xbmFtZSAgICAiJVhIVE1MLnBmeDtsaW5rIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1saXN0LTEubW9kIC0tPg0KLTwhRU5USVRZICUgZGwucW5hbWUgICAgICAiJVhIVE1MLnBmeDtkbCIgPg0KLTwhRU5USVRZICUgZHQucW5hbWUgICAgICAiJVhIVE1MLnBmeDtkdCIgPg0KLTwhRU5USVRZICUgZGQucW5hbWUgICAgICAiJVhIVE1MLnBmeDtkZCIgPg0KLTwhRU5USVRZICUgb2wucW5hbWUgICAgICAiJVhIVE1MLnBmeDtvbCIgPg0KLTwhRU5USVRZICUgdWwucW5hbWUgICAgICAiJVhIVE1MLnBmeDt1bCIgPg0KLTwhRU5USVRZICUgbGkucW5hbWUgICAgICAiJVhIVE1MLnBmeDtsaSIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtbWV0YS0xLm1vZCAtLT4NCi08IUVOVElUWSAlIG1ldGEucW5hbWUgICAgIiVYSFRNTC5wZng7bWV0YSIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtcGFyYW0tMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBwYXJhbS5xbmFtZSAgICIlWEhUTUwucGZ4O3BhcmFtIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1vYmplY3QtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBvYmplY3QucW5hbWUgICIlWEhUTUwucGZ4O29iamVjdCIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtc2NyaXB0LTEubW9kIC0tPg0KLTwhRU5USVRZICUgc2NyaXB0LnFuYW1lICAiJVhIVE1MLnBmeDtzY3JpcHQiID4NCi08IUVOVElUWSAlIG5vc2NyaXB0LnFuYW1lICAiJVhIVE1MLnBmeDtub3NjcmlwdCIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtc3RydWN0LTEubW9kIC0tPg0KLTwhRU5USVRZICUgaHRtbC5xbmFtZSAgICAiJVhIVE1MLnBmeDtodG1sIiA+DQotPCFFTlRJVFkgJSBoZWFkLnFuYW1lICAgICIlWEhUTUwucGZ4O2hlYWQiID4NCi08IUVOVElUWSAlIHRpdGxlLnFuYW1lICAgIiVYSFRNTC5wZng7dGl0bGUiID4NCi08IUVOVElUWSAlIGJvZHkucW5hbWUgICAgIiVYSFRNTC5wZng7Ym9keSIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtc3R5bGUtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBzdHlsZS5xbmFtZSAgICIlWEhUTUwucGZ4O3N0eWxlIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC10YWJsZS0xLm1vZCAtLT4NCi08IUVOVElUWSAlIHRhYmxlLnFuYW1lICAgIiVYSFRNTC5wZng7dGFibGUiID4NCi08IUVOVElUWSAlIGNhcHRpb24ucW5hbWUgIiVYSFRNTC5wZng7Y2FwdGlvbiIgPg0KLTwhRU5USVRZICUgdGhlYWQucW5hbWUgICAiJVhIVE1MLnBmeDt0aGVhZCIgPg0KLTwhRU5USVRZICUgdGZvb3QucW5hbWUgICAiJVhIVE1MLnBmeDt0Zm9vdCIgPg0KLTwhRU5USVRZICUgdGJvZHkucW5hbWUgICAiJVhIVE1MLnBmeDt0Ym9keSIgPg0KLTwhRU5USVRZICUgY29sZ3JvdXAucW5hbWUgICIlWEhUTUwucGZ4O2NvbGdyb3VwIiA+DQotPCFFTlRJVFkgJSBjb2wucW5hbWUgICAgICIlWEhUTUwucGZ4O2NvbCIgPg0KLTwhRU5USVRZICUgdHIucW5hbWUgICAgICAiJVhIVE1MLnBmeDt0ciIgPg0KLTwhRU5USVRZICUgdGgucW5hbWUgICAgICAiJVhIVE1MLnBmeDt0aCIgPg0KLTwhRU5USVRZICUgdGQucW5hbWUgICAgICAiJVhIVE1MLnBmeDt0ZCIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtcnVieS0xLm1vZCAtLT4NCi0NCi08IUVOVElUWSAlIHJ1YnkucW5hbWUgICAgIiVYSFRNTC5wZng7cnVieSIgPg0KLTwhRU5USVRZICUgcmJjLnFuYW1lICAgICAiJVhIVE1MLnBmeDtyYmMiID4NCi08IUVOVElUWSAlIHJ0Yy5xbmFtZSAgICAgIiVYSFRNTC5wZng7cnRjIiA+DQotPCFFTlRJVFkgJSByYi5xbmFtZSAgICAgICIlWEhUTUwucGZ4O3JiIiA+DQotPCFFTlRJVFkgJSBydC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O3J0IiA+DQotPCFFTlRJVFkgJSBycC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O3JwIiA+DQotDQotPCEtLSBQcm92aXNpb25hbCBYSFRNTCAyLjAgUXVhbGlmaWVkIE5hbWVzICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtaW1hZ2UtMi5tb2QgLS0+DQotPCFFTlRJVFkgJSBhbHQucW5hbWUgICAgICIlWEhUTUwucGZ4O2FsdCIgPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLXFuYW1lLTEubW9kIC0tPg0KLV1dPg0KLQ0KLTwhRU5USVRZICUgeGh0bWwtZXZlbnRzLm1vZHVsZSAiSUdOT1JFIiA+DQotPCFbJXhodG1sLWV2ZW50cy5tb2R1bGU7Ww0KLTwhRU5USVRZICUgeGh0bWwtZXZlbnRzLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIEludHJpbnNpYyBFdmVudHMgMS4wLy9FTiINCi0gICAgICAgICAgICAieGh0bWwtZXZlbnRzLTEubW9kIiA+DQotJXhodG1sLWV2ZW50cy5tb2Q7XV0+DQotDQotPCFFTlRJVFkgJSB4aHRtbC1hdHRyaWJzLm1vZHVsZSAiSU5DTFVERSIgPg0KLTwhWyV4aHRtbC1hdHRyaWJzLm1vZHVsZTtbDQotPCFFTlRJVFkgJSB4aHRtbC1hdHRyaWJzLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIENvbW1vbiBBdHRyaWJ1dGVzIDEuMC8vRU4iDQotICAgICAgICAgICAgInhodG1sLWF0dHJpYnMtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBDb21tb24gQXR0cmlidXRlcyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtYXR0cmlicy0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgQ29tbW9uIEF0dHJpYnV0ZXMgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYXR0cmlicy0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBDb21tb24gQXR0cmlidXRlcw0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgbWFueSBvZiB0aGUgY29tbW9uIGF0dHJpYnV0ZXMgZm9yIHRoZSBYSFRNTCBEVEQuDQotICAgICAlTlMuZGVjbC5hdHRyaWI7IGlzIGRlY2xhcmVkIGluIHRoZSBYSFRNTCBRbmFtZSBtb2R1bGUuDQotLS0+DQotDQotPCFFTlRJVFkgJSBpZC5hdHRyaWINCi0gICAgICJpZCAgICAgICAgICAgSUQgICAgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEIg0KLT4NCi0NCi08IUVOVElUWSAlIGNsYXNzLmF0dHJpYg0KLSAgICAgImNsYXNzICAgICAgICBOTVRPS0VOUyAgICAgICAgICAgICAgICAgI0lNUExJRUQiDQotPg0KLQ0KLTwhRU5USVRZICUgdGl0bGUuYXR0cmliDQotICAgICAidGl0bGUgICAgICAgICVUZXh0LmRhdGF0eXBlOyAgICAgICAgICAjSU1QTElFRCINCi0+DQotDQotPCFFTlRJVFkgJSBDb3JlLmV4dHJhLmF0dHJpYiAiIiA+DQotDQotPCFFTlRJVFkgJSBDb3JlLmF0dHJpYg0KLSAgICAgIiVYSFRNTC54bWxucy5hdHRyaWI7DQotICAgICAgJWlkLmF0dHJpYjsNCi0gICAgICAlY2xhc3MuYXR0cmliOw0KLSAgICAgICV0aXRsZS5hdHRyaWI7DQotICAgICAgJUNvcmUuZXh0cmEuYXR0cmliOyINCi0+DQotDQotPCFFTlRJVFkgJSBsYW5nLmF0dHJpYg0KLSAgICAgInhtbDpsYW5nICAgICAlTGFuZ3VhZ2VDb2RlLmRhdGF0eXBlOyAgI0lNUExJRUQiDQotPg0KLQ0KLTwhWyVYSFRNTC5iaWRpO1sNCi08IUVOVElUWSAlIGRpci5hdHRyaWINCi0gICAgICJkaXIgICAgICAgICAgKCBsdHIgfCBydGwgKSAgICAgICAgICAgICNJTVBMSUVEIg0KLT4NCi0NCi08IUVOVElUWSAlIEkxOG4uYXR0cmliDQotICAgICAiJWRpci5hdHRyaWI7DQotICAgICAgJWxhbmcuYXR0cmliOyINCi0+DQotDQotXV0+DQotPCFFTlRJVFkgJSBJMThuLmF0dHJpYg0KLSAgICAgIiVsYW5nLmF0dHJpYjsiDQotPg0KLQ0KLTwhRU5USVRZICUgQ29tbW9uLmV4dHJhLmF0dHJpYiAiIiA+DQotDQotPCEtLSBpbnRyaW5zaWMgZXZlbnQgYXR0cmlidXRlcyBkZWNsYXJlZCBwcmV2aW91c2x5DQotLS0+DQotPCFFTlRJVFkgJSBFdmVudHMuYXR0cmliICIiID4NCi0NCi08IUVOVElUWSAlIENvbW1vbi5hdHRyaWINCi0gICAgICIlQ29yZS5hdHRyaWI7DQotICAgICAgJUkxOG4uYXR0cmliOw0KLSAgICAgICVFdmVudHMuYXR0cmliOw0KLSAgICAgICVDb21tb24uZXh0cmEuYXR0cmliOyINCi0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtYXR0cmlicy0xLm1vZCAtLT4NCi1dXT4NCi0NCi08IS0tIHBsYWNlaG9sZGVyIGZvciBjb250ZW50IG1vZGVsIHJlZGVjbGFyYXRpb25zIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtbW9kZWwucmVkZWNsICIiID4NCi0NCi0NCi08IUVOVElUWSAlIHhodG1sLW1vZGVsLm1vZHVsZSAiSU5DTFVERSIgPg0KLTwhWyV4aHRtbC1tb2RlbC5tb2R1bGU7Ww0KLTwhLS0gaW5zdGFudGlhdGUgdGhlIERvY3VtZW50IE1vZGVsIG1vZHVsZSBkZWNsYXJlZCBpbiB0aGUgRFREIGRyaXZlcg0KLS0tPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBNb2JpbGUgMS4wIERvY3VtZW50IE1vZGVsIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtbW9iaWxlMTAtbW9kZWwtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwgTW9iaWxlLCBhIHByb3BlciBzdWJzZXQgb2YgWEhUTUwuDQotICAgICAJQFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtLCBMdGQuIDIwMDEuDQotDQotCVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gDQotCVdlYiBzaXRlIChodHRwOi8vd3d3LndhcGZvcnVtLm9yZy93aGF0L2NvcHlyaWdodC5odG0pLg0KLSAgICANCi0tLT4NCi08IS0tIFhIVE1MIE1vYmlsZSBEb2N1bWVudCBNb2RlbA0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVzY3JpYmVzIHRoZSBncm91cGluZ3Mgb2YgZWxlbWVudHMgdGhhdCBtYWtlIHVwDQotICAgICBjb21tb24gY29udGVudCBtb2RlbHMgZm9yIFhIVE1MIGVsZW1lbnRzLg0KLS0tPg0KLQ0KLTwhLS0gT3B0aW9uYWwgRWxlbWVudHMgaW4gaGVhZCAgLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBIZWFkT3B0cy5taXgNCi0gICAgICIoICVtZXRhLnFuYW1lOyB8ICVsaW5rLnFuYW1lOyB8ICVvYmplY3QucW5hbWU7IHwgJXN0eWxlLnFuYW1lOyApKiIgPg0KLQ0KLTwhLS0gTWlzY2VsbGFuZW91cyBFbGVtZW50cyAgLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBNaXNjLmNsYXNzICIiID4NCi0NCi08IS0tIElubGluZSBFbGVtZW50cyAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgSW5sU3RydWN0LmNsYXNzICIlYnIucW5hbWU7IHwgJXNwYW4ucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBJbmxQaHJhcy5jbGFzcw0KLSAgICAgInwgJWVtLnFuYW1lOyB8ICVzdHJvbmcucW5hbWU7IHwgJWRmbi5xbmFtZTsgfCAlY29kZS5xbmFtZTsNCi0gICAgICB8ICVzYW1wLnFuYW1lOyB8ICVrYmQucW5hbWU7IHwgJXZhci5xbmFtZTsgfCAlY2l0ZS5xbmFtZTsNCi0gICAgICB8ICVhYmJyLnFuYW1lOyB8ICVhY3JvbnltLnFuYW1lOyB8ICVxLnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgSW5sUHJlcy5jbGFzcw0KLSAgICAgInwgJWkucW5hbWU7IHwgJWIucW5hbWU7IHwgJWJpZy5xbmFtZTsgfCAlc21hbGwucW5hbWU7ICIgPg0KLQ0KLQ0KLTwhRU5USVRZICUgSTE4bi5jbGFzcyAiIiA+DQotDQotPCFFTlRJVFkgJSBBbmNob3IuY2xhc3MgInwgJWEucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBJbmxTcGVjaWFsLmNsYXNzICJ8ICVpbWcucW5hbWU7IHwgJW9iamVjdC5xbmFtZTsiID4NCi0NCi08IUVOVElUWSAlIElubEZvcm0uY2xhc3MNCi0gICAgICJ8ICVpbnB1dC5xbmFtZTsgfCAlc2VsZWN0LnFuYW1lOyB8ICV0ZXh0YXJlYS5xbmFtZTsNCi0gICAgICB8ICVsYWJlbC5xbmFtZTsiDQotPg0KLQ0KLTwhRU5USVRZICUgSW5saW5lLmV4dHJhICIiID4NCi0NCi08IUVOVElUWSAlIElubGluZS5jbGFzcw0KLSAgICAgIiVJbmxTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUlubFBocmFzLmNsYXNzOw0KLSAgICAgICVBbmNob3IuY2xhc3M7DQotICAgICAgJUlubFNwZWNpYWwuY2xhc3M7DQotICAgICAgJUlubEZvcm0uY2xhc3M7DQotICAgICAgJUlubGluZS5leHRyYTsiDQotPg0KLQ0KLTwhRU5USVRZICUgSW5sTm9BbmNob3IuY2xhc3MNCi0gICAgICIlSW5sU3RydWN0LmNsYXNzOw0KLSAgICAgICVJbmxQaHJhcy5jbGFzczsNCi0gICAgICAlSW5sU3BlY2lhbC5jbGFzczsNCi0gICAgICAlSW5sRm9ybS5jbGFzczsNCi0gICAgICAlSW5saW5lLmV4dHJhOyINCi0+DQotDQotPCFFTlRJVFkgJSBJbmxOb0FuY2hvci5taXgNCi0gICAgICIlSW5sTm9BbmNob3IuY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ig0KLT4NCi0NCi08IUVOVElUWSAlIElubGluZS5taXgNCi0gICAgICIlSW5saW5lLmNsYXNzOw0KLSAgICAgICVNaXNjLmNsYXNzOyINCi0+DQotDQotPCEtLSBCbG9jayBFbGVtZW50cyAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIEhlYWRpbmcuY2xhc3MNCi0gICAgICIlaDEucW5hbWU7IHwgJWgyLnFuYW1lOyB8ICVoMy5xbmFtZTsNCi0gICAgICB8ICVoNC5xbmFtZTsgfCAlaDUucW5hbWU7IHwgJWg2LnFuYW1lOyINCi0+DQotPCFFTlRJVFkgJSBMaXN0LmNsYXNzICAiJXVsLnFuYW1lOyB8ICVvbC5xbmFtZTsgfCAlZGwucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBUYWJsZS5jbGFzcyAifCAldGFibGUucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBGb3JtLmNsYXNzICAifCAlZm9ybS5xbmFtZTsiID4NCi0NCi08IUVOVElUWSAlIEZpZWxkc2V0LmNsYXNzICAifCAlZmllbGRzZXQucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBCbGtTdHJ1Y3QuY2xhc3MgIiVwLnFuYW1lOyB8ICVkaXYucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBCbGtQaHJhcy5jbGFzcw0KLSAgICAgInwgJXByZS5xbmFtZTsgfCAlYmxvY2txdW90ZS5xbmFtZTsgfCAlYWRkcmVzcy5xbmFtZTsiDQotPg0KLQ0KLTwhRU5USVRZICUgQmxrUHJlcy5jbGFzcyAifCAlaHIucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBCbGtTcGVjaWFsLmNsYXNzDQotICAgICAiJVRhYmxlLmNsYXNzOw0KLSAgICAgICVGb3JtLmNsYXNzOw0KLSAgICAgICVGaWVsZHNldC5jbGFzczsiDQotPg0KLQ0KLTwhRU5USVRZICUgQmxvY2suZXh0cmEgIiIgPg0KLQ0KLTwhRU5USVRZICUgQmxvY2suY2xhc3MNCi0gICAgICIlQmxrU3RydWN0LmNsYXNzOw0KLSAgICAgICVCbGtQaHJhcy5jbGFzczsNCi0gICAgICAlQmxrUHJlcy5jbGFzczsNCi0gICAgICAlQmxrU3BlY2lhbC5jbGFzczsNCi0gICAgICAlQmxvY2suZXh0cmE7Ig0KLT4NCi0NCi08IUVOVElUWSAlIEJsa05vRm9ybS5taXgNCi0gICAgICIlSGVhZGluZy5jbGFzczsNCi0gICAgICB8ICVMaXN0LmNsYXNzOw0KLSAgICAgIHwgJUJsa1N0cnVjdC5jbGFzczsNCi0gICAgICAlQmxrUGhyYXMuY2xhc3M7DQotICAgICAgJUJsa1ByZXMuY2xhc3M7DQotICAgICAgJVRhYmxlLmNsYXNzOw0KLSAgICAgICVCbG9jay5leHRyYTsNCi0gICAgICAlTWlzYy5jbGFzczsiDQotPg0KLQ0KLTwhRU5USVRZICUgQmxvY2subWl4DQotICAgICAiJUhlYWRpbmcuY2xhc3M7DQotICAgICAgfCAlTGlzdC5jbGFzczsNCi0gICAgICB8ICVCbG9jay5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiDQotPg0KLQ0KLTwhLS0gQWxsIENvbnRlbnQgRWxlbWVudHMgIC4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBkZWNsYXJlcyBhbGwgY29udGVudCBleGNlcHQgdGFibGVzDQotLS0+DQotPCFFTlRJVFkgJSBGbG93Tm9UYWJsZS5taXgNCi0gICAgICIlSGVhZGluZy5jbGFzczsNCi0gICAgICB8ICVMaXN0LmNsYXNzOw0KLSAgICAgIHwgJUJsa1N0cnVjdC5jbGFzczsNCi0gICAgICAlQmxrUGhyYXMuY2xhc3M7DQotICAgICAgJUZvcm0uY2xhc3M7DQotICAgICAgJUJsb2NrLmV4dHJhOw0KLSAgICAgIHwgJUlubGluZS5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiDQotPg0KLQ0KLQ0KLTwhRU5USVRZICUgRmxvdy5taXgNCi0gICAgICIlSGVhZGluZy5jbGFzczsNCi0gICAgICB8ICVMaXN0LmNsYXNzOw0KLSAgICAgIHwgJUJsb2NrLmNsYXNzOw0KLSAgICAgIHwgJUlubGluZS5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiDQotPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLW1vYmlsZTEwLW1vZGVsLTEubW9kIC0tPg0KLV1dPg0KLQ0KLTwhRU5USVRZICUgeGh0bWwtY2hhcmVudC5tb2R1bGUgIklOQ0xVREUiID4NCi08IVsleGh0bWwtY2hhcmVudC5tb2R1bGU7Ww0KLTwhRU5USVRZICUgeGh0bWwtY2hhcmVudC5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBDaGFyYWN0ZXIgRW50aXRpZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAieGh0bWwtY2hhcmVudC0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIENoYXJhY3RlciBFbnRpdGllcyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtY2hhcmVudC0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgQ2hhcmFjdGVyIEVudGl0aWVzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWNoYXJlbnQtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gQ2hhcmFjdGVyIEVudGl0aWVzIGZvciBYSFRNTA0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIHNldCBvZiBjaGFyYWN0ZXIgZW50aXRpZXMgZm9yIFhIVE1MLA0KLSAgICAgaW5jbHVkaW5nIHRoZSBMYXRpbiAxLCBTeW1ib2wgYW5kIFNwZWNpYWwgY2hhcmFjdGVyIGNvbGxlY3Rpb25zLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgeGh0bWwtbGF0MQ0KLSAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgTGF0aW4gMSBmb3IgWEhUTUwvL0VOIg0KLSAgICAgICAgICAgInhodG1sLWxhdDEuZW50IiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWE1MLWNvbXBhdGlibGUgSVNPIExhdGluIDEgQ2hhcmFjdGVyIEVudGl0eSBTZXQgZm9yIFhIVE1MIC4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWxhdDEuZW50DQotDQotICAgICBUeXBpY2FsIGludm9jYXRpb246DQotDQotICAgICAgIDwhRU5USVRZICUgeGh0bWwtbGF0MQ0KLSAgICAgICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIExhdGluIDEgZm9yIFhIVE1MLy9FTiINCi0gICAgICAgICAgICAgICAgICAieGh0bWwtbGF0MS5lbnQiID4NCi0gICAgICAgJXhodG1sLWxhdDE7DQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBMYXRpbiAxIGZvciBYSFRNTC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWxhdDEuZW50Ig0KLQ0KLSAgICAgUmV2aXNpb246ICAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgUG9ydGlvbnMgKEMpIEludGVybmF0aW9uYWwgT3JnYW5pemF0aW9uIGZvciBTdGFuZGFyZGl6YXRpb24gMTk4NjoNCi0gICAgIFBlcm1pc3Npb24gdG8gY29weSBpbiBhbnkgZm9ybSBpcyBncmFudGVkIGZvciB1c2Ugd2l0aCBjb25mb3JtaW5nDQotICAgICBTR01MIHN5c3RlbXMgYW5kIGFwcGxpY2F0aW9ucyBhcyBkZWZpbmVkIGluIElTTyA4ODc5LCBwcm92aWRlZA0KLSAgICAgdGhpcyBub3RpY2UgaXMgaW5jbHVkZWQgaW4gYWxsIGNvcGllcy4NCi0tLT4NCi0NCi08IUVOVElUWSBuYnNwICAgIiYjMTYwOyIgPjwhLS0gbm8tYnJlYWsgc3BhY2UgPSBub24tYnJlYWtpbmcgc3BhY2UsIFUrMDBBMCBJU09udW0gLS0+DQotPCFFTlRJVFkgaWV4Y2wgICImIzE2MTsiID48IS0tIGludmVydGVkIGV4Y2xhbWF0aW9uIG1hcmssIFUrMDBBMSBJU09udW0gLS0+DQotPCFFTlRJVFkgY2VudCAgICImIzE2MjsiID48IS0tIGNlbnQgc2lnbiwgVSswMEEyIElTT251bSAtLT4NCi08IUVOVElUWSBwb3VuZCAgIiYjMTYzOyIgPjwhLS0gcG91bmQgc2lnbiwgVSswMEEzIElTT251bSAtLT4NCi08IUVOVElUWSBjdXJyZW4gIiYjMTY0OyIgPjwhLS0gY3VycmVuY3kgc2lnbiwgVSswMEE0IElTT251bSAtLT4NCi08IUVOVElUWSB5ZW4gICAgIiYjMTY1OyIgPjwhLS0geWVuIHNpZ24gPSB5dWFuIHNpZ24sIFUrMDBBNSBJU09udW0gLS0+DQotPCFFTlRJVFkgYnJ2YmFyICImIzE2NjsiID48IS0tIGJyb2tlbiBiYXIgPSBicm9rZW4gdmVydGljYWwgYmFyLCBVKzAwQTYgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHNlY3QgICAiJiMxNjc7IiA+PCEtLSBzZWN0aW9uIHNpZ24sIFUrMDBBNyBJU09udW0gLS0+DQotPCFFTlRJVFkgdW1sICAgICImIzE2ODsiID48IS0tIGRpYWVyZXNpcyA9IHNwYWNpbmcgZGlhZXJlc2lzLCBVKzAwQTggSVNPZGlhIC0tPg0KLTwhRU5USVRZIGNvcHkgICAiJiMxNjk7IiA+PCEtLSBjb3B5cmlnaHQgc2lnbiwgVSswMEE5IElTT251bSAtLT4NCi08IUVOVElUWSBvcmRmICAgIiYjMTcwOyIgPjwhLS0gZmVtaW5pbmUgb3JkaW5hbCBpbmRpY2F0b3IsIFUrMDBBQSBJU09udW0gLS0+DQotPCFFTlRJVFkgbGFxdW8gICImIzE3MTsiID48IS0tIGxlZnQtcG9pbnRpbmcgZG91YmxlIGFuZ2xlIHF1b3RhdGlvbiBtYXJrID0gbGVmdCBwb2ludGluZyBndWlsbGVtZXQsIFUrMDBBQiBJU09udW0gLS0+DQotPCFFTlRJVFkgbm90ICAgICImIzE3MjsiID48IS0tIG5vdCBzaWduLCBVKzAwQUMgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHNoeSAgICAiJiMxNzM7IiA+PCEtLSBzb2Z0IGh5cGhlbiA9IGRpc2NyZXRpb25hcnkgaHlwaGVuLCBVKzAwQUQgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHJlZyAgICAiJiMxNzQ7IiA+PCEtLSByZWdpc3RlcmVkIHNpZ24gPSByZWdpc3RlcmVkIHRyYWRlIG1hcmsgc2lnbiwgVSswMEFFIElTT251bSAtLT4NCi08IUVOVElUWSBtYWNyICAgIiYjMTc1OyIgPjwhLS0gbWFjcm9uID0gc3BhY2luZyBtYWNyb24gPSBvdmVybGluZSA9IEFQTCBvdmVyYmFyLCBVKzAwQUYgSVNPZGlhIC0tPg0KLTwhRU5USVRZIGRlZyAgICAiJiMxNzY7IiA+PCEtLSBkZWdyZWUgc2lnbiwgVSswMEIwIElTT251bSAtLT4NCi08IUVOVElUWSBwbHVzbW4gIiYjMTc3OyIgPjwhLS0gcGx1cy1taW51cyBzaWduID0gcGx1cy1vci1taW51cyBzaWduLCBVKzAwQjEgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHN1cDIgICAiJiMxNzg7IiA+PCEtLSBzdXBlcnNjcmlwdCB0d28gPSBzdXBlcnNjcmlwdCBkaWdpdCB0d28gPSBzcXVhcmVkLCBVKzAwQjIgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHN1cDMgICAiJiMxNzk7IiA+PCEtLSBzdXBlcnNjcmlwdCB0aHJlZSA9IHN1cGVyc2NyaXB0IGRpZ2l0IHRocmVlID0gY3ViZWQsIFUrMDBCMyBJU09udW0gLS0+DQotPCFFTlRJVFkgYWN1dGUgICImIzE4MDsiID48IS0tIGFjdXRlIGFjY2VudCA9IHNwYWNpbmcgYWN1dGUsIFUrMDBCNCBJU09kaWEgLS0+DQotPCFFTlRJVFkgbWljcm8gICImIzE4MTsiID48IS0tIG1pY3JvIHNpZ24sIFUrMDBCNSBJU09udW0gLS0+DQotPCFFTlRJVFkgcGFyYSAgICImIzE4MjsiID48IS0tIHBpbGNyb3cgc2lnbiA9IHBhcmFncmFwaCBzaWduLCBVKzAwQjYgSVNPbnVtIC0tPg0KLTwhRU5USVRZIG1pZGRvdCAiJiMxODM7IiA+PCEtLSBtaWRkbGUgZG90ID0gR2VvcmdpYW4gY29tbWEgPSBHcmVlayBtaWRkbGUgZG90LCBVKzAwQjcgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGNlZGlsICAiJiMxODQ7IiA+PCEtLSBjZWRpbGxhID0gc3BhY2luZyBjZWRpbGxhLCBVKzAwQjggSVNPZGlhIC0tPg0KLTwhRU5USVRZIHN1cDEgICAiJiMxODU7IiA+PCEtLSBzdXBlcnNjcmlwdCBvbmUgPSBzdXBlcnNjcmlwdCBkaWdpdCBvbmUsIFUrMDBCOSBJU09udW0gLS0+DQotPCFFTlRJVFkgb3JkbSAgICImIzE4NjsiID48IS0tIG1hc2N1bGluZSBvcmRpbmFsIGluZGljYXRvciwgVSswMEJBIElTT251bSAtLT4NCi08IUVOVElUWSByYXF1byAgIiYjMTg3OyIgPjwhLS0gcmlnaHQtcG9pbnRpbmcgZG91YmxlIGFuZ2xlIHF1b3RhdGlvbiBtYXJrID0gcmlnaHQgcG9pbnRpbmcgZ3VpbGxlbWV0LCBVKzAwQkIgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGZyYWMxNCAiJiMxODg7IiA+PCEtLSB2dWxnYXIgZnJhY3Rpb24gb25lIHF1YXJ0ZXIgPSBmcmFjdGlvbiBvbmUgcXVhcnRlciwgVSswMEJDIElTT251bSAtLT4NCi08IUVOVElUWSBmcmFjMTIgIiYjMTg5OyIgPjwhLS0gdnVsZ2FyIGZyYWN0aW9uIG9uZSBoYWxmID0gZnJhY3Rpb24gb25lIGhhbGYsIFUrMDBCRCBJU09udW0gLS0+DQotPCFFTlRJVFkgZnJhYzM0ICImIzE5MDsiID48IS0tIHZ1bGdhciBmcmFjdGlvbiB0aHJlZSBxdWFydGVycyA9IGZyYWN0aW9uIHRocmVlIHF1YXJ0ZXJzLCBVKzAwQkUgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGlxdWVzdCAiJiMxOTE7IiA+PCEtLSBpbnZlcnRlZCBxdWVzdGlvbiBtYXJrID0gdHVybmVkIHF1ZXN0aW9uIG1hcmssIFUrMDBCRiBJU09udW0gLS0+DQotPCFFTlRJVFkgQWdyYXZlICImIzE5MjsiID48IS0tIGxhdGluIGNhcGl0YWwgQSB3aXRoIGdyYXZlID0gbGF0aW4gY2FwaXRhbCBBIGdyYXZlLCBVKzAwQzAgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBBYWN1dGUgIiYjMTkzOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBBIHdpdGggYWN1dGUsIFUrMDBDMSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEFjaXJjICAiJiMxOTQ7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEEgd2l0aCBjaXJjdW1mbGV4LCBVKzAwQzIgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBBdGlsZGUgIiYjMTk1OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBBIHdpdGggdGlsZGUsIFUrMDBDMyBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEF1bWwgICAiJiMxOTY7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEEgd2l0aCBkaWFlcmVzaXMsIFUrMDBDNCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEFyaW5nICAiJiMxOTc7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEEgd2l0aCByaW5nIGFib3ZlID0gbGF0aW4gY2FwaXRhbCBBIHJpbmcsIFUrMDBDNSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEFFbGlnICAiJiMxOTg7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEFFID0gbGF0aW4gY2FwaXRhbCBsaWdhdHVyZSBBRSwgVSswMEM2IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgQ2NlZGlsICImIzE5OTsiID48IS0tIGxhdGluIGNhcGl0YWwgQyB3aXRoIGNlZGlsbGEsIFUrMDBDNyBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEVncmF2ZSAiJiMyMDA7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEUgd2l0aCBncmF2ZSwgVSswMEM4IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgRWFjdXRlICImIzIwMTsiID48IS0tIGxhdGluIGNhcGl0YWwgRSB3aXRoIGFjdXRlLCBVKzAwQzkgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBFY2lyYyAgIiYjMjAyOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBFIHdpdGggY2lyY3VtZmxleCwgVSswMENBIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgRXVtbCAgICImIzIwMzsiID48IS0tIGxhdGluIGNhcGl0YWwgRSB3aXRoIGRpYWVyZXNpcywgVSswMENCIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgSWdyYXZlICImIzIwNDsiID48IS0tIGxhdGluIGNhcGl0YWwgSSB3aXRoIGdyYXZlLCBVKzAwQ0MgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBJYWN1dGUgIiYjMjA1OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBJIHdpdGggYWN1dGUsIFUrMDBDRCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEljaXJjICAiJiMyMDY7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEkgd2l0aCBjaXJjdW1mbGV4LCBVKzAwQ0UgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBJdW1sICAgIiYjMjA3OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBJIHdpdGggZGlhZXJlc2lzLCBVKzAwQ0YgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBFVEggICAgIiYjMjA4OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBFVEgsIFUrMDBEMCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIE50aWxkZSAiJiMyMDk7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIE4gd2l0aCB0aWxkZSwgVSswMEQxIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgT2dyYXZlICImIzIxMDsiID48IS0tIGxhdGluIGNhcGl0YWwgTyB3aXRoIGdyYXZlLCBVKzAwRDIgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBPYWN1dGUgIiYjMjExOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBPIHdpdGggYWN1dGUsIFUrMDBEMyBJU09sYXQxIC0tPg0KLTwhRU5USVRZIE9jaXJjICAiJiMyMTI7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIE8gd2l0aCBjaXJjdW1mbGV4LCBVKzAwRDQgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBPdGlsZGUgIiYjMjEzOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBPIHdpdGggdGlsZGUsIFUrMDBENSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIE91bWwgICAiJiMyMTQ7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIE8gd2l0aCBkaWFlcmVzaXMsIFUrMDBENiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIHRpbWVzICAiJiMyMTU7IiA+PCEtLSBtdWx0aXBsaWNhdGlvbiBzaWduLCBVKzAwRDcgSVNPbnVtIC0tPg0KLTwhRU5USVRZIE9zbGFzaCAiJiMyMTY7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIE8gd2l0aCBzdHJva2UgPSBsYXRpbiBjYXBpdGFsIE8gc2xhc2gsIFUrMDBEOCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIFVncmF2ZSAiJiMyMTc7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIFUgd2l0aCBncmF2ZSwgVSswMEQ5IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgVWFjdXRlICImIzIxODsiID48IS0tIGxhdGluIGNhcGl0YWwgVSB3aXRoIGFjdXRlLCBVKzAwREEgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBVY2lyYyAgIiYjMjE5OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBVIHdpdGggY2lyY3VtZmxleCwgVSswMERCIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgVXVtbCAgICImIzIyMDsiID48IS0tIGxhdGluIGNhcGl0YWwgVSB3aXRoIGRpYWVyZXNpcywgVSswMERDIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgWWFjdXRlICImIzIyMTsiID48IS0tIGxhdGluIGNhcGl0YWwgWSB3aXRoIGFjdXRlLCBVKzAwREQgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBUSE9STiAgIiYjMjIyOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBUSE9STiwgVSswMERFIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgc3psaWcgICImIzIyMzsiID48IS0tIGxhdGluIHNtYWxsIHNoYXJwIHMgPSBlc3MtemVkLCBVKzAwREYgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBhZ3JhdmUgIiYjMjI0OyIgPjwhLS0gbGF0aW4gc21hbGwgYSB3aXRoIGdyYXZlID0gbGF0aW4gc21hbGwgYSBncmF2ZSwgVSswMEUwIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgYWFjdXRlICImIzIyNTsiID48IS0tIGxhdGluIHNtYWxsIGEgd2l0aCBhY3V0ZSwgVSswMEUxIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgYWNpcmMgICImIzIyNjsiID48IS0tIGxhdGluIHNtYWxsIGEgd2l0aCBjaXJjdW1mbGV4LCBVKzAwRTIgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBhdGlsZGUgIiYjMjI3OyIgPjwhLS0gbGF0aW4gc21hbGwgYSB3aXRoIHRpbGRlLCBVKzAwRTMgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBhdW1sICAgIiYjMjI4OyIgPjwhLS0gbGF0aW4gc21hbGwgYSB3aXRoIGRpYWVyZXNpcywgVSswMEU0IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgYXJpbmcgICImIzIyOTsiID48IS0tIGxhdGluIHNtYWxsIGEgd2l0aCByaW5nIGFib3ZlID0gbGF0aW4gc21hbGwgYSByaW5nLCBVKzAwRTUgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBhZWxpZyAgIiYjMjMwOyIgPjwhLS0gbGF0aW4gc21hbGwgYWUgPSBsYXRpbiBzbWFsbCBsaWdhdHVyZSBhZSwgVSswMEU2IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgY2NlZGlsICImIzIzMTsiID48IS0tIGxhdGluIHNtYWxsIGMgd2l0aCBjZWRpbGxhLCBVKzAwRTcgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBlZ3JhdmUgIiYjMjMyOyIgPjwhLS0gbGF0aW4gc21hbGwgZSB3aXRoIGdyYXZlLCBVKzAwRTggSVNPbGF0MSAtLT4NCi08IUVOVElUWSBlYWN1dGUgIiYjMjMzOyIgPjwhLS0gbGF0aW4gc21hbGwgZSB3aXRoIGFjdXRlLCBVKzAwRTkgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBlY2lyYyAgIiYjMjM0OyIgPjwhLS0gbGF0aW4gc21hbGwgZSB3aXRoIGNpcmN1bWZsZXgsIFUrMDBFQSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGV1bWwgICAiJiMyMzU7IiA+PCEtLSBsYXRpbiBzbWFsbCBlIHdpdGggZGlhZXJlc2lzLCBVKzAwRUIgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBpZ3JhdmUgIiYjMjM2OyIgPjwhLS0gbGF0aW4gc21hbGwgaSB3aXRoIGdyYXZlLCBVKzAwRUMgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBpYWN1dGUgIiYjMjM3OyIgPjwhLS0gbGF0aW4gc21hbGwgaSB3aXRoIGFjdXRlLCBVKzAwRUQgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBpY2lyYyAgIiYjMjM4OyIgPjwhLS0gbGF0aW4gc21hbGwgaSB3aXRoIGNpcmN1bWZsZXgsIFUrMDBFRSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGl1bWwgICAiJiMyMzk7IiA+PCEtLSBsYXRpbiBzbWFsbCBpIHdpdGggZGlhZXJlc2lzLCBVKzAwRUYgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBldGggICAgIiYjMjQwOyIgPjwhLS0gbGF0aW4gc21hbGwgZXRoLCBVKzAwRjAgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBudGlsZGUgIiYjMjQxOyIgPjwhLS0gbGF0aW4gc21hbGwgbiB3aXRoIHRpbGRlLCBVKzAwRjEgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBvZ3JhdmUgIiYjMjQyOyIgPjwhLS0gbGF0aW4gc21hbGwgbyB3aXRoIGdyYXZlLCBVKzAwRjIgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBvYWN1dGUgIiYjMjQzOyIgPjwhLS0gbGF0aW4gc21hbGwgbyB3aXRoIGFjdXRlLCBVKzAwRjMgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBvY2lyYyAgIiYjMjQ0OyIgPjwhLS0gbGF0aW4gc21hbGwgbyB3aXRoIGNpcmN1bWZsZXgsIFUrMDBGNCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIG90aWxkZSAiJiMyNDU7IiA+PCEtLSBsYXRpbiBzbWFsbCBvIHdpdGggdGlsZGUsIFUrMDBGNSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIG91bWwgICAiJiMyNDY7IiA+PCEtLSBsYXRpbiBzbWFsbCBvIHdpdGggZGlhZXJlc2lzLCBVKzAwRjYgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBkaXZpZGUgIiYjMjQ3OyIgPjwhLS0gZGl2aXNpb24gc2lnbiwgVSswMEY3IElTT251bSAtLT4NCi08IUVOVElUWSBvc2xhc2ggIiYjMjQ4OyIgPjwhLS0gbGF0aW4gc21hbGwgbyB3aXRoIHN0cm9rZSwgPSBsYXRpbiBzbWFsbCBvIHNsYXNoLCBVKzAwRjggSVNPbGF0MSAtLT4NCi08IUVOVElUWSB1Z3JhdmUgIiYjMjQ5OyIgPjwhLS0gbGF0aW4gc21hbGwgdSB3aXRoIGdyYXZlLCBVKzAwRjkgSVNPbGF0MSAtLT4NCi08IUVOVElUWSB1YWN1dGUgIiYjMjUwOyIgPjwhLS0gbGF0aW4gc21hbGwgdSB3aXRoIGFjdXRlLCBVKzAwRkEgSVNPbGF0MSAtLT4NCi08IUVOVElUWSB1Y2lyYyAgIiYjMjUxOyIgPjwhLS0gbGF0aW4gc21hbGwgdSB3aXRoIGNpcmN1bWZsZXgsIFUrMDBGQiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIHV1bWwgICAiJiMyNTI7IiA+PCEtLSBsYXRpbiBzbWFsbCB1IHdpdGggZGlhZXJlc2lzLCBVKzAwRkMgSVNPbGF0MSAtLT4NCi08IUVOVElUWSB5YWN1dGUgIiYjMjUzOyIgPjwhLS0gbGF0aW4gc21hbGwgeSB3aXRoIGFjdXRlLCBVKzAwRkQgSVNPbGF0MSAtLT4NCi08IUVOVElUWSB0aG9ybiAgIiYjMjU0OyIgPjwhLS0gbGF0aW4gc21hbGwgdGhvcm4gd2l0aCwgVSswMEZFIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgeXVtbCAgICImIzI1NTsiID48IS0tIGxhdGluIHNtYWxsIHkgd2l0aCBkaWFlcmVzaXMsIFUrMDBGRiBJU09sYXQxIC0tPg0KLTwhLS0gZW5kIG9mIHhodG1sLWxhdDEuZW50IC0tPg0KLQ0KLQ0KLTwhRU5USVRZICUgeGh0bWwtc3ltYm9sDQotICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBTeW1ib2xzIGZvciBYSFRNTC8vRU4iDQotICAgICAgICAgICAieGh0bWwtc3ltYm9sLmVudCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIElTTyBNYXRoLCBHcmVlayBhbmQgU3ltYm9saWMgQ2hhcmFjdGVyIEVudGl0eSBTZXQgZm9yIFhIVE1MIC4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1zeW1ib2wuZW50DQotDQotICAgICBUeXBpY2FsIGludm9jYXRpb246DQotDQotICAgICAgIDwhRU5USVRZICUgeGh0bWwtc3ltYm9sDQotICAgICAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgU3ltYm9scyBmb3IgWEhUTUwvL0VOIg0KLSAgICAgICAgICAgICAgICAgICJ4aHRtbC1zeW1ib2wuZW50IiA+DQotICAgICAgICV4aHRtbC1zeW1ib2w7DQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBTeW1ib2xzIGZvciBYSFRNTC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXN5bWJvbC5lbnQiDQotDQotICAgICBSZXZpc2lvbjogICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBQb3J0aW9ucyAoQykgSW50ZXJuYXRpb25hbCBPcmdhbml6YXRpb24gZm9yIFN0YW5kYXJkaXphdGlvbiAxOTg2Og0KLSAgICAgUGVybWlzc2lvbiB0byBjb3B5IGluIGFueSBmb3JtIGlzIGdyYW50ZWQgZm9yIHVzZSB3aXRoIGNvbmZvcm1pbmcNCi0gICAgIFNHTUwgc3lzdGVtcyBhbmQgYXBwbGljYXRpb25zIGFzIGRlZmluZWQgaW4gSVNPIDg4NzksIHByb3ZpZGVkDQotICAgICB0aGlzIG5vdGljZSBpcyBpbmNsdWRlZCBpbiBhbGwgY29waWVzLg0KLS0tPg0KLQ0KLTwhLS0gUmVsZXZhbnQgSVNPIGVudGl0eSBzZXQgaXMgZ2l2ZW4gdW5sZXNzIG5hbWVzIGFyZSBuZXdseSBpbnRyb2R1Y2VkLg0KLSAgICAgTmV3IG5hbWVzIChpLmUuLCBub3QgaW4gSVNPIDg4NzkgW1NHTUxdIGxpc3QpIGRvIG5vdCBjbGFzaCB3aXRoDQotICAgICBhbnkgZXhpc3RpbmcgSVNPIDg4NzkgZW50aXR5IG5hbWVzLiBJU08gMTA2NDYgW0lTTzEwNjQ2XSBjaGFyYWN0ZXINCi0gICAgIG51bWJlcnMgYXJlIGdpdmVuIGZvciBlYWNoIGNoYXJhY3RlciwgaW4gaGV4LiBFbnRpdHkgdmFsdWVzIGFyZQ0KLSAgICAgZGVjaW1hbCBjb252ZXJzaW9ucyBvZiB0aGUgSVNPIDEwNjQ2IHZhbHVlcyBhbmQgcmVmZXIgdG8gdGhlDQotICAgICBkb2N1bWVudCBjaGFyYWN0ZXIgc2V0LiBOYW1lcyBhcmUgVW5pY29kZSBbVU5JQ09ERV0gbmFtZXMuDQotLS0+DQotDQotPCEtLSBMYXRpbiBFeHRlbmRlZC1CIC0tPg0KLTwhRU5USVRZIGZub2YgICAgICImIzQwMjsiID48IS0tIGxhdGluIHNtYWxsIGYgd2l0aCBob29rID0gZnVuY3Rpb24NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGZsb3JpbiwgVSswMTkyIElTT3RlY2ggLS0+DQotDQotPCEtLSBHcmVlayAtLT4NCi08IUVOVElUWSBBbHBoYSAgICAiJiM5MTM7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBhbHBoYSwgVSswMzkxIC0tPg0KLTwhRU5USVRZIEJldGEgICAgICImIzkxNDsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIGJldGEsIFUrMDM5MiAtLT4NCi08IUVOVElUWSBHYW1tYSAgICAiJiM5MTU7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBnYW1tYSwgVSswMzkzIElTT2dyazMgLS0+DQotPCFFTlRJVFkgRGVsdGEgICAgIiYjOTE2OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgZGVsdGEsIFUrMDM5NCBJU09ncmszIC0tPg0KLTwhRU5USVRZIEVwc2lsb24gICImIzkxNzsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIGVwc2lsb24sIFUrMDM5NSAtLT4NCi08IUVOVElUWSBaZXRhICAgICAiJiM5MTg7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciB6ZXRhLCBVKzAzOTYgLS0+DQotPCFFTlRJVFkgRXRhICAgICAgIiYjOTE5OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgZXRhLCBVKzAzOTcgLS0+DQotPCFFTlRJVFkgVGhldGEgICAgIiYjOTIwOyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgdGhldGEsIFUrMDM5OCBJU09ncmszIC0tPg0KLTwhRU5USVRZIElvdGEgICAgICImIzkyMTsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIGlvdGEsIFUrMDM5OSAtLT4NCi08IUVOVElUWSBLYXBwYSAgICAiJiM5MjI7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBrYXBwYSwgVSswMzlBIC0tPg0KLTwhRU5USVRZIExhbWJkYSAgICImIzkyMzsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIGxhbWJkYSwgVSswMzlCIElTT2dyazMgLS0+DQotPCFFTlRJVFkgTXUgICAgICAgIiYjOTI0OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgbXUsIFUrMDM5QyAtLT4NCi08IUVOVElUWSBOdSAgICAgICAiJiM5MjU7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBudSwgVSswMzlEIC0tPg0KLTwhRU5USVRZIFhpICAgICAgICImIzkyNjsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHhpLCBVKzAzOUUgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBPbWljcm9uICAiJiM5Mjc7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBvbWljcm9uLCBVKzAzOUYgLS0+DQotPCFFTlRJVFkgUGkgICAgICAgIiYjOTI4OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgcGksIFUrMDNBMCBJU09ncmszIC0tPg0KLTwhRU5USVRZIFJobyAgICAgICImIzkyOTsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHJobywgVSswM0ExIC0tPg0KLTwhLS0gdGhlcmUgaXMgbm8gU2lnbWFmLCBhbmQgbm8gVSswM0EyIGNoYXJhY3RlciBlaXRoZXIgLS0+DQotPCFFTlRJVFkgU2lnbWEgICAgIiYjOTMxOyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgc2lnbWEsIFUrMDNBMyBJU09ncmszIC0tPg0KLTwhRU5USVRZIFRhdSAgICAgICImIzkzMjsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHRhdSwgVSswM0E0IC0tPg0KLTwhRU5USVRZIFVwc2lsb24gICImIzkzMzsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHVwc2lsb24sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVSswM0E1IElTT2dyazMgLS0+DQotPCFFTlRJVFkgUGhpICAgICAgIiYjOTM0OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgcGhpLCBVKzAzQTYgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBDaGkgICAgICAiJiM5MzU7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBjaGksIFUrMDNBNyAtLT4NCi08IUVOVElUWSBQc2kgICAgICAiJiM5MzY7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBwc2ksIFUrMDNBOCBJU09ncmszIC0tPg0KLTwhRU5USVRZIE9tZWdhICAgICImIzkzNzsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIG9tZWdhLCBVKzAzQTkgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBhbHBoYSAgICAiJiM5NDU7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgYWxwaGEsIFUrMDNCMSBJU09ncmszIC0tPg0KLTwhRU5USVRZIGJldGEgICAgICImIzk0NjsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBiZXRhLCBVKzAzQjIgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBnYW1tYSAgICAiJiM5NDc7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgZ2FtbWEsIFUrMDNCMyBJU09ncmszIC0tPg0KLTwhRU5USVRZIGRlbHRhICAgICImIzk0ODsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBkZWx0YSwgVSswM0I0IElTT2dyazMgLS0+DQotPCFFTlRJVFkgZXBzaWxvbiAgIiYjOTQ5OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGVwc2lsb24sIFUrMDNCNSBJU09ncmszIC0tPg0KLTwhRU5USVRZIHpldGEgICAgICImIzk1MDsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciB6ZXRhLCBVKzAzQjYgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBldGEgICAgICAiJiM5NTE7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgZXRhLCBVKzAzQjcgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSB0aGV0YSAgICAiJiM5NTI7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgdGhldGEsIFUrMDNCOCBJU09ncmszIC0tPg0KLTwhRU5USVRZIGlvdGEgICAgICImIzk1MzsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBpb3RhLCBVKzAzQjkgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBrYXBwYSAgICAiJiM5NTQ7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIga2FwcGEsIFUrMDNCQSBJU09ncmszIC0tPg0KLTwhRU5USVRZIGxhbWJkYSAgICImIzk1NTsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBsYW1iZGEsIFUrMDNCQiBJU09ncmszIC0tPg0KLTwhRU5USVRZIG11ICAgICAgICImIzk1NjsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBtdSwgVSswM0JDIElTT2dyazMgLS0+DQotPCFFTlRJVFkgbnUgICAgICAgIiYjOTU3OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIG51LCBVKzAzQkQgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSB4aSAgICAgICAiJiM5NTg7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgeGksIFUrMDNCRSBJU09ncmszIC0tPg0KLTwhRU5USVRZIG9taWNyb24gICImIzk1OTsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBvbWljcm9uLCBVKzAzQkYgTkVXIC0tPg0KLTwhRU5USVRZIHBpICAgICAgICImIzk2MDsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBwaSwgVSswM0MwIElTT2dyazMgLS0+DQotPCFFTlRJVFkgcmhvICAgICAgIiYjOTYxOyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHJobywgVSswM0MxIElTT2dyazMgLS0+DQotPCFFTlRJVFkgc2lnbWFmICAgIiYjOTYyOyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGZpbmFsIHNpZ21hLCBVKzAzQzIgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBzaWdtYSAgICAiJiM5NjM7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgc2lnbWEsIFUrMDNDMyBJU09ncmszIC0tPg0KLTwhRU5USVRZIHRhdSAgICAgICImIzk2NDsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciB0YXUsIFUrMDNDNCBJU09ncmszIC0tPg0KLTwhRU5USVRZIHVwc2lsb24gICImIzk2NTsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciB1cHNpbG9uLCBVKzAzQzUgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBwaGkgICAgICAiJiM5NjY7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgcGhpLCBVKzAzQzYgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBjaGkgICAgICAiJiM5Njc7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgY2hpLCBVKzAzQzcgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBwc2kgICAgICAiJiM5Njg7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgcHNpLCBVKzAzQzggSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBvbWVnYSAgICAiJiM5Njk7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgb21lZ2EsIFUrMDNDOSBJU09ncmszIC0tPg0KLTwhRU5USVRZIHRoZXRhc3ltICImIzk3NzsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciB0aGV0YSBzeW1ib2wsIFUrMDNEMSBORVcgLS0+DQotPCFFTlRJVFkgdXBzaWggICAgIiYjOTc4OyIgPjwhLS0gZ3JlZWsgdXBzaWxvbiB3aXRoIGhvb2sgc3ltYm9sLCBVKzAzRDIgTkVXIC0tPg0KLTwhRU5USVRZIHBpdiAgICAgICImIzk4MjsiID48IS0tIGdyZWVrIHBpIHN5bWJvbCwgVSswM0Q2IElTT2dyazMgLS0+DQotDQotPCEtLSBHZW5lcmFsIFB1bmN0dWF0aW9uIC0tPg0KLTwhRU5USVRZIGJ1bGwgICAgICImIzgyMjY7IiA+PCEtLSBidWxsZXQgPSBibGFjayBzbWFsbCBjaXJjbGUsIFUrMjAyMiBJU09wdWIgIC0tPg0KLTwhLS0gYnVsbGV0IGlzIE5PVCB0aGUgc2FtZSBhcyBidWxsZXQgb3BlcmF0b3IsIFUrMjIxOSAtLT4NCi08IUVOVElUWSBoZWxsaXAgICAiJiM4MjMwOyIgPjwhLS0gaG9yaXpvbnRhbCBlbGxpcHNpcyA9IHRocmVlIGRvdCBsZWFkZXIsIFUrMjAyNiBJU09wdWIgIC0tPg0KLTwhRU5USVRZIHByaW1lICAgICImIzgyNDI7IiA+PCEtLSBwcmltZSA9IG1pbnV0ZXMgPSBmZWV0LCBVKzIwMzIgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBQcmltZSAgICAiJiM4MjQzOyIgPjwhLS0gZG91YmxlIHByaW1lID0gc2Vjb25kcyA9IGluY2hlcywgVSsyMDMzIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgb2xpbmUgICAgIiYjODI1NDsiID48IS0tIG92ZXJsaW5lID0gc3BhY2luZyBvdmVyc2NvcmUsIFUrMjAzRSBORVcgLS0+DQotPCFFTlRJVFkgZnJhc2wgICAgIiYjODI2MDsiID48IS0tIGZyYWN0aW9uIHNsYXNoLCBVKzIwNDQgTkVXIC0tPg0KLQ0KLTwhLS0gTGV0dGVybGlrZSBTeW1ib2xzIC0tPg0KLTwhRU5USVRZIHdlaWVycCAgICImIzg0NzI7IiA+PCEtLSBzY3JpcHQgY2FwaXRhbCBQID0gcG93ZXIgc2V0ID0gV2VpZXJzdHJhc3MgcCwgVSsyMTE4IElTT2Ftc28gLS0+DQotPCFFTlRJVFkgaW1hZ2UgICAgIiYjODQ2NTsiID48IS0tIGJsYWNrbGV0dGVyIGNhcGl0YWwgSSA9IGltYWdpbmFyeSBwYXJ0LCBVKzIxMTEgSVNPYW1zbyAtLT4NCi08IUVOVElUWSByZWFsICAgICAiJiM4NDc2OyIgPjwhLS0gYmxhY2tsZXR0ZXIgY2FwaXRhbCBSID0gcmVhbCBwYXJ0IHN5bWJvbCwgVSsyMTFDIElTT2Ftc28gLS0+DQotPCFFTlRJVFkgdHJhZGUgICAgIiYjODQ4MjsiID48IS0tIHRyYWRlIG1hcmsgc2lnbiwgVSsyMTIyIElTT251bSAtLT4NCi08IUVOVElUWSBhbGVmc3ltICAiJiM4NTAxOyIgPjwhLS0gYWxlZiBzeW1ib2wgPSBmaXJzdCB0cmFuc2Zpbml0ZSBjYXJkaW5hbCwgVSsyMTM1IE5FVyAtLT4NCi08IS0tIGFsZWYgc3ltYm9sIGlzIE5PVCB0aGUgc2FtZSBhcyBoZWJyZXcgbGV0dGVyIGFsZWYsIFUrMDVEMCBhbHRob3VnaA0KLSAgICAgdGhlIHNhbWUgZ2x5cGggY291bGQgYmUgdXNlZCB0byBkZXBpY3QgYm90aCBjaGFyYWN0ZXJzIC0tPg0KLQ0KLTwhLS0gQXJyb3dzIC0tPg0KLTwhRU5USVRZIGxhcnIgICAgICImIzg1OTI7IiA+PCEtLSBsZWZ0d2FyZHMgYXJyb3csIFUrMjE5MCBJU09udW0gLS0+DQotPCFFTlRJVFkgdWFyciAgICAgIiYjODU5MzsiID48IS0tIHVwd2FyZHMgYXJyb3csIFUrMjE5MSBJU09udW0tLT4NCi08IUVOVElUWSByYXJyICAgICAiJiM4NTk0OyIgPjwhLS0gcmlnaHR3YXJkcyBhcnJvdywgVSsyMTkyIElTT251bSAtLT4NCi08IUVOVElUWSBkYXJyICAgICAiJiM4NTk1OyIgPjwhLS0gZG93bndhcmRzIGFycm93LCBVKzIxOTMgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGhhcnIgICAgICImIzg1OTY7IiA+PCEtLSBsZWZ0IHJpZ2h0IGFycm93LCBVKzIxOTQgSVNPYW1zYSAtLT4NCi08IUVOVElUWSBjcmFyciAgICAiJiM4NjI5OyIgPjwhLS0gZG93bndhcmRzIGFycm93IHdpdGggY29ybmVyIGxlZnR3YXJkcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGNhcnJpYWdlIHJldHVybiwgVSsyMUI1IE5FVyAtLT4NCi08IUVOVElUWSBsQXJyICAgICAiJiM4NjU2OyIgPjwhLS0gbGVmdHdhcmRzIGRvdWJsZSBhcnJvdywgVSsyMUQwIElTT3RlY2ggLS0+DQotPCEtLSBVbmljb2RlIGRvZXMgbm90IHNheSB0aGF0IGxBcnIgaXMgdGhlIHNhbWUgYXMgdGhlICdpcyBpbXBsaWVkIGJ5JyBhcnJvdw0KLSAgICBidXQgYWxzbyBkb2VzIG5vdCBoYXZlIGFueSBvdGhlciBjaGFyYWN0ZXIgZm9yIHRoYXQgZnVuY3Rpb24uIFNvID8gbEFyciBjYW4NCi0gICAgYmUgdXNlZCBmb3IgJ2lzIGltcGxpZWQgYnknIGFzIElTT3RlY2ggc3VnZ2VzdHMgLS0+DQotPCFFTlRJVFkgdUFyciAgICAgIiYjODY1NzsiID48IS0tIHVwd2FyZHMgZG91YmxlIGFycm93LCBVKzIxRDEgSVNPYW1zYSAtLT4NCi08IUVOVElUWSByQXJyICAgICAiJiM4NjU4OyIgPjwhLS0gcmlnaHR3YXJkcyBkb3VibGUgYXJyb3csIFUrMjFEMiBJU090ZWNoIC0tPg0KLTwhLS0gVW5pY29kZSBkb2VzIG5vdCBzYXkgdGhpcyBpcyB0aGUgJ2ltcGxpZXMnIGNoYXJhY3RlciBidXQgZG9lcyBub3QgaGF2ZQ0KLSAgICAgYW5vdGhlciBjaGFyYWN0ZXIgd2l0aCB0aGlzIGZ1bmN0aW9uIHNvID8NCi0gICAgIHJBcnIgY2FuIGJlIHVzZWQgZm9yICdpbXBsaWVzJyBhcyBJU090ZWNoIHN1Z2dlc3RzIC0tPg0KLTwhRU5USVRZIGRBcnIgICAgICImIzg2NTk7IiA+PCEtLSBkb3dud2FyZHMgZG91YmxlIGFycm93LCBVKzIxRDMgSVNPYW1zYSAtLT4NCi08IUVOVElUWSBoQXJyICAgICAiJiM4NjYwOyIgPjwhLS0gbGVmdCByaWdodCBkb3VibGUgYXJyb3csIFUrMjFENCBJU09hbXNhIC0tPg0KLQ0KLTwhLS0gTWF0aGVtYXRpY2FsIE9wZXJhdG9ycyAtLT4NCi08IUVOVElUWSBmb3JhbGwgICAiJiM4NzA0OyIgPjwhLS0gZm9yIGFsbCwgVSsyMjAwIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgcGFydCAgICAgIiYjODcwNjsiID48IS0tIHBhcnRpYWwgZGlmZmVyZW50aWFsLCBVKzIyMDIgSVNPdGVjaCAgLS0+DQotPCFFTlRJVFkgZXhpc3QgICAgIiYjODcwNzsiID48IS0tIHRoZXJlIGV4aXN0cywgVSsyMjAzIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgZW1wdHkgICAgIiYjODcwOTsiID48IS0tIGVtcHR5IHNldCA9IG51bGwgc2V0ID0gZGlhbWV0ZXIsIFUrMjIwNSBJU09hbXNvIC0tPg0KLTwhRU5USVRZIG5hYmxhICAgICImIzg3MTE7IiA+PCEtLSBuYWJsYSA9IGJhY2t3YXJkIGRpZmZlcmVuY2UsIFUrMjIwNyBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGlzaW4gICAgICImIzg3MTI7IiA+PCEtLSBlbGVtZW50IG9mLCBVKzIyMDggSVNPdGVjaCAtLT4NCi08IUVOVElUWSBub3RpbiAgICAiJiM4NzEzOyIgPjwhLS0gbm90IGFuIGVsZW1lbnQgb2YsIFUrMjIwOSBJU090ZWNoIC0tPg0KLTwhRU5USVRZIG5pICAgICAgICImIzg3MTU7IiA+PCEtLSBjb250YWlucyBhcyBtZW1iZXIsIFUrMjIwQiBJU090ZWNoIC0tPg0KLTwhLS0gc2hvdWxkIHRoZXJlIGJlIGEgbW9yZSBtZW1vcmFibGUgbmFtZSB0aGFuICduaSc/IC0tPg0KLTwhRU5USVRZIHByb2QgICAgICImIzg3MTk7IiA+PCEtLSBuLWFyeSBwcm9kdWN0ID0gcHJvZHVjdCBzaWduLCBVKzIyMEYgSVNPYW1zYiAtLT4NCi08IS0tIHByb2QgaXMgTk9UIHRoZSBzYW1lIGNoYXJhY3RlciBhcyBVKzAzQTAgJ2dyZWVrIGNhcGl0YWwgbGV0dGVyIHBpJyB0aG91Z2gNCi0gICAgIHRoZSBzYW1lIGdseXBoIG1pZ2h0IGJlIHVzZWQgZm9yIGJvdGggLS0+DQotPCFFTlRJVFkgc3VtICAgICAgIiYjODcyMTsiID48IS0tIG4tYXJ5IHN1bWF0aW9uLCBVKzIyMTEgSVNPYW1zYiAtLT4NCi08IS0tIHN1bSBpcyBOT1QgdGhlIHNhbWUgY2hhcmFjdGVyIGFzIFUrMDNBMyAnZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgc2lnbWEnDQotICAgICB0aG91Z2ggdGhlIHNhbWUgZ2x5cGggbWlnaHQgYmUgdXNlZCBmb3IgYm90aCAtLT4NCi08IUVOVElUWSBtaW51cyAgICAiJiM4NzIyOyIgPjwhLS0gbWludXMgc2lnbiwgVSsyMjEyIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgbG93YXN0ICAgIiYjODcyNzsiID48IS0tIGFzdGVyaXNrIG9wZXJhdG9yLCBVKzIyMTcgSVNPdGVjaCAtLT4NCi08IUVOVElUWSByYWRpYyAgICAiJiM4NzMwOyIgPjwhLS0gc3F1YXJlIHJvb3QgPSByYWRpY2FsIHNpZ24sIFUrMjIxQSBJU090ZWNoIC0tPg0KLTwhRU5USVRZIHByb3AgICAgICImIzg3MzM7IiA+PCEtLSBwcm9wb3J0aW9uYWwgdG8sIFUrMjIxRCBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGluZmluICAgICImIzg3MzQ7IiA+PCEtLSBpbmZpbml0eSwgVSsyMjFFIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgYW5nICAgICAgIiYjODczNjsiID48IS0tIGFuZ2xlLCBVKzIyMjAgSVNPYW1zbyAtLT4NCi08IUVOVElUWSBhbmQgICAgICAiJiM4NzQzOyIgPjwhLS0gbG9naWNhbCBhbmQgPSB3ZWRnZSwgVSsyMjI3IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgb3IgICAgICAgIiYjODc0NDsiID48IS0tIGxvZ2ljYWwgb3IgPSB2ZWUsIFUrMjIyOCBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGNhcCAgICAgICImIzg3NDU7IiA+PCEtLSBpbnRlcnNlY3Rpb24gPSBjYXAsIFUrMjIyOSBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGN1cCAgICAgICImIzg3NDY7IiA+PCEtLSB1bmlvbiA9IGN1cCwgVSsyMjJBIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgaW50ICAgICAgIiYjODc0NzsiID48IS0tIGludGVncmFsLCBVKzIyMkIgSVNPdGVjaCAtLT4NCi08IUVOVElUWSB0aGVyZTQgICAiJiM4NzU2OyIgPjwhLS0gdGhlcmVmb3JlLCBVKzIyMzQgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBzaW0gICAgICAiJiM4NzY0OyIgPjwhLS0gdGlsZGUgb3BlcmF0b3IgPSB2YXJpZXMgd2l0aCA9IHNpbWlsYXIgdG8sIFUrMjIzQyBJU090ZWNoIC0tPg0KLTwhLS0gdGlsZGUgb3BlcmF0b3IgaXMgTk9UIHRoZSBzYW1lIGNoYXJhY3RlciBhcyB0aGUgdGlsZGUsIFUrMDA3RSwNCi0gICAgIGFsdGhvdWdoIHRoZSBzYW1lIGdseXBoIG1pZ2h0IGJlIHVzZWQgdG8gcmVwcmVzZW50IGJvdGggIC0tPg0KLTwhRU5USVRZIGNvbmcgICAgICImIzg3NzM7IiA+PCEtLSBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvLCBVKzIyNDUgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBhc3ltcCAgICAiJiM4Nzc2OyIgPjwhLS0gYWxtb3N0IGVxdWFsIHRvID0gYXN5bXB0b3RpYyB0bywgVSsyMjQ4IElTT2Ftc3IgLS0+DQotPCFFTlRJVFkgbmUgICAgICAgIiYjODgwMDsiID48IS0tIG5vdCBlcXVhbCB0bywgVSsyMjYwIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgZXF1aXYgICAgIiYjODgwMTsiID48IS0tIGlkZW50aWNhbCB0bywgVSsyMjYxIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgbGUgICAgICAgIiYjODgwNDsiID48IS0tIGxlc3MtdGhhbiBvciBlcXVhbCB0bywgVSsyMjY0IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgZ2UgICAgICAgIiYjODgwNTsiID48IS0tIGdyZWF0ZXItdGhhbiBvciBlcXVhbCB0bywgVSsyMjY1IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgc3ViICAgICAgIiYjODgzNDsiID48IS0tIHN1YnNldCBvZiwgVSsyMjgyIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgc3VwICAgICAgIiYjODgzNTsiID48IS0tIHN1cGVyc2V0IG9mLCBVKzIyODMgSVNPdGVjaCAtLT4NCi08IS0tIG5vdGUgdGhhdCBuc3VwLCAnbm90IGEgc3VwZXJzZXQgb2YsIFUrMjI4MycgaXMgbm90IGNvdmVyZWQgYnkgdGhlIFN5bWJvbA0KLSAgICAgZm9udCBlbmNvZGluZyBhbmQgaXMgbm90IGluY2x1ZGVkLiBTaG91bGQgaXQgYmUsIGZvciBzeW1tZXRyeT8NCi0gICAgIEl0IGlzIGluIElTT2Ftc24gIC0tPg0KLTwhRU5USVRZIG5zdWIgICAgICImIzg4MzY7IiA+PCEtLSBub3QgYSBzdWJzZXQgb2YsIFUrMjI4NCBJU09hbXNuIC0tPg0KLTwhRU5USVRZIHN1YmUgICAgICImIzg4Mzg7IiA+PCEtLSBzdWJzZXQgb2Ygb3IgZXF1YWwgdG8sIFUrMjI4NiBJU090ZWNoIC0tPg0KLTwhRU5USVRZIHN1cGUgICAgICImIzg4Mzk7IiA+PCEtLSBzdXBlcnNldCBvZiBvciBlcXVhbCB0bywgVSsyMjg3IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgb3BsdXMgICAgIiYjODg1MzsiID48IS0tIGNpcmNsZWQgcGx1cyA9IGRpcmVjdCBzdW0sIFUrMjI5NSBJU09hbXNiIC0tPg0KLTwhRU5USVRZIG90aW1lcyAgICImIzg4NTU7IiA+PCEtLSBjaXJjbGVkIHRpbWVzID0gdmVjdG9yIHByb2R1Y3QsIFUrMjI5NyBJU09hbXNiIC0tPg0KLTwhRU5USVRZIHBlcnAgICAgICImIzg4Njk7IiA+PCEtLSB1cCB0YWNrID0gb3J0aG9nb25hbCB0byA9IHBlcnBlbmRpY3VsYXIsIFUrMjJBNSBJU090ZWNoIC0tPg0KLTwhRU5USVRZIHNkb3QgICAgICImIzg5MDE7IiA+PCEtLSBkb3Qgb3BlcmF0b3IsIFUrMjJDNSBJU09hbXNiIC0tPg0KLTwhLS0gZG90IG9wZXJhdG9yIGlzIE5PVCB0aGUgc2FtZSBjaGFyYWN0ZXIgYXMgVSswMEI3IG1pZGRsZSBkb3QgLS0+DQotDQotPCEtLSBNaXNjZWxsYW5lb3VzIFRlY2huaWNhbCAtLT4NCi08IUVOVElUWSBsY2VpbCAgICAiJiM4OTY4OyIgPjwhLS0gbGVmdCBjZWlsaW5nID0gYXBsIHVwc3RpbGUsIFUrMjMwOCBJU09hbXNjICAtLT4NCi08IUVOVElUWSByY2VpbCAgICAiJiM4OTY5OyIgPjwhLS0gcmlnaHQgY2VpbGluZywgVSsyMzA5IElTT2Ftc2MgIC0tPg0KLTwhRU5USVRZIGxmbG9vciAgICImIzg5NzA7IiA+PCEtLSBsZWZ0IGZsb29yID0gYXBsIGRvd25zdGlsZSwgVSsyMzBBIElTT2Ftc2MgIC0tPg0KLTwhRU5USVRZIHJmbG9vciAgICImIzg5NzE7IiA+PCEtLSByaWdodCBmbG9vciwgVSsyMzBCIElTT2Ftc2MgIC0tPg0KLTwhRU5USVRZIGxhbmcgICAgICImIzkwMDE7IiA+PCEtLSBsZWZ0LXBvaW50aW5nIGFuZ2xlIGJyYWNrZXQgPSBicmEsIFUrMjMyOSBJU090ZWNoIC0tPg0KLTwhLS0gbGFuZyBpcyBOT1QgdGhlIHNhbWUgY2hhcmFjdGVyIGFzIFUrMDAzQyAnbGVzcyB0aGFuJw0KLSAgICAgb3IgVSsyMDM5ICdzaW5nbGUgbGVmdC1wb2ludGluZyBhbmdsZSBxdW90YXRpb24gbWFyaycgLS0+DQotPCFFTlRJVFkgcmFuZyAgICAgIiYjOTAwMjsiID48IS0tIHJpZ2h0LXBvaW50aW5nIGFuZ2xlIGJyYWNrZXQgPSBrZXQsIFUrMjMyQSBJU090ZWNoIC0tPg0KLTwhLS0gcmFuZyBpcyBOT1QgdGhlIHNhbWUgY2hhcmFjdGVyIGFzIFUrMDAzRSAnZ3JlYXRlciB0aGFuJw0KLSAgICAgb3IgVSsyMDNBICdzaW5nbGUgcmlnaHQtcG9pbnRpbmcgYW5nbGUgcXVvdGF0aW9uIG1hcmsnIC0tPg0KLQ0KLTwhLS0gR2VvbWV0cmljIFNoYXBlcyAtLT4NCi08IUVOVElUWSBsb3ogICAgICAiJiM5Njc0OyIgPjwhLS0gbG96ZW5nZSwgVSsyNUNBIElTT3B1YiAtLT4NCi0NCi08IS0tIE1pc2NlbGxhbmVvdXMgU3ltYm9scyAtLT4NCi08IUVOVElUWSBzcGFkZXMgICAiJiM5ODI0OyIgPjwhLS0gYmxhY2sgc3BhZGUgc3VpdCwgVSsyNjYwIElTT3B1YiAtLT4NCi08IS0tIGJsYWNrIGhlcmUgc2VlbXMgdG8gbWVhbiBmaWxsZWQgYXMgb3Bwb3NlZCB0byBob2xsb3cgLS0+DQotPCFFTlRJVFkgY2x1YnMgICAgIiYjOTgyNzsiID48IS0tIGJsYWNrIGNsdWIgc3VpdCA9IHNoYW1yb2NrLCBVKzI2NjMgSVNPcHViIC0tPg0KLTwhRU5USVRZIGhlYXJ0cyAgICImIzk4Mjk7IiA+PCEtLSBibGFjayBoZWFydCBzdWl0ID0gdmFsZW50aW5lLCBVKzI2NjUgSVNPcHViIC0tPg0KLTwhRU5USVRZIGRpYW1zICAgICImIzk4MzA7IiA+PCEtLSBibGFjayBkaWFtb25kIHN1aXQsIFUrMjY2NiBJU09wdWIgLS0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtc3ltYm9sLmVudCAtLT4NCi0NCi0NCi08IUVOVElUWSAlIHhodG1sLXNwZWNpYWwNCi0gICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFNwZWNpYWwgZm9yIFhIVE1MLy9FTiINCi0gICAgICAgICAgICJ4aHRtbC1zcGVjaWFsLmVudCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhNTC1jb21wYXRpYmxlIElTTyBTcGVjaWFsIENoYXJhY3RlciBFbnRpdHkgU2V0IGZvciBYSFRNTCAuLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1zcGVjaWFsLmVudA0KLQ0KLSAgICAgVHlwaWNhbCBpbnZvY2F0aW9uOg0KLQ0KLSAgICAgICA8IUVOVElUWSAlIHhodG1sLXNwZWNpYWwNCi0gICAgICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBTcGVjaWFsIGZvciBYSFRNTC8vRU4iDQotICAgICAgICAgICAgICAgICAgInhodG1sLXNwZWNpYWwuZW50IiA+DQotICAgICAgICV4aHRtbC1zcGVjaWFsOw0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgU3BlY2lhbCBmb3IgWEhUTUwvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1zcGVjaWFsLmVudCINCi0NCi0gICAgIFJldmlzaW9uOiAgJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFBvcnRpb25zIChDKSBJbnRlcm5hdGlvbmFsIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uIDE5ODY6DQotICAgICBQZXJtaXNzaW9uIHRvIGNvcHkgaW4gYW55IGZvcm0gaXMgZ3JhbnRlZCBmb3IgdXNlIHdpdGggY29uZm9ybWluZw0KLSAgICAgU0dNTCBzeXN0ZW1zIGFuZCBhcHBsaWNhdGlvbnMgYXMgZGVmaW5lZCBpbiBJU08gODg3OSwgcHJvdmlkZWQNCi0gICAgIHRoaXMgbm90aWNlIGlzIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMuDQotDQotICAgICBSZXZpc2lvbnM6DQotMjAwMC0xMC0yODogYWRkZWQgJmFwb3M7IGFuZCBhbHRlcmVkIFhNTCBQcmVkZWZpbmVkIEVudGl0aWVzIGZvciBjb21wYXRpYmlsaXR5DQotLS0+DQotDQotPCEtLSBSZWxldmFudCBJU08gZW50aXR5IHNldCBpcyBnaXZlbiB1bmxlc3MgbmFtZXMgYXJlIG5ld2x5IGludHJvZHVjZWQuDQotICAgICBOZXcgbmFtZXMgKGkuZS4sIG5vdCBpbiBJU08gODg3OSBbU0dNTF0gbGlzdCkgZG8gbm90IGNsYXNoIHdpdGgNCi0gICAgIGFueSBleGlzdGluZyBJU08gODg3OSBlbnRpdHkgbmFtZXMuIElTTyAxMDY0NiBbSVNPMTA2NDZdIGNoYXJhY3Rlcg0KLSAgICAgbnVtYmVycyBhcmUgZ2l2ZW4gZm9yIGVhY2ggY2hhcmFjdGVyLCBpbiBoZXguIEVudGl0eSB2YWx1ZXMgYXJlDQotICAgICBkZWNpbWFsIGNvbnZlcnNpb25zIG9mIHRoZSBJU08gMTA2NDYgdmFsdWVzIGFuZCByZWZlciB0byB0aGUNCi0gICAgIGRvY3VtZW50IGNoYXJhY3RlciBzZXQuIE5hbWVzIGFyZSBVbmljb2RlIFtVTklDT0RFXSBuYW1lcy4NCi0tLT4NCi0NCi08IS0tIEMwIENvbnRyb2xzIGFuZCBCYXNpYyBMYXRpbiAtLT4NCi08IUVOVElUWSBsdCAgICAgICImIzM4OyYjNjA7IiA+PCEtLSBsZXNzLXRoYW4gc2lnbiwgVSswMDNDIElTT251bSAtLT4NCi08IUVOVElUWSBndCAgICAgICImIzYyOyIgPjwhLS0gZ3JlYXRlci10aGFuIHNpZ24sIFUrMDAzRSBJU09udW0gLS0+DQotPCFFTlRJVFkgYW1wICAgICAiJiMzODsmIzM4OyIgPjwhLS0gYW1wZXJzYW5kLCBVKzAwMjYgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGFwb3MgICAgIiYjMzk7IiA+PCEtLSBhcG9zdHJvcGhlLCBVKzAwMjcgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHF1b3QgICAgIiYjMzQ7IiA+PCEtLSBxdW90YXRpb24gbWFyayA9IEFQTCBxdW90ZSwgVSswMDIyIElTT251bSAtLT4NCi0NCi08IS0tIExhdGluIEV4dGVuZGVkLUEgLS0+DQotPCFFTlRJVFkgT0VsaWcgICAiJiMzMzg7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIGxpZ2F0dXJlIE9FLCBVKzAxNTIgSVNPbGF0MiAtLT4NCi08IUVOVElUWSBvZWxpZyAgICImIzMzOTsiID48IS0tIGxhdGluIHNtYWxsIGxpZ2F0dXJlIG9lLCBVKzAxNTMgSVNPbGF0MiAtLT4NCi0NCi08IS0tIGxpZ2F0dXJlIGlzIGEgbWlzbm9tZXIsIHRoaXMgaXMgYSBzZXBhcmF0ZSBjaGFyYWN0ZXIgaW4gc29tZSBsYW5ndWFnZXMgLS0+DQotPCFFTlRJVFkgU2Nhcm9uICAiJiMzNTI7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIGxldHRlciBTIHdpdGggY2Fyb24sIFUrMDE2MCBJU09sYXQyIC0tPg0KLTwhRU5USVRZIHNjYXJvbiAgIiYjMzUzOyIgPjwhLS0gbGF0aW4gc21hbGwgbGV0dGVyIHMgd2l0aCBjYXJvbiwgVSswMTYxIElTT2xhdDIgLS0+DQotPCFFTlRJVFkgWXVtbCAgICAiJiMzNzY7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIGxldHRlciBZIHdpdGggZGlhZXJlc2lzLCBVKzAxNzggSVNPbGF0MiAtLT4NCi0NCi08IS0tIFNwYWNpbmcgTW9kaWZpZXIgTGV0dGVycyAtLT4NCi08IUVOVElUWSBjaXJjICAgICImIzcxMDsiID48IS0tIG1vZGlmaWVyIGxldHRlciBjaXJjdW1mbGV4IGFjY2VudCwgVSswMkM2IElTT3B1YiAtLT4NCi08IUVOVElUWSB0aWxkZSAgICImIzczMjsiID48IS0tIHNtYWxsIHRpbGRlLCBVKzAyREMgSVNPZGlhIC0tPg0KLQ0KLTwhLS0gR2VuZXJhbCBQdW5jdHVhdGlvbiAtLT4NCi08IUVOVElUWSBlbnNwICAgICImIzgxOTQ7IiA+PCEtLSBlbiBzcGFjZSwgVSsyMDAyIElTT3B1YiAtLT4NCi08IUVOVElUWSBlbXNwICAgICImIzgxOTU7IiA+PCEtLSBlbSBzcGFjZSwgVSsyMDAzIElTT3B1YiAtLT4NCi08IUVOVElUWSB0aGluc3AgICImIzgyMDE7IiA+PCEtLSB0aGluIHNwYWNlLCBVKzIwMDkgSVNPcHViIC0tPg0KLTwhRU5USVRZIHp3bmogICAgIiYjODIwNDsiID48IS0tIHplcm8gd2lkdGggbm9uLWpvaW5lciwgVSsyMDBDIE5FVyBSRkMgMjA3MCAtLT4NCi08IUVOVElUWSB6d2ogICAgICImIzgyMDU7IiA+PCEtLSB6ZXJvIHdpZHRoIGpvaW5lciwgVSsyMDBEIE5FVyBSRkMgMjA3MCAtLT4NCi08IUVOVElUWSBscm0gICAgICImIzgyMDY7IiA+PCEtLSBsZWZ0LXRvLXJpZ2h0IG1hcmssIFUrMjAwRSBORVcgUkZDIDIwNzAgLS0+DQotPCFFTlRJVFkgcmxtICAgICAiJiM4MjA3OyIgPjwhLS0gcmlnaHQtdG8tbGVmdCBtYXJrLCBVKzIwMEYgTkVXIFJGQyAyMDcwIC0tPg0KLTwhRU5USVRZIG5kYXNoICAgIiYjODIxMTsiID48IS0tIGVuIGRhc2gsIFUrMjAxMyBJU09wdWIgLS0+DQotPCFFTlRJVFkgbWRhc2ggICAiJiM4MjEyOyIgPjwhLS0gZW0gZGFzaCwgVSsyMDE0IElTT3B1YiAtLT4NCi08IUVOVElUWSBsc3F1byAgICImIzgyMTY7IiA+PCEtLSBsZWZ0IHNpbmdsZSBxdW90YXRpb24gbWFyaywgVSsyMDE4IElTT251bSAtLT4NCi08IUVOVElUWSByc3F1byAgICImIzgyMTc7IiA+PCEtLSByaWdodCBzaW5nbGUgcXVvdGF0aW9uIG1hcmssIFUrMjAxOSBJU09udW0gLS0+DQotPCFFTlRJVFkgc2JxdW8gICAiJiM4MjE4OyIgPjwhLS0gc2luZ2xlIGxvdy05IHF1b3RhdGlvbiBtYXJrLCBVKzIwMUEgTkVXIC0tPg0KLTwhRU5USVRZIGxkcXVvICAgIiYjODIyMDsiID48IS0tIGxlZnQgZG91YmxlIHF1b3RhdGlvbiBtYXJrLCBVKzIwMUMgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHJkcXVvICAgIiYjODIyMTsiID48IS0tIHJpZ2h0IGRvdWJsZSBxdW90YXRpb24gbWFyaywgVSsyMDFEIElTT251bSAtLT4NCi08IUVOVElUWSBiZHF1byAgICImIzgyMjI7IiA+PCEtLSBkb3VibGUgbG93LTkgcXVvdGF0aW9uIG1hcmssIFUrMjAxRSBORVcgLS0+DQotPCFFTlRJVFkgZGFnZ2VyICAiJiM4MjI0OyIgPjwhLS0gZGFnZ2VyLCBVKzIwMjAgSVNPcHViIC0tPg0KLTwhRU5USVRZIERhZ2dlciAgIiYjODIyNTsiID48IS0tIGRvdWJsZSBkYWdnZXIsIFUrMjAyMSBJU09wdWIgLS0+DQotPCFFTlRJVFkgcGVybWlsICAiJiM4MjQwOyIgPjwhLS0gcGVyIG1pbGxlIHNpZ24sIFUrMjAzMCBJU090ZWNoIC0tPg0KLQ0KLTwhLS0gbHNhcXVvIGlzIHByb3Bvc2VkIGJ1dCBub3QgeWV0IElTTyBzdGFuZGFyZGl6ZWQgLS0+DQotPCFFTlRJVFkgbHNhcXVvICAiJiM4MjQ5OyIgPjwhLS0gc2luZ2xlIGxlZnQtcG9pbnRpbmcgYW5nbGUgcXVvdGF0aW9uIG1hcmssIFUrMjAzOSBJU08gcHJvcG9zZWQgLS0+DQotPCEtLSByc2FxdW8gaXMgcHJvcG9zZWQgYnV0IG5vdCB5ZXQgSVNPIHN0YW5kYXJkaXplZCAtLT4NCi08IUVOVElUWSByc2FxdW8gICImIzgyNTA7IiA+PCEtLSBzaW5nbGUgcmlnaHQtcG9pbnRpbmcgYW5nbGUgcXVvdGF0aW9uIG1hcmssIFUrMjAzQSBJU08gcHJvcG9zZWQgLS0+DQotPCFFTlRJVFkgZXVybyAgICAiJiM4MzY0OyIgPjwhLS0gZXVybyBzaWduLCBVKzIwQUMgTkVXIC0tPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLXNwZWNpYWwuZW50IC0tPg0KLQ0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWNoYXJlbnQtMS5tb2QgLS0+DQotXV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtZnJhbWV3b3JrLTEubW9kIC0tPg0KLQ0KLQ0KLTwhLS0gWEhUTUwgQ29yZSBNb2R1bGVzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSBwcmUuY29udGVudA0KLSAgICAgIiggI1BDREFUQQ0KLSAgICAgIHwgJUlubFN0cnVjdC5jbGFzczsNCi0gICAgICAlSW5sUGhyYXMuY2xhc3M7DQotICAgICAgJUFuY2hvci5jbGFzczsNCi0gICAgICAlSW5saW5lLmV4dHJhOyApKiINCi0+DQotDQotPCFFTlRJVFkgJSB4aHRtbC10ZXh0Lm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIFRleHQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXRleHQtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBUZXh0IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtdGV4dC0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgVGV4dCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC10ZXh0LTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIFRleHR1YWwgQ29udGVudA0KLQ0KLSAgICAgVGhlIFRleHQgbW9kdWxlIGluY2x1ZGVzIGRlY2xhcmF0aW9ucyBmb3IgYWxsIGNvcmUNCi0gICAgIHRleHQgY29udGFpbmVyIGVsZW1lbnRzIGFuZCB0aGVpciBhdHRyaWJ1dGVzLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgeGh0bWwtaW5sc3RydWN0Lm1vZHVsZSAiSU5DTFVERSIgPg0KLTwhWyV4aHRtbC1pbmxzdHJ1Y3QubW9kdWxlO1sNCi08IUVOVElUWSAlIHhodG1sLWlubHN0cnVjdC5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbmxpbmUgU3RydWN0dXJhbCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJ4aHRtbC1pbmxzdHJ1Y3QtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBJbmxpbmUgU3RydWN0dXJhbCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtaW5sc3RydWN0LTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbmxpbmUgU3RydWN0dXJhbCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1pbmxzdHJ1Y3QtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gSW5saW5lIFN0cnVjdHVyYWwNCi0NCi0gICAgICAgIGJyLCBzcGFuDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgZWxlbWVudHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMNCi0gICAgIHVzZWQgdG8gc3VwcG9ydCBpbmxpbmUtbGV2ZWwgc3RydWN0dXJhbCBtYXJrdXAuDQotLS0+DQotDQotPCEtLSBicjogZm9yY2VkIGxpbmUgYnJlYWsgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBici5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVici5lbGVtZW50O1sNCi0NCi08IUVOVElUWSAlIGJyLmNvbnRlbnQgICJFTVBUWSIgPg0KLTwhRU5USVRZICUgYnIucW5hbWUgICJiciIgPg0KLTwhRUxFTUVOVCAlYnIucW5hbWU7ICAlYnIuY29udGVudDsgPg0KLQ0KLTwhLS0gZW5kIG9mIGJyLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBici5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVici5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWJyLnFuYW1lOw0KLSAgICAgICVDb3JlLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgYnIuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIHNwYW46IGdlbmVyaWMgaW5saW5lIGNvbnRhaW5lciAuLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIHNwYW4uZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslc3Bhbi5lbGVtZW50O1sNCi08IUVOVElUWSAlIHNwYW4uY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBzcGFuLnFuYW1lICAic3BhbiIgPg0KLTwhRUxFTUVOVCAlc3Bhbi5xbmFtZTsgICVzcGFuLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBzcGFuLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzcGFuLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXNwYW4uYXR0bGlzdDtbDQotPCFBVFRMSVNUICVzcGFuLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBzcGFuLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtaW5sc3RydWN0LTEubW9kIC0tPg0KLV1dPg0KLQ0KLTwhRU5USVRZICUgeGh0bWwtaW5scGhyYXMubW9kdWxlICJJTkNMVURFIiA+DQotPCFbJXhodG1sLWlubHBocmFzLm1vZHVsZTtbDQotPCFFTlRJVFkgJSB4aHRtbC1pbmxwaHJhcy5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbmxpbmUgUGhyYXNhbCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJ4aHRtbC1pbmxwaHJhcy0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIElubGluZSBQaHJhc2FsIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1pbmxwaHJhcy0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW5saW5lIFBocmFzYWwgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW5scGhyYXMtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gSW5saW5lIFBocmFzYWwNCi0NCi0gICAgICAgIGFiYnIsIGFjcm9ueW0sIGNpdGUsIGNvZGUsIGRmbiwgZW0sIGtiZCwgcSwgc2FtcCwgc3Ryb25nLCB2YXINCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBlbGVtZW50cyBhbmQgdGhlaXIgYXR0cmlidXRlcyB1c2VkIHRvDQotICAgICBzdXBwb3J0IGlubGluZS1sZXZlbCBwaHJhc2FsIG1hcmt1cC4NCi0tLT4NCi0NCi08IUVOVElUWSAlIGFiYnIuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYWJici5lbGVtZW50O1sNCi08IUVOVElUWSAlIGFiYnIuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBhYmJyLnFuYW1lICAiYWJiciIgPg0KLTwhRUxFTUVOVCAlYWJici5xbmFtZTsgICVhYmJyLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBhYmJyLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBhYmJyLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWFiYnIuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVhYmJyLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBhYmJyLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBhY3JvbnltLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWFjcm9ueW0uZWxlbWVudDtbDQotPCFFTlRJVFkgJSBhY3JvbnltLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgYWNyb255bS5xbmFtZSAgImFjcm9ueW0iID4NCi08IUVMRU1FTlQgJWFjcm9ueW0ucW5hbWU7ICAlYWNyb255bS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgYWNyb255bS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYWNyb255bS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVhY3JvbnltLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlYWNyb255bS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgYWNyb255bS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgY2l0ZS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVjaXRlLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgY2l0ZS5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGNpdGUucW5hbWUgICJjaXRlIiA+DQotPCFFTEVNRU5UICVjaXRlLnFuYW1lOyAgJWNpdGUuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGNpdGUuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGNpdGUuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslY2l0ZS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWNpdGUucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGNpdGUuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGNvZGUuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslY29kZS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGNvZGUuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBjb2RlLnFuYW1lICAiY29kZSIgPg0KLTwhRUxFTUVOVCAlY29kZS5xbmFtZTsgICVjb2RlLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBjb2RlLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBjb2RlLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWNvZGUuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVjb2RlLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBjb2RlLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBkZm4uZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslZGZuLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgZGZuLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgZGZuLnFuYW1lICAiZGZuIiA+DQotPCFFTEVNRU5UICVkZm4ucW5hbWU7ICAlZGZuLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBkZm4uZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGRmbi5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVkZm4uYXR0bGlzdDtbDQotPCFBVFRMSVNUICVkZm4ucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGRmbi5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgZW0uZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslZW0uZWxlbWVudDtbDQotPCFFTlRJVFkgJSBlbS5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGVtLnFuYW1lICAiZW0iID4NCi08IUVMRU1FTlQgJWVtLnFuYW1lOyAgJWVtLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBlbS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgZW0uYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslZW0uYXR0bGlzdDtbDQotPCFBVFRMSVNUICVlbS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgZW0uYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGtiZC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVrYmQuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBrYmQuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBrYmQucW5hbWUgICJrYmQiID4NCi08IUVMRU1FTlQgJWtiZC5xbmFtZTsgICVrYmQuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGtiZC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUga2JkLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWtiZC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWtiZC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2Yga2JkLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBxLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXEuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBxLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgcS5xbmFtZSAgInEiID4NCi08IUVMRU1FTlQgJXEucW5hbWU7ICAlcS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgcS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgcS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVxLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlcS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBjaXRlICAgICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIHEuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHNhbXAuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslc2FtcC5lbGVtZW50O1sNCi08IUVOVElUWSAlIHNhbXAuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBzYW1wLnFuYW1lICAic2FtcCIgPg0KLTwhRUxFTUVOVCAlc2FtcC5xbmFtZTsgICVzYW1wLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBzYW1wLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzYW1wLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXNhbXAuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVzYW1wLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBzYW1wLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzdHJvbmcuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslc3Ryb25nLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgc3Ryb25nLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgc3Ryb25nLnFuYW1lICAic3Ryb25nIiA+DQotPCFFTEVNRU5UICVzdHJvbmcucW5hbWU7ICAlc3Ryb25nLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBzdHJvbmcuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHN0cm9uZy5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVzdHJvbmcuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVzdHJvbmcucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHN0cm9uZy5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgdmFyLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXZhci5lbGVtZW50O1sNCi08IUVOVElUWSAlIHZhci5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIHZhci5xbmFtZSAgInZhciIgPg0KLTwhRUxFTUVOVCAldmFyLnFuYW1lOyAgJXZhci5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgdmFyLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB2YXIuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVsldmFyLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAldmFyLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiB2YXIuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1pbmxwaHJhcy0xLm1vZCAtLT4NCi1dXT4NCi0NCi08IUVOVElUWSAlIHhodG1sLWJsa3N0cnVjdC5tb2R1bGUgIklOQ0xVREUiID4NCi08IVsleGh0bWwtYmxrc3RydWN0Lm1vZHVsZTtbDQotPCFFTlRJVFkgJSB4aHRtbC1ibGtzdHJ1Y3QubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmxvY2sgU3RydWN0dXJhbCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJ4aHRtbC1ibGtzdHJ1Y3QtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBCbG9jayBTdHJ1Y3R1cmFsIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtYmxrc3RydWN0LTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCbG9jayBTdHJ1Y3R1cmFsIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJsa3N0cnVjdC0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBCbG9jayBTdHJ1Y3R1cmFsDQotDQotICAgICAgICBkaXYsIHANCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBlbGVtZW50cyBhbmQgdGhlaXIgYXR0cmlidXRlcyB1c2VkIHRvDQotICAgICBzdXBwb3J0IGJsb2NrLWxldmVsIHN0cnVjdHVyYWwgbWFya3VwLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgZGl2LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWRpdi5lbGVtZW50O1sNCi08IUVOVElUWSAlIGRpdi5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUZsb3cubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBkaXYucW5hbWUgICJkaXYiID4NCi08IUVMRU1FTlQgJWRpdi5xbmFtZTsgICVkaXYuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGRpdi5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgZGl2LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWRpdi5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWRpdi5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgZGl2LmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBwLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXAuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBwLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiID4NCi08IUVOVElUWSAlIHAucW5hbWUgICJwIiA+DQotPCFFTEVNRU5UICVwLnFuYW1lOyAgJXAuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHAuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHAuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslcC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXAucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHAuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1ibGtzdHJ1Y3QtMS5tb2QgLS0+DQotXV0+DQotDQotPCFFTlRJVFkgJSB4aHRtbC1ibGtwaHJhcy5tb2R1bGUgIklOQ0xVREUiID4NCi08IVsleGh0bWwtYmxrcGhyYXMubW9kdWxlO1sNCi08IUVOVElUWSAlIHhodG1sLWJsa3BocmFzLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJsb2NrIFBocmFzYWwgMS4wLy9FTiINCi0gICAgICAgICAgICAieGh0bWwtYmxrcGhyYXMtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBCbG9jayBQaHJhc2FsIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtYmxrcGhyYXMtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJsb2NrIFBocmFzYWwgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmxrcGhyYXMtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gQmxvY2sgUGhyYXNhbA0KLQ0KLSAgICAgICAgYWRkcmVzcywgYmxvY2txdW90ZSwgcHJlLCBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2DQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgZWxlbWVudHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMgdXNlZCB0bw0KLSAgICAgc3VwcG9ydCBibG9jay1sZXZlbCBwaHJhc2FsIG1hcmt1cC4NCi0tLT4NCi0NCi08IUVOVElUWSAlIGFkZHJlc3MuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYWRkcmVzcy5lbGVtZW50O1sNCi08IUVOVElUWSAlIGFkZHJlc3MuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiIgPg0KLTwhRU5USVRZICUgYWRkcmVzcy5xbmFtZSAgImFkZHJlc3MiID4NCi08IUVMRU1FTlQgJWFkZHJlc3MucW5hbWU7ICAlYWRkcmVzcy5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgYWRkcmVzcy5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYWRkcmVzcy5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVhZGRyZXNzLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlYWRkcmVzcy5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgYWRkcmVzcy5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYmxvY2txdW90ZS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVibG9ja3F1b3RlLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgYmxvY2txdW90ZS5jb250ZW50DQotICAgICAiKCAlQmxvY2subWl4OyApKyINCi0+DQotPCFFTlRJVFkgJSBibG9ja3F1b3RlLnFuYW1lICAiYmxvY2txdW90ZSIgPg0KLTwhRUxFTUVOVCAlYmxvY2txdW90ZS5xbmFtZTsgICVibG9ja3F1b3RlLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBibG9ja3F1b3RlLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBibG9ja3F1b3RlLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWJsb2NrcXVvdGUuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVibG9ja3F1b3RlLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIGNpdGUgICAgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgYmxvY2txdW90ZS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgcHJlLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXByZS5lbGVtZW50O1sNCi08IUVOVElUWSAlIHByZS5jb250ZW50DQotICAgICAiKCAjUENEQVRBDQotICAgICAgfCAlSW5sU3RydWN0LmNsYXNzOw0KLSAgICAgICVJbmxQaHJhcy5jbGFzczsNCi0gICAgICB8ICV0dC5xbmFtZTsgfCAlaS5xbmFtZTsgfCAlYi5xbmFtZTsNCi0gICAgICAlSTE4bi5jbGFzczsNCi0gICAgICAlQW5jaG9yLmNsYXNzOw0KLSAgICAgIHwgJXNjcmlwdC5xbmFtZTsgfCAlbWFwLnFuYW1lOw0KLSAgICAgICVJbmxpbmUuZXh0cmE7ICkqIg0KLT4NCi08IUVOVElUWSAlIHByZS5xbmFtZSAgInByZSIgPg0KLTwhRUxFTUVOVCAlcHJlLnFuYW1lOyAgJXByZS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgcHJlLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBwcmUuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslcHJlLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlcHJlLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIHhtbDpzcGFjZSAgICAoIHByZXNlcnZlICkgICAgICAgICAgICAgI0ZJWEVEICdwcmVzZXJ2ZScNCi0+DQotPCEtLSBlbmQgb2YgcHJlLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uICBIZWFkaW5nIEVsZW1lbnRzICAuLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgSGVhZGluZy5jb250ZW50ICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIiA+DQotDQotPCFFTlRJVFkgJSBoMS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVoMS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGgxLnFuYW1lICAiaDEiID4NCi08IUVMRU1FTlQgJWgxLnFuYW1lOyAgJUhlYWRpbmcuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGgxLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoMS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVoMS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWgxLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBoMS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDIuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaDIuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBoMi5xbmFtZSAgImgyIiA+DQotPCFFTEVNRU5UICVoMi5xbmFtZTsgICVIZWFkaW5nLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBoMi5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDIuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaDIuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVoMi5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgaDIuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGgzLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWgzLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaDMucW5hbWUgICJoMyIgPg0KLTwhRUxFTUVOVCAlaDMucW5hbWU7ICAlSGVhZGluZy5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaDMuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGgzLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWgzLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlaDMucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGgzLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoNC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVoNC5lbGVtZW50O1sNCi08IUVOVElUWSAlIGg0LnFuYW1lICAiaDQiID4NCi08IUVMRU1FTlQgJWg0LnFuYW1lOyAgJUhlYWRpbmcuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGg0LmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoNC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVoNC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWg0LnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBoNC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDUuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaDUuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBoNS5xbmFtZSAgImg1IiA+DQotPCFFTEVNRU5UICVoNS5xbmFtZTsgICVIZWFkaW5nLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBoNS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDUuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaDUuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVoNS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgaDUuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGg2LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWg2LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaDYucW5hbWUgICJoNiIgPg0KLTwhRUxFTUVOVCAlaDYucW5hbWU7ICAlSGVhZGluZy5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaDYuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGg2LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWg2LmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlaDYucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGg2LmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtYmxrcGhyYXMtMS5tb2QgLS0+DQotXV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtdGV4dC0xLm1vZCAtLT4NCi0NCi0NCi08IUVOVElUWSAlIHhodG1sLWh5cGVydGV4dC5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBIeXBlcnRleHQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWh5cGVydGV4dC0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIEh5cGVydGV4dCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1oeXBlcnRleHQtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEh5cGVydGV4dCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1oeXBlcnRleHQtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gSHlwZXJ0ZXh0DQotDQotICAgICAgICBhDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgYW5jaG9yICgnYScpIGVsZW1lbnQgdHlwZSwgd2hpY2gNCi0gICAgIGRlZmluZXMgdGhlIHNvdXJjZSBvZiBhIGh5cGVydGV4dCBsaW5rLiBUaGUgZGVzdGluYXRpb24NCi0gICAgIChvciBsaW5rICd0YXJnZXQnKSBpcyBpZGVudGlmaWVkIHZpYSBpdHMgJ2lkJyBhdHRyaWJ1dGUNCi0gICAgIHJhdGhlciB0aGFuIHRoZSAnbmFtZScgYXR0cmlidXRlIGFzIHdhcyB1c2VkIGluIEhUTUwuDQotLS0+DQotDQotPCEtLSAuLi4uLi4uLi4uLi4gIEFuY2hvciBFbGVtZW50ICAuLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBhLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWEuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBhLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5sTm9BbmNob3IubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBhLnFuYW1lICAiYSIgPg0KLTwhRUxFTUVOVCAlYS5xbmFtZTsgICVhLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBhLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBhLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWEuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVhLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIGhyZWYgICAgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBjaGFyc2V0ICAgICAgJUNoYXJzZXQuZGF0YXR5cGU7ICAgICAgICNJTVBMSUVEDQotICAgICAgdHlwZSAgICAgICAgICVDb250ZW50VHlwZS5kYXRhdHlwZTsgICAjSU1QTElFRA0KLSAgICAgIGhyZWZsYW5nICAgICAlTGFuZ3VhZ2VDb2RlLmRhdGF0eXBlOyAgI0lNUExJRUQNCi0gICAgICByZWwgICAgICAgICAgJUxpbmtUeXBlcy5kYXRhdHlwZTsgICAgICNJTVBMSUVEDQotICAgICAgcmV2ICAgICAgICAgICVMaW5rVHlwZXMuZGF0YXR5cGU7ICAgICAjSU1QTElFRA0KLSAgICAgIGFjY2Vzc2tleSAgICAlQ2hhcmFjdGVyLmRhdGF0eXBlOyAgICAgI0lNUExJRUQNCi0gICAgICB0YWJpbmRleCAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIGEuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1oeXBlcnRleHQtMS5tb2QgLS0+DQotDQotDQotPCFFTlRJVFkgJSB4aHRtbC1saXN0Lm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIExpc3RzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1saXN0LTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgTGlzdHMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWxpc3QtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIExpc3RzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWxpc3QtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gTGlzdHMNCi0NCi0gICAgICAgIGRsLCBkdCwgZGQsIG9sLCB1bCwgbGkNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBsaXN0LW9yaWVudGVkIGVsZW1lbnQgdHlwZXMNCi0gICAgIGFuZCB0aGVpciBhdHRyaWJ1dGVzLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgZGwucW5hbWUgICJkbCIgPg0KLTwhRU5USVRZICUgZHQucW5hbWUgICJkdCIgPg0KLTwhRU5USVRZICUgZGQucW5hbWUgICJkZCIgPg0KLTwhRU5USVRZICUgb2wucW5hbWUgICJvbCIgPg0KLTwhRU5USVRZICUgdWwucW5hbWUgICJ1bCIgPg0KLTwhRU5USVRZICUgbGkucW5hbWUgICJsaSIgPg0KLQ0KLTwhLS0gZGw6IERlZmluaXRpb24gTGlzdCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgZGwuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslZGwuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBkbC5jb250ZW50ICAiKCAlZHQucW5hbWU7IHwgJWRkLnFuYW1lOyApKyIgPg0KLTwhRUxFTUVOVCAlZGwucW5hbWU7ICAlZGwuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGRsLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBkbC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVkbC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWRsLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBkbC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZHQ6IERlZmluaXRpb24gVGVybSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgZHQuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslZHQuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBkdC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVMRU1FTlQgJWR0LnFuYW1lOyAgJWR0LmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBkdC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgZHQuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslZHQuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVkdC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgZHQuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGRkOiBEZWZpbml0aW9uIERlc2NyaXB0aW9uIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGRkLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWRkLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgZGQuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVGbG93Lm1peDsgKSoiDQotPg0KLTwhRUxFTUVOVCAlZGQucW5hbWU7ICAlZGQuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGRkLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBkZC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVkZC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWRkLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBkZC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gb2w6IE9yZGVyZWQgTGlzdCAobnVtYmVyZWQgc3R5bGVzKSAuLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgb2wuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslb2wuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBvbC5jb250ZW50ICAiKCAlbGkucW5hbWU7ICkrIiA+DQotPCFFTEVNRU5UICVvbC5xbmFtZTsgICVvbC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygb2wuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIG9sLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJW9sLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlb2wucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIG9sLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSB1bDogVW5vcmRlcmVkIExpc3QgKGJ1bGxldCBzdHlsZXMpIC4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSB1bC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyV1bC5lbGVtZW50O1sNCi08IUVOVElUWSAlIHVsLmNvbnRlbnQgICIoICVsaS5xbmFtZTsgKSsiID4NCi08IUVMRU1FTlQgJXVsLnFuYW1lOyAgJXVsLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiB1bC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgdWwuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVsldWwuYXR0bGlzdDtbDQotPCFBVFRMSVNUICV1bC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgdWwuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGxpOiBMaXN0IEl0ZW0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGxpLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWxpLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgbGkuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVGbG93Lm1peDsgKSoiDQotPg0KLTwhRUxFTUVOVCAlbGkucW5hbWU7ICAlbGkuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGxpLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBsaS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVsaS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWxpLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBsaS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWxpc3QtMS5tb2QgLS0+DQotDQotPCEtLSBFeHRlbmQgbGlzdHMgd2l0aCB2YWx1ZSBhbmQgc3RhcnQgYXR0cmlidXRlcyAtLT4gDQotPCFBVFRMSVNUICVsaS5xbmFtZTsNCi0gICAgICB2YWx1ZSAgICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICAjSU1QTElFRA0KLT4NCi08IUFUVExJU1QgJW9sLnFuYW1lOw0KLSAgICAgIHN0YXJ0ICAgICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0+DQotDQotPCEtLSA6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OiAtLT4NCi0NCi08IS0tIEltYWdlIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1pbWFnZS5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbWFnZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWltYWdlLTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgSW1hZ2VzIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWltYWdlLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUm92aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbWFnZXMgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW1hZ2UtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gSW1hZ2VzDQotDQotICAgICAgICBpbWcNCi0NCi0gICAgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIG1hcmt1cCB0byBzdXBwb3J0IGJhc2ljIGltYWdlIGVtYmVkZGluZy4NCi0tLT4NCi0NCi08IS0tIFRvIGF2b2lkIHByb2JsZW1zIHdpdGggdGV4dC1vbmx5IFVBcyBhcyB3ZWxsIGFzIHRvIG1ha2UNCi0gICAgIGltYWdlIGNvbnRlbnQgdW5kZXJzdGFuZGFibGUgYW5kIG5hdmlnYWJsZSB0byB1c2VycyBvZg0KLSAgICAgbm9uLXZpc3VhbCBVQXMsIHlvdSBuZWVkIHRvIHByb3ZpZGUgYSBkZXNjcmlwdGlvbiB3aXRoDQotICAgICB0aGUgJ2FsdCcgYXR0cmlidXRlLCBhbmQgYXZvaWQgc2VydmVyLXNpZGUgaW1hZ2UgbWFwcy4NCi0tLT4NCi0NCi08IUVOVElUWSAlIGltZy5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVpbWcuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBpbWcuY29udGVudCAgIkVNUFRZIiA+DQotPCFFTlRJVFkgJSBpbWcucW5hbWUgICJpbWciID4NCi08IUVMRU1FTlQgJWltZy5xbmFtZTsgICVpbWcuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGltZy5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaW1nLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWltZy5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWltZy5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBzcmMgICAgICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgIGFsdCAgICAgICAgICAlVGV4dC5kYXRhdHlwZTsgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgbG9uZ2Rlc2MgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGhlaWdodCAgICAgICAlTGVuZ3RoLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0gICAgICB3aWR0aCAgICAgICAgJUxlbmd0aC5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIGltZy5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWltYWdlLTEubW9kIC0tPg0KLQ0KLQ0KLTwhLS0gVGFibGVzIE1vZHVsZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXRhYmxlLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJhc2ljIFRhYmxlcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmFzaWMtdGFibGUtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgQmFzaWMgVGFibGUgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1iYXNpYy10YWJsZS0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCBCYXNpYywgYSBwcm9wZXIgc3Vic2V0IG9mIFhIVE1MLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNpYyBUYWJsZXMgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmFzaWMtdGFibGUtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gQmFzaWMgVGFibGVzDQotDQotICAgICAgICB0YWJsZSwgY2FwdGlvbiwgdHIsIHRoLCB0ZA0KLQ0KLSAgICAgVGhpcyB0YWJsZSBtb2R1bGUgZGVjbGFyZXMgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMgZGVmaW5pbmcNCi0gICAgIGEgdGFibGUgbW9kZWwgYmFzZWQgZnVuZGFtZW50YWxseSBvbiBmZWF0dXJlcyBmb3VuZCBpbiB0aGUNCi0gICAgIHdpZGVseS1kZXBsb3llZCBIVE1MIDMuMiB0YWJsZSBtb2RlbC4gIFdoaWxlIHRoaXMgbW9kdWxlDQotICAgICBtaW1pY3MgdGhlIGNvbnRlbnQgbW9kZWwgYW5kIHRhYmxlIGF0dHJpYnV0ZXMgb2YgSFRNTCAzLjINCi0gICAgIHRhYmxlcywgdGhlIGVsZW1lbnQgdHlwZXMgZGVjbGFyZWQgaGVyZWluIGFsc28gaW5jbHVkZXMgYWxsDQotICAgICBIVE1MIDQgY29tbW9uIGFuZCBtb3N0IG9mIHRoZSBIVE1MIDQgdGFibGUgYXR0cmlidXRlcy4NCi0tLT4NCi0NCi08IS0tIGRlY2xhcmUgcXVhbGlmaWVkIGVsZW1lbnQgdHlwZSBuYW1lczoNCi0tLT4NCi08IUVOVElUWSAlIHRhYmxlLnFuYW1lICAidGFibGUiID4NCi08IUVOVElUWSAlIGNhcHRpb24ucW5hbWUgICJjYXB0aW9uIiA+DQotPCFFTlRJVFkgJSB0ci5xbmFtZSAgInRyIiA+DQotPCFFTlRJVFkgJSB0aC5xbmFtZSAgInRoIiA+DQotPCFFTlRJVFkgJSB0ZC5xbmFtZSAgInRkIiA+DQotDQotPCEtLSBob3Jpem9udGFsIGFsaWdubWVudCBhdHRyaWJ1dGVzIGZvciBjZWxsIGNvbnRlbnRzDQotLS0+DQotPCFFTlRJVFkgJSBDZWxsSEFsaWduLmF0dHJpYg0KLSAgICAgImFsaWduICAgICAgICAoIGxlZnQNCi0gICAgICAgICAgICAgICAgICAgfCBjZW50ZXINCi0gICAgICAgICAgICAgICAgICAgfCByaWdodCApICAgICAgICAgICAgICAgICNJTVBMSUVEIg0KLT4NCi0NCi08IS0tIHZlcnRpY2FsIGFsaWdubWVudCBhdHRyaWJ1dGVzIGZvciBjZWxsIGNvbnRlbnRzDQotLS0+DQotPCFFTlRJVFkgJSBDZWxsVkFsaWduLmF0dHJpYg0KLSAgICAgInZhbGlnbiAgICAgICAoIHRvcA0KLSAgICAgICAgICAgICAgICAgICB8IG1pZGRsZQ0KLSAgICAgICAgICAgICAgICAgICB8IGJvdHRvbSApICAgICAgICAgICAgICAgI0lNUExJRUQiDQotPg0KLQ0KLTwhLS0gc2NvcGUgaXMgc2ltcGxlciB0aGFuIGF4ZXMgYXR0cmlidXRlIGZvciBjb21tb24gdGFibGVzDQotLS0+DQotPCFFTlRJVFkgJSBzY29wZS5hdHRyaWINCi0gICAgICJzY29wZSAgICAgICAgKCByb3cgfCBjb2wgICkgICAgICAgICAgICNJTVBMSUVEIg0KLT4NCi0NCi08IS0tIHRhYmxlOiBUYWJsZSBFbGVtZW50IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIHRhYmxlLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXRhYmxlLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgdGFibGUuY29udGVudA0KLSAgICAgIiggJWNhcHRpb24ucW5hbWU7PywgJXRyLnFuYW1lOysgKSINCi0+DQotPCFFTEVNRU5UICV0YWJsZS5xbmFtZTsgICV0YWJsZS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgdGFibGUuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHRhYmxlLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXRhYmxlLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAldGFibGUucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgc3VtbWFyeSAgICAgICVUZXh0LmRhdGF0eXBlOyAgICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiB0YWJsZS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gY2FwdGlvbjogVGFibGUgQ2FwdGlvbiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgY2FwdGlvbi5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVjYXB0aW9uLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgY2FwdGlvbi5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVMRU1FTlQgJWNhcHRpb24ucW5hbWU7ICAlY2FwdGlvbi5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgY2FwdGlvbi5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgY2FwdGlvbi5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVjYXB0aW9uLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlY2FwdGlvbi5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgY2FwdGlvbi5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gdHI6IFRhYmxlIFJvdyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgdHIuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVsldHIuZWxlbWVudDtbDQotPCFFTlRJVFkgJSB0ci5jb250ZW50ICAiKCAldGgucW5hbWU7IHwgJXRkLnFuYW1lOyApKyIgPg0KLTwhRUxFTUVOVCAldHIucW5hbWU7ICAldHIuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHRyLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB0ci5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyV0ci5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXRyLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgICVDZWxsSEFsaWduLmF0dHJpYjsNCi0gICAgICAlQ2VsbFZBbGlnbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHRyLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSB0aDogVGFibGUgSGVhZGVyIENlbGwgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSB0aCBpcyBmb3IgaGVhZGVyIGNlbGxzLCB0ZCBmb3IgZGF0YSwNCi0gICAgIGJ1dCBmb3IgY2VsbHMgYWN0aW5nIGFzIGJvdGggdXNlIHRkDQotLS0+DQotDQotPCFFTlRJVFkgJSB0aC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyV0aC5lbGVtZW50O1sNCi08IUVOVElUWSAlIHRoLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlRmxvd05vVGFibGUubWl4OyApKiINCi0+DQotPCFFTEVNRU5UICV0aC5xbmFtZTsgICV0aC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgdGguZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHRoLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXRoLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAldGgucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgYWJiciAgICAgICAgICVUZXh0LmRhdGF0eXBlOyAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGF4aXMgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBoZWFkZXJzICAgICAgSURSRUZTICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgJXNjb3BlLmF0dHJpYjsNCi0gICAgICByb3dzcGFuICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICcxJw0KLSAgICAgIGNvbHNwYW4gICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgJzEnDQotICAgICAgJUNlbGxIQWxpZ24uYXR0cmliOw0KLSAgICAgICVDZWxsVkFsaWduLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgdGguYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIHRkOiBUYWJsZSBEYXRhIENlbGwgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIHRkLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXRkLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgdGQuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVGbG93Tm9UYWJsZS5taXg7ICkqIg0KLT4NCi08IUVMRU1FTlQgJXRkLnFuYW1lOyAgJXRkLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiB0ZC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgdGQuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVsldGQuYXR0bGlzdDtbDQotPCFBVFRMSVNUICV0ZC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBhYmJyICAgICAgICAgJVRleHQuZGF0YXR5cGU7ICAgICAgICAgICNJTVBMSUVEDQotICAgICAgYXhpcyAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGhlYWRlcnMgICAgICBJRFJFRlMgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAlc2NvcGUuYXR0cmliOw0KLSAgICAgIHJvd3NwYW4gICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgJzEnDQotICAgICAgY29sc3BhbiAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAnMScNCi0gICAgICAlQ2VsbEhBbGlnbi5hdHRyaWI7DQotICAgICAgJUNlbGxWQWxpZ24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiB0ZC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWJhc2ljLXRhYmxlLTEubW9kIC0tPg0KLQ0KLQ0KLTwhLS0gRm9ybXMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiANCi0JWEhUTUwgYmFzaWMgZm9ybXMgbW9kdWxlIGV4dGVuZGVkIHdpdGggb3B0Z3JvdXAgYW5kIGZpZWxkc2V0DQotLS0+DQotPCFFTEVNRU5UICVvcHRncm91cC5xbmFtZTsgKCVvcHRpb24ucW5hbWU7KSs+DQotPCFBVFRMSVNUICVvcHRncm91cC5xbmFtZTsNCi0JJUNvbW1vbi5hdHRyaWI7IA0KLQlsYWJlbCAlVGV4dC5kYXRhdHlwZTsgI1JFUVVJUkVEDQotPg0KLTwhRU5USVRZICUgc2VsZWN0LmNvbnRlbnQgIiggJW9wdGdyb3VwLnFuYW1lOyB8ICVvcHRpb24ucW5hbWU7ICkrIj4NCi08IUVMRU1FTlQgJWZpZWxkc2V0LnFuYW1lOyAoI1BDREFUQSB8ICVGbG93Lm1peDspKj4NCi08IUFUVExJU1QgJWZpZWxkc2V0LnFuYW1lOw0KLQklQ29tbW9uLmF0dHJpYjsgDQotPg0KLTwhRU5USVRZICUgZm9ybS5jb250ZW50ICIoICVCbGtOb0Zvcm0ubWl4OyB8ICVmaWVsZHNldC5xbmFtZTsgKSsiPg0KLTwhRU5USVRZICUgeGh0bWwtZm9ybS5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNpYyBGb3JtcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmFzaWMtZm9ybS0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIFNpbXBsaWZpZWQgRm9ybXMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1iYXNpYy1mb3JtLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MIEJhc2ljLCBhIHByb3BlciBzdWJzZXQgb2YgWEhUTUwuDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJhc2ljIEZvcm1zIDEuMC8vRU4iICANCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmFzaWMtZm9ybS0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBCYXNpYyBGb3Jtcw0KLQ0KLSAgICAgVGhpcyBmb3JtcyBtb2R1bGUgaXMgYmFzZWQgb24gdGhlIEhUTUwgMy4yIGZvcm1zIG1vZGVsLCB3aXRoDQotICAgICB0aGUgV0FJLXJlcXVlc3RlZCBhZGRpdGlvbiBvZiB0aGUgbGFiZWwgZWxlbWVudC4gV2hpbGUgdGhpcyANCi0gICAgIG1vZHVsZSBlc3NlbnRpYWxseSBtaW1pY3MgdGhlIGNvbnRlbnQgbW9kZWwgYW5kIGF0dHJpYnV0ZXMgb2YgDQotICAgICBIVE1MIDMuMiBmb3JtcywgdGhlIGVsZW1lbnQgdHlwZXMgZGVjbGFyZWQgaGVyZWluIGFsc28gaW5jbHVkZQ0KLSAgICAgYWxsIEhUTUwgNCBjb21tb24gYXR0cmlidXRlcy4NCi0NCi0gICAgICAgIGZvcm0sIGxhYmVsLCBpbnB1dCwgc2VsZWN0LCBvcHRpb24sIHRleHRhcmVhDQotLS0+DQotDQotPCEtLSBkZWNsYXJlIHF1YWxpZmllZCBlbGVtZW50IHR5cGUgbmFtZXM6DQotLS0+DQotPCFFTlRJVFkgJSBmb3JtLnFuYW1lICAiZm9ybSIgPg0KLTwhRU5USVRZICUgbGFiZWwucW5hbWUgICJsYWJlbCIgPg0KLTwhRU5USVRZICUgaW5wdXQucW5hbWUgICJpbnB1dCIgPg0KLTwhRU5USVRZICUgc2VsZWN0LnFuYW1lICAic2VsZWN0IiA+DQotPCFFTlRJVFkgJSBvcHRpb24ucW5hbWUgICJvcHRpb24iID4NCi08IUVOVElUWSAlIHRleHRhcmVhLnFuYW1lICAidGV4dGFyZWEiID4NCi0NCi08IS0tICVCbGtOb0Zvcm0ubWl4OyBpbmNsdWRlcyBhbGwgbm9uLWZvcm0gYmxvY2sgZWxlbWVudHMsDQotICAgICBwbHVzICVNaXNjLmNsYXNzOw0KLS0tPg0KLTwhRU5USVRZICUgQmxrTm9Gb3JtLm1peA0KLSAgICAgIiVIZWFkaW5nLmNsYXNzOw0KLSAgICAgIHwgJUxpc3QuY2xhc3M7DQotICAgICAgfCAlQmxrU3RydWN0LmNsYXNzOw0KLSAgICAgICVCbGtQaHJhcy5jbGFzczsNCi0gICAgICAlQmxrUHJlcy5jbGFzczsNCi0gICAgICB8ICV0YWJsZS5xbmFtZTsgDQotICAgICAgJUJsb2NrLmV4dHJhOw0KLSAgICAgICVNaXNjLmNsYXNzOyINCi0+DQotDQotPCEtLSBmb3JtOiBGb3JtIEVsZW1lbnQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBmb3JtLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWZvcm0uZWxlbWVudDtbDQotPCFFTlRJVFkgJSBmb3JtLmNvbnRlbnQNCi0gICAgICIoICVCbGtOb0Zvcm0ubWl4OyApKyINCi0+DQotPCFFTEVNRU5UICVmb3JtLnFuYW1lOyAgJWZvcm0uY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGZvcm0uZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGZvcm0uYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslZm9ybS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWZvcm0ucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgYWN0aW9uICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICBtZXRob2QgICAgICAgKCBnZXQgfCBwb3N0ICkgICAgICAgICAgICdnZXQnDQotICAgICAgZW5jdHlwZSAgICAgICVDb250ZW50VHlwZS5kYXRhdHlwZTsgICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJw0KLT4NCi08IS0tIGVuZCBvZiBmb3JtLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBsYWJlbDogRm9ybSBGaWVsZCBMYWJlbCBUZXh0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBsYWJlbC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVsYWJlbC5lbGVtZW50O1sNCi08IS0tIEVhY2ggbGFiZWwgbXVzdCBub3QgY29udGFpbiBtb3JlIHRoYW4gT05FIGZpZWxkDQotLS0+DQotPCFFTlRJVFkgJSBsYWJlbC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIA0KLSAgICAgIHwgJWlucHV0LnFuYW1lOyB8ICVzZWxlY3QucW5hbWU7IHwgJXRleHRhcmVhLnFuYW1lOw0KLSAgICAgIHwgJUlubFN0cnVjdC5jbGFzczsNCi0gICAgICAlSW5sUGhyYXMuY2xhc3M7DQotICAgICAgJUkxOG4uY2xhc3M7DQotICAgICAgJUlubFByZXMuY2xhc3M7DQotICAgICAgJUlubFNwZWNpYWwuY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7ICkqIg0KLT4NCi08IUVMRU1FTlQgJWxhYmVsLnFuYW1lOyAgJWxhYmVsLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBsYWJlbC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgbGFiZWwuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslbGFiZWwuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVsYWJlbC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBmb3IgICAgICAgICAgSURSRUYgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgYWNjZXNza2V5ICAgICVDaGFyYWN0ZXIuZGF0YXR5cGU7ICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBsYWJlbC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gaW5wdXQ6IEZvcm0gQ29udHJvbCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgaW5wdXQuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaW5wdXQuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBpbnB1dC5jb250ZW50ICAiRU1QVFkiID4NCi08IUVMRU1FTlQgJWlucHV0LnFuYW1lOyAgJWlucHV0LmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBpbnB1dC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhLS0gQmFzaWMgRm9ybXMgcmVtb3ZlcyAnaW1hZ2UnIGFuZCAnZmlsZScgaW5wdXQgdHlwZXMuDQotLS0+DQotPCFFTlRJVFkgJSBpbnB1dC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVpbnB1dC5hdHRsaXN0O1sNCi08IUVOVElUWSAlIElucHV0VHlwZS5jbGFzcw0KLSAgICAgIiggdGV4dCB8IHBhc3N3b3JkIHwgY2hlY2tib3ggfCByYWRpbyANCi0gICAgICB8IHN1Ym1pdCB8IHJlc2V0IHwgaGlkZGVuICkiDQotPg0KLTwhLS0gYXR0cmlidXRlIG5hbWUgcmVxdWlyZWQgZm9yIGFsbCBidXQgc3VibWl0ICYgcmVzZXQNCi0tLT4NCi08IUFUVExJU1QgJWlucHV0LnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIHR5cGUgICAgICAgICAlSW5wdXRUeXBlLmNsYXNzOyAgICAgICAgJ3RleHQnDQotICAgICAgbmFtZSAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHZhbHVlICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBjaGVja2VkICAgICAgKCBjaGVja2VkICkgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgc2l6ZSAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIG1heGxlbmd0aCAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0gICAgICBzcmMgICAgICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgdGFiaW5kZXggICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgIGFjY2Vzc2tleSAgICAlQ2hhcmFjdGVyLmRhdGF0eXBlOyAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgaW5wdXQuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIHNlbGVjdDogT3B0aW9uIFNlbGVjdG9yIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIHNlbGVjdC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVzZWxlY3QuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBzZWxlY3QuY29udGVudCAgIiggJW9wdGlvbi5xbmFtZTsgKSsiID4NCi08IUVMRU1FTlQgJXNlbGVjdC5xbmFtZTsgICVzZWxlY3QuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHNlbGVjdC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc2VsZWN0LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXNlbGVjdC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXNlbGVjdC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBuYW1lICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgc2l6ZSAgICAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgIG11bHRpcGxlICAgICAoIG11bHRpcGxlICkgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICB0YWJpbmRleCAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIHNlbGVjdC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gb3B0aW9uOiBTZWxlY3RhYmxlIENob2ljZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgb3B0aW9uLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJW9wdGlvbi5lbGVtZW50O1sNCi08IUVOVElUWSAlIG9wdGlvbi5jb250ZW50ICAiKCAjUENEQVRBICkiID4NCi08IUVMRU1FTlQgJW9wdGlvbi5xbmFtZTsgICVvcHRpb24uY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIG9wdGlvbi5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgb3B0aW9uLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJW9wdGlvbi5hdHRsaXN0O1sNCi08IUFUVExJU1QgJW9wdGlvbi5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBzZWxlY3RlZCAgICAgKCBzZWxlY3RlZCApICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgdmFsdWUgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBvcHRpb24uYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIHRleHRhcmVhOiBNdWx0aS1MaW5lIFRleHQgRmllbGQgLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIHRleHRhcmVhLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXRleHRhcmVhLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgdGV4dGFyZWEuY29udGVudCAgIiggI1BDREFUQSApIiA+DQotPCFFTEVNRU5UICV0ZXh0YXJlYS5xbmFtZTsgICV0ZXh0YXJlYS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgdGV4dGFyZWEuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHRleHRhcmVhLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXRleHRhcmVhLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAldGV4dGFyZWEucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgbmFtZSAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHJvd3MgICAgICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI1JFUVVJUkVEDQotICAgICAgY29scyAgICAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjUkVRVUlSRUQNCi0gICAgICB0YWJpbmRleCAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgYWNjZXNza2V5ICAgICVDaGFyYWN0ZXIuZGF0YXR5cGU7ICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiB0ZXh0YXJlYS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWJhc2ljLWZvcm0tMS5tb2QgLS0+DQotDQotDQotPCEtLSBMaW5rIEVsZW1lbnQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtbGluay5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBMaW5rIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWxpbmstMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBMaW5rIEVsZW1lbnQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtbGluay0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgTGluayBFbGVtZW50IDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWxpbmstMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gTGluayBlbGVtZW50DQotDQotICAgICAgICBsaW5rDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgbGluayBlbGVtZW50IHR5cGUgYW5kIGl0cyBhdHRyaWJ1dGVzLA0KLSAgICAgd2hpY2ggY291bGQgKGluIHByaW5jaXBsZSkgYmUgdXNlZCB0byBkZWZpbmUgZG9jdW1lbnQtbGV2ZWwgbGlua3MNCi0gICAgIHRvIGV4dGVybmFsIHJlc291cmNlcyBzdWNoIGFzOg0KLQ0KLSAgICAgYSkgZm9yIGRvY3VtZW50IHNwZWNpZmljIHRvb2xiYXJzL21lbnVzLCBlLmcuIHN0YXJ0LCBjb250ZW50cywNCi0gICAgICAgIHByZXZpb3VzLCBuZXh0LCBpbmRleCwgZW5kLCBoZWxwDQotICAgICBiKSB0byBsaW5rIHRvIGEgc2VwYXJhdGUgc3R5bGUgc2hlZXQgKHJlbD0ic3R5bGVzaGVldCIpDQotICAgICBjKSB0byBtYWtlIGEgbGluayB0byBhIHNjcmlwdCAocmVsPSJzY3JpcHQiKQ0KLSAgICAgZCkgYnkgc3R5bGUgc2hlZXRzIHRvIGNvbnRyb2wgaG93IGNvbGxlY3Rpb25zIG9mIGh0bWwgbm9kZXMgYXJlDQotICAgICAgICByZW5kZXJlZCBpbnRvIHByaW50ZWQgZG9jdW1lbnRzDQotICAgICBlKSB0byBtYWtlIGEgbGluayB0byBhIHByaW50YWJsZSB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQNCi0gICAgICAgIGUuZy4gYSBwb3N0c2NyaXB0IG9yIHBkZiB2ZXJzaW9uIChyZWw9ImFsdGVybmF0ZSIgbWVkaWE9InByaW50IikNCi0tLT4NCi0NCi08IS0tIGxpbms6IE1lZGlhLUluZGVwZW5kZW50IExpbmsgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGxpbmsuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslbGluay5lbGVtZW50O1sNCi08IUVOVElUWSAlIGxpbmsuY29udGVudCAgIkVNUFRZIiA+DQotPCFFTlRJVFkgJSBsaW5rLnFuYW1lICAibGluayIgPg0KLTwhRUxFTUVOVCAlbGluay5xbmFtZTsgICVsaW5rLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBsaW5rLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBsaW5rLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWxpbmsuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVsaW5rLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIGNoYXJzZXQgICAgICAlQ2hhcnNldC5kYXRhdHlwZTsgICAgICAgI0lNUExJRUQNCi0gICAgICBocmVmICAgICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgaHJlZmxhbmcgICAgICVMYW5ndWFnZUNvZGUuZGF0YXR5cGU7ICAjSU1QTElFRA0KLSAgICAgIHR5cGUgICAgICAgICAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICAgI0lNUExJRUQNCi0gICAgICByZWwgICAgICAgICAgJUxpbmtUeXBlcy5kYXRhdHlwZTsgICAgICNJTVBMSUVEDQotICAgICAgcmV2ICAgICAgICAgICVMaW5rVHlwZXMuZGF0YXR5cGU7ICAgICAjSU1QTElFRA0KLSAgICAgIG1lZGlhICAgICAgICAlTWVkaWFEZXNjLmRhdGF0eXBlOyAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgbGluay5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWxpbmstMS5tb2QgLS0+DQotDQotDQotPCEtLSBEb2N1bWVudCBNZXRhaW5mb3JtYXRpb24gTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtbWV0YS5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBNZXRhaW5mb3JtYXRpb24gMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLW1ldGEtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBEb2N1bWVudCBNZXRhaW5mb3JtYXRpb24gTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtbWV0YS0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgTWV0YWluZm9ybWF0aW9uIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLW1ldGEtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gTWV0YSBJbmZvcm1hdGlvbg0KLQ0KLSAgICAgICAgbWV0YQ0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIG1ldGEgZWxlbWVudCB0eXBlIGFuZCBpdHMgYXR0cmlidXRlcywNCi0gICAgIHVzZWQgdG8gcHJvdmlkZSBkZWNsYXJhdGl2ZSBkb2N1bWVudCBtZXRhaW5mb3JtYXRpb24uDQotLS0+DQotDQotPCEtLSBtZXRhOiBHZW5lcmljIE1ldGFpbmZvcm1hdGlvbiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBtZXRhLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJW1ldGEuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBtZXRhLmNvbnRlbnQgICJFTVBUWSIgPg0KLTwhRU5USVRZICUgbWV0YS5xbmFtZSAgIm1ldGEiID4NCi08IUVMRU1FTlQgJW1ldGEucW5hbWU7ICAlbWV0YS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgbWV0YS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgbWV0YS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVtZXRhLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlbWV0YS5xbmFtZTsNCi0gICAgICAlWEhUTUwueG1sbnMuYXR0cmliOw0KLSAgICAgICVJMThuLmF0dHJpYjsNCi0gICAgICBodHRwLWVxdWl2ICAgTk1UT0tFTiAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgbmFtZSAgICAgICAgIE5NVE9LRU4gICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGNvbnRlbnQgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgc2NoZW1lICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBtZXRhLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtbWV0YS0xLm1vZCAtLT4NCi0NCi0NCi08IS0tIEJhc2UgRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1iYXNlLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJhc2UgRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmFzZS0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIEJhc2UgRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1iYXNlLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNlIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmFzZS0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBCYXNlIGVsZW1lbnQNCi0NCi0gICAgICAgIGJhc2UNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBiYXNlIGVsZW1lbnQgdHlwZSBhbmQgaXRzIGF0dHJpYnV0ZXMsDQotICAgICB1c2VkIHRvIGRlZmluZSBhIGJhc2UgVVJJIGFnYWluc3Qgd2hpY2ggcmVsYXRpdmUgVVJJcyBpbiB0aGUNCi0gICAgIGRvY3VtZW50IHdpbGwgYmUgcmVzb2x2ZWQuDQotDQotICAgICBOb3RlIHRoYXQgdGhpcyBtb2R1bGUgYWxzbyByZWRlY2xhcmVzIHRoZSBjb250ZW50IG1vZGVsIGZvcg0KLSAgICAgdGhlIGhlYWQgZWxlbWVudCB0byBpbmNsdWRlIHRoZSBiYXNlIGVsZW1lbnQuDQotLS0+DQotDQotPCEtLSBiYXNlOiBEb2N1bWVudCBCYXNlIFVSSSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBiYXNlLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWJhc2UuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBiYXNlLmNvbnRlbnQgICJFTVBUWSIgPg0KLTwhRU5USVRZICUgYmFzZS5xbmFtZSAgImJhc2UiID4NCi08IUVMRU1FTlQgJWJhc2UucW5hbWU7ICAlYmFzZS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgYmFzZS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYmFzZS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyViYXNlLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlYmFzZS5xbmFtZTsNCi0gICAgICAlWEhUTUwueG1sbnMuYXR0cmliOw0KLSAgICAgIGhyZWYgICAgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI1JFUVVJUkVEDQotPg0KLTwhLS0gZW5kIG9mIGJhc2UuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGhlYWQuY29udGVudA0KLSAgICAiKCAlSGVhZE9wdHMubWl4OywNCi0gICAgICggKCAldGl0bGUucW5hbWU7LCAlSGVhZE9wdHMubWl4OywgKCAlYmFzZS5xbmFtZTssICVIZWFkT3B0cy5taXg7ICk/ICkNCi0gICAgIHwgKCAlYmFzZS5xbmFtZTssICVIZWFkT3B0cy5taXg7LCAoICV0aXRsZS5xbmFtZTssICVIZWFkT3B0cy5taXg7ICkpKSkiDQotPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWJhc2UtMS5tb2QgLS0+DQotDQotDQotPCEtLSBTdHlsZXNoZWV0cyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtc3R5bGUubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBTdHlsZSBTaGVldHMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXN0eWxlLTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBEb2N1bWVudCBTdHlsZSBTaGVldCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtc3R5bGUtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCBTdHlsZSBTaGVldHMgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtc3R5bGUtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gU3R5bGUgU2hlZXRzDQotDQotICAgICAgICBzdHlsZQ0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIHN0eWxlIGVsZW1lbnQgdHlwZSBhbmQgaXRzIGF0dHJpYnV0ZXMsDQotICAgICB1c2VkIHRvIGVtYmVkIHN0eWxlIHNoZWV0IGluZm9ybWF0aW9uIGluIHRoZSBkb2N1bWVudCBoZWFkIGVsZW1lbnQuDQotLS0+DQotDQotPCEtLSBzdHlsZTogU3R5bGUgU2hlZXQgSW5mb3JtYXRpb24gLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBzdHlsZS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVzdHlsZS5lbGVtZW50O1sNCi08IUVOVElUWSAlIHN0eWxlLmNvbnRlbnQgICIoICNQQ0RBVEEgKSIgPg0KLTwhRU5USVRZICUgc3R5bGUucW5hbWUgICJzdHlsZSIgPg0KLTwhRUxFTUVOVCAlc3R5bGUucW5hbWU7ICAlc3R5bGUuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHN0eWxlLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzdHlsZS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVzdHlsZS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXN0eWxlLnFuYW1lOw0KLSAgICAgICVYSFRNTC54bWxucy5hdHRyaWI7DQotICAgICAgJXRpdGxlLmF0dHJpYjsNCi0gICAgICAlSTE4bi5hdHRyaWI7DQotICAgICAgdHlwZSAgICAgICAgICVDb250ZW50VHlwZS5kYXRhdHlwZTsgICAjUkVRVUlSRUQNCi0gICAgICBtZWRpYSAgICAgICAgJU1lZGlhRGVzYy5kYXRhdHlwZTsgICAgICNJTVBMSUVEDQotICAgICAgeG1sOnNwYWNlICAgICggcHJlc2VydmUgKSAgICAgICAgICAgICAjRklYRUQgJ3ByZXNlcnZlJw0KLT4NCi08IS0tIGVuZCBvZiBzdHlsZS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLXN0eWxlLTEubW9kIC0tPg0KLQ0KLQ0KLTwhLS0gUGFyYW0gRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXBhcmFtLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIFBhcmFtIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXBhcmFtLTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgUGFyYW0gRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1wYXJhbS0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgUGFyYW0gRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1wYXJhbS0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBQYXJhbWV0ZXJzIGZvciBKYXZhIEFwcGxldHMgYW5kIEVtYmVkZGVkIE9iamVjdHMNCi0NCi0gICAgICAgIHBhcmFtDQotDQotICAgICBUaGlzIG1vZHVsZSBwcm92aWRlcyBkZWNsYXJhdGlvbnMgZm9yIHRoZSBwYXJhbSBlbGVtZW50LA0KLSAgICAgdXNlZCB0byBwcm92aWRlIG5hbWVkIHByb3BlcnR5IHZhbHVlcyBmb3IgdGhlIGFwcGxldA0KLSAgICAgYW5kIG9iamVjdCBlbGVtZW50cy4NCi0tLT4NCi0NCi08IS0tIHBhcmFtOiBOYW1lZCBQcm9wZXJ0eSBWYWx1ZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIHBhcmFtLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXBhcmFtLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgcGFyYW0uY29udGVudCAgIkVNUFRZIiA+DQotPCFFTlRJVFkgJSBwYXJhbS5xbmFtZSAgInBhcmFtIiA+DQotPCFFTEVNRU5UICVwYXJhbS5xbmFtZTsgICVwYXJhbS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgcGFyYW0uZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHBhcmFtLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXBhcmFtLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlcGFyYW0ucW5hbWU7DQotICAgICAgJVhIVE1MLnhtbG5zLmF0dHJpYjsNCi0gICAgICAlaWQuYXR0cmliOw0KLSAgICAgIG5hbWUgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgdmFsdWUgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHZhbHVldHlwZSAgICAoIGRhdGEgfCByZWYgfCBvYmplY3QgKSAgJ2RhdGEnDQotICAgICAgdHlwZSAgICAgICAgICVDb250ZW50VHlwZS5kYXRhdHlwZTsgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBwYXJhbS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLXBhcmFtLTEubW9kIC0tPg0KLQ0KLQ0KLTwhLS0gRW1iZWRkZWQgT2JqZWN0IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLW9iamVjdC5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBFbWJlZGRlZCBPYmplY3QgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLW9iamVjdC0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIEVtYmVkZGVkIE9iamVjdCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1vYmplY3QtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEVtYmVkZGVkIE9iamVjdCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1vYmplY3QtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gRW1iZWRkZWQgT2JqZWN0cw0KLQ0KLSAgICAgICAgb2JqZWN0DQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgb2JqZWN0IGVsZW1lbnQgdHlwZSBhbmQgaXRzIGF0dHJpYnV0ZXMsIHVzZWQNCi0gICAgIHRvIGVtYmVkIGV4dGVybmFsIG9iamVjdHMgYXMgcGFydCBvZiBYSFRNTCBwYWdlcy4gSW4gdGhlIGRvY3VtZW50LA0KLSAgICAgcGxhY2UgcGFyYW0gZWxlbWVudHMgcHJpb3IgdG8gb3RoZXIgY29udGVudCB3aXRoaW4gdGhlIG9iamVjdCBlbGVtZW50Lg0KLQ0KLSAgICAgTm90ZSB0aGF0IHVzZSBvZiB0aGlzIG1vZHVsZSByZXF1aXJlcyBpbnN0YW50aWF0aW9uIG9mIHRoZSBQYXJhbQ0KLSAgICAgRWxlbWVudCBNb2R1bGUuDQotLS0+DQotDQotPCEtLSBvYmplY3Q6IEdlbmVyaWMgRW1iZWRkZWQgT2JqZWN0IC4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBvYmplY3QuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslb2JqZWN0LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgb2JqZWN0LmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlRmxvdy5taXg7IHwgJXBhcmFtLnFuYW1lOyApKiINCi0+DQotPCFFTlRJVFkgJSBvYmplY3QucW5hbWUgICJvYmplY3QiID4NCi08IUVMRU1FTlQgJW9iamVjdC5xbmFtZTsgICVvYmplY3QuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIG9iamVjdC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgb2JqZWN0LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJW9iamVjdC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJW9iamVjdC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBkZWNsYXJlICAgICAgKCBkZWNsYXJlICkgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgY2xhc3NpZCAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGNvZGViYXNlICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBkYXRhICAgICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgdHlwZSAgICAgICAgICVDb250ZW50VHlwZS5kYXRhdHlwZTsgICAjSU1QTElFRA0KLSAgICAgIGNvZGV0eXBlICAgICAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICAgI0lNUExJRUQNCi0gICAgICBhcmNoaXZlICAgICAgJVVSSXMuZGF0YXR5cGU7ICAgICAgICAgICNJTVBMSUVEDQotICAgICAgc3RhbmRieSAgICAgICVUZXh0LmRhdGF0eXBlOyAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGhlaWdodCAgICAgICAlTGVuZ3RoLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0gICAgICB3aWR0aCAgICAgICAgJUxlbmd0aC5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgbmFtZSAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHRhYmluZGV4ICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2Ygb2JqZWN0LmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtb2JqZWN0LTEubW9kIC0tPg0KLQ0KLQ0KLTwhLS0gRG9jdW1lbnQgU3RydWN0dXJlIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXN0cnVjdC5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBEb2N1bWVudCBTdHJ1Y3R1cmUgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXN0cnVjdC0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIFN0cnVjdHVyZSBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1zdHJ1Y3QtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIERvY3VtZW50IFN0cnVjdHVyZSAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1zdHJ1Y3QtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gRG9jdW1lbnQgU3RydWN0dXJlDQotDQotICAgICAgICB0aXRsZSwgaGVhZCwgYm9keSwgaHRtbA0KLQ0KLSAgICAgVGhlIFN0cnVjdHVyZSBNb2R1bGUgZGVmaW5lcyB0aGUgbWFqb3Igc3RydWN0dXJhbCBlbGVtZW50cyBhbmQNCi0gICAgIHRoZWlyIGF0dHJpYnV0ZXMuDQotDQotICAgICBOb3RlIHRoYXQgdGhlIGNvbnRlbnQgbW9kZWwgb2YgdGhlIGhlYWQgZWxlbWVudCB0eXBlIGlzIHJlZGVjbGFyZWQNCi0gICAgIHdoZW4gdGhlIEJhc2UgTW9kdWxlIGlzIGluY2x1ZGVkIGluIHRoZSBEVEQuDQotDQotICAgICBUaGUgcGFyYW1ldGVyIGVudGl0eSBjb250YWluaW5nIHRoZSBYTUwgbmFtZXNwYWNlIFVSSSB2YWx1ZSB1c2VkDQotICAgICBmb3IgWEhUTUwgaXMgJyVYSFRNTC54bWxuczsnLCBkZWZpbmVkIGluIHRoZSBRdWFsaWZpZWQgTmFtZXMgbW9kdWxlLg0KLS0tPg0KLQ0KLTwhLS0gdGl0bGU6IERvY3VtZW50IFRpdGxlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gVGhlIHRpdGxlIGVsZW1lbnQgaXMgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgZmxvdyBvZiB0ZXh0Lg0KLSAgICAgSXQgc2hvdWxkIGJlIGRpc3BsYXllZCwgZm9yIGV4YW1wbGUgYXMgdGhlIHBhZ2UgaGVhZGVyIG9yDQotICAgICB3aW5kb3cgdGl0bGUuIEV4YWN0bHkgb25lIHRpdGxlIGlzIHJlcXVpcmVkIHBlciBkb2N1bWVudC4NCi0tLT4NCi0NCi08IUVOVElUWSAlIHRpdGxlLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXRpdGxlLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgdGl0bGUuY29udGVudCAgIiggI1BDREFUQSApIiA+DQotPCFFTlRJVFkgJSB0aXRsZS5xbmFtZSAgInRpdGxlIiA+DQotPCFFTEVNRU5UICV0aXRsZS5xbmFtZTsgICV0aXRsZS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgdGl0bGUuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHRpdGxlLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXRpdGxlLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAldGl0bGUucW5hbWU7DQotICAgICAgJVhIVE1MLnhtbG5zLmF0dHJpYjsNCi0gICAgICAlSTE4bi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHRpdGxlLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBoZWFkOiBEb2N1bWVudCBIZWFkIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBoZWFkLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWhlYWQuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBoZWFkLmNvbnRlbnQNCi0gICAgIiggJUhlYWRPcHRzLm1peDssICV0aXRsZS5xbmFtZTssICVIZWFkT3B0cy5taXg7ICkiDQotPg0KLTwhRU5USVRZICUgaGVhZC5xbmFtZSAgImhlYWQiID4NCi08IUVMRU1FTlQgJWhlYWQucW5hbWU7ICAlaGVhZC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaGVhZC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaGVhZC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVoZWFkLmF0dGxpc3Q7Ww0KLTwhLS0gcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2Ugd2l0aCBkb2N1bWVudCBwcm9maWxlcw0KLS0tPg0KLTwhRU5USVRZICUgcHJvZmlsZS5hdHRyaWINCi0gICAgICJwcm9maWxlICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICclWEhUTUwucHJvZmlsZTsnIg0KLT4NCi0NCi08IUFUVExJU1QgJWhlYWQucW5hbWU7DQotICAgICAgJVhIVE1MLnhtbG5zLmF0dHJpYjsNCi0gICAgICAlSTE4bi5hdHRyaWI7DQotICAgICAgJXByb2ZpbGUuYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBoZWFkLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBib2R5OiBEb2N1bWVudCBCb2R5IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBib2R5LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWJvZHkuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBib2R5LmNvbnRlbnQNCi0gICAgICIoICVCbG9jay5taXg7ICkrIg0KLT4NCi08IUVOVElUWSAlIGJvZHkucW5hbWUgICJib2R5IiA+DQotPCFFTEVNRU5UICVib2R5LnFuYW1lOyAgJWJvZHkuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGJvZHkuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGJvZHkuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslYm9keS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWJvZHkucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGJvZHkuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGh0bWw6IFhIVE1MIERvY3VtZW50IEVsZW1lbnQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGh0bWwuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaHRtbC5lbGVtZW50O1sNCi08IUVOVElUWSAlIGh0bWwuY29udGVudCAgIiggJWhlYWQucW5hbWU7LCAlYm9keS5xbmFtZTsgKSIgPg0KLTwhRU5USVRZICUgaHRtbC5xbmFtZSAgImh0bWwiID4NCi08IUVMRU1FTlQgJWh0bWwucW5hbWU7ICAlaHRtbC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaHRtbC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaHRtbC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVodG1sLmF0dGxpc3Q7Ww0KLTwhLS0gdmVyc2lvbiBhdHRyaWJ1dGUgdmFsdWUgZGVmaW5lZCBpbiBkcml2ZXINCi0tLT4NCi08IUVOVElUWSAlIFhIVE1MLnZlcnNpb24uYXR0cmliDQotICAgICAidmVyc2lvbiAgICAgICVGUEkuZGF0YXR5cGU7ICAgICAgICAgICAjRklYRUQgJyVYSFRNTC52ZXJzaW9uOyciDQotPg0KLQ0KLTwhLS0gc2VlIHRoZSBRdWFsaWZpZWQgTmFtZXMgbW9kdWxlIGZvciBpbmZvcm1hdGlvbg0KLSAgICAgb24gaG93IHRvIGV4dGVuZCBYSFRNTCB1c2luZyBYTUwgbmFtZXNwYWNlcw0KLS0tPg0KLTwhQVRUTElTVCAlaHRtbC5xbmFtZTsNCi0gICAgICAlWEhUTUwueG1sbnMuYXR0cmliOw0KLSAgICAgICVYSFRNTC52ZXJzaW9uLmF0dHJpYjsNCi0gICAgICAlSTE4bi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGh0bWwuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1zdHJ1Y3QtMS5tb2QgLS0+DQotDQotDQotPCEtLSBCbG9jayBQcmVzZW50YXRpb24gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWJsa3ByZXMubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCbG9jayBQcmVzZW50YXRpb24gMS4wLy9FTiINCi0gCQkiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJsa3ByZXMtMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIEJsb2NrIFByZXNlbnRhdGlvbiBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1ibGtwcmVzLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCbG9jayBQcmVzZW50YXRpb24gMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmxrcHJlcy0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBCbG9jayBQcmVzZW50YXRpb25hbCBFbGVtZW50cw0KLQ0KLSAgICAgICAgaHINCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBlbGVtZW50cyBhbmQgdGhlaXIgYXR0cmlidXRlcyB1c2VkIHRvDQotICAgICBzdXBwb3J0IGJsb2NrLWxldmVsIHByZXNlbnRhdGlvbmFsIG1hcmt1cC4NCi0tLT4NCi0NCi08IUVOVElUWSAlIGhyLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWhyLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaHIuY29udGVudCAgIkVNUFRZIiA+DQotPCFFTlRJVFkgJSBoci5xbmFtZSAgImhyIiA+DQotPCFFTEVNRU5UICVoci5xbmFtZTsgICVoci5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaHIuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGhyLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWhyLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlaHIucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGhyLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtYmxrcHJlcy0xLm1vZCAtLT4NCi0NCi0NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIA0KLQlJbmxpbmUgUHJlc2VudGF0aW9uOiBiLCBiaWcsIGksIHNtYWxsCQkNCi0tLT4NCi08IUVOVElUWSAlIHN1Yi5lbGVtZW50ICJJR05PUkUiPg0KLTwhRU5USVRZICUgc3ViLmF0dGxpc3QgIklHTk9SRSI+DQotPCFFTlRJVFkgJSBzdXAuZWxlbWVudCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHN1cC5hdHRsaXN0ICJJR05PUkUiPg0KLTwhRU5USVRZICUgdHQuZWxlbWVudCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHR0LmF0dGxpc3QgIklHTk9SRSI+DQotPCFFTlRJVFkgJSB4aHRtbC1pbmxwcmVzLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW5saW5lIFByZXNlbnRhdGlvbiAxLjAvL0VOIg0KLQkJImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1pbmxwcmVzLTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBJbmxpbmUgUHJlc2VudGF0aW9uIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtaW5scHJlcy0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW5saW5lIFByZXNlbnRhdGlvbiAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1pbmxwcmVzLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIElubGluZSBQcmVzZW50YXRpb25hbCBFbGVtZW50cw0KLQ0KLSAgICAgICAgYiwgYmlnLCBpLCBzbWFsbCwgc3ViLCBzdXAsIHR0DQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgZWxlbWVudHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMgdXNlZCB0bw0KLSAgICAgc3VwcG9ydCBpbmxpbmUtbGV2ZWwgcHJlc2VudGF0aW9uYWwgbWFya3VwLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgYi5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyViLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgYi5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGIucW5hbWUgICJiIiA+DQotPCFFTEVNRU5UICViLnFuYW1lOyAgJWIuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGIuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGIuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslYi5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWIucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGIuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGJpZy5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyViaWcuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBiaWcuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBiaWcucW5hbWUgICJiaWciID4NCi08IUVMRU1FTlQgJWJpZy5xbmFtZTsgICViaWcuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGJpZy5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYmlnLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWJpZy5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWJpZy5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgYmlnLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBpLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWkuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBpLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgaS5xbmFtZSAgImkiID4NCi08IUVMRU1FTlQgJWkucW5hbWU7ICAlaS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVpLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlaS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgaS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc21hbGwuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslc21hbGwuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBzbWFsbC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIHNtYWxsLnFuYW1lICAic21hbGwiID4NCi08IUVMRU1FTlQgJXNtYWxsLnFuYW1lOyAgJXNtYWxsLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBzbWFsbC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc21hbGwuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslc21hbGwuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVzbWFsbC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2Ygc21hbGwuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHN1Yi5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVzdWIuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBzdWIuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBzdWIucW5hbWUgICJzdWIiID4NCi08IUVMRU1FTlQgJXN1Yi5xbmFtZTsgICVzdWIuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHN1Yi5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc3ViLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXN1Yi5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXN1Yi5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2Ygc3ViLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzdXAuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslc3VwLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgc3VwLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgc3VwLnFuYW1lICAic3VwIiA+DQotPCFFTEVNRU5UICVzdXAucW5hbWU7ICAlc3VwLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBzdXAuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHN1cC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVzdXAuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVzdXAucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHN1cC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgdHQuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVsldHQuZWxlbWVudDtbDQotPCFFTlRJVFkgJSB0dC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIHR0LnFuYW1lICAidHQiID4NCi08IUVMRU1FTlQgJXR0LnFuYW1lOyAgJXR0LmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiB0dC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgdHQuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVsldHQuYXR0bGlzdDtbDQotPCFBVFRMSVNUICV0dC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgdHQuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1pbmxwcmVzLTEubW9kIC0tPg0KLQ0KLQ0KLTwhLS0gZW5kIG9mIFhIVE1MIE1vYmlsZSAxLjAgRFREICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3hodG1sLW1vYmlsZTEwLW1vZGVsLTEubW9kIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAveGh0bWwtbW9iaWxlMTAtbW9kZWwtMS5tb2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MGUyNWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAveGh0bWwtbW9iaWxlMTAtbW9kZWwtMS5tb2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIE1vYmlsZSAxLjAgRG9jdW1lbnQgTW9kZWwgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1tb2JpbGUxMC1tb2RlbC0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCBNb2JpbGUsIGEgcHJvcGVyIHN1YnNldCBvZiBYSFRNTC4NCi0gICAgIAlAV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0sIEx0ZC4gMjAwMS4NCi0NCi0JVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiANCi0JV2ViIHNpdGUgKGh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL3doYXQvY29weXJpZ2h0Lmh0bSkuDQotICAgIA0KLS0tPg0KLTwhLS0gWEhUTUwgTW9iaWxlIERvY3VtZW50IE1vZGVsDQotDQotICAgICBUaGlzIG1vZHVsZSBkZXNjcmliZXMgdGhlIGdyb3VwaW5ncyBvZiBlbGVtZW50cyB0aGF0IG1ha2UgdXANCi0gICAgIGNvbW1vbiBjb250ZW50IG1vZGVscyBmb3IgWEhUTUwgZWxlbWVudHMuDQotLS0+DQotDQotPCEtLSBPcHRpb25hbCBFbGVtZW50cyBpbiBoZWFkICAuLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIEhlYWRPcHRzLm1peA0KLSAgICAgIiggJW1ldGEucW5hbWU7IHwgJWxpbmsucW5hbWU7IHwgJW9iamVjdC5xbmFtZTsgfCAlc3R5bGUucW5hbWU7ICkqIiA+DQotDQotPCEtLSBNaXNjZWxsYW5lb3VzIEVsZW1lbnRzICAuLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIE1pc2MuY2xhc3MgIiIgPg0KLQ0KLTwhLS0gSW5saW5lIEVsZW1lbnRzICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBJbmxTdHJ1Y3QuY2xhc3MgIiVici5xbmFtZTsgfCAlc3Bhbi5xbmFtZTsiID4NCi0NCi08IUVOVElUWSAlIElubFBocmFzLmNsYXNzDQotICAgICAifCAlZW0ucW5hbWU7IHwgJXN0cm9uZy5xbmFtZTsgfCAlZGZuLnFuYW1lOyB8ICVjb2RlLnFuYW1lOw0KLSAgICAgIHwgJXNhbXAucW5hbWU7IHwgJWtiZC5xbmFtZTsgfCAldmFyLnFuYW1lOyB8ICVjaXRlLnFuYW1lOw0KLSAgICAgIHwgJWFiYnIucW5hbWU7IHwgJWFjcm9ueW0ucW5hbWU7IHwgJXEucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBJbmxQcmVzLmNsYXNzDQotICAgICAifCAlaS5xbmFtZTsgfCAlYi5xbmFtZTsgfCAlYmlnLnFuYW1lOyB8ICVzbWFsbC5xbmFtZTsgIiA+DQotDQotDQotPCFFTlRJVFkgJSBJMThuLmNsYXNzICIiID4NCi0NCi08IUVOVElUWSAlIEFuY2hvci5jbGFzcyAifCAlYS5xbmFtZTsiID4NCi0NCi08IUVOVElUWSAlIElubFNwZWNpYWwuY2xhc3MgInwgJWltZy5xbmFtZTsgfCAlb2JqZWN0LnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgSW5sRm9ybS5jbGFzcw0KLSAgICAgInwgJWlucHV0LnFuYW1lOyB8ICVzZWxlY3QucW5hbWU7IHwgJXRleHRhcmVhLnFuYW1lOw0KLSAgICAgIHwgJWxhYmVsLnFuYW1lOyINCi0+DQotDQotPCFFTlRJVFkgJSBJbmxpbmUuZXh0cmEgIiIgPg0KLQ0KLTwhRU5USVRZICUgSW5saW5lLmNsYXNzDQotICAgICAiJUlubFN0cnVjdC5jbGFzczsNCi0gICAgICAlSW5sUGhyYXMuY2xhc3M7DQotICAgICAgJUFuY2hvci5jbGFzczsNCi0gICAgICAlSW5sU3BlY2lhbC5jbGFzczsNCi0gICAgICAlSW5sRm9ybS5jbGFzczsNCi0gICAgICAlSW5saW5lLmV4dHJhOyINCi0+DQotDQotPCFFTlRJVFkgJSBJbmxOb0FuY2hvci5jbGFzcw0KLSAgICAgIiVJbmxTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUlubFBocmFzLmNsYXNzOw0KLSAgICAgICVJbmxTcGVjaWFsLmNsYXNzOw0KLSAgICAgICVJbmxGb3JtLmNsYXNzOw0KLSAgICAgICVJbmxpbmUuZXh0cmE7Ig0KLT4NCi0NCi08IUVOVElUWSAlIElubE5vQW5jaG9yLm1peA0KLSAgICAgIiVJbmxOb0FuY2hvci5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiDQotPg0KLQ0KLTwhRU5USVRZICUgSW5saW5lLm1peA0KLSAgICAgIiVJbmxpbmUuY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ig0KLT4NCi0NCi08IS0tIEJsb2NrIEVsZW1lbnRzICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgSGVhZGluZy5jbGFzcw0KLSAgICAgIiVoMS5xbmFtZTsgfCAlaDIucW5hbWU7IHwgJWgzLnFuYW1lOw0KLSAgICAgIHwgJWg0LnFuYW1lOyB8ICVoNS5xbmFtZTsgfCAlaDYucW5hbWU7Ig0KLT4NCi08IUVOVElUWSAlIExpc3QuY2xhc3MgICIldWwucW5hbWU7IHwgJW9sLnFuYW1lOyB8ICVkbC5xbmFtZTsiID4NCi0NCi08IUVOVElUWSAlIFRhYmxlLmNsYXNzICJ8ICV0YWJsZS5xbmFtZTsiID4NCi0NCi08IUVOVElUWSAlIEZvcm0uY2xhc3MgICJ8ICVmb3JtLnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgRmllbGRzZXQuY2xhc3MgICJ8ICVmaWVsZHNldC5xbmFtZTsiID4NCi0NCi08IUVOVElUWSAlIEJsa1N0cnVjdC5jbGFzcyAiJXAucW5hbWU7IHwgJWRpdi5xbmFtZTsiID4NCi0NCi08IUVOVElUWSAlIEJsa1BocmFzLmNsYXNzDQotICAgICAifCAlcHJlLnFuYW1lOyB8ICVibG9ja3F1b3RlLnFuYW1lOyB8ICVhZGRyZXNzLnFuYW1lOyINCi0+DQotDQotPCFFTlRJVFkgJSBCbGtQcmVzLmNsYXNzICJ8ICVoci5xbmFtZTsiID4NCi0NCi08IUVOVElUWSAlIEJsa1NwZWNpYWwuY2xhc3MNCi0gICAgICIlVGFibGUuY2xhc3M7DQotICAgICAgJUZvcm0uY2xhc3M7DQotICAgICAgJUZpZWxkc2V0LmNsYXNzOyINCi0+DQotDQotPCFFTlRJVFkgJSBCbG9jay5leHRyYSAiIiA+DQotDQotPCFFTlRJVFkgJSBCbG9jay5jbGFzcw0KLSAgICAgIiVCbGtTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUJsa1BocmFzLmNsYXNzOw0KLSAgICAgICVCbGtQcmVzLmNsYXNzOw0KLSAgICAgICVCbGtTcGVjaWFsLmNsYXNzOw0KLSAgICAgICVCbG9jay5leHRyYTsiDQotPg0KLQ0KLTwhRU5USVRZICUgQmxrTm9Gb3JtLm1peA0KLSAgICAgIiVIZWFkaW5nLmNsYXNzOw0KLSAgICAgIHwgJUxpc3QuY2xhc3M7DQotICAgICAgfCAlQmxrU3RydWN0LmNsYXNzOw0KLSAgICAgICVCbGtQaHJhcy5jbGFzczsNCi0gICAgICAlQmxrUHJlcy5jbGFzczsNCi0gICAgICAlVGFibGUuY2xhc3M7DQotICAgICAgJUJsb2NrLmV4dHJhOw0KLSAgICAgICVNaXNjLmNsYXNzOyINCi0+DQotDQotPCFFTlRJVFkgJSBCbG9jay5taXgNCi0gICAgICIlSGVhZGluZy5jbGFzczsNCi0gICAgICB8ICVMaXN0LmNsYXNzOw0KLSAgICAgIHwgJUJsb2NrLmNsYXNzOw0KLSAgICAgICVNaXNjLmNsYXNzOyINCi0+DQotDQotPCEtLSBBbGwgQ29udGVudCBFbGVtZW50cyAgLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIGRlY2xhcmVzIGFsbCBjb250ZW50IGV4Y2VwdCB0YWJsZXMNCi0tLT4NCi08IUVOVElUWSAlIEZsb3dOb1RhYmxlLm1peA0KLSAgICAgIiVIZWFkaW5nLmNsYXNzOw0KLSAgICAgIHwgJUxpc3QuY2xhc3M7DQotICAgICAgfCAlQmxrU3RydWN0LmNsYXNzOw0KLSAgICAgICVCbGtQaHJhcy5jbGFzczsNCi0gICAgICAlRm9ybS5jbGFzczsNCi0gICAgICAlQmxvY2suZXh0cmE7DQotICAgICAgfCAlSW5saW5lLmNsYXNzOw0KLSAgICAgICVNaXNjLmNsYXNzOyINCi0+DQotDQotDQotPCFFTlRJVFkgJSBGbG93Lm1peA0KLSAgICAgIiVIZWFkaW5nLmNsYXNzOw0KLSAgICAgIHwgJUxpc3QuY2xhc3M7DQotICAgICAgfCAlQmxvY2suY2xhc3M7DQotICAgICAgfCAlSW5saW5lLmNsYXNzOw0KLSAgICAgICVNaXNjLmNsYXNzOyINCi0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtbW9iaWxlMTAtbW9kZWwtMS5tb2QgLS0+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAveGh0bWwtbW9iaWxlMTAuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAveGh0bWwtbW9iaWxlMTAuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWI2YjJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3hodG1sLW1vYmlsZTEwLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDE4OSArMCwwIEBACi08IS0tIFhIVE1MIE1vYmlsZSAxLjAgRFREICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1tb2JpbGUxMC5kdGQgLS0+DQotPCEtLSANCi0gICAgIFRoaXMgaXMgWEhUTUwgTW9iaWxlIHByb2ZpbGUsIGEgcHJvcGVyIHN1YnNldCBvZiBYSFRNTC4NCi0gICAgIA0KLSAgICAgCUBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSwgTHRkLiAyMDAxLg0KLQ0KLQlUZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIA0KLQlXZWIgc2l0ZSAoaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvd2hhdC9jb3B5cmlnaHQuaHRtKS4NCi0gICAgDQotLS0+DQotPCEtLSBUaGlzIGlzIHRoZSBkcml2ZXIgZmlsZSBmb3IgdmVyc2lvbiAxLjAgb2YgdGhlIFhIVE1MIE1vYmlsZSBEVEQuDQotDQotICAgICBUaGlzIERURCBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgIFBVQkxJQzogIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iDQotICAgICBTWVNURU06ICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQveGh0bWwtbW9iaWxlMTAuZHRkIg0KLS0tPg0KLTwhRU5USVRZICUgWEhUTUwudmVyc2lvbiAgIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iID4NCi0NCi08IS0tIFVzZSB0aGlzIFVSSSB0byBpZGVudGlmeSB0aGUgZGVmYXVsdCBuYW1lc3BhY2U6DQotDQotICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiDQotDQotICAgICBTZWUgdGhlIFF1YWxpZmllZCBOYW1lcyBtb2R1bGUgZm9yIGluZm9ybWF0aW9uDQotICAgICBvbiB0aGUgdXNlIG9mIG5hbWVzcGFjZSBwcmVmaXhlcyBpbiB0aGUgRFRELg0KLS0tPg0KLTwhRU5USVRZICUgTlMucHJlZml4ZWQgIklHTk9SRSIgPg0KLTwhRU5USVRZICUgWEhUTUwucHJlZml4ICAiIiA+DQotDQotPCEtLSBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSB1c2luZyBYSFRNTCBNb2JpbGUgMS4wIGRpcmVjdGx5LCB1c2UNCi0gICAgIHRoZSBGUEkgaW4gdGhlIERPQ1RZUEUgZGVjbGFyYXRpb24sIHdpdGggdGhlIHhtbG5zIGF0dHJpYnV0ZQ0KLSAgICAgb24gdGhlIGRvY3VtZW50IGVsZW1lbnQgdG8gaWRlbnRpZnkgdGhlIGRlZmF1bHQgbmFtZXNwYWNlOg0KLQ0KLSAgICAgICAgIDw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLSAgICAgICAgIDwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiINCi0gICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC94aHRtbC1tb2JpbGUxMC5kdGQiID4NCi0gICAgICAgICA8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCINCi0gICAgICAgICAgICAgICB4bWw6bGFuZz0iZW4iID4NCi0gICAgICAgICAuLi4NCi0gICAgICAgICA8L2h0bWw+DQotLS0+DQotDQotPCEtLSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSB3aXRoIGRvY3VtZW50IHByb2ZpbGVzIC0tPg0KLTwhRU5USVRZICUgWEhUTUwucHJvZmlsZSAgIiIgPg0KLQ0KLTwhLS0gSW5saW5lIFN0eWxlIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWlubHN0eWxlLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIElubGluZSBTdHlsZSAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW5sc3R5bGUtMS5tb2QiID4NCi0leGh0bWwtaW5sc3R5bGUubW9kOw0KLQ0KLTwhLS0gRG9jdW1lbnQgTW9kZWwgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLW1vZGVsLm1vZA0KLSAgICAgUFVCTElDICItLy9XQVBGT1JVTS8vRU5USVRJRVMgWEhUTUwgTW9iaWxlIDEuMCBEb2N1bWVudCBNb2RlbCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQveGh0bWwtbW9iaWxlMTAtbW9kZWwtMS5tb2QiID4NCi0NCi08IS0tIFhIVE1MIEZyYW1ld29yayAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgWEhUTUwuYmlkaSAgIklHTk9SRSIgPg0KLTwhRU5USVRZICUgeGh0bWwtZnJhbWV3b3JrLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIE1vZHVsYXIgRnJhbWV3b3JrIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1mcmFtZXdvcmstMS5tb2QiID4NCi0leGh0bWwtZnJhbWV3b3JrLm1vZDsNCi0NCi08IS0tIFhIVE1MIENvcmUgTW9kdWxlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgcHJlLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEENCi0gICAgICB8ICVJbmxTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUlubFBocmFzLmNsYXNzOw0KLSAgICAgICVBbmNob3IuY2xhc3M7DQotICAgICAgJUlubGluZS5leHRyYTsgKSoiDQotPg0KLQ0KLTwhRU5USVRZICUgeGh0bWwtdGV4dC5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBUZXh0IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC10ZXh0LTEubW9kIiA+DQotJXhodG1sLXRleHQubW9kOw0KLQ0KLTwhRU5USVRZICUgeGh0bWwtaHlwZXJ0ZXh0Lm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEh5cGVydGV4dCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaHlwZXJ0ZXh0LTEubW9kIiA+DQotJXhodG1sLWh5cGVydGV4dC5tb2Q7DQotDQotPCFFTlRJVFkgJSB4aHRtbC1saXN0Lm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIExpc3RzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1saXN0LTEubW9kIiA+DQotJXhodG1sLWxpc3QubW9kOw0KLTwhLS0gRXh0ZW5kIGxpc3RzIHdpdGggdmFsdWUgYW5kIHN0YXJ0IGF0dHJpYnV0ZXMgLS0+IA0KLTwhQVRUTElTVCAlbGkucW5hbWU7DQotICAgICAgdmFsdWUgICAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAgI0lNUExJRUQNCi0+DQotPCFBVFRMSVNUICVvbC5xbmFtZTsNCi0gICAgICBzdGFydCAgICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLTwhLS0gOjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjogLS0+DQotDQotPCEtLSBJbWFnZSBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtaW1hZ2UubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW1hZ2VzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1pbWFnZS0xLm1vZCIgPg0KLSV4aHRtbC1pbWFnZS5tb2Q7DQotDQotPCEtLSBUYWJsZXMgTW9kdWxlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtdGFibGUubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzaWMgVGFibGVzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1iYXNpYy10YWJsZS0xLm1vZCIgPg0KLSV4aHRtbC10YWJsZS5tb2Q7DQotDQotPCEtLSBGb3JtcyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIA0KLQlYSFRNTCBiYXNpYyBmb3JtcyBtb2R1bGUgZXh0ZW5kZWQgd2l0aCBvcHRncm91cCBhbmQgZmllbGRzZXQNCi0tLT4NCi08IUVMRU1FTlQgJW9wdGdyb3VwLnFuYW1lOyAoJW9wdGlvbi5xbmFtZTspKz4NCi08IUFUVExJU1QgJW9wdGdyb3VwLnFuYW1lOw0KLQklQ29tbW9uLmF0dHJpYjsgDQotCWxhYmVsICVUZXh0LmRhdGF0eXBlOyAjUkVRVUlSRUQNCi0+DQotPCFFTlRJVFkgJSBzZWxlY3QuY29udGVudCAiKCAlb3B0Z3JvdXAucW5hbWU7IHwgJW9wdGlvbi5xbmFtZTsgKSsiPg0KLTwhRUxFTUVOVCAlZmllbGRzZXQucW5hbWU7ICgjUENEQVRBIHwgJUZsb3cubWl4OykqPg0KLTwhQVRUTElTVCAlZmllbGRzZXQucW5hbWU7DQotCSVDb21tb24uYXR0cmliOyANCi0+DQotPCFFTlRJVFkgJSBmb3JtLmNvbnRlbnQgIiggJUJsa05vRm9ybS5taXg7IHwgJWZpZWxkc2V0LnFuYW1lOyApKyI+DQotPCFFTlRJVFkgJSB4aHRtbC1mb3JtLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJhc2ljIEZvcm1zIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1iYXNpYy1mb3JtLTEubW9kIiA+DQotJXhodG1sLWZvcm0ubW9kOw0KLQ0KLTwhLS0gTGluayBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWxpbmsubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgTGluayBFbGVtZW50IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1saW5rLTEubW9kIiA+DQotJXhodG1sLWxpbmsubW9kOw0KLQ0KLTwhLS0gRG9jdW1lbnQgTWV0YWluZm9ybWF0aW9uIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLW1ldGEubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgTWV0YWluZm9ybWF0aW9uIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1tZXRhLTEubW9kIiA+DQotJXhodG1sLW1ldGEubW9kOw0KLQ0KLTwhLS0gQmFzZSBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWJhc2UubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzZSBFbGVtZW50IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1iYXNlLTEubW9kIiA+DQotJXhodG1sLWJhc2UubW9kOw0KLQ0KLTwhLS0gU3R5bGVzaGVldHMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXN0eWxlLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgU3R5bGUgU2hlZXRzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1zdHlsZS0xLm1vZCI+DQotJXhodG1sLXN0eWxlLm1vZDsNCi0NCi08IS0tIFBhcmFtIEVsZW1lbnQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1wYXJhbS5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBQYXJhbSBFbGVtZW50IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1wYXJhbS0xLm1vZCIgPg0KLSV4aHRtbC1wYXJhbS5tb2Q7DQotDQotPCEtLSBFbWJlZGRlZCBPYmplY3QgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtb2JqZWN0Lm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEVtYmVkZGVkIE9iamVjdCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtb2JqZWN0LTEubW9kIiA+DQotJXhodG1sLW9iamVjdC5tb2Q7DQotDQotPCEtLSBEb2N1bWVudCBTdHJ1Y3R1cmUgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtc3RydWN0Lm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIERvY3VtZW50IFN0cnVjdHVyZSAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtc3RydWN0LTEubW9kIiA+DQotJXhodG1sLXN0cnVjdC5tb2Q7DQotDQotPCEtLSBCbG9jayBQcmVzZW50YXRpb24gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWJsa3ByZXMubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCbG9jayBQcmVzZW50YXRpb24gMS4wLy9FTiINCi0gCQkiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJsa3ByZXMtMS5tb2QiPg0KLSV4aHRtbC1ibGtwcmVzLm1vZDsNCi0NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIA0KLQlJbmxpbmUgUHJlc2VudGF0aW9uOiBiLCBiaWcsIGksIHNtYWxsCQkNCi0tLT4NCi08IUVOVElUWSAlIHN1Yi5lbGVtZW50ICJJR05PUkUiPg0KLTwhRU5USVRZICUgc3ViLmF0dGxpc3QgIklHTk9SRSI+DQotPCFFTlRJVFkgJSBzdXAuZWxlbWVudCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHN1cC5hdHRsaXN0ICJJR05PUkUiPg0KLTwhRU5USVRZICUgdHQuZWxlbWVudCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHR0LmF0dGxpc3QgIklHTk9SRSI+DQotPCFFTlRJVFkgJSB4aHRtbC1pbmxwcmVzLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW5saW5lIFByZXNlbnRhdGlvbiAxLjAvL0VOIg0KLQkJImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1pbmxwcmVzLTEubW9kIj4NCi0leGh0bWwtaW5scHJlcy5tb2Q7DQotDQotPCEtLSBlbmQgb2YgWEhUTUwgTW9iaWxlIDEuMCBEVEQgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93bWwyMF9kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dtbDIwX2R0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU3ZTk1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dtbDIwX2R0ZAorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPg0KLTwhLS0gc2F2ZWQgZnJvbSB1cmw9KDAwMzcpaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbDIwLmR0ZCAtLT4NCi08SFRNTD48SEVBRD4NCi08TUVUQSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4NCi08TUVUQSBjb250ZW50PSJNU0hUTUwgNS41MC40OTEyLjMwMCIgbmFtZT1HRU5FUkFUT1I+PC9IRUFEPg0KLTxCT0RZPjxYTVA+PCEtLSBXTUwgMi4wIERURCAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogd21sMjAuZHRkIC0tPg0KLTwhLS0gDQotICAgIEBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSwgTHRkLiAyMDAxLg0KLQ0KLQlUZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIA0KLQlXZWIgc2l0ZSAoaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvd2hhdC9jb3B5cmlnaHQuaHRtKS4NCi0tLT4NCi08IS0tDQotCVRoaXMgaXMgdGhlIFdNTCAyLjAgRFREIGRyaXZlciBmaWxlLiBQbGVhc2UgdXNlIHRoaXMgZm9ybWFsIHB1YmxpYyBpZGVudGlmaWVyIHRvIGlkZW50aWZ5IGl0Og0KLQ0KLSAgICAgICAgICItLy9XQVBGT1JVTS8vRFREIFdNTCAyLjAvL0VOIg0KLSAgICAgICAgICAgICAgICAgICAJICAgICAgICAgIA0KLSAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgdXNpbmcgV01MIDIuMCBkaXJlY3RseSwgdXNlDQotICAgICB0aGUgRlBJIGluIHRoZSBET0NUWVBFIGRlY2xhcmF0aW9uLCB3aXRoIHRoZSB4bWxucyBhdHRyaWJ1dGUNCi0gICAgIG9uIHRoZSBkb2N1bWVudCBlbGVtZW50IHRvIGlkZW50aWZ5IHRoZSBkZWZhdWx0IG5hbWVzcGFjZToNCi0NCi0gICAgICAgICA8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi0gICAgICAgICA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDIuMC8vRU4iDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9kdGQvd21sMjAuZHRkIiA+DQotICAgICAgICAgPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiDQotICAgICAgICAgICAgICAgICAgIHhtbG5zOndtbD0iaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvMjAwMS93bWwiPg0KLSAgICAgICAgIC4uLg0KLSAgICAgICAgIDwvaHRtbD4NCi0NCi0tLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0NCi0JCVZlcnNpb24sIFhNTCBOYW1lc3BhY2VzLCBhbmQgcHJvZmlsZSBpbmZvcm1hdGlvbiANCi0tLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0NCi0JVmFsdWUgb2YgWEhUTUwgdmVyc2lvbiBhdHRyaWJ1dGUgDQotLS0+DQotPCFFTlRJVFkgJSBYSFRNTC52ZXJzaW9uICItLy9XQVBGT1JVTS8vRFREIFdNTCAyLjAvL0VOIj4NCi08IS0tIA0KLQlWYWx1ZSBvZiBYSFRNTCBwcm9maWxlIGF0dHJpYnV0ZQ0KLQkNCi0JUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2Ugd2l0aCBkb2N1bWVudCBwcm9maWxlcyANCi0tLT4NCi08IUVOVElUWSAlIFhIVE1MLnByb2ZpbGUgIiI+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tDQotCQlNb2R1bGFyaXNhdGlvbiBmcmFtZXdvcmsgc2V0dXANCi0tLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhRU5USVRZICUgd21sLWZyYW1ld29yay5tb2QgUFVCTElDICItLy9XQVBGT1JVTS8vRU5USVRJRVMgV01MIE1vZHVsYXIgRnJhbWV3b3JrIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWwtZnJhbWV3b3JrLTEubW9kIj4NCi0ld21sLWZyYW1ld29yay5tb2Q7DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tDQotCQlYSFRNTCBtb2R1bGVzIA0KLS0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBUZXh0IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSBwcmUuY29udGVudCAiKCAjUENEQVRBDQotICAgICAgfCAlSW5sU3RydWN0LmNsYXNzOyB8ICVpLnFuYW1lOyB8ICViLnFuYW1lOyANCi0gICAgICAlSW5sUGhyYXMuY2xhc3M7DQotICAgICAgJUFuY2hvci5jbGFzczsNCi0gICAgICAlSW5saW5lLmV4dHJhOyANCi0JfCAlZ2V0dmFyLnFuYW1lOw0KLQl8ICVpbnB1dC5xbmFtZTt8ICVzZWxlY3QucW5hbWU7KSoiPg0KLTwhRU5USVRZICUgcC5jb250ZW50ICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgfCAldGFibGUucW5hbWU7IHwgJWZpZWxkc2V0LnFuYW1lOykqIj4NCi08IUVOVElUWSAlIHhodG1sLXRleHQubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBUZXh0IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC10ZXh0LTEubW9kIj4NCi0leGh0bWwtdGV4dC5tb2Q7DQotPCFFTlRJVFkgJSB4aHRtbC1oeXBlcnRleHQubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBIeXBlcnRleHQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWh5cGVydGV4dC0xLm1vZCI+DQotJXhodG1sLWh5cGVydGV4dC5tb2Q7DQotPCEtLSBMaXN0IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1saXN0Lm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgTGlzdHMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWxpc3QtMS5tb2QiPg0KLSV4aHRtbC1saXN0Lm1vZDsNCi08IS0tIEV4dGVuZCBsaXN0cyB3aXRoIHZhbHVlIGFuZCBzdGFydCBhdHRyaWJ1dGVzIC0tPiANCi08IUFUVExJU1QgJWxpLnFuYW1lOw0KLSAgICAgIHZhbHVlICAgICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgICNJTVBMSUVEDQotPg0KLTwhQVRUTElTVCAlb2wucW5hbWU7DQotICAgICAgc3RhcnQgICAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIEltYWdlIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1pbWFnZS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEltYWdlcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW1hZ2UtMS5tb2QiPg0KLSV4aHRtbC1pbWFnZS5tb2Q7DQotPCEtLSBQYXJhbSBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtcGFyYW0ubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBQYXJhbSBFbGVtZW50IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1wYXJhbS0xLm1vZCI+DQotJXhodG1sLXBhcmFtLm1vZDsNCi08IS0tIEVtYmVkZGVkIE9iamVjdCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1vYmplY3QubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBFbWJlZGRlZCBPYmplY3QgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLW9iamVjdC0xLm1vZCI+DQotJXhodG1sLW9iamVjdC5tb2Q7DQotPCEtLSBUYWJsZXMgTW9kdWxlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtdGFibGUubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNpYyBUYWJsZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2ljLXRhYmxlLTEubW9kIj4NCi0leGh0bWwtdGFibGUubW9kOw0KLTwhLS0gRm9ybXMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVMRU1FTlQgJW9wdGdyb3VwLnFuYW1lOyAoJW9wdGlvbi5xbmFtZTspKz4NCi08IUFUVExJU1QgJW9wdGdyb3VwLnFuYW1lOw0KLQklQ29tbW9uLmF0dHJpYjsgCQ0KLQlsYWJlbCAlVGV4dC5kYXRhdHlwZTsgI1JFUVVJUkVEDQotPg0KLTwhRU5USVRZICUgb3B0aW9uLmNvbnRlbnQgIiggI1BDREFUQSB8ICVvbmV2ZW50LnFuYW1lO3wgJWdldHZhci5xbmFtZTspKiI+DQotPCFFTlRJVFkgJSBzZWxlY3QuY29udGVudCAiKCAlb3B0Z3JvdXAucW5hbWU7IHwgJW9wdGlvbi5xbmFtZTsgKSsiPg0KLTwhRUxFTUVOVCAlZmllbGRzZXQucW5hbWU7ICgjUENEQVRBIHwgJUZsb3cubWl4OykqPg0KLTwhQVRUTElTVCAlZmllbGRzZXQucW5hbWU7DQotCSVDb21tb24uYXR0cmliOyANCi0+DQotPCFFTlRJVFkgJSB0ZXh0YXJlYS5jb250ZW50ICIoICNQQ0RBVEEgfCAlZ2V0dmFyLnFuYW1lOyApKiI+DQotPCFFTlRJVFkgJSBmb3JtLmNvbnRlbnQgIiggJUJsa05vRm9ybS5taXg7DQotICAgICAgfCAlZmllbGRzZXQucW5hbWU7ICkrIj4NCi08IUVOVElUWSAlIHhodG1sLWJhc2ljLWZvcm0ubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNpYyBGb3JtcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmFzaWMtZm9ybS0xLm1vZCI+DQotJXhodG1sLWJhc2ljLWZvcm0ubW9kOw0KLTwhLS0gTGluayBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWxpbmsubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBMaW5rIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWxpbmstMS5tb2QiPg0KLSV4aHRtbC1saW5rLm1vZDsNCi08IS0tIERvY3VtZW50IE1ldGFpbmZvcm1hdGlvbiBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1tZXRhLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgTWV0YWluZm9ybWF0aW9uIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1tZXRhLTEubW9kIj4NCi0leGh0bWwtbWV0YS5tb2Q7DQotPCEtLSBCYXNlIEVsZW1lbnQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtYmFzZS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJhc2UgRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmFzZS0xLm1vZCI+DQotJXhodG1sLWJhc2UubW9kOw0KLTwhLS0gU3R5bGVzaGVldHMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXN0eWxlLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgU3R5bGUgU2hlZXRzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1zdHlsZS0xLm1vZCI+DQotJXhodG1sLXN0eWxlLm1vZDsNCi08IS0tIERvY3VtZW50IFN0cnVjdHVyZSBNb2R1bGUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSBodG1sLmNvbnRlbnQgIiggJWhlYWQucW5hbWU7LCAlVGVtcGxhdGUubWl4OywgKCVib2R5LnFuYW1lOyB8ICglY2FyZC5xbmFtZTsrKSkpIj4NCi08IUVOVElUWSAlIGJvZHkuY29udGVudCAiKCVDYXJkQm9keS5taXg7KSI+DQotPCFFTlRJVFkgJSB4aHRtbC1zdHJ1Y3QubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBEb2N1bWVudCBTdHJ1Y3R1cmUgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXN0cnVjdC0xLm1vZCI+DQotJXhodG1sLXN0cnVjdC5tb2Q7DQotPCEtLSBCbG9jayBQcmVzZW50YXRpb24gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWJsa3ByZXMubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCbG9jayBQcmVzZW50YXRpb24gMS4wLy9FTiINCi0gCQkiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJsa3ByZXMtMS5tb2QiPg0KLSV4aHRtbC1ibGtwcmVzLm1vZDsNCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0NCi0JCVdNTCBEZWNsYXJhdGlvbnMNCi0tLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gU3BlY2lhbCBXTUwgZWxlbWVudHMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgd21sLXNwZWNpYWwubW9kIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VMRU1FTlRTIFdNTCBTcGVjaWFsIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWwtc3BlY2lhbC0xLm1vZCI+DQotJXdtbC1zcGVjaWFsLm1vZDsNCi08IS0tIERlcHJlY2F0ZWQgV01MIGVsZW1lbnRzLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHdtbC1kZXByZWNhdGVkLm1vZCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTEVNRU5UUyBXTUwgRGVwcmVjYXRlZCAxLjAvL0VOIg0KLSAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbC1kZXByZWNhdGVkLTEubW9kIj4NCi0ld21sLWRlcHJlY2F0ZWQubW9kOw0KLTwhLS0gZW5kIG9mIFdNTCAyLjAgRFREICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwvWE1QPjwvQk9EWT48L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvWEhUTUwveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9YSFRNTC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTMzMjFjNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9YSFRNTC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDExOTYgKzAsMCBAQAotPCEtLQ0KLSAgIEV4dGVuc2libGUgSFRNTCB2ZXJzaW9uIDEuMCBUcmFuc2l0aW9uYWwgRFREDQotDQotICAgVGhpcyBpcyB0aGUgc2FtZSBhcyBIVE1MIDQuMCBUcmFuc2l0aW9uYWwgZXhjZXB0IGZvcg0KLSAgIGNoYW5nZXMgZHVlIHRvIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIFhNTCBhbmQgU0dNTC4NCi0NCi0gICBOYW1lc3BhY2UgPSBodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sDQotDQotICAgRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24sIHNlZTogaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxDQotDQotICAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAgVzNDIChNSVQsIElOUklBLCBLZWlvKSwNCi0gICBBbGwgUmlnaHRzIFJlc2VydmVkLiANCi0NCi0gICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiINCi0gICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiDQotDQotICAgJFJldmlzaW9uOiAxLjEgJA0KLSAgICREYXRlOiAyMDAwLzAxLzI2IDE0OjA4OjU2ICQNCi0NCi0tLT4NCi0NCi08IS0tPT09PT09PT09PT09PT09PSBDaGFyYWN0ZXIgbW5lbW9uaWMgZW50aXRpZXMgPT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRU5USVRZICUgSFRNTGxhdDEgUFVCTElDDQotICAgIi0vL1czQy8vRU5USVRJRVMgTGF0aW4gMSBmb3IgWEhUTUwvL0VOIg0KLSAgICJ4aHRtbC1sYXQxLmVudCI+DQotJUhUTUxsYXQxOw0KLQ0KLTwhRU5USVRZICUgSFRNTHN5bWJvbCBQVUJMSUMNCi0gICAiLS8vVzNDLy9FTlRJVElFUyBTeW1ib2xzIGZvciBYSFRNTC8vRU4iDQotICAgInhodG1sLXN5bWJvbC5lbnQiPg0KLSVIVE1Mc3ltYm9sOw0KLQ0KLTwhRU5USVRZICUgSFRNTHNwZWNpYWwgUFVCTElDDQotICAgIi0vL1czQy8vRU5USVRJRVMgU3BlY2lhbCBmb3IgWEhUTUwvL0VOIg0KLSAgICJ4aHRtbC1zcGVjaWFsLmVudCI+DQotJUhUTUxzcGVjaWFsOw0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT0gSW1wb3J0ZWQgTmFtZXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTlRJVFkgJSBDb250ZW50VHlwZSAiQ0RBVEEiPg0KLSAgICA8IS0tIG1lZGlhIHR5cGUsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotDQotPCFFTlRJVFkgJSBDb250ZW50VHlwZXMgIkNEQVRBIj4NCi0gICAgPCEtLSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBtZWRpYSB0eXBlcywgYXMgcGVyIFtSRkMyMDQ1XSAtLT4NCi0NCi08IUVOVElUWSAlIENoYXJzZXQgIkNEQVRBIj4NCi0gICAgPCEtLSBhIGNoYXJhY3RlciBlbmNvZGluZywgYXMgcGVyIFtSRkMyMDQ1XSAtLT4NCi0NCi08IUVOVElUWSAlIENoYXJzZXRzICJDREFUQSI+DQotICAgIDwhLS0gYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjaGFyYWN0ZXIgZW5jb2RpbmdzLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLQ0KLTwhRU5USVRZICUgTGFuZ3VhZ2VDb2RlICJOTVRPS0VOIj4NCi0gICAgPCEtLSBhIGxhbmd1YWdlIGNvZGUsIGFzIHBlciBbUkZDMTc2Nl0gLS0+DQotDQotPCFFTlRJVFkgJSBDaGFyYWN0ZXIgIkNEQVRBIj4NCi0gICAgPCEtLSBhIHNpbmdsZSBjaGFyYWN0ZXIgZnJvbSBbSVNPMTA2NDZdIC0tPg0KLQ0KLTwhRU5USVRZICUgTnVtYmVyICJDREFUQSI+DQotICAgIDwhLS0gb25lIG9yIG1vcmUgZGlnaXRzIC0tPg0KLQ0KLTwhRU5USVRZICUgTGlua1R5cGVzICJDREFUQSI+DQotICAgIDwhLS0gc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgbGluayB0eXBlcyAtLT4NCi0NCi08IUVOVElUWSAlIE1lZGlhRGVzYyAiQ0RBVEEiPg0KLSAgICA8IS0tIHNpbmdsZSBvciBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBtZWRpYSBkZXNjcmlwdG9ycyAtLT4NCi0NCi08IUVOVElUWSAlIFVSSSAiQ0RBVEEiPg0KLSAgICA8IS0tIGEgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBzZWUgW1JGQzIzOTZdIC0tPg0KLQ0KLTwhRU5USVRZICUgVXJpTGlzdCAiQ0RBVEEiPg0KLSAgICA8IS0tIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVycyAtLT4NCi0NCi08IUVOVElUWSAlIERhdGV0aW1lICJDREFUQSI+DQotICAgIDwhLS0gZGF0ZSBhbmQgdGltZSBpbmZvcm1hdGlvbi4gSVNPIGRhdGUgZm9ybWF0IC0tPg0KLQ0KLTwhRU5USVRZICUgU2NyaXB0ICJDREFUQSI+DQotICAgIDwhLS0gc2NyaXB0IGV4cHJlc3Npb24gLS0+DQotDQotPCFFTlRJVFkgJSBTdHlsZVNoZWV0ICJDREFUQSI+DQotICAgIDwhLS0gc3R5bGUgc2hlZXQgZGF0YSAtLT4NCi0NCi08IUVOVElUWSAlIFRleHQgIkNEQVRBIj4NCi0gICAgPCEtLSB1c2VkIGZvciB0aXRsZXMgZXRjLiAtLT4NCi0NCi08IUVOVElUWSAlIEZyYW1lVGFyZ2V0ICJOTVRPS0VOIj4NCi0gICAgPCEtLSByZW5kZXIgaW4gdGhpcyBmcmFtZSAtLT4NCi0NCi08IUVOVElUWSAlIExlbmd0aCAiQ0RBVEEiPg0KLSAgICA8IS0tIG5uIGZvciBwaXhlbHMgb3Igbm4lIGZvciBwZXJjZW50YWdlIGxlbmd0aCAtLT4NCi0NCi08IUVOVElUWSAlIE11bHRpTGVuZ3RoICJDREFUQSI+DQotICAgIDwhLS0gcGl4ZWwsIHBlcmNlbnRhZ2UsIG9yIHJlbGF0aXZlIC0tPg0KLQ0KLTwhRU5USVRZICUgTXVsdGlMZW5ndGhzICJDREFUQSI+DQotICAgIDwhLS0gY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgTXVsdGlMZW5ndGggLS0+DQotDQotPCFFTlRJVFkgJSBQaXhlbHMgIkNEQVRBIj4NCi0gICAgPCEtLSBpbnRlZ2VyIHJlcHJlc2VudGluZyBsZW5ndGggaW4gcGl4ZWxzIC0tPg0KLQ0KLTwhLS0gdGhlc2UgYXJlIHVzZWQgZm9yIGltYWdlIG1hcHMgLS0+DQotDQotPCFFTlRJVFkgJSBTaGFwZSAiKHJlY3R8Y2lyY2xlfHBvbHl8ZGVmYXVsdCkiPg0KLQ0KLTwhRU5USVRZICUgQ29vcmRzICJDREFUQSI+DQotICAgIDwhLS0gY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgbGVuZ3RocyAtLT4NCi0NCi08IS0tIHVzZWQgZm9yIG9iamVjdCwgYXBwbGV0LCBpbWcsIGlucHV0IGFuZCBpZnJhbWUgLS0+DQotPCFFTlRJVFkgJSBJbWdBbGlnbiAiKHRvcHxtaWRkbGV8Ym90dG9tfGxlZnR8cmlnaHQpIj4NCi0NCi08IS0tIGEgY29sb3IgdXNpbmcgc1JHQjogI1JSR0dCQiBhcyBIZXggdmFsdWVzIC0tPg0KLTwhRU5USVRZICUgQ29sb3IgIkNEQVRBIj4NCi0NCi08IS0tIFRoZXJlIGFyZSBhbHNvIDE2IHdpZGVseSBrbm93biBjb2xvciBuYW1lcyB3aXRoIHRoZWlyIHNSR0IgdmFsdWVzOg0KLQ0KLSAgICBCbGFjayAgPSAjMDAwMDAwICAgIEdyZWVuICA9ICMwMDgwMDANCi0gICAgU2lsdmVyID0gI0MwQzBDMCAgICBMaW1lICAgPSAjMDBGRjAwDQotICAgIEdyYXkgICA9ICM4MDgwODAgICAgT2xpdmUgID0gIzgwODAwMA0KLSAgICBXaGl0ZSAgPSAjRkZGRkZGICAgIFllbGxvdyA9ICNGRkZGMDANCi0gICAgTWFyb29uID0gIzgwMDAwMCAgICBOYXZ5ICAgPSAjMDAwMDgwDQotICAgIFJlZCAgICA9ICNGRjAwMDAgICAgQmx1ZSAgID0gIzAwMDBGRg0KLSAgICBQdXJwbGUgPSAjODAwMDgwICAgIFRlYWwgICA9ICMwMDgwODANCi0gICAgRnVjaHNpYT0gI0ZGMDBGRiAgICBBcXVhICAgPSAjMDBGRkZGDQotLS0+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT0gR2VuZXJpYyBBdHRyaWJ1dGVzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IS0tIGNvcmUgYXR0cmlidXRlcyBjb21tb24gdG8gbW9zdCBlbGVtZW50cw0KLSAgaWQgICAgICAgZG9jdW1lbnQtd2lkZSB1bmlxdWUgaWQNCi0gIGNsYXNzICAgIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzZXMNCi0gIHN0eWxlICAgIGFzc29jaWF0ZWQgc3R5bGUgaW5mbw0KLSAgdGl0bGUgICAgYWR2aXNvcnkgdGl0bGUvYW1wbGlmaWNhdGlvbg0KLS0tPg0KLTwhRU5USVRZICUgY29yZWF0dHJzDQotICJpZCAgICAgICAgICBJRCAgICAgICAgICAgICAjSU1QTElFRA0KLSAgY2xhc3MgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIHN0eWxlICAgICAgICVTdHlsZVNoZWV0OyAgICNJTVBMSUVEDQotICB0aXRsZSAgICAgICAlVGV4dDsgICAgICAgICAjSU1QTElFRCINCi0gID4NCi0NCi08IS0tIGludGVybmF0aW9uYWxpemF0aW9uIGF0dHJpYnV0ZXMNCi0gIGxhbmcgICAgICAgIGxhbmd1YWdlIGNvZGUgKGJhY2t3YXJkcyBjb21wYXRpYmxlKQ0KLSAgeG1sOmxhbmcgICAgbGFuZ3VhZ2UgY29kZSAoYXMgcGVyIFhNTCAxLjAgc3BlYykNCi0gIGRpciAgICAgICAgIGRpcmVjdGlvbiBmb3Igd2Vhay9uZXV0cmFsIHRleHQNCi0tLT4NCi08IUVOVElUWSAlIGkxOG4NCi0gImxhbmcgICAgICAgICVMYW5ndWFnZUNvZGU7ICNJTVBMSUVEDQotICB4bWw6bGFuZyAgICAlTGFuZ3VhZ2VDb2RlOyAjSU1QTElFRA0KLSAgZGlyICAgICAgICAgKGx0cnxydGwpICAgICAgI0lNUExJRUQiDQotICA+DQotDQotPCEtLSBhdHRyaWJ1dGVzIGZvciBjb21tb24gVUkgZXZlbnRzDQotICBvbmNsaWNrICAgICBhIHBvaW50ZXIgYnV0dG9uIHdhcyBjbGlja2VkDQotICBvbmRibGNsaWNrICBhIHBvaW50ZXIgYnV0dG9uIHdhcyBkb3VibGUgY2xpY2tlZA0KLSAgb25tb3VzZWRvd24gYSBwb2ludGVyIGJ1dHRvbiB3YXMgcHJlc3NlZCBkb3duDQotICBvbm1vdXNldXAgICBhIHBvaW50ZXIgYnV0dG9uIHdhcyByZWxlYXNlZA0KLSAgb25tb3VzZW1vdmUgYSBwb2ludGVyIHdhcyBtb3ZlZCBvbnRvIHRoZSBlbGVtZW50DQotICBvbm1vdXNlb3V0ICBhIHBvaW50ZXIgd2FzIG1vdmVkIGF3YXkgZnJvbSB0aGUgZWxlbWVudA0KLSAgb25rZXlwcmVzcyAgYSBrZXkgd2FzIHByZXNzZWQgYW5kIHJlbGVhc2VkDQotICBvbmtleWRvd24gICBhIGtleSB3YXMgcHJlc3NlZCBkb3duDQotICBvbmtleXVwICAgICBhIGtleSB3YXMgcmVsZWFzZWQNCi0tLT4NCi08IUVOVElUWSAlIGV2ZW50cw0KLSAib25jbGljayAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9uZGJsY2xpY2sgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbm1vdXNlZG93biAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25tb3VzZXVwICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9ubW91c2VvdmVyICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbm1vdXNlbW92ZSAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25tb3VzZW91dCAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9ua2V5cHJlc3MgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbmtleWRvd24gICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25rZXl1cCAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQiDQotICA+DQotDQotPCEtLSBhdHRyaWJ1dGVzIGZvciBlbGVtZW50cyB0aGF0IGNhbiBnZXQgdGhlIGZvY3VzDQotICBhY2Nlc3NrZXkgICBhY2Nlc3NpYmlsaXR5IGtleSBjaGFyYWN0ZXINCi0gIHRhYmluZGV4ICAgIHBvc2l0aW9uIGluIHRhYmJpbmcgb3JkZXINCi0gIG9uZm9jdXMgICAgIHRoZSBlbGVtZW50IGdvdCB0aGUgZm9jdXMNCi0gIG9uYmx1ciAgICAgIHRoZSBlbGVtZW50IGxvc3QgdGhlIGZvY3VzDQotLS0+DQotPCFFTlRJVFkgJSBmb2N1cw0KLSAiYWNjZXNza2V5ICAgJUNoYXJhY3RlcjsgICAgI0lNUExJRUQNCi0gIHRhYmluZGV4ICAgICVOdW1iZXI7ICAgICAgICNJTVBMSUVEDQotICBvbmZvY3VzICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25ibHVyICAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQiDQotICA+DQotDQotPCFFTlRJVFkgJSBhdHRycyAiJWNvcmVhdHRyczsgJWkxOG47ICVldmVudHM7Ij4NCi0NCi08IS0tIHRleHQgYWxpZ25tZW50IGZvciBwLCBkaXYsIGgxLWg2LiBUaGUgZGVmYXVsdCBpcw0KLSAgICAgYWxpZ249ImxlZnQiIGZvciBsdHIgaGVhZGluZ3MsICJyaWdodCIgZm9yIHJ0bCAtLT4NCi0NCi08IUVOVElUWSAlIFRleHRBbGlnbiAiYWxpZ24gKGxlZnR8Y2VudGVyfHJpZ2h0KSAjSU1QTElFRCI+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT0gVGV4dCBFbGVtZW50cyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVOVElUWSAlIHNwZWNpYWwNCi0gICAiYnIgfCBzcGFuIHwgYmRvIHwgb2JqZWN0IHwgYXBwbGV0IHwgaW1nIHwgbWFwIHwgaWZyYW1lIj4NCi0NCi08IUVOVElUWSAlIGZvbnRzdHlsZSAidHQgfCBpIHwgYiB8IGJpZyB8IHNtYWxsIHwgdQ0KLSAgICAgICAgICAgICAgICAgICAgICB8IHMgfCBzdHJpa2UgfGZvbnQgfCBiYXNlZm9udCI+DQotDQotPCFFTlRJVFkgJSBwaHJhc2UgImVtIHwgc3Ryb25nIHwgZGZuIHwgY29kZSB8IHEgfCBzdWIgfCBzdXAgfA0KLSAgICAgICAgICAgICAgICAgICBzYW1wIHwga2JkIHwgdmFyIHwgY2l0ZSB8IGFiYnIgfCBhY3JvbnltIj4NCi0NCi08IUVOVElUWSAlIGlubGluZS5mb3JtcyAiaW5wdXQgfCBzZWxlY3QgfCB0ZXh0YXJlYSB8IGxhYmVsIHwgYnV0dG9uIj4NCi0NCi08IS0tIHRoZXNlIGNhbiBvY2N1ciBhdCBibG9jayBvciBpbmxpbmUgbGV2ZWwgLS0+DQotPCFFTlRJVFkgJSBtaXNjICJpbnMgfCBkZWwgfCBzY3JpcHQgfCBub3NjcmlwdCI+DQotDQotPCFFTlRJVFkgJSBpbmxpbmUgImEgfCAlc3BlY2lhbDsgfCAlZm9udHN0eWxlOyB8ICVwaHJhc2U7IHwgJWlubGluZS5mb3JtczsiPg0KLQ0KLTwhLS0gJUlubGluZTsgY292ZXJzIGlubGluZSBvciAidGV4dC1sZXZlbCIgZWxlbWVudHMgLS0+DQotPCFFTlRJVFkgJSBJbmxpbmUgIigjUENEQVRBIHwgJWlubGluZTsgfCAlbWlzYzspKiI+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PSBCbG9jayBsZXZlbCBlbGVtZW50cyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVOVElUWSAlIGhlYWRpbmcgImgxfGgyfGgzfGg0fGg1fGg2Ij4NCi08IUVOVElUWSAlIGxpc3RzICJ1bCB8IG9sIHwgZGwgfCBtZW51IHwgZGlyIj4NCi08IUVOVElUWSAlIGJsb2NrdGV4dCAicHJlIHwgaHIgfCBibG9ja3F1b3RlIHwgYWRkcmVzcyB8IGNlbnRlciB8IG5vZnJhbWVzIj4NCi0NCi08IUVOVElUWSAlIGJsb2NrDQotICAgICJwIHwgJWhlYWRpbmc7IHwgZGl2IHwgJWxpc3RzOyB8ICVibG9ja3RleHQ7IHwgaXNpbmRleCB8ZmllbGRzZXQgfCB0YWJsZSI+DQotDQotPCFFTlRJVFkgJSBCbG9jayAiKCVibG9jazsgfCBmb3JtIHwgJW1pc2M7KSoiPg0KLQ0KLTwhLS0gJUZsb3c7IG1peGVzIEJsb2NrIGFuZCBJbmxpbmUgYW5kIGlzIHVzZWQgZm9yIGxpc3QgaXRlbXMgZXRjLiAtLT4NCi08IUVOVElUWSAlIEZsb3cgIigjUENEQVRBIHwgJWJsb2NrOyB8IGZvcm0gfCAlaW5saW5lOyB8ICVtaXNjOykqIj4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09IENvbnRlbnQgbW9kZWxzIGZvciBleGNsdXNpb25zID09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhLS0gYSBlbGVtZW50cyB1c2UgJUlubGluZTsgZXhjbHVkaW5nIGEgLS0+DQotDQotPCFFTlRJVFkgJSBhLmNvbnRlbnQNCi0gICAiKCNQQ0RBVEEgfCAlc3BlY2lhbDsgfCAlZm9udHN0eWxlOyB8ICVwaHJhc2U7IHwgJWlubGluZS5mb3JtczsgfCAlbWlzYzspKiI+DQotDQotPCEtLSBwcmUgdXNlcyAlSW5saW5lIGV4Y2x1ZGluZyBpbWcsIG9iamVjdCwgYXBwbGV0LCBiaWcsIHNtYWxsLA0KLSAgICAgc3ViLCBzdXAsIGZvbnQsIG9yIGJhc2Vmb250IC0tPg0KLQ0KLTwhRU5USVRZICUgcHJlLmNvbnRlbnQNCi0gICAiKCNQQ0RBVEEgfCBhIHwgYnIgfCBzcGFuIHwgYmRvIHwgbWFwIHwgdHQgfCBpIHwgYiB8IHUgfCBzIHwNCi0gICAgICAlcGhyYXNlOyB8ICVpbmxpbmUuZm9ybXM7KSoiPg0KLQ0KLTwhLS0gZm9ybSB1c2VzICVGbG93OyBleGNsdWRpbmcgZm9ybSAtLT4NCi0NCi08IUVOVElUWSAlIGZvcm0uY29udGVudCAiKCNQQ0RBVEEgfCAlYmxvY2s7IHwgJWlubGluZTsgfCAlbWlzYzspKiI+DQotDQotPCEtLSBidXR0b24gdXNlcyAlRmxvdzsgYnV0IGV4Y2x1ZGVzIGEsIGZvcm0sIGZvcm0gY29udHJvbHMsIGlmcmFtZSAtLT4NCi0NCi08IUVOVElUWSAlIGJ1dHRvbi5jb250ZW50DQotICAgIigjUENEQVRBIHwgcCB8ICVoZWFkaW5nOyB8IGRpdiB8ICVsaXN0czsgfCAlYmxvY2t0ZXh0OyB8DQotICAgICAgdGFibGUgfCBiciB8IHNwYW4gfCBiZG8gfCBvYmplY3QgfCBhcHBsZXQgfCBpbWcgfCBtYXAgfA0KLSAgICAgICVmb250c3R5bGU7IHwgJXBocmFzZTsgfCAlbWlzYzspKiI+DQotDQotPCEtLT09PT09PT09PT09PT09PT0gRG9jdW1lbnQgU3RydWN0dXJlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IS0tIHRoZSBuYW1lc3BhY2UgVVJJIGRlc2lnbmF0ZXMgdGhlIGRvY3VtZW50IHByb2ZpbGUgLS0+DQotDQotPCFFTEVNRU5UIGh0bWwgKGhlYWQsIGJvZHkpPg0KLTwhQVRUTElTVCBodG1sDQotICAlaTE4bjsNCi0gIHhtbG5zICAgICAgICVVUkk7ICAgICAgICAgICNGSVhFRCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PSBEb2N1bWVudCBIZWFkID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRU5USVRZICUgaGVhZC5taXNjICIoc2NyaXB0fHN0eWxlfG1ldGF8bGlua3xvYmplY3R8aXNpbmRleCkqIj4NCi0NCi08IS0tIGNvbnRlbnQgbW9kZWwgaXMgJWhlYWQubWlzYzsgY29tYmluZWQgd2l0aCBhIHNpbmdsZQ0KLSAgICAgdGl0bGUgYW5kIGFuIG9wdGlvbmFsIGJhc2UgZWxlbWVudCBpbiBhbnkgb3JkZXIgLS0+DQotDQotPCFFTEVNRU5UIGhlYWQgKCVoZWFkLm1pc2M7LA0KLSAgICAgKCh0aXRsZSwgJWhlYWQubWlzYzssIChiYXNlLCAlaGVhZC5taXNjOyk/KSB8DQotICAgICAgKGJhc2UsICVoZWFkLm1pc2M7LCAodGl0bGUsICVoZWFkLm1pc2M7KSkpKT4NCi0NCi08IUFUVExJU1QgaGVhZA0KLSAgJWkxOG47DQotICBwcm9maWxlICAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0gVGhlIHRpdGxlIGVsZW1lbnQgaXMgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgZmxvdyBvZiB0ZXh0Lg0KLSAgICAgICBJdCBzaG91bGQgYmUgZGlzcGxheWVkLCBmb3IgZXhhbXBsZSBhcyB0aGUgcGFnZSBoZWFkZXIgb3INCi0gICAgICAgd2luZG93IHRpdGxlLiBFeGFjdGx5IG9uZSB0aXRsZSBpcyByZXF1aXJlZCBwZXIgZG9jdW1lbnQuDQotICAgIC0tPg0KLTwhRUxFTUVOVCB0aXRsZSAoI1BDREFUQSk+DQotPCFBVFRMSVNUIHRpdGxlICVpMThuOz4NCi0NCi08IS0tIGRvY3VtZW50IGJhc2UgVVJJIC0tPg0KLQ0KLTwhRUxFTUVOVCBiYXNlIEVNUFRZPg0KLTwhQVRUTElTVCBiYXNlDQotICBocmVmICAgICAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgdGFyZ2V0ICAgICAgJUZyYW1lVGFyZ2V0OyAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tIGdlbmVyaWMgbWV0YWluZm9ybWF0aW9uIC0tPg0KLTwhRUxFTUVOVCBtZXRhIEVNUFRZPg0KLTwhQVRUTElTVCBtZXRhDQotICAlaTE4bjsNCi0gIGh0dHAtZXF1aXYgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICBuYW1lICAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgY29udGVudCAgICAgQ0RBVEEgICAgICAgICAgI1JFUVVJUkVEDQotICBzY2hlbWUgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0NCi0gIFJlbGF0aW9uc2hpcCB2YWx1ZXMgY2FuIGJlIHVzZWQgaW4gcHJpbmNpcGxlOg0KLQ0KLSAgIGEpIGZvciBkb2N1bWVudCBzcGVjaWZpYyB0b29sYmFycy9tZW51cyB3aGVuIHVzZWQNCi0gICAgICB3aXRoIHRoZSBsaW5rIGVsZW1lbnQgaW4gZG9jdW1lbnQgaGVhZCBlLmcuDQotICAgICAgICBzdGFydCwgY29udGVudHMsIHByZXZpb3VzLCBuZXh0LCBpbmRleCwgZW5kLCBoZWxwDQotICAgYikgdG8gbGluayB0byBhIHNlcGFyYXRlIHN0eWxlIHNoZWV0IChyZWw9InN0eWxlc2hlZXQiKQ0KLSAgIGMpIHRvIG1ha2UgYSBsaW5rIHRvIGEgc2NyaXB0IChyZWw9InNjcmlwdCIpDQotICAgZCkgYnkgc3R5bGVzaGVldHMgdG8gY29udHJvbCBob3cgY29sbGVjdGlvbnMgb2YNCi0gICAgICBodG1sIG5vZGVzIGFyZSByZW5kZXJlZCBpbnRvIHByaW50ZWQgZG9jdW1lbnRzDQotICAgZSkgdG8gbWFrZSBhIGxpbmsgdG8gYSBwcmludGFibGUgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50DQotICAgICAgZS5nLiBhIFBvc3RTY3JpcHQgb3IgUERGIHZlcnNpb24gKHJlbD0iYWx0ZXJuYXRlIiBtZWRpYT0icHJpbnQiKQ0KLS0tPg0KLQ0KLTwhRUxFTUVOVCBsaW5rIEVNUFRZPg0KLTwhQVRUTElTVCBsaW5rDQotICAlYXR0cnM7DQotICBjaGFyc2V0ICAgICAlQ2hhcnNldDsgICAgICAjSU1QTElFRA0KLSAgaHJlZiAgICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIGhyZWZsYW5nICAgICVMYW5ndWFnZUNvZGU7ICNJTVBMSUVEDQotICB0eXBlICAgICAgICAlQ29udGVudFR5cGU7ICAjSU1QTElFRA0KLSAgcmVsICAgICAgICAgJUxpbmtUeXBlczsgICAgI0lNUExJRUQNCi0gIHJldiAgICAgICAgICVMaW5rVHlwZXM7ICAgICNJTVBMSUVEDQotICBtZWRpYSAgICAgICAlTWVkaWFEZXNjOyAgICAjSU1QTElFRA0KLSAgdGFyZ2V0ICAgICAgJUZyYW1lVGFyZ2V0OyAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tIHN0eWxlIGluZm8sIHdoaWNoIG1heSBpbmNsdWRlIENEQVRBIHNlY3Rpb25zIC0tPg0KLTwhRUxFTUVOVCBzdHlsZSAoI1BDREFUQSk+DQotPCFBVFRMSVNUIHN0eWxlDQotICAlaTE4bjsNCi0gIHR5cGUgICAgICAgICVDb250ZW50VHlwZTsgICNSRVFVSVJFRA0KLSAgbWVkaWEgICAgICAgJU1lZGlhRGVzYzsgICAgI0lNUExJRUQNCi0gIHRpdGxlICAgICAgICVUZXh0OyAgICAgICAgICNJTVBMSUVEDQotICB4bWw6c3BhY2UgICAocHJlc2VydmUpICAgICAjRklYRUQgJ3ByZXNlcnZlJw0KLSAgPg0KLQ0KLTwhLS0gc2NyaXB0IHN0YXRlbWVudHMsIHdoaWNoIG1heSBpbmNsdWRlIENEQVRBIHNlY3Rpb25zIC0tPg0KLTwhRUxFTUVOVCBzY3JpcHQgKCNQQ0RBVEEpPg0KLTwhQVRUTElTVCBzY3JpcHQNCi0gIGNoYXJzZXQgICAgICVDaGFyc2V0OyAgICAgICNJTVBMSUVEDQotICB0eXBlICAgICAgICAlQ29udGVudFR5cGU7ICAjUkVRVUlSRUQNCi0gIGxhbmd1YWdlICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICBzcmMgICAgICAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgZGVmZXIgICAgICAgKGRlZmVyKSAgICAgICAgI0lNUExJRUQNCi0gIHhtbDpzcGFjZSAgIChwcmVzZXJ2ZSkgICAgICNGSVhFRCAncHJlc2VydmUnDQotICA+DQotDQotPCEtLSBhbHRlcm5hdGUgY29udGVudCBjb250YWluZXIgZm9yIG5vbiBzY3JpcHQtYmFzZWQgcmVuZGVyaW5nIC0tPg0KLQ0KLTwhRUxFTUVOVCBub3NjcmlwdCAlRmxvdzs+DQotPCFBVFRMSVNUIG5vc2NyaXB0DQotICAlYXR0cnM7DQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT09PT09IEZyYW1lcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IS0tIGlubGluZSBzdWJ3aW5kb3cgLS0+DQotDQotPCFFTEVNRU5UIGlmcmFtZSAlRmxvdzs+DQotPCFBVFRMSVNUIGlmcmFtZQ0KLSAgJWNvcmVhdHRyczsNCi0gIGxvbmdkZXNjICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBuYW1lICAgICAgICBOTVRPS0VOICAgICAgICAjSU1QTElFRA0KLSAgc3JjICAgICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIGZyYW1lYm9yZGVyICgxfDApICAgICAgICAgICIxIg0KLSAgbWFyZ2lud2lkdGggJVBpeGVsczsgICAgICAgI0lNUExJRUQNCi0gIG1hcmdpbmhlaWdodCAlUGl4ZWxzOyAgICAgICNJTVBMSUVEDQotICBzY3JvbGxpbmcgICAoeWVzfG5vfGF1dG8pICAiYXV0byINCi0gIGFsaWduICAgICAgICVJbWdBbGlnbjsgICAgICNJTVBMSUVEDQotICBoZWlnaHQgICAgICAlTGVuZ3RoOyAgICAgICAjSU1QTElFRA0KLSAgd2lkdGggICAgICAgJUxlbmd0aDsgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tIGFsdGVybmF0ZSBjb250ZW50IGNvbnRhaW5lciBmb3Igbm9uIGZyYW1lLWJhc2VkIHJlbmRlcmluZyAtLT4NCi0NCi08IUVMRU1FTlQgbm9mcmFtZXMgJUZsb3c7Pg0KLTwhQVRUTElTVCBub2ZyYW1lcw0KLSAgJWF0dHJzOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09IERvY3VtZW50IEJvZHkgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTEVNRU5UIGJvZHkgJUZsb3c7Pg0KLTwhQVRUTElTVCBib2R5DQotICAlYXR0cnM7DQotICBvbmxvYWQgICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb251bmxvYWQgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIGJhY2tncm91bmQgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBiZ2NvbG9yICAgICAlQ29sb3I7ICAgICAgICAjSU1QTElFRA0KLSAgdGV4dCAgICAgICAgJUNvbG9yOyAgICAgICAgI0lNUExJRUQNCi0gIGxpbmsgICAgICAgICVDb2xvcjsgICAgICAgICNJTVBMSUVEDQotICB2bGluayAgICAgICAlQ29sb3I7ICAgICAgICAjSU1QTElFRA0KLSAgYWxpbmsgICAgICAgJUNvbG9yOyAgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IUVMRU1FTlQgZGl2ICVGbG93Oz4gIDwhLS0gZ2VuZXJpYyBsYW5ndWFnZS9zdHlsZSBjb250YWluZXIgLS0+DQotPCFBVFRMSVNUIGRpdg0KLSAgJWF0dHJzOw0KLSAgJVRleHRBbGlnbjsNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PSBQYXJhZ3JhcGhzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRUxFTUVOVCBwICVJbmxpbmU7Pg0KLTwhQVRUTElTVCBwDQotICAlYXR0cnM7DQotICAlVGV4dEFsaWduOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09IEhlYWRpbmdzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCEtLQ0KLSAgVGhlcmUgYXJlIHNpeCBsZXZlbHMgb2YgaGVhZGluZ3MgZnJvbSBoMSAodGhlIG1vc3QgaW1wb3J0YW50KQ0KLSAgdG8gaDYgKHRoZSBsZWFzdCBpbXBvcnRhbnQpLg0KLS0tPg0KLQ0KLTwhRUxFTUVOVCBoMSAgJUlubGluZTs+DQotPCFBVFRMSVNUIGgxDQotICAlYXR0cnM7DQotICAlVGV4dEFsaWduOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBoMiAlSW5saW5lOz4NCi08IUFUVExJU1QgaDINCi0gICVhdHRyczsNCi0gICVUZXh0QWxpZ247DQotICA+DQotDQotPCFFTEVNRU5UIGgzICVJbmxpbmU7Pg0KLTwhQVRUTElTVCBoMw0KLSAgJWF0dHJzOw0KLSAgJVRleHRBbGlnbjsNCi0gID4NCi0NCi08IUVMRU1FTlQgaDQgJUlubGluZTs+DQotPCFBVFRMSVNUIGg0DQotICAlYXR0cnM7DQotICAlVGV4dEFsaWduOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBoNSAlSW5saW5lOz4NCi08IUFUVExJU1QgaDUNCi0gICVhdHRyczsNCi0gICVUZXh0QWxpZ247DQotICA+DQotDQotPCFFTEVNRU5UIGg2ICVJbmxpbmU7Pg0KLTwhQVRUTElTVCBoNg0KLSAgJWF0dHJzOw0KLSAgJVRleHRBbGlnbjsNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PSBMaXN0cyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhLS0gVW5vcmRlcmVkIGxpc3QgYnVsbGV0IHN0eWxlcyAtLT4NCi0NCi08IUVOVElUWSAlIFVMU3R5bGUgIihkaXNjfHNxdWFyZXxjaXJjbGUpIj4NCi0NCi08IS0tIFVub3JkZXJlZCBsaXN0IC0tPg0KLQ0KLTwhRUxFTUVOVCB1bCAobGkpKz4NCi08IUFUVExJU1QgdWwNCi0gICVhdHRyczsNCi0gIHR5cGUgICAgICAgICVVTFN0eWxlOyAgICAgI0lNUExJRUQNCi0gIGNvbXBhY3QgICAgIChjb21wYWN0KSAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tIE9yZGVyZWQgbGlzdCBudW1iZXJpbmcgc3R5bGUNCi0NCi0gICAgMSAgIGFyYWJpYyBudW1iZXJzICAgICAgMSwgMiwgMywgLi4uDQotICAgIGEgICBsb3dlciBhbHBoYSAgICAgICAgIGEsIGIsIGMsIC4uLg0KLSAgICBBICAgdXBwZXIgYWxwaGEgICAgICAgICBBLCBCLCBDLCAuLi4NCi0gICAgaSAgIGxvd2VyIHJvbWFuICAgICAgICAgaSwgaWksIGlpaSwgLi4uDQotICAgIEkgICB1cHBlciByb21hbiAgICAgICAgIEksIElJLCBJSUksIC4uLg0KLQ0KLSAgICBUaGUgc3R5bGUgaXMgYXBwbGllZCB0byB0aGUgc2VxdWVuY2UgbnVtYmVyIHdoaWNoIGJ5IGRlZmF1bHQNCi0gICAgaXMgcmVzZXQgdG8gMSBmb3IgdGhlIGZpcnN0IGxpc3QgaXRlbSBpbiBhbiBvcmRlcmVkIGxpc3QuDQotLS0+DQotPCFFTlRJVFkgJSBPTFN0eWxlICJDREFUQSI+DQotDQotPCEtLSBPcmRlcmVkIChudW1iZXJlZCkgbGlzdCAtLT4NCi0NCi08IUVMRU1FTlQgb2wgKGxpKSs+DQotPCFBVFRMSVNUIG9sDQotICAlYXR0cnM7DQotICB0eXBlICAgICAgICAlT0xTdHlsZTsgICAgICAjSU1QTElFRA0KLSAgY29tcGFjdCAgICAgKGNvbXBhY3QpICAgICAgI0lNUExJRUQNCi0gIHN0YXJ0ICAgICAgICVOdW1iZXI7ICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLSBzaW5nbGUgY29sdW1uIGxpc3QgKERFUFJFQ0FURUQpIC0tPiANCi08IUVMRU1FTlQgbWVudSAobGkpKz4NCi08IUFUVExJU1QgbWVudQ0KLSAgJWF0dHJzOw0KLSAgY29tcGFjdCAgICAgKGNvbXBhY3QpICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0gbXVsdGlwbGUgY29sdW1uIGxpc3QgKERFUFJFQ0FURUQpIC0tPiANCi08IUVMRU1FTlQgZGlyIChsaSkrPg0KLTwhQVRUTElTVCBkaXINCi0gICVhdHRyczsNCi0gIGNvbXBhY3QgICAgIChjb21wYWN0KSAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tIExJU3R5bGUgaXMgY29uc3RyYWluZWQgdG86ICIoJVVMU3R5bGU7fCVPTFN0eWxlOykiIC0tPg0KLTwhRU5USVRZICUgTElTdHlsZSAiQ0RBVEEiPg0KLQ0KLTwhLS0gbGlzdCBpdGVtIC0tPg0KLQ0KLTwhRUxFTUVOVCBsaSAlRmxvdzs+DQotPCFBVFRMSVNUIGxpDQotICAlYXR0cnM7DQotICB0eXBlICAgICAgICAlTElTdHlsZTsgICAgICAjSU1QTElFRA0KLSAgdmFsdWUgICAgICAgJU51bWJlcjsgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tIGRlZmluaXRpb24gbGlzdHMgLSBkdCBmb3IgdGVybSwgZGQgZm9yIGl0cyBkZWZpbml0aW9uIC0tPg0KLQ0KLTwhRUxFTUVOVCBkbCAoZHR8ZGQpKz4NCi08IUFUVExJU1QgZGwNCi0gICVhdHRyczsNCi0gIGNvbXBhY3QgICAgIChjb21wYWN0KSAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCFFTEVNRU5UIGR0ICVJbmxpbmU7Pg0KLTwhQVRUTElTVCBkdA0KLSAgJWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBkZCAlRmxvdzs+DQotPCFBVFRMSVNUIGRkDQotICAlYXR0cnM7DQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT0gQWRkcmVzcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IS0tIGluZm9ybWF0aW9uIG9uIGF1dGhvciAtLT4NCi0NCi08IUVMRU1FTlQgYWRkcmVzcyAlSW5saW5lOz4NCi08IUFUVExJU1QgYWRkcmVzcw0KLSAgJWF0dHJzOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09IEhvcml6b250YWwgUnVsZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTEVNRU5UIGhyIEVNUFRZPg0KLTwhQVRUTElTVCBocg0KLSAgJWF0dHJzOw0KLSAgYWxpZ24gICAgICAgKGxlZnR8Y2VudGVyfHJpZ2h0KSAjSU1QTElFRA0KLSAgbm9zaGFkZSAgICAgKG5vc2hhZGUpICAgICAgI0lNUExJRUQNCi0gIHNpemUgICAgICAgICVQaXhlbHM7ICAgICAgICNJTVBMSUVEDQotICB3aWR0aCAgICAgICAlTGVuZ3RoOyAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09IFByZWZvcm1hdHRlZCBUZXh0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCEtLSBjb250ZW50IGlzICVJbmxpbmU7IGV4Y2x1ZGluZyANCi0gICAgICAgICJpbWd8b2JqZWN0fGFwcGxldHxiaWd8c21hbGx8c3VifHN1cHxmb250fGJhc2Vmb250IiAtLT4NCi0NCi08IUVMRU1FTlQgcHJlICVwcmUuY29udGVudDs+DQotPCFBVFRMSVNUIHByZQ0KLSAgJWF0dHJzOw0KLSAgd2lkdGggICAgICAgJU51bWJlcjsgICAgICAjSU1QTElFRA0KLSAgeG1sOnNwYWNlICAgKHByZXNlcnZlKSAgICAjRklYRUQgJ3ByZXNlcnZlJw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09IEJsb2NrLWxpa2UgUXVvdGVzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTEVNRU5UIGJsb2NrcXVvdGUgJUZsb3c7Pg0KLTwhQVRUTElTVCBibG9ja3F1b3RlDQotICAlYXR0cnM7DQotICBjaXRlICAgICAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09IFRleHQgYWxpZ25tZW50ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCEtLSBjZW50ZXIgY29udGVudCAtLT4NCi08IUVMRU1FTlQgY2VudGVyICVGbG93Oz4NCi08IUFUVExJU1QgY2VudGVyDQotICAlYXR0cnM7DQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT0gSW5zZXJ0ZWQvRGVsZXRlZCBUZXh0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IS0tDQotICBpbnMvZGVsIGFyZSBhbGxvd2VkIGluIGJsb2NrIGFuZCBpbmxpbmUgY29udGVudCwgYnV0IGl0cw0KLSAgaW5hcHByb3ByaWF0ZSB0byBpbmNsdWRlIGJsb2NrIGNvbnRlbnQgd2l0aGluIGFuIGlucyBlbGVtZW50DQotICBvY2N1cnJpbmcgaW4gaW5saW5lIGNvbnRlbnQuDQotLS0+DQotPCFFTEVNRU5UIGlucyAlRmxvdzs+DQotPCFBVFRMSVNUIGlucw0KLSAgJWF0dHJzOw0KLSAgY2l0ZSAgICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIGRhdGV0aW1lICAgICVEYXRldGltZTsgICAgICNJTVBMSUVEDQotICA+DQotDQotPCFFTEVNRU5UIGRlbCAlRmxvdzs+DQotPCFBVFRMSVNUIGRlbA0KLSAgJWF0dHJzOw0KLSAgY2l0ZSAgICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIGRhdGV0aW1lICAgICVEYXRldGltZTsgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PSBUaGUgQW5jaG9yIEVsZW1lbnQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IS0tIGNvbnRlbnQgaXMgJUlubGluZTsgZXhjZXB0IHRoYXQgYW5jaG9ycyBzaG91bGRuJ3QgYmUgbmVzdGVkIC0tPg0KLQ0KLTwhRUxFTUVOVCBhICVhLmNvbnRlbnQ7Pg0KLTwhQVRUTElTVCBhDQotICAlYXR0cnM7DQotICBjaGFyc2V0ICAgICAlQ2hhcnNldDsgICAgICAjSU1QTElFRA0KLSAgdHlwZSAgICAgICAgJUNvbnRlbnRUeXBlOyAgI0lNUExJRUQNCi0gIG5hbWUgICAgICAgIE5NVE9LRU4gICAgICAgICNJTVBMSUVEDQotICBocmVmICAgICAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgaHJlZmxhbmcgICAgJUxhbmd1YWdlQ29kZTsgI0lNUExJRUQNCi0gIHJlbCAgICAgICAgICVMaW5rVHlwZXM7ICAgICNJTVBMSUVEDQotICByZXYgICAgICAgICAlTGlua1R5cGVzOyAgICAjSU1QTElFRA0KLSAgYWNjZXNza2V5ICAgJUNoYXJhY3RlcjsgICAgI0lNUExJRUQNCi0gIHNoYXBlICAgICAgICVTaGFwZTsgICAgICAgICJyZWN0Ig0KLSAgY29vcmRzICAgICAgJUNvb3JkczsgICAgICAgI0lNUExJRUQNCi0gIHRhYmluZGV4ICAgICVOdW1iZXI7ICAgICAgICNJTVBMSUVEDQotICBvbmZvY3VzICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25ibHVyICAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIHRhcmdldCAgICAgICVGcmFtZVRhcmdldDsgICNJTVBMSUVEDQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT09PSBJbmxpbmUgRWxlbWVudHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVMRU1FTlQgc3BhbiAlSW5saW5lOz4gPCEtLSBnZW5lcmljIGxhbmd1YWdlL3N0eWxlIGNvbnRhaW5lciAtLT4NCi08IUFUVExJU1Qgc3Bhbg0KLSAgJWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBiZG8gJUlubGluZTs+ICA8IS0tIEkxOE4gQmlEaSBvdmVyLXJpZGUgLS0+DQotPCFBVFRMSVNUIGJkbw0KLSAgJWNvcmVhdHRyczsNCi0gICVldmVudHM7DQotICBsYW5nICAgICAgICAlTGFuZ3VhZ2VDb2RlOyAjSU1QTElFRA0KLSAgeG1sOmxhbmcgICAgJUxhbmd1YWdlQ29kZTsgI0lNUExJRUQNCi0gIGRpciAgICAgICAgIChsdHJ8cnRsKSAgICAgICNSRVFVSVJFRA0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBiciBFTVBUWT4gICA8IS0tIGZvcmNlZCBsaW5lIGJyZWFrIC0tPg0KLTwhQVRUTElTVCBicg0KLSAgJWNvcmVhdHRyczsNCi0gIGNsZWFyICAgICAgIChsZWZ0fGFsbHxyaWdodHxub25lKSAibm9uZSINCi0gID4NCi0NCi08IUVMRU1FTlQgZW0gJUlubGluZTs+ICAgPCEtLSBlbXBoYXNpcyAtLT4NCi08IUFUVExJU1QgZW0gJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgc3Ryb25nICVJbmxpbmU7PiAgIDwhLS0gc3Ryb25nIGVtcGhhc2lzIC0tPg0KLTwhQVRUTElTVCBzdHJvbmcgJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgZGZuICVJbmxpbmU7PiAgIDwhLS0gZGVmaW5pdGlvbmFsIC0tPg0KLTwhQVRUTElTVCBkZm4gJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgY29kZSAlSW5saW5lOz4gICA8IS0tIHByb2dyYW0gY29kZSAtLT4NCi08IUFUVExJU1QgY29kZSAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCBzYW1wICVJbmxpbmU7PiAgIDwhLS0gc2FtcGxlIC0tPg0KLTwhQVRUTElTVCBzYW1wICVhdHRyczs+DQotDQotPCFFTEVNRU5UIGtiZCAlSW5saW5lOz4gIDwhLS0gc29tZXRoaW5nIHVzZXIgd291bGQgdHlwZSAtLT4NCi08IUFUVExJU1Qga2JkICVhdHRyczs+DQotDQotPCFFTEVNRU5UIHZhciAlSW5saW5lOz4gICA8IS0tIHZhcmlhYmxlIC0tPg0KLTwhQVRUTElTVCB2YXIgJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgY2l0ZSAlSW5saW5lOz4gICA8IS0tIGNpdGF0aW9uIC0tPg0KLTwhQVRUTElTVCBjaXRlICVhdHRyczs+DQotDQotPCFFTEVNRU5UIGFiYnIgJUlubGluZTs+ICAgPCEtLSBhYmJyZXZpYXRpb24gLS0+DQotPCFBVFRMSVNUIGFiYnIgJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgYWNyb255bSAlSW5saW5lOz4gICA8IS0tIGFjcm9ueW0gLS0+DQotPCFBVFRMSVNUIGFjcm9ueW0gJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgcSAlSW5saW5lOz4gICA8IS0tIGlubGluZWQgcXVvdGUgLS0+DQotPCFBVFRMSVNUIHENCi0gICVhdHRyczsNCi0gIGNpdGUgICAgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCFFTEVNRU5UIHN1YiAlSW5saW5lOz4gPCEtLSBzdWJzY3JpcHQgLS0+DQotPCFBVFRMSVNUIHN1YiAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCBzdXAgJUlubGluZTs+IDwhLS0gc3VwZXJzY3JpcHQgLS0+DQotPCFBVFRMSVNUIHN1cCAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCB0dCAlSW5saW5lOz4gICA8IS0tIGZpeGVkIHBpdGNoIGZvbnQgLS0+DQotPCFBVFRMSVNUIHR0ICVhdHRyczs+DQotDQotPCFFTEVNRU5UIGkgJUlubGluZTs+ICAgPCEtLSBpdGFsaWMgZm9udCAtLT4NCi08IUFUVExJU1QgaSAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCBiICVJbmxpbmU7PiAgIDwhLS0gYm9sZCBmb250IC0tPg0KLTwhQVRUTElTVCBiICVhdHRyczs+DQotDQotPCFFTEVNRU5UIGJpZyAlSW5saW5lOz4gICA8IS0tIGJpZ2dlciBmb250IC0tPg0KLTwhQVRUTElTVCBiaWcgJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgc21hbGwgJUlubGluZTs+ICAgPCEtLSBzbWFsbGVyIGZvbnQgLS0+DQotPCFBVFRMSVNUIHNtYWxsICVhdHRyczs+DQotDQotPCFFTEVNRU5UIHUgJUlubGluZTs+ICAgPCEtLSB1bmRlcmxpbmUgLS0+DQotPCFBVFRMSVNUIHUgJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgcyAlSW5saW5lOz4gICA8IS0tIHN0cmlrZS10aHJvdWdoIC0tPg0KLTwhQVRUTElTVCBzICVhdHRyczs+DQotDQotPCFFTEVNRU5UIHN0cmlrZSAlSW5saW5lOz4gICA8IS0tIHN0cmlrZS10aHJvdWdoIC0tPg0KLTwhQVRUTElTVCBzdHJpa2UgJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgYmFzZWZvbnQgRU1QVFk+ICA8IS0tIGJhc2UgZm9udCBzaXplIC0tPg0KLTwhQVRUTElTVCBiYXNlZm9udA0KLSAgaWQgICAgICAgICAgSUQgICAgICAgICAgICAgI0lNUExJRUQNCi0gIHNpemUgICAgICAgIENEQVRBICAgICAgICAgICNSRVFVSVJFRA0KLSAgY29sb3IgICAgICAgJUNvbG9yOyAgICAgICAgI0lNUExJRUQNCi0gIGZhY2UgICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCFFTEVNRU5UIGZvbnQgJUlubGluZTs+IDwhLS0gbG9jYWwgY2hhbmdlIHRvIGZvbnQgLS0+DQotPCFBVFRMSVNUIGZvbnQNCi0gICVjb3JlYXR0cnM7DQotICAlaTE4bjsNCi0gIHNpemUgICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICBjb2xvciAgICAgICAlQ29sb3I7ICAgICAgICAjSU1QTElFRA0KLSAgZmFjZSAgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PT0gT2JqZWN0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotPCEtLQ0KLSAgb2JqZWN0IGlzIHVzZWQgdG8gZW1iZWQgb2JqZWN0cyBhcyBwYXJ0IG9mIEhUTUwgcGFnZXMuDQotICBwYXJhbSBlbGVtZW50cyBzaG91bGQgcHJlY2VkZSBvdGhlciBjb250ZW50LiBQYXJhbWV0ZXJzDQotICBjYW4gYWxzbyBiZSBleHByZXNzZWQgYXMgYXR0cmlidXRlL3ZhbHVlIHBhaXJzIG9uIHRoZQ0KLSAgb2JqZWN0IGVsZW1lbnQgaXRzZWxmIHdoZW4gYnJldml0eSBpcyBkZXNpcmVkLg0KLS0tPg0KLQ0KLTwhRUxFTUVOVCBvYmplY3QgKCNQQ0RBVEEgfCBwYXJhbSB8ICVibG9jazsgfCBmb3JtIHwgJWlubGluZTsgfCAlbWlzYzspKj4NCi08IUFUVExJU1Qgb2JqZWN0DQotICAlYXR0cnM7DQotICBkZWNsYXJlICAgICAoZGVjbGFyZSkgICAgICAjSU1QTElFRA0KLSAgY2xhc3NpZCAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIGNvZGViYXNlICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBkYXRhICAgICAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgdHlwZSAgICAgICAgJUNvbnRlbnRUeXBlOyAgI0lNUExJRUQNCi0gIGNvZGV0eXBlICAgICVDb250ZW50VHlwZTsgICNJTVBMSUVEDQotICBhcmNoaXZlICAgICAlVXJpTGlzdDsgICAgICAjSU1QTElFRA0KLSAgc3RhbmRieSAgICAgJVRleHQ7ICAgICAgICAgI0lNUExJRUQNCi0gIGhlaWdodCAgICAgICVMZW5ndGg7ICAgICAgICNJTVBMSUVEDQotICB3aWR0aCAgICAgICAlTGVuZ3RoOyAgICAgICAjSU1QTElFRA0KLSAgdXNlbWFwICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIG5hbWUgICAgICAgIE5NVE9LRU4gICAgICAgICNJTVBMSUVEDQotICB0YWJpbmRleCAgICAlTnVtYmVyOyAgICAgICAjSU1QTElFRA0KLSAgYWxpZ24gICAgICAgJUltZ0FsaWduOyAgICAgI0lNUExJRUQNCi0gIGJvcmRlciAgICAgICVQaXhlbHM7ICAgICAgICNJTVBMSUVEDQotICBoc3BhY2UgICAgICAlUGl4ZWxzOyAgICAgICAjSU1QTElFRA0KLSAgdnNwYWNlICAgICAgJVBpeGVsczsgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tDQotICBwYXJhbSBpcyB1c2VkIHRvIHN1cHBseSBhIG5hbWVkIHByb3BlcnR5IHZhbHVlLg0KLSAgSW4gWE1MIGl0IHdvdWxkIHNlZW0gbmF0dXJhbCB0byBmb2xsb3cgUkRGIGFuZCBzdXBwb3J0IGFuDQotICBhYmJyZXZpYXRlZCBzeW50YXggd2hlcmUgdGhlIHBhcmFtIGVsZW1lbnRzIGFyZSByZXBsYWNlZA0KLSAgYnkgYXR0cmlidXRlIHZhbHVlIHBhaXJzIG9uIHRoZSBvYmplY3Qgc3RhcnQgdGFnLg0KLS0tPg0KLTwhRUxFTUVOVCBwYXJhbSBFTVBUWT4NCi08IUFUVExJU1QgcGFyYW0NCi0gIGlkICAgICAgICAgIElEICAgICAgICAgICAgICNJTVBMSUVEDQotICBuYW1lICAgICAgICBDREFUQSAgICAgICAgICAjUkVRVUlSRUQNCi0gIHZhbHVlICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICB2YWx1ZXR5cGUgICAoZGF0YXxyZWZ8b2JqZWN0KSAiZGF0YSINCi0gIHR5cGUgICAgICAgICVDb250ZW50VHlwZTsgICNJTVBMSUVEDQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT0gSmF2YSBhcHBsZXQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLTwhLS0NCi0gIE9uZSBvZiBjb2RlIG9yIG9iamVjdCBhdHRyaWJ1dGVzIG11c3QgYmUgcHJlc2VudC4NCi0gIFBsYWNlIHBhcmFtIGVsZW1lbnRzIGJlZm9yZSBvdGhlciBjb250ZW50Lg0KLS0tPg0KLTwhRUxFTUVOVCBhcHBsZXQgKCNQQ0RBVEEgfCBwYXJhbSB8ICVibG9jazsgfCBmb3JtIHwgJWlubGluZTsgfCAlbWlzYzspKj4NCi08IUFUVExJU1QgYXBwbGV0DQotICAlY29yZWF0dHJzOw0KLSAgY29kZWJhc2UgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIGFyY2hpdmUgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICBjb2RlICAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgb2JqZWN0ICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIGFsdCAgICAgICAgICVUZXh0OyAgICAgICAgICNJTVBMSUVEDQotICBuYW1lICAgICAgICBOTVRPS0VOICAgICAgICAjSU1QTElFRA0KLSAgd2lkdGggICAgICAgJUxlbmd0aDsgICAgICAgI1JFUVVJUkVEDQotICBoZWlnaHQgICAgICAlTGVuZ3RoOyAgICAgICAjUkVRVUlSRUQNCi0gIGFsaWduICAgICAgICVJbWdBbGlnbjsgICAgICNJTVBMSUVEDQotICBoc3BhY2UgICAgICAlUGl4ZWxzOyAgICAgICAjSU1QTElFRA0KLSAgdnNwYWNlICAgICAgJVBpeGVsczsgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PSBJbWFnZXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhLS0NCi0gICBUbyBhdm9pZCBhY2Nlc3NpYmlsaXR5IHByb2JsZW1zIGZvciBwZW9wbGUgd2hvIGFyZW4ndA0KLSAgIGFibGUgdG8gc2VlIHRoZSBpbWFnZSwgeW91IHNob3VsZCBwcm92aWRlIGEgdGV4dA0KLSAgIGRlc2NyaXB0aW9uIHVzaW5nIHRoZSBhbHQgYW5kIGxvbmdkZXNjIGF0dHJpYnV0ZXMuDQotICAgSW4gYWRkaXRpb24sIGF2b2lkIHRoZSB1c2Ugb2Ygc2VydmVyLXNpZGUgaW1hZ2UgbWFwcy4NCi0tLT4NCi0NCi08IUVMRU1FTlQgaW1nIEVNUFRZPg0KLTwhQVRUTElTVCBpbWcNCi0gICVhdHRyczsNCi0gIHNyYyAgICAgICAgICVVUkk7ICAgICAgICAgICNSRVFVSVJFRA0KLSAgYWx0ICAgICAgICAgJVRleHQ7ICAgICAgICAgI1JFUVVJUkVEDQotICBuYW1lICAgICAgICBOTVRPS0VOICAgICAgICAjSU1QTElFRA0KLSAgbG9uZ2Rlc2MgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIGhlaWdodCAgICAgICVMZW5ndGg7ICAgICAgICNJTVBMSUVEDQotICB3aWR0aCAgICAgICAlTGVuZ3RoOyAgICAgICAjSU1QTElFRA0KLSAgdXNlbWFwICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIGlzbWFwICAgICAgIChpc21hcCkgICAgICAgICNJTVBMSUVEDQotICBhbGlnbiAgICAgICAlSW1nQWxpZ247ICAgICAjSU1QTElFRA0KLSAgYm9yZGVyICAgICAgJUxlbmd0aDsgICAgICAgI0lNUExJRUQNCi0gIGhzcGFjZSAgICAgICVQaXhlbHM7ICAgICAgICNJTVBMSUVEDQotICB2c3BhY2UgICAgICAlUGl4ZWxzOyAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0gdXNlbWFwIHBvaW50cyB0byBhIG1hcCBlbGVtZW50IHdoaWNoIG1heSBiZSBpbiB0aGlzIGRvY3VtZW50DQotICBvciBhbiBleHRlcm5hbCBkb2N1bWVudCwgYWx0aG91Z2ggdGhlIGxhdHRlciBpcyBub3Qgd2lkZWx5IHN1cHBvcnRlZCAtLT4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09IENsaWVudC1zaWRlIGltYWdlIG1hcHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhLS0gVGhlc2UgY2FuIGJlIHBsYWNlZCBpbiB0aGUgc2FtZSBkb2N1bWVudCBvciBncm91cGVkIGluIGENCi0gICAgIHNlcGFyYXRlIGRvY3VtZW50IGFsdGhvdWdoIHRoaXMgaXNuJ3QgeWV0IHdpZGVseSBzdXBwb3J0ZWQgLS0+DQotDQotPCFFTEVNRU5UIG1hcCAoKCVibG9jazsgfCBmb3JtIHwgJW1pc2M7KSsgfCBhcmVhKyk+DQotPCFBVFRMSVNUIG1hcA0KLSAgJWkxOG47DQotICAlZXZlbnRzOw0KLSAgaWQgICAgICAgICAgSUQgICAgICAgICAgICAgI1JFUVVJUkVEDQotICBjbGFzcyAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgc3R5bGUgICAgICAgJVN0eWxlU2hlZXQ7ICAgI0lNUExJRUQNCi0gIHRpdGxlICAgICAgICVUZXh0OyAgICAgICAgICNJTVBMSUVEDQotICBuYW1lICAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBhcmVhIEVNUFRZPg0KLTwhQVRUTElTVCBhcmVhDQotICAlYXR0cnM7DQotICBzaGFwZSAgICAgICAlU2hhcGU7ICAgICAgICAicmVjdCINCi0gIGNvb3JkcyAgICAgICVDb29yZHM7ICAgICAgICNJTVBMSUVEDQotICBocmVmICAgICAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgbm9ocmVmICAgICAgKG5vaHJlZikgICAgICAgI0lNUExJRUQNCi0gIGFsdCAgICAgICAgICVUZXh0OyAgICAgICAgICNSRVFVSVJFRA0KLSAgdGFiaW5kZXggICAgJU51bWJlcjsgICAgICAgI0lNUExJRUQNCi0gIGFjY2Vzc2tleSAgICVDaGFyYWN0ZXI7ICAgICNJTVBMSUVEDQotICBvbmZvY3VzICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25ibHVyICAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIHRhcmdldCAgICAgICVGcmFtZVRhcmdldDsgICNJTVBMSUVEDQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT0gRm9ybXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVMRU1FTlQgZm9ybSAlZm9ybS5jb250ZW50Oz4gICA8IS0tIGZvcm1zIHNob3VsZG4ndCBiZSBuZXN0ZWQgLS0+DQotDQotPCFBVFRMSVNUIGZvcm0NCi0gICVhdHRyczsNCi0gIGFjdGlvbiAgICAgICVVUkk7ICAgICAgICAgICNSRVFVSVJFRA0KLSAgbWV0aG9kICAgICAgKGdldHxwb3N0KSAgICAgImdldCINCi0gIG5hbWUgICAgICAgIE5NVE9LRU4gICAgICAgICNJTVBMSUVEDQotICBlbmN0eXBlICAgICAlQ29udGVudFR5cGU7ICAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIg0KLSAgb25zdWJtaXQgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9ucmVzZXQgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBhY2NlcHQgICAgICAlQ29udGVudFR5cGVzOyAjSU1QTElFRA0KLSAgYWNjZXB0LWNoYXJzZXQgJUNoYXJzZXRzOyAgI0lNUExJRUQNCi0gIHRhcmdldCAgICAgICVGcmFtZVRhcmdldDsgICNJTVBMSUVEDQotICA+DQotDQotPCEtLQ0KLSAgRWFjaCBsYWJlbCBtdXN0IG5vdCBjb250YWluIG1vcmUgdGhhbiBPTkUgZmllbGQNCi0gIExhYmVsIGVsZW1lbnRzIHNob3VsZG4ndCBiZSBuZXN0ZWQuDQotLS0+DQotPCFFTEVNRU5UIGxhYmVsICVJbmxpbmU7Pg0KLTwhQVRUTElTVCBsYWJlbA0KLSAgJWF0dHJzOw0KLSAgZm9yICAgICAgICAgSURSRUYgICAgICAgICAgI0lNUExJRUQNCi0gIGFjY2Vzc2tleSAgICVDaGFyYWN0ZXI7ICAgICNJTVBMSUVEDQotICBvbmZvY3VzICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25ibHVyICAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IUVOVElUWSAlIElucHV0VHlwZQ0KLSAgIih0ZXh0IHwgcGFzc3dvcmQgfCBjaGVja2JveCB8DQotICAgIHJhZGlvIHwgc3VibWl0IHwgcmVzZXQgfA0KLSAgICBmaWxlIHwgaGlkZGVuIHwgaW1hZ2UgfCBidXR0b24pIg0KLSAgID4NCi0NCi08IS0tIHRoZSBuYW1lIGF0dHJpYnV0ZSBpcyByZXF1aXJlZCBmb3IgYWxsIGJ1dCBzdWJtaXQgJiByZXNldCAtLT4NCi0NCi08IUVMRU1FTlQgaW5wdXQgRU1QVFk+ICAgICA8IS0tIGZvcm0gY29udHJvbCAtLT4NCi08IUFUVExJU1QgaW5wdXQNCi0gICVhdHRyczsNCi0gIHR5cGUgICAgICAgICVJbnB1dFR5cGU7ICAgICJ0ZXh0Ig0KLSAgbmFtZSAgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIHZhbHVlICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICBjaGVja2VkICAgICAoY2hlY2tlZCkgICAgICAjSU1QTElFRA0KLSAgZGlzYWJsZWQgICAgKGRpc2FibGVkKSAgICAgI0lNUExJRUQNCi0gIHJlYWRvbmx5ICAgIChyZWFkb25seSkgICAgICNJTVBMSUVEDQotICBzaXplICAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgbWF4bGVuZ3RoICAgJU51bWJlcjsgICAgICAgI0lNUExJRUQNCi0gIHNyYyAgICAgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBhbHQgICAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgdXNlbWFwICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIHRhYmluZGV4ICAgICVOdW1iZXI7ICAgICAgICNJTVBMSUVEDQotICBhY2Nlc3NrZXkgICAlQ2hhcmFjdGVyOyAgICAjSU1QTElFRA0KLSAgb25mb2N1cyAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9uYmx1ciAgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbnNlbGVjdCAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25jaGFuZ2UgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIGFjY2VwdCAgICAgICVDb250ZW50VHlwZXM7ICNJTVBMSUVEDQotICBhbGlnbiAgICAgICAlSW1nQWxpZ247ICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBzZWxlY3QgKG9wdGdyb3VwfG9wdGlvbikrPiAgPCEtLSBvcHRpb24gc2VsZWN0b3IgLS0+DQotPCFBVFRMSVNUIHNlbGVjdA0KLSAgJWF0dHJzOw0KLSAgbmFtZSAgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIHNpemUgICAgICAgICVOdW1iZXI7ICAgICAgICNJTVBMSUVEDQotICBtdWx0aXBsZSAgICAobXVsdGlwbGUpICAgICAjSU1QTElFRA0KLSAgZGlzYWJsZWQgICAgKGRpc2FibGVkKSAgICAgI0lNUExJRUQNCi0gIHRhYmluZGV4ICAgICVOdW1iZXI7ICAgICAgICNJTVBMSUVEDQotICBvbmZvY3VzICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25ibHVyICAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9uY2hhbmdlICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCFFTEVNRU5UIG9wdGdyb3VwIChvcHRpb24pKz4gICA8IS0tIG9wdGlvbiBncm91cCAtLT4NCi08IUFUVExJU1Qgb3B0Z3JvdXANCi0gICVhdHRyczsNCi0gIGRpc2FibGVkICAgIChkaXNhYmxlZCkgICAgICNJTVBMSUVEDQotICBsYWJlbCAgICAgICAlVGV4dDsgICAgICAgICAjUkVRVUlSRUQNCi0gID4NCi0NCi08IUVMRU1FTlQgb3B0aW9uICgjUENEQVRBKT4gICAgIDwhLS0gc2VsZWN0YWJsZSBjaG9pY2UgLS0+DQotPCFBVFRMSVNUIG9wdGlvbg0KLSAgJWF0dHJzOw0KLSAgc2VsZWN0ZWQgICAgKHNlbGVjdGVkKSAgICAgI0lNUExJRUQNCi0gIGRpc2FibGVkICAgIChkaXNhYmxlZCkgICAgICNJTVBMSUVEDQotICBsYWJlbCAgICAgICAlVGV4dDsgICAgICAgICAjSU1QTElFRA0KLSAgdmFsdWUgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IUVMRU1FTlQgdGV4dGFyZWEgKCNQQ0RBVEEpPiAgICAgPCEtLSBtdWx0aS1saW5lIHRleHQgZmllbGQgLS0+DQotPCFBVFRMSVNUIHRleHRhcmVhDQotICAlYXR0cnM7DQotICBuYW1lICAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgcm93cyAgICAgICAgJU51bWJlcjsgICAgICAgI1JFUVVJUkVEDQotICBjb2xzICAgICAgICAlTnVtYmVyOyAgICAgICAjUkVRVUlSRUQNCi0gIGRpc2FibGVkICAgIChkaXNhYmxlZCkgICAgICNJTVBMSUVEDQotICByZWFkb25seSAgICAocmVhZG9ubHkpICAgICAjSU1QTElFRA0KLSAgdGFiaW5kZXggICAgJU51bWJlcjsgICAgICAgI0lNUExJRUQNCi0gIGFjY2Vzc2tleSAgICVDaGFyYWN0ZXI7ICAgICNJTVBMSUVEDQotICBvbmZvY3VzICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25ibHVyICAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9uc2VsZWN0ICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbmNoYW5nZSAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0NCi0gIFRoZSBmaWVsZHNldCBlbGVtZW50IGlzIHVzZWQgdG8gZ3JvdXAgZm9ybSBmaWVsZHMuDQotICBPbmx5IG9uZSBsZWdlbmQgZWxlbWVudCBzaG91bGQgb2NjdXIgaW4gdGhlIGNvbnRlbnQNCi0gIGFuZCBpZiBwcmVzZW50IHNob3VsZCBvbmx5IGJlIHByZWNlZGVkIGJ5IHdoaXRlc3BhY2UuDQotLS0+DQotPCFFTEVNRU5UIGZpZWxkc2V0ICgjUENEQVRBIHwgbGVnZW5kIHwgJWJsb2NrOyB8IGZvcm0gfCAlaW5saW5lOyB8ICVtaXNjOykqPg0KLTwhQVRUTElTVCBmaWVsZHNldA0KLSAgJWF0dHJzOw0KLSAgPg0KLQ0KLTwhRU5USVRZICUgTEFsaWduICIodG9wfGJvdHRvbXxsZWZ0fHJpZ2h0KSI+DQotDQotPCFFTEVNRU5UIGxlZ2VuZCAlSW5saW5lOz4gICAgIDwhLS0gZmllbGRzZXQgbGFiZWwgLS0+DQotPCFBVFRMSVNUIGxlZ2VuZA0KLSAgJWF0dHJzOw0KLSAgYWNjZXNza2V5ICAgJUNoYXJhY3RlcjsgICAgI0lNUExJRUQNCi0gIGFsaWduICAgICAgICVMQWxpZ247ICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLQ0KLSBDb250ZW50IGlzICVGbG93OyBleGNsdWRpbmcgYSwgZm9ybSwgZm9ybSBjb250cm9scywgaWZyYW1lDQotLS0+IA0KLTwhRUxFTUVOVCBidXR0b24gJWJ1dHRvbi5jb250ZW50Oz4gIDwhLS0gcHVzaCBidXR0b24gLS0+DQotPCFBVFRMSVNUIGJ1dHRvbg0KLSAgJWF0dHJzOw0KLSAgbmFtZSAgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIHZhbHVlICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICB0eXBlICAgICAgICAoYnV0dG9ufHN1Ym1pdHxyZXNldCkgInN1Ym1pdCINCi0gIGRpc2FibGVkICAgIChkaXNhYmxlZCkgICAgICNJTVBMSUVEDQotICB0YWJpbmRleCAgICAlTnVtYmVyOyAgICAgICAjSU1QTElFRA0KLSAgYWNjZXNza2V5ICAgJUNoYXJhY3RlcjsgICAgI0lNUExJRUQNCi0gIG9uZm9jdXMgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbmJsdXIgICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0gc2luZ2xlLWxpbmUgdGV4dCBpbnB1dCBjb250cm9sIChERVBSRUNBVEVEKSAtLT4NCi08IUVMRU1FTlQgaXNpbmRleCBFTVBUWT4NCi08IUFUVExJU1QgaXNpbmRleA0KLSAgJWNvcmVhdHRyczsNCi0gICVpMThuOw0KLSAgcHJvbXB0ICAgICAgJVRleHQ7ICAgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PT09PT0gVGFibGVzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhLS0gRGVyaXZlZCBmcm9tIElFVEYgSFRNTCB0YWJsZSBzdGFuZGFyZCwgc2VlIFtSRkMxOTQyXSAtLT4NCi0NCi08IS0tDQotIFRoZSBib3JkZXIgYXR0cmlidXRlIHNldHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgZnJhbWUgYXJvdW5kIHRoZQ0KLSB0YWJsZS4gVGhlIGRlZmF1bHQgdW5pdHMgYXJlIHNjcmVlbiBwaXhlbHMuDQotDQotIFRoZSBmcmFtZSBhdHRyaWJ1dGUgc3BlY2lmaWVzIHdoaWNoIHBhcnRzIG9mIHRoZSBmcmFtZSBhcm91bmQNCi0gdGhlIHRhYmxlIHNob3VsZCBiZSByZW5kZXJlZC4gVGhlIHZhbHVlcyBhcmUgbm90IHRoZSBzYW1lIGFzDQotIENBTFMgdG8gYXZvaWQgYSBuYW1lIGNsYXNoIHdpdGggdGhlIHZhbGlnbiBhdHRyaWJ1dGUuDQotLS0+DQotPCFFTlRJVFkgJSBURnJhbWUgIih2b2lkfGFib3ZlfGJlbG93fGhzaWRlc3xsaHN8cmhzfHZzaWRlc3xib3h8Ym9yZGVyKSI+DQotDQotPCEtLQ0KLSBUaGUgcnVsZXMgYXR0cmlidXRlIGRlZmluZXMgd2hpY2ggcnVsZXMgdG8gZHJhdyBiZXR3ZWVuIGNlbGxzOg0KLQ0KLSBJZiBydWxlcyBpcyBhYnNlbnQgdGhlbiBhc3N1bWU6DQotICAgICAibm9uZSIgaWYgYm9yZGVyIGlzIGFic2VudCBvciBib3JkZXI9IjAiIG90aGVyd2lzZSAiYWxsIg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgVFJ1bGVzICIobm9uZSB8IGdyb3VwcyB8IHJvd3MgfCBjb2xzIHwgYWxsKSI+DQotICANCi08IS0tIGhvcml6b250YWwgcGxhY2VtZW50IG9mIHRhYmxlIHJlbGF0aXZlIHRvIGRvY3VtZW50IC0tPg0KLTwhRU5USVRZICUgVEFsaWduICIobGVmdHxjZW50ZXJ8cmlnaHQpIj4NCi0NCi08IS0tIGhvcml6b250YWwgYWxpZ25tZW50IGF0dHJpYnV0ZXMgZm9yIGNlbGwgY29udGVudHMNCi0NCi0gIGNoYXIgICAgICAgIGFsaWdubWVudCBjaGFyLCBlLmcuIGNoYXI9JzonDQotICBjaGFyb2ZmICAgICBvZmZzZXQgZm9yIGFsaWdubWVudCBjaGFyDQotLS0+DQotPCFFTlRJVFkgJSBjZWxsaGFsaWduDQotICAiYWxpZ24gICAgICAobGVmdHxjZW50ZXJ8cmlnaHR8anVzdGlmeXxjaGFyKSAjSU1QTElFRA0KLSAgIGNoYXIgICAgICAgJUNoYXJhY3RlcjsgICAgI0lNUExJRUQNCi0gICBjaGFyb2ZmICAgICVMZW5ndGg7ICAgICAgICNJTVBMSUVEIg0KLSAgPg0KLQ0KLTwhLS0gdmVydGljYWwgYWxpZ25tZW50IGF0dHJpYnV0ZXMgZm9yIGNlbGwgY29udGVudHMgLS0+DQotPCFFTlRJVFkgJSBjZWxsdmFsaWduDQotICAidmFsaWduICAgICAodG9wfG1pZGRsZXxib3R0b218YmFzZWxpbmUpICNJTVBMSUVEIg0KLSAgPg0KLQ0KLTwhRUxFTUVOVCB0YWJsZQ0KLSAgICAgKGNhcHRpb24/LCAoY29sKnxjb2xncm91cCopLCB0aGVhZD8sIHRmb290PywgKHRib2R5K3x0cispKT4NCi08IUVMRU1FTlQgY2FwdGlvbiAgJUlubGluZTs+DQotPCFFTEVNRU5UIHRoZWFkICAgICh0cikrPg0KLTwhRUxFTUVOVCB0Zm9vdCAgICAodHIpKz4NCi08IUVMRU1FTlQgdGJvZHkgICAgKHRyKSs+DQotPCFFTEVNRU5UIGNvbGdyb3VwIChjb2wpKj4NCi08IUVMRU1FTlQgY29sICAgICAgRU1QVFk+DQotPCFFTEVNRU5UIHRyICAgICAgICh0aHx0ZCkrPg0KLTwhRUxFTUVOVCB0aCAgICAgICAlRmxvdzs+DQotPCFFTEVNRU5UIHRkICAgICAgICVGbG93Oz4NCi0NCi08IUFUVExJU1QgdGFibGUNCi0gICVhdHRyczsNCi0gIHN1bW1hcnkgICAgICVUZXh0OyAgICAgICAgICNJTVBMSUVEDQotICB3aWR0aCAgICAgICAlTGVuZ3RoOyAgICAgICAjSU1QTElFRA0KLSAgYm9yZGVyICAgICAgJVBpeGVsczsgICAgICAgI0lNUExJRUQNCi0gIGZyYW1lICAgICAgICVURnJhbWU7ICAgICAgICNJTVBMSUVEDQotICBydWxlcyAgICAgICAlVFJ1bGVzOyAgICAgICAjSU1QTElFRA0KLSAgY2VsbHNwYWNpbmcgJUxlbmd0aDsgICAgICAgI0lNUExJRUQNCi0gIGNlbGxwYWRkaW5nICVMZW5ndGg7ICAgICAgICNJTVBMSUVEDQotICBhbGlnbiAgICAgICAlVEFsaWduOyAgICAgICAjSU1QTElFRA0KLSAgYmdjb2xvciAgICAgJUNvbG9yOyAgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IUVOVElUWSAlIENBbGlnbiAiKHRvcHxib3R0b218bGVmdHxyaWdodCkiPg0KLQ0KLTwhQVRUTElTVCBjYXB0aW9uDQotICAlYXR0cnM7DQotICBhbGlnbiAgICAgICAlQ0FsaWduOyAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0NCi1jb2xncm91cCBncm91cHMgYSBzZXQgb2YgY29sIGVsZW1lbnRzLiBJdCBhbGxvd3MgeW91IHRvIGdyb3VwDQotc2V2ZXJhbCBzZW1hbnRpY2FsbHkgcmVsYXRlZCBjb2x1bW5zIHRvZ2V0aGVyLg0KLS0tPg0KLTwhQVRUTElTVCBjb2xncm91cA0KLSAgJWF0dHJzOw0KLSAgc3BhbiAgICAgICAgJU51bWJlcjsgICAgICAgIjEiDQotICB3aWR0aCAgICAgICAlTXVsdGlMZW5ndGg7ICAjSU1QTElFRA0KLSAgJWNlbGxoYWxpZ247DQotICAlY2VsbHZhbGlnbjsNCi0gID4NCi0NCi08IS0tDQotIGNvbCBlbGVtZW50cyBkZWZpbmUgdGhlIGFsaWdubWVudCBwcm9wZXJ0aWVzIGZvciBjZWxscyBpbg0KLSBvbmUgb3IgbW9yZSBjb2x1bW5zLg0KLQ0KLSBUaGUgd2lkdGggYXR0cmlidXRlIHNwZWNpZmllcyB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbnMsIGUuZy4NCi0NCi0gICAgIHdpZHRoPTY0ICAgICAgICB3aWR0aCBpbiBzY3JlZW4gcGl4ZWxzDQotICAgICB3aWR0aD0wLjUqICAgICAgcmVsYXRpdmUgd2lkdGggb2YgMC41DQotDQotIFRoZSBzcGFuIGF0dHJpYnV0ZSBjYXVzZXMgdGhlIGF0dHJpYnV0ZXMgb2Ygb25lDQotIGNvbCBlbGVtZW50IHRvIGFwcGx5IHRvIG1vcmUgdGhhbiBvbmUgY29sdW1uLg0KLS0tPg0KLTwhQVRUTElTVCBjb2wNCi0gICVhdHRyczsNCi0gIHNwYW4gICAgICAgICVOdW1iZXI7ICAgICAgICIxIg0KLSAgd2lkdGggICAgICAgJU11bHRpTGVuZ3RoOyAgI0lNUExJRUQNCi0gICVjZWxsaGFsaWduOw0KLSAgJWNlbGx2YWxpZ247DQotICA+DQotDQotPCEtLQ0KLSAgICBVc2UgdGhlYWQgdG8gZHVwbGljYXRlIGhlYWRlcnMgd2hlbiBicmVha2luZyB0YWJsZQ0KLSAgICBhY3Jvc3MgcGFnZSBib3VuZGFyaWVzLCBvciBmb3Igc3RhdGljIGhlYWRlcnMgd2hlbg0KLSAgICB0Ym9keSBzZWN0aW9ucyBhcmUgcmVuZGVyZWQgaW4gc2Nyb2xsaW5nIHBhbmVsLg0KLQ0KLSAgICBVc2UgdGZvb3QgdG8gZHVwbGljYXRlIGZvb3RlcnMgd2hlbiBicmVha2luZyB0YWJsZQ0KLSAgICBhY3Jvc3MgcGFnZSBib3VuZGFyaWVzLCBvciBmb3Igc3RhdGljIGZvb3RlcnMgd2hlbg0KLSAgICB0Ym9keSBzZWN0aW9ucyBhcmUgcmVuZGVyZWQgaW4gc2Nyb2xsaW5nIHBhbmVsLg0KLQ0KLSAgICBVc2UgbXVsdGlwbGUgdGJvZHkgc2VjdGlvbnMgd2hlbiBydWxlcyBhcmUgbmVlZGVkDQotICAgIGJldHdlZW4gZ3JvdXBzIG9mIHRhYmxlIHJvd3MuDQotLS0+DQotPCFBVFRMSVNUIHRoZWFkDQotICAlYXR0cnM7DQotICAlY2VsbGhhbGlnbjsNCi0gICVjZWxsdmFsaWduOw0KLSAgPg0KLQ0KLTwhQVRUTElTVCB0Zm9vdA0KLSAgJWF0dHJzOw0KLSAgJWNlbGxoYWxpZ247DQotICAlY2VsbHZhbGlnbjsNCi0gID4NCi0NCi08IUFUVExJU1QgdGJvZHkNCi0gICVhdHRyczsNCi0gICVjZWxsaGFsaWduOw0KLSAgJWNlbGx2YWxpZ247DQotICA+DQotDQotPCFBVFRMSVNUIHRyDQotICAlYXR0cnM7DQotICAlY2VsbGhhbGlnbjsNCi0gICVjZWxsdmFsaWduOw0KLSAgYmdjb2xvciAgICAgJUNvbG9yOyAgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tIFNjb3BlIGlzIHNpbXBsZXIgdGhhbiBoZWFkZXJzIGF0dHJpYnV0ZSBmb3IgY29tbW9uIHRhYmxlcyAtLT4NCi08IUVOVElUWSAlIFNjb3BlICIocm93fGNvbHxyb3dncm91cHxjb2xncm91cCkiPg0KLQ0KLTwhLS0gdGggaXMgZm9yIGhlYWRlcnMsIHRkIGZvciBkYXRhIGFuZCBmb3IgY2VsbHMgYWN0aW5nIGFzIGJvdGggLS0+DQotDQotPCFBVFRMSVNUIHRoDQotICAlYXR0cnM7DQotICBhYmJyICAgICAgICAlVGV4dDsgICAgICAgICAjSU1QTElFRA0KLSAgYXhpcyAgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIGhlYWRlcnMgICAgIElEUkVGUyAgICAgICAgICNJTVBMSUVEDQotICBzY29wZSAgICAgICAlU2NvcGU7ICAgICAgICAjSU1QTElFRA0KLSAgcm93c3BhbiAgICAgJU51bWJlcjsgICAgICAgIjEiDQotICBjb2xzcGFuICAgICAlTnVtYmVyOyAgICAgICAiMSINCi0gICVjZWxsaGFsaWduOw0KLSAgJWNlbGx2YWxpZ247DQotICBub3dyYXAgICAgICAobm93cmFwKSAgICAgICAjSU1QTElFRA0KLSAgYmdjb2xvciAgICAgJUNvbG9yOyAgICAgICAgI0lNUExJRUQNCi0gIHdpZHRoICAgICAgICVQaXhlbHM7ICAgICAgICNJTVBMSUVEDQotICBoZWlnaHQgICAgICAlUGl4ZWxzOyAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhQVRUTElTVCB0ZA0KLSAgJWF0dHJzOw0KLSAgYWJiciAgICAgICAgJVRleHQ7ICAgICAgICAgI0lNUExJRUQNCi0gIGF4aXMgICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICBoZWFkZXJzICAgICBJRFJFRlMgICAgICAgICAjSU1QTElFRA0KLSAgc2NvcGUgICAgICAgJVNjb3BlOyAgICAgICAgI0lNUExJRUQNCi0gIHJvd3NwYW4gICAgICVOdW1iZXI7ICAgICAgICIxIg0KLSAgY29sc3BhbiAgICAgJU51bWJlcjsgICAgICAgIjEiDQotICAlY2VsbGhhbGlnbjsNCi0gICVjZWxsdmFsaWduOw0KLSAgbm93cmFwICAgICAgKG5vd3JhcCkgICAgICAgI0lNUExJRUQNCi0gIGJnY29sb3IgICAgICVDb2xvcjsgICAgICAgICNJTVBMSUVEDQotICB3aWR0aCAgICAgICAlUGl4ZWxzOyAgICAgICAjSU1QTElFRA0KLSAgaGVpZ2h0ICAgICAgJVBpeGVsczsgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTFjOGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhlMDQxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLWRldi5wcm9wZXJ0aWVzCi10ZW1wLmZvbGRlcgotY3NzY29yZXRlc3RzLmphcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDc5N2RiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE2MTk5ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotI1dlZCBKYW4gMTIgMTY6NDc6MjUgRVNUIDIwMDUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9YWJvcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1ZGMxOWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jRnJpIE1heSAyNyAyMzozOToyMSBFRFQgMjAwNQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmIwMjExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6IENTUyBDb3JlIFRlc3RzIFBsdWctaW4KLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cwotQnVuZGxlLVZlcnNpb246IDEuMC4wCi1CdW5kbGUtQ2xhc3NQYXRoOiBjc3Njb3JldGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuQ1NTQ29yZVRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZwotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLAotIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbCwKLSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuc291cmNlLAotIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy50ZXN0ZmlsZXMsCi0gb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnRlc3RmaWxlcy5yZXN1bHRzLAotIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy51dGlsCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLAotIG9yZy5qdW5pdCwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lCi1FY2xpcHNlLUF1dG9TdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY2Yjk2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotPGJvZHkgbGFuZz0iRU4tVVMiPgotPGgyPkFib3V0IFRoaXMgQ29udGVudDwvaDI+Ci0gCi08cD5GZWJydWFyeSAyNCwgMjAwNTwvcD4JCi08aDM+TGljZW5zZTwvaDM+Ci0KLTxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAoJnF1b3Q7Q29udGVudCZxdW90OykuICBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKLUVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+Ci0KLTxwPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIENvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgmcXVvdDtSZWRpc3RyaWJ1dG9yJnF1b3Q7KSBhbmQgZGlmZmVyZW50IHRlcm1zIGFuZCBjb25kaXRpb25zIG1heQotYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAgQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3IncyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuICBJZiBubyBzdWNoIGxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiAgVW5sZXNzIG90aGVyd2lzZQotaW5kaWNhdGVkIGJlbG93LCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQuPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZiY2QzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIGNzc2NvcmV0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgc3JjLyxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbAotc3JjLmluY2x1ZGVzID0gcGx1Z2luLnhtbAotamFycy5jb21waWxlLm9yZGVyID0gY3NzY29yZXRlc3RzLmphcgotc291cmNlLmNzc2NvcmV0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuY3NzY29yZXRlc3RzLmphciA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL0NTU0FsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9DU1NBbGxUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDQ2YjhlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL0NTU0FsbFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcwotICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcwotICogb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kCi0gKiBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsLkJVRzczOTkwU2VsZWN0b3JGb3JtYXRUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbC5DU1NDaGFyc2V0UnVsZVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsLkNTU0ZvbnRGYWNlUnVsZVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsLkNTU0ltcG9ydFJ1bGVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbC5DU1NNZWRpYVJ1bGVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbC5DU1NQYWdlUnVsZVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsLkNTU1N0eWxlUnVsZVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsLkNTU1N0eWxlU2hlZXRUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5zb3VyY2UuQ1NTU2VsZWN0b3JUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5zb3VyY2UuQ1NTU291cmNlUGFyc2VyVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuc291cmNlLkNTU1RleHRQYXJzZXJUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5zb3VyY2UuQ1NTVXJsVGVzdDsKLQotCi1wdWJsaWMgY2xhc3MgQ1NTQWxsVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgiU1NFIE1vZGVsIENTUyBUZXN0cyIpOwotCi0JCWFkZFNvdXJjZVRlc3RzKHN1aXRlKTsKLQkJYWRkTW9kZWxUZXN0cyhzdWl0ZSk7Ci0KLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENTU0NvcmVQcmVmZXJlbmNlc1Rlc3QuY2xhc3MpOwotCQlyZXR1cm4gc3VpdGU7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBhZGRTb3VyY2VUZXN0cyhUZXN0U3VpdGUgc3VpdGUpIHsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENTU1NvdXJjZVBhcnNlclRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTVGV4dFBhcnNlclRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTU2VsZWN0b3JUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENTU1VybFRlc3QuY2xhc3MpOwotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgYWRkTW9kZWxUZXN0cyhUZXN0U3VpdGUgc3VpdGUpIHsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENTU1N0eWxlU2hlZXRUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENTU0NoYXJzZXRSdWxlVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDU1NJbXBvcnRSdWxlVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDU1NTdHlsZVJ1bGVUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENTU01lZGlhUnVsZVRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTUGFnZVJ1bGVUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENTU0ZvbnRGYWNlUnVsZVRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQlVHNzM5OTBTZWxlY3RvckZvcm1hdFRlc3QuY2xhc3MpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9DU1NDb3JlUHJlZmVyZW5jZXNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9DU1NDb3JlUHJlZmVyZW5jZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2MDljNmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvQ1NTQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5EZWZhdWx0U2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLklFY2xpcHNlUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkluc3RhbmNlU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLkNTU0NvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkNTU0NvcmVQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOwotCi0vKioKLSAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgdGVzdCBpcyB0byB2ZXJpZnkgdGhlIHZhbGlkaXR5IG9mIHRoZSBYTUwgU291cmNlCi0gKiBlZGl0b3IgcHJlZmVyZW5jZXMuIFRlc3RzIGluY2x1ZGUgc2V0dGluZy9nZXR0aW5nIHByZWZlcmVuY2VzLgotICogCi0gKiBOT1RFOiBUaGlzIHRlc3Qgc2hvdWxkIGJlIHByZWZvcm1lZCBvbiBhIGNsZWFuIHdvcmtzcGFjZS4gSWYgcGVyZm9ybWVkIG9uCi0gKiBhbiBleGlzdGluZyB3b3Jrc3BhY2UsIHRoaXMgdGVzdCB3aWxsIG1hbmlwdWxhdGUgcHJlZmVyZW5jZXMgaW4gdGhlCi0gKiB3b3Jrc3BhY2UsIHRob3VnaCBhdHRlbXB0cyB3aWxsIGJlIG1hZGUgdG8gcmVzdG9yZSBvcmlnaW5hbCB2YWx1ZXMgYWZ0ZXIKLSAqIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBDU1NDb3JlUHJlZmVyZW5jZXNUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIFRlc3RzIGV4aXN0YW5jZSBvZiBwcmVmZXJlbmNlIHZhbHVlcyB3aGVuIGdldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMKLQkgKiB0aHJvdWdoIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJ1bmRsZUdldFByZWZlcmVuY2VzKCkgewotCQlmaW5hbCBTdHJpbmcgYnVuZGxlTmFtZSA9ICJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUiOwotCi0JCS8vIG5lZWQgdG8gc3RhcnQgdXAgYnVuZGxlIGZvciBkZWZhdWx0IHZhbHVlcyB0byBiZSBsb2FkZWQKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShidW5kbGVOYW1lKTsKLQkJdHJ5IHsKLQkJCWlmIChidW5kbGUgIT0gbnVsbCkKLQkJCQlidW5kbGUuc3RhcnQoKTsKLQkJCWVsc2UKLQkJCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBjb3VsZCBub3QgZmluZCBidW5kbGU6ICIgKyBidW5kbGVOYW1lKTsKLQkJfSBjYXRjaCAoQnVuZGxlRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCBiZWNhdXNlIG9mIGV4Y2VwdGlvbiBzdGFydGluZyBidW5kbGU6ICIgKyBidW5kbGVOYW1lICsgIiBleGNlcHRpb246ICIgKyBlKTsKLQkJfQotCi0JCWJ1bmRsZUdldFByZWZlcmVuY2UoYnVuZGxlTmFtZSwgQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9TSVpFKTsKLQkJYnVuZGxlR2V0UHJlZmVyZW5jZShidW5kbGVOYW1lLCBDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkxJTkVfV0lEVEgpOwotCX0KLQotCXByaXZhdGUgdm9pZCBidW5kbGVHZXRQcmVmZXJlbmNlKFN0cmluZyBidW5kbGVOYW1lLCBTdHJpbmcgcHJlZktleSkgewotCQlpbnQgZGVmYXVsdFZhbHVlID0gLTE7Ci0KLQkJaW50IHZhbHVlID0gUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlKCkuZ2V0SW50KGJ1bmRsZU5hbWUsIHByZWZLZXksIGRlZmF1bHRWYWx1ZSwgbnVsbCk7Ci0JCWFzc2VydFRydWUoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UuIEtleTogIiArIHByZWZLZXksIGRlZmF1bHRWYWx1ZSAhPSB2YWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgZGVmYXVsdCB2YWx1ZXMgb2YgcHJlZmVyZW5jZXMuCi0JICogCi0JICogTk9URTogRXhwZWN0ZWQgZGVmYXVsdCB2YWx1ZXMgYXJlIGhhcmQtY29kZWQsIHNvIGlmIGRlZmF1bHQgdmFsdWVzIGRvCi0JICogZ2V0IGNoYW5nZWQsIGFzc2VydGlvbnMgbmVlZCB0byBiZSB1cGRhdGVkIGFzIHdlbGwKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2VzKCkgewotCQlJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUgPSBuZXcgRGVmYXVsdFNjb3BlKCkuZ2V0Tm9kZShDU1NDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSk7Ci0KLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uobm9kZSwgQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5DQVNFX0lERU5USUZJRVIsICIyIik7Ci0JCXBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKG5vZGUsIENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fQ0hBUiwgQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5UQUIpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUsIFN0cmluZyBwcmVmS2V5LCBTdHJpbmcgZXhwZWN0ZWQpIHsKLQkJU3RyaW5nIGRlZmF1bHRWYWx1ZSA9IExvbmcudG9TdHJpbmcoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOyAvLyByYW5kb20KLQkJLy8gc3RyaW5nCi0JCQotCQlTdHJpbmcgdGhlRGVmYXVsdFZhbHVlID0gbm9kZS5nZXQocHJlZktleSwgZGVmYXVsdFZhbHVlKTsKLQkJYXNzZXJ0RXF1YWxzKCJHZXQgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5LCBleHBlY3RlZCwgdGhlRGVmYXVsdFZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzIGJ5IHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZSB0byBiZSBhCi0JICogY2VydGFpbiB2YWx1ZSwgdGhlbiBnZXR0aW5nIHRoZSBwcmVmZXJlbmNlIHZhbHVlIHRvIHZlcmlmeSBpdCB3YXMgc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5TZXRQcmVmZXJlbmNlcygpIHsKLQkJSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlID0gbmV3IEluc3RhbmNlU2NvcGUoKS5nZXROb2RlKENTU0NvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpKTsKLQotCQlwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihub2RlLCBDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLldSQVBQSU5HX09ORV9QRVJfTElORSk7Ci0JCXBsdWdpblNldFByZWZlcmVuY2VJbnQobm9kZSwgQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5DQVNFX1BST1BFUlRZX05BTUUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCWJvb2xlYW4gb3JpZ2luYWxWYWx1ZSA9IGZhbHNlOwotCQlib29sZWFuIGV4cGVjdGVkVmFsdWUgPSB0cnVlOwotCQkKLQkJU3RyaW5nIG9yaWdpbmFsU3RyaW5nID0gbm9kZS5nZXQocHJlZktleSwgImJvZ3VzIik7Ci0JCWlmICghImJvZ3VzIi5lcXVhbHMob3JpZ2luYWxTdHJpbmcpKSB7Ci0JCQlvcmlnaW5hbFZhbHVlID0gQm9vbGVhbi52YWx1ZU9mKG9yaWdpbmFsU3RyaW5nKS5ib29sZWFuVmFsdWUoKTsKLQkJCWV4cGVjdGVkVmFsdWUgPSAhb3JpZ2luYWxWYWx1ZTsKLQkJfQotCQlub2RlLnB1dEJvb2xlYW4ocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCWJvb2xlYW4gZm91bmRWYWx1ZSA9IG5vZGUuZ2V0Qm9vbGVhbihwcmVmS2V5LCB0cnVlKTsKLQkJYXNzZXJ0RXF1YWxzKCJTZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiICsgcHJlZktleSArICIgIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIgZm91bmQ6ICIgKyBmb3VuZFZhbHVlLCBleHBlY3RlZFZhbHVlLCBmb3VuZFZhbHVlKTsKLQkJCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCWlmICgiYm9ndXMiLmVxdWFscyhvcmlnaW5hbFN0cmluZykpCi0JCQlub2RlLnJlbW92ZShwcmVmS2V5KTsKLQkJZWxzZQotCQkJbm9kZS5wdXQocHJlZktleSwgb3JpZ2luYWxTdHJpbmcpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlSW50KElFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJaW50IG9yaWdpbmFsVmFsdWUgPSBub2RlLmdldEludChwcmVmS2V5LCAtOTk5KTsKLQkJaW50IGV4cGVjdGVkVmFsdWUgPSAtODg4OwotCQlub2RlLnB1dEludChwcmVmS2V5LCBleHBlY3RlZFZhbHVlKTsKLQkJaW50IGZvdW5kVmFsdWUgPSBub2RlLmdldEludChwcmVmS2V5LCAtOTk5KTsKLQkJYXNzZXJ0RXF1YWxzKCJTZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiICsgcHJlZktleSArICIgIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIgZm91bmQ6ICIgKyBmb3VuZFZhbHVlLCBleHBlY3RlZFZhbHVlLCBmb3VuZFZhbHVlKTsKLQotCQkvLyBhdHRlbXB0IHRvIHJlc3RvcmUgb3JpZ2luYWwgcHJlZmVyZW5jZSB2YWx1ZQotCQlpZiAob3JpZ2luYWxWYWx1ZSA9PSAtOTk5KQotCQkJbm9kZS5yZW1vdmUocHJlZktleSk7Ci0JCWVsc2UKLQkJCW5vZGUucHV0SW50KHByZWZLZXksIG9yaWdpbmFsVmFsdWUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL0NTU0NvcmVUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL0NTU0NvcmVUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRiNDdhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9DU1NDb3JlVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIHBhdmVyeQotICovCi1wdWJsaWMgY2xhc3MgQ1NTQ29yZVRlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgQ1NTQ29yZVRlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBDU1NDb3JlVGVzdFN1aXRlKCkgewotCQlzdXBlcigiQ1NTIENvcmUgVGVzdHMiKTsKLQotCQlhZGRUZXN0KENTU0FsbFRlc3RzLnN1aXRlKCkpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9DU1NDb3JlVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL0NTU0NvcmVUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWRjNTE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL0NTU0NvcmVUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBDU1NDb3JlVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgQ1NTQ29yZVRlc3RzUGx1Z2luIHBsdWdpbjsKLQkvLyBSZXNvdXJjZSBidW5kbGUuCi0JcHJpdmF0ZSBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZUJ1bmRsZTsKLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgQ1NTQ29yZVRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCQl0cnkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5DU1NNb2RlbFRlc3RzUGx1Z2luUmVzb3VyY2VzIik7Ci0JCX0KLQkJY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiB4KSB7Ci0JCQlyZXNvdXJjZUJ1bmRsZSA9IG51bGw7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBDU1NDb3JlVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLCBvciAna2V5JyBpZiBub3QKLQkgKiBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IENTU0NvcmVUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwpID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5OwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiByZXNvdXJjZUJ1bmRsZTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQWJzdHJhY3RNb2RlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0Fic3RyYWN0TW9kZWxUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3ZDg4YzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQWJzdHJhY3RNb2RlbFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcwotICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcwotICogb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kCi0gKiBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLkNTU0NvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkNTU0NvcmVQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU1N0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1ByaW1pdGl2ZVZhbHVlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NWYWx1ZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ291bnRlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuUkdCQ29sb3I7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLlJlY3Q7Ci0KLXB1YmxpYyBjbGFzcyBBYnN0cmFjdE1vZGVsVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgSUNTU01vZGVsIGZNb2RlbCA9IG51bGw7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCi0JCVByZWZlcmVuY2VzIHByZWZzID0gQ1NTQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKLQkJcHJlZnMuc2V0VmFsdWUoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5DQVNFX0lERU5USUZJRVIsIENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuTE9XRVIpOwotCQlwcmVmcy5zZXRWYWx1ZShDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkNBU0VfUFJPUEVSVFlfTkFNRSwgQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5MT1dFUik7Ci0JCXByZWZzLnNldFZhbHVlKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuQ0FTRV9QUk9QRVJUWV9WQUxVRSwgQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5MT1dFUik7Ci0KLQkJZk1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlpZiAoZk1vZGVsICE9IG51bGwpIHsKLQkJCWZNb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCWZNb2RlbCA9IG51bGw7Ci0JCX0KLQkJc3VwZXIudGVhckRvd24oKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSUNTU01vZGVsIGdldE1vZGVsKCkgewotCQlyZXR1cm4gZk1vZGVsOwotCX0KLQotCXByb3RlY3RlZCBJQ1NTU3R5bGVTaGVldCBnZXRTdHlsZVNoZWV0KCkgewotCQlyZXR1cm4gKElDU1NTdHlsZVNoZWV0KSBmTW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQl9Ci0KLQljbGFzcyBQcmltaXRpdmVOdW1iZXIgewotCQlzaG9ydCB0eXBlOwotCQlmbG9hdCB2YWx1ZTsKLQotCQlQcmltaXRpdmVOdW1iZXIoc2hvcnQgbmV3VHlwZSwgZmxvYXQgbmV3VmFsdWUpIHsKLQkJCXR5cGUgPSBuZXdUeXBlOwotCQkJdmFsdWUgPSBuZXdWYWx1ZTsKLQkJfQotCX0KLQotCWNsYXNzIFByaW1pdGl2ZVN0cmluZyB7Ci0JCXNob3J0IHR5cGU7Ci0JCVN0cmluZyB2YWx1ZTsKLQotCQlQcmltaXRpdmVTdHJpbmcoc2hvcnQgbmV3VHlwZSwgU3RyaW5nIG5ld1ZhbHVlKSB7Ci0JCQl0eXBlID0gbmV3VHlwZTsKLQkJCXZhbHVlID0gbmV3VmFsdWU7Ci0JCX0KLQl9Ci0KLQkvKiBmb3IgaW50LCBmbG9hdCAqLwotCXByb3RlY3RlZCB2b2lkIGNoZWNrUHJpbWl0aXZlTnVtYmVyKENTU1ZhbHVlIGFjdHVhbCwgUHJpbWl0aXZlTnVtYmVyIGV4cGVjdGVkKSB7Ci0JCWFzc2VydFRydWUoYWN0dWFsIGluc3RhbmNlb2YgQ1NTUHJpbWl0aXZlVmFsdWUpOwotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWQudHlwZSwgKChDU1NQcmltaXRpdmVWYWx1ZSkgYWN0dWFsKS5nZXRQcmltaXRpdmVUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWQudmFsdWUsICgoQ1NTUHJpbWl0aXZlVmFsdWUpIGFjdHVhbCkuZ2V0RmxvYXRWYWx1ZShleHBlY3RlZC50eXBlKSwgMCk7Ci0JfQotCi0JLyogZm9yIHN0cmluZyAqLwotCXByb3RlY3RlZCB2b2lkIGNoZWNrUHJpbWl0aXZlU3RyaW5nKENTU1ZhbHVlIGFjdHVhbCwgUHJpbWl0aXZlU3RyaW5nIGV4cGVjdGVkKSB7Ci0JCWFzc2VydFRydWUoYWN0dWFsIGluc3RhbmNlb2YgQ1NTUHJpbWl0aXZlVmFsdWUpOwotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWQudHlwZSwgKChDU1NQcmltaXRpdmVWYWx1ZSkgYWN0dWFsKS5nZXRQcmltaXRpdmVUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWQudmFsdWUsICgoQ1NTUHJpbWl0aXZlVmFsdWUpIGFjdHVhbCkuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JfQotCi0JLyogZm9yIGNvdW50ZXIgKi8KLQlwcm90ZWN0ZWQgdm9pZCBjaGVja1ByaW1pdGl2ZUNvdW50ZXIoQ1NTVmFsdWUgYWN0dWFsLCBTdHJpbmcgaWRlbnRpZmllciwgU3RyaW5nIGxpc3RTdHlsZSwgU3RyaW5nIHNlcGFyYXRvcikgewotCQlhc3NlcnRUcnVlKGFjdHVhbCBpbnN0YW5jZW9mIENTU1ByaW1pdGl2ZVZhbHVlKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19DT1VOVEVSLCAoKENTU1ByaW1pdGl2ZVZhbHVlKSBhY3R1YWwpLmdldFByaW1pdGl2ZVR5cGUoKSk7Ci0JCUNvdW50ZXIgY291bnRlciA9ICgoQ1NTUHJpbWl0aXZlVmFsdWUpIGFjdHVhbCkuZ2V0Q291bnRlclZhbHVlKCk7Ci0JCWFzc2VydEVxdWFscyhpZGVudGlmaWVyLCBjb3VudGVyLmdldElkZW50aWZpZXIoKSk7Ci0JCWFzc2VydEVxdWFscyhsaXN0U3R5bGUsIGNvdW50ZXIuZ2V0TGlzdFN0eWxlKCkpOwotCQlhc3NlcnRFcXVhbHMoc2VwYXJhdG9yLCBjb3VudGVyLmdldFNlcGFyYXRvcigpKTsKLQl9Ci0KLQkvKiBmb3IgcmVjdCAqLwotCXByb3RlY3RlZCB2b2lkIGNoZWNrUHJpbWl0aXZlUmVjdChDU1NWYWx1ZSBhY3R1YWwsIE9iamVjdFtdIGV4cGVjdGVkQXJyYXkpIHsKLQkJYXNzZXJ0VHJ1ZShhY3R1YWwgaW5zdGFuY2VvZiBDU1NQcmltaXRpdmVWYWx1ZSk7Ci0JCWFzc2VydEVxdWFscyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfUkVDVCwgKChDU1NQcmltaXRpdmVWYWx1ZSkgYWN0dWFsKS5nZXRQcmltaXRpdmVUeXBlKCkpOwotCQlSZWN0IHJlY3QgPSAoKENTU1ByaW1pdGl2ZVZhbHVlKSBhY3R1YWwpLmdldFJlY3RWYWx1ZSgpOwotCQlDU1NQcmltaXRpdmVWYWx1ZSB2YWx1ZTsKLQkJT2JqZWN0IGV4cGVjdGVkOwotCQl2YWx1ZSA9IHJlY3QuZ2V0VG9wKCk7Ci0JCWV4cGVjdGVkID0gZXhwZWN0ZWRBcnJheVswXTsKLQkJaWYgKGV4cGVjdGVkIGluc3RhbmNlb2YgUHJpbWl0aXZlTnVtYmVyKSB7Ci0JCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgKFByaW1pdGl2ZU51bWJlcikgZXhwZWN0ZWQpOwotCQl9Ci0JCWVsc2UgewotCQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIChQcmltaXRpdmVTdHJpbmcpIGV4cGVjdGVkKTsKLQkJfQotCQl2YWx1ZSA9IHJlY3QuZ2V0UmlnaHQoKTsKLQkJZXhwZWN0ZWQgPSBleHBlY3RlZEFycmF5WzFdOwotCQlpZiAoZXhwZWN0ZWQgaW5zdGFuY2VvZiBQcmltaXRpdmVOdW1iZXIpIHsKLQkJCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCAoUHJpbWl0aXZlTnVtYmVyKSBleHBlY3RlZCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgKFByaW1pdGl2ZVN0cmluZykgZXhwZWN0ZWQpOwotCQl9Ci0JCXZhbHVlID0gcmVjdC5nZXRCb3R0b20oKTsKLQkJZXhwZWN0ZWQgPSBleHBlY3RlZEFycmF5WzJdOwotCQlpZiAoZXhwZWN0ZWQgaW5zdGFuY2VvZiBQcmltaXRpdmVOdW1iZXIpIHsKLQkJCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCAoUHJpbWl0aXZlTnVtYmVyKSBleHBlY3RlZCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgKFByaW1pdGl2ZVN0cmluZykgZXhwZWN0ZWQpOwotCQl9Ci0JCXZhbHVlID0gcmVjdC5nZXRMZWZ0KCk7Ci0JCWV4cGVjdGVkID0gZXhwZWN0ZWRBcnJheVszXTsKLQkJaWYgKGV4cGVjdGVkIGluc3RhbmNlb2YgUHJpbWl0aXZlTnVtYmVyKSB7Ci0JCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgKFByaW1pdGl2ZU51bWJlcikgZXhwZWN0ZWQpOwotCQl9Ci0JCWVsc2UgewotCQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIChQcmltaXRpdmVTdHJpbmcpIGV4cGVjdGVkKTsKLQkJfQotCX0KLQotCS8qIGZvciByZ2IgKi8KLQlwcm90ZWN0ZWQgdm9pZCBjaGVja1ByaW1pdGl2ZVJnYihDU1NWYWx1ZSBhY3R1YWwsIE9iamVjdFtdIGV4cGVjdGVkQXJyYXkpIHsKLQkJYXNzZXJ0VHJ1ZShhY3R1YWwgaW5zdGFuY2VvZiBDU1NQcmltaXRpdmVWYWx1ZSk7Ci0JCWFzc2VydEVxdWFscyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfUkdCQ09MT1IsICgoQ1NTUHJpbWl0aXZlVmFsdWUpIGFjdHVhbCkuZ2V0UHJpbWl0aXZlVHlwZSgpKTsKLQkJUkdCQ29sb3IgY29sb3IgPSAoKENTU1ByaW1pdGl2ZVZhbHVlKSBhY3R1YWwpLmdldFJHQkNvbG9yVmFsdWUoKTsKLQkJQ1NTUHJpbWl0aXZlVmFsdWUgdmFsdWU7Ci0JCU9iamVjdCBleHBlY3RlZDsKLQkJdmFsdWUgPSBjb2xvci5nZXRSZWQoKTsKLQkJZXhwZWN0ZWQgPSBleHBlY3RlZEFycmF5WzBdOwotCQlpZiAoZXhwZWN0ZWQgaW5zdGFuY2VvZiBQcmltaXRpdmVOdW1iZXIpIHsKLQkJCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCAoUHJpbWl0aXZlTnVtYmVyKSBleHBlY3RlZCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgKFByaW1pdGl2ZVN0cmluZykgZXhwZWN0ZWQpOwotCQl9Ci0JCXZhbHVlID0gY29sb3IuZ2V0R3JlZW4oKTsKLQkJZXhwZWN0ZWQgPSBleHBlY3RlZEFycmF5WzFdOwotCQlpZiAoZXhwZWN0ZWQgaW5zdGFuY2VvZiBQcmltaXRpdmVOdW1iZXIpIHsKLQkJCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCAoUHJpbWl0aXZlTnVtYmVyKSBleHBlY3RlZCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgKFByaW1pdGl2ZVN0cmluZykgZXhwZWN0ZWQpOwotCQl9Ci0JCXZhbHVlID0gY29sb3IuZ2V0Qmx1ZSgpOwotCQlleHBlY3RlZCA9IGV4cGVjdGVkQXJyYXlbMl07Ci0JCWlmIChleHBlY3RlZCBpbnN0YW5jZW9mIFByaW1pdGl2ZU51bWJlcikgewotCQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIChQcmltaXRpdmVOdW1iZXIpIGV4cGVjdGVkKTsKLQkJfQotCQllbHNlIHsKLQkJCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCAoUHJpbWl0aXZlU3RyaW5nKSBleHBlY3RlZCk7Ci0JCX0KLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9CVUc3Mzk5MFNlbGVjdG9yRm9ybWF0VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQlVHNzM5OTBTZWxlY3RvckZvcm1hdFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVjMjRjNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9CVUc3Mzk5MFNlbGVjdG9yRm9ybWF0VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLmZvcm1hdC5Gb3JtYXRQcm9jZXNzb3JDU1M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotCi1wdWJsaWMgY2xhc3MgQlVHNzM5OTBTZWxlY3RvckZvcm1hdFRlc3QgZXh0ZW5kcyBBYnN0cmFjdE1vZGVsVGVzdCB7Ci0JcHVibGljIHZvaWQgdGVzdEluc2VydFRleHQxKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc3RydWN0dXJlZERvY3VtZW50LnNldChGaWxlVXRpbC5jcmVhdGVTdHJpbmcoCi0JCQkJInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIiwKLQkJCQkiQlVHNzM5OTBfc2VsZWN0b3JfdW5mb3JtYXR0ZWQuY3NzIikpOwotCi0JCShuZXcgRm9ybWF0UHJvY2Vzc29yQ1NTKCkpLmZvcm1hdE1vZGVsKG1vZGVsKTsKLQotCQlTdHJpbmcgZXhwZWN0ZWQgPSBGaWxlVXRpbC5jcmVhdGVTdHJpbmcoCi0JCQkJInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMiLAotCQkJCSJCVUc3Mzk5MF9zZWxlY3Rvcl9mb3JtYXR0ZWQuY3NzIik7Ci0JCS8vIE5vdGU6IEZpbGVVdGlsLmNyZWF0ZVN0cmluZygpIGFkZGVkIGEgY29tbW9uRU9MIHRvIHRoZSBleHBlY3RlZAotCQkvLyBzdHJpbmcuIFdlIGhhdmUgdG8gY29uY2F0IGEgY29tbW9uRU9MIHRvIHRoZSBhY3R1YWwgc3RyaW5nLgotCQlTdHJpbmcgYWN0dWFsID0gc3RydWN0dXJlZERvY3VtZW50LmdldCgpLmNvbmNhdChGaWxlVXRpbC5jb21tb25FT0wpOwotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGFjdHVhbCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTQ2hhcnNldFJ1bGVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NDaGFyc2V0UnVsZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAwYTliMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NDaGFyc2V0UnVsZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzCi0gKiBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zCi0gKiBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQKLSAqIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NDaGFyc2V0UnVsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUnVsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUnVsZUxpc3Q7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1N0eWxlU2hlZXQ7Ci0KLXB1YmxpYyBjbGFzcyBDU1NDaGFyc2V0UnVsZVRlc3QgZXh0ZW5kcyBBYnN0cmFjdE1vZGVsVGVzdCB7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUlVMRSA9ICJAY2hhcnNldCBcImlzby04ODU5LTFcIjsiOwotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydFJ1bGUoKSB7Ci0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSBnZXRTdHlsZVNoZWV0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKDAsIHNoZWV0Lmluc2VydFJ1bGUoUlVMRSwgMCkpOwotCi0JCUNTU1J1bGVMaXN0IHJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQkJQ1NTUnVsZSBydWxlID0gcnVsZUxpc3QuaXRlbSgwKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTQ2hhcnNldFJ1bGUpOwotCQlDU1NDaGFyc2V0UnVsZSBjaGFyc2V0UnVsZSA9IChDU1NDaGFyc2V0UnVsZSkgcnVsZTsKLQkJYXNzZXJ0RXF1YWxzKCJpc28tODg1OS0xIiwgY2hhcnNldFJ1bGUuZ2V0RW5jb2RpbmcoKSk7Ci0JCWFzc2VydEVxdWFscyhSVUxFLCBjaGFyc2V0UnVsZS5nZXRDc3NUZXh0KCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVSdWxlKCkgewotCQlJQ1NTU3R5bGVTaGVldCBzaGVldCA9IGdldFN0eWxlU2hlZXQoKTsKLQkJSUNTU0RvY3VtZW50IGRvYyA9IHNoZWV0OwotCQlDU1NDaGFyc2V0UnVsZSBuZXdSdWxlID0gZG9jLmNyZWF0ZUNTU0NoYXJzZXRSdWxlKCk7Ci0JCW5ld1J1bGUuc2V0RW5jb2RpbmcoImlzby04ODU5LTEiKTsKLQkJc2hlZXQuaW5zZXJ0UnVsZUJlZm9yZShuZXdSdWxlLCBudWxsKTsKLQotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCUNTU1J1bGUgcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMCk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU0NoYXJzZXRSdWxlKTsKLQkJQ1NTQ2hhcnNldFJ1bGUgY2hhcnNldFJ1bGUgPSAoQ1NTQ2hhcnNldFJ1bGUpIHJ1bGU7Ci0JCWFzc2VydEVxdWFscygiaXNvLTg4NTktMSIsIGNoYXJzZXRSdWxlLmdldEVuY29kaW5nKCkpOwotCQlhc3NlcnRFcXVhbHMoUlVMRSwgY2hhcnNldFJ1bGUuZ2V0Q3NzVGV4dCgpKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTRm9udEZhY2VSdWxlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTRm9udEZhY2VSdWxlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2I1ZmRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU0ZvbnRGYWNlUnVsZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcwotICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcwotICogb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kCi0gKiBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU1ByaW1pdGl2ZVZhbHVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU0ZvbnRGYWNlUnVsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUHJpbWl0aXZlVmFsdWU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGVMaXN0OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NTdHlsZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NWYWx1ZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTVmFsdWVMaXN0OwotCi1wdWJsaWMgY2xhc3MgQ1NTRm9udEZhY2VSdWxlVGVzdCBleHRlbmRzIEFic3RyYWN0TW9kZWxUZXN0IHsKLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0UnVsZSgpIHsKLQkJZmluYWwgU3RyaW5nIFJVTEUgPSAiQGZvbnQtZmFjZSB7IGZvbnQtZmFtaWx5OiBcIlN3aXNzIDcyMVwiOyBzcmM6IHVybChzd2lzczcyMS5wZnIpOyAvKiBUaGUgZXhwYW5kZWQgU3dpc3MgNzIxICovIGZvbnQtc3RyZXRjaDogZXhwYW5kZWQ7IH0iOwotCQlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gZ2V0U3R5bGVTaGVldCgpOwotCQlhc3NlcnRFcXVhbHMoMCwgc2hlZXQuaW5zZXJ0UnVsZShSVUxFLCAwKSk7Ci0KLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlDU1NSdWxlIHJ1bGUgPSBydWxlTGlzdC5pdGVtKDApOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NGb250RmFjZVJ1bGUpOwotCi0JCUNTU1N0eWxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb24gPSAoKENTU0ZvbnRGYWNlUnVsZSkgcnVsZSkuZ2V0U3R5bGUoKTsKLQkJYXNzZXJ0RXF1YWxzKDMsIGRlY2xhcmF0aW9uLmdldExlbmd0aCgpKTsKLQotCQlDU1NWYWx1ZSB2YWx1ZTsKLQkJQ1NTUHJpbWl0aXZlVmFsdWUgcHJpbWl0aXZlVmFsdWU7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJmb250LWZhbWlseSIpOwotCQlhc3NlcnRUcnVlKHZhbHVlIGluc3RhbmNlb2YgQ1NTUHJpbWl0aXZlVmFsdWUpOwotCi0JCXByaW1pdGl2ZVZhbHVlID0gKENTU1ByaW1pdGl2ZVZhbHVlKSB2YWx1ZTsKLQkJYXNzZXJ0RXF1YWxzKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19TVFJJTkcsIHByaW1pdGl2ZVZhbHVlLmdldFByaW1pdGl2ZVR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygiU3dpc3MgNzIxIiwgcHJpbWl0aXZlVmFsdWUuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJzcmMiKTsKLQkJYXNzZXJ0VHJ1ZSh2YWx1ZSBpbnN0YW5jZW9mIENTU1ByaW1pdGl2ZVZhbHVlKTsKLQotCQlwcmltaXRpdmVWYWx1ZSA9IChDU1NQcmltaXRpdmVWYWx1ZSkgdmFsdWU7Ci0JCWFzc2VydEVxdWFscyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfVVJJLCBwcmltaXRpdmVWYWx1ZS5nZXRQcmltaXRpdmVUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoInN3aXNzNzIxLnBmciIsIHByaW1pdGl2ZVZhbHVlLmdldFN0cmluZ1ZhbHVlKCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiZm9udC1zdHJldGNoIik7Ci0JCWFzc2VydFRydWUodmFsdWUgaW5zdGFuY2VvZiBDU1NQcmltaXRpdmVWYWx1ZSk7Ci0KLQkJcHJpbWl0aXZlVmFsdWUgPSAoQ1NTUHJpbWl0aXZlVmFsdWUpIHZhbHVlOwotCQlhc3NlcnRFcXVhbHMoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lERU5ULCBwcmltaXRpdmVWYWx1ZS5nZXRQcmltaXRpdmVUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoImV4cGFuZGVkIiwgcHJpbWl0aXZlVmFsdWUuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydFRleHQxKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc3RydWN0dXJlZERvY3VtZW50LnNldChGaWxlVXRpbC5jcmVhdGVTdHJpbmcoInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIiwgIkNTU0ZvbnRGYWNlUnVsZVRlc3QuY3NzIikpOwotCi0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSAoQ1NTU3R5bGVTaGVldCkgbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlhc3NlcnRFcXVhbHMoMywgcnVsZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCUNTU1J1bGUgcnVsZTsKLQkJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbjsKLQkJQ1NTVmFsdWUgdmFsdWU7Ci0JCUNTU1ZhbHVlTGlzdCB2YWx1ZUxpc3Q7Ci0KLQkJLy8gcnVsZSAxCi0KLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSdWxlLkZPTlRfRkFDRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU0ZvbnRGYWNlUnVsZSk7Ci0KLQkJZGVjbGFyYXRpb24gPSAoKENTU0ZvbnRGYWNlUnVsZSkgcnVsZSkuZ2V0U3R5bGUoKTsKLQkJYXNzZXJ0RXF1YWxzKDQsIGRlY2xhcmF0aW9uLmdldExlbmd0aCgpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoImZvbnQtZmFtaWx5Iik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19TVFJJTkcsICJTd2lzcyA3MjEiKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJzcmMiKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1VSSSwgInN3aXNzNzIxYmxrLnBmciIpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoImZvbnQtc3R5bGUiKTsKLQkJYXNzZXJ0VHJ1ZSh2YWx1ZSBpbnN0YW5jZW9mIENTU1ZhbHVlTGlzdCk7Ci0KLQkJdmFsdWVMaXN0ID0gKENTU1ZhbHVlTGlzdCkgdmFsdWU7Ci0JCWFzc2VydEVxdWFscygzLCB2YWx1ZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDApLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgIm5vcm1hbCIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMSksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19DT01NQSwgIiwiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDIpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgIml0YWxpYyIpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoImZvbnQtd2VpZ2h0Iik7Ci0JCWFzc2VydFRydWUodmFsdWUgaW5zdGFuY2VvZiBDU1NWYWx1ZUxpc3QpOwotCi0JCXZhbHVlTGlzdCA9IChDU1NWYWx1ZUxpc3QpIHZhbHVlOwotCQlhc3NlcnRFcXVhbHMoMywgdmFsdWVMaXN0LmdldExlbmd0aCgpKTsKLQotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgwKSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDgwMCkpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgxKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oMiksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCA5MDApKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0VGV4dDIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KEZpbGVVdGlsLmNyZWF0ZVN0cmluZygic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMiLCAiQ1NTRm9udEZhY2VSdWxlVGVzdC5jc3MiKSk7Ci0KLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IChDU1NTdHlsZVNoZWV0KSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCWFzc2VydEVxdWFscygzLCBydWxlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJQ1NTUnVsZSBydWxlOwotCQlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwotCQlDU1NWYWx1ZSB2YWx1ZTsKLQkJQ1NTVmFsdWVMaXN0IHZhbHVlTGlzdDsKLQotCQkvLyBydWxlIDIKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgxKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1J1bGUuRk9OVF9GQUNFX1JVTEUsIHJ1bGUuZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTRm9udEZhY2VSdWxlKTsKLQotCQlkZWNsYXJhdGlvbiA9ICgoQ1NTRm9udEZhY2VSdWxlKSBydWxlKS5nZXRTdHlsZSgpOwotCQlhc3NlcnRFcXVhbHMoNiwgZGVjbGFyYXRpb24uZ2V0TGVuZ3RoKCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgic3JjIik7Ci0JCWFzc2VydFRydWUodmFsdWUgaW5zdGFuY2VvZiBDU1NWYWx1ZUxpc3QpOwotCi0JCXZhbHVlTGlzdCA9IChDU1NWYWx1ZUxpc3QpIHZhbHVlOwotCQlhc3NlcnRFcXVhbHMoOSwgdmFsdWVMaXN0LmdldExlbmd0aCgpKTsKLQotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgwKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0xPQ0FMLCAiUGFsYXRpbm8iKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDEpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ09NTUEsICIsIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgyKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0xPQ0FMLCAiVGltZXMgTmV3IFJvbWFuIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgzKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oNCksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19MT0NBTCwgIk5ldyBZb3JrIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSg1KSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oNiksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19MT0NBTCwgIlV0b3BpYSIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oNyksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19DT01NQSwgIiwiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDgpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19VUkksICJodHRwOi8vc29tZXdoZXJlL2ZyZWUvZm9udCIpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoImZvbnQtZmFtaWx5Iik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgInNlcmlmIikpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiZm9udC13ZWlnaHQiKTsKLQkJYXNzZXJ0VHJ1ZSh2YWx1ZSBpbnN0YW5jZW9mIENTU1ZhbHVlTGlzdCk7Ci0KLQkJdmFsdWVMaXN0ID0gKENTU1ZhbHVlTGlzdCkgdmFsdWU7Ci0JCWFzc2VydEVxdWFscyg5LCB2YWx1ZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDApLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgMTAwKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDEpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ09NTUEsICIsIikpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgyKSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDIwMCkpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgzKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oNCksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCAzMDApKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oNSksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19DT01NQSwgIiwiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDYpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgNDAwKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDcpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ09NTUEsICIsIikpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSg4KSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDUwMCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiZm9udC1zdHlsZSIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSURFTlQsICJub3JtYWwiKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJmb250LXZhcmlhbnQiKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lERU5ULCAibm9ybWFsIikpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiZm9udC1zaXplIik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgImFsbCIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0VGV4dDMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KEZpbGVVdGlsLmNyZWF0ZVN0cmluZygic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMiLCAiQ1NTRm9udEZhY2VSdWxlVGVzdC5jc3MiKSk7Ci0KLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IChDU1NTdHlsZVNoZWV0KSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCWFzc2VydEVxdWFscygzLCBydWxlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJQ1NTUnVsZSBydWxlOwotCQlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwotCQlDU1NWYWx1ZSB2YWx1ZTsKLQkJQ1NTVmFsdWVMaXN0IHZhbHVlTGlzdDsKLQotCQkvLyBydWxlIDMKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgyKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1J1bGUuRk9OVF9GQUNFX1JVTEUsIHJ1bGUuZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTRm9udEZhY2VSdWxlKTsKLQotCQlkZWNsYXJhdGlvbiA9ICgoQ1NTRm9udEZhY2VSdWxlKSBydWxlKS5nZXRTdHlsZSgpOwotCQlhc3NlcnRFcXVhbHMoNSwgZGVjbGFyYXRpb24uZ2V0TGVuZ3RoKCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgic3JjIik7Ci0JCWFzc2VydFRydWUodmFsdWUgaW5zdGFuY2VvZiBDU1NWYWx1ZUxpc3QpOwotCi0JCXZhbHVlTGlzdCA9IChDU1NWYWx1ZUxpc3QpIHZhbHVlOwotCQlhc3NlcnRFcXVhbHMoNCwgdmFsdWVMaXN0LmdldExlbmd0aCgpKTsKLQotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgwKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0xPQ0FMLCAiQWxhYmFtYSBJdGFsaWMiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDEpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ09NTUEsICIsIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgyKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfVVJJLCAiaHR0cDovL3d3dy5mb250cy5vcmcvQS9hbGFiYW1hLWl0YWxpYyIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMyksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19GT1JNQVQsICJ0cnVldHlwZSIpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoInBhbm9zZS0xIik7Ci0JCWFzc2VydFRydWUodmFsdWUgaW5zdGFuY2VvZiBDU1NWYWx1ZUxpc3QpOwotCi0JCXZhbHVlTGlzdCA9IChDU1NWYWx1ZUxpc3QpIHZhbHVlOwotCQlhc3NlcnRFcXVhbHMoMTAsIHZhbHVlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oMCksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCAyKSk7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDEpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgNCkpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgyKSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDUpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oMyksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCAyKSk7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDQpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgNSkpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSg1KSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDQpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oNiksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCA1KSk7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDcpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgOSkpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSg4KSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDMpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oOSksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCAzKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJmb250LWZhbWlseSIpOwotCQlhc3NlcnRUcnVlKHZhbHVlIGluc3RhbmNlb2YgQ1NTVmFsdWVMaXN0KTsKLQotCQl2YWx1ZUxpc3QgPSAoQ1NTVmFsdWVMaXN0KSB2YWx1ZTsKLQkJYXNzZXJ0RXF1YWxzKDMsIHZhbHVlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMCksIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lERU5ULCAiQWxhYmFtYSIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMSksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19DT01NQSwgIiwiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDIpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgInNlcmlmIikpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiZm9udC13ZWlnaHQiKTsKLQkJYXNzZXJ0VHJ1ZSh2YWx1ZSBpbnN0YW5jZW9mIENTU1ZhbHVlTGlzdCk7Ci0KLQkJdmFsdWVMaXN0ID0gKENTU1ZhbHVlTGlzdCkgdmFsdWU7Ci0JCWFzc2VydEVxdWFscyg1LCB2YWx1ZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDApLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgMzAwKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDEpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ09NTUEsICIsIikpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgyKSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDQwMCkpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgzKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oNCksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCA1MDApKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoImZvbnQtc3R5bGUiKTsKLQkJYXNzZXJ0VHJ1ZSh2YWx1ZSBpbnN0YW5jZW9mIENTU1ZhbHVlTGlzdCk7Ci0KLQkJdmFsdWVMaXN0ID0gKENTU1ZhbHVlTGlzdCkgdmFsdWU7Ci0JCWFzc2VydEVxdWFscygzLCB2YWx1ZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDApLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgIml0YWxpYyIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMSksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19DT01NQSwgIiwiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDIpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgIm9ibGlxdWUiKSk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU0ltcG9ydFJ1bGVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NJbXBvcnRSdWxlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzU3OWI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU0ltcG9ydFJ1bGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcwotICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcwotICogb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kCi0gKiBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU0RvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTSW1wb3J0UnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU1N0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU0ltcG9ydFJ1bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGVMaXN0OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy53M2MuZG9tLnN0eWxlc2hlZXRzLk1lZGlhTGlzdDsKLQotcHVibGljIGNsYXNzIENTU0ltcG9ydFJ1bGVUZXN0IGV4dGVuZHMgQWJzdHJhY3RNb2RlbFRlc3QgewotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydFJ1bGVEb3VibGVRdW90ZSgpIHsKLQkJY2hlY2tJbnNlcnQoIkBpbXBvcnQgXCJkdW1teS5jc3NcIjsiLCAiZHVtbXkuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydFJ1bGVTaW5nbGVRdW90ZSgpIHsKLQkJY2hlY2tJbnNlcnQoIkBpbXBvcnQgXCdkdW1teS5jc3NcJzsiLCAiZHVtbXkuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydFJ1bGVVcmxOb1F1b3RlKCkgewotCQljaGVja0luc2VydCgiQGltcG9ydCB1cmwoZHVtbXkuY3NzKTsiLCAiZHVtbXkuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydFJ1bGVVcmxEb3VibGVRdW90ZSgpIHsKLQkJY2hlY2tJbnNlcnQoIkBpbXBvcnQgdXJsKFwiZHVtbXkuY3NzXCIpOyIsICJkdW1teS5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0UnVsZVVybFNpbmdsZVF1b3RlKCkgewotCQljaGVja0luc2VydCgiQGltcG9ydCB1cmwoXCdkdW1teS5jc3NcJyk7IiwgImR1bW15LmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRSdWxlTWVkaWExKCkgewotCQljaGVja0luc2VydCgiQGltcG9ydCB1cmwoXCJkdW1teS5jc3NcIikgbWVkaWExOyIsICJkdW1teS5jc3MiLCBuZXcgU3RyaW5nW117Im1lZGlhMSJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0UnVsZU1lZGlhMigpIHsKLQkJY2hlY2tJbnNlcnQoIkBpbXBvcnQgdXJsKFwnZHVtbXkuY3NzXCcpIG1lZGlhMSwgbWVkaWEyOyIsICJkdW1teS5jc3MiLCBuZXcgU3RyaW5nW117Im1lZGlhMSIsICJtZWRpYTIifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZVJ1bGUoKSB7Ci0JCUlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gZ2V0U3R5bGVTaGVldCgpOwotCQlJQ1NTRG9jdW1lbnQgZG9jID0gc2hlZXQ7Ci0JCUlDU1NJbXBvcnRSdWxlIG5ld1J1bGUgPSBkb2MuY3JlYXRlQ1NTSW1wb3J0UnVsZSgpOwotCQluZXdSdWxlLnNldEhyZWYoImR1bW15LmNzcyIpOwotCQlNZWRpYUxpc3QgbmV3TGlzdCA9IG5ld1J1bGUuZ2V0TWVkaWEoKTsKLQkJbmV3TGlzdC5hcHBlbmRNZWRpdW0oIm1lZGlhMSIpOwotCQluZXdMaXN0LmFwcGVuZE1lZGl1bSgibWVkaWEyIik7Ci0JCXNoZWV0Lmluc2VydFJ1bGVCZWZvcmUobmV3UnVsZSwgbnVsbCk7Ci0KLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlDU1NSdWxlIHJ1bGUgPSBydWxlTGlzdC5pdGVtKDApOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NJbXBvcnRSdWxlKTsKLQkJQ1NTSW1wb3J0UnVsZSBpbXBvcnRSdWxlID0gKENTU0ltcG9ydFJ1bGUpIHJ1bGU7Ci0JCWFzc2VydEVxdWFscygiZHVtbXkuY3NzIiwgaW1wb3J0UnVsZS5nZXRIcmVmKCkpOwotCQlNZWRpYUxpc3QgbWVkaWFMaXN0ID0gaW1wb3J0UnVsZS5nZXRNZWRpYSgpOwotCQlhc3NlcnRFcXVhbHMoMiwgbWVkaWFMaXN0LmdldExlbmd0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJtZWRpYTEiLCBtZWRpYUxpc3QuaXRlbSgwKSk7Ci0JCWFzc2VydEVxdWFscygibWVkaWEyIiwgbWVkaWFMaXN0Lml0ZW0oMSkpOwotCi0JCWFzc2VydEVxdWFscygiQGltcG9ydCB1cmwoXCJkdW1teS5jc3NcIikgbWVkaWExLCBtZWRpYTI7IiwgaW1wb3J0UnVsZS5nZXRDc3NUZXh0KCkpOwotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja0luc2VydChTdHJpbmcgcnVsZVN0cmluZywgU3RyaW5nIGhyZWYsIFN0cmluZ1tdIG1lZGlhKSB7Ci0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSBnZXRTdHlsZVNoZWV0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKDAsIHNoZWV0Lmluc2VydFJ1bGUocnVsZVN0cmluZywgMCkpOwotCi0JCUNTU1J1bGVMaXN0IHJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQkJQ1NTUnVsZSBydWxlID0gcnVsZUxpc3QuaXRlbSgwKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTSW1wb3J0UnVsZSk7Ci0KLQkJQ1NTSW1wb3J0UnVsZSBpbXBvcnRSdWxlID0gKENTU0ltcG9ydFJ1bGUpIHJ1bGU7Ci0JCWFzc2VydEVxdWFscyhocmVmLCBpbXBvcnRSdWxlLmdldEhyZWYoKSk7Ci0KLQkJaWYgKG1lZGlhICE9IG51bGwpIHsKLQkJCWFzc2VydEVxdWFscyhtZWRpYS5sZW5ndGgsIGltcG9ydFJ1bGUuZ2V0TWVkaWEoKS5nZXRMZW5ndGgoKSk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IG1lZGlhLmxlbmd0aDsgaSsrKSB7Ci0JCQkJYXNzZXJ0RXF1YWxzKG1lZGlhW2ldLCBpbXBvcnRSdWxlLmdldE1lZGlhKCkuaXRlbShpKSk7Ci0JCQl9Ci0JCX0KLQotCQlhc3NlcnRFcXVhbHMocnVsZVN0cmluZywgaW1wb3J0UnVsZS5nZXRDc3NUZXh0KCkpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NNZWRpYVJ1bGVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NNZWRpYVJ1bGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNmQ5YTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTTWVkaWFSdWxlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKLSAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMKLSAqIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZAotICogaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU01lZGlhUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU1N0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU01lZGlhUnVsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUnVsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUnVsZUxpc3Q7Ci1pbXBvcnQgb3JnLnczYy5kb20uc3R5bGVzaGVldHMuTWVkaWFMaXN0OwotCi1wdWJsaWMgY2xhc3MgQ1NTTWVkaWFSdWxlVGVzdCBleHRlbmRzIEFic3RyYWN0TW9kZWxUZXN0IHsKLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlUnVsZSgpIHsKLQkJSUNTU1N0eWxlU2hlZXQgc2hlZXQgPSBnZXRTdHlsZVNoZWV0KCk7Ci0JCUlDU1NEb2N1bWVudCBkb2MgPSBzaGVldDsKLQkJSUNTU01lZGlhUnVsZSBuZXdSdWxlID0gZG9jLmNyZWF0ZUNTU01lZGlhUnVsZSgpOwotCQlNZWRpYUxpc3QgbmV3TGlzdCA9IG5ld1J1bGUuZ2V0TWVkaWEoKTsKLQkJbmV3TGlzdC5hcHBlbmRNZWRpdW0oIm1lZGlhMSIpOwotCQluZXdMaXN0LmFwcGVuZE1lZGl1bSgibWVkaWEyIik7Ci0JCXNoZWV0Lmluc2VydFJ1bGVCZWZvcmUobmV3UnVsZSwgbnVsbCk7Ci0KLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlDU1NSdWxlIHJ1bGUgPSBydWxlTGlzdC5pdGVtKDApOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NNZWRpYVJ1bGUpOwotCQlDU1NNZWRpYVJ1bGUgbWVkaWFSdWxlID0gKENTU01lZGlhUnVsZSkgcnVsZTsKLQotCQlNZWRpYUxpc3QgbWVkaWFMaXN0ID0gbWVkaWFSdWxlLmdldE1lZGlhKCk7Ci0JCWFzc2VydEVxdWFscygyLCBtZWRpYUxpc3QuZ2V0TGVuZ3RoKCkpOwotCQlhc3NlcnRFcXVhbHMoIm1lZGlhMSIsIG1lZGlhTGlzdC5pdGVtKDApKTsKLQkJYXNzZXJ0RXF1YWxzKCJtZWRpYTIiLCBtZWRpYUxpc3QuaXRlbSgxKSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCJAbWVkaWEgbWVkaWExLCBtZWRpYTIgeyIgKyBGaWxlVXRpbC5jb21tb25FT0wgKyAifSIsIG1lZGlhUnVsZS5nZXRDc3NUZXh0KCkpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NQYWdlUnVsZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU1BhZ2VSdWxlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGVjNDM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU1BhZ2VSdWxlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzCi0gKiBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zCi0gKiBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQKLSAqIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1BhZ2VSdWxlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NQcmltaXRpdmVWYWx1ZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUnVsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUnVsZUxpc3Q7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1N0eWxlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1N0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1ZhbHVlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NWYWx1ZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBDU1NQYWdlUnVsZVRlc3QgZXh0ZW5kcyBBYnN0cmFjdE1vZGVsVGVzdCB7Ci0JcHVibGljIHZvaWQgdGVzdEluc2VydFRleHQxKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc3RydWN0dXJlZERvY3VtZW50LnNldChGaWxlVXRpbC5jcmVhdGVTdHJpbmcoInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIiwgIkNTU1BhZ2VSdWxlVGVzdC5jc3MiKSk7Ci0KLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IChDU1NTdHlsZVNoZWV0KSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCWFzc2VydEVxdWFscyg2LCBydWxlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJQ1NTUnVsZSBydWxlOwotCQlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwotCQlDU1NWYWx1ZSB2YWx1ZTsKLQkJQ1NTVmFsdWVMaXN0IHZhbHVlTGlzdDsKLQotCQkvLyBydWxlIDEKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgwKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1J1bGUuUEFHRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU1BhZ2VSdWxlKTsKLQotCQlkZWNsYXJhdGlvbiA9ICgoQ1NTUGFnZVJ1bGUpIHJ1bGUpLmdldFN0eWxlKCk7Ci0JCWFzc2VydEVxdWFscygyLCBkZWNsYXJhdGlvbi5nZXRMZW5ndGgoKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJzaXplIik7Ci0JCWFzc2VydFRydWUodmFsdWUgaW5zdGFuY2VvZiBDU1NWYWx1ZUxpc3QpOwotCi0JCXZhbHVlTGlzdCA9IChDU1NWYWx1ZUxpc3QpIHZhbHVlOwotCQlhc3NlcnRFcXVhbHMoMiwgdmFsdWVMaXN0LmdldExlbmd0aCgpKTsKLQotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgwKSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU4sIChmbG9hdCkgOC41KSk7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDEpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTiwgMTEpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIm1hcmdpbiIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ00sIDIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0VGV4dDIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KEZpbGVVdGlsLmNyZWF0ZVN0cmluZygic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMiLCAiQ1NTUGFnZVJ1bGVUZXN0LmNzcyIpKTsKLQotCQlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gKENTU1N0eWxlU2hlZXQpIG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCUNTU1J1bGVMaXN0IHJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQkJYXNzZXJ0RXF1YWxzKDYsIHJ1bGVMaXN0LmdldExlbmd0aCgpKTsKLQotCQlDU1NSdWxlIHJ1bGU7Ci0JCUNTU1N0eWxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb247Ci0JCUNTU1ZhbHVlIHZhbHVlOwotCi0JCS8vIHJ1bGUgMgotCi0JCXJ1bGUgPSBydWxlTGlzdC5pdGVtKDEpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUnVsZS5QQUdFX1JVTEUsIHJ1bGUuZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTUGFnZVJ1bGUpOwotCi0JCWRlY2xhcmF0aW9uID0gKChDU1NQYWdlUnVsZSkgcnVsZSkuZ2V0U3R5bGUoKTsKLQkJYXNzZXJ0RXF1YWxzKDIsIGRlY2xhcmF0aW9uLmdldExlbmd0aCgpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoInNpemUiKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lERU5ULCAiYXV0byIpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIm1hcmdpbiIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfUEVSQ0VOVEFHRSwgMTApKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0VGV4dDMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KEZpbGVVdGlsLmNyZWF0ZVN0cmluZygic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMiLCAiQ1NTUGFnZVJ1bGVUZXN0LmNzcyIpKTsKLQotCQlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gKENTU1N0eWxlU2hlZXQpIG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCUNTU1J1bGVMaXN0IHJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQkJYXNzZXJ0RXF1YWxzKDYsIHJ1bGVMaXN0LmdldExlbmd0aCgpKTsKLQotCQlDU1NSdWxlIHJ1bGU7Ci0JCUNTU1N0eWxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb247Ci0JCUNTU1ZhbHVlIHZhbHVlOwotCi0JCS8vIHJ1bGUgMwotCi0JCXJ1bGUgPSBydWxlTGlzdC5pdGVtKDIpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUnVsZS5QQUdFX1JVTEUsIHJ1bGUuZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTUGFnZVJ1bGUpOwotCi0JCWFzc2VydEVxdWFscygiOmxlZnQiLCAoKENTU1BhZ2VSdWxlKSBydWxlKS5nZXRTZWxlY3RvclRleHQoKSk7Ci0KLQkJZGVjbGFyYXRpb24gPSAoKENTU1BhZ2VSdWxlKSBydWxlKS5nZXRTdHlsZSgpOwotCQlhc3NlcnRFcXVhbHMoMiwgZGVjbGFyYXRpb24uZ2V0TGVuZ3RoKCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgibWFyZ2luLWxlZnQiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NNLCA0KSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJtYXJnaW4tcmlnaHQiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NNLCAzKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydFRleHQ0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc3RydWN0dXJlZERvY3VtZW50LnNldChGaWxlVXRpbC5jcmVhdGVTdHJpbmcoInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIiwgIkNTU1BhZ2VSdWxlVGVzdC5jc3MiKSk7Ci0KLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IChDU1NTdHlsZVNoZWV0KSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCWFzc2VydEVxdWFscyg2LCBydWxlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJQ1NTUnVsZSBydWxlOwotCQlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwotCQlDU1NWYWx1ZSB2YWx1ZTsKLQotCQkvLyBydWxlIDQKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgzKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1J1bGUuUEFHRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU1BhZ2VSdWxlKTsKLQotCQlhc3NlcnRFcXVhbHMoIjpyaWdodCIsICgoQ1NTUGFnZVJ1bGUpIHJ1bGUpLmdldFNlbGVjdG9yVGV4dCgpKTsKLQotCQlkZWNsYXJhdGlvbiA9ICgoQ1NTUGFnZVJ1bGUpIHJ1bGUpLmdldFN0eWxlKCk7Ci0JCWFzc2VydEVxdWFscygyLCBkZWNsYXJhdGlvbi5nZXRMZW5ndGgoKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJtYXJnaW4tbGVmdCIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ00sIDMpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIm1hcmdpbi1yaWdodCIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ00sIDQpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0VGV4dDUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KEZpbGVVdGlsLmNyZWF0ZVN0cmluZygic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMiLCAiQ1NTUGFnZVJ1bGVUZXN0LmNzcyIpKTsKLQotCQlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gKENTU1N0eWxlU2hlZXQpIG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCUNTU1J1bGVMaXN0IHJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQkJYXNzZXJ0RXF1YWxzKDYsIHJ1bGVMaXN0LmdldExlbmd0aCgpKTsKLQotCQlDU1NSdWxlIHJ1bGU7Ci0JCUNTU1N0eWxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb247Ci0JCUNTU1ZhbHVlIHZhbHVlOwotCQlDU1NWYWx1ZUxpc3QgdmFsdWVMaXN0OwotCi0JCS8vIHJ1bGUgNQotCi0JCXJ1bGUgPSBydWxlTGlzdC5pdGVtKDQpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUnVsZS5QQUdFX1JVTEUsIHJ1bGUuZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTUGFnZVJ1bGUpOwotCi0JCWFzc2VydEVxdWFscygibmFycm93IiwgKChDU1NQYWdlUnVsZSkgcnVsZSkuZ2V0U2VsZWN0b3JUZXh0KCkpOwotCi0JCWRlY2xhcmF0aW9uID0gKChDU1NQYWdlUnVsZSkgcnVsZSkuZ2V0U3R5bGUoKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGRlY2xhcmF0aW9uLmdldExlbmd0aCgpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoInNpemUiKTsKLQkJYXNzZXJ0VHJ1ZSh2YWx1ZSBpbnN0YW5jZW9mIENTU1ZhbHVlTGlzdCk7Ci0KLQkJdmFsdWVMaXN0ID0gKENTU1ZhbHVlTGlzdCkgdmFsdWU7Ci0JCWFzc2VydEVxdWFscygyLCB2YWx1ZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDApLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19DTSwgOSkpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgxKSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ00sIDE4KSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydFRleHQ2KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc3RydWN0dXJlZERvY3VtZW50LnNldChGaWxlVXRpbC5jcmVhdGVTdHJpbmcoInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIiwgIkNTU1BhZ2VSdWxlVGVzdC5jc3MiKSk7Ci0KLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IChDU1NTdHlsZVNoZWV0KSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCWFzc2VydEVxdWFscyg2LCBydWxlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJQ1NTUnVsZSBydWxlOwotCQlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwotCQlDU1NWYWx1ZSB2YWx1ZTsKLQotCQkvLyBydWxlIDYKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSg1KTsKLQkJYXNzZXJ0RXF1YWxzKENTU1J1bGUuUEFHRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU1BhZ2VSdWxlKTsKLQotCQlhc3NlcnRFcXVhbHMoInJvdGF0ZWQiLCAoKENTU1BhZ2VSdWxlKSBydWxlKS5nZXRTZWxlY3RvclRleHQoKSk7Ci0KLQkJZGVjbGFyYXRpb24gPSAoKENTU1BhZ2VSdWxlKSBydWxlKS5nZXRTdHlsZSgpOwotCQlhc3NlcnRFcXVhbHMoMSwgZGVjbGFyYXRpb24uZ2V0TGVuZ3RoKCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgic2l6ZSIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSURFTlQsICJsYW5kc2NhcGUiKSk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU1N0eWxlUnVsZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU1N0eWxlUnVsZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU4ZDkzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NTdHlsZVJ1bGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKLSAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMKLSAqIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZAotICogaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NQcmltaXRpdmVWYWx1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NQcmltaXRpdmVWYWx1ZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUnVsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUnVsZUxpc3Q7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1N0eWxlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1N0eWxlUnVsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTU3R5bGVTaGVldDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTVmFsdWU7Ci0KLXB1YmxpYyBjbGFzcyBDU1NTdHlsZVJ1bGVUZXN0IGV4dGVuZHMgQWJzdHJhY3RNb2RlbFRlc3QgewotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRUZXh0TnVtYmVycygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IGdldE1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudC5zZXQoRmlsZVV0aWwuY3JlYXRlU3RyaW5nKCJzcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcyIsICJDU1NTdHlsZVJ1bGVUZXN0LmNzcyIpKTsKLQotCQlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gKENTU1N0eWxlU2hlZXQpIG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCUNTU1J1bGVMaXN0IHJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQkJYXNzZXJ0RXF1YWxzKDMsIHJ1bGVMaXN0LmdldExlbmd0aCgpKTsKLQotCQlDU1NSdWxlIHJ1bGU7Ci0JCUNTU1N0eWxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb247Ci0JCUNTU1ZhbHVlIHZhbHVlOwotCi0JCXJ1bGUgPSBydWxlTGlzdC5pdGVtKDApOwotCQlhc3NlcnRFcXVhbHMoQ1NTUnVsZS5TVFlMRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU1N0eWxlUnVsZSk7Ci0KLQkJZGVjbGFyYXRpb24gPSAoKENTU1N0eWxlUnVsZSkgcnVsZSkuZ2V0U3R5bGUoKTsKLQkJYXNzZXJ0RXF1YWxzKDE5LCBkZWNsYXJhdGlvbi5nZXRMZW5ndGgoKSk7Ci0KLQkJLy8gMDEKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJOVU1CRVIiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX05VTUJFUiwgMTIzLjQ1NmYpKTsKLQotCQkvLyAwMgotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIlBFUkNFTlRBR0UiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1BFUkNFTlRBR0UsIDEyMy40NTZmKSk7Ci0KLQkJLy8gMDMKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJFTVMiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0VNUywgMTIzLjQ1NmYpKTsKLQotCQkvLyAwNAotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIkVYUyIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfRVhTLCAxMjMuNDU2ZikpOwotCi0JCS8vIDA1Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiUFgiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1BYLCAxMjMuNDU2ZikpOwotCi0JCS8vIDA2Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiQ00iKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NNLCAxMjMuNDU2ZikpOwotCi0JCS8vIDA3Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiTU0iKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX01NLCAxMjMuNDU2ZikpOwotCi0JCS8vIDA4Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiSU4iKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOLCAxMjMuNDU2ZikpOwotCi0JCS8vIDA5Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiUFQiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1BULCAxMjMuNDU2ZikpOwotCi0JCS8vIDEwCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiUEMiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1BDLCAxMjMuNDU2ZikpOwotCi0JCS8vIDExCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiREVHIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19ERUcsIC0xMjMuNDU2ZikpOwotCi0JCS8vIDEyCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiUkFEIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19SQUQsIDEyMy40NTZmKSk7Ci0KLQkJLy8gMTMKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJHUkFEIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19HUkFELCAxMjMuNDU2ZikpOwotCi0JCS8vIDE0Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiTVMiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX01TLCAxMjMuNDU2ZikpOwotCi0JCS8vIDE1Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiUyIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfUywgMTIzLjQ1NmYpKTsKLQotCQkvLyAxNgotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIkhaIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19IWiwgMTIzLjQ1NmYpKTsKLQotCQkvLyAxNwotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIktIWiIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfS0haLCAxMjMuNDU2ZikpOwotCi0JCS8vIDE4Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiRElNRU5TSU9OIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19ESU1FTlNJT04sIC0xMjMuNDU2ZikpOwotCi0JCS8vIDE5Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiSU5URUdFUiIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDEyMykpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRUZXh0U3RyaW5ncygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IGdldE1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudC5zZXQoRmlsZVV0aWwuY3JlYXRlU3RyaW5nKCJzcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcyIsICJDU1NTdHlsZVJ1bGVUZXN0LmNzcyIpKTsKLQotCQlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gKENTU1N0eWxlU2hlZXQpIG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCUNTU1J1bGVMaXN0IHJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQkJYXNzZXJ0RXF1YWxzKDMsIHJ1bGVMaXN0LmdldExlbmd0aCgpKTsKLQotCQlDU1NSdWxlIHJ1bGU7Ci0JCUNTU1N0eWxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb247Ci0JCUNTU1ZhbHVlIHZhbHVlOwotCi0JCXJ1bGUgPSBydWxlTGlzdC5pdGVtKDEpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUnVsZS5TVFlMRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU1N0eWxlUnVsZSk7Ci0KLQkJZGVjbGFyYXRpb24gPSAoKENTU1N0eWxlUnVsZSkgcnVsZSkuZ2V0U3R5bGUoKTsKLQkJYXNzZXJ0RXF1YWxzKDExLCBkZWNsYXJhdGlvbi5nZXRMZW5ndGgoKSk7Ci0KLQkJLy8gMDEKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJTVFJJTkciKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1NUUklORywgInN0cmluZyIpKTsKLQotCQkvLyAwMgotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIlVSSSIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfVVJJLCAiaHR0cDovL3d3dy5pYm0uY29tLyIpKTsKLQotCQkvLyAwMwotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIklERU5UIik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgImxlZnQiKSk7Ci0KLQkJLy8gMDQKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJIQVNIIik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSEFTSCwgIiNhYmNkZWYiKSk7Ci0KLQkJLy8gMDUKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJVUkFOR0UiKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19VUkFOR0UsICJVKzIwQTciKSk7Ci0KLQkJLy8gMDYKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJTTEFTSCIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1NMQVNILCAiLyIpKTsKLQotCQkvLyAwNwotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIkNPTU1BIik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ09NTUEsICIsIikpOwotCi0JCS8vIDA4Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiSU5IRVJJVF9QUklNSVRJVkUiKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTkhFUklUX1BSSU1JVElWRSwgImluaGVyaXQiKSk7Ci0KLQkJLy8gMDkKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJBVFRSIik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19BVFRSLCAiS0VZIikpOwotCi0JCS8vIDEwCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiRk9STUFUIik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfRk9STUFULCAidHJ1ZWRvYyIpKTsKLQotCQkvLyAxMQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIkxPQ0FMIik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfTE9DQUwsICJFeGNlbHNpb3IgUm9tYW4iKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydFRleHRGdW5jdGlvbnMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KEZpbGVVdGlsLmNyZWF0ZVN0cmluZygic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMiLCAiQ1NTU3R5bGVSdWxlVGVzdC5jc3MiKSk7Ci0KLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IChDU1NTdHlsZVNoZWV0KSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCWFzc2VydEVxdWFscygzLCBydWxlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJQ1NTUnVsZSBydWxlOwotCQlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwotCQlDU1NWYWx1ZSB2YWx1ZTsKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgyKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1J1bGUuU1RZTEVfUlVMRSwgcnVsZS5nZXRUeXBlKCkpOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NTdHlsZVJ1bGUpOwotCi0JCWRlY2xhcmF0aW9uID0gKChDU1NTdHlsZVJ1bGUpIHJ1bGUpLmdldFN0eWxlKCk7Ci0JCWFzc2VydEVxdWFscygzLCBkZWNsYXJhdGlvbi5nZXRMZW5ndGgoKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJDT1VOVEVSIik7Ci0JCWNoZWNrUHJpbWl0aXZlQ291bnRlcih2YWx1ZSwgInBhci1udW0iLCAidXBwZXItcm9tYW4iLCBudWxsKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIlJFQ1QiKTsKLQkJY2hlY2tQcmltaXRpdmVSZWN0KHZhbHVlLCBuZXcgT2JqZWN0W117bmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDEyKSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDM0KSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDU2KSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDc4KX0pOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiUkdCQ09MT1IiKTsKLQkJY2hlY2tQcmltaXRpdmVSZ2IodmFsdWUsIG5ldyBPYmplY3RbXXtuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgMjU1KSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDEyOCksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCAwKX0pOwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU1N0eWxlU2hlZXRUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NTdHlsZVNoZWV0VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjNjZWI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU1N0eWxlU2hlZXRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcwotICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcwotICogb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kCi0gKiBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5ET01FeGNlcHRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGVMaXN0OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NTdHlsZVNoZWV0OwotCi0KLXB1YmxpYyBjbGFzcyBDU1NTdHlsZVNoZWV0VGVzdCBleHRlbmRzIEFic3RyYWN0TW9kZWxUZXN0IHsKLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgUlVMRV9IMSA9ICJIMSB7IGNvbG9yIDogcmVkOyB9IjsKLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgUlVMRV9IMiA9ICJIMiB7IGNvbG9yIDogcmVkOyB9IjsKLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgUlVMRV9IMyA9ICJIMyB7IGNvbG9yIDogcmVkOyB9IjsKLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRSdWxlKCkgewotCQlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gZ2V0U3R5bGVTaGVldCgpOwotCi0JCWFzc2VydEVxdWFscygwLCBzaGVldC5pbnNlcnRSdWxlKFJVTEVfSDMsIDApKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIHNoZWV0Lmluc2VydFJ1bGUoUlVMRV9IMSwgMCkpOwotCQlhc3NlcnRFcXVhbHMoMSwgc2hlZXQuaW5zZXJ0UnVsZShSVUxFX0gyLCAxKSk7Ci0KLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlDU1NSdWxlIHJ1bGU7Ci0KLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMCk7Ci0JCWFzc2VydEVxdWFscyhSVUxFX0gxLCBydWxlLmdldENzc1RleHQoKSk7Ci0JCXJ1bGUgPSBydWxlTGlzdC5pdGVtKDEpOwotCQlhc3NlcnRFcXVhbHMoUlVMRV9IMiwgcnVsZS5nZXRDc3NUZXh0KCkpOwotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgyKTsKLQkJYXNzZXJ0RXF1YWxzKFJVTEVfSDMsIHJ1bGUuZ2V0Q3NzVGV4dCgpKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REZWxldGVSdWxlKCkgewotCQlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gZ2V0U3R5bGVTaGVldCgpOwotCi0JCWFzc2VydEVxdWFscygwLCBzaGVldC5pbnNlcnRSdWxlKFJVTEVfSDMsIDApKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIHNoZWV0Lmluc2VydFJ1bGUoUlVMRV9IMSwgMCkpOwotCQlhc3NlcnRFcXVhbHMoMSwgc2hlZXQuaW5zZXJ0UnVsZShSVUxFX0gyLCAxKSk7Ci0KLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3Q7Ci0JCUNTU1J1bGUgcnVsZTsKLQotCQlzaGVldC5kZWxldGVSdWxlKDEpOwotCQlydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0KLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMCk7Ci0JCWFzc2VydEVxdWFscyhSVUxFX0gxLCBydWxlLmdldENzc1RleHQoKSk7Ci0JCXJ1bGUgPSBydWxlTGlzdC5pdGVtKDEpOwotCQlhc3NlcnRFcXVhbHMoUlVMRV9IMywgcnVsZS5nZXRDc3NUZXh0KCkpOwotCi0JCXNoZWV0LmRlbGV0ZVJ1bGUoMSk7Ci0JCXJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgwKTsKLQkJYXNzZXJ0RXF1YWxzKFJVTEVfSDEsIHJ1bGUuZ2V0Q3NzVGV4dCgpKTsKLQotCQlzaGVldC5kZWxldGVSdWxlKDApOwotCi0JCXRyeSB7Ci0JCQlzaGVldC5kZWxldGVSdWxlKDApOwotCQl9Ci0JCWNhdGNoIChET01FeGNlcHRpb24gZSkgewotCQkJYXNzZXJ0RXF1YWxzKERPTUV4Y2VwdGlvbi5JTkRFWF9TSVpFX0VSUiwgZS5jb2RlKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9UZXN0Q1NTRGVjbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvVGVzdENTU0RlY2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZiYjFhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9UZXN0Q1NTRGVjbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTU3R5bGVEZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwudXRpbC5DU1NTdHlsZURlY2xhcmF0aW9uRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwudXRpbC5kZWNsYXJhdGlvbi5DU1NQcm9wZXJ0eUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q1NTRGVjbCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgdm9pZCB0ZXN0RGVjbCgpIHsKLQkJQ1NTUHJvcGVydHlDb250ZXh0IGNvbnRleHQgPSBuZXcgQ1NTUHJvcGVydHlDb250ZXh0KCk7Ci0JCUlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2wgPSBDU1NTdHlsZURlY2xhcmF0aW9uRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmNyZWF0ZVN0eWxlRGVjbGFyYXRpb24oKTsKLQkJY29udGV4dC5pbml0aWFsaXplKGRlY2wpOwotCQlkZWNsLnNldENzc1RleHQoZ2V0U3RyaW5nKCkgIT0gbnVsbCA/IGdldFN0cmluZygpIDogIiIpOy8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBnZXRTdHJpbmcoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3NvdXJjZS9DU1NTZWxlY3RvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3NvdXJjZS9DU1NTZWxlY3RvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYyMGMwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9zb3VyY2UvQ1NTU2VsZWN0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKLSAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMKLSAqIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZAotICogaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnNvdXJjZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5DU1NTZWxlY3Rvckxpc3RJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTU2VsZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NTZWxlY3RvckNvbWJpbmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NTZWxlY3Rvckl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NTZWxlY3Rvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NTaW1wbGVTZWxlY3RvcjsKLQotCi1wdWJsaWMgY2xhc3MgQ1NTU2VsZWN0b3JUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjAxKCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkgxLCBIMiwgSDMiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkgxLCBIMiwgSDMiLCAzLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIMSIsIDEsIDEsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIMSIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMSk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIMiIsIDEsIDEsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIMiIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMik7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIMyIsIDEsIDEsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIMyIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IwMigpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJIXFxcXCwgSFxcMSwgSDMiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkhcXFxcLCBIXFwxLCBIMyIsIDMsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkhcXFxcIiwgMSwgMSwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkhcXFxcIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigxKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkhcXDEiLCAxLCAxLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiSFxcMSIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMik7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIMyIsIDEsIDEsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIMyIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IwMygpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJIMS5wYXN0b3JhbCIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiSDEucGFzdG9yYWwiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIMS5wYXN0b3JhbCIsIDEsIDEwMSwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkgxIiwgZmFsc2UsIDAsIDEsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW117InBhc3RvcmFsIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjA0KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIlAucGFzdG9yYWwubWFyaW5lIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJQLnBhc3RvcmFsLm1hcmluZSIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIlAucGFzdG9yYWwubWFyaW5lIiwgMSwgMjAxLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiUCIsIGZhbHNlLCAwLCAyLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJwYXN0b3JhbCIsICJtYXJpbmUifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMDUoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiKi53YXJuaW5nIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICIqLndhcm5pbmciLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICIqLndhcm5pbmciLCAxLCAxMDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIqIiwgdHJ1ZSwgMCwgMSwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsid2FybmluZyJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IwNigpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCIud2FybmluZyIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiLndhcm5pbmciLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICIud2FybmluZyIsIDEsIDEwMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIiIsIHRydWUsIDAsIDEsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW117Indhcm5pbmcifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMDcoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiKltsYW5nPWZyXSIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiKltsYW5nPWZyXSIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIipbbGFuZz1mcl0iLCAxLCAxMDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIqIiwgdHJ1ZSwgMSwgMCwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JBdHRyaWJ1dGVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsibGFuZz1mciJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IwOCgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJbbGFuZz1mcl0iKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIltsYW5nPWZyXSIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIltsYW5nPWZyXSIsIDEsIDEwMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIiIsIHRydWUsIDEsIDAsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQXR0cmlidXRlcyhpdGVtLCBuZXcgU3RyaW5nW117Imxhbmc9ZnIifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMDkoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiKiNteWlkIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICIqI215aWQiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICIqI215aWQiLCAxLCAxMDAwMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIioiLCB0cnVlLCAwLCAwLCAxLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcklEcyhpdGVtLCBuZXcgU3RyaW5nW117Im15aWQifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMTAoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiI215aWQiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIiNteWlkIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiI215aWQiLCAxLCAxMDAwMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIiIsIHRydWUsIDAsIDAsIDEsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9ySURzKGl0ZW0sIG5ldyBTdHJpbmdbXXsibXlpZCJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IxMSgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJIMSN6OTh5Iik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJIMSN6OTh5IiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiSDEjejk4eSIsIDEsIDEwMDAxLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiSDEiLCBmYWxzZSwgMCwgMCwgMSwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JJRHMoaXRlbSwgbmV3IFN0cmluZ1tdeyJ6OTh5In0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjEyKCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkgxIEVNIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJIMSBFTSIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkgxIEVNIiwgMywgMiwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkgxIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDEpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiICIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuREVTQ0VOREFOVCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMik7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkVNIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjEzKCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkRJViAqIFAiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkRJViAqIFAiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJESVYgKiBQIiwgNSwgMiwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkRJViIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgxKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIiAiLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkRFU0NFTkRBTlQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDIpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIqIiwgdHJ1ZSwgMCwgMCwgMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMyk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICIgIiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5ERVNDRU5EQU5UKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSg0KTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiUCIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IxNCgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJESVYgUCAqW2hyZWZdIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJESVYgUCAqW2hyZWZdIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiRElWIFAgKltocmVmXSIsIDUsIDEwMiwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkRJViIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgxKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIiAiLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkRFU0NFTkRBTlQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDIpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJQIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDMpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiICIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuREVTQ0VOREFOVCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oNCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIioiLCB0cnVlLCAxLCAwLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckF0dHJpYnV0ZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJocmVmIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjE1KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkJPRFkgPiBQIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJCT0RZID4gUCIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkJPRFkgPiBQIiwgMywgMiwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkJPRFkiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMSk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICI+IiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5DSElMRCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMik7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIlAiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMTYoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiRElWIE9MPkxJIFAiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkRJViBPTCA+IExJIFAiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJESVYgT0wgPiBMSSBQIiwgNywgNCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkRJViIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgxKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIiAiLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkRFU0NFTkRBTlQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDIpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJPTCIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgzKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIj4iLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkNISUxEKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSg0KTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiTEkiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oNSk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICIgIiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5ERVNDRU5EQU5UKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSg2KTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiUCIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IxNygpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJNQVRIICsgUCIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiTUFUSCArIFAiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJNQVRIICsgUCIsIDMsIDIsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJNQVRIIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDEpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiKyIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuQURKQUNFTlQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDIpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJQIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjE4KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkgxLm9wZW5lciArIEgyIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJIMS5vcGVuZXIgKyBIMiIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkgxLm9wZW5lciArIEgyIiwgMywgMTAyLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiSDEiLCBmYWxzZSwgMCwgMSwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsib3BlbmVyIn0pOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDEpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiKyIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuQURKQUNFTlQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDIpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIMiIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IxOSgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJFWEFNUExFW25vdGF0aW9uPWRlY2ltYWxdIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJFWEFNUExFW25vdGF0aW9uPWRlY2ltYWxdIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiRVhBTVBMRVtub3RhdGlvbj1kZWNpbWFsXSIsIDEsIDEwMSwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkVYQU1QTEUiLCBmYWxzZSwgMSwgMCwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JBdHRyaWJ1dGVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsibm90YXRpb249ZGVjaW1hbCJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IyMCgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJTUEFOW2hlbGxvPVwiQ2xldmVsYW5kXCJdW2dvb2RieWU9XCJDb2x1bWJ1c1wiXSIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiU1BBTltoZWxsbz1cIkNsZXZlbGFuZFwiXVtnb29kYnllPVwiQ29sdW1idXNcIl0iLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJTUEFOW2hlbGxvPVwiQ2xldmVsYW5kXCJdW2dvb2RieWU9XCJDb2x1bWJ1c1wiXSIsIDEsIDIwMSwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIlNQQU4iLCBmYWxzZSwgMiwgMCwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JBdHRyaWJ1dGVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiaGVsbG89XCJDbGV2ZWxhbmRcIiIsICJnb29kYnllPVwiQ29sdW1idXNcIiJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IyMSgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJESVYgPiBQOmZpcnN0LWNoaWxkIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJESVYgPiBQOmZpcnN0LWNoaWxkIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiRElWID4gUDpmaXJzdC1jaGlsZCIsIDMsIDEwMiwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkRJViIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgxKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIj4iLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkNISUxEKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgyKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiUCIsIGZhbHNlLCAwLCAwLCAwLCAxKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvclBzZXVkb05hbWVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiZmlyc3QtY2hpbGQifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMjIoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiUDpmaXJzdC1jaGlsZCBFTSIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiUDpmaXJzdC1jaGlsZCBFTSIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIlA6Zmlyc3QtY2hpbGQgRU0iLCAzLCAxMDIsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJQIiwgZmFsc2UsIDAsIDAsIDAsIDEpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yUHNldWRvTmFtZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJmaXJzdC1jaGlsZCJ9KTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgxKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIiAiLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkRFU0NFTkRBTlQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDIpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJFTSIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IyMygpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCIqID4gQTpmaXJzdC1jaGlsZCIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiKiA+IEE6Zmlyc3QtY2hpbGQiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICIqID4gQTpmaXJzdC1jaGlsZCIsIDMsIDEwMSwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIioiLCB0cnVlLCAwLCAwLCAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgxKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIj4iLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkNISUxEKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgyKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiQSIsIGZhbHNlLCAwLCAwLCAwLCAxKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvclBzZXVkb05hbWVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiZmlyc3QtY2hpbGQifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMjQoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiQTpsaW5rIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJBOmxpbmsiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJBOmxpbmsiLCAxLCAxMDEsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJBIiwgZmFsc2UsIDAsIDAsIDAsIDEpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yUHNldWRvTmFtZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJsaW5rIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjI1KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIjpsaW5rIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICI6bGluayIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIjpsaW5rIiwgMSwgMTAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiIiwgdHJ1ZSwgMCwgMCwgMCwgMSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JQc2V1ZG9OYW1lcyhpdGVtLCBuZXcgU3RyaW5nW117ImxpbmsifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMjYoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiQTpmb2N1czpob3ZlciIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiQTpmb2N1czpob3ZlciIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkE6Zm9jdXM6aG92ZXIiLCAxLCAyMDEsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJBIiwgZmFsc2UsIDAsIDAsIDAsIDIpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yUHNldWRvTmFtZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJmb2N1cyIsICJob3ZlciJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IyNygpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJIVE1MOmxhbmcoZGUpID4gUSIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiSFRNTDpsYW5nKGRlKSA+IFEiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIVE1MOmxhbmcoZGUpID4gUSIsIDMsIDEwMiwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkhUTUwiLCBmYWxzZSwgMCwgMCwgMCwgMSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JQc2V1ZG9OYW1lcyhpdGVtLCBuZXcgU3RyaW5nW117ImxhbmcoZGUpIn0pOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDEpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiPiIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuQ0hJTEQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDIpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJRIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjI4KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIlAgPiBBOmxpbmssIEEuZXh0ZXJuYWw6dmlzaXRlZCIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiUCA+IEE6bGluaywgQS5leHRlcm5hbDp2aXNpdGVkIiwgMiwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiUCA+IEE6bGluayIsIDMsIDEwMiwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIlAiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMSk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICI+IiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5DSElMRCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMik7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkEiLCBmYWxzZSwgMCwgMCwgMCwgMSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JQc2V1ZG9OYW1lcyhpdGVtLCBuZXcgU3RyaW5nW117ImxpbmsifSk7Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDEpOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiQS5leHRlcm5hbDp2aXNpdGVkIiwgMSwgMjAxLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiQSIsIGZhbHNlLCAwLCAxLCAwLCAxKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJleHRlcm5hbCJ9KTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvclBzZXVkb05hbWVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsidmlzaXRlZCJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IyOSgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJQI2hvZ2U5OCArICo6aG92ZXIgPiBBOmxpbmssIEEuZXh0ZXJuYWw6dmlzaXRlZCIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiUCNob2dlOTggKyAqOmhvdmVyID4gQTpsaW5rLCBBLmV4dGVybmFsOnZpc2l0ZWQiLCAyLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJQI2hvZ2U5OCArICo6aG92ZXIgPiBBOmxpbmsiLCA1LCAxMDIwMiwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIlAiLCBmYWxzZSwgMCwgMCwgMSwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JJRHMoaXRlbSwgbmV3IFN0cmluZ1tdeyJob2dlOTgifSk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMSk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICIrIiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5BREpBQ0VOVCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMik7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIioiLCB0cnVlLCAwLCAwLCAwLCAxKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvclBzZXVkb05hbWVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiaG92ZXIifSk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMyk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICI+IiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5DSElMRCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oNCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkEiLCBmYWxzZSwgMCwgMCwgMCwgMSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JQc2V1ZG9OYW1lcyhpdGVtLCBuZXcgU3RyaW5nW117ImxpbmsifSk7Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDEpOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiQS5leHRlcm5hbDp2aXNpdGVkIiwgMSwgMjAxLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiQSIsIGZhbHNlLCAwLCAxLCAwLCAxKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJleHRlcm5hbCJ9KTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvclBzZXVkb05hbWVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsidmlzaXRlZCJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IzMCgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJIMS4xMjMiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkgxLjEyMyIsIDEsIDEpOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkgxLjEyMyIsIDEsIDEwMSwgMSk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkgxIiwgZmFsc2UsIDAsIDEsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW117IjEyMyJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IzMSgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJQLjEyMy40NTYiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIlAuMTIzLjQ1NiIsIDEsIDIpOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIlAuMTIzLjQ1NiIsIDEsIDIwMSwgMik7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIlAiLCBmYWxzZSwgMCwgMiwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiMTIzIiwgIjQ1NiJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IzMigpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCIqLjEyMyIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiKi4xMjMiLCAxLCAxKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICIqLjEyMyIsIDEsIDEwMCwgMSk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIioiLCB0cnVlLCAwLCAxLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyIxMjMifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMzMoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiLjEyMyIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiLjEyMyIsIDEsIDEpOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIi4xMjMiLCAxLCAxMDAsIDEpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIiLCB0cnVlLCAwLCAxLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyIxMjMifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMzQoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiSDEuMXgzIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJIMS4xeDMiLCAxLCAxKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIMS4xeDMiLCAxLCAxMDEsIDEpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIMSIsIGZhbHNlLCAwLCAxLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyIxeDMifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMzUoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiSDIuMTIzIzQ2Iik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJIMi4xMjMjNDYiLCAxLCAxKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIMi4xMjMjNDYiLCAxLCAxMDEwMSwgMSk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkgyIiwgZmFsc2UsIDAsIDEsIDEsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW117IjEyMyJ9KTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcklEcyhpdGVtLCBuZXcgU3RyaW5nW117IjQ2In0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjM2KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkgzLjF4MyM0dDIiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkgzLjF4MyM0dDIiLCAxLCAxKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIMy4xeDMjNHQyIiwgMSwgMTAxMDEsIDEpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIMyIsIGZhbHNlLCAwLCAxLCAxLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyIxeDMifSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JJRHMoaXRlbSwgbmV3IFN0cmluZ1tdeyI0dDIifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMzcoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiKi4xMjMiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIiouMTIzIiwgMSwgMSk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiKi4xMjMiLCAxLCAxMDAsIDEpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIqIiwgdHJ1ZSwgMCwgMSwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiMTIzIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjM4KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIi4xMjMiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIi4xMjMiLCAxLCAxKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICIuMTIzIiwgMSwgMTAwLCAxKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiIiwgdHJ1ZSwgMCwgMSwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiMTIzIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjM5KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIi4xMjNmNTY3Iik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICIuMTIzZjU2NyIsIDEsIDEpOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIi4xMjNmNTY3IiwgMSwgMTAwLCAxKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiIiwgdHJ1ZSwgMCwgMSwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiMTIzZjU2NyJ9KTsKLQl9Ci0KLQotCXByaXZhdGUgdm9pZCBjaGVja1NlbGVjdG9yTGlzdChJQ1NTU2VsZWN0b3JMaXN0IGxpc3QsIFN0cmluZyBmb3JtYXR0ZWRTb3VyY2UsIGludCBuU2VsZWN0b3JzLCBpbnQgbkVycm9ycykgewotCQlhc3NlcnRFcXVhbHMoZm9ybWF0dGVkU291cmNlLCBsaXN0LmdldFN0cmluZygpKTsKLQkJYXNzZXJ0RXF1YWxzKG5TZWxlY3RvcnMsIGxpc3QuZ2V0TGVuZ3RoKCkpOwotCQlhc3NlcnRFcXVhbHMobkVycm9ycywgbGlzdC5nZXRFcnJvckNvdW50KCkpOwotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja1NlbGVjdG9yKElDU1NTZWxlY3RvciBzZWxlY3RvciwgU3RyaW5nIGZvcm1hdHRlZFNvdXJjZSwgaW50IGl0ZW1zLCBpbnQgc3BlY2lmaWNpdHksIGludCBuRXJyb3JzKSB7Ci0JCWFzc2VydEVxdWFscyhmb3JtYXR0ZWRTb3VyY2UsIHNlbGVjdG9yLmdldFN0cmluZygpKTsKLQkJYXNzZXJ0RXF1YWxzKGl0ZW1zLCBzZWxlY3Rvci5nZXRMZW5ndGgoKSk7Ci0JCWFzc2VydEVxdWFscyhzcGVjaWZpY2l0eSwgc2VsZWN0b3IuZ2V0U3BlY2lmaWNpdHkoKSk7Ci0JCWFzc2VydEVxdWFscyhuRXJyb3JzLCBzZWxlY3Rvci5nZXRFcnJvckNvdW50KCkpOwotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja1NpbXBsZVNlbGVjdG9yKElDU1NTZWxlY3Rvckl0ZW0gc2VsZWN0b3IsIFN0cmluZyBmb3JtYXR0ZWRTb3VyY2UsIGJvb2xlYW4gaXNVbml2ZXJzYWwsIGludCBuQXR0cmlidXRlcywgaW50IG5DbGFzc2VzLCBpbnQgbklkcywgaW50IG5Qc2V1ZG9OYW1lcykgewotCQlhc3NlcnRUcnVlKHNlbGVjdG9yIGluc3RhbmNlb2YgSUNTU1NpbXBsZVNlbGVjdG9yKTsKLQkJYXNzZXJ0RXF1YWxzKGZvcm1hdHRlZFNvdXJjZSwgKChJQ1NTU2ltcGxlU2VsZWN0b3IpIHNlbGVjdG9yKS5nZXROYW1lKCkpOwotCQlhc3NlcnRFcXVhbHMoaXNVbml2ZXJzYWwsICgoSUNTU1NpbXBsZVNlbGVjdG9yKSBzZWxlY3RvcikuaXNVbml2ZXJzYWwoKSk7Ci0JCWFzc2VydEVxdWFscyhuQXR0cmlidXRlcywgKChJQ1NTU2ltcGxlU2VsZWN0b3IpIHNlbGVjdG9yKS5nZXROdW1PZkF0dHJpYnV0ZXMoKSk7Ci0JCWFzc2VydEVxdWFscyhuQ2xhc3NlcywgKChJQ1NTU2ltcGxlU2VsZWN0b3IpIHNlbGVjdG9yKS5nZXROdW1PZkNsYXNzZXMoKSk7Ci0JCWFzc2VydEVxdWFscyhuSWRzLCAoKElDU1NTaW1wbGVTZWxlY3Rvcikgc2VsZWN0b3IpLmdldE51bU9mSURzKCkpOwotCQlhc3NlcnRFcXVhbHMoblBzZXVkb05hbWVzLCAoKElDU1NTaW1wbGVTZWxlY3Rvcikgc2VsZWN0b3IpLmdldE51bU9mUHNldWRvTmFtZXMoKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrU2ltcGxlU2VsZWN0b3JBdHRyaWJ1dGVzKElDU1NTZWxlY3Rvckl0ZW0gc2VsZWN0b3IsIFN0cmluZ1tdIGl0ZW1zKSB7Ci0JCWludCBuSXRlbXMgPSAoKElDU1NTaW1wbGVTZWxlY3Rvcikgc2VsZWN0b3IpLmdldE51bU9mQXR0cmlidXRlcygpOwotCQlhc3NlcnRFcXVhbHMoaXRlbXMubGVuZ3RoLCBuSXRlbXMpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IG5JdGVtczsgaSsrKSB7Ci0JCQlhc3NlcnRFcXVhbHMoaXRlbXNbaV0sICgoSUNTU1NpbXBsZVNlbGVjdG9yKSBzZWxlY3RvcikuZ2V0QXR0cmlidXRlKGkpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhJQ1NTU2VsZWN0b3JJdGVtIHNlbGVjdG9yLCBTdHJpbmdbXSBpdGVtcykgewotCQlpbnQgbkl0ZW1zID0gKChJQ1NTU2ltcGxlU2VsZWN0b3IpIHNlbGVjdG9yKS5nZXROdW1PZkNsYXNzZXMoKTsKLQkJYXNzZXJ0RXF1YWxzKGl0ZW1zLmxlbmd0aCwgbkl0ZW1zKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBuSXRlbXM7IGkrKykgewotCQkJYXNzZXJ0RXF1YWxzKGl0ZW1zW2ldLCAoKElDU1NTaW1wbGVTZWxlY3Rvcikgc2VsZWN0b3IpLmdldENsYXNzKGkpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja1NpbXBsZVNlbGVjdG9ySURzKElDU1NTZWxlY3Rvckl0ZW0gc2VsZWN0b3IsIFN0cmluZ1tdIGl0ZW1zKSB7Ci0JCWludCBuSXRlbXMgPSAoKElDU1NTaW1wbGVTZWxlY3Rvcikgc2VsZWN0b3IpLmdldE51bU9mSURzKCk7Ci0JCWFzc2VydEVxdWFscyhpdGVtcy5sZW5ndGgsIG5JdGVtcyk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbkl0ZW1zOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscyhpdGVtc1tpXSwgKChJQ1NTU2ltcGxlU2VsZWN0b3IpIHNlbGVjdG9yKS5nZXRJRChpKSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tTaW1wbGVTZWxlY3RvclBzZXVkb05hbWVzKElDU1NTZWxlY3Rvckl0ZW0gc2VsZWN0b3IsIFN0cmluZ1tdIGl0ZW1zKSB7Ci0JCWludCBuSXRlbXMgPSAoKElDU1NTaW1wbGVTZWxlY3Rvcikgc2VsZWN0b3IpLmdldE51bU9mUHNldWRvTmFtZXMoKTsKLQkJYXNzZXJ0RXF1YWxzKGl0ZW1zLmxlbmd0aCwgbkl0ZW1zKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBuSXRlbXM7IGkrKykgewotCQkJYXNzZXJ0RXF1YWxzKGl0ZW1zW2ldLCAoKElDU1NTaW1wbGVTZWxlY3Rvcikgc2VsZWN0b3IpLmdldFBzZXVkb05hbWUoaSkpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKElDU1NTZWxlY3Rvckl0ZW0gY29tYmluYXRvciwgU3RyaW5nIGZvcm1hdHRlZFNvdXJjZSwgaW50IGNvbWJpbmF0b3JUeXBlKSB7Ci0JCWFzc2VydFRydWUoY29tYmluYXRvciBpbnN0YW5jZW9mIElDU1NTZWxlY3RvckNvbWJpbmF0b3IpOwotCQlhc3NlcnRFcXVhbHMoZm9ybWF0dGVkU291cmNlLCAoKElDU1NTZWxlY3RvckNvbWJpbmF0b3IpIGNvbWJpbmF0b3IpLmdldFN0cmluZygpKTsKLQkJYXNzZXJ0RXF1YWxzKGNvbWJpbmF0b3JUeXBlLCAoKElDU1NTZWxlY3RvckNvbWJpbmF0b3IpIGNvbWJpbmF0b3IpLmdldENvbWJpbmF0b3JUeXBlKCkpOwotCX0KLQotCXByaXZhdGUgSUNTU1NlbGVjdG9yTGlzdCBjcmVhdGVTZWxlY3Rvckxpc3QoU3RyaW5nIHN0cikgewotCQlyZXR1cm4gbmV3IENTU1NlbGVjdG9yTGlzdEltcGwoc3RyKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvc291cmNlL0NTU1NvdXJjZVBhcnNlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3NvdXJjZS9DU1NTb3VyY2VQYXJzZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMjkxZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvc291cmNlL0NTU1NvdXJjZVBhcnNlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5zb3VyY2U7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uTGlzdDsKLQotLyoqCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIENTU1NvdXJjZVBhcnNlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW4xKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDEuY3NzIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VPcGVuMigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAyLmNzcyIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlT3BlbjMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwMy5jc3MiLCBNT0RFX09QRU4pOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW40KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDQuY3NzIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VPcGVuNSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA1LmNzcyIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlT3BlbjYoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNi5jc3MiLCBNT0RFX09QRU4pOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW43KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDcuY3NzIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQxKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDEuY3NzIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUFwcGVuZDIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwMi5jc3MiLCBNT0RFX0FQUEVORCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kMygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAzLmNzcyIsIE1PREVfQVBQRU5EKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQ0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDQuY3NzIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUFwcGVuZDUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNS5jc3MiLCBNT0RFX0FQUEVORCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kNigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA2LmNzcyIsIE1PREVfQVBQRU5EKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQ3KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDcuY3NzIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUluc2VydDEoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwMS5jc3MiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0MigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAyLmNzcyIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VJbnNlcnQzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDMuY3NzIiwgTU9ERV9JTlNFUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUluc2VydDQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNC5jc3MiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0NSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA1LmNzcyIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VJbnNlcnQ2KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDYuY3NzIiwgTU9ERV9JTlNFUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUluc2VydDcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNy5jc3MiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwcml2YXRlIHZvaWQgc291cmNlUGFyc2VyVGVzdChTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBtb2RlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBudWxsOwotCQlpZiAobW9kZS5lcXVhbHMoTU9ERV9PUEVOKSkgewotCQkJbW9kZWwgPSByZWFkTW9kZWxPcGVuKGZpbGVuYW1lKTsKLQkJfQotCQllbHNlIGlmIChtb2RlLmVxdWFscyhNT0RFX0FQUEVORCkpIHsKLQkJCW1vZGVsID0gcmVhZE1vZGVsQXBwZW5kKGZpbGVuYW1lKTsKLQkJfQotCQllbHNlIGlmIChtb2RlLmVxdWFscyhNT0RFX0lOU0VSVCkpIHsKLQkJCW1vZGVsID0gcmVhZE1vZGVsSW5zZXJ0KGZpbGVuYW1lKTsKLQkJfQotCQlTdHJpbmcgcmVzdWx0ID0gZHVtcFJlZ2lvbnMobW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkpOwotCQljb21wYXJlUmVzdWx0KHJlc3VsdCwgIkNTU1NvdXJjZVBhcnNlclRlc3QtIiArIGZpbGVuYW1lKTsgLy8kTk9OLU5MUy0xJAotCQljbG9zZU1vZGVsKG1vZGVsKTsKLQl9Ci0KLQlwcml2YXRlIElDU1NNb2RlbCByZWFkTW9kZWxPcGVuKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHNvdXJjZSA9IEZpbGVVdGlsLmNyZWF0ZVN0cmluZyhGSUxFU19ESVIsIGZpbGVuYW1lKTsKLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlkb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAwLCAwLCBzb3VyY2UpOwotCi0JCXJldHVybiBtb2RlbDsKLQl9Ci0KLQlwcml2YXRlIElDU1NNb2RlbCByZWFkTW9kZWxBcHBlbmQoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgc291cmNlID0gRmlsZVV0aWwuY3JlYXRlU3RyaW5nKEZJTEVTX0RJUiwgZmlsZW5hbWUpOwotCQlJQ1NTTW9kZWwgbW9kZWwgPSBGaWxlVXRpbC5jcmVhdGVNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgc291cmNlLmxlbmd0aCgpOyBpKyspIHsKLQkJCWRvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIGksIDAsIHNvdXJjZS5zdWJzdHJpbmcoaSwgaSArIDEpKTsKLQkJfQotCi0JCXJldHVybiBtb2RlbDsKLQl9Ci0KLQlwcml2YXRlIElDU1NNb2RlbCByZWFkTW9kZWxJbnNlcnQoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgc291cmNlID0gRmlsZVV0aWwuY3JlYXRlU3RyaW5nKEZJTEVTX0RJUiwgZmlsZW5hbWUpOwotCQlJQ1NTTW9kZWwgbW9kZWwgPSBGaWxlVXRpbC5jcmVhdGVNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgc291cmNlLmxlbmd0aCgpOyBpKyspIHsKLQkJCWludCB0ZXh0SW5kZXggPSBzb3VyY2UubGVuZ3RoKCkgLSBpIC0gMTsKLQkJCWRvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDAsIDAsIHNvdXJjZS5zdWJzdHJpbmcodGV4dEluZGV4LCB0ZXh0SW5kZXggKyAxKSk7Ci0JCX0KLQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNsb3NlTW9kZWwoSUNTU01vZGVsIG1vZGVsKSB7Ci0JCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGR1bXBSZWdpb25zKElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQpIHsKLQkJU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYnVmLmFwcGVuZChkdW1wUmVnaW9ucyhkb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpKSk7Ci0JCXJldHVybiBidWYudG9TdHJpbmcoKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBkdW1wUmVnaW9ucyhJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbikgewotCQlTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlkbyB7Ci0JCQlidWYuYXBwZW5kKGR1bXBPbmVSZWdpb24ocmVnaW9uKSk7Ci0JCQlyZWdpb24gPSByZWdpb24uZ2V0TmV4dCgpOwotCQl9Ci0JCXdoaWxlIChyZWdpb24gIT0gbnVsbCk7Ci0KLQkJYnVmLmFwcGVuZChGaWxlVXRpbC5jb21tb25FT0wgKyAiLS0tLS0tLSIgKyBGaWxlVXRpbC5jb21tb25FT0wpOyAvLyROT04tTkxTLTEkCi0KLQkJcmV0dXJuIGJ1Zi50b1N0cmluZygpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGR1bXBPbmVSZWdpb24oSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbikgewotCQlTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlidWYuYXBwZW5kKGRvY3VtZW50UmVnaW9uLnRvU3RyaW5nKCkpOwotCQlidWYuYXBwZW5kKEZpbGVVdGlsLmNvbW1vbkVPTCArICIgICAgIik7IC8vJE5PTi1OTFMtMSQKLQotCQlJVGV4dFJlZ2lvbkxpc3QgcmVnaW9uTGlzdCA9IGRvY3VtZW50UmVnaW9uLmdldFJlZ2lvbnMoKTsKLQkJSXRlcmF0b3IgaSA9IHJlZ2lvbkxpc3QuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGkuaGFzTmV4dCgpKSB7Ci0JCQlJVGV4dFJlZ2lvbiB0ZXh0UmVnaW9uID0gKElUZXh0UmVnaW9uKSBpLm5leHQoKTsKLQkJCWJ1Zi5hcHBlbmQodGV4dFJlZ2lvbi50b1N0cmluZygpKTsKLQkJCWJ1Zi5hcHBlbmQoIiwgIik7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlidWYuYXBwZW5kKEZpbGVVdGlsLmNvbW1vbkVPTCk7IC8vJE5PTi1OTFMtMSQKLQkJcmV0dXJuIGJ1Zi50b1N0cmluZygpOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBmRHVtcCA9IGZhbHNlOwotCi0JcHJpdmF0ZSB2b2lkIGNvbXBhcmVSZXN1bHQoU3RyaW5nIGFjdHVhbCwgU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlpZiAoZkR1bXApIHsKLQkJCUZpbGVVdGlsLmR1bXBTdHJpbmcoYWN0dWFsLCBSRVNVTFRTX0RJUiwgZmlsZW5hbWUpOwotCQl9Ci0JCWVsc2UgewotCQkJU3RyaW5nIHJlc3VsdCA9IEZpbGVVdGlsLmNyZWF0ZVN0cmluZyhSRVNVTFRTX0RJUiwgZmlsZW5hbWUpOwotCQkJYXNzZXJ0RXF1YWxzKHJlc3VsdCwgYWN0dWFsKTsKLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGSUxFU19ESVIgPSAic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJFU1VMVFNfRElSID0gInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1PREVfT1BFTiA9ICJNT0RFX09QRU4iOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1PREVfQVBQRU5EID0gIk1PREVfQVBQRU5EIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNT0RFX0lOU0VSVCA9ICJNT0RFX0lOU0VSVCI7IC8vJE5PTi1OTFMtMSQKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9zb3VyY2UvQ1NTVGV4dFBhcnNlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3NvdXJjZS9DU1NUZXh0UGFyc2VyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhN2FjYjlkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3NvdXJjZS9DU1NUZXh0UGFyc2VyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzCi0gKiBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zCi0gKiBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQKLSAqIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5zb3VyY2U7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wYXJzZXJ6LkNTU1RleHRQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnBhcnNlcnouQ1NTVGV4dFRva2VuOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy51dGlsLkZpbGVVdGlsOwotCi0KLXB1YmxpYyBjbGFzcyBDU1NUZXh0UGFyc2VyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgdm9pZCB0ZXN0VGV4dDEoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQl0ZXh0UGFyc2VyVGVzdCgic2FtcGxlMDEuY3NzIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VGV4dDIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQl0ZXh0UGFyc2VyVGVzdCgic2FtcGxlMDIuY3NzIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VGV4dDMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQl0ZXh0UGFyc2VyVGVzdCgic2FtcGxlMDMuY3NzIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VGV4dDQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQl0ZXh0UGFyc2VyVGVzdCgic2FtcGxlMDQuY3NzIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VGV4dDUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQl0ZXh0UGFyc2VyVGVzdCgic2FtcGxlMDUuY3NzIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VGV4dDYoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQl0ZXh0UGFyc2VyVGVzdCgic2FtcGxlMDYuY3NzIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VGV4dDcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQl0ZXh0UGFyc2VyVGVzdCgic2FtcGxlMDcuY3NzIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwcml2YXRlIHZvaWQgdGV4dFBhcnNlclRlc3QoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgc291cmNlID0gY3JlYXRlU3RyaW5nKGZpbGVuYW1lKTsgLy8kTk9OLU5MUy0xJAotCQlDU1NUZXh0UGFyc2VyIHBhcnNlciA9IG5ldyBDU1NUZXh0UGFyc2VyKENTU1RleHRQYXJzZXIuTU9ERV9TVFlMRVNIRUVULCBzb3VyY2UpOwotCQlTdHJpbmcgcmVzdWx0ID0gZHVtcFJlZ2lvbnMocGFyc2VyLmdldFRva2VuTGlzdCgpKTsKLQkJY29tcGFyZVJlc3VsdChyZXN1bHQsICJDU1NUZXh0UGFyc2VyVGVzdC0iICsgZmlsZW5hbWUpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgY3JlYXRlU3RyaW5nKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlyZXR1cm4gRmlsZVV0aWwuY3JlYXRlU3RyaW5nKEZJTEVTX0RJUiwgZmlsZW5hbWUpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGR1bXBSZWdpb25zKExpc3QgdG9rZW5zKSB7Ci0JCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCUl0ZXJhdG9yIGkgPSB0b2tlbnMuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGkuaGFzTmV4dCgpKSB7Ci0JCQlidWYuYXBwZW5kKGR1bXBPbmVSZWdpb24oKENTU1RleHRUb2tlbikgaS5uZXh0KCkpKTsKLQkJfQotCi0JCWJ1Zi5hcHBlbmQoRmlsZVV0aWwuY29tbW9uRU9MICsgIi0tLS0tLS0iICsgRmlsZVV0aWwuY29tbW9uRU9MKTsgLy8kTk9OLU5MUy0xJAotCi0JCXJldHVybiBidWYudG9TdHJpbmcoKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBkdW1wT25lUmVnaW9uKENTU1RleHRUb2tlbiB0b2tlbikgewotCQlTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0JCWJ1Zi5hcHBlbmQoIlsiKTsgLy8kTk9OLU5MUy0xJAotCQlidWYuYXBwZW5kKHRva2VuLmltYWdlKTsKLQkJYnVmLmFwcGVuZCgiXSAiKTsgLy8kTk9OLU5MUy0xJAotCQlidWYuYXBwZW5kKHRva2VuLmtpbmQpOwotCQlidWYuYXBwZW5kKCIgLSAiKTsgLy8kTk9OLU5MUy0xJAotCQlidWYuYXBwZW5kKHRva2VuLnN0YXJ0KTsKLQkJYnVmLmFwcGVuZCgiLCAiKTsgLy8kTk9OLU5MUy0xJAotCQlidWYuYXBwZW5kKHRva2VuLmxlbmd0aCk7Ci0KLQkJYnVmLmFwcGVuZChGaWxlVXRpbC5jb21tb25FT0wpOyAvLyROT04tTkxTLTEkCi0JCXJldHVybiBidWYudG9TdHJpbmcoKTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gZkR1bXAgPSBmYWxzZTsKLQotCXByaXZhdGUgdm9pZCBjb21wYXJlUmVzdWx0KFN0cmluZyBhY3R1YWwsIFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKGZEdW1wKSB7Ci0JCQlGaWxlVXRpbC5kdW1wU3RyaW5nKGFjdHVhbCwgUkVTVUxUU19ESVIsIGZpbGVuYW1lKTsKLQkJfQotCQllbHNlIHsKLQkJCVN0cmluZyByZXN1bHQgPSBGaWxlVXRpbC5jcmVhdGVTdHJpbmcoUkVTVUxUU19ESVIsIGZpbGVuYW1lKTsKLQkJCWFzc2VydEVxdWFscyhyZXN1bHQsIGFjdHVhbCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklMRVNfRElSID0gInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRVNVTFRTX0RJUiA9ICJzcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzIjsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9zb3VyY2UvQ1NTVXJsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvc291cmNlL0NTU1VybFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE1OTlhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9zb3VyY2UvQ1NTVXJsVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzCi0gKiBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zCi0gKiBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQKLSAqIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5zb3VyY2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wYXJzZXIuQ1NTU291cmNlUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wYXJzZXJ6LkNTU1JlZ2lvbkNvbnRleHRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnV0aWwuQ1NTVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb25MaXN0OwotCi1wdWJsaWMgY2xhc3MgQ1NTVXJsVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCS8qKgotCSAqIERlY2xhcmF0aW9uOiB3aXRob3V0IHF1b3RlcwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3REZWNsYXJhdGlvbjEoKSB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZU1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJKChDU1NTb3VyY2VQYXJzZXIpIGRvY3VtZW50LmdldFBhcnNlcigpKS5zZXRQYXJzZXJNb2RlKENTU1NvdXJjZVBhcnNlci5NT0RFX0RFQ0xBUkFUSU9OX1ZBTFVFKTsKLQkJZG9jdW1lbnQuc2V0KCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwod2hpdGUgc3BhY2UuZ2lmKTsiKTsgLy8kTk9OLU5MUy0xJAotCQlVcmxJbmZvW10gdXJscyA9IHBpY2t1cFVybChkb2N1bWVudCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKDEsIHVybHMubGVuZ3RoKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMF0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3aGl0ZSBzcGFjZS5naWYiLCB1cmxzWzBdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCS8qKgotCSAqIERlY2xhcmF0aW9uOiB3aXRob3V0IHF1b3Rlcywgd2l0aCBzdXJyb3VuZGVkIHNwYWNlCi0JICovCi0JcHVibGljIHZvaWQgdGVzdERlY2xhcmF0aW9uMigpIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkoKENTU1NvdXJjZVBhcnNlcikgZG9jdW1lbnQuZ2V0UGFyc2VyKCkpLnNldFBhcnNlck1vZGUoQ1NTU291cmNlUGFyc2VyLk1PREVfREVDTEFSQVRJT05fVkFMVUUpOwotCQlkb2N1bWVudC5zZXQoImJhY2tncm91bmQtaW1hZ2U6IHVybCggIHdoaXRlIHNwYWNlLmdpZiAgKTsiKTsgLy8kTk9OLU5MUy0xJAotCQlVcmxJbmZvW10gdXJscyA9IHBpY2t1cFVybChkb2N1bWVudCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKDEsIHVybHMubGVuZ3RoKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMF0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3aGl0ZSBzcGFjZS5naWYiLCB1cmxzWzBdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCS8qKgotCSAqIERlY2xhcmF0aW9uOiB3aXRoIHNpbmdsZSBxdW90ZQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3REZWNsYXJhdGlvbjMoKSB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZU1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJKChDU1NTb3VyY2VQYXJzZXIpIGRvY3VtZW50LmdldFBhcnNlcigpKS5zZXRQYXJzZXJNb2RlKENTU1NvdXJjZVBhcnNlci5NT0RFX0RFQ0xBUkFUSU9OX1ZBTFVFKTsKLQkJZG9jdW1lbnQuc2V0KCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCd3aGl0ZSBzcGFjZS5naWZcJyk7Iik7IC8vJE5PTi1OTFMtMSQKLQkJVXJsSW5mb1tdIHVybHMgPSBwaWNrdXBVcmwoZG9jdW1lbnQpOwotCi0JCWFzc2VydEVxdWFscygxLCB1cmxzLmxlbmd0aCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfREVDTEFSQVRJT05fVkFMVUVfVVJJLCB1cmxzWzBdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuZ2lmIiwgdXJsc1swXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQkvKioKLQkgKiBEZWNsYXJhdGlvbjogd2l0aCBkb3VibGUgcXVvdGUKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RGVjbGFyYXRpb240KCkgewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBGaWxlVXRpbC5jcmVhdGVNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCSgoQ1NTU291cmNlUGFyc2VyKSBkb2N1bWVudC5nZXRQYXJzZXIoKSkuc2V0UGFyc2VyTW9kZShDU1NTb3VyY2VQYXJzZXIuTU9ERV9ERUNMQVJBVElPTl9WQUxVRSk7Ci0JCWRvY3VtZW50LnNldCgiYmFja2dyb3VuZC1pbWFnZTogdXJsKFwid2hpdGUgc3BhY2UuZ2lmXCIpOyIpOyAvLyROT04tTkxTLTEkCi0JCVVybEluZm9bXSB1cmxzID0gcGlja3VwVXJsKGRvY3VtZW50KTsKLQotCQlhc3NlcnRFcXVhbHMoMSwgdXJscy5sZW5ndGgpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX0RFQ0xBUkFUSU9OX1ZBTFVFX1VSSSwgdXJsc1swXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoIndoaXRlIHNwYWNlLmdpZiIsIHVybHNbMF0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JLyoqCi0JICogRGVjbGFyYXRpb246IHR3byB1cmxzCi0JICovCi0JcHVibGljIHZvaWQgdGVzdERlY2xhcmF0aW9uNSgpIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkoKENTU1NvdXJjZVBhcnNlcikgZG9jdW1lbnQuZ2V0UGFyc2VyKCkpLnNldFBhcnNlck1vZGUoQ1NTU291cmNlUGFyc2VyLk1PREVfREVDTEFSQVRJT05fVkFMVUUpOwotCQlkb2N1bWVudC5zZXQoImJhY2tncm91bmQtaW1hZ2U6IHVybCh3aGl0ZSBzcGFjZS5naWYpOyBsaXN0LXN0eWxlLWltYWdlOiB1cmwoc3R5bGUgaW1hZ2UuZ2lmKTsiKTsgLy8kTk9OLU5MUy0xJAotCQlVcmxJbmZvW10gdXJscyA9IHBpY2t1cFVybChkb2N1bWVudCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKDIsIHVybHMubGVuZ3RoKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMF0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3aGl0ZSBzcGFjZS5naWYiLCB1cmxzWzBdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX0RFQ0xBUkFUSU9OX1ZBTFVFX1VSSSwgdXJsc1sxXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoInN0eWxlIGltYWdlLmdpZiIsIHVybHNbMV0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JLyoqCi0JICogU3R5bGUgcnVsZTogdHdvIHVybHMKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0U3R5bGVSdWxlMSgpIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlkb2N1bWVudC5zZXQoIkxJIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKHdoaXRlIHNwYWNlLmdpZik7XHJcbmxpc3Qtc3R5bGUtaW1hZ2U6IHVybChzdHlsZSBpbWFnZS5naWYpOyB9Iik7IC8vJE5PTi1OTFMtMSQKLQkJVXJsSW5mb1tdIHVybHMgPSBwaWNrdXBVcmwoZG9jdW1lbnQpOwotCi0JCWFzc2VydEVxdWFscygyLCB1cmxzLmxlbmd0aCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfREVDTEFSQVRJT05fVkFMVUVfVVJJLCB1cmxzWzBdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuZ2lmIiwgdXJsc1swXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMV0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJzdHlsZSBpbWFnZS5naWYiLCB1cmxzWzFdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCS8qKgotCSAqIEltcG9ydCBydWxlIGFuZCBzdHlsZSBydWxlOiB3aXRob3V0IHF1b3RlcwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RTb21lUnVsZXMxKCkgewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBGaWxlVXRpbC5jcmVhdGVNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWRvY3VtZW50LnNldCgiQGltcG9ydCB1cmwod2hpdGUgc3BhY2UuY3NzKTtMSSB7IGJhY2tncm91bmQtaW1hZ2U6IHVybCh3aGl0ZSBzcGFjZS5naWYpO2xpc3Qtc3R5bGUtaW1hZ2U6IHVybChzdHlsZSBpbWFnZS5naWYpOyB9Iik7IC8vJE5PTi1OTFMtMSQKLQkJVXJsSW5mb1tdIHVybHMgPSBwaWNrdXBVcmwoZG9jdW1lbnQpOwotCi0JCWFzc2VydEVxdWFscygzLCB1cmxzLmxlbmd0aCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfVVJJLCB1cmxzWzBdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuY3NzIiwgdXJsc1swXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMV0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3aGl0ZSBzcGFjZS5naWYiLCB1cmxzWzFdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX0RFQ0xBUkFUSU9OX1ZBTFVFX1VSSSwgdXJsc1syXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoInN0eWxlIGltYWdlLmdpZiIsIHVybHNbMl0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JLyoqCi0JICogRGVjbGFyYXRpb246IFR3byB1cmxzIGJ1dCBwYXJlbnRoZXNpcyBhcmUgbWlzc2VkLCBzbyBjb25jYXRlbmF0ZWQgdXJsCi0JICogaXMgaWRlbnRpZmllZC4gQnkgYWRkaW5nIHBhcmVudGhlc2lzLCB1cmxzIGFyZSBjb3JyZWN0ZWQuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEZpeEVycm9yMSgpIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkoKENTU1NvdXJjZVBhcnNlcikgZG9jdW1lbnQuZ2V0UGFyc2VyKCkpLnNldFBhcnNlck1vZGUoQ1NTU291cmNlUGFyc2VyLk1PREVfREVDTEFSQVRJT05fVkFMVUUpOwotCQkvLyBfX19fX19fX19fX18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OQotCQlkb2N1bWVudC5zZXQoImJhY2tncm91bmQtaW1hZ2U6IHVybCh3aGl0ZSBzcGFjZS5naWY7IGxpc3Qtc3R5bGUtaW1hZ2U6IHVybHN0eWxlIGltYWdlLmdpZik7Iik7IC8vJE5PTi1OTFMtMSQKLQkJVXJsSW5mb1tdIHVybHMgPSBwaWNrdXBVcmwoZG9jdW1lbnQpOwotCQlhc3NlcnRFcXVhbHMoMSwgdXJscy5sZW5ndGgpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX0RFQ0xBUkFUSU9OX1ZBTFVFX1VSSSwgdXJsc1swXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoIndoaXRlIHNwYWNlLmdpZjsgbGlzdC1zdHlsZS1pbWFnZTogdXJsc3R5bGUgaW1hZ2UuZ2lmIiwgdXJsc1swXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQotCQkvLyBjb3JyZWN0IGZpcnN0IHVybAotCQlkb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAzNywgMCwgIikiKTsgLy8kTk9OLU5MUy0xJAotCQl1cmxzID0gcGlja3VwVXJsKGRvY3VtZW50KTsKLQkJYXNzZXJ0RXF1YWxzKDEsIHVybHMubGVuZ3RoKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMF0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3aGl0ZSBzcGFjZS5naWYiLCB1cmxzWzBdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCi0JCS8vIGNvcnJlY3Qgc2Vjb25kIHVybAotCQlkb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA2MSwgMCwgIigiKTsgLy8kTk9OLU5MUy0xJAotCQl1cmxzID0gcGlja3VwVXJsKGRvY3VtZW50KTsKLQkJYXNzZXJ0RXF1YWxzKDIsIHVybHMubGVuZ3RoKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMF0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3aGl0ZSBzcGFjZS5naWYiLCB1cmxzWzBdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX0RFQ0xBUkFUSU9OX1ZBTFVFX1VSSSwgdXJsc1sxXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoInN0eWxlIGltYWdlLmdpZiIsIHVybHNbMV0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JLyoqCi0JICogSW1wb3J0IHJ1bGUgYW5kIHN0eWxlIHJ1bGU6IFR3byB1cmxzIGJ1dCBwYXJlbnRoZXNpcyBhcmUgbWlzc2VkLCBzbwotCSAqIGNvbmNhdGVuYXRlZCB1cmwgaXMgaWRlbnRpZmllZC4gQnkgYWRkaW5nIHBhcmVudGhlc2lzLCB1cmxzIGFyZQotCSAqIGNvcnJlY3RlZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Rml4RXJyb3IyKCkgewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBGaWxlVXRpbC5jcmVhdGVNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCS8vIF9fX19fX19fX19fXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5Ci0JCWRvY3VtZW50LnNldCgiQGltcG9ydCB1cmwod2hpdGUgc3BhY2UuY3NzO0xJIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsd2hpdGUgc3BhY2UuZ2lmKTsgfSIpOyAvLyROT04tTkxTLTEkCQkKLQkJVXJsSW5mb1tdIHVybHMgPSBwaWNrdXBVcmwoZG9jdW1lbnQpOwotCQlhc3NlcnRFcXVhbHMoMSwgdXJscy5sZW5ndGgpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX1VSSSwgdXJsc1swXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoIndoaXRlIHNwYWNlLmNzcztMSSB7IGJhY2tncm91bmQtaW1hZ2U6IHVybHdoaXRlIHNwYWNlLmdpZiIsIHVybHNbMF0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0KLQkJLy8gY29ycmVjdCBmaXJzdCB1cmwKLQkJZG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMjcsIDAsICIpIik7IC8vJE5PTi1OTFMtMSQKLQkJdXJscyA9IHBpY2t1cFVybChkb2N1bWVudCk7Ci0JCWFzc2VydEVxdWFscygxLCB1cmxzLmxlbmd0aCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfVVJJLCB1cmxzWzBdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuY3NzIiwgdXJsc1swXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQotCQkvLyBjb3JyZWN0IHNlY29uZCB1cmwKLQkJZG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgNTUsIDAsICIoIik7IC8vJE5PTi1OTFMtMSQKLQkJdXJscyA9IHBpY2t1cFVybChkb2N1bWVudCk7Ci0JCWFzc2VydEVxdWFscygyLCB1cmxzLmxlbmd0aCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfVVJJLCB1cmxzWzBdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuY3NzIiwgdXJsc1swXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMV0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3aGl0ZSBzcGFjZS5naWYiLCB1cmxzWzFdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCS8qKgotCSAqIEltcG9ydCBydWxlOiBVcmwgaGFzIG9ubHkgb25lIHF1b3RlLCBzbyBpdCBpcyBub3QgaWRlbnRpZmllZCBhcyB1cmwuIEJ5Ci0JICogcmVtb3ZpbmcgcXVvdGUsIHVybCBpcyBjb3JyZWN0ZWQuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEZpeEVycm9yMygpIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkvLyBfX19fX19fX19fX18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwCi0JCWRvY3VtZW50LnNldCgiQGltcG9ydCB1cmwod2hpdGUgc3BhY2UuY3NzXCIpOyIpOyAvLyROT04tTkxTLTEkCQkKLQkJVXJsSW5mb1tdIHVybHMgPSBwaWNrdXBVcmwoZG9jdW1lbnQpOwotCQlhc3NlcnRFcXVhbHMoMCwgdXJscy5sZW5ndGgpOwotCi0JCS8vIGNvcnJlY3QgdXJsCi0JCWRvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDI3LCAxLCAiIik7IC8vJE5PTi1OTFMtMSQKLQkJdXJscyA9IHBpY2t1cFVybChkb2N1bWVudCk7Ci0JCWFzc2VydEVxdWFscygxLCB1cmxzLmxlbmd0aCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfVVJJLCB1cmxzWzBdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuY3NzIiwgdXJsc1swXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQotCXByaXZhdGUgVXJsSW5mb1tdIHBpY2t1cFVybChJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50KSB7Ci0JCUxpc3QgdXJscyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbiA9IGRvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCXdoaWxlIChkb2N1bWVudFJlZ2lvbiAhPSBudWxsKSB7Ci0JCQlJVGV4dFJlZ2lvbkxpc3QgcmVnaW9uTGlzdCA9IGRvY3VtZW50UmVnaW9uLmdldFJlZ2lvbnMoKTsKLQkJCUl0ZXJhdG9yIGkgPSByZWdpb25MaXN0Lml0ZXJhdG9yKCk7Ci0JCQl3aGlsZSAoaS5oYXNOZXh0KCkpIHsKLQkJCQlJVGV4dFJlZ2lvbiB0ZXh0UmVnaW9uID0gKElUZXh0UmVnaW9uKSBpLm5leHQoKTsKLQkJCQlTdHJpbmcgdHlwZSA9IHRleHRSZWdpb24uZ2V0VHlwZSgpOwotCQkJCWlmICh0eXBlLmVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfVVJJKSB8fCB0eXBlLmVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfREVDTEFSQVRJT05fVkFMVUVfVVJJKSkgewotCQkJCQl1cmxzLmFkZChuZXcgVXJsSW5mbyh0eXBlLCBkb2N1bWVudFJlZ2lvbi5nZXRGdWxsVGV4dCh0ZXh0UmVnaW9uKSkpOwotCQkJCX0KLQkJCX0KLQkJCWRvY3VtZW50UmVnaW9uID0gZG9jdW1lbnRSZWdpb24uZ2V0TmV4dCgpOwotCQl9Ci0JCXJldHVybiAoVXJsSW5mb1tdKSB1cmxzLnRvQXJyYXkobmV3IFVybEluZm9bdXJscy5zaXplKCldKTsKLQl9Ci0KLQlwcml2YXRlIGNsYXNzIFVybEluZm8gewotCQlVcmxJbmZvKFN0cmluZyB0eXBlLCBTdHJpbmcgdXJsKSB7Ci0JCQlmVHlwZSA9IHR5cGU7Ci0JCQlmVXJsID0gQ1NTVXRpbC5leHRyYWN0VXJpQ29udGVudHModXJsKTsKLQkJfQotCi0JCVN0cmluZyBnZXRUeXBlKCkgewotCQkJcmV0dXJuIGZUeXBlOwotCQl9Ci0KLQkJU3RyaW5nIGdldFVybCgpIHsKLQkJCXJldHVybiBmVXJsOwotCQl9Ci0KLQkJcHJpdmF0ZSBTdHJpbmcgZlR5cGU7Ci0JCXByaXZhdGUgU3RyaW5nIGZVcmw7Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL0JVRzczOTkwX3NlbGVjdG9yX3VuZm9ybWF0dGVkLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9CVUc3Mzk5MF9zZWxlY3Rvcl91bmZvcm1hdHRlZC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNTJjOTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL0JVRzczOTkwX3NlbGVjdG9yX3VuZm9ybWF0dGVkLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qIENsYXNzIGFzIHNlbGVjdG9yICovDQotSDEucGFzdG9yYWwgeyBjb2xvcjogIzAwRkYwMCB9DQotDQotLyogSUQgYXMgc2VsZWN0b3IgKi8NCi0jejk4eSB7IGxldHRlci1zcGFjaW5nOiAwLjNlbSB9DQotSDEjejk4eSB7IGxldHRlci1zcGFjaW5nOiAwLjVlbSB9DQotDQotLyogQ29udGV4dHVhbCBzZWxlY3RvcnMgKi8NCi1ESVYgUCAgICAgICAgICAgeyBmb250OiBzbWFsbCBzYW5zLXNlcmlmIH0NCi0ucmVkZGlzaCBIMSAgICAgeyBjb2xvcjogcmVkIH0NCi0jeDc4eSBDT0RFICAgICAgeyBiYWNrZ3JvdW5kOiBibHVlIH0NCi1ESVYuc2lkZW5vdGUgSDEgeyBmb250LXNpemU6IGxhcmdlIH0NCi0NCi0vKiBBbmNob3IgcHNldWRvLWNsYXNzZXMgKi8NCi1BOmxpbmsgeyBjb2xvcjogcmVkIH0gICAgICAgLyogdW52aXNpdGVkIGxpbmsgKi8NCi1BOnZpc2l0ZWQgeyBjb2xvcjogYmx1ZSB9ICAgLyogdmlzaXRlZCBsaW5rcyAqLw0KLUE6YWN0aXZlIHsgY29sb3I6IGxpbWUgfSAgICAvKiBhY3RpdmUgbGlua3MgKi8NCi0NCi0vKiBQc2V1ZG8tY2xhc3MgY29tYmluZWQgd2l0aCBub3JtYWwgY2xhc3MgKi8gDQotQS5leHRlcm5hbDp2aXNpdGVkIHsgY29sb3I6IGJsdWUgfQ0KLQ0KLS8qICdmaXJzdC1saW5lJyBwc2V1ZG8tZWxlbWVudCAqLw0KLVA6Zmlyc3QtbGluZSB7IGZvbnQtdmFyaWFudDogc21hbGwtY2FwcyB9DQotDQotLyogJ2ZpcnN0LWxldHRlcicgcHNldWRvLWVsZW1lbnQgKi8NCi1QOmZpcnN0LWxldHRlciB7IGZvbnQtc2l6ZTogMjAwJTsgZmxvYXQ6IGxlZnQgfQ0KLQ0KLS8qIFBzZXVkby1lbGVtZW50cyBpbiBzZWxlY3RvcnMgKi8NCi1CT0RZIFA6Zmlyc3QtbGV0dGVyIHsgY29sb3I6IHB1cnBsZSB9DQotUC5pbml0aWFsOmZpcnN0LWxldHRlciB7IGNvbG9yOiByZWQgfQ0KLQ0KLS8qIE11bHRpcGxlIHBzZXVkby1lbGVtZW50cyAqLw0KLVAgeyBjb2xvcjogcmVkOyBmb250LXNpemU6IDEycHQgfQ0KLVA6Zmlyc3QtbGV0dGVyIHsgY29sb3I6IGdyZWVuOyBmb250LXNpemU6IDIwMCUgfQ0KLVA6Zmlyc3QtbGluZSB7IGNvbG9yOiBibHVlIH0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvQ1NTRm9udEZhY2VSdWxlVGVzdC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvQ1NTRm9udEZhY2VSdWxlVGVzdC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5YmQwNzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL0NTU0ZvbnRGYWNlUnVsZVRlc3QuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotQGZvbnQtZmFjZSB7DQotCWZvbnQtZmFtaWx5OiAiU3dpc3MgNzIxIjsNCi0Jc3JjOiB1cmwoInN3aXNzNzIxYmxrLnBmciIpOyAvKiBTd2lzcyA3MjEgYmxhY2sgKi8NCi0JZm9udC1zdHlsZTogbm9ybWFsLCBpdGFsaWM7DQotCWZvbnQtd2VpZ2h0OiA4MDAsOTAwOyAvKiBub3RlIHRoZSBpbnRlcmVzdGluZyBwcm9ibGVtIHRoYXQNCi0JdGhlIDkwMCB3ZWlnaHQgaXRhbGljIGRvZXNugWZ0IGV4aXN0ICovDQotfQ0KLQ0KLUBmb250LWZhY2Ugew0KLQlzcmM6IGxvY2FsKCJQYWxhdGlubyIpLA0KLQkJbG9jYWwoIlRpbWVzIE5ldyBSb21hbiIpLA0KLQkJbG9jYWwoIk5ldyBZb3JrIiksDQotCQlsb2NhbCgiVXRvcGlhIiksDQotCQl1cmwoImh0dHA6Ly9zb21ld2hlcmUvZnJlZS9mb250Iik7DQotCWZvbnQtZmFtaWx5OiBzZXJpZjsNCi0JZm9udC13ZWlnaHQ6IDEwMCwgMjAwLCAzMDAsIDQwMCwgNTAwOw0KLQlmb250LXN0eWxlOiBub3JtYWw7DQotCWZvbnQtdmFyaWFudDogbm9ybWFsOw0KLQlmb250LXNpemU6IGFsbA0KLX0NCi0NCi1AZm9udC1mYWNlIHsNCi0Jc3JjOiBsb2NhbCgiQWxhYmFtYSBJdGFsaWMiKSwNCi0JdXJsKGh0dHA6Ly93d3cuZm9udHMub3JnL0EvYWxhYmFtYS1pdGFsaWMpIGZvcm1hdCgidHJ1ZXR5cGUiKTsNCi0JcGFub3NlLTE6IDIgNCA1IDIgNSA0IDUgOSAzIDM7DQotCWZvbnQtZmFtaWx5OiBBbGFiYW1hLCBzZXJpZjsNCi0JZm9udC13ZWlnaHQ6IDMwMCwgNDAwLCA1MDA7DQotCWZvbnQtc3R5bGU6IGl0YWxpYywgb2JsaXF1ZTsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL0NTU1BhZ2VSdWxlVGVzdC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvQ1NTUGFnZVJ1bGVUZXN0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk3N2YyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvQ1NTUGFnZVJ1bGVUZXN0LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLUBwYWdlIHtzaXplOiA4LjVpbiAxMWluO21hcmdpbjogMmNtfQ0KLQ0KLUBwYWdlIHsNCi0Jc2l6ZTogYXV0bzsgLyogYXV0byBpcyB0aGUgaW5pdGlhbCB2YWx1ZSAqLw0KLQltYXJnaW46IDEwJTsNCi19DQotDQotQHBhZ2UgOmxlZnQgew0KLQltYXJnaW4tbGVmdDogNGNtOw0KLQltYXJnaW4tcmlnaHQ6IDNjbTsNCi19DQotQHBhZ2UgOnJpZ2h0IHsNCi0JbWFyZ2luLWxlZnQ6IDNjbTsNCi0JbWFyZ2luLXJpZ2h0OiA0Y207DQotfQ0KLQ0KLUBwYWdlIG5hcnJvdyB7c2l6ZTogOWNtIDE4Y219QHBhZ2Ugcm90YXRlZCB7c2l6ZTogbGFuZHNjYXBlfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9DU1NTdHlsZVJ1bGVUZXN0LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9DU1NTdHlsZVJ1bGVUZXN0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU0YTg5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvQ1NTU3R5bGVSdWxlVGVzdC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKiBwcmltaXRpdmUgdmFsdWVzICovDQotTlVNQkVSUyB7DQotCU5VTUJFUjogMTIzLjQ1NjsNCi0JUEVSQ0VOVEFHRTogMTIzLjQ1NiU7DQotCUVNUzogMTIzLjQ1NmVtOw0KLQlFWFM6IDEyMy40NTZleDsNCi0JUFg6IDEyMy40NTZweDsNCi0JQ006IDEyMy40NTZjbTsNCi0JTU06IDEyMy40NTZtbTsNCi0JSU46IDEyMy40NTZpbjsNCi0JUFQ6IDEyMy40NTZwdDsNCi0JUEM6IDEyMy40NTZwYzsNCi0JREVHOiAtMTIzLjQ1NmRlZzsNCi0JUkFEOiAxMjMuNDU2cmFkOw0KLQlHUkFEOiAxMjMuNDU2Z3JhZDsNCi0JTVM6IDEyMy40NTZtczsNCi0JUzogMTIzLjQ1NnM7DQotCUhaOiAxMjMuNDU2SHo7DQotCUtIWjogMTIzLjQ1NmtIejsNCi0JRElNRU5TSU9OOiAtMTIzLjQ1Nnp6ejsNCi0JSU5URUdFUjogMTIzOw0KLX0NCi0NCi1TVFJJTkdTIHsNCi0JU1RSSU5HOiAic3RyaW5nIjsNCi0JVVJJOiBVUkwoImh0dHA6Ly93d3cuaWJtLmNvbS8iKTsNCi0JSURFTlQ6IGxlZnQ7DQotCUhBU0g6ICNhYmNkZWY7DQotCVVSQU5HRTogVSsyMEE3Ow0KLQlTTEFTSDogLzsNCi0JQ09NTUE6ICw7DQotCUlOSEVSSVRfUFJJTUlUSVZFOiBpbmhlcml0Ow0KLQlBVFRSOiBhdHRyKEtFWSk7DQotCUZPUk1BVDogZm9ybWF0KCJ0cnVlZG9jIik7DQotCUxPQ0FMOiBsb2NhbCgiRXhjZWxzaW9yIFJvbWFuIik7DQotfQ0KLQ0KLUZVTkNUSU9OUyB7DQotCUNPVU5URVI6IGNvdW50ZXIocGFyLW51bSwgdXBwZXItcm9tYW4pOw0KLQlSRUNUOiByZWN0KDEyLCAzNCwgNTYsIDc4KTsNCi0JUkdCQ09MT1I6IHJnYigyNTUsIDEyOCwgMCk7DQotfQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0JVRzczOTkwX3NlbGVjdG9yX2Zvcm1hdHRlZC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9CVUc3Mzk5MF9zZWxlY3Rvcl9mb3JtYXR0ZWQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGE2ZmY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0JVRzczOTkwX3NlbGVjdG9yX2Zvcm1hdHRlZC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKiBDbGFzcyBhcyBzZWxlY3RvciAqLw0KLUgxLnBhc3RvcmFsIHsNCi0JY29sb3I6ICMwMEZGMDANCi19DQotDQotLyogSUQgYXMgc2VsZWN0b3IgKi8NCi0jejk4eSB7DQotCWxldHRlci1zcGFjaW5nOiAwLjNlbQ0KLX0NCi0NCi1IMSN6OTh5IHsNCi0JbGV0dGVyLXNwYWNpbmc6IDAuNWVtDQotfQ0KLQ0KLS8qIENvbnRleHR1YWwgc2VsZWN0b3JzICovDQotRElWIFAgew0KLQlmb250OiBzbWFsbCBzYW5zLXNlcmlmDQotfQ0KLQ0KLS5yZWRkaXNoIEgxIHsNCi0JY29sb3I6IHJlZA0KLX0NCi0NCi0jeDc4eSBDT0RFIHsNCi0JYmFja2dyb3VuZDogYmx1ZQ0KLX0NCi0NCi1ESVYuc2lkZW5vdGUgSDEgew0KLQlmb250LXNpemU6IGxhcmdlDQotfQ0KLQ0KLS8qIEFuY2hvciBwc2V1ZG8tY2xhc3NlcyAqLw0KLUE6bGluayB7DQotCWNvbG9yOiByZWQNCi19ICAvKiB1bnZpc2l0ZWQgbGluayAqLw0KLUE6dmlzaXRlZCB7DQotCWNvbG9yOiBibHVlDQotfSAgLyogdmlzaXRlZCBsaW5rcyAqLw0KLUE6YWN0aXZlIHsNCi0JY29sb3I6IGxpbWUNCi19ICAvKiBhY3RpdmUgbGlua3MgKi8gLyogUHNldWRvLWNsYXNzIGNvbWJpbmVkIHdpdGggbm9ybWFsIGNsYXNzICovDQotQS5leHRlcm5hbDp2aXNpdGVkIHsNCi0JY29sb3I6IGJsdWUNCi19DQotDQotLyogJ2ZpcnN0LWxpbmUnIHBzZXVkby1lbGVtZW50ICovDQotUDpmaXJzdC1saW5lIHsNCi0JZm9udC12YXJpYW50OiBzbWFsbC1jYXBzDQotfQ0KLQ0KLS8qICdmaXJzdC1sZXR0ZXInIHBzZXVkby1lbGVtZW50ICovDQotUDpmaXJzdC1sZXR0ZXIgew0KLQlmb250LXNpemU6IDIwMCU7DQotCWZsb2F0OiBsZWZ0DQotfQ0KLQ0KLS8qIFBzZXVkby1lbGVtZW50cyBpbiBzZWxlY3RvcnMgKi8NCi1CT0RZIFA6Zmlyc3QtbGV0dGVyIHsNCi0JY29sb3I6IHB1cnBsZQ0KLX0NCi0NCi1QLmluaXRpYWw6Zmlyc3QtbGV0dGVyIHsNCi0JY29sb3I6IHJlZA0KLX0NCi0NCi0vKiBNdWx0aXBsZSBwc2V1ZG8tZWxlbWVudHMgKi8NCi1QIHsNCi0JY29sb3I6IHJlZDsNCi0JZm9udC1zaXplOiAxMnB0DQotfQ0KLQ0KLVA6Zmlyc3QtbGV0dGVyIHsNCi0JY29sb3I6IGdyZWVuOw0KLQlmb250LXNpemU6IDIwMCUNCi19DQotDQotUDpmaXJzdC1saW5lIHsNCi0JY29sb3I6IGJsdWUNCi19DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMS5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAxLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFhYzJmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAxLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLVswLCAzXSAoSDEgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLzMsIA0KLVszLCA5XSAoew0KLQ0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNiwgDQotWzksIDIxXSAoY29sb3I6IHdoaXRlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMiwgDQotWzIxLCAyNF0gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMjQsIDI1XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzI1LCAzMF0gKA0KLQ0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC01LCANCi1bMzAsIDU0XSAoYmFja2dyb3VuZC1jb2xvciA6IGJsYWNrKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTE2LzE3LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTctMTgvMTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDE5LTI0LCANCi1bNTQsIDU5XSAoDQotCQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTUsIA0KLVs1OSwgNjBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bNjAsIDYyXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotDQotLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDIuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4NjdjOTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMi5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi1bMCwgMjNdIChAaW1wb3J0IHVybCgiaG9nZS5jc3MiKSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IFVSSTogOC0yMywgDQotWzIzLCAyNF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVMSU1JVEVSOiAwLTEsIA0KLVsyNCwgMjZdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMjYsIDYxXSAoQGltcG9ydCAvKiBjb21tZW50ICovIHVybChob2dlLmNzcykpDQotICAgIENvbnRleHRSZWdpb24tLT4gSU1QT1JUOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBDT01NRU5UOiA4LTIxLzIyLCBDb250ZXh0UmVnaW9uLS0+IFVSSTogMjItMzUsIA0KLVs2MSwgNjJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bNjIsIDY0XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzY0LCA5Nl0gKEBpbXBvcnQgImhvZ2UuY3NzIiAvKiBjb21tZW50ICovKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IElNUE9SVDogMC03LzgsIENvbnRleHRSZWdpb24tLT4gU1RSSU5HOiA4LTE4LzE5LCBDb250ZXh0UmVnaW9uLS0+IENPTU1FTlQ6IDE5LTMyLCANCi1bOTYsIDk3XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzk3LCA5OV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs5OSwgMTU1XSAoQElNUE9SVCAnaG9nZS5jc3MnICxtZWRpYTEsbWVkaWEyLCxtZWRpYTMgbWVkaWE0LG1lZGlhNSApDQotICAgIENvbnRleHRSZWdpb24tLT4gSU1QT1JUOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBTVFJJTkc6IDgtMTgvMTksIENvbnRleHRSZWdpb24tLT4gVU5LTk9XTjogMTktMjAsIENvbnRleHRSZWdpb24tLT4gTUVESVVNOiAyMC0yNiwgQ29udGV4dFJlZ2lvbi0tPiBNRURJQV9TRVBBUkFUT1I6IDI2LTI3LCBDb250ZXh0UmVnaW9uLS0+IE1FRElVTTogMjctMzMsIENvbnRleHRSZWdpb24tLT4gTUVESUFfU0VQQVJBVE9SOiAzMy0zNCwgQ29udGV4dFJlZ2lvbi0tPiBVTktOT1dOOiAzNC0zNSwgQ29udGV4dFJlZ2lvbi0tPiBNRURJVU06IDM1LTQxLzQyLCBDb250ZXh0UmVnaW9uLS0+IFVOS05PV046IDQyLTQ4LCBDb250ZXh0UmVnaW9uLS0+IE1FRElBX1NFUEFSQVRPUjogNDgtNDksIENvbnRleHRSZWdpb24tLT4gTUVESVVNOiA0OS01NS81NiwgDQotWzE1NSwgMTY5XSAoQGltcG9ydCBtZWRpYTYpDQotICAgIENvbnRleHRSZWdpb24tLT4gSU1QT1JUOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBVTktOT1dOOiA4LTE0LCANCi1bMTY5LCAxNzBdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bMTcwLCAyMjFdICgNCi0NCi08IS0tIC8qIGhvZ2Vob2dlICovDQotDQotLS0+DQotDQotLyogY29tbWVudCAyICovDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgQ29udGV4dFJlZ2lvbi0tPiBDRE86IDQtOC85LCBDb250ZXh0UmVnaW9uLS0+IENPTU1FTlQ6IDktMjMvMjcsIENvbnRleHRSZWdpb24tLT4gQ0RDOiAyNy0zMC8zNCwgQ29udGV4dFJlZ2lvbi0tPiBDT01NRU5UOiAzNC00OS81MSwgDQotWzIyMSwgMjI3XSAoa3Vzbw0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtNC82LCANCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAzLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA1NzExNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAzLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi1bMCwgMjldIChAaW1wb3J0IHVybCgiLi4vc2FtcGxlMi5jc3MiKSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IFVSSTogOC0yOSwgDQotWzI5LCAzMF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVMSU1JVEVSOiAwLTEsIA0KLVszMCwgNTddICgNCi0NCi0vKiBTYW1wbGUgU3R5bGVzICovDQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgQ29udGV4dFJlZ2lvbi0tPiBDT01NRU5UOiA0LTIzLzI3LCANCi1bNTcsIDYyXSAoQk9EWSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQvNSwgDQotWzYyLCA2Nl0gKHsNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzQsIA0KLVs2NiwgNzldIChjb2xvciA6IGJsYWNrKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA4LTEzLCANCi1bNzksIDgwXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzgwLCA4M10gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bODMsIDEyMF0gKGJhY2tncm91bmQtY29sb3IgOiByZ2IoMTgxLCAyNTMsIDIxMSkpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTYvMTcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNy0xOC8xOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTjogMTktMjMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAyMy0yNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjYtMjcvMjgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAyOC0zMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzEtMzIvMzMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAzMy0zNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRTogMzYtMzcsIA0KLVsxMjAsIDEyMV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxMjEsIDEyNF0gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMTI0LCAxNDNdICh0ZXh0LWFsaWduIDogY2VudGVyKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEwLzExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTEtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEzLTE5LCANCi1bMTQzLCAxNDRdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTQ0LCAxNDddICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzE0NywgMTg2XSAoZm9udC1mYW1pbHkgOiAiSGVpc2VpIE1pbmNobyBXMyIsIHNlcmlmKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxNC0zMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzItMzMvMzQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDM0LTM5LCANCi1bMTg2LCAxODhdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTg4LCAxODldICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTg5LCAxOTNdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bMTkzLCAyMDVdIChAcGFnZSA6bGVmdCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUEFHRTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gQ1NTX1BBR0VfU0VMRUNUT1I6IDYtMTEvMTIsIA0KLVsyMDUsIDIwN10gKHsgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzIsIA0KLVsyMDcsIDIyNF0gKG1hcmdpbi1sZWZ0IDogNGNtKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxNC0xNywgDQotWzIyNCwgMjI1XSAoICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEsIA0KLVsyMjUsIDIyNl0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsyMjYsIDIzMF0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsyMzAsIDI0M10gKEBtZWRpYSBhdXJhbCApDQotICAgIENvbnRleHRSZWdpb24tLT4gTUVESUE6IDAtNi83LCBDb250ZXh0UmVnaW9uLS0+IE1FRElVTTogNy0xMi8xMywgDQotWzI0MywgMjQ3XSAoew0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNCwgDQotWzI0NywgMjU1XSAoUC5oZWlkaSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDEtNy84LCANCi1bMjU1LCAyNjBdICh7DQotCQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNSwgDQotWzI2MCwgMjgxXSAoYXppbXV0aCA6IGNlbnRlci1sZWZ0KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDgtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTAtMjEsIA0KLVsyODEsIDI4Ml0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsyODIsIDI4Nl0gKA0KLQkJKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzI4NiwgMzA1XSAoZWxldmF0aW9uIDogMTIuM2RlZykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC05LzEwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxMi0xOSwgDQotWzMwNSwgMzA2XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzMwNiwgMzEwXSAoDQotCQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bMzEwLCAzMjddIChwYXVzZSA6IDMwbXMgMS42cykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDgtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxMy0xNywgDQotWzMyNywgMzMwXSAoDQotCSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTMsIA0KLVszMzAsIDMzMV0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVszMzEsIDMzM10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVszMzMsIDMzNF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVszMzQsIDMzNl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA0LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzYxOTYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNTU0ICswLDAgQEAKLVswLCAyMV0gKEBjaGFyc2V0ICJJU08tODg1OS0xIikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBDSEFSU0VUOiAwLTgvOSwgQ29udGV4dFJlZ2lvbi0tPiBTVFJJTkc6IDktMjEsIA0KLVsyMSwgMjJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bMjIsIDI2XSAoDQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzI2LCA0OV0gKEBpbXBvcnQgdXJsKCJob2dlLmNzcyIpKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IElNUE9SVDogMC03LzgsIENvbnRleHRSZWdpb24tLT4gVVJJOiA4LTIzLCANCi1bNDksIDUwXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzUwLCA1Ml0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs1MiwgODddIChAaW1wb3J0IC8qIGNvbW1lbnQgKi8gdXJsKGhvZ2UuY3NzKSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IENPTU1FTlQ6IDgtMjEvMjIsIENvbnRleHRSZWdpb24tLT4gVVJJOiAyMi0zNSwgDQotWzg3LCA4OF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVMSU1JVEVSOiAwLTEsIA0KLVs4OCwgOTBdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bOTAsIDEyMl0gKEBpbXBvcnQgImhvZ2UuY3NzIiAvKiBjb21tZW50ICovKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+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+IExCUkFDRTogMC0xLzMsIA0KLVs0MTUsIDQzMV0gKG1hcmdpbi10b3A6IC01bW0pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTItMTYsIA0KLVs0MzEsIDQzM10gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+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+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAzMS0zMi8zMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMzMtMzgsIA0KLVsxODI2LCAxODI3XSAoICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEsIA0KLVsxODI3LCAxODI4XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE4MjgsIDE4MzBdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNS5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA1LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc2MTk2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA1LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDU1NCArMCwwIEBACi1bMCwgMjFdIChAY2hhcnNldCAiSVNPLTg4NTktMSIpDQotICAgIENvbnRleHRSZWdpb24tLT4gQ0hBUlNFVDogMC04LzksIENvbnRleHRSZWdpb24tLT4gU1RSSU5HOiA5LTIxLCANCi1bMjEsIDIyXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzIyLCAyNl0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsyNiwgNDldIChAaW1wb3J0IHVybCgiaG9nZS5jc3MiKSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IFVSSTogOC0yMywgDQotWzQ5LCA1MF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVMSU1JVEVSOiAwLTEsIA0KLVs1MCwgNTJdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNTIsIDg3XSAoQGltcG9ydCAvKiBjb21tZW50ICovIHVybChob2dlLmNzcykpDQotICAgIENvbnRleHRSZWdpb24tLT4gSU1QT1JUOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBDT01NRU5UOiA4LTIxLzIyLCBDb250ZXh0UmVnaW9uLS0+IFVSSTogMjItMzUsIA0KLVs4NywgODhdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bODgsIDkwXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzkwLCAxMjJdIChAaW1wb3J0ICJob2dlLmNzcyIgLyogY29tbWVudCAqLykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IFNUUklORzogOC0xOC8xOSwgQ29udGV4dFJlZ2lvbi0tPiBDT01NRU5UOiAxOS0zMiwgDQotWzEyMiwgMTIzXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzEyMywgMTI1XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEyNSwgMTY2XSAoQElNUE9SVCAnaG9nZS5jc3MnIG1lZGlhMSxtZWRpYTIgLCBtZWRpYTMpDQotICAgIENvbnRleHRSZWdpb24tLT4gSU1QT1JUOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBTVFJJTkc6IDgtMTgvMTksIENvbnRleHRSZWdpb24tLT4gTUVESVVNOiAxOS0yNSwgQ29udGV4dFJlZ2lvbi0tPiBNRURJQV9TRVBBUkFUT1I6IDI1LTI2LCBDb250ZXh0UmVnaW9uLS0+IE1FRElVTTogMjYtMzIvMzMsIENvbnRleHRSZWdpb24tLT4gTUVESUFfU0VQQVJBVE9SOiAzMy0zNC8zNSwgQ29udGV4dFJlZ2lvbi0tPiBNRURJVU06IDM1LTQxLCANCi1bMTY2LCAxNjddICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bMTY3LCAxNzFdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bMTcxLCAxODRdIChAbWVkaWEgcHJpbnQgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IE1FRElBOiAwLTYvNywgQ29udGV4dFJlZ2lvbi0tPiBNRURJVU06IDctMTIvMTMsIA0KLVsxODQsIDE4OV0gKHsNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNSwgDQotWzE4OSwgMTkwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE5MCwgMTk0XSAoDQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzE5NCwgMjA2XSAoQHBhZ2UgOmxlZnQgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFBBR0U6IDAtNS82LCBDb250ZXh0UmVnaW9uLS0+IENTU19QQUdFX1NFTEVDVE9SOiA2LTExLzEyLCANCi1bMjA2LCAyMTFdICh7DQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzUsIA0KLVsyMTEsIDIxMl0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsyMTIsIDIxNl0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsyMTYsIDIyN10gKGgxLCBoMiwgaDMgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1NFUEFSQVRPUjogMi0zLzQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiA0LTYsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDgtMTAvMTEsIA0KLVsyMjcsIDIzMF0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMjMwLCAyNTNdIChmb250LWZhbWlseTogc2Fucy1zZXJpZikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxMy0yMywgDQotWzI1MywgMjU1XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMjU1LCAyNTZdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMjU2LCAyNThdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMjU4LCAyNjRdIChoMSBlbSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogMi0zLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMy01LzYsIA0KLVsyNjQsIDI2N10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMjY3LCAyNzhdIChjb2xvcjogYmx1ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTEsIA0KLVsyNzgsIDI4MF0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzI4MCwgMjgxXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzI4MSwgMjgzXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzI4MywgMjk3XSAoZGl2IHAgKltocmVmXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTMsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogMy00LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogNC01LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDUtNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9VTklWRVJTQUw6IDYtNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQ6IDctOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRTogOC0xMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiAxMi0xMy8xNCwgDQotWzI5NywgMzAwXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVszMDAsIDMxMV0gKGNvbG9yOiBibHVlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMSwgDQotWzMxMSwgMzEzXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMzEzLCAzMTRdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMzE0LCAzMTZdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMzE2LCAzMjVdIChib2R5ID4gUCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQvNSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDctOC85LCANCi1bMzI1LCAzMjhdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzMyOCwgMzQ0XSAobGluZS1oZWlnaHQ6IDEuMykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogMTMtMTYsIA0KLVszNDQsIDM0Nl0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzM0NiwgMzQ3XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzM0NywgMzQ5XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzM0OSwgMzYxXSAoZGl2IG9sPmxpIHAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0zLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDMtNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDQtNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiA2LTcsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiA3LTksIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogOS0xMCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDEwLTExLzEyLCANCi1bMzYxLCAzNjNdICh7ICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8yLCANCi1bMzYzLCAzNjRdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMzY0LCAzNjZdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMzY2LCAzNzVdIChtYXRoICsgcCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQvNSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDctOC85LCANCi1bMzc1LCAzNzhdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzM3OCwgMzkyXSAodGV4dC1pbmRlbnQ6IDApDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMS0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDEzLTE0LCANCi1bMzkyLCAzOTRdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVszOTQsIDM5NV0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVszOTUsIDM5N10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVszOTcsIDQxMl0gKGgxLm9wZW5lciArIGgyICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMi05LzEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDEwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMTItMTQvMTUsIA0KLVs0MTIsIDQxNV0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bNDE1LCA0MzFdIChtYXJnaW4tdG9wOiAtNW1tKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEyLTE2LCANCi1bNDMxLCA0MzNdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs0MzMsIDQzNF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs0MzQsIDQzNl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs0MzYsIDQ0Nl0gKGgxW3RpdGxlXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiAyLTMsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDMtOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiA4LTkvMTAsIA0KLVs0NDYsIDQ0OV0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bNDQ5LCA0NjBdIChjb2xvcjogYmx1ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+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+IFM6IDAtMiwgDQotDQotLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDYuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0NzdjYjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNi5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi1bMCwgMTJdIChkZWNsYXJhdGlvbiApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTExLzEyLCANCi1bMTIsIDE2XSAoew0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNCwgDQotWzE2LCAzM10gKGRpbWVuc2lvbiA6IDEwMGV4KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDEyLTE3LCANCi1bMzMsIDM0XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzM0LCAzN10gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMzcsIDEzM10gKGZ1bmN0aW9uIDogcmVjdCgxMDAsIDIwMCwgMzAwLCA0MDApLCBmb3JtYXQoImludGVsbGlmb250IiksIGxvY2FsKCJFeGNlbHNpb3IgQ3lyaWxsbGljIFVwcmlnaHQiKSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC04LzksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA5LTEwLzExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0ZVTkNUSU9OOiAxMS0xNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDE2LTE5LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAxOS0yMC8yMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDIxLTI0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAyNC0yNS8yNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDI2LTI5LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAyOS0zMC8zMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDMxLTM0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFOiAzNC0zNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzUtMzYvMzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT046IDM3LTQ0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogNDQtNTcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfUEFSRU5USEVTSVNfQ0xPU0U6IDU3LTU4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiA1OC01OS82MCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTjogNjAtNjYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiA2Ni05NSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRTogOTUtOTYsIA0KLVsxMzMsIDEzNF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxMzQsIDEzN10gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMTM3LCAxNTFdIChoYXNoIDogI2FhYmJjYykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC00LzUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9IQVNIOiA3LTE0LCANCi1bMTUxLCAxNTJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTUyLCAxNTVdICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzE1NSwgMTY2XSAoaWRlbnQgOiBhbnkpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNS82LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNi03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDgtMTEsIA0KLVsxNjYsIDE2N10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxNjcsIDE3MF0gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMTcwLCAxODRdIChudW1iZXIgOiA5OTk5OSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA3LTgvOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDktMTQsIA0KLVsxODQsIDE4NV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxODUsIDE4OF0gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMTg4LCAyMDVdIChwZXJjZW50YWdlIDogMTAwJSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMC8xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1BFUkNFTlRBR0U6IDEzLTE3LCANCi1bMjA1LCAyMDZdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMjA2LCAyMDldICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzIwOSwgMjI2XSAoc3RyaW5nIDogInN0cmluZyIpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNy04LzksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiA5LTE3LCANCi1bMjI2LCAyMjddICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMjI3LCAyMzBdICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzIzMCwgMjY4XSAodW5pY29kZS1yYW5nZSA6IFUrPz8sIFUrMTAwLTIyMCwgVSs0Pz8pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNC0xNS8xNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9VTklDT0RFX1JBTkdFOiAxNi0yMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjAtMjEvMjIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfVU5JQ09ERV9SQU5HRTogMjItMzEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDMxLTMyLzMzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1VOSUNPREVfUkFOR0U6IDMzLTM4LCANCi1bMjY4LCAyNjldICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMjY5LCAyNzFdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMjcxLCAyNzJdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMjcyLCAyNzRdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA3LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTAyYzY2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA3LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDQ1NCArMCwwIEBACi1bMCwgMjFdIChAY2hhcnNldCAiSVNPLTg4NTktMSIpDQotICAgIENvbnRleHRSZWdpb24tLT4gQ0hBUlNFVDogMC04LzksIENvbnRleHRSZWdpb24tLT4gU1RSSU5HOiA5LTIxLCANCi1bMjEsIDIyXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzIyLCAyNl0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsyNiwgNzBdIChAaW1wb3J0IHVybCgiLi4vc2FtcGxlMi5jc3MiKSBwcm9qZWN0aW9uLCB0dikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IFVSSTogOC0yOS8zMCwgQ29udGV4dFJlZ2lvbi0tPiBNRURJVU06IDMwLTQwLCBDb250ZXh0UmVnaW9uLS0+IE1FRElBX1NFUEFSQVRPUjogNDAtNDEvNDIsIENvbnRleHRSZWdpb24tLT4gTUVESVVNOiA0Mi00NCwgDQotWzcwLCA3MV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVMSU1JVEVSOiAwLTEsIA0KLVs3MSwgNzVdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bNzUsIDgwXSAoQk9EWSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQvNSwgDQotWzgwLCA4N10gKHsNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzcsIA0KLVs4NywgMTAwXSAoY29sb3IgOiBibGFjaykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogOC0xMywgDQotWzEwMCwgMTAxXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzEwMSwgMTA3XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVsxMDcsIDEyNl0gKHRleHQtYWxpZ24gOiBjZW50ZXIpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTAvMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMS0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTMtMTksIA0KLVsxMjYsIDEyN10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxMjcsIDEzM10gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bMTMzLCAxNzJdIChiYWNrZ3JvdW5kLWNvbG9yIDogcmdiKCAxODEsIDI1MywgMjExICkpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTYvMTcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNy0xOC8xOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTjogMTktMjMvMjQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAyNC0yNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjctMjgvMjksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAyOS0zMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzItMzMvMzQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAzNC0zNy8zOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRTogMzgtMzksIA0KLVsxNzIsIDE3NF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNzQsIDE3NV0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxNzUsIDE3OV0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsxNzksIDE4Ml0gKFVMICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMi8zLCANCi1bMTgyLCAxODldICh7DQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS83LCANCi1bMTg5LCAyMDJdIChjb2xvciA6IGJsYWNrKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA4LTEzLCANCi1bMjAyLCAyMDNdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMjAzLCAyMDldICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzIwOSwgMjUxXSAobGlzdC1zdHlsZS1pbWFnZSA6IHVybCgiaW1hZ2VzL2xfYTAxLmdpZiIpKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTE2LzE3LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTctMTgvMTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfVVJJOiAxOS00MiwgDQotWzI1MSwgMjUyXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzI1MiwgMjU4XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVsyNTgsIDI4N10gKGxpc3Qtc3R5bGUtcG9zaXRpb24gOiBvdXRzaWRlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTE5LzIwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMjAtMjEvMjIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDIyLTI5LCANCi1bMjg3LCAyODldICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMjg5LCAyOTBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMjkwLCAyOTRdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bMjk0LCAyOTddIChIMSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIvMywgDQotWzI5NywgMzA0XSAoew0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNywgDQotWzMwNCwgMzE3XSAoY29sb3IgOiB3aGl0ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogOC0xMywgDQotWzMxNywgMzE4XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzMxOCwgMzI0XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVszMjQsIDM0M10gKHRleHQtYWxpZ24gOiBjZW50ZXIpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTAvMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMS0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTMtMTksIA0KLVszNDMsIDM0NF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVszNDQsIDM1MF0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bMzUwLCAzNzddIChib3JkZXItbGVmdC1jb2xvciA6ICM5OTY2NjYpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTcvMTgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxOC0xOS8yMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9IQVNIOiAyMC0yNywgDQotWzM3NywgMzc4XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzM3OCwgMzg0XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVszODQsIDQwMV0gKHBhZGRpbmctdG9wIDogMHB4KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxNC0xNywgDQotWzQwMSwgNDAyXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzQwMiwgNDA4XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVs0MDgsIDQyN10gKHBhZGRpbmctcmlnaHQgOiAxY20pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNC0xNS8xNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDE2LTE5LCANCi1bNDI3LCA0MjhdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNDI4LCA0MzRdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzQzNCwgNDUyXSAocGFkZGluZy1ib3R0b20gOiAyKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTE0LzE1LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTUtMTYvMTcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAxNy0xOCwgDQotWzQ1MiwgNDUzXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzQ1MywgNDU5XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVs0NTksIDQ3N10gKHBhZGRpbmctbGVmdCA6IDNlbSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEzLTE0LzE1LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTUtMTgsIA0KLVs0NzcsIDQ3OF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs0NzgsIDQ4NF0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bNDg0LCA1MDRdIChib3JkZXItc3R5bGUgOiBzb2xpZCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEzLTE0LzE1LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxNS0yMCwgDQotWzUwNCwgNTA1XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzUwNSwgNTExXSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVs1MTEsIDUzNV0gKGJvcmRlci10b3Atd2lkdGggOiA0LjVleCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xNi8xNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDE3LTE4LzE5LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTktMjQsIA0KLVs1MzUsIDUzNl0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs1MzYsIDU0Ml0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bNTQyLCA1NjZdIChib3JkZXItcmlnaHQtd2lkdGggOiA1aW4pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTgvMTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxOS0yMC8yMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDIxLTI0LCANCi1bNTY2LCA1NjddICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNTY3LCA1NzNdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzU3MywgNjAxXSAoYm9yZGVyLWJvdHRvbS13aWR0aCA6IDYuMDJtbSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xOS8yMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDIwLTIxLzIyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMjItMjgsIA0KLVs2MDEsIDYwMl0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs2MDIsIDYwOF0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bNjA4LCA2MjldIChib3JkZXItbGVmdC13aWR0aCA6IDcpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTcvMTgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxOC0xOS8yMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDIwLTIxLCANCi1bNjI5LCA2MzFdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNjMxLCA2MzJdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bNjMyLCA2MzZdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bNjM2LCA2NDZdIChIMTpiZWZvcmUgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMi05LzEwLCANCi1bNjQ2LCA2NTNdICh7DQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS83LCANCi1bNjUzLCA2OTddIChjb250ZW50IDogIkNoYXB0ZXIgIiBjb3VudGVyKCBjaGFwdGVyICkgIi4gIikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA4LTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxMC0yMC8yMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTjogMjEtMjkvMzAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDMwLTM3LzM4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFOiAzOC0zOS80MCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDQwLTQ0LCANCi1bNjk3LCA2OThdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNjk4LCA3MDRdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzcwNCwgNzMxXSAoY291bnRlci1pbmNyZW1lbnQgOiBjaGFwdGVyKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTE3LzE4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTgtMTkvMjAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDIwLTI3LCANCi1bNzMxLCA3MzJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNzMyLCA3MzhdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzczOCwgNzYxXSAoY291bnRlci1yZXNldCA6IHNlY3Rpb24pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNC0xNS8xNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTYtMjMsIA0KLVs3NjEsIDc2M10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs3NjMsIDc2NF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs3NjQsIDc2OF0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVs3NjgsIDc3OV0gKElNRzpiZWZvcmUgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0zLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMy0xMC8xMSwgDQotWzc3OSwgNzgwXSAoeykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMSwgDQotWzc4MCwgNzk5XSAoY29udGVudCA6IGF0dHIoYWx0KSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA4LTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT046IDEwLTE1LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxNS0xOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRTogMTgtMTksIA0KLVs3OTksIDgwMF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs4MDAsIDgwNF0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVs4MDQsIDgxNV0gKERJVi5zYW1wbGUgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0zLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAzLTEwLzExLCANCi1bODE1LCA4MjJdICh7DQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS83LCANCi1bODIyLCA4NjNdIChmb250LWZhbWlseSA6ICJSb2Jzb24gQ2VsdGljIiwgc2Fucy1zZXJpZikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEyLTEzLzE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMTQtMjksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDI5LTMwLzMxLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAzMS00MSwgDQotWzg2MywgODY0XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzg2NCwgODcwXSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVs4NzAsIDg4OV0gKHBvc2l0aW9uIDogYWJzb2x1dGUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtOC85LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogOS0xMC8xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTEtMTksIA0KLVs4ODksIDg5MF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs4OTAsIDg5Nl0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bODk2LCA5MTBdIChsZWZ0IDogODMzLjVwYykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC00LzUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDctMTQsIA0KLVs5MTAsIDkxMV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs5MTEsIDkxN10gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bOTE3LCA5MjZdICh0b3AgOiA5MCUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMy80LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfUEVSQ0VOVEFHRTogNi05LCANCi1bOTI2LCA5MjddICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bOTI3LCA5MzNdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzkzMywgOTQ2XSAod2lkdGggOiAxMDBwdCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDgtMTMsIA0KLVs5NDYsIDk0N10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs5NDcsIDk1M10gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bOTUzLCA5NzFdIChoZWlnaHQgOiAxMTAuNzc3cHgpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNy04LzksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiA5LTE4LCANCi1bOTcxLCA5NzJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bOTcyLCA5NzhdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzk3OCwgMTAxNV0gKGNsaXAgOiByZWN0KCAtNXB4LCA4MHB4LCAxMzBweCwgMHB4ICkpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNC81LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT046IDctMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEzLTE3LCBDb250ZXh0UmVnaW9uLS0+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+IFJCUkFDRTogMC0xLCANCi1bMTc3NywgMTc4MV0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwMS5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwMS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwM2E0MzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDEuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotW0gxXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAwLCAyDQotWyBdIFMgLSAyLCAxDQotW3tdIExCUkFDRSAtIDMsIDENCi1bDQotDQotCV0gUyAtIDQsIDUNCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gOSwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNCwgMQ0KLVsgXSBTIC0gMTUsIDENCi1bd2hpdGVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTYsIDUNCi1bDQotCV0gUyAtIDIxLCAzDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDI0LCAxDQotWw0KLQ0KLQldIFMgLSAyNSwgNQ0KLVtiYWNrZ3JvdW5kLWNvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDMwLCAxNg0KLVsgXSBTIC0gNDYsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNDcsIDENCi1bIF0gUyAtIDQ4LCAxDQotW2JsYWNrXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDQ5LCA1DQotWw0KLQkNCi1dIFMgLSA1NCwgNQ0KLVt9XSBSQlJBQ0UgLSA1OSwgMQ0KLVsNCi1dIFMgLSA2MCwgMg0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwMi5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwMi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0ZjYwNDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDIuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotW0BpbXBvcnRdIElNUE9SVCAtIDAsIDcNCi1bIF0gUyAtIDcsIDENCi1bdXJsKCJob2dlLmNzcyIpXSBVUkkgLSA4LCAxNQ0KLVs7XSBERUxJTUlURVIgLSAyMywgMQ0KLVsNCi1dIFMgLSAyNCwgMg0KLVtAaW1wb3J0XSBJTVBPUlQgLSAyNiwgNw0KLVsgXSBTIC0gMzMsIDENCi1bLyogY29tbWVudCAqL10gQ09NTUVOVCAtIDM0LCAxMw0KLVsgXSBTIC0gNDcsIDENCi1bdXJsKGhvZ2UuY3NzKV0gVVJJIC0gNDgsIDEzDQotWztdIERFTElNSVRFUiAtIDYxLCAxDQotWw0KLV0gUyAtIDYyLCAyDQotW0BpbXBvcnRdIElNUE9SVCAtIDY0LCA3DQotWyBdIFMgLSA3MSwgMQ0KLVsiaG9nZS5jc3MiXSBTVFJJTkcgLSA3MiwgMTANCi1bIF0gUyAtIDgyLCAxDQotWy8qIGNvbW1lbnQgKi9dIENPTU1FTlQgLSA4MywgMTMNCi1bO10gREVMSU1JVEVSIC0gOTYsIDENCi1bDQotXSBTIC0gOTcsIDINCi1bQElNUE9SVF0gSU1QT1JUIC0gOTksIDcNCi1bIF0gUyAtIDEwNiwgMQ0KLVsnaG9nZS5jc3MnXSBTVFJJTkcgLSAxMDcsIDEwDQotWyBdIFMgLSAxMTcsIDENCi1bLF0gdW5kZWZpbmVkIC0gMTE4LCAxDQotW21lZGlhMV0gTUVESVVNIC0gMTE5LCA2DQotWyxdIE1FRElBX1NFUEFSQVRPUiAtIDEyNSwgMQ0KLVttZWRpYTJdIE1FRElVTSAtIDEyNiwgNg0KLVssXSBNRURJQV9TRVBBUkFUT1IgLSAxMzIsIDENCi1bLF0gdW5kZWZpbmVkIC0gMTMzLCAxDQotW21lZGlhM10gTUVESVVNIC0gMTM0LCA2DQotWyBdIFMgLSAxNDAsIDENCi1bbV0gdW5kZWZpbmVkIC0gMTQxLCAxDQotW2VdIHVuZGVmaW5lZCAtIDE0MiwgMQ0KLVtkXSB1bmRlZmluZWQgLSAxNDMsIDENCi1baV0gdW5kZWZpbmVkIC0gMTQ0LCAxDQotW2FdIHVuZGVmaW5lZCAtIDE0NSwgMQ0KLVs0XSB1bmRlZmluZWQgLSAxNDYsIDENCi1bLF0gTUVESUFfU0VQQVJBVE9SIC0gMTQ3LCAxDQotW21lZGlhNV0gTUVESVVNIC0gMTQ4LCA2DQotWyBdIFMgLSAxNTQsIDENCi1bQGltcG9ydF0gSU1QT1JUIC0gMTU1LCA3DQotWyBdIFMgLSAxNjIsIDENCi1bbV0gdW5kZWZpbmVkIC0gMTYzLCAxDQotW2VdIHVuZGVmaW5lZCAtIDE2NCwgMQ0KLVtkXSB1bmRlZmluZWQgLSAxNjUsIDENCi1baV0gdW5kZWZpbmVkIC0gMTY2LCAxDQotW2FdIHVuZGVmaW5lZCAtIDE2NywgMQ0KLVs2XSB1bmRlZmluZWQgLSAxNjgsIDENCi1bO10gREVMSU1JVEVSIC0gMTY5LCAxDQotWw0KLQ0KLV0gUyAtIDE3MCwgNA0KLVs8IS0tXSBDRE8gLSAxNzQsIDQNCi1bIF0gUyAtIDE3OCwgMQ0KLVsvKiBob2dlaG9nZSAqL10gQ09NTUVOVCAtIDE3OSwgMTQNCi1bDQotDQotXSBTIC0gMTkzLCA0DQotWy0tPl0gQ0RDIC0gMTk3LCAzDQotWw0KLQ0KLV0gUyAtIDIwMCwgNA0KLVsvKiBjb21tZW50IDIgKi9dIENPTU1FTlQgLSAyMDQsIDE1DQotWw0KLV0gUyAtIDIxOSwgMg0KLVtrdXNvXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyMjEsIDQNCi1bDQotXSBTIC0gMjI1LCAyDQotDQotLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTAzLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTAzLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2EzZTExYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwMy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotW0BpbXBvcnRdIElNUE9SVCAtIDAsIDcNCi1bIF0gUyAtIDcsIDENCi1bdXJsKCIuLi9zYW1wbGUyLmNzcyIpXSBVUkkgLSA4LCAyMQ0KLVs7XSBERUxJTUlURVIgLSAyOSwgMQ0KLVsNCi0NCi1dIFMgLSAzMCwgNA0KLVsvKiBTYW1wbGUgU3R5bGVzICovXSBDT01NRU5UIC0gMzQsIDE5DQotWw0KLQ0KLV0gUyAtIDUzLCA0DQotW0JPRFldIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDU3LCA0DQotWyBdIFMgLSA2MSwgMQ0KLVt7XSBMQlJBQ0UgLSA2MiwgMQ0KLVsNCi0JXSBTIC0gNjMsIDMNCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNjYsIDUNCi1bIF0gUyAtIDcxLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDcyLCAxDQotWyBdIFMgLSA3MywgMQ0KLVtibGFja10gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA3NCwgNQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA3OSwgMQ0KLVsNCi0JXSBTIC0gODAsIDMNCi1bYmFja2dyb3VuZC1jb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA4MywgMTYNCi1bIF0gUyAtIDk5LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEwMCwgMQ0KLVsgXSBTIC0gMTAxLCAxDQotW3JnYihdIERFQ0xBUkFUSU9OX1ZBTFVFX0ZVTkNUSU9OIC0gMTAyLCA0DQotWzE4MV0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTA2LCAzDQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTA5LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMTAsIDENCi1bMjUzXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxMTEsIDMNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxMTQsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDExNSwgMQ0KLVsyMTFdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDExNiwgMw0KLVspXSBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRSAtIDExOSwgMQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxMjAsIDENCi1bDQotCV0gUyAtIDEyMSwgMw0KLVt0ZXh0LWFsaWduXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEyNCwgMTANCi1bIF0gUyAtIDEzNCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMzUsIDENCi1bIF0gUyAtIDEzNiwgMQ0KLVtjZW50ZXJdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTM3LCA2DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDE0MywgMQ0KLVsNCi0JXSBTIC0gMTQ0LCAzDQotW2ZvbnQtZmFtaWx5XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE0NywgMTENCi1bIF0gUyAtIDE1OCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNTksIDENCi1bIF0gUyAtIDE2MCwgMQ0KLVsiSGVpc2VpIE1pbmNobyBXMyJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE2MSwgMTgNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxNzksIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE4MCwgMQ0KLVtzZXJpZl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxODEsIDUNCi1bDQotXSBTIC0gMTg2LCAyDQotW31dIFJCUkFDRSAtIDE4OCwgMQ0KLVsNCi0NCi1dIFMgLSAxODksIDQNCi1bQHBhZ2VdIFBBR0UgLSAxOTMsIDUNCi1bIF0gUyAtIDE5OCwgMQ0KLVs6bGVmdF0gQ1NTX1BBR0VfU0VMRUNUT1IgLSAxOTksIDUNCi1bIF0gUyAtIDIwNCwgMQ0KLVt7XSBMQlJBQ0UgLSAyMDUsIDENCi1bIF0gUyAtIDIwNiwgMQ0KLVttYXJnaW4tbGVmdF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAyMDcsIDExDQotWyBdIFMgLSAyMTgsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMjE5LCAxDQotWyBdIFMgLSAyMjAsIDENCi1bNGNtXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAyMjEsIDMNCi1bIF0gUyAtIDIyNCwgMQ0KLVt9XSBSQlJBQ0UgLSAyMjUsIDENCi1bDQotDQotXSBTIC0gMjI2LCA0DQotW0BtZWRpYV0gTUVESUEgLSAyMzAsIDYNCi1bIF0gUyAtIDIzNiwgMQ0KLVthdXJhbF0gTUVESVVNIC0gMjM3LCA1DQotWyBdIFMgLSAyNDIsIDENCi1be10gTEJSQUNFIC0gMjQzLCAxDQotWw0KLQldIFMgLSAyNDQsIDMNCi1bUF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMjQ3LCAxDQotWy5oZWlkaV0gU0VMRUNUT1JfQ0xBU1MgLSAyNDgsIDYNCi1bIF0gUyAtIDI1NCwgMQ0KLVt7XSBMQlJBQ0UgLSAyNTUsIDENCi1bDQotCQldIFMgLSAyNTYsIDQNCi1bYXppbXV0aF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAyNjAsIDcNCi1bIF0gUyAtIDI2NywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAyNjgsIDENCi1bIF0gUyAtIDI2OSwgMQ0KLVtjZW50ZXItbGVmdF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAyNzAsIDExDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDI4MSwgMQ0KLVsNCi0JCV0gUyAtIDI4MiwgNA0KLVtlbGV2YXRpb25dIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMjg2LCA5DQotWyBdIFMgLSAyOTUsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMjk2LCAxDQotWyBdIFMgLSAyOTcsIDENCi1bMTIuM2RlZ10gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMjk4LCA3DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDMwNSwgMQ0KLVsNCi0JCV0gUyAtIDMwNiwgNA0KLVtwYXVzZV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAzMTAsIDUNCi1bIF0gUyAtIDMxNSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAzMTYsIDENCi1bIF0gUyAtIDMxNywgMQ0KLVszMG1zXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAzMTgsIDQNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDMyMiwgMQ0KLVsxLjZzXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAzMjMsIDQNCi1bDQotCV0gUyAtIDMyNywgMw0KLVt9XSBSQlJBQ0UgLSAzMzAsIDENCi1bDQotXSBTIC0gMzMxLCAyDQotW31dIFJCUkFDRSAtIDMzMywgMQ0KLVsNCi1dIFMgLSAzMzQsIDINCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmIzZjJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTA0LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDcwNiArMCwwIEBACi1bQGNoYXJzZXRdIENIQVJTRVQgLSAwLCA4DQotWyBdIFMgLSA4LCAxDQotWyJJU08tODg1OS0xIl0gU1RSSU5HIC0gOSwgMTINCi1bO10gREVMSU1JVEVSIC0gMjEsIDENCi1bDQotDQotXSBTIC0gMjIsIDQNCi1bQGltcG9ydF0gSU1QT1JUIC0gMjYsIDcNCi1bIF0gUyAtIDMzLCAxDQotW3VybCgiaG9nZS5jc3MiKV0gVVJJIC0gMzQsIDE1DQotWztdIERFTElNSVRFUiAtIDQ5LCAxDQotWw0KLV0gUyAtIDUwLCAyDQotW0BpbXBvcnRdIElNUE9SVCAtIDUyLCA3DQotWyBdIFMgLSA1OSwgMQ0KLVsvKiBjb21tZW50ICovXSBDT01NRU5UIC0gNjAsIDEzDQotWyBdIFMgLSA3MywgMQ0KLVt1cmwoaG9nZS5jc3MpXSBVUkkgLSA3NCwgMTMNCi1bO10gREVMSU1JVEVSIC0gODcsIDENCi1bDQotXSBTIC0gODgsIDINCi1bQGltcG9ydF0gSU1QT1JUIC0gOTAsIDcNCi1bIF0gUyAtIDk3LCAxDQotWyJob2dlLmNzcyJdIFNUUklORyAtIDk4LCAxMA0KLVsgXSBTIC0gMTA4LCAxDQotWy8qIGNvbW1lbnQgKi9dIENPTU1FTlQgLSAxMDksIDEzDQotWztdIERFTElNSVRFUiAtIDEyMiwgMQ0KLVsNCi1dIFMgLSAxMjMsIDINCi1bQElNUE9SVF0gSU1QT1JUIC0gMTI1LCA3DQotWyBdIFMgLSAxMzIsIDENCi1bJ2hvZ2UuY3NzJ10gU1RSSU5HIC0gMTMzLCAxMA0KLVsgXSBTIC0gMTQzLCAxDQotW21lZGlhMV0gTUVESVVNIC0gMTQ0LCA2DQotWyxdIE1FRElBX1NFUEFSQVRPUiAtIDE1MCwgMQ0KLVttZWRpYTJdIE1FRElVTSAtIDE1MSwgNg0KLVsgXSBTIC0gMTU3LCAxDQotWyxdIE1FRElBX1NFUEFSQVRPUiAtIDE1OCwgMQ0KLVsgXSBTIC0gMTU5LCAxDQotW21lZGlhM10gTUVESVVNIC0gMTYwLCA2DQotWztdIERFTElNSVRFUiAtIDE2NiwgMQ0KLVsNCi0NCi1dIFMgLSAxNjcsIDQNCi1bQG1lZGlhXSBNRURJQSAtIDE3MSwgNg0KLVsgXSBTIC0gMTc3LCAxDQotW3ByaW50XSBNRURJVU0gLSAxNzgsIDUNCi1bIF0gUyAtIDE4MywgMQ0KLVt7XSBMQlJBQ0UgLSAxODQsIDENCi1bDQotDQotXSBTIC0gMTg1LCA0DQotW31dIFJCUkFDRSAtIDE4OSwgMQ0KLVsNCi0NCi1dIFMgLSAxOTAsIDQNCi1bQHBhZ2VdIFBBR0UgLSAxOTQsIDUNCi1bIF0gUyAtIDE5OSwgMQ0KLVs6bGVmdF0gQ1NTX1BBR0VfU0VMRUNUT1IgLSAyMDAsIDUNCi1bIF0gUyAtIDIwNSwgMQ0KLVt7XSBMQlJBQ0UgLSAyMDYsIDENCi1bDQotDQotXSBTIC0gMjA3LCA0DQotW31dIFJCUkFDRSAtIDIxMSwgMQ0KLVsNCi0NCi1dIFMgLSAyMTIsIDQNCi1baDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDIxNiwgMg0KLVssXSBTRUxFQ1RPUl9TRVBBUkFUT1IgLSAyMTgsIDENCi1bIF0gUyAtIDIxOSwgMQ0KLVtoMl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMjIwLCAyDQotWyxdIFNFTEVDVE9SX1NFUEFSQVRPUiAtIDIyMiwgMQ0KLVsgXSBTIC0gMjIzLCAxDQotW2gzXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyMjQsIDINCi1bIF0gUyAtIDIyNiwgMQ0KLVt7XSBMQlJBQ0UgLSAyMjcsIDENCi1bICBdIFMgLSAyMjgsIDINCi1bZm9udC1mYW1pbHldIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMjMwLCAxMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAyNDEsIDENCi1bIF0gUyAtIDI0MiwgMQ0KLVtzYW5zLXNlcmlmXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDI0MywgMTANCi1bICBdIFMgLSAyNTMsIDINCi1bfV0gUkJSQUNFIC0gMjU1LCAxDQotWw0KLV0gUyAtIDI1NiwgMg0KLVtoMV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMjU4LCAyDQotWyBdIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAyNjAsIDENCi1bZW1dIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDI2MSwgMg0KLVsgXSBTIC0gMjYzLCAxDQotW3tdIExCUkFDRSAtIDI2NCwgMQ0KLVsgIF0gUyAtIDI2NSwgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAyNjcsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMjcyLCAxDQotWyBdIFMgLSAyNzMsIDENCi1bYmx1ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAyNzQsIDQNCi1bICBdIFMgLSAyNzgsIDINCi1bfV0gUkJSQUNFIC0gMjgwLCAxDQotWw0KLV0gUyAtIDI4MSwgMg0KLVtkaXZdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDI4MywgMw0KLVsgXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMjg2LCAxDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDI4NywgMQ0KLVsgXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMjg4LCAxDQotWypdIFNFTEVDVE9SX1VOSVZFUlNBTCAtIDI4OSwgMQ0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSAyOTAsIDENCi1baHJlZl0gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSAyOTEsIDQNCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDI5NSwgMQ0KLVsgXSBTIC0gMjk2LCAxDQotW3tdIExCUkFDRSAtIDI5NywgMQ0KLVsgIF0gUyAtIDI5OCwgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAzMDAsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMzA1LCAxDQotWyBdIFMgLSAzMDYsIDENCi1bYmx1ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAzMDcsIDQNCi1bICBdIFMgLSAzMTEsIDINCi1bfV0gUkJSQUNFIC0gMzEzLCAxDQotWw0KLV0gUyAtIDMxNCwgMg0KLVtib2R5XSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAzMTYsIDQNCi1bIF0gUyAtIDMyMCwgMQ0KLVs+XSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMzIxLCAxDQotWyBdIFMgLSAzMjIsIDENCi1bUF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzIzLCAxDQotWyBdIFMgLSAzMjQsIDENCi1be10gTEJSQUNFIC0gMzI1LCAxDQotWyAgXSBTIC0gMzI2LCAyDQotW2xpbmUtaGVpZ2h0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDMyOCwgMTENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMzM5LCAxDQotWyBdIFMgLSAzNDAsIDENCi1bMS4zXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAzNDEsIDMNCi1bICBdIFMgLSAzNDQsIDINCi1bfV0gUkJSQUNFIC0gMzQ2LCAxDQotWw0KLV0gUyAtIDM0NywgMg0KLVtkaXZdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDM0OSwgMw0KLVsgXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMzUyLCAxDQotW29sXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAzNTMsIDINCi1bPl0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDM1NSwgMQ0KLVtsaV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzU2LCAyDQotWyBdIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAzNTgsIDENCi1bcF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzU5LCAxDQotWyBdIFMgLSAzNjAsIDENCi1be10gTEJSQUNFIC0gMzYxLCAxDQotWyBdIFMgLSAzNjIsIDENCi1bfV0gUkJSQUNFIC0gMzYzLCAxDQotWw0KLV0gUyAtIDM2NCwgMg0KLVttYXRoXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAzNjYsIDQNCi1bIF0gUyAtIDM3MCwgMQ0KLVsrXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMzcxLCAxDQotWyBdIFMgLSAzNzIsIDENCi1bcF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzczLCAxDQotWyBdIFMgLSAzNzQsIDENCi1be10gTEJSQUNFIC0gMzc1LCAxDQotWyAgXSBTIC0gMzc2LCAyDQotW3RleHQtaW5kZW50XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDM3OCwgMTENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMzg5LCAxDQotWyBdIFMgLSAzOTAsIDENCi1bMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMzkxLCAxDQotWyAgXSBTIC0gMzkyLCAyDQotW31dIFJCUkFDRSAtIDM5NCwgMQ0KLVsNCi1dIFMgLSAzOTUsIDINCi1baDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDM5NywgMg0KLVsub3BlbmVyXSBTRUxFQ1RPUl9DTEFTUyAtIDM5OSwgNw0KLVsgXSBTIC0gNDA2LCAxDQotWytdIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSA0MDcsIDENCi1bIF0gUyAtIDQwOCwgMQ0KLVtoMl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNDA5LCAyDQotWyBdIFMgLSA0MTEsIDENCi1be10gTEJSQUNFIC0gNDEyLCAxDQotWyAgXSBTIC0gNDEzLCAyDQotW21hcmdpbi10b3BdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNDE1LCAxMA0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA0MjUsIDENCi1bIF0gUyAtIDQyNiwgMQ0KLVstNW1tXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDQyNywgNA0KLVsgIF0gUyAtIDQzMSwgMg0KLVt9XSBSQlJBQ0UgLSA0MzMsIDENCi1bDQotXSBTIC0gNDM0LCAyDQotW2gxXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA0MzYsIDINCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNDM4LCAxDQotW3RpdGxlXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDQzOSwgNQ0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNDQ0LCAxDQotWyBdIFMgLSA0NDUsIDENCi1be10gTEJSQUNFIC0gNDQ2LCAxDQotWyAgXSBTIC0gNDQ3LCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDQ0OSwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA0NTQsIDENCi1bIF0gUyAtIDQ1NSwgMQ0KLVtibHVlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDQ1NiwgNA0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA0NjAsIDENCi1bICBdIFMgLSA0NjEsIDINCi1bfV0gUkJSQUNFIC0gNDYzLCAxDQotWw0KLV0gUyAtIDQ2NCwgMg0KLVtzcGFuXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA0NjYsIDQNCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNDcwLCAxDQotW2NsYXNzXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDQ3MSwgNQ0KLVs9XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA0NzYsIDENCi1bZXhhbXBsZV0gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gNDc3LCA3DQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA0ODQsIDENCi1bIF0gUyAtIDQ4NSwgMQ0KLVt7XSBMQlJBQ0UgLSA0ODYsIDENCi1bICBdIFMgLSA0ODcsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNDg5LCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDQ5NCwgMQ0KLVsgXSBTIC0gNDk1LCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNDk2LCA0DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDUwMCwgMQ0KLVsgIF0gUyAtIDUwMSwgMg0KLVt9XSBSQlJBQ0UgLSA1MDMsIDENCi1bDQotXSBTIC0gNTA0LCAyDQotW3NwYW5dIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDUwNiwgNA0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA1MTAsIDENCi1baGVsbG9dIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNTExLCA1DQotWz1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDUxNiwgMQ0KLVsiQ2xldmVsYW5kIl0gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gNTE3LCAxMQ0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNTI4LCAxDQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDUyOSwgMQ0KLVtnb29kYnllXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDUzMCwgNw0KLVs9XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA1MzcsIDENCi1bIkNvbHVtYnVzIl0gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gNTM4LCAxMA0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNTQ4LCAxDQotWyBdIFMgLSA1NDksIDENCi1be10gTEJSQUNFIC0gNTUwLCAxDQotWyAgXSBTIC0gNTUxLCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDU1MywgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA1NTgsIDENCi1bIF0gUyAtIDU1OSwgMQ0KLVtibHVlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDU2MCwgNA0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA1NjQsIDENCi1bICBdIFMgLSA1NjUsIDINCi1bfV0gUkJSQUNFIC0gNTY3LCAxDQotWw0KLV0gUyAtIDU2OCwgMg0KLVthXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA1NzAsIDENCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNTcxLCAxDQotW3JlbF0gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA1NzIsIDMNCi1bfj1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDU3NSwgMg0KLVsiY29weXJpZ2h0Il0gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gNTc3LCAxMQ0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNTg4LCAxDQotWyBdIFMgLSA1ODksIDENCi1be10gTEJSQUNFIC0gNTkwLCAxDQotWyAgXSBTIC0gNTkxLCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDU5MywgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA1OTgsIDENCi1bIF0gUyAtIDU5OSwgMQ0KLVtibHVlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDYwMCwgNA0KLVsgIF0gUyAtIDYwNCwgMg0KLVt9XSBSQlJBQ0UgLSA2MDYsIDENCi1bDQotXSBTIC0gNjA3LCAyDQotW2FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDYwOSwgMQ0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA2MTAsIDENCi1baHJlZl0gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA2MTEsIDQNCi1bPV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gNjE1LCAxDQotWyJodHRwOi8vd3d3LnczLm9yZy8iXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA2MTYsIDIwDQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA2MzYsIDENCi1bIF0gUyAtIDYzNywgMQ0KLVt7XSBMQlJBQ0UgLSA2MzgsIDENCi1bICBdIFMgLSA2MzksIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNjQxLCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDY0NiwgMQ0KLVsgXSBTIC0gNjQ3LCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNjQ4LCA0DQotWyAgXSBTIC0gNjUyLCAyDQotW31dIFJCUkFDRSAtIDY1NCwgMQ0KLVsNCi1dIFMgLSA2NTUsIDINCi1bKl0gU0VMRUNUT1JfVU5JVkVSU0FMIC0gNjU3LCAxDQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDY1OCwgMQ0KLVtsYW5nXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDY1OSwgNA0KLVs9XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA2NjMsIDENCi1bZnJdIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDY2NCwgMg0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNjY2LCAxDQotWyBdIFMgLSA2NjcsIDENCi1be10gTEJSQUNFIC0gNjY4LCAxDQotWyAgXSBTIC0gNjY5LCAyDQotW2Rpc3BsYXldIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNjcxLCA3DQotWyBdIFMgLSA2NzgsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNjc5LCAxDQotWyBdIFMgLSA2ODAsIDENCi1bbm9uZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA2ODEsIDQNCi1bICBdIFMgLSA2ODUsIDINCi1bfV0gUkJSQUNFIC0gNjg3LCAxDQotWw0KLV0gUyAtIDY4OCwgMg0KLVsqXSBTRUxFQ1RPUl9VTklWRVJTQUwgLSA2OTAsIDENCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNjkxLCAxDQotW2xhbmddIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNjkyLCA0DQotW3w9XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA2OTYsIDINCi1bImVuIl0gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gNjk4LCA0DQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA3MDIsIDENCi1bIF0gUyAtIDcwMywgMQ0KLVt7XSBMQlJBQ0UgLSA3MDQsIDENCi1bICBdIFMgLSA3MDUsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNzA3LCA1DQotWyBdIFMgLSA3MTIsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNzEzLCAxDQotWyBdIFMgLSA3MTQsIDENCi1bcmVkXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDcxNSwgMw0KLVsgIF0gUyAtIDcxOCwgMg0KLVt9XSBSQlJBQ0UgLSA3MjAsIDENCi1bDQotXSBTIC0gNzIxLCAyDQotW0RJQUxPR1VFXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA3MjMsIDgNCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNzMxLCAxDQotW2NoYXJhY3Rlcl0gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA3MzIsIDkNCi1bPV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gNzQxLCAxDQotW3JvbWVvXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA3NDIsIDUNCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDc0NywgMQ0KLVsNCi1dIFMgLSA3NDgsIDINCi1be10gTEJSQUNFIC0gNzUwLCAxDQotWyAgXSBTIC0gNzUxLCAyDQotW3ZvaWNlLWZhbWlseV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA3NTMsIDEyDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDc2NSwgMQ0KLVsgXSBTIC0gNzY2LCAxDQotWyJMYXdyZW5jZSBPbGl2aWVyIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gNzY3LCAxOA0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDc4NSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gNzg2LCAxDQotW2NoYXJsZXNdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNzg3LCA3DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gNzk0LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA3OTUsIDENCi1bbWFsZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA3OTYsIDQNCi1bICBdIFMgLSA4MDAsIDINCi1bfV0gUkJSQUNFIC0gODAyLCAxDQotWw0KLV0gUyAtIDgwMywgMg0KLVtESUFMT0dVRV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gODA1LCA4DQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDgxMywgMQ0KLVsgXSBTIC0gODE0LCAxDQotW2NoYXJhY3Rlcl0gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA4MTUsIDkNCi1bIF0gUyAtIDgyNCwgMQ0KLVs9XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA4MjUsIDENCi1bIF0gUyAtIDgyNiwgMQ0KLVtqdWxpZXRdIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDgyNywgNg0KLVsgXSBTIC0gODMzLCAxDQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA4MzQsIDENCi1bDQotXSBTIC0gODM1LCAyDQotW3tdIExCUkFDRSAtIDgzNywgMQ0KLVsgIF0gUyAtIDgzOCwgMg0KLVt2b2ljZS1mYW1pbHldIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gODQwLCAxMg0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA4NTIsIDENCi1bIF0gUyAtIDg1MywgMQ0KLVsiVml2aWVuIExlaWdoIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gODU0LCAxNA0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDg2OCwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gODY5LCAxDQotW3ZpY3RvcmlhXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDg3MCwgOA0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDg3OCwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gODc5LCAxDQotW2ZlbWFsZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA4ODAsIDYNCi1bICBdIFMgLSA4ODYsIDINCi1bfV0gUkJSQUNFIC0gODg4LCAxDQotWw0KLV0gUyAtIDg4OSwgMg0KLVsqXSBTRUxFQ1RPUl9VTklWRVJTQUwgLSA4OTEsIDENCi1bLnBhc3RvcmFsXSBTRUxFQ1RPUl9DTEFTUyAtIDg5MiwgOQ0KLVsgXSBTIC0gOTAxLCAxDQotW3tdIExCUkFDRSAtIDkwMiwgMQ0KLVsgIF0gUyAtIDkwMywgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA5MDUsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gOTEwLCAxDQotWyBdIFMgLSA5MTEsIDENCi1bZ3JlZW5dIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gOTEyLCA1DQotWyAgXSBTIC0gOTE3LCAyDQotW31dIFJCUkFDRSAtIDkxOSwgMQ0KLVsNCi1dIFMgLSA5MjAsIDINCi1bLnBhc3RvcmFsXSBTRUxFQ1RPUl9DTEFTUyAtIDkyMiwgOQ0KLVsgXSBTIC0gOTMxLCAxDQotW3tdIExCUkFDRSAtIDkzMiwgMQ0KLVsgIF0gUyAtIDkzMywgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA5MzUsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gOTQwLCAxDQotWyBdIFMgLSA5NDEsIDENCi1bZ3JlZW5dIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gOTQyLCA1DQotWyAgXSBTIC0gOTQ3LCAyDQotW31dIFJCUkFDRSAtIDk0OSwgMQ0KLVsNCi1dIFMgLSA5NTAsIDINCi1bSDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDk1MiwgMg0KLVsucGFzdG9yYWxdIFNFTEVDVE9SX0NMQVNTIC0gOTU0LCA5DQotWyBdIFMgLSA5NjMsIDENCi1be10gTEJSQUNFIC0gOTY0LCAxDQotWyAgXSBTIC0gOTY1LCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDk2NywgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA5NzIsIDENCi1bIF0gUyAtIDk3MywgMQ0KLVtncmVlbl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA5NzQsIDUNCi1bICBdIFMgLSA5NzksIDINCi1bfV0gUkJSQUNFIC0gOTgxLCAxDQotWw0KLV0gUyAtIDk4MiwgMg0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA5ODQsIDENCi1bLnBhc3RvcmFsXSBTRUxFQ1RPUl9DTEFTUyAtIDk4NSwgOQ0KLVsubWFyaW5lXSBTRUxFQ1RPUl9DTEFTUyAtIDk5NCwgNw0KLVsgXSBTIC0gMTAwMSwgMQ0KLVt7XSBMQlJBQ0UgLSAxMDAyLCAxDQotWyAgXSBTIC0gMTAwMywgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMDA1LCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEwMTAsIDENCi1bIF0gUyAtIDEwMTEsIDENCi1bZ3JlZW5dIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTAxMiwgNQ0KLVsgIF0gUyAtIDEwMTcsIDINCi1bfV0gUkJSQUNFIC0gMTAxOSwgMQ0KLVsNCi1dIFMgLSAxMDIwLCAyDQotW2gxXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMDIyLCAyDQotWyNjaGFwdGVyMV0gU0VMRUNUT1JfSUQgLSAxMDI0LCA5DQotWyBdIFMgLSAxMDMzLCAxDQotW3tdIExCUkFDRSAtIDEwMzQsIDENCi1bICBdIFMgLSAxMDM1LCAyDQotW3RleHQtYWxpZ25dIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTAzNywgMTANCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTA0NywgMQ0KLVsgXSBTIC0gMTA0OCwgMQ0KLVtjZW50ZXJdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTA0OSwgNg0KLVsgIF0gUyAtIDEwNTUsIDINCi1bfV0gUkJSQUNFIC0gMTA1NywgMQ0KLVsNCi1dIFMgLSAxMDU4LCAyDQotW2Rpdl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTA2MCwgMw0KLVsgXSBTIC0gMTA2MywgMQ0KLVs+XSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMTA2NCwgMQ0KLVsgXSBTIC0gMTA2NSwgMQ0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMDY2LCAxDQotWzpmaXJzdC1jaGlsZF0gU0VMRUNUT1JfUFNFVURPIC0gMTA2NywgMTINCi1bIF0gUyAtIDEwNzksIDENCi1be10gTEJSQUNFIC0gMTA4MCwgMQ0KLVsgIF0gUyAtIDEwODEsIDINCi1bdGV4dC1pbmRlbnRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTA4MywgMTENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTA5NCwgMQ0KLVsgXSBTIC0gMTA5NSwgMQ0KLVswXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxMDk2LCAxDQotWyAgXSBTIC0gMTA5NywgMg0KLVt9XSBSQlJBQ0UgLSAxMDk5LCAxDQotWw0KLV0gUyAtIDExMDAsIDINCi1bcF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTEwMiwgMQ0KLVs6Zmlyc3QtY2hpbGRdIFNFTEVDVE9SX1BTRVVETyAtIDExMDMsIDEyDQotWyBdIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAxMTE1LCAxDQotW2VtXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMTE2LCAyDQotWyBdIFMgLSAxMTE4LCAxDQotW3tdIExCUkFDRSAtIDExMTksIDENCi1bICBdIFMgLSAxMTIwLCAyDQotW2ZvbnQtd2VpZ2h0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDExMjIsIDExDQotWyBdIFMgLSAxMTMzLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDExMzQsIDENCi1bIF0gUyAtIDExMzUsIDENCi1bYm9sZF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMTM2LCA0DQotWyAgXSBTIC0gMTE0MCwgMg0KLVt9XSBSQlJBQ0UgLSAxMTQyLCAxDQotWw0KLV0gUyAtIDExNDMsIDINCi1bKl0gU0VMRUNUT1JfVU5JVkVSU0FMIC0gMTE0NSwgMQ0KLVsgXSBTIC0gMTE0NiwgMQ0KLVs+XSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMTE0NywgMQ0KLVsgXSBTIC0gMTE0OCwgMQ0KLVthXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMTQ5LCAxDQotWzpmaXJzdC1jaGlsZF0gU0VMRUNUT1JfUFNFVURPIC0gMTE1MCwgMTINCi1bIF0gUyAtIDExNjIsIDENCi1be10gTEJSQUNFIC0gMTE2MywgMQ0KLVsgIF0gUyAtIDExNjQsIDINCi1bZm9udC13ZWlnaHRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTE2NiwgMTENCi1bIF0gUyAtIDExNzcsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTE3OCwgMQ0KLVsgXSBTIC0gMTE3OSwgMQ0KLVtib2xkXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDExODAsIDQNCi1bICBdIFMgLSAxMTg0LCAyDQotW31dIFJCUkFDRSAtIDExODYsIDENCi1bDQotXSBTIC0gMTE4NywgMg0KLVthXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMTg5LCAxDQotWzpmaXJzdC1jaGlsZF0gU0VMRUNUT1JfUFNFVURPIC0gMTE5MCwgMTINCi1bIF0gUyAtIDEyMDIsIDENCi1be10gTEJSQUNFIC0gMTIwMywgMQ0KLVsgIF0gUyAtIDEyMDQsIDINCi1bZm9udC13ZWlnaHRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTIwNiwgMTENCi1bIF0gUyAtIDEyMTcsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTIxOCwgMQ0KLVsgXSBTIC0gMTIxOSwgMQ0KLVtib2xkXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDEyMjAsIDQNCi1bICBdIFMgLSAxMjI0LCAyDQotW31dIFJCUkFDRSAtIDEyMjYsIDENCi1bDQotXSBTIC0gMTIyNywgMg0KLVthXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMjI5LCAxDQotWy5leHRlcm5hbF0gU0VMRUNUT1JfQ0xBU1MgLSAxMjMwLCA5DQotWzp2aXNpdGVkXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMjM5LCA4DQotWyBdIFMgLSAxMjQ3LCAxDQotW3tdIExCUkFDRSAtIDEyNDgsIDENCi1bICBdIFMgLSAxMjQ5LCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEyNTEsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTI1NiwgMQ0KLVsgXSBTIC0gMTI1NywgMQ0KLVtibHVlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDEyNTgsIDQNCi1bICBdIFMgLSAxMjYyLCAyDQotW31dIFJCUkFDRSAtIDEyNjQsIDENCi1bDQotXSBTIC0gMTI2NSwgMg0KLVthXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMjY3LCAxDQotWzpmb2N1c10gU0VMRUNUT1JfUFNFVURPIC0gMTI2OCwgNg0KLVs6aG92ZXJdIFNFTEVDVE9SX1BTRVVETyAtIDEyNzQsIDYNCi1bIF0gUyAtIDEyODAsIDENCi1be10gTEJSQUNFIC0gMTI4MSwgMQ0KLVsgIF0gUyAtIDEyODIsIDINCi1bYmFja2dyb3VuZF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMjg0LCAxMA0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMjk0LCAxDQotWyBdIFMgLSAxMjk1LCAxDQotW3doaXRlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDEyOTYsIDUNCi1bICBdIFMgLSAxMzAxLCAyDQotW31dIFJCUkFDRSAtIDEzMDMsIDENCi1bDQotXSBTIC0gMTMwNCwgMg0KLVtodG1sXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMzA2LCA0DQotWzpsYW5nKGZyKV0gU0VMRUNUT1JfUFNFVURPIC0gMTMxMCwgOQ0KLVsgXSBTIC0gMTMxOSwgMQ0KLVt7XSBMQlJBQ0UgLSAxMzIwLCAxDQotWyAgXSBTIC0gMTMyMSwgMg0KLVtxdW90ZXNdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTMyMywgNg0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMzI5LCAxDQotWyBdIFMgLSAxMzMwLCAxDQotWyc8PCddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDEzMzEsIDQNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEzMzUsIDENCi1bJz4+J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTMzNiwgNA0KLVsgIF0gUyAtIDEzNDAsIDINCi1bfV0gUkJSQUNFIC0gMTM0MiwgMQ0KLVsNCi1dIFMgLSAxMzQzLCAyDQotW2h0bWxdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEzNDUsIDQNCi1bOmxhbmcoZGUpXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMzQ5LCA5DQotWyBdIFMgLSAxMzU4LCAxDQotW3tdIExCUkFDRSAtIDEzNTksIDENCi1bICBdIFMgLSAxMzYwLCAyDQotW3F1b3Rlc10gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMzYyLCA2DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEzNjgsIDENCi1bIF0gUyAtIDEzNjksIDENCi1bJz4+J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTM3MCwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTM3NCwgMQ0KLVsnPDwnXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMzc1LCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMzc5LCAxDQotWydcMjAzOSddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDEzODAsIDcNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEzODcsIDENCi1bJ1wyMDNBJ10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTM4OCwgNw0KLVsgIF0gUyAtIDEzOTUsIDINCi1bfV0gUkJSQUNFIC0gMTM5NywgMQ0KLVsNCi1dIFMgLSAxMzk4LCAyDQotWzpsYW5nKGZyKV0gU0VMRUNUT1JfUFNFVURPIC0gMTQwMCwgOQ0KLVsgXSBTIC0gMTQwOSwgMQ0KLVs+XSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMTQxMCwgMQ0KLVsgXSBTIC0gMTQxMSwgMQ0KLVtRXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxNDEyLCAxDQotWyBdIFMgLSAxNDEzLCAxDQotW3tdIExCUkFDRSAtIDE0MTQsIDENCi1bICBdIFMgLSAxNDE1LCAyDQotW3F1b3Rlc10gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNDE3LCA2DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE0MjMsIDENCi1bIF0gUyAtIDE0MjQsIDENCi1bJzw8J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTQyNSwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTQyOSwgMQ0KLVsnPj4nXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNDMwLCA0DQotWyAgXSBTIC0gMTQzNCwgMg0KLVt9XSBSQlJBQ0UgLSAxNDM2LCAxDQotWw0KLV0gUyAtIDE0MzcsIDINCi1bOmxhbmcoZGUpXSBTRUxFQ1RPUl9QU0VVRE8gLSAxNDM5LCA5DQotWyBdIFMgLSAxNDQ4LCAxDQotWz5dIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAxNDQ5LCAxDQotWyBdIFMgLSAxNDUwLCAxDQotW1FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE0NTEsIDENCi1bIF0gUyAtIDE0NTIsIDENCi1be10gTEJSQUNFIC0gMTQ1MywgMQ0KLVsgIF0gUyAtIDE0NTQsIDINCi1bcXVvdGVzXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE0NTYsIDYNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTQ2MiwgMQ0KLVsgXSBTIC0gMTQ2MywgMQ0KLVsnPj4nXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNDY0LCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNDY4LCAxDQotWyc8PCddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE0NjksIDQNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE0NzMsIDENCi1bJ1wyMDM5J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTQ3NCwgNw0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTQ4MSwgMQ0KLVsnXDIwM0EnXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNDgyLCA3DQotWyAgXSBTIC0gMTQ4OSwgMg0KLVt9XSBSQlJBQ0UgLSAxNDkxLCAxDQotWw0KLV0gUyAtIDE0OTIsIDINCi1bcF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTQ5NCwgMQ0KLVs6Zmlyc3QtbGV0dGVyXSBTRUxFQ1RPUl9QU0VVRE8gLSAxNDk1LCAxMw0KLVsgXSBTIC0gMTUwOCwgMQ0KLVt7XSBMQlJBQ0UgLSAxNTA5LCAxDQotWyAgXSBTIC0gMTUxMCwgMg0KLVtmb250LXNpemVdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTUxMiwgOQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNTIxLCAxDQotWyBdIFMgLSAxNTIyLCAxDQotWzNlbV0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTUyMywgMw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxNTI2LCAxDQotWyBdIFMgLSAxNTI3LCAxDQotW2ZvbnQtd2VpZ2h0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE1MjgsIDExDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE1MzksIDENCi1bIF0gUyAtIDE1NDAsIDENCi1bbm9ybWFsXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE1NDEsIDYNCi1bICBdIFMgLSAxNTQ3LCAyDQotW31dIFJCUkFDRSAtIDE1NDksIDENCi1bDQotXSBTIC0gMTU1MCwgMg0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxNTUyLCAxDQotWy5zcGVjaWFsXSBTRUxFQ1RPUl9DTEFTUyAtIDE1NTMsIDgNCi1bOmJlZm9yZV0gU0VMRUNUT1JfUFNFVURPIC0gMTU2MSwgNw0KLVsgXSBTIC0gMTU2OCwgMQ0KLVt7XSBMQlJBQ0UgLSAxNTY5LCAxDQotWyBdIFMgLSAxNTcwLCAxDQotW2NvbnRlbnRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTU3MSwgNw0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNTc4LCAxDQotWyBdIFMgLSAxNTc5LCAxDQotWyJTcGVjaWFsISAiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNTgwLCAxMQ0KLVsgXSBTIC0gMTU5MSwgMQ0KLVt9XSBSQlJBQ0UgLSAxNTkyLCAxDQotWw0KLV0gUyAtIDE1OTMsIDINCi1bcF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTU5NSwgMQ0KLVsuc3BlY2lhbF0gU0VMRUNUT1JfQ0xBU1MgLSAxNTk2LCA4DQotWzpmaXJzdC1sZXR0ZXJdIFNFTEVDVE9SX1BTRVVETyAtIDE2MDQsIDEzDQotWyBdIFMgLSAxNjE3LCAxDQotW3tdIExCUkFDRSAtIDE2MTgsIDENCi1bIF0gUyAtIDE2MTksIDENCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTYyMCwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNjI1LCAxDQotWyBdIFMgLSAxNjI2LCAxDQotWyNmZmQ4MDBdIERFQ0xBUkFUSU9OX1ZBTFVFX0hBU0ggLSAxNjI3LCA3DQotWyBdIFMgLSAxNjM0LCAxDQotW31dIFJCUkFDRSAtIDE2MzUsIDENCi1bDQotXSBTIC0gMTYzNiwgMg0KLVtCT0RZXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxNjM4LCA0DQotWyBdIFMgLSAxNjQyLCAxDQotW3tdIExCUkFDRSAtIDE2NDMsIDENCi1bIF0gUyAtIDE2NDQsIDENCi1bZm9udC1mYW1pbHldIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTY0NSwgMTENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTY1NiwgMQ0KLVsgXSBTIC0gMTY1NywgMQ0KLVtCYXNrZXJ2aWxsZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxNjU4LCAxMQ0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE2NjksIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE2NzAsIDENCi1bIkhlaXNpIE1pbmNobyBXMyJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE2NzEsIDE3DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTY4OCwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTY4OSwgMQ0KLVtTeW1ib2xdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTY5MCwgNg0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE2OTYsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE2OTcsIDENCi1bc2VyaWZdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTY5OCwgNQ0KLVsgXSBTIC0gMTcwMywgMQ0KLVt9XSBSQlJBQ0UgLSAxNzA0LCAxDQotWw0KLV0gUyAtIDE3MDUsIDINCi1bKl0gU0VMRUNUT1JfVU5JVkVSU0FMIC0gMTcwNywgMQ0KLVs6bGFuZyhqYS1qcCldIFNFTEVDVE9SX1BTRVVETyAtIDE3MDgsIDEyDQotWyBdIFMgLSAxNzIwLCAxDQotW3tdIExCUkFDRSAtIDE3MjEsIDENCi1bIF0gUyAtIDE3MjIsIDENCi1bZm9udF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNzIzLCA0DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE3MjcsIDENCi1bIF0gUyAtIDE3MjgsIDENCi1bOTAwXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxNzI5LCAzDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNzMyLCAxDQotWzE0cHRdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDE3MzMsIDQNCi1bL10gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxNzM3LCAxDQotWzE2cHRdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDE3MzgsIDQNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE3NDIsIDENCi1bIkhlaXNlaSBNaW5jaG8gVzkiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNzQzLCAxOA0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE3NjEsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE3NjIsIDENCi1bc2VyaWZdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTc2MywgNQ0KLVsgXSBTIC0gMTc2OCwgMQ0KLVt9XSBSQlJBQ0UgLSAxNzY5LCAxDQotWw0KLV0gUyAtIDE3NzAsIDINCi1bKl0gU0VMRUNUT1JfVU5JVkVSU0FMIC0gMTc3MiwgMQ0KLVs6bGFuZyh6aC10dyldIFNFTEVDVE9SX1BTRVVETyAtIDE3NzMsIDEyDQotWyBdIFMgLSAxNzg1LCAxDQotW3tdIExCUkFDRSAtIDE3ODYsIDENCi1bIF0gUyAtIDE3ODcsIDENCi1bZm9udF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNzg4LCA0DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE3OTIsIDENCi1bIF0gUyAtIDE3OTMsIDENCi1bODAwXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxNzk0LCAzDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNzk3LCAxDQotWzE0cHRdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDE3OTgsIDQNCi1bL10gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxODAyLCAxDQotWzE2LjVwdF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTgwMywgNg0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTgwOSwgMQ0KLVsiTGkgU3VuZyJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE4MTAsIDkNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxODE5LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxODIwLCAxDQotW3NlcmlmXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE4MjEsIDUNCi1bIF0gUyAtIDE4MjYsIDENCi1bfV0gUkJSQUNFIC0gMTgyNywgMQ0KLVsNCi1dIFMgLSAxODI4LCAyDQotDQotLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTA1LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTA1LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJiM2YyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwNS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw3MDYgKzAsMCBAQAotW0BjaGFyc2V0XSBDSEFSU0VUIC0gMCwgOA0KLVsgXSBTIC0gOCwgMQ0KLVsiSVNPLTg4NTktMSJdIFNUUklORyAtIDksIDEyDQotWztdIERFTElNSVRFUiAtIDIxLCAxDQotWw0KLQ0KLV0gUyAtIDIyLCA0DQotW0BpbXBvcnRdIElNUE9SVCAtIDI2LCA3DQotWyBdIFMgLSAzMywgMQ0KLVt1cmwoImhvZ2UuY3NzIildIFVSSSAtIDM0LCAxNQ0KLVs7XSBERUxJTUlURVIgLSA0OSwgMQ0KLVsNCi1dIFMgLSA1MCwgMg0KLVtAaW1wb3J0XSBJTVBPUlQgLSA1MiwgNw0KLVsgXSBTIC0gNTksIDENCi1bLyogY29tbWVudCAqL10gQ09NTUVOVCAtIDYwLCAxMw0KLVsgXSBTIC0gNzMsIDENCi1bdXJsKGhvZ2UuY3NzKV0gVVJJIC0gNzQsIDEzDQotWztdIERFTElNSVRFUiAtIDg3LCAxDQotWw0KLV0gUyAtIDg4LCAyDQotW0BpbXBvcnRdIElNUE9SVCAtIDkwLCA3DQotWyBdIFMgLSA5NywgMQ0KLVsiaG9nZS5jc3MiXSBTVFJJTkcgLSA5OCwgMTANCi1bIF0gUyAtIDEwOCwgMQ0KLVsvKiBjb21tZW50ICovXSBDT01NRU5UIC0gMTA5LCAxMw0KLVs7XSBERUxJTUlURVIgLSAxMjIsIDENCi1bDQotXSBTIC0gMTIzLCAyDQotW0BJTVBPUlRdIElNUE9SVCAtIDEyNSwgNw0KLVsgXSBTIC0gMTMyLCAxDQotWydob2dlLmNzcyddIFNUUklORyAtIDEzMywgMTANCi1bIF0gUyAtIDE0MywgMQ0KLVttZWRpYTFdIE1FRElVTSAtIDE0NCwgNg0KLVssXSBNRURJQV9TRVBBUkFUT1IgLSAxNTAsIDENCi1bbWVkaWEyXSBNRURJVU0gLSAxNTEsIDYNCi1bIF0gUyAtIDE1NywgMQ0KLVssXSBNRURJQV9TRVBBUkFUT1IgLSAxNTgsIDENCi1bIF0gUyAtIDE1OSwgMQ0KLVttZWRpYTNdIE1FRElVTSAtIDE2MCwgNg0KLVs7XSBERUxJTUlURVIgLSAxNjYsIDENCi1bDQotDQotXSBTIC0gMTY3LCA0DQotW0BtZWRpYV0gTUVESUEgLSAxNzEsIDYNCi1bIF0gUyAtIDE3NywgMQ0KLVtwcmludF0gTUVESVVNIC0gMTc4LCA1DQotWyBdIFMgLSAxODMsIDENCi1be10gTEJSQUNFIC0gMTg0LCAxDQotWw0KLQ0KLV0gUyAtIDE4NSwgNA0KLVt9XSBSQlJBQ0UgLSAxODksIDENCi1bDQotDQotXSBTIC0gMTkwLCA0DQotW0BwYWdlXSBQQUdFIC0gMTk0LCA1DQotWyBdIFMgLSAxOTksIDENCi1bOmxlZnRdIENTU19QQUdFX1NFTEVDVE9SIC0gMjAwLCA1DQotWyBdIFMgLSAyMDUsIDENCi1be10gTEJSQUNFIC0gMjA2LCAxDQotWw0KLQ0KLV0gUyAtIDIwNywgNA0KLVt9XSBSQlJBQ0UgLSAyMTEsIDENCi1bDQotDQotXSBTIC0gMjEyLCA0DQotW2gxXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyMTYsIDINCi1bLF0gU0VMRUNUT1JfU0VQQVJBVE9SIC0gMjE4LCAxDQotWyBdIFMgLSAyMTksIDENCi1baDJdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDIyMCwgMg0KLVssXSBTRUxFQ1RPUl9TRVBBUkFUT1IgLSAyMjIsIDENCi1bIF0gUyAtIDIyMywgMQ0KLVtoM10gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMjI0LCAyDQotWyBdIFMgLSAyMjYsIDENCi1be10gTEJSQUNFIC0gMjI3LCAxDQotWyAgXSBTIC0gMjI4LCAyDQotW2ZvbnQtZmFtaWx5XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDIzMCwgMTENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMjQxLCAxDQotWyBdIFMgLSAyNDIsIDENCi1bc2Fucy1zZXJpZl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAyNDMsIDEwDQotWyAgXSBTIC0gMjUzLCAyDQotW31dIFJCUkFDRSAtIDI1NSwgMQ0KLVsNCi1dIFMgLSAyNTYsIDINCi1baDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDI1OCwgMg0KLVsgXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMjYwLCAxDQotW2VtXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyNjEsIDINCi1bIF0gUyAtIDI2MywgMQ0KLVt7XSBMQlJBQ0UgLSAyNjQsIDENCi1bICBdIFMgLSAyNjUsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMjY3LCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDI3MiwgMQ0KLVsgXSBTIC0gMjczLCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMjc0LCA0DQotWyAgXSBTIC0gMjc4LCAyDQotW31dIFJCUkFDRSAtIDI4MCwgMQ0KLVsNCi1dIFMgLSAyODEsIDINCi1bZGl2XSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyODMsIDMNCi1bIF0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDI4NiwgMQ0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyODcsIDENCi1bIF0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDI4OCwgMQ0KLVsqXSBTRUxFQ1RPUl9VTklWRVJTQUwgLSAyODksIDENCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gMjkwLCAxDQotW2hyZWZdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gMjkxLCA0DQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSAyOTUsIDENCi1bIF0gUyAtIDI5NiwgMQ0KLVt7XSBMQlJBQ0UgLSAyOTcsIDENCi1bICBdIFMgLSAyOTgsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMzAwLCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDMwNSwgMQ0KLVsgXSBTIC0gMzA2LCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMzA3LCA0DQotWyAgXSBTIC0gMzExLCAyDQotW31dIFJCUkFDRSAtIDMxMywgMQ0KLVsNCi1dIFMgLSAzMTQsIDINCi1bYm9keV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzE2LCA0DQotWyBdIFMgLSAzMjAsIDENCi1bPl0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDMyMSwgMQ0KLVsgXSBTIC0gMzIyLCAxDQotW1BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDMyMywgMQ0KLVsgXSBTIC0gMzI0LCAxDQotW3tdIExCUkFDRSAtIDMyNSwgMQ0KLVsgIF0gUyAtIDMyNiwgMg0KLVtsaW5lLWhlaWdodF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAzMjgsIDExDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDMzOSwgMQ0KLVsgXSBTIC0gMzQwLCAxDQotWzEuM10gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMzQxLCAzDQotWyAgXSBTIC0gMzQ0LCAyDQotW31dIFJCUkFDRSAtIDM0NiwgMQ0KLVsNCi1dIFMgLSAzNDcsIDINCi1bZGl2XSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAzNDksIDMNCi1bIF0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDM1MiwgMQ0KLVtvbF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzUzLCAyDQotWz5dIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAzNTUsIDENCi1bbGldIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDM1NiwgMg0KLVsgXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMzU4LCAxDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDM1OSwgMQ0KLVsgXSBTIC0gMzYwLCAxDQotW3tdIExCUkFDRSAtIDM2MSwgMQ0KLVsgXSBTIC0gMzYyLCAxDQotW31dIFJCUkFDRSAtIDM2MywgMQ0KLVsNCi1dIFMgLSAzNjQsIDINCi1bbWF0aF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzY2LCA0DQotWyBdIFMgLSAzNzAsIDENCi1bK10gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDM3MSwgMQ0KLVsgXSBTIC0gMzcyLCAxDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDM3MywgMQ0KLVsgXSBTIC0gMzc0LCAxDQotW3tdIExCUkFDRSAtIDM3NSwgMQ0KLVsgIF0gUyAtIDM3NiwgMg0KLVt0ZXh0LWluZGVudF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAzNzgsIDExDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDM4OSwgMQ0KLVsgXSBTIC0gMzkwLCAxDQotWzBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDM5MSwgMQ0KLVsgIF0gUyAtIDM5MiwgMg0KLVt9XSBSQlJBQ0UgLSAzOTQsIDENCi1bDQotXSBTIC0gMzk1LCAyDQotW2gxXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAzOTcsIDINCi1bLm9wZW5lcl0gU0VMRUNUT1JfQ0xBU1MgLSAzOTksIDcNCi1bIF0gUyAtIDQwNiwgMQ0KLVsrXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gNDA3LCAxDQotWyBdIFMgLSA0MDgsIDENCi1baDJdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDQwOSwgMg0KLVsgXSBTIC0gNDExLCAxDQotW3tdIExCUkFDRSAtIDQxMiwgMQ0KLVsgIF0gUyAtIDQxMywgMg0KLVttYXJnaW4tdG9wXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDQxNSwgMTANCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNDI1LCAxDQotWyBdIFMgLSA0MjYsIDENCi1bLTVtbV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA0MjcsIDQNCi1bICBdIFMgLSA0MzEsIDINCi1bfV0gUkJSQUNFIC0gNDMzLCAxDQotWw0KLV0gUyAtIDQzNCwgMg0KLVtoMV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNDM2LCAyDQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDQzOCwgMQ0KLVt0aXRsZV0gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA0MzksIDUNCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDQ0NCwgMQ0KLVsgXSBTIC0gNDQ1LCAxDQotW3tdIExCUkFDRSAtIDQ0NiwgMQ0KLVsgIF0gUyAtIDQ0NywgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA0NDksIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNDU0LCAxDQotWyBdIFMgLSA0NTUsIDENCi1bYmx1ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA0NTYsIDQNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNDYwLCAxDQotWyAgXSBTIC0gNDYxLCAyDQotW31dIFJCUkFDRSAtIDQ2MywgMQ0KLVsNCi1dIFMgLSA0NjQsIDINCi1bc3Bhbl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNDY2LCA0DQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDQ3MCwgMQ0KLVtjbGFzc10gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA0NzEsIDUNCi1bPV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gNDc2LCAxDQotW2V4YW1wbGVdIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDQ3NywgNw0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNDg0LCAxDQotWyBdIFMgLSA0ODUsIDENCi1be10gTEJSQUNFIC0gNDg2LCAxDQotWyAgXSBTIC0gNDg3LCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDQ4OSwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA0OTQsIDENCi1bIF0gUyAtIDQ5NSwgMQ0KLVtibHVlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDQ5NiwgNA0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA1MDAsIDENCi1bICBdIFMgLSA1MDEsIDINCi1bfV0gUkJSQUNFIC0gNTAzLCAxDQotWw0KLV0gUyAtIDUwNCwgMg0KLVtzcGFuXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA1MDYsIDQNCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNTEwLCAxDQotW2hlbGxvXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDUxMSwgNQ0KLVs9XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA1MTYsIDENCi1bIkNsZXZlbGFuZCJdIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDUxNywgMTENCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDUyOCwgMQ0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA1MjksIDENCi1bZ29vZGJ5ZV0gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA1MzAsIDcNCi1bPV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gNTM3LCAxDQotWyJDb2x1bWJ1cyJdIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDUzOCwgMTANCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDU0OCwgMQ0KLVsgXSBTIC0gNTQ5LCAxDQotW3tdIExCUkFDRSAtIDU1MCwgMQ0KLVsgIF0gUyAtIDU1MSwgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA1NTMsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNTU4LCAxDQotWyBdIFMgLSA1NTksIDENCi1bYmx1ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA1NjAsIDQNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNTY0LCAxDQotWyAgXSBTIC0gNTY1LCAyDQotW31dIFJCUkFDRSAtIDU2NywgMQ0KLVsNCi1dIFMgLSA1NjgsIDINCi1bYV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNTcwLCAxDQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDU3MSwgMQ0KLVtyZWxdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNTcyLCAzDQotW349XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA1NzUsIDINCi1bImNvcHlyaWdodCJdIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDU3NywgMTENCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDU4OCwgMQ0KLVsgXSBTIC0gNTg5LCAxDQotW3tdIExCUkFDRSAtIDU5MCwgMQ0KLVsgIF0gUyAtIDU5MSwgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA1OTMsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNTk4LCAxDQotWyBdIFMgLSA1OTksIDENCi1bYmx1ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA2MDAsIDQNCi1bICBdIFMgLSA2MDQsIDINCi1bfV0gUkJSQUNFIC0gNjA2LCAxDQotWw0KLV0gUyAtIDYwNywgMg0KLVthXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA2MDksIDENCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNjEwLCAxDQotW2hyZWZdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNjExLCA0DQotWz1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDYxNSwgMQ0KLVsiaHR0cDovL3d3dy53My5vcmcvIl0gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gNjE2LCAyMA0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNjM2LCAxDQotWyBdIFMgLSA2MzcsIDENCi1be10gTEJSQUNFIC0gNjM4LCAxDQotWyAgXSBTIC0gNjM5LCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDY0MSwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA2NDYsIDENCi1bIF0gUyAtIDY0NywgMQ0KLVtibHVlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDY0OCwgNA0KLVsgIF0gUyAtIDY1MiwgMg0KLVt9XSBSQlJBQ0UgLSA2NTQsIDENCi1bDQotXSBTIC0gNjU1LCAyDQotWypdIFNFTEVDVE9SX1VOSVZFUlNBTCAtIDY1NywgMQ0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA2NTgsIDENCi1bbGFuZ10gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA2NTksIDQNCi1bPV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gNjYzLCAxDQotW2ZyXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA2NjQsIDINCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDY2NiwgMQ0KLVsgXSBTIC0gNjY3LCAxDQotW3tdIExCUkFDRSAtIDY2OCwgMQ0KLVsgIF0gUyAtIDY2OSwgMg0KLVtkaXNwbGF5XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDY3MSwgNw0KLVsgXSBTIC0gNjc4LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDY3OSwgMQ0KLVsgXSBTIC0gNjgwLCAxDQotW25vbmVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNjgxLCA0DQotWyAgXSBTIC0gNjg1LCAyDQotW31dIFJCUkFDRSAtIDY4NywgMQ0KLVsNCi1dIFMgLSA2ODgsIDINCi1bKl0gU0VMRUNUT1JfVU5JVkVSU0FMIC0gNjkwLCAxDQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDY5MSwgMQ0KLVtsYW5nXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDY5MiwgNA0KLVt8PV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gNjk2LCAyDQotWyJlbiJdIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDY5OCwgNA0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNzAyLCAxDQotWyBdIFMgLSA3MDMsIDENCi1be10gTEJSQUNFIC0gNzA0LCAxDQotWyAgXSBTIC0gNzA1LCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDcwNywgNQ0KLVsgXSBTIC0gNzEyLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDcxMywgMQ0KLVsgXSBTIC0gNzE0LCAxDQotW3JlZF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA3MTUsIDMNCi1bICBdIFMgLSA3MTgsIDINCi1bfV0gUkJSQUNFIC0gNzIwLCAxDQotWw0KLV0gUyAtIDcyMSwgMg0KLVtESUFMT0dVRV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNzIzLCA4DQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDczMSwgMQ0KLVtjaGFyYWN0ZXJdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNzMyLCA5DQotWz1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDc0MSwgMQ0KLVtyb21lb10gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gNzQyLCA1DQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA3NDcsIDENCi1bDQotXSBTIC0gNzQ4LCAyDQotW3tdIExCUkFDRSAtIDc1MCwgMQ0KLVsgIF0gUyAtIDc1MSwgMg0KLVt2b2ljZS1mYW1pbHldIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNzUzLCAxMg0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA3NjUsIDENCi1bIF0gUyAtIDc2NiwgMQ0KLVsiTGF3cmVuY2UgT2xpdmllciJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDc2NywgMTgNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSA3ODUsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDc4NiwgMQ0KLVtjaGFybGVzXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDc4NywgNw0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDc5NCwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gNzk1LCAxDQotW21hbGVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNzk2LCA0DQotWyAgXSBTIC0gODAwLCAyDQotW31dIFJCUkFDRSAtIDgwMiwgMQ0KLVsNCi1dIFMgLSA4MDMsIDINCi1bRElBTE9HVUVdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDgwNSwgOA0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA4MTMsIDENCi1bIF0gUyAtIDgxNCwgMQ0KLVtjaGFyYWN0ZXJdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gODE1LCA5DQotWyBdIFMgLSA4MjQsIDENCi1bPV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gODI1LCAxDQotWyBdIFMgLSA4MjYsIDENCi1banVsaWV0XSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA4MjcsIDYNCi1bIF0gUyAtIDgzMywgMQ0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gODM0LCAxDQotWw0KLV0gUyAtIDgzNSwgMg0KLVt7XSBMQlJBQ0UgLSA4MzcsIDENCi1bICBdIFMgLSA4MzgsIDINCi1bdm9pY2UtZmFtaWx5XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDg0MCwgMTINCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gODUyLCAxDQotWyBdIFMgLSA4NTMsIDENCi1bIlZpdmllbiBMZWlnaCJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDg1NCwgMTQNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSA4NjgsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDg2OSwgMQ0KLVt2aWN0b3JpYV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA4NzAsIDgNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSA4NzgsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDg3OSwgMQ0KLVtmZW1hbGVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gODgwLCA2DQotWyAgXSBTIC0gODg2LCAyDQotW31dIFJCUkFDRSAtIDg4OCwgMQ0KLVsNCi1dIFMgLSA4ODksIDINCi1bKl0gU0VMRUNUT1JfVU5JVkVSU0FMIC0gODkxLCAxDQotWy5wYXN0b3JhbF0gU0VMRUNUT1JfQ0xBU1MgLSA4OTIsIDkNCi1bIF0gUyAtIDkwMSwgMQ0KLVt7XSBMQlJBQ0UgLSA5MDIsIDENCi1bICBdIFMgLSA5MDMsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gOTA1LCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDkxMCwgMQ0KLVsgXSBTIC0gOTExLCAxDQotW2dyZWVuXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDkxMiwgNQ0KLVsgIF0gUyAtIDkxNywgMg0KLVt9XSBSQlJBQ0UgLSA5MTksIDENCi1bDQotXSBTIC0gOTIwLCAyDQotWy5wYXN0b3JhbF0gU0VMRUNUT1JfQ0xBU1MgLSA5MjIsIDkNCi1bIF0gUyAtIDkzMSwgMQ0KLVt7XSBMQlJBQ0UgLSA5MzIsIDENCi1bICBdIFMgLSA5MzMsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gOTM1LCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDk0MCwgMQ0KLVsgXSBTIC0gOTQxLCAxDQotW2dyZWVuXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDk0MiwgNQ0KLVsgIF0gUyAtIDk0NywgMg0KLVt9XSBSQlJBQ0UgLSA5NDksIDENCi1bDQotXSBTIC0gOTUwLCAyDQotW0gxXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA5NTIsIDINCi1bLnBhc3RvcmFsXSBTRUxFQ1RPUl9DTEFTUyAtIDk1NCwgOQ0KLVsgXSBTIC0gOTYzLCAxDQotW3tdIExCUkFDRSAtIDk2NCwgMQ0KLVsgIF0gUyAtIDk2NSwgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA5NjcsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gOTcyLCAxDQotWyBdIFMgLSA5NzMsIDENCi1bZ3JlZW5dIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gOTc0LCA1DQotWyAgXSBTIC0gOTc5LCAyDQotW31dIFJCUkFDRSAtIDk4MSwgMQ0KLVsNCi1dIFMgLSA5ODIsIDINCi1bcF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gOTg0LCAxDQotWy5wYXN0b3JhbF0gU0VMRUNUT1JfQ0xBU1MgLSA5ODUsIDkNCi1bLm1hcmluZV0gU0VMRUNUT1JfQ0xBU1MgLSA5OTQsIDcNCi1bIF0gUyAtIDEwMDEsIDENCi1be10gTEJSQUNFIC0gMTAwMiwgMQ0KLVsgIF0gUyAtIDEwMDMsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTAwNSwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMDEwLCAxDQotWyBdIFMgLSAxMDExLCAxDQotW2dyZWVuXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDEwMTIsIDUNCi1bICBdIFMgLSAxMDE3LCAyDQotW31dIFJCUkFDRSAtIDEwMTksIDENCi1bDQotXSBTIC0gMTAyMCwgMg0KLVtoMV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTAyMiwgMg0KLVsjY2hhcHRlcjFdIFNFTEVDVE9SX0lEIC0gMTAyNCwgOQ0KLVsgXSBTIC0gMTAzMywgMQ0KLVt7XSBMQlJBQ0UgLSAxMDM0LCAxDQotWyAgXSBTIC0gMTAzNSwgMg0KLVt0ZXh0LWFsaWduXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEwMzcsIDEwDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEwNDcsIDENCi1bIF0gUyAtIDEwNDgsIDENCi1bY2VudGVyXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDEwNDksIDYNCi1bICBdIFMgLSAxMDU1LCAyDQotW31dIFJCUkFDRSAtIDEwNTcsIDENCi1bDQotXSBTIC0gMTA1OCwgMg0KLVtkaXZdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEwNjAsIDMNCi1bIF0gUyAtIDEwNjMsIDENCi1bPl0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDEwNjQsIDENCi1bIF0gUyAtIDEwNjUsIDENCi1bcF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTA2NiwgMQ0KLVs6Zmlyc3QtY2hpbGRdIFNFTEVDVE9SX1BTRVVETyAtIDEwNjcsIDEyDQotWyBdIFMgLSAxMDc5LCAxDQotW3tdIExCUkFDRSAtIDEwODAsIDENCi1bICBdIFMgLSAxMDgxLCAyDQotW3RleHQtaW5kZW50XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEwODMsIDExDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEwOTQsIDENCi1bIF0gUyAtIDEwOTUsIDENCi1bMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTA5NiwgMQ0KLVsgIF0gUyAtIDEwOTcsIDINCi1bfV0gUkJSQUNFIC0gMTA5OSwgMQ0KLVsNCi1dIFMgLSAxMTAwLCAyDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDExMDIsIDENCi1bOmZpcnN0LWNoaWxkXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMTAzLCAxMg0KLVsgXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMTExNSwgMQ0KLVtlbV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTExNiwgMg0KLVsgXSBTIC0gMTExOCwgMQ0KLVt7XSBMQlJBQ0UgLSAxMTE5LCAxDQotWyAgXSBTIC0gMTEyMCwgMg0KLVtmb250LXdlaWdodF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMTIyLCAxMQ0KLVsgXSBTIC0gMTEzMywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMTM0LCAxDQotWyBdIFMgLSAxMTM1LCAxDQotW2JvbGRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTEzNiwgNA0KLVsgIF0gUyAtIDExNDAsIDINCi1bfV0gUkJSQUNFIC0gMTE0MiwgMQ0KLVsNCi1dIFMgLSAxMTQzLCAyDQotWypdIFNFTEVDVE9SX1VOSVZFUlNBTCAtIDExNDUsIDENCi1bIF0gUyAtIDExNDYsIDENCi1bPl0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDExNDcsIDENCi1bIF0gUyAtIDExNDgsIDENCi1bYV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTE0OSwgMQ0KLVs6Zmlyc3QtY2hpbGRdIFNFTEVDVE9SX1BTRVVETyAtIDExNTAsIDEyDQotWyBdIFMgLSAxMTYyLCAxDQotW3tdIExCUkFDRSAtIDExNjMsIDENCi1bICBdIFMgLSAxMTY0LCAyDQotW2ZvbnQtd2VpZ2h0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDExNjYsIDExDQotWyBdIFMgLSAxMTc3LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDExNzgsIDENCi1bIF0gUyAtIDExNzksIDENCi1bYm9sZF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMTgwLCA0DQotWyAgXSBTIC0gMTE4NCwgMg0KLVt9XSBSQlJBQ0UgLSAxMTg2LCAxDQotWw0KLV0gUyAtIDExODcsIDINCi1bYV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTE4OSwgMQ0KLVs6Zmlyc3QtY2hpbGRdIFNFTEVDVE9SX1BTRVVETyAtIDExOTAsIDEyDQotWyBdIFMgLSAxMjAyLCAxDQotW3tdIExCUkFDRSAtIDEyMDMsIDENCi1bICBdIFMgLSAxMjA0LCAyDQotW2ZvbnQtd2VpZ2h0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEyMDYsIDExDQotWyBdIFMgLSAxMjE3LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEyMTgsIDENCi1bIF0gUyAtIDEyMTksIDENCi1bYm9sZF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMjIwLCA0DQotWyAgXSBTIC0gMTIyNCwgMg0KLVt9XSBSQlJBQ0UgLSAxMjI2LCAxDQotWw0KLV0gUyAtIDEyMjcsIDINCi1bYV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTIyOSwgMQ0KLVsuZXh0ZXJuYWxdIFNFTEVDVE9SX0NMQVNTIC0gMTIzMCwgOQ0KLVs6dmlzaXRlZF0gU0VMRUNUT1JfUFNFVURPIC0gMTIzOSwgOA0KLVsgXSBTIC0gMTI0NywgMQ0KLVt7XSBMQlJBQ0UgLSAxMjQ4LCAxDQotWyAgXSBTIC0gMTI0OSwgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMjUxLCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEyNTYsIDENCi1bIF0gUyAtIDEyNTcsIDENCi1bYmx1ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMjU4LCA0DQotWyAgXSBTIC0gMTI2MiwgMg0KLVt9XSBSQlJBQ0UgLSAxMjY0LCAxDQotWw0KLV0gUyAtIDEyNjUsIDINCi1bYV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTI2NywgMQ0KLVs6Zm9jdXNdIFNFTEVDVE9SX1BTRVVETyAtIDEyNjgsIDYNCi1bOmhvdmVyXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMjc0LCA2DQotWyBdIFMgLSAxMjgwLCAxDQotW3tdIExCUkFDRSAtIDEyODEsIDENCi1bICBdIFMgLSAxMjgyLCAyDQotW2JhY2tncm91bmRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTI4NCwgMTANCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTI5NCwgMQ0KLVsgXSBTIC0gMTI5NSwgMQ0KLVt3aGl0ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMjk2LCA1DQotWyAgXSBTIC0gMTMwMSwgMg0KLVt9XSBSQlJBQ0UgLSAxMzAzLCAxDQotWw0KLV0gUyAtIDEzMDQsIDINCi1baHRtbF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTMwNiwgNA0KLVs6bGFuZyhmcildIFNFTEVDVE9SX1BTRVVETyAtIDEzMTAsIDkNCi1bIF0gUyAtIDEzMTksIDENCi1be10gTEJSQUNFIC0gMTMyMCwgMQ0KLVsgIF0gUyAtIDEzMjEsIDINCi1bcXVvdGVzXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEzMjMsIDYNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTMyOSwgMQ0KLVsgXSBTIC0gMTMzMCwgMQ0KLVsnPDwnXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMzMxLCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMzM1LCAxDQotWyc+PiddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDEzMzYsIDQNCi1bICBdIFMgLSAxMzQwLCAyDQotW31dIFJCUkFDRSAtIDEzNDIsIDENCi1bDQotXSBTIC0gMTM0MywgMg0KLVtodG1sXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMzQ1LCA0DQotWzpsYW5nKGRlKV0gU0VMRUNUT1JfUFNFVURPIC0gMTM0OSwgOQ0KLVsgXSBTIC0gMTM1OCwgMQ0KLVt7XSBMQlJBQ0UgLSAxMzU5LCAxDQotWyAgXSBTIC0gMTM2MCwgMg0KLVtxdW90ZXNdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTM2MiwgNg0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMzY4LCAxDQotWyBdIFMgLSAxMzY5LCAxDQotWyc+PiddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDEzNzAsIDQNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEzNzQsIDENCi1bJzw8J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTM3NSwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTM3OSwgMQ0KLVsnXDIwMzknXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMzgwLCA3DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMzg3LCAxDQotWydcMjAzQSddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDEzODgsIDcNCi1bICBdIFMgLSAxMzk1LCAyDQotW31dIFJCUkFDRSAtIDEzOTcsIDENCi1bDQotXSBTIC0gMTM5OCwgMg0KLVs6bGFuZyhmcildIFNFTEVDVE9SX1BTRVVETyAtIDE0MDAsIDkNCi1bIF0gUyAtIDE0MDksIDENCi1bPl0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDE0MTAsIDENCi1bIF0gUyAtIDE0MTEsIDENCi1bUV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTQxMiwgMQ0KLVsgXSBTIC0gMTQxMywgMQ0KLVt7XSBMQlJBQ0UgLSAxNDE0LCAxDQotWyAgXSBTIC0gMTQxNSwgMg0KLVtxdW90ZXNdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTQxNywgNg0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNDIzLCAxDQotWyBdIFMgLSAxNDI0LCAxDQotWyc8PCddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE0MjUsIDQNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE0MjksIDENCi1bJz4+J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTQzMCwgNA0KLVsgIF0gUyAtIDE0MzQsIDINCi1bfV0gUkJSQUNFIC0gMTQzNiwgMQ0KLVsNCi1dIFMgLSAxNDM3LCAyDQotWzpsYW5nKGRlKV0gU0VMRUNUT1JfUFNFVURPIC0gMTQzOSwgOQ0KLVsgXSBTIC0gMTQ0OCwgMQ0KLVs+XSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMTQ0OSwgMQ0KLVsgXSBTIC0gMTQ1MCwgMQ0KLVtRXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxNDUxLCAxDQotWyBdIFMgLSAxNDUyLCAxDQotW3tdIExCUkFDRSAtIDE0NTMsIDENCi1bICBdIFMgLSAxNDU0LCAyDQotW3F1b3Rlc10gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNDU2LCA2DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE0NjIsIDENCi1bIF0gUyAtIDE0NjMsIDENCi1bJz4+J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTQ2NCwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTQ2OCwgMQ0KLVsnPDwnXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNDY5LCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNDczLCAxDQotWydcMjAzOSddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE0NzQsIDcNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE0ODEsIDENCi1bJ1wyMDNBJ10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTQ4MiwgNw0KLVsgIF0gUyAtIDE0ODksIDINCi1bfV0gUkJSQUNFIC0gMTQ5MSwgMQ0KLVsNCi1dIFMgLSAxNDkyLCAyDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE0OTQsIDENCi1bOmZpcnN0LWxldHRlcl0gU0VMRUNUT1JfUFNFVURPIC0gMTQ5NSwgMTMNCi1bIF0gUyAtIDE1MDgsIDENCi1be10gTEJSQUNFIC0gMTUwOSwgMQ0KLVsgIF0gUyAtIDE1MTAsIDINCi1bZm9udC1zaXplXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE1MTIsIDkNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTUyMSwgMQ0KLVsgXSBTIC0gMTUyMiwgMQ0KLVszZW1dIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDE1MjMsIDMNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTUyNiwgMQ0KLVsgXSBTIC0gMTUyNywgMQ0KLVtmb250LXdlaWdodF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNTI4LCAxMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNTM5LCAxDQotWyBdIFMgLSAxNTQwLCAxDQotW25vcm1hbF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxNTQxLCA2DQotWyAgXSBTIC0gMTU0NywgMg0KLVt9XSBSQlJBQ0UgLSAxNTQ5LCAxDQotWw0KLV0gUyAtIDE1NTAsIDINCi1bcF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTU1MiwgMQ0KLVsuc3BlY2lhbF0gU0VMRUNUT1JfQ0xBU1MgLSAxNTUzLCA4DQotWzpiZWZvcmVdIFNFTEVDVE9SX1BTRVVETyAtIDE1NjEsIDcNCi1bIF0gUyAtIDE1NjgsIDENCi1be10gTEJSQUNFIC0gMTU2OSwgMQ0KLVsgXSBTIC0gMTU3MCwgMQ0KLVtjb250ZW50XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE1NzEsIDcNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTU3OCwgMQ0KLVsgXSBTIC0gMTU3OSwgMQ0KLVsiU3BlY2lhbCEgIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTU4MCwgMTENCi1bIF0gUyAtIDE1OTEsIDENCi1bfV0gUkJSQUNFIC0gMTU5MiwgMQ0KLVsNCi1dIFMgLSAxNTkzLCAyDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE1OTUsIDENCi1bLnNwZWNpYWxdIFNFTEVDVE9SX0NMQVNTIC0gMTU5NiwgOA0KLVs6Zmlyc3QtbGV0dGVyXSBTRUxFQ1RPUl9QU0VVRE8gLSAxNjA0LCAxMw0KLVsgXSBTIC0gMTYxNywgMQ0KLVt7XSBMQlJBQ0UgLSAxNjE4LCAxDQotWyBdIFMgLSAxNjE5LCAxDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE2MjAsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTYyNSwgMQ0KLVsgXSBTIC0gMTYyNiwgMQ0KLVsjZmZkODAwXSBERUNMQVJBVElPTl9WQUxVRV9IQVNIIC0gMTYyNywgNw0KLVsgXSBTIC0gMTYzNCwgMQ0KLVt9XSBSQlJBQ0UgLSAxNjM1LCAxDQotWw0KLV0gUyAtIDE2MzYsIDINCi1bQk9EWV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTYzOCwgNA0KLVsgXSBTIC0gMTY0MiwgMQ0KLVt7XSBMQlJBQ0UgLSAxNjQzLCAxDQotWyBdIFMgLSAxNjQ0LCAxDQotW2ZvbnQtZmFtaWx5XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE2NDUsIDExDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE2NTYsIDENCi1bIF0gUyAtIDE2NTcsIDENCi1bQmFza2VydmlsbGVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTY1OCwgMTENCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxNjY5LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNjcwLCAxDQotWyJIZWlzaSBNaW5jaG8gVzMiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNjcxLCAxNw0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE2ODgsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE2ODksIDENCi1bU3ltYm9sXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE2OTAsIDYNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxNjk2LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNjk3LCAxDQotW3NlcmlmXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE2OTgsIDUNCi1bIF0gUyAtIDE3MDMsIDENCi1bfV0gUkJSQUNFIC0gMTcwNCwgMQ0KLVsNCi1dIFMgLSAxNzA1LCAyDQotWypdIFNFTEVDVE9SX1VOSVZFUlNBTCAtIDE3MDcsIDENCi1bOmxhbmcoamEtanApXSBTRUxFQ1RPUl9QU0VVRE8gLSAxNzA4LCAxMg0KLVsgXSBTIC0gMTcyMCwgMQ0KLVt7XSBMQlJBQ0UgLSAxNzIxLCAxDQotWyBdIFMgLSAxNzIyLCAxDQotW2ZvbnRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTcyMywgNA0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNzI3LCAxDQotWyBdIFMgLSAxNzI4LCAxDQotWzkwMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTcyOSwgMw0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTczMiwgMQ0KLVsxNHB0XSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxNzMzLCA0DQotWy9dIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTczNywgMQ0KLVsxNnB0XSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxNzM4LCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNzQyLCAxDQotWyJIZWlzZWkgTWluY2hvIFc5Il0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTc0MywgMTgNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxNzYxLCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNzYyLCAxDQotW3NlcmlmXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE3NjMsIDUNCi1bIF0gUyAtIDE3NjgsIDENCi1bfV0gUkJSQUNFIC0gMTc2OSwgMQ0KLVsNCi1dIFMgLSAxNzcwLCAyDQotWypdIFNFTEVDVE9SX1VOSVZFUlNBTCAtIDE3NzIsIDENCi1bOmxhbmcoemgtdHcpXSBTRUxFQ1RPUl9QU0VVRE8gLSAxNzczLCAxMg0KLVsgXSBTIC0gMTc4NSwgMQ0KLVt7XSBMQlJBQ0UgLSAxNzg2LCAxDQotWyBdIFMgLSAxNzg3LCAxDQotW2ZvbnRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTc4OCwgNA0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNzkyLCAxDQotWyBdIFMgLSAxNzkzLCAxDQotWzgwMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTc5NCwgMw0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTc5NywgMQ0KLVsxNHB0XSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxNzk4LCA0DQotWy9dIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTgwMiwgMQ0KLVsxNi41cHRdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDE4MDMsIDYNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE4MDksIDENCi1bIkxpIFN1bmciXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxODEwLCA5DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTgxOSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTgyMCwgMQ0KLVtzZXJpZl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxODIxLCA1DQotWyBdIFMgLSAxODI2LCAxDQotW31dIFJCUkFDRSAtIDE4MjcsIDENCi1bDQotXSBTIC0gMTgyOCwgMg0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwNi5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwNi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyMjE3YzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDYuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLVtkZWNsYXJhdGlvbl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMCwgMTENCi1bIF0gUyAtIDExLCAxDQotW3tdIExCUkFDRSAtIDEyLCAxDQotWw0KLQldIFMgLSAxMywgMw0KLVtkaW1lbnNpb25dIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTYsIDkNCi1bIF0gUyAtIDI1LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDI2LCAxDQotWyBdIFMgLSAyNywgMQ0KLVsxMDBleF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMjgsIDUNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMzMsIDENCi1bDQotCV0gUyAtIDM0LCAzDQotW2Z1bmN0aW9uXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDM3LCA4DQotWyBdIFMgLSA0NSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA0NiwgMQ0KLVsgXSBTIC0gNDcsIDENCi1bcmVjdChdIERFQ0xBUkFUSU9OX1ZBTFVFX0ZVTkNUSU9OIC0gNDgsIDUNCi1bMTAwXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSA1MywgMw0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDU2LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA1NywgMQ0KLVsyMDBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDU4LCAzDQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gNjEsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDYyLCAxDQotWzMwMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gNjMsIDMNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSA2NiwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gNjcsIDENCi1bNDAwXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSA2OCwgMw0KLVspXSBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRSAtIDcxLCAxDQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gNzIsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDczLCAxDQotW2Zvcm1hdChdIERFQ0xBUkFUSU9OX1ZBTFVFX0ZVTkNUSU9OIC0gNzQsIDcNCi1bImludGVsbGlmb250Il0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gODEsIDEzDQotWyldIERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFIC0gOTQsIDENCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSA5NSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gOTYsIDENCi1bbG9jYWwoXSBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTiAtIDk3LCA2DQotWyJFeGNlbHNpb3IgQ3lyaWxsbGljIFVwcmlnaHQiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMDMsIDI5DQotWyldIERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFIC0gMTMyLCAxDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDEzMywgMQ0KLVsNCi0JXSBTIC0gMTM0LCAzDQotW2hhc2hdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTM3LCA0DQotWyBdIFMgLSAxNDEsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTQyLCAxDQotWyBdIFMgLSAxNDMsIDENCi1bI2FhYmJjY10gREVDTEFSQVRJT05fVkFMVUVfSEFTSCAtIDE0NCwgNw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxNTEsIDENCi1bDQotCV0gUyAtIDE1MiwgMw0KLVtpZGVudF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNTUsIDUNCi1bIF0gUyAtIDE2MCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNjEsIDENCi1bIF0gUyAtIDE2MiwgMQ0KLVthbnldIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTYzLCAzDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDE2NiwgMQ0KLVsNCi0JXSBTIC0gMTY3LCAzDQotW251bWJlcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNzAsIDYNCi1bIF0gUyAtIDE3NiwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNzcsIDENCi1bIF0gUyAtIDE3OCwgMQ0KLVs5OTk5OV0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTc5LCA1DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDE4NCwgMQ0KLVsNCi0JXSBTIC0gMTg1LCAzDQotW3BlcmNlbnRhZ2VdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTg4LCAxMA0KLVsgXSBTIC0gMTk4LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE5OSwgMQ0KLVsgXSBTIC0gMjAwLCAxDQotWzEwMCVdIERFQ0xBUkFUSU9OX1ZBTFVFX1BFUkNFTlRBR0UgLSAyMDEsIDQNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMjA1LCAxDQotWw0KLQldIFMgLSAyMDYsIDMNCi1bc3RyaW5nXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDIwOSwgNg0KLVsgXSBTIC0gMjE1LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDIxNiwgMQ0KLVsgXSBTIC0gMjE3LCAxDQotWyJzdHJpbmciXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAyMTgsIDgNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMjI2LCAxDQotWw0KLQldIFMgLSAyMjcsIDMNCi1bdW5pY29kZS1yYW5nZV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAyMzAsIDEzDQotWyBdIFMgLSAyNDMsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMjQ0LCAxDQotWyBdIFMgLSAyNDUsIDENCi1bVSs/P10gREVDTEFSQVRJT05fVkFMVUVfVU5JQ09ERV9SQU5HRSAtIDI0NiwgNA0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDI1MCwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMjUxLCAxDQotW1UrMTAwLTIyMF0gREVDTEFSQVRJT05fVkFMVUVfVU5JQ09ERV9SQU5HRSAtIDI1MiwgOQ0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDI2MSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMjYyLCAxDQotW1UrND8/XSBERUNMQVJBVElPTl9WQUxVRV9VTklDT0RFX1JBTkdFIC0gMjYzLCA1DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDI2OCwgMQ0KLVsNCi1dIFMgLSAyNjksIDINCi1bfV0gUkJSQUNFIC0gMjcxLCAxDQotWw0KLV0gUyAtIDI3MiwgMg0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwNy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwNy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0YjMwNzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDcuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNTgzICswLDAgQEAKLVtAY2hhcnNldF0gQ0hBUlNFVCAtIDAsIDgNCi1bIF0gUyAtIDgsIDENCi1bIklTTy04ODU5LTEiXSBTVFJJTkcgLSA5LCAxMg0KLVs7XSBERUxJTUlURVIgLSAyMSwgMQ0KLVsNCi0NCi1dIFMgLSAyMiwgNA0KLVtAaW1wb3J0XSBJTVBPUlQgLSAyNiwgNw0KLVsgXSBTIC0gMzMsIDENCi1bdXJsKCIuLi9zYW1wbGUyLmNzcyIpXSBVUkkgLSAzNCwgMjENCi1bIF0gUyAtIDU1LCAxDQotW3Byb2plY3Rpb25dIE1FRElVTSAtIDU2LCAxMA0KLVssXSBNRURJQV9TRVBBUkFUT1IgLSA2NiwgMQ0KLVsgXSBTIC0gNjcsIDENCi1bdHZdIE1FRElVTSAtIDY4LCAyDQotWztdIERFTElNSVRFUiAtIDcwLCAxDQotWw0KLQ0KLV0gUyAtIDcxLCA0DQotW0JPRFldIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDc1LCA0DQotWyBdIFMgLSA3OSwgMQ0KLVt7XSBMQlJBQ0UgLSA4MCwgMQ0KLVsNCi0gICAgXSBTIC0gODEsIDYNCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gODcsIDUNCi1bIF0gUyAtIDkyLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDkzLCAxDQotWyBdIFMgLSA5NCwgMQ0KLVtibGFja10gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA5NSwgNQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxMDAsIDENCi1bDQotICAgIF0gUyAtIDEwMSwgNg0KLVt0ZXh0LWFsaWduXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEwNywgMTANCi1bIF0gUyAtIDExNywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMTgsIDENCi1bIF0gUyAtIDExOSwgMQ0KLVtjZW50ZXJdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTIwLCA2DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDEyNiwgMQ0KLVsNCi0gICAgXSBTIC0gMTI3LCA2DQotW2JhY2tncm91bmQtY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTMzLCAxNg0KLVsgXSBTIC0gMTQ5LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE1MCwgMQ0KLVsgXSBTIC0gMTUxLCAxDQotW3JnYihdIERFQ0xBUkFUSU9OX1ZBTFVFX0ZVTkNUSU9OIC0gMTUyLCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNTYsIDENCi1bMTgxXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxNTcsIDMNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxNjAsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE2MSwgMQ0KLVsyNTNdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDE2MiwgMw0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE2NSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTY2LCAxDQotWzIxMV0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTY3LCAzDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNzAsIDENCi1bKV0gREVDTEFSQVRJT05fVkFMVUVfUEFSRU5USEVTSVNfQ0xPU0UgLSAxNzEsIDENCi1bDQotXSBTIC0gMTcyLCAyDQotW31dIFJCUkFDRSAtIDE3NCwgMQ0KLVsNCi0NCi1dIFMgLSAxNzUsIDQNCi1bVUxdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE3OSwgMg0KLVsgXSBTIC0gMTgxLCAxDQotW3tdIExCUkFDRSAtIDE4MiwgMQ0KLVsNCi0gICAgXSBTIC0gMTgzLCA2DQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE4OSwgNQ0KLVsgXSBTIC0gMTk0LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE5NSwgMQ0KLVsgXSBTIC0gMTk2LCAxDQotW2JsYWNrXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE5NywgNQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAyMDIsIDENCi1bDQotICAgIF0gUyAtIDIwMywgNg0KLVtsaXN0LXN0eWxlLWltYWdlXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDIwOSwgMTYNCi1bIF0gUyAtIDIyNSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAyMjYsIDENCi1bIF0gUyAtIDIyNywgMQ0KLVt1cmwoImltYWdlcy9sX2EwMS5naWYiKV0gREVDTEFSQVRJT05fVkFMVUVfVVJJIC0gMjI4LCAyMw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAyNTEsIDENCi1bDQotICAgIF0gUyAtIDI1MiwgNg0KLVtsaXN0LXN0eWxlLXBvc2l0aW9uXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDI1OCwgMTkNCi1bIF0gUyAtIDI3NywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAyNzgsIDENCi1bIF0gUyAtIDI3OSwgMQ0KLVtvdXRzaWRlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDI4MCwgNw0KLVsNCi1dIFMgLSAyODcsIDINCi1bfV0gUkJSQUNFIC0gMjg5LCAxDQotWw0KLQ0KLV0gUyAtIDI5MCwgNA0KLVtIMV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMjk0LCAyDQotWyBdIFMgLSAyOTYsIDENCi1be10gTEJSQUNFIC0gMjk3LCAxDQotWw0KLSAgICBdIFMgLSAyOTgsIDYNCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMzA0LCA1DQotWyBdIFMgLSAzMDksIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMzEwLCAxDQotWyBdIFMgLSAzMTEsIDENCi1bd2hpdGVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMzEyLCA1DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDMxNywgMQ0KLVsNCi0gICAgXSBTIC0gMzE4LCA2DQotW3RleHQtYWxpZ25dIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMzI0LCAxMA0KLVsgXSBTIC0gMzM0LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDMzNSwgMQ0KLVsgXSBTIC0gMzM2LCAxDQotW2NlbnRlcl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAzMzcsIDYNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMzQzLCAxDQotWw0KLSAgICBdIFMgLSAzNDQsIDYNCi1bYm9yZGVyLWxlZnQtY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMzUwLCAxNw0KLVsgXSBTIC0gMzY3LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDM2OCwgMQ0KLVsgXSBTIC0gMzY5LCAxDQotWyM5OTY2NjZdIERFQ0xBUkFUSU9OX1ZBTFVFX0hBU0ggLSAzNzAsIDcNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMzc3LCAxDQotWw0KLSAgICBdIFMgLSAzNzgsIDYNCi1bcGFkZGluZy10b3BdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMzg0LCAxMQ0KLVsgXSBTIC0gMzk1LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDM5NiwgMQ0KLVsgXSBTIC0gMzk3LCAxDQotWzBweF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMzk4LCAzDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDQwMSwgMQ0KLVsNCi0gICAgXSBTIC0gNDAyLCA2DQotW3BhZGRpbmctcmlnaHRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNDA4LCAxMw0KLVsgXSBTIC0gNDIxLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDQyMiwgMQ0KLVsgXSBTIC0gNDIzLCAxDQotWzFjbV0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gNDI0LCAzDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDQyNywgMQ0KLVsNCi0gICAgXSBTIC0gNDI4LCA2DQotW3BhZGRpbmctYm90dG9tXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDQzNCwgMTQNCi1bIF0gUyAtIDQ0OCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA0NDksIDENCi1bIF0gUyAtIDQ1MCwgMQ0KLVsyXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSA0NTEsIDENCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNDUyLCAxDQotWw0KLSAgICBdIFMgLSA0NTMsIDYNCi1bcGFkZGluZy1sZWZ0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDQ1OSwgMTINCi1bIF0gUyAtIDQ3MSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA0NzIsIDENCi1bIF0gUyAtIDQ3MywgMQ0KLVszZW1dIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDQ3NCwgMw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA0NzcsIDENCi1bDQotICAgIF0gUyAtIDQ3OCwgNg0KLVtib3JkZXItc3R5bGVdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNDg0LCAxMg0KLVsgXSBTIC0gNDk2LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDQ5NywgMQ0KLVsgXSBTIC0gNDk4LCAxDQotW3NvbGlkXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDQ5OSwgNQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA1MDQsIDENCi1bDQotICAgIF0gUyAtIDUwNSwgNg0KLVtib3JkZXItdG9wLXdpZHRoXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDUxMSwgMTYNCi1bIF0gUyAtIDUyNywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA1MjgsIDENCi1bIF0gUyAtIDUyOSwgMQ0KLVs0LjVleF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gNTMwLCA1DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDUzNSwgMQ0KLVsNCi0gICAgXSBTIC0gNTM2LCA2DQotW2JvcmRlci1yaWdodC13aWR0aF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA1NDIsIDE4DQotWyBdIFMgLSA1NjAsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNTYxLCAxDQotWyBdIFMgLSA1NjIsIDENCi1bNWluXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSA1NjMsIDMNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNTY2LCAxDQotWw0KLSAgICBdIFMgLSA1NjcsIDYNCi1bYm9yZGVyLWJvdHRvbS13aWR0aF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA1NzMsIDE5DQotWyBdIFMgLSA1OTIsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNTkzLCAxDQotWyBdIFMgLSA1OTQsIDENCi1bNi4wMm1tXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSA1OTUsIDYNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNjAxLCAxDQotWw0KLSAgICBdIFMgLSA2MDIsIDYNCi1bYm9yZGVyLWxlZnQtd2lkdGhdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNjA4LCAxNw0KLVsgXSBTIC0gNjI1LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDYyNiwgMQ0KLVsgXSBTIC0gNjI3LCAxDQotWzddIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDYyOCwgMQ0KLVsNCi1dIFMgLSA2MjksIDINCi1bfV0gUkJSQUNFIC0gNjMxLCAxDQotWw0KLQ0KLV0gUyAtIDYzMiwgNA0KLVtIMV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNjM2LCAyDQotWzpiZWZvcmVdIFNFTEVDVE9SX1BTRVVETyAtIDYzOCwgNw0KLVsgXSBTIC0gNjQ1LCAxDQotW3tdIExCUkFDRSAtIDY0NiwgMQ0KLVsNCi0gICAgXSBTIC0gNjQ3LCA2DQotW2NvbnRlbnRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNjUzLCA3DQotWyBdIFMgLSA2NjAsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNjYxLCAxDQotWyBdIFMgLSA2NjIsIDENCi1bIkNoYXB0ZXIgIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gNjYzLCAxMA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gNjczLCAxDQotW2NvdW50ZXIoXSBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTiAtIDY3NCwgOA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gNjgyLCAxDQotW2NoYXB0ZXJdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNjgzLCA3DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA2OTAsIDENCi1bKV0gREVDTEFSQVRJT05fVkFMVUVfUEFSRU5USEVTSVNfQ0xPU0UgLSA2OTEsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDY5MiwgMQ0KLVsiLiAiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSA2OTMsIDQNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNjk3LCAxDQotWw0KLSAgICBdIFMgLSA2OTgsIDYNCi1bY291bnRlci1pbmNyZW1lbnRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNzA0LCAxNw0KLVsgXSBTIC0gNzIxLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDcyMiwgMQ0KLVsgXSBTIC0gNzIzLCAxDQotW2NoYXB0ZXJdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNzI0LCA3DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDczMSwgMQ0KLVsNCi0gICAgXSBTIC0gNzMyLCA2DQotW2NvdW50ZXItcmVzZXRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNzM4LCAxMw0KLVsgXSBTIC0gNzUxLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDc1MiwgMQ0KLVsgXSBTIC0gNzUzLCAxDQotW3NlY3Rpb25dIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNzU0LCA3DQotWw0KLV0gUyAtIDc2MSwgMg0KLVt9XSBSQlJBQ0UgLSA3NjMsIDENCi1bDQotDQotXSBTIC0gNzY0LCA0DQotW0lNR10gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNzY4LCAzDQotWzpiZWZvcmVdIFNFTEVDVE9SX1BTRVVETyAtIDc3MSwgNw0KLVsgXSBTIC0gNzc4LCAxDQotW3tdIExCUkFDRSAtIDc3OSwgMQ0KLVtjb250ZW50XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDc4MCwgNw0KLVsgXSBTIC0gNzg3LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDc4OCwgMQ0KLVsgXSBTIC0gNzg5LCAxDQotW2F0dHIoXSBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTiAtIDc5MCwgNQ0KLVthbHRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNzk1LCAzDQotWyldIERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFIC0gNzk4LCAxDQotW31dIFJCUkFDRSAtIDc5OSwgMQ0KLVsNCi0NCi1dIFMgLSA4MDAsIDQNCi1bRElWXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA4MDQsIDMNCi1bLnNhbXBsZV0gU0VMRUNUT1JfQ0xBU1MgLSA4MDcsIDcNCi1bIF0gUyAtIDgxNCwgMQ0KLVt7XSBMQlJBQ0UgLSA4MTUsIDENCi1bDQotICAgIF0gUyAtIDgxNiwgNg0KLVtmb250LWZhbWlseV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA4MjIsIDExDQotWyBdIFMgLSA4MzMsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gODM0LCAxDQotWyBdIFMgLSA4MzUsIDENCi1bIlJvYnNvbiBDZWx0aWMiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSA4MzYsIDE1DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gODUxLCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA4NTIsIDENCi1bc2Fucy1zZXJpZl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA4NTMsIDEwDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDg2MywgMQ0KLVsNCi0gICAgXSBTIC0gODY0LCA2DQotW3Bvc2l0aW9uXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDg3MCwgOA0KLVsgXSBTIC0gODc4LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDg3OSwgMQ0KLVsgXSBTIC0gODgwLCAxDQotW2Fic29sdXRlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDg4MSwgOA0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA4ODksIDENCi1bDQotICAgIF0gUyAtIDg5MCwgNg0KLVtsZWZ0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDg5NiwgNA0KLVsgXSBTIC0gOTAwLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDkwMSwgMQ0KLVsgXSBTIC0gOTAyLCAxDQotWzgzMy41cGNdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDkwMywgNw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA5MTAsIDENCi1bDQotICAgIF0gUyAtIDkxMSwgNg0KLVt0b3BdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gOTE3LCAzDQotWyBdIFMgLSA5MjAsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gOTIxLCAxDQotWyBdIFMgLSA5MjIsIDENCi1bOTAlXSBERUNMQVJBVElPTl9WQUxVRV9QRVJDRU5UQUdFIC0gOTIzLCAzDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDkyNiwgMQ0KLVsNCi0gICAgXSBTIC0gOTI3LCA2DQotW3dpZHRoXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDkzMywgNQ0KLVsgXSBTIC0gOTM4LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDkzOSwgMQ0KLVsgXSBTIC0gOTQwLCAxDQotWzEwMHB0XSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSA5NDEsIDUNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gOTQ2LCAxDQotWw0KLSAgICBdIFMgLSA5NDcsIDYNCi1baGVpZ2h0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDk1MywgNg0KLVsgXSBTIC0gOTU5LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDk2MCwgMQ0KLVsgXSBTIC0gOTYxLCAxDQotWzExMC43NzdweF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gOTYyLCA5DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDk3MSwgMQ0KLVsNCi0gICAgXSBTIC0gOTcyLCA2DQotW2NsaXBdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gOTc4LCA0DQotWyBdIFMgLSA5ODIsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gOTgzLCAxDQotWyBdIFMgLSA5ODQsIDENCi1bcmVjdChdIERFQ0xBUkFUSU9OX1ZBTFVFX0ZVTkNUSU9OIC0gOTg1LCA1DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA5OTAsIDENCi1bLTVweF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA5OTEsIDQNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSA5OTUsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDk5NiwgMQ0KLVs4MHB4XSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSA5OTcsIDQNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxMDAxLCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMDAyLCAxDQotWzEzMHB4XSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxMDAzLCA1DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTAwOCwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTAwOSwgMQ0KLVswcHhdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDEwMTAsIDMNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEwMTMsIDENCi1bKV0gREVDTEFSQVRJT05fVkFMVUVfUEFSRU5USEVTSVNfQ0xPU0UgLSAxMDE0LCAxDQotWw0KLV0gUyAtIDEwMTUsIDINCi1bfV0gUkJSQUNFIC0gMTAxNywgMQ0KLVsNCi0NCi1dIFMgLSAxMDE4LCA0DQotW0Bmb250LWZhY2VdIEZPTlRfRkFDRSAtIDEwMjIsIDEwDQotWyBdIFMgLSAxMDMyLCAxDQotW3tdIExCUkFDRSAtIDEwMzMsIDENCi1bDQotICAgIF0gUyAtIDEwMzQsIDYNCi1bZm9udC1mYW1pbHldIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTA0MCwgMTENCi1bIF0gUyAtIDEwNTEsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTA1MiwgMQ0KLVsgXSBTIC0gMTA1MywgMQ0KLVsiU3dpc3MgNzIxIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTA1NCwgMTENCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTA2NSwgMQ0KLVsNCi0gICAgXSBTIC0gMTA2NiwgNg0KLVtzcmNdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTA3MiwgMw0KLVsgXSBTIC0gMTA3NSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMDc2LCAxDQotWyBdIFMgLSAxMDc3LCAxDQotW3VybCgic3dpc3M3MjF0LnBmciIpXSBERUNMQVJBVElPTl9WQUxVRV9VUkkgLSAxMDc4LCAyMA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTA5OCwgMQ0KLVtmb3JtYXQoXSBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTiAtIDEwOTksIDcNCi1bImludGVsbGlmb250Il0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTEwNiwgMTMNCi1bKV0gREVDTEFSQVRJT05fVkFMVUVfUEFSRU5USEVTSVNfQ0xPU0UgLSAxMTE5LCAxDQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTEyMCwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTEyMSwgMQ0KLVtsb2NhbChdIERFQ0xBUkFUSU9OX1ZBTFVFX0ZVTkNUSU9OIC0gMTEyMiwgNg0KLVsiRXhjZWxzaW9yIEN5cmlsbGxpYyBVcHJpZ2h0Il0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTEyOCwgMjkNCi1bKV0gREVDTEFSQVRJT05fVkFMVUVfUEFSRU5USEVTSVNfQ0xPU0UgLSAxMTU3LCAxDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDExNTgsIDENCi1bDQotICAgIF0gUyAtIDExNTksIDYNCi1bdW5pY29kZS1yYW5nZV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMTY1LCAxMw0KLVsgXSBTIC0gMTE3OCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMTc5LCAxDQotWyBdIFMgLSAxMTgwLCAxDQotW1UrPz9dIERFQ0xBUkFUSU9OX1ZBTFVFX1VOSUNPREVfUkFOR0UgLSAxMTgxLCA0DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTE4NSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTE4NiwgMQ0KLVtVKzEwMC0yMjBdIERFQ0xBUkFUSU9OX1ZBTFVFX1VOSUNPREVfUkFOR0UgLSAxMTg3LCA5DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTE5NiwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTE5NywgMQ0KLVtVKzQ/P10gREVDTEFSQVRJT05fVkFMVUVfVU5JQ09ERV9SQU5HRSAtIDExOTgsIDUNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTIwMywgMQ0KLVsNCi0gICAgXSBTIC0gMTIwNCwgNg0KLVtmb250LXdlaWdodF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMjEwLCAxMQ0KLVsgXSBTIC0gMTIyMSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMjIyLCAxDQotWyBdIFMgLSAxMjIzLCAxDQotWzEwMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTIyNCwgMw0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDEyMjcsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEyMjgsIDENCi1bMjAwXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxMjI5LCAzDQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTIzMiwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTIzMywgMQ0KLVszMDBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDEyMzQsIDMNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxMjM3LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMjM4LCAxDQotWzQwMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTIzOSwgMw0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDEyNDIsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEyNDMsIDENCi1bNTAwXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxMjQ0LCAzDQotWw0KLV0gUyAtIDEyNDcsIDINCi1bfV0gUkJSQUNFIC0gMTI0OSwgMQ0KLVsNCi0NCi1dIFMgLSAxMjUwLCA0DQotW0BwYWdlXSBQQUdFIC0gMTI1NCwgNQ0KLVsgXSBTIC0gMTI1OSwgMQ0KLVs6bGVmdF0gQ1NTX1BBR0VfU0VMRUNUT1IgLSAxMjYwLCA1DQotWyBdIFMgLSAxMjY1LCAxDQotW3tdIExCUkFDRSAtIDEyNjYsIDENCi1bbWFyZ2luLWxlZnRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTI2NywgMTENCi1bIF0gUyAtIDEyNzgsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTI3OSwgMQ0KLVsgXSBTIC0gMTI4MCwgMQ0KLVs0Y21dIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDEyODEsIDMNCi1bfV0gUkJSQUNFIC0gMTI4NCwgMQ0KLVsNCi0NCi1dIFMgLSAxMjg1LCA0DQotW0BtZWRpYV0gTUVESUEgLSAxMjg5LCA2DQotWyBdIFMgLSAxMjk1LCAxDQotW2F1cmFsXSBNRURJVU0gLSAxMjk2LCA1DQotWyBdIFMgLSAxMzAxLCAxDQotW3tdIExCUkFDRSAtIDEzMDIsIDENCi1bDQotICAgIF0gUyAtIDEzMDMsIDYNCi1bSDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEzMDksIDINCi1bLF0gU0VMRUNUT1JfU0VQQVJBVE9SIC0gMTMxMSwgMQ0KLVsgXSBTIC0gMTMxMiwgMQ0KLVtIMl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTMxMywgMg0KLVssXSBTRUxFQ1RPUl9TRVBBUkFUT1IgLSAxMzE1LCAxDQotWyBdIFMgLSAxMzE2LCAxDQotW0gzXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMzE3LCAyDQotWyxdIFNFTEVDVE9SX1NFUEFSQVRPUiAtIDEzMTksIDENCi1bIF0gUyAtIDEzMjAsIDENCi1bSDRdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEzMjEsIDINCi1bLF0gU0VMRUNUT1JfU0VQQVJBVE9SIC0gMTMyMywgMQ0KLVsgXSBTIC0gMTMyNCwgMQ0KLVtINV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTMyNSwgMg0KLVssXSBTRUxFQ1RPUl9TRVBBUkFUT1IgLSAxMzI3LCAxDQotWyBdIFMgLSAxMzI4LCAxDQotW0g2XSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMzI5LCAyDQotWyBdIFMgLSAxMzMxLCAxDQotW3tdIExCUkFDRSAtIDEzMzIsIDENCi1bDQotICAgICAgICBdIFMgLSAxMzMzLCAxMA0KLVt2b2ljZS1mYW1pbHldIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTM0MywgMTINCi1bIF0gUyAtIDEzNTUsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTM1NiwgMQ0KLVsgXSBTIC0gMTM1NywgMQ0KLVtwYXVsXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDEzNTgsIDQNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxMzYyLCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMzYzLCAxDQotW2NoaWxkXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDEzNjQsIDUNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTM2OSwgMQ0KLVsNCi0gICAgICAgIF0gUyAtIDEzNzAsIDEwDQotW3N0cmVzc10gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMzgwLCA2DQotWyBdIFMgLSAxMzg2LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEzODcsIDENCi1bIF0gUyAtIDEzODgsIDENCi1bMjBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDEzODksIDINCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTM5MSwgMQ0KLVsNCi0gICAgICAgIF0gUyAtIDEzOTIsIDEwDQotW3JpY2huZXNzXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE0MDIsIDgNCi1bIF0gUyAtIDE0MTAsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTQxMSwgMQ0KLVsgXSBTIC0gMTQxMiwgMQ0KLVs5MF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTQxMywgMg0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxNDE1LCAxDQotWw0KLSAgICAgICAgXSBTIC0gMTQxNiwgMTANCi1bY3VlLWJlZm9yZV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNDI2LCAxMA0KLVsgXSBTIC0gMTQzNiwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNDM3LCAxDQotWyBdIFMgLSAxNDM4LCAxDQotW3VybCgicGluZy5hdSIpXSBERUNMQVJBVElPTl9WQUxVRV9VUkkgLSAxNDM5LCAxNA0KLVsNCi0gICAgXSBTIC0gMTQ1MywgNg0KLVt9XSBSQlJBQ0UgLSAxNDU5LCAxDQotWw0KLSAgICBdIFMgLSAxNDYwLCA2DQotW1BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE0NjYsIDENCi1bLmhlaWRpXSBTRUxFQ1RPUl9DTEFTUyAtIDE0NjcsIDYNCi1bIF0gUyAtIDE0NzMsIDENCi1be10gTEJSQUNFIC0gMTQ3NCwgMQ0KLVsNCi0gICAgICAgIF0gUyAtIDE0NzUsIDEwDQotW2F6aW11dGhdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTQ4NSwgNw0KLVsgXSBTIC0gMTQ5MiwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNDkzLCAxDQotWyBdIFMgLSAxNDk0LCAxDQotW2NlbnRlci1sZWZ0XSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE0OTUsIDExDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDE1MDYsIDENCi1bDQotICAgICAgICBdIFMgLSAxNTA3LCAxMA0KLVtlbGV2YXRpb25dIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTUxNywgOQ0KLVsgXSBTIC0gMTUyNiwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNTI3LCAxDQotWyBdIFMgLSAxNTI4LCAxDQotWzEyLjNkZWddIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDE1MjksIDcNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTUzNiwgMQ0KLVsNCi0gICAgICAgIF0gUyAtIDE1MzcsIDEwDQotW3BhdXNlXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE1NDcsIDUNCi1bIF0gUyAtIDE1NTIsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTU1MywgMQ0KLVsgXSBTIC0gMTU1NCwgMQ0KLVszMG1zXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxNTU1LCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNTU5LCAxDQotWzEuNnNdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDE1NjAsIDQNCi1bDQotICAgIF0gUyAtIDE1NjQsIDYNCi1bfV0gUkJSQUNFIC0gMTU3MCwgMQ0KLVsNCi0gICAgXSBTIC0gMTU3MSwgNg0KLVtQXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxNTc3LCAxDQotWy5wZXRlcl0gU0VMRUNUT1JfQ0xBU1MgLSAxNTc4LCA2DQotWyBdIFMgLSAxNTg0LCAxDQotW3tdIExCUkFDRSAtIDE1ODUsIDENCi1bDQotICAgICAgICBdIFMgLSAxNTg2LCAxMA0KLVthemltdXRoXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE1OTYsIDcNCi1bIF0gUyAtIDE2MDMsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTYwNCwgMQ0KLVsgXSBTIC0gMTYwNSwgMQ0KLVtyaWdodF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxNjA2LCA1DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDE2MTEsIDENCi1bDQotICAgICAgICBdIFMgLSAxNjEyLCAxMA0KLVtlbGV2YXRpb25dIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTYyMiwgOQ0KLVsgXSBTIC0gMTYzMSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNjMyLCAxDQotWyBdIFMgLSAxNjMzLCAxDQotWy0wLjM2cmFkXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxNjM0LCA4DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDE2NDIsIDENCi1bDQotICAgICAgICBdIFMgLSAxNjQzLCAxMA0KLVtwaXRjaF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNjUzLCA1DQotWyBdIFMgLSAxNjU4LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE2NTksIDENCi1bIF0gUyAtIDE2NjAsIDENCi1bMjEwSHpdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDE2NjEsIDUNCi1bDQotICAgIF0gUyAtIDE2NjYsIDYNCi1bfV0gUkJSQUNFIC0gMTY3MiwgMQ0KLVsNCi0gICAgXSBTIC0gMTY3MywgNg0KLVtQXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxNjc5LCAxDQotWy5nb2F0XSBTRUxFQ1RPUl9DTEFTUyAtIDE2ODAsIDUNCi1bIF0gUyAtIDE2ODUsIDENCi1be10gTEJSQUNFIC0gMTY4NiwgMQ0KLVsNCi0gICAgICAgIF0gUyAtIDE2ODcsIDEwDQotW3ZvbHVtZV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNjk3LCA2DQotWyBdIFMgLSAxNzAzLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE3MDQsIDENCi1bIF0gUyAtIDE3MDUsIDENCi1beC1zb2Z0XSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE3MDYsIDYNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTcxMiwgMQ0KLVsNCi0gICAgICAgIF0gUyAtIDE3MTMsIDEwDQotW2VsZXZhdGlvbl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNzIzLCA5DQotWyBdIFMgLSAxNzMyLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE3MzMsIDENCi1bIF0gUyAtIDE3MzQsIDENCi1bNjZncmFkXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxNzM1LCA2DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDE3NDEsIDENCi1bDQotICAgICAgICBdIFMgLSAxNzQyLCAxMA0KLVtwaXRjaF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNzUyLCA1DQotWyBdIFMgLSAxNzU3LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE3NTgsIDENCi1bIF0gUyAtIDE3NTksIDENCi1bMC4xN2tIel0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTc2MCwgNw0KLVsNCi0gICAgXSBTIC0gMTc2NywgNg0KLVt9XSBSQlJBQ0UgLSAxNzczLCAxDQotWw0KLV0gUyAtIDE3NzQsIDINCi1bfV0gUkJSQUNFIC0gMTc3NiwgMQ0KLVsNCi0NCi1dIFMgLSAxNzc3LCA0DQotDQotLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMS5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDEuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzg5ODI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLUgxIHsNCi0NCi0JY29sb3I6IHdoaXRlDQotCTsNCi0NCi0JYmFja2dyb3VuZC1jb2xvciA6IGJsYWNrDQotCQ0KLX0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDIuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAyLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE0YzRkZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDIuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotQGltcG9ydCB1cmwoImhvZ2UuY3NzIik7DQotQGltcG9ydCAvKiBjb21tZW50ICovIHVybChob2dlLmNzcyk7DQotQGltcG9ydCAiaG9nZS5jc3MiIC8qIGNvbW1lbnQgKi87DQotQElNUE9SVCAnaG9nZS5jc3MnICxtZWRpYTEsbWVkaWEyLCxtZWRpYTMgbWVkaWE0LG1lZGlhNSBAaW1wb3J0IG1lZGlhNjsNCi0NCi08IS0tIC8qIGhvZ2Vob2dlICovDQotDQotLS0+DQotDQotLyogY29tbWVudCAyICovDQota3Vzbw0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDMuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTdjY2MwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1AaW1wb3J0IHVybCgiLi4vc2FtcGxlMi5jc3MiKTsNCi0NCi0vKiBTYW1wbGUgU3R5bGVzICovDQotDQotQk9EWSB7DQotCWNvbG9yIDogYmxhY2s7DQotCWJhY2tncm91bmQtY29sb3IgOiByZ2IoMTgxLCAyNTMsIDIxMSk7DQotCXRleHQtYWxpZ24gOiBjZW50ZXI7DQotCWZvbnQtZmFtaWx5IDogIkhlaXNlaSBNaW5jaG8gVzMiLCBzZXJpZg0KLX0NCi0NCi1AcGFnZSA6bGVmdCB7IG1hcmdpbi1sZWZ0IDogNGNtIH0NCi0NCi1AbWVkaWEgYXVyYWwgew0KLQlQLmhlaWRpIHsNCi0JCWF6aW11dGggOiBjZW50ZXItbGVmdDsNCi0JCWVsZXZhdGlvbiA6IDEyLjNkZWc7DQotCQlwYXVzZSA6IDMwbXMgMS42cw0KLQl9DQotfQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmRlNGY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi1AY2hhcnNldCAiSVNPLTg4NTktMSI7DQotDQotQGltcG9ydCB1cmwoImhvZ2UuY3NzIik7DQotQGltcG9ydCAvKiBjb21tZW50ICovIHVybChob2dlLmNzcyk7DQotQGltcG9ydCAiaG9nZS5jc3MiIC8qIGNvbW1lbnQgKi87DQotQElNUE9SVCAnaG9nZS5jc3MnIG1lZGlhMSxtZWRpYTIgLCBtZWRpYTM7DQotDQotQG1lZGlhIHByaW50IHsNCi0NCi19DQotDQotQHBhZ2UgOmxlZnQgew0KLQ0KLX0NCi0NCi1oMSwgaDIsIGgzIHsgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmICB9DQotaDEgZW0geyAgY29sb3I6IGJsdWUgIH0NCi1kaXYgcCAqW2hyZWZdIHsgIGNvbG9yOiBibHVlICB9DQotYm9keSA+IFAgeyAgbGluZS1oZWlnaHQ6IDEuMyAgfQ0KLWRpdiBvbD5saSBwIHsgfQ0KLW1hdGggKyBwIHsgIHRleHQtaW5kZW50OiAwICB9DQotaDEub3BlbmVyICsgaDIgeyAgbWFyZ2luLXRvcDogLTVtbSAgfQ0KLWgxW3RpdGxlXSB7ICBjb2xvcjogYmx1ZTsgIH0NCi1zcGFuW2NsYXNzPWV4YW1wbGVdIHsgIGNvbG9yOiBibHVlOyAgfQ0KLXNwYW5baGVsbG89IkNsZXZlbGFuZCJdW2dvb2RieWU9IkNvbHVtYnVzIl0geyAgY29sb3I6IGJsdWU7ICB9DQotYVtyZWx+PSJjb3B5cmlnaHQiXSB7ICBjb2xvcjogYmx1ZSAgfQ0KLWFbaHJlZj0iaHR0cDovL3d3dy53My5vcmcvIl0geyAgY29sb3I6IGJsdWUgIH0NCi0qW2xhbmc9ZnJdIHsgIGRpc3BsYXkgOiBub25lICB9DQotKltsYW5nfD0iZW4iXSB7ICBjb2xvciA6IHJlZCAgfQ0KLURJQUxPR1VFW2NoYXJhY3Rlcj1yb21lb10NCi17ICB2b2ljZS1mYW1pbHk6ICJMYXdyZW5jZSBPbGl2aWVyIiwgY2hhcmxlcywgbWFsZSAgfQ0KLURJQUxPR1VFWyBjaGFyYWN0ZXIgPSBqdWxpZXQgXQ0KLXsgIHZvaWNlLWZhbWlseTogIlZpdmllbiBMZWlnaCIsIHZpY3RvcmlhLCBmZW1hbGUgIH0NCi0qLnBhc3RvcmFsIHsgIGNvbG9yOiBncmVlbiAgfQ0KLS5wYXN0b3JhbCB7ICBjb2xvcjogZ3JlZW4gIH0NCi1IMS5wYXN0b3JhbCB7ICBjb2xvcjogZ3JlZW4gIH0NCi1wLnBhc3RvcmFsLm1hcmluZSB7ICBjb2xvcjogZ3JlZW4gIH0NCi1oMSNjaGFwdGVyMSB7ICB0ZXh0LWFsaWduOiBjZW50ZXIgIH0NCi1kaXYgPiBwOmZpcnN0LWNoaWxkIHsgIHRleHQtaW5kZW50OiAwICB9DQotcDpmaXJzdC1jaGlsZCBlbSB7ICBmb250LXdlaWdodCA6IGJvbGQgIH0NCi0qID4gYTpmaXJzdC1jaGlsZCB7ICBmb250LXdlaWdodCA6IGJvbGQgIH0NCi1hOmZpcnN0LWNoaWxkIHsgIGZvbnQtd2VpZ2h0IDogYm9sZCAgfQ0KLWEuZXh0ZXJuYWw6dmlzaXRlZCB7ICBjb2xvcjogYmx1ZSAgfQ0KLWE6Zm9jdXM6aG92ZXIgeyAgYmFja2dyb3VuZDogd2hpdGUgIH0NCi1odG1sOmxhbmcoZnIpIHsgIHF1b3RlczogJzw8JyAnPj4nICB9DQotaHRtbDpsYW5nKGRlKSB7ICBxdW90ZXM6ICc+PicgJzw8JyAnXDIwMzknICdcMjAzQScgIH0NCi06bGFuZyhmcikgPiBRIHsgIHF1b3RlczogJzw8JyAnPj4nICB9DQotOmxhbmcoZGUpID4gUSB7ICBxdW90ZXM6ICc+PicgJzw8JyAnXDIwMzknICdcMjAzQScgIH0NCi1wOmZpcnN0LWxldHRlciB7ICBmb250LXNpemU6IDNlbTsgZm9udC13ZWlnaHQ6IG5vcm1hbCAgfQ0KLXAuc3BlY2lhbDpiZWZvcmUgeyBjb250ZW50OiAiU3BlY2lhbCEgIiB9DQotcC5zcGVjaWFsOmZpcnN0LWxldHRlciB7IGNvbG9yOiAjZmZkODAwIH0NCi1CT0RZIHsgZm9udC1mYW1pbHk6IEJhc2tlcnZpbGxlLCAiSGVpc2kgTWluY2hvIFczIiwgU3ltYm9sLCBzZXJpZiB9DQotKjpsYW5nKGphLWpwKSB7IGZvbnQ6IDkwMCAxNHB0LzE2cHQgIkhlaXNlaSBNaW5jaG8gVzkiLCBzZXJpZiB9DQotKjpsYW5nKHpoLXR3KSB7IGZvbnQ6IDgwMCAxNHB0LzE2LjVwdCAiTGkgU3VuZyIsIHNlcmlmIH0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDUuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA1LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJkZTRmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDUuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotQGNoYXJzZXQgIklTTy04ODU5LTEiOw0KLQ0KLUBpbXBvcnQgdXJsKCJob2dlLmNzcyIpOw0KLUBpbXBvcnQgLyogY29tbWVudCAqLyB1cmwoaG9nZS5jc3MpOw0KLUBpbXBvcnQgImhvZ2UuY3NzIiAvKiBjb21tZW50ICovOw0KLUBJTVBPUlQgJ2hvZ2UuY3NzJyBtZWRpYTEsbWVkaWEyICwgbWVkaWEzOw0KLQ0KLUBtZWRpYSBwcmludCB7DQotDQotfQ0KLQ0KLUBwYWdlIDpsZWZ0IHsNCi0NCi19DQotDQotaDEsIGgyLCBoMyB7ICBmb250LWZhbWlseTogc2Fucy1zZXJpZiAgfQ0KLWgxIGVtIHsgIGNvbG9yOiBibHVlICB9DQotZGl2IHAgKltocmVmXSB7ICBjb2xvcjogYmx1ZSAgfQ0KLWJvZHkgPiBQIHsgIGxpbmUtaGVpZ2h0OiAxLjMgIH0NCi1kaXYgb2w+bGkgcCB7IH0NCi1tYXRoICsgcCB7ICB0ZXh0LWluZGVudDogMCAgfQ0KLWgxLm9wZW5lciArIGgyIHsgIG1hcmdpbi10b3A6IC01bW0gIH0NCi1oMVt0aXRsZV0geyAgY29sb3I6IGJsdWU7ICB9DQotc3BhbltjbGFzcz1leGFtcGxlXSB7ICBjb2xvcjogYmx1ZTsgIH0NCi1zcGFuW2hlbGxvPSJDbGV2ZWxhbmQiXVtnb29kYnllPSJDb2x1bWJ1cyJdIHsgIGNvbG9yOiBibHVlOyAgfQ0KLWFbcmVsfj0iY29weXJpZ2h0Il0geyAgY29sb3I6IGJsdWUgIH0NCi1hW2hyZWY9Imh0dHA6Ly93d3cudzMub3JnLyJdIHsgIGNvbG9yOiBibHVlICB9DQotKltsYW5nPWZyXSB7ICBkaXNwbGF5IDogbm9uZSAgfQ0KLSpbbGFuZ3w9ImVuIl0geyAgY29sb3IgOiByZWQgIH0NCi1ESUFMT0dVRVtjaGFyYWN0ZXI9cm9tZW9dDQoteyAgdm9pY2UtZmFtaWx5OiAiTGF3cmVuY2UgT2xpdmllciIsIGNoYXJsZXMsIG1hbGUgIH0NCi1ESUFMT0dVRVsgY2hhcmFjdGVyID0ganVsaWV0IF0NCi17ICB2b2ljZS1mYW1pbHk6ICJWaXZpZW4gTGVpZ2giLCB2aWN0b3JpYSwgZmVtYWxlICB9DQotKi5wYXN0b3JhbCB7ICBjb2xvcjogZ3JlZW4gIH0NCi0ucGFzdG9yYWwgeyAgY29sb3I6IGdyZWVuICB9DQotSDEucGFzdG9yYWwgeyAgY29sb3I6IGdyZWVuICB9DQotcC5wYXN0b3JhbC5tYXJpbmUgeyAgY29sb3I6IGdyZWVuICB9DQotaDEjY2hhcHRlcjEgeyAgdGV4dC1hbGlnbjogY2VudGVyICB9DQotZGl2ID4gcDpmaXJzdC1jaGlsZCB7ICB0ZXh0LWluZGVudDogMCAgfQ0KLXA6Zmlyc3QtY2hpbGQgZW0geyAgZm9udC13ZWlnaHQgOiBib2xkICB9DQotKiA+IGE6Zmlyc3QtY2hpbGQgeyAgZm9udC13ZWlnaHQgOiBib2xkICB9DQotYTpmaXJzdC1jaGlsZCB7ICBmb250LXdlaWdodCA6IGJvbGQgIH0NCi1hLmV4dGVybmFsOnZpc2l0ZWQgeyAgY29sb3I6IGJsdWUgIH0NCi1hOmZvY3VzOmhvdmVyIHsgIGJhY2tncm91bmQ6IHdoaXRlICB9DQotaHRtbDpsYW5nKGZyKSB7ICBxdW90ZXM6ICc8PCcgJz4+JyAgfQ0KLWh0bWw6bGFuZyhkZSkgeyAgcXVvdGVzOiAnPj4nICc8PCcgJ1wyMDM5JyAnXDIwM0EnICB9DQotOmxhbmcoZnIpID4gUSB7ICBxdW90ZXM6ICc8PCcgJz4+JyAgfQ0KLTpsYW5nKGRlKSA+IFEgeyAgcXVvdGVzOiAnPj4nICc8PCcgJ1wyMDM5JyAnXDIwM0EnICB9DQotcDpmaXJzdC1sZXR0ZXIgeyAgZm9udC1zaXplOiAzZW07IGZvbnQtd2VpZ2h0OiBub3JtYWwgIH0NCi1wLnNwZWNpYWw6YmVmb3JlIHsgY29udGVudDogIlNwZWNpYWwhICIgfQ0KLXAuc3BlY2lhbDpmaXJzdC1sZXR0ZXIgeyBjb2xvcjogI2ZmZDgwMCB9DQotQk9EWSB7IGZvbnQtZmFtaWx5OiBCYXNrZXJ2aWxsZSwgIkhlaXNpIE1pbmNobyBXMyIsIFN5bWJvbCwgc2VyaWYgfQ0KLSo6bGFuZyhqYS1qcCkgeyBmb250OiA5MDAgMTRwdC8xNnB0ICJIZWlzZWkgTWluY2hvIFc5Iiwgc2VyaWYgfQ0KLSo6bGFuZyh6aC10dykgeyBmb250OiA4MDAgMTRwdC8xNi41cHQgIkxpIFN1bmciLCBzZXJpZiB9DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA2LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhNzNjZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA2LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLWRlY2xhcmF0aW9uIHsNCi0JZGltZW5zaW9uIDogMTAwZXg7DQotCWZ1bmN0aW9uIDogcmVjdCgxMDAsIDIwMCwgMzAwLCA0MDApLCBmb3JtYXQoImludGVsbGlmb250IiksIGxvY2FsKCJFeGNlbHNpb3IgQ3lyaWxsbGljIFVwcmlnaHQiKTsNCi0JaGFzaCA6ICNhYWJiY2M7DQotCWlkZW50IDogYW55Ow0KLQludW1iZXIgOiA5OTk5OTsNCi0JcGVyY2VudGFnZSA6IDEwMCU7DQotCXN0cmluZyA6ICJzdHJpbmciOw0KLQl1bmljb2RlLXJhbmdlIDogVSs/PywgVSsxMDAtMjIwLCBVKzQ/PzsNCi19DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA3LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkMzQ3MjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA3LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLUBjaGFyc2V0ICJJU08tODg1OS0xIjsNCi0NCi1AaW1wb3J0IHVybCgiLi4vc2FtcGxlMi5jc3MiKSBwcm9qZWN0aW9uLCB0djsNCi0NCi1CT0RZIHsNCi0gICAgY29sb3IgOiBibGFjazsNCi0gICAgdGV4dC1hbGlnbiA6IGNlbnRlcjsNCi0gICAgYmFja2dyb3VuZC1jb2xvciA6IHJnYiggMTgxLCAyNTMsIDIxMSApDQotfQ0KLQ0KLVVMIHsNCi0gICAgY29sb3IgOiBibGFjazsNCi0gICAgbGlzdC1zdHlsZS1pbWFnZSA6IHVybCgiaW1hZ2VzL2xfYTAxLmdpZiIpOw0KLSAgICBsaXN0LXN0eWxlLXBvc2l0aW9uIDogb3V0c2lkZQ0KLX0NCi0NCi1IMSB7DQotICAgIGNvbG9yIDogd2hpdGU7DQotICAgIHRleHQtYWxpZ24gOiBjZW50ZXI7DQotICAgIGJvcmRlci1sZWZ0LWNvbG9yIDogIzk5NjY2NjsNCi0gICAgcGFkZGluZy10b3AgOiAwcHg7DQotICAgIHBhZGRpbmctcmlnaHQgOiAxY207DQotICAgIHBhZGRpbmctYm90dG9tIDogMjsNCi0gICAgcGFkZGluZy1sZWZ0IDogM2VtOw0KLSAgICBib3JkZXItc3R5bGUgOiBzb2xpZDsNCi0gICAgYm9yZGVyLXRvcC13aWR0aCA6IDQuNWV4Ow0KLSAgICBib3JkZXItcmlnaHQtd2lkdGggOiA1aW47DQotICAgIGJvcmRlci1ib3R0b20td2lkdGggOiA2LjAybW07DQotICAgIGJvcmRlci1sZWZ0LXdpZHRoIDogNw0KLX0NCi0NCi1IMTpiZWZvcmUgew0KLSAgICBjb250ZW50IDogIkNoYXB0ZXIgIiBjb3VudGVyKCBjaGFwdGVyICkgIi4gIjsNCi0gICAgY291bnRlci1pbmNyZW1lbnQgOiBjaGFwdGVyOw0KLSAgICBjb3VudGVyLXJlc2V0IDogc2VjdGlvbg0KLX0NCi0NCi1JTUc6YmVmb3JlIHtjb250ZW50IDogYXR0cihhbHQpfQ0KLQ0KLURJVi5zYW1wbGUgew0KLSAgICBmb250LWZhbWlseSA6ICJSb2Jzb24gQ2VsdGljIiwgc2Fucy1zZXJpZjsNCi0gICAgcG9zaXRpb24gOiBhYnNvbHV0ZTsNCi0gICAgbGVmdCA6IDgzMy41cGM7DQotICAgIHRvcCA6IDkwJTsNCi0gICAgd2lkdGggOiAxMDBwdDsNCi0gICAgaGVpZ2h0IDogMTEwLjc3N3B4Ow0KLSAgICBjbGlwIDogcmVjdCggLTVweCwgODBweCwgMTMwcHgsIDBweCApDQotfQ0KLQ0KLUBmb250LWZhY2Ugew0KLSAgICBmb250LWZhbWlseSA6ICJTd2lzcyA3MjEiOw0KLSAgICBzcmMgOiB1cmwoInN3aXNzNzIxdC5wZnIiKSBmb3JtYXQoImludGVsbGlmb250IiksIGxvY2FsKCJFeGNlbHNpb3IgQ3lyaWxsbGljIFVwcmlnaHQiKTsNCi0gICAgdW5pY29kZS1yYW5nZSA6IFUrPz8sIFUrMTAwLTIyMCwgVSs0Pz87DQotICAgIGZvbnQtd2VpZ2h0IDogMTAwLCAyMDAsIDMwMCwgNDAwLCA1MDANCi19DQotDQotQHBhZ2UgOmxlZnQge21hcmdpbi1sZWZ0IDogNGNtfQ0KLQ0KLUBtZWRpYSBhdXJhbCB7DQotICAgIEgxLCBIMiwgSDMsIEg0LCBINSwgSDYgew0KLSAgICAgICAgdm9pY2UtZmFtaWx5IDogcGF1bCwgY2hpbGQ7DQotICAgICAgICBzdHJlc3MgOiAyMDsNCi0gICAgICAgIHJpY2huZXNzIDogOTA7DQotICAgICAgICBjdWUtYmVmb3JlIDogdXJsKCJwaW5nLmF1IikNCi0gICAgfQ0KLSAgICBQLmhlaWRpIHsNCi0gICAgICAgIGF6aW11dGggOiBjZW50ZXItbGVmdDsNCi0gICAgICAgIGVsZXZhdGlvbiA6IDEyLjNkZWc7DQotICAgICAgICBwYXVzZSA6IDMwbXMgMS42cw0KLSAgICB9DQotICAgIFAucGV0ZXIgew0KLSAgICAgICAgYXppbXV0aCA6IHJpZ2h0Ow0KLSAgICAgICAgZWxldmF0aW9uIDogLTAuMzZyYWQ7DQotICAgICAgICBwaXRjaCA6IDIxMEh6DQotICAgIH0NCi0gICAgUC5nb2F0IHsNCi0gICAgICAgIHZvbHVtZSA6IHgtc29mdDsNCi0gICAgICAgIGVsZXZhdGlvbiA6IDY2Z3JhZDsNCi0gICAgICAgIHBpdGNoIDogMC4xN2tIeg0KLSAgICB9DQotfQ0KLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3V0aWwvRmlsZVV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3V0aWwvRmlsZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEyMjcxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy91dGlsL0ZpbGVVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi0vKioKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgRmlsZVV0aWwgewotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvbW1vbkVPTCA9ICJcclxuIjsKLQotCXB1YmxpYyBzdGF0aWMgRmlsZSBjcmVhdGVGaWxlKFN0cmluZyBkaXJlY3RvcnksIFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZSgib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzIik7IC8vJE5PTi1OTFMtMSQKLQkJVVJMIHVybCA9IGJ1bmRsZS5nZXRFbnRyeSgiLyIpOyAvLyROT04tTkxTLTEkCi0JCVVSTCBsb2NhbFVSTCA9IFBsYXRmb3JtLmFzTG9jYWxVUkwodXJsKTsKLQkJU3RyaW5nIGluc3RhbGxQYXRoID0gbG9jYWxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgdG90YWxEaXJlY3RvcnkgPSBpbnN0YWxsUGF0aCArIGRpcmVjdG9yeTsKLQkJU3RyaW5nIHRvdGFsUGF0aCA9IHRvdGFsRGlyZWN0b3J5ICsgIi8iICsgZmlsZW5hbWU7IC8vJE5PTi1OTFMtMSQKLQkJVVJMIHRvdGFsVVJMID0gbmV3IFVSTCh1cmwsIHRvdGFsUGF0aCk7Ci0JCVN0cmluZyBmaW5hbEZpbGUgPSB0b3RhbFVSTC5nZXRGaWxlKCk7Ci0JCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGZpbmFsRmlsZSk7Ci0JCXJldHVybiBmaWxlOwotCX0KLQotCS8vIHB1YmxpYyBzdGF0aWMgUmVhZGVyIGNyZWF0ZVJlYWRlcihGaWxlIGZpbGUpIHRocm93cwotCS8vIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0JLy8gcmV0dXJuIG5ldyBGaWxlUmVhZGVyKGZpbGUpOwotCS8vIH0KLQkvLwkKLQkvLyBwdWJsaWMgc3RhdGljIFJlYWRlciBjcmVhdGVSZWFkZXIoU3RyaW5nIGRpcmVjdG9yeSwgU3RyaW5nIGZpbGVuYW1lKQotCS8vIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JLy8gRmlsZSBmaWxlID0gY3JlYXRlRmlsZShkaXJlY3RvcnksIGZpbGVuYW1lKTsKLQkvLyByZXR1cm4gY3JlYXRlUmVhZGVyKGZpbGUpOwotCS8vIH0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGNyZWF0ZVN0cmluZyhTdHJpbmcgZGlyZWN0b3J5LCBTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJUmVhZGVyIGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcihjcmVhdGVGaWxlKGRpcmVjdG9yeSwgZmlsZW5hbWUpKTsKLQkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKGZpbGVSZWFkZXIpOwotCQlTdHJpbmcgbGluZTsKLQkJd2hpbGUgKChsaW5lID0gcmVhZGVyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKLQkJCWJ1Zi5hcHBlbmQobGluZSk7Ci0JCQlidWYuYXBwZW5kKGNvbW1vbkVPTCk7Ci0JCX0KLQkJcmV0dXJuIGJ1Zi50b1N0cmluZygpOwotCQkvLyByZXR1cm4gbmV3IERhdGFJbnB1dFN0cmVhbShuZXcKLQkJLy8gRmlsZUlucHV0U3RyZWFtKGNyZWF0ZUZpbGUoZGlyZWN0b3J5LCBmaWxlbmFtZSkpKS5yZWFkVVRGKCk7Ci0JfQotCi0Jc3RhdGljIGludCB1bmlxdWVOdW0gPSAwOwotCi0JcHVibGljIHN0YXRpYyBJQ1NTTW9kZWwgY3JlYXRlTW9kZWwoKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCi0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0KLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdCgidGVzdCIgKyB1bmlxdWVOdW0rKyArICIuY3NzIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotCi0JCQkvLyBhbHdheXMgdXNlIHRoZSBzYW1lIGxpbmUgZGVsaW1pdGVyIGZvciB0aGVzZSB0ZXN0cywgcmVnYXJkbGVzcwotCQkJLy8gb2YgcGxhZm9ybSBvciBwcmVmZXJlbmNlIHNldHRpbmdzCi0JCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRMaW5lRGVsaW1pdGVyKGNvbW1vbkVPTCk7Ci0KLQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gKElDU1NNb2RlbCkgbW9kZWw7Ci0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgZHVtcFN0cmluZyhTdHJpbmcgc3RyaW5nLCBTdHJpbmcgZGlyZWN0b3J5LCBTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUZpbGUgZmlsZSA9IGNyZWF0ZUZpbGUoZGlyZWN0b3J5LCBmaWxlbmFtZSk7Ci0JCVdyaXRlciB3cml0ZXIgPSBuZXcgRmlsZVdyaXRlcihmaWxlKTsKLQkJd3JpdGVyLndyaXRlKHN0cmluZyk7Ci0JCXdyaXRlci5jbG9zZSgpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy91dGlsL051bGxJbnB1dFN0cmVhbS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdXRpbC9OdWxsSW5wdXRTdHJlYW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ5YjJmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy91dGlsL051bGxJbnB1dFN0cmVhbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZW5zIEx1a293c2tpL0lubm9vcHJhY3QgLSBpbml0aWFsIHJlbmFtaW5nL3Jlc3RydWN0dXJpbmcKLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotCi1wdWJsaWMgY2xhc3MgTnVsbElucHV0U3RyZWFtIGV4dGVuZHMgSW5wdXRTdHJlYW0gewotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBqYXZhLmlvLklucHV0U3RyZWFtI21hcmsoaW50KQotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBtYXJrKGludCByZWFkbGltaXQpIHsKLQkJLy8gbm90aGluZyB0byBkbwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNtYXJrU3VwcG9ydGVkKCkKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBtYXJrU3VwcG9ydGVkKCkgewotCQkvLyB3ZSBjYW4gbWFyayBub3RoaW5nLgotCQkvLyBhbmQsIHdlIGFyZSB1c2luZyB0aGlzIE51bGwgY2xhc3Mgc3BlY2lmaWNhbGx5IGZvcgotCQkvLyBhICJmYWtlIiByZXNldHRhYmxlIHN0cmVhbS4KLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBqYXZhLmlvLklucHV0U3RyZWFtI3JlYWQoKQotCSAqLwotCXB1YmxpYyBpbnQgcmVhZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0KLQkJcmV0dXJuIC0xOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNyZXNldCgpCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJlc2V0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gbm90aGluZyB0byBkbwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNza2lwKGxvbmcpCi0JICovCi0JcHVibGljIGxvbmcgc2tpcChsb25nIG4pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXJldHVybiAwOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNiMmZkNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QKLQluYW1lPSJ0ZXN0c3VpdGUiCi0JZGVmYXVsdD0icnVuIgotCWJhc2VkaXI9Ii4iPgotCTwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0JPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KLQk8IS0tIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIke2Jhc2VkaXJ9XC4uXC4uIiAvPiAtLT4KLQotCTwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBwbHVnaW4tbmFtZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLQk8cHJvcGVydHkKLQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMiIC8+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9ImxpYnJhcnktZmlsZSIKLQkJdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0KLQk8ZWNobyBtZXNzYWdlPSJiYXNlZGlyICR7YmFzZWRpcn0iIC8+Ci0JPGVjaG8gbWVzc2FnZT0iZWNsaXBzZSBwbGFjZSAke2VjbGlwc2UtaG9tZX0iIC8+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0JPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLQk8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLQk8dGFyZ2V0IG5hbWU9ImluaXQiPgotCQk8dHN0YW1wIC8+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldAotCQkJCWRpcj0iJHtlY2xpcHNlLWhvbWV9IgotCQkJCWluY2x1ZGVzPSJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuKnhtbCIgLz4KLQkJPC9kZWxldGU+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotCTx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCQk8cHJvcGVydHkKLQkJCW5hbWU9IndzdC1mb2xkZXIiCi0JCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3dzdF9mb2xkZXIiIC8+Ci0JCTxkZWxldGUKLQkJCWRpcj0iJHt3c3QtZm9sZGVyfSIKLQkJCXF1aWV0PSJ0cnVlIiAvPgotCQk8YW50Ci0JCQl0YXJnZXQ9ImNvcmUtdGVzdCIKLQkJCWFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLQkJCWRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9ImRhdGEtZGlyIgotCQkJCXZhbHVlPSIke3dzdC1mb2xkZXJ9IiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCQkJdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iY2xhc3NuYW1lIgotCQkJCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuQ1NTQ29yZVRlc3RTdWl0ZSIgLz4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9InBsdWdpbi1wYXRoIgotCQkJCXZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLQk8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0JPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotCTx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0JCTwhLS0gPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+IC0tPgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLQk8dGFyZ2V0Ci0JCW5hbWU9InJ1biIKLQkJZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLQkJPGFudAotCQkJdGFyZ2V0PSJjb2xsZWN0IgotCQkJYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotCQkJZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iaW5jbHVkZXMiCi0JCQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy4qeG1sIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0ib3V0cHV0LWZpbGUiCi0JCQkJdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLQkJPC9hbnQ+Ci0JCTwhLS0JCTxlbWFpbFJlc3VsdHMgcmVzdWx0c0ZpbGU9IiR7YnVpbGQtcmVzdWx0cy1ob21lfS8ke3BsdWdpbi1uYW1lfS54bWwiIGFkZHJlc3NsaXN0PSJkYXZpZF93aWxsaWFtc0B1cy5pYm0uY29tIiAvPiAtLT4KLQk8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUxYzhmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2MTAxYjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLWNzc2VuY29kaW5ndGVzdHMuamFyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWEzNThkNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZzwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODE4NTZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotI01vbiBNYXkgMzAgMTk6MDk6MjQgRURUIDIwMDUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9YWJvcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb2RlQ29tcGxldGUuYXJndW1lbnRQcmVmaXhlcz0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvZGVDb21wbGV0ZS5hcmd1bWVudFN1ZmZpeGVzPQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29kZUNvbXBsZXRlLmZpZWxkUHJlZml4ZXM9Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb2RlQ29tcGxldGUuZmllbGRTdWZmaXhlcz0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvZGVDb21wbGV0ZS5sb2NhbFByZWZpeGVzPQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29kZUNvbXBsZXRlLmxvY2FsU3VmZml4ZXM9Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb2RlQ29tcGxldGUuc3RhdGljRmllbGRQcmVmaXhlcz0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvZGVDb21wbGV0ZS5zdGF0aWNGaWVsZFN1ZmZpeGVzPQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBhdGlibGVKREtMZXZlbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGxldGVDbGFzc3BhdGg9ZXJyb3IKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI0MGZiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLSNNb24gTWF5IDMwIDAzOjI2OjM0IEVEVCAyMDA1Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LnVpLmV4Y2VwdGlvbi5uYW1lPWUKLW9yZy5lY2xpcHNlLmpkdC51aS5nZXR0ZXJzZXR0ZXIudXNlLmlzPXRydWUKLW9yZy5lY2xpcHNlLmpkdC51aS5vdmVycmlkZWFubm90YXRpb249dHJ1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmU3YmI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNGcmkgTWF5IDI3IDIzOjM5OjI2IEVEVCAyMDA1Ci1jb21waWxlcnMucC5pbGxlZ2FsLWF0dC12YWx1ZT0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMucC51bnVzZWQtZWxlbWVudC1vci1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YwNWMzNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogQ1NTIEVuY29kaW5nIFRlc3RzIFBsdWctaW4KLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMAotQnVuZGxlLUNsYXNzUGF0aDogY3NzZW5jb2Rpbmd0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcuQ1NTRW5jb2RpbmdUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcsCi0gb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5jc3MKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLAotIG9yZy5qdW5pdCwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZwotRWNsaXBzZS1BdXRvU3RhcnQ6IHRydWUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY2Yjk2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLTxib2R5IGxhbmc9IkVOLVVTIj4KLTxoMj5BYm91dCBUaGlzIENvbnRlbnQ8L2gyPgotIAotPHA+RmVicnVhcnkgMjQsIDIwMDU8L3A+CQotPGgzPkxpY2Vuc2U8L2gzPgotCi08cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gKCZxdW90O0NvbnRlbnQmcXVvdDspLiAgVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCi1FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgotCi08cD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSBDb250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoJnF1b3Q7UmVkaXN0cmlidXRvciZxdW90OykgYW5kIGRpZmZlcmVudCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkKLWFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gIENoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiAgSWYgbm8gc3VjaCBsaWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gIFVubGVzcyBvdGhlcndpc2UKLWluZGljYXRlZCBiZWxvdywgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50LjwvcD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI1NzU0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIGNzc2VuY29kaW5ndGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIHRlc3RmaWxlcy8sXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLXNyYy5pbmNsdWRlcyA9IGNzc2VuY29kaW5ndGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwKLXNvdXJjZS5jc3NlbmNvZGluZ3Rlc3RzLmphciA9IHNyYy8KLW91dHB1dC5jc3NlbmNvZGluZ3Rlc3RzLmphciA9IGJpbi8KLSAgICAgICAgICAgICAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvQ1NTRW5jb2RpbmdUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvQ1NTRW5jb2RpbmdUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNlNzI4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL0NTU0VuY29kaW5nVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmc7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5jc3MuQ1NTRW5jb2RpbmdUZXN0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5jc3MuQ1NTSGVhZFRva2VuaXplclRlc3RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLmNzcy5UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JDU1M7Ci0KLXB1YmxpYyBjbGFzcyBDU1NFbmNvZGluZ1Rlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBDbGFzc1tdIGNsYXNzZXMgPSBuZXcgQ2xhc3NbXXtDU1NFbmNvZGluZ1Rlc3Rlci5jbGFzcywgQ1NTSGVhZFRva2VuaXplclRlc3Rlci5jbGFzcywgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9yQ1NTLmNsYXNzfTsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBDU1NFbmNvZGluZ1Rlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBDU1NFbmNvZGluZ1Rlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIkNTUyBFbmNvZGluZyBUZXN0IFN1aXRlIik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkrKykgewotCQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKGNsYXNzZXNbaV0sIGNsYXNzZXNbaV0uZ2V0TmFtZSgpKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGhlQ2xhc3MKLQkgKi8KLQlwdWJsaWMgQ1NTRW5jb2RpbmdUZXN0U3VpdGUoQ2xhc3MgdGhlQ2xhc3MpIHsKLQkJc3VwZXIodGhlQ2xhc3MpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0aGVDbGFzcwotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIENTU0VuY29kaW5nVGVzdFN1aXRlKENsYXNzIHRoZUNsYXNzLCBTdHJpbmcgbmFtZSkgewotCQlzdXBlcih0aGVDbGFzcywgbmFtZSk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgQ1NTRW5jb2RpbmdUZXN0U3VpdGUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvQ1NTRW5jb2RpbmdUZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9DU1NFbmNvZGluZ1Rlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwNzg4YjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9DU1NFbmNvZGluZ1Rlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBDU1NFbmNvZGluZ1Rlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIENTU0VuY29kaW5nVGVzdHNQbHVnaW4gcGx1Z2luOwotCi0JcHVibGljIHN0YXRpYyBMaXN0IGdldEFsbFRlc3RGaWxlcyhTdHJpbmcgdG9wRGlyTmFtZSkgewotCQlMaXN0IHJlc3VsdCA9IG51bGw7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vIFN0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyB0b3BEaXJOYW1lOwotCQlGaWxlIHRvcERpciA9IG5ldyBGaWxlKGxvY2F0aW9uKTsKLQkJaWYgKCF0b3BEaXIuaXNEaXJlY3RvcnkoKSkgewotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbih0b3BEaXJOYW1lICsgIiBpcyBub3QgYSBkaXJlY3RvcnkiKTsKLQkJfQotCQllbHNlIHsKLQkJCXJlc3VsdCA9IGdldEZpbGVzSW5EaXIodG9wRGlyKTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIENTU0VuY29kaW5nVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBMaXN0IGdldEZpbGVzSW5EaXIoRmlsZSB0b3BEaXIpIHsKLQkJTGlzdCBmaWxlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJRmlsZVtdIHRvcEZpbGVzID0gdG9wRGlyLmxpc3RGaWxlcygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHRvcEZpbGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlGaWxlIGZpbGUgPSB0b3BGaWxlc1tpXTsKLQkJCWlmIChmaWxlLmlzRmlsZSgpKSB7Ci0JCQkJZmlsZXMuYWRkKGZpbGUpOwotCQkJfQotCQkJZWxzZSBpZiAoZmlsZS5pc0RpcmVjdG9yeSgpICYmICFmaWxlLmdldE5hbWUoKS5lbmRzV2l0aCgiQ1ZTIikpIHsKLQkJCQlMaXN0IGlubmVyRmlsZXMgPSBnZXRGaWxlc0luRGlyKGZpbGUpOwotCQkJCWZpbGVzLmFkZEFsbChpbm5lckZpbGVzKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZXM7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBVUkwgZ2V0SW5zdGFsbExvY2F0aW9uKCkgewotCQlVUkwgaW5zdGFsbExvY2F0aW9uID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nIikuZ2V0RW50cnkoIi8iKTsKLQkJVVJMIHJlc29sdmVkTG9jYXRpb24gPSBudWxsOwotCQl0cnkgewotCQkJcmVzb2x2ZWRMb2NhdGlvbiA9IFBsYXRmb3JtLnJlc29sdmUoaW5zdGFsbExvY2F0aW9uKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJLy8gaW1wb3NzaWJsZQotCQkJdGhyb3cgbmV3IEVycm9yKGUpOwotCQl9Ci0JCXJldHVybiByZXNvbHZlZExvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsIG9yICdrZXknIGlmIG5vdAotCSAqIGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gQ1NTRW5jb2RpbmdUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXkpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgRmlsZSBnZXRUZXN0RmlsZShTdHJpbmcgZmlsZXBhdGgpIHsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIGZpbGVwYXRoOwotCQlGaWxlIHJlc3VsdCA9IG5ldyBGaWxlKGxvY2F0aW9uKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFJlYWRlciBnZXRUZXN0UmVhZGVyKFN0cmluZyBmaWxlcGF0aCkgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vIFN0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJUmVhZGVyIHJlc3VsdCA9IG5ldyBGaWxlUmVhZGVyKGxvY2F0aW9uKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB3b3Jrc3BhY2UgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBJV29ya3NwYWNlIGdldFdvcmtzcGFjZSgpIHsKLQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIENTU0VuY29kaW5nVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvQ1NTRW5jb2RpbmdUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvY3NzL0NTU0VuY29kaW5nVGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0ODk2MGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvQ1NTRW5jb2RpbmdUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcuY3NzOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0RGVjb2RlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNvZGluZ0Vycm9yQWN0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkNTU1Jlc291cmNlRW5jb2RpbmdEZXRlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLkNTU0VuY29kaW5nVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkVuY29kaW5nTWVtZW50bzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuSVJlc291cmNlQ2hhcnNldERldGVjdG9yOwotCi1wdWJsaWMgY2xhc3MgQ1NTRW5jb2RpbmdUZXN0ZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKioKLQkgKiBFbnN1cmVzIHRoYXQgYW4gSW5wdXRTdHJlYW0gaGFzIG1hcmsvcmVzZXQgc3VwcG9ydC4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJbnB1dFN0cmVhbSBnZXRNYXJrU3VwcG9ydGVkU3RyZWFtKElucHV0U3RyZWFtIG9yaWdpbmFsKSB7Ci0JCWlmIChvcmlnaW5hbCA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0JCWlmIChvcmlnaW5hbC5tYXJrU3VwcG9ydGVkKCkpCi0JCQlyZXR1cm4gb3JpZ2luYWw7Ci0JCXJldHVybiBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShvcmlnaW5hbCk7Ci0JfQotCXByaXZhdGUgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAiY3NzLyI7Ci0JLy8gcHJpdmF0ZSBmaW5hbCBTdHJpbmcgcGx1Z2luTG9jYXRpb24gPQotCS8vIFRlc3RzUGx1Z2luLmdldEluc3RhbGxMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUhvbWUgPSAidGVzdGZpbGVzLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUxvY2F0aW9uID0gZmlsZUhvbWUgKyBmaWxlRGlyOwotCXByaXZhdGUgaW50IFJFQURfQlVGRkVSX1NJWkUgPSA4MDAwOwotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdEZpbGVTdHJlYW0oU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZXhwZWN0ZWRJQU5BRW5jb2RpbmcsIElSZXNvdXJjZUNoYXJzZXREZXRlY3RvciBkZXRlY3RvcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJRmlsZSBmaWxlID0gQ1NTRW5jb2RpbmdUZXN0c1BsdWdpbi5nZXRUZXN0RmlsZShmaWxlbmFtZSk7Ci0JCWlmICghZmlsZS5leGlzdHMoKSkKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oZmlsZW5hbWUgKyAiIHdhcyBub3QgZm91bmQiKTsKLQkJSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpOwotCQkvLyBJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCUlucHV0U3RyZWFtIGlzdHJlYW0gPSBnZXRNYXJrU3VwcG9ydGVkU3RyZWFtKGlucHV0U3RyZWFtKTsKLQkJdHJ5IHsKLQkJCWRldGVjdG9yLnNldChpc3RyZWFtKTsKLQkJCUVuY29kaW5nTWVtZW50byBlbmNvZGluZ01lbWVudG8gPSBlbmNvZGluZ01lbWVudG8gPSAoKENTU1Jlc291cmNlRW5jb2RpbmdEZXRlY3RvcilkZXRlY3RvcikuZ2V0RW5jb2RpbmdNZW1lbnRvKCk7Ci0KLQkJCVN0cmluZyBmb3VuZElBTkFFbmNvZGluZyA9IG51bGw7Ci0KLQkJCWlmIChlbmNvZGluZ01lbWVudG8gIT0gbnVsbCkgewotCQkJCWZvdW5kSUFOQUVuY29kaW5nID0gZW5jb2RpbmdNZW1lbnRvLmdldERldGVjdGVkQ2hhcnNldE5hbWUoKTsKLQkJCX0KLQkJCS8vIEkgY2hhbmdlZCBtYW55ICJlcXVhbHMiIHRvICJlcXVhbHNJZ25vcmVDYXNlIiBvbiAxMS80LzIwMDIsCi0JCQkvLyBzaW5jZQotCQkJLy8gc29tZSBpc3N1ZXMgd2l0aCBTSElGVF9KSVMgdnMuIFNoaWZ0X0pJUyB3ZXJlIGNhdXNpbmcgZmFpbHVyZXMuCi0JCQkvLyBXZSBkbyB3YW50IHRvIGJlIHRvbGVyYW50IG9uIGlucHV0LCBhbmQgYWNjZXB0IGVpdGhlciwgYnV0IEkKLQkJCS8vIHRoaW5rCi0JCQkvLyB0aGF0IFN1cHBvcnRlZEphdmFFbmNvZGluZ3MgbmVlZHMgdG8gYmUgY2hhbmdlZCB0byAicmVjb21tZW5kIgotCQkJLy8gU2hpZnRfSklTLgotCQkJYm9vbGVhbiBleHBlY3RlZElBTkFSZXN1bHQgPSBmYWxzZTsKLQkJCWlmIChleHBlY3RlZElBTkFFbmNvZGluZyA9PSBudWxsKSB7Ci0JCQkJZXhwZWN0ZWRJQU5BUmVzdWx0ID0gZXhwZWN0ZWRJQU5BRW5jb2RpbmcgPT0gZm91bmRJQU5BRW5jb2Rpbmc7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlleHBlY3RlZElBTkFSZXN1bHQgPSBleHBlY3RlZElBTkFFbmNvZGluZy5lcXVhbHNJZ25vcmVDYXNlKGZvdW5kSUFOQUVuY29kaW5nKTsKLQkJCX0KLQotCQkJYXNzZXJ0VHJ1ZSgiZW5jb2RpbmcgdGVzdCBmaWxlICIgKyBmaWxlbmFtZSArICIgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZElBTkFFbmNvZGluZyArICIgZm91bmQ6ICIgKyBmb3VuZElBTkFFbmNvZGluZywgZXhwZWN0ZWRJQU5BUmVzdWx0KTsKLQkJCS8vIGEgdmVyeSBzaW1wbGUgcmVhZCB0ZXN0IC4uLiB3aWxsIGNhdXNlIEpVbml0IGVycm9yIChub3QgZmFpbCkKLQkJCS8vIGlmCi0JCQkvLyB0aHJvd3MgZXhjZXB0aW9uLgotCQkJaWYgKGZvdW5kSUFOQUVuY29kaW5nICE9IG51bGwpIHsKLQkJCQllbnN1cmVDYW5SZWFkKGZpbGVuYW1lLCBmb3VuZElBTkFFbmNvZGluZywgaXN0cmVhbSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAoaXN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJaXN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQkJaWYgKGlucHV0U3RyZWFtICE9IG51bGwpIHsKLQkJCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QganVzdCByZWFkcyB0byBzdHJlYW0sIHRvIGJlIHN1cmUgaXQgY2FuIGJlIHJlYWQgcGVyCi0JICogZW5jb2RpbmcsIHdpdGhvdXQgZXhjZXB0aW9uLgotCSAqLwotCXByaXZhdGUgdm9pZCBlbnN1cmVDYW5SZWFkKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGVuY29kaW5nLCBJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQ2hhcnNldCBjaGFyc2V0ID0gQ2hhcnNldC5mb3JOYW1lKGVuY29kaW5nKTsKLQkJQ2hhcnNldERlY29kZXIgY2hhcnNldERlY29kZXIgPSBjaGFyc2V0Lm5ld0RlY29kZXIoKTsKLQkJY2hhcnNldERlY29kZXIub25NYWxmb3JtZWRJbnB1dChDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCQljaGFyc2V0RGVjb2Rlci5vblVubWFwcGFibGVDaGFyYWN0ZXIoQ29kaW5nRXJyb3JBY3Rpb24uUkVQT1JUKTsKLQotCQlJbnB1dFN0cmVhbVJlYWRlciByZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaW5wdXRTdHJlYW0sIGNoYXJzZXREZWNvZGVyKTsKLQkJU3RyaW5nQnVmZmVyIHN0cmluZ0J1ZmZlciA9IHJlYWRJbnB1dFN0cmVhbShyZWFkZXIpOwotCQlpZiAoREVCVUcpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKGZpbGVuYW1lKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihzdHJpbmdCdWZmZXIudG9TdHJpbmcoKSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIFN0cmluZ0J1ZmZlciByZWFkSW5wdXRTdHJlYW0oUmVhZGVyIHJlYWRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQotCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpbnQgbnVtUmVhZCA9IDA7Ci0JCWNoYXIgdEJ1ZmZbXSA9IG5ldyBjaGFyW1JFQURfQlVGRkVSX1NJWkVdOwotCQl3aGlsZSAoKG51bVJlYWQgPSByZWFkZXIucmVhZCh0QnVmZiwgMCwgdEJ1ZmYubGVuZ3RoKSkgIT0gLTEpIHsKLQkJCWJ1ZmZlci5hcHBlbmQodEJ1ZmYsIDAsIG51bVJlYWQpOwotCQl9Ci0JCXJldHVybiBidWZmZXI7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJlc3RDYXNlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIm5vblN0YW5kYXJkLmNzcyI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJJU08tODg1OS02IiwgbmV3IENTU1Jlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbXB0eUZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiZW1wdHlGaWxlLmNzcyI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsIG51bGwsIG5ldyBDU1NSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVVQ0pQKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgImVuY29kaW5nX3Rlc3RfZXVjanAuY3NzIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIkVVQy1KUCIsIG5ldyBDU1NSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpJUygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJlbmNvZGluZ190ZXN0X2ppcy5jc3MiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiSVNPLTIwMjItSlAiLCBuZXcgQ1NTUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb0VuY29kaW5nKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIm5vRW5jb2RpbmcuY3NzIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgbnVsbCwgbmV3IENTU1Jlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0bm9uU3RhbmRhcmRJbGxGb3JtZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibm9uU3RhbmRhcmRJbGxGb3JtZWQuY3NzIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIklTTy04ODU5LTYiLCBuZXcgQ1NTUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3Rub25TdGFuZGFyZElsbEZvcm1lZDIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibm9uU3RhbmRhcmRJbGxGb3JtZWQyLmNzcyI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJJU08tODg1OS02IiwgbmV3IENTU1Jlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2hpZnRKSVMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiZW5jb2RpbmdfdGVzdF9zamlzLmNzcyI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJTSElGVF9KSVMiLCBuZXcgQ1NTUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvY3NzL0NTU0hlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvY3NzL0NTU0hlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI1YTNkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL2Nzcy9DU1NIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLmNzczsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuQ1NTSGVhZFRva2VuaXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuQ1NTSGVhZFRva2VuaXplckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuSGVhZFBhcnNlclRva2VuOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcuQ1NTRW5jb2RpbmdUZXN0c1BsdWdpbjsKLQotcHVibGljIGNsYXNzIENTU0hlYWRUb2tlbml6ZXJUZXN0ZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0JcHJpdmF0ZSBTdHJpbmcgZmNoYXJzZXQ7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZURpciA9ICJjc3MvIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlSG9tZSA9ICJ0ZXN0ZmlsZXMvIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlTG9jYXRpb24gPSBmaWxlSG9tZSArIGZpbGVEaXI7Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0RmlsZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBleHBlY3RlZE5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIGV4cGVjdGVkTmFtZSwgbnVsbCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdEZpbGUoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZXhwZWN0ZWROYW1lLCBTdHJpbmcgZmluYWxUb2tlblR5cGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUNTU0hlYWRUb2tlbml6ZXIgdG9rZW5pemVyID0gbnVsbDsKLQkJUmVhZGVyIGZpbGVSZWFkZXIgPSBudWxsOwotCQl0cnkgewotCQkJaWYgKERFQlVHKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCIgICAgICAgIiArIGZpbGVuYW1lKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCX0KLQkJCWZpbGVSZWFkZXIgPSBDU1NFbmNvZGluZ1Rlc3RzUGx1Z2luLmdldFRlc3RSZWFkZXIoZmlsZW5hbWUpOwotCQkJdG9rZW5pemVyID0gbmV3IENTU0hlYWRUb2tlbml6ZXIoZmlsZVJlYWRlcik7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3Igb3BlbmluZyBmaWxlIFwiIiArIGZpbGVuYW1lICsgIlwiIik7Ci0JCQl0aHJvdyBlOwotCQl9Ci0KLQkJSGVhZFBhcnNlclRva2VuIHJlc3VsdFRva2VuID0gbnVsbDsKLQkJSGVhZFBhcnNlclRva2VuIHRva2VuID0gcGFyc2VIZWFkZXIodG9rZW5pemVyKTsKLQkJU3RyaW5nIHJlc3VsdFZhbHVlID0gZmNoYXJzZXQ7Ci0JCWZpbGVSZWFkZXIuY2xvc2UoKTsKLQkJaWYgKGZpbmFsVG9rZW5UeXBlICE9IG51bGwpIHsKLQkJCWFzc2VydFRydWUoImRpZCBub3QgZW5kIGFzIGV4cGVjdGVkLiBmb3VuZDogICIgKyB0b2tlbi5nZXRUeXBlKCksIGZpbmFsVG9rZW5UeXBlLmVxdWFscyh0b2tlbi5nZXRUeXBlKCkpKTsKLQkJfQotCQllbHNlIHsKLQkJCWlmIChleHBlY3RlZE5hbWUgPT0gbnVsbCkgewotCQkJCWFzc2VydFRydWUoImV4cGVjdGVkIG5vIGVuY29kaW5nLCBidXQgZm91bmQ6ICIgKyByZXN1bHRWYWx1ZSwgcmVzdWx0VG9rZW4gPT0gbnVsbCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlhc3NlcnRUcnVlKCJleHBlY3RlZCAiICsgZXhwZWN0ZWROYW1lICsgIiBidXQgZm91bmQgIiArIHJlc3VsdFZhbHVlLCBleHBlY3RlZE5hbWUuZXF1YWxzKHJlc3VsdFZhbHVlKSk7Ci0JCQl9Ci0JCX0KLQotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0xlZ2FsU3RyaW5nKFN0cmluZyB0b2tlblR5cGUpIHsKLQkJaWYgKHRva2VuVHlwZSA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCQllbHNlCi0JCQlyZXR1cm4gdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5TdHJpbmdWYWx1ZSkgfHwgdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5VbkRlbGltaXRlZFN0cmluZ1ZhbHVlKSB8fCB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLkludmFsaWRUZXJtaW5hdGVkU3RyaW5nVmFsdWUpIHx8IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuSW52YWxpZFRlcm1pbnRhdGVkVW5EZWxpbWl0ZWRTdHJpbmdWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogR2l2ZSdzIHByaW9yaXR5IHRvIGVuY29kaW5nIHZhbHVlLCBpZiBmb3VuZCBlbHNlLCBsb29rcyBmb3IgY29udGVudFR5cGUKLQkgKiB2YWx1ZTsKLQkgKi8KLQlwcml2YXRlIEhlYWRQYXJzZXJUb2tlbiBwYXJzZUhlYWRlcihDU1NIZWFkVG9rZW5pemVyIHRva2VuaXplcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSGVhZFBhcnNlclRva2VuIHRva2VuID0gbnVsbDsKLQkJSGVhZFBhcnNlclRva2VuIGZpbmFsVG9rZW4gPSBudWxsOwotCQlkbyB7Ci0JCQl0b2tlbiA9IHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsKLQkJCVN0cmluZyB0b2tlblR5cGUgPSB0b2tlbi5nZXRUeXBlKCk7Ci0JCQlpZiAodG9rZW5UeXBlID09IENTU0hlYWRUb2tlbml6ZXJDb25zdGFudHMuQ0hBUlNFVF9SVUxFKSB7Ci0JCQkJaWYgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQkJSGVhZFBhcnNlclRva2VuIHZhbHVlVG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQkJCVN0cmluZyB2YWx1ZVRva2VuVHlwZSA9IHZhbHVlVG9rZW4uZ2V0VHlwZSgpOwotCQkJCQlpZiAoaXNMZWdhbFN0cmluZyh2YWx1ZVRva2VuVHlwZSkpIHsKLQkJCQkJCWZjaGFyc2V0ID0gdmFsdWVUb2tlbi5nZXRUZXh0KCk7Ci0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQl3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSk7Ci0JCWZpbmFsVG9rZW4gPSB0b2tlbjsKLQkJcmV0dXJuIGZpbmFsVG9rZW47Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QmVzdENhc2UoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibm9uU3RhbmRhcmQuY3NzIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTYiKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbXB0eUZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiZW1wdHlGaWxlLmNzcyI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFVUNKUCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJlbmNvZGluZ190ZXN0X2V1Y2pwLmNzcyI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJFVUMtSlAiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SklTKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgImVuY29kaW5nX3Rlc3RfamlzLmNzcyI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tMjAyMi1KUCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb0VuY29kaW5nKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIm5vRW5jb2RpbmcuY3NzIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdG5vblN0YW5kYXJkSWxsRm9ybWVkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIm5vblN0YW5kYXJkSWxsRm9ybWVkLmNzcyI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS02Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdG5vblN0YW5kYXJkSWxsRm9ybWVkMigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub25TdGFuZGFyZElsbEZvcm1lZDIuY3NzIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTYiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2hpZnRKSVMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiZW5jb2RpbmdfdGVzdF9zamlzLmNzcyI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJTSElGVF9KSVMiKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvY3NzL0VuY29kaW5nUGFyc2VyQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjNjBjZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgSmVucyBMdWtvd3NraS9Jbm5vb3ByYWN0IC0gaW5pdGlhbCByZW5hbWluZy9yZXN0cnVjdHVyaW5nCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5jc3M7Ci0KLQotcHVibGljIGludGVyZmFjZSBFbmNvZGluZ1BhcnNlckNvbnN0YW50cyB7Ci0KLQlmaW5hbCBTdHJpbmcgRU9GID0gIkVPRiI7IC8vJE5PTi1OTFMtMSQKLQlmaW5hbCBTdHJpbmcgSW52YWxpZFRlcm1pbmF0ZWRTdHJpbmdWYWx1ZSA9ICJJbnZhbGlkVGVybWluYXRlZFN0cmluZ1ZhbHVlIjsgLy8kTk9OLU5MUy0xJAotCWZpbmFsIFN0cmluZyBJbnZhbGlkVGVybWludGF0ZWRVbkRlbGltaXRlZFN0cmluZ1ZhbHVlID0gIkludmFsaWRUZXJtaW50YXRlZFVuRGVsaW1pdGVkU3RyaW5nVmFsdWUiOyAvLyROT04tTkxTLTEkCi0JZmluYWwgU3RyaW5nIE1BWF9DSEFSU19SRUFDSEVEID0gIk1BWF9DSEFSU19SRUFDSEVEIjsgLy8kTk9OLU5MUy0xJAotCWZpbmFsIFN0cmluZyBTdHJpbmdWYWx1ZSA9ICJzdHJ2YWwiOyAvLyROT04tTkxTLTEkCi0JZmluYWwgU3RyaW5nIFVuRGVsaW1pdGVkU3RyaW5nVmFsdWUgPSAiVW5EZWxpbWl0ZWRTdHJpbmdWYWx1ZSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgZmluYWwgU3RyaW5nIFVURjE2QkUgPSAiVVRGMTZCRSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgZmluYWwgU3RyaW5nIFVURjE2TEUgPSAiVVRGMTZMRSI7IC8vJE5PTi1OTFMtMSQKLQotCi0JcHVibGljIGZpbmFsIFN0cmluZyBVVEY4M0J5dGVCT00gPSAiVVRGODNCeXRlQk9NIjsgLy8kTk9OLU5MUy0xJAotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL2Nzcy9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JDU1MuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvY3NzL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckNTUy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDY4NzI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvY3NzL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckNTUy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcuY3NzOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucmVhZC5UZXN0Q29udGVudFR5cGVEZXRlY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JDU1MgZXh0ZW5kcyBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb24gewotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmNzc3NvdXJjZSIsICJ0ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAwMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmNzc3NvdXJjZSIsICJ0ZXN0ZmlsZXMvY3NzL2VtcHR5RmlsZS5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMDIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5jc3Nzb3VyY2UiLCAidGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2V1Y2pwLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAwMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmNzc3NvdXJjZSIsICJ0ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfamlzLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmNzc3NvdXJjZSIsICJ0ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3Rfc2ppcy5jc3MiLCBudWxsKTsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmNzc3NvdXJjZSIsICJ0ZXN0ZmlsZXMvY3NzL25vRW5jb2RpbmcuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuY3Nzc291cmNlIiwgInRlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmQuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuY3Nzc291cmNlIiwgInRlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQyLmNzcyIsIG51bGwpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1ZjBiYTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdAotCW5hbWU9InRlc3RzdWl0ZSIKLQlkZWZhdWx0PSJydW4iCi0JYmFzZWRpcj0iLiI+Ci0KLQk8IS0tIENvbmZpZ3VyYWJsZSBQcm9wZXJ0aWVzIC0tPgotCi0JPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLQk8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgotCTwhLS0gPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiR7YmFzZWRpcn1cLi5cLi4iIC8+IC0tPgotCi0JPGVjaG8gbWVzc2FnZT0iYmFzZWRpciAke2Jhc2VkaXJ9IiAvPgotCTxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UgcGxhY2UgJHtlY2xpcHNlLWhvbWV9IiAvPgotCi0JPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIHBsdWdpbi1uYW1lLCBhbmQgbGlicmFyeS1maWxlIC0tPgotCTxwcm9wZXJ0eQotCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmciIC8+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9ImxpYnJhcnktZmlsZSIKLQkJdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0JPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLQk8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLQk8dGFyZ2V0IG5hbWU9ImluaXQiPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQKLQkJCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLQkJCQlpbmNsdWRlcz0ib3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy4qeG1sIiAvPgotCQk8L2RlbGV0ZT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0JPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0JCTxwcm9wZXJ0eQotCQkJbmFtZT0id3N0LWZvbGRlciIKLQkJCXZhbHVlPSIke2VjbGlwc2UtaG9tZX0vd3N0X2ZvbGRlciIgLz4KLQkJPGRlbGV0ZQotCQkJZGlyPSIke3dzdC1mb2xkZXJ9IgotCQkJcXVpZXQ9InRydWUiIC8+Ci0JCTxhbnQKLQkJCXRhcmdldD0iY29yZS10ZXN0IgotCQkJYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotCQkJZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iZGF0YS1kaXIiCi0JCQkJdmFsdWU9IiR7d3N0LWZvbGRlcn0iIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZyIgLz4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9ImNsYXNzbmFtZSIKLQkJCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5DU1NFbmNvZGluZ1Rlc3RTdWl0ZSIgLz4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9InBsdWdpbi1wYXRoIgotCQkJCXZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLQk8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0JPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotCTx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0JCTwhLS08ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4tLT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLQk8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0JPHRhcmdldAotCQluYW1lPSJydW4iCi0JCWRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0JCTxhbnQKLQkJCXRhcmdldD0iY29sbGVjdCIKLQkJCWFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLQkJCWRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9ImluY2x1ZGVzIgotCQkJCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLip4bWwiIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJvdXRwdXQtZmlsZSIKLQkJCQl2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotCQk8L2FudD4KLQkJPCEtLTxlbWFpbFJlc3VsdHMgcmVzdWx0c0ZpbGU9IiR7YnVpbGQtcmVzdWx0cy1ob21lfS8ke3BsdWdpbi1uYW1lfS54bWwiIGFkZHJlc3NsaXN0PSJkYXZpZF93aWxsaWFtc0B1cy5pYm0uY29tIiAvPiAtLT4KLQk8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbXB0eUZpbGUuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VtcHR5RmlsZS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VtcHR5RmlsZS5jc3MKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfZXVjanAuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfZXVjanAuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTI1NmU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2V1Y2pwLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQGNoYXJzZXQgIkVVQy1KUCI7DQotDQotQk9EWSB7DQotCWZvbnQtZmFtaWx5IDogIqPNo9Mgo9CltKW3pcOlryI7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2ppcy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9qaXMuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODQ3NjhiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2ppcy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLUBjaGFyc2V0ICJJU08tMjAyMi1KUCI7DQotDQotQk9EWSB7DQotCWZvbnQtZmFtaWx5IDogIhskQiNNI1MbKEIgGyRCI1AlNCU3JUMlLxsoQiI7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X3NqaXMuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3Rfc2ppcy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MjljZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3Rfc2ppcy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLUBjaGFyc2V0ICJTSElGVF9KSVMiOw0KLQ0KLUJPRFkgew0KLQlmb250LWZhbWlseSA6ICKCbIJyIIJvg1ODVoNig04iOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9FbmNvZGluZy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9FbmNvZGluZy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZjA2YmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vRW5jb2RpbmcuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotQk9EWSB7DQotCWZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgIk1TIFNhbnMgU2VyaWYiOw0KLQl0ZXh0LWRlY29yYXRpb246IG5vbmU7DQotCWJhY2tncm91bmQtY29sb3I6IHdoaXRlOw0KLX0NCi0NCi1URCB7DQotCWZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIjsNCi0JZm9udC1zaXplOiAxMnB0Ow0KLQljb2xvcjogYmxhY2s7DQotCWZvbnQtc3R5bGU6IG5vcm1hbDsNCi0JdGV4dC1hbGlnbjogbGVmdDsNCi19DQotDQotVEggew0KLQlmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiI7DQotCWZvbnQtc2l6ZTogMTJwdDsNCi0JY29sb3I6IGJsYWNrOw0KLQlmb250LXN0eWxlOiBub3JtYWw7DQotCWZvbnQtd2VpZ2h0OiBib2xkZXI7DQotCXRleHQtYWxpZ246IGxlZnQ7DQotfQ0KLQ0KLUgxIHsNCi0JZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iOw0KLQlmb250LXNpemU6IDE0cHQ7DQotCWNvbG9yOiBibGFjazsNCi0JZm9udC1zdHlsZTogbm9ybWFsOw0KLQlmb250LXdlaWdodDogYm9sZGVyOw0KLQl0ZXh0LWFsaWduOiBjZW50ZXINCi19DQotDQotSDIgew0KLQlmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiI7DQotCWZvbnQtc2l6ZTogMTJwdDsNCi0JY29sb3I6IGJsYWNrOw0KLQlmb250LXN0eWxlOiBub3JtYWw7DQotCWZvbnQtd2VpZ2h0OiBib2xkZXINCi19DQotDQotSDMgew0KLQlmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiI7DQotCWZvbnQtc2l6ZTogMTJwdDsNCi0JY29sb3I6IGJsYWNrOw0KLQlmb250LXN0eWxlOiBpdGFsaWMgIA0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM5OTdlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1AY2hhcnNldCAiSVNPLTg4NTktNiI7DQotDQotDQotDQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxYTRlNDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQGNoYXJzZXQgIklTTy04ODU5LTY7DQotDQotDQotDQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkMi5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQyLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNjOGExZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQyLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotDQotDQotICAgIEBjaGFyc2V0ICJJU08tODg1OS02IjsNCi0NCi0NCi0NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MWM4ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjYyMWU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotYmluCi1iaW4ucHJvamVjdAotYnVpbGQueG1sCi1kZXYucHJvcGVydGllcwotb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0c18xLjAuMC5qYXIKLWNzc3VpdGVzdHMuamFyCi10ZW1wLmZvbGRlcgotUGVyZm9ybWFuY2VSZXN1bHRzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQxZDE2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTU5YTczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotI1dlZCBTZXAgMTQgMTU6MzY6NTEgRURUIDIwMDUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9YWJvcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBhdGlibGVKREtMZXZlbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGxldGVDbGFzc3BhdGg9ZXJyb3IKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNkYmE5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jV2VkIFNlcCAxNCAxNTozNjo1MSBFRFQgMjAwNQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhODVjYmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6IENTUyBVSSBUZXN0cyBQbHVnLWluCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMuQ1NTVUlUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogRWNsaXBzZQotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cwotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuanVuaXQsCi0gb3JnLmVjbGlwc2Uud3N0LmNzcy51aSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLAotIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZSwKLSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LAotIG9yZy5lY2xpcHNlLnVpLmVkaXRvcnMsCi0gb3JnLmVjbGlwc2UudWkudmlld3MsCi0gb3JnLmVjbGlwc2UudWkud29ya2JlbmNoLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC50ZXh0ZWRpdG9yLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKLSBvcmcuanVuaXQKLUVjbGlwc2UtQXV0b1N0YXJ0OiB0cnVlCi1CdW5kbGUtQ2xhc3NQYXRoOiBjc3N1aXRlc3RzLmphcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjZiOTZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotPGJvZHkgbGFuZz0iRU4tVVMiPgotPGgyPkFib3V0IFRoaXMgQ29udGVudDwvaDI+Ci0gCi08cD5GZWJydWFyeSAyNCwgMjAwNTwvcD4JCi08aDM+TGljZW5zZTwvaDM+Ci0KLTxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAoJnF1b3Q7Q29udGVudCZxdW90OykuICBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKLUVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+Ci0KLTxwPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIENvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgmcXVvdDtSZWRpc3RyaWJ1dG9yJnF1b3Q7KSBhbmQgZGlmZmVyZW50IHRlcm1zIGFuZCBjb25kaXRpb25zIG1heQotYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAgQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3IncyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuICBJZiBubyBzdWNoIGxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiAgVW5sZXNzIG90aGVyd2lzZQotaW5kaWNhdGVkIGJlbG93LCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQuPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWU1M2I5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGNzc3VpdGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgc3JjLyxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbAotamFycy5jb21waWxlLm9yZGVyID0gY3NzdWl0ZXN0cy5qYXIKLXNvdXJjZS5jc3N1aXRlc3RzLmphciA9IHNyYy8KLW91dHB1dC5jc3N1aXRlc3RzLmphciA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvQ1NTVUlUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvQ1NTVUlUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFiZWY1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL0NTU1VJVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy52aWV3ZXIuVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25DU1M7Ci0KLXB1YmxpYyBjbGFzcyBDU1NVSVRlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IENTU1VJVGVzdFN1aXRlKCk7Ci0JfQotCi0JcHVibGljIENTU1VJVGVzdFN1aXRlKCkgewotCQlzdXBlcigiQ1NTIFVJIFRlc3QgU3VpdGUiKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEV4aXN0ZW5jZVRlc3QuY2xhc3MsICJDU1MgVUkgRXhpc3RlbmNlIFRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkNTUy5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25DU1MuY2xhc3MpKTsKLQl9Ci19CQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvQ1NTVUlUZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9DU1NVSVRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxZjBmMDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9DU1NVSVRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uKjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBDU1NVSVRlc3RzUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7Ci0KLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgQ1NTVUlUZXN0c1BsdWdpbiBwbHVnaW47Ci0JCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBDU1NVSVRlc3RzUGx1Z2luKCkgewotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB1cG9uIHBsdWctaW4gYWN0aXZhdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBwbHVnLWluIGlzIHN0b3BwZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JCXBsdWdpbiA9IG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgQ1NTVUlUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYW4gaW1hZ2UgZGVzY3JpcHRvciBmb3IgdGhlIGltYWdlIGZpbGUgYXQgdGhlIGdpdmVuCi0JICogcGx1Zy1pbiByZWxhdGl2ZSBwYXRoLgotCSAqCi0JICogQHBhcmFtIHBhdGggdGhlIHBhdGgKLQkgKiBAcmV0dXJuIHRoZSBpbWFnZSBkZXNjcmlwdG9yCi0JICovCi0JcHVibGljIHN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yKFN0cmluZyBwYXRoKSB7Ci0JCXJldHVybiBBYnN0cmFjdFVJUGx1Z2luLmltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oIm9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMiLCBwYXRoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL0V4aXN0ZW5jZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvRXhpc3RlbmNlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTMxMjdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvRXhpc3RlbmNlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLmludGVybmFsLkNTU1VJUGx1Z2luOwotCi0vKioKLSAqIAotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgY2xhc3MgRXhpc3RlbmNlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiB0ZXN0cyBpZiBDU1NVSVBsdWdpbiBjYW4gYmUgbG9hZGVkCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEV4aXN0cygpIHsKLQkJUGx1Z2luIHAgPSBDU1NVSVBsdWdpbi5nZXREZWZhdWx0KCk7Ci0JCWFzc2VydE5vdE51bGwoImNvdWxkbid0IGxvYWQgQ1NTIFVJIHBsdWdpbiIsIHApOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25DU1MuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25DU1MuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRlMzBiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uQ1NTLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgIEplbnMgTHVrb3dza2kvSW5ub29wcmFjdCAtIGluaXRpYWwgcmVuYW1pbmcvcmVzdHJ1Y3R1cmluZwotICogCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yQ1NTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uQ1NTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudWkudmlld3MuY29udGVudG91dGxpbmUuQ1NTQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudWkudmlld3MucHJvcGVydGllcy5DU1NQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLkV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXI7Ci0KLS8qKgotICogVGVzdHMgcmV0cmlldmluZyBlZGl0b3IgY29udHJpYnV0aW9ucyBmb3IgY3NzIGNvbnRlbnQgdHlwZQotICovCi1wdWJsaWMgY2xhc3MgVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25DU1MgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHZvaWQgdGVzdEdldFNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0JCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5TT1VSQ0VWSUVXRVJDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gc291cmNlIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckNTUy5Db250ZW50VHlwZUlEX0NTUywgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBzb3VyY2Ugdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTLCBvLmdldENsYXNzKCksIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkNTUy5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRPdXRsaW5lVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLkNPTlRFTlRPVVRMSU5FQ09ORklHVVJBVElPTiwgQ29udGVudFR5cGVJZEZvckNTUy5Db250ZW50VHlwZUlEX0NTUyk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIGNvbnRlbnQgb3V0bGluZSBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckNTUy5Db250ZW50VHlwZUlEX0NTUywgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBjb250ZW50IG91dGxpbmUgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JDU1MuQ29udGVudFR5cGVJRF9DU1MsIG8uZ2V0Q2xhc3MoKSwgQ1NTQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24oKSB7Ci0JCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5QUk9QRVJUWVNIRUVUQ09ORklHVVJBVElPTiwgQ29udGVudFR5cGVJZEZvckNTUy5Db250ZW50VHlwZUlEX0NTUyk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIHByb3BlcnR5IHNoZWV0IGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTLCBvKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIHByb3BlcnR5IHNoZWV0IGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTLCBvLmdldENsYXNzKCksIENTU1Byb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uLmNsYXNzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkNTUy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25DU1MuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg0ZTQ4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkNTUy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMxICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy52aWV3ZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklBdXRvRWRpdFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUluZm9ybWF0aW9uQ29udHJvbENyZWF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dERvdWJsZUNsaWNrU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dEhvdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5JQ29udGVudEFzc2lzdGFudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmZvcm1hdHRlci5JQ29udGVudEZvcm1hdHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0Lmh5cGVybGluay5JSHlwZXJsaW5rRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5pbmZvcm1hdGlvbi5JSW5mb3JtYXRpb25QcmVzZW50ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5yZWNvbmNpbGVyLklSZWNvbmNpbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JQ1NTUGFydGl0aW9uVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25DU1M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS5pbnRlcm5hbC5Mb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnN0eWxlLkxpbmVTdHlsZVByb3ZpZGVyOwotCi1wdWJsaWMgY2xhc3MgVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25DU1MgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkNTUyBmQ29uZmlnID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gZkRpc3BsYXlFeGlzdHMgPSB0cnVlOwotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXIgZlZpZXdlciA9IG51bGw7Ci0JcHJpdmF0ZSBib29sZWFuIGlzU2V0dXAgPSBmYWxzZTsKLQotCXB1YmxpYyBUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkNTUygpIHsKLQkJc3VwZXIoIlRlc3RWaWV3ZXJDb25maWd1cmF0aW9uQ1NTIik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlzdXBlci5zZXRVcCgpOwotCQlpZiAoIXRoaXMuaXNTZXR1cCkgewotCQkJc2V0VXBWaWV3ZXJDb25maWd1cmF0aW9uKCk7Ci0JCQl0aGlzLmlzU2V0dXAgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHNldFVwVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQotCQlpZiAoRGlzcGxheS5nZXRDdXJyZW50KCkgIT0gbnVsbCkgewotCi0JCQlTaGVsbCBzaGVsbCA9IG51bGw7Ci0JCQlDb21wb3NpdGUgcGFyZW50ID0gbnVsbDsKLQotCQkJaWYgKFBsYXRmb3JtVUkuaXNXb3JrYmVuY2hSdW5uaW5nKCkpIHsKLQkJCQlzaGVsbCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXNoZWxsID0gbmV3IFNoZWxsKERpc3BsYXkuZ2V0Q3VycmVudCgpKTsKLQkJCX0KLQkJCXBhcmVudCA9IG5ldyBDb21wb3NpdGUoc2hlbGwsIFNXVC5OT05FKTsKLQotCQkJLy8gZHVtbXkgdmlld2VyCi0JCQlmVmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5OT05FKTsKLQkJCWZDb25maWcgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uQ1NTKCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlmRGlzcGxheUV4aXN0cyA9IGZhbHNlOwotCQkJTG9nZ2VyLmxvZyhMb2dnZXIuSU5GTywgIlJlbWVtYmVyLCB2aWV3ZXIgY29uZmlndXJhdGlvbiB0ZXN0cyBhcmUgbm90IHJ1biBiZWNhdXNlIHdvcmtiZW5jaCBpcyBub3Qgb3BlbiAobm9ybWFsIG9uIGJ1aWxkIG1hY2hpbmUpIik7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QXV0b0VkaXRTdHJhdGVnaWVzKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJQXV0b0VkaXRTdHJhdGVneVtdIHN0cmF0ZWdpZXMgPSBmQ29uZmlnLmdldEF1dG9FZGl0U3RyYXRlZ2llcyhmVmlld2VyLCBJQ1NTUGFydGl0aW9uVHlwZXMuU1RZTEUpOwotCQlhc3NlcnROb3ROdWxsKHN0cmF0ZWdpZXMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gYXV0byBlZGl0IHN0cmF0ZWdpZXMiLCBzdHJhdGVnaWVzLmxlbmd0aCA+IDApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb25maWd1cmVkQ29udGVudFR5cGVzKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlTdHJpbmdbXSBjb25maWd1cmVkQ29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKGNvbmZpZ3VyZWRDb250ZW50VHlwZXMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBjb250ZW50IHR5cGVzIiwgY29uZmlndXJlZENvbnRlbnRUeXBlcy5sZW5ndGggPiAxKTsKLQl9Ci0KLQkvKgotCSAqIG5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudEFzc2lzdGFudCgpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUNvbnRlbnRBc3Npc3RhbnQgY2EgPSBmQ29uZmlnLmdldENvbnRlbnRBc3Npc3RhbnQoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGlzIG5vIGNvbnRlbnQgYXNzaXN0YW50IiwgY2EpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50Rm9ybWF0dGVyKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJQ29udGVudEZvcm1hdHRlciBjZiA9IGZDb25maWcuZ2V0Q29udGVudEZvcm1hdHRlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgidGhlcmUgaXMgbm8gY29udGVudCBmb3JtYXR0ZXIiLCBjZik7Ci0JfQotCi0JLyoKLQkgKiBub3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldERvdWJsZUNsaWNrU3RyYXRlZ3koKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUlUZXh0RG91YmxlQ2xpY2tTdHJhdGVneSBzdHJhdGVneSA9IGZDb25maWcuZ2V0RG91YmxlQ2xpY2tTdHJhdGVneShmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYgKHN0cmF0ZWd5ICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgZG91YmxlIGNsaWNrIHN0cmF0ZWdpZXMiLCBmYWxzZSk7Ci0JfQotCi0JLyoKLQkgKiBub3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldEh5cGVybGlua0RldGVjdG9ycygpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUh5cGVybGlua0RldGVjdG9yW10gZGV0ZWN0b3JzID0gZkNvbmZpZy5nZXRIeXBlcmxpbmtEZXRlY3RvcnMoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGFyZSBubyBoeXBlcmxpbmsgZGV0ZWN0b3JzIiwgZGV0ZWN0b3JzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGh5cGVybGluayBkZXRlY3RvcnMiLCBkZXRlY3RvcnMubGVuZ3RoID4gMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEluZGVudFByZWZpeGVzKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJU3RyaW5nIHByZWZpeGVzW10gPSBmQ29uZmlnLmdldEluZGVudFByZWZpeGVzKGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZiAocHJlZml4ZXMgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBpbmRlbnQgcHJlZml4ZXMiLCBmYWxzZSk7Ci0JfQotCi0JLyoKLQkgKiBub3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldEluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvciBpbmZvQ3JlYXRvciA9IGZDb25maWcuZ2V0SW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvciBpcyBudWxsIiwgaW5mb0NyZWF0b3IpOwotCX0KLQotCS8qCi0JICogbm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRJbmZvcm1hdGlvblByZXNlbnRlcigpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUluZm9ybWF0aW9uUHJlc2VudGVyIHByZXNlbnRlciA9IGZDb25maWcuZ2V0SW5mb3JtYXRpb25QcmVzZW50ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkluZm9ybWF0aW9uUHJlc2VudGVyIGlzIG51bGwiLCBwcmVzZW50ZXIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRMaW5lU3R5bGVQcm92aWRlcnMoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlTdHJpbmdbXSBjb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlMaW5lU3R5bGVQcm92aWRlciBwcm92aWRlcnNbXSA9IGZDb25maWcuZ2V0TGluZVN0eWxlUHJvdmlkZXJzKGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZiAocHJvdmlkZXJzICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgbGluZSBzdHlsZSBwcm92aWRlcnMiLCBmYWxzZSk7Ci0JfQotCi0JLyoKLQkgKiBub3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldFJlY29uY2lsZXIoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlSZWNvbmNpbGVyIHIgPSBmQ29uZmlnLmdldFJlY29uY2lsZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIlJlY29uY2lsZXIgbm90IG51bGwiLCByKTsKLQl9Ci0KLQkvKgotCSAqIG5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VGV4dEhvdmVyKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlTdHJpbmdbXSBob3ZlclBhcnRpdGlvbnMgPSBuZXcgU3RyaW5nW117SUNTU1BhcnRpdGlvblR5cGVzLlNUWUxFfTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBob3ZlclBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCUlUZXh0SG92ZXIgaG92ZXIgPSBmQ29uZmlnLmdldFRleHRIb3ZlcihmVmlld2VyLCBob3ZlclBhcnRpdGlvbnNbaV0sIFNXVC5OT05FKTsKLQkJCWFzc2VydE5vdE51bGwoImhvdmVyIHdhcyBudWxsIGZvciBwYXJ0aXRpb246ICIgKyBob3ZlclBhcnRpdGlvbnNbaV0sIGhvdmVyKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmRjMTI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi08cHJvamVjdCBuYW1lPSJ0ZXN0c3VpdGUiIGRlZmF1bHQ9InJ1biIgYmFzZWRpcj0iLiI+Ci0JPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLQk8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgotCTwhLS08cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfVwuLlwuLiIvPi0tPgotCi0JPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIHBsdWdpbi1uYW1lLCBhbmQgbGlicmFyeS1maWxlIC0tPgotCTxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMiIC8+Ci0JPHByb3BlcnR5IG5hbWU9ImxpYnJhcnktZmlsZSIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLQk8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotCTwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotCTx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMuKnhtbCIgLz4KLQkJPC9kZWxldGU+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotCTx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCQk8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4KLQkJPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9IiAvPgotCQkJPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy5DU1NVSVRlc3RTdWl0ZSIgLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLQk8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0JPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotCTx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0JCTwhLS08ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPi0tPgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLQk8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLQkJPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy4qeG1sIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9Im91dHB1dC1maWxlIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotCQk8L2FudD4KLQkJPCEtLQkJPGVtYWlsUmVzdWx0cyByZXN1bHRzRmlsZT0iJHtidWlsZC1yZXN1bHRzLWhvbWV9LyR7cGx1Z2luLW5hbWV9LnhtbCIgYWRkcmVzc2xpc3Q9ImRhdmlkX3dpbGxpYW1zQHVzLmlibS5jb20iIC8+IC0tPgotCTwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTFjOGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVlYmZlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLWJpbgotYmluLnByb2plY3QKLWJ1aWxkLnhtbAotZGV2LnByb3BlcnRpZXMKLWR0ZHVpdGVzdHMuamFyCi10ZW1wLmZvbGRlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0OTdlMDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY0ODcxYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLSNGcmkgTWF5IDI3IDIzOjM5OjU1IEVEVCAyMDA1Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWFib3J0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnNhZmVUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmODMwMjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI0ZyaSBNYXkgMjcgMjM6Mzk6NTUgRURUIDIwMDUKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTYxMjliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiBEVEQgVUkgVGVzdHMKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMAotQnVuZGxlLUNsYXNzUGF0aDogZHRkdWl0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMuaW50ZXJuYWwuRFREVUlUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy5pbnRlcm5hbCwKLSBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLnZpZXdlcgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LAotIG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLnVpLmVkaXRvcnMsCi0gb3JnLmVjbGlwc2UudWkudmlld3MsCi0gb3JnLmVjbGlwc2UudWkud29ya2JlbmNoLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC50ZXh0ZWRpdG9yLAotIG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuanVuaXQKLUVjbGlwc2UtQXV0b1N0YXJ0OiB0cnVlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNmI5NmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci08Ym9keSBsYW5nPSJFTi1VUyI+Ci08aDI+QWJvdXQgVGhpcyBDb250ZW50PC9oMj4KLSAKLTxwPkZlYnJ1YXJ5IDI0LCAyMDA1PC9wPgkKLTxoMz5MaWNlbnNlPC9oMz4KLQotPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluICgmcXVvdDtDb250ZW50JnF1b3Q7KS4gIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQotRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KLQotPHA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCZxdW90O1JlZGlzdHJpYnV0b3ImcXVvdDspIGFuZCBkaWZmZXJlbnQgdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5Ci1hcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuICBDaGVjayB0aGUgUmVkaXN0cmlidXRvcidzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gIElmIG5vIHN1Y2ggbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuICBVbmxlc3Mgb3RoZXJ3aXNlCi1pbmRpY2F0ZWQgYmVsb3csIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudC48L3A+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzM2Q0YWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1zb3VyY2UuZHRkdWl0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuZHRkdWl0ZXN0cy5qYXIgPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIGR0ZHVpdGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCi1zcmMuaW5jbHVkZXMgPSBwbHVnaW4ueG1sCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL0RURFVJUHJlZmVyZW5jZXNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL0RURFVJUHJlZmVyZW5jZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzOTczMDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9EVERVSVByZWZlcmVuY2VzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS5pbnRlcm5hbC5EVERVSVBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb247Ci0KLS8qKgotICogVGhlIHB1cnBvc2Ugb2YgdGhpcyB0ZXN0IGlzIHRvIHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgdGhlIEhUTUwgU291cmNlCi0gKiBlZGl0b3IgcHJlZmVyZW5jZXMuIFRlc3RzIGluY2x1ZGUgc2V0dGluZy9nZXR0aW5nIHByZWZlcmVuY2VzLgotICogCi0gKiBOT1RFOiBUaGlzIHRlc3Qgc2hvdWxkIGJlIHByZWZvcm1lZCBvbiBhIGNsZWFuIHdvcmtzcGFjZS4gSWYgcGVyZm9ybWVkIG9uCi0gKiBhbiBleGlzdGluZyB3b3Jrc3BhY2UsIHRoaXMgdGVzdCB3aWxsIG1hbmlwdWxhdGUgcHJlZmVyZW5jZXMgaW4gdGhlCi0gKiB3b3Jrc3BhY2UsIHRob3VnaCBhdHRlbXB0cyB3aWxsIGJlIG1hZGUgdG8gcmVzdG9yZSBvcmlnaW5hbCB2YWx1ZXMgYWZ0ZXIKLSAqIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBEVERVSVByZWZlcmVuY2VzVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiBUZXN0cyBleGlzdGFuY2Ugb2YgcHJlZmVyZW5jZSB2YWx1ZXMgd2hlbiBnZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzCi0JICogdGhyb3VnaCBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdW5kbGVHZXRQcmVmZXJlbmNlcygpIHsKLQkJZmluYWwgU3RyaW5nIGJ1bmRsZU5hbWUgPSAib3JnLmVjbGlwc2Uud3N0LmR0ZC51aSI7Ci0KLQkJLy8gbmVlZCB0byBzdGFydCB1cCBidW5kbGUgZm9yIGRlZmF1bHQgdmFsdWVzIHRvIGJlIGxvYWRlZAotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKGJ1bmRsZU5hbWUpOwotCQl0cnkgewotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKQotCQkJCWJ1bmRsZS5zdGFydCgpOwotCQkJZWxzZQotCQkJCWZhaWwoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCBiZWNhdXNlIGNvdWxkIG5vdCBmaW5kIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUpOwotCQl9IGNhdGNoIChCdW5kbGVFeGNlcHRpb24gZSkgewotCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2Ugb2YgZXhjZXB0aW9uIHN0YXJ0aW5nIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUgKyAiIGV4Y2VwdGlvbjogIiArIGUpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1bmRsZUdldFByZWZlcmVuY2UoU3RyaW5nIGJ1bmRsZU5hbWUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCVN0cmluZyBkZWZhdWx0VmFsdWUgPSBMb25nLnRvU3RyaW5nKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsgLy8gcmFuZG9tCi0JCQkJCQkJCQkJCQkJCQkJCQkJLy8gc3RyaW5nCi0KLQkJU3RyaW5nIHZhbHVlID0gUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlKCkuZ2V0U3RyaW5nKGJ1bmRsZU5hbWUsIHByZWZLZXksIGRlZmF1bHRWYWx1ZSwgbnVsbCk7Ci0JCWFzc2VydE5vdFNhbWUoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UuIEtleTogIiArIHByZWZLZXksIGRlZmF1bHRWYWx1ZSwgdmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGRlZmF1bHQgdmFsdWVzIG9mIHByZWZlcmVuY2VzLgotCSAqIAotCSAqIE5PVEU6IEV4cGVjdGVkIGRlZmF1bHQgdmFsdWVzIGFyZSBoYXJkLWNvZGVkLCBzbyBpZiBkZWZhdWx0IHZhbHVlcyBkbwotCSAqIGdldCBjaGFuZ2VkLCBhc3NlcnRpb25zIG5lZWQgdG8gYmUgdXBkYXRlZCBhcyB3ZWxsCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlcygpIHsKLQkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IERURFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2UoSVByZWZlcmVuY2VTdG9yZSBzdG9yZSwgU3RyaW5nIHByZWZLZXksIFN0cmluZyBleHBlY3RlZCkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gc3RvcmUuZ2V0RGVmYXVsdFN0cmluZyhwcmVmS2V5KTsKLQkJYXNzZXJ0RXF1YWxzKCJHZXQgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5LCBleHBlY3RlZCwgZGVmYXVsdFZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzIGJ5IHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZSB0byBiZSBhCi0JICogY2VydGFpbiB2YWx1ZSwgdGhlbiBnZXR0aW5nIHRoZSBwcmVmZXJlbmNlIHZhbHVlIHRvIHZlcmlmeSBpdCB3YXMgc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5TZXRQcmVmZXJlbmNlcygpIHsKLQkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IERURFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luU2V0UHJlZmVyZW5jZUJvb2xlYW4oSVByZWZlcmVuY2VTdG9yZSBzdG9yZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJYm9vbGVhbiBvcmlnaW5hbFZhbHVlID0gc3RvcmUuZ2V0Qm9vbGVhbihwcmVmS2V5KTsKLQkJYm9vbGVhbiBleHBlY3RlZFZhbHVlID0gIW9yaWdpbmFsVmFsdWU7Ci0JCXN0b3JlLnNldFZhbHVlKHByZWZLZXksIGV4cGVjdGVkVmFsdWUpOwotCQlib29sZWFuIGZvdW5kVmFsdWUgPSBzdG9yZS5nZXRCb29sZWFuKHByZWZLZXkpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5ICsgIiAgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFZhbHVlICsgIiBmb3VuZDogIiArIGZvdW5kVmFsdWUsIGV4cGVjdGVkVmFsdWUsIGZvdW5kVmFsdWUpOwotCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCXN0b3JlLnNldFZhbHVlKHByZWZLZXksIG9yaWdpbmFsVmFsdWUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlU3RyaW5nKElQcmVmZXJlbmNlU3RvcmUgc3RvcmUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCVN0cmluZyBvcmlnaW5hbFZhbHVlID0gc3RvcmUuZ2V0U3RyaW5nKHByZWZLZXkpOwotCQlTdHJpbmcgZXhwZWN0ZWRWYWx1ZSA9IExvbmcudG9TdHJpbmcoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOyAvLyByYW5kb20KLQkJCQkJCQkJCQkJCQkJCQkJCQkvLyBzdHJpbmcKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCVN0cmluZyBmb3VuZFZhbHVlID0gc3RvcmUuZ2V0U3RyaW5nKHByZWZLZXkpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5ICsgIiAgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFZhbHVlICsgIiBmb3VuZDogIiArIGZvdW5kVmFsdWUsIGV4cGVjdGVkVmFsdWUsIGZvdW5kVmFsdWUpOwotCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCXN0b3JlLnNldFZhbHVlKHByZWZLZXksIG9yaWdpbmFsVmFsdWUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvRFREVUlUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvRFREVUlUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU2YzlmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL0RURFVJVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy52aWV3ZXIuVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25EVEQ7Ci0KLQotCi1wdWJsaWMgY2xhc3MgRFREVUlUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBEVERVSVRlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBEVERVSVRlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIkRURCBVSSBUZXN0U3VpdGUiKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFZlcmlmeVVJUGx1Z2luLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShEVERVSVByZWZlcmVuY2VzVGVzdC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25EVEQuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RFZGl0b3JDb25maWd1cmF0aW9uRFRELmNsYXNzKSk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25EVEQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25EVEQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFmODI2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uRFRELmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgIEplbnMgTHVrb3dza2kvSW5ub29wcmFjdCAtIGluaXRpYWwgcmVuYW1pbmcvcmVzdHJ1Y3R1cmluZwotICogCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yRFREOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uRFREOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkudmlld3MuY29udGVudG91dGxpbmUuRFREQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlcjsKLQotLyoqCi0gKiBUZXN0cyByZXRyaWV2aW5nIGVkaXRvciBjb250cmlidXRpb25zIGZvciBkdGQgY29udGVudCB0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0RWRpdG9yQ29uZmlndXJhdGlvbkRURCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0U291cmNlVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLlNPVVJDRVZJRVdFUkNPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JEVEQuQ29udGVudFR5cGVJRF9EVEQpOwotCQlhc3NlcnROb3ROdWxsKCJubyBzb3VyY2Ugdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yRFRELkNvbnRlbnRUeXBlSURfRFRELCBvKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIHNvdXJjZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JEVEQuQ29udGVudFR5cGVJRF9EVEQsIG8uZ2V0Q2xhc3MoKSwgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uRFRELmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudE91dGxpbmVWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuQ09OVEVOVE9VVExJTkVDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9yRFRELkNvbnRlbnRUeXBlSURfRFREKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gY29udGVudCBvdXRsaW5lIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yRFRELkNvbnRlbnRUeXBlSURfRFRELCBvKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGNvbnRlbnQgb3V0bGluZSBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckRURC5Db250ZW50VHlwZUlEX0RURCwgby5nZXRDbGFzcygpLCBEVERDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb24uY2xhc3MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvVmVyaWZ5VUlQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvVmVyaWZ5VUlQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEyZGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL1ZlcmlmeVVJUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcwotICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcwotICogb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kCi0gKiBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkuaW50ZXJuYWwuRFREVUlQbHVnaW47Ci0KLQotcHVibGljIGNsYXNzIFZlcmlmeVVJUGx1Z2luIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkV4aXN0cygpIHsKLQkJLy8gVE9ETzogc2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD04MTUyNwotCQlhc3NlcnRUcnVlKHRydWUpOwotCQlQbHVnaW4gcGx1Z2luID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXBsdWdpbiA9IERURFVJUGx1Z2luLmdldERlZmF1bHQoKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXBsdWdpbiA9IG51bGw7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbCgiZWRpdG9yIHBsdWdpbiBjb3VsZCBub3QgYmUgaW5zdGFudGlhdGVkIiwgcGx1Z2luKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL2ludGVybmFsL0RURFVJVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvaW50ZXJuYWwvRFREVUlUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGVkMGNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvaW50ZXJuYWwvRFREVUlUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgRFREVUlUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy8gVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBEVERVSVRlc3RzUGx1Z2luIHBsdWdpbjsKLQkvLyBSZXNvdXJjZSBidW5kbGUuCi0JcHJpdmF0ZSBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZUJ1bmRsZTsKLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgRFREVUlUZXN0c1BsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBwbHVnLWluIGFjdGl2YXRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgcGx1Zy1pbiBpcyBzdG9wcGVkCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCQlwbHVnaW4gPSBudWxsOwotCQlyZXNvdXJjZUJ1bmRsZSA9IG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRFREVUlUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsIG9yICdrZXknIGlmIG5vdAotCSAqIGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gRFREVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwpID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5OwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXRyeSB7Ci0JCQlpZiAocmVzb3VyY2VCdW5kbGUgPT0gbnVsbCkKLQkJCQlyZXNvdXJjZUJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgib3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy5pbnRlcm5hbC5UZXN0c1BsdWdpblJlc291cmNlcyIpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24geCkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCQl9Ci0JCXJldHVybiByZXNvdXJjZUJ1bmRsZTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL2ludGVybmFsL0xvZ2dlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9pbnRlcm5hbC9Mb2dnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY5ZmRhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL2ludGVybmFsL0xvZ2dlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi0vKioKLSAqIFNtYWxsIGNvbnZlbmllbmNlIGNsYXNzIHRvIGxvZyBtZXNzYWdlcyB0byBwbHVnaW4ncyBsb2cgZmlsZSBhbmQgYWxzbywgaWYgZGVzaXJlZCwKLSAqIHRoZSBjb25zb2xlLiBUaGlzIGNsYXNzIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgY2xhc3NlcyBpbiB0aGlzIHBsdWdpbi4gT3RoZXIKLSAqIHBsdWdpbnMgc2hvdWxkIG1ha2UgdGhlaXIgb3duIGNvcHksIHdpdGggYXBwcm9wcmlhdGUgSUQuCi0gKi8KLXB1YmxpYyBjbGFzcyBMb2dnZXIgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cyI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUUkFDRUZJTFRFUl9MT0NBVElPTiA9ICIvZGVidWcvdHJhY2VmaWx0ZXIiOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPSyA9IElTdGF0dXMuT0s7IC8vIDAKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPID0gSVN0YXR1cy5JTkZPOyAvLyAxCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0FSTklORyA9IElTdGF0dXMuV0FSTklORzsgLy8gMgotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SID0gSVN0YXR1cy5FUlJPUjsgLy8gNAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0tfREVCVUcgPSAyMDAgKyBPSzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPX0RFQlVHID0gMjAwICsgSU5GTzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HX0RFQlVHID0gMjAwICsgV0FSTklORzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9ERUJVRyA9IDIwMCArIEVSUk9SOwotCi0JLyoqCi0JICogQWRkcyBtZXNzYWdlIHRvIGxvZy4KLQkgKiBAcGFyYW0gbGV2ZWwgc2V2ZXJpdHkgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UgKE9LLCBJTkZPLCBXQVJOSU5HLCBFUlJPUiwgT0tfREVCVUcsIElORk9fREVCVUcsIFdBUk5JTkdfREVCVUcsIEVSUk9SX0RFQlVHKQotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gYWRkIHRvIHRoZSBsb2cKLQkgKiBAcGFyYW0gZXhjZXB0aW9uIGV4Y2VwdGlvbiB0aHJvd24KLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX2xvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChsZXZlbCA9PSBPS19ERUJVRyB8fCBsZXZlbCA9PSBJTkZPX0RFQlVHIHx8IGxldmVsID09IFdBUk5JTkdfREVCVUcgfHwgbGV2ZWwgPT0gRVJST1JfREVCVUcpIHsKLQkJCWlmICghaXNEZWJ1Z2dpbmcoKSkKLQkJCQlyZXR1cm47Ci0JCX0KLQotCQlpbnQgc2V2ZXJpdHkgPSBJU3RhdHVzLk9LOwotCQlzd2l0Y2ggKGxldmVsKSB7Ci0JCQljYXNlIElORk9fREVCVUcgOgotCQkJY2FzZSBJTkZPIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuSU5GTzsKLQkJCQlicmVhazsKLQkJCWNhc2UgV0FSTklOR19ERUJVRyA6Ci0JCQljYXNlIFdBUk5JTkcgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5XQVJOSU5HOwotCQkJCWJyZWFrOwotCQkJY2FzZSBFUlJPUl9ERUJVRyA6Ci0JCQljYXNlIEVSUk9SIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuRVJST1I7Ci0JCX0KLQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhzZXZlcml0eSwgUExVR0lOX0lELCBzZXZlcml0eSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJUGxhdGZvcm0uZ2V0TG9nKGJ1bmRsZSkubG9nKHN0YXR1c09iaik7Ci0JfQotCi0JLyoqCi0JICogUHJpbnRzIG1lc3NhZ2UgdG8gbG9nIGlmIGNhdGVnb3J5IG1hdGNoZXMgL2RlYnVnL3RyYWNlZmlsdGVyIG9wdGlvbi4KLQkgKiBAcGFyYW0gbWVzc2FnZSB0ZXh0IHRvIHByaW50Ci0JICogQHBhcmFtIGNhdGVnb3J5IGNhdGVnb3J5IG9mIHRoZSBtZXNzYWdlLCB0byBiZSBjb21wYXJlZCB3aXRoIC9kZWJ1Zy90cmFjZWZpbHRlcgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAoaXNUcmFjaW5nKGNhdGVnb3J5KSkgewotCQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoSVN0YXR1cy5PSywgUExVR0lOX0lELCBJU3RhdHVzLk9LLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKSAKLQkJCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcGxhdGZvcm0gaXMgZGVidWdnaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRGVidWdnaW5nKCkgewotCQlyZXR1cm4gUGxhdGZvcm0uaW5EZWJ1Z01vZGUoKTsKLQl9Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmVzIGlmIGN1cnJlbnRseSB0cmFjaW5nIGEgY2F0ZWdvcnkKLQkgKiBAcGFyYW0gY2F0ZWdvcnkKLQkgKiBAcmV0dXJuIHRydWUgaWYgdHJhY2luZyBjYXRlZ29yeSwgZmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzVHJhY2luZyhTdHJpbmcgY2F0ZWdvcnkpIHsKLQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZyB0cmFjZUZpbHRlciA9IFBsYXRmb3JtLmdldERlYnVnT3B0aW9uKFBMVUdJTl9JRCArIFRSQUNFRklMVEVSX0xPQ0FUSU9OKTsKLQkJaWYgKHRyYWNlRmlsdGVyICE9IG51bGwpIHsKLQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHRyYWNlRmlsdGVyLCAiLCIpOyAvLyROT04tTkxTLTEkCi0JCQl3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgewotCQkJCVN0cmluZyBjYXQgPSB0b2tlbml6ZXIubmV4dFRva2VuKCkudHJpbSgpOwotCQkJCWlmIChjYXRlZ29yeS5lcXVhbHMoY2F0KSkgewotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSkgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvdmlld2VyL1Rlc3RWaWV3ZXJDb25maWd1cmF0aW9uRFRELmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkRURC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmE5NGM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvdmlld2VyL1Rlc3RWaWV3ZXJDb25maWd1cmF0aW9uRFRELmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLnZpZXdlcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUF1dG9FZGl0U3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dERvdWJsZUNsaWNrU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZW50QXNzaXN0YW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucmVjb25jaWxlci5JUmVjb25jaWxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSURURFBhcnRpdGlvblR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uRFREOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMuaW50ZXJuYWwuTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5zdHlsZS5MaW5lU3R5bGVQcm92aWRlcjsKLQotcHVibGljIGNsYXNzIFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uRFREIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25EVEQgZkNvbmZpZyA9IG51bGw7Ci0JcHJpdmF0ZSBib29sZWFuIGZEaXNwbGF5RXhpc3RzID0gdHJ1ZTsKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyIGZWaWV3ZXIgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0KLQlwdWJsaWMgVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25EVEQoKSB7Ci0JCXN1cGVyKCJUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkRURCIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJc3VwZXIuc2V0VXAoKTsKLQkJaWYgKCF0aGlzLmlzU2V0dXApIHsKLQkJCXNldFVwVmlld2VyQ29uZmlndXJhdGlvbigpOwotCQkJdGhpcy5pc1NldHVwID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBzZXRVcFZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0KLQkJaWYgKERpc3BsYXkuZ2V0Q3VycmVudCgpICE9IG51bGwpIHsKLQotCQkJU2hlbGwgc2hlbGwgPSBudWxsOwotCQkJQ29tcG9zaXRlIHBhcmVudCA9IG51bGw7Ci0KLQkJCWlmIChQbGF0Zm9ybVVJLmlzV29ya2JlbmNoUnVubmluZygpKSB7Ci0JCQkJc2hlbGwgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlzaGVsbCA9IG5ldyBTaGVsbChEaXNwbGF5LmdldEN1cnJlbnQoKSk7Ci0JCQl9Ci0JCQlwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKHNoZWxsLCBTV1QuTk9ORSk7Ci0KLQkJCS8vIGR1bW15IHZpZXdlcgotCQkJZlZpZXdlciA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlcihwYXJlbnQsIG51bGwsIG51bGwsIGZhbHNlLCBTV1QuTk9ORSk7Ci0JCQlmQ29uZmlnID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkRURCgpOwotCQl9Ci0JCWVsc2UgewotCQkJZkRpc3BsYXlFeGlzdHMgPSBmYWxzZTsKLQkJCUxvZ2dlci5sb2coTG9nZ2VyLklORk8sICJSZW1lbWJlciwgdmlld2VyIGNvbmZpZ3VyYXRpb24gdGVzdHMgYXJlIG5vdCBydW4gYmVjYXVzZSB3b3JrYmVuY2ggaXMgbm90IG9wZW4gKG5vcm1hbCBvbiBidWlsZCBtYWNoaW5lKSIpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRBdXRvRWRpdFN0cmF0ZWdpZXMoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlBdXRvRWRpdFN0cmF0ZWd5W10gc3RyYXRlZ2llcyA9IGZDb25maWcuZ2V0QXV0b0VkaXRTdHJhdGVnaWVzKGZWaWV3ZXIsIElEVERQYXJ0aXRpb25UeXBlcy5EVERfREVGQVVMVCk7Ci0JCWFzc2VydE5vdE51bGwoc3RyYXRlZ2llcyk7Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBhdXRvIGVkaXQgc3RyYXRlZ2llcyIsIHN0cmF0ZWdpZXMubGVuZ3RoID4gMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCVN0cmluZ1tdIGNvbmZpZ3VyZWRDb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoY29uZmlndXJlZENvbnRlbnRUeXBlcyk7Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGNvbnRlbnQgdHlwZXMiLCBjb25maWd1cmVkQ29udGVudFR5cGVzLmxlbmd0aCA+IDEpOwotCX0KLQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudEFzc2lzdGFudCgpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUNvbnRlbnRBc3Npc3RhbnQgY2EgPSBmQ29uZmlnLmdldENvbnRlbnRBc3Npc3RhbnQoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGlzIG5vIGNvbnRlbnQgYXNzaXN0YW50IiwgY2EpOwotCX0KLQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RG91YmxlQ2xpY2tTdHJhdGVneSgpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJSVRleHREb3VibGVDbGlja1N0cmF0ZWd5IHN0cmF0ZWd5ID0gZkNvbmZpZy5nZXREb3VibGVDbGlja1N0cmF0ZWd5KGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZiAoc3RyYXRlZ3kgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBkb3VibGUgY2xpY2sgc3RyYXRlZ2llcyIsIGZhbHNlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0TGluZVN0eWxlUHJvdmlkZXJzKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUxpbmVTdHlsZVByb3ZpZGVyIHByb3ZpZGVyc1tdID0gZkNvbmZpZy5nZXRMaW5lU3R5bGVQcm92aWRlcnMoZlZpZXdlciwgY29udGVudFR5cGVzW2ldKTsKLQkJCWlmKHByb3ZpZGVycyAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGxpbmUgc3R5bGUgcHJvdmlkZXJzIiwgZmFsc2UpOwotCX0KLQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UmVjb25jaWxlcigpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSVJlY29uY2lsZXIgciA9IGZDb25maWcuZ2V0UmVjb25jaWxlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiUmVjb25jaWxlciBpcyBudWxsIiwgcik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy92aWV3ZXIvVmlld2VyVGVzdERURC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy92aWV3ZXIvVmlld2VyVGVzdERURC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTE1MDhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvdmlld2VyL1ZpZXdlclRlc3REVEQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMudmlld2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5KRmFjZVJlc291cmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5CdXN5SW5kaWNhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSU1lbWVudG87Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdTaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yRFREOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uRFREOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JbmRleGVkUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLQotcHVibGljIGNsYXNzIFZpZXdlclRlc3REVEQgZXh0ZW5kcyBWaWV3UGFydCB7Ci0JLyoqCi0JICogU2V0cyB0aGUgdmlld2VyJ3MgaGlnaGxpZ2h0aW5nIHRleHQgcmFuZ2UgdG8gdGhlIHRleHQgcmFuZ2UgaW5kaWNhdGVkCi0JICogYnkgdGhlIHNlbGVjdGVkIE5vZGVzLgotCSAqLwotCXByb3RlY3RlZCBjbGFzcyBOb2RlUmFuZ2VTZWxlY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgewotCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgewotCQkJaWYgKCFldmVudC5nZXRTZWxlY3Rpb24oKS5pc0VtcHR5KCkgJiYgZXZlbnQuZ2V0U2VsZWN0aW9uKCkgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgZXZlbnQuZ2V0U2VsZWN0aW9uKCk7Ci0JCQkJSW5kZXhlZFJlZ2lvbiBzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotCQkJCUluZGV4ZWRSZWdpb24gZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSBzZWxlY3Rpb24udG9BcnJheSgpW3NlbGVjdGlvbi5zaXplKCkgLSAxXTsKLQotCQkJCWlmIChzdGFydE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQlzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgKChBdHRyKSBzdGFydE5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotCQkJCWlmIChlbmROb2RlIGluc3RhbmNlb2YgQXR0cikKLQkJCQkJZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIGVuZE5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotCi0JCQkJaW50IHN0YXJ0ID0gc3RhcnROb2RlLmdldFN0YXJ0T2Zmc2V0KCk7Ci0JCQkJaW50IGVuZCA9IGVuZE5vZGUuZ2V0RW5kT2Zmc2V0KCk7Ci0KLQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCWZTb3VyY2VWaWV3ZXIuc2V0VmlzaWJsZVJlZ2lvbihzdGFydCwgZW5kIC0gc3RhcnQpOwotCQkJCWZTb3VyY2VWaWV3ZXIuc2V0U2VsZWN0ZWRSYW5nZShzdGFydCwgMCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIGNsYXNzIE51bWJlcklucHV0RGlhbG9nIGV4dGVuZHMgRGlhbG9nIHsKLQkJcHVibGljIFRleHQgbGVuZ3RoOwotCi0JCWludCBsZW5ndGhWYWx1ZTsKLQkJcHVibGljIFRleHQgc3RhcnQ7Ci0JCWludCBzdGFydFZhbHVlOwotCi0JCXB1YmxpYyBOdW1iZXJJbnB1dERpYWxvZyhTaGVsbCBzaGVsbCkgewotCQkJc3VwZXIoc2hlbGwpOwotCQl9Ci0KLQkJcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYShDb21wb3NpdGUgcGFyZW50KSB7Ci0JCQlDb21wb3NpdGUgY29tcG9zaXRlID0gKENvbXBvc2l0ZSkgc3VwZXIuY3JlYXRlRGlhbG9nQXJlYShwYXJlbnQpOwotCQkJQ29tcG9zaXRlIGNvbnRhaW5lciA9IG5ldyBDb21wb3NpdGUoY29tcG9zaXRlLCBTV1QuTlVMTCk7Ci0JCQljb250YWluZXIuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0JCQljb250YWluZXIuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDIsIHRydWUpKTsKLQkJCXNldFNoZWxsU3R5bGUoZ2V0U2hlbGwoKS5nZXRTdHlsZSgpIHwgU1dULlJFU0laRSk7Ci0KLQkJCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKGNvbnRhaW5lciwgU1dULk5VTEwpOwotCQkJbGFiZWwuc2V0VGV4dCgiU3RhcnQiKTsKLQkJCWxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQlsYWJlbCA9IG5ldyBMYWJlbChjb250YWluZXIsIFNXVC5OVUxMKTsKLQkJCWxhYmVsLnNldFRleHQoIkxlbmd0aCIpOwotCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCXN0YXJ0ID0gbmV3IFRleHQoY29udGFpbmVyLCBTV1QuQk9SREVSKTsKLQkJCXN0YXJ0VmFsdWUgPSBmU291cmNlVmlld2VyLmdldFZpc2libGVSZWdpb24oKS5nZXRPZmZzZXQoKTsKLQkJCXN0YXJ0LnNldFRleHQoIiIgKyBzdGFydFZhbHVlKTsKLQkJCXN0YXJ0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQlsZW5ndGggPSBuZXcgVGV4dChjb250YWluZXIsIFNXVC5CT1JERVIpOwotCQkJbGVuZ3RoVmFsdWUgPSBmU291cmNlVmlld2VyLmdldFZpc2libGVSZWdpb24oKS5nZXRMZW5ndGgoKTsKLQkJCWxlbmd0aC5zZXRUZXh0KCIiICsgbGVuZ3RoVmFsdWUpOwotCQkJbGVuZ3RoLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQkvLyBzdGFydC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7Ci0JCQkvLyBwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKLQkJCS8vIGlmIChlLndpZGdldCA9PSBzdGFydCkgewotCQkJLy8gdHJ5IHsKLQkJCS8vIHN0YXJ0VmFsdWUgPSBJbnRlZ2VyLmRlY29kZShzdGFydC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQkvLyB9Ci0JCQkvLyBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkvLyBzdGFydFZhbHVlID0gMDsKLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0pOwotCQkJLy8gbGVuZ3RoLmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKLQkJCS8vIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJLy8gaWYgKGUud2lkZ2V0ID09IGxlbmd0aCkgewotCQkJLy8gdHJ5IHsKLQkJCS8vIGxlbmd0aFZhbHVlID0gSW50ZWdlci5kZWNvZGUobGVuZ3RoLmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCS8vIH0KLQkJCS8vIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCS8vIGxlbmd0aFZhbHVlID0gMDsKLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0pOwotCi0JCQlyZXR1cm4gY29tcG9zaXRlOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZyNva1ByZXNzZWQoKQotCQkgKi8KLQkJcHJvdGVjdGVkIHZvaWQgb2tQcmVzc2VkKCkgewotCQkJdHJ5IHsKLQkJCQlzdGFydFZhbHVlID0gSW50ZWdlci5kZWNvZGUoc3RhcnQuZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJfQotCQkJY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlMikgewotCQkJCXN0YXJ0VmFsdWUgPSAwOwotCQkJfQotCQkJdHJ5IHsKLQkJCQlsZW5ndGhWYWx1ZSA9IEludGVnZXIuZGVjb2RlKGxlbmd0aC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkJbGVuZ3RoVmFsdWUgPSAwOwotCQkJfQotCQkJc3VwZXIub2tQcmVzc2VkKCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX1ZJRVdFUl9DT05URU5UUyA9ICI8IURPQ1RZUEUgSFRNTCBQVUJMSUMgXCItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTlwiPlxuPEhUTUw+XG4JPEhFQUQ+XG4JCTxNRVRBIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTFcIj5cbgkJPFRJVExFPnBsYWNlIHRpdGxlIGhlcmU8L1RJVExFPlxuCTwvSEVBRD5cbgk8Qk9EWT5cbgkJcGxhY2UgY29udGVudCBoZXJlCVxuPHNjcmlwdD5cblwidGV4dFwiO1xuPC9TQ1JJUFQ+XG48L0JPRFk+XG48L0hUTUw+IjsKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbiBmQ29uZmlnID0gbnVsbDsKLQlwcml2YXRlIElDb250ZW50T3V0bGluZVBhZ2UgZkNvbnRlbnRPdXRsaW5lUGFnZSA9IG51bGw7Ci0JcHJpdmF0ZSBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyID0gbnVsbDsKLQotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXIgZlNvdXJjZVZpZXdlciA9IG51bGw7Ci0KLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIFNTRV9FRElUT1JfRk9OVCA9ICJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRleHRmb250IjsKLQotCXByb3RlY3RlZCB2b2lkIGFkZEFjdGlvbnMoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWdyKSB7Ci0JCWlmIChtZ3IgIT0gbnVsbCkgewotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJOZXcgSFRNTCI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJQnVzeUluZGljYXRvci5zaG93V2hpbGUoZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLCBuZXcgUnVubmFibGUoKSB7Ci0JCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCQkJc2V0dXBWaWV3ZXJGb3JOZXcoKTsKLQkJCQkJCQlmU291cmNlVmlld2VyLnNldEVkaXRhYmxlKHRydWUpOwotCQkJCQkJfQotCQkJCQl9KTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IFNlcGFyYXRvcigpKTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiQ2hhbmdlIFZpc2liaWxpdHkiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCU51bWJlcklucHV0RGlhbG9nIGRsZyA9IG5ldyBOdW1iZXJJbnB1dERpYWxvZyhmU291cmNlVmlld2VyLmdldENvbnRyb2woKS5nZXRTaGVsbCgpKTsKLQkJCQkJaW50IHByb2NlZWQgPSBkbGcub3BlbigpOwotCQkJCQlpZiAocHJvY2VlZCA9PSBXaW5kb3cuQ0FOQ0VMKQotCQkJCQkJcmV0dXJuOwotCQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCQlmU291cmNlVmlld2VyLnNldFZpc2libGVSZWdpb24oZGxnLnN0YXJ0VmFsdWUsIGRsZy5sZW5ndGhWYWx1ZSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlNob3cgQWxsIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgU2VwYXJhdG9yKCkpOwotCQkJLy8gbm8gbG9uZ2VyIGFibGUgdG8gc2V0IGlucHV0IHRvIE5VTEwKLQkJCS8vIG1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCS8vIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCS8vIHJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJLy8gfQotCQkJLy8KLQkJCS8vIHB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkvLyByZXR1cm4gIlNldCBJbnB1dCB0byBOVUxMIjsKLQkJCS8vIH0KLQkJCS8vIHB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCS8vIHN1cGVyLnJ1bigpOwotCQkJLy8gdmlld2VyLnNldElucHV0KG51bGwpOwotCQkJLy8gfQotCQkJLy8gfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlRha2UgSW5wdXQgZnJvbSBBY3RpdmUgRWRpdG9yIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlJVGV4dEVkaXRvciB0ZXh0RWRpdG9yID0gZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJCWlmICh0ZXh0RWRpdG9yICE9IG51bGwpIHsKLQkJCQkJCXNldHVwVmlld2VyRm9yRWRpdG9yKHRleHRFZGl0b3IpOwotCQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJUYWtlIElucHV0IGFuZCBGb2xsb3cgU2VsZWN0aW9uIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlmb2xsb3dTZWxlY3Rpb24oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiVGFrZSBJbnB1dCBhbmQgRm9sbG93IFNlbGVjdGlvbiBBcyBSZWFkT25seSI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJZm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUoZmFsc2UpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJTdG9wIEZvbGxvd2luZyBTZWxlY3Rpb24iOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsKLQkJCQl9Ci0JCQl9KTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjY3JlYXRlUGFydENvbnRyb2woQ29tcG9zaXRlKQotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWdyID0gZ2V0Vmlld1NpdGUoKS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKTsKLQkJYWRkQWN0aW9ucyhtZ3IpOwotCi0JCS8vIGNyZWF0ZSBzb3VyY2Ugdmlld2VyICYgaXRzIGNvbnRlbnQgdHlwZS1zcGVjaWZpYyB2aWV3ZXIKLQkJLy8gY29uZmlndXJhdGlvbgotCQlmU291cmNlVmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5OT05FKTsKLQkJZkNvbmZpZyA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25EVEQoKTsKLQotCQkvLyBzZXQgdXAgdGhlIHZpZXdlciB3aXRoIGEgZG9jdW1lbnQgJiB2aWV3ZXIgY29uZmlnCi0JCXNldHVwVmlld2VyRm9yTmV3KCk7Ci0KLQkJc2V0dXBWaWV3ZXJQcmVmZXJlbmNlcygpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjZGlzcG9zZSgpCi0JICovCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJc3RvcEZvbGxvd1NlbGVjdGlvbigpOwotCQlmU291cmNlVmlld2VyLnVuY29uZmlndXJlKCk7Ci0JfQotCi0JLyoqCi0JICogSG9va3MgdXAgdGhlIHZpZXdlciB0byBmb2xsb3cgdGhlIHNlbGVjdGlvbiBtYWRlIGluIHRoZSBhY3RpdmUgZWRpdG9yCi0JICovCi0JcHJpdmF0ZSB2b2lkIGZvbGxvd1NlbGVjdGlvbigpIHsKLQkJSVRleHRFZGl0b3IgZWRpdG9yID0gZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCWlmIChlZGl0b3IgIT0gbnVsbCkgewotCQkJc2V0dXBWaWV3ZXJGb3JFZGl0b3IoZWRpdG9yKTsKLQkJCWlmIChmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lciA9PSBudWxsKQotCQkJCWZIaWdobGlnaHRSYW5nZUxpc3RlbmVyID0gbmV3IE5vZGVSYW5nZVNlbGVjdGlvbkxpc3RlbmVyKCk7Ci0KLQkJCWZDb250ZW50T3V0bGluZVBhZ2UgPSAoKElDb250ZW50T3V0bGluZVBhZ2UpIGVkaXRvci5nZXRBZGFwdGVyKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKTsKLQkJCWlmIChmQ29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKLQkJCQlmQ29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lcik7Ci0KLQkJCQlpZiAoIWZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpICYmIGZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCi0JCQkJCU9iamVjdFtdIG5vZGVzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZkNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSkudG9BcnJheSgpOwotCQkJCQlJbmRleGVkUmVnaW9uIHN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSBub2Rlc1swXTsKLQkJCQkJSW5kZXhlZFJlZ2lvbiBlbmROb2RlID0gKEluZGV4ZWRSZWdpb24pIG5vZGVzW25vZGVzLmxlbmd0aCAtIDFdOwotCi0JCQkJCWludCBzdGFydCA9IHN0YXJ0Tm9kZS5nZXRTdGFydE9mZnNldCgpOwotCQkJCQlpbnQgZW5kID0gZW5kTm9kZS5nZXRFbmRPZmZzZXQoKTsKLQotCQkJCQlmU291cmNlVmlld2VyLnNldFZpc2libGVSZWdpb24oc3RhcnQsIGVuZCAtIHN0YXJ0KTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRTZWxlY3RlZFJhbmdlKHN0YXJ0LCAwKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGFjdGl2ZSB0ZXh0IGVkaXRvciBpZiBwb3NzaWJsZQotCSAqIAotCSAqIEByZXR1cm4gSVRleHRFZGl0b3IKLQkgKi8KLQlwcml2YXRlIElUZXh0RWRpdG9yIGdldEFjdGl2ZUVkaXRvcigpIHsKLQkJSVRleHRFZGl0b3IgZWRpdG9yID0gbnVsbDsKLQkJSUVkaXRvclBhcnQgZWRpdG9yUGFydCA9IGdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCWlmIChlZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVRleHRFZGl0b3IpCi0JCQllZGl0b3IgPSAoSVRleHRFZGl0b3IpIGVkaXRvclBhcnQ7Ci0JCWlmIChlZGl0b3IgPT0gbnVsbCAmJiBlZGl0b3JQYXJ0ICE9IG51bGwpCi0JCQllZGl0b3IgPSAoSVRleHRFZGl0b3IpIGVkaXRvclBhcnQuZ2V0QWRhcHRlcihJVGV4dEVkaXRvci5jbGFzcyk7Ci0JCXJldHVybiBlZGl0b3I7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JVmlld1BhcnQjaW5pdChJVmlld1NpdGUsIElNZW1lbnRvKQotCSAqLwotCXB1YmxpYyB2b2lkIGluaXQoSVZpZXdTaXRlIHNpdGUsIElNZW1lbnRvIG1lbWVudG8pIHRocm93cyBQYXJ0SW5pdEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLmluaXQoc2l0ZSwgbWVtZW50byk7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCNzZXRGb2N1cygpCi0JICovCi0JcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7Ci0JCWlmIChmU291cmNlVmlld2VyLmdldENvbnRyb2woKSAhPSBudWxsICYmICFmU291cmNlVmlld2VyLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpCi0JCQlmU291cmNlVmlld2VyLmdldENvbnRyb2woKS5zZXRGb2N1cygpOwotCX0KLQotCS8qKgotCSAqIFNldHMgdXAgdGhlIHZpZXdlciB3aXRoIHRoZSBzYW1lIGRvY3VtZW50L2lucHV0IGFzIHRoZSBnaXZlbiBlZGl0b3IKLQkgKiAKLQkgKiBAcGFyYW0gSVRleHRFZGl0b3IKLQkgKiAgICAgICAgICAgIGVkaXRvciAtIHRoZSBlZGl0b3IgdG8gdXNlICpjYW5ub3QgdG8gYmUgbnVsbCoKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJGb3JFZGl0b3IoSVRleHRFZGl0b3IgZWRpdG9yKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsgLy8gaWYgd2FzIGZvbGxvd2luZyBzZWxlY3Rpb24sIHN0b3AKLQkJSURvY3VtZW50IGRvYyA9IGVkaXRvci5nZXREb2N1bWVudFByb3ZpZGVyKCkuZ2V0RG9jdW1lbnQoZWRpdG9yLmdldEVkaXRvcklucHV0KCkpOwotCQlmU291cmNlVmlld2VyLnNldERvY3VtZW50KGRvYyk7Ci0KLQkJLy8gbmVlZCB0byByZWNvbmZpZ3VyZSBhZnRlciBzZXQgZG9jdW1lbnQganVzdCBzbyBoaWdobGlnaHRlciB3b3JrcwotCQlmU291cmNlVmlld2VyLmNvbmZpZ3VyZShuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uRFREKCkpOwotCX0KLQotCS8qKgotCSAqIFNldCB1cCBzb3VyY2Ugdmlld2VyIHdpdGggYSBuZXcgZG9jdW1lbnQgJiBjb25maWd1cmUgaXQKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJGb3JOZXcoKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsgLy8gaWYgd2FzIGZvbGxvd2luZyBzZWxlY3Rpb24sIHN0b3AKLQotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlEb2N1bWVudCBkb2MgPSBtb2RlbE1hbmFnZXIuY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKENvbnRlbnRUeXBlSWRGb3JEVEQuQ29udGVudFR5cGVJRF9EVEQpOwotCQlkb2Muc2V0KERFRkFVTFRfVklFV0VSX0NPTlRFTlRTKTsKLQotCQlmU291cmNlVmlld2VyLnNldERvY3VtZW50KGRvYyk7Ci0JCS8vIG5lZWQgdG8gcmVjb25maWd1cmUgYWZ0ZXIgc2V0IGRvY3VtZW50IGp1c3Qgc28gaGlnaGxpZ2h0ZXIgd29ya3MKLQkJZlNvdXJjZVZpZXdlci5jb25maWd1cmUoZkNvbmZpZyk7Ci0JfQotCi0JLyoqCi0JICogU2V0IHVwIHNvdXJjZSB2aWV3ZXIgd2l0aCBhbnkgYWRkaXRpb25hbCBwcmVmZXJlbmNlcyBpdCBzaG91bGQgaGF2ZSBFeDoKLQkgKiBmb250LCB0YWIgd2lkdGgKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJQcmVmZXJlbmNlcygpIHsKLQkJZlNvdXJjZVZpZXdlci5nZXRUZXh0V2lkZ2V0KCkuc2V0Rm9udChKRmFjZVJlc291cmNlcy5nZXRGb250KFNTRV9FRElUT1JfRk9OVCkpOwotCX0KLQotCS8qKgotCSAqIENlYXNlIGZvbGxvd2luZyB0aGUgc2VsZWN0aW9uIG1hZGUgaW4gdGhlIGVkaXRvcgotCSAqLwotCXByaXZhdGUgdm9pZCBzdG9wRm9sbG93U2VsZWN0aW9uKCkgewotCQlpZiAoZkNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7Ci0JCQlmQ29udGVudE91dGxpbmVQYWdlLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lcik7Ci0JCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJZkNvbnRlbnRPdXRsaW5lUGFnZSA9IG51bGw7Ci0JCX0KLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUxOTI1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0Ci0JbmFtZT0idGVzdHN1aXRlIgotCWRlZmF1bHQ9InJ1biIKLQliYXNlZGlyPSIuIj4KLQk8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotCTwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0JPCEtLSA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfVwuLlwuLiIvPiAtLT4KLQotCTxlY2hvIG1lc3NhZ2U9ImJhc2VkaXIgJHtiYXNlZGlyfSIgLz4KLQk8ZWNobyBtZXNzYWdlPSJlY2xpcHNlIHBsYWNlICR7ZWNsaXBzZS1ob21lfSIgLz4KLQotCTwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBwbHVnaW4tbmFtZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLQk8cHJvcGVydHkKLQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzIiAvPgotCTxwcm9wZXJ0eQotCQluYW1lPSJsaWJyYXJ5LWZpbGUiCi0JCXZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotCTwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0JPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJpbml0Ij4KLQkJPHRzdGFtcCAvPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQKLQkJCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLQkJCQlpbmNsdWRlcz0ib3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy4qeG1sIiAvPgotCQk8L2RlbGV0ZT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0JPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0JCTxwcm9wZXJ0eQotCQkJbmFtZT0id3N0LWZvbGRlciIKLQkJCXZhbHVlPSIke2VjbGlwc2UtaG9tZX0vd3N0X2ZvbGRlciIgLz4KLQkJPGRlbGV0ZQotCQkJZGlyPSIke3dvcmtzcGFjZX0iCi0JCQlxdWlldD0idHJ1ZSIgLz4KLQkJPGFudAotCQkJdGFyZ2V0PSJ1aS10ZXN0IgotCQkJYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotCQkJZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iZGF0YS1kaXIiCi0JCQkJdmFsdWU9IiR7d3N0LWZvbGRlcn0iIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJCQl2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJjbGFzc25hbWUiCi0JCQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMuRFREVUlUZXN0U3VpdGUiIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJwbHVnaW4tcGF0aCIKLQkJCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0JCTwvYW50PgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0JPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotCTwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLQk8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotCQk8IS0tPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4tLT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLQk8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0JPHRhcmdldAotCQluYW1lPSJydW4iCi0JCWRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0JCTxhbnQKLQkJCXRhcmdldD0iY29sbGVjdCIKLQkJCWFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLQkJCWRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9ImluY2x1ZGVzIgotCQkJCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLip4bWwiIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJvdXRwdXQtZmlsZSIKLQkJCQl2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotCQk8L2FudD4KLQkJPCEtLQkJPGVtYWlsUmVzdWx0cyByZXN1bHRzRmlsZT0iJHtidWlsZC1yZXN1bHRzLWhvbWV9LyR7cGx1Z2luLW5hbWV9LnhtbCIgYWRkcmVzc2xpc3Q9Im5pdGluZEB1cy5pYm0uY29tLGRhdmlkX3dpbGxpYW1zQHVzLmlibS5jb20iIC8+IC0tPgotCTwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTFjOGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkwYTcyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLWJpbgotYmluLnByb2plY3QKLWJ1aWxkLnhtbAotZGV2LnByb3BlcnRpZXMKLWh0bWxjb3JldGVzdHMuamFyCi10ZW1wLmZvbGRlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1YmIyNDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc2MGZlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLSNXZWQgSmFuIDEyIDE2OjQ4OjE2IEVTVCAyMDA1DQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3INCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3INCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3INCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9YWJvcnQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaA0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3INCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZA0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbg0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3INCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcg0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZA0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBhdGlibGVKREtMZXZlbD1pZ25vcmUNCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZA0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcg0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZA0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjkzNjVlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jRnJpIE1heSAyNyAyMzo0MDoyNCBFRFQgMjAwNQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkOTU4NTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6IEhUTUwgQ29yZSBUZXN0cwotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cwotQnVuZGxlLVZlcnNpb246IDEuMC4wCi1CdW5kbGUtQ2xhc3NQYXRoOiBodG1sY29yZXRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5IVE1MQ29yZVRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZwotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cywKLSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1pc2MsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuY3NzLAotIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudGV4dCwKLSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnRleHQudGVzdGZpbGVzLmh0bWwsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlscwotUmVxdWlyZS1CdW5kbGU6IG9yZy5qdW5pdCwKLSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lCi1FY2xpcHNlLUF1dG9TdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5BdHRyVGVzdC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkF0dHJUZXN0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY3ZGIxOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkF0dHJUZXN0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkF0dHJUZXN0Ci1Tb3VyY2UgOgotPGEgaHJlZj0iPCU9YyU+Ij5hPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA5XSAoPGEgaHJlZj0iKQotWzksIDEwXSAoPCkKLVsxMCwgMTJdICglPSkKLVsxMiwgMTNdIChjKQotWzEzLCAxNF0gKCUpCi1bMTQsIDE4XSAoPiI+YSkKLVsxOCwgMjJdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDldICg8YSBocmVmJiM2MTsiKUBbMTgsIDIyXSAoPC9hPikKLS0tLS0jdGV4dCg8JSYjNjE7YyU+Ij5hKUB7WzksIDEwXSAoPCksWzEwLCAxMl0gKCUmIzYxOyksWzEyLCAxM10gKGMpLFsxMywgMTRdICglKSxbMTQsIDE4XSAoPiI+YSl9Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQXR0clRlc3QyLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQXR0clRlc3QyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk2MmM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkF0dHJUZXN0Mi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5BdHRyVGVzdDIKLVNvdXJjZSA6Ci08YSBiPSJjIiBkPSJlIj5mPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxNV0gKDxhIGI9ImMiIGQ9ImUiPikKLVsxNSwgMTZdIChmKQotWzE2LCAyMF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgMTVdICg8YSBiJiM2MTsiYyIgZCYjNjE7ImUiPilAWzE2LCAyMF0gKDwvYT4pCi0tLS0tI3RleHQoZilAWzE1LCAxNl0gKGYpCi0KLWIubmFtZT14OmIKLWIudmFsdWU9YwotYSBiPW51bGwKLWEgeDpiPWMKLVNvdXJjZSA6Ci08YSB4OmI9ImMiIGQ9ImUiPmY8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDE3XSAoPGEgeDpiPSJjIiBkPSJlIj4pCi1bMTcsIDE4XSAoZikKLVsxOCwgMjJdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDE3XSAoPGEgeDpiJiM2MTsiYyIgZCYjNjE7ImUiPilAWzE4LCAyMl0gKDwvYT4pCi0tLS0tI3RleHQoZilAWzE3LCAxOF0gKGYpCi0KLVNvdXJjZSA6Ci08YSB4OmI9ImMiIHk6ZD0iZSI+ZjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMTldICg8YSB4OmI9ImMiIHk6ZD0iZSI+KQotWzE5LCAyMF0gKGYpCi1bMjAsIDI0XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAxOV0gKDxhIHg6YiYjNjE7ImMiIHk6ZCYjNjE7ImUiPilAWzIwLCAyNF0gKDwvYT4pCi0tLS0tI3RleHQoZilAWzE5LCAyMF0gKGYpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQ0RBVEFTZWN0aW9uVGVzdC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkNEQVRBU2VjdGlvblRlc3QudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGViNTcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQ0RBVEFTZWN0aW9uVGVzdC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0Ci1Tb3VyY2UgOgotPGE+PCFbQ0RBVEFbY29udGVudE9mQ0RBVEFTZWN0aW9uXV0+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDM2XSAoPCFbQ0RBVEFbY29udGVudE9mQ0RBVEFTZWN0aW9uXV0+KQotWzM2LCA0MF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzM2LCA0MF0gKDwvYT4pCi0tLS0tI2NkYXRhLXNlY3Rpb24oY29udGVudE9mQ0RBVEFTZWN0aW9uKUBbMywgMzZdICg8IVtDREFUQVtjb250ZW50T2ZDREFUQVNlY3Rpb25dXT4pCi0KLWNvbnRlbnRPZkNEQVRBU2VjdGlvbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0Mi50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkNEQVRBU2VjdGlvblRlc3QyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVmODZhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkNEQVRBU2VjdGlvblRlc3QyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkNEQVRBU2VjdGlvblRlc3QyCi1Tb3VyY2UgOgotPGE+PCFbQ0RBVEFbY29udGVudE9mQ0RBVEFTZWN0aW9uXV0+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDM2XSAoPCFbQ0RBVEFbY29udGVudE9mQ0RBVEFTZWN0aW9uXV0+KQotWzM2LCA0MF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzM2LCA0MF0gKDwvYT4pCi0tLS0tI2NkYXRhLXNlY3Rpb24oY29udGVudE9mQ0RBVEFTZWN0aW9uKUBbMywgMzZdICg8IVtDREFUQVtjb250ZW50T2ZDREFUQVNlY3Rpb25dXT4pCi0KLWNvbnRlbnRPZkNEQVRBU2VjdGlvbgotU291cmNlIDoKLTxhPjwhW0NEQVRBW25ldyBjb250ZW50XV0+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDI2XSAoPCFbQ0RBVEFbbmV3IGNvbnRlbnRdXT4pCi1bMjYsIDMwXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMjYsIDMwXSAoPC9hPikKLS0tLS0jY2RhdGEtc2VjdGlvbihuZXcgY29udGVudClAWzMsIDI2XSAoPCFbQ0RBVEFbbmV3IGNvbnRlbnRdXT4pCi0KLW5ldyBjb250ZW50Ci1Tb3VyY2UgOgotPGE+PCFbQ0RBVEFbbmV3IGNvbnRlbnRdXT48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgMjZdICg8IVtDREFUQVtuZXcgY29udGVudF1dPikKLVsyNiwgMzBdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsyNiwgMzBdICg8L2E+KQotLS0tLSNjZGF0YS1zZWN0aW9uKG5ldyBjb250ZW50KUBbMywgMjZdICg8IVtDREFUQVtuZXcgY29udGVudF1dPikKLQotbmV3IGNvbnRlbnQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQ0RBVEFTZWN0aW9uVGVzdDMudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0My50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3Y2MxMjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0My50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0MwotU291cmNlIDoKLTxhPjwhW0NEQVRBW2NvbnRlbnRPZkNEQVRBU2VjdGlvbl1dPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCAzNl0gKDwhW0NEQVRBW2NvbnRlbnRPZkNEQVRBU2VjdGlvbl1dPikKLVszNiwgNDBdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFszNiwgNDBdICg8L2E+KQotLS0tLSNjZGF0YS1zZWN0aW9uKGNvbnRlbnRPZkNEQVRBU2VjdGlvbilAWzMsIDM2XSAoPCFbQ0RBVEFbY29udGVudE9mQ0RBVEFTZWN0aW9uXV0+KQotCi1jb250ZW50T2ZDREFUQVNlY3Rpb24KLVNvdXJjZSA6Ci08YT48IVtDREFUQVtuZXcgPCBjb250ZW50XV0+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDI4XSAoPCFbQ0RBVEFbbmV3IDwgY29udGVudF1dPikKLVsyOCwgMzJdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsyOCwgMzJdICg8L2E+KQotLS0tLSNjZGF0YS1zZWN0aW9uKG5ldyA8IGNvbnRlbnQpQFszLCAyOF0gKDwhW0NEQVRBW25ldyA8IGNvbnRlbnRdXT4pCi0KLW5ldyA8IGNvbnRlbnQKLVNvdXJjZSA6Ci08YT48IVtDREFUQVtuZXcgPiBjb250ZW50XV0+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDI4XSAoPCFbQ0RBVEFbbmV3ID4gY29udGVudF1dPikKLVsyOCwgMzJdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsyOCwgMzJdICg8L2E+KQotLS0tLSNjZGF0YS1zZWN0aW9uKG5ldyA+IGNvbnRlbnQpQFszLCAyOF0gKDwhW0NEQVRBW25ldyA+IGNvbnRlbnRdXT4pCi0KLW5ldyA+IGNvbnRlbnQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRG9jVHlwZVRlc3QudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5Eb2NUeXBlVGVzdC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjY2E5N2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5Eb2NUeXBlVGVzdC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5Eb2NUeXBlVGVzdAotU291cmNlIDoKLTwhRE9DVFlQRSBIVE1MPjxodG1sPjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMTVdICg8IURPQ1RZUEUgSFRNTD4pCi1bMTUsIDIxXSAoPGh0bWw+KQotWzIxLCAyOF0gKDwvaHRtbD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLUhUTUwobnVsbCkobnVsbClAWzAsIDE1XSAoPCFET0NUWVBFIEhUTUw+KQotLS1odG1sL2h0bWxAWzE1LCAyMV0gKDxodG1sPilAWzIxLCAyOF0gKDwvaHRtbD4pCi0KLVNvdXJjZSA6Ci08IURPQ1RZUEUgSFRNTCBTWVNURU0gInN5dGVtIj48aHRtbD48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDMwXSAoPCFET0NUWVBFIEhUTUwgU1lTVEVNICJzeXRlbSI+KQotWzMwLCAzNl0gKDxodG1sPikKLVszNiwgNDNdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1IVE1MKG51bGwpKHN5dGVtKUBbMCwgMzBdICg8IURPQ1RZUEUgSFRNTCBTWVNURU0gInN5dGVtIj4pCi0tLWh0bWwvaHRtbEBbMzAsIDM2XSAoPGh0bWw+KUBbMzYsIDQzXSAoPC9odG1sPikKLQotU291cmNlIDoKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAicHVibGljIiAic3l0ZW0iPjxodG1sPjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMzldICg8IURPQ1RZUEUgSFRNTCBQVUJMSUMgInB1YmxpYyIgInN5dGVtIj4pCi1bMzksIDQ1XSAoPGh0bWw+KQotWzQ1LCA1Ml0gKDwvaHRtbD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLUhUTUwocHVibGljKShzeXRlbSlAWzAsIDM5XSAoPCFET0NUWVBFIEhUTUwgUFVCTElDICJwdWJsaWMiICJzeXRlbSI+KQotLS1odG1sL2h0bWxAWzM5LCA0NV0gKDxodG1sPilAWzQ1LCA1Ml0gKDwvaHRtbD4pCi0KLVNvdXJjZSA6Ci0gPCFET0NUWVBFIEhUTUwgUFVCTElDICJwdWJsaWMiICJzeXRlbSI+PGh0bWw+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxXSAoICkKLVsxLCA0MF0gKDwhRE9DVFlQRSBIVE1MIFBVQkxJQyAicHVibGljIiAic3l0ZW0iPikKLVs0MCwgNDZdICg8aHRtbD4pCi1bNDYsIDUzXSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tI3RleHQoIClAWzAsIDFdICggKQotLS1IVE1MKHB1YmxpYykoc3l0ZW0pQFsxLCA0MF0gKDwhRE9DVFlQRSBIVE1MIFBVQkxJQyAicHVibGljIiAic3l0ZW0iPikKLS0taHRtbC9odG1sQFs0MCwgNDZdICg8aHRtbD4pQFs0NiwgNTNdICg8L2h0bWw+KQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVsZW1lbnRUZXN0LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRWxlbWVudFRlc3QudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmNkODI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRWxlbWVudFRlc3QudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRWxlbWVudFRlc3QKLVNvdXJjZSA6Ci08YT48YiBlPSJmIiBjPSJkIj48ZyAvPjxoIC8+PC9iPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCAxOF0gKDxiIGU9ImYiIGM9ImQiPikKLVsxOCwgMjNdICg8ZyAvPikKLVsyMywgMjhdICg8aCAvPikKLVsyOCwgMzJdICg8L2I+KQotWzMyLCAzNl0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzMyLCAzNl0gKDwvYT4pCi0tLS0tYi9iQFszLCAxOF0gKDxiIGUmIzYxOyJmIiBjJiM2MTsiZCI+KUBbMjgsIDMyXSAoPC9iPikKLS0tLS0tLWcvQFsxOCwgMjNdICg8ZyAvPikKLS0tLS0tLWgvQFsyMywgMjhdICg8aCAvPikKLQotU291cmNlIDoKLTxhPjxpIGU9ImYiIGM9ImQiPjxnIC8+PGggLz48L2k+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDE4XSAoPGkgZT0iZiIgYz0iZCI+KQotWzE4LCAyM10gKDxnIC8+KQotWzIzLCAyOF0gKDxoIC8+KQotWzI4LCAzMl0gKDwvaT4pCi1bMzIsIDM2XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMzIsIDM2XSAoPC9hPikKLS0tLS1pL2lAWzMsIDE4XSAoPGkgZSYjNjE7ImYiIGMmIzYxOyJkIj4pQFsyOCwgMzJdICg8L2k+KQotLS0tLS0tZy9AWzE4LCAyM10gKDxnIC8+KQotLS0tLS0taC9AWzIzLCAyOF0gKDxoIC8+KQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVsZW1lbnRUZXN0Mi50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVsZW1lbnRUZXN0Mi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkNDYwOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbGVtZW50VGVzdDIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRWxlbWVudFRlc3QyCi1Tb3VyY2UgOgotPGE+PGI+YzwvYj48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNl0gKDxiPikKLVs2LCA3XSAoYykKLVs3LCAxMV0gKDwvYj4pCi1bMTEsIDE1XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMTEsIDE1XSAoPC9hPikKLS0tLS1iL2JAWzMsIDZdICg8Yj4pQFs3LCAxMV0gKDwvYj4pCi0tLS0tLS0jdGV4dChjKUBbNiwgN10gKGMpCi0KLWEudGFnTmFtZT14OmEKLVNvdXJjZSA6Ci08eDphPjxiPmM8L2I+PC94OmE+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDVdICg8eDphPikKLVs1LCA4XSAoPGI+KQotWzgsIDldIChjKQotWzksIDEzXSAoPC9iPikKLVsxMywgMTldICg8L3g6YT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXg6YS94OmFAWzAsIDVdICg8eDphPilAWzEzLCAxOV0gKDwveDphPikKLS0tLS1iL2JAWzUsIDhdICg8Yj4pQFs5LCAxM10gKDwvYj4pCi0tLS0tLS0jdGV4dChjKUBbOCwgOV0gKGMpCi0KLVNvdXJjZSA6Ci08eDphPjx5OmI+YzwveTpiPjwveDphPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA1XSAoPHg6YT4pCi1bNSwgMTBdICg8eTpiPikKLVsxMCwgMTFdIChjKQotWzExLCAxN10gKDwveTpiPikKLVsxNywgMjNdICg8L3g6YT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXg6YS94OmFAWzAsIDVdICg8eDphPilAWzE3LCAyM10gKDwveDphPikKLS0tLS15OmIveTpiQFs1LCAxMF0gKDx5OmI+KUBbMTEsIDE3XSAoPC95OmI+KQotLS0tLS0tI3RleHQoYylAWzEwLCAxMV0gKGMpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRWxlbWVudFRlc3QzLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRWxlbWVudFRlc3QzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjVkYWJmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVsZW1lbnRUZXN0My50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbGVtZW50VGVzdDMKLVNvdXJjZSA6Ci08eDphPjxiPmM8L2I+PC94OmE+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDVdICg8eDphPikKLVs1LCA4XSAoPGI+KQotWzgsIDldIChjKQotWzksIDEzXSAoPC9iPikKLVsxMywgMTldICg8L3g6YT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXg6YS94OmFAWzAsIDVdICg8eDphPilAWzEzLCAxOV0gKDwveDphPikKLS0tLS1iL2JAWzUsIDhdICg8Yj4pQFs5LCAxM10gKDwvYj4pCi0tLS0tLS0jdGV4dChjKUBbOCwgOV0gKGMpCi0KLWEudGFnTmFtZT1hCi1Tb3VyY2UgOgotPGE+PGI+YzwvYj48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNl0gKDxiPikKLVs2LCA3XSAoYykKLVs3LCAxMV0gKDwvYj4pCi1bMTEsIDE1XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMTEsIDE1XSAoPC9hPikKLS0tLS1iL2JAWzMsIDZdICg8Yj4pQFs3LCAxMV0gKDwvYj4pCi0tLS0tLS0jdGV4dChjKUBbNiwgN10gKGMpCi0KLWEudGFnTmFtZT15OmEKLVNvdXJjZSA6Ci08eTphPjxiPmM8L2I+PC95OmE+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDVdICg8eTphPikKLVs1LCA4XSAoPGI+KQotWzgsIDldIChjKQotWzksIDEzXSAoPC9iPikKLVsxMywgMTldICg8L3k6YT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXk6YS95OmFAWzAsIDVdICg8eTphPilAWzEzLCAxOV0gKDwveTphPikKLS0tLS1iL2JAWzUsIDhdICg8Yj4pQFs5LCAxM10gKDwvYj4pCi0tLS0tLS0jdGV4dChjKUBbOCwgOV0gKGMpCi0KLVNvdXJjZSA6Ci08eTphPjxiPmM8L2I+PC95OmE+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDVdICg8eTphPikKLVs1LCA4XSAoPGI+KQotWzgsIDldIChjKQotWzksIDEzXSAoPC9iPikKLVsxMywgMTldICg8L3k6YT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXk6YS95OmFAWzAsIDVdICg8eTphPilAWzEzLCAxOV0gKDwveTphPikKLS0tLS1iL2JAWzUsIDhdICg8Yj4pQFs5LCAxM10gKDwvYj4pCi0tLS0tLS0jdGV4dChjKUBbOCwgOV0gKGMpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVtcHR5VGV4dFRlc3QudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWNhZmU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbXB0eVRleHRUZXN0Ci1Tb3VyY2UgOgotPHA+YTxicj48L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNF0gKGEpCi1bNCwgOF0gKDxicj4pCi1bOCwgMTJdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs4LCAxMl0gKDwvcD4pCi0tLS0tI3RleHQoYSlAWzMsIDRdIChhKQotLS0tLWJyQFs0LCA4XSAoPGJyPikKLS0tLS0jdGV4dCgpCi0KLVNvdXJjZSA6Ci08cD5hPGJyPjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA0XSAoYSkKLVs0LCA4XSAoPGJyPikKLVs4LCAxMl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzgsIDEyXSAoPC9wPikKLS0tLS0jdGV4dChhKUBbMywgNF0gKGEpCi0tLS0tYnJAWzQsIDhdICg8YnI+KQotLS0tLSN0ZXh0KCkKLS0tLS0jdGV4dCgpCi0KLVNvdXJjZSA6Ci08cD5hPGJyPmI8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNF0gKGEpCi1bNCwgOF0gKDxicj4pCi1bOCwgOV0gKGIpCi1bOSwgMTNdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs5LCAxM10gKDwvcD4pCi0tLS0tI3RleHQoYSlAWzMsIDRdIChhKQotLS0tLWJyQFs0LCA4XSAoPGJyPikKLS0tLS0jdGV4dChiKUBbOCwgOV0gKGIpCi0tLS0tI3RleHQoKQotCi1Tb3VyY2UgOgotPHA+YTxicj5iPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDRdIChhKQotWzQsIDhdICg8YnI+KQotWzgsIDldIChiKQotWzksIDEzXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbOSwgMTNdICg8L3A+KQotLS0tLSN0ZXh0KGEpQFszLCA0XSAoYSkKLS0tLS1ickBbNCwgOF0gKDxicj4pCi0tLS0tI3RleHQoYilAWzgsIDldIChiKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVtcHR5VGV4dFRlc3QyLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdDIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Mzg2ZWZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdDIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdDIKLVNvdXJjZSA6Ci08cD48L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgN10gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzMsIDddICg8L3A+KQotLS0tLSN0ZXh0KCkKLQotU291cmNlIDoKLTxwPmE8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNF0gKGEpCi1bNCwgOF0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzQsIDhdICg8L3A+KQotLS0tLSN0ZXh0KGEpQFszLCA0XSAoYSkKLQotU291cmNlIDoKLTxwPjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA3XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMywgN10gKDwvcD4pCi0tLS0tI3RleHQoKQotCi1Tb3VyY2UgOgotPHA+PGI+PC9iPjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA2XSAoPGI+KQotWzYsIDEwXSAoPC9iPikKLVsxMCwgMTRdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMCwgMTRdICg8L3A+KQotLS0tLWIvYkBbMywgNl0gKDxiPilAWzYsIDEwXSAoPC9iPikKLS0tLS0tLSN0ZXh0KCkKLQotU291cmNlIDoKLTxwPjxiPmE8L2I+PC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDZdICg8Yj4pCi1bNiwgN10gKGEpCi1bNywgMTFdICg8L2I+KQotWzExLCAxNV0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzExLCAxNV0gKDwvcD4pCi0tLS0tYi9iQFszLCA2XSAoPGI+KUBbNywgMTFdICg8L2I+KQotLS0tLS0tI3RleHQoYSlAWzYsIDddIChhKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVtcHR5VGV4dFRlc3QzLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdDMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTY1ZWZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdDMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdDMKLVNvdXJjZSA6Ci0KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLSN0ZXh0KCkKLQotU291cmNlIDoKLTxhPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA3XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMywgN10gKDwvYT4pCi0tLSN0ZXh0KCkKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhNzJmODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3QKLVNvdXJjZSA6Ci08cD48L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgN10gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzMsIDddICg8L3A+KQotCi1Tb3VyY2UgOgotPHA+JmFtcDtndDs8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgOF0gKCZhbXA7KQotWzgsIDExXSAoZ3Q7KQotWzExLCAxNV0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzExLCAxNV0gKDwvcD4pCi0tLS0tI3RleHQoJmd0OylAe1szLCA4XSAoJmFtcDspLFs4LCAxMV0gKGd0Oyl9Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDIudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0Mi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxNzJlZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0Mi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0MgotU291cmNlIDoKLTxwPmE8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNF0gKGEpCi1bNCwgOF0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzQsIDhdICg8L3A+KQotLS0tLSN0ZXh0KGEpQFszLCA0XSAoYSkKLQotU291cmNlIDoKLTxwPmEmYW1wO2d0OzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA0XSAoYSkKLVs0LCA5XSAoJmFtcDspCi1bOSwgMTJdIChndDspCi1bMTIsIDE2XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTIsIDE2XSAoPC9wPikKLS0tLS0jdGV4dChhJmd0OylAe1szLCA0XSAoYSksWzQsIDldICgmYW1wOyksWzksIDEyXSAoZ3Q7KX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0My50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3QzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJjYjNjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3QzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3QzCi1Tb3VyY2UgOgotPHA+YTwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA0XSAoYSkKLVs0LCA4XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbNCwgOF0gKDwvcD4pCi0tLS0tI3RleHQoYSlAWzMsIDRdIChhKQotCi1Tb3VyY2UgOgotPHA+YWI8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNV0gKGFiKQotWzUsIDldICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs1LCA5XSAoPC9wPikKLS0tLS0jdGV4dChhYilAWzMsIDVdIChhYikKLQotU291cmNlIDoKLTxwPmFiJmFtcDs8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNV0gKGFiKQotWzUsIDEwXSAoJmFtcDspCi1bMTAsIDE0XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTAsIDE0XSAoPC9wPikKLS0tLS0jdGV4dChhYiYpQHtbMywgNV0gKGFiKSxbNSwgMTBdICgmYW1wOyl9Ci0KLVNvdXJjZSA6Ci08cD5hYiZhbXA7YzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA1XSAoYWIpCi1bNSwgMTBdICgmYW1wOykKLVsxMCwgMTFdIChjKQotWzExLCAxNV0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzExLCAxNV0gKDwvcD4pCi0tLS0tI3RleHQoYWImYylAe1szLCA1XSAoYWIpLFs1LCAxMF0gKCZhbXA7KSxbMTAsIDExXSAoYyl9Ci0KLVNvdXJjZSA6Ci08cD5kYWImYW1wO2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNl0gKGRhYikKLVs2LCAxMV0gKCZhbXA7KQotWzExLCAxMl0gKGMpCi1bMTIsIDE2XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTIsIDE2XSAoPC9wPikKLS0tLS0jdGV4dChkYWImYylAe1szLCA2XSAoZGFiKSxbNiwgMTFdICgmYW1wOyksWzExLCAxMl0gKGMpfQotCi1Tb3VyY2UgOgotPHA+ZGFiJmFtcDtjZTwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA2XSAoZGFiKQotWzYsIDExXSAoJmFtcDspCi1bMTEsIDEzXSAoY2UpCi1bMTMsIDE3XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTMsIDE3XSAoPC9wPikKLS0tLS0jdGV4dChkYWImY2UpQHtbMywgNl0gKGRhYiksWzYsIDExXSAoJmFtcDspLFsxMSwgMTNdIChjZSl9Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDQudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjZTgwZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NAotU291cmNlIDoKLTxwPmEmYW1wO2I8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNF0gKGEpCi1bNCwgOV0gKCZhbXA7KQotWzksIDEwXSAoYikKLVsxMCwgMTRdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMCwgMTRdICg8L3A+KQotLS0tLSN0ZXh0KGEmYilAe1szLCA0XSAoYSksWzQsIDldICgmYW1wOyksWzksIDEwXSAoYil9Ci0KLVNvdXJjZSA6Ci08cD5hJmFtcDtiPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDRdIChhKQotWzQsIDldICgmYW1wOykKLVs5LCAxMF0gKGIpCi1bMTAsIDE0XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTAsIDE0XSAoPC9wPikKLS0tLS0jdGV4dCgpCi0tLS0tI3RleHQoYSZiKUB7WzMsIDRdIChhKSxbNCwgOV0gKCZhbXA7KSxbOSwgMTBdIChiKX0KLQotU291cmNlIDoKLTxwPmNhJmFtcDtiPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDVdIChjYSkKLVs1LCAxMF0gKCZhbXA7KQotWzEwLCAxMV0gKGIpCi1bMTEsIDE1XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTEsIDE1XSAoPC9wPikKLS0tLS0jdGV4dChjKUBbMyw0XShbMywgNV0gKGNhKSkKLS0tLS0jdGV4dChhJmIpQHtbNCw1XShbMywgNV0gKGNhKSksWzUsIDEwXSAoJmFtcDspLFsxMCwgMTFdIChiKX0KLQotU291cmNlIDoKLTxwPmNhJmFtcDtiYSZhbXA7YjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA1XSAoY2EpCi1bNSwgMTBdICgmYW1wOykKLVsxMCwgMTJdIChiYSkKLVsxMiwgMTddICgmYW1wOykKLVsxNywgMThdIChiKQotWzE4LCAyMl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzE4LCAyMl0gKDwvcD4pCi0tLS0tI3RleHQoY2EmYilAe1szLCA1XSAoY2EpLFs1LCAxMF0gKCZhbXA7KSxbMTAsMTFdKFsxMCwgMTJdIChiYSkpfQotLS0tLSN0ZXh0KGEmYilAe1sxMSwxMl0oWzEwLCAxMl0gKGJhKSksWzEyLCAxN10gKCZhbXA7KSxbMTcsIDE4XSAoYil9Ci0KLVNvdXJjZSA6Ci08cD5jYSZhbXA7YjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA1XSAoY2EpCi1bNSwgMTBdICgmYW1wOykKLVsxMCwgMTFdIChiKQotWzExLCAxNV0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzExLCAxNV0gKDwvcD4pCi0tLS0tI3RleHQoY2EmYilAe1szLCA1XSAoY2EpLFs1LCAxMF0gKCZhbXA7KSxbMTAsIDExXSAoYil9Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDUudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4ZWI4YzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NQotU291cmNlIDoKLTxwPmEmYW1wO2I8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNF0gKGEpCi1bNCwgOV0gKCZhbXA7KQotWzksIDEwXSAoYikKLVsxMCwgMTRdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMCwgMTRdICg8L3A+KQotLS0tLSN0ZXh0KGEmYilAe1szLCA0XSAoYSksWzQsIDldICgmYW1wOyksWzksIDEwXSAoYil9Ci0KLVNvdXJjZSA6Ci08cD5hJmFtcDtiYSZhbXA7YjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA0XSAoYSkKLVs0LCA5XSAoJmFtcDspCi1bOSwgMTFdIChiYSkKLVsxMSwgMTZdICgmYW1wOykKLVsxNiwgMTddIChiKQotWzE3LCAyMV0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzE3LCAyMV0gKDwvcD4pCi0tLS0tI3RleHQoYSZiKUB7WzMsIDRdIChhKSxbNCwgOV0gKCZhbXA7KSxbOSwxMF0oWzksIDExXSAoYmEpKX0KLS0tLS0jdGV4dChhJmIpQHtbMTAsMTFdKFs5LCAxMV0gKGJhKSksWzExLCAxNl0gKCZhbXA7KSxbMTYsIDE3XSAoYil9Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDYudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0Ni50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxMzE1ZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0Ni50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NgotU291cmNlIDoKLTxwPmEmYW1wOzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA0XSAoYSkKLVs0LCA5XSAoJmFtcDspCi1bOSwgMTNdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs5LCAxM10gKDwvcD4pCi0tLS0tI3RleHQoYSYpQHtbMywgNF0gKGEpLFs0LCA5XSAoJmFtcDspfQotCi1Tb3VyY2UgOgotPHA+YSZhbXA7YSZhbXA7PC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDRdIChhKQotWzQsIDldICgmYW1wOykKLVs5LCAxMF0gKGEpCi1bMTAsIDE1XSAoJmFtcDspCi1bMTUsIDE5XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTUsIDE5XSAoPC9wPikKLS0tLS0jdGV4dChhJilAe1szLCA0XSAoYSksWzQsIDldICgmYW1wOyl9Ci0tLS0tI3RleHQoYSYpQHtbOSwgMTBdIChhKSxbMTAsIDE1XSAoJmFtcDspfQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q3LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDcudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjVkOTgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDcudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDcKLVNvdXJjZSA6Ci08YT5hJiM2NTsmI3g0MTsmdW5rOyZ1bmsmdW5rPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDRdIChhKQotWzQsIDldICgmIzY1OykKLVs5LCAxNV0gKCYjeDQxOykKLVsxNSwgMjBdICgmdW5rOykKLVsyMCwgMjRdICgmdW5rKQotWzI0LCAyOF0gKCZ1bmspCi1bMjgsIDMyXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMjgsIDMyXSAoPC9hPikKLS0tLS0jdGV4dChhQUEpQHtbMywgNF0gKGEpLFs0LCA5XSAoJiM2NTspLFs5LCAxNV0gKCYjeDQxOyl9Ci0tLS0tdW5rCi0tLS0tI3RleHQoJnVuayZ1bmspQHtbMjAsIDI0XSAoJnVuayksWzI0LCAyOF0gKCZ1bmspfQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q4LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDgudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGVjYjFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDgudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDgKLVNvdXJjZSA6Ci0maWJtOyZydHA7Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDVdICgmaWJtOykKLVs1LCAxMF0gKCZydHA7KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1pYm0KLS0tcnRwCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDkudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0OS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4MDJlM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0OS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0OQotU291cmNlIDoKLSZsdDsKLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNF0gKCZsdDspCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLSN0ZXh0KDwpQFswLCA0XSAoJmx0OykKLQotU291cmNlIDoKLSZsdDsmZ3QKLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNF0gKCZsdDspCi1bNCwgN10gKCZndCkKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tI3RleHQoPCZndClAe1swLCA0XSAoJmx0OyksWzQsIDddICgmZ3QpfQotCi1Tb3VyY2UgOgotJmx0OyZndDsKLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNF0gKCZsdDspCi1bNCwgOF0gKCZndDspCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLSN0ZXh0KDw+KUB7WzAsIDRdICgmbHQ7KSxbNCwgOF0gKCZndDspfQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBJVGVzdC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBJVGVzdC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2YWVhNmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QSVRlc3QudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUElUZXN0Ci1Tb3VyY2UgOgotPGE+PD9lY2hvICRQSFBfU0VMRj8+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDIxXSAoPD9lY2hvICRQSFBfU0VMRj8+KQotWzIxLCAyNV0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzIxLCAyNV0gKDwvYT4pCi0tLS0tZWNobygkUEhQX1NFTEYpCi0KLXRhcmdldChlY2hvKSBkYXRhICgkUEhQX1NFTEYpCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3QudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ5Njc5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3QudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3QKLVNvdXJjZSA6Ci08UD48Qj48L0I+PEI+PC9CPjwvUD48UD48L1A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8UD4pCi1bMywgNl0gKDxCPikKLVs2LCAxMF0gKDwvQj4pCi1bMTAsIDEzXSAoPEI+KQotWzEzLCAxN10gKDwvQj4pCi1bMTcsIDIxXSAoPC9QPikKLVsyMSwgMjRdICg8UD4pCi1bMjQsIDI4XSAoPC9QPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tUC9QQFswLCAzXSAoPFA+KUBbMTcsIDIxXSAoPC9QPikKLS0tLS1CL0JAWzMsIDZdICg8Qj4pQFs2LCAxMF0gKDwvQj4pCi0tLS0tQi9CQFsxMCwgMTNdICg8Qj4pQFsxMywgMTddICg8L0I+KQotLS1QL1BAWzIxLCAyNF0gKDxQPilAWzI0LCAyOF0gKDwvUD4pCi0KLVNvdXJjZSA6Ci1hPFA+PEI+PC9CPjxCPjwvQj48L1A+PFA+PC9QPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxXSAoYSkKLVsxLCA0XSAoPFA+KQotWzQsIDddICg8Qj4pCi1bNywgMTFdICg8L0I+KQotWzExLCAxNF0gKDxCPikKLVsxNCwgMThdICg8L0I+KQotWzE4LCAyMl0gKDwvUD4pCi1bMjIsIDI1XSAoPFA+KQotWzI1LCAyOV0gKDwvUD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLSN0ZXh0KGEpQFswLCAxXSAoYSkKLS0tUC9QQFsxLCA0XSAoPFA+KUBbMTgsIDIyXSAoPC9QPikKLS0tLS1CL0JAWzQsIDddICg8Qj4pQFs3LCAxMV0gKDwvQj4pCi0tLS0tQi9CQFsxMSwgMTRdICg8Qj4pQFsxNCwgMThdICg8L0I+KQotLS1QL1BAWzIyLCAyNV0gKDxQPilAWzI1LCAyOV0gKDwvUD4pCi0KLVNvdXJjZSA6Ci1hPFA+YjxCPjwvQj48Qj48L0I+PC9QPjxQPjwvUD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMV0gKGEpCi1bMSwgNF0gKDxQPikKLVs0LCA1XSAoYikKLVs1LCA4XSAoPEI+KQotWzgsIDEyXSAoPC9CPikKLVsxMiwgMTVdICg8Qj4pCi1bMTUsIDE5XSAoPC9CPikKLVsxOSwgMjNdICg8L1A+KQotWzIzLCAyNl0gKDxQPikKLVsyNiwgMzBdICg8L1A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS0jdGV4dChhKUBbMCwgMV0gKGEpCi0tLVAvUEBbMSwgNF0gKDxQPilAWzE5LCAyM10gKDwvUD4pCi0tLS0tI3RleHQoYilAWzQsIDVdIChiKQotLS0tLUIvQkBbNSwgOF0gKDxCPilAWzgsIDEyXSAoPC9CPikKLS0tLS1CL0JAWzEyLCAxNV0gKDxCPilAWzE1LCAxOV0gKDwvQj4pCi0tLVAvUEBbMjMsIDI2XSAoPFA+KUBbMjYsIDMwXSAoPC9QPikKLQotU291cmNlIDoKLWE8UD5iPEI+PC9CPmM8Qj48L0I+PC9QPjxQPjwvUD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMV0gKGEpCi1bMSwgNF0gKDxQPikKLVs0LCA1XSAoYikKLVs1LCA4XSAoPEI+KQotWzgsIDEyXSAoPC9CPikKLVsxMiwgMTNdIChjKQotWzEzLCAxNl0gKDxCPikKLVsxNiwgMjBdICg8L0I+KQotWzIwLCAyNF0gKDwvUD4pCi1bMjQsIDI3XSAoPFA+KQotWzI3LCAzMV0gKDwvUD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLSN0ZXh0KGEpQFswLCAxXSAoYSkKLS0tUC9QQFsxLCA0XSAoPFA+KUBbMjAsIDI0XSAoPC9QPikKLS0tLS0jdGV4dChiKUBbNCwgNV0gKGIpCi0tLS0tQi9CQFs1LCA4XSAoPEI+KUBbOCwgMTJdICg8L0I+KQotLS0tLSN0ZXh0KGMpQFsxMiwgMTNdIChjKQotLS0tLUIvQkBbMTMsIDE2XSAoPEI+KUBbMTYsIDIwXSAoPC9CPikKLS0tUC9QQFsyNCwgMjddICg8UD4pQFsyNywgMzFdICg8L1A+KQotCi1Tb3VyY2UgOgotYTxQPmI8Qj48L0I+YzxCPjwvQj5kPC9QPjxQPjwvUD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMV0gKGEpCi1bMSwgNF0gKDxQPikKLVs0LCA1XSAoYikKLVs1LCA4XSAoPEI+KQotWzgsIDEyXSAoPC9CPikKLVsxMiwgMTNdIChjKQotWzEzLCAxNl0gKDxCPikKLVsxNiwgMjBdICg8L0I+KQotWzIwLCAyMV0gKGQpCi1bMjEsIDI1XSAoPC9QPikKLVsyNSwgMjhdICg8UD4pCi1bMjgsIDMyXSAoPC9QPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tI3RleHQoYSlAWzAsIDFdIChhKQotLS1QL1BAWzEsIDRdICg8UD4pQFsyMSwgMjVdICg8L1A+KQotLS0tLSN0ZXh0KGIpQFs0LCA1XSAoYikKLS0tLS1CL0JAWzUsIDhdICg8Qj4pQFs4LCAxMl0gKDwvQj4pCi0tLS0tI3RleHQoYylAWzEyLCAxM10gKGMpCi0tLS0tQi9CQFsxMywgMTZdICg8Qj4pQFsxNiwgMjBdICg8L0I+KQotLS0tLSN0ZXh0KGQpQFsyMCwgMjFdIChkKQotLS1QL1BAWzI1LCAyOF0gKDxQPilAWzI4LCAzMl0gKDwvUD4pCi0KLVNvdXJjZSA6Ci1hPFA+YjxCPjwvQj5jPEI+PC9CPmQ8L1A+ZTxQPjwvUD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMV0gKGEpCi1bMSwgNF0gKDxQPikKLVs0LCA1XSAoYikKLVs1LCA4XSAoPEI+KQotWzgsIDEyXSAoPC9CPikKLVsxMiwgMTNdIChjKQotWzEzLCAxNl0gKDxCPikKLVsxNiwgMjBdICg8L0I+KQotWzIwLCAyMV0gKGQpCi1bMjEsIDI1XSAoPC9QPikKLVsyNSwgMjZdIChlKQotWzI2LCAyOV0gKDxQPikKLVsyOSwgMzNdICg8L1A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS0jdGV4dChhKUBbMCwgMV0gKGEpCi0tLVAvUEBbMSwgNF0gKDxQPilAWzIxLCAyNV0gKDwvUD4pCi0tLS0tI3RleHQoYilAWzQsIDVdIChiKQotLS0tLUIvQkBbNSwgOF0gKDxCPilAWzgsIDEyXSAoPC9CPikKLS0tLS0jdGV4dChjKUBbMTIsIDEzXSAoYykKLS0tLS1CL0JAWzEzLCAxNl0gKDxCPilAWzE2LCAyMF0gKDwvQj4pCi0tLS0tI3RleHQoZClAWzIwLCAyMV0gKGQpCi0tLSN0ZXh0KGUpQFsyNSwgMjZdIChlKQotLS1QL1BAWzI2LCAyOV0gKDxQPilAWzI5LCAzM10gKDwvUD4pCi0KLVNvdXJjZSA6Ci1hPFA+YjxCPjwvQj5jPEI+PC9CPmQ8L1A+ZTxQPmY8L1A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDFdIChhKQotWzEsIDRdICg8UD4pCi1bNCwgNV0gKGIpCi1bNSwgOF0gKDxCPikKLVs4LCAxMl0gKDwvQj4pCi1bMTIsIDEzXSAoYykKLVsxMywgMTZdICg8Qj4pCi1bMTYsIDIwXSAoPC9CPikKLVsyMCwgMjFdIChkKQotWzIxLCAyNV0gKDwvUD4pCi1bMjUsIDI2XSAoZSkKLVsyNiwgMjldICg8UD4pCi1bMjksIDMwXSAoZikKLVszMCwgMzRdICg8L1A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS0jdGV4dChhKUBbMCwgMV0gKGEpCi0tLVAvUEBbMSwgNF0gKDxQPilAWzIxLCAyNV0gKDwvUD4pCi0tLS0tI3RleHQoYilAWzQsIDVdIChiKQotLS0tLUIvQkBbNSwgOF0gKDxCPilAWzgsIDEyXSAoPC9CPikKLS0tLS0jdGV4dChjKUBbMTIsIDEzXSAoYykKLS0tLS1CL0JAWzEzLCAxNl0gKDxCPilAWzE2LCAyMF0gKDwvQj4pCi0tLS0tI3RleHQoZClAWzIwLCAyMV0gKGQpCi0tLSN0ZXh0KGUpQFsyNSwgMjZdIChlKQotLS1QL1BAWzI2LCAyOV0gKDxQPilAWzMwLCAzNF0gKDwvUD4pCi0tLS0tI3RleHQoZilAWzI5LCAzMF0gKGYpCi0KLVNvdXJjZSA6Ci1hPFA+YjxCPjwvQj5jPEI+PC9CPmQ8L1A+ZTxQPmY8L1A+ZwotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxXSAoYSkKLVsxLCA0XSAoPFA+KQotWzQsIDVdIChiKQotWzUsIDhdICg8Qj4pCi1bOCwgMTJdICg8L0I+KQotWzEyLCAxM10gKGMpCi1bMTMsIDE2XSAoPEI+KQotWzE2LCAyMF0gKDwvQj4pCi1bMjAsIDIxXSAoZCkKLVsyMSwgMjVdICg8L1A+KQotWzI1LCAyNl0gKGUpCi1bMjYsIDI5XSAoPFA+KQotWzI5LCAzMF0gKGYpCi1bMzAsIDM0XSAoPC9QPikKLVszNCwgMzVdIChnKQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS0jdGV4dChhKUBbMCwgMV0gKGEpCi0tLVAvUEBbMSwgNF0gKDxQPilAWzIxLCAyNV0gKDwvUD4pCi0tLS0tI3RleHQoYilAWzQsIDVdIChiKQotLS0tLUIvQkBbNSwgOF0gKDxCPilAWzgsIDEyXSAoPC9CPikKLS0tLS0jdGV4dChjKUBbMTIsIDEzXSAoYykKLS0tLS1CL0JAWzEzLCAxNl0gKDxCPilAWzE2LCAyMF0gKDwvQj4pCi0tLS0tI3RleHQoZClAWzIwLCAyMV0gKGQpCi0tLSN0ZXh0KGUpQFsyNSwgMjZdIChlKQotLS1QL1BAWzI2LCAyOV0gKDxQPilAWzMwLCAzNF0gKDwvUD4pCi0tLS0tI3RleHQoZilAWzI5LCAzMF0gKGYpCi0tLSN0ZXh0KGcpQFszNCwgMzVdIChnKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3QyLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdDIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Mzk5MGE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdDIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdDIKLVNvdXJjZSA6Ci08YSBiPSIiICBjPSJjIj4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMTVdICg8YSBiPSIiICBjPSJjIj4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWFAWzAsIDE1XSAoPGEgYiYjNjE7IiIgIGMmIzYxOyJjIj4pCi0KLWI9W10KLWM9W2NdCi1Tb3VyY2UgOgotPGEgYj0iIiBkIGM9ImMiPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxNl0gKDxhIGI9IiIgZCBjPSJjIj4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWFAWzAsIDE2XSAoPGEgYiYjNjE7IiIgZCBjJiM2MTsiYyI+KQotCi1iPVtdCi1kPVtdCi1jPVtjXQotU291cmNlIDoKLTxhIGI9IiIgIGM9ImMiPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxNV0gKDxhIGI9IiIgIGM9ImMiPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYUBbMCwgMTVdICg8YSBiJiM2MTsiIiAgYyYjNjE7ImMiPikKLQotYj1bXQotYz1bY10KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdDMudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0My50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMzhhZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0My50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0MwotU291cmNlIDoKLTxhIGIgID4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgN10gKDxhIGIgID4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWFAWzAsIDddICg8YSBiICA+KQotCi1iPVtdCi1vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlJlZ2lvbkNoYW5nZWRFdmVudAotU291cmNlIDoKLTxhIGIgPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPGEgYiA+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hQFswLCA2XSAoPGEgYiA+KQotCi1iPVtdCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3Q0LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdDQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzMyY2UyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdDQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjQzICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3Q0Ci1Tb3VyY2UgOgotPGE+Ci0KLTwlIGEgJT4KLTwlIGIgJT4KLTwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA1XSAoCi0KLSkKLVs1LCA2XSAoPCkKLVs2LCA4XSAoJSApCi1bOCwgMTBdIChhICkKLVsxMCwgMTFdICglKQotWzExLCAxM10gKD4KLSkKLVsxMywgMTRdICg8KQotWzE0LCAxNl0gKCUgKQotWzE2LCAxOF0gKGIgKQotWzE4LCAxOV0gKCUpCi1bMTksIDIxXSAoPgotKQotWzIxLCAyNV0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzIxLCAyNV0gKDwvYT4pCi0tLS0tI3RleHQoXG5cbjwlIGEgJT5cbjwlIGIgJT5cbilAe1szLCA1XSAoXG5cbiksWzUsIDZdICg8KSxbNiwgOF0gKCUgKSxbOCwgMTBdIChhICksWzEwLCAxMV0gKCUpLFsxMSwgMTNdICg+XG4pLFsxMywgMTRdICg8KSxbMTQsIDE2XSAoJSApLFsxNiwgMThdIChiICksWzE4LCAxOV0gKCUpLFsxOSwgMjFdICg+XG4pfQotCi1Tb3VyY2UgOgotPGE+Ci08Ci08JSBhICU+Ci08JSBiICU+Ci08L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNF0gKAotKQotWzQsIDVdICg8KQotWzUsIDZdICgKLSkKLVs2LCA3XSAoPCkKLVs3LCA5XSAoJSApCi1bOSwgMTFdIChhICkKLVsxMSwgMTJdICglKQotWzEyLCAxNF0gKD4KLSkKLVsxNCwgMTVdICg8KQotWzE1LCAxN10gKCUgKQotWzE3LCAxOV0gKGIgKQotWzE5LCAyMF0gKCUpCi1bMjAsIDIyXSAoPgotKQotWzIyLCAyNl0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzIyLCAyNl0gKDwvYT4pCi0tLS0tI3RleHQoXG48XG48JSBhICU+XG48JSBiICU+XG4pQHtbMywgNF0gKFxuKSxbNCwgNV0gKDwpLFs1LCA2XSAoXG4pLFs2LCA3XSAoPCksWzcsIDldICglICksWzksIDExXSAoYSApLFsxMSwgMTJdICglKSxbMTIsIDE0XSAoPlxuKSxbMTQsIDE1XSAoPCksWzE1LCAxN10gKCUgKSxbMTcsIDE5XSAoYiApLFsxOSwgMjBdICglKSxbMjAsIDIyXSAoPlxuKX0KLQotU291cmNlIDoKLTxhPgotPGIKLTwlIGEgJT4KLTwlIGIgJT4KLTwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoCi0pCi1bNCwgN10gKDxiCi0pCi1bNywgOF0gKDwpCi1bOCwgMTBdICglICkKLVsxMCwgMTJdIChhICkKLVsxMiwgMTNdICglKQotWzEzLCAxNV0gKD4KLSkKLVsxNSwgMTZdICg8KQotWzE2LCAxOF0gKCUgKQotWzE4LCAyMF0gKGIgKQotWzIwLCAyMV0gKCUpCi1bMjEsIDIzXSAoPgotKQotWzIzLCAyN10gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzIzLCAyN10gKDwvYT4pCi0tLS0tI3RleHQoXG4pQFszLCA0XSAoXG4pCi0tLS0tYkBbNCwgN10gKDxiXG4pCi0tLS0tLS0jdGV4dCg8JSBhICU+XG48JSBiICU+XG4pQHtbNywgOF0gKDwpLFs4LCAxMF0gKCUgKSxbMTAsIDEyXSAoYSApLFsxMiwgMTNdICglKSxbMTMsIDE1XSAoPlxuKSxbMTUsIDE2XSAoPCksWzE2LCAxOF0gKCUgKSxbMTgsIDIwXSAoYiApLFsyMCwgMjFdICglKSxbMjEsIDIzXSAoPlxuKX0KLQotU291cmNlIDoKLTxhPgotPGJjCi08JSBhICU+Ci08JSBiICU+Ci08L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNF0gKAotKQotWzQsIDhdICg8YmMKLSkKLVs4LCA5XSAoPCkKLVs5LCAxMV0gKCUgKQotWzExLCAxM10gKGEgKQotWzEzLCAxNF0gKCUpCi1bMTQsIDE2XSAoPgotKQotWzE2LCAxN10gKDwpCi1bMTcsIDE5XSAoJSApCi1bMTksIDIxXSAoYiApCi1bMjEsIDIyXSAoJSkKLVsyMiwgMjRdICg+Ci0pCi1bMjQsIDI4XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMjQsIDI4XSAoPC9hPikKLS0tLS0jdGV4dChcbilAWzMsIDRdIChcbikKLS0tLS1iY0BbNCwgOF0gKDxiY1xuKQotLS0tLS0tI3RleHQoPCUgYSAlPlxuPCUgYiAlPlxuKUB7WzgsIDldICg8KSxbOSwgMTFdICglICksWzExLCAxM10gKGEgKSxbMTMsIDE0XSAoJSksWzE0LCAxNl0gKD5cbiksWzE2LCAxN10gKDwpLFsxNywgMTldICglICksWzE5LCAyMV0gKGIgKSxbMjEsIDIyXSAoJSksWzIyLCAyNF0gKD5cbil9Ci0KLVNvdXJjZSA6Ci08YT4KLTxiY2QKLTwlIGEgJT4KLTwlIGIgJT4KLTwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoCi0pCi1bNCwgOV0gKDxiY2QKLSkKLVs5LCAxMF0gKDwpCi1bMTAsIDEyXSAoJSApCi1bMTIsIDE0XSAoYSApCi1bMTQsIDE1XSAoJSkKLVsxNSwgMTddICg+Ci0pCi1bMTcsIDE4XSAoPCkKLVsxOCwgMjBdICglICkKLVsyMCwgMjJdIChiICkKLVsyMiwgMjNdICglKQotWzIzLCAyNV0gKD4KLSkKLVsyNSwgMjldICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsyNSwgMjldICg8L2E+KQotLS0tLSN0ZXh0KFxuKUBbMywgNF0gKFxuKQotLS0tLWJjZEBbNCwgOV0gKDxiY2RcbikKLS0tLS0tLSN0ZXh0KDwlIGEgJT5cbjwlIGIgJT5cbilAe1s5LCAxMF0gKDwpLFsxMCwgMTJdICglICksWzEyLCAxNF0gKGEgKSxbMTQsIDE1XSAoJSksWzE1LCAxN10gKD5cbiksWzE3LCAxOF0gKDwpLFsxOCwgMjBdICglICksWzIwLCAyMl0gKGIgKSxbMjIsIDIzXSAoJSksWzIzLCAyNV0gKD5cbil9Ci0KLVNvdXJjZSA6Ci08YT4KLTxiY2RlCi08JSBhICU+Ci08JSBiICU+Ci08L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNF0gKAotKQotWzQsIDEwXSAoPGJjZGUKLSkKLVsxMCwgMTFdICg8KQotWzExLCAxM10gKCUgKQotWzEzLCAxNV0gKGEgKQotWzE1LCAxNl0gKCUpCi1bMTYsIDE4XSAoPgotKQotWzE4LCAxOV0gKDwpCi1bMTksIDIxXSAoJSApCi1bMjEsIDIzXSAoYiApCi1bMjMsIDI0XSAoJSkKLVsyNCwgMjZdICg+Ci0pCi1bMjYsIDMwXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMjYsIDMwXSAoPC9hPikKLS0tLS0jdGV4dChcbilAWzMsIDRdIChcbikKLS0tLS1iY2RlQFs0LCAxMF0gKDxiY2RlXG4pCi0tLS0tLS0jdGV4dCg8JSBhICU+XG48JSBiICU+XG4pQHtbMTAsIDExXSAoPCksWzExLCAxM10gKCUgKSxbMTMsIDE1XSAoYSApLFsxNSwgMTZdICglKSxbMTYsIDE4XSAoPlxuKSxbMTgsIDE5XSAoPCksWzE5LCAyMV0gKCUgKSxbMjEsIDIzXSAoYiApLFsyMywgMjRdICglKSxbMjQsIDI2XSAoPlxuKX0KLQotU291cmNlIDoKLTxhPgotPGJjZGU+Ci08JSBhICU+Ci08JSBiICU+Ci08L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNF0gKAotKQotWzQsIDEwXSAoPGJjZGU+KQotWzEwLCAxMV0gKAotKQotWzExLCAxMl0gKDwpCi1bMTIsIDE0XSAoJSApCi1bMTQsIDE2XSAoYSApCi1bMTYsIDE3XSAoJSkKLVsxNywgMTldICg+Ci0pCi1bMTksIDIwXSAoPCkKLVsyMCwgMjJdICglICkKLVsyMiwgMjRdIChiICkKLVsyNCwgMjVdICglKQotWzI1LCAyN10gKD4KLSkKLVsyNywgMzFdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsyNywgMzFdICg8L2E+KQotLS0tLSN0ZXh0KFxuKUBbMywgNF0gKFxuKQotLS0tLWJjZGVAWzQsIDEwXSAoPGJjZGU+KQotLS0tLS0tI3RleHQoXG48JSBhICU+XG48JSBiICU+XG4pQHtbMTAsIDExXSAoXG4pLFsxMSwgMTJdICg8KSxbMTIsIDE0XSAoJSApLFsxNCwgMTZdIChhICksWzE2LCAxN10gKCUpLFsxNywgMTldICg+XG4pLFsxOSwgMjBdICg8KSxbMjAsIDIyXSAoJSApLFsyMiwgMjRdIChiICksWzI0LCAyNV0gKCUpLFsyNSwgMjddICg+XG4pfQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3QudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJhOTAwMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3QudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3QKLVNvdXJjZSA6Ci08cD5hYWJiYmJjY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgMTJdIChhYWJiYmJjY2MpCi1bMTIsIDE2XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTIsIDE2XSAoPC9wPikKLS0tLS0jdGV4dChhYWJiYmJjY2MpQFszLCAxMl0gKGFhYmJiYmNjYykKLQotU291cmNlIDoKLTxwPmFhYmJiYmNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCAxMl0gKGFhYmJiYmNjYykKLVsxMiwgMTZdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMiwgMTZdICg8L3A+KQotLS0tLSN0ZXh0KGFhKUBbMyw1XShbMywgMTJdIChhYWJiYmJjY2MpKQotLS0tLSN0ZXh0KGJiYmJjY2MpQFs1LDEyXShbMywgMTJdIChhYWJiYmJjY2MpKQotCi1Tb3VyY2UgOgotPHA+YWFiYmJiY2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDEyXSAoYWFiYmJiY2NjKQotWzEyLCAxNl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEyLCAxNl0gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLDVdKFszLCAxMl0gKGFhYmJiYmNjYykpCi0tLS0tI3RleHQoYmJiYilAWzUsOV0oWzMsIDEyXSAoYWFiYmJiY2NjKSkKLS0tLS0jdGV4dChjY2MpQFs5LDEyXShbMywgMTJdIChhYWJiYmJjY2MpKQotCi1Tb3VyY2UgOgotPHA+YWFjY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgOF0gKGFhY2NjKQotWzgsIDEyXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbOCwgMTJdICg8L3A+KQotLS0tLSN0ZXh0KGFhKUBbMyw1XShbMywgOF0gKGFhY2NjKSkKLS0tLS0jdGV4dChjY2MpQFs1LDhdKFszLCA4XSAoYWFjY2MpKQotCi1Tb3VyY2UgOgotPHA+YWFkZGRkZGRkY2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDE1XSAoYWFkZGRkZGRkY2NjKQotWzE1LCAxOV0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzE1LCAxOV0gKDwvcD4pCi0tLS0tI3RleHQoYWFkZGRkZGRkKUBbMywxMl0oWzMsIDE1XSAoYWFkZGRkZGRkY2NjKSkKLS0tLS0jdGV4dChjY2MpQFsxMiwxNV0oWzMsIDE1XSAoYWFkZGRkZGRkY2NjKSkKLQotU291cmNlIDoKLTxwPmFhZGRkZGRkZGNjY2VlZTwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCAxOF0gKGFhZGRkZGRkZGNjY2VlZSkKLVsxOCwgMjJdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxOCwgMjJdICg8L3A+KQotLS0tLSN0ZXh0KGFhZGRkZGRkZClAWzMsMTJdKFszLCAxOF0gKGFhZGRkZGRkZGNjY2VlZSkpCi0tLS0tI3RleHQoY2NjZWVlKUBbMTIsMThdKFszLCAxOF0gKGFhZGRkZGRkZGNjY2VlZSkpCi0KLVNvdXJjZSA6Ci08cD5hYWRkZGRkZGRiYmJiY2NjZWVlPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDIyXSAoYWFkZGRkZGRkYmJiYmNjY2VlZSkKLVsyMiwgMjZdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsyMiwgMjZdICg8L3A+KQotLS0tLSN0ZXh0KGFhZGRkZGRkZClAWzMsMTJdKFszLCAyMl0gKGFhZGRkZGRkZGJiYmJjY2NlZWUpKQotLS0tLSN0ZXh0KGJiYmIpQFsxMiwxNl0oWzMsIDIyXSAoYWFkZGRkZGRkYmJiYmNjY2VlZSkpCi0tLS0tI3RleHQoY2NjZWVlKUBbMTYsMjJdKFszLCAyMl0gKGFhZGRkZGRkZGJiYmJjY2NlZWUpKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3QyLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTEyMmM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDIKLVNvdXJjZSA6Ci08cD5hYWJiYmJjY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgMTJdIChhYWJiYmJjY2MpCi1bMTIsIDE2XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTIsIDE2XSAoPC9wPikKLS0tLS0jdGV4dChhYWJiYmJjY2MpQFszLCAxMl0gKGFhYmJiYmNjYykKLQotU291cmNlIDoKLTxwPmFhYmJiYmNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCAxMl0gKGFhYmJiYmNjYykKLVsxMiwgMTZdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMiwgMTZdICg8L3A+KQotLS0tLSN0ZXh0KGFhKUBbMyw1XShbMywgMTJdIChhYWJiYmJjY2MpKQotLS0tLSN0ZXh0KGJiYmJjY2MpQFs1LDEyXShbMywgMTJdIChhYWJiYmJjY2MpKQotCi1Tb3VyY2UgOgotPHA+YWFiYmJiY2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDEyXSAoYWFiYmJiY2NjKQotWzEyLCAxNl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEyLCAxNl0gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLDVdKFszLCAxMl0gKGFhYmJiYmNjYykpCi0tLS0tI3RleHQoYmJiYilAWzUsOV0oWzMsIDEyXSAoYWFiYmJiY2NjKSkKLS0tLS0jdGV4dChjY2MpQFs5LDEyXShbMywgMTJdIChhYWJiYmJjY2MpKQotCi1Tb3VyY2UgOgotPHA+YWFjY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgOF0gKGFhY2NjKQotWzgsIDEyXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbOCwgMTJdICg8L3A+KQotLS0tLSN0ZXh0KGFhKUBbMyw1XShbMywgOF0gKGFhY2NjKSkKLS0tLS0jdGV4dChjY2MpQFs1LDhdKFszLCA4XSAoYWFjY2MpKQotCi1Tb3VyY2UgOgotPHA+YWE8Yj5iYmJiPC9iPmNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA1XSAoYWEpCi1bNSwgOF0gKDxiPikKLVs4LCAxMl0gKGJiYmIpCi1bMTIsIDE2XSAoPC9iPikKLVsxNiwgMTldIChjY2MpCi1bMTksIDIzXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTksIDIzXSAoPC9wPikKLS0tLS0jdGV4dChhYSlAWzMsIDVdIChhYSkKLS0tLS1iL2JAWzUsIDhdICg8Yj4pQFsxMiwgMTZdICg8L2I+KQotLS0tLS0tI3RleHQoYmJiYilAWzgsIDEyXSAoYmJiYikKLS0tLS0jdGV4dChjY2MpQFsxNiwgMTldIChjY2MpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDMudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0My50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0NTNhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0My50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0MwotU291cmNlIDoKLTxwPmFhPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDVdIChhYSkKLVs1LCA5XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbNSwgOV0gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLCA1XSAoYWEpCi0KLVNvdXJjZSA6Ci08cD5hYTxiPmJiYmI8L2I+PC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDVdIChhYSkKLVs1LCA4XSAoPGI+KQotWzgsIDEyXSAoYmJiYikKLVsxMiwgMTZdICg8L2I+KQotWzE2LCAyMF0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzE2LCAyMF0gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLCA1XSAoYWEpCi0tLS0tYi9iQFs1LCA4XSAoPGI+KUBbMTIsIDE2XSAoPC9iPikKLS0tLS0tLSN0ZXh0KGJiYmIpQFs4LCAxMl0gKGJiYmIpCi0KLVNvdXJjZSA6Ci08cD5hYTxiPmJiYmI8L2I+Y2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDVdIChhYSkKLVs1LCA4XSAoPGI+KQotWzgsIDEyXSAoYmJiYikKLVsxMiwgMTZdICg8L2I+KQotWzE2LCAxOV0gKGNjYykKLVsxOSwgMjNdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxOSwgMjNdICg8L3A+KQotLS0tLSN0ZXh0KGFhKUBbMywgNV0gKGFhKQotLS0tLWIvYkBbNSwgOF0gKDxiPilAWzEyLCAxNl0gKDwvYj4pCi0tLS0tLS0jdGV4dChiYmJiKUBbOCwgMTJdIChiYmJiKQotLS0tLSN0ZXh0KGNjYylAWzE2LCAxOV0gKGNjYykKLQotU291cmNlIDoKLTxwPmFhY2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDhdIChhYWNjYykKLVs4LCAxMl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzgsIDEyXSAoPC9wPikKLS0tLS0jdGV4dChhYSlAWzMsNV0oWzMsIDhdIChhYWNjYykpCi0tLS0tI3RleHQoY2NjKUBbNSw4XShbMywgOF0gKGFhY2NjKSkKLQotU291cmNlIDoKLTxwPmFhPGI+YmJiYjwvYj5jY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNV0gKGFhKQotWzUsIDhdICg8Yj4pCi1bOCwgMTJdIChiYmJiKQotWzEyLCAxNl0gKDwvYj4pCi1bMTYsIDE5XSAoY2NjKQotWzE5LCAyM10gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzE5LCAyM10gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLCA1XSAoYWEpCi0tLS0tYi9iQFs1LCA4XSAoPGI+KUBbMTIsIDE2XSAoPC9iPikKLS0tLS0tLSN0ZXh0KGJiYmIpQFs4LCAxMl0gKGJiYmIpCi0tLS0tI3RleHQoY2NjKUBbMTYsIDE5XSAoY2NjKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q0LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2JiZjMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDQKLVNvdXJjZSA6Ci08cD48L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgN10gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzMsIDddICg8L3A+KQotLS0tLSN0ZXh0KCkKLQotU291cmNlIDoKLTxwPmFhYTwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA2XSAoYWFhKQotWzYsIDEwXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbNiwgMTBdICg8L3A+KQotLS0tLSN0ZXh0KGFhYSlAWzMsIDZdIChhYWEpCi0KLVNvdXJjZSA6Ci08cD48L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgN10gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzMsIDddICg8L3A+KQotLS0tLSN0ZXh0KCkKLQotU291cmNlIDoKLTxwPmNjY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgN10gKGNjY2MpCi1bNywgMTFdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs3LCAxMV0gKDwvcD4pCi0tLS0tI3RleHQoY2NjYylAWzMsIDddIChjY2NjKQotLS0tLSN0ZXh0KCkKLQotU291cmNlIDoKLTxwPmNjY2NhYWE8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgMTBdIChjY2NjYWFhKQotWzEwLCAxNF0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEwLCAxNF0gKDwvcD4pCi0tLS0tI3RleHQoY2NjYylAWzMsN10oWzMsIDEwXSAoY2NjY2FhYSkpCi0tLS0tI3RleHQoYWFhKUBbNywxMF0oWzMsIDEwXSAoY2NjY2FhYSkpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDUudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0NS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljZWRiNTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0NS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDUKLVNvdXJjZSA6Ci08cD5hYWJiYmJjY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgMTJdIChhYWJiYmJjY2MpCi1bMTIsIDE2XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTIsIDE2XSAoPC9wPikKLS0tLS0jdGV4dChhYWJiYmJjY2MpQFszLCAxMl0gKGFhYmJiYmNjYykKLQotU291cmNlIDoKLTxwPmFhYmJiYmNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCAxMl0gKGFhYmJiYmNjYykKLVsxMiwgMTZdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMiwgMTZdICg8L3A+KQotLS0tLSN0ZXh0KGFhYmJiYilAWzMsOV0oWzMsIDEyXSAoYWFiYmJiY2NjKSkKLS0tLS0jdGV4dChjY2MpQFs5LDEyXShbMywgMTJdIChhYWJiYmJjY2MpKQotCi1Tb3VyY2UgOgotPHA+YWFiYmJiPGJyPmNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA5XSAoYWFiYmJiKQotWzksIDEzXSAoPGJyPikKLVsxMywgMTZdIChjY2MpCi1bMTYsIDIwXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTYsIDIwXSAoPC9wPikKLS0tLS0jdGV4dChhYWJiYmIpQFszLCA5XSAoYWFiYmJiKQotLS0tLWJyQFs5LCAxM10gKDxicj4pCi0tLS0tI3RleHQoY2NjKUBbMTMsIDE2XSAoY2NjKQotCi1Tb3VyY2UgOgotPHA+YWFiYmJiPGJyPmNjY2Q8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgOV0gKGFhYmJiYikKLVs5LCAxM10gKDxicj4pCi1bMTMsIDE3XSAoY2NjZCkKLVsxNywgMjFdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxNywgMjFdICg8L3A+KQotLS0tLSN0ZXh0KGFhYmJiYilAWzMsIDldIChhYWJiYmIpCi0tLS0tYnJAWzksIDEzXSAoPGJyPikKLS0tLS0jdGV4dChjY2NkKUBbMTMsIDE3XSAoY2NjZCkKLQotU291cmNlIDoKLTxwPmFhYmJiYjxicj5jY2NkZTwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA5XSAoYWFiYmJiKQotWzksIDEzXSAoPGJyPikKLVsxMywgMThdIChjY2NkZSkKLVsxOCwgMjJdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxOCwgMjJdICg8L3A+KQotLS0tLSN0ZXh0KGFhYmJiYilAWzMsIDldIChhYWJiYmIpCi0tLS0tYnJAWzksIDEzXSAoPGJyPikKLS0tLS0jdGV4dChjY2NkZSlAWzEzLCAxOF0gKGNjY2RlKQotCi1Tb3VyY2UgOgotPHA+YWE8Yj5iYmJiPC9iPjxicj5jY2NkZTwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA1XSAoYWEpCi1bNSwgOF0gKDxiPikKLVs4LCAxMl0gKGJiYmIpCi1bMTIsIDE2XSAoPC9iPikKLVsxNiwgMjBdICg8YnI+KQotWzIwLCAyNV0gKGNjY2RlKQotWzI1LCAyOV0gKDwvcD4pCi0KLVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkNoZWNrZXIgOiB3YXJuaW5nIDogdmFpbgotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMjUsIDI5XSAoPC9wPikKLS0tLS0jdGV4dChhYSlAWzMsNV0oWzMsIDVdIChhYSkpCi0tLS0tYi9iQFs1LCA4XSAoPGI+KUBbMTIsIDE2XSAoPC9iPikKLS0tLS0tLSN0ZXh0KGJiYmIpQFs4LCAxMl0gKGJiYmIpCi0tLS0tYnJAWzE2LCAyMF0gKDxicj4pCi0tLS0tI3RleHQoY2NjZGUpQFsyMCwgMjVdIChjY2NkZSkKLQotU291cmNlIDoKLTxwPmFhPGI+YmJiYjwvYj48YnI+PGk+Y2NjPC9pPmRlPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDVdIChhYSkKLVs1LCA4XSAoPGI+KQotWzgsIDEyXSAoYmJiYikKLVsxMiwgMTZdICg8L2I+KQotWzE2LCAyMF0gKDxicj4pCi1bMjAsIDIzXSAoPGk+KQotWzIzLCAyNl0gKGNjYykKLVsyNiwgMzBdICg8L2k+KQotWzMwLCAzMl0gKGRlKQotWzMyLCAzNl0gKDwvcD4pCi0KLVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkNoZWNrZXIgOiB3YXJuaW5nIDogdmFpbgotU3RydWN0dXJlZERvY3VtZW50UmVnaW9uQ2hlY2tlciA6IHdhcm5pbmcgOiB2YWluCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFszMiwgMzZdICg8L3A+KQotLS0tLSN0ZXh0KGFhKUBbMyw1XShbMywgNV0gKGFhKSkKLS0tLS1iL2JAWzUsIDhdICg8Yj4pQFsxMiwgMTZdICg8L2I+KQotLS0tLS0tI3RleHQoYmJiYilAWzgsIDEyXSAoYmJiYikKLS0tLS1ickBbMTYsIDIwXSAoPGJyPikKLS0tLS1pL2lAWzIwLCAyM10gKDxpPilAWzI2LCAzMF0gKDwvaT4pCi0tLS0tLS0jdGV4dChjY2MpQFsyMywgMjZdIChjY2MpCi0tLS0tI3RleHQoZGUpQFszMCwzMl0oWzMwLCAzMl0gKGRlKSkKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0Ni50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q2LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkxNzVmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q2LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q2Ci1Tb3VyY2UgOgotPHA+YWFiYmJiY2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDEyXSAoYWFiYmJiY2NjKQotWzEyLCAxNl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEyLCAxNl0gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLDVdKFszLCAxMl0gKGFhYmJiYmNjYykpCi0tLS0tI3RleHQoYmJiYilAWzUsOV0oWzMsIDEyXSAoYWFiYmJiY2NjKSkKLS0tLS0jdGV4dChjY2MpQFs5LDEyXShbMywgMTJdIChhYWJiYmJjY2MpKQotCi1Tb3VyY2UgOgotPHA+YWFiYmJiZGNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCAxM10gKGFhYmJiYmRjY2MpCi1bMTMsIDE3XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTMsIDE3XSAoPC9wPikKLS0tLS0jdGV4dChhYSlAWzMsNV0oWzMsIDEzXSAoYWFiYmJiZGNjYykpCi0tLS0tI3RleHQoYmJiYmQpQFs1LDEwXShbMywgMTNdIChhYWJiYmJkY2NjKSkKLS0tLS0jdGV4dChjY2MpQFsxMCwxM10oWzMsIDEzXSAoYWFiYmJiZGNjYykpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDcudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0Ny50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmMzllNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0Ny50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0NwotU291cmNlIDoKLTxwPmFhYWFiYmJiPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDExXSAoYWFhYWJiYmIpCi1bMTEsIDE1XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTEsIDE1XSAoPC9wPikKLS0tLS0jdGV4dChhYWFhKUBbMyw3XShbMywgMTFdIChhYWFhYmJiYikpCi0tLS0tI3RleHQoYmJiYilAWzcsMTFdKFszLCAxMV0gKGFhYWFiYmJiKSkKLQotU291cmNlIDoKLTxwPmFhYWJiPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDhdIChhYWFiYikKLVs4LCAxMl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzgsIDEyXSAoPC9wPikKLS0tLS0jdGV4dChhYWFiYilAWzMsIDhdIChhYWFiYikKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0OC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q4LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU0ZTc4My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q4LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q4Ci1Tb3VyY2UgOgotPHA+YWFhYWJiYmI8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgMTFdIChhYWFhYmJiYikKLVsxMSwgMTVdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMSwgMTVdICg8L3A+KQotLS0tLSN0ZXh0KGFhYWEpQFszLDddKFszLCAxMV0gKGFhYWFiYmJiKSkKLS0tLS0jdGV4dChiYmJiKUBbNywxMV0oWzMsIDExXSAoYWFhYWJiYmIpKQotCi1Tb3VyY2UgOgotPHA+YWI8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNV0gKGFiKQotWzUsIDldICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs1LCA5XSAoPC9wPikKLS0tLS0jdGV4dChhYilAWzMsIDVdIChhYikKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UYWJsZVRlc3QudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UYWJsZVRlc3QudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODRlYmRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGFibGVUZXN0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UYWJsZVRlc3QKLVNvdXJjZSA6Ci08aHRtbD48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8aHRtbD4pCi1bNiwgMTNdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1odG1sL2h0bWxAWzAsIDZdICg8aHRtbD4pQFs2LCAxM10gKDwvaHRtbD4pCi0KLVNvdXJjZSA6Ci08aHRtbD48Ym9keT48L2JvZHk+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPGh0bWw+KQotWzYsIDEyXSAoPGJvZHk+KQotWzEyLCAxOV0gKDwvYm9keT4pCi1bMTksIDI2XSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0taHRtbC9odG1sQFswLCA2XSAoPGh0bWw+KUBbMTksIDI2XSAoPC9odG1sPikKLS0tLS1ib2R5L2JvZHlAWzYsIDEyXSAoPGJvZHk+KUBbMTIsIDE5XSAoPC9ib2R5PikKLQotU291cmNlIDoKLTxodG1sPjxib2R5Pjx0YWJsZSBib3JkZXI9IjEiPjx0cj48dGQ+PC90ZD48dGQ+PC90ZD48L3RyPjx0cj48dGQ+PC90ZD48dGQ+PC90ZD48L3RyPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxodG1sPikKLVs2LCAxMl0gKDxib2R5PikKLVsxMiwgMzBdICg8dGFibGUgYm9yZGVyPSIxIj4pCi1bMzAsIDM0XSAoPHRyPikKLVszNCwgMzhdICg8dGQ+KQotWzM4LCA0M10gKDwvdGQ+KQotWzQzLCA0N10gKDx0ZD4pCi1bNDcsIDUyXSAoPC90ZD4pCi1bNTIsIDU3XSAoPC90cj4pCi1bNTcsIDYxXSAoPHRyPikKLVs2MSwgNjVdICg8dGQ+KQotWzY1LCA3MF0gKDwvdGQ+KQotWzcwLCA3NF0gKDx0ZD4pCi1bNzQsIDc5XSAoPC90ZD4pCi1bNzksIDg0XSAoPC90cj4pCi1bODQsIDkyXSAoPC90YWJsZT4pCi1bOTIsIDk5XSAoPC9ib2R5PikKLVs5OSwgMTA2XSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0taHRtbC9odG1sQFswLCA2XSAoPGh0bWw+KUBbOTksIDEwNl0gKDwvaHRtbD4pCi0tLS0tYm9keS9ib2R5QFs2LCAxMl0gKDxib2R5PilAWzkyLCA5OV0gKDwvYm9keT4pCi0tLS0tLS10YWJsZS90YWJsZUBbMTIsIDMwXSAoPHRhYmxlIGJvcmRlciYjNjE7IjEiPilAWzg0LCA5Ml0gKDwvdGFibGU+KQotLS0tLS0tLS10ci90ckBbMzAsIDM0XSAoPHRyPilAWzUyLCA1N10gKDwvdHI+KQotLS0tLS0tLS0tLXRkL3RkQFszNCwgMzhdICg8dGQ+KUBbMzgsIDQzXSAoPC90ZD4pCi0tLS0tLS0tLS0tdGQvdGRAWzQzLCA0N10gKDx0ZD4pQFs0NywgNTJdICg8L3RkPikKLS0tLS0tLS0tdHIvdHJAWzU3LCA2MV0gKDx0cj4pQFs3OSwgODRdICg8L3RyPikKLS0tLS0tLS0tLS10ZC90ZEBbNjEsIDY1XSAoPHRkPilAWzY1LCA3MF0gKDwvdGQ+KQotLS0tLS0tLS0tLXRkL3RkQFs3MCwgNzRdICg8dGQ+KUBbNzQsIDc5XSAoPC90ZD4pCi0KLVNvdXJjZSA6Ci08aHRtbD48Ym9keT48dGFibGUgYm9yZGVyPSIxIj48dHI+PHRkPjwvdGQ+PHRkPjwvdGQ+PC90cj48dHI+PHRkPjwvdGQ+PHRkPjxmb250IGNvbG9yPSJyZWQiPnRleHQ8L2ZvbnQ+PC90ZD48L3RyPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxodG1sPikKLVs2LCAxMl0gKDxib2R5PikKLVsxMiwgMzBdICg8dGFibGUgYm9yZGVyPSIxIj4pCi1bMzAsIDM0XSAoPHRyPikKLVszNCwgMzhdICg8dGQ+KQotWzM4LCA0M10gKDwvdGQ+KQotWzQzLCA0N10gKDx0ZD4pCi1bNDcsIDUyXSAoPC90ZD4pCi1bNTIsIDU3XSAoPC90cj4pCi1bNTcsIDYxXSAoPHRyPikKLVs2MSwgNjVdICg8dGQ+KQotWzY1LCA3MF0gKDwvdGQ+KQotWzcwLCA3NF0gKDx0ZD4pCi1bNzQsIDkyXSAoPGZvbnQgY29sb3I9InJlZCI+KQotWzkyLCA5Nl0gKHRleHQpCi1bOTYsIDEwM10gKDwvZm9udD4pCi1bMTAzLCAxMDhdICg8L3RkPikKLVsxMDgsIDExM10gKDwvdHI+KQotWzExMywgMTIxXSAoPC90YWJsZT4pCi1bMTIxLCAxMjhdICg8L2JvZHk+KQotWzEyOCwgMTM1XSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0taHRtbC9odG1sQFswLCA2XSAoPGh0bWw+KUBbMTI4LCAxMzVdICg8L2h0bWw+KQotLS0tLWJvZHkvYm9keUBbNiwgMTJdICg8Ym9keT4pQFsxMjEsIDEyOF0gKDwvYm9keT4pCi0tLS0tLS10YWJsZS90YWJsZUBbMTIsIDMwXSAoPHRhYmxlIGJvcmRlciYjNjE7IjEiPilAWzExMywgMTIxXSAoPC90YWJsZT4pCi0tLS0tLS0tLXRyL3RyQFszMCwgMzRdICg8dHI+KUBbNTIsIDU3XSAoPC90cj4pCi0tLS0tLS0tLS0tdGQvdGRAWzM0LCAzOF0gKDx0ZD4pQFszOCwgNDNdICg8L3RkPikKLS0tLS0tLS0tLS10ZC90ZEBbNDMsIDQ3XSAoPHRkPilAWzQ3LCA1Ml0gKDwvdGQ+KQotLS0tLS0tLS10ci90ckBbNTcsIDYxXSAoPHRyPilAWzEwOCwgMTEzXSAoPC90cj4pCi0tLS0tLS0tLS0tdGQvdGRAWzYxLCA2NV0gKDx0ZD4pQFs2NSwgNzBdICg8L3RkPikKLS0tLS0tLS0tLS10ZC90ZEBbNzAsIDc0XSAoPHRkPilAWzEwMywgMTA4XSAoPC90ZD4pCi0tLS0tLS0tLS0tLS1mb250L2ZvbnRAWzc0LCA5Ml0gKDxmb250IGNvbG9yJiM2MTsicmVkIj4pQFs5NiwgMTAzXSAoPC9mb250PikKLS0tLS0tLS0tLS0tLS0tI3RleHQodGV4dClAWzkyLCA5Nl0gKHRleHQpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGV4dFRlc3QudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4OTJjZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdAotU291cmNlIDoKLTxhPmhlbGxvICZhbXA7bHQ7PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDldIChoZWxsbyApCi1bOSwgMTRdICgmYW1wOykKLVsxNCwgMTddIChsdDspCi1bMTcsIDIxXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMTcsIDIxXSAoPC9hPikKLS0tLS0jdGV4dChoZWxsbyAmbHQ7KUB7WzMsIDldIChoZWxsbyApLFs5LCAxNF0gKCZhbXA7KSxbMTQsIDE3XSAobHQ7KX0KLQotaGVsbG8gJmx0OwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdDIudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdDIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjJiYTUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGV4dFRlc3QyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRleHRUZXN0MgotU291cmNlIDoKLTxhPmhlbGxvICZhbXA7bHQ7PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDldIChoZWxsbyApCi1bOSwgMTRdICgmYW1wOykKLVsxNCwgMTddIChsdDspCi1bMTcsIDIxXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMTcsIDIxXSAoPC9hPikKLS0tLS0jdGV4dChoZWxsbyAmbHQ7KUB7WzMsIDldIChoZWxsbyApLFs5LCAxNF0gKCZhbXA7KSxbMTQsIDE3XSAobHQ7KX0KLQotaGVsbG8gJmx0OwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdDMudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdDMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjA0YTNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGV4dFRlc3QzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRleHRUZXN0MwotSW52YWxpZCBjaGFyYWN0ZXIgKCc8JykgZm91bmQKLVNvdXJjZSA6Ci08YT50ZXh0PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDddICh0ZXh0KQotWzcsIDExXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbNywgMTFdICg8L2E+KQotLS0tLSN0ZXh0KHRleHQpQFszLCA3XSAodGV4dCkKLQotU291cmNlIDoKLTxhPmhlbGxvICZsdDs8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgOV0gKGhlbGxvICkKLVs5LCAxM10gKCZsdDspCi1bMTMsIDE3XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMTMsIDE3XSAoPC9hPikKLS0tLS0jdGV4dChoZWxsbyA8KUB7WzMsIDldIChoZWxsbyApLFs5LCAxM10gKCZsdDspfQotCi1JbnZhbGlkIGNoYXJhY3RlciAoJyYnKSBmb3VuZAotU291cmNlIDoKLTxhPmhlbGxvICZsdDs8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgOV0gKGhlbGxvICkKLVs5LCAxM10gKCZsdDspCi1bMTMsIDE3XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMTMsIDE3XSAoPC9hPikKLS0tLS0jdGV4dChoZWxsbyA8KUB7WzMsIDldIChoZWxsbyApLFs5LCAxM10gKCZsdDspfQotCi1Tb3VyY2UgOgotPGE+aGVsbG8gJiM2NTs8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgOV0gKGhlbGxvICkKLVs5LCAxNF0gKCYjNjU7KQotWzE0LCAxOF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzE0LCAxOF0gKDwvYT4pCi0tLS0tI3RleHQoaGVsbG8gQSlAe1szLCA5XSAoaGVsbG8gKSxbOSwgMTRdICgmIzY1Oyl9Ci0KLUludmFsaWQgY2hhcmFjdGVyICgnJicpIGZvdW5kCi1Tb3VyY2UgOgotPGE+aGVsbG8gJiM2NTs8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgOV0gKGhlbGxvICkKLVs5LCAxNF0gKCYjNjU7KQotWzE0LCAxOF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzE0LCAxOF0gKDwvYT4pCi0tLS0tI3RleHQoaGVsbG8gQSlAe1szLCA5XSAoaGVsbG8gKSxbOSwgMTRdICgmIzY1Oyl9Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5ZmU5ODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxOTcgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QKLVNvdXJjZSA6Ci08aHRtbD48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8aHRtbD4pCi1bNiwgMTNdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1odG1sL2h0bWxAWzAsIDZdICg8aHRtbD4pQFs2LCAxM10gKDwvaHRtbD4pCi0KLVNvdXJjZSA6Ci08aHRtbD48Ym9keT48L2JvZHk+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPGh0bWw+KQotWzYsIDEyXSAoPGJvZHk+KQotWzEyLCAxOV0gKDwvYm9keT4pCi1bMTksIDI2XSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0taHRtbC9odG1sQFswLCA2XSAoPGh0bWw+KUBbMTksIDI2XSAoPC9odG1sPikKLS0tLS1ib2R5L2JvZHlAWzYsIDEyXSAoPGJvZHk+KUBbMTIsIDE5XSAoPC9ib2R5PikKLQotU291cmNlIDoKLTxodG1sPjxib2R5PjxwPjwvcD48L2JvZHk+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPGh0bWw+KQotWzYsIDEyXSAoPGJvZHk+KQotWzEyLCAxNV0gKDxwPikKLVsxNSwgMTldICg8L3A+KQotWzE5LCAyNl0gKDwvYm9keT4pCi1bMjYsIDMzXSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0taHRtbC9odG1sQFswLCA2XSAoPGh0bWw+KUBbMjYsIDMzXSAoPC9odG1sPikKLS0tLS1ib2R5L2JvZHlAWzYsIDEyXSAoPGJvZHk+KUBbMTksIDI2XSAoPC9ib2R5PikKLS0tLS0tLXAvcEBbMTIsIDE1XSAoPHA+KUBbMTUsIDE5XSAoPC9wPikKLQotU291cmNlIDoKLTxodG1sPjxib2R5PjxwPnRleHQ8L3A+PC9ib2R5PjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxodG1sPikKLVs2LCAxMl0gKDxib2R5PikKLVsxMiwgMTVdICg8cD4pCi1bMTUsIDE5XSAodGV4dCkKLVsxOSwgMjNdICg8L3A+KQotWzIzLCAzMF0gKDwvYm9keT4pCi1bMzAsIDM3XSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0taHRtbC9odG1sQFswLCA2XSAoPGh0bWw+KUBbMzAsIDM3XSAoPC9odG1sPikKLS0tLS1ib2R5L2JvZHlAWzYsIDEyXSAoPGJvZHk+KUBbMjMsIDMwXSAoPC9ib2R5PikKLS0tLS0tLXAvcEBbMTIsIDE1XSAoPHA+KUBbMTksIDIzXSAoPC9wPikKLS0tLS0tLS0tI3RleHQodGV4dClAWzE1LCAxOV0gKHRleHQpCi0KLVNvdXJjZSA6Ci08aHRtbD48Ym9keT48cD48YnI+dGV4dDwvcD48L2JvZHk+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPGh0bWw+KQotWzYsIDEyXSAoPGJvZHk+KQotWzEyLCAxNV0gKDxwPikKLVsxNSwgMTldICg8YnI+KQotWzE5LCAyM10gKHRleHQpCi1bMjMsIDI3XSAoPC9wPikKLVsyNywgMzRdICg8L2JvZHk+KQotWzM0LCA0MV0gKDwvaHRtbD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWh0bWwvaHRtbEBbMCwgNl0gKDxodG1sPilAWzM0LCA0MV0gKDwvaHRtbD4pCi0tLS0tYm9keS9ib2R5QFs2LCAxMl0gKDxib2R5PilAWzI3LCAzNF0gKDwvYm9keT4pCi0tLS0tLS1wL3BAWzEyLCAxNV0gKDxwPilAWzIzLCAyN10gKDwvcD4pCi0tLS0tLS0tLWJyQFsxNSwgMTldICg8YnI+KQotLS0tLS0tLS0jdGV4dCh0ZXh0KUBbMTksIDIzXSAodGV4dCkKLQotU291cmNlIDoKLTxodG1sPjxib2R5PjxwPjxicj50ZXh0PGltZz48L3A+PC9ib2R5PjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxodG1sPikKLVs2LCAxMl0gKDxib2R5PikKLVsxMiwgMTVdICg8cD4pCi1bMTUsIDE5XSAoPGJyPikKLVsxOSwgMjNdICh0ZXh0KQotWzIzLCAyOF0gKDxpbWc+KQotWzI4LCAzMl0gKDwvcD4pCi1bMzIsIDM5XSAoPC9ib2R5PikKLVszOSwgNDZdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1odG1sL2h0bWxAWzAsIDZdICg8aHRtbD4pQFszOSwgNDZdICg8L2h0bWw+KQotLS0tLWJvZHkvYm9keUBbNiwgMTJdICg8Ym9keT4pQFszMiwgMzldICg8L2JvZHk+KQotLS0tLS0tcC9wQFsxMiwgMTVdICg8cD4pQFsyOCwgMzJdICg8L3A+KQotLS0tLS0tLS1ickBbMTUsIDE5XSAoPGJyPikKLS0tLS0tLS0tI3RleHQodGV4dClAWzE5LCAyM10gKHRleHQpCi0tLS0tLS0tLWltZ0BbMjMsIDI4XSAoPGltZz4pCi0KLVNvdXJjZSA6Ci08aHRtbD48Ym9keT48cD48YnI+PGltZz48L3A+PC9ib2R5PjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxodG1sPikKLVs2LCAxMl0gKDxib2R5PikKLVsxMiwgMTVdICg8cD4pCi1bMTUsIDE5XSAoPGJyPikKLVsxOSwgMjRdICg8aW1nPikKLVsyNCwgMjhdICg8L3A+KQotWzI4LCAzNV0gKDwvYm9keT4pCi1bMzUsIDQyXSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0taHRtbC9odG1sQFswLCA2XSAoPGh0bWw+KUBbMzUsIDQyXSAoPC9odG1sPikKLS0tLS1ib2R5L2JvZHlAWzYsIDEyXSAoPGJvZHk+KUBbMjgsIDM1XSAoPC9ib2R5PikKLS0tLS0tLXAvcEBbMTIsIDE1XSAoPHA+KUBbMjQsIDI4XSAoPC9wPikKLS0tLS0tLS0tYnJAWzE1LCAxOV0gKDxicj4pCi0tLS0tLS0tLWltZ0BbMTksIDI0XSAoPGltZz4pCi0KLVNvdXJjZSA6Ci08aHRtbD48Ym9keT48cD48YnI+dGV4dDxpbWc+PC9wPjwvYm9keT48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8aHRtbD4pCi1bNiwgMTJdICg8Ym9keT4pCi1bMTIsIDE1XSAoPHA+KQotWzE1LCAxOV0gKDxicj4pCi1bMTksIDIzXSAodGV4dCkKLVsyMywgMjhdICg8aW1nPikKLVsyOCwgMzJdICg8L3A+KQotWzMyLCAzOV0gKDwvYm9keT4pCi1bMzksIDQ2XSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0taHRtbC9odG1sQFswLCA2XSAoPGh0bWw+KUBbMzksIDQ2XSAoPC9odG1sPikKLS0tLS1ib2R5L2JvZHlAWzYsIDEyXSAoPGJvZHk+KUBbMzIsIDM5XSAoPC9ib2R5PikKLS0tLS0tLXAvcEBbMTIsIDE1XSAoPHA+KUBbMjgsIDMyXSAoPC9wPikKLS0tLS0tLS0tYnJAWzE1LCAxOV0gKDxicj4pCi0tLS0tLS0tLSN0ZXh0KHRleHQpQFsxOSwgMjNdICh0ZXh0KQotLS0tLS0tLS1pbWdAWzIzLCAyOF0gKDxpbWc+KQotCi1Tb3VyY2UgOgotPGh0bWw+PGJvZHk+PC9ib2R5PjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxodG1sPikKLVs2LCAxMl0gKDxib2R5PikKLVsxMiwgMTldICg8L2JvZHk+KQotWzE5LCAyNl0gKDwvaHRtbD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWh0bWwvaHRtbEBbMCwgNl0gKDxodG1sPilAWzE5LCAyNl0gKDwvaHRtbD4pCi0tLS0tYm9keS9ib2R5QFs2LCAxMl0gKDxib2R5PilAWzEyLCAxOV0gKDwvYm9keT4pCi0KLVNvdXJjZSA6Ci08aHRtbD48Ym9keT48cD48YnI+dGV4dDxpbWc+PC9wPjwvYm9keT48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8aHRtbD4pCi1bNiwgMTJdICg8Ym9keT4pCi1bMTIsIDE1XSAoPHA+KQotWzE1LCAxOV0gKDxicj4pCi1bMTksIDIzXSAodGV4dCkKLVsyMywgMjhdICg8aW1nPikKLVsyOCwgMzJdICg8L3A+KQotWzMyLCAzOV0gKDwvYm9keT4pCi1bMzksIDQ2XSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0taHRtbC9odG1sQFswLCA2XSAoPGh0bWw+KUBbMzksIDQ2XSAoPC9odG1sPikKLS0tLS1ib2R5L2JvZHlAWzYsIDEyXSAoPGJvZHk+KUBbMzIsIDM5XSAoPC9ib2R5PikKLS0tLS0tLXAvcEBbMTIsIDE1XSAoPHA+KUBbMjgsIDMyXSAoPC9wPikKLS0tLS0tLS0tYnJAWzE1LCAxOV0gKDxicj4pCi0tLS0tLS0tLSN0ZXh0KHRleHQpQFsxOSwgMjNdICh0ZXh0KQotLS0tLS0tLS1pbWdAWzIzLCAyOF0gKDxpbWc+KQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTAudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDEwLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhmN2RhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTAudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMAotU291cmNlIDoKLTxhIGI9ImMiPjxiPjwvYj48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDldICg8YSBiPSJjIj4pCi1bOSwgMTJdICg8Yj4pCi1bMTIsIDE2XSAoPC9iPikKLVsxNiwgMjBdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDldICg8YSBiJiM2MTsiYyI+KUBbMTYsIDIwXSAoPC9hPikKLS0tLS1iL2JAWzksIDEyXSAoPGI+KUBbMTIsIDE2XSAoPC9iPikKLQotSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjoKLTxiPgotMCg8KXRydWUKLTAoYil0cnVlCi0wKD4pdHJ1ZQotCi1Tb3VyY2UgOgotPGEgYj0iYyI+PGIgYz0iZCI+PC9iPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgOV0gKDxhIGI9ImMiPikKLVs5LCAxOF0gKDxiIGM9ImQiPikKLVsxOCwgMjJdICg8L2I+KQotWzIyLCAyNl0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgOV0gKDxhIGImIzYxOyJjIj4pQFsyMiwgMjZdICg8L2E+KQotLS0tLWIvYkBbOSwgMThdICg8YiBjJiM2MTsiZCI+KUBbMTgsIDIyXSAoPC9iPikKLQotSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjoKLTxiIGM9ImQiPgotMCg8KXRydWUKLTAoYil0cnVlCi0wKGMpdHJ1ZQotMCg9KXRydWUKLTAoImQiKXRydWUKLTAoPil0cnVlCi0KLVNvdXJjZSA6Ci08YSBiPSJjZCI+PGIgYz0iZCI+PC9iPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMTBdICg8YSBiPSJjZCI+KQotWzEwLCAxOV0gKDxiIGM9ImQiPikKLVsxOSwgMjNdICg8L2I+KQotWzIzLCAyN10gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgMTBdICg8YSBiJiM2MTsiY2QiPilAWzIzLCAyN10gKDwvYT4pCi0tLS0tYi9iQFsxMCwgMTldICg8YiBjJiM2MTsiZCI+KUBbMTksIDIzXSAoPC9iPikKLQotSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjoKLTxiIGM9ImQiPgotMCg8KXRydWUKLTAoYil0cnVlCi0wKGMpdHJ1ZQotMCg9KXRydWUKLTAoImQiKXRydWUKLTAoPil0cnVlCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMS50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTEudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTg4Y2IzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDExCi1Tb3VyY2UgOgotPGE+YjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoYikKLVs0LCA4XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbNCwgOF0gKDwvYT4pCi0tLS0tI3RleHQoYilAWzMsIDRdIChiKQotCi1Tb3VyY2UgOgotPGE+YjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoYikKLVs0LCA4XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbNCwgOF0gKDwvYT4pCi0tLS0tI3RleHQoYilAWzMsIDRdIChiKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTIudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDEyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODExYThmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMgotU291cmNlIDoKLTxhPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA3XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMywgN10gKDwvYT4pCi0KLVNvdXJjZSA6Ci08YT48L2E+PGE+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDddICg8L2E+KQotWzcsIDEwXSAoPGE+KQotWzEwLCAxNF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzMsIDddICg8L2E+KQotLS1hL2FAWzcsIDEwXSAoPGE+KUBbMTAsIDE0XSAoPC9hPikKLQotU291cmNlIDoKLTxhPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA3XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMywgN10gKDwvYT4pCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMy50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODU0ZjdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDEzCi1Tb3VyY2UgOgotPGE+Ci08Yj4KLTwvYj4gIDwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA1XSAoCi0pCi1bNSwgOF0gKDxiPikKLVs4LCAxMF0gKAotKQotWzEwLCAxNF0gKDwvYj4pCi1bMTQsIDE2XSAoICApCi1bMTYsIDIwXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMTYsIDIwXSAoPC9hPikKLS0tLS0jdGV4dChcclxuKUBbMywgNV0gKFxyXG4pCi0tLS0tYi9iQFs1LCA4XSAoPGI+KUBbMTAsIDE0XSAoPC9iPikKLS0tLS0tLSN0ZXh0KFxyXG4pQFs4LCAxMF0gKFxyXG4pCi0tLS0tI3RleHQoICApQFsxNCwgMTZdICggICkKLQotU291cmNlIDoKLTxhPgotICA8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgN10gKAotICApCi1bNywgMTFdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFs3LCAxMV0gKDwvYT4pCi0tLS0tI3RleHQoXHJcbilAWzMsNV0oWzMsIDddIChcclxuICApKQotLS0tLSN0ZXh0KCAgKUBbNSw3XShbMywgN10gKFxyXG4gICkpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxNC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTZkNWI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxNC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDE0Ci1Tb3VyY2UgOgotPCU9IGFhYWEgJT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMV0gKDwpCi1bMSwgNF0gKCU9ICkKLVs0LCA5XSAoYWFhYSApCi1bOSwgMTBdICglKQotWzEwLCAxMV0gKD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLSN0ZXh0KDwlJiM2MTsgYWFhYSAlPilAe1swLCAxXSAoPCksWzEsIDRdICglJiM2MTsgKSxbNCwgOV0gKGFhYWEgKSxbOSwgMTBdICglKSxbMTAsIDExXSAoPil9Ci0KLVNvdXJjZSA6Ci08JSA9IGFhYWEgJT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMV0gKDwpCi1bMSwgNV0gKCUgPSApCi1bNSwgMTBdIChhYWFhICkKLVsxMCwgMTFdICglKQotWzExLCAxMl0gKD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLSN0ZXh0KDwlICYjNjE7IGFhYWEgJT4pQHtbMCwgMV0gKDwpLFsxLCA1XSAoJSAmIzYxOyApLFs1LCAxMF0gKGFhYWEgKSxbMTAsIDExXSAoJSksWzExLCAxMl0gKD4pfQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0Mi50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0Mi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0ZGNmMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MgotU291cmNlIDoKLTxIVE1MPgotPEhFQUQ+PC9IRUFEPgotPEJPRFk+PC9CT0RZPgotPC9IVE1MPgotCi0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8SFRNTD4pCi1bNiwgOF0gKAotKQotWzgsIDE0XSAoPEhFQUQ+KQotWzE0LCAyMV0gKDwvSEVBRD4pCi1bMjEsIDIzXSAoCi0pCi1bMjMsIDI5XSAoPEJPRFk+KQotWzI5LCAzNl0gKDwvQk9EWT4pCi1bMzYsIDM4XSAoCi0pCi1bMzgsIDQ1XSAoPC9IVE1MPikKLVs0NSwgNDddICgKLSkKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tSFRNTC9IVE1MQFswLCA2XSAoPEhUTUw+KUBbMzgsIDQ1XSAoPC9IVE1MPikKLS0tLS0jdGV4dChcclxuKUBbNiwgOF0gKFxyXG4pCi0tLS0tSEVBRC9IRUFEQFs4LCAxNF0gKDxIRUFEPilAWzE0LCAyMV0gKDwvSEVBRD4pCi0tLS0tI3RleHQoXHJcbilAWzIxLCAyM10gKFxyXG4pCi0tLS0tQk9EWS9CT0RZQFsyMywgMjldICg8Qk9EWT4pQFsyOSwgMzZdICg8L0JPRFk+KQotLS0tLSN0ZXh0KFxyXG4pQFszNiwgMzhdIChcclxuKQotLS0jdGV4dChcclxuKUBbNDUsIDQ3XSAoXHJcbikKLQotU291cmNlIDoKLTxIVE1MPgotPEhFQUQ+Ci08bWV0YSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IlVwZGF0ZXIgVGVzdCAyIj4KLTwvSEVBRD4KLTxCT0RZPjwvQk9EWT4KLTwvSFRNTD4KLQotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPEhUTUw+KQotWzYsIDhdICgKLSkKLVs4LCAxNF0gKDxIRUFEPikKLVsxNCwgMTZdICgKLSkKLVsxNiwgNjRdICg8bWV0YSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IlVwZGF0ZXIgVGVzdCAyIj4pCi1bNjQsIDY2XSAoCi0pCi1bNjYsIDczXSAoPC9IRUFEPikKLVs3MywgNzVdICgKLSkKLVs3NSwgODFdICg8Qk9EWT4pCi1bODEsIDg4XSAoPC9CT0RZPikKLVs4OCwgOTBdICgKLSkKLVs5MCwgOTddICg8L0hUTUw+KQotWzk3LCA5OV0gKAotKQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1IVE1ML0hUTUxAWzAsIDZdICg8SFRNTD4pQFs5MCwgOTddICg8L0hUTUw+KQotLS0tLSN0ZXh0KFxyXG4pQFs2LCA4XSAoXHJcbikKLS0tLS1IRUFEL0hFQURAWzgsIDE0XSAoPEhFQUQ+KUBbNjYsIDczXSAoPC9IRUFEPikKLS0tLS0tLSN0ZXh0KFxyXG4pQFsxNCwgMTZdIChcclxuKQotLS0tLS0tbWV0YUBbMTYsIDY0XSAoPG1ldGEgbmFtZSYjNjE7IkdFTkVSQVRPUiIgY29udGVudCYjNjE7IlVwZGF0ZXIgVGVzdCAyIj4pCi0tLS0tLS0jdGV4dChcclxuKUBbNjQsIDY2XSAoXHJcbikKLS0tLS0jdGV4dChcclxuKUBbNzMsIDc1XSAoXHJcbikKLS0tLS1CT0RZL0JPRFlAWzc1LCA4MV0gKDxCT0RZPilAWzgxLCA4OF0gKDwvQk9EWT4pCi0tLS0tI3RleHQoXHJcbilAWzg4LCA5MF0gKFxyXG4pCi0tLSN0ZXh0KFxyXG4pQFs5NywgOTldIChcclxuKQotCi1Tb3VyY2UgOgotPEhUTUw+Ci08SEVBRD4KLTxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iVXBkYXRlciBUZXN0IDIiPgotPHRpdGxlPjwvdGl0bGU+PC9IRUFEPgotPEJPRFk+PC9CT0RZPgotPC9IVE1MPgotCi0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8SFRNTD4pCi1bNiwgOF0gKAotKQotWzgsIDE0XSAoPEhFQUQ+KQotWzE0LCAxNl0gKAotKQotWzE2LCA2NF0gKDxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iVXBkYXRlciBUZXN0IDIiPikKLVs2NCwgNjZdICgKLSkKLVs2NiwgNzNdICg8dGl0bGU+KQotWzczLCA4MV0gKDwvdGl0bGU+KQotWzgxLCA4OF0gKDwvSEVBRD4pCi1bODgsIDkwXSAoCi0pCi1bOTAsIDk2XSAoPEJPRFk+KQotWzk2LCAxMDNdICg8L0JPRFk+KQotWzEwMywgMTA1XSAoCi0pCi1bMTA1LCAxMTJdICg8L0hUTUw+KQotWzExMiwgMTE0XSAoCi0pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLUhUTUwvSFRNTEBbMCwgNl0gKDxIVE1MPilAWzEwNSwgMTEyXSAoPC9IVE1MPikKLS0tLS0jdGV4dChcclxuKUBbNiwgOF0gKFxyXG4pCi0tLS0tSEVBRC9IRUFEQFs4LCAxNF0gKDxIRUFEPilAWzgxLCA4OF0gKDwvSEVBRD4pCi0tLS0tLS0jdGV4dChcclxuKUBbMTQsIDE2XSAoXHJcbikKLS0tLS0tLW1ldGFAWzE2LCA2NF0gKDxtZXRhIG5hbWUmIzYxOyJHRU5FUkFUT1IiIGNvbnRlbnQmIzYxOyJVcGRhdGVyIFRlc3QgMiI+KQotLS0tLS0tI3RleHQoXHJcbilAWzY0LCA2Nl0gKFxyXG4pCi0tLS0tLS10aXRsZS90aXRsZUBbNjYsIDczXSAoPHRpdGxlPilAWzczLCA4MV0gKDwvdGl0bGU+KQotLS0tLS0tLS0jdGV4dCgpCi0tLS0tI3RleHQoXHJcbilAWzg4LCA5MF0gKFxyXG4pCi0tLS0tQk9EWS9CT0RZQFs5MCwgOTZdICg8Qk9EWT4pQFs5NiwgMTAzXSAoPC9CT0RZPikKLS0tLS0jdGV4dChcclxuKUBbMTAzLCAxMDVdIChcclxuKQotLS0jdGV4dChcclxuKUBbMTEyLCAxMTRdIChcclxuKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0My50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0My50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhYzczYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QzCi1Tb3VyY2UgOgotPGE+PGI+PC9iPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA2XSAoPGI+KQotWzYsIDEwXSAoPC9iPikKLVsxMCwgMTRdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsxMCwgMTRdICg8L2E+KQotLS0tLWIvYkBbMywgNl0gKDxiPilAWzYsIDEwXSAoPC9iPikKLQotU291cmNlIDoKLTxhPgotPGI+PC9iPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoCi0pCi1bNCwgN10gKDxiPikKLVs3LCAxMV0gKDwvYj4pCi1bMTEsIDE1XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMTEsIDE1XSAoPC9hPikKLS0tLS0jdGV4dChcbilAWzMsIDRdIChcbikKLS0tLS1iL2JAWzQsIDddICg8Yj4pQFs3LCAxMV0gKDwvYj4pCi0KLVNvdXJjZSA6Ci08YT4KLTxiPjwvYj4KLTwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoCi0pCi1bNCwgN10gKDxiPikKLVs3LCAxMV0gKDwvYj4pCi1bMTEsIDEyXSAoCi0pCi1bMTIsIDE2XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMTIsIDE2XSAoPC9hPikKLS0tLS0jdGV4dChcbilAWzMsIDRdIChcbikKLS0tLS1iL2JAWzQsIDddICg8Yj4pQFs3LCAxMV0gKDwvYj4pCi0tLS0tI3RleHQoXG4pQFsxMSwgMTJdIChcbikKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDQudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTBkMDI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0NAotU291cmNlIDoKLTxhPmI8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNF0gKGIpCi1bNCwgOF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzQsIDhdICg8L2E+KQotLS0tLSN0ZXh0KGIpQFszLCA0XSAoYikKLQotU291cmNlIDoKLTxhPmI8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNF0gKGIpCi1bNCwgOF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzQsIDhdICg8L2E+KQotLS0tLSN0ZXh0KGIpQFszLCA0XSAoYikKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDUudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWUxM2VhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q1LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0NQotU291cmNlIDoKLTxhPiZhcG9zOzwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA5XSAoJmFwb3M7KQotWzksIDEzXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbOSwgMTNdICg8L2E+KQotLS0tLSN0ZXh0KCcpQFszLCA5XSAoJmFwb3M7KQotCi1Tb3VyY2UgOgotPGE+JmFwb3M7PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDldICgmYXBvczspCi1bOSwgMTNdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFs5LCAxM10gKDwvYT4pCi0tLS0tI3RleHQoJylAWzMsIDldICgmYXBvczspCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q2LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q2LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjljNGQ3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0Ni50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDYKLVNvdXJjZSA6Ci08YT5iPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDRdIChiKQotWzQsIDhdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFs0LCA4XSAoPC9hPikKLS0tLS0jdGV4dChiKUBbMywgNF0gKGIpCi0KLVNvdXJjZSA6Ci08YT48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgN10gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzMsIDddICg8L2E+KQotCi1Tb3VyY2UgOgotPGE+YjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoYikKLVs0LCA4XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbNCwgOF0gKDwvYT4pCi0tLS0tI3RleHQoYilAWzMsIDRdIChiKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0Ny50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0Ny50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNGE0ODcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDcudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q3Ci1Tb3VyY2UgOgotPFA+PEI+PC9CPjwvUD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxQPikKLVszLCA2XSAoPEI+KQotWzYsIDEwXSAoPC9CPikKLVsxMCwgMTRdICg8L1A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1QL1BAWzAsIDNdICg8UD4pQFsxMCwgMTRdICg8L1A+KQotLS0tLUIvQkBbMywgNl0gKDxCPilAWzYsIDEwXSAoPC9CPikKLQotU291cmNlIDoKLTxQPjxCPjwvQj48Qj48L0I+PC9QPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPFA+KQotWzMsIDZdICg8Qj4pCi1bNiwgMTBdICg8L0I+KQotWzEwLCAxM10gKDxCPikKLVsxMywgMTddICg8L0I+KQotWzE3LCAyMV0gKDwvUD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLVAvUEBbMCwgM10gKDxQPilAWzE3LCAyMV0gKDwvUD4pCi0tLS0tQi9CQFszLCA2XSAoPEI+KUBbNiwgMTBdICg8L0I+KQotLS0tLUIvQkBbMTAsIDEzXSAoPEI+KUBbMTMsIDE3XSAoPC9CPikKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDgudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDgudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWY2ZTMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q4LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0OAotU291cmNlIDoKLTxQPjwvUD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxQPikKLVszLCA3XSAoPC9QPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tUC9QQFswLCAzXSAoPFA+KUBbMywgN10gKDwvUD4pCi0KLVNvdXJjZSA6Ci08UD48L1A+PFA+PC9QPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPFA+KQotWzMsIDddICg8L1A+KQotWzcsIDEwXSAoPFA+KQotWzEwLCAxNF0gKDwvUD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLVAvUEBbMCwgM10gKDxQPilAWzMsIDddICg8L1A+KQotLS1QL1BAWzcsIDEwXSAoPFA+KUBbMTAsIDE0XSAoPC9QPikKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDkudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDkudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTRhOGFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q5LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0OQotU291cmNlIDoKLTxzdHlsZT48L3N0eWxlPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA3XSAoPHN0eWxlPikKLVs3LCAxNV0gKDwvc3R5bGU+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1zdHlsZS9zdHlsZUBbMCwgN10gKDxzdHlsZT4pQFs3LCAxNV0gKDwvc3R5bGU+KQotCi1Tb3VyY2UgOgotPHN0eWxlPnA8L3N0eWxlPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA3XSAoPHN0eWxlPikKLVs3LCA4XSAocCkKLVs4LCAxNl0gKDwvc3R5bGU+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1zdHlsZS9zdHlsZUBbMCwgN10gKDxzdHlsZT4pQFs4LCAxNl0gKDwvc3R5bGU+KQotLS0tLSN0ZXh0KHApQFs3LCA4XSAocCkKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9hTm90ZU9uUGFyc2VyUmVzdWx0c0RpcmVjdG9yaWVzLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvYU5vdGVPblBhcnNlclJlc3VsdHNEaXJlY3Rvcmllcy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMjQxODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9hTm90ZU9uUGFyc2VyUmVzdWx0c0RpcmVjdG9yaWVzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLVRoZXNlIG5vdGVzIHBlcnRhaW4gdG8gdGhlIHYyMDA0MTIxMF8yMzAwIHZlcnNpb24gCi1pbiBDVlMgcmVwb3NpdG9yeS4gCi0KLU5vdGUsIHRoZSAiMDUtMjQiIGRpcmVjdG9yeSAqc2hvdWxkKiBtYXRjaAotdGhlIHBhcnNlciByZXN1bHRzIGZyb20gcGFyc2VyIG9mIHNhbWUgZGF0ZSwgCi0qYnV0KiBhZnRlciB0cmFuc2l0aW9uIHRvIG9yZy5lY2xpcHNlLCBpdCBzZWVtcyAKLXRoZSBjYXNlIG9mIHRhZ3MgaXMgZGlmZmVyZW50LiBPZGRseSwgc2VlbXMgCi1saWtlIHRoZSBjdXJyZW50IHRyZWF0ZW1lbnQgb2YgY2FzZSBpcyBjb3JyZWN0LCAKLXNvIC4uLiAxMi0xMCBwYXJzZXIgcmVzdWx0cyBzaG91bGQgYmUgdXNlZCBhcyAKLXJlZmVyZW5jZSwgdW5sZXNzIHNvbWUgbmV3IGluc2lnaHQgaXMgZ2FpbmVkLiAKLUl0IGRvZXMgbWF0Y2ggcHJldmlvdXMgdmVyc2lvbiBleGNlcHQgZm9yIGNhc2UuIAotKEFuZCwgdGhlIHByZXZpb3VzIHZlcnNpb24gd2FzIGNoYW5nZWQgImJ5IGhhbmQiIAotdG8gYWNjb21pZGF0ZSB0aGUgdHJhbnNpdGlvbiB0byBvcmcuZWNsaXBzZSkuIAotCi1UT0RPOiB0aGlzIGZpbGUsIGFuZCAwNS0yNCByZWZlcmVuY2UgZGlyZWN0b3J5Ci1jYW4gYmUgZGVsZXRlZCBhcm91bmQgTTMsIG9uY2Ugd2hvbGUgdGVhbSBoYXMgCi1yZXZpZXdlZCBhbmQgY29uZmlkZW50IDEyLTEwIHZlcnNpb24gaXMgY29ycmVjdAotcmVmZXJlbmNlLiAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNmI5NmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci08Ym9keSBsYW5nPSJFTi1VUyI+Ci08aDI+QWJvdXQgVGhpcyBDb250ZW50PC9oMj4KLSAKLTxwPkZlYnJ1YXJ5IDI0LCAyMDA1PC9wPgkKLTxoMz5MaWNlbnNlPC9oMz4KLQotPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluICgmcXVvdDtDb250ZW50JnF1b3Q7KS4gIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQotRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KLQotPHA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCZxdW90O1JlZGlzdHJpYnV0b3ImcXVvdDspIGFuZCBkaWZmZXJlbnQgdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5Ci1hcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuICBDaGVjayB0aGUgUmVkaXN0cmlidXRvcidzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gIElmIG5vIHN1Y2ggbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuICBVbmxlc3Mgb3RoZXJ3aXNlCi1pbmRpY2F0ZWQgYmVsb3csIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudC48L3A+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhZGY2MTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXNvdXJjZS5odG1sY29yZXRlc3RzLmphciA9IHNyYy8KLW91dHB1dC5odG1sY29yZXRlc3RzLmphciA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IGh0bWxjb3JldGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3BsdWdpbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjNmFlZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPHBsdWdpbj4KLQotCTwhLS0gbGVhdmUgdGhpcyBlbXB0eSBwbHVnaW4ueG1sIGhlcmUgZm9yIG5vdywgCi0JCWJlY2F1c2Ugd2UgZG8gYSBmdW5reSB0aGluZyAKLQkJdG8gZmluZCBpdCBkdXJpbmcgdGhlIHRlc3RzIC0tPgotCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvSFRNTENvcmVUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvSFRNTENvcmVUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM2OTQxOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL0hUTUxDb3JlVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5taXNjLkhUTUxDb3JlUHJlZmVyZW5jZXNUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMubWlzYy5IVE1MVGFnSW5mb1Rlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5tb2RlbC5Nb2RlbE1vZGlmaWNhdGlvbnM7Ci0KLQotCi1wdWJsaWMgY2xhc3MgSFRNTENvcmVUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCi0JLyoqCi0JICogdG8gZ2V0IHBpY2tlZCB1cCBieSBCVlQKLQkgKiAKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IEhUTUxDb3JlVGVzdFN1aXRlKCk7Ci0JfQotCi0JcHVibGljIEhUTUxDb3JlVGVzdFN1aXRlKCkgewotCQlzdXBlcigiSFRNTCBDb3JlIFRlc3RTdWl0ZSIpOwotCi0JCWFkZFRlc3QoTW9kZWxQYXJzZXJUZXN0cy5zdWl0ZSgpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEhUTUxDb3JlUHJlZmVyZW5jZXNUZXN0LmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShIVE1MVGFnSW5mb1Rlc3QuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKE1vZGVsTW9kaWZpY2F0aW9ucy5jbGFzcykpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL0hUTUxDb3JlVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvSFRNTENvcmVUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzdjMDA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvSFRNTENvcmVUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgSFRNTENvcmVUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIEhUTUxDb3JlVGVzdHNQbHVnaW4gcGx1Z2luOwotCS8vUmVzb3VyY2UgYnVuZGxlLgotCXByaXZhdGUgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VCdW5kbGU7Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIEhUTUxDb3JlVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JCXRyeSB7Ci0JCQlyZXNvdXJjZUJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5TU0VNb2RlbEhUTUxUZXN0c1BsdWdpblJlc291cmNlcyIpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24geCkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSFRNTENvcmVUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICogb3IgJ2tleScgaWYgbm90IGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gSFRNTENvcmVUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwpID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5OwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiByZXNvdXJjZUJ1bmRsZTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9Mb2dnZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMmI2ZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9Mb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBTbWFsbCBjb252ZW5pZW5jZSBjbGFzcyB0byBsb2cgbWVzc2FnZXMgdG8gcGx1Z2luJ3MgbG9nIGZpbGUgYW5kIGFsc28sIGlmIGRlc2lyZWQsCi0gKiB0aGUgY29uc29sZS4gVGhpcyBjbGFzcyBzaG91bGQgb25seSBiZSB1c2VkIGJ5IGNsYXNzZXMgaW4gdGhpcyBwbHVnaW4uIE90aGVyCi0gKiBwbHVnaW5zIHNob3VsZCBtYWtlIHRoZWlyIG93biBjb3B5LCB3aXRoIGFwcHJvcHJpYXRlIElELgotICovCi1wdWJsaWMgY2xhc3MgTG9nZ2VyIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMiOyAvLyROT04tTkxTLTEkCi0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQUNFRklMVEVSX0xPQ0FUSU9OID0gIi9kZWJ1Zy90cmFjZWZpbHRlciI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LID0gSVN0YXR1cy5PSzsgLy8gMAotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk8gPSBJU3RhdHVzLklORk87IC8vIDEKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HID0gSVN0YXR1cy5XQVJOSU5HOyAvLyAyCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1IgPSBJU3RhdHVzLkVSUk9SOyAvLyA0Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPS19ERUJVRyA9IDIwMCArIE9LOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk9fREVCVUcgPSAyMDAgKyBJTkZPOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkdfREVCVUcgPSAyMDAgKyBXQVJOSU5HOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0RFQlVHID0gMjAwICsgRVJST1I7Ci0KLQkvKioKLQkgKiBBZGRzIG1lc3NhZ2UgdG8gbG9nLgotCSAqIEBwYXJhbSBsZXZlbCBzZXZlcml0eSBsZXZlbCBvZiB0aGUgbWVzc2FnZSAoT0ssIElORk8sIFdBUk5JTkcsIEVSUk9SLCBPS19ERUJVRywgSU5GT19ERUJVRywgV0FSTklOR19ERUJVRywgRVJST1JfREVCVUcpCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBhZGQgdG8gdGhlIGxvZwotCSAqIEBwYXJhbSBleGNlcHRpb24gZXhjZXB0aW9uIHRocm93bgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGxldmVsID09IE9LX0RFQlVHIHx8IGxldmVsID09IElORk9fREVCVUcgfHwgbGV2ZWwgPT0gV0FSTklOR19ERUJVRyB8fCBsZXZlbCA9PSBFUlJPUl9ERUJVRykgewotCQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJCXJldHVybjsKLQkJfQotCi0JCWludCBzZXZlcml0eSA9IElTdGF0dXMuT0s7Ci0JCXN3aXRjaCAobGV2ZWwpIHsKLQkJCWNhc2UgSU5GT19ERUJVRyA6Ci0JCQljYXNlIElORk8gOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5JTkZPOwotCQkJCWJyZWFrOwotCQkJY2FzZSBXQVJOSU5HX0RFQlVHIDoKLQkJCWNhc2UgV0FSTklORyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLldBUk5JTkc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEVSUk9SX0RFQlVHIDoKLQkJCWNhc2UgRVJST1IgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5FUlJPUjsKLQkJfQotCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKHNldmVyaXR5LCBQTFVHSU5fSUQsIHNldmVyaXR5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQl9Ci0KLQkvKioKLQkgKiBQcmludHMgbWVzc2FnZSB0byBsb2cgaWYgY2F0ZWdvcnkgbWF0Y2hlcyAvZGVidWcvdHJhY2VmaWx0ZXIgb3B0aW9uLgotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gcHJpbnQKLQkgKiBAcGFyYW0gY2F0ZWdvcnkgY2F0ZWdvcnkgb2YgdGhlIG1lc3NhZ2UsIHRvIGJlIGNvbXBhcmVkIHdpdGggL2RlYnVnL3RyYWNlZmlsdGVyCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF90cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChpc1RyYWNpbmcoY2F0ZWdvcnkpKSB7Ci0JCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBQTFVHSU5fSUQsIElTdGF0dXMuT0ssIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybSBpcyBkZWJ1Z2dpbmcKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEZWJ1Z2dpbmcoKSB7Ci0JCXJldHVybiBQbGF0Zm9ybS5pbkRlYnVnTW9kZSgpOwotCX0KLQotCS8qKgotCSAqIERldGVybWluZXMgaWYgY3VycmVudGx5IHRyYWNpbmcgYSBjYXRlZ29yeQotCSAqIEBwYXJhbSBjYXRlZ29yeQotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0cmFjaW5nIGNhdGVnb3J5LCBmYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUcmFjaW5nKFN0cmluZyBjYXRlZ29yeSkgewotCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nIHRyYWNlRmlsdGVyID0gUGxhdGZvcm0uZ2V0RGVidWdPcHRpb24oUExVR0lOX0lEICsgVFJBQ0VGSUxURVJfTE9DQVRJT04pOwotCQlpZiAodHJhY2VGaWx0ZXIgIT0gbnVsbCkgewotCQkJU3RyaW5nVG9rZW5pemVyIHRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodHJhY2VGaWx0ZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKLQkJCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJU3RyaW5nIGNhdCA9IHRva2VuaXplci5uZXh0VG9rZW4oKS50cmltKCk7Ci0JCQkJaWYgKGNhdGVnb3J5LmVxdWFscyhjYXQpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIG51bGwpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9Nb2RlbFBhcnNlclRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL01vZGVsUGFyc2VyVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY1MmE1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL01vZGVsUGFyc2VyVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQXR0clRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQXR0clRlc3QyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkNEQVRBU2VjdGlvblRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQ0RBVEFTZWN0aW9uVGVzdDI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQ0RBVEFTZWN0aW9uVGVzdDM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRG9jVHlwZVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRWxlbWVudFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRWxlbWVudFRlc3QyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVsZW1lbnRUZXN0MzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbXB0eVRleHRUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVtcHR5VGV4dFRlc3QyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVtcHR5VGV4dFRlc3QzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDY7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUElUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdDI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdDM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdDQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0MjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0MzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0NDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0NTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0NjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0NzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0ODsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UYWJsZVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGV4dFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGV4dFRlc3QyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRleHRUZXN0MzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDEwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDEzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q1OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0NjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q4OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0OTsKLQotCi0KLXB1YmxpYyBjbGFzcyBNb2RlbFBhcnNlclRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgTW9kZWxQYXJzZXJUZXN0cygpOwotCX0KLQotCXB1YmxpYyBNb2RlbFBhcnNlclRlc3RzKCkgewotCQlzdXBlcigiTW9kZWxQYXJzZXJUZXN0cyIpOwotCi0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShQYXJzZXJUZXN0LmNsYXNzLCAiUGFyc2VyVGVzdCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFBhcnNlclRlc3QyLmNsYXNzLCAiUGFyc2VyVGVzdDIiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShQYXJzZXJUZXN0My5jbGFzcywgIlBhcnNlclRlc3QzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoUGFyc2VyVGVzdDQuY2xhc3MsICJQYXJzZXJUZXN0NCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFVwZGF0ZXJUZXN0LmNsYXNzLCAiVXBkYXRlclRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShVcGRhdGVyVGVzdDIuY2xhc3MsICJVcGRhdGVyVGVzdDIiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShVcGRhdGVyVGVzdDMuY2xhc3MsICJVcGRhdGVyVGVzdDMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShVcGRhdGVyVGVzdDQuY2xhc3MsICJVcGRhdGVyVGVzdDQiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShVcGRhdGVyVGVzdDUuY2xhc3MsICJVcGRhdGVyVGVzdDUiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShVcGRhdGVyVGVzdDYuY2xhc3MsICJVcGRhdGVyVGVzdDYiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShVcGRhdGVyVGVzdDcuY2xhc3MsICJVcGRhdGVyVGVzdDciKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShVcGRhdGVyVGVzdDguY2xhc3MsICJVcGRhdGVyVGVzdDgiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShVcGRhdGVyVGVzdDkuY2xhc3MsICJVcGRhdGVyVGVzdDkiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShVcGRhdGVyVGVzdDEwLmNsYXNzLCAiVXBkYXRlclRlc3QxMCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTEuY2xhc3MsICJVcGRhdGVyVGVzdDExIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVXBkYXRlclRlc3QxMi5jbGFzcywgIlVwZGF0ZXJUZXN0MTIiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShVcGRhdGVyVGVzdDEzLmNsYXNzLCAiVXBkYXRlclRlc3QxMyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTQuY2xhc3MsICJVcGRhdGVyVGVzdDE0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRWxlbWVudFRlc3QuY2xhc3MsICJFbGVtZW50VGVzdCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEVsZW1lbnRUZXN0Mi5jbGFzcywgIkVsZW1lbnRUZXN0MiIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEVsZW1lbnRUZXN0My5jbGFzcywgIkVsZW1lbnRUZXN0MyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRhYmxlVGVzdC5jbGFzcywgIlRhYmxlVGVzdCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRleHRUZXN0LmNsYXNzLCAiVGV4dFRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXh0VGVzdDIuY2xhc3MsICJUZXh0VGVzdDIiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXh0VGVzdDMuY2xhc3MsICJUZXh0VGVzdDMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShTcGxpdFRleHRUZXN0LmNsYXNzLCAiU3BsaXRUZXh0VGVzdCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3QyLmNsYXNzLCAiU3BsaXRUZXh0VGVzdDIiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShTcGxpdFRleHRUZXN0My5jbGFzcywgIlNwbGl0VGV4dFRlc3QzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoU3BsaXRUZXh0VGVzdDQuY2xhc3MsICJTcGxpdFRleHRUZXN0NCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3Q1LmNsYXNzLCAiU3BsaXRUZXh0VGVzdDUiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShTcGxpdFRleHRUZXN0Ni5jbGFzcywgIlNwbGl0VGV4dFRlc3Q2IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoU3BsaXRUZXh0VGVzdDcuY2xhc3MsICJTcGxpdFRleHRUZXN0NyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3Q4LmNsYXNzLCAiU3BsaXRUZXh0VGVzdDgiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShFbXB0eVRleHRUZXN0LmNsYXNzLCAiRW1wdHlUZXh0VGVzdCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEVtcHR5VGV4dFRlc3QyLmNsYXNzLCAiRW1wdHlUZXh0VGVzdDIiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShFbXB0eVRleHRUZXN0My5jbGFzcywgIkVtcHR5VGV4dFRlc3QzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoQXR0clRlc3QuY2xhc3MsICJBdHRyVGVzdCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEF0dHJUZXN0Mi5jbGFzcywgIkF0dHJUZXN0MiIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEVudGl0eVRlc3QuY2xhc3MsICJFbnRpdHlUZXN0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRW50aXR5VGVzdDIuY2xhc3MsICJFbnRpdHlUZXN0MiIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEVudGl0eVRlc3QzLmNsYXNzLCAiRW50aXR5VGVzdDMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShFbnRpdHlUZXN0NC5jbGFzcywgIkVudGl0eVRlc3Q0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRW50aXR5VGVzdDUuY2xhc3MsICJFbnRpdHlUZXN0NSIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEVudGl0eVRlc3Q2LmNsYXNzLCAiRW50aXR5VGVzdDYiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShFbnRpdHlUZXN0Ny5jbGFzcywgIkVudGl0eVRlc3Q3IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRW50aXR5VGVzdDguY2xhc3MsICJFbnRpdHlUZXN0OCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEVudGl0eVRlc3Q5LmNsYXNzLCAiRW50aXR5VGVzdDkiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShEb2NUeXBlVGVzdC5jbGFzcywgIkRvY1R5cGVUZXN0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoQ0RBVEFTZWN0aW9uVGVzdC5jbGFzcywgIkNEQVRBU2VjdGlvblRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShDREFUQVNlY3Rpb25UZXN0Mi5jbGFzcywgIkNEQVRBU2VjdGlvblRlc3QyIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoQ0RBVEFTZWN0aW9uVGVzdDMuY2xhc3MsICJDREFUQVNlY3Rpb25UZXN0MyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFBJVGVzdC5jbGFzcywgIlBJVGVzdCIpKTsKLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL21pc2MvSFRNTENvcmVQcmVmZXJlbmNlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbWlzYy9IVE1MQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2I1N2E0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbWlzYy9IVE1MQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5taXNjOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5EZWZhdWx0U2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLklFY2xpcHNlUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkluc3RhbmNlU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5IVE1MQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkhUTUxDb3JlUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjsKLQotLyoqCi0gKiBUaGUgcHVycG9zZSBvZiB0aGlzIHRlc3QgaXMgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBvZiB0aGUgSFRNTCBTb3VyY2UKLSAqIGVkaXRvciBwcmVmZXJlbmNlcy4gVGVzdHMgaW5jbHVkZSBzZXR0aW5nL2dldHRpbmcgcHJlZmVyZW5jZXMuCi0gKiAKLSAqIE5PVEU6IFRoaXMgdGVzdCBzaG91bGQgYmUgcHJlZm9ybWVkIG9uIGEgY2xlYW4gd29ya3NwYWNlLiBJZiBwZXJmb3JtZWQgb24KLSAqIGFuIGV4aXN0aW5nIHdvcmtzcGFjZSwgdGhpcyB0ZXN0IHdpbGwgbWFuaXB1bGF0ZSBwcmVmZXJlbmNlcyBpbiB0aGUKLSAqIHdvcmtzcGFjZSwgdGhvdWdoIGF0dGVtcHRzIHdpbGwgYmUgbWFkZSB0byByZXN0b3JlIG9yaWdpbmFsIHZhbHVlcyBhZnRlcgotICogdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIEhUTUxDb3JlUHJlZmVyZW5jZXNUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIFRlc3RzIGV4aXN0YW5jZSBvZiBwcmVmZXJlbmNlIHZhbHVlcyB3aGVuIGdldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMKLQkgKiB0aHJvdWdoIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJ1bmRsZUdldFByZWZlcmVuY2VzKCkgewotCQlmaW5hbCBTdHJpbmcgYnVuZGxlTmFtZSA9ICJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlIjsKLQotCQkvLyBuZWVkIHRvIHN0YXJ0IHVwIGJ1bmRsZSBmb3IgZGVmYXVsdCB2YWx1ZXMgdG8gYmUgbG9hZGVkCi0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoYnVuZGxlTmFtZSk7Ci0JCXRyeSB7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpCi0JCQkJYnVuZGxlLnN0YXJ0KCk7Ci0JCQllbHNlCi0JCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2UgY291bGQgbm90IGZpbmQgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSk7Ci0JCX0gY2F0Y2ggKEJ1bmRsZUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBvZiBleGNlcHRpb24gc3RhcnRpbmcgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSArICIgZXhjZXB0aW9uOiAiICsgZSk7Ci0JCX0KLQotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIEhUTUxDb3JlUHJlZmVyZW5jZU5hbWVzLlRBR19OQU1FX0NBU0UpOwotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIEhUTUxDb3JlUHJlZmVyZW5jZU5hbWVzLkFUVFJfTkFNRV9DQVNFKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVuZGxlR2V0UHJlZmVyZW5jZShTdHJpbmcgYnVuZGxlTmFtZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJaW50IGRlZmF1bHRWYWx1ZSA9IC0xOwotCi0JCWludCB2YWx1ZSA9IFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpLmdldEludChidW5kbGVOYW1lLCBwcmVmS2V5LCBkZWZhdWx0VmFsdWUsIG51bGwpOwotCQlhc3NlcnRUcnVlKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlLiBLZXk6ICIgKyBwcmVmS2V5LCBkZWZhdWx0VmFsdWUgIT0gdmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGRlZmF1bHQgdmFsdWVzIG9mIHByZWZlcmVuY2VzLgotCSAqIAotCSAqIE5PVEU6IEV4cGVjdGVkIGRlZmF1bHQgdmFsdWVzIGFyZSBoYXJkLWNvZGVkLCBzbyBpZiBkZWZhdWx0IHZhbHVlcyBkbwotCSAqIGdldCBjaGFuZ2VkLCBhc3NlcnRpb25zIG5lZWQgdG8gYmUgdXBkYXRlZCBhcyB3ZWxsCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlcygpIHsKLQkJSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlID0gbmV3IERlZmF1bHRTY29wZSgpLmdldE5vZGUoSFRNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpKTsKLQotCQlwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShub2RlLCBIVE1MQ29yZVByZWZlcmVuY2VOYW1lcy5TUExJVF9NVUxUSV9BVFRSUywgQm9vbGVhbi50b1N0cmluZyhmYWxzZSkpOwotCQlwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShub2RlLCBIVE1MQ29yZVByZWZlcmVuY2VOYW1lcy5BVFRSX05BTUVfQ0FTRSwgSW50ZWdlci50b1N0cmluZyhIVE1MQ29yZVByZWZlcmVuY2VOYW1lcy5MT1dFUikpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUsIFN0cmluZyBwcmVmS2V5LCBTdHJpbmcgZXhwZWN0ZWQpIHsKLQkJU3RyaW5nIGRlZmF1bHRWYWx1ZSA9IExvbmcudG9TdHJpbmcoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOyAvLyByYW5kb20KLQkJLy8gc3RyaW5nCi0JCQotCQlTdHJpbmcgdGhlRGVmYXVsdFZhbHVlID0gbm9kZS5nZXQocHJlZktleSwgZGVmYXVsdFZhbHVlKTsKLQkJYXNzZXJ0RXF1YWxzKCJHZXQgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5LCBleHBlY3RlZCwgdGhlRGVmYXVsdFZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzIGJ5IHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZSB0byBiZSBhCi0JICogY2VydGFpbiB2YWx1ZSwgdGhlbiBnZXR0aW5nIHRoZSBwcmVmZXJlbmNlIHZhbHVlIHRvIHZlcmlmeSBpdCB3YXMgc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5TZXRQcmVmZXJlbmNlcygpIHsKLQkJSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlID0gbmV3IEluc3RhbmNlU2NvcGUoKS5nZXROb2RlKEhUTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSk7Ci0KLQkJcGx1Z2luU2V0UHJlZmVyZW5jZUJvb2xlYW4obm9kZSwgSFRNTENvcmVQcmVmZXJlbmNlTmFtZXMuU1BMSVRfTVVMVElfQVRUUlMpOwotCQlwbHVnaW5TZXRQcmVmZXJlbmNlU3RyaW5nKG5vZGUsIEhUTUxDb3JlUHJlZmVyZW5jZU5hbWVzLlRBR19OQU1FX0NBU0UpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCWJvb2xlYW4gb3JpZ2luYWxWYWx1ZSA9IGZhbHNlOwotCQlib29sZWFuIGV4cGVjdGVkVmFsdWUgPSB0cnVlOwotCQkKLQkJU3RyaW5nIG9yaWdpbmFsU3RyaW5nID0gbm9kZS5nZXQocHJlZktleSwgImJvZ3VzIik7Ci0JCWlmICghImJvZ3VzIi5lcXVhbHMob3JpZ2luYWxTdHJpbmcpKSB7Ci0JCQlvcmlnaW5hbFZhbHVlID0gQm9vbGVhbi52YWx1ZU9mKG9yaWdpbmFsU3RyaW5nKS5ib29sZWFuVmFsdWUoKTsKLQkJCWV4cGVjdGVkVmFsdWUgPSAhb3JpZ2luYWxWYWx1ZTsKLQkJfQotCQlub2RlLnB1dEJvb2xlYW4ocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCWJvb2xlYW4gZm91bmRWYWx1ZSA9IG5vZGUuZ2V0Qm9vbGVhbihwcmVmS2V5LCB0cnVlKTsKLQkJYXNzZXJ0RXF1YWxzKCJTZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiICsgcHJlZktleSArICIgIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIgZm91bmQ6ICIgKyBmb3VuZFZhbHVlLCBleHBlY3RlZFZhbHVlLCBmb3VuZFZhbHVlKTsKLQkJCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCWlmICgiYm9ndXMiLmVxdWFscyhvcmlnaW5hbFN0cmluZykpCi0JCQlub2RlLnJlbW92ZShwcmVmS2V5KTsKLQkJZWxzZQotCQkJbm9kZS5wdXQocHJlZktleSwgb3JpZ2luYWxTdHJpbmcpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlU3RyaW5nKElFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJU3RyaW5nIG9yaWdpbmFsVmFsdWUgPSBub2RlLmdldChwcmVmS2V5LCAiYm9ndXMiKTsKLQkJU3RyaW5nIGV4cGVjdGVkVmFsdWUgPSBMb25nLnRvU3RyaW5nKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsgLy8gcmFuZG9tCi0JCQkJCQkJCQkJCQkJCQkJCQkJLy8gc3RyaW5nCi0JCW5vZGUucHV0KHByZWZLZXksIGV4cGVjdGVkVmFsdWUpOwotCQlTdHJpbmcgZm91bmRWYWx1ZSA9IG5vZGUuZ2V0KHByZWZLZXksICIiKTsKLQkJYXNzZXJ0RXF1YWxzKCJTZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiICsgcHJlZktleSArICIgIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIgZm91bmQ6ICIgKyBmb3VuZFZhbHVlLCBleHBlY3RlZFZhbHVlLCBmb3VuZFZhbHVlKTsKLQotCQkvLyBhdHRlbXB0IHRvIHJlc3RvcmUgb3JpZ2luYWwgcHJlZmVyZW5jZSB2YWx1ZQotCQlpZiAoImJvZ3VzIi5lcXVhbHMob3JpZ2luYWxWYWx1ZSkpCi0JCQlub2RlLnJlbW92ZShwcmVmS2V5KTsKLQkJZWxzZQotCQkJbm9kZS5wdXQocHJlZktleSwgb3JpZ2luYWxWYWx1ZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9taXNjL0hUTUxUYWdJbmZvVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9taXNjL0hUTUxUYWdJbmZvVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWZhNjYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbWlzYy9IVE1MVGFnSW5mb1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMubWlzYzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLk1vZGVsVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNQXR0cmlidXRlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5ET01OYW1lc3BhY2VIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLm1vZGVscXVlcnkuTW9kZWxRdWVyeVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBIVE1MVGFnSW5mb1Rlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCi0JcHVibGljIEhUTUxUYWdJbmZvVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgSFRNTFRhZ0luZm9UZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBIVE1MVGFnSW5mb1Rlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IGh0bWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJIVE1MIik7IC8vJE5PTi1OTFMtMSQKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGh0bWwpOwotCQkJY2hlY2tFbGVtZW50VGFnSW5mbyhodG1sKTsKLQotCQkJRWxlbWVudCBib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQk9EWSIpOyAvLyROT04tTkxTLTEkCi0JCQlodG1sLmFwcGVuZENoaWxkKGJvZHkpOwotCQkJY2hlY2tFbGVtZW50VGFnSW5mbyhib2R5KTsKLQotCQkJQXR0ciBvbmNsaWNrID0gZG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKCJvbmNsaWNrIik7IC8vJE5PTi1OTFMtMSQKLQkJCWJvZHkuc2V0QXR0cmlidXRlTm9kZShvbmNsaWNrKTsKLQkJCWNoZWNrQXR0cmlidXRlVGFnSW5mbyhib2R5LCBvbmNsaWNrKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrRWxlbWVudFRhZ0luZm8oRWxlbWVudCBub2RlKSB7Ci0JCS8vIGNoZWNrIHRhZ2luZm8KLQkJQ01FbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2wgPSBnZXRDTUVsZW1lbnREZWNsYXJhdGlvbihub2RlKTsKLQkJYXNzZXJ0Tm90TnVsbCgiQ2Fubm90IGNoZWNrIHRhZ2luZm8gYmVjYXVzZSBubyBjbSBlbGVtZW50IGRlY2xhcmF0aW9uIGZvciAiICsgbm9kZS5nZXROb2RlTmFtZSgpLCBlbGVtZW50RGVjbCk7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKGVsZW1lbnREZWNsICE9IG51bGwpIHsKLQkJCVN0cmluZyB0YWdJbmZvID0gKFN0cmluZykgZWxlbWVudERlY2wuZ2V0UHJvcGVydHkoInRhZ0luZm8iKTsgLy8kTk9OLU5MUy0xJAotCQkJYXNzZXJ0Tm90TnVsbCgiTm8gdGFnaW5mbyBmb3VuZCBmb3IgIiArIGVsZW1lbnREZWNsLmdldE5vZGVOYW1lKCksIHRhZ0luZm8pOyAvLyROT04tTkxTLTEkCi0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tBdHRyaWJ1dGVUYWdJbmZvKEVsZW1lbnQgZWxlbWVudCwgQXR0ciBhdHRyaWJ1dGUpIHsKLQkJLy8gY2hlY2sgdGFnaW5mbwotCQlDTUVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50RGVjbCA9IGdldENNRWxlbWVudERlY2xhcmF0aW9uKGVsZW1lbnQpOwotCQlhc3NlcnROb3ROdWxsKCJDYW5ub3QgY2hlY2sgdGFnaW5mbyBiZWNhdXNlIG5vIGVsZW1lbnQgZGVjbGFyYXRpb24gZm9yICIgKyBlbGVtZW50LmdldE5vZGVOYW1lKCksIGVsZW1lbnREZWNsKTsgLy8kTk9OLU5MUy0xJAotCQlpZiAoZWxlbWVudERlY2wgIT0gbnVsbCkgewotCQkJQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiBhdHREZWNsID0gZ2V0Q01BdHRyaWJ1dGVEZWNsYXJhdGlvbihlbGVtZW50RGVjbCwgYXR0cmlidXRlLmdldE5hbWUoKSk7Ci0JCQlhc3NlcnROb3ROdWxsKCJDYW5ub3QgY2hlY2sgdGFnaW5mbyBiZWNhdXNlIG5vIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbiBmb3IgIiArIGF0dHJpYnV0ZS5nZXROYW1lKCksIGF0dERlY2wpOyAvLyROT04tTkxTLTEkCi0KLQkJCVN0cmluZyB0YWdJbmZvID0gKFN0cmluZykgYXR0RGVjbC5nZXRQcm9wZXJ0eSgidGFnSW5mbyIpOyAvLyROT04tTkxTLTEkCi0JCQlhc3NlcnROdWxsKCJVbmV4cGVjdGVkIHRhZ2luZm8gZm91bmQgZm9yICIgKyBhdHREZWNsLmdldE5vZGVOYW1lKCksIHRhZ0luZm8pOyAvLyROT04tTkxTLTEkCi0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXRyZWl2ZXMgQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiBpbmRpY2F0ZWQgYnkgYXR0cmlidXRlIG5hbWUgd2l0aGluCi0JICogZWxlbWVudERlY2wKLQkgKi8KLQlwcml2YXRlIENNQXR0cmlidXRlRGVjbGFyYXRpb24gZ2V0Q01BdHRyaWJ1dGVEZWNsYXJhdGlvbihDTUVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50RGVjbCwgU3RyaW5nIGF0dE5hbWUpIHsKLQkJQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiBhdHRyRGVjbCA9IG51bGw7Ci0KLQkJaWYgKGVsZW1lbnREZWNsICE9IG51bGwpIHsKLQkJCUNNTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMgPSBlbGVtZW50RGVjbC5nZXRBdHRyaWJ1dGVzKCk7Ci0JCQlTdHJpbmcgbm9wcmVmaXhOYW1lID0gRE9NTmFtZXNwYWNlSGVscGVyLmdldFVucHJlZml4ZWROYW1lKGF0dE5hbWUpOwotCQkJaWYgKGF0dHJpYnV0ZXMgIT0gbnVsbCkgewotCQkJCWF0dHJEZWNsID0gKENNQXR0cmlidXRlRGVjbGFyYXRpb24pIGF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKG5vcHJlZml4TmFtZSk7Ci0JCQkJaWYgKGF0dHJEZWNsID09IG51bGwpIHsKLQkJCQkJYXR0ckRlY2wgPSAoQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbikgYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oYXR0TmFtZSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBhdHRyRGVjbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyZWl2ZXMgQ01FbGVtZW50RGVjbGFyYXRpb24gZm9yIGdpdmVuIG5vZGUKLQkgKiAKLQkgKiBAcmV0dXJuIENNRWxlbWVudERlY2xhcmF0aW9uIC0gQ01FbGVtZW50RGVjbGFyYXRpb24gb2Ygbm9kZSBvcgotCSAqICAgICAgICAgPGNvZGU+bnVsbDwvY29kZT4gaWYgbm90IHBvc3NpYmxlCi0JICovCi0JcHJpdmF0ZSBDTUVsZW1lbnREZWNsYXJhdGlvbiBnZXRDTUVsZW1lbnREZWNsYXJhdGlvbihFbGVtZW50IGVsZW1lbnQpIHsKLQkJQ01FbGVtZW50RGVjbGFyYXRpb24gcmVzdWx0ID0gbnVsbDsKLQotCQlNb2RlbFF1ZXJ5IG1vZGVsUXVlcnkgPSBNb2RlbFF1ZXJ5VXRpbC5nZXRNb2RlbFF1ZXJ5KGVsZW1lbnQuZ2V0T3duZXJEb2N1bWVudCgpKTsKLQkJaWYgKG1vZGVsUXVlcnkgIT0gbnVsbCkKLQkJCXJlc3VsdCA9IG1vZGVsUXVlcnkuZ2V0Q01FbGVtZW50RGVjbGFyYXRpb24oZWxlbWVudCk7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9tb2RlbC9Nb2RlbE1vZGlmaWNhdGlvbnMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbW9kZWwvTW9kZWxNb2RpZmljYXRpb25zLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjOThmODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9tb2RlbC9Nb2RlbE1vZGlmaWNhdGlvbnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkRvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSFRNTDQwTmFtZXNwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHMuVGVzdFdyaXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcudXRpbC5OdWxsSW5wdXRTdHJlYW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIE1vZGVsTW9kaWZpY2F0aW9ucyBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyB2b2lkIHRlc3RQbGFpbkRvY3VtZW50KCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJSURvY3VtZW50IGRvY3VtZW50ID0gbmV3IERvY3VtZW50KCk7Ci0JCWRvY3VtZW50LnNldCgiIik7Ci0JCWRvY3VtZW50LnJlcGxhY2UoMCwgMCwgInRlc3QiKTsKLQkJZG9jdW1lbnQuc2V0KCIiKTsKLQkJZG9jdW1lbnQucmVwbGFjZSgwLCAwLCAidGVzdDIiKTsKLQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZXBEb2N1bWVudEhUTUxNb2RzKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsgLy8gYXNzdW1lcyAwLWJ5dGUgaHRtbCBlbXB0eSBmaWxlCi0KLQkJbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQotCQl0cnkgewotCQkJSURPTURvY3VtZW50IGRvYyA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlFbGVtZW50IGVsZSA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dCh0aGlzLCAwLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCksICI8dGFnPnRleHQ8L3RhZz4iKTsKLQkJCUVsZW1lbnQgZWxlMiA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUyKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2V0RG9jdW1lbnRYTUxNb2RzKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsgLy8gYXNzdW1lcyAwLWJ5dGUgaHRtbCBlbXB0eSBmaWxlCi0KLQkJbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCi0JCXRyeSB7Ci0JCQlJRE9NRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUVsZW1lbnQgZWxlID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZSk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIiIpOwotCQkJRWxlbWVudCBlbGUyID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZTIpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZXBEb2N1bWVudEpTUE1vZHMoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOyAvLyBhc3N1bWVzIDAtYnl0ZSBodG1sIGVtcHR5IGZpbGUKLQotCQltb2RlbCA9IGNyZWF0ZUpTUE1vZGVsKCk7Ci0KLQkJdHJ5IHsKLQkJCUlET01Eb2N1bWVudCBkb2MgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJRWxlbWVudCBlbGUgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQodGhpcywgMCwgc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpLCAiPHRhZz50ZXh0PC90YWc+Iik7Ci0JCQlFbGVtZW50IGVsZTIgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlMik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNldERvY3VtZW50SFRNTE1vZHMoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOyAvLyBhc3N1bWVzIDAtYnl0ZSBodG1sIGVtcHR5IGZpbGUKLQotCQltb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCi0JCXRyeSB7Ci0JCQlJRE9NRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUVsZW1lbnQgZWxlID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZSk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIiIpOwotCQkJRWxlbWVudCBlbGUyID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZTIpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZXREb2N1bWVudEpTUE1vZHMoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOyAvLyBhc3N1bWVzIDAtYnl0ZSBodG1sIGVtcHR5IGZpbGUKLQotCQltb2RlbCA9IGNyZWF0ZUpTUE1vZGVsKCk7Ci0KLQkJdHJ5IHsKLQkJCUlET01Eb2N1bWVudCBkb2MgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJRWxlbWVudCBlbGUgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiIik7Ci0JCQlFbGVtZW50IGVsZTIgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlMik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlcERvY3VtZW50WE1MTW9kcygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IG51bGw7IC8vIGFzc3VtZXMgMC1ieXRlIGh0bWwgZW1wdHkgZmlsZQotCi0JCW1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQotCQl0cnkgewotCQkJSURPTURvY3VtZW50IGRvYyA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlFbGVtZW50IGVsZSA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dCh0aGlzLCAwLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCksICI8dGFnPnRleHQ8L3RhZz4iKTsKLQkJCUVsZW1lbnQgZWxlMiA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUyKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RG9jdW1lbnRIVE1MTW9kcygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IG51bGw7IC8vIGFzc3VtZXMgMC1ieXRlIGh0bWwgZW1wdHkgZmlsZQotCQotCQltb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQotCQl0cnkgewotCQkJSURPTURvY3VtZW50IGRvYyA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlFbGVtZW50IGVsZSA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dCh0aGlzLCAwLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCksICIiKTsKLQkJCUVsZW1lbnQgZWxlMiA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUyKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RG9jdW1lbnRKU1BNb2RzKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsgLy8gYXNzdW1lcyAwLWJ5dGUgaHRtbCBlbXB0eSBmaWxlCi0JCi0JCW1vZGVsID0gY3JlYXRlSlNQTW9kZWwoKTsKLQkKLQkJdHJ5IHsKLQkJCUlET01Eb2N1bWVudCBkb2MgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJRWxlbWVudCBlbGUgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQodGhpcywgMCwgc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpLCAiIik7Ci0JCQlFbGVtZW50IGVsZTIgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlMik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERvY3VtZW50WE1MTW9kcygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IG51bGw7IC8vIGFzc3VtZXMgMC1ieXRlIGh0bWwgZW1wdHkgZmlsZQotCQotCQltb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCi0JCXRyeSB7Ci0JCQlJRE9NRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUVsZW1lbnQgZWxlID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZSk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KHRoaXMsIDAsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSwgIiIpOwotCQkJRWxlbWVudCBlbGUyID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZTIpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIEJlIHN1cmUgdG8gcmVsZWFzZSBhbnkgbW9kZWxzIG9idGFpbmVkIGZyb20gdGhpcyBtZXRob2QuCi0JICogCi0JICogQHJldHVybgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24gCi0JICogQHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIAotCSAqLwotCXByaXZhdGUgc3RhdGljIElET01Nb2RlbCBjcmVhdGVYTUxNb2RlbCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQotCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoInRlc3QueG1sIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsKLQotCQkvLyBhbHdheXMgdXNlIHRoZSBzYW1lIGxpbmUgZGVsaW1pdGVyIGZvciB0aGVzZSB0ZXN0cywgcmVnYXJkbGVzcwotCQkvLyBvZgotCQkvLyBwbGFmb3JtIG9yIHByZWZlcmVuY2Ugc2V0dGluZ3MKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0TGluZURlbGltaXRlcihUZXN0V3JpdGVyLmNvbW1vbkVPTCk7Ci0JCXJldHVybiAoSURPTU1vZGVsKSBtb2RlbDsKLQotCX0KLQotCS8qKgotCSAqIEJlIHN1cmUgdG8gcmVsZWFzZSBhbnkgbW9kZWxzIG9idGFpbmVkIGZyb20gdGhpcyBtZXRob2QuCi0JICogCi0JICogQHJldHVybgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiBAdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJRE9NTW9kZWwgY3JlYXRlSFRNTE1vZGVsKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdCgidGVzdC5odG1sIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsKLQotCQkvLyBhbHdheXMgdXNlIHRoZSBzYW1lIGxpbmUgZGVsaW1pdGVyIGZvciB0aGVzZSB0ZXN0cywgcmVnYXJkbGVzcwotCQkvLyBvZgotCQkvLyBwbGFmb3JtIG9yIHByZWZlcmVuY2Ugc2V0dGluZ3MKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0TGluZURlbGltaXRlcihUZXN0V3JpdGVyLmNvbW1vbkVPTCk7Ci0JCXJldHVybiAoSURPTU1vZGVsKSBtb2RlbDsKLQotCX0KLQotCS8qKgotCSAqIEJlIHN1cmUgdG8gcmVsZWFzZSBhbnkgbW9kZWxzIG9idGFpbmVkIGZyb20gdGhpcyBtZXRob2QuCi0JICogCi0JICogQHJldHVybgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiBAdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJRE9NTW9kZWwgY3JlYXRlSlNQTW9kZWwoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCi0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQotCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoInRlc3QueG1sIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsKLQotCQkvLyBhbHdheXMgdXNlIHRoZSBzYW1lIGxpbmUgZGVsaW1pdGVyIGZvciB0aGVzZSB0ZXN0cywgcmVnYXJkbGVzcwotCQkvLyBvZgotCQkvLyBwbGFmb3JtIG9yIHByZWZlcmVuY2Ugc2V0dGluZ3MKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0TGluZURlbGltaXRlcihUZXN0V3JpdGVyLmNvbW1vbkVPTCk7Ci0KLQotCQlyZXR1cm4gKElET01Nb2RlbCkgbW9kZWw7Ci0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0FsbE1vZGVsUGFyc2VyVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0FsbE1vZGVsUGFyc2VyVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVkMjI1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9BbGxNb2RlbFBhcnNlclRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotCi1wdWJsaWMgY2xhc3MgQWxsTW9kZWxQYXJzZXJUZXN0cyB7Ci0KLQkvLwlwdWJsaWMgQWxsTW9kZWxQYXJzZXJUZXN0cyhTdHJpbmcgbmFtZSkgewotCS8vCQkvL3N1cGVyKG5hbWUpOwotCS8vCX0KLQotCXB1YmxpYyB2b2lkIGhvbGRPbGRUZXN0TWFpbigpIHsKLQkJcnVuVGVzdChuZXcgUGFyc2VyVGVzdCgpKTsKLQkJcnVuVGVzdChuZXcgUGFyc2VyVGVzdDIoKSk7Ci0JCXJ1blRlc3QobmV3IFBhcnNlclRlc3QzKCkpOwotCQlydW5UZXN0KG5ldyBQYXJzZXJUZXN0NCgpKTsKLQkJcnVuVGVzdChuZXcgVXBkYXRlclRlc3QoKSk7Ci0JCXJ1blRlc3QobmV3IFVwZGF0ZXJUZXN0MigpKTsKLQkJcnVuVGVzdChuZXcgVXBkYXRlclRlc3QzKCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDQoKSk7Ci0JCXJ1blRlc3QobmV3IFVwZGF0ZXJUZXN0NSgpKTsKLQkJcnVuVGVzdChuZXcgVXBkYXRlclRlc3Q2KCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDcoKSk7Ci0JCXJ1blRlc3QobmV3IFVwZGF0ZXJUZXN0OCgpKTsKLQkJcnVuVGVzdChuZXcgVXBkYXRlclRlc3Q5KCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDEwKCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDExKCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDEyKCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDEzKCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDE0KCkpOwotCQlydW5UZXN0KG5ldyBFbGVtZW50VGVzdCgpKTsKLQkJcnVuVGVzdChuZXcgRWxlbWVudFRlc3QyKCkpOwotCQlydW5UZXN0KG5ldyBFbGVtZW50VGVzdDMoKSk7Ci0JCXJ1blRlc3QobmV3IFRhYmxlVGVzdCgpKTsKLQkJcnVuVGVzdChuZXcgVGV4dFRlc3QoKSk7Ci0JCXJ1blRlc3QobmV3IFRleHRUZXN0MigpKTsKLQkJcnVuVGVzdChuZXcgVGV4dFRlc3QzKCkpOwotCQlydW5UZXN0KG5ldyBTcGxpdFRleHRUZXN0KCkpOwotCQlydW5UZXN0KG5ldyBTcGxpdFRleHRUZXN0MigpKTsKLQkJcnVuVGVzdChuZXcgU3BsaXRUZXh0VGVzdDMoKSk7Ci0JCXJ1blRlc3QobmV3IFNwbGl0VGV4dFRlc3Q0KCkpOwotCQlydW5UZXN0KG5ldyBTcGxpdFRleHRUZXN0NSgpKTsKLQkJcnVuVGVzdChuZXcgU3BsaXRUZXh0VGVzdDYoKSk7Ci0JCXJ1blRlc3QobmV3IFNwbGl0VGV4dFRlc3Q3KCkpOwotCQlydW5UZXN0KG5ldyBTcGxpdFRleHRUZXN0OCgpKTsKLQkJcnVuVGVzdChuZXcgRW1wdHlUZXh0VGVzdCgpKTsKLQkJcnVuVGVzdChuZXcgRW1wdHlUZXh0VGVzdDIoKSk7Ci0JCXJ1blRlc3QobmV3IEVtcHR5VGV4dFRlc3QzKCkpOwotCQlydW5UZXN0KG5ldyBBdHRyVGVzdCgpKTsKLQkJcnVuVGVzdChuZXcgQXR0clRlc3QyKCkpOwotCQlydW5UZXN0KG5ldyBFbnRpdHlUZXN0KCkpOwotCQlydW5UZXN0KG5ldyBFbnRpdHlUZXN0MigpKTsKLQkJcnVuVGVzdChuZXcgRW50aXR5VGVzdDMoKSk7Ci0JCXJ1blRlc3QobmV3IEVudGl0eVRlc3Q0KCkpOwotCQlydW5UZXN0KG5ldyBFbnRpdHlUZXN0NSgpKTsKLQkJcnVuVGVzdChuZXcgRW50aXR5VGVzdDYoKSk7Ci0JCXJ1blRlc3QobmV3IEVudGl0eVRlc3Q3KCkpOwotCQlydW5UZXN0KG5ldyBFbnRpdHlUZXN0OCgpKTsKLQkJcnVuVGVzdChuZXcgRW50aXR5VGVzdDkoKSk7Ci0JCXJ1blRlc3QobmV3IERvY1R5cGVUZXN0KCkpOwotCQlydW5UZXN0KG5ldyBDREFUQVNlY3Rpb25UZXN0KCkpOwotCQlydW5UZXN0KG5ldyBDREFUQVNlY3Rpb25UZXN0MigpKTsKLQkJcnVuVGVzdChuZXcgQ0RBVEFTZWN0aW9uVGVzdDMoKSk7Ci0JCXJ1blRlc3QobmV3IFBJVGVzdCgpKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3RTdWl0ZSBnZXRBbGxUZXN0cygpIHsKLQotCi0JCVRlc3RTdWl0ZSB0ZXN0U3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShQYXJzZXJUZXN0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShQYXJzZXJUZXN0Mi5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoUGFyc2VyVGVzdDMuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFBhcnNlclRlc3Q0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShVcGRhdGVyVGVzdC5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoVXBkYXRlclRlc3QyLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShVcGRhdGVyVGVzdDMuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0NC5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoVXBkYXRlclRlc3Q1LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShVcGRhdGVyVGVzdDYuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0Ny5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoVXBkYXRlclRlc3Q4LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShVcGRhdGVyVGVzdDkuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTAuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTEuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTIuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTMuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTQuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEVsZW1lbnRUZXN0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbGVtZW50VGVzdDIuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEVsZW1lbnRUZXN0My5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoVGFibGVUZXN0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShUZXh0VGVzdC5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoVGV4dFRlc3QyLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShUZXh0VGVzdDMuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3QuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3QyLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShTcGxpdFRleHRUZXN0My5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoU3BsaXRUZXh0VGVzdDQuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3Q1LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShTcGxpdFRleHRUZXN0Ni5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoU3BsaXRUZXh0VGVzdDcuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3Q4LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbXB0eVRleHRUZXN0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbXB0eVRleHRUZXN0Mi5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoRW1wdHlUZXh0VGVzdDMuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEF0dHJUZXN0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShBdHRyVGVzdDIuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEVudGl0eVRlc3QuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEVudGl0eVRlc3QyLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbnRpdHlUZXN0My5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoRW50aXR5VGVzdDQuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEVudGl0eVRlc3Q1LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbnRpdHlUZXN0Ni5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoRW50aXR5VGVzdDcuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEVudGl0eVRlc3Q4LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbnRpdHlUZXN0OS5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoRG9jVHlwZVRlc3QuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKENEQVRBU2VjdGlvblRlc3QuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKENEQVRBU2VjdGlvblRlc3QyLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShDREFUQVNlY3Rpb25UZXN0My5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoUElUZXN0LmNsYXNzKTsKLQkJLy8gdGhlIGZvbGxvdyBpcyBmYWlybHkgbG9uZyBydW5uaW5nCi0JCS8vdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShUZXN0RXhhbXBsZUZpbGVzLmNsYXNzKTsKLQotCQlyZXR1cm4gdGVzdFN1aXRlOwotCX0KLQotCi0KLQlwcml2YXRlIHZvaWQgcnVuVGVzdChNb2RlbFRlc3QgdGVzdCkgewotCQl0cnkgewotCQkJdGVzdC50ZXN0TW9kZWwoKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCQlNb2RlbFRlc3QucHJpbnRFeGNlcHRpb24oZXgpOwotCQl9Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQXR0clRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0F0dHJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNzEzZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQXR0clRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBBdHRyVGVzdCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEF0dHJUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEF0dHJUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBBdHRyVGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgQXR0clRlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCS8vRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGEgaHJlZj1cIjwlPWMlPlwiPmE8L2E+Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9BdHRyVGVzdDIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0F0dHJUZXN0Mi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGJlZjZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0F0dHJUZXN0Mi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBBdHRyVGVzdDIgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBBdHRyVGVzdDIuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgQXR0clRlc3QyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBBdHRyVGVzdDIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEF0dHJUZXN0MigpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJYS5zZXRBdHRyaWJ1dGUoImIiLCAiYyIpOwotCQkJYS5zZXRBdHRyaWJ1dGUoImQiLCAiZSIpOwotCQkJVGV4dCB0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImYiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJYS5hcHBlbmRDaGlsZCh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJQXR0ciBiID0gYS5nZXRBdHRyaWJ1dGVOb2RlKCJiIik7Ci0JCQliLnNldFByZWZpeCgieCIpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oImIubmFtZT0iICsgYi5nZXROYW1lKCkpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJiLnZhbHVlPSIgKyBiLmdldFZhbHVlKCkpOwotCQkJU3RyaW5nIGFiID0gYS5nZXRBdHRyaWJ1dGUoImIiKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiYSBiPSIgKyBhYik7Ci0JCQlTdHJpbmcgYXhiID0gYS5nZXRBdHRyaWJ1dGUoIng6YiIpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJhIHg6Yj0iICsgYXhiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJYS5nZXRBdHRyaWJ1dGVOb2RlKCJkIikuc2V0UHJlZml4KCJ5Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQXR0clRlc3QzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9BdHRyVGVzdDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzYzMDY2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9BdHRyVGVzdDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgQXR0clRlc3QzIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQXR0clRlc3QzLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEF0dHJUZXN0MyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgQXR0clRlc3QzKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBBdHRyVGVzdDMoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGEgeG1sbnM9J2RlZmF1bHQtdXJpJyB4bWxuczpiPSdiLXVyaSc+PGMgZD0nZC12YWx1ZScgYjplPSdlLXZhbHVlJy8+PC9hPiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IGEgPSAoRWxlbWVudCkgZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJRWxlbWVudCBjID0gKEVsZW1lbnQpIGEuZ2V0Rmlyc3RDaGlsZCgpOwotCi0JCQlBdHRyIHhtbG5zID0gYS5nZXRBdHRyaWJ1dGVOb2RlKCJ4bWxucyIpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJ4bWxucyBbIiArIHhtbG5zLmdldE5hbWVzcGFjZVVSSSgpICsgIl0iKTsKLQkJCUF0dHIgeG1sbnNfYiA9IGEuZ2V0QXR0cmlidXRlTm9kZSgieG1sbnM6YiIpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJ4bWxuczpiIFsiICsgeG1sbnNfYi5nZXROYW1lc3BhY2VVUkkoKSArICJdIik7Ci0JCQlBdHRyIGQgPSBjLmdldEF0dHJpYnV0ZU5vZGUoImQiKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiZCBbIiArIGQuZ2V0TmFtZXNwYWNlVVJJKCkgKyAiXSIpOwotCQkJQXR0ciBiX2UgPSBjLmdldEF0dHJpYnV0ZU5vZGUoImI6ZSIpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJiOmUgWyIgKyBiX2UuZ2V0TmFtZXNwYWNlVVJJKCkgKyAiXSIpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0NEQVRBU2VjdGlvblRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0NEQVRBU2VjdGlvblRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRlOGM4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9DREFUQVNlY3Rpb25UZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkNEQVRBU2VjdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgQ0RBVEFTZWN0aW9uVGVzdCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIENEQVRBU2VjdGlvblRlc3QuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgQ0RBVEFTZWN0aW9uVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgQ0RBVEFTZWN0aW9uVGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgQ0RBVEFTZWN0aW9uVGVzdCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICI8YT48IVtDREFUQVtjb250ZW50T2ZDREFUQVNlY3Rpb25dXT48L2E+Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCU5vZGUgYSA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCWZvciAoTm9kZSBjaGlsZCA9IGEuZ2V0Rmlyc3RDaGlsZCgpOyBjaGlsZCAhPSBudWxsOyBjaGlsZCA9IGNoaWxkLmdldE5leHRTaWJsaW5nKCkpIHsKLQkJCQlpZiAoY2hpbGQuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkNEQVRBX1NFQ1RJT05fTk9ERSkKLQkJCQkJY29udGludWU7Ci0JCQkJQ0RBVEFTZWN0aW9uIGNkYXRhID0gKENEQVRBU2VjdGlvbikgY2hpbGQ7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGNkYXRhLmdldERhdGEoKSk7Ci0JCQl9Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9DREFUQVNlY3Rpb25UZXN0Mi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQ0RBVEFTZWN0aW9uVGVzdDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI0NzY2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9DREFUQVNlY3Rpb25UZXN0Mi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQ0RBVEFTZWN0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBDREFUQVNlY3Rpb25UZXN0MiBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIENEQVRBU2VjdGlvblRlc3QyLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIENEQVRBU2VjdGlvblRlc3QyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBDREFUQVNlY3Rpb25UZXN0MigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgQ0RBVEFTZWN0aW9uVGVzdDIoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJQ0RBVEFTZWN0aW9uIGNkYXRhID0gZG9jdW1lbnQuY3JlYXRlQ0RBVEFTZWN0aW9uKCJjb250ZW50T2ZDREFUQVNlY3Rpb24iKTsKLQkJCWEuYXBwZW5kQ2hpbGQoY2RhdGEpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oY2RhdGEuZ2V0RGF0YSgpKTsKLQotCQkJY2RhdGEuc2V0RGF0YSgibmV3IGNvbnRlbnQiKTsKLQotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oY2RhdGEuZ2V0RGF0YSgpKTsKLQotCQkJY2RhdGEuc2V0RGF0YSgibmV3IGNvbnRlbnQiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGNkYXRhLmdldERhdGEoKSk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9DREFUQVNlY3Rpb25UZXN0My5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQ0RBVEFTZWN0aW9uVGVzdDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2UwMTRjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9DREFUQVNlY3Rpb25UZXN0My5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQ0RBVEFTZWN0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBDREFUQVNlY3Rpb25UZXN0MyBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIENEQVRBU2VjdGlvblRlc3QzLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIENEQVRBU2VjdGlvblRlc3QzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBDREFUQVNlY3Rpb25UZXN0MygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgQ0RBVEFTZWN0aW9uVGVzdDMoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJQ0RBVEFTZWN0aW9uIGNkYXRhID0gZG9jdW1lbnQuY3JlYXRlQ0RBVEFTZWN0aW9uKCJjb250ZW50T2ZDREFUQVNlY3Rpb24iKTsKLQkJCWEuYXBwZW5kQ2hpbGQoY2RhdGEpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oY2RhdGEuZ2V0RGF0YSgpKTsKLQotCQkJY2RhdGEuc2V0RGF0YSgibmV3IDwgY29udGVudCIpOwotCi0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihjZGF0YS5nZXREYXRhKCkpOwotCi0JCQljZGF0YS5zZXREYXRhKCJuZXcgPiBjb250ZW50Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihjZGF0YS5nZXREYXRhKCkpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRG9jVHlwZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0RvY1R5cGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhZWRlMDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRG9jVHlwZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIERvY1R5cGVUZXN0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRG9jVHlwZVRlc3QuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgRG9jVHlwZVRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIERvY1R5cGVUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBEb2NUeXBlVGVzdCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJRE9NRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlJRE9NRG9jdW1lbnRUeXBlIGRvY1R5cGUgPSAoSURPTURvY3VtZW50VHlwZSkgZG9jdW1lbnQuY3JlYXRlRG9jdHlwZSgiSFRNTCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoZG9jVHlwZSk7Ci0JCQlFbGVtZW50IGh0bWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJIVE1MIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChodG1sKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJZG9jVHlwZS5zZXRTeXN0ZW1JZCgic3l0ZW0iKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJZG9jVHlwZS5zZXRQdWJsaWNJZCgicHVibGljIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWRvY3VtZW50Lmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpLCBkb2NUeXBlKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbGVtZW50VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRWxlbWVudFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNmN2NhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbGVtZW50VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBFbGVtZW50VGVzdCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVsZW1lbnRUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVsZW1lbnRUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbGVtZW50VGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgRWxlbWVudCBjaGFuZ2VUYWdOYW1lKEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIHRhZ05hbWUpIHsKLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBlbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKTsKLQkJTm9kZSBwYXJlbnQgPSBlbGVtZW50LmdldFBhcmVudE5vZGUoKTsKLQkJRWxlbWVudCBuZXdFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsKLQkJTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZXMoKTsKLQkJd2hpbGUgKGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCkgPiAwKSB7Ci0JCQlBdHRyIGF0dHIgPSAoQXR0cikgYXR0cmlidXRlcy5pdGVtKDApOwotCQkJYXR0ciA9IGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlTm9kZShhdHRyKTsKLQkJCW5ld0VsZW1lbnQuc2V0QXR0cmlidXRlTm9kZShhdHRyKTsKLQkJfQotCQl3aGlsZSAoZWxlbWVudC5oYXNDaGlsZE5vZGVzKCkpIHsKLQkJCU5vZGUgY2hpbGQgPSBlbGVtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCWNoaWxkID0gZWxlbWVudC5yZW1vdmVDaGlsZChjaGlsZCk7Ci0JCQluZXdFbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTsKLQkJfQotCQlwYXJlbnQuaW5zZXJ0QmVmb3JlKG5ld0VsZW1lbnQsIGVsZW1lbnQpOwotCQlwYXJlbnQucmVtb3ZlQ2hpbGQoZWxlbWVudCk7Ci0JCXJldHVybiBuZXdFbGVtZW50OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBFbGVtZW50VGVzdCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAwLCAwLCAiPGE+PGIgZT1cImZcIiBjPVwiZFwiPjxnIC8+PGggLz48L2I+PC9hPiIpOwotCQkJTm9kZSBhID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJRWxlbWVudCBiID0gKEVsZW1lbnQpIGEuZ2V0Rmlyc3RDaGlsZCgpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQkvL0VsZW1lbnQgaSA9Ci0JCQljaGFuZ2VUYWdOYW1lKGIsICJpIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRWxlbWVudFRlc3QyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbGVtZW50VGVzdDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNmMWE3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbGVtZW50VGVzdDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIEVsZW1lbnRUZXN0MiBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVsZW1lbnRUZXN0Mi4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbGVtZW50VGVzdDIoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEVsZW1lbnRUZXN0MigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgRWxlbWVudFRlc3QyKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0JCQlFbGVtZW50IGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiIik7Ci0JCQlUZXh0IHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYyIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoYSk7Ci0JCQlhLmFwcGVuZENoaWxkKGIpOwotCQkJYi5hcHBlbmRDaGlsZCh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJYS5zZXRQcmVmaXgoIngiKTsKLQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJhLnRhZ05hbWU9IiArIGEuZ2V0VGFnTmFtZSgpKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJYi5zZXRQcmVmaXgoInkiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbGVtZW50VGVzdDMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VsZW1lbnRUZXN0My5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWY0NjViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VsZW1lbnRUZXN0My5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgRWxlbWVudFRlc3QzIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRWxlbWVudFRlc3QzLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVsZW1lbnRUZXN0MyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgRWxlbWVudFRlc3QzKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBFbGVtZW50VGVzdDMoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIng6YSIpOwotCQkJRWxlbWVudCBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYiIpOwotCQkJVGV4dCB0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImMiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJYS5hcHBlbmRDaGlsZChiKTsKLQkJCWIuYXBwZW5kQ2hpbGQodCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWEuc2V0UHJlZml4KCIiKTsKLQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJhLnRhZ05hbWU9IiArIGEuZ2V0VGFnTmFtZSgpKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJYS5zZXRQcmVmaXgoInkiKTsKLQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJhLnRhZ05hbWU9IiArIGEuZ2V0VGFnTmFtZSgpKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJYS5zZXRQcmVmaXgoInkiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VtcHR5VGV4dFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VtcHR5VGV4dFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUwY2JmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbXB0eVRleHRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBFbXB0eVRleHRUZXN0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRW1wdHlUZXh0VGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbXB0eVRleHRUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbXB0eVRleHRUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBFbXB0eVRleHRUZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYSIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0KTsKLQkJCUVsZW1lbnQgYnIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCUiIpOwotCQkJcC5hcHBlbmRDaGlsZChicik7Ci0JCQlUZXh0IHRleHQyID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0Mik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dDMgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik7Ci0JCQlwLmluc2VydEJlZm9yZSh0ZXh0MywgdGV4dDIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0My5zZXREYXRhKCJiIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXAucmVtb3ZlQ2hpbGQodGV4dDIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VtcHR5VGV4dFRlc3QyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbXB0eVRleHRUZXN0Mi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzAwNjQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VtcHR5VGV4dFRlc3QyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBFbXB0eVRleHRUZXN0MiBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVtcHR5VGV4dFRlc3QyLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVtcHR5VGV4dFRlc3QyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbXB0eVRleHRUZXN0MigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgRW1wdHlUZXh0VGVzdDIoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQuc2V0RGF0YSgiYSIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LnNldERhdGEoIiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCIik7Ci0JCQlwLmFwcGVuZENoaWxkKGIpOwotCQkJcC5yZW1vdmVDaGlsZCh0ZXh0KTsKLQkJCWIuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQuc2V0RGF0YSgiYSIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VtcHR5VGV4dFRlc3QzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbXB0eVRleHRUZXN0My5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWRmYjdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VtcHR5VGV4dFRlc3QzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBFbXB0eVRleHRUZXN0MyBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVtcHR5VGV4dFRlc3QzLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVtcHR5VGV4dFRlc3QzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbXB0eVRleHRUZXN0MygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgRW1wdHlUZXh0VGVzdDMoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0JCQlkb2N1bWVudC5pbnNlcnRCZWZvcmUoYSwgdGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGViOWNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIEVudGl0eVRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbnRpdHlUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVudGl0eVRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEVudGl0eVRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVudGl0eVRlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiZndDsiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3QyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYjE0NTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIEVudGl0eVRlc3QyIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRW50aXR5VGVzdDIuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgRW50aXR5VGVzdDIoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEVudGl0eVRlc3QyKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBFbnRpdHlUZXN0MigpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHApOwotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImEiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQuc2V0RGF0YSgiYSZndDsiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3QzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0My5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjU5MWU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3QzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBFbnRpdHlUZXN0MyBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVudGl0eVRlc3QzLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVudGl0eVRlc3QzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbnRpdHlUZXN0MygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgRW50aXR5VGVzdDMoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJhIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LnNldERhdGEoImFiIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQuc2V0RGF0YSgiYWImIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQuc2V0RGF0YSgiYWImYyIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LnNldERhdGEoImRhYiZjIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQuc2V0RGF0YSgiZGFiJmNlIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0NC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYxNzQ0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0NC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgRW50aXR5VGVzdDQgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbnRpdHlUZXN0NC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbnRpdHlUZXN0NChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgRW50aXR5VGVzdDQoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVudGl0eVRlc3Q0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYSZiIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHRleHQyID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpOwotCQkJcC5pbnNlcnRCZWZvcmUodGV4dDIsIHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0Mi5zZXREYXRhKCJjIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQyLnNldERhdGEoImNhJmIiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJcC5yZW1vdmVDaGlsZCh0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3Q1LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0NS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDZlMjY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3Q1LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBFbnRpdHlUZXN0NSBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVudGl0eVRlc3Q1LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVudGl0eVRlc3Q1KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbnRpdHlUZXN0NSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgRW50aXR5VGVzdDUoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJhJmIiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dDIgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYSZiIik7Ci0JCQlwLmluc2VydEJlZm9yZSh0ZXh0MiwgdGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0Ni5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU1YTljMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0Ni5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgRW50aXR5VGVzdDYgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbnRpdHlUZXN0Ni4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbnRpdHlUZXN0NihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgRW50aXR5VGVzdDYoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVudGl0eVRlc3Q2KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYSYiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dDIgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYSYiKTsKLQkJCXAuaW5zZXJ0QmVmb3JlKHRleHQyLCB0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3Q3LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0Ny5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTA5MmQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3Q3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotCi1wdWJsaWMgY2xhc3MgRW50aXR5VGVzdDcgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbnRpdHlUZXN0Ny4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbnRpdHlUZXN0NyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgRW50aXR5VGVzdDcoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVudGl0eVRlc3Q3KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJLy9Eb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGE+YSYjNjU7JiN4NDE7JnVuazsmdW5rJnVuazwvYT4iKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3Q4LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0OC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjJmOTM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3Q4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotCi1wdWJsaWMgY2xhc3MgRW50aXR5VGVzdDggZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbnRpdHlUZXN0OC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbnRpdHlUZXN0OChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgRW50aXR5VGVzdDgoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVudGl0eVRlc3Q4KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJLy9Eb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiJmlibTsmcnRwOyIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3Q5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExZWZmOGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBFbnRpdHlUZXN0OSBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVudGl0eVRlc3Q5LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVudGl0eVRlc3Q5KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbnRpdHlUZXN0OSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgRW50aXR5VGVzdDkoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQkvL0RvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICImbHQ7Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dCh0aGlzLCA0LCAwLCAiJmd0Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dCh0aGlzLCA3LCAwLCAiOyIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9Nb2RlbFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBmODExNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9Nb2RlbFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlscy5EYXRlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnV0aWxzLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHMuU3RyaW5nQ29tcGFyZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlscy5UZXN0V3JpdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudXRpbC5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50UmVnaW9uQ2hlY2tlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBNb2RlbFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyB0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeCA9ICJQYXJzZXJSZXN1bHRzIjsKLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgZmlsZUV4dGVuc2lvbiA9ICIudHh0IjsKLQlwcm90ZWN0ZWQgVGVzdFdyaXRlciBmT3V0cHV0V3JpdGVyID0gbmV3IFRlc3RXcml0ZXIoKTsKLQlwcml2YXRlIGludCBSRUFEX0JVRkZFUl9TSVpFID0gNDA5NjsKLQotCXByaXZhdGUgYm9vbGVhbiBlY2hvVG9TeXN0ZW1PdXQgPSBmYWxzZTsKLQlwcml2YXRlIGJvb2xlYW4gcHJpbnRlZE9uY2U7Ci0JcHJpdmF0ZSBib29sZWFuIHByaW50U3VtbWFyeVRvU3lzdGVtT3V0OwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIE1vZGVsVGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBNb2RlbFRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JCXRyeSB7Ci0JCQlwcmludENsYXNzKCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgTW9kZWxUZXN0KCkgewotCQl0aGlzKCJkdW1teSIpOwotCQkvLwkJdHJ5IHsKLQkJLy8JCQlwcmludENsYXNzKCk7Ci0JCS8vCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCS8vCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJLy8JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElET01Nb2RlbCBjcmVhdGVIVE1MTW9kZWwoKSB7Ci0KLQkJLy9yZXR1cm4gbmV3IFhNTE1vZGVsSW1wbCgpOwotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoInRlc3QuaHRtbCIsIG5ldyBOdWxsSW5wdXRTdHJlYW0oKSwgbnVsbCk7Ci0KLQkJCS8vIGFsd2F5cyB1c2UgdGhlIHNhbWUgbGluZSBkZWxpbWl0ZXIgZm9yIHRoZXNlIHRlc3RzLCByZWdhcmRsZXNzCi0JCQkvLyBvZgotCQkJLy8gcGxhZm9ybSBvciBwcmVmZXJlbmNlIHNldHRpbmdzCi0JCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRMaW5lRGVsaW1pdGVyKFRlc3RXcml0ZXIuY29tbW9uRU9MKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJLy9hc3NlcnRUcnVlKCJiYXNpYyBYTUwgZW1wdHkgbW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQiLCBtb2RlbCAhPQotCQkvLyBudWxsKTsKLQkJcmV0dXJuIChJRE9NTW9kZWwpIG1vZGVsOwotCi0JfQotCi0JcHVibGljIHN0YXRpYyBJRE9NTW9kZWwgY3JlYXRlWE1MTW9kZWwoKSB7Ci0KLQkJLy9yZXR1cm4gbmV3IFhNTE1vZGVsSW1wbCgpOwotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQkJLy9hc3NlcnRUcnVlKCJtb2RlbE1hbmFnZXIgbXVzdCBub3QgYmUgbnVsbCIsIG1vZGVsTWFuYWdlciAhPQotCQkJLy8gbnVsbCk7Ci0KLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdCgidGVzdC54bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCi0JCQkvLyBhbHdheXMgdXNlIHRoZSBzYW1lIGxpbmUgZGVsaW1pdGVyIGZvciB0aGVzZSB0ZXN0cywgcmVnYXJkbGVzcwotCQkJLy8gb2YKLQkJCS8vIHBsYWZvcm0gb3IgcHJlZmVyZW5jZSBzZXR0aW5ncwotCQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0TGluZURlbGltaXRlcihUZXN0V3JpdGVyLmNvbW1vbkVPTCk7Ci0KLQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQkvL2Fzc2VydFRydWUoImJhc2ljIFhNTCBlbXB0eSBtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCIsIG1vZGVsICE9Ci0JCS8vIG51bGwpOwotCQlyZXR1cm4gKElET01Nb2RlbCkgbW9kZWw7Ci0KLQl9Ci0KLQkvKioKLQkgKi8KLQlwcml2YXRlIHZvaWQgcHJpbnRDbGFzcygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWZPdXRwdXRXcml0ZXIud3JpdGVsbihnZXRDbGFzcygpLmdldE5hbWUoKSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHByaW50RXhjZXB0aW9uKEV4Y2VwdGlvbiBleCkgewotCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJpbnROb2RlKE5vZGUgbm9kZSwgaW50IGluZGVudCkgewotCQl0cnkgewotCQkJU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoMTApOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbmRlbnQ7IGkrKykKLQkJCQlidWZmZXIuYXBwZW5kKCItLSIpOwotCQkJYnVmZmVyLmFwcGVuZChTdHJpbmdVdGlscy5lc2NhcGUobm9kZS50b1N0cmluZygpKSk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oYnVmZmVyLnRvU3RyaW5nKCkpOwotCQkJaW5kZW50Kys7Ci0JCQlOb2RlIGNoaWxkID0gbm9kZS5nZXRGaXJzdENoaWxkKCk7Ci0JCQl3aGlsZSAoY2hpbGQgIT0gbnVsbCkgewotCQkJCXByaW50Tm9kZShjaGlsZCwgaW5kZW50KTsKLQkJCQljaGlsZCA9IGNoaWxkLmdldE5leHRTaWJsaW5nKCk7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkJcHJpbnRFeGNlcHRpb24oZXgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgcHJpbnRTb3VyY2UoSURPTU1vZGVsIG1vZGVsKSB7Ci0JCXRyeSB7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oIlNvdXJjZSA6Iik7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4obW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0VGV4dCgpKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiIik7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkJcHJpbnRFeGNlcHRpb24oZXgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgcHJpbnRUcmVlKElET01Nb2RlbCBtb2RlbCkgewotCQl0cnkgewotCQkJcHJpbnRGbGF0TW9kZWwobW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkpOwotCQkJbmV3IFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkNoZWNrZXIoZk91dHB1dFdyaXRlcikuY2hlY2tNb2RlbChtb2RlbCk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oIlRyZWUgOiIpOwotCQkJcHJpbnROb2RlKG1vZGVsLmdldERvY3VtZW50KCksIDApOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCIiKTsKLQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCXByaW50RXhjZXB0aW9uKGV4KTsKLQkJfQotCi0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpIHsKLQkJdHJ5IHsKLQkJCVN0cmluZyB0ZXN0T3V0cHV0RGlyZWN0b3J5ID0gdGVzdFJlc3VsdHNEaXJlY3RvcnlQcmVmaXggKyBEYXRlVXRpbC5ub3coKTsKLQkJCVN0cmluZyBjdXJyZW50RmlsZW5hbWUgPSBnZXRDbGFzcygpLmdldE5hbWUoKSArIGZpbGVFeHRlbnNpb247Ci0JCQlGaWxlIGZpbGVvdXQgPSBGaWxlVXRpbC5tYWtlRmlsZUZvcih0ZXN0T3V0cHV0RGlyZWN0b3J5LCBjdXJyZW50RmlsZW5hbWUsIHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4KTsKLQkJCVdyaXRlciBmaWxlV3JpdGVyID0gbmV3IEZpbGVXcml0ZXIoZmlsZW91dCk7Ci0JCQlmaWxlV3JpdGVyLndyaXRlKGZPdXRwdXRXcml0ZXIudG9TdHJpbmcoKSk7Ci0JCQlmaWxlV3JpdGVyLmNsb3NlKCk7Ci0JCQljb21wYXJlV2l0aFByZXZpb3VzUmVzdWx0cyhmT3V0cHV0V3JpdGVyLCBjdXJyZW50RmlsZW5hbWUpOwotCi0JCQlpZiAoZWNob1RvU3lzdGVtT3V0KSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKGZPdXRwdXRXcml0ZXIudG9TdHJpbmcoKSk7Ci0JCQl9Ci0KLQkJCWZPdXRwdXRXcml0ZXIuY2xvc2UoKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIE1ldGhvZCBjb21wYXJlV2l0aFByZXZpb3VzUmVzdWx0cy4KLQkgKiAKLQkgKiBAcGFyYW0gb3V0cHV0V3JpdGVyCi0JICogQHBhcmFtIGN1cnJlbnRGaWxlbmFtZQotCSAqLwotCXByaXZhdGUgdm9pZCBjb21wYXJlV2l0aFByZXZpb3VzUmVzdWx0cyhUZXN0V3JpdGVyIG91dHB1dFdyaXRlciwgU3RyaW5nIGN1cnJlbnRGaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJYm9vbGVhbiBzdWNjZXNzID0gZmFsc2U7Ci0JCUZpbGUgcHJldmlvdXNSZXN1bHRzRGlyID0gRmlsZVV0aWwuZ2V0UHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5KHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4KTsKLQkJaWYgKHByZXZpb3VzUmVzdWx0c0RpciAhPSBudWxsKSB7Ci0JCQlTdHJpbmcgY3VycmVudFJlc3VsdHMgPSBvdXRwdXRXcml0ZXIudG9TdHJpbmcoKTsKLQkJCUZpbGUgcHJldmlvdXNSZXN1bHRzRmlsZSA9IG5ldyBGaWxlKHByZXZpb3VzUmVzdWx0c0RpciwgY3VycmVudEZpbGVuYW1lKTsKLQkJCUZpbGVSZWFkZXIgcHJldmlvdXNSZXN1bHRzRmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKHByZXZpb3VzUmVzdWx0c0ZpbGUpOwotCQkJU3RyaW5nIHByZXZpb3VzUmVzdWx0cyA9IHJlYWRTdHJpbmcocHJldmlvdXNSZXN1bHRzRmlsZVJlYWRlcik7Ci0JCQlTdHJpbmdDb21wYXJlVXRpbCBzdHJpbmdDb21wYXJlID0gbmV3IFN0cmluZ0NvbXBhcmVVdGlsKCk7Ci0JCQkvLyB0cnlpbmcgdG8gImZvcmNlIiB0aGUgc2FtZSBsaW5lZGVsaW10ZXIgZGlkbid0IHdvcmsgd2VsbCwKLQkJCS8vIEkgdGhpbmsgc2luY2UgdGhlIGxpbmUgZGVsaW1pdGVyIGlzIGlucHV0IG9uIHNvbWUgdGVzdHMsCi0JCQkvLyBhbmQgQ1ZTIGlzIGxpa2VseSB0byBjaGFuZ2UgYW55d2F5IChmb3IgQVNDSUkgZmlsZXMpLgotCQkJLy8gc28gd2UnbGwgaWdub3JlIGluIG91ciBjb21wYXJpc29ucy4gTm90ZTogd2Ugd291bGRuJ3QKLQkJCS8vIHdhbnQgdG8gaWdub3JlIHdoaXRlc3BhY2UuIFRoZXJlIG1pZ2h0IGFjdHVhbGx5IGJlIHNvbWUKLQkJCS8vIHRlc3RzIHRoYXQgYXJlIG5vdCBhcyBhY2N1cmF0ZSBpZiB3ZSBpZ25vcmUgRU9MLCBidXQgdGhlcmUKLQkJCS8vIHNlZW1zIHRvIGJlIG5vIGVhc3kgd2F5IHRvIGhhbmRsZSwgd2l0aCBvdXQgYSBsb3Qgb2YgdHJvdWJsZS4KLQkJCWlmICghc3RyaW5nQ29tcGFyZS5lcXVhbHNJZ25vcmVMaW5lU2VwZXJhdG9yKHByZXZpb3VzUmVzdWx0cywgY3VycmVudFJlc3VsdHMpKSB7Ci0JCQkJLy8gcHJldmlvdXNSZXN1bHRzLmVxdWFscyhjdXJyZW50UmVzdWx0cykpIHsKLQkJCQkvLyBmYWlsCi0JCQkJc3VjY2VzcyA9IGZhbHNlOwotCi0JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKGN1cnJlbnRGaWxlbmFtZSArICIgZmFpbGVkIGNvbXBhcmlzb24gdG8gcHJldmlvdXMgcmVzdWx0cyIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiUHJldmlvdXM6ICIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihwcmV2aW91c1Jlc3VsdHMpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ3VycmVudDogIik7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKGN1cnJlbnRSZXN1bHRzKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXN1Y2Nlc3MgPSB0cnVlOwotCQkJCWlmIChwcmludFN1bW1hcnlUb1N5c3RlbU91dCkgewotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKGN1cnJlbnRGaWxlbmFtZSArICIgY29tcGFyZWQgb2siKTsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJaWYgKCFwcmludGVkT25jZSkgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiTm8gUHJldmlvdXMgRGlyZWN0b3J5IGZvdW5kIC4uLiBjb3VsZG4ndCBjb21wYXJlICIgKyBjdXJyZW50RmlsZW5hbWUgKyAiIHdpdGggcHJldmlvdXMgcmVzdWx0cyIpOwotCQkJCXByaW50ZWRPbmNlID0gdHJ1ZTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJjdXJyZW50IGlzIG5vdCBlcXVhbCB0byByZWZlcmVuY2UgcmVzdWx0cyBmb3IgIiArIGN1cnJlbnRGaWxlbmFtZSwgc3VjY2Vzcyk7Ci0JfQotCi0JLyoqCi0JICogTWV0aG9kIHJlYWRTdHJpbmcuCi0JICogCi0JICogQHBhcmFtIHByZXZpb3VzUmVzdWx0c0ZpbGVSZWFkZXIKLQkgKiBAcmV0dXJuIFN0cmluZwotCSAqLwotCXByaXZhdGUgU3RyaW5nIHJlYWRTdHJpbmcoRmlsZVJlYWRlciBmaWxlUmVhZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlyZXR1cm4gcmVhZElucHV0U3RyZWFtKGZpbGVSZWFkZXIpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIHJlYWRJbnB1dFN0cmVhbShJbnB1dFN0cmVhbVJlYWRlciBpbnB1dFN0cmVhbVJlYWRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaW50IG51bVJlYWQgPSAwOwotCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQljaGFyIHRCdWZmW10gPSBuZXcgY2hhcltSRUFEX0JVRkZFUl9TSVpFXTsKLQkJd2hpbGUgKChudW1SZWFkID0gaW5wdXRTdHJlYW1SZWFkZXIucmVhZCh0QnVmZiwgMCwgdEJ1ZmYubGVuZ3RoKSkgIT0gLTEpIHsKLQkJCWJ1ZmZlci5hcHBlbmQodEJ1ZmYsIDAsIG51bVJlYWQpOwotCQl9Ci0JCS8vIHJlbWVtYmVyIC0tIHdlIGRpZG4ndCBvcGVuIHN0cmVhbSAuLi4gc28gd2UgZG9uJ3QgY2xvc2UgaXQKLQkJcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwotCX0KLQotCXB1YmxpYyBhYnN0cmFjdCB2b2lkIHRlc3RNb2RlbCgpOwotCi0JcHJvdGVjdGVkIHZvaWQgcHJpbnRGbGF0TW9kZWwoSVN0cnVjdHVyZWREb2N1bWVudCBmbGF0TW9kZWwpIHsKLQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCIiKTsKLQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJTdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Iik7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZmxhdG5vZGUgPSBmbGF0TW9kZWwuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKTsKLQkJd2hpbGUgKGZsYXRub2RlICE9IG51bGwpIHsKLQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGZsYXRub2RlLnRvU3RyaW5nKCkpOwotCQkJZmxhdG5vZGUgPSBmbGF0bm9kZS5nZXROZXh0KCk7Ci0KLQkJfQotCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oIiIpOwotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL05vZGVMaXN0VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvTm9kZUxpc3RUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1ZjRiMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvTm9kZUxpc3RUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgY2xhc3MgTm9kZUxpc3RUZXN0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgUElUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIE5vZGVMaXN0VGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgTm9kZUxpc3RUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBOb2RlTGlzdFRlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPHA+PC9wPiIpOwotCQkJTm9kZSBwYXJlbnQgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0KLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgMTsgaSsrKSB7Ci0JCQkJcGFyZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImMiKSk7Ci0JCQl9Ci0KLQkJCWl0ZXJhdGUocGFyZW50KTsKLQotCQkJZm9yIChpbnQgaSA9IDE7IGkgPCA1OyBpKyspIHsKLQkJCQlwYXJlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYyIpKTsKLQkJCX0KLQotCQkJaXRlcmF0ZShwYXJlbnQpOwotCi0JCQlmb3IgKGludCBpID0gNTsgaSA8IDEwOyBpKyspIHsKLQkJCQlwYXJlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYyIpKTsKLQkJCX0KLQotCQkJaXRlcmF0ZShwYXJlbnQpOwotCi0JCQlmb3IgKGludCBpID0gMTA7IGkgPCAyMDsgaSsrKSB7Ci0JCQkJcGFyZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImMiKSk7Ci0JCQl9Ci0KLQkJCWl0ZXJhdGUocGFyZW50KTsKLQotCQkJZm9yIChpbnQgaSA9IDIwOyBpIDwgNTA7IGkrKykgewotCQkJCXBhcmVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjIikpOwotCQkJfQotCi0JCQlpdGVyYXRlKHBhcmVudCk7Ci0KLQkJCWZvciAoaW50IGkgPSA1MDsgaSA8IDEwMDsgaSsrKSB7Ci0JCQkJcGFyZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImMiKSk7Ci0JCQl9Ci0KLQkJCWl0ZXJhdGUocGFyZW50KTsKLQotCQkJZm9yIChpbnQgaSA9IDEwMDsgaSA8IDIwMDsgaSsrKSB7Ci0JCQkJcGFyZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImMiKSk7Ci0JCQl9Ci0KLQkJCWl0ZXJhdGUocGFyZW50KTsKLQotCQkJZm9yIChpbnQgaSA9IDIwMDsgaSA8IDUwMDsgaSsrKSB7Ci0JCQkJcGFyZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImMiKSk7Ci0JCQl9Ci0KLQkJCWl0ZXJhdGUocGFyZW50KTsKLQotCQkJZm9yIChpbnQgaSA9IDUwMDsgaSA8IDEwMDA7IGkrKykgewotCQkJCXBhcmVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjIikpOwotCQkJfQotCi0JCQlpdGVyYXRlKHBhcmVudCk7Ci0KLQkJCWZvciAoaW50IGkgPSAxMDAwOyBpIDwgMjAwMDsgaSsrKSB7Ci0JCQkJcGFyZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImMiKSk7Ci0JCQl9Ci0KLQkJCWl0ZXJhdGUocGFyZW50KTsKLQotCQkJZm9yIChpbnQgaSA9IDIwMDA7IGkgPCA1MDAwOyBpKyspIHsKLQkJCQlwYXJlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYyIpKTsKLQkJCX0KLQotCQkJaXRlcmF0ZShwYXJlbnQpOwotCi0JCQlmb3IgKGludCBpID0gNTAwMDsgaSA8IDEwMDAwOyBpKyspIHsKLQkJCQlwYXJlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYyIpKTsKLQkJCX0KLQotCQkJaXRlcmF0ZShwYXJlbnQpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLQotCXByaXZhdGUgdm9pZCBpdGVyYXRlKE5vZGUgcGFyZW50KSB7Ci0JCWxvbmcgc3RhcnQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJaW50IGkgPSAwOwotCQlpbnQgdCA9IDA7Ci0JCXdoaWxlICh0IDwgMTAwMCkgewotCQkJTm9kZUxpc3QgY2hpbGROb2RlcyA9IHBhcmVudC5nZXRDaGlsZE5vZGVzKCk7Ci0JCQlpbnQgbGVuZ3RoID0gY2hpbGROb2Rlcy5nZXRMZW5ndGgoKTsKLQkJCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotCQkJCWNoaWxkTm9kZXMuaXRlbShpKTsKLQkJCX0KLQkJCS8vIHRoZXNlIDIgbGluZXMgYXJlIHJlcXVpcmVkIHRvIGludmFsaWRhdGUgdGhlIGNhY2hlCi0JCQlwYXJlbnQuYXBwZW5kQ2hpbGQocGFyZW50LmdldE93bmVyRG9jdW1lbnQoKS5jcmVhdGVUZXh0Tm9kZSgiIikpOwotCQkJcGFyZW50LnJlbW92ZUNoaWxkKHBhcmVudC5nZXRMYXN0Q2hpbGQoKSk7Ci0JCQl0Kys7Ci0JCX0KLQkJZmxvYXQgZCA9ICgoZmxvYXQpIChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0KSkgLyB0OwotCQlTeXN0ZW0ub3V0LnByaW50bG4oZCArICIgbXMgZm9yICIgKyBpICsgIiBjaGlsZCBub2RlcyIpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9OdWxsSW5wdXRTdHJlYW0uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL051bGxJbnB1dFN0cmVhbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDgxMGMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL051bGxJbnB1dFN0cmVhbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZW5zIEx1a293c2tpL0lubm9vcHJhY3QgLSBpbml0aWFsIHJlbmFtaW5nL3Jlc3RydWN0dXJpbmcKLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotCi1jbGFzcyBOdWxsSW5wdXRTdHJlYW0gZXh0ZW5kcyBJbnB1dFN0cmVhbSB7Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIGphdmEuaW8uSW5wdXRTdHJlYW0jbWFyayhpbnQpCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG1hcmsoaW50IHJlYWRsaW1pdCkgewotCQkvLyBub3RoaW5nIHRvIGRvCi0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBqYXZhLmlvLklucHV0U3RyZWFtI21hcmtTdXBwb3J0ZWQoKQotCSAqLwotCXB1YmxpYyBib29sZWFuIG1hcmtTdXBwb3J0ZWQoKSB7Ci0JCS8vIHdlIGNhbiBtYXJrIG5vdGhpbmcuCi0JCS8vIGFuZCwgd2UgYXJlIHVzaW5nIHRoaXMgTnVsbCBjbGFzcyBzcGVjaWZpY2FsbHkgZm9yCi0JCS8vIGEgImZha2UiIHJlc2V0dGFibGUgc3RyZWFtLgotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIGphdmEuaW8uSW5wdXRTdHJlYW0jcmVhZCgpCi0JICovCi0JcHVibGljIGludCByZWFkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBqYXZhLmlvLklucHV0U3RyZWFtI3Jlc2V0KCkKLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcmVzZXQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBub3RoaW5nIHRvIGRvCi0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBqYXZhLmlvLklucHV0U3RyZWFtI3NraXAobG9uZykKLQkgKi8KLQlwdWJsaWMgbG9uZyBza2lwKGxvbmcgbikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJcmV0dXJuIDA7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUElUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9QSVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U3MmE4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9QSVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBQSVRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBQSVRlc3QuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgUElUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBQSVRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFBJVGVzdCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICI8YT48P2VjaG8gJFBIUF9TRUxGPz48L2E+Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCU5vZGUgYSA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCWZvciAoTm9kZSBjaGlsZCA9IGEuZ2V0Rmlyc3RDaGlsZCgpOyBjaGlsZCAhPSBudWxsOyBjaGlsZCA9IGNoaWxkLmdldE5leHRTaWJsaW5nKCkpIHsKLQkJCQlpZiAoY2hpbGQuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSkKLQkJCQkJY29udGludWU7Ci0JCQkJUHJvY2Vzc2luZ0luc3RydWN0aW9uIHBpID0gKFByb2Nlc3NpbmdJbnN0cnVjdGlvbikgY2hpbGQ7Ci0JCQkJU3RyaW5nIHRhcmdldCA9IHBpLmdldFRhcmdldCgpOwotCQkJCWlmICh0YXJnZXQgPT0gbnVsbCkKLQkJCQkJdGFyZ2V0ID0gIm51bGwiOwotCQkJCVN0cmluZyBkYXRhID0gcGkuZ2V0RGF0YSgpOwotCQkJCWlmIChkYXRhID09IG51bGwpCi0JCQkJCWRhdGEgPSAibnVsbCI7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJ0YXJnZXQoIiArIHRhcmdldCArICIpIGRhdGEgKCIgKyBkYXRhICsgIikiKTsKLQkJCX0KLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1BhcnNlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1BhcnNlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFkOWI5Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9QYXJzZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIFBhcnNlclRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBQYXJzZXJUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFBhcnNlclRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFBhcnNlclRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFBhcnNlclRlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMCwgMCwgIjxQPjxCPjwvQj48Qj48L0I+PC9QPjxQPjwvUD4iKTsKLQkJCU5vZGUgcCA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCU5vZGUgYiA9IHAuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJTm9kZSBiMiA9IGIuZ2V0TmV4dFNpYmxpbmcoKTsKLQkJCU5vZGUgcDIgPSBwLmdldE5leHRTaWJsaW5nKCk7Ci0JCQkvKgotCQkJICogRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJICogZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7IEVsZW1lbnQgYiA9Ci0JCQkgKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCIik7IHAuYXBwZW5kQ2hpbGQoYik7IEVsZW1lbnQgYjIgPQotCQkJICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQiIpOyBwLmFwcGVuZENoaWxkKGIyKTsgRWxlbWVudCBwMiA9Ci0JCQkgKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7IGRvY3VtZW50LmFwcGVuZENoaWxkKHAyKTsKLQkJCSAqLwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMCwgMCwgImEiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsICgoSURPTU5vZGUpIGIpLmdldFN0YXJ0T2Zmc2V0KCksIDAsICJiIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAoKElET01Ob2RlKSBiMikuZ2V0U3RhcnRPZmZzZXQoKSwgMCwgImMiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsICgoSURPTU5vZGUpIGIyKS5nZXRFbmRPZmZzZXQoKSwgMCwgImQiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsICgoSURPTU5vZGUpIHAyKS5nZXRTdGFydE9mZnNldCgpLCAwLCAiZSIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgKChJRE9NTm9kZSkgcDIpLmdldFN0YXJ0T2Zmc2V0KCkgKyAzLCAwLCAiZiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgKChJRE9NTm9kZSkgcDIpLmdldEVuZE9mZnNldCgpLCAwLCAiZyIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUGFyc2VyVGVzdDIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1BhcnNlclRlc3QyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3OTBiYTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUGFyc2VyVGVzdDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIFBhcnNlclRlc3QyIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgUGFyc2VyVGVzdDIuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgUGFyc2VyVGVzdDIoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFBhcnNlclRlc3QyKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBQYXJzZXJUZXN0MigpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAwLCAwLCAiPGEgYj1cIlwiICBjPVwiY1wiPiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IGEgPSAoRWxlbWVudCkgZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMgPSBhLmdldEF0dHJpYnV0ZXMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlcy5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQkJTm9kZSBhdHRyID0gYXR0cmlidXRlcy5pdGVtKGkpOwotCQkJCVN0cmluZyBuYW1lID0gYXR0ci5nZXROb2RlTmFtZSgpOwotCQkJCVN0cmluZyB2YWx1ZSA9IGF0dHIuZ2V0Tm9kZVZhbHVlKCk7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKG5hbWUgKyAiPVsiICsgdmFsdWUgKyAiXSIpOwotCQkJfQotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgOCwgMCwgImQiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJYSA9IChFbGVtZW50KSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlhdHRyaWJ1dGVzID0gYS5nZXRBdHRyaWJ1dGVzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJCU5vZGUgYXR0ciA9IGF0dHJpYnV0ZXMuaXRlbShpKTsKLQkJCQlTdHJpbmcgbmFtZSA9IGF0dHIuZ2V0Tm9kZU5hbWUoKTsKLQkJCQlTdHJpbmcgdmFsdWUgPSBhdHRyLmdldE5vZGVWYWx1ZSgpOwotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihuYW1lICsgIj1bIiArIHZhbHVlICsgIl0iKTsKLQkJCX0KLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDgsIDEsICIiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJYSA9IChFbGVtZW50KSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlhdHRyaWJ1dGVzID0gYS5nZXRBdHRyaWJ1dGVzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJCU5vZGUgYXR0ciA9IGF0dHJpYnV0ZXMuaXRlbShpKTsKLQkJCQlTdHJpbmcgbmFtZSA9IGF0dHIuZ2V0Tm9kZU5hbWUoKTsKLQkJCQlTdHJpbmcgdmFsdWUgPSBhdHRyLmdldE5vZGVWYWx1ZSgpOwotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihuYW1lICsgIj1bIiArIHZhbHVlICsgIl0iKTsKLQkJCX0KLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9QYXJzZXJUZXN0My5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUGFyc2VyVGVzdDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU1OWViNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9QYXJzZXJUZXN0My5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuU3RydWN0dXJlZERvY3VtZW50RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBQYXJzZXJUZXN0MyBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFBhcnNlclRlc3QzLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFBhcnNlclRlc3QzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBQYXJzZXJUZXN0MygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgUGFyc2VyVGVzdDMoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQkvL1N0cnVjdHVyZWREb2N1bWVudEV2ZW50IGV2ZW50ID0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAwLCAwLCAiPGEgYiAgPiIpOwotCQkJLy8gZG9udCdzIHByaW50IGluc3RhbmNlIG9mIGV2ZW50LCBvciBtYW55IHRlc3RzIHdpbGwgZmFpbCB3aGVuCi0JCQkvLyBldmVudCBjbGFzcyBpcyBjaGFuZ2VkIChleGFjdGx5IHdoYXQgaXMgbm90IG5lZWRlZCBmb3IgdW5pdAotCQkJLy8gdGVzdHMhKQotCQkJLy8gZk91dHB1dFdyaXRlci53cml0ZWxuKGV2ZW50LnRvU3RyaW5nKCkpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IGEgPSAoRWxlbWVudCkgZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMgPSBhLmdldEF0dHJpYnV0ZXMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlcy5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQkJTm9kZSBhdHRyID0gYXR0cmlidXRlcy5pdGVtKGkpOwotCQkJCVN0cmluZyBuYW1lID0gYXR0ci5nZXROb2RlTmFtZSgpOwotCQkJCVN0cmluZyB2YWx1ZSA9IGF0dHIuZ2V0Tm9kZVZhbHVlKCk7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKG5hbWUgKyAiPVsiICsgdmFsdWUgKyAiXSIpOwotCQkJfQotCi0JCQlTdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBldmVudDIgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgNCwgMSwgIiIpOwotCQkJLy8gSSByZW1vdmVkIHRoaXMgcGFydCBvZiBvdXRwdXQsIHNpbmNlIHJlbmFtaW5nIGNsYXNzIG9yIHBhY2thZ2UKLQkJCS8vIHdpbGwgY2F1c2UgdGVzdCB0byBmYWlsIQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV2ZW50Mi50b1N0cmluZygpKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJYSA9IChFbGVtZW50KSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlhdHRyaWJ1dGVzID0gYS5nZXRBdHRyaWJ1dGVzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJCU5vZGUgYXR0ciA9IGF0dHJpYnV0ZXMuaXRlbShpKTsKLQkJCQlTdHJpbmcgbmFtZSA9IGF0dHIuZ2V0Tm9kZU5hbWUoKTsKLQkJCQlTdHJpbmcgdmFsdWUgPSBhdHRyLmdldE5vZGVWYWx1ZSgpOwotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihuYW1lICsgIj1bIiArIHZhbHVlICsgIl0iKTsKLQkJCX0KLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1BhcnNlclRlc3Q0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9QYXJzZXJUZXN0NC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDZlNjBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1BhcnNlclRlc3Q0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotCi1wdWJsaWMgY2xhc3MgUGFyc2VyVGVzdDQgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBQYXJzZXJUZXN0NC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBQYXJzZXJUZXN0NChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgUGFyc2VyVGVzdDQoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFBhcnNlclRlc3Q0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCi0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJLy9Eb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAwLCAwLCAiPGE+XG5cbjwlIGEgJT5cbjwlIGIgJT5cbjwvYT4iKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDQsIDAsICI8Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA1LCAwLCAiYiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgNiwgMCwgImMiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDcsIDAsICJkIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA4LCAwLCAiZSIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgOSwgMCwgIj4iKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NvdXJjZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NvdXJjZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I0ZDAxOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9Tb3VyY2VUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5JbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5Tb3VyY2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgU291cmNlVGVzdCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFNvdXJjZVRlc3QuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgU291cmNlVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgU291cmNlVGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgU291cmNlVGVzdCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCVRleHQgdCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ0Iik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZCh0KTsKLQkJCVNvdXJjZVZhbGlkYXRvciB2YWxpZGF0b3IgPSBuZXcgU291cmNlVmFsaWRhdG9yKHQpOwotCi0JCQlTdHJpbmcgc291cmNlID0gbnVsbDsKLQkJCVN0cmluZyByZXN1bHQgPSBudWxsOwotCi0JCQlzb3VyY2UgPSAiYWFhPGJiYj5jY2MiOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJzb3VyY2U6ICIgKyBzb3VyY2UpOwotCQkJdHJ5IHsKLQkJCQl2YWxpZGF0b3IudmFsaWRhdGVTb3VyY2Uoc291cmNlKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCQlyZXN1bHQgPSB2YWxpZGF0b3IuY29udmVydFNvdXJjZShzb3VyY2UpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJyZXN1bHQ6ICIgKyByZXN1bHQpOwotCi0JCQlzb3VyY2UgPSAiYWFhJmFtcDtcIidiYmImZ3Q7Jmx0O2NjYyZxdW90OyYjNjQ7IjsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigic291cmNlOiAiICsgc291cmNlKTsKLQkJCXRyeSB7Ci0JCQkJdmFsaWRhdG9yLnZhbGlkYXRlU291cmNlKHNvdXJjZSk7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gdmFsaWRhdG9yLmNvbnZlcnRTb3VyY2Uoc291cmNlKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigicmVzdWx0OiAiICsgcmVzdWx0KTsKLQotCQkJc291cmNlID0gIiZhbXA7JiYiOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJzb3VyY2U6ICIgKyBzb3VyY2UpOwotCQkJdHJ5IHsKLQkJCQl2YWxpZGF0b3IudmFsaWRhdGVTb3VyY2Uoc291cmNlKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCQlyZXN1bHQgPSB2YWxpZGF0b3IuY29udmVydFNvdXJjZShzb3VyY2UpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJyZXN1bHQ6ICIgKyByZXN1bHQpOwotCi0JCQlzb3VyY2UgPSAiJmJiYiY8PmNjYyI7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInNvdXJjZTogIiArIHNvdXJjZSk7Ci0JCQl0cnkgewotCQkJCXZhbGlkYXRvci52YWxpZGF0ZVNvdXJjZShzb3VyY2UpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJCXJlc3VsdCA9IHZhbGlkYXRvci5jb252ZXJ0U291cmNlKHNvdXJjZSk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInJlc3VsdDogIiArIHJlc3VsdCk7Ci0KLQkJCXNvdXJjZSA9ICImdW5rOyZ1bmsiOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJzb3VyY2U6ICIgKyBzb3VyY2UpOwotCQkJdHJ5IHsKLQkJCQl2YWxpZGF0b3IudmFsaWRhdGVTb3VyY2Uoc291cmNlKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCQlyZXN1bHQgPSB2YWxpZGF0b3IuY29udmVydFNvdXJjZShzb3VyY2UpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJyZXN1bHQ6ICIgKyByZXN1bHQpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU291cmNlVGVzdDIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NvdXJjZVRlc3QyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2YmJlYzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU291cmNlVGVzdDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LkludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LlNvdXJjZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFNvdXJjZVRlc3QyIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgU291cmNlVGVzdDIuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgU291cmNlVGVzdDIoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFNvdXJjZVRlc3QyKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBTb3VyY2VUZXN0MigpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJQXR0ciBiID0gZG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKCJiIik7Ci0JCQlhLnNldEF0dHJpYnV0ZU5vZGUoYik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChhKTsKLQkJCVNvdXJjZVZhbGlkYXRvciB2YWxpZGF0b3IgPSBuZXcgU291cmNlVmFsaWRhdG9yKGIpOwotCi0JCQlTdHJpbmcgc291cmNlID0gbnVsbDsKLQkJCVN0cmluZyByZXN1bHQgPSBudWxsOwotCi0JCQlzb3VyY2UgPSAiYWFhPGJiYj5jY2MiOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJzb3VyY2U6ICIgKyBzb3VyY2UpOwotCQkJdHJ5IHsKLQkJCQl2YWxpZGF0b3IudmFsaWRhdGVTb3VyY2Uoc291cmNlKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCQlyZXN1bHQgPSB2YWxpZGF0b3IuY29udmVydFNvdXJjZShzb3VyY2UpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJyZXN1bHQ6ICIgKyByZXN1bHQpOwotCi0JCQlzb3VyY2UgPSAiYWFhJmFtcDtiYmImZ3Q7Jmx0O2NjYyZxdW90OyYjNjQ7IjsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigic291cmNlOiAiICsgc291cmNlKTsKLQkJCXRyeSB7Ci0JCQkJdmFsaWRhdG9yLnZhbGlkYXRlU291cmNlKHNvdXJjZSk7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gdmFsaWRhdG9yLmNvbnZlcnRTb3VyY2Uoc291cmNlKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigicmVzdWx0OiAiICsgcmVzdWx0KTsKLQotCQkJc291cmNlID0gIiZhbXA7JiYiOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJzb3VyY2U6ICIgKyBzb3VyY2UpOwotCQkJdHJ5IHsKLQkJCQl2YWxpZGF0b3IudmFsaWRhdGVTb3VyY2Uoc291cmNlKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCQlyZXN1bHQgPSB2YWxpZGF0b3IuY29udmVydFNvdXJjZShzb3VyY2UpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJyZXN1bHQ6ICIgKyByZXN1bHQpOwotCi0JCQlzb3VyY2UgPSAiXCJhYWFcIiI7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInNvdXJjZTogIiArIHNvdXJjZSk7Ci0JCQl0cnkgewotCQkJCXZhbGlkYXRvci52YWxpZGF0ZVNvdXJjZShzb3VyY2UpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJCXJlc3VsdCA9IHZhbGlkYXRvci5jb252ZXJ0U291cmNlKHNvdXJjZSk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInJlc3VsdDogIiArIHJlc3VsdCk7Ci0KLQkJCXNvdXJjZSA9ICJcImEnYVwiIjsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigic291cmNlOiAiICsgc291cmNlKTsKLQkJCXRyeSB7Ci0JCQkJdmFsaWRhdG9yLnZhbGlkYXRlU291cmNlKHNvdXJjZSk7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gdmFsaWRhdG9yLmNvbnZlcnRTb3VyY2Uoc291cmNlKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigicmVzdWx0OiAiICsgcmVzdWx0KTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NvdXJjZVRlc3QzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9Tb3VyY2VUZXN0My5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDlmYTg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NvdXJjZVRlc3QzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LkludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LlNvdXJjZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFNvdXJjZVRlc3QzIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgU291cmNlVGVzdDMuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgU291cmNlVGVzdDMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFNvdXJjZVRlc3QzKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBTb3VyY2VUZXN0MygpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJQXR0ciBiID0gZG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKCJiIik7Ci0JCQlhLnNldEF0dHJpYnV0ZU5vZGUoYik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChhKTsKLQkJCVNvdXJjZVZhbGlkYXRvciB2YWxpZGF0b3IgPSBuZXcgU291cmNlVmFsaWRhdG9yKGIpOwotCi0JCQlTdHJpbmcgc291cmNlID0gbnVsbDsKLQkJCVN0cmluZyByZXN1bHQgPSBudWxsOwotCi0JCQlzb3VyY2UgPSAiPCUgYWFhICU+PCU9IGJiYiAlPi88JSEgY2NjICU+ZGRkIjsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigic291cmNlOiAiICsgc291cmNlKTsKLQkJCXRyeSB7Ci0JCQkJdmFsaWRhdG9yLnZhbGlkYXRlU291cmNlKHNvdXJjZSk7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gdmFsaWRhdG9yLmNvbnZlcnRTb3VyY2Uoc291cmNlKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigicmVzdWx0OiAiICsgcmVzdWx0KTsKLQotCQkJc291cmNlID0gIjwlIGFhYSI7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInNvdXJjZTogIiArIHNvdXJjZSk7Ci0JCQl0cnkgewotCQkJCXZhbGlkYXRvci52YWxpZGF0ZVNvdXJjZShzb3VyY2UpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJCXJlc3VsdCA9IHZhbGlkYXRvci5jb252ZXJ0U291cmNlKHNvdXJjZSk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInJlc3VsdDogIiArIHJlc3VsdCk7Ci0KLQkJCXNvdXJjZSA9ICI+PCAlIGFhYSAlPiI7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInNvdXJjZTogIiArIHNvdXJjZSk7Ci0JCQl0cnkgewotCQkJCXZhbGlkYXRvci52YWxpZGF0ZVNvdXJjZShzb3VyY2UpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJCXJlc3VsdCA9IHZhbGlkYXRvci5jb252ZXJ0U291cmNlKHNvdXJjZSk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInJlc3VsdDogIiArIHJlc3VsdCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmYjlkZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgU3BsaXRUZXh0VGVzdCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFNwbGl0VGV4dFRlc3QuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgU3BsaXRUZXh0VGVzdCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHApOwotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImFhYmJiYmNjYyIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0ZXh0MiA9IHRleHQuc3BsaXRUZXh0KDIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHRleHQzID0gdGV4dDIuc3BsaXRUZXh0KDQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlwLnJlbW92ZUNoaWxkKHRleHQyKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dC5hcHBlbmREYXRhKCJkZGRkZGRkIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQzLmFwcGVuZERhdGEoImVlZSIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlwLmluc2VydEJlZm9yZSh0ZXh0MiwgdGV4dDMpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3QyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjMDlkMGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFNwbGl0VGV4dFRlc3QyIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgU3BsaXRUZXh0VGVzdDIuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdDIoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFNwbGl0VGV4dFRlc3QyKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBTcGxpdFRleHRUZXN0MigpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHApOwotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImFhYmJiYmNjYyIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0ZXh0MiA9IHRleHQuc3BsaXRUZXh0KDIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHRleHQzID0gdGV4dDIuc3BsaXRUZXh0KDQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlwLnJlbW92ZUNoaWxkKHRleHQyKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQiIpOwotCQkJYi5hcHBlbmRDaGlsZCh0ZXh0Mik7Ci0JCQlwLmluc2VydEJlZm9yZShiLCB0ZXh0Myk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0My5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWViM2NjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0My5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgU3BsaXRUZXh0VGVzdDMgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTcGxpdFRleHRUZXN0My4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBTcGxpdFRleHRUZXN0MyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdDMoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFNwbGl0VGV4dFRlc3QzKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYWEiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCUVsZW1lbnQgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkIiKTsKLQkJCVRleHQgdGV4dDIgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYmJiYiIpOwotCQkJYi5hcHBlbmRDaGlsZCh0ZXh0Mik7Ci0JCQlwLmFwcGVuZENoaWxkKGIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHRleHQzID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImNjYyIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0Myk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXAucmVtb3ZlQ2hpbGQoYik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXAuaW5zZXJ0QmVmb3JlKGIsIHRleHQzKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3Q0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0NC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlN2ViOTZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3Q0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBTcGxpdFRleHRUZXN0NCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFNwbGl0VGV4dFRlc3Q0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFNwbGl0VGV4dFRlc3Q0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBTcGxpdFRleHRUZXN0NCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgU3BsaXRUZXh0VGVzdDQoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQuYXBwZW5kRGF0YSgiYWFhIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQuZGVsZXRlRGF0YSgwLCAzKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0ZXh0MiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJjY2NjIik7Ci0JCQlwLmluc2VydEJlZm9yZSh0ZXh0MiwgdGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQuYXBwZW5kRGF0YSgiYWFhIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQotCi0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3Q1LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0NS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzg2MWY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3Q1LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBTcGxpdFRleHRUZXN0NSBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFNwbGl0VGV4dFRlc3Q1LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFNwbGl0VGV4dFRlc3Q1KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBTcGxpdFRleHRUZXN0NSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgU3BsaXRUZXh0VGVzdDUoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJhYWJiYmJjY2MiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dDIgPSB0ZXh0LnNwbGl0VGV4dCg2KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBiciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkJSIik7Ci0JCQlwLmluc2VydEJlZm9yZShiciwgdGV4dDIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0Mi5zZXREYXRhKCJjY2NkIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQyLnNldERhdGEoImNjY2RlIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dDMgPSB0ZXh0LnNwbGl0VGV4dCgyKTsKLQkJCUVsZW1lbnQgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkIiKTsKLQkJCWIuYXBwZW5kQ2hpbGQodGV4dDMpOwotCQkJcC5pbnNlcnRCZWZvcmUoYiwgYnIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHRleHQ0ID0gdGV4dDIuc3BsaXRUZXh0KDMpOwotCQkJRWxlbWVudCBpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSSIpOwotCQkJaS5hcHBlbmRDaGlsZCh0ZXh0Mik7Ci0JCQlwLmluc2VydEJlZm9yZShpLCB0ZXh0NCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0Ni5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY1ZjQyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0Ni5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgU3BsaXRUZXh0VGVzdDYgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTcGxpdFRleHRUZXN0Ni4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBTcGxpdFRleHRUZXN0NihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdDYoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFNwbGl0VGV4dFRlc3Q2KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYWFiYmJiY2NjIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCQkJVGV4dCB0ZXh0MiA9IHRleHQuc3BsaXRUZXh0KDIpOwotCQkJLy8gPT0+IC8vIFRleHQgdGV4dDMgPQotCQkJdGV4dDIuc3BsaXRUZXh0KDQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0Mi5zZXREYXRhKCJiYmJiZCIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDcuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3Q3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxYWIyNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFNwbGl0VGV4dFRlc3Q3IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgU3BsaXRUZXh0VGVzdDcuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdDcoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFNwbGl0VGV4dFRlc3Q3KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBTcGxpdFRleHRUZXN0NygpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHApOwotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImFhYWEiKTsKLQkJCVRleHQgdGV4dDIgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYmJiYiIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0KTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dDIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0KLQkJCS8vIGRlbGV0ZSBhY2Nyb3NzIG5vZGUgYm91bmRyeQotCQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkucmVwbGFjZVRleHQodGhpcywgNiwgMywgIiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDguamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3Q4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhOTRlNDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFNwbGl0VGV4dFRlc3Q4IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgU3BsaXRUZXh0VGVzdDguCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdDgoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFNwbGl0VGV4dFRlc3Q4KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBTcGxpdFRleHRUZXN0OCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHApOwotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImFhYWEiKTsKLQkJCVRleHQgdGV4dDIgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYmJiYiIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0KTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dDIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0KLQkJCS8vIGRlbGV0ZSBhY2Nyb3NzIG5vZGUgYm91bmRyeQotCQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkucmVwbGFjZVRleHQodGhpcywgNCwgNiwgIiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVGFibGVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9UYWJsZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI4NTFlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9UYWJsZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFRhYmxlVGVzdCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFRhYmxlVGVzdC4KLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBUYWJsZVRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFRhYmxlVGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVGFibGVUZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCUVsZW1lbnQgaHRtbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkhUTUwiKTsKLQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoaHRtbCk7Ci0KLQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQlwcmludFRyZWUobW9kZWwpOwotCi0JCUVsZW1lbnQgYm9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkJPRFkiKTsKLQkJaHRtbC5hcHBlbmRDaGlsZChib2R5KTsKLQotCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJRWxlbWVudCB0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRBQkxFIik7Ci0JCXRhYmxlLnNldEF0dHJpYnV0ZSgiYm9yZGVyIiwgIjEiKTsKLQkJRWxlbWVudCB0ZCA9IG51bGw7Ci0JCWZvciAoaW50IHJvdyA9IDA7IHJvdyA8IDI7IHJvdysrKSB7Ci0JCQlFbGVtZW50IHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKLQkJCXRhYmxlLmFwcGVuZENoaWxkKHRyKTsKLQkJCWZvciAoaW50IGNvbCA9IDA7IGNvbCA8IDI7IGNvbCsrKSB7Ci0JCQkJdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwotCQkJCXRyLmFwcGVuZENoaWxkKHRkKTsKLQkJCX0KLQkJfQotCQlib2R5LmFwcGVuZENoaWxkKHRhYmxlKTsKLQotCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJRWxlbWVudCBmb250ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRk9OVCIpOwotCQlmb250LnNldEF0dHJpYnV0ZSgiY29sb3IiLCAicmVkIik7Ci0JCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ0ZXh0Iik7Ci0JCWZvbnQuYXBwZW5kQ2hpbGQodGV4dCk7Ci0JCXRkLmFwcGVuZENoaWxkKGZvbnQpOwotCi0JCXByaW50U291cmNlKG1vZGVsKTsKLQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVGV4dFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1RleHRUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyNWFjMTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVGV4dFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkNoYXJhY3RlckRhdGE7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFRleHRUZXN0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVGV4dFRlc3QuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVGV4dFRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFRleHRUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBUZXh0VGVzdCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoYSk7Ci0JCQlDaGFyYWN0ZXJEYXRhIHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgidGV4dCIpOwotCQkJYS5hcHBlbmRDaGlsZCh0ZXh0KTsKLQotCQkJdGV4dC5zZXREYXRhKCJoZWxsbyAmbHQ7Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbih0ZXh0LmdldERhdGEoKSk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9UZXh0VGVzdDIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1RleHRUZXN0Mi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTNlNjFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1RleHRUZXN0Mi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQ2hhcmFjdGVyRGF0YTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVGV4dFRlc3QyIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVGV4dFRlc3QyLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFRleHRUZXN0MihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVGV4dFRlc3QyKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBUZXh0VGVzdDIoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJQ2hhcmFjdGVyRGF0YSB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoInRleHQiKTsKLQkJCWEuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXRleHQuc2V0Tm9kZVZhbHVlKCJoZWxsbyAmbHQ7Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbih0ZXh0LmdldE5vZGVWYWx1ZSgpKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1RleHRUZXN0My5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVGV4dFRlc3QzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiNWQxMWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVGV4dFRlc3QzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5JbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXh0VGVzdDMgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBUZXh0VGVzdDMuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVGV4dFRlc3QzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBUZXh0VGVzdDMoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFRleHRUZXN0MygpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoYSk7Ci0JCQlJRE9NTm9kZSB0ZXh0ID0gKElET01Ob2RlKSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgidGV4dCIpOwotCQkJYS5hcHBlbmRDaGlsZCh0ZXh0KTsKLQotCQkJdHJ5IHsKLQkJCQl0ZXh0LnNldFNvdXJjZSgiaGVsbG8gPCIpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdHJ5IHsKLQkJCQl0ZXh0LnNldFNvdXJjZSgiaGVsbG8gJmx0OyIpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdHJ5IHsKLQkJCQl0ZXh0LnNldFNvdXJjZSgiaGVsbG8gJnVuazsiKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRyeSB7Ci0JCQkJdGV4dC5zZXRTb3VyY2UoImhlbGxvICYjNjU7Iik7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0cnkgewotCQkJCXRleHQuc2V0U291cmNlKCJoZWxsbyAmIGdvb2QtYnllIik7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA1OTY1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFVwZGF0ZXJUZXN0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3QuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVXBkYXRlclRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFVwZGF0ZXJUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgaHRtbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkhUTUwiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGh0bWwpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IGJvZHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCT0RZIik7Ci0JCQlodG1sLmFwcGVuZENoaWxkKGJvZHkpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlib2R5LmFwcGVuZENoaWxkKHApOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgidGV4dCIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBiciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkJSIik7Ci0JCQlwLmluc2VydEJlZm9yZShiciwgdGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCUVsZW1lbnQgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU1HIik7Ci0JCQlwLmFwcGVuZENoaWxkKGltZyk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXAucmVtb3ZlQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXAuaW5zZXJ0QmVmb3JlKHRleHQsIGltZyk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWJvZHkucmVtb3ZlQ2hpbGQocCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWJvZHkuYXBwZW5kQ2hpbGQocCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDEwLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDEwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YjZhOTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVyVGVzdDEwIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3QxMC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBVcGRhdGVyVGVzdDEwKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBVcGRhdGVyVGVzdDEwKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdDEwKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChhKTsKLQkJCWEuc2V0QXR0cmlidXRlKCJiIiwgImMiKTsKLQkJCUVsZW1lbnQgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImIiKTsKLQkJCWEuYXBwZW5kQ2hpbGQoYik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjoiKTsKLQkJCUlET01Ob2RlIG5vZGUgPSAoSURPTU5vZGUpIGI7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGZsYXROb2RlID0gbm9kZS5nZXRTdGFydFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGZsYXROb2RlLmdldFRleHQoKSk7Ci0JCQlJdGVyYXRvciBlID0gZmxhdE5vZGUuZ2V0UmVnaW9ucygpLml0ZXJhdG9yKCk7Ci0JCQlpbnQgaSA9IDA7Ci0JCQl3aGlsZSAoZS5oYXNOZXh0KCkpIHsKLQkJCQlJVGV4dFJlZ2lvbiByZWdpb24gPSAoSVRleHRSZWdpb24pIGUubmV4dCgpOwotCQkJCWJvb2xlYW4gb2sgPSB0cnVlOyAvLyBubyBsb25nZXIgaGFzIHBhcmVudC4KLQkJCQkJCQkJICAgLy8gLy8ocmVnaW9uLmdldFBhcmVudCgpID09IGZsYXROb2RlKTsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oaSArICIoIiArIGZsYXROb2RlLmdldFRleHQocmVnaW9uKSArICIpIiArIG9rKTsKLQkJCX0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiIik7Ci0KLQkJCWIuc2V0QXR0cmlidXRlKCJjIiwgImQiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOiIpOwotCQkJbm9kZSA9IChJRE9NTm9kZSkgYjsKLQkJCWZsYXROb2RlID0gbm9kZS5nZXRTdGFydFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGZsYXROb2RlLmdldFRleHQoKSk7Ci0JCQllID0gZmxhdE5vZGUuZ2V0UmVnaW9ucygpLml0ZXJhdG9yKCk7Ci0JCQlpID0gMDsKLQkJCXdoaWxlIChlLmhhc05leHQoKSkgewotCQkJCUlUZXh0UmVnaW9uIHJlZ2lvbiA9IChJVGV4dFJlZ2lvbikgZS5uZXh0KCk7Ci0JCQkJYm9vbGVhbiBvayA9IHRydWU7IC8vIG5vIGxvbmdlciBoYXMgcGFyZW50LgotCQkJCQkJCQkgICAvLyAocmVnaW9uLmdldFBhcmVudCgpID09IGZsYXROb2RlKTsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oaSArICIoIiArIGZsYXROb2RlLmdldFRleHQocmVnaW9uKSArICIpIiArIG9rKTsKLQkJCX0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiIik7Ci0KLQkJCWEuc2V0QXR0cmlidXRlKCJiIiwgImNkIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjoiKTsKLQkJCW5vZGUgPSAoSURPTU5vZGUpIGI7Ci0JCQlmbGF0Tm9kZSA9IG5vZGUuZ2V0U3RhcnRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihmbGF0Tm9kZS5nZXRUZXh0KCkpOwotCQkJZSA9IGZsYXROb2RlLmdldFJlZ2lvbnMoKS5pdGVyYXRvcigpOwotCQkJaSA9IDA7Ci0JCQl3aGlsZSAoZS5oYXNOZXh0KCkpIHsKLQkJCQlJVGV4dFJlZ2lvbiByZWdpb24gPSAoSVRleHRSZWdpb24pIGUubmV4dCgpOwotCQkJCWJvb2xlYW4gb2sgPSB0cnVlOyAvLyAocmVnaW9uLmdldFBhcmVudCgpID09IGZsYXROb2RlKTsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oaSArICIoIiArIGZsYXROb2RlLmdldFRleHQocmVnaW9uKSArICIpIiArIG9rKTsKLQkJCX0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiIik7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxMS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWY2ZmJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0MTEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFVwZGF0ZXJUZXN0MTEgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdDExLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0MTEoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFVwZGF0ZXJUZXN0MTEoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0MTEoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImIiKTsKLQkJCWEuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQuc2V0RGF0YSgiYiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxMi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDMxM2FjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0MTIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVyVGVzdDEyIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3QxMi4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBVcGRhdGVyVGVzdDEyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBVcGRhdGVyVGVzdDEyKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdDEyKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChhKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBhMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWRvY3VtZW50Lmluc2VydEJlZm9yZShhMiwgYSk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWRvY3VtZW50LnJlbW92ZUNoaWxkKGEyKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDEzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDEzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMzQxNzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVyVGVzdDEzIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3QxMy4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBVcGRhdGVyVGVzdDEzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBVcGRhdGVyVGVzdDEzKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdDEzKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDAsIDAsICI8YT5cclxuPGI+XHJcbjwvYT4iKTsKLQotCQkJRWxlbWVudCBhID0gKEVsZW1lbnQpIGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCUVsZW1lbnQgYiA9IChFbGVtZW50KSBhLmdldExhc3RDaGlsZCgpOwotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAgIik7Ci0JCQlhLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlhLnJlbW92ZUNoaWxkKGIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxNC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxNC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjdjOWVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0MTQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVyVGVzdDE0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3QxNC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBVcGRhdGVyVGVzdDE0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBVcGRhdGVyVGVzdDE0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdDE0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCS8vRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMCwgMCwgIjwlPSBhYWFhICU+Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAyLCAwLCAiICIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxNS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxNS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzJiMTFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0MTUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVyVGVzdDE1IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3QxNS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBVcGRhdGVyVGVzdDE1KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBVcGRhdGVyVGVzdDE1KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdDE1KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQkvLyBYTUwgY2FzZQotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCS8vRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMCwgMCwgIjwlPSBhYWFhICU+PFA+Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCS8vCUhUTUwgY2FzZQotCQkJbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJCXN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJLy9kb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAwLCAwLCAiPCU9IGFhYWEgJT48UD4iKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0Mi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiNWRhMWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFVwZGF0ZXJUZXN0MiBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFVwZGF0ZXJUZXN0Mi4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBVcGRhdGVyVGVzdDIoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFVwZGF0ZXJUZXN0MigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVXBkYXRlclRlc3QyKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICI8SFRNTD5cclxuPEhFQUQ+PC9IRUFEPlxyXG48Qk9EWT48L0JPRFk+XHJcbjwvSFRNTD5cclxuIik7Ci0JCQlFbGVtZW50IGh0bWwgPSAoRWxlbWVudCkgZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJRWxlbWVudCBoZWFkID0gKEVsZW1lbnQpIGh0bWwuZ2V0Rmlyc3RDaGlsZCgpLmdldE5leHRTaWJsaW5nKCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCUVsZW1lbnQgbWV0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIk1FVEEiKTsKLQkJCW1ldGEuc2V0QXR0cmlidXRlKCJuYW1lIiwgIkdFTkVSQVRPUiIpOwotCQkJbWV0YS5zZXRBdHRyaWJ1dGUoImNvbnRlbnQiLCAiVXBkYXRlciBUZXN0IDIiKTsKLQkJCWhlYWQuYXBwZW5kQ2hpbGQobWV0YSk7Ci0JCQlUZXh0IHRleHQ0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlxyXG4iKTsKLQkJCWhlYWQuaW5zZXJ0QmVmb3JlKHRleHQ0LCBtZXRhKTsKLQkJCVRleHQgdGV4dDUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiXHJcbiIpOwotCQkJaGVhZC5hcHBlbmRDaGlsZCh0ZXh0NSk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCUVsZW1lbnQgdGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUSVRMRSIpOwotCQkJVGV4dCB0ZXh0NiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTsKLQkJCXRpdGxlLmFwcGVuZENoaWxkKHRleHQ2KTsKLQkJCWhlYWQuYXBwZW5kQ2hpbGQodGl0bGUpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0My5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlOGZiNzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVyVGVzdDMgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdDMuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVXBkYXRlclRlc3QzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBVcGRhdGVyVGVzdDMoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0MygpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoYSk7Ci0JCQlFbGVtZW50IGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiIik7Ci0JCQlhLmFwcGVuZENoaWxkKGIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHQxID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlxuIik7Ci0JCQlhLmluc2VydEJlZm9yZSh0MSwgYik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdDIgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiXG4iKTsKLQkJCWEuYXBwZW5kQ2hpbGQodDIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY0ZTU2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFVwZGF0ZXJUZXN0NCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFVwZGF0ZXJUZXN0NC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBVcGRhdGVyVGVzdDQoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFVwZGF0ZXJUZXN0NCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVXBkYXRlclRlc3Q0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChhKTsKLQkJCVRleHQgdCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJiIik7Ci0JCQlhLmFwcGVuZENoaWxkKHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0LnNldERhdGEoImIiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0NS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzMmU5ZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q1LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVyVGVzdDUgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdDUuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVXBkYXRlclRlc3Q1KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBVcGRhdGVyVGVzdDUoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0NSgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICI8YT4mYXBvczs8L2E+Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCU5vZGUgYSA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCU5vZGUgdCA9IGEuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJYS5yZW1vdmVDaGlsZCh0KTsKLQkJCWEuYXBwZW5kQ2hpbGQodCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDYuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0Ni5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTI4MzlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0Ni5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3Q2IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3Q2LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0NihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3Q2KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdDYoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJVGV4dCB0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImIiKTsKLQkJCWEuYXBwZW5kQ2hpbGQodCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWEucmVtb3ZlQ2hpbGQodCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWEuYXBwZW5kQ2hpbGQodCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDcuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0Ny5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzA0MTg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0Ny5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFVwZGF0ZXJUZXN0NyBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFVwZGF0ZXJUZXN0Ny4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBVcGRhdGVyVGVzdDcoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFVwZGF0ZXJUZXN0NygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVXBkYXRlclRlc3Q3KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQkJCUVsZW1lbnQgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkIiKTsKLQkJCXAuYXBwZW5kQ2hpbGQoYik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCUVsZW1lbnQgYjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCIik7Ci0JCQlwLmluc2VydEJlZm9yZShiMiwgYik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDguamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0OC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTRmNDdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0OC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFVwZGF0ZXJUZXN0OCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFVwZGF0ZXJUZXN0OC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBVcGRhdGVyVGVzdDgoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFVwZGF0ZXJUZXN0OCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVXBkYXRlclRlc3Q4KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBwMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHAyKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0OS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZjkxNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVyVGVzdDkgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdDkuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVXBkYXRlclRlc3Q5KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBVcGRhdGVyVGVzdDkoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0OSgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJTVFlMRSIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoc3R5bGUpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHRleHQyID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoInAiKTsKLQkJCXN0eWxlLmFwcGVuZENoaWxkKHRleHQyKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0UmVnaW9uQ2hhbmdlZC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3RSZWdpb25DaGFuZ2VkLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiYTNjMmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3RSZWdpb25DaGFuZ2VkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5SZWdpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5TdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIFVwZGF0ZXJUZXN0UmVnaW9uQ2hhbmdlZCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFVwZGF0ZXJUZXN0UmVnaW9uQ2hhbmdlZC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBVcGRhdGVyVGVzdFJlZ2lvbkNoYW5nZWQoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFVwZGF0ZXJUZXN0UmVnaW9uQ2hhbmdlZCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVXBkYXRlclRlc3RSZWdpb25DaGFuZ2VkKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxhIGI9IGM+PC9hPiIpOwotCi0JCQlOb2RlIGJlZm9yZSA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQotCQkJU3RydWN0dXJlZERvY3VtZW50RXZlbnQgZm1FdmVudCA9IHN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA1LCAxLCAiIik7Ci0JCQlpZiAoZm1FdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigib2s6IFJlZ2lvbkNoYW5nZWRFdmVudCIpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJub3Qgb2s6ICIgKyBmbUV2ZW50LmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLQkJCX0KLQotCQkJTm9kZSBhZnRlciA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQotCQkJaWYgKGJlZm9yZSAhPSBhZnRlcikgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigibm90IG9rOiBOb2RlIHJlcGxhY2VkIik7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oIm9rOiBOb2RlIG5vdCByZXBsYWNlZCIpOwotCQkJfQotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvY3NzL1N0eWxlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvY3NzL1N0eWxlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWE1ODJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL2Nzcy9TdHlsZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuY3NzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuTW9kZWxUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy53M2MuZG9tLnN0eWxlc2hlZXRzLkRvY3VtZW50U3R5bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uc3R5bGVzaGVldHMuTGlua1N0eWxlOwotaW1wb3J0IG9yZy53M2MuZG9tLnN0eWxlc2hlZXRzLlN0eWxlU2hlZXRMaXN0OwotCi1wdWJsaWMgY2xhc3MgU3R5bGVUZXN0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgU3R5bGVUZXN0LgotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFN0eWxlVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgU3R5bGVUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBTdHlsZVRlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOyAvL25ldyBIVE1MTW9kZWxJbXBsKCk7Ci0JCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQlFbGVtZW50IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiU1RZTEUiKTsKLQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIkJPRFkgeyBjb2xvciA6IHJlZDsgfSBQIHsgY29sb3IgOiBncmVlbjsgfSBCIHsgY29sb3IgOiBibHVlOyB9Iik7Ci0JCXN0eWxlLmFwcGVuZENoaWxkKHRleHQpOwotCQlkb2N1bWVudC5hcHBlbmRDaGlsZChzdHlsZSk7Ci0KLQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQlwcmludFRyZWUobW9kZWwpOwotCi0JCURvY3VtZW50U3R5bGUgZHMgPSAoRG9jdW1lbnRTdHlsZSkgZG9jdW1lbnQ7Ci0JCVN0eWxlU2hlZXRMaXN0IHNzbCA9IGRzLmdldFN0eWxlU2hlZXRzKCk7Ci0JCWlmIChzc2wuZ2V0TGVuZ3RoKCkgPiAwKSB7Ci0JCQlDU1NTdHlsZVNoZWV0IHNzID0gKENTU1N0eWxlU2hlZXQpIHNzbC5pdGVtKDApOwotCQkJc3MuZGVsZXRlUnVsZSgxKTsKLQkJfQotCi0JCXByaW50U291cmNlKG1vZGVsKTsKLQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQlMaW5rU3R5bGUgbHMgPSAoTGlua1N0eWxlKSBzdHlsZTsKLQkJQ1NTU3R5bGVTaGVldCBzczIgPSAoQ1NTU3R5bGVTaGVldCkgbHMuZ2V0U2hlZXQoKTsKLQkJaWYgKHNzMiAhPSBudWxsKSB7Ci0JCQlzczIuZGVsZXRlUnVsZSgwKTsKLQkJfQotCi0JCXByaW50U291cmNlKG1vZGVsKTsKLQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3RleHQvVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lckhUTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdGV4dC9UZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVySFRNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjFmMWJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdGV4dC9UZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVySFRNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy50ZXh0OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nQnVmZmVySW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS50ZXh0LkRlY2ltYWxGb3JtYXQ7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50RXh0ZW5zaW9uMzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudFBhcnRpdGlvbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVR5cGVkUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JSFRNTFBhcnRpdGlvblR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnV0aWwuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVhNTFBhcnRpdGlvbnM7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVySFRNTCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgYm9vbGVhbiBERUJVR19QUklOVF9SRVNVTFQgPSBmYWxzZTsKLQlwcm90ZWN0ZWQgSVR5cGVkUmVnaW9uW10gcGFydGl0aW9ucyA9IG51bGw7Ci0KLQlwcml2YXRlIGJvb2xlYW4gdXNlRm9ybWF0dGVyID0gdHJ1ZTsKLQlwcm90ZWN0ZWQgRGVjaW1hbEZvcm1hdCBmb3JtYXR0ZXI7Ci0KLQlwdWJsaWMgVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lckhUTUwoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JCWlmIChERUJVR19QUklOVF9SRVNVTFQgJiYgdXNlRm9ybWF0dGVyKQotCQkJZm9ybWF0dGVyID0gbmV3IERlY2ltYWxGb3JtYXQoKTsKLQl9Ci0JCi0JLyoqCi0JICogbXVzdCByZWxlYXNlIG1vZGVsIChmcm9tIGVkaXQpIGFmdGVyCi0JICogQHBhcmFtIGZpbGVuYW1lIHJlbGF0aXZlIHRvIHRoaXMgY2xhc3MgKFRlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXIpCi0JICovCi0JcHJpdmF0ZSBJU3RydWN0dXJlZE1vZGVsIGdldE1vZGVsRm9yRWRpdChTdHJpbmcgZmlsZW5hbWUpIHsKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJCWlmIChpblN0cmVhbSA9PSBudWxsKQotCQkJCWluU3RyZWFtID0gbmV3IFN0cmluZ0J1ZmZlcklucHV0U3RyZWFtKCIiKTsKLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChmaWxlbmFtZSwgaW5TdHJlYW0sIG51bGwpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBleCkgewotCQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG1vZGVsOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RGlzY29ubmVjdENvbm5lY3QoKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPWdldE1vZGVsRm9yRWRpdCgidGVzdGZpbGVzL2h0bWwvZXhhbXBsZTAxLnhtbCIpOwotCQkJaWYobW9kZWwgIT0gbnVsbCkgewotCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJCWFzc2VydFRydWUoInNEb2MgaW1wbGVtZW50YXRpb24gbm90IGluc3RhbmNlIG9mIElEb2N1bWVudEV4dGVuc2lvbjMiLCBzRG9jIGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uMyk7Ci0JCQkKLQkJCQlJRG9jdW1lbnRQYXJ0aXRpb25lciBwYXJ0aXRpb25lciA9ICgoSURvY3VtZW50RXh0ZW5zaW9uMylzRG9jKS5nZXREb2N1bWVudFBhcnRpdGlvbmVyKElTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nLkRFRkFVTFRfU1RSVUNUVVJFRF9QQVJUSVRJT05JTkcpOwotCQkJCWFzc2VydFRydWUoInBhcnRpdGlvbmVyIGRvZXNuJ3QgaW1wbGVtZW50IElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyIiwgcGFydGl0aW9uZXIgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcik7Ci0JCQkJCi0JCQkJSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIgc3RwID0gKElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyKXBhcnRpdGlvbmVyOwotCQkJCWFzc2VydE5vdE51bGwoInBhcnRpdGlvbmVyIHdhcyBudWxsIGZvciBzRG9jOiIgKyBzRG9jLCBwYXJ0aXRpb25lcik7Ci0JCQkJdHJ5IHsKLQkJCQkJc3RwLmRpc2Nvbm5lY3QoKTsKLQkJCQl9Ci0JCQkJY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkJCQkJYXNzZXJ0VHJ1ZSgicHJvYmxlbSBkaXNjb25uZWN0aW5nIHcvOiIgK3NEb2MgKyAiL24iICsgZSwgZmFsc2UpOwotCQkJCX0KLQkJCQl0cnkgewotCQkJCQlzdHAuY29ubmVjdChzRG9jKTsKLQkJCQl9Ci0JCQkJY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkJCQkJYXNzZXJ0VHJ1ZSgicHJvYmxlbSBjb25uZWN0aW5nIHcvOiIgKyBzRG9jICsgIi9uIiArIGUsIGZhbHNlKTsKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlhc3NlcnRUcnVlKCJjb3VsZCBub3QgcmV0cmlldmUgc3RydWN0dXJlZCBtb2RlbCIsIGZhbHNlKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5ICB7Ci0JCQlpZihtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9CQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RGVmYXVsdFBhcnRpdGlvblR5cGUoKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPWdldE1vZGVsRm9yRWRpdCgidGVzdGZpbGVzL2h0bWwvZXhhbXBsZTAxLnhtbCIpOwotCQkJaWYobW9kZWwgIT0gbnVsbCkgewotCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJCWFzc2VydFRydWUoInNEb2MgaW1wbGVtZW50YXRpb24gbm90IGluc3RhbmNlIG9mIElEb2N1bWVudEV4dGVuc2lvbjMiLCBzRG9jIGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uMyk7Ci0JCQkKLQkJCQlJRG9jdW1lbnRQYXJ0aXRpb25lciBwYXJ0aXRpb25lciA9ICgoSURvY3VtZW50RXh0ZW5zaW9uMylzRG9jKS5nZXREb2N1bWVudFBhcnRpdGlvbmVyKElTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nLkRFRkFVTFRfU1RSVUNUVVJFRF9QQVJUSVRJT05JTkcpOwotCQkJCWFzc2VydFRydWUoInBhcnRpdGlvbmVyIGRvZXNuJ3QgaW1wbGVtZW50IElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyIiwgcGFydGl0aW9uZXIgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcik7Ci0JCQkJCi0JCQkJSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIgc3RwID0gKElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyKXBhcnRpdGlvbmVyOwotCQkJCVN0cmluZyBkZWZhdWx0UGFydGl0aW9uVHlwZSA9IHN0cC5nZXREZWZhdWx0UGFydGl0aW9uVHlwZSgpOwotCQkJCWFzc2VydFRydWUoIndyb25nIGRlZmF1bHQgcGFydGl0aW9uIHR5cGUgd2FzOiBbIiArIGRlZmF1bHRQYXJ0aXRpb25UeXBlICsgIl0gc2hvdWxkIGJlOiBbIiArIElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxUICsgIl0iLCBkZWZhdWx0UGFydGl0aW9uVHlwZS5lcXVhbHMoSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQpKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWFzc2VydFRydWUoImNvdWxkIG5vdCByZXRyaWV2ZSBzdHJ1Y3R1cmVkIG1vZGVsIiwgZmFsc2UpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgIHsKLQkJCWlmKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0JCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRQYXJ0aXRpb25UeXBlKCkgewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID1nZXRNb2RlbEZvckVkaXQoInRlc3RmaWxlcy9odG1sL2V4YW1wbGUwMS54bWwiKTsKLQkJCWlmKG1vZGVsICE9IG51bGwpIHsKLQkJCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCQlhc3NlcnRUcnVlKCJzRG9jIGltcGxlbWVudGF0aW9uIG5vdCBpbnN0YW5jZSBvZiBJRG9jdW1lbnRFeHRlbnNpb24zIiwgc0RvYyBpbnN0YW5jZW9mIElEb2N1bWVudEV4dGVuc2lvbjMpOwotCQkJCi0JCQkJSURvY3VtZW50UGFydGl0aW9uZXIgcGFydGl0aW9uZXIgPSAoKElEb2N1bWVudEV4dGVuc2lvbjMpc0RvYykuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcihJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HKTsKLQkJCQlhc3NlcnRUcnVlKCJwYXJpdGlvbmVyIGRvZXNuJ3QgaW1wbGVtZW50IElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyIiwgcGFydGl0aW9uZXIgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcik7Ci0JCQkJCi0JCQkJSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIgc3RwID0gKElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyKXBhcnRpdGlvbmVyOwotCQkJCVN0cmluZyBkZWZhdWx0UGFydGl0aW9uVHlwZSA9IHN0cC5nZXREZWZhdWx0UGFydGl0aW9uVHlwZSgpOwotCQkJCWFzc2VydFRydWUoIndyb25nIGRlZmF1bHQgcGFydGl0aW9uIHR5cGUgd2FzOiBbIiArIGRlZmF1bHRQYXJ0aXRpb25UeXBlICsgIl0gc2hvdWxkIGJlOiBbIiArIElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxUICsgIl0iLCBkZWZhdWx0UGFydGl0aW9uVHlwZS5lcXVhbHMoSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQpKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWFzc2VydFRydWUoImNvdWxkIG5vdCByZXRyaWV2ZSBzdHJ1Y3R1cmVkIG1vZGVsIiwgZmFsc2UpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgIHsKLQkJCWlmKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0JCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RIVE1MMSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnQgZXhwZWN0ZWRQYXJ0aXRpb25zID0gNDsKLQkJaW50IG5QYXJ0aXRpb25zID0gZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdCgidGVzdGZpbGVzL2h0bWwvZXhhbXBsZTAxLmh0bWwiKTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBuUGFydGl0aW9ucyA9PSBleHBlY3RlZFBhcnRpdGlvbnMpOwotCQljaGVja1NlYW1zKCk7Ci0JCXZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJSFRNTFBhcnRpdGlvblR5cGVzLkhUTUxfREVDTEFSQVRJT04sIElIVE1MUGFydGl0aW9uVHlwZXMuSFRNTF9ERUZBVUxULCBJSFRNTFBhcnRpdGlvblR5cGVzLkhUTUxfQ09NTUVOVCwgSUhUTUxQYXJ0aXRpb25UeXBlcy5IVE1MX0RFRkFVTFR9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SFRNTDIoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDc7Ci0JCS8vVE9ETyBOaXRpbiwgd2UgbmVlZCB0byByZXZpZXcgdGhlIFVua25vd24gdG8gU2NyaXB0IGNoYW5nZSAoOC8xLzAzLCA5OjAwUE0pCi0JCWludCBuUGFydGl0aW9ucyA9IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoInRlc3RmaWxlcy9odG1sL2V4YW1wbGUwMi5odG1sIik7Ci0JCWFzc2VydFRydWUoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgblBhcnRpdGlvbnMgPT0gZXhwZWN0ZWRQYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SUhUTUxQYXJ0aXRpb25UeXBlcy5IVE1MX0RFRkFVTFQsIElIVE1MUGFydGl0aW9uVHlwZXMuU0NSSVBULCBJSFRNTFBhcnRpdGlvblR5cGVzLkhUTUxfREVGQVVMVCwgSUhUTUxQYXJ0aXRpb25UeXBlcy5TQ1JJUFQsIElIVE1MUGFydGl0aW9uVHlwZXMuSFRNTF9ERUZBVUxULCBJSFRNTFBhcnRpdGlvblR5cGVzLlNDUklQVCwgSUhUTUxQYXJ0aXRpb25UeXBlcy5IVE1MX0RFRkFVTFR9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SFRNTDMoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDE7Ci0JCVN0cmluZyBmaWxlID0gInRlc3RmaWxlcy9odG1sL2V4YW1wbGUwMy5odG1sIjsKLQkJaW50IG5QYXJ0aXRpb25zID0gZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdChmaWxlKTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBuUGFydGl0aW9ucyA9PSBleHBlY3RlZFBhcnRpdGlvbnMpOwotCQljaGVja1NlYW1zKCk7Ci0JCXZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJSFRNTFBhcnRpdGlvblR5cGVzLkhUTUxfREVGQVVMVH0pOwotCi0JCS8vIDEyMSBpZiBDUkxGCi0JCS8vICBJVHlwZWRSZWdpb24gc2NyaXB0UGFydGl0aW9uID0gZ2V0UGFydGl0aW9uVGVzdChmaWxlLCAxMjEpOwotCQkvLyAxMTYgaWYgTEYgb3IgQ1Igb25seQotCQkvLyAgSVR5cGVkUmVnaW9uIHNjcmlwdFBhcnRpdGlvbiA9IGdldFBhcnRpdGlvblRlc3QoZmlsZSwgMTIxKTsKLQotCQlJVHlwZWRSZWdpb24gcGFydDEgPSBnZXRQYXJ0aXRpb25UZXN0KGZpbGUsIDEyMSk7Ci0JCUlUeXBlZFJlZ2lvbiBwYXJ0MiA9IGdldFBhcnRpdGlvblRlc3QoZmlsZSwgMTE2KTsKLQotLy8JCWFzc2VydEVxdWFscygicGFydGl0aW9uIGlzIHdyb25nIHR5cGUhIiwgc2NyaXB0UGFydGl0aW9uLmdldFR5cGUoKSwgSUhUTUxQYXJ0aXRpb25zLlNUX1NDUklQVCk7Ci0JCS8vIHRoZSBjcml0aWNhbCBwb3NpdGlvbiBpcyBzdXJyb3VuZGVkIHdpdGggSFRNTCA+IDUgY2hhcmFjdGVycyBpbiBlaXRoZXIgZGlyZWN0aW9uOyB0aGlzIHNob3VsZCBiZSBnb29kIGVub3VnaAotCQlhc3NlcnRUcnVlKCJwYXJ0aXRpb24gaXMgd3JvbmcgdHlwZSEgOigiICsgcGFydDEuZ2V0VHlwZSgpICsgInwiICsgcGFydDIuZ2V0VHlwZSgpICsgIikiLCBwYXJ0MS5nZXRUeXBlKCkuZXF1YWxzKElIVE1MUGFydGl0aW9uVHlwZXMuU0NSSVBUKSB8fCBwYXJ0Mi5nZXRUeXBlKCkuZXF1YWxzKElIVE1MUGFydGl0aW9uVHlwZXMuU0NSSVBUKSk7Ci0JCWFzc2VydFRydWUoInBhcnRpdGlvbiBpcyBub3QgemVybyBsZW5ndGghIiwgKHBhcnQxLmdldExlbmd0aCgpID09IDAgfHwgcGFydDIuZ2V0TGVuZ3RoKCkgPT0gMCkpOwotCX0KLQkKLQkvKioKLQkgKiBFbnN1cmUgdGhhdCB0aGUgY3VycmVudCBsaXN0IG9mIHBhcnRpdGlvbnMgYXJlIGFsbCBhZGphY2VudCB0byBvbmUgYW5vdGhlcgotCSAqLwotCXByb3RlY3RlZCB2b2lkIGNoZWNrU2VhbXMoKSB7Ci0JCWlmIChwYXJ0aXRpb25zID09IG51bGwpCi0JCQlyZXR1cm47Ci0JCWludCBvZmZzZXQgPSAwOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscygicGFydGl0aW9ucyBhcmUgbm90IGNvbnRpZ3VvdXMhIiwgcGFydGl0aW9uc1tpXS5nZXRPZmZzZXQoKSwgb2Zmc2V0KTsKLQkJCW9mZnNldCA9IHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCkgKyBwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ29tcHV0ZSB0aGUgcGFydGl0aW9ucyBmb3IgdGhlIGdpdmVuIGZpbGVuYW1lIHVzaW5nIHRoZSBkZWZhdWx0IHBhcnRpdGlvbmVyCi0JICogZm9yIHRoYXQgZmlsZSB0eXBlLgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqIEByZXR1cm4gaW50Ci0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgaW50IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJaWYgKGluU3RyZWFtID09IG51bGwpCi0JCQlpblN0cmVhbSA9IG5ldyBTdHJpbmdCdWZmZXJJbnB1dFN0cmVhbSgiIik7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGZpbGVuYW1lLCBpblN0cmVhbSwgbnVsbCk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCAmJiB1c2VGb3JtYXR0ZXIpIHsKLQkJCWRvdWJsZSBiYXNlVGVuID0gTWF0aC5sb2coMTApOwotCQkJZm9ybWF0dGVyLnNldE1pbmltdW1JbnRlZ2VyRGlnaXRzKChpbnQpIChNYXRoLmxvZyhzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCkpIC8gYmFzZVRlbikgKyAxKTsKLQkJCWZvcm1hdHRlci5zZXRHcm91cGluZ1VzZWQoZmFsc2UpOwotCQl9Ci0KLQkJcGFydGl0aW9ucyA9IHN0cnVjdHVyZWREb2N1bWVudC5jb21wdXRlUGFydGl0aW9uaW5nKDAsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSk7Ci0JCWlmIChERUJVR19QUklOVF9SRVNVTFQpIHsKLQkJCVN0cmluZyBjb250ZW50cyA9IG51bGw7Ci0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXG5maWxlbmFtZTogIiArIGZpbGVuYW1lKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcGFydGl0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJCXRyeSB7Ci0JCQkJCWNvbnRlbnRzID0gc3RydWN0dXJlZERvY3VtZW50LmdldChwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpLCBwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCQkJY29udGVudHMgPSAiKmVycm9yKiI7Ci0JCQkJfQotCQkJCWlmICh1c2VGb3JtYXR0ZXIpCi0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbihmb3JtYXR0ZXIuZm9ybWF0KHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCkpICsgIjoiICsgZm9ybWF0dGVyLmZvcm1hdChwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpKSArICIgLSAiICsgcGFydGl0aW9uc1tpXS5nZXRUeXBlKCkgKyAiIFsiICsgU3RyaW5nVXRpbHMuZXNjYXBlKGNvbnRlbnRzKSArICJdIik7Ci0JCQkJZWxzZQotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4ocGFydGl0aW9uc1tpXSArICIgWyIgKyBTdHJpbmdVdGlscy5lc2NhcGUoY29udGVudHMpICsgIl0iKTsKLQkJCX0KLQkJfQotCQljaGVja1NlYW1zKCk7Ci0JCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQlpblN0cmVhbS5jbG9zZSgpOwotCi0JCWlmIChwYXJ0aXRpb25zID09IG51bGwpCi0JCQlyZXR1cm4gLTE7Ci0JCXJldHVybiBwYXJ0aXRpb25zLmxlbmd0aDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIHNpbmdsZSBwYXJ0aXRpb24gYXQgdGhlIGdpdmVuIG9mZnNldCBmb3IgdGhlIGdpdmVuIGZpbGUsIHVzaW5nIHRoZQotCSAqIGRlZmF1bHQgcGFydGl0aW9uZXIgZm9yIHRoYXQgZmlsZSB0eXBlLiAgVGhpcyB0ZXN0IGFsbG93cyBmb3IgdmVyaWZ5aW5nIHRoZSB6ZXJvLWxlbmd0aAotCSAqIHBhcnRpdGlvbmluZyBiZWhhdmlvci4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiBAcGFyYW0gb2Zmc2V0Ci0JICogQHJldHVybiBJVHlwZWRSZWdpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCBJVHlwZWRSZWdpb24gZ2V0UGFydGl0aW9uVGVzdChTdHJpbmcgZmlsZW5hbWUsIGludCBvZmZzZXQpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoZmlsZW5hbWUsIGluU3RyZWFtLCBudWxsKTsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCXBhcnRpdGlvbnMgPSBudWxsOwotCQlJVHlwZWRSZWdpb24gcGFydGl0aW9uID0gc3RydWN0dXJlZERvY3VtZW50LmdldFBhcnRpdGlvbihvZmZzZXQpOwotCQlpZiAoREVCVUdfUFJJTlRfUkVTVUxUKSB7Ci0JCQlTdHJpbmcgY29udGVudHMgPSBudWxsOwotCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuZmlsZW5hbWU6ICIgKyBmaWxlbmFtZSk7Ci0JCQl0cnkgewotCQkJCWNvbnRlbnRzID0gc3RydWN0dXJlZERvY3VtZW50LmdldChwYXJ0aXRpb24uZ2V0T2Zmc2V0KCksIHBhcnRpdGlvbi5nZXRMZW5ndGgoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJCWNvbnRlbnRzID0gIiplcnJvcioiOwotCQkJfQotCQkJU3lzdGVtLm91dC5wcmludGxuKHBhcnRpdGlvbiArICIgWyIgKyBTdHJpbmdVdGlscy5lc2NhcGUoY29udGVudHMpICsgIl0iKTsKLQkJfQotCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJaW5TdHJlYW0uY2xvc2UoKTsKLQotCQlyZXR1cm4gcGFydGl0aW9uOwotCX0KLQotCS8qKgotCSAqIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIHBhcnRpdGlvbnMgYXJlIG9mIHRoZSBnaXZlbiBwYXJ0aXRpb24gdHlwZXMKLQkgKiBAcGFyYW0gdHlwZWRSZWdpb25zCi0JICogQHBhcmFtIHR5cGVzCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgdmVyaWZ5UGFydGl0aW9uVHlwZXMoSVR5cGVkUmVnaW9uIGFjdHVhbFR5cGVkUmVnaW9uc1tdLCBTdHJpbmcgZXhwZWN0ZWRUeXBlc1tdKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWRUeXBlcy5sZW5ndGg7IGkrKykKLQkJCWFzc2VydEVxdWFscygicGFydGl0aW9uIHR5cGUgbWlzbWF0Y2hlZCIsIGV4cGVjdGVkVHlwZXNbaV0sIGFjdHVhbFR5cGVkUmVnaW9uc1tpXS5nZXRUeXBlKCkpOwotCX0KLQotCS8qKgotCSAqIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIHBhcnRpdGlvbnMgYmVnaW4gYXQgdGhlIGdpdmVuIG9mZnNldHMKLQkgKiBAcGFyYW0gdHlwZWRSZWdpb25zCi0JICogQHBhcmFtIHR5cGVzCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgdmVyaWZ5UGFydGl0aW9uUmVnaW9ucyhJVHlwZWRSZWdpb24gdHlwZWRSZWdpb25zW10sIGludCBvZmZzZXRzW10pIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBvZmZzZXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhc3NlcnRFcXVhbHMoIm9mZnNldCBtaXNtYXRjaGVkIiwgdHlwZWRSZWdpb25zW2ldLmdldE9mZnNldCgpLCBvZmZzZXRzW2ldKTsKLQkJCWlmIChpID4gMCkgewotCQkJCWFzc2VydEVxdWFscygibGVuZ3RocyBtaXNhbGlnbmVkIiwgdHlwZWRSZWdpb25zW2ldLmdldE9mZnNldCgpLCB0eXBlZFJlZ2lvbnNbaSAtIDFdLmdldE9mZnNldCgpICsgdHlwZWRSZWdpb25zW2kgLSAxXS5nZXRMZW5ndGgoKSk7Ci0JCQl9Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy9odG1sL2V4YW1wbGUwMS5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy9odG1sL2V4YW1wbGUwMS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTBmZmUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMvaHRtbC9leGFtcGxlMDEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgU1lTVEVNIG5vbnNlbnNlPgotPGh0bWw+Ci08Ym88IS0tY29tbWVudHMtLT5keT4KLWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci08L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy9odG1sL2V4YW1wbGUwMi5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy9odG1sL2V4YW1wbGUwMi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDI4NmM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMvaHRtbC9leGFtcGxlMDIuaHRtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMvaHRtbC9leGFtcGxlMDMuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMvaHRtbC9leGFtcGxlMDMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM4ZGFmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL2h0bWwvZXhhbXBsZTAzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTxodG1sPjxoZWFkPgotPE1FVEEgY3JlYXRvcj13c3NhLzQuMHByZTExOT4KLTx0aXRsZT5TY3JpcHQgVGVzdHM8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08U2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij48L1NDUklQVD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvQ29tbW9uWE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL0NvbW1vblhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGUxNmEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvQ29tbW9uWE1MLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHM7Ci0KLQotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5PdXRwdXRLZXlzOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uU291cmNlOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeUNvbmZpZ3VyYXRpb25FcnJvcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLmRvbS5ET01Tb3VyY2U7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtUmVzdWx0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLS8qKgotICovCi1wdWJsaWMgY2xhc3MgQ29tbW9uWE1MIHsKLQotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIERvY3VtZW50QnVpbGRlciBnZXREb2N1bWVudEJ1aWxkZXIoKSB7Ci0JCURvY3VtZW50QnVpbGRlciByZXN1bHQgPSBudWxsOwotCQl0cnkgewotCQkJcmVzdWx0ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld0RvY3VtZW50QnVpbGRlcigpOwotCQl9Ci0JCWNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCUxvZ2dlci5sb2dFeGNlcHRpb24oZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBEb2N1bWVudEJ1aWxkZXIgZ2V0RG9jdW1lbnRCdWlsZGVyKGJvb2xlYW4gdmFsaWRhdGluZykgewotCQlEb2N1bWVudEJ1aWxkZXIgcmVzdWx0ID0gbnVsbDsKLQkJdHJ5IHsKLQkJCURvY3VtZW50QnVpbGRlckZhY3RvcnkgaW5zdGFuY2UgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0JCQlpbnN0YW5jZS5zZXRWYWxpZGF0aW5nKHZhbGlkYXRpbmcpOwotCQkJcmVzdWx0ID0gaW5zdGFuY2UubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0JCX0KLQkJY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkgewotCQkJTG9nZ2VyLmxvZ0V4Y2VwdGlvbihlKTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXJpYWxpemUoRG9jdW1lbnQgZG9jdW1lbnQsIE91dHB1dFN0cmVhbSBvc3RyZWFtKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTb3VyY2UgZG9tU291cmNlID0gbmV3IERPTVNvdXJjZShkb2N1bWVudCk7Ci0JCXRyeSB7Ci0JCQlUcmFuc2Zvcm1lciBzZXJpYWxpemVyID0gVHJhbnNmb3JtZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3VHJhbnNmb3JtZXIoKTsKLQkJCXRyeSB7Ci0JCQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLklOREVOVCwgInllcyIpOwotCQkJCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoIntodHRwOi8veG1sLmFwYWNoZS5vcmcveHNsdH1pbmRlbnQtYW1vdW50IiwgIjQiKTsKLQkJCQlzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuRU5DT0RJTkcsICJVVEYtMTYiKTsKLQkJCX0KLQkJCWNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJCS8vIHVuc3VwcG9ydGVkIHByb3BlcnRpZXMKLQkJCX0KLQkJCXNlcmlhbGl6ZXIudHJhbnNmb3JtKGRvbVNvdXJjZSwgbmV3IFN0cmVhbVJlc3VsdChvc3RyZWFtKSk7Ci0JCX0KLQkJY2F0Y2ggKFRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JCWNhdGNoIChUcmFuc2Zvcm1lckZhY3RvcnlDb25maWd1cmF0aW9uRXJyb3IgZSkgewotCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCQljYXRjaCAoVHJhbnNmb3JtZXJFeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL0RhdGVVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL0RhdGVVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMzdhYTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9EYXRlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgamF2YS50ZXh0LkRhdGVGb3JtYXQ7Ci1pbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7Ci1pbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotCi0vKioKLSAqIEBhdXRob3IgZGF2aWR3Ci0gKgotICogVG8gY2hhbmdlIHRoaXMgZ2VuZXJhdGVkIGNvbW1lbnQgZWRpdCB0aGUgdGVtcGxhdGUgdmFyaWFibGUgInR5cGVjb21tZW50IjoKLSAqIFdpbmRvdz5QcmVmZXJlbmNlcz5KYXZhPlRlbXBsYXRlcy4KLSAqIFRvIGVuYWJsZSBhbmQgZGlzYWJsZSB0aGUgY3JlYXRpb24gb2YgdHlwZSBjb21tZW50cyBnbyB0bwotICogV2luZG93PlByZWZlcmVuY2VzPkphdmE+Q29kZSBHZW5lcmF0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgRGF0ZVV0aWwgewotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEFsbFRlc3RzLgotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIG5vdyA9IG51bGw7Ci0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIG5vdygpIHsKLQkJLy8ganVzdCBjYWxjdWxhdGUgb25jZSwgc28gd2hvbGUgcnVuIGFzIHNhbWUgdGltZXN0YW1wCi0JCWlmIChEYXRlVXRpbC5ub3cgPT0gbnVsbCkgewotCQkJRGF0ZUZvcm1hdCBmb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eSctJ01NJy0nZGQnLSdrayctJ21tJy0nc3MiKTsKLQkJCUNhbGVuZGFyIGNhbGVuZGFyID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKLQkJCURhdGUgdG9kYXkgPSBjYWxlbmRhci5nZXRUaW1lKCk7Ci0JCQlEYXRlVXRpbC5ub3cgPSBmb3JtYXQuZm9ybWF0KHRvZGF5KTsKLQkJfQotCQlyZXR1cm4gRGF0ZVV0aWwubm93OwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvRmlsZVV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvRmlsZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI0ODYwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL0ZpbGVVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZW5hbWVGaWx0ZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBAYXV0aG9yIGRhdmlkdwotICoKLSAqLwotcHVibGljIGNsYXNzIEZpbGVVdGlsIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMiOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZMaW5lU2VwYXJhdG9yID0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZQYXRoU2VwYXJhdG9yID0gU3lzdGVtLmdldFByb3BlcnR5KCJwYXRoLnNlcGFyYXRvciIpOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZGaWxlU2VwYXJhdG9yID0gU3lzdGVtLmdldFByb3BlcnR5KCJmaWxlLnNlcGFyYXRvciIpOwotCi0Jc3RhdGljIEZpbGUgcHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5ID0gbnVsbDsKLQlzdGF0aWMgcHJpdmF0ZSBTdHJpbmcgbG9nU3ViRGlyZWN0b3J5UGF0aDsKLQotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gbm90VHJpZWRZZXQgPSB0cnVlOwotCi0JcHVibGljIHN0YXRpYyBjbGFzcyBEaXJGaWxlbmFtZUZpbHRlciBpbXBsZW1lbnRzIEZpbGVuYW1lRmlsdGVyIHsKLQkJU3RyaW5nIHN0YXJ0T2ZBY2NlcHRhYmxlTmFtZXM7Ci0KLQkJcHVibGljIERpckZpbGVuYW1lRmlsdGVyKFN0cmluZyBzdGFydE9mRGlyTmFtZSkgewotCQkJc3RhcnRPZkFjY2VwdGFibGVOYW1lcyA9IHN0YXJ0T2ZEaXJOYW1lOwotCQl9Ci0KLQkJLyoqCi0JCSAqIEBzZWUgamF2YS5pby5GaWxlRmlsdGVyI2FjY2VwdChGaWxlKQotCQkgKi8KLQkJcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgcGF0aG5hbWUsIFN0cmluZyBmaWxlbmFtZSkgewotCQkJLy8gd2UnbGwganVzdCBhc3N1bWUgaWYgaXQgc3RhcnRzIHdpdGggcmlnaHQga2V5LCBpdCBpcyBhIGRpcmVjdG9yeSAuLi4gZm9yIG5vdwotCQkJcmV0dXJuIGZpbGVuYW1lLnN0YXJ0c1dpdGgoc3RhcnRPZkFjY2VwdGFibGVOYW1lcyk7Ci0JCX0KLQotCX0KLQotCXB1YmxpYyBzdGF0aWMgRmlsZSBnZXRQcmV2aW91c1Jlc3VsdHNEaXJlY3RvcnkoU3RyaW5nIGRpcmVjdG9yeVJvb3ROYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlpZiAocHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5ID09IG51bGwgJiYgbm90VHJpZWRZZXQpIHsKLQkJCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJCVVSTCB1cmwgPSBidW5kbGUuZ2V0RW50cnkoIi8iKTsgLy8kTk9OLU5MUy0xJAotCQkJLy9TdHJpbmcgaW5zdGFsbFBhdGggPSB1cmwuZ2V0UGF0aCgpOwotCQkJLy8gYWRkIGtub3duIGZpbGUgc28gVVJMIG1ldGhvZCBiZWxvdyBjYW4gYmUgdXNlZAotCQkJLy8gKGRvZXNuJ3Qgc2VlbSB0byB3b3JrIGZvciBkaXJlY3Rvcnk/KQotCQkJVVJMIHRvdGFsVVJMID0gbmV3IFVSTCh1cmwsICJwbHVnaW4ueG1sIik7Ci0JCQlVUkwgZmluYWx1cmwgPSBQbGF0Zm9ybS5hc0xvY2FsVVJMKHRvdGFsVVJMKTsKLQkJCVN0cmluZyBmaW5hbEZpbGUgPSBmaW5hbHVybC5nZXRGaWxlKCk7Ci0JCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShmaW5hbEZpbGUpOwotCQkJU3RyaW5nIGZpbmFsUGF0aCA9IGZpbGUuZ2V0UGFyZW50KCk7Ci0JCQlGaWxlIHBsdWdpbkhvbWVEaXIgPSBuZXcgRmlsZShmaW5hbFBhdGgpOwotCQkJRmlsZW5hbWVGaWx0ZXIgZGlyRmlsdGVyID0gbmV3IERpckZpbGVuYW1lRmlsdGVyKGRpcmVjdG9yeVJvb3ROYW1lKTsKLQkJCUZpbGVbXSBhbGxEaXJzID0gcGx1Z2luSG9tZURpci5saXN0RmlsZXMoZGlyRmlsdGVyKTsKLQotCQkJLy8gYXNzdW1lIGZpcnN0IGluIGxpc3QgaXMgbmV3ZXN0LCB0aGVuIHN0YXJ0IGxvb2tpbmcgd2l0aCB0aGUgCi0JCQkvLyBzZWNvbmQgaXRlbSAuLi4ganVzdCB0byBhdm9pZCAibnVsbCIgY2FzZSBjaGVja2luZwotCQkJaWYgKGFsbERpcnMubGVuZ3RoID4gMCkgewotCQkJCUZpbGUgY3VycmVudE5ld2VzdCA9IGFsbERpcnNbMF07Ci0JCQkJZm9yIChpbnQgaSA9IDE7IGkgPCBhbGxEaXJzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCUZpbGUgY3VycmVudCA9IGFsbERpcnNbaV07Ci0JCQkJCS8vIE5PVEU6IHdlIGdvIGJ5IG1vZGlmaWVkIGRhdGUsIG5vdCBieSB0aGUgYWN0dWFsIHRpbWUgc3RhbXAgaW4gbmFtZS4KLQkJCQkJLy8gVGhpcyBzaG91bGQgd29yayBmb3IgYWxsIG5vcm1hbCBjYXNlcywgYnV0IG1heSBub3QgaWYgc29tZW9uZSBkb2VzIHNvbWUKLQkJCQkJLy8gImZ1bm55IiBjb3B5aW5nLCBvciB1cGRhdGluZyBmcm9tIHJlcG9zaXRvcnkuCi0JCQkJCWlmIChjdXJyZW50Lmxhc3RNb2RpZmllZCgpID4gY3VycmVudE5ld2VzdC5sYXN0TW9kaWZpZWQoKSkgewotCQkJCQkJY3VycmVudE5ld2VzdCA9IGN1cnJlbnQ7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJcHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5ID0gY3VycmVudE5ld2VzdDsKLQkJCX0KLQkJCW5vdFRyaWVkWWV0ID0gZmFsc2U7Ci0JCX0KLQkJcmV0dXJuIHByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIEZpbGUgbWFrZUZpbGVGb3IoU3RyaW5nIGRpcmVjdG9yeSwgU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgdGVzdFJlc3VsdHNEaXJlY3RvcnlQcmVmaXgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJVVJMIHVybCA9IGJ1bmRsZS5nZXRFbnRyeSgiLyIpOyAgLy8kTk9OLU5MUy0xJAotCQlVUkwgbG9jYWxVUkwgPSBQbGF0Zm9ybS5hc0xvY2FsVVJMKHVybCk7Ci0JCVN0cmluZyBpbnN0YWxsUGF0aCA9IGxvY2FsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIHRvdGFsRGlyZWN0b3J5ID0gaW5zdGFsbFBhdGggKyBkaXJlY3Rvcnk7Ci0JCVN0cmluZyB0b3RhbFBhdGggPSB0b3RhbERpcmVjdG9yeSArICIvIiArIGZpbGVuYW1lOwotCQlVUkwgdG90YWxVUkwgPSBuZXcgVVJMKHVybCwgdG90YWxQYXRoKTsKLQkJLy9VUkwgZmluYWx1cmwgPSBQbGF0Zm9ybS5hc0xvY2FsVVJMKHRvdGFsVVJMKTsKLQkJU3RyaW5nIGZpbmFsRmlsZSA9IHRvdGFsVVJMLmdldEZpbGUoKTsKLQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZmluYWxGaWxlKTsKLQkJU3RyaW5nIGZpbmFsUGF0aCA9IGZpbGUuZ2V0UGFyZW50KCk7Ci0JCUZpbGUgZGlyID0gbmV3IEZpbGUoZmluYWxQYXRoKTsKLQkJaWYgKCFkaXIuZXhpc3RzKCkpIHsKLQkJCS8vIGEgbGl0dGxlIHNhZmV0eSBuZXQsIGJlIHN1cmUgdGhlIHByZXZpb3VzIG5ld2VzdCBkaXJlY3RvcnkKLQkJCS8vIGlzIGluaXRpYWxpemVkLCBqdXN0IGluIGNhc2Ugbm8gb25lIGVsc2UgaGFzIGRvbmUgc28KLQkJCWlmICh0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeCAhPSBudWxsICYmIHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4Lmxlbmd0aCgpID4gMCkgewotCQkJCUZpbGVVdGlsLmdldFByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSh0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeCk7Ci0JCQl9Ci0JCQkvLyBub3cgaXRzICJzYWZlIiB0byBtYWtlIHRoZSBuZXcgb25lCi0JCQlkaXIubWtkaXJzKCk7Ci0JCX0KLQkJcmV0dXJuIGZpbGU7Ci0JfQotCi0JLyoqCi0JICogSnVzdCBhIGdlbmVyYWwgdXRpbGl0eSBtZXRob2QKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiBAcmV0dXJuIFN0cmluZwotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEV4dGVuc2lvbihTdHJpbmcgZmlsZW5hbWUpIHsKLQkJU3RyaW5nIGV4dGVuc2lvbiA9IG51bGw7Ci0JCWludCBkb3RQb3N0aW9uID0gZmlsZW5hbWUubGFzdEluZGV4T2YoJy4nKTsKLQkJaWYgKGRvdFBvc3Rpb24gPiAtMSkgewotCQkJZXh0ZW5zaW9uID0gZmlsZW5hbWUuc3Vic3RyaW5nKGRvdFBvc3Rpb24gKyAxKTsKLQkJfQotCQllbHNlIHsKLQkJCWV4dGVuc2lvbiA9IG5ldyBTdHJpbmcoKTsKLQkJfQotCQlyZXR1cm4gZXh0ZW5zaW9uOwotCX0KLQotCS8qKgotCSAqIEdlbmVyYWwgcHVycG9zZSB1dGlsaXR5IG1ldGhvZCB0byBlbnN1cmUgdGhlIGxvZwotCSAqIGRpcmVjdG9yeSBleGlzdHMsIGFuZCByZXR1cm5zIHRoZSBuYW1lLiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRMb2dEaXJlY3RvcnkoKSB7Ci0JCWlmIChsb2dTdWJEaXJlY3RvcnlQYXRoID09IG51bGwpIHsKLQkJCVN0cmluZyBtYWluRGlyZWN0b3J5ID0gIi9sb2dzIjsKLQkJCUZpbGUgZGlyID0gbmV3IEZpbGUobWFpbkRpcmVjdG9yeSk7Ci0JCQllbnN1cmVFeGlzdHMoZGlyKTsKLQkJCVN0cmluZyBzdWJEaXJlY3RvcnkgPSBUaW1lc3RhbXBVdGlsLnRpbWVzdGFtcCgpOwotCQkJbG9nU3ViRGlyZWN0b3J5UGF0aCA9IG1haW5EaXJlY3RvcnkgKyAiLyIgKyBzdWJEaXJlY3Rvcnk7Ci0JCQlGaWxlIHN1YmRpciA9IG5ldyBGaWxlKGxvZ1N1YkRpcmVjdG9yeVBhdGgpOwotCQkJZW5zdXJlRXhpc3RzKHN1YmRpcik7Ci0JCX0KLQkJcmV0dXJuIGxvZ1N1YkRpcmVjdG9yeVBhdGg7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGVuc3VyZUV4aXN0cyhGaWxlIGRpcikgewotCQlpZiAoIWRpci5leGlzdHMoKSkgewotCQkJZGlyLm1rZGlycygpOwotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGVyZm9ybWFuY2VPdXRwdXRMb2dOYW1lKCkgewotCQlTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQkJU3RyaW5nIGRpcmVjdG9yeU5hbWUgPSBGaWxlVXRpbC5nZXRMb2dEaXJlY3RvcnkoKTsKLQkJU3RyaW5nIGV4dGVuc2lvbiA9ICIub3V0IjsKLQkJU3RyaW5nIGJhc2VOYW1lID0gInNlZFRlc3RzIjsKLQkJbG9uZyBub3cgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJU3RyaW5nIG5vd1N0ciA9IFN0cmluZy52YWx1ZU9mKG5vdyk7Ci0JCXJlc3VsdCA9IGRpcmVjdG9yeU5hbWUgKyBGaWxlVXRpbC5mRmlsZVNlcGFyYXRvciArIGJhc2VOYW1lICsgbm93U3RyICsgZXh0ZW5zaW9uOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvU3RyaW5nQ29tcGFyZVV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvU3RyaW5nQ29tcGFyZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTMzYmE2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL1N0cmluZ0NvbXBhcmVVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotCi1wdWJsaWMgY2xhc3MgU3RyaW5nQ29tcGFyZVV0aWwgewotCi0JcHVibGljIGJvb2xlYW4gZXF1YWxzSWdub3JlTGluZVNlcGVyYXRvcihTdHJpbmcgc3RyaW5nMSwgU3RyaW5nIHN0cmluZzIpIHsKLQotCQlpZiAoc3RyaW5nMSA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCQlpZiAoc3RyaW5nMiA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZ1JlYWRlciBzMVJlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIoc3RyaW5nMSk7Ci0JCVN0cmluZ1JlYWRlciBzMlJlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIoc3RyaW5nMik7Ci0KLQkJLy8gYXNzdW1lIHRydWUgdW5sZXNzIGZpbmQgZXZpZGVuY2UgdG8gdGhlIGNvbnRyYXJ5Ci0JCWJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKLQkJaW50IHMxQ2hhciA9IC0xOwotCQlpbnQgczJDaGFyID0gLTE7Ci0JCWRvIHsKLQotCQkJczFDaGFyID0gZ2V0TmV4dENoYXIoczFSZWFkZXIpOwotCi0JCQlzMkNoYXIgPSBnZXROZXh0Q2hhcihzMlJlYWRlcik7Ci0KLQkJCWlmIChzMUNoYXIgIT0gczJDaGFyKSB7Ci0JCQkJcmVzdWx0ID0gZmFsc2U7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJd2hpbGUgKHMxQ2hhciAhPSAtMSAmJiBzMkNoYXIgIT0gLTEpOwotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogTWV0aG9kIGdldE5leHRDaGFyLgotCSAqIEBwYXJhbSBzMVJlYWRlcgotCSAqIEByZXR1cm4gY2hhcgotCSAqLwotCXByaXZhdGUgaW50IGdldE5leHRDaGFyKFN0cmluZ1JlYWRlciByZWFkZXIpIHsKLQkJaW50IG5leHRDaGFyID0gLTE7Ci0JCXRyeSB7Ci0JCQluZXh0Q2hhciA9IHJlYWRlci5yZWFkKCk7Ci0JCQl3aGlsZSAoaXNFT0wobmV4dENoYXIpKSB7Ci0JCQkJbmV4dENoYXIgPSByZWFkZXIucmVhZCgpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBuZXh0Q2hhcjsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNFT0woaW50IGFDaGFyKSB7Ci0JCXJldHVybiAoYUNoYXIgPT0gJ1xuJyB8fCBhQ2hhciA9PSAnXHInKTsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL1Rlc3RSdW50aW1lRXhjZXB0aW9uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL1Rlc3RSdW50aW1lRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkN2Q2Y2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9UZXN0UnVudGltZUV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnV0aWxzOwotCi0KLQotLyoqCi0gKiBUaGUgU291cmNlRWRpdGluZ1J1bnRpbWVFeGNlcHRpb24gaXMgb2Z0ZW4gdGhyb3duIGJ5IFNvdXJjZSBFZGl0b3IgbWV0aG9kcyB3aGVuCi0gKiBhIHNlcnZpY2Ugd2UgdXNlIHRocm93cyBhIGNoZWNrZWQgZXhjZXB0aW9uLCBidXQgd2Ugd2FudCB0byBjb252ZXJ0IGFuZCB0cmVhdAotICogYXMgYSBydW50aW1lIGV4Y2VwdGlvbi4gKFN1Y2ggYXMgQmFkTG9jYXRpb25FeGNlcHRpb24gaXMgYSBjb21tb24gZXhhbXBsZSkuCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0UnVudGltZUV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24gewotCS8qKgotCSAqIERlZmF1bHQgPGNvZGU+c2VyaWFsVmVyc2lvblVJRDwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQlwcml2YXRlIFRocm93YWJsZSBvcmlnaW5hbEV4Y2VwdGlvbjsKLQotCXB1YmxpYyBUZXN0UnVudGltZUV4Y2VwdGlvbigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgVGVzdFJ1bnRpbWVFeGNlcHRpb24oU3RyaW5nIHMpIHsKLQkJc3VwZXIocyk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBmb3JtIG9mIHRoZSBjb25zdHJ1Y3RvciBpcyB1c2VkIHRvIHdyYXBwZXIgYW5vdGhlciBleGNlcHRpb24uCi0JICovCi0JcHVibGljIFRlc3RSdW50aW1lRXhjZXB0aW9uKFRocm93YWJsZSB0KSB7Ci0JCXN1cGVyKCk7Ci0JCW9yaWdpbmFsRXhjZXB0aW9uID0gdDsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIGZvcm0gb2YgdGhlIGNvbnN0cnVjdG9yIGlzIHVzZWQgdG8gd3JhcHBlciBhbm90aGVyIGV4Y2VwdGlvbiwgYnV0IHN0aWxsCi0JICogcHJvdmlkZSBhIG5ldyBkZXNjcmlwdGl2ZSBtZXNzYWdlLgotCSAqLwotCXB1YmxpYyBUZXN0UnVudGltZUV4Y2VwdGlvbihUaHJvd2FibGUgdCwgU3RyaW5nIHMpIHsKLQkJc3VwZXIocyk7Ci0JCW9yaWdpbmFsRXhjZXB0aW9uID0gdDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKSB7Ci0JCVN0cmluZyByZXN1bHQgPSBzdXBlci5nZXRNZXNzYWdlKCk7Ci0JCWlmICgocmVzdWx0ICE9IG51bGwpICYmICghcmVzdWx0LmVuZHNXaXRoKCIuIikpKSAvLyROT04tTkxTLTEkCi0JCQlyZXN1bHQgPSByZXN1bHQgKyAiLiI7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKG9yaWdpbmFsRXhjZXB0aW9uICE9IG51bGwpIHsKLQkJCVN0cmluZyBlbWJlZGRlZE1lc3NhZ2UgPSBvcmlnaW5hbEV4Y2VwdGlvbi5nZXRNZXNzYWdlKCk7Ci0JCQkvLyBub3QgYWxsIGV4Y2VwdGlvbnMgKGUuZy4gbWFueSBOdWxsUG9pbnRlciBleGNlcHRpb24pIGhhdmUgbWVzc2FnZXMKLQkJCVN0cmluZyBvcmlnaW5hbEVycm9yID0gIk9yaWdpbmFsIGVycm9yOiI7CS8vJE5PTi1OTFMtMSQKLQkJCWlmIChlbWJlZGRlZE1lc3NhZ2UgIT0gbnVsbCkKLQkJCQlyZXN1bHQgPSByZXN1bHQgKyAiICAiICsgb3JpZ2luYWxFcnJvciArICIgIiArIGVtYmVkZGVkTWVzc2FnZTsvLyROT04tTkxTLTIkLy8kTk9OLU5MUy0xJAotCQkJZWxzZQotCQkJCXJlc3VsdCA9IHJlc3VsdCArICIgICIgKyBvcmlnaW5hbEVycm9yICsgIiAiICsgb3JpZ2luYWxFeGNlcHRpb24udG9TdHJpbmcoKTsvLyROT04tTkxTLTIkLy8kTk9OLU5MUy0xJAotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIFRocm93YWJsZSBnZXRPcmlnaW5hbEV4Y2VwdGlvbigpIHsKLQkJcmV0dXJuIG9yaWdpbmFsRXhjZXB0aW9uOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCS8vIHdlIGRvbid0IHB1dCBzdXBlci50b1N0cmluZyBvciBnZXRDbGFzcyB0byAiaGlkZSIgdGhhdCBpdCB3YXMgYQotCQkvLyBTb3VyY2VFZGl0aW5nIGV4Y2VwdGlvbiAob3RoZXJ3aXNlLCBmb2N1cyBnb2VzIG9uIHRoYXQsCi0JCS8vIGluc3RlYWQgb2Ygb3JpZ2luYWwgZXhjZXB0aW9uLgotCQlTdHJpbmcgbWVzc2FnZSA9IGdldE1lc3NhZ2UoKTsKLQkJLy8gbWVzc2FnZSBzaG91bGQgbmV2ZXIgYmUgbnVsbCAuLi4gYnV0IGp1c3QgaW4gY2FzZQotCQlyZXR1cm4gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogc3VwZXIudG9TdHJpbmcoKTsKLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL1Rlc3RXcml0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvVGVzdFdyaXRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTNmNTYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvVGVzdFdyaXRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0V3JpdGVyIGV4dGVuZHMgU3RyaW5nV3JpdGVyIHsKLQkvLyB3ZSBkb24ndCByZWFsbHkgd2FudCB0byB1c2UgdGhlIHN5c3RlbSBFT0wsIHNpbmNlCi0JLy8gd2Ugd2FudCBhIGNvbW1vbiBvbmNlIGFjcm9zcyBwbGF0Zm9ybXMsIENWUywgZXRjLgotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIGNvbW1vbkVPTCA9ICJcclxuIjsKLQotCS8vU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOyAKLQotCXB1YmxpYyB2b2lkIHdyaXRlbG4oU3RyaW5nIGxpbmUpIHsKLQkJd3JpdGUobGluZSk7Ci0JCXdyaXRlKGNvbW1vbkVPTCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvVGltZXN0YW1wVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9UaW1lc3RhbXBVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5YTQzODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9UaW1lc3RhbXBVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBqYXZhLnRleHQuRGF0ZUZvcm1hdDsKLWltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci0KLS8qKgotICogQGF1dGhvciBkYXZpZHcKLSAqCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIG9uZSB0aW1lc3RhbXAgcGVyIFZNIHJ1bi4KLSAqIChUZWNobmljYWxseSwgcGVyIGNsYXNzIGxvYWRpbmcuKQotICovCi1wdWJsaWMgY2xhc3MgVGltZXN0YW1wVXRpbCB7Ci0KLQlwcml2YXRlIHN0YXRpYyBEYXRlIHRpbWVzdGFtcCA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgRGF0ZUZvcm1hdCBzaG9ydEZvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5Jy0nTU0nLSdkZCIpOwotCS8vCXByaXZhdGUgc3RhdGljIERhdGVGb3JtYXQgbG9uZ0Zvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5Jy0nTU0nLSdkZCctJ2trJy0nbW0nLSdzcyIpOwotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIG5vd1Nob3J0ID0gbnVsbDsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHRpbWVzdGFtcCgpIHsKLQotCQlpZiAoVGltZXN0YW1wVXRpbC5ub3dTaG9ydCA9PSBudWxsKSB7Ci0JCQlUaW1lc3RhbXBVdGlsLm5vd1Nob3J0ID0gc2hvcnRGb3JtYXQuZm9ybWF0KGVuc3VyZVRpbWVzdGFtcCgpKTsKLQkJfQotCQlyZXR1cm4gVGltZXN0YW1wVXRpbC5ub3dTaG9ydDsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIERhdGUgZW5zdXJlVGltZXN0YW1wKCkgewotCQkvLyBqdXN0IGNhbGN1bGF0ZSAndGltZXN0YW1wJyBvbmNlIHBlciBjbGFzcyBsb2FkaW5nLCAKLQkJLy8gc28gdGhpcyAndGltZXN0YW1wJyByZW1haW5zIHRoZSBzYW1lIGR1cmluZyAKLQkJLy8gZW50aXJlIHJ1bi4gCi0JCWlmIChUaW1lc3RhbXBVdGlsLnRpbWVzdGFtcCA9PSBudWxsKSB7Ci0JCQlDYWxlbmRhciBjYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7Ci0JCQlUaW1lc3RhbXBVdGlsLnRpbWVzdGFtcCA9IGNhbGVuZGFyLmdldFRpbWUoKTsKLQkJfQotCQlyZXR1cm4gVGltZXN0YW1wVXRpbC50aW1lc3RhbXA7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9Xb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzNzBhY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9Xb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlsczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotCi1jbGFzcyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IgaW1wbGVtZW50cyBJUHJvZ3Jlc3NNb25pdG9yIHsKLQlwcml2YXRlIGJvb2xlYW4gZmluaXNoZWQgPSBmYWxzZTsKLQotCXB1YmxpYyB2b2lkIGJlZ2luVGFzayhTdHJpbmcgbmFtZSwgaW50IHRvdGFsV29yaykgewotCQkvLyB3ZSBkb250JyBjYXJlCi0JfQotCi0JcHVibGljIHZvaWQgZG9uZSgpIHsKLQkJZmluaXNoZWQgPSB0cnVlOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzRmluaXNoZWQoKSB7Ci0JCXJldHVybiBmaW5pc2hlZDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbnRlcm5hbFdvcmtlZChkb3VibGUgd29yaykgewotCQkvLyB3ZSBkb250JyBjYXJlCi0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNDYW5jZWxlZCgpIHsKLQkJcmV0dXJuIGZpbmlzaGVkOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldENhbmNlbGVkKGJvb2xlYW4gdmFsdWUpIHsKLQkJaWYgKHZhbHVlID09IHRydWUpCi0JCQlmaW5pc2hlZCA9IHRydWU7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0VGFza05hbWUoU3RyaW5nIG5hbWUpIHsKLQkJLy8gd2UgZG9uJ3QgY2FyZQotCX0KLQotCXB1YmxpYyB2b2lkIHN1YlRhc2soU3RyaW5nIG5hbWUpIHsKLQkJLy8gd2UgZG9uJ3QgY2FyZQotCX0KLQotCXB1YmxpYyB2b2lkIHdvcmtlZChpbnQgd29yaykgewotCQkvLyB3ZSBkb24ndCBjYXJlCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTBhMTk2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QKLQluYW1lPSJ0ZXN0c3VpdGUiCi0JZGVmYXVsdD0icnVuIgotCWJhc2VkaXI9Ii4iPgotCTwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0JPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KLQk8IS0tIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIke2Jhc2VkaXJ9XC4uXC4uIiAvPiAtLT4KLQotCTxlY2hvIG1lc3NhZ2U9ImJhc2VkaXIgJHtiYXNlZGlyfSIgLz4KLQk8ZWNobyBtZXNzYWdlPSJlY2xpcHNlIHBsYWNlICR7ZWNsaXBzZS1ob21lfSIgLz4KLQotCTwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBwbHVnaW4tbmFtZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLQk8cHJvcGVydHkKLQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzIiAvPgotCTxwcm9wZXJ0eQotCQluYW1lPSJsaWJyYXJ5LWZpbGUiCi0JCXZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotCTwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0JPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJpbml0Ij4KLQkJPHRzdGFtcCAvPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQKLQkJCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLQkJCQlpbmNsdWRlcz0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy4qeG1sIiAvPgotCQk8L2RlbGV0ZT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0JPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0JCTxwcm9wZXJ0eQotCQkJbmFtZT0id3N0LWZvbGRlciIKLQkJCXZhbHVlPSIke2VjbGlwc2UtaG9tZX0vd3N0X2ZvbGRlciIgLz4KLQkJPGRlbGV0ZQotCQkJZGlyPSIke3dzdC1mb2xkZXJ9IgotCQkJcXVpZXQ9InRydWUiIC8+Ci0JCTxhbnQKLQkJCXRhcmdldD0iY29yZS10ZXN0IgotCQkJYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotCQkJZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iZGF0YS1kaXIiCi0JCQkJdmFsdWU9IiR7d3N0LWZvbGRlcn0iIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJCQl2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJjbGFzc25hbWUiCi0JCQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMuSFRNTENvcmVUZXN0U3VpdGUiIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJwbHVnaW4tcGF0aCIKLQkJCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0JCTwvYW50PgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0JPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotCTwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLQk8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotCQk8IS0tPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+LS0+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0JPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotCTx0YXJnZXQKLQkJbmFtZT0icnVuIgotCQlkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotCQk8YW50Ci0JCQl0YXJnZXQ9ImNvbGxlY3QiCi0JCQlhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0JCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJpbmNsdWRlcyIKLQkJCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy4qeG1sIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0ib3V0cHV0LWZpbGUiCi0JCQkJdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLQkJPC9hbnQ+Ci0JCTwhLS0JCTxlbWFpbFJlc3VsdHMgcmVzdWx0c0ZpbGU9IiR7YnVpbGQtcmVzdWx0cy1ob21lfS8ke3BsdWdpbi1uYW1lfS54bWwiIGFkZHJlc3NsaXN0PSJkYXZpZF93aWxsaWFtc0B1cy5pYm0uY29tIiAvPiAtLT4KLQk8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTFjOGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA0OGUyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLWh0bWxlbmNvZGluZ3Rlc3RzLmphcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA2OGI1Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdlMGZlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0jTW9uIE1heSAzMCAxOTowOTo1MyBFRFQgMjAwNQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1hYm9ydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnNhZmVUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY3NjFlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI0ZyaSBNYXkgMjcgMjM6NDA6MzMgRURUIDIwMDUKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ZmM0ZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiBIVE1MIEVuY29kaW5nIFRlc3RzIFBsdWctaW4KLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAKLUJ1bmRsZS1DbGFzc1BhdGg6IGh0bWxlbmNvZGluZ3Rlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuSFRNTEVuY29kaW5nVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZywKLSBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy5odG1sCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUsCi0gb3JnLmp1bml0LAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZQotRWNsaXBzZS1BdXRvU3RhcnQ6IHRydWUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjZiOTZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLTxib2R5IGxhbmc9IkVOLVVTIj4KLTxoMj5BYm91dCBUaGlzIENvbnRlbnQ8L2gyPgotIAotPHA+RmVicnVhcnkgMjQsIDIwMDU8L3A+CQotPGgzPkxpY2Vuc2U8L2gzPgotCi08cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gKCZxdW90O0NvbnRlbnQmcXVvdDspLiAgVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCi1FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgotCi08cD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSBDb250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoJnF1b3Q7UmVkaXN0cmlidXRvciZxdW90OykgYW5kIGRpZmZlcmVudCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkKLWFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gIENoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiAgSWYgbm8gc3VjaCBsaWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gIFVubGVzcyBvdGhlcndpc2UKLWluZGljYXRlZCBiZWxvdywgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50LjwvcD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTBjNmMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXNvdXJjZS5odG1sZW5jb2Rpbmd0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuaHRtbGVuY29kaW5ndGVzdHMuamFyID0gYmluLwotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBodG1sZW5jb2Rpbmd0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgdGVzdGZpbGVzLyxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbAotc3JjLmluY2x1ZGVzID0gcGx1Z2luLnhtbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL0hUTUxFbmNvZGluZ1Rlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL0hUTUxFbmNvZGluZ1Rlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWIzZjQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC90ZXN0cy9lbmNvZGluZy9IVE1MRW5jb2RpbmdUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmc7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuaHRtbC5IVE1MRW5jb2RpbmdUZXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy5odG1sLkhUTUxIZWFkVG9rZW5pemVyVGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLmh0bWwuVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySFRNTDsKLQotcHVibGljIGNsYXNzIEhUTUxFbmNvZGluZ1Rlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBDbGFzc1tdIGNsYXNzZXMgPSBuZXcgQ2xhc3NbXXtIVE1MRW5jb2RpbmdUZXN0cy5jbGFzcywgSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuY2xhc3MsIFRlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckhUTUwuY2xhc3N9OwotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IEhUTUxFbmNvZGluZ1Rlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBIVE1MRW5jb2RpbmdUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJIVE1MIEVuY29kaW5nIFRlc3QgU3VpdGUiKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoY2xhc3Nlc1tpXSwgY2xhc3Nlc1tpXS5nZXROYW1lKCkpKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0aGVDbGFzcwotCSAqLwotCXB1YmxpYyBIVE1MRW5jb2RpbmdUZXN0U3VpdGUoQ2xhc3MgdGhlQ2xhc3MpIHsKLQkJc3VwZXIodGhlQ2xhc3MpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0aGVDbGFzcwotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEhUTUxFbmNvZGluZ1Rlc3RTdWl0ZShDbGFzcyB0aGVDbGFzcywgU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIodGhlQ2xhc3MsIG5hbWUpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEhUTUxFbmNvZGluZ1Rlc3RTdWl0ZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL0hUTUxFbmNvZGluZ1Rlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvSFRNTEVuY29kaW5nVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjMxYmRhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvSFRNTEVuY29kaW5nVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBIVE1MRW5jb2RpbmdUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy8gVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBIVE1MRW5jb2RpbmdUZXN0c1BsdWdpbiBwbHVnaW47Ci0KLQlwdWJsaWMgc3RhdGljIExpc3QgZ2V0QWxsVGVzdEZpbGVzKFN0cmluZyB0b3BEaXJOYW1lKSB7Ci0JCUxpc3QgcmVzdWx0ID0gbnVsbDsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIHRvcERpck5hbWU7Ci0JCUZpbGUgdG9wRGlyID0gbmV3IEZpbGUobG9jYXRpb24pOwotCQlpZiAoIXRvcERpci5pc0RpcmVjdG9yeSgpKSB7Ci0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKHRvcERpck5hbWUgKyAiIGlzIG5vdCBhIGRpcmVjdG9yeSIpOwotCQl9Ci0JCWVsc2UgewotCQkJcmVzdWx0ID0gZ2V0RmlsZXNJbkRpcih0b3BEaXIpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSFRNTEVuY29kaW5nVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBMaXN0IGdldEZpbGVzSW5EaXIoRmlsZSB0b3BEaXIpIHsKLQkJTGlzdCBmaWxlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJRmlsZVtdIHRvcEZpbGVzID0gdG9wRGlyLmxpc3RGaWxlcygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHRvcEZpbGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlGaWxlIGZpbGUgPSB0b3BGaWxlc1tpXTsKLQkJCWlmIChmaWxlLmlzRmlsZSgpKSB7Ci0JCQkJZmlsZXMuYWRkKGZpbGUpOwotCQkJfQotCQkJZWxzZSBpZiAoZmlsZS5pc0RpcmVjdG9yeSgpICYmICFmaWxlLmdldE5hbWUoKS5lbmRzV2l0aCgiQ1ZTIikpIHsKLQkJCQlMaXN0IGlubmVyRmlsZXMgPSBnZXRGaWxlc0luRGlyKGZpbGUpOwotCQkJCWZpbGVzLmFkZEFsbChpbm5lckZpbGVzKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZXM7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBVUkwgZ2V0SW5zdGFsbExvY2F0aW9uKCkgewotCQlVUkwgaW5zdGFsbExvY2F0aW9uID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZyIpLmdldEVudHJ5KCIvIik7Ci0JCVVSTCByZXNvbHZlZExvY2F0aW9uID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlc29sdmVkTG9jYXRpb24gPSBQbGF0Zm9ybS5yZXNvbHZlKGluc3RhbGxMb2NhdGlvbik7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGltcG9zc2libGUKLQkJCXRocm93IG5ldyBFcnJvcihlKTsKLQkJfQotCQlyZXR1cm4gcmVzb2x2ZWRMb2NhdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLCBvciAna2V5JyBpZiBub3QKLQkgKiBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IEhUTUxFbmNvZGluZ1Rlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRSZXNvdXJjZUJ1bmRsZSgpOwotCQl0cnkgewotCQkJcmV0dXJuIChidW5kbGUgIT0gbnVsbCA/IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KSA6IGtleSk7Ci0JCX0KLQkJY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4ga2V5OwotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBGaWxlIGdldFRlc3RGaWxlKFN0cmluZyBmaWxlcGF0aCkgewotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvLyBTdHJpbmcgc2NoZW1lID0gaW5zdGFsbFVSTC5nZXRQcm90b2NvbCgpOwotCQlTdHJpbmcgcGF0aCA9IGluc3RhbGxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgbG9jYXRpb24gPSBwYXRoICsgZmlsZXBhdGg7Ci0JCUZpbGUgcmVzdWx0ID0gbmV3IEZpbGUobG9jYXRpb24pOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgUmVhZGVyIGdldFRlc3RSZWFkZXIoU3RyaW5nIGZpbGVwYXRoKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIGZpbGVwYXRoOwotCQlSZWFkZXIgcmVzdWx0ID0gbmV3IEZpbGVSZWFkZXIobG9jYXRpb24pOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHdvcmtzcGFjZSBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElXb3Jrc3BhY2UgZ2V0V29ya3NwYWNlKCkgewotCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCX0KLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgSFRNTEVuY29kaW5nVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL2h0bWwvSFRNTEVuY29kaW5nVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC90ZXN0cy9lbmNvZGluZy9odG1sL0hUTUxFbmNvZGluZ1Rlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5ZWQ4Y2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL2h0bWwvSFRNTEVuY29kaW5nVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLmh0bWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXREZWNvZGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ29kaW5nRXJyb3JBY3Rpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkhUTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuSFRNTEVuY29kaW5nVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkVuY29kaW5nTWVtZW50bzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuSVJlc291cmNlQ2hhcnNldERldGVjdG9yOwotCi1wdWJsaWMgY2xhc3MgSFRNTEVuY29kaW5nVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKioKLQkgKiBFbnN1cmVzIHRoYXQgYW4gSW5wdXRTdHJlYW0gaGFzIG1hcmsvcmVzZXQgc3VwcG9ydC4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJbnB1dFN0cmVhbSBnZXRNYXJrU3VwcG9ydGVkU3RyZWFtKElucHV0U3RyZWFtIG9yaWdpbmFsKSB7Ci0JCWlmIChvcmlnaW5hbCA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0JCWlmIChvcmlnaW5hbC5tYXJrU3VwcG9ydGVkKCkpCi0JCQlyZXR1cm4gb3JpZ2luYWw7Ci0JCXJldHVybiBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShvcmlnaW5hbCk7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZURpciA9ICJodG1sLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUhvbWUgPSAidGVzdGZpbGVzLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUxvY2F0aW9uID0gZmlsZUhvbWUgKyBmaWxlRGlyOwotCXByaXZhdGUgaW50IFJFQURfQlVGRkVSX1NJWkUgPSA4MDAwOwotCi0JcHVibGljIEhUTUxFbmNvZGluZ1Rlc3RzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RGaWxlU3RyZWFtKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGV4cGVjdGVkSUFOQUVuY29kaW5nLCBJUmVzb3VyY2VDaGFyc2V0RGV0ZWN0b3IgZGV0ZWN0b3IpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUZpbGUgZmlsZSA9IEhUTUxFbmNvZGluZ1Rlc3RzUGx1Z2luLmdldFRlc3RGaWxlKGZpbGVuYW1lKTsKLQkJaWYgKCFmaWxlLmV4aXN0cygpKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihmaWxlbmFtZSArICIgd2FzIG5vdCBmb3VuZCIpOwotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7Ci0JCS8vIElucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJSW5wdXRTdHJlYW0gaXN0cmVhbSA9IGdldE1hcmtTdXBwb3J0ZWRTdHJlYW0oaW5wdXRTdHJlYW0pOwotCQl0cnkgewotCQkJZGV0ZWN0b3Iuc2V0KGlzdHJlYW0pOwotCQkJRW5jb2RpbmdNZW1lbnRvIGVuY29kaW5nTWVtZW50byA9ICgoSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcilkZXRlY3RvcikuZ2V0RW5jb2RpbmdNZW1lbnRvKCk7Ci0JCQlTdHJpbmcgZm91bmRJQU5BRW5jb2RpbmcgPSBudWxsOwotCQkJaWYgKGVuY29kaW5nTWVtZW50byAhPSBudWxsKSB7Ci0JCQkJZm91bmRJQU5BRW5jb2RpbmcgPSBlbmNvZGluZ01lbWVudG8uZ2V0SmF2YUNoYXJzZXROYW1lKCk7Ci0JCQl9Ci0JCQkvLyBJIGNoYW5nZWQgbWFueSAiZXF1YWxzIiB0byAiZXF1YWxzSWdub3JlQ2FzZSIgb24gMTEvNC8yMDAyLAotCQkJLy8gc2luY2UKLQkJCS8vIHNvbWUgaXNzdWVzIHdpdGggU0hJRlRfSklTIHZzLiBTaGlmdF9KSVMgd2VyZSBjYXVzaW5nIGZhaWx1cmVzLgotCQkJLy8gV2UgZG8gd2FudCB0byBiZSB0b2xlcmFudCBvbiBpbnB1dCwgYW5kIGFjY2VwdCBlaXRoZXIsIGJ1dCBJCi0JCQkvLyB0aGluawotCQkJLy8gdGhhdCBTdXBwb3J0ZWRKYXZhRW5jb2RpbmdzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gInJlY29tbWVuZCIKLQkJCS8vIFNoaWZ0X0pJUy4KLQkJCWJvb2xlYW4gZXhwZWN0ZWRJQU5BUmVzdWx0ID0gZmFsc2U7Ci0JCQlpZiAoZXhwZWN0ZWRJQU5BRW5jb2RpbmcgPT0gbnVsbCkgewotCQkJCWV4cGVjdGVkSUFOQVJlc3VsdCA9IChleHBlY3RlZElBTkFFbmNvZGluZyA9PSBmb3VuZElBTkFFbmNvZGluZyk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlleHBlY3RlZElBTkFSZXN1bHQgPSBleHBlY3RlZElBTkFFbmNvZGluZy5lcXVhbHNJZ25vcmVDYXNlKGZvdW5kSUFOQUVuY29kaW5nKTsKLQkJCX0KLQotCQkJYXNzZXJ0VHJ1ZSgiZW5jb2RpbmcgdGVzdCBmaWxlICIgKyBmaWxlbmFtZSArICIgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZElBTkFFbmNvZGluZyArICIgZm91bmQ6ICIgKyBmb3VuZElBTkFFbmNvZGluZywgZXhwZWN0ZWRJQU5BUmVzdWx0KTsKLQkJCS8vIGEgdmVyeSBzaW1wbGUgcmVhZCB0ZXN0IC4uLiB3aWxsIGNhdXNlIEpVbml0IGVycm9yIChub3QgZmFpbCkKLQkJCS8vIGlmCi0JCQkvLyB0aHJvd3MgZXhjZXB0aW9uLgotCQkJaWYgKGV4cGVjdGVkSUFOQUVuY29kaW5nICE9IG51bGwpIHsKLQkJCQllbnN1cmVDYW5SZWFkKGZpbGVuYW1lLCBmb3VuZElBTkFFbmNvZGluZywgaXN0cmVhbSk7Ci0JCQl9Ci0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChpc3RyZWFtICE9IG51bGwpIHsKLQkJCQlpc3RyZWFtLmNsb3NlKCk7Ci0JCQl9Ci0JCQlpZiAoaW5wdXRTdHJlYW0gIT0gbnVsbCkgewotCQkJCWlucHV0U3RyZWFtLmNsb3NlKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBqdXN0IHJlYWRzIHRvIHN0cmVhbSwgdG8gYmUgc3VyZSBpdCBjYW4gYmUgcmVhZCBwZXIKLQkgKiBlbmNvZGluZywgd2l0aG91dCBleGNlcHRpb24uCi0JICovCi0JcHJpdmF0ZSB2b2lkIGVuc3VyZUNhblJlYWQoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZW5jb2RpbmcsIElucHV0U3RyZWFtIGluU3RyZWFtKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlDaGFyc2V0IGNoYXJzZXQgPSBDaGFyc2V0LmZvck5hbWUoZW5jb2RpbmcpOwotCQlDaGFyc2V0RGVjb2RlciBjaGFyc2V0RGVjb2RlciA9IGNoYXJzZXQubmV3RGVjb2RlcigpOwotCQljaGFyc2V0RGVjb2Rlci5vbk1hbGZvcm1lZElucHV0KENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0JCWNoYXJzZXREZWNvZGVyLm9uVW5tYXBwYWJsZUNoYXJhY3RlcihDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCi0JCUlucHV0U3RyZWFtUmVhZGVyIHJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpblN0cmVhbSwgY2hhcnNldERlY29kZXIpOwotCQlTdHJpbmdCdWZmZXIgc3RyaW5nQnVmZmVyID0gcmVhZElucHV0U3RyZWFtKHJlYWRlcik7Ci0JCWlmIChERUJVRykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZmlsZW5hbWUpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKHN0cmluZ0J1ZmZlci50b1N0cmluZygpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgU3RyaW5nQnVmZmVyIHJlYWRJbnB1dFN0cmVhbShSZWFkZXIgcmVhZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCi0JCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWludCBudW1SZWFkID0gMDsKLQkJY2hhciB0QnVmZltdID0gbmV3IGNoYXJbUkVBRF9CVUZGRVJfU0laRV07Ci0JCXdoaWxlICgobnVtUmVhZCA9IHJlYWRlci5yZWFkKHRCdWZmLCAwLCB0QnVmZi5sZW5ndGgpKSAhPSAtMSkgewotCQkJYnVmZmVyLmFwcGVuZCh0QnVmZiwgMCwgbnVtUmVhZCk7Ci0JCX0KLQkJcmV0dXJuIGJ1ZmZlcjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW1wdHlGaWxlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIkVtcHR5RmlsZS5odG1sIjsKLQkJLy8gSFRNTCBoYXMgbm8gc3BlYyBkZWZhdWx0IGVuY29kaW5nLiBXaWxsIHVzZSBwbGF0Zm9ybSBkZWZhdWx0IGVuY29kaW5nLgotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCBTeXN0ZW0uZ2V0UHJvcGVydHkoImZpbGUuZW5jb2RpbmciKSwgbmV3IEhUTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdElsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5odG1sIjsKLQkJU3RyaW5nIGlhbmFJbkZpbGUgPSAiVVRGLTgiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCBpYW5hSW5GaWxlLCBuZXcgSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TXVsdGlOb25EZWZhdWx0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk11bHRpTm9uRGVmYXVsdC5odG1sIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIklTTy04ODU5LTYiLCBuZXcgSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9FbmNvZGluZygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb0VuY29kaW5nLmh0bWwiOwotCQkvLyBIVE1MIGhhcyBubyBzcGVjIGRlZmF1bHQgZW5jb2RpbmcuIFdpbGwgdXNlIHBsYXRmb3JtIGRlZmF1bHQgZW5jb2RpbmcuCi0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsIFN5c3RlbS5nZXRQcm9wZXJ0eSgiZmlsZS5lbmNvZGluZyIpLCBuZXcgSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0bm9xdW90ZXMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibm9xdW90ZXMuaHRtbCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtOCIsIG5ldyBIVE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vcm1hbE5vbkRlZmF1bHQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTm9ybWFsTm9uRGVmYXVsdC5odG1sIjsKLQkJU3RyaW5nIGlhbmFJbkZpbGUgPSAiVVRGLTgiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCBpYW5hSW5GaWxlLCBuZXcgSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvaHRtbC9IVE1MSGVhZFRva2VuaXplclRlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL2h0bWwvSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc2MGI0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvaHRtbC9IVE1MSGVhZFRva2VuaXplclRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuaHRtbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkhUTUxIZWFkVG9rZW5pemVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuSFRNTEhlYWRUb2tlbml6ZXJDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5IZWFkUGFyc2VyVG9rZW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuSFRNTEVuY29kaW5nVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkVuY29kaW5nUGFyc2VyQ29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0JcHJpdmF0ZSBTdHJpbmcgZkNoYXJzZXQ7Ci0KLQlwcml2YXRlIFN0cmluZyBmQ29udGVudFR5cGVWYWx1ZTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlRGlyID0gImh0bWwvIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlSG9tZSA9ICJ0ZXN0ZmlsZXMvIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlTG9jYXRpb24gPSBmaWxlSG9tZSArIGZpbGVEaXI7Ci0JcHJpdmF0ZSBTdHJpbmcgZlBhZ2VFbmNvZGluZ1ZhbHVlID0gbnVsbDsKLQlwcml2YXRlIFN0cmluZyBmWE1MRGVjRW5jb2RpbmdOYW1lOwotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdEZpbGUoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZXhwZWN0ZWROYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBleHBlY3RlZE5hbWUsIG51bGwpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RGaWxlKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGV4cGVjdGVkTmFtZSwgU3RyaW5nIGZpbmFsVG9rZW5UeXBlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlIVE1MSGVhZFRva2VuaXplciB0b2tlbml6ZXIgPSBudWxsOwotCQlSZWFkZXIgZmlsZVJlYWRlciA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlpZiAoREVCVUcpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgICAiICsgZmlsZW5hbWUpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJfQotCQkJZmlsZVJlYWRlciA9IEhUTUxFbmNvZGluZ1Rlc3RzUGx1Z2luLmdldFRlc3RSZWFkZXIoZmlsZW5hbWUpOwotCQkJdG9rZW5pemVyID0gbmV3IEhUTUxIZWFkVG9rZW5pemVyKGZpbGVSZWFkZXIpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIG9wZW5pbmcgZmlsZSBcIiIgKyBmaWxlbmFtZSArICJcIiIpOwotCQl9Ci0KLQkJSGVhZFBhcnNlclRva2VuIHJlc3VsdFRva2VuID0gbnVsbDsKLQkJSGVhZFBhcnNlclRva2VuIHRva2VuID0gcGFyc2VIZWFkZXIodG9rZW5pemVyKTsKLQkJU3RyaW5nIHJlc3VsdFZhbHVlID0gZ2V0QXBwcm9wcmlhdGVFbmNvZGluZygpOwotCQlmaWxlUmVhZGVyLmNsb3NlKCk7Ci0JCWlmIChmaW5hbFRva2VuVHlwZSAhPSBudWxsKSB7Ci0JCQlhc3NlcnRUcnVlKCJkaWQgbm90IGVuZCBhcyBleHBlY3RlZC4gZm91bmQ6ICAiICsgdG9rZW4uZ2V0VHlwZSgpLCBmaW5hbFRva2VuVHlwZS5lcXVhbHModG9rZW4uZ2V0VHlwZSgpKSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlpZiAoZXhwZWN0ZWROYW1lID09IG51bGwpIHsKLQkJCQlhc3NlcnRUcnVlKCJleHBlY3RlZCBubyBlbmNvZGluZywgYnV0IGZvdW5kOiAiICsgcmVzdWx0VmFsdWUsIHJlc3VsdFRva2VuID09IG51bGwpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLy8gVE9ETzogbmVlZCB0byB3b3JrIG9uIGNhc2UgaXNzdWVzCi0JCQkJYXNzZXJ0VHJ1ZSgiZXhwZWN0ZWQgIiArIGV4cGVjdGVkTmFtZSArICIgYnV0IGZvdW5kICIgKyByZXN1bHRWYWx1ZSwgZXhwZWN0ZWROYW1lLmVxdWFscyhyZXN1bHRWYWx1ZS50b1VwcGVyQ2FzZSgpKSk7Ci0JCQl9Ci0JCX0KLQotCX0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RNYWxmb3JtZWROb0VuY29kaW5nKCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJNYWxmb3JtZWROb0VuY29kaW5nLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3RNYWxmb3JtZWROb0VuY29kaW5nWFNMKCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJNYWxmb3JtZWROb0VuY29kaW5nWFNMLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3ROb0VuY29kaW5nKCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb0VuY29kaW5nLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxOb25EZWZhdWx0KCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb3JtYWxOb25EZWZhdWx0LmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQoKSB7Ci0JLy8gU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk5vcm1hbFBhZ2VDYXNlTm9uRGVmYXVsdC5qc3AiOwotCS8vIGRvVGVzdEZpbGUoZmlsZW5hbWUpOwotCS8vIH0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0ZGVmZWN0MjIzMzY1KCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJTZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiOwotCS8vIGRvVGVzdEZpbGUoZmlsZW5hbWUpOwotCS8vIH0KLQkvKioKLQkgKiByZXR1cm5zIGVuY29kaW5nIGFjY29yZGluZyB0byBwcmlvcml0eTogMS4gWE1MIERlY2xhcmF0aW9uIDIuIHBhZ2UKLQkgKiBkaXJlY3RpdmUgcGFnZUVuY29kaW5nIG5hbWUgMy4gcGFnZSBkaXJlY3RpdmUgY29udGVudFR5cGUgY2hhcnNldCBuYW1lCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0QXBwcm9wcmlhdGVFbmNvZGluZygpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0JCWlmIChmWE1MRGVjRW5jb2RpbmdOYW1lICE9IG51bGwpCi0JCQlyZXN1bHQgPSBmWE1MRGVjRW5jb2RpbmdOYW1lOwotCQllbHNlIGlmIChmUGFnZUVuY29kaW5nVmFsdWUgIT0gbnVsbCkKLQkJCXJlc3VsdCA9IGZQYWdlRW5jb2RpbmdWYWx1ZTsKLQkJZWxzZSBpZiAoZkNoYXJzZXQgIT0gbnVsbCkKLQkJCXJlc3VsdCA9IGZDaGFyc2V0OwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0xlZ2FsU3RyaW5nKFN0cmluZyB0b2tlblR5cGUpIHsKLQkJaWYgKHRva2VuVHlwZSA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCQllbHNlCi0JCQlyZXR1cm4gdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5TdHJpbmdWYWx1ZSkgfHwgdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5VbkRlbGltaXRlZFN0cmluZ1ZhbHVlKSB8fCB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLkludmFsaWRUZXJtaW5hdGVkU3RyaW5nVmFsdWUpIHx8IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuSW52YWxpZFRlcm1pbnRhdGVkVW5EZWxpbWl0ZWRTdHJpbmdWYWx1ZSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBhcnNlQ29udGVudFR5cGVWYWx1ZShTdHJpbmcgY29udGVudFR5cGUpIHsKLQkJUGF0dGVybiBwYXR0ZXJuID0gUGF0dGVybi5jb21waWxlKCI7XFxzKmNoYXJzZXRcXHMqPVxccyoiKTsKLQkJU3RyaW5nW10gcGFydHMgPSBwYXR0ZXJuLnNwbGl0KGNvbnRlbnRUeXBlKTsKLQkJaWYgKHBhcnRzLmxlbmd0aCA+IDApIHsKLQkJCS8vIGlmIG9ubHkgb25lIGl0ZW0sIGl0IGNhbiBzdGlsbCBiZSBjaGFyc2V0IGluc3RlYWQgb2YKLQkJCS8vIGNvbnRlbnRUeXBlCi0JCQlpZiAocGFydHMubGVuZ3RoID09IDEpIHsKLQkJCQlpZiAocGFydHNbMF0ubGVuZ3RoKCkgPiA2KSB7Ci0JCQkJCVN0cmluZyBjaGVja0ZvckNoYXJzZXQgPSBwYXJ0c1swXS5zdWJzdHJpbmcoMCwgNyk7Ci0JCQkJCWlmIChjaGVja0ZvckNoYXJzZXQuZXF1YWxzSWdub3JlQ2FzZSgiY2hhcnNldCIpKSB7Ci0JCQkJCQlpbnQgZXFwb3MgPSBwYXJ0c1swXS5pbmRleE9mKCc9Jyk7Ci0JCQkJCQllcXBvcyA9IGVxcG9zICsgMTsKLQkJCQkJCWlmIChlcXBvcyA8IHBhcnRzWzBdLmxlbmd0aCgpKSB7Ci0JCQkJCQkJZkNoYXJzZXQgPSBwYXJ0c1swXS5zdWJzdHJpbmcoZXFwb3MpOwotCQkJCQkJCWZDaGFyc2V0ID0gZkNoYXJzZXQudHJpbSgpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLy8gZkNvbnRlbnRUeXBlID0gcGFydHNbMF07Ci0JCQl9Ci0KLQkJfQotCQlpZiAocGFydHMubGVuZ3RoID4gMSkgewotCQkJZkNoYXJzZXQgPSBwYXJ0c1sxXTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEdpdmUncyBwcmlvcml0eSB0byBlbmNvZGluZyB2YWx1ZSwgaWYgZm91bmQgZWxzZSwgbG9va3MgZm9yIGNvbnRlbnRUeXBlCi0JICogdmFsdWU7Ci0JICovCi0JcHJpdmF0ZSBIZWFkUGFyc2VyVG9rZW4gcGFyc2VIZWFkZXIoSFRNTEhlYWRUb2tlbml6ZXIgdG9rZW5pemVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlmUGFnZUVuY29kaW5nVmFsdWUgPSBudWxsOwotCQlmQ2hhcnNldCA9IG51bGw7Ci0JCS8qCi0JCSAqIGlmICh0b2tlblR5cGUgPT0gWE1MSGVhZFRva2VuaXplckNvbnN0YW50cy5YTUxEZWxFbmNvZGluZykgeyBpZgotCQkgKiAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgeyBJVGV4dEhlYWRSZWdpb24gdmFsdWVUb2tlbiA9Ci0JCSAqIHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsgU3RyaW5nIHZhbHVlVG9rZW5UeXBlID0KLQkJICogdmFsdWVUb2tlbi5nZXRUeXBlKCk7IGlmIChpc0xlZ2FsKHZhbHVlVG9rZW5UeXBlKSkgeyByZXN1bHRWYWx1ZSA9Ci0JCSAqIHZhbHVlVG9rZW4uZ2V0VGV4dCgpOyBpZiAoREVCVUcpIHsgU3lzdGVtLm91dC5wcmludGxuKCJYTUwgSGVhZAotCQkgKiBUb2tlbml6ZXIgRm91bmQgRW5jb2Rpbmc6ICIgKyByZXN1bHRWYWx1ZSk7IH0gfSB9IH0KLQkJICovCi0JCUhlYWRQYXJzZXJUb2tlbiB0b2tlbiA9IG51bGw7Ci0JCUhlYWRQYXJzZXJUb2tlbiBmaW5hbFRva2VuID0gbnVsbDsKLQkJZG8gewotCQkJdG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQlpZiAoREVCVUcpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4odG9rZW4pOwotCQkJfQotCQkJU3RyaW5nIHRva2VuVHlwZSA9IHRva2VuLmdldFR5cGUoKTsKLQkJCWlmICh0b2tlblR5cGUgPT0gSFRNTEhlYWRUb2tlbml6ZXJDb25zdGFudHMuTWV0YVRhZ0NvbnRlbnRUeXBlKSB7Ci0JCQkJaWYgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQkJSGVhZFBhcnNlclRva2VuIHZhbHVlVG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQkJCWlmIChERUJVRykgewotCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKHZhbHVlVG9rZW4pOwotCQkJCQl9Ci0JCQkJCVN0cmluZyB2YWx1ZVRva2VuVHlwZSA9IHZhbHVlVG9rZW4uZ2V0VHlwZSgpOwotCQkJCQlpZiAoaXNMZWdhbFN0cmluZyh2YWx1ZVRva2VuVHlwZSkpIHsKLQkJCQkJCWZDb250ZW50VHlwZVZhbHVlID0gdmFsdWVUb2tlbi5nZXRUZXh0KCk7Ci0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQotCQl9Ci0JCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKTsKLQkJaWYgKGZDb250ZW50VHlwZVZhbHVlICE9IG51bGwpIHsKLQkJCXBhcnNlQ29udGVudFR5cGVWYWx1ZShmQ29udGVudFR5cGVWYWx1ZSk7Ci0JCX0KLQkJZmluYWxUb2tlbiA9IHRva2VuOwotCQlyZXR1cm4gZmluYWxUb2tlbjsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCZXN0Q2FzZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb3JtYWxOb25EZWZhdWx0Lmh0bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTgiKTsKLQotCX0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RJbGxGb3JtZWQoKSB7Ci0JLy8gU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RJbGxGb3JtZWQuanNwIjsKLQkvLyBkb1Rlc3RGaWxlKGZpbGVuYW1lKTsKLQkvLyB9Ci0JLy8gcHVibGljIHZvaWQgdGVzdElsbEZvcm1lZDIoKSB7Ci0JLy8gU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RJbGxGb3JtZWQyLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3RJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0KCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCXB1YmxpYyB2b2lkIHRlc3RFbXB0eUZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiRW1wdHlGaWxlLmh0bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SWxsRm9ybWVkTm9ybWFsTm9uRGVmYXVsdCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0Lmh0bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTgiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TGFyZ2VDYXNlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIkxhcmdlTm9uRGVmYXVsdC5odG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTEiKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RMYXJnZU5vRW5jb2RpbmcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTGFyZ2VOb0VuY29kaW5nLmh0bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsLCBFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5NQVhfQ0hBUlNfUkVBQ0hFRCk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TXVsdGlOb25EZWZhdWx0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk11bHRpTm9uRGVmYXVsdC5odG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTYiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9FbmNvZGluZygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb0VuY29kaW5nLmh0bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0bm9xdW90ZXMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibm9xdW90ZXMuaHRtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtOCIpOwotCi0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL2h0bWwvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySFRNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL2h0bWwvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySFRNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWIzN2I5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC90ZXN0cy9lbmNvZGluZy9odG1sL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckhUTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy5odG1sOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucmVhZC5UZXN0Q29udGVudFR5cGVEZXRlY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JIVE1MIGV4dGVuZHMgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uIHsKLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2UiLCAidGVzdGZpbGVzL2h0bWwvRW1wdHlGaWxlLmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2UiLCAidGVzdGZpbGVzL2h0bWwvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5odG1sc291cmNlIiwgInRlc3RmaWxlcy9odG1sL0xhcmdlTm9FbmNvZGluZy5odG1sIiwgbnVsbCk7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2UiLCAidGVzdGZpbGVzL2h0bWwvTGFyZ2VOb25EZWZhdWx0Lmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2UiLCAidGVzdGZpbGVzL2h0bWwvTXVsdGlOb25EZWZhdWx0Lmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2UiLCAidGVzdGZpbGVzL2h0bWwvTm9FbmNvZGluZy5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5odG1sc291cmNlIiwgInRlc3RmaWxlcy9odG1sL25vcXVvdGVzLmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2UiLCAidGVzdGZpbGVzL2h0bWwvTm9ybWFsTm9uRGVmYXVsdC5odG1sIiwgbnVsbCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzJmYTk2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0Ci0JbmFtZT0idGVzdHN1aXRlIgotCWRlZmF1bHQ9InJ1biIKLQliYXNlZGlyPSIuIj4KLQotCTwhLS0gQ29uZmlndXJhYmxlIFByb3BlcnRpZXMgLS0+Ci0KLQk8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotCTwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0JPCEtLSA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfVwuLlwuLiIgLz4gLS0+Ci0KLQk8ZWNobyBtZXNzYWdlPSJiYXNlZGlyICR7YmFzZWRpcn0iIC8+Ci0JPGVjaG8gbWVzc2FnZT0iZWNsaXBzZSBwbGFjZSAke2VjbGlwc2UtaG9tZX0iIC8+Ci0KLQk8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgcGx1Z2luLW5hbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9InBsdWdpbi1uYW1lIgotCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmciIC8+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9ImxpYnJhcnktZmlsZSIKLQkJdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0JPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLQk8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLQk8dGFyZ2V0IG5hbWU9ImluaXQiPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQKLQkJCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLQkJCQlpbmNsdWRlcz0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuKnhtbCIgLz4KLQkJPC9kZWxldGU+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotCTx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCQk8cHJvcGVydHkKLQkJCW5hbWU9IndzdC1mb2xkZXIiCi0JCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3dzdF9mb2xkZXIiIC8+Ci0JCTxkZWxldGUKLQkJCWRpcj0iJHt3c3QtZm9sZGVyfSIKLQkJCXF1aWV0PSJ0cnVlIiAvPgotCQk8YW50Ci0JCQl0YXJnZXQ9ImNvcmUtdGVzdCIKLQkJCWFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLQkJCWRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9ImRhdGEtZGlyIgotCQkJCXZhbHVlPSIke3dzdC1mb2xkZXJ9IiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iY2xhc3NuYW1lIgotCQkJCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy5IVE1MRW5jb2RpbmdUZXN0U3VpdGUiIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJwbHVnaW4tcGF0aCIKLQkJCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0JCTwvYW50PgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0JPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotCTwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLQk8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotCQk8IS0tPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+LS0+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0JPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotCTx0YXJnZXQKLQkJbmFtZT0icnVuIgotCQlkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotCQk8YW50Ci0JCQl0YXJnZXQ9ImNvbGxlY3QiCi0JCQlhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0JCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJpbmNsdWRlcyIKLQkJCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuKnhtbCIgLz4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9Im91dHB1dC1maWxlIgotCQkJCXZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0JCTwvYW50PgotCQk8IS0tPGVtYWlsUmVzdWx0cyByZXN1bHRzRmlsZT0iJHtidWlsZC1yZXN1bHRzLWhvbWV9LyR7cGx1Z2luLW5hbWV9LnhtbCIgYWRkcmVzc2xpc3Q9ImRhdmlkX3dpbGxpYW1zQHVzLmlibS5jb20iIC8+IC0tPgotCTwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvRW1wdHlGaWxlLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9FbXB0eUZpbGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9FbXB0eUZpbGUuaHRtbAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmOGI1YzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPEhFQUQ+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04PgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktNiI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxUSVRMRT5JQk0gV2ViU3BoZXJlIFNhbXBsZXMgR2FsbGVyeTwvVElUTEU+Ci08L0hFQUQ+Ci08RlJBTUVTRVQgcm93cz0iNzUsKiI+Ci0JPEZSQU1FIG5hbWU9InRpdGxlIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1RpdGxlLmh0bWwiIHNjcm9sbGluZz0iTk8iIG5vcmVzaXplPgotCTxGUkFNRVNFVCBjb2xzPSIxNjAsKiI+Ci0JCTxGUkFNRSBuYW1lPSJtZW51IiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L01lbnUuaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQkJPEZSQU1FIG5hbWU9Im1haW4iIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvU2FtcGxlc0ludHJvLmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JPC9GUkFNRVNFVD4KLQk8Tk9GUkFNRVM+Ci0JPEJPRFk+Ci0JPFA+VG8gdmlldyB0aGlzIHBhZ2UsIHlvdSBuZWVkIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIGZyYW1lcy48L1A+Ci0JPC9CT0RZPgotCTwvTk9GUkFNRVM+Ci08L0ZSQU1FU0VUPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTGFyZ2VOb0VuY29kaW5nLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vRW5jb2RpbmcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRjYTYwZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vRW5jb2RpbmcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY2NCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy9EVEQvIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLQotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iTW96aWxsYS80LjcgW2VuXSAoV2luTlQ7IFUpIFtOZXRzY2FwZV0iPgotPE1FVEEgY29udGVudD0idGV4dC9jc3MiIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSI+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+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vbkRlZmF1bHQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0xhcmdlTm9uRGVmYXVsdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmNkZDE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0xhcmdlTm9uRGVmYXVsdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjY1ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDL0RURC8gSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotCi08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08bWV0YSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9Ik1vemlsbGEvNC43IFtlbl0gKFdpbk5UOyBVKSBbTmV0c2NhcGVdIj4KLTxNRVRBIGNvbnRlbnQ9InRleHQvY3NzIiBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiPgotPHRpdGxlPnNtb2tlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgyPiBTbW9rZSBUZXN0IC0gWE1MIEVkaXRvcjwvaDI+Ci1MYXN0IHVwZGF0ZWQ6IEp1bmUgMjUsIDIwMDEKLTxQPlRoaXMgU21va2UgVGVzdCBwcmltYXJpbHkgZm9jdXNlcyBvbiB0aGUgUlRQIHBvcnRpb24gb2YgdGhlIFhNTCAKLUVkaXRpb3IsIHdoaWNoIGlzIHRoZSBTb3VyY2UgcGFnZSBvZiB0aGUgWE1MIEVkaXRvci4gSXQgYWxzbyBwZXJmb3JtcyAKLXNvbWUgaW50ZWdyYXRpb24gdGVzdGluZy4gRm9yIGV4YW1wbGUsIGl0IHRlc3RzIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIAotdGhlIERlc2lnbiBhbmQgU291cmNlIHBhZ2VzIG9mIHRoZSBYTUwgRWRpdG9yLCBhcyB3ZWxsIGFzIHdpdGggdGhlIAotT3V0bGluZSBhbmQgUHJvcGVydGllcyB2aWV3cy4gSXQgYWxzbyB2ZXJpZmllcyB0aGF0IGZpbGVzIGNyZWF0ZWQgCi10aHJvdWdoIHRoZSBYTUwgRmlsZSB3aXphcmQgYW5kIHJlZmVyZW5jZXMgdG8gdGhlIFhNTCBDYXRhbG9nIGFyZSAKLXN1cHBvcnRlZCBhcyBleHBlY3RlZC48L1A+Ci08UD48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+PEI+Tk9URTwvQj46IFhNTCBmaWxlcyBhcmUgY2FzZS1zZW5zaXRpdmUgc28gYmUgc3VyZSB0aGF0IHRoaW5ncyBhcHBlYXIgCi1leGFjdGx5IGFzIG5vdGVkLjwvRk9OVD48L1A+Ci0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldHVwCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+U2V0dXA8L0ZPTlQ+PC9IMj4KLTxQPjxCPlN0YXJ0aW5nIENsZWFuPC9CPjwvUD4KLTx1bD4KLSAgICA8bGk+IERlbGV0ZSBhbnkgZXhpc3Rpbmcgd29ya2JlbmNoPC9saT4KLSAgICA8bGk+IFN0YXJ0IEVjbGlwc2U8L2xpPgotPC91bD4KLTxQPjxCPk9wZW4gYW4gWE1MIFBlcnNwZWN0aXZlPEJSPgotPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+U2VsZWN0IHRoZSA8Qj5PcGVuIFBlcnNwZWN0aXZlPC9CPiB0b29sYmFyIGJ1dHRvbiBpbiB0aGUgdXBwZXIgbGVmdDwvTEk+Ci0gICAgPExJPlNlbGVjdCA8Qj5PdGhlci4uLjwvQj48L0xJPgotICAgIDxMST5TZWxlY3QgPEI+WE1MPC9CPjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIHZpZXdzIGFwcGVhciBpbiB0aGUgWE1MIHBlcnNwZWN0aXZlOiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+VGhlIGxvY2F0aW9uIG9mIHRoZSBPdXRsaW5lIGFuZCBOYXZpZ2F0b3Igdmlld3MgYXJlIHJldmVyc2VkIGZyb20gdGhlIFJlc291cmNlIGFuZCBXZWIgcGVyc3BlY3RpdmVzLiBEbyB3ZSB3YW50IHRvIHRyeSB0byBiZSBjb25zaXN0ZW50IGFjcm9zcyB0aGUgcGVyc3BlY3RpdmVzPyBBbHNvLCBJIG9wZW5lZCA8Qj5kZWZlY3Q8L0I+IDE3NzY2NCB0byBlbmFibGUgZWFzeSBhY2Nlc3MgdG8gdGhlIFByb3BlcnRpZXMgdmlldyBmcm9tIHdpdGhpbiB0aGUgWE1MIHBlcnNwZWN0aXZlLiBJZiB0aGlzIHZpZXcgaXNuJ3QgaW5jbHVkZWQgaW4gdGhlIFBlcnNwZWN0aXZlIGJlY2F1c2UgaXRzIHVzZSBpcyBsaW1pdGVkLCB0aGVuIHJlY29tbWVuZCB3ZSBhdCBsZWFzdCBwcm92aWRlIGEgU2hvdyBvciBIaWRlIFByb3BlcnRpZXMgVmlldyB0b29sYmFyIGJ1dHRvbiAoc2ltaWxhciB0byB0aGUgYnV0dG9ucyB0aGF0IFBhZ2UgRGVzaWduZXIgcHJvdmlkZXMpLjwvRk9OVD48L0xJPgotPC9VTD4KLTxQPjxCPlByb2plY3QgQ3JlYXRpb24gYW5kIEZpbGUgSW1wb3J0czxCUj4KLTwvQj48L1A+Ci08VUw+Ci0gICAgPExJPkNyZWF0ZSBhIFByb2plY3QsIDxCPlhNTFRlc3QyPC9CPiA8L0xJPgotICAgIDxMST5JbXBvcnQgdGhlIGZvbGxvd2luZyBmaWxlcyBpbnRvIHRoaXMgcHJvamVjdDoKLSAgICA8VUw+Ci0gICAgICAgIDxMST48Qj5QdXJjaGFzZU9yZGVyLnhzZDwvQj48L0xJPgotICAgICAgICA8TEk+PEI+SW52b2ljZS5kdGQ8L0I+PC9MST4KLSAgICA8TEk+PEI+Sm9iRGVzYy54bWw8L0I+PC9MST4KLSAgICA8TEk+PEI+V2lyZWxlc3MueG1sPC9CPjwvTEk+Ci0gICAgPExJPjxCPmdvdGNoYVRDQmVhbnMuc2V0PC9CPjwvTEk+Ci0gICAgPExJPjxCPkFUUy5kdGQ8L0I+PC9MST4KLSAgICA8TEk+PEZPTlQgY29sb3I9IiNmZjAwMDAiPmFueSBvdGhlcnM/PC9GT05UPjwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotPC9VTD4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICBDcmVhdGUvT3Blbi9FZGl0IHRlc3QgY2FzZXMKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5DcmVhdGUvT3Blbi9FZGl0IHRlc3QgY2FzZXM8L0ZPTlQ+PC9IMj4KLTxQPjxCPkNyZWF0ZSBhbiBYTUwgRmlsZSBmcm9tIHNjcmF0Y2g8L0I+PC9QPgotPFVMPgotICAgIDxMST5TZWxlY3QgdGhlIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZTwvQj4gdG9vbGJhciBidXR0b24uPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBDcmVhdGUgYSBYTUwgRmlsZSB3aXphcmQgYXBwZWFycyBhbmQgdGhlIEZpbmlzaCBidXR0b24gaXMgZGlzYWJsZWQuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj48Qj5ERUZFQ1Q6PC9CPiAxNzc2NjAgLSBYTUwgRmlsZSB3aXphcmQ6IGRpc2FibGUgRmluaXNoIGJ1dHRvbiBvbiB0aGUgZmlyc3QgcGFnZTwvRk9OVD4uPC9MST4KLSAgICA8TEk+QWNjZXB0IHRoZSBkZWZhdWx0IHRvIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZTwvQj48L0xJPgotICAgIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlCi0gICAgPFVMPgotICAgICAgICA8TEk+U2VsZWN0IDxCPlhNTFRlc3QyPC9CPiBhcyB0aGUgZm9sZGVyPC9MST4KLSAgICAgICAgPExJPlNwZWNpZnkgYSBGaWxlIG5hbWUgb2YgPEI+ZnJvbVNjcmF0Y2g8L0I+PC9MST4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5GaW5pc2g8L0I+PC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nOgotICAgIDxVTD4KLSAgICAgICAgPExJPmZyb21TY3JhdGNoLnhtbCBhcHBlYXJzIGluIHRoZSBOYXZpZ2F0b3Igdmlldy48L0xJPgotICAgICAgICA8TEk+ZnJvbVNjcmF0Y2gueG1sIGlzIG9wZW4gdG8gdGhlIERlc2lnbiBwYWdlIG9mIHRoZSBYTUwgRWRpdG9yIGFuZCBoYXMgZm9jdXMuPC9MST4KLSAgICAgICAgPExJPnRoZSBEZXNpZ24gdGFiIGFwcGVhcnMgYmVmb3JlIHRoZSBTb3VyY2UgdGFiIGluIHRoZSBYTUwgRWRpdG9yLjwvTEk+Ci0gICAgICAgIDxMST50aGUgRGVzaWduIGFuZCBTb3VyY2UgcGFnZSBzaG93IG5vIGNvbnRlbnQuPC9MST4KLSAgICAgICAgPExJPnRoZSBPdXRsaW5lIGFuZCBQcm9wZXJ0aWVzIHZpZXdzIHNob3cgbm90aGluZy48L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+U3dpdGNoIHRvIHRoZSBTb3VyY2UgcGFnZS4gVmVyaWZ5IHRoZSBjdXJzb3IgYXBwZWFycyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLjwvTEk+Ci0gICAgPExJPlJpZ2h0IG1vdXNlIGJ1dHRvbiAyIGFuZCB2ZXJpZnkgYSBwb3B1cCBtZW51IGFwcGVhcnMuPC9MST4KLSAgICA8TEk+SGl0IDxCPkN0cmwrU3BhY2U8L0I+LiBWZXJpZnkgdGhlIGNvbnRlbnQgYXNzaXN0IHByb3Bvc2FsIGxpc3QgYXBwZWFycy48L0xJPgotICAgIDxMST5TZWxlY3QgPEI+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0OzwvQj48L0xJPgotICAgIDxMST5WZXJpZnkgJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0OyBpcyBpbnNlcnRlZCBhbmQgYXBwZWFycyBzeW50YXggaGlnaGxpZ2h0ZWQgYW5kIGFuIGVudHJ5IGFwcGVhcnMgZm9yIGl0IGluIHRoZSBPdXRsaW5lIHZpZXcuPC9MST4KLSAgICA8TEk+UG9zaXRpb24gdGhlIGN1cnNvciB3aXRoaW4gdGhlIFhNTCBkZWNsYXJhdGlvbiBhbmQgdmVyaWZ5IDxCPnZlcnNpb248L0I+IGFuZCA8Qj5lbmNvZGluZzwvQj4gYXBwZWFyIGluIHRoZSBQcm9wZXJ0aWVzIHZpZXcuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5UaGlzIHVzZWQgdG8gd29yaywgYnV0IG5vdyBpdCdzIG5vdCB3b3JraW5nLiBPcGVuZWQgPEI+ZGVmZWN0PC9CPiAxNzc2NjIgLSBYTUwgZGVjbGFyYXRpb24gYXR0cmlidXRlcyBub3QgYXBwZWFyaW5nIGluIFByb3BlcnRpZXMgdmlldy4gSWYgd2UgZGVjaWRlIHRvIG5vdCB0cmVhdCB2ZXJzaW9uIGFuZCBlbmNvZGluZyBhcyBhdHRyaWJ1dGVzLCB0aGVuIHRoaXMgc3RlcCBzaG91bGQgYmUgcmVtb3ZlZC48L0ZPTlQ+PC9MST4KLSAgICA8TEk+Q29udGludWUgdG8gdGhlIG5leHQgc2VjdGlvbi48L0xJPgotPC9VTD4KLTxQPjxCPklkZW50aWZ5IGEgbG9jYWwgRFREICg8L0I+dmVyaWZpZXMgYSBEVEQgaXMgaW1tZWRpYXRlbHkgcmVjb2duaXplZDsgaW4gdGhlIHBhc3QsIHlvdSBoYWQgdG8gY2xvc2UgYW5kIHJlb3BlbiB0aGUgV29ya2JlbmNoPEI+KTwvQj48L1A+Ci08VUw+Ci0gICAgPExJPlR5cGUgdGhlIGZvbGxvd2luZyBhZnRlciB0aGUgWE1MIGRlY2xhcmF0aW9uIGluIDxCPmZyb21TY3JhdGNoLnhtbDwvQj46IDxCPiZsdDshRE9DVFlQRSBJbnZvaWNlIFNZU1RFTSAmcXVvdDtJbnZvaWNlLmR0ZCZxdW90OyZndDs8L0I+LiBUaGUgdGV4dCBzaG91bGQgYmUgc3ludGF4IGhpZ2hsaWdodGVkIGFzIHlvdSB0eXBlIGFuZCB5b3Ugc2hvdWxkIHNlZSBhbiBlbnRyeSBnZXQgYWRkZWQgdG8gdGhlIE91dGxpbmUgdmlldy48L0xJPgotICAgIDxMST5IaXQgPEI+RW50ZXI8L0I+IHRvIGNyZWF0ZSBhIG5ldyBsaW5lIGFmdGVyIHRoZSBET0NUWVBFIGRlY2xhcmF0aW9uLjwvTEk+Ci0gICAgPExJPkhpdCA8Qj5DdHJsK1NwYWNlPC9CPi5WZXJpZnkgb25seSA8Qj5JbnZvaWNlPC9CPiBhbmQgPEI+Y29tbWVudDwvQj4gYXBwZWFyIGluIHRoZSBwcm9wb3NhbCBsaXN0LiAoPEI+Tk9URTwvQj46IDxCPkludm9pY2U8L0I+IGlzIHRoZSByb290IGVsZW1lbnQpPC9MST4KLSAgICA8TEk+SGl0IDxCPkVudGVyPC9CPiB0byBhY2NlcHQgPEI+SW52b2ljZTwvQj4gYXMgYSBzZWxlY3Rpb24uIFZlcmlmeSB0aGUgSW52b2ljZSBzdGFydCBhbmQgZW5kIHRhZ3MgYXJlIGluc2VydGVkIGludG8gdGhlIFNvdXJjZSBhbmQgdGhlIGN1cnNvciBhcHBlYXJzIGJldHdlZW4gdGhlbS4gQW4gZWxlbWVudCBlbnRyeSBzaG91bGQgYXBwZWFyIGZvciBJbnZvaWNlIGluIHRoZSBPdXRsaW5lIHZpZXcuICg8Qj5OT1RFPC9CPjogWE1MIGlzIGNhc2Utc2Vuc2l0aXZlIHNvIGJlIHN1cmUgeW91IHNlZSBJbnZvaWNlIGFuZCBub3QgaW52b2ljZSBldmVyeXdoZXJlKS48L0xJPgotICAgIDxMST5IaXQgPEI+Q3RybCtTcGFjZTwvQj4uIFZlcmlmeSB0aGUgZm9sbG93aW5nIGFwcGVhcnMgaW4gdGhlIHByb3Bvc2FsIGxpc3QgKGluIHRoZSBvcmRlciBzaG93bik6IDxGT05UIGNvbG9yPSIjZmYwMDAwIj5JdGVtIGlzIGFwcGVhcmluZyBiZWZvcmUgSGVhZGVyLiBUaGUgZGVmYXVsdCBpcyBub3QgdG8gc29ydCB0aGUgbGlzdCBhbHBoYWJldGljYWxseS4gVGhhdCBtZWFucyB0aGUgbGlzdCBzaG91bGQgYmUgc29ydGVkIGJhc2VkIG9uIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgY2hpbGQgdGFncyBhcmUgZGVmaW5lZCBpbiB0aGUgZWxlbWVudCBkZWZpbml0aW9uIGZvciBJbnZvaWNlIGluIHRoZSBEVEQuIEluIG90aGVyIHdvcmRzLCB1c2VycyBzaG91bGQgc2VlIGNoaWxkIHRhZ3MgbGlzdGVkIGFjY29yZGluZyB0byB0aGVpciBzZXF1ZW5jaW5nIG9yZGVyIGluIHRoZSBEVEQsIHdoaWNoIHRoZSBEVEQgRWRpdG9yIHNob3dzLiBWaW9sYXRpbmcgdGhlIHNlcXVlbmNpbmcgb3JkZXIgY2F1c2VzIGFuIFhNTCBmaWxlIHRvIGJlY29tZSBub3QgdmFsaWQuIDxCPkRFRkVDVDo8L0I+IDE3NzY2ODwvRk9OVD4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5IZWFkZXI8L0xJPgotICAgICAgICA8TEk+SXRlbTwvTEk+Ci0gICAgICAgIDxMST5jb21tZW50PC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPkhpdCA8Qj5FbnRlcjwvQj4gdG8gYWNjZXB0IDxCPkhlYWRlcjwvQj4gYXMgYSBzZWxlY3Rpb24uPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBTb3VyY2Ugbm93IGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZyBhbmQgdGhlIGN1cnNvciBhcHBlYXJzIGJlZm9yZSA8Qj5pbnZvaWNlTnVtYmVyPC9CPjo8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI4MyIgc3JjPSJpZGVudGlmeURURC5qcGciIHdpZHRoPSI0ODUiPjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj5IZWFkZXI8L0I+IGFwcGVhcnMgbmVzdGVkIHVuZGVyIDxCPkludm9pY2U8L0I+IGluIHRoZSBPdXRsaW5lIHZpZXcuPC9MST4KLSAgPExJPkNsb3NlIHRoaXMgZmlsZSwgYW5kIHJlc3BvbmQgPEI+WWVzPC9CPiB3aGVuIHByb21wdGVkIHRvIHNhdmUgdGhlIGNoYW5nZXMuPC9MST4KLSAgPExJPlJlb3BlbiB0aGUgZmlsZSBhbmQgdmVyaWZ5IHRoZSBjaGFuZ2VzIHdlcmUgc2F2ZWQuPC9MST4KLSAgPExJPkNsb3NlIHRoZSBmaWxlLiBWZXJpZnkgbm8gc2F2ZSBjaGFuZ2VzIHByb21wdCBhcHBlYXJzLjwvTEk+Ci08L1VMPgotPFA+PEI+Q3JlYXRlIGFuIFhNTCBGaWxlIGZyb20gYW4gaW1wb3J0ZWQgRFREPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+U2VsZWN0IHRoZSA8Qj5GaWxlLSZndDtOZXctJmd0O1hNTCBGaWxlPC9CPi48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIENyZWF0ZSBhIFhNTCBGaWxlIHdpemFyZCBhcHBlYXJzLjwvTEk+Ci0gICAgPExJPlNlbGVjdCB0byA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGUgZnJvbSBhIERURCBmaWxlPC9CPjwvTEk+Ci0gICAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2UKLSAgICA8VUw+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+WE1MVGVzdDI8L0I+IGFzIHRoZSBmb2xkZXI8L0xJPgotICAgICAgICA8TEk+U3BlY2lmeSBhIEZpbGUgbmFtZSBvZiA8Qj5mcm9tTG9jYWxEVEQ8L0I+PC9MST4KLSAgICAgICAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2U8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+U2VsZWN0IHRoZSA8Qj5JbXBvcnQgRmlsZTwvQj4gYnV0dG9uCi0gICAgPFVMPgotICAgICAgICA8TEk+VXNlIHRoZSBCcm93c2UgYnV0dG9uIHRvIGZpbmQgPEI+dGVzdGNhc2UuZHRkPC9CPjwvTEk+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+WE1MVGVzdDI8L0I+IGFzIHRoZSBmb2xkZXIuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5Xb3VsZCBiZSBuaWNlIGlmIHRoaXMgd2VyZSBhbHJlYWR5IGZpbGxlZCBpbi4gT3BlbiBhIGRlZmVjdC48L0ZPTlQ+PC9MST4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5GaW5pc2g8L0I+IHRvIGNsb3NlIHRoZSBJbXBvcnQgRmlsZSB3aXphcmQ8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+RXhwYW5kIDxCPlhNTHRlc3QyPC9CPiBhbmQgdGhlbiBzZWxlY3QgPEI+dGVzdGNhc2UuZHRkPC9CPi4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPldhcyBleHBlY3RpbmcgdG8gc2VlIHRoZSBpbXBvcnRlZCBmaWxlIHNlbGVjdGVkIGluIHRoZSBXb3JrYmVuY2ggZmlsZXMgbGlzdCwgYnV0IGl0IHdhc24ndC4gT3BlbiBhIGRlZmVjdC48L0ZPTlQ+PC9MST4KLSAgICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZS48L0xJPgotICAgIDxMST5TZWxlY3QgPEI+dGVzdGNhc2U8L0I+IGFzIHRoZSBSb290IEVsZW1lbnQuPC9MST4KLSAgICA8TEk+QWNjZXB0IHRoZSBkZWZhdWx0IHRvIDxCPkNyZWF0ZSByZXF1aXJlZCBjb250ZW50IG9ubHk8L0I+LjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj50ZXN0Y2FzZS5kdGQ8L0I+IGFwcGVhcnMgYXMgdGhlIFN5c3RlbSBJZC48L0xJPgotICAgIDxMST5TZWxlY3QgRmluaXNoLiBWZXJpZnkgPEI+ZnJvbUxvY2FsRFRELnhtbDwvQj4gYXBwZWFycyBpbiB0aGUgWE1MIEVkaXRvci4gVmVyaWZ5IHRoZSBTb3VyY2UgcGFnZSBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmc6IDxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjI5MCIgc3JjPSJpbXBvcnREVEQuanBnIiB3aWR0aD0iNjYwIj48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBPdXRsaW5lIHZpZXcgYW5kIHRoZSBmb3JtYXR0aW5nIGluZGVudGF0aW9uIHJlZmxlY3QgdGhlIHByb3BlciBlbGVtZW50L3RhZyBoaWVyYXJjaHkuIEhlcmUncyB3aGF0IHRoZSBPdXRsaW5lIHZpZXcgc2hvdWxkIGxvb2sgbGlrZTo8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSIyOTciIHNyYz0ib3V0bGluZTEuanBnIiB3aWR0aD0iNjU1Ij48L0xJPgotICA8TEk+VmVyaWZ5IHNlbGVjdGlvbiBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgRGVzaWduIHBhZ2UsIFNvdXJjZSBwYWdlLCBPdXRsaW5lIHZpZXcsIAotICAgICAgICBhbmQgUHJvcGVydGllcyB2aWV3LgotICAgIDxVTD4KLSAgICAgICAgPExJPkZyb20gdGhlIFNvdXJjZSBwYWdlLCBjbGljayB3aXRoaW4gdGhlIDxCPmhlYWRlcjwvQj4gc3RhcnQgdGFnLiAKLSAgICAgICAgICAgIFZlcmlmeSA8Qj5oZWFkZXI8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgYW5kIGluIHRoZSBEZXNpZ24gCi0gICAgICAgICAgICBwYWdlIGFuZCB0aGF0IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBhbmQgcHJvcGVydHkgdmFsdWVzIGFwcGVhciBpbiB0aGUgCi0gICAgICAgICAgICBQcm9wZXJ0aWVzIHZpZXc6Ci0gICAgICAgIDxUQUJMRSBib3JkZXI9IjEiPgotICAgICAgICAgICAgPFRCT0RZPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPjxCPlByb3BlcnR5PC9CPjwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPjxCPlZhbHVlPC9CPjwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5jYXRlZ29yeTwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPndlYnRvb2w8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+bnVtYmVyPC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+aWR2YWx1ZTA8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+c3RhdGU8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij4mbmJzcDs8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+c3ViQ2F0ZWdvcnk8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij5BY2Nlc3NhYmlsaXR5PC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPnN1YlN1YkNhdGVnb3J5PC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+Jm5ic3A7PC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgPC9UQk9EWT4KLSAgICAgICAgPC9UQUJMRT4KLSAgICAgICAgPC9MST4KLQk8TEk+RnJvbSB0aGUgT3V0bGluZSB2aWV3LCBzZWxlY3QgdGhlIDxCPnRlc3RCdWNrZXQ8L0I+IHRhZy4KLSAgICAgICAgICAgIFZlcmlmeSA8Qj50ZXN0QnVja2V0PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYW5kIHRoZSBjdXJyZW50IG1hcmtlcgotICAgICAgICAgICAgaW4gdGhlIGxlZnRoYW5kIG1hcmdpbiBvZiB0aGUgU291cmNlIHBhZ2UgaW5kaWNhdGVzIHRoZSByYW5nZSBvZiB0aGUgCi0gICAgICAgICAgICA8Qj50ZXN0QnVja2V0PC9CPiB0YWcuIFRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvdWxkIHNob3cgYSBwcm9wZXJ0eSBvZiA8Qj50eXBlPC9CPgotICAgICAgICAgICAgd2l0aCBhIHZhbHVlIG9mIDxCPkNvbXBvbmVudFRlc3Q8L0I+LgotICAgICAgICA8L0xJPgotICAgIDwvVUw+ICAgCi0gICAgPC9MST4gCi0gICAgPExJPlZlcmlmeSBlZGl0IHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBEZXNpZ24gcGFnZSwgU291cmNlIHBhZ2UsIGFuZCAKLSAgICAgICAgUHJvcGVydGllcyB2aWV3IChmb2N1cyBoZXJlIGlzIG9uIGFkZGluZyBhdHRyaWJ1dGVzIGFuZCBhdHRyaWJ1dGUgdmFsdWVzKS4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBTb3VyY2UgcGFnZSwgdXNlIGNvbnRlbnQgYXNzaXN0IHRvIGluc2VydCBhbiBhdHRyaWJ1dGUgYW5kIGF0dHJpYnV0ZSB2YWx1ZQotICAgICAgICAgICAgZm9yIHRoZSA8Qj5oZWFkZXI8L0I+IHN0YXJ0IHRhZy4KLSAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgIDxMST5Qb3NpdGlvbiB0aGUgY3Vyc29yIGFmdGVyIHRoZSA8Qj5jYXRlZ29yeTwvQj4gYXR0cmlidXRlIGluIHRoZSA8Qj5oZWFkZXI8L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICAgPExJPlR5cGUgPEI+c3BhY2U8L0I+IGFuZCB0aGVuIGhpdCBwcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0LjwvTEk+Ci0gICAgICAgICAgICA8TEk+VmVyaWZ5IG9ubHkgPEI+c3RhdGU8L0I+IGFuZCA8Qj5zdWJTdWJDYXRlZ29yeTwvQj4gYXBwZWFyIGluIHRoZSBwcm9wb3NhbCBsaXN0IChjb250ZW50IGFzc2lzdCBpcyBzbWFydCBlbm91Z2ggbm90IHRvIGxpc3QgYW55IGF0dHJpYnV0ZXMgdGhhdCBhbHJlYWR5IGV4aXN0IGluIHRoZSBzdGFydCB0YWcgc2luY2UgYXR0cmlidXRlcyBjYW4gb25seSBhcHBlYXIgb25jZS4gPEZPTlQgY29sb3I9IiMwMDAwZmYiPkNvb2whPC9GT05UPikuPC9MST4KLSAgICAgICAgICAgIDxMST5TZWxlY3QgPEI+c3RhdGU8L0I+LjwvTEk+ICAgCi0gICAgICAgICAgICA8TEk+VmVyaWZ5IDxCPnN0YXRlPSJVbmRlckNvbnN0cnVjdGlvbiI8L0I+IGlzIGluc2VydGVkIGluIHRoZSBTb3VyY2UgcGFnZSAoY29udGVudCBhc3Npc3QgYXV0b21hdGljYWxseSBpbnNlcnRzIGFueSBkZWZhdWx0IHZhbHVlcy4gPEZPTlQgY29sb3I9IiMwMDAwZmYiPkNvb2whPC9GT05UPikuIFZlcmlmeSB0aGUgRGVzaWduIHBhZ2UgYW5kIFByb3BlcnRpZXMgdmlldyByZWZsZWN0IHRoaXMgY2hhbmdlLjwvTEk+ICAgICAgICAgCi0gICAgICAgICAgICA8L1VMPgotICAgICAgICA8L0xJPgotICAgICAgICA8TEk+RnJvbSB0aGUgUHJvcGVydGllcyB2aWV3LCB1cGRhdGUgdGhlIDxCPnN0YXRlPC9CPiBhdHRyaWJ1dGUgdmFsdWUgdG8gIlVuZGVyUmV2aWV3IiAKLSAgICAgICAgICAgIChhIHB1bGxkb3duIGxpc3Qgb2YgdmFsdWVzIHNob3VsZCBiZSBhdmFpbGFibGUpLiBWZXJpZnkgdGhlIGNoYW5nZSBpcyByZWZsZWN0ZWQKLSAgICAgICAgICAgIGluIHRoZSBTb3VyY2UgYW5kIERlc2lnbiBwYWdlcy4KLSAgICAgICAgPC9MST4KLSAgICAgICAgPExJPkZyb20gdGhlIERlc2lnbiBwYWdlLCBhZGQgYW4gYXR0cmlidXRlIGFuZCBhdHRyaWJ1dGUgdmFsdWUgdG8gdGhlIDxCPmhlYWRlcjwvQj4gdGFnLgotICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgPExJPkJyaW5nIHVwIHRoZSBwb3B1cCBtZW51IGZvciB0aGUgPEI+aGVhZGVyPC9CPiB0YWcuPC9MST4KLSAgICAgICAgICAgIDxMST5TZWxlY3QgPEI+QWRkIEF0dHJpYnV0ZS0+c3ViU3ViQ2F0ZWdvcnk8L0I+IGZyb20gdGhlIHBvcHVwIG1lbnUgKGl0J3Mgc21hcnQKLSAgICAgICAgICAgICAgICBlbm91Z2ggdG8ga25vdyB3aGljaCBhdHRyaWJ1dGVzIGhhdmVuJ3QgYmVlbiBzcGVjaWZpZWQgeWV0IC4uLiBsaWtlIGNvbnRlbnQgCi0gICAgICAgICAgICAgICAgYXNzaXN0LiBDb29sISkuPC9MST4KLSAgICAgICAgICAgIDxMST5UeXBlIGluIGEgdmFsdWUgb2YgPEI+S2V5Ym9hcmQgc3VwcG9ydDwvQj4uPC9MST4KLSAgICAgICAgICAgIDxMST5WZXJpZnkgdGhlIGNoYW5nZSBpcyByZWZsZWN0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlIGFuZCBQcm9wZXJ0aWVzIHZpZXc8L0xJPgotICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci08L1VMPgotPFA+PEI+T3BlbiBhbiBYTUwgRmlsZSB0aGF0IHJlZmVyZW5jZXMgYSByZW1vdGUgRFREPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+T3BlbiB0aGUgPEI+V2lyZWxlc3MueG1sPC9CPiBmaWxlLjwvTEk+Ci0gICAgPExJPlZlcmlmeSBpdCBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmcgaW4gdGhlIFNvdXJjZSBwYWdlOjxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjIzOSIgc3JjPSJ3aXJlbGVzcy5qcGciIHdpZHRoPSI2NTYiPjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgT3V0bGluZSB2aWV3IGFuZCB0aGUgZm9ybWF0dGluZyBpbmRlbnRhdGlvbiByZWZsZWN0IHRoZSBwcm9wZXIgCi0gICAgICAgIGVsZW1lbnQvdGFnIGhpZXJhcmNoeS4gSGVyZSdzIHdoYXQgdGhlIE91dGxpbmUgdmlldyBzaG91bGQgbG9vayBsaWtlOiA8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSIxODkiIHNyYz0ib3V0bGluZTIuanBnIiB3aWR0aD0iNjU2Ij48L0xJPiAKLSAgICA8TEk+VmVyaWZ5IGNvbnRlbnQgYXNzaXN0IDxGT05UIGNvbG9yPSIjZmYwMDAwIj5EZWZlY3QgMTc2Mzc5IChpbiB2ZXJpZnkgc3RhdGUsIGJ1dCBzdGlsbCBub3Qgd29ya2luZyk8L0ZPTlQ+LjwvTEk+Ci0gICAgICAgIDxVTD4KLSAgICAgICAgICAgPExJPkNyZWF0ZSBhIG5ldyBsaW5lIGFmdGVyIHRoZSA8Qj53bWw8L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdCBvbiB0aGUgbmV3IGxpbmUuPC9MST4KLSAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIGFwcGVhciBhcyBwcm9wb3NhbHMgKGluIHRoZSBvcmRlciBzaG93bik6IAotICAgICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgICAgICAgIDxMST5oZWFkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+dGVtcGxhdGU8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5jYXJkPC9MST4KLSAgICAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgICAgIDwvTEk+Ci0gICAgICAgICAgIDxMST5DcmVhdGUgYSBuZXcgbGluZSBhZnRlciB0aGUgPEI+d21sPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgPExJPlR5cGUgYSBzcGFjZSBiZWZvcmUgdGhlIGVuZGluZyBkZWxpbWl0ZXIgb24gdGhlIGNhcmQgc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0PC9MST4KLSAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIGFwcGVhciBhcyBwcm9wb3NhbHMgKG5vdCBuZWNlc3NhcmlseSBpbiB0aGUKLSAgICAgICAgICAgICAgIG9yZGVyIHNob3duKS4gCi0gICAgICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICAgICAgICAgPExJPnRpdGxlPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+bmV3Y29udGV4dDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPm9yZGVyZWQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST54bWw6bGFuZzwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPm9uZW50ZXJiYWNrd2FyZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPm9udGltZXI8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5pZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmNsYXNzPC9MST4KLSAgICAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgICAgIDwvTEk+Ci0gICAgICAgICAgIDxMST5Qb3NpdGlvbiB0aGUgY3Vyc29yIHdpdGhpbiB0aGUgPEI+bWV0aG9kPC9CPiBhdHRyaWJ1dGUgdmFsdWUgaW4gdGhlIDxCPmdvPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3Q8L0xJPgotICAgICAgICAgICA8TEk+VmVyaWZ5IDxCPnBvc3Q8L0I+IGFuZCA8Qj5nZXQ8L0I+IGFwcGVhciBhcyBwcm9wb3NhbHMuPC9MST4KLSAgICAgICAgPC9VTD4KLSAgICA8TEk+VmVyaWZ5IHNlbGVjdGlvbiBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgRGVzaWduIHBhZ2UsIFNvdXJjZSBwYWdlLCBPdXRsaW5lIHZpZXcsIAotICAgICAgICBhbmQgUHJvcGVydGllcyB2aWV3LgotICAgIDxVTD4KLSAgICAgICAgPExJPkZyb20gdGhlIFNvdXJjZSBwYWdlLCBjbGljayB3aXRoaW4gdGhlIDxCPmNhcmQ8L0I+IHN0YXJ0IHRhZy4gCi0gICAgICAgICAgICBWZXJpZnkgPEI+Y2FyZDwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyBhbmQgaW4gdGhlIERlc2lnbiAKLSAgICAgICAgICAgIHBhZ2UgYW5kIHRoYXQgdGhlIGNvbnRlbnQgYXNzaXN0IHByb3Bvc2FscyBsaXN0ZWQgYWJvdmUgZm9yIHRoZQotICAgICAgICAgICAgPEI+Y2FyZDwvQj4gdGFnIGFwcGVhciBhcyBwcm9wZXJ0aWVzIGluIHRoZSBQcm9wZXJ0aWVzIHZpZXcuIE5vIHZhbHVlcyBzaG91bGQgYXBwZWFyIGZvciB0aGVzZSBwcm9wZXJ0aWVzLjwvTEk+Ci0JPExJPkZyb20gdGhlIE91dGxpbmUgdmlldywgc2VsZWN0IHRoZSA8Qj5wb3N0ZmllbGQ8L0I+IHRhZy4KLSAgICAgICAgICAgIFZlcmlmeSA8Qj5wb3N0ZmllbGQ8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhbmQgdGhlIGN1cnJlbnQgbWFya2VyCi0gICAgICAgICAgICBpbiB0aGUgbGVmdGhhbmQgbWFyZ2luIG9mIHRoZSBTb3VyY2UgcGFnZSBpbmRpY2F0ZXMgdGhlIHJhbmdlIG9mIHRoZSAKLSAgICAgICAgICAgIDxCPnBvc3RmaWVsZDwvQj4gdGFnLiBUaGUgUHJvcGVydGllcyB2aWV3IHNob3VsZCBzaG93IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcywKLSAgICAgICAgICAgIG5vbmUgb2Ygd2hpY2ggc2hvdWxkIGhhdmUgYSB2YWx1ZToKLSAgICAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgICAgICAgICA8TEk+bmFtZTwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPnZhbHVlPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+aWQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5jbGFzczwvTEk+Ci0gICAgICAgICAgICAgICA8L1VMPgotICAgICAgICAgICA8L0xJPgotICAgIDwvVUw+ICAgCi0gICAgPC9MST4KLSAgICA8TEk+VmVyaWZ5IGVkaXQgc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIERlc2lnbiBwYWdlLCBTb3VyY2UgcGFnZSwgT3V0bGluZSB2aWV3LCBhbmQgCi0gICAgICAgIFByb3BlcnRpZXMgdmlldyAoZm9jdXMgaGVyZSBpcyBvbiBhZGRpbmcgZWxlbWVudHMvdGFncykuCi0gICAgPFVMPgotICAgICAgICA8TEk+RnJvbSB0aGUgU291cmNlIHBhZ2UsIGNvcHkgYW5kIHBhc3RlIHRoZSA8Qj5jYXJkPC9CPiB0YWcuCi0gICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICA8TEk+UG9zaXRpb24gdGhlIGN1cnNvciBpbiB0aGUgPEI+Y2FyZDwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgICA8TEk+Tm90aWNlIHRoZSByYW5nZSBvZiB0aGUgPEI+Y2FyZDwvQj4gdGFnIGluIHRoZSBsZWZ0aGFuZCBtYXJnaW4gYXJlYS48L0xJPgotICAgICAgICAgICAgPExJPkNvcHkgdGhpcyByYW5nZSBvZiBsaW5lcyB1c2luZyB0aGUgPEI+RWRpdC0+Q29weTwvQj4gcHVsbGRvd24gbWVudSBzZWxlY3Rpb24uPC9MST4KLSAgICAgICAgICAgIDxMST5QYXN0ZSBhZnRlciB0aGUgPEI+Y2FyZDwvQj4gZW5kIHRhZyB1c2luZyBDdHJsK1YuPC9MST4KLSAgICAgICAgICAgIDxMST5WZXJpZnkgdGhlIGFwcHJvcHJpYXRlIGxpbmVzIHdlcmUgcGFzdGVkIG4gdGhlIFNvdXJjZSBwYWdlLgotICAgICAgICAgICAgICAgIFZlcmlmeSB0aGUgRGVzaWduIHBhZ2UsIE91dGxpbmUgdmlldywgYW5kIHRoZSBQcm9wZXJ0aWVzIAotICAgICAgICAgICAgICAgIHZpZXcgcmVmbGVjdCB0aGlzIGNoYW5nZS48L0xJPiAgICAgICAgIAotICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgPC9MST4KLSAgICAgICAgPExJPkZyb20gdGhlIERlc2lnbiBwYWdlLCBhZGQgYW5vdGhlciA8Qj5jYXJkPC9CPiB0YWcuCi0gICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICA8TEk+QnJpbmcgdXAgdGhlIHBvcHVwIG1lbnUgZm9yIHRoZSA8Qj53bWw8L0I+IHRhZy48L0xJPgotICAgICAgICAgICAgPExJPlNlbGVjdCA8Qj5BZGQgQ2hpbGQtPmNhcmQ8L0I+IGZyb20gdGhlIHBvcHVwIG1lbnUuPC9MST4KLSAgICAgICAgICAgIDxMST5WZXJpZnkgdGhlIFNvdXJjZSBwYWdlLCBPdXRsaW5lIHZpZXcsIGFuZCB0aGUgUHJvcGVydGllcwotICAgICAgICAgICAgICAgIHZpZXcgcmVmbGVjdCB0aGlzIGNoYW5nZS4gTk9URTogaXQgc2hvdWxkIGhhdmUgZ2VuZXJhdGVkIG91dAotICAgICAgICAgICAgICAgIHRoZSBzYW1lIHRoaW5nIGFzIHRoZSBvcmlnaW5hbCBjYXJkIHRhZywgd2l0aCB0aGUgZXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgdGhhdCBhIDxCPm1ldGhvZDwvQj4gYXR0cmlidXRlIHNob3VsZCBub3QgZXhpc3QgaW4gdGhlIDxCPmdvPC9CPiBzdGFydCB0YWcuIDwvTEk+Ci0gICAgICAgICAgICA8L1VMPgotICAgICAgICA8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4gCi08L1VMPgotPFA+PEI+Q3JlYXRlIGFuZCBWYWxpZGF0ZSBhbiBYTUwgRmlsZSBmcm9tIGEgc2NoZW1hPC9CPjxCUj4KLQotPFA+KHRoZXNlIHN0ZXBzIGFyZSB0YWtlbiBmcm9tIHRoZSAnRGVzaWduJyBzbW9rZSB0ZXN0LCBleGNlcHQgdGhlIFNvdXJjZSBQYWdlIGlzIHRoZSBmb2N1cyk8L1A+Ci08dWw+Ci08bGk+Ci1SaWdodCBtb3VzZSBidXR0b24gMiBvbiB0aGUgUHVyY2hhc2VPcmRlci54c2QgYW5kIHNlbGVjdCA8Yj5DcmVhdGUgWE1MCi1GaWxlPC9iPi48L2xpPgotCi08bGk+Ci1BY2NlcHQgdGhlIGRlZmF1bHQgZmlsZSBuYW1lcy48L2xpPgotCi08bGk+Ci1JbiB0aGUgU2VsZWN0IFJvb3QgRWxlbWVudCBwYWdlLCBjaG9vc2UgPGI+cHVyY2hhc2VPcmRlcjwvYj4gYXMgcm9vdCBlbGVtZW50LjwvbGk+Ci0KLTxsaT4KLUNob29zZSA8Yj5DcmVhdGUgcmVxdWlyZWQgYW5kIG9wdGlvbmFsIGNvbnRlbnQ8L2I+IHRvIGNyZWF0ZSBhIG1pbmltYWwKLWRvY3VtZW50LjwvbGk+Ci0KLTxsaT4KLUVudGVyIDxiPnBvPC9iPiBhcyB0aGUgbmFtZXNwYWNlIHByZWZpeC48L2xpPgotCi08bGk+T24gRmluaXNoLCBhIFB1cmNoYXNlT3JkZXIueG1sIGlzIGNyZWF0ZWQgYW5kIHRoZSBYTUwgRWRpdG9yIGlzIG9wZW5lZC4gKFNlbGVjdCBTb3VyY2UgUGFnZSBpZiBub3QgYWxyZWFkeSB0aGVyZS4pPC9saT4KLQotPGxpPgotUnVuIFZhbGlkYXRlLiBUaGUgUHVyY2hhc2VPcmRlci54bWwgc2hvdWxkIGJlIGludmFsaWQuPC9saT4KLQotPGxpPgotRG91YmxlIGNsaWNrIG9uIHRoZSBlcnJvciBtZXNzYWdlLiBJdCBzaG91bGQgYmUgcG9zaXRpb25lZCB0byB0aGUgbGluZQotaW4gZXJyb3IsIGkuZS4gdGhlIDxiPnBhcnROdW08L2I+IGF0dHJpYnV0ZS4gSXQgaXMgaW52YWxpZCBiZWNhdXNlIHRoZQotdmFsdWUgaXMgbm90IHNldCB0byBtYXRjaCB0aGUgWE1MIHNjaGVtYSBwYXR0ZXJuIGZhY2V0ICJkMy1bQS1aXXsyfSIgKDMKLWRpZ2l0cyBmb2xsb3dlZCBieSAyIGNoYXJhY3RlcnMpLjwvbGk+Ci0KLTxsaT5JbiB0aGUgU291cmNlIFZpZXcsIGxvY2F0ZSB0aGUgPGI+cGFydE51bTwvYj4gYXR0cmlidXRlIHVuZGVyIGVsZW1lbnQgaXRlbS4KLUVudGVyIHRoZSB2YWx1ZSAzMzMtQUIuPC9saT4KLQotPGxpPgotUnVuIFZhbGlkYXRlLiBUaGUgUHVyY2hhc2VPcmRlci54bWwgZG9jdW1lbnQgc2hvdWxkIG5vdyBiZSB2YWxpZC48L2xpPgotPC9VTD4KLTxVTD4KLSAgPExJPgotICA8SFI+PC9MST4KLSAgPGxpPlBsYWNlIHRoZSBjdXJzb3IgYWZ0ZXIgdGhlICZsdDtpdGVtcyZndDsgdGFnIGFuZCBiZXN1cmUgIml0ZW0iIGlzIAotICBsaXN0ZWQgaW4gdGhlIGNvbnRlbnQgYXNzaXN0IGxpc3QuIDwvbGk+Ci08bGk+UmVuYW1lIHRoZSBwdXJjaGFzZU9yZGVyLnhzZCB0bywgc2F5LCBwdXJjaGFzZU9yZGVySE9MRC54c2Q8L2xpPgotPGxpPlZlcmlmeSB0aGF0IGNvbnRlbnQgYXNzaXN0IHN0aWxsIGdpdmVzIHlvdSAiaXRlbSIgYXMgYWJvdmUuPC9saT4KLTxsaT5Ob3cgc2VsZWN0IHRoZSAiUmVsb2FkIERlcGVuZGFuY2llcyIgYnV0dG9uLjwvbGk+Ci08bGk+VmVyaWZ5IHRoYXQgbm93IGNvbnRlbnQgYXNzaXN0IG5vIGxvbmdlciBsaXN0cyBhbnkgaXRlbXMgb3RoZXIgCi10aGF0IHRoZSBtYWNybyAiY29tbWVudCIuPC9saT4KLTxsaT5SZXBlYXQgbWFraW5nIHB1cmNoYXNlT3JkZXIueHNkIHdvcmthYmxlIGFnYWluLjwvbGk+Ci08L3VsPgotPFA+PC9QPjxQPjwvUD48UD48L1A+PFA+PC9QPjxQPjwvUD48L1A+Ci08UD48Qj5PcGVuIGFuIFhNTCBGaWxlIGZvciBhIHNoaXBwZWQgRFREIGNhdGFsb2cgZW50cnk8L0I+PEJSPgotPEJSPgotW3B1dCBpbiBvcHRpb25hbCBzZWN0aW9uIC4uIHRoaXMgaXNuJ3QgYSBjdXN0b21lciBzY2VuZXJpb108QlI+Ci1UbyB2ZXJpZnkgdGhhdCBzaGlwcGVkIERURHMgYXJlIHdvcmtpbmc6PEJSPgotPFVMPgotPExJPgotVXNlIGEgd2ViIHByb2plY3Qgd2l0aCBhIHN0YW5kYXJkIHdlYi54bWwgZmlsZSBpbiBpdC4gQmUgc3VyZSAKLXRoZXJlIGlzIG5vIHdlYi1hcHBfMl8yLmR0ZCBmaWxlIGluIHRoZSBkaXJlY3RvcnkuIEluIHRoZSB3ZWIueG1sIGZpbGUgCi1pdHNlbGYsIG1hbmdsZSB0aGUgd2ViLWFwcF8yXzIuZHRkIGZpbGVuYW1lIGluIHRoZSBzeXN0ZW0gaWQgYSBsaXR0bGUsIHN1Y2ggYXMgCi1jaGFuZ2UgaXQgdG8geGViLWFwcF8yXzIuZHRkIHRvIGJlIHN1cmUgaXQgY2FuJ3QgYmUgZm91bmQgdmlhIHRoZQotbm9ybWFsIGh0dHAgbWV0aG9kIChUaGlzIGlzbid0IHJlYWxseSBuZWNlc3NhcnkgZm9yIHRoZSBmdW50aW9uIHRvIHdvcmssCi1pdHMganVzdCB0byBiZSBzdXJlIG9ubHkgdGhlIGNhdGFsb2cgZnVuY3Rpb24gaXMgaW4gZWZmZWN0KS4KLTwvTEk+Ci08TEk+Ci1HbyB0byB0aGUgcHJlZmVyZW5jZXMgcGFnZSwgYW5kIG9wZW4gdGhlIFhNTCBDYXRhbG9nLiBWZXJpZnkgdGhlcmUgCi1pcyBhbiBlbnRyeSBmb3IgLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIFdlYiBBcHBsaWNhdGlvbiAyLjIvL0VOLgotPC9MST4KLTxMST4KLU9uY2UgYWxsIHRoZSBwcmVwIHdvcmsgaXMgZG9uZSAoZmlsZXMgZGVsZXRlZCwgdGV4dCBtb2RpZmllZCksIHlvdSBzaG91bGQgCi1leGl0IGFuZCByZXN0YXJ0IEVjbGlwc2UgdG8gYmUgc3VyZSB5b3UgaGF2ZSBhIGZyZXNoIHN0YXJ0LgotPC9MST4KLTxMST4KLU9wZW4gdGhlIHdlYi54bWwgZmlsZSBhbmQgYmUgc3VyZSB0aGF0IGNvbnRlbnQgYXNzaXN0IHdvcmtzIGZvciB0aGF0IGZpbGUuCi1Gb3IgZXhhbXBsZSwgcmlnaHQgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgJmx0Oy9kaXNwbGF5LW5hbWUmZ3Q7IHRhZywgY3RybC1zcGFjZSAKLXNob3VsZCBwcm92aWRlIGEgbG9uZyBsaXN0IG9mIGVsZW1lbnRzLCBzdGFydGluZyB3aXRoIHNlcnZsZXQsIHNlcnZsZXQtbWFwcGluZywgZXRjLgotVGhpcyBpbmRpY2F0ZXMgdGhlIHNoaXBwZWQgRFREIGZ1bmN0aW9uIGlzIHdvcmtpbmcgYW5kIGNvbmZpZ3VyZWQgCi1jb3JyZWN0bHkgKGF0IGxlYXN0IGZvciB0aGUgd2ViLnhtbCBmaWxlKS4KLTwvTEk+Ci08L1VMPgotPC9QPgotPFA+PEI+Q3JlYXRlIGFuIFhNTCBGaWxlIGZyb20gYSBuZXcgRFREIGNhdGFsb2cgZW50cnk8L0I+PEJSPjxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjYzIiBzcmM9InUwMTFhbmkuZ2lmIiB3aWR0aD0iNjMiPjwvUD4KLQotPGI+VGhlIGZvbGxvd2luZyBjb21lcyBkaXJlY3RseSBmcm9tIHRoZSAnRGVzaWduJyBTbW9rZSBUZXN0OiBYTUwgQ2F0YWxvZyBmb3IgWE1MIFNjaGVtYTwvYj4KLTx1bD4KLTxsaT4KLVJ1biBWYWxpZGF0ZSBvbiBQdXJjaGFzZU9yZGVyLnhtbCB0byBtYWtlIHN1cmUgaXQgaXMgdmFsaWQ8L2xpPgotCi08bGk+Ci1DcmVhdGUgYSBuZXcgcHJvamVjdCwgWE1MVGVzdDI8L2xpPgotCi08bGk+Ci1Nb3ZlIHRoZSBQdXJjaGFzZU9yZGVyLnhzZCBpbnRvIFhNTFRlc3QyLjwvbGk+Ci0KLTxsaT4KLVJ1biBWYWxpZGF0ZSBvbiBQdXJjaGFzZU9yZGVyLnhtbC4gWW91IHdpbGwgbm90aWNlIHRoYXQgaXQgaXMgbm8gbG9uZ2VyCi12YWxpZC4gVGhlIGVycm9yIG1lc3NhZ2Ugc2hvdWxkIGdpdmUgeW91IGEgaGludCB0aGF0IHRoZSBmaWxlIFB1cmNoYXNlT3JkZXIueHNkCi1jYW4gbm8gbG9uZ2VyIGJlIGZvdW5kLjwvbGk+Ci0KLTxsaT4KLU9wZW4gdGhlIFdpbmRvdy0+UHJlZmVyZW5jZXMgYW5kIHNlbGVjdCB0aGUgWE1MIENhdGFsb2cuPC9saT4KLQotPGxpPgotRW50ZXIgdGhlIHBhaXIgPGI+SWQgPSBQdXJjaGFzZU9yZGVyLnhzZCBVcmkgPSBmOlxlY2xpcHNlXFhNTFRlc3QyXFB1cmNoYXNlT3JkZXIueHNkPC9iPjwvbGk+Ci0KLTxicj5PciBhbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSBhIHJlbGF0aXZlIHBhdGggdG8gdGhlIGluc3RhbGwgZGlyZWN0b3J5Ci1vZiB0aGUgd29ya2JlbmNoIGFzIGZvbGxvd3M6Ci08YnI+PGI+SWQgPSBQdXJjaGFzZU9yZGVyLnhzZCBVcmkgPSAuXFhNTFRlc3QyXFB1cmNoYXNlT3JkZXIueHNkPC9iPgotPGxpPgotQ2xpY2sgb24gdGhlIFJlbG9hZCBidXR0b24gdG8gcmVsb2FkIHRoZSBjYXRhbG9nIHNldHRpbmdzLjwvbGk+Ci0KLTxsaT4KLVJ1biBWYWxpZGF0ZS4gVGhlIFB1cmNoYXNlT3JkZXIueG1sIGRvY3VtZW50IHNob3VsZCBub3cgYmUgdmFsaWQuPC9saT4KLTwvdWw+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgU2F2ZS9WYWxpZGF0ZSB0ZXN0IGNhc2VzCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+U2F2ZS9WYWxpZGF0ZSB0ZXN0IGNhc2VzPC9GT05UPjwvSDI+Ci08UD48Qj5TYXZpbmcgYW4gWE1MIEZpbGU8L0I+PEJSPgotKE5PVEU6IHRoZSA8Qj5JZGVudGlmeSBhIGxvY2FsIERURDwvQj4gdGVzdCBjYXNlIHRlc3RzIHRoZSBzYXZlIHByb21wdCBvbiBhIGZpbGUgY2xvc2UuKTwvUD4KLTxVTD4KLSAgPExJPklmIGFueSBmaWxlcyBhcmUgb3Blbiwgc2VsZWN0IDxCPkZpbGUtJmd0O0Nsb3NlIEFsbDwvQj4gKG9yIDxCPkN0cmwrU2hpZnQrRjQ8L0I+KSB0byBjbG9zZSB0aGVtLjwvTEk+Ci0gIDxMST5PcGVuIGFueSB4bWwgZmlsZSBpbiB0aGUgPEI+WE1MVGVzdDI8L0I+IHByb2plY3QuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIChuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9uKToKLSAgPFVMPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlPC9CPiBpcyBkaXNhYmxlZC48L0xJPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlIEFsbDwvQj4gaXMgZGlzYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZSBBczwvQj4gaXMgZW5hYmxlZC48L0xJPgotICAgIDxMST50aGUgPEI+U2F2ZTwvQj4gdG9vbGJhciBidXR0b24gKGEgZGlza2V0dGUpIGlzIGRpc2FibGVkLjwvTEk+Ci0gICAgPExJPnRoZSA8Qj5TYXZlIEFzPC9CPiB0b29sYmFyIGJ1dHRvbiBpcyBlbmFibGVkLjwvTEk+Ci0gICAgPExJPjxCPlNhdmU8L0I+IGlzIGRpc2FibGVkIG9uIHRoZSBTb3VyY2UgcG9wdXAgbWVudS4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPldvdWxkIGJlIG5pY2UgaWYgdGhlIERlc2lnbiBwb3B1cCBtZW51IGFsc28gaGFkIGEgU2F2ZSBzZWxlY3Rpb24uIE9wZW4gYSBzdWdnZXN0aW9uIGRlZmVjdC48L0ZPTlQ+PC9MST4KLSAgICA8TEk+bm8gPEI+KjwvQj4gYXBwZWFycyBpbiB0aGUgZmlsZSB0YWIuPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+TWFrZSBhIGNoYW5nZSBpbiB0aGUgU291cmNlIHBhZ2UuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIChjaGFuZ2VzLW1hZGUgY29uZGl0aW9uKToKLSAgPFVMPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlPC9CPiBpcyBlbmFibGVkLjwvTEk+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmUgQWxsPC9CPiBpcyBlbmFibGVkPC9MST4KLSAgICA8TEk+dGhlIDxCPlNhdmU8L0I+IHRvb2xiYXIgYnV0dG9uIChhIGRpc2tldHRlKSBpcyBlbmFibGVkLjwvTEk+Ci0gICAgPExJPjxCPlNhdmU8L0I+IGlzIGVuYWJsZWQgb24gdGhlIFNvdXJjZSBwb3B1cCBtZW51LjwvTEk+Ci0gICAgPExJPmEgPEI+KjwvQj4gYXBwZWFycyBpbiB0aGUgZmlsZSB0YWIuPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+SGl0IDxCPkN0cmwrUzwvQj4uIDwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5NYWtlIGEgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+RmlsZS0mZ3Q7U2F2ZSBBbGw8Qj48L0I+LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5NYWtlIGEgY2hhbmdlIGluIHRoZSBQcm9wZXJ0aWVzIHZpZXcuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPlNlbGVjdCA8Qj5TYXZlPC9CPiBmcm9tIHRoZSBTb3VyY2UgcG9wdXAgbWVudS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+Q2xvc2UgYW5kIHRoZW4gcmVvcGVuIHRoZSBmaWxlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGNoYW5nZXMgdGhhdCB3ZXJlIG1hZGUgaW4gdGhlIHByZXZpb3VzIHN0ZXBzIGFwcGVhciBpbiB0aGUgRGVzaWduIGFuZCBTb3VyY2UgcGFnZXMuPC9MST4KLTwvVUw+Ci08UD48Qj5TYXZpbmcgYW4gWE1MIEZpbGUgYWNyb3NzIG11bHRpcGxlIHBlcnNwZWN0aXZlcyAob3B0aW9uYWwpPC9CPjwvUD4KLTxVTD4KLSAgPExJPk9wZW4gYW55IHhtbCBmaWxlIGluIHRoZSA8Qj5YTUxUZXN0MjwvQj4gcHJvamVjdC48L0xJPgotICA8TEk+TWFrZSBhIGNoYW5nZSB0byB0aGUgZmlsZS48L0xJPgotICA8TEk+T3BlbiBhbm90aGVyIFhNTCBQZXJzcGVjdGl2ZSBieToKLSAgPFVMPgotICAgIDxMST48Qj5zZWxlY3RpbmcgUGVyc3BlY3RpdmUtJmd0O09wZW4tJmd0O090aGVyLi4uPC9CPjwvTEk+Ci0gICAgPExJPndoaWxlIGhvbGRpbmcgZG93biB0aGUgPEI+U2hpZnQ8L0I+IGtleSwgc2VsZWN0IDxCPlhNTDwvQj4uPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+VmVyaWZ5IGFub3RoZXIgWE1MIFBlcnNwZWN0aXZlIGJ1dHRvbiBhcHBlYXJzIGluIHRoZSBsZWZ0aGFuZCBzaWRlIG9mIHRoZSBXb3JrYmVuY2ggdG8gcmVwcmVzZW50IHRoaXMgc2Vjb25kIHBlcnNwZWN0aXZlLjwvTEk+Ci0gIDxMST5PcGVuIHRoZSBzYW1lIHhtbCBmaWxlIGFzIGluIHRoZSBmaXJzdCBzdGVwIGFib3ZlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5IGluIGJvdGggWE1MIFBlcnNwZWN0aXZlcyBhbmQgdmVyaWZ5IHRoYXQgdGhlIGNoYW5nZXMgbWFkZSB0byB0aGUgZmlsZSBpbiB0aGUgZmlyc3QgcGVyc3BlY3RpdmUgYXBwZWFyIGluIHRoZSBzYW1lIGZpbGUgaW4gdGhlIHNlY29uZCBwZXJzcGVjdGl2ZS4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPlRoZSAqIG5ldmVyIGFwcGVhcnMgaW4gdGhlIGZpbGUgdGFiIG9mIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUgZXZlbiB3aGVuIG1ha2UgY2hhbmdlcyB0byB0aGUgZmlsZSBpbiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlLiBUYWxrIHRvIERhdmlkLjwvRk9OVD48L0xJPgotICA8TEk+TWFrZSBzb21lIGNoYW5nZXMgdG8gdGhlIGZpbGUgaW4gdGhlIHNlY29uZCBwZXJzcGVjdGl2ZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZXNlIGNoYW5nZXMgYXBwZWFyIGluIHRoZSBzYW1lIGZpbGUgaW4gdGhlIGZpcnN0IHBlcnNwZWN0aXZlLjwvTEk+Ci0gIDxMST5DbG9zZSB0aGUgZmlsZSBpbiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlIGFuZCByZXNwb25kIDxCPlllczwvQj4gdG8gdGhlIHNhdmUgY2hhbmdlcyBwcm9tcHQuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgbm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbiBhcHBsaWVzIGluIHRoZSBmaXJzdCBwZXJzcGVjdGl2ZS48L0xJPgotPC9VTD4KLTxQPjxCPlZhbGlkYXRpbmcgYSBub24gd2VsbCBmb3JtZWQgWE1MIEZpbGUgKG5vIERURC9TY2hlbWEpPC9CPjxCUj4KLShOT1RFOiBpdCdzIGltcG9ydGFudCB0aGF0IHRoZSBmb2xsb3dpbmcgYmUgdHlwZWQgaW4uIFRoaXMgdGVzdCBjYXNlIHRyaWVzIHRvIGNvdmVyIHNvbWUgb2YgdGhlIG1vcmUgY29tbW9uIGVycm9ycyB0aGF0IHJlbmRlciBhbiBYTUwgZmlsZSBhcyBub3QgYmVpbmcgd2VsbC1mb3JtZWQuIEl0IGlzIG5vdCBpbnRlbmRlZCB0byB2ZXJpZnkgdGhhdCBhbGwgcG9zc2libGUgZXJyb3JzIGFyZSBiZWluZyBkZXRlY3RlZCBhbmQgZ3JhY2VmdWxseSBoYW5kbGVkLiApPC9QPgotPFVMPgotICA8TEk+U2VsZWN0IHRoZSA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGU8L0I+IHRvb2xiYXIgYnV0dG9uLjwvTEk+PExJPkFjY2VwdCB0aGUgZGVmYXVsdCB0byA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGU8L0I+PC9MST4KLSAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2UKLSAgICA8VUw+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+WE1MVGVzdDI8L0I+IGFzIHRoZSBmb2xkZXI8L0xJPgotICAgICAgICA8TEk+U3BlY2lmeSBhIEZpbGUgbmFtZSBvZiA8Qj5Ob25XZWxsRm9ybWVkPC9CPjwvTEk+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+RmluaXNoPC9CPjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3QuPC9MST4KLSAgPExJPlNlbGVjdCA8Qj4mbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7LjwvQj48L0xJPgotICA8TEk+Q3JlYXRlIGEgbmV3IGxpbmUgYWZ0ZXIgdGhlIFhNTCBkZWNsYXJhdGlvbi48L0xJPgotICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdC48L0xJPgotICA8TEk+U2VsZWN0IGNvbW1lbnQuPC9MST4KLSAgPExJPkVtYmVkIG1vcmUgdGhhbiAyIGNvbnNlY3V0aXZlIGRhc2hlcyBpbiB0aGUgY29tbWVudC4gCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogbW9yZSB0aGFuIDIgY29uc2VjdXRpdmUgZGFzaGVzIGNhbiBub3QgYmUgZW1iZWRkZWQgd2l0aGluIGEgY29tbWVudCk8L0ZPTlQ+PC9MST4KLSAgPExJPlR5cGUgaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBhcyBzaG93biBiZWxvdzogCi0gICAgICAgIDxGT05UIGNvbG9yPSIjZmYwMDAwIj4oSSBjYW4ndCBzaG93IHRoZSBsaW5lcyB1bnRpbCBkZWZlY3QgMTc3NzU1IGlzIGZpeGVkIC4uLiB1bnRpbCB0aGVuLCBoZXJlJ3MgdGhlIHR5cGUgb2YgdGhpbmdzIHRoYXQgY2F1c2UgCi0gICAgICAgIGEgZG9jdW1lbnQgdG8gbm90IGJlIHdlbGwtZm9ybWVkKTo8L0ZPTlQ+Ci0gIDxVTD4KLSAgICA8TEk+Y3JlYXRlIGEgc3RhcnQgYW5kIGVuZCB0YWcgdGhhdCBkb24ndCBtYXRjaCBpbiB0aGVpciBjYXNlIHNlbnNpdGl2aXR5IAotICAgICAgICAoZS5nLiwgJmx0O3RhZyZndDsgYW5kICZsdDsvVGFnJmd0OykuIDwvTEk+Ci0gICAgPExJPmNyZWF0ZSBhIHN0YXJ0IGFuZCBlbmQgdGFnIHdoZXJlIHRoZSBzdGFydCB0YWcgY29udGFpbnMgYW4gYXR0cmlidXRlIHZhbHVlIHRoYXQgaXMgbm90IAotICAgICAgICBlbmNsb3NlZCBpbiBxdW90ZXMuCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogdGhpcyBpcyBwZXJtaXR0ZWQgaW4gSFRNTCwgYnV0IG5vdCBYTUwpPC9GT05UPjwvTEk+Ci0gICAgPExJPmNyZWF0ZSB0YWdzIHRoYXQgYXJlIG5vdCBwcm9wZXJseSBuZXN0ZWQuCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogYSBjaGlsZCB0YWcgbXVzdCBiZSBjb21wbGV0ZWQgYmVmb3JlIGl0cyBwYXJlbnQgdGFnKTwvRk9OVD48L0xJPgotICAgIDxMST5jcmVhdGUgYSBzdGFydCB0YWcgd2l0aG91dCBhIGNvcnJlc29uZGluZyBlbmQgdGFnLgotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IGFsbCBzdGFydCB0YWdzIG11c3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgZW5kIHRhZyB1bmxlc3MgdGhlIAotICAgICAgICB0YWcgaXMgYW4gZW1wdHkgdGFnLCBpbiB3aGljaCBjYXNlIHRoZSBzaG9ydGhhbmQgdmVyc2lvbiBjYW4gYmUgdXNlZCAoJmx0O3Nob3J0VGFnLyZndDspKS48L0ZPTlQ+PC9MST4KLSAgICA8TEk+ZG8gbm90IHByb3ZpZGUgYW4gYXR0cmlidXRlIHZhbHVlICg9JnF1b3Q7dmFsdWUmcXVvdDspLgotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IHRoaXMgaXMgcGVybWl0dGVkIGluIEhUTUwgZm9yIHRob3NlIGF0dHJpYnV0ZXMgdGhhdCBoYXZlIAotICAgICAgICBvbmx5IG9uZSB2YWx1ZSwgYnV0IGl0J3Mgbm90IHZhbGlkIGluIFhNTCk8L0ZPTlQ+PC9MST4KLSAgICAgPExJPmRlZmluZSBhbiBhdHRyaWJ1dGUgbW9yZSB0aGFuIG9uY2UgaW4gYSBzdGFydCB0YWcuPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+U2F2ZSB0aGUgZmlsZS48L0xJPgotICA8TEk+VmVyaWZ5IGVycm9ycyBhcmUgbGlzdGVkIGluIHRoZSBUYXNrcyB2aWV3IGZvciB0aGUgYWJvdmUgdmlvbGF0aW9ucyBhbmQgdGhhdCBlcnJvciBtYXJrZXJzIGFwcGVhciBvbiB0aGUgYXBwcm9wcmlhdGUgCi0gICAgICAgICBsaW5lcyBpbiB0aGUgU291cmNlIHBhZ2UuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5JJ20gbm90IHN1cmUgaG93IHRoZSBEZXNpZ24gcGFnZSBoYW5kbGVzIGFueSBvZiB0aGVzZSB2aW9sYXRpb25zIAotICAgICAgICAgYW5kIHdoYXQgd2lsbCBhcHBlYXIgaW4gdGhlIE91dGxpbmUgYW5kIFByb3BlcnRpZXMgdmlldy4gVGFsayB0byBDcmFpZyBhbmQgRGF2aWQuPC9GT05UPjwvTEk+Ci0gIDxMST5SZW9wZW4gdGhlIGZpbGUgYW5kIHZlcmlmeSBldmVyeXRoaW5nIHdhcyBzYXZlZC48L0xJPgotPC9VTD4KLQotCi08UD48Qj5WYWxpZGF0ZSBhbiBYTUwgRmlsZSBiYXNlZCBvbiBhIERURDwvQj48L1A+Ci08VUw+Ci08TEk+T3BlbiA8Qj5mcm9tU2NyYXRjaC54bWw8L0I+LjwvTEk+Ci08TEk+RGVsZXRlIGEgY2hhcmFjdGVyIGZyb20gb25lIG9mIHRoZSBzdGFydCB0YWdzIChtaXN0eXBpbmcgYSB0YWcgaXMgbm90IHVuY29tbW9uKS48L0xJPgotPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3Qgd2l0aGluIHRoZSBiYWQgdGFnLiBWZXJpZnkgYSBtZXNzYWdlIGFwcGVhcnMgaW4gdGhlIHN0YXR1cyBhcmVhCi1vZiB0aGUgV29ya2JlbmNoIGluZGljYXRpbmcgdGhhdCB0aGUgYmFkIHRhZyBpcyBhbiB1bmtub3duIHRhZy48L0xJPgotPExJPlNlbGVjdCB0aGUgPEI+VmFsaWRhdGU8L0I+IHRvb2xiYXIgYnV0dG9uLjwvTEk+Ci08TEk+VmVyaWZ5IGFuIGVycm9yIGFwcGVhcnMgaW4gdGhlIFRhc2tzIHZpZXcgYW5kIGFuIGVycm9yIG1hcmtlciBhcHBlYXJzIGluIHRoZSBTb3VyY2UgcGFnZQotdG8gZmxhZyB0aGUgaW52YWxpZCB0YWcuPC9MST4KLTxMST5TZWxlY3QgPEI+RWRpdC0+VW5kbzwvQj4gZnJvbSB0aGUgU291cmNlIHBhZ2UuPC9MST4KLTxMST5WZXJpZnkgdGhlIGJhZCB0YWcgZXJyb3Igbm8gbG9uZ2VyIGFwcGVhcnMgaW4gdGhlIFRhc2tzIHZpZXcuPC9MST4KLTxMST5SZW1vdmUgdGhlIDxCPkhlYWRlcjwvQj4gZW5kIHRhZyBmcm9tIHRoZSBTb3VyY2UgcGFnZS48L0xJPgotPExJPlNhdmUgdGhlIGZpbGUuPC9MST4KLTxMST5WZXJpZnkgYW4gZXJyb3IgYXBwZWFycyBpbiB0aGUgVGFza3MgdmlldyBpbmRpY2F0aW5nIHRoYXQgdGhlIDxCPkhlYWRlcjwvQj4gZW5kIHRhZyBpcyBtaXNzaW5nPC9MST4KLTxMST5DbG9zZSB0aGUgZmlsZSwgcmVzcG9uZGluZyA8Qj5ZZXM8L0I+IHRvIHRoZSBzYXZlIGNoYW5nZXMgcHJvbXB0LjwvTEk+Ci08TEk+RG91YmxlLWNsaWNrIG9uIHRoZSBlcnJvciBpbiB0aGUgVGFza3MgdmlldywgYW5kIHZlcmlmeSA8Qj5mcm9tU2NyYXRjaC54bWw8L0I+IG9wZW5zIHRvIHRoZQotYXBwcm9wcmlhdGUgbGluZSBpbiB0aGUgU291cmNlIHBhZ2Ugb2YgdGhlIFhNTCBFZGl0b3IuPC9MST4KLTxMST5IZXJlJ3Mgc29tZSBvdGhlciB2aW9sYXRpb25zIHRoYXQgY2FuIGJlIGF0dGVtcHRlZDoKLTxVTD4KLTxMST5TcGVjaWZ5IGEgYmFkIGF0dHJpYnV0ZS48L0xJPgotPExJPlNwZWNpZnkgYSBiYWQgYXR0cmlidXRlIHZhbHVlLjwvTEk+Ci08TEk+U3BlY2lmeSBjaGlsZCB0YWdzIG91dCBvZiBzZXF1ZW5jaW5nIG9yZGVyPC9MST4KLTxMST5WaW9sYXRlIHRoZSBvY2N1cnJlbmNlIGluZGljYXRvciBmb3IgYSB0YWcgKGUuZy4sIGlmIHRoZSBEVEQgc2hvd3MgPywgdGhlbiBvbmx5Ci0wIG9yIDEgb2NjdXJyZW5jZXMgb2YgdGhlIHRhZyBpcyBwZXJtaXR0ZWQpLgotPC9VTD48L0xJPgotPExJPlNhdmUgdGhlIGZpbGUuPC9MST4KLTxMST5WZXJpZnkgZXJyb3JzIGFyZSBsaXN0ZWQgaW4gdGhlIFRhc2tzIHZpZXcgZm9yIHRoZSBhYm92ZSB2aW9sYXRpb25zIGFuZCB0aGF0IGVycm9yIG1hcmtlcnMgYXBwZWFyIG9uIHRoZSBhcHByb3ByaWF0ZSAKLWxpbmVzIGluIHRoZSBTb3VyY2UgcGFnZS4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPkknbSBub3Qgc3VyZSBob3cgdGhlIERlc2lnbiBwYWdlIGhhbmRsZXMgYW55IG9mIHRoZXNlIHZpb2xhdGlvbnMgCi1hbmQgd2hhdCB3aWxsIGFwcGVhciBpbiB0aGUgT3V0bGluZSBhbmQgUHJvcGVydGllcyB2aWV3LiBUYWxrIHRvIENyYWlnIGFuZCBEYXZpZC48L0ZPTlQ+PC9MST4KLTxMST5SZW9wZW4gdGhlIGZpbGUgYW5kIHZlcmlmeSBldmVyeXRoaW5nIHdhcyBzYXZlZC48L0xJPgotPC9VTD4KLQotPCEtLSAgcmVtb3ZlZCBzaW5jZSBkb25lIGVsc2V3aGVyZSBhcyBwYXJ0IG9mIG90aGVyIHNjZW5lcmlvcwotPFA+PEI+VmFsaWRhdGUgYW4gWE1MIEZpbGUgYmFzZWQgb24gYSBTY2hlbWE8L0I+PEJSPgotLS0+Ci08SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI2MyIgc3JjPSJ1MDExYW5pLmdpZiIgd2lkdGg9IjYzIj48L1A+Ci0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZSBTcGVjaWZpYyB0ZXN0IGNhc2VzCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Qj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+U291cmNlIFNwZWNpZmljIHRlc3QgY2FzZXMgKG9wdGlvbmFsKTwvRk9OVD48L0I+PC9IMj4KLTxQPjxCPlVzaW5nIHRoZSBBdXRvIENvbXBsZXRpb24gQ29udGVudCBBc3Npc3QgUHJlZmVyZW5jZTwvQj48QlI+Ci08VUw+Ci08TEk+T3BlbiBhIGFueSBYTUwgZmlsZSB0aGF0IGhhcyBlbm91Z2ggdGFncyB0byBwcm92aWRlIHN5bnRheCBoaWdodGxpZ2h0aW5nLjwvTEk+Ci08TEk+V2hpbGUgdGhhdCBmaWxlIGlzIGxlZnQgb3BlbiwgZ28gdG8gdGhlIFByZWZlcmVuY2VzIHBhZ2UsIHNlbGVjdAotWE1MIEVkaXRvciwgdGhlbiBTb3VyY2UgU3R5bGVzLiA8L0xJPgotPExJPk9uIHRoYXQgcGFnZSwgdXNlIHRoZSBtb3VzZSB0byAic2VsZWN0IiBhIHRhZyBuYW1lLiBUaGUgdGFnIG5hbWUgaXMgbm90IGxpdGVyYWxseQotc2VsZWN0ZWQsIGJ1dCB3aGVuIHlvdSBjbGljayBvbiBhbiBlbGVtZW50IGluIHRoZSBleGFtcGxlIHRleHQsIHRoZSBsaXN0Ci1hYm92ZSBpdCB3aWxsIGRpc3BsYXkgdGhlIHR5cGUgb2YgZWxlbWVudCBpdCBpcywgYW5kIHdoYXQgaXRzIGN1cnJlbnQgY29sb3JzIGFyZS48L0xJPgotPExJPkZvciAidGFnIG5hbWUiLCBzZWxlY3QgdGhlIGJvbGQgY2hlY2sgYm94LiBUaGVuIHByZXNzIEFwcGx5LCBhbmQgeW91IHNob3VsZAotc2VlIHRoZSBjaGFuZ2UgdGFrZSBlZmZlY3QgaW4geW91ciBhY3RpdmUgZWRpdG9yLjwvTEk+Ci08TEk+U2VsZWN0ICJEZWZhdWx0cyIgYW5kIG1ha2Ugc3VyZSB0aGUgdGFnIG5hbWVzIGFyZSBzZXQgYmFjayB0byBub3QgYm9sZC48L0xJPgotPC9VTD4KLTxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjYzIiBzcmM9InUwMTFhbmkuZ2lmIiB3aWR0aD0iNjMiPjwvUD4KLTxQPjxCPkRvdWJsZS1DbGlja2luZyBXaXRoaW4gdGhlIFNvdXJjZTwvQj4gPEJSPgotKE5PVEU6IGlmIHlvdSBjb250aW51ZSB0byBkb3VibGUtY2xpY2sgYXQgYSBnaXZlbiBjdXJzb3IgcG9zaXRpb24sIHRoZSBzZWxlY3Rpb24gYXJlYSB3aWxsIGNvbnRpbnVlIHRvIGV4cGFuZC4gV2hlbiB0aGUgbWF4aW11bSByZWdpb24gYXJlYSBoYXMgYmVlbiByZWFjaGVkLCB0aGUgbmV4dCBkb3VibGUtY2xpY2sgd2lsbCBjYXVzZSB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLiBTbywgdGhlIHNlbGVjdGlvbnMgd2lsbCB3cmFwL2N5Y2xlLiA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+Q29vbCE8L0ZPTlQ+KS48L1A+Ci08VUw+Ci0gIDxMST5PcGVuIDxCPkpvYkRlc2MueG1sPC9CPi48L0xJPgotICA8TEk+RG91YmxlLWNsaWNraW5nIHdpdGhpbiB0YWcgY29udGVudDoKLSAgPFVMPgotICAgIDxMST5Eb3VibGUtY2xpY2sgd2l0aGluIDxCPk1pZGRsZXdhcmU8L0I+IG9uIGxpbmUgNy48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+TWlkZGxld2FyZTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBhbmQgRGVzaWduIHBhZ2VzIGFuZCA8Qj5CdXNUeXBlPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3LiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+Tm90IHN1cmUgd2hhdCB0aGUgUHJvcGVydGllcyB2aWV3IGlzIHN1cHBvc2VkIHRvIHNob3cuIEl0IGdvZXMgYmxhbmsuIFNlZSBkZWZlY3QgMTc3NzUzLiBBbHNvLCA8Qj5NaWRkbGV3YXJlPC9CPiB3YXNuJ3Qgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFzIGhhZCBleHBlY3RlZC4gVGhlIERlc2lnbiBwYWdlIG9ubHkgc2VlbXMgdG8gc3RheSBpbiBzeW5jIGF0IHRoZSBlbGVtZW50L3RhZyBsZXZlbCBsaWtlIHRoZSBPdXRsaW5lIHZpZXcuIFRhbGsgdG8gQ3JhaWcgYWJvdXQgdGhpcy48L0ZPTlQ+PC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGFnYWluIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+QXBwbGljYXRpb24gYW5kIE1pZGRsZXdhcmUgU29mdHdhcmU8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgYW5kIERlc2lnbiBwYWdlcyBhbmQgPEI+QnVzVHlwZTwvQj4gcmVtYWlucyB0byBiZSB0aGUgb25seSB0aGluZyBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3LjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGlja2luZyBhZ2FpbiB3aWxsIGNhdXNlIGN5Y2xpbmcgYmFjayB0byB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPkRvdWJsZS1jbGlja2luZyB3aXRoaW4gYSB0YWcgbmFtZToKLSAgPFVMPgotICAgIDxMST5Eb3VibGUtY2xpY2sgd2l0aGluIDxCPkhvd1RvQXBwbHk8L0I+IG9uIGxpbmUgNjEuPC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPkhvd1RvQXBwbHk8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgcGFnZSwgRGVzaWduIHBhZ2UsIGFuZCBPdXRsaW5lIHZpZXcuIAotICAgICAgICA8Qj5jbGFzczwvQj4sIDxCPmRpc3RyaWJ1dGU8L0I+LCA8Qj5pZDwvQj4sIGFuZCA8Qj5uYW1lPC9CPiBzaG91bGQgYXBwZWFyIGluIHRoZSAKLSAgICAgICAgUHJvcGVydGllcyB2aWV3LiBPbmx5IDxCPmRpc3RyaWJ1dGU8L0I+IHNob3VsZCBzaG93IGEgdmFsdWUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGFnYWluIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIHdob2xlIDxCPkhvd1RvQXBwbHk8L0I+IHN0YXJ0IHRhZyAoaW5jbHVkaW5nIGl0cyBkZWxpbWl0ZXJzKSBpcyBzZWxlY3RlZCAKLSAgICAgICAgaW4gdGhlIFNvdXJjZSBwYWdlLiA8Qj5Ib3dUb0FwcGx5PC9CPiBzaG91bGQgcmVtYWluIHNlbGVjdGVkIGluCi0gICAgICAgIHRoZSBEZXNpZ24gcGFnZSBhbmQgT3V0bGluZSB2aWV3LiA8Qj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SG93VG9BcHBseTwvRk9OVD48L0I+PEZPTlQgY29sb3I9IiNmZjAwMDAiPiBhbmQgYWxsIGRlc2NlbmRlbnRzIGJlY29tZSBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IChkZWZlY3QgMTc3NzUyKS4gQWxzbywgdGhlIFByb3BlcnRpZXMgdmlldyBzaG93cyBubyBwcm9wZXJ0aWVzIChkZWZlY3QgMTc3NzUzKS48L0ZPTlQ+PC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNraW5nIGFnYWluIHdpbGwgY2F1c2UgY3ljbGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+RG91YmxlLWNsaWNraW5nIHdpdGhpbiBhbiBhdHRyaWJ1dGUgbmFtZToKLSAgPFVMPgotICAgIDxMST5UeXBlIDxCPkN0cmwrRW5kPC9CPiB0byBwb3NpdGlvbiB0aGUgY3Vyc29yIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIHdpdGhpbiA8Qj5kaXN0cmlidXRlPC9CPiBvbiBsaW5lIDYxLiBWZXJpZnkgPEI+ZGlzdHJpYnV0ZTwvQj4gaXMgc2VsZWN0ZWQgCi0gICAgICAgIGluIHRoZSBTb3VyY2UgcGFnZSBhbmQgPEI+SG93VG9BcHBseTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFuZCBPdXRsaW5lIAotICAgICAgICB2aWV3LiA8Qj5jbGFzczwvQj4sIDxCPmRpc3RyaWJ1dGU8L0I+LCA8Qj5pZDwvQj4sIGFuZCA8Qj5uYW1lPC9CPiBzaG91bGQgYXBwZWFyIGluIAotICAgICAgICB0aGUgUHJvcGVydGllcyB2aWV3LiBPbmx5IDxCPmRpc3RyaWJ1dGU8L0I+IHNob3VsZCBzaG93IGEgdmFsdWUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IDxCPmRpc3RyaWJ1dGU9ImludGVybmFsIjwvQj4gaXMKLSAgICAgICAgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy48L0xJPiAgICAgICAgICAgICAgICAgCi0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSB0aGUgd2hvbGUgPEI+SG93VG9BcHBseTwvQj4gc3RhcnQgdGFnIGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgcGFnZSAoaW5jbHVkaW5nIGl0cyBkZWxpbWl0ZXJzKS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy48Qj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SG93VG9BcHBseTwvRk9OVD48L0I+PEZPTlQgY29sb3I9IiNmZjAwMDAiPiBhbmQgYWxsIGRlc2NlbmRlbnRzIGJlY29tZSBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IChkZWZlY3QgMTc3NzUyKS4gQWxzbywgdGhlIFByb3BlcnRpZXMgdmlldyBzaG93cyBubyBwcm9wZXJ0aWVzIChkZWZlY3QgMTc3NzUzKS48L0ZPTlQ+PC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNraW5nIGFnYWluIHdpbGwgY2F1c2UgY3ljbGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uPC9MST4KLSAgPC9VTD48L0xJPgotIDxMST5Eb3VibGUtY2xpY2tpbmcgd2l0aGluIGFuIGF0dHJpYnV0ZSB2YWx1ZToKLSAgPFVMPgotICAgIDxMST5UeXBlIDxCPkN0cmwrSG9tZTwvQj4gdG8gcG9zaXRpb24gdGhlIGN1cnNvciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLjwvTEk+Ci0gICAgPExJPlNjcm9sbCBkb3duIHN1Y2ggdGhhdCBsaW5lIDYxIGlzIHZpc2libGUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIHdpdGhpbiA8Qj5pbnRlcm5hbDwvQj4gb24gbGluZSA2MS4gVmVyaWZ5IDxCPmludGVybmFsPC9CPiBpcyBzZWxlY3RlZCAKLSAgICAgICAgaW4gdGhlIFNvdXJjZSBwYWdlIGFuZCA8Qj5Ib3dUb0FwcGx5PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYW5kIE91dGxpbmUgCi0gICAgICAgIHZpZXcuIDxCPmNsYXNzPC9CPiwgPEI+ZGlzdHJpYnV0ZTwvQj4sIDxCPmlkPC9CPiwgYW5kIDxCPm5hbWU8L0I+IHNob3VsZCBhcHBlYXIgaW4gCi0gICAgICAgIHRoZSBQcm9wZXJ0aWVzIHZpZXcuIE9ubHkgPEI+ZGlzdHJpYnV0ZTwvQj4gc2hvdWxkIHNob3cgYSB2YWx1ZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgPEI+ImludGVybmFsIjwvQj4gaXMKLSAgICAgICAgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgPEI+ZGlzdHJpYnV0ZT0iaW50ZXJuYWwiPC9CPiBpcwotICAgICAgICBzZWxlY3RlZCBpbiB0aGUgU291cmNlLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLjwvTEk+ICAgICAgICAgICAgICAgICAKLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IHRoZSB3aG9sZSA8Qj5Ib3dUb0FwcGx5PC9CPiBzdGFydCB0YWcgaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlIChpbmNsdWRpbmcgaXRzIGRlbGltaXRlcnMpLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLiA8Qj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SG93VG9BcHBseTwvRk9OVD48L0I+PEZPTlQgY29sb3I9IiNmZjAwMDAiPiBhbmQgYWxsIGRlc2NlbmRlbnRzIGJlY29tZSBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IChkZWZlY3QgMTc3NzUyKS4gQWxzbywgdGhlIFByb3BlcnRpZXMgdmlldyBzaG93cyBubyBwcm9wZXJ0aWVzIChkZWZlY3QgMTc3NzUzKS48L0ZPTlQ+PC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNraW5nIGFnYWluIHdpbGwgY2F1c2UgY3ljbGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uPC9MST4KLSAgPC9VTD48L0xJPgotPC9VTD4KLQotPFA+PEI+Rm9ybWF0dGluZyBhIEZpbGUgQ3JlYXRlZCBieSBEaWZmZXJlbnQgRWRpdG9yczwvQj48QlI+Ci08dWw+Ci08bGk+Ci1JbXBvcnQgdGhlIDxiPkpvYlBvc3RpbmcuZHRkPC9iPiBhbmQgPGI+Sm9iRGVzYy54bWw8L2I+PC9saT4KLQotPGxpPgotT3BlbiB0aGUgSm9iRGVzYy54bWwuIENoZWNrIHRoZSBzb3VyY2UgZm9yIGluZGVudGF0aW9uIHRvIHNlZSBpZiBpdCBwcmVzZXJ2ZXMKLXRoZSB3aGl0ZSBzcGFjZSBmcm9tIHRoZSBvcmlnaW5hbCBkb2N1bWVudC48L2xpPgotCi08bGk+Ci1UaGUgb3JpZ25hbCBkb2N1bWVudCB1c2VzIHNwYWNlcyBhbmQgdGFicywgc28gdGhlIGZvcm1hdHRpbmcgd2lsbCBhcHBlYXIgYSBsaXR0bGUgd3JvbmcuCi1CeSB1c2luZyB0aGUgcmlnaHQvbGVmdCBhcnJvd3MsIHZlcmlmeSB0aGF0IHNvbWUgc3BhY2UgaXMgc3BhY2VzIGFuZCBzb21lIHNwYWNlCi1pcyB0YWIgY2hhcmFjdGVycy48L2xpPgotPExJPlVzZSAnZm9ybWF0IGRvY3VtZW50JyB0byBiZSBzdXJlIGl0IGZvcm1hdHMuIDwvTEk+Ci08TEk+VGhlIGRlZmF1bHQgaXMgdG8gZm9ybWF0IHdpdGggc3BhY2VzIC4uLiB2ZXJpZnkgb25seSBzcGFjZXMgcmVtYWluIGluIGZpbGUsIG5vdCB0YWIgY2hhcmFjdGVzLiAKLShKdXN0IGEgbGl0dGxlIG1vdmVtZW50IHdpdGggdGhlIGFycm93IGtleXMgc2hvdWxkIHN1ZmZpY2UuPC9MST4KLTxMST5HbyB0byB0aGUgcHJlZmVyZW5jZSBwYWdlIHRvIGNoYW5nZSB0aGUgZm9ybWF0IHNldHRpbmdzIGZvciB0aGUgWE1MIEVkaXRvcgotdG8gdXNlIHRoZSB0YWIgY2hhcmFjdGVyIGluc3RlYWQgb2YgNCBzcGFjZXMuIFdoaWxlIHRoZXJlLCB2ZXJpZnkgdGhhdCB0aGUgZGlhbG9nCi13aWxsIG5vdCBhbGxvdyBvdGhlciB2YWx1ZXMgdG8gYmUgaW50ZXJlZCBleGNlcHQgIndoaXRlc3BhY2UiIC4uLidcdCdzIGFuZCBibGFua3MuCi08L0xJPgotPExJPkZvcm1hdCB0aGUgZG9jdW1lbnQgYWdhaW4gYW5kIGJlIHN1cmUgdGhpcyB0aW1lIHRhYiBjaGFyYWN0ZXJzIHdlcmUgdXNlZC48L0xJPgotPC91bD4KLTxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjYzIiBzcmM9InUwMTFhbmkuZ2lmIiB3aWR0aD0iNjMiPjwvUD4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE90aGVyIHRlc3QgY2FzZXMKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxCPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5PdGhlciB0ZXN0IGNhc2VzPC9GT05UPjwvQj48L0gyPgotPFA+PEI+QXNzb2NpYXRlIHRoZSBYTUwgRWRpdG9yIHRvIGEgbmV3IGZpbGUgdHlwZTwvQj48L1A+Ci08VUw+Ci0gIDxMST5XaW5kb3ctJmd0O1ByZWZlcmVuY2VzPEI+PC9CPi48L0xJPgotICA8TEk+RXhwYW5kIDxCPldvcmtiZW5jaDwvQj4uPC9MST4KLSAgPExJPlNlbGVjdCA8Qj5GaWxlIEVkaXRvcnM8L0I+LjwvTEk+Ci0gIDxMST5TZWxlY3QgdGhlIDxCPkFkZDwvQj4gYnV0dG9uIHRvIGFkZCBhIG5ldyBmaWxlIHR5cGUuPC9MST4KLSAgPExJPlNwZWNpZnkgYSBmaWxlIHR5cGUgb2YgPEI+Ki5zZXQ8L0I+IGFuZCB0aGVuIGNsb3NlIHRoZSBBZGQgZGlhbG9nLjwvTEk+Ci0gIDxMST5WZXJpZnkgPEI+Ki5zZXQ8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBsaXN0IG9mIGZpbGUgdHlwZXMuPC9MST4KLSAgPExJPlNlbGVjdCB0aGUgPEI+QWRkPC9CPiBidXR0b24gdG8gYXNzb2NpYXRlIHRoZSBYTUwgRWRpdG9yIHRvIHRoZSBuZXcgZmlsZSB0eXBlLjwvTEk+Ci0gIDxMST5TZWxlY3QgPEI+WE1MIEVkaXRvcjwvQj4gZnJvbSB0aGUgbGlzdCBvZiBlZGl0b3JzLiBWZXJpZnkgaXQgYXBwZWFycyB3aXRoIGl0cyBvd24gc3BlY2lhbCBpY29uLiBDbG9zZSB0aGUgZGlhbG9nLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+Tk9URTogd2FpdGluZyB0byBoZWFyIGJhY2sgZnJvbSBPVEkgb24gaG93IGNhbiBwcmV2ZW50IDIgWE1MIEVkaXRvciBlbnRyaWVzIGZyb20gYXBwZWFyaW5nIGluIHRoZSBsaXN0LjwvRk9OVD48L0xJPgotICA8TEk+VmVyaWZ5IDxCPlhNTCBFZGl0b3I8L0I+IGFwcGVhcnMgYXMgdGhlIGRlZmF1bHQgZWRpdG9yIG5vdyBmb3IgdGhlIDxCPiouc2V0PC9CPiBmaWxlIHR5cGUuPC9MST4KLSAgPExJPk9wZW4gPEI+Z290Y2hhVENCZWFucy5zZXQ8L0I+IGZyb20gdGhlIE5hdmlnYXRvciB2aWV3LiBWZXJpZnkgaXQgb3BlbnMgdG8gdGhlIFhNTCBFZGl0b3IuPC9MST4KLTwvVUw+Ci08UD48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+VEhFIEVORCE8L0ZPTlQ+PC9QPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTXVsdGlOb25EZWZhdWx0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9NdWx0aU5vbkRlZmF1bHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc3MjExMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9NdWx0aU5vbkRlZmF1bHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTxIRUFEPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS02Ij4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+Ci08VElUTEU+SUJNIFdlYlNwaGVyZSBTYW1wbGVzIEdhbGxlcnk8L1RJVExFPgotPC9IRUFEPgotPEZSQU1FU0VUIHJvd3M9Ijc1LCoiPgotCTxGUkFNRSBuYW1lPSJ0aXRsZSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9UaXRsZS5odG1sIiBzY3JvbGxpbmc9Ik5PIiBub3Jlc2l6ZT4KLQk8RlJBTUVTRVQgY29scz0iMTYwLCoiPgotCQk8RlJBTUUgbmFtZT0ibWVudSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9NZW51Lmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JCTxGUkFNRSBuYW1lPSJtYWluIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1NhbXBsZXNJbnRyby5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCTwvRlJBTUVTRVQ+Ci0JPE5PRlJBTUVTPgotCTxCT0RZPgotCTxQPlRvIHZpZXcgdGhpcyBwYWdlLCB5b3UgbmVlZCBhIGJyb3dzZXIgdGhhdCBzdXBwb3J0cyBmcmFtZXMuPC9QPgotCTwvQk9EWT4KLQk8L05PRlJBTUVTPgotPC9GUkFNRVNFVD4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL05vRW5jb2RpbmcuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL05vRW5jb2RpbmcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDcwZTRmZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9Ob0VuY29kaW5nLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08SEVBRD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+Ci08VElUTEU+SUJNIFdlYlNwaGVyZSBTYW1wbGVzIEdhbGxlcnk8L1RJVExFPgotPC9IRUFEPgotPEZSQU1FU0VUIHJvd3M9Ijc1LCoiPgotCTxGUkFNRSBuYW1lPSJ0aXRsZSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9UaXRsZS5odG1sIiBzY3JvbGxpbmc9Ik5PIiBub3Jlc2l6ZT4KLQk8RlJBTUVTRVQgY29scz0iMTYwLCoiPgotCQk8RlJBTUUgbmFtZT0ibWVudSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9NZW51Lmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JCTxGUkFNRSBuYW1lPSJtYWluIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1NhbXBsZXNJbnRyby5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCTwvRlJBTUVTRVQ+Ci0JPE5PRlJBTUVTPgotCTxCT0RZPgotCTxQPlRvIHZpZXcgdGhpcyBwYWdlLCB5b3UgbmVlZCBhIGJyb3dzZXIgdGhhdCBzdXBwb3J0cyBmcmFtZXMuPC9QPgotCTwvQk9EWT4KLQk8L05PRlJBTUVTPgotPC9GUkFNRVNFVD4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL05vcm1hbE5vbkRlZmF1bHQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL05vcm1hbE5vbkRlZmF1bHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEzMGM5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9Ob3JtYWxOb25EZWZhdWx0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08SEVBRD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+Ci08VElUTEU+SUJNIFdlYlNwaGVyZSBTYW1wbGVzIEdhbGxlcnk8L1RJVExFPgotPC9IRUFEPgotPEZSQU1FU0VUIHJvd3M9Ijc1LCoiPgotCTxGUkFNRSBuYW1lPSJ0aXRsZSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9UaXRsZS5odG1sIiBzY3JvbGxpbmc9Ik5PIiBub3Jlc2l6ZT4KLQk8RlJBTUVTRVQgY29scz0iMTYwLCoiPgotCQk8RlJBTUUgbmFtZT0ibWVudSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9NZW51Lmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JCTxGUkFNRSBuYW1lPSJtYWluIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1NhbXBsZXNJbnRyby5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCTwvRlJBTUVTRVQ+Ci0JPE5PRlJBTUVTPgotCTxCT0RZPgotCTxQPlRvIHZpZXcgdGhpcyBwYWdlLCB5b3UgbmVlZCBhIGJyb3dzZXIgdGhhdCBzdXBwb3J0cyBmcmFtZXMuPC9QPgotCTwvQk9EWT4KLQk8L05PRlJBTUVTPgotPC9GUkFNRVNFVD4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL25vcXVvdGVzLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9ub3F1b3Rlcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTRjZGU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL25vcXVvdGVzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08SEVBRD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PXRleHQvaHRtbDsgY2hhcnNldD1VVEYtOD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTYiPgotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+Ci08VElUTEU+SUJNIFdlYlNwaGVyZSBTYW1wbGVzIEdhbGxlcnk8L1RJVExFPgotPC9IRUFEPgotPEZSQU1FU0VUIHJvd3M9Ijc1LCoiPgotCTxGUkFNRSBuYW1lPSJ0aXRsZSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9UaXRsZS5odG1sIiBzY3JvbGxpbmc9Ik5PIiBub3Jlc2l6ZT4KLQk8RlJBTUVTRVQgY29scz0iMTYwLCoiPgotCQk8RlJBTUUgbmFtZT0ibWVudSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9NZW51Lmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JCTxGUkFNRSBuYW1lPSJtYWluIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1NhbXBsZXNJbnRyby5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCTwvRlJBTUVTRVQ+Ci0JPE5PRlJBTUVTPgotCTxCT0RZPgotCTxQPlRvIHZpZXcgdGhpcyBwYWdlLCB5b3UgbmVlZCBhIGJyb3dzZXIgdGhhdCBzdXBwb3J0cyBmcmFtZXMuPC9QPgotCTwvQk9EWT4KLQk8L05PRlJBTUVTPgotPC9GUkFNRVNFVD4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTFjOGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMxZWE2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4KLWJpbi5wcm9qZWN0Ci1idWlsZC54bWwKLWh0bWx1aXRlc3RzLmphcgotdGVtcC5mb2xkZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5ZjQwMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjNWVkMDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotI1dlZCBKYW4gMTIgMTY6NDg6MzggRVNUIDIwMDUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9YWJvcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjhhZjFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jRnJpIE1heSAyNyAyMzo0MDo0MSBFRFQgMjAwNQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE4ZGIwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6IFN0cnVjdHVyZWQgU291cmNlIEVkaXRvciBmb3IgSFRNTCBUZXN0cwotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHM7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4wCi1CdW5kbGUtQ2xhc3NQYXRoOiBodG1sdWl0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLkhUTUxVSVRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZwotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMudmlld2VyCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2UuamZhY2UudGV4dCwKLSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLAotIG9yZy5lY2xpcHNlLnVpLmVkaXRvcnMsCi0gb3JnLmVjbGlwc2UudWkud29ya2JlbmNoLnRleHRlZGl0b3IsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuanVuaXQsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZSwKLSBvcmcuZWNsaXBzZS51aS52aWV3cywKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC51aQotRWNsaXBzZS1BdXRvU3RhcnQ6IHRydWUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjZiOTZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLTxib2R5IGxhbmc9IkVOLVVTIj4KLTxoMj5BYm91dCBUaGlzIENvbnRlbnQ8L2gyPgotIAotPHA+RmVicnVhcnkgMjQsIDIwMDU8L3A+CQotPGgzPkxpY2Vuc2U8L2gzPgotCi08cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gKCZxdW90O0NvbnRlbnQmcXVvdDspLiAgVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCi1FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgotCi08cD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSBDb250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoJnF1b3Q7UmVkaXN0cmlidXRvciZxdW90OykgYW5kIGRpZmZlcmVudCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkKLWFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gIENoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiAgSWYgbm8gc3VjaCBsaWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gIFVubGVzcyBvdGhlcndpc2UKLWluZGljYXRlZCBiZWxvdywgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50LjwvcD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjFkZTViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBodG1sdWl0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLWphcnMuY29tcGlsZS5vcmRlciA9IGh0bWx1aXRlc3RzLmphcgotc291cmNlLmh0bWx1aXRlc3RzLmphciA9IHNyYy8KLW91dHB1dC5odG1sdWl0ZXN0cy5qYXIgPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9pY29ucy9zb3VyY2VFZGl0b3IuZ2lmIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvaWNvbnMvc291cmNlRWRpdG9yLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVlYmRiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9pY29ucy9zb3VyY2VFZGl0b3IuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvcGx1Z2luLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NWFhOWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08cGx1Z2luPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MiPgotCQk8dmlldwotCQkJbmFtZT0iRW1iZWRkZWQgSFRNTCBTdHJ1Y3R1cmVkIFRleHQgVmlld2VyIgotCQkJaWNvbj0iaWNvbnMvc291cmNlRWRpdG9yLmdpZiIKLQkJCWNhdGVnb3J5PSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLnZpZXdlci5WaWV3ZXJUZXN0SFRNTCIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy52aWV3ZXIuVmlld2VyVGVzdEhUTUwiPgotCQk8L3ZpZXc+Ci0JPC9leHRlbnNpb24+Ci0KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL0hUTUxVSVByZWZlcmVuY2VzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL0hUTUxVSVByZWZlcmVuY2VzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTY2MmFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9IVE1MVUlQcmVmZXJlbmNlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS5pbnRlcm5hbC5IVE1MVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuSFRNTFVJUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjsKLQotLyoqCi0gKiBUaGUgcHVycG9zZSBvZiB0aGlzIHRlc3QgaXMgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBvZiB0aGUgSFRNTCBTb3VyY2UKLSAqIGVkaXRvciBwcmVmZXJlbmNlcy4gVGVzdHMgaW5jbHVkZSBzZXR0aW5nL2dldHRpbmcgcHJlZmVyZW5jZXMuCi0gKiAKLSAqIE5PVEU6IFRoaXMgdGVzdCBzaG91bGQgYmUgcHJlZm9ybWVkIG9uIGEgY2xlYW4gd29ya3NwYWNlLiBJZiBwZXJmb3JtZWQgb24KLSAqIGFuIGV4aXN0aW5nIHdvcmtzcGFjZSwgdGhpcyB0ZXN0IHdpbGwgbWFuaXB1bGF0ZSBwcmVmZXJlbmNlcyBpbiB0aGUKLSAqIHdvcmtzcGFjZSwgdGhvdWdoIGF0dGVtcHRzIHdpbGwgYmUgbWFkZSB0byByZXN0b3JlIG9yaWdpbmFsIHZhbHVlcyBhZnRlcgotICogdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIEhUTUxVSVByZWZlcmVuY2VzVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiBUZXN0cyBleGlzdGFuY2Ugb2YgcHJlZmVyZW5jZSB2YWx1ZXMgd2hlbiBnZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzCi0JICogdGhyb3VnaCBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdW5kbGVHZXRQcmVmZXJlbmNlcygpIHsKLQkJZmluYWwgU3RyaW5nIGJ1bmRsZU5hbWUgPSAib3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkiOwotCi0JCS8vIG5lZWQgdG8gc3RhcnQgdXAgYnVuZGxlIGZvciBkZWZhdWx0IHZhbHVlcyB0byBiZSBsb2FkZWQKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShidW5kbGVOYW1lKTsKLQkJdHJ5IHsKLQkJCWlmIChidW5kbGUgIT0gbnVsbCkKLQkJCQlidW5kbGUuc3RhcnQoKTsKLQkJCWVsc2UKLQkJCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBjb3VsZCBub3QgZmluZCBidW5kbGU6ICIgKyBidW5kbGVOYW1lKTsKLQkJfSBjYXRjaCAoQnVuZGxlRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCBiZWNhdXNlIG9mIGV4Y2VwdGlvbiBzdGFydGluZyBidW5kbGU6ICIgKyBidW5kbGVOYW1lICsgIiBleGNlcHRpb246ICIgKyBlKTsKLQkJfQotCi0JCWJ1bmRsZUdldFByZWZlcmVuY2UoYnVuZGxlTmFtZSwgSFRNTFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRSk7Ci0JCWJ1bmRsZUdldFByZWZlcmVuY2UoYnVuZGxlTmFtZSwgSFRNTFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRV9DT0RFKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVuZGxlR2V0UHJlZmVyZW5jZShTdHJpbmcgYnVuZGxlTmFtZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJU3RyaW5nIGRlZmF1bHRWYWx1ZSA9IExvbmcudG9TdHJpbmcoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOyAvLyByYW5kb20KLQkJCQkJCQkJCQkJCQkJCQkJCQkvLyBzdHJpbmcKLQotCQlTdHJpbmcgdmFsdWUgPSBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKS5nZXRTdHJpbmcoYnVuZGxlTmFtZSwgcHJlZktleSwgZGVmYXVsdFZhbHVlLCBudWxsKTsKLQkJYXNzZXJ0Tm90U2FtZSgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZS4gS2V5OiAiICsgcHJlZktleSwgZGVmYXVsdFZhbHVlLCB2YWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgZGVmYXVsdCB2YWx1ZXMgb2YgcHJlZmVyZW5jZXMuCi0JICogCi0JICogTk9URTogRXhwZWN0ZWQgZGVmYXVsdCB2YWx1ZXMgYXJlIGhhcmQtY29kZWQsIHNvIGlmIGRlZmF1bHQgdmFsdWVzIGRvCi0JICogZ2V0IGNoYW5nZWQsIGFzc2VydGlvbnMgbmVlZCB0byBiZSB1cGRhdGVkIGFzIHdlbGwKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2VzKCkgewotCQlJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gSFRNTFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQotCQlwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShzdG9yZSwgSFRNTFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRSwgQm9vbGVhbi50b1N0cmluZyh0cnVlKSk7Ci0JCXBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKHN0b3JlLCBIVE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFX0NPREUsICI8Iik7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKElQcmVmZXJlbmNlU3RvcmUgc3RvcmUsIFN0cmluZyBwcmVmS2V5LCBTdHJpbmcgZXhwZWN0ZWQpIHsKLQkJU3RyaW5nIGRlZmF1bHRWYWx1ZSA9IHN0b3JlLmdldERlZmF1bHRTdHJpbmcocHJlZktleSk7Ci0JCWFzc2VydEVxdWFscygiR2V0IGRlZmF1bHQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiICsgcHJlZktleSwgZXhwZWN0ZWQsIGRlZmF1bHRWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlcyBieSBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWUgdG8gYmUgYQotCSAqIGNlcnRhaW4gdmFsdWUsIHRoZW4gZ2V0dGluZyB0aGUgcHJlZmVyZW5jZSB2YWx1ZSB0byB2ZXJpZnkgaXQgd2FzIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luU2V0UHJlZmVyZW5jZXMoKSB7Ci0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBIVE1MVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotCi0JCXBsdWdpblNldFByZWZlcmVuY2VCb29sZWFuKHN0b3JlLCBIVE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFKTsKLQkJcGx1Z2luU2V0UHJlZmVyZW5jZVN0cmluZyhzdG9yZSwgSFRNTFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRV9DT0RFKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luU2V0UHJlZmVyZW5jZUJvb2xlYW4oSVByZWZlcmVuY2VTdG9yZSBzdG9yZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJYm9vbGVhbiBvcmlnaW5hbFZhbHVlID0gc3RvcmUuZ2V0Qm9vbGVhbihwcmVmS2V5KTsKLQkJYm9vbGVhbiBleHBlY3RlZFZhbHVlID0gIW9yaWdpbmFsVmFsdWU7Ci0JCXN0b3JlLnNldFZhbHVlKHByZWZLZXksIGV4cGVjdGVkVmFsdWUpOwotCQlib29sZWFuIGZvdW5kVmFsdWUgPSBzdG9yZS5nZXRCb29sZWFuKHByZWZLZXkpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5ICsgIiAgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFZhbHVlICsgIiBmb3VuZDogIiArIGZvdW5kVmFsdWUsIGV4cGVjdGVkVmFsdWUsIGZvdW5kVmFsdWUpOwotCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCXN0b3JlLnNldFZhbHVlKHByZWZLZXksIG9yaWdpbmFsVmFsdWUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlU3RyaW5nKElQcmVmZXJlbmNlU3RvcmUgc3RvcmUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCVN0cmluZyBvcmlnaW5hbFZhbHVlID0gc3RvcmUuZ2V0U3RyaW5nKHByZWZLZXkpOwotCQlTdHJpbmcgZXhwZWN0ZWRWYWx1ZSA9IExvbmcudG9TdHJpbmcoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOyAvLyByYW5kb20KLQkJCQkJCQkJCQkJCQkJCQkJCQkvLyBzdHJpbmcKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCVN0cmluZyBmb3VuZFZhbHVlID0gc3RvcmUuZ2V0U3RyaW5nKHByZWZLZXkpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5ICsgIiAgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFZhbHVlICsgIiBmb3VuZDogIiArIGZvdW5kVmFsdWUsIGV4cGVjdGVkVmFsdWUsIGZvdW5kVmFsdWUpOwotCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCXN0b3JlLnNldFZhbHVlKHByZWZLZXksIG9yaWdpbmFsVmFsdWUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9IVE1MVUlUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9IVE1MVUlUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM1MzY5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvSFRNTFVJVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMudmlld2VyLlRlc3RWaWV3ZXJDb25maWd1cmF0aW9uSFRNTDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLQotCi1wdWJsaWMgY2xhc3MgSFRNTFVJVGVzdFN1aXRlIGV4dGVuZHMganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IEhUTUxVSVRlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBIVE1MVUlUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJIVE1MIFVJIFRlc3RTdWl0ZSIpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVmVyaWZ5RWRpdG9yUGx1Z2luLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShIVE1MVUlQcmVmZXJlbmNlc1Rlc3QuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uSFRNTC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25IVE1MLmNsYXNzKSk7Ci0JCS8vCQlhZGRUZXN0KG5ldyBTU0VNb2RlbFRlc3RTdWl0ZSgpKTsKLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvSFRNTFVJVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9IVE1MVUlUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWNhZWMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9IVE1MVUlUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIEhUTUxVSVRlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgSFRNTFVJVGVzdHNQbHVnaW4gcGx1Z2luOwotCS8vUmVzb3VyY2UgYnVuZGxlLgotCXByaXZhdGUgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VCdW5kbGU7Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIEhUTUxVSVRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCQl0cnkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLlNTRUZvckhUTUxUZXN0c1BsdWdpblJlc291cmNlcyIpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24geCkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSFRNTFVJVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqIG9yICdrZXknIGlmIG5vdCBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IEhUTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRSZXNvdXJjZUJ1bmRsZSgpOwotCQl0cnkgewotCQkJcmV0dXJuIChidW5kbGUgIT0gbnVsbCkgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXk7Ci0JCX0KLQkJY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4ga2V5OwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJcmV0dXJuIHJlc291cmNlQnVuZGxlOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvTG9nZ2VyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllNDFiMjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL0xvZ2dlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBTbWFsbCBjb252ZW5pZW5jZSBjbGFzcyB0byBsb2cgbWVzc2FnZXMgdG8gcGx1Z2luJ3MgbG9nIGZpbGUgYW5kIGFsc28sIGlmIGRlc2lyZWQsCi0gKiB0aGUgY29uc29sZS4gVGhpcyBjbGFzcyBzaG91bGQgb25seSBiZSB1c2VkIGJ5IGNsYXNzZXMgaW4gdGhpcyBwbHVnaW4uIE90aGVyCi0gKiBwbHVnaW5zIHNob3VsZCBtYWtlIHRoZWlyIG93biBjb3B5LCB3aXRoIGFwcHJvcHJpYXRlIElELgotICovCi1wdWJsaWMgY2xhc3MgTG9nZ2VyIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQUNFRklMVEVSX0xPQ0FUSU9OID0gIi9kZWJ1Zy90cmFjZWZpbHRlciI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LID0gSVN0YXR1cy5PSzsgLy8gMAotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk8gPSBJU3RhdHVzLklORk87IC8vIDEKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HID0gSVN0YXR1cy5XQVJOSU5HOyAvLyAyCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1IgPSBJU3RhdHVzLkVSUk9SOyAvLyA0Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPS19ERUJVRyA9IDIwMCArIE9LOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk9fREVCVUcgPSAyMDAgKyBJTkZPOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkdfREVCVUcgPSAyMDAgKyBXQVJOSU5HOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0RFQlVHID0gMjAwICsgRVJST1I7Ci0KLQkvKioKLQkgKiBBZGRzIG1lc3NhZ2UgdG8gbG9nLgotCSAqIEBwYXJhbSBsZXZlbCBzZXZlcml0eSBsZXZlbCBvZiB0aGUgbWVzc2FnZSAoT0ssIElORk8sIFdBUk5JTkcsIEVSUk9SLCBPS19ERUJVRywgSU5GT19ERUJVRywgV0FSTklOR19ERUJVRywgRVJST1JfREVCVUcpCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBhZGQgdG8gdGhlIGxvZwotCSAqIEBwYXJhbSBleGNlcHRpb24gZXhjZXB0aW9uIHRocm93bgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGxldmVsID09IE9LX0RFQlVHIHx8IGxldmVsID09IElORk9fREVCVUcgfHwgbGV2ZWwgPT0gV0FSTklOR19ERUJVRyB8fCBsZXZlbCA9PSBFUlJPUl9ERUJVRykgewotCQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJCXJldHVybjsKLQkJfQotCi0JCWludCBzZXZlcml0eSA9IElTdGF0dXMuT0s7Ci0JCXN3aXRjaCAobGV2ZWwpIHsKLQkJCWNhc2UgSU5GT19ERUJVRyA6Ci0JCQljYXNlIElORk8gOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5JTkZPOwotCQkJCWJyZWFrOwotCQkJY2FzZSBXQVJOSU5HX0RFQlVHIDoKLQkJCWNhc2UgV0FSTklORyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLldBUk5JTkc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEVSUk9SX0RFQlVHIDoKLQkJCWNhc2UgRVJST1IgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5FUlJPUjsKLQkJfQotCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKHNldmVyaXR5LCBQTFVHSU5fSUQsIHNldmVyaXR5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQl9Ci0KLQkvKioKLQkgKiBQcmludHMgbWVzc2FnZSB0byBsb2cgaWYgY2F0ZWdvcnkgbWF0Y2hlcyAvZGVidWcvdHJhY2VmaWx0ZXIgb3B0aW9uLgotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gcHJpbnQKLQkgKiBAcGFyYW0gY2F0ZWdvcnkgY2F0ZWdvcnkgb2YgdGhlIG1lc3NhZ2UsIHRvIGJlIGNvbXBhcmVkIHdpdGggL2RlYnVnL3RyYWNlZmlsdGVyCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF90cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChpc1RyYWNpbmcoY2F0ZWdvcnkpKSB7Ci0JCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBQTFVHSU5fSUQsIElTdGF0dXMuT0ssIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybSBpcyBkZWJ1Z2dpbmcKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEZWJ1Z2dpbmcoKSB7Ci0JCXJldHVybiBQbGF0Zm9ybS5pbkRlYnVnTW9kZSgpOwotCX0KLQotCS8qKgotCSAqIERldGVybWluZXMgaWYgY3VycmVudGx5IHRyYWNpbmcgYSBjYXRlZ29yeQotCSAqIEBwYXJhbSBjYXRlZ29yeQotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0cmFjaW5nIGNhdGVnb3J5LCBmYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUcmFjaW5nKFN0cmluZyBjYXRlZ29yeSkgewotCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nIHRyYWNlRmlsdGVyID0gUGxhdGZvcm0uZ2V0RGVidWdPcHRpb24oUExVR0lOX0lEICsgVFJBQ0VGSUxURVJfTE9DQVRJT04pOwotCQlpZiAodHJhY2VGaWx0ZXIgIT0gbnVsbCkgewotCQkJU3RyaW5nVG9rZW5pemVyIHRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodHJhY2VGaWx0ZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKLQkJCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJU3RyaW5nIGNhdCA9IHRva2VuaXplci5uZXh0VG9rZW4oKS50cmltKCk7Ci0JCQkJaWYgKGNhdGVnb3J5LmVxdWFscyhjYXQpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIG51bGwpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uSFRNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uSFRNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzM3OGQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkhUTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgSmVucyBMdWtvd3NraS9Jbm5vb3ByYWN0IC0gaW5pdGlhbCByZW5hbWluZy9yZXN0cnVjdHVyaW5nCi0gKiAKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS52aWV3cy5jb250ZW50b3V0bGluZS5IVE1MQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnZpZXdzLnByb3BlcnRpZXMuWE1MUHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb247Ci0KLS8qKgotICogVGVzdHMgcmV0cmlldmluZyBlZGl0b3IgY29udHJpYnV0aW9ucyBmb3IgaHRtbCBjb250ZW50IHR5cGUKLSAqLwotcHVibGljIGNsYXNzIFRlc3RFZGl0b3JDb25maWd1cmF0aW9uSFRNTCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0U291cmNlVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLlNPVVJDRVZJRVdFUkNPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIHNvdXJjZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBzb3VyY2Ugdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwsIG8uZ2V0Q2xhc3MoKSwgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSFRNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRPdXRsaW5lVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLkNPTlRFTlRPVVRMSU5FQ09ORklHVVJBVElPTiwgQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gY29udGVudCBvdXRsaW5lIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MLCBvKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCwgby5nZXRDbGFzcygpLCBIVE1MQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24oKSB7Ci0JCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5QUk9QRVJUWVNIRUVUQ09ORklHVVJBVElPTiwgQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gcHJvcGVydHkgc2hlZXQgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBwcm9wZXJ0eSBzaGVldCBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MLCBvLmdldENsYXNzKCksIFhNTFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uLmNsYXNzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvVmVyaWZ5RWRpdG9yUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvVmVyaWZ5RWRpdG9yUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzYTBiYmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL1ZlcmlmeUVkaXRvclBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKLSAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMKLSAqIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZAotICogaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkuaW50ZXJuYWwuSFRNTFVJUGx1Z2luOwotCi0KLXB1YmxpYyBjbGFzcyBWZXJpZnlFZGl0b3JQbHVnaW4gZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luRXhpc3RzKCkgewotCQkvLyBUT0RPOiBzZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTgxNTI3Ci0JCWFzc2VydFRydWUodHJ1ZSk7Ci0JCVBsdWdpbiBwbHVnaW4gPSBudWxsOwotCQl0cnkgewotCQkJcGx1Z2luID0gSFRNTFVJUGx1Z2luLmdldEluc3RhbmNlKCk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlwbHVnaW4gPSBudWxsOwotCQl9Ci0JCWFzc2VydE5vdE51bGwoImVkaXRvciBwbHVnaW4gY291bGQgbm90IGJlIGluc3RhbnRpYXRlZCIsIHBsdWdpbik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMjYzZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzOCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLnZpZXdlcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUF1dG9FZGl0U3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0RG91YmxlQ2xpY2tTdHJhdGVneTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0SG92ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZW50QXNzaXN0YW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuZm9ybWF0dGVyLklDb250ZW50Rm9ybWF0dGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuaHlwZXJsaW5rLklIeXBlcmxpbmtEZXRlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmluZm9ybWF0aW9uLklJbmZvcm1hdGlvblByZXNlbnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJlY29uY2lsZXIuSVJlY29uY2lsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSUFubm90YXRpb25Ib3ZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklIVE1MUGFydGl0aW9uVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy5Mb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnN0eWxlLkxpbmVTdHlsZVByb3ZpZGVyOwotCi0vKioKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0gICAgCi0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MIGZDb25maWcgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBmRGlzcGxheUV4aXN0cyA9IHRydWU7Ci0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlciBmVmlld2VyID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCQotICAgIHB1YmxpYyBUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwoKSB7Ci0gICAgICAgIHN1cGVyKCJUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwiKTsKLSAgICB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCi0gICAgCXN1cGVyLnNldFVwKCk7Ci0JCWlmKCF0aGlzLmlzU2V0dXApewotCQkJc2V0VXBWaWV3ZXJDb25maWd1cmF0aW9uKCk7Ci0JCQl0aGlzLmlzU2V0dXAgPSB0cnVlOwotCQl9Ci0gICAgfQotCQotCXByaXZhdGUgdm9pZCBzZXRVcFZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0KLQkJaWYoRGlzcGxheS5nZXRDdXJyZW50KCkgIT0gbnVsbCkgewotCQkJCi0JCQlTaGVsbCBzaGVsbCA9IG51bGw7Ci0JCQlDb21wb3NpdGUgcGFyZW50ID0gbnVsbDsKLQkJCQotCQkJaWYoUGxhdGZvcm1VSS5pc1dvcmtiZW5jaFJ1bm5pbmcoKSkgewotCQkJCXNoZWxsID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpOwotCQkJfQotCQkJZWxzZSB7CQotCQkJCXNoZWxsID0gbmV3IFNoZWxsKERpc3BsYXkuZ2V0Q3VycmVudCgpKTsKLQkJCX0KLQkJCXBhcmVudCA9IG5ldyBDb21wb3NpdGUoc2hlbGwsIFNXVC5OT05FKTsKLQkJCQotCQkJLy8gZHVtbXkgdmlld2VyCi0JCQlmVmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5OT05FKTsKLQkJCWZDb25maWcgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSFRNTCgpOwotCQl9Ci0JCWVsc2UgewotCQkJZkRpc3BsYXlFeGlzdHMgPSBmYWxzZTsKLQkJCUxvZ2dlci5sb2coTG9nZ2VyLklORk8sICJSZW1lbWJlciwgdmlld2VyIGNvbmZpZ3VyYXRpb24gdGVzdHMgYXJlIG5vdCBydW4gYmVjYXVzZSB3b3JrYmVuY2ggaXMgbm90IG9wZW4gKG5vcm1hbCBvbiBidWlsZCBtYWNoaW5lKSIpOwotCQl9Ci0JfQotICAgIAotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QW5ub3RhdGlvbkhvdmVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJQW5ub3RhdGlvbkhvdmVyIGhvdmVyID0gZkNvbmZpZy5nZXRBbm5vdGF0aW9uSG92ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkFubm90YXRpb25Ib3ZlciBpcyBudWxsIiwgaG92ZXIpOwotICAgIH0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QXV0b0VkaXRTdHJhdGVnaWVzKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJQXV0b0VkaXRTdHJhdGVneVtdIHN0cmF0ZWdpZXMgPSBmQ29uZmlnLmdldEF1dG9FZGl0U3RyYXRlZ2llcyhmVmlld2VyLCBJSFRNTFBhcnRpdGlvblR5cGVzLkhUTUxfREVGQVVMVCk7Ci0JCWFzc2VydE5vdE51bGwoc3RyYXRlZ2llcyk7Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBhdXRvIGVkaXQgc3RyYXRlZ2llcyIsIHN0cmF0ZWdpZXMubGVuZ3RoPjApOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcygpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJU3RyaW5nW10gY29uZmlndXJlZENvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbChjb25maWd1cmVkQ29udGVudFR5cGVzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgY29udGVudCB0eXBlcyIsIGNvbmZpZ3VyZWRDb250ZW50VHlwZXMubGVuZ3RoID4gMSk7Ci0JfQotCQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudEFzc2lzdGFudCgpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUNvbnRlbnRBc3Npc3RhbnQgY2EgPSBmQ29uZmlnLmdldENvbnRlbnRBc3Npc3RhbnQoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGlzIG5vIGNvbnRlbnQgYXNzaXN0YW50IiwgY2EpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudEZvcm1hdHRlcigpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUNvbnRlbnRGb3JtYXR0ZXIgY2YgPSBmQ29uZmlnLmdldENvbnRlbnRGb3JtYXR0ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGlzIG5vIGNvbnRlbnQgZm9ybWF0dGVyIiwgY2YpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RG91YmxlQ2xpY2tTdHJhdGVneSgpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJSVRleHREb3VibGVDbGlja1N0cmF0ZWd5IHN0cmF0ZWd5ID0gZkNvbmZpZy5nZXREb3VibGVDbGlja1N0cmF0ZWd5KGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZihzdHJhdGVneSAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGRvdWJsZSBjbGljayBzdHJhdGVnaWVzIiwgZmFsc2UpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0SHlwZXJsaW5rRGV0ZWN0b3JzKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJSHlwZXJsaW5rRGV0ZWN0b3JbXSBkZXRlY3RvcnMgPSBmQ29uZmlnLmdldEh5cGVybGlua0RldGVjdG9ycyhmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgidGhlcmUgYXJlIG5vIGh5cGVybGluayBkZXRlY3RvcnMiLCBkZXRlY3RvcnMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gaHlwZXJsaW5rIGRldGVjdG9ycyIsIGRldGVjdG9ycy5sZW5ndGggPiAxKTsKLQl9Ci0JCi0gICAgcHVibGljIHZvaWQgdGVzdEdldEluZGVudFByZWZpeGVzKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCVN0cmluZyBwcmVmaXhlc1tdID0gZkNvbmZpZy5nZXRJbmRlbnRQcmVmaXhlcyhmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYocHJlZml4ZXMgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBpbmRlbnQgcHJlZml4ZXMiLCBmYWxzZSk7Ci0JfQotICAgIAotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLSAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0SW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcigpIHsKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvciBpbmZvQ3JlYXRvciA9IGZDb25maWcuZ2V0SW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvciBpcyBudWxsIiwgaW5mb0NyZWF0b3IpOwotICAgIH0KLQkKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldEluZm9ybWF0aW9uUHJlc2VudGVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJSW5mb3JtYXRpb25QcmVzZW50ZXIgcHJlc2VudGVyID0gZkNvbmZpZy5nZXRJbmZvcm1hdGlvblByZXNlbnRlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiSW5mb3JtYXRpb25QcmVzZW50ZXIgaXMgbnVsbCIsIHByZXNlbnRlcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRMaW5lU3R5bGVQcm92aWRlcnMoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJTGluZVN0eWxlUHJvdmlkZXIgcHJvdmlkZXJzW10gPSBmQ29uZmlnLmdldExpbmVTdHlsZVByb3ZpZGVycyhmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYocHJvdmlkZXJzICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgbGluZSBzdHlsZSBwcm92aWRlcnMiLCBmYWxzZSk7Ci0JfQotCQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UmVjb25jaWxlcigpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSVJlY29uY2lsZXIgciA9IGZDb25maWcuZ2V0UmVjb25jaWxlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiUmVjb25jaWxlciBpcyBudWxsIiwgcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRUZXh0SG92ZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlTdHJpbmdbXSBob3ZlclBhcnRpdGlvbnMgPSBuZXcgU3RyaW5nW117SUhUTUxQYXJ0aXRpb25UeXBlcy5IVE1MX0RFRkFVTFQsIElIVE1MUGFydGl0aW9uVHlwZXMuU0NSSVBUfTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBob3ZlclBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCUlUZXh0SG92ZXIgaG92ZXIgPSBmQ29uZmlnLmdldFRleHRIb3ZlcihmVmlld2VyLCBob3ZlclBhcnRpdGlvbnNbaV0sIFNXVC5OT05FKTsKLQkJCWFzc2VydE5vdE51bGwoImhvdmVyIHdhcyBudWxsIGZvciBwYXJ0aXRpb246ICIgKyBob3ZlclBhcnRpdGlvbnNbaV0sIGhvdmVyKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy92aWV3ZXIvVmlld2VyVGVzdEhUTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy92aWV3ZXIvVmlld2VyVGVzdEhUTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhiMDRmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvdmlld2VyL1ZpZXdlclRlc3RIVE1MLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy52aWV3ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkpGYWNlUmVzb3VyY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkJ1c3lJbmRpY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JTWVtZW50bzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JVmlld1NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5WaWV3UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JbmRleGVkUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLQotcHVibGljIGNsYXNzIFZpZXdlclRlc3RIVE1MIGV4dGVuZHMgVmlld1BhcnQgewotCXByaXZhdGUgZmluYWwgU3RyaW5nIFNTRV9FRElUT1JfRk9OVCA9ICJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRleHRmb250IjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX1ZJRVdFUl9DT05URU5UUyA9ICI8IURPQ1RZUEUgSFRNTCBQVUJMSUMgXCItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTlwiPlxuPEhUTUw+XG4JPEhFQUQ+XG4JCTxNRVRBIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTFcIj5cbgkJPFRJVExFPnBsYWNlIHRpdGxlIGhlcmU8L1RJVExFPlxuCTwvSEVBRD5cbgk8Qk9EWT5cbgkJcGxhY2UgY29udGVudCBoZXJlCVxuPHNjcmlwdD5cblwidGV4dFwiO1xuPC9TQ1JJUFQ+XG48L0JPRFk+XG48L0hUTUw+IjsKLQotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXIgZlNvdXJjZVZpZXdlciA9IG51bGw7Ci0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb24gZkNvbmZpZyA9IG51bGw7Ci0JcHJpdmF0ZSBJQ29udGVudE91dGxpbmVQYWdlIGZDb250ZW50T3V0bGluZVBhZ2UgPSBudWxsOwotCXByaXZhdGUgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lciA9IG51bGw7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2aWV3ZXIncyBoaWdobGlnaHRpbmcgdGV4dCByYW5nZSB0byB0aGUgdGV4dCByYW5nZSBpbmRpY2F0ZWQKLQkgKiBieSB0aGUgc2VsZWN0ZWQgTm9kZXMuCi0JICovCi0JcHJvdGVjdGVkIGNsYXNzIE5vZGVSYW5nZVNlbGVjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7Ci0JCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JCQlpZiAoIWV2ZW50LmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSAmJiBldmVudC5nZXRTZWxlY3Rpb24oKSBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBldmVudC5nZXRTZWxlY3Rpb24oKTsKLQkJCQlJbmRleGVkUmVnaW9uIHN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCQkJSW5kZXhlZFJlZ2lvbiBlbmROb2RlID0gKEluZGV4ZWRSZWdpb24pIHNlbGVjdGlvbi50b0FycmF5KClbc2VsZWN0aW9uLnNpemUoKSAtIDFdOwotCi0JCQkJaWYgKHN0YXJ0Tm9kZSBpbnN0YW5jZW9mIEF0dHIpCi0JCQkJCXN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIHN0YXJ0Tm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0JCQkJaWYgKGVuZE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQllbmROb2RlID0gKEluZGV4ZWRSZWdpb24pICgoQXR0cikgZW5kTm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0KLQkJCQlpbnQgc3RhcnQgPSBzdGFydE5vZGUuZ2V0U3RhcnRPZmZzZXQoKTsKLQkJCQlpbnQgZW5kID0gZW5kTm9kZS5nZXRFbmRPZmZzZXQoKTsKLQotCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJZlNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0JCQkJZlNvdXJjZVZpZXdlci5zZXRTZWxlY3RlZFJhbmdlKHN0YXJ0LCAwKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgY2xhc3MgTnVtYmVySW5wdXREaWFsb2cgZXh0ZW5kcyBEaWFsb2cgewotCQlwdWJsaWMgTnVtYmVySW5wdXREaWFsb2coU2hlbGwgc2hlbGwpIHsKLQkJCXN1cGVyKHNoZWxsKTsKLQkJfQotCi0JCXB1YmxpYyBUZXh0IHN0YXJ0OwotCQlpbnQgc3RhcnRWYWx1ZTsKLQkJcHVibGljIFRleHQgbGVuZ3RoOwotCQlpbnQgbGVuZ3RoVmFsdWU7Ci0KLQkJcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYShDb21wb3NpdGUgcGFyZW50KSB7Ci0JCQlDb21wb3NpdGUgY29tcG9zaXRlID0gKENvbXBvc2l0ZSkgc3VwZXIuY3JlYXRlRGlhbG9nQXJlYShwYXJlbnQpOwotCQkJQ29tcG9zaXRlIGNvbnRhaW5lciA9IG5ldyBDb21wb3NpdGUoY29tcG9zaXRlLCBTV1QuTlVMTCk7Ci0JCQljb250YWluZXIuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0JCQljb250YWluZXIuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDIsIHRydWUpKTsKLQkJCXNldFNoZWxsU3R5bGUoZ2V0U2hlbGwoKS5nZXRTdHlsZSgpIHwgU1dULlJFU0laRSk7Ci0KLQkJCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKGNvbnRhaW5lciwgU1dULk5VTEwpOwotCQkJbGFiZWwuc2V0VGV4dCgiU3RhcnQiKTsKLQkJCWxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQlsYWJlbCA9IG5ldyBMYWJlbChjb250YWluZXIsIFNXVC5OVUxMKTsKLQkJCWxhYmVsLnNldFRleHQoIkxlbmd0aCIpOwotCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCXN0YXJ0ID0gbmV3IFRleHQoY29udGFpbmVyLCBTV1QuQk9SREVSKTsKLQkJCXN0YXJ0VmFsdWUgPSBmU291cmNlVmlld2VyLmdldFZpc2libGVSZWdpb24oKS5nZXRPZmZzZXQoKTsKLQkJCXN0YXJ0LnNldFRleHQoIiIgKyBzdGFydFZhbHVlKTsKLQkJCXN0YXJ0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQlsZW5ndGggPSBuZXcgVGV4dChjb250YWluZXIsIFNXVC5CT1JERVIpOwotCQkJbGVuZ3RoVmFsdWUgPSBmU291cmNlVmlld2VyLmdldFZpc2libGVSZWdpb24oKS5nZXRMZW5ndGgoKTsKLQkJCWxlbmd0aC5zZXRUZXh0KCIiICsgbGVuZ3RoVmFsdWUpOwotCQkJbGVuZ3RoLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQkvLwkJCXN0YXJ0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKLQkJCS8vCQkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJLy8JCQkJCWlmIChlLndpZGdldCA9PSBzdGFydCkgewotCQkJLy8JCQkJCQl0cnkgewotCQkJLy8JCQkJCQkJc3RhcnRWYWx1ZSA9IEludGVnZXIuZGVjb2RlKHN0YXJ0LmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCS8vCQkJCQkJfQotCQkJLy8JCQkJCQljYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkvLwkJCQkJCQlzdGFydFZhbHVlID0gMDsKLQkJCS8vCQkJCQkJfQotCQkJLy8JCQkJCX0KLQkJCS8vCQkJCX0KLQkJCS8vCQkJfSk7Ci0JCQkvLwkJCWxlbmd0aC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7Ci0JCQkvLwkJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKLQkJCS8vCQkJCQlpZiAoZS53aWRnZXQgPT0gbGVuZ3RoKSB7Ci0JCQkvLwkJCQkJCXRyeSB7Ci0JCQkvLwkJCQkJCQlsZW5ndGhWYWx1ZSA9IEludGVnZXIuZGVjb2RlKGxlbmd0aC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQkvLwkJCQkJCX0KLQkJCS8vCQkJCQkJY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlMikgewotCQkJLy8JCQkJCQkJbGVuZ3RoVmFsdWUgPSAwOwotCQkJLy8JCQkJCQl9Ci0JCQkvLwkJCQkJfQotCQkJLy8JCQkJfQotCQkJLy8JCQl9KTsKLQotCQkJcmV0dXJuIGNvbXBvc2l0ZTsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2cjb2tQcmVzc2VkKCkKLQkJICovCi0JCXByb3RlY3RlZCB2b2lkIG9rUHJlc3NlZCgpIHsKLQkJCXRyeSB7Ci0JCQkJc3RhcnRWYWx1ZSA9IEludGVnZXIuZGVjb2RlKHN0YXJ0LmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCX0KLQkJCWNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCQlzdGFydFZhbHVlID0gMDsKLQkJCX0KLQkJCXRyeSB7Ci0JCQkJbGVuZ3RoVmFsdWUgPSBJbnRlZ2VyLmRlY29kZShsZW5ndGguZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJfQotCQkJY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlMikgewotCQkJCWxlbmd0aFZhbHVlID0gMDsKLQkJCX0KLQkJCXN1cGVyLm9rUHJlc3NlZCgpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgYWRkQWN0aW9ucyhJQ29udHJpYnV0aW9uTWFuYWdlciBtZ3IpIHsKLQkJaWYgKG1nciAhPSBudWxsKSB7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIk5ldyBIVE1MIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlCdXN5SW5kaWNhdG9yLnNob3dXaGlsZShnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCksIG5ldyBSdW5uYWJsZSgpIHsKLQkJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJCQlzZXR1cFZpZXdlckZvck5ldygpOwotCQkJCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUodHJ1ZSk7Ci0JCQkJCQl9Ci0JCQkJCX0pOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgU2VwYXJhdG9yKCkpOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJDaGFuZ2UgVmlzaWJpbGl0eSI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJTnVtYmVySW5wdXREaWFsb2cgZGxnID0gbmV3IE51bWJlcklucHV0RGlhbG9nKGZTb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpLmdldFNoZWxsKCkpOwotCQkJCQlpbnQgcHJvY2VlZCA9IGRsZy5vcGVuKCk7Ci0JCQkJCWlmIChwcm9jZWVkID09IFdpbmRvdy5DQU5DRUwpCi0JCQkJCQlyZXR1cm47Ci0JCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0VmlzaWJsZVJlZ2lvbihkbGcuc3RhcnRWYWx1ZSwgZGxnLmxlbmd0aFZhbHVlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiU2hvdyBBbGwiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBTZXBhcmF0b3IoKSk7Ci0JCQkvLyBubyBsb25nZXIgYWJsZSB0byBzZXQgaW5wdXQgdG8gTlVMTAotCQkJLy8JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkvLwkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkvLwkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkvLwkJCQl9Ci0JCQkvLwotCQkJLy8JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCS8vCQkJCQlyZXR1cm4gIlNldCBJbnB1dCB0byBOVUxMIjsKLQkJCS8vCQkJCX0KLQkJCS8vCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCS8vCQkJCQlzdXBlci5ydW4oKTsKLQkJCS8vCQkJCQl2aWV3ZXIuc2V0SW5wdXQobnVsbCk7Ci0JCQkvLwkJCQl9Ci0JCQkvLwkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJUYWtlIElucHV0IGZyb20gQWN0aXZlIEVkaXRvciI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJSVRleHRFZGl0b3IgdGV4dEVkaXRvciA9IGdldEFjdGl2ZUVkaXRvcigpOwotCQkJCQlpZiAodGV4dEVkaXRvciAhPSBudWxsKSB7Ci0JCQkJCQlzZXR1cFZpZXdlckZvckVkaXRvcih0ZXh0RWRpdG9yKTsKLQkJCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUodHJ1ZSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiVGFrZSBJbnB1dCBhbmQgRm9sbG93IFNlbGVjdGlvbiI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJZm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUodHJ1ZSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlRha2UgSW5wdXQgYW5kIEZvbGxvdyBTZWxlY3Rpb24gQXMgUmVhZE9ubHkiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCWZvbGxvd1NlbGVjdGlvbigpOwotCQkJCQlmU291cmNlVmlld2VyLnNldEVkaXRhYmxlKGZhbHNlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiU3RvcCBGb2xsb3dpbmcgU2VsZWN0aW9uIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlzdG9wRm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJfQotCQkJfSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I2NyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUlDb250cmlidXRpb25NYW5hZ2VyIG1nciA9IGdldFZpZXdTaXRlKCkuZ2V0QWN0aW9uQmFycygpLmdldE1lbnVNYW5hZ2VyKCk7Ci0JCWFkZEFjdGlvbnMobWdyKTsKLQotCQkvLyBjcmVhdGUgc291cmNlIHZpZXdlciAmIGl0cyBjb250ZW50IHR5cGUtc3BlY2lmaWMgdmlld2VyCi0JCS8vIGNvbmZpZ3VyYXRpb24KLQkJZlNvdXJjZVZpZXdlciA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlcihwYXJlbnQsIG51bGwsIG51bGwsIGZhbHNlLCBTV1QuTk9ORSk7Ci0JCWZDb25maWcgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSFRNTCgpOwotCi0JCS8vIHNldCB1cCB0aGUgdmlld2VyIHdpdGggYSBkb2N1bWVudCAmIHZpZXdlciBjb25maWcKLQkJc2V0dXBWaWV3ZXJGb3JOZXcoKTsKLQotCQlzZXR1cFZpZXdlclByZWZlcmVuY2VzKCk7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCNkaXNwb3NlKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCQlzdG9wRm9sbG93U2VsZWN0aW9uKCk7Ci0JCWZTb3VyY2VWaWV3ZXIudW5jb25maWd1cmUoKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I3NldEZvY3VzKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKLQkJaWYgKGZTb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpICE9IG51bGwgJiYgIWZTb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkKLQkJCWZTb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpLnNldEZvY3VzKCk7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JVmlld1BhcnQjaW5pdChJVmlld1NpdGUsIElNZW1lbnRvKQotCSAqLwotCXB1YmxpYyB2b2lkIGluaXQoSVZpZXdTaXRlIHNpdGUsIElNZW1lbnRvIG1lbWVudG8pIHRocm93cyBQYXJ0SW5pdEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLmluaXQoc2l0ZSwgbWVtZW50byk7Ci0JfQotCi0JLyoqCi0JICogU2V0IHVwIHNvdXJjZSB2aWV3ZXIgd2l0aCBhbnkgYWRkaXRpb25hbCBwcmVmZXJlbmNlcyBpdCBzaG91bGQgaGF2ZSBFeDoKLQkgKiBmb250LCB0YWIgd2lkdGgKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJQcmVmZXJlbmNlcygpIHsKLQkJZlNvdXJjZVZpZXdlci5nZXRUZXh0V2lkZ2V0KCkuc2V0Rm9udChKRmFjZVJlc291cmNlcy5nZXRGb250KFNTRV9FRElUT1JfRk9OVCkpOwotCX0KLQotCS8qKgotCSAqIFNldCB1cCBzb3VyY2Ugdmlld2VyIHdpdGggYSBuZXcgZG9jdW1lbnQgJiBjb25maWd1cmUgaXQKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJGb3JOZXcoKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsgLy8gaWYgd2FzIGZvbGxvd2luZyBzZWxlY3Rpb24sIHN0b3AKLQotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlEb2N1bWVudCBkb2MgPSBtb2RlbE1hbmFnZXIuY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCk7Ci0JCWRvYy5zZXQoREVGQVVMVF9WSUVXRVJfQ09OVEVOVFMpOwotCi0JCWZTb3VyY2VWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jKTsKLQkJLy8gbmVlZCB0byByZWNvbmZpZ3VyZSBhZnRlciBzZXQgZG9jdW1lbnQganVzdCBzbyBoaWdobGlnaHRlciB3b3JrcwotCQlmU291cmNlVmlld2VyLmNvbmZpZ3VyZShmQ29uZmlnKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGFjdGl2ZSB0ZXh0IGVkaXRvciBpZiBwb3NzaWJsZQotCSAqIAotCSAqIEByZXR1cm4gSVRleHRFZGl0b3IKLQkgKi8KLQlwcml2YXRlIElUZXh0RWRpdG9yIGdldEFjdGl2ZUVkaXRvcigpIHsKLQkJSVRleHRFZGl0b3IgZWRpdG9yID0gbnVsbDsKLQkJSUVkaXRvclBhcnQgZWRpdG9yUGFydCA9IGdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCWlmIChlZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVRleHRFZGl0b3IpCi0JCQllZGl0b3IgPSAoSVRleHRFZGl0b3IpIGVkaXRvclBhcnQ7Ci0JCWlmIChlZGl0b3IgPT0gbnVsbCAmJiBlZGl0b3JQYXJ0ICE9IG51bGwpCi0JCQllZGl0b3IgPSAoSVRleHRFZGl0b3IpIGVkaXRvclBhcnQuZ2V0QWRhcHRlcihJVGV4dEVkaXRvci5jbGFzcyk7Ci0JCXJldHVybiBlZGl0b3I7Ci0JfQotCi0JLyoqCi0JICogU2V0cyB1cCB0aGUgdmlld2VyIHdpdGggdGhlIHNhbWUgZG9jdW1lbnQvaW5wdXQgYXMgdGhlIGdpdmVuIGVkaXRvcgotCSAqIAotCSAqIEBwYXJhbSBJVGV4dEVkaXRvcgotCSAqICAgICAgICAgICAgZWRpdG9yIC0gdGhlIGVkaXRvciB0byB1c2UgKmNhbm5vdCB0byBiZSBudWxsKgotCSAqLwotCXByaXZhdGUgdm9pZCBzZXR1cFZpZXdlckZvckVkaXRvcihJVGV4dEVkaXRvciBlZGl0b3IpIHsKLQkJc3RvcEZvbGxvd1NlbGVjdGlvbigpOyAvLyBpZiB3YXMgZm9sbG93aW5nIHNlbGVjdGlvbiwgc3RvcAotCQlJRG9jdW1lbnQgZG9jID0gZWRpdG9yLmdldERvY3VtZW50UHJvdmlkZXIoKS5nZXREb2N1bWVudChlZGl0b3IuZ2V0RWRpdG9ySW5wdXQoKSk7Ci0JCWZTb3VyY2VWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jKTsKLQotCQkvLyBuZWVkIHRvIHJlY29uZmlndXJlIGFmdGVyIHNldCBkb2N1bWVudCBqdXN0IHNvIGhpZ2hsaWdodGVyIHdvcmtzCi0JCWZTb3VyY2VWaWV3ZXIuY29uZmlndXJlKG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MKCkpOwotCX0KLQotCS8qKgotCSAqIEhvb2tzIHVwIHRoZSB2aWV3ZXIgdG8gZm9sbG93IHRoZSBzZWxlY3Rpb24gbWFkZSBpbiB0aGUgYWN0aXZlIGVkaXRvcgotCSAqLwotCXByaXZhdGUgdm9pZCBmb2xsb3dTZWxlY3Rpb24oKSB7Ci0JCUlUZXh0RWRpdG9yIGVkaXRvciA9IGdldEFjdGl2ZUVkaXRvcigpOwotCQlpZiAoZWRpdG9yICE9IG51bGwpIHsKLQkJCXNldHVwVmlld2VyRm9yRWRpdG9yKGVkaXRvcik7Ci0JCQlpZiAoZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIgPT0gbnVsbCkKLQkJCQlmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lciA9IG5ldyBOb2RlUmFuZ2VTZWxlY3Rpb25MaXN0ZW5lcigpOwotCi0JCQlmQ29udGVudE91dGxpbmVQYWdlID0gKChJQ29udGVudE91dGxpbmVQYWdlKSBlZGl0b3IuZ2V0QWRhcHRlcihJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSk7Ci0JCQlpZiAoZkNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7Ci0JCQkJZkNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIpOwotCi0JCQkJaWYgKCFmQ29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSAmJiBmQ29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQotCQkJCQlPYmplY3RbXSBub2RlcyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpLnRvQXJyYXkoKTsKLQkJCQkJSW5kZXhlZFJlZ2lvbiBzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgbm9kZXNbMF07Ci0JCQkJCUluZGV4ZWRSZWdpb24gZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXTsKLQotCQkJCQlpZiAoc3RhcnROb2RlIGluc3RhbmNlb2YgQXR0cikKLQkJCQkJCXN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIHN0YXJ0Tm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0JCQkJCWlmIChlbmROb2RlIGluc3RhbmNlb2YgQXR0cikKLQkJCQkJCWVuZE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgKChBdHRyKSBlbmROb2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQotCQkJCQlpbnQgc3RhcnQgPSBzdGFydE5vZGUuZ2V0U3RhcnRPZmZzZXQoKTsKLQkJCQkJaW50IGVuZCA9IGVuZE5vZGUuZ2V0RW5kT2Zmc2V0KCk7Ci0KLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0U2VsZWN0ZWRSYW5nZShzdGFydCwgMCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogQ2Vhc2UgZm9sbG93aW5nIHRoZSBzZWxlY3Rpb24gbWFkZSBpbiB0aGUgZWRpdG9yCi0JICovCi0JcHJpdmF0ZSB2b2lkIHN0b3BGb2xsb3dTZWxlY3Rpb24oKSB7Ci0JCWlmIChmQ29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKLQkJCWZDb250ZW50T3V0bGluZVBhZ2UucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyKTsKLQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQlmQ29udGVudE91dGxpbmVQYWdlID0gbnVsbDsKLQkJfQotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxZTFmM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QKLQluYW1lPSJ0ZXN0c3VpdGUiCi0JZGVmYXVsdD0icnVuIgotCWJhc2VkaXI9Ii4iPgotCTwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0JPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KLQk8IS0tIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIke2Jhc2VkaXJ9XC4uXC4uIiAvPiAtLT4KLQotCTxlY2hvIG1lc3NhZ2U9ImJhc2VkaXIgJHtiYXNlZGlyfSIgLz4KLQk8ZWNobyBtZXNzYWdlPSJlY2xpcHNlIHBsYWNlICR7ZWNsaXBzZS1ob21lfSIgLz4KLQotCTwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBwbHVnaW4tbmFtZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLQk8cHJvcGVydHkKLQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cyIgLz4KLQk8cHJvcGVydHkKLQkJbmFtZT0ibGlicmFyeS1maWxlIgotCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLQk8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotCTwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotCTx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0JCTx0c3RhbXAgLz4KLQkJPGRlbGV0ZT4KLQkJCTxmaWxlc2V0Ci0JCQkJZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0JCQkJaW5jbHVkZXM9Im9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLip4bWwiIC8+Ci0JCTwvZGVsZXRlPgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLQk8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQkJPHByb3BlcnR5Ci0JCQluYW1lPSJ3c3QtZm9sZGVyIgotCQkJdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93c3RfZm9sZGVyIiAvPgotCQk8ZGVsZXRlCi0JCQlkaXI9IiR7d3N0LWZvbGRlcn0iCi0JCQlxdWlldD0idHJ1ZSIgLz4KLQkJPGFudAotCQkJdGFyZ2V0PSJ1aS10ZXN0IgotCQkJYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotCQkJZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iZGF0YS1kaXIiCi0JCQkJdmFsdWU9IiR7d3N0LWZvbGRlcn0iIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJCQl2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJjbGFzc25hbWUiCi0JCQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLkhUTUxVSVRlc3RTdWl0ZSIgLz4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9InBsdWdpbi1wYXRoIgotCQkJCXZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLQk8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0JPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotCTx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0JCTwhLS08ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4tLT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLQk8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0JPHRhcmdldAotCQluYW1lPSJydW4iCi0JCWRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0JCTxhbnQKLQkJCXRhcmdldD0iY29sbGVjdCIKLQkJCWFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLQkJCWRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9ImluY2x1ZGVzIgotCQkJCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy4qeG1sIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0ib3V0cHV0LWZpbGUiCi0JCQkJdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLQkJPC9hbnQ+Ci0JCTwhLS0JCTxlbWFpbFJlc3VsdHMgcmVzdWx0c0ZpbGU9IiR7YnVpbGQtcmVzdWx0cy1ob21lfS8ke3BsdWdpbi1uYW1lfS54bWwiIGFkZHJlc3NsaXN0PSJkYXZpZF93aWxsaWFtc0B1cy5pYm0uY29tIiAvPiAtLT4KLQk8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiMDEwNTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy8iLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RkMzcwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi1zc2Vtb2RlbHRlc3RzLmphcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDczZmY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPjwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFlNzk0NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotI1dlZCBKYW4gMTIgMTY6NDg6NTUgRVNUIDIwMDUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9YWJvcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3Nzc5ZGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jRnJpIE1heSAyNyAyMzo0MDo1NSBFRFQgMjAwNQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTNjZjdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6IFRlc3RzIFBsdWctaW4KLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cwotQnVuZGxlLVZlcnNpb246IDEuMC4wCi1CdW5kbGUtQ2xhc3NQYXRoOiBzc2Vtb2RlbHRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLlNTRU1vZGVsVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmFkYXB0ZG9tLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5kb2N1bWVudCwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5leGFtcGxlcywKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMubGlmZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMudGhyZWFkaW5nCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmp1bml0LAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUKLUVjbGlwc2UtQXV0b1N0YXJ0OiB0cnVlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjZiOTZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci08Ym9keSBsYW5nPSJFTi1VUyI+Ci08aDI+QWJvdXQgVGhpcyBDb250ZW50PC9oMj4KLSAKLTxwPkZlYnJ1YXJ5IDI0LCAyMDA1PC9wPgkKLTxoMz5MaWNlbnNlPC9oMz4KLQotPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluICgmcXVvdDtDb250ZW50JnF1b3Q7KS4gIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQotRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KLQotPHA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCZxdW90O1JlZGlzdHJpYnV0b3ImcXVvdDspIGFuZCBkaWZmZXJlbnQgdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5Ci1hcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuICBDaGVjayB0aGUgUmVkaXN0cmlidXRvcidzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gIElmIG5vIHN1Y2ggbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuICBVbmxlc3Mgb3RoZXJ3aXNlCi1pbmRpY2F0ZWQgYmVsb3csIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudC48L3A+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTE5MzczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgc3NlbW9kZWx0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLXNvdXJjZS5zc2Vtb2RlbHRlc3RzLmphciA9IHNyYy8KLW91dHB1dC5zc2Vtb2RlbHRlc3RzLmphciA9IGJpbi8KLXNyYy5pbmNsdWRlcyA9IHBsdWdpbi54bWwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL0V4aXN0ZW5jZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL0V4aXN0ZW5jZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE5Y2NkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9FeGlzdGVuY2VUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0czsKLQotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLlNTRUNvcmVQbHVnaW47Ci0KLQotcHVibGljIGNsYXNzIEV4aXN0ZW5jZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luRXhpc3RzKCl7Ci0JCWFzc2VydE5vdE51bGwoU1NFQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL0xvZ2dlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyZDZlZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBTbWFsbCBjb252ZW5pZW5jZSBjbGFzcyB0byBsb2cgbWVzc2FnZXMgdG8gcGx1Z2luJ3MgbG9nIGZpbGUgYW5kIGFsc28sIGlmIGRlc2lyZWQsCi0gKiB0aGUgY29uc29sZS4gVGhpcyBjbGFzcyBzaG91bGQgb25seSBiZSB1c2VkIGJ5IGNsYXNzZXMgaW4gdGhpcyBwbHVnaW4uIE90aGVyCi0gKiBwbHVnaW5zIHNob3VsZCBtYWtlIHRoZWlyIG93biBjb3B5LCB3aXRoIGFwcHJvcHJpYXRlIElELgotICovCi1wdWJsaWMgY2xhc3MgTG9nZ2VyIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cyI7IC8vJE5PTi1OTFMtMSQKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFJBQ0VGSUxURVJfTE9DQVRJT04gPSAiL2RlYnVnL3RyYWNlZmlsdGVyIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0sgPSBJU3RhdHVzLk9LOyAvLyAwCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GTyA9IElTdGF0dXMuSU5GTzsgLy8gMQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkcgPSBJU3RhdHVzLldBUk5JTkc7IC8vIDIKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUiA9IElTdGF0dXMuRVJST1I7IC8vIDQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LX0RFQlVHID0gMjAwICsgT0s7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GT19ERUJVRyA9IDIwMCArIElORk87Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0FSTklOR19ERUJVRyA9IDIwMCArIFdBUk5JTkc7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfREVCVUcgPSAyMDAgKyBFUlJPUjsKLQotCS8qKgotCSAqIEFkZHMgbWVzc2FnZSB0byBsb2cuCi0JICogQHBhcmFtIGxldmVsIHNldmVyaXR5IGxldmVsIG9mIHRoZSBtZXNzYWdlIChPSywgSU5GTywgV0FSTklORywgRVJST1IsIE9LX0RFQlVHLCBJTkZPX0RFQlVHLCBXQVJOSU5HX0RFQlVHLCBFUlJPUl9ERUJVRykKLQkgKiBAcGFyYW0gbWVzc2FnZSB0ZXh0IHRvIGFkZCB0byB0aGUgbG9nCi0JICogQHBhcmFtIGV4Y2VwdGlvbiBleGNlcHRpb24gdGhyb3duCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF9sb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAobGV2ZWwgPT0gT0tfREVCVUcgfHwgbGV2ZWwgPT0gSU5GT19ERUJVRyB8fCBsZXZlbCA9PSBXQVJOSU5HX0RFQlVHIHx8IGxldmVsID09IEVSUk9SX0RFQlVHKSB7Ci0JCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQkJcmV0dXJuOwotCQl9Ci0KLQkJaW50IHNldmVyaXR5ID0gSVN0YXR1cy5PSzsKLQkJc3dpdGNoIChsZXZlbCkgewotCQkJY2FzZSBJTkZPX0RFQlVHIDoKLQkJCWNhc2UgSU5GTyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLklORk87Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFdBUk5JTkdfREVCVUcgOgotCQkJY2FzZSBXQVJOSU5HIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuV0FSTklORzsKLQkJCQlicmVhazsKLQkJCWNhc2UgRVJST1JfREVCVUcgOgotCQkJY2FzZSBFUlJPUiA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLkVSUk9SOwotCQl9Ci0JCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoc2V2ZXJpdHksIFBMVUdJTl9JRCwgc2V2ZXJpdHksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJaWYgKGJ1bmRsZSAhPSBudWxsKSAKLQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCX0KLQotCS8qKgotCSAqIFByaW50cyBtZXNzYWdlIHRvIGxvZyBpZiBjYXRlZ29yeSBtYXRjaGVzIC9kZWJ1Zy90cmFjZWZpbHRlciBvcHRpb24uCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBwcmludAotCSAqIEBwYXJhbSBjYXRlZ29yeSBjYXRlZ29yeSBvZiB0aGUgbWVzc2FnZSwgdG8gYmUgY29tcGFyZWQgd2l0aCAvZGVidWcvdHJhY2VmaWx0ZXIKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX3RyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGlzVHJhY2luZyhjYXRlZ29yeSkpIHsKLQkJCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIFBMVUdJTl9JRCwgSVN0YXR1cy5PSywgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQkJUGxhdGZvcm0uZ2V0TG9nKGJ1bmRsZSkubG9nKHN0YXR1c09iaik7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHBsYXRmb3JtIGlzIGRlYnVnZ2luZwotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0RlYnVnZ2luZygpIHsKLQkJcmV0dXJuIFBsYXRmb3JtLmluRGVidWdNb2RlKCk7Ci0JfQotCi0JLyoqCi0JICogRGV0ZXJtaW5lcyBpZiBjdXJyZW50bHkgdHJhY2luZyBhIGNhdGVnb3J5Ci0JICogQHBhcmFtIGNhdGVnb3J5Ci0JICogQHJldHVybiB0cnVlIGlmIHRyYWNpbmcgY2F0ZWdvcnksIGZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1RyYWNpbmcoU3RyaW5nIGNhdGVnb3J5KSB7Ci0JCWlmICghaXNEZWJ1Z2dpbmcoKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlTdHJpbmcgdHJhY2VGaWx0ZXIgPSBQbGF0Zm9ybS5nZXREZWJ1Z09wdGlvbihQTFVHSU5fSUQgKyBUUkFDRUZJTFRFUl9MT0NBVElPTik7Ci0JCWlmICh0cmFjZUZpbHRlciAhPSBudWxsKSB7Ci0JCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcih0cmFjZUZpbHRlciwgIiwiKTsgLy8kTk9OLU5MUy0xJAotCQkJd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQlTdHJpbmcgY2F0ID0gdG9rZW5pemVyLm5leHRUb2tlbigpLnRyaW0oKTsKLQkJCQlpZiAoY2F0ZWdvcnkuZXF1YWxzKGNhdCkpIHsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSkgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIG51bGwpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9TU0VNb2RlbFRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvU1NFTW9kZWxUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQzY2I0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9TU0VNb2RlbFRlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50cy5UZXN0QWJvdXRUb0JlQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHMuVGVzdE5ld0RvY3VtZW50Q29udGVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHMuVGVzdE5ld0RvY3VtZW50RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50cy5UZXN0Tm9DaGFuZ2VFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzLlRlc3RSZWdpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50cy5UZXN0UmVnaW9uc1JlcGxhY2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50cy5UZXN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQ7Ci0KLQotcHVibGljIGNsYXNzIFNTRU1vZGVsVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQotCS8qKgotCSAqIHRvIGdldCBwaWNrZWQgdXAgYnkgQlZUCi0JICogCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBTU0VNb2RlbFRlc3RTdWl0ZSgpOwotCX0KLQotCS8vIG5vdCByZWFkeSBmb3IgdGhyZWFkZWQgdGVzdHMsIHlldC4KLQkvLyBwcml2YXRlIHN0YXRpYyBDbGFzc1tdIGNsYXNzZXMgPSBuZXcKLQkvLyBDbGFzc1tde1Rlc3RPZlRocmVhZExvY2FsSW1wcm92ZW1lbnQuY2xhc3MsCi0JLy8gVGVzdE9mVGhyZWFkTG9jYWxXaXRoQ2hhbmdlcy5jbGFzcywgVGVzdENyZWF0aW9uLmNsYXNzfTsKLQotCS8vIHByaXZhdGUgc3RhdGljIENsYXNzW10gY2xhc3NlcyA9IG5ldyBDbGFzc1tde1Rlc3RDcmVhdGlvbi5jbGFzcywKLQkvLyBUZXN0RG9jdW1lbnRSZWFkZXIuY2xhc3N9OwotCS8vIHByaXZhdGUgc3RhdGljIENsYXNzW10gY2xhc3NlcyA9IG5ldyBDbGFzc1tde1Rlc3RDcmVhdGlvbi5jbGFzcywKLQkvLyBUZXN0RG9jdW1lbnRSZWFkZXIuY2xhc3MsIFRlc3RDaGFyU2VxdWVuY2VSZWFkZXIuY2xhc3MsCi0JLy8gVGVzdFJlZ2lvbk1hdGNoZXMuY2xhc3N9OwotCi0JcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSBjbGFzc2VzID0gbmV3IENsYXNzW117RXhpc3RlbmNlVGVzdC5jbGFzcywgVGVzdE5ld0RvY3VtZW50Q29udGVudEV2ZW50LmNsYXNzLCBUZXN0QWJvdXRUb0JlQ2hhbmdlZEV2ZW50LmNsYXNzLCBUZXN0TmV3RG9jdW1lbnRFdmVudC5jbGFzcywgVGVzdE5vQ2hhbmdlRXZlbnQuY2xhc3MsIFRlc3RSZWdpb25DaGFuZ2VkRXZlbnQuY2xhc3MsVGVzdFJlZ2lvbnNSZXBsYWNlZEV2ZW50LmNsYXNzLFRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudC5jbGFzc307Ci0KLQlwdWJsaWMgU1NFTW9kZWxUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJTU0UgTW9kZWwgQmFzaWMgVGVzdCBTdWl0ZSIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyBpKyspIHsKLQkJCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShjbGFzc2VzW2ldLCBjbGFzc2VzW2ldLmdldE5hbWUoKSkpOwotCQl9Ci0JfQotCi0JcHVibGljIFNTRU1vZGVsVGVzdFN1aXRlKENsYXNzIHRoZUNsYXNzLCBTdHJpbmcgbmFtZSkgewotCQlzdXBlcih0aGVDbGFzcywgbmFtZSk7Ci0JfQotCi0JcHVibGljIFNTRU1vZGVsVGVzdFN1aXRlKENsYXNzIHRoZUNsYXNzKSB7Ci0JCXN1cGVyKHRoZUNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgU1NFTW9kZWxUZXN0U3VpdGUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1NTRU1vZGVsVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1NTRU1vZGVsVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJkNjcwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9TU0VNb2RlbFRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFNTRU1vZGVsVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBTU0VNb2RlbFRlc3RzUGx1Z2luIHBsdWdpbjsKLQkvL1Jlc291cmNlIGJ1bmRsZS4KLQlwcml2YXRlIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBTU0VNb2RlbFRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCQl0cnkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5UZXN0c1BsdWdpblJlc291cmNlcyIpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24geCkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU1NFTW9kZWxUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHdvcmtzcGFjZSBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElXb3Jrc3BhY2UgZ2V0V29ya3NwYWNlKCkgewotCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICogb3IgJ2tleScgaWYgbm90IGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gU1NFTW9kZWxUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXkpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiByZXNvdXJjZUJ1bmRsZTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvVGVzdEFic3RyYWN0QWRhcHRlckZhY3RvcnkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1Rlc3RBYnN0cmFjdEFkYXB0ZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1YzQwYzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvVGVzdEFic3RyYWN0QWRhcHRlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLkFic3RyYWN0QWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLQotLyoqCi0gKiAKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0QWJzdHJhY3RBZGFwdGVyRmFjdG9yeSBleHRlbmRzIFRlc3RDYXNlIHsKLQkKLQlwcml2YXRlIEFic3RyYWN0QWRhcHRlckZhY3RvcnkgZkZhY3RvcnkgPSBudWxsOwotCQotCWNsYXNzIE15Q2xhc3MgaW1wbGVtZW50cyBJTm9kZUFkYXB0ZXIgewotCQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCQlyZXR1cm4gdHlwZSBpbnN0YW5jZW9mIE15Q2xhc3M7Ci0JCX0KLQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLGludCBldmVudFR5cGUsT2JqZWN0IGNoYW5nZWRGZWF0dXJlLE9iamVjdCBvbGRWYWx1ZSxPYmplY3QgbmV3VmFsdWUsaW50IHBvcykgewotCQkJLy8gbm9vcAotCQl9Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCXNldFVwQWRhcHRlckZhY3RvcnkoKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHNldFVwQWRhcHRlckZhY3RvcnkoKSB7Ci0JCWZGYWN0b3J5ID0gbmV3IEFic3RyYWN0QWRhcHRlckZhY3RvcnkoVGVzdEFic3RyYWN0QWRhcHRlckZhY3RvcnkuTXlDbGFzcy5jbGFzcywgZmFsc2UpIHsKLQkJCXByb3RlY3RlZCBJTm9kZUFkYXB0ZXIgY3JlYXRlQWRhcHRlcihJTm9kZU5vdGlmaWVyIHRhcmdldCkgewotCQkJCXJldHVybiBuZXcgTXlDbGFzcygpOwotCQkJfQotCQl9OwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QWRhcHQoKSB7Ci0JCWZGYWN0b3J5LmFkYXB0KG51bGwpOwotCX0KLQkKLS8vCXB1YmxpYyB2b2lkIHRlc3RBZGFwdE5ldygpIHsKLS8vCQlmRmFjdG9yeS5hZGFwdE5ldyhudWxsKTsKLS8vCX0KLQkKLS8vCXB1YmxpYyB2b2lkIHRlc3RDb3B5KCkgewotLy8JCUFkYXB0ZXJGYWN0b3J5IGYgPSBmRmFjdG9yeS5jb3B5KCk7Ci0vLwkJYXNzZXJ0Tm90TnVsbChmKTsKLS8vCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlKCkgewotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZhY3RvcnlUZXN0T25seS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZhY3RvcnlUZXN0T25seS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMmVkNDUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2FkYXB0ZG9tL0FkYXB0ZXJGYWN0b3J5VGVzdE9ubHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5hZGFwdGRvbTsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlTm90aWZpZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogVGhpcyBjbGFzcyBleGlzdHMgb25seSB0byBzYXRpc2Z5IHNvbWUgb2YgdGhlIHVuaXQgdGVzdHMuCi0gKgotICogVG8gdGVzdCwgdXNlIGZvbGxvd2luZyBsaW5lIGluIGNsaWVudCwgc3VjaCBhcyB3aGVuIGl0IGludGl0aWFsaXplZC4KLSAqICBGYWN0b3J5UmVnaXN0cnkuZ2V0RmFjdG9yeVJlZ2lzdHJ5KCkuYWRkRmFjdG9yeShuZXcgQWRhcHRlckZhY3RvcnlUZXN0T25seSgpKTsKLSAqCi0gKiBDcmVhdGlvbiBkYXRlOiAoMTEvMTQvMDAgNzowODoxOCBQTSkKLSAqIEBhdXRob3I6IERhdmlkIFdpbGxpYW1zCi0gKi8KLXB1YmxpYyBjbGFzcyBBZGFwdGVyRmFjdG9yeVRlc3RPbmx5IGltcGxlbWVudHMgSU5vZGVBZGFwdGVyRmFjdG9yeSB7Ci0JLy8gVGhpcyBmYWN0b3J5IGRlYWxzIHdpdGggdGhyZWUgYWRhcHRlcnMKLQlqYXZhLnV0aWwuTGlzdCBhZGFwdGVycyA9IG5ldyBqYXZhLnV0aWwuQXJyYXlMaXN0KCk7Ci0KLQkvKioKLQkgKiBDQUFkYXB0ZXJGYWN0b3J5IGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBBZGFwdGVyRmFjdG9yeVRlc3RPbmx5KCkgewotCQlzdXBlcigpOwotCQlhZGFwdGVycy5hZGQobmV3IEFkYXB0ZXJGb3JEb2N1bWVudFRlc3RPbmx5KCkpOwotCQlhZGFwdGVycy5hZGQobmV3IEFkYXB0ZXJGb3JFbGVtZW50VGVzdE9ubHkoKSk7Ci0JCWFkYXB0ZXJzLmFkZChuZXcgQWRhcHRlckZvckF0dHJUZXN0T25seSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXRob2QgdGhhdCByZXR1cm5zIHRoZSBhZGFwdGVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGhpcyBmYWN0b3J5IGFuZCB0aGUgZ2l2ZW4gb2JqZWN0LAotCSAqIGFuZCAic2V0cyB1cCIgdGhlIGFkYXB0YWJsZSBvYmplY3QgdG8gdXNlIHRoZSBhZGFwdGVyLgotCSAqCi0JICogVGhlIGFkYXB0ZXIgbWF5IGJlIGEgc2luZ2xldG9uIG9yIG5vdCAuLi4gZGVwZW5kaW5nIG9uIHRoZSBuZWVkcyBvZiB0aGUgSU5vZGVBZGFwdGVyICAuLi4KLQkgKiBidXQgaW4gZ2VuZXJhbCBpdCBpcyByZWNvbW1lbmRlZCBmb3IgYW4gYWRhcHRlciB0byBiZSBzdGF0ZWxlc3MsIAotCSAqIHNvIHRoZSBlZmZpY2llbmNpZXMgb2YgYSBzaW5nbGV0b24gY2FuIGJlIGdhaW5lZC4KLQkgKgotCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCBzaG91bGQgY2FsbCBhZGRBZGFwdGVyIG9uIHRoZSBhZGFwdGVkCi0JICogb2JqZWN0IHdpdGggdGhlIGNvcnJlY3QgaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIuCi0JICovCi0JcHVibGljIElOb2RlQWRhcHRlciBhZGFwdChJTm9kZU5vdGlmaWVyIHRhcmdldCkgewotCQkvL29iamVjdC5hZGRBZGFwdGVyKGFkYXB0ZXJJbnN0YW5jZSk7Ci0JCS8vcmV0dXJuIGFkYXB0ZXJJbnN0YW5jZTsKLQkJSU5vZGVBZGFwdGVyIHJlc3VsdCA9IG51bGw7Ci0KLQkJSXRlcmF0b3IgYWRhcHRlcnNMaXN0ID0gYWRhcHRlcnMuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGFkYXB0ZXJzTGlzdC5oYXNOZXh0KCkpIHsKLQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gKElOb2RlQWRhcHRlcikgYWRhcHRlcnNMaXN0Lm5leHQoKTsKLQkJCWlmIChhZGFwdGVyLmlzQWRhcHRlckZvclR5cGUodGFyZ2V0KSkgewotCQkJCUlOb2RlQWRhcHRlciBleGlzdGluZ0FkYXB0ZXIgPSB0YXJnZXQuZ2V0RXhpc3RpbmdBZGFwdGVyKGFkYXB0ZXIpOwotCQkJCWlmIChleGlzdGluZ0FkYXB0ZXIgPT0gbnVsbCkgewotCQkJCXRhcmdldC5hZGRBZGFwdGVyKGFkYXB0ZXIpOwotCQkJCXJlc3VsdCA9IGFkYXB0ZXI7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQotCX0KLQotCS8qKgotCSAqIGlzRmFjdG9yeUZvclR5cGUgbWV0aG9kIGNvbW1lbnQuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0IHR5cGUpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQotCQkvLyBmb3Igbm93LCBvbmUgYWRhcHRlciBmb3IgZG9jdW1lbnRzLCBlbGVtZW50cywgYW5kIGF0dHIuCi0JCS8vCi0JCWlmICh0eXBlIGluc3RhbmNlb2YgRG9jdW1lbnQpIHsKLQkJCXJlc3VsdCA9IHRydWU7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlpZiAodHlwZSBpbnN0YW5jZW9mIEVsZW1lbnQpIHsKLQkJCQlyZXN1bHQgPSB0cnVlOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJaWYgKHR5cGUgaW5zdGFuY2VvZiBBdHRyKSB7Ci0JCQkJCXJlc3VsdCA9IHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKgotCSAqLwotCXB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0JfQotCi0JcHVibGljIElOb2RlQWRhcHRlckZhY3RvcnkgY29weSgpIHsKLQkJcmV0dXJuIG5ldyBBZGFwdGVyRmFjdG9yeVRlc3RPbmx5KCk7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZvckF0dHJUZXN0T25seS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZvckF0dHJUZXN0T25seS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGMxN2VkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2FkYXB0ZG9tL0FkYXB0ZXJGb3JBdHRyVGVzdE9ubHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmFkYXB0ZG9tOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotCi0KLS8qKgotICogSW5zZXJ0IHRoZSB0eXBlJ3MgZGVzY3JpcHRpb24gaGVyZS4KLSAqIENyZWF0aW9uIGRhdGU6ICgxLzkvMDEgMzozNzowMSBQTSkgCi0gKiBAYXV0aG9yOiBEYXZpZCBXaWxsaWFtcwotICovCi1wdWJsaWMgY2xhc3MgQWRhcHRlckZvckF0dHJUZXN0T25seSBpbXBsZW1lbnRzIElOb2RlQWRhcHRlciB7Ci0JLyoqCi0JICogQ0FBZGFwdGVyVGVzdE9ubHkgY29uc3RydWN0b3IgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgQWRhcHRlckZvckF0dHJUZXN0T25seSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBBbGxvd2luZyB0aGUgSU5vZGVBZGFwdGVyIHRvIGNvbXBhcmUgaXRzZWxmIGFnYWluc3QgdGhlIHR5cGUKLQkgKiBhbGxvd3MgaXQgdG8gcmV0dXJuIHRydWUgaW4gbW9yZSB0aGFuIG9uZSBjYXNlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzQWRhcHRlckZvclR5cGUoT2JqZWN0IHR5cGUpIHsKLQkJaWYgKHR5cGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJcmV0dXJuIHRydWU7Ci0JCWVsc2UKLQkJCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKi8KLQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKElOb2RlTm90aWZpZXIgbm90aWZpZXIsIGludCBldmVudFR5cGUsIE9iamVjdCBjaGFuZ2VkRmVhdHVyZSwgT2JqZWN0IG9sZFZhbHVlLCBPYmplY3QgbmV3VmFsdWUsIGludCBwb3MpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJJTm9kZUFkYXB0ZXIgQWRhcHRlckZvckF0dHJUZXN0T25seSAiICsgIHRoaXMuaGFzaENvZGUoKSArICIgaGFzIGJlZW4gbm90aWZpZWQgb2YgIiArIElOb2RlTm90aWZpZXIuRVZFTlRfVFlQRV9TVFJJTkdTW2V2ZW50VHlwZV0gKyAiICh3aGVuICIgKyBub3RpZmllciArICIgbm90aWZpZWQgaXQpIik7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2FkYXB0ZG9tL0FkYXB0ZXJGb3JEb2N1bWVudFRlc3RPbmx5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9hZGFwdGRvbS9BZGFwdGVyRm9yRG9jdW1lbnRUZXN0T25seS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmM5NjJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2FkYXB0ZG9tL0FkYXB0ZXJGb3JEb2N1bWVudFRlc3RPbmx5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5hZGFwdGRvbTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlTm90aWZpZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLQotLyoqCi0gKiBJbnNlcnQgdGhlIHR5cGUncyBkZXNjcmlwdGlvbiBoZXJlLgotICogQ3JlYXRpb24gZGF0ZTogKDEvOS8wMSAzOjM3OjAxIFBNKQotICogQGF1dGhvcjogRGF2aWQgV2lsbGlhbXMKLSAqLwotcHVibGljIGNsYXNzIEFkYXB0ZXJGb3JEb2N1bWVudFRlc3RPbmx5IGltcGxlbWVudHMgSU5vZGVBZGFwdGVyIHsKLQkvKioKLQkgKiBDQUFkYXB0ZXJUZXN0T25seSBjb25zdHJ1Y3RvciBjb21tZW50LgotCSAqLwotCXB1YmxpYyBBZGFwdGVyRm9yRG9jdW1lbnRUZXN0T25seSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBBbGxvd2luZyB0aGUgSU5vZGVBZGFwdGVyIHRvIGNvbXBhcmUgaXRzZWxmIGFnYWluc3QgdGhlIHR5cGUKLQkgKiBhbGxvd3MgaXQgdG8gcmV0dXJuIHRydWUgaW4gbW9yZSB0aGFuIG9uZSBjYXNlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzQWRhcHRlckZvclR5cGUoT2JqZWN0IHR5cGUpIHsKLQkJaWYgKHR5cGUgaW5zdGFuY2VvZiBEb2N1bWVudCkKLQkJCXJldHVybiB0cnVlOwotCQllbHNlCi0JCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICovCi0JcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgY2hhbmdlZEZlYXR1cmUsIE9iamVjdCBvbGRWYWx1ZSwgT2JqZWN0IG5ld1ZhbHVlLCBpbnQgcG9zKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiSU5vZGVBZGFwdGVyIEFkYXB0ZXJGb3JEb2N1bWVudFRlc3RPbmx5ICIgKyAgdGhpcy5oYXNoQ29kZSgpICsgIiBoYXMgYmVlbiBub3RpZmllZCBvZiAiICsgSU5vZGVOb3RpZmllci5FVkVOVF9UWVBFX1NUUklOR1NbZXZlbnRUeXBlXSArICIgKHdoZW4gIiArIG5vdGlmaWVyICsgIiBub3RpZmllZCBpdCkiKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZvckVsZW1lbnRUZXN0T25seS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZvckVsZW1lbnRUZXN0T25seS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDU4OWI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2FkYXB0ZG9tL0FkYXB0ZXJGb3JFbGVtZW50VGVzdE9ubHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmFkYXB0ZG9tOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogSW5zZXJ0IHRoZSB0eXBlJ3MgZGVzY3JpcHRpb24gaGVyZS4gCi0gKiBDcmVhdGlvbiBkYXRlOiAoMS85LzAxIDM6Mzc6MDEgUE0pCi0gKiBAYXV0aG9yOiBEYXZpZCBXaWxsaWFtcwotICovCi1wdWJsaWMgY2xhc3MgQWRhcHRlckZvckVsZW1lbnRUZXN0T25seSBpbXBsZW1lbnRzIElOb2RlQWRhcHRlciB7Ci0JLyoqCi0JICogQ0FBZGFwdGVyVGVzdE9ubHkgY29uc3RydWN0b3IgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgQWRhcHRlckZvckVsZW1lbnRUZXN0T25seSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBBbGxvd2luZyB0aGUgSU5vZGVBZGFwdGVyIHRvIGNvbXBhcmUgaXRzZWxmIGFnYWluc3QgdGhlIHR5cGUKLQkgKiBhbGxvd3MgaXQgdG8gcmV0dXJuIHRydWUgaW4gbW9yZSB0aGFuIG9uZSBjYXNlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzQWRhcHRlckZvclR5cGUoT2JqZWN0IHR5cGUpIHsKLQkJaWYgKHR5cGUgaW5zdGFuY2VvZiBFbGVtZW50KQotCQkJcmV0dXJuIHRydWU7Ci0JCWVsc2UKLQkJCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKi8KLQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKElOb2RlTm90aWZpZXIgbm90aWZpZXIsIGludCBldmVudFR5cGUsIE9iamVjdCBjaGFuZ2VkRmVhdHVyZSwgT2JqZWN0IG9sZFZhbHVlLCBPYmplY3QgbmV3VmFsdWUsIGludCBwb3MpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJJTm9kZUFkYXB0ZXIgQWRhcHRlckZvckVsZW1lbnRUZXN0T25seSAiICsgIHRoaXMuaGFzaENvZGUoKSArICIgaGFzIGJlZW4gbm90aWZpZWQgb2YgIiArIElOb2RlTm90aWZpZXIuRVZFTlRfVFlQRV9TVFJJTkdTW2V2ZW50VHlwZV0gKyAiICh3aGVuICIgKyBub3RpZmllciArICIgbm90aWZpZWQgaXQpIik7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RDaGFyU2VxdWVuY2VSZWFkZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RDaGFyU2VxdWVuY2VSZWFkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE1ODVjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9kb2N1bWVudC9UZXN0Q2hhclNlcXVlbmNlUmVhZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZG9jdW1lbnQ7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuQ2hhclNlcXVlbmNlUmVhZGVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi0KLQotcHVibGljIGNsYXNzIFRlc3RDaGFyU2VxdWVuY2VSZWFkZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQotCXB1YmxpYyBUZXN0Q2hhclNlcXVlbmNlUmVhZGVyKCkgewotCQlzdXBlcigpOwotCX0KLQotCi0JcHVibGljIFRlc3RDaGFyU2VxdWVuY2VSZWFkZXIoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JU3RyaW5nIGZTdGFuZGFyZFN0cmluZyA9ICJ0ZXN0MTIzIjsKLQotCXB1YmxpYyB2b2lkIHRlc3RTdGFuZGFyZEJlZ2lubmluZygpIHsKLQkJQ2hhclNlcXVlbmNlUmVhZGVyIHJlYWRlciA9IG5ldyBDaGFyU2VxdWVuY2VSZWFkZXIoZlN0YW5kYXJkU3RyaW5nLCAwLCAzKTsKLQkJY2hhciBjaGFyMSA9IChjaGFyKSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGNoYXIxID09ICd0Jyk7Ci0JCWNoYXIgY2hhcjIgPSAoY2hhcikgcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShjaGFyMiA9PSAnZScpOwotCQljaGFyIGNoYXIzID0gKGNoYXIpIHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoY2hhcjMgPT0gJ3MnKTsKLQkJaW50IGVvZiA9IHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoZW9mID09IC0xKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U3RhbmRhcmRNaWRkbGUoKSB7Ci0JCUNoYXJTZXF1ZW5jZVJlYWRlciByZWFkZXIgPSBuZXcgQ2hhclNlcXVlbmNlUmVhZGVyKGZTdGFuZGFyZFN0cmluZywgMiwgMyk7Ci0JCWNoYXIgY2hhcjEgPSAoY2hhcikgcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShjaGFyMSA9PSAncycpOwotCQljaGFyIGNoYXIyID0gKGNoYXIpIHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoY2hhcjIgPT0gJ3QnKTsKLQkJY2hhciBjaGFyMyA9IChjaGFyKSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGNoYXIzID09ICcxJyk7Ci0JCWludCBlb2YgPSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGVvZiA9PSAtMSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFN0YW5kYXJkRW5kKCkgewotCQlDaGFyU2VxdWVuY2VSZWFkZXIgcmVhZGVyID0gbmV3IENoYXJTZXF1ZW5jZVJlYWRlcihmU3RhbmRhcmRTdHJpbmcsIDQsIDMpOwotCQljaGFyIGNoYXIxID0gKGNoYXIpIHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoY2hhcjEgPT0gJzEnKTsKLQkJY2hhciBjaGFyMiA9IChjaGFyKSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGNoYXIyID09ICcyJyk7Ci0JCWNoYXIgY2hhcjMgPSAoY2hhcikgcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShjaGFyMyA9PSAnMycpOwotCQlpbnQgZW9mID0gcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShlb2YgPT0gLTEpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTdGFuZGFyZE91dE9mUmFuZ2UoKSB7Ci0JCUNoYXJTZXF1ZW5jZVJlYWRlciByZWFkZXIgPSBuZXcgQ2hhclNlcXVlbmNlUmVhZGVyKGZTdGFuZGFyZFN0cmluZywgNTAsIDMpOwotCQlpbnQgZW9mID0gcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShlb2YgPT0gLTEpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTdGFuZGFyZFBhcnRpYWxseU91dE9mUmFuZ2UoKSB7Ci0JCUNoYXJTZXF1ZW5jZVJlYWRlciByZWFkZXIgPSBuZXcgQ2hhclNlcXVlbmNlUmVhZGVyKGZTdGFuZGFyZFN0cmluZywgNSwgMyk7Ci0JCWNoYXIgY2hhcjEgPSAoY2hhcikgcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShjaGFyMSA9PSAnMicpOwotCQljaGFyIGNoYXIyID0gKGNoYXIpIHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoY2hhcjIgPT0gJzMnKTsKLQkJaW50IGVvZiA9IHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoZW9mID09IC0xKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QnVmZmVyQmVnaW5pbmcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlDaGFyU2VxdWVuY2VSZWFkZXIgcmVhZGVyID0gbmV3IENoYXJTZXF1ZW5jZVJlYWRlcihmU3RhbmRhcmRTdHJpbmcsIDAsIDMpOwotCQlTdHJpbmcgdGFyZ2V0U3RyaW5nID0gInRlcyI7Ci0JCQotCQkvLyBpbnRlbnRpb25hbGx5IHNtYWxsIHNpemVkIGJ1ZmZlcgotCQljaGFyW10gY2hhcmJ1ZmZlciA9IG5ldyBjaGFyWzJdOwotCQlTdHJpbmdCdWZmZXIgc3RyaW5nQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpbnQgblJlYWQgPSAwOwotCQl3aGlsZSAoblJlYWQgIT0gLTEpIHsKLQkJCW5SZWFkID0gcmVhZGVyLnJlYWQoY2hhcmJ1ZmZlcik7Ci0JCQlpZiAoblJlYWQgPiAwKSB7Ci0JCQkJc3RyaW5nQnVmZmVyLmFwcGVuZChjaGFyYnVmZmVyLCAwLCBuUmVhZCk7Ci0JCQl9Ci0JCX0KLQkJU3RyaW5nIHRlc3RTdHJpbmcgPSBzdHJpbmdCdWZmZXIudG9TdHJpbmcoKTsKLQkJCi0JCWFzc2VydEVxdWFscyh0YXJnZXRTdHJpbmcsIHRlc3RTdHJpbmcpOwotCQkKLQl9Ci0JcHVibGljIHZvaWQgdGVzdEJ1ZmZlckVuZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUNoYXJTZXF1ZW5jZVJlYWRlciByZWFkZXIgPSBuZXcgQ2hhclNlcXVlbmNlUmVhZGVyKGZTdGFuZGFyZFN0cmluZywgNCwgMyk7Ci0JCVN0cmluZyB0YXJnZXRTdHJpbmcgPSAiMTIzIjsKLQkJCi0JCS8vIGludGVudGlvbmFsbHkgc21hbGwgc2l6ZWQgYnVmZmVyCi0JCWNoYXJbXSBjaGFyYnVmZmVyID0gbmV3IGNoYXJbMl07Ci0JCVN0cmluZ0J1ZmZlciBzdHJpbmdCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWludCBuUmVhZCA9IDA7Ci0JCXdoaWxlIChuUmVhZCAhPSAtMSkgewotCQkJblJlYWQgPSByZWFkZXIucmVhZChjaGFyYnVmZmVyKTsKLQkJCWlmIChuUmVhZCA+IDApIHsKLQkJCQlzdHJpbmdCdWZmZXIuYXBwZW5kKGNoYXJidWZmZXIsIDAsIG5SZWFkKTsKLQkJCX0KLQkJfQotCQlTdHJpbmcgdGVzdFN0cmluZyA9IHN0cmluZ0J1ZmZlci50b1N0cmluZygpOwotCQkKLQkJYXNzZXJ0RXF1YWxzKHRhcmdldFN0cmluZywgdGVzdFN0cmluZyk7Ci0JCQotCX0JcHVibGljIHZvaWQgdGVzdEJ1ZmZlckVuZEVubGFyZ2VkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQ2hhclNlcXVlbmNlUmVhZGVyIHJlYWRlciA9IG5ldyBDaGFyU2VxdWVuY2VSZWFkZXIoZlN0YW5kYXJkU3RyaW5nLCA0LCAzKTsKLQkJU3RyaW5nIHRhcmdldFN0cmluZyA9ICIxMjMiOwotCQkKLQkJLy8gaW50ZW50aW9uYWxseSBzbWFsbCBzaXplZCBidWZmZXIKLQkJY2hhcltdIGNoYXJidWZmZXIgPSBuZXcgY2hhclsyMDBdOwotCQlTdHJpbmdCdWZmZXIgc3RyaW5nQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpbnQgblJlYWQgPSAwOwotCQl3aGlsZSAoblJlYWQgIT0gLTEpIHsKLQkJCW5SZWFkID0gcmVhZGVyLnJlYWQoY2hhcmJ1ZmZlcik7Ci0JCQlpZiAoblJlYWQgPiAwKSB7Ci0JCQkJc3RyaW5nQnVmZmVyLmFwcGVuZChjaGFyYnVmZmVyLCAwLCBuUmVhZCk7Ci0JCQl9Ci0JCX0KLQkJU3RyaW5nIHRlc3RTdHJpbmcgPSBzdHJpbmdCdWZmZXIudG9TdHJpbmcoKTsKLQkJCi0JCWFzc2VydEVxdWFscyh0YXJnZXRTdHJpbmcsIHRlc3RTdHJpbmcpOwotCQkKLQl9Ci0JcHVibGljIHZvaWQgdGVzdEJ1ZmZlckJlZ2luaW5nRW5sYXJnZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlDaGFyU2VxdWVuY2VSZWFkZXIgcmVhZGVyID0gbmV3IENoYXJTZXF1ZW5jZVJlYWRlcihmU3RhbmRhcmRTdHJpbmcsIDAsIDMpOwotCQlTdHJpbmcgdGFyZ2V0U3RyaW5nID0gInRlcyI7Ci0JCQotCQkvLyBpbnRlbnRpb25hbGx5IHNtYWxsIHNpemVkIGJ1ZmZlcgotCQljaGFyW10gY2hhcmJ1ZmZlciA9IG5ldyBjaGFyWzIwMF07Ci0JCVN0cmluZ0J1ZmZlciBzdHJpbmdCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWludCBuUmVhZCA9IDA7Ci0JCXdoaWxlIChuUmVhZCAhPSAtMSkgewotCQkJblJlYWQgPSByZWFkZXIucmVhZChjaGFyYnVmZmVyKTsKLQkJCWlmIChuUmVhZCA+IDApIHsKLQkJCQlzdHJpbmdCdWZmZXIuYXBwZW5kKGNoYXJidWZmZXIsIDAsIG5SZWFkKTsKLQkJCX0KLQkJfQotCQlTdHJpbmcgdGVzdFN0cmluZyA9IHN0cmluZ0J1ZmZlci50b1N0cmluZygpOwotCQkKLQkJYXNzZXJ0RXF1YWxzKHRhcmdldFN0cmluZywgdGVzdFN0cmluZyk7Ci0JCQotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0QnVmZmVyQmVnaW5pbmdSZWR1Y2VkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQ2hhclNlcXVlbmNlUmVhZGVyIHJlYWRlciA9IG5ldyBDaGFyU2VxdWVuY2VSZWFkZXIoZlN0YW5kYXJkU3RyaW5nLCAwLCAzKTsKLQkJU3RyaW5nIHRhcmdldFN0cmluZyA9ICJ0ZSI7Ci0JCQotCQkvLyBpbnRlbnRpb25hbGx5IHNtYWxsIHNpemVkIGJ1ZmZlcgotCQljaGFyW10gY2hhcmJ1ZmZlciA9IG5ldyBjaGFyWzJdOwotCQlTdHJpbmdCdWZmZXIgc3RyaW5nQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpbnQgblJlYWQgPSAwOwotCQkvL3doaWxlIChuUmVhZCAhPSAtMSkgewotCQkJblJlYWQgPSByZWFkZXIucmVhZChjaGFyYnVmZmVyLCAwLCAyKTsKLQkJCWlmIChuUmVhZCA+IDApIHsKLQkJCQlzdHJpbmdCdWZmZXIuYXBwZW5kKGNoYXJidWZmZXIsIDAsIG5SZWFkKTsKLQkJCX0KLQkJLy99Ci0JCVN0cmluZyB0ZXN0U3RyaW5nID0gc3RyaW5nQnVmZmVyLnRvU3RyaW5nKCk7Ci0JCQotCQlhc3NlcnRFcXVhbHModGFyZ2V0U3RyaW5nLCB0ZXN0U3RyaW5nKTsKLQkJLy8vIG5vdyBjb250aW51ZSByZWFkaW5nIHNhbWUgcmVhZGVyCi0JCXRhcmdldFN0cmluZyA9ICJzIjsKLQkJc3RyaW5nQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQluUmVhZCA9IDA7Ci0JCS8vd2hpbGUgKG5SZWFkICE9IC0xKSB7Ci0JCQluUmVhZCA9IHJlYWRlci5yZWFkKGNoYXJidWZmZXIsIDAsIDIpOwotCQkJaWYgKG5SZWFkID4gMCkgewotCQkJCXN0cmluZ0J1ZmZlci5hcHBlbmQoY2hhcmJ1ZmZlciwgMCwgblJlYWQpOwotCQkJfQotCQkvL30KLQkJdGVzdFN0cmluZyA9IHN0cmluZ0J1ZmZlci50b1N0cmluZygpOwotCQlhc3NlcnRFcXVhbHModGFyZ2V0U3RyaW5nLCB0ZXN0U3RyaW5nKTsKLQkJCi0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdFJlZ2lvbk1hdGNoZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RSZWdpb25NYXRjaGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5M2QxYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdFJlZ2lvbk1hdGNoZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmRvY3VtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi0KLQotcHVibGljIGNsYXNzIFRlc3RSZWdpb25NYXRjaGVzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogIAotCSAqLwotCXB1YmxpYyBUZXN0UmVnaW9uTWF0Y2hlcygpIHsKLQkJc3VwZXIoKTsKLQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFRlc3RSZWdpb25NYXRjaGVzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXMxKCkgewotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlID0gbmV3IFN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUuc2V0KCJ0ZXN0aW5nMTIzIik7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgMSwgInQiKTsKLQkJYXNzZXJ0RXF1YWxzKHRydWUsIHJlc3VsdCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXMyKCkgewotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlID0gbmV3IFN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUuc2V0KCJ0ZXN0aW5nMTIzIik7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgMiwgInQiKTsKLQkJYXNzZXJ0RXF1YWxzKGZhbHNlLCByZXN1bHQpOwotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVnaW9uTWF0Y2hlczMoKSB7Ci0JCVN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSBzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgPSBuZXcgU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlKCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQoInRlc3RpbmcxMjMiKTsKLQkJYm9vbGVhbiByZXN1bHQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUucmVnaW9uTWF0Y2hlcyg3LCAzLCAiMTIzIik7Ci0JCWFzc2VydEVxdWFscyh0cnVlLCByZXN1bHQpOwotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVnaW9uTWF0Y2hlczQoKSB7Ci0JCVN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSBzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgPSBuZXcgU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlKCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQoInRlc3RpbmcxMjMiKTsKLQkJYm9vbGVhbiByZXN1bHQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUucmVnaW9uTWF0Y2hlcyg4LCAzLCAiMjM0Iik7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgcmVzdWx0KTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKCkgewotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlID0gbmV3IFN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSgpOwotCQlTdHJpbmcgdGVzdCA9ICJ0ZXN0aW5nMTIzIjsKLQkJU3RyaW5nIGNvbXBhcmUgPSAiVGVTdGluZzEyMyI7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQodGVzdCk7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgdGVzdC5sZW5ndGgoKSwgY29tcGFyZSk7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgcmVzdWx0KTsKLQkJcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKDAsIHRlc3QubGVuZ3RoKCksIGNvbXBhcmUpOwotCQlhc3NlcnRFcXVhbHModHJ1ZSwgcmVzdWx0KTsKLQl9Ci0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlMigpIHsKLQkJU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlIHN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSA9IG5ldyBTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUoKTsKLQkJU3RyaW5nIHRlc3QgPSAidGVzdFx1MDEzMG5nMTIzIjsKLQkJU3RyaW5nIGNvbXBhcmUgPSAiVGVTdEluZzEyMyI7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQodGVzdCk7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgdGVzdC5sZW5ndGgoKSwgY29tcGFyZSk7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgcmVzdWx0KTsKLQkJcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKDAsIHRlc3QubGVuZ3RoKCksIGNvbXBhcmUpOwotCQlhc3NlcnRFcXVhbHModHJ1ZSwgcmVzdWx0KTsKLQl9Ci0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlMygpIHsKLQkJU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlIHN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSA9IG5ldyBTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUoKTsKLQkJU3RyaW5nIHRlc3QgPSAidGVzdGluZzEyMyI7Ci0JCVN0cmluZyBjb21wYXJlID0gIlRlU3RcdTAxMzFuZzEyMyI7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQodGVzdCk7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgdGVzdC5sZW5ndGgoKSwgY29tcGFyZSk7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgcmVzdWx0KTsKLQkJcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKDAsIHRlc3QubGVuZ3RoKCksIGNvbXBhcmUpOwotCQlhc3NlcnRFcXVhbHModHJ1ZSwgcmVzdWx0KTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL051bGxQYXJzZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9OdWxsUGFyc2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YWIyMGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL051bGxQYXJzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzOwotCi1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLnBhcnNlci5SZWdpb25QYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLQotcHVibGljIGNsYXNzIE51bGxQYXJzZXIgaW1wbGVtZW50cyBSZWdpb25QYXJzZXIgewotCi0JcHVibGljIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZ2V0RG9jdW1lbnRSZWdpb25zKCkgewotCi0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBMaXN0IGdldFJlZ2lvbnMoKSB7Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIFJlZ2lvblBhcnNlciBuZXdJbnN0YW5jZSgpIHsKLQotCQlyZXR1cm4gdGhpczsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZXNldChSZWFkZXIgcmVhZGVyKSB7Ci0JCS8vIGRvIG5vdGhpbmcKLQotCX0KLQotCXB1YmxpYyB2b2lkIHJlc2V0KFJlYWRlciByZWFkZXIsIGludCBvZmZzZXQpIHsKLQkJLy8gZG8gbm90aGluZwotCi0JfQotCi0JcHVibGljIHZvaWQgcmVzZXQoU3RyaW5nIGlucHV0KSB7Ci0JCS8vIGRvIG5vdGhpbmcKLQotCX0KLQotCXB1YmxpYyB2b2lkIHJlc2V0KFN0cmluZyBpbnB1dCwgaW50IG9mZnNldCkgewotCQkvLyBkbyBub3RoaW5nCi0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdEFib3V0VG9CZUNoYW5nZWRFdmVudC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3RBYm91dFRvQmVDaGFuZ2VkRXZlbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkxODc0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdEFib3V0VG9CZUNoYW5nZWRFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLkFib3V0VG9CZUNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotCi1wdWJsaWMgY2xhc3MgVGVzdEFib3V0VG9CZUNoYW5nZWRFdmVudCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyB2b2lkIHRlc3RBYm91dFRvQmVDaGFuZ2VkRXZlbnQoKSB7Ci0JCUFib3V0VG9CZUNoYW5nZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJYXNzZXJ0Tm90TnVsbChldmVudCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldERlbGV0ZWRUZXh0KCkgewotCQlBYm91dFRvQmVDaGFuZ2VkRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCVN0cmluZyBkID0gZXZlbnQuZ2V0RGVsZXRlZFRleHQoKTsKLQkJYXNzZXJ0RXF1YWxzKGQsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRPcmlnaW5hbFJlcXVlc3RlcigpIHsKLQkJQWJvdXRUb0JlQ2hhbmdlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlPYmplY3QgciA9IGV2ZW50LmdldE9yaWdpbmFsUmVxdWVzdGVyKCk7Ci0JCWFzc2VydEVxdWFscyh0aGlzLCByKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0U3RydWN0dXJlZERvY3VtZW50KCkgewotCQlBYm91dFRvQmVDaGFuZ2VkRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZCA9IGV2ZW50LmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlhc3NlcnROb3ROdWxsKGQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZXREZWxldGVkVGV4dCgpIHsKLQkJQWJvdXRUb0JlQ2hhbmdlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlldmVudC5zZXREZWxldGVkVGV4dCgianVua3lOb3RoaW5nIik7Ci0JCS8vIGFzc3VtZSBvayBpZiBubyBleGNlcHRpb24KLQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQl9Ci0KLQkvKgotCSAqIENsYXNzIHVuZGVyIHRlc3QgZm9yIFN0cmluZyB0b1N0cmluZygpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFRvU3RyaW5nKCkgewotCQlBYm91dFRvQmVDaGFuZ2VkRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCVN0cmluZyByID0gZXZlbnQudG9TdHJpbmcoKTsKLQkJYXNzZXJ0Tm90TnVsbChyKTsKLQl9Ci0KLQlwcml2YXRlIEFib3V0VG9CZUNoYW5nZWRFdmVudCBnZXRCYXNpY0V2ZW50KCkgewotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRJbnN0YW5jZShuZXcgTnVsbFBhcnNlcigpKTsKLQkJQWJvdXRUb0JlQ2hhbmdlZEV2ZW50IGV2ZW50ID0gbmV3IEFib3V0VG9CZUNoYW5nZWRFdmVudChkb2N1bWVudCwgdGhpcywgInRlc3QiLCAwLCAwKTsKLQkJcmV0dXJuIGV2ZW50OwotCi0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdE5ld0RvY3VtZW50Q29udGVudEV2ZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdE5ld0RvY3VtZW50Q29udGVudEV2ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlMjYzNzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3ROZXdEb2N1bWVudENvbnRlbnRFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLk5ld0RvY3VtZW50Q29udGVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0TmV3RG9jdW1lbnRDb250ZW50RXZlbnQgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JZmluYWwgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RTdHJpbmcgPSAidGVzdGluZyI7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TmV3RG9jdW1lbnRDb250ZW50RXZlbnQoKSB7Ci0JCU5ld0RvY3VtZW50Q29udGVudEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROb3ROdWxsKGV2ZW50KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0T2Zmc2V0KCkgewotCQlOZXdEb2N1bWVudENvbnRlbnRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJaW50IG8gPSBldmVudC5nZXRPZmZzZXQoKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIG8pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRMZW5ndGgoKSB7Ci0JCU5ld0RvY3VtZW50Q29udGVudEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlpbnQgaSA9IGV2ZW50LmdldExlbmd0aCgpOwotCQlhc3NlcnRFcXVhbHModGVzdFN0cmluZy5sZW5ndGgoKSwgaSk7Ci0JfQotCi0JLyoKLQkgKiBDbGFzcyB1bmRlciB0ZXN0IGZvciBTdHJpbmcgZ2V0VGV4dCgpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldFRleHQoKSB7Ci0JCU5ld0RvY3VtZW50Q29udGVudEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlTdHJpbmcgdGV4dCA9IGV2ZW50LmdldFRleHQoKTsKLQkJYXNzZXJ0RXF1YWxzKHRlc3RTdHJpbmcsIHRleHQpOwotCX0KLQotCXByaXZhdGUgTmV3RG9jdW1lbnRDb250ZW50RXZlbnQgZ2V0QmFzaWNFdmVudCgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IFN0cnVjdHVyZWREb2N1bWVudEZhY3RvcnkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50SW5zdGFuY2UobmV3IE51bGxQYXJzZXIoKSk7Ci0JCWRvY3VtZW50LnNldFRleHQodGhpcywgdGVzdFN0cmluZyk7Ci0JCU5ld0RvY3VtZW50Q29udGVudEV2ZW50IGV2ZW50ID0gbmV3IE5ld0RvY3VtZW50Q29udGVudEV2ZW50KGRvY3VtZW50LCB0aGlzKTsKLQkJcmV0dXJuIGV2ZW50OwotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3ROZXdEb2N1bWVudEV2ZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdE5ld0RvY3VtZW50RXZlbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY4YWU3My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdE5ld0RvY3VtZW50RXZlbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmRvY3VtZW50LlN0cnVjdHVyZWREb2N1bWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5OZXdEb2N1bWVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0TmV3RG9jdW1lbnRFdmVudCBleHRlbmRzIFRlc3RDYXNlIHsKLQlmaW5hbCBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdFN0cmluZyA9ICJ0ZXN0aW5nIjsKLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRPZmZzZXQoKSB7Ci0JCU5ld0RvY3VtZW50RXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCWludCBvID0gZXZlbnQuZ2V0T2Zmc2V0KCk7Ci0JCWFzc2VydEVxdWFscygwLCBvKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0TGVuZ3RoKCkgewotCQlOZXdEb2N1bWVudEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlpbnQgaSA9IGV2ZW50LmdldExlbmd0aCgpOwotCQlhc3NlcnRFcXVhbHModGVzdFN0cmluZy5sZW5ndGgoKSwgaSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5ld0RvY3VtZW50RXZlbnQoKSB7Ci0JCU5ld0RvY3VtZW50RXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoZXZlbnQpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEdldFRleHQoKSB7Ci0JCU5ld0RvY3VtZW50RXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCVN0cmluZyB0ZXh0ID0gZXZlbnQuZ2V0VGV4dCgpOwotCQlhc3NlcnRFcXVhbHModGVzdFN0cmluZywgdGV4dCk7Ci0JfQotCi0JcHJpdmF0ZSBOZXdEb2N1bWVudEV2ZW50IGdldEJhc2ljRXZlbnQoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBTdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5LmdldE5ld1N0cnVjdHVyZWREb2N1bWVudEluc3RhbmNlKG5ldyBOdWxsUGFyc2VyKCkpOwotCQlkb2N1bWVudC5zZXRUZXh0KHRoaXMsIHRlc3RTdHJpbmcpOwotCQlOZXdEb2N1bWVudEV2ZW50IGV2ZW50ID0gbmV3IE5ld0RvY3VtZW50RXZlbnQoZG9jdW1lbnQsIHRoaXMpOwotCQlyZXR1cm4gZXZlbnQ7Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdE5vQ2hhbmdlRXZlbnQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9UZXN0Tm9DaGFuZ2VFdmVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzRmYzkzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9UZXN0Tm9DaGFuZ2VFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLk5vQ2hhbmdlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLQotcHVibGljIGNsYXNzIFRlc3ROb0NoYW5nZUV2ZW50IGV4dGVuZHMgVGVzdENhc2UgewotCWZpbmFsIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3RyaW5nID0gInRlc3RpbmciOwotCi0JcHVibGljIHZvaWQgdGVzdE5vQ2hhbmdlRXZlbnQoKSB7Ci0JCU5vQ2hhbmdlRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoZXZlbnQpOwotCQlhc3NlcnRFcXVhbHMoTm9DaGFuZ2VFdmVudC5OT19DT05URU5UX0NIQU5HRSwgZXZlbnQucmVhc29uKTsKLQl9Ci0KLQlwcml2YXRlIE5vQ2hhbmdlRXZlbnQgZ2V0QmFzaWNFdmVudCgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IFN0cnVjdHVyZWREb2N1bWVudEZhY3RvcnkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50SW5zdGFuY2UobmV3IE51bGxQYXJzZXIoKSk7Ci0JCWRvY3VtZW50LnNldFRleHQodGhpcywgdGVzdFN0cmluZyk7Ci0JCU5vQ2hhbmdlRXZlbnQgZXZlbnQgPSBuZXcgTm9DaGFuZ2VFdmVudChkb2N1bWVudCwgdGhpcywgIiIsIDAsIDApOwotCQlldmVudC5yZWFzb24gPSBOb0NoYW5nZUV2ZW50Lk5PX0NPTlRFTlRfQ0hBTkdFOwotCQlyZXR1cm4gZXZlbnQ7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdFJlZ2lvbkNoYW5nZWRFdmVudC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3RSZWdpb25DaGFuZ2VkRXZlbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdjYjgyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdFJlZ2lvbkNoYW5nZWRFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlJlZ2lvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb247Ci0KLXB1YmxpYyBjbGFzcyBUZXN0UmVnaW9uQ2hhbmdlZEV2ZW50IGV4dGVuZHMgVGVzdENhc2UgewotCWZpbmFsIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3RyaW5nID0gInRlc3RpbmciOwotCi0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbkNoYW5nZWRFdmVudCgpIHsKLQkJUmVnaW9uQ2hhbmdlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROb3ROdWxsKGV2ZW50KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UmVnaW9uKCkgewotCQlSZWdpb25DaGFuZ2VkRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gc3RydWN0dXJlZERvY3VtZW50UmVnaW9uID0gZXZlbnQuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCWFzc2VydEVxdWFscyhudWxsLCBzdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKSB7Ci0JCVJlZ2lvbkNoYW5nZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJSVRleHRSZWdpb24gcmVnaW9uID0gZXZlbnQuZ2V0UmVnaW9uKCk7Ci0JCWFzc2VydEVxdWFscyhudWxsLCByZWdpb24pOwotCX0KLQotCXByaXZhdGUgUmVnaW9uQ2hhbmdlZEV2ZW50IGdldEJhc2ljRXZlbnQoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBTdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5LmdldE5ld1N0cnVjdHVyZWREb2N1bWVudEluc3RhbmNlKG5ldyBOdWxsUGFyc2VyKCkpOwotCQlkb2N1bWVudC5zZXRUZXh0KHRoaXMsIHRlc3RTdHJpbmcpOwotCQlSZWdpb25DaGFuZ2VkRXZlbnQgZXZlbnQgPSBuZXcgUmVnaW9uQ2hhbmdlZEV2ZW50KGRvY3VtZW50LCB0aGlzLCBudWxsLCBudWxsLCAiIiwgMCwgMCk7Ci0JCXJldHVybiBldmVudDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdFJlZ2lvbnNSZXBsYWNlZEV2ZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdFJlZ2lvbnNSZXBsYWNlZEV2ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3YjExNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3RSZWdpb25zUmVwbGFjZWRFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlJlZ2lvbnNSZXBsYWNlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0UmVnaW9uc1JlcGxhY2VkRXZlbnQgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlmaW5hbCBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdFN0cmluZyA9ICJ0ZXN0aW5nIjsKLQotCXB1YmxpYyB2b2lkIHRlc3RSZWdpb25zUmVwbGFjZWRFdmVudCgpIHsKLQkJUmVnaW9uc1JlcGxhY2VkRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoZXZlbnQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXROZXdSZWdpb25zKCkgewotCQlSZWdpb25zUmVwbGFjZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJYXNzZXJ0TnVsbChldmVudC5nZXROZXdSZWdpb25zKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRPbGRSZWdpb25zKCkgewotCQlSZWdpb25zUmVwbGFjZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJYXNzZXJ0TnVsbChldmVudC5nZXRPbGRSZWdpb25zKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKSB7Ci0JCVJlZ2lvbnNSZXBsYWNlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROdWxsKGV2ZW50LmdldFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpKTsKLQl9Ci0KLQlwcml2YXRlIFJlZ2lvbnNSZXBsYWNlZEV2ZW50IGdldEJhc2ljRXZlbnQoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBTdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5LmdldE5ld1N0cnVjdHVyZWREb2N1bWVudEluc3RhbmNlKG5ldyBOdWxsUGFyc2VyKCkpOwotCQlkb2N1bWVudC5zZXRUZXh0KHRoaXMsIHRlc3RTdHJpbmcpOwotCQlSZWdpb25zUmVwbGFjZWRFdmVudCBldmVudCA9IG5ldyBSZWdpb25zUmVwbGFjZWRFdmVudChkb2N1bWVudCwgdGhpcywgbnVsbCwgbnVsbCwgbnVsbCwgIiIsIDAsIDApOwotCQlyZXR1cm4gZXZlbnQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzViMzU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9UZXN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmRvY3VtZW50LlN0cnVjdHVyZWREb2N1bWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5TdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotCi1wdWJsaWMgY2xhc3MgVGVzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50IGV4dGVuZHMgVGVzdENhc2UgewotCWZpbmFsIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3RyaW5nID0gInRlc3RpbmciOwotCi0JcHVibGljIHZvaWQgdGVzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KCkgewotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJYXNzZXJ0Tm90TnVsbChldmVudCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldE5ld1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKSB7Ci0JCVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROdWxsKGV2ZW50LmdldE5ld1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldE9sZFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKSB7Ci0JCVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROdWxsKGV2ZW50LmdldE9sZFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKSk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCBnZXRCYXNpY0V2ZW50KCkgewotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRJbnN0YW5jZShuZXcgTnVsbFBhcnNlcigpKTsKLQkJZG9jdW1lbnQuc2V0VGV4dCh0aGlzLCB0ZXN0U3RyaW5nKTsKLQkJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQgZXZlbnQgPSBuZXcgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQoZG9jdW1lbnQsIHRoaXMsIG51bGwsIG51bGwsICIiLCAwLCAwKTsKLQkJcmV0dXJuIGV2ZW50OwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V4YW1wbGVzL1Rlc3RBdFNpZ24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V4YW1wbGVzL1Rlc3RBdFNpZ24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ5MTAwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9leGFtcGxlcy9UZXN0QXRTaWduLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5leGFtcGxlczsKLQotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7Ci0KLQotcHVibGljIGNsYXNzIFRlc3RBdFNpZ24gewotCi0JcHVibGljIFRlc3RBdFNpZ24oKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gbmV3IFByb3BlcnRpZXMoKTsgLy9TeXN0ZW0uZ2V0UHJvcGVydGllcygpOwotCQlwcm9wZXJ0aWVzLnB1dCgiYXQgc2lnbiIsICJ0aGlzIGlzIGFuIFx1MDA0MCBzaWduIik7Ci0JCXByb3BlcnRpZXMubGlzdChTeXN0ZW0ub3V0KTsKLQkJRmlsZU91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbSgidGVzdEF0LnR4dCIpOwotCQlwcm9wZXJ0aWVzLnN0b3JlKG91dHB1dFN0cmVhbSwgInRlc3RzIik7Ci0JCW91dHB1dFN0cmVhbS5jbG9zZSgpOwotCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oInRlc3RBdC50eHQiKTsKLQkJUHJvcGVydGllcyByZWFkUHJvcGVydGllcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0JCXJlYWRQcm9wZXJ0aWVzLmxvYWQoaW5TdHJlYW0pOwotCQlTdHJpbmcgYXRTaWduID0gKFN0cmluZykgcmVhZFByb3BlcnRpZXMuZ2V0KCJhdCBzaWduIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiYXQgc2lnbiBmcm9tIHJlYWQ6ICIgKyBhdFNpZ24pOwotCi0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9saWZlL0VtcHR5TW9kZWxGb3JUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvbGlmZS9FbXB0eU1vZGVsRm9yVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJiOTVkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9saWZlL0VtcHR5TW9kZWxGb3JUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMubGlmZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5tb2RlbC5BYnN0cmFjdFN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSW5kZXhlZFJlZ2lvbjsKLQotCi0KLXB1YmxpYyBjbGFzcyBFbXB0eU1vZGVsRm9yVGVzdHMgZXh0ZW5kcyBBYnN0cmFjdFN0cnVjdHVyZWRNb2RlbCB7Ci0KLQlwdWJsaWMgRW1wdHlNb2RlbEZvclRlc3RzKCkgewotCi0JCXN1cGVyKCk7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY29uc3RydWN0b3Igc3R1YgotCX0KLQotCXB1YmxpYyBJbmRleGVkUmVnaW9uIGdldEluZGV4ZWRSZWdpb24oaW50IG9mZnNldCkgewotCi0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2xpZmUvVGVzdENyZWF0aW9uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9saWZlL1Rlc3RDcmVhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODExMmM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2xpZmUvVGVzdENyZWF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5saWZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLm1vZGVsLk1vZGVsTGlmZWN5Y2xlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLQotCi0KLXB1YmxpYyBjbGFzcyBUZXN0Q3JlYXRpb24gZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRpb24oKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gbmV3IEVtcHR5TW9kZWxGb3JUZXN0cygpOwotCQlNb2RlbExpZmVjeWNsZUV2ZW50IGV2ZW50ID0gbmV3IE1vZGVsTGlmZWN5Y2xlRXZlbnQoc3RydWN0dXJlZE1vZGVsLCBNb2RlbExpZmVjeWNsZUV2ZW50Lk1PREVMX1JFTEVBU0VEKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZXZlbnQpOwotCQl9Ci0JCWV2ZW50ID0gbmV3IE1vZGVsTGlmZWN5Y2xlRXZlbnQoc3RydWN0dXJlZE1vZGVsLCBNb2RlbExpZmVjeWNsZUV2ZW50Lk1PREVMX0RJUlRZX1NUQVRFKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZXZlbnQpOwotCQl9Ci0JCWV2ZW50ID0gbmV3IE1vZGVsTGlmZWN5Y2xlRXZlbnQoc3RydWN0dXJlZE1vZGVsLCBNb2RlbExpZmVjeWNsZUV2ZW50Lk1PREVMX0RPQ1VNRU5UX0NIQU5HRUQpOwotCQlpZiAoREVCVUcpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihldmVudCk7Ci0JCX0KLQkJLyogICAgICAgIGV2ZW50ID0gbmV3IE1vZGVsTGlmZWN5Y2xlRXZlbnQoc3RydWN0dXJlZE1vZGVsLCBNb2RlbExpZmVjeWNsZUV2ZW50Lk1PREVMX1JFSU5JVElBTElaRUQpOwotCQkgaWYgKERFQlVHKSB7Ci0JCSBTeXN0ZW0ub3V0LnByaW50bG4oZXZlbnQpOwotCQkgfQotCQkgZXZlbnQgPSBuZXcgTW9kZWxMaWZlY3ljbGVFdmVudChzdHJ1Y3R1cmVkTW9kZWwsIE1vZGVsTGlmZWN5Y2xlRXZlbnQuQURBUFRFUlNfTk9USUZJRUQpOwotCQkgaWYgKERFQlVHKSB7Ci0JCSBTeXN0ZW0ub3V0LnByaW50bG4oZXZlbnQpOwotCQkgfQotCQkgZXZlbnQgPSBuZXcgTW9kZWxMaWZlY3ljbGVFdmVudChzdHJ1Y3R1cmVkTW9kZWwsIE1vZGVsTGlmZWN5Y2xlRXZlbnQuTU9ERUxfUkVMT0FERUQpOwotCQkgaWYgKERFQlVHKSB7Ci0JCSBTeXN0ZW0ub3V0LnByaW50bG4oZXZlbnQpOwotCQkgfQotCQkgZXZlbnQgPSBuZXcgTW9kZWxMaWZlY3ljbGVFdmVudChzdHJ1Y3R1cmVkTW9kZWwsIE1vZGVsTGlmZWN5Y2xlRXZlbnQuTU9ERUxfUkVTT1VSQ0VfREVMRVRFRCk7Ci0JCSBpZiAoREVCVUcpIHsKLQkJIFN5c3RlbS5vdXQucHJpbnRsbihldmVudCk7Ci0JCSB9Ci0JCSBldmVudCA9IG5ldyBNb2RlbExpZmVjeWNsZUV2ZW50KHN0cnVjdHVyZWRNb2RlbCwgTW9kZWxMaWZlY3ljbGVFdmVudC5NT0RFTF9SRVNPVVJDRV9NT1ZFRCk7Ci0JCSBpZiAoREVCVUcpIHsKLQkJIFN5c3RlbS5vdXQucHJpbnRsbihldmVudCk7Ci0JCSB9Ci0JCSAqLwotCQlldmVudCA9IG5ldyBNb2RlbExpZmVjeWNsZUV2ZW50KHN0cnVjdHVyZWRNb2RlbCwgTW9kZWxMaWZlY3ljbGVFdmVudC5NT0RFTF9TQVZFRCk7Ci0JCWlmIChERUJVRykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGV2ZW50KTsKLQkJfQotCi0KLQkJLy8gaWYgZ2V0cyB0byBoZXJlIHdpdGhvdXQgZXhjZXB0aW9uLCBhc3N1bWUgb2suCi0JCWFzc2VydFRydWUodHJ1ZSk7Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGVzdE9mVGhyZWFkTG9jYWxJbXByb3ZlbWVudC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdGhyZWFkaW5nL1Rlc3RPZlRocmVhZExvY2FsSW1wcm92ZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQzZGJiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGVzdE9mVGhyZWFkTG9jYWxJbXByb3ZlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLnRocmVhZGluZzsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLQotLyoqCi0gKiBUbyBwcmludCBvdXQgdGltaW5ncywgc2V0IERFQlVHX1RFU1QgdG8gdHJ1ZSwgb3RoZXIgd2lzZSwgdGhpcyB0ZXN0IHBhc3NlcwotICogaWYgbm8gZXhjZXB0aW9ucyB0aHJvd24uCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0T2ZUaHJlYWRMb2NhbEltcHJvdmVtZW50IGV4dGVuZHMgVGVzdENhc2UgewotCS8vIG51bWJlciBvZiB0aW1lcyBhIHBhaXIgb2YgdGVzdHMgKHdpdGggYW5kIHdpdGhvdXQpIHRocmVhZCBsb2NhbCBhcmUgCi0JLy8gcmVwZWF0ZWQgKGZvciBtb3JlIGFjY3VyYXRlIGF2ZXJhZ2VzKS4KLQlpbnQgblRyaWFscyA9IDM7Ci0JSVN0cnVjdHVyZWREb2N1bWVudCBmRG9jdW1lbnQgPSBudWxsOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfVEVTVCA9IGZhbHNlOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfVEVTVF9ERVRBSUwgPSBmYWxzZTsKLQkvLyB0ZXN0cyBmcm9tIDEgdG8gTUFYX1RSRUFEUy0xIHRocmVhZHMKLQlwcml2YXRlIGludCBNQVhfVEhSRUFEUyA9IDU7Ci0JcHJpdmF0ZSBsb25nIFNMRUVQX1RJTUUgPSAwOwotCi0JcHVibGljIFRlc3RPZlRocmVhZExvY2FsSW1wcm92ZW1lbnQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzdXBlcigpOwotCX0KLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIGdldENvbnRlbnQoKSB7Ci0JCXJldHVybiAiPHRlc3Q+IiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8L3Rlc3Q+IjsKLQl9Ci0KLQlwcml2YXRlIElTdHJ1Y3R1cmVkRG9jdW1lbnQgZ2V0RG9jdW1lbnQoU3RyaW5nIGNvbnRlbnQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChmRG9jdW1lbnQgPT0gbnVsbCkgewotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQkJZkRvY3VtZW50ID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcigidGVzdFBlcmYueG1sIiwgY29udGVudCwgbnVsbCk7Ci0JCX0KLQkJcmV0dXJuIGZEb2N1bWVudDsKLQl9Ci0KLQl2b2lkIGxpbmtSdW5uZXIoZmluYWwgQm9vbGVhbiBkaXJlY3Rpb24sIElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBkb2N1bWVudDsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBwcmV2aW91c0RvY3VtZW50UmVnaW9uID0gbnVsbDsKLQkJbG9uZyBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJaW50IHN0YXJ0ID0gMDsKLQkJaW50IGxlbmd0aCA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKTsKLQkJaW50IG5SZWdpb25zID0gMDsKLQkJZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgbGVuZ3RoOyBpKyspIHsKLQkJCWludCBpbmRleCA9IGk7Ci0JCQlpZiAoIWRpcmVjdGlvbi5ib29sZWFuVmFsdWUoKSkgewotCQkJCWluZGV4ID0gKGxlbmd0aCAtIDEpIC0gaTsKLQkJCX0KLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gY3VycmVudERvY3VtZW50UmVnaW9uID0gc3RydWN0dXJlZERvY3VtZW50LmdldFJlZ2lvbkF0Q2hhcmFjdGVyT2Zmc2V0KGluZGV4KTsKLQkJCWlmIChjdXJyZW50RG9jdW1lbnRSZWdpb24gIT0gcHJldmlvdXNEb2N1bWVudFJlZ2lvbikgewotCQkJCW5SZWdpb25zKys7Ci0JCQkJcHJldmlvdXNEb2N1bWVudFJlZ2lvbiA9IGN1cnJlbnREb2N1bWVudFJlZ2lvbjsKLQkJCX0KLQkJCVRocmVhZC55aWVsZCgpOwotCQkJdHJ5IHsKLQkJCQlUaHJlYWQuc2xlZXAoU0xFRVBfVElNRSk7Ci0JCQl9Ci0JCQljYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJbG9uZyBlbmRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCWlmIChERUJVR19URVNUX0RFVEFJTCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJUaHJlYWQ6ICIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpICsgIiAgIGZyb20gIiArIGxlbmd0aCArICIgY2hhcmFjdGVycywgZm91bmQgIiArIG5SZWdpb25zICsgIiByZWdpb25zIGluICIgKyAoZW5kVGltZSAtIHN0YXJ0VGltZSkgKyAiIG1zZWNzLiIpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBsb25nIGRvdGVzdERvY3VtZW50V2Fsa2luZ1dpdGhUaHJlYWRMb2NhbChpbnQgblRocmVhZHMpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUJhc2ljU3RydWN0dXJlZERvY3VtZW50LnNldFVTRV9MT0NBTF9USFJFQUQodHJ1ZSk7Ci0JCWZEb2N1bWVudCA9IGdldERvY3VtZW50KGdldENvbnRlbnQoKSk7Ci0JCWxvbmcgc3RhcnRUaW1lT3ZlcmFsbCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlkb0RvY3VtZW50V2Fsa2luZyhuVGhyZWFkcyk7Ci0JCWxvbmcgZW5kVGltZU92ZXJhbGwgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJbG9uZyBmaW5hbE92ZXJhbGwgPSBlbmRUaW1lT3ZlcmFsbCAtIHN0YXJ0VGltZU92ZXJhbGw7Ci0JCWlmIChERUJVR19URVNUX0RFVEFJTCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJPdmVyYWxsIHRpbWUgdXNpbmcgTG9jYWxfVGhyZWFkOiAiICsgZmluYWxPdmVyYWxsKTsKLQkJfQotCQlyZXR1cm4gZmluYWxPdmVyYWxsOwotCX0KLQotCXByaXZhdGUgbG9uZyBkb3Rlc3REb2N1bWVudFdhbGtpbmdXaXRob3V0VGhyZWFkTG9jYWwoaW50IG5UaHJlYWRzKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5zZXRVU0VfTE9DQUxfVEhSRUFEKGZhbHNlKTsKLQkJZkRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoZ2V0Q29udGVudCgpKTsKLQkJbG9uZyBzdGFydFRpbWVPdmVyYWxsID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCWRvRG9jdW1lbnRXYWxraW5nKG5UaHJlYWRzKTsKLQkJbG9uZyBlbmRUaW1lT3ZlcmFsbCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlsb25nIGZpbmFsT3ZlcmFsbCA9IGVuZFRpbWVPdmVyYWxsIC0gc3RhcnRUaW1lT3ZlcmFsbDsKLQkJaWYgKERFQlVHX1RFU1RfREVUQUlMKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIk92ZXJhbGwgdGltZSBOT1QgdXNpbmcgTG9jYWxfVGhyZWFkOiAiICsgZmluYWxPdmVyYWxsKTsKLQkJfQotCQlyZXR1cm4gZmluYWxPdmVyYWxsOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb0RvY3VtZW50V2Fsa2luZyhpbnQgblRocmVhZHMpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVRocmVhZFtdIHRocmVhZHMgPSBuZXcgVGhyZWFkW25UaHJlYWRzXTsKLQkJYm9vbGVhbiB0b2dnbGUgPSB0cnVlOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHRocmVhZHMubGVuZ3RoOyBpKyspIHsKLQkJCWZpbmFsIEJvb2xlYW4gZGlyZWN0aW9uID0gbmV3IEJvb2xlYW4odG9nZ2xlKTsKLQkJCXRvZ2dsZSA9ICF0b2dnbGU7Ci0JCQlUaHJlYWRHcm91cCB0aHJlYWRHcm91cCA9IG5ldyBUaHJlYWRHcm91cCgic3NlIHVuaXQgdGVzdHMiKTsKLQkJCVRocmVhZCB0aHJlYWQgPSBuZXcgVGhyZWFkKHRocmVhZEdyb3VwLCBuZXcgUnVubmFibGUoKSB7Ci0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlsaW5rUnVubmVyKGRpcmVjdGlvbiwgZkRvY3VtZW50KTsKLQkJCQl9Ci0JCQl9LCAoInNzZSB1bml0IHRlc3QgdGhyZWFkICIgKyBpKSk7Ci0JCQkvLyBJIHVzZWQgTUlOX1BSSU9SSVRZIHNpbmNlIHRoYXQgbWFrZXMgaXQgZWFzaWVyIHRvICJzZWUiIGluIGRlYnVnZ2VyIGxpc3Qgb2YgdGhyZWFkcwotCQkJdGhyZWFkLnNldFByaW9yaXR5KFRocmVhZC5NSU5fUFJJT1JJVFkpOwotCQkJdGhyZWFkc1tpXSA9IHRocmVhZDsKLQkJfQotCQlmb3IgKGludCBpID0gMDsgaSA8IHRocmVhZHMubGVuZ3RoOyBpKyspIHsKLQkJCXRocmVhZHNbaV0uc3RhcnQoKTsKLQkJfQotCQl0cnkgewotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0aHJlYWRzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJdGhyZWFkc1tpXS5qb2luKCk7Ci0KLQkJCX0KLQkJfQotCQljYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROVGhyZWFkcygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWZvciAoaW50IGkgPSAxOyBpIDwgTUFYX1RIUkVBRFM7IGkrKykgewotCQkJaW50IG5UaHJlYWRzID0gaTsKLQkJCWlmIChERUJVR19URVNUX0RFVEFJTCkgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiID4+Pj4tLS0tIE4gVGhyZWFkczogIiArIGkpOwotCQkJfQotCQkJZmxvYXQgd29DdW1tID0gMDsKLQkJCWZsb2F0IHdDdW1tID0gMDsKLQotCQkJZm9yIChpbnQgaiA9IDA7IGogPCBuVHJpYWxzOyBqKyspIHsKLQkJCQl3b0N1bW0gPSB3b0N1bW0gKyBkb3Rlc3REb2N1bWVudFdhbGtpbmdXaXRob3V0VGhyZWFkTG9jYWwoblRocmVhZHMpOwotCQkJCXdDdW1tID0gd0N1bW0gKyBkb3Rlc3REb2N1bWVudFdhbGtpbmdXaXRoVGhyZWFkTG9jYWwoblRocmVhZHMpOwotCQkJfQotCQkJZmxvYXQgYXZlcmFnZVdPID0gd29DdW1tIC8gblRyaWFsczsKLQkJCWZsb2F0IGF2ZXJhZ2VXID0gd0N1bW0gLyBuVHJpYWxzOwotCQkJZmxvYXQgcGVyVGhyZWFkV08gPSBhdmVyYWdlV08gLyBuVGhyZWFkczsKLQkJCWZsb2F0IHBlclRocmVhZFcgPSBhdmVyYWdlVyAvIG5UaHJlYWRzOwotCQkJaW50IHJvdW5kZWRXTyA9IG5ldyBGbG9hdChwZXJUaHJlYWRXTykuaW50VmFsdWUoKTsKLQkJCWludCByb3VuZGVkVyA9IG5ldyBGbG9hdChwZXJUaHJlYWRXKS5pbnRWYWx1ZSgpOwotCQkJaWYgKERFQlVHX1RFU1QpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkF2ZXJhZ2UgcGVyIHRocmVhZDogd2l0aG91dDogIiArIHJvdW5kZWRXTyArICIgd2l0aDogIiArIHJvdW5kZWRXKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiA8PDw8PC0tLS0gTiBUaHJlYWRzOiAiICsgaSk7Ci0JCQl9Ci0JCX0KLQkJLy8gaWYgZ2V0cyB0byBoZXJlICh3aXRoIG5vIGV4Y2VwdGlvbnMpIGFsbCBpcyBvay4KLQkJYXNzZXJ0VHJ1ZSgwID09IDApOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGVzdE9mVGhyZWFkTG9jYWxXaXRoQ2hhbmdlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdGhyZWFkaW5nL1Rlc3RPZlRocmVhZExvY2FsV2l0aENoYW5nZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjljYzZiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGVzdE9mVGhyZWFkTG9jYWxXaXRoQ2hhbmdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLnRocmVhZGluZzsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5CYXNpY1N0cnVjdHVyZWREb2N1bWVudDsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3Mgc3RhcnRlZCBvZmYgYXMgY29weSBvZiBUZXN0T2ZUaHJlYWRMb2NhbEltcHJvdmVtZW50cywgYW5kIEkganVzdAotICogYWRkZWQgYW5vdGhlciB0aHJlYWQgd2l0aCBtb2RpZmllcyB0aGUgZG9jdW1lbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0T2ZUaHJlYWRMb2NhbFdpdGhDaGFuZ2VzIGV4dGVuZHMgVGVzdENhc2UgewotCS8vIG51bWJlciBvZiB0aW1lcyBhIHBhaXIgb2YgdGVzdHMgKHdpdGggYW5kIHdpdGhvdXQpIHRocmVhZCBsb2NhbCBhcmUKLQkvLyByZXBlYXRlZCAoZm9yIG1vcmUgYWNjdXJhdGUgYXZlcmFnZXMpLgotCWludCBuVHJpYWxzID0gMzsKLQlJU3RydWN0dXJlZERvY3VtZW50IGZEb2N1bWVudCA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19URVNUX0RFVEFJTCA9IGZhbHNlOwotCS8vIHRlc3RzIGZyb20gMSB0byBNQVhfVFJFQURTLTEgdGhyZWFkcwotCXByaXZhdGUgaW50IE1BWF9USFJFQURTID0gMTQ7Ci0JcHJpdmF0ZSBsb25nIFNMRUVQX1RJTUUgPSAyOwotCXByaXZhdGUgaW50IE5fQ0hBTkdFUyA9IDEwMDAwOwotCi0JcHVibGljIFRlc3RPZlRocmVhZExvY2FsV2l0aENoYW5nZXMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzdXBlcigpOwotCX0KLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIGdldENvbnRlbnQoKSB7Ci0JCXJldHVybiAiPHRlc3Q+IiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8L3Rlc3Q+IjsKLQl9Ci0KLQlwcml2YXRlIElTdHJ1Y3R1cmVkRG9jdW1lbnQgZ2V0RG9jdW1lbnQoU3RyaW5nIGNvbnRlbnQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChmRG9jdW1lbnQgPT0gbnVsbCkgewotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQkJZkRvY3VtZW50ID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcigidGVzdFBlcmYueG1sIiwgY29udGVudCwgbnVsbCk7Ci0JCX0KLQkJcmV0dXJuIGZEb2N1bWVudDsKLQl9Ci0KLQl2b2lkIGxpbmtSdW5uZXIoZmluYWwgQm9vbGVhbiBkaXJlY3Rpb24sIElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBkb2N1bWVudDsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBwcmV2aW91c0RvY3VtZW50UmVnaW9uID0gbnVsbDsKLQkJbG9uZyBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJaW50IHN0YXJ0ID0gMDsKLQkJaW50IGxlbmd0aCA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKTsKLQkJaW50IG5SZWdpb25zID0gMDsKLQkJLy8gSSBtYWRlIGxlbmd0aCAiZHluYW1pYyIgYWZ0ZXIgYWRkaW5nIG1vZGlmaWNhdGlvbiB0aHJlYWQKLQkJZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpOyBpKyspIHsKLQkJCWludCBpbmRleCA9IGk7Ci0JCQlpZiAoIWRpcmVjdGlvbi5ib29sZWFuVmFsdWUoKSkgewotCQkJCWludCBjdXJyZW50TGVuZ3RoID0gc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpOwotCQkJCWluZGV4ID0gKGN1cnJlbnRMZW5ndGggLSAxKSAtIGk7Ci0JCQl9Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGN1cnJlbnREb2N1bWVudFJlZ2lvbiA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRSZWdpb25BdENoYXJhY3Rlck9mZnNldChpbmRleCk7Ci0JCQlpZiAoY3VycmVudERvY3VtZW50UmVnaW9uICE9IHByZXZpb3VzRG9jdW1lbnRSZWdpb24pIHsKLQkJCQluUmVnaW9ucysrOwotCQkJCXByZXZpb3VzRG9jdW1lbnRSZWdpb24gPSBjdXJyZW50RG9jdW1lbnRSZWdpb247Ci0JCQl9Ci0JCQlUaHJlYWQueWllbGQoKTsKLQkJCXRyeSB7Ci0JCQkJVGhyZWFkLnNsZWVwKFNMRUVQX1RJTUUpOwotCQkJfQotCQkJY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCWxvbmcgZW5kVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlpZiAoREVCVUdfVEVTVF9ERVRBSUwpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGhyZWFkOiAiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSArICIgICBmcm9tICIgKyBsZW5ndGggKyAiIGNoYXJhY3RlcnMsIGZvdW5kICIgKyBuUmVnaW9ucyArICIgcmVnaW9ucyBpbiAiICsgKGVuZFRpbWUgLSBzdGFydFRpbWUpICsgIiBtc2Vjcy4iKTsKLQkJfQotCX0KLQotCXByaXZhdGUgbG9uZyBkb3Rlc3REb2N1bWVudFdhbGtpbmdXaXRoVGhyZWFkTG9jYWwoaW50IG5UaHJlYWRzKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5zZXRVU0VfTE9DQUxfVEhSRUFEKHRydWUpOwotCQlmRG9jdW1lbnQgPSBnZXREb2N1bWVudChnZXRDb250ZW50KCkpOwotCQlsb25nIHN0YXJ0VGltZU92ZXJhbGwgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJZG9Eb2N1bWVudFdhbGtpbmcoblRocmVhZHMpOwotCQlsb25nIGVuZFRpbWVPdmVyYWxsID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCWxvbmcgZmluYWxPdmVyYWxsID0gZW5kVGltZU92ZXJhbGwgLSBzdGFydFRpbWVPdmVyYWxsOwotCQlpZiAoREVCVUdfVEVTVF9ERVRBSUwpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiT3ZlcmFsbCB0aW1lIHVzaW5nIExvY2FsX1RocmVhZDogIiArIGZpbmFsT3ZlcmFsbCk7Ci0JCX0KLQkJcmV0dXJuIGZpbmFsT3ZlcmFsbDsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9Eb2N1bWVudFdhbGtpbmcoaW50IG5UaHJlYWRzKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlUaHJlYWRbXSB0aHJlYWRzID0gbmV3IFRocmVhZFtuVGhyZWFkc107Ci0JCWJvb2xlYW4gdG9nZ2xlID0gdHJ1ZTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0aHJlYWRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlmaW5hbCBCb29sZWFuIGRpcmVjdGlvbiA9IG5ldyBCb29sZWFuKHRvZ2dsZSk7Ci0JCQkvLyB0b2dnbGUgY29udHJvbHMgd2hldGhlciBtb3ZlcyBmcm9tIHN0YXJ0IHRvIGVuZCwgb3IgZW5kIHRvIHN0YXJ0Ci0JCQkvLyBvZiBkb2N1bWVudC4KLQkJCXRvZ2dsZSA9ICF0b2dnbGU7Ci0JCQlUaHJlYWRHcm91cCB0aHJlYWRHcm91cCA9IG5ldyBUaHJlYWRHcm91cCgidW5pdCB0ZXN0cyIpOwotCQkJVGhyZWFkIHRocmVhZCA9IG5ldyBUaHJlYWQodGhyZWFkR3JvdXAsIG5ldyBSdW5uYWJsZSgpIHsKLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCWxpbmtSdW5uZXIoZGlyZWN0aW9uLCBmRG9jdW1lbnQpOwotCQkJCX0KLQkJCX0sICgic3NlIHVuaXQgdGVzdCB0aHJlYWQgIiArIGkpKTsKLQkJCS8vIEkgdXNlZCBNSU5fUFJJT1JJVFkgc2luY2UgdGhhdCBtYWtlcyBpdCBlYXNpZXIgdG8gInNlZSIgaW4KLQkJCS8vIGRlYnVnZ2VyIGxpc3Qgb2YgdGhyZWFkcwotCQkJdGhyZWFkLnNldFByaW9yaXR5KFRocmVhZC5NSU5fUFJJT1JJVFkpOwotCQkJdGhyZWFkc1tpXSA9IHRocmVhZDsKLQkJfQotCQlmb3IgKGludCBpID0gMDsgaSA8IHRocmVhZHMubGVuZ3RoOyBpKyspIHsKLQkJCXRocmVhZHNbaV0uc3RhcnQoKTsKLQkJfQotCQkvLyBub3cgdGhhdCAicmVhZGVycyIgaGF2ZSBzdGFydGVkLCB3ZSdsbCBzdGFydCBhIG1vZGlmaWNhdGlvbiB0aHJlYWQKLQkJLy8gdG9vCi0JCVRocmVhZCBtb2RpZnlpbmdUaHJlYWQgPSBuZXcgVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQltb2RpZml5RG9jdW1lbnQoZkRvY3VtZW50KTsKLQkJCX0KLQkJfSwgKCJzc2UgdW5pdCB0ZXN0IG1vZGlmaWNhdGlvbiB0aHJlYWQgIikpOwotCQkvLyBJIHVzZWQgTUFYX1BSSU9SSVRZIHRvIGJlIHN1cmUgbG90cyBvZiBtb2RpZmljYXRpb25zIHRha2UgcGxhY2UKLQkJbW9kaWZ5aW5nVGhyZWFkLnNldFByaW9yaXR5KFRocmVhZC5NSU5fUFJJT1JJVFkpOwotCQltb2RpZnlpbmdUaHJlYWQuc3RhcnQoKTsKLQkJdHJ5IHsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdGhyZWFkcy5sZW5ndGg7IGkrKykgewotCQkJCXRocmVhZHNbaV0uam9pbigpOwotCQkJfQotCQkJbW9kaWZ5aW5nVGhyZWFkLmpvaW4oKTsKLQkJfQotCQljYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCXZvaWQgbW9kaWZpeURvY3VtZW50KElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQpIHsKLQkJUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBOX0NIQU5HRVMgKyAxOyBpKyspIHsKLQkJCWludCByYW5kb21PZmZzZXQgPSByYW5kb20ubmV4dEludChkb2N1bWVudC5nZXRMZW5ndGgoKSk7Ci0JCQkvLyAxMDAganVzdCBzZWVtcyBsaWtlIGEgZ29vZCBtYXhpbXVtIGxlbmd0aCB0byByZXBsYWNlCi0JCQkvLyAoY291bGQgcGxheSB3aXRoIGluIGZ1dHVyZSkuCi0JCQlpbnQgcmFuZG9tTGVuZ3RoID0gcmFuZG9tLm5leHRJbnQoMTAwKTsKLQkJCS8vIGlmIHdlICJhY2NpZGVudGx5IiBnZXQgbW9yZSB0aGFuIHRoZSBsZW5ndGgsIGp1c3Qgc2tpcGl0Ci0JCQlpZiAocmFuZG9tT2Zmc2V0ICsgcmFuZG9tTGVuZ3RoIDwgZG9jdW1lbnQuZ2V0TGVuZ3RoKCkpIHsKLQkJCQlkb2N1bWVudC5yZXBsYWNlVGV4dCh0aGlzLCByYW5kb21PZmZzZXQsIHJhbmRvbUxlbmd0aCwgInRlc3Rpbmd0ZXh0Iik7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TlRocmVhZHMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlmb3IgKGludCBpID0gMTsgaSA8IE1BWF9USFJFQURTOyBpKyspIHsKLQkJCWludCBuVGhyZWFkcyA9IGk7Ci0JCQlpZiAoREVCVUdfVEVTVF9ERVRBSUwpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiA+Pj4+LS0tLSBOIFRocmVhZHM6ICIgKyBpKTsKLQkJCX0KLQkJCWZsb2F0IHdDdW1tID0gMDsKLQkJCWZvciAoaW50IGogPSAwOyBqIDwgblRyaWFsczsgaisrKSB7Ci0JCQkJd0N1bW0gPSB3Q3VtbSArIGRvdGVzdERvY3VtZW50V2Fsa2luZ1dpdGhUaHJlYWRMb2NhbChuVGhyZWFkcyk7Ci0JCQl9Ci0JCX0KLQkJLy8gaWYgZ2V0cyB0byBoZXJlICh3aXRoIG5vIGV4Y2VwdGlvbnMpIGFsbCBpcyBvay4KLQkJYXNzZXJ0VHJ1ZSgwID09IDApOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGhyZWFkTG9jYWxFeGFtcGxlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGhyZWFkTG9jYWxFeGFtcGxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0N2QwMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdGhyZWFkaW5nL1RocmVhZExvY2FsRXhhbXBsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMudGhyZWFkaW5nOwotCi1pbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKLQotLyoqCi0gKiBTZWUgaHR0cDovL2phdmEuc3VuLmNvbS9kZXZlbG9wZXIvSkRDVGVjaFRpcHMvMjAwMy90dDEyMDguaHRtbCMyIGZvcgotICogaW5mb3JtYXRpdmUgYXJ0aWNsZS4KLSAqLwotcHVibGljIGNsYXNzIFRocmVhZExvY2FsRXhhbXBsZSB7Ci0KLQkvLyBDcmVhdGUgdGhyZWFkIGxvY2FsIGNsYXNzCi0JLy8gSW5pdGlhbCB2YWx1ZSBpcyBhIHJhbmRvbSBudW1iZXIgZnJvbSAwLTk5OQotCXByaXZhdGUgc3RhdGljIGNsYXNzIE15VGhyZWFkTG9jYWwgZXh0ZW5kcyBUaHJlYWRMb2NhbCB7Ci0JCXByaXZhdGUgUmFuZG9tIGlubmVyUmFuZG9tID0gbmV3IFJhbmRvbSgpOwotCi0JCXByb3RlY3RlZCBPYmplY3QgaW5pdGlhbFZhbHVlKCkgewotCQkJcmV0dXJuIG5ldyBJbnRlZ2VyKGlubmVyUmFuZG9tLm5leHRJbnQoMTAwMCkpOwotCQl9Ci0JfQotCi0JLy8gQ3JlYXRlIGNsYXNzIHZhcmlhYmxlCi0Jc3RhdGljIHZvbGF0aWxlIGludCBjb3VudGVyID0gMDsKLQotCS8vIERlZmluZS9jcmVhdGUgdGhyZWFkIGxvY2FsIHZhcmlhYmxlCi0Jc3RhdGljIFRocmVhZExvY2FsIHRocmVhZExvY2FsID0gbmV3IE15VGhyZWFkTG9jYWwoKTsKLQotCS8vIEZvciByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24KLQkvLyBzdGF0aWMgUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oKTsKLQotCS8vIERpc3BsYXlzIHRocmVhZCBsb2NhbCB2YXJpYWJsZSwgY291bnRlciwKLQkvLyBhbmQgdGhyZWFkIG5hbWUKLQlzdGF0aWMgdm9pZCBkaXNwbGF5VmFsdWVzKCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4odGhyZWFkTG9jYWwuZ2V0KCkgKyAiXHQiICsgY291bnRlciArICJcdCIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldE5hbWUoKSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewotCi0JCS8vIEVhY2ggdGhyZWFkIGluY3JlbWVudHMgY291bnRlcgotCQkvLyBEaXNwbGF5cyB2YXJpYWJsZSBpbmZvCi0JCS8vIEFuZCBzbGVlcHMgZm9yIHRoZSByYW5kb20gYW1vdW50IG9mIHRpbWUKLQkJLy8gQmVmb3JlIGRpc3BsYXlpbmcgaW5mbyBhZ2FpbgotCQlSdW5uYWJsZSBydW5uZXIgPSBuZXcgUnVubmFibGUoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJc3luY2hyb25pemVkIChUaHJlYWRMb2NhbEV4YW1wbGUuY2xhc3MpIHsKLQkJCQkJY291bnRlcisrOwotCQkJCX0KLQkJCQlkaXNwbGF5VmFsdWVzKCk7Ci0JCQkJdHJ5IHsKLQkJCQkJVGhyZWFkLnNsZWVwKCgoSW50ZWdlcikgdGhyZWFkTG9jYWwuZ2V0KCkpLmludFZhbHVlKCkpOwotCQkJCQlkaXNwbGF5VmFsdWVzKCk7Ci0JCQkJfQotCQkJCWNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJfQotCQkJfQotCQl9OwotCi0JCS8vIEFub3RoZXIgaW5zdGFuY2Ugb2YgY2xhc3MgY3JlYXRlZAotCQkvLyBhbmQgdmFsdWVzIGRpc3BsYXllZAotCQlkaXNwbGF5VmFsdWVzKCk7Ci0KLQkJLy8gSGVyZSdzIHdoZXJlIHRoZSBvdGhlciB0aHJlYWRzCi0JCS8vIGFyZSBhY3R1YWxseSBjcmVhdGVkCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSB7Ci0JCQlUaHJlYWQgdCA9IG5ldyBUaHJlYWQocnVubmVyKTsKLQkJCXQuc3RhcnQoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqICAKLQkgKi8KLQlwdWJsaWMgVGhyZWFkTG9jYWxFeGFtcGxlKCkgewotCQlzdXBlcigpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGhyZWFkTG9jYWxJbnN0YW5jZUV4YW1wbGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL3RocmVhZGluZy9UaHJlYWRMb2NhbEluc3RhbmNlRXhhbXBsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDA4ZjU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL3RocmVhZGluZy9UaHJlYWRMb2NhbEluc3RhbmNlRXhhbXBsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMudGhyZWFkaW5nOwotCi1pbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKLQotLyoqCi0gKiBTZWUgaHR0cDovL2phdmEuc3VuLmNvbS9kZXZlbG9wZXIvSkRDVGVjaFRpcHMvMjAwMy90dDEyMDguaHRtbCMyIGZvcgotICogaW5mb3JtYXRpdmUgYXJ0aWNsZS4KLSAqLwotcHVibGljIGNsYXNzIFRocmVhZExvY2FsSW5zdGFuY2VFeGFtcGxlIHsKLQotCS8vIENyZWF0ZSB0aHJlYWQgbG9jYWwgY2xhc3MKLQkvLyBJbml0aWFsIHZhbHVlIGlzIGEgcmFuZG9tIG51bWJlciBmcm9tIDAtOTk5Ci0JcHJpdmF0ZSBjbGFzcyBNeVRocmVhZExvY2FsIGV4dGVuZHMgVGhyZWFkTG9jYWwgewotCQlwcml2YXRlIFJhbmRvbSBpbm5lclJhbmRvbSA9IG5ldyBSYW5kb20oKTsKLQotCQlwcm90ZWN0ZWQgT2JqZWN0IGluaXRpYWxWYWx1ZSgpIHsKLQkJCXJldHVybiBuZXcgSW50ZWdlcihpbm5lclJhbmRvbS5uZXh0SW50KDEwMDApKTsKLQkJfQotCX0KLQotCS8vIENyZWF0ZSBjbGFzcyB2YXJpYWJsZQotCXN0YXRpYyB2b2xhdGlsZSBpbnQgY291bnRlciA9IDA7Ci0KLQkvLyBEZWZpbmUvY3JlYXRlIHRocmVhZCBsb2NhbCB2YXJpYWJsZQotCVRocmVhZExvY2FsIHRocmVhZExvY2FsID0gbmV3IE15VGhyZWFkTG9jYWwoKTsKLQotCS8vIEZvciByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24KLQkvLyBzdGF0aWMgUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oKTsKLQotCS8vIERpc3BsYXlzIHRocmVhZCBsb2NhbCB2YXJpYWJsZSwgY291bnRlciwKLQkvLyBhbmQgdGhyZWFkIG5hbWUKLQl2b2lkIGRpc3BsYXlWYWx1ZXMoKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbih0aHJlYWRMb2NhbC5nZXQoKSArICJcdCIgKyBjb3VudGVyICsgIlx0IiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7Ci0JCW5ldyBUaHJlYWRMb2NhbEluc3RhbmNlRXhhbXBsZSgpLnN0YXJ0UnVuKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHN0YXJ0UnVuKCkgewotCi0JCS8vIEVhY2ggdGhyZWFkIGluY3JlbWVudHMgY291bnRlcgotCQkvLyBEaXNwbGF5cyB2YXJpYWJsZSBpbmZvCi0JCS8vIEFuZCBzbGVlcHMgZm9yIHRoZSByYW5kb20gYW1vdW50IG9mIHRpbWUKLQkJLy8gQmVmb3JlIGRpc3BsYXlpbmcgaW5mbyBhZ2FpbgotCQlSdW5uYWJsZSBydW5uZXIgPSBuZXcgUnVubmFibGUoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJc3luY2hyb25pemVkICh0aGlzKSB7Ci0JCQkJCWNvdW50ZXIrKzsKLQkJCQl9Ci0JCQkJZGlzcGxheVZhbHVlcygpOwotCQkJCXRyeSB7Ci0JCQkJCVRocmVhZC5zbGVlcCgoKEludGVnZXIpIHRocmVhZExvY2FsLmdldCgpKS5pbnRWYWx1ZSgpKTsKLQkJCQkJZGlzcGxheVZhbHVlcygpOwotCQkJCX0KLQkJCQljYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCX0KLQkJCX0KLQkJfTsKLQotCQkvLyBBbm90aGVyIGluc3RhbmNlIG9mIGNsYXNzIGNyZWF0ZWQKLQkJLy8gYW5kIHZhbHVlcyBkaXNwbGF5ZWQKLQkJZGlzcGxheVZhbHVlcygpOwotCi0JCS8vIEhlcmUncyB3aGVyZSB0aGUgb3RoZXIgdGhyZWFkcwotCQkvLyBhcmUgYWN0dWFsbHkgY3JlYXRlZAotCQlmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykgewotCQkJVGhyZWFkIHQgPSBuZXcgVGhyZWFkKHJ1bm5lcik7Ci0JCQl0LnN0YXJ0KCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiAgCi0JICovCi0JcHVibGljIFRocmVhZExvY2FsSW5zdGFuY2VFeGFtcGxlKCkgewotCQlzdXBlcigpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExZDhkYzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0Ci0JbmFtZT0idGVzdHN1aXRlIgotCWRlZmF1bHQ9InJ1biIKLQliYXNlZGlyPSIuIj4KLQk8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotCTwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0JPCEtLSA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfVwuLlwuLiIgLz4gLS0+Ci0KLQk8ZWNobyBtZXNzYWdlPSJiYXNlZGlyICR7YmFzZWRpcn0iIC8+Ci0JPGVjaG8gbWVzc2FnZT0iZWNsaXBzZSBwbGFjZSAke2VjbGlwc2UtaG9tZX0iIC8+Ci0KLQk8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgcGx1Z2luLW5hbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9InBsdWdpbi1uYW1lIgotCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzIiAvPgotCTxwcm9wZXJ0eQotCQluYW1lPSJsaWJyYXJ5LWZpbGUiCi0JCXZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotCTwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0JPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJpbml0Ij4KLQkJPHRzdGFtcCAvPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQKLQkJCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLQkJCQlpbmNsdWRlcz0ib3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLip4bWwiIC8+Ci0JCTwvZGVsZXRlPgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLQk8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQkJPHByb3BlcnR5Ci0JCQluYW1lPSJ3c3QtZm9sZGVyIgotCQkJdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93c3RfZm9sZGVyIiAvPgotCQk8ZGVsZXRlCi0JCQlkaXI9IiR7d3N0LWZvbGRlcn0iCi0JCQlxdWlldD0idHJ1ZSIgLz4KLQkJPGFudAotCQkJdGFyZ2V0PSJjb3JlLXRlc3QiCi0JCQlhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0JCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJkYXRhLWRpciIKLQkJCQl2YWx1ZT0iJHt3c3QtZm9sZGVyfSIgLz4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9InBsdWdpbi1uYW1lIgotCQkJCXZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9ImNsYXNzbmFtZSIKLQkJCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLlNTRU1vZGVsVGVzdFN1aXRlIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0icGx1Z2luLXBhdGgiCi0JCQkJdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLQk8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLQkJPCEtLTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPi0tPgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLQk8dGFyZ2V0Ci0JCW5hbWU9InJ1biIKLQkJZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLQkJPGFudAotCQkJdGFyZ2V0PSJjb2xsZWN0IgotCQkJYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotCQkJZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iaW5jbHVkZXMiCi0JCQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy4qeG1sIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0ib3V0cHV0LWZpbGUiCi0JCQkJdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLQkJPC9hbnQ+Ci0JCTwhLS0JCTxlbWFpbFJlc3VsdHMgcmVzdWx0c0ZpbGU9IiR7YnVpbGQtcmVzdWx0cy1ob21lfS8ke3BsdWdpbi1uYW1lfS54bWwiIGFkZHJlc3NsaXN0PSJkYXZpZF93aWxsaWFtc0B1cy5pYm0uY29tIiAvPiAtLT4KLQk8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MWM4ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTA3N2E0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYmluCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0MTc1MTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+PC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzdkMTBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNGcmkgTWFyIDI1IDE3OjM0OjAxIEVTVCAyMDA1Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvL2RhdGEvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZD1VVEY4CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1ZjZjYzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogVGVzdCBQbHVnLWluCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHM7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDAuNy4wCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWwuVGVzdFBsdWdpbgotQnVuZGxlLVZlbmRvcjogSUJNCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWwsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5yZXNvbHZlci50b29scy50ZXN0cy5pbnRlcm5hbCwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnVyaXJlc29sdmVyLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmp1bml0LAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuYXBhY2hlLnhlcmNlcywKLSBvcmcuZWNsaXBzZS54c2QKLUVjbGlwc2UtQXV0b1N0YXJ0OiB0cnVlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjZiOTZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci08Ym9keSBsYW5nPSJFTi1VUyI+Ci08aDI+QWJvdXQgVGhpcyBDb250ZW50PC9oMj4KLSAKLTxwPkZlYnJ1YXJ5IDI0LCAyMDA1PC9wPgkKLTxoMz5MaWNlbnNlPC9oMz4KLQotPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluICgmcXVvdDtDb250ZW50JnF1b3Q7KS4gIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQotRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KLQotPHA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCZxdW90O1JlZGlzdHJpYnV0b3ImcXVvdDspIGFuZCBkaWZmZXJlbnQgdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5Ci1hcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuICBDaGVjayB0aGUgUmVkaXN0cmlidXRvcidzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gIElmIG5vIHN1Y2ggbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuICBVbmxlc3Mgb3RoZXJ3aXNlCi1pbmRpY2F0ZWQgYmVsb3csIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudC48L3A+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmZmMzZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotc291cmNlLmNhdGFsb2d0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuY2F0YWxvZ3Rlc3RzLmphciA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IGFjdHVhbF9yZXN1bHRzLyxcCi0gICAgICAgICAgICAgICBkYXRhLyxcCi0gICAgICAgICAgICAgICBqYXJzLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBjYXRhbG9ndGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLQotc3JjLmluY2x1ZGVzID0gYWN0dWFsX3Jlc3VsdHMvCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDczN2JhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRUxFTUVOVCBJbnZvaWNlIChIZWFkZXIsSXRlbSspPgotPCFFTEVNRU5UIEhlYWRlciAoRGF0ZSxCaWxsVG8pPgotPCFBVFRMSVNUIEhlYWRlcgotIGludm9pY2VOdW1iZXIgQ0RBVEEgI1JFUVVJUkVECi0+Ci08IUVMRU1FTlQgSXRlbSAoZGVzY3JpcHRpb24qKT4KLTwhQVRUTElTVCBJdGVtCi0gcHJpY2UgQ0RBVEEgI1JFUVVJUkVECi0gZGlzY291bnQgKHByb21vdGlvbiB8IHJlZ3VsYXIpICJyZWd1bGFyIgotPgotPCFFTEVNRU5UIERhdGUgKChNb250aCxEYXksWWVhcil8KERheSxNb250aCxZZWFyKSk+Ci08IUVMRU1FTlQgQmlsbFRvIChBZGRyZXNzKT4KLTwhQVRUTElTVCBCaWxsVG8KLSBjdXN0TnVtYmVyIElEICNSRVFVSVJFRAotIG5hbWUgQ0RBVEEgI0lNUExJRUQKLSBwaG9uZSBDREFUQSAjSU1QTElFRAotPgotPCFFTEVNRU5UIGRlc2NyaXB0aW9uICgjUENEQVRBKT4KLTwhRUxFTUVOVCBBZGRyZXNzIChzdHJlZXQxLHN0cmVldDI/LGNpdHksKHN0YXRlfHByb3ZpbmNlKSx6aXAsY291bnRyeT8pPgotPCFFTEVNRU5UIHN0cmVldDEgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIHN0cmVldDIgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIGNpdHkgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIHN0YXRlICgjUENEQVRBKT4KLTwhRUxFTUVOVCBwcm92aW5jZSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgemlwICgjUENEQVRBKT4KLTwhRUxFTUVOVCBjb3VudHJ5ICgjUENEQVRBKT4KLTwhRUxFTUVOVCBNb250aCAoI1BDREFUQSk+Ci08IUVMRU1FTlQgRGF5ICgjUENEQVRBKT4KLTwhRUxFTUVOVCBZZWFyICgjUENEQVRBKT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL0ludm9pY2UvSW52b2ljZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9JbnZvaWNlL0ludm9pY2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWZlMzk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL0ludm9pY2UvSW52b2ljZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIEludm9pY2UgUFVCTElDICJJbnZvaWNlSWRfdGVzdCIgIkludm9pY2UuZHRkIiA+Ci08SW52b2ljZT4KLSAgPEhlYWRlciBpbnZvaWNlTnVtYmVyPSIxMjM0NSI+Ci0gICAgPERhdGU+Ci0gICAgICA8TW9udGg+SnVseTwvTW9udGg+Ci0gICAgICA8RGF5PjE1PC9EYXk+Ci0gICAgICA8WWVhcj4yMDAxPC9ZZWFyPgotICAgIDwvRGF0ZT4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXI9Ilg1NzM5IiBuYW1lPSJNaWx0b24gTWNHb28iIHBob25lPSI0MTYtNDQ4LTQ0MTQiPgotICAgICAgPEFkZHJlc3M+Ci0gICAgICAgIDxzdHJlZXQxPklCTTwvc3RyZWV0MT4KLSAgICAgICAgPHN0cmVldDI+MTE1MCBFZ2xpbnRvbiBBdmUgRWFzdDwvc3RyZWV0Mj4KLSAgICAgICAgPGNpdHk+VG9yb250bzwvY2l0eT4KLSAgICAgICAgPHN0YXRlPk9udGFyaW88L3N0YXRlPgotICAgICAgICA8emlwPk0zQyAxSDc8L3ppcD4KLSAgICAgICAgPGNvdW50cnk+Q2FuYWRhPC9jb3VudHJ5PgotICAgICAgPC9BZGRyZXNzPgotICAgIDwvQmlsbFRvPgotICA8L0hlYWRlcj4KLSAgPEl0ZW0gZGlzY291bnQ9InByb21vdGlvbiIgcHJpY2U9IjU3Ij4KLSAgICA8ZGVzY3JpcHRpb24+aGlnaCBzcGVlZCAzRCBncmFwaGljcyBjYXJkPC9kZXNjcmlwdGlvbj4KLSAgPC9JdGVtPgotPC9JbnZvaWNlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUGVyc29uYWwvcGVyc29uYWwtc2NoZW1hLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLXNjaGVtYS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyZjcyNWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUGVyc29uYWwvcGVyc29uYWwtc2NoZW1hLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cGVyc29ubmVsIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JICAgeHNpOm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb249J3BlcnNvbmFsLnhzZCc+Ci0KLSAgPHBlcnNvbiBpZD0iQmlnLkJvc3MiID4KLSAgICA8bmFtZT48ZmFtaWx5PkJvc3M8L2ZhbWlseT4gPGdpdmVuPkJpZzwvZ2l2ZW4+PC9uYW1lPgotICAgIDxlbWFpbD5jaGllZkBmb28uY29tPC9lbWFpbD4KLSAgICA8bGluayBzdWJvcmRpbmF0ZXM9Im9uZS53b3JrZXIgdHdvLndvcmtlciB0aHJlZS53b3JrZXIgZm91ci53b3JrZXIgZml2ZS53b3JrZXIiLz4KLSAgPC9wZXJzb24+Ci0KLSAgPHBlcnNvbiBpZD0ib25lLndvcmtlciI+Ci0gICAgPG5hbWU+PGZhbWlseT5Xb3JrZXI8L2ZhbWlseT4gPGdpdmVuPk9uZTwvZ2l2ZW4+PC9uYW1lPgotICAgIDxlbWFpbD5vbmVAZm9vLmNvbTwvZW1haWw+Ci0gICAgPGxpbmsgbWFuYWdlcj0iQmlnLkJvc3MiLz4KLSAgPC9wZXJzb24+Ci0KLSAgPHBlcnNvbiBpZD0idHdvLndvcmtlciI+Ci0gICAgPG5hbWU+PGZhbWlseT5Xb3JrZXI8L2ZhbWlseT4gPGdpdmVuPlR3bzwvZ2l2ZW4+PC9uYW1lPgotICAgIDxlbWFpbD50d29AZm9vLmNvbTwvZW1haWw+Ci0gICAgPGxpbmsgbWFuYWdlcj0iQmlnLkJvc3MiLz4KLSAgPC9wZXJzb24+Ci0KLSAgPHBlcnNvbiBpZD0idGhyZWUud29ya2VyIj4KLSAgICA8bmFtZT48ZmFtaWx5PldvcmtlcjwvZmFtaWx5PiA8Z2l2ZW4+VGhyZWU8L2dpdmVuPjwvbmFtZT4KLSAgICA8ZW1haWw+dGhyZWVAZm9vLmNvbTwvZW1haWw+Ci0gICAgPGxpbmsgbWFuYWdlcj0iQmlnLkJvc3MiLz4KLSAgPC9wZXJzb24+Ci0KLSAgPHBlcnNvbiBpZD0iZm91ci53b3JrZXIiPgotICAgIDxuYW1lPjxmYW1pbHk+V29ya2VyPC9mYW1pbHk+IDxnaXZlbj5Gb3VyPC9naXZlbj48L25hbWU+Ci0gICAgPGVtYWlsPmZvdXJAZm9vLmNvbTwvZW1haWw+Ci0gICAgPGxpbmsgbWFuYWdlcj0iQmlnLkJvc3MiLz4KLSAgPC9wZXJzb24+Ci0KLSAgPHBlcnNvbiBpZD0iZml2ZS53b3JrZXIiPgotICAgIDxuYW1lPjxmYW1pbHk+V29ya2VyPC9mYW1pbHk+IDxnaXZlbj5GaXZlPC9naXZlbj48L25hbWU+Ci0gICAgPGVtYWlsPmZpdmVAZm9vLmNvbTwvZW1haWw+Ci0gICAgPGxpbmsgbWFuYWdlcj0iQmlnLkJvc3MiLz4KLSAgPC9wZXJzb24+Ci0KLTwvcGVyc29ubmVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUGVyc29uYWwvcGVyc29uYWwuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUGVyc29uYWwvcGVyc29uYWwuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjRlNDhhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLTw/eG1sIGVuY29kaW5nPSJVVEYtOCI/PgotPCFFTEVNRU5UIHBlcnNvbm5lbCAocGVyc29uKSs+Ci0KLTwhRUxFTUVOVCBwZXJzb24gKG5hbWUsZW1haWwqLHVybCosbGluaz8pPgotPCFBVFRMSVNUIHBlcnNvbiBpZCBJRCAjUkVRVUlSRUQ+Ci08IUFUVExJU1QgcGVyc29uIG5vdGUgQ0RBVEEgI0lNUExJRUQ+Ci08IUFUVExJU1QgcGVyc29uIGNvbnRyICh0cnVlfGZhbHNlKSAnZmFsc2UnPgotPCFBVFRMSVNUIHBlcnNvbiBzYWxhcnkgQ0RBVEEgI0lNUExJRUQ+Ci0KLTwhRUxFTUVOVCBuYW1lICgoZmFtaWx5LGdpdmVuKXwoZ2l2ZW4sZmFtaWx5KSk+Ci0KLTwhRUxFTUVOVCBmYW1pbHkgKCNQQ0RBVEEpPgotCi08IUVMRU1FTlQgZ2l2ZW4gKCNQQ0RBVEEpPgotCi08IUVMRU1FTlQgZW1haWwgKCNQQ0RBVEEpPgotCi08IUVMRU1FTlQgdXJsIEVNUFRZPgotPCFBVFRMSVNUIHVybCBocmVmIENEQVRBICdodHRwOi8vJz4KLQotPCFFTEVNRU5UIGxpbmsgRU1QVFk+Ci08IUFUVExJU1QgbGluayBtYW5hZ2VyIElEUkVGICNJTVBMSUVEPgotPCFBVFRMSVNUIGxpbmsgc3Vib3JkaW5hdGVzIElEUkVGUyAjSU1QTElFRD4KLQotPCFOT1RBVElPTiBnaWYgUFVCTElDICctLy9BUFAvUGhvdG9zaG9wLzQuMCcgJ3Bob3Rvc2hvcC5leGUnPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUGVyc29uYWwvcGVyc29uYWwueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUGVyc29uYWwvcGVyc29uYWwueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzNlNDM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGVyc29ubmVsIFNZU1RFTSAiaHR0cDovL3BlcnNvbmFsL3BlcnNvbmFsLmR0ZCI+Ci08cGVyc29ubmVsPgotCi0gIDxwZXJzb24gaWQ9IkJpZy5Cb3NzIj4KLSAgICA8bmFtZT48ZmFtaWx5PkJvc3M8L2ZhbWlseT4gPGdpdmVuPkJpZzwvZ2l2ZW4+PC9uYW1lPgotICAgIDxlbWFpbD5jaGllZkBmb28uY29tPC9lbWFpbD4KLSAgICA8bGluayBzdWJvcmRpbmF0ZXM9Im9uZS53b3JrZXIgdHdvLndvcmtlciB0aHJlZS53b3JrZXIgZm91ci53b3JrZXIgZml2ZS53b3JrZXIiLz4KLSAgPC9wZXJzb24+Ci0KLSAgPHBlcnNvbiBpZD0ib25lLndvcmtlciI+Ci0gICAgPG5hbWU+PGZhbWlseT5Xb3JrZXI8L2ZhbWlseT4gPGdpdmVuPk9uZTwvZ2l2ZW4+PC9uYW1lPgotICAgIDxlbWFpbD5vbmVAZm9vLmNvbTwvZW1haWw+Ci0gICAgPGxpbmsgbWFuYWdlcj0iQmlnLkJvc3MiLz4KLSAgPC9wZXJzb24+Ci0KLSAgPHBlcnNvbiBpZD0idHdvLndvcmtlciI+Ci0gICAgPG5hbWU+PGZhbWlseT5Xb3JrZXI8L2ZhbWlseT4gPGdpdmVuPlR3bzwvZ2l2ZW4+PC9uYW1lPgotICAgIDxlbWFpbD50d29AZm9vLmNvbTwvZW1haWw+Ci0gICAgPGxpbmsgbWFuYWdlcj0iQmlnLkJvc3MiLz4KLSAgPC9wZXJzb24+Ci0KLSAgPHBlcnNvbiBpZD0idGhyZWUud29ya2VyIj4KLSAgICA8bmFtZT48ZmFtaWx5PldvcmtlcjwvZmFtaWx5PiA8Z2l2ZW4+VGhyZWU8L2dpdmVuPjwvbmFtZT4KLSAgICA8ZW1haWw+dGhyZWVAZm9vLmNvbTwvZW1haWw+Ci0gICAgPGxpbmsgbWFuYWdlcj0iQmlnLkJvc3MiLz4KLSAgPC9wZXJzb24+Ci0KLSAgPHBlcnNvbiBpZD0iZm91ci53b3JrZXIiPgotICAgIDxuYW1lPjxmYW1pbHk+V29ya2VyPC9mYW1pbHk+IDxnaXZlbj5Gb3VyPC9naXZlbj48L25hbWU+Ci0gICAgPGVtYWlsPmZvdXJAZm9vLmNvbTwvZW1haWw+Ci0gICAgPGxpbmsgbWFuYWdlcj0iQmlnLkJvc3MiLz4KLSAgPC9wZXJzb24+Ci0KLSAgPHBlcnNvbiBpZD0iZml2ZS53b3JrZXIiPgotICAgIDxuYW1lPjxmYW1pbHk+V29ya2VyPC9mYW1pbHk+IDxnaXZlbj5GaXZlPC9naXZlbj48L25hbWU+Ci0gICAgPGVtYWlsPmZpdmVAZm9vLmNvbTwvZW1haWw+Ci0gICAgPGxpbmsgbWFuYWdlcj0iQmlnLkJvc3MiLz4KLSAgPC9wZXJzb24+Ci0KLTwvcGVyc29ubmVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUGVyc29uYWwvcGVyc29uYWwueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUGVyc29uYWwvcGVyc29uYWwueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWUzMTgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHM6c2NoZW1hIHhtbG5zOnhzPSdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSc+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJwZXJzb25uZWwiPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICA8eHM6c2VxdWVuY2U+Ci0gICAgIDx4czplbGVtZW50IHJlZj0icGVyc29uIiBtaW5PY2N1cnM9JzEnIG1heE9jY3Vycz0ndW5ib3VuZGVkJy8+Ci0gICA8L3hzOnNlcXVlbmNlPgotICA8L3hzOmNvbXBsZXhUeXBlPgotCi0gIDx4czp1bmlxdWUgbmFtZT0idW5pcXVlMSI+Ci0gICA8eHM6c2VsZWN0b3IgeHBhdGg9InBlcnNvbiIvPgotICAgPHhzOmZpZWxkIHhwYXRoPSJuYW1lL2dpdmVuIi8+Ci0gICA8eHM6ZmllbGQgeHBhdGg9Im5hbWUvZmFtaWx5Ii8+Ci0gIDwveHM6dW5pcXVlPgotICA8eHM6a2V5IG5hbWU9J2VtcGlkJz4KLSAgIDx4czpzZWxlY3RvciB4cGF0aD0icGVyc29uIi8+Ci0gICA8eHM6ZmllbGQgeHBhdGg9IkBpZCIvPgotICA8L3hzOmtleT4KLSAgPHhzOmtleXJlZiBuYW1lPSJrZXlyZWYxIiByZWZlcj0nZW1waWQnPgotICAgPHhzOnNlbGVjdG9yIHhwYXRoPSJwZXJzb24iLz4gCi0gICA8eHM6ZmllbGQgeHBhdGg9ImxpbmsvQG1hbmFnZXIiLz4gIAotICA8L3hzOmtleXJlZj4KLQotIDwveHM6ZWxlbWVudD4KLQotIDx4czplbGVtZW50IG5hbWU9InBlcnNvbiI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgIDx4czpzZXF1ZW5jZT4KLSAgICAgPHhzOmVsZW1lbnQgcmVmPSJuYW1lIi8+Ci0gICAgIDx4czplbGVtZW50IHJlZj0iZW1haWwiIG1pbk9jY3Vycz0nMCcgbWF4T2NjdXJzPSd1bmJvdW5kZWQnLz4KLSAgICAgPHhzOmVsZW1lbnQgcmVmPSJ1cmwiICAgbWluT2NjdXJzPScwJyBtYXhPY2N1cnM9J3VuYm91bmRlZCcvPgotICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmsiICBtaW5PY2N1cnM9JzEnIG1heE9jY3Vycz0nMScvPgotICAgPC94czpzZXF1ZW5jZT4KLSAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaWQiICB0eXBlPSJ4czpJRCIgdXNlPSdyZXF1aXJlZCcvPgotICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJub3RlIiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29udHIiIGRlZmF1bHQ9ImZhbHNlIj4KLSAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2UgPSAieHM6c3RyaW5nIj4KLSAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRydWUiLz4KLSAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImZhbHNlIi8+Ci0gICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpzaW1wbGVUeXBlPgotICAgPC94czphdHRyaWJ1dGU+Ci0gICA8eHM6YXR0cmlidXRlIG5hbWU9InNhbGFyeSIgdHlwZT0ieHM6aW50ZWdlciIvPgotICA8L3hzOmNvbXBsZXhUeXBlPgotIDwveHM6ZWxlbWVudD4KLQotIDx4czplbGVtZW50IG5hbWU9Im5hbWUiPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICA8eHM6YWxsPgotICAgIDx4czplbGVtZW50IHJlZj0iZmFtaWx5Ii8+Ci0gICAgPHhzOmVsZW1lbnQgcmVmPSJnaXZlbiIvPgotICAgPC94czphbGw+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmVsZW1lbnQgbmFtZT0iZmFtaWx5IiB0eXBlPSd4czpzdHJpbmcnLz4KLQotIDx4czplbGVtZW50IG5hbWU9ImdpdmVuIiB0eXBlPSd4czpzdHJpbmcnLz4KLQotIDx4czplbGVtZW50IG5hbWU9ImVtYWlsIiB0eXBlPSd4czpzdHJpbmcnLz4KLQotIDx4czplbGVtZW50IG5hbWU9InVybCI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaHJlZiIgdHlwZT0ieHM6c3RyaW5nIiBkZWZhdWx0PSJodHRwOi8vIi8+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmVsZW1lbnQgbmFtZT0ibGluayI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWFuYWdlciIgdHlwZT0ieHM6SURSRUYiLz4KLSAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3Vib3JkaW5hdGVzIiB0eXBlPSJ4czpJRFJFRlMiLz4KLSAgPC94czpjb21wbGV4VHlwZT4KLSA8L3hzOmVsZW1lbnQ+Ci0KLSA8eHM6bm90YXRpb24gbmFtZT0nZ2lmJyBwdWJsaWM9Jy0vL0FQUC9QaG90b3Nob3AvNC4wJyBzeXN0ZW09J3Bob3Rvc2hvcC5leGUnLz4KLQotPC94czpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY2NjIxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjOkNhdGFsb2d1ZSB4bWxuczpjPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZS90ZXN0IiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlL3Rlc3QgQ2F0YWxvZ3VlLnhzZCAiPgotCTxjOkJvb2s+Ci0JCTx0aXRsZT5Qcm9mZXNzaW9uYWwgWE1MIFNjaGVtYTwvdGl0bGU+Ci0JCTxkYXRlPjIwMDE8L2RhdGU+Ci0JCTxpc2JuPjEtODYxMDA1LTQ3LTQ8L2lzYm4+Ci0JCTxwdWJsaXNoZXI+V3JveCBQcmVzczwvcHVibGlzaGVyPgotCTwvYzpCb29rPgotCTxjOk1hZ2F6aW5lPgotCQk8dGl0bGU+V2ViU3BoZXJlIERldmVsb3BlcidzIEpvdXJuYWw8L3RpdGxlPgotCQk8ZGF0ZT4yMDAxPC9kYXRlPgotCTwvYzpNYWdhemluZT4KLQk8YzpCb29rPgotCQk8dGl0bGU+SmF2YSBhbmQgWFNMVDwvdGl0bGU+Ci0JCTxkYXRlPjIwMDE8L2RhdGU+Ci0JCTxpc2JuPjAtNTk2LTAwMTQzLTY8L2lzYm4+Ci0JCTxwdWJsaXNoZXI+TydSZWlsbHk8L3B1Ymxpc2hlcj4KLQk8L2M6Qm9vaz4KLTwvYzpDYXRhbG9ndWU+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY2ODY0Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZS90ZXN0IgotCXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczpjPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZS90ZXN0IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUvdGVzdCBDYXRhbG9ndWUueHNkICI+Ci0JPGdyb3VwIG5hbWU9InRlc3QiPgotCQk8c2VxdWVuY2U+Ci0JCQk8ZWxlbWVudCBuYW1lPSJ0ZXN0MSI+PC9lbGVtZW50PgotCQk8L3NlcXVlbmNlPgotCTwvZ3JvdXA+Ci0JPGNvbXBsZXhUeXBlIG5hbWU9IlB1YmxpY2F0aW9uVHlwZSI+Ci0JCTxzZXF1ZW5jZT4KLQkJCTxlbGVtZW50IG5hbWU9InRpdGxlIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLQkJCTxlbGVtZW50IG5hbWU9ImF1dGhvciIgdHlwZT0ic3RyaW5nIiBtaW5PY2N1cnM9IjAiCi0JCQkJbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJPC9lbGVtZW50PgotCQkJPGVsZW1lbnQgbmFtZT0iZGF0ZSIgdHlwZT0iZ1llYXIiPjwvZWxlbWVudD4KLQkJPC9zZXF1ZW5jZT4KLQk8L2NvbXBsZXhUeXBlPgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9IkJvb2tUeXBlIj4KLQkJPGNvbXBsZXhDb250ZW50PgotCQkJPGV4dGVuc2lvbiBiYXNlPSJjOlB1YmxpY2F0aW9uVHlwZSI+Ci0JCQkJPHNlcXVlbmNlPgotCQkJCQk8ZWxlbWVudCBuYW1lPSJpc2JuIiB0eXBlPSJzdHJpbmciIC8+Ci0JCQkJCTxlbGVtZW50IG5hbWU9InB1Ymxpc2hlciIgdHlwZT0ic3RyaW5nIiAvPgotCQkJCTwvc2VxdWVuY2U+Ci0JCQk8L2V4dGVuc2lvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9Ik1hZ2F6aW5lVHlwZSI+Ci0JCTxjb21wbGV4Q29udGVudD4KLQkJCTxyZXN0cmljdGlvbiBiYXNlPSJjOlB1YmxpY2F0aW9uVHlwZSI+Ci0JCQkJPHNlcXVlbmNlPgotCQkJCQk8ZWxlbWVudCBuYW1lPSJ0aXRsZSIgdHlwZT0ic3RyaW5nIiAvPgotCQkJCQk8ZWxlbWVudCBuYW1lPSJhdXRob3IiIHR5cGU9InN0cmluZyIgbWluT2NjdXJzPSIwIgotCQkJCQkJbWF4T2NjdXJzPSIwIiAvPgotCQkJCQk8ZWxlbWVudCBuYW1lPSJkYXRlIiB0eXBlPSJnWWVhciI+PC9lbGVtZW50PgotCQkJCTwvc2VxdWVuY2U+Ci0JCQk8L3Jlc3RyaWN0aW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci0KLQk8ZWxlbWVudCBuYW1lPSJQdWJsaWNhdGlvbiIgdHlwZT0iYzpQdWJsaWNhdGlvblR5cGUiCi0JCWFic3RyYWN0PSJ0cnVlIj4KLQk8L2VsZW1lbnQ+Ci0KLQk8ZWxlbWVudCBuYW1lPSJCb29rIiB0eXBlPSJjOkJvb2tUeXBlIgotCQlzdWJzdGl0dXRpb25Hcm91cD0iYzpQdWJsaWNhdGlvbiI+Ci0JPC9lbGVtZW50PgotCi0JPGVsZW1lbnQgbmFtZT0iTWFnYXppbmUiIHR5cGU9ImM6TWFnYXppbmVUeXBlIgotCQlzdWJzdGl0dXRpb25Hcm91cD0iYzpQdWJsaWNhdGlvbiI+Ci0JPC9lbGVtZW50PgotCi0JPGVsZW1lbnQgbmFtZT0iQ2F0YWxvZ3VlIj4KLQkJPGNvbXBsZXhUeXBlPgotCQkJPHNlcXVlbmNlPgotCQkJCTxlbGVtZW50IHJlZj0iYzpQdWJsaWNhdGlvbiIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPjwvZWxlbWVudD4KLQkJCTwvc2VxdWVuY2U+Ci0JCTwvY29tcGxleFR5cGU+Ci0JPC9lbGVtZW50PgotCi08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL1B1cmNoYXNlT3JkZXIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9QdXJjaGFzZU9yZGVyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJiZDdlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL1B1cmNoYXNlT3JkZXIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwbzpwdXJjaGFzZU9yZGVyIG9yZGVyRGF0ZT0iMjAwMS0wMS0wMSIgeG1sbnM6cG89Imh0dHA6Ly93d3cuaWJtLmNvbSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmlibS5jb20gUHVyY2hhc2VPcmRlci54c2QiPgotICA8c2hpcFRvIGNvdW50cnk9IlVTIj4KLSAgICA8bmFtZT5BbGljZSBTbWl0aDwvbmFtZT4KLSAgICA8c3RyZWV0PjEyNSBNYXBsZSBTdHJlZXQ8L3N0cmVldD4KLSAgICA8Y2l0eT5NaWxsIFZhbGxleTwvY2l0eT4KLSAgICA8c3RhdGU+Q0E8L3N0YXRlPgotICAgIDx6aXA+OTA5NTI8L3ppcD4KLSAgPC9zaGlwVG8+Ci0gIDxiaWxsVG8gY291bnRyeT0iVVMiPgotICAgIDxuYW1lPlJvYmVydCBTbWl0aDwvbmFtZT4KLSAgICA8c3RyZWV0PjggT2FrIEF2ZW51ZTwvc3RyZWV0PgotICAgIDxjaXR5Pk9sZCBUb3duPC9jaXR5PgotICAgIDxzdGF0ZT5QQTwvc3RhdGU+Ci0gICAgPHppcD45NTgxOTwvemlwPgotICA8L2JpbGxUbz4KLSAgPHBvOmNvbW1lbnQ+SHVycnksIG15IGxhd24gaXMgZ29pbmcgd2lsZCE8L3BvOmNvbW1lbnQ+Ci0gIDxpdGVtcz4KLSAgICA8aXRlbSBwYXJ0TnVtPSI4NzItQUEiPgotICAgICAgPHByb2R1Y3ROYW1lPkxhd25tb3dlcjwvcHJvZHVjdE5hbWU+Ci0gICAgICA8cXVhbnRpdHk+MTwvcXVhbnRpdHk+Ci0gICAgICA8VVNQcmljZT4xNDguOTU8L1VTUHJpY2U+Ci0gICAgICA8cG86Y29tbWVudD5Db25maXJtIHRoaXMgaXMgZWxlY3RyaWM8L3BvOmNvbW1lbnQ+Ci0gICAgPC9pdGVtPgotICAgIDxpdGVtIHBhcnROdW09IjkyNi1BQSI+Ci0gICAgICA8cHJvZHVjdE5hbWU+QmFieSBNb25pdG9yPC9wcm9kdWN0TmFtZT4KLSAgICAgIDxxdWFudGl0eT4xPC9xdWFudGl0eT4KLSAgICAgIDxVU1ByaWNlPjM5Ljk4PC9VU1ByaWNlPgotICAgICAgPHNoaXBEYXRlPjIwMDEtMDctMjE8L3NoaXBEYXRlPgotICAgIDwvaXRlbT4KLSAgPC9pdGVtcz4KLTwvcG86cHVyY2hhc2VPcmRlcj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvUHVyY2hhc2VPcmRlci54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL1B1cmNoYXNlT3JkZXIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGZiMDk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvUHVyY2hhc2VPcmRlci54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmlibS5jb20iCi0geG1sbnM6cG89Imh0dHA6Ly93d3cuaWJtLmNvbSI+Ci0gICAgPGFubm90YXRpb24+Ci0gICAgICAgIDxkb2N1bWVudGF0aW9uIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgICBQdXJjaGFzZSBvcmRlciBzY2hlbWEgZXhhbXBsZSBmcm9tIFhNTCBTY2hlbWEgUGFydCAwOiBQcmltZXIKLSAgICAgICAgCi0gICAgICAgICAgICBDb3B5cmlnaHQgMjAwMSwgSUJNIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQKLSAgICAgICAgICAgIENvcHlyaWdodCAyMDAxLCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAKLSAgICAgICAgICAgIChNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlZXQgZW4gQXV0b21hdGlxdWUsIEtlaW8gVW5pdmVyc2l0eSkuCi0gICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgPC9hbm5vdGF0aW9uPgotCi0gICAgPGVsZW1lbnQgbmFtZT0icHVyY2hhc2VPcmRlciIgdHlwZT0icG86UHVyY2hhc2VPcmRlclR5cGUiLz4KLQotICAgIDxlbGVtZW50IG5hbWU9ImNvbW1lbnQiIHR5cGU9InN0cmluZyIvPgotCi0gICAgPGNvbXBsZXhUeXBlIG5hbWU9IlB1cmNoYXNlT3JkZXJUeXBlIj4KLSAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0ic2hpcFRvIiB0eXBlPSJwbzpVU0FkZHJlc3MiLz4KLSAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImJpbGxUbyIgdHlwZT0icG86VVNBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9InBvOmNvbW1lbnQiIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iaXRlbXMiIHR5cGU9InBvOkl0ZW1zIi8+Ci0gICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ib3JkZXJEYXRlIiB0eXBlPSJkYXRlIi8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLQotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJVU0FkZHJlc3MiPgotICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciLz4KLSAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgdHlwZT0ic3RyaW5nIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiB0eXBlPSJzdHJpbmciLz4KLSAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InN0YXRlIiB0eXBlPSJwbzpVU1N0YXRlIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJ6aXAiIHR5cGU9ImRlY2ltYWwiLz4KLSAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjb3VudHJ5IiB0eXBlPSJOTVRPS0VOIiBmaXhlZD0iVVMiLz4KLSAgICA8L2NvbXBsZXhUeXBlPgotCi0gICAgPGNvbXBsZXhUeXBlIG5hbWU9Ikl0ZW1zIj4KLSAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iaXRlbSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJwcm9kdWN0TmFtZSIgdHlwZT0ic3RyaW5nIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJxdWFudGl0eSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNpbXBsZVR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJwb3NpdGl2ZUludGVnZXIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1heEV4Y2x1c2l2ZSB2YWx1ZT0iMTAwIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVzdHJpY3Rpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zaW1wbGVUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9lbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iVVNQcmljZSIgdHlwZT0iZGVjaW1hbCIvPgotICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJwbzpjb21tZW50IiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InNoaXBEYXRlIiB0eXBlPSJkYXRlIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwYXJ0TnVtIiB0eXBlPSJwbzpTS1UiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC9lbGVtZW50PgotICAgICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0KLSAgICA8c2ltcGxlVHlwZSBuYW1lPSJTS1UiPgotICAgICAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxwYXR0ZXJuIHZhbHVlPSJcZHszfS1bQS1aXXsyfSIvPgotICAgICAgICA8L3Jlc3RyaWN0aW9uPgotICAgIDwvc2ltcGxlVHlwZT4KLSAgICAKLSAgICA8c2ltcGxlVHlwZSBuYW1lPSJVU1N0YXRlIj4KLSAgICAgICAgPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0gICAgICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IkNBIj48L2VudW1lcmF0aW9uPgotICAgICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJQQSI+PC9lbnVtZXJhdGlvbj4KLSAgICAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iQVIiPjwvZW51bWVyYXRpb24+Ci0gICAgICAgIDwvcmVzdHJpY3Rpb24+Ci0gICAgPC9zaW1wbGVUeXBlPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvYWRkcmVzcy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvYWRkcmVzcy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2ZWE0NDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2FkZHJlc3MueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIgotICAgICAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgICAgIHhtbG5zOmlwbz0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9JUE8iPgotCi0gPGFubm90YXRpb24+Ci0gIDxkb2N1bWVudGF0aW9uIHhtbDpsYW5nPSJlbiI+Ci0gICBBZGRyZXNzZXMgZm9yIEludGVybmF0aW9uYWwgUHVyY2hhc2Ugb3JkZXIgc2NoZW1hCi0gICBDb3B5cmlnaHQgMjAwMCBFeGFtcGxlLmNvbS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgPC9kb2N1bWVudGF0aW9uPiAKLSA8L2Fubm90YXRpb24+Ci0KLSA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gIDxzZXF1ZW5jZT4KLSAgIDxlbGVtZW50IG5hbWU9Im5hbWUiICAgdHlwZT0ic3RyaW5nIi8+Ci0gICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIHR5cGU9InN0cmluZyIvPgotICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgICB0eXBlPSJzdHJpbmciLz4KLSAgPC9zZXF1ZW5jZT4KLSA8L2NvbXBsZXhUeXBlPgotCi0gPGNvbXBsZXhUeXBlIG5hbWU9IlVTQWRkcmVzcyI+Ci0gIDxjb21wbGV4Q29udGVudD4KLSAgIDxleHRlbnNpb24gYmFzZT0iaXBvOkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RhdGUiIHR5cGU9ImlwbzpVU1N0YXRlIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InppcCIgICB0eXBlPSJwb3NpdGl2ZUludGVnZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9leHRlbnNpb24+Ci0gIDwvY29tcGxleENvbnRlbnQ+Ci0gPC9jb21wbGV4VHlwZT4KLQotIDxjb21wbGV4VHlwZSBuYW1lPSJVS0FkZHJlc3MiPgotICA8Y29tcGxleENvbnRlbnQ+Ci0gICA8ZXh0ZW5zaW9uIGJhc2U9ImlwbzpBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3Rjb2RlIiB0eXBlPSJpcG86VUtQb3N0Y29kZSIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICAgPGF0dHJpYnV0ZSBuYW1lPSJleHBvcnRDb2RlIiB0eXBlPSJwb3NpdGl2ZUludGVnZXIiIGZpeGVkPSIxIi8+Ci0gICA8L2V4dGVuc2lvbj4KLSAgPC9jb21wbGV4Q29udGVudD4KLSA8L2NvbXBsZXhUeXBlPgotCi0gPCEtLSBvdGhlciBBZGRyZXNzIGRlcml2YXRpb25zIGZvciBtb3JlIGNvdW50cmllcyAtLT4gCi0KLSA8c2ltcGxlVHlwZSBuYW1lPSJVU1N0YXRlIj4KLSAgPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0gICA8ZW51bWVyYXRpb24gdmFsdWU9IkFLIi8+Ci0gICA8ZW51bWVyYXRpb24gdmFsdWU9IkFMIi8+Ci0gICA8ZW51bWVyYXRpb24gdmFsdWU9IkFSIi8+Ci0gICA8IS0tIGFuZCBzbyBvbiAuLi4gLS0+Ci0gIDwvcmVzdHJpY3Rpb24+Ci0gPC9zaW1wbGVUeXBlPgotCi0gPCEtLSBzaW1wbGUgdHlwZSBkZWZpbml0aW9uIGZvciBQb3N0Y29kZSAtLT4KLSA8c2ltcGxlVHlwZSBuYW1lPSJQb3N0Y29kZSI+Ci0gIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotICA8L3Jlc3RyaWN0aW9uPgotIDwvc2ltcGxlVHlwZT4KLQotIDwhLS0gc2ltcGxlIHR5cGUgZGVmaW5pdGlvbiBmb3IgVUtQb3N0Y29kZSAtLT4KLSA8c2ltcGxlVHlwZSBuYW1lPSJVS1Bvc3Rjb2RlIj4KLSAgPHJlc3RyaWN0aW9uIGJhc2U9ImlwbzpQb3N0Y29kZSI+Ci0gICAgPHBhdHRlcm4gdmFsdWU9IltBLVpdezJ9XGRcc1xkW0EtWl17Mn0iLz4KLSAgPC9yZXN0cmljdGlvbj4KLSA8L3NpbXBsZVR5cGU+Ci0KLQotPC9zY2hlbWE+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9pcG8ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2lwby54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ODNhZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2lwby54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxpcG86cHVyY2hhc2VPcmRlcgotICBvcmRlckRhdGU9IjIwMDEtMDEtMDEiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOmlwbz0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9JUE8iIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9JUE8gaXBvLnhzZCAiPgotCi0gICAgPHNoaXBUbyBleHBvcnRDb2RlPSIxIiB4c2k6dHlwZT0iaXBvOlVLQWRkcmVzcyI+Ci0gICAgICAgIDxuYW1lPkhlbGVuIFpvZTwvbmFtZT4KLSAgICAgICAgPHN0cmVldD40NyBFZGVuIFN0cmVldDwvc3RyZWV0PgotICAgICAgICA8Y2l0eT5DYW1icmlkZ2U8L2NpdHk+Ci0gICAgICAgIDxwb3N0Y29kZT5DQjEgMUpSPC9wb3N0Y29kZT4KLSAgICA8L3NoaXBUbz4KLQotICAgIDxiaWxsVG8geHNpOnR5cGU9ImlwbzpVU0FkZHJlc3MiPgotICAgICAgICA8bmFtZT5Sb2JlcnQgU21pdGg8L25hbWU+Ci0gICAgICAgIDxzdHJlZXQ+OCBPYWsgQXZlbnVlPC9zdHJlZXQ+Ci0gICAgICAgIDxjaXR5Pk9sZCBUb3duPC9jaXR5PgotICAgICAgICA8c3RhdGU+QVI8L3N0YXRlPgotICAgICAgICA8emlwPjk1ODE5PC96aXA+Ci0gICAgPC9iaWxsVG8+Ci0KLSAgICA8aXRlbXM+Ci0gICAgICAgIDxpdGVtIHBhcnROdW09IjgzMy1BQSI+Ci0gICAgICAgICAgICA8cHJvZHVjdE5hbWU+TGFwaXMgbmVja2xhY2U8L3Byb2R1Y3ROYW1lPgotICAgICAgICAgICAgPHF1YW50aXR5PjE8L3F1YW50aXR5PgotICAgICAgICAgICAgPFVTUHJpY2U+OTkuOTU8L1VTUHJpY2U+Ci0gICAgICAgICAgICA8aXBvOmNvbW1lbnQ+V2FudCB0aGlzIGZvciB0aGUgaG9saWRheXMhPC9pcG86Y29tbWVudD4KLSAgICAgICAgICAgIDxzaGlwRGF0ZT4xOTk5LTEyLTA1PC9zaGlwRGF0ZT4KLSAgICAgICAgPC9pdGVtPgotICAgIDwvaXRlbXM+Ci08L2lwbzpwdXJjaGFzZU9yZGVyPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvaXBvLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9pcG8ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTYzZDAxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9pcG8ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIgotICAgICAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgICAgIHhtbG5zOmlwbz0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9JUE8iPgotCi0gPGFubm90YXRpb24+Ci0gIDxkb2N1bWVudGF0aW9uIHhtbDpsYW5nPSJlbiI+Ci0gICBJbnRlcm5hdGlvbmFsIFB1cmNoYXNlIG9yZGVyIHNjaGVtYSBmb3IgRXhhbXBsZS5jb20KLSAgIENvcHlyaWdodCAyMDAwIEV4YW1wbGUuY29tLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICA8L2RvY3VtZW50YXRpb24+IAotIDwvYW5ub3RhdGlvbj4KLQotIDwhLS0gaW5jbHVkZSBhZGRyZXNzIGNvbnN0cnVjdHMgLS0+Ci0gPGluY2x1ZGUKLSAgc2NoZW1hTG9jYXRpb249ImFkZHJlc3MueHNkIi8+Ci0KLSA8ZWxlbWVudCBuYW1lPSJwdXJjaGFzZU9yZGVyIiB0eXBlPSJpcG86UHVyY2hhc2VPcmRlclR5cGUiLz4KLQotIDxlbGVtZW50IG5hbWU9ImNvbW1lbnQiIHR5cGU9InN0cmluZyIvPgotCi0gPGNvbXBsZXhUeXBlIG5hbWU9IlB1cmNoYXNlT3JkZXJUeXBlIj4KLSAgPHNlcXVlbmNlPgotICAgPGVsZW1lbnQgbmFtZT0ic2hpcFRvIiAgICAgdHlwZT0iaXBvOkFkZHJlc3MiLz4KLSAgIDxlbGVtZW50IG5hbWU9ImJpbGxUbyIgICAgIHR5cGU9ImlwbzpBZGRyZXNzIi8+Ci0gICA8ZWxlbWVudCByZWY9Imlwbzpjb21tZW50IiBtaW5PY2N1cnM9IjAiLz4KLSAgIDxlbGVtZW50IG5hbWU9Iml0ZW1zIiAgICAgIHR5cGU9ImlwbzpJdGVtcyIvPgotICA8L3NlcXVlbmNlPgotICA8YXR0cmlidXRlIG5hbWU9Im9yZGVyRGF0ZSIgdHlwZT0iZGF0ZSIvPgotIDwvY29tcGxleFR5cGU+Ci0KLSA8Y29tcGxleFR5cGUgbmFtZT0iSXRlbXMiPgotICA8c2VxdWVuY2U+Ci0gICA8ZWxlbWVudCBuYW1lPSJpdGVtIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9InByb2R1Y3ROYW1lIiB0eXBlPSJzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9InF1YW50aXR5Ij4KLSAgICAgICA8c2ltcGxlVHlwZT4KLSAgICAgICAgPHJlc3RyaWN0aW9uIGJhc2U9InBvc2l0aXZlSW50ZWdlciI+Ci0gICAgICAgICA8bWF4RXhjbHVzaXZlIHZhbHVlPSIxMDAiLz4KLSAgICAgICAgPC9yZXN0cmljdGlvbj4KLSAgICAgICA8L3NpbXBsZVR5cGU+Ci0gICAgICA8L2VsZW1lbnQ+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJVU1ByaWNlIiAgICB0eXBlPSJkZWNpbWFsIi8+Ci0gICAgICA8ZWxlbWVudCByZWY9Imlwbzpjb21tZW50IiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9InNoaXBEYXRlIiAgIHR5cGU9ImRhdGUiIG1pbk9jY3Vycz0iMCIvPgotICAgICA8L3NlcXVlbmNlPgotICAgICA8YXR0cmlidXRlIG5hbWU9InBhcnROdW0iIHR5cGU9ImlwbzpTS1UiIHVzZT0icmVxdWlyZWQiLz4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICA8L3NlcXVlbmNlPgotIDwvY29tcGxleFR5cGU+Ci0KLSA8c2ltcGxlVHlwZSBuYW1lPSJTS1UiPgotICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgIDxwYXR0ZXJuIHZhbHVlPSJcZHszfS1bQS1aXXsyfSIvPgotICA8L3Jlc3RyaWN0aW9uPgotIDwvc2ltcGxlVHlwZT4KLQotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2lwb18ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2lwb18ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzZkNDlkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9pcG9fLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL0lQTyIKLSAgICAgICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgICAgICB4bWxuczppcG89Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIj4KLQotIDxhbm5vdGF0aW9uPgotICA8ZG9jdW1lbnRhdGlvbiB4bWw6bGFuZz0iZW4iPgotICAgSW50ZXJuYXRpb25hbCBQdXJjaGFzZSBvcmRlciBzY2hlbWEgZm9yIEV4YW1wbGUuY29tCi0gICBDb3B5cmlnaHQgMjAwMCBFeGFtcGxlLmNvbS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgPC9kb2N1bWVudGF0aW9uPiAKLSA8L2Fubm90YXRpb24+Ci0KLSA8IS0tIGluY2x1ZGUgYWRkcmVzcyBjb25zdHJ1Y3RzIC0tPgotIDxpbmNsdWRlCi0gIHNjaGVtYUxvY2F0aW9uPSJhZGRyZXNzXy54c2QiLz4KLQotIDxlbGVtZW50IG5hbWU9InB1cmNoYXNlT3JkZXIiIHR5cGU9ImlwbzpQdXJjaGFzZU9yZGVyVHlwZSIvPgotCi0gPGVsZW1lbnQgbmFtZT0iY29tbWVudCIgdHlwZT0ic3RyaW5nIi8+Ci0KLSA8Y29tcGxleFR5cGUgbmFtZT0iUHVyY2hhc2VPcmRlclR5cGUiPgotICA8c2VxdWVuY2U+Ci0gICA8ZWxlbWVudCBuYW1lPSJzaGlwVG8iICAgICB0eXBlPSJpcG86QWRkcmVzcyIvPgotICAgPGVsZW1lbnQgbmFtZT0iYmlsbFRvIiAgICAgdHlwZT0iaXBvOkFkZHJlc3MiLz4KLSAgIDxlbGVtZW50IHJlZj0iaXBvOmNvbW1lbnQiIG1pbk9jY3Vycz0iMCIvPgotICAgPGVsZW1lbnQgbmFtZT0iaXRlbXMiICAgICAgdHlwZT0iaXBvOkl0ZW1zIi8+Ci0gIDwvc2VxdWVuY2U+Ci0gIDxhdHRyaWJ1dGUgbmFtZT0ib3JkZXJEYXRlIiB0eXBlPSJkYXRlIi8+Ci0gPC9jb21wbGV4VHlwZT4KLQotIDxjb21wbGV4VHlwZSBuYW1lPSJJdGVtcyI+Ci0gIDxzZXF1ZW5jZT4KLSAgIDxlbGVtZW50IG5hbWU9Iml0ZW0iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0icHJvZHVjdE5hbWUiIHR5cGU9InN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0icXVhbnRpdHkiPgotICAgICAgIDxzaW1wbGVUeXBlPgotICAgICAgICA8cmVzdHJpY3Rpb24gYmFzZT0icG9zaXRpdmVJbnRlZ2VyIj4KLSAgICAgICAgIDxtYXhFeGNsdXNpdmUgdmFsdWU9IjEwMCIvPgotICAgICAgICA8L3Jlc3RyaWN0aW9uPgotICAgICAgIDwvc2ltcGxlVHlwZT4KLSAgICAgIDwvZWxlbWVudD4KLSAgICAgIDxlbGVtZW50IG5hbWU9IlVTUHJpY2UiICAgIHR5cGU9ImRlY2ltYWwiLz4KLSAgICAgIDxlbGVtZW50IHJlZj0iaXBvOmNvbW1lbnQiIG1pbk9jY3Vycz0iMCIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0ic2hpcERhdGUiICAgdHlwZT0iZGF0ZSIgbWluT2NjdXJzPSIwIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgIDxhdHRyaWJ1dGUgbmFtZT0icGFydE51bSIgdHlwZT0iaXBvOlNLVSIgdXNlPSJyZXF1aXJlZCIvPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gIDwvc2VxdWVuY2U+Ci0gPC9jb21wbGV4VHlwZT4KLQotIDxzaW1wbGVUeXBlIG5hbWU9IlNLVSI+Ci0gIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotICAgPHBhdHRlcm4gdmFsdWU9IlxkezN9LVtBLVpdezJ9Ii8+Ci0gIDwvcmVzdHJpY3Rpb24+Ci0gPC9zaW1wbGVUeXBlPgotCi08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGVkNmYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxleDpwdXJjaGFzZVJlcG9ydAotICAgICAgICB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9SZXBvcnQiCi0gICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9SZXBvcnQgcmVwb3J0LnhzZCI+Ci0gICAgPGV4OnJlZ2lvbnM+Ci0gICAgICAgIDxleDp6aXAgY29kZT0iMzk0ODciPgotICAgICAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIyOTMtQVgiIHF1YW50aXR5PSIzIi8+Ci0gICAgICAgICAgICA8ZXg6cGFydCBudW1iZXI9IjI5My1MRCIgcXVhbnRpdHk9IjMiLz4KLSAgICAgICAgPC9leDp6aXA+Ci0gICAgICAgIDxleDp6aXAgY29kZT0iMjkzODciPgotICAgICAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSI4OTctSkQiIHF1YW50aXR5PSIzMCIvPgotICAgICAgICA8L2V4OnppcD4KLSAgICAgICAgPGV4OnppcCBjb2RlPSIxOTI4NSI+Ci0gICAgICAgICAgICA8ZXg6cGFydCBudW1iZXI9IjEyMy1DSyIgcXVhbnRpdHk9IjE5Ii8+Ci0gICAgICAgICAgICA8ZXg6cGFydCBudW1iZXI9IjE3NS1GUSIgcXVhbnRpdHk9IjgiLz4KLSAgICAgICAgPC9leDp6aXA+Ci0gICAgPC9leDpyZWdpb25zPgotCi0gICAgPGV4OnBhcnRzPgotICAgICAgICA8ZXg6cGFydCBudW1iZXI9IjI5My1BWCIvPgotICAgICAgICA8ZXg6cGFydCBudW1iZXI9Ijg5Ny1KRCIvPgotICAgICAgICA8ZXg6cGFydCBudW1iZXI9IjEyMy1DSyIvPgotICAgICAgICA8ZXg6cGFydCBudW1iZXI9IjI5My1MRCIvPgotICAgICAgICA8ZXg6cGFydCBudW1iZXI9IjE3NS1GUSIvPgotICAgIDwvZXg6cGFydHM+Ci08L2V4OnB1cmNoYXNlUmVwb3J0PgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWU3Y2E0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9SZXBvcnQiCi0geG1sbnM6cj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9SZXBvcnQiCi0geG1sbnM6eGlwbz0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9JUE8iCi0gZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotICAgIDxhbm5vdGF0aW9uPgotICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIFRoZSBSZXBvcnQgU2NoZW1hIGZyb20gWE1MIFNjaGVtYSBQYXJ0IDA6IFByaW1lcgotICAgICAgICAgICAgCi0gICAgICAgICAgICBDb3B5cmlnaHQgMjAwMSwgSUJNIENvcnAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gICAgICAgICAgICBDb3B5cmlnaHQgMjAwMSwgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSAKLSAgICAgICAgICAgIChNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0IGVuIEF1dG9tYXRpcXVlLCBLZWlvIFVuaXZlcnNpdHkpLgotICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgIDwvYW5ub3RhdGlvbj4KLQotICAgIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL0lQTyIgc2NoZW1hTG9jYXRpb249Imlwby54c2QiLz4KLQotICAgIDxlbGVtZW50IG5hbWU9InB1cmNoYXNlUmVwb3J0Ij4KLSAgICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InJlZ2lvbnMiIHR5cGU9InI6UmVnaW9uc1R5cGUiLz4KLSAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJwYXJ0cyIgdHlwZT0icjpQYXJ0c1R5cGUiLz4KLSAgICAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBlcmlvZCIgdHlwZT0iZHVyYXRpb24iLz4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icGVyaW9kRW5kaW5nIiB0eXBlPSJkYXRlIi8+Ci0gICAgICAgIDwvY29tcGxleFR5cGU+Ci0gICAgICAgIAotICAgICAgICA8dW5pcXVlIG5hbWU9ImR1bW15MSI+Ci0gICAgICAgICAgICA8c2VsZWN0b3IgeHBhdGg9InI6cmVnaW9ucy9yOnppcCIvPgotICAgICAgICAgICAgPGZpZWxkIHhwYXRoPSJAY29kZSIvPgotICAgICAgICA8L3VuaXF1ZT4KLSAgICAgICAgCi0gICAgICAgIDxrZXkgbmFtZT0icE51bUtleSI+Ci0gICAgICAgICAgICA8c2VsZWN0b3IgeHBhdGg9InI6cGFydHMvcjpwYXJ0Ii8+Ci0gICAgICAgICAgICA8ZmllbGQgeHBhdGg9IkBudW1iZXIiLz4KLSAgICAgICAgPC9rZXk+Ci0gICAgICAgIDxrZXlyZWYgbmFtZT0iZHVtbXkyIiByZWZlcj0icjpwTnVtS2V5Ij4KLSAgICAgICAgICAgIDxzZWxlY3RvciB4cGF0aD0icjpyZWdpb25zL3I6emlwL3I6cGFydCIvPgotICAgICAgICAgICAgPGZpZWxkIHhwYXRoPSJAbnVtYmVyIi8+Ci0gICAgICAgIDwva2V5cmVmPgotICAgIDwvZWxlbWVudD4KLQotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJSZWdpb25zVHlwZSI+Ci0gICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InppcCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icGFydCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbXBsZXhDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlc3RyaWN0aW9uIGJhc2U9ImFueVR5cGUiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4aXBvOlNLVSIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icXVhbnRpdHkiIHR5cGU9InBvc2l0aXZlSW50ZWdlciIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yZXN0cmljdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9lbGVtZW50PgotICAgICAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNvZGUiIHR5cGU9InBvc2l0aXZlSW50ZWdlciIvPgotICAgICAgICAgICAgICAgIDwvY29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L2VsZW1lbnQ+Ci0gICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLQotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJQYXJ0c1R5cGUiPgotICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJwYXJ0IiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im51bWJlciIgdHlwZT0ieGlwbzpTS1UiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgotICAgICAgICAgICAgICAgICAgICA8L3NpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwvZWxlbWVudD4KLSAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0Xy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0Xy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkMzRjZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL3JlcG9ydF8ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxleDpwdXJjaGFzZVJlcG9ydAotICAgICAgICB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9SZXBvcnQiCi0gICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9SZXBvcnQiPgotICAgIDxleDpyZWdpb25zPgotICAgICAgICA8ZXg6emlwIGNvZGU9IjM5NDg3Ij4KLSAgICAgICAgICAgIDxleDpwYXJ0IG51bWJlcj0iMjkzLUFYIiBxdWFudGl0eT0iMyIvPgotICAgICAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIyOTMtTEQiIHF1YW50aXR5PSIzIi8+Ci0gICAgICAgIDwvZXg6emlwPgotICAgICAgICA8ZXg6emlwIGNvZGU9IjI5Mzg3Ij4KLSAgICAgICAgICAgIDxleDpwYXJ0IG51bWJlcj0iODk3LUpEIiBxdWFudGl0eT0iMzAiLz4KLSAgICAgICAgPC9leDp6aXA+Ci0gICAgICAgIDxleDp6aXAgY29kZT0iMTkyODUiPgotICAgICAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIxMjMtQ0siIHF1YW50aXR5PSIxOSIvPgotICAgICAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIxNzUtRlEiIHF1YW50aXR5PSI4Ii8+Ci0gICAgICAgIDwvZXg6emlwPgotICAgIDwvZXg6cmVnaW9ucz4KLQotICAgIDxleDpwYXJ0cz4KLSAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIyOTMtQVgiLz4KLSAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSI4OTctSkQiLz4KLSAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIxMjMtQ0siLz4KLSAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIyOTMtTEQiLz4KLSAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIxNzUtRlEiLz4KLSAgICA8L2V4OnBhcnRzPgotPC9leDpwdXJjaGFzZVJlcG9ydD4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL3JlcG9ydF8ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL3JlcG9ydF8ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjI4NGJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnRfLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVwb3J0IgotIHhtbG5zOnI9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVwb3J0IgotIHhtbG5zOnhpcG89Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIgotIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLSAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICBUaGUgUmVwb3J0IFNjaGVtYSBmcm9tIFhNTCBTY2hlbWEgUGFydCAwOiBQcmltZXIKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDEsIElCTSBDb3JwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDEsIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0gCi0gICAgICAgICAgICAoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCBlbiBBdXRvbWF0aXF1ZSwgS2VpbyBVbml2ZXJzaXR5KS4KLSAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICA8L2Fubm90YXRpb24+Ci0KLSAgICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9JUE8iIHNjaGVtYUxvY2F0aW9uPSJpcG9fXy54c2QiLz4KLQotICAgIDxlbGVtZW50IG5hbWU9InB1cmNoYXNlUmVwb3J0Ij4KLSAgICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InJlZ2lvbnMiIHR5cGU9InI6UmVnaW9uc1R5cGUiLz4KLSAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJwYXJ0cyIgdHlwZT0icjpQYXJ0c1R5cGUiLz4KLSAgICAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBlcmlvZCIgdHlwZT0iZHVyYXRpb24iLz4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icGVyaW9kRW5kaW5nIiB0eXBlPSJkYXRlIi8+Ci0gICAgICAgIDwvY29tcGxleFR5cGU+Ci0gICAgICAgIAotICAgICAgICA8dW5pcXVlIG5hbWU9ImR1bW15MSI+Ci0gICAgICAgICAgICA8c2VsZWN0b3IgeHBhdGg9InI6cmVnaW9ucy9yOnppcCIvPgotICAgICAgICAgICAgPGZpZWxkIHhwYXRoPSJAY29kZSIvPgotICAgICAgICA8L3VuaXF1ZT4KLSAgICAgICAgCi0gICAgICAgIDxrZXkgbmFtZT0icE51bUtleSI+Ci0gICAgICAgICAgICA8c2VsZWN0b3IgeHBhdGg9InI6cGFydHMvcjpwYXJ0Ii8+Ci0gICAgICAgICAgICA8ZmllbGQgeHBhdGg9IkBudW1iZXIiLz4KLSAgICAgICAgPC9rZXk+Ci0gICAgICAgIDxrZXlyZWYgbmFtZT0iZHVtbXkyIiByZWZlcj0icjpwTnVtS2V5Ij4KLSAgICAgICAgICAgIDxzZWxlY3RvciB4cGF0aD0icjpyZWdpb25zL3I6emlwL3I6cGFydCIvPgotICAgICAgICAgICAgPGZpZWxkIHhwYXRoPSJAbnVtYmVyIi8+Ci0gICAgICAgIDwva2V5cmVmPgotICAgIDwvZWxlbWVudD4KLQotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJSZWdpb25zVHlwZSI+Ci0gICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InppcCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icGFydCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbXBsZXhDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlc3RyaWN0aW9uIGJhc2U9ImFueVR5cGUiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4aXBvOlNLVSIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icXVhbnRpdHkiIHR5cGU9InBvc2l0aXZlSW50ZWdlciIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yZXN0cmljdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9lbGVtZW50PgotICAgICAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNvZGUiIHR5cGU9InBvc2l0aXZlSW50ZWdlciIvPgotICAgICAgICAgICAgICAgIDwvY29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L2VsZW1lbnQ+Ci0gICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLQotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJQYXJ0c1R5cGUiPgotICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJwYXJ0IiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im51bWJlciIgdHlwZT0ieGlwbzpTS1UiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgotICAgICAgICAgICAgICAgICAgICA8L3NpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwvZWxlbWVudD4KLSAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9jYXRhbG9nLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NhdGFsb2cueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDBjODJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NhdGFsb2cueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTk2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgICAgICAgICAgeG1sbnM6ZXI9Imh0dHA6Ly9vYXNpcy5uYW1lcy50Yy5lbnRpdHkueG1sbnMueG1sLmNhdGFsb2ciCi0gICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL29hc2lzLm5hbWVzLnRjLmVudGl0eS54bWxucy54bWwuY2F0YWxvZyIKLSAgICAgICAgICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCi0gIDwhLS0gJElkOiBjYXRhbG9nLnhzZCx2IDEuMSAyMDA1LzA2LzI0IDA0OjE3OjUwIGNzYWx0ZXIgRXhwICQgLS0+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0icHViSWRDaGFycyI+Ci0gICAgPCEtLSBBIHN0cmluZyBvZiB0aGUgY2hhcmFjdGVycyBkZWZpbmVkIGFzIHB1YklkQ2hhciBpbiBwcm9kdWN0aW9uIDEzCi0gICAgICAgICBvZiB0aGUgU2Vjb25kIEVkaXRpb24gb2YgdGhlIFhNTCAxLjAgUmVjb21tZW5kYXRpb24uIERvZXMgbm90IGluY2x1ZGUKLSAgICAgICAgIHRoZSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYmVjYXVzZSB0aGV5J3JlIG5vcm1hbGl6ZWQgYnkgWE1MIHBhcnNpbmcuIC0tPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPgotICAgICAgPHhzOnBhdHRlcm4gdmFsdWU9IlthXC16QVwtWjBcLTlcLScoKSssLi86PT87ISojQCRfJV0qIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9J3B1YmxpY0lkZW50aWZpZXInPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJlcjpwdWJJZENoYXJzIi8+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSdwYXJ0aWFsUHVibGljSWRlbnRpZmllcic+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9J2VyOnB1YklkQ2hhcnMnLz4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9J3N5c3RlbU9yUHVibGljJz4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0neHM6c3RyaW5nJz4KLSAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0nc3lzdGVtJy8+Ci0gICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9J3B1YmxpYycvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8IS0tIFRoZSBnbG9iYWwgYXR0cmlidXRlIHhtbDpiYXNlIGlzIG5vdCBleHBsaWNpdGx5IGRlY2xhcmVkOyAtLT4KLSAgPCEtLSBpdCBpcyBhbGxvd2VkIGJ5IHRoZSBhbnlBdHRyaWJ1dGUgZGVjbGFyYXRpb25zLiAtLT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0nY2F0YWxvZyc+Ci0gICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9JzEnIG1heE9jY3Vycz0ndW5ib3VuZGVkJz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0nZXI6cHVibGljJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOnN5c3RlbScvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjp1cmknLz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0nZXI6cmV3cml0ZVN5c3RlbScvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjpyZXdyaXRlVVJJJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOmRlbGVnYXRlUHVibGljJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOmRlbGVnYXRlU3lzdGVtJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOmRlbGVnYXRlVVJJJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOm5leHRDYXRhbG9nJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOmdyb3VwJy8+Ci0gICAgICA8eHM6YW55IG5hbWVzcGFjZT0nIyNvdGhlcicgcHJvY2Vzc0NvbnRlbnRzPSdza2lwJy8+Ci0gICAgPC94czpjaG9pY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHM6SUQnLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9J3ByZWZlcicgdHlwZT0nZXI6c3lzdGVtT3JQdWJsaWMnLz4KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ncHVibGljJz4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55VHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icHVibGljSWQiIHR5cGU9ImVyOnB1YmxpY0lkZW50aWZpZXIiCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1cmkiIHR5cGU9InhzOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9J2lkJyB0eXBlPSd4czpJRCcvPgotICAgICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0nc3lzdGVtJz4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55VHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3lzdGVtSWQiIHR5cGU9InhzOnN0cmluZyIKLSAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InVyaSIgdHlwZT0ieHM6YW55VVJJIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0naWQnIHR5cGU9J3hzOklEJy8+Ci0gICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSd1cmknPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czphbnlVUkkiCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1cmkiIHR5cGU9InhzOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9J2lkJyB0eXBlPSd4czpJRCcvPgotICAgICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ncmV3cml0ZVN5c3RlbSc+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InN5c3RlbUlkU3RhcnRTdHJpbmciCi0gICAgICAgICAgICAgICAgICAgICAgIHR5cGU9InhzOnN0cmluZyIKLSAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJld3JpdGVQcmVmaXgiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9J2lkJyB0eXBlPSd4czpJRCcvPgotICAgICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ncmV3cml0ZVVSSSc+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InVyaUlkU3RhcnRTdHJpbmciCi0gICAgICAgICAgICAgICAgICAgICAgIHR5cGU9InhzOnN0cmluZyIKLSAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJld3JpdGVQcmVmaXgiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9J2lkJyB0eXBlPSd4czpJRCcvPgotICAgICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0nZGVsZWdhdGVQdWJsaWMnPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwdWJsaWNJZFN0YXJ0U3RyaW5nIgotICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJlcjpwYXJ0aWFsUHVibGljSWRlbnRpZmllciIKLSAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNhdGFsb2ciIHR5cGU9InhzOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9J2lkJyB0eXBlPSd4czpJRCcvPgotICAgICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0nZGVsZWdhdGVTeXN0ZW0nPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzeXN0ZW1JZFN0YXJ0U3RyaW5nIgotICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4czpzdHJpbmciCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjYXRhbG9nIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHM6SUQnLz4KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J2RlbGVnYXRlVVJJJz4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55VHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXJpU3RhcnRTdHJpbmciCi0gICAgICAgICAgICAgICAgICAgICAgIHR5cGU9InhzOnN0cmluZyIKLSAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNhdGFsb2ciIHR5cGU9InhzOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9J2lkJyB0eXBlPSd4czpJRCcvPgotICAgICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0nbmV4dENhdGFsb2cnPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjYXRhbG9nIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHM6SUQnLz4KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J2dyb3VwJz4KLSAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0nMScgbWF4T2NjdXJzPSd1bmJvdW5kZWQnPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjpwdWJsaWMnLz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0nZXI6c3lzdGVtJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOnVyaScvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjpyZXdyaXRlU3lzdGVtJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOnJld3JpdGVVUkknLz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0nZXI6ZGVsZWdhdGVQdWJsaWMnLz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0nZXI6ZGVsZWdhdGVTeXN0ZW0nLz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0nZXI6ZGVsZWdhdGVVUkknLz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0nZXI6bmV4dENhdGFsb2cnLz4KLSAgICAgIDx4czphbnkgbmFtZXNwYWNlPScjI290aGVyJyBwcm9jZXNzQ29udGVudHM9J3NraXAnLz4KLSAgICA8L3hzOmNob2ljZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9J3ByZWZlcicgdHlwZT0nZXI6c3lzdGVtT3JQdWJsaWMnLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9J2lkJyB0eXBlPSd4czpJRCcvPgotICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICA8L3hzOmNvbXBsZXhUeXBlPgotCi0gIDx4czplbGVtZW50IG5hbWU9ImNhdGFsb2ciIHR5cGU9ImVyOmNhdGFsb2ciLz4KLSAgPHhzOmVsZW1lbnQgbmFtZT0icHVibGljIiB0eXBlPSJlcjpwdWJsaWMiLz4KLSAgPHhzOmVsZW1lbnQgbmFtZT0ic3lzdGVtIiB0eXBlPSJlcjpzeXN0ZW0iLz4KLSAgPHhzOmVsZW1lbnQgbmFtZT0idXJpIiB0eXBlPSJlcjp1cmkiLz4KLSAgPHhzOmVsZW1lbnQgbmFtZT0icmV3cml0ZVN5c3RlbSIgdHlwZT0iZXI6cmV3cml0ZVN5c3RlbSIvPgotICA8eHM6ZWxlbWVudCBuYW1lPSJyZXdyaXRlVVJJIiB0eXBlPSJlcjpyZXdyaXRlVVJJIi8+Ci0gIDx4czplbGVtZW50IG5hbWU9ImRlbGVnYXRlUHVibGljIiB0eXBlPSJlcjpkZWxlZ2F0ZVB1YmxpYyIvPgotICA8eHM6ZWxlbWVudCBuYW1lPSJkZWxlZ2F0ZVN5c3RlbSIgdHlwZT0iZXI6ZGVsZWdhdGVTeXN0ZW0iLz4KLSAgPHhzOmVsZW1lbnQgbmFtZT0iZGVsZWdhdGVVUkkiIHR5cGU9ImVyOmRlbGVnYXRlVVJJIi8+Ci0gIDx4czplbGVtZW50IG5hbWU9Im5leHRDYXRhbG9nIiB0eXBlPSJlcjpuZXh0Q2F0YWxvZyIvPgotICA8eHM6ZWxlbWVudCBuYW1lPSJncm91cCIgdHlwZT0iZXI6Z3JvdXAiLz4KLQotPC94czpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9jYXRhbG9nMS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9jYXRhbG9nMS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyNGJjMTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY2F0YWxvZzEueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgotICA8cHVibGljIHB1YmxpY0lkPSJJbnZvaWNlSWRfdGVzdCIgdXJpPSIuL0ludm9pY2UvSW52b2ljZS5kdGQiIHdlYlVSTD0iaHR0cDovL3dlYlVSTCIvPgotICA8c3lzdGVtIHN5c3RlbUlkPSJJbnZvaWNlLmR0ZCIgdXJpPSIuL0ludm9pY2UvSW52b2ljZS5kdGQiIGNoYWNoZWQ9InllcyIgcHJvcGVydHk9InZhbHVlMSIvPgotICA8dXJpIG5hbWU9Imh0dHA6Ly93d3cudGVzdC5jb20vSW52b2ljZS5kdGQiIHVyaT0iLi9JbnZvaWNlL0ludm9pY2UuZHRkIiBjaGFjaGVkPSJubyIgcHJvcGVydHk9InZhbHVlMiIvPgotICA8bmV4dENhdGFsb2cgY2F0YWxvZz0iY2F0YWxvZzIueG1sIiBpZD0ibmV4dENhdGFsb2cxIi8+Ci08L2NhdGFsb2c+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9jYXRhbG9nMi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9jYXRhbG9nMi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlY2EwM2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY2F0YWxvZzIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4gCi08Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlXzAwMSIgdXJpPSIuL1B1YmxpY2F0aW9uQ2F0YWxvZy9DYXRhbG9ndWUueHNkIiAvPiAKLSAgPHN5c3RlbSBzeXN0ZW1JZD0iQ2F0YWxvZ3VlLnhzZCIgdXJpPSIuL1B1YmxpY2F0aW9uQ2F0YWxvZy9DYXRhbG9ndWUueHNkIiAvPiAKLSAgPHVyaSBuYW1lPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZS54c2QiIHVyaT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZCIgLz4gCi0gIDxncm91cCBpZD0iZ3JvdXAxIiBwcmVmZXI9InN5c3RlbSI+Ci0gICAgPHB1YmxpYyBwdWJsaWNJZD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWVfMDAyIiB1cmk9Ii4vUHVibGljYXRpb25DYXRhbG9nL0NhdGFsb2d1ZS54c2QiIC8+IAotICA8L2dyb3VwPgotICA8L2NhdGFsb2c+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY2F0YWxvZzJiYWsueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY2F0YWxvZzJiYWsueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGE1YjIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NhdGFsb2cyYmFrLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUiIHVyaT0iLi9QdWJsaWNhdGlvbkNhdGFsb2cvQ2F0YWxvZ3VlLnhzZCIvPgotICA8c3lzdGVtIHN5c3RlbUlkPSJDYXRhbG9ndWUueHNkIiB1cmk9Ii4vUHVibGljYXRpb25DYXRhbG9nL0NhdGFsb2d1ZS54c2QiLz4KLSAgIDxncm91cCBpZD0iZ3JvdXAxIiBwcmVmZXI9InN5c3RlbSI+Ci0gCQk8dXJpIG5hbWU9Imh0dHA6Ly9DYXRhbG9ndWUueHNkIiB1cmk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QiLz4KLSAgIDwvZ3JvdXA+Ci08L2NhdGFsb2c+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9jb21wYXRhYmlsaXR5VGVzdC54bWxjYXRhbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY29tcGF0YWJpbGl0eVRlc3QueG1sY2F0YWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg4NDU1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9jb21wYXRhYmlsaXR5VGVzdC54bWxjYXRhbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi08WE1MQ2F0YWxvZ1NldHRpbmdzPg0KLSAgPFVzZXJFbnRyaWVzPg0KLSAgICA8VXNlckVudHJ5IFRZUEU9IlBVQkxJQyIgSUQ9Ikludm9pY2VJZCIgDQotVVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvWE1MRXhhbXBsZXMvSW52b2ljZTIvSW52b2ljZS5kdGQiLz4NCi0gIDwvVXNlckVudHJpZXM+DQotPC9YTUxDYXRhbG9nU2V0dGluZ3M+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZGVsZWdhdGVBbmRSZXdyaXRlL2NhdGFsb2cueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZGVsZWdhdGVBbmRSZXdyaXRlL2NhdGFsb2cueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Yzc5NGM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2RlbGVnYXRlQW5kUmV3cml0ZS9jYXRhbG9nLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPCFET0NUWVBFIGNhdGFsb2cgUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIiAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+Ci08Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+Ci0gIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBYTUwiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3NnbWwvZG9jYm9vay94bWxjYXRhbG9nIi8+Ci0gIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS9zZ21sL2RvY2Jvb2sveG1sY2F0YWxvZyIvPgotICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iSVNPIDg4Nzk6MTk4NiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3htbGNhdGFsb2ciLz4KLSAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay8iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3NnbWwvZG9jYm9vay94bWxjYXRhbG9nIi8+Ci0gIDxkZWxlZ2F0ZVVSSSB1cmlTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rLyIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3htbGNhdGFsb2ciLz4KLSAgPHJld3JpdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL3Njcm9sbGtlZXBlci5zb3VyY2Vmb3JnZS5uZXQvZHRkcy9zY3JvbGxrZWVwZXItb21mLTEuMC9zY3JvbGxrZWVwZXItb21mLmR0ZCIgcmV3cml0ZVByZWZpeD0iL3Vzci9zaGFyZS94bWwvc2Nyb2xsa2VlcGVyL2R0ZHMvc2Nyb2xsa2VlcGVyLW9tZi5kdGQiLz4KLSAgPHJld3JpdGVVUkkgdXJpU3RhcnRTdHJpbmc9Imh0dHA6Ly9zY3JvbGxrZWVwZXIuc291cmNlZm9yZ2UubmV0L2R0ZHMvc2Nyb2xsa2VlcGVyLW9tZi0xLjAvc2Nyb2xsa2VlcGVyLW9tZi5kdGQiIHJld3JpdGVQcmVmaXg9Ii91c3Ivc2hhcmUveG1sL3Njcm9sbGtlZXBlci9kdGRzL3Njcm9sbGtlZXBlci1vbWYuZHRkIi8+Ci08L2NhdGFsb2c+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9kb2Nib29rL3htbGNhdGFsb2cueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZG9jYm9vay94bWxjYXRhbG9nLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI4M2RlZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9kb2Nib29rL3htbGNhdGFsb2cueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KLTxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgUHVibGlzaGluZy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1wdWIuZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdyZWVrIExldHRlcnMvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tZ3JrMS5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIEluZm9ybWF0aW9uIFBvb2wgVjQuMS4yLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMS4yLTEuMC0xNy4yL2RicG9vbHgubW9kIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEJveCBhbmQgTGluZSBEcmF3aW5nLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWJveC5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIiB1cmk9InhtbC1kdGQtNC4xLjItMS4wLTE3LjIvZG9jYm9va3guZHRkIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdyZWVrIFN5bWJvbHMvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tZ3JrMy5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBOZWdhdGVkIFJlbGF0aW9ucy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1hbXNuLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBOdW1lcmljIGFuZCBTcGVjaWFsIEdyYXBoaWMvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tbnVtLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBYTUwgQ2hhcmFjdGVyIEVudGl0aWVzIFY0LjEuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjEuMi0xLjAtMTcuMi9kYmNlbnR4Lm1vZCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBbHRlcm5hdGl2ZSBHcmVlayBTeW1ib2xzLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWdyazQuZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIFhNTCBOb3RhdGlvbnMgVjQuMS4yLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMS4yLTEuMC0xNy4yL2Ribm90bngubW9kIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIERpYWNyaXRpY2FsIE1hcmtzLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWRpYS5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTW9ub3RvbmlrbyBHcmVlay8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1ncmsyLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBYTUwgQWRkaXRpb25hbCBHZW5lcmFsIEVudGl0aWVzIFY0LjEuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjEuMi0xLjAtMTcuMi9kYmdlbmVudC5tb2QiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIERvY3VtZW50IEhpZXJhcmNoeSBWNC4xLjIvL0VOIiB1cmk9InhtbC1kdGQtNC4xLjItMS4wLTE3LjIvZGJoaWVyeC5tb2QiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBBcnJvdyBSZWxhdGlvbnMvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tYW1zYS5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBPcmRpbmFyeS8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1hbXNvLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBSdXNzaWFuIEN5cmlsbGljLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWN5cmwuZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdlbmVyYWwgVGVjaG5pY2FsLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLXRlY2guZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogRGVsaW1pdGVycy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1hbXNjLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIFhNTCBFeGNoYW5nZSBUYWJsZSBNb2RlbCAxOTk5MDMxNS8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvc29leHRibHguZHRkIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgQ0FMUyBUYWJsZSBNb2RlbCBWNC4xLjIvL0VOIiB1cmk9InhtbC1kdGQtNC4xLjItMS4wLTE3LjIvY2Fsc3RibHguZHRkIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIExhdGluIDEvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tbGF0MS5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBCaW5hcnkgT3BlcmF0b3JzLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWFtc2IuZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIExhdGluIDIvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tbGF0Mi5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBSZWxhdGlvbnMvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tYW1zci5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTm9uLVJ1c3NpYW4gQ3lyaWxsaWMvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tY3lyMi5lbnQiLz4KLSAgPHJld3JpdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMiIgcmV3cml0ZVByZWZpeD0ieG1sLWR0ZC00LjEuMi0xLjAtMTcuMiIvPgotICA8cmV3cml0ZVVSSSB1cmlTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMiIgcmV3cml0ZVByZWZpeD0ieG1sLWR0ZC00LjEuMi0xLjAtMTcuMiIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBYTUwgSW5mb3JtYXRpb24gUG9vbCBWNC4yLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9kYnBvb2x4Lm1vZCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2RvY2Jvb2t4LmR0ZCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBYTUwgQ2hhcmFjdGVyIEVudGl0aWVzIFY0LjIvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2RiY2VudHgubW9kIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIFhNTCBOb3RhdGlvbnMgVjQuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZGJub3RueC5tb2QiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgWE1MIEFkZGl0aW9uYWwgR2VuZXJhbCBFbnRpdGllcyBWNC4yLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9kYmdlbmVudC5tb2QiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIERvY3VtZW50IEhpZXJhcmNoeSBWNC4yLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9kYmhpZXJ4Lm1vZCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIENBTFMgVGFibGUgTW9kZWwgVjQuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvY2Fsc3RibHguZHRkIi8+Ci0gIDxyZXdyaXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yIiByZXdyaXRlUHJlZml4PSJ4bWwtZHRkLTQuMi0xLjAtMTcuMiIvPgotICA8cmV3cml0ZVVSSSB1cmlTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIiIHJld3JpdGVQcmVmaXg9InhtbC1kdGQtNC4yLTEuMC0xNy4yIi8+Ci08L2NhdGFsb2c+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlLWNhdGFsb2cueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS1jYXRhbG9nLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY3Y2QwNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlLWNhdGFsb2cueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPCFET0NUWVBFIGNhdGFsb2cKLSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iCi0gImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgotPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciCi0gICAgICAgICBwcmVmZXI9InB1YmxpYyI+Ci0gPHVyaSBuYW1lPSJodHRwOi8vYXBhY2hlLm9yZy94bWwveGNhdGFsb2cvZXhhbXBsZSIgdXJpPSIuL2V4YW1wbGUvZXhhbXBsZS54c2QiLz4gIAotIDxzeXN0ZW0gc3lzdGVtSWQ9Im15ZXhhbXBsZS54c2QiIHVyaT0iLi9leGFtcGxlL2V4YW1wbGUtbm9uYW1lc3BhY2UueHNkIi8+ICAgIAotICAgIAotIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9BLy8iCi0gICAgICAgICAgICAgICAgIGNhdGFsb2c9ImV4YW1wbGUtY2F0YWxvZzIueG1sIi8+Ci0KLSAgICAgICAgICAgICAgICAgICAKLTwvY2F0YWxvZz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlLWNhdGFsb2cyLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUtY2F0YWxvZzIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGJiMWVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUtY2F0YWxvZzIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08IURPQ1RZUEUgY2F0YWxvZwotIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIKLSAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+Ci08Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyIKLSAgICAgICAgIHByZWZlcj0icHVibGljIj4KLSA8cHVibGljIHB1YmxpY0lkPSItLy9BLy9YTUwgQ0FUQUxPRyBJREVOVElGSUVSLy9FTiIgCi0gICAgICAgICB1cmk9Ii4vZXhhbXBsZS9leGFtcGxlLmVudCIvPgotPC9jYXRhbG9nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS1kdGQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLWR0ZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0YWFhZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLWR0ZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPCFET0NUWVBFIHJvb3QgWwotIDwhRU5USVRZIHRleHQgUFVCTElDICItLy9BLy9YTUwgQ0FUQUxPRyBJREVOVElGSUVSLy9FTiIgCi0gICJ1cm46cHVibGljaWQ6LTpBOlhNTCtDQVRBTE9HK0lERU5USUZJRVI6RU4iPgotXT4KLTxyb290PiZ0ZXh0Ozwvcm9vdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS1ub25hbWVzcGFjZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUtbm9uYW1lc3BhY2UueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjI5OThkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS1ub25hbWVzcGFjZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotIDx4czplbGVtZW50IG5hbWU9InJvb3QiIHR5cGU9InhzOmFueVVSSSIvPgotPC94czpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUtc2NoZW1hLW5vbmFtZXNwYWNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS1zY2hlbWEtbm9uYW1lc3BhY2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTE3NWYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS1zY2hlbWEtbm9uYW1lc3BhY2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxyb290IHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JICAgeHNpOm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb249Im15ZXhhbXBsZS54c2QiPgotaHR0cDovL2FwYWNoZS5vcmcveG1sL2FueVVSSTwvcm9vdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS1zY2hlbWEueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLXNjaGVtYS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5N2NiM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLXNjaGVtYS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPHJvb3QgIHhtbG5zPSJodHRwOi8vYXBhY2hlLm9yZy94bWwveGNhdGFsb2cvZXhhbXBsZSI+Ci1odHRwOi8vYXBhY2hlLm9yZy94bWwvYW55VVJJPC9yb290PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLmVudCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS5lbnQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkMDg3NTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLmVudAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUhlbGxvIHdvcmxkIQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxYTI5ZmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgICAgICAgICAgeG1sbnM9Imh0dHA6Ly9hcGFjaGUub3JnL3htbC94Y2F0YWxvZy9leGFtcGxlIgotICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9hcGFjaGUub3JnL3htbC94Y2F0YWxvZy9leGFtcGxlIj4KLSA8eHM6ZWxlbWVudCBuYW1lPSJyb290IiB0eXBlPSJ4czphbnlVUkkiLz4KLTwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvcmVwb3J0LWNhdGFsb2dfbWFwcGVkaW5jbHVkZWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvcmVwb3J0LWNhdGFsb2dfbWFwcGVkaW5jbHVkZWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjEyN2IxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3JlcG9ydC1jYXRhbG9nX21hcHBlZGluY2x1ZGVkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTwhRE9DVFlQRSBjYXRhbG9nCi0gUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIgotICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KLTxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIgotCXByZWZlcj0icHVibGljIj4KLQkKLQk8dXJpIG5hbWU9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVwb3J0IgotCQl1cmk9Ii4vUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL3JlcG9ydF8ueHNkIiAvPgotICAgIDwhLS0gd2UgY2FuIG5vdCBtYXAgUHVibGljSWQgb3IgVVJJIG9mIHRoZSBpbmNsdWRlZC9yZWRlZmluZWQgc2NoZW1hcyAtLT4JCi0JPHVyaSBuYW1lPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL0lQTyIKLQkJdXJpPSIuL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9pcG9fLnhzZCIgLz4KLQk8c3lzdGVtIHN5c3RlbUlkPSJhZGRyZXNzXy54c2QiCi0JCXVyaT0iLi9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvYWRkcmVzcy54c2QiIC8+Ci0KLTwvY2F0YWxvZz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9yZXBvcnQtY2F0YWxvZ19wdWJsaWMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvcmVwb3J0LWNhdGFsb2dfcHVibGljLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM0ZWNiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9yZXBvcnQtY2F0YWxvZ19wdWJsaWMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPCFET0NUWVBFIGNhdGFsb2cKLSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iCi0gImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgotPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciCi0JcHJlZmVyPSJwdWJsaWMiPgotCQotCTx1cmkgbmFtZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9SZXBvcnQiCi0JCXVyaT0iLi9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0Xy54c2QiIC8+Ci0gICAgPCEtLSB3ZSBjYW4gbm90IG1hcCBQdWJsaWNJZCBvciBVUkkgb2YgdGhlIGluY2x1ZGVkL3JlZGVmaW5lZCBzY2hlbWFzIC0tPgkKLQk8dXJpIG5hbWU9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIgotCQl1cmk9Ii4vUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2lwby54c2QiIC8+Ci0JCi0KLQotPC9jYXRhbG9nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3JlcG9ydC1jYXRhbG9nX3N5c3RlbS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9yZXBvcnQtY2F0YWxvZ19zeXN0ZW0ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjZhMWI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3JlcG9ydC1jYXRhbG9nX3N5c3RlbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZUEUgY2F0YWxvZwotIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIKLSAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+Ci08Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+Ci0KLQk8dXJpIG5hbWU9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVwb3J0IgotCQl1cmk9Ii4vUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL3JlcG9ydF8ueHNkIiAvPgotCTxzeXN0ZW0gc3lzdGVtSWQ9Imlwb19fLnhzZCIKLQkJdXJpPSIuL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9pcG9fLnhzZCIgLz4KLQk8c3lzdGVtIHN5c3RlbUlkPSJhZGRyZXNzXy54c2QiCi0JCXVyaT0iLi9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvYWRkcmVzcy54c2QiIC8+Ci0KLTwvY2F0YWxvZz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIvY2F0YWxvZy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIvY2F0YWxvZy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4YjA0YTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL2NhdGFsb2cueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/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+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImRpc2FibGUtb3V0cHV0LWVzY2FwaW5nIiB0eXBlPSJZZXNOb1R5cGUiIGRlZmF1bHQ9Im5vIiAvPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0idXNlLWF0dHJpYnV0ZS1zZXRzIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0idXNlLWF0dHJpYnV0ZS1zZXRzIiB0eXBlPSJ4c2Q6Tk1UT0tFTlMiIHVzZT0ib3B0aW9uYWwiLz4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotPC94c2Q6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3BsdWdpbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM3NWM3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08cGx1Z2luPgotCi0gICAgCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5jYXRhbG9nQ29udHJpYnV0aW9ucyI+Ci0JICA8Y2F0YWxvZ0NvbnRyaWJ1dGlvbj4gCi0gICAgICAgICAgIDxzeXN0ZW0gaWQ9InRlc3RTeXN0ZW1JZCIKLSAgICAgICAgICAgICAgIHN5c3RlbUlkPSJodHRwOi8vcGVyc29uYWwvcGVyc29uYWwuZHRkIgotICAgICAgICAgICAgICAgdXJpPSJkYXRhL1BlcnNvbmFsL3BlcnNvbmFsLmR0ZCI+IAotICAgICAgICAgICAgICAgPC9zeXN0ZW0+Ci0gICAgICAgICAgIDxwdWJsaWMgaWQ9InRlc3RQdWJsaWNJZDEiCi0gICAgICAgICAgICAgICBwdWJsaWNJZD0iSW52b2ljZUlkX3Rlc3QiCi0gICAgICAgICAgICAgICB1cmk9ImRhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZCIKLSAgICAgICAgICAgICAgIHdlYlVSTD0iaHR0cDovL29yZy5lY2xpcHNlLndzdC54bWwuZXhhbXBsZS9JbnZvaWNlLmR0ZCI+Ci0gICAgICAgICAgPC9wdWJsaWM+Ci0gICAgICAgICAgPHVyaSBpZD0idGVzdFVyaUlkMSIKLSAgICAgICAgICAgICAgIG5hbWU9Imh0dHA6Ly9hcGFjaGUub3JnL3htbC94Y2F0YWxvZy9leGFtcGxlIiAKLSAgICAgICAgICAgICAgIHVyaT0iZGF0YS9leGFtcGxlL2V4YW1wbGUueHNkIi8+IAotICAgICAgICAgIDx1cmkgaWQ9InRlc3RVUklJZDIiCi0gICAgICAgICAgICAgICBuYW1lPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgICAgICAgICAgICAgIHVyaT0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS54c2QvY2FjaGUvd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS54c2QiPgotICAgICAgICAgIDwvdXJpPiAKLSAgICAgICAgICA8bmV4dENhdGFsb2cgaWQ9InRlc3ROZXN0ZWRDYXRhbG9nIgotICAgICAgICAgICAgICAgY2F0YWxvZz0iZGF0YS9jYXRhbG9nMS54bWwiLz4gCi0gICAgICAgPC9jYXRhbG9nQ29udHJpYnV0aW9uPiAKLQk8L2V4dGVuc2lvbj4gCi0gICAKLSAKLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQWJzdHJhY3RDYXRhbG9nVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQWJzdHJhY3RDYXRhbG9nVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDQ1ODIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0Fic3RyYWN0Q2F0YWxvZ1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5YTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLkNhdGFsb2dDb250cmlidXRvclJlZ2lzdHJ5UmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLkNhdGFsb2dTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSUNhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSUNhdGFsb2dFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JTmV4dENhdGFsb2c7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0Q2F0YWxvZ1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZQotewotICAgIHByaXZhdGUgQ2F0YWxvZ1NldCBjYXRhbG9nU2V0ID0gbmV3IENhdGFsb2dTZXQoKTsKLSAgICAKLSAgICBwcm90ZWN0ZWQgSUNhdGFsb2cgc3lzdGVtQ2F0YWxvZzsKLQotICAgIHByb3RlY3RlZCBJQ2F0YWxvZyB1c2VyQ2F0YWxvZzsKLQotICAgIHByb3RlY3RlZCBJQ2F0YWxvZyBkZWZhdWx0Q2F0YWxvZzsKLSAgICAKLSAgICAKLSAgICBwdWJsaWMgQWJzdHJhY3RDYXRhbG9nVGVzdChTdHJpbmcgbmFtZSkKLSAgICB7Ci0gICAgICAgIHN1cGVyKG5hbWUpOwotICAgICAgICAKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgc3RhdGljIExpc3QgZ2V0Q2F0YWxvZ0VudHJpZXMoSUNhdGFsb2cgY2F0YWxvZywgaW50IGVudHJ5VHlwZSkKLSAgICB7Ci0gICAgICAgIExpc3QgcmVzdWx0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBJQ2F0YWxvZ0VudHJ5W10gZW50cmllcyA9IGNhdGFsb2cuZ2V0Q2F0YWxvZ0VudHJpZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBJQ2F0YWxvZ0VudHJ5IGVudHJ5ID0gZW50cmllc1tpXTsKLSAgICAgICAgICAgIGlmIChlbnRyeS5nZXRFbnRyeVR5cGUoKSA9PSBlbnRyeVR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFkZChlbnRyeSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgcHJvdGVjdGVkIElDYXRhbG9nIGdldENhdGFsb2coU3RyaW5nIGlkLCBTdHJpbmcgdXJpU3RyaW5nKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotCQlyZXR1cm4gY2F0YWxvZ1NldC5sb29rdXBPckNyZWF0ZUNhdGFsb2coaWQsIHVyaVN0cmluZyk7Ci0gICAgfQotICAgIAotCi0gICAgcHVibGljIHZvaWQgaW5pdENhdGFsb2dzKCkKLSAgICB7Ci0gICAgICAgIGRlZmF1bHRDYXRhbG9nID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGVmYXVsdFhNTENhdGFsb2coKTsKLSAgICAgICAgSU5leHRDYXRhbG9nW10gbmV4dENhdGFsb2dzID0gZGVmYXVsdENhdGFsb2cuZ2V0TmV4dENhdGFsb2dzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmV4dENhdGFsb2dzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBJTmV4dENhdGFsb2cgY2F0YWxvZyA9IG5leHRDYXRhbG9nc1tpXTsKLSAgICAgICAgICAgIElDYXRhbG9nIHJlZmVyZW5jZWRDYXRhbG9nID0gY2F0YWxvZy5nZXRSZWZlcmVuY2VkQ2F0YWxvZygpOwotICAgICAgICAgICAgaWYgKHJlZmVyZW5jZWRDYXRhbG9nICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKFhNTENvcmVQbHVnaW4uU1lTVEVNX0NBVEFMT0dfSUQKLSAgICAgICAgICAgICAgICAgICAgICAgIC5lcXVhbHMocmVmZXJlbmNlZENhdGFsb2cuZ2V0SWQoKSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzeXN0ZW1DYXRhbG9nID0gcmVmZXJlbmNlZENhdGFsb2c7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChYTUxDb3JlUGx1Z2luLlVTRVJfQ0FUQUxPR19JRAotICAgICAgICAgICAgICAgICAgICAgICAgLmVxdWFscyhyZWZlcmVuY2VkQ2F0YWxvZy5nZXRJZCgpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVzZXJDYXRhbG9nID0gcmVmZXJlbmNlZENhdGFsb2c7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBzdXBlci5zZXRVcCgpOwotICAgICAgICBpbml0Q2F0YWxvZ3MoKTsKLSAgICB9Ci0JCi0JcHJvdGVjdGVkIHN0YXRpYyBTdHJpbmcgbWFrZUFic29sdXRlKFN0cmluZyBiYXNlTG9jYXRpb24sIFN0cmluZyBsb2NhdGlvbikKLQkgIHsKLQkJICBVUkwgbG9jYWwgPSBudWxsOwotCQkgIGxvY2F0aW9uID0gbG9jYXRpb24ucmVwbGFjZSgnXFwnLCAnLycpOwotCQkgIHRyeQotCQkgIHsKLQkJCSAgVVJMIGJhc2VVUkwgPSBuZXcgVVJMKGJhc2VMb2NhdGlvbik7Ci0JCQkgIGxvY2FsID0gbmV3IFVSTChiYXNlVVJMLCBsb2NhdGlvbik7Ci0JCSAgfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0JCSAgewotCQkgIH0KLQkJICAKLQkJICBpZiAobG9jYWwgIT0gbnVsbCkKLQkJICB7Ci0JCQkgIHJldHVybiBsb2NhbC50b1N0cmluZygpOwotCQkgIH0gZWxzZQotCQkgIHsKLQkJCSAgcmV0dXJuIGxvY2F0aW9uOwotCQkgIH0KLQkgIH0KLQkKLQlwcm90ZWN0ZWQgc3RhdGljIFVSTCByZXNvbHZlUGx1Z2luTG9jYXRpb24oU3RyaW5nIHBsdWdpbklkKXsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShwbHVnaW5JZCk7Ci0JCWlmIChidW5kbGUgIT0gbnVsbCkKLQkJewotCQkJVVJMIGJ1bmRsZUVudHJ5ID0gYnVuZGxlLmdldEVudHJ5KCIvIik7Ci0JCQl0cnkKLQkJCXsKLQkJCQlyZXR1cm4gUGxhdGZvcm0ucmVzb2x2ZShidW5kbGVFbnRyeSk7Ci0JCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQkJewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCS8vIHNlZSBDYXRhbG9nQ29udHJpYnV0b3JSZWdpc3RyeVJlYWRlci5yZXNvbHZlUGF0aChTdHJpbmcgcGF0aCkgCi0JICBwcm90ZWN0ZWQgU3RyaW5nIHJlc29sdmVQYXRoKFN0cmluZyBwbHVnaW5JZCwgU3RyaW5nIHBhdGgpIAotCSAgewotCi0JCSAgcmV0dXJuICBDYXRhbG9nQ29udHJpYnV0b3JSZWdpc3RyeVJlYWRlci5yZXNvbHZlUGF0aCggCi0JCQkJICBDYXRhbG9nQ29udHJpYnV0b3JSZWdpc3RyeVJlYWRlci5nZXRQbGF0Zm9ybVVSTChwbHVnaW5JZCksIHBhdGgpOwotCSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9BbGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQWxsVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM0YmQ3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9BbGxUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1wdWJsaWMgY2xhc3MgQWxsVGVzdHMgewotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKAotCQkJCSJUZXN0IGZvciBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMiKTsKLQkJLy8kSlVuaXQtQkVHSU4kCi0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDYXRhbG9nUmVhZGVyVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDYXRhbG9nUmVzb2x2ZXJUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENhdGFsb2dXcml0ZXJUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENhdGFsb2dDb250cmlidXRvclJlZ2lzdHJ5UmVhZGVyVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDYXRhbG9nVGVzdC5jbGFzcyk7Ci0JCS8vJEpVbml0LUVORCQKLQkJcmV0dXJuIHN1aXRlOwotCX0KLSAgICAKLQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nQ29udHJpYnV0b3JSZWdpc3RyeVJlYWRlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0NhdGFsb2dDb250cmlidXRvclJlZ2lzdHJ5UmVhZGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2M2ZjNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0NhdGFsb2dDb250cmlidXRvclJlZ2lzdHJ5UmVhZGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuWE1MQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JQ2F0YWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JQ2F0YWxvZ0VudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLnByb3Zpc2lvbmFsLklOZXh0Q2F0YWxvZzsKLQotCi0KLXB1YmxpYyBjbGFzcyBDYXRhbG9nQ29udHJpYnV0b3JSZWdpc3RyeVJlYWRlclRlc3QgZXh0ZW5kcyBBYnN0cmFjdENhdGFsb2dUZXN0Ci17Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBzdXBlci5zZXRVcCgpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgc3VwZXIudGVhckRvd24oKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ2F0YWxvZ0NvbnRyaWJ1dG9yUmVnaXN0cnlSZWFkZXJUZXN0KFN0cmluZyBuYW1lKQotICAgIHsKLSAgICAgICAgc3VwZXIobmFtZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIHZvaWQgdGVzdFJlYWRSZWdpc3RyeSgpIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGFzc2VydE5vdE51bGwoZGVmYXVsdENhdGFsb2cpOwotICAgICAgICBhc3NlcnRFcXVhbHMoWE1MQ29yZVBsdWdpbi5ERUZBVUxUX0NBVEFMT0dfSUQsIGRlZmF1bHRDYXRhbG9nLmdldElkKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZGVmYXVsdENhdGFsb2cuZ2V0TmV4dENhdGFsb2dzKCkubGVuZ3RoKTsKLQotCQlTdHJpbmcgcGx1Z2luSWQgPSBUZXN0UGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKTsKLSAgICAKLQkJICAvLyB0ZXN0IHN5c3RlbSBlbnRyaWVzCi0gICAgICAgIGFzc2VydE5vdE51bGwoc3lzdGVtQ2F0YWxvZyk7Ci0gICAgICAgIExpc3QgZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKHN5c3RlbUNhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9TWVNURU0pOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGVudHJpZXMuc2l6ZSgpOyBpKyspCi0JCXsKLQkJCUlDYXRhbG9nRW50cnkgZW50cnkgPSAoSUNhdGFsb2dFbnRyeSllbnRyaWVzLmdldChpKTsKLQkJCWFzc2VydE5vdE51bGwoZW50cnkuZ2V0SWQoKSk7Ci0JCQlpZigidGVzdFN5c3RlbUlkIi5lcXVhbHMoZW50cnkuZ2V0SWQoKSkpCi0JCQl7Ci0JCQkJU3RyaW5nIHJlc29sdmVkVVJJID0gcmVzb2x2ZVBhdGgocGx1Z2luSWQsICJkYXRhL1BlcnNvbmFsL3BlcnNvbmFsLmR0ZCIpOwotCQkJCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgZW50cnkuZ2V0VVJJKCkpOwotCQkJCWFzc2VydEVxdWFscygiaHR0cDovL3BlcnNvbmFsL3BlcnNvbmFsLmR0ZCIsIGVudHJ5LmdldEtleSgpKTsKLQkJCX0KLQkJfQotCQkKLQkJLy8gdGVzdCBwdWJsaWMgZW50cmllcwotICAgICAgICBlbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMoc3lzdGVtQ2F0YWxvZywgSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1BVQkxJQyk7ICAgICAgCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgZW50cmllcy5zaXplKCk7IGkrKykKLQkJewotCQkJSUNhdGFsb2dFbnRyeSBlbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KGkpOwotCQkJaWYoInRlc3RQdWJsaWNJZDEiLmVxdWFscyhlbnRyeS5nZXRJZCgpKSkKLQkJCXsKLQkJCQlTdHJpbmcgcmVzb2x2ZWRVUkkgPSByZXNvbHZlUGF0aChwbHVnaW5JZCwgImRhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZCIpOwotCQkJCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgZW50cnkuZ2V0VVJJKCkpOwotCQkJCWFzc2VydEVxdWFscygiSW52b2ljZUlkX3Rlc3QiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCQkJLy8gdGVzdCB1c2VyIGRlZmluZWQgYXR0cmlidXRlcwotCQkJCWFzc2VydEVxdWFscygiaHR0cDovL29yZy5lY2xpcHNlLndzdC54bWwuZXhhbXBsZS9JbnZvaWNlLmR0ZCIsIGVudHJ5LmdldEF0dHJpYnV0ZVZhbHVlKCJ3ZWJVUkwiKSk7Ci0KLQkJCX0KLQkJCQotCQkJZWxzZSBpZigidGVzdE1hcHBpbmdJbmZvIi5lcXVhbHMoZW50cnkuZ2V0SWQoKSkpCi0JCQl7Ci0JCQkJU3RyaW5nIHJlc29sdmVkVVJJID0gcmVzb2x2ZVBhdGgocGx1Z2luSWQsICJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnhzZC9jYWNoZS93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLnhzZCIpOwotCQkJCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgZW50cnkuZ2V0VVJJKCkpOwotCQkJCWFzc2VydEVxdWFscygiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWExIiwgZW50cnkuZ2V0S2V5KCkpOwotCQkJfQotCSAgICAgCi0JCX0KLSAgICAgIAotICAgICAgICAvLyB0ZXN0IHVyaSBlbnRyaWVzCi0gICAgICAgIGVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhzeXN0ZW1DYXRhbG9nLCBJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfVVJJKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyaWVzLnNpemUoKTsgaSsrKQotCQl7Ci0JCQlJQ2F0YWxvZ0VudHJ5IGVudHJ5ID0gKElDYXRhbG9nRW50cnkpZW50cmllcy5nZXQoaSk7Ci0JCQlpZigidGVzdFVSSUlkMSIuZXF1YWxzKGVudHJ5LmdldElkKCkpKQotCQkJewotCQkJCSAgU3RyaW5nIHJlc29sdmVkVVJJID0gcmVzb2x2ZVBhdGgocGx1Z2luSWQsICJkYXRhL2V4YW1wbGUvZXhhbXBsZS54c2QiKTsKLQkJCSAgICAgIGFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgZW50cnkuZ2V0VVJJKCkpOwotCQkJICAgICAgYXNzZXJ0RXF1YWxzKCJodHRwOi8vYXBhY2hlLm9yZy94bWwveGNhdGFsb2cvZXhhbXBsZSIsIGVudHJ5LmdldEtleSgpKTsKLQkJCX0KLQkJCWVsc2UgaWYoInRlc3RVUklJZDIiLmVxdWFscyhlbnRyeS5nZXRJZCgpKSkKLQkJCXsKLQkJCQlTdHJpbmcgcmVzb2x2ZWRVUkkgPSByZXNvbHZlUGF0aChwbHVnaW5JZCwgInBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UueHNkL2NhY2hlL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEueHNkIik7Ci0JCQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsIGVudHJ5LmdldEtleSgpKTsKLQkJCX0KLQkJfQotICAgICAgCi0gICAgICAgIC8vIHRlc3QgdGVzdGVkIGNhdGFsb2cKLSAgICAgICAgSU5leHRDYXRhbG9nW10gbmV4dENhdGFsb2dFbnRyaWVzID0gc3lzdGVtQ2F0YWxvZy5nZXROZXh0Q2F0YWxvZ3MoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZXh0Q2F0YWxvZ0VudHJpZXMubGVuZ3RoOyBpKyspCi0JCXsKLQkJCUlOZXh0Q2F0YWxvZyBuZXh0Q2F0YWxvZ0VudHJ5ID0gKElOZXh0Q2F0YWxvZykgbmV4dENhdGFsb2dFbnRyaWVzW2ldOwotCQkJaWYoInRlc3ROZXN0ZWRDYXRhbG9nIi5lcXVhbHMobmV4dENhdGFsb2dFbnRyeS5nZXRJZCgpKSkKLQkJCXsKLQkJCQlTdHJpbmcgcmVzb2x2ZWRVUkkgPSByZXNvbHZlUGF0aChwbHVnaW5JZCwgImRhdGEvY2F0YWxvZzEueG1sIik7Ci0JCQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCBuZXh0Q2F0YWxvZ0VudHJ5LmdldENhdGFsb2dMb2NhdGlvbigpKTsKLQkJCQlJQ2F0YWxvZyBuZXh0Q2F0YWxvZyA9IG5leHRDYXRhbG9nRW50cnkuZ2V0UmVmZXJlbmNlZENhdGFsb2coKTsKLQkJCQlhc3NlcnROb3ROdWxsKG5leHRDYXRhbG9nKTsKLQkJCQlhc3NlcnRFcXVhbHMoMywgbmV4dENhdGFsb2cuZ2V0Q2F0YWxvZ0VudHJpZXMoKS5sZW5ndGgpOwotCQkJCS8vIHRlc3QgcHVibGljIGVudHJpZXMKLQkJCQllbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMobmV4dENhdGFsb2csCi0JCQkJCQlJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfUFVCTElDKTsKLQkJCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOwotCQkJCUlDYXRhbG9nRW50cnkgZW50cnkgPSAoSUNhdGFsb2dFbnRyeSkgZW50cmllcy5nZXQoMCk7Ci0JCQkJLy9VUkkgdXJpID0gVVJJSGVscGVyLmdldFVSSUZvckZpbGVQYXRoKHJlc29sdmVkVVJJKTsKLQkJCQkvL3Jlc29sdmVkVVJJID0gVVJJSGVscGVyLm1ha2VBYnNvbHV0ZSh1cmkudG9VUkwoKSwgIi4vSW52b2ljZS9JbnZvaWNlLmR0ZCIpOwotCQkJCWFzc2VydEVxdWFscygiLi9JbnZvaWNlL0ludm9pY2UuZHRkIiwgZW50cnkuZ2V0VVJJKCkpOwotCQkJCWFzc2VydEVxdWFscygiSW52b2ljZUlkX3Rlc3QiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCQkJLy8gdGVzdCBzeXN0ZW0gZW50cmllcwotCQkJCWVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhuZXh0Q2F0YWxvZywKLQkJCQkJCUlDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9TWVNURU0pOwotCQkJCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCQkJZW50cnkgPSAoSUNhdGFsb2dFbnRyeSkgZW50cmllcy5nZXQoMCk7Ci0JCQkJYXNzZXJ0RXF1YWxzKCIuL0ludm9pY2UvSW52b2ljZS5kdGQiLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCQkJYXNzZXJ0RXF1YWxzKCJJbnZvaWNlLmR0ZCIsIGVudHJ5LmdldEtleSgpKTsKLQkJCQkvLyB0ZXN0IHVyaSBlbnRyaWVzCi0JCQkJZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKG5leHRDYXRhbG9nLAotCQkJCQkJSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1VSSSk7Ci0JCQkJYXNzZXJ0RXF1YWxzKDEsIGVudHJpZXMuc2l6ZSgpKTsKLQkJCQllbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KSBlbnRyaWVzLmdldCgwKTsKLQkJCQlhc3NlcnRFcXVhbHMoIi4vSW52b2ljZS9JbnZvaWNlLmR0ZCIsIGVudHJ5LmdldFVSSSgpKTsKLQkJCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly93d3cudGVzdC5jb20vSW52b2ljZS5kdGQiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCQl9Ci0JCX0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nUmVhZGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ1JlYWRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc5MzU1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nUmVhZGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLkNhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSUNhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSUNhdGFsb2dFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JTmV4dENhdGFsb2c7Ci0KLQotcHVibGljIGNsYXNzIENhdGFsb2dSZWFkZXJUZXN0IGV4dGVuZHMgQWJzdHJhY3RDYXRhbG9nVGVzdCB7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JfQotCi0JcHVibGljIENhdGFsb2dSZWFkZXJUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCi0JLyoKLQkgKiBDbGFzcyB1bmRlciB0ZXN0IGZvciB2b2lkIHJlYWQoSUNhdGFsb2csIFN0cmluZykKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UmVhZENhdGFsb2coKXRocm93cyBFeGNlcHRpb24gewotCi0JCS8vcmVhZCBjYXRhbG9nCi0JCVN0cmluZyBjYXRhbG9nRmlsZSA9ICIvZGF0YS9jYXRhbG9nMS54bWwiOwotCQlVUkwgY2F0YWxvZ1VybCA9IFRlc3RQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KGNhdGFsb2dGaWxlKTsKLQkJYXNzZXJ0Tm90TnVsbChjYXRhbG9nVXJsKTsKLQkJVVJMIGJhc2UgPSBQbGF0Zm9ybS5yZXNvbHZlKGNhdGFsb2dVcmwpOwotCi0JCUNhdGFsb2cgY2F0YWxvZyA9IChDYXRhbG9nKWdldENhdGFsb2coImNhdGFsb2cxIiwgYmFzZS50b1N0cmluZygpKTsKLQkJLy9DYXRhbG9nUmVhZGVyLnJlYWQoY2F0YWxvZywgY2F0YWxvZ0ZpbGVQYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbChjYXRhbG9nKTsKLQkJCi0JCS8vIHRlc3QgbWFpbiBjYXRhbG9nIC0gY2F0YWxvZzEueG1sCi0JCS8vYXNzZXJ0RXF1YWxzKCJjYXQxIiwgY2F0YWxvZy5nZXRJZCgpKTsKLQkJYXNzZXJ0RXF1YWxzKDMsIGNhdGFsb2cuZ2V0Q2F0YWxvZ0VudHJpZXMoKS5sZW5ndGgpOwotCQkJCi0JCS8vIHRlc3QgcHVibGljIGVudHJpZXMKLQkJTGlzdCBlbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMoY2F0YWxvZywgSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1BVQkxJQyk7Ci0JCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCUlDYXRhbG9nRW50cnkgZW50cnkgPSAoSUNhdGFsb2dFbnRyeSllbnRyaWVzLmdldCgwKTsKLQkJLy9TdHJpbmcgcmVzb2x2ZWRVUkkgPSBVUklIZWxwZXIubWFrZUFic29sdXRlKGJhc2UsICIuL0ludm9pY2UvSW52b2ljZS5kdGQiKTsKLQkJCi0JCWFzc2VydEVxdWFscygiLi9JbnZvaWNlL0ludm9pY2UuZHRkIiwgZW50cnkuZ2V0VVJJKCkpOwotCQlhc3NlcnRFcXVhbHMoIkludm9pY2VJZF90ZXN0IiwgZW50cnkuZ2V0S2V5KCkpOwotCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly93ZWJVUkwiLCBlbnRyeS5nZXRBdHRyaWJ1dGVWYWx1ZSgid2ViVVJMIikpOwotCi0JCQotCQkvLyAgdGVzdCBzeXN0ZW0gZW50cmllcwotCQllbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMoY2F0YWxvZywgSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1NZU1RFTSk7Ci0JCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCWVudHJ5ID0gKElDYXRhbG9nRW50cnkpZW50cmllcy5nZXQoMCk7Ci0JCWFzc2VydEVxdWFscygiLi9JbnZvaWNlL0ludm9pY2UuZHRkIiwgZW50cnkuZ2V0VVJJKCkpOwotCQlhc3NlcnRFcXVhbHMoIkludm9pY2UuZHRkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQlhc3NlcnRFcXVhbHMoInllcyIsIGVudHJ5LmdldEF0dHJpYnV0ZVZhbHVlKCJjaGFjaGVkIikpOwotCQlhc3NlcnRFcXVhbHMoInZhbHVlMSIsIGVudHJ5LmdldEF0dHJpYnV0ZVZhbHVlKCJwcm9wZXJ0eSIpKTsKLQotCi0JCS8vICB0ZXN0IHVyaSBlbnRyaWVzCi0JCWVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhjYXRhbG9nLCBJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfVVJJKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGVudHJpZXMuc2l6ZSgpKTsKLQkJZW50cnkgPSAoSUNhdGFsb2dFbnRyeSllbnRyaWVzLmdldCgwKTsKLQkJYXNzZXJ0RXF1YWxzKCIuL0ludm9pY2UvSW52b2ljZS5kdGQiLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCWFzc2VydEVxdWFscygiaHR0cDovL3d3dy50ZXN0LmNvbS9JbnZvaWNlLmR0ZCIsIGVudHJ5LmdldEtleSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJubyIsIGVudHJ5LmdldEF0dHJpYnV0ZVZhbHVlKCJjaGFjaGVkIikpOwotCQlhc3NlcnRFcXVhbHMoInZhbHVlMiIsIGVudHJ5LmdldEF0dHJpYnV0ZVZhbHVlKCJwcm9wZXJ0eSIpKTsKLQkJCi0JCS8vICB0ZXN0IG5leHQgY2F0YWxvZyAtIGNhdGFsb2cyLnhtbAotCQlJTmV4dENhdGFsb2dbXSBuZXh0Q2F0YWxvZ0VudHJpZXMgPSBjYXRhbG9nLmdldE5leHRDYXRhbG9ncygpOwotCQlhc3NlcnRFcXVhbHMoMSwgbmV4dENhdGFsb2dFbnRyaWVzLmxlbmd0aCk7Ci0JCi0JCUlOZXh0Q2F0YWxvZyBuZXh0Q2F0YWxvZ0VudHJ5ID0gKElOZXh0Q2F0YWxvZyluZXh0Q2F0YWxvZ0VudHJpZXNbMF07Ci0JCWFzc2VydE5vdE51bGwobmV4dENhdGFsb2dFbnRyeSk7Ci0JCQotLy8JCVN0cmluZyBjYXRhbG9nUmVmSWQgPSBuZXh0Q2F0YWxvZ0VudHJ5LmdldENhdGFsb2dSZWZJZCgpOwotLy8JCWFzc2VydEVxdWFscygibmV4dENhdGFsb2cxIiwgY2F0YWxvZ1JlZklkKTsKLQkJLy9yZXNvbHZlZFVSSSA9IFVSSUhlbHBlci5tYWtlQWJzb2x1dGUoYmFzZSwgImNhdGFsb2cyLnhtbCIpOwotCQlhc3NlcnRFcXVhbHMoImNhdGFsb2cyLnhtbCIsIG5leHRDYXRhbG9nRW50cnkuZ2V0Q2F0YWxvZ0xvY2F0aW9uKCkpOwotCi0JCUlDYXRhbG9nIG5leHRDYXRhbG9nID0gbmV4dENhdGFsb2dFbnRyeS5nZXRSZWZlcmVuY2VkQ2F0YWxvZygpOwotCi0JCWFzc2VydE5vdE51bGwobmV4dENhdGFsb2cpOwotCQlhc3NlcnRFcXVhbHMoNCwgbmV4dENhdGFsb2cuZ2V0Q2F0YWxvZ0VudHJpZXMoKS5sZW5ndGgpOwotCQkKLQkJLy8gdGVzdCBwdWJsaWMgZW50cmllcwotCQllbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMobmV4dENhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9QVUJMSUMpOwotCQlhc3NlcnRFcXVhbHMoMiwgZW50cmllcy5zaXplKCkpOwotCQllbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KDApOwotCQkvL3Jlc29sdmVkVVJJID0gVVJJSGVscGVyLm1ha2VBYnNvbHV0ZShuZXh0Q2F0YWxvZy5nZXRCYXNlKCksICIuL1B1YmxpY2F0aW9uQ2F0YWxvZy9DYXRhbG9ndWUueHNkIik7Ci0JCWFzc2VydEVxdWFscygiLi9QdWJsaWNhdGlvbkNhdGFsb2cvQ2F0YWxvZ3VlLnhzZCIsIGVudHJ5LmdldFVSSSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZV8wMDEiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCQotCQkvLyB0ZXN0IHB1YmxpYyBlbnRyeSBmcm9tIGEgZ3JvdXAKLQkJZW50cnkgPSAoSUNhdGFsb2dFbnRyeSllbnRyaWVzLmdldCgxKTsKLQkJLy9yZXNvbHZlZFVSSSA9IFVSSUhlbHBlci5tYWtlQWJzb2x1dGUobmV4dENhdGFsb2cuZ2V0QmFzZSgpLCAiLi9QdWJsaWNhdGlvbkNhdGFsb2cvQ2F0YWxvZ3VlLnhzZCIpOwotCQlhc3NlcnRFcXVhbHMoIi4vUHVibGljYXRpb25DYXRhbG9nL0NhdGFsb2d1ZS54c2QiLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCWFzc2VydEVxdWFscygiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWVfMDAyIiwgZW50cnkuZ2V0S2V5KCkpOwotCi0JCS8vICB0ZXN0IHN5c3RlbSBlbnRyaWVzCi0JCWVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhuZXh0Q2F0YWxvZywgSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1NZU1RFTSk7Ci0JCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCWVudHJ5ID0gKElDYXRhbG9nRW50cnkpZW50cmllcy5nZXQoMCk7Ci0JCWFzc2VydEVxdWFscygiLi9QdWJsaWNhdGlvbkNhdGFsb2cvQ2F0YWxvZ3VlLnhzZCIsIGVudHJ5LmdldFVSSSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJDYXRhbG9ndWUueHNkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQkvLyAgdGVzdCB1cmkgZW50cmllcwotCQllbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMobmV4dENhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9VUkkpOwotCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOwotCQllbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KDApOwotCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QiLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCWFzc2VydEVxdWFscygiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUueHNkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQkKLQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q29tcGF0YWJpbGl0eVJlYWRlcigpIHRocm93cyBFeGNlcHRpb24gewotCQkvLwlyZWFkIGNhdGFsb2cKLQkJU3RyaW5nIGNhdGFsb2dGaWxlID0gIi9kYXRhL2NvbXBhdGFiaWxpdHlUZXN0LnhtbGNhdGFsb2ciOwotCQlVUkwgY2F0YWxvZ1VybCA9IFRlc3RQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KGNhdGFsb2dGaWxlKTsKLQkJYXNzZXJ0Tm90TnVsbChjYXRhbG9nVXJsKTsKLQkJVVJMIGJhc2UgPSBQbGF0Zm9ybS5yZXNvbHZlKGNhdGFsb2dVcmwpOwotCi0JCUNhdGFsb2cgY2F0YWxvZyA9IChDYXRhbG9nKWdldENhdGFsb2coImNvbXBhdGFiaWxpdHlDYXRhbG9nIiwgYmFzZS50b1N0cmluZygpKTsKLQkJLy9DYXRhbG9nUmVhZGVyLnJlYWQoY2F0YWxvZywgY2F0YWxvZ0ZpbGVQYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbChjYXRhbG9nKTsKLQkJTGlzdCBlbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMoY2F0YWxvZywgSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1BVQkxJQyk7Ci0JCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCUlDYXRhbG9nRW50cnkgZW50cnkgPSAoSUNhdGFsb2dFbnRyeSllbnRyaWVzLmdldCgwKTsKLQkJYXNzZXJ0RXF1YWxzKCJwbGF0Zm9ybTovcmVzb3VyY2UvWE1MRXhhbXBsZXMvSW52b2ljZTIvSW52b2ljZS5kdGQiLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCWFzc2VydEVxdWFscygiSW52b2ljZUlkIiwgZW50cnkuZ2V0S2V5KCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0NhdGFsb2dSZXNvbHZlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0NhdGFsb2dSZXNvbHZlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIyY2JiNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nUmVzb2x2ZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy5pbnRlcm5hbDsKLQotCi1wdWJsaWMgY2xhc3MgQ2F0YWxvZ1Jlc29sdmVyVGVzdCBleHRlbmRzIEFic3RyYWN0Q2F0YWxvZ1Rlc3QgewotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCX0KLQotCXB1YmxpYyBDYXRhbG9nUmVzb2x2ZXJUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBmaW5hbCB2b2lkIHRlc3RSZXNvbHZlUmVzb2x2ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkKLQkKLQkJLy8gZnJvbSBwbHVnaW4ueG1sIGZpbGUKLQkJU3RyaW5nIHBsdWdpbkJhc2UgPSByZXNvbHZlUGx1Z2luTG9jYXRpb24oVGVzdFBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCkpLnRvU3RyaW5nKCk7Ci0KLQkJU3RyaW5nIHJlc29sdmVkQWN0dWFsID0gZGVmYXVsdENhdGFsb2cucmVzb2x2ZVB1YmxpYygiSW52b2ljZUlkX3Rlc3QiLCBudWxsKTsKLQkJU3RyaW5nIHJlc29sdmVkVVJJID0gbWFrZUFic29sdXRlKHBsdWdpbkJhc2UsICJkYXRhL0ludm9pY2UvSW52b2ljZS5kdGQiKTsKLQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCByZXNvbHZlZEFjdHVhbCk7Ci0JCXJlc29sdmVkQWN0dWFsID0gZGVmYXVsdENhdGFsb2cucmVzb2x2ZVN5c3RlbSgiaHR0cDovL3BlcnNvbmFsL3BlcnNvbmFsLmR0ZCIpOwotCQlyZXNvbHZlZFVSSSA9IG1ha2VBYnNvbHV0ZShwbHVnaW5CYXNlLCAiZGF0YS9QZXJzb25hbC9wZXJzb25hbC5kdGQiKTsKLQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCByZXNvbHZlZEFjdHVhbCk7Ci0JCXJlc29sdmVkQWN0dWFsID0gZGVmYXVsdENhdGFsb2cucmVzb2x2ZVVSSSgiaHR0cDovL2FwYWNoZS5vcmcveG1sL3hjYXRhbG9nL2V4YW1wbGUiKTsKLQkJcmVzb2x2ZWRVUkkgPSBtYWtlQWJzb2x1dGUocGx1Z2luQmFzZSwgImRhdGEvZXhhbXBsZS9leGFtcGxlLnhzZCIpOwotCQlhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIHJlc29sdmVkQWN0dWFsKTsKLQkJcmVzb2x2ZWRBY3R1YWwgPSBkZWZhdWx0Q2F0YWxvZy5yZXNvbHZlVVJJKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIpOwotCQlyZXNvbHZlZFVSSSA9IHJlc29sdmVQYXRoKCIiLCAicGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS54c2QvY2FjaGUvd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS54c2QiKTsKLQkJcmVzb2x2ZWRVUkkgPSBtYWtlQWJzb2x1dGUocGx1Z2luQmFzZSwgcmVzb2x2ZWRVUkkpOwotCQlhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIHJlc29sdmVkQWN0dWFsKTsKLQkJCi0JCS8vIGZyb20gY2F0YWxvZzEueG1sCi0JCXJlc29sdmVkQWN0dWFsID0gZGVmYXVsdENhdGFsb2cucmVzb2x2ZVB1YmxpYygiSW52b2ljZUlkX3Rlc3QiLCBudWxsKTsKLQkJcmVzb2x2ZWRVUkkgPSBtYWtlQWJzb2x1dGUocGx1Z2luQmFzZSwgImRhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZCIpOwotCQlhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIHJlc29sdmVkQWN0dWFsKTsKLQotCQlyZXNvbHZlZEFjdHVhbCA9IGRlZmF1bHRDYXRhbG9nLnJlc29sdmVTeXN0ZW0oIkludm9pY2UuZHRkIik7Ci0JCXJlc29sdmVkVVJJID0gbWFrZUFic29sdXRlKHBsdWdpbkJhc2UsICJkYXRhL0ludm9pY2UvSW52b2ljZS5kdGQiKTsKLQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCByZXNvbHZlZEFjdHVhbCk7Ci0KLQkJcmVzb2x2ZWRBY3R1YWwgPSBkZWZhdWx0Q2F0YWxvZy5yZXNvbHZlVVJJKCJodHRwOi8vd3d3LnRlc3QuY29tL0ludm9pY2UuZHRkIik7Ci0JCXJlc29sdmVkVVJJID0gbWFrZUFic29sdXRlKHBsdWdpbkJhc2UsICJkYXRhL0ludm9pY2UvSW52b2ljZS5kdGQiKTsKLQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCByZXNvbHZlZEFjdHVhbCk7Ci0KLQkJCi0JCS8vIGZyb20gY2F0YWxvZzIueG1sCi0JCXJlc29sdmVkQWN0dWFsID0gZGVmYXVsdENhdGFsb2cucmVzb2x2ZVB1YmxpYygiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWVfMDAxIiwgbnVsbCk7Ci0JCXJlc29sdmVkVVJJID0gbWFrZUFic29sdXRlKHBsdWdpbkJhc2UsICJkYXRhL1B1YmxpY2F0aW9uQ2F0YWxvZy9DYXRhbG9ndWUueHNkIik7Ci0JCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgcmVzb2x2ZWRBY3R1YWwpOwotCQkKLQkJcmVzb2x2ZWRBY3R1YWwgPSBkZWZhdWx0Q2F0YWxvZy5yZXNvbHZlUHVibGljKCJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZV8wMDIiLCBudWxsKTsKLQkJcmVzb2x2ZWRVUkkgPSBtYWtlQWJzb2x1dGUocGx1Z2luQmFzZSwgImRhdGEvUHVibGljYXRpb25DYXRhbG9nL0NhdGFsb2d1ZS54c2QiKTsKLQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCByZXNvbHZlZEFjdHVhbCk7Ci0KLQkJcmVzb2x2ZWRBY3R1YWwgPSBkZWZhdWx0Q2F0YWxvZy5yZXNvbHZlU3lzdGVtKCJDYXRhbG9ndWUueHNkIik7Ci0JCXJlc29sdmVkVVJJID0gbWFrZUFic29sdXRlKHBsdWdpbkJhc2UsICJkYXRhL1B1YmxpY2F0aW9uQ2F0YWxvZy9DYXRhbG9ndWUueHNkIik7Ci0JCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgcmVzb2x2ZWRBY3R1YWwpOwotCi0JCXJlc29sdmVkQWN0dWFsID0gZGVmYXVsdENhdGFsb2cucmVzb2x2ZVVSSSgiaHR0cDovL0NhdGFsb2d1ZS54c2QiKTsKLQkJcmVzb2x2ZWRVUkkgPSAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUueHNkIjsKLQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCByZXNvbHZlZFVSSSk7Ci0KLQotCX0KLQotCi0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0NhdGFsb2dUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2VjMzQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0NhdGFsb2dUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLlhNTENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cuQ2F0YWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JQ2F0YWxvZ0VudHJ5OwotCi0KLQotcHVibGljIGNsYXNzIENhdGFsb2dUZXN0IGV4dGVuZHMgQWJzdHJhY3RDYXRhbG9nVGVzdCB7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JfQotCi0JcHVibGljIENhdGFsb2dUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0Q2F0YWxvZygpIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgQ2F0YWxvZyB3b3JraW5nVXNlckNhdGFsb2cgPSBuZXcgQ2F0YWxvZyhudWxsLCAid29ya2luZyIsIG51bGwpOwotICAgICAgIGFzc2VydE5vdE51bGwodXNlckNhdGFsb2cpOwotICAgICAgIHdvcmtpbmdVc2VyQ2F0YWxvZy5hZGRFbnRyaWVzRnJvbUNhdGFsb2codXNlckNhdGFsb2cpOwotICAgICAgIAotICAgICAgIElDYXRhbG9nRW50cnkgY2F0YWxvZ0VudHJ5ID0gKElDYXRhbG9nRW50cnkpdXNlckNhdGFsb2cuY3JlYXRlQ2F0YWxvZ0VsZW1lbnQoSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1BVQkxJQyk7Ci0gICAgICAgY2F0YWxvZ0VudHJ5LnNldEtleSgidGVzdEtleSIpOwotICAgICAgIGNhdGFsb2dFbnRyeS5zZXRVUkkoImh0dHA6Ly90ZXN0dXJpIik7Ci0gICAgICAgd29ya2luZ1VzZXJDYXRhbG9nLmFkZENhdGFsb2dFbGVtZW50KGNhdGFsb2dFbnRyeSk7Ci0gICAgIAotICAgICAgIHVzZXJDYXRhbG9nLmFkZEVudHJpZXNGcm9tQ2F0YWxvZyh3b3JraW5nVXNlckNhdGFsb2cpOwotCSAgIFN0cmluZyB1c2VyQ2F0YWxvZ0xvY2F0aW9uID0gdXNlckNhdGFsb2cuZ2V0TG9jYXRpb24oKTsKLQkgIAotICAgICAgIHVzZXJDYXRhbG9nLnNhdmUoKTsKLSAgICAgICB1c2VyQ2F0YWxvZy5jbGVhcigpOwotICAgICAgIAotICAgICAgIHVzZXJDYXRhbG9nID0gZ2V0Q2F0YWxvZyhYTUxDb3JlUGx1Z2luLlVTRVJfQ0FUQUxPR19JRCwgdXNlckNhdGFsb2dMb2NhdGlvbik7Ci0gICAgICAgCi0gICAgICAgTGlzdCBlbnRyaWVzID0gZ2V0Q2F0YWxvZ0VudHJpZXModXNlckNhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9QVUJMSUMpOwotICAgICAgIGFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0gICAgICAgSUNhdGFsb2dFbnRyeSBlbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KDApOwotICAgICAKLSAgICAgICBhc3NlcnRFcXVhbHMoImh0dHA6Ly90ZXN0dXJpIiwgZW50cnkuZ2V0VVJJKCkpOwotICAgICAgIGFzc2VydEVxdWFscygidGVzdEtleSIsIGVudHJ5LmdldEtleSgpKTsKLQotICAgCi0gICAgfQotCi0KLSAgIAotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nV3JpdGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ1dyaXRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZkYWI0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nV3JpdGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLkNhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSUNhdGFsb2dFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JTmV4dENhdGFsb2c7Ci0KLXB1YmxpYyBjbGFzcyBDYXRhbG9nV3JpdGVyVGVzdCBleHRlbmRzIEFic3RyYWN0Q2F0YWxvZ1Rlc3QgewotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCX0KLQotCXB1YmxpYyBDYXRhbG9nV3JpdGVyVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgZmluYWwgdm9pZCB0ZXN0V3JpdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQkvLyByZWFkIGNhdGFsb2cKLQkJU3RyaW5nIGNhdGFsb2dGaWxlID0gIi9kYXRhL2NhdGFsb2cxLnhtbCI7Ci0JCVVSTCBjYXRhbG9nVXJsID0gVGVzdFBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoCi0JCQkJY2F0YWxvZ0ZpbGUpOwotCQlhc3NlcnROb3ROdWxsKGNhdGFsb2dVcmwpOwotCQlVUkwgcmVzb2x2ZWRVUkwgPSBQbGF0Zm9ybS5yZXNvbHZlKGNhdGFsb2dVcmwpOwotCi0JCUNhdGFsb2cgdGVzdENhdGFsb2cgPSAoQ2F0YWxvZykgZ2V0Q2F0YWxvZygiY2F0YWxvZzEiLCByZXNvbHZlZFVSTAotCQkJCS50b1N0cmluZygpKTsKLQkJYXNzZXJ0Tm90TnVsbCh0ZXN0Q2F0YWxvZyk7Ci0JCXRlc3RDYXRhbG9nLnNldEJhc2UocmVzb2x2ZWRVUkwudG9TdHJpbmcoKSk7Ci0JCS8vIENhdGFsb2dSZWFkZXIucmVhZCh0ZXN0Q2F0YWxvZywgcmVzb2x2ZWRVUkwuZ2V0RmlsZSgpKTsKLQkJYXNzZXJ0Tm90TnVsbCh0ZXN0Q2F0YWxvZyk7Ci0KLQkJLy8gd3JpdGUgY2F0YWxvZwotCQlVUkwgcmVzdWx0c0ZvbGRlciA9IFRlc3RQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KAotCQkJCSIvIik7Ci0JCUlQYXRoIHBhdGggPSBuZXcgUGF0aChQbGF0Zm9ybS5yZXNvbHZlKHJlc3VsdHNGb2xkZXIpLmdldEZpbGUoKSk7Ci0JCVN0cmluZyByZXN1bHRDYXRhbG9nRmlsZSA9IHBhdGguYXBwZW5kKCJhY3R1YWxfcmVzdWx0cy9jYXRhbG9nMS54bWwiKS50b0ZpbGUoKS50b1VSSSgpLnRvU3RyaW5nKCk7Ci0JCXRlc3RDYXRhbG9nLnNldExvY2F0aW9uKHJlc3VsdENhdGFsb2dGaWxlKTsKLQkJLy8gd3JpdGUgY2F0YWxvZwotCQl0ZXN0Q2F0YWxvZy5zYXZlKCk7Ci0JCQotCQkvLyByZWFkIGNhdGFsb2cgZmlsZSBmcm9tIHRoZSBzYXZlZCBsb2NhdGlvbiBhbmQgdGVzdCBpdHMgY29udGVudAotCQlDYXRhbG9nIGNhdGFsb2cgPSAoQ2F0YWxvZykgZ2V0Q2F0YWxvZygiY2F0YWxvZzIiLCB0ZXN0Q2F0YWxvZy5nZXRMb2NhdGlvbigpKTsKLQkJYXNzZXJ0Tm90TnVsbChjYXRhbG9nKTsKLQotCQkvLyB0ZXN0IHNhdmVkIGNhdGFsb2cgLSBjYXRhbG9nMS54bWwKLQkJYXNzZXJ0RXF1YWxzKDMsIGNhdGFsb2cuZ2V0Q2F0YWxvZ0VudHJpZXMoKS5sZW5ndGgpOwotCi0JCS8vIHRlc3QgcHVibGljIGVudHJpZXMKLQkJTGlzdCBlbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMoY2F0YWxvZywKLQkJCQlJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfUFVCTElDKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGVudHJpZXMuc2l6ZSgpKTsKLQkJSUNhdGFsb2dFbnRyeSBlbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KSBlbnRyaWVzLmdldCgwKTsKLQotCQlhc3NlcnRFcXVhbHMoIi4vSW52b2ljZS9JbnZvaWNlLmR0ZCIsIGVudHJ5LmdldFVSSSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJJbnZvaWNlSWRfdGVzdCIsIGVudHJ5LmdldEtleSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vd2ViVVJMIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoIndlYlVSTCIpKTsKLQotCQkvLyB0ZXN0IHN5c3RlbSBlbnRyaWVzCi0JCWVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhjYXRhbG9nLAotCQkJCUlDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9TWVNURU0pOwotCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOwotCQllbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KSBlbnRyaWVzLmdldCgwKTsKLQkJYXNzZXJ0RXF1YWxzKCIuL0ludm9pY2UvSW52b2ljZS5kdGQiLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCWFzc2VydEVxdWFscygiSW52b2ljZS5kdGQiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCWFzc2VydEVxdWFscygieWVzIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoImNoYWNoZWQiKSk7Ci0JCWFzc2VydEVxdWFscygidmFsdWUxIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoInByb3BlcnR5IikpOwotCi0JCS8vIHRlc3QgdXJpIGVudHJpZXMKLQkJZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKGNhdGFsb2csCi0JCQkJSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1VSSSk7Ci0JCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCWVudHJ5ID0gKElDYXRhbG9nRW50cnkpIGVudHJpZXMuZ2V0KDApOwotCQlhc3NlcnRFcXVhbHMoIi4vSW52b2ljZS9JbnZvaWNlLmR0ZCIsIGVudHJ5LmdldFVSSSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vd3d3LnRlc3QuY29tL0ludm9pY2UuZHRkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQlhc3NlcnRFcXVhbHMoIm5vIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoImNoYWNoZWQiKSk7Ci0JCWFzc2VydEVxdWFscygidmFsdWUyIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoInByb3BlcnR5IikpOwotCi0JCS8vIHRlc3QgbmV4dCBjYXRhbG9nIC0gY2F0YWxvZzIueG1sCi0JCUlOZXh0Q2F0YWxvZ1tdIG5leHRDYXRhbG9nRW50cmllcyA9IGNhdGFsb2cuZ2V0TmV4dENhdGFsb2dzKCk7Ci0JCWFzc2VydEVxdWFscygxLCBuZXh0Q2F0YWxvZ0VudHJpZXMubGVuZ3RoKTsKLQotCQlJTmV4dENhdGFsb2cgbmV4dENhdGFsb2dFbnRyeSA9IChJTmV4dENhdGFsb2cpIG5leHRDYXRhbG9nRW50cmllc1swXTsKLQkJYXNzZXJ0Tm90TnVsbChuZXh0Q2F0YWxvZ0VudHJ5KTsKLQotCQlhc3NlcnRFcXVhbHMoImNhdGFsb2cyLnhtbCIsIG5leHRDYXRhbG9nRW50cnkuZ2V0Q2F0YWxvZ0xvY2F0aW9uKCkpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvVGVzdFBsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvVGVzdFBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTQyMjE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL1Rlc3RQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBUZXN0UGx1Z2luIHBsdWdpbjsKLQkvL1Jlc291cmNlIGJ1bmRsZS4KLQlwcml2YXRlIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgVGVzdFBsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBwbHVnLWluIGFjdGl2YXRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgcGx1Zy1pbiBpcyBzdG9wcGVkCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCQlwbHVnaW4gPSBudWxsOwotCQlyZXNvdXJjZUJ1bmRsZSA9IG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGVzdFBsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICogb3IgJ2tleScgaWYgbm90IGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gVGVzdFBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwpID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5OwotCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXRyeSB7Ci0JCQlpZiAocmVzb3VyY2VCdW5kbGUgPT0gbnVsbCkKLQkJCQlyZXNvdXJjZUJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgib3JnLmVjbGlwc2Uud3N0LndzdC54bWwuY2F0YWxvZy50ZXN0LlRlc3RQbHVnaW5SZXNvdXJjZXMiKTsKLQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpIHsKLQkJCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQkJfQotCQlyZXR1cm4gcmVzb3VyY2VCdW5kbGU7Ci0JfQotCQotCQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHJlc29sdmVQbHVnaW5Mb2NhdGlvbihTdHJpbmcgcGF0aCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJVVJMIHVybCA9IGdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeShwYXRoKTsKLQkJdXJsID0gUGxhdGZvcm0ucmVzb2x2ZSh1cmwpOwotCQlyZXR1cm4gdXJsLmdldEZpbGUoKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL1hTRFNjaGVtYVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL1hTRFNjaGVtYVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJiNTViOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9YU0RTY2hlbWFUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5pbXBsLlhTRFNjaGVtYUltcGw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBYU0RTY2hlbWFUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0U2NoZW1hRm9yU2NoZW1hKCl7Ci0JCQotCQkgIFhTRFNjaGVtYUltcGwuZ2V0U2NoZW1hRm9yU2NoZW1hKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIpOyAgCi0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvcmVzb2x2ZXIvdG9vbHMvdGVzdHMvaW50ZXJuYWwvRmlsZVV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9yZXNvbHZlci90b29scy90ZXN0cy9pbnRlcm5hbC9GaWxlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWVmOGQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9yZXNvbHZlci90b29scy90ZXN0cy9pbnRlcm5hbC9GaWxlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnJlc29sdmVyLnRvb2xzLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBGaWxlVXRpbCB7Ci0KLQlwdWJsaWMgRmlsZVV0aWwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBjb3B5RmlsZShTdHJpbmcgc3JjLCBTdHJpbmcgZGVzdCkgewotCQlJbnB1dFN0cmVhbSBpcyA9IG51bGw7Ci0JCUZpbGVPdXRwdXRTdHJlYW0gZm9zID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbShzcmMpOwotCQkJZm9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oZGVzdCk7Ci0JCQlpbnQgYyA9IDA7Ci0JCQlieXRlW10gYXJyYXkgPSBuZXcgYnl0ZVsxMDI0XTsKLQkJCXdoaWxlICgoYyA9IGlzLnJlYWQoYXJyYXkpKSA+PSAwKSB7Ci0JCQkJZm9zLndyaXRlKGFycmF5LCAwLCBjKTsKLQkJCX0KLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJfSBmaW5hbGx5IHsKLQkJCXRyeSB7Ci0JCQkJZm9zLmNsb3NlKCk7Ci0JCQkJaXMuY2xvc2UoKTsKLQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBGaWxlIGNyZWF0ZUZpbGVBbmRQYXJlbnREaXJlY3RvcmllcyhTdHJpbmcgZmlsZU5hbWUpCi0JCXRocm93cyBFeGNlcHRpb24gewotCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShmaWxlTmFtZSk7Ci0JCUZpbGUgcGFyZW50ID0gZmlsZS5nZXRQYXJlbnRGaWxlKCk7Ci0JCWlmICghcGFyZW50LmV4aXN0cygpKSB7Ci0JCQlwYXJlbnQubWtkaXJzKCk7Ci0JCX0KLQkJZmlsZS5jcmVhdGVOZXdGaWxlKCk7Ci0JCXJldHVybiBmaWxlOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgZGVsZXRlRGlyZWN0b3JpZXMoRmlsZSBkaXIpCi0JCXRocm93cyBFeGNlcHRpb24gewotCi0JCUZpbGVbXSBjaGlsZHJlbiA9IGRpci5saXN0RmlsZXMoKTsKLQkJZm9yKGludCBpPTA7IGk8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKXsKLQkJCWlmKGNoaWxkcmVuW2ldLmxpc3QoKSAhPSBudWxsICYmIGNoaWxkcmVuW2ldLmxpc3QoKS5sZW5ndGggPiAwKXsKLQkJCQlkZWxldGVEaXJlY3RvcmllcyhjaGlsZHJlbltpXSk7Ci0JCQl9Ci0JCQllbHNlewotCQkJCWNoaWxkcmVuW2ldLmRlbGV0ZSgpOwotCQkJfQotCQl9Ci0JCWRpci5kZWxldGUoKTsKLQkJCQotCX0KLQkKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gdGV4dHVhbENvbXBhcmUoZmluYWwgRmlsZSBmaXJzdCwgZmluYWwgRmlsZSBzZWNvbmQsIEZpbGUgZGlmZikgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICBCdWZmZXJlZFJlYWRlciByMSA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmaXJzdCkpOwotICAgICAgICBCdWZmZXJlZFJlYWRlciByMiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihzZWNvbmQpKTsKLSAgICAgICAgUHJpbnRXcml0ZXIgcHJpbnRXcml0ZXIgPSBuZXcgUHJpbnRXcml0ZXIobmV3IEZpbGVPdXRwdXRTdHJlYW0oZGlmZikpOyAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIGJvb2xlYW4gZGlmZkZvdW5kID0gZmFsc2U7Ci0gICAgICAgIHdoaWxlIChyMS5yZWFkeSgpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgczEgPSByMS5yZWFkTGluZSgpOwotICAgICAgICAgICAgU3RyaW5nIHMyID0gcjIucmVhZExpbmUoKTsKLSAgICAgICAgICAgIGlmIChzMSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHMyID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBkaWZmRm91bmQ7ICAgLy8gZmlsZXMgZXF1YWwKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGRpZmZGb3VuZCA9IHRydWU7ICAvLyBmaWxlcyBkaWZmZXIgaW4gbGVuZ3RoCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXMxLmVxdWFscyhzMikpIHsKLSAgICAgICAgICAgIAlwcmludFdyaXRlci5wcmludGxuKCI8PDw8ICIgKyBzMSk7Ci0gICAgICAgICAgICAJcHJpbnRXcml0ZXIucHJpbnRsbigiPDw8PCAiICsgczIpOwotICAgICAgICAgICAgICAgIGRpZmZGb3VuZCA9IHRydWU7ICAgIC8vIGZpbGVzIGRpZmZlcgotICAgICAgICAgICAgfQotICAgICAgICB9IAotICAgICAgICAKLSAgICAgICAgcHJpbnRXcml0ZXIuZmx1c2goKTsgCi0gICAgICAgIAotICAgICAgICByZXR1cm4gIGRpZmZGb3VuZDsKLSAgICAgCi0gICAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvcmVzb2x2ZXIvdG9vbHMvdGVzdHMvaW50ZXJuYWwvUmVzb2x2aW5nWE1MUGFyc2VyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvcmVzb2x2ZXIvdG9vbHMvdGVzdHMvaW50ZXJuYWwvUmVzb2x2aW5nWE1MUGFyc2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4OWQwMDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Jlc29sdmVyL3Rvb2xzL3Rlc3RzL2ludGVybmFsL1Jlc29sdmluZ1hNTFBhcnNlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5yZXNvbHZlci50b29scy50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbC5yZXNvbHZlci5DYXRhbG9nTWFuYWdlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbC5yZXNvbHZlci5hcHBzLlhQYXJzZUVycm9yOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sLnJlc29sdmVyLnRvb2xzLlJlc29sdmluZ1hNTFJlYWRlcjsKLQotaW1wb3J0IG9yZy54bWwuc2F4LlNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYTm90U3VwcG9ydGVkRXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgUmVzb2x2aW5nWE1MUGFyc2VyIHsKLQkKLQlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0aW9uRXJyb3IgPSBmYWxzZTsKLQotCXByb3RlY3RlZCBzdGF0aWMgaW50IG1heEVycnMgPSAxMDsKLQotCXByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBuc0F3YXJlID0gdHJ1ZTsKLQotCXByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiB2YWxpZGF0aW5nID0gdHJ1ZTsKLQotCXByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBzaG93RXJyb3JzID0gdHJ1ZTsKLQotCXByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBzaG93V2FybmluZ3MgPSB0cnVlOwotCi0JcHJvdGVjdGVkIHN0YXRpYyBWZWN0b3IgY2F0YWxvZ0ZpbGVzID0gbmV3IFZlY3RvcigpOwotCi0JcHJvdGVjdGVkICB2b2lkIHBhcnNlQW5kVmFsaWRhdGUoU3RyaW5nIHhtbEZpbGUsIFN0cmluZ1tdIGNhdGFsb2dzKQotCQkJdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgRmlsZU5vdEZvdW5kRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0KLQkJCUNhdGFsb2dNYW5hZ2VyIG15TWFuYWdlciA9IG5ldyBDYXRhbG9nTWFuYWdlcigpOwotCQkJU3RyaW5nQnVmZmVyIGNhdGFsb2dGaWxlID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkJZm9yKGludCBpPTA7IGk8Y2F0YWxvZ3MubGVuZ3RoOyBpKyspewotCQkJCWNhdGFsb2dGaWxlID0gY2F0YWxvZ0ZpbGUuYXBwZW5kKGNhdGFsb2dzW2ldICsgIjsiKTsKLQkJCX0KLQkJCW15TWFuYWdlci5zZXRDYXRhbG9nRmlsZXMoY2F0YWxvZ0ZpbGUudG9TdHJpbmcoKSk7Ci0JCSAgICBteU1hbmFnZXIuc2V0SWdub3JlTWlzc2luZ1Byb3BlcnRpZXModHJ1ZSk7Ci0JCSAgICBteU1hbmFnZXIuc2V0VmVyYm9zaXR5KDIpOwotCQkgICAgUmVzb2x2aW5nWE1MUmVhZGVyIHJlYWRlciA9IG5ldyBSZXNvbHZpbmdYTUxSZWFkZXIobXlNYW5hZ2VyKTsKLQkJCXRyeSB7Ci0JCQkJcmVhZGVyLnNldEZlYXR1cmUoImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy9uYW1lc3BhY2VzIiwKLQkJCQkJCQkJbnNBd2FyZSk7Ci0JCQkJcmVhZGVyLnNldEZlYXR1cmUoImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy92YWxpZGF0aW9uIiwKLQkJCQkJCXZhbGlkYXRpbmcpOwotCQkJCXJlYWRlci5zZXRGZWF0dXJlKAotCQkJCQkJImh0dHA6Ly9hcGFjaGUub3JnL3htbC9mZWF0dXJlcy92YWxpZGF0aW9uL3NjaGVtYSIsIHRydWUpOwotCQkJfSBjYXRjaCAoU0FYTm90UmVjb2duaXplZEV4Y2VwdGlvbiBlMSkgewotCQkJCWUxLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfSBjYXRjaCAoU0FYTm90U3VwcG9ydGVkRXhjZXB0aW9uIGUxKSB7Ci0JCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0KLQkJWFBhcnNlRXJyb3IgeHBlID0gbmV3IFhQYXJzZUVycm9yKHNob3dFcnJvcnMsIHNob3dXYXJuaW5ncyk7Ci0JCXhwZS5zZXRNYXhNZXNzYWdlcyhtYXhFcnJzKTsKLQkJcmVhZGVyLnNldEVycm9ySGFuZGxlcih4cGUpOwotCi0JCVN0cmluZyBwYXJzZVR5cGUgPSB2YWxpZGF0aW5nID8gInZhbGlkYXRpbmciIDogIndlbGwtZm9ybWVkIjsKLQkJU3RyaW5nIG5zVHlwZSA9IG5zQXdhcmUgPyAibmFtZXNwYWNlLWF3YXJlIiA6ICJuYW1lc3BhY2UtaWdub3JhbnQiOwotCQlpZiAobWF4RXJycyA+IDApIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQXR0ZW1wdGluZyAiICsgcGFyc2VUeXBlICsgIiwgIiArIG5zVHlwZQotCQkJCQkrICIgcGFyc2UiKTsKLQkJfQotCi0JCXRyeSB7Ci0JCQlyZWFkZXIucGFyc2UoeG1sRmlsZSk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQl2YWxpZGF0aW9uRXJyb3IgPSB0cnVlOwotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCi0JCWlmIChtYXhFcnJzID4gMCkgewotCQkJU3lzdGVtLm91dC5wcmludCgiUGFyc2UgIik7Ci0JCQlpZiAoeHBlLmdldEZhdGFsQ291bnQoKSA+IDApIHsKLQkJCQl2YWxpZGF0aW9uRXJyb3IgPSB0cnVlOwotCQkJCVN5c3RlbS5vdXQucHJpbnQoImZhaWxlZCAiKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludCgic3VjY2VlZGVkICIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnQoIigiKTsKLQkJCX0KLQkJCVN5c3RlbS5vdXQucHJpbnQoIndpdGggIik7Ci0KLQkJCWludCBlcnJDb3VudCA9IHhwZS5nZXRFcnJvckNvdW50KCk7Ci0JCQlpbnQgd2FybkNvdW50ID0geHBlLmdldFdhcm5pbmdDb3VudCgpOwotCi0JCQlpZiAoZXJyQ291bnQgPiAwKSB7Ci0JCQkJdmFsaWRhdGlvbkVycm9yID0gdHJ1ZTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50KGVyckNvdW50ICsgIiBlcnJvciIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnQoZXJyQ291bnQgPiAxID8gInMiIDogIiIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnQoIiBhbmQgIik7Ci0JCQl9IGVsc2UgewotCQkJCVN5c3RlbS5vdXQucHJpbnQoIm5vIGVycm9ycyBhbmQgIik7Ci0JCQl9Ci0KLQkJCWlmICh3YXJuQ291bnQgPiAwKSB7Ci0JCQkJdmFsaWRhdGlvbkVycm9yID0gdHJ1ZTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50KHdhcm5Db3VudCArICIgd2FybmluZyIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnQod2FybkNvdW50ID4gMSA/ICJzIiA6ICIiKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50KCIuIik7Ci0JCQl9IGVsc2UgewotCQkJCVN5c3RlbS5vdXQucHJpbnQoIm5vIHdhcm5pbmdzLiIpOwotCQkJfQotCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIiIpOwotCQl9Ci0JfQotCQotCQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Jlc29sdmVyL3Rvb2xzL3Rlc3RzL2ludGVybmFsL1RyYVhMaWFpc29uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvcmVzb2x2ZXIvdG9vbHMvdGVzdHMvaW50ZXJuYWwvVHJhWExpYWlzb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY4NjFjMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvcmVzb2x2ZXIvdG9vbHMvdGVzdHMvaW50ZXJuYWwvVHJhWExpYWlzb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4MSArMCwwIEBACi0vKgotICogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDAyIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSAqIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLCBpZgotICogICAgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWdlbWVudDoKLSAqICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotICogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0gKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWdlbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0gKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWdlbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotICoKLSAqIDQuIFRoZSBuYW1lcyAiVGhlIEpha2FydGEgUHJvamVjdCIsICJBbnQiLCBhbmQgIkFwYWNoZSBTb2Z0d2FyZQotICogICAgRm91bmRhdGlvbiIgbXVzdCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotICogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0gKgotICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSIKLSAqICAgIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotICogICAgcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIEdyb3VwLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICoKLSAqIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0gKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgRm9yIG1vcmUKLSAqIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiwgcGxlYXNlIHNlZQotICogPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotICovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5yZXNvbHZlci50b29scy50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotaW1wb3J0IG9yZy54bWwuc2F4LkVudGl0eVJlc29sdmVyOwotaW1wb3J0IG9yZy54bWwuc2F4LlhNTFJlYWRlcjsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlckZhY3Rvcnk7Ci0KLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UZW1wbGF0ZXM7Ci0KLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLkVycm9yTGlzdGVuZXI7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtUmVzdWx0OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLlN0cmVhbVNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlVSSVJlc29sdmVyOwotCi1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zYXguU0FYU291cmNlOwotCi0vKioKLSAqIENvbmNyZXRlIGxpYWlzb24gZm9yIFhTTFQgcHJvY2Vzc29yIGltcGxlbWVudGluZyBUcmFYLiAoaWUgSkFYUCAxLjEpCi0gKgotICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86cnVieXNAdXMuaWJtLmNvbSI+U2FtIFJ1Ynk8L2E+Ci0gKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzpkaW1zQHlhaG9vLmNvbSI+RGF2YW51bSBTcmluaXZhczwvYT4KLSAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnNiYWlsbGllekBhcGFjaGUub3JnIj5TdGVwaGFuZSBCYWlsbGllejwvYT4KLSAqIEBzaW5jZSBBbnQgMS4zCi0gKi8KLXB1YmxpYyBjbGFzcyBUcmFYTGlhaXNvbiBpbXBsZW1lbnRzIFhTTFRMaWFpc29uLCBFcnJvckxpc3RlbmVyIHsKLQotCS8qKiBUaGUgdHJheCBUcmFuc2Zvcm1lckZhY3RvcnkgKi8KLQlwcml2YXRlIFRyYW5zZm9ybWVyRmFjdG9yeSB0ZmFjdG9yeSA9IG51bGw7Ci0KLQkvKiogc3R5bGVzaGVldCBzdHJlYW0sIGNsb3NlIGl0IGFzYXAgKi8KLQlwcml2YXRlIEZpbGVJbnB1dFN0cmVhbSB4c2xTdHJlYW0gPSBudWxsOwotCi0JLyoqIFN0eWxlc2hlZXQgdGVtcGxhdGUgKi8KLQlwcml2YXRlIFRlbXBsYXRlcyB0ZW1wbGF0ZXMgPSBudWxsOwotCi0JLyoqIHRyYW5zZm9ybWVyICovCi0JcHJpdmF0ZSBUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lciA9IG51bGw7Ci0KLQkvKiogcG9zc2libGUgcmVzb2x2ZXIgZm9yIHB1YmxpY0lkcyAqLwotCXByaXZhdGUgRW50aXR5UmVzb2x2ZXIgZW50aXR5UmVzb2x2ZXI7Ci0KLQkvKiogcG9zc2libGUgcmVzb2x2ZXIgZm9yIFVSSXMgKi8KLQlwcml2YXRlIFVSSVJlc29sdmVyIHVyaVJlc29sdmVyOwotCi0JcHVibGljIFRyYVhMaWFpc29uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRmYWN0b3J5ID0gVHJhbnNmb3JtZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0JCXRmYWN0b3J5LnNldEVycm9yTGlzdGVuZXIodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogU2V0IHRoZSBvdXRwdXQgcHJvcGVydHkgZm9yIHRoZSBjdXJyZW50IHRyYW5zZm9ybWVyLgotCSAqIE5vdGUgdGhhdCB0aGUgc3R5bGVzaGVldCBtdXN0IGJlIHNldCBwcmlvciB0byBjYWxsaW5nCi0JICogdGhpcyBtZXRob2QuCi0JICogQHBhcmFtIG5hbWUgdGhlIG91dHB1dCBwcm9wZXJ0eSBuYW1lLgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgb3V0cHV0IHByb3BlcnR5IHZhbHVlLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldE91dHB1dFByb3BlcnR5KFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpIHsKLQkJaWYgKHRyYW5zZm9ybWVyID09IG51bGwpIHsKLQkJCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oInN0eWxlc2hlZXQgbXVzdCBiZSBzZXQgcHJpb3IgdG8gc2V0dGluZyB0aGUgb3V0cHV0IHByb3BlcnRpZXMiKTsKLQkJfQotCQl0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSk7Ci0JfQotCi0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tIElNUE9SVEFOVAotCS8vIDEpIERvbid0IHVzZSB0aGUgU3RyZWFtU291cmNlKEZpbGUpIGN0b3IuIEl0IHdvbid0IHdvcmsgd2l0aAotCS8vIHhhbGFuIHByaW9yIHRvIDIuMiBiZWNhdXNlIG9mIHN5c3RlbWlkIGJ1Z3MuCi0KLQkvLyAyKSBVc2UgYSBzdHJlYW0gc28gdGhhdCB5b3UgY2FuIGNsb3NlIGl0IHlvdXJzZWxmIHF1aWNrbHkKLQkvLyBhbmQgYXZvaWQga2VlcGluZyB0aGUgaGFuZGxlIHVudGlsIHRoZSBvYmplY3QgaXMgZ2FyYmFnZWQuCi0JLy8gKGFsd2F5cyBrZWVwIGNvbnRyb2wpLCBvdGhlcndpc2UgeW91IHdvbid0IGJlIGFibGUgdG8gZGVsZXRlCi0JLy8gdGhlIGZpbGUgcXVpY2tseSBvbiB3aW5kb3dzLgotCi0JLy8gMykgQWx3YXlzIHNldCB0aGUgc3lzdGVtaWQgdG8gdGhlIHNvdXJjZSBmb3IgaW1wb3J0cywgaW5jbHVkZXMuLi4KLQkvLyBpbiB4c2wgYW5kIHhtbC4uLgotCi0JcHVibGljIHZvaWQgc2V0U3R5bGVzaGVldChGaWxlIHN0eWxlc2hlZXQpIHRocm93cyBFeGNlcHRpb24gewotCQl4c2xTdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKHN0eWxlc2hlZXQpOwotCQlTdHJlYW1Tb3VyY2Ugc3JjID0gbmV3IFN0cmVhbVNvdXJjZSh4c2xTdHJlYW0pOwotCQlzcmMuc2V0U3lzdGVtSWQoZ2V0U3lzdGVtSWQoc3R5bGVzaGVldCkpOwotCQl0ZW1wbGF0ZXMgPSB0ZmFjdG9yeS5uZXdUZW1wbGF0ZXMoc3JjKTsKLQkJdHJhbnNmb3JtZXIgPSB0ZW1wbGF0ZXMubmV3VHJhbnNmb3JtZXIoKTsKLQkJdHJhbnNmb3JtZXIuc2V0RXJyb3JMaXN0ZW5lcih0aGlzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0cmFuc2Zvcm0oRmlsZSBpbmZpbGUsIEZpbGUgb3V0ZmlsZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUZpbGVJbnB1dFN0cmVhbSBmaXMgPSBudWxsOwotCQlGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlmaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGluZmlsZSk7Ci0JCQlmb3MgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShvdXRmaWxlKTsKLQkJCS8vIEZJWE1FOiBuZWVkIHRvIHVzZSBhIFNBWFNvdXJjZSBhcyB0aGUgc291cmNlIGZvciB0aGUgdHJhbnNmb3JtCi0JCQkvLyBzbyB3ZSBjYW4gcGx1ZyBpbiBvdXIgb3duIGVudGl0eSByZXNvbHZlcgotCQkJU291cmNlIHNyYyA9IG51bGw7Ci0JCQlpZiAoZW50aXR5UmVzb2x2ZXIgIT0gbnVsbCkgewotCQkJCWlmICh0ZmFjdG9yeS5nZXRGZWF0dXJlKFNBWFNvdXJjZS5GRUFUVVJFKSkgewotCQkJCQlTQVhQYXJzZXJGYWN0b3J5IHNwRmFjdG9yeSA9IFNBWFBhcnNlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLQkJCQkJc3BGYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotCQkJCQlYTUxSZWFkZXIgcmVhZGVyID0gc3BGYWN0b3J5Lm5ld1NBWFBhcnNlcigpLmdldFhNTFJlYWRlcigpOwotCQkJCQlyZWFkZXIuc2V0RW50aXR5UmVzb2x2ZXIoZW50aXR5UmVzb2x2ZXIpOwotCQkJCQlzcmMgPSBuZXcgU0FYU291cmNlKHJlYWRlciwgbmV3IElucHV0U291cmNlKGZpcykpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCi0JCQkJCQkieGNhdGFsb2cgc3BlY2lmaWVkLCBidXQgIgotCQkJCQkJCSsgInBhcnNlciBkb2Vzbid0IHN1cHBvcnQgU0FYIik7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlzcmMgPSBuZXcgU3RyZWFtU291cmNlKGZpcyk7Ci0JCQl9Ci0JCQlzcmMuc2V0U3lzdGVtSWQoZ2V0U3lzdGVtSWQoaW5maWxlKSk7Ci0JCQlTdHJlYW1SZXN1bHQgcmVzID0gbmV3IFN0cmVhbVJlc3VsdChmb3MpOwotCQkJLy8gbm90IHN1cmUgd2hhdCBjb3VsZCBiZSB0aGUgbmVlZCBvZiB0aGlzLi4uCi0JCQlyZXMuc2V0U3lzdGVtSWQoZ2V0U3lzdGVtSWQob3V0ZmlsZSkpOwotCi0JCQlpZiAodXJpUmVzb2x2ZXIgIT0gbnVsbCkKLQkJCQl0cmFuc2Zvcm1lci5zZXRVUklSZXNvbHZlcih1cmlSZXNvbHZlcik7Ci0KLQkJCXRyYW5zZm9ybWVyLnRyYW5zZm9ybShzcmMsIHJlcyk7Ci0JCX0gZmluYWxseSB7Ci0JCQkvLyBtYWtlIHN1cmUgdG8gY2xvc2UgYWxsIGhhbmRsZXMsIG90aGVyd2lzZSB0aGUgZ2FyYmFnZQotCQkJLy8gY29sbGVjdG9yIHdpbGwgY2xvc2UgdGhlbS4uLndoZW5ldmVyIHBvc3NpYmxlIGFuZAotCQkJLy8gV2luZG93cyBtYXkgY29tcGxhaW4gYWJvdXQgbm90IGJlaW5nIGFibGUgdG8gZGVsZXRlIGZpbGVzLgotCQkJdHJ5IHsKLQkJCQlpZiAoeHNsU3RyZWFtICE9IG51bGwpIHsKLQkJCQkJeHNsU3RyZWFtLmNsb3NlKCk7Ci0JCQkJfQotCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gaWdub3JlZCkgewotCQkJfQotCQkJdHJ5IHsKLQkJCQlpZiAoZmlzICE9IG51bGwpIHsKLQkJCQkJZmlzLmNsb3NlKCk7Ci0JCQkJfQotCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gaWdub3JlZCkgewotCQkJfQotCQkJdHJ5IHsKLQkJCQlpZiAoZm9zICE9IG51bGwpIHsKLQkJCQkJZm9zLmNsb3NlKCk7Ci0JCQkJfQotCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gaWdub3JlZCkgewotCQkJfQotCQl9Ci0JfQotCi0JLy8gbWFrZSBzdXJlIHRoYXQgdGhlIHN5c3RlbWlkIGlzIG1hZGUgb2YgJy8nIGFuZCBub3QgJ1wnIG90aGVyd2lzZQotCS8vIGNyaW1zb24gd2lsbCBjb21wbGFpbiB0aGF0IGl0IGNhbm5vdCByZXNvbHZlIHJlbGF0aXZlIGVudGl0aWVzCi0JLy8gYmVjYXVzZSBpdCBncmFicyB0aGUgYmFzZSB1cmkgdmlhIGxhc3RJbmRleE9mKCcvJykgd2l0aG91dAotCS8vIG1ha2luZyBzdXJlIGl0IGlzIHJlYWxseSBhIC8nZWQgcGF0aAotCXByb3RlY3RlZCBTdHJpbmcgZ2V0U3lzdGVtSWQoRmlsZSBmaWxlKSB7Ci0JCVN0cmluZyBwYXRoID0gZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKTsKLQkJcGF0aCA9IHBhdGgucmVwbGFjZSgnXFwnLCAnLycpOwotCi0JCS8vIG9uIFdpbmRvd3MsIHVzZSAnZmlsZTovLy8nCi0JCWlmIChGaWxlLnNlcGFyYXRvckNoYXIgPT0gJ1xcJykgewotCQkJcmV0dXJuIEZJTEVfUFJPVE9DT0xfUFJFRklYICsgIi8iICsgcGF0aDsKLQkJfQotCQkvLyBVbml4LCB1c2UgJ2ZpbGU6Ly8nCi0JCXJldHVybiBGSUxFX1BST1RPQ09MX1BSRUZJWCArIHBhdGg7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkUGFyYW0oU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSkgewotCQl0cmFuc2Zvcm1lci5zZXRQYXJhbWV0ZXIobmFtZSwgdmFsdWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIGVycm9yKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpIHsKLQkJbG9nRXJyb3IoZSwgIkVycm9yIik7Ci0JfQotCi0JcHVibGljIHZvaWQgZmF0YWxFcnJvcihUcmFuc2Zvcm1lckV4Y2VwdGlvbiBlKSB7Ci0JCWxvZ0Vycm9yKGUsICJGYXRhbCBFcnJvciIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHdhcm5pbmcoVHJhbnNmb3JtZXJFeGNlcHRpb24gZSkgewotCQlsb2dFcnJvcihlLCAiV2FybmluZyIpOwotCX0KLQotCXByaXZhdGUgdm9pZCBsb2dFcnJvcihUcmFuc2Zvcm1lckV4Y2VwdGlvbiBlLCBTdHJpbmcgdHlwZSkgewotCi0JCVN0cmluZ0J1ZmZlciBtc2cgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWlmIChlLmdldExvY2F0b3IoKSAhPSBudWxsKSB7Ci0JCQlpZiAoZS5nZXRMb2NhdG9yKCkuZ2V0U3lzdGVtSWQoKSAhPSBudWxsKSB7Ci0JCQkJU3RyaW5nIHVybCA9IGUuZ2V0TG9jYXRvcigpLmdldFN5c3RlbUlkKCk7Ci0JCQkJaWYgKHVybC5zdGFydHNXaXRoKCJmaWxlOi8vLyIpKSB7Ci0JCQkJCXVybCA9IHVybC5zdWJzdHJpbmcoOCk7Ci0JCQkJfQotCQkJCW1zZy5hcHBlbmQodXJsKTsKLQkJCX0gZWxzZSB7Ci0JCQkJbXNnLmFwcGVuZCgiVW5rbm93biBmaWxlIik7Ci0JCQl9Ci0JCQlpZiAoZS5nZXRMb2NhdG9yKCkuZ2V0TGluZU51bWJlcigpICE9IC0xKSB7Ci0JCQkJbXNnLmFwcGVuZCgiOiIgKyBlLmdldExvY2F0b3IoKS5nZXRMaW5lTnVtYmVyKCkpOwotCQkJCWlmIChlLmdldExvY2F0b3IoKS5nZXRDb2x1bW5OdW1iZXIoKSAhPSAtMSkgewotCQkJCQltc2cuYXBwZW5kKCI6IiArIGUuZ2V0TG9jYXRvcigpLmdldENvbHVtbk51bWJlcigpKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJbXNnLmFwcGVuZCgiOiAiICsgdHlwZSArICIhICIpOwotCQltc2cuYXBwZW5kKGUuZ2V0TWVzc2FnZSgpKTsKLQkJaWYgKGUuZ2V0Q2F1c2UoKSAhPSBudWxsKSB7Ci0JCQltc2cuYXBwZW5kKCIgQ2F1c2U6ICIgKyBlLmdldENhdXNlKCkpOwotCQl9Ci0KLQkJU3lzdGVtLm91dC5wcmludGxuKG1zZy50b1N0cmluZygpKTsKLQl9Ci0KLQkvKiogU2V0IHRoZSBjbGFzcyB0byByZXNvbHZlIGVudGl0aWVzIGR1cmluZyB0aGUgdHJhbnNmb3JtYXRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRFbnRpdHlSZXNvbHZlcihFbnRpdHlSZXNvbHZlciBhUmVzb2x2ZXIpIHsKLQkJZW50aXR5UmVzb2x2ZXIgPSBhUmVzb2x2ZXI7Ci0JfQotCi0JLyoqIFNldCB0aGUgY2xhc3MgdG8gcmVzb2x2ZSBVUklzIGR1cmluZyB0aGUgdHJhbnNmb3JtYXRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRVUklSZXNvbHZlcihVUklSZXNvbHZlciBhUmVzb2x2ZXIpIHsKLQkJdXJpUmVzb2x2ZXIgPSBhUmVzb2x2ZXI7Ci0JCXRmYWN0b3J5LnNldFVSSVJlc29sdmVyKGFSZXNvbHZlcik7Ci0JfQotCi19IC8vLS0gVHJhWExpYWlzb24KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9yZXNvbHZlci90b29scy90ZXN0cy9pbnRlcm5hbC9WYWxpZGF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvcmVzb2x2ZXIvdG9vbHMvdGVzdHMvaW50ZXJuYWwvVmFsaWRhdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWU3YWM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9yZXNvbHZlci90b29scy90ZXN0cy9pbnRlcm5hbC9WYWxpZGF0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwucmVzb2x2ZXIudG9vbHMudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLmludGVybmFsLlRlc3RQbHVnaW47Ci0KLQotLyoqCi0gKiBUbyBydW4gdGhpcyB0ZXN0IG5lZWQgdG8gYWRkIHJlc29sdmVyLmphciB0byB0aGUgY2xhc3NwYXRoLgotICogUnVuIGFzIEpVbml0IFBsdWdpbiB0ZXN0OgotICogLSBwdXQgcmVzb2x2ZXIuamFyIG9uIHRoZSBib290IGNsYXNzIHBhdGgKLSAqIC0gYWRkIFZNIGFyZ3VtZW50OgotICogCi0gKiAtWGJvb3RjbGFzc3BhdGgvcDo8aW5zdGFsbCBsb2NhdGlvbj5canJlXGxpYlxleHRccmVzb2x2ZXIuamFyCi0gKgotICoKLSAqLwotcHVibGljIGNsYXNzIFZhbGlkYXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JCi0JCi0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQkKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCX0KLQotCXB1YmxpYyBWYWxpZGF0b3JUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQkKLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGluZ1BhcnNlcigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyB4bWxGaWxlID0gIi9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLXNjaGVtYS54bWwiOwotCQl4bWxGaWxlID0gVGVzdFBsdWdpbi5yZXNvbHZlUGx1Z2luTG9jYXRpb24oeG1sRmlsZSk7Ci0JCQotCQlTdHJpbmcgY2F0YWxvZ0ZpbGUgPSAiL2RhdGEvY2F0YWxvZzIueG1sIjsKLQkJY2F0YWxvZ0ZpbGUgPSBUZXN0UGx1Z2luLnJlc29sdmVQbHVnaW5Mb2NhdGlvbihjYXRhbG9nRmlsZSk7Ci0JCQkJCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tIiArIHRoaXMuZ2V0TmFtZSgpICsgIi0tLS0tLS0tLSIpOwotCQlSZXNvbHZpbmdYTUxQYXJzZXIgcGFyc2VyID0gbmV3IFJlc29sdmluZ1hNTFBhcnNlcigpOwotCQlwYXJzZXIucGFyc2VBbmRWYWxpZGF0ZSh4bWxGaWxlLCBuZXcgU3RyaW5nW117Y2F0YWxvZ0ZpbGV9KTsKLQkJYXNzZXJ0RmFsc2UocGFyc2VyLnZhbGlkYXRpb25FcnJvcik7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvcmVzb2x2ZXIvdG9vbHMvdGVzdHMvaW50ZXJuYWwvWFNMVExpYWlzb24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9yZXNvbHZlci90b29scy90ZXN0cy9pbnRlcm5hbC9YU0xUTGlhaXNvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmYzNmE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9yZXNvbHZlci90b29scy90ZXN0cy9pbnRlcm5hbC9YU0xUTGlhaXNvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qCi0gKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotICogcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sIGlmCi0gKiAgICBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZ2VtZW50OgotICogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0gKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSAqICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZ2VtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSAqICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZ2VtZW50cyBub3JtYWxseSBhcHBlYXIuCi0gKgotICogNC4gVGhlIG5hbWVzICJUaGUgSmFrYXJ0YSBQcm9qZWN0IiwgIkFudCIsIGFuZCAiQXBhY2hlIFNvZnR3YXJlCi0gKiAgICBGb3VuZGF0aW9uIiBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0gKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSAqCi0gKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIgotICogICAgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0gKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgR3JvdXAuCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0gKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKgotICogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSAqIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBGb3IgbW9yZQotICogaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlCi0gKiA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0gKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnJlc29sdmVyLnRvb2xzLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotCi0vKioKLSAqIFByb3h5IGludGVyZmFjZSBmb3IgWFNMVCBwcm9jZXNzb3JzLgotICoKLSAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnJ1YnlzQHVzLmlibS5jb20iPlNhbSBSdWJ5PC9hPgotICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86c2JhaWxsaWV6QGFwYWNoZS5vcmciPlN0ZXBoYW5lIEJhaWxsaWV6PC9hPgotICogQHNlZSBYU0xUUHJvY2VzcwotICogQHNpbmNlIEFudCAxLjEKLSAqLwotcHVibGljIGludGVyZmFjZSBYU0xUTGlhaXNvbiB7Ci0KLSAgICAvKioKLSAgICAgKiB0aGUgZmlsZSBwcm90b2NvbCBwcmVmaXggZm9yIHN5c3RlbWlkLgotICAgICAqIFRoaXMgZmlsZSBwcm90b2NvbCBtdXN0IGJlIGFwcGVuZGVkIHRvIGFuIGFic29sdXRlIHBhdGguCi0gICAgICogVHlwaWNhbGx5OiA8dHQ+RklMRV9QUk9UT0NPTF9QUkVGSVggKyBmaWxlLmdldEFic29sdXRlUGF0aCgpPC90dD4KLSAgICAgKiBOb3RlIHRoYXQgb24gV2luZG93cywgYW4gZXh0cmEgJy8nIG11c3QgYmUgYXBwZW5kZWQgdG8gdGhlCi0gICAgICogcHJvdG9jb2wgcHJlZml4IHNvIHRoYXQgdGhlcmUgaXMgYWx3YXlzIDMgY29uc2VjdXRpdmUgc2xhc2hlcy4KLSAgICAgKiBAc2luY2UgQW50IDEuNAotICAgICAqLwotICAgIFN0cmluZyBGSUxFX1BST1RPQ09MX1BSRUZJWCA9ICJmaWxlOi8vIjsKLQotICAgIC8qKgotICAgICAqIHNldCB0aGUgc3R5bGVzaGVldCB0byB1c2UgZm9yIHRoZSB0cmFuc2Zvcm1hdGlvbi4KLSAgICAgKiBAcGFyYW0gc3R5bGVzaGVldCB0aGUgc3R5bGVzaGVldCB0byBiZSB1c2VkIGZvciB0cmFuc2Zvcm1hdGlvbi4KLSAgICAgKiBAc2luY2UgQW50IDEuNAotICAgICAqLwotICAgIHZvaWQgc2V0U3R5bGVzaGVldChGaWxlIHN0eWxlc2hlZXQpIHRocm93cyBFeGNlcHRpb247Ci0KLSAgICAvKioKLSAgICAgKiBBZGQgYSBwYXJhbWV0ZXIgdG8gYmUgc2V0IGR1cmluZyB0aGUgWFNMIHRyYW5zZm9ybWF0aW9uLgotICAgICAqIEBwYXJhbSBuYW1lIHRoZSBwYXJhbWV0ZXIgbmFtZS4KLSAgICAgKiBAcGFyYW0gZXhwcmVzc2lvbiB0aGUgcGFyYW1ldGVyIHZhbHVlIGFzIGFuIGV4cHJlc3Npb24gc3RyaW5nLgotICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uIHRocm93biBpZiBhbnkgcHJvYmxlbXMgaGFwcGVucy4KLSAgICAgKiBAc2luY2UgQW50IDEuMwotICAgICAqLwotICAgIHZvaWQgYWRkUGFyYW0oU3RyaW5nIG5hbWUsIFN0cmluZyBleHByZXNzaW9uKSB0aHJvd3MgRXhjZXB0aW9uOwotCi0gICAgLyoqCi0gICAgICogUGVyZm9ybSB0aGUgdHJhbnNmb3JtYXRpb24gb2YgYSBmaWxlIGludG8gYW5vdGhlci4KLSAgICAgKiBAcGFyYW0gaW5maWxlIHRoZSBpbnB1dCBmaWxlLCBwcm9iYWJseSBhbiBYTUwgb25lLiA6LSkKLSAgICAgKiBAcGFyYW0gb3V0ZmlsZSB0aGUgb3V0cHV0IGZpbGUgcmVzdWx0aW5nIGZyb20gdGhlIHRyYW5zZm9ybWF0aW9uCi0gICAgICogQHRocm93cyBFeGNlcHRpb24gdGhyb3duIGlmIGFueSBwcm9ibGVtcyBoYXBwZW5zLgotICAgICAqIEBzZWUgI3NldFN0eWxlc2hlZXQoRmlsZSkKLSAgICAgKiBAc2luY2UgQW50IDEuNAotICAgICAqLwotICAgIHZvaWQgdHJhbnNmb3JtKEZpbGUgaW5maWxlLCBGaWxlIG91dGZpbGUpIHRocm93cyBFeGNlcHRpb247Ci0KLX0gLy8tLSBYU0xUTGlhaXNvbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Jlc29sdmVyL3Rvb2xzL3Rlc3RzL2ludGVybmFsL1hTTFRXaXRoQ2F0YWxvZ1Jlc29sdmVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Jlc29sdmVyL3Rvb2xzL3Rlc3RzL2ludGVybmFsL1hTTFRXaXRoQ2F0YWxvZ1Jlc29sdmVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2ZiM2FkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9yZXNvbHZlci90b29scy90ZXN0cy9pbnRlcm5hbC9YU0xUV2l0aENhdGFsb2dSZXNvbHZlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5yZXNvbHZlci50b29scy50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sLnJlc29sdmVyLnRvb2xzLkNhdGFsb2dSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWwuVGVzdFBsdWdpbjsKLQotCi0vKioKLSAqIFRlc3QgZnJvbSBodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTE2MzM2Ci0gKiAKLSAqIFRvIHJ1biB0aGlzIHRlc3QgbmVlZCB0byBhZGQgcmVzb2x2ZXIuamFyIHRvIHRoZSBjbGFzc3BhdGguCi0gKiBSdW4gYXMgSlVuaXQgUGx1Z2luIHRlc3Q6Ci0gKiAtIHB1dCByZXNvbHZlci5qYXIgb24gdGhlIGJvb3QgY2xhc3MgcGF0aAotICogLSBhZGQgVk0gYXJndW1lbnQ6Ci0gKiAKLSAqIC1YYm9vdGNsYXNzcGF0aC9wOjxpbnN0YWxsIGxvY2F0aW9uPlxqcmVcbGliXGV4dFxyZXNvbHZlci5qYXIKLSAqCi0gKgotICovCi1wdWJsaWMgY2xhc3MgWFNMVFdpdGhDYXRhbG9nUmVzb2x2ZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JQ2F0YWxvZ1Jlc29sdmVyIGNhdGFsb2dSZXNvbHZlciA9IG51bGw7Ci0JVHJhWExpYWlzb24geHNsdExpYXNvbiA9IG51bGw7Ci0Jc3RhdGljIFN0cmluZyBTRVAgPSBGaWxlLnNlcGFyYXRvcjsKLQotCXB1YmxpYyBYU0xUV2l0aENhdGFsb2dSZXNvbHZlclRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCQlqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4oWFNMVFdpdGhDYXRhbG9nUmVzb2x2ZXJUZXN0LmNsYXNzKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwkKLQkJY2F0YWxvZ1Jlc29sdmVyID0gbmV3IENhdGFsb2dSZXNvbHZlcigpOwotCQl4c2x0TGlhc29uID0gbmV3IFRyYVhMaWFpc29uKCk7Ci0JCXhzbHRMaWFzb24uc2V0RW50aXR5UmVzb2x2ZXIoY2F0YWxvZ1Jlc29sdmVyKTsKLQkJeHNsdExpYXNvbi5zZXRVUklSZXNvbHZlcihjYXRhbG9nUmVzb2x2ZXIpOwotCi0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCi0JCVN0cmluZyB0ZXN0RGlyTmFtZSA9ICJkYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlciI7Ci0JCXRlc3REaXJOYW1lID0gVGVzdFBsdWdpbi5yZXNvbHZlUGx1Z2luTG9jYXRpb24odGVzdERpck5hbWUpOwotCQkKLQkJU3RyaW5nIGNhdGFsb2dGaWxlTmFtZSA9IHRlc3REaXJOYW1lICsgU0VQICsgImNhdGFsb2cueG1sIjsJCi0JCVN0cmluZyB4c2xGaWxlTmFtZSA9IHRlc3REaXJOYW1lICsgU0VQICsgInhtbGNhdGFsb2cueHNsIjsKLQkJU3RyaW5nIHhtbEZpbGVOYW1lID0gdGVzdERpck5hbWUgKyBTRVAgKyAieG1sY2F0YWxvZzIueG1sIjsKLQkJU3RyaW5nIHJlc3VsdEZpbGVOYW1lID0geG1sRmlsZU5hbWUgKyAiLW91dCI7Ci0JCVN0cmluZyBpZGVhbFJlc3VsdEZpbGVOYW1lID0geG1sRmlsZU5hbWUgKyAiLXJlc3VsdCI7Ci0KLQkJLy9zZXR1cCBjYXRhbG9nIAotCi0JCUZpbGUgY2F0YWxvZ0ZpbGUgPSBuZXcgRmlsZShjYXRhbG9nRmlsZU5hbWUpOwotCQkKLQkJYXNzZXJ0VHJ1ZSgiQ2F0YWxvZyBmaWxlICIgKyBjYXRhbG9nRmlsZU5hbWUgKyAiIHNob3VsZCBleGlzdCBmb3IgdGhlIHRlc3QiLCBjYXRhbG9nRmlsZS5leGlzdHMoKSk7Ci0JCi0JCWNhdGFsb2dSZXNvbHZlci5nZXRDYXRhbG9nKCkucGFyc2VDYXRhbG9nKGNhdGFsb2dGaWxlTmFtZSk7Ci0JCQotCQlGaWxlIHhzbEZpbGUgPSBuZXcgRmlsZSh4c2xGaWxlTmFtZSk7Ci0JCQotCQlhc3NlcnRUcnVlKCJYU0wgZmlsZSAiICsgeHNsRmlsZU5hbWUgKyAiIHNob3VsZCBleGlzdCBmb3IgdGhlIHRlc3QiLCB4c2xGaWxlLmV4aXN0cygpKTsJCQotCQkJCi0JCUZpbGUgaW5GaWxlID0gbmV3IEZpbGUoeG1sRmlsZU5hbWUpOwotCQkKLQkJYXNzZXJ0VHJ1ZSgiWE1MIGZpbGUgIiArIHhzbEZpbGVOYW1lICsgIiBzaG91bGQgZXhpc3QgZm9yIHRoZSB0ZXN0IiwgeHNsRmlsZS5leGlzdHMoKSk7CQkKLQkJCi0JCUZpbGUgb3V0RmlsZSA9IEZpbGVVdGlsLmNyZWF0ZUZpbGVBbmRQYXJlbnREaXJlY3RvcmllcyhyZXN1bHRGaWxlTmFtZSk7Ci0KLQkJeHNsdExpYXNvbi5zZXRTdHlsZXNoZWV0KHhzbEZpbGUpOwotCQl4c2x0TGlhc29uLmFkZFBhcmFtKCJvdXRwcm9wIiwgInRlc3R2YWx1ZSIpOwotCQotCQl4c2x0TGlhc29uLnRyYW5zZm9ybShpbkZpbGUsIG91dEZpbGUpOwotCQkKLQkJYm9vbGVhbiBkaWZmRm91bmQgPQotCQkJCQlGaWxlVXRpbC50ZXh0dWFsQ29tcGFyZSgKLQkJCQkJCW91dEZpbGUsCi0JCQkJCQluZXcgRmlsZShpZGVhbFJlc3VsdEZpbGVOYW1lKSwKLQkJCQkJCW5ldyBGaWxlKHJlc3VsdEZpbGVOYW1lICsgIi1kaWZmIikpOwotCQkJCi0JICAgYXNzZXJ0VHJ1ZSgiT3V0cHV0IGZpbGUgc2hvdWxkIG1hdGNoIHRoZSBleHBlY3RlZCByZXN1bHRzIiwgIWRpZmZGb3VuZCk7Ci0KLQkJCi0KLQl9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VyaXJlc29sdmVyL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvTXlYTUxDYXRhbG9nUmVzb2x2ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91cmlyZXNvbHZlci92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL015WE1MQ2F0YWxvZ1Jlc29sdmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwZjEyM2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VyaXJlc29sdmVyL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvTXlYTUxDYXRhbG9nUmVzb2x2ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51cmlyZXNvbHZlci52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnV0aWwuWE1MQ2F0YWxvZ1Jlc29sdmVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxSZXNvdXJjZUlkZW50aWZpZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhOSUV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIE15WE1MQ2F0YWxvZ1Jlc29sdmVyIGV4dGVuZHMgWE1MQ2F0YWxvZ1Jlc29sdmVyIHsKLQotCS8qKgotCSAqIEBwYXJhbSBhcmdzCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIHJlc29sdmVJZGVudGlmaWVyKFhNTFJlc291cmNlSWRlbnRpZmllciByZXNvdXJjZUlkZW50aWZpZXIpIHRocm93cyBJT0V4Y2VwdGlvbiwgWE5JRXhjZXB0aW9uIHsKLQkgICAgU3RyaW5nIHJlc29sdmVkSWQgPSBudWxsOwotCi0gICAgICAgIC8vIFRoZSBuYW1lc3BhY2UgaXMgdXNlZnVsIGZvciByZXNvbHZpbmcgbmFtZXNwYWNlIGF3YXJlCi0gICAgICAgIC8vIGdyYW1tYXJzIHN1Y2ggYXMgWE1MIHNjaGVtYS4gTGV0IGl0IHRha2UgcHJlY2VkZW5jZSBvdmVyCi0gICAgICAgIC8vIHRoZSBleHRlcm5hbCBpZGVudGlmaWVyIGlmIG9uZSBleGlzdHMuCi0gICAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSByZXNvdXJjZUlkZW50aWZpZXIuZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICAgIGlmIChuYW1lc3BhY2UgIT0gbnVsbCkgewotICAgICAgICAgICAgcmVzb2x2ZWRJZCA9IHJlc29sdmVVUkkobmFtZXNwYWNlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gUmVzb2x2ZSBhZ2FpbnN0IGFuIGV4dGVybmFsIGlkZW50aWZpZXIgaWYgb25lIGV4aXN0cy4gVGhpcwotICAgICAgICAvLyBpcyB1c2VmdWwgZm9yIHJlc29sdmluZyBEVEQgZXh0ZXJuYWwgc3Vic2V0cyBhbmQgb3RoZXIgCi0gICAgICAgIC8vIGV4dGVybmFsIGVudGl0aWVzLiBGb3IgWE1MIHNjaGVtYXMgaWYgdGhlcmUgd2FzIG5vIG5hbWVzcGFjZSAKLSAgICAgICAgLy8gbWFwcGluZyB3ZSBtaWdodCBiZSBhYmxlIHRvIHJlc29sdmUgYSBzeXN0ZW0gaWRlbnRpZmllciAKLSAgICAgICAgLy8gc3BlY2lmaWVkIGFzIGEgbG9jYXRpb24gaGludC4KLSAgICAgICAgaWYgKHJlc29sdmVkSWQgPT0gbnVsbCkgewotICAgICAgICAgICAgU3RyaW5nIHB1YmxpY0lkID0gcmVzb3VyY2VJZGVudGlmaWVyLmdldFB1YmxpY0lkKCk7Ci0gICAgICAgICAgICBTdHJpbmcgc3lzdGVtSWQgPSBnZXRVc2VMaXRlcmFsU3lzdGVtSWQoKSAKLSAgICAgICAgICAgICAgICA/IHJlc291cmNlSWRlbnRpZmllci5nZXRMaXRlcmFsU3lzdGVtSWQoKQotICAgICAgICAgICAgICAgIDogcmVzb3VyY2VJZGVudGlmaWVyLmdldEV4cGFuZGVkU3lzdGVtSWQoKTsKLSAgICAgICAgICAgIGlmIChwdWJsaWNJZCAhPSBudWxsICYmIHN5c3RlbUlkICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXNvbHZlZElkID0gcmVzb2x2ZVB1YmxpYyhwdWJsaWNJZCwgc3lzdGVtSWQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoc3lzdGVtSWQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJlc29sdmVkSWQgPSByZXNvbHZlU3lzdGVtKHN5c3RlbUlkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzb2x2ZWRJZDsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91cmlyZXNvbHZlci92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1ZhbGlkYXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VyaXJlc29sdmVyL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0NjUzOTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VyaXJlc29sdmVyL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVyaXJlc29sdmVyLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMucGFyc2Vycy5ET01QYXJzZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMucGFyc2Vycy5TQVhQYXJzZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMudXRpbC5YTUxDYXRhbG9nUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWFBhcnNlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0b3IgewotCQotCXB1YmxpYyBib29sZWFuIHZhbGlkYXRpb25FcnJvciA9IGZhbHNlOwotCQotCXB1YmxpYyB2b2lkIHZhbGlkYXRlV2l0aFNjaGVtYV9KQVhQKFN0cmluZyB4bWxGaWxlLCBTdHJpbmdbXSBjYXRhbG9ncykgewotCQl0cnkgewotCQkJU3lzdGVtLnNldFByb3BlcnR5KCJqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5IiwKLQkJCQkJIm9yZy5hcGFjaGUueGVyY2VzLmpheHAuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeUltcGwiKTsKLQkJCURvY3VtZW50QnVpbGRlckZhY3RvcnkgZmFjdG9yeSA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLQkJCWZhY3Rvcnkuc2V0TmFtZXNwYWNlQXdhcmUodHJ1ZSk7Ci0JCQlmYWN0b3J5LnNldFZhbGlkYXRpbmcodHJ1ZSk7Ci0JCQlmYWN0b3J5LnNldEF0dHJpYnV0ZSgKLQkJCQkJImh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL2pheHAvcHJvcGVydGllcy9zY2hlbWFMYW5ndWFnZSIsCi0JCQkJCSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIpOwotCQotCQkJLy8gQ3JlYXRlIGNhdGFsb2cgcmVzb2x2ZXIgYW5kIHNldCBhIGNhdGFsb2cgbGlzdC4KLQkJCVhNTENhdGFsb2dSZXNvbHZlciByZXNvbHZlciA9IG5ldyBYTUxDYXRhbG9nUmVzb2x2ZXIoKTsKLQkJCXJlc29sdmVyLnNldFByZWZlclB1YmxpYyh0cnVlKTsKLQkJCXJlc29sdmVyLnNldENhdGFsb2dMaXN0KGNhdGFsb2dzKTsKLQkJCWZhY3Rvcnkuc2V0QXR0cmlidXRlKAotCQkJCQkgICJodHRwOi8vYXBhY2hlLm9yZy94bWwvcHJvcGVydGllcy9pbnRlcm5hbC9lbnRpdHktcmVzb2x2ZXIiLCAKLQkJCQkJICByZXNvbHZlcik7Ci0KLQkJCURvY3VtZW50QnVpbGRlciBidWlsZGVyID0gZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLQkJCUVycm9ySGFuZGxlciBoYW5kbGVyID0gbmV3IEVycm9ySGFuZGxlcih0aGlzKTsKLQkJCWJ1aWxkZXIuc2V0RXJyb3JIYW5kbGVyKGhhbmRsZXIpOwotCQkJYnVpbGRlci5zZXRFbnRpdHlSZXNvbHZlcihyZXNvbHZlcik7Ci0JCQlidWlsZGVyLnBhcnNlKHhtbEZpbGUpOwotCQkJCi0JCQlpZiAodmFsaWRhdGlvbkVycm9yID09IHRydWUpCi0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJYTUwgRG9jdW1lbnQgaGFzIEVycm9yOiAiCi0JCQkJCQkrIGhhbmRsZXIuc2F4UGFyc2VFeGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKLQkJCWVsc2UKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlhNTCBEb2N1bWVudCBpcyB2YWxpZCIpOwotCQl9IGNhdGNoIChqYXZhLmlvLklPRXhjZXB0aW9uIGlvZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJJT0V4Y2VwdGlvbiAiICsgaW9lLmdldE1lc3NhZ2UoKSk7Ci0JCX0gY2F0Y2ggKFNBWEV4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNBWEV4Y2VwdGlvbiAiICsgZS5nZXRNZXNzYWdlKCkpOwotCQl9IGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiAgICAgICAgICAgICAgICAgICAgIgotCQkJCQkJCSsgZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JCQotCX0KLQotCQotCXB1YmxpYyB2b2lkIHZhbGlkYXRlV2l0aFNjaGVtYV9YZXJjZXNTQVhQYXJzZXIoU3RyaW5nIFhtbERvY3VtZW50VXJsLCBTdHJpbmcgW10gY2F0YWxvZ3MpIHsKLQkJU0FYUGFyc2VyIHBhcnNlciA9IG5ldyBTQVhQYXJzZXIoKTsKLQkJdHJ5IHsKLQkJCXBhcnNlci5zZXRGZWF0dXJlKCJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvdmFsaWRhdGlvbiIsIHRydWUpOwotCQkJcGFyc2VyLnNldEZlYXR1cmUoCi0JCQkJCSJodHRwOi8vYXBhY2hlLm9yZy94bWwvZmVhdHVyZXMvdmFsaWRhdGlvbi9zY2hlbWEiLCB0cnVlKTsKLQkJCQotCQkJLy8JQ3JlYXRlIGNhdGFsb2cgcmVzb2x2ZXIgYW5kIHNldCBhIGNhdGFsb2cgbGlzdC4KLQkJCVhNTENhdGFsb2dSZXNvbHZlciByZXNvbHZlciA9IG5ldyBYTUxDYXRhbG9nUmVzb2x2ZXIoKTsKLQkJCXJlc29sdmVyLnNldFVzZUxpdGVyYWxTeXN0ZW1JZCh0cnVlKTsKLQkJCXJlc29sdmVyLnNldFByZWZlclB1YmxpYyh0cnVlKTsKLQkJCXJlc29sdmVyLnNldENhdGFsb2dMaXN0KGNhdGFsb2dzKTsKLQkJCQotCQkJLy8JU2V0IHRoZSByZXNvbHZlciBvbiB0aGUgcGFyc2VyLgotCQkJcGFyc2VyLnNldFByb3BlcnR5KCJodHRwOi8vYXBhY2hlLm9yZy94bWwvcHJvcGVydGllcy9pbnRlcm5hbC9lbnRpdHktcmVzb2x2ZXIiLCAKLQkJCQkJICByZXNvbHZlcik7Ci0KLQkJCUVycm9ySGFuZGxlciBoYW5kbGVyID0gbmV3IEVycm9ySGFuZGxlcih0aGlzKTsKLQkJCXBhcnNlci5zZXRFcnJvckhhbmRsZXIoaGFuZGxlcik7Ci0JCQkKLQkJCXBhcnNlci5wYXJzZShYbWxEb2N1bWVudFVybCk7Ci0JCQlpZiAodmFsaWRhdGlvbkVycm9yID09IHRydWUpewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiWE1MIERvY3VtZW50IGhhcyBFcnJvcjogIgotCQkJCQkJKyBoYW5kbGVyLnNheFBhcnNlRXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7Ci0JCQkJdGhyb3cgIGhhbmRsZXIuc2F4UGFyc2VFeGNlcHRpb247Ci0JCQl9Ci0JCQllbHNlewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiWE1MIERvY3VtZW50IGlzIHZhbGlkIik7Ci0JCQl9Ci0JCQkJCi0JCX0gY2F0Y2ggKGphdmEuaW8uSU9FeGNlcHRpb24gaW9lKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIklPRXhjZXB0aW9uICIgKyBpb2UuZ2V0TWVzc2FnZSgpKTsKLQkJfSBjYXRjaCAoU0FYRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU0FYRXhjZXB0aW9uICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdmFsaWRhdGVXaXRoU2NoZW1hX1hlcmNlc0RPTVBhcnNlcihTdHJpbmcgWG1sRG9jdW1lbnRVcmwsIFN0cmluZyBbXSBjYXRhbG9ncykgewotCQlET01QYXJzZXIgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpOwotCQl0cnkgewotCQkJcGFyc2VyLnNldEZlYXR1cmUoImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy92YWxpZGF0aW9uIiwgdHJ1ZSk7Ci0JCQlwYXJzZXIuc2V0RmVhdHVyZSgKLQkJCQkJImh0dHA6Ly9hcGFjaGUub3JnL3htbC9mZWF0dXJlcy92YWxpZGF0aW9uL3NjaGVtYSIsIHRydWUpOwotCQkJCi0JCQkvLwlDcmVhdGUgY2F0YWxvZyByZXNvbHZlciBhbmQgc2V0IGEgY2F0YWxvZyBsaXN0LgotCQkJWE1MQ2F0YWxvZ1Jlc29sdmVyIHJlc29sdmVyID0gbmV3IFhNTENhdGFsb2dSZXNvbHZlcigpOwotCQkJcmVzb2x2ZXIuc2V0VXNlTGl0ZXJhbFN5c3RlbUlkKHRydWUpOwotCQkJcmVzb2x2ZXIuc2V0UHJlZmVyUHVibGljKHRydWUpOwotCQkJcmVzb2x2ZXIuc2V0Q2F0YWxvZ0xpc3QoY2F0YWxvZ3MpOwotCQkJCi0JCQkvLwlTZXQgdGhlIHJlc29sdmVyIG9uIHRoZSBwYXJzZXIuCi0JCQlwYXJzZXIuc2V0UHJvcGVydHkoImh0dHA6Ly9hcGFjaGUub3JnL3htbC9wcm9wZXJ0aWVzL2ludGVybmFsL2VudGl0eS1yZXNvbHZlciIsIAotCQkJCQkgIHJlc29sdmVyKTsKLQotCQkJRXJyb3JIYW5kbGVyIGhhbmRsZXIgPSBuZXcgRXJyb3JIYW5kbGVyKHRoaXMpOwotCQkJcGFyc2VyLnNldEVycm9ySGFuZGxlcihoYW5kbGVyKTsKLQkJCQotCQkJcGFyc2VyLnBhcnNlKFhtbERvY3VtZW50VXJsKTsKLQkJCWlmICh2YWxpZGF0aW9uRXJyb3IgPT0gdHJ1ZSl7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJYTUwgRG9jdW1lbnQgaGFzIEVycm9yOiAiCi0JCQkJCQkrIGhhbmRsZXIuc2F4UGFyc2VFeGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKLQkJCQl0aHJvdyAgaGFuZGxlci5zYXhQYXJzZUV4Y2VwdGlvbjsKLQkJCX0KLQkJCWVsc2V7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJYTUwgRG9jdW1lbnQgaXMgdmFsaWQiKTsKLQkJCX0KLQkJCQkKLQkJfSBjYXRjaCAoamF2YS5pby5JT0V4Y2VwdGlvbiBpb2UpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiSU9FeGNlcHRpb24gIiArIGlvZS5nZXRNZXNzYWdlKCkpOwotCQl9IGNhdGNoIChTQVhFeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTQVhFeGNlcHRpb24gIiArIGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgY2xhc3MgRXJyb3JIYW5kbGVyIGV4dGVuZHMgRGVmYXVsdEhhbmRsZXIgewotCi0JCVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLQkJcHVibGljIFNBWFBhcnNlRXhjZXB0aW9uIHNheFBhcnNlRXhjZXB0aW9uID0gbnVsbDsKLQotCQlwdWJsaWMgRXJyb3JIYW5kbGVyKFZhbGlkYXRvciB2YWxpZGF0b3IpIHsKLQkJCXN1cGVyKCk7Ci0JCQl0aGlzLnZhbGlkYXRvciA9IHZhbGlkYXRvcjsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIGVycm9yKFNBWFBhcnNlRXhjZXB0aW9uIGV4Y2VwdGlvbikgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7Ci0JCQl2YWxpZGF0aW9uRXJyb3IgPSB0cnVlOwotCQkJc2F4UGFyc2VFeGNlcHRpb24gPSBleGNlcHRpb247Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBmYXRhbEVycm9yKFNBWFBhcnNlRXhjZXB0aW9uIGV4Y2VwdGlvbikgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7Ci0JCQl2YWxpZGF0aW9uRXJyb3IgPSB0cnVlOwotCQkJc2F4UGFyc2VFeGNlcHRpb24gPSBleGNlcHRpb247Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCB3YXJuaW5nKFNBWFBhcnNlRXhjZXB0aW9uIGV4Y2VwdGlvbikgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7Ci0JCX0KLQl9Ci0KLQkKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdXJpcmVzb2x2ZXIvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9WYWxpZGF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdXJpcmVzb2x2ZXIvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9WYWxpZGF0b3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiODRjYWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VyaXJlc29sdmVyL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvVmFsaWRhdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51cmlyZXNvbHZlci52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy5pbnRlcm5hbC5UZXN0UGx1Z2luOwotCi0vKioKLSAqIFRvIHJ1biB0aGlzIHRlc3QgbmVlZCB0byBhZGQgcmVzb2x2ZXIuamFyIHRvIHRoZSBjbGFzc3BhdGguCi0gKiBSdW4gYXMgSlVuaXQgUGx1Z2luIHRlc3Q6Ci0gKiAtIHB1dCByZXNvbHZlci5qYXIgb24gdGhlIGJvb3QgY2xhc3MgcGF0aAotICogLSBhZGQgVk0gYXJndW1lbnQ6Ci0gKiAKLSAqIC1YYm9vdGNsYXNzcGF0aC9wOjxpbnN0YWxsIGxvY2F0aW9uPlxqcmVcbGliXGV4dFxyZXNvbHZlci5qYXIKLSAqCi0gKgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdG9yVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkKLQlWYWxpZGF0b3IgdmFsaWRhdG9yID0gbnVsbDsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCXZhbGlkYXRvciA9IG5ldyBWYWxpZGF0b3IoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCX0KLQotCXB1YmxpYyBWYWxpZGF0b3JUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQkKLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGluZ1hlcmNlc1NBWFBhcnNlcjEoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgeG1sRmlsZSA9ICIvZGF0YS9QZXJzb25hbC9wZXJzb25hbC1zY2hlbWEueG1sIjsKLQkJeG1sRmlsZSA9IFRlc3RQbHVnaW4ucmVzb2x2ZVBsdWdpbkxvY2F0aW9uKHhtbEZpbGUpOwotCQkKLQkJU3RyaW5nIGNhdGFsb2dGaWxlID0gIi9kYXRhL2NhdGFsb2cyLnhtbCI7Ci0JCWNhdGFsb2dGaWxlID0gVGVzdFBsdWdpbi5yZXNvbHZlUGx1Z2luTG9jYXRpb24oY2F0YWxvZ0ZpbGUpOwotCQkKLQkJU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0iICsgdGhpcy5nZXROYW1lKCkgKyAiLS0tLS0tLS0tIik7Ci0JCXZhbGlkYXRvci52YWxpZGF0ZVdpdGhTY2hlbWFfWGVyY2VzU0FYUGFyc2VyKHhtbEZpbGUsIG5ldyBTdHJpbmdbXXtjYXRhbG9nRmlsZX0pOwotCQlhc3NlcnRGYWxzZSh2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFZhbGlkYXRpbmdYZXJjZXNTQVhQYXJzZXIyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHhtbEZpbGUgPSAiL2RhdGEvZXhhbXBsZS9leGFtcGxlLXNjaGVtYS54bWwiOwotCQl4bWxGaWxlID0gVGVzdFBsdWdpbi5yZXNvbHZlUGx1Z2luTG9jYXRpb24oeG1sRmlsZSk7Ci0JCQotCQlTdHJpbmcgY2F0YWxvZ0ZpbGUgPSAiL2RhdGEvZXhhbXBsZS1jYXRhbG9nLnhtbCI7Ci0JCWNhdGFsb2dGaWxlID0gVGVzdFBsdWdpbi5yZXNvbHZlUGx1Z2luTG9jYXRpb24oY2F0YWxvZ0ZpbGUpOwotCQkKLQkJU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0iICsgdGhpcy5nZXROYW1lKCkgKyAiLS0tLS0tLS0tIik7Ci0JCXZhbGlkYXRvci52YWxpZGF0ZVdpdGhTY2hlbWFfWGVyY2VzU0FYUGFyc2VyKHhtbEZpbGUsIG5ldyBTdHJpbmdbXXtjYXRhbG9nRmlsZX0pOwotCQlhc3NlcnRGYWxzZSh2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yKTsKLQl9Ci0JcHVibGljIHZvaWQgdGVzdFZhbGlhdGluZ1hlcmNlc1NBWFBhcnNlcjMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgeG1sRmlsZSA9ICIvZGF0YS9leGFtcGxlL2V4YW1wbGUtc2NoZW1hLW5vbmFtZXNwYWNlLnhtbCI7Ci0JCXhtbEZpbGUgPSBUZXN0UGx1Z2luLnJlc29sdmVQbHVnaW5Mb2NhdGlvbih4bWxGaWxlKTsKLQkJCi0JCVN0cmluZyBjYXRhbG9nRmlsZSA9ICIvZGF0YS9leGFtcGxlLWNhdGFsb2cueG1sIjsKLQkJY2F0YWxvZ0ZpbGUgPSBUZXN0UGx1Z2luLnJlc29sdmVQbHVnaW5Mb2NhdGlvbihjYXRhbG9nRmlsZSk7Ci0JCQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLSIgKyB0aGlzLmdldE5hbWUoKSArICItLS0tLS0tLS0iKTsKLQkJdmFsaWRhdG9yLnZhbGlkYXRlV2l0aFNjaGVtYV9YZXJjZXNTQVhQYXJzZXIoeG1sRmlsZSwgbmV3IFN0cmluZ1tde2NhdGFsb2dGaWxlfSk7Ci0JCWFzc2VydEZhbHNlKHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGluZ1hlcmNlc0RPTVBhcnNlcjEoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgeG1sRmlsZSA9ICIvZGF0YS9leGFtcGxlL2V4YW1wbGUtc2NoZW1hLW5vbmFtZXNwYWNlLnhtbCI7Ci0JCXhtbEZpbGUgPSBUZXN0UGx1Z2luLnJlc29sdmVQbHVnaW5Mb2NhdGlvbih4bWxGaWxlKTsKLQkJCi0JCVN0cmluZyBjYXRhbG9nRmlsZSA9ICIvZGF0YS9leGFtcGxlLWNhdGFsb2cueG1sIjsKLQkJY2F0YWxvZ0ZpbGUgPSBUZXN0UGx1Z2luLnJlc29sdmVQbHVnaW5Mb2NhdGlvbihjYXRhbG9nRmlsZSk7Ci0JCQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLSIgKyB0aGlzLmdldE5hbWUoKSArICItLS0tLS0tLS0iKTsKLQkJdmFsaWRhdG9yLnZhbGlkYXRlV2l0aFNjaGVtYV9YZXJjZXNET01QYXJzZXIoeG1sRmlsZSwgbmV3IFN0cmluZ1tde2NhdGFsb2dGaWxlfSk7Ci0JCWFzc2VydEZhbHNlKHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGluZ0pBWFBQYXJzZXIxKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHhtbEZpbGUgPSAiL2RhdGEvZXhhbXBsZS9leGFtcGxlLXNjaGVtYS54bWwiOwotCQl4bWxGaWxlID0gVGVzdFBsdWdpbi5yZXNvbHZlUGx1Z2luTG9jYXRpb24oeG1sRmlsZSk7Ci0JCQotCQlTdHJpbmcgY2F0YWxvZ0ZpbGUgPSAiL2RhdGEvZXhhbXBsZS1jYXRhbG9nLnhtbCI7Ci0JCWNhdGFsb2dGaWxlID0gVGVzdFBsdWdpbi5yZXNvbHZlUGx1Z2luTG9jYXRpb24oY2F0YWxvZ0ZpbGUpOwotCQkKLQkJU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0iICsgdGhpcy5nZXROYW1lKCkgKyAiLS0tLS0tLS0tIik7Ci0JCXZhbGlkYXRvci52YWxpZGF0ZVdpdGhTY2hlbWFfSkFYUCh4bWxGaWxlLCBuZXcgU3RyaW5nW117Y2F0YWxvZ0ZpbGV9KTsJCi0JCWFzc2VydEZhbHNlKHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGlvbldpdGhJbXBvcnRlZEFuZEluY2x1ZGVkU2NoZW1hMSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyB4bWxGaWxlID0gIi9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnRfLnhtbCI7Ci0JCXhtbEZpbGUgPSBUZXN0UGx1Z2luLnJlc29sdmVQbHVnaW5Mb2NhdGlvbih4bWxGaWxlKTsKLQkJCi0JCVN0cmluZyBjYXRhbG9nRmlsZSA9ICIvZGF0YS9yZXBvcnQtY2F0YWxvZ19zeXN0ZW0ueG1sIjsKLQkJY2F0YWxvZ0ZpbGUgPSBUZXN0UGx1Z2luLnJlc29sdmVQbHVnaW5Mb2NhdGlvbihjYXRhbG9nRmlsZSk7Ci0JCQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLSIgKyB0aGlzLmdldE5hbWUoKSArICItLS0tLS0tLS0iKTsKLQkJdmFsaWRhdG9yLnZhbGlkYXRlV2l0aFNjaGVtYV9YZXJjZXNET01QYXJzZXIoeG1sRmlsZSwgbmV3IFN0cmluZ1tde2NhdGFsb2dGaWxlfSk7Ci0JCS8vIEluY2x1ZGVkIHNjaGVtYSB3aWxsIGJlIHJlc29sdmVkCi0JCWFzc2VydEZhbHNlKHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGlvbldpdGhJbXBvcnRlZEFuZEluY2x1ZGVkU2NoZW1hMigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyB4bWxGaWxlID0gIi9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnRfLnhtbCI7Ci0JCXhtbEZpbGUgPSBUZXN0UGx1Z2luLnJlc29sdmVQbHVnaW5Mb2NhdGlvbih4bWxGaWxlKTsKLQkJCi0JCVN0cmluZyBjYXRhbG9nRmlsZSA9ICIvZGF0YS9yZXBvcnQtY2F0YWxvZ19wdWJsaWMueG1sIjsKLQkJY2F0YWxvZ0ZpbGUgPSBUZXN0UGx1Z2luLnJlc29sdmVQbHVnaW5Mb2NhdGlvbihjYXRhbG9nRmlsZSk7Ci0JCQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLSIgKyB0aGlzLmdldE5hbWUoKSArICItLS0tLS0tLS0iKTsKLQkJdmFsaWRhdG9yLnZhbGlkYXRlV2l0aFNjaGVtYV9YZXJjZXNET01QYXJzZXIoeG1sRmlsZSwgbmV3IFN0cmluZ1tde2NhdGFsb2dGaWxlfSk7Ci0JCS8vIEluY2x1ZGVkIHNjaGVtYSB3aWxsIG5vdCBiZSByZXNvbHZlZAotCQlhc3NlcnRUcnVlKHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGlvbldpdGhJbXBvcnRlZEFuZEluY2x1ZGVkU2NoZW1hMygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyB4bWxGaWxlID0gIi9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnRfLnhtbCI7Ci0JCXhtbEZpbGUgPSBUZXN0UGx1Z2luLnJlc29sdmVQbHVnaW5Mb2NhdGlvbih4bWxGaWxlKTsKLQkJCi0JCVN0cmluZyBjYXRhbG9nRmlsZSA9ICIvZGF0YS9yZXBvcnQtY2F0YWxvZ19tYXBwZWRpbmNsdWRlZC54bWwiOwotCQljYXRhbG9nRmlsZSA9IFRlc3RQbHVnaW4ucmVzb2x2ZVBsdWdpbkxvY2F0aW9uKGNhdGFsb2dGaWxlKTsKLQkJCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tIiArIHRoaXMuZ2V0TmFtZSgpICsgIi0tLS0tLS0tLSIpOwotCQl2YWxpZGF0b3IudmFsaWRhdGVXaXRoU2NoZW1hX1hlcmNlc0RPTVBhcnNlcih4bWxGaWxlLCBuZXcgU3RyaW5nW117Y2F0YWxvZ0ZpbGV9KTsKLQkJLy8gSW5jbHVkZWQgc2NoZW1hIHdpbGwgbm90IGJlIHJlc29sdmVkCi0JCWFzc2VydFRydWUodmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0aW9uV2l0aEltcG9ydGVkU2NoZW1hTm9DYXRhbG9nKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHhtbEZpbGUgPSAiL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL3JlcG9ydC54bWwiOwotCQl4bWxGaWxlID0gVGVzdFBsdWdpbi5yZXNvbHZlUGx1Z2luTG9jYXRpb24oeG1sRmlsZSk7Ci0JCQotCQlTdHJpbmcgY2F0YWxvZ0ZpbGUgPSAiIjsKLQkJCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tIiArIHRoaXMuZ2V0TmFtZSgpICsgIi0tLS0tLS0tLSIpOwotCQl2YWxpZGF0b3IudmFsaWRhdGVXaXRoU2NoZW1hX1hlcmNlc0RPTVBhcnNlcih4bWxGaWxlLCBuZXcgU3RyaW5nW117Y2F0YWxvZ0ZpbGV9KTsKLQkJYXNzZXJ0RmFsc2UodmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvcik7Ci0JfQotCQotCi0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGIzODRjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJydW4iIGJhc2VkaXI9Ii4iPgotCi0gIDwhLS0gQ29uZmlndXJhYmxlIFByb3BlcnRpZXMgLS0+Ci0KLSAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIGVjbGlwc2UtaG9tZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzIi8+Ci0KLSAgPCEtLSBFbmQgQ29uZmlndXJhYmxlIFByb3BlcnRpZXMgLS0+Ci0KLSAgPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KLSAgPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiR7YmFzZWRpcn1cLi5cLi4iLz4KLSAgPHByb3BlcnR5IG5hbWU9ImJ2dHdvcmtzcGFjZSIgdmFsdWU9IiR7YmFzZWRpcn0iLz4KLSAgPHByb3BlcnR5IG5hbWU9ImxpYnJhcnktZmlsZSIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiLz4KLSAgPHByb3BlcnR5IG5hbWU9IndvcmtzcGFjZS1mb2xkZXIiIHZhbHVlPSIke2J2dHdvcmtzcGFjZX0vJHtwbHVnaW4tbmFtZX0iLz4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgIDx0c3RhbXAvPgotICAgICA8ZGVsZXRlPgotICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLioueG1sIi8+Ci0gICAgPC9kZWxldGU+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCi0gICAgPCEtLSBTdGFydCB3aXRoIGNsZWFuIGRhdGEgd29ya3NwYWNlIC0tPiAgCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlLWZvbGRlcn0iIHF1aWV0PSJ0cnVlIi8+Ci0KLSAgICA8YW50IHRhcmdldD0iY29yZS10ZXN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlLWZvbGRlcn0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLmludGVybmFsLkFsbFRlc3RzIi8+Ci0gICAgPC9hbnQ+Ci0KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZS1mb2xkZXJ9IiBxdWlldD0idHJ1ZSIvPgotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzKi54bWwiLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUxYzhmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNGVhNWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotc3NlbW9kZWx4bWx0ZXN0cy5qYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODlmZmJhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz48L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3MDhmYTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLSNXZWQgSmFuIDEyIDE2OjQ5OjIwIEVTVCAyMDA1Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWFib3J0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGxldGVDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzA5ZjQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI0ZyaSBNYXkgMjcgMjM6NDE6MzggRURUIDIwMDUKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ3NTRjOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiBTU0UgTW9kZWwgWE1MIFRlc3RzCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHM7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4wCi1CdW5kbGUtQ2xhc3NQYXRoOiBzc2Vtb2RlbHhtbHRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLlNTRU1vZGVsWE1MVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50LAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb20sCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLm1vZGVsLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy50ZXh0LAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy50ZXh0LnRlc3RmaWxlcy54bWwsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAotIG9yZy5qdW5pdCwKLSBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLnVpLmlkZSwKLSBvcmcuZWNsaXBzZS50ZXh0LAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyCi1FY2xpcHNlLUF1dG9TdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY2Yjk2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotPGJvZHkgbGFuZz0iRU4tVVMiPgotPGgyPkFib3V0IFRoaXMgQ29udGVudDwvaDI+Ci0gCi08cD5GZWJydWFyeSAyNCwgMjAwNTwvcD4JCi08aDM+TGljZW5zZTwvaDM+Ci0KLTxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAoJnF1b3Q7Q29udGVudCZxdW90OykuICBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKLUVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+Ci0KLTxwPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIENvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgmcXVvdDtSZWRpc3RyaWJ1dG9yJnF1b3Q7KSBhbmQgZGlmZmVyZW50IHRlcm1zIGFuZCBjb25kaXRpb25zIG1heQotYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAgQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3IncyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuICBJZiBubyBzdWNoIGxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiAgVW5sZXNzIG90aGVyd2lzZQotaW5kaWNhdGVkIGJlbG93LCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQuPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFlOTI2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1zb3VyY2Uuc3NlbW9kZWx4bWx0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuc3NlbW9kZWx4bWx0ZXN0cy5qYXIgPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHNzZW1vZGVseG1sdGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3RmaWxlcy56aXAsXAotICAgICAgICAgICAgICAgcHJvamVjdHRlc3RmaWxlcy8sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLXNyYy5pbmNsdWRlcyA9IGJ1aWxkLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzZjFhOGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPHBsdWdpbj4KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudFR5cGVzIj4KLQkJPCEtLSBhc3NvY2lhdGUgLmZyYWd4IGZpbGVzIHdpdGggdGhlIFhNTCBjb250ZW50IHR5cGUgLS0+Ci0JCTxmaWxlLWFzc29jaWF0aW9uCi0JCQljb250ZW50LXR5cGU9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWwiCi0JCQlmaWxlLWV4dGVuc2lvbnM9ImZyYWd4IiAvPgotCTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbgotCQlpZD0iVGVzdCIKLQkJcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hcHBsaWNhdGlvbnMiPgotCQk8YXBwbGljYXRpb24+Ci0JCQk8cnVuCi0JCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5jb250ZW50bW9kZWwuQ01WaXNpdG9yVGVzdCIgLz4KLQkJPC9hcHBsaWNhdGlvbj4KLQk8L2V4dGVuc2lvbj4KLQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcHJvamVjdHRlc3RmaWxlcy94bWwtZG9jdW1lbnQtbG9hZGVyLXRlc3RzLnppcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL3htbC1kb2N1bWVudC1sb2FkZXItdGVzdHMuemlwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODNhZDZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL3htbC1kb2N1bWVudC1sb2FkZXItdGVzdHMuemlwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9Mb2dnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk5ZGY1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9Mb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi0vKioKLSAqIFNtYWxsIGNvbnZlbmllbmNlIGNsYXNzIHRvIGxvZyBtZXNzYWdlcyB0byBwbHVnaW4ncyBsb2cgZmlsZSBhbmQgYWxzbywgaWYgZGVzaXJlZCwKLSAqIHRoZSBjb25zb2xlLiBUaGlzIGNsYXNzIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgY2xhc3NlcyBpbiB0aGlzIHBsdWdpbi4gT3RoZXIKLSAqIHBsdWdpbnMgc2hvdWxkIG1ha2UgdGhlaXIgb3duIGNvcHksIHdpdGggYXBwcm9wcmlhdGUgSUQuCi0gKi8KLXB1YmxpYyBjbGFzcyBMb2dnZXIgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUUkFDRUZJTFRFUl9MT0NBVElPTiA9ICIvZGVidWcvdHJhY2VmaWx0ZXIiOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPSyA9IElTdGF0dXMuT0s7IC8vIDAKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPID0gSVN0YXR1cy5JTkZPOyAvLyAxCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0FSTklORyA9IElTdGF0dXMuV0FSTklORzsgLy8gMgotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SID0gSVN0YXR1cy5FUlJPUjsgLy8gNAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0tfREVCVUcgPSAyMDAgKyBPSzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPX0RFQlVHID0gMjAwICsgSU5GTzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HX0RFQlVHID0gMjAwICsgV0FSTklORzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9ERUJVRyA9IDIwMCArIEVSUk9SOwotCi0JLyoqCi0JICogQWRkcyBtZXNzYWdlIHRvIGxvZy4KLQkgKiBAcGFyYW0gbGV2ZWwgc2V2ZXJpdHkgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UgKE9LLCBJTkZPLCBXQVJOSU5HLCBFUlJPUiwgT0tfREVCVUcsIElORk9fREVCVUcsIFdBUk5JTkdfREVCVUcsIEVSUk9SX0RFQlVHKQotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gYWRkIHRvIHRoZSBsb2cKLQkgKiBAcGFyYW0gZXhjZXB0aW9uIGV4Y2VwdGlvbiB0aHJvd24KLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX2xvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChsZXZlbCA9PSBPS19ERUJVRyB8fCBsZXZlbCA9PSBJTkZPX0RFQlVHIHx8IGxldmVsID09IFdBUk5JTkdfREVCVUcgfHwgbGV2ZWwgPT0gRVJST1JfREVCVUcpIHsKLQkJCWlmICghaXNEZWJ1Z2dpbmcoKSkKLQkJCQlyZXR1cm47Ci0JCX0KLQotCQlpbnQgc2V2ZXJpdHkgPSBJU3RhdHVzLk9LOwotCQlzd2l0Y2ggKGxldmVsKSB7Ci0JCQljYXNlIElORk9fREVCVUcgOgotCQkJY2FzZSBJTkZPIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuSU5GTzsKLQkJCQlicmVhazsKLQkJCWNhc2UgV0FSTklOR19ERUJVRyA6Ci0JCQljYXNlIFdBUk5JTkcgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5XQVJOSU5HOwotCQkJCWJyZWFrOwotCQkJY2FzZSBFUlJPUl9ERUJVRyA6Ci0JCQljYXNlIEVSUk9SIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuRVJST1I7Ci0JCX0KLQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhzZXZlcml0eSwgUExVR0lOX0lELCBzZXZlcml0eSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJUGxhdGZvcm0uZ2V0TG9nKGJ1bmRsZSkubG9nKHN0YXR1c09iaik7Ci0KLQl9Ci0KLQkvKioKLQkgKiBQcmludHMgbWVzc2FnZSB0byBsb2cgaWYgY2F0ZWdvcnkgbWF0Y2hlcyAvZGVidWcvdHJhY2VmaWx0ZXIgb3B0aW9uLgotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gcHJpbnQKLQkgKiBAcGFyYW0gY2F0ZWdvcnkgY2F0ZWdvcnkgb2YgdGhlIG1lc3NhZ2UsIHRvIGJlIGNvbXBhcmVkIHdpdGggL2RlYnVnL3RyYWNlZmlsdGVyCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF90cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChpc1RyYWNpbmcoY2F0ZWdvcnkpKSB7Ci0JCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBQTFVHSU5fSUQsIElTdGF0dXMuT0ssIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCi0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHBsYXRmb3JtIGlzIGRlYnVnZ2luZwotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0RlYnVnZ2luZygpIHsKLQkJcmV0dXJuIFBsYXRmb3JtLmluRGVidWdNb2RlKCk7Ci0JfQotCi0JLyoqCi0JICogRGV0ZXJtaW5lcyBpZiBjdXJyZW50bHkgdHJhY2luZyBhIGNhdGVnb3J5Ci0JICogQHBhcmFtIGNhdGVnb3J5Ci0JICogQHJldHVybiB0cnVlIGlmIHRyYWNpbmcgY2F0ZWdvcnksIGZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1RyYWNpbmcoU3RyaW5nIGNhdGVnb3J5KSB7Ci0JCWlmICghaXNEZWJ1Z2dpbmcoKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlTdHJpbmcgdHJhY2VGaWx0ZXIgPSBQbGF0Zm9ybS5nZXREZWJ1Z09wdGlvbihQTFVHSU5fSUQgKyBUUkFDRUZJTFRFUl9MT0NBVElPTik7Ci0JCWlmICh0cmFjZUZpbHRlciAhPSBudWxsKSB7Ci0JCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcih0cmFjZUZpbHRlciwgIiwiKTsgLy8kTk9OLU5MUy0xJAotCQkJd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQlTdHJpbmcgY2F0ID0gdG9rZW5pemVyLm5leHRUb2tlbigpLnRyaW0oKTsKLQkJCQlpZiAoY2F0ZWdvcnkuZXF1YWxzKGNhdCkpIHsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSkgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIG51bGwpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9TU0VNb2RlbFhNTFRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvU1NFTW9kZWxYTUxUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDViYTJkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9TU0VNb2RlbFhNTFRlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmNvbnRlbnRtb2RlbC5UZXN0Q2F0YWxvZ1JldHJpdmFsQW5kTW9kZWxDcmVhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9jdW1lbnQuR2V0RG9jdW1lbnRSZWdpb25zVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9jdW1lbnQuVGVzdFN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9jdW1lbnQuVGVzdFhNTERvY3VtZW50TG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb2N1bWVudC5UcmFuc2l0aW9uVGVzdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvbS5OYW1lVmFsaWRhdG9yVGVzdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLm1vZGVsLlRlc3RNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLm1vZGVsLlRlc3RNb2RlbHNGcm9tRmlsZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLm1vZGVsLlRlc3RTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLm1vZGVsLlRlc3RYTUxNb2RlbExvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudGV4dC5UZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVyWE1MOwotCi0KLQotcHVibGljIGNsYXNzIFNTRU1vZGVsWE1MVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgU1NFTW9kZWxYTUxUZXN0U3VpdGUoKTsKLQl9Ci0KLQlwdWJsaWMgU1NFTW9kZWxYTUxUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJUZXN0IFN1aXRlIGZvciBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMiKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RNb2RlbHNGcm9tRmlsZXMuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RYTUxNb2RlbExvYWRlci5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFhNTERvY3VtZW50TG9hZGVyLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0U3RydWN0dXJlZERvY3VtZW50LmNsYXNzKSk7Ci0JCQotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdE1vZGVsTWFuYWdlci5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFN0cnVjdHVyZWRNb2RlbC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lclhNTC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoTmFtZVZhbGlkYXRvclRlc3RzLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUcmFuc2l0aW9uVGVzdHMuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFhNTENvcmVQcmVmZXJlbmNlc1Rlc3QuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RDYXRhbG9nUmV0cml2YWxBbmRNb2RlbENyZWF0aW9uLmNsYXNzKSk7Ci0JCQotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoR2V0RG9jdW1lbnRSZWdpb25zVGVzdC5jbGFzcykpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9TU0VNb2RlbFhNTFRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9TU0VNb2RlbFhNTFRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0NjY1YmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvU1NFTW9kZWxYTUxUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBTU0VNb2RlbFhNTFRlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgU1NFTW9kZWxYTUxUZXN0c1BsdWdpbiBwbHVnaW47Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFNTRU1vZGVsWE1MVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU1NFTW9kZWxYTUxUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICogb3IgJ2tleScgaWYgbm90IGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJcmV0dXJuIGtleTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICovCi0JcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFVSTCBnZXRJbnN0YWxsTG9jYXRpb24oKSB7Ci0JCVVSTCBpbnN0YWxsTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cyIpLmdldEVudHJ5KCIvIik7Ci0JCVVSTCByZXNvbHZlZExvY2F0aW9uID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlc29sdmVkTG9jYXRpb24gPSBQbGF0Zm9ybS5yZXNvbHZlKGluc3RhbGxMb2NhdGlvbik7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGltcG9zc2libGUKLQkJCXRocm93IG5ldyBFcnJvcihlKTsKLQkJfQotCQlyZXR1cm4gcmVzb2x2ZWRMb2NhdGlvbjsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIEZpbGUgZ2V0VGVzdEZpbGUoU3RyaW5nIGZpbGVwYXRoKSB7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIGZpbGVwYXRoOwotCQlGaWxlIHJlc3VsdCA9IG5ldyBGaWxlKGxvY2F0aW9uKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvWE1MQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvWE1MQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNWQ5OTI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL1hNTENvcmVQcmVmZXJlbmNlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuRGVmYXVsdFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JRWNsaXBzZVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JbnN0YW5jZVNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5YTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YTUxDb3JlUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjsKLQotLyoqCi0gKiBUaGUgcHVycG9zZSBvZiB0aGlzIHRlc3QgaXMgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBvZiB0aGUgWE1MIFNvdXJjZQotICogZWRpdG9yIHByZWZlcmVuY2VzLiBUZXN0cyBpbmNsdWRlIHNldHRpbmcvZ2V0dGluZyBwcmVmZXJlbmNlcy4KLSAqIAotICogTk9URTogVGhpcyB0ZXN0IHNob3VsZCBiZSBwcmVmb3JtZWQgb24gYSBjbGVhbiB3b3Jrc3BhY2UuIElmIHBlcmZvcm1lZCBvbgotICogYW4gZXhpc3Rpbmcgd29ya3NwYWNlLCB0aGlzIHRlc3Qgd2lsbCBtYW5pcHVsYXRlIHByZWZlcmVuY2VzIGluIHRoZQotICogd29ya3NwYWNlLCB0aG91Z2ggYXR0ZW1wdHMgd2lsbCBiZSBtYWRlIHRvIHJlc3RvcmUgb3JpZ2luYWwgdmFsdWVzIGFmdGVyCi0gKiB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgWE1MQ29yZVByZWZlcmVuY2VzVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiBUZXN0cyBleGlzdGFuY2Ugb2YgcHJlZmVyZW5jZSB2YWx1ZXMgd2hlbiBnZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzCi0JICogdGhyb3VnaCBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdW5kbGVHZXRQcmVmZXJlbmNlcygpIHsKLQkJZmluYWwgU3RyaW5nIGJ1bmRsZU5hbWUgPSAib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlIjsKLQotCQkvLyBuZWVkIHRvIHN0YXJ0IHVwIGJ1bmRsZSBmb3IgZGVmYXVsdCB2YWx1ZXMgdG8gYmUgbG9hZGVkCi0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoYnVuZGxlTmFtZSk7Ci0JCXRyeSB7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpCi0JCQkJYnVuZGxlLnN0YXJ0KCk7Ci0JCQllbHNlCi0JCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2UgY291bGQgbm90IGZpbmQgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSk7Ci0JCX0gY2F0Y2ggKEJ1bmRsZUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBvZiBleGNlcHRpb24gc3RhcnRpbmcgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSArICIgZXhjZXB0aW9uOiAiICsgZSk7Ci0JCX0KLQotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIFhNTENvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fU0laRSk7Ci0JCWJ1bmRsZUdldFByZWZlcmVuY2UoYnVuZGxlTmFtZSwgWE1MQ29yZVByZWZlcmVuY2VOYW1lcy5MSU5FX1dJRFRIKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVuZGxlR2V0UHJlZmVyZW5jZShTdHJpbmcgYnVuZGxlTmFtZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJaW50IGRlZmF1bHRWYWx1ZSA9IC0xOwotCi0JCWludCB2YWx1ZSA9IFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpLmdldEludChidW5kbGVOYW1lLCBwcmVmS2V5LCBkZWZhdWx0VmFsdWUsIG51bGwpOwotCQlhc3NlcnRUcnVlKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlLiBLZXk6ICIgKyBwcmVmS2V5LCBkZWZhdWx0VmFsdWUgIT0gdmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGRlZmF1bHQgdmFsdWVzIG9mIHByZWZlcmVuY2VzLgotCSAqIAotCSAqIE5PVEU6IEV4cGVjdGVkIGRlZmF1bHQgdmFsdWVzIGFyZSBoYXJkLWNvZGVkLCBzbyBpZiBkZWZhdWx0IHZhbHVlcyBkbwotCSAqIGdldCBjaGFuZ2VkLCBhc3NlcnRpb25zIG5lZWQgdG8gYmUgdXBkYXRlZCBhcyB3ZWxsCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlcygpIHsKLQkJSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlID0gbmV3IERlZmF1bHRTY29wZSgpLmdldE5vZGUoWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCkpOwotCi0JCXBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKG5vZGUsIFhNTENvcmVQcmVmZXJlbmNlTmFtZXMuU1BMSVRfTVVMVElfQVRUUlMsIEJvb2xlYW4udG9TdHJpbmcoZmFsc2UpKTsKLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uobm9kZSwgWE1MQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9DSEFSLCBYTUxDb3JlUHJlZmVyZW5jZU5hbWVzLlRBQik7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKElFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSwgU3RyaW5nIHByZWZLZXksIFN0cmluZyBleHBlY3RlZCkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gTG9uZy50b1N0cmluZyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7IC8vIHJhbmRvbQotCQkvLyBzdHJpbmcKLQkJCi0JCVN0cmluZyB0aGVEZWZhdWx0VmFsdWUgPSBub2RlLmdldChwcmVmS2V5LCBkZWZhdWx0VmFsdWUpOwotCQlhc3NlcnRFcXVhbHMoIkdldCBkZWZhdWx0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXksIGV4cGVjdGVkLCB0aGVEZWZhdWx0VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMgYnkgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlIHRvIGJlIGEKLQkgKiBjZXJ0YWluIHZhbHVlLCB0aGVuIGdldHRpbmcgdGhlIHByZWZlcmVuY2UgdmFsdWUgdG8gdmVyaWZ5IGl0IHdhcyBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpblNldFByZWZlcmVuY2VzKCkgewotCQlJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUgPSBuZXcgSW5zdGFuY2VTY29wZSgpLmdldE5vZGUoWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCkpOwotCi0JCXBsdWdpblNldFByZWZlcmVuY2VCb29sZWFuKG5vZGUsIFhNTENvcmVQcmVmZXJlbmNlTmFtZXMuQ0xFQVJfQUxMX0JMQU5LX0xJTkVTKTsKLQkJcGx1Z2luU2V0UHJlZmVyZW5jZVN0cmluZyhub2RlLCBYTUxDb3JlUHJlZmVyZW5jZU5hbWVzLklOREVOVEFUSU9OX0NIQVIpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCWJvb2xlYW4gb3JpZ2luYWxWYWx1ZSA9IGZhbHNlOwotCQlib29sZWFuIGV4cGVjdGVkVmFsdWUgPSB0cnVlOwotCQkKLQkJU3RyaW5nIG9yaWdpbmFsU3RyaW5nID0gbm9kZS5nZXQocHJlZktleSwgImJvZ3VzIik7Ci0JCWlmICghImJvZ3VzIi5lcXVhbHMob3JpZ2luYWxTdHJpbmcpKSB7Ci0JCQlvcmlnaW5hbFZhbHVlID0gQm9vbGVhbi52YWx1ZU9mKG9yaWdpbmFsU3RyaW5nKS5ib29sZWFuVmFsdWUoKTsKLQkJCWV4cGVjdGVkVmFsdWUgPSAhb3JpZ2luYWxWYWx1ZTsKLQkJfQotCQlub2RlLnB1dEJvb2xlYW4ocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCWJvb2xlYW4gZm91bmRWYWx1ZSA9IG5vZGUuZ2V0Qm9vbGVhbihwcmVmS2V5LCB0cnVlKTsKLQkJYXNzZXJ0RXF1YWxzKCJTZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiICsgcHJlZktleSArICIgIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIgZm91bmQ6ICIgKyBmb3VuZFZhbHVlLCBleHBlY3RlZFZhbHVlLCBmb3VuZFZhbHVlKTsKLQkJCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCWlmICgiYm9ndXMiLmVxdWFscyhvcmlnaW5hbFN0cmluZykpCi0JCQlub2RlLnJlbW92ZShwcmVmS2V5KTsKLQkJZWxzZQotCQkJbm9kZS5wdXQocHJlZktleSwgb3JpZ2luYWxTdHJpbmcpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlU3RyaW5nKElFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJU3RyaW5nIG9yaWdpbmFsVmFsdWUgPSBub2RlLmdldChwcmVmS2V5LCAiYm9ndXMiKTsKLQkJU3RyaW5nIGV4cGVjdGVkVmFsdWUgPSBMb25nLnRvU3RyaW5nKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsgLy8gcmFuZG9tCi0JCQkJCQkJCQkJCQkJCQkJCQkJLy8gc3RyaW5nCi0JCW5vZGUucHV0KHByZWZLZXksIGV4cGVjdGVkVmFsdWUpOwotCQlTdHJpbmcgZm91bmRWYWx1ZSA9IG5vZGUuZ2V0KHByZWZLZXksICIiKTsKLQkJYXNzZXJ0RXF1YWxzKCJTZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiICsgcHJlZktleSArICIgIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIgZm91bmQ6ICIgKyBmb3VuZFZhbHVlLCBleHBlY3RlZFZhbHVlLCBmb3VuZFZhbHVlKTsKLQotCQkvLyBhdHRlbXB0IHRvIHJlc3RvcmUgb3JpZ2luYWwgcHJlZmVyZW5jZSB2YWx1ZQotCQlpZiAoImJvZ3VzIi5lcXVhbHMob3JpZ2luYWxWYWx1ZSkpCi0JCQlub2RlLnJlbW92ZShwcmVmS2V5KTsKLQkJZWxzZQotCQkJbm9kZS5wdXQocHJlZktleSwgb3JpZ2luYWxWYWx1ZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL0NNUHJpbnRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL0NNUHJpbnRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmE1MjEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVByaW50ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5jb250ZW50bW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5Mb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUFueUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUF0dHJpYnV0ZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Db250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01EYXRhVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRW50aXR5RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5vZGVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5DTVZpc2l0b3I7Ci0KLQotcHVibGljIGNsYXNzIENNUHJpbnRlciBleHRlbmRzIENNVmlzaXRvcgotewotICBwcm90ZWN0ZWQgU3RyaW5nQnVmZmVyIGZTdHJpbmdCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gIHByb3RlY3RlZCBWZWN0b3IgdmlzaXRlZEVsZW1lbnRzID0gbmV3IFZlY3RvcigpOyAKLSAgICAKLSAgLyoqKioqKiAgIGZvcm1hdHRpbmcgICAgKioqKioqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGluZGVudCA9ICIiOyAvLyROT04tTkxTLTEkCi0KLSAgcHJvdGVjdGVkIHZvaWQgaW5jcmVtZW50SW5kZW50KCkKLSAgewotICAgIGluZGVudCA9IGluZGVudCArICIgICI7IC8vJE5PTi1OTFMtMSQKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGRlY3JlbWVudEluZGVudCgpCi0gIHsKLSAgICBpbmRlbnQgPSBpbmRlbnQuc3Vic3RyaW5nKDAsIGluZGVudC5sZW5ndGgoKS0yKTsKLSAgfQotCi0KLSAgcHVibGljIHZvaWQgcHJpbnRDTU5vZGUoU3RyaW5nIGZpbGVuYW1lLCBDTU5vZGUgY21ub2RlKQotICB7Ci0gICAgdmlzaXRDTU5vZGUoY21ub2RlKTsKLSAgICB0cnkgCi0gICAgewotICAgICAgRmlsZU91dHB1dFN0cmVhbSBmaWxlU3RyZWFtID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZW5hbWUpOwotICAgICAgT3V0cHV0U3RyZWFtV3JpdGVyIHdyaXRlciA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoZmlsZVN0cmVhbSk7Ci0gICAgICB3cml0ZXIud3JpdGUoZlN0cmluZ0J1ZmZlci50b1N0cmluZygpKTsKLSAgICAgIHdyaXRlci5mbHVzaCgpOwotICAgICAgZmlsZVN0cmVhbS5jbG9zZSgpOwotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgIAlMb2dnZXIubG9nRXhjZXB0aW9uKCJQTVByaW50ZXIgRGVidWc6ICIsIGUpOwotICAgIH0gIAotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRDTUFueUVsZW1lbnQoQ01BbnlFbGVtZW50IGFueUVsZW1lbnQpCi0gIHsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPENNQW55RWxlbWVudCIpOyAvLyROT04tTkxTLTEkCi0gICAgcHJpbnRBdHRyaWJ1dGVzKGZTdHJpbmdCdWZmZXIsIGFueUVsZW1lbnQpOwotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKCI+L24iKTsgLy8kTk9OLU5MUy0xJAotICAgIGluY3JlbWVudEluZGVudCgpOwotICAgIHByaW50UHJvcGVydGllcyhmU3RyaW5nQnVmZmVyLCBhbnlFbGVtZW50KTsKLSAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPC9DTUFueUVsZW1lbnQ+L24iKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRDTUF0dHJpYnV0ZURlY2xhcmF0aW9uKENNQXR0cmlidXRlRGVjbGFyYXRpb24gYWQpCi0gIHsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPENNQXR0cmlidXRlRGVjbGFyYXRpb24iKTsgLy8kTk9OLU5MUy0xJAotICAgIHByaW50QXR0cmlidXRlcyhmU3RyaW5nQnVmZmVyLCBhZCk7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoIj5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0gICAgcHJpbnRQcm9wZXJ0aWVzKGZTdHJpbmdCdWZmZXIsIGFkKTsKLSAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICB2aXNpdENNTm9kZShhZC5nZXRBdHRyVHlwZSgpKTsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPC9DTUF0dHJpYnV0ZURlY2xhcmF0aW9uPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0Q01EYXRhVHlwZShDTURhdGFUeXBlIGRhdGFUeXBlKQotICB7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoaW5kZW50ICsgIjxDTURhdGFUeXBlIik7IC8vJE5PTi1OTFMtMSQKLSAgICBwcmludEF0dHJpYnV0ZXMoZlN0cmluZ0J1ZmZlciwgZGF0YVR5cGUpOwotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKCI+XG4iKTsgLy8kTk9OLU5MUy0xJAotICAgIGluY3JlbWVudEluZGVudCgpOwotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKGluZGVudCArICI8SW1wbGllZFZhbHVlIGtpbmQ9XCIiICsgZGF0YVR5cGUuZ2V0SW1wbGllZFZhbHVlS2luZCgpICsgIlwiPiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChkYXRhVHlwZS5nZXRJbXBsaWVkVmFsdWUoKSArICI8L0ltcGxpZWRWYWx1ZT5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgcHJpbnRFbnVtZXJhdGlvbihmU3RyaW5nQnVmZmVyLCBkYXRhVHlwZS5nZXRFbnVtZXJhdGVkVmFsdWVzKCkpOwotICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKGluZGVudCArICI8L0NNRGF0YVR5cGU+XG4iKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRDTURvY3VtZW50KENNRG9jdW1lbnQgZG9jdW1lbnQpCi0gIHsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPENNRG9jdW1lbnQiKTsgLy8kTk9OLU5MUy0xJAotICAgIHByaW50QXR0cmlidXRlcyhmU3RyaW5nQnVmZmVyLCBkb2N1bWVudCk7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoIj5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0KLSAgICAvLyAgICBwcmludEVudGl0aWVzKHNiLCBkb2N1bWVudC5nZXRFbnRpdGllcygpKTsgCi0gICAgcHJpbnRQcm9wZXJ0aWVzKGZTdHJpbmdCdWZmZXIsIGRvY3VtZW50KTsKLQotICAgIENNTmFtZWROb2RlTWFwIG1hcCA9IGRvY3VtZW50LmdldEVsZW1lbnRzKCk7Ci0gICAgaW50IHNpemUgPSBtYXAuZ2V0TGVuZ3RoKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgewotICAgICAgdmlzaXRDTU5vZGUobWFwLml0ZW0oaSkpOwotICAgIH0KLQotICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKGluZGVudCArICI8L0NNRG9jdW1lbnQ+XG4iKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRDTUdyb3VwKENNR3JvdXAgZ3JvdXApCi0gIHsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPENNR3JvdXAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHByaW50QXR0cmlidXRlcyhmU3RyaW5nQnVmZmVyLCBncm91cCk7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoIj5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0KLSAgICBDTU5vZGVMaXN0IG5vZGVMaXN0ID0gZ3JvdXAuZ2V0Q2hpbGROb2RlcygpOwotICAgIGludCBzaXplID0gbm9kZUxpc3QuZ2V0TGVuZ3RoKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgewotICAgICAgdmlzaXRDTU5vZGUobm9kZUxpc3QuaXRlbShpKSk7Ci0gICAgfQotCi0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoaW5kZW50ICsgIjwvQ01Hcm91cD5cbiIpOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdENNRWxlbWVudERlY2xhcmF0aW9uKENNRWxlbWVudERlY2xhcmF0aW9uIGVkKQotICB7Ci0gICAgaWYgKCF2aXNpdGVkRWxlbWVudHMuY29udGFpbnMoZWQpKQotICAgIHsKLSAgICAgIHZpc2l0ZWRFbGVtZW50cy5hZGQoZWQpOwotICAgICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoaW5kZW50ICsgIjxDTUVsZW1lbnREZWNsYXJhdGlvbiIpOyAvLyROT04tTkxTLTEkCi0gICAgICBwcmludEF0dHJpYnV0ZXMoZlN0cmluZ0J1ZmZlciwgZWQpOwotICAgICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoIj5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIHByaW50UHJvcGVydGllcyhmU3RyaW5nQnVmZmVyLCBlZCk7Ci0KLSAgICAgIENNTmFtZWROb2RlTWFwIG5vZGVNYXAgPSBlZC5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgICBpbnQgc2l6ZSA9IG5vZGVNYXAuZ2V0TGVuZ3RoKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgIHsKLSAgICAgICAgdmlzaXRDTU5vZGUobm9kZU1hcC5pdGVtKGkpKTsKLSAgICAgIH0KLQotICAgICAgdmlzaXRDTU5vZGUoZWQuZ2V0Q29udGVudCgpKTsKLQotICAgICAgQ01EYXRhVHlwZSBkYXRhVHlwZSA9IGVkLmdldERhdGFUeXBlKCk7Ci0gICAgICBpZiAoZGF0YVR5cGUgIT0gbnVsbCkKLSAgICAgICAgdmlzaXRDTU5vZGUoZGF0YVR5cGUpOwotCi0gICAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKGluZGVudCArICI8L0NNRWxlbWVudERlY2xhcmF0aW9uPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLQotCi0gIHB1YmxpYyB2b2lkIHByaW50RW51bWVyYXRpb24oU3RyaW5nQnVmZmVyIHNiLCBTdHJpbmdbXSB2YWx1ZXMpCi0gIHsKLSAgICBpZiAoKHZhbHVlcyAhPSBudWxsKSAmJiAodmFsdWVzLmxlbmd0aCA+IDApKQotICAgIHsKLSAgICAgIHNiLmFwcGVuZChpbmRlbnQgKyAiPEVudW1lcmF0aW9uPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGluY3JlbWVudEluZGVudCgpOwotCi0gICAgICBmb3IgKGludCBpPTA7IGk8dmFsdWVzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBzYi5hcHBlbmQoaW5kZW50ICsgIjxWYWx1ZT4iICsgdmFsdWVzW2ldICsgIjwvVmFsdWVzPlxuIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgfQotCi0gICAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIHNiLmFwcGVuZChpbmRlbnQgKyAiPC9FbnVtZXJhdGlvbj5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLQotICBwdWJsaWMgdm9pZCBwcmludEF0dHJpYnV0ZXMoU3RyaW5nQnVmZmVyIHNiLCBDTU5vZGUgY21ub2RlKQotICB7Ci0gICAgaWYgKGNtbm9kZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHNiLmFwcGVuZCgiIG5vZGVOYW1lPVwiIiArIGNtbm9kZS5nZXROb2RlTmFtZSgpICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgc2IuYXBwZW5kKCIgbm9kZVR5cGU9XCIiICsgY21ub2RlLmdldE5vZGVUeXBlKCkgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0KLSAgICAgIGlmIChjbW5vZGUgaW5zdGFuY2VvZiBDTUNvbnRlbnQpCi0gICAgICB7Ci0gICAgICAgIHNiLmFwcGVuZCgiIG1pbk9jY3VyPVwiIiArICgoQ01Db250ZW50KWNtbm9kZSkuZ2V0TWluT2NjdXIoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgICAgc2IuYXBwZW5kKCIgbWF4T2NjdXI9XCIiICsgKChDTUNvbnRlbnQpY21ub2RlKS5nZXRNYXhPY2N1cigpICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgfQotICAgICAgaWYgKGNtbm9kZSBpbnN0YW5jZW9mIENNQW55RWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgc2IuYXBwZW5kKCIgbmFtZXNwYWNlVVJJPVwiIiArICgoQ01BbnlFbGVtZW50KWNtbm9kZSkuZ2V0TmFtZXNwYWNlVVJJKCkgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICB9Ci0gICAgICBpZiAoY21ub2RlIGluc3RhbmNlb2YgQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbikKLSAgICAgIHsKLSAgICAgICAgc2IuYXBwZW5kKCIgdWFzYWdlPVwiIiArICgoQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiljbW5vZGUpLmdldFVzYWdlKCkgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICAgIHNiLmFwcGVuZCgiIGRlZmF1bHRWYWx1ZT1cIiIgKyAoKENNQXR0cmlidXRlRGVjbGFyYXRpb24pY21ub2RlKS5nZXREZWZhdWx0VmFsdWUoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIH0KLSAgICAgIGlmIChjbW5vZGUgaW5zdGFuY2VvZiBDTURhdGFUeXBlKQotICAgICAgeyAKLSAgICAgICAgc2IuYXBwZW5kKCIgaW5zdGFuY2VWYWx1ZT1cIiIgKyAoKENNRGF0YVR5cGUpY21ub2RlKS5nZW5lcmF0ZUluc3RhbmNlVmFsdWUoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIH0KLSAgICAgIGlmIChjbW5vZGUgaW5zdGFuY2VvZiBDTUVudGl0eURlY2xhcmF0aW9uKQotICAgICAgewotICAgICAgICBTdHJpbmcgdmFsdWUgPSAoKENNRW50aXR5RGVjbGFyYXRpb24pY21ub2RlKS5nZXRWYWx1ZSgpOwotICAgICAgICBpZiAodmFsdWUuaW5kZXhPZigiXCIiKSA9PSAtMSkgc2IuYXBwZW5kKCIgdmFsdWU9XCIiICsgdmFsdWUgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLSAgICAgICAgZWxzZSBzYi5hcHBlbmQoIiB2YWx1ZT1cIiIgKyB2YWx1ZSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIH0KLSAgICAgIGlmIChjbW5vZGUgaW5zdGFuY2VvZiBDTUdyb3VwKQotICAgICAgewotICAgICAgICBzYi5hcHBlbmQoIiBvcGVyYXRvcj1cIiIgKyAoKENNR3JvdXApY21ub2RlKS5nZXRPcGVyYXRvcigpICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgfQotICAgICAgaWYgKGNtbm9kZSBpbnN0YW5jZW9mIENNRWxlbWVudERlY2xhcmF0aW9uKQotICAgICAgewotICAgICAgICBzYi5hcHBlbmQoIiBjb250ZW50VHlwZT1cIiIgKyAoKENNRWxlbWVudERlY2xhcmF0aW9uKWNtbm9kZSkuZ2V0Q29udGVudFR5cGUoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotCi0gIHB1YmxpYyB2b2lkIHByaW50RW50aXRpZXMoU3RyaW5nQnVmZmVyIHNiLCBDTU5hbWVkTm9kZU1hcCBlbnRpdGllcykKLSAgewotICAgIGlmICgoZW50aXRpZXMgIT0gbnVsbCkgJiYgKGVudGl0aWVzLmdldExlbmd0aCgpPjApKQotICAgIHsKLSAgICAgIHNiLmFwcGVuZChpbmRlbnQgKyAiPEVudGl0aWVzPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGluY3JlbWVudEluZGVudCgpOwotCi0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBlbnRpdGllcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIENNRW50aXR5RGVjbGFyYXRpb24gZW50aXR5ID0gKENNRW50aXR5RGVjbGFyYXRpb24paS5uZXh0KCk7Ci0gICAgICAgIHNiLmFwcGVuZChpbmRlbnQgKyAiPEVudGl0eSIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIHByaW50QXR0cmlidXRlcyhzYiwgZW50aXR5KTsKLSAgICAgICAgc2IuYXBwZW5kKCIvPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLQotICAgICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgICBzYi5hcHBlbmQoaW5kZW50ICsgIjwvRW50aXRpZXM+XG4iKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHByaW50UHJvcGVydGllcyhTdHJpbmdCdWZmZXIgc2IsIENNTm9kZSBjbW5vZGUpCi0gIHsKLSAgICBMaXN0IHByb3BlcnRpZXMgPSBnZXRQcm9wZXJ0aWVzKGNtbm9kZSk7Ci0gICAgc2IuYXBwZW5kKGluZGVudCArICI8UHJvcGVydGllcz5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0KLSAgICBmb3IgKGludCBpPTA7IGk8cHJvcGVydGllcy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICBTdHJpbmcgcHJvcGVydHkgPSAoU3RyaW5nKXByb3BlcnRpZXMuZ2V0KGkpOwotICAgICAgc2IuYXBwZW5kKGluZGVudCArICI8UHJvcGVydHkgbmFtZT1cIiIgKyBwcm9wZXJ0eSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQotICAgICAgaWYgKGNtbm9kZS5zdXBwb3J0cyhwcm9wZXJ0eSkpCi0gICAgICB7Ci0gICAgICAgIHNiLmFwcGVuZCgiIHN1cHBvcnRzPVwidHJ1ZVwiIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgc2IuYXBwZW5kKCIgc3VwcG9ydHM9XCJmYWxzZVwiIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICAgIE9iamVjdCB2YWx1ZSA9IGNtbm9kZS5nZXRQcm9wZXJ0eShwcm9wZXJ0eSk7Ci0gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpIHNiLmFwcGVuZCgiIHZhbHVlPVwiIiArIChTdHJpbmcpdmFsdWUgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJvb2xlYW4pIHNiLmFwcGVuZCgiIHZhbHVlPVwiIiArIHZhbHVlICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkgc2IuYXBwZW5kKCIgdmFsdWU9XCIiICsgdmFsdWUuZ2V0Q2xhc3MoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIGVsc2Ugc2IuYXBwZW5kKCIgdmFsdWU9XCJudWxsXCIiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgc2IuYXBwZW5kKCIvPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICBzYi5hcHBlbmQoaW5kZW50ICsgIjwvUHJvcGVydGllcz5cbiIpOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRQcm9wZXJ0aWVzKENNTm9kZSBjbW5vZGUpCi0gIHsKLSAgICBMaXN0IHByb3BlcnRpZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAKLSAgICBpZiAoY21ub2RlICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydGllcy5hZGQoIkNNRG9jdW1lbnQiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcHJvcGVydGllcy5hZGQoImRvY3VtZW50YXRpb24iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcHJvcGVydGllcy5hZGQoImh0dHA6Ly9vcmcuZWNsaXBzZS53c3QvY20vcHJvcGVydGllcy91c2VzTG9jYWxFbGVtZW50RGVjbGFyYXRpb25zIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHByb3BlcnRpZXMuYWRkKCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0L2NtL3Byb3BlcnRpZXMvaXNOYW1lU3BhY2VBd2FyZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICBwcm9wZXJ0aWVzLmFkZCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL25zUHJlZml4UXVhbGlmaWNhdGlvbiIpOyAvLyROT04tTkxTLTEkCi0gICAgICBwcm9wZXJ0aWVzLmFkZCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL25pbGxhYmxlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHByb3BlcnRpZXMuYWRkKCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0L2NtL3Byb3BlcnRpZXMvbW9mTm90aWZpZXIiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcHJvcGVydGllcy5hZGQoInNwZWMiKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgICBpZiAoY21ub2RlIGluc3RhbmNlb2YgQ01FbGVtZW50RGVjbGFyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnRpZXMuYWRkKCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0L2NtL3Byb3BlcnRpZXMvZGVmaW5pdGlvbkluZm8iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL2RlZmluaXRpb24iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiWFNJVHlwZXMiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiRGVyaXZlZEVsZW1lbnREZWNsYXJhdGlvbiIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIC8vIHByb3BlcnRpZXMuYWRkKCJTdWJzdGl0dXRpb25Hcm91cCIpOyBDdXJycmVudGx5IGJyb2tlbiBmb3IgbmV4dGVkIHhzZCBmaWxlcwotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiQWJzdHJhY3QiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgICAgaWYgKGNtbm9kZSBpbnN0YW5jZW9mIENNRG9jdW1lbnQpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnRpZXMuYWRkKCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0L2NtL3Byb3BlcnRpZXMvdGFyZ2V0TmFtZXNwYWNlVVJJIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgcHJvcGVydGllcy5hZGQoImh0dHA6Ly9vcmcuZWNsaXBzZS53c3QvY20vcHJvcGVydGllcy9pbXBvcnRlZE5hbWVzcGFjZUluZm8iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL25hbWVzcGFjZUluZm8iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL2VsZW1lbnRGb3JtRGVmYXVsdCIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIHByb3BlcnRpZXMuYWRkKCJhbm5vdGF0aW9uTWFwIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHByb3BlcnRpZXM7Ci0gIH0KLSAgCi19Ci0KLSAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVV0aWxpdHkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVV0aWxpdHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJiYTE2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvQ01VdGlsaXR5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuY29udGVudG1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC51dGlsLkNNVmlzaXRvcjsKLQotCi1wdWJsaWMgY2xhc3MgQ01VdGlsaXR5Ci17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIC8qKgotICAgKiByZXR1cm4gdHJ1ZSBpZiB0aGUgY2hpbGQgb3IgYW55IG9mIGl0cyBhbmNlc3RvciBncm91cCBub2RlcyBhcmUgcmVwZWF0YWJsZQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzTm9kZU9yQW5jZXN0b3JHcm91cFJlcGVhdGFibGUoQ01Db250ZW50IGNvbnRlbnQsIENNTm9kZSBjaGlsZCkKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAvLyBzaW5jZSB3ZSBjYW4ndCB3YWxrIHVwIHRoZSBDTU5vZGUgdHJlZSAod2h5IHlvdSBhc2s/IC4uLiBpdHMgYSBsb25nIHN0b3J5KQotICAgIC8vIHdlIHdhbGsgZG93biB0aGUgdHJlZSB0byBjb25zaWRlciB0aGUgY2hpbGQncyBwYXJlbnQgbm9kZSdzCi0gICAgLy8KLSAgICBib29sZWFuIHJlc3VsdCA9IGlzUmVwZWF0YWJsZShjaGlsZCk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgewotICAgICAgQ2FuUmVwZWF0VmlzaXRvciB2aXNpdG9yID0gbmV3IENhblJlcGVhdFZpc2l0b3IoY29udGVudCwgY2hpbGQpOwotICAgICAgdmlzaXRvci52aXNpdENNTm9kZShjb250ZW50KTsKLSAgICAgIHJlc3VsdCA9IHZpc2l0b3IuZ2V0UmVzdWx0KCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogcmV0dXJuIHRydWUgaWYgdGhlIGNoaWxkIGlzIHJlcGVhdGFibGUKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc05vZGVSZXBlYXRhYmxlKENNQ29udGVudCBjb250ZW50LCBDTU5vZGUgY2hpbGQpCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgLy8gc2luY2Ugd2UgY2FuJ3Qgd2FsayB1cCB0aGUgQ01Ob2RlIHRyZWUgKHdoeSB5b3UgYXNrPyAuLi4gaXRzIGEgbG9uZyBzdG9yeSkKLSAgICAvLyB3ZSB3YWxrIGRvd24gdGhlIHRyZWUgdG8gY29uc2lkZXIgdGhlIGNoaWxkJ3MgcGFyZW50IG5vZGUncwotICAgIC8vCi0gICAgYm9vbGVhbiByZXN1bHQgPSBpc1JlcGVhdGFibGUoY2hpbGQpOwotICAgIGlmICghcmVzdWx0KQotICAgIHsKLSAgICAgIElzUmVwZWF0YWJsZVZpc2l0b3IgdmlzaXRvciA9IG5ldyBJc1JlcGVhdGFibGVWaXNpdG9yKGNvbnRlbnQsIGNoaWxkKTsKLSAgICAgIHZpc2l0b3IudmlzaXRDTU5vZGUoY29udGVudCk7Ci0gICAgICByZXN1bHQgPSB2aXNpdG9yLmdldFJlc3VsdCgpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzUmVwZWF0YWJsZShDTU5vZGUgY2hpbGQpCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgQ01Db250ZW50KQotICAgIHsKLSAgICAgIENNQ29udGVudCBjb250ZW50ID0gKENNQ29udGVudCljaGlsZDsKLSAgICAgIHJlc3VsdCA9IGNvbnRlbnQuZ2V0TWF4T2NjdXIoKSA+IDEgfHwgY29udGVudC5nZXRNYXhPY2N1cigpID09IC0xOwotICAgIH0gCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAgIAotICAgCi0gIHByb3RlY3RlZCBzdGF0aWMgY2xhc3MgQ2FuUmVwZWF0VmlzaXRvciBleHRlbmRzIENNVmlzaXRvcgotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgcHVibGljIGJvb2xlYW4gcmVzdWx0OwotICAgIHByb3RlY3RlZCBib29sZWFuIGlzV2l0aGluUmVwZWF0YWJsZUdyb3VwOwotCi0gICAgcHJvdGVjdGVkIENNTm9kZSByb290OwotICAgIHByb3RlY3RlZCBDTU5vZGUgdGFyZ2V0OwotCi0gICAgcHVibGljIENhblJlcGVhdFZpc2l0b3IoQ01Ob2RlIHJvb3QsIENNTm9kZSB0YXJnZXQpCi0gICAgewotICAgICAgdGhpcy5yb290ID0gcm9vdDsKLSAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHZpc2l0Q01Hcm91cChDTUdyb3VwIGdyb3VwKQotICAgIHsgICAgICAgICAKLSAgICAgIGJvb2xlYW4gb2xkSXNXaXRoaW5SZXBlYXRhYmxlR3JvdXAgPSBpc1dpdGhpblJlcGVhdGFibGVHcm91cDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIGlzV2l0aGluUmVwZWF0YWJsZUdyb3VwID0gaXNSZXBlYXRhYmxlKGdyb3VwKTsKLSAgICAgIAotICAgICAgc3VwZXIudmlzaXRDTUdyb3VwKGdyb3VwKTsKLQotICAgICAgaXNXaXRoaW5SZXBlYXRhYmxlR3JvdXAgPSBvbGRJc1dpdGhpblJlcGVhdGFibGVHcm91cDsKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0KLSAgICBwdWJsaWMgdm9pZCB2aXNpdENNRWxlbWVudERlY2xhcmF0aW9uKENNRWxlbWVudERlY2xhcmF0aW9uIGNtZWxlbWVudCkKLSAgICB7Ci0gICAgICBpZiAoY21lbGVtZW50ID09IHRhcmdldCkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gaXNXaXRoaW5SZXBlYXRhYmxlR3JvdXA7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0UmVzdWx0KCkKLSAgICB7Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0gIAotICB9Ci0KLQotICBwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIElzUmVwZWF0YWJsZVZpc2l0b3IgZXh0ZW5kcyBDTVZpc2l0b3IKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIHB1YmxpYyBib29sZWFuIHJlc3VsdCA9IGZhbHNlOzsKLSAgICBwcm90ZWN0ZWQgQ01Hcm91cCBjdXJyZW50R3JvdXA7Ci0KLSAgICBwcm90ZWN0ZWQgQ01Ob2RlIHJvb3Q7Ci0gICAgcHJvdGVjdGVkIENNTm9kZSB0YXJnZXQ7Ci0KLSAgICBwdWJsaWMgSXNSZXBlYXRhYmxlVmlzaXRvcihDTU5vZGUgcm9vdCwgQ01Ob2RlIHRhcmdldCkKLSAgICB7Ci0gICAgICB0aGlzLnJvb3QgPSByb290OwotICAgICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdmlzaXRDTUdyb3VwKENNR3JvdXAgZ3JvdXApCi0gICAgeyAgICAgICAgIAotICAgICAgQ01Hcm91cCBwcmV2aW91c0dyb3VwID0gY3VycmVudEdyb3VwOwotICAgICAgY3VycmVudEdyb3VwID0gZ3JvdXA7Ci0gICAgICBzdXBlci52aXNpdENNR3JvdXAoZ3JvdXApOwotICAgICAgY3VycmVudEdyb3VwID0gcHJldmlvdXNHcm91cDsKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0KLSAgICBwdWJsaWMgdm9pZCB2aXNpdENNRWxlbWVudERlY2xhcmF0aW9uKENNRWxlbWVudERlY2xhcmF0aW9uIGNtZWxlbWVudCkKLSAgICB7Ci0gICAgICBpZiAoY21lbGVtZW50ID09IHRhcmdldCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGN1cnJlbnRHcm91cCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gKChjdXJyZW50R3JvdXAuZ2V0T3BlcmF0b3IoKSA9PSBDTUdyb3VwLkNIT0lDRSkgJiYKLSAgICAgICAgICAgICAgICAgICAgKGlzUmVwZWF0YWJsZShjdXJyZW50R3JvdXApKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBnZXRSZXN1bHQoKQotICAgIHsKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVZhbGlkYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVZhbGlkYXRvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNkNGQ2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvQ01WYWxpZGF0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuY29udGVudG1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01FbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNvbnRlbnRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5pbnRlcm5hbC51dGlsLkNNVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuaW50ZXJuYWwudXRpbC5DTVZhbGlkYXRvci5FbGVtZW50UGF0aFJlY29yZGluZ1Jlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLmludGVybmFsLnV0aWwuQ01WYWxpZGF0b3IuU3RyaW5nRWxlbWVudENvbnRlbnRDb21wYXJhdG9yOwotCi1wdWJsaWMgY2xhc3MgQ01WYWxpZGF0b3JUZXN0Ci17Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdbXSkKLSAgewotICAgIGlmIChhcmcubGVuZ3RoID4gMSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy9DTURvY3VtZW50RmFjdG9yeVJlZ2lzdHJ5LmdldEluc3RhbmNlKCkucmVnaXN0ZXJDTURvY3VtZW50QnVpbGRlcldpdGhDbGFzc05hbWUoIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9maW1wbC5DTURvY3VtZW50QnVpbGRlckltcGwiKTsKLQotICAgICAgICBTdHJpbmcgZ3JhbW1hckZpbGVOYW1lID0gYXJnWzBdOwotICAgICAgICBTdHJpbmcgZWxlbWVudE5hbWUgPSBhcmdbMV07Ci0KLSAgICAgICAgQ01Eb2N1bWVudCBjbURvY3VtZW50ID0gQ29udGVudE1vZGVsTWFuYWdlci5nZXRJbnN0YW5jZSgpLmNyZWF0ZUNNRG9jdW1lbnQoZ3JhbW1hckZpbGVOYW1lLCBudWxsKTsKLSAgICAgICAgCi0gICAgICAgIENNTmFtZWROb2RlTWFwIGVsZW1lbnRNYXAgPSBjbURvY3VtZW50LmdldEVsZW1lbnRzKCk7Ci0gICAgICAgIENNRWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQgPSAoQ01FbGVtZW50RGVjbGFyYXRpb24pZWxlbWVudE1hcC5nZXROYW1lZEl0ZW0oZWxlbWVudE5hbWUpOwotICAgICAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgICAgICB7IC8qCi0gICAgICAgICAgcHJpbnRsbigiZm91bmQgZWxlbWVudCBbIiArIGVsZW1lbnROYW1lICsgIl0gIGNvbnRlbnRUeXBlID0gIiArIGVsZW1lbnQuZ2V0Q29udGVudFR5cGUoKSk7Ci0gICAgICAgICAgR3JhcGhOb2RlIGdyYXBoTm9kZSA9IGNyZWF0ZUdyYXBoKGVsZW1lbnQpOwotICAgICAgICAgIHByaW50R3JhcGgoZ3JhcGhOb2RlKTsKLSAgICAgICAgICAqLwotICAgICAgICAgIHByaW50bG4oIi0tLS0tLS0tLS0tLS0tIGJlZ2luIHZhbGlkYXRlIC0tLS0tLS0tLS0tLS0tLSIpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgICAgICBTdHJpbmdFbGVtZW50Q29udGVudENvbXBhcmF0b3IgY29tcGFyYXRvciA9IG5ldyBTdHJpbmdFbGVtZW50Q29udGVudENvbXBhcmF0b3IoKTsKLSAgICAgICAgICBDTVZhbGlkYXRvciB2YWxpZGF0b3IgPSBuZXcgQ01WYWxpZGF0b3IoKTsKLSAgICAgICAgICBFbGVtZW50UGF0aFJlY29yZGluZ1Jlc3VsdCByZXN1bHQgPSBuZXcgRWxlbWVudFBhdGhSZWNvcmRpbmdSZXN1bHQoKTsKLSAgICAgICAgICB2YWxpZGF0b3IuZ2V0T3JpZ2luQXJyYXkoZWxlbWVudCwgQ01WYWxpZGF0b3IuY3JlYXRlU3RyaW5nTGlzdChhcmcsIDIpLCBjb21wYXJhdG9yLCByZXN1bHQpOwotICAgICAgICAgIGlmIChyZXN1bHQuaXNWYWxpZCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBDTU5vZGVbXSBub2RlTWFwcGluZyA9IHJlc3VsdC5nZXRPcmlnaW5BcnJheSgpOwotICAgICAgICAgICAgcHJpbnRsbigiVmFsaWRhdGlvbiBTdWNjZXNzISIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICBwcmludCgiICAiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlTWFwcGluZy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBub2RlTWFwcGluZ1tpXSAhPSBudWxsID8gbm9kZU1hcHBpbmdbaV0uZ2V0Tm9kZU5hbWUoKSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICBwcmludCgiWyIgKyBuYW1lICsgIl0iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludGxuKCIiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgcHJpbnRsbigiVmFsaWRhdGlvbiBGYWlsZWQhICIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICBpZiAocmVzdWx0LmVycm9yTWVzc2FnZSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBwcmludGxuKCIgICIgKyByZXN1bHQuZXJyb3JNZXNzYWdlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBwcmludGxuKCItLS0tLS0tLS0tLS0tLSBlbmQgdmFsaWRhdGUgLS0tLS0tLS0tLS0tLS0tIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBwcmludGxuKCJlbGVtZW50IFsiICsgZWxlbWVudE5hbWUgKyAiXSBjYW4gbm90IGJlIGZvdW5kIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHByaW50bG4oIkNNVmFsaWRhdG9yIGVycm9yIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHByaW50bG4oIjIgYXJncyByZXF1aXJlZC4uLiBvbmx5ICIgKyBhcmcubGVuZ3RoICsgIiBwcm92aWRlZCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIHByaW50bG4oInVzYWdlIGphdmEgb3JnLmVjbGlwc2Uud3N0Lm5ld3htbC51dGlsLlhNTFV0aWwgZ3JhbW1hckZpbGVOYW1lIHJvb3RFbGVtZW50TmFtZSBwYXR0ZXJuIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludChTdHJpbmcgc3RyaW5nKQotICB7ICAKLSAgfQotICAgIAotICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRsbihTdHJpbmcgc3RyaW5nKQotICB7ICAKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50bG5JbmRlbnRlZChpbnQgaW5kZW50LCBTdHJpbmcgc3RyaW5nKQotICB7Ci0gIH0gICAgCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvQ01WaXNpdG9yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL0NNVmlzaXRvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjYxODg2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvQ01WaXNpdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmNvbnRlbnRtb2RlbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBsYXRmb3JtUnVubmFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5tb2RlbHF1ZXJ5aW1wbC5Nb2RlbFF1ZXJ5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLm1vZGVscXVlcnlpbXBsLlhNTEFzc29jaWF0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC51dGlsLkNNRG9jdW1lbnRDYWNoZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi1wdWJsaWMgY2xhc3MgQ01WaXNpdG9yVGVzdCBpbXBsZW1lbnRzIElQbGF0Zm9ybVJ1bm5hYmxlCi17IAotICBwdWJsaWMgT2JqZWN0IHJ1bihPYmplY3QgYSkgCi0gIHsgICAgICAgICAgICAgCi0gICAgU3RyaW5nIGFyZ3NbXSA9IChTdHJpbmdbXSlhOwotICAgIGlmIChhcmdzLmxlbmd0aCA+IDApCi0gICAgewotICAgICAgdGVzdChhcmdzWzBdKTsgICAgICAKLSAgICB9ICAgICAgICAgICAgICAgICAgICAKLSAgICBlbHNlCi0gICAgewotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ4bWwgZmlsZSBuYW1lIGFyZ3VtZW50IHJlcXVpcmVkIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgICAgIAotICBwcm90ZWN0ZWQgdm9pZCB0ZXN0KFN0cmluZyBmaWxlTmFtZSkKLSAgeyAgICAgICAgICAgICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIENNRG9jdW1lbnRDYWNoZSBjYWNoZT1uZXcgQ01Eb2N1bWVudENhY2hlKCk7Ci0gICAgICBYTUxBc3NvY2lhdGlvblByb3ZpZGVyIHByb3ZpZGVyID0gbmV3IFhNTEFzc29jaWF0aW9uUHJvdmlkZXIoY2FjaGUpe307Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgTW9kZWxRdWVyeSBtcSA9IG5ldyBNb2RlbFF1ZXJ5SW1wbChwcm92aWRlcik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgCi0gICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihDTVZpc2l0b3JUZXN0LmNsYXNzLmdldENsYXNzTG9hZGVyKCkpOyAKLSAgICAgIERvY3VtZW50QnVpbGRlciBidWlsZGVyID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld0RvY3VtZW50QnVpbGRlcigpOwotICAgICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBidWlsZGVyLnBhcnNlKGZpbGVOYW1lKTsKLQotICAgICAgLyoKLSAgICAgIENsYXNzTG9hZGVyIHByZXZDbGFzc0xvYWRlciA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7Ci0gICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOyAKLSAgICAgIENsYXNzIHRoZUNsYXNzID0gQ2xhc3MuZm9yTmFtZSgib3JnLmFwYWNoZS54ZXJjZXMucGFyc2Vycy5ET01QYXJzZXIiKTsKLSAgICAgIERPTVBhcnNlciBwYXJzZXIgPSAoRE9NUGFyc2VyKXRoZUNsYXNzLm5ld0luc3RhbmNlKCk7Ci0gICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihwcmV2Q2xhc3NMb2FkZXIpOyAKLSAgICAgIHBhcnNlci5wYXJzZShuZXcgSW5wdXRTb3VyY2UoZmlsZU5hbWUpKTsgICAgICAgCi0gICAgICBEb2N1bWVudCBkb2N1bWVudCA9IHBhcnNlci5nZXREb2N1bWVudCgpOyAgICAgICAgCi0gICAgICAqLwotICAgICAgdmlzaXROb2RlKGRvY3VtZW50LCBtcSwgMCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7ICAgIAotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0Tm9kZShOb2RlIG5vZGUsIE1vZGVsUXVlcnkgbXEsIGludCBpbmRlbnQpCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgQ01Ob2RlIGNtbm9kZSA9IG1xLmdldENNTm9kZShub2RlKTsgICAgIAotICAgIHByaW50bG5JbmRlbnRlZChpbmRlbnQsICJub2RlIDoiICsgbm9kZS5nZXROb2RlTmFtZSgpICsgIiBjbW5vZGUgOiAiICsgKGNtbm9kZSAhPSBudWxsID8gY21ub2RlLmdldE5vZGVOYW1lKCkgOiAibnVsbCIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLSAgICBOYW1lZE5vZGVNYXAgbWFwID0gbm9kZS5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgaWYgKG1hcCAhPSBudWxsKQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIGluZGVudCArPSAyOwotICAgICAgaW50IG1hcExlbmd0aCA9IG1hcC5nZXRMZW5ndGgoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWFwTGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIHZpc2l0Tm9kZShtYXAuaXRlbShpKSwgbXEsIGluZGVudCk7Ci0gICAgICB9IAotICAgICAgaW5kZW50IC09IDI7Ci0gICAgfQotICAgIGluZGVudCArPSA0OwotICAgIE5vZGVMaXN0IGxpc3QgPSBub2RlLmdldENoaWxkTm9kZXMoKTsKLSAgICBpbnQgbGlzdExlbmd0aCA9IGxpc3QuZ2V0TGVuZ3RoKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0TGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgdmlzaXROb2RlKGxpc3QuaXRlbShpKSwgbXEsIGluZGVudCk7Ci0gICAgfSAKLSAgICBpbmRlbnQgLT0gNDsKLSAgfSAgICAgCi0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50bG5JbmRlbnRlZChpbnQgaW5kZW50LCBTdHJpbmcgc3RyaW5nKQotICB7ICAgIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5kZW50OyBpKyspCi0gICAgewotICAgICAgU3lzdGVtLm91dC5wcmludCgiICIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIFN5c3RlbS5vdXQucHJpbnRsbihzdHJpbmcpOwotICB9ICAgICAKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9UZXN0Q2F0YWxvZ1JldHJpdmFsQW5kTW9kZWxDcmVhdGlvbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL1Rlc3RDYXRhbG9nUmV0cml2YWxBbmRNb2RlbENyZWF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlMTAxZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL1Rlc3RDYXRhbG9nUmV0cml2YWxBbmRNb2RlbENyZWF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5jb250ZW50bW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5YTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLnByb3Zpc2lvbmFsLklDYXRhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNvbnRlbnRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLm1vZGVscXVlcnkuWE1MQ2F0YWxvZ0lkUmVzb2x2ZXI7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q2F0YWxvZ1JldHJpdmFsQW5kTW9kZWxDcmVhdGlvbiBleHRlbmRzIFRlc3RDYXNlIHsKLQotCS8qKgotCSAqIFRlc3QgdGhhdCBhIGtub3duIGVycm9yIGNhc2UgcmV0dXJucyBudWxsLgotCSAqIAotCSAqIEB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RLbm93bk5vdEV4aXN0KCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgSlVOS19TVFJJTkcgPSAiZG9lc05vdEV4aXN0VGVzdCI7Ci0JCUlDYXRhbG9nIHhtbENhdGFsb2cgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREZWZhdWx0WE1MQ2F0YWxvZygpOwotCQlTdHJpbmcgcmVzb2x2ZWQgPSB4bWxDYXRhbG9nLnJlc29sdmVQdWJsaWMoSlVOS19TVFJJTkcsIG51bGwpOwotCQlhc3NlcnROdWxsKCJleHBlY3RlZCBubyBtYXRjaCBmb3IgIiArIEpVTktfU1RSSU5HLCByZXNvbHZlZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlZHRlc3RXQVBGT1JVTSgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhIVE1MMTAoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WEhUTUwxMFQoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WEhUTUwxMEYoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIEZyYW1lc2V0Ly9FTiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYSFRNTDEwQigpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCItLy9XM0MvL0RURCBYSFRNTCBCYXNpYyAxLjAvL0VOIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhIVE1MMTEoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIpOwotCX0KLQkKLQkvKioKLQkgKiBXZSBleHBlY3QgdGhlIFhNTENhdGFsb2dSZXNvbHZlciBhbmQgWE1MQ2F0YWxvZ0lkUmVzb2x2ZXIKLQkgKiB0byByZXNvbHZlIHRvIHRoZSBzYW1lIFVSSSBnaXZlbiBhIHB1YmxpYyBpZCBpbiBvdXIgY2F0YWxvZy4KLQkgKiAKLQkgKiBAdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0WEhUTUwxMV94bWxyZXNvbHZlcigpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIEVYUEVDVEVEX1BVQkxJQ0lEID0gIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iOwotCQkKLQkJLy8gYnVnIDExNzQyNCwgaGVyZSBld2UgbWFrZSB1cCBhIGJhc2UgbG9jYXRpb24gdG8gc2F0aXNmeSB0aGUgcmVzb2x2ZXIgQVBJCi0JCS8vIHRoYXQgZXhwZWN0cyBhIG5vbi1udWxsIGJhc2UgbG9jYXRpb24KLQkJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3Rlc3RYSFRNTDExLnhtbCI7Ci0JCVhNTENhdGFsb2dJZFJlc29sdmVyIHJlc29sdmVyID0gbmV3IFhNTENhdGFsb2dJZFJlc29sdmVyKGJhc2VMb2NhdGlvbiwgbnVsbCk7Ci0JCVN0cmluZyByZXNvbHZlZFhNTF9JZCA9IHJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBFWFBFQ1RFRF9QVUJMSUNJRCwgbnVsbCk7Ci0JCQotCQlJQ2F0YWxvZyB4bWxDYXRhbG9nID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGVmYXVsdFhNTENhdGFsb2coKTsKLQkJU3RyaW5nIHJlc29sdmVkWExfQ2F0ID0geG1sQ2F0YWxvZy5yZXNvbHZlUHVibGljKEVYUEVDVEVEX1BVQkxJQ0lELCBudWxsKTsKLQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkWExfQ2F0LCByZXNvbHZlZFhNTF9JZCk7CQkgCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDTVhIVE1MMTEoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvQ01UZXN0KCItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIik7Ci0JfQotCXB1YmxpYyB2b2lkIHJlbW92ZWR0ZXN0WEhUTUwxME0oKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZWR0ZXN0V0FQMTMoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4zLy9FTiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QyMDAxU2NoZW1hKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1VSSVRlc3QoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIik7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgaWYgZHRkIE5PVCBpbiBvdXIgY2F0YWxvZyBjYW4gaGF2ZSBhIGNvbnRlbnQgbW9kZWwgCi0JICogY3JlYXRlZC4gCi0JICogCi0JICogQHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEV4dGVybmFsRFREKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb0NNX2RpcmVjdFVSSVRlc3QoImh0dHA6Ly9oaWJlcm5hdGUuc291cmNlZm9yZ2UubmV0L2hpYmVybmF0ZS1jb25maWd1cmF0aW9uLTMuMC5kdGQiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDIwMDFTY2hlbWFDTURpcmVjdCgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9DTV9kaXJlY3RVUklUZXN0KCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS54c2QiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDIwMDFTY2hlbWFDTUNhdGFsb2coKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVVJJX0NNVGVzdCgiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEludm9pY2VSZW1vdGUoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvQ01fZGlyZWN0VVJJVGVzdF9jaGVja0VsZW1lbnRDb3VudCgiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy93c3QvY29tcG9uZW50cy94c2QvdGVzdHMvZHRkLXJlZmVyZW5jZXMvSW52b2ljZS5kdGQiLCAxOCk7Ci0JfQkKLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SW52b2ljZVJlbW90ZUluZGlyZWN0KCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb0NNX2RpcmVjdFVSSVRlc3RfY2hlY2tFbGVtZW50Q291bnQoImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvd3N0L2NvbXBvbmVudHMveHNkL3Rlc3RzL2R0ZC1yZWZlcmVuY2VzL0luZGlyZWN0SW52b2ljZS5kdGQiLCAxOCk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBkb1Rlc3QoU3RyaW5nIEVYUEVDVEVEX1BVQkxJQ0lEKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlDYXRhbG9nIHhtbENhdGFsb2cgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREZWZhdWx0WE1MQ2F0YWxvZygpOwotCQlTdHJpbmcgcmVzb2x2ZWQgPSB4bWxDYXRhbG9nLnJlc29sdmVQdWJsaWMoRVhQRUNURURfUFVCTElDSUQsIG51bGwpOwotCQlhc3NlcnROb3ROdWxsKCJleHBlY3RlZCB0byBmaW5kICIgKyBFWFBFQ1RFRF9QVUJMSUNJRCwgcmVzb2x2ZWQpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb0NNVGVzdChTdHJpbmcgRVhQRUNURURfUFVCTElDSUQpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSUNhdGFsb2cgeG1sQ2F0YWxvZyA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERlZmF1bHRYTUxDYXRhbG9nKCk7Ci0JCVN0cmluZyByZXNvbHZlZCA9IHhtbENhdGFsb2cucmVzb2x2ZVB1YmxpYyhFWFBFQ1RFRF9QVUJMSUNJRCwgbnVsbCk7Ci0JCUNvbnRlbnRNb2RlbE1hbmFnZXIgY29udGVudE1vZGVsTWFuYWdlciA9IENvbnRlbnRNb2RlbE1hbmFnZXIuZ2V0SW5zdGFuY2UoKTsKLQkJQ01Eb2N1bWVudCBjb250ZW50TW9kZWwgPSBjb250ZW50TW9kZWxNYW5hZ2VyLmNyZWF0ZUNNRG9jdW1lbnQocmVzb2x2ZWQsIG51bGwpOwotCQlhc3NlcnROb3ROdWxsKCJleHBlY3RlZCB0byBjcmVhdGUgY29udGVudCBtb2RlbCBmb3IgIiArIEVYUEVDVEVEX1BVQkxJQ0lELCBjb250ZW50TW9kZWwpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb0NNX2RpcmVjdFVSSVRlc3QoU3RyaW5nIEVYUEVDVEVEX1VSSSkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlDb250ZW50TW9kZWxNYW5hZ2VyIGNvbnRlbnRNb2RlbE1hbmFnZXIgPSBDb250ZW50TW9kZWxNYW5hZ2VyLmdldEluc3RhbmNlKCk7Ci0JCUNNRG9jdW1lbnQgY29udGVudE1vZGVsID0gY29udGVudE1vZGVsTWFuYWdlci5jcmVhdGVDTURvY3VtZW50KEVYUEVDVEVEX1VSSSwgbnVsbCk7Ci0JCWFzc2VydE5vdE51bGwoImV4cGVjdGVkIHRvIGNyZWF0ZSBjb250ZW50IG1vZGVsIGZvciAiICsgRVhQRUNURURfVVJJLCBjb250ZW50TW9kZWwpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgZG9DTV9kaXJlY3RVUklUZXN0X2NoZWNrRWxlbWVudENvdW50KFN0cmluZyBFWFBFQ1RFRF9VUkksIGludCBjb3VudCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlDb250ZW50TW9kZWxNYW5hZ2VyIGNvbnRlbnRNb2RlbE1hbmFnZXIgPSBDb250ZW50TW9kZWxNYW5hZ2VyLmdldEluc3RhbmNlKCk7Ci0JCUNNRG9jdW1lbnQgY29udGVudE1vZGVsID0gY29udGVudE1vZGVsTWFuYWdlci5jcmVhdGVDTURvY3VtZW50KEVYUEVDVEVEX1VSSSwgbnVsbCk7Ci0JCWFzc2VydE5vdE51bGwoImV4cGVjdGVkIHRvIGNyZWF0ZSBjb250ZW50IG1vZGVsIGZvciAiICsgRVhQRUNURURfVVJJLCBjb250ZW50TW9kZWwpOwotCQlpbnQgYWN0dWFsQ291bnQgPSBjb250ZW50TW9kZWwuZ2V0RWxlbWVudHMoKS5nZXRMZW5ndGgoKTsgCi0JCWFzc2VydFRydWUoImV4cGVjdGVkIHRvIGNyZWF0ZSBjb250ZW50IG1vZGVsIHdpdGggJyIgKyBjb3VudCArICInIGVsZW1lbnQgZGVjbGFyYXRpb25zIGZvciAiICsgRVhQRUNURURfVVJJICsgIiBidXQgZm91bmQgIiArIGFjdHVhbENvdW50LCBjb250ZW50TW9kZWwuZ2V0RWxlbWVudHMoKS5nZXRMZW5ndGgoKSA9PSBjb3VudCk7CQkKLQl9CQotCi0JcHJpdmF0ZSB2b2lkIGRvVVJJVGVzdChTdHJpbmcgRVhQRUNURURfVVJJKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0gCi0JCUlDYXRhbG9nIHhtbENhdGFsb2cgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREZWZhdWx0WE1MQ2F0YWxvZygpOwotCQlTdHJpbmcgcmVzb2x2ZWQgPSB4bWxDYXRhbG9nLnJlc29sdmVVUkkoRVhQRUNURURfVVJJKTsKLQkJYXNzZXJ0Tm90TnVsbCgiZXhwZWN0ZWQgdG8gZmluZCAiICsgRVhQRUNURURfVVJJLCByZXNvbHZlZCk7Ci0KLQl9Ci0JcHJpdmF0ZSB2b2lkIGRvVVJJX0NNVGVzdChTdHJpbmcgRVhQRUNURURfVVJJKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCSAKLQkJSUNhdGFsb2cgeG1sQ2F0YWxvZyA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERlZmF1bHRYTUxDYXRhbG9nKCk7Ci0JCVN0cmluZyByZXNvbHZlZCA9IHhtbENhdGFsb2cucmVzb2x2ZVVSSShFWFBFQ1RFRF9VUkkpOwotCQlhc3NlcnROb3ROdWxsKCJleHBlY3RlZCB0byBmaW5kICIgKyBFWFBFQ1RFRF9VUkksIHJlc29sdmVkKTsKLQkJCi0JCUNvbnRlbnRNb2RlbE1hbmFnZXIgY29udGVudE1vZGVsTWFuYWdlciA9IENvbnRlbnRNb2RlbE1hbmFnZXIuZ2V0SW5zdGFuY2UoKTsKLQkJQ01Eb2N1bWVudCBjb250ZW50TW9kZWwgPSBjb250ZW50TW9kZWxNYW5hZ2VyLmNyZWF0ZUNNRG9jdW1lbnQocmVzb2x2ZWQsIG51bGwpOwotCQlhc3NlcnROb3ROdWxsKCJleHBlY3RlZCB0byBjcmVhdGUgY29udGVudCBtb2RlbCBmb3IgIiArIEVYUEVDVEVEX1VSSSwgY29udGVudE1vZGVsKTsKLQotCX0KLQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9GaWxlQnVmZmVyRG9jdW1lbnRUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L0ZpbGVCdWZmZXJEb2N1bWVudFRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTQ3ZGJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L0ZpbGVCdWZmZXJEb2N1bWVudFRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuRmlsZUJ1ZmZlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5JVGV4dEZpbGVCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5JVGV4dEZpbGVCdWZmZXJNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5CYXNpY1N0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudGV4dC5ydWxlcy5TdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MOwotCi0KLQotcHVibGljIGNsYXNzIEZpbGVCdWZmZXJEb2N1bWVudFRlc3RlciBleHRlbmRzIFVuemlwcGVkUHJvamVjdFRlc3RlciB7Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0Q3JlYXRlKFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgZXhwZWN0ZWREb2N1bWVudENsYXNzLCBDbGFzcyBleHBlY3RlZFBhcnRpb25lcikgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlhc3NlcnROb3ROdWxsKCJUZXN0IENhc2UgaW4gZXJyb3IuIENvdWxkIG5vdCBmaW5kIGZpbGUgIiArIGZpbGVQYXRoLCBmaWxlKTsKLQkJSVBhdGggbG9jYXRpb25QYXRoID0gZmlsZS5nZXRMb2NhdGlvbigpOwotCQlJVGV4dEZpbGVCdWZmZXJNYW5hZ2VyIGJ1ZmZlck1hbmFnZXIgPSBGaWxlQnVmZmVycy5nZXRUZXh0RmlsZUJ1ZmZlck1hbmFnZXIoKTsKLQkJYnVmZmVyTWFuYWdlci5jb25uZWN0KGxvY2F0aW9uUGF0aCwgbnVsbCk7Ci0JCUlUZXh0RmlsZUJ1ZmZlciBidWZmZXIgPSBidWZmZXJNYW5hZ2VyLmdldFRleHRGaWxlQnVmZmVyKGxvY2F0aW9uUGF0aCk7Ci0JCUlEb2N1bWVudCBkb2N1bWVudCA9IGJ1ZmZlci5nZXREb2N1bWVudCgpOwotCQlhc3NlcnROb3ROdWxsKGRvY3VtZW50KTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgY2xhc3Mgb2YgZG9jdW1lbnQiLCBleHBlY3RlZERvY3VtZW50Q2xhc3MuaXNJbnN0YW5jZShkb2N1bWVudCkpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBwYXJ0aXRpb25lciBpbiBkb2N1bWVudC4iLCBleHBlY3RlZFBhcnRpb25lci5pc0luc3RhbmNlKGRvY3VtZW50LmdldERvY3VtZW50UGFydGl0aW9uZXIoKSkpOwotCQlidWZmZXJNYW5hZ2VyLmRpc2Nvbm5lY3QobG9jYXRpb25QYXRoLCBudWxsKTsKLQotLy8JCWRvVGVzdENyZWF0ZVdpdGhGYWNhZGUoZmlsZSwgZXhwZWN0ZWREb2N1bWVudENsYXNzLCBleHBlY3RlZFBhcnRpb25lcik7Ci0JCSAKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZmlsZQotCSAqIEBwYXJhbSBleHBlY3RlZERvY3VtZW50Q2xhc3MKLQkgKiBAcGFyYW0gZXhwZWN0ZWRQYXJ0aW9uZXIKLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICovCi0vLwlwcml2YXRlIHZvaWQgZG9UZXN0Q3JlYXRlV2l0aEZhY2FkZShJRmlsZSBmaWxlLCBDbGFzcyBleHBlY3RlZERvY3VtZW50Q2xhc3MsIENsYXNzIGV4cGVjdGVkUGFydGlvbmVyKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotLy8JCURvY3VtZW50TG9hZGVyRm9yWE1MIGRvY3VtZW50TG9hZGVyRm9yWE1MID0gbmV3IERvY3VtZW50TG9hZGVyRm9yWE1MKCk7Ci0vLwkJSURvY3VtZW50IGRvY3VtZW50ID0gZG9jdW1lbnRMb2FkZXJGb3JYTUwuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KGZpbGUsIG51bGwpOwotLy8JCUFzc2VydC5hc3NlcnROb3ROdWxsKGRvY3VtZW50KTsKLS8vCX0KLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RDcmVhdGVDcmVhdGVFbXB0eShTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRG9jdW1lbnRDbGFzcywgQ2xhc3MgZXhwZWN0ZWRQYXJ0aW9uZXIpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlhc3NlcnRUcnVlKCJUZXN0IENhc2UgaW4gZXJyb3IuIE5vbi1leGlzdGVudCBmaWxlIGV4aXN0ZWQhICIgKyBmaWxlUGF0aCwgZmlsZSA9PSBudWxsKTsKLQkJSVBhdGggbG9jYXRpb25QYXRoID0gbmV3IFBhdGgoZmlsZVBhdGgpOwotCQlJRmlsZSBub25FeGlzdGluZ0ZpbGUgPSBmVGVzdFByb2plY3QuZ2V0RmlsZShsb2NhdGlvblBhdGgpOwotCQlsb2NhdGlvblBhdGggPSBub25FeGlzdGluZ0ZpbGUuZ2V0RnVsbFBhdGgoKTsKLQkJSVRleHRGaWxlQnVmZmVyTWFuYWdlciBidWZmZXJNYW5hZ2VyID0gRmlsZUJ1ZmZlcnMuZ2V0VGV4dEZpbGVCdWZmZXJNYW5hZ2VyKCk7Ci0JCS8vIGNhbiBub3QgImNvbm5lY3QiIHRvIG5vbi1leGlzdGFudCBsb2NhdGlvbgotCQkvL2J1ZmZlck1hbmFnZXIuY29ubmVjdChsb2NhdGlvblBhdGgsIG51bGwpOwotCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSBidWZmZXJNYW5hZ2VyLmNyZWF0ZUVtcHR5RG9jdW1lbnQobG9jYXRpb25QYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbChkb2N1bWVudCk7Ci0JCWFzc2VydFRydWUoIndyb25nIGNsYXNzIG9mIGRvY3VtZW50IiwgZXhwZWN0ZWREb2N1bWVudENsYXNzLmlzSW5zdGFuY2UoZG9jdW1lbnQpKTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgcGFydGl0aW9uZXIgaW4gZG9jdW1lbnQiLCBleHBlY3RlZFBhcnRpb25lci5pc0luc3RhbmNlKGRvY3VtZW50LmdldERvY3VtZW50UGFydGl0aW9uZXIoKSkpOwotCQlidWZmZXJNYW5hZ2VyLmRpc2Nvbm5lY3QobG9jYXRpb25QYXRoLCBudWxsKTsKLQotCX0KLQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9FbXB0eUZpbGUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL2V1Y2pwLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhzbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9Ob0VuY29kaW5nLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9Ob3JtYWxOb25EZWZhdWx0LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9zaGlmdGppcy54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdEV4dHJhSnVuay54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdEV4dHJhVmFsaWRTdHVmZi54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDIueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQzLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkNC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdE11bHRpTGluZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdE5vRW5jb2RpbmdWYWx1ZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdE5vcm1hbENhc2UueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2wueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xBdEZpcnN0LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsSW5MYXJnZUZpbGUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RVVEYxNi54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvVVRGMTZMRUF0U3RhcnRPZkxhcmdlRmlsZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvVVRGOFdpdGgzQnl0ZUJPTS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbkV4aXN0ZW50WE1MKCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGVDcmVhdGVFbXB0eSgidGVzdGZpbGVzL3htbC90ZXN0bm9uZXhpc3RlbnQueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVDYXNlKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb3JtYWxDYXNlLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQkvKgotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2Nzcy9lbXB0eUZpbGUuY3NzIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JDU1MuY2xhc3MpOwotCX0KLQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmdYU0wuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdEJyb2tlbkxpbmUuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nV2l0aEp1bmsuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdEV4dHJhSnVuay5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFWYWxpZFN0dWZmLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZDIuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdE5vRW5jb2RpbmdWYWx1ZS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0Tm9ybWFsQ2FzZS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvVVRGOFdpdGgzQnl0ZUJPTS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9XZWxsRm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtQi5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyNDI5My90ZXN0c2hpZnRqaXNYbWxTeW50YXguanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjk2NjcvYXVkaS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvTm9FbmNvZGluZ2luWE1MRGVjbC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlTm9FbmNvZGluZy5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXguanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0V2l0aFhNTERlY2wuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvTm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0qLwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L0dldERvY3VtZW50UmVnaW9uc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L0dldERvY3VtZW50UmVnaW9uc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZhMzE2Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9HZXREb2N1bWVudFJlZ2lvbnNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9jdW1lbnQ7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JYTUw7Ci0KLXB1YmxpYyBjbGFzcyBHZXREb2N1bWVudFJlZ2lvbnNUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCQotCXByaXZhdGUgYm9vbGVhbiBmQWxyZWFkeVNldHVwID0gZmFsc2U7Ci0JcHJpdmF0ZSBJU3RydWN0dXJlZERvY3VtZW50IGZEb2MgPSBudWxsOwotCXByaXZhdGUgU3RyaW5nIGZUZXh0ID0gbnVsbDsKLQkKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQlpZighZkFscmVhZHlTZXR1cCkgewotCQkJSVN0cnVjdHVyZWRNb2RlbCBzTW9kZWwgPSBjcmVhdGVNb2RlbChDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJCWZEb2MgPSBzTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlmVGV4dCA9ICI8aHRtbD48aGVhZD48L2hlYWQ+PGJvZHk+IHRleHQgPC9ib2R5PjwvaHRtbD4iOwotCQkJZkRvYy5zZXQoZlRleHQpOwotCQkJZkFscmVhZHlTZXR1cCA9IHRydWU7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldEFsbFJlZ2lvbnMoKSB7Ci0KLQkJLy8gYWxsIHJlZ2lvbnMKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbltdIHJlZ2lvbnMgPSBmRG9jLmdldFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKTsKLQkJY2hlY2tSZWdpb25zKHJlZ2lvbnMsIDcsICI8aHRtbD4iLCAiPC9odG1sPiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFeGNsdWRlRW5kcygpIHsKLQkJCi0JCS8vIGxlYXZlIG9mZiB0aGUgZW5kIHJlZ2lvbnMKLQkJLy8gPGh0bWw+WzxoZWFkPjxib2R5PiB0ZXh0IDwvYm9keT5dPC9odG1sPgotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uW10gcmVnaW9ucyA9IGZEb2MuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucyg2LGZUZXh0Lmxlbmd0aCgpIC0gKDYrNykpOwotCQljaGVja1JlZ2lvbnMocmVnaW9ucywgNSwgIjxoZWFkPiIsICI8L2JvZHk+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluY2x1ZGVFbmRzKCkgewotCQkKLQkJLy8gaW5jbHVkZSBlbmQgcmVnaW9ucwotCQkvLyA8aHRbbWw+PGhlYWQ+PC9oZWFkPjxib2R5PiB0ZXh0IDwvYm9keT48L2h0XW1sPgotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uW10gcmVnaW9ucyA9IGZEb2MuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygzLGZUZXh0Lmxlbmd0aCgpLSAoMyszKSk7Ci0JCWFzc2VydEVxdWFscyg3LCByZWdpb25zLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpcnN0VHdvKCkgewotCQkvLyBmaXJzdCAyIHJlZ2lvbnMKLQkJLy8gPGhbdG1sPjxoXWVhZD48L2hlYWQ+Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25bXSByZWdpb25zID0gZkRvYy5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKDIsNik7Ci0JCWNoZWNrUmVnaW9ucyhyZWdpb25zLCAyLCAiPGh0bWw+IiwgIjxoZWFkPiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSaWdodFNlYW0oKSB7Ci0JCS8vIHJpZ2h0IHNlYW0KLQkJLy8gWzxodG1sPjxoZWFkPl08L2hlYWQ+Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25bXSByZWdpb25zID0gZkRvYy5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKDAsMTIpOwotCQljaGVja1JlZ2lvbnMocmVnaW9ucywgMiwgIjxodG1sPiIsICI8aGVhZD4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TGVmdFNlYW0oKSB7Ci0JCS8vIGxlZnQgc2VhbQotCQkvLyA8L2JvZHk+WzwvaHRtbD5dCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25bXSByZWdpb25zID0gZkRvYy5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKGZUZXh0Lmxlbmd0aCgpLTcsIDcpOwotCQljaGVja1JlZ2lvbnMocmVnaW9ucywgMSwgIjwvaHRtbD4iLCAiPC9odG1sPiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRMYXN0KCkgewotCQkvLyBsYXN0IHJlZ2lvbiBvbmx5Ci0JCS8vIDwvYm9keT48L2h0bWw+fAotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uW10gcmVnaW9ucyA9IGZEb2MuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucyhmVGV4dC5sZW5ndGgoKSwgMCk7Ci0JCWNoZWNrUmVnaW9ucyhyZWdpb25zLCAxLCAiPC9odG1sPiIsICI8L2h0bWw+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEZpcnN0KCkgewotCQkvLyBmaXJzdCByZWdpb24gb25seQotCQkvLyB8PGh0bWw+PGhlYWQ+Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25bXSByZWdpb25zID0gZkRvYy5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKDAsMCk7Ci0JCWNoZWNrUmVnaW9ucyhyZWdpb25zLCAxLCAiPGh0bWw+IiwgIjxodG1sPiIpOwotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja1JlZ2lvbnMoSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbltdIHJlZ2lvbnMsIGludCBleHBlY3RlZExlbmd0aCwgU3RyaW5nIGZpcnN0VGV4dCwgU3RyaW5nIGxhc3RUZXh0KSB7Ci0JCQotCQkvL2ZvciAoaW50IGkgPSAwOyBpIDwgcmVnaW9ucy5sZW5ndGg7IGkrKykgCi0JCS8vCVN5c3RlbS5vdXQucHJpbnRsbihyZWdpb25zW2ldLmdldFRleHQoKSk7Ci0JCQotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRMZW5ndGgsIHJlZ2lvbnMubGVuZ3RoKTsKLQkJCi0JCVN0cmluZyB0ZXh0ID0gcmVnaW9uc1swXS5nZXRUZXh0KCk7Ci0JCWFzc2VydEVxdWFscyh0ZXh0LCBmaXJzdFRleHQpOwotCQkKLQkJdGV4dCA9IHJlZ2lvbnNbcmVnaW9ucy5sZW5ndGgtMV0uZ2V0VGV4dCgpOwotCQlhc3NlcnRFcXVhbHModGV4dCwgbGFzdFRleHQpOwotCX0KLQkKLQlwcml2YXRlIElTdHJ1Y3R1cmVkTW9kZWwgY3JlYXRlTW9kZWwoU3RyaW5nIGNvbnRlbnRUeXBlSUQpIHsKLQkJLy8gY3JlYXRlIGFuIGVtcHR5IG1vZGVsIHdpdGggaXRzIGRlZmF1bHQgZmFjdG9yaWVzCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihjb250ZW50VHlwZUlEKTsKLQkJcmV0dXJuIG1vZGVsOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RTdHJ1Y3R1cmVkRG9jdW1lbnQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RTdHJ1Y3R1cmVkRG9jdW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAzMzQ5ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9UZXN0U3RydWN0dXJlZERvY3VtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzMgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9jdW1lbnQ7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZFBvc2l0aW9uQ2F0ZWdvcnlFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Qb3NpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnNlcnZpY2UuZGF0YWxvY2F0aW9uLkxvY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5FbmNvZGluZ01lbWVudG87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5JU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5OZXdEb2N1bWVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuTm9DaGFuZ2VFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlJlZ2lvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlJlZ2lvbnNSZXBsYWNlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuWE1MTW9kZWxMb2FkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLQotcHVibGljIGNsYXNzIFRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnQgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQljbGFzcyBUZXN0TGlzdGVuZXIgaW1wbGVtZW50cyBJU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXIgewotCi0JCWJvb2xlYW4gbmV3TW9kZWxDYWxsZWQgPSBmYWxzZTsKLQkJYm9vbGVhbiBub0NoYW5nZUNhbGxlZCA9IGZhbHNlOwotCQlib29sZWFuIG5vZGVzUmVwbGFjZWRDYWxsZWQgPSBmYWxzZTsKLQkJYm9vbGVhbiByZWdpb25DaGFuZ2VkQ2FsbGVkID0gZmFsc2U7Ci0JCWJvb2xlYW4gcmVnaW9uc1JlcGxhY2VkQ2FsbGVkID0gZmFsc2U7Ci0KLQkJcHVibGljIHZvaWQgbmV3TW9kZWwoTmV3RG9jdW1lbnRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkJbmV3TW9kZWxDYWxsZWQgPSB0cnVlOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgbm9DaGFuZ2UoTm9DaGFuZ2VFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkJbm9DaGFuZ2VDYWxsZWQgPSB0cnVlOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgbm9kZXNSZXBsYWNlZChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkJbm9kZXNSZXBsYWNlZENhbGxlZCA9IHRydWU7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCByZWdpb25DaGFuZ2VkKFJlZ2lvbkNoYW5nZWRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkJcmVnaW9uQ2hhbmdlZENhbGxlZCA9IHRydWU7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCByZWdpb25zUmVwbGFjZWQoUmVnaW9uc1JlcGxhY2VkRXZlbnQgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpIHsKLQkJCXJlZ2lvbnNSZXBsYWNlZENhbGxlZCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCXByaXZhdGUgWE1MTW9kZWxMb2FkZXIgZkxvYWRlciA9IG51bGw7Ci0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmUHJvamVjdE5hbWUgPSAiRE9DVU1FTlQtTE9BREVSIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmWmlwRmlsZU5hbWUgPSAieG1sLWRvY3VtZW50LWxvYWRlci10ZXN0cy56aXAiOwotCi0JcHVibGljIFRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnQoKSB7Ci0JCXN1cGVyKCJUZXN0U3RydWN0dXJlZERvY3VtZW50Iik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlzdXBlci5zZXRVcCgpOwotCQlpZiAoIXRoaXMuaXNTZXR1cCkgewotCQkJZkxvYWRlciA9IG5ldyBYTUxNb2RlbExvYWRlcigpOwotCQkJZG9TZXR1cCgpOwotCQkJdGhpcy5pc1NldHVwID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBkb1NldHVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJLy8gcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCUxvY2F0aW9uIHBsYXRmb3JtTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRJbnN0YW5jZUxvY2F0aW9uKCk7Ci0KLQkJUHJvamVjdFVuemlwVXRpbGl0eSB1bnppcFV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQlGaWxlIHppcEZpbGUgPSBGaWxlVXRpbC5tYWtlRmlsZUZvcihQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIsIGZaaXBGaWxlTmFtZSwgUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSKTsKLQkJdW56aXBVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIHBsYXRmb3JtTG9jYXRpb24uZ2V0VVJMKCkuZ2V0RmlsZSgpKTsKLQkJdW56aXBVdGlsLmluaXRKYXZhUHJvamVjdChmUHJvamVjdE5hbWUpOwotCX0KLQotCS8qKgotCSAqIEJlIHN1cmUgdG8gcmVsZWFzZSBhbnkgbW9kZWxzIG9idGFpbmVkIGZyb20gdGhpcyBtZXRob2QuCi0JICogCi0JICovCi0JSVN0cnVjdHVyZWRNb2RlbCBnZXRUZXN0TW9kZWwoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCi0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoZlByb2plY3ROYW1lKTsKLQkJSUZpbGUgaUZpbGUgPSAoSUZpbGUpIHByb2plY3QuZmluZE1lbWJlcigiL2ZpbGVzL3NpbXBsZS54bWwiKTsKLQkJLy8gZlByb2plY3ROYW1lICsgIi9maWxlcy9zaW1wbGUueG1sIgotCi0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQotCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoaUZpbGUpOwotCi0KLQkJcmV0dXJuIG1vZGVsOwotCi0JfQotCi0KLQotCXB1YmxpYyB2b2lkIHRlc3REb2N1bWVudENoYW5naW5nTGlzdGVuZXIoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gVE9ETzogbWF5IG5lZWQgdG8gZmFrZSBldmVudHMgdG8gcmVhbGx5IHRlc3RzIHRoaXMKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQotCQkJVGVzdExpc3RlbmVyIGxpc3RlbmVyID0gbmV3IFRlc3RMaXN0ZW5lcigpOwotCi0JCQlzRG9jLmFkZERvY3VtZW50Q2hhbmdpbmdMaXN0ZW5lcihsaXN0ZW5lcik7Ci0JCQlTdHJpbmcgdGV4dCA9IHNEb2MuZ2V0KCk7Ci0JCQlzRG9jLnJlcGxhY2UoMCwgdGV4dC5sZW5ndGgoKSwgdGV4dCk7Ci0KLQkJCXNEb2MucmVtb3ZlRG9jdW1lbnRDaGFuZ2luZ0xpc3RlbmVyKGxpc3RlbmVyKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVhZE9ubHkoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJU3RyaW5nIHRleHQgPSBzRG9jLmdldCgpOwotCi0JCQlzRG9jLmNsZWFyUmVhZE9ubHkoMCwgdGV4dC5sZW5ndGgoKSk7Ci0JCQlhc3NlcnRGYWxzZShzRG9jLmNvbnRhaW5zUmVhZE9ubHkoMCwgdGV4dC5sZW5ndGgoKSkpOwotCi0JCQlzRG9jLm1ha2VSZWFkT25seSgwLCAxMCk7Ci0JCQlhc3NlcnRUcnVlKHNEb2MuY29udGFpbnNSZWFkT25seSg5LCAxKSk7Ci0JCQlhc3NlcnRUcnVlKHNEb2MuY29udGFpbnNSZWFkT25seSgwLCB0ZXh0Lmxlbmd0aCgpKSk7Ci0KLQkJCXNEb2MuY2xlYXJSZWFkT25seSgwLCB0ZXh0Lmxlbmd0aCgpKTsKLQkJCWFzc2VydEZhbHNlKHNEb2MuY29udGFpbnNSZWFkT25seSgwLCB0ZXh0Lmxlbmd0aCgpKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFJlZ2lvbkF0Q2hhcmFjdGVyT2Zmc2V0KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHIgPSBzRG9jLmdldFJlZ2lvbkF0Q2hhcmFjdGVyT2Zmc2V0KDApOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGRuJ3QgZ2V0IHJlZ2lvbiBhdCBvZmZzZXQ6IDAiLCByKTsKLQotCQkJciA9IHNEb2MuZ2V0UmVnaW9uQXRDaGFyYWN0ZXJPZmZzZXQoc0RvYy5nZXRMZW5ndGgoKSk7Ci0JCQlhc3NlcnROb3ROdWxsKCJjb3VsZG4ndCBnZXQgcmVnaW9uIGF0IG9mZnNldDogIiArIHNEb2MuZ2V0TGVuZ3RoKCksIHIpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFJlZ2lvbkxpc3QoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IHJlZ2lvbnMgPSBzRG9jLmdldFJlZ2lvbkxpc3QoKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkbid0IGdldCByZWdpb24gbGlzdCIsIHJlZ2lvbnMpOwotCQkJYXNzZXJ0RXF1YWxzKDE3LCByZWdpb25zLmdldExlbmd0aCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VGV4dCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJU3RyaW5nIHRleHQgPSBzRG9jLmdldFRleHQoKTsKLQkJCVN0cmluZyBleHBlY3RlZFRleHQgPSAiPD94bWwgdmVyc2lvbj1cIjEuMFwiPz5cclxuPGxpc3Q+XHJcblx0PGl0ZW0xIGF0dHIxPVwiYXR0cjFcIiBhdHRyMj1cImF0dHIyXCIgYXR0cjM9XCJhdHRyM1wiPlxyXG5cdFx0b25lXHJcblx0PC9pdGVtMT5cclxuXHQ8aXRlbTIgYXR0cjE9XCJhdHRyMVwiIGF0dHIyPVwiYXR0cjJcIiBhdHRyMz1cImF0dHIzXCIgPlxyXG5cdFx0dHdvXHJcblx0PC9pdGVtMj5cclxuXHQ8aXRlbTMgYXR0cjE9XCJhdHRyMVwiIGF0dHIyPVwiYXR0cjJcIiBhdHRyMz1cImF0dHIzXCI+XHJcblx0XHR0aHJlZVxyXG5cdDwvaXRlbTM+XHJcbjwvbGlzdD4iOwotCQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkVGV4dCwgdGV4dCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5ld0luc3RhbmNlKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IG5ld0RvYyA9IHNEb2MubmV3SW5zdGFuY2UoKTsKLQkJCWFzc2VydE5vdFNhbWUoImRvY3VtZW50IGluc3RhbmNlcyBzaG91bGQgYmUgZGlmZmVyZW50Iiwgc0RvYywgbmV3RG9jKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVwbGFjZVRleHQoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlzRG9jLnJlcGxhY2UoMCwgc0RvYy5nZXRMZW5ndGgoKSwgInJlcGxhY2VkIik7Ci0KLQkJCVN0cmluZyB0ZXh0ID0gc0RvYy5nZXRUZXh0KCk7Ci0JCQlhc3NlcnRFcXVhbHMoInJlcGxhY2VkIiwgdGV4dCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE92ZXJyaWRlUmVhZE9ubHlSZXBsYWNlVGV4dCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJc0RvYy5tYWtlUmVhZE9ubHkoMCwgMSk7Ci0JCQlzRG9jLnJlcGxhY2VUZXh0KHRoaXMsIDAsIHNEb2MuZ2V0TGVuZ3RoKCksICJyZXBsYWNlZCIpOwotCQkJYXNzZXJ0Tm90U2FtZSgidGV4dCBzaG91bGQgbm90IGhhdmUgYmVlbiByZXBsYWNhYmxlIChyZWFkIG9ubHkpIiwgInJlcGxhY2VkIiwgc0RvYy5nZXRUZXh0KCkpOwotCi0JCQlzRG9jLnJlcGxhY2VUZXh0KHRoaXMsIDAsIHNEb2MuZ2V0TGVuZ3RoKCksICJyZXBsYWNlZCIsIHRydWUpOwotCQkJYXNzZXJ0RXF1YWxzKCJ0ZXh0IHNob3VsZCBoYXZlIGJlZW4gZm9yY2VkIHJlcGxhY2VkIiwgInJlcGxhY2VkIiwgc0RvYy5nZXRUZXh0KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZXRUZXh0KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlzRG9jLnNldFRleHQodGhpcywgInNldCB0ZXh0Iik7Ci0KLQkJCWFzc2VydEVxdWFscygic2V0IHRleHQgZmFpbGVkIiwgInNldCB0ZXh0Iiwgc0RvYy5nZXRUZXh0KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRFbmNvZGluZ01lbWVudG8oKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBudWxsOwotCQkJc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJRW5jb2RpbmdNZW1lbnRvIG1lbWVudG8gPSBzRG9jLmdldEVuY29kaW5nTWVtZW50bygpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGRuJ3QgZ2V0IGVuY29kaW5nIG1lbWVudG8iLCBtZW1lbnRvKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RGV0ZWN0ZWRMaW5lRGVsaW1pdGVyKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHBsYXRmb3JtRGVsaW1pdGVyID0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCVN0cmluZyBkZWxpbSA9IHNEb2MuZ2V0TGluZURlbGltaXRlcigpOwotCQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBwcmVmZXJyZWQgbGluZSBkZWxtaXRlciIsIHBsYXRmb3JtRGVsaW1pdGVyLCBkZWxpbSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNldEVuY29kaW5nTWVtZW50bygpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJRW5jb2RpbmdNZW1lbnRvIG1lbWVudG8gPSBuZXcgRW5jb2RpbmdNZW1lbnRvKCk7Ci0JCQlzRG9jLnNldEVuY29kaW5nTWVtZW50byhtZW1lbnRvKTsKLQkJCUVuY29kaW5nTWVtZW50byBnb3R0ZW5NZW1lbnRvID0gc0RvYy5nZXRFbmNvZGluZ01lbWVudG8oKTsKLQkJCWFzc2VydEVxdWFscygibWVtZW50b3MgZG9uJ3QgbWF0Y2giLCBtZW1lbnRvLCBnb3R0ZW5NZW1lbnRvKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQl2b2lkIHNldERldGVjdGVkTGluZURlbGltaXRlcigpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJc0RvYy5zZXRQcmVmZXJyZWRMaW5lRGVsaW1pdGVyKCJcbiIpOwotCQkJU3RyaW5nIGRlbGltID0gc0RvYy5nZXRQcmVmZXJyZWRMaW5lRGVsaW1pdGVyKCk7Ci0JCQlhc3NlcnRFcXVhbHMoInNldCBsaW5lIGRlbGltaXRlciBmYWlsZWQiLCAiXG4iLCBkZWxpbSk7Ci0KLQkJCXNEb2Muc2V0UHJlZmVycmVkTGluZURlbGltaXRlcigiXHJcbiIpOwotCQkJZGVsaW0gPSBzRG9jLmdldFByZWZlcnJlZExpbmVEZWxpbWl0ZXIoKTsKLQkJCWFzc2VydEVxdWFscygic2V0IGxpbmUgZGVsaW1pdGVyIGZhaWxlZCIsICJcclxuIiwgZGVsaW0pOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTdHJpbmdNYXRjaGVzKCkgewotCQkvLyBUT0RPOiB3aWxsIG5lZWQgYSB0ZXN0IHdoZW4gdGhpcyBBUEkgaXMgY3JlYXRlZAotCQkvLyBJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCS8vIElTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVQb3NpdGlvbigpIHRocm93cyBCYWRQb3NpdGlvbkNhdGVnb3J5RXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCVBvc2l0aW9uIHAgPSBuZXcgUG9zaXRpb24oMCwgMTApOwotCQkJU3RyaW5nW10gY2F0ZWdvcmllcyA9IHNEb2MuZ2V0UG9zaXRpb25DYXRlZ29yaWVzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGNhdGVnb3JpZXMubGVuZ3RoOyBpKyspIHsKLQkJCQlzRG9jLmFkZFBvc2l0aW9uKGNhdGVnb3JpZXNbaV0sIHApOwotCQkJfQotCQkJaW50IGZvdW5kID0gMDsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgY2F0ZWdvcmllcy5sZW5ndGg7IGkrKykgewotCQkJCVBvc2l0aW9uW10gcG9zaXRpb25zID0gc0RvYy5nZXRQb3NpdGlvbnMoY2F0ZWdvcmllc1tpXSk7Ci0JCQkJZm9yIChpbnQgaiA9IDA7IGogPCBwb3NpdGlvbnMubGVuZ3RoOyBqKyspIHsKLQkJCQkJaWYgKHBvc2l0aW9uc1tqXSA9PSBwKSB7Ci0JCQkJCQlmb3VuZCsrOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2YgcG9zaXRpb25zIiwgY2F0ZWdvcmllcy5sZW5ndGgsIGZvdW5kKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9UZXN0WE1MRG9jdW1lbnRMb2FkZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RYTUxEb2N1bWVudExvYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTdhMDg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RYTUxEb2N1bWVudExvYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50OwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kuc2VydmljZS5kYXRhbG9jYXRpb24uTG9jYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmVuY29kaW5nLlhNTERvY3VtZW50TG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsLlByb2plY3RVbnppcFV0aWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0WE1MRG9jdW1lbnRMb2FkZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGlzU2V0dXAgPSBmYWxzZTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmUHJvamVjdE5hbWUgPSJET0NVTUVOVC1MT0FERVIiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZaaXBGaWxlTmFtZSA9ICJ4bWwtZG9jdW1lbnQtbG9hZGVyLXRlc3RzLnppcCI7Ci0JCQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCWlmICghdGhpcy5pc1NldHVwKSB7Ci0JCQlkb1NldHVwKCk7Ci0JCQl0aGlzLmlzU2V0dXAgPSB0cnVlOwotCQl9Ci0JfQotCQotCXByaXZhdGUgdm9pZCBkb1NldHVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CQotCQotCQkvLyByb290IG9mIHdvcmtzcGFjZSBkaXJlY3RvcnkKLQkJTG9jYXRpb24gcGxhdGZvcm1Mb2NhdGlvbiA9IFBsYXRmb3JtLmdldEluc3RhbmNlTG9jYXRpb24oKTsKLQkJCi0JCVByb2plY3RVbnppcFV0aWxpdHkgdW56aXBVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJRmlsZSB6aXBGaWxlID0gRmlsZVV0aWwubWFrZUZpbGVGb3IoUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSLCBmWmlwRmlsZU5hbWUsIFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUik7Ci0JCXVuemlwVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBwbGF0Zm9ybUxvY2F0aW9uLmdldFVSTCgpLmdldEZpbGUoKSk7Ci0JCXVuemlwVXRpbC5pbml0SmF2YVByb2plY3QoZlByb2plY3ROYW1lKTsKLQl9Ci0JCi0JCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZU5ld0VtcHR5U3RydWN0dXJlZERvY3VtZW50KCkgewotCi0JCVhNTERvY3VtZW50TG9hZGVyIHhtbERvY3VtZW50TG9hZGVyID0gbmV3IFhNTERvY3VtZW50TG9hZGVyKCk7Ci0JCUlEb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0JCQotCQlkb2N1bWVudCA9IHhtbERvY3VtZW50TG9hZGVyLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudCgpOwotCQlhc3NlcnROb3ROdWxsKCJmYWlsZWQgdG8gY3JlYXRlIEVtcHR5IGRvY3VtZW50IiwgZG9jdW1lbnQpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50RnJvbUZpbGUoKSB7Ci0JCS8vIGZyb20gYSBmaWxlCQotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZQcm9qZWN0TmFtZSArICIvZmlsZXMvc2ltcGxlLnhtbCIpKTsKLQkJCQotCQlYTUxEb2N1bWVudExvYWRlciB4bWxEb2N1bWVudExvYWRlciA9IG5ldyBYTUxEb2N1bWVudExvYWRlcigpOwotCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSBudWxsOwotCQl0cnkgewotCQkJZG9jdW1lbnQgPSB4bWxEb2N1bWVudExvYWRlci5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoZmlsZSk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewkKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbCgiZmFpbGVkIHRvIGNyZWF0ZSBkb2N1bWVudCBmcm9tIElGaWxlIiwgZG9jdW1lbnQpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50RnJvbUlucHV0U3RyZWFtKCkgewotCQlTdHJpbmcgZmlsZUxvY2F0aW9uID0gIi9maWxlcy9zaW1wbGUueG1sIjsKLQkJU3RyaW5nIGFic29sdXRlRmlsZUxvY2F0aW9uID0gUGxhdGZvcm0uZ2V0SW5zdGFuY2VMb2NhdGlvbigpICsgZlByb2plY3ROYW1lICsgZmlsZUxvY2F0aW9uOwotCQkKLQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmUHJvamVjdE5hbWUgKyAiL2ZpbGVzL3NpbXBsZS54bWwiKSk7Ci0JCQotCQlYTUxEb2N1bWVudExvYWRlciB4bWxEb2N1bWVudExvYWRlciA9IG5ldyBYTUxEb2N1bWVudExvYWRlcigpOwotCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSBudWxsOwotCQkKLQkJdHJ5IHsKLQkJCWRvY3VtZW50ID0geG1sRG9jdW1lbnRMb2FkZXIuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KGFic29sdXRlRmlsZUxvY2F0aW9uLCBmaWxlLmdldENvbnRlbnRzKCkpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsJCi0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWFzc2VydE5vdE51bGwoImZhaWxlZCB0byBjcmVhdGUgZG9jdW1lbnQgZnJvbSBJbnB1dFN0cmVhbSIsIGRvY3VtZW50KTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZU5ld0RvY3VtZW50RnJvbVJlYWRlcldpdGhFbmNvZGluZ1J1bGUoKSB7Ci0JCQotCQlTdHJpbmcgZmlsZUxvY2F0aW9uID0gIi9maWxlcy9zaW1wbGUueG1sIjsKLQkJU3RyaW5nIGFic29sdXRlRmlsZUxvY2F0aW9uID0gUGxhdGZvcm0uZ2V0SW5zdGFuY2VMb2NhdGlvbigpLmdldFVSTCgpLmdldFBhdGgoKS50b1N0cmluZygpICsgZlByb2plY3ROYW1lICsgZmlsZUxvY2F0aW9uOwotCQkKLQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmUHJvamVjdE5hbWUgKyAiL2ZpbGVzL3NpbXBsZS54bWwiKSk7Ci0JCQotCQlYTUxEb2N1bWVudExvYWRlciB4bWxEb2N1bWVudExvYWRlciA9IG5ldyBYTUxEb2N1bWVudExvYWRlcigpOwotCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSBudWxsOwotCQkKLQkJdHJ5IHsKLQkJCWRvY3VtZW50ID0geG1sRG9jdW1lbnRMb2FkZXIuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KGFic29sdXRlRmlsZUxvY2F0aW9uLCBmaWxlLmdldENvbnRlbnRzKCkpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsJCi0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWFzc2VydE5vdE51bGwoImZhaWxlZCB0byBjcmVhdGUgZG9jdW1lbnQgZnJvbSBJbnB1dFN0cmVhbSB3aXRoIEVuY29kaW5nUnVsZSIsIGRvY3VtZW50KTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9UcmFuc2l0aW9uVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L1RyYW5zaXRpb25UZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGY2YzA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L1RyYW5zaXRpb25UZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9jdW1lbnQ7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5GaWxlQnVmZmVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLklUZXh0RmlsZUJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLklUZXh0RmlsZUJ1ZmZlck1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRFeHRlbnNpb24zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnRleHQucnVsZXMuU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTDsKLQotLyoqCi0gKiBAYXV0aG9yIG5zZAotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBUcmFuc2l0aW9uVGVzdHMgZXh0ZW5kcyBVbnppcHBlZFByb2plY3RUZXN0ZXIgewotCi0JLyoqCi0JICogCi0JICovCi0JcHVibGljIFRyYW5zaXRpb25UZXN0cygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb2Z0UmV2ZXJ0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVQYXRoID0gInRlc3RmaWxlcy94bWwvRW1wdHlGaWxlLnhtbCI7IC8vJE5PTi1OTFMtMSQKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlhc3NlcnROb3ROdWxsKCJUZXN0IENhc2UgaW4gZXJyb3IuIENvdWxkIG5vdCBmaW5kIGZpbGUgIiArIGZpbGVQYXRoLCBmaWxlKTsgLy8kTk9OLU5MUy0xJAotCQlJUGF0aCBsb2NhdGlvblBhdGggPSBmaWxlLmdldExvY2F0aW9uKCk7Ci0JCUlUZXh0RmlsZUJ1ZmZlck1hbmFnZXIgYnVmZmVyTWFuYWdlciA9IEZpbGVCdWZmZXJzLmdldFRleHRGaWxlQnVmZmVyTWFuYWdlcigpOwotCQlidWZmZXJNYW5hZ2VyLmNvbm5lY3QobG9jYXRpb25QYXRoLCBudWxsKTsKLQkJSVRleHRGaWxlQnVmZmVyIGJ1ZmZlciA9IGJ1ZmZlck1hbmFnZXIuZ2V0VGV4dEZpbGVCdWZmZXIobG9jYXRpb25QYXRoKTsKLQkJSURvY3VtZW50IGRvY3VtZW50ID0gYnVmZmVyLmdldERvY3VtZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoZG9jdW1lbnQpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBjbGFzcyBvZiBkb2N1bWVudCIsIGRvY3VtZW50IGluc3RhbmNlb2YgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQpOyAvLyROT04tTkxTLTEkCi0JCWFzc2VydFRydWUoIndyb25nIHBhcnRpdGlvbmVyIGluIGRvY3VtZW50LiIsICgoSURvY3VtZW50RXh0ZW5zaW9uMykgZG9jdW1lbnQpLmdldERvY3VtZW50UGFydGl0aW9uZXIoSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmcuREVGQVVMVF9TVFJVQ1RVUkVEX1BBUlRJVElPTklORykgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MKTsgLy8kTk9OLU5MUy0xJAotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdCgoSVN0cnVjdHVyZWREb2N1bWVudCkgZG9jdW1lbnQpOwotCQl0cnkgewotCQkJdHJ5IHsKLQkJCQlkb2N1bWVudC5yZXBsYWNlKDAsIDAsICJfXyIpOyAvLyROT04tTkxTLTEkCi0JCQkJZG9jdW1lbnQucmVwbGFjZSgyLCAwLCAiPGEiKTsgLy8kTk9OLU5MUy0xJAotCQkJCWRvY3VtZW50LnJlcGxhY2UoNCwgMCwgIj4iKTsgLy8kTk9OLU5MUy0xJAotCQkJCWRvY3VtZW50LnJlcGxhY2UoNSwgMCwgIiAgIik7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQkJYXNzZXJ0TnVsbChlKTsKLQkJCX0KLQkJCWRvY3VtZW50LnNldCgiIik7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCi0JCQlidWZmZXJNYW5hZ2VyLmRpc2Nvbm5lY3QobG9jYXRpb25QYXRoLCBudWxsKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L1VuemlwcGVkUHJvamVjdFRlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvVW56aXBwZWRQcm9qZWN0VGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4OGM1NGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvVW56aXBwZWRQcm9qZWN0VGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb2N1bWVudDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLlNTRU1vZGVsWE1MVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLQotCi0vKiAKLSAqIE1hZGUgYWJzdHJhY3QsIHNvIHdvbid0IGJlIGF1dG9tYXRpY2FsbHkgcGlja2VkIHVwIGFzIHRlc3QgKHNpbmNlIGludGVuZGVkIHRvIGJlIHN1YmNsYXNzZWQpLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgVW56aXBwZWRQcm9qZWN0VGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJvdGVjdGVkIHN0YXRpYyBJUHJvamVjdCBmVGVzdFByb2plY3Q7Ci0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBmVGVzdFByb2plY3RJbml0aWFsaXplZDsKLQlwcml2YXRlIHN0YXRpYyBpbnQgblNldHVwcyA9IDA7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfUFJPSkVDVF9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5uZXd0ZXN0cyI7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQluU2V0dXBzKys7Ci0JCWlmICghZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQpIHsKLQkJCWdldEFuZENyZWF0ZVByb2plY3QoKTsKLQkJCS8vIHVuemlwIGZpbGVzIHRvIHRoZSByb290IG9mIHdvcmtzcGFjZSBkaXJlY3RvcnkKLQkJCVN0cmluZyBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgPSBmVGVzdFByb2plY3QuZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCk7Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Gb2xkZXIgPSBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgKyAiLyI7Ci0JCQkvLyB0aGlzIHppcCBmaWxlIGlzIHNpdHRpbmcgaW4gdGhlICJyb290IiBvZiB0ZXN0IHBsdWdpbgotCQkJRmlsZSB6aXBGaWxlID0gU1NFTW9kZWxYTUxUZXN0c1BsdWdpbi5nZXRUZXN0RmlsZSgidGVzdGZpbGVzLnppcCIpOwotCQkJUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCQlwcm9qVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBkZXN0aW5hdGlvbkZvbGRlcik7Ci0JCQlwcm9qVXRpbC5pbml0SmF2YVByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQkJblNldHVwcy0tOwotCQlpZiAoblNldHVwcyA9PSAwKSB7Ci0JCQlpZiAoIURFQlVHKSB7Ci0JCQkJLy8JCQkJRGlzcGxheSBkaXNwbGF5ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCk7Ci0JCQkJLy8JCQkJZGlzcGxheS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgewotCQkJCS8vCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJLy8JCQkJCQlQcm9qZWN0VW56aXBVdGlsaXR5IHByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJCQkvLwkJCQkJCUlQcm9qZWN0IHByb2ogPSBmVGVzdFByb2plY3Q7Ci0JCQkJLy8JCQkJCQlmVGVzdFByb2plY3QgPSBudWxsOwotCQkJCS8vCQkJCQkJdHJ5IHsKLQkJCQkvLwkJCQkJCQlwcm9qVXRpbC5kZWxldGVQcm9qZWN0KHByb2opOwotCQkJCS8vCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkvLwkJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCS8vCQkJCQkJfQotCQkJCS8vCQkJCQl9Ci0JCQkJLy8JCQkJfSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGdldEFuZENyZWF0ZVByb2plY3QoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vVGVzdHNQbHVnaW4gdGVzdHNQbHVnaW4gPSAoVGVzdHNQbHVnaW4pCi0JCS8vIFBsYXRmb3JtLmdldFBsdWdpbigib3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLnRlc3RzIik7Ci0JCUlXb3Jrc3BhY2Ugd29ya3NwYWNlID0gZ2V0V29ya3NwYWNlKCk7Ci0JCUlXb3Jrc3BhY2VSb290IHJvb3QgPSB3b3Jrc3BhY2UuZ2V0Um9vdCgpOwotCQlmVGVzdFByb2plY3QgPSByb290LmdldFByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkvLyB0aGlzIGZvcm0gY3JlYXRlcyBwcm9qZWN0IGFzICJsaW5rZWQiIGJhY2sgdG8gJ2ZpbGVSb290JwotCQkvL2NyZWF0ZVByb2plY3QodGVzdFByb2plY3QsIG5ldyBQYXRoKGZpbGVSb290KSwgbnVsbCk7Ci0JCWNyZWF0ZVByb2plY3QoZlRlc3RQcm9qZWN0LCBudWxsLCBudWxsKTsKLQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQlhc3NlcnRUcnVlKGZUZXN0UHJvamVjdC5leGlzdHMoKSk7Ci0JCS8vCQlJQ29udGFpbmVyIGRvdGVzdEZpbGVzID0gdGVzdFByb2plY3QuZ2V0Rm9sZGVyKCJkb3Rlc3RGaWxlcyIpOwotCQkvLwkJYXNzZXJ0VHJ1ZShkb3Rlc3RGaWxlcy5leGlzdHMoKSk7Ci0JCS8vCQlJUmVzb3VyY2VbXSBhbGxGb2xkZXJzID0gZG90ZXN0RmlsZXMubWVtYmVycygpOwotCQkvLwkJYXNzZXJ0Tm90TnVsbChhbGxGb2xkZXJzKTsKLQl9Ci0gCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQYXRoIGxvY2F0aW9uUGF0aCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCW1vbml0b3IgPSBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOwotCQl9Ci0JCW1vbml0b3IuYmVnaW5UYXNrKCJjcmVhdGluZyB0ZXN0IHByb2plY3QiLCAxMCk7Ci0JCS8vIGNyZWF0ZSB0aGUgcHJvamVjdAotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOwotCQkJCWlmIChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLmVxdWFscyhsb2NhdGlvblBhdGgpKSB7Ci0JCQkJCWxvY2F0aW9uUGF0aCA9IG51bGw7Ci0JCQkJfQotCQkJCWRlc2Muc2V0TG9jYXRpb24obG9jYXRpb25QYXRoKTsKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjLCBtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJCWlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb25pdG9yICE9IG51bGwpIHsKLQkJCQltb25pdG9yLmRvbmUoKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHdvcmtzcGFjZSBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElXb3Jrc3BhY2UgZ2V0V29ya3NwYWNlKCkgewotCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvbS9OYW1lVmFsaWRhdG9yVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvbS9OYW1lVmFsaWRhdG9yVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFhYjkyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb20vTmFtZVZhbGlkYXRvclRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvbTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5OYW1lVmFsaWRhdG9yOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgTmFtZVZhbGlkYXRvclRlc3RzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBpbnQgblRyaWFscyA9IDEwMDsKLQotCXB1YmxpYyBOYW1lVmFsaWRhdG9yVGVzdHMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdChpbnQgdGVzdE51bWJlciwgU3RyaW5nIHRlc3RTdHJpbmcsIEJvb2xlYW4gZXhwZWN0ZWRWYWxpZGl0eSkgewotCQlib29sZWFuIGlzVmFsaWQgPSBOYW1lVmFsaWRhdG9yLmlzVmFsaWQodGVzdFN0cmluZyk7Ci0JCWFzc2VydEVxdWFscygidGVzdE51bWJlcjogIiArIHRlc3ROdW1iZXIsIGV4cGVjdGVkVmFsaWRpdHkuYm9vbGVhblZhbHVlKCksIGlzVmFsaWQpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SXNWYWxpZCgpIHsKLQkJT2JqZWN0W11bXSB0ZXN0ZWVzID0gbmV3IE9iamVjdFtdW117Ci0JCQkJCXsiaW5pdGlhbCIsQm9vbGVhbi5UUlVFfSwKLQkJCQkJeyJmb28iLEJvb2xlYW4uVFJVRX0sCi0JCQkJCXsiNCIsQm9vbGVhbi5GQUxTRX0sCi0JCQkJCXsiOTk5OSIsIEJvb2xlYW4uRkFMU0V9LAotCQkJCQl7ImY5OTk5IiwgQm9vbGVhbi5UUlVFfSwKLQkJCQkJeyIiLCBCb29sZWFuLkZBTFNFfSwKLQkJCQkJeyJnb3Qgc3BhY2UiLCBCb29sZWFuLkZBTFNFfSwKLQkJCQkJeyIgc3BhY2ViZWZvcmUiLCBCb29sZWFuLkZBTFNFfSwKLQkJCQkJeyJzcGFjZWFmdGVyICIsIEJvb2xlYW4uRkFMU0V9LAotCQkJCQl7Im5zOm5hbWVzcGFjZSIsIEJvb2xlYW4uVFJVRX0sCi0JCQkJCXsiOmZ1bm55bnMiLCBCb29sZWFuLlRSVUV9LAotCQkJCQkvKiBJU1NVRTogaXMgImVuZG5zOiIgcmVhbGx5IHZhbGlkIG5hbWUgKi8KLQkJCQkJeyJlbmRuczoiLCBCb29sZWFuLlRSVUV9LAotCQkJCQl7InVzX3VuZGVyc2NvcmUiLCBCb29sZWFuLlRSVUV9LAotCQkJCQl7Il91bmRlcnNjb3JlIiwgQm9vbGVhbi5UUlVFfSwKLQkJCQkJeyJ1bmRlcnNjb3JlXyIsIEJvb2xlYW4uVFJVRX0sCi0JCQkJCXsiYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplIiwgQm9vbGVhbi5UUlVFfSwKLQkJCQkJfTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0ZXN0ZWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlmb3IgKGludCBqID0gMDsgaiA8IG5UcmlhbHM7IGorKykgewotCQkJCWRvVGVzdChpLCAoU3RyaW5nKXRlc3RlZXNbaV1bMF0sIChCb29sZWFuKSB0ZXN0ZWVzW2ldWzFdKTsKLQkJCX0KLQkJfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdEZyYWdGaWxlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0RnJhZ0ZpbGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjExNWIxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0RnJhZ0ZpbGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdCdWZmZXJJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLQotCi0KLXB1YmxpYyBjbGFzcyBUZXN0RnJhZ0ZpbGUgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RnJhZygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCi0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQotCQlTdHJpbmcgdGVzdFN0cmluZzEgPSAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XHJcbiIgKyAiPCEtLVRoaXMgaXMgYW4gaW50ZXJuYWxseSBnZW5lcmF0ZWQgZmlsZSAtIG1hbnVhbCBjaGFuZ2VzIHRvIGl0IHdpbGwgYmUgaWdub3JlZCBhbmQgb3ZlcndyaXR0ZW4uLS0+XHJcbiIgKyAiPEZyYWdtZW50IHBhcmVudD1cIi9lamItamFyL2VudGVycHJpc2UtYmVhbnMmbHQ7ZGVzY3JpcHRpb24sZGlzcGxheS1uYW1lLHNtYWxsLWljb24sbGFyZ2UtaWNvblwiIGRlc3RpbmF0aW9uPVwiZWpiLWphci54bWxcIiB0eXBlPVwieG1sXCIgeG1saWQ9XCJpZCx4bWk6aWRcIiB0YWdTZXQ9XCJlamJcIj5cclxuIiArICI8c2Vzc2lvbiBpZD1cImVqYnMuVGVzdEJlYW5cIj5cclxuIiArICI8ZWpiLW5hbWU+VGVzdDwvZWpiLW5hbWU+XHJcbiIgKyAiPGhvbWU+ZWpicy5UZXN0SG9tZTwvaG9tZT5cclxuIiArICI8cmVtb3RlPmVqYnMuVGVzdDwvcmVtb3RlPlxyXG4iICsgIjxlamItY2xhc3M+ZWpicy5UZXN0QmVhbjwvZWpiLWNsYXNzPlxyXG4iICsgIjxzZXNzaW9uLXR5cGU+U3RhdGVsZXNzPC9zZXNzaW9uLXR5cGU+XHJcbiIgKyAiPHRyYW5zYWN0aW9uLXR5cGU+Q29udGFpbmVyPC90cmFuc2FjdGlvbi10eXBlPlxyXG4iICsgIjwvc2Vzc2lvbj5cclxuIiArICI8L0ZyYWdtZW50PiI7Ci0KLQotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbSh0ZXN0U3RyaW5nMS5nZXRCeXRlcygidXRmOCIpKTsKLQotCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvclJlYWQoInRlc3QuZnJhZyIsIGlucHV0U3RyZWFtLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotCi0JCVN5c3RlbS5vdXQucHJpbnRsbihtb2RlbCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZyYWdYKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0KLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCVN0cmluZyB0ZXN0U3RyaW5nID0gIjwhLS1UaGlzIGlzIGFuIGludGVybmFsbHkgZ2VuZXJhdGVkIGZpbGUgLSBtYW51YWwgY2hhbmdlcyB0byBpdCB3aWxsIGJlIGlnbm9yZWQgYW5kIG92ZXJ3cml0dGVuLi0tPlxyXG4iICsgIjxGcmFnbWVudCBwYXJlbnQ9XCIvZWpiLWphci9lbnRlcnByaXNlLWJlYW5zJmx0O2Rlc2NyaXB0aW9uLGRpc3BsYXktbmFtZSxzbWFsbC1pY29uLGxhcmdlLWljb25cIiBkZXN0aW5hdGlvbj1cImVqYi1qYXIueG1sXCIgdHlwZT1cInhtbFwiIHhtbGlkPVwiaWQseG1pOmlkXCIgdGFnU2V0PVwiZWpiXCI+XHJcbiIgKyAiPHNlc3Npb24gaWQ9XCJlamJzLlRlc3RCZWFuXCI+XHJcbiIgKyAiPGVqYi1uYW1lPlRlc3Q8L2VqYi1uYW1lPlxyXG4iICsgIjxob21lPmVqYnMuVGVzdEhvbWU8L2hvbWU+XHJcbiIgKyAiPHJlbW90ZT5lamJzLlRlc3Q8L3JlbW90ZT5cclxuIiArICI8ZWpiLWNsYXNzPmVqYnMuVGVzdEJlYW48L2VqYi1jbGFzcz5cclxuIiArICI8c2Vzc2lvbi10eXBlPlN0YXRlbGVzczwvc2Vzc2lvbi10eXBlPlxyXG4iICsgIjx0cmFuc2FjdGlvbi10eXBlPkNvbnRhaW5lcjwvdHJhbnNhY3Rpb24tdHlwZT5cclxuIiArICI8L3Nlc3Npb24+XHJcbiIgKyAiPC9GcmFnbWVudD4iOwotCi0KLQkJSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBuZXcgU3RyaW5nQnVmZmVySW5wdXRTdHJlYW0odGVzdFN0cmluZyk7Ci0KLQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JSZWFkKCJ0ZXN0LmZyYWd4IiwgaW5wdXRTdHJlYW0sIG51bGwpOyAvLyROT04tTkxTLTEkCi0KLQkJU3lzdGVtLm91dC5wcmludGxuKG1vZGVsKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpKTsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0TW9kZWxNYW5hZ2VyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0TW9kZWxNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyYTIxNWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsTWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjY1ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnNlcnZpY2UuZGF0YWxvY2F0aW9uLkxvY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5leGNlcHRpb25zLlJlc291cmNlQWxyZWFkeUV4aXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXhjZXB0aW9ucy5SZXNvdXJjZUluVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLQotcHVibGljIGNsYXNzIFRlc3RNb2RlbE1hbmFnZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlByb2plY3ROYW1lID0gIkRPQ1VNRU5ULUxPQURFUiI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlppcEZpbGVOYW1lID0gInhtbC1kb2N1bWVudC1sb2FkZXItdGVzdHMuemlwIjsKLQotCXB1YmxpYyBUZXN0TW9kZWxNYW5hZ2VyKCkgewotCQlzdXBlcigiVGVzdE1vZGVsTWFuYWdlciIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJc3VwZXIuc2V0VXAoKTsKLQkJaWYgKCF0aGlzLmlzU2V0dXApIHsKLQkJCWRvU2V0dXAoKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9TZXR1cCgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCS8vIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQlMb2NhdGlvbiBwbGF0Zm9ybUxvY2F0aW9uID0gUGxhdGZvcm0uZ2V0SW5zdGFuY2VMb2NhdGlvbigpOwotCi0JCVByb2plY3RVbnppcFV0aWxpdHkgdW56aXBVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJRmlsZSB6aXBGaWxlID0gRmlsZVV0aWwubWFrZUZpbGVGb3IoUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSLCBmWmlwRmlsZU5hbWUsIFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUik7Ci0JCXVuemlwVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBwbGF0Zm9ybUxvY2F0aW9uLmdldFVSTCgpLmdldEZpbGUoKSk7Ci0JCXVuemlwVXRpbC5pbml0SmF2YVByb2plY3QoZlByb2plY3ROYW1lKTsKLQl9Ci0KLQkvKioKLQkgKiBtdXN0IHJlbGVhc2UgYWZ0ZXIgdXNlIQotCSAqIAotCSAqIEByZXR1cm4KLQkgKi8KLQlwcml2YXRlIElTdHJ1Y3R1cmVkTW9kZWwgZ2V0U3RydWN0dXJlZE1vZGVsRm9yRWRpdCgpIHsKLQkJLy8gZnJvbSBhIGZpbGUKLQkJSUZpbGUgZiA9IGdldEZpbGUoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KGYpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG1vZGVsOwotCX0KLQotCXByaXZhdGUgSUZpbGUgZ2V0RmlsZSgpIHsKLQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmUHJvamVjdE5hbWUgKyAiL2ZpbGVzL3NpbXBsZS54bWwiKSk7Ci0JfQotCQotCXByaXZhdGUgSU1vZGVsTWFuYWdlciBnZXRNTSgpIHsKLQkJcmV0dXJuIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvcHlNb2RlbCgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IGdldFN0cnVjdHVyZWRNb2RlbEZvckVkaXQoKTsKLQkJCXRyeSB7Ci0JCQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbENvcHkgPSBnZXRNTSgpLmNvcHlNb2RlbEZvckVkaXQobW9kZWwuZ2V0SWQoKSwgIm5ld0lkIik7Ci0JCQkJYXNzZXJ0Tm90TnVsbCgiY29waWVkIG1vZGVsIHdhcyBudWxsIiwgbW9kZWxDb3B5KTsKLQkJCX0KLQkJCWNhdGNoIChSZXNvdXJjZUluVXNlIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQkJCi0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVOZXdJbnN0YW5jZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JFZGl0KCk7Ci0JCQlJU3RydWN0dXJlZE1vZGVsIG5ld0luc3RhbmNlID0gZ2V0TU0oKS5jcmVhdGVOZXdJbnN0YW5jZShtb2RlbCk7Ci0JCQlhc3NlcnRUcnVlKCJmYWlsZWQgdG8gY3JlYXRlIG5ldyBpbnN0YW5jZSBvZjogIiArIG1vZGVsLCBtb2RlbCAhPSBuZXdJbnN0YW5jZSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlGaWxlIGZpbGUgPSBnZXRGaWxlKCk7Ci0JCQkvLyBlbnN1cmUgbW9kZWwgYWxyZWFkeSBleGlzdHMKLQkJCW1vZGVsID0gZ2V0U3RydWN0dXJlZE1vZGVsRm9yRWRpdCgpOwotCQkJYm9vbGVhbiByZXNvdXJjZUV4aXN0cyA9IGZhbHNlOwotCQkJdHJ5IHsKLQkJCQlnZXRNTSgpLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudEZvcihmaWxlKTsKLQkJCX0KLQkJCWNhdGNoKFJlc291cmNlQWxyZWFkeUV4aXN0cyBleCkgewotCQkJCXJlc291cmNlRXhpc3RzID0gdHJ1ZTsKLQkJCX0KLQkJCWFzc2VydFRydWUoInNob3VsZCBoYXZlIGdvdHRlbiBSZXNvdXJjZUFscmVhZHlFeGl0cyBleGNlcHRpb24iLCByZXNvdXJjZUV4aXN0cyk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoKSAgdGhyb3dzIElPRXhjZXB0aW9uLCBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlGaWxlIGZpbGUgPSBnZXRGaWxlKCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBnZXRNTSgpLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcihmaWxlKTsKLQkJCWFzc2VydE5vdE51bGwoImZhaWxlZCB0byBjcmVhdGUgc3RydWN0dXJlZCBkb2N1bWVudCIsIHNEb2MpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RXhpc3RpbmdNb2RlbEZyb21GaWxlKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSUZpbGUgZiA9IGdldEZpbGUoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgZXhpc3RpbmdNb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IGdldFN0cnVjdHVyZWRNb2RlbEZvckVkaXQoKTsKLQkJCWV4aXN0aW5nTW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldEV4aXN0aW5nTW9kZWxGb3JFZGl0KGYpOwotCQkJYXNzZXJ0Tm90TnVsbCgiZmFpbGVkIHRvIGdldCBleGlzdGluZyBtb2RlbCIsIGV4aXN0aW5nTW9kZWwpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQlpZiAoZXhpc3RpbmdNb2RlbCAhPSBudWxsKQotCQkJCWV4aXN0aW5nTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQkJCi0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RXhpc3RpbmdNb2RlbEZyb21Eb2N1bWVudCgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgZ290dGVuTW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JFZGl0KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJZ290dGVuTW9kZWwgPSBnZXRNTSgpLmdldEV4aXN0aW5nTW9kZWxGb3JFZGl0KGRvYyk7Ci0JCQlhc3NlcnRUcnVlKCJtb2RlbHMgc2hvdWxkIGJlIHRoZSBzYW1lIGluc3RhbmNlIiwgbW9kZWwgPT0gZ290dGVuTW9kZWwpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQlpZiAoZ290dGVuTW9kZWwgIT0gbnVsbCkKLQkJCQlnb3R0ZW5Nb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0TW9kZWxGcm9tRmlsZSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGYgPSBnZXRGaWxlKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdChmKTsKLQkJCWFzc2VydE5vdE51bGwoImZhaWxlZCB0byBnZXQgbW9kZWwiLCBtb2RlbCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRNb2RlbEZyb21Eb2N1bWVudCgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgZ290dGVuTW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JFZGl0KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkgICAgZ290dGVuTW9kZWwgPSBnZXRNTSgpLmdldE1vZGVsRm9yRWRpdChkb2MpOwotCQkJYXNzZXJ0VHJ1ZSgibW9kZWxzIHNob3VsZCBiZSB0aGUgc2FtZSBpbnN0YW5jZSIsIG1vZGVsID09IGdvdHRlbk1vZGVsKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJaWYgKGdvdHRlbk1vZGVsICE9IG51bGwpCi0JCQkJZ290dGVuTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SXNTaGFyZWQoKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsMiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IGdldFN0cnVjdHVyZWRNb2RlbEZvckVkaXQoKTsKLQkJCW1vZGVsMiA9IGdldFN0cnVjdHVyZWRNb2RlbEZvckVkaXQoKTsKLQkJCS8vIFRPRE86IHdpbGwgY2hhbmdlIHdoZW4gQVBJIGFkZGVkIHRvIE1NCi0JCQlib29sZWFuIGlzU2hhcmVkID0gZ2V0TU0oKS5pc1NoYXJlZChtb2RlbC5nZXRJZCgpKTsKLQkJCWFzc2VydFRydWUoIm1vZGVsIHNob3VsZCBiZSBzaGFyZWQiLCBpc1NoYXJlZCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCWlmIChtb2RlbDIgIT0gbnVsbCkKLQkJCQltb2RlbDIucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVpbml0aWFsaXplKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IGdldFN0cnVjdHVyZWRNb2RlbEZvckVkaXQoKTsKLQkJCWdldE1NKCkucmVpbml0aWFsaXplKG1vZGVsKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlbGVhc2VNb2RlbCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIFRPRE86IHdpbGwgbmVlZCB0byBpbXBsZW1lbnQgd2hlbiBNTSBoYXMgdGhpcyBmdW5jdGlvbgotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTYXZlTW9kZWwoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gZ2V0U3RydWN0dXJlZE1vZGVsRm9yRWRpdCgpOwotCQkJLy8gVE9ETzogd2lsbCBuZWVkIHRvIGNoYW5nZSB3aGVuIE1NIGhhcyB0aGlzIGZ1bmN0aW9uCi0JCQltb2RlbC5zYXZlKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTYXZlTW9kZWxJZk5vdFNoYXJlZCgpIHsKLQkJLy8gVE9ETzogd2lsbCBuZWVkIHRvIGltcGxlbWVudCB3aGVuIE1NIGhhcyB0aGlzIGZ1bmN0aW9uCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsc0Zyb21GaWxlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsc0Zyb21GaWxlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGE5YWY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbHNGcm9tRmlsZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ0J1ZmZlcklucHV0U3RyZWFtOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5GaWxlQnVmZmVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLklUZXh0RmlsZUJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLklUZXh0RmlsZUJ1ZmZlck1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5leGNlcHRpb25zLlJlc291cmNlQWxyZWFkeUV4aXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXhjZXB0aW9ucy5SZXNvdXJjZUluVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC50ZXh0LkJhc2ljU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC50ZXh0LnJ1bGVzLlN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50LlVuemlwcGVkUHJvamVjdFRlc3RlcjsKLQotCi0KLXB1YmxpYyBjbGFzcyBUZXN0TW9kZWxzRnJvbUZpbGVzIGV4dGVuZHMgVW56aXBwZWRQcm9qZWN0VGVzdGVyIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ORVhJU1RFTlRfRklMRU5BTUUxID0gInRlc3RmaWxlcy94bWwvdGVzdG5vbmV4aXN0ZW50MS54bWwiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOT05FWElTVEVOVF9GSUxFTkFNRTIgPSAidGVzdGZpbGVzL3htbC90ZXN0bm9uZXhpc3RlbnQyLnhtbCI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5PTkVYSVNURU5UX0ZJTEVOQU1FMyA9ICJ0ZXN0ZmlsZXMveG1sL3Rlc3Rub25leGlzdGVudDMueG1sIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhJU1RFTlRfRklMRU5BTUUxID0gInRlc3RmaWxlcy94bWwvdGVzdE5vcm1hbENhc2UueG1sIjsKLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uRXhpc3RlbnRGaWxlV2l0aEJ1ZmZlcigpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlQnVmZmVyKE5PTkVYSVNURU5UX0ZJTEVOQU1FMSwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb25FeGlzdGVudFhNTCgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKE5PTkVYSVNURU5UX0ZJTEVOQU1FMiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb25FeGlzdGVudFhNTElEcygpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlSURzKE5PTkVYSVNURU5UX0ZJTEVOQU1FMywgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVDYXNlKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoRVhJU1RFTlRfRklMRU5BTUUxLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZENvbnRlbnRzQW5kQ3JlYXRlRmlsZShJRmlsZSBmaWxlKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCVN0cmluZ0J1ZmZlcklucHV0U3RyZWFtIHN0cmluZ1N0cmVhbSA9IG5ldyBTdHJpbmdCdWZmZXJJbnB1dFN0cmVhbSgidGVzdGluZyB0ZXN0aW5nIHRlc3RpbmciKTsKLQkJZmlsZS5jcmVhdGUoc3RyaW5nU3RyZWFtLCBmYWxzZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHN0cmluZwotCSAqIEBwYXJhbSBjbGFzczEKLQkgKiBAcGFyYW0gY2xhc3MyCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgUmVzb3VyY2VJblVzZQotCSAqIEB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzCi0JICovCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdENyZWF0ZShTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGNsYXNzMSwgQ2xhc3MgY2xhc3MyKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlpZiAoZmlsZSA9PSBudWxsKSB7Ci0JCQlmaWxlID0gZlRlc3RQcm9qZWN0LmdldEZpbGUoZmlsZVBhdGgpOwotCQl9Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TmV3TW9kZWxGb3JFZGl0KGZpbGUsIHRydWUpOwotCQl0cnkgewotCQkJLy8gY291bnQgYXMgc3VjY2VzcyBpZiBnZXRzIHRvIGhlZXIgd2l0aG91dCBleGNlcHRpb24KLQkJCWFzc2VydFRydWUodHJ1ZSk7Ci0JCQlTdHJpbmcgZmlsZUxvY2F0aW9uID0gbW9kZWwuZ2V0QmFzZUxvY2F0aW9uKCk7Ci0JCQlTdHJpbmcgaWQgPSBtb2RlbC5nZXRJZCgpOwotCQkJaWYgKERFQlVHKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJmaWxlTG9jYXRpb246ICIgKyBmaWxlTG9jYXRpb24pOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiaWQ6ICIgKyBpZCk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RDcmVhdGVCdWZmZXIoU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBjbGFzczEsIENsYXNzIGNsYXNzMikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWlmIChmaWxlID09IG51bGwpIHsKLQkJCWZpbGUgPSBmVGVzdFByb2plY3QuZ2V0RmlsZShmaWxlUGF0aCk7Ci0JCX0KLQotCQlJVGV4dEZpbGVCdWZmZXIgZmlsZUJ1ZmZlckJlZm9yZUV4aXN0cyA9IGdldFRleHRCdWZmZXIoZmlsZSk7Ci0KLQkJYWRkQ29udGVudHNBbmRDcmVhdGVGaWxlKGZpbGUpOwotCi0JCUlUZXh0RmlsZUJ1ZmZlciBmaWxlQnVmZmVyQWZ0ZXJFeGlzdHMgPSBnZXRUZXh0QnVmZmVyKGZpbGUpOwotCi0JCWJvb2xlYW4gYnVmZmVyc0lkZW50aWNhbCA9IGZpbGVCdWZmZXJCZWZvcmVFeGlzdHMgPT0gZmlsZUJ1ZmZlckFmdGVyRXhpc3RzOwotCQlhc3NlcnRUcnVlKGJ1ZmZlcnNJZGVudGljYWwpOwotCQlpZiAoREVCVUcpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihmaWxlQnVmZmVyQmVmb3JlRXhpc3RzLmdldExvY2F0aW9uKCkpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKGZpbGVCdWZmZXJBZnRlckV4aXN0cy5nZXRMb2NhdGlvbigpKTsKLQkJfQotCQkKLQotCi0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdENyZWF0ZUlEcyhTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGNsYXNzMSwgQ2xhc3MgY2xhc3MyKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlpZiAoZmlsZSA9PSBudWxsKSB7Ci0JCQlmaWxlID0gZlRlc3RQcm9qZWN0LmdldEZpbGUoZmlsZVBhdGgpOwotCQl9Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TmV3TW9kZWxGb3JFZGl0KGZpbGUsIHRydWUpOwotCi0JCXRyeSB7Ci0JCQlhc3NlcnROb3ROdWxsKG1vZGVsKTsKLQkJCWlmIChERUJVRykgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiSUQ6ICIgKyBtb2RlbC5nZXRJZCgpKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJhc2VMb2NhdGlvbiIgKyBtb2RlbC5nZXRCYXNlTG9jYXRpb24oKSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSBJVGV4dEZpbGVCdWZmZXIgZ2V0VGV4dEJ1ZmZlcihJRmlsZSBmaWxlKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlUZXh0RmlsZUJ1ZmZlck1hbmFnZXIgZmlsZUJ1ZmZlck1hbmFnZXIgPSBGaWxlQnVmZmVycy5nZXRUZXh0RmlsZUJ1ZmZlck1hbmFnZXIoKTsKLQkJSVBhdGggZmlsZUlQYXRoID0gZmlsZS5nZXRGdWxsUGF0aCgpOwotCQlJUGF0aCBub3JtYWxpemVkUGF0aCA9IEZpbGVCdWZmZXJzLm5vcm1hbGl6ZUxvY2F0aW9uKGZpbGVJUGF0aCk7Ci0JCWZpbGVCdWZmZXJNYW5hZ2VyLmNvbm5lY3Qobm9ybWFsaXplZFBhdGgsIG51bGwpOwotCQlJVGV4dEZpbGVCdWZmZXIgYnVmZmVyID0gZmlsZUJ1ZmZlck1hbmFnZXIuZ2V0VGV4dEZpbGVCdWZmZXIobm9ybWFsaXplZFBhdGgpOwotCQlyZXR1cm4gYnVmZmVyOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdFN0cnVjdHVyZWRNb2RlbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdFN0cnVjdHVyZWRNb2RlbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjRiMzdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RTdHJ1Y3R1cmVkTW9kZWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyNCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnNlcnZpY2UuZGF0YWxvY2F0aW9uLkxvY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxTdGF0ZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5YTUxNb2RlbExvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotCi1wdWJsaWMgY2xhc3MgVGVzdFN0cnVjdHVyZWRNb2RlbCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0JcHJpdmF0ZSBYTUxNb2RlbExvYWRlciBmTG9hZGVyID0gbnVsbDsKLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZQcm9qZWN0TmFtZSA9ICJET0NVTUVOVC1MT0FERVIiOwotCS8vIGlzIGl0IGEgcHJvYmxlbSB0byB1bnppcCB0aGUgc2FtZSBwcm9qZWN0IGluCi0JLy8gZGlmZmVyZW50IHRlc3RzPwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZaaXBGaWxlTmFtZSA9ICJ4bWwtZG9jdW1lbnQtbG9hZGVyLXRlc3RzLnppcCI7Ci0KLQlwdWJsaWMgVGVzdFN0cnVjdHVyZWRNb2RlbCgpIHsKLQkJc3VwZXIoIlRlc3RTdHJ1Y3R1cmVkTW9kZWwiKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCXN1cGVyLnNldFVwKCk7Ci0JCWlmICghdGhpcy5pc1NldHVwKSB7Ci0JCQlmTG9hZGVyID0gbmV3IFhNTE1vZGVsTG9hZGVyKCk7Ci0JCQlkb1NldHVwKCk7Ci0JCQl0aGlzLmlzU2V0dXAgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvU2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQkvLyByb290IG9mIHdvcmtzcGFjZSBkaXJlY3RvcnkKLQkJTG9jYXRpb24gcGxhdGZvcm1Mb2NhdGlvbiA9IFBsYXRmb3JtLmdldEluc3RhbmNlTG9jYXRpb24oKTsKLQotCQlQcm9qZWN0VW56aXBVdGlsaXR5IHVuemlwVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCUZpbGUgemlwRmlsZSA9IEZpbGVVdGlsLm1ha2VGaWxlRm9yKFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUiwgZlppcEZpbGVOYW1lLCBQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIpOwotCQl1bnppcFV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgcGxhdGZvcm1Mb2NhdGlvbi5nZXRVUkwoKS5nZXRGaWxlKCkpOwotCQl1bnppcFV0aWwuaW5pdEphdmFQcm9qZWN0KGZQcm9qZWN0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFib3V0VG9DaGFuZ2VNb2RlbCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCW1vZGVsLmFib3V0VG9DaGFuZ2VNb2RlbCgpOwotCQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QWRkUmVtb3ZlTW9kZWxTdGF0ZUxpc3RlbmVyKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSU1vZGVsU3RhdGVMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBJTW9kZWxTdGF0ZUxpc3RlbmVyKCkgewotCi0JCQkJcHVibGljIHZvaWQgbW9kZWxBYm91dFRvQmVDaGFuZ2VkKElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwpIHsKLQkJCQkJLy8KLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBtb2RlbENoYW5nZWQoSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCkgewotCQkJCQkvLyAJCi0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgbW9kZWxEaXJ0eVN0YXRlQ2hhbmdlZChJU3RydWN0dXJlZE1vZGVsIG1vZGVsLCBib29sZWFuIGlzRGlydHkpIHsKLQkJCQkJLy8KLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBtb2RlbFJlc291cmNlRGVsZXRlZChJU3RydWN0dXJlZE1vZGVsIG1vZGVsKSB7Ci0JCQkJCS8vIAotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIG1vZGVsUmVzb3VyY2VNb3ZlZChJU3RydWN0dXJlZE1vZGVsIG9sZE1vZGVsLCBJU3RydWN0dXJlZE1vZGVsIG5ld01vZGVsKSB7Ci0JCQkJCS8vIAkJCi0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgbW9kZWxBYm91dFRvQmVSZWluaXRpYWxpemVkKElTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsKSB7Ci0JCQkJCS8vIAkKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBtb2RlbFJlaW5pdGlhbGl6ZWQoSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwpIHsKLQkJCQkJLy8gCi0JCQkJfQotCQkJfTsKLQotCQkJbW9kZWwuYWJvdXRUb0NoYW5nZU1vZGVsKCk7Ci0KLQkJCW1vZGVsLnJlbW92ZU1vZGVsU3RhdGVMaXN0ZW5lcihsaXN0ZW5lcik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0KLQkvKioKLQkgKiBUZXN0IGV4cGVjdGVzIGFuIGV4Y2VwdGlvbiBzaW5jZSBvbmx5IGEgY2hhbmdlZE1vZGVsIHNlbnQsIHdpdGhvdXQKLQkgKiBiZWdpbm5pbmcgJ2Fib3V0VG9DaGFuZ2VNb2RlbCcKLQkgKiAKLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdENoYW5nZWRNb2RlbCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCXRyeSB7Ci0JCQkJbW9kZWwuY2hhbmdlZE1vZGVsKCk7Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQlhc3NlcnRUcnVlKGUgaW5zdGFuY2VvZiBJbGxlZ2FsU3RhdGVFeGNlcHRpb24pOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50VHlwZSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCVN0cmluZyBjdCA9IG1vZGVsLmdldENvbnRlbnRUeXBlSWRlbnRpZmllcigpOwotCQkJYXNzZXJ0VHJ1ZSgibW9kZWwgaGFzIHdyb25nIGNvbnRlbnQgdHlwZToiICsgY3QgKyAiICE9ICIgKyBDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MLCBjdC5lcXVhbHMoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRCYXNlTG9jYXRpb24oKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlTdHJpbmcgbG9jYXRpb24gPSBtb2RlbC5nZXRCYXNlTG9jYXRpb24oKTsKLQkJCWFzc2VydFRydWUoIndyb25nIGJhc2UgbG9jYXRpb24iLCBsb2NhdGlvbi5lcXVhbHMoIi8iICsgZlByb2plY3ROYW1lICsgIi9maWxlcy9zaW1wbGUueG1sIikpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEdldEZhY3RvcnlSZWdpc3RyeSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCW1vZGVsLmdldEZhY3RvcnlSZWdpc3RyeSgpOwotCQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0SW5kZXhlZFJlZ2lvbigpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCW1vZGVsLmdldEluZGV4ZWRSZWdpb24oMCk7Ci0JCQlhc3NlcnRUcnVlKHRydWUpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRJbmRleGVkUmVnaW9ucygpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCS8vIG5vdCBpbXBsZW1lbnRlZCB5ZXQuLi4KLQkJCS8vIG1vZGVsLmdldEluZGV4ZWRSZWdpb25zKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0U3RydWN0dXJlZERvY3VtZW50KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCWFzc2VydE5vdE51bGwoImRvY3VtZW50IGlzIG51bGwiLCBkb2MpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJc0RpcnR5KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJYXNzZXJ0RmFsc2UoIm1vZGVsIHNob3VsZCBub3QgYmUgZGlydHkiLCBtb2RlbC5pc0RpcnR5KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJc01vZGVsU3RhdGVDaGFuZ2luZygpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJYXNzZXJ0RmFsc2UoIm1vZGVsIHNob3VsZCBub3QgYmUgY2hhbmdpbmciLCBtb2RlbC5pc01vZGVsU3RhdGVDaGFuZ2luZygpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SXNOZXcoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCS8vIHRoaXMgQVBJIHNlZW1zIHN0cmFuZ2UKLQkJLy8gYXNzZXJ0RmFsc2UoIm5ldyBtb2RlbCBjaGVjayBmYWlsZWQiLCBtb2RlbC5pc05ldygpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SXNSZWluaXRpYWxpemF0aW9uTmVlZGVkKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQlhc3NlcnRGYWxzZSgicmVpbml0aWFsaXphdGlvbiBzaG91bGQgbm90IGJlIG5lZWRlZCIsIG1vZGVsLmlzUmVpbml0aWFsaXphdGlvbk5lZWRlZCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RJc1NhdmVOZWVkZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlhc3NlcnRGYWxzZSgic2F2ZSBzaG91bGQgbm90IGJlIG5lZWRlZCIsIG1vZGVsLmlzU2F2ZU5lZWRlZCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TmV3SW5zdGFuY2UoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZE1vZGVsIG5ld0luc3RhbmNlID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJbmV3SW5zdGFuY2UgPSBtb2RlbC5uZXdJbnN0YW5jZSgpOwotCQkJfQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQlhc3NlcnRUcnVlKCJJT0V4Y2VwdGlvbiBkdXJpbmcgbW9kZWwgbmV3IGluc3RhbmNlIiwgZmFsc2UpOwotCQkJfQotCQkJYXNzZXJ0Tm90TnVsbCgibmV3IGluc3RhbmNlIGlzIG51bGwiLCBuZXdJbnN0YW5jZSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogQmUgc3VyZSB0byByZWxlYXNlIGFueSBtb2RlbHMgb2J0YWluZWQgZnJvbSB0aGlzIG1ldGhvZC4KLQkgKiAKLQkgKi8KLQlJU3RydWN0dXJlZE1vZGVsIGdldFRlc3RNb2RlbCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0KLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChmUHJvamVjdE5hbWUpOwotCQlJRmlsZSBpRmlsZSA9IChJRmlsZSkgcHJvamVjdC5maW5kTWVtYmVyKCIvZmlsZXMvc2ltcGxlLnhtbCIpOwotCQkvLyBmUHJvamVjdE5hbWUgKyAiL2ZpbGVzL3NpbXBsZS54bWwiCi0KLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChpRmlsZSk7Ci0KLQotCQlyZXR1cm4gbW9kZWw7Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0WE1MTW9kZWxMb2FkZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RYTUxNb2RlbExvYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDY4MzI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RYTUxNb2RlbExvYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kuc2VydmljZS5kYXRhbG9jYXRpb24uTG9jYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLlhNTE1vZGVsTG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsLlByb2plY3RVbnppcFV0aWxpdHk7Ci0KLS8qKgotICoKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgVGVzdFhNTE1vZGVsTG9hZGVyIGV4dGVuZHMgVGVzdENhc2UgewotCQotCXByaXZhdGUgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0JcHJpdmF0ZSBYTUxNb2RlbExvYWRlciBmTG9hZGVyID0gbnVsbDsKLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZQcm9qZWN0TmFtZSA9IkRPQ1VNRU5ULUxPQURFUiI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlppcEZpbGVOYW1lID0gInhtbC1kb2N1bWVudC1sb2FkZXItdGVzdHMuemlwIjsKLQkKLQkKLSAgICBwdWJsaWMgVGVzdFhNTE1vZGVsTG9hZGVyKCkgewotICAgICAgICBzdXBlcigiVGVzdE1vZGVsTG9hZGVyIik7Ci0gICAgfQotCQotICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotICAgIAlzdXBlci5zZXRVcCgpOwotCQlpZighdGhpcy5pc1NldHVwKXsKLQkJCWZMb2FkZXIgPSBuZXcgWE1MTW9kZWxMb2FkZXIoKTsKLQkJCWRvU2V0dXAoKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLSAgICB9Ci0JCi0JcHJpdmF0ZSB2b2lkIGRvU2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsJCi0JCi0JCS8vIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQlMb2NhdGlvbiBwbGF0Zm9ybUxvY2F0aW9uID0gUGxhdGZvcm0uZ2V0SW5zdGFuY2VMb2NhdGlvbigpOwotCQkKLQkJUHJvamVjdFVuemlwVXRpbGl0eSB1bnppcFV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQlGaWxlIHppcEZpbGUgPSBGaWxlVXRpbC5tYWtlRmlsZUZvcihQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIsIGZaaXBGaWxlTmFtZSwgUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSKTsKLQkJdW56aXBVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIHBsYXRmb3JtTG9jYXRpb24uZ2V0VVJMKCkuZ2V0RmlsZSgpKTsKLQkJdW56aXBVdGlsLmluaXRKYXZhUHJvamVjdChmUHJvamVjdE5hbWUpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlRW1wdHlNb2RlbCgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGZMb2FkZXIuY3JlYXRlTW9kZWwoKTsKLQkJYXNzZXJ0Tm90TnVsbCgibW9kZWwgaXMgbnVsbCIsIG1vZGVsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZU1vZGVsV2l0aERvY3VtZW50KCkgewotCQlJU3RydWN0dXJlZE1vZGVsIGVtcHR5TW9kZWwgPSBmTG9hZGVyLmNyZWF0ZU1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IGVtcHR5TW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCXNEb2Muc2V0KCI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/PlxuPHRlc3Q+XG48aXRlbSBhdHRyPVwidmFsXCIgLz48L3Rlc3Q+XG4iKTsKLQkJCi0JCS8vIG51bGwgaGFuZGxkZXIgaXMgbm9ybWFsbHkgbm90IHZhbGlkLCBpbmNsdWRpbmcgb25seSBmb3IgdGhpcyB0ZXN0LgotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsRnJvbURvYyA9IGZMb2FkZXIuY3JlYXRlTW9kZWwoc0RvYywgIi90ZXN0IiwgbnVsbCk7Ci0JCWFzc2VydE5vdE51bGwoIm1vZGVsIGZyb20gZG9jIGlzIG51bGwiLCBtb2RlbEZyb21Eb2MpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlTW9kZWxXaXRoTW9kZWwoKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgZW1wdHlNb2RlbCA9IGZMb2FkZXIuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gZW1wdHlNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc0RvYy5zZXQoIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+XG48dGVzdD5cbjxpdGVtIGF0dHI9XCJ2YWxcIiAvPjwvdGVzdD5cbiIpOwotCQkvLyBUT0RPOiBuZWVkIGFuIGV4aXN0aW5nIGZ1bGwgbW9kZWwKLQkJLy9JU3RydWN0dXJlZE1vZGVsIG1vZGVsRnJvbU1vZGVsID0gZkxvYWRlci5jcmVhdGVNb2RlbChlbXB0eU1vZGVsKTsKLQkJLy9hc3NlcnROb3ROdWxsKCJtb2RlbCBmcm9tIG1vZGVsIGlzIG51bGwiLCBtb2RlbEZyb21Nb2RlbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRBZGFwdGVyRmFjdG9yaWVzKCkgewotCQlMaXN0IGZhY3RvcmllcyA9IGZMb2FkZXIuZ2V0QWRhcHRlckZhY3RvcmllcygpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSB3ZXJlIG5vIGFkYXB0ZXIgZmFjdG9yaWVzIGZvciBYTUwiLCBmYWN0b3JpZXMuc2l6ZSgpID4gMCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RMb2FkKCkgewotCQkvLyBmcm9tIGEgZmlsZQkKLQkJSUZpbGUgZiA9IGdldEZpbGUoKTsKLQkJCi0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZkxvYWRlci5jcmVhdGVNb2RlbCgpOwotCQkJZkxvYWRlci5sb2FkKGYsIG1vZGVsKTsKLQkJCVN0cmluZyB0ZXh0ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCQlhc3NlcnRUcnVlKCJmYWlsZWQgdG8gbG9hZCIsIHRleHQubGVuZ3RoKCkgPiAwKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RMb2FkRnJvbVN0cmVhbSgpIHsKLQkJLy8gbmVlZCB0byBmaXggdGhpcyB0ZXN0Ci0JCS8vIHVubGVzcyB0aGUgQVBJIGlzIGdvaW5nIGF3YXkuLi4KLS8vCQlJRmlsZSBmID0gZ2V0RmlsZSgpOwotLy8JCQotLy8JCXRyeSB7Ci0vLwkJCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBmTG9hZGVyLmNyZWF0ZU1vZGVsKCk7Ci0vLwkJCWZMb2FkZXIubG9hZChmLmdldENvbnRlbnRzKCksIG1vZGVsLCBFbmNvZGluZ1J1bGUuRk9SQ0VfREVGQVVMVCk7Ci0vLwkJCVN0cmluZyB0ZXh0ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0vLwkJCWFzc2VydFRydWUoImZhaWxlZCB0byBsb2FkIiwgdGV4dC5sZW5ndGgoKSA+IDApOwotLy8JCX0KLS8vCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotLy8JCQllLnByaW50U3RhY2tUcmFjZSgpOwotLy8JCX0KLS8vCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0vLwkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0vLwkJfQotCX0KLQkKLQkKLQlwcml2YXRlIElGaWxlIGdldEZpbGUoKSB7Ci0JCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZlByb2plY3ROYW1lICsgIi9maWxlcy9zaW1wbGUueG1sIikpOwkKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L051bGxTdHJlYW0uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvTnVsbFN0cmVhbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmUyMzVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvTnVsbFN0cmVhbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy50ZXh0OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotCi0KLXB1YmxpYyBjbGFzcyBOdWxsU3RyZWFtIGV4dGVuZHMgSW5wdXRTdHJlYW0gewotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNyZWFkKCkKLQkgKi8KLQlwdWJsaWMgaW50IHJlYWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlyZXR1cm4gLTE7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC9UZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVyWE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L1Rlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJYTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y1NjQ5OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L1Rlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJYTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy50ZXh0OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudEV4dGVuc2lvbjM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUeXBlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC51dGlsLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklYTUxQYXJ0aXRpb25zOwotCi1wdWJsaWMgY2xhc3MgVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lclhNTCBleHRlbmRzIFRlc3RDYXNlIHsKLQkKLQlwcml2YXRlIGJvb2xlYW4gREVCVUdfUFJJTlRfUkVTVUxUID0gZmFsc2U7Ci0JcHJvdGVjdGVkIElUeXBlZFJlZ2lvbltdIHBhcnRpdGlvbnMgPSBudWxsOwotCi0JcHJpdmF0ZSBib29sZWFuIHVzZUZvcm1hdHRlciA9IHRydWU7Ci0JcHJvdGVjdGVkIERlY2ltYWxGb3JtYXQgZm9ybWF0dGVyOwotCi0JcHVibGljIFRlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJYTUwoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JCWlmIChERUJVR19QUklOVF9SRVNVTFQgJiYgdXNlRm9ybWF0dGVyKQotCQkJZm9ybWF0dGVyID0gbmV3IERlY2ltYWxGb3JtYXQoKTsKLQl9Ci0JCi0JLyoqCi0JICogbXVzdCByZWxlYXNlIG1vZGVsIChmcm9tIGVkaXQpIGFmdGVyCi0JICogQHBhcmFtIGZpbGVuYW1lIHJlbGF0aXZlIHRvIHRoaXMgY2xhc3MgKFRlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXIpCi0JICovCi0JcHJpdmF0ZSBJU3RydWN0dXJlZE1vZGVsIGdldE1vZGVsRm9yRWRpdChTdHJpbmcgZmlsZW5hbWUpIHsKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJCWlmIChpblN0cmVhbSA9PSBudWxsKQotCQkJCWluU3RyZWFtID0gbmV3IE51bGxTdHJlYW0oKTsKLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChmaWxlbmFtZSwgaW5TdHJlYW0sIG51bGwpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBleCkgewotCQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG1vZGVsOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RGlzY29ubmVjdENvbm5lY3QoKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPWdldE1vZGVsRm9yRWRpdCgidGVzdGZpbGVzL3htbC9leGFtcGxlMDEueG1sIik7Ci0JCQlpZihtb2RlbCAhPSBudWxsKSB7Ci0JCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQkJYXNzZXJ0VHJ1ZSgic0RvYyBpbXBsZW1lbnRhdGlvbiBub3QgaW5zdGFuY2Ugb2YgSURvY3VtZW50RXh0ZW5zaW9uMyIsIHNEb2MgaW5zdGFuY2VvZiBJRG9jdW1lbnRFeHRlbnNpb24zKTsKLQkJCQotCQkJCUlEb2N1bWVudFBhcnRpdGlvbmVyIHBhcnRpdGlvbmVyID0gKChJRG9jdW1lbnRFeHRlbnNpb24zKXNEb2MpLmdldERvY3VtZW50UGFydGl0aW9uZXIoSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmcuREVGQVVMVF9TVFJVQ1RVUkVEX1BBUlRJVElPTklORyk7Ci0JCQkJYXNzZXJ0VHJ1ZSgicGFydGl0aW9uZXIgZG9lc24ndCBpbXBsZW1lbnQgSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIiLCBwYXJ0aXRpb25lciBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyKTsKLQkJCQkKLQkJCQlJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lciBzdHAgPSAoSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIpcGFydGl0aW9uZXI7Ci0JCQkJYXNzZXJ0Tm90TnVsbCgicGFydGl0aW9uZXIgd2FzIG51bGwgZm9yIHNEb2M6IiArIHNEb2MsIHBhcnRpdGlvbmVyKTsKLQkJCQl0cnkgewotCQkJCQlzdHAuZGlzY29ubmVjdCgpOwotCQkJCX0KLQkJCQljYXRjaChFeGNlcHRpb24gZSkgewotCQkJCQlhc3NlcnRUcnVlKCJwcm9ibGVtIGRpc2Nvbm5lY3Rpbmcgdy86IiArc0RvYyArICIvbiIgKyBlLCBmYWxzZSk7Ci0JCQkJfQotCQkJCXRyeSB7Ci0JCQkJCXN0cC5jb25uZWN0KHNEb2MpOwotCQkJCX0KLQkJCQljYXRjaChFeGNlcHRpb24gZSkgewotCQkJCQlhc3NlcnRUcnVlKCJwcm9ibGVtIGNvbm5lY3Rpbmcgdy86IiArIHNEb2MgKyAiL24iICsgZSwgZmFsc2UpOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UgewotCQkJCWFzc2VydFRydWUoImNvdWxkIG5vdCByZXRyaWV2ZSBzdHJ1Y3R1cmVkIG1vZGVsIiwgZmFsc2UpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgIHsKLQkJCWlmKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0JCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXREZWZhdWx0UGFydGl0aW9uVHlwZSgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9Z2V0TW9kZWxGb3JFZGl0KCJ0ZXN0ZmlsZXMveG1sL2V4YW1wbGUwMS54bWwiKTsKLQkJCWlmKG1vZGVsICE9IG51bGwpIHsKLQkJCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCQlhc3NlcnRUcnVlKCJzRG9jIGltcGxlbWVudGF0aW9uIG5vdCBpbnN0YW5jZSBvZiBJRG9jdW1lbnRFeHRlbnNpb24zIiwgc0RvYyBpbnN0YW5jZW9mIElEb2N1bWVudEV4dGVuc2lvbjMpOwotCQkJCi0JCQkJSURvY3VtZW50UGFydGl0aW9uZXIgcGFydGl0aW9uZXIgPSAoKElEb2N1bWVudEV4dGVuc2lvbjMpc0RvYykuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcihJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HKTsKLQkJCQlhc3NlcnRUcnVlKCJwYXJ0aXRpb25lciBkb2Vzbid0IGltcGxlbWVudCBJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lciIsIHBhcnRpdGlvbmVyIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIpOwotCQkJCQotCQkJCUlTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyIHN0cCA9IChJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcilwYXJ0aXRpb25lcjsKLQkJCQlTdHJpbmcgZGVmYXVsdFBhcnRpdGlvblR5cGUgPSBzdHAuZ2V0RGVmYXVsdFBhcnRpdGlvblR5cGUoKTsKLQkJCQlhc3NlcnRUcnVlKCJ3cm9uZyBkZWZhdWx0IHBhcnRpdGlvbiB0eXBlIHdhczogWyIgKyBkZWZhdWx0UGFydGl0aW9uVHlwZSArICJdIHNob3VsZCBiZTogWyIgKyBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCArICJdIiwgZGVmYXVsdFBhcnRpdGlvblR5cGUuZXF1YWxzKElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxUKSk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlhc3NlcnRUcnVlKCJjb3VsZCBub3QgcmV0cmlldmUgc3RydWN0dXJlZCBtb2RlbCIsIGZhbHNlKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5ICB7Ci0JCQlpZihtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9CQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UGFydGl0aW9uVHlwZSgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9Z2V0TW9kZWxGb3JFZGl0KCJ0ZXN0ZmlsZXMveG1sL2V4YW1wbGUwMS54bWwiKTsKLQkJCWlmKG1vZGVsICE9IG51bGwpIHsKLQkJCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCQlhc3NlcnRUcnVlKCJzRG9jIGltcGxlbWVudGF0aW9uIG5vdCBpbnN0YW5jZSBvZiBJRG9jdW1lbnRFeHRlbnNpb24zIiwgc0RvYyBpbnN0YW5jZW9mIElEb2N1bWVudEV4dGVuc2lvbjMpOwotCQkJCi0JCQkJSURvY3VtZW50UGFydGl0aW9uZXIgcGFydGl0aW9uZXIgPSAoKElEb2N1bWVudEV4dGVuc2lvbjMpc0RvYykuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcihJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HKTsKLQkJCQlhc3NlcnRUcnVlKCJwYXJpdGlvbmVyIGRvZXNuJ3QgaW1wbGVtZW50IElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyIiwgcGFydGl0aW9uZXIgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcik7Ci0JCQkJCi0JCQkJSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIgc3RwID0gKElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyKXBhcnRpdGlvbmVyOwotCQkJCVN0cmluZyBkZWZhdWx0UGFydGl0aW9uVHlwZSA9IHN0cC5nZXREZWZhdWx0UGFydGl0aW9uVHlwZSgpOwotCQkJCWFzc2VydFRydWUoIndyb25nIGRlZmF1bHQgcGFydGl0aW9uIHR5cGUgd2FzOiBbIiArIGRlZmF1bHRQYXJ0aXRpb25UeXBlICsgIl0gc2hvdWxkIGJlOiBbIiArIElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxUICsgIl0iLCBkZWZhdWx0UGFydGl0aW9uVHlwZS5lcXVhbHMoSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQpKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWFzc2VydFRydWUoImNvdWxkIG5vdCByZXRyaWV2ZSBzdHJ1Y3R1cmVkIG1vZGVsIiwgZmFsc2UpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgIHsKLQkJCWlmKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0JCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RYTUwxKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWludCBleHBlY3RlZFBhcnRpdGlvbnMgPSA2OwotCQlpbnQgblBhcnRpdGlvbnMgPSBkb0NvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KCJ0ZXN0ZmlsZXMveG1sL2V4YW1wbGUwMS54bWwiKTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBuUGFydGl0aW9ucyA9PSBleHBlY3RlZFBhcnRpdGlvbnMpOwotCQljaGVja1NlYW1zKCk7Ci0JCXZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJWE1MUGFydGl0aW9ucy5YTUxfUEksIElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxULCBJWE1MUGFydGl0aW9ucy5YTUxfREVDTEFSQVRJT04sIElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxULCBJWE1MUGFydGl0aW9ucy5YTUxfQ09NTUVOVCwgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFR9KTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEVtcHR5KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWludCBleHBlY3RlZFBhcnRpdGlvbnMgPSAxOwotCQlpbnQgblBhcnRpdGlvbnMgPSBkb0NvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KCJ0ZXN0ZmlsZXMveG1sL2VtcHR5LnhtbCIpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBudW1iZXIgb2YgcGFydGl0aW9ucyIsIG5QYXJ0aXRpb25zID09IGV4cGVjdGVkUGFydGl0aW9ucyk7Ci0JCWNoZWNrU2VhbXMoKTsKLQkJdmVyaWZ5UGFydGl0aW9uVHlwZXMocGFydGl0aW9ucywgbmV3IFN0cmluZ1tde0lYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxUfSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFBlcmZYTUwoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDY7Ci0JCWludCBuUGFydGl0aW9ucyA9IGRvVGltZWRDb21wdXRlUGFydGl0aW9uaW5nVGVzdCgidGVzdGZpbGVzL3htbC9jb21wYW55MzAway54bWwiKTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBuUGFydGl0aW9ucyA9PSBleHBlY3RlZFBhcnRpdGlvbnMpOwotCQljaGVja1NlYW1zKCk7Ci0JCXZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJWE1MUGFydGl0aW9ucy5YTUxfUEksIElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxULCBJWE1MUGFydGl0aW9ucy5YTUxfREVDTEFSQVRJT04sIElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxULCBJWE1MUGFydGl0aW9ucy5YTUxfQ09NTUVOVCwgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFR9KTsKLQl9Ci0JCi0JLyoqCi0JICogRW5zdXJlIHRoYXQgdGhlIGN1cnJlbnQgbGlzdCBvZiBwYXJ0aXRpb25zIGFyZSBhbGwgYWRqYWNlbnQgdG8gb25lIGFub3RoZXIKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBjaGVja1NlYW1zKCkgewotCQlpZiAocGFydGl0aW9ucyA9PSBudWxsKQotCQkJcmV0dXJuOwotCQlpbnQgb2Zmc2V0ID0gMDsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0aXRpb25zLmxlbmd0aDsgaSsrKSB7Ci0JCQlhc3NlcnRFcXVhbHMoInBhcnRpdGlvbnMgYXJlIG5vdCBjb250aWd1b3VzISIsIHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCksIG9mZnNldCk7Ci0JCQlvZmZzZXQgPSBwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpICsgcGFydGl0aW9uc1tpXS5nZXRMZW5ndGgoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENvbXB1dGUgdGhlIHBhcnRpdGlvbnMgZm9yIHRoZSBnaXZlbiBmaWxlbmFtZSB1c2luZyB0aGUgZGVmYXVsdCBwYXJ0aXRpb25lcgotCSAqIGZvciB0aGF0IGZpbGUgdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiBAcmV0dXJuIGludAotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiBAdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIGludCBkb0NvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0KLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCWlmIChpblN0cmVhbSA9PSBudWxsKQotCQkJaW5TdHJlYW0gPSBuZXcgTnVsbFN0cmVhbSgpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChmaWxlbmFtZSwgaW5TdHJlYW0sIG51bGwpOwotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWlmIChERUJVR19QUklOVF9SRVNVTFQgJiYgdXNlRm9ybWF0dGVyKSB7Ci0JCQlkb3VibGUgYmFzZVRlbiA9IE1hdGgubG9nKDEwKTsKLQkJCWZvcm1hdHRlci5zZXRNaW5pbXVtSW50ZWdlckRpZ2l0cygoaW50KSAoTWF0aC5sb2coc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpKSAvIGJhc2VUZW4pICsgMSk7Ci0JCQlmb3JtYXR0ZXIuc2V0R3JvdXBpbmdVc2VkKGZhbHNlKTsKLQkJfQotCi0JCXBhcnRpdGlvbnMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuY29tcHV0ZVBhcnRpdGlvbmluZygwLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCkpOwotCQlpZiAoREVCVUdfUFJJTlRfUkVTVUxUKSB7Ci0JCQlTdHJpbmcgY29udGVudHMgPSBudWxsOwotCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuZmlsZW5hbWU6ICIgKyBmaWxlbmFtZSk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCQl0cnkgewotCQkJCQljb250ZW50cyA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXQocGFydGl0aW9uc1tpXS5nZXRPZmZzZXQoKSwgcGFydGl0aW9uc1tpXS5nZXRMZW5ndGgoKSk7Ci0JCQkJfQotCQkJCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQkJCWNvbnRlbnRzID0gIiplcnJvcioiOwotCQkJCX0KLQkJCQlpZiAodXNlRm9ybWF0dGVyKQotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZm9ybWF0dGVyLmZvcm1hdChwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpKSArICI6IiArIGZvcm1hdHRlci5mb3JtYXQocGFydGl0aW9uc1tpXS5nZXRMZW5ndGgoKSkgKyAiIC0gIiArIHBhcnRpdGlvbnNbaV0uZ2V0VHlwZSgpICsgIiBbIiArIFN0cmluZ1V0aWxzLmVzY2FwZShjb250ZW50cykgKyAiXSIpOwotCQkJCWVsc2UKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKHBhcnRpdGlvbnNbaV0gKyAiIFsiICsgU3RyaW5nVXRpbHMuZXNjYXBlKGNvbnRlbnRzKSArICJdIik7Ci0JCQl9Ci0JCX0KLQkJY2hlY2tTZWFtcygpOwotCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJaW5TdHJlYW0uY2xvc2UoKTsKLQotCQlpZiAocGFydGl0aW9ucyA9PSBudWxsKQotCQkJcmV0dXJuIC0xOwotCQlyZXR1cm4gcGFydGl0aW9ucy5sZW5ndGg7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBzaW5nbGUgcGFydGl0aW9uIGF0IHRoZSBnaXZlbiBvZmZzZXQgZm9yIHRoZSBnaXZlbiBmaWxlLCB1c2luZyB0aGUKLQkgKiBkZWZhdWx0IHBhcnRpdGlvbmVyIGZvciB0aGF0IGZpbGUgdHlwZS4gIFRoaXMgdGVzdCBhbGxvd3MgZm9yIHZlcmlmeWluZyB0aGUgemVyby1sZW5ndGgKLQkgKiBwYXJ0aXRpb25pbmcgYmVoYXZpb3IuCi0JICogCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogQHBhcmFtIG9mZnNldAotCSAqIEByZXR1cm4gSVR5cGVkUmVnaW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgSVR5cGVkUmVnaW9uIGdldFBhcnRpdGlvblRlc3QoU3RyaW5nIGZpbGVuYW1lLCBpbnQgb2Zmc2V0KSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGZpbGVuYW1lLCBpblN0cmVhbSwgbnVsbCk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQotCQlwYXJ0aXRpb25zID0gbnVsbDsKLQkJSVR5cGVkUmVnaW9uIHBhcnRpdGlvbiA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRQYXJ0aXRpb24ob2Zmc2V0KTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCkgewotCQkJU3RyaW5nIGNvbnRlbnRzID0gbnVsbDsKLQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJcbmZpbGVuYW1lOiAiICsgZmlsZW5hbWUpOwotCQkJdHJ5IHsKLQkJCQljb250ZW50cyA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXQocGFydGl0aW9uLmdldE9mZnNldCgpLCBwYXJ0aXRpb24uZ2V0TGVuZ3RoKCkpOwotCQkJfQotCQkJY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCQljb250ZW50cyA9ICIqZXJyb3IqIjsKLQkJCX0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbihwYXJ0aXRpb24gKyAiIFsiICsgU3RyaW5nVXRpbHMuZXNjYXBlKGNvbnRlbnRzKSArICJdIik7Ci0JCX0KLQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCWluU3RyZWFtLmNsb3NlKCk7Ci0KLQkJcmV0dXJuIHBhcnRpdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBWZXJpZmllcyB0aGF0IHRoZSBnaXZlbiBwYXJ0aXRpb25zIGFyZSBvZiB0aGUgZ2l2ZW4gcGFydGl0aW9uIHR5cGVzCi0JICogQHBhcmFtIHR5cGVkUmVnaW9ucwotCSAqIEBwYXJhbSB0eXBlcwotCSAqLwotCXByb3RlY3RlZCB2b2lkIHZlcmlmeVBhcnRpdGlvblR5cGVzKElUeXBlZFJlZ2lvbiBhY3R1YWxUeXBlZFJlZ2lvbnNbXSwgU3RyaW5nIGV4cGVjdGVkVHlwZXNbXSkgewotCQlmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVkVHlwZXMubGVuZ3RoOyBpKyspCi0JCQlhc3NlcnRFcXVhbHMoInBhcnRpdGlvbiB0eXBlIG1pc21hdGNoZWQiLCBleHBlY3RlZFR5cGVzW2ldLCBhY3R1YWxUeXBlZFJlZ2lvbnNbaV0uZ2V0VHlwZSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBWZXJpZmllcyB0aGF0IHRoZSBnaXZlbiBwYXJ0aXRpb25zIGJlZ2luIGF0IHRoZSBnaXZlbiBvZmZzZXRzCi0JICogQHBhcmFtIHR5cGVkUmVnaW9ucwotCSAqIEBwYXJhbSB0eXBlcwotCSAqLwotCXByb3RlY3RlZCB2b2lkIHZlcmlmeVBhcnRpdGlvblJlZ2lvbnMoSVR5cGVkUmVnaW9uIHR5cGVkUmVnaW9uc1tdLCBpbnQgb2Zmc2V0c1tdKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgb2Zmc2V0cy5sZW5ndGg7IGkrKykgewotCQkJYXNzZXJ0RXF1YWxzKCJvZmZzZXQgbWlzbWF0Y2hlZCIsIHR5cGVkUmVnaW9uc1tpXS5nZXRPZmZzZXQoKSwgb2Zmc2V0c1tpXSk7Ci0JCQlpZiAoaSA+IDApIHsKLQkJCQlhc3NlcnRFcXVhbHMoImxlbmd0aHMgbWlzYWxpZ25lZCIsIHR5cGVkUmVnaW9uc1tpXS5nZXRPZmZzZXQoKSwgdHlwZWRSZWdpb25zW2kgLSAxXS5nZXRPZmZzZXQoKSArIHR5cGVkUmVnaW9uc1tpIC0gMV0uZ2V0TGVuZ3RoKCkpOwotCQkJfQotCQl9Ci0JfQotCQotCS8qKgotCSAqIENvbXB1dGUgdGhlIHBhcnRpdGlvbnMgZm9yIHRoZSBnaXZlbiBmaWxlbmFtZSB1c2luZyB0aGUgZGVmYXVsdCBwYXJ0aXRpb25lcgotCSAqIGZvciB0aGF0IGZpbGUgdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiBAcmV0dXJuIGludAotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiBAdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIGludCBkb1RpbWVkQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCWlmIChpblN0cmVhbSA9PSBudWxsKQotCQkJaW5TdHJlYW0gPSBuZXcgTnVsbFN0cmVhbSgpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChmaWxlbmFtZSwgaW5TdHJlYW0sIG51bGwpOwotCQotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlpZiAoREVCVUdfUFJJTlRfUkVTVUxUICYmIHVzZUZvcm1hdHRlcikgewotCQkJZG91YmxlIGJhc2VUZW4gPSBNYXRoLmxvZygxMCk7Ci0JCQlmb3JtYXR0ZXIuc2V0TWluaW11bUludGVnZXJEaWdpdHMoKGludCkgKE1hdGgubG9nKHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSkgLyBiYXNlVGVuKSArIDEpOwotCQkJZm9ybWF0dGVyLnNldEdyb3VwaW5nVXNlZChmYWxzZSk7Ci0JCX0KLQkJbG9uZyBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJcGFydGl0aW9ucyA9IHN0cnVjdHVyZWREb2N1bWVudC5jb21wdXRlUGFydGl0aW9uaW5nKDAsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSk7Ci0JCWxvbmcgZW5kVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlpZiAoREVCVUdfUFJJTlRfUkVTVUxUKSB7Ci0JCQkKLQkJCVN0cmluZyBjb250ZW50cyA9IG51bGw7Ci0JCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuZmlsZW5hbWU6ICIgKyBmaWxlbmFtZSk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRpbWUgdG8gY29tcHV0ZSAiICsgcGFydGl0aW9ucy5sZW5ndGggKyAiOiAiICsgKGVuZFRpbWUtc3RhcnRUaW1lKSArICIgKG1zZWNzKSIpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0aXRpb25zLmxlbmd0aDsgaSsrKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJY29udGVudHMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCksIHBhcnRpdGlvbnNbaV0uZ2V0TGVuZ3RoKCkpOwotCQkJCX0KLQkJCQljYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJCQljb250ZW50cyA9ICIqZXJyb3IqIjsKLQkJCQl9Ci0JCQkJaWYgKHVzZUZvcm1hdHRlcikKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKGZvcm1hdHRlci5mb3JtYXQocGFydGl0aW9uc1tpXS5nZXRPZmZzZXQoKSkgKyAiOiIgKyBmb3JtYXR0ZXIuZm9ybWF0KHBhcnRpdGlvbnNbaV0uZ2V0TGVuZ3RoKCkpICsgIiAtICIgKyBwYXJ0aXRpb25zW2ldLmdldFR5cGUoKSArICIgWyIgKyBTdHJpbmdVdGlscy5lc2NhcGUoY29udGVudHMpICsgIl0iKTsKLQkJCQllbHNlCi0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbihwYXJ0aXRpb25zW2ldICsgIiBbIiArIFN0cmluZ1V0aWxzLmVzY2FwZShjb250ZW50cykgKyAiXSIpOwotCQkJfQotCQl9Ci0JCWNoZWNrU2VhbXMoKTsKLQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCWluU3RyZWFtLmNsb3NlKCk7Ci0JCi0JCWlmIChwYXJ0aXRpb25zID09IG51bGwpCi0JCQlyZXR1cm4gLTE7Ci0JCXJldHVybiBwYXJ0aXRpb25zLmxlbmd0aDsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMveG1sL2NvbXBhbnkzMDBrLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL3htbC9jb21wYW55MzAway54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyYmE1NTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMveG1sL2NvbXBhbnkzMDBrLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDgxMDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Ci0gICAgICAgIDxoZWFkPgotICAgICAgICAgICAgICAgIDx0aXRsZT5UaGUgVWx0aW1hdGUgQSBDb21wYW55PC90aXRsZT4KLSAgICAgICAgPC9oZWFkPgotICAgICAgICA8Ym9keT4KLSAgICAgICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJiYW5uZXIuZ2lmIiBoZWlnaHQ9IjUxIiB3aWR0aD0iNjU5IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICA8L3A+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+Ci0gICAgICAgICAgICAgICAgPCEtLSBjb21tZW50IGFkZGVkIHRvIHRlc3RzIDYgcGFydGl0aW9ucyAtLT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJmb290ZXIuZ2lmIiBoZWlnaHQ9IjI1IiB3aWR0aD0iNjU5IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICA8L3A+Ci0gICAgICAgIDwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy94bWwvZW1wdHkueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMveG1sL2VtcHR5LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy94bWwvZW1wdHkueG1sCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL3htbC9leGFtcGxlMDEueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMveG1sL2V4YW1wbGUwMS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0NmNjZWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMveG1sL2V4YW1wbGUwMS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPCFET0NUWVBFIHRlc3RjYXNlIFNZU1RFTSAidGVzdGNhc2UuZHRkIj4KLTwhLS0gdGhpcyBkb2N1bWVudCB3aWxsIG5vdCB2YWxpZGF0ZSAtLT4KLTx0ZXN0Y2FzZT48L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMveG1sL3Rlc3RjYXNlLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL3htbC90ZXN0Y2FzZS5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkNDQwOTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMveG1sL3Rlc3RjYXNlLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTw/eG1sIGVuY29kaW5nPSJVUy1BU0NJSSI/PgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09IEVudGl0aWVzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4KLTwhRU5USVRZICUgRWR0UGFnZVN1YkNhdCAiT3V0bGluZVZpZXcgfCBQcm9wZXJ0eVNoZWV0IHwgU291cmNlVmlldyI+Ci08IUVOVElUWSAlIFdlYlN1YkNhdCAiQWNjZXNzYWJpbGl0eSB8IEFuaW1HSUZEZXNpZ25lciB8IEFwcFNlcnZlckNvbmZpZyB8IENTU0VkaXRvciB8IERCV2l6YXJkIHwgRlRQSW1wb3J0IHwgRlRQRXhwb3J0IHwgSFRUUEltcG9ydCB8IEphdmFCZWFuV2l6YXJkIHwgTGlua1N0eWxlQ29udldpemFyZCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rc1ZpZXcgfCBNaXNjZWxsYW5lb3VzIHwgSFRNTEZpbGVXaXphcmQgfCBKU1BGaWxlV2l6YXJkIHwgU2VydmxldEZpbGVXaXphcmQgfCBXZWJQcm9qV2l6YXJkIHwgTkxTIHwgU2FtcGxlcyB8IFdlYkFwcERlcGxveURlc2MiPgotPCFFTlRJVFkgJSBIVE1MU3ViQ2F0ICAiUGFnZURlc2lnbmVyIHwgRGVzaWduVmlldyB8ICAlRWR0UGFnZVN1YkNhdDsgfCBQcmV2aWV3Ij4KLTwhRU5USVRZICUgWE1MU3ViQ2F0ICAiJUVkdFBhZ2VTdWJDYXQ7Ij4KLTwhRU5USVRZICUgU3ViQ2F0ICIoJVdlYlN1YkNhdDsgfCAlSFRNTFN1YkNhdDsgfCAlWE1MU3ViQ2F0OykiPgotPCFFTlRJVFkgJSBDYXQgIih3ZWJ0b29sIHwgaHRtbCB8IHhtbCkiPgotCi08IUVOVElUWSAlIFN0YXRlICIoVW5kZWZpbmVkIHwgVW5kZXJDb25zdHJ1Y3Rpb24gfCBVbmRlclJldmlldyB8IFJldmlld0NvbXBsZXRlZCB8IEFwcHJvdmVkIHwgUmVhZHkgfCBDb21wbGV0ZSB8IE9ic29sZXRlKSI+Ci08IUVOVElUWSAlIEJ1Y2tldCAiKENvbXBvbmVudFRlc3QgfCBQcm9kdWN0VGVzdCB8IEludGVncmF0aW9uVGVzdCB8IFRyYW5zbGF0aW9uVGVzdCB8IFVuaXRUZXN0KSI+Ci08IUVOVElUWSAlIFBsYXRmb3JtICIoQWxsIHwgV2luMjAwMCB8IFdpbk1FIHwgV2luTlQgfCBXaW45OCB8IExpbnV4UmVkSGF0IHwgQ2FsZGVyYSB8IFN1U2UgfCBUdXJib0xpbnV4KSI+Ci0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PSBFbGVtZW50cyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPgotPCFFTEVNRU5UIHRlc3RjYXNlCi0gIAkoKGhlYWRlciwgc3VtbWFyeSwgZGVmaW5pdGlvbiwgZXhlY3V0aW9uKiksdmFyaWF0aW9uKik+Ci08IUVMRU1FTlQgdmFyaWF0aW9uCi0gIAkoaGVhZGVyLCBzdW1tYXJ5LCBkZWZpbml0aW9uLCBleGVjdXRpb24qKT4KLQotPCFFTEVNRU5UIGhlYWRlciAoc3ViamVjdCwgYXV0aG9yLCBjb2F1dGhvciosIGNyZWF0aW9uX2RhdGUpPgotPCFFTEVNRU5UIHN1YmplY3QgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIGF1dGhvciAoI1BDREFUQSk+Ci08IUVMRU1FTlQgY29hdXRob3IgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIGNyZWF0aW9uX2RhdGUgKCNQQ0RBVEEpPgotCi08IS0tIEV4YW1wbGUgb2YgaGF2aW5nIG1vcmUgdGhhbiBvbmUgYXR0cmlidXRlIGxpc3QgZGVmaW5lZCBmb3IgYSBnaXZlbiBlbGVtZW50IC0tPgotPCFBVFRMSVNUIGhlYWRlcgotCW51bWJlcgkJCUlECQkjUkVRVUlSRUQKLQlzdGF0ZQkJCSVTdGF0ZTsgICAgICAgICAiVW5kZXJDb25zdHJ1Y3Rpb24iCi0+Ci08IUFUVExJU1QgaGVhZGVyCi0JY2F0ZWdvcnkJCSVDYXQ7CQkjUkVRVUlSRUQKLQlzdWJDYXRlZ29yeQkJJVN1YkNhdDsJI1JFUVVJUkVECi0Jc3ViU3ViQ2F0ZW9nb3J5CSAgICAgICAgQ0RBVEEgICAgICAgICAJI0lNUExJRUQKLQk+Ci0KLTwhRUxFTUVOVCBzdW1tYXJ5ICh0ZXN0QnVja2V0KywgcGxhdGZvcm0rLCBwYXJ0KiwgcmVsZWFzZSspPgotPCFFTEVNRU5UIHRlc3RCdWNrZXQgRU1QVFk+Ci08IUFUVExJU1QgdGVzdEJ1Y2tldAotCXR5cGUJCSAJJUJ1Y2tldDsJI1JFUVVJUkVECi0+Ci08IUVMRU1FTlQgcGxhdGZvcm0gRU1QVFk+Ci08IUFUVExJU1QgcGxhdGZvcm0KLQl0eXBlCQkgCSVQbGF0Zm9ybTsJI1JFUVVJUkVECi0+Ci08IUVMRU1FTlQgcGFydCAoI1BDREFUQSk+Ci08IUVMRU1FTlQgcmVsZWFzZSAoI1BDREFUQSk+Ci0KLQotPCFFTEVNRU5UIGRlZmluaXRpb24gKHB1cnBvc2UsIHByZXJlcXVpc2l0ZSosIHByb2NlZHVyZSwgZXhwZWN0ZWRfcmVzdWx0cyk+Ci08IUVMRU1FTlQgcHVycG9zZSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgcHJlcmVxdWlzaXRlIEVNUFRZPgotPCFBVFRMSVNUIHByZXJlcXVpc2l0ZQotCW51bWJlcgkJCUlEUkVGCQkjUkVRVUlSRUQKLT4KLTwhRUxFTUVOVCBwcm9jZWR1cmUgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIGV4cGVjdGVkX3Jlc3VsdHMgKCNQQ0RBVEEpPgotCi08IUVMRU1FTlQgZXhlY3V0aW9uIEFOWT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvQ29tbW9uWE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL0NvbW1vblhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTc3OWQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvQ29tbW9uWE1MLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsOwotCi0KLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uT3V0cHV0S2V5czsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3RvcnlDb25maWd1cmF0aW9uRXJyb3I7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5kb20uRE9NU291cmNlOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLlN0cmVhbVJlc3VsdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLQotCi0vKioKLSAqLwotcHVibGljIGNsYXNzIENvbW1vblhNTCB7Ci0KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBEb2N1bWVudEJ1aWxkZXIgZ2V0RG9jdW1lbnRCdWlsZGVyKCkgewotCQlEb2N1bWVudEJ1aWxkZXIgcmVzdWx0ID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlc3VsdCA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLQkJfQotCQljYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlMb2dnZXIubG9nRXhjZXB0aW9uKGUpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgRG9jdW1lbnRCdWlsZGVyIGdldERvY3VtZW50QnVpbGRlcihib29sZWFuIHZhbGlkYXRpbmcpIHsKLQkJRG9jdW1lbnRCdWlsZGVyIHJlc3VsdCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGluc3RhbmNlID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQkJaW5zdGFuY2Uuc2V0VmFsaWRhdGluZyh2YWxpZGF0aW5nKTsKLQkJCXJlc3VsdCA9IGluc3RhbmNlLm5ld0RvY3VtZW50QnVpbGRlcigpOwotCQl9Ci0JCWNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCUxvZ2dlci5sb2dFeGNlcHRpb24oZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgc2VyaWFsaXplKERvY3VtZW50IGRvY3VtZW50LCBPdXRwdXRTdHJlYW0gb3N0cmVhbSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU291cmNlIGRvbVNvdXJjZSA9IG5ldyBET01Tb3VyY2UoZG9jdW1lbnQpOwotCQl0cnkgewotCQkJVHJhbnNmb3JtZXIgc2VyaWFsaXplciA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1RyYW5zZm9ybWVyKCk7Ci0JCQl0cnkgewotCQkJCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5JTkRFTlQsICJ5ZXMiKTsKLQkJCQlzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KCJ7aHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHR9aW5kZW50LWFtb3VudCIsICI0Iik7Ci0JCQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLkVOQ09ESU5HLCAiVVRGLTE2Iik7Ci0JCQl9Ci0JCQljYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCQkvLyB1bnN1cHBvcnRlZCBwcm9wZXJ0aWVzCi0JCQl9Ci0JCQlzZXJpYWxpemVyLnRyYW5zZm9ybShkb21Tb3VyY2UsIG5ldyBTdHJlYW1SZXN1bHQob3N0cmVhbSkpOwotCQl9Ci0JCWNhdGNoIChUcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCQljYXRjaCAoVHJhbnNmb3JtZXJGYWN0b3J5Q29uZmlndXJhdGlvbkVycm9yIGUpIHsKLQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQkJY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9EYXRlVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9EYXRlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjdlZDA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvRGF0ZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnRleHQuRGF0ZUZvcm1hdDsKLWltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci0KLS8qKgotICogQGF1dGhvciBkYXZpZHcKLSAqCi0gKiBUbyBjaGFuZ2UgdGhpcyBnZW5lcmF0ZWQgY29tbWVudCBlZGl0IHRoZSB0ZW1wbGF0ZSB2YXJpYWJsZSAidHlwZWNvbW1lbnQiOgotICogV2luZG93PlByZWZlcmVuY2VzPkphdmE+VGVtcGxhdGVzLgotICogVG8gZW5hYmxlIGFuZCBkaXNhYmxlIHRoZSBjcmVhdGlvbiBvZiB0eXBlIGNvbW1lbnRzIGdvIHRvCi0gKiBXaW5kb3c+UHJlZmVyZW5jZXM+SmF2YT5Db2RlIEdlbmVyYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBEYXRlVXRpbCB7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQWxsVGVzdHMuCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgbm93ID0gbnVsbDsKLQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgbm93KCkgewotCQkvLyBqdXN0IGNhbGN1bGF0ZSBvbmNlLCBzbyB3aG9sZSBydW4gYXMgc2FtZSB0aW1lc3RhbXAKLQkJaWYgKERhdGVVdGlsLm5vdyA9PSBudWxsKSB7Ci0JCQlEYXRlRm9ybWF0IGZvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5Jy0nTU0nLSdkZCctJ2trJy0nbW0nLSdzcyIpOwotCQkJQ2FsZW5kYXIgY2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOwotCQkJRGF0ZSB0b2RheSA9IGNhbGVuZGFyLmdldFRpbWUoKTsKLQkJCURhdGVVdGlsLm5vdyA9IGZvcm1hdC5mb3JtYXQodG9kYXkpOwotCQl9Ci0JCXJldHVybiBEYXRlVXRpbC5ub3c7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9GaWxlVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9GaWxlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjA4YTFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvRmlsZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZW5hbWVGaWx0ZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBAYXV0aG9yIGRhdmlkdwotICoKLSAqLwotcHVibGljIGNsYXNzIEZpbGVVdGlsIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBmTGluZVNlcGFyYXRvciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBmUGF0aFNlcGFyYXRvciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgicGF0aC5zZXBhcmF0b3IiKTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBmRmlsZVNlcGFyYXRvciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiZmlsZS5zZXBhcmF0b3IiKTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYTUxfQ09SRV9URVNUU19QTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzIjsKLQotCXN0YXRpYyBGaWxlIHByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSA9IG51bGw7Ci0Jc3RhdGljIHByaXZhdGUgU3RyaW5nIGxvZ1N1YkRpcmVjdG9yeVBhdGg7Ci0KLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIG5vdFRyaWVkWWV0ID0gdHJ1ZTsKLQotCXB1YmxpYyBzdGF0aWMgY2xhc3MgRGlyRmlsZW5hbWVGaWx0ZXIgaW1wbGVtZW50cyBGaWxlbmFtZUZpbHRlciB7Ci0JCVN0cmluZyBzdGFydE9mQWNjZXB0YWJsZU5hbWVzOwotCi0JCXB1YmxpYyBEaXJGaWxlbmFtZUZpbHRlcihTdHJpbmcgc3RhcnRPZkRpck5hbWUpIHsKLQkJCXN0YXJ0T2ZBY2NlcHRhYmxlTmFtZXMgPSBzdGFydE9mRGlyTmFtZTsKLQkJfQotCi0JCS8qKgotCQkgKiBAc2VlIGphdmEuaW8uRmlsZUZpbHRlciNhY2NlcHQoRmlsZSkKLQkJICovCi0JCXB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIHBhdGhuYW1lLCBTdHJpbmcgZmlsZW5hbWUpIHsKLQkJCS8vIHdlJ2xsIGp1c3QgYXNzdW1lIGlmIGl0IHN0YXJ0cyB3aXRoIHJpZ2h0IGtleSwgaXQgaXMgYSBkaXJlY3RvcnkgLi4uIGZvciBub3cKLQkJCXJldHVybiBmaWxlbmFtZS5zdGFydHNXaXRoKHN0YXJ0T2ZBY2NlcHRhYmxlTmFtZXMpOwotCQl9Ci0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIEZpbGUgZ2V0UHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5KFN0cmluZyBkaXJlY3RvcnlSb290TmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKHByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSA9PSBudWxsICYmIG5vdFRyaWVkWWV0KSB7Ci0JCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFhNTF9DT1JFX1RFU1RTX1BMVUdJTl9JRCk7Ci0JCQlVUkwgdXJsID0gYnVuZGxlLmdldEVudHJ5KCIvIik7Ci0JCQkvL1N0cmluZyBpbnN0YWxsUGF0aCA9IHVybC5nZXRQYXRoKCk7Ci0JCQkvLyBhZGQga25vd24gZmlsZSBzbyBVUkwgbWV0aG9kIGJlbG93IGNhbiBiZSB1c2VkCi0JCQkvLyAoZG9lc24ndCBzZWVtIHRvIHdvcmsgZm9yIGRpcmVjdG9yeT8pCi0JCQlVUkwgdG90YWxVUkwgPSBuZXcgVVJMKHVybCwgInBsdWdpbi54bWwiKTsKLQkJCVVSTCBmaW5hbHVybCA9IFBsYXRmb3JtLmFzTG9jYWxVUkwodG90YWxVUkwpOwotCQkJU3RyaW5nIGZpbmFsRmlsZSA9IGZpbmFsdXJsLmdldEZpbGUoKTsKLQkJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGZpbmFsRmlsZSk7Ci0JCQlTdHJpbmcgZmluYWxQYXRoID0gZmlsZS5nZXRQYXJlbnQoKTsKLQkJCUZpbGUgcGx1Z2luSG9tZURpciA9IG5ldyBGaWxlKGZpbmFsUGF0aCk7Ci0JCQlGaWxlbmFtZUZpbHRlciBkaXJGaWx0ZXIgPSBuZXcgRGlyRmlsZW5hbWVGaWx0ZXIoZGlyZWN0b3J5Um9vdE5hbWUpOwotCQkJRmlsZVtdIGFsbERpcnMgPSBwbHVnaW5Ib21lRGlyLmxpc3RGaWxlcyhkaXJGaWx0ZXIpOwotCi0JCQkvLyBhc3N1bWUgZmlyc3QgaW4gbGlzdCBpcyBuZXdlc3QsIHRoZW4gc3RhcnQgbG9va2luZyB3aXRoIHRoZSAKLQkJCS8vIHNlY29uZCBpdGVtIC4uLiBqdXN0IHRvIGF2b2lkICJudWxsIiBjYXNlIGNoZWNraW5nCi0JCQlpZiAoYWxsRGlycy5sZW5ndGggPiAwKSB7Ci0JCQkJRmlsZSBjdXJyZW50TmV3ZXN0ID0gYWxsRGlyc1swXTsKLQkJCQlmb3IgKGludCBpID0gMTsgaSA8IGFsbERpcnMubGVuZ3RoOyBpKyspIHsKLQkJCQkJRmlsZSBjdXJyZW50ID0gYWxsRGlyc1tpXTsKLQkJCQkJLy8gTk9URTogd2UgZ28gYnkgbW9kaWZpZWQgZGF0ZSwgbm90IGJ5IHRoZSBhY3R1YWwgdGltZSBzdGFtcCBpbiBuYW1lLgotCQkJCQkvLyBUaGlzIHNob3VsZCB3b3JrIGZvciBhbGwgbm9ybWFsIGNhc2VzLCBidXQgbWF5IG5vdCBpZiBzb21lb25lIGRvZXMgc29tZQotCQkJCQkvLyAiZnVubnkiIGNvcHlpbmcsIG9yIHVwZGF0aW5nIGZyb20gcmVwb3NpdG9yeS4KLQkJCQkJaWYgKGN1cnJlbnQubGFzdE1vZGlmaWVkKCkgPiBjdXJyZW50TmV3ZXN0Lmxhc3RNb2RpZmllZCgpKSB7Ci0JCQkJCQljdXJyZW50TmV3ZXN0ID0gY3VycmVudDsKLQkJCQkJfQotCQkJCX0KLQkJCQlwcmV2aW91c1Jlc3VsdHNEaXJlY3RvcnkgPSBjdXJyZW50TmV3ZXN0OwotCQkJfQotCQkJbm90VHJpZWRZZXQgPSBmYWxzZTsKLQkJfQotCQlyZXR1cm4gcHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgRmlsZSBtYWtlRmlsZUZvcihTdHJpbmcgZGlyZWN0b3J5LCBTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyB0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShYTUxfQ09SRV9URVNUU19QTFVHSU5fSUQpOwotCQlVUkwgdXJsID0gYnVuZGxlLmdldEVudHJ5KCIvIik7Ci0JCVVSTCBsb2NhbFVSTCA9IFBsYXRmb3JtLmFzTG9jYWxVUkwodXJsKTsKLQkJU3RyaW5nIGluc3RhbGxQYXRoID0gbG9jYWxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgdG90YWxEaXJlY3RvcnkgPSBpbnN0YWxsUGF0aCArIGRpcmVjdG9yeTsKLQkJU3RyaW5nIHRvdGFsUGF0aCA9IHRvdGFsRGlyZWN0b3J5ICsgIi8iICsgZmlsZW5hbWU7Ci0JCVVSTCB0b3RhbFVSTCA9IG5ldyBVUkwodXJsLCB0b3RhbFBhdGgpOwotCQkvL1VSTCBmaW5hbHVybCA9IFBsYXRmb3JtLmFzTG9jYWxVUkwodG90YWxVUkwpOwotCQlTdHJpbmcgZmluYWxGaWxlID0gdG90YWxVUkwuZ2V0RmlsZSgpOwotCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShmaW5hbEZpbGUpOwotCQlTdHJpbmcgZmluYWxQYXRoID0gZmlsZS5nZXRQYXJlbnQoKTsKLQkJRmlsZSBkaXIgPSBuZXcgRmlsZShmaW5hbFBhdGgpOwotCQlpZiAoIWRpci5leGlzdHMoKSkgewotCQkJLy8gYSBsaXR0bGUgc2FmZXR5IG5ldCwgYmUgc3VyZSB0aGUgcHJldmlvdXMgbmV3ZXN0IGRpcmVjdG9yeQotCQkJLy8gaXMgaW5pdGlhbGl6ZWQsIGp1c3QgaW4gY2FzZSBubyBvbmUgZWxzZSBoYXMgZG9uZSBzbwotCQkJaWYgKHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4ICE9IG51bGwgJiYgdGVzdFJlc3VsdHNEaXJlY3RvcnlQcmVmaXgubGVuZ3RoKCkgPiAwKSB7Ci0JCQkJRmlsZVV0aWwuZ2V0UHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5KHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4KTsKLQkJCX0KLQkJCS8vIG5vdyBpdHMgInNhZmUiIHRvIG1ha2UgdGhlIG5ldyBvbmUKLQkJCWRpci5ta2RpcnMoKTsKLQkJfQotCQlyZXR1cm4gZmlsZTsKLQl9Ci0KLQkvKioKLQkgKiBKdXN0IGEgZ2VuZXJhbCB1dGlsaXR5IG1ldGhvZAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RXh0ZW5zaW9uKFN0cmluZyBmaWxlbmFtZSkgewotCQlTdHJpbmcgZXh0ZW5zaW9uID0gbnVsbDsKLQkJaW50IGRvdFBvc3Rpb24gPSBmaWxlbmFtZS5sYXN0SW5kZXhPZignLicpOwotCQlpZiAoZG90UG9zdGlvbiA+IC0xKSB7Ci0JCQlleHRlbnNpb24gPSBmaWxlbmFtZS5zdWJzdHJpbmcoZG90UG9zdGlvbiArIDEpOwotCQl9Ci0JCWVsc2UgewotCQkJZXh0ZW5zaW9uID0gbmV3IFN0cmluZygpOwotCQl9Ci0JCXJldHVybiBleHRlbnNpb247Ci0JfQotCi0JLyoqCi0JICogR2VuZXJhbCBwdXJwb3NlIHV0aWxpdHkgbWV0aG9kIHRvIGVuc3VyZSB0aGUgbG9nCi0JICogZGlyZWN0b3J5IGV4aXN0cywgYW5kIHJldHVybnMgdGhlIG5hbWUuIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldExvZ0RpcmVjdG9yeSgpIHsKLQkJaWYgKGxvZ1N1YkRpcmVjdG9yeVBhdGggPT0gbnVsbCkgewotCQkJU3RyaW5nIG1haW5EaXJlY3RvcnkgPSAiL2xvZ3MiOwotCQkJRmlsZSBkaXIgPSBuZXcgRmlsZShtYWluRGlyZWN0b3J5KTsKLQkJCWVuc3VyZUV4aXN0cyhkaXIpOwotCQkJU3RyaW5nIHN1YkRpcmVjdG9yeSA9IFRpbWVzdGFtcFV0aWwudGltZXN0YW1wKCk7Ci0JCQlsb2dTdWJEaXJlY3RvcnlQYXRoID0gbWFpbkRpcmVjdG9yeSArICIvIiArIHN1YkRpcmVjdG9yeTsKLQkJCUZpbGUgc3ViZGlyID0gbmV3IEZpbGUobG9nU3ViRGlyZWN0b3J5UGF0aCk7Ci0JCQllbnN1cmVFeGlzdHMoc3ViZGlyKTsKLQkJfQotCQlyZXR1cm4gbG9nU3ViRGlyZWN0b3J5UGF0aDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgZW5zdXJlRXhpc3RzKEZpbGUgZGlyKSB7Ci0JCWlmICghZGlyLmV4aXN0cygpKSB7Ci0JCQlkaXIubWtkaXJzKCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQZXJmb3JtYW5jZU91dHB1dExvZ05hbWUoKSB7Ci0JCVN0cmluZyByZXN1bHQgPSBudWxsOwotCQlTdHJpbmcgZGlyZWN0b3J5TmFtZSA9IEZpbGVVdGlsLmdldExvZ0RpcmVjdG9yeSgpOwotCQlTdHJpbmcgZXh0ZW5zaW9uID0gIi5vdXQiOwotCQlTdHJpbmcgYmFzZU5hbWUgPSAic2VkVGVzdHMiOwotCQlsb25nIG5vdyA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlTdHJpbmcgbm93U3RyID0gU3RyaW5nLnZhbHVlT2Yobm93KTsKLQkJcmVzdWx0ID0gZGlyZWN0b3J5TmFtZSArIEZpbGVVdGlsLmZGaWxlU2VwYXJhdG9yICsgYmFzZU5hbWUgKyBub3dTdHIgKyBleHRlbnNpb247Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9Qcm9qZWN0VW56aXBVdGlsaXR5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL1Byb2plY3RVbnppcFV0aWxpdHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM2ODE0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL1Byb2plY3RVbnppcFV0aWxpdHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuemlwLlppcEVudHJ5OwotaW1wb3J0IGphdmEudXRpbC56aXAuWmlwRmlsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuSU92ZXJ3cml0ZVF1ZXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLndpemFyZHMuZGF0YXRyYW5zZmVyLkZpbGVTeXN0ZW1TdHJ1Y3R1cmVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS53aXphcmRzLmRhdGF0cmFuc2Zlci5JSW1wb3J0U3RydWN0dXJlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkud2l6YXJkcy5kYXRhdHJhbnNmZXIuSW1wb3J0T3BlcmF0aW9uOwotCi0vKioKLSAqIEltcG9ydHMgemlwcGVkIGZpbGVzIGludG8gdGhlIHRlc3Qgd29ya3NwYWNlLiBEZWxldGVzIGFsbCBwcm9qZWN0cyBpbgotICogd29ya3NwYWNlLgotICogCi0gKiBAYXV0aG9yIHBhdmVyeQotICovCi1wdWJsaWMgY2xhc3MgUHJvamVjdFVuemlwVXRpbGl0eSB7Ci0JY2xhc3MgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIGltcGxlbWVudHMgSVByb2dyZXNzTW9uaXRvciB7Ci0JCXByaXZhdGUgYm9vbGVhbiBmaW5pc2hlZCA9IGZhbHNlOwotCi0JCXB1YmxpYyB2b2lkIGJlZ2luVGFzayhTdHJpbmcgbmFtZSwgaW50IHRvdGFsV29yaykgewotCQkJLy8gbm9vcAotCQl9Ci0KLQkJcHVibGljIHZvaWQgZG9uZSgpIHsKLQkJCWZpbmlzaGVkID0gdHJ1ZTsKLQkJfQotCi0JCXB1YmxpYyBib29sZWFuIGlzRmluaXNoZWQoKSB7Ci0JCQlyZXR1cm4gZmluaXNoZWQ7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBpbnRlcm5hbFdvcmtlZChkb3VibGUgd29yaykgewotCQkJLy8gbm9vcAotCQl9Ci0KLQkJcHVibGljIGJvb2xlYW4gaXNDYW5jZWxlZCgpIHsKLQkJCXJldHVybiBmaW5pc2hlZDsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHNldENhbmNlbGVkKGJvb2xlYW4gdmFsdWUpIHsKLQkJCWlmICh2YWx1ZSA9PSB0cnVlKQotCQkJCWZpbmlzaGVkID0gdHJ1ZTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHNldFRhc2tOYW1lKFN0cmluZyBuYW1lKSB7Ci0JCQkvLyBub29wCi0JCX0KLQotCQlwdWJsaWMgdm9pZCBzdWJUYXNrKFN0cmluZyBuYW1lKSB7Ci0JCQkvLyBub29wCi0JCX0KLQotCQlwdWJsaWMgdm9pZCB3b3JrZWQoaW50IHdvcmspIHsKLQkJCS8vIG5vb3AKLQkJfQotCX0KLQotCWNsYXNzIE15T3ZlcndyaXRlUXVlcnkgaW1wbGVtZW50cyBJT3ZlcndyaXRlUXVlcnkgewotCQlwdWJsaWMgU3RyaW5nIHF1ZXJ5T3ZlcndyaXRlKFN0cmluZyBwYXRoU3RyaW5nKSB7Ci0JCQlyZXR1cm4gQUxMOwotCQl9Ci0JfQotCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPSkVDVF9aSVBTX0ZPTERFUiA9ICJwcm9qZWN0dGVzdGZpbGVzIjsKLQlwcml2YXRlIExpc3QgZkNyZWF0ZWRQcm9qZWN0cyA9IG51bGw7Ci0KLQlwdWJsaWMgUHJvamVjdFVuemlwVXRpbGl0eSgpIHsKLQkJLy8gZm9yIGRlbGV0aW9uIGxhdGVyCi0JCWZDcmVhdGVkUHJvamVjdHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGZpbGVUb0ltcG9ydAotCSAqICAgICAgICAgICAgdGhlIGZpbGUgeW91IHdpc2ggdG8gaW1wb3J0Ci0JICogQHBhcmFtIGZvbGRlclBhdGgKLQkgKiAgICAgICAgICAgIHRoZSBjb250YWluZXIgcGF0aCB3aXRoaW4gdGhlIHdvcmtzcGFjZQotCSAqLwotCXB1YmxpYyB2b2lkIGltcG9ydEZpbGUoRmlsZSBmaWxlVG9JbXBvcnQsIFN0cmluZyBmb2xkZXJQYXRoKSB7Ci0JCVdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBpbXBvcnRQcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJdHJ5IHsKLQkJCWlmIChmaWxlVG9JbXBvcnQuZXhpc3RzKCkpIHsKLQkJCQlJUGF0aCBjb250YWluZXJQYXRoID0gbmV3IFBhdGgoZm9sZGVyUGF0aCk7Ci0JCQkJLy9mQ3JlYXRlZFByb2plY3RzLmFkZChmb2xkZXJQYXRoKTsKLQkJCQlJSW1wb3J0U3RydWN0dXJlUHJvdmlkZXIgcHJvdmlkZXIgPSBGaWxlU3lzdGVtU3RydWN0dXJlUHJvdmlkZXIuSU5TVEFOQ0U7Ci0JCQkJSU92ZXJ3cml0ZVF1ZXJ5IG92ZXJ3cml0ZUltcGxlbWVudG9yID0gbmV3IE15T3ZlcndyaXRlUXVlcnkoKTsKLQkJCQlGaWxlW10gZmlsZXNUb0ltcG9ydCA9IHtmaWxlVG9JbXBvcnR9OwotCQkJCUltcG9ydE9wZXJhdGlvbiBpbXBvcnRPcCA9IG5ldyBJbXBvcnRPcGVyYXRpb24oY29udGFpbmVyUGF0aCwgbnVsbCwgcHJvdmlkZXIsIG92ZXJ3cml0ZUltcGxlbWVudG9yLCBBcnJheXMuYXNMaXN0KGZpbGVzVG9JbXBvcnQpKTsKLQkJCQlpbXBvcnRPcC5zZXRDcmVhdGVDb250YWluZXJTdHJ1Y3R1cmUoZmFsc2UpOwotCQkJCWltcG9ydE9wLnNldE92ZXJ3cml0ZVJlc291cmNlcyh0cnVlKTsKLQkJCQlpbXBvcnRPcC5ydW4oaW1wb3J0UHJvZ3Jlc3MpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJoYW5kbGUgc291cmNlIGRvZXNuJ3QgZXhpc3QiKTsKLQkJCX0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWltcG9ydFByb2dyZXNzLmRvbmUoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIHRoZSBmb2xsb3dpbmcgaXMgbG9naWMgZnJvbQotCSAqIGh0dHA6Ly93d3cuZGV2c2hlZC5jb20vYy9hL0phdmEvWmlwLU1lZXRzLUphdmEvMi8KLQkgKi8KLQkvLyBzcGVjaWZ5IGJ1ZmZlciBzaXplIGZvciBleHRyYWN0aW9uCi0Jc3RhdGljIGZpbmFsIGludCBCVUZGRVIgPSAyMDQ4OwotCi0JcHVibGljIHZvaWQgdW56aXBBbmRJbXBvcnQoRmlsZSBpbkZpbGUsIFN0cmluZyBkZXN0aW5hdGlvbkRpcmVjdG9yeSkgewotCQl0cnkgewotCQkJLy8gU3BlY2lmeSBmaWxlIHRvIGRlY29tcHJlc3MKLQkJCVN0cmluZyBpbkZpbGVOYW1lID0gaW5GaWxlLmdldEFic29sdXRlUGF0aCgpOyAvLyJjOi9leGFtcGxlLnppcCI7Ci0JCQkvLyBTcGVjaWZ5IGRlc3RpbmF0aW9uIHdoZXJlIGZpbGUgd2lsbCBiZSB1bnppcHBlZAotCQkJLy9TdHJpbmcgZGVzdGluYXRpb25EaXJlY3RvcnkgPQotCQkJLy8gImQ6L2VjbGlwc2VkZXYvTTVfU1NFX1RFU1RTX1dPUktTUEFDRS8iOyAvLyJjOi90ZW1wLyI7Ci0JCQlGaWxlIHNvdXJjZVppcEZpbGUgPSBuZXcgRmlsZShpbkZpbGVOYW1lKTsKLQkJCUZpbGUgdW56aXBEZXN0aW5hdGlvbkRpcmVjdG9yeSA9IG5ldyBGaWxlKGRlc3RpbmF0aW9uRGlyZWN0b3J5KTsKLQkJCS8vIE9wZW4gWmlwIGZpbGUgZm9yIHJlYWRpbmcKLQkJCVppcEZpbGUgemlwRmlsZSA9IG5ldyBaaXBGaWxlKHNvdXJjZVppcEZpbGUsIFppcEZpbGUuT1BFTl9SRUFEKTsKLQkJCS8vIENyZWF0ZSBhbiBlbnVtZXJhdGlvbiBvZiB0aGUgZW50cmllcyBpbiB0aGUgemlwIGZpbGUKLQkJCUVudW1lcmF0aW9uIHppcEZpbGVFbnRyaWVzID0gemlwRmlsZS5lbnRyaWVzKCk7Ci0JCQlTdHJpbmcgcHJvamVjdEZvbGRlck5hbWUgPSBudWxsOwotCQkJSVByb2plY3QgY3VycmVudFByb2plY3QgPSBudWxsOwotCQkJLy8gUHJvY2VzcyBlYWNoIGVudHJ5Ci0JCQl3aGlsZSAoemlwRmlsZUVudHJpZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLQkJCQkvLyBncmFiIGEgemlwIGZpbGUgZW50cnkKLQkJCQlaaXBFbnRyeSBlbnRyeSA9IChaaXBFbnRyeSkgemlwRmlsZUVudHJpZXMubmV4dEVsZW1lbnQoKTsKLQkJCQlTdHJpbmcgY3VycmVudEVudHJ5ID0gZW50cnkuZ2V0TmFtZSgpOwotCQkJCS8vU3lzdGVtLm91dC5wcmludGxuKCJFeHRyYWN0aW5nOiAiICsgZW50cnkpOwotCQkJCUZpbGUgZGVzdEZpbGUgPSBuZXcgRmlsZSh1bnppcERlc3RpbmF0aW9uRGlyZWN0b3J5LCBjdXJyZW50RW50cnkpOwotCQkJCS8vIGdyYWIgZmlsZSdzIHBhcmVudCBkaXJlY3Rvcnkgc3RydWN0dXJlCi0JCQkJRmlsZSBkZXN0aW5hdGlvblBhcmVudCA9IGRlc3RGaWxlLmdldFBhcmVudEZpbGUoKTsKLQkJCQkvLyBjcmVhdGUgdGhlIHBhcmVudCBkaXJlY3Rvcnkgc3RydWN0dXJlIGlmIG5lZWRlZAotCQkJCWRlc3RpbmF0aW9uUGFyZW50Lm1rZGlycygpOwotCQkJCS8vIGV4dHJhY3QgZmlsZSBpZiBub3QgYSBkaXJlY3RvcnkKLQkJCQlpZiAoIWVudHJ5LmlzRGlyZWN0b3J5KCkpIHsKLQkJCQkJQnVmZmVyZWRJbnB1dFN0cmVhbSBpcyA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKHppcEZpbGUuZ2V0SW5wdXRTdHJlYW0oZW50cnkpKTsKLQkJCQkJaW50IGN1cnJlbnRCeXRlOwotCQkJCQkvLyBlc3RhYmxpc2ggYnVmZmVyIGZvciB3cml0aW5nIGZpbGUKLQkJCQkJYnl0ZSBkYXRhW10gPSBuZXcgYnl0ZVtCVUZGRVJdOwotCQkJCQkvLyB3cml0ZSB0aGUgY3VycmVudCBmaWxlIHRvIGRpc2sKLQkJCQkJRmlsZU91dHB1dFN0cmVhbSBmb3MgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShkZXN0RmlsZSk7Ci0JCQkJCUJ1ZmZlcmVkT3V0cHV0U3RyZWFtIGRlc3QgPSBuZXcgQnVmZmVyZWRPdXRwdXRTdHJlYW0oZm9zLCBCVUZGRVIpOwotCQkJCQkvLyByZWFkIGFuZCB3cml0ZSB1bnRpbCBsYXN0IGJ5dGUgaXMgZW5jb3VudGVyZWQKLQkJCQkJd2hpbGUgKChjdXJyZW50Qnl0ZSA9IGlzLnJlYWQoZGF0YSwgMCwgQlVGRkVSKSkgIT0gLTEpIHsKLQkJCQkJCWRlc3Qud3JpdGUoZGF0YSwgMCwgY3VycmVudEJ5dGUpOwotCQkJCQl9Ci0JCQkJCWRlc3QuZmx1c2goKTsKLQkJCQkJZGVzdC5jbG9zZSgpOwotCQkJCQlpcy5jbG9zZSgpOwotCQkJCQlpZiAocHJvamVjdEZvbGRlck5hbWUgIT0gbnVsbCkKLQkJCQkJCWltcG9ydEZpbGUoZGVzdEZpbGUsIHByb2plY3RGb2xkZXJOYW1lKTsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCS8vIG5lZWQgaGFuZGxlIHRvIHRoZSBtYWluIHByb2plY3QgZm9sZGVyIHRvIGNyZWF0ZQotCQkJCQkvLyBjb250YWluZXJQYXRoCi0JCQkJCS8vIHVubGlrZSB2ZXJzaW9uIGluIHNzZS50ZXN0cywgd2UgZG9uJ3QgY3JlYXRlIHByb2plY3QKLQkJCQkJLy8gZm9yCi0JCQkJCS8vIGV2ZXJ5IGRpcmVjdG9yeQotCQkJCQkvLwkJCQkJaWYocHJvamVjdEZvbGRlck5hbWUgPT0gbnVsbCkgewotCQkJCQkvLwkJCQkJCXByb2plY3RGb2xkZXJOYW1lID0gZGVzdEZpbGUuZ2V0TmFtZSgpOwotCQkJCQkvLwkJCQkJCWZDcmVhdGVkUHJvamVjdHMuYWRkKHByb2plY3RGb2xkZXJOYW1lKTsKLQkJCQkJLy8JCQkJCQkKLQkJCQkJLy8JCQkJCQljdXJyZW50UHJvamVjdCA9Ci0JCQkJCS8vIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0Rm9sZGVyTmFtZSk7Ci0JCQkJCS8vCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJemlwRmlsZS5jbG9zZSgpOwotCQkJLy8gZml4ZXMgd29ya3NwYWNlIG1ldGFkYXRhIGZvciB0aGUgcHJvamVjdAotCQkJLy8gZm9yIGNsZWFuIHN0YXJ0dXAgbmV4dCBydW4KLQkJCWlmIChjdXJyZW50UHJvamVjdCAhPSBudWxsKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJUGF0aCBwcm9qZWN0TG9jYXRpb24gPSBuZXcgUGF0aChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKSk7Ci0JCQkJCWNyZWF0ZVByb2plY3QoY3VycmVudFByb2plY3QsIHByb2plY3RMb2NhdGlvbiwgbmV3IFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gY2V4KSB7Ci0JCQkJCWNleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgewotCQkJaW9lLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogIAotCSAqLwotCXB1YmxpYyB2b2lkIHJlZnJlc2hXb3Jrc3BhY2UoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlXb3Jrc3BhY2VSb290IHdzUm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCUlQcm9qZWN0W10gcHJvamVjdHMgPSB3c1Jvb3QuZ2V0UHJvamVjdHMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykgewotCQkJcHJvamVjdHNbaV0ucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCX0KLQkJd3NSb290LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIERlbGV0ZSBwcm9qZWN0cyBjcmVhdGVkICh1bnppcHBlZCBhbmQgaW1wb3J0ZWQpIGJ5IHRoaXMgdXRpbGl0eQotCSAqIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgZGVsZXRlUHJvamVjdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZmluYWwgSVByb2plY3RbXSBwcm9qZWN0cyA9IGdldENyZWF0ZWRQcm9qZWN0cygpOwotCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gZGVsZXRlT3AgPSBuZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgewotCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3RzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCXByb2plY3RzW2ldLmNsZWFySGlzdG9yeShudWxsKTsKLQkJCQkJcHJvamVjdHNbaV0uY2xvc2UobnVsbCk7Ci0JCQkJCXByb2plY3RzW2ldLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJCQl9Ci0JCQkJcmVmcmVzaFdvcmtzcGFjZSgpOwotCQkJfQotCQl9OwotCQlXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3MgPSBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCWRlbGV0ZU9wLnJ1bihwcm9ncmVzcyk7Ci0JCS8vIHNhdmVzIHRoZSBuZXcgd29ya3NwYWNlIG1ldGFkYXRhCi0JCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5zYXZlKHRydWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIGRlbGV0ZVByb2plY3QoU3RyaW5nIHByb2plY3ROYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZmluYWwgU3RyaW5nIG5hbWUgPSBwcm9qZWN0TmFtZTsKLQkJSVdvcmtzcGFjZVJvb3Qgd3NSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJZmluYWwgSVByb2plY3QgcHJvaiA9IHdzUm9vdC5nZXRQcm9qZWN0KG5hbWUpOwotCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gZGVsZXRlT3AgPSBuZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKHByb2opIHsKLQkJCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJLy8JCQkJSVdvcmtzcGFjZVJvb3Qgd3NSb290ID0KLQkJCQkvLyBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQkJCS8vCQkJCUlQcm9qZWN0IHByb2ogPSB3c1Jvb3QuZ2V0UHJvamVjdChuYW1lKTsKLQkJCQlpZiAocHJvaiAhPSBudWxsICYmIHByb2ouZXhpc3RzKCkpIHsKLQkJCQkJcHJvai5jbGVhckhpc3RvcnkobnVsbCk7Ci0JCQkJCS8vcHJvai5jbG9zZShudWxsKTsKLQkJCQkJcHJvai5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCQkJdHJ5IHsKLQkJCQkJCXByb2ouZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOwotCQkJCQl9Ci0JCQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCQkJLy8ganVzdCB0cnkgYWdhaW4gKG5vdCBzdXJlIHdoeSB0aGV5IGFyZSBub3QgYmVpbmcKLQkJCQkJCS8vIGRlbGV0ZWQpCi0JCQkJCQlwcm9qLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJCQkJcHJvai5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JCQkJCX0KLQkJCQkJLy9wcm9qID0gbnVsbDsKLQkJCQl9Ci0JCQkJcmVmcmVzaFdvcmtzcGFjZSgpOwotCQkJfQotCQl9OwotCQlXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3MgPSBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCWRlbGV0ZU9wLnJ1bihwcm9ncmVzcyk7Ci0JCS8vIHNhdmVzIHRoZSBuZXcgd29ya3NwYWNlIG1ldGFkYXRhCi0JCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5zYXZlKHRydWUsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gSVByb2plY3RzIHRoYXQgd2VyZSB1bnppcHBlZCBhbmQgaW1wb3J0ZWQgaW50byB0aGUgd29ya3NwYWNlIGJ5Ci0JICogICAgICAgICB0aGlzIHV0aWxpdHkKLQkgKi8KLQlwdWJsaWMgSVByb2plY3RbXSBnZXRDcmVhdGVkUHJvamVjdHMoKSB7Ci0JCUlXb3Jrc3BhY2VSb290IHdzUm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCVN0cmluZ1tdIHByb2plY3ROYW1lcyA9IChTdHJpbmdbXSkgZkNyZWF0ZWRQcm9qZWN0cy50b0FycmF5KG5ldyBTdHJpbmdbZkNyZWF0ZWRQcm9qZWN0cy5zaXplKCldKTsKLQkJSVByb2plY3RbXSBwcm9qZWN0cyA9IG5ldyBJUHJvamVjdFtwcm9qZWN0TmFtZXMubGVuZ3RoXTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0TmFtZXMubGVuZ3RoOyBpKyspIHsKLQkJCXByb2plY3RzW2ldID0gd3NSb290LmdldFByb2plY3QocHJvamVjdE5hbWVzW2ldKTsKLQkJfQotCQlyZXR1cm4gcHJvamVjdHM7Ci0JfQotCi0JcHVibGljIHZvaWQgaW5pdEphdmFQcm9qZWN0KFN0cmluZyBwcm9qTmFtZSkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkvLyByZXN5bmNoCi0JCXJlZnJlc2hXb3Jrc3BhY2UoKTsKLQkJLy9jaGFuZ2UgcHJlcmVxcyB0byBnZXQgdGhpcyBmdW5jdGlvbmFsaXR5IGJhY2sgaW4KLQkJSVByb2plY3QgcHJvaiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qTmFtZSk7Ci0JCWlmICghcHJvai5leGlzdHMoKSkgewotCQkJcHJvai5jcmVhdGUobmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJLy8gbmVlZCB0byBhZGQgamF2YSBuYXR1cmUsIG9yIGVsc2UgcHJvamVjdCB3b24ndCAiZXhpc3QoKSIgaW4gdGhlCi0JCS8vIGphdmEKLQkJLy8gZWxlbWVudCBzZW5zZQotCQlTdHJpbmdbXSBuYXR1cmVJZHMgPSB7Im9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmUifTsKLQkJaWYgKCFwcm9qLmlzT3BlbigpKSB7Ci0JCQlwcm9qLm9wZW4obnVsbCk7Ci0JCX0KLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvai5nZXREZXNjcmlwdGlvbigpOwotCQlkZXNjLnNldE5hdHVyZUlkcyhuYXR1cmVJZHMpOwotCQlwcm9qLnNldERlc2NyaXB0aW9uKGRlc2MsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCX0KLQotCXByaXZhdGUgdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQYXRoIGxvY2F0aW9uUGF0aCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCW1vbml0b3IgPSBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCX0KLQkJbW9uaXRvci5iZWdpblRhc2soImNyZWF0aW5nIHRlc3QgcHJvamVjdCIsIDEwKTsKLQkJLy8gY3JlYXRlIHRoZSBwcm9qZWN0Ci0JCXRyeSB7Ci0JCQlpZiAoIXByb2plY3QuZXhpc3RzKCkpIHsKLQkJCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2MgPSBwcm9qZWN0LmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihwcm9qZWN0LmdldE5hbWUoKSk7Ci0JCQkJaWYgKFBsYXRmb3JtLmdldExvY2F0aW9uKCkuZXF1YWxzKGxvY2F0aW9uUGF0aCkpIHsKLQkJCQkJbG9jYXRpb25QYXRoID0gbnVsbDsKLQkJCQl9Ci0JCQkJZGVzYy5zZXRMb2NhdGlvbihsb2NhdGlvblBhdGgpOwotCQkJCXByb2plY3QuY3JlYXRlKGRlc2MsIG1vbml0b3IpOwotCQkJCW1vbml0b3IgPSBudWxsOwotCQkJfQotCQkJaWYgKCFwcm9qZWN0LmlzT3BlbigpKSB7Ci0JCQkJcHJvamVjdC5vcGVuKG1vbml0b3IpOwotCQkJCW1vbml0b3IgPSBudWxsOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vbml0b3IgIT0gbnVsbCkgewotCQkJCW1vbml0b3IuZG9uZSgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgZGVsZXRlUHJvamVjdChJUHJvamVjdCBmUHJvamVjdCkgdGhyb3dzIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLQkJZmluYWwgSVByb2plY3QgcHJvaiA9IGZQcm9qZWN0OwotCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gZGVsZXRlT3AgPSBuZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKHByb2opIHsKLQkJCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJLy8JCQkJSVdvcmtzcGFjZVJvb3Qgd3NSb290ID0KLQkJCQkvLyBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQkJCS8vCQkJCUlQcm9qZWN0IHByb2ogPSB3c1Jvb3QuZ2V0UHJvamVjdChuYW1lKTsKLQkJCQlpZiAocHJvaiAhPSBudWxsICYmIHByb2ouZXhpc3RzKCkpIHsKLQkJCQkJcHJvai5jbGVhckhpc3RvcnkobnVsbCk7Ci0JCQkJCS8vcHJvai5jbG9zZShudWxsKTsKLQkJCQkJcHJvai5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCQkJcHJvai5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JCQkJCS8vcHJvaiA9IG51bGw7Ci0JCQkJfQotCQkJCXJlZnJlc2hXb3Jrc3BhY2UoKTsKLQkJCX0KLQkJfTsKLQkJLy9Xb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3MgPSBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCWRlbGV0ZU9wLnJ1bihudWxsKTsKLQkJLy8gc2F2ZXMgdGhlIG5ldyB3b3Jrc3BhY2UgbWV0YWRhdGEKLQkJLy9SZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuc2F2ZSh0cnVlLCBudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9UaW1lc3RhbXBVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL1RpbWVzdGFtcFV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZlNGQzNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL1RpbWVzdGFtcFV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnRleHQuRGF0ZUZvcm1hdDsKLWltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci0KLS8qKgotICogQGF1dGhvciBkYXZpZHcKLSAqCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIG9uZSB0aW1lc3RhbXAgcGVyIFZNIHJ1bi4KLSAqIChUZWNobmljYWxseSwgcGVyIGNsYXNzIGxvYWRpbmcuKQotICovCi1wdWJsaWMgY2xhc3MgVGltZXN0YW1wVXRpbCB7Ci0KLQlwcml2YXRlIHN0YXRpYyBEYXRlIHRpbWVzdGFtcCA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgRGF0ZUZvcm1hdCBzaG9ydEZvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5Jy0nTU0nLSdkZCIpOwotCS8vCXByaXZhdGUgc3RhdGljIERhdGVGb3JtYXQgbG9uZ0Zvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5Jy0nTU0nLSdkZCctJ2trJy0nbW0nLSdzcyIpOwotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIG5vd1Nob3J0ID0gbnVsbDsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHRpbWVzdGFtcCgpIHsKLQotCQlpZiAoVGltZXN0YW1wVXRpbC5ub3dTaG9ydCA9PSBudWxsKSB7Ci0JCQlUaW1lc3RhbXBVdGlsLm5vd1Nob3J0ID0gc2hvcnRGb3JtYXQuZm9ybWF0KGVuc3VyZVRpbWVzdGFtcCgpKTsKLQkJfQotCQlyZXR1cm4gVGltZXN0YW1wVXRpbC5ub3dTaG9ydDsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIERhdGUgZW5zdXJlVGltZXN0YW1wKCkgewotCQkvLyBqdXN0IGNhbGN1bGF0ZSAndGltZXN0YW1wJyBvbmNlIHBlciBjbGFzcyBsb2FkaW5nLCAKLQkJLy8gc28gdGhpcyAndGltZXN0YW1wJyByZW1haW5zIHRoZSBzYW1lIGR1cmluZyAKLQkJLy8gZW50aXJlIHJ1bi4gCi0JCWlmIChUaW1lc3RhbXBVdGlsLnRpbWVzdGFtcCA9PSBudWxsKSB7Ci0JCQlDYWxlbmRhciBjYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7Ci0JCQlUaW1lc3RhbXBVdGlsLnRpbWVzdGFtcCA9IGNhbGVuZGFyLmdldFRpbWUoKTsKLQkJfQotCQlyZXR1cm4gVGltZXN0YW1wVXRpbC50aW1lc3RhbXA7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGQ5ZTlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLTxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KLQotCTwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0JPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KLQk8IS0tIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIke2Jhc2VkaXJ9XC4uXC4uIiAvPiAtLT4KLQk8ZWNobyBtZXNzYWdlPSJiYXNlZGlyICR7YmFzZWRpcn0iIC8+Ci0JPGVjaG8gbWVzc2FnZT0iZWNsaXBzZSBwbGFjZSAke2VjbGlwc2UtaG9tZX0iIC8+Ci0KLQk8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgcGx1Z2luLW5hbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+Ci0JPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzIiAvPgotCTxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotCTwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0JPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJpbml0Ij4KLQkJPGRlbGV0ZT4KLQkJCTxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLip4bWwiIC8+Ci0JCTwvZGVsZXRlPgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLQk8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQkJPHByb3BlcnR5IG5hbWU9IndzdC1mb2xkZXIiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vd3N0X2ZvbGRlciIgLz4KLQkJPGRlbGV0ZSBkaXI9IiR7d3N0LWZvbGRlcn0iIHF1aWV0PSJ0cnVlIiAvPgotCQk8YW50IHRhcmdldD0iY29yZS10ZXN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d3N0LWZvbGRlcn0iIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuU1NFTW9kZWxYTUxUZXN0U3VpdGUiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLQk8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0JPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotCTx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0JCTwhLS0gPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+IC0tPgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLQk8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLQkJPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLip4bWwiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0JCTwvYW50PgotCQk8IS0tCQk8ZW1haWxSZXN1bHRzIHJlc3VsdHNGaWxlPSIke2J1aWxkLXJlc3VsdHMtaG9tZX0vJHtwbHVnaW4tbmFtZX0ueG1sIiBhZGRyZXNzbGlzdD0iZGF2aWRfd2lsbGlhbXNAdXMuaWJtLmNvbSIgLz4gLS0+Ci0JPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvdGVzdGZpbGVzLnppcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy90ZXN0ZmlsZXMuemlwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODRmMzMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy90ZXN0ZmlsZXMuemlwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjAxMDUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjLyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NzYzZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXRlc3RzLmphcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhYzM3MGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmc8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz48L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGJjZDBjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLSNXZWQgSmFuIDEyIDE2OjQ5OjI4IEVTVCAyMDA1Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWFib3J0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGxldGVDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyZmI3MTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotI0ZyaSBNYXkgMjcgMjM6NTY6MzIgRURUIDIwMDUKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9MYXJnZU5vRW5jb2RpbmcuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvTGFyZ2VOb0VuY29kaW5nLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9MYXJnZU5vRW5jb2RpbmcuaHRtbAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL0xhcmdlTm9uRGVmYXVsdC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9MYXJnZU5vbkRlZmF1bHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL0xhcmdlTm9uRGVmYXVsdC5odG1sCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjM4MTBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiBFbmNvZGluZyBUZXN0cyBQbHVnLWluCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAKLUJ1bmRsZS1DbGFzc1BhdGg6IHRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5UZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5wcmVmLAotIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucHJvcGVydGllcywKLSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy51dGlsLAotIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcud3JpdGUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy54bWwKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuanVuaXQsCi0gb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2UudWkud29ya2JlbmNoLAotIG9yZy5lY2xpcHNlLnVpLmlkZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZQotRWNsaXBzZS1BdXRvU3RhcnQ6IHRydWUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY2Yjk2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLTxib2R5IGxhbmc9IkVOLVVTIj4KLTxoMj5BYm91dCBUaGlzIENvbnRlbnQ8L2gyPgotIAotPHA+RmVicnVhcnkgMjQsIDIwMDU8L3A+CQotPGgzPkxpY2Vuc2U8L2gzPgotCi08cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gKCZxdW90O0NvbnRlbnQmcXVvdDspLiAgVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCi1FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgotCi08cD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSBDb250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoJnF1b3Q7UmVkaXN0cmlidXRvciZxdW90OykgYW5kIGRpZmZlcmVudCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkKLWFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gIENoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiAgSWYgbm8gc3VjaCBsaWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gIFVubGVzcyBvdGhlcndpc2UKLWluZGljYXRlZCBiZWxvdywgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50LjwvcD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ4MTRiZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICAqLmphcixcCi0gICAgICAgICAgICAgICB0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgY29uZmlnLyxcCi0gICAgICAgICAgICAgICB0ZXN0ZmlsZXMvLFwKLSAgICAgICAgICAgICAgIHRlc3RmaWxlcy56aXAsXAotICAgICAgICAgICAgICAgaW5mby8sXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLXNyYy5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgaW5mby8sXAotICAgICAgICAgICAgICAgY29uZmlnLwotc291cmNlLnRlc3RzLmphciA9IHNyYy8KLW91dHB1dC50ZXN0cy5qYXIgPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL291dHB1dEZyb21MaXN0Q2hhcnNldHMvSUJNMTRfMDEyOC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL291dHB1dEZyb21MaXN0Q2hhcnNldHMvSUJNMTRfMDEyOC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZmIxZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9vdXRwdXRGcm9tTGlzdENoYXJzZXRzL0lCTTE0XzAxMjgudHh0CisrKyAvZGV2L251bGwKQEAgLTEsODU3ICswLDAgQEAKLQotQ3VycmVudCBMb2NhbGU6IGVuX1VTCi0KLUpSRSB2ZXJzaW9uOiBKMlJFIDEuNC4yIElCTSBXaW5kb3dzIDMyIGJ1aWxkIGNuZGV2LTIwMDQwMTI4IChKSVQgZW5hYmxlZDogaml0YykKLS0tIGxpc3RpbmcgcHJvcGVydGllcyAtLQotamF2YS5hc3Npc3RpdmU9T04KLWphdmEucnVudGltZS5uYW1lPUphdmEoVE0pIDIgUnVudGltZSBFbnZpcm9ubWVudCwgU3RhbmQuLi4KLXN1bi5ib290LmxpYnJhcnkucGF0aD1EOlxidWlsZHNcRGFpbHlcd3N3Yi1TREstSTIwMDQwMjI2LXdpLi4uCi1qYXZhLnZtLnZlcnNpb249MS40LjIKLWphdmEudm0udmVuZG9yPUlCTSBDb3Jwb3JhdGlvbgotamF2YS52ZW5kb3IudXJsPWh0dHA6Ly93d3cuaWJtLmNvbS8KLXBhdGguc2VwYXJhdG9yPTsKLWphdmEudm0ubmFtZT1DbGFzc2ljIFZNCi1maWxlLmVuY29kaW5nLnBrZz1zdW4uaW8KLXVzZXIuY291bnRyeT1VUwotc3VuLm9zLnBhdGNoLmxldmVsPVNlcnZpY2UgUGFjayAxCi1qYXZhLnZtLnNwZWNpZmljYXRpb24ubmFtZT1KYXZhIFZpcnR1YWwgTWFjaGluZSBTcGVjaWZpY2F0aW9uCi11c2VyLmRpcj1EOlxidWlsZHNcRGFpbHlcZWNsaXBzZS1TREstSTIwMDQwMzA0Li4uCi1qYXZhLnJ1bnRpbWUudmVyc2lvbj0xLjQuMgotamF2YS5mdWxsdmVyc2lvbj1KMlJFIDEuNC4yIElCTSBXaW5kb3dzIDMyIGJ1aWxkIGNuZGV2Li4uCi1qYXZhLmF3dC5ncmFwaGljc2Vudj1zdW4uYXd0LldpbjMyR3JhcGhpY3NFbnZpcm9ubWVudAotamF2YS5lbmRvcnNlZC5kaXJzPUQ6XGJ1aWxkc1xEYWlseVx3c3diLVNESy1JMjAwNDAyMjYtd2kuLi4KLW9zLmFyY2g9eDg2Ci1qYXZhLmlvLnRtcGRpcj1DOlxET0NVTUV+MVxEQVZJRFd+MS5ETVdcTE9DQUxTfjFcVGVtcFwKLWxpbmUuc2VwYXJhdG9yPQotCi1qYXZhLnZtLnNwZWNpZmljYXRpb24udmVuZG9yPVN1biBNaWNyb3N5c3RlbXMgSW5jLgotdXNlci52YXJpYW50PQotamF2YS5hd3QuZm9udHM9Ci1vcy5uYW1lPVdpbmRvd3MgWFAKLXN1bi5qYXZhMmQuZm9udHBhdGg9Ci1qYXZhLmxpYnJhcnkucGF0aD1EOlxidWlsZHNcRGFpbHlcd3N3Yi1TREstSTIwMDQwMjI2LXdpLi4uCi1qYXZhLnNwZWNpZmljYXRpb24ubmFtZT1KYXZhIFBsYXRmb3JtIEFQSSBTcGVjaWZpY2F0aW9uCi1qYXZhLmNsYXNzLnZlcnNpb249NDguMAotaWJtLnN5c3RlbS5lbmNvZGluZz1DcDEyNTIKLWphdmEudXRpbC5wcmVmcy5QcmVmZXJlbmNlc0ZhY3Rvcnk9amF2YS51dGlsLnByZWZzLldpbmRvd3NQcmVmZXJlbmNlc0ZhYy4uLgotaW52b2tlZHZpYWphdmE9Ci1vcy52ZXJzaW9uPTUuMQotdXNlci5ob21lPUM6XERvY3VtZW50cyBhbmQgU2V0dGluZ3NcZGF2aWR3LkRNVzJUMjMKLXVzZXIudGltZXpvbmU9Ci1qYXZhLmF3dC5wcmludGVyam9iPXN1bi5hd3Qud2luZG93cy5XUHJpbnRlckpvYgotamF2YS5zcGVjaWZpY2F0aW9uLnZlcnNpb249MS40Ci1maWxlLmVuY29kaW5nPUNwMTI1MgotdXNlci5uYW1lPWRhdmlkdwotamF2YS5jbGFzcy5wYXRoPUQ6XGJ1aWxkc1xEYWlseVxlY2xpcHNlLVNESy1JMjAwNDAzMDQuLi4KLWphdmEudm0uc3BlY2lmaWNhdGlvbi52ZXJzaW9uPTEuMAotc3VuLmFyY2guZGF0YS5tb2RlbD0zMgotamF2YS5ob21lPUQ6XGJ1aWxkc1xEYWlseVx3c3diLVNESy1JMjAwNDAyMjYtd2kuLi4KLWphdmEuc3BlY2lmaWNhdGlvbi52ZW5kb3I9U3VuIE1pY3Jvc3lzdGVtcyBJbmMuCi11c2VyLmxhbmd1YWdlPWVuCi1hd3QudG9vbGtpdD1zdW4uYXd0LndpbmRvd3MuV1Rvb2xraXQKLWphdmEudm0uaW5mbz1KMlJFIDEuNC4yIElCTSBXaW5kb3dzIDMyIGJ1aWxkIGNuZGV2Li4uCi1qYXZhLnZlcnNpb249MS40LjIKLWphdmEuZXh0LmRpcnM9RDpcYnVpbGRzXERhaWx5XHdzd2ItU0RLLUkyMDA0MDIyNi13aS4uLgotc3VuLmJvb3QuY2xhc3MucGF0aD1EOlxidWlsZHNcRGFpbHlcd3N3Yi1TREstSTIwMDQwMjI2LXdpLi4uCi1qYXZhLnZlbmRvcj1JQk0gQ29ycG9yYXRpb24KLWZpbGUuc2VwYXJhdG9yPVwKLWphdmEudmVuZG9yLnVybC5idWc9Ci1qYXZhLmNvbXBpbGVyPWppdGMKLXN1bi5pby51bmljb2RlLmVuY29kaW5nPVVuaWNvZGVMaXR0bGUKLUF2YWlsYWJsZSBMb2NhbGVzCi1hcgotYXJfQUUKLWFyX0JICi1hcl9EWgotYXJfRUcKLWFyX0lRCi1hcl9KTwotYXJfS1cKLWFyX0xCCi1hcl9MWQotYXJfTUEKLWFyX09NCi1hcl9RQQotYXJfU0EKLWFyX1NECi1hcl9TWQotYXJfVE4KLWFyX1lFCi1iZQotYmVfQlkKLWJnCi1iZ19CRwotYm5fSU4KLWNhCi1jYV9FUwotY2FfRVNfUFJFRVVSTwotY3MKLWNzX0NaCi1kYQotZGFfREsKLWRhX0RLX0VVUk8KLWRlCi1kZV9BVAotZGVfQVRfUFJFRVVSTwotZGVfQ0gKLWRlX0RFCi1kZV9ERV9QUkVFVVJPCi1kZV9MVQotZGVfTFVfUFJFRVVSTwotZWwKLWVsX0dSCi1lbF9HUl9QUkVFVVJPCi1lbgotZW5fQVUKLWVuX0JFCi1lbl9CRV9QUkVFVVJPCi1lbl9DQQotZW5fR0IKLWVuX0dCX0VVUk8KLWVuX0hLCi1lbl9JRQotZW5fSUVfUFJFRVVSTwotZW5fSU4KLWVuX05aCi1lbl9QSAotZW5fU0cKLWVuX1VTCi1lbl9aQQotZXMKLWVzX0FSCi1lc19CTwotZXNfQ0wKLWVzX0NPCi1lc19DUgotZXNfRE8KLWVzX0VDCi1lc19FUwotZXNfRVNfUFJFRVVSTwotZXNfR1QKLWVzX0hOCi1lc19NWAotZXNfTkkKLWVzX1BBCi1lc19QRQotZXNfUFIKLWVzX1BZCi1lc19TVgotZXNfVVMKLWVzX1VZCi1lc19WRQotZXQKLWV0X0VFCi1maQotZmlfRkkKLWZpX0ZJX1BSRUVVUk8KLWZyCi1mcl9CRQotZnJfQkVfUFJFRVVSTwotZnJfQ0EKLWZyX0NICi1mcl9GUgotZnJfRlJfUFJFRVVSTwotZnJfTFUKLWZyX0xVX1BSRUVVUk8KLWd1Ci1ndV9JTgotaGkKLWhpX0lOCi1ocgotaHJfSFIKLWh1Ci1odV9IVQotaW4KLWluX0lECi1pcwotaXNfSVMKLWl0Ci1pdF9DSAotaXRfSVQKLWl0X0lUX1BSRUVVUk8KLWl3Ci1pd19JTAotamEKLWphX0pQCi1rawota2tfS1oKLWtuCi1rbl9JTgota28KLWtva19JTgota29fS1IKLWx0Ci1sdF9MVAotbHYKLWx2X0xWCi1tawotbWtfTUsKLW1sX0lOCi1tcgotbXJfSU4KLW1zCi1tc19NWQotbmJfTk8KLW5sCi1ubF9CRQotbmxfQkVfUFJFRVVSTwotbmxfTkwKLW5sX05MX1BSRUVVUk8KLW5vCi1ub19OTwotbm9fTk9fTlkKLW9yX0lOCi1wYQotcGFfSU4KLXBsCi1wbF9QTAotcHQKLXB0X0JSCi1wdF9QVAotcHRfUFRfUFJFRVVSTwotcm8KLXJvX1JPCi1ydQotcnVfUlUKLXNhCi1zYV9JTgotc2gKLXNoX1lVCi1zawotc2tfU0sKLXNsCi1zbF9TSQotc3EKLXNxX0FMCi1zcgotc3JfWVUKLXN2Ci1zdl9TRQotc3ZfU0VfRVVSTwotdGEKLXRhX0lOCi10ZQotdGVfSU4KLXRoCi10aF9USAotdGhfVEhfVEgKLXRyCi10cl9UUgotdWsKLXVrX1VBCi12aQotdmlfVk4KLXpoCi16aF9DTgotemhfQ05fSEsKLXpoX0hLCi16aF9TRwotemhfVFcKLWZpbGUuZW5jb2RpbmcucGtnOiBzdW4uaW8KLWZpbGUuZW5jb2Rpbmc6IENwMTI1MgotCi0KLUF2YWlsYWJsZSBDaGFyc2V0cwotMS4gIENoYXJzZXRuYW1lOiBCaWc1Ci0JZGlzcGxheU5hbWU6IEJpZzU6IFBDIFRhaXdhbiBCaWcgNQotCWFsaWFzZXM6IFtiaWc1LCBCaWc1LUhLU0NTXQotMi4gIENoYXJzZXRuYW1lOiBDRVNVLTgKLQlkaXNwbGF5TmFtZTogQ0VTVS04OiBVbmljb2RlIFVURi04ICh3aXRob3V0IHN1cnJvZ2F0ZXMpCi0JYWxpYXNlczogW0NFU1U4XQotMy4gIENoYXJzZXRuYW1lOiBDT01QT1VORF9URVhUCi0JZGlzcGxheU5hbWU6IENPTVBPVU5EX1RFWFQ6IFgxMSBDb21wb3VuZCBUZXh0Ci0JYWxpYXNlczogW3gtY29tcG91bmQtdGV4dCwgeDExLWNvbXBvdW5kLXRleHRdCi00LiAgQ2hhcnNldG5hbWU6IEVVQy1DTgotCWRpc3BsYXlOYW1lOiBFVUMtQ046IEVVQyBDaGluYQotCWFsaWFzZXM6IFtldWNfY24sIGV1Y2NuLCBpYm0tZXVjY25dCi01LiAgQ2hhcnNldG5hbWU6IEVVQy1KUAotCWRpc3BsYXlOYW1lOiBFVUMtSlA6IEVVQyBKYXBhbgotCWFsaWFzZXM6IFtldWMtanAtbGludXgsIHgtZXVjLWpwLCB4LWV1Y2pwLCBldWNfanBfbGludXgsIGV1Y2pwLCBldWNfanBdCi02LiAgQ2hhcnNldG5hbWU6IEVVQy1LUgotCWRpc3BsYXlOYW1lOiBFVUMtS1I6IEVVQyBLb3JlYQotCWFsaWFzZXM6IFs1NjAxLCBrc2M1NjAxXzE5ODcsIGtzY181NjAxLCBpYm0tZXVja3IsIGtzYzU2MDEtMTk4NywgaWJtLTk3MCwgZXVjX2tyLCBDcDk3MCwga3NfY181NjAxLTE5ODcsIGV1Y2tyXQotNy4gIENoYXJzZXRuYW1lOiBFVUMtVFcKLQlkaXNwbGF5TmFtZTogRVVDLVRXOiBFVUMgVGFpd2FuCi0JYWxpYXNlczogW2V1Y190dywgY25zMTE2NDMsIGV1Y3R3XQotOC4gIENoYXJzZXRuYW1lOiBHQjE4MDMwCi0JZGlzcGxheU5hbWU6IEdCMTgwMzA6IFBDIENoaW5hIEdCMTgwMzAKLQlhbGlhc2VzOiBbd2luZG93cy01NDkzNiwgaWJtLTEzOTIsIGdiMTgwMzAtMjAwMF0KLTkuICBDaGFyc2V0bmFtZTogR0IyMzEyCi0JZGlzcGxheU5hbWU6IEdCMjMxMgotCWFsaWFzZXM6IFtnYjIzMTItODAsIGdiMjMxMi0xOTgwXQotMTAuICBDaGFyc2V0bmFtZTogR0JLCi0JZGlzcGxheU5hbWU6IEdCSzogUEMgQ2hpbmEgR0JLCi0JYWxpYXNlczogW0dCS10KLTExLiAgQ2hhcnNldG5hbWU6IGhwLXJvbWFuOAotCWRpc3BsYXlOYW1lOiBocC1yb21hbjg6IEhQIFJvbWFuIDgKLQlhbGlhc2VzOiBbQ3AxMDUxLCBpYm0tMTA1MSwgcm9tYW44LCByOF0KLTEyLiAgQ2hhcnNldG5hbWU6IElCTS0wMzcKLQlkaXNwbGF5TmFtZTogSUJNLTAzNzogRUJDRElDIFVuaXRlZCBTdGF0ZXMKLQlhbGlhc2VzOiBbaWJtLTM3XQotMTMuICBDaGFyc2V0bmFtZTogSUJNLTEwMDYKLQlkaXNwbGF5TmFtZTogSUJNLTEwMDY6IElTTyBVcmR1Ci0JYWxpYXNlczogW2libTEwMDYsIENwMTAwNl0KLTE0LiAgQ2hhcnNldG5hbWU6IElCTS0xMDI1Ci0JZGlzcGxheU5hbWU6IElCTS0xMDI1OiBFQkNESUMgQ3lyaWxsaWMKLQlhbGlhc2VzOiBbaWJtMTAyNSwgQ3AxMDI1XQotMTUuICBDaGFyc2V0bmFtZTogSUJNLTEwMjYKLQlkaXNwbGF5TmFtZTogSUJNLTEwMjY6IEVCQ0RJQyBMYXRpbiA1IChUdXJrZXkpCi0JYWxpYXNlczogW0NwMTAyNiwgaWJtMTAyNl0KLTE2LiAgQ2hhcnNldG5hbWU6IElCTS0xMDI3Ci0JZGlzcGxheU5hbWU6IElCTS0xMDI3OiBFQkNESUMgU0JDUyBKYXBhbgotCWFsaWFzZXM6IFtpYm0xMDI3LCBDcDEwMjddCi0xNy4gIENoYXJzZXRuYW1lOiBJQk0tMTA0MQotCWRpc3BsYXlOYW1lOiBJQk0tMTA0MTogUEMgU0JDUy1vbmx5IEphcGFuCi0JYWxpYXNlczogW0NwMTA0MSwgaWJtMTA0MV0KLTE4LiAgQ2hhcnNldG5hbWU6IElCTS0xMDQzCi0JZGlzcGxheU5hbWU6IElCTS0xMDQzOiBQQyBTQkNTLW9ubHkgVGFpd2FuCi0JYWxpYXNlczogW0NwMTA0MywgaWJtMTA0M10KLTE5LiAgQ2hhcnNldG5hbWU6IElCTS0xMDQ2Ci0JZGlzcGxheU5hbWU6IElCTS0xMDQ2OiBFQkNESUMgQXJhYmljCi0JYWxpYXNlczogW2libTEwNDYsIENwMTA0Nl0KLTIwLiAgQ2hhcnNldG5hbWU6IElCTS0xMDQ2UwotCWRpc3BsYXlOYW1lOiBJQk0tMTA0NlM6IEVCQ0RJQyBBcmFiaWMgKHNoYXBlZCkKLQlhbGlhc2VzOiBbQ3AxMDQ2UywgaWJtMTA0NlNdCi0yMS4gIENoYXJzZXRuYW1lOiBJQk0tMTA0NwotCWRpc3BsYXlOYW1lOiBJQk0tMTA0NzogRUJDRElDIE9wZW4gRWRpdGlvbgotCWFsaWFzZXM6IFtDcDEwNDcsIGlibTEwNDddCi0yMi4gIENoYXJzZXRuYW1lOiBJQk0tMTA4OAotCWRpc3BsYXlOYW1lOiBJQk0tMTA4ODogUEMgU0JDUy1vbmx5IEtvcmVhbiBLUwotCWFsaWFzZXM6IFtDcDEwODgsIGlibTEwODhdCi0yMy4gIENoYXJzZXRuYW1lOiBJQk0tMTA5NwotCWRpc3BsYXlOYW1lOiBJQk0tMTA5NzogRUJDRElDIEZhcnNpCi0JYWxpYXNlczogW0NwMTA5NywgaWJtMTA5N10KLTI0LiAgQ2hhcnNldG5hbWU6IElCTS0xMDk4Ci0JZGlzcGxheU5hbWU6IElCTS0xMDk4OiBJU08gRmFyc2kKLQlhbGlhc2VzOiBbQ3AxMDk4LCBpYm0xMDk4XQotMjUuICBDaGFyc2V0bmFtZTogSUJNLTExMTIKLQlkaXNwbGF5TmFtZTogSUJNLTExMTI6IEVCQ0RJQyBCYWx0aWMKLQlhbGlhc2VzOiBbQ3AxMTEyLCBpYm0xMTEyXQotMjYuICBDaGFyc2V0bmFtZTogSUJNLTExMTQKLQlkaXNwbGF5TmFtZTogSUJNLTExMTQ6IFBDIFNCQ1Mtb25seSBUYWl3YW4KLQlhbGlhc2VzOiBbQ3AxMTE0LCBpYm0xMTE0XQotMjcuICBDaGFyc2V0bmFtZTogSUJNLTExMTUKLQlkaXNwbGF5TmFtZTogSUJNLTExMTU6IFBDIFNCQ1Mtb25seSBDaGluYQotCWFsaWFzZXM6IFtDcDExMTUsIGlibTExMTVdCi0yOC4gIENoYXJzZXRuYW1lOiBJQk0tMTEyMgotCWRpc3BsYXlOYW1lOiBJQk0tMTEyMjogRUJDRElDIEVzdG9uaWEKLQlhbGlhc2VzOiBbQ3AxMTIyLCBpYm0xMTIyXQotMjkuICBDaGFyc2V0bmFtZTogSUJNLTExMjMKLQlkaXNwbGF5TmFtZTogSUJNLTExMjM6IEVCQ0RJQyBVa3JhaW5lCi0JYWxpYXNlczogW0NwMTEyMywgaWJtMTEyM10KLTMwLiAgQ2hhcnNldG5hbWU6IElCTS0xMTI0Ci0JZGlzcGxheU5hbWU6IElCTS0xMTI0OiBQQyBVa3JhaW5lCi0JYWxpYXNlczogW0NwMTEyNCwgaWJtMTEyNF0KLTMxLiAgQ2hhcnNldG5hbWU6IElCTS0xMTQwCi0JZGlzcGxheU5hbWU6IElCTS0xMTQwOiBFQkNESUMgVW5pdGVkIFN0YXRlcyAoZXVybykKLQlhbGlhc2VzOiBbQ3AxMTQwLCBpYm0xMTQwXQotMzIuICBDaGFyc2V0bmFtZTogSUJNLTExNDEKLQlkaXNwbGF5TmFtZTogSUJNLTExNDE6IEVCQ0RJQyBHZXJtYW55IChldXJvKQotCWFsaWFzZXM6IFtDcDExNDEsIGlibTExNDFdCi0zMy4gIENoYXJzZXRuYW1lOiBJQk0tMTE0MgotCWRpc3BsYXlOYW1lOiBJQk0tMTE0MjogRUJDRElDIERlbm1hcmssIE5vcndheSAoZXVybykKLQlhbGlhc2VzOiBbQ3AxMTQyLCBpYm0xMTQyXQotMzQuICBDaGFyc2V0bmFtZTogSUJNLTExNDMKLQlkaXNwbGF5TmFtZTogSUJNLTExNDM6IEVCQ0RJQyBGaW5sYW5kLCBTd2VkZW4gKGV1cm8pCi0JYWxpYXNlczogW2libTExNDMsIENwMTE0M10KLTM1LiAgQ2hhcnNldG5hbWU6IElCTS0xMTQ0Ci0JZGlzcGxheU5hbWU6IElCTS0xMTQ0OiBFQkNESUMgSXRhbHkgKGV1cm8pCi0JYWxpYXNlczogW0NwMTE0NCwgaWJtMTE0NF0KLTM2LiAgQ2hhcnNldG5hbWU6IElCTS0xMTQ1Ci0JZGlzcGxheU5hbWU6IElCTS0xMTQ1OiBFQkNESUMgU3BhaW4gKGV1cm8pCi0JYWxpYXNlczogW2libTExNDUsIENwMTE0NV0KLTM3LiAgQ2hhcnNldG5hbWU6IElCTS0xMTQ2Ci0JZGlzcGxheU5hbWU6IElCTS0xMTQ2OiBFQkNESUMgVUssIElyZWxhbmQgKGV1cm8pCi0JYWxpYXNlczogW0NwMTE0NiwgaWJtMTE0Nl0KLTM4LiAgQ2hhcnNldG5hbWU6IElCTS0xMTQ3Ci0JZGlzcGxheU5hbWU6IElCTS0xMTQ3OiBFQkNESUMgRnJhbmNlIChldXJvKQotCWFsaWFzZXM6IFtDcDExNDcsIGlibTExNDddCi0zOS4gIENoYXJzZXRuYW1lOiBJQk0tMTE0OAotCWRpc3BsYXlOYW1lOiBJQk0tMTE0ODogRUJDRElDIE11bHRpbGluZ3VhbCAoZXVybykKLQlhbGlhc2VzOiBbQ3AxMTQ4LCBpYm0xMTQ4XQotNDAuICBDaGFyc2V0bmFtZTogSUJNLTExNDkKLQlkaXNwbGF5TmFtZTogSUJNLTExNDk6IEVCQ0RJQyBJY2VsYW5kCi0JYWxpYXNlczogW0NwMTE0OSwgaWJtMTE0OV0KLTQxLiAgQ2hhcnNldG5hbWU6IElCTS0xMzUxCi0JZGlzcGxheU5hbWU6IElCTS0xMzUxOiBQQyBEQkNTLW9ubHkgSmFwYW4KLQlhbGlhc2VzOiBbQ3AxMzUxLCBpYm0xMzUxXQotNDIuICBDaGFyc2V0bmFtZTogSUJNLTEzNjIKLQlkaXNwbGF5TmFtZTogSUJNLTEzNjI6IFBDIERCQ1Mtb25seSBLb3JlYSBLUyBleHRlbmRlZAotCWFsaWFzZXM6IFtDcDEzNjIsIGlibTEzNjJdCi00My4gIENoYXJzZXRuYW1lOiBJQk0tMTM2MwotCWRpc3BsYXlOYW1lOiBJQk0tMTM2MzogUEMgS29yZWEgS1MgZXh0ZW5kZWQKLQlhbGlhc2VzOiBbQ3AxMzYzLCBpYm0xMzYzXQotNDQuICBDaGFyc2V0bmFtZTogSUJNLTEzNjNDCi0JZGlzcGxheU5hbWU6IElCTS0xMzYzQzogUEMgS29yZWEgS1MgZXh0ZW5kZWQgKHN5bnRheCkKLQlhbGlhc2VzOiBbaWJtMTM2M0MsIENwMTM2M0NdCi00NS4gIENoYXJzZXRuYW1lOiBJQk0tMTM2NAotCWRpc3BsYXlOYW1lOiBJQk0tMTM2NDogRUJDRElDIEtvcmVhIEtTIGV4dGVuZGVkCi0JYWxpYXNlczogW2libTEzNjQsIENwMTM2NF0KLTQ2LiAgQ2hhcnNldG5hbWU6IElCTS0xMzcwCi0JZGlzcGxheU5hbWU6IElCTS0xMzcwOiBQQyBUYWl3YW4gKGV1cm8pCi0JYWxpYXNlczogW0NwMTM3MCwgaWJtMTM3MF0KLTQ3LiAgQ2hhcnNldG5hbWU6IElCTS0xMzcxCi0JZGlzcGxheU5hbWU6IElCTS0xMzcxOiBFQkNESUMgVGFpd2FuIChldXJvKQotCWFsaWFzZXM6IFtDcDEzNzEsIGlibTEzNzFdCi00OC4gIENoYXJzZXRuYW1lOiBJQk0tMTM4MAotCWRpc3BsYXlOYW1lOiBJQk0tMTM4MDogUEMgREJDUy1vbmx5IENoaW5hIEdCCi0JYWxpYXNlczogW2libTEzODAsIENwMTM4MF0KLTQ5LiAgQ2hhcnNldG5hbWU6IElCTS0xMzgxCi0JZGlzcGxheU5hbWU6IElCTS0xMzgxOiBQQyBDaGluYSBHQgotCWFsaWFzZXM6IFtDcDEzODEsIGlibTEzODFdCi01MC4gIENoYXJzZXRuYW1lOiBJQk0tMTM4MgotCWRpc3BsYXlOYW1lOiBJQk0tMTM4MjogRVVDIERCQ1Mtb25seSBDaGluYSBHQgotCWFsaWFzZXM6IFtpYm0xMzgyLCBDcDEzODJdCi01MS4gIENoYXJzZXRuYW1lOiBJQk0tMTM4MwotCWRpc3BsYXlOYW1lOiBJQk0tMTM4MzogRVVDIENoaW5hCi0JYWxpYXNlczogW0NwMTM4MywgaWJtMTM4M10KLTUyLiAgQ2hhcnNldG5hbWU6IElCTS0xMzg1Ci0JZGlzcGxheU5hbWU6IElCTS0xMzg1OiBQQyBEQkNTLW9ubHkgQ2hpbmEgR0JLCi0JYWxpYXNlczogW0NwMTM4NSwgaWJtMTM4NV0KLTUzLiAgQ2hhcnNldG5hbWU6IElCTS0xMzg2Ci0JZGlzcGxheU5hbWU6IElCTS0xMzg2OiBQQyBDaGluYSBHQksKLQlhbGlhc2VzOiBbQ3AxMzg2LCBpYm0xMzg2XQotNTQuICBDaGFyc2V0bmFtZTogSUJNLTEzODgKLQlkaXNwbGF5TmFtZTogSUJNLTEzODg6IEVCQ0RJQyBDaGluYSBHQksKLQlhbGlhc2VzOiBbaWJtMTM4OCwgQ3AxMzg4XQotNTUuICBDaGFyc2V0bmFtZTogSUJNLTEzOTAKLQlkaXNwbGF5TmFtZTogSUJNLTEzOTA6IEVCQ0RJQyBKYXBhbiBLYXRha2FuYSAoZXVybykKLQlhbGlhc2VzOiBbQ3AxMzkwLCBpYm0xMzkwXQotNTYuICBDaGFyc2V0bmFtZTogSUJNLTEzOTkKLQlkaXNwbGF5TmFtZTogSUJNLTEzOTk6IEVCQ0RJQyBKYXBhbiBMYXRpbiAoZXVybykKLQlhbGlhc2VzOiBbQ3AxMzk5LCBpYm0xMzk5XQotNTcuICBDaGFyc2V0bmFtZTogSUJNLTI3MwotCWRpc3BsYXlOYW1lOiBJQk0tMjczOiBFQkNESUMgR2VybWFueQotCWFsaWFzZXM6IFtpYm0yNzMsIENwMjczXQotNTguICBDaGFyc2V0bmFtZTogSUJNLTI3NwotCWRpc3BsYXlOYW1lOiBJQk0tMjc3OiBFQkNESUMgRGVubWFyaywgTm9yd2F5Ci0JYWxpYXNlczogW0NwMjc3LCBpYm0yNzddCi01OS4gIENoYXJzZXRuYW1lOiBJQk0tMjc4Ci0JZGlzcGxheU5hbWU6IElCTS0yNzg6IEVCQ0RJQyBGaW5sYW5kLCBTd2VkZW4KLQlhbGlhc2VzOiBbaWJtMjc4LCBDcDI3OF0KLTYwLiAgQ2hhcnNldG5hbWU6IElCTS0yODAKLQlkaXNwbGF5TmFtZTogSUJNLTI4MDogRUJDRElDIEl0YWx5IAotCWFsaWFzZXM6IFtpYm0yODAsIENwMjgwXQotNjEuICBDaGFyc2V0bmFtZTogSUJNLTI4NAotCWRpc3BsYXlOYW1lOiBJQk0tMjg0OiBFQkNESUMgU3BhaW4sIExhdGluIEFtZXJpY2EKLQlhbGlhc2VzOiBbQ3AyODQsIGlibTI4NF0KLTYyLiAgQ2hhcnNldG5hbWU6IElCTS0yODUKLQlkaXNwbGF5TmFtZTogSUJNLTI4NTogRUJDRElDIFVLLCBJcmVsYW5kCi0JYWxpYXNlczogW0NwMjg1LCBpYm0yODVdCi02My4gIENoYXJzZXRuYW1lOiBJQk0tMjkwCi0JZGlzcGxheU5hbWU6IElCTS0yOTA6IEVCQ0RJQyBTQkNTIEphcGFuIEthdGFrYW5hCi0JYWxpYXNlczogW0NwMjkwLCBpYm0yOTBdCi02NC4gIENoYXJzZXRuYW1lOiBJQk0tMjk3Ci0JZGlzcGxheU5hbWU6IElCTS0yOTc6IEVCQ0RJQyBGcmFuY2UKLQlhbGlhc2VzOiBbQ3AyOTcsIGlibTI5N10KLTY1LiAgQ2hhcnNldG5hbWU6IElCTS0zMDAKLQlkaXNwbGF5TmFtZTogSUJNLTMwMDogRUJDRElDIERCQ1Mtb25seSBKYXBhbgotCWFsaWFzZXM6IFtDcDMwMCwgaWJtMzAwXQotNjYuICBDaGFyc2V0bmFtZTogSUJNLTMwMQotCWRpc3BsYXlOYW1lOiBJQk0tMzAxOiBQQyBEQkNTLW9ubHkgSmFwYW4KLQlhbGlhc2VzOiBbaWJtMzAxLCBDcDMwMV0KLTY3LiAgQ2hhcnNldG5hbWU6IElCTS0zMzcyMgotCWRpc3BsYXlOYW1lOiBJQk0tMzM3MjI6IEVVQyBKYXBhbgotCWFsaWFzZXM6IFtDcDMzNzIyLCBpYm0zMzcyMl0KLTY4LiAgQ2hhcnNldG5hbWU6IElCTS0zMzcyMkMKLQlkaXNwbGF5TmFtZTogSUJNLTMzNzIyQzogRVVDIEphcGFuIHN5bnRheAotCWFsaWFzZXM6IFtpYm0zMzcyMkMsIENwMzM3MjJDXQotNjkuICBDaGFyc2V0bmFtZTogSUJNLTQyMAotCWRpc3BsYXlOYW1lOiBJQk0tNDIwOiBFQkNESUMgQXJhYmljCi0JYWxpYXNlczogW0NwNDIwLCBpYm00MjBdCi03MC4gIENoYXJzZXRuYW1lOiBJQk0tNDIwUwotCWRpc3BsYXlOYW1lOiBJQk0tNDIwUzogRUJDRElDIEFyYWJpYyBzaGFwZWQKLQlhbGlhc2VzOiBbQ3A0MjBTLCBpYm00MjBTXQotNzEuICBDaGFyc2V0bmFtZTogSUJNLTQyNAotCWRpc3BsYXlOYW1lOiBJQk0tNDI0OiBFQkNESUMgSGVicmV3Ci0JYWxpYXNlczogW2libTQyNCwgQ3A0MjRdCi03Mi4gIENoYXJzZXRuYW1lOiBJQk0tNDM3Ci0JZGlzcGxheU5hbWU6IElCTS00Mzc6IFBDIFVuaXRlZCBTdGF0ZXMKLQlhbGlhc2VzOiBbQ3A0MzcsIGNzcGM4Y29kZXBhZ2U0MzcsIGlibTQzN10KLTczLiAgQ2hhcnNldG5hbWU6IElCTS01MDAKLQlkaXNwbGF5TmFtZTogSUJNLTUwMDogRUJDRElDIExhdGluIDEKLQlhbGlhc2VzOiBbaWJtNTAwLCBDcDUwMF0KLTc0LiAgQ2hhcnNldG5hbWU6IElCTS03MzcKLQlkaXNwbGF5TmFtZTogSUJNLTczNzogTVMtRE9TIEdyZWVrCi0JYWxpYXNlczogW2libTczNywgQ3A3MzddCi03NS4gIENoYXJzZXRuYW1lOiBJQk0tNzc1Ci0JZGlzcGxheU5hbWU6IElCTS03NzU6IE1TLURPUyBCYWx0aWMgUmltCi0JYWxpYXNlczogW2libTc3NSwgQ3A3NzVdCi03Ni4gIENoYXJzZXRuYW1lOiBJQk0tODA4Ci0JZGlzcGxheU5hbWU6IElCTS04MDg6IFBDIFJ1c3NpYW4gKGV1cm8pCi0JYWxpYXNlczogW2libTgwOCwgQ3A4MDhdCi03Ny4gIENoYXJzZXRuYW1lOiBJQk0tODMzCi0JZGlzcGxheU5hbWU6IElCTS04MzM6IEVCQ0RJQyBTQkNTIEtvcmVhbgotCWFsaWFzZXM6IFtpYm04MzMsIENwODMzXQotNzguICBDaGFyc2V0bmFtZTogSUJNLTgzNAotCWRpc3BsYXlOYW1lOiBJQk0tODM0OiBFQkNESUMgREJDUy1vbmx5IEtvcmVhbgotCWFsaWFzZXM6IFtDcDgzNCwgaWJtODM0XQotNzkuICBDaGFyc2V0bmFtZTogSUJNLTgzNQotCWRpc3BsYXlOYW1lOiBJQk0tODM1OiBFQkNESUMgREJDUy1vbmx5IFRhaXdhbgotCWFsaWFzZXM6IFtDcDgzNSwgaWJtODM1XQotODAuICBDaGFyc2V0bmFtZTogSUJNLTgzNgotCWRpc3BsYXlOYW1lOiBJQk0tODM2OiBFQkNESUMgU0JDUyBDaGluYQotCWFsaWFzZXM6IFtDcDgzNiwgaWJtODM2XQotODEuICBDaGFyc2V0bmFtZTogSUJNLTgzNwotCWRpc3BsYXlOYW1lOiBJQk0tODM3OiBFQkNESUMgREJDUy1vbmx5IENoaW5hCi0JYWxpYXNlczogW0NwODM3LCBpYm04MzddCi04Mi4gIENoYXJzZXRuYW1lOiBJQk0tODM4Ci0JZGlzcGxheU5hbWU6IElCTS04Mzg6IEVCQ0RJQyBUaGFpCi0JYWxpYXNlczogW0NwODM4LCBpYm04MzhdCi04My4gIENoYXJzZXRuYW1lOiBJQk0tODUwCi0JZGlzcGxheU5hbWU6IElCTS04NTA6IFBDIExhdGluIDEKLQlhbGlhc2VzOiBbY3NwYzg1MG11bHRpbGluZ3VhbCwgQ3A4NTAsIGlibTg1MF0KLTg0LiAgQ2hhcnNldG5hbWU6IElCTS04NTIKLQlkaXNwbGF5TmFtZTogSUJNLTg1MjogUEMgTGF0aW4gMgotCWFsaWFzZXM6IFtDcDg1MiwgY3NwY3A4NTIsIGlibTg1Ml0KLTg1LiAgQ2hhcnNldG5hbWU6IElCTS04NTUKLQlkaXNwbGF5TmFtZTogSUJNLTg1NTogUEMgQ3lyaWxsaWMKLQlhbGlhc2VzOiBbQ3A4NTUsIGlibTg1NV0KLTg2LiAgQ2hhcnNldG5hbWU6IElCTS04NTYKLQlkaXNwbGF5TmFtZTogSUJNLTg1NjogUEMgSGVicmV3IChvbGQpCi0JYWxpYXNlczogW0NwODU2LCBpYm04NTZdCi04Ny4gIENoYXJzZXRuYW1lOiBJQk0tODU3Ci0JZGlzcGxheU5hbWU6IElCTS04NTc6IFBDIExhdGluIDUKLQlhbGlhc2VzOiBbY3NpYm04NTcsIGlibTg1NywgQ3A4NTddCi04OC4gIENoYXJzZXRuYW1lOiBJQk0tODU4Ci0JZGlzcGxheU5hbWU6IElCTS04NTg6IFBDIExhdGluIDEgKGV1cm8pCi0JYWxpYXNlczogW0NwODU4LCBpYm04NThdCi04OS4gIENoYXJzZXRuYW1lOiBJQk0tODU5Ci0JZGlzcGxheU5hbWU6IElCTS04NTk6IFBDIExhdGluIDkKLQlhbGlhc2VzOiBbQ3A4NTksIGlibTg1OV0KLTkwLiAgQ2hhcnNldG5hbWU6IElCTS04NjAKLQlkaXNwbGF5TmFtZTogSUJNLTg2MDogUEMgUG9ydHVnYWwKLQlhbGlhc2VzOiBbaWJtODYwLCBDcDg2MF0KLTkxLiAgQ2hhcnNldG5hbWU6IElCTS04NjEKLQlkaXNwbGF5TmFtZTogSUJNLTg2MTogUEMgSWNlbGFuZAotCWFsaWFzZXM6IFtDcDg2MSwgaWJtODYxXQotOTIuICBDaGFyc2V0bmFtZTogSUJNLTg2MgotCWRpc3BsYXlOYW1lOiBJQk0tODYyOiBQQyBJc3JhZWwKLQlhbGlhc2VzOiBbQ3A4NjIsIGlibTg2Ml0KLTkzLiAgQ2hhcnNldG5hbWU6IElCTS04NjMKLQlkaXNwbGF5TmFtZTogSUJNLTg2MzogUEMgQ2FuYWRpYW4gRnJlbmNoIAotCWFsaWFzZXM6IFtpYm04NjMsIENwODYzXQotOTQuICBDaGFyc2V0bmFtZTogSUJNLTg2NAotCWRpc3BsYXlOYW1lOiBJQk0tODY0OiBQQyBBcmFiaWMKLQlhbGlhc2VzOiBbaWJtODY0LCBDcDg2NF0KLTk1LiAgQ2hhcnNldG5hbWU6IElCTS04NjRTCi0JZGlzcGxheU5hbWU6IElCTS04NjRTOiBQQyBBcmFiaWMgKHNoYXBlZCkKLQlhbGlhc2VzOiBbaWJtODY0UywgQ3A4NjRTXQotOTYuICBDaGFyc2V0bmFtZTogSUJNLTg2NQotCWRpc3BsYXlOYW1lOiBJQk0tODY1OiBQQyBOb3JkaWMKLQlhbGlhc2VzOiBbQ3A4NjUsIGlibTg2NV0KLTk3LiAgQ2hhcnNldG5hbWU6IElCTS04NjYKLQlkaXNwbGF5TmFtZTogSUJNLTg2NjogUEMgUnVzc2lhCi0JYWxpYXNlczogW0NwODY2LCBpYm04NjZdCi05OC4gIENoYXJzZXRuYW1lOiBJQk0tODY3Ci0JZGlzcGxheU5hbWU6IElCTS04Njc6IFBDIElzcmFlbAotCWFsaWFzZXM6IFtDcDg2NywgaWJtODY3XQotOTkuICBDaGFyc2V0bmFtZTogSUJNLTg2OAotCWRpc3BsYXlOYW1lOiBJQk0tODY4OiBQQyBVcmR1Ci0JYWxpYXNlczogW0NwODY4LCBpYm04NjhdCi0xMDAuICBDaGFyc2V0bmFtZTogSUJNLTg2OQotCWRpc3BsYXlOYW1lOiBJQk0tODY5OiBQQyBHcmVlY2UKLQlhbGlhc2VzOiBbQ3A4NjksIGlibTg2OV0KLTEwMS4gIENoYXJzZXRuYW1lOiBJQk0tODcwCi0JZGlzcGxheU5hbWU6IElCTS04NzA6IEVCQ0RJQyBMYXRpbiAyCi0JYWxpYXNlczogW0NwODcwLCBpYm04NzBdCi0xMDIuICBDaGFyc2V0bmFtZTogSUJNLTg3MQotCWRpc3BsYXlOYW1lOiBJQk0tODcxOiBFQkNESUMgSWNlbGFuZAotCWFsaWFzZXM6IFtDcDg3MSwgaWJtODcxXQotMTAzLiAgQ2hhcnNldG5hbWU6IElCTS04NzQKLQlkaXNwbGF5TmFtZTogSUJNLTg3NDogUEMgVGhhaQotCWFsaWFzZXM6IFtpYm04NzQsIENwODc0XQotMTA0LiAgQ2hhcnNldG5hbWU6IElCTS04NzUKLQlkaXNwbGF5TmFtZTogSUJNLTg3NTogRUJDRElDIEdyZWVrCi0JYWxpYXNlczogW0NwODc1LCBpYm04NzVdCi0xMDUuICBDaGFyc2V0bmFtZTogSUJNLTg5NwotCWRpc3BsYXlOYW1lOiBJQk0tODk3OiBQQyBTQkNTLW9ubHkgSmFwYW4KLQlhbGlhc2VzOiBbQ3A4OTcsIGlibTg5N10KLTEwNi4gIENoYXJzZXRuYW1lOiBJQk0tOTE4Ci0JZGlzcGxheU5hbWU6IElCTS05MTg6IEVCQ0RJQyBVcmR1Ci0JYWxpYXNlczogW2libTkxOCwgQ3A5MThdCi0xMDcuICBDaGFyc2V0bmFtZTogSUJNLTkyMQotCWRpc3BsYXlOYW1lOiBJQk0tOTIxOiBQQyBCYWx0aWMKLQlhbGlhc2VzOiBbaWJtOTIxLCBDcDkyMV0KLTEwOC4gIENoYXJzZXRuYW1lOiBJQk0tOTIyCi0JZGlzcGxheU5hbWU6IElCTS05MjI6IFBDIEVzdG9uaWFuCi0JYWxpYXNlczogW0NwOTIyLCBpYm05MjJdCi0xMDkuICBDaGFyc2V0bmFtZTogSUJNLTkyNAotCWRpc3BsYXlOYW1lOiBJQk0tOTI0OiBFQkNESUMgTGF0aW4gOQotCWFsaWFzZXM6IFtpYm05MjQsIENwOTI0XQotMTEwLiAgQ2hhcnNldG5hbWU6IElCTS05MjcKLQlkaXNwbGF5TmFtZTogSUJNLTkyNzogUEMgREJDUy1vbmx5IFRhaXdhbgotCWFsaWFzZXM6IFtpYm05MjcsIENwOTI3XQotMTExLiAgQ2hhcnNldG5hbWU6IElCTS05MzAKLQlkaXNwbGF5TmFtZTogSUJNLTkzMDogRUJDRElDIEphcGFuIERCQ1MKLQlhbGlhc2VzOiBbQ3A5MzAsIGlibTkzMF0KLTExMi4gIENoYXJzZXRuYW1lOiBJQk0tOTMyCi0JZGlzcGxheU5hbWU6IElCTS05MzI6IFBDIEphcGFuIFNKSVMtNzggc3ludGF4Ci0JYWxpYXNlczogW0NwOTMyLCBpYm05MzJdCi0xMTMuICBDaGFyc2V0bmFtZTogSUJNLTkzMwotCWRpc3BsYXlOYW1lOiBJQk0tOTMzOiBFQkNESUMgS29yZWEgREJDUwotCWFsaWFzZXM6IFtDcDkzMywgaWJtOTMzXQotMTE0LiAgQ2hhcnNldG5hbWU6IElCTS05MzUKLQlkaXNwbGF5TmFtZTogSUJNLTkzNTogRUJDRElDIENoaW5hIERCQ1MKLQlhbGlhc2VzOiBbQ3A5MzUsIGlibTkzNV0KLTExNS4gIENoYXJzZXRuYW1lOiBJQk0tOTM3Ci0JZGlzcGxheU5hbWU6IElCTS05Mzc6IEVCQ0RJQyBUYWl3YW4gREJDUwotCWFsaWFzZXM6IFtDcDkzNywgaWJtOTM3XQotMTE2LiAgQ2hhcnNldG5hbWU6IElCTS05MzkKLQlkaXNwbGF5TmFtZTogSUJNLTkzOTogRUJDRElDIEphcGFuIEV4dGVuZGVkIERCQ1MKLQlhbGlhc2VzOiBbQ3A5MzksIGlibTkzOV0KLTExNy4gIENoYXJzZXRuYW1lOiBJQk0tOTQyCi0JZGlzcGxheU5hbWU6IElCTS05NDI6IFBDIEphcGFuIFNKSVMtNzgKLQlhbGlhc2VzOiBbaWJtOTQyLCBDcDk0Ml0KLTExOC4gIENoYXJzZXRuYW1lOiBJQk0tOTQyQwotCWRpc3BsYXlOYW1lOiBJQk0tOTQyQzogUEMgSmFwYW4gU0pJUy03OCBzeW50YXgKLQlhbGlhc2VzOiBbaWJtOTQyQywgQ3A5NDJDXQotMTE5LiAgQ2hhcnNldG5hbWU6IElCTS05NDMKLQlkaXNwbGF5TmFtZTogSUJNLTk0MzogUEMgSmFwYW4gU0pJUy05MAotCWFsaWFzZXM6IFtpYm05NDMsIENwOTQzXQotMTIwLiAgQ2hhcnNldG5hbWU6IElCTS05NDNDCi0JZGlzcGxheU5hbWU6IElCTS05NDNDOiBQQyBKYXBhbiBTSklTLTkwIHN5bnRheAotCWFsaWFzZXM6IFtDcDk0M0MsIGlibTk0M0NdCi0xMjEuICBDaGFyc2V0bmFtZTogSUJNLTk0NwotCWRpc3BsYXlOYW1lOiBJQk0tOTQ3OiBQQyBEQkNTLW9ubHkgVGFpd2FuCi0JYWxpYXNlczogW2libTk0NywgQ3A5NDddCi0xMjIuICBDaGFyc2V0bmFtZTogSUJNLTk0OAotCWRpc3BsYXlOYW1lOiBJQk0tOTQ4OiBQQyBUYWl3YW4gU0FBCi0JYWxpYXNlczogW2libTk0OCwgQ3A5NDhdCi0xMjMuICBDaGFyc2V0bmFtZTogSUJNLTk0OQotCWRpc3BsYXlOYW1lOiBJQk0tOTQ5OiBQQyBLb3JlYSAoS1MpCi0JYWxpYXNlczogW0NwOTQ5LCBpYm05NDldCi0xMjQuICBDaGFyc2V0bmFtZTogSUJNLTk0OUMKLQlkaXNwbGF5TmFtZTogSUJNLTk0OUM6IFBDIEtvcmVhIChLUykKLQlhbGlhc2VzOiBbQ3A5NDlDLCBpYm05NDlDXQotMTI1LiAgQ2hhcnNldG5hbWU6IElCTS05NTAKLQlkaXNwbGF5TmFtZTogSUJNLTk1MDogUEMgVGFpd2FuCi0JYWxpYXNlczogW2libTk1MCwgQ3A5NTBdCi0xMjYuICBDaGFyc2V0bmFtZTogSUJNLTk1MQotCWRpc3BsYXlOYW1lOiBJQk0tOTUxOiBQQyBEQkNTLW9ubHkgS29yZWFuCi0JYWxpYXNlczogW0NwOTUxLCBpYm05NTFdCi0xMjcuICBDaGFyc2V0bmFtZTogSUJNLTk1NAotCWRpc3BsYXlOYW1lOiBJQk0tOTU0OiBFVUMgSmFwYW4gKGZ1bGwpCi0JYWxpYXNlczogW0NwOTU0LCBpYm05NTRdCi0xMjguICBDaGFyc2V0bmFtZTogSUJNLTk1NEMKLQlkaXNwbGF5TmFtZTogSUJNLTk1NEM6IEVVQyBKYXBhbiAoZnVsbCkgd2l0aCBzeW50YXgKLQlhbGlhc2VzOiBbQ3A5NTRjLCBpYm0tZXVjanBdCi0xMjkuICBDaGFyc2V0bmFtZTogSUJNLTk2NAotCWRpc3BsYXlOYW1lOiBJQk0tOTY0OiBFVUMgVGFpd2FuCi0JYWxpYXNlczogW0NwOTY0LCBpYm0tZXVjdHddCi0xMzAuICBDaGFyc2V0bmFtZTogSUJNLTk3MQotCWRpc3BsYXlOYW1lOiBJQk0tOTcxOiBFVUMgREJDUy1vbmx5IEtvcmVhbgotCWFsaWFzZXM6IFtDcDk3MSwgaWJtOTcxXQotMTMxLiAgQ2hhcnNldG5hbWU6IElTQ0lJOTEKLQlkaXNwbGF5TmFtZTogSVNDSUk5MTogSVNDSUkgRGV2ZW5hZ2FyaSA5MQotCWFsaWFzZXM6IFtpc2NpaV0KLTEzMi4gIENoYXJzZXRuYW1lOiBJU08tMjAyMi1DTgotCWRpc3BsYXlOYW1lOiBJU08tMjAyMi1DTjogSVNPIDIwMjIgVHJhZGl0aW9uYWwgQ2hpbmVzZQotCWFsaWFzZXM6IFtpc28yMDIyLWNuLWNucywgaXNvLTIwMjItY24tY25zLCBpc28yMDIyY24tY25zLCBpc28yMDIyY24sIGlzbzIwMjItY25dCi0xMzMuICBDaGFyc2V0bmFtZTogSVNPLTIwMjItQ04tR0IKLQlkaXNwbGF5TmFtZTogSVNPLTIwMjItQ04tR0I6IElTTyAyMDIyIFNpbXBsaWZpZWQgQ2hpbmVzZQotCWFsaWFzZXM6IFtpc28yMDIyY24tZ2IsIGlzbzIwMjItY24tZ2JdCi0xMzQuICBDaGFyc2V0bmFtZTogSVNPLTIwMjItSlAKLQlkaXNwbGF5TmFtZTogSVNPLTIwMjItSlA6IElTTyAyMDIyIEphcGFuCi0JYWxpYXNlczogW2ppcywgY3Npc28yMDIyanAyLCBpc28yMDIyLWpwLCBjc2ppc2VuY29kaW5nLCBqaXMtZW5jb2RpbmcsIGlzby0yMDIyLWpwMiwgaXNvMjAyMmpwXQotMTM1LiAgQ2hhcnNldG5hbWU6IElTTy0yMDIyLUtSCi0JZGlzcGxheU5hbWU6IElTTy0yMDIyLUtSOiBJU08gMjAyMiBLb3JlYQotCWFsaWFzZXM6IFtpc28yMDIyLWtyLCBjc2lzbzIwMjJrciwgaXNvMjAyMmtyXQotMTM2LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTEKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMTogSVNPIExhdGluIDEgLSBXZXN0ZXJuIEV1cm9wZQotCWFsaWFzZXM6IFtjc2lzb2xhdGluMSwgaXNvLWlyLTEwMCwgaXNvODg1OS0xLCBpYm0tODE5LCBpc284ODU5XzEsIGxhdGluMSwgODg1OS0xLCBpYm04MTksIGlzby04ODU5LTE6MTk4NywgQ3A4MTksIGwxXQotMTM3LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTEwCi0JZGlzcGxheU5hbWU6IElTTy04ODU5LTEwOiBJU08gTGF0aW4gNiAtIE5vcmRpYwotCWFsaWFzZXM6IFtpc284ODU5LTEwLCBJU09fODg1OS0xMDoxOTkyLCBsYXRpbjYsIGlibS05MTksIDg4NTktMTAsIGlzby1pci0xNTcsIGw2LCBpc284ODU5XzEwLCBjc2lzb2xhdGluNl0KLTEzOC4gIENoYXJzZXRuYW1lOiBJU08tODg1OS0xMwotCWRpc3BsYXlOYW1lOiBJU08tODg1OS0xMzogSVNPIExhdGluIDcgLSBCYWx0aWMgUmltCi0JYWxpYXNlczogW2lzbzg4NTktMTMsIGlzbzg4NTlfMTMsIDg4NTktMTNdCi0xMzkuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktMTQKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMTQ6IElTTyBMYXRpbiA4IC0gQ2VsdGljCi0JYWxpYXNlczogWzg4NTktMTQsIGlzbzg4NTlfMTQsIGlzby1pci0xOTksIElTT184ODU5LTE0OjE5OTgsIGxhdGluOCwgaXNvODg1OS0xNCwgaXNvY2VsdGljLCBsOF0KLTE0MC4gIENoYXJzZXRuYW1lOiBJU08tODg1OS0xNQotCWRpc3BsYXlOYW1lOiBJU08tODg1OS0xNTogSVNPIExhdGluIDkgLSBFdXJvCi0JYWxpYXNlczogW2w5LCBpYm05MjMsIGNzaXNvbGF0aW45LCA4ODU5LTksIGlzbzg4NTktMTUsIGlibS05MjMsIGxhdGluOSwgaXNvODg1OV8xNSwgQ3A5MjMsIGlzbzg4NTlfMTVfZmRpcywgbGF0aW4wXQotMTQxLiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTE2Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTE2OiBJU08gUm9tYW5pYW4KLQlhbGlhc2VzOiBbaXNvODg1OV8xNiwgaXNvODg1OS0xNiwgODg1OS0xNl0KLTE0Mi4gIENoYXJzZXRuYW1lOiBJU08tODg1OS0yCi0JZGlzcGxheU5hbWU6IElTTy04ODU5LTI6IElTTyBMYXRpbiAyIC0gQ2VudHJhbCBFdXJvcGUKLQlhbGlhc2VzOiBbaWJtOTEyLCBsMiwgaWJtLTkxMiwgaXNvLWlyLTEwMSwgY3Npc29sYXRpbjIsIGlzby04ODU5LTI6MTk4NywgbGF0aW4yLCBpc284ODU5XzIsIENwOTEyLCBpc284ODU5LTIsIDg4NTktMl0KLTE0My4gIENoYXJzZXRuYW1lOiBJU08tODg1OS0zCi0JZGlzcGxheU5hbWU6IElTTy04ODU5LTM6IElTTyBMYXRpbiAzIC0gTGF0aW4vRXNwZXJhbnRvCi0JYWxpYXNlczogW2lzby04ODU5LTM6MTk4OCwgY3Npc29sYXRpbjMsIGlzbzg4NTlfMywgODg1OS0zLCBpc284ODU5LTMsIENwOTEzLCBpc28taXItMTA5LCBpYm0tOTEzLCBsMywgbGF0aW4zXQotMTQ0LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTQKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktNDogSVNPIExhdGluIDQgLSBCYWx0aWMKLQlhbGlhc2VzOiBbaXNvLWlyLTExMCwgQ3A5MTQsIGw0LCBpYm0tOTE0LCBsYXRpbjQsIGlzbzg4NTlfNCwgaXNvLTg4NTktNDoxOTg4LCBpc284ODU5LTQsIDg4NTktNCwgY3Npc29sYXRpbjRdCi0xNDUuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktNQotCWRpc3BsYXlOYW1lOiBJU08tODg1OS01OiBJU08gQ3lyaWxsaWMKLQlhbGlhc2VzOiBbaXNvODg1OV81LCA4ODU5LTUsIGlibTkxNSwgaXNvLTg4NTktNToxOTg4LCBjc2lzb2xhdGluY3lyaWxsaWMsIGN5cmlsbGljLCBDcDkxNSwgaXNvLWlyLTE0NCwgaXNvODg1OS01LCBpYm0tOTE1XQotMTQ2LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTYKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktNjogSVNPIEFyYWJpYwotCWFsaWFzZXM6IFtpc28taXItMTI3LCBjc2lzb2xhdGluYXJhYmljLCBpc284ODU5LTYsIGlibTEwODksIGVjbWEtMTE0LCBhc21vLTcwOCwgYXJhYmljLCBpYm0tMTA4OSwgaXNvODg1OV82LCA4ODU5LTYsIENwMTA4OSwgaXNvLTg4NTktNjoxOTg3XQotMTQ3LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTZTCi0JZGlzcGxheU5hbWU6IElTTy04ODU5LTZTOiBJU08gQXJhYmljIChzaGFwZWQpCi0JYWxpYXNlczogW2lzbzg4NTktNlMsIGlzbzg4NTlfNlNdCi0xNDguICBDaGFyc2V0bmFtZTogSVNPLTg4NTktNwotCWRpc3BsYXlOYW1lOiBJU08tODg1OS03OiBJU08gR3JlZWsKLQlhbGlhc2VzOiBbaXNvLTg4NTktNzoxOTg3LCBDcDgxMywgODg1OS03LCBpc28taXItMTI2LCBpYm0tODEzLCBpc284ODU5XzcsIGVjbWEtMTE4LCBncmVlazgsIGlibTgxMywgZWxvdC05MjgsIGNzaXNvbGF0aW5ncmVlaywgaXNvODg1OS03LCBncmVla10KLTE0OS4gIENoYXJzZXRuYW1lOiBJU08tODg1OS04Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTg6IElTTyBIZWJyZXcKLQlhbGlhc2VzOiBbaXNvLWlyLTEzOCwgaXNvODg1OS04LCBpYm0tOTE2LCBpc284ODU5XzgsIGNzaXNvbGF0aW5oZWJyZXcsIGhlYnJldywgaXNvLTg4NTktODoxOTg4LCBpYm05MTYsIENwOTE2LCA4ODU5LThdCi0xNTAuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktOQotCWRpc3BsYXlOYW1lOiBJU08tODg1OS05OiBJU08gTGF0aW4gNSAtIFR1cmtleQotCWFsaWFzZXM6IFtDcDkyMCwgbGF0aW41LCBpc28taXItMTQ4LCA4ODU5LTksIGw1LCBjc2lzb2xhdGluNSwgaWJtLTkyMCwgaWJtOTIwLCBpc284ODU5XzksIGlzbzg4NTktOV0KLTE1MS4gIENoYXJzZXRuYW1lOiBKSVMwMjAxCi0JZGlzcGxheU5hbWU6IEpJUzAyMDE6IEphcGFuIEpJUyAwMjAxIChrYXRha2FuYSkKLQlhbGlhc2VzOiBbXQotMTUyLiAgQ2hhcnNldG5hbWU6IEpJUzAyMDgKLQlkaXNwbGF5TmFtZTogSklTMDIwODogSmFwYW4gSklTIDAyMDgKLQlhbGlhc2VzOiBbXQotMTUzLiAgQ2hhcnNldG5hbWU6IEpJUzAyMTIKLQlkaXNwbGF5TmFtZTogSklTMDIxMjogSmFwYW4gSklTIDAyMTIgKGV4dGVuZGVkKQotCWFsaWFzZXM6IFtdCi0xNTQuICBDaGFyc2V0bmFtZTogSm9oYWIKLQlkaXNwbGF5TmFtZTogSm9oYWI6IFBDIEtvcmVhbiBKb2hhYgotCWFsaWFzZXM6IFtdCi0xNTUuICBDaGFyc2V0bmFtZTogS09JOC1SCi0JZGlzcGxheU5hbWU6IEtPSTgtUjogSW50ZXJuZXQgUnVzc2lhCi0JYWxpYXNlczogW2libS04NzgsIGNza29pOHIsIGtvaTgsIGtvaThfcl0KLTE1Ni4gIENoYXJzZXRuYW1lOiBLT0k4LVJVCi0JZGlzcGxheU5hbWU6IEtPSTgtUlU6IEludGVybmV0IEJlbGFydXMKLQlhbGlhc2VzOiBbaWJtLTExNjgsIGtvaThfcnVdCi0xNTcuICBDaGFyc2V0bmFtZTogS09JOC1VCi0JZGlzcGxheU5hbWU6IEtPSTgtVTogSW50ZXJuZXQgVWtyYWluZQotCWFsaWFzZXM6IFtpYm0tMTE2Nywga29pOF91XQotMTU4LiAgQ2hhcnNldG5hbWU6IEtTQzU2MDEKLQlkaXNwbGF5TmFtZTogS1NDNTYwMTogS29yZWEgS1NDCi0JYWxpYXNlczogW10KLTE1OS4gIENoYXJzZXRuYW1lOiBNYWNBcmFiaWMKLQlkaXNwbGF5TmFtZTogTWFjQXJhYmljOiBBcHBsZSBBcmFiaWMKLQlhbGlhc2VzOiBbXQotMTYwLiAgQ2hhcnNldG5hbWU6IE1hY0NlbnRyYWxFdXJvcGUKLQlkaXNwbGF5TmFtZTogTWFjQ2VudHJhbEV1cm9wZTogQXBwbGUgQ2VudHJhbCBFdXJvcGUKLQlhbGlhc2VzOiBbaWJtLTEyODJdCi0xNjEuICBDaGFyc2V0bmFtZTogTWFjQ3JvYXRpYW4KLQlkaXNwbGF5TmFtZTogTWFjQ3JvYXRpYW46IEFwcGxlIENyb2F0aWFuIAotCWFsaWFzZXM6IFtpYm0tMTI4NF0KLTE2Mi4gIENoYXJzZXRuYW1lOiBNYWNDeXJpbGxpYwotCWRpc3BsYXlOYW1lOiBNYWNDeXJpbGxpYzogQXBwbGUgQ3lyaWxsaWMKLQlhbGlhc2VzOiBbaWJtLTEyODNdCi0xNjMuICBDaGFyc2V0bmFtZTogTWFjRGluZ2JhdAotCWRpc3BsYXlOYW1lOiBNYWNEaW5nYmF0OiBBcHBsZSBEaW5nYmF0Ci0JYWxpYXNlczogW10KLTE2NC4gIENoYXJzZXRuYW1lOiBNYWNHcmVlawotCWRpc3BsYXlOYW1lOiBNYWNHcmVlazogQXBwbGUgR3JlZWsKLQlhbGlhc2VzOiBbaWJtLTEyODBdCi0xNjUuICBDaGFyc2V0bmFtZTogTWFjSGVicmV3Ci0JZGlzcGxheU5hbWU6IE1hY0hlYnJldzogQXBwbGUgSGVicmV3IAotCWFsaWFzZXM6IFtdCi0xNjYuICBDaGFyc2V0bmFtZTogTWFjSWNlbGFuZAotCWRpc3BsYXlOYW1lOiBNYWNJY2VsYW5kOiBBcHBsZSBJY2VsYW5kCi0JYWxpYXNlczogW2libS0xMjg2XQotMTY3LiAgQ2hhcnNldG5hbWU6IE1hY1JvbWFuCi0JZGlzcGxheU5hbWU6IE1hY1JvbWFuOiBBcHBsZSBSb21hbgotCWFsaWFzZXM6IFtpYm0tMTI3NV0KLTE2OC4gIENoYXJzZXRuYW1lOiBNYWNSb21hbmlhCi0JZGlzcGxheU5hbWU6IE1hY1JvbWFuaWE6IEFwcGxlIFJvbWFuaWEKLQlhbGlhc2VzOiBbaWJtLTEyODVdCi0xNjkuICBDaGFyc2V0bmFtZTogTWFjU3ltYm9sCi0JZGlzcGxheU5hbWU6IE1hY1N5bWJvbDogQXBwbGUgUG9zdFNjcmlwdCBTeW1ib2wKLQlhbGlhc2VzOiBbQWRvYmUtU3ltYm9sLUVuY29kaW5nLCBpYm0tMTAzOF0KLTE3MC4gIENoYXJzZXRuYW1lOiBNYWNUaGFpCi0JZGlzcGxheU5hbWU6IE1hY1RoYWk6IEFwcGxlIFRoYWkKLQlhbGlhc2VzOiBbXQotMTcxLiAgQ2hhcnNldG5hbWU6IE1hY1R1cmtpc2gKLQlkaXNwbGF5TmFtZTogTWFjVHVya2lzaDogQXBwbGUgVHVya2lzaAotCWFsaWFzZXM6IFtpYm0tMTI4MV0KLTE3Mi4gIENoYXJzZXRuYW1lOiBNYWNVa3JhaW5lCi0JZGlzcGxheU5hbWU6IE1hY1VrcmFpbmU6IEFwcGxlIFVrcmFpbmUKLQlhbGlhc2VzOiBbXQotMTczLiAgQ2hhcnNldG5hbWU6IFBUQ1AxNTQKLQlkaXNwbGF5TmFtZTogUFRDUDE1NDogV2luZG93cyBDeXJpbGxpYyBBc2lhbgotCWFsaWFzZXM6IFtJQk0tMTE2OSwgY3NQVENQMTU0LCBDeXJpbGxpYy1Bc2lhbiwgUFQxNTRdCi0xNzQuICBDaGFyc2V0bmFtZTogU2hpZnRfSklTCi0JZGlzcGxheU5hbWU6IFNoaWZ0X0pJUzogU2hpZnQgSklTIEphcGFuCi0JYWxpYXNlczogW10KLTE3NS4gIENoYXJzZXRuYW1lOiBUSVMtNjIwCi0JZGlzcGxheU5hbWU6IFRJUy02MjA6IFBDIFRoYWlsYW5kCi0JYWxpYXNlczogW3RpczYyMC4yNTMzLCB0aXM2MjBdCi0xNzYuICBDaGFyc2V0bmFtZTogVVMtQVNDSUkKLQlkaXNwbGF5TmFtZTogVVMtQVNDSUk6IEFTQ0lJIDcgYml0Ci0JYWxpYXNlczogW2lzby02NDYuaXJ2OjE5ODMsIElTTzY0Ni1VUywgQVNDSUksIGRlZmF1bHQsIElTTy02NDYuaXJ2OjE5OTEsIGRpcmVjdCwgYXNjaWk3LCBBTlNJX1gzLjQtMTk4NiwgaXNvLWlyLTYsIHVzLCBpYm0tMzY3LCA2NDYsIGNzQVNDSUksIEFOU0lfWDMuNC0xOTY4LCBDcDM2N10KLTE3Ny4gIENoYXJzZXRuYW1lOiBVVEYtMTYKLQlkaXNwbGF5TmFtZTogVVRGLTE2Ci0JYWxpYXNlczogW1VuaWNvZGUsIFVURjE2LCBVVEZfMTYsIFVDUy0yXQotMTc4LiAgQ2hhcnNldG5hbWU6IFVURi0xNkJFCi0JZGlzcGxheU5hbWU6IFVURi0xNkJFOiBVbmljb2RlIFVURi0xNiBCaWctZW5kaWFuCi0JYWxpYXNlczogW1gtVVRGLTE2QkUsIFVuaWNvZGVCaWdVbm1hcmtlZCwgVVRGMTZCRSwgVVRGXzE2QkUsIElTTy0xMDY0Ni1VQ1MtMl0KLTE3OS4gIENoYXJzZXRuYW1lOiBVVEYtMTZMRQotCWRpc3BsYXlOYW1lOiBVVEYtMTZMRTogVW5pY29kZSBVVEYtMTYgTGl0dGxlLWVuZGlhbgotCWFsaWFzZXM6IFtVVEZfMTZMRSwgVVRGMTZMRSwgVW5pY29kZUxpdHRsZVVubWFya2VkLCBYLVVURi0xNkxFXQotMTgwLiAgQ2hhcnNldG5hbWU6IFVURi0zMgotCWRpc3BsYXlOYW1lOiBVVEYtMzI6IFVuaWNvZGUgVVRGLTMyCi0JYWxpYXNlczogW0lTTy0xMDY0Ni1VQ1MtNCwgVVRGMzIsIFVDUy00LCBVVEZfMzJCRV0KLTE4MS4gIENoYXJzZXRuYW1lOiBVVEYtMzJCRQotCWRpc3BsYXlOYW1lOiBVVEYtMzJCRTogVW5pY29kZSBVVEYtMzIgQmlnLWVuZGlhbgotCWFsaWFzZXM6IFtVVEYzMkJFLCBYLVVURi0zMkJFLCBVVEZfMzJCRV0KLTE4Mi4gIENoYXJzZXRuYW1lOiBVVEYtMzJMRQotCWRpc3BsYXlOYW1lOiBVVEYtMzJMRTogVW5pY29kZSBVVEYtMzIgTGl0dGxlLWVuZGlhbgotCWFsaWFzZXM6IFtVVEZfMzJMRSwgVVRGMzJMRSwgWC1VVEYtMzJMRV0KLTE4My4gIENoYXJzZXRuYW1lOiBVVEYtOAotCWRpc3BsYXlOYW1lOiBVVEYtODogVW5pY29kZSBVVEYtOAotCWFsaWFzZXM6IFtVVEZfOCwgVVRGOF0KLTE4NC4gIENoYXJzZXRuYW1lOiBVVEYtOEoKLQlkaXNwbGF5TmFtZTogVVRGLThKOiBVbmljb2RlIFVURi04IChKYXZhKQotCWFsaWFzZXM6IFtVVEY4Sl0KLTE4NS4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTAKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjUwOiBXaW5kb3dzIExhdGluIDIKLQlhbGlhc2VzOiBbaWJtLTEyNTAsIENwMTI1MF0KLTE4Ni4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTEKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjUxOiBXaW5kb3dzIEN5cmlsbGljCi0JYWxpYXNlczogW2libS0xMjUxLCBDcDEyNTFdCi0xODcuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjUyCi0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1MjogV2luZG93cyBMYXRpbiAxIAotCWFsaWFzZXM6IFtDcDEyNTIsIGlibS0xMjUyXQotMTg4LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1MwotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTM6IFdpbmRvd3MgR3JlZWsKLQlhbGlhc2VzOiBbQ3AxMjUzLCBpYm0tMTI1M10KLTE4OS4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTQKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjU0OiBXaW5kb3dzIExhdGluIDUgKFR1cmtleSkKLQlhbGlhc2VzOiBbQ3AxMjU0LCBpYm0tMTI1NF0KLTE5MC4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTUKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjU1OiBXaW5kb3dzIEhlYnJldwotCWFsaWFzZXM6IFtDcDEyNTUsIGlibS0xMjU1XQotMTkxLiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1NgotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTY6IFdpbmRvd3MgQXJhYmljCi0JYWxpYXNlczogW0NwMTI1NiwgaWJtLTEyNTZdCi0xOTIuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjU2UwotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTZTOiBXaW5kb3dzIEFyYWJpYyAoc2hhcGVkKQotCWFsaWFzZXM6IFtpYm0tMTI1NnMsIENwMTI1NnNdCi0xOTMuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjU3Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1NzogV2luZG93cyBMYXRpbiA0IChCYWx0dGljKQotCWFsaWFzZXM6IFtDcDEyNTcsIGlibS0xMjU3XQotMTk0LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1OAotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTg6IFdpbmRvd3MgVmlldG5hbWVzZQotCWFsaWFzZXM6IFtpYm0tMTEyOSwgaWJtLTEyNTgsIENwMTI1OF0KLTE5NS4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTg3NAotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTg3NDogV2luZG93cyBUaGFpCi0JYWxpYXNlczogW01TODc0XQotMTk2LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtOTMyCi0JZGlzcGxheU5hbWU6IHdpbmRvd3MtOTMyOiBXaW5kb3dzIEphcGFuCi0JYWxpYXNlczogW21zX2thbmppLCBjc3dpbmRvd3MzMWosIE1TOTMyLCB3aW5kb3dzLTMxal0KLTE5Ny4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTkzNgotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTkzNjogV2luZG93cyBDaGluYQotCWFsaWFzZXM6IFtNUzkzNiwgOTM2XQotMTk4LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtOTQ5Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtOTQ5OiBXaW5kb3dzIEtvcmVhCi0JYWxpYXNlczogW2libS0xMzYxLCBDcDEzNjEsIGlibTEzNjEsIE1TOTQ5LCBtczEzNjEsIGtzYzU2MDEtMTk5Ml0KLTE5OS4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTk1MAotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTk1MDogV2luZG93cyBUYWl3YW4KLQlhbGlhc2VzOiBbTVM5NTBdCi0yMDAuICBDaGFyc2V0bmFtZTogWC1Vbmljb2RlQmlnCi0JZGlzcGxheU5hbWU6IFgtVW5pY29kZUJpZzogVW5pY29kZSBVVEYtMTYgQmlnLWVuZGlhbiB3aXRoIG1hcmsKLQlhbGlhc2VzOiBbVW5pY29kZUJpZ10KLTIwMS4gIENoYXJzZXRuYW1lOiBYLVVuaWNvZGVMaXR0bGUKLQlkaXNwbGF5TmFtZTogWC1Vbmljb2RlTGl0dGxlOiBVbmljb2RlIFVURi0xNiBMaXR0bGUtZW5kaWFuIHdpdGggbWFyawotCWFsaWFzZXM6IFtVbmljb2RlTGl0dGxlXQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9vdXRwdXRGcm9tTGlzdENoYXJzZXRzL1N1bjEuNC4zXzAyLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvb3V0cHV0RnJvbUxpc3RDaGFyc2V0cy9TdW4xLjQuM18wMi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3OTIyYWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9vdXRwdXRGcm9tTGlzdENoYXJzZXRzL1N1bjEuNC4zXzAyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDM0MyArMCwwIEBACi0KLUN1cnJlbnQgTG9jYWxlOiBlbl9VUwotCi1KUkUgdmVyc2lvbjogMS40LjJfMDMgKDEuNC4yXzAzLWIwMikKLS0tIGxpc3RpbmcgcHJvcGVydGllcyAtLQotamF2YS5ydW50aW1lLm5hbWU9SmF2YShUTSkgMiBSdW50aW1lIEVudmlyb25tZW50LCBTdGFuZC4uLgotc3VuLmJvb3QubGlicmFyeS5wYXRoPUQ6XEpES3NcajJzZGsxLjQuMl8wM1xqcmVcYmluCi1qYXZhLnZtLnZlcnNpb249MS40LjJfMDMtYjAyCi1qYXZhLnZtLnZlbmRvcj1TdW4gTWljcm9zeXN0ZW1zIEluYy4KLWphdmEudmVuZG9yLnVybD1odHRwOi8vamF2YS5zdW4uY29tLwotcGF0aC5zZXBhcmF0b3I9OwotamF2YS52bS5uYW1lPUphdmEgSG90U3BvdChUTSkgQ2xpZW50IFZNCi1maWxlLmVuY29kaW5nLnBrZz1zdW4uaW8KLXVzZXIuY291bnRyeT1VUwotc3VuLm9zLnBhdGNoLmxldmVsPVNlcnZpY2UgUGFjayAxCi1qYXZhLnZtLnNwZWNpZmljYXRpb24ubmFtZT1KYXZhIFZpcnR1YWwgTWFjaGluZSBTcGVjaWZpY2F0aW9uCi11c2VyLmRpcj1EOlxidWlsZHNcRGFpbHlcZWNsaXBzZS1TREstSTIwMDQwMzA0Li4uCi1qYXZhLnJ1bnRpbWUudmVyc2lvbj0xLjQuMl8wMy1iMDIKLWphdmEuYXd0LmdyYXBoaWNzZW52PXN1bi5hd3QuV2luMzJHcmFwaGljc0Vudmlyb25tZW50Ci1qYXZhLmVuZG9yc2VkLmRpcnM9RDpcSkRLc1xqMnNkazEuNC4yXzAzXGpyZVxsaWJcZW5kb3JzZWQKLW9zLmFyY2g9eDg2Ci1qYXZhLmlvLnRtcGRpcj1DOlxET0NVTUV+MVxEQVZJRFd+MS5ETVdcTE9DQUxTfjFcVGVtcFwKLWxpbmUuc2VwYXJhdG9yPQotCi1qYXZhLnZtLnNwZWNpZmljYXRpb24udmVuZG9yPVN1biBNaWNyb3N5c3RlbXMgSW5jLgotdXNlci52YXJpYW50PQotb3MubmFtZT1XaW5kb3dzIFhQCi1zdW4uamF2YTJkLmZvbnRwYXRoPQotamF2YS5saWJyYXJ5LnBhdGg9RDpcSkRLc1xqMnNkazEuNC4yXzAzXGJpbjsuO0M6XFdJTkRPVy4uLgotamF2YS5zcGVjaWZpY2F0aW9uLm5hbWU9SmF2YSBQbGF0Zm9ybSBBUEkgU3BlY2lmaWNhdGlvbgotamF2YS5jbGFzcy52ZXJzaW9uPTQ4LjAKLWphdmEudXRpbC5wcmVmcy5QcmVmZXJlbmNlc0ZhY3Rvcnk9amF2YS51dGlsLnByZWZzLldpbmRvd3NQcmVmZXJlbmNlc0ZhYy4uLgotb3MudmVyc2lvbj01LjEKLXVzZXIuaG9tZT1DOlxEb2N1bWVudHMgYW5kIFNldHRpbmdzXGRhdmlkdy5ETVcyVDIzCi11c2VyLnRpbWV6b25lPQotamF2YS5hd3QucHJpbnRlcmpvYj1zdW4uYXd0LndpbmRvd3MuV1ByaW50ZXJKb2IKLWZpbGUuZW5jb2Rpbmc9Q3AxMjUyCi1qYXZhLnNwZWNpZmljYXRpb24udmVyc2lvbj0xLjQKLXVzZXIubmFtZT1kYXZpZHcKLWphdmEuY2xhc3MucGF0aD1EOlxidWlsZHNcRGFpbHlcZWNsaXBzZS1TREstSTIwMDQwMzA0Li4uCi1qYXZhLnZtLnNwZWNpZmljYXRpb24udmVyc2lvbj0xLjAKLXN1bi5hcmNoLmRhdGEubW9kZWw9MzIKLWphdmEuaG9tZT1EOlxKREtzXGoyc2RrMS40LjJfMDNcanJlCi1qYXZhLnNwZWNpZmljYXRpb24udmVuZG9yPVN1biBNaWNyb3N5c3RlbXMgSW5jLgotdXNlci5sYW5ndWFnZT1lbgotYXd0LnRvb2xraXQ9c3VuLmF3dC53aW5kb3dzLldUb29sa2l0Ci1qYXZhLnZtLmluZm89bWl4ZWQgbW9kZQotamF2YS52ZXJzaW9uPTEuNC4yXzAzCi1qYXZhLmV4dC5kaXJzPUQ6XEpES3NcajJzZGsxLjQuMl8wM1xqcmVcbGliXGV4dAotc3VuLmJvb3QuY2xhc3MucGF0aD1EOlxKREtzXGoyc2RrMS40LjJfMDNcanJlXGxpYlxydC5qYXI7Li4uCi1qYXZhLnZlbmRvcj1TdW4gTWljcm9zeXN0ZW1zIEluYy4KLWZpbGUuc2VwYXJhdG9yPVwKLWphdmEudmVuZG9yLnVybC5idWc9aHR0cDovL2phdmEuc3VuLmNvbS9jZ2ktYmluL2J1Z3JlcG9ydC4uLgotc3VuLmNwdS5lbmRpYW49bGl0dGxlCi1zdW4uaW8udW5pY29kZS5lbmNvZGluZz1Vbmljb2RlTGl0dGxlCi1zdW4uY3B1LmlzYWxpc3Q9cGVudGl1bSBpNDg2IGkzODYKLUF2YWlsYWJsZSBMb2NhbGVzCi1hcgotYXJfQUUKLWFyX0JICi1hcl9EWgotYXJfRUcKLWFyX0lRCi1hcl9KTwotYXJfS1cKLWFyX0xCCi1hcl9MWQotYXJfTUEKLWFyX09NCi1hcl9RQQotYXJfU0EKLWFyX1NECi1hcl9TWQotYXJfVE4KLWFyX1lFCi1oaV9JTgotaXcKLWl3X0lMCi1qYQotamFfSlAKLWtvCi1rb19LUgotdGgKLXRoX1RICi10aF9USF9USAotemgKLXpoX0NOCi16aF9ISwotemhfVFcKLWJlCi1iZV9CWQotYmcKLWJnX0JHCi1jYQotY2FfRVMKLWNzCi1jc19DWgotZGEKLWRhX0RLCi1kZQotZGVfQVQKLWRlX0NICi1kZV9ERQotZGVfTFUKLWVsCi1lbF9HUgotZW5fQVUKLWVuX0NBCi1lbl9HQgotZW5fSUUKLWVuX0lOCi1lbl9OWgotZW5fWkEKLWVzCi1lc19BUgotZXNfQk8KLWVzX0NMCi1lc19DTwotZXNfQ1IKLWVzX0RPCi1lc19FQwotZXNfRVMKLWVzX0dUCi1lc19ITgotZXNfTVgKLWVzX05JCi1lc19QQQotZXNfUEUKLWVzX1BSCi1lc19QWQotZXNfU1YKLWVzX1VZCi1lc19WRQotZXQKLWV0X0VFCi1maQotZmlfRkkKLWZyCi1mcl9CRQotZnJfQ0EKLWZyX0NICi1mcl9GUgotZnJfTFUKLWhyCi1ocl9IUgotaHUKLWh1X0hVCi1pcwotaXNfSVMKLWl0Ci1pdF9DSAotaXRfSVQKLWx0Ci1sdF9MVAotbHYKLWx2X0xWCi1tawotbWtfTUsKLW5sCi1ubF9CRQotbmxfTkwKLW5vCi1ub19OTwotbm9fTk9fTlkKLXBsCi1wbF9QTAotcHQKLXB0X0JSCi1wdF9QVAotcm8KLXJvX1JPCi1ydQotcnVfUlUKLXNoCi1zaF9ZVQotc2sKLXNrX1NLCi1zbAotc2xfU0kKLXNxCi1zcV9BTAotc3IKLXNyX1lVCi1zdgotc3ZfU0UKLXRyCi10cl9UUgotdWsKLXVrX1VBCi1lbgotZW5fVVMKLWZpbGUuZW5jb2RpbmcucGtnOiBzdW4uaW8KLWZpbGUuZW5jb2Rpbmc6IENwMTI1MgotCi0KLUF2YWlsYWJsZSBDaGFyc2V0cwotMS4gIENoYXJzZXRuYW1lOiBCaWc1Ci0JZGlzcGxheU5hbWU6IEJpZzUKLQlhbGlhc2VzOiBbY3NCaWc1XQotMi4gIENoYXJzZXRuYW1lOiBCaWc1LUhLU0NTCi0JZGlzcGxheU5hbWU6IEJpZzUtSEtTQ1MKLQlhbGlhc2VzOiBbYmlnNS1oa3NjcywgQmlnNV9IS1NDUywgYmlnNWhrc2NzXQotMy4gIENoYXJzZXRuYW1lOiBFVUMtSlAKLQlkaXNwbGF5TmFtZTogRVVDLUpQCi0JYWxpYXNlczogW2V1Y2ppcywgeC1ldWNqcCwgY3NFVUNQa2RGbXRqYXBhbmVzZSwgZXVjanAsIEV4dGVuZGVkX1VOSVhfQ29kZV9QYWNrZWRfRm9ybWF0X2Zvcl9KYXBhbmVzZSwgeC1ldWMtanAsIGV1Y19qcF0KLTQuICBDaGFyc2V0bmFtZTogRVVDLUtSCi0JZGlzcGxheU5hbWU6IEVVQy1LUgotCWFsaWFzZXM6IFtrc2M1NjAxLCA1NjAxLCBrc2M1NjAxXzE5ODcsIGtzY181NjAxLCBrc2M1NjAxLTE5ODcsIGV1Y19rciwga3NfY181NjAxLTE5ODcsIGV1Y2tyLCBjc0VVQ0tSXQotNS4gIENoYXJzZXRuYW1lOiBHQjE4MDMwCi0JZGlzcGxheU5hbWU6IEdCMTgwMzAKLQlhbGlhc2VzOiBbZ2IxODAzMC0yMDAwXQotNi4gIENoYXJzZXRuYW1lOiBHQksKLQlkaXNwbGF5TmFtZTogR0JLCi0JYWxpYXNlczogW3dpbmRvd3MtOTM2LCBDUDkzNl0KLTcuICBDaGFyc2V0bmFtZTogSVNPLTIwMjItSlAKLQlkaXNwbGF5TmFtZTogSVNPLTIwMjItSlAKLQlhbGlhc2VzOiBbamlzLCBqaXNfZW5jb2RpbmcsIGNzamlzZW5jb2RpbmcsIGNzSVNPMjAyMkpQLCBpc28yMDIyanBdCi04LiAgQ2hhcnNldG5hbWU6IElTTy0yMDIyLUtSCi0JZGlzcGxheU5hbWU6IElTTy0yMDIyLUtSCi0JYWxpYXNlczogW0lTTzIwMjJLUiwgY3NJU08yMDIyS1JdCi05LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTEKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMQotCWFsaWFzZXM6IFtpc28taXItMTAwLCA4ODU5XzEsIElTT184ODU5LTEsIElTTzg4NTlfMSwgODE5LCBjc0lTT0xhdGluMSwgSUJNLTgxOSwgSVNPXzg4NTktMToxOTg3LCBsYXRpbjEsIGNwODE5LCBJU084ODU5LTEsIElCTTgxOSwgSVNPXzg4NTlfMSwgbDFdCi0xMC4gIENoYXJzZXRuYW1lOiBJU08tODg1OS0xMwotCWRpc3BsYXlOYW1lOiBJU08tODg1OS0xMwotCWFsaWFzZXM6IFtpc284ODU5XzEzXQotMTEuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktMTUKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMTUKLQlhbGlhc2VzOiBbODg1OV8xNSwgY3NJU09sYXRpbjksIElCTTkyMywgY3A5MjMsIDkyMywgTDksIElCTS05MjMsIElTTzg4NTktMTUsIExBVElOOSwgSVNPXzg4NTktMTUsIExBVElOMCwgY3NJU09sYXRpbjAsIElTTzg4NTlfMTVfRkRJUywgSVNPLTg4NTktMTVdCi0xMi4gIENoYXJzZXRuYW1lOiBJU08tODg1OS0yCi0JZGlzcGxheU5hbWU6IElTTy04ODU5LTIKLQlhbGlhc2VzOiBbbDIsIGlzby1pci0xMDEsIElTT184ODU5LTI6MTk4NywgSVNPXzg4NTktMiwgbGF0aW4yLCBjc0lTT0xhdGluMiwgaXNvODg1OV8yXQotMTMuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktMwotCWRpc3BsYXlOYW1lOiBJU08tODg1OS0zCi0JYWxpYXNlczogW10KLTE0LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTQKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktNAotCWFsaWFzZXM6IFtpc28taXItMTEwLCBsNCwgbGF0aW40LCBjc0lTT0xhdGluNCwgaXNvODg1OV80LCBJU09fODg1OS00OjE5ODgsIElTT184ODU5LTRdCi0xNS4gIENoYXJzZXRuYW1lOiBJU08tODg1OS01Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTUKLQlhbGlhc2VzOiBbY3lyaWxsaWMsIGlzbzg4NTlfNSwgSVNPXzg4NTktNSwgaXNvLWlyLTE0NCwgY3NJU09MYXRpbkN5cmlsbGljXQotMTYuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktNgotCWRpc3BsYXlOYW1lOiBJU08tODg1OS02Ci0JYWxpYXNlczogW10KLTE3LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTcKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktNwotCWFsaWFzZXM6IFtncmVlazgsIEVDTUEtMTE4LCBzdW5fZXVfZ3JlZWssIEVMT1RfOTI4LCBJU09fODg1OS03OjE5ODcsIGlzby1pci0xMjYsIElTT184ODU5LTcsIGlzbzg4NTlfNywgZ3JlZWssIGNzSVNPTGF0aW5HcmVla10KLTE4LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTgKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktOAotCWFsaWFzZXM6IFtdCi0xOS4gIENoYXJzZXRuYW1lOiBJU08tODg1OS05Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTkKLQlhbGlhc2VzOiBbaXNvLWlyLTE0OCwgbGF0aW41LCBsNSwgSVNPXzg4NTktOSwgSVNPXzg4NTktOToxOTg5LCBjc0lTT0xhdGluNSwgaXNvODg1OV85XQotMjAuICBDaGFyc2V0bmFtZTogSklTX1gwMjAxCi0JZGlzcGxheU5hbWU6IEpJU19YMDIwMQotCWFsaWFzZXM6IFtKSVNfWDAyMDEsIFgwMjAxLCBKSVMwMjAxLCBjc0hhbGZXaWR0aEthdGFrYW5hXQotMjEuICBDaGFyc2V0bmFtZTogSklTX1gwMjEyLTE5OTAKLQlkaXNwbGF5TmFtZTogSklTX1gwMjEyLTE5OTAKLQlhbGlhc2VzOiBbamlzX3gwMjEyLTE5OTAsIGlzby1pci0xNTksIHgwMjEyLCBKSVMwMjEyLCBjc0lTTzE1OUpJU1gwMjEyMTk5MF0KLTIyLiAgQ2hhcnNldG5hbWU6IEtPSTgtUgotCWRpc3BsYXlOYW1lOiBLT0k4LVIKLQlhbGlhc2VzOiBba29pOCwgY3Nrb2k4cl0KLTIzLiAgQ2hhcnNldG5hbWU6IFNoaWZ0X0pJUwotCWRpc3BsYXlOYW1lOiBTaGlmdF9KSVMKLQlhbGlhc2VzOiBbc2hpZnQtamlzLCB4LXNqaXMsIG1zX2thbmppLCBzaGlmdF9qaXMsIGNzU2hpZnRKSVMsIHNqaXMsIHBja10KLTI0LiAgQ2hhcnNldG5hbWU6IFRJUy02MjAKLQlkaXNwbGF5TmFtZTogVElTLTYyMAotCWFsaWFzZXM6IFtdCi0yNS4gIENoYXJzZXRuYW1lOiBVUy1BU0NJSQotCWRpc3BsYXlOYW1lOiBVUy1BU0NJSQotCWFsaWFzZXM6IFtJU082NDYtVVMsIElCTTM2NywgQVNDSUksIGNwMzY3LCBhc2NpaTcsIEFOU0lfWDMuNC0xOTg2LCBpc28taXItNiwgdXMsIDY0NiwgaXNvXzY0Ni5pcnY6MTk4MywgY3NBU0NJSSwgQU5TSV9YMy40LTE5NjgsIElTT182NDYuaXJ2OjE5OTFdCi0yNi4gIENoYXJzZXRuYW1lOiBVVEYtMTYKLQlkaXNwbGF5TmFtZTogVVRGLTE2Ci0JYWxpYXNlczogW1VURl8xNl0KLTI3LiAgQ2hhcnNldG5hbWU6IFVURi0xNkJFCi0JZGlzcGxheU5hbWU6IFVURi0xNkJFCi0JYWxpYXNlczogW1gtVVRGLTE2QkUsIFVURl8xNkJFLCBJU08tMTA2NDYtVUNTLTJdCi0yOC4gIENoYXJzZXRuYW1lOiBVVEYtMTZMRQotCWRpc3BsYXlOYW1lOiBVVEYtMTZMRQotCWFsaWFzZXM6IFtVVEZfMTZMRSwgWC1VVEYtMTZMRV0KLTI5LiAgQ2hhcnNldG5hbWU6IFVURi04Ci0JZGlzcGxheU5hbWU6IFVURi04Ci0JYWxpYXNlczogW1VURjhdCi0zMC4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTAKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjUwCi0JYWxpYXNlczogW2NwMTI1MF0KLTMxLiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1MQotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTEKLQlhbGlhc2VzOiBbY3AxMjUxXQotMzIuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjUyCi0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1MgotCWFsaWFzZXM6IFtjcDEyNTJdCi0zMy4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTMKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjUzCi0JYWxpYXNlczogW2NwMTI1M10KLTM0LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1NAotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTQKLQlhbGlhc2VzOiBbY3AxMjU0XQotMzUuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjU1Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1NQotCWFsaWFzZXM6IFtdCi0zNi4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTYKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjU2Ci0JYWxpYXNlczogW10KLTM3LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1NwotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTcKLQlhbGlhc2VzOiBbY3AxMjU3XQotMzguICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjU4Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1OAotCWFsaWFzZXM6IFtdCi0zOS4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTMxagotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTMxagotCWFsaWFzZXM6IFtjc1dpbmRvd3MzMUosIHdpbmRvd3MtOTMyLCBNUzkzMl0KLTQwLiAgQ2hhcnNldG5hbWU6IHgtRVVDLUNOCi0JZGlzcGxheU5hbWU6IHgtRVVDLUNOCi0JYWxpYXNlczogW2diMjMxMiwgRVVDX0NOLCBldWNjbiwgZXVjLWNuLCBnYjIzMTItODAsIGdiMjMxMi0xOTgwXQotNDEuICBDaGFyc2V0bmFtZTogeC1ldWMtanAtbGludXgKLQlkaXNwbGF5TmFtZTogeC1ldWMtanAtbGludXgKLQlhbGlhc2VzOiBbZXVjX2pwX2xpbnV4LCBldWMtanAtbGludXhdCi00Mi4gIENoYXJzZXRuYW1lOiB4LUVVQy1UVwotCWRpc3BsYXlOYW1lOiB4LUVVQy1UVwotCWFsaWFzZXM6IFtjbnMxMTY0MywgZXVjX3R3LCBFVUMtVFcsIGV1Y3R3XQotNDMuICBDaGFyc2V0bmFtZTogeC1JU0NJSTkxCi0JZGlzcGxheU5hbWU6IHgtSVNDSUk5MQotCWFsaWFzZXM6IFtpc2NpaSwgU1RfU0VWXzM1OC04OCwgaXNvLWlyLTE1MywgY3NJU08xNTNHT1NUMTk3Njg3NCwgSVNDSUk5MV0KLTQ0LiAgQ2hhcnNldG5hbWU6IHgtSklTMDIwOAotCWRpc3BsYXlOYW1lOiB4LUpJUzAyMDgKLQlhbGlhc2VzOiBbSklTX0M2NjI2LTE5ODMsIEpJUzAyMDgsIGNzSVNPODdKSVNYMDIwOCwgeDAyMDgsIEpJU19YMDIwOC0xOTgzLCBpc28taXItODddCi00NS4gIENoYXJzZXRuYW1lOiB4LUpvaGFiCi0JZGlzcGxheU5hbWU6IHgtSm9oYWIKLQlhbGlhc2VzOiBbam9oYWIsIG1zMTM2MSwga3NjNTYwMS0xOTkyLCBrc2M1NjAxXzE5OTJdCi00Ni4gIENoYXJzZXRuYW1lOiB4LU1TOTUwLUhLU0NTCi0JZGlzcGxheU5hbWU6IHgtTVM5NTAtSEtTQ1MKLQlhbGlhc2VzOiBbTVM5NTBfSEtTQ1NdCi00Ny4gIENoYXJzZXRuYW1lOiB4LW1zd2luLTkzNgotCWRpc3BsYXlOYW1lOiB4LW1zd2luLTkzNgotCWFsaWFzZXM6IFttczkzNiwgbXNfOTM2XQotNDguICBDaGFyc2V0bmFtZTogeC13aW5kb3dzLTk0OQotCWRpc3BsYXlOYW1lOiB4LXdpbmRvd3MtOTQ5Ci0JYWxpYXNlczogW3dpbmRvd3M5NDksIG1zXzk0OSwgbXM5NDldCi00OS4gIENoYXJzZXRuYW1lOiB4LXdpbmRvd3MtOTUwCi0JZGlzcGxheU5hbWU6IHgtd2luZG93cy05NTAKLQlhbGlhc2VzOiBbd2luZG93cy05NTAsIG1zOTUwXQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9DcmVhdGVDb2RlZFJlYWRlclRlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9DcmVhdGVDb2RlZFJlYWRlclRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjFhNzc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvQ3JlYXRlQ29kZWRSZWFkZXJUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmc7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5JbGxlZ2FsQ2hhcnNldE5hbWVFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5NYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLnppcC5aaXBFbnRyeTsKLWltcG9ydCBqYXZhLnV0aWwuemlwLlppcE91dHB1dFN0cmVhbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29kZWRSZWFkZXJDcmVhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Ob25Db250ZW50QmFzZWRFbmNvZGluZ1J1bGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5leGNlcHRpb25zLlVuc3VwcG9ydGVkQ2hhcnNldEV4Y2VwdGlvbldpdGhEZXRhaWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy51dGlsLlByb2plY3RVbnppcFV0aWxpdHk7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBpcyBpbnRlbmRlZCB0byBiZSBleGVjdXRlZCBvbmx5IGF0IGRldmVsb3BtZW50IHRpbWUsIGFuZCBpdAotICogY3JlYXRlcyB0aGUgY2xhc3MgdG8gSlVuaXQgdGVzdCBhbGwgdGhlIGZpbGVzIGZvdW5kIGluIHRoZSB0ZXN0ZmlsZXMKLSAqIGRpcmVjdG9yeS4KLSAqLwotcHVibGljIGNsYXNzIENyZWF0ZUNvZGVkUmVhZGVyVGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotCS8vCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAiaHRtbC8iOwotCS8vCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVSb290ID0KLQkvLyAiL2J1aWxkcy9Xb3Jrc3BhY2VzL0hlYWRXb3Jrc3BhY2Uvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8iOwotCS8vCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGZpbGVSb290ICsgZmlsZURpcjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVEZJTEVTX1pJUEZJTEVfTkFNRSA9ICJ0ZXN0ZmlsZXMuemlwIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9GSUxFX0RJUiA9ICJ0ZXN0ZmlsZXMiOyAvLyROT04tTkxTLTEkCi0JLy8gbmVlZHMgdG8gYmUgc3RhdGljLCBzaW5jZSBKVW5pdCBjcmVhdGVzIGRpZmZlcmVuY2UgaW5zdGFuY2VzIGZvciBlYWNoCi0JLy8gdGVzdAotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQ7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfUFJPSkVDVF9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmciOyAvLyROT04tTkxTLTEkCi0Jc3RhdGljIElQcm9qZWN0IGZUZXN0UHJvamVjdDsKLQlwcml2YXRlIHN0YXRpYyBpbnQgblNldHVwcyA9IDA7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGN1cnJlbnRQbGF0Zm9ybUNoYXJzZXQgPSBnZXRQbGF0Zm9ybURlZmF1bHQoKTsKLQlwcml2YXRlIGJvb2xlYW4gUkVDUkVBVEVfRklMRVMgPSBmYWxzZTsKLQotCS8qKgotCSAqICAKLQkgKi8KLQlwdWJsaWMgQ3JlYXRlQ29kZWRSZWFkZXJUZXN0ZXIoKSB7Ci0JCXN1cGVyKCk7Ci0JCS8vU3lzdGVtLm91dC5wcmludGxuKGN1cnJlbnRQbGF0Zm9ybUNoYXJzZXQpOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0UGxhdGZvcm1EZWZhdWx0KCkgewotCQlTdHJpbmcgcGxhdGZvcm1EZWZhdWx0ID0gTm9uQ29udGVudEJhc2VkRW5jb2RpbmdSdWxlcy51c2VEZWZhdWx0TmFtZVJ1bGVzKG51bGwpOwotCQlyZXR1cm4gcGxhdGZvcm1EZWZhdWx0OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkJLy8JCQkJdHJ5IHsKLQkJLy8JCQkJCW5ldyBDcmVhdGVDb2RlZFJlYWRlclRlc3RlcigpLmRvQ3JlYXRlQWxsRmlsZXMoKTsKLQkJLy8JCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCS8vCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkvLwkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCS8vCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkvLwkJCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQYXRoIGxvY2F0aW9uUGF0aCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCW1vbml0b3IgPSBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOwotCQl9Ci0JCW1vbml0b3IuYmVnaW5UYXNrKCJjcmVhdGluZyB0ZXN0IHByb2plY3QiLCAxMCk7Ci0JCS8vIGNyZWF0ZSB0aGUgcHJvamVjdAotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOwotCQkJCWlmIChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLmVxdWFscyhsb2NhdGlvblBhdGgpKSB7Ci0JCQkJCWxvY2F0aW9uUGF0aCA9IG51bGw7Ci0JCQkJfQotCQkJCWRlc2Muc2V0TG9jYXRpb24obG9jYXRpb25QYXRoKTsKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjLCBtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJCWlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb25pdG9yICE9IG51bGwpIHsKLQkJCQltb25pdG9yLmRvbmUoKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgZ2V0QW5kQ3JlYXRlUHJvamVjdCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJLy9UZXN0c1BsdWdpbiB0ZXN0c1BsdWdpbiA9IChUZXN0c1BsdWdpbikKLQkJLy8gUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nIik7Ci0JCUlXb3Jrc3BhY2Ugd29ya3NwYWNlID0gVGVzdHNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0JCUlXb3Jrc3BhY2VSb290IHJvb3QgPSB3b3Jrc3BhY2UuZ2V0Um9vdCgpOwotCQlmVGVzdFByb2plY3QgPSByb290LmdldFByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkvLyB0aGlzIGZvcm0gY3JlYXRlcyBwcm9qZWN0IGFzICJsaW5rZWQiIGJhY2sgdG8gJ2ZpbGVSb290JwotCQkvL2NyZWF0ZVByb2plY3QodGVzdFByb2plY3QsIG5ldyBQYXRoKGZpbGVSb290KSwgbnVsbCk7Ci0JCWNyZWF0ZVByb2plY3QoZlRlc3RQcm9qZWN0LCBudWxsLCBudWxsKTsKLQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQlhc3NlcnRUcnVlKGZUZXN0UHJvamVjdC5leGlzdHMoKSk7Ci0JCS8vCQlJQ29udGFpbmVyIHRlc3RGaWxlcyA9IHRlc3RQcm9qZWN0LmdldEZvbGRlcigidGVzdGZpbGVzIik7Ci0JCS8vCQlhc3NlcnRUcnVlKHRlc3RGaWxlcy5leGlzdHMoKSk7Ci0JCS8vCQlJUmVzb3VyY2VbXSBhbGxGb2xkZXJzID0gdGVzdEZpbGVzLm1lbWJlcnMoKTsKLQkJLy8JCWFzc2VydE5vdE51bGwoYWxsRm9sZGVycyk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVRlc3RNZXRob2RTb3VyY2UoaW50IGNvdW50LCBTdHJpbmcgZmlsZVBhdGhBbmROYW1lLCBTdHJpbmcgZGV0ZWN0ZWRDaGFyc2V0TmFtZSwgU3RyaW5nIGphdmFDaGFyc2V0TmFtZSwgU3RyaW5nIGV4cGVjdGVkRXhjZXB0aW9uKSB7Ci0JCVN0cmluZyBqYXZhQ2hhcnNldE5hbWVPcktleSA9IGphdmFDaGFyc2V0TmFtZTsKLQkJaWYgKG51bGwgIT0gamF2YUNoYXJzZXROYW1lT3JLZXkgJiYgamF2YUNoYXJzZXROYW1lT3JLZXkuZXF1YWxzKGN1cnJlbnRQbGF0Zm9ybUNoYXJzZXQpKQotCQkJamF2YUNoYXJzZXROYW1lT3JLZXkgPSAiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IjsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJwdWJsaWMgdm9pZCB0ZXN0RmlsZSIgKyBjb3VudCArICIgKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsiICsgIiBkb1Rlc3QoIFwiIiArIGphdmFDaGFyc2V0TmFtZU9yS2V5ICsgIlwiLCBcIiIgKyBkZXRlY3RlZENoYXJzZXROYW1lICsgIlwiLCAgXCIiICsgZmlsZVBhdGhBbmROYW1lICsgIlwiLCAiICsgZXhwZWN0ZWRFeGNlcHRpb24gKyAiKTsgfSIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCW5TZXR1cHMrKzsKLQkJaWYgKCFmVGVzdFByb2plY3RJbml0aWFsaXplZCkgewotCQkJZ2V0QW5kQ3JlYXRlUHJvamVjdCgpOwotCQkJLy8gdW56aXAgZmlsZXMgdG8gdGhlIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQkJU3RyaW5nIGRlc3RpbmF0aW9uUHJvamVjdFN0cmluZyA9IGZUZXN0UHJvamVjdC5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKTsKLQkJCVN0cmluZyBkZXN0aW5hdGlvbkZvbGRlciA9IGRlc3RpbmF0aW9uUHJvamVjdFN0cmluZyArICIvIjsKLQkJCS8vIHRoaXMgemlwIGZpbGUgaXMgc2l0dGluZyBpbiB0aGUgInJvb3QiIG9mIHRlc3QgcGx1Z2luCi0JCQlGaWxlIHppcEZpbGUgPSBUZXN0c1BsdWdpbi5nZXRUZXN0RmlsZSgidGVzdGZpbGVzLnppcCIpOwotCQkJUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCQlwcm9qVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBkZXN0aW5hdGlvbkZvbGRlcik7Ci0JCQlwcm9qVXRpbC5pbml0SmF2YVByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQkJblNldHVwcy0tOwotCQlpZiAoblNldHVwcyA9PSAwKSB7Ci0JCQlpZiAoIURFQlVHKSB7Ci0JCQkJLy8JCQkJRGlzcGxheSBkaXNwbGF5ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCk7Ci0JCQkJLy8JCQkJZGlzcGxheS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgewotCQkJCS8vCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJLy8JCQkJCQlQcm9qZWN0VW56aXBVdGlsaXR5IHByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJCQkvLwkJCQkJCUlQcm9qZWN0IHByb2ogPSBmVGVzdFByb2plY3Q7Ci0JCQkJLy8JCQkJCQlmVGVzdFByb2plY3QgPSBudWxsOwotCQkJCS8vCQkJCQkJdHJ5IHsKLQkJCQkvLwkJCQkJCQlwcm9qVXRpbC5kZWxldGVQcm9qZWN0KHByb2opOwotCQkJCS8vCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkvLwkJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCS8vCQkJCQkJfQotCQkJCS8vCQkJCQl9Ci0JCQkJLy8JCQkJfSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlQWxsRmlsZXMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlpZiAoUkVDUkVBVEVfRklMRVMpIHsKLQkJCUxpc3QgYWxsRmlsZXMgPSBUZXN0c1BsdWdpbi5nZXRBbGxUZXN0RmlsZXMoVEVTVF9GSUxFX0RJUik7Ci0JCQlVUkwgb3V0cHV0RGlyVVJMID0gVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCQlGaWxlIHppcG91dEZpbGUgPSBuZXcgRmlsZShvdXRwdXREaXJVUkwuZ2V0UGF0aCgpLCBURVNURklMRVNfWklQRklMRV9OQU1FKTsKLQkJCWphdmEuaW8uRmlsZU91dHB1dFN0cmVhbSB6aXBPdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSh6aXBvdXRGaWxlKTsKLQkJCVppcE91dHB1dFN0cmVhbSB6aXBPdXRwdXRTdHJlYW0gPSBuZXcgWmlwT3V0cHV0U3RyZWFtKHppcE91dCk7Ci0JCQlpbnQgY291bnQgPSAxOwotCQkJZm9yIChJdGVyYXRvciBpdGVyID0gYWxsRmlsZXMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KSB7Ci0JCQkJRmlsZSBmaWxlID0gKEZpbGUpIGl0ZXIubmV4dCgpOwotCQkJCWNyZWF0ZVppcEVudHJ5KHppcE91dHB1dFN0cmVhbSwgZmlsZSk7Ci0JCQkJQ29kZWRSZWFkZXJDcmVhdG9yIGNvZGVkUmVhZGVyQ3JlYXRvciA9IG5ldyBDb2RlZFJlYWRlckNyZWF0b3IoKTsKLQkJCQljb2RlZFJlYWRlckNyZWF0b3Iuc2V0KGZpbGUuZ2V0TmFtZSgpLCBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpKTsKLQkJCQlTdHJpbmcgZGV0ZWN0ZWRDaGFyc2V0TmFtZSA9IG51bGw7Ci0JCQkJU3RyaW5nIGphdmFDaGFyc2V0TmFtZSA9IG51bGw7Ci0JCQkJU3RyaW5nIGV4cGVjdGVkRXhjZXB0aW9uID0gbnVsbDsKLQkJCQl0cnkgewotCQkJCQkvLyBqdXN0IHVzZWQgZm9yIGRlYnVnIGluZm8sIGJ1dCBjYW4gdGhyb3cgZXhjZXB0aW9uCi0JCQkJCWphdmFDaGFyc2V0TmFtZSA9IGNvZGVkUmVhZGVyQ3JlYXRvci5nZXRFbmNvZGluZ01lbWVudG8oKS5nZXRKYXZhQ2hhcnNldE5hbWUoKTsKLQkJCQkJZGV0ZWN0ZWRDaGFyc2V0TmFtZSA9IGNvZGVkUmVhZGVyQ3JlYXRvci5nZXRFbmNvZGluZ01lbWVudG8oKS5nZXREZXRlY3RlZENoYXJzZXROYW1lKCk7Ci0JCQkJfQotCQkJCWNhdGNoIChVbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsIGUpIHsKLQkJCQkJLy8gaWdub3JlIGZvciBzaW1wbHkgY3JlYXRpbmcgdGVzdHMKLQkJCQkJZXhwZWN0ZWRFeGNlcHRpb24gPSBlLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIi5jbGFzcyI7Ci0JCQkJfQotCQkJCWNhdGNoIChNYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCS8vIGlnbm9yZSBmb3Igc2ltcGx5IGNyZWF0aW5nIHRlc3RzCi0JCQkJCWV4cGVjdGVkRXhjZXB0aW9uID0gZS5nZXRDbGFzcygpLmdldE5hbWUoKSArICIuY2xhc3MiOwotCQkJCX0KLQkJCQljYXRjaCAoSWxsZWdhbENoYXJzZXROYW1lRXhjZXB0aW9uIGUpIHsKLQkJCQkJLy8gaWdub3JlIGZvciBzaW1wbHkgY3JlYXRpbmcgdGVzdHMKLQkJCQkJZXhwZWN0ZWRFeGNlcHRpb24gPSBlLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIi5jbGFzcyI7Ci0JCQkJfQotCQkJCVN0cmluZyBzdWJwYXRoID0gZ2V0U3ViUGF0aE5hbWUoZmlsZSk7Ci0JCQkJY3JlYXRlVGVzdE1ldGhvZFNvdXJjZShjb3VudCwgc3VicGF0aCwgZGV0ZWN0ZWRDaGFyc2V0TmFtZSwgamF2YUNoYXJzZXROYW1lLCBleHBlY3RlZEV4Y2VwdGlvbik7Ci0JCQkJY291bnQrKzsKLQkJCX0KLQkJCXppcE91dHB1dFN0cmVhbS5jbG9zZSgpOwotCQkJemlwT3V0LmNsb3NlKCk7Ci0JCQlhc3NlcnRUcnVlKHRydWUpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0U3ViUGF0aE5hbWUoRmlsZSBmaWxlKSB7Ci0JCVN0cmluZyBwYXRoID0gZmlsZS5nZXRQYXRoKCk7Ci0JCWludCBsYXN0SW5kZXggPSBwYXRoLmxhc3RJbmRleE9mKFRFU1RfRklMRV9ESVIpOwotCQlTdHJpbmcgc3VicGF0aCA9IHBhdGguc3Vic3RyaW5nKGxhc3RJbmRleCk7Ci0JCXN1YnBhdGggPSBzdWJwYXRoLnJlcGxhY2UoJ1xcJywgJy8nKTsKLQkJcmV0dXJuIHN1YnBhdGg7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHppcE91dHB1dFN0cmVhbQotCSAqIEBwYXJhbSBlbGVtZW50Ci0JICovCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVppcEVudHJ5KFppcE91dHB1dFN0cmVhbSB6aXBPdXRwdXRTdHJlYW0sIEZpbGUgZmlsZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHN1YlBhdGhOYW1lID0gZ2V0U3ViUGF0aE5hbWUoZmlsZSk7Ci0JCVppcEVudHJ5IHppcEVudHJ5ID0gbmV3IFppcEVudHJ5KHN1YlBhdGhOYW1lKTsKLQkJemlwT3V0cHV0U3RyZWFtLnB1dE5leHRFbnRyeSh6aXBFbnRyeSk7Ci0JCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKTsKLQkJaW50IG5SZWFkID0gMDsKLQkJYnl0ZVtdIGJ1ZmZlciA9IG5ldyBieXRlWzEwMjQgKiA4XTsKLQkJd2hpbGUgKG5SZWFkICE9IC0xKSB7Ci0JCQluUmVhZCA9IGlucHV0U3RyZWFtLnJlYWQoYnVmZmVyKTsKLQkJCWlmIChuUmVhZCA+IDApIHsKLQkJCQl6aXBPdXRwdXRTdHJlYW0ud3JpdGUoYnVmZmVyLCAwLCBuUmVhZCk7Ci0JCQl9Ci0JCX0KLQkJemlwT3V0cHV0U3RyZWFtLmZsdXNoKCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvRW5jb2RpbmdUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvRW5jb2RpbmdUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM3MDNjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0VuY29kaW5nVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmc7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5wcm9wZXJ0aWVzLlRlc3RDb21tb25OYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnByb3BlcnRpZXMuVGVzdE92ZXJyaWRlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQuVGVzdENvZGVkUmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucmVhZC5UZXN0Q29kZWRSZWFkZXJPbkdlbm5lZEZpbGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucmVhZC5UZXN0Q29udGVudERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucmVhZC5UZXN0Q29udGVudFR5cGVEZXNjcmlwdGlvbk9uR2VubmVkRmlsZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkLlRlc3RDb250ZW50VHlwZURldGVjdGlvbkZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQuVGVzdENvbnRlbnRUeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLndyaXRlLlRlc3RDb2RlZFdyaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcueG1sLlhNTEVuY29kaW5nVGVzdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy54bWwuWE1MSGVhZFRva2VuaXplclRlc3RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnhtbC5YTUxNYWxmb3JtZWRJbnB1dFRlc3RzOwotCi0KLXB1YmxpYyBjbGFzcyBFbmNvZGluZ1Rlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0KLQkvLyBGSVhNRTogY29tbWVudGVkIG91dCBsYW5nLiBzcGVjLiB0ZXN0cywgdW50aWwgYWxsIG1pZ3JhdGVkIHRvIG9yZy5lY2xpcHNlIAotCXByaXZhdGUgc3RhdGljIENsYXNzW10gY2xhc3NlcyA9IG5ldyBDbGFzc1tde1Rlc3RPdmVycmlkZXMuY2xhc3MsIFRlc3RDb2RlZFJlYWRlci5jbGFzcywgVGVzdENvZGVkV3JpdGUuY2xhc3MsIFhNTEVuY29kaW5nVGVzdHMuY2xhc3MsIFhNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuY2xhc3MsIFhNTE1hbGZvcm1lZElucHV0VGVzdHMuY2xhc3MsIFRlc3RDb250ZW50VHlwZURlc2NyaXB0aW9uT25HZW5uZWRGaWxlcy5jbGFzcywgVGVzdENvZGVkUmVhZGVyT25HZW5uZWRGaWxlcy5jbGFzcywgVGVzdENvbnRlbnREZXNjcmlwdGlvbi5jbGFzcywgVGVzdENvbnRlbnRUeXBlcy5jbGFzcywgVGVzdENvbW1vbk5hbWVzLmNsYXNzLCBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JYTUwuY2xhc3N9OwotCS8vcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSBjbGFzc2VzID0gbmV3IENsYXNzW117VGVzdE92ZXJyaWRlcy5jbGFzcywgQ1NTRW5jb2RpbmdUZXN0ZXIuY2xhc3MsIENTU0hlYWRUb2tlbml6ZXJUZXN0ZXIuY2xhc3MsIEhUTUxFbmNvZGluZ1Rlc3RzLmNsYXNzLCBIVE1MSGVhZFRva2VuaXplclRlc3Rlci5jbGFzcywgSlNQRW5jb2RpbmdUZXN0cy5jbGFzcywgSlNQSGVhZFRva2VuaXplclRlc3Rlci5jbGFzcywgVGVzdENvZGVkUmVhZGVyLmNsYXNzLCBUZXN0Q29kZWRXcml0ZS5jbGFzcywgWE1MRW5jb2RpbmdUZXN0cy5jbGFzcywgWE1MSGVhZFRva2VuaXplclRlc3Rlci5jbGFzcywgWE1MTWFsZm9ybWVkSW5wdXRUZXN0cy5jbGFzcywgVGVzdENvbnRlbnRUeXBlRGVzY3JpcHRpb25Pbkdlbm5lZEZpbGVzLmNsYXNzLCBUZXN0Q29kZWRSZWFkZXJPbkdlbm5lZEZpbGVzLmNsYXNzLCBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb24uY2xhc3MsIFRlc3RDb250ZW50RGVzY3JpcHRpb24uY2xhc3MsIFRlc3RDb250ZW50VHlwZXMuY2xhc3MsIFRlc3RDb21tb25OYW1lcy5jbGFzc307Ci0JcHVibGljIEVuY29kaW5nVGVzdFN1aXRlKCkgewotCQlzdXBlcigiRW5jb2RpbmcgVGVzdCBTdWl0ZSIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyBpKyspIHsKLQkJCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShjbGFzc2VzW2ldLCBjbGFzc2VzW2ldLmdldE5hbWUoKSkpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHRoZUNsYXNzCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgRW5jb2RpbmdUZXN0U3VpdGUoQ2xhc3MgdGhlQ2xhc3MsIFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKHRoZUNsYXNzLCBuYW1lKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGhlQ2xhc3MKLQkgKi8KLQlwdWJsaWMgRW5jb2RpbmdUZXN0U3VpdGUoQ2xhc3MgdGhlQ2xhc3MpIHsKLQkJc3VwZXIodGhlQ2xhc3MpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVuY29kaW5nVGVzdFN1aXRlKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBFbmNvZGluZ1Rlc3RTdWl0ZSgpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0ZpbGVVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0ZpbGVVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2Mzc2NDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9GaWxlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotCi0vKioKLSAqIEBhdXRob3IgZGF2aWR3Ci0gKiAKLSAqIFRvIGNoYW5nZSB0aGlzIGdlbmVyYXRlZCBjb21tZW50IGVkaXQgdGhlIHRlbXBsYXRlIHZhcmlhYmxlICJ0eXBlY29tbWVudCI6Ci0gKiBXaW5kb3c+UHJlZmVyZW5jZXM+SmF2YT5UZW1wbGF0ZXMuIFRvIGVuYWJsZSBhbmQgZGlzYWJsZSB0aGUgY3JlYXRpb24gb2YKLSAqIHR5cGUgY29tbWVudHMgZ28gdG8gV2luZG93PlByZWZlcmVuY2VzPkphdmE+Q29kZSBHZW5lcmF0aW9uLgotICovCi1jbGFzcyBGaWxlVXRpbCB7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGN1cnJlbnRXb3Jrc3BhY2UgPSAiZGV2MDcyNSI7Ci0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBwcmludGVkT25jZSA9IGZhbHNlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZMaW5lU2VwYXJhdG9yID0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZQYXRoU2VwYXJhdG9yID0gU3lzdGVtLmdldFByb3BlcnR5KCJwYXRoLnNlcGFyYXRvciIpOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZGaWxlU2VwYXJhdG9yID0gU3lzdGVtLmdldFByb3BlcnR5KCJmaWxlLnNlcGFyYXRvciIpOwotCi0JcHVibGljIHN0YXRpYyBGaWxlIG1ha2VGaWxlRm9yKFN0cmluZyBkaXJlY3RvcnksIFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4KSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgaW5zdGFsbFBhdGggPSAiL2J1aWxkcy9Xb3Jrc3BhY2VzLyIgKyBjdXJyZW50V29ya3NwYWNlICsgIi9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLyI7Ci0JCVVSTCB1cmwgPSBuZXcgVVJMKCJmaWxlOi8vIiArIGluc3RhbGxQYXRoKTsKLQkJU3RyaW5nIHRvdGFsRGlyZWN0b3J5ID0gaW5zdGFsbFBhdGggKyBkaXJlY3Rvcnk7Ci0JCVN0cmluZyB0b3RhbFBhdGggPSB0b3RhbERpcmVjdG9yeSArICIvIiArIGZpbGVuYW1lOwotCQlVUkwgdG90YWxVUkwgPSBuZXcgVVJMKHVybCwgdG90YWxQYXRoKTsKLQkJVVJMIGZpbmFsdXJsID0gUGxhdGZvcm0uYXNMb2NhbFVSTCh0b3RhbFVSTCk7Ci0JCVN0cmluZyBmaW5hbEZpbGUgPSBmaW5hbHVybC5nZXRGaWxlKCk7Ci0JCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGZpbmFsRmlsZSk7Ci0JCVN0cmluZyBmaW5hbFBhdGggPSBmaWxlLmdldFBhcmVudCgpOwotCQlGaWxlIGRpciA9IG5ldyBGaWxlKGZpbmFsUGF0aCk7Ci0JCWlmICghcHJpbnRlZE9uY2UpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiT3V0cHV0IHdyaXR0ZW4gdG8gIiArIGRpci5nZXRBYnNvbHV0ZVBhdGgoKSk7Ci0JCQlwcmludGVkT25jZSA9IHRydWU7Ci0JCX0KLQotCQlpZiAoIWRpci5leGlzdHMoKSkgewotCQkJZGlyLm1rZGlycygpOwotCQl9Ci0JCXJldHVybiBmaWxlOwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvR2VuZXJhdGVGaWxlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9HZW5lcmF0ZUZpbGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyN2Y0ZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9HZW5lcmF0ZUZpbGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZzsKLQotCi1wdWJsaWMgY2xhc3MgR2VuZXJhdGVGaWxlcyB7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRNYWluRGlyZWN0b3J5QmFzZWRPblZNTmFtZSgpIHsKLQkJU3RyaW5nIG1haW5EaXJlY3RvcnkgPSAidGVzdGZpbGVzL2dlbmVkRmlsZXMtIiArIGdldEphdmFWZXJzaW9uKCk7Ci0JCXJldHVybiBtYWluRGlyZWN0b3J5OwotCX0KLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRKYXZhVmVyc2lvbigpIHsKLQkJU3RyaW5nIG5hbWUgPSBudWxsOyAvL1N5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS5mdWxsdmVyc2lvbiIpOwotCQlpZiAobmFtZSA9PSBudWxsKSB7Ci0JCQluYW1lID0gU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLnZlcnNpb24iKSArICIgKCIgKyBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEucnVudGltZS52ZXJzaW9uIikgKyAiKSI7Ci0JCX0KLQkJcmV0dXJuIG5hbWU7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0dlbmVyYXRlWE1MRmlsZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvR2VuZXJhdGVYTUxGaWxlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjFmOTYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvR2VuZXJhdGVYTUxGaWxlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZzsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0RW5jb2RlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNvZGluZ0Vycm9yQWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50RGVzY3JpcHRpb247Ci0KLS8qKgotICogVGhlIHB1cnBvc2UgYW5kIGxvZ2ljIG9mIHRoaXMgY2xhc3MgaXMgdG8gY3JlYXRlIHNtYWxsICJYTUwgZmlsZXMiIG9mCi0gKiB2YXJpb3VzLCBrbm93biBlbmNvZGluZ3MsIHdyaXRlIHRoZW0gdG8gZmlsZXMsIGFuZCBpbiBsYXRlciB0ZXN0cywgYmUgc3VyZQotICogYXBwcm9wcmlhdGUgZW5jb2RpbmcgY2FuIGJlIGRldGVjdGVkLCBhbmQgcmVhZCBpbiBhbmQgaW50YWN0IGNoYXJhY3RlcnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBHZW5lcmF0ZVhNTEZpbGVzIGV4dGVuZHMgR2VuZXJhdGVGaWxlcyB7Ci0JcHJpdmF0ZSBTdHJpbmcgTEYgPSAiXG4iOwotCXByaXZhdGUgU3RyaW5nIENSID0gIlxyIjsKLQlwcml2YXRlIFN0cmluZyBDUkxGID0gQ1IgKyBMRjsKLQkvLyBkaWZmZXJlbnQgdGV4dCBzdHJpbmdzIGZvciBjb21wYXJpc29ucwotCXByaXZhdGUgU3RyaW5nIHRleHRVU19BU0NJSV9MRiA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elxuMTIzNDU2Nzg5MFxuQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiOwotCXByaXZhdGUgU3RyaW5nIHRleHRVU19BU0NJSV9DUkxGID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XHJcbjEyMzQ1Njc4OTBcclxuQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiOwotCXByaXZhdGUgYm9vbGVhbiBERUJVRyA9IHRydWU7Ci0JcHJpdmF0ZSBib29sZWFuIERFQlVHQ1JMRiA9IGZhbHNlOwotCXByaXZhdGUgYm9vbGVhbiBERUJVR0lORk8gPSB0cnVlOwotCi0KLQlwdWJsaWMgR2VuZXJhdGVYTUxGaWxlcygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JCS8vanVuaXQudGV4dHVpLlRlc3RSdW5uZXIucnVuKEdlbmVyYXRlWE1MRmlsZXMuY2xhc3MpOwotCQlHZW5lcmF0ZVhNTEZpbGVzIHRoaXNBcHAgPSBuZXcgR2VuZXJhdGVYTUxGaWxlcygpOwotCQl0cnkgewotCQkJLy90aGlzQXBwLmdlbmVyYXRlT3JpZ2luYWxGaWxlcygpOwotCQkJdGhpc0FwcC5nZW5lcmF0ZUFsbEZpbGVzRm9yQ3VycmVudFZNKCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBnZW5lcmF0ZUFsbEZpbGVzRm9yQ3VycmVudFZNKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJTWFwIGFsbENoYXJzZXRNYXAgPSBDaGFyc2V0LmF2YWlsYWJsZUNoYXJzZXRzKCk7Ci0JCVNldCBhbGxLZXlzID0gYWxsQ2hhcnNldE1hcC5rZXlTZXQoKTsKLQkJT2JqZWN0W10gYWxsY2hhcnNldHMgPSBhbGxLZXlzLnRvQXJyYXkoKTsKLQkJU3RyaW5nW10gYWxsY2hhcnNldE5hbWVzID0gbmV3IFN0cmluZ1thbGxjaGFyc2V0cy5sZW5ndGhdOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGFsbGNoYXJzZXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhbGxjaGFyc2V0TmFtZXNbaV0gPSBhbGxjaGFyc2V0c1tpXS50b1N0cmluZygpOwotCi0JCX0KLQkJLy9jcmVhdGVGaWxlcyhhbGxjaGFyc2V0TmFtZXMsIGZhbHNlKTsKLQkJY3JlYXRlRmlsZXMoYWxsY2hhcnNldE5hbWVzLCB0cnVlKTsKLQotCX0KLQotCXByaXZhdGUgdm9pZCBjcmVhdGVGaWxlcyhTdHJpbmdbXSBjaGFyc2V0bmFtZXMsIGJvb2xlYW4gdXNlQ1JMRikgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9IG51bGw7Ci0JCVdyaXRlciBvdXQgPSBudWxsOwotCQlTdHJpbmcgbWFpbkRpcmVjdG9yeSA9IGdldE1haW5EaXJlY3RvcnlCYXNlZE9uVk1OYW1lQW5kRmlsZUV4dGVuc2lvbigpOwotCQlMaXN0IGNoYXJzZXRGaWxlc1dyaXR0ZW4gPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2hhcnNldG5hbWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQl0cnkgewotCi0KLQkJCQljaGFyc2V0TmFtZSA9IGNoYXJzZXRuYW1lc1tpXTsKLQotCQkJCUNoYXJzZXQgY2hhcnNldCA9IENoYXJzZXQuZm9yTmFtZShjaGFyc2V0TmFtZSk7Ci0JCQkJQ2hhcnNldEVuY29kZXIgY2hhcnNldEVuY29kZXIgPSBjaGFyc2V0Lm5ld0VuY29kZXIoKTsKLQkJCQljaGFyc2V0RW5jb2Rlci5vbk1hbGZvcm1lZElucHV0KENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0JCQkJY2hhcnNldEVuY29kZXIub25Vbm1hcHBhYmxlQ2hhcmFjdGVyKENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0KLQkJCQlTdHJpbmcgaGVhZGVyID0gZ2V0SGVhZGVyU3RhcnQoKSArIGNoYXJzZXROYW1lICsgZ2V0SGVhZGVyRW5kKCk7Ci0JCQkJU3RyaW5nIGZ1bGx0ZXh0ID0gbnVsbDsKLQkJCQlpZiAodXNlQ1JMRikgewotCQkJCQlmdWxsdGV4dCA9IGhlYWRlciArIHRleHRVU19BU0NJSV9DUkxGOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJZnVsbHRleHQgPSBoZWFkZXIgKyB0ZXh0VVNfQVNDSUlfTEY7Ci0JCQkJfQotCi0JCQkJaWYgKCFpc0ViY2lkaWMoY2hhcnNldE5hbWUsIGNoYXJzZXRFbmNvZGVyKSkgewotCQkJCQlpZiAoY2hhcnNldEVuY29kZXIuY2FuRW5jb2RlKGZ1bGx0ZXh0KSkgewotCQkJCQkJLy8JCQkJCQlpZiAoY2FuRW5jb2RlQ1JMRihjaGFyc2V0TmFtZSwgY2hhcnNldEVuY29kZXIpCi0JCQkJCQkvLyAmJgotCQkJCQkJLy8gY2FuRW5jb2RlU2ltcGxlU3RyaW5nKGNoYXJzZXROYW1lLAotCQkJCQkJLy8gY2hhcnNldEVuY29kZXIsICI8PyIpICYmCi0JCQkJCQkvLyBjaGFyc2V0RW5jb2Rlci5jYW5FbmNvZGUoZnVsbHRleHQpKSB7Ci0JCQkJCQlTdHJpbmcgb3V0cHV0ZmlsZW5hbWUgPSAidGVzdC0iICsgY2hhcnNldE5hbWUgKyAiLnhtbCI7Ci0JCQkJCQlGaWxlIG91dEZpbGUgPSBGaWxlVXRpbC5tYWtlRmlsZUZvcihtYWluRGlyZWN0b3J5LCBvdXRwdXRmaWxlbmFtZSwgbnVsbCk7Ci0JCQkJCQkvL1N5c3RlbS5vdXQucHJpbnRsbihvdXRGaWxlLmdldEFic29sdXRlUGF0aCgpKTsKLQkJCQkJCU91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbShvdXRGaWxlKTsKLQkJCQkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBieXRlc291dCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQotCQkJCQkJV3JpdGVyIGZpbGVXcml0ZXIgPSBuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKG91dHB1dFN0cmVhbSwgY2hhcnNldEVuY29kZXIpOwotCQkJCQkJLy8gdGhpcyBieXRlIHdyaXRlciBpcyBjcmVhdGVkIGp1c3QgdG8gYmUgYWJsZSB0bwotCQkJCQkJLy8gY291bnQgcHJlY2lzZSBieXRlcy4KLQkJCQkJCVdyaXRlciBieXRlV3JpdGVyID0gbmV3IE91dHB1dFN0cmVhbVdyaXRlcihieXRlc291dCwgY2hhcnNldEVuY29kZXIpOwotCi0JCQkJCQlzdXBwbHlCT01zKGNoYXJzZXROYW1lLCBvdXRwdXRTdHJlYW0sIGJ5dGVzb3V0KTsKLQotCQkJCQkJb3V0ID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKGZpbGVXcml0ZXIpOwotCi0KLQkJCQkJCW91dC53cml0ZShmdWxsdGV4dCk7Ci0JCQkJCQlieXRlV3JpdGVyLndyaXRlKGZ1bGx0ZXh0KTsKLQkJCQkJCW91dC5jbG9zZSgpOwotCQkJCQkJYnl0ZVdyaXRlci5mbHVzaCgpOwotCQkJCQkJLy8gaWYgd2UgbWFkZSBpcyB0aGlzIGZhciwgd2l0aCBubyBleGNlcHRpb25zLAotCQkJCQkJLy8gZXRjLiwKLQkJCQkJCS8vIHRoZW4KLQkJCQkJCS8vIG11c3QgaGF2ZSBiZWVuCi0JCQkJCQkvLyByZWFsbHkgd3JpdHRlbi4KLQkJCQkJCVN0cmluZyB3cml0dGVuUmVjb3JkID0gY2hhcnNldE5hbWU7Ci0JCQkJCQljaGFyc2V0RmlsZXNXcml0dGVuLmFkZCh3cml0dGVuUmVjb3JkKTsKLQkJCQkJCWlmIChERUJVRykgewotCQkJCQkJCXByaW50RGVidWdJbmZvKHVzZUNSTEYsIGhlYWRlciwgb3V0cHV0ZmlsZW5hbWUsIGJ5dGVzb3V0KTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQllbHNlIHsKLQkJCQkJCWlmIChERUJVR0lORk8pIHsKLQkJCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAqKiogY291bGQgbm90IGNvbnZlcnQgc2FtcGxlIGFzY2lpIHRleHQgZm9yICIgKyBjaGFyc2V0TmFtZSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJaWYgKERFQlVHSU5GTykgewotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAqKioqKiBjb3VsZCBub3QgZ2VuZXJhdGUgZm9yICIgKyBjaGFyc2V0TmFtZSk7Ci0JCQkJCVN0cmluZyBtc2cgPSBlLmdldE1lc3NhZ2UoKTsKLQkJCQkJaWYgKG1zZyA9PSBudWxsKQotCQkJCQkJbXNnID0gIiI7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICAgIGR1ZSB0byAiICsgZS5nZXRDbGFzcygpLmdldE5hbWUoKSArICIgICIgKyBtc2cpOwotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCWlmIChERUJVR0lORk8pIHsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCIgKioqKiogY291bGQgbm90IGdlbmVyYXRlIGZvciAiICsgY2hhcnNldE5hbWUpOwotCQkJCQlTdHJpbmcgbXNnID0gZS5nZXRNZXNzYWdlKCk7Ci0JCQkJCWlmIChtc2cgPT0gbnVsbCkKLQkJCQkJCW1zZyA9ICIiOwotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgICAgICBkdWUgdG8gIiArIGUuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiICAiICsgbXNnKTsKLQkJCQl9Ci0JCQl9Ci0JCQlmaW5hbGx5IHsKLQkJCQlpZiAob3V0ICE9IG51bGwpIHsKLQkJCQkJb3V0LmNsb3NlKCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQotCQkvLyBub3cgY3JlYXRlIGZpbGUgdGhhdCBzdW1tYXJpemVzIHdoYXQgd2FzIHdyaXR0ZW4KLQkJLy8gc3VpdGFibGUgdG8gcGFzdGUgYXMgbWV0aG9kIGluIHRlc3QgY2xhc3MKLQkJRmlsZSBvdXRGaWxlID0gRmlsZVV0aWwubWFrZUZpbGVGb3IobWFpbkRpcmVjdG9yeSwgInRlc3RNZXRob2RzLnRleHQiLCBudWxsKTsKLQkJRmlsZVdyaXRlciBvdXRwcm9wZXJ0aWVzID0gbmV3IEZpbGVXcml0ZXIob3V0RmlsZSk7Ci0JCW91dHByb3BlcnRpZXMud3JpdGUoY2hhcnNldEZpbGVzV3JpdHRlbi5zaXplKCkgKyBDUkxGKTsKLQkJSXRlcmF0b3IgaXRlbXMgPSBjaGFyc2V0RmlsZXNXcml0dGVuLml0ZXJhdG9yKCk7Ci0JCWludCBuID0gMDsKLQkJd2hpbGUgKGl0ZW1zLmhhc05leHQoKSkgewotCQkJU3RyaW5nIGl0ZW1DcmVhdGVkID0gKFN0cmluZykgaXRlbXMubmV4dCgpOwotCQkJU3RyaW5nIHRlc3RNZXRob2QgPSBjcmVhdGVNZXRob2QobisrLCBpdGVtQ3JlYXRlZCk7Ci0JCQlvdXRwcm9wZXJ0aWVzLndyaXRlKHRlc3RNZXRob2QgKyBDUkxGKTsKLQkJfQotCQlvdXRwcm9wZXJ0aWVzLmNsb3NlKCk7Ci0KLQl9Ci0KLQkvKioKLQkgKiBJIHRob3VnaHQgdGhpcyB1c2VkIHRvIGJlIGF1dG9tYXRpYywgYnV0IGRvZXNuJ3Qgc2VlbSB0byBiZSBub3c/IQotCSAqLwotCXByaXZhdGUgdm9pZCBzdXBwbHlCT01zKFN0cmluZyBjaGFyc2V0TmFtZSwgT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSwgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJ5dGVzb3V0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlieXRlW10gbnVsbEJ5dGVzID0gbmV3IGJ5dGVbXXsweDAwLCAweDAwfTsKLQkJaWYgKGNoYXJzZXROYW1lLmVxdWFscygiVVRGLTE2IikpIHsKLQkJCW91dHB1dFN0cmVhbS53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZMRSk7Ci0JCQlieXRlc291dC53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZMRSk7Ci0JCX0KLQkJaWYgKGNoYXJzZXROYW1lLmVxdWFscygiVVRGLTE2TEUiKSkgewotCQkJb3V0cHV0U3RyZWFtLndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkxFKTsKLQkJCWJ5dGVzb3V0LndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkxFKTsKLQkJfQotCQlpZiAoY2hhcnNldE5hbWUuZXF1YWxzKCJYLVVuaWNvZGVMaXR0bGUiKSkgewotCQkJb3V0cHV0U3RyZWFtLndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkxFKTsKLQkJCWJ5dGVzb3V0LndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkxFKTsKLQkJfQotCQlpZiAoY2hhcnNldE5hbWUuZXF1YWxzKCJVVEYtMTZCRSIpKSB7Ci0JCQlvdXRwdXRTdHJlYW0ud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2QkUpOwotCQkJYnl0ZXNvdXQud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2QkUpOwotCQl9Ci0JCWlmIChjaGFyc2V0TmFtZS5lcXVhbHMoIlgtVW5pY29kZUJpZyIpKSB7Ci0JCQlvdXRwdXRTdHJlYW0ud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2QkUpOwotCQkJYnl0ZXNvdXQud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2QkUpOwotCQl9Ci0JCWlmIChjaGFyc2V0TmFtZS5lcXVhbHMoIlVURi0zMiIpKSB7Ci0JCQlvdXRwdXRTdHJlYW0ud3JpdGUobnVsbEJ5dGVzKTsKLQkJCW91dHB1dFN0cmVhbS53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZMRSk7Ci0JCQlieXRlc291dC53cml0ZShudWxsQnl0ZXMpOwotCQkJYnl0ZXNvdXQud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2TEUpOwotCQl9Ci0JCWlmIChjaGFyc2V0TmFtZS5lcXVhbHMoIlVURi0zMkxFIikpIHsKLQkJCW91dHB1dFN0cmVhbS53cml0ZShudWxsQnl0ZXMpOwotCQkJb3V0cHV0U3RyZWFtLndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkxFKTsKLQkJCWJ5dGVzb3V0LndyaXRlKG51bGxCeXRlcyk7Ci0JCQlieXRlc291dC53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZMRSk7Ci0JCX0KLQkJaWYgKGNoYXJzZXROYW1lLmVxdWFscygiVVRGLTMyQkUiKSkgewotCQkJb3V0cHV0U3RyZWFtLndyaXRlKG51bGxCeXRlcyk7Ci0JCQlvdXRwdXRTdHJlYW0ud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2QkUpOwotCQkJYnl0ZXNvdXQud3JpdGUobnVsbEJ5dGVzKTsKLQkJCWJ5dGVzb3V0LndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkJFKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBpCi0JICogQHBhcmFtIGl0ZW1DcmVhdGVkCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgY3JlYXRlTWV0aG9kKGludCBpLCBTdHJpbmcgaXRlbUNyZWF0ZWQpIHsKLQkJU3RyaW5nIHRlbXBsYXRlID0gIglwdWJsaWMgdm9pZCB0ZXN0RmlsZSIgKyBpICsgIigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAge1xyXG4iICsgIgkJU3RyaW5nIGNoYXJzZXROYW1lID0gXCIiICsgaXRlbUNyZWF0ZWQgKyAiXCI7XHJcbiIgKyAiCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpO1xyXG4iICsgIgl9IjsKLQkJcmV0dXJuIHRlbXBsYXRlOwotCX0KLQotCXByaXZhdGUgdm9pZCBwcmludERlYnVnSW5mbyhib29sZWFuIHVzZUNSTEYsIFN0cmluZyBoZWFkZXIsIFN0cmluZyBvdXRwdXRmaWxlbmFtZSwgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJ5dGVzb3V0KSB7Ci0JCWJ5dGVbXSBieXRlcyA9IGJ5dGVzb3V0LnRvQnl0ZUFycmF5KCk7Ci0JCWludCBuQnl0ZXMgPSBieXRlcy5sZW5ndGg7Ci0JCWludCBuQ2hhcnMgPSAwOwotCQlpZiAodXNlQ1JMRikgewotCQkJbkNoYXJzID0gaGVhZGVyLmxlbmd0aCgpICsgdGV4dFVTX0FTQ0lJX0NSTEYubGVuZ3RoKCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQluQ2hhcnMgPSBoZWFkZXIubGVuZ3RoKCkgKyB0ZXh0VVNfQVNDSUlfTEYubGVuZ3RoKCk7Ci0JCX0KLQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIldyb3RlICIgKyBuQ2hhcnMgKyAiIGNoYXJhY3RlcnMgYW5kICIgKyBuQnl0ZXMgKyAiIGJ5dGVzIHRvICIgKyBvdXRwdXRmaWxlbmFtZSk7Ci0JfQotCi0JLy8gVE9ETzogbmV2ZXIgdXNlZAotCSBib29sZWFuIGNhbkVuY29kZVNpbXBsZVN0cmluZyhTdHJpbmcgY2hhcnNldE5hbWUsIENoYXJzZXRFbmNvZGVyIGNoYXJzZXRFbmNvY2RlciwgU3RyaW5nIHNpbXBsZVN0cmluZykgewotCQkvLyB0aGlzIG1ldGhvZCBhZGRlZCBzaW5jZSBzb21lIGVuY29kZXJzIGRvbid0IHJlcG9ydCB0aGF0IHRoZXkgY2FuJ3QKLQkJLy8gZW5jb2RlIHNvbWV0aGluZywgYnV0IHRoZXkgb2J2aW91c2x5Ci0JCS8vIGNhbid0LCBhdCBsZWFzdCBpbiB0aGUgbm9ybWFsIG1lYW5pbmcgb2YgdGhlIHdvcmQuCi0JCS8vIFRoaXMgc2VlbXMgdG8gbW9zdGx5IGFwcGx5IHRvIHNvbWUgSUJNIHZhcmlldGllcyB3aGVyZSwgYXBwYXJlbnRseSwKLQkJLy8gdGhlIGlucHV0IGNhbid0IGJlIGludGVycHJldGVkIGF0IGFsbCB3aXRob3V0IGtub3dpbmcgZW5jb2RpbmcKLQkJLy8gKHRoYXQgaXMKLQkJLy8gY291bGQgbm90IGJlIHVzZWQgZm9yIGNvbnRlbnQgYmFzZWQgZW5jb2RpbmcpLgotCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCi0JCVN0cmluZyBuZXdBc2NpaVN0cmluZyA9IG51bGw7Ci0JCWJ5dGVbXSB0cmFuc2xhdGVkQnl0ZXMgPSBudWxsOwotCQl0cnkgewotCQkJdHJhbnNsYXRlZEJ5dGVzID0gc2ltcGxlU3RyaW5nLmdldEJ5dGVzKGNoYXJzZXROYW1lKTsKLQkJCW5ld0FzY2lpU3RyaW5nID0gbmV3IFN0cmluZyh0cmFuc2xhdGVkQnl0ZXMsICJhc2NpaSIpOwotCQl9Ci0JCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGltcG9zc2libGUsIHNpbmNlIGNoZWNrZWQgYWxyZWFkeQotCQkJdGhyb3cgbmV3IEVycm9yKGUpOwotCQl9Ci0JCXJlc3VsdCA9IHNpbXBsZVN0cmluZy5lcXVhbHMobmV3QXNjaWlTdHJpbmcpOwotCQlpZiAoIXJlc3VsdCkgewotCQkJaWYgKGNoYXJzZXRFbmNvY2Rlci5tYXhCeXRlc1BlckNoYXIoKSAhPSAxKSB7Ci0JCQkJLy8gZG9uJ3QgY2hlY2sgbXVsaXRieXRlIGVuY29kZXJzLCBqdXN0IGFzc3VtZSB0cnVlIChmb3Igbm93KS4KLQkJCQlyZXN1bHQgPSB0cnVlOwotCQkJCWlmIChjaGFyc2V0RW5jb2NkZXIubWF4Qnl0ZXNQZXJDaGFyKCkgPT0gNCkgewotCQkJCQkvL2V4Y2VwdCwgbGV0J3MganVzdCBleGNsdWRlIGZvdXIgYnl0ZSBzdHJlYW1zLCBmb3Igbm93LgotCQkJCQlyZXN1bHQgPSBmYWxzZTsKLQkJCQkJaWYgKGNoYXJzZXRFbmNvY2Rlci5hdmVyYWdlQnl0ZXNQZXJDaGFyKCkgPT0gMikgewotCQkJCQkJLy8gZXhjZXB0LCBmb3Igc29tZSByZWFzb24gVVRGIGhhcyBtYXggYnl0ZXMgb2YgNAotCQkJCQkJLy8gKGF2ZXJhZ2UgYnl0ZXMgb2YgMikuCi0JCQkJCQlyZXN1bHQgPSBmYWxzZTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogQSB2ZXJ5IGhldXJpc3RpYyBtZXRob2QuIFNob3VsZCBoYXZlIHRhYmxlLCBzb21lZGF5LgotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBpc0ViY2lkaWMoU3RyaW5nIGNoYXJzZXROYW1lLCBDaGFyc2V0RW5jb2RlciBjaGFyc2V0RW5jb2NkZXIpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQkJU3RyaW5nIHNpbXBsZVN0cmluZyA9ICI8PyI7Ci0JCVN0cmluZyBuZXdBc2NpaVN0cmluZyA9IG51bGw7Ci0JCWJ5dGVbXSB0cmFuc2xhdGVkQnl0ZXMgPSBudWxsOwotCQl0cnkgewotCQkJdHJhbnNsYXRlZEJ5dGVzID0gc2ltcGxlU3RyaW5nLmdldEJ5dGVzKGNoYXJzZXROYW1lKTsKLQkJCW5ld0FzY2lpU3RyaW5nID0gbmV3IFN0cmluZyh0cmFuc2xhdGVkQnl0ZXMsICJhc2NpaSIpOwotCQl9Ci0JCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGltcG9zc2libGUsIHNpbmNlIGNoZWNrZWQgYWxyZWFkeQotCQkJdGhyb3cgbmV3IEVycm9yKGUpOwotCQl9Ci0JCS8vIGV4cGVyaW1lbnRpbmcvZGVidWdnaW5nIHNob3dlZCB0aGUga25vd24gZWJjaWRpYyBvbmNlcyBhbHdheXMKLQkJLy8gIm1pcyIgdHJhbmxhdGVkIHRvIGNoYXJhY3RlcnMgTCBhbmQgby4KLQkJcmVzdWx0ID0gIkxvIi5lcXVhbHMobmV3QXNjaWlTdHJpbmcpOwotCQlpZiAocmVzdWx0KSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oY2hhcnNldE5hbWUgKyAiIGFzc3VtZWQgdG8gYmUgRWRjaWRpYyIpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGNoYXJzZXQKLQkgKi8KLQkgYm9vbGVhbiBjYW5FbmNvZGVDUkxGKFN0cmluZyBjaGFyc2V0TmFtZSwgQ2hhcnNldEVuY29kZXIgY2hhcnNldEVuY29kZXIpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCQkvL1N0cmluZyBjaGFyc2V0Q29ub25pY2FsTmFtZSA9IGNoYXJzZXRFbmNvZGVyLmNoYXJzZXQoKS5uYW1lKCk7Ci0JCWlmICghY2hhcnNldEVuY29kZXIuY2FuRW5jb2RlKExGKSkgewotCQkJaWYgKERFQlVHQ1JMRikgewotCQkJCVN0cmluZyBzdHJpbmdOYW1lID0gIkxGIjsKLQkJCQlTdHJpbmcgdGVzdFN0cmluZyA9IExGOwotCQkJCWV4cGxvcmVDb252ZXJzaW9uKGNoYXJzZXROYW1lLCBzdHJpbmdOYW1lLCB0ZXN0U3RyaW5nKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oImNhbiBub3QgZW5jb2RlIExGIGZvciAiICsgY2hhcnNldEVuY29kZXIuY2hhcnNldCgpLm5hbWUoKSk7Ci0JCQl9Ci0JCQlyZXN1bHQgPSBmYWxzZTsKLQkJfQotCQlpZiAoIWNoYXJzZXRFbmNvZGVyLmNhbkVuY29kZShDUikpIHsKLQkJCWlmIChERUJVR0NSTEYpIHsKLQkJCQlTdHJpbmcgc3RyaW5nTmFtZSA9ICJDUiI7Ci0JCQkJU3RyaW5nIHRlc3RTdHJpbmcgPSBDUjsKLQkJCQlleHBsb3JlQ29udmVyc2lvbihjaGFyc2V0TmFtZSwgc3RyaW5nTmFtZSwgdGVzdFN0cmluZyk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJjYW4gbm90IGVuY29kZSBDUiBmb3IgIiArIGNoYXJzZXRFbmNvZGVyLmNoYXJzZXQoKS5uYW1lKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gZmFsc2U7Ci0JCX0KLQkJaWYgKCFjaGFyc2V0RW5jb2Rlci5jYW5FbmNvZGUoQ1JMRikpIHsKLQkJCWlmIChERUJVR0NSTEYpIHsKLQkJCQlTdHJpbmcgc3RyaW5nTmFtZSA9ICJDUkxGIjsKLQkJCQlTdHJpbmcgdGVzdFN0cmluZyA9IENSTEY7Ci0JCQkJZXhwbG9yZUNvbnZlcnNpb24oY2hhcnNldE5hbWUsIHN0cmluZ05hbWUsIHRlc3RTdHJpbmcpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiY2FuIG5vdCBlbmNvZGUgQ1JMRiBmb3IgIiArIGNoYXJzZXRFbmNvZGVyLmNoYXJzZXQoKS5uYW1lKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gZmFsc2U7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQotCX0KLQotCXByaXZhdGUgdm9pZCBleHBsb3JlQ29udmVyc2lvbihTdHJpbmcgY2hhcnNldE5hbWUsIFN0cmluZyBzdHJpbmdOYW1lLCBTdHJpbmcgdGVzdFN0cmluZykgdGhyb3dzIEVycm9yIHsKLQkJdHJ5IHsKLQkJCVN0cmluZyBuZXdMRiA9IG5ldyBTdHJpbmcodGVzdFN0cmluZy5nZXRCeXRlcyhjaGFyc2V0TmFtZSkpOwotCQkJU3lzdGVtLm91dC5wcmludCgib2xkICIgKyBzdHJpbmdOYW1lICsgIiAoZGVjKTogIik7Ci0JCQlkdW1wU3RyaW5nKFN5c3RlbS5vdXQsIHRlc3RTdHJpbmcpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50KCJuZXcgIiArIHN0cmluZ05hbWUgKyAiIChkZWMpOiAiKTsKLQkJCWR1bXBTdHJpbmcoU3lzdGVtLm91dCwgbmV3TEYpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCX0KLQkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgewotCQkJLy9zaG91bGQgbmV2ZXIgaGFwcGVuLCBhbHJlYWR5IGNoZWNrZWQKLQkJCXRocm93IG5ldyBFcnJvcihlKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBvdXQKLQkgKiBAcGFyYW0gbGYyCi0JICovCi0JcHJpdmF0ZSB2b2lkIGR1bXBTdHJpbmcoUHJpbnRTdHJlYW0gb3V0LCBTdHJpbmcgbGYyKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbGYyLmxlbmd0aCgpOyBpKyspIHsKLQkJCW91dC5wcmludCgoaW50KSBsZjIuY2hhckF0KGkpICsgIiAiKTsKLQkJfQotCi0JfQotCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgZ2V0TWFpbkRpcmVjdG9yeUJhc2VkT25WTU5hbWVBbmRGaWxlRXh0ZW5zaW9uKCkgewotCQlTdHJpbmcgbWFpbkRpcmVjdG9yeSA9IGdldE1haW5EaXJlY3RvcnlCYXNlZE9uVk1OYW1lKCkgKyAiL3htbCI7Ci0JCXJldHVybiBtYWluRGlyZWN0b3J5OwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGdldEhlYWRlclN0YXJ0KCkgewotCQlyZXR1cm4gIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIiI7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0SGVhZGVyRW5kKCkgewotCQlyZXR1cm4gIlwiPz4iOwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvTGlzdENoYXJzZXRzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0xpc3RDaGFyc2V0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWYwZWRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvTGlzdENoYXJzZXRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmc7Ci0KLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi0vKioKLSAqIFNtYWxsIGNsYXNzIHRvIGxpc3QgY2hhcnNldCBkZXRlY3RlZCBmb3IgYSBwYXJ0aWN1bGFyIFZNLiBTaW1wbGUgcnVuIGFzIEphdmEKLSAqIEFwcGxpY2F0aW9ucyB0byBnZXQgb3V0cHV0IHRvIHN0YW5kYXJkIG91dC4KLSAqLwotcHVibGljIGNsYXNzIExpc3RDaGFyc2V0cyB7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdGFiID0gIlx0IjsKLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQotCQlMaXN0Q2hhcnNldHMgdGhpc0FwcCA9IG5ldyBMaXN0Q2hhcnNldHMoKTsKLQotCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkN1cnJlbnQgTG9jYWxlOiAiICsgTG9jYWxlLmdldERlZmF1bHQoKSk7Ci0KLQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0KLQkJU3RyaW5nIG5hbWUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEuZnVsbHZlcnNpb24iKTsKLQkJaWYgKG5hbWUgPT0gbnVsbCkgewotCQkJbmFtZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS52ZXJzaW9uIikgKyAiICgiICsgU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLnJ1bnRpbWUudmVyc2lvbiIpICsgIikiOwotCQl9Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiSlJFIHZlcnNpb246ICIgKyBuYW1lKTsKLQotCQlTeXN0ZW0uZ2V0UHJvcGVydGllcygpLmxpc3QoU3lzdGVtLm91dCk7Ci0KLQkJdGhpc0FwcC5saXN0T2ZMb2NhbGVzKCk7Ci0KLQkJU3lzdGVtLm91dC5wcmludGxuKCJmaWxlLmVuY29kaW5nLnBrZzogIiArIFN5c3RlbS5nZXRQcm9wZXJ0eSgiZmlsZS5lbmNvZGluZy5wa2ciKSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiZmlsZS5lbmNvZGluZzogIiArIFN5c3RlbS5nZXRQcm9wZXJ0eSgiZmlsZS5lbmNvZGluZyIpKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0KLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oYXJnc1tpXSk7Ci0JCX0KLQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCXRoaXNBcHAubGlzdE9mQ2hhcnNldHMoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgbGlzdE9mTG9jYWxlcygpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJBdmFpbGFibGUgTG9jYWxlcyIpOwotCQlMb2NhbGVbXSBsb2NhbGVzID0gTG9jYWxlLmdldEF2YWlsYWJsZUxvY2FsZXMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsb2NhbGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4obG9jYWxlc1tpXSk7Ci0KLQkJfQotCi0JfQotCi0JcHJpdmF0ZSB2b2lkIGxpc3RPZkNoYXJzZXRzKCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkF2YWlsYWJsZSBDaGFyc2V0cyIpOwotCQlpbnQgY291bnQgPSAwOwotCQlNYXAgbWFwID0gQ2hhcnNldC5hdmFpbGFibGVDaGFyc2V0cygpOwotCQlJdGVyYXRvciBpdCA9IG1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQljb3VudCsrOwotCQkJLy8gR2V0IGNoYXJzZXQgbmFtZQotCQkJU3RyaW5nIGNoYXJzZXROYW1lID0gKFN0cmluZykgaXQubmV4dCgpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKGNvdW50ICsgIi4gIiArICIgQ2hhcnNldG5hbWU6ICIgKyBjaGFyc2V0TmFtZSk7Ci0JCQkvLyBHZXQgY2hhcnNldAotCQkJQ2hhcnNldCBjaGFyc2V0ID0gQ2hhcnNldC5mb3JOYW1lKGNoYXJzZXROYW1lKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbih0YWIgKyAiZGlzcGxheU5hbWU6ICIgKyBjaGFyc2V0LmRpc3BsYXlOYW1lKExvY2FsZS5nZXREZWZhdWx0KCkpKTsKLQkJCVNldCBzZXQgPSBjaGFyc2V0LmFsaWFzZXMoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbih0YWIgKyAiYWxpYXNlczogIiArIHNldCk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9UZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9UZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTQ2NmIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmc7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5CeXRlUmVhZGVyOwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgVGVzdHNQbHVnaW4gcGx1Z2luOwotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBUZXN0c1BsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHdvcmtzcGFjZSBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElXb3Jrc3BhY2UgZ2V0V29ya3NwYWNlKCkgewotCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsIG9yICdrZXknIGlmIG5vdAotCSAqIGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJcmV0dXJuIGtleTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICovCi0JcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFVSTCBnZXRJbnN0YWxsTG9jYXRpb24oKSB7Ci0JCVVSTCBpbnN0YWxsTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmciKS5nZXRFbnRyeSgiLyIpOwotCQlVUkwgcmVzb2x2ZWRMb2NhdGlvbiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlyZXNvbHZlZExvY2F0aW9uID0gUGxhdGZvcm0ucmVzb2x2ZShpbnN0YWxsTG9jYXRpb24pOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpbXBvc3NpYmxlCi0JCQl0aHJvdyBuZXcgRXJyb3IoZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc29sdmVkTG9jYXRpb247Ci0JfQotCi0JcHVibGljIHN0YXRpYyBGaWxlIGdldFRlc3RGaWxlKFN0cmluZyBmaWxlcGF0aCkgewotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvLyBTdHJpbmcgc2NoZW1lID0gaW5zdGFsbFVSTC5nZXRQcm90b2NvbCgpOwotCQlTdHJpbmcgcGF0aCA9IGluc3RhbGxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgbG9jYXRpb24gPSBwYXRoICsgZmlsZXBhdGg7Ci0JCUZpbGUgcmVzdWx0ID0gbmV3IEZpbGUobG9jYXRpb24pOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgTGlzdCBnZXRBbGxUZXN0RmlsZXMoU3RyaW5nIHRvcERpck5hbWUpIHsKLQkJTGlzdCByZXN1bHQgPSBudWxsOwotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvLyBTdHJpbmcgc2NoZW1lID0gaW5zdGFsbFVSTC5nZXRQcm90b2NvbCgpOwotCQlTdHJpbmcgcGF0aCA9IGluc3RhbGxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgbG9jYXRpb24gPSBwYXRoICsgdG9wRGlyTmFtZTsKLQkJRmlsZSB0b3BEaXIgPSBuZXcgRmlsZShsb2NhdGlvbik7Ci0JCWlmICghdG9wRGlyLmlzRGlyZWN0b3J5KCkpIHsKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24odG9wRGlyTmFtZSArICIgaXMgbm90IGEgZGlyZWN0b3J5Iik7Ci0JCX0KLQkJcmVzdWx0ID0gZ2V0RmlsZXNJbkRpcih0b3BEaXIpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0b3BEaXIKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgTGlzdCBnZXRGaWxlc0luRGlyKEZpbGUgdG9wRGlyKSB7Ci0JCUxpc3QgZmlsZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUZpbGVbXSB0b3BGaWxlcyA9IHRvcERpci5saXN0RmlsZXMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0b3BGaWxlcy5sZW5ndGg7IGkrKykgewotCQkJRmlsZSBmaWxlID0gdG9wRmlsZXNbaV07Ci0JCQlpZiAoZmlsZS5pc0ZpbGUoKSkgewotCQkJCWZpbGVzLmFkZChmaWxlKTsKLQkJCX0KLQkJCWVsc2UgaWYgKGZpbGUuaXNEaXJlY3RvcnkoKSAmJiAhZmlsZS5nZXROYW1lKCkuZW5kc1dpdGgoIkNWUyIpKSB7Ci0JCQkJTGlzdCBpbm5lckZpbGVzID0gZ2V0RmlsZXNJbkRpcihmaWxlKTsKLQkJCQlmaWxlcy5hZGRBbGwoaW5uZXJGaWxlcyk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZpbGVzOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgUmVhZGVyIGdldFRlc3RSZWFkZXIoU3RyaW5nIGZpbGVwYXRoKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIGZpbGVwYXRoOwotCQlSZWFkZXIgcmVzdWx0ID0gbmV3IEZpbGVSZWFkZXIobG9jYXRpb24pOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgUmVhZGVyIGdldEJ5dGVSZWFkZXIoU3RyaW5nIGZpbGVwYXRoKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIGZpbGVwYXRoOwotCQlSZWFkZXIgcmVzdWx0ID0gbmV3IEJ5dGVSZWFkZXIobmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0obmV3IEZpbGVJbnB1dFN0cmVhbShsb2NhdGlvbikpKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3ByZWYvVGVzdFByZWZlcmVuY2VzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3ByZWYvVGVzdFByZWZlcmVuY2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmZGM1YmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9wcmVmL1Rlc3RQcmVmZXJlbmNlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5wcmVmOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSUVjbGlwc2VQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29udGVudEJhc2VkUHJlZmVyZW5jZUdhdGV3YXk7Ci1pbXBvcnQgb3JnLm9zZ2kuc2VydmljZS5wcmVmcy5CYWNraW5nU3RvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLm9zZ2kuc2VydmljZS5wcmVmcy5QcmVmZXJlbmNlczsKLQotCi1wdWJsaWMgY2xhc3MgVGVzdFByZWZlcmVuY2VzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogQHBhcmFtIHByZWZlcmVuY2VzCi0JICogQHRocm93cyBCYWNraW5nU3RvcmVFeGNlcHRpb24KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyB2b2lkIHByaW50Q2hpbGRyZW4oUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMpIHRocm93cyBCYWNraW5nU3RvcmVFeGNlcHRpb24gewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlx0IiArIHByZWZlcmVuY2VzLmFic29sdXRlUGF0aCgpKTsKLQkJU3RyaW5nIFtdIGtleXMgPSBwcmVmZXJlbmNlcy5rZXlzKCk7Ci0JCXByaW50S2V5cyhrZXlzKTsKLQkJU3RyaW5nW10gY2hpbGRyZW4gPSBwcmVmZXJlbmNlcy5jaGlsZHJlbk5hbWVzKCk7Ci0JCXByaW50Q2hpbGRyZW4oY2hpbGRyZW4pOyAKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgewotCQkJU3RyaW5nIGNoaWxkID0gY2hpbGRyZW5baV07Ci0JCQlQcmVmZXJlbmNlcyBzdWJQcmVmZXJlbmNlcyA9IHByZWZlcmVuY2VzLm5vZGUoY2hpbGQpOwotCQkJU3RyaW5nIFtdIHN1YmtleXMgPSBzdWJQcmVmZXJlbmNlcy5rZXlzKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihjaGlsZCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCXByaW50S2V5cyhzdWJrZXlzKTsKLQkJfQotCX0KLQlzdGF0aWMgcHJpdmF0ZSB2b2lkIHByaW50Q2hpbGRyZW4oU3RyaW5nW10gY2hpbGRyZW4pIHsKLQkJcHJpbnRTdHJpbmdBcnJheShjaGlsZHJlbiwgIlx0Iik7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGtleXMKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyB2b2lkIHByaW50S2V5cyhTdHJpbmdbXSBrZXlzKSB7Ci0JCXByaW50U3RyaW5nQXJyYXkoa2V5cywgIlx0XHQiKTsKLQkJCi0JfQotCi0Jc3RhdGljIHByaXZhdGUgdm9pZCBwcmludFN0cmluZ0FycmF5KFN0cmluZ1tdIGFycmF5LCBTdHJpbmcgdGFiQ2hhcnMpIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgewotCQkJU3RyaW5nIHN0cmluZyA9IGFycmF5W2ldOwotCQkJU3lzdGVtLm91dC5wcmludGxuKHRhYkNoYXJzICsgc3RyaW5nKTsKLQkJfQotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBERUJVRyA9IHRydWU7Ci0KLQlwcml2YXRlIHZvaWQgZGlzcGxheVByZWZlcmVuY2VUcmVlKCkgewotCQlJRWNsaXBzZVByZWZlcmVuY2VzIGVjbGlwc2VQcmVmZXJlbmNlcyA9IFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpLmdldFJvb3ROb2RlKCk7Ci0KLQotCQl0cnkgewotCQkJU3RyaW5nW10gY2hpbGRyZW4gPSBlY2xpcHNlUHJlZmVyZW5jZXMuY2hpbGRyZW5OYW1lcygpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKGVjbGlwc2VQcmVmZXJlbmNlcy5hYnNvbHV0ZVBhdGgoKSk7Ci0JCQlwcmludENoaWxkcmVuKGNoaWxkcmVuKTsKLQotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgewotCQkJCVN0cmluZyBzdHJpbmcgPSBjaGlsZHJlbltpXTsKLQkJCQlQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IGVjbGlwc2VQcmVmZXJlbmNlcy5ub2RlKHN0cmluZyk7Ci0JCQkJcHJpbnRDaGlsZHJlbihwcmVmZXJlbmNlcyk7Ci0KLQotCQkJfQotCi0JCX0KLQkJY2F0Y2ggKEJhY2tpbmdTdG9yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QWNjZXNzKCkgewotCQlpZiAoREVCVUcpIHsgCi0JCQlkaXNwbGF5UHJlZmVyZW5jZVRyZWUoKTsKLQkJfQotCQkvLyBhbHdheXMgb2sgaWYgbm8gZXhjZXB0aW9ucyB0aHJvd24KLQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29udGVudEJhc2VkUHJlZkhUTUwoKSB7Ci0JCUlDb250ZW50VHlwZSBjb250ZW50VHlwZSA9IFBsYXRmb3JtLmdldENvbnRlbnRUeXBlTWFuYWdlcigpLmZpbmRDb250ZW50VHlwZUZvcigidGVzdC5odG1sIik7Ci0JCVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gQ29udGVudEJhc2VkUHJlZmVyZW5jZUdhdGV3YXkuZ2V0UHJlZmVyZW5jZXMoY29udGVudFR5cGUpOwotCQlhc3NlcnROb3ROdWxsKHByZWZlcmVuY2VzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29udGVudEJhc2VkUHJlZlhNTCgpIHsKLQkJSUNvbnRlbnRUeXBlIGNvbnRlbnRUeXBlID0gUGxhdGZvcm0uZ2V0Q29udGVudFR5cGVNYW5hZ2VyKCkuZmluZENvbnRlbnRUeXBlRm9yKCJ0ZXN0LnhtbCIpOwotCQlQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IENvbnRlbnRCYXNlZFByZWZlcmVuY2VHYXRld2F5LmdldFByZWZlcmVuY2VzKGNvbnRlbnRUeXBlKTsKLQkJYXNzZXJ0Tm90TnVsbChwcmVmZXJlbmNlcyk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcHJvcGVydGllcy9UZXN0Q29tbW9uTmFtZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcHJvcGVydGllcy9UZXN0Q29tbW9uTmFtZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkxZmYwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3Byb3BlcnRpZXMvVGVzdENvbW1vbk5hbWVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucHJvcGVydGllczsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db21tb25DaGFyc2V0TmFtZXM7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q29tbW9uTmFtZXMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tbW9uTmFtZXMoKSB7Ci0JCVN0cmluZ1tdIG5hbWVzID0gQ29tbW9uQ2hhcnNldE5hbWVzLmdldENvbW1vbkNoYXJzZXROYW1lcygpOwotCQlhc3NlcnRUcnVlKCJjb21tb24gY2hhcnNldCBuYW1lcyBjb3VsZCBub3QgYmUgbG9hZGVkIiwgbmFtZXMgIT0gbnVsbCAmJiBuYW1lcy5sZW5ndGggPiAwKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJU3RyaW5nIG5hbWUgPSBuYW1lc1tpXTsKLQkJCQlTdHJpbmcgZGlzcGxheU5hbWUgPSBDb21tb25DaGFyc2V0TmFtZXMuZ2V0RGlzcGxheVN0cmluZyhuYW1lKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIG5hbWUgKyAiICAgICIgKyBkaXNwbGF5TmFtZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgZG9UZXN0RGVmYXVsdElhbmFOYW1lcyhTdHJpbmcgc3RyaW5nVG9DaGVjaywgU3RyaW5nIGRlZmF1bHROYW1lLCBTdHJpbmcgZXhwZWN0ZWQpIHsKLQkJU3RyaW5nIGFjdHVhbCA9IENvbW1vbkNoYXJzZXROYW1lcy5nZXRQcmVmZXJyZWREZWZhdWx0SWFuYU5hbWUoc3RyaW5nVG9DaGVjaywgZGVmYXVsdE5hbWUpOwotCQlhc3NlcnRFcXVhbHMoImRlZmF1bHQgSUFOQSBuYW1lIHRlc3QgZmFpbGVkIGZvciAiICsgc3RyaW5nVG9DaGVjaywgZXhwZWN0ZWQsIGFjdHVhbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFTQ0lJKCkgewotCQlkb1Rlc3REZWZhdWx0SWFuYU5hbWVzKCJBU0NJSSIsICJVVEYtOCIsICJVUy1BU0NJSSIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q3AxMjUyKCkgewotCQlkb1Rlc3REZWZhdWx0SWFuYU5hbWVzKCJDcDEyNTIiLCAiVVRGLTgiLCAiSVNPLTg4NTktMSIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0TVM5NTAoKSB7Ci0JCWRvVGVzdERlZmF1bHRJYW5hTmFtZXMoIk1TOTUwIiwgIlVURi04IiwgIkJJRzUiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENwMTI1NigpIHsKLQkJZG9UZXN0RGVmYXVsdElhbmFOYW1lcygiQ3AxMjU2IiwgIlVURi04IiwgIndpbmRvd3MtMTI1NiIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0TVM5NDkoKSB7Ci0JCWRvVGVzdERlZmF1bHRJYW5hTmFtZXMoIk1TOTQ5IiwgIlVURi04IiwgIkVVQy1LUiIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RVVDX0pQKCkgewotCQlkb1Rlc3REZWZhdWx0SWFuYU5hbWVzKCJFVUMtSlAiLCAiVVRGLTgiLCAiRVVDLUpQIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RUb3RhbGx5RmFrZSgpIHsKLQkJZG9UZXN0RGVmYXVsdElhbmFOYW1lcygidG90YWxseUZha2UiLCAiVVRGLTgiLCAiVVRGLTgiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFN5c3RlbUVuY29kaW5nKCkgewotCQlTdHJpbmcgc3lzdGVtRW5jID0gU3lzdGVtLmdldFByb3BlcnR5KCJmaWxlLmVuY29kaW5nIik7Ci0JCWlmIChzeXN0ZW1FbmMgIT0gbnVsbCkgewotCQkJU3RyaW5nIGFjdHVhbCA9IENvbW1vbkNoYXJzZXROYW1lcy5nZXRQcmVmZXJyZWREZWZhdWx0SWFuYU5hbWUoc3lzdGVtRW5jLCAiVVRGLTgiKTsKLQkJCWFzc2VydE5vdE51bGwoImRlZmF1bHQgSUFOQSBuYW1lIHRlc3QgZmFpbGVkIGZvciBzeXN0ZW0gZW5jb2RpbmcgIiArIHN5c3RlbUVuYywgYWN0dWFsKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3Byb3BlcnRpZXMvVGVzdERpc3BsYXlOYW1lcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9wcm9wZXJ0aWVzL1Rlc3REaXNwbGF5TmFtZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjExNDVjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3Byb3BlcnRpZXMvVGVzdERpc3BsYXlOYW1lcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnByb3BlcnRpZXM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29tbW9uQ2hhcnNldE5hbWVzOwotCi0KLXB1YmxpYyBjbGFzcyBUZXN0RGlzcGxheU5hbWVzIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotCXB1YmxpYyB2b2lkIHRlc3RDb21tb25OYW1lKCkgewotCQlTdHJpbmcgZGlzcGxheU5hbWUgPSBDb21tb25DaGFyc2V0TmFtZXMuZ2V0RGlzcGxheVN0cmluZygiSVNPLTg4NTktMiIpOwotCQlhc3NlcnROb3ROdWxsKCJkaXNwbGF5IG5hbWUgZm9yIGNoYXJzZXQgY291bGQgbm90IGJlIHJldHJpZXZlZCIsIGRpc3BsYXlOYW1lKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZGlzcGxheU5hbWUpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcHJvcGVydGllcy9UZXN0T3ZlcnJpZGVzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3Byb3BlcnRpZXMvVGVzdE92ZXJyaWRlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTJmNmQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcHJvcGVydGllcy9UZXN0T3ZlcnJpZGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucHJvcGVydGllczsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db2RlZElPOwotCi1wdWJsaWMgY2xhc3MgVGVzdE92ZXJyaWRlcyBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotCXB1YmxpYyBTdHJpbmcgZG9UZXN0T3ZlcnJpZGUoU3RyaW5nIHN0cmluZ1RvQ2hlY2spIHsKLQotCQlTdHJpbmcgY2hhcnNldCA9IENvZGVkSU8uZ2V0QXBwcm9wcmlhdGVKYXZhQ2hhcnNldChzdHJpbmdUb0NoZWNrKTsKLQkJYXNzZXJ0Tm90TnVsbCgib3ZlcnJpZGUgdGVzdCBmYWlsZWQgZm9yICIgKyBzdHJpbmdUb0NoZWNrLCBjaGFyc2V0KTsKLQkJcmV0dXJuIGNoYXJzZXQ7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdElTTzg4NTk4SSgpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IGRvVGVzdE92ZXJyaWRlKCJJU08tODg1OS04LUkiKTsKLQkJYXNzZXJ0RXF1YWxzKCJtYXBwaW5nIG92ZXJyaWRlIG5vdCBjb3JyZWN0IGZvciBJU08tODg1OS04LUkiLCAiSVNPLTg4NTktOCIsIHJlc3VsdCk7Ci0JCWlmIChERUJVRykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKHJlc3VsdCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WFNKSVMoKSB7Ci0JCVN0cmluZyByZXN1bHQgPSBkb1Rlc3RPdmVycmlkZSgiWC1TSklTIik7Ci0JCWFzc2VydEVxdWFscygibWFwcGluZyBvdmVycmlkZSBub3QgY29ycmVjdCBmb3IgWC1TSklTIiwgIlNoaWZ0X0pJUyIsIHJlc3VsdCk7Ci0JCWlmIChERUJVRykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKHJlc3VsdCk7Ci0JCX0KLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvZGVkUmVhZGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvZGVkUmVhZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NmFmYjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb2RlZFJlYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnREZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29kZWRSZWFkZXJDcmVhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5JQ29udGVudERlc2NyaXB0aW9uRXh0ZW5kZWQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLk5vbkNvbnRlbnRCYXNlZEVuY29kaW5nUnVsZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5UZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLQotCi1wdWJsaWMgY2xhc3MgVGVzdENvZGVkUmVhZGVyIGV4dGVuZHMgVGVzdENhc2UgewotCS8vIHByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAiaHRtbC8iOwotCS8vIHByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVSb290ID0KLQkvLyAiL2J1aWxkcy9Xb3Jrc3BhY2VzL0hlYWRXb3Jrc3BhY2Uvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8iOwotCS8vIHByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGZpbGVSb290ICsgZmlsZURpcjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19URVNUX0RFVEFJTCA9IGZhbHNlOwotCS8vIG5lZWRzIHRvIGJlIHN0YXRpYywgc2luY2UgSlVuaXQgY3JlYXRlcyBkaWZmZXJlbmNlIGluc3RhbmNlcyBmb3IgZWFjaAotCS8vIHRlc3QKLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGZUZXN0UHJvamVjdEluaXRpYWxpemVkOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BST0pFQ1RfTkFNRSA9ICJvcmcuZWNsaXBzZS5lbmNvZGluZy5yZXNvdXJjZS5uZXd0ZXN0cyI7Ci0Jc3RhdGljIElQcm9qZWN0IGZUZXN0UHJvamVjdDsKLQlwcm90ZWN0ZWQgc3RhdGljIGludCBuU2V0dXBzID0gMDsKLQotCXByaXZhdGUgU3RyaW5nIG1hc3NhZ2VDaGFyc2V0KFN0cmluZyBmb3VuZENoYXJzZXQpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IGZvdW5kQ2hhcnNldDsKLQkJaWYgKCJVVEYtMTZMRSIuZXF1YWxzKGZvdW5kQ2hhcnNldCkpIHsKLQkJCXJlc3VsdCA9ICJVVEYtMTYiOwotCQl9IGVsc2UgaWYgKCJYLVVuaWNvZGVMaXR0bGUiLmVxdWFscyhmb3VuZENoYXJzZXQpKSB7Ci0JCQlyZXN1bHQgPSAiVVRGLTE2IjsKLQkJfSBlbHNlIGlmICgiWC1Vbmljb2RlQmlnIi5lcXVhbHMoZm91bmRDaGFyc2V0KSkgewotCQkJcmVzdWx0ID0gIlVURi0xNkJFIjsKLQkJfQotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogCi0JICovCi0JcHVibGljIFRlc3RDb2RlZFJlYWRlcigpIHsKLQkJc3VwZXIoKTsKLQkJLy8gU3lzdGVtLm91dC5wcmludGxuKGN1cnJlbnRQbGF0Zm9ybUNoYXJzZXQpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkJLy8gdHJ5IHsKLQkJLy8gbmV3IFRlc3RDb2RlZFJlYWRlcigpLmRvQWxsRmlsZXMoKTsKLQkJLy8gfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCS8vIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCS8vIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJLy8gZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJLy8gfQotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgY3JlYXRlUHJvamVjdChJUHJvamVjdCBwcm9qZWN0LCBJUGF0aCBsb2NhdGlvblBhdGgsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlpZiAobW9uaXRvciA9PSBudWxsKSB7Ci0JCQltb25pdG9yID0gbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKLQkJfQotCQltb25pdG9yLmJlZ2luVGFzaygiY3JlYXRpbmcgdGVzdCBwcm9qZWN0IiwgMTApOwotCQkvLyBjcmVhdGUgdGhlIHByb2plY3QKLQkJdHJ5IHsKLQkJCWlmICghcHJvamVjdC5leGlzdHMoKSkgewotCQkJCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzYyA9IHByb2plY3QuZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2plY3QuZ2V0TmFtZSgpKTsKLQkJCQlpZiAoUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS5lcXVhbHMobG9jYXRpb25QYXRoKSkgewotCQkJCQlsb2NhdGlvblBhdGggPSBudWxsOwotCQkJCX0KLQkJCQlkZXNjLnNldExvY2F0aW9uKGxvY2F0aW9uUGF0aCk7Ci0JCQkJcHJvamVjdC5jcmVhdGUoZGVzYywgbW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCQlpZiAoIXByb2plY3QuaXNPcGVuKCkpIHsKLQkJCQlwcm9qZWN0Lm9wZW4obW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCX0gZmluYWxseSB7Ci0JCQlpZiAobW9uaXRvciAhPSBudWxsKSB7Ci0JCQkJbW9uaXRvci5kb25lKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGdldEFuZENyZWF0ZVByb2plY3QoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIFRlc3RzUGx1Z2luIHRlc3RzUGx1Z2luID0gKFRlc3RzUGx1Z2luKQotCQkvLyBQbGF0Zm9ybS5nZXRQbHVnaW4oIm9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmciKTsKLQkJSVdvcmtzcGFjZSB3b3Jrc3BhY2UgPSBUZXN0c1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQkJSVdvcmtzcGFjZVJvb3Qgcm9vdCA9IHdvcmtzcGFjZS5nZXRSb290KCk7Ci0JCWZUZXN0UHJvamVjdCA9IHJvb3QuZ2V0UHJvamVjdChURVNUX1BST0pFQ1RfTkFNRSk7Ci0JCS8vIHRoaXMgZm9ybSBjcmVhdGVzIHByb2plY3QgYXMgImxpbmtlZCIgYmFjayB0byAnZmlsZVJvb3QnCi0JCS8vIGNyZWF0ZVByb2plY3QodGVzdFByb2plY3QsIG5ldyBQYXRoKGZpbGVSb290KSwgbnVsbCk7Ci0JCWNyZWF0ZVByb2plY3QoZlRlc3RQcm9qZWN0LCBudWxsLCBudWxsKTsKLQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQlhc3NlcnRUcnVlKGZUZXN0UHJvamVjdC5leGlzdHMoKSk7Ci0JCS8vIElDb250YWluZXIgZG90ZXN0RmlsZXMgPSB0ZXN0UHJvamVjdC5nZXRGb2xkZXIoImRvdGVzdEZpbGVzIik7Ci0JCS8vIGFzc2VydFRydWUoZG90ZXN0RmlsZXMuZXhpc3RzKCkpOwotCQkvLyBJUmVzb3VyY2VbXSBhbGxGb2xkZXJzID0gZG90ZXN0RmlsZXMubWVtYmVycygpOwotCQkvLyBhc3NlcnROb3ROdWxsKGFsbEZvbGRlcnMpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nQnVmZmVyIHJlYWRJbnB1dFN0cmVhbShSZWFkZXIgcmVhZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpbnQgbnVtUmVhZCA9IDA7Ci0JCWNoYXIgdEJ1ZmZbXSA9IG5ldyBjaGFyWzQwMDBdOwotCQl3aGlsZSAoKG51bVJlYWQgPSByZWFkZXIucmVhZCh0QnVmZiwgMCwgdEJ1ZmYubGVuZ3RoKSkgIT0gLTEpIHsKLQkJCWJ1ZmZlci5hcHBlbmQodEJ1ZmYsIDAsIG51bVJlYWQpOwotCQl9Ci0JCXJldHVybiBidWZmZXI7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJblNldHVwcysrOwotCQlpZiAoIWZUZXN0UHJvamVjdEluaXRpYWxpemVkKSB7Ci0JCQlnZXRBbmRDcmVhdGVQcm9qZWN0KCk7Ci0JCQkvLyB1bnppcCBmaWxlcyB0byB0aGUgcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Qcm9qZWN0U3RyaW5nID0gZlRlc3RQcm9qZWN0LmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpOwotCQkJU3RyaW5nIGRlc3RpbmF0aW9uRm9sZGVyID0gZGVzdGluYXRpb25Qcm9qZWN0U3RyaW5nICsgIi8iOwotCQkJLy8gdGhpcyB6aXAgZmlsZSBpcyBzaXR0aW5nIGluIHRoZSAicm9vdCIgb2YgdGVzdCBwbHVnaW4KLQkJCUZpbGUgemlwRmlsZSA9IFRlc3RzUGx1Z2luLmdldFRlc3RGaWxlKCJ0ZXN0ZmlsZXMuemlwIik7Ci0JCQlQcm9qZWN0VW56aXBVdGlsaXR5IHByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJCXByb2pVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIGRlc3RpbmF0aW9uRm9sZGVyKTsKLQkJCXByb2pVdGlsLmluaXRKYXZhUHJvamVjdChURVNUX1BST0pFQ1RfTkFNRSk7Ci0JCQlmVGVzdFByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQlmVGVzdFByb2plY3RJbml0aWFsaXplZCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQluU2V0dXBzLS07Ci0JCWlmIChuU2V0dXBzID09IDApIHsKLQkJCWlmICghREVCVUcpIHsKLQkJCQkvLyBEaXNwbGF5IGRpc3BsYXkgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKTsKLQkJCQkvLyBkaXNwbGF5LmFzeW5jRXhlYyhuZXcgUnVubmFibGUoKSB7Ci0JCQkJLy8gcHVibGljIHZvaWQgcnVuKCkgewotCQkJCS8vIFByb2plY3RVbnppcFV0aWxpdHkgcHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQkJCS8vIElQcm9qZWN0IHByb2ogPSBmVGVzdFByb2plY3Q7Ci0JCQkJLy8gZlRlc3RQcm9qZWN0ID0gbnVsbDsKLQkJCQkvLyB0cnkgewotCQkJCS8vIHByb2pVdGlsLmRlbGV0ZVByb2plY3QocHJvaik7Ci0JCQkJLy8gfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkvLyBlLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCS8vIH0KLQkJCQkvLyB9Ci0JCQkJLy8gfSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkb1Rlc3QoU3RyaW5nIGV4cGVjdGVkSmF2YUNoYXJzZXQsIFN0cmluZyBleHBlY3RlZERldGVjdGVkQ2hhcnNldCwgU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZEV4Y2VwdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJUmVhZGVyIHJlYWRlciA9IG51bGw7Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbChmaWxlKTsKLQkJZXhwZWN0ZWRKYXZhQ2hhcnNldCA9IG1hc3NhZ2VDaGFyc2V0KGV4cGVjdGVkSmF2YUNoYXJzZXQpOwotCQlleHBlY3RlZERldGVjdGVkQ2hhcnNldCA9IG1hc3NhZ2VDaGFyc2V0KGV4cGVjdGVkRGV0ZWN0ZWRDaGFyc2V0KTsKLQotCQkvLyBub3RlOiBldmVudHVhbGx5LCBJIHNob3VsZCBjaGFuZ2UgY2FsbGluZyBtZXRob2RzIHNvIGlmIGRldGVjdGVkCi0JCS8vIGNoYXJzZXQgaXMgZXhwZWN0ZWQgdG8gYmUgc2FtZQotCQkvLyBhcyB0aGUgJ3VzZWQnIGphdmEgY2hhcnNldCwgdGhlbiBzaW1wbHkgcGFzcyBpbiBudWxsLCBidXQgZm9yIG5vdywKLQkJLy8gd2UnbGwgImZvcmNlIiB0aGF0IGhlcmUgaW4gdGhpcwotCQkvLyBtZXRob2QuCi0JCWlmIChleHBlY3RlZEphdmFDaGFyc2V0LmVxdWFscyhleHBlY3RlZERldGVjdGVkQ2hhcnNldCkpIHsKLQkJCWV4cGVjdGVkRGV0ZWN0ZWRDaGFyc2V0ID0gbnVsbDsKLQkJfQotCi0JCXRyeSB7Ci0JCQlyZWFkZXIgPSBkb0NvcmVUZXN0KGV4cGVjdGVkSmF2YUNoYXJzZXQsIGV4cGVjdGVkRGV0ZWN0ZWRDaGFyc2V0LCBmaWxlKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWlmIChleHBlY3RlZEV4Y2VwdGlvbiAhPSBudWxsKSB7Ci0JCQkJYm9vbGVhbiByZXN1bHQgPSBleHBlY3RlZEV4Y2VwdGlvbi5pc0luc3RhbmNlKGUpOwotCQkJCWFzc2VydFRydWUoIlVuZXhwZWN0ZWQgRXhjZXB0aW9uOiAiICsgZ2V0R29vZEZ1bGxNc2coZSksIHJlc3VsdCk7Ci0JCQl9IGVsc2UgewotCQkJCS8vIHdpbGwgYWx3YXkgYXNzZXJ0IGlmIGdldHMgdG8gaGVyZQotCQkJCVN0cmluZyBtc2cgPSBnZXRHb29kRnVsbE1zZyhlKTsKLQkJCQlhc3NlcnROdWxsKCJVbmV4cGVjdGVkIEV4Y2VwdGlvbjogIiArIG1zZywgZSk7Ci0JCQl9Ci0JCX0gZmluYWxseSB7Ci0JCQlpZiAocmVhZGVyICE9IG51bGwpIHsKLQkJCQlyZWFkZXIuY2xvc2UoKTsKLQkJCX0KLQotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIFJlYWRlciBkb0NvcmVUZXN0KFN0cmluZyBleHBlY3RlZEphdmFDaGFyc2V0LCBTdHJpbmcgZXhwZWN0ZWREZXRlY3RlZENoYXJzZXQsIElGaWxlIGZpbGUpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVJlYWRlciByZWFkZXI7Ci0JCS8vIGNyZWF0ZSB0aGVzZSBmaXJzdCwgdG8gdGVzdCBleGNlcHRpb24gYmVpbmcgdGhyb3duIGNvcnJlY3RseQotCQlDb2RlZFJlYWRlckNyZWF0b3IgY29kZWRSZWFkZXJDcmVhdG9yID0gbmV3IENvZGVkUmVhZGVyQ3JlYXRvcigpOwotCQljb2RlZFJlYWRlckNyZWF0b3Iuc2V0KGZpbGUpOwotCQlyZWFkZXIgPSBjb2RlZFJlYWRlckNyZWF0b3IuZ2V0Q29kZWRSZWFkZXIoKTsKLQotCQlTdHJpbmcgamF2YUNoYXJzZXROYW1lID0gZmlsZS5nZXRDaGFyc2V0KCk7Ci0JCUlDb250ZW50RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBmaWxlLmdldENvbnRlbnREZXNjcmlwdGlvbigpOwotCQlqYXZhQ2hhcnNldE5hbWUgPSBtYXNzYWdlQ2hhcnNldChqYXZhQ2hhcnNldE5hbWUpOwotCQkvLyBjb2RlZFJlYWRlckNyZWF0b3IuZ2V0RW5jb2RpbmdNZW1lbnRvKCkuZ2V0SmF2YUNoYXJzZXROYW1lKCk7Ci0JCWlmIChleHBlY3RlZEphdmFDaGFyc2V0LmVxdWFscygiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IikpIHsKLQkJCVN0cmluZyBwbGF0Zm9ybURlZmF1bHQgPSBOb25Db250ZW50QmFzZWRFbmNvZGluZ1J1bGVzLnVzZURlZmF1bHROYW1lUnVsZXMobnVsbCk7Ci0JCQlhc3NlcnRUcnVlKGphdmFDaGFyc2V0TmFtZS5lcXVhbHMocGxhdGZvcm1EZWZhdWx0KSk7Ci0JCX0gZWxzZSB7Ci0JCQlib29sZWFuIGFzRXhwZWN0ZWQgPSBqYXZhQ2hhcnNldE5hbWUuZXF1YWxzKGV4cGVjdGVkSmF2YUNoYXJzZXQpOwotCQkJYXNzZXJ0VHJ1ZShqYXZhQ2hhcnNldE5hbWUgKyAiIGRpZCBub3QgZXF1YWwgdGhlIGV4cGVjdGVkICIgKyBleHBlY3RlZEphdmFDaGFyc2V0ICsgIiAodGhpcyBpcyBhIFZNIGRlcGVuZGVudCB0ZXN0KSIsIGFzRXhwZWN0ZWQpOwotCQl9Ci0JCVN0cmluZyBqYXZhQ2hhcnNldE5hbWVQcm9wZXJ0eSA9IChTdHJpbmcpIGRlc2NyaXB0aW9uLmdldFByb3BlcnR5KElDb250ZW50RGVzY3JpcHRpb24uQ0hBUlNFVCk7Ci0JCVN0cmluZyBkZXRlY3RlZENoYXJzZXROYW1lUHJvcGVydHkgPSBnZXREZXRlY3RlZENoYXJzZXROYW1lKGRlc2NyaXB0aW9uKTsKLQkJZGV0ZWN0ZWRDaGFyc2V0TmFtZVByb3BlcnR5ID0gbWFzc2FnZUNoYXJzZXQoZGV0ZWN0ZWRDaGFyc2V0TmFtZVByb3BlcnR5KTsKLQkJLy8gaWYgKGRldGVjdGVkQ2hhcnNldE5hbWUgPT0gbnVsbCkgewotCQkvLyBkZXRlY3RlZENoYXJzZXROYW1lID0gamF2YUNoYXJzZXROYW1lUHJvcGVydHk7Ci0JCS8vIH0KLQkJaWYgKCFleHBlY3RlZEphdmFDaGFyc2V0LmVxdWFscygiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IikpIHsKLQkJCWJvb2xlYW4gZXhwZWNlZFJlc3VsdCA9IGV4cGVjdGVkSmF2YUNoYXJzZXQuZXF1YWxzKGphdmFDaGFyc2V0TmFtZVByb3BlcnR5KTsKLQkJCWFzc2VydFRydWUoImphdmEgYmFzZWQgY2hhcnNldCBuYW1lIHdhcyBub3QgYXMgZXhwZWN0ZWQiLCBleHBlY2VkUmVzdWx0KTsKLQkJfSBlbHNlIHsKLQkJCVN0cmluZyBleHBlY3RlZERlZmF1bHQgPSBOb25Db250ZW50QmFzZWRFbmNvZGluZ1J1bGVzLnVzZURlZmF1bHROYW1lUnVsZXMobnVsbCk7Ci0JCQlib29sZWFuIEV4cGVjdGVkUmVzdWx0ID0gZXhwZWN0ZWREZWZhdWx0LmVxdWFscyhqYXZhQ2hhcnNldE5hbWVQcm9wZXJ0eSk7Ci0JCQlhc3NlcnRUcnVlKCJqYXZhIGJhc2VkIGNoYXJzZXQgbmFtZSBub3QgYXMgZXhwZWN0ZWQgd2hlbiBwbGF0Zm9ybSBkZWZhdWx0IGV4cGVjdGVkIiwgRXhwZWN0ZWRSZXN1bHQpOwotCQl9Ci0KLQkJaWYgKGV4cGVjdGVkRGV0ZWN0ZWRDaGFyc2V0ICE9IG51bGwpIHsKLQkJCWJvb2xlYW4gZXhwZWN0ZWRSZXN1bHQgPSBleHBlY3RlZERldGVjdGVkQ2hhcnNldC5lcXVhbHMoZGV0ZWN0ZWRDaGFyc2V0TmFtZVByb3BlcnR5KTsKLQkJCWFzc2VydFRydWUoImRldGVjdGVkIGNoYXJzZXQgbmFtZSB3YXMgbm90IGFzIGV4cGVjdGVkIiwgZXhwZWN0ZWRSZXN1bHQpOwotCQl9Ci0JCS8vIHRlc3QgaWYgY2FuIHJlYWQvd3JpdGUgZmlsZQotCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gcmVhZElucHV0U3RyZWFtKHJlYWRlcik7Ci0JCWlmIChERUJVR19URVNUX0RFVEFJTCkgewotCQkJU3lzdGVtLm91dC5wcmludChidWZmZXIpOwotCQl9Ci0JCXJldHVybiByZWFkZXI7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMganVzdCB0byBoZWxwIGhhbmRsZSB0cmFuc2l0aW9uIGZyb20gdXNpbmcKLQkgKiBFbmNvZGluZ01lbXRlbnRvIHRvIG5vdCB1c2luZyBlbmNvZGluZ01lbWVudG8uCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0RGV0ZWN0ZWRDaGFyc2V0TmFtZShJQ29udGVudERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSB7Ci0JCVN0cmluZyByZXN1bHQgPSBudWxsOwotCQlyZXN1bHQgPSAoU3RyaW5nKSBkZXNjcmlwdGlvbi5nZXRQcm9wZXJ0eShJQ29udGVudERlc2NyaXB0aW9uRXh0ZW5kZWQuREVURUNURURfQ0hBUlNFVCk7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0R29vZEZ1bGxNc2coRXhjZXB0aW9uIGUpIHsKLQkJU3RyaW5nIG1zZyA9IGUuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiOiAiICsgZS5nZXRNZXNzYWdlKCk7Ci0JCXJldHVybiBtc2c7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiLCBudWxsLCAidGVzdGZpbGVzL2Nzcy9lbXB0eUZpbGUuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJFVUMtSlAiLCAiRVVDLUpQIiwgInRlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9ldWNqcC5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy0yMDIyLUpQIiwgIklTTy0yMDIyLUpQIiwgInRlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9qaXMuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAiU0hJRlRfSklTIiwgInRlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9zamlzLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IiwgbnVsbCwgInRlc3RmaWxlcy9jc3Mvbm9FbmNvZGluZy5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTYiLCAiSVNPLTg4NTktNiIsICJ0ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktNiIsICJJU08tODg1OS02IiwgInRlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS02IiwgIklTTy04ODU5LTYiLCAidGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZDIuY3NzIiwgbnVsbCk7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiLCBudWxsLCAidGVzdGZpbGVzL2h0bWwvRW1wdHlGaWxlLmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMvaHRtbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0Lmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiLCBudWxsLCAidGVzdGZpbGVzL2h0bWwvTGFyZ2VOb0VuY29kaW5nLmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgImlzby04ODU5LTEiLCAidGVzdGZpbGVzL2h0bWwvTGFyZ2VOb25EZWZhdWx0Lmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS02IiwgIklTTy04ODU5LTYiLCAidGVzdGZpbGVzL2h0bWwvTXVsdGlOb25EZWZhdWx0Lmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiLCBudWxsLCAidGVzdGZpbGVzL2h0bWwvTm9FbmNvZGluZy5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL2h0bWwvbm9xdW90ZXMuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy9odG1sL05vcm1hbE5vbkRlZmF1bHQuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL0VtcHR5RmlsZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS04IiwgbnVsbCwgInRlc3RmaWxlcy9qc3AvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJudWxsIiwgIm51bGwiLCAidGVzdGZpbGVzL2pzcC9pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AiLCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJ3aW5kb3dzLTEyNTIiLCAiQ3AxMjUyIiwgInRlc3RmaWxlcy9qc3AvamF2YUVuY29kaW5nVmFsdWUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZy5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC9NYWxmb3JtZWROb0VuY29kaW5nWFNMLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvTm9FbmNvZGluZ2luWE1MRGVjbC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTczKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0yIiwgIklTTy04ODU5LTIiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlTm9FbmNvZGluZy5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0zIiwgIklTTy04ODU5LTMiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMiIsICJJU08tODg1OS0yIiwgInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXguanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktOCIsIG51bGwsICJ0ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktOCIsICJJU08tODg1OS04IiwgInRlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTciLCAiSVNPLTg4NTktNyIsICJ0ZXN0ZmlsZXMvanNwL05vcm1hbFBhZ2VDYXNlTm9uRGVmYXVsdC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAiU0hJRlRfSklTIiwgInRlc3RmaWxlcy9qc3AvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMyIsICJJU08tODg1OS0zIiwgInRlc3RmaWxlcy9qc3AvdGVzdEJyb2tlbkxpbmUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgibnVsbCIsICJudWxsIiwgInRlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AiLCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJudWxsIiwgIm51bGwiLCAidGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nV2l0aEp1bmsuanNwIiwgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmV4Y2VwdGlvbnMuVW5zdXBwb3J0ZWRDaGFyc2V0RXhjZXB0aW9uV2l0aERldGFpbC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvdGVzdEV4dHJhSnVuay5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYVZhbGlkU3R1ZmYuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsIG51bGwsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkMi5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMiIsICJJU08tODg1OS0yIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUF0Rmlyc3QuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUluTGFyZ2VGaWxlLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vcm1hbENhc2UuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTE2QkUiLCAiVVRGLTE2QkUiLCAidGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTE2TEUiLCAiVVRGLTE2TEUiLCAidGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtMTZCRSIsICJVVEYtMTZCRSIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtMTZCRSIsICJVVEYtMTZCRSIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL2pzcC9VVEY4V2l0aDNCeXRlQk9NLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTgiLCAiSVNPLTg4NTktOCIsICJ0ZXN0ZmlsZXMvanNwL1dlbGxGb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJTSElGVF9KSVMiLCAidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAiU0hJRlRfSklTIiwgInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybUIuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJTSElGVF9KSVMiLCAidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjI0MjkzL3Rlc3RzaGlmdGppc1htbFN5bnRheC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgIlNoaWZ0X0pJUyIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjk2NjcvYXVkaS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC9FbXB0eUZpbGUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIkVVQy1KUCIsICJFVUMtSlAiLCAidGVzdGZpbGVzL3htbC9ldWNqcC54bWwiLCBudWxsKTsKLQl9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JLy8gZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLAotCS8vICJ0ZXN0ZmlsZXMveG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQueG1sIiwgbnVsbCk7Ci0JLy8gfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdEZpbGUxMDYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCS8vIGRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhtbCIsCi0JLy8gQ2hhcmFjdGVyQ29kaW5nRXhjZXB0aW9uLmNsYXNzKTsKLQkvLyB9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JLy8gZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL01hbGZvcm1lZE5vRW5jb2RpbmcueHNsIiwKLQkvLyBDaGFyYWN0ZXJDb2RpbmdFeGNlcHRpb24uY2xhc3MpOwotCS8vIH0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL05vRW5jb2RpbmcueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMveG1sL05vcm1hbE5vbkRlZmF1bHQueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJTaGlmdF9KSVMiLCAidGVzdGZpbGVzL3htbC9zaGlmdGppcy54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy94bWwvdGVzdEV4dHJhSnVuay54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0RXh0cmFWYWxpZFN0dWZmLnhtbCIsIG51bGwpOwotCX0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RGaWxlMTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkvLyBkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZC54bWwiLCBudWxsKTsKLQkvLyB9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMi54bWwiLCBudWxsKTsKLQl9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JLy8gZG9UZXN0KCJudWxsIiwgIm51bGwiLCAidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMy54bWwiLAotCS8vIFVuc3VwcG9ydGVkQ2hhcnNldEV4Y2VwdGlvbldpdGhEZXRhaWwuY2xhc3MpOwotCS8vIH0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQ0LnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL3htbC90ZXN0TXVsdGlMaW5lLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb0VuY29kaW5nVmFsdWUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdE5vcm1hbENhc2UueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsQXRGaXJzdC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsSW5MYXJnZUZpbGUueG1sIiwgbnVsbCk7Ci0JfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdEZpbGUxMjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCS8vIGRvVGVzdCgiVVRGLTE2QkUiLCAiVVRGLTE2QkUiLCAidGVzdGZpbGVzL3htbC90ZXN0VVRGMTYueG1sIiwKLQkvLyBDaGFyYWN0ZXJDb2RpbmdFeGNlcHRpb24uY2xhc3MpOwotCS8vIH0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RGaWxlMTI0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkvLyBkb1Rlc3QoIlVURi0xNkxFIiwgIlVURi0xNkxFIiwKLQkvLyAidGVzdGZpbGVzL3htbC9VVEYxNkxFQXRTdGFydE9mTGFyZ2VGaWxlLnhtbCIsIG51bGwpOwotCS8vIH0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RGaWxlMTI1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkvLyBkb1Rlc3QoIlVURi0xNkxFIiwgIlVURi0xNkxFIiwKLQkvLyAidGVzdGZpbGVzL3htbC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi54bWwiLCBudWxsKTsKLQkvLyB9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JLy8gZG9UZXN0KCJVVEYtMTZCRSIsICJVVEYtMTZCRSIsCi0JLy8gInRlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLnhtbCIsCi0JLy8gQ2hhcmFjdGVyQ29kaW5nRXhjZXB0aW9uLmNsYXNzKTsKLQkvLyB9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JLy8gZG9UZXN0KCJVVEYtMTZCRSIsICJVVEYtMTZCRSIsCi0JLy8gInRlc3RmaWxlcy94bWwvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy54bWwiLCBudWxsKTsKLQkvLyB9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC9VVEY4V2l0aDNCeXRlQk9NLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REb2N1bWVudFN0cmVhbUNhc2VIVE1MKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAiU0hJRlRfSklTIiwgInRlc3RmaWxlcy9Eb2N1bWVudFN0cmVhbVRlc3RDYXNlL2thZXJ1NS5odG0iLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RG9jdW1lbnRTdHJlYW1DYXNlSlNQKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAiU0hJRlRfSklTIiwgInRlc3RmaWxlcy9Eb2N1bWVudFN0cmVhbVRlc3RDYXNlL2thZXJ1NS5qc3AiLCBudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb2RlZFJlYWRlck9uR2VubmVkRmlsZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29kZWRSZWFkZXJPbkdlbm5lZEZpbGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyOGQ0OTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb2RlZFJlYWRlck9uR2VubmVkRmlsZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucmVhZDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLkdlbmVyYXRlRmlsZXM7Ci0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIHNob3VsZCBjb250YWluIGEgIm1hc3RlciBsaXN0IiBvZiBhbGwgZmlsZW5hbWVzIGdlbmVyYXRlZCBieQotICogdmFyaW91cyBWTSdzIC4uLiB0aGVuIHRoZSB0ZXN0IGluZ29yZXMgaXQgaWYgdGhlIGZpbGVuYW1lJ3Mgbm90IGZvdW5kIGR1ZQotICogdG8gdGhlIFZNIG5vdCBzdXBwb3J0aW5nIGl0LgotICogIAotICovCi1wdWJsaWMgY2xhc3MgVGVzdENvZGVkUmVhZGVyT25HZW5uZWRGaWxlcyBleHRlbmRzIFRlc3RDb2RlZFJlYWRlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgaW50IG5vdFJhbiA9IDA7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0JcHJvdGVjdGVkIHZvaWQgZG9HZW5UZXN0KFN0cmluZyBjaGFyc2V0TmFtZSkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGNoYXJzZXROYW1lLCBjaGFyc2V0TmFtZSwgR2VuZXJhdGVGaWxlcy5nZXRNYWluRGlyZWN0b3J5QmFzZWRPblZNTmFtZSgpICsgIi94bWwvdGVzdC0iICsgY2hhcnNldE5hbWUgKyAiLnhtbCIsIG51bGwpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGRvVGVzdChTdHJpbmcgZXhwZWN0ZWRKYXZhQ2hhcnNldCwgU3RyaW5nIGV4cGVjdGVkRGV0ZWN0ZWRDaGFyc2V0LCBTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRXhjZXB0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlpZiAoZXhwZWN0ZWRKYXZhQ2hhcnNldCAhPSBudWxsICYmIGV4cGVjdGVkSmF2YUNoYXJzZXQuaW5kZXhPZigiVVRGLTMyIikgPiAtMSkgewotCQkJcmV0dXJuOyAvL3dvbid0IHRyeSAzMiBiaXQgcmlnaHQgbm93Ci0JCX0KLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCi0JCS8vIGlmIHRoZXJlIG5vIGZpbGUsIGp1c3QgYXNzdW1lIHRoYXQgaXRzIGR1ZSB0byB3aGljaCBWTSBpcwotCQkvLyBicmluZyB1c2VkLiAoQ291bGQgYmUgaW1wcm92ZWQgaW4gZnV0dXJlIHRvIGF2b2lkIGNvdW50aW5nIGFzIGEKLQkJLy8gdGVzdCkgLSB0aGlzIGNoZWNrIGluIGhlcmUgZm9yIGluaXRpYWwgZGVidWdnaW5nIG9ubHkKLQkJaWYgKGZpbGUgPT0gbnVsbCkgewotCQkJbm90UmFuKys7Ci0JCQlpZiAoREVCVUcpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oInRlc3Qgbm90IHJhbiBzaW5jZSBjaGFyc2V0IG5vdCBzdXBwb3J0ZWQgYnkgVk06ICIgKyBmaWxlUGF0aCk7Ci0JCQl9Ci0JCQlyZXR1cm47Ci0JCX0KLQkJc3VwZXIuZG9UZXN0KGV4cGVjdGVkSmF2YUNoYXJzZXQsIGV4cGVjdGVkRGV0ZWN0ZWRDaGFyc2V0LCBmaWxlUGF0aCwgZXhwZWN0ZWRFeGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJCaWc1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiQ0VTVS04IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiQ09NUE9VTkRfVEVYVCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkVVQy1DTiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkVVQy1KUCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkVVQy1LUiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkdCMTgwMzAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJHQjIzMTIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJHQksiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJocC1yb21hbjgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwMDYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDZTIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDg4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDk4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMTE0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMTE1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMTI0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzYzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzYzQyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM3MCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM4MSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM4MyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM4NiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMzM3MjJDIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS00MzciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTczNyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tNzc1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04MDgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1MCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODUyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1NiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODU3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1OSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODYwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2MiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODYzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NFMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2OCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY5IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NzQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg5NyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTIxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05MjIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTkzMiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDJDIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0M0MiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0OCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQ5IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDlDIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NTAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk1NEMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItQ04iOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItQ04tR0IiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItSlAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItS1IiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xMCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xMyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xNCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xNSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xNiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0yIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS01IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNlMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS04IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTkiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSklTMDIwMSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKSVMwMjA4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpJUzAyMTIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSm9oYWIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiS09JOC1SIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktPSTgtUlUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiS09JOC1VIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktTQzU2MDEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjQXJhYmljIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0NlbnRyYWxFdXJvcGUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjQ3JvYXRpYW4iOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjQ3lyaWxsaWMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjR3JlZWsiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjSGVicmV3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0ljZWxhbmQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjUm9tYW4iOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjUm9tYW5pYSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNUaGFpIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNUdXJraXNoIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNVa3JhaW5lIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJQVENQMTU0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJTaGlmdF9KSVMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlRJUy02MjAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVTLUFTQ0lJIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTE2IjsKLS8vCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotLy8JfQotCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNkJFIjsKLS8vCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotLy8JfQotCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNkxFIjsKLS8vCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotLy8JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTMyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMzJCRSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTMyTEUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi04IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtOEoiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU2UyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtODc0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTkzMiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy05MzYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtOTQ5IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTk1MCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiWC1Vbmljb2RlQmlnIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEzMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJYLVVuaWNvZGVMaXR0bGUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnREZXNjcmlwdGlvbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50RGVzY3JpcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM4ZDRjNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnREZXNjcmlwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnREZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuTm9uQ29udGVudEJhc2VkRW5jb2RpbmdSdWxlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLlRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotCi0KLXB1YmxpYyBjbGFzcyBUZXN0Q29udGVudERlc2NyaXB0aW9uIGV4dGVuZHMgVGVzdENhc2UgewotCS8vCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAiaHRtbC8iOwotCS8vCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVSb290ID0KLQkvLyAiL2J1aWxkcy9Xb3Jrc3BhY2VzL0hlYWRXb3Jrc3BhY2Uvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8iOwotCS8vCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGZpbGVSb290ICsgZmlsZURpcjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gdHJ1ZTsKLQkvL3ByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfVEVTVF9ERVRBSUwgPSBmYWxzZTsKLQkvLyBuZWVkcyB0byBiZSBzdGF0aWMsIHNpbmNlIEpVbml0IGNyZWF0ZXMgZGlmZmVyZW5jZSBpbnN0YW5jZXMgZm9yIGVhY2gKLQkvLyB0ZXN0Ci0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBmVGVzdFByb2plY3RJbml0aWFsaXplZDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9QUk9KRUNUX05BTUUgPSAib3JnLmVjbGlwc2UuZW5jb2RpbmcucmVzb3VyY2UubmV3dGVzdHMiOwotCXN0YXRpYyBJUHJvamVjdCBmVGVzdFByb2plY3Q7Ci0JcHJpdmF0ZSBzdGF0aWMgaW50IG5TZXR1cHMgPSAwOwotCi0JLyoqCi0JICogIAotCSAqLwotCXB1YmxpYyBUZXN0Q29udGVudERlc2NyaXB0aW9uKCkgewotCQlzdXBlcigpOwotCQkvL1N5c3RlbS5vdXQucHJpbnRsbihjdXJyZW50UGxhdGZvcm1DaGFyc2V0KTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JCS8vCQl0cnkgewotCQkvLwkJCW5ldyBUZXN0Q29kZWRSZWFkZXIoKS5kb0FsbEZpbGVzKCk7Ci0JCS8vCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJLy8JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkvLwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkvLwkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCS8vCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQYXRoIGxvY2F0aW9uUGF0aCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCW1vbml0b3IgPSBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOwotCQl9Ci0JCW1vbml0b3IuYmVnaW5UYXNrKCJjcmVhdGluZyB0ZXN0IHByb2plY3QiLCAxMCk7Ci0JCS8vIGNyZWF0ZSB0aGUgcHJvamVjdAotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOwotCQkJCWlmIChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLmVxdWFscyhsb2NhdGlvblBhdGgpKSB7Ci0JCQkJCWxvY2F0aW9uUGF0aCA9IG51bGw7Ci0JCQkJfQotCQkJCWRlc2Muc2V0TG9jYXRpb24obG9jYXRpb25QYXRoKTsKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjLCBtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJCWlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb25pdG9yICE9IG51bGwpIHsKLQkJCQltb25pdG9yLmRvbmUoKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgZ2V0QW5kQ3JlYXRlUHJvamVjdCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJLy9UZXN0c1BsdWdpbiB0ZXN0c1BsdWdpbiA9IChUZXN0c1BsdWdpbikKLQkJLy8gUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nIik7Ci0JCUlXb3Jrc3BhY2Ugd29ya3NwYWNlID0gVGVzdHNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0JCUlXb3Jrc3BhY2VSb290IHJvb3QgPSB3b3Jrc3BhY2UuZ2V0Um9vdCgpOwotCQlmVGVzdFByb2plY3QgPSByb290LmdldFByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkvLyB0aGlzIGZvcm0gY3JlYXRlcyBwcm9qZWN0IGFzICJsaW5rZWQiIGJhY2sgdG8gJ2ZpbGVSb290JwotCQkvL2NyZWF0ZVByb2plY3QodGVzdFByb2plY3QsIG5ldyBQYXRoKGZpbGVSb290KSwgbnVsbCk7Ci0JCWNyZWF0ZVByb2plY3QoZlRlc3RQcm9qZWN0LCBudWxsLCBudWxsKTsKLQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQlhc3NlcnRUcnVlKGZUZXN0UHJvamVjdC5leGlzdHMoKSk7Ci0JCS8vCQlJQ29udGFpbmVyIGRvdGVzdEZpbGVzID0gdGVzdFByb2plY3QuZ2V0Rm9sZGVyKCJkb3Rlc3RGaWxlcyIpOwotCQkvLwkJYXNzZXJ0VHJ1ZShkb3Rlc3RGaWxlcy5leGlzdHMoKSk7Ci0JCS8vCQlJUmVzb3VyY2VbXSBhbGxGb2xkZXJzID0gZG90ZXN0RmlsZXMubWVtYmVycygpOwotCQkvLwkJYXNzZXJ0Tm90TnVsbChhbGxGb2xkZXJzKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQluU2V0dXBzKys7Ci0JCWlmICghZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQpIHsKLQkJCWdldEFuZENyZWF0ZVByb2plY3QoKTsKLQkJCS8vIHVuemlwIGZpbGVzIHRvIHRoZSByb290IG9mIHdvcmtzcGFjZSBkaXJlY3RvcnkKLQkJCVN0cmluZyBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgPSBmVGVzdFByb2plY3QuZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCk7Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Gb2xkZXIgPSBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgKyAiLyI7Ci0JCQkvLyB0aGlzIHppcCBmaWxlIGlzIHNpdHRpbmcgaW4gdGhlICJyb290IiBvZiB0ZXN0IHBsdWdpbgotCQkJRmlsZSB6aXBGaWxlID0gVGVzdHNQbHVnaW4uZ2V0VGVzdEZpbGUoInRlc3RmaWxlcy56aXAiKTsKLQkJCVByb2plY3RVbnppcFV0aWxpdHkgcHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQkJcHJvalV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgZGVzdGluYXRpb25Gb2xkZXIpOwotCQkJcHJvalV0aWwuaW5pdEphdmFQcm9qZWN0KFRFU1RfUFJPSkVDVF9OQU1FKTsKLQkJCWZUZXN0UHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCWZUZXN0UHJvamVjdEluaXRpYWxpemVkID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JCW5TZXR1cHMtLTsKLQkJaWYgKG5TZXR1cHMgPT0gMCkgewotCQkJaWYgKCFERUJVRykgewotCQkJCS8vCQkJCURpc3BsYXkgZGlzcGxheSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpOwotCQkJCS8vCQkJCWRpc3BsYXkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKLQkJCQkvLwkJCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCS8vCQkJCQkJUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCQkJLy8JCQkJCQlJUHJvamVjdCBwcm9qID0gZlRlc3RQcm9qZWN0OwotCQkJCS8vCQkJCQkJZlRlc3RQcm9qZWN0ID0gbnVsbDsKLQkJCQkvLwkJCQkJCXRyeSB7Ci0JCQkJLy8JCQkJCQkJcHJvalV0aWwuZGVsZXRlUHJvamVjdChwcm9qKTsKLQkJCQkvLwkJCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8JCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQkvLwkJCQkJCX0KLQkJCQkvLwkJCQkJfQotCQkJCS8vCQkJCX0pOwotCQkJfQotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZG9UZXN0KFN0cmluZyBleHBlY3RlZEphdmFDaGFyc2V0LCBTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRXhjZXB0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlpZiAoZXhwZWN0ZWRKYXZhQ2hhcnNldCAhPSBudWxsICYmIGV4cGVjdGVkSmF2YUNoYXJzZXQuaW5kZXhPZigiVVRGLTMyIikgPiAtMSkgewotCQkJcmV0dXJuOyAvL3dvbid0IHRyeSAzMiBiaXQgcmlnaHQgbm93Ci0JCX0KLQkJZXhwZWN0ZWRKYXZhQ2hhcnNldCA9IG1hc3NhZ2VDaGFyc2V0KGV4cGVjdGVkSmF2YUNoYXJzZXQpOwotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWFzc2VydE5vdE51bGwoIkVycm9yIGluIHRlc3QgY2FzZTogZmlsZSBub3QgZm91bmQ6ICIgKyBmaWxlUGF0aCwgZmlsZSk7Ci0KLQkJSUNvbnRlbnREZXNjcmlwdGlvbiBmaWxlQ29udGVudERlc2NyaXB0aW9uID0gZmlsZS5nZXRDb250ZW50RGVzY3JpcHRpb24oKTsKLQkvLwlJQ29udGVudERlc2NyaXB0aW9uIHN0cmVhbUNvbnRlbnREZXNjcmlwdGlvbiA9IFBsYXRmb3JtLmdldENvbnRlbnRUeXBlTWFuYWdlcigpLmdldERlc2NyaXB0aW9uRm9yKGZpbGUuZ2V0Q29udGVudHMoKSwgZmlsZS5nZXROYW1lKCksIElDb250ZW50RGVzY3JpcHRpb24uQUxMKTsKLQkvLwlhc3NlcnRFcXVhbHMoImNvbXBhcmluZyBmaWxlIGFuZCBzdHJlYW0gY29udGVudERlc2NyaXB0aW9uIiwgZmlsZUNvbnRlbnREZXNjcmlwdGlvbiwgc3RyZWFtQ29udGVudERlc2NyaXB0aW9uKTsKLQotCQlhc3NlcnROb3ROdWxsKCJOdWxsIGNvbnRlbnQgZGVzY3JpcHRpb24iLCBmaWxlQ29udGVudERlc2NyaXB0aW9uKTsKLQkJU3RyaW5nIGZvdW5kQ2hhcnNldCA9IGZpbGVDb250ZW50RGVzY3JpcHRpb24uZ2V0Q2hhcnNldCgpOwotCQlmb3VuZENoYXJzZXQgPSBtYXNzYWdlQ2hhcnNldChmb3VuZENoYXJzZXQpOwotCi0JCWlmIChleHBlY3RlZEphdmFDaGFyc2V0ID09IG51bGwgfHwgZXhwZWN0ZWRKYXZhQ2hhcnNldC5lcXVhbHMoImV4cGVjdFBsYXRmb3JtQ2hhcnNldCIpKSB7Ci0JCQlTdHJpbmcgcGxhdGZvcm1EZWZhdWx0ID0gTm9uQ29udGVudEJhc2VkRW5jb2RpbmdSdWxlcy51c2VEZWZhdWx0TmFtZVJ1bGVzKG51bGwpOwotCQkJYXNzZXJ0VHJ1ZShmb3VuZENoYXJzZXQuZXF1YWxzKHBsYXRmb3JtRGVmYXVsdCkpOwotCQl9Ci0JCWVsc2UgewotCQkJYm9vbGVhbiBhc0V4cGVjdGVkID0gZm91bmRDaGFyc2V0LmVxdWFscyhleHBlY3RlZEphdmFDaGFyc2V0KTsKLQkJCWFzc2VydFRydWUoZm91bmRDaGFyc2V0ICsgIiBkaWQgbm90IGVxdWFsIHRoZSBleHBlY3RlZCAiICsgZXhwZWN0ZWRKYXZhQ2hhcnNldCArICIgKHRoaXMgaXMgYSBWTSBkZXBlbmRlbnQgdGVzdCkiLCBhc0V4cGVjdGVkKTsKLQkJfQotCi0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZm91bmRDaGFyc2V0Ci0JICogQHJldHVybgotCSAqLwotCXByaXZhdGUgU3RyaW5nIG1hc3NhZ2VDaGFyc2V0KFN0cmluZyBmb3VuZENoYXJzZXQpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IGZvdW5kQ2hhcnNldDsKLQkJaWYgKCJVVEYtMTZMRSIuZXF1YWxzKGZvdW5kQ2hhcnNldCkpIHsKLQkJCXJlc3VsdCA9ICJVVEYtMTYiOwotCQl9Ci0JCWVsc2UgaWYgKCJYLVVuaWNvZGVMaXR0bGUiLmVxdWFscyhmb3VuZENoYXJzZXQpKSB7Ci0JCQlyZXN1bHQgPSAiVVRGLTE2IjsKLQkJfQotCQllbHNlIGlmICgiWC1Vbmljb2RlQmlnIi5lcXVhbHMoZm91bmRDaGFyc2V0KSkgewotCQkJcmVzdWx0ID0gIlVURi0xNkJFIjsKLQkJfQotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiLCAidGVzdGZpbGVzL2Nzcy9lbXB0eUZpbGUuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJFVUMtSlAiLCAidGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2V1Y2pwLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTIwMjItSlAiLCAidGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2ppcy5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJ0ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3Rfc2ppcy5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoImV4cGVjdFBsYXRmb3JtQ2hhcnNldCIsICJ0ZXN0ZmlsZXMvY3NzL25vRW5jb2RpbmcuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS02IiwgInRlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmQuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS02IiwgInRlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS02IiwgInRlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQyLmNzcyIsIG51bGwpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IiwgInRlc3RmaWxlcy9odG1sL0VtcHR5RmlsZS5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL2h0bWwvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IiwgInRlc3RmaWxlcy9odG1sL0xhcmdlTm9FbmNvZGluZy5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vbkRlZmF1bHQuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTYiLCAidGVzdGZpbGVzL2h0bWwvTXVsdGlOb25EZWZhdWx0Lmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiLCAidGVzdGZpbGVzL2h0bWwvTm9FbmNvZGluZy5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL2h0bWwvbm9xdW90ZXMuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy9odG1sL05vcm1hbE5vbkRlZmF1bHQuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC9FbXB0eUZpbGUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktOCIsICJ0ZXN0ZmlsZXMvanNwL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiYWJjIiwgInRlc3RmaWxlcy9qc3AvaW5WYWxpZEVuY29kaW5nVmFsdWUuanNwIiwgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmV4Y2VwdGlvbnMuVW5zdXBwb3J0ZWRDaGFyc2V0RXhjZXB0aW9uV2l0aERldGFpbC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgid2luZG93cy0xMjUyIiwgInRlc3RmaWxlcy9qc3AvamF2YUVuY29kaW5nVmFsdWUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmcuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmdYU0wuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL05vRW5jb2RpbmdpblhNTERlY2wuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMiIsICJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlTm9FbmNvZGluZy5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0zIiwgInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdDaGFyc2V0LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTIiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ1hNTFN5bnRheC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS04IiwgInRlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS04IiwgInRlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTciLCAidGVzdGZpbGVzL2pzcC9Ob3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgInRlc3RmaWxlcy9qc3AvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMyIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RCcm9rZW5MaW5lLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoInRlc3RqdW5rIiwgInRlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AiLCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJ0ZXN0anVuayIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmdXaXRoSnVuay5qc3AiLCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvdGVzdEV4dHJhSnVuay5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYVZhbGlkU3R1ZmYuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkMi5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vRW5jb2RpbmdWYWx1ZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0yIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUF0Rmlyc3QuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb3JtYWxDYXNlLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi0xNkJFIiwgInRlc3RmaWxlcy9qc3AvdGVzdFVURjE2LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi0xNkxFIiwgInRlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTE2QkUiLCAidGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTE2QkUiLCAidGVzdGZpbGVzL2pzcC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy9qc3AvVVRGOFdpdGgzQnl0ZUJPTS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS04IiwgInRlc3RmaWxlcy9qc3AvV2VsbEZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybUIuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjQyOTMvdGVzdHNoaWZ0amlzWG1sU3ludGF4LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjI5NjY3L2F1ZGkuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvRW1wdHlGaWxlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJFVUMtSlAiLCAidGVzdGZpbGVzL3htbC9ldWNqcC54bWwiLCBudWxsKTsKLQl9Ci0KLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL3htbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LnhtbCIsIG51bGwpOwotLy8JfQotLy8KLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54bWwiLCBudWxsKTsKLS8vCX0KLS8vCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL01hbGZvcm1lZE5vRW5jb2RpbmcueHNsIiwgbnVsbCk7Ci0vLwl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL3htbC9Ob0VuY29kaW5nLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy94bWwvTm9ybWFsTm9uRGVmYXVsdC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgInRlc3RmaWxlcy94bWwvc2hpZnRqaXMueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL3htbC90ZXN0RXh0cmFKdW5rLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RFeHRyYVZhbGlkU3R1ZmYueG1sIiwgbnVsbCk7Ci0JfQotCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQueG1sIiwgbnVsbCk7Ci0vLwl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMi54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTggc3RhbmRhbG9uZT0iLCAidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMy54bWwiLCBqYXZhLm5pby5jaGFyc2V0LklsbGVnYWxDaGFyc2V0TmFtZUV4Y2VwdGlvbi5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDQueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL3htbC90ZXN0TXVsdGlMaW5lLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb0VuY29kaW5nVmFsdWUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdE5vcm1hbENhc2UueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsQXRGaXJzdC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsSW5MYXJnZUZpbGUueG1sIiwgbnVsbCk7Ci0JfQotCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJZG9UZXN0KCJVVEYtMTZCRSIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RVVEYxNi54bWwiLCBudWxsKTsKLS8vCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtMTZMRSIsICJ0ZXN0ZmlsZXMveG1sL1VURjE2TEVBdFN0YXJ0T2ZMYXJnZUZpbGUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi0xNkxFIiwgInRlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sIiwgbnVsbCk7Ci0JfQotCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJZG9UZXN0KCJVVEYtMTZCRSIsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS54bWwiLCBudWxsKTsKLS8vCX0KLQotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCWRvVGVzdCgiVVRGLTE2QkUiLCAidGVzdGZpbGVzL3htbC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLnhtbCIsIG51bGwpOwotLy8JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvVVRGOFdpdGgzQnl0ZUJPTS54bWwiLCBudWxsKTsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlRGVzY3JpcHRpb25Pbkdlbm5lZEZpbGVzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlRGVzY3JpcHRpb25Pbkdlbm5lZEZpbGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZWFjNmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZURlc2NyaXB0aW9uT25HZW5uZWRGaWxlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzA4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcuR2VuZXJhdGVGaWxlczsKLQotCi0KLXB1YmxpYyBjbGFzcyBUZXN0Q29udGVudFR5cGVEZXNjcmlwdGlvbk9uR2VubmVkRmlsZXMgZXh0ZW5kcyBUZXN0Q29udGVudERlc2NyaXB0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBpbnQgbm90UmFuID0gMDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkb0dlblRlc3QoU3RyaW5nIGNoYXJzZXROYW1lKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBHZW5lcmF0ZUZpbGVzLmdldE1haW5EaXJlY3RvcnlCYXNlZE9uVk1OYW1lKCkgKyAiL3htbC90ZXN0LSIgKyBjaGFyc2V0TmFtZSArICIueG1sIjsKLQkJZG9UZXN0KGNoYXJzZXROYW1lLCBmaWxlbmFtZSwgbnVsbCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZG9UZXN0KFN0cmluZyBleHBlY3RlZEphdmFDaGFyc2V0LCBTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRXhjZXB0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlpZiAoZXhwZWN0ZWRKYXZhQ2hhcnNldCAhPSBudWxsICYmIGV4cGVjdGVkSmF2YUNoYXJzZXQuaW5kZXhPZigiVVRGLTMyIikgPiAtMSkgewotCQkJcmV0dXJuOyAvL3dvbid0IHRyeSAzMiBiaXQgcmlnaHQgbm93Ci0JCX0KLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCi0JCS8vIGlmIHRoZXJlIG5vIGZpbGUsIGp1c3QgYXNzdW1lIHRoYXQgaXRzIGR1ZSB0byB3aGljaCBWTSBpcwotCQkvLyBicmluZyB1c2VkLiAoQ291bGQgYmUgaW1wcm92ZWQgaW4gZnV0dXJlIHRvIGF2b2lkIGNvdW50aW5nIGFzIGEKLQkJLy8gdGVzdCkgLSB0aGlzIGNoZWNrIGluIGhlcmUgZm9yIGluaXRpYWwgZGVidWdnaW5nIG9ubHkKLQkJaWYgKGZpbGUgPT0gbnVsbCkgewotCQkJbm90UmFuKys7Ci0JCQlpZiAoREVCVUcpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oInRlc3Qgbm90IHJhbiBzaW5jZSBjaGFyc2V0IG5vdCBzdXBwb3J0ZWQgYnkgVk06ICIgKyBmaWxlUGF0aCk7Ci0JCQl9Ci0JCQlyZXR1cm47Ci0JCX0KLQkJc3VwZXIuZG9UZXN0KGV4cGVjdGVkSmF2YUNoYXJzZXQsIGZpbGVQYXRoLCBleHBlY3RlZEV4Y2VwdGlvbik7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiQmlnNSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkNFU1UtOCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkNPTVBPVU5EX1RFWFQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJFVUMtQ04iOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJFVUMtSlAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJFVUMtS1IiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJHQjE4MDMwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiR0IyMzEyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiR0JLIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiaHAtcm9tYW44IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDA2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDQxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDQzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDQ2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDQ2UyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA4OCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA5OCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTExNCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTExNSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTEyNCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM2MyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM2M0MiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzNzAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzODEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzODMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzODYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTMzNzIyQyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tNDM3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS03MzciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTc3NSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODA4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1MiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODU1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1NyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODU4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTkiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2MCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODYxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2MyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjRTIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2OSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODc0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04OTciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTkyMSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTIyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05MzIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0MiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQyQyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDNDIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0OSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQ5QyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTUwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NTRDIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUNOIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUNOLUdCIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUpQIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUtSIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0zIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS02IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTZTIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktOCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS05IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpJUzAyMDEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSklTMDIwOCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKSVMwMjEyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpvaGFiIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktPSTgtUiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJLT0k4LVJVIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktPSTgtVSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJLU0M1NjAxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0FyYWJpYyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNDZW50cmFsRXVyb3BlIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0Nyb2F0aWFuIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0N5cmlsbGljIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0dyZWVrIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0hlYnJldyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNJY2VsYW5kIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY1JvbWFuIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY1JvbWFuaWEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjVGhhaSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjVHVya2lzaCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjVWtyYWluZSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiUFRDUDE1NCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiU2hpZnRfSklTIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJUSVMtNjIwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVUy1BU0NJSSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTE2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTE2QkUiOwotLy8JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0vLwl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTZMRSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTMyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMzJCRSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTMyTEUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi04IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtOEoiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU2UyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtODc0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTkzMiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy05MzYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtOTQ5IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTk1MCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiWC1Vbmljb2RlQmlnIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEzMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJYLVVuaWNvZGVMaXR0bGUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCi0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ZWY2NDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLlRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotCi0KLXB1YmxpYyBjbGFzcyBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb24gZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCXN0YXRpYyBJUHJvamVjdCBmVGVzdFByb2plY3Q7Ci0JLy8gbmVlZHMgdG8gYmUgc3RhdGljLCBzaW5jZSBKVW5pdCBjcmVhdGVzIGRpZmZlcmVuY2UgaW5zdGFuY2VzIGZvciBlYWNoCi0JLy8gdGVzdAotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQ7Ci0JcHJpdmF0ZSBzdGF0aWMgaW50IG5TZXR1cHMgPSAwOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BST0pFQ1RfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3QueG1sLnRlbXAudGVzdHMuZW5jb2RpbmcucmVzb3VyY2UubmV3dGVzdHMiOwotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQYXRoIGxvY2F0aW9uUGF0aCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCW1vbml0b3IgPSBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOwotCQl9Ci0JCW1vbml0b3IuYmVnaW5UYXNrKCJjcmVhdGluZyB0ZXN0IHByb2plY3QiLCAxMCk7Ci0JCS8vIGNyZWF0ZSB0aGUgcHJvamVjdAotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOwotCQkJCWlmIChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLmVxdWFscyhsb2NhdGlvblBhdGgpKSB7Ci0JCQkJCWxvY2F0aW9uUGF0aCA9IG51bGw7Ci0JCQkJfQotCQkJCWRlc2Muc2V0TG9jYXRpb24obG9jYXRpb25QYXRoKTsKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjLCBtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJCWlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb25pdG9yICE9IG51bGwpIHsKLQkJCQltb25pdG9yLmRvbmUoKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgZ2V0QW5kQ3JlYXRlUHJvamVjdCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSVdvcmtzcGFjZSB3b3Jrc3BhY2UgPSBUZXN0c1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQkJSVdvcmtzcGFjZVJvb3Qgcm9vdCA9IHdvcmtzcGFjZS5nZXRSb290KCk7Ci0JCWZUZXN0UHJvamVjdCA9IHJvb3QuZ2V0UHJvamVjdChURVNUX1BST0pFQ1RfTkFNRSk7Ci0JCS8vIHRoaXMgZm9ybSBjcmVhdGVzIHByb2plY3QgYXMgImxpbmtlZCIgYmFjayB0byAnZmlsZVJvb3QnCi0JCS8vIGNyZWF0ZVByb2plY3QodGVzdFByb2plY3QsIG5ldyBQYXRoKGZpbGVSb290KSwgbnVsbCk7Ci0JCWNyZWF0ZVByb2plY3QoZlRlc3RQcm9qZWN0LCBudWxsLCBudWxsKTsKLQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQlhc3NlcnRUcnVlKGZUZXN0UHJvamVjdC5leGlzdHMoKSk7Ci0JfQotCi0JLyoqCi0JICogCi0JICovCi0JcHVibGljIFRlc3RDb250ZW50VHlwZURldGVjdGlvbigpIHsKLQkJc3VwZXIoKTsKLQkJLy8gU3lzdGVtLm91dC5wcmludGxuKGN1cnJlbnRQbGF0Zm9ybUNoYXJzZXQpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGRvVGVzdChTdHJpbmcgZXhwZWN0ZWRDb250ZW50VHlwZSwgU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZEV4Y2VwdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlhc3NlcnROb3ROdWxsKCJFcnJvciBpbiB0ZXN0IGNhc2U6IGZpbGUgbm90IGZvdW5kOiAiICsgZmlsZVBhdGgsIGZpbGUpOwotCi0KLQkJSUNvbnRlbnREZXNjcmlwdGlvbiBzdHJlYW1Db250ZW50RGVzY3JpcHRpb24gPSBkb0dldENvbnRlbnRUeXBlQmFzZWRPblN0cmVhbShmaWxlKTsKLQkJSUNvbnRlbnREZXNjcmlwdGlvbiBmaWxlQ29udGVudERlc2NyaXB0aW9uID0gZG9HZXRDb250ZW50VHlwZUJhc2VkT25GaWxlKGZpbGUpOwotCi0JCUlDb250ZW50VHlwZSBmaWxlQ29udGVudFR5cGUgPSBmaWxlQ29udGVudERlc2NyaXB0aW9uLmdldENvbnRlbnRUeXBlKCk7Ci0JCWFzc2VydE5vdE51bGwoImZpbGUgY29udGVudCB0eXBlIHdhcyBudWxsIiwgZmlsZUNvbnRlbnRUeXBlKTsKLQotCQlJQ29udGVudFR5cGUgc3RyZWFtQ29udGVudFR5cGUgPSBzdHJlYW1Db250ZW50RGVzY3JpcHRpb24uZ2V0Q29udGVudFR5cGUoKTsKLQkJYXNzZXJ0Tm90TnVsbCgic3RyZWFtIGNvbnRlbnQgdHlwZSB3YXMgbnVsbCIsIHN0cmVhbUNvbnRlbnRUeXBlKTsKLQotCQlhc3NlcnRFcXVhbHMoImNvbXBhcmluZyBjb250ZW50IHR5cGUgYmFzZWQgb24gZmlsZSBhbmQgc3RyZWFtOiAiLCBmaWxlQ29udGVudFR5cGUsIHN0cmVhbUNvbnRlbnRUeXBlKTsKLQotCQkvLyBpZiBlcXVhbCwgYWJvdmUsIGFzIGV4cGVjdGVkLCB0aGVuIG9ubHkgbmVlZCB0byBjaGVjayBvbmUuCi0JCWFzc2VydEVxdWFscygiY29tcGFyZWluZyB3aXRoIGV4cGVjdGVkIGNvbnRlbnQgdHlwZSBpZCIsIGV4cGVjdGVkQ29udGVudFR5cGUsIGZpbGVDb250ZW50VHlwZS5nZXRJZCgpKTsKLQotCX0KLQotCXByb3RlY3RlZCBJQ29udGVudERlc2NyaXB0aW9uIGRvR2V0Q29udGVudFR5cGVCYXNlZE9uU3RyZWFtKElGaWxlIGZpbGUpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlDb250ZW50RGVzY3JpcHRpb24gc3RyZWFtQ29udGVudERlc2NyaXB0aW9uID0gbnVsbDsKLQkJSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBudWxsOwotCQl0cnkgewotCQkJaW5wdXRTdHJlYW0gPSBmaWxlLmdldENvbnRlbnRzKCk7Ci0JCQlzdHJlYW1Db250ZW50RGVzY3JpcHRpb24gPSBQbGF0Zm9ybS5nZXRDb250ZW50VHlwZU1hbmFnZXIoKS5nZXREZXNjcmlwdGlvbkZvcihpbnB1dFN0cmVhbSwgZmlsZS5nZXROYW1lKCksIElDb250ZW50RGVzY3JpcHRpb24uQUxMKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChpbnB1dFN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJfQotCQlhc3NlcnROb3ROdWxsKCJjb250ZW50IGRlc2NyaXB0aW9uIHdhcyBudWxsIiwgc3RyZWFtQ29udGVudERlc2NyaXB0aW9uKTsKLQkJcmV0dXJuIHN0cmVhbUNvbnRlbnREZXNjcmlwdGlvbjsKLQl9Ci0KLQlwcm90ZWN0ZWQgSUNvbnRlbnREZXNjcmlwdGlvbiBkb0dldENvbnRlbnRUeXBlQmFzZWRPbkZpbGUoSUZpbGUgZmlsZSkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJQ29udGVudERlc2NyaXB0aW9uIGZpbGVDb250ZW50RGVzY3JpcHRpb24gPSBmaWxlLmdldENvbnRlbnREZXNjcmlwdGlvbigpOwotCQlhc3NlcnROb3ROdWxsKCJmaWxlIGNvbnRlbnQgZGVzY3JpcHRpb24gd2FzIG51bGwiLCBmaWxlQ29udGVudERlc2NyaXB0aW9uKTsKLQkJcmV0dXJuIGZpbGVDb250ZW50RGVzY3JpcHRpb247Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZG9UZXN0Rm9yUGFyZW50KFN0cmluZyBleHBlY3RlZENvbnRlbnRUeXBlLCBTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRXhjZXB0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWFzc2VydE5vdE51bGwoIkVycm9yIGluIHRlc3QgY2FzZTogZmlsZSBub3QgZm91bmQ6ICIgKyBmaWxlUGF0aCwgZmlsZSk7Ci0KLQkJSUNvbnRlbnREZXNjcmlwdGlvbiBjb250ZW50RGVzY3JpcHRpb24gPSBmaWxlLmdldENvbnRlbnREZXNjcmlwdGlvbigpOwotCQlpZiAoY29udGVudERlc2NyaXB0aW9uID09IG51bGwpIHsKLQkJCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJaW5wdXRTdHJlYW0gPSBmaWxlLmdldENvbnRlbnRzKCk7Ci0JCQkJY29udGVudERlc2NyaXB0aW9uID0gUGxhdGZvcm0uZ2V0Q29udGVudFR5cGVNYW5hZ2VyKCkuZ2V0RGVzY3JpcHRpb25Gb3IoaW5wdXRTdHJlYW0sIGZpbGUuZ2V0TmFtZSgpLCBJQ29udGVudERlc2NyaXB0aW9uLkFMTCk7Ci0JCQl9Ci0JCQlmaW5hbGx5IHsKLQkJCQlpZiAoaW5wdXRTdHJlYW0gIT0gbnVsbCkgewotCQkJCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlhc3NlcnROb3ROdWxsKCJjb250ZW50IGRlc2NyaXB0aW9uIHdhcyBudWxsIiwgY29udGVudERlc2NyaXB0aW9uKTsKLQkJSUNvbnRlbnRUeXBlIGNvbnRlbnRUeXBlID0gY29udGVudERlc2NyaXB0aW9uLmdldENvbnRlbnRUeXBlKCk7Ci0JCWFzc2VydE5vdE51bGwoImNvbnRlbnQgdHlwZSB3YXMgbnVsbCIsIGNvbnRlbnRUeXBlKTsKLQotCQlJQ29udGVudFR5cGUgcGFyZW50Q29udGVudFR5cGUgPSBjb250ZW50VHlwZTsKLQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCQl3aGlsZSAocGFyZW50Q29udGVudFR5cGUgIT0gbnVsbCAmJiAhZm91bmQpIHsKLQkJCWZvdW5kID0gZXhwZWN0ZWRDb250ZW50VHlwZS5lcXVhbHMocGFyZW50Q29udGVudFR5cGUuZ2V0SWQoKSk7Ci0JCQlwYXJlbnRDb250ZW50VHlwZSA9IHBhcmVudENvbnRlbnRUeXBlLmdldEJhc2VUeXBlKCk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgiZGlkIG5vdCBmaW5kICciICsgZXhwZWN0ZWRDb250ZW50VHlwZSArICInIGluIHBhcmVudCBjaGFpbiBvZiBiYXNlIHR5cGVzIiwgZm91bmQpOwotCi0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJblNldHVwcysrOwotCQlpZiAoIWZUZXN0UHJvamVjdEluaXRpYWxpemVkKSB7Ci0JCQlnZXRBbmRDcmVhdGVQcm9qZWN0KCk7Ci0JCQkvLyB1bnppcCBmaWxlcyB0byB0aGUgcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Qcm9qZWN0U3RyaW5nID0gZlRlc3RQcm9qZWN0LmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpOwotCQkJU3RyaW5nIGRlc3RpbmF0aW9uRm9sZGVyID0gZGVzdGluYXRpb25Qcm9qZWN0U3RyaW5nICsgIi8iOwotCQkJLy8gdGhpcyB6aXAgZmlsZSBpcyBzaXR0aW5nIGluIHRoZSAicm9vdCIgb2YgdGVzdCBwbHVnaW4KLQkJCUZpbGUgemlwRmlsZSA9IFRlc3RzUGx1Z2luLmdldFRlc3RGaWxlKCJ0ZXN0ZmlsZXMuemlwIik7Ci0JCQlQcm9qZWN0VW56aXBVdGlsaXR5IHByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJCXByb2pVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIGRlc3RpbmF0aW9uRm9sZGVyKTsKLQkJCXByb2pVdGlsLmluaXRKYXZhUHJvamVjdChURVNUX1BST0pFQ1RfTkFNRSk7Ci0JCQlmVGVzdFByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQlmVGVzdFByb2plY3RJbml0aWFsaXplZCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQluU2V0dXBzLS07Ci0JCWlmIChuU2V0dXBzID09IDApIHsKLQkJCWlmICghREVCVUcpIHsKLS8vCQkJCSBEaXNwbGF5IGRpc3BsYXkgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKTsKLS8vCQkJCWRpc3BsYXkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKLS8vCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0vLwkJCQkJCVByb2plY3RVbnppcFV0aWxpdHkgcHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotLy8JCQkJCQlJUHJvamVjdCBwcm9qID0gZlRlc3RQcm9qZWN0OwotLy8JCQkJCQlmVGVzdFByb2plY3QgPSBudWxsOwotLy8JCQkJCQl0cnkgewotLy8JCQkJCQkJcHJvalV0aWwuZGVsZXRlUHJvamVjdChwcm9qKTsKLS8vCQkJCQkJfQotLy8JCQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLS8vCQkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0vLwkJCQkJCX0KLS8vCQkJCQl9Ci0vLwkJCQl9KTsKLQkJCX0KLQkJfQotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgSVByb2plY3QgZ2V0VGVzdFByb2plY3QoKSB7Ci0JCXJldHVybiBmVGVzdFByb2plY3Q7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvclhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvclhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGUyZTY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JYTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9yWE1MIGV4dGVuZHMgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZXhwZWN0ZWRDdXN0b21YTUxDb250ZW50VHlwZSA9ICJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueG1sc291cmNlIjsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZXhwZWN0ZWRYU0xDb250ZW50VHlwZSA9ICJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueHNsc291cmNlIjsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZXhwZWN0ZWRYTUxDb250ZW50VHlwZSA9ICJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sIjsKLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL0VtcHR5RmlsZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwM1AoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RGb3JQYXJlbnQoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvRW1wdHlGaWxlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL2V1Y2pwLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA0YigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC9ldWNqcC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL01hbGZvcm1lZE5vRW5jb2RpbmcueG1sIiwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBmaWxlIGlzIGlsbGZvcm1lZCBpbiBpdHMgc3BlY2lmaWVkIGNoYXJzZXQKLQkgKiBhbmQgY2hhcmFjdGVycy4gCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWFNMQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL01hbGZvcm1lZE5vRW5jb2RpbmcueHNsIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDdQKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Rm9yUGFyZW50KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL01hbGZvcm1lZE5vRW5jb2RpbmcueHNsIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvTm9FbmNvZGluZy54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC9Ob3JtYWxOb25EZWZhdWx0LnhtbCIsIG51bGwpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvc2hpZnRqaXMueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdEV4dHJhSnVuay54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0RXh0cmFWYWxpZFN0dWZmLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDIueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDMueG1sIiwgamF2YS5uaW8uY2hhcnNldC5JbGxlZ2FsQ2hhcnNldE5hbWVFeGNlcHRpb24uY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQ0LnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RNdWx0aUxpbmUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdE5vRW5jb2RpbmdWYWx1ZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9ybWFsQ2FzZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIwV1MoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkvLyB3aGl0ZXNwYWNlIChDUkxGKSBiZWZvcmUgeG1sIGRlY2xhcmF0aW9uCi0JCWRvVGVzdChleHBlY3RlZEN1c3RvbVhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0V1NCZWZvcmVYTUxEZWNsLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIwV1MyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJLy8gd2hpdGVzcGFjZSAoc3BhY2Ugb25seSkgYmVmb3JlIHhtbCBkZWNsYXJhdGlvbgotCQlkb1Rlc3QoZXhwZWN0ZWRDdXN0b21YTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdFdTQmVmb3JlWE1MRGVjbDIueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjBXUzMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkvLyB3aGl0ZXNwYWNlIChzcGFjZSwgdGFicywgYW5kIENSIG9ubHkpIGJlZm9yZSB4bWwgZGVjbGFyYXRpb24KLQkJZG9UZXN0KGV4cGVjdGVkQ3VzdG9tWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RXU0JlZm9yZVhNTERlY2wzLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIwUCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdEZvclBhcmVudChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJLy8gdGFnIChub3QganVzdCB3aGl0ZSBzcGFjZSkgYmVmb3JlIHhtbCBkZWNsYXJhdGlvbi4KLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xBdEZpcnN0LnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIxUCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdEZvclBhcmVudChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsQXRGaXJzdC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsSW5MYXJnZUZpbGUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjJQKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Rm9yUGFyZW50KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xJbkxhcmdlRmlsZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0VVRGMTYueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkvLyBsYXJnZSwgdXRmMTYsIGJ1dCBubyB4bWxEZWNsCi0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC9VVEYxNkxFQXRTdGFydE9mTGFyZ2VGaWxlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI0UCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdEZvclBhcmVudChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC9VVEYxNkxFQXRTdGFydE9mTGFyZ2VGaWxlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJLy8gaWxsZm9ybWVkLCBpcyBpbiB1dGYxNiwgYnV0IG5vdCBpbiBoZWFkZXIsIG5vdCBpbiBlbmNvZGluZz0gc3BlYy4KLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI1UCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdEZvclBhcmVudChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC9VVEY4V2l0aDNCeXRlQk9NLnhtbCIsIG51bGwpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29udGVudFR5cGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1YTYxNjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudFR5cGVNYW5hZ2VyOwotCi0KLXB1YmxpYyBjbGFzcyBUZXN0Q29udGVudFR5cGVzIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGlvbigpIHsKLQkJSUNvbnRlbnRUeXBlTWFuYWdlciByZWdpc3RyeSA9IFBsYXRmb3JtLmdldENvbnRlbnRUeXBlTWFuYWdlcigpOwotCQlhc3NlcnRUcnVlKCJjb250ZW50IHR5cGUgaWRlbnRpZmVyIHJlZ2lzdHJ5IG11c3QgZXhpc3QiLCByZWdpc3RyeSAhPSBudWxsKTsKLQkJSUNvbnRlbnRUeXBlW10gYWxsVHlwZXMgPSByZWdpc3RyeS5nZXRBbGxDb250ZW50VHlwZXMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhbGxUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJSUNvbnRlbnRUeXBlIGNvbnRlbnRUeXBlID0gYWxsVHlwZXNbaV07Ci0JCQlJQ29udGVudFR5cGUgcGFyZW50VHlwZSA9IGNvbnRlbnRUeXBlLmdldEJhc2VUeXBlKCk7Ci0JCQlpZiAoREVCVUcpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50KGNvbnRlbnRUeXBlKTsKLQotCQkJCWlmIChwYXJlbnRUeXBlICE9IG51bGwpIHsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCIgKGV4dGVuZHMgIiArIHBhcmVudFR5cGUgKyAiKSIpOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQkJfQotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgIiArIGNvbnRlbnRUeXBlLmdldE5hbWUoKSk7Ci0JCQl9Ci0JCQlTdHJpbmdbXSBmaWxlc3BlY3MgPSBjb250ZW50VHlwZS5nZXRGaWxlU3BlY3MoSUNvbnRlbnRUeXBlLkZJTEVfRVhURU5TSU9OX1NQRUMgfCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQkJaWYgKERFQlVHKSB7Ci0JCQkJZm9yIChpbnQgaiA9IDA7IGogPCBmaWxlc3BlY3MubGVuZ3RoOyBqKyspIHsKLQkJCQkJU3RyaW5nIGZpbGVzcGVjID0gZmlsZXNwZWNzW2pdOwotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgICAgIiArIGZpbGVzcGVjKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy91dGlsL1Byb2plY3RVbnppcFV0aWxpdHkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvdXRpbC9Qcm9qZWN0VW56aXBVdGlsaXR5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkYWQ1ODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy91dGlsL1Byb2plY3RVbnppcFV0aWxpdHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC56aXAuWmlwRW50cnk7Ci1pbXBvcnQgamF2YS51dGlsLnppcC5aaXBGaWxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5JT3ZlcndyaXRlUXVlcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkud2l6YXJkcy5kYXRhdHJhbnNmZXIuRmlsZVN5c3RlbVN0cnVjdHVyZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLndpemFyZHMuZGF0YXRyYW5zZmVyLklJbXBvcnRTdHJ1Y3R1cmVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS53aXphcmRzLmRhdGF0cmFuc2Zlci5JbXBvcnRPcGVyYXRpb247Ci0KLS8qKgotICogSW1wb3J0cyB6aXBwZWQgZmlsZXMgaW50byB0aGUgdGVzdCB3b3Jrc3BhY2UuIERlbGV0ZXMgYWxsIHByb2plY3RzIGluCi0gKiB3b3Jrc3BhY2UuCi0gKiAKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBQcm9qZWN0VW56aXBVdGlsaXR5IHsKLQljbGFzcyBNeU92ZXJ3cml0ZVF1ZXJ5IGltcGxlbWVudHMgSU92ZXJ3cml0ZVF1ZXJ5IHsKLQkJcHVibGljIFN0cmluZyBxdWVyeU92ZXJ3cml0ZShTdHJpbmcgcGF0aFN0cmluZykgewotCQkJcmV0dXJuIEFMTDsKLQkJfQotCX0KLQotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST0pFQ1RfWklQU19GT0xERVIgPSAiUHJvamVjdFRlc3RGaWxlcyI7Ci0JcHJpdmF0ZSBMaXN0IGZDcmVhdGVkUHJvamVjdHMgPSBudWxsOwotCi0JcHVibGljIFByb2plY3RVbnppcFV0aWxpdHkoKSB7Ci0JCS8vIGZvciBkZWxldGlvbiBsYXRlcgotCQlmQ3JlYXRlZFByb2plY3RzID0gbmV3IEFycmF5TGlzdCgpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBmaWxlVG9JbXBvcnQKLQkgKiAgICAgICAgICAgIHRoZSBmaWxlIHlvdSB3aXNoIHRvIGltcG9ydAotCSAqIEBwYXJhbSBmb2xkZXJQYXRoCi0JICogICAgICAgICAgICB0aGUgY29udGFpbmVyIHBhdGggd2l0aGluIHRoZSB3b3Jrc3BhY2UKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbXBvcnRGaWxlKEZpbGUgZmlsZVRvSW1wb3J0LCBTdHJpbmcgZm9sZGVyUGF0aCkgewotCQlXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IgaW1wb3J0UHJvZ3Jlc3MgPSBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCXRyeSB7Ci0JCQlpZiAoZmlsZVRvSW1wb3J0LmV4aXN0cygpKSB7Ci0JCQkJSVBhdGggY29udGFpbmVyUGF0aCA9IG5ldyBQYXRoKGZvbGRlclBhdGgpOwotCQkJCS8vZkNyZWF0ZWRQcm9qZWN0cy5hZGQoZm9sZGVyUGF0aCk7Ci0JCQkJSUltcG9ydFN0cnVjdHVyZVByb3ZpZGVyIHByb3ZpZGVyID0gRmlsZVN5c3RlbVN0cnVjdHVyZVByb3ZpZGVyLklOU1RBTkNFOwotCQkJCUlPdmVyd3JpdGVRdWVyeSBvdmVyd3JpdGVJbXBsZW1lbnRvciA9IG5ldyBNeU92ZXJ3cml0ZVF1ZXJ5KCk7Ci0JCQkJRmlsZVtdIGZpbGVzVG9JbXBvcnQgPSB7ZmlsZVRvSW1wb3J0fTsKLQkJCQlJbXBvcnRPcGVyYXRpb24gaW1wb3J0T3AgPSBuZXcgSW1wb3J0T3BlcmF0aW9uKGNvbnRhaW5lclBhdGgsIG51bGwsIHByb3ZpZGVyLCBvdmVyd3JpdGVJbXBsZW1lbnRvciwgQXJyYXlzLmFzTGlzdChmaWxlc1RvSW1wb3J0KSk7Ci0JCQkJaW1wb3J0T3Auc2V0Q3JlYXRlQ29udGFpbmVyU3RydWN0dXJlKGZhbHNlKTsKLQkJCQlpbXBvcnRPcC5zZXRPdmVyd3JpdGVSZXNvdXJjZXModHJ1ZSk7Ci0JCQkJaW1wb3J0T3AucnVuKGltcG9ydFByb2dyZXNzKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiaGFuZGxlIHNvdXJjZSBkb2Vzbid0IGV4aXN0Iik7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpbXBvcnRQcm9ncmVzcy5kb25lKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiB0aGUgZm9sbG93aW5nIGlzIGxvZ2ljIGZyb20KLQkgKiBodHRwOi8vd3d3LmRldnNoZWQuY29tL2MvYS9KYXZhL1ppcC1NZWV0cy1KYXZhLzIvCi0JICovCi0JLy8gc3BlY2lmeSBidWZmZXIgc2l6ZSBmb3IgZXh0cmFjdGlvbgotCXN0YXRpYyBmaW5hbCBpbnQgQlVGRkVSID0gMjA0ODsKLQotCXB1YmxpYyB2b2lkIHVuemlwQW5kSW1wb3J0KEZpbGUgaW5GaWxlLCBTdHJpbmcgZGVzdGluYXRpb25EaXJlY3RvcnkpIHsKLQkJdHJ5IHsKLQkJCS8vIFNwZWNpZnkgZmlsZSB0byBkZWNvbXByZXNzCi0JCQlTdHJpbmcgaW5GaWxlTmFtZSA9IGluRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKTsgLy8iYzovZXhhbXBsZS56aXAiOwotCQkJLy8gU3BlY2lmeSBkZXN0aW5hdGlvbiB3aGVyZSBmaWxlIHdpbGwgYmUgdW56aXBwZWQKLQkJCS8vU3RyaW5nIGRlc3RpbmF0aW9uRGlyZWN0b3J5ID0KLQkJCS8vICJkOi9lY2xpcHNlZGV2L001X1NTRV9URVNUU19XT1JLU1BBQ0UvIjsgLy8iYzovdGVtcC8iOwotCQkJRmlsZSBzb3VyY2VaaXBGaWxlID0gbmV3IEZpbGUoaW5GaWxlTmFtZSk7Ci0JCQlGaWxlIHVuemlwRGVzdGluYXRpb25EaXJlY3RvcnkgPSBuZXcgRmlsZShkZXN0aW5hdGlvbkRpcmVjdG9yeSk7Ci0JCQkvLyBPcGVuIFppcCBmaWxlIGZvciByZWFkaW5nCi0JCQlaaXBGaWxlIHppcEZpbGUgPSBuZXcgWmlwRmlsZShzb3VyY2VaaXBGaWxlLCBaaXBGaWxlLk9QRU5fUkVBRCk7Ci0JCQkvLyBDcmVhdGUgYW4gZW51bWVyYXRpb24gb2YgdGhlIGVudHJpZXMgaW4gdGhlIHppcCBmaWxlCi0JCQlFbnVtZXJhdGlvbiB6aXBGaWxlRW50cmllcyA9IHppcEZpbGUuZW50cmllcygpOwotCQkJU3RyaW5nIHByb2plY3RGb2xkZXJOYW1lID0gbnVsbDsKLQkJCUlQcm9qZWN0IGN1cnJlbnRQcm9qZWN0ID0gbnVsbDsKLQkJCS8vIFByb2Nlc3MgZWFjaCBlbnRyeQotCQkJd2hpbGUgKHppcEZpbGVFbnRyaWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0JCQkJLy8gZ3JhYiBhIHppcCBmaWxlIGVudHJ5Ci0JCQkJWmlwRW50cnkgZW50cnkgPSAoWmlwRW50cnkpIHppcEZpbGVFbnRyaWVzLm5leHRFbGVtZW50KCk7Ci0JCQkJU3RyaW5nIGN1cnJlbnRFbnRyeSA9IGVudHJ5LmdldE5hbWUoKTsKLQkJCQkvL1N5c3RlbS5vdXQucHJpbnRsbigiRXh0cmFjdGluZzogIiArIGVudHJ5KTsKLQkJCQlGaWxlIGRlc3RGaWxlID0gbmV3IEZpbGUodW56aXBEZXN0aW5hdGlvbkRpcmVjdG9yeSwgY3VycmVudEVudHJ5KTsKLQkJCQkvLyBncmFiIGZpbGUncyBwYXJlbnQgZGlyZWN0b3J5IHN0cnVjdHVyZQotCQkJCUZpbGUgZGVzdGluYXRpb25QYXJlbnQgPSBkZXN0RmlsZS5nZXRQYXJlbnRGaWxlKCk7Ci0JCQkJLy8gY3JlYXRlIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHN0cnVjdHVyZSBpZiBuZWVkZWQKLQkJCQlkZXN0aW5hdGlvblBhcmVudC5ta2RpcnMoKTsKLQkJCQkvLyBleHRyYWN0IGZpbGUgaWYgbm90IGEgZGlyZWN0b3J5Ci0JCQkJaWYgKCFlbnRyeS5pc0RpcmVjdG9yeSgpKSB7Ci0JCQkJCUJ1ZmZlcmVkSW5wdXRTdHJlYW0gaXMgPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSh6aXBGaWxlLmdldElucHV0U3RyZWFtKGVudHJ5KSk7Ci0JCQkJCS8vIGVzdGFibGlzaCBidWZmZXIgZm9yIHdyaXRpbmcgZmlsZQotCQkJCQlieXRlIGRhdGFbXSA9IG5ldyBieXRlW0JVRkZFUl07Ci0JCQkJCS8vIHdyaXRlIHRoZSBjdXJyZW50IGZpbGUgdG8gZGlzawotCQkJCQlGaWxlT3V0cHV0U3RyZWFtIGZpbGVPdXRwdXRTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbShkZXN0RmlsZSk7Ci0JCQkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBkZXN0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbShCVUZGRVIpOwotCQkJCQkvLyByZWFkIGFuZCB3cml0ZSB1bnRpbCBsYXN0IGJ5dGUgaXMgZW5jb3VudGVyZWQKLQkJCQkJYm9vbGVhbiBlb2YgPSBmYWxzZTsKLQkJCQkJaW50IG5CeXRlcyA9IDA7Ci0JCQkJCXdoaWxlICghZW9mKSB7Ci0JCQkJCQluQnl0ZXMgPSBpcy5yZWFkKGRhdGEsIDAsIEJVRkZFUik7Ci0JCQkJCQlpZiAobkJ5dGVzICE9IC0xKSB7Ci0JCQkJCQkJZGVzdC53cml0ZShkYXRhLCAwLCBuQnl0ZXMpOwotCQkJCQkJfQotCQkJCQkJZWxzZSB7Ci0JCQkJCQkJZW9mID0gdHJ1ZTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQlkZXN0LmZsdXNoKCk7Ci0JCQkJCWRlc3QuY2xvc2UoKTsKLQkJCQkJZmlsZU91dHB1dFN0cmVhbS53cml0ZShkZXN0LnRvQnl0ZUFycmF5KCkpOwotCQkJCQlmaWxlT3V0cHV0U3RyZWFtLmNsb3NlKCk7Ci0JCQkJCWlzLmNsb3NlKCk7Ci0JCQkJCWlmIChwcm9qZWN0Rm9sZGVyTmFtZSAhPSBudWxsKQotCQkJCQkJaW1wb3J0RmlsZShkZXN0RmlsZSwgcHJvamVjdEZvbGRlck5hbWUpOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJLy8gbmVlZCBoYW5kbGUgdG8gdGhlIG1haW4gcHJvamVjdCBmb2xkZXIgdG8gY3JlYXRlCi0JCQkJCS8vIGNvbnRhaW5lclBhdGgKLQkJCQkJLy8gdW5saWtlIHZlcnNpb24gaW4gc3NlLnRlc3RzLCB3ZSBkb24ndCBjcmVhdGUgcHJvamVjdAotCQkJCQkvLyBmb3IKLQkJCQkJLy8gZXZlcnkgZGlyZWN0b3J5Ci0JCQkJCS8vCQkJCQlpZihwcm9qZWN0Rm9sZGVyTmFtZSA9PSBudWxsKSB7Ci0JCQkJCS8vCQkJCQkJcHJvamVjdEZvbGRlck5hbWUgPSBkZXN0RmlsZS5nZXROYW1lKCk7Ci0JCQkJCS8vCQkJCQkJZkNyZWF0ZWRQcm9qZWN0cy5hZGQocHJvamVjdEZvbGRlck5hbWUpOwotCQkJCQkvLwkJCQkJCQotCQkJCQkvLwkJCQkJCWN1cnJlbnRQcm9qZWN0ID0KLQkJCQkJLy8gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3RGb2xkZXJOYW1lKTsKLQkJCQkJLy8JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQl6aXBGaWxlLmNsb3NlKCk7Ci0JCQkvLyBmaXhlcyB3b3Jrc3BhY2UgbWV0YWRhdGEgZm9yIHRoZSBwcm9qZWN0Ci0JCQkvLyBmb3IgY2xlYW4gc3RhcnR1cCBuZXh0IHJ1bgotCQkJaWYgKGN1cnJlbnRQcm9qZWN0ICE9IG51bGwpIHsKLQkJCQl0cnkgewotCQkJCQlQYXRoIHByb2plY3RMb2NhdGlvbiA9IG5ldyBQYXRoKFBsYXRmb3JtLmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpKTsKLQkJCQkJY3JlYXRlUHJvamVjdChjdXJyZW50UHJvamVjdCwgcHJvamVjdExvY2F0aW9uLCBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCX0KLQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZXgpIHsKLQkJCQkJY2V4LnByaW50U3RhY2tUcmFjZSgpOwotCQkJCX0KLQkJCX0KLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7Ci0JCQlpb2UucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiAgCi0JICovCi0JcHVibGljIHZvaWQgcmVmcmVzaFdvcmtzcGFjZSgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSVdvcmtzcGFjZVJvb3Qgd3NSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJSVByb2plY3RbXSBwcm9qZWN0cyA9IHdzUm9vdC5nZXRQcm9qZWN0cygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3RzLmxlbmd0aDsgaSsrKSB7Ci0JCQlwcm9qZWN0c1tpXS5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJfQotCQl3c1Jvb3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogRGVsZXRlIHByb2plY3RzIGNyZWF0ZWQgKHVuemlwcGVkIGFuZCBpbXBvcnRlZCkgYnkgdGhpcyB1dGlsaXR5Ci0JICogCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBkZWxldGVQcm9qZWN0cygpIHRocm93cyBFeGNlcHRpb24gewotCQlmaW5hbCBJUHJvamVjdFtdIHByb2plY3RzID0gZ2V0Q3JlYXRlZFByb2plY3RzKCk7Ci0JCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBkZWxldGVPcCA9IG5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7Ci0JCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspIHsKLQkJCQkJcHJvamVjdHNbaV0uY2xlYXJIaXN0b3J5KG51bGwpOwotCQkJCQlwcm9qZWN0c1tpXS5jbG9zZShudWxsKTsKLQkJCQkJcHJvamVjdHNbaV0uZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOwotCQkJCX0KLQkJCQlyZWZyZXNoV29ya3NwYWNlKCk7Ci0JCQl9Ci0JCX07Ci0JCVdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBwcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJZGVsZXRlT3AucnVuKHByb2dyZXNzKTsKLQkJLy8gc2F2ZXMgdGhlIG5ldyB3b3Jrc3BhY2UgbWV0YWRhdGEKLQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnNhdmUodHJ1ZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgZGVsZXRlUHJvamVjdChTdHJpbmcgcHJvamVjdE5hbWUpIHRocm93cyBFeGNlcHRpb24gewotCQlmaW5hbCBTdHJpbmcgbmFtZSA9IHByb2plY3ROYW1lOwotCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQlmaW5hbCBJUHJvamVjdCBwcm9qID0gd3NSb290LmdldFByb2plY3QobmFtZSk7Ci0JCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBkZWxldGVPcCA9IG5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24ocHJvaikgewotCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQkvLwkJCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPQotCQkJCS8vIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCQkJLy8JCQkJSVByb2plY3QgcHJvaiA9IHdzUm9vdC5nZXRQcm9qZWN0KG5hbWUpOwotCQkJCWlmIChwcm9qICE9IG51bGwgJiYgcHJvai5leGlzdHMoKSkgewotCQkJCQlwcm9qLmNsZWFySGlzdG9yeShudWxsKTsKLQkJCQkJLy9wcm9qLmNsb3NlKG51bGwpOwotCQkJCQlwcm9qLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJCQl0cnkgewotCQkJCQkJcHJvai5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JCQkJCX0KLQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQkvLyBqdXN0IHRyeSBhZ2FpbiAobm90IHN1cmUgd2h5IHRoZXkgYXJlIG5vdCBiZWluZwotCQkJCQkJLy8gZGVsZXRlZCkKLQkJCQkJCXByb2oucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQkJCQlwcm9qLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJCQkJfQotCQkJCQkvL3Byb2ogPSBudWxsOwotCQkJCX0KLQkJCQlyZWZyZXNoV29ya3NwYWNlKCk7Ci0JCQl9Ci0JCX07Ci0JCVdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBwcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJZGVsZXRlT3AucnVuKHByb2dyZXNzKTsKLQkJLy8gc2F2ZXMgdGhlIG5ldyB3b3Jrc3BhY2UgbWV0YWRhdGEKLQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnNhdmUodHJ1ZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBJUHJvamVjdHMgdGhhdCB3ZXJlIHVuemlwcGVkIGFuZCBpbXBvcnRlZCBpbnRvIHRoZSB3b3Jrc3BhY2UgYnkKLQkgKiAgICAgICAgIHRoaXMgdXRpbGl0eQotCSAqLwotCXB1YmxpYyBJUHJvamVjdFtdIGdldENyZWF0ZWRQcm9qZWN0cygpIHsKLQkJSVdvcmtzcGFjZVJvb3Qgd3NSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJU3RyaW5nW10gcHJvamVjdE5hbWVzID0gKFN0cmluZ1tdKSBmQ3JlYXRlZFByb2plY3RzLnRvQXJyYXkobmV3IFN0cmluZ1tmQ3JlYXRlZFByb2plY3RzLnNpemUoKV0pOwotCQlJUHJvamVjdFtdIHByb2plY3RzID0gbmV3IElQcm9qZWN0W3Byb2plY3ROYW1lcy5sZW5ndGhdOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3ROYW1lcy5sZW5ndGg7IGkrKykgewotCQkJcHJvamVjdHNbaV0gPSB3c1Jvb3QuZ2V0UHJvamVjdChwcm9qZWN0TmFtZXNbaV0pOwotCQl9Ci0JCXJldHVybiBwcm9qZWN0czsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0SmF2YVByb2plY3QoU3RyaW5nIHByb2pOYW1lKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIHJlc3luY2gKLQkJcmVmcmVzaFdvcmtzcGFjZSgpOwotCQkvL2NoYW5nZSBwcmVyZXFzIHRvIGdldCB0aGlzIGZ1bmN0aW9uYWxpdHkgYmFjayBpbgotCQlJUHJvamVjdCBwcm9qID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2pOYW1lKTsKLQkJLy8gbmVlZCB0byBhZGQgamF2YSBuYXR1cmUsIG9yIGVsc2UgcHJvamVjdCB3b24ndCAiZXhpc3QoKSIgaW4gdGhlCi0JCS8vIGphdmEgZWxlbWVudCBzZW5zZQotCQlTdHJpbmdbXSBuYXR1cmVJZHMgPSB7Im9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmUifTsKLQkJaWYgKCFwcm9qLmlzT3BlbigpKSB7Ci0JCQlwcm9qLm9wZW4obnVsbCk7Ci0JCX0KLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvai5nZXREZXNjcmlwdGlvbigpOwotCQlkZXNjLnNldE5hdHVyZUlkcyhuYXR1cmVJZHMpOwotCQlwcm9qLnNldERlc2NyaXB0aW9uKGRlc2MsIG51bGwpOwotCX0KLQotCXByaXZhdGUgdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQYXRoIGxvY2F0aW9uUGF0aCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCW1vbml0b3IgPSBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCX0KLQkJbW9uaXRvci5iZWdpblRhc2soImNyZWF0aW5nIHRlc3QgcHJvamVjdCIsIDEwKTsKLQkJLy8gY3JlYXRlIHRoZSBwcm9qZWN0Ci0JCXRyeSB7Ci0JCQlpZiAoIXByb2plY3QuZXhpc3RzKCkpIHsKLQkJCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2MgPSBwcm9qZWN0LmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihwcm9qZWN0LmdldE5hbWUoKSk7Ci0JCQkJaWYgKFBsYXRmb3JtLmdldExvY2F0aW9uKCkuZXF1YWxzKGxvY2F0aW9uUGF0aCkpIHsKLQkJCQkJbG9jYXRpb25QYXRoID0gbnVsbDsKLQkJCQl9Ci0JCQkJZGVzYy5zZXRMb2NhdGlvbihsb2NhdGlvblBhdGgpOwotCQkJCXByb2plY3QuY3JlYXRlKGRlc2MsIG1vbml0b3IpOwotCQkJCW1vbml0b3IgPSBudWxsOwotCQkJfQotCQkJaWYgKCFwcm9qZWN0LmlzT3BlbigpKSB7Ci0JCQkJcHJvamVjdC5vcGVuKG1vbml0b3IpOwotCQkJCW1vbml0b3IgPSBudWxsOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vbml0b3IgIT0gbnVsbCkgewotCQkJCW1vbml0b3IuZG9uZSgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgZGVsZXRlUHJvamVjdChJUHJvamVjdCBmUHJvamVjdCkgdGhyb3dzIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLQkJZmluYWwgSVByb2plY3QgcHJvaiA9IGZQcm9qZWN0OwotCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gZGVsZXRlT3AgPSBuZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKHByb2opIHsKLQkJCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJLy8JCQkJSVdvcmtzcGFjZVJvb3Qgd3NSb290ID0KLQkJCQkvLyBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQkJCS8vCQkJCUlQcm9qZWN0IHByb2ogPSB3c1Jvb3QuZ2V0UHJvamVjdChuYW1lKTsKLQkJCQlpZiAocHJvaiAhPSBudWxsICYmIHByb2ouZXhpc3RzKCkpIHsKLQkJCQkJcHJvai5jbGVhckhpc3RvcnkobnVsbCk7Ci0JCQkJCS8vcHJvai5jbG9zZShudWxsKTsKLQkJCQkJcHJvai5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCQkJcHJvai5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JCQkJCS8vcHJvaiA9IG51bGw7Ci0JCQkJfQotCQkJCXJlZnJlc2hXb3Jrc3BhY2UoKTsKLQkJCX0KLQkJfTsKLQkJLy9Xb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3MgPSBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCWRlbGV0ZU9wLnJ1bihudWxsKTsKLQkJLy8gc2F2ZXMgdGhlIG5ldyB3b3Jrc3BhY2UgbWV0YWRhdGEKLQkJLy9SZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuc2F2ZSh0cnVlLCBudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy91dGlsL1dvcmtzcGFjZVByb2dyZXNzTW9uaXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy91dGlsL1dvcmtzcGFjZVByb2dyZXNzTW9uaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDdmN2QzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvdXRpbC9Xb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci0KLWNsYXNzIFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBpbXBsZW1lbnRzIElQcm9ncmVzc01vbml0b3IgewotCXByaXZhdGUgYm9vbGVhbiBmaW5pc2hlZCA9IGZhbHNlOwotCi0JcHVibGljIHZvaWQgYmVnaW5UYXNrKFN0cmluZyBuYW1lLCBpbnQgdG90YWxXb3JrKSB7Ci0JCS8vIG5vb3AKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkb25lKCkgewotCQlmaW5pc2hlZCA9IHRydWU7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNGaW5pc2hlZCgpIHsKLQkJcmV0dXJuIGZpbmlzaGVkOwotCX0KLQotCXB1YmxpYyB2b2lkIGludGVybmFsV29ya2VkKGRvdWJsZSB3b3JrKSB7Ci0JCS8vIG5vb3AKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0NhbmNlbGVkKCkgewotCQlyZXR1cm4gZmluaXNoZWQ7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0Q2FuY2VsZWQoYm9vbGVhbiB2YWx1ZSkgewotCQlpZiAodmFsdWUgPT0gdHJ1ZSkKLQkJCWZpbmlzaGVkID0gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRUYXNrTmFtZShTdHJpbmcgbmFtZSkgewotCQkvLyBub29wCi0JfQotCi0JcHVibGljIHZvaWQgc3ViVGFzayhTdHJpbmcgbmFtZSkgewotCQkvLyBub29wCi0JfQotCi0JcHVibGljIHZvaWQgd29ya2VkKGludCB3b3JrKSB7Ci0JCS8vIG5vb3AKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy93cml0ZS9UZXN0Q29kZWRXcml0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy93cml0ZS9UZXN0Q29kZWRXcml0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGY2NGM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2Rpbmcvd3JpdGUvVGVzdENvZGVkV3JpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcud3JpdGU7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db2RlZFN0cmVhbUNyZWF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkVuY29kaW5nUnVsZTsKLQotcHVibGljIGNsYXNzIFRlc3RDb2RlZFdyaXRlIGV4dGVuZHMgVGVzdENhc2UgewotCS8qKiBBIHRhYmxlIG9mIGhleCBkaWdpdHMgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyW10gaGV4RGlnaXQgPSB7JzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnfTsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmdCdWZmZXIgc0J1ZmYgPSBuZXcgU3RyaW5nQnVmZmVyKDIpOwotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGJ5dGVUb0hleChieXRlIGJ5dGVjaGFyKSB7Ci0JCXNCdWZmLnNldExlbmd0aCgwKTsKLQkJaW50IGxvdyA9IGJ5dGVjaGFyICYgMHhGOwotCQlpbnQgaGkgPSAoYnl0ZWNoYXIgPj4gNCkgJiAweEY7Ci0JCXNCdWZmLmFwcGVuZCh0b0hleChoaSkpOwotCQlzQnVmZi5hcHBlbmQodG9IZXgobG93KSk7Ci0JCXJldHVybiBzQnVmZi50b1N0cmluZygpOwotCX0KLQotCS8qKgotCSAqIENvbnZlcnQgYSBuaWJibGUgdG8gYSBoZXggY2hhcmFjdGVyCi0JICogCi0JICogQHBhcmFtIG5pYmJsZQotCSAqICAgICAgICAgICAgdGhlIG5pYmJsZSB0byBjb252ZXJ0LgotCSAqLwotCXByaXZhdGUgc3RhdGljIGNoYXIgdG9IZXgoaW50IG5pYmJsZSkgewotCQlyZXR1cm4gaGV4RGlnaXRbKG5pYmJsZSAmIDB4RildOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0JLyoqCi0JICogIAotCSAqLwotCXB1YmxpYyBUZXN0Q29kZWRXcml0ZSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBUZXN0Q29kZWRXcml0ZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGpzcCA9ICI8JUAgcGFnZSBjb250ZW50VHlwZT1cInRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0zXCIlPiI7Ci0JCUNvZGVkU3RyZWFtQ3JlYXRvciBjb2RlZFN0cmVhbUNyZWF0b3IgPSBuZXcgQ29kZWRTdHJlYW1DcmVhdG9yKCk7Ci0JCWNvZGVkU3RyZWFtQ3JlYXRvci5zZXQoImR1bW15LmpzcCIsIGpzcCk7Ci0JCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBjb2RlZFN0cmVhbUNyZWF0b3IuZ2V0Q29kZWRCeXRlQXJyYXlPdXRwdXRTdHJlYW0oRW5jb2RpbmdSdWxlLkNPTlRFTlRfQkFTRUQpOwotCQlpZiAoREVCVUcpIHsKLQkJCWRlYnVnUHJpbnQoInRlc3RTaW1wbGUiLCBqc3AsICJJU08tODg1OS0zIiwgb3V0cHV0U3RyZWFtKTsKLQkJfQotCQlhc3NlcnROb3ROdWxsKG91dHB1dFN0cmVhbSk7Ci0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZGVidWdQcmludChTdHJpbmcgdGVzdG5hbWUsIFN0cmluZyBvcmlnaW5hbFN0cmluZywgU3RyaW5nIGVuY29kaW5nLCBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4odGVzdG5hbWUpOwotCQlieXRlW10gYnl0ZXMgPSBvdXRwdXRTdHJlYW0udG9CeXRlQXJyYXkoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykgewotCQkJU3lzdGVtLm91dC5wcmludChieXRlVG9IZXgoYnl0ZXNbaV0pKTsKLQkJfQotCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJaWYgKGVuY29kaW5nID09IG51bGwpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihuZXcgU3RyaW5nKGJ5dGVzKSk7Ci0KLQkJfQotCQllbHNlIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihuZXcgU3RyaW5nKGJ5dGVzLCBlbmNvZGluZykpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNpbXBsZVVURjE2QkUoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcganNwID0gIjwlQCBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC9odG1sOyBjaGFyc2V0PVVURi0xNkJFXCIlPiI7Ci0JCUNvZGVkU3RyZWFtQ3JlYXRvciBjb2RlZFN0cmVhbUNyZWF0b3IgPSBuZXcgQ29kZWRTdHJlYW1DcmVhdG9yKCk7Ci0JCWNvZGVkU3RyZWFtQ3JlYXRvci5zZXQoImR1bW15LmpzcCIsIGpzcCk7Ci0JCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBjb2RlZFN0cmVhbUNyZWF0b3IuZ2V0Q29kZWRCeXRlQXJyYXlPdXRwdXRTdHJlYW0oRW5jb2RpbmdSdWxlLkNPTlRFTlRfQkFTRUQpOwotCQlpZiAoREVCVUcpIHsKLQkJCWRlYnVnUHJpbnQoInRlc3RTaW1wbGVVVEYxNkJFIiwganNwLCAiVVRGLTE2QkUiLCBvdXRwdXRTdHJlYW0pOwotCQl9Ci0JCWFzc2VydE5vdE51bGwob3V0cHV0U3RyZWFtKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVyKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJQ29kZWRTdHJlYW1DcmVhdG9yIGNvZGVkU3RyZWFtQ3JlYXRvciA9IG5ldyBDb2RlZFN0cmVhbUNyZWF0b3IoKTsKLQkJU3RyaW5nIHhtbFN0cmluZyA9ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtMTZcIj8+PHRhZz50ZXN0IHRleHQ8L3RhZz4iOwotCQljb2RlZFN0cmVhbUNyZWF0b3Iuc2V0KCJkdW1teS54bWwiLCB4bWxTdHJpbmcpOwotCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gY29kZWRTdHJlYW1DcmVhdG9yLmdldENvZGVkQnl0ZUFycmF5T3V0cHV0U3RyZWFtKEVuY29kaW5nUnVsZS5DT05URU5UX0JBU0VEKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlkZWJ1Z1ByaW50KCJ0ZXN0U2ltcGxlciIsIHhtbFN0cmluZywgIlVURi0xNiIsIG91dHB1dFN0cmVhbSk7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbChvdXRwdXRTdHJlYW0pOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNpbXBsZXN0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJQ29kZWRTdHJlYW1DcmVhdG9yIGNvZGVkU3RyZWFtQ3JlYXRvciA9IG5ldyBDb2RlZFN0cmVhbUNyZWF0b3IoKTsKLQkJU3RyaW5nIHRleHQgPSAidGVzdCB0ZXh0IjsKLQkJY29kZWRTdHJlYW1DcmVhdG9yLnNldCgiZHVtbXkueG1sIiwgdGV4dCk7Ci0JCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBjb2RlZFN0cmVhbUNyZWF0b3IuZ2V0Q29kZWRCeXRlQXJyYXlPdXRwdXRTdHJlYW0oRW5jb2RpbmdSdWxlLkNPTlRFTlRfQkFTRUQpOwotCQlpZiAoREVCVUcpIHsKLQkJCWRlYnVnUHJpbnQoInRlc3RTaW1wbGVzdCIsIHRleHQsIG51bGwsIG91dHB1dFN0cmVhbSk7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbChvdXRwdXRTdHJlYW0pOwotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcveG1sL1hNTEVuY29kaW5nVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcveG1sL1hNTEVuY29kaW5nVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM3ZGUyZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3htbC9YTUxFbmNvZGluZ1Rlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnhtbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0OwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldERlY29kZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5Db2RpbmdFcnJvckFjdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5FbmNvZGluZ01lbWVudG87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLklSZXNvdXJjZUNoYXJzZXREZXRlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcuVGVzdHNQbHVnaW47Ci0KLQotcHVibGljIGNsYXNzIFhNTEVuY29kaW5nVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBpbnQgUkVBRF9CVUZGRVJfU0laRSA9IDgwMDA7Ci0JcHJpdmF0ZSBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZVJvb3QgPSAidGVzdGZpbGVzLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZURpciA9ICJ4bWwvIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlTG9jYXRpb24gPSBmaWxlUm9vdCArIGZpbGVEaXI7Ci0KLQlwdWJsaWMgWE1MRW5jb2RpbmdUZXN0cyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0RmlsZVN0cmVhbShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBleHBlY3RlZElBTkFFbmNvZGluZywgSVJlc291cmNlQ2hhcnNldERldGVjdG9yIGRldGVjdG9yKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlGaWxlIGZpbGUgPSBUZXN0c1BsdWdpbi5nZXRUZXN0RmlsZShmaWxlbmFtZSk7Ci0JCWlmICghZmlsZS5leGlzdHMoKSkKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oZmlsZW5hbWUgKyAiIHdhcyBub3QgZm91bmQiKTsKLQkJSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpOwotCQkvL0lucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJSW5wdXRTdHJlYW0gaXN0cmVhbSA9IGdldE1hcmtTdXBwb3J0ZWRTdHJlYW0oaW5wdXRTdHJlYW0pOwotCQl0cnkgewotCQkJZGV0ZWN0b3Iuc2V0KGlzdHJlYW0pOwotCQkJRW5jb2RpbmdNZW1lbnRvIGVuY29kaW5nTWVtZW50byA9ICgoWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKWRldGVjdG9yKS5nZXRFbmNvZGluZ01lbWVudG8oKTsKLQkJCVN0cmluZyBmb3VuZElBTkFFbmNvZGluZyA9IGVuY29kaW5nTWVtZW50by5nZXRKYXZhQ2hhcnNldE5hbWUoKTsKLQkJCS8vIEkgY2hhbmdlZCBtYW55ICJlcXVhbHMiIHRvICJlcXVhbHNJZ25vcmVDYXNlIiBvbiAxMS80LzIwMDIsCi0JCQkvLyBzaW5jZQotCQkJLy8gc29tZSBpc3N1ZXMgd2l0aCBTSElGVF9KSVMgdnMuIFNoaWZ0X0pJUyB3ZXJlIGNhdXNpbmcgZmFpbHVyZXMuCi0JCQkvLyBXZSBkbyB3YW50IHRvIGJlIHRvbGVyYW50IG9uIGlucHV0LCBhbmQgYWNjZXB0IGVpdGhlciwgYnV0IEkKLQkJCS8vIHRoaW5rCi0JCQkvLyB0aGF0IFN1cHBvcnRlZEphdmFFbmNvZGluZ3MgbmVlZHMgdG8gYmUgY2hhbmdlZCB0byAicmVjb21tZW5kIgotCQkJLy8gU2hpZnRfSklTLgotCQkJYm9vbGVhbiBleHBlY3RlZElBTkFSZXN1bHQgPSBmYWxzZTsKLQkJCWV4cGVjdGVkSUFOQVJlc3VsdCA9IGV4cGVjdGVkSUFOQUVuY29kaW5nLmVxdWFsc0lnbm9yZUNhc2UoZm91bmRJQU5BRW5jb2RpbmcpOwotCi0JCQlhc3NlcnRUcnVlKCJlbmNvZGluZyB0ZXN0IGZpbGUgIiArIGZpbGVuYW1lICsgIiBleHBlY3RlZDogIiArIGV4cGVjdGVkSUFOQUVuY29kaW5nICsgIiBmb3VuZDogIiArIGZvdW5kSUFOQUVuY29kaW5nLCBleHBlY3RlZElBTkFSZXN1bHQpOwotCQkJLy8gYSB2ZXJ5IHNpbXBsZSByZWFkIHRlc3QgLi4uIHdpbGwgY2F1c2UgSlVuaXQgZXJyb3IgKG5vdCBmYWlsKSBpZiB0aHJvd3MgZXhjZXB0aW9uLgotCQkJZW5zdXJlQ2FuUmVhZChmaWxlbmFtZSwgZm91bmRJQU5BRW5jb2RpbmcsIGlzdHJlYW0pOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKGlzdHJlYW0gIT0gbnVsbCkgewotCQkJCWlzdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJCWlmIChpbnB1dFN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYTUxFbXB0eUZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiRW1wdHlGaWxlLnhtbCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtOCIsIG5ldyBYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTElsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC54bWwiOwotCQlTdHJpbmcgaWFuYUluRmlsZSA9ICJJU08tODg1OS0xIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgaWFuYUluRmlsZSwgbmV3IFhNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WE1MTm9ybWFsTm9uRGVmYXVsdCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb3JtYWxOb25EZWZhdWx0LnhtbCI7Ci0JCVN0cmluZyBpYW5hSW5GaWxlID0gIklTTy04ODU5LTEiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCBpYW5hSW5GaWxlLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYTUxOb0VuY29kaW5nKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk5vRW5jb2RpbmcueG1sIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi04IiwgbmV3IFhNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQkvKioKLQkgKiBDYXV0aW9uLCB3aGVuIHRoaXMgZmlsZSBwcmludHMgb3V0IGluIGNvbnNvbGUgKHdoZW4gZGVidWcgc2V0IHRvIHRydWUsIGl0IGFwcGVhcnMgCi0JICogaW5jb3JyZWN0IChkdWUgdG8gZm9udCBwcm9ibGVtcyBpbiBjb25zb2xlKS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTYoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZXaXRoSmFwYW5lc2VDaGFycy54bWwiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2QkUiLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgdGVzdCBzaG93cyB1bmljb2RlIEJPTSBzaG91bGQgdGFrZSBwcmlvcml0eSBvdmVyIHNldHRpbmdzL2RlZmF1bHRzCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFV0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNiIsIG5ldyBYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyB0ZXN0IHNob3dzIHVuaWNvZGUgQk9NIHNob3VsZCB0YWtlIHByaW9yaXR5IG92ZXIgc2V0dGluZ3MvZGVmYXVsdHMKLQkgKiBOb3RlOiBVVEYtMTYgPT0gVVRGLTE2QkUKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS54bWwiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2QkUiLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RVVEY4M0J5dGVCT00oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiVVRGOFdpdGgzQnl0ZUJPTS54bWwiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTgiLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCS8qKgotCSAqIEVuc3VyZXMgdGhhdCBhbiBJbnB1dFN0cmVhbSBoYXMgbWFyay9yZXNldCBzdXBwb3J0LgotCSAqLwotCXByaXZhdGUgc3RhdGljIElucHV0U3RyZWFtIGdldE1hcmtTdXBwb3J0ZWRTdHJlYW0oSW5wdXRTdHJlYW0gb3JpZ2luYWwpIHsKLQkJaWYgKG9yaWdpbmFsID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkJaWYgKG9yaWdpbmFsLm1hcmtTdXBwb3J0ZWQoKSkKLQkJCXJldHVybiBvcmlnaW5hbDsKLQkJcmV0dXJuIG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKG9yaWdpbmFsKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZ0J1ZmZlciByZWFkSW5wdXRTdHJlYW0oUmVhZGVyIHJlYWRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQotCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpbnQgbnVtUmVhZCA9IDA7Ci0JCWNoYXIgdEJ1ZmZbXSA9IG5ldyBjaGFyW1JFQURfQlVGRkVSX1NJWkVdOwotCQl3aGlsZSAoKG51bVJlYWQgPSByZWFkZXIucmVhZCh0QnVmZiwgMCwgdEJ1ZmYubGVuZ3RoKSkgIT0gLTEpIHsKLQkJCWJ1ZmZlci5hcHBlbmQodEJ1ZmYsIDAsIG51bVJlYWQpOwotCQl9Ci0JCXJldHVybiBidWZmZXI7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QganVzdCByZWFkcyB0byBzdHJlYW0sIHRvIGJlIHN1cmUgaXQgY2FuIGJlIHJlYWQgcGVyCi0JICogZW5jb2RpbmcsIHdpdGhvdXQgZXhjZXB0aW9uLgotCSAqLwotCXByaXZhdGUgdm9pZCBlbnN1cmVDYW5SZWFkKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGVuY29kaW5nLCBJbnB1dFN0cmVhbSBpblN0cmVhbSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQ2hhcnNldCBjaGFyc2V0ID0gQ2hhcnNldC5mb3JOYW1lKGVuY29kaW5nKTsKLQkJQ2hhcnNldERlY29kZXIgY2hhcnNldERlY29kZXIgPSBjaGFyc2V0Lm5ld0RlY29kZXIoKTsKLQkJY2hhcnNldERlY29kZXIub25NYWxmb3JtZWRJbnB1dChDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCQljaGFyc2V0RGVjb2Rlci5vblVubWFwcGFibGVDaGFyYWN0ZXIoQ29kaW5nRXJyb3JBY3Rpb24uUkVQT1JUKTsKLQotCQlJbnB1dFN0cmVhbVJlYWRlciByZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaW5TdHJlYW0sIGNoYXJzZXREZWNvZGVyKTsKLQkJU3RyaW5nQnVmZmVyIHN0cmluZ0J1ZmZlciA9IHJlYWRJbnB1dFN0cmVhbShyZWFkZXIpOwotCQlpZiAoREVCVUcpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKGZpbGVuYW1lKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihzdHJpbmdCdWZmZXIudG9TdHJpbmcoKSk7Ci0JCX0KLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3htbC9YTUxIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3htbC9YTUxIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyM2QwMjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy94bWwvWE1MSGVhZFRva2VuaXplclRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy54bWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkVuY29kaW5nUGFyc2VyQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5IZWFkUGFyc2VyVG9rZW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLlhNTEhlYWRUb2tlbml6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLlhNTEhlYWRUb2tlbml6ZXJDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5UZXN0c1BsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgWE1MSGVhZFRva2VuaXplclRlc3RlciBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAieG1sLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUhvbWUgPSAidGVzdGZpbGVzLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUxvY2F0aW9uID0gZmlsZUhvbWUgKyBmaWxlRGlyOwotCXByaXZhdGUgU3RyaW5nIGZFbmNvZGluZyA9IG51bGw7Ci0JcHJpdmF0ZSBIZWFkUGFyc2VyVG9rZW4gZkZpbmFsVG9rZW47Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0RmlsZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBleHBlY3RlZE5hbWUpIHsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgZXhwZWN0ZWROYW1lLCBudWxsKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0RmlsZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBleHBlY3RlZE5hbWUsIFN0cmluZyBleHBlY3RlZEZpbmFsVG9rZW5UeXBlKSB7Ci0KLQkJWE1MSGVhZFRva2VuaXplciB0b2tlbml6ZXIgPSBudWxsOwotCQlSZWFkZXIgZmlsZVJlYWRlciA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlpZiAoREVCVUcpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgICAiICsgZmlsZW5hbWUpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJfQotCQkJZmlsZVJlYWRlciA9IFRlc3RzUGx1Z2luLmdldEJ5dGVSZWFkZXIoZmlsZW5hbWUpOwotCQkJdG9rZW5pemVyID0gbmV3IFhNTEhlYWRUb2tlbml6ZXIoZmlsZVJlYWRlcik7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3Igb3BlbmluZyBmaWxlIFwiIiArIGZpbGVuYW1lICsgIlwiIik7Ci0JCX0KLQotCQlTdHJpbmcgcmVzdWx0VmFsdWUgPSBudWxsOwotCQl0cnkgewotCQkJcGFyc2UodG9rZW5pemVyKTsKLQkJCXJlc3VsdFZhbHVlID0gZkVuY29kaW5nOwotCQkJaWYgKERFQlVHKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJYTUwgSGVhZCBUb2tlbml6ZXIgRm91bmQgRW5jb2Rpbmc6ICIgKyByZXN1bHRWYWx1ZSk7Ci0JCQl9Ci0JCQlmaWxlUmVhZGVyLmNsb3NlKCk7Ci0JCX0KLQkJY2F0Y2ggKGphdmEuaW8uSU9FeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJBbiBJL08gZXJyb3Igb2NjdXJlZCB3aGlsZSBzY2FubmluZyA6Iik7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0JCX0KLQotCQlpZiAoZXhwZWN0ZWRGaW5hbFRva2VuVHlwZSAhPSBudWxsKSB7Ci0JCQlhc3NlcnRUcnVlKCJkaWQgbm90IGVuZCBhcyBleHBlY3RlZC4gZm91bmQ6ICAiICsgZkZpbmFsVG9rZW4uZ2V0VHlwZSgpLCBleHBlY3RlZEZpbmFsVG9rZW5UeXBlLmVxdWFscyhmRmluYWxUb2tlbi5nZXRUeXBlKCkpKTsKLQkJfQotCQllbHNlIHsKLQkJCWlmIChleHBlY3RlZE5hbWUgPT0gbnVsbCkgewotCQkJCS8vIFRPRE86IHRoaXMgdGVzdCBicmFuY2ggbmVlZHMgdG8gYmUgaW1wcm92ZWQgLi4uIGRvZXNuJ3QKLQkJCQkvLyBmYWlsCi0JCQkJLy8gYXMgaXQgc2hvdWxkCi0JCQkJLy8gKHN1Y2ggYXMgd2hlbiB0b2tlbml6ZXIgY2hhbmdlZCB0byByZXR1cm4gZWFybHkgd2hlbgotCQkJCS8vIFVuaWNvZGUKLQkJCQkvLyBzdHJlYW0gZm91bmQpLgotCQkJCWFzc2VydFRydWUoImV4cGVjdGVkIG5vIGVuY29kaW5nLCBidXQgZm91bmQ6ICIgKyByZXN1bHRWYWx1ZSwgcmVzdWx0VmFsdWUgPT0gbnVsbCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlhc3NlcnRUcnVlKCJleHBlY3RlZCAiICsgZXhwZWN0ZWROYW1lICsgIiBidXQgZm91bmQgIiArIHJlc3VsdFZhbHVlLCBleHBlY3RlZE5hbWUuZXF1YWxzKHJlc3VsdFZhbHVlKSk7Ci0JCQl9Ci0JCX0KLQotCX0KLQotCXByaXZhdGUgdm9pZCBwYXJzZShYTUxIZWFkVG9rZW5pemVyIHRva2VuaXplcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSGVhZFBhcnNlclRva2VuIHRva2VuID0gbnVsbDsKLQkJU3RyaW5nIHRva2VuVHlwZSA9IG51bGw7Ci0JCWRvIHsKLQkJCXRva2VuID0gdG9rZW5pemVyLmdldE5leHRUb2tlbigpOwotCQkJdG9rZW5UeXBlID0gdG9rZW4uZ2V0VHlwZSgpOwotCQkJLy8gbm9ybWFsbHkgInBhcnNpbmciIHRoZSB0b2tlbnMgc2hvdWxkIGJlIGRvbmUgYnkgcGFyc2VyCi0JCQkvLyBAc2VlLCBYTUxSZXNvdXJjZUVuY29kb2luZ0RldGVjdG9yCi0JCQkvLyBidXQgd2UnbGwKLQkJCS8vIGRvIGl0IGhlcmUgZm9yIGEgbGl0dGxlCi0JCQkvLyBtb3JlIGluZGVwZW5kZW50IHRlc3QuCi0JCQlpZiAodG9rZW5UeXBlID09IEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLlVURjE2QkUpIHsKLQkJCQlmRW5jb2RpbmcgPSAiVVRGMTZCRUluU3RyZWFtIjsKLQkJCX0KLQkJCWlmICh0b2tlblR5cGUgPT0gRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVVRGMTZMRSkgewotCQkJCWZFbmNvZGluZyA9ICJVVEYxNkxFSW5TdHJlYW0iOwotCQkJfQotCQkJaWYgKHRva2VuVHlwZSA9PSBFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5VVEY4M0J5dGVCT00pIHsKLQkJCQlmRW5jb2RpbmcgPSAiVVRGODNCeXRlQk9NSW5TdHJlYW0iOwotCQkJfQotCQkJaWYgKHRva2VuVHlwZSA9PSBYTUxIZWFkVG9rZW5pemVyQ29uc3RhbnRzLlhNTERlbEVuY29kaW5nKSB7Ci0JCQkJaWYgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQkJdG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQkJCXRva2VuVHlwZSA9IHRva2VuLmdldFR5cGUoKTsKLQkJCQkJaWYgKGlzTGVnYWxTdHJpbmcodG9rZW5UeXBlKSkgewotCQkJCQkJZkVuY29kaW5nID0gdG9rZW4uZ2V0VGV4dCgpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKTsKLQkJLy8gZm9yIHRlc3RpbmcKLQkJZkZpbmFsVG9rZW4gPSB0b2tlbjsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNMZWdhbFN0cmluZyhTdHJpbmcgdG9rZW5UeXBlKSB7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0JCWlmICh0b2tlblR5cGUgIT0gbnVsbCkgewotCQkJcmVzdWx0ID0gdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5TdHJpbmdWYWx1ZSkgfHwgdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5VbkRlbGltaXRlZFN0cmluZ1ZhbHVlKSB8fCB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLkludmFsaWRUZXJtaW5hdGVkU3RyaW5nVmFsdWUpIHx8IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuSW52YWxpZFRlcm1pbnRhdGVkVW5EZWxpbWl0ZWRTdHJpbmdWYWx1ZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBOb3JtYWwgWE1MRGVjbGFyYXRpb24gd2l0aCBkZWZhdWx0IGVuY29kaW5nIHNwZWNpZmllZCAoVVRGLTgpCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJlc3RDYXNlKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdE5vcm1hbENhc2UueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi04Iik7Ci0KLQl9Ci0KLQkvKioKLQkgKiBUaGlzIGlzIGEgVVRGLTE2IGZpbGUgKFVuaWNvZGUgYnl0ZXMgaW4gQk9NKS4gU28sIHRoZSB0b2tlbml6ZXIgYnkKLQkgKiBpdHNlbGYgY2FuJ3QgcmVhZCBjb3JyZWN0bHkuIFJldHVybnMgbnVsbCBpbiAicHVyZSIgdG9rZW5pemVyIHRlc3QsIGJ1dAotCSAqIGVuY29kaW5nIGRldGVjdG9yIGNhc2Ugc2hvdWxkIHN0aWxsIGhhbmRsZSBzaW5jZSBsb29rcyBmb3IgYnl0ZXMgZmlyc3QuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFVURjE2KCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdFVURjE2LnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYxNkJFSW5TdHJlYW0iKTsKLQl9Ci0KLQkvKioKLQkgKiBKdXN0IHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBjaG9rZSBvbiBlbXB0eSBmaWxlLgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RFbXB0eUZpbGUoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJFbXB0eUZpbGUueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogVGVzdGluZyBhcyBhIHJlc3VsdCBvZiBDTVZDIGRlZmVjdCAyMTc3MjAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RVVDSlAoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJldWNqcC54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiRVVDLUpQIik7Ci0JfQotCi0JLyoqCi0JICogRXh0ZW5kZWQgWE1MIERlY2xhcmF0aW9uIHRoYXQgY29udGFpbnMgJ3N0YW5kYWxvbmUnIGF0dHJpYnV0ZQotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RFeHRyYUF0dHJDYXNlKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdEV4dHJhVmFsaWRTdHVmZi54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTgiKTsKLQotCX0KLQotCS8qKgotCSAqIEEgY2FzZSB3aXRoIGEgdmFsaWQgZW5jb2RpbmcsIGJ1dCBleHRyYSBhdHRyaWJ1dGVzIHdoaWNoIGFyZSBub3QKLQkgKiB2YWxpZC9tZWFuaW5nZnVsLgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RFeHRyYUp1bmtDYXNlKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdEV4dHJhSnVuay54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktMSIpOwotCX0KLQotCS8qKgotCSAqIE1pc3NpbmcgMiBxdW90ZXMsIG9uZSBhbmQgZW5kIG9mIHZlcnNpb24gdmFsdWUgYW5kIG9uZSBhdCBiZWdpbm5pbmcgb2YKLQkgKiBlbmNvZGluZyB2YWx1ZS4gSW4gdGhpcyBjYXNlLCB0b2tlbml6ZXIgaGFuZGxlcyBhcyB1bmRlbGltaXRlIHN0cmluZywKLQkgKiBidXQgaWYgd2UgZXZlciBtb2RpZml5IHRvIGFsc28gbG9vayBmb3IgJ3ZlcnNpb24nLCB0aGVuIHdvdWxkIG5vdCB3b3JrCi0JICogdGhlIHNhbWUuCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdElsbEZvcm1lZCgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RJbGxGb3JtZWQueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogTWlzc2luZyBYTUxEZWNsIGVuZCB0YWcgLi4uIHdlIHNob3VsZCBiZSBhYmxlIHRvIHNhZmVseSBndWVzcy4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SWxsRm9ybWVkMigpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RJbGxGb3JtZWQyLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtOCIpOwotCX0KLQotCS8qKgotCSAqIE1pc3NpbmcgZW5kIHF1b3RlIG9uIFVURi04IGF0dHJpYnV0ZSwgc28gcGlja3MgdXAgZm9sbG93aW5nIGF0dHJpYnRlCi0JICogdG9vLgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RJbGxGb3JtZWQzKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdElsbEZvcm1lZDMueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi04IHN0YW5kYWxvbmU9Iik7Ci0JfQotCi0JLyoqCi0JICogTWlzc2luZyBlbmQgcXVvdGUgb24gVVRGLTggYXR0cmlidXRlLCBidXQgdGhlbiBYTUxEZWNsRW5kcywgc28gc2hvdWxkCi0JICogYmUgYWJsZSB0byBoYW5kbGUKLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SWxsRm9ybWVkNCgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RJbGxGb3JtZWQ0LnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtOCIpOwotCX0KLQotCS8qKgotCSAqIFRlc3Qgb2YgbWlzc2luZyBlbmQgcXVvdGUgb24gZW5jb2RpbmcgdmFsdWUuCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdElsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS0xIik7Ci0JfQotCi0JLyoqCi0JICogRW1wdHkgc3RyaW5nIGFzIGVuY29kaW5nIHZhbHVlOyAoQW5kLCBtYWxmb3JtZWQgaW5wdXQsIGZvciBVVEYtOCAuLi4KLQkgKiBzaG91bGQgbm90IGVmZmVjdCByZXN1bHRzIG9mIHRoaXMgbGV2ZWwgb2YgdGVzdCkuCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1hbGZvcm1lZE5vRW5jb2RpbmcoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJNYWxmb3JtZWROb0VuY29kaW5nLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICIiKTsKLQl9Ci0KLQkvKioKLQkgKiBFbXB0eSBzdHJpbmcgYXMgZW5jb2RpbmcgdmFsdWU7IChBbmQsIG1hbGZvcm1lZCBpbnB1dCwgZm9yIFVURi04IC4uLgotCSAqIHNob3VsZCBub3QgZWZmZWN0IHJlc3VsdHMgb2YgdGhpcyBsZXZlbCBvZiB0ZXN0KS4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWFsZm9ybWVkTm9FbmNvZGluZ1hTTCgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk1hbGZvcm1lZE5vRW5jb2RpbmcueHNsIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIiIpOwotCX0KLQotCS8qKgotCSAqIFhNTERlY2xhcmF0aW9uIG5vdCBhbGwgb24gc2FtZSBsaW5lCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE11bHRpTGluZUNhc2UoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0TXVsdGlMaW5lLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS0xIik7Ci0KLQl9Ci0KLQkvKioKLQkgKiBObyBlbmNvZGluZyBpbiBYTUxEZWNsYXJhdGlvbgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROb0VuY29kaW5nKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTm9FbmNvZGluZy54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiA/SXMgdGhpcyBhIGR1cD8KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9FbmNvZGluZ0Nhc2UoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0Tm9FbmNvZGluZ1ZhbHVlLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIE5vcm1hbCBYTUxEZWNsYXJhdGlvbiB3aXRoIElTTy0xIHNwZWNpZmllZAotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROb3JtYWxOb25EZWZhdWx0KCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTm9ybWFsTm9uRGVmYXVsdC54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktMSIpOwotCX0KLQotCS8qKgotCSAqIE5vIFhNTERlY2xhcmF0aW9uIGF0IGFsbC4gKEludmFsaWQsIGJ1dCBzaG91bGQgc3RpbGwgYmUgYWJsZSB0byBwYXJzZSkuCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5vWE1MRGVjbCgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3ROb1hNTERlY2wueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogSGFyZCB0byBoYW5kbGUgc2FmZWx5IChtYXkgYXBwZWFyIGluIGNvbW1lbnQsIGZvciBleGFtcGxlKS4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9YTUxEZWNsQXRGaXJzdCgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3ROb1hNTERlY2xBdEZpcnN0LnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgdGVzdCBpcyBqdXN0IHRvIG1ha2Ugc3VyZSB0aGUgc2Nhbm5pbmcgZW5kcyBiZWZvcmUgZW5kIG9mIGZpbGUgaXMKLQkgKiByZWFjaGVkLgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROb1hNTERlY2xJbkxhcmdlRmlsZSgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3ROb1hNTERlY2xJbkxhcmdlRmlsZS54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsLCBFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5NQVhfQ0hBUlNfUkVBQ0hFRCk7Ci0JfQotCi0JLyoqCi0JICogVGVzdGluZyBhcyBhIHJlc3VsdCBvZiBDTVZDIGRlZmVjdCAyMTc3MjAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0c2hpZnRqaXMoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJzaGlmdGppcy54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiU2hpZnRfSklTIik7Ci0JfQotCi0JLyoqCi0JICogVGVzdGluZyBhcyBhIHJlc3VsdCBvZiBDTVZDIGRlZmVjdCAyMTc3MjAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZMRVdpdGhKYXBhbmVzZUNoYXJzKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURjE2TEVJblN0cmVhbSIpOwotCX0KLQotCS8qKgotCSAqIFRlc3RpbmcgYXMgYSByZXN1bHQgb2YgQ01WQyBkZWZlY3QgMjE3NzIwCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFVURjE2QkVXaXRoSmFwYW5lc2VDaGFycygpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGMTZCRUluU3RyZWFtIik7Ci0JfQotCi0JLyoqCi0JICogQSBjb21tb24gY2FzZS4KLQkgKiAKLQkgKi8KLQkgcHVibGljIHZvaWQgdGVzdFVURjhXaXRoM0J5dGVCT00oKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJVVEY4V2l0aDNCeXRlQk9NLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEY4M0J5dGVCT01JblN0cmVhbSIpOwotCX0KLQlwdWJsaWMgdm9pZCBVVEYxNkxFQXRTdGFydE9mTGFyZ2VGaWxlKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiVVRGMTZMRUF0U3RhcnRPZkxhcmdlRmlsZS54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGMTZMRUluU3RyZWFtIik7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcveG1sL1hNTE1hbGZvcm1lZElucHV0VGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcveG1sL1hNTE1hbGZvcm1lZElucHV0VGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM0N2QyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3htbC9YTUxNYWxmb3JtZWRJbnB1dFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnhtbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0OwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldERlY29kZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5Db2RpbmdFcnJvckFjdGlvbjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0Lk1hbGZvcm1lZElucHV0RXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkVuY29kaW5nTWVtZW50bzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuSVJlc291cmNlQ2hhcnNldERldGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5leGNlcHRpb25zLk1hbGZvcm1lZElucHV0RXhjZXB0aW9uV2l0aERldGFpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcuVGVzdHNQbHVnaW47Ci0KLQotcHVibGljIGNsYXNzIFhNTE1hbGZvcm1lZElucHV0VGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBpbnQgUkVBRF9CVUZGRVJfU0laRSA9IDgwMDA7Ci0JcHJpdmF0ZSBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZVJvb3QgPSAidGVzdGZpbGVzLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZURpciA9ICJ4bWwvIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlTG9jYXRpb24gPSBmaWxlUm9vdCArIGZpbGVEaXI7Ci0KLQlwdWJsaWMgWE1MTWFsZm9ybWVkSW5wdXRUZXN0cyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBmb3IgYSBmaWxlLCBmaWxlbmFtZSB0aGF0IHNob3VsZCB0aHJvdyBhCi0JICogTWFsZm9ybWVkSW5wdXRFeGNlcHRpb25XaXRoRGV0YWlsIGF0IGNoYXJhY3RlciwgZXhwZWN0ZWRQb3NpdGlvbi4gVGhpcwotCSAqIGhhcHBlbnMgd2hlbiBubyBlbmNvZGluZyBpcyBzcGVjaWZpZWQsIHNvIHRoZSBkZWZhdWx0IGlzIHVzZWQsIGJ1dAotCSAqIHRoZXJlIGFyZSBjaGFyYWN0ZXJzIHRoYXQgdGhlIGRlZmF1bHQgZW5jb2RpbmcgZG9lcyBub3QgcmVjb2duaXplCi0JICovCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdE1hbGZvcm1lZElucHV0KFN0cmluZyBmaWxlbmFtZSwgSVJlc291cmNlQ2hhcnNldERldGVjdG9yIGRldGVjdG9yLCBpbnQgZXhwZWN0ZWRQb3NpdGlvbikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJRXhjZXB0aW9uIGZvdW5kRXhjZXB0aW9uID0gbnVsbDsKLQkJaW50IGJhZENoYXJQb3NpdGlvbiA9IC0xOwotCQlGaWxlIGZpbGUgPSBUZXN0c1BsdWdpbi5nZXRUZXN0RmlsZShmaWxlbmFtZSk7Ci0JCWlmICghZmlsZS5leGlzdHMoKSkKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oZmlsZW5hbWUgKyAiIHdhcyBub3QgZm91bmQiKTsKLQkJSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpOwotCQlJbnB1dFN0cmVhbSBpc3RyZWFtID0gZ2V0TWFya1N1cHBvcnRlZFN0cmVhbShpbnB1dFN0cmVhbSk7Ci0JCWRldGVjdG9yLnNldChpc3RyZWFtKTsKLQkJLy8gSUVuY29kZWREb2N1bWVudCBkb2MgPQotCQkvLyBkZXRlY3Rvci5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoZmlsZW5hbWUsIGlzdHJlYW0pOwotCQlFbmNvZGluZ01lbWVudG8gZW5jb2RpbmdNZW1lbnRvID0gKChYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IpZGV0ZWN0b3IpLmdldEVuY29kaW5nTWVtZW50bygpOwotCQlTdHJpbmcgZm91bmRJQU5BRW5jb2RpbmcgPSBlbmNvZGluZ01lbWVudG8uZ2V0SmF2YUNoYXJzZXROYW1lKCk7Ci0KLQkJQ2hhcnNldCBjaGFyc2V0ID0gQ2hhcnNldC5mb3JOYW1lKGZvdW5kSUFOQUVuY29kaW5nKTsKLQkJQ2hhcnNldERlY29kZXIgY2hhcnNldERlY29kZXIgPSBjaGFyc2V0Lm5ld0RlY29kZXIoKTsKLQkJY2hhcnNldERlY29kZXIub25NYWxmb3JtZWRJbnB1dChDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCQljaGFyc2V0RGVjb2Rlci5vblVubWFwcGFibGVDaGFyYWN0ZXIoQ29kaW5nRXJyb3JBY3Rpb24uUkVQT1JUKTsKLQotCQlpc3RyZWFtLmNsb3NlKCk7Ci0JCWlucHV0U3RyZWFtLmNsb3NlKCk7Ci0KLQkJLy8gbm93LCB0cnkgcmVhZGluZyBhcyBwZXIgZW5jb2RpbmcKLQkJaW5wdXRTdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpOwotCQkvLyBza2lwIEJPTSBmb3IgdGhpcyBjYXNlCi0JCS8vIFN5c3RlbS5vdXQucHJpbnRsbihpbnB1dFN0cmVhbS5yZWFkKCkpOwotCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oaW5wdXRTdHJlYW0ucmVhZCgpKTsKLQkJLy8gU3lzdGVtLm91dC5wcmludGxuKGlucHV0U3RyZWFtLnJlYWQoKSk7Ci0JCUlucHV0U3RyZWFtUmVhZGVyIHJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpbnB1dFN0cmVhbSwgY2hhcnNldERlY29kZXIpOwotCi0JCXRyeSB7Ci0JCQkvLyBqdXN0IHRyeSByZWFkaW5nIC4uLiBzaG91bGQgdGhyb3cgZXhjZXB0aW9uCi0JCQkvLyBleGNlcHRpb24pCi0JCQlyZWFkSW5wdXRTdHJlYW0ocmVhZGVyKTsKLQkJfQotCQljYXRjaCAoTWFsZm9ybWVkSW5wdXRFeGNlcHRpb24gZSkgewotCQkJLy8gYXMgZXhwZWN0ZWQsIG5vdyBkbyBkZXRhaWxlZCBjaGVja2luZy4KLQkJCWlucHV0U3RyZWFtLmNsb3NlKCk7Ci0JCQlpc3RyZWFtLmNsb3NlKCk7Ci0JCQlpbnB1dFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7Ci0JCQljaGFyc2V0RGVjb2RlciA9IGNoYXJzZXQubmV3RGVjb2RlcigpOwotCQkJY2hhcnNldERlY29kZXIub25NYWxmb3JtZWRJbnB1dChDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCQkJY2hhcnNldERlY29kZXIub25Vbm1hcHBhYmxlQ2hhcmFjdGVyKENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0JCQlyZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaW5wdXRTdHJlYW0sIGNoYXJzZXREZWNvZGVyKTsKLQkJCWlzdHJlYW0gPSBnZXRNYXJrU3VwcG9ydGVkU3RyZWFtKGlucHV0U3RyZWFtKTsKLQkJCXRyeSB7Ci0JCQkJaGFuZGxlTWFsRm9ybWVkSW5wdXRfRGV0YWlsQ2hlY2tpbmcocmVhZGVyLCBmb3VuZElBTkFFbmNvZGluZyk7Ci0JCQl9Ci0JCQljYXRjaCAoTWFsZm9ybWVkSW5wdXRFeGNlcHRpb25XaXRoRGV0YWlsIHNlKSB7Ci0JCQkJZm91bmRFeGNlcHRpb24gPSBzZTsKLQkJCQliYWRDaGFyUG9zaXRpb24gPSBzZS5nZXRDaGFyUG9zaXRpb24oKTsKLQkJCX0KLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKGlzdHJlYW0gIT0gbnVsbCkgewotCQkJCWlzdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJCWlmIChpbnB1dFN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQotCQl9Ci0JCS8vIGhhbmRsZSBhZGp1c3RtZW50cyBoZXJlIGZvciBWTSBkaWZmZXJuY2VzOgotCQkvLyBmb3Igbm93IGl0cyBlaXRoZXIgNDkgb3IgNDkgKyAyIEJPTXMgKDUxKQotCQkvLyBjYW4gYmUgc21hcnRpbmcgbGF0ZXIuCi0JCWFzc2VydFRydWUoIk1hbGZvcm1lZElucHV0RXhjZXB0aW9uIHdhcyBub3QgdGhyb3duIGFzIGV4cGVjdGVkIGZvciBmaWxlbmFtZTogIiArIGZpbGVuYW1lICsgIiBFeGNlcHRpb24gdGhyb3duOiIgKyBmb3VuZEV4Y2VwdGlvbiwgZm91bmRFeGNlcHRpb24gaW5zdGFuY2VvZiBNYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbldpdGhEZXRhaWwpOwotCQlhc3NlcnRUcnVlKCJXcm9uZyBjaGFyYWN0ZXIgcG9zaXRpb24gZGV0ZWN0ZWQgaW4gTWFsZm9ybWVkSW5wdXRFeGNlcHRpb24uICBFeHBlY3RlZDogIiArIGV4cGVjdGVkUG9zaXRpb24gKyAiIEZvdW5kOiAiICsgYmFkQ2hhclBvc2l0aW9uLCAoYmFkQ2hhclBvc2l0aW9uID09IGV4cGVjdGVkUG9zaXRpb24pIHx8IGJhZENoYXJQb3NpdGlvbiA9PSBleHBlY3RlZFBvc2l0aW9uIC0gMik7Ci0JfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdFhTTE1hbGZvcm1lZElucHV0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkvLyBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTWFsZm9ybWVkTm9FbmNvZGluZy54c2wiOwotCS8vIGRvVGVzdE1hbGZvcm1lZElucHV0KGZpbGVuYW1lLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCksIDIxMSk7Ci0JLy8gfQotCi0JLyoqCi0JICogRW5zdXJlcyB0aGF0IGFuIElucHV0U3RyZWFtIGhhcyBtYXJrL3Jlc2V0IHN1cHBvcnQuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSW5wdXRTdHJlYW0gZ2V0TWFya1N1cHBvcnRlZFN0cmVhbShJbnB1dFN0cmVhbSBvcmlnaW5hbCkgewotCQlpZiAob3JpZ2luYWwgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCQlpZiAob3JpZ2luYWwubWFya1N1cHBvcnRlZCgpKQotCQkJcmV0dXJuIG9yaWdpbmFsOwotCQlyZXR1cm4gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0ob3JpZ2luYWwpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nQnVmZmVyIHJlYWRJbnB1dFN0cmVhbShSZWFkZXIgcmVhZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCi0JCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWludCBudW1SZWFkID0gMDsKLQkJY2hhciB0QnVmZltdID0gbmV3IGNoYXJbUkVBRF9CVUZGRVJfU0laRV07Ci0JCXdoaWxlICgobnVtUmVhZCA9IHJlYWRlci5yZWFkKHRCdWZmLCAwLCB0QnVmZi5sZW5ndGgpKSAhPSAtMSkgewotCQkJaWYgKERFQlVHKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKHRCdWZmWzBdKTsKLQkJCX0KLQkJCWJ1ZmZlci5hcHBlbmQodEJ1ZmYsIDAsIG51bVJlYWQpOwotCQl9Ci0JCXJldHVybiBidWZmZXI7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTE1hbGZvcm1lZElucHV0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk1hbGZvcm1lZE5vRW5jb2RpbmcueG1sIjsKLQkJZG9UZXN0TWFsZm9ybWVkSW5wdXQoZmlsZW5hbWUsIG5ldyBYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSwgNTEpOwotCX0KLQotCXByaXZhdGUgdm9pZCBoYW5kbGVNYWxGb3JtZWRJbnB1dF9EZXRhaWxDaGVja2luZyhSZWFkZXIgcmVhZGVyLCBTdHJpbmcgZW5jb2RpbmdOYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24sIE1hbGZvcm1lZElucHV0RXhjZXB0aW9uV2l0aERldGFpbCB7Ci0JCWludCBjaGFyUG9zdGlvbiA9IC0xOwotCQljaGFyUG9zdGlvbiA9IGdldENoYXJQb3N0aW9uT2ZGYWlsdXJlKHJlYWRlcik7Ci0JCS8vIGFsbCBvZiB0aGF0IGp1c3QgdG8gdGhyb3cgbW9yZSBhY2N1cmF0ZSBlcnJvcgotCQkvLyBub3RlOiB3ZSBkbyB0aGUgY29udmVyc2lvbiB0byBpYW5hTmFtZSwgaW5zdGVhZCBvZiB1c2luZyB0aGUgbG9jYWwKLQkJLy8gdmFyaWFibGUsCi0JCS8vIGJlY2F1c2UgdGhpcyBpcyB1bHRpbWF0ZWx5IG9ubHkgZm9yIHRoZSB1c2VyIGVycm9yIG1lc3NhZ2UgKHRoYXQKLQkJLy8gaXMsCi0JCS8vIHRoZSBlcnJvciBvY2N1cnJlZAotCQkvLyBpbiBjb250ZXh0IG9mIGphdmFFbmNvZGluZ05hbWUgbm8gbWF0dGVyIHdoYXQgaWFuYUVuY29kaW5nTmFtZSBpcwotCQl0aHJvdyBuZXcgTWFsZm9ybWVkSW5wdXRFeGNlcHRpb25XaXRoRGV0YWlsKGVuY29kaW5nTmFtZSwgY2hhclBvc3Rpb24pOwotCX0KLQotCXByaXZhdGUgaW50IGdldENoYXJQb3N0aW9uT2ZGYWlsdXJlKFJlYWRlciByZWFkZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWludCBjaGFyUG9zaXRpb24gPSAxOwotCQlpbnQgY2hhclJlYWQgPSAtMTsKLQkJaW50IHJlc3VsdCA9IC0xOwotCQlib29sZWFuIGVycm9yRm91bmQgPSBmYWxzZTsKLQkJZG8gewotCQkJdHJ5IHsKLQkJCQlpZiAocmVhZGVyLnJlYWR5KCkpIHsKLQkJCQkJY2hhclJlYWQgPSByZWFkZXIucmVhZCgpOwotCQkJCX0KLQkJCQlpZiAoREVCVUcpIHsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKGNoYXJQb3NpdGlvbiArICI6ICIgKyBlc2NhcGUoKGNoYXIpIGNoYXJSZWFkLCB0cnVlKSk7Ci0JCQkJfQotCQkJCWNoYXJQb3NpdGlvbisrOwotCQkJfQotCQkJY2F0Y2ggKE1hbGZvcm1lZElucHV0RXhjZXB0aW9uIGUpIHsKLQkJCQkvLyB0aGlzIGlzIGV4cGVjdGVkLCBzaW5jZSB3ZSdyZSBleHBlY3RpbmcgZmFpbHVyZSwKLQkJCQkvLyBzbyBubyBuZWVkIHRvIGRvIGFueXRoaW5nLgotCQkJCWVycm9yRm91bmQgPSB0cnVlOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXdoaWxlICgoY2hhclJlYWQgIT0gLTEgJiYgIWVycm9yRm91bmQpICYmIHJlYWRlci5yZWFkeSgpKTsKLQotCQlpZiAoZXJyb3JGb3VuZCkKLQkJCXJlc3VsdCA9IGNoYXJQb3NpdGlvbjsKLQkJZWxzZQotCQkJcmVzdWx0ID0gLTE7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZXNjYXBlKGNoYXIgYUNoYXIsIGJvb2xlYW4gZXNjYXBlU3BhY2UpIHsKLQotCQlTdHJpbmdCdWZmZXIgb3V0QnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlzd2l0Y2ggKGFDaGFyKSB7Ci0JCQljYXNlICcgJyA6Ci0JCQkJaWYgKGVzY2FwZVNwYWNlKQotCQkJCQlvdXRCdWZmZXIuYXBwZW5kKCdcXCcpOwotCi0JCQkJb3V0QnVmZmVyLmFwcGVuZCgnICcpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAnXFwnIDoKLQkJCQlvdXRCdWZmZXIuYXBwZW5kKCdcXCcpOwotCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ1xcJyk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdcdCcgOgotCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ1xcJyk7Ci0JCQkJb3V0QnVmZmVyLmFwcGVuZCgndCcpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAnXG4nIDoKLQkJCQlvdXRCdWZmZXIuYXBwZW5kKCdcXCcpOwotCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ24nKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgJ1xyJyA6Ci0JCQkJb3V0QnVmZmVyLmFwcGVuZCgnXFwnKTsKLQkJCQlvdXRCdWZmZXIuYXBwZW5kKCdyJyk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdcZicgOgotCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ1xcJyk7Ci0JCQkJb3V0QnVmZmVyLmFwcGVuZCgnZicpOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdCA6Ci0JCQkJaWYgKChhQ2hhciA8IDB4MDAyMCkgfHwgKGFDaGFyID4gMHgwMDdlKSkgewotCQkJCQlvdXRCdWZmZXIuYXBwZW5kKCdcXCcpOwotCQkJCQlvdXRCdWZmZXIuYXBwZW5kKCd1Jyk7Ci0JCQkJCW91dEJ1ZmZlci5hcHBlbmQodG9IZXgoKGFDaGFyID4+IDEyKSAmIDB4RikpOwotCQkJCQlvdXRCdWZmZXIuYXBwZW5kKHRvSGV4KChhQ2hhciA+PiA4KSAmIDB4RikpOwotCQkJCQlvdXRCdWZmZXIuYXBwZW5kKHRvSGV4KChhQ2hhciA+PiA0KSAmIDB4RikpOwotCQkJCQlvdXRCdWZmZXIuYXBwZW5kKHRvSGV4KGFDaGFyICYgMHhGKSk7Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQlpZiAoc3BlY2lhbFNhdmVDaGFycy5pbmRleE9mKGFDaGFyKSAhPSAtMSkKLQkJCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ1xcJyk7Ci0JCQkJCW91dEJ1ZmZlci5hcHBlbmQoYUNoYXIpOwotCQkJCX0KLQkJfQotCi0JCXJldHVybiBvdXRCdWZmZXIudG9TdHJpbmcoKTsKLQl9Ci0KLQkvKioKLQkgKiBDb252ZXJ0IGEgbmliYmxlIHRvIGEgaGV4IGNoYXJhY3RlcgotCSAqIAotCSAqIEBwYXJhbSBuaWJibGUKLQkgKiAgICAgICAgICAgIHRoZSBuaWJibGUgdG8gY29udmVydC4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBjaGFyIHRvSGV4KGludCBuaWJibGUpIHsKLQkJcmV0dXJuIGhleERpZ2l0WyhuaWJibGUgJiAweEYpXTsKLQl9Ci0KLQkvKiogQSB0YWJsZSBvZiBoZXggZGlnaXRzICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhcltdIGhleERpZ2l0ID0geycwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJ307Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHNwZWNpYWxTYXZlQ2hhcnMgPSAiPTogXHRcclxuXGYjISI7Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU1YTEyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0Ci0JbmFtZT0idGVzdHN1aXRlIgotCWRlZmF1bHQ9InJ1biIKLQliYXNlZGlyPSIuIj4KLQotCTwhLS0gQ29uZmlndXJhYmxlIFByb3BlcnRpZXMgLS0+Ci0KLQk8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotCTwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0JPCEtLSA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfVwuLlwuLiIgLz4gLS0+Ci0KLQk8ZWNobyBtZXNzYWdlPSJiYXNlZGlyICR7YmFzZWRpcn0iIC8+Ci0JPGVjaG8gbWVzc2FnZT0iZWNsaXBzZSBwbGFjZSAke2VjbGlwc2UtaG9tZX0iIC8+Ci0KLQk8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgcGx1Z2luLW5hbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9InBsdWdpbi1uYW1lIgotCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZyIgLz4KLQk8cHJvcGVydHkKLQkJbmFtZT0ibGlicmFyeS1maWxlIgotCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLQk8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotCTwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotCTx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldAotCQkJCWRpcj0iJHtlY2xpcHNlLWhvbWV9IgotCQkJCWluY2x1ZGVzPSJvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLip4bWwiIC8+Ci0JCTwvZGVsZXRlPgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLQk8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQkJPHByb3BlcnR5Ci0JCQluYW1lPSJ3c3QtZm9sZGVyIgotCQkJdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93c3RfZm9sZGVyIiAvPgotCQk8ZGVsZXRlCi0JCQlkaXI9IiR7d3N0LWZvbGRlcn0iCi0JCQlxdWlldD0idHJ1ZSIgLz4KLQkJPGFudAotCQkJdGFyZ2V0PSJjb3JlLXRlc3QiCi0JCQlhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0JCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJkYXRhLWRpciIKLQkJCQl2YWx1ZT0iJHt3c3QtZm9sZGVyfSIgLz4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9InBsdWdpbi1uYW1lIgotCQkJCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iY2xhc3NuYW1lIgotCQkJCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLkVuY29kaW5nVGVzdFN1aXRlIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0icGx1Z2luLXBhdGgiCi0JCQkJdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLQk8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLQkJPCEtLTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPi0tPgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLQk8dGFyZ2V0Ci0JCW5hbWU9InJ1biIKLQkJZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLQkJPGFudAotCQkJdGFyZ2V0PSJjb2xsZWN0IgotCQkJYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotCQkJZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iaW5jbHVkZXMiCi0JCQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcuKnhtbCIgLz4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9Im91dHB1dC1maWxlIgotCQkJCXZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0JCTwvYW50PgotCQk8IS0tPGVtYWlsUmVzdWx0cyByZXN1bHRzRmlsZT0iJHtidWlsZC1yZXN1bHRzLWhvbWV9LyR7cGx1Z2luLW5hbWV9LnhtbCIgYWRkcmVzc2xpc3Q9ImRhdmlkX3dpbGxpYW1zQHVzLmlibS5jb20iIC8+IC0tPgotCTwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMuemlwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMuemlwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjBiMWFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzLnppcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL0RvY3VtZW50U3RyZWFtVGVzdENhc2Uva2FlcnU1Lmh0bSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL0RvY3VtZW50U3RyZWFtVGVzdENhc2Uva2FlcnU1Lmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU1NzBmZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9Eb2N1bWVudFN0cmVhbVRlc3RDYXNlL2thZXJ1NS5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTwlLS0ganNmOmNvZGVCZWhpbmQgbGFuZ3VhZ2U9ImphdmEiIGxvY2F0aW9uPSIvSmF2YVNvdXJjZS9wYWdlY29kZS90ZXN0L0thZXJ1NS5qYXZhIiAtLSU+PCUtLSAvanNmOmNvZGVCZWhpbmQgLS0lPgotPCVAdGFnbGliIHVyaT0iaHR0cDovL2phdmEuc3VuLmNvbS9qc2YvaHRtbCIgcHJlZml4PSJoIiU+Ci08JUB0YWdsaWIgdXJpPSJodHRwOi8vd3d3LmlibS5jb20vanNmL2h0bWxfZXh0ZW5kZWQiIHByZWZpeD0iaHgiJT4KLTxIVE1MPgotPEhFQUQ+Ci08JUAgdGFnbGliIHVyaT0iaHR0cDovL2phdmEuc3VuLmNvbS9qc2YvY29yZSIgcHJlZml4PSJmIiAlPgotPCVAIHBhZ2UgCi1sYW5ndWFnZT0iamF2YSIKLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9U0hJRlRfSklTIgotcGFnZUVuY29kaW5nPSJTSElGVF9KSVMiCi0lPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9U0hJRlRfSklTIj4KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Ci08TElOSyBocmVmPSIuLi90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4KLTxMSU5LIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL3RoZW1lL3N0eWxlc2hlZXQuY3NzIgotCXRpdGxlPSJTdHlsZSI+Ci08VElUTEU+a2FlcnUuanNwPC9USVRMRT4KLTwvSEVBRD4KLTxmOnZpZXc+Ci0JPEJPRFk+Ci0JPGh4OnNjcmlwdENvbGxlY3RvciBpZD0ic2NyaXB0Q29sbGVjdG9yMSI+Ci0JCTxoOmZvcm0gc3R5bGVDbGFzcz0iZm9ybSIgaWQ9ImZvcm0xIj4KLQkJCY+zlEYKLQkJCY+zlEYKLQkJCY+zlEYKLQkJCTxoOnNlbGVjdE9uZU1lbnUgaWQ9IkNvbWJvMzAiIHN0eWxlQ2xhc3M9IkNvbWJvMzAiIHRhYmluZGV4PSIyNiI+Ci0JCQkJPGY6c2VsZWN0SXRlbSBpdGVtVmFsdWU9InRva3lvIiBpdGVtTGFiZWw9InRva3lvIiAvPgotCQkJCTxmOnNlbGVjdEl0ZW0gaXRlbVZhbHVlPSKP2IyUjuaI+I+KIiBpdGVtTGFiZWw9Io/YjJSO5oj4j4oiIC8+Ci0JCQk8L2g6c2VsZWN0T25lTWVudT4KLQkJCTxoOnNlbGVjdE9uZU1lbnUgaWQ9IkNvbWJvMzEiIHN0eWxlQ2xhc3M9IkNvbWJvMzEiIHRhYmluZGV4PSIyNyI+Ci0JCQkJPGY6c2VsZWN0SXRlbSBpdGVtVmFsdWU9InRva3lvIiBpdGVtTGFiZWw9InRva3lvIiAvPgotCQkJCTxmOnNlbGVjdEl0ZW0gaXRlbVZhbHVlPSJreW90byIgaXRlbUxhYmVsPSJreW90byIgLz4KLQkJCTwvaDpzZWxlY3RPbmVNZW51PgotCQk8L2g6Zm9ybT4KLQk8L2h4OnNjcmlwdENvbGxlY3Rvcj4KLQk8L0JPRFk+Ci08L2Y6dmlldz4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL0RvY3VtZW50U3RyZWFtVGVzdENhc2Uva2FlcnU1LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL0RvY3VtZW50U3RyZWFtVGVzdENhc2Uva2FlcnU1LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDgzNzA0Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9Eb2N1bWVudFN0cmVhbVRlc3RDYXNlL2thZXJ1NS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi08JS0tIGpzZjpjb2RlQmVoaW5kIGxhbmd1YWdlPSJqYXZhIiBsb2NhdGlvbj0iL0phdmFTb3VyY2UvcGFnZWNvZGUvdGVzdC9LYWVydTUuamF2YSIgLS0lPjwlLS0gL2pzZjpjb2RlQmVoaW5kIC0tJT4NCi08JUB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzZi9odG1sIiBwcmVmaXg9ImgiJT4NCi08JUB0YWdsaWIgdXJpPSJodHRwOi8vd3d3LmlibS5jb20vanNmL2h0bWxfZXh0ZW5kZWQiIHByZWZpeD0iaHgiJT4NCi08SFRNTD4NCi08SEVBRD4NCi08JUAgdGFnbGliIHVyaT0iaHR0cDovL2phdmEuc3VuLmNvbS9qc2YvY29yZSIgcHJlZml4PSJmIiAlPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9U0hJRlRfSklTIg0KLXBhZ2VFbmNvZGluZz0iU0hJRlRfSklTIg0KLSU+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9U0hJRlRfSklTIj4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4NCi08TElOSyBocmVmPSIuLi90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08TElOSyByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi90aGVtZS9zdHlsZXNoZWV0LmNzcyINCi0JdGl0bGU9IlN0eWxlIj4NCi08VElUTEU+a2FlcnUuanNwPC9USVRMRT4NCi08L0hFQUQ+DQotPGY6dmlldz4NCi0JPEJPRFk+DQotCTxoeDpzY3JpcHRDb2xsZWN0b3IgaWQ9InNjcmlwdENvbGxlY3RvcjEiPg0KLQkJPGg6Zm9ybSBzdHlsZUNsYXNzPSJmb3JtIiBpZD0iZm9ybTEiPg0KLQkJCY+zlEYNCi0JCQmPs5RGDQotCQkJj7OURg0KLQkJCTxoOnNlbGVjdE9uZU1lbnUgaWQ9IkNvbWJvMzAiIHN0eWxlQ2xhc3M9IkNvbWJvMzAiIHRhYmluZGV4PSIyNiI+DQotCQkJCTxmOnNlbGVjdEl0ZW0gaXRlbVZhbHVlPSJ0b2t5byIgaXRlbUxhYmVsPSJ0b2t5byIgLz4NCi0JCQkJPGY6c2VsZWN0SXRlbSBpdGVtVmFsdWU9Io/YjJSO5oj4j4oiIGl0ZW1MYWJlbD0ij9iMlI7miPiPiiIgLz4NCi0JCQk8L2g6c2VsZWN0T25lTWVudT4NCi0JCQk8aDpzZWxlY3RPbmVNZW51IGlkPSJDb21ibzMxIiBzdHlsZUNsYXNzPSJDb21ibzMxIiB0YWJpbmRleD0iMjciPg0KLQkJCQk8ZjpzZWxlY3RJdGVtIGl0ZW1WYWx1ZT0idG9reW8iIGl0ZW1MYWJlbD0idG9reW8iIC8+DQotCQkJCTxmOnNlbGVjdEl0ZW0gaXRlbVZhbHVlPSJreW90byIgaXRlbUxhYmVsPSJreW90byIgLz4NCi0JCQk8L2g6c2VsZWN0T25lTWVudT4NCi0JCTwvaDpmb3JtPg0KLQk8L2h4OnNjcmlwdENvbGxlY3Rvcj4NCi0JPC9CT0RZPg0KLTwvZjp2aWV3Pg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW1wdHlGaWxlLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbXB0eUZpbGUuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbXB0eUZpbGUuY3NzCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2V1Y2pwLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2V1Y2pwLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWUyNTZlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9ldWNqcC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLUBjaGFyc2V0ICJFVUMtSlAiOw0KLQ0KLUJPRFkgew0KLQlmb250LWZhbWlseSA6ICKjzaPTIKPQpbSlt6XDpa8iOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9qaXMuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfamlzLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg0NzY4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9qaXMuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1AY2hhcnNldCAiSVNPLTIwMjItSlAiOw0KLQ0KLUJPRFkgew0KLQlmb250LWZhbWlseSA6ICIbJEIjTSNTGyhCIBskQiNQJTQlNyVDJS8bKEIiOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9zamlzLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X3NqaXMuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTI5Y2RhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X3NqaXMuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1AY2hhcnNldCAiU0hJRlRfSklTIjsNCi0NCi1CT0RZIHsNCi0JZm9udC1mYW1pbHkgOiAigmyCciCCb4NTg1aDYoNOIjsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vRW5jb2RpbmcuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vRW5jb2RpbmcuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2YwNmJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub0VuY29kaW5nLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLUJPRFkgew0KLQlmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsICJNUyBTYW5zIFNlcmlmIjsNCi0JdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KLQliYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsNCi19DQotDQotVEQgew0KLQlmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiI7DQotCWZvbnQtc2l6ZTogMTJwdDsNCi0JY29sb3I6IGJsYWNrOw0KLQlmb250LXN0eWxlOiBub3JtYWw7DQotCXRleHQtYWxpZ246IGxlZnQ7DQotfQ0KLQ0KLVRIIHsNCi0JZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iOw0KLQlmb250LXNpemU6IDEycHQ7DQotCWNvbG9yOiBibGFjazsNCi0JZm9udC1zdHlsZTogbm9ybWFsOw0KLQlmb250LXdlaWdodDogYm9sZGVyOw0KLQl0ZXh0LWFsaWduOiBsZWZ0Ow0KLX0NCi0NCi1IMSB7DQotCWZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIjsNCi0JZm9udC1zaXplOiAxNHB0Ow0KLQljb2xvcjogYmxhY2s7DQotCWZvbnQtc3R5bGU6IG5vcm1hbDsNCi0JZm9udC13ZWlnaHQ6IGJvbGRlcjsNCi0JdGV4dC1hbGlnbjogY2VudGVyDQotfQ0KLQ0KLUgyIHsNCi0JZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iOw0KLQlmb250LXNpemU6IDEycHQ7DQotCWNvbG9yOiBibGFjazsNCi0JZm9udC1zdHlsZTogbm9ybWFsOw0KLQlmb250LXdlaWdodDogYm9sZGVyDQotfQ0KLQ0KLUgzIHsNCi0JZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iOw0KLQlmb250LXNpemU6IDEycHQ7DQotCWNvbG9yOiBibGFjazsNCi0JZm9udC1zdHlsZTogaXRhbGljICANCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjOTk3ZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQGNoYXJzZXQgIklTTy04ODU5LTYiOw0KLQ0KLQ0KLQ0KLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWE0ZTQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLUBjaGFyc2V0ICJJU08tODg1OS02Ow0KLQ0KLQ0KLQ0KLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZDIuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkMi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzYzhhMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkMi5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLQ0KLQ0KLSAgICBAY2hhcnNldCAiSVNPLTg4NTktNiI7DQotDQotDQotDQotDQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1CaWc1LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUJpZzUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RmZTVhNS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUJpZzUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iQmlnNSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtQ0VTVS04LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUNFU1UtOC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjdhNTQ0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtQ0VTVS04LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkNFU1UtOCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtQ09NUE9VTkRfVEVYVC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1DT01QT1VORF9URVhULnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwZmI3MTIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1DT01QT1VORF9URVhULnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkNPTVBPVU5EX1RFWFQiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUVVQy1DTi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1FVUMtQ04ueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUwYjE2Yi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUVVQy1DTi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJFVUMtQ04iPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUVVQy1KUC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1FVUMtSlAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUzOTc3NC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUVVQy1KUC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJFVUMtSlAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUVVQy1LUi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1FVUMtS1IueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFlOTI5Yi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUVVQy1LUi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJFVUMtS1IiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUdCMTgwMzAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtR0IxODAzMC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmExM2MwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtR0IxODAzMC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJHQjE4MDMwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1HQjIzMTIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtR0IyMzEyLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4NDkyZDcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1HQjIzMTIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iR0IyMzEyIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1HQksueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtR0JLLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyYmJkNDcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1HQksueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iR0JLIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTAwNi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTAwNi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzdiYTc1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwMDYueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTEwMDYiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDQxLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDQxLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0OTU4ZTkuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA0MS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMTA0MSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwNDMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwNDMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczZDNhYS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDQzLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS0xMDQzIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA0Ni54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA0Ni54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzQwYzE5Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwNDYueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTEwNDYiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDQ2Uy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA0NlMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RlMjBhNC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDQ2Uy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMTA0NlMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDg4LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDg4LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3YTUxYTMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA4OC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMTA4OCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwOTgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwOTgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RhMzQ0My4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDk4LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS0xMDk4Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTExNC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTExNC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzNjZWY0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTExMTQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTExMTQiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMTE1LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMTE1LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwMjkwYjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTExNS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMTExNSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTExMjQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTExMjQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU1OTZjNS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMTI0LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS0xMTI0Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM2My54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM2My54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjcyYTVkLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzNjMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTEzNjMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzYzQy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM2M0MueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE4MTI0ZC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzYzQy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMTM2M0MiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzcwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzcwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MzljODkuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM3MC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMTM3MCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzODEueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzODEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFjOTBlOS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzgxLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS0xMzgxIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM4My54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM4My54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWFmMjhhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzODMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTEzODMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzg2LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzg2LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhZDk5Y2UuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM4Ni54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMTM4NiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTMzNzIyQy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMzM3MjJDLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNTkyZWIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMzM3MjJDLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS0zMzcyMkMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS00MzcueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTQzNy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjA0ZWYwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTQzNy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tNDM3Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tNzM3LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS03MzcueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI4NTM1Zi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS03MzcueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTczNyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTc3NS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tNzc1LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkYzk0NDkuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tNzc1LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS03NzUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04MDgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTgwOC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDI4ZmNlLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTgwOC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODA4Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODUwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE4N2Q5MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg1MCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1Mi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODUyLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxOTRkNWMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODUyLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NTIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1NS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDM1NDdjLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1NS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODU1Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODU2LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTRhNGI1Yi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTYueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg1NiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1Ny54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODU3LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMjBjOTEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODU3LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NTciPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1OC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTVmMTRhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1OC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODU4Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODU5LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTkueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU5YjI1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTkueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg1OSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2MC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODYwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiODIyOTMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODYwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NjAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjEueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2MS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjkxMGVjLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2MS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODYxIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODYyLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJhNzExNC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg2MiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2My54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODYzLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxNjczNTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODYzLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NjMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2NC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzNlNTc3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2NC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODY0Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY0Uy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY0Uy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODNhZWI4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2NFMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg2NFMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2NS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDdkNWRiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2NS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODY1Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY2LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFmYTI2MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjYueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg2NiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2Ny54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY3LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1ZjY3NTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY3LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NjciPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2OC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzM4MDFhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2OC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODY4Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY5LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjkueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZlZTBjMS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjkueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg2OSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg3NC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODc0LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3YzI1MGEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODc0LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NzQiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04OTcueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg5Ny54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWIxNTk2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg5Ny54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODk3Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTIxLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05MjEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg0MTdlMC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05MjEueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTkyMSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTkyMi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTIyLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwNmI4MjYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTIyLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS05MjIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05MzIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTkzMi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTQ2ZmUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTkzMi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tOTMyIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQyLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMzZTViZi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTk0MiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0MkMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0MkMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIzZTM4ZC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDJDLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS05NDJDIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQzLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQxNDI2MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTk0MyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0M0MueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0M0MueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRhOTFlYS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDNDLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS05NDNDIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQ4LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVkYTIyMi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTk0OCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0OS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQ5LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjNWFjZGIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQ5LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS05NDkiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDlDLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDlDLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ZjQ1YzYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQ5Qy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tOTQ5QyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk1MC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTUwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNTY2YjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTUwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS05NTAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NTRDLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NTRDLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNjVjMTQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTU0Qy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tOTU0QyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItQ04tR0IueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItQ04tR0IueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU2YjU5YS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUNOLUdCLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy0yMDIyLUNOLUdCIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tMjAyMi1DTi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tMjAyMi1DTi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2YzZGEzLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItQ04ueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTIwMjItQ04iPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUpQLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUpQLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNjdjMTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tMjAyMi1KUC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tMjAyMi1KUCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItS1IueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItS1IueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI3ODA0YS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUtSLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy0yMDIyLUtSIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYwYWI4My4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYwNzQ5Ni4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xMy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xMy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjNlZDYxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMTMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTE0LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTE0LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzODk5Y2IuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xNC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xNCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThkNmZkNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTE1LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTE1Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xNi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xNi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGY1N2Q4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTYueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMTYiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODE4NWMyLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0yIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0zLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEzNDk0MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS00LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwZjk5MzUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS00LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTQiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Njg2YmY5Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS01Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS02LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM0NDRiZi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTYueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktNiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNlMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNlMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ5YWQ5YS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTZTLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTZTIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS03LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTcueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVlOTVkNS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTcueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktNyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS04LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NGQzMDEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS04LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTkueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDgzOTMwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS05Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1KSVMwMjAxLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUpJUzAyMDEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzUyMzNkOS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUpJUzAyMDEueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSklTMDIwMSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSklTMDIwOC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1KSVMwMjA4LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkOTkzNGIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1KSVMwMjA4LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkpJUzAyMDgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUpJUzAyMTIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSklTMDIxMi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDI5ZjYzLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSklTMDIxMi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJKSVMwMjEyIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1Kb2hhYi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1Kb2hhYi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTA3Y2NiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSm9oYWIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSm9oYWIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUtPSTgtUi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1LT0k4LVIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMwNDVlNi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUtPSTgtUi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJLT0k4LVIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUtPSTgtUlUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtS09JOC1SVS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2NkZGEwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtS09JOC1SVS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJLT0k4LVJVIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1LT0k4LVUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtS09JOC1VLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDhmM2MuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1LT0k4LVUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iS09JOC1VIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1LU0M1NjAxLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUtTQzU2MDEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg1OTQ3OS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUtTQzU2MDEueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iS1NDNTYwMSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjQXJhYmljLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0FyYWJpYy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmUwMjdhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjQXJhYmljLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Ik1hY0FyYWJpYyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjQ2VudHJhbEV1cm9wZS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNDZW50cmFsRXVyb3BlLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiYjBkNzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNDZW50cmFsRXVyb3BlLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Ik1hY0NlbnRyYWxFdXJvcGUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0Nyb2F0aWFuLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0Nyb2F0aWFuLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1MGFiM2EuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNDcm9hdGlhbi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJNYWNDcm9hdGlhbiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjQ3lyaWxsaWMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjQ3lyaWxsaWMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBlM2M5Mi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0N5cmlsbGljLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Ik1hY0N5cmlsbGljIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNHcmVlay54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNHcmVlay54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGZhZDYyLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjR3JlZWsueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iTWFjR3JlZWsiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0hlYnJldy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNIZWJyZXcueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNiNTQ5Mi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0hlYnJldy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJNYWNIZWJyZXciPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0ljZWxhbmQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjSWNlbGFuZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGFkNDdkLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjSWNlbGFuZC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJNYWNJY2VsYW5kIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNSb21hbi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNSb21hbi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzFmMGQ1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjUm9tYW4ueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iTWFjUm9tYW4iPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY1JvbWFuaWEueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjUm9tYW5pYS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjZhNGI5Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjUm9tYW5pYS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJNYWNSb21hbmlhIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNUaGFpLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY1RoYWkueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY0ZGFjZi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY1RoYWkueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iTWFjVGhhaSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjVHVya2lzaC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNUdXJraXNoLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjZDY4MjYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNUdXJraXNoLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Ik1hY1R1cmtpc2giPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY1VrcmFpbmUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjVWtyYWluZS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGJjOTUzLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjVWtyYWluZS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJNYWNVa3JhaW5lIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1QVENQMTU0LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVBUQ1AxNTQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU3NjdiYS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVBUQ1AxNTQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iUFRDUDE1NCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtU2hpZnRfSklTLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVNoaWZ0X0pJUy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWI0ZTYyLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtU2hpZnRfSklTLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlNoaWZ0X0pJUyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVElTLTYyMC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1USVMtNjIwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmZDMyYTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1USVMtNjIwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlRJUy02MjAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVTLUFTQ0lJLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVTLUFTQ0lJLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3ZWE4YjAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VUy1BU0NJSS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVUy1BU0NJSSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTE2LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0xNi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjlkYzUyLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTE2LnhtbCIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0xNkJFLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0xNkJFLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzNThjMGIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMTZCRS54bWwiCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMTZMRS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMTZMRS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGQyZTBkLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTE2TEUueG1sIgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTMyLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0zMi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTBkNTA4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTMyLnhtbCIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0zMkJFLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0zMkJFLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4YTliZjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMzJCRS54bWwiCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMzJMRS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMzJMRS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTBhN2Y4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTMyTEUueG1sIgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI2ZjNiYi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi04LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtOEoueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLThKLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0NjY1OWQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtOEoueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLThKIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1YLVVuaWNvZGVCaWcueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtWC1Vbmljb2RlQmlnLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1MWI3MGEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1YLVVuaWNvZGVCaWcueG1sIgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtWC1Vbmljb2RlTGl0dGxlLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVgtVW5pY29kZUxpdHRsZS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTRiOWJjLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtWC1Vbmljb2RlTGl0dGxlLnhtbCIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LWhwLXJvbWFuOC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1ocC1yb21hbjgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU5ODMwNC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LWhwLXJvbWFuOC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJocC1yb21hbjgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhkNjU2Zi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJiYzBjMy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTEiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Mi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhhYzU4NS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Mi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1My54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTllNmFlYy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1My54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgwNjI4Zi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTQiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI2NzI3MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Ni54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVlMDA0OS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Ni54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTYiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NlMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU2Uy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTg3MjY0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU2Uy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTZTIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTcueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU3LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwOTVhNjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTcueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU3Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU4LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmYzVlOWEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU4Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTg3NC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTg3NC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmMzZDEzLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy04NzQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy04NzQiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtOTMyLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtOTMyLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3ZjI2YjUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTkzMi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTkzMiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy05MzYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy05MzYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg3OWZjZS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtOTM2LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtOTM2Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTk0OS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTk0OS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmQzNDgxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy05NDkueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy05NDkiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtOTUwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtOTUwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3YzNiYzYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTk1MC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTk1MCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3RNZXRob2RzLnRleHQiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdE1ldGhvZHMudGV4dCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3NGRkZGIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdE1ldGhvZHMudGV4dCIKKysrIC9kZXYvbnVsbApAQCAtMSw1MjUgKzAsMCBAQAotMTMxDQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkJpZzUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJDRVNVLTgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJDT01QT1VORF9URVhUIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiRVVDLUNOIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiRVVDLUpQIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiRVVDLUtSIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiR0IxODAzMCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkdCMjMxMiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkdCSyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gImhwLXJvbWFuOCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTAwNiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA0MSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA0MyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA0NiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA0NlMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwODgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwOTgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTExMTQiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTExMTUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTExMjQiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzNjMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzNjNDIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzcwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzgxIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzgzIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzg2IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0zMzcyMkMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTQzNyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tNzM3IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS03NzUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTgwOCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODUwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1NSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODU2IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTciOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1OCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODU5IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2MSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODYyIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY0UyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY1IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY4IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjkiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg3NCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODk3IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05MjEiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTkyMiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTMyIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0MkMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0MyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQzQyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQ4IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDkiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0OUMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk1MCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTU0QyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tMjAyMi1DTiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tMjAyMi1DTi1HQiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tMjAyMi1KUCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tMjAyMi1LUiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTEwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTEzIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTE0IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTE1IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTE2IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS00IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS02UyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS03IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktOSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKSVMwMjAxIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpJUzAyMDgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSklTMDIxMiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKb2hhYiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJLT0k4LVIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiS09JOC1SVSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJLT0k4LVUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiS1NDNTYwMSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNBcmFiaWMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjQ2VudHJhbEV1cm9wZSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNDcm9hdGlhbiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNDeXJpbGxpYyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNHcmVlayI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNIZWJyZXciOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjSWNlbGFuZCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNSb21hbiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNSb21hbmlhIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY1RoYWkiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY1R1cmtpc2giOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY1VrcmFpbmUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlBUQ1AxNTQiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlNoaWZ0X0pJUyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVElTLTYyMCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVMtQVNDSUkiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTE2QkUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNkxFIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMzIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0zMkJFIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMzJMRSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi04SiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTEiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUzIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTQiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU2IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTZTIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTciOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1OCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy04NzQiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtOTMyIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTkzNiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy05NDkiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtOTUwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJYLVVuaWNvZGVCaWciOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEzMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlgtVW5pY29kZUxpdHRsZSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtQmlnNS1IS1NDUy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtQmlnNS1IS1NDUy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTAzMjRkLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUJpZzUtSEtTQ1MueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iQmlnNS1IS1NDUyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUJpZzUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUJpZzUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RmZTVhNS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1CaWc1LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkJpZzUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1FVUMtSlAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUVVQy1KUC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTM5Nzc0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUVVQy1KUC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJFVUMtSlAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1FVUMtS1IueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUVVQy1LUi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWU5MjliLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUVVQy1LUi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJFVUMtS1IiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1HQjE4MDMwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1HQjE4MDMwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmYTEzYzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtR0IxODAzMC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJHQjE4MDMwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtR0JLLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1HQksueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJiYmQ0Ny4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1HQksueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iR0JLIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItSlAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUpQLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNjdjMTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItSlAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTIwMjItSlAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tMjAyMi1LUi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItS1IueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI3ODA0YS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tMjAyMi1LUi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tMjAyMi1LUiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYwYWI4My4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS0xLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS0xMy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YzZWQ2MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS0xMy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xMyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTE1LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS0xNS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGQ2ZmQ3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTE1LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTE1Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODE4NWMyLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEzNDk0MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS0zLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS00LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS00LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwZjk5MzUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS00Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Njg2YmY5Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktNSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM0NDRiZi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS02LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTYiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS03LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS03LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZTk1ZDUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS03Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjRkMzAxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktOCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTkueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTkueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA4MzkzMC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS05LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTkiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1KSVNfWDAyMDEueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUpJU19YMDIwMS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2E0MmQ4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUpJU19YMDIwMS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJKSVNfWDAyMDEiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1KSVNfWDAyMTItMTk5MC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSklTX1gwMjEyLTE5OTAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY3MGI3NC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1KSVNfWDAyMTItMTk5MC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJKSVNfWDAyMTItMTk5MCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUtPSTgtUi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtS09JOC1SLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMDQ1ZTYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtS09JOC1SLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IktPSTgtUiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVNoaWZ0X0pJUy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtU2hpZnRfSklTLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5YjRlNjIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtU2hpZnRfSklTLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlNoaWZ0X0pJUyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVRJUy02MjAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVRJUy02MjAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZkMzJhNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1USVMtNjIwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlRJUy02MjAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1VUy1BU0NJSS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVVMtQVNDSUkueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdlYThiMC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1VUy1BU0NJSS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVUy1BU0NJSSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVVURi0xNi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVVRGLTE2LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYzU1MzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVVRGLTE2LnhtbCIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1VVEYtMTZCRS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVVRGLTE2QkUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM1OGMwYi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1VVEYtMTZCRS54bWwiCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVVRGLTE2TEUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVVURi0xNkxFLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZDJlMGQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVVRGLTE2TEUueG1sIgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVVURi04LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1VVEYtOC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjZmM2JiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVVURi04LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhkNjU2Zi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUxLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJiYzBjMy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTEueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUxIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUyLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhhYzU4NS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUyIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUzLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTllNmFlYy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUzIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU0LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgwNjI4Zi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU0Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU1LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI2NzI3MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU1Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU2LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVlMDA0OS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTYueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU2Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU3LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTcueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA5NWE2MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTcueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU3Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU4LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZjNWU5YS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU4Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0zMWoueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMzFqLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzOGNmZDUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0zMWoueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0zMWoiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LUVVQy1DTi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1FVUMtQ04ueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZkYzY0MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LUVVQy1DTi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LUVVQy1DTiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtRVVDLVRXLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LUVVQy1UVy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDhlMzdhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtRVVDLVRXLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IngtRVVDLVRXIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1KSVMwMjA4LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LUpJUzAyMDgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJkMDdmZC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LUpJUzAyMDgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC1KSVMwMjA4Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1Kb2hhYi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1Kb2hhYi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWFmODdhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtSm9oYWIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC1Kb2hhYiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtTVM5NTAtSEtTQ1MueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtTVM5NTAtSEtTQ1MueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTgwNmIzMS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LU1TOTUwLUhLU0NTLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IngtTVM5NTAtSEtTQ1MiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LWV1Yy1qcC1saW51eC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1ldWMtanAtbGludXgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI0M2RmYi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LWV1Yy1qcC1saW51eC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LWV1Yy1qcC1saW51eCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtbXN3aW4tOTM2LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LW1zd2luLTkzNi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWJmMTBhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtbXN3aW4tOTM2LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IngtbXN3aW4tOTM2Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC13aW5kb3dzLTk0OS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC13aW5kb3dzLTk0OS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGM5M2Y0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtd2luZG93cy05NDkueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC13aW5kb3dzLTk0OSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtd2luZG93cy05NTAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtd2luZG93cy05NTAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ4ZTUzYi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LXdpbmRvd3MtOTUwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Ingtd2luZG93cy05NTAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdE1ldGhvZHMudGV4dCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdE1ldGhvZHMudGV4dCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNjhmMjQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3RNZXRob2RzLnRleHQiCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAKLTQ4DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkJpZzUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJCaWc1LUhLU0NTIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiRVVDLUpQIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiRVVDLUtSIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiR0IxODAzMCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkdCSyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUpQIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItS1IiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0zIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTQiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS02IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTciOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktOCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS05IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpJU19YMDIwMSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKSVNfWDAyMTItMTk5MCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJLT0k4LVIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiU2hpZnRfSklTIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlRJUy02MjAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVMtQVNDSUkiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTE2IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNkJFIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNkxFIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi04IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTEiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUyIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTQiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU1IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTciOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU4IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMzFqIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtRVVDLUNOIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtZXVjLWpwLWxpbnV4IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtRVVDLVRXIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtSklTMDIwOCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LUpvaGFiIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtTVM5NTAtSEtTQ1MiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC1tc3dpbi05MzYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC13aW5kb3dzLTk0OSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LXdpbmRvd3MtOTUwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1CaWc1LUhLU0NTLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1CaWc1LUhLU0NTLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxMDMyNGQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtQmlnNS1IS1NDUy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJCaWc1LUhLU0NTIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtQmlnNS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtQmlnNS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGZlNWE1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUJpZzUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iQmlnNSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUVVQy1KUC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtRVVDLUpQLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1Mzk3NzQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtRVVDLUpQLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkVVQy1KUCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUVVQy1LUi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtRVVDLUtSLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhZTkyOWIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtRVVDLUtSLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkVVQy1LUiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUdCMTgwMzAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUdCMTgwMzAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZhMTNjMC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1HQjE4MDMwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkdCMTgwMzAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1HQksueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUdCSy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmJiZDQ3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUdCSy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJHQksiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tMjAyMi1KUC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTIwMjItSlAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM2N2MxNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tMjAyMi1KUC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tMjAyMi1KUCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUtSLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tMjAyMi1LUi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjc4MDRhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUtSLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy0yMDIyLUtSIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjBhYjgzLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEzLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS0xMy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjNlZDYxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEzLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEzIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTE1LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4ZDZmZDcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMTUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS0yLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS0yLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4MTg1YzIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0yIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTM0OTQxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBmOTkzNS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS00LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTQiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS01LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS01LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2ODZiZjkuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS01Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzQ0NGJmLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTYueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktNiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTcueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTcueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVlOTVkNS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS03LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTciPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS04LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS04LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NGQzMDEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS04Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDgzOTMwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTkueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktOSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUpJU19YMDIwMS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSklTX1gwMjAxLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzYTQyZDguLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSklTX1gwMjAxLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkpJU19YMDIwMSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUpJU19YMDIxMi0xOTkwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1KSVNfWDAyMTItMTk5MC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjcwYjc0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUpJU19YMDIxMi0xOTkwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkpJU19YMDIxMi0xOTkwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtS09JOC1SLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1LT0k4LVIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMwNDVlNi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1LT0k4LVIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iS09JOC1SIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtU2hpZnRfSklTLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1TaGlmdF9KSVMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjliNGU2Mi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1TaGlmdF9KSVMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iU2hpZnRfSklTIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVElTLTYyMC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVElTLTYyMC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmQzMmE3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVRJUy02MjAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVElTLTYyMCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVVTLUFTQ0lJLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1VUy1BU0NJSS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2VhOGIwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVVTLUFTQ0lJLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVTLUFTQ0lJIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVVRGLTE2LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1VVEYtMTYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVjNTUzMC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1VVEYtMTYueG1sIgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVVURi0xNkJFLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1VVEYtMTZCRS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzU4YzBiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVVURi0xNkJFLnhtbCIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1VVEYtMTZMRS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVVRGLTE2TEUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThkMmUwZC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1VVEYtMTZMRS54bWwiCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVVRGLTgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVVURi04LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNmYzYmIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVVRGLTgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGQ2NTZmLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTEueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmJjMGMzLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTEiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Mi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGFjNTg1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Mi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1My54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWU2YWVjLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1My54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODA2MjhmLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTQiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjY3MjcwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Ni54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWUwMDQ5Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Ni54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTYiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTcueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Ny54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDk1YTYxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Ny54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTciPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1OC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmM1ZTlhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1OC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTMxai54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0zMWoueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM4Y2ZkNS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTMxai54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTMxaiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtRVVDLUNOLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LUVVQy1DTi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmRjNjQxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtRVVDLUNOLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IngtRVVDLUNOIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1FVUMtVFcueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtRVVDLVRXLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0OGUzN2EuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1FVUMtVFcueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC1FVUMtVFciPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LUpJUzAyMDgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtSklTMDIwOC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmQwN2ZkLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtSklTMDIwOC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LUpJUzAyMDgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LUpvaGFiLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LUpvaGFiLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlYWY4N2EuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1Kb2hhYi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LUpvaGFiIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1NUzk1MC1IS1NDUy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1NUzk1MC1IS1NDUy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODA2YjMxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtTVM5NTAtSEtTQ1MueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC1NUzk1MC1IS1NDUyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtZXVjLWpwLWxpbnV4LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LWV1Yy1qcC1saW51eC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjQzZGZiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtZXVjLWpwLWxpbnV4LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IngtZXVjLWpwLWxpbnV4Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1tc3dpbi05MzYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtbXN3aW4tOTM2LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxYmYxMGEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1tc3dpbi05MzYueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC1tc3dpbi05MzYiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LXdpbmRvd3MtOTQ5LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LXdpbmRvd3MtOTQ5LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4YzkzZjQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC13aW5kb3dzLTk0OS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LXdpbmRvd3MtOTQ5Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC13aW5kb3dzLTk1MC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC13aW5kb3dzLTk1MC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDhlNTNiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtd2luZG93cy05NTAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC13aW5kb3dzLTk1MCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0TWV0aG9kcy50ZXh0IiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0TWV0aG9kcy50ZXh0IgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY2OGYyNC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdE1ldGhvZHMudGV4dCIKKysrIC9kZXYvbnVsbApAQCAtMSwxOTMgKzAsMCBAQAotNDgNCi0JcHVibGljIHZvaWQgdGVzdEZpbGUwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiQmlnNSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkJpZzUtSEtTQ1MiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJFVUMtSlAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJFVUMtS1IiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJHQjE4MDMwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiR0JLIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItSlAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tMjAyMi1LUiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTEiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xMyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xNSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0yIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS01IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS04IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTkiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSklTX1gwMjAxIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpJU19YMDIxMi0xOTkwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktPSTgtUiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJTaGlmdF9KSVMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVElTLTYyMCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVUy1BU0NJSSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTE2QkUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTE2TEUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUzIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU2IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0zMWoiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC1FVUMtQ04iOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC1ldWMtanAtbGludXgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC1FVUMtVFciOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC1KSVMwMjA4IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtSm9oYWIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC1NUzk1MC1IS1NDUyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LW1zd2luLTkzNiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LXdpbmRvd3MtOTQ5IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtd2luZG93cy05NTAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvRW1wdHlGaWxlLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0VtcHR5RmlsZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvRW1wdHlGaWxlLmh0bWwKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY4YjVjOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTxIRUFEPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTYiPgotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+Ci08VElUTEU+SUJNIFdlYlNwaGVyZSBTYW1wbGVzIEdhbGxlcnk8L1RJVExFPgotPC9IRUFEPgotPEZSQU1FU0VUIHJvd3M9Ijc1LCoiPgotCTxGUkFNRSBuYW1lPSJ0aXRsZSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9UaXRsZS5odG1sIiBzY3JvbGxpbmc9Ik5PIiBub3Jlc2l6ZT4KLQk8RlJBTUVTRVQgY29scz0iMTYwLCoiPgotCQk8RlJBTUUgbmFtZT0ibWVudSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9NZW51Lmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JCTxGUkFNRSBuYW1lPSJtYWluIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1NhbXBsZXNJbnRyby5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCTwvRlJBTUVTRVQ+Ci0JPE5PRlJBTUVTPgotCTxCT0RZPgotCTxQPlRvIHZpZXcgdGhpcyBwYWdlLCB5b3UgbmVlZCBhIGJyb3dzZXIgdGhhdCBzdXBwb3J0cyBmcmFtZXMuPC9QPgotCTwvQk9EWT4KLQk8L05PRlJBTUVTPgotPC9GUkFNRVNFVD4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTGFyZ2VOb0VuY29kaW5nLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0xhcmdlTm9FbmNvZGluZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGNhNjBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTGFyZ2VOb0VuY29kaW5nLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NjQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvRFRELyBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci0KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9Ik1vemlsbGEvNC43IFtlbl0gKFdpbk5UOyBVKSBbTmV0c2NhcGVdIj4KLTxNRVRBIGNvbnRlbnQ9InRleHQvY3NzIiBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiPgotPHRpdGxlPnNtb2tlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgyPiBTbW9rZSBUZXN0IC0gWE1MIEVkaXRvcjwvaDI+Ci1MYXN0IHVwZGF0ZWQ6IEp1bmUgMjUsIDIwMDEKLTxQPlRoaXMgU21va2UgVGVzdCBwcmltYXJpbHkgZm9jdXNlcyBvbiB0aGUgUlRQIHBvcnRpb24gb2YgdGhlIFhNTCAKLUVkaXRpb3IsIHdoaWNoIGlzIHRoZSBTb3VyY2UgcGFnZSBvZiB0aGUgWE1MIEVkaXRvci4gSXQgYWxzbyBwZXJmb3JtcyAKLXNvbWUgaW50ZWdyYXRpb24gdGVzdGluZy4gRm9yIGV4YW1wbGUsIGl0IHRlc3RzIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIAotdGhlIERlc2lnbiBhbmQgU291cmNlIHBhZ2VzIG9mIHRoZSBYTUwgRWRpdG9yLCBhcyB3ZWxsIGFzIHdpdGggdGhlIAotT3V0bGluZSBhbmQgUHJvcGVydGllcyB2aWV3cy4gSXQgYWxzbyB2ZXJpZmllcyB0aGF0IGZpbGVzIGNyZWF0ZWQgCi10aHJvdWdoIHRoZSBYTUwgRmlsZSB3aXphcmQgYW5kIHJlZmVyZW5jZXMgdG8gdGhlIFhNTCBDYXRhbG9nIGFyZSAKLXN1cHBvcnRlZCBhcyBleHBlY3RlZC48L1A+Ci08UD48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+PEI+Tk9URTwvQj46IFhNTCBmaWxlcyBhcmUgY2FzZS1zZW5zaXRpdmUgc28gYmUgc3VyZSB0aGF0IHRoaW5ncyBhcHBlYXIgCi1leGFjdGx5IGFzIG5vdGVkLjwvRk9OVD48L1A+Ci0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldHVwCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+U2V0dXA8L0ZPTlQ+PC9IMj4KLTxQPjxCPlN0YXJ0aW5nIENsZWFuPC9CPjwvUD4KLTx1bD4KLSAgICA8bGk+IERlbGV0ZSBhbnkgZXhpc3Rpbmcgd29ya2JlbmNoPC9saT4KLSAgICA8bGk+IFN0YXJ0IEVjbGlwc2U8L2xpPgotPC91bD4KLTxQPjxCPk9wZW4gYW4gWE1MIFBlcnNwZWN0aXZlPEJSPgotPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+U2VsZWN0IHRoZSA8Qj5PcGVuIFBlcnNwZWN0aXZlPC9CPiB0b29sYmFyIGJ1dHRvbiBpbiB0aGUgdXBwZXIgbGVmdDwvTEk+Ci0gICAgPExJPlNlbGVjdCA8Qj5PdGhlci4uLjwvQj48L0xJPgotICAgIDxMST5TZWxlY3QgPEI+WE1MPC9CPjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIHZpZXdzIGFwcGVhciBpbiB0aGUgWE1MIHBlcnNwZWN0aXZlOiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+VGhlIGxvY2F0aW9uIG9mIHRoZSBPdXRsaW5lIGFuZCBOYXZpZ2F0b3Igdmlld3MgYXJlIHJldmVyc2VkIGZyb20gdGhlIFJlc291cmNlIGFuZCBXZWIgcGVyc3BlY3RpdmVzLiBEbyB3ZSB3YW50IHRvIHRyeSB0byBiZSBjb25zaXN0ZW50IGFjcm9zcyB0aGUgcGVyc3BlY3RpdmVzPyBBbHNvLCBJIG9wZW5lZCA8Qj5kZWZlY3Q8L0I+IDE3NzY2NCB0byBlbmFibGUgZWFzeSBhY2Nlc3MgdG8gdGhlIFByb3BlcnRpZXMgdmlldyBmcm9tIHdpdGhpbiB0aGUgWE1MIHBlcnNwZWN0aXZlLiBJZiB0aGlzIHZpZXcgaXNuJ3QgaW5jbHVkZWQgaW4gdGhlIFBlcnNwZWN0aXZlIGJlY2F1c2UgaXRzIHVzZSBpcyBsaW1pdGVkLCB0aGVuIHJlY29tbWVuZCB3ZSBhdCBsZWFzdCBwcm92aWRlIGEgU2hvdyBvciBIaWRlIFByb3BlcnRpZXMgVmlldyB0b29sYmFyIGJ1dHRvbiAoc2ltaWxhciB0byB0aGUgYnV0dG9ucyB0aGF0IFBhZ2UgRGVzaWduZXIgcHJvdmlkZXMpLjwvRk9OVD48L0xJPgotPC9VTD4KLTxQPjxCPlByb2plY3QgQ3JlYXRpb24gYW5kIEZpbGUgSW1wb3J0czxCUj4KLTwvQj48L1A+Ci08VUw+Ci0gICAgPExJPkNyZWF0ZSBhIFByb2plY3QsIDxCPlhNTFRlc3QyPC9CPiA8L0xJPgotICAgIDxMST5JbXBvcnQgdGhlIGZvbGxvd2luZyBmaWxlcyBpbnRvIHRoaXMgcHJvamVjdDoKLSAgICA8VUw+Ci0gICAgICAgIDxMST48Qj5QdXJjaGFzZU9yZGVyLnhzZDwvQj48L0xJPgotICAgICAgICA8TEk+PEI+SW52b2ljZS5kdGQ8L0I+PC9MST4KLSAgICA8TEk+PEI+Sm9iRGVzYy54bWw8L0I+PC9MST4KLSAgICA8TEk+PEI+V2lyZWxlc3MueG1sPC9CPjwvTEk+Ci0gICAgPExJPjxCPmdvdGNoYVRDQmVhbnMuc2V0PC9CPjwvTEk+Ci0gICAgPExJPjxCPkFUUy5kdGQ8L0I+PC9MST4KLSAgICA8TEk+PEZPTlQgY29sb3I9IiNmZjAwMDAiPmFueSBvdGhlcnM/PC9GT05UPjwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotPC9VTD4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICBDcmVhdGUvT3Blbi9FZGl0IHRlc3QgY2FzZXMKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5DcmVhdGUvT3Blbi9FZGl0IHRlc3QgY2FzZXM8L0ZPTlQ+PC9IMj4KLTxQPjxCPkNyZWF0ZSBhbiBYTUwgRmlsZSBmcm9tIHNjcmF0Y2g8L0I+PC9QPgotPFVMPgotICAgIDxMST5TZWxlY3QgdGhlIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZTwvQj4gdG9vbGJhciBidXR0b24uPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBDcmVhdGUgYSBYTUwgRmlsZSB3aXphcmQgYXBwZWFycyBhbmQgdGhlIEZpbmlzaCBidXR0b24gaXMgZGlzYWJsZWQuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj48Qj5ERUZFQ1Q6PC9CPiAxNzc2NjAgLSBYTUwgRmlsZSB3aXphcmQ6IGRpc2FibGUgRmluaXNoIGJ1dHRvbiBvbiB0aGUgZmlyc3QgcGFnZTwvRk9OVD4uPC9MST4KLSAgICA8TEk+QWNjZXB0IHRoZSBkZWZhdWx0IHRvIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZTwvQj48L0xJPgotICAgIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlCi0gICAgPFVMPgotICAgICAgICA8TEk+U2VsZWN0IDxCPlhNTFRlc3QyPC9CPiBhcyB0aGUgZm9sZGVyPC9MST4KLSAgICAgICAgPExJPlNwZWNpZnkgYSBGaWxlIG5hbWUgb2YgPEI+ZnJvbVNjcmF0Y2g8L0I+PC9MST4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5GaW5pc2g8L0I+PC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nOgotICAgIDxVTD4KLSAgICAgICAgPExJPmZyb21TY3JhdGNoLnhtbCBhcHBlYXJzIGluIHRoZSBOYXZpZ2F0b3Igdmlldy48L0xJPgotICAgICAgICA8TEk+ZnJvbVNjcmF0Y2gueG1sIGlzIG9wZW4gdG8gdGhlIERlc2lnbiBwYWdlIG9mIHRoZSBYTUwgRWRpdG9yIGFuZCBoYXMgZm9jdXMuPC9MST4KLSAgICAgICAgPExJPnRoZSBEZXNpZ24gdGFiIGFwcGVhcnMgYmVmb3JlIHRoZSBTb3VyY2UgdGFiIGluIHRoZSBYTUwgRWRpdG9yLjwvTEk+Ci0gICAgICAgIDxMST50aGUgRGVzaWduIGFuZCBTb3VyY2UgcGFnZSBzaG93IG5vIGNvbnRlbnQuPC9MST4KLSAgICAgICAgPExJPnRoZSBPdXRsaW5lIGFuZCBQcm9wZXJ0aWVzIHZpZXdzIHNob3cgbm90aGluZy48L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+U3dpdGNoIHRvIHRoZSBTb3VyY2UgcGFnZS4gVmVyaWZ5IHRoZSBjdXJzb3IgYXBwZWFycyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLjwvTEk+Ci0gICAgPExJPlJpZ2h0IG1vdXNlIGJ1dHRvbiAyIGFuZCB2ZXJpZnkgYSBwb3B1cCBtZW51IGFwcGVhcnMuPC9MST4KLSAgICA8TEk+SGl0IDxCPkN0cmwrU3BhY2U8L0I+LiBWZXJpZnkgdGhlIGNvbnRlbnQgYXNzaXN0IHByb3Bvc2FsIGxpc3QgYXBwZWFycy48L0xJPgotICAgIDxMST5TZWxlY3QgPEI+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0OzwvQj48L0xJPgotICAgIDxMST5WZXJpZnkgJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0OyBpcyBpbnNlcnRlZCBhbmQgYXBwZWFycyBzeW50YXggaGlnaGxpZ2h0ZWQgYW5kIGFuIGVudHJ5IGFwcGVhcnMgZm9yIGl0IGluIHRoZSBPdXRsaW5lIHZpZXcuPC9MST4KLSAgICA8TEk+UG9zaXRpb24gdGhlIGN1cnNvciB3aXRoaW4gdGhlIFhNTCBkZWNsYXJhdGlvbiBhbmQgdmVyaWZ5IDxCPnZlcnNpb248L0I+IGFuZCA8Qj5lbmNvZGluZzwvQj4gYXBwZWFyIGluIHRoZSBQcm9wZXJ0aWVzIHZpZXcuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5UaGlzIHVzZWQgdG8gd29yaywgYnV0IG5vdyBpdCdzIG5vdCB3b3JraW5nLiBPcGVuZWQgPEI+ZGVmZWN0PC9CPiAxNzc2NjIgLSBYTUwgZGVjbGFyYXRpb24gYXR0cmlidXRlcyBub3QgYXBwZWFyaW5nIGluIFByb3BlcnRpZXMgdmlldy4gSWYgd2UgZGVjaWRlIHRvIG5vdCB0cmVhdCB2ZXJzaW9uIGFuZCBlbmNvZGluZyBhcyBhdHRyaWJ1dGVzLCB0aGVuIHRoaXMgc3RlcCBzaG91bGQgYmUgcmVtb3ZlZC48L0ZPTlQ+PC9MST4KLSAgICA8TEk+Q29udGludWUgdG8gdGhlIG5leHQgc2VjdGlvbi48L0xJPgotPC9VTD4KLTxQPjxCPklkZW50aWZ5IGEgbG9jYWwgRFREICg8L0I+dmVyaWZpZXMgYSBEVEQgaXMgaW1tZWRpYXRlbHkgcmVjb2duaXplZDsgaW4gdGhlIHBhc3QsIHlvdSBoYWQgdG8gY2xvc2UgYW5kIHJlb3BlbiB0aGUgV29ya2JlbmNoPEI+KTwvQj48L1A+Ci08VUw+Ci0gICAgPExJPlR5cGUgdGhlIGZvbGxvd2luZyBhZnRlciB0aGUgWE1MIGRlY2xhcmF0aW9uIGluIDxCPmZyb21TY3JhdGNoLnhtbDwvQj46IDxCPiZsdDshRE9DVFlQRSBJbnZvaWNlIFNZU1RFTSAmcXVvdDtJbnZvaWNlLmR0ZCZxdW90OyZndDs8L0I+LiBUaGUgdGV4dCBzaG91bGQgYmUgc3ludGF4IGhpZ2hsaWdodGVkIGFzIHlvdSB0eXBlIGFuZCB5b3Ugc2hvdWxkIHNlZSBhbiBlbnRyeSBnZXQgYWRkZWQgdG8gdGhlIE91dGxpbmUgdmlldy48L0xJPgotICAgIDxMST5IaXQgPEI+RW50ZXI8L0I+IHRvIGNyZWF0ZSBhIG5ldyBsaW5lIGFmdGVyIHRoZSBET0NUWVBFIGRlY2xhcmF0aW9uLjwvTEk+Ci0gICAgPExJPkhpdCA8Qj5DdHJsK1NwYWNlPC9CPi5WZXJpZnkgb25seSA8Qj5JbnZvaWNlPC9CPiBhbmQgPEI+Y29tbWVudDwvQj4gYXBwZWFyIGluIHRoZSBwcm9wb3NhbCBsaXN0LiAoPEI+Tk9URTwvQj46IDxCPkludm9pY2U8L0I+IGlzIHRoZSByb290IGVsZW1lbnQpPC9MST4KLSAgICA8TEk+SGl0IDxCPkVudGVyPC9CPiB0byBhY2NlcHQgPEI+SW52b2ljZTwvQj4gYXMgYSBzZWxlY3Rpb24uIFZlcmlmeSB0aGUgSW52b2ljZSBzdGFydCBhbmQgZW5kIHRhZ3MgYXJlIGluc2VydGVkIGludG8gdGhlIFNvdXJjZSBhbmQgdGhlIGN1cnNvciBhcHBlYXJzIGJldHdlZW4gdGhlbS4gQW4gZWxlbWVudCBlbnRyeSBzaG91bGQgYXBwZWFyIGZvciBJbnZvaWNlIGluIHRoZSBPdXRsaW5lIHZpZXcuICg8Qj5OT1RFPC9CPjogWE1MIGlzIGNhc2Utc2Vuc2l0aXZlIHNvIGJlIHN1cmUgeW91IHNlZSBJbnZvaWNlIGFuZCBub3QgaW52b2ljZSBldmVyeXdoZXJlKS48L0xJPgotICAgIDxMST5IaXQgPEI+Q3RybCtTcGFjZTwvQj4uIFZlcmlmeSB0aGUgZm9sbG93aW5nIGFwcGVhcnMgaW4gdGhlIHByb3Bvc2FsIGxpc3QgKGluIHRoZSBvcmRlciBzaG93bik6IDxGT05UIGNvbG9yPSIjZmYwMDAwIj5JdGVtIGlzIGFwcGVhcmluZyBiZWZvcmUgSGVhZGVyLiBUaGUgZGVmYXVsdCBpcyBub3QgdG8gc29ydCB0aGUgbGlzdCBhbHBoYWJldGljYWxseS4gVGhhdCBtZWFucyB0aGUgbGlzdCBzaG91bGQgYmUgc29ydGVkIGJhc2VkIG9uIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgY2hpbGQgdGFncyBhcmUgZGVmaW5lZCBpbiB0aGUgZWxlbWVudCBkZWZpbml0aW9uIGZvciBJbnZvaWNlIGluIHRoZSBEVEQuIEluIG90aGVyIHdvcmRzLCB1c2VycyBzaG91bGQgc2VlIGNoaWxkIHRhZ3MgbGlzdGVkIGFjY29yZGluZyB0byB0aGVpciBzZXF1ZW5jaW5nIG9yZGVyIGluIHRoZSBEVEQsIHdoaWNoIHRoZSBEVEQgRWRpdG9yIHNob3dzLiBWaW9sYXRpbmcgdGhlIHNlcXVlbmNpbmcgb3JkZXIgY2F1c2VzIGFuIFhNTCBmaWxlIHRvIGJlY29tZSBub3QgdmFsaWQuIDxCPkRFRkVDVDo8L0I+IDE3NzY2ODwvRk9OVD4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5IZWFkZXI8L0xJPgotICAgICAgICA8TEk+SXRlbTwvTEk+Ci0gICAgICAgIDxMST5jb21tZW50PC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPkhpdCA8Qj5FbnRlcjwvQj4gdG8gYWNjZXB0IDxCPkhlYWRlcjwvQj4gYXMgYSBzZWxlY3Rpb24uPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBTb3VyY2Ugbm93IGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZyBhbmQgdGhlIGN1cnNvciBhcHBlYXJzIGJlZm9yZSA8Qj5pbnZvaWNlTnVtYmVyPC9CPjo8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI4MyIgc3JjPSJpZGVudGlmeURURC5qcGciIHdpZHRoPSI0ODUiPjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj5IZWFkZXI8L0I+IGFwcGVhcnMgbmVzdGVkIHVuZGVyIDxCPkludm9pY2U8L0I+IGluIHRoZSBPdXRsaW5lIHZpZXcuPC9MST4KLSAgPExJPkNsb3NlIHRoaXMgZmlsZSwgYW5kIHJlc3BvbmQgPEI+WWVzPC9CPiB3aGVuIHByb21wdGVkIHRvIHNhdmUgdGhlIGNoYW5nZXMuPC9MST4KLSAgPExJPlJlb3BlbiB0aGUgZmlsZSBhbmQgdmVyaWZ5IHRoZSBjaGFuZ2VzIHdlcmUgc2F2ZWQuPC9MST4KLSAgPExJPkNsb3NlIHRoZSBmaWxlLiBWZXJpZnkgbm8gc2F2ZSBjaGFuZ2VzIHByb21wdCBhcHBlYXJzLjwvTEk+Ci08L1VMPgotPFA+PEI+Q3JlYXRlIGFuIFhNTCBGaWxlIGZyb20gYW4gaW1wb3J0ZWQgRFREPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+U2VsZWN0IHRoZSA8Qj5GaWxlLSZndDtOZXctJmd0O1hNTCBGaWxlPC9CPi48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIENyZWF0ZSBhIFhNTCBGaWxlIHdpemFyZCBhcHBlYXJzLjwvTEk+Ci0gICAgPExJPlNlbGVjdCB0byA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGUgZnJvbSBhIERURCBmaWxlPC9CPjwvTEk+Ci0gICAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2UKLSAgICA8VUw+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+WE1MVGVzdDI8L0I+IGFzIHRoZSBmb2xkZXI8L0xJPgotICAgICAgICA8TEk+U3BlY2lmeSBhIEZpbGUgbmFtZSBvZiA8Qj5mcm9tTG9jYWxEVEQ8L0I+PC9MST4KLSAgICAgICAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2U8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+U2VsZWN0IHRoZSA8Qj5JbXBvcnQgRmlsZTwvQj4gYnV0dG9uCi0gICAgPFVMPgotICAgICAgICA8TEk+VXNlIHRoZSBCcm93c2UgYnV0dG9uIHRvIGZpbmQgPEI+dGVzdGNhc2UuZHRkPC9CPjwvTEk+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+WE1MVGVzdDI8L0I+IGFzIHRoZSBmb2xkZXIuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5Xb3VsZCBiZSBuaWNlIGlmIHRoaXMgd2VyZSBhbHJlYWR5IGZpbGxlZCBpbi4gT3BlbiBhIGRlZmVjdC48L0ZPTlQ+PC9MST4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5GaW5pc2g8L0I+IHRvIGNsb3NlIHRoZSBJbXBvcnQgRmlsZSB3aXphcmQ8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+RXhwYW5kIDxCPlhNTHRlc3QyPC9CPiBhbmQgdGhlbiBzZWxlY3QgPEI+dGVzdGNhc2UuZHRkPC9CPi4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPldhcyBleHBlY3RpbmcgdG8gc2VlIHRoZSBpbXBvcnRlZCBmaWxlIHNlbGVjdGVkIGluIHRoZSBXb3JrYmVuY2ggZmlsZXMgbGlzdCwgYnV0IGl0IHdhc24ndC4gT3BlbiBhIGRlZmVjdC48L0ZPTlQ+PC9MST4KLSAgICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZS48L0xJPgotICAgIDxMST5TZWxlY3QgPEI+dGVzdGNhc2U8L0I+IGFzIHRoZSBSb290IEVsZW1lbnQuPC9MST4KLSAgICA8TEk+QWNjZXB0IHRoZSBkZWZhdWx0IHRvIDxCPkNyZWF0ZSByZXF1aXJlZCBjb250ZW50IG9ubHk8L0I+LjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj50ZXN0Y2FzZS5kdGQ8L0I+IGFwcGVhcnMgYXMgdGhlIFN5c3RlbSBJZC48L0xJPgotICAgIDxMST5TZWxlY3QgRmluaXNoLiBWZXJpZnkgPEI+ZnJvbUxvY2FsRFRELnhtbDwvQj4gYXBwZWFycyBpbiB0aGUgWE1MIEVkaXRvci4gVmVyaWZ5IHRoZSBTb3VyY2UgcGFnZSBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmc6IDxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjI5MCIgc3JjPSJpbXBvcnREVEQuanBnIiB3aWR0aD0iNjYwIj48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBPdXRsaW5lIHZpZXcgYW5kIHRoZSBmb3JtYXR0aW5nIGluZGVudGF0aW9uIHJlZmxlY3QgdGhlIHByb3BlciBlbGVtZW50L3RhZyBoaWVyYXJjaHkuIEhlcmUncyB3aGF0IHRoZSBPdXRsaW5lIHZpZXcgc2hvdWxkIGxvb2sgbGlrZTo8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSIyOTciIHNyYz0ib3V0bGluZTEuanBnIiB3aWR0aD0iNjU1Ij48L0xJPgotICA8TEk+VmVyaWZ5IHNlbGVjdGlvbiBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgRGVzaWduIHBhZ2UsIFNvdXJjZSBwYWdlLCBPdXRsaW5lIHZpZXcsIAotICAgICAgICBhbmQgUHJvcGVydGllcyB2aWV3LgotICAgIDxVTD4KLSAgICAgICAgPExJPkZyb20gdGhlIFNvdXJjZSBwYWdlLCBjbGljayB3aXRoaW4gdGhlIDxCPmhlYWRlcjwvQj4gc3RhcnQgdGFnLiAKLSAgICAgICAgICAgIFZlcmlmeSA8Qj5oZWFkZXI8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgYW5kIGluIHRoZSBEZXNpZ24gCi0gICAgICAgICAgICBwYWdlIGFuZCB0aGF0IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBhbmQgcHJvcGVydHkgdmFsdWVzIGFwcGVhciBpbiB0aGUgCi0gICAgICAgICAgICBQcm9wZXJ0aWVzIHZpZXc6Ci0gICAgICAgIDxUQUJMRSBib3JkZXI9IjEiPgotICAgICAgICAgICAgPFRCT0RZPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPjxCPlByb3BlcnR5PC9CPjwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPjxCPlZhbHVlPC9CPjwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5jYXRlZ29yeTwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPndlYnRvb2w8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+bnVtYmVyPC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+aWR2YWx1ZTA8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+c3RhdGU8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij4mbmJzcDs8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+c3ViQ2F0ZWdvcnk8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij5BY2Nlc3NhYmlsaXR5PC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPnN1YlN1YkNhdGVnb3J5PC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+Jm5ic3A7PC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgPC9UQk9EWT4KLSAgICAgICAgPC9UQUJMRT4KLSAgICAgICAgPC9MST4KLQk8TEk+RnJvbSB0aGUgT3V0bGluZSB2aWV3LCBzZWxlY3QgdGhlIDxCPnRlc3RCdWNrZXQ8L0I+IHRhZy4KLSAgICAgICAgICAgIFZlcmlmeSA8Qj50ZXN0QnVja2V0PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYW5kIHRoZSBjdXJyZW50IG1hcmtlcgotICAgICAgICAgICAgaW4gdGhlIGxlZnRoYW5kIG1hcmdpbiBvZiB0aGUgU291cmNlIHBhZ2UgaW5kaWNhdGVzIHRoZSByYW5nZSBvZiB0aGUgCi0gICAgICAgICAgICA8Qj50ZXN0QnVja2V0PC9CPiB0YWcuIFRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvdWxkIHNob3cgYSBwcm9wZXJ0eSBvZiA8Qj50eXBlPC9CPgotICAgICAgICAgICAgd2l0aCBhIHZhbHVlIG9mIDxCPkNvbXBvbmVudFRlc3Q8L0I+LgotICAgICAgICA8L0xJPgotICAgIDwvVUw+ICAgCi0gICAgPC9MST4gCi0gICAgPExJPlZlcmlmeSBlZGl0IHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBEZXNpZ24gcGFnZSwgU291cmNlIHBhZ2UsIGFuZCAKLSAgICAgICAgUHJvcGVydGllcyB2aWV3IChmb2N1cyBoZXJlIGlzIG9uIGFkZGluZyBhdHRyaWJ1dGVzIGFuZCBhdHRyaWJ1dGUgdmFsdWVzKS4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBTb3VyY2UgcGFnZSwgdXNlIGNvbnRlbnQgYXNzaXN0IHRvIGluc2VydCBhbiBhdHRyaWJ1dGUgYW5kIGF0dHJpYnV0ZSB2YWx1ZQotICAgICAgICAgICAgZm9yIHRoZSA8Qj5oZWFkZXI8L0I+IHN0YXJ0IHRhZy4KLSAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgIDxMST5Qb3NpdGlvbiB0aGUgY3Vyc29yIGFmdGVyIHRoZSA8Qj5jYXRlZ29yeTwvQj4gYXR0cmlidXRlIGluIHRoZSA8Qj5oZWFkZXI8L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICAgPExJPlR5cGUgPEI+c3BhY2U8L0I+IGFuZCB0aGVuIGhpdCBwcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0LjwvTEk+Ci0gICAgICAgICAgICA8TEk+VmVyaWZ5IG9ubHkgPEI+c3RhdGU8L0I+IGFuZCA8Qj5zdWJTdWJDYXRlZ29yeTwvQj4gYXBwZWFyIGluIHRoZSBwcm9wb3NhbCBsaXN0IChjb250ZW50IGFzc2lzdCBpcyBzbWFydCBlbm91Z2ggbm90IHRvIGxpc3QgYW55IGF0dHJpYnV0ZXMgdGhhdCBhbHJlYWR5IGV4aXN0IGluIHRoZSBzdGFydCB0YWcgc2luY2UgYXR0cmlidXRlcyBjYW4gb25seSBhcHBlYXIgb25jZS4gPEZPTlQgY29sb3I9IiMwMDAwZmYiPkNvb2whPC9GT05UPikuPC9MST4KLSAgICAgICAgICAgIDxMST5TZWxlY3QgPEI+c3RhdGU8L0I+LjwvTEk+ICAgCi0gICAgICAgICAgICA8TEk+VmVyaWZ5IDxCPnN0YXRlPSJVbmRlckNvbnN0cnVjdGlvbiI8L0I+IGlzIGluc2VydGVkIGluIHRoZSBTb3VyY2UgcGFnZSAoY29udGVudCBhc3Npc3QgYXV0b21hdGljYWxseSBpbnNlcnRzIGFueSBkZWZhdWx0IHZhbHVlcy4gPEZPTlQgY29sb3I9IiMwMDAwZmYiPkNvb2whPC9GT05UPikuIFZlcmlmeSB0aGUgRGVzaWduIHBhZ2UgYW5kIFByb3BlcnRpZXMgdmlldyByZWZsZWN0IHRoaXMgY2hhbmdlLjwvTEk+ICAgICAgICAgCi0gICAgICAgICAgICA8L1VMPgotICAgICAgICA8L0xJPgotICAgICAgICA8TEk+RnJvbSB0aGUgUHJvcGVydGllcyB2aWV3LCB1cGRhdGUgdGhlIDxCPnN0YXRlPC9CPiBhdHRyaWJ1dGUgdmFsdWUgdG8gIlVuZGVyUmV2aWV3IiAKLSAgICAgICAgICAgIChhIHB1bGxkb3duIGxpc3Qgb2YgdmFsdWVzIHNob3VsZCBiZSBhdmFpbGFibGUpLiBWZXJpZnkgdGhlIGNoYW5nZSBpcyByZWZsZWN0ZWQKLSAgICAgICAgICAgIGluIHRoZSBTb3VyY2UgYW5kIERlc2lnbiBwYWdlcy4KLSAgICAgICAgPC9MST4KLSAgICAgICAgPExJPkZyb20gdGhlIERlc2lnbiBwYWdlLCBhZGQgYW4gYXR0cmlidXRlIGFuZCBhdHRyaWJ1dGUgdmFsdWUgdG8gdGhlIDxCPmhlYWRlcjwvQj4gdGFnLgotICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgPExJPkJyaW5nIHVwIHRoZSBwb3B1cCBtZW51IGZvciB0aGUgPEI+aGVhZGVyPC9CPiB0YWcuPC9MST4KLSAgICAgICAgICAgIDxMST5TZWxlY3QgPEI+QWRkIEF0dHJpYnV0ZS0+c3ViU3ViQ2F0ZWdvcnk8L0I+IGZyb20gdGhlIHBvcHVwIG1lbnUgKGl0J3Mgc21hcnQKLSAgICAgICAgICAgICAgICBlbm91Z2ggdG8ga25vdyB3aGljaCBhdHRyaWJ1dGVzIGhhdmVuJ3QgYmVlbiBzcGVjaWZpZWQgeWV0IC4uLiBsaWtlIGNvbnRlbnQgCi0gICAgICAgICAgICAgICAgYXNzaXN0LiBDb29sISkuPC9MST4KLSAgICAgICAgICAgIDxMST5UeXBlIGluIGEgdmFsdWUgb2YgPEI+S2V5Ym9hcmQgc3VwcG9ydDwvQj4uPC9MST4KLSAgICAgICAgICAgIDxMST5WZXJpZnkgdGhlIGNoYW5nZSBpcyByZWZsZWN0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlIGFuZCBQcm9wZXJ0aWVzIHZpZXc8L0xJPgotICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci08L1VMPgotPFA+PEI+T3BlbiBhbiBYTUwgRmlsZSB0aGF0IHJlZmVyZW5jZXMgYSByZW1vdGUgRFREPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+T3BlbiB0aGUgPEI+V2lyZWxlc3MueG1sPC9CPiBmaWxlLjwvTEk+Ci0gICAgPExJPlZlcmlmeSBpdCBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmcgaW4gdGhlIFNvdXJjZSBwYWdlOjxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjIzOSIgc3JjPSJ3aXJlbGVzcy5qcGciIHdpZHRoPSI2NTYiPjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgT3V0bGluZSB2aWV3IGFuZCB0aGUgZm9ybWF0dGluZyBpbmRlbnRhdGlvbiByZWZsZWN0IHRoZSBwcm9wZXIgCi0gICAgICAgIGVsZW1lbnQvdGFnIGhpZXJhcmNoeS4gSGVyZSdzIHdoYXQgdGhlIE91dGxpbmUgdmlldyBzaG91bGQgbG9vayBsaWtlOiA8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSIxODkiIHNyYz0ib3V0bGluZTIuanBnIiB3aWR0aD0iNjU2Ij48L0xJPiAKLSAgICA8TEk+VmVyaWZ5IGNvbnRlbnQgYXNzaXN0IDxGT05UIGNvbG9yPSIjZmYwMDAwIj5EZWZlY3QgMTc2Mzc5IChpbiB2ZXJpZnkgc3RhdGUsIGJ1dCBzdGlsbCBub3Qgd29ya2luZyk8L0ZPTlQ+LjwvTEk+Ci0gICAgICAgIDxVTD4KLSAgICAgICAgICAgPExJPkNyZWF0ZSBhIG5ldyBsaW5lIGFmdGVyIHRoZSA8Qj53bWw8L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdCBvbiB0aGUgbmV3IGxpbmUuPC9MST4KLSAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIGFwcGVhciBhcyBwcm9wb3NhbHMgKGluIHRoZSBvcmRlciBzaG93bik6IAotICAgICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgICAgICAgIDxMST5oZWFkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+dGVtcGxhdGU8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5jYXJkPC9MST4KLSAgICAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgICAgIDwvTEk+Ci0gICAgICAgICAgIDxMST5DcmVhdGUgYSBuZXcgbGluZSBhZnRlciB0aGUgPEI+d21sPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgPExJPlR5cGUgYSBzcGFjZSBiZWZvcmUgdGhlIGVuZGluZyBkZWxpbWl0ZXIgb24gdGhlIGNhcmQgc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0PC9MST4KLSAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIGFwcGVhciBhcyBwcm9wb3NhbHMgKG5vdCBuZWNlc3NhcmlseSBpbiB0aGUKLSAgICAgICAgICAgICAgIG9yZGVyIHNob3duKS4gCi0gICAgICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICAgICAgICAgPExJPnRpdGxlPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+bmV3Y29udGV4dDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPm9yZGVyZWQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST54bWw6bGFuZzwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPm9uZW50ZXJiYWNrd2FyZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPm9udGltZXI8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5pZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmNsYXNzPC9MST4KLSAgICAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgICAgIDwvTEk+Ci0gICAgICAgICAgIDxMST5Qb3NpdGlvbiB0aGUgY3Vyc29yIHdpdGhpbiB0aGUgPEI+bWV0aG9kPC9CPiBhdHRyaWJ1dGUgdmFsdWUgaW4gdGhlIDxCPmdvPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3Q8L0xJPgotICAgICAgICAgICA8TEk+VmVyaWZ5IDxCPnBvc3Q8L0I+IGFuZCA8Qj5nZXQ8L0I+IGFwcGVhciBhcyBwcm9wb3NhbHMuPC9MST4KLSAgICAgICAgPC9VTD4KLSAgICA8TEk+VmVyaWZ5IHNlbGVjdGlvbiBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgRGVzaWduIHBhZ2UsIFNvdXJjZSBwYWdlLCBPdXRsaW5lIHZpZXcsIAotICAgICAgICBhbmQgUHJvcGVydGllcyB2aWV3LgotICAgIDxVTD4KLSAgICAgICAgPExJPkZyb20gdGhlIFNvdXJjZSBwYWdlLCBjbGljayB3aXRoaW4gdGhlIDxCPmNhcmQ8L0I+IHN0YXJ0IHRhZy4gCi0gICAgICAgICAgICBWZXJpZnkgPEI+Y2FyZDwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyBhbmQgaW4gdGhlIERlc2lnbiAKLSAgICAgICAgICAgIHBhZ2UgYW5kIHRoYXQgdGhlIGNvbnRlbnQgYXNzaXN0IHByb3Bvc2FscyBsaXN0ZWQgYWJvdmUgZm9yIHRoZQotICAgICAgICAgICAgPEI+Y2FyZDwvQj4gdGFnIGFwcGVhciBhcyBwcm9wZXJ0aWVzIGluIHRoZSBQcm9wZXJ0aWVzIHZpZXcuIE5vIHZhbHVlcyBzaG91bGQgYXBwZWFyIGZvciB0aGVzZSBwcm9wZXJ0aWVzLjwvTEk+Ci0JPExJPkZyb20gdGhlIE91dGxpbmUgdmlldywgc2VsZWN0IHRoZSA8Qj5wb3N0ZmllbGQ8L0I+IHRhZy4KLSAgICAgICAgICAgIFZlcmlmeSA8Qj5wb3N0ZmllbGQ8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhbmQgdGhlIGN1cnJlbnQgbWFya2VyCi0gICAgICAgICAgICBpbiB0aGUgbGVmdGhhbmQgbWFyZ2luIG9mIHRoZSBTb3VyY2UgcGFnZSBpbmRpY2F0ZXMgdGhlIHJhbmdlIG9mIHRoZSAKLSAgICAgICAgICAgIDxCPnBvc3RmaWVsZDwvQj4gdGFnLiBUaGUgUHJvcGVydGllcyB2aWV3IHNob3VsZCBzaG93IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcywKLSAgICAgICAgICAgIG5vbmUgb2Ygd2hpY2ggc2hvdWxkIGhhdmUgYSB2YWx1ZToKLSAgICAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgICAgICAgICA8TEk+bmFtZTwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPnZhbHVlPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+aWQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5jbGFzczwvTEk+Ci0gICAgICAgICAgICAgICA8L1VMPgotICAgICAgICAgICA8L0xJPgotICAgIDwvVUw+ICAgCi0gICAgPC9MST4KLSAgICA8TEk+VmVyaWZ5IGVkaXQgc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIERlc2lnbiBwYWdlLCBTb3VyY2UgcGFnZSwgT3V0bGluZSB2aWV3LCBhbmQgCi0gICAgICAgIFByb3BlcnRpZXMgdmlldyAoZm9jdXMgaGVyZSBpcyBvbiBhZGRpbmcgZWxlbWVudHMvdGFncykuCi0gICAgPFVMPgotICAgICAgICA8TEk+RnJvbSB0aGUgU291cmNlIHBhZ2UsIGNvcHkgYW5kIHBhc3RlIHRoZSA8Qj5jYXJkPC9CPiB0YWcuCi0gICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICA8TEk+UG9zaXRpb24gdGhlIGN1cnNvciBpbiB0aGUgPEI+Y2FyZDwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgICA8TEk+Tm90aWNlIHRoZSByYW5nZSBvZiB0aGUgPEI+Y2FyZDwvQj4gdGFnIGluIHRoZSBsZWZ0aGFuZCBtYXJnaW4gYXJlYS48L0xJPgotICAgICAgICAgICAgPExJPkNvcHkgdGhpcyByYW5nZSBvZiBsaW5lcyB1c2luZyB0aGUgPEI+RWRpdC0+Q29weTwvQj4gcHVsbGRvd24gbWVudSBzZWxlY3Rpb24uPC9MST4KLSAgICAgICAgICAgIDxMST5QYXN0ZSBhZnRlciB0aGUgPEI+Y2FyZDwvQj4gZW5kIHRhZyB1c2luZyBDdHJsK1YuPC9MST4KLSAgICAgICAgICAgIDxMST5WZXJpZnkgdGhlIGFwcHJvcHJpYXRlIGxpbmVzIHdlcmUgcGFzdGVkIG4gdGhlIFNvdXJjZSBwYWdlLgotICAgICAgICAgICAgICAgIFZlcmlmeSB0aGUgRGVzaWduIHBhZ2UsIE91dGxpbmUgdmlldywgYW5kIHRoZSBQcm9wZXJ0aWVzIAotICAgICAgICAgICAgICAgIHZpZXcgcmVmbGVjdCB0aGlzIGNoYW5nZS48L0xJPiAgICAgICAgIAotICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgPC9MST4KLSAgICAgICAgPExJPkZyb20gdGhlIERlc2lnbiBwYWdlLCBhZGQgYW5vdGhlciA8Qj5jYXJkPC9CPiB0YWcuCi0gICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICA8TEk+QnJpbmcgdXAgdGhlIHBvcHVwIG1lbnUgZm9yIHRoZSA8Qj53bWw8L0I+IHRhZy48L0xJPgotICAgICAgICAgICAgPExJPlNlbGVjdCA8Qj5BZGQgQ2hpbGQtPmNhcmQ8L0I+IGZyb20gdGhlIHBvcHVwIG1lbnUuPC9MST4KLSAgICAgICAgICAgIDxMST5WZXJpZnkgdGhlIFNvdXJjZSBwYWdlLCBPdXRsaW5lIHZpZXcsIGFuZCB0aGUgUHJvcGVydGllcwotICAgICAgICAgICAgICAgIHZpZXcgcmVmbGVjdCB0aGlzIGNoYW5nZS4gTk9URTogaXQgc2hvdWxkIGhhdmUgZ2VuZXJhdGVkIG91dAotICAgICAgICAgICAgICAgIHRoZSBzYW1lIHRoaW5nIGFzIHRoZSBvcmlnaW5hbCBjYXJkIHRhZywgd2l0aCB0aGUgZXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgdGhhdCBhIDxCPm1ldGhvZDwvQj4gYXR0cmlidXRlIHNob3VsZCBub3QgZXhpc3QgaW4gdGhlIDxCPmdvPC9CPiBzdGFydCB0YWcuIDwvTEk+Ci0gICAgICAgICAgICA8L1VMPgotICAgICAgICA8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4gCi08L1VMPgotPFA+PEI+Q3JlYXRlIGFuZCBWYWxpZGF0ZSBhbiBYTUwgRmlsZSBmcm9tIGEgc2NoZW1hPC9CPjxCUj4KLQotPFA+KHRoZXNlIHN0ZXBzIGFyZSB0YWtlbiBmcm9tIHRoZSAnRGVzaWduJyBzbW9rZSB0ZXN0LCBleGNlcHQgdGhlIFNvdXJjZSBQYWdlIGlzIHRoZSBmb2N1cyk8L1A+Ci08dWw+Ci08bGk+Ci1SaWdodCBtb3VzZSBidXR0b24gMiBvbiB0aGUgUHVyY2hhc2VPcmRlci54c2QgYW5kIHNlbGVjdCA8Yj5DcmVhdGUgWE1MCi1GaWxlPC9iPi48L2xpPgotCi08bGk+Ci1BY2NlcHQgdGhlIGRlZmF1bHQgZmlsZSBuYW1lcy48L2xpPgotCi08bGk+Ci1JbiB0aGUgU2VsZWN0IFJvb3QgRWxlbWVudCBwYWdlLCBjaG9vc2UgPGI+cHVyY2hhc2VPcmRlcjwvYj4gYXMgcm9vdCBlbGVtZW50LjwvbGk+Ci0KLTxsaT4KLUNob29zZSA8Yj5DcmVhdGUgcmVxdWlyZWQgYW5kIG9wdGlvbmFsIGNvbnRlbnQ8L2I+IHRvIGNyZWF0ZSBhIG1pbmltYWwKLWRvY3VtZW50LjwvbGk+Ci0KLTxsaT4KLUVudGVyIDxiPnBvPC9iPiBhcyB0aGUgbmFtZXNwYWNlIHByZWZpeC48L2xpPgotCi08bGk+T24gRmluaXNoLCBhIFB1cmNoYXNlT3JkZXIueG1sIGlzIGNyZWF0ZWQgYW5kIHRoZSBYTUwgRWRpdG9yIGlzIG9wZW5lZC4gKFNlbGVjdCBTb3VyY2UgUGFnZSBpZiBub3QgYWxyZWFkeSB0aGVyZS4pPC9saT4KLQotPGxpPgotUnVuIFZhbGlkYXRlLiBUaGUgUHVyY2hhc2VPcmRlci54bWwgc2hvdWxkIGJlIGludmFsaWQuPC9saT4KLQotPGxpPgotRG91YmxlIGNsaWNrIG9uIHRoZSBlcnJvciBtZXNzYWdlLiBJdCBzaG91bGQgYmUgcG9zaXRpb25lZCB0byB0aGUgbGluZQotaW4gZXJyb3IsIGkuZS4gdGhlIDxiPnBhcnROdW08L2I+IGF0dHJpYnV0ZS4gSXQgaXMgaW52YWxpZCBiZWNhdXNlIHRoZQotdmFsdWUgaXMgbm90IHNldCB0byBtYXRjaCB0aGUgWE1MIHNjaGVtYSBwYXR0ZXJuIGZhY2V0ICJkMy1bQS1aXXsyfSIgKDMKLWRpZ2l0cyBmb2xsb3dlZCBieSAyIGNoYXJhY3RlcnMpLjwvbGk+Ci0KLTxsaT5JbiB0aGUgU291cmNlIFZpZXcsIGxvY2F0ZSB0aGUgPGI+cGFydE51bTwvYj4gYXR0cmlidXRlIHVuZGVyIGVsZW1lbnQgaXRlbS4KLUVudGVyIHRoZSB2YWx1ZSAzMzMtQUIuPC9saT4KLQotPGxpPgotUnVuIFZhbGlkYXRlLiBUaGUgUHVyY2hhc2VPcmRlci54bWwgZG9jdW1lbnQgc2hvdWxkIG5vdyBiZSB2YWxpZC48L2xpPgotPC9VTD4KLTxVTD4KLSAgPExJPgotICA8SFI+PC9MST4KLSAgPGxpPlBsYWNlIHRoZSBjdXJzb3IgYWZ0ZXIgdGhlICZsdDtpdGVtcyZndDsgdGFnIGFuZCBiZXN1cmUgIml0ZW0iIGlzIAotICBsaXN0ZWQgaW4gdGhlIGNvbnRlbnQgYXNzaXN0IGxpc3QuIDwvbGk+Ci08bGk+UmVuYW1lIHRoZSBwdXJjaGFzZU9yZGVyLnhzZCB0bywgc2F5LCBwdXJjaGFzZU9yZGVySE9MRC54c2Q8L2xpPgotPGxpPlZlcmlmeSB0aGF0IGNvbnRlbnQgYXNzaXN0IHN0aWxsIGdpdmVzIHlvdSAiaXRlbSIgYXMgYWJvdmUuPC9saT4KLTxsaT5Ob3cgc2VsZWN0IHRoZSAiUmVsb2FkIERlcGVuZGFuY2llcyIgYnV0dG9uLjwvbGk+Ci08bGk+VmVyaWZ5IHRoYXQgbm93IGNvbnRlbnQgYXNzaXN0IG5vIGxvbmdlciBsaXN0cyBhbnkgaXRlbXMgb3RoZXIgCi10aGF0IHRoZSBtYWNybyAiY29tbWVudCIuPC9saT4KLTxsaT5SZXBlYXQgbWFraW5nIHB1cmNoYXNlT3JkZXIueHNkIHdvcmthYmxlIGFnYWluLjwvbGk+Ci08L3VsPgotPFA+PC9QPjxQPjwvUD48UD48L1A+PFA+PC9QPjxQPjwvUD48L1A+Ci08UD48Qj5PcGVuIGFuIFhNTCBGaWxlIGZvciBhIHNoaXBwZWQgRFREIGNhdGFsb2cgZW50cnk8L0I+PEJSPgotPEJSPgotW3B1dCBpbiBvcHRpb25hbCBzZWN0aW9uIC4uIHRoaXMgaXNuJ3QgYSBjdXN0b21lciBzY2VuZXJpb108QlI+Ci1UbyB2ZXJpZnkgdGhhdCBzaGlwcGVkIERURHMgYXJlIHdvcmtpbmc6PEJSPgotPFVMPgotPExJPgotVXNlIGEgd2ViIHByb2plY3Qgd2l0aCBhIHN0YW5kYXJkIHdlYi54bWwgZmlsZSBpbiBpdC4gQmUgc3VyZSAKLXRoZXJlIGlzIG5vIHdlYi1hcHBfMl8yLmR0ZCBmaWxlIGluIHRoZSBkaXJlY3RvcnkuIEluIHRoZSB3ZWIueG1sIGZpbGUgCi1pdHNlbGYsIG1hbmdsZSB0aGUgd2ViLWFwcF8yXzIuZHRkIGZpbGVuYW1lIGluIHRoZSBzeXN0ZW0gaWQgYSBsaXR0bGUsIHN1Y2ggYXMgCi1jaGFuZ2UgaXQgdG8geGViLWFwcF8yXzIuZHRkIHRvIGJlIHN1cmUgaXQgY2FuJ3QgYmUgZm91bmQgdmlhIHRoZQotbm9ybWFsIGh0dHAgbWV0aG9kIChUaGlzIGlzbid0IHJlYWxseSBuZWNlc3NhcnkgZm9yIHRoZSBmdW50aW9uIHRvIHdvcmssCi1pdHMganVzdCB0byBiZSBzdXJlIG9ubHkgdGhlIGNhdGFsb2cgZnVuY3Rpb24gaXMgaW4gZWZmZWN0KS4KLTwvTEk+Ci08TEk+Ci1HbyB0byB0aGUgcHJlZmVyZW5jZXMgcGFnZSwgYW5kIG9wZW4gdGhlIFhNTCBDYXRhbG9nLiBWZXJpZnkgdGhlcmUgCi1pcyBhbiBlbnRyeSBmb3IgLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIFdlYiBBcHBsaWNhdGlvbiAyLjIvL0VOLgotPC9MST4KLTxMST4KLU9uY2UgYWxsIHRoZSBwcmVwIHdvcmsgaXMgZG9uZSAoZmlsZXMgZGVsZXRlZCwgdGV4dCBtb2RpZmllZCksIHlvdSBzaG91bGQgCi1leGl0IGFuZCByZXN0YXJ0IEVjbGlwc2UgdG8gYmUgc3VyZSB5b3UgaGF2ZSBhIGZyZXNoIHN0YXJ0LgotPC9MST4KLTxMST4KLU9wZW4gdGhlIHdlYi54bWwgZmlsZSBhbmQgYmUgc3VyZSB0aGF0IGNvbnRlbnQgYXNzaXN0IHdvcmtzIGZvciB0aGF0IGZpbGUuCi1Gb3IgZXhhbXBsZSwgcmlnaHQgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgJmx0Oy9kaXNwbGF5LW5hbWUmZ3Q7IHRhZywgY3RybC1zcGFjZSAKLXNob3VsZCBwcm92aWRlIGEgbG9uZyBsaXN0IG9mIGVsZW1lbnRzLCBzdGFydGluZyB3aXRoIHNlcnZsZXQsIHNlcnZsZXQtbWFwcGluZywgZXRjLgotVGhpcyBpbmRpY2F0ZXMgdGhlIHNoaXBwZWQgRFREIGZ1bmN0aW9uIGlzIHdvcmtpbmcgYW5kIGNvbmZpZ3VyZWQgCi1jb3JyZWN0bHkgKGF0IGxlYXN0IGZvciB0aGUgd2ViLnhtbCBmaWxlKS4KLTwvTEk+Ci08L1VMPgotPC9QPgotPFA+PEI+Q3JlYXRlIGFuIFhNTCBGaWxlIGZyb20gYSBuZXcgRFREIGNhdGFsb2cgZW50cnk8L0I+PEJSPjxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjYzIiBzcmM9InUwMTFhbmkuZ2lmIiB3aWR0aD0iNjMiPjwvUD4KLQotPGI+VGhlIGZvbGxvd2luZyBjb21lcyBkaXJlY3RseSBmcm9tIHRoZSAnRGVzaWduJyBTbW9rZSBUZXN0OiBYTUwgQ2F0YWxvZyBmb3IgWE1MIFNjaGVtYTwvYj4KLTx1bD4KLTxsaT4KLVJ1biBWYWxpZGF0ZSBvbiBQdXJjaGFzZU9yZGVyLnhtbCB0byBtYWtlIHN1cmUgaXQgaXMgdmFsaWQ8L2xpPgotCi08bGk+Ci1DcmVhdGUgYSBuZXcgcHJvamVjdCwgWE1MVGVzdDI8L2xpPgotCi08bGk+Ci1Nb3ZlIHRoZSBQdXJjaGFzZU9yZGVyLnhzZCBpbnRvIFhNTFRlc3QyLjwvbGk+Ci0KLTxsaT4KLVJ1biBWYWxpZGF0ZSBvbiBQdXJjaGFzZU9yZGVyLnhtbC4gWW91IHdpbGwgbm90aWNlIHRoYXQgaXQgaXMgbm8gbG9uZ2VyCi12YWxpZC4gVGhlIGVycm9yIG1lc3NhZ2Ugc2hvdWxkIGdpdmUgeW91IGEgaGludCB0aGF0IHRoZSBmaWxlIFB1cmNoYXNlT3JkZXIueHNkCi1jYW4gbm8gbG9uZ2VyIGJlIGZvdW5kLjwvbGk+Ci0KLTxsaT4KLU9wZW4gdGhlIFdpbmRvdy0+UHJlZmVyZW5jZXMgYW5kIHNlbGVjdCB0aGUgWE1MIENhdGFsb2cuPC9saT4KLQotPGxpPgotRW50ZXIgdGhlIHBhaXIgPGI+SWQgPSBQdXJjaGFzZU9yZGVyLnhzZCBVcmkgPSBmOlxlY2xpcHNlXFhNTFRlc3QyXFB1cmNoYXNlT3JkZXIueHNkPC9iPjwvbGk+Ci0KLTxicj5PciBhbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSBhIHJlbGF0aXZlIHBhdGggdG8gdGhlIGluc3RhbGwgZGlyZWN0b3J5Ci1vZiB0aGUgd29ya2JlbmNoIGFzIGZvbGxvd3M6Ci08YnI+PGI+SWQgPSBQdXJjaGFzZU9yZGVyLnhzZCBVcmkgPSAuXFhNTFRlc3QyXFB1cmNoYXNlT3JkZXIueHNkPC9iPgotPGxpPgotQ2xpY2sgb24gdGhlIFJlbG9hZCBidXR0b24gdG8gcmVsb2FkIHRoZSBjYXRhbG9nIHNldHRpbmdzLjwvbGk+Ci0KLTxsaT4KLVJ1biBWYWxpZGF0ZS4gVGhlIFB1cmNoYXNlT3JkZXIueG1sIGRvY3VtZW50IHNob3VsZCBub3cgYmUgdmFsaWQuPC9saT4KLTwvdWw+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgU2F2ZS9WYWxpZGF0ZSB0ZXN0IGNhc2VzCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+U2F2ZS9WYWxpZGF0ZSB0ZXN0IGNhc2VzPC9GT05UPjwvSDI+Ci08UD48Qj5TYXZpbmcgYW4gWE1MIEZpbGU8L0I+PEJSPgotKE5PVEU6IHRoZSA8Qj5JZGVudGlmeSBhIGxvY2FsIERURDwvQj4gdGVzdCBjYXNlIHRlc3RzIHRoZSBzYXZlIHByb21wdCBvbiBhIGZpbGUgY2xvc2UuKTwvUD4KLTxVTD4KLSAgPExJPklmIGFueSBmaWxlcyBhcmUgb3Blbiwgc2VsZWN0IDxCPkZpbGUtJmd0O0Nsb3NlIEFsbDwvQj4gKG9yIDxCPkN0cmwrU2hpZnQrRjQ8L0I+KSB0byBjbG9zZSB0aGVtLjwvTEk+Ci0gIDxMST5PcGVuIGFueSB4bWwgZmlsZSBpbiB0aGUgPEI+WE1MVGVzdDI8L0I+IHByb2plY3QuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIChuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9uKToKLSAgPFVMPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlPC9CPiBpcyBkaXNhYmxlZC48L0xJPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlIEFsbDwvQj4gaXMgZGlzYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZSBBczwvQj4gaXMgZW5hYmxlZC48L0xJPgotICAgIDxMST50aGUgPEI+U2F2ZTwvQj4gdG9vbGJhciBidXR0b24gKGEgZGlza2V0dGUpIGlzIGRpc2FibGVkLjwvTEk+Ci0gICAgPExJPnRoZSA8Qj5TYXZlIEFzPC9CPiB0b29sYmFyIGJ1dHRvbiBpcyBlbmFibGVkLjwvTEk+Ci0gICAgPExJPjxCPlNhdmU8L0I+IGlzIGRpc2FibGVkIG9uIHRoZSBTb3VyY2UgcG9wdXAgbWVudS4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPldvdWxkIGJlIG5pY2UgaWYgdGhlIERlc2lnbiBwb3B1cCBtZW51IGFsc28gaGFkIGEgU2F2ZSBzZWxlY3Rpb24uIE9wZW4gYSBzdWdnZXN0aW9uIGRlZmVjdC48L0ZPTlQ+PC9MST4KLSAgICA8TEk+bm8gPEI+KjwvQj4gYXBwZWFycyBpbiB0aGUgZmlsZSB0YWIuPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+TWFrZSBhIGNoYW5nZSBpbiB0aGUgU291cmNlIHBhZ2UuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIChjaGFuZ2VzLW1hZGUgY29uZGl0aW9uKToKLSAgPFVMPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlPC9CPiBpcyBlbmFibGVkLjwvTEk+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmUgQWxsPC9CPiBpcyBlbmFibGVkPC9MST4KLSAgICA8TEk+dGhlIDxCPlNhdmU8L0I+IHRvb2xiYXIgYnV0dG9uIChhIGRpc2tldHRlKSBpcyBlbmFibGVkLjwvTEk+Ci0gICAgPExJPjxCPlNhdmU8L0I+IGlzIGVuYWJsZWQgb24gdGhlIFNvdXJjZSBwb3B1cCBtZW51LjwvTEk+Ci0gICAgPExJPmEgPEI+KjwvQj4gYXBwZWFycyBpbiB0aGUgZmlsZSB0YWIuPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+SGl0IDxCPkN0cmwrUzwvQj4uIDwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5NYWtlIGEgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+RmlsZS0mZ3Q7U2F2ZSBBbGw8Qj48L0I+LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5NYWtlIGEgY2hhbmdlIGluIHRoZSBQcm9wZXJ0aWVzIHZpZXcuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPlNlbGVjdCA8Qj5TYXZlPC9CPiBmcm9tIHRoZSBTb3VyY2UgcG9wdXAgbWVudS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+Q2xvc2UgYW5kIHRoZW4gcmVvcGVuIHRoZSBmaWxlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGNoYW5nZXMgdGhhdCB3ZXJlIG1hZGUgaW4gdGhlIHByZXZpb3VzIHN0ZXBzIGFwcGVhciBpbiB0aGUgRGVzaWduIGFuZCBTb3VyY2UgcGFnZXMuPC9MST4KLTwvVUw+Ci08UD48Qj5TYXZpbmcgYW4gWE1MIEZpbGUgYWNyb3NzIG11bHRpcGxlIHBlcnNwZWN0aXZlcyAob3B0aW9uYWwpPC9CPjwvUD4KLTxVTD4KLSAgPExJPk9wZW4gYW55IHhtbCBmaWxlIGluIHRoZSA8Qj5YTUxUZXN0MjwvQj4gcHJvamVjdC48L0xJPgotICA8TEk+TWFrZSBhIGNoYW5nZSB0byB0aGUgZmlsZS48L0xJPgotICA8TEk+T3BlbiBhbm90aGVyIFhNTCBQZXJzcGVjdGl2ZSBieToKLSAgPFVMPgotICAgIDxMST48Qj5zZWxlY3RpbmcgUGVyc3BlY3RpdmUtJmd0O09wZW4tJmd0O090aGVyLi4uPC9CPjwvTEk+Ci0gICAgPExJPndoaWxlIGhvbGRpbmcgZG93biB0aGUgPEI+U2hpZnQ8L0I+IGtleSwgc2VsZWN0IDxCPlhNTDwvQj4uPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+VmVyaWZ5IGFub3RoZXIgWE1MIFBlcnNwZWN0aXZlIGJ1dHRvbiBhcHBlYXJzIGluIHRoZSBsZWZ0aGFuZCBzaWRlIG9mIHRoZSBXb3JrYmVuY2ggdG8gcmVwcmVzZW50IHRoaXMgc2Vjb25kIHBlcnNwZWN0aXZlLjwvTEk+Ci0gIDxMST5PcGVuIHRoZSBzYW1lIHhtbCBmaWxlIGFzIGluIHRoZSBmaXJzdCBzdGVwIGFib3ZlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5IGluIGJvdGggWE1MIFBlcnNwZWN0aXZlcyBhbmQgdmVyaWZ5IHRoYXQgdGhlIGNoYW5nZXMgbWFkZSB0byB0aGUgZmlsZSBpbiB0aGUgZmlyc3QgcGVyc3BlY3RpdmUgYXBwZWFyIGluIHRoZSBzYW1lIGZpbGUgaW4gdGhlIHNlY29uZCBwZXJzcGVjdGl2ZS4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPlRoZSAqIG5ldmVyIGFwcGVhcnMgaW4gdGhlIGZpbGUgdGFiIG9mIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUgZXZlbiB3aGVuIG1ha2UgY2hhbmdlcyB0byB0aGUgZmlsZSBpbiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlLiBUYWxrIHRvIERhdmlkLjwvRk9OVD48L0xJPgotICA8TEk+TWFrZSBzb21lIGNoYW5nZXMgdG8gdGhlIGZpbGUgaW4gdGhlIHNlY29uZCBwZXJzcGVjdGl2ZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZXNlIGNoYW5nZXMgYXBwZWFyIGluIHRoZSBzYW1lIGZpbGUgaW4gdGhlIGZpcnN0IHBlcnNwZWN0aXZlLjwvTEk+Ci0gIDxMST5DbG9zZSB0aGUgZmlsZSBpbiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlIGFuZCByZXNwb25kIDxCPlllczwvQj4gdG8gdGhlIHNhdmUgY2hhbmdlcyBwcm9tcHQuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgbm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbiBhcHBsaWVzIGluIHRoZSBmaXJzdCBwZXJzcGVjdGl2ZS48L0xJPgotPC9VTD4KLTxQPjxCPlZhbGlkYXRpbmcgYSBub24gd2VsbCBmb3JtZWQgWE1MIEZpbGUgKG5vIERURC9TY2hlbWEpPC9CPjxCUj4KLShOT1RFOiBpdCdzIGltcG9ydGFudCB0aGF0IHRoZSBmb2xsb3dpbmcgYmUgdHlwZWQgaW4uIFRoaXMgdGVzdCBjYXNlIHRyaWVzIHRvIGNvdmVyIHNvbWUgb2YgdGhlIG1vcmUgY29tbW9uIGVycm9ycyB0aGF0IHJlbmRlciBhbiBYTUwgZmlsZSBhcyBub3QgYmVpbmcgd2VsbC1mb3JtZWQuIEl0IGlzIG5vdCBpbnRlbmRlZCB0byB2ZXJpZnkgdGhhdCBhbGwgcG9zc2libGUgZXJyb3JzIGFyZSBiZWluZyBkZXRlY3RlZCBhbmQgZ3JhY2VmdWxseSBoYW5kbGVkLiApPC9QPgotPFVMPgotICA8TEk+U2VsZWN0IHRoZSA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGU8L0I+IHRvb2xiYXIgYnV0dG9uLjwvTEk+PExJPkFjY2VwdCB0aGUgZGVmYXVsdCB0byA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGU8L0I+PC9MST4KLSAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2UKLSAgICA8VUw+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+WE1MVGVzdDI8L0I+IGFzIHRoZSBmb2xkZXI8L0xJPgotICAgICAgICA8TEk+U3BlY2lmeSBhIEZpbGUgbmFtZSBvZiA8Qj5Ob25XZWxsRm9ybWVkPC9CPjwvTEk+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+RmluaXNoPC9CPjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3QuPC9MST4KLSAgPExJPlNlbGVjdCA8Qj4mbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7LjwvQj48L0xJPgotICA8TEk+Q3JlYXRlIGEgbmV3IGxpbmUgYWZ0ZXIgdGhlIFhNTCBkZWNsYXJhdGlvbi48L0xJPgotICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdC48L0xJPgotICA8TEk+U2VsZWN0IGNvbW1lbnQuPC9MST4KLSAgPExJPkVtYmVkIG1vcmUgdGhhbiAyIGNvbnNlY3V0aXZlIGRhc2hlcyBpbiB0aGUgY29tbWVudC4gCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogbW9yZSB0aGFuIDIgY29uc2VjdXRpdmUgZGFzaGVzIGNhbiBub3QgYmUgZW1iZWRkZWQgd2l0aGluIGEgY29tbWVudCk8L0ZPTlQ+PC9MST4KLSAgPExJPlR5cGUgaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBhcyBzaG93biBiZWxvdzogCi0gICAgICAgIDxGT05UIGNvbG9yPSIjZmYwMDAwIj4oSSBjYW4ndCBzaG93IHRoZSBsaW5lcyB1bnRpbCBkZWZlY3QgMTc3NzU1IGlzIGZpeGVkIC4uLiB1bnRpbCB0aGVuLCBoZXJlJ3MgdGhlIHR5cGUgb2YgdGhpbmdzIHRoYXQgY2F1c2UgCi0gICAgICAgIGEgZG9jdW1lbnQgdG8gbm90IGJlIHdlbGwtZm9ybWVkKTo8L0ZPTlQ+Ci0gIDxVTD4KLSAgICA8TEk+Y3JlYXRlIGEgc3RhcnQgYW5kIGVuZCB0YWcgdGhhdCBkb24ndCBtYXRjaCBpbiB0aGVpciBjYXNlIHNlbnNpdGl2aXR5IAotICAgICAgICAoZS5nLiwgJmx0O3RhZyZndDsgYW5kICZsdDsvVGFnJmd0OykuIDwvTEk+Ci0gICAgPExJPmNyZWF0ZSBhIHN0YXJ0IGFuZCBlbmQgdGFnIHdoZXJlIHRoZSBzdGFydCB0YWcgY29udGFpbnMgYW4gYXR0cmlidXRlIHZhbHVlIHRoYXQgaXMgbm90IAotICAgICAgICBlbmNsb3NlZCBpbiBxdW90ZXMuCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogdGhpcyBpcyBwZXJtaXR0ZWQgaW4gSFRNTCwgYnV0IG5vdCBYTUwpPC9GT05UPjwvTEk+Ci0gICAgPExJPmNyZWF0ZSB0YWdzIHRoYXQgYXJlIG5vdCBwcm9wZXJseSBuZXN0ZWQuCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogYSBjaGlsZCB0YWcgbXVzdCBiZSBjb21wbGV0ZWQgYmVmb3JlIGl0cyBwYXJlbnQgdGFnKTwvRk9OVD48L0xJPgotICAgIDxMST5jcmVhdGUgYSBzdGFydCB0YWcgd2l0aG91dCBhIGNvcnJlc29uZGluZyBlbmQgdGFnLgotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IGFsbCBzdGFydCB0YWdzIG11c3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgZW5kIHRhZyB1bmxlc3MgdGhlIAotICAgICAgICB0YWcgaXMgYW4gZW1wdHkgdGFnLCBpbiB3aGljaCBjYXNlIHRoZSBzaG9ydGhhbmQgdmVyc2lvbiBjYW4gYmUgdXNlZCAoJmx0O3Nob3J0VGFnLyZndDspKS48L0ZPTlQ+PC9MST4KLSAgICA8TEk+ZG8gbm90IHByb3ZpZGUgYW4gYXR0cmlidXRlIHZhbHVlICg9JnF1b3Q7dmFsdWUmcXVvdDspLgotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IHRoaXMgaXMgcGVybWl0dGVkIGluIEhUTUwgZm9yIHRob3NlIGF0dHJpYnV0ZXMgdGhhdCBoYXZlIAotICAgICAgICBvbmx5IG9uZSB2YWx1ZSwgYnV0IGl0J3Mgbm90IHZhbGlkIGluIFhNTCk8L0ZPTlQ+PC9MST4KLSAgICAgPExJPmRlZmluZSBhbiBhdHRyaWJ1dGUgbW9yZSB0aGFuIG9uY2UgaW4gYSBzdGFydCB0YWcuPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+U2F2ZSB0aGUgZmlsZS48L0xJPgotICA8TEk+VmVyaWZ5IGVycm9ycyBhcmUgbGlzdGVkIGluIHRoZSBUYXNrcyB2aWV3IGZvciB0aGUgYWJvdmUgdmlvbGF0aW9ucyBhbmQgdGhhdCBlcnJvciBtYXJrZXJzIGFwcGVhciBvbiB0aGUgYXBwcm9wcmlhdGUgCi0gICAgICAgICBsaW5lcyBpbiB0aGUgU291cmNlIHBhZ2UuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5JJ20gbm90IHN1cmUgaG93IHRoZSBEZXNpZ24gcGFnZSBoYW5kbGVzIGFueSBvZiB0aGVzZSB2aW9sYXRpb25zIAotICAgICAgICAgYW5kIHdoYXQgd2lsbCBhcHBlYXIgaW4gdGhlIE91dGxpbmUgYW5kIFByb3BlcnRpZXMgdmlldy4gVGFsayB0byBDcmFpZyBhbmQgRGF2aWQuPC9GT05UPjwvTEk+Ci0gIDxMST5SZW9wZW4gdGhlIGZpbGUgYW5kIHZlcmlmeSBldmVyeXRoaW5nIHdhcyBzYXZlZC48L0xJPgotPC9VTD4KLQotCi08UD48Qj5WYWxpZGF0ZSBhbiBYTUwgRmlsZSBiYXNlZCBvbiBhIERURDwvQj48L1A+Ci08VUw+Ci08TEk+T3BlbiA8Qj5mcm9tU2NyYXRjaC54bWw8L0I+LjwvTEk+Ci08TEk+RGVsZXRlIGEgY2hhcmFjdGVyIGZyb20gb25lIG9mIHRoZSBzdGFydCB0YWdzIChtaXN0eXBpbmcgYSB0YWcgaXMgbm90IHVuY29tbW9uKS48L0xJPgotPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3Qgd2l0aGluIHRoZSBiYWQgdGFnLiBWZXJpZnkgYSBtZXNzYWdlIGFwcGVhcnMgaW4gdGhlIHN0YXR1cyBhcmVhCi1vZiB0aGUgV29ya2JlbmNoIGluZGljYXRpbmcgdGhhdCB0aGUgYmFkIHRhZyBpcyBhbiB1bmtub3duIHRhZy48L0xJPgotPExJPlNlbGVjdCB0aGUgPEI+VmFsaWRhdGU8L0I+IHRvb2xiYXIgYnV0dG9uLjwvTEk+Ci08TEk+VmVyaWZ5IGFuIGVycm9yIGFwcGVhcnMgaW4gdGhlIFRhc2tzIHZpZXcgYW5kIGFuIGVycm9yIG1hcmtlciBhcHBlYXJzIGluIHRoZSBTb3VyY2UgcGFnZQotdG8gZmxhZyB0aGUgaW52YWxpZCB0YWcuPC9MST4KLTxMST5TZWxlY3QgPEI+RWRpdC0+VW5kbzwvQj4gZnJvbSB0aGUgU291cmNlIHBhZ2UuPC9MST4KLTxMST5WZXJpZnkgdGhlIGJhZCB0YWcgZXJyb3Igbm8gbG9uZ2VyIGFwcGVhcnMgaW4gdGhlIFRhc2tzIHZpZXcuPC9MST4KLTxMST5SZW1vdmUgdGhlIDxCPkhlYWRlcjwvQj4gZW5kIHRhZyBmcm9tIHRoZSBTb3VyY2UgcGFnZS48L0xJPgotPExJPlNhdmUgdGhlIGZpbGUuPC9MST4KLTxMST5WZXJpZnkgYW4gZXJyb3IgYXBwZWFycyBpbiB0aGUgVGFza3MgdmlldyBpbmRpY2F0aW5nIHRoYXQgdGhlIDxCPkhlYWRlcjwvQj4gZW5kIHRhZyBpcyBtaXNzaW5nPC9MST4KLTxMST5DbG9zZSB0aGUgZmlsZSwgcmVzcG9uZGluZyA8Qj5ZZXM8L0I+IHRvIHRoZSBzYXZlIGNoYW5nZXMgcHJvbXB0LjwvTEk+Ci08TEk+RG91YmxlLWNsaWNrIG9uIHRoZSBlcnJvciBpbiB0aGUgVGFza3MgdmlldywgYW5kIHZlcmlmeSA8Qj5mcm9tU2NyYXRjaC54bWw8L0I+IG9wZW5zIHRvIHRoZQotYXBwcm9wcmlhdGUgbGluZSBpbiB0aGUgU291cmNlIHBhZ2Ugb2YgdGhlIFhNTCBFZGl0b3IuPC9MST4KLTxMST5IZXJlJ3Mgc29tZSBvdGhlciB2aW9sYXRpb25zIHRoYXQgY2FuIGJlIGF0dGVtcHRlZDoKLTxVTD4KLTxMST5TcGVjaWZ5IGEgYmFkIGF0dHJpYnV0ZS48L0xJPgotPExJPlNwZWNpZnkgYSBiYWQgYXR0cmlidXRlIHZhbHVlLjwvTEk+Ci08TEk+U3BlY2lmeSBjaGlsZCB0YWdzIG91dCBvZiBzZXF1ZW5jaW5nIG9yZGVyPC9MST4KLTxMST5WaW9sYXRlIHRoZSBvY2N1cnJlbmNlIGluZGljYXRvciBmb3IgYSB0YWcgKGUuZy4sIGlmIHRoZSBEVEQgc2hvd3MgPywgdGhlbiBvbmx5Ci0wIG9yIDEgb2NjdXJyZW5jZXMgb2YgdGhlIHRhZyBpcyBwZXJtaXR0ZWQpLgotPC9VTD48L0xJPgotPExJPlNhdmUgdGhlIGZpbGUuPC9MST4KLTxMST5WZXJpZnkgZXJyb3JzIGFyZSBsaXN0ZWQgaW4gdGhlIFRhc2tzIHZpZXcgZm9yIHRoZSBhYm92ZSB2aW9sYXRpb25zIGFuZCB0aGF0IGVycm9yIG1hcmtlcnMgYXBwZWFyIG9uIHRoZSBhcHByb3ByaWF0ZSAKLWxpbmVzIGluIHRoZSBTb3VyY2UgcGFnZS4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPkknbSBub3Qgc3VyZSBob3cgdGhlIERlc2lnbiBwYWdlIGhhbmRsZXMgYW55IG9mIHRoZXNlIHZpb2xhdGlvbnMgCi1hbmQgd2hhdCB3aWxsIGFwcGVhciBpbiB0aGUgT3V0bGluZSBhbmQgUHJvcGVydGllcyB2aWV3LiBUYWxrIHRvIENyYWlnIGFuZCBEYXZpZC48L0ZPTlQ+PC9MST4KLTxMST5SZW9wZW4gdGhlIGZpbGUgYW5kIHZlcmlmeSBldmVyeXRoaW5nIHdhcyBzYXZlZC48L0xJPgotPC9VTD4KLQotPCEtLSAgcmVtb3ZlZCBzaW5jZSBkb25lIGVsc2V3aGVyZSBhcyBwYXJ0IG9mIG90aGVyIHNjZW5lcmlvcwotPFA+PEI+VmFsaWRhdGUgYW4gWE1MIEZpbGUgYmFzZWQgb24gYSBTY2hlbWE8L0I+PEJSPgotLS0+Ci08SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI2MyIgc3JjPSJ1MDExYW5pLmdpZiIgd2lkdGg9IjYzIj48L1A+Ci0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZSBTcGVjaWZpYyB0ZXN0IGNhc2VzCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Qj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+U291cmNlIFNwZWNpZmljIHRlc3QgY2FzZXMgKG9wdGlvbmFsKTwvRk9OVD48L0I+PC9IMj4KLTxQPjxCPlVzaW5nIHRoZSBBdXRvIENvbXBsZXRpb24gQ29udGVudCBBc3Npc3QgUHJlZmVyZW5jZTwvQj48QlI+Ci08VUw+Ci08TEk+T3BlbiBhIGFueSBYTUwgZmlsZSB0aGF0IGhhcyBlbm91Z2ggdGFncyB0byBwcm92aWRlIHN5bnRheCBoaWdodGxpZ2h0aW5nLjwvTEk+Ci08TEk+V2hpbGUgdGhhdCBmaWxlIGlzIGxlZnQgb3BlbiwgZ28gdG8gdGhlIFByZWZlcmVuY2VzIHBhZ2UsIHNlbGVjdAotWE1MIEVkaXRvciwgdGhlbiBTb3VyY2UgU3R5bGVzLiA8L0xJPgotPExJPk9uIHRoYXQgcGFnZSwgdXNlIHRoZSBtb3VzZSB0byAic2VsZWN0IiBhIHRhZyBuYW1lLiBUaGUgdGFnIG5hbWUgaXMgbm90IGxpdGVyYWxseQotc2VsZWN0ZWQsIGJ1dCB3aGVuIHlvdSBjbGljayBvbiBhbiBlbGVtZW50IGluIHRoZSBleGFtcGxlIHRleHQsIHRoZSBsaXN0Ci1hYm92ZSBpdCB3aWxsIGRpc3BsYXkgdGhlIHR5cGUgb2YgZWxlbWVudCBpdCBpcywgYW5kIHdoYXQgaXRzIGN1cnJlbnQgY29sb3JzIGFyZS48L0xJPgotPExJPkZvciAidGFnIG5hbWUiLCBzZWxlY3QgdGhlIGJvbGQgY2hlY2sgYm94LiBUaGVuIHByZXNzIEFwcGx5LCBhbmQgeW91IHNob3VsZAotc2VlIHRoZSBjaGFuZ2UgdGFrZSBlZmZlY3QgaW4geW91ciBhY3RpdmUgZWRpdG9yLjwvTEk+Ci08TEk+U2VsZWN0ICJEZWZhdWx0cyIgYW5kIG1ha2Ugc3VyZSB0aGUgdGFnIG5hbWVzIGFyZSBzZXQgYmFjayB0byBub3QgYm9sZC48L0xJPgotPC9VTD4KLTxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjYzIiBzcmM9InUwMTFhbmkuZ2lmIiB3aWR0aD0iNjMiPjwvUD4KLTxQPjxCPkRvdWJsZS1DbGlja2luZyBXaXRoaW4gdGhlIFNvdXJjZTwvQj4gPEJSPgotKE5PVEU6IGlmIHlvdSBjb250aW51ZSB0byBkb3VibGUtY2xpY2sgYXQgYSBnaXZlbiBjdXJzb3IgcG9zaXRpb24sIHRoZSBzZWxlY3Rpb24gYXJlYSB3aWxsIGNvbnRpbnVlIHRvIGV4cGFuZC4gV2hlbiB0aGUgbWF4aW11bSByZWdpb24gYXJlYSBoYXMgYmVlbiByZWFjaGVkLCB0aGUgbmV4dCBkb3VibGUtY2xpY2sgd2lsbCBjYXVzZSB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLiBTbywgdGhlIHNlbGVjdGlvbnMgd2lsbCB3cmFwL2N5Y2xlLiA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+Q29vbCE8L0ZPTlQ+KS48L1A+Ci08VUw+Ci0gIDxMST5PcGVuIDxCPkpvYkRlc2MueG1sPC9CPi48L0xJPgotICA8TEk+RG91YmxlLWNsaWNraW5nIHdpdGhpbiB0YWcgY29udGVudDoKLSAgPFVMPgotICAgIDxMST5Eb3VibGUtY2xpY2sgd2l0aGluIDxCPk1pZGRsZXdhcmU8L0I+IG9uIGxpbmUgNy48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+TWlkZGxld2FyZTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBhbmQgRGVzaWduIHBhZ2VzIGFuZCA8Qj5CdXNUeXBlPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3LiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+Tm90IHN1cmUgd2hhdCB0aGUgUHJvcGVydGllcyB2aWV3IGlzIHN1cHBvc2VkIHRvIHNob3cuIEl0IGdvZXMgYmxhbmsuIFNlZSBkZWZlY3QgMTc3NzUzLiBBbHNvLCA8Qj5NaWRkbGV3YXJlPC9CPiB3YXNuJ3Qgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFzIGhhZCBleHBlY3RlZC4gVGhlIERlc2lnbiBwYWdlIG9ubHkgc2VlbXMgdG8gc3RheSBpbiBzeW5jIGF0IHRoZSBlbGVtZW50L3RhZyBsZXZlbCBsaWtlIHRoZSBPdXRsaW5lIHZpZXcuIFRhbGsgdG8gQ3JhaWcgYWJvdXQgdGhpcy48L0ZPTlQ+PC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGFnYWluIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+QXBwbGljYXRpb24gYW5kIE1pZGRsZXdhcmUgU29mdHdhcmU8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgYW5kIERlc2lnbiBwYWdlcyBhbmQgPEI+QnVzVHlwZTwvQj4gcmVtYWlucyB0byBiZSB0aGUgb25seSB0aGluZyBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3LjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGlja2luZyBhZ2FpbiB3aWxsIGNhdXNlIGN5Y2xpbmcgYmFjayB0byB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPkRvdWJsZS1jbGlja2luZyB3aXRoaW4gYSB0YWcgbmFtZToKLSAgPFVMPgotICAgIDxMST5Eb3VibGUtY2xpY2sgd2l0aGluIDxCPkhvd1RvQXBwbHk8L0I+IG9uIGxpbmUgNjEuPC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPkhvd1RvQXBwbHk8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgcGFnZSwgRGVzaWduIHBhZ2UsIGFuZCBPdXRsaW5lIHZpZXcuIAotICAgICAgICA8Qj5jbGFzczwvQj4sIDxCPmRpc3RyaWJ1dGU8L0I+LCA8Qj5pZDwvQj4sIGFuZCA8Qj5uYW1lPC9CPiBzaG91bGQgYXBwZWFyIGluIHRoZSAKLSAgICAgICAgUHJvcGVydGllcyB2aWV3LiBPbmx5IDxCPmRpc3RyaWJ1dGU8L0I+IHNob3VsZCBzaG93IGEgdmFsdWUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGFnYWluIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIHdob2xlIDxCPkhvd1RvQXBwbHk8L0I+IHN0YXJ0IHRhZyAoaW5jbHVkaW5nIGl0cyBkZWxpbWl0ZXJzKSBpcyBzZWxlY3RlZCAKLSAgICAgICAgaW4gdGhlIFNvdXJjZSBwYWdlLiA8Qj5Ib3dUb0FwcGx5PC9CPiBzaG91bGQgcmVtYWluIHNlbGVjdGVkIGluCi0gICAgICAgIHRoZSBEZXNpZ24gcGFnZSBhbmQgT3V0bGluZSB2aWV3LiA8Qj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SG93VG9BcHBseTwvRk9OVD48L0I+PEZPTlQgY29sb3I9IiNmZjAwMDAiPiBhbmQgYWxsIGRlc2NlbmRlbnRzIGJlY29tZSBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IChkZWZlY3QgMTc3NzUyKS4gQWxzbywgdGhlIFByb3BlcnRpZXMgdmlldyBzaG93cyBubyBwcm9wZXJ0aWVzIChkZWZlY3QgMTc3NzUzKS48L0ZPTlQ+PC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNraW5nIGFnYWluIHdpbGwgY2F1c2UgY3ljbGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+RG91YmxlLWNsaWNraW5nIHdpdGhpbiBhbiBhdHRyaWJ1dGUgbmFtZToKLSAgPFVMPgotICAgIDxMST5UeXBlIDxCPkN0cmwrRW5kPC9CPiB0byBwb3NpdGlvbiB0aGUgY3Vyc29yIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIHdpdGhpbiA8Qj5kaXN0cmlidXRlPC9CPiBvbiBsaW5lIDYxLiBWZXJpZnkgPEI+ZGlzdHJpYnV0ZTwvQj4gaXMgc2VsZWN0ZWQgCi0gICAgICAgIGluIHRoZSBTb3VyY2UgcGFnZSBhbmQgPEI+SG93VG9BcHBseTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFuZCBPdXRsaW5lIAotICAgICAgICB2aWV3LiA8Qj5jbGFzczwvQj4sIDxCPmRpc3RyaWJ1dGU8L0I+LCA8Qj5pZDwvQj4sIGFuZCA8Qj5uYW1lPC9CPiBzaG91bGQgYXBwZWFyIGluIAotICAgICAgICB0aGUgUHJvcGVydGllcyB2aWV3LiBPbmx5IDxCPmRpc3RyaWJ1dGU8L0I+IHNob3VsZCBzaG93IGEgdmFsdWUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IDxCPmRpc3RyaWJ1dGU9ImludGVybmFsIjwvQj4gaXMKLSAgICAgICAgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy48L0xJPiAgICAgICAgICAgICAgICAgCi0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSB0aGUgd2hvbGUgPEI+SG93VG9BcHBseTwvQj4gc3RhcnQgdGFnIGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgcGFnZSAoaW5jbHVkaW5nIGl0cyBkZWxpbWl0ZXJzKS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy48Qj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SG93VG9BcHBseTwvRk9OVD48L0I+PEZPTlQgY29sb3I9IiNmZjAwMDAiPiBhbmQgYWxsIGRlc2NlbmRlbnRzIGJlY29tZSBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IChkZWZlY3QgMTc3NzUyKS4gQWxzbywgdGhlIFByb3BlcnRpZXMgdmlldyBzaG93cyBubyBwcm9wZXJ0aWVzIChkZWZlY3QgMTc3NzUzKS48L0ZPTlQ+PC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNraW5nIGFnYWluIHdpbGwgY2F1c2UgY3ljbGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uPC9MST4KLSAgPC9VTD48L0xJPgotIDxMST5Eb3VibGUtY2xpY2tpbmcgd2l0aGluIGFuIGF0dHJpYnV0ZSB2YWx1ZToKLSAgPFVMPgotICAgIDxMST5UeXBlIDxCPkN0cmwrSG9tZTwvQj4gdG8gcG9zaXRpb24gdGhlIGN1cnNvciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLjwvTEk+Ci0gICAgPExJPlNjcm9sbCBkb3duIHN1Y2ggdGhhdCBsaW5lIDYxIGlzIHZpc2libGUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIHdpdGhpbiA8Qj5pbnRlcm5hbDwvQj4gb24gbGluZSA2MS4gVmVyaWZ5IDxCPmludGVybmFsPC9CPiBpcyBzZWxlY3RlZCAKLSAgICAgICAgaW4gdGhlIFNvdXJjZSBwYWdlIGFuZCA8Qj5Ib3dUb0FwcGx5PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYW5kIE91dGxpbmUgCi0gICAgICAgIHZpZXcuIDxCPmNsYXNzPC9CPiwgPEI+ZGlzdHJpYnV0ZTwvQj4sIDxCPmlkPC9CPiwgYW5kIDxCPm5hbWU8L0I+IHNob3VsZCBhcHBlYXIgaW4gCi0gICAgICAgIHRoZSBQcm9wZXJ0aWVzIHZpZXcuIE9ubHkgPEI+ZGlzdHJpYnV0ZTwvQj4gc2hvdWxkIHNob3cgYSB2YWx1ZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgPEI+ImludGVybmFsIjwvQj4gaXMKLSAgICAgICAgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgPEI+ZGlzdHJpYnV0ZT0iaW50ZXJuYWwiPC9CPiBpcwotICAgICAgICBzZWxlY3RlZCBpbiB0aGUgU291cmNlLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLjwvTEk+ICAgICAgICAgICAgICAgICAKLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IHRoZSB3aG9sZSA8Qj5Ib3dUb0FwcGx5PC9CPiBzdGFydCB0YWcgaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlIChpbmNsdWRpbmcgaXRzIGRlbGltaXRlcnMpLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLiA8Qj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SG93VG9BcHBseTwvRk9OVD48L0I+PEZPTlQgY29sb3I9IiNmZjAwMDAiPiBhbmQgYWxsIGRlc2NlbmRlbnRzIGJlY29tZSBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IChkZWZlY3QgMTc3NzUyKS4gQWxzbywgdGhlIFByb3BlcnRpZXMgdmlldyBzaG93cyBubyBwcm9wZXJ0aWVzIChkZWZlY3QgMTc3NzUzKS48L0ZPTlQ+PC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNraW5nIGFnYWluIHdpbGwgY2F1c2UgY3ljbGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uPC9MST4KLSAgPC9VTD48L0xJPgotPC9VTD4KLQotPFA+PEI+Rm9ybWF0dGluZyBhIEZpbGUgQ3JlYXRlZCBieSBEaWZmZXJlbnQgRWRpdG9yczwvQj48QlI+Ci08dWw+Ci08bGk+Ci1JbXBvcnQgdGhlIDxiPkpvYlBvc3RpbmcuZHRkPC9iPiBhbmQgPGI+Sm9iRGVzYy54bWw8L2I+PC9saT4KLQotPGxpPgotT3BlbiB0aGUgSm9iRGVzYy54bWwuIENoZWNrIHRoZSBzb3VyY2UgZm9yIGluZGVudGF0aW9uIHRvIHNlZSBpZiBpdCBwcmVzZXJ2ZXMKLXRoZSB3aGl0ZSBzcGFjZSBmcm9tIHRoZSBvcmlnaW5hbCBkb2N1bWVudC48L2xpPgotCi08bGk+Ci1UaGUgb3JpZ25hbCBkb2N1bWVudCB1c2VzIHNwYWNlcyBhbmQgdGFicywgc28gdGhlIGZvcm1hdHRpbmcgd2lsbCBhcHBlYXIgYSBsaXR0bGUgd3JvbmcuCi1CeSB1c2luZyB0aGUgcmlnaHQvbGVmdCBhcnJvd3MsIHZlcmlmeSB0aGF0IHNvbWUgc3BhY2UgaXMgc3BhY2VzIGFuZCBzb21lIHNwYWNlCi1pcyB0YWIgY2hhcmFjdGVycy48L2xpPgotPExJPlVzZSAnZm9ybWF0IGRvY3VtZW50JyB0byBiZSBzdXJlIGl0IGZvcm1hdHMuIDwvTEk+Ci08TEk+VGhlIGRlZmF1bHQgaXMgdG8gZm9ybWF0IHdpdGggc3BhY2VzIC4uLiB2ZXJpZnkgb25seSBzcGFjZXMgcmVtYWluIGluIGZpbGUsIG5vdCB0YWIgY2hhcmFjdGVzLiAKLShKdXN0IGEgbGl0dGxlIG1vdmVtZW50IHdpdGggdGhlIGFycm93IGtleXMgc2hvdWxkIHN1ZmZpY2UuPC9MST4KLTxMST5HbyB0byB0aGUgcHJlZmVyZW5jZSBwYWdlIHRvIGNoYW5nZSB0aGUgZm9ybWF0IHNldHRpbmdzIGZvciB0aGUgWE1MIEVkaXRvcgotdG8gdXNlIHRoZSB0YWIgY2hhcmFjdGVyIGluc3RlYWQgb2YgNCBzcGFjZXMuIFdoaWxlIHRoZXJlLCB2ZXJpZnkgdGhhdCB0aGUgZGlhbG9nCi13aWxsIG5vdCBhbGxvdyBvdGhlciB2YWx1ZXMgdG8gYmUgaW50ZXJlZCBleGNlcHQgIndoaXRlc3BhY2UiIC4uLidcdCdzIGFuZCBibGFua3MuCi08L0xJPgotPExJPkZvcm1hdCB0aGUgZG9jdW1lbnQgYWdhaW4gYW5kIGJlIHN1cmUgdGhpcyB0aW1lIHRhYiBjaGFyYWN0ZXJzIHdlcmUgdXNlZC48L0xJPgotPC91bD4KLTxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjYzIiBzcmM9InUwMTFhbmkuZ2lmIiB3aWR0aD0iNjMiPjwvUD4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE90aGVyIHRlc3QgY2FzZXMKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxCPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5PdGhlciB0ZXN0IGNhc2VzPC9GT05UPjwvQj48L0gyPgotPFA+PEI+QXNzb2NpYXRlIHRoZSBYTUwgRWRpdG9yIHRvIGEgbmV3IGZpbGUgdHlwZTwvQj48L1A+Ci08VUw+Ci0gIDxMST5XaW5kb3ctJmd0O1ByZWZlcmVuY2VzPEI+PC9CPi48L0xJPgotICA8TEk+RXhwYW5kIDxCPldvcmtiZW5jaDwvQj4uPC9MST4KLSAgPExJPlNlbGVjdCA8Qj5GaWxlIEVkaXRvcnM8L0I+LjwvTEk+Ci0gIDxMST5TZWxlY3QgdGhlIDxCPkFkZDwvQj4gYnV0dG9uIHRvIGFkZCBhIG5ldyBmaWxlIHR5cGUuPC9MST4KLSAgPExJPlNwZWNpZnkgYSBmaWxlIHR5cGUgb2YgPEI+Ki5zZXQ8L0I+IGFuZCB0aGVuIGNsb3NlIHRoZSBBZGQgZGlhbG9nLjwvTEk+Ci0gIDxMST5WZXJpZnkgPEI+Ki5zZXQ8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBsaXN0IG9mIGZpbGUgdHlwZXMuPC9MST4KLSAgPExJPlNlbGVjdCB0aGUgPEI+QWRkPC9CPiBidXR0b24gdG8gYXNzb2NpYXRlIHRoZSBYTUwgRWRpdG9yIHRvIHRoZSBuZXcgZmlsZSB0eXBlLjwvTEk+Ci0gIDxMST5TZWxlY3QgPEI+WE1MIEVkaXRvcjwvQj4gZnJvbSB0aGUgbGlzdCBvZiBlZGl0b3JzLiBWZXJpZnkgaXQgYXBwZWFycyB3aXRoIGl0cyBvd24gc3BlY2lhbCBpY29uLiBDbG9zZSB0aGUgZGlhbG9nLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+Tk9URTogd2FpdGluZyB0byBoZWFyIGJhY2sgZnJvbSBPVEkgb24gaG93IGNhbiBwcmV2ZW50IDIgWE1MIEVkaXRvciBlbnRyaWVzIGZyb20gYXBwZWFyaW5nIGluIHRoZSBsaXN0LjwvRk9OVD48L0xJPgotICA8TEk+VmVyaWZ5IDxCPlhNTCBFZGl0b3I8L0I+IGFwcGVhcnMgYXMgdGhlIGRlZmF1bHQgZWRpdG9yIG5vdyBmb3IgdGhlIDxCPiouc2V0PC9CPiBmaWxlIHR5cGUuPC9MST4KLSAgPExJPk9wZW4gPEI+Z290Y2hhVENCZWFucy5zZXQ8L0I+IGZyb20gdGhlIE5hdmlnYXRvciB2aWV3LiBWZXJpZnkgaXQgb3BlbnMgdG8gdGhlIFhNTCBFZGl0b3IuPC9MST4KLTwvVUw+Ci08UD48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+VEhFIEVORCE8L0ZPTlQ+PC9QPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vbkRlZmF1bHQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTGFyZ2VOb25EZWZhdWx0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiY2RkMTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vbkRlZmF1bHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY2NSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy9EVEQvIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLQotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJNb3ppbGxhLzQuNyBbZW5dIChXaW5OVDsgVSkgW05ldHNjYXBlXSI+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+PEZPTlQgY29sb3I9IiMwMDAwZmYiPlRIRSBFTkQhPC9GT05UPjwvUD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTXVsdGlOb25EZWZhdWx0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL011bHRpTm9uRGVmYXVsdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzcyMTEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTXVsdGlOb25EZWZhdWx0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08SEVBRD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktNiI+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPgotPFRJVExFPklCTSBXZWJTcGhlcmUgU2FtcGxlcyBHYWxsZXJ5PC9USVRMRT4KLTwvSEVBRD4KLTxGUkFNRVNFVCByb3dzPSI3NSwqIj4KLQk8RlJBTUUgbmFtZT0idGl0bGUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvVGl0bGUuaHRtbCIgc2Nyb2xsaW5nPSJOTyIgbm9yZXNpemU+Ci0JPEZSQU1FU0VUIGNvbHM9IjE2MCwqIj4KLQkJPEZSQU1FIG5hbWU9Im1lbnUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvTWVudS5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCQk8RlJBTUUgbmFtZT0ibWFpbiIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9TYW1wbGVzSW50cm8uaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQk8L0ZSQU1FU0VUPgotCTxOT0ZSQU1FUz4KLQk8Qk9EWT4KLQk8UD5UbyB2aWV3IHRoaXMgcGFnZSwgeW91IG5lZWQgYSBicm93c2VyIHRoYXQgc3VwcG9ydHMgZnJhbWVzLjwvUD4KLQk8L0JPRFk+Ci0JPC9OT0ZSQU1FUz4KLTwvRlJBTUVTRVQ+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL05vRW5jb2RpbmcuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTm9FbmNvZGluZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzBlNGZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTm9FbmNvZGluZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPEhFQUQ+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPgotPFRJVExFPklCTSBXZWJTcGhlcmUgU2FtcGxlcyBHYWxsZXJ5PC9USVRMRT4KLTwvSEVBRD4KLTxGUkFNRVNFVCByb3dzPSI3NSwqIj4KLQk8RlJBTUUgbmFtZT0idGl0bGUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvVGl0bGUuaHRtbCIgc2Nyb2xsaW5nPSJOTyIgbm9yZXNpemU+Ci0JPEZSQU1FU0VUIGNvbHM9IjE2MCwqIj4KLQkJPEZSQU1FIG5hbWU9Im1lbnUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvTWVudS5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCQk8RlJBTUUgbmFtZT0ibWFpbiIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9TYW1wbGVzSW50cm8uaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQk8L0ZSQU1FU0VUPgotCTxOT0ZSQU1FUz4KLQk8Qk9EWT4KLQk8UD5UbyB2aWV3IHRoaXMgcGFnZSwgeW91IG5lZWQgYSBicm93c2VyIHRoYXQgc3VwcG9ydHMgZnJhbWVzLjwvUD4KLQk8L0JPRFk+Ci0JPC9OT0ZSQU1FUz4KLTwvRlJBTUVTRVQ+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL05vcm1hbE5vbkRlZmF1bHQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTm9ybWFsTm9uRGVmYXVsdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTMwYzlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTm9ybWFsTm9uRGVmYXVsdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPEhFQUQ+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPgotPFRJVExFPklCTSBXZWJTcGhlcmUgU2FtcGxlcyBHYWxsZXJ5PC9USVRMRT4KLTwvSEVBRD4KLTxGUkFNRVNFVCByb3dzPSI3NSwqIj4KLQk8RlJBTUUgbmFtZT0idGl0bGUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvVGl0bGUuaHRtbCIgc2Nyb2xsaW5nPSJOTyIgbm9yZXNpemU+Ci0JPEZSQU1FU0VUIGNvbHM9IjE2MCwqIj4KLQkJPEZSQU1FIG5hbWU9Im1lbnUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvTWVudS5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCQk8RlJBTUUgbmFtZT0ibWFpbiIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9TYW1wbGVzSW50cm8uaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQk8L0ZSQU1FU0VUPgotCTxOT0ZSQU1FUz4KLQk8Qk9EWT4KLQk8UD5UbyB2aWV3IHRoaXMgcGFnZSwgeW91IG5lZWQgYSBicm93c2VyIHRoYXQgc3VwcG9ydHMgZnJhbWVzLjwvUD4KLQk8L0JPRFk+Ci0JPC9OT0ZSQU1FUz4KLTwvRlJBTUVTRVQ+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL25vcXVvdGVzLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL25vcXVvdGVzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NGNkZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9ub3F1b3Rlcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPEhFQUQ+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD10ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTg+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS02Ij4KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPgotPFRJVExFPklCTSBXZWJTcGhlcmUgU2FtcGxlcyBHYWxsZXJ5PC9USVRMRT4KLTwvSEVBRD4KLTxGUkFNRVNFVCByb3dzPSI3NSwqIj4KLQk8RlJBTUUgbmFtZT0idGl0bGUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvVGl0bGUuaHRtbCIgc2Nyb2xsaW5nPSJOTyIgbm9yZXNpemU+Ci0JPEZSQU1FU0VUIGNvbHM9IjE2MCwqIj4KLQkJPEZSQU1FIG5hbWU9Im1lbnUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvTWVudS5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCQk8RlJBTUUgbmFtZT0ibWFpbiIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9TYW1wbGVzSW50cm8uaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQk8L0ZSQU1FU0VUPgotCTxOT0ZSQU1FUz4KLQk8Qk9EWT4KLQk8UD5UbyB2aWV3IHRoaXMgcGFnZSwgeW91IG5lZWQgYSBicm93c2VyIHRoYXQgc3VwcG9ydHMgZnJhbWVzLjwvUD4KLQk8L0JPRFk+Ci0JPC9OT0ZSQU1FUz4KLTwvRlJBTUVTRVQ+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvRW1wdHlGaWxlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9FbXB0eUZpbGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9FbXB0eUZpbGUuanNwCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZkMGU3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTg/Pg0KLTwlQHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgcGFnZUVuY29kaW5nPSJJU08tODg1OS03JT4NCi08dGVzdD4NCi08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmcuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjVlYjE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9NYWxmb3JtZWROb0VuY29kaW5nLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iIj8+DQotPHRhZz4NCi1BdXN0cmFsaesNCi08L3RhZz4NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZ1hTTC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZ1hTTC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMzM1OWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmdYU0wuanNwCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSIiPz4NCi08eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iDQotICAgIHZlcnNpb249IjEuMCINCi0gICAgeG1sbnM6eGFsYW49Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0Ij4NCi08eHNsOnZhcmlhYmxlIG5hbWU9ImJhZEVuY29kaW5nIj4NCi1BdXN0cmFsaesNCi08L3hzbDp2YXJpYWJsZT4NCi08L3hzbDpzdHlsZXNoZWV0Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob0VuY29kaW5naW5YTUxEZWNsLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob0VuY29kaW5naW5YTUxEZWNsLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVjZTc2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9FbmNvZGluZ2luWE1MRGVjbC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlODllNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSI5OSIgZW5jb2Rpbmc9IklTTy04ODU5LTgiPz4NCi08dGVzdD4NCi08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHRXaXRoWE1MRGVjbC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg2MjQ4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktOCI/Pg0KLTwlQHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgcGFnZXRFbmNvZGluZz0iSVNPLTg4NTktNyIlPg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjI3YmJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0NCi08JUBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktNyIgJT4NCi08dGVzdD4NCi08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4MzdlZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi1JIGZvdW5kIHRoaXMgY2hhbmdlDQotDQotPCVAIHBhZ2UNCi1pbXBvcnQ9IlNlbENvbEJlYW5Sb3cxMlZpZXdCZWFuIg0KLSBwYWdlRW5jb2Rpbmc9IlNISUZUX0pJUyINCi0gY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1KVU5LIg0KLSU+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+DQotPC9ib2R5Pg0KLTwvaHRtbD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvVVRGOFdpdGgzQnl0ZUJPTS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvVVRGOFdpdGgzQnl0ZUJPTS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5YTM5Y2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1VURjhXaXRoM0J5dGVCT00uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvV2VsbEZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1dlbGxGb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWYyOTY1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvV2VsbEZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS04Ij8+DQotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgcGFnZUVuY29kaW5nPSJJU08tODg1OS03IiU+DQotPHRlc3Q+DQotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvaW5WYWxpZEVuY29kaW5nVmFsdWUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDA5MmUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi08SFRNTD4NCi08SEVBRD4NCi08JUAgcGFnZSANCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PWFiYyINCi0lPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4NCi08TElOSyBocmVmPSIuLi90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08VElUTEU+aW5WYWxpZEVuY29kaW5nVmFsdWUuanNwPC9USVRMRT4NCi08L0hFQUQ+DQotPEJPRFk+DQotPFA+UGxhY2UgaW5WYWxpZEVuY29kaW5nVmFsdWUuanNwJ3MgY29udGVudCBoZXJlLjwvUD4NCi08L0JPRFk+DQotPC9IVE1MPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9qYXZhRW5jb2RpbmdWYWx1ZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvamF2YUVuY29kaW5nVmFsdWUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWM2ZDE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9qYXZhRW5jb2RpbmdWYWx1ZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi08SFRNTD4NCi08SEVBRD4NCi08JUAgcGFnZSANCi1sYW5ndWFnZT0iamF2YSIgIA0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9Q3AxMjUyIg0KLSU+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPg0KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTxUSVRMRT5pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3A8L1RJVExFPg0KLTwvSEVBRD4NCi08Qk9EWT4NCi08UD5QbGFjZSBpblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AncyBjb250ZW50IGhlcmUuPC9QPg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDlkMDRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub0VuY29kaW5nLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWwiDQotJT4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+DQotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+DQotPExJTksgaHJlZj0iLi4vdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPFRJVExFPm5vRW5jb2RpbmcuanNwPC9USVRMRT4NCi08L0hFQUQ+DQotPEJPRFk+DQotPFA+UGxhY2Ugbm9FbmNvZGluZy5qc3AncyBjb250ZW50IGhlcmUuPC9QPg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI0MzJmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPCVAIHBhZ2UNCi1wYWdlRW5jb2Rpbmc9ICJJU08tODg1OS0yIg0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMyINCi0lPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VOb0VuY29kaW5nLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VOb0VuY29kaW5nLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY1NjkwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlTm9FbmNvZGluZy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIg0KLSU+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nQ2hhcnNldC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdDaGFyc2V0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRkOTA4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdDaGFyc2V0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0zIg0KLSU+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nWE1MU3ludGF4LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ1hNTFN5bnRheC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NzRhMDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nWE1MU3ludGF4LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPGpzcDpkaXJlY3RpdmUucGFnZSANCi1wYWdlRW5jb2Rpbmc9IklTTy04ODU5LTIiDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0zIi8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RCcm9rZW5MaW5lLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0QnJva2VuTGluZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyNjc5ODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RCcm9rZW5MaW5lLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiAgDQotDQotZW5jb2Rpbmc9IklTTy04ODU5LTMiIA0KLQ0KLSA/Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFmMjg3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ0ZXN0anVuayI/Pg0KLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSINCi0lPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXRlc3RqdW5rIj4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4NCi08TElOSyBocmVmPSIuLi90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08VElUTEU+dGVzdERlZmF1bHRFbmNvZGluZy5qc3A8L1RJVExFPg0KLTwvSEVBRD4NCi08Qk9EWT4NCi08UD5QbGFjZSB0ZXN0RGVmYXVsdEVuY29kaW5nLmpzcCdzIGNvbnRlbnQgaGVyZS48L1A+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZ1dpdGhKdW5rLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nV2l0aEp1bmsuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDQ4Njg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nV2l0aEp1bmsuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idGVzdGp1bmsiPz4NCi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi08SFRNTD4NCi08SEVBRD4NCi08JUAgcGFnZSANCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiDQotJT4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD10ZXN0anVuayI+DQotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+DQotPExJTksgaHJlZj0iLi4vdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPFRJVExFPnRlc3REZWZhdWx0RW5jb2RpbmcuanNwPC9USVRMRT4NCi08L0hFQUQ+DQotPEJPRFk+DQotPFA+UGxhY2UgdGVzdERlZmF1bHRFbmNvZGluZy5qc3AncyBjb250ZW50IGhlcmUuPC9QPg0KLTwlDQotU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0Iik7DQotJT4NCi08L0JPRFk+DQotPC9IVE1MPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFKdW5rLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFKdW5rLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU3Zjk1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEV4dHJhSnVuay5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgIGFiY2Q9ImVmYyINCi0NCi1lbmNvZGluZz0iSVNPLTg4NTktMSIgDQotDQotID8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYVZhbGlkU3R1ZmYuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYVZhbGlkU3R1ZmYuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2QwYTNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFWYWxpZFN0dWZmLmpzcAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2YmY5MDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIGVuY29kaW5nPVVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZDIuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM4ZWMyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZDIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPVVURi04IA0KLTx0ZXN0Pg0KLTwvdGVzdD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vRW5jb2RpbmdWYWx1ZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vRW5jb2RpbmdWYWx1ZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzZDBjMTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb0VuY29kaW5nVmFsdWUuanNwCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiAgICA/Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWEwMTc0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTx0ZXN0Pg0KLQ0KLTwvdGVzdD4NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUF0Rmlyc3QuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODlhMGMzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUF0Rmlyc3QuanNwCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08dGVzdD4NCi0gPCVAIHBhZ2UgDQotcGFnZUVuY29kaW5nPSJJU08tODg1OS0yIg0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMyINCi0lPg0KLTwvdGVzdD4NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUluTGFyZ2VGaWxlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlSW5MYXJnZUZpbGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzQ2MzZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlSW5MYXJnZUZpbGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzU2ICswLDAgQEAKLTx0ZXN0Pg0KLQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi08L3Rlc3Q+DQotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vcm1hbENhc2UuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb3JtYWxDYXNlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWEyYzQyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vcm1hbENhc2UuanNwCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdFVURjE2LkZyb21Ob3RlcGFkanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5Gcm9tTm90ZXBhZGpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzViOTg1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdFVURjE2LkZyb21Ob3RlcGFkanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdFVURjE2LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ5ZTgxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdFVURjE2LmpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2U2OTE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi5qc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2ZmZDZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUuanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGJhOWJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLmpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgzN2VlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+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/PgotPC90ZXN0PgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdlNjkxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdmZmQ2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLnhtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY2ZTM3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy54bWwKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MWM4ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmIwYTdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluCi0KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXhtbHVpdGVzdHMuamFyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YzZTY4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPjwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmQyZjg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotI1dlZCBKYW4gMTIgMTY6NDk6MzcgRVNUIDIwMDUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9YWJvcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNjN2UwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jRnJpIE1heSAyNyAyMzo0MTo1MiBFRFQgMjAwNQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxNDA5MDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6IFhNTCBVSSBUZXN0cwotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAKLUJ1bmRsZS1DbGFzc1BhdGg6IHhtbHVpdGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLlhNTFVJVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5icmVha3BvaW50cywKLSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLnZpZXdlcgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC51aSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLAotIG9yZy5lY2xpcHNlLnVpLmVkaXRvcnMsCi0gb3JnLmVjbGlwc2UudWkud29ya2JlbmNoLnRleHRlZGl0b3IsCi0gb3JnLmVjbGlwc2UudWkuaWRlLAotIG9yZy5qdW5pdCwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2UudWkudmlld3MsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZQotRWNsaXBzZS1BdXRvU3RhcnQ6IHRydWUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY2Yjk2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLTxib2R5IGxhbmc9IkVOLVVTIj4KLTxoMj5BYm91dCBUaGlzIENvbnRlbnQ8L2gyPgotIAotPHA+RmVicnVhcnkgMjQsIDIwMDU8L3A+CQotPGgzPkxpY2Vuc2U8L2gzPgotCi08cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gKCZxdW90O0NvbnRlbnQmcXVvdDspLiAgVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCi1FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgotCi08cD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSBDb250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoJnF1b3Q7UmVkaXN0cmlidXRvciZxdW90OykgYW5kIGRpZmZlcmVudCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkKLWFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gIENoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiAgSWYgbm8gc3VjaCBsaWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gIFVubGVzcyBvdGhlcndpc2UKLWluZGljYXRlZCBiZWxvdywgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50LjwvcD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY4MjU0OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICB4bWx1aXRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbAotamFycy5jb21waWxlLm9yZGVyID0geG1sdWl0ZXN0cy5qYXIKLXNvdXJjZS54bWx1aXRlc3RzLmphciA9IHNyYy8KLW91dHB1dC54bWx1aXRlc3RzLmphciA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvaWNvbnMvYnJrcF9vYmouZ2lmIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9pY29ucy9icmtwX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4MzFmZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9pY29ucy9icmtwX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL2ljb25zL3NvdXJjZUVkaXRvci5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL2ljb25zL3NvdXJjZUVkaXRvci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ZWJkYjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9pY29ucy9zb3VyY2VFZGl0b3IuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlNDk2MTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvcGx1Z2luLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjJhZTBiZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPHBsdWdpbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzIj4KLQotCQk8dmlldwotCQkJbmFtZT0iRW1iZWRkZWQgWE1MIFN0cnVjdHVyZWQgVGV4dCBWaWV3ZXIiCi0JCQlpY29uPSJpY29ucy9zb3VyY2VFZGl0b3IuZ2lmIgotCQkJY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy52aWV3ZXIuVmlld2VyVGVzdFhNTCIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLnZpZXdlci5WaWV3ZXJUZXN0WE1MIj4KLQkJPC92aWV3PgotCTwvZXh0ZW5zaW9uPgotCi0JPCEtLSB0ZXN0IGZvciBicmVha3BvaW50IGVycm9yIGhhbmRsaW5nIC0gLT4KLQkJPGV4dGVuc2lvbgotCQlwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5leHRlbnNpb25zLmJyZWFrcG9pbnQiPgotCQk8YnJlYWtwb2ludENvbnRyaWJ1dGlvbgotCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS5wcm92aWRlcnMudGVzdCI+Ci0JCTxwcm92aWRlcgotCQljb250ZW50VHlwZXM9Im9yZy5lY2xpcHNlLndzdC54bWwuY29yZS54bWxzb3VyY2Usb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCIKLQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuYnJlYWtwb2ludHMuQnJlYWtwb2ludEVycm9yUHJvdmlkZXIiCi0JCWlkPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLmJyZWFrcG9pbnRzLkJyZWFrcG9pbnRFcnJvclByb3ZpZGVyIj4KLQkJPC9wcm92aWRlcj4KLQkJPC9icmVha3BvaW50Q29udHJpYnV0aW9uPgotCQk8L2V4dGVuc2lvbj4KLQktLT4KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmV4dGVuZGVkRWRpdG9yQWN0aW9ucyI+Ci0JCTxlZGl0b3JDb250cmlidXRpb24KLQkJCXRhcmdldElEPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yIgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuYWN0aW9ucyI+Ci0JCQk8YWN0aW9uCi0JCQkJcG9wdXBtZW51UGF0aD0iZ3JvdXAuZWRpdG9yIgotCQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLmJyZWFrcG9pbnRzLkVuYWJsZVdhcm5pbmdBY3Rpb24iCi0JCQkJbWVudWJhclBhdGg9ImVkaXQvTWVudUFkZGl0aW9ucyIKLQkJCQlpY29uPSJpY29ucy9icmtwX29iai5naWYiCi0JCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuYnJlYWtwb2ludHMuRW5hYmxlV2FybmluZ0FjdGlvbiI+Ci0JCQk8L2FjdGlvbj4KLQkJPC9lZGl0b3JDb250cmlidXRpb24+Ci0JPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvYmFzaWNYSFRNTC5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL2Jhc2ljWEhUTUwuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmNiZWU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvYmFzaWNYSFRNTC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL2NvbnYyWEhUTUwuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9jb252MlhIVE1MLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI1YzZiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL2NvbnYyWEhUTUwuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9pZGVudGlmeURURC5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL2lkZW50aWZ5RFRELmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNjODY0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL2lkZW50aWZ5RFRELmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvaW1wb3J0RFRELmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvaW1wb3J0RFRELmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgxNWQ2Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL2ltcG9ydERURC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL291dGxpbmUxLmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvb3V0bGluZTEuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWQyMWI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvb3V0bGluZTEuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9vdXRsaW5lMi5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL291dGxpbmUyLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI0NTNmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL291dGxpbmUyLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvc2V0dXBGaWxlcy9XaXJlbGVzcy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3NldHVwRmlsZXMvV2lyZWxlc3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmU2YTNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvc2V0dXBGaWxlcy9XaXJlbGVzcy54bWwKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3N0cmljdFhIVE1MLmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvc3RyaWN0WEhUTUwuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGNkMGVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvc3RyaWN0WEhUTUwuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ZpbGVzL0pvYkRlc2NFUlJPUi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfZmlsZXMvSm9iRGVzY0VSUk9SLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfZmlsZXMvSm9iRGVzY0VSUk9SLnhtbAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL0VKQlRhc2tzX2FmdGVyX3Bhc3RlLmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvRUpCVGFza3NfYWZ0ZXJfcGFzdGUuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGJmNTQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvRUpCVGFza3NfYWZ0ZXJfcGFzdGUuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9FSkJUYXNrc19iZWZvcmVfcGFzdGUuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9FSkJUYXNrc19iZWZvcmVfcGFzdGUuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWYxZWIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvRUpCVGFza3NfYmVmb3JlX3Bhc3RlLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvaW52YWxpZF9kdGQuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9pbnZhbGlkX2R0ZC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwMGJiMDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9pbnZhbGlkX2R0ZC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3NjaGVtYV9tdWx0aV9lcnJvci5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3NjaGVtYV9tdWx0aV9lcnJvci5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlYTAzNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9zY2hlbWFfbXVsdGlfZXJyb3IuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9zY2hlbWFfdW5rbm93bl9lbGVtZW50LmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvc2NoZW1hX3Vua25vd25fZWxlbWVudC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0M2FjYzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9zY2hlbWFfdW5rbm93bl9lbGVtZW50LmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvd19kb2N0eXBlLmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvd19kb2N0eXBlLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyODg2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3dfZG9jdHlwZS5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3dvdXRfZG9jdHlwZS5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3dvdXRfZG9jdHlwZS5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2MzcyMjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy93b3V0X2RvY3R5cGUuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy93cm9uZ19kdGQuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy93cm9uZ19kdGQuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2QyNDFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvd3JvbmdfZHRkLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdTAxMWFuaS5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3UwMTFhbmkuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDYzYWZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdTAxMWFuaS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3dpcmVsZXNzLmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvd2lyZWxlc3MuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMGZjY2FkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvd2lyZWxlc3MuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9Mb2dnZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MGFmZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9Mb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBTbWFsbCBjb252ZW5pZW5jZSBjbGFzcyB0byBsb2cgbWVzc2FnZXMgdG8gcGx1Z2luJ3MgbG9nIGZpbGUgYW5kIGFsc28sIGlmIGRlc2lyZWQsCi0gKiB0aGUgY29uc29sZS4gVGhpcyBjbGFzcyBzaG91bGQgb25seSBiZSB1c2VkIGJ5IGNsYXNzZXMgaW4gdGhpcyBwbHVnaW4uIE90aGVyCi0gKiBwbHVnaW5zIHNob3VsZCBtYWtlIHRoZWlyIG93biBjb3B5LCB3aXRoIGFwcHJvcHJpYXRlIElELgotICovCi1wdWJsaWMgY2xhc3MgTG9nZ2VyIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQUNFRklMVEVSX0xPQ0FUSU9OID0gIi9kZWJ1Zy90cmFjZWZpbHRlciI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LID0gSVN0YXR1cy5PSzsgLy8gMAotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk8gPSBJU3RhdHVzLklORk87IC8vIDEKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HID0gSVN0YXR1cy5XQVJOSU5HOyAvLyAyCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1IgPSBJU3RhdHVzLkVSUk9SOyAvLyA0Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPS19ERUJVRyA9IDIwMCArIE9LOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk9fREVCVUcgPSAyMDAgKyBJTkZPOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkdfREVCVUcgPSAyMDAgKyBXQVJOSU5HOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0RFQlVHID0gMjAwICsgRVJST1I7Ci0KLQkvKioKLQkgKiBBZGRzIG1lc3NhZ2UgdG8gbG9nLgotCSAqIEBwYXJhbSBsZXZlbCBzZXZlcml0eSBsZXZlbCBvZiB0aGUgbWVzc2FnZSAoT0ssIElORk8sIFdBUk5JTkcsIEVSUk9SLCBPS19ERUJVRywgSU5GT19ERUJVRywgV0FSTklOR19ERUJVRywgRVJST1JfREVCVUcpCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBhZGQgdG8gdGhlIGxvZwotCSAqIEBwYXJhbSBleGNlcHRpb24gZXhjZXB0aW9uIHRocm93bgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGxldmVsID09IE9LX0RFQlVHIHx8IGxldmVsID09IElORk9fREVCVUcgfHwgbGV2ZWwgPT0gV0FSTklOR19ERUJVRyB8fCBsZXZlbCA9PSBFUlJPUl9ERUJVRykgewotCQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJCXJldHVybjsKLQkJfQotCi0JCWludCBzZXZlcml0eSA9IElTdGF0dXMuT0s7Ci0JCXN3aXRjaCAobGV2ZWwpIHsKLQkJCWNhc2UgSU5GT19ERUJVRyA6Ci0JCQljYXNlIElORk8gOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5JTkZPOwotCQkJCWJyZWFrOwotCQkJY2FzZSBXQVJOSU5HX0RFQlVHIDoKLQkJCWNhc2UgV0FSTklORyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLldBUk5JTkc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEVSUk9SX0RFQlVHIDoKLQkJCWNhc2UgRVJST1IgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5FUlJPUjsKLQkJfQotCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKHNldmVyaXR5LCBQTFVHSU5fSUQsIHNldmVyaXR5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQl9Ci0KLQkvKioKLQkgKiBQcmludHMgbWVzc2FnZSB0byBsb2cgaWYgY2F0ZWdvcnkgbWF0Y2hlcyAvZGVidWcvdHJhY2VmaWx0ZXIgb3B0aW9uLgotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gcHJpbnQKLQkgKiBAcGFyYW0gY2F0ZWdvcnkgY2F0ZWdvcnkgb2YgdGhlIG1lc3NhZ2UsIHRvIGJlIGNvbXBhcmVkIHdpdGggL2RlYnVnL3RyYWNlZmlsdGVyCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF90cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChpc1RyYWNpbmcoY2F0ZWdvcnkpKSB7Ci0JCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBQTFVHSU5fSUQsIElTdGF0dXMuT0ssIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybSBpcyBkZWJ1Z2dpbmcKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEZWJ1Z2dpbmcoKSB7Ci0JCXJldHVybiBQbGF0Zm9ybS5pbkRlYnVnTW9kZSgpOwotCX0KLQotCS8qKgotCSAqIERldGVybWluZXMgaWYgY3VycmVudGx5IHRyYWNpbmcgYSBjYXRlZ29yeQotCSAqIEBwYXJhbSBjYXRlZ29yeQotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0cmFjaW5nIGNhdGVnb3J5LCBmYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUcmFjaW5nKFN0cmluZyBjYXRlZ29yeSkgewotCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nIHRyYWNlRmlsdGVyID0gUGxhdGZvcm0uZ2V0RGVidWdPcHRpb24oUExVR0lOX0lECi0JCQkJKyBUUkFDRUZJTFRFUl9MT0NBVElPTik7Ci0JCWlmICh0cmFjZUZpbHRlciAhPSBudWxsKSB7Ci0JCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcih0cmFjZUZpbHRlciwgIiwiKTsgLy8kTk9OLU5MUy0xJAotCQkJd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQlTdHJpbmcgY2F0ID0gdG9rZW5pemVyLm5leHRUb2tlbigpLnRyaW0oKTsKLQkJCQlpZiAoY2F0ZWdvcnkuZXF1YWxzKGNhdCkpIHsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSkgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIG51bGwpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uWE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uWE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjYzkwMzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvblhNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICBKZW5zIEx1a293c2tpL0lubm9vcHJhY3QgLSBpbml0aWFsIHJlbmFtaW5nL3Jlc3RydWN0dXJpbmcKLSAqIAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLkV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS52aWV3cy5jb250ZW50b3V0bGluZS5YTUxDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS52aWV3cy5wcm9wZXJ0aWVzLlhNTFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uOwotCi0vKioKLSAqIFRlc3RzIHJldHJpZXZpbmcgZWRpdG9yIGNvbnRyaWJ1dGlvbnMgZm9yIHhtbCBjb250ZW50IHR5cGUKLSAqLwotcHVibGljIGNsYXNzIFRlc3RFZGl0b3JDb25maWd1cmF0aW9uWE1MIGV4dGVuZHMgVGVzdENhc2UgewotCXB1YmxpYyB2b2lkIHRlc3RHZXRTb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuU09VUkNFVklFV0VSQ09ORklHVVJBVElPTiwgQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIHNvdXJjZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwsIG8pOwotCQkvLyBjaGVjayBmb3Igb3Zlci1xdWFsaWZpZWQgc3ViY2xhc3NlcwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgc291cmNlIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCwgby5nZXRDbGFzcygpLCBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50T3V0bGluZVZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0JCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5DT05URU5UT1VUTElORUNPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlhc3NlcnROb3ROdWxsKCJubyBjb250ZW50IG91dGxpbmUgdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MLCBvKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwsIG8uZ2V0Q2xhc3MoKSwgWE1MQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24oKSB7Ci0JCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5QUk9QRVJUWVNIRUVUQ09ORklHVVJBVElPTiwgQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIHByb3BlcnR5IHNoZWV0IGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MLCBvKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIHByb3BlcnR5IHNoZWV0IGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MLCBvLmdldENsYXNzKCksIFhNTFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uLmNsYXNzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RPcGVuRWRpdG9yWE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RPcGVuRWRpdG9yWE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjYmJmYzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0T3BlbkVkaXRvclhNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklERTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudGFibGV0cmVlLlhNTE11bHRpUGFnZUVkaXRvclBhcnQ7Ci0KLS8qKgotICogVGVzdCBtaXNjIGVkaXRvciBmdW5jdGlvbnMgd2l0aCBhbiBvcGVuIHhtbCBlZGl0b3IuCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0T3BlbkVkaXRvclhNTCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiVGVzdE9wZW5FZGl0b3JYTUwiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIEZJTEVfTkFNRSA9ICJ0ZXN0U3RydWN0dXJlZFRleHRFZGl0b3JYTUwueG1sIjsKLQotCXByaXZhdGUgc3RhdGljIElFZGl0b3JQYXJ0IGZFZGl0b3I7Ci0JcHJpdmF0ZSBzdGF0aWMgSUZpbGUgZkZpbGU7Ci0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBmSXNTZXR1cCA9IGZhbHNlOwotCi0JcHVibGljIFRlc3RPcGVuRWRpdG9yWE1MKCkgewotCQlzdXBlcigiVGVzdFN0cnVjdHJlZFRleHRFZGl0b3JYTUwiKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBvbmx5IGNyZWF0ZSBwcm9qZWN0IGFuZCBmaWxlIG9uY2UKLQkJaWYgKCFmSXNTZXR1cCkgewotCQkJLy8gY3JlYXRlIHByb2plY3QKLQkJCWNyZWF0ZVByb2plY3QoUFJPSkVDVF9OQU1FKTsKLQkJCWZGaWxlID0gZ2V0T3JDcmVhdGVGaWxlKFBST0pFQ1RfTkFNRSArICIvIiArIEZJTEVfTkFNRSk7Ci0JCQlmSXNTZXR1cCA9IHRydWU7Ci0JCX0KLQotCQkvLyBlZGl0b3IgaXMgb3BlbmVkIGVhY2ggdGltZQotCQlpZiAoZklzU2V0dXAgJiYgZkVkaXRvciA9PSBudWxsKSB7Ci0JCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0JCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKLQkJCWZFZGl0b3IgPSBJREUub3BlbkVkaXRvcihwYWdlLCBmRmlsZSwgdHJ1ZSwgdHJ1ZSk7Ci0JCQlpZiAoISgoZkVkaXRvciBpbnN0YW5jZW9mIFhNTE11bHRpUGFnZUVkaXRvclBhcnQpIHx8IChmRWRpdG9yIGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpKSkKLQkJCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gb3BlbiBzdHJ1Y3R1cmVkIHRleHQgZWRpdG9yIiwgZmFsc2UpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gZWRpdG9yIGlzIGNsb3NlZCBlYWNoIHRpbWUKLQkJaWYgKGZFZGl0b3IgIT0gbnVsbCkgewotCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0JCQlwYWdlLmNsb3NlRWRpdG9yKGZFZGl0b3IsIGZhbHNlKTsKLQkJCWFzc2VydFRydWUoIlVuYWJsZSB0byBjbG9zZSBlZGl0b3IiLCB0cnVlKTsKLQkJCWZFZGl0b3IgPSBudWxsOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVByb2plY3QoU3RyaW5nIHByb2pOYW1lKSB7Ci0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2pOYW1lKTsKLQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2pOYW1lKTsKLQkJdHJ5IHsKLQkJCXByb2plY3QuY3JlYXRlKGRlc2NyaXB0aW9uLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBJRmlsZSBnZXRPckNyZWF0ZUZpbGUoU3RyaW5nIGZpbGVQYXRoKSB7Ci0JCUlGaWxlIGJsYW5rRmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmaWxlUGF0aCkpOwotCQlpZiAoYmxhbmtGaWxlICE9IG51bGwgJiYgIWJsYW5rRmlsZS5leGlzdHMoKSkgewotCQkJdHJ5IHsKLQkJCQlibGFua0ZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShuZXcgYnl0ZVswXSksIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGJsYW5rRmlsZTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0IHNldHRpbmcgdGV4dCBpbiBkb2N1bWVudCBvZiBvcGVuIGVkaXRvci4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0U2V0RG9jdW1lbnQoKSB7Ci0JCUlEb2N1bWVudCBkb2N1bWVudCA9IChJRG9jdW1lbnQpIGZFZGl0b3IuZ2V0QWRhcHRlcihJRG9jdW1lbnQuY2xhc3MpOwotCQl0cnkgewotCQkJZG9jdW1lbnQuc2V0KCI8aGVsbG8+PC9oZWxsbz4iKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWFzc2VydFRydWUoIlVuYWJsZSB0byBzZXQgdGV4dCBpbiBlZGl0b3I6ICIgKyBlLCBmYWxzZSk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1ZlcmlmeUVkaXRvclBsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9WZXJpZnlFZGl0b3JQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY5N2ZiZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1ZlcmlmeUVkaXRvclBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKLSAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMKLSAqIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZAotICogaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLlhNTFVJUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgVmVyaWZ5RWRpdG9yUGx1Z2luIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkV4aXN0cygpIHsKLQkJLy8gVE9ETzogc2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD04MTUyNwotCQlhc3NlcnRUcnVlKHRydWUpOwotCQlQbHVnaW4gcGx1Z2luID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXBsdWdpbiA9IFhNTFVJUGx1Z2luLmdldEluc3RhbmNlKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlwbHVnaW4gPSBudWxsOwotCQl9Ci0JCWFzc2VydE5vdE51bGwoInhtbCBlZGl0b3IgcGx1Z2luIGNvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQiLCBwbHVnaW4pOwotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxVSVByZWZlcmVuY2VzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxVSVByZWZlcmVuY2VzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjg1MjZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvWE1MVUlQcmVmZXJlbmNlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwuWE1MVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YTUxVSVByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb247Ci0KLS8qKgotICogVGhlIHB1cnBvc2Ugb2YgdGhpcyB0ZXN0IGlzIHRvIHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgdGhlIFhNTCBTb3VyY2UgZWRpdG9yCi0gKiBwcmVmZXJlbmNlcy4gVGVzdHMgaW5jbHVkZSBzZXR0aW5nL2dldHRpbmcgcHJlZmVyZW5jZXMuCi0gKiAKLSAqIE5PVEU6IFRoaXMgdGVzdCBzaG91bGQgYmUgcHJlZm9ybWVkIG9uIGEgY2xlYW4gd29ya3NwYWNlLiBJZiBwZXJmb3JtZWQgb24KLSAqIGFuIGV4aXN0aW5nIHdvcmtzcGFjZSwgdGhpcyB0ZXN0IHdpbGwgbWFuaXB1bGF0ZSBwcmVmZXJlbmNlcyBpbiB0aGUKLSAqIHdvcmtzcGFjZSwgdGhvdWdoIGF0dGVtcHRzIHdpbGwgYmUgbWFkZSB0byByZXN0b3JlIG9yaWdpbmFsIHZhbHVlcyBhZnRlcgotICogdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIFhNTFVJUHJlZmVyZW5jZXNUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIFRlc3RzIGV4aXN0YW5jZSBvZiBwcmVmZXJlbmNlIHZhbHVlcyB3aGVuIGdldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMKLQkgKiB0aHJvdWdoIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJ1bmRsZUdldFByZWZlcmVuY2VzKCkgewotCQlmaW5hbCBTdHJpbmcgYnVuZGxlTmFtZSA9ICJvcmcuZWNsaXBzZS53c3QueG1sLnVpIjsKLQotCQkvLyBuZWVkIHRvIHN0YXJ0IHVwIGJ1bmRsZSBmb3IgZGVmYXVsdCB2YWx1ZXMgdG8gYmUgbG9hZGVkCi0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoYnVuZGxlTmFtZSk7Ci0JCXRyeSB7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpCi0JCQkJYnVuZGxlLnN0YXJ0KCk7Ci0JCQllbHNlCi0JCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2UgY291bGQgbm90IGZpbmQgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSk7Ci0JCX0gY2F0Y2ggKEJ1bmRsZUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBvZiBleGNlcHRpb24gc3RhcnRpbmcgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSArICIgZXhjZXB0aW9uOiAiICsgZSk7Ci0JCX0KLQotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIFhNTFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRSk7Ci0JCWJ1bmRsZUdldFByZWZlcmVuY2UoYnVuZGxlTmFtZSwgWE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFX0NPREUpOwotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIFhNTFVJUHJlZmVyZW5jZU5hbWVzLlVTRV9JTkZFUlJFRF9HUkFNTUFSKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGJ1bmRsZUdldFByZWZlcmVuY2UoU3RyaW5nIGJ1bmRsZU5hbWUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCVN0cmluZyBkZWZhdWx0VmFsdWUgPSBMb25nLnRvU3RyaW5nKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsJLy8gcmFuZG9tIHN0cmluZwotCQkKLQkJU3RyaW5nIHZhbHVlID0gUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlKCkuZ2V0U3RyaW5nKGJ1bmRsZU5hbWUsIHByZWZLZXksIGRlZmF1bHRWYWx1ZSwgbnVsbCk7Ci0JCWFzc2VydE5vdFNhbWUoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UuIEtleTogIitwcmVmS2V5LCBkZWZhdWx0VmFsdWUsIHZhbHVlKTsJCQotCX0KLQotCS8qKgotCSAqIFRlc3RzIGRlZmF1bHQgdmFsdWVzIG9mIHByZWZlcmVuY2VzLgotCSAqIAotCSAqIE5PVEU6IEV4cGVjdGVkIGRlZmF1bHQgdmFsdWVzIGFyZSBoYXJkLWNvZGVkLCBzbyBpZiBkZWZhdWx0IHZhbHVlcyBkbwotCSAqIGdldCBjaGFuZ2VkLCBhc3NlcnRpb25zIG5lZWQgdG8gYmUgdXBkYXRlZCBhcyB3ZWxsCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlcygpIHsKLQkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IFhNTFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQkJCi0JCXBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKHN0b3JlLCBYTUxVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0UsIEJvb2xlYW4udG9TdHJpbmcodHJ1ZSkpOwotCQlwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShzdG9yZSwgWE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFX0NPREUsICI8Iik7Ci0JCXBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKHN0b3JlLCBYTUxVSVByZWZlcmVuY2VOYW1lcy5VU0VfSU5GRVJSRURfR1JBTU1BUiwgQm9vbGVhbi50b1N0cmluZyh0cnVlKSk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShJUHJlZmVyZW5jZVN0b3JlIHN0b3JlLCBTdHJpbmcgcHJlZktleSwgU3RyaW5nIGV4cGVjdGVkKSB7Ci0JCVN0cmluZyBkZWZhdWx0VmFsdWUgPSBzdG9yZS5nZXREZWZhdWx0U3RyaW5nKHByZWZLZXkpOwotCQlhc3NlcnRFcXVhbHMoIkdldCBkZWZhdWx0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIitwcmVmS2V5LCBleHBlY3RlZCwgZGVmYXVsdFZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzIGJ5IHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZSB0byBiZSBhCi0JICogY2VydGFpbiB2YWx1ZSwgdGhlbiBnZXR0aW5nIHRoZSBwcmVmZXJlbmNlIHZhbHVlIHRvIHZlcmlmeSBpdCB3YXMgc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5TZXRQcmVmZXJlbmNlcygpIHsKLQkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IFhNTFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQkJCi0JCXBsdWdpblNldFByZWZlcmVuY2VCb29sZWFuKHN0b3JlLCBYTUxVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0UpOwotCQlwbHVnaW5TZXRQcmVmZXJlbmNlU3RyaW5nKHN0b3JlLCBYTUxVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0VfQ09ERSk7Ci0JCXBsdWdpblNldFByZWZlcmVuY2VCb29sZWFuKHN0b3JlLCBYTUxVSVByZWZlcmVuY2VOYW1lcy5VU0VfSU5GRVJSRURfR1JBTU1BUik7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihJUHJlZmVyZW5jZVN0b3JlIHN0b3JlLCBTdHJpbmcgcHJlZktleSkgewotCQlib29sZWFuIG9yaWdpbmFsVmFsdWUgPSBzdG9yZS5nZXRCb29sZWFuKHByZWZLZXkpOwotCQlib29sZWFuIGV4cGVjdGVkVmFsdWUgPSAhb3JpZ2luYWxWYWx1ZTsKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCWJvb2xlYW4gZm91bmRWYWx1ZSA9IHN0b3JlLmdldEJvb2xlYW4ocHJlZktleSk7Ci0JCWFzc2VydEVxdWFscygiU2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIitwcmVmS2V5KyIgIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIgZm91bmQ6ICIgKyBmb3VuZFZhbHVlLCBleHBlY3RlZFZhbHVlLCBmb3VuZFZhbHVlKTsKLQotCQkvLyBhdHRlbXB0IHRvIHJlc3RvcmUgb3JpZ2luYWwgcHJlZmVyZW5jZSB2YWx1ZQotCQlzdG9yZS5zZXRWYWx1ZShwcmVmS2V5LCBvcmlnaW5hbFZhbHVlKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHBsdWdpblNldFByZWZlcmVuY2VTdHJpbmcoSVByZWZlcmVuY2VTdG9yZSBzdG9yZSwgU3RyaW5nIHByZWZLZXkpIHsJCQotCQlTdHJpbmcgb3JpZ2luYWxWYWx1ZSA9IHN0b3JlLmdldFN0cmluZyhwcmVmS2V5KTsKLQkJU3RyaW5nIGV4cGVjdGVkVmFsdWUgPSBMb25nLnRvU3RyaW5nKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsJLy8gcmFuZG9tIHN0cmluZwotCQlzdG9yZS5zZXRWYWx1ZShwcmVmS2V5LCBleHBlY3RlZFZhbHVlKTsKLQkJU3RyaW5nIGZvdW5kVmFsdWUgPSBzdG9yZS5nZXRTdHJpbmcocHJlZktleSk7Ci0JCWFzc2VydEVxdWFscygiU2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIitwcmVmS2V5KyIgIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIgZm91bmQ6ICIgKyBmb3VuZFZhbHVlLCBleHBlY3RlZFZhbHVlLCBmb3VuZFZhbHVlKTsKLQotCQkvLyBhdHRlbXB0IHRvIHJlc3RvcmUgb3JpZ2luYWwgcHJlZmVyZW5jZSB2YWx1ZQotCQlzdG9yZS5zZXRWYWx1ZShwcmVmS2V5LCBvcmlnaW5hbFZhbHVlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1hNTFVJVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1hNTFVJVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4YjkzMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxVSVRlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzOwotCi0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy52aWV3ZXIuVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25YTUw7Ci0KLQotcHVibGljIGNsYXNzIFhNTFVJVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgWE1MVUlUZXN0U3VpdGUoKTsKLQl9Ci0KLQlwdWJsaWMgWE1MVUlUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJYTUwgVUkgVGVzdCBTdWl0ZSIpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVmVyaWZ5RWRpdG9yUGx1Z2luLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShYTUxVSVByZWZlcmVuY2VzVGVzdC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25YTUwuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RFZGl0b3JDb25maWd1cmF0aW9uWE1MLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0T3BlbkVkaXRvclhNTC5jbGFzcykpOwotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvWE1MVUlUZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxVSVRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkNDAwYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxVSVRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFhNTFVJVGVzdHNQbHVnaW4gZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgWE1MVUlUZXN0c1BsdWdpbiBwbHVnaW47Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFhNTFVJVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBYTUxVSVRlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKiBvciAna2V5JyBpZiBub3QgZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlyZXR1cm4ga2V5OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL2JyZWFrcG9pbnRzL0JyZWFrcG9pbnRFcnJvclByb3ZpZGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL2JyZWFrcG9pbnRzL0JyZWFrcG9pbnRFcnJvclByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkOWJmOWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9icmVha3BvaW50cy9CcmVha3BvaW50RXJyb3JQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLmJyZWFrcG9pbnRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXh0ZW5zaW9ucy5JU291cmNlRWRpdGluZ1RleHRUb29sczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLmV4dGVuc2lvbnMuYnJlYWtwb2ludC5JQnJlYWtwb2ludFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuWE1MVUlUZXN0c1BsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgQnJlYWtwb2ludEVycm9yUHJvdmlkZXIgaW1wbGVtZW50cyBJQnJlYWtwb2ludFByb3ZpZGVyIHsKLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5leHRlbnNpb25zLmJyZWFrcG9pbnQuSUJyZWFrcG9pbnRQcm92aWRlciNhZGRCcmVha3BvaW50KG9yZy53M2MuZG9tLkRvY3VtZW50LAotCSAqICAgICAgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQsIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dCwKLQkgKiAgICAgIG9yZy53M2MuZG9tLk5vZGUsIGludCwgaW50KQotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGFkZEJyZWFrcG9pbnQoSURvY3VtZW50IGlkb2MsIElFZGl0b3JJbnB1dCBpbnB1dCwgaW50IGxpbmVOdW1iZXIsIGludCBvZmZzZXQpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuc2V0RGVmYXVsdCgiYnJlYWstZXJyb3IiLCBmYWxzZSk7Ci0JCWJvb2xlYW4gZW5hYmxlID0gWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0Qm9vbGVhbigiYnJlYWstZXJyb3IiKTsKLQkJaWYgKGVuYWJsZSkKLQkJCXJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuSU5GTywgWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksIElTdGF0dXMuRVJST1IsIGdldENsYXNzKCkuZ2V0TmFtZSgpICsgIjogVGVzdCBFcnJvciIsIG51bGwpOwotCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwgSVN0YXR1cy5PSywgIiIsIG51bGwpOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5leHRlbnNpb25zLmJyZWFrcG9pbnQuSUJyZWFrcG9pbnRQcm92aWRlciNnZXRSZXNvdXJjZShvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQpCi0JICovCi0JcHVibGljIElSZXNvdXJjZSBnZXRSZXNvdXJjZShJRWRpdG9ySW5wdXQgaW5wdXQpIHsKLQkJSVJlc291cmNlIHJlcyA9IChJUmVzb3VyY2UpIGlucHV0LmdldEFkYXB0ZXIoSUZpbGUuY2xhc3MpOwotCQlpZiAocmVzID09IG51bGwpCi0JCQlyZXMgPSAoSVJlc291cmNlKSBpbnB1dC5nZXRBZGFwdGVyKElSZXNvdXJjZS5jbGFzcyk7Ci0JCXJldHVybiByZXM7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmV4dGVuc2lvbnMuYnJlYWtwb2ludC5JQnJlYWtwb2ludFByb3ZpZGVyI3NldFNvdXJjZUVkaXRpbmdUZXh0VG9vbHMob3JnLmVjbGlwc2Uud3N0LnNzZS51aS5leHRlbnNpb25zLmJyZWFrcG9pbnQuU291cmNlRWRpdGluZ1RleHRUb29scykKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTb3VyY2VFZGl0aW5nVGV4dFRvb2xzKElTb3VyY2VFZGl0aW5nVGV4dFRvb2xzIHRvb2wpIHsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9icmVha3BvaW50cy9FbmFibGVXYXJuaW5nQWN0aW9uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL2JyZWFrcG9pbnRzL0VuYWJsZVdhcm5pbmdBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JiZWFjNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL2JyZWFrcG9pbnRzL0VuYWJsZVdhcm5pbmdBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuYnJlYWtwb2ludHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLklFeHRlbmRlZEVkaXRvckFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLklFeHRlbmRlZFNpbXBsZUVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLlhNTFVJVGVzdHNQbHVnaW47Ci0KLQotcHVibGljIGNsYXNzIEVuYWJsZVdhcm5pbmdBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gaW1wbGVtZW50cyBJRXh0ZW5kZWRFZGl0b3JBY3Rpb24gewotCXB1YmxpYyBFbmFibGVXYXJuaW5nQWN0aW9uKCkgewotCQlzdXBlcigpOwotCQlYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5zZXREZWZhdWx0KCJicmVhay1lcnJvciIsIGZhbHNlKTsKLQkJYm9vbGVhbiBlbmFibGVkID0gWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0Qm9vbGVhbigiYnJlYWstZXJyb3IiKTsKLQkJaWYoZW5hYmxlZCkKLQkJCXNldFRleHQoIkRpc2FibGUgQnJlYWtwb2ludCBFcnJvcnMiKTsKLQkJZWxzZQotCQkJc2V0VGV4dCgiRW5hYmxlIEJyZWFrcG9pbnQgRXJyb3JzIik7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHRleHQKLQkgKi8KLQlwdWJsaWMgRW5hYmxlV2FybmluZ0FjdGlvbihTdHJpbmcgdGV4dCkgewotCQlYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5zZXREZWZhdWx0KCJicmVhay1lcnJvciIsIGZhbHNlKTsKLQkJYm9vbGVhbiBlbmFibGVkID0gWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0Qm9vbGVhbigiYnJlYWstZXJyb3IiKTsKLQkJaWYoZW5hYmxlZCkKLQkJCXNldFRleHQoIkRpc2FibGUgQnJlYWtwb2ludCBFcnJvcnMiKTsKLQkJZWxzZQotCQkJc2V0VGV4dCgiRW5hYmxlIEJyZWFrcG9pbnQgRXJyb3JzIik7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHRleHQKLQkgKiBAcGFyYW0gaW1hZ2UKLQkgKi8KLQlwdWJsaWMgRW5hYmxlV2FybmluZ0FjdGlvbihTdHJpbmcgdGV4dCwgSW1hZ2VEZXNjcmlwdG9yIGltYWdlKSB7Ci0JCVhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLnNldERlZmF1bHQoImJyZWFrLWVycm9yIiwgZmFsc2UpOwotCQlib29sZWFuIGVuYWJsZWQgPSBYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRCb29sZWFuKCJicmVhay1lcnJvciIpOwotCQlpZihlbmFibGVkKQotCQkJc2V0VGV4dCgiRGlzYWJsZSBCcmVha3BvaW50IEVycm9ycyIpOwotCQllbHNlCi0JCQlzZXRUZXh0KCJFbmFibGUgQnJlYWtwb2ludCBFcnJvcnMiKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGV4dAotCSAqIEBwYXJhbSBzdHlsZQotCSAqLwotCXB1YmxpYyBFbmFibGVXYXJuaW5nQWN0aW9uKFN0cmluZyB0ZXh0LCBpbnQgc3R5bGUpIHsKLQkJWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuc2V0RGVmYXVsdCgiYnJlYWstZXJyb3IiLCBmYWxzZSk7Ci0JCWJvb2xlYW4gZW5hYmxlZCA9IFhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLmdldEJvb2xlYW4oImJyZWFrLWVycm9yIik7Ci0JCWlmKGVuYWJsZWQpCi0JCQlzZXRUZXh0KCJEaXNhYmxlIEJyZWFrcG9pbnQgRXJyb3JzIik7Ci0JCWVsc2UKLQkJCXNldFRleHQoIkVuYWJsZSBCcmVha3BvaW50IEVycm9ycyIpOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5leHRlbnNpb24uSUV4dGVuZGVkRWRpdG9yQWN0aW9uI2lzVmlzaWJsZSgpCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNWaXNpYmxlKCkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uI3J1bigpCi0JICovCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlzdXBlci5ydW4oKTsKLQkJWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuc2V0RGVmYXVsdCgiYnJlYWstZXJyb3IiLCBmYWxzZSk7Ci0JCWJvb2xlYW4gdmFsdWUgPSBYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRCb29sZWFuKCJicmVhay1lcnJvciIpOwotCQlYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5zZXRWYWx1ZSgiYnJlYWstZXJyb3IiLCAhdmFsdWUpOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5leHRlbnNpb24uSUV4dGVuZGVkRWRpdG9yQWN0aW9uI3NldEFjdGl2ZUV4dGVuZGVkRWRpdG9yKG9yZy5lY2xpcHNlLndzdC5zc2UudWkuZXh0ZW5zaW9uLklFeHRlbmRlZFNpbXBsZUVkaXRvcikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRBY3RpdmVFeHRlbmRlZEVkaXRvcihJRXh0ZW5kZWRTaW1wbGVFZGl0b3IgdGFyZ2V0RWRpdG9yKSB7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklVcGRhdGUjdXBkYXRlKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCB1cGRhdGUoKSB7Ci0JCVhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLnNldERlZmF1bHQoImJyZWFrLWVycm9yIiwgZmFsc2UpOwotCQlib29sZWFuIGVuYWJsZWQgPSBYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRCb29sZWFuKCJicmVhay1lcnJvciIpOwotCQlpZihlbmFibGVkKQotCQkJc2V0VGV4dCgiRGlzYWJsZSBCcmVha3BvaW50IEVycm9ycyIpOwotCQllbHNlCi0JCQlzZXRUZXh0KCJFbmFibGUgQnJlYWtwb2ludCBFcnJvcnMiKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25YTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvdmlld2VyL1Rlc3RWaWV3ZXJDb25maWd1cmF0aW9uWE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmM2FlNTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25YTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0MiArMCwwIEBACi0JcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLnZpZXdlcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUF1dG9FZGl0U3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0RG91YmxlQ2xpY2tTdHJhdGVneTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0SG92ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZW50QXNzaXN0YW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuZm9ybWF0dGVyLklDb250ZW50Rm9ybWF0dGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuaHlwZXJsaW5rLklIeXBlcmxpbmtEZXRlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmluZm9ybWF0aW9uLklJbmZvcm1hdGlvblByZXNlbnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJlY29uY2lsZXIuSVJlY29uY2lsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSUFubm90YXRpb25Ib3ZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWRQYXJ0aXRpb25UeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuc3R5bGUuTGluZVN0eWxlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVhNTFBhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5Mb2dnZXI7Ci0KLS8qKgotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uWE1MIGV4dGVuZHMgVGVzdENhc2UgewotICAgIAotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MIGZDb25maWcgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBmRGlzcGxheUV4aXN0cyA9IHRydWU7Ci0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlciBmVmlld2VyID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCQotICAgIHB1YmxpYyBUZXN0Vmlld2VyQ29uZmlndXJhdGlvblhNTCgpIHsKLSAgICAgICAgc3VwZXIoIlRlc3RWaWV3ZXJDb25maWd1cmF0aW9uWE1MIik7Ci0gICAgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotICAgIAlzdXBlci5zZXRVcCgpOwotCQlpZighdGhpcy5pc1NldHVwKXsKLQkJCXNldFVwVmlld2VyQ29uZmlndXJhdGlvbigpOwotCQkJdGhpcy5pc1NldHVwID0gdHJ1ZTsKLQkJfQotICAgIH0KLQkKLQlwcml2YXRlIHZvaWQgc2V0VXBWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCQkKLQkJLy8gc29tZSB0ZXN0IGVudmlyb25tZW50cyBtaWdodCBub3QgaGF2ZSBhICJyZWFsIiBkaXNwbGF5Ci0JCWlmKERpc3BsYXkuZ2V0Q3VycmVudCgpICE9IG51bGwpIHsKLQkJCQotCQkJU2hlbGwgc2hlbGwgPSBudWxsOwotCQkJQ29tcG9zaXRlIHBhcmVudCA9IG51bGw7Ci0JCQkKLQkJCWlmKFBsYXRmb3JtVUkuaXNXb3JrYmVuY2hSdW5uaW5nKCkpIHsKLQkJCQlzaGVsbCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsKLQkJCX0KLQkJCWVsc2UgewkKLQkJCQlzaGVsbCA9IG5ldyBTaGVsbChEaXNwbGF5LmdldEN1cnJlbnQoKSk7Ci0JCQl9Ci0JCQlwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKHNoZWxsLCBTV1QuTk9ORSk7Ci0JCQkKLQkJCS8vIGR1bW15IHZpZXdlcgotCQkJZlZpZXdlciA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlcihwYXJlbnQsIG51bGwsIG51bGwsIGZhbHNlLCBTV1QuTk9ORSk7Ci0JCQlmQ29uZmlnID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhNTCgpOwotCQl9Ci0JCWVsc2UgewotCQkJZkRpc3BsYXlFeGlzdHMgPSBmYWxzZTsKLQkJCUxvZ2dlci5sb2coTG9nZ2VyLklORk8sICJSZW1lbWJlciwgdmlld2VyIGNvbmZpZ3VyYXRpb24gdGVzdHMgYXJlIG5vdCBydW4gYmVjYXVzZSB3b3JrYmVuY2ggaXMgbm90IG9wZW4gKG5vcm1hbCBvbiBidWlsZCBtYWNoaW5lKSIpOwotCQl9Ci0JfQotICAgIAotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QW5ub3RhdGlvbkhvdmVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJQW5ub3RhdGlvbkhvdmVyIGhvdmVyID0gZkNvbmZpZy5nZXRBbm5vdGF0aW9uSG92ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkFubm90YXRpb25Ib3ZlciBpcyBudWxsIiwgaG92ZXIpOwotICAgIH0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QXV0b0VkaXRTdHJhdGVnaWVzKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQkKLQkJSUF1dG9FZGl0U3RyYXRlZ3lbXSBzdHJhdGVnaWVzID0gZkNvbmZpZy5nZXRBdXRvRWRpdFN0cmF0ZWdpZXMoZlZpZXdlciwgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQpOwotCQlhc3NlcnROb3ROdWxsKHN0cmF0ZWdpZXMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gYXV0byBlZGl0IHN0cmF0ZWdpZXMiLCBzdHJhdGVnaWVzLmxlbmd0aCA+IDApOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcygpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJU3RyaW5nW10gY29uZmlndXJlZENvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbChjb25maWd1cmVkQ29udGVudFR5cGVzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgY29udGVudCB0eXBlcyIsIGNvbmZpZ3VyZWRDb250ZW50VHlwZXMubGVuZ3RoID4gMCk7Ci0JfQotCQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudEFzc2lzdGFudCgpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUNvbnRlbnRBc3Npc3RhbnQgY2EgPSBmQ29uZmlnLmdldENvbnRlbnRBc3Npc3RhbnQoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGlzIG5vIGNvbnRlbnQgYXNzaXN0YW50IiwgY2EpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudEZvcm1hdHRlcigpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUNvbnRlbnRGb3JtYXR0ZXIgY2YgPSBmQ29uZmlnLmdldENvbnRlbnRGb3JtYXR0ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGlzIG5vIGNvbnRlbnQgZm9ybWF0dGVyIiwgY2YpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RG91YmxlQ2xpY2tTdHJhdGVneSgpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJSVRleHREb3VibGVDbGlja1N0cmF0ZWd5IHN0cmF0ZWd5ID0gZkNvbmZpZy5nZXREb3VibGVDbGlja1N0cmF0ZWd5KGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZihzdHJhdGVneSAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGRvdWJsZSBjbGljayBzdHJhdGVnaWVzIiwgZmFsc2UpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0SHlwZXJsaW5rRGV0ZWN0b3JzKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJSHlwZXJsaW5rRGV0ZWN0b3JbXSBkZXRlY3RvcnMgPSBmQ29uZmlnLmdldEh5cGVybGlua0RldGVjdG9ycyhmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgidGhlcmUgYXJlIG5vIGh5cGVybGluayBkZXRlY3RvcnMiLCBkZXRlY3RvcnMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gaHlwZXJsaW5rIGRldGVjdG9ycyIsIGRldGVjdG9ycy5sZW5ndGggPiAwKTsKLQl9Ci0JCi0gICAgcHVibGljIHZvaWQgdGVzdEdldEluZGVudFByZWZpeGVzKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCVN0cmluZyBwcmVmaXhlc1tdID0gZkNvbmZpZy5nZXRJbmRlbnRQcmVmaXhlcyhmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYocHJlZml4ZXMgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBpbmRlbnQgcHJlZml4ZXMiLCBmYWxzZSk7Ci0JfQotICAgIAotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLSAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0SW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcigpIHsKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvciBpbmZvQ3JlYXRvciA9IGZDb25maWcuZ2V0SW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvciBpcyBudWxsIiwgaW5mb0NyZWF0b3IpOwotICAgIH0KLQkKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldEluZm9ybWF0aW9uUHJlc2VudGVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJSW5mb3JtYXRpb25QcmVzZW50ZXIgcHJlc2VudGVyID0gZkNvbmZpZy5nZXRJbmZvcm1hdGlvblByZXNlbnRlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiSW5mb3JtYXRpb25QcmVzZW50ZXIgaXMgbnVsbCIsIHByZXNlbnRlcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRMaW5lU3R5bGVQcm92aWRlcnMoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJTGluZVN0eWxlUHJvdmlkZXIgcHJvdmlkZXJzW10gPSBmQ29uZmlnLmdldExpbmVTdHlsZVByb3ZpZGVycyhmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYocHJvdmlkZXJzICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgbGluZSBzdHlsZSBwcm92aWRlcnMiLCBmYWxzZSk7Ci0JfQotCQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UmVjb25jaWxlcigpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSVJlY29uY2lsZXIgciA9IGZDb25maWcuZ2V0UmVjb25jaWxlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiUmVjb25jaWxlciBpcyBudWxsIiwgcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRUZXh0SG92ZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlTdHJpbmdbXSBob3ZlclBhcnRpdGlvbnMgPSBuZXcgU3RyaW5nW117SVN0cnVjdHVyZWRQYXJ0aXRpb25UeXBlcy5ERUZBVUxUX1BBUlRJVElPTiwgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFR9OwotCQkKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBob3ZlclBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCUlUZXh0SG92ZXIgaG92ZXIgPSBmQ29uZmlnLmdldFRleHRIb3ZlcihmVmlld2VyLCBob3ZlclBhcnRpdGlvbnNbaV0sIFNXVC5OT05FKTsKLQkJCWFzc2VydE5vdE51bGwoImhvdmVyIHdhcyBudWxsIGZvciBwYXJ0aXRpb246ICIgKyBob3ZlclBhcnRpdGlvbnNbaV0sIGhvdmVyKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvdmlld2VyL1ZpZXdlclRlc3RYTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvdmlld2VyL1ZpZXdlclRlc3RYTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjcyOTkyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL3ZpZXdlci9WaWV3ZXJUZXN0WE1MLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLnZpZXdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSkZhY2VSZXNvdXJjZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQnVzeUluZGljYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklNZW1lbnRvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklWaWV3U2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlZpZXdQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSVRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSW5kZXhlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci0KLQotcHVibGljIGNsYXNzIFZpZXdlclRlc3RYTUwgZXh0ZW5kcyBWaWV3UGFydCB7Ci0JLyoqCi0JICogU2V0cyB0aGUgdmlld2VyJ3MgaGlnaGxpZ2h0aW5nIHRleHQgcmFuZ2UgdG8gdGhlIHRleHQgcmFuZ2UgaW5kaWNhdGVkCi0JICogYnkgdGhlIHNlbGVjdGVkIE5vZGVzLgotCSAqLwotCXByb3RlY3RlZCBjbGFzcyBOb2RlUmFuZ2VTZWxlY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgewotCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgewotCQkJaWYgKCFldmVudC5nZXRTZWxlY3Rpb24oKS5pc0VtcHR5KCkgJiYgZXZlbnQuZ2V0U2VsZWN0aW9uKCkgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgZXZlbnQuZ2V0U2VsZWN0aW9uKCk7Ci0JCQkJSW5kZXhlZFJlZ2lvbiBzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotCQkJCUluZGV4ZWRSZWdpb24gZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSBzZWxlY3Rpb24udG9BcnJheSgpW3NlbGVjdGlvbi5zaXplKCkgLSAxXTsKLQotCQkJCWlmIChzdGFydE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQlzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgKChBdHRyKSBzdGFydE5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotCQkJCWlmIChlbmROb2RlIGluc3RhbmNlb2YgQXR0cikKLQkJCQkJZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIGVuZE5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotCi0JCQkJaW50IHN0YXJ0ID0gc3RhcnROb2RlLmdldFN0YXJ0T2Zmc2V0KCk7Ci0JCQkJaW50IGVuZCA9IGVuZE5vZGUuZ2V0RW5kT2Zmc2V0KCk7Ci0KLQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCWZTb3VyY2VWaWV3ZXIuc2V0VmlzaWJsZVJlZ2lvbihzdGFydCwgZW5kIC0gc3RhcnQpOwotCQkJCWZTb3VyY2VWaWV3ZXIuc2V0U2VsZWN0ZWRSYW5nZShzdGFydCwgMCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJfQotCQl9Ci0JfQotCXByb3RlY3RlZCBjbGFzcyBOdW1iZXJJbnB1dERpYWxvZyBleHRlbmRzIERpYWxvZyB7Ci0JCXB1YmxpYyBUZXh0IGxlbmd0aDsKLQotCQlpbnQgbGVuZ3RoVmFsdWU7Ci0JCXB1YmxpYyBUZXh0IHN0YXJ0OwotCQlpbnQgc3RhcnRWYWx1ZTsKLQkJcHVibGljIE51bWJlcklucHV0RGlhbG9nKFNoZWxsIHNoZWxsKSB7Ci0JCQlzdXBlcihzaGVsbCk7Ci0JCX0KLQotCQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0JCQlDb21wb3NpdGUgY29udGFpbmVyID0gbmV3IENvbXBvc2l0ZShjb21wb3NpdGUsIFNXVC5OVUxMKTsKLQkJCWNvbnRhaW5lci5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQkJCWNvbnRhaW5lci5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMiwgdHJ1ZSkpOwotCQkJc2V0U2hlbGxTdHlsZShnZXRTaGVsbCgpLmdldFN0eWxlKCkgfCBTV1QuUkVTSVpFKTsKLQotCQkJTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoY29udGFpbmVyLCBTV1QuTlVMTCk7Ci0JCQlsYWJlbC5zZXRUZXh0KCJTdGFydCIpOwotCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCWxhYmVsID0gbmV3IExhYmVsKGNvbnRhaW5lciwgU1dULk5VTEwpOwotCQkJbGFiZWwuc2V0VGV4dCgiTGVuZ3RoIik7Ci0JCQlsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQotCQkJc3RhcnQgPSBuZXcgVGV4dChjb250YWluZXIsIFNXVC5CT1JERVIpOwotCQkJc3RhcnRWYWx1ZSA9IGZTb3VyY2VWaWV3ZXIuZ2V0VmlzaWJsZVJlZ2lvbigpLmdldE9mZnNldCgpOwotCQkJc3RhcnQuc2V0VGV4dCgiIiArIHN0YXJ0VmFsdWUpOwotCQkJc3RhcnQuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCWxlbmd0aCA9IG5ldyBUZXh0KGNvbnRhaW5lciwgU1dULkJPUkRFUik7Ci0JCQlsZW5ndGhWYWx1ZSA9IGZTb3VyY2VWaWV3ZXIuZ2V0VmlzaWJsZVJlZ2lvbigpLmdldExlbmd0aCgpOwotCQkJbGVuZ3RoLnNldFRleHQoIiIgKyBsZW5ndGhWYWx1ZSk7Ci0JCQlsZW5ndGguc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCS8vIHN0YXJ0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKLQkJCS8vIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJLy8gaWYgKGUud2lkZ2V0ID09IHN0YXJ0KSB7Ci0JCQkvLyB0cnkgewotCQkJLy8gc3RhcnRWYWx1ZSA9IEludGVnZXIuZGVjb2RlKHN0YXJ0LmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCS8vIH0KLQkJCS8vIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCS8vIHN0YXJ0VmFsdWUgPSAwOwotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfSk7Ci0JCQkvLyBsZW5ndGguYWRkTW9kaWZ5TGlzdGVuZXIobmV3IE1vZGlmeUxpc3RlbmVyKCkgewotCQkJLy8gcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7Ci0JCQkvLyBpZiAoZS53aWRnZXQgPT0gbGVuZ3RoKSB7Ci0JCQkvLyB0cnkgewotCQkJLy8gbGVuZ3RoVmFsdWUgPSBJbnRlZ2VyLmRlY29kZShsZW5ndGguZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJLy8gfQotCQkJLy8gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlMikgewotCQkJLy8gbGVuZ3RoVmFsdWUgPSAwOwotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfSk7Ci0KLQkJCXJldHVybiBjb21wb3NpdGU7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nI29rUHJlc3NlZCgpCi0JCSAqLwotCQlwcm90ZWN0ZWQgdm9pZCBva1ByZXNzZWQoKSB7Ci0JCQl0cnkgewotCQkJCXN0YXJ0VmFsdWUgPSBJbnRlZ2VyLmRlY29kZShzdGFydC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCQlzdGFydFZhbHVlID0gMDsKLQkJCX0KLQkJCXRyeSB7Ci0JCQkJbGVuZ3RoVmFsdWUgPSBJbnRlZ2VyLmRlY29kZShsZW5ndGguZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkJbGVuZ3RoVmFsdWUgPSAwOwotCQkJfQotCQkJc3VwZXIub2tQcmVzc2VkKCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX1ZJRVdFUl9DT05URU5UUyA9ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/PlxuPCFET0NUWVBFIHRhZ2xpYiBQVUJMSUMgXCItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgSlNQIFRhZyBMaWJyYXJ5IDEuMS8vRU5cIiBcImh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS9kdGRzL3dlYi1qc3B0YWdsaWJyYXJ5XzFfMS5kdGRcIj5cbiI7Ci0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb24gZkNvbmZpZyA9IG51bGw7Ci0JcHJpdmF0ZSBJQ29udGVudE91dGxpbmVQYWdlIGZDb250ZW50T3V0bGluZVBhZ2UgPSBudWxsOwotCXByaXZhdGUgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lciA9IG51bGw7Ci0KLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyIGZTb3VyY2VWaWV3ZXIgPSBudWxsOwotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU1NFX0VESVRPUl9GT05UID0gIm9yZy5lY2xpcHNlLndzdC5zc2UudWkudGV4dGZvbnQiOwotCi0JcHJvdGVjdGVkIHZvaWQgYWRkQWN0aW9ucyhJQ29udHJpYnV0aW9uTWFuYWdlciBtZ3IpIHsKLQkJaWYgKG1nciAhPSBudWxsKSB7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIk5ldyBYTUwiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCUJ1c3lJbmRpY2F0b3Iuc2hvd1doaWxlKGdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKSwgbmV3IFJ1bm5hYmxlKCkgewotCQkJCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQkJCXNldHVwVmlld2VyRm9yTmV3KCk7Ci0JCQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQkJCX0KLQkJCQkJfSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBTZXBhcmF0b3IoKSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIkNoYW5nZSBWaXNpYmlsaXR5IjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlOdW1iZXJJbnB1dERpYWxvZyBkbGcgPSBuZXcgTnVtYmVySW5wdXREaWFsb2coZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuZ2V0U2hlbGwoKSk7Ci0JCQkJCWludCBwcm9jZWVkID0gZGxnLm9wZW4oKTsKLQkJCQkJaWYgKHByb2NlZWQgPT0gV2luZG93LkNBTkNFTCkKLQkJCQkJCXJldHVybjsKLQkJCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKGRsZy5zdGFydFZhbHVlLCBkbGcubGVuZ3RoVmFsdWUpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJTaG93IEFsbCI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IFNlcGFyYXRvcigpKTsKLQkJCS8vIG5vIGxvbmdlciBhYmxlIHRvIHNldCBpbnB1dCB0byBOVUxMCi0JCQkvLyBtZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkvLyBwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkvLyByZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCS8vIH0KLQkJCS8vCi0JCQkvLyBwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJLy8gcmV0dXJuICJTZXQgSW5wdXQgdG8gTlVMTCI7Ci0JCQkvLyB9Ci0JCQkvLyBwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkvLyBzdXBlci5ydW4oKTsKLQkJCS8vIHZpZXdlci5zZXRJbnB1dChudWxsKTsKLQkJCS8vIH0KLQkJCS8vIH0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJUYWtlIElucHV0IGZyb20gQWN0aXZlIEVkaXRvciI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJSVRleHRFZGl0b3IgdGV4dEVkaXRvciA9IGdldEFjdGl2ZUVkaXRvcigpOwotCQkJCQlpZiAodGV4dEVkaXRvciAhPSBudWxsKSB7Ci0JCQkJCQlzZXR1cFZpZXdlckZvckVkaXRvcih0ZXh0RWRpdG9yKTsKLQkJCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUodHJ1ZSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiVGFrZSBJbnB1dCBhbmQgRm9sbG93IFNlbGVjdGlvbiI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJZm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUodHJ1ZSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlRha2UgSW5wdXQgYW5kIEZvbGxvdyBTZWxlY3Rpb24gQXMgUmVhZE9ubHkiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCWZvbGxvd1NlbGVjdGlvbigpOwotCQkJCQlmU291cmNlVmlld2VyLnNldEVkaXRhYmxlKGZhbHNlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiU3RvcCBGb2xsb3dpbmcgU2VsZWN0aW9uIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlzdG9wRm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJfQotCQkJfSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I2NyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUlDb250cmlidXRpb25NYW5hZ2VyIG1nciA9IGdldFZpZXdTaXRlKCkuZ2V0QWN0aW9uQmFycygpLmdldE1lbnVNYW5hZ2VyKCk7Ci0JCWFkZEFjdGlvbnMobWdyKTsKLQotCQkvLyBjcmVhdGUgc291cmNlIHZpZXdlciAmIGl0cyBjb250ZW50IHR5cGUtc3BlY2lmaWMgdmlld2VyCi0JCS8vIGNvbmZpZ3VyYXRpb24KLQkJZlNvdXJjZVZpZXdlciA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlcihwYXJlbnQsIG51bGwsIG51bGwsIGZhbHNlLCBTV1QuTk9ORSk7Ci0JCWZDb25maWcgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MKCk7Ci0KLQkJLy8gc2V0IHVwIHRoZSB2aWV3ZXIgd2l0aCBhIGRvY3VtZW50ICYgdmlld2VyIGNvbmZpZwotCQlzZXR1cFZpZXdlckZvck5ldygpOwotCi0JCXNldHVwVmlld2VyUHJlZmVyZW5jZXMoKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I2Rpc3Bvc2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsKLQkJZlNvdXJjZVZpZXdlci51bmNvbmZpZ3VyZSgpOwotCX0KLQotCS8qKgotCSAqIEhvb2tzIHVwIHRoZSB2aWV3ZXIgdG8gZm9sbG93IHRoZSBzZWxlY3Rpb24gbWFkZSBpbiB0aGUgYWN0aXZlIGVkaXRvcgotCSAqLwotCXByaXZhdGUgdm9pZCBmb2xsb3dTZWxlY3Rpb24oKSB7Ci0JCUlUZXh0RWRpdG9yIGVkaXRvciA9IGdldEFjdGl2ZUVkaXRvcigpOwotCQlpZiAoZWRpdG9yICE9IG51bGwpIHsKLQkJCXNldHVwVmlld2VyRm9yRWRpdG9yKGVkaXRvcik7Ci0JCQlpZiAoZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIgPT0gbnVsbCkKLQkJCQlmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lciA9IG5ldyBOb2RlUmFuZ2VTZWxlY3Rpb25MaXN0ZW5lcigpOwotCQotCQkJZkNvbnRlbnRPdXRsaW5lUGFnZSA9ICgoSUNvbnRlbnRPdXRsaW5lUGFnZSkgZWRpdG9yLmdldEFkYXB0ZXIoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcykpOwotCQkJaWYgKGZDb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgewotCQkJCWZDb250ZW50T3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyKTsKLQkKLQkJCQlpZiAoIWZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpICYmIGZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQotCQkJCQlPYmplY3RbXSBub2RlcyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpLnRvQXJyYXkoKTsKLQkJCQkJSW5kZXhlZFJlZ2lvbiBzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgbm9kZXNbMF07Ci0JCQkJCUluZGV4ZWRSZWdpb24gZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXTsKLQkKLQkJCQkJaWYgKHN0YXJ0Tm9kZSBpbnN0YW5jZW9mIEF0dHIpCi0JCQkJCQlzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgKChBdHRyKSBzdGFydE5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotCQkJCQlpZiAoZW5kTm9kZSBpbnN0YW5jZW9mIEF0dHIpCi0JCQkJCQllbmROb2RlID0gKEluZGV4ZWRSZWdpb24pICgoQXR0cikgZW5kTm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0JCi0JCQkJCWludCBzdGFydCA9IHN0YXJ0Tm9kZS5nZXRTdGFydE9mZnNldCgpOwotCQkJCQlpbnQgZW5kID0gZW5kTm9kZS5nZXRFbmRPZmZzZXQoKTsKLQkKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0U2VsZWN0ZWRSYW5nZShzdGFydCwgMCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY3VycmVudCBhY3RpdmUgdGV4dCBlZGl0b3IgaWYgcG9zc2libGUKLQkgKiAKLQkgKiBAcmV0dXJuIElUZXh0RWRpdG9yCi0JICovCi0JcHJpdmF0ZSBJVGV4dEVkaXRvciBnZXRBY3RpdmVFZGl0b3IoKSB7Ci0JCUlUZXh0RWRpdG9yIGVkaXRvciA9IG51bGw7Ci0JCUlFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSBnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQlpZiAoZWRpdG9yUGFydCBpbnN0YW5jZW9mIElUZXh0RWRpdG9yKQotCQkJZWRpdG9yID0gKElUZXh0RWRpdG9yKSBlZGl0b3JQYXJ0OwotCQlpZiAoZWRpdG9yID09IG51bGwgJiYgZWRpdG9yUGFydCAhPSBudWxsKQotCQkJZWRpdG9yID0gKElUZXh0RWRpdG9yKSBlZGl0b3JQYXJ0LmdldEFkYXB0ZXIoSVRleHRFZGl0b3IuY2xhc3MpOwotCQlyZXR1cm4gZWRpdG9yOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVZpZXdQYXJ0I2luaXQoSVZpZXdTaXRlLCBJTWVtZW50bykKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0KElWaWV3U2l0ZSBzaXRlLCBJTWVtZW50byBtZW1lbnRvKSB0aHJvd3MgUGFydEluaXRFeGNlcHRpb24gewotCQlzdXBlci5pbml0KHNpdGUsIG1lbWVudG8pOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjc2V0Rm9jdXMoKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgewotCQlpZiAoZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkgIT0gbnVsbCAmJiAhZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKQotCQkJZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuc2V0Rm9jdXMoKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHVwIHRoZSB2aWV3ZXIgd2l0aCB0aGUgc2FtZSBkb2N1bWVudC9pbnB1dCBhcyB0aGUgZ2l2ZW4gZWRpdG9yCi0JICogCi0JICogQHBhcmFtIElUZXh0RWRpdG9yCi0JICogICAgICAgICAgICBlZGl0b3IgLSB0aGUgZWRpdG9yIHRvIHVzZSAqY2Fubm90IHRvIGJlIG51bGwqCi0JICovCi0JcHJpdmF0ZSB2b2lkIHNldHVwVmlld2VyRm9yRWRpdG9yKElUZXh0RWRpdG9yIGVkaXRvcikgewotCQlzdG9wRm9sbG93U2VsZWN0aW9uKCk7IC8vIGlmIHdhcyBmb2xsb3dpbmcgc2VsZWN0aW9uLCBzdG9wCi0JCUlEb2N1bWVudCBkb2MgPSBlZGl0b3IuZ2V0RG9jdW1lbnRQcm92aWRlcigpLmdldERvY3VtZW50KGVkaXRvci5nZXRFZGl0b3JJbnB1dCgpKTsKLQkJZlNvdXJjZVZpZXdlci5zZXREb2N1bWVudChkb2MpOwotCi0JCS8vIG5lZWQgdG8gcmVjb25maWd1cmUgYWZ0ZXIgc2V0IGRvY3VtZW50IGp1c3Qgc28gaGlnaGxpZ2h0ZXIgd29ya3MKLQkJZlNvdXJjZVZpZXdlci5jb25maWd1cmUobmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhNTCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdXAgc291cmNlIHZpZXdlciB3aXRoIGEgbmV3IGRvY3VtZW50ICYgY29uZmlndXJlIGl0Ci0JICovCi0JcHJpdmF0ZSB2b2lkIHNldHVwVmlld2VyRm9yTmV3KCkgewotCQlzdG9wRm9sbG93U2VsZWN0aW9uKCk7IC8vIGlmIHdhcyBmb2xsb3dpbmcgc2VsZWN0aW9uLCBzdG9wCi0KLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCUlEb2N1bWVudCBkb2MgPSBtb2RlbE1hbmFnZXIuY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlkb2Muc2V0KERFRkFVTFRfVklFV0VSX0NPTlRFTlRTKTsKLQotCQlmU291cmNlVmlld2VyLnNldERvY3VtZW50KGRvYyk7Ci0JCS8vIG5lZWQgdG8gcmVjb25maWd1cmUgYWZ0ZXIgc2V0IGRvY3VtZW50IGp1c3Qgc28gaGlnaGxpZ2h0ZXIgd29ya3MKLQkJZlNvdXJjZVZpZXdlci5jb25maWd1cmUoZkNvbmZpZyk7Ci0JfQotCi0JLyoqCi0JICogU2V0IHVwIHNvdXJjZSB2aWV3ZXIgd2l0aCBhbnkgYWRkaXRpb25hbCBwcmVmZXJlbmNlcyBpdCBzaG91bGQgaGF2ZSBFeDoKLQkgKiBmb250LCB0YWIgd2lkdGgKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJQcmVmZXJlbmNlcygpIHsKLQkJZlNvdXJjZVZpZXdlci5nZXRUZXh0V2lkZ2V0KCkuc2V0Rm9udChKRmFjZVJlc291cmNlcy5nZXRGb250KFNTRV9FRElUT1JfRk9OVCkpOwotCX0KLQotCS8qKgotCSAqIENlYXNlIGZvbGxvd2luZyB0aGUgc2VsZWN0aW9uIG1hZGUgaW4gdGhlIGVkaXRvcgotCSAqLwotCXByaXZhdGUgdm9pZCBzdG9wRm9sbG93U2VsZWN0aW9uKCkgewotCQlpZiAoZkNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7Ci0JCQlmQ29udGVudE91dGxpbmVQYWdlLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lcik7Ci0JCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJZkNvbnRlbnRPdXRsaW5lUGFnZSA9IG51bGw7Ci0JCX0KLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ3ZmVmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0Ci0JbmFtZT0idGVzdHN1aXRlIgotCWRlZmF1bHQ9InJ1biIKLQliYXNlZGlyPSIuIj4KLQk8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotCTwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0JPCEtLSA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfVwuLlwuLiIgLz4tLT4KLQotCTxlY2hvIG1lc3NhZ2U9ImJhc2VkaXIgJHtiYXNlZGlyfSIgLz4KLQk8ZWNobyBtZXNzYWdlPSJlY2xpcHNlIHBsYWNlICR7ZWNsaXBzZS1ob21lfSIgLz4KLQotCTwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBwbHVnaW4tbmFtZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLQk8cHJvcGVydHkKLQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzIiAvPgotCTxwcm9wZXJ0eQotCQluYW1lPSJsaWJyYXJ5LWZpbGUiCi0JCXZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotCTwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0JPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJpbml0Ij4KLQkJPGRlbGV0ZT4KLQkJCTxmaWxlc2V0Ci0JCQkJZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0JCQkJaW5jbHVkZXM9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuKnhtbCIgLz4KLQkJPC9kZWxldGU+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotCTx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCQk8cHJvcGVydHkKLQkJCW5hbWU9IndzdC1mb2xkZXIiCi0JCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3dzdF9mb2xkZXIiIC8+Ci0JCTxkZWxldGUKLQkJCWRpcj0iJHt3c3QtZm9sZGVyfSIKLQkJCXF1aWV0PSJ0cnVlIiAvPgotCQk8YW50Ci0JCQl0YXJnZXQ9InVpLXRlc3QiCi0JCQlhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0JCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJkYXRhLWRpciIKLQkJCQl2YWx1ZT0iJHt3c3QtZm9sZGVyfSIgLz4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9InBsdWdpbi1uYW1lIgotCQkJCXZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9ImNsYXNzbmFtZSIKLQkJCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5YTUxVSVRlc3RTdWl0ZSIgLz4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9InBsdWdpbi1wYXRoIgotCQkJCXZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLQk8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0JPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotCTx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0JCTwhLS0gPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+LS0+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0JPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotCTx0YXJnZXQKLQkJbmFtZT0icnVuIgotCQlkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotCQk8YW50Ci0JCQl0YXJnZXQ9ImNvbGxlY3QiCi0JCQlhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0JCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJpbmNsdWRlcyIKLQkJCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy4qeG1sIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0ib3V0cHV0LWZpbGUiCi0JCQkJdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjAxMDUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMvIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjOWI4OGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWJpbgotdGVtcC5mb2xkZXIKLWJ1aWxkLnhtbAotdmFsaWRhdGV4bWx0ZXN0cy5qYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEyNTYyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzNWUyYzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLSNGcmkgTWF5IDI3IDIzOjQyOjM0IEVEVCAyMDA1Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWFib3J0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnNhZmVUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDc0NmIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI0ZyaSBNYXkgMjcgMjM6NDI6MzQgRURUIDIwMDUKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJhNGI3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiBYTUwgVmFsaWRhdG9yIFRlc3RzIFBsdWctaW4KLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cwotQnVuZGxlLVZlcnNpb246IDEuMC4wCi1CdW5kbGUtQ2xhc3NQYXRoOiB2YWxpZGF0ZXhtbHRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsLlhNTFZhbGlkYXRvclRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiBFY2xpcHNlCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuanVuaXQsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnVpCi1FY2xpcHNlLUF1dG9TdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY2Yjk2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotPGJvZHkgbGFuZz0iRU4tVVMiPgotPGgyPkFib3V0IFRoaXMgQ29udGVudDwvaDI+Ci0gCi08cD5GZWJydWFyeSAyNCwgMjAwNTwvcD4JCi08aDM+TGljZW5zZTwvaDM+Ci0KLTxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAoJnF1b3Q7Q29udGVudCZxdW90OykuICBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKLUVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+Ci0KLTxwPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIENvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgmcXVvdDtSZWRpc3RyaWJ1dG9yJnF1b3Q7KSBhbmQgZGlmZmVyZW50IHRlcm1zIGFuZCBjb25kaXRpb25zIG1heQotYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAgQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3IncyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuICBJZiBubyBzdWNoIGxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiAgVW5sZXNzIG90aGVyd2lzZQotaW5kaWNhdGVkIGJlbG93LCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQuPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUwYzI4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgdGVzdHJlc291cmNlcy8sXAotICAgICAgICAgICAgICAgdmFsaWRhdGV4bWx0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLXNvdXJjZS52YWxpZGF0ZXhtbHRlc3RzLmphciA9IHNyYy8KLXNyYy5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgLm9wdGlvbnMsXAotICAgICAgICAgICAgICAgYnVpbGQucHJvcGVydGllcwotYmluLmV4Y2x1ZGVzID0gdGVzdHJlc291cmNlcy8uY3ZzaWdub3JlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9BbGxYTUxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQWxsWE1MVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI0MTQzOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9BbGxYTUxUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLS8qKgotICogVGhlIHJvb3QgdGVzdCBzdWl0ZSB0aGF0IGNvbnRhaW5zIGFsbCBvdGhlciBYTUwgdmFsaWRhdG9yIHRlc3Qgc3VpdGVzLgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCwgSUJNCi0gKi8KLXB1YmxpYyBjbGFzcyBBbGxYTUxUZXN0cyBleHRlbmRzIGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGUKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSB0aGlzIHRlc3Qgc3VpdGUuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoaXMgdGVzdCBzdWl0ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEFsbFhNTFRlc3RzKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvcgotICAgKi8KLSAgcHVibGljIEFsbFhNTFRlc3RzKCkKLSAgewotICAgIHN1cGVyKCJYTUxUZXN0c1Rlc3RTdWl0ZSIpOwotICAgIGFkZFRlc3QoWE1MRXhhbXBsZXNUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3QoQnVnRml4ZXNUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3QoUGF0aHNUZXN0LnN1aXRlKCkpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQmFzZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CYXNlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWMxYmNkOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CYXNlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5YTUxWYWxpZGF0b3I7Ci0KLQotLyoqCi0gKiBCYXNlIHRlc3QgY2FzZSBjbGFzcyB3aGljaCBwcm92aWRlcyBtZXRob2RzIHRvIAotICogLSBjcmVhdGUgbG9ncwotICogLSByZWFkIGZyb20gbG9ncwotICogLSBydW4gbG9nIGNvbXBhcmlzb24gdGVzdHMKLSAqIAotICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwsIElCTQotICovCi1wdWJsaWMgY2xhc3MgQmFzZVRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBGSUxFX1BST1RPQ09MID0gImZpbGU6Ly8vIjsgCi0gIHByb3RlY3RlZCBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEg7Ci0gIHByb3RlY3RlZCBTdHJpbmcgU0FNUExFU19ESVIgPSAidGVzdHJlc291cmNlcy9zYW1wbGVzLyI7Ci0gIHByb3RlY3RlZCBYTUxWYWxpZGF0b3IgdmFsaWRhdG9yID0gWE1MVmFsaWRhdG9yLmdldEluc3RhbmNlKCk7Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkKLSAgewotICAgIFBMVUdJTl9BQlNPTFVURV9QQVRIID0gWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW4uZ2V0UGx1Z2luTG9jYXRpb24oKS50b1N0cmluZygpICsgIi8iOwotICB9Ci0gIAotICAvKioKLSAgICogUnVuIGEgdmFsaWRhdG9yIHRlc3QuIFRoZSB0ZXN0IHdpbGwgcnVuIHRoZSB2YWxpZGF0b3IsIGFuZCBjb21wYXJlIHRoZSB2YWxpZGF0aW9uIHJlc3VsdCB3aXRoCi0gICAqIHRoZSBpbmZvcm1hdGlvbiBzcGVjaWZpZWQuCi0gICAqIAotICAgKiBAcGFyYW0gdGVzdGZpbGUgVGhlIGZpbGUgdG8gcnVuIHRoZSB2YWxpZGF0b3IgdGVzdCBvbi4KLSAgICogQHBhcmFtIGtleXMgVGhlIGxpc3Qgb2YgYWxsb3dzIG1lc3NhZ2Uga2V5cy4KLSAgICogQHBhcmFtIG51bUVycm9ycyBUaGUgbnVtYmVyIG9mIGV4cGVjdGVkIGVycm9ycy4KLSAgICogQHBhcmFtIG51bVdhcm5pbmdzIFRoZSBudW1iZXIgb2YgZXhwZWN0ZWQgd2FybmluZ3MuCi0gICAqLwotICBwdWJsaWMgdm9pZCBydW5UZXN0KFN0cmluZyB0ZXN0ZmlsZSwgTGlzdCBrZXlzLCBpbnQgbnVtRXJyb3JzLCBpbnQgbnVtV2FybmluZ3MpCi0gIHsKLSAgICBWYWxpZGF0aW9uUmVwb3J0IHZhbHJlcG9ydCA9IHZhbGlkYXRvci52YWxpZGF0ZSh0ZXN0ZmlsZSk7Ci0JCi0JVmFsaWRhdGlvbk1lc3NhZ2VbXSB2YWxtZXNzYWdlcyA9IHZhbHJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKTsKLSAgICBpbnQgbnVtbWVzc2FnZXMgPSB2YWxtZXNzYWdlcy5sZW5ndGg7Ci0JCi0JaW50IGVycm9yQ291bnQgPSAwOwotCWludCB3YXJuaW5nQ291bnQgPSAwOwotCi0gICAgZm9yKGludCBpID0gMDsgaSA8IG51bW1lc3NhZ2VzOyBpKyspCi0gICAgewotICAgICAgVmFsaWRhdGlvbk1lc3NhZ2UgdmFsbWVzID0gdmFsbWVzc2FnZXNbaV07Ci0JICBTdHJpbmcga2V5ID0gdmFsbWVzLmdldEtleSgpOwotCSAgYXNzZXJ0VHJ1ZSgiVGhlIG1lc3NhZ2Uga2V5ICIgKyBrZXkgKyAiIGlzIG5vdCBjb3JyZWN0LiIsIGtleXMuY29udGFpbnMoa2V5KSk7Ci0gICAgICBpZih2YWxtZXMuZ2V0U2V2ZXJpdHkoKSA9PSBWYWxpZGF0aW9uTWVzc2FnZS5TRVZfTE9XKQotICAgICAgewotICAgICAgICB3YXJuaW5nQ291bnQrKzsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgZXJyb3JDb3VudCsrOwotICAgICAgfQotICAgIH0KLSAgICBhc3NlcnRFcXVhbHMoZXJyb3JDb3VudCArICIgZXJyb3JzIHdlcmUgcmVwb3J0ZWQgYnV0ICIgKyBudW1FcnJvcnMgKyAiIGVycm9ycyB3ZXJlIGV4cGVjdGVkLiIsIG51bUVycm9ycywgZXJyb3JDb3VudCk7Ci0JYXNzZXJ0RXF1YWxzKHdhcm5pbmdDb3VudCArICIgd2FybmluZ3Mgd2VyZSByZXBvcnRlZCBidXQgIiArIG51bVdhcm5pbmdzICsgIiB3YXJuaW5ncyB3ZXJlIGV4cGVjdGVkLiIsIG51bVdhcm5pbmdzLCB3YXJuaW5nQ291bnQpOwotICB9Ci0gIAotICAKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0J1Z0ZpeGVzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQnVnRml4ZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjNTdiNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQnVnRml4ZXNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLS8qKgotICogVGVzdCBjbGFzcyBmb3IgdGhlIFhNTCB2YWxpZGF0b3IgdG8gdGVzdCBidWcgZml4ZXMuCi0gKiAKLSAqIEBhdXRob3IgTGF3cmVuY2UgTWFuZGVsLCBJQk0KLSAqLwotcHVibGljIGNsYXNzIEJ1Z0ZpeGVzVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQoteyAKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVR0ZJWEVTX0RJUiA9ICJidWdmaXhlcy8iOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKEJ1Z0ZpeGVzVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9idWdmaXhlcy9Sb290Tm9OU0NoaWxkTlMvUm9vdE5vTlNDaGlsZE5TLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RSb290Tm9OU0NoaWxkTlMoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiUm9vdE5vTlNDaGlsZE5TIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJSb290Tm9OU0NoaWxkTlMvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9idWdmaXhlcy9FbXB0eUZpbGUvRW1wdHkueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEVtcHR5KCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkVtcHR5IjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJFbXB0eUZpbGUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9idWdmaXhlcy9WYWxpZGF0ZVdpdGhEVEQvVmFsaWRhdGVXaXRoRFREVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlV2l0aERURFZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlZhbGlkYXRlV2l0aERURFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJWYWxpZGF0ZVdpdGhEVEQvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9idWdmaXhlcy9WYWxpZGF0ZVdpdGhEVEQvVmFsaWRhdGVXaXRoRFRESW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGVXaXRoRFRESW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJWYWxpZGF0ZVdpdGhEVERJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJWYWxpZGF0ZVdpdGhEVEQvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTVNHX0NPTlRFTlRfSU5WQUxJRCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL2J1Z2ZpeGVzL05vdFdlbGxGb3JtZWQvTm90V2VsbEZvcm1lZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Tm90V2VsbEZvcm1lZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJOb3RXZWxsRm9ybWVkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJOb3RXZWxsRm9ybWVkLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIkVUYWdSZXF1aXJlZCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL2J1Z2ZpeGVzL0Nhbm5vdExvY2F0ZURURC9JbnZhbGlkSG9zdC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW52YWxpZEhvc3QoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiSW52YWxpZEhvc3QiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIkNhbm5vdExvY2F0ZURURC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJGSUxFX05PVF9GT1VORCIpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDE7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL2J1Z2ZpeGVzL0Nhbm5vdExvY2F0ZURURC9JbnZhbGlkTG9jYXRpb24ueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEludmFsaWRMb2NhdGlvbigpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJJbnZhbGlkTG9jYXRpb24iOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIkNhbm5vdExvY2F0ZURURC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJGSUxFX05PVF9GT1VORCIpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDE7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvUGF0aHNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9QYXRoc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjcyNDVmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9QYXRoc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotLyoqCi0gKiBUZXN0IGNsYXNzIGZvciB0aGUgWE1MIHZhbGlkYXRvciB0byB0ZXN0IGJ1ZyBmaXhlcy4KLSAqIAotICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwsIElCTQotICovCi1wdWJsaWMgY2xhc3MgUGF0aHNUZXN0IGV4dGVuZHMgQmFzZVRlc3RDYXNlCi17IAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFUSFNfRElSID0gIlBhdGhzLyI7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoUGF0aHNUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTcGFjZUluUGF0aFZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlNwYWNlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNwYWNlSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJTcGFjZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldClJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENsb3NlQnJhY2tldEluUGF0aFZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQ2xvc2VCcmFja2V0KUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldEluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldClJbkZpbGVuYW1lVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENsb3NlQnJhY2tldEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJDbG9zZUJyYWNrZXQpSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXQpSW5GaWxlbmFtZUludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENsb3NlQnJhY2tldEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldClJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RGFzaEluUGF0aFZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkRhc2hJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RGFzaEluUGF0aEludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiRGFzaEluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdERhc2hJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiRGFzaC1JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RGFzaEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkRhc2gtSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRXhjbGFtYXRpb24hSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiRXhjbGFtYXRpb25JblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRXhjbGFtYXRpb24hSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uIUluRmlsZW5hbWVWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RXhjbGFtYXRpb25JbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiRXhjbGFtYXRpb24hSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb24hSW5GaWxlbmFtZUludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEV4Y2xhbWF0aW9uSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiRXhjbGFtYXRpb24hSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL09wZW5CcmFja2V0KEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuQnJhY2tldEluUGF0aFZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIk9wZW5CcmFja2V0SW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL09wZW5CcmFja2V0KEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJPcGVuQnJhY2tldEluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldChJbkZpbGVuYW1lVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIk9wZW5CcmFja2V0KEluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0KEluRmlsZW5hbWVJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuQnJhY2tldEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIk9wZW5CcmFja2V0KEluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RCcmFja2V0SW5QYXRoVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiUGVyaW9kSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFBlcmlvZEJyYWNrZXRJblBhdGhJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlBlcmlvZEluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFBlcmlvZEJyYWNrZXRJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiUGVyaW9kLkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhtbC4KLSAgICovIAotICBwdWJsaWMgdm9pZCB0ZXN0UGVyaW9kQnJhY2tldEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlBlcmlvZC5JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1F1b3RlJ0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RRdW90ZUluUGF0aFZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlF1b3RlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1F1b3RlJ0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFF1b3RlSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZSdJbkZpbGVuYW1lVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFF1b3RlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlF1b3RlJ0luRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlJ0luRmlsZW5hbWVJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RRdW90ZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlF1b3RlJ0luRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTcGFjZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJTcGFjZSBJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJTcGFjZSBJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFRpbGRlSW5QYXRoVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiVGlsZGVJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VGlsZGVJblBhdGhJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VGlsZGVJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiVGlsZGV+SW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFRpbGRlSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiVGlsZGV+SW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VW5kZXJzY29yZUluUGF0aFZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlVuZGVyc2NvcmVJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VW5kZXJzY29yZUluUGF0aEludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiVW5kZXJzY29yZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFVuZGVyc2NvcmVJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VW5kZXJzY29yZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlVuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFuZ2xlSGF0SW5QYXRoVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiQW5nbGVIYXRJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QW5nbGVIYXRJblBhdGhJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkFuZ2xlSGF0SW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QW5nbGVIYXRJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFuZ2xlSGF0SW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWE1MRXhhbXBsZXNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9YTUxFeGFtcGxlc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE4MTQ2Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9YTUxFeGFtcGxlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotLyoqCi0gKiBUZXN0IGNsYXNzIGZvciB0aGUgWE1MIHZhbGlkYXRvciB0byB0ZXN0IHRoZSBYTUxQcm9qZWN0LgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCwgSUJNCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxFeGFtcGxlc1Rlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsgCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYTUxFeGFtcGxlc19ESVIgPSAiWE1MRXhhbXBsZXMvIjsKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoWE1MRXhhbXBsZXNUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hNTEV4YW1wbGVzL0ludm9pY2UvSW52b2ljZS54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW52b2ljZSgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJJbnZvaWNlIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhNTEV4YW1wbGVzX0RJUiArICJJbnZvaWNlLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWE1MRXhhbXBsZXMvSW52b2ljZVJlbW90ZS9JbnZvaWNlLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbnZvaWNlUmVtb3RlKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkludm9pY2UiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWE1MRXhhbXBsZXNfRElSICsgIkludm9pY2VSZW1vdGUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0gIAotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hNTEV4YW1wbGVzL0ludm9pY2VSZW1vdGUvSW52b2ljZS54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW52b2ljZVJlbW90ZUluZGlyZWN0KCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkludm9pY2VJbmRpcmVjdCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYTUxFeGFtcGxlc19ESVIgKyAiSW52b2ljZVJlbW90ZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfSAgICAKLSAgCi0gIC8qKgotICAgKiBUZXN0IC9YTUxFeGFtcGxlcy9JbnZvaWNlSW52YWxpZC9JbnZvaWNlLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbnZvaWNlSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJJbnZvaWNlIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhNTEV4YW1wbGVzX0RJUiArICJJbnZvaWNlSW52YWxpZC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJGSUxFX05PVF9GT1VORCIpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDE7Ci0gICAgCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9YTUxFeGFtcGxlcy9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENhdGFsb2d1ZSgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJDYXRhbG9ndWUiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWE1MRXhhbXBsZXNfRElSICsgIlB1YmxpY2F0aW9uQ2F0YWxvZ3VlLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWE1MRXhhbXBsZXMvUHVibGljYXRpb25DYXRhbG9ndWVJbnZhbGlkL0NhdGFsb2d1ZS54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2F0YWxvZ3VlSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJDYXRhbG9ndWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhNTEV4YW1wbGVzX0RJUiArICJQdWJsaWNhdGlvbkNhdGFsb2d1ZUludmFsaWQvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiRklMRV9OT1RfRk9VTkQiKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAxOwotICAgIAotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWE1MRXhhbXBsZXMvajJlZS93ZWIueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFdlYigpCi0gIHsKLQkgIAotICAJU3RyaW5nIHRlc3RuYW1lID0gIndlYiI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYTUxFeGFtcGxlc19ESVIgKyAiajJlZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1hNTFZhbGlkYXRvclRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkODJmMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotLyoqCi0gKiBUaGUgcGx1Z2luIGNsYXNzIGZvciB0aGlzIHRlc3QgcGx1Z2luLgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCwgSUJNCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxWYWxpZGF0b3JUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbgotewotICBwcml2YXRlIHN0YXRpYyBYTUxWYWxpZGF0b3JUZXN0c1BsdWdpbiBwbHVnaW4gPSBudWxsOwotIAotICBwdWJsaWMgWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW4oKQotICB7Ci0gIAlwbHVnaW4gPSB0aGlzOwotICB9Ci0KLSBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQbHVnaW5Mb2NhdGlvbigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICByZXR1cm4gbmV3IFBhdGgoUGxhdGZvcm0ucmVzb2x2ZShwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0RW50cnkoIi8iKSkuZ2V0RmlsZSgpKS5yZW1vdmVUcmFpbGluZ1NlcGFyYXRvcigpLnRvU3RyaW5nKCk7Ci0gICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NWZiMWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0Ci0JbmFtZT0idGVzdHN1aXRlIgotCWRlZmF1bHQ9InJ1biIKLQliYXNlZGlyPSIuIj4KLQotCTwhLS0gQ29uZmlndXJhYmxlIFByb3BlcnRpZXMgLS0+Ci0KLQk8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgZWNsaXBzZS1ob21lLCBhbmQgbGlicmFyeS1maWxlIC0tPgotCTxwcm9wZXJ0eQotCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cyIgLz4KLQotCTwhLS0gRW5kIENvbmZpZ3VyYWJsZSBQcm9wZXJ0aWVzIC0tPgotCi0JPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLQk8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgotCTxwcm9wZXJ0eQotCQluYW1lPSJlY2xpcHNlLWhvbWUiCi0JCXZhbHVlPSIke2Jhc2VkaXJ9XC4uXC4uIiAvPgotCTxwcm9wZXJ0eQotCQluYW1lPSJidnR3b3Jrc3BhY2UiCi0JCXZhbHVlPSIke2Jhc2VkaXJ9IiAvPgotCTxwcm9wZXJ0eQotCQluYW1lPSJsaWJyYXJ5LWZpbGUiCi0JCXZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotCTxwcm9wZXJ0eQotCQluYW1lPSJ3b3Jrc3BhY2UtZm9sZGVyIgotCQl2YWx1ZT0iJHtidnR3b3Jrc3BhY2V9LyR7cGx1Z2luLW5hbWV9IiAvPgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotCTwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0JPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJpbml0Ij4KLQkJPHRzdGFtcCAvPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQKLQkJCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLQkJCQlpbmNsdWRlcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLioueG1sIiAvPgotCQk8L2RlbGV0ZT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0JPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLQkJPCEtLSBTdGFydCB3aXRoIGNsZWFuIGRhdGEgd29ya3NwYWNlIC0tPgotCQk8ZGVsZXRlCi0JCQlkaXI9IiR7d29ya3NwYWNlLWZvbGRlcn0iCi0JCQlxdWlldD0idHJ1ZSIgLz4KLQotCQk8YW50Ci0JCQl0YXJnZXQ9ImNvcmUtdGVzdCIKLQkJCWFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLQkJCWRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9ImRhdGEtZGlyIgotCQkJCXZhbHVlPSIke3dvcmtzcGFjZS1mb2xkZXJ9IiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCQkJdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iY2xhc3NuYW1lIgotCQkJCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwuQWxsWE1MVGVzdHMiIC8+Ci0JCTwvYW50PgotCi0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLQk8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0JPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotCTx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0JCTxkZWxldGUKLQkJCWRpcj0iJHt3b3Jrc3BhY2UtZm9sZGVyfSIKLQkJCXF1aWV0PSJ0cnVlIiAvPgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLQk8dGFyZ2V0Ci0JCW5hbWU9InJ1biIKLQkJZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLQkJPGFudAotCQkJdGFyZ2V0PSJjb2xsZWN0IgotCQkJYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotCQkJZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iaW5jbHVkZXMiCi0JCQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cyoueG1sIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0ib3V0cHV0LWZpbGUiCi0JCQkJdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjUzNTc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1nZW5lcmF0ZWRSZXN1bHRzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/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+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2UvSW52b2ljZS5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2UvSW52b2ljZS5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3MzdiYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9JbnZvaWNlL0ludm9pY2UuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRUxFTUVOVCBJbnZvaWNlIChIZWFkZXIsSXRlbSspPgotPCFFTEVNRU5UIEhlYWRlciAoRGF0ZSxCaWxsVG8pPgotPCFBVFRMSVNUIEhlYWRlcgotIGludm9pY2VOdW1iZXIgQ0RBVEEgI1JFUVVJUkVECi0+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+MC01OTYtMDAxNDMtNjwvaXNibj4KLQkJPHB1Ymxpc2hlcj5PJ1JlaWxseTwvcHVibGlzaGVyPgotCTwvYzpCb29rPgotPC9jOkNhdGFsb2d1ZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvajJlZS93ZWIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9qMmVlL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjNjBhNDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9qMmVlL3dlYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdlYi1hcHAgaWQ9IldlYkFwcF9JRCIgdmVyc2lvbj0iMi40IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLSAgICA8ZGlzcGxheS1uYW1lPm1vZHVsZTwvZGlzcGxheS1uYW1lPgotICAgIDx3ZWxjb21lLWZpbGUtbGlzdD4KLSAgICAgICAgPHdlbGNvbWUtZmlsZT5pbmRleC5odG1sPC93ZWxjb21lLWZpbGU+Ci0gICAgICAgIDx3ZWxjb21lLWZpbGU+aW5kZXguaHRtPC93ZWxjb21lLWZpbGU+Ci0gICAgICAgIDx3ZWxjb21lLWZpbGU+aW5kZXguanNwPC93ZWxjb21lLWZpbGU+Ci0gICAgICAgIDx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG1sPC93ZWxjb21lLWZpbGU+Ci0gICAgICAgIDx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG08L3dlbGNvbWUtZmlsZT4KLSAgICAgICAgPHdlbGNvbWUtZmlsZT5kZWZhdWx0LmpzcDwvd2VsY29tZS1maWxlPgotICAgIDwvd2VsY29tZS1maWxlLWxpc3Q+Ci08L3dlYi1hcHA+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvQ2Fubm90TG9jYXRlRFREL0ludmFsaWRIb3N0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvQ2Fubm90TG9jYXRlRFREL0ludmFsaWRIb3N0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTllOGRiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0Nhbm5vdExvY2F0ZURURC9JbnZhbGlkSG9zdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgZXhhbXBsZSBQVUJMSUMgIlB1YmxpYyBJZGVudGlmaWVyIiAiaHR0cDovL3d3dy5lY2xpcHNlLmJsYWgvbm9uLWV4aXN0ZW50LWR0ZC5kdGQiPgotPGV4YW1wbGUvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvQ2Fubm90TG9jYXRlRFREL0ludmFsaWRMb2NhdGlvbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0Nhbm5vdExvY2F0ZURURC9JbnZhbGlkTG9jYXRpb24ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjFiOGJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvQ2Fubm90TG9jYXRlRFREL0ludmFsaWRMb2NhdGlvbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgZXhhbXBsZSBQVUJMSUMgIlB1YmxpYyBJZGVudGlmaWVyIiAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9ub24tZXhpc3RlbnQtZHRkLmR0ZCI+Ci08ZXhhbXBsZS8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9FbXB0eUZpbGUvRW1wdHkueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9FbXB0eUZpbGUvRW1wdHkueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvRW1wdHlGaWxlL0VtcHR5LnhtbAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL05vdFdlbGxGb3JtZWQvTm90V2VsbEZvcm1lZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL05vdFdlbGxGb3JtZWQvTm90V2VsbEZvcm1lZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwOTliMmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9Ob3RXZWxsRm9ybWVkL05vdFdlbGxGb3JtZWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+Ci0gIDxub2Nsb3Npbmd0YWc+Ci08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9Sb290Tm9OU0NoaWxkTlMvUm9vdE5vTlNDaGlsZE5TLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvUm9vdE5vTlNDaGlsZE5TL1Jvb3ROb05TQ2hpbGROUy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0ZTQ0ZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9Sb290Tm9OU0NoaWxkTlMvUm9vdE5vTlNDaGlsZE5TLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnID8+Ci08cm9vdD4KLSAgPHRlc3Q6dGVzdCB4bWxuczp0ZXN0PSJodHRwOi8vdGVzdC5vcmcvdGVzdCI+Ci0gIDwvdGVzdDp0ZXN0PgotPC9yb290PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9WYWxpZGF0ZVdpdGhEVEQvVmFsaWRhdGVXaXRoRFRESW52YWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL1ZhbGlkYXRlV2l0aERURC9WYWxpZGF0ZVdpdGhEVERJbnZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA0ZDBhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL1ZhbGlkYXRlV2l0aERURC9WYWxpZGF0ZVdpdGhEVERJbnZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/PgotPCFET0NUWVBFIHNpbXBsZSBTWVNURU0gInNpbXBsZS5kdGQiPgotCi08c2ltcGxlIHZlcnNpb249IjIuMCIgeG1sbnM9Imh0dHA6Ly93d3cuc2ltcGxlLmNvbS9zaW1wbGUiPgotIDxkdW1teT4gPC9kdW1teT4KLTwvc2ltcGxlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9WYWxpZGF0ZVdpdGhEVEQvVmFsaWRhdGVXaXRoRFREVmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9WYWxpZGF0ZVdpdGhEVEQvVmFsaWRhdGVXaXRoRFREVmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTk1ZDhiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvVmFsaWRhdGVXaXRoRFREL1ZhbGlkYXRlV2l0aERURFZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/PgotPCFET0NUWVBFIHNpbXBsZSBTWVNURU0gInNpbXBsZS5kdGQiPgotCi08c2ltcGxlIHZlcnNpb249IjIuMCIgeG1sbnM9Imh0dHA6Ly93d3cuc2ltcGxlLmNvbS9zaW1wbGUiPgotICA8c2ltcGxlMT4KLSAgICA8c2ltcGxlMi8+Ci0gIDwvc2ltcGxlMT4KLTwvc2ltcGxlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9WYWxpZGF0ZVdpdGhEVEQvc2ltcGxlLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvVmFsaWRhdGVXaXRoRFREL3NpbXBsZS5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NDliOTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9WYWxpZGF0ZVdpdGhEVEQvc2ltcGxlLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPCFFTEVNRU5UIHNpbXBsZSAoc2ltcGxlMSk+Ci08IUFUVExJU1Qgc2ltcGxlIAotICAgICAgICAgICB2ZXJzaW9uIENEQVRBICNSRVFVSVJFRAotICAgICAgICAgICB4bWxucyBDREFUQSAjRklYRUQgJ2h0dHA6Ly93d3cuc2ltcGxlLmNvbS9zaW1wbGUnIAotICAgICAgICAgICA+Ci08IUVMRU1FTlQgc2ltcGxlMSAoc2ltcGxlMik+Ci08IUVMRU1FTlQgc2ltcGxlMiBFTVBUWT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjAxMDUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMvIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4YTY4MGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi12YWxpZGF0ZXhzZHRlc3RzLmphcgotdGVtcC5mb2xkZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ4Y2Q0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzZTRmM2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLSNGcmkgTWF5IDI3IDIzOjQyOjM4IEVEVCAyMDA1Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWFib3J0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnNhZmVUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmE1MjNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI0ZyaSBNYXkgMjcgMjM6NDI6MzggRURUIDIwMDUKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFhNzgxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiBYU0QgVmFsaWRhdGlvbiBUZXN0cyBQbHVnLWluCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMAotQnVuZGxlLUNsYXNzUGF0aDogdmFsaWRhdGV4c2R0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5YU0RWYWxpZGF0aW9uVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6IEVjbGlwc2UKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5qdW5pdCwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLndzdC54c2QuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QueHNkLnVpCi1FY2xpcHNlLUF1dG9TdGFydDogdHJ1ZQotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY2Yjk2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotPGJvZHkgbGFuZz0iRU4tVVMiPgotPGgyPkFib3V0IFRoaXMgQ29udGVudDwvaDI+Ci0gCi08cD5GZWJydWFyeSAyNCwgMjAwNTwvcD4JCi08aDM+TGljZW5zZTwvaDM+Ci0KLTxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAoJnF1b3Q7Q29udGVudCZxdW90OykuICBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKLUVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+Ci0KLTxwPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIENvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgmcXVvdDtSZWRpc3RyaWJ1dG9yJnF1b3Q7KSBhbmQgZGlmZmVyZW50IHRlcm1zIGFuZCBjb25kaXRpb25zIG1heQotYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAgQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3IncyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuICBJZiBubyBzdWNoIGxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiAgVW5sZXNzIG90aGVyd2lzZQotaW5kaWNhdGVkIGJlbG93LCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQuPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU4NDk3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgKi5qYXIsXAotICAgICAgICAgICAgICAgdmFsaWRhdGV4c2R0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgdGVzdHJlc291cmNlcy8sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLXNvdXJjZS52YWxpZGF0ZXhzZHRlc3RzLmphciA9IHNyYy8KLXNyYy5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgYnVpbGQueG1sLFwKLSAgICAgICAgICAgICAgIC5vcHRpb25zLFwKLSAgICAgICAgICAgICAgIGJ1aWxkLnByb3BlcnRpZXMKLQotYmluLmV4Y2x1ZGVzID0gdGVzdHJlc291cmNlcy8uY3ZzaWdub3JlLFwKLSAgICAgICAgICAgICAgIHRlc3RyZXNvdXJjZXMvZ2VuZXJhdGVkUmVzdWx0cy8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0FsbFhTRFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9BbGxYU0RUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2Y1M2NmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0FsbFhTRFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLS8qKgotICogVGhlIHJvb3QgdGVzdCBzdWl0ZSB0aGF0IGNvbnRhaW5zIGFsbCBvdGhlciBYU0QgdmFsaWRhdG9yIHRlc3Qgc3VpdGVzLgotICovCi1wdWJsaWMgY2xhc3MgQWxsWFNEVGVzdHMgZXh0ZW5kcyBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlCi17Ci0gIC8qKgotICAgKiBDcmVhdGUgdGhpcyB0ZXN0IHN1aXRlLgotICAgKiAKLSAgICogQHJldHVybiBUaGlzIHRlc3Qgc3VpdGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBBbGxYU0RUZXN0cygpOwotICB9Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IKLSAgICovCi0gIHB1YmxpYyBBbGxYU0RUZXN0cygpCi0gIHsKLSAgICBzdXBlcigiQWxsWFNEVGVzdHMiKTsKLSAgICBhZGRUZXN0KEJ1Z0ZpeGVzVGVzdC5zdWl0ZSgpKTsKLSAgICBhZGRUZXN0KFBhdGhzVGVzdC5zdWl0ZSgpKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0Jhc2VUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQmFzZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjZWFhZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQmFzZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uRGF0YU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTRFZhbGlkYXRvcjsKLQotLyoqCi0gKiBCYXNlIHRlc3QgY2FzZSBjbGFzcyB3aGljaCBwcm92aWRlcyBtZXRob2RzIHRvIAotICogLSBjcmVhdGUgbG9ncwotICogLSByZWFkIGZyb20gbG9ncwotICogLSBydW4gbG9nIGNvbXBhcmlzb24gdGVzdHMKLSAqLwotcHVibGljIGNsYXNzIEJhc2VUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgRklMRV9QUk9UT0NPTCA9ICJmaWxlOi8vLyI7IAotICBwcm90ZWN0ZWQgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIOwotICBwcm90ZWN0ZWQgU3RyaW5nIFNBTVBMRVNfRElSID0gInRlc3RyZXNvdXJjZXMvc2FtcGxlcy8iOwotICBwcm90ZWN0ZWQgU3RyaW5nIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiA9ICJ0ZXN0cmVzb3VyY2VzL2dlbmVyYXRlZFJlc3VsdHMvIjsKLSAgcHJvdGVjdGVkIFN0cmluZyBJREVBTF9SRVNVTFRTX0RJUiA9ICJ0ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy8iOwotICBwcm90ZWN0ZWQgU3RyaW5nIExPR19GSUxFX0xPQ0FUSU9OID0gInJlc3VsdHMubG9nIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzIjsKLSAgcHJpdmF0ZSBYU0RWYWxpZGF0b3IgdmFsaWRhdG9yID0gWFNEVmFsaWRhdG9yLmdldEluc3RhbmNlKCk7Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkKLSAgewotICAgIFBMVUdJTl9BQlNPTFVURV9QQVRIID0gWFNEVmFsaWRhdGlvblRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJ1biBhIHZhbGlkYXRvciB0ZXN0LiBUaGUgdGVzdCB3aWxsIHJ1biB0aGUgdmFsaWRhdG9yLCBsb2cgdGhlIHJlc3VsdHMgYW5kIGNvbXBhcmUgdGhlIHJlc3VsdHMKLSAgICogd2l0aCB0aGUgaWRlYWwgcmVzdWx0cy4gVGhlIHRlc3Qgd2lsbCBvbmx5IHBhc3MgaWYgdGhlIHR3byBsb2cgZmlsZXMgYXJlIHRoZSBzYW1lLgotICAgKiAKLSAgICogQHBhcmFtIHRlc3RmaWxlIFRoZSBmaWxlIHRvIHJ1biB0aGUgdmFsaWRhdG9yIHRlc3Qgb24uCi0gICAqIEBwYXJhbSBsb2dsb2NhdGlvbiBUaGUgbG9jYXRpb24gdG8gY3JlYXRlIHRoZSBsb2cgZmlsZS4KLSAgICogQHBhcmFtIGlkZWFsbG9nbG9jYXRpb24gVGhlIGxvY2F0aW9uIG9mIHRoZSBpZGVhbCBsb2cgZmlsZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1blRlc3QoU3RyaW5nIHRlc3RmaWxlLCBTdHJpbmcgbG9nbG9jYXRpb24sIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uKQotICB7Ci0gICAgVmFsaWRhdGlvblJlcG9ydCB2YWxyZXBvcnQgPSB2YWxpZGF0b3IudmFsaWRhdGUodGVzdGZpbGUsIG51bGwpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGNyZWF0ZUxvZyhsb2dsb2NhdGlvbiwgdmFscmVwb3J0KTsKLSAgICAgIFN0cmluZyBnZW5lcmF0ZWRMb2cgPSBnZXRTdHJpbmdGcm9tRmlsZShsb2dsb2NhdGlvbik7Ci0gICAgICBTdHJpbmcgaWRlYWxMb2cgPSBnZXRTdHJpbmdGcm9tRmlsZShpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgICAgIGFzc2VydEVxdWFscyhpZGVhbExvZywgZ2VuZXJhdGVkTG9nKTsKLSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKCJDb3VsZCBub3QgY29tcGFyZSBsb2cgZmlsZXMiKTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBmaWxlLgotICAgKiAKLSAgICogQHBhcmFtIGZpbGVuYW1lIHRoZSBmaWxlIG5hbWUgb2YgdGhlIGZpbGUgdG8gZ2V0IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24uCi0gICAqIEByZXR1cm4gVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBpZiBzdWNjZXNzZnVsLgotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbiBUaHJvd24gaWYgdW5hYmxlIHRvIGNyZWF0ZSBhIHN0cmluZyByZXByZXNlbnRhaW9uIG9mIHRoZSBmaWxlLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0U3RyaW5nRnJvbUZpbGUoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgZmlsZXN0cmluZyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBSZWFkZXIgcmVhZGVyID0gbnVsbDsKLSAgICBCdWZmZXJlZFJlYWRlciBidWZyZWFkZXIgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKGZpbGVuYW1lKTsKLSAgICAgIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKGZpbGUpOwotICAgICAgYnVmcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKHJlYWRlcik7Ci0gICAgICB3aGlsZSAoYnVmcmVhZGVyLnJlYWR5KCkpCi0gICAgICB7Ci0gICAgICAgIGZpbGVzdHJpbmcuYXBwZW5kKGJ1ZnJlYWRlci5yZWFkTGluZSgpICsgIlxuIik7Ci0gICAgICB9Ci0gICAgfSBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigpOwotICAgIH0gZmluYWxseQotICAgIHsKLSAgICAgIGJ1ZnJlYWRlci5jbG9zZSgpOwotICAgICAgcmVhZGVyLmNsb3NlKCk7Ci0gICAgfQotICAgIHJldHVybiBmaWxlc3RyaW5nLnRvU3RyaW5nKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSBsb2cgZmlsZSBmb3IgYW4gWFNEIHRlc3QuCi0gICAqIAotICAgKiBAcGFyYW0gZmlsZW5hbWUgVGhlIG5hbWUgb2YgdGhlIGxvZyBmaWxlIHRvIGNyZWF0ZS4KLSAgICogQHBhcmFtIHZhbHJlcG9ydCBUaGUgdmFsaWRhdGlvbiByZXBvcnQgZm9yIHRoaXMgZmlsZS4KLSAgICogQHJldHVybiBUaGUgZmlsZSBjb250ZW50cyBhcyBhIHN0cmluZyBpZiBzdWNjZXNzZnVsIG9yIG51bGwgaWYgbm90IHN1Y2Nlc3NmdWwuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBjcmVhdGVMb2coU3RyaW5nIGZpbGVuYW1lLCBWYWxpZGF0aW9uUmVwb3J0IHZhbHJlcG9ydCkKLSAgewotICAgICBWYWxpZGF0aW9uTWVzc2FnZVtdIHZhbG1lc3NhZ2VzID0gdmFscmVwb3J0LmdldFZhbGlkYXRpb25NZXNzYWdlcygpOwotICAgICBpbnQgbnVtbWVzc2FnZXMgPSB2YWxtZXNzYWdlcy5sZW5ndGg7Ly92YWxpZGF0b3IuZ2V0RXJyb3JzKCkuc2l6ZSgpICsgdmFsaWRhdG9yLmdldFdhcm5pbmdzKCkuc2l6ZSgpOwotICAgICBTdHJpbmdCdWZmZXIgZXJyb3JzU3RyaW5nID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICBTdHJpbmdCdWZmZXIgd2FybmluZ3NTdHJpbmcgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgIGludCBudW1lcnJvcnMgPSAwOwotICAgICBpbnQgbnVtd2FybmluZ3MgPSAwOwotICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtbWVzc2FnZXM7IGkrKykKLSAgICAgewotICAgICAgIFZhbGlkYXRpb25NZXNzYWdlIHZhbG1lcyA9IHZhbG1lc3NhZ2VzW2ldOwotICAgICAgIGlmKHZhbG1lcy5nZXRTZXZlcml0eSgpID09IFZhbGlkYXRpb25NZXNzYWdlLlNFVl9MT1cpCi0gICAgICAgewotICAgICAgICAgbnVtd2FybmluZ3MrKzsKLSAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gdmFsbWVzLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2VBbGwoIidbXiddKiIgKyBQTFVHSU5fTkFNRSArICJbXicvXSovIiwgIiciKTsKLSAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2VBbGwoIlsoXVteKF0qIiArIFBMVUdJTl9OQU1FICsgIlteJy9dKi8iLCAiKCIpOwotICAgICAgICAgd2FybmluZ3NTdHJpbmcuYXBwZW5kKG1lc3NhZ2UgKyAiIFsiICsgdmFsbWVzLmdldExpbmVOdW1iZXIoKSArIiwgIiArIHZhbG1lcy5nZXRDb2x1bW5OdW1iZXIoKSArIl1cbiIpOwotICAgICAgICAgd2FybmluZ3NTdHJpbmcuYXBwZW5kKGNyZWF0ZU5lc3RlZE1lc3NhZ2VTdHJpbmcodmFsbWVzLmdldE5lc3RlZE1lc3NhZ2VzKCkpKTsKLSAgICAgICB9Ci0gICAgICAgZWxzZQotICAgICAgIHsKLSAgICAgICAgIG51bWVycm9ycysrOwotICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSB2YWxtZXMuZ2V0TWVzc2FnZSgpOwotICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZUFsbCgiJ1teJ10qIiArIFBMVUdJTl9OQU1FICsgIlteJy9dKi8iLCAiJyIpOwotICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZUFsbCgiWyhdW14oXSoiICsgUExVR0lOX05BTUUgKyAiW14nL10qLyIsICIoIik7Ci0gICAgICAgICBlcnJvcnNTdHJpbmcuYXBwZW5kKG1lc3NhZ2UgKyAiIFsiICsgdmFsbWVzLmdldExpbmVOdW1iZXIoKSArIiwgIiArIHZhbG1lcy5nZXRDb2x1bW5OdW1iZXIoKSArIl1cbiIpOwotICAgICAgICAgZXJyb3JzU3RyaW5nLmFwcGVuZChjcmVhdGVOZXN0ZWRNZXNzYWdlU3RyaW5nKHZhbG1lcy5nZXROZXN0ZWRNZXNzYWdlcygpKSk7Ci0gICAgICAgfQotICAgICB9Ci0gICAgIFN0cmluZ0J1ZmZlciBsb2cgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgIGxvZy5hcHBlbmQoIm51bWJlciBvZiBlcnJvcnMgICAgICA6ICIgKyBudW1lcnJvcnMgKyAiXG4iKTsKLSAgICAgaWYobnVtd2FybmluZ3MgPiAwKQotICAgICB7Ci0gICAgICAgbG9nLmFwcGVuZCgibnVtYmVyIG9mIHdhcm5pbmdzICAgIDogIiArIG51bXdhcm5pbmdzICsgIlxuIik7Ci0gICAgIH0KLSAgICAgbG9nLmFwcGVuZCgiXG4tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0gICAgIGlmKG51bWVycm9ycyA9PSAwKQotICAgICB7Ci0gICAgICAgbG9nLmFwcGVuZCgiKG5vbmUpXG4iKTsKLSAgICAgfQotICAgICBlbHNlCi0gICAgIHsKLSAgICAgICBsb2cuYXBwZW5kKGVycm9yc1N0cmluZy50b1N0cmluZygpKTsKLSAgICAgfQotICAgICBpZihudW13YXJuaW5ncyA+IDApCi0gICAgIHsKLSAgICAgICBsb2cuYXBwZW5kKCItLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0gICAgICAgbG9nLmFwcGVuZChlcnJvcnNTdHJpbmcudG9TdHJpbmcoKSk7Ci0gICAgIH0KLSAgICAgbG9nLmFwcGVuZCh3YXJuaW5nc1N0cmluZy50b1N0cmluZygpKTsKLSAgICAgbG9nLmFwcGVuZCgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICAgCi0gICAgIERhdGFPdXRwdXRTdHJlYW0gb3V0U3RyZWFtID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBGaWxlIGxvZ2ZpbGUgPSBuZXcgRmlsZShmaWxlbmFtZSk7Ci0gICAgICBGaWxlIHBhcmVudCA9IGxvZ2ZpbGUuZ2V0UGFyZW50RmlsZSgpOwotICAJaWYgKCFwYXJlbnQuZXhpc3RzKCkpIAotICAJewotICAJICBwYXJlbnQubWtkaXJzKCk7Ci0gIAl9Ci0gICAgICBpZihsb2dmaWxlLmV4aXN0cygpKQotICAgICAgewotICAgICAgICBsb2dmaWxlLmRlbGV0ZSgpOwotICAgICAgfQotICAgICAgbG9nZmlsZS5jcmVhdGVOZXdGaWxlKCk7Ci0gICAgICAKLSAgICAgIG91dFN0cmVhbSA9IG5ldyBEYXRhT3V0cHV0U3RyZWFtKG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZpbGVuYW1lLCB0cnVlKSk7Ci0gICAgICBvdXRTdHJlYW0ud3JpdGVCeXRlcyhsb2cudG9TdHJpbmcoKSk7Ci0gICAgICBvdXRTdHJlYW0uY2xvc2UoKTsKLQotICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gSWYgd2UgY2FuJ3Qgd3JpdGUgdGhlIGxvZyB0aGVuIGNsZWFyIHRoZSBsb2cuCi0gICAgICBsb2cuZGVsZXRlKDAsIGxvZy5sZW5ndGgoKSk7Ci0gICAgfQotICAgIHJldHVybiBsb2cudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgY3JlYXRlTmVzdGVkTWVzc2FnZVN0cmluZyhMaXN0IG5lc3RlZE1lc3NhZ2VzKQotICB7Ci0gICAgcmV0dXJuIGNyZWF0ZU5lc3RlZE1lc3NhZ2VTdHJpbmcobmVzdGVkTWVzc2FnZXMsIDApOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBjcmVhdGVOZXN0ZWRNZXNzYWdlU3RyaW5nKExpc3QgbmVzdGVkTWVzc2FnZXMsIGludCBkZXB0aCkKLSAgewotICAgIGlmKG5lc3RlZE1lc3NhZ2VzICE9IG51bGwgJiYgbmVzdGVkTWVzc2FnZXMuc2l6ZSgpID4gMCkKLSAgICB7Ci0gICAgICBTdHJpbmcgbWVzc2FnZVN0cmluZyA9ICIiOwotICAgICAgSXRlcmF0b3IgbmVzdGVkTWVzSXRlciA9IG5lc3RlZE1lc3NhZ2VzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZShuZXN0ZWRNZXNJdGVyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgVmFsaWRhdGlvbk1lc3NhZ2UgbmVzdmFsbWVzID0gKFZhbGlkYXRpb25NZXNzYWdlKW5lc3RlZE1lc0l0ZXIubmV4dCgpOwotICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgZGVwdGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIG1lc3NhZ2VTdHJpbmcgKz0gIiAiOwotICAgICAgICB9Ci0gICAgICAgIC8vIElmIHRoZSBtZXNzYWdlIGNvbnRhaW5zIGFueSBmaWxlIHJlZmVyZW5jZXMgbWFrZSB0aGVtIHJlbGF0aXZlLgotICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IG5lc3ZhbG1lcy5nZXRNZXNzYWdlKCk7Ci0gICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2VBbGwoIidbXiddKiIgKyBQTFVHSU5fTkFNRSArICJbXicvXSovIiwgIiciKTsKLSAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZUFsbCgiWyhdW14oXSoiICsgUExVR0lOX05BTUUgKyAiW14nL10qLyIsICJbKF0iKTsKLSAgICAgICAgbWVzc2FnZVN0cmluZyArPSAoIi0+ICIgKyBtZXNzYWdlICsgIiBbIiArIG5lc3ZhbG1lcy5nZXRMaW5lTnVtYmVyKCkgKyIsICIgKyBuZXN2YWxtZXMuZ2V0Q29sdW1uTnVtYmVyKCkgKyJdXG4iKTsKLSAgICAgICAgbWVzc2FnZVN0cmluZyArPSBjcmVhdGVOZXN0ZWRNZXNzYWdlU3RyaW5nKG5lc3ZhbG1lcy5nZXROZXN0ZWRNZXNzYWdlcygpLCBkZXB0aCArIDEpOwotICAgICAgfQotICAgICAgcmV0dXJuIG1lc3NhZ2VTdHJpbmc7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gIiI7Ci0gICAgfQotICB9Ci0gIAotICBwcm90ZWN0ZWQgSVByb2plY3QgY3JlYXRlU2ltcGxlUHJvamVjdChTdHJpbmcgcHJvamVjdE5hbWUsIFN0cmluZ1tdIGZpbGVzKQotICB7Ci0gICAgZmluYWwgSVdvcmtzcGFjZSB3b3Jrc3BhY2UgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0gICAgZmluYWwgSVByb2plY3QgcHJvamVjdCA9IHdvcmtzcGFjZS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgaWYoIXByb2plY3QuZXhpc3RzKCkpCi0gICAgewotICAgICAgdHJ5Ci0JICB7Ci0gICAgICAgIHByb2plY3QuY3JlYXRlKG51bGwpOwotICAgICAgfQotICAgICAgY2F0Y2goQ29yZUV4Y2VwdGlvbiBlKQotCSAgewotICAgICAgICBmYWlsKCJDb3VsZCBub3QgY3JlYXRlIHByb2plY3QgIiArIHByb2plY3ROYW1lICsgZSk7Ci0gICAgICB9IAotICAgIH0KLSAgICBpZighcHJvamVjdC5pc09wZW4oKSkKLSAgICB7Ci0gICAgICB0cnkKLQkgIHsKLSAgICAgICAgcHJvamVjdC5vcGVuKG51bGwpOwotCSAgfQotICAgICAgY2F0Y2goQ29yZUV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBmYWlsKCJDb3VsZCBub3Qgb3BlbiBwcm9qZWN0ICIgKyBwcm9qZWN0TmFtZSArIGUpOwotCSAgfQotICAgIH0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBJUHJvamVjdERlc2NyaXB0aW9uIHByb2plY3REZXNjcmlwdGlvbiA9IHByb2plY3QuZ2V0RGVzY3JpcHRpb24oKTsgCi0gICAgICBwcm9qZWN0RGVzY3JpcHRpb24uc2V0TmFtZShwcm9qZWN0TmFtZSk7Ci0gICAgICBwcm9qZWN0LnNldERlc2NyaXB0aW9uKHByb2plY3REZXNjcmlwdGlvbiwgbnVsbCk7Ci0gICAgfQotICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoIlVuYWJsZSB0byBzZXQgcHJvamVjdCBwcm9wZXJ0aWVzIGZvciBwcm9qZWN0ICIgKyBwcm9qZWN0TmFtZSArICIuICIgKyBlKTsKLSAgICB9Ci0KLSAgICBpZihmaWxlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIGludCBudW1maWxlcyA9IGZpbGVzLmxlbmd0aDsKLSAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1maWxlczsgaSsrKQotICAgICAgewotICAgICAgICB0cnkKLQkJewotICAgICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVzW2ldOwotICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFjZSgnXFwnLCcvJyk7Ci0gICAgICAgICAgaWYoZmlsZW5hbWUuc3RhcnRzV2l0aCgiZmlsZToiKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZyg1KTsKLQkJCXdoaWxlKGZpbGVuYW1lLnN0YXJ0c1dpdGgoIi8iKSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoMSk7Ci0JICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKGZpbGVuYW1lKTsKLSAgICAgICAgICBGaWxlSW5wdXRTdHJlYW0gaW4gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpOwotICAgICAgICAgIElGaWxlIGlGaWxlID0gcHJvamVjdC5nZXRGaWxlKGZpbGUuZ2V0TmFtZSgpKTsKLSAgICAgICAgICBpZighaUZpbGUuZXhpc3RzKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgaUZpbGUuY3JlYXRlKGluLCB0cnVlLCBudWxsKTsKLSAgICAgICAgICAgIGluLmNsb3NlKCk7Ci0gICAgICAgICAgfQotCQl9Ci0gICAgICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCSAgZmFpbCgiVW5hYmxlIHRvIGxvY2F0ZSBmaWxlICIgKyBmaWxlc1tpXSk7Ci0JCX0gCi0gICAgICB9Ci0gICAgfQotICAgIHRyeQotICAgIHsKLSAgICAgIHByb2plY3QucmVmcmVzaExvY2FsKC0xLCBudWxsKTsKLSAgICB9Ci0gICAgY2F0Y2goRXhjZXB0aW9uIGUpCi0gICAge30KLSAgICByZXR1cm4gcHJvamVjdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQnVnRml4ZXNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CdWdGaXhlc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2IzNmYxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CdWdGaXhlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuWE1MQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JQ2F0YWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JQ2F0YWxvZ0VudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLnByb3Zpc2lvbmFsLklOZXh0Q2F0YWxvZzsKLQotCi0KLS8qKgotICogVGVzdCBjbGFzcyBmb3IgYnVnIGZpeGVzLgotICovCi1wdWJsaWMgY2xhc3MgQnVnRml4ZXNUZXN0IGV4dGVuZHMgQmFzZVRlc3RDYXNlCi17Ci0gIHByaXZhdGUgU3RyaW5nIEJVR0ZJWEVTX0RJUiA9ICJCdWdGaXhlcy8iOwotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoQnVnRml4ZXNUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpCi0gIHsKLSAgICBzdXBlci5zZXRVcCgpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvQnVnRml4ZXMvRW1wdHkueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RW1wdHkoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkVtcHR5IjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJFbXB0eUZpbGUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIkVtcHR5RmlsZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJFbXB0eUZpbGUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9CdWdGaXhlcy9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nL0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZygpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJJbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJJbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIkludmFsaWRTY2hlbWFJblhNTENhdGFsb2cvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBJUHJvamVjdCBwcm9qZWN0ID0gY3JlYXRlU2ltcGxlUHJvamVjdCgiUHJvamVjdCIsIG5ldyBTdHJpbmdbXXt0ZXN0ZmlsZX0pOwotICAgIElGaWxlIGZpbGUgPSBwcm9qZWN0LmdldEZpbGUodGVzdG5hbWUgKyAiLnhzZCIpOwotICAgIAotICAgIElDYXRhbG9nIGNhdGFsb2cgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREZWZhdWx0WE1MQ2F0YWxvZygpOwotICAgIElOZXh0Q2F0YWxvZ1tdIG5leHRDYXRhbG9ncyA9IGNhdGFsb2cuZ2V0TmV4dENhdGFsb2dzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZXh0Q2F0YWxvZ3MubGVuZ3RoOyBpKyspCi0JewotCQlJTmV4dENhdGFsb2cgbmV4dENhdGFsb2cgPSBuZXh0Q2F0YWxvZ3NbaV07Ci0JCWlmKFhNTENvcmVQbHVnaW4uVVNFUl9DQVRBTE9HX0lELmVxdWFscyhuZXh0Q2F0YWxvZy5nZXRJZCgpKSl7Ci0JCQlJQ2F0YWxvZyB1c2VyQ2F0YWxvZyA9IG5leHRDYXRhbG9nLmdldFJlZmVyZW5jZWRDYXRhbG9nKCk7Ci0JCQlpZih1c2VyQ2F0YWxvZyAhPSBudWxsKQotCQkJewotCQkJCUlDYXRhbG9nRW50cnkgY2F0YWxvZ0VudHJ5ID0gKElDYXRhbG9nRW50cnkpdXNlckNhdGFsb2cuY3JlYXRlQ2F0YWxvZ0VsZW1lbnQoSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1BVQkxJQyk7Ci0JCQkgICAgY2F0YWxvZ0VudHJ5LnNldEtleSgidGVzdEtleSIpOwotCQkJICAgIGNhdGFsb2dFbnRyeS5zZXRVUkkoImh0dHA6Ly90ZXN0dXJpIik7Ci0JCQkgICAgdXNlckNhdGFsb2cuYWRkQ2F0YWxvZ0VsZW1lbnQoY2F0YWxvZ0VudHJ5KTsKLQkJCSAgICBydW5UZXN0KCJwbGF0Zm9ybTovcmVzb3VyY2UvUHJvamVjdC9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nLnhzZCIvKkZJTEVfUFJPVE9DT0wgKyBmaWxlLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKSovLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0JCQkgICAgY2F0YWxvZy5yZW1vdmVDYXRhbG9nRWxlbWVudChjYXRhbG9nRW50cnkpOwotCQkJfQkKLQkJfQkKLQl9Ci0gICAgCi0gICAKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL0J1Z0ZpeGVzL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE1pc3NpbmdDbG9zaW5nU2NoZW1hVGFnKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJNaXNzaW5nQ2xvc2luZ1NjaGVtYVRhZyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIk1pc3NpbmdDbG9zaW5nU2NoZW1hVGFnLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIk1pc3NpbmdDbG9zaW5nU2NoZW1hVGFnLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvQnVnRml4ZXMvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIkltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIkltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL0J1Z0ZpeGVzL0ltcG9ydEludmFsaWRMb2NhdGlvbi9JbXBvcnRJbnZhbGlkTG9jYXRpb24ueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0SW52YWxpZExvY2F0aW9uKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRJbnZhbGlkTG9jYXRpb24iOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIkltcG9ydEludmFsaWRMb2NhdGlvbi8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW1wb3J0SW52YWxpZExvY2F0aW9uLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIkltcG9ydEludmFsaWRMb2NhdGlvbi8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL0J1Z0ZpeGVzL1R3b09wZW5CcmFja2V0cy9Ud29PcGVuQnJhY2tldHMueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VHdvT3BlbkJyYWNrZXRzKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJUd29PcGVuQnJhY2tldHMiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIlR3b09wZW5CcmFja2V0cy8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiVHdvT3BlbkJyYWNrZXRzLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIlR3b09wZW5CcmFja2V0cy8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL0J1Z0ZpeGVzL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9BLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiQSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJJbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvUGF0aHNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9QYXRoc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJiMTJhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9QYXRoc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0vKioKLSAqIFRlc3RzIHRoYXQgdGVzdCB2YXJpb3VzIHR5cGVzIG9mIHZhcmlhdGlvbnMgaW4gZmlsZSBwYXRocy4KLSAqLwotcHVibGljIGNsYXNzIFBhdGhzVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewotICBwcml2YXRlIFN0cmluZyBQQVRIU19ESVIgPSAiUGF0aHMvIjsKLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFBhdGhzVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKQotICB7Ci0gICAgc3VwZXIuc2V0VXAoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNwYWNlSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlNwYWNlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTcGFjZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldClJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0SW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXQpSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0dEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldEluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDbG9zZUJyYWNrZXRJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldClJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENsb3NlQnJhY2tldEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJDbG9zZUJyYWNrZXQpSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkRhc2hJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RGFzaEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkRhc2hJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJEYXNoLUluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkRhc2gtSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uIUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uIUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJFeGNsYW1hdGlvbkluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvbiFJbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RXhjbGFtYXRpb25JbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uIUluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uIUluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEV4Y2xhbWF0aW9uSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uIUluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldChJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuQnJhY2tldEluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJPcGVuQnJhY2tldEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldChJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXQoSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJPcGVuQnJhY2tldChJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldChJbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuQnJhY2tldEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJPcGVuQnJhY2tldChJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUGVyaW9kSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJQZXJpb2RJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UGVyaW9kSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJQZXJpb2QuSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZSdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RRdW90ZUluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZSdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFF1b3RlSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUXVvdGVJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGUnSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFF1b3RlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZSdJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZSdJbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RRdW90ZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZSdJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTcGFjZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiU3BhY2UgSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiU3BhY2UgSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFRpbGRlSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VGlsZGVJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJUaWxkZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VGlsZGVJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlfkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFRpbGRlSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlfkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VW5kZXJzY29yZUluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJVbmRlcnNjb3JlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFVuZGVyc2NvcmVJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJVbmRlcnNjb3JlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VW5kZXJzY29yZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VW5kZXJzY29yZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFuZ2xlSGF0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiQW5nbGVIYXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFuZ2xlSGF0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioqKioqKioqKioqKioqKioKLSAgICogVGVzdCBJbXBvcnRzCi0gICAqKioqKioqKioqKioqKioqKi8KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvSW1wb3J0QW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydEFuZ2xlSGF0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9JbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRBbmdsZUhhdEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0QW5nbGVIYXRJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0QW5nbGVIYXRJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRBbmdsZUhhdEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydEFuZ2xlSGF0SW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRTcGFjZUluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRTcGFjZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFNwYWNlSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0U3BhY2VJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXQpSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydENsb3NlQnJhY2tldEluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQ2xvc2VCcmFja2V0KUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydENsb3NlQnJhY2tldHRJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldClJbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0Q2xvc2VCcmFja2V0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRDbG9zZUJyYWNrZXQpSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldClJbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRDbG9zZUJyYWNrZXRJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0Q2xvc2VCcmFja2V0KUluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoLUluUGF0aC9JbXBvcnREYXNoSW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0RGFzaEluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnREYXNoSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydERhc2hJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnREYXNoSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0RGFzaEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0RGFzaC1JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0RGFzaEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnREYXNoLUluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9FeGNsYW1hdGlvbiFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRFeGNsYW1hdGlvbkluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRFeGNsYW1hdGlvbkluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9FeGNsYW1hdGlvbiFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydEV4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb24hSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydEV4Y2xhbWF0aW9uSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRFeGNsYW1hdGlvbiFJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvbiFJbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRFeGNsYW1hdGlvbkluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRFeGNsYW1hdGlvbiFJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvT3BlbkJyYWNrZXQoSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0T3BlbkJyYWNrZXRJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvT3BlbkJyYWNrZXQoSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRPcGVuQnJhY2tldEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydE9wZW5CcmFja2V0KEluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRPcGVuQnJhY2tldEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0T3BlbkJyYWNrZXQoSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXQoSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0T3BlbkJyYWNrZXRJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0T3BlbkJyYWNrZXQoSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0UGVyaW9kSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFBlcmlvZEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0UGVyaW9kSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0UGVyaW9kSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFBlcmlvZEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0UGVyaW9kSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFBlcmlvZC5JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUXVvdGUnSW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0UXVvdGVJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0UXVvdGVJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUXVvdGUnSW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRRdW90ZUluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFF1b3RlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlJ0luRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRRdW90ZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0UXVvdGUnSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGUnSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0UXVvdGVJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0UXVvdGUnSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9JbXBvcnRTcGFjZSBJbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0U3BhY2VJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFNwYWNlIEluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL0ltcG9ydFNwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFNwYWNlSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFNwYWNlIEluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRUaWxkZUluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRUaWxkZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFRpbGRlSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0VGlsZGVJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFRpbGRlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRUaWxkZX5JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRUaWxkZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFVuZGVyc2NvcmVJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0VW5kZXJzY29yZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9JbXBvcnRVbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRVbmRlcnNjb3JlSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0VW5kZXJzY29yZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL0ltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFVuZGVyc2NvcmVJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFVuZGVyc2NvcmVJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0VW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1hTRFZhbGlkYXRpb25UZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWFNEVmFsaWRhdGlvblRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxOWJhZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWFNEVmFsaWRhdGlvblRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgcGx1Z2luIGNsYXNzIGZvciB0aGlzIHRlc3QgcGx1Z2luLgotICovCi1wdWJsaWMgY2xhc3MgWFNEVmFsaWRhdGlvblRlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luCi17Ci0gIHByb3RlY3RlZCBzdGF0aWMgQnVuZGxlIHBsdWdpbkJ1bmRsZTsKLQotICBwdWJsaWMgWFNEVmFsaWRhdGlvblRlc3RzUGx1Z2luKCkKLSAgewotICB9Ci0gIAotICAvKioKLSAgICogQHNlZSBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQWN0aXZhdG9yI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIAotICB7Ci0Jc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JcGx1Z2luQnVuZGxlID0gY29udGV4dC5nZXRCdW5kbGUoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBzZWUgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUFjdGl2YXRvciNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gCi0gIHsKLQlwbHVnaW5CdW5kbGUgPSBudWxsOwotCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGluc3RhbGwgVVJMIG9mIHRoaXMgcGx1Z2luLgotICAgKiAKLSAgICogQHJldHVybiB0aGUgaW5zdGFsbCB1cmwgb2YgdGhpcyBwbHVnaW4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEluc3RhbGxVUkwoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcmV0dXJuIFBsYXRmb3JtLnJlc29sdmUocGx1Z2luQnVuZGxlLmdldEVudHJ5KCIvIikpLmdldEZpbGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVkOGZkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QKLQluYW1lPSJ0ZXN0c3VpdGUiCi0JZGVmYXVsdD0icnVuIgotCWJhc2VkaXI9Ii4iPgotCi0JPCEtLSBDb25maWd1cmFibGUgUHJvcGVydGllcyAtLT4KLQotCTwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBlY2xpcHNlLWhvbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9InBsdWdpbi1uYW1lIgotCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzIiAvPgotCi0JPCEtLSBFbmQgQ29uZmlndXJhYmxlIFByb3BlcnRpZXMgLS0+Ci0KLQk8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotCTwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9ImVjbGlwc2UtaG9tZSIKLQkJdmFsdWU9IiR7YmFzZWRpcn1cLi5cLi4iIC8+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9ImJ2dHdvcmtzcGFjZSIKLQkJdmFsdWU9IiR7YmFzZWRpcn0iIC8+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9ImxpYnJhcnktZmlsZSIKLQkJdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9IndvcmtzcGFjZS1mb2xkZXIiCi0JCXZhbHVlPSIke2J2dHdvcmtzcGFjZX0vJHtwbHVnaW4tbmFtZX0iIC8+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0JPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLQk8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLQk8dGFyZ2V0IG5hbWU9ImluaXQiPgotCQk8dHN0YW1wIC8+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldAotCQkJCWRpcj0iJHtlY2xpcHNlLWhvbWV9IgotCQkJCWluY2x1ZGVzPSJvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMuKi54bWwiIC8+Ci0JCTwvZGVsZXRlPgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLQk8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotCQk8IS0tIFN0YXJ0IHdpdGggY2xlYW4gZGF0YSB3b3Jrc3BhY2UgLS0+Ci0JCTxkZWxldGUKLQkJCWRpcj0iJHt3b3Jrc3BhY2UtZm9sZGVyfSIKLQkJCXF1aWV0PSJ0cnVlIiAvPgotCi0JCTxhbnQKLQkJCXRhcmdldD0iY29yZS10ZXN0IgotCQkJYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotCQkJZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iZGF0YS1kaXIiCi0JCQkJdmFsdWU9IiR7d29ya3NwYWNlLWZvbGRlcn0iIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJCQl2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJjbGFzc25hbWUiCi0JCQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5BbGxYU0RUZXN0cyIgLz4KLQkJPC9hbnQ+Ci0KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLQk8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLQkJPGRlbGV0ZQotCQkJZGlyPSIke3dvcmtzcGFjZS1mb2xkZXJ9IgotCQkJcXVpZXQ9InRydWUiIC8+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0JPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotCTx0YXJnZXQKLQkJbmFtZT0icnVuIgotCQlkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotCQk8YW50Ci0JCQl0YXJnZXQ9ImNvbGxlY3QiCi0JCQlhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0JCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJpbmNsdWRlcyIKLQkJCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzKi54bWwiIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJvdXRwdXQtZmlsZSIKLQkJCQl2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNTM1NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWdlbmVyYXRlZFJlc3VsdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9FbXB0eUZpbGUvRW1wdHkueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9FbXB0eUZpbGUvRW1wdHkueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvRW1wdHlGaWxlL0VtcHR5LnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9JbXBvcnRJbnZhbGlkTG9jYXRpb24vSW1wb3J0SW52YWxpZExvY2F0aW9uLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSW1wb3J0SW52YWxpZExvY2F0aW9uL0ltcG9ydEludmFsaWRMb2NhdGlvbi54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmUwZWFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9JbXBvcnRJbnZhbGlkTG9jYXRpb24vSW1wb3J0SW52YWxpZExvY2F0aW9uLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjaGVtYV9yZWZlcmVuY2UuNDogRmFpbGVkIHRvIHJlYWQgc2NoZW1hIGRvY3VtZW50ICd0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0SW52YWxpZExvY2F0aW9uL3N1YmRpci9pbXBvcnRpbmcueHNkYScsIGJlY2F1c2UgMSkgY291bGQgbm90IGZpbmQgdGhlIGRvY3VtZW50OyAyKSB0aGUgZG9jdW1lbnQgY291bGQgbm90IGJlIHJlYWQ7IDMpIHRoZSByb290IGVsZW1lbnQgb2YgdGhlIGRvY3VtZW50IGlzIG5vdCA8eHNkOnNjaGVtYT4uIFszLCA5OF0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0EueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvQS54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvQS54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0YTY2NTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zcmMtcmVzb2x2ZS40LjI6IEVycm9yIHJlc29sdmluZyBjb21wb25lbnQgJ3N0cmluZ2EnLiBJdCB3YXMgZGV0ZWN0ZWQgdGhhdCAnc3RyaW5nYScgaXMgaW4gbmFtZXNwYWNlICdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYScsIGJ1dCBjb21wb25lbnRzIGZyb20gdGhpcyBuYW1lc3BhY2UgYXJlIG5vdCByZWZlcmVuY2VhYmxlIGZyb20gc2NoZW1hIGRvY3VtZW50ICdwbGF0Zm9ybTovcmVzb3VyY2UvUHJvamVjdC9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nLnhzZCcuIElmIHRoaXMgaXMgdGhlIGluY29ycmVjdCBuYW1lc3BhY2UsIHBlcmhhcHMgdGhlIHByZWZpeCBvZiAnc3RyaW5nYScgbmVlZHMgdG8gYmUgY2hhbmdlZC4gSWYgdGhpcyBpcyB0aGUgY29ycmVjdCBuYW1lc3BhY2UsIHRoZW4gYW4gYXBwcm9wcmlhdGUgJ2ltcG9ydCcgdGFnIHNob3VsZCBiZSBhZGRlZCB0byAncGxhdGZvcm06L3Jlc291cmNlL1Byb2plY3QvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy54c2QnLiBbMywgNTBdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcvTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdmYjAwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcvTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFsyLCAxMjVdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL1R3b09wZW5CcmFja2V0cy9Ud29PcGVuQnJhY2tldHMueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9Ud29PcGVuQnJhY2tldHMvVHdvT3BlbkJyYWNrZXRzLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMzM5OTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL1R3b09wZW5CcmFja2V0cy9Ud29PcGVuQnJhY2tldHMueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGhlIG1hcmt1cCBpbiB0aGUgZG9jdW1lbnQgcHJlY2VkaW5nIHRoZSByb290IGVsZW1lbnQgbXVzdCBiZSB3ZWxsLWZvcm1lZC4gWzEsIDJdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvSW1wb3J0QW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvSW1wb3J0QW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU5NGM5OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvSW1wb3J0QW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvSW1wb3J0QW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9JbXBvcnRBbmdsZUhhdEluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZhNjEzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9JbXBvcnRBbmdsZUhhdEluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzYTY3MmUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXQpSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvSW1wb3J0Q2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0Q2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZjZjQ5Yi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0Q2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXQpSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRDbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9JbXBvcnREYXNoSW5QYXRoSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGNlZjE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9JbXBvcnREYXNoSW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9JbXBvcnREYXNoSW5QYXRoVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9JbXBvcnREYXNoSW5QYXRoVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aFZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI2OTdkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0ltcG9ydEV4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0ltcG9ydEV4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA2MjdkNC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbiFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBhOGY0Mi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvbiFJbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0ltcG9ydEV4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWQ5YmU4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0KEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9JbXBvcnRPcGVuQnJhY2tldEluUGF0aFZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydE9wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGQ4YmNlLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydE9wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0KEluRmlsZW5hbWVJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGE3MDIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aEludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aFZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNzlhZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM3MzlmOS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9JbXBvcnRRdW90ZUluUGF0aEludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZSdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9JbXBvcnRRdW90ZUluUGF0aFZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9JbXBvcnRRdW90ZUluUGF0aFZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9JbXBvcnRRdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgwNzFlMi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9JbXBvcnRRdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZSdJbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL0ltcG9ydFNwYWNlSW5QYXRoSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjlhNmUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL0ltcG9ydFNwYWNlSW5QYXRoVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9JbXBvcnRTcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9JbXBvcnRTcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjc4MTI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9JbXBvcnRTcGFjZSBJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9JbXBvcnRTcGFjZSBJbkZpbGVuYW1lVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvQ29weSBvZiAtZm9yWGVyY2VzMi42LjItIEltcG9ydFRpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0NvcHkgb2YgLWZvclhlcmNlczIuNi4yLSBJbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjliMTA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvQ29weSBvZiAtZm9yWGVyY2VzMi42LjItIEltcG9ydFRpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDENCi0NCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGUlN0VJbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdDQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2Y2ZTkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTk3MTMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL0ltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5ZWEzZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL0ltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL0ltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL0ltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9JbXBvcnRVbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWU3Nzg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9JbXBvcnRVbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9JbXBvcnRVbmRlcnNjb3JlSW5QYXRoVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9JbXBvcnRVbmRlcnNjb3JlSW5QYXRoVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0VtcHR5RmlsZS9FbXB0eS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0VtcHR5RmlsZS9FbXB0eS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9FbXB0eUZpbGUvRW1wdHkueHNkCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0SW52YWxpZExvY2F0aW9uL0ltcG9ydEludmFsaWRMb2NhdGlvbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydEludmFsaWRMb2NhdGlvbi9JbXBvcnRJbnZhbGlkTG9jYXRpb24ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjgzNDdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0SW52YWxpZExvY2F0aW9uL0ltcG9ydEludmFsaWRMb2NhdGlvbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3Jvb3QiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3Jvb3QiPgotICAgIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydGluZyIgc2NoZW1hTG9jYXRpb249InN1YmRpci9pbXBvcnRpbmcueHNkYSIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9BLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0EueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzIwZmUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0EueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL0FDIj4KLSAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJDLnhzZCIvPgotICA8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9CIiBzY2hlbWFMb2NhdGlvbj0iQi54c2QiLz4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9CLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0IueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDUwMDdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0IueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL0IiPgotICA8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9BQyIgc2NoZW1hTG9jYXRpb249Ii5cQy54c2QiLz4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9DLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0MueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmRmNjc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0MueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL0FDIj4KLSAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iU2FtcGxlVHlwZSI+Ci0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgPHhzZDplbGVtZW50IG5hbWU9IlNhbXBsZUVsZW1lbnQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0gICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1ZTZhZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9yb290IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9yb290Ij4KLSAgICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnRpbmciIHNjaGVtYUxvY2F0aW9uPSJzdWJkaXIvaW1wb3J0aW5nLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvc3ViZGlyL2ltcG9ydGluZy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvc3ViZGlyL2ltcG9ydGluZy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZjU0NjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyL3N1YmRpci9pbXBvcnRpbmcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnRpbmciIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydGluZyIgeG1sbnM6c2ltcGxlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3NpbXBsZSI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3NpbXBsZSIgc2NoZW1hTG9jYXRpb249InNpbXBsZS54c2QiLz4KLSAgICA8c2ltcGxlVHlwZSBuYW1lPSJteVNpbXBsZVR5cGUiPgotICAgIDxsaXN0IGl0ZW1UeXBlPSJzdHJpbmciLz4KLSAgPC9zaW1wbGVUeXBlPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvc3ViZGlyL3NpbXBsZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvc3ViZGlyL3NpbXBsZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MTBhNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyL3N1YmRpci9zaW1wbGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9zaW1wbGUiIHhtbG5zOmlibT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9zaW1wbGUiPgotICAgIDxlbGVtZW50IG5hbWU9Im15RWxlbWVudCIgdHlwZT0ic3RyaW5nIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA0NDMxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ludmFsaWQiIHhtbG5zOmludmFsaWQ9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW52YWxpZCI+Ci0JPGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0ic3RyaW5nYSI+PC9lbGVtZW50PgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9NaXNzaW5nQ2xvc2luZ1NjaGVtYVRhZy9NaXNzaW5nQ2xvc2luZ1NjaGVtYVRhZy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRkNzYzNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL1R3b09wZW5CcmFja2V0cy9Ud29PcGVuQnJhY2tldHMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9Ud29PcGVuQnJhY2tldHMvVHdvT3BlbkJyYWNrZXRzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk3YzhmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL1R3b09wZW5CcmFja2V0cy9Ud29PcGVuQnJhY2tldHMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvVHdvT3BlbkJyYWNrZXRzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvVHdvT3BlbkJyYWNrZXRzIj4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZkZjE0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9JbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvSW1wb3J0QW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwODRlNmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvSW1wb3J0QW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IkFuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvSW1wb3J0QW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkODJjOTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvSW1wb3J0QW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IkFuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvSW1wb3J0QW5nbGVIYXRJblBhdGhWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9JbXBvcnRBbmdsZUhhdEluUGF0aFZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdiZDBkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9JbXBvcnRBbmdsZUhhdEluUGF0aFZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IkFuZ2xlSGF0SW5QYXRoVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvSW1wb3J0Q2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiZDlhNzQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxODA1MTMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0Q2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjBkMDZmLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0Q2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJDbG9zZUJyYWNrZXQpSW5GaWxlbmFtZUludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0Q2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRDbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhMjUwM2IuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRDbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJDbG9zZUJyYWNrZXQpSW5GaWxlbmFtZVZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aEludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTY0OGNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aEludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iRGFzaEluUGF0aEludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aFZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aFZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YyZGE4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJEYXNoSW5QYXRoVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTM0ZDgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJEYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZVZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjMzNGFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iRGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE4OWZmMy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJFeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODM5MGM2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJFeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDMwNTI4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iRXhjbGFtYXRpb24hSW5GaWxlbmFtZUludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTkyZGQ5Ny4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJFeGNsYW1hdGlvbiFJbkZpbGVuYW1lVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9JbXBvcnRPcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9JbXBvcnRPcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQxMjUxNi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJPcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9JbXBvcnRPcGVuQnJhY2tldEluUGF0aFZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTQ2MWRkLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9JbXBvcnRPcGVuQnJhY2tldEluUGF0aFZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJPcGVuQnJhY2tldEluUGF0aFZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MGE2N2U5Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iT3BlbkJyYWNrZXQoSW5GaWxlbmFtZUludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBhYjczOC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJPcGVuQnJhY2tldChJbkZpbGVuYW1lVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9JbXBvcnRQZXJpb2RJblBhdGhJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9JbXBvcnRQZXJpb2RJblBhdGhJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg5NzgwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJQZXJpb2RJblBhdGhJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aFZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIzYWIzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iUGVyaW9kSW5QYXRoVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjNjI1NDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJQZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU5N2Q0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJQZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhJbnZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNzQ5NmMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iUXVvdGVJblBhdGhJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhWYWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoVmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY4M2M4NS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iUXVvdGVJblBhdGhWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoVmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoVmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFmYjM0Yi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlF1b3RlJ0luRmlsZW5hbWVJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljY2Y2ZGUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iUXVvdGUnSW5GaWxlbmFtZVZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9JbXBvcnRTcGFjZUluUGF0aEludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNhMjdhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9JbXBvcnRTcGFjZUluUGF0aEludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iU3BhY2VJblBhdGhJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9JbXBvcnRTcGFjZUluUGF0aFZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL0ltcG9ydFNwYWNlSW5QYXRoVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzkzZDIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL0ltcG9ydFNwYWNlSW5QYXRoVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iU3BhY2VJblBhdGhWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2MwYmFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL0ltcG9ydFNwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlNwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9JbXBvcnRTcGFjZSBJbkZpbGVuYW1lVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE2YmEzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9JbXBvcnRTcGFjZSBJbkZpbGVuYW1lVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iU3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMDk4NTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iVGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0ltcG9ydFRpbGRlfkluRmlsZW5hbWVWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmU5YTZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0ltcG9ydFRpbGRlfkluRmlsZW5hbWVWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJUaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9JbXBvcnRUaWxkZUluUGF0aEludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTYzZDRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJUaWxkZUluUGF0aEludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjODExMzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJUaWxkZUluUGF0aFZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL0ltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGJkYTE2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL0ltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL0ltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YyMTZmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL0ltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlVuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL0ltcG9ydFVuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTI3N2ExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iVW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ3NDI2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL0ltcG9ydFVuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJVbmRlcnNjb3JlSW5QYXRoVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4K