cGFja2FnZSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlOwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBDb3B5cmlnaHQgKGMpIDIwMDMgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIKAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMAogKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAogKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbAqgKgogKiBDb250cmlidXRvcnM6CiAqICAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwppbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CmltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2g7CmltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklQcm9jZXNzOwoKaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5tb2RlbC5JU2VydmVyRGVsZWdhdGU7CmltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWwuSVVSTFByb3ZpZGVyOwovKioKICogCiAqLwpwdWJsaWMgaW50ZXJmYWNlIElUb21jYXRTZXJ2ZXIgZXh0ZW5kcyBJU2VydmVyRGVsZWdhdGUsIElVUkxQcm92aWRlciB7CglwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QRVJUWV9TRUNVUkUgPSAic2VjdXJlIjsKCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BFUlRZX0RFQlVHID0gImRlYnVnIjsKCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BFUlRZX1RFU1RfRU5WSVJPTk1FTlQgPSAidGVzdEVudmlyb25tZW50IjsKCgkvKioKCSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvY2VzcyBpcyBzZXQgdG8gcnVuIGluIGRlYnVnIG1vZGUuCgkgKiBUaGlzIGZlYXR1cmUgb25seSB3b3JrcyB3aXRoIFRvbWNhdCB2NC4wLgoJICoKCSAqIEByZXR1cm4gYm9vbGVhbgoJICovCglwdWJsaWMgYm9vbGVhbiBpc0RlYnVnKCk7CgkKCS8qKgoJICogUmV0dXJucyB0cnVlIGlmIHRoZSBwcm9jZXNzIGlzIHNldCB0byBydW4gaW4gc2VjdXJlIG1vZGUuCgkgKgoJICogQHJldHVybiBib29sZWFuCgkgKi8KCXB1YmxpYyBib29sZWFuIGlzU2VjdXJlKCk7CgkKCS8qKgoJICogUmV0dXJucyB0cnVlIGlmIHRoaXMgaXMgYSB0ZXN0IChydW4gY29kZSBvdXQgb2YgdGhlIHdvcmtiZW5jaCkgZW52aXJvbm1lbnQgc2VydmVyLgoJICoKCSAqIEByZXR1cm4gYm9vbGVhbgoJICovCglwdWJsaWMgYm9vbGVhbiBpc1Rlc3RFbnZpcm9ubWVudCgpOwoJCgkvKioKCSAqIFJldHVybnMgdGhlIG1haW4gY2xhc3MgdGhhdCBpcyB1c2VkIHRvIGxhdW5jaCB0aGUgVG9tY2F0IHNlcnZlci4KCSAqIAoJICogQHJldHVybgoJICovCglwdWJsaWMgU3RyaW5nIGdldFJ1bnRpbWVDbGFzcygpOwoKCS8qKgoJICogU2V0IHRoZSBwcm9jZXNzIHRoYXQgaXMgbW9uaXRvcmVkIGZvciBUb21jYXQgc3RhcnR1cCBhbmQgc2h1dGRvd24uCgkgKiBXYXJuaW5nOiBEbyBub3QgY2FsbCB0aGlzIG1ldGhvZCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmc7CgkgKiBpdCBzaG91bGQgb25seSBiZSB1c2VkIGluIHJhcmUgY2FzZXMuCgkgKiAKCSAqIEBwYXJhbSBuZXdQcm9jZXNzCgkgKi8KCXB1YmxpYyB2b2lkIHNldFByb2Nlc3MoSVByb2Nlc3MgbmV3UHJvY2Vzcyk7CgkKCS8qKgoJICogU2V0dXAgZm9yIHN0YXJ0aW5nIHRoZSBzZXJ2ZXIuCgkgKiAKCSAqIEBwYXJhbSBsYXVuY2ggSUxhdW5jaAoJICogQHBhcmFtIGxhdW5jaE1vZGUgU3RyaW5nCgkgKiBAcGFyYW0gbW9uaXRvciBJUHJvZ3Jlc3NNb25pdG9yCgkgKi8KCXB1YmxpYyB2b2lkIHNldHVwTGF1bmNoKElMYXVuY2ggbGF1bmNoLCBTdHJpbmcgbGF1bmNoTW9kZSwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbjsKfQ==