LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqIENvcHlyaWdodCAoQykgMjAxNiBieSBTYXZvaXItZmFpcmUgTGludXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiogQXV0aG9yOiBK5GdlciBOaWNvbGFzIDxuaWNvbGFzLmphZ2VyQHNhdm9pcmZhaXJlbGludXguY29tPiAgICAgICAgICAgICAgKg0KKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQoqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoNCiogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKg0KKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAqDQoqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgICAqDQoqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICoNCiogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAgKg0KKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgKg0KKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICAqDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiNpbmNsdWRlICJwY2guaCINCg0KI2luY2x1ZGUgIkNhbGwuaCINCg0KdXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkFwcGxpY2F0aW9uTW9kZWw6OkNvcmU7DQp1c2luZyBuYW1lc3BhY2UgUGxhdGZvcm07DQp1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OkNvcmU7DQoNCnVzaW5nIG5hbWVzcGFjZSBSaW5nQ2xpZW50VVdQOw0KDQovLyBSRUZBQ1RPUklORyA6IGZvciB0aGUgd2hvbGUgQ2FsbCBjbGFzcywgY2hhbmdlICJmcm9tIiB0byAicGVlciINCg0KQ2FsbDo6Q2FsbChTdHJpbmdeIGFjY291bnRJZHosIFN0cmluZ14gY2FsbElkeiwgU3RyaW5nXiBmcm9teikNCnsNCiAgICB0aGlzLT5hY2NvdW50SWQgPSBhY2NvdW50SWR6Ow0KICAgIHRoaXMtPmNhbGxJZCA9IGNhbGxJZHo7DQogICAgdGhpcy0+ZnJvbSA9IGZyb216Ow0KDQogICAgaXNPdXRHb2luZyA9IGZhbHNlOyAvLyBieSBkZWZhdWx0LCB3ZSBjb25zaWRlciB0aGUgY2FsbCBpbmNvbW1pbmcsIFJFRkFDVE8gOiBhZGQgdGhpcyB0byB0aGUgY29uc3RydWN0b3IgcGFyYW1zLi4uDQoNCiAgICB0aGlzLT5zdGF0ZSA9ICJpbmNvbWluZyBjYWxsIjsNCiAgICB0aGlzLT5jb2RlID0gLTE7DQp9DQoNCnZvaWQgUmluZ0NsaWVudFVXUDo6Q2FsbDo6c3RhdGVDaGFuZ2UoU3RyaW5nIF4gc3RhdGUsIGludCBjb2RlKQ0Kew0KICAgIHRoaXMtPnN0YXRlID0gc3RhdGU7DQogICAgUHJvcGVydHlDaGFuZ2VkKHRoaXMsIHJlZiBuZXcgUHJvcGVydHlDaGFuZ2VkRXZlbnRBcmdzKCJzdGF0ZSIpKTsNCiAgICB0aGlzLT5jb2RlID0gY29kZTsNCn0NCg0Kdm9pZA0KQ2FsbDo6Tm90aWZ5UHJvcGVydHlDaGFuZ2VkKFN0cmluZ14gcHJvcGVydHlOYW1lKQ0Kew0KICAgIENvcmVBcHBsaWNhdGlvblZpZXdeIHZpZXcgPSBDb3JlQXBwbGljYXRpb246Ok1haW5WaWV3Ow0KICAgIHZpZXctPkNvcmVXaW5kb3ctPkRpc3BhdGNoZXItPlJ1bkFzeW5jKA0KICAgICAgICBDb3JlRGlzcGF0Y2hlclByaW9yaXR5OjpOb3JtYWwsDQogICAgICAgIHJlZiBuZXcgRGlzcGF0Y2hlZEhhbmRsZXIoW3RoaXMsIHByb3BlcnR5TmFtZV0oKQ0KICAgIHsNCiAgICAgICAgUHJvcGVydHlDaGFuZ2VkKHRoaXMsIHJlZiBuZXcgUHJvcGVydHlDaGFuZ2VkRXZlbnRBcmdzKHByb3BlcnR5TmFtZSkpOw0KDQogICAgfSkpOw0KfQ0KDQp2b2lkIFJpbmdDbGllbnRVV1A6OkNhbGw6OnJlZnVzZSgpDQp7DQogICAgUmluZ0Q6Omluc3RhbmNlLT5yZWZ1c2VJbmNvbW1pbmdDYWxsKHRoaXMpOw0KfQ0KDQp2b2lkIFJpbmdDbGllbnRVV1A6OkNhbGw6OmFjY2VwdCgpDQp7DQogICAgUmluZ0Q6Omluc3RhbmNlLT5hY2NlcHRJbmNvbW1pbmdDYWxsKHRoaXMpOw0KfQ0KDQp2b2lkIFJpbmdDbGllbnRVV1A6OkNhbGw6OmNhbmNlbCgpDQp7DQogICAgUmluZ0Q6Omluc3RhbmNlLT5jYW5jZWxPdXRHb2luZ0NhbGwodGhpcyk7DQp9DQo=