PD9waHAgcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vYXBwLmNsYXNzLnBocCIpOwlyZXF1aXJlX29uY2UoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvZWNsaXBzZS5vcmctY29tbW9uL3N5c3RlbS9uYXYuY2xhc3MucGhwIik7IAlyZXF1aXJlX29uY2UoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvZWNsaXBzZS5vcmctY29tbW9uL3N5c3RlbS9tZW51LmNsYXNzLnBocCIpOyAJJEFwcCAJPSBuZXcgQXBwKCk7CSROYXYJPSBuZXcgTmF2KCk7CSRNZW51IAk9IG5ldyBNZW51KCk7CQlpbmNsdWRlKCRBcHAtPmdldFByb2plY3RDb21tb24oKSk7ICAgICMgQWxsIG9uIHRoZSBzYW1lIGxpbmUgdG8gdW5jbHV0dGVyIHRoZSB1c2VyJ3MgZGVza3RvcCcKCSMgQmVnaW46IHBhZ2Utc3BlY2lmaWMgc2V0dGluZ3MuICBDaGFuZ2UgdGhlc2UuIAoJJHBhZ2VUaXRsZSAJCT0gIkVxdWlub3ggSW5jdWJhdG9yIC0gU2VydmVyLXNpZGUgUHJvcG9zYWwiOwoJJHBhZ2VLZXl3b3Jkcwk9ICJlcXVpbm94LCBvc2dpLCBmcmFtZXdvcmssIHJ1bnRpbWUsIGluY3ViYXRvciwgc2VydmVyLCBwcm9wb3NhbCI7CgkkcGFnZUF1dGhvciA9ICJFcXVpbm94IGNvbW1pdHRlcnMiOwoJJGh0bWwgPSA8PDxFT0hUTUwKCQo8ZGl2IGlkPSJtaWRjb2x1bW4iPgoJPGgyPiRwYWdlVGl0bGU8L2gyPgoKPHA+SW5jcmVhc2luZ2x5LCBkZXZlbG9wZXJzIGFyZSB0aGlua2luZyBhYm91dCBob3cgdGhleSBtaWdodCB1c2UKRWNsaXBzZSdzIHBvd2VyZnVsIGNvbXBvbmVudCBtb2RlbCBhbmQgZXh0ZW5zaW9uIG1lY2hhbmlzbXMgaW4Kc2VydmVyLXNpZGUgZW52aXJvbm1lbnRzLiBUaGUgcG9zc2liaWxpdHkgb2YgYSBzaGFyZWQgcnVudGltZSB0aGF0CmFsbG93cyB0aGUgcmUtdXNlIG9mIGNvbXBvbmVudHMgYmV0d2VlbiBjbGllbnQgYW5kIHNlcnZlciBtb3RpdmF0ZXMKc29tZS4gT3RoZXJzIHNlZSBncmVhdCBwcm9taXNlIGluIGJlaW5nIGFibGUgdG8gc2FmZWx5IG1vZGlmeSB0aGUKY29tcG9uZW50cyBhbmQgY29uZmlndXJhdGlvbiBvZiBzb2Z0d2FyZSBydW5uaW5nIGluIGEgbGl2ZSBzZXJ2ZXIgZW52aXJvbm1lbnQuIDwvcD4KPHA+UnVubmluZyBFY2xpcHNlIG9uIHRoZSBzZXJ2ZXIgd2lsbCB0YWtlIGEgZGlmZmVyZW50IG1pbmRzZXQgKGFuZCBhIGZhaXIgYml0CiAgb2Ygd29yaykgYXMgaXQgcXVlc3Rpb25zIHNvbWUgb2YgdGhlIGRlc2lnbiBhbmQgaW1wbGVtZW50YXRpb24gYXNzdW1wdGlvbnMKICBtYWRlIGFuZCBhZGRzIGEgbnVtYmVyIG9mIGFkZGl0aW9uYWwgY29uc3RyYWludHMgb24gRWNsaXBzZSdzIHJ1bm5pbmcgZW52aXJvbm1lbnQuCiAgRm9yIGV4YW1wbGUsIGluIGEgc2VydmVyLXNpZGUgZW52aXJvbm1lbnQ6IDwvcD4KPHVsPgoJPGxpPllvdSBjYW4gbWFrZSBmZXcgYXNzdW1wdGlvbnMgb24gdGhlIGNvbnRyb2wgb2YgZ2xvYmFsIHJlc291cmNlczwvbGk+Cgk8bGk+WW91ciBsaWZlY3ljbGUgaXMgY29udHJvbGxlZCBleHRlcm5hbGx5PC9saT4KCTxsaT5Zb3UgbWlnaHQgYmUgcnVubmluZyBmb3IgYSB2ZXJ5IGxvbmcgdGltZTwvbGk+Cgk8bGk+WW91J3JlIGV4cGVjdGVkIHRvIGludGVncmF0ZSBpbiBhIGNvbXBsaWFudCBmYXNoaW9uIHdpdGggb3RoZXIKCXNlcnZlciBlbGVtZW50czwvbGk+CjwvdWw+Cgo8cD5UaGUga2V5IGdvYWwgb2YgdGhpcyBpbmN1YmF0b3IgaXMgdG8gYnJpbmcgZXhpc3Rpbmcgd29yayB0b2dldGhlciB0bwptYWtlIGV4cGxvcmF0aW9uIHByYWN0aWNhbC4gVGhlIGludGVudCBpcyB0byBoZWxwIGZvc3RlciBzb2x1dGlvbnMgdG8gdGhlIGlzc3VlcwogIHJlbGF0aW5nIHRvIGludGVncmF0aW5nIEVjbGlwc2Ugd2l0aCBzZXJ2ZXItc2lkZSB0ZWNobm9sb2d5LiBUaGUgaW5pdGlhbAplbXBoYXNpcyBpcyBvbiBKMkVFIGltcGxlbWVudGF0aW9ucyBidXQgbW9yZSBzcGVjaWZpY2FsbHkgdGhlIGZvbGxvd2luZyBpc3N1ZXMKICBhcmUgdG8gYmUgYWRkcmVzc2VkICh0aGlzIGxpc3Qgd2lsbCBldm9sdmUpOjwvcD4KPHVsPgoJPGxpPkVjbGlwc2UgY2hhbmdlcyBmb3Igc2VydmVyLXNpZGUgb3BlcmF0aW9uPC9saT4KCTxsaT5Db250YWluZXIgc3BlY2lmaWMgbGF1bmNoZXJzPC9saT4KCTxsaT5BcHBsaWNhdGlvbiBTZXJ2ZXIgSW50ZWdyYXRpb248L2xpPgo8L3VsPgoKPGgzPkVjbGlwc2UgQ2hhbmdlcyBmb3IgU2VydmVyLXNpZGUgT3BlcmF0aW9uPC9oMz4KCjxwPlRoZSBFY2xpcHNlIHJ1bnRpbWUgd2FzIG9yaWdpbmFsbHkgZGVzaWduZWQgdG8gcnVuIGFuIElERS4gSXQncyBhCnRlc3RhbWVudCB0byB0aGUgcnVudGltZSdzIHZlcnNhdGlsaXR5IHRoYXQgRWNsaXBzZSBpcyBub3cgdXNlZCBpbiBhCndpZGUgdmFyaWV0eSBvZiBSQ1AgYXBwbGljYXRpb25zLiBSdW5uaW5nIG9uIHRoZSBzZXJ2ZXIgcHVzaGVzIHRoaXMgZnVydGhlciBhbmQKcmFpc2VzIGlzc3VlcyBzdWNoIGFzOjwvcD4KPG9sPgoJPGxpPlRoZSBPU0dpIFVSTCBIYW5kbGVycyBTZXJ2aWNlIHJlcXVpcmVzIHR3byBzaW5nbGV0b24gb3BlcmF0aW9ucyBiZQoJc2V0IHdpdGggYW4gT1NHaSBhd2FyZSB2ZXJzaW9uCgk8dWw+CgkJPGxpPlVSTC5zZXRVUkxTdHJlYW1IYW5kbGVyRmFjdG9yeSiFKTwvbGk+CgkJPGxpPlVSTENvbm5lY3Rpb24uc2V0Q29udGVudEhhbmRsZXJGYWN0b3J5KIUpPC9saT4KCTwvdWw+Cgk8L2xpPgoJPGxpPlRoZSBPU0dpIENvbmRpdGlvbmFsIFBlcm1pc3Npb24gQWRtaW4gU3BlY2lmaWNhdGlvbiByZXF1aXJlcyB0aGUKCVNlY3VyaXR5TWFuYWdlciBiZSBzZXQgdG8gYW4gT1NHaSBhd2FyZSB2ZXJzaW9uPC9saT4KCTxsaT5FcXVpbm94IHVzZXMgU3lzdGVtIFByb3BlcnRpZXMgZm9yIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcywgYW5kIGFzCgl0aGUgY29udGFpbmVyIGZvciBCdW5kbGVDb250ZXh0IHByb3BlcnRpZXMuPC9saT4KPC9vbD4KPHA+Rm9yIHRoZSBmaXJzdCB0d28gaXRlbXMsIGEga2V5IGNoYWxsZW5nZSB0byBiZSBtYW5hZ2VkIGlzIHRoZSBmYWN0CnRoYXQgaW4gbWFueSBjYXNlcywgSjJFRSBhcHAgc2VydmVycyBzZXQgdGhlc2Ugc2luZ2xldG9ucyBiZWZvcmUKRXF1aW5veCBzdGFydHMuIFRoaXMgbWFrZXMgaXQgZGFuZ2Vyb3VzIG9yIGltcG9zc2libGUgZm9yIEVjbGlwc2UKdG8gc2V0IHRoZW0uIFRoZSB0aGlyZCBpdGVtIHByZXZlbnRzIEVxdWlub3ggZnJvbSBiZWluZwppbnN0YW50aWF0ZWQgbXVsdGlwbGUgdGltZXMuIDwvcD4KPHA+VGFja2xpbmcgdGhlc2UgaXNzdWVzIHdpbGwgcmVzdWx0IGluIGZhaXJseSBsYXJnZSwKY3Jvc3MtY3V0dGluZyBjaGFuZ2VzIGluIEVxdWlub3ggdGhhdCBhcmUgdmVyeSBkaWZmaWN1bHQgdG8KcmVzb2x2ZSB3aXRoIGluZGl2aWR1YWwgcGF0Y2hlcy4gVGhlIGdvYWwgZm9yIHRoaXMgYXJlYSBpcyB0byBmaW5kIGEgd2F5IHRvCm1ha2UgdGhlc2UgY2hhbmdlcyB3aXRob3V0IGNvbXByb21pc2luZyBjb21wYXRpYmlsaXR5IHdpdGggZXhpc3RpbmcgRWNsaXBzZQphcHBsaWNhdGlvbnMuIEFueSBjaGFuZ2VzIHdpbGwgdHJhY2UgdGhlIEhFQUQgdmVyeSBjbG9zZWx5IHRvIGZhY2lsaXRhdGUgaW50ZWdyYXRpb24uCklkZWFsbHkgdGhlc2UgY2hhbmdlcyB3b3VsZCBvY2N1ciBpbiB0aGUgMy4yIHRpbWVmcmFtZS48L3A+Cgo8aDM+Q29udGFpbmVyIFNwZWNpZmljIExhdW5jaGVyczwvaDM+Cgo8cD5PbmUgd2F5IHRvIHRoaW5rIG9mIHRoZSBFY2xpcHNlIElERSBhbmQgUkNQIGFwcGxpY2F0aW9ucyAoaW4gZ2VuZXJhbCkgaXMgdGhhdCB0aGV5CmFyZSBzdGFydGVkIGJ5IHRoZSBuYXRpdmUgZXhlY3V0YWJsZSBsYXVuY2hlci4gRm9yIHNlcnZlci1zaWRlIGVudmlyb25tZW50cywKRWNsaXBzZSBtdXN0IGJlIGxhdW5jaGVkIGluIGEgZGlmZmVyZW50IG1hbm5lci4gSW5pdGlhbGx5LCB0aGlzIGFyZWEgb2YgdGhlIGluY3ViYXRvcgp3aWxsIGZvY3VzIG9uIGEgbGF1bmNoZXIgYXBwcm9wcmlhdGUgZm9yIGVtYmVkZGluZyBpbiBhIHNlcnZsZXQgY29udGFpbmVyOwpob3dldmVyLCBvdGhlciBsYXVuY2hlcnMgd2lsbCBiZSBhZGRlZCBvdmVyIHRpbWUuIEFmdGVyIHRoZSBpc3N1ZXMgZm9yIHRoaXMgZmlyc3QgZW52aXJvbm1lbnQKYXJlIGFkZHJlc3NlZCwgb3RoZXIgc2NlbmFyaW9zIHNob3VsZCBiZSBmYXIgZWFzaWVyIHRvIHRhY2tsZS48L3A+Cgo8cD4KVGhlIGNvZGUsIGJ1aWxkIGluc3RydWN0aW9ucywgYW5kIHVzYWdlIGluc3RydWN0aW9ucyBmb3IgdGhlIHNlcnZsZXQKbGF1bmNoZXIgd2lsbCBiZSBwYXJ0IG9mIHRoZSBpbml0aWFsIGNvbnRyaWJ1dGlvbiBmb3IgdGhlIGluY3ViYXRvci4KPC9wPgoKPGgzPkFwcGxpY2F0aW9uIFNlcnZlciBJbnRlZ3JhdGlvbjwvaDM+ClRoZSBHZXJvbmltbyBjb21tdW5pdHkgaGFzIGV4cHJlc3NlZCBzb21lIGludGVyZXN0IGluIE9TR2kuIFRoaXMgaW5jdWJhdG9yIGludGVuZHMKdG8gaW52ZXN0aWdhdGUgd2hhdCBpdCBtZWFucyB0byBpbnRlZ3JhdGUgT1NHaSBhbmQgR2Vyb25pbW8gYXMgd2VsbCBhcyBhbnkgY2hhbmdlcwp0byBFcXVpbm94IHRoYXQgbWlnaHQgYmUgcmVxdWlyZWQgdG8gc3VwcG9ydCBHZXJvbmltby4gSW50ZWdyYXRpb24gd2l0aCBvdGhlcgphcHBsaWNhdGlvbiBzZXJ2ZXJzIGlzIGFsc28gb2YgaW50ZXJlc3QuCgo8aDM+UmVzb3VyY2VzPC9oMz4KPHA+UGxlYXNlIGRpcmVjdCBjb21tZW50cyBvciBxdWVzdGlvbnMgdG8gPGEKCWhyZWY9Im1haWx0bzplcXVpbm94LWRldkBlY2xpcHNlLm9yZyI+ZXF1aW5veC1kZXZAZWNsaXBzZS5vcmc8L2E+LjwvcD4KCjwvZGl2PgoKRU9IVE1MOwoJZ2VuZXJhdGVSYXBQYWdlKCAkQXBwLCAkTWVudSwgJE5hdiwgJHBhZ2VBdXRob3IsICRwYWdlS2V5d29yZHMsICRwYWdlVGl0bGUsICRodG1sICk7Cj8+Cg==