LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAogKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAqgKiAKICogQ29udHJpYnV0b3JzOgogKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5tb2RlbDsKCmltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CmltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSU1vZHVsZTsKLyoqCiAqIEFuIGV2ZW50IGZpcmVkIHdoZW4gYSBtb2R1bGUgY2hhbmdlcy4KICogCiAqIEBzaW5jZSAxLjAKICovCnB1YmxpYyBjbGFzcyBNb2R1bGVFdmVudCB7Cglwcm90ZWN0ZWQgSU1vZHVsZSBtb2R1bGU7Cglwcm90ZWN0ZWQgYm9vbGVhbiBpc0NoYW5nZWQ7Cglwcm90ZWN0ZWQgSU1vZHVsZVtdIGFkZGVkOwoJcHJvdGVjdGVkIElNb2R1bGVbXSBjaGFuZ2VkOwoJcHJvdGVjdGVkIElNb2R1bGVbXSByZW1vdmVkOwoKCWNsYXNzIElNb2R1bGVBcnRpZmFjdCB7CgkJSVBhdGggcGF0aDsKCQlsb25nIHRpbWVzdGFtcDsKCX0KCgkvKioKCSAqIENyZWF0ZSBhIG5ldyBtb2R1bGUgZXZlbnQuCgkgKiAKCSAqIEBwYXJhbSBtb2R1bGUgdGhlIG1vZHVsZSB0aGF0IGhhcyBiZWVuIGNoYW5nZWQKCSAqIEBwYXJhbSBpc0NoYW5nZWQgdHJ1ZSBpZiB0aGUgbW9kdWxlIGhhcyBjaGFuZ2VkCgkgKiBAcGFyYW0gYWRkZWQgYWRkZWQgY2hpbGQgbW9kdWxlcwoJICogQHBhcmFtIGNoYW5nZWQgY2hhbmdlZCBjaGlsZCBtb2R1bGVzCgkgKiBAcGFyYW0gcmVtb3ZlZCByZW1vdmVkIGNoaWxkIG1vZHVsZXMKCSAqLwoJcHVibGljIE1vZHVsZUV2ZW50KElNb2R1bGUgbW9kdWxlLCBib29sZWFuIGlzQ2hhbmdlZCwgSU1vZHVsZVtdIGFkZGVkLCBJTW9kdWxlW10gY2hhbmdlZCwgSU1vZHVsZVtdIHJlbW92ZWQpIHsKCQl0aGlzLm1vZHVsZSA9IG1vZHVsZTsKCQl0aGlzLmlzQ2hhbmdlZCA9IGlzQ2hhbmdlZDsKCQl0aGlzLmFkZGVkID0gYWRkZWQ7CgkJdGhpcy5jaGFuZ2VkID0gY2hhbmdlZDsKCQl0aGlzLnJlbW92ZWQgPSByZW1vdmVkOwoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgbW9kdWxlIHRoYXQgaGFzIGJlZW4gY2hhbmdlZC4KCSAqCgkgKiBAcmV0dXJuIHRoZSBtb2R1bGUKCSAqLwoJcHVibGljIElNb2R1bGUgZ2V0TW9kdWxlKCkgewoJCXJldHVybiBtb2R1bGU7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBtb2R1bGUncyBzZXR0aW5ncyBoYXZlIGNoYW5nZWQuCgkgKiAKCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGNvbnRlbnRzIGhhdmUgY2hhbmdlZAoJICovCglwdWJsaWMgYm9vbGVhbiBpc0NoYW5nZWQoKSB7CgkJcmV0dXJuIGlzQ2hhbmdlZDsKCX0KCgkvKioKCSAqIFJldHVybnMgYW55IGNoaWxkIG1vZHVsZXMgdGhhdCBoYXZlIGJlZW4gYWRkZWQuCgkgKiAKCSAqIEByZXR1cm4gdGhlIGFkZGVkIGNoaWxkIG1vZHVsZXMsIG9yIG51bGwgaWYgbm8gbW9kdWxlcyBoYXZlIGJlZW4gYWRkZWQKCSAqLwoJcHVibGljIElNb2R1bGVbXSBnZXRBZGRlZENoaWxkTW9kdWxlcygpIHsKCQlyZXR1cm4gYWRkZWQ7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIGFueSBjaGlsZCBtb2R1bGVzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQuCgkgKiAKCSAqIEByZXR1cm4gdGhlIGNoYW5nZWQgY2hpbGQgbW9kdWxlcywgb3IgbnVsbCBpZiBubyBtb2R1bGVzIGhhdmUgYmVlbiBjaGFuZ2VkCgkgKi8KCXB1YmxpYyBJTW9kdWxlW10gZ2V0Q2hhbmdlZENoaWxkTW9kdWxlcygpIHsKCQlyZXR1cm4gY2hhbmdlZDsKCX0KCgkvKioKCSAqIFJldHVybnMgYW55IGNoaWxkIG1vZHVsZXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZC4KCSAqIAoJICogQHJldHVybiB0aGUgcmVtb3ZlZCBjaGlsZCBtb2R1bGVzLCBvciBudWxsIGlmIG5vIG1vZHVsZXMgaGF2ZSBiZWVuIHJlbW92ZWQKCSAqLwoJcHVibGljIElNb2R1bGVbXSBnZXRSZW1vdmVkQ2hpbGRNb2R1bGVzKCkgewoJCXJldHVybiByZW1vdmVkOwoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgbW9kdWxlIGFydGlmYWN0cyB0aGF0IGhhdmUgY2hhbmdlZC4KCSAqIAoJICogQHJldHVybiB0aGUgY2hhbmdlZCBtb2R1bGUgYXJ0aWZhY3RzCgkgKi8KCXB1YmxpYyBJTW9kdWxlQXJ0aWZhY3RbXSBnZXRDaGFuZ2VkQXJ0aWZhY3RzKCkgewoJCXJldHVybiBudWxsOwoJfQp9