LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDE2IEZ1bmRhY2nzbiBUZWNuYWxpYSBSZXNlYXJjaCAmIElubm92YXRpb24uCiAqCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCiAqCiAqIENvbnRyaWJ1dG9yczoKICogICBIdWFzY2FyIEVzcGlub3phIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAqICAgQWxlamFuZHJhIFJ17XogLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICogICBJZG95YSBEZWwgUu1vIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAqICAgTWFyaSBDYXJtZW4gUGFsYWNpb3MgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICogICBBbmdlbCBM83BleiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqCiAqIEdlbmVyYXRlZCB3aXRoIEFjY2VsZW8KICovCnBhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmNlcnQucGFtLnByb2NzcGVjLnByb2Nlc3MucGFydHM7CgovLyBTdGFydCBvZiB1c2VyIGNvZGUgZm9yIGltcG9ydHMKaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwoKaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZWYucnVudGltZS51aS53aWRnZXRzLnJlZmVyZW5jZXN0YWJsZS5SZWZlcmVuY2VzVGFibGVTZXR0aW5nczsKCmltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlckZpbHRlcjsKCgovLyBFbmQgb2YgdXNlciBjb2RlCgovKioKICogCiAqIAogKi8KcHVibGljIGludGVyZmFjZSBBY3Rpdml0eUV2ZW50c1Byb3BlcnRpZXNFZGl0aW9uUGFydCB7CgoKCgkvKioKCSAqIEluaXQgdGhlIGxpZmVjeWNsZUV2ZW50CgkgKiBAcGFyYW0gY3VycmVudCB0aGUgY3VycmVudCB2YWx1ZQoJICogQHBhcmFtIGNvbnRhaW5nRmVhdHVyZSB0aGUgZmVhdHVyZSB3aGVyZSB0byBuYXZpZ2F0ZSBpZiBuZWNlc3NhcnkKCSAqIEBwYXJhbSBmZWF0dXJlIHRoZSBmZWF0dXJlIHRvIG1hbmFnZQoJICovCglwdWJsaWMgdm9pZCBpbml0TGlmZWN5Y2xlRXZlbnQoUmVmZXJlbmNlc1RhYmxlU2V0dGluZ3Mgc2V0dGluZ3MpOwoKCS8qKgoJICogVXBkYXRlIHRoZSBsaWZlY3ljbGVFdmVudAoJICogQHBhcmFtIG5ld1ZhbHVlIHRoZSBsaWZlY3ljbGVFdmVudCB0byB1cGRhdGUKCSAqIAoJICovCglwdWJsaWMgdm9pZCB1cGRhdGVMaWZlY3ljbGVFdmVudCgpOwoKCS8qKgoJICogQWRkcyB0aGUgZ2l2ZW4gZmlsdGVyIHRvIHRoZSBsaWZlY3ljbGVFdmVudCBlZGl0aW9uIGVkaXRvci4KCSAqIAoJICogQHBhcmFtIGZpbHRlcgoJICogICAgICAgICAgICBhIHZpZXdlciBmaWx0ZXIKCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkVmlld2VyI2FkZEZpbHRlcihWaWV3ZXJGaWx0ZXIpCgkgKiAKCSAqLwoJcHVibGljIHZvaWQgYWRkRmlsdGVyVG9MaWZlY3ljbGVFdmVudChWaWV3ZXJGaWx0ZXIgZmlsdGVyKTsKCgkvKioKCSAqIEFkZHMgdGhlIGdpdmVuIGZpbHRlciB0byB0aGUgbGlmZWN5Y2xlRXZlbnQgZWRpdGlvbiBlZGl0b3IuCgkgKiAKCSAqIEBwYXJhbSBmaWx0ZXIKCSAqICAgICAgICAgICAgYSB2aWV3ZXIgZmlsdGVyCgkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlciNhZGRGaWx0ZXIoVmlld2VyRmlsdGVyKQoJICogCgkgKi8KCXB1YmxpYyB2b2lkIGFkZEJ1c2luZXNzRmlsdGVyVG9MaWZlY3ljbGVFdmVudChWaWV3ZXJGaWx0ZXIgZmlsdGVyKTsKCgkvKioKCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBjb250YWluZWQgaW5zaWRlIHRoZSBsaWZlY3ljbGVFdmVudCB0YWJsZQoJICogCgkgKi8KCXB1YmxpYyBib29sZWFuIGlzQ29udGFpbmVkSW5MaWZlY3ljbGVFdmVudFRhYmxlKEVPYmplY3QgZWxlbWVudCk7CgoKCgoKCS8qKgoJICogUmV0dXJucyB0aGUgaW50ZXJuYXRpb25hbGl6ZWQgdGl0bGUgdGV4dC4KCSAqIAoJICogQHJldHVybiB0aGUgaW50ZXJuYXRpb25hbGl6ZWQgdGl0bGUgdGV4dC4KCSAqIAoJICovCglwdWJsaWMgU3RyaW5nIGdldFRpdGxlKCk7CgoJLy8gU3RhcnQgb2YgdXNlciBjb2RlIGZvciBhZGRpdGlvbmFsIG1ldGhvZHMKCQoJLy8gRW5kIG9mIHVzZXIgY29kZQoKfQo=