cGFja2FnZSBvcmcuZWNsaXBzZS51aS5leHRlcm5hbHRvb2xzLmludGVybmFsLmNvcmU7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpDb3B5cmlnaHQgKGMpIDIwMDIgSUJNIENvcnAuIGFuZCBvdGhlcnMuCkFsbCByaWdodHMgcmVzZXJ2ZWQuIKAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwphcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjAuNQp3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdApodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MDUuaHRtbAqgCkNvbnRyaWJ1dG9yczoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CgovKioKICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgbGlzdCBvZiB0YXJnZXRzIHRoYXQgYW4KICogQW50IGZpbGUgY2FuIHJ1bi4KICovCnB1YmxpYyBjbGFzcyBBbnRUYXJnZXRMaXN0IHsKCS8vIFRoZSBsaXN0IG9mIHRhcmdldHMuCglwcml2YXRlIEFycmF5TGlzdCB0YXJnZXRzID0gbmV3IEFycmF5TGlzdCgpOwoJCgkvLyBUaGUgdGFyZ2V0IHRoYXQgd2lsbCBiZSBydW4gaWYgbm8gdGFyZ2V0cyBhcmUgc3BlY2lmaWVkCgkvLyBieSB0aGUgdXNlci4KCXByaXZhdGUgU3RyaW5nIGRlZmF1bHRUYXJnZXQgPSBudWxsOwoJCgkvKioKCSAqIEFkZCBhIHRhcmdldCB0byB0aGUgbGlzdC4KCSAqLwoJLypwYWNrYWdlKi8gdm9pZCBhZGQoU3RyaW5nIHRhcmdldCkgewoJCXRhcmdldHMuYWRkKHRhcmdldCk7CQoJfQoJCgkvKioKCSAqIFJldHJpZXZlIHRoZSBkZWZhdWx0IHRhcmdldC4gVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4KCSAqIDxjb2RlPm51bGw8L2NvZGU+IGlmIHRoZSBkZWZhdWx0IHRhcmdldCBoYXMgbm90IHlldAoJICogYmVlbiBzcGVjaWZpZWQuCgkgKi8KCXB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdFRhcmdldCgpIHsKCQlyZXR1cm4gZGVmYXVsdFRhcmdldDsJCgl9CgkKCS8qKgoJICogUmV0cmlldmUgYWxsIHRoZSB0YXJnZXRzIGFzIGFuIGFycmF5LgoJICovCglwdWJsaWMgU3RyaW5nW10gZ2V0VGFyZ2V0cygpIHsKCQlTdHJpbmdbXSBhcnJheSA9IG5ldyBTdHJpbmdbdGFyZ2V0cy5zaXplKCldOwoJCXRhcmdldHMudG9BcnJheShhcnJheSk7CgkJcmV0dXJuIGFycmF5OwoJfQoJCgkvKioKCSAqIFJldHVybnMgdGhlIG51bWJlciBvZiB0YXJnZXRzIGluIHRoZSBsaXN0LgoJICovCglwdWJsaWMgaW50IGdldFRhcmdldENvdW50KCkgewoJCXJldHVybiB0YXJnZXRzLnNpemUoKTsKCX0KCQoJLyoqCgkgKiBTZXQgdGhlIGRlZmF1bHQgdGFyZ2V0LgoJICovCgkvKnBhY2thZ2UqLyB2b2lkIHNldERlZmF1bHRUYXJnZXQoU3RyaW5nIHRhcmdldCkgewoJCWRlZmF1bHRUYXJnZXQgPSB0YXJnZXQ7Cgl9CgkKCS8qKgoJICogVmFsaWRhdGUgdGhlIGRlZmF1bHQgdGFyZ2V0IGV4aXN0cyB3aXRoaW4gdGhlCgkgKiBrbm93biB0YXJnZXQgbGlzdCBhbmQgaWYgbm90LCByZW1vdmUgaXQuCgkgKi8KCS8qcGFja2FnZSovIGJvb2xlYW4gdmFsaWRhdGVEZWZhdWx0VGFyZ2V0KCkgewoJCWlmIChkZWZhdWx0VGFyZ2V0ID09IG51bGwpCgkJCXJldHVybiB0cnVlOwoJCWlmICh0YXJnZXRzLmNvbnRhaW5zKGRlZmF1bHRUYXJnZXQpKQoJCQlyZXR1cm4gdHJ1ZTsKCQlkZWZhdWx0VGFyZ2V0ID0gbnVsbDsKCQlyZXR1cm4gZmFsc2U7Cgl9Cn0K