LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogQ29weXJpZ2h0IChDKSAyMDE2IGJ5IFNhdm9pci1mYWlyZSBMaW51eCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KICogQXV0aG9yOiBK5GdlciBOaWNvbGFzIDxuaWNvbGFzLmphZ2VyQHNhdm9pcmZhaXJlbGludXguY29tPiAgICAgICAgICAgICAgKg0KICogQXV0aG9yOiBUcmFjenlrIEFuZHJlYXMgPGFuZHJlYXMudHJhY3p5a0BzYXZvaXJmYWlyZWxpbnV4LmNvbT4gICAgICAgICAgKg0KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKg0KICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKg0KICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgKg0KICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICAgKg0KICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgKg0KICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAgKg0KICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgKg0KICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAgKg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KI3ByYWdtYSBvbmNlDQoNCiNpbmNsdWRlICJWQ2FyZFV0aWxzLmgiDQoNCm5hbWVzcGFjZSBSaW5nQ2xpZW50VVdQDQp7DQoNCmRlbGVnYXRlIHZvaWQgU2VsZWN0SW5kZXgoaW50IGluZGV4KTsNCmRlbGVnYXRlIHZvaWQgTG9hZFByb2ZpbGVJbWFnZSgpOw0KDQpuYW1lc3BhY2UgQ29uZmlndXJhdGlvbg0Kew0KDQovKiBkZWxlZ2F0ZXMgKi8NCg0KcHVibGljIHJlZiBjbGFzcyBVc2VyUHJlZmVyZW5jZXMgc2VhbGVkDQp7DQpwdWJsaWM6DQogICAgLyogc2luZ2xldG9uICovDQogICAgc3RhdGljIHByb3BlcnR5IFVzZXJQcmVmZXJlbmNlc14gaW5zdGFuY2UNCiAgICB7DQogICAgICAgIFVzZXJQcmVmZXJlbmNlc14gZ2V0KCkNCiAgICAgICAgew0KICAgICAgICAgICAgc3RhdGljIFVzZXJQcmVmZXJlbmNlc14gaW5zdGFuY2VfID0gcmVmIG5ldyBVc2VyUHJlZmVyZW5jZXMoKTsNCiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZV87DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvKiBwcm9wZXJ0aWVzICovDQogICAgcHJvcGVydHkgaW50ICAgICAgICAgICAgUFJFRl9BQ0NPVU5UX0lOREVYOw0KICAgIHByb3BlcnR5IHVpbnQ2NF90ICAgICAgIFBSRUZfUFJPRklMRV9VSUQ7DQogICAgcHJvcGVydHkgYm9vbCAgICAgICAgICAgUFJFRl9QUk9GSUxFX0hBU1BIT1RPOw0KICAgIHByb3BlcnR5IFN0cmluZ14gICAgICAgIFBSRUZfUFJPRklMRV9GTjsNCg0KICAgIC8qIGZ1bmN0aW9ucyAqLw0KICAgIHZvaWQgICAgICAgICAgICAgICAgICAgIHNhdmUoKTsNCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICBsb2FkKCk7DQogICAgU3RyaW5nXiAgICAgICAgICAgICAgICAgU3RyaW5naWZ5KCk7DQogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgRGVzdHJpbmdpZnkoU3RyaW5nXiBkYXRhKTsNCiAgICBWQ2FyZFV0aWxzOjpWQ2FyZF4gICAgICBnZXRWQ2FyZCgpOw0KICAgIHZvaWQgICAgICAgICAgICAgICAgICAgIHNhdmVQcm9maWxlVG9WQ2FyZCgpOw0KDQppbnRlcm5hbDoNCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICBzZW5kVkNhcmQoc3RkOjpzdHJpbmcgY2FsbElEKTsNCg0KICAgIC8qIGV2ZW50cyAqLw0KICAgIGV2ZW50IFNlbGVjdEluZGV4XiAgICAgIHNlbGVjdEluZGV4Ow0KICAgIGV2ZW50IExvYWRQcm9maWxlSW1hZ2VeIGxvYWRQcm9maWxlSW1hZ2U7DQoNCnByaXZhdGU6DQogICAgVkNhcmRVdGlsczo6VkNhcmReIHZDYXJkXzsNCiAgICBVc2VyUHJlZmVyZW5jZXMoKTsNCg0KfTsNCg0KfQ0KfQ==