cGFja2FnZSBvcmcuZWNsaXBzZS51aS5leHRlcm5hbHRvb2xzLmludGVybmFsLmNvcmU7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpDb3B5cmlnaHQgKGMpIDIwMDIgSUJNIENvcnAuIGFuZCBvdGhlcnMuCkFsbCByaWdodHMgcmVzZXJ2ZWQuIKAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwphcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjAuNQp3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdApodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MDUuaHRtbAqgCkNvbnRyaWJ1dG9yczoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KaW1wb3J0IGphdmEudXRpbC5NYXA7CgppbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CmltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JbmNyZW1lbnRhbFByb2plY3RCdWlsZGVyOwppbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CmltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwppbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7CgovKioKICogVGhlIGV4dGVybmFsIHRvb2wgYnVpbGRlciBjYW4gYmUgYWRkZWQgdG8gdGhlIGJ1aWxkIHNwZWMgb2YgYSBwcm9qZWN0IHRvIHJ1biAKICogZXh0ZXJuYWwgdG9vbHMgaW5zaWRlIHRoZSBpbmNyZW1lbnRhbCBidWlsZCBwcm9jZXNzLgogKiA8cD4KICogTm90ZSB0aGF0IHRoZXJlIGlzIG9ubHkgZXZlciBvbmUgaW5zdGFuY2Ugb2YgRXh0ZXJuYWxUb29sc0J1aWxkZXIgcGVyIHByb2plY3QsCiAqIGFuZCB0aGUgZXh0ZXJuYWwgdG9vbCB0byBydW4gaXMgc3BlY2lmaWVkIGluIHRoZSBidWlsZGVyJ3MgYXJndW1lbnRzLgogKiA8L3A+CiAqLwpwdWJsaWMgZmluYWwgY2xhc3MgRXh0ZXJuYWxUb29sc0J1aWxkZXIgZXh0ZW5kcyBJbmNyZW1lbnRhbFByb2plY3RCdWlsZGVyIHsKCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0gIm9yZy5lY2xpcHNlLnVpLmV4dGVybmFsdG9vbHMuRXh0ZXJuYWxUb29sQnVpbGRlciI7CgoJLyoqCgkgKiBDcmVhdGVzIGFuIHVuaW5pdGlhbGl6ZWQgZXh0ZXJuYWwgdG9vbCBidWlsZGVyLgoJICovCglwdWJsaWMgRXh0ZXJuYWxUb29sc0J1aWxkZXIoKSB7CgkJc3VwZXIoKTsKCX0KCQoJLyogKG5vbi1KYXZhZG9jKQoJICogTWV0aG9kIGRlY2xhcmVkIG9uIEluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXIuCgkgKi8KCXByb3RlY3RlZCBJUHJvamVjdFtdIGJ1aWxkKGludCBraW5kLCBNYXAgYXJncywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7CgkJRXh0ZXJuYWxUb29sIHRvb2wgPSBFeHRlcm5hbFRvb2wuZnJvbUFyZ3VtZW50TWFwKGFyZ3MpOwoJCWlmICh0b29sICE9IG51bGwpIHsKCQkJRGVmYXVsdFJ1bm5lckNvbnRleHQgY29udGV4dCA9IG5ldyBEZWZhdWx0UnVubmVyQ29udGV4dCh0b29sLCBnZXRQcm9qZWN0KCksIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0V29ya2luZ1NldE1hbmFnZXIoKSk7CgkJCWNvbnRleHQucnVuKG1vbml0b3IpOwoJCX0KCQkKCQlyZXR1cm4gbnVsbDsKCX0KfQo=