LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAogKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAqgKgogKiBDb250cmlidXRvcnM6CiAqICAgIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudGVzdHM7CgppbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CmltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CgppbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLmludGVybmFsLlNlcnZlclByZWZlcmVuY2VzOwoKcHVibGljIGNsYXNzIFNlcnZlclByZWZlcmVuY2VzVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Cglwcm90ZWN0ZWQgc3RhdGljIFNlcnZlclByZWZlcmVuY2VzIHByZWZzOwkKCglwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CgkJcmV0dXJuIG5ldyBPcmRlcmVkVGVzdFN1aXRlKFNlcnZlclByZWZlcmVuY2VzVGVzdENhc2UuY2xhc3MsICJTZXJ2ZXJQcmVmZXJlbmNlc1Rlc3RDYXNlIik7Cgl9CgoJcHVibGljIHZvaWQgdGVzdDAwR2V0UHJvcGVydGllcygpIHRocm93cyBFeGNlcHRpb24gewoJCXByZWZzID0gU2VydmVyUHJlZmVyZW5jZXMuZ2V0SW5zdGFuY2UoKTsKCX0KCglwdWJsaWMgdm9pZCB0ZXN0MDFHZXRQcmVmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CgkJcHJlZnMuaXNBdXRvUHVibGlzaGluZygpOwoJfQoKCXB1YmxpYyB2b2lkIHRlc3QwMkdldFByZWYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKCQlwcmVmcy5pc0F1dG9SZXN0YXJ0aW5nKCk7Cgl9CgoJcHVibGljIHZvaWQgdGVzdDAzR2V0UHJlZigpIHRocm93cyBFeGNlcHRpb24gewoJCXByZWZzLmlzQ3JlYXRlUmVzb3VyY2VzSW5Xb3Jrc3BhY2UoKTsKCX0KCQoJcHVibGljIHZvaWQgdGVzdDA0U2V0UHJlZigpIHRocm93cyBFeGNlcHRpb24gewoJCXByZWZzLnNldEF1dG9QdWJsaXNoaW5nKGZhbHNlKTsKCQlhc3NlcnRGYWxzZShwcmVmcy5pc0F1dG9QdWJsaXNoaW5nKCkpOwoJfQoJCglwdWJsaWMgdm9pZCB0ZXN0MDVTZXRQcmVmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CgkJcHJlZnMuc2V0QXV0b1B1Ymxpc2hpbmcodHJ1ZSk7CgkJYXNzZXJ0VHJ1ZShwcmVmcy5pc0F1dG9QdWJsaXNoaW5nKCkpOwoJfQoJCglwdWJsaWMgdm9pZCB0ZXN0MDZTZXRQcmVmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CgkJcHJlZnMuc2V0QXV0b1Jlc3RhcnRpbmcoZmFsc2UpOwoJCWFzc2VydEZhbHNlKHByZWZzLmlzQXV0b1Jlc3RhcnRpbmcoKSk7Cgl9CgkKCXB1YmxpYyB2b2lkIHRlc3QwN1NldFByZWYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKCQlwcmVmcy5zZXRBdXRvUmVzdGFydGluZyh0cnVlKTsKCQlhc3NlcnRUcnVlKHByZWZzLmlzQXV0b1Jlc3RhcnRpbmcoKSk7Cgl9CgkKCXB1YmxpYyB2b2lkIHRlc3QwOFNldFByZWYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKCQlwcmVmcy5zZXRDcmVhdGVSZXNvdXJjZXNJbldvcmtzcGFjZShmYWxzZSk7CgkJYXNzZXJ0RmFsc2UocHJlZnMuaXNDcmVhdGVSZXNvdXJjZXNJbldvcmtzcGFjZSgpKTsKCX0KCQoJcHVibGljIHZvaWQgdGVzdDA5U2V0UHJlZigpIHRocm93cyBFeGNlcHRpb24gewoJCXByZWZzLnNldENyZWF0ZVJlc291cmNlc0luV29ya3NwYWNlKHRydWUpOwoJCWFzc2VydFRydWUocHJlZnMuaXNDcmVhdGVSZXNvdXJjZXNJbldvcmtzcGFjZSgpKTsKCX0KCQoJcHVibGljIHZvaWQgdGVzdDEwRGVmYXVsdFByZWYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKCQlwcmVmcy5zZXRBdXRvUHVibGlzaGluZyhwcmVmcy5pc0RlZmF1bHRBdXRvUHVibGlzaGluZygpKTsKCQlhc3NlcnRFcXVhbHMocHJlZnMuaXNBdXRvUHVibGlzaGluZygpLCBwcmVmcy5pc0RlZmF1bHRBdXRvUHVibGlzaGluZygpKTsKCX0KCQoJcHVibGljIHZvaWQgdGVzdDExRGVmYXVsdFByZWYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKCQlwcmVmcy5zZXRBdXRvUmVzdGFydGluZyhwcmVmcy5pc0RlZmF1bHRBdXRvUmVzdGFydGluZygpKTsKCQlhc3NlcnRFcXVhbHMocHJlZnMuaXNBdXRvUmVzdGFydGluZygpLCBwcmVmcy5pc0RlZmF1bHRBdXRvUmVzdGFydGluZygpKTsKCX0KCQoJcHVibGljIHZvaWQgdGVzdDEyRGVmYXVsdFByZWYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKCQlwcmVmcy5zZXRDcmVhdGVSZXNvdXJjZXNJbldvcmtzcGFjZShwcmVmcy5pc0RlZmF1bHRDcmVhdGVSZXNvdXJjZXNJbldvcmtzcGFjZSgpKTsKCQlhc3NlcnRFcXVhbHMocHJlZnMuaXNDcmVhdGVSZXNvdXJjZXNJbldvcmtzcGFjZSgpLCBwcmVmcy5pc0RlZmF1bHRDcmVhdGVSZXNvdXJjZXNJbldvcmtzcGFjZSgpKTsKCX0KfQ==