LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sCqAqCiAqIENvbnRyaWJ1dG9yczoKICogICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpwYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuajJlZTsKCmltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwppbXBvcnQgamF2YS51dGlsLkxpc3Q7CgppbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklNb2R1bGU7CmltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyVXRpbDsKLyoqCiAqCiAqLwpwdWJsaWMgY2xhc3MgSjJFRVV0aWwgewoJLyoqCgkgKiBSZXR1cm5zIHRoZSBlbnRlcnByaXNlIGFwcGxpY2F0aW9ucyB0aGF0IHRoZSBtb2R1bGUgaXMgY29udGFpbmVkIHdpdGhpbi4KCSAqIAoJICogQHBhcmFtIG1vZHVsZQoJICogQHJldHVybgoJICovCglwdWJsaWMgc3RhdGljIElFbnRlcnByaXNlQXBwbGljYXRpb25bXSBnZXRFbnRlcnByaXNlQXBwbGljYXRpb25zKElKMkVFTW9kdWxlIG1vZHVsZSkgewoJCUxpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKCQlJTW9kdWxlW10gbW9kdWxlcyA9IFNlcnZlclV0aWwuZ2V0TW9kdWxlcygiajJlZS5lYXIiKTsKCQlpZiAobW9kdWxlcyAhPSBudWxsKSB7CgkJCWludCBzaXplID0gbW9kdWxlcy5sZW5ndGg7CgkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CgkJCQlJTW9kdWxlIG1vZHVsZTIgPSBtb2R1bGVzW2ldOwoJCQkJSUVudGVycHJpc2VBcHBsaWNhdGlvbiBlYXIgPSAoSUVudGVycHJpc2VBcHBsaWNhdGlvbikgbW9kdWxlMi5nZXRBZGFwdGVyKElFbnRlcnByaXNlQXBwbGljYXRpb24uY2xhc3MpOwoJCQkJaWYgKGVhciAhPSBudWxsKSB7CgkJCQkJSUoyRUVNb2R1bGVbXSBtb2R1bGVzMiA9IGVhci5nZXRNb2R1bGVzKCk7CgkJCQkJaWYgKG1vZHVsZXMyICE9IG51bGwpIHsKCQkJCQkJaW50IHNpemUyID0gbW9kdWxlczIubGVuZ3RoOwoJCQkJCQlmb3IgKGludCBqID0gMDsgaiA8IHNpemUyOyBqKyspIHsKCQkJCQkJCWlmIChtb2R1bGVzMltqXS5lcXVhbHMobW9kdWxlKSkKCQkJCQkJCQlsaXN0LmFkZChlYXIpOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJCUlFbnRlcnByaXNlQXBwbGljYXRpb25bXSBlYXJzID0gbmV3IElFbnRlcnByaXNlQXBwbGljYXRpb25bbGlzdC5zaXplKCldOwoJCWxpc3QudG9BcnJheShlYXJzKTsKCQlyZXR1cm4gZWFyczsKCX0KfQ==