LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIENvcHlyaWdodCAoYykgMjAxNiBGdW5kYWNp824gVGVjbmFsaWEgUmVzZWFyY2ggJiBJbm5vdmF0aW9uLg0KICoNCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjIuMA0KICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCiAqIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLTIuMC9FUEwtMi4wLmh0bWwNCiAqDQogKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMA0KICoNCiAqIENvbnRyaWJ1dG9yczoNCiAqICAgSHVhc2NhciBFc3Bpbm96YSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KICogICBBbGVqYW5kcmEgUnXteiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KICogICBJZG95YSBEZWwgUu1vIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQogKiAgIE1hcmkgQ2FybWVuIFBhbGFjaW9zIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQogKiAgIEFuZ2VsIEzzcGV6IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnBhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmNlcnQuYXBtLmFzc3VycHJvai53aXphcmRzOw0KDQppbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmQ7DQppbXBvcnQgb3JnLmVjbGlwc2UuZW1mLnRyYW5zYWN0aW9uLlRyYW5zYWN0aW9uYWxFZGl0aW5nRG9tYWluOw0KaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5JV2l6YXJkOw0KDQoNCg0KcHVibGljIGNsYXNzIFdpemFyZEVNRkNvbnRleHQgew0KDQoJcHJpdmF0ZSBUcmFuc2FjdGlvbmFsRWRpdGluZ0RvbWFpbiBlZGl0aW5nRG9tYWluOw0KDQoJcHJpdmF0ZSBJV2l6YXJkIHdpemFyZCA9IG51bGw7DQoNCglwdWJsaWMgV2l6YXJkRU1GQ29udGV4dChJV2l6YXJkIHdpemFyZCkgew0KCQl0aGlzLndpemFyZCA9IHdpemFyZDsNCgl9DQoNCglwdWJsaWMgV2l6YXJkRU1GQ29udGV4dChUcmFuc2FjdGlvbmFsRWRpdGluZ0RvbWFpbiBlZGl0aW5nRG9tYWluKSB7DQoJCXRoaXMuZWRpdGluZ0RvbWFpbiA9IGVkaXRpbmdEb21haW47DQoJfQ0KDQoJcHVibGljIGJvb2xlYW4gZXhlY3V0ZUNvbW1hbmQoQ29tbWFuZCBjb21tYW5kKSB7DQoJCWlmIChjb21tYW5kICE9IG51bGwgJiYgY29tbWFuZC5jYW5FeGVjdXRlKCkpIHsNCgkJCWdldEVkaXRpbmdEb21haW4oKS5nZXRDb21tYW5kU3RhY2soKS5leGVjdXRlKGNvbW1hbmQpOw0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJZWxzZSB7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgl9DQoNCglwdWJsaWMgZmluYWwgVHJhbnNhY3Rpb25hbEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsNCgkJaWYgKGVkaXRpbmdEb21haW4gPT0gbnVsbCkgew0KCQkJZWRpdGluZ0RvbWFpbiA9IGNyZWF0ZUVkaXRpbmdEb21haW4od2l6YXJkKTsNCgkJfQ0KCQlyZXR1cm4gZWRpdGluZ0RvbWFpbjsNCgl9DQoNCglwcm90ZWN0ZWQgVHJhbnNhY3Rpb25hbEVkaXRpbmdEb21haW4gY3JlYXRlRWRpdGluZ0RvbWFpbihJV2l6YXJkIHdpemFyZCkgew0KCQlyZXR1cm4gRWRpdGluZ0RvbWFpbkZhY3RvcnkuY3JlYXRlRWRpdGluZ0RvbWFpbih3aXphcmQpOw0KCX0NCg0KfQ0K