PD9waHAgcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vYXBwLmNsYXNzLnBocCIpOwlyZXF1aXJlX29uY2UoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvZWNsaXBzZS5vcmctY29tbW9uL3N5c3RlbS9uYXYuY2xhc3MucGhwIik7IAlyZXF1aXJlX29uY2UoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvZWNsaXBzZS5vcmctY29tbW9uL3N5c3RlbS9tZW51LmNsYXNzLnBocCIpOyAJJEFwcCAJPSBuZXcgQXBwKCk7CSROYXYJPSBuZXcgTmF2KCk7CSRNZW51IAk9IG5ldyBNZW51KCk7CQlpbmNsdWRlKCRBcHAtPmdldFByb2plY3RDb21tb24oKSk7ICAgICMgQWxsIG9uIHRoZSBzYW1lIGxpbmUgdG8gdW5jbHV0dGVyIHRoZSB1c2VyJ3MgZGVza3RvcCcKCSMgQmVnaW46IHBhZ2Utc3BlY2lmaWMgc2V0dGluZ3MuICBDaGFuZ2UgdGhlc2UuIAoJJHBhZ2VUaXRsZSAJCT0gIkVxdWlub3ggRG9jdW1lbnRzIjsKCSRwYWdlS2V5d29yZHMJPSAiZXF1aW5veCwgb3NnaSwgZnJhbWV3b3JrLCBydW50aW1lLCBkb2N1bWVudHMiOwoJJHBhZ2VBdXRob3IgPSAiRXF1aW5veCBjb21taXR0ZXJzIjsKCSRodG1sID0gPDw8RU9IVE1MCgoJPGRpdiBpZD0ibWlkY29sdW1uIj4KCQk8aDM+JHBhZ2VUaXRsZTwvaDM+CgkJCQk8dWw+CiAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InF1aWNrc3RhcnQucGhwIj5FcXVpbm94IFF1aWNrc3RhcnQgR3VpZGUgPC9hPjxici8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGk+QW4gZWFzeSBzZXQgb2Ygc3RlcHMgZm9yIHJ1bm5pbmcgRXF1aW5veC48L2k+IDwvbGk+CiAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9lcXVpbm94L3NlcnZlci9odHRwX3F1aWNrc3RhcnQucGhwIj5FcXVpbm94IFNlcnZlciBRdWlja3N0YXJ0IEd1aWRlPC9hPjxici8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGk+QW4gZWFzeSBzZXQgb2Ygc3RlcHMgZm9yIHJ1bm5pbmcgRXF1aW5veCB0byBzZXJ2ZSB3ZWIgY29udGVudCwgc2VybHZldHMgYW5kIEpTUHMuPC9pPiA8L2xpPgoJCQkJCTxsaT48YSBocmVmPSJwbHVnaW4tdmVyc2lvbmluZy5odG1sIj5SZWNvbW1lbmRhdGlvbiB0byB2ZXJzaW9uIHBsdWctaW5zPC9hPjwvbGk+CgkJCQkJPGxpPjxhIGhyZWY9ImNvZGluZy5waHAiPkVxdWlub3ggQ29kaW5nIFByYWN0aWNlczwvYT48L2xpPgogICAgCQkJCTxsaT48YSBocmVmPSIzLjItbWlncmF0aW9uLnBocCI+My4yIE1pZ3JhdGlvbiBHdWlkZTwvYT48L2xpPgoJCQkJPC91bD4KCgkJCTxoMz5QcmVzZW50YXRpb25zPC9oMz4KCQkJCTx1bD4KCQkJCQk8bGk+PGEgaHJlZj0iaHR0cDovL2xpdmUuZWNsaXBzZS5vcmciPkVjbGlwc2UgTGl2ZSBXZWJpbmFyPC9hPiAoTm92ZW1lYmVyIDIwMDcpCgkJCQkJICAtIDxhIGhyZWY9Imh0dHA6Ly9saXZlLmVjbGlwc2Uub3JnL25vZGUvMzg3Ij5JbnRyb2R1Y3Rpb24gdG8gRWNsaXBzZSBFcXVpbm94IGFuZCBPU0dpPC9hPiAtIFNpbW9uIEthZWdpIGFuZCBUaG9tYXMgV2F0c29uPC9saT4KCQkJCQk8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNpc3Qub3JnIj5FY2xpcHNJU1QgMjAwNyAoVHVya2lzaCBFY2xpcHNlIFN1bW1pdCAyMDA3KTwvYT4gKEFwcmlsKQoJCQkJCSAgLSA8YSBocmVmPSJlY2xpcHNpc3QyMDA3L0VjbGlwc2VTdW1taXRUdXJrZXkyMDA3LU9TR2lFcXVpbm94RXhwbGFpbmVkLnBkZiI+T1NHaSBhbmQgRWNsaXBzZSBFcXVpbm94IEV4cGxhaW5lZDwvYT4gLSBNYXJ0aW4gTGlwcGVydDwvbGk+CgkJCQkJPGxpPjxhIGhyZWY9Imh0dHA6Ly9qYW9vLm9yZyI+SkFPTyAyMDA2PC9hPiAoT2N0b2JlcikKCQkJCQkgIC0gPGEgaHJlZj0iamFvbzIwMDYvSkFPTzA2LWVxdWlub3gucGRmIj5FcXVpbm94IE9TR2k6IFBlcnZhc2l2ZSBDb21wb25lbnRpemF0aW9uPC9hPiAtIFRob21hcyBXYXRzb24gYW5kIEplZmYgTWNBZmZlcjwvbGk+CgkJCQkJPGxpPjxhIGhyZWY9Imh0dHA6Ly9qYW9vLm9yZyI+SkFPTyAyMDA2PC9hPiAoT2N0b2JlcikKCQkJCQkgIC0gPGEgaHJlZj0iamFvbzIwMDYvSkFPTzA2LU9TR2lfVHV0b3JpYWwucGRmIj5Qcm9ncmFtbWluZyB3aXRoIEVxdWlub3g8L2E+IC0gVGhvbWFzIFdhdHNvbiBhbmQgSmVmZiBNY0FmZmVyPC9saT4KCQkJCQk8bGk+PGEgaHJlZj0iaHR0cDovL2VjbGlwc2Vjb24ub3JnIj5FY2xpcHNlQ29uIDIwMDY8L2E+IChNYXJjaCkKCQkJCQkgIC0gPGEgaHJlZj0iZWNsaXBzZWNvbjIwMDYvQmVzdCBQcmFjdGljZXMgZm9yIFByb2dyYW1taW5nIEVjbGlwc2UgYW5kIE9TR2kucGRmIj5CZXN0IFByYWN0aWNlcyBmb3IgUHJvZ3JhbW1pbmcKCQkJCQkgIEVjbGlwc2UgYW5kIE9TR2k8L2E+IC0gQkogSGFyZ3JhdmUgYW5kIEplZmYgTWNBZmZlcjwvbGk+CgkJCQkJPGxpPjxhIGhyZWY9Imh0dHA6Ly9vc2dpY29uZ3Jlc3MuY29tIj5PU0dpIERldmVsb3BlciBGb3J1bSAyMDA1PC9hPiAoT2N0b2JlcikKCQkJCQkgIC0gPGEgaHJlZj0ib3NnaWNvbmdyZXNzMjAwNS9tY2FmZmVyXzEwMTJfMTUzMC5wZGYiPkVjbGlwc2UgdGhlIFJpY2ggQ2xpZW50IFBsYXRmb3JtPC9hPiAtIEplZmYgTWNBZmZlcjwvbGk+CgkJCQkJPGxpPjxhIGhyZWY9Imh0dHA6Ly9vc2dpY29uZ3Jlc3MuY29tIj5PU0dpIERldmVsb3BlciBGb3J1bSAyMDA1PC9hPiAoT2N0b2JlcikKCQkJCQkgIC0gPGEgaHJlZj0ib3NnaWNvbmdyZXNzMjAwNS9tY2FmZmVyXzEwMTNfMTMzMC5wZGYiPlByb2dyYW1taW5nIEVjbGlwc2Ugd2l0aCBFY2xpcHNlPC9hPiAtIEplZmYgTWNBZmZlcgoJCQkJCSAgJmFtcDsgVGhvbWFzIFdhdHNvbgoJCQkJCSAgPHVsPgoJCQkJCSAgICA8bGk+PGEgaHJlZj0ib3NnaWNvbmdyZXNzMjAwNS9jb2RpbmcuaHRtbCI+Q29kaW5nIGJ1bmRsZXMgb24gdGhlIFNsdWc8L2E+IChkZW1vIG1vdmllKTwvbGk+CgkJCQkJICAgIDxsaT48YSBocmVmPSJvc2dpY29uZ3Jlc3MyMDA1L2RlYnVnZ2luZy5odG1sIj5SZW1vdGUgZGVidWdnaW5nIG9uIHRoZSBTbHVnPC9hPiAoZGVtbyBtb3ZpZSk8L2xpPgogICAgCQkJCSAgPC91bD4KCQkJCSAgPC9saT4KICAgIAkJCQk8bGk+PGEgaHJlZj0iaHR0cDovL2VjbGlwc2Vjb24uY29tIj5FY2xpcHNlQ29uIDIwMDY8L2E+IChNYXJjaCkKICAgICAJCQkJIC0gPGEgaHJlZj0iVHV0b3JpYWxFY2xpcHNlQ29uMDYucHB0Ij5PU0dpIENvbXBvbmVudCBQcm9ncmFtbWluZyBUdXRvcmlhbDwvYT4gLSBUb20gV2F0c29uICZhbXA7IFBldGVyIEtyaWVuczwvbGk+CiAgICAJCQk8L2xpPgoJCQk8L3VsPgoKCQkJPGgzPjxhIG5hbWU9InNlcnZlciI+PC9hPlNlcnZlci1zaWRlPC9oMz4KCQkJPHVsPgogICAgICAgICAgICAgIDxsaT48YSBocmVmPSIvZXF1aW5veC9zZXJ2ZXIvaHR0cF9xdWlja3N0YXJ0LnBocCI+UXVpY2tzdGFydCBHdWlkZSB0byBTZXR0aW5nIHVwIGFuIEhUVFAgU2VydmVyPC9hPjxici8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGk+QW4gZWFzeSBzZXQgb2Ygc3RlcHMgdG8gc2V0IHVwIGFuIEhUVFAgc2VydmVyIHVzaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIEVxdWlub3ggYnVuZGxlcy48L2k+IDwvbGk+CiAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuYWJvLmZpL35tYnVlY2hpL3B1YmxpY2F0aW9ucy9FY2xpcHNlUGx1Z2lucy5odG1sIj5FY2xpcHNlCiAgICAgICAgICAgICAgICAgIFBsdWdpbi1CYXNlZCBBcHBsaWNhdGlvbnMgYW5kIEoyRUUgQ29tcG9uZW50czwvYT4gKE1hcnRpbiBC/GNoaSkgPGJyIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aT5NYXJ0aW4gd2FzIGludGVncmF0aW5nIHdpdGggcHJlLU9TR2kgRWNsaXBzZSBidXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmV0aGVsZXNzIHJhbiBpbnRvIG1hbnkgc2ltaWxhciBwcm9ibGVtcy4gVmVyeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJlc3Rpbmcgc3R1ZmYuPC9pPjwvbGk+CiAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuaW5mb25vaWEuY29tL2VuL2NvbnRlbnQuanNwP2Q9aW5mLjA1LjA3Ij5FY2xpcHNlCiAgICAgICAgICAgICAgICAgIGdvZXMgU2VydmVyLXNpZGUhPC9hPiBhbmQgPGEgaHJlZj0iaHR0cDovL3d3dy5pbmZvbm9pYS5jb20vZW4vY29udGVudC5qc3A/ZD1pbmYuMDUuMDkiPkRldmVsb3BpbmcKICAgICAgICAgICAgICAgICAgRWNsaXBzZS9PU0dpIGNvbXBvbmVudCB3ZWJhcHBzPC9hPiAoV29sZmdhbmcgR2VobmVyKSA8YnIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICA8aT5BbiBlYXJseSBhZG9wdGVyIG9mIHRoaXMgdGVjaG5vbG9neSwgaW4gdGhlc2UgYXJ0aWNsZXMKICAgICAgICAgICAgICAgICAgICAgICAgICBXb2xmZ2FuZyBtb3RpdmF0ZXMgdGhlIGJ1aWxkaW5nIG9mIFdlYiBVSSBjb21wb25lbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBPU0dpLjwvaT48L2xpPgoJCSAgPC91bD4KCgkJCTxoMz5SZWxhdGVkIERvY3VtZW50czwvaDM+CgkJCTx1bD4KCQkJCTxsaT4gPGEgaHJlZj0iaHR0cDovL29zZ2kub3JnL29zZ2lfdGVjaG5vbG9neS9kb3dubG9hZF9zcGVjcy5hc3A/c2VjdGlvbj0yIj5PU0dpIHNwZWNpZmljYXRpb25zPC9hPjwvbGk+CgkJCQk8bGk+IDxhIGhyZWY9ImlwbG9ncy9FcXVpbm94SVBsb2cuaHRtbCI+SVAgTG9nczwvYT48L2xpPgoJCQk8L3VsPgoJPC9kaXY+CgpFT0hUTUw7CglnZW5lcmF0ZVJhcFBhZ2UoICRBcHAsICRNZW51LCAkTmF2LCAkcGFnZUF1dGhvciwgJHBhZ2VLZXl3b3JkcywgJHBhZ2VUaXRsZSwgJGh0bWwgKTsKPz4K