LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqIKkgMjAxNSBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIGFuZCBpdHMgc3Vic2lkaWFyaWVzLg0KKiBZb3UgbWF5IHVzZSB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgZGVyaXZhdGl2ZXMgZXhjbHVzaXZlbHkgd2l0aA0KKiBNaWNyb2NoaXAgcHJvZHVjdHMuDQoqIFRISVMgU09GVFdBUkUgSVMgU1VQUExJRUQgQlkgTUlDUk9DSElQICJBUyBJUyIuDQoqIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIEFQUExZIFRPIFRISVMgU09GVFdBUkUsDQoqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwNCiogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBJVFMgSU5URVJBQ1RJT04gV0lUSCBNSUNST0NISVANCiogUFJPRFVDVFMsIENPTUJJTkFUSU9OIFdJVEggQU5ZIE9USEVSIFBST0RVQ1RTLCBPUiBVU0UgSU4gQU5ZIEFQUExJQ0FUSU9OLg0KKiBJTiBOTyBFVkVOVCBXSUxMIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgUFVOSVRJVkUsDQoqIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBMT1NTLCBEQU1BR0UsIENPU1QgT1IgRVhQRU5TRSBPRiBBTlkgS0lORA0KKiBXSEFUU09FVkVSIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCwgRVZFTiBJRiBNSUNST0NISVAgSEFTDQoqIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT1IgVEhFIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLg0KKiBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIE1JQ1JPQ0hJUCdTIFRPVEFMIExJQUJJTElUWSBPTiBBTEwNCiogQ0xBSU1TIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSElTIFNPRlRXQVJFIFdJTEwgTk9UIEVYQ0VFRCBUSEUgQU1PVU5UIE9GDQoqIEZFRVMsIElGIEFOWSwgVEhBVCBZT1UgSEFWRSBQQUlEIERJUkVDVExZIFRPIE1JQ1JPQ0hJUCBGT1IgVEhJUyBTT0ZUV0FSRS4NCiogTUlDUk9DSElQIFBST1ZJREVTIFRISVMgU09GVFdBUkUgQ09ORElUSU9OQUxMWSBVUE9OIFlPVVIgQUNDRVBUQU5DRQ0KKiBPRiBUSEVTRSBURVJNUy4NCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KDQpWZXJzaW9uIENvbnRyb2wgSW5mb3JtYXRpb24gKFBlcmZvcmNlKQ0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQokUmV2aXNpb246ICMxICQgDQokRGF0ZVRpbWU6IDIwMTYvMDkvMjIgMDg6MDM6NDkgJCANCiRBdXRob3I6IHByYW1hbnMgJA0KTGFzdCBDaGFuZ2U6CVVwZGF0ZWQgd2l0aCB1bml0IHRlc3RpbmcgZmVlZGJhY2tzDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKiogQGZpbGUgYnRpbWVyLmgNCiogXGJyaWVmIEJhc2ljIFRpbWVyIFBlcmlwaGVyYWwgSGVhZGVyIGZpbGUNCiogXGF1dGhvciBqdmFzYW50aA0KKiANCiogVGhpcyBmaWxlIGlzIHRoZSBoZWFkZXIgZmlsZSBmb3IgQmFzaWMgVGltZXIgUGVyaXBoZXJhbCANCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KLyoqIEBkZWZncm91cCBCYXNpY19UaW1lcg0KICogIEB7DQogKi8NCg0KI2lmbmRlZiBfQlRJTUVSX0gNCiNkZWZpbmUgX0JUSU1FUl9IDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKiogIExvZ2ljYWwgVGltZXIgSUQgZm9yIEFQSXMuDQogKiBUaGlzIGlzIHRoZSB0aW1lciBJRHMgcGFzc2VkIHRvIEJhc2ljIFRpbWVyIEFQSSBmdW5jdGlvbiBjYWxscyANCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KZW51bSBfUElEX0JUSU1FUl8NCnsNCglQSURfQlRJTUVSXzAsDQoJUElEX0JUSU1FUl8xLA0KCVBJRF9CVElNRVJfMiwNCglQSURfQlRJTUVSXzMsDQoJUElEX0JUSU1FUl80LA0KCVBJRF9CVElNRVJfNSwNCglQSURfQlRJTUVSX01BWAkNCn07DQoNCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi8qICAgICAgICAgICAgICAgICAgICBMb2dpY2FsIGZsYWdzIGZvciBUaW1lciBDb250cm9sICAgICAgICAgICAgICAgICAgICAgKi8NCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi8vVGhpcyBpcyBmb3IgdG1yX2NudGwgcGFyYW1ldGVyIGluIGJ0aW1lcl9pbml0IGZ1bmN0aW9uDQojZGVmaW5lIEJUSU1FUl9BVVRPX1JFU1RBUlQgICAgIAkJCSAgICAgKDB4MDh1KQ0KI2RlZmluZSBCVElNRVJfT05FX1NIT1QgICAgICAgICAJCQkgICAgICgwdSkNCiNkZWZpbmUgQlRJTUVSX0NPVU5UX1VQICAgICAgICAgCQkJICAgICAoMHgwNHUpDQojZGVmaW5lIEJUSU1FUl9DT1VOVF9ET1dOICAgICAgIAkJCSAgICAgKDB1KQ0KI2RlZmluZSBCVElNRVJfSU5UX0VOICAgICAgICAgICAJCQkgICAgICgweDAxdSkNCiNkZWZpbmUgQlRJTUVSX05PX0lOVCAgICAgICAgICAgCQkJICAgICAoMHUpDQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQoNCg0KLy9UaW1lciBCbG9jayBIYXJkd2FyZSBCaXRzIGFuZCBNYXNrcw0KI2RlZmluZSBCVElNRVJfQ05UTF9IQUxUICAgICAgICAgICAgICAgICAgICgweDgwVUwpDQojZGVmaW5lIEJUSU1FUl9DTlRMX1JFTE9BRCAgICAgICAgICAgICAgICAgKDB4NDBVTCkNCiNkZWZpbmUgQlRJTUVSX0NOVExfU1RBUlQgICAgICAgICAgICAgICAgICAoMHgyMFVMKQ0KI2RlZmluZSBCVElNRVJfQ05UTF9TT0ZUX1JFU0VUICAgICAgICAgICAgICgweDEwVUwpDQojZGVmaW5lIEJUSU1FUl9DTlRMX0FVVE9fUkVTVEFSVCAgICAgICAgICAgKDB4MDhVTCkNCiNkZWZpbmUgQlRJTUVSX0NOVExfQ09VTlRfVVAgICAgICAgICAgICAgICAoMHgwNFVMKQ0KI2RlZmluZSBCVElNRVJfQ05UTF9FTkFCTEUgICAgICAgICAgICAgICAgICgweDAxVUwpDQoNCiNkZWZpbmUgQlRJTUVSX0NOVExfSEFMVF9CSVQgICAgICAgICAgICAgICAoN1UpDQojZGVmaW5lIEJUSU1FUl9DTlRMX1JFTE9BRF9CSVQgICAgICAgICAgICAgKDZVKQ0KI2RlZmluZSBCVElNRVJfQ05UTF9TVEFSVF9CSVQgICAgICAgICAgICAgICg1VSkNCiNkZWZpbmUgQlRJTUVSX0NOVFJMX1NPRlRfUkVTRVRfQklUICAgICAgICAoNFUpDQojZGVmaW5lIEJUSU1FUl9DTlRMX0FVVE9fUkVTVEFSVF9CSVQgICAgICAgKDNVKQ0KI2RlZmluZSBCVElNRVJfQ05UTF9DT1VOVF9ESVJfQklUICAgICAgICAgICgyVSkNCiNkZWZpbmUgQlRJTUVSX0NOVExfRU5BQkxFX0JJVCAgICAgICAgICAgICAoMFUpDQoNCiNkZWZpbmUgQlRJTUVSX0dJUlEJCQkJCQkJCQkJCQkJTUVDX0dJUlEyM19JRA0KI2RlZmluZSBCVElNRVJfTUFYX0lOU1RBTkNFCQkJCQkJCQkJUElEX0JUSU1FUl9NQVgNCg0KDQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQovKiAgICAgICAgICAgIEFQSSAtIEJhc2ljIFRpbWVyIEludGl0aWFsaXphdGlvbiBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICovDQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQoNCi8qKiBJbml0aWFsaXplIHNwZWNpZmllZCB0aW1lcg0KICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRA0KICogQHBhcmFtIHRtcl9jbnRsIExvZ2ljYWwgZmxhZ3MgZm9yIFRpbWVyIENvbnRyb2wNCiAqIEBwYXJhbSBpbml0aWFsX2NvdW50IEluaXRpYWwgQ291bnQNCiAqIEBwYXJhbSBwcmVsb2FkX2NvdW50IFByZWxvYWQgQ291bnQNCiAqIEBub3RlIFBlcmZvcm1zIGEgc29mdCByZXNldCBvZiB0aGUgdGltZXIgYmVmb3JlIGNvbmZpZ3VyYXRpb24gDQogKi8NCnZvaWQgYnRpbWVyX2luaXQodWludDhfdCBidGltZXJfaWQsIA0KICAgICAgICAgICAgICAgdWludDE2X3QgdG1yX2NudGwsDQogICAgICAgICAgICAgICB1aW50MTZfdCBwcmVzY2FsZXIsDQogICAgICAgICAgICAgICB1aW50MzJfdCBpbml0aWFsX2NvdW50LA0KICAgICAgICAgICAgICAgdWludDMyX3QgcHJlbG9hZF9jb3VudCk7DQoNCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi8qICBBUEkgLSAgIEZ1bmN0aW9ucyB0byBwcm9ncmFtIGFuZCByZWFkIHRoZSBCYXNpYyBUaW1lciBDb3VudGVyICAgICAgICAgKi8NCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi8qKiBQcm9ncmFtIHRpbWVyJ3MgY291bnRlciByZWdpc3Rlci4NCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQNCiAqIEBwYXJhbSBjb3VudCBuZXcgY291bnRlciB2YWx1ZSANCiAqIEBub3RlIFRpbWVyIGhhcmR3YXJlIG1heSBpbXBsZW1lbnQgYSAxNi1iaXQgb3IgMzItYml0IA0KICogICAgICAgaGFyZHdhcmUgY291bnRlci4gSWYgdGhlIHRpbWVyIGlzIDE2LWJpdCBvbmx5IHRoZSBsb3dlcg0KICogICAgICAgMTYtYml0cyBvZiB0aGUgY291bnQgcGFyYW10ZXIgYXJlIHVzZWQuDQogKi8NCnZvaWQgYnRpbWVyX2NvdW50X3NldCh1aW50OF90IGJ0aW1lcl9pZCwgdWludDMyX3QgY291bnQpOw0KDQovKiogUmV0dXJuIGN1cnJlbnQgdmFsdWUgb2YgdGltZXIncyBjb3VudCByZWdpc3Rlci4NCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQuIA0KICogQHJldHVybiB1aW50MzJfdCB0aW1lciBjb3VudCBtYXkgYmUgMzIgb3IgMTYgYml0cyBkZXBlbmRpbmcgDQogKiAgICAgICAgIHVwb24gdGhlIGhhcmR3YXJlLiAgVGltZXJzIDAtMyBhcmUgMTYtYml0DQogKiAgICAgICAgIGFuZCBUaW1lcnMgNC01IGFyZSAzMi1iaXQuDQogKi8NCnVpbnQzMl90IGJ0aW1lcl9jb3VudF9nZXQodWludDhfdCBidGltZXJfaWQpOw0KDQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQovKiAgQVBJIC0gICBGdW5jdGlvbiB0byByZWxvYWQgY291bnRlciBmcm9tIFByZWxvYWQgUmVnaXN0ZXIgICAgICAgICAgICAgICovDQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQovKiogRm9yY2UgdGltZXIgdG8gcmVsb2FkIGNvdW50ZXIgZnJvbSBwcmVsb2FkIA0KICogcmVnaXN0ZXIuICANCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQuIA0KICogQG5vdGUgSGFyZHdhcmUgd2lsbCBvbmx5IHJlbG9hZCBjb3VudGVyIGlmIHRpbWVyIGlzIHJ1bm5pbmcuIA0KICovDQp2b2lkIGJ0aW1lcl9yZWxvYWQodWludDhfdCBidGltZXJfaWQpOw0KDQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQovKiAgQVBJIC0gICAgRnVuY3Rpb25zIGZvciBzdG9wcGluZyBhbmQgc3RhcnRpbmcgdGhlIGJhc2ljIFRpbWVyICAgICAgICAgICovDQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQovKiogU3RhcnQgdGltZXIgY291bnRpbmcuDQogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElELg0KICovDQp2b2lkIGJ0aW1lcl9zdGFydCh1aW50OF90IGJ0aW1lcl9pZCk7DQoNCi8qKiBTdG9wIHRpbWVyLiANCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQuIA0KICogQG5vdGUgV2hlbiBhIHN0b3BwZWQgdGltZXIgaXMgc3RhcnRlZCBhZ2FpbiBpdCB3aWxsIHJlbG9hZCANCiAqICAgICAgIHRoZSBjb3VudCByZWdpc3RlciBmcm9tIHByZWxvYWQgdmFsdWUuDQogKi8NCnZvaWQgYnRpbWVyX3N0b3AodWludDhfdCBidGltZXJfaWQpOw0KDQovKiogUmV0dXJuIHN0YXRlIG9mIHRpbWVyJ3MgU1RBUlQgYml0LiANCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQuIA0KICogQHJldHVybiB1aW50OF90IDAodGltZXIgbm90IHN0YXJ0ZWQpLCAxICh0aW1lciBzdGFydGVkKQ0KICovDQp1aW50OF90IGJ0aW1lcl9pc19zdGFydGVkKHVpbnQ4X3QgYnRpbWVyX2lkKTsNCg0KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLyogIEFQSSAtICAgICAgICAgRnVuY3Rpb24gdG8gcGVyZm9ybSBiYXNpYyB0aW1lciBzb2Z0IHJlc2V0ICAgICAgICAgICAgICAqLw0KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLyoqIFBlZm9ybSBzb2Z0IHJlc2V0IG9mIHNwZWNpZmllZCB0aW1lci4gDQogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElEIA0KICogQG5vdGUgU29mdCByZXNldCBzZXQgYWxsIHJlZ2lzdGVycyB0byBQT1IgdmFsdWVzLg0KICogU3BpbnMgMjU2IHRpbWVzIHdhaXRpbmcgb24gaGFyZHdhcmUgdG8gY2xlYXIgcmVzZXQgYml0LiANCiAqLw0Kdm9pZCBidGltZXJfcmVzZXQodWludDhfdCBidGltZXJfaWQpOw0KDQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQovKiAgIEFQSSAtICAgICAgICBGdW5jdGlvbnMgdG8gaGFsdC91bmhhbHQgdGhlIHRpbWVyIGNvdW50aW5nICAgICAgICAgICAgICovDQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQovKiogSGFsdCB0aW1lciBjb3VudGluZyB3aXRoIG5vIHJlbG9hZCBvbiB1bmhhbHQuICAgDQogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElELiANCiAqIEBub3RlIEEgaGFsdGVkIHRpbWVyIHdpbGwgbm90IHJlbG9hZCB0aGUgY291bnQgcmVnaXN0ZXIgd2hlbiANCiAqICAgICAgIHVuaGFsdGVkLCBpdCB3aWxsIGNvbnRpbnVlIGNvdW50aW5nIGZyb20gdGhlIGN1cnJlbnQNCiAqICAgICAgIGNvdW50IHZhbHVlLg0KICovDQp2b2lkIGJ0aW1lcl9oYWx0KHVpbnQ4X3QgYnRpbWVyX2lkKTsNCg0KLyoqIFVuaGFsdCB0aW1lciBjb3VudGluZy4gDQogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElELg0KICovDQp2b2lkIGJ0aW1lcl91bmhhbHQodWludDhfdCBidGltZXJfaWQpOw0KDQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQovKiAgIEFQSSAtICAgICAgICBGdW5jdGlvbnMgZm9yIEJhc2ljIFRpbWVyIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICovDQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQovKiogRW5hYmxlIHNwZWNpZmllZCB0aW1lcidzIGludGVycnVwdCBmcm9tIHRoZSBibG9jay4gDQogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElELg0KICogQHBhcmFtIGllbiBOb24temVybyBlbmFibGUgaW50ZXJydXB0IGluIHRpbWVyIGJsb2NrLCAwIA0KICogICAgICAgICAgICBkaXNhYmxlLg0KICovDQp2b2lkIGJ0aW1lcl9pbnRlcnJ1cHRfZW5hYmxlKHVpbnQ4X3QgYnRpbWVyX2lkLCB1aW50OF90IGllbik7DQoNCi8qKiBSZWFkIFRpbWVyIGludGVycnVwdCBzdGF0dXMgYW5kIGNsZWFyIGlmIHNldCANCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQuIA0KICogQHJldHVybiB1aW50OF90IDEgKFRpbWVyIGludGVycnVwdCBzdGF0dXMgc2V0KSBlbHNlIDAuIA0KICogQG5vdGUgSWYgdGltZXIgaW50ZXJydXB0IHN0YXR1cyBpcyBzZXQgdGhlbiBjbGVhciBpdCBiZWZvcmUgDQogKiAgICAgICByZXR1cm5pbmcuDQogKi8NCnVpbnQ4X3QgYnRpbWVyX2ludGVycnVwdF9zdGF0dXNfZ2V0X2Nscih1aW50OF90IGJ0aW1lcl9pZCk7DQoNCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi8qICBBUEkgLSAgICAgICAgIEZ1bmN0aW9ucyBmb3IgQmFzaWMgVGltZXIgR0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi8qKiBFbmFibGVzIEdJUlEgZW5hYmxlIGJpdCBmb3IgdGhlIHRpbWVyIA0KICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRC4NCiAqLw0Kdm9pZCBidGltZXJfZ2lycV9lbmFibGVfc2V0KHVpbnQ4X3QgYnRpbWVyX2lkKTsNCg0KLyoqIENsZWFycyBHSVJRIGVuYWJsZSBiaXQgZm9yIHRoZSB0aW1lciANCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQuDQogKi8NCnZvaWQgYnRpbWVyX2dpcnFfZW5hYmxlX2Nscih1aW50OF90IGJ0aW1lcl9pZCk7DQoNCi8qKiBSZXR1cm5zIEdJUlEgc291cmNlIGJpdCBmb3IgdGhlIHRpbWVyIA0KICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRC4NCiAqIEByZXR1cm4gdWludDhfdCAwKHNyYyBiaXQgbm90IHNldCksIE5vbi16ZXJvIChzcmMgYml0IHNldCkNCiAqLw0KdWludDhfdCBidGltZXJfZ2lycV9zcmNfZ2V0KHVpbnQ4X3QgYnRpbWVyX2lkKTsNCg0KLyoqIENsZWFycyBHSVJRIHNvdXJjZSBiaXQgZm9yIHRoZSB0aW1lciANCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQuDQogKi8NCnZvaWQgYnRpbWVyX2dpcnFfc3JjX2Nscih1aW50OF90IGJ0aW1lcl9pZCk7DQoNCi8qKiBSZXR1cm5zIEdJUlEgcmVzdWx0IGJpdCBmb3IgdGhlIHRpbWVyIA0KICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRC4NCiAqIEByZXR1cm4gdWludDhfdCAwKHJlc3VsdCBiaXQgbm90IHNldCksIE5vbi16ZXJvIChyZXN1bHQgYml0IHNldCkNCiAqLw0KdWludDhfdCBidGltZXJfZ2lycV9yZXN1bHRfZ2V0KHVpbnQ4X3QgYnRpbWVyX2lkKTsNCg0KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLyogIEFQSSAtICAgICAgICAgRnVuY3Rpb25zIGZvciBCYXNpYyBUaW1lciBTbGVlcCAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLyoqIEVuYWJsZS9EaXNhYmxlIGNsb2NrIGdhdGluZyBvbiBpZGxlIG9mIGEgdGltZXIgIA0KICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRC4NCiAqIEBwYXJhbSBzbGVlcF9lbiAxID0gU2xlZXAgZW5hYmxlLCAwID0gU2xlZXAgZGlzYWJsZQ0KICovDQp2b2lkIGJ0aW1lcl9zbGVlcCh1aW50OF90IGJ0aW1lcl9pZCwgdWludDhfdCBzbGVlcF9lbik7DQoNCi8qKiBSZXR1cm5zIGNsayByZXF1aXJlZCBzdGF0dXMgZm9yIHRoZSB0aW1lciBibG9jaw0KICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRC4NCiAqIEByZXR1cm4gTm9uLXplcm8gaWYgY2xrIHJlcXVpcmVkLCBlbHNlIDANCiAqLw0KdWludDMyX3QgYnRpbWVyX2Nsa19yZXFkX3N0c19nZXQodWludDhfdCBidGltZXJfaWQpOw0KDQovKiogRW5hYmxlL0Rpc2FibGUgcmVzZXQgb24gc2xlZXAgZm9yIHRoZSB0aW1lciBibG9jayANCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQuDQogKiBAcGFyYW0gcmVzZXRfZW4gMSB0byBlbmFibGUsIDAgdG8gZGlzYWJsZQ0KICovDQp2b2lkIGJ0aW1lcl9yZXNldF9vbl9zbGVlcCh1aW50OF90IGJ0aW1lcl9pZCwgdWludDhfdCByZXNldF9lbik7DQoNCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi8qIFBlcmlwaGVyYWwgRnVuY3Rpb24gLSBGdW5jdGlvbnMgdG8gc2V0IGFuZCByZWFkIFRpbWVyIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi8qKiBTZXRzIHRpbWVyIGNvdW50ZXINCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQNCiAqIEBwYXJhbSBjb3VudAktIDMyLWJpdCBjb3VudGVyICANCiAqLw0Kdm9pZCBwX2J0aW1lcl9jb3VudF9zZXQodWludDhfdCBidGltZXJfaWQsIHVpbnQzMl90IGNvdW50KTsNCg0KLyoqIFJlYWQgdGhlIHRpbWVyIGNvdW50ZXINCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQNCiAqIEByZXR1cm4gY291bnQJLSAzMi1iaXQgY291bnRlciAgDQogKi8NCnVpbnQzMl90IHBfYnRpbWVyX2NvdW50X2dldCh1aW50OF90IGJ0aW1lcl9pZCk7DQoNCg0KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLyogUGVyaXBoZXJhbCBGdW5jdGlvbiAtIEZ1bmN0aW9uIHRvIHByb2dyYW0gdGhlIFByZWxvYWQgICAgICAgICAgICAgICAgICAqLw0KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLyoqIFNldHMgcHJlbG9hZCBmb3IgdGhlIGNvdW50ZXINCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQNCiAqIEBwYXJhbSBwcmVsb2FkX2NvdW50CS0gMzItYml0IHByZS1sb2FkIHZhbHVlIA0KICovDQp2b2lkIHBfYnRpbWVyX3ByZWxvYWRfc2V0KHVpbnQ4X3QgYnRpbWVyX2lkLCB1aW50MzJfdCBwcmVsb2FkX2NvdW50KTsNCg0KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLyogUGVyaXBoZXJhbCBGdW5jdGlvbnMgLSBGdW5jdGlvbnMgZm9yIGJhc2ljIHRpbWVyIGludGVycnVwdHMgICAgICAgICAgICAqLw0KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLyoqIFJlYWRzIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIGJpdCBpbiB0aGUgdGltZXIgYmxvY2sNCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQgDQogKiBAcmV0dXJuIHN0YXR1cyAtIDEgaWYgaW50ZXJydXB0IHN0YXR1cyBzZXQsIGVsc2UgMA0KICovDQp1aW50OF90IHBfYnRpbWVyX2ludF9zdGF0dXNfZ2V0KHVpbnQ4X3QgYnRpbWVyX2lkKTsNCg0KLyoqIENsZWFycyBpbnRlcnJ1cHQgc3RhdHVzIGJpdCBpbiB0aGUgdGltZXIgYmxvY2sNCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQgDQogKi8NCnZvaWQgcF9idGltZXJfaW50X3N0YXR1c19jbHIodWludDhfdCBidGltZXJfaWQpOw0KDQovKiogU2V0cyBpbnRlcnJ1cHQgZW5hYmxlIGJpdCBpbiB0aGUgdGltZXIgYmxvY2sNCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQgIA0KICovDQp2b2lkIHBfYnRpbWVyX2ludF9lbmFibGVfc2V0KHVpbnQ4X3QgYnRpbWVyX2lkKTsNCg0KLyoqIENsZWFycyBpbnRlcnJ1cHQgZW5hYmxlIGJpdCBmb3IgdGhlIHRpbWVyIGJsb2NrDQogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElEICANCiAqLw0Kdm9pZCBwX2J0aW1lcl9pbnRfZW5hYmxlX2Nscih1aW50OF90IGJ0aW1lcl9pZCk7DQoNCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi8qIFBlcmlwaGVyYWwgRnVuY3Rpb25zIC0gRnVuY3Rpb25zIGZvciBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgKi8NCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi8qKiBXcml0ZXMgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgMzItYml0cw0KICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRA0KICogQHBhcmFtIHZhbHVlCS0gMzItYml0IHZhbHVlIHRvIHByb2dyYW0NCiAqLw0Kdm9pZCBwX2J0aW1lcl9jdHJsX3dyaXRlKHVpbnQ4X3QgYnRpbWVyX2lkLCB1aW50MzJfdCB2YWx1ZSk7DQoNCi8qKiBSZWFkcyB0aGUgY29udHJvbCByZWdpc3RlciANCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQNCiAqIEByZXR1cm4gdWludDMyX3QJLSAzMi1iaXQgdmFsdWUNCiAqLw0KdWludDMyX3QgcF9idGltZXJfY3RybF9yZWFkKHVpbnQ4X3QgYnRpbWVyX2lkKTsNCg0KLyoqIENsZWFycyBlbmFibGUgYml0IGluIHRoZSBjb250cm9sIHJlZ2lzdGVyDQogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElEDQogKi8NCnZvaWQgcF9idGltZXJfY3RybF9lbmFibGVfc2V0KHVpbnQ4X3QgYnRpbWVyX2lkKTsNCg0KLyoqIENsZWFycyBlbmFibGUgYml0IGluIHRoZSBjb250cm9sIHJlZ2lzdGVyDQogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElEDQogKi8NCnZvaWQgcF9idGltZXJfY3RybF9lbmFibGVfY2xyKHVpbnQ4X3QgYnRpbWVyX2lkKTsNCg0KLyoqIFNldHMgY291bnRlciBkaXJlY3Rpb24gYml0IGluIHRoZSBjb250cm9sIHJlZ2lzdGVyDQogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElEDQogKi8NCnZvaWQgcF9idGltZXJfY3RybF9jb3VudGVyX2Rpcl9zZXQodWludDhfdCBidGltZXJfaWQpOw0KDQovKiogQ2xlYXJzIGNvdW50ZXIgZGlyZWN0aW9uIGJpdCBpbiB0aGUgY29udHJvbCByZWdpc3Rlcg0KICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRA0KICovDQp2b2lkIHBfYnRpbWVyX2N0cmxfY291bnRlcl9kaXJfY2xyKHVpbnQ4X3QgYnRpbWVyX2lkKTsNCg0KLyoqIFNldHMgYXV0byByZXN0YXJ0IGJpdCBpbiB0aGUgY29udHJvbCByZWdpc3Rlcg0KICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRA0KICovDQp2b2lkIHBfYnRpbWVyX2N0cmxfYXV0b19yZXN0YXJ0X3NldCh1aW50OF90IGJ0aW1lcl9pZCk7DQoNCi8qKiBDbGVhcnMgYXV0byByZXNldGFydCBiaXQgaW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXINCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQNCiAqLw0Kdm9pZCBwX2J0aW1lcl9jdHJsX2F1dG9fcmVzdGFydF9jbHIodWludDhfdCBidGltZXJfaWQpOw0KDQovKiogU2V0cyBzb2Z0IHJlc2V0IGJpdCBpbiB0aGUgY29udHJvbCByZWdpc3Rlcg0KICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRCANCiAqLw0Kdm9pZCBwX2J0aW1lcl9jdHJsX3NvZnRfcmVzZXRfc2V0KHVpbnQ4X3QgYnRpbWVyX2lkKTsNCg0KLyoqIFJlYWQgU29mdCBSZXNldCBiaXQgDQogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElEDQogKiBAcmV0dXJuIDAgaWYgc29mdCByZXNldCBzdGF0dXMgYml0IGNsZWFyZWQ7IGVsc2Ugbm9uLXplcm8gdmFsdWUNCiAqLw0KdWludDhfdCBwX2J0aW1lcl9jdHJsX3NvZnRfcmVzZXRfc3RzX2dldCh1aW50OF90IGJ0aW1lcl9pZCk7DQoNCi8qKiBTZXRzIHN0YXJ0IGJpdCBpbiB0aGUgY29udHJvbCByZWdpc3Rlcg0KICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRCANCiAqLw0Kdm9pZCBwX2J0aW1lcl9jdHJsX3N0YXJ0X3NldCh1aW50OF90IGJ0aW1lcl9pZCk7DQoNCi8qKiBSZWFkIHN0YXJ0IGJpdCBpbiB0aGUgY29udHJvbCByZWdpc3Rlcg0KICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRCANCiAqIEByZXR1cm4gMCBpZiBzdGFydCBiaXQgbm90IHNldDsgZWxzZSBub24temVybyB2YWx1ZQ0KICovDQp1aW50OF90IHBfYnRpbWVyX2N0cmxfc3RhcnRfZ2V0KHVpbnQ4X3QgYnRpbWVyX2lkKTsNCg0KLyoqIENsZWFycyBzdGFydCBiaXQgaW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXINCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQgDQogKi8NCnZvaWQgcF9idGltZXJfY3RybF9zdGFydF9jbHIodWludDhfdCBidGltZXJfaWQpOw0KDQovKiogU2V0cyByZWxvYWQgYml0IGluIHRoZSBjb250cm9sIHJlZ2lzdGVyDQogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElEIA0KICovDQp2b2lkIHBfYnRpbWVyX2N0cmxfcmVsb2FkX3NldCh1aW50OF90IGJ0aW1lcl9pZCk7DQoNCi8qKiBDbGVhcnMgcmVsb2FkIGJpdCBpbiB0aGUgY29udHJvbCByZWdpc3Rlcg0KICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRCANCiAqLw0Kdm9pZCBwX2J0aW1lcl9jdHJsX3JlbG9hZF9jbHIodWludDhfdCBidGltZXJfaWQpOw0KDQovKiogU2V0cyBoYWx0IGJpdCBpbiB0aGUgY29udHJvbCByZWdpc3Rlcg0KICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRCANCiAqLw0Kdm9pZCBwX2J0aW1lcl9jdHJsX2hhbHRfc2V0KHVpbnQ4X3QgYnRpbWVyX2lkKTsNCg0KLyoqIENsZWFycyBoYWx0IGJpdCBpbiB0aGUgY29udHJvbCByZWdpc3Rlcg0KICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRCANCiAqLw0KDQp2b2lkIHBfYnRpbWVyX2N0cmxfaGFsdF9jbHIodWludDhfdCBidGltZXJfaWQpOw0KDQovKiogU2V0cyBwcmVzY2FsZSB2YWx1ZQ0KICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRA0KICogQHBhcmFtIHByZXNjYWxlcgktIDE2LWJpdCBwcmUtc2NhbGUgdmFsdWUgDQogKi8NCnZvaWQgcF9idGltZXJfY3RybF9wcmVzY2FsZV9zZXQodWludDhfdCBidGltZXJfaWQsIHVpbnQxNl90IHByZXNjYWxlcik7DQoNCg0KI2VuZGlmIC8vICNpZm5kZWYgX0JUSU1FUl9IDQoNCi8qIGVuZCBidGltZXJfcGVycGhsLmMgKi8NCg0KLyoqICAgQH0gLy9QZXJpcGhlcmFscyBCYXNpY19UaW1lcg0KICovDQoNCg==