PD9waHAgIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXJlcXVpcmVfb25jZSgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi9lY2xpcHNlLm9yZy1jb21tb24vc3lzdGVtL2FwcC5jbGFzcy5waHAiKTsJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbmF2LmNsYXNzLnBocCIpOyAJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbWVudS5jbGFzcy5waHAiKTsgCSRBcHAgCT0gbmV3IEFwcCgpOwkkTmF2CT0gbmV3IE5hdigpOwkkTWVudSAJPSBuZXcgTWVudSgpOwkJaW5jbHVkZSgiX3Byb2plY3RDb21tb24ucGhwIik7ICAgICMgQWxsIG9uIHRoZSBzYW1lIGxpbmUgdG8gdW5jbHV0dGVyIHRoZSB1c2VyJ3MgZGVza3RvcCcKCgkKCSMKCSMgQmVnaW46IHBhZ2Utc3BlY2lmaWMgc2V0dGluZ3MuICBDaGFuZ2UgdGhlc2UuIAoJJHBhZ2VUaXRsZSAJCT0gIkVjbGlwc2UgU3VtbWl0IEV1cm9wZSBDYWxsIGZvciBQYXJ0aWNpcGF0aW9uIC0gVGFsa3MgJiBEZW1vcyI7CgkkcGFnZUtleXdvcmRzCT0gIkVjbGlwc2UgU3VtbWl0IEV1cm9wZSwgY2FsbCBmb3IgUGFydGljaXBhdGlvbiAsIFRhbGtzICYgRGVtb3MiOwoJJHBhZ2VBdXRob3IJCT0gIk5hdGhhbiBHZXJ2YWlzIjsKCQoJIyBBZGQgcGFnZS1zcGVjaWZpYyBOYXYgYmFycyBoZXJlCgkjIEZvcm1hdCBpcyBMaW5rIHRleHQsIGxpbmsgVVJMIChjYW4gYmUgaHR0cDovL3d3dy5zb21lb3RoZXJzaXRlLmNvbS8pLCB0YXJnZXQgKF9zZWxmLCBfYmxhbmspCgkjICROYXYtPmFkZEN1c3RvbU5hdigiTXkgTGluayIsICJteXBhZ2UucGhwIiwgIl9zZWxmIik7CgkjICROYXYtPmFkZEN1c3RvbU5hdigiR29vZ2xlIiwgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iLCAiX2JsYW5rIik7CgoJIyBFbmQ6IHBhZ2Utc3BlY2lmaWMgc2V0dGluZ3MKCSMKCQoJIyBQYXN0ZSB5b3VyIEhUTUwgY29udGVudCBiZXR3ZWVuIHRoZSBFT0hUTUwgbWFya2VycyEJCgkkaHRtbCA9IDw8PEVPSFRNTAo8ZGl2IGlkPSJtYWluY29udGVudCI+Cgk8ZGl2IGlkPSJtaWRjb2x1bW4iPgoJCTxoMT4kcGFnZVRpdGxlPC9oMT4KCQk8aDI+Q29tbXVuaXR5IEJ1bGxldGluPC9oMj4KCgkJPHA+PGI+RUNMSVBTRSBTVU1NSVQgRVVST1BFIDIwMDc8YnIvPgpPY3RvYmVyIDktMTEsIDIwMDc8YnIvPgpTdHV0dGdhcnQgUmVnaW9uLCBHZXJtYW55PGJyLz4KPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlY29uLm9yZy9zdW1taXRldXJvcGUyMDA3Ij53d3cuZWNsaXBzZWNvbi5vcmcvc3VtbWl0ZXVyb3BlMjAwNzwvYT48L2I+PGJyPgo8L3A+CjxwPiAKVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBob3N0aW5nIHRoZSAybmQgYW5udWFsIEVjbGlwc2UgU3VtbWl0IEV1cm9wZSBvbiBPY3RvYmVyIDktMTEsIDIwMDcuIFRvIGJlIGhlbGQgaW4gdGhlIFN0dXR0Z2FydCByZWdpb24gb2YgR2VybWFueSwgdGhlIEVjbGlwc2UgU3VtbWl0IGlzIHRoZSBGb3VuZGF0aW9uknMgcHJlbWllciBldmVudCBkZXNpZ25lZCB0byBjcmVhdGUgb3Bwb3J0dW5pdGllcyBmb3IgdGhlIEV1cm9wZWFuIEVjbGlwc2UgY29tbXVuaXR5IHRvIGV4cGxvcmUsIHNoYXJlLCBhbmQgY29sbGFib3JhdGUgb24gdGhlIGxhdGVzdCBpZGVhcyBhbmQgaW5mb3JtYXRpb24gYWJvdXQgRWNsaXBzZSBhbmQgaXRzIG1lbWJlcnMuCjwvcD4KIAo8cD4KVGhlIGNvbmZlcmVuY2Ugd2lsbCBjb25zaXN0IG9mIG9uZSBkYXkgb2Ygc3ltcG9zaWEgZm9sbG93ZWQgYnkgdHdvIGRheXMgb2YgdGVjaG5pY2FsIGFuZCBidXNpbmVzcyB0cmFjayBzZXNzaW9ucywgc2VsZWN0ZWQga2V5bm90ZXMsIGRlbW9zLCBhbmQgbmV0d29ya2luZyBnYXRoZXJpbmdzLiBTcG9uc29ycyBzdXBwb3J0aW5nIHRoZSBFY2xpcHNlIFN1bW1pdCB3aWxsIHNob3djYXNlIHRoZWlyIGxhdGVzdCBwcm9kdWN0cyBhbmQgc2VydmljZXMsIGFzIHdlbGwgYXMgdGhlIGV4Y2l0aW5nIGNvbnRyaWJ1dGlvbnMgdGhlaXIgb3JnYW5pemF0aW9ucyBhcmUgbWFraW5nIHRvIHRoZSBFY2xpcHNlIGVjb3N5c3RlbS4gVGhlIGNvbmZlcmVuY2UgaXMgYSBzdGltdWxhdGluZyBhbmQgZHluYW1pYyBldmVudCBmb3IgRWNsaXBzZSBjb21taXR0ZXJzLCBjb250cmlidXRvcnMsIGFkb3B0ZXJzLCBhZGQtaW4gcHJvdmlkZXJzLCBhbmQgc2VydmljZSBwcm92aWRlcnMgdG8gbGVhcm4sIHNoYXJlIGV4cGVydGlzZSwgYW5kIGRpc2NvdmVyIG5ldyBvcHBvcnR1bml0aWVzIGFuZCBzb2x1dGlvbnMgaW4gdGhlIEVjbGlwc2UgZWNvc3lzdGVtLiAKPC9wPgogCjxwPgpFY2xpcHNlIGlzIG5vdyBjYWxsaW5nIGZvciBwYXJ0aWNpcGF0aW9uIGJ5IHRoZSBtZW1iZXJzaGlwIGluIHNldmVyYWwgZXZlbnRzIGF0IHRoZSBFY2xpcHNlIFN1bW1pdC4KPC9wPgogCgo8cD48Yj5TdWJtaXQgYSBUYWxrPC9iPjxici8+ClRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgbG9va2luZyBmb3IgbWVtYmVycyB0byBzcGVhayBhdCBFY2xpcHNlIFN1bW1pdCBFdXJvcGUuIFByZXBhcmVkIHByZXNlbnRhdGlvbnMgc2hvdWxkIGxhc3QgYXBwcm94aW1hdGVseSA2MCBtaW51dGVzLCBpbmNsdWRpbmcgNSBtaW51dGVzIG9mIHF1ZXN0aW9ucyBmcm9tIHRoZSBhdWRpZW5jZSBhdCB0aGUgZW5kLiBTdWJtaXR0ZWQgdGFsa3Mgc2hvdWxkIGZvY3VzIG9uIDEgb2YgMiBjYXRlZ29yaWVzOiAxKSBDb25zdW1lciBTdG9yaWVzOyBvciAyKSBOZXcgJiBOb3Rld29ydGh5Lgo8L3A+CiAKPHA+CkEgQ29uc3VtZXIgU3RvcnkgdGFsayBzaG91bGQgZXhwbG9yZSBhbiBpbmRpdmlkdWFsIG9yIGNvbXBhbnmScyBleHBlcmllbmNlIHVzaW5nIEVjbGlwc2UtYmFzZWQgdGVjaG5vbG9naWVzLiBUaGlzIGNvdWxkIGluY2x1ZGUgaG93IGEgY29tcGFueSB1c2VzIG11bHRpcGxlIEVjbGlwc2UgcHJvamVjdHMgb24gYSBsYXJnZSBzY2FsZSwgaG93IEVjbGlwc2UgY2hhbmdlZCB0aGUgb3JnYW5pemF0aW9uIG9mIGEgY29tcGFueSwgb3IgaG93IEVjbGlwc2UgY2hhbmdlZCB0aGUgd2F5IGEgY29tcGFueSBkb2VzIGl0cyBidXNpbmVzcy4gQXJlYXMgdG8gY292ZXIgbWF5IGluY2x1ZGUgd2h5IHlvdSBjaG9zZSBFY2xpcHNlLCBvYnN0YWNsZXMgeW91IGVuY291bnRlcmVkLCBzb2x1dGlvbnMgeW91IGZvdW5kLCB3aGF0IHlvdSBoYXZlIGNvbnRyaWJ1dGVkIGJhY2sgdG8gdGhlIEVjbGlwc2UgY29tbXVuaXR5LCBhbmQgd2hhdCB5b3Ugc2VlIGZvciB0aGUgZnV0dXJlLgo8L3A+CiAKPHA+CkZvciBOZXcgJiBOb3Rld29ydGh5IHRhbGtzLCB3ZSBhcmUgbG9va2luZyBnZW5lcmFsbHkgZm9yIHNwZWFrZXJzIGZyb20gRWNsaXBzZSBwcm9qZWN0cyB0aGF0IGhhdmUgYmVlbiBuZXdseSBjcmVhdGVkIG9yIGhhZCBhIHJlbGVhc2Ugd2l0aCBuZXcgYW5kIG5vdGV3b3J0aHkgZnVuY3Rpb25hbGl0eSBzaW5jZSB0aGUgRWNsaXBzZSBDYWxsaXN0byByZWxlYXNlLiBXZSB3b3VsZCBsaWtlIHRvIGhlYXIgYWJvdXQgd2hhdCBpbm5vdmF0aW9ucyBoYXZlIGFscmVhZHkgY29tZSBvdXQgb2YgeW91ciB3b3JrIGFuZCB3aGF0IHlvdSBwbGFuIHRvIGFjaGlldmUgZm9yIHlvdXIgbmV4dCByZWxlYXNlLgo8L3A+CiAKPHA+CjxiPlN1Ym1pdCBhIERlbW88L2I+PGJyLz4KVGhpcyB5ZWFyLCBFY2xpcHNlIGlzIHdlbGNvbWluZyBFY2xpcHNlIHByb2plY3RzIGFuZCBFY2xpcHNlLWJhc2VkIHNvbHV0aW9ucyB0byBzdWJtaXQgdGhlaXIgZGVtbyBwcm9wb3NhbHMgZm9yIGNvbnNpZGVyYXRpb24gYnkgdGhlIHByb2dyYW0gY29tbWl0dGVlLiBUaGUgdG9wIDUgZGVtb3Mgd2lsbCBlYWNoIGJlIGF3YXJkZWQgYSA5MCBtaW51dGUgc2Vzc2lvbiBkdXJpbmcgdGhlIEVjbGlwc2UgU3VtbWl0Lgo8L3A+CiAKPHA+CjxiPlN1Ym1pc3Npb24gUHJvY2VzczwvYj48YnIvPgo8dWw+PGxpPkNhbGwgZm9yIHRhbGsgJiBkZW1vIHByb3Bvc2FscyBvcGVucyBNYXkgMTcsIDIwMDc8L2xpPiAKCTxsaT5UYWxrcyAmIGRlbW9zIHdpbGwgYmUgcmV2aWV3ZWQgYnkgdGhlIFByb2dyYW0gQ29tbWl0dGVlIGFzIHRoZXkgYXJlIHN1Ym1pdHRlZDwvbGk+IAoJPGxpPkNhbGwgZm9yIHRhbGsgJiBkZW1vIHByb3Bvc2FscyBjbG9zZXMgSnVuZSAyOSwgMjAwNzwvbGk+IAoJPGxpPlN1Ym1pc3Npb25zIHdpbGwgcmVjZWl2ZSBhIHJlc3BvbnNlIGZyb20gdGhlIFByb2dyYW0gQ29tbWl0dGVlIGJ5IEp1bHkgMzEsIDIwMDc8L2xpPgo8L3VsPgogPC9wPgoKPHA+CjxiPkhvdyB0byBTdWJtaXQgYSBUYWxrIG9yIERlbW8gUHJvcG9zYWw8L2I+PGJyLz4KPHVsPgoJPGxpPlByZXBhcmUgYSAxIHRvIDIgcGFnZSBvdXRsaW5lIGFuZCBkZXNjcmlwdGlvbiBvZiB5b3VyIHByb3Bvc2VkIGNvbnRlbnQgaW4gLnBkZiBmb3JtYXQsIGluZGljYXRpbmcgYSB0aXRsZTwvbGk+IAoJPGxpPkUtbWFpbCB5b3VyIHByb3Bvc2FsIGFsb25nIHdpdGggeW91ciBuYW1lLCBjb21wYW55IChpZiBhcHBsaWNhYmxlKSwgZS1tYWlsIGFkZHJlc3MsIGFuZCBwaG9uZSBudW1iZXIgdG8gPGEgaHJlZj0ibWFpbHRvOnN1bW1pdEBlY2xpcHNlLm9yZyI+c3VtbWl0QGVjbGlwc2Uub3JnPC9hPjwvbGk+IAo8L3VsPgoKCjxwPgo8Yj5Db250YWN0PC9iPjxici8+CklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgY29tbWVudHMgb24gdGhlIHN1Ym1pc3Npb24gcHJvY2VzcywgcGxlYXNlIGNvbnRhY3Q6PGJyLz4KTHlubiBHYXlvd3NraTxici8+Ck1hcmtldGluZyBFdmVudHMgTWFuYWdlcjxici8+CkVtYWlsIGx5bm5AZWNsaXBzZS5vcmc8YnIvPgo8YnIvPgpQaG9uZSA2MTMtMjI0LTk0NjEgZXh0LjIzNDxici8+CkZheCA2MTMtMjI0LTUxNzI8YnIvPgoKIAoKCgk8L2Rpdj4KPC9kaXY+CgoKCgoKCQkKCkVPSFRNTDsKCgoJIyBHZW5lcmF0ZSB0aGUgd2ViIHBhZ2UKCSRBcHAtPmdlbmVyYXRlUGFnZSgkdGhlbWUsICRNZW51LCAkTmF2LCAkcGFnZUF1dGhvciwgJHBhZ2VLZXl3b3JkcywgJHBhZ2VUaXRsZSwgJGh0bWwpOwo/Pgo8P3BocAovKgogKiBDcmVhdGVkIG9uIDIwLUphbi0yMDA2CiAqCiAqIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIGZpbGUgZ28gdG8KICogV2luZG93IC0gUHJlZmVyZW5jZXMgLSBQSFBlY2xpcHNlIC0gUEhQIC0gQ29kZSBUZW1wbGF0ZXMKICovCj8+Cg==