From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id C893221CFA5E2 for ; Wed, 16 Aug 2017 08:39:12 -0700 (PDT) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga104.jf.intel.com with ESMTP; 16 Aug 2017 08:41:38 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.41,383,1498546800"; d="scan'208";a="890648741" Received: from orsmsx109.amr.corp.intel.com ([10.22.240.7]) by FMSMGA003.fm.intel.com with ESMTP; 16 Aug 2017 08:41:38 -0700 Received: from orsmsx161.amr.corp.intel.com (10.22.240.84) by ORSMSX109.amr.corp.intel.com (10.22.240.7) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 16 Aug 2017 08:41:37 -0700 Received: from orsmsx113.amr.corp.intel.com ([169.254.9.211]) by ORSMSX161.amr.corp.intel.com ([169.254.4.88]) with mapi id 14.03.0319.002; Wed, 16 Aug 2017 08:41:37 -0700 From: "Kinney, Michael D" To: Laszlo Ersek , "Gao, Liming" , "Kinney, Michael D" CC: edk2-devel-01 Thread-Topic: TimerTickDiffLib for MdePkg? Thread-Index: AQHTFoUxj2UBpXY6k0mvy6tYBmPbnqKHHtTw Date: Wed, 16 Aug 2017 15:41:37 +0000 Message-ID: References: <8cba2a58-1333-7733-031d-0883dbd844c6@redhat.com> In-Reply-To: <8cba2a58-1333-7733-031d-0883dbd844c6@redhat.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 10.0.102.7 dlp-reaction: no-action x-originating-ip: [10.22.254.140] MIME-Version: 1.0 Subject: Re: TimerTickDiffLib for MdePkg? X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 16 Aug 2017 15:39:13 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 TGFzemxvLA0KDQpUaGUgVGltZXJMaWIgYWxyZWFkeSBoYXMgdGhlIGZvbGxvd2luZyBBUEkuDQoN Ci8qKg0KICBDb252ZXJ0cyBlbGFwc2VkIHRpY2tzIG9mIHBlcmZvcm1hbmNlIGNvdW50ZXIgdG8g dGltZSBpbiBuYW5vc2Vjb25kcy4NCg0KICBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBlbGFw c2VkIHRpY2tzIG9mIHJ1bm5pbmcgcGVyZm9ybWFuY2UgY291bnRlciB0bw0KICB0aW1lIHZhbHVl IGluIHVuaXQgb2YgbmFub3NlY29uZHMuDQoNCiAgQHBhcmFtICBUaWNrcyAgICAgVGhlIG51bWJl ciBvZiBlbGFwc2VkIHRpY2tzIG9mIHJ1bm5pbmcgcGVyZm9ybWFuY2UgY291bnRlci4NCg0KICBA cmV0dXJuIFRoZSBlbGFwc2VkIHRpbWUgaW4gbmFub3NlY29uZHMuDQoNCioqLw0KVUlOVDY0DQpF RklBUEkNCkdldFRpbWVJbk5hbm9TZWNvbmQgKA0KICBJTiAgICAgIFVJTlQ2NCAgICAgICAgICAg ICAgICAgICAgIFRpY2tzDQogICk7DQoNCkkgdGhpbmsgYSBjb3VwbGUgbWFjcm9zIG9uIHRvcCBv ZiB0aGlzIEFQSSBjb3VsZCBwcm92aWRlIHRoZSBtaWNyb3NlY29uZA0KYW5kIG1pbGxpc2Vjb25k IHVuaXRzLg0KDQpNaWtlDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTog TGFzemxvIEVyc2VrIFttYWlsdG86bGVyc2VrQHJlZGhhdC5jb21dDQo+IFNlbnQ6IFdlZG5lc2Rh eSwgQXVndXN0IDE2LCAyMDE3IDQ6NDYgQU0NCj4gVG86IEtpbm5leSwgTWljaGFlbCBEIDxtaWNo YWVsLmQua2lubmV5QGludGVsLmNvbT47IEdhbywgTGltaW5nDQo+IDxsaW1pbmcuZ2FvQGludGVs LmNvbT4NCj4gQ2M6IGVkazItZGV2ZWwtMDEgPGVkazItZGV2ZWxAbGlzdHMuMDEub3JnPg0KPiBT dWJqZWN0OiBUaW1lclRpY2tEaWZmTGliIGZvciBNZGVQa2c/DQo+IA0KPiBIaSwNCj4gDQo+IGVk azIgY29kZSBmcmVxdWVudGx5IG5lZWRzIHRvIGNhbGN1bGF0ZSBhIHRpbWUgZGlmZmVyZW5jZSAo aW4NCj4gbmFuby0sDQo+IG1pY3JvLSwgb3IgbWlsbGlzZWNvbmRzKSBiZXR3ZWVuIHR3byB0aW1l ciB0aWNrIHZhbHVlcyByZXRyaWV2ZWQNCj4gd2l0aA0KPiBUaW1lckxpYidzIEdldFBlcmZvcm1h bmNlQ291bnRlcigpIGNhbGwuIEZvciBwZXJmb3JtYW5jZQ0KPiBtZWFzdXJlbWVudHMsDQo+IFBF UkZfU1RBUlQoKSBhbmQgZnJpZW5kcyBjYW4gYmUgdXNlZCwgYnV0IGluIG1hbnkgY29udGV4dHMg dGhlDQo+IHRpbWUNCj4gZGlmZmVyZW5jZSBpcyBuZWVkZWQgZm9yIGxvd2VyLWxldmVsIHJlYXNv bnMuDQo+IA0KPiBTdWNoIHVzZXJzIGNhbiBiZSBlbnVtZXJhdGVkIGJ5IGdyZXBwaW5nIGZvcg0K PiBHZXRQZXJmb3JtYW5jZUNvdW50ZXJQcm9wZXJ0aWVzKCkgY2FsbCBzaXRlcyB0aGF0IHBhc3Mg aW4gbm9uLQ0KPiBOVUxMDQo+IHBhcmFtZXRlcnMgLS0gdGhpcyBpcyBuZWVkZWQgZm9yIGludGVy cHJldGluZyB3cmFwLWFyb3VuZHMgaW4NCj4gdGljaw0KPiB2YWx1ZXMgKGRpcmVjdGlvbiBhbmQg Ym91bmRhcmllcykuIEknbSBzZWVpbmcgYSB3aG9sZSBsb3Qgb2YNCj4gc3VjaCBjYWxsDQo+IHNp dGVzLiAoQW5kIHNvbWUgY2FsbCBzaXRlcyBkb24ndCBoYW5kbGUgYm90aCBkaXJlY3Rpb25zIG9m DQo+IGNvdW50aW5nLikNCj4gDQo+IEkndmUgd3JpdHRlbiBhIHZlcnkgc21hbGwgbGlicmFyeSBm b3IgY2VudHJhbGl6aW5nIHRoaXMuIFdoaWxlDQo+IEknbSBub3QNCj4gc3VnZ2VzdGluZyB0aGF0 IGV4aXN0ZW50IGNvZGUgYmUgcmViYXNlZCAoYWx0aG91Z2ggSSdtIGFsc28gbm90DQo+IGFkdmlz aW5nDQo+IGFnYWluc3QgaXQpLCBJIHRoaW5rIHRoaXMgbGlicmFyeSB3b3VsZCBiZSBjb252ZW5p ZW50IGZvciBuZXcNCj4gY29kZS4NCj4gDQo+IEkgZG9uJ3QgdGhpbmsgVGltZXJMaWIgc2hvdWxk IGJlIGV4dGVuZGVkIHdpdGggdGhlIG5ldw0KPiAoc3VnZ2VzdGVkKSBBUElzLg0KPiBUaGVyZSdz IGEgaHVnZSBudW1iZXIgb2YgVGltZXJMaWIgaW5zdGFuY2VzICgyMSBpbiBteSBjb3VudCksDQo+ IGFuZA0KPiByZXBsaWNhdGluZyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIG5ldyBBUElzIC0t IHdoaWNoIGFyZQ0KPiB0b3RhbGx5DQo+IHBsYXRmb3JtIGluZGVwZW5kZW50IC0tIHdvdWxkIGRl ZmVhdCB0aGUgd2hvbGUgZXhlcmNpc2UgKHdoaWNoDQo+IGlzIHRvDQo+IHByZXZlbnQgY29kZSBk dXBsaWNhdGlvbikuDQo+IA0KPiBUaGUgbGlicmFyeSBpcyBjdXJyZW50bHkgZm9yIE92bWZQa2cg b25seSAoaW4gbXkgbG9jYWwgdHJlZSkuDQo+IEknbQ0KPiBwYXN0aW5nIHRoZSBwYXRjaCBiZWxv dy4gSWYgdGhlcmUgaXMgaW50ZXJlc3QsIEkgY291bGQgcmV3b3JrIGl0DQo+IGZvcg0KPiBNZGVQ a2cuDQo+IA0KPiBUaGFua3MNCj4gTGFzemxvDQo+IA0KPiA+IGNvbW1pdCBmMTk2M2M3YjE3MDVj N2U0NmNlMzY5ODAyZDhjMTVmOTQzYTExNGQ2DQo+ID4gQXV0aG9yOiBMYXN6bG8gRXJzZWsgPGxl cnNla0ByZWRoYXQuY29tPg0KPiA+IERhdGU6ICAgVHVlIEF1ZyA4IDIyOjQ2OjQ3IDIwMTcgKzAy MDANCj4gPg0KPiA+ICAgICBPdm1mUGtnOiBhZGQgVGltZXJUaWNrRGlmZkxpYg0KPiA+DQo+ID4g ICAgIENvbnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9uIEFncmVlbWVudCAx LjENCj4gPiAgICAgU2lnbmVkLW9mZi1ieTogTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNv bT4NCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9Pdm1mUGtnL092bWZQa2cuZGVjIGIvT3ZtZlBrZy9P dm1mUGtnLmRlYw0KPiA+IGluZGV4IDZhNGMxNWM3OTE3YS4uNTNhMGEzNGQzMjZkIDEwMDY0NA0K PiA+IC0tLSBhL092bWZQa2cvT3ZtZlBrZy5kZWMNCj4gPiArKysgYi9Pdm1mUGtnL092bWZQa2cu ZGVjDQo+ID4gQEAgLTYwLDYgKzYwLDEwIEBAIFtMaWJyYXJ5Q2xhc3Nlc10NCj4gPiAgICAjDQo+ ID4gICAgSGV4RHVtcExpYnxJbmNsdWRlL0xpYnJhcnkvSGV4RHVtcExpYi5oDQo+ID4NCj4gPiAr ICAjIyAgQGxpYnJhcnljbGFzcyAgVGltZXIgdGljayBkaWZmZXJlbmNlIGZ1bmN0aW9ucywgdG8g YmUNCj4gdXNlZCB3aXRoIFRpbWVyTGliLg0KPiA+ICsgICMNCj4gPiArICBUaW1lclRpY2tEaWZm TGlifEluY2x1ZGUvTGlicmFyeS9UaW1lclRpY2tEaWZmTGliLmgNCj4gPiArDQo+ID4gIFtHdWlk c10NCj4gPiAgICBnVWVmaU92bWZQa2dUb2tlblNwYWNlR3VpZCAgICAgICAgICA9IHsweDkzYmI5 NmFmLCAweGI5ZjIsDQo+IDB4NGViOCwgezB4OTQsIDB4NjIsIDB4ZTAsIDB4YmEsIDB4NzQsIDB4 NTYsIDB4NDIsIDB4MzZ9fQ0KPiA+ICAgIGdFZmlYZW5JbmZvR3VpZCAgICAgICAgICAgICAgICAg ICAgID0gezB4ZDNiNDZmM2IsIDB4ZDQ0MSwNCj4gMHgxMjQ0LCB7MHg5YSwgMHgxMiwgMHgwLCAw eDEyLCAweDI3LCAweDNmLCAweGMxLCAweDRkfX0NCj4gPiBkaWZmIC0tZ2l0IGEvT3ZtZlBrZy9P dm1mUGtnSWEzMi5kc2MgYi9Pdm1mUGtnL092bWZQa2dJYTMyLmRzYw0KPiA+IGluZGV4IDViMDQ2 MWZmNDZiMS4uMTdmMWRiNDNmNTdkIDEwMDY0NA0KPiA+IC0tLSBhL092bWZQa2cvT3ZtZlBrZ0lh MzIuZHNjDQo+ID4gKysrIGIvT3ZtZlBrZy9Pdm1mUGtnSWEzMi5kc2MNCj4gPiBAQCAtOTcsNiAr OTcsNyBAQCBbU2t1SWRzXQ0KPiA+ICAjDQo+ID4NCj4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KPiAjIyMjIyMjIyMjIyMj IyMjDQo+ID4gIFtMaWJyYXJ5Q2xhc3Nlc10NCj4gPiArDQo+IFRpbWVyVGlja0RpZmZMaWJ8T3Zt ZlBrZy9MaWJyYXJ5L1RpbWVyVGlja0RpZmZMaWIvVGltZXJUaWNrRGlmZkwNCj4gaWIuaW5mDQo+ ID4gICAgSGV4RHVtcExpYnxPdm1mUGtnL0xpYnJhcnkvSGV4RHVtcExpYi9IZXhEdW1wTGliLmlu Zg0KPiA+ICAgIFBjZExpYnxNZGVQa2cvTGlicmFyeS9CYXNlUGNkTGliTnVsbC9CYXNlUGNkTGli TnVsbC5pbmYNCj4gPiAgICBUaW1lckxpYnxPdm1mUGtnL0xpYnJhcnkvQWNwaVRpbWVyTGliL0Jh c2VBY3BpVGltZXJMaWIuaW5mDQo+ID4gZGlmZiAtLWdpdCBhL092bWZQa2cvT3ZtZlBrZ0lhMzJY NjQuZHNjDQo+IGIvT3ZtZlBrZy9Pdm1mUGtnSWEzMlg2NC5kc2MNCj4gPiBpbmRleCAwY2UzY2Jk M2ViZDAuLjkyNGUxNzgyNDc2MCAxMDA2NDQNCj4gPiAtLS0gYS9Pdm1mUGtnL092bWZQa2dJYTMy WDY0LmRzYw0KPiA+ICsrKyBiL092bWZQa2cvT3ZtZlBrZ0lhMzJYNjQuZHNjDQo+ID4gQEAgLTEw Miw2ICsxMDIsNyBAQCBbU2t1SWRzXQ0KPiA+ICAjDQo+ID4NCj4gIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KPiAjIyMjIyMj IyMjIyMjIyMjDQo+ID4gIFtMaWJyYXJ5Q2xhc3Nlc10NCj4gPiArDQo+IFRpbWVyVGlja0RpZmZM aWJ8T3ZtZlBrZy9MaWJyYXJ5L1RpbWVyVGlja0RpZmZMaWIvVGltZXJUaWNrRGlmZkwNCj4gaWIu aW5mDQo+ID4gICAgSGV4RHVtcExpYnxPdm1mUGtnL0xpYnJhcnkvSGV4RHVtcExpYi9IZXhEdW1w TGliLmluZg0KPiA+ICAgIFBjZExpYnxNZGVQa2cvTGlicmFyeS9CYXNlUGNkTGliTnVsbC9CYXNl UGNkTGliTnVsbC5pbmYNCj4gPiAgICBUaW1lckxpYnxPdm1mUGtnL0xpYnJhcnkvQWNwaVRpbWVy TGliL0Jhc2VBY3BpVGltZXJMaWIuaW5mDQo+ID4gZGlmZiAtLWdpdCBhL092bWZQa2cvT3ZtZlBr Z1g2NC5kc2MgYi9Pdm1mUGtnL092bWZQa2dYNjQuZHNjDQo+ID4gaW5kZXggZTdiZGY4NzExYjBm Li5kMjIzODRhMjY3NjggMTAwNjQ0DQo+ID4gLS0tIGEvT3ZtZlBrZy9Pdm1mUGtnWDY0LmRzYw0K PiA+ICsrKyBiL092bWZQa2cvT3ZtZlBrZ1g2NC5kc2MNCj4gPiBAQCAtMTAyLDYgKzEwMiw3IEBA IFtTa3VJZHNdDQo+ID4gICMNCj4gPg0KPiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQo+ICMjIyMjIyMjIyMjIyMjIyMNCj4g PiAgW0xpYnJhcnlDbGFzc2VzXQ0KPiA+ICsNCj4gVGltZXJUaWNrRGlmZkxpYnxPdm1mUGtnL0xp YnJhcnkvVGltZXJUaWNrRGlmZkxpYi9UaW1lclRpY2tEaWZmTA0KPiBpYi5pbmYNCj4gPiAgICBI ZXhEdW1wTGlifE92bWZQa2cvTGlicmFyeS9IZXhEdW1wTGliL0hleER1bXBMaWIuaW5mDQo+ID4g ICAgUGNkTGlifE1kZVBrZy9MaWJyYXJ5L0Jhc2VQY2RMaWJOdWxsL0Jhc2VQY2RMaWJOdWxsLmlu Zg0KPiA+ICAgIFRpbWVyTGlifE92bWZQa2cvTGlicmFyeS9BY3BpVGltZXJMaWIvQmFzZUFjcGlU aW1lckxpYi5pbmYNCj4gPiBkaWZmIC0tZ2l0DQo+IGEvT3ZtZlBrZy9MaWJyYXJ5L1RpbWVyVGlj a0RpZmZMaWIvVGltZXJUaWNrRGlmZkxpYi5pbmYNCj4gYi9Pdm1mUGtnL0xpYnJhcnkvVGltZXJU aWNrRGlmZkxpYi9UaW1lclRpY2tEaWZmTGliLmluZg0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi40ZDQ2NDU2NWViMmYNCj4gPiAtLS0gL2Rldi9udWxs DQo+ID4gKysrIGIvT3ZtZlBrZy9MaWJyYXJ5L1RpbWVyVGlja0RpZmZMaWIvVGltZXJUaWNrRGlm ZkxpYi5pbmYNCj4gPiBAQCAtMCwwICsxLDMxIEBADQo+ID4gKyMjIEBmaWxlDQo+ID4gKyMgVGlt ZXIgdGljayBkaWZmZXJlbmNlIGZ1bmN0aW9ucywgdG8gYmUgdXNlZCB3aXRoIFRpbWVyTGliLg0K PiA+ICsjDQo+ID4gKyMgQ29weXJpZ2h0IChDKSAyMDE3LCBSZWQgSGF0LCBJbmMuDQo+ID4gKyMN Cj4gPiArIyBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBs aWNlbnNlZA0KPiBhbmQgbWFkZSBhdmFpbGFibGUNCj4gPiArIyB1bmRlciB0aGUgdGVybXMgYW5k IGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlIHdoaWNoDQo+IGFjY29tcGFuaWVzIHRoaXMN Cj4gPiArIyBkaXN0cmlidXRpb24uIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJl IGZvdW5kIGF0DQo+ID4gKyMgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNl bnNlLnBocA0KPiA+ICsjDQo+ID4gKyMgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIg VEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUw0KPiBJUyIgQkFTSVMsIFdJVEhPVVQNCj4gPiArIyBX QVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MN Cj4gT1IgSU1QTElFRC4NCj4gPiArIyMNCj4gPiArDQo+ID4gK1tEZWZpbmVzXQ0KPiA+ICsgIElO Rl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICA9IDEuMjYNCj4gPiArICBCQVNFX05BTUUgICAg ICAgICAgICAgICAgICAgICAgPSBUaW1lclRpY2tEaWZmTGliDQo+ID4gKyAgRklMRV9HVUlEICAg ICAgICAgICAgICAgICAgICAgID0gRjE5OThBRUQtOTM0Ri00Qzk2LUFFRkItDQo+IDI5QzM5RkE2 MjQzNA0KPiA+ICsgIE1PRFVMRV9UWVBFICAgICAgICAgICAgICAgICAgICA9IEJBU0UNCj4gPiAr ICBWRVJTSU9OX1NUUklORyAgICAgICAgICAgICAgICAgPSAxLjANCj4gPiArICBMSUJSQVJZX0NM QVNTICAgICAgICAgICAgICAgICAgPSBUaW1lclRpY2tEaWZmTGliDQo+ID4gKw0KPiA+ICtbU291 cmNlc10NCj4gPiArICBUaW1lclRpY2tEaWZmTGliLmMNCj4gPiArDQo+ID4gK1tQYWNrYWdlc10N Cj4gPiArICBNZGVQa2cvTWRlUGtnLmRlYw0KPiA+ICsNCj4gPiArW0xpYnJhcnlDbGFzc2VzXQ0K PiA+ICsgIEJhc2VMaWINCj4gPiArICBUaW1lckxpYg0KPiA+IGRpZmYgLS1naXQgYS9Pdm1mUGtn L0luY2x1ZGUvTGlicmFyeS9UaW1lclRpY2tEaWZmTGliLmgNCj4gYi9Pdm1mUGtnL0luY2x1ZGUv TGlicmFyeS9UaW1lclRpY2tEaWZmTGliLmgNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ IGluZGV4IDAwMDAwMDAwMDAwMC4uNDAwNTJlMTFiNmVkDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ ICsrKyBiL092bWZQa2cvSW5jbHVkZS9MaWJyYXJ5L1RpbWVyVGlja0RpZmZMaWIuaA0KPiA+IEBA IC0wLDAgKzEsMTA5IEBADQo+ID4gKy8qKiBAZmlsZQ0KPiA+ICsgIFRpbWVyIHRpY2sgZGlmZmVy ZW5jZSBmdW5jdGlvbnMsIHRvIGJlIHVzZWQgd2l0aCBUaW1lckxpYi4NCj4gPiArDQo+ID4gKyAg Q29weXJpZ2h0IChDKSAyMDE3LCBSZWQgSGF0LCBJbmMuDQo+ID4gKw0KPiA+ICsgIFRoaXMgcHJv Z3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIGxpY2Vuc2VkDQo+IGFuZCBt YWRlIGF2YWlsYWJsZQ0KPiA+ICsgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0 aGUgQlNEIExpY2Vuc2Ugd2hpY2gNCj4gYWNjb21wYW5pZXMgdGhpcw0KPiA+ICsgIGRpc3RyaWJ1 dGlvbi4gVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUgZm91bmQgYXQNCj4gPiAr ICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ID4gKw0K PiA+ICsgIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBP TiBBTiAiQVMNCj4gSVMiIEJBU0lTLCBXSVRIT1VUDQo+ID4gKyAgV0FSUkFOVElFUyBPUiBSRVBS RVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTDQo+IE9SIElNUExJRUQuDQo+ ID4gKyoqLw0KPiA+ICsNCj4gPiArI2lmbmRlZiBfX1RJTUVSX1RJQ0tfRElGRl9MSUJfSF9fDQo+ ID4gKyNkZWZpbmUgX19USU1FUl9USUNLX0RJRkZfTElCX0hfXw0KPiA+ICsNCj4gPiArI2luY2x1 ZGUgPEJhc2UuaD4NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEZyb20gdHdvIHZhbHVlcyByZXRy aWV2ZWQgd2l0aCBUaW1lckxpYidzDQo+IEdldFBlcmZvcm1hbmNlQ291bnRlcigpLCBjYWxjdWxh dGUNCj4gPiArICB0aGUgbnVtYmVyIG9mIHRpY2tzIGVsYXBzZWQgYmV0d2VlbiB0aGVtLCBzdWNo IHRoYXQgdGhlDQo+IGRpZmZlcmVuY2UgY2FuIGJlDQo+ID4gKyAgcGFzc2VkIHRvIFRpbWVyTGli J3MgR2V0VGltZUluTmFub1NlY29uZCgpLg0KPiA+ICsNCj4gPiArICBUaGUgZnVuY3Rpb24gY2Fu bm90IGhhbmRsZSBtdWx0aXBsZSB3cmFwLWFyb3VuZHMgb2YgdGhlDQo+IHBlcmZvcm1hbmNlIGNv dW50ZXIuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gUGVyZkNvdW50ZXJTdGFydCAgVGhlIHZh bHVlIHJldHVybmVkIGJ5DQo+IEdldFBlcmZvcm1hbmNlQ291bnRlcigpLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVkIGVhcmxpZXIgaW4gd2FsbCBjbG9jaw0KPiB0 aW1lLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dIFBlcmZDb3VudGVyU3RvcCAgIFRoZSB2YWx1 ZSByZXR1cm5lZCBieQ0KPiBHZXRQZXJmb3JtYW5jZUNvdW50ZXIoKSwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNhbGxlZCBsYXRlciBpbiB3YWxsIGNsb2NrDQo+IHRpbWUu DQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgIFRoZSBudW1iZXIgb2YgdGlja3MgY29ycmVzcG9uZGlu ZyB0byB0aGUNCj4gY29uY2VwdHVhbCBkaWZmZXJlbmNlDQo+ID4gKyAgICAgICAgICAgKFBlcmZD b3VudGVyU3RvcC1QZXJmQ291bnRlclN0YXJ0KS4NCj4gPiArKiovDQo+ID4gK1VJTlQ2NA0KPiA+ ICtFRklBUEkNCj4gPiArR2V0VGlja0RpZmZlcmVuY2UgKA0KPiA+ICsgIElOIFVJTlQ2NCBQZXJm Q291bnRlclN0YXJ0LA0KPiA+ICsgIElOIFVJTlQ2NCBQZXJmQ291bnRlclN0b3ANCj4gPiArICAp Ow0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgRnJvbSB0d28gdmFsdWVzIHJldHJpZXZlZCB3aXRo IFRpbWVyTGliJ3MNCj4gR2V0UGVyZm9ybWFuY2VDb3VudGVyKCksIGNhbGN1bGF0ZQ0KPiA+ICsg IHRoZSBudW1iZXIgb2YgbmFub3NlY29uZHMgZWxhcHNlZCBiZXR3ZWVuIHRoZW0uDQo+ID4gKw0K PiA+ICsgIFRoZSBmdW5jdGlvbiBjYW5ub3QgaGFuZGxlIG11bHRpcGxlIHdyYXAtYXJvdW5kcyBv ZiB0aGUNCj4gcGVyZm9ybWFuY2UgY291bnRlci4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSBQ ZXJmQ291bnRlclN0YXJ0ICBUaGUgdmFsdWUgcmV0dXJuZWQgYnkNCj4gR2V0UGVyZm9ybWFuY2VD b3VudGVyKCksDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsZWQgZWFy bGllciBpbiB3YWxsIGNsb2NrDQo+IHRpbWUuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gUGVy ZkNvdW50ZXJTdG9wICAgVGhlIHZhbHVlIHJldHVybmVkIGJ5DQo+IEdldFBlcmZvcm1hbmNlQ291 bnRlcigpLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVkIGxhdGVy IGluIHdhbGwgY2xvY2sNCj4gdGltZS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCAgVGhlIG51bWJl ciBvZiBuYW5vc2Vjb25kcyBjb3JyZXNwb25kaW5nIHRvIHRoZQ0KPiBjb25jZXB0dWFsIGRpZmZl cmVuY2UNCj4gPiArICAgICAgICAgICAoUGVyZkNvdW50ZXJTdG9wLVBlcmZDb3VudGVyU3RhcnQp Lg0KPiA+ICsqKi8NCj4gPiArVUlOVDY0DQo+ID4gK0VGSUFQSQ0KPiA+ICtHZXROYW5vU2Vjb25k RGlmZmVyZW5jZSAoDQo+ID4gKyAgSU4gVUlOVDY0IFBlcmZDb3VudGVyU3RhcnQsDQo+ID4gKyAg SU4gVUlOVDY0IFBlcmZDb3VudGVyU3RvcA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICBGcm9tIHR3byB2YWx1ZXMgcmV0cmlldmVkIHdpdGggVGltZXJMaWIncw0KPiBHZXRQZXJm b3JtYW5jZUNvdW50ZXIoKSwgY2FsY3VsYXRlDQo+ID4gKyAgdGhlIG51bWJlciBvZiBtaWNyb3Nl Y29uZHMgZWxhcHNlZCBiZXR3ZWVuIHRoZW0uDQo+ID4gKw0KPiA+ICsgIFRoZSBmdW5jdGlvbiBj YW5ub3QgaGFuZGxlIG11bHRpcGxlIHdyYXAtYXJvdW5kcyBvZiB0aGUNCj4gcGVyZm9ybWFuY2Ug Y291bnRlci4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSBQZXJmQ291bnRlclN0YXJ0ICBUaGUg dmFsdWUgcmV0dXJuZWQgYnkNCj4gR2V0UGVyZm9ybWFuY2VDb3VudGVyKCksDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsZWQgZWFybGllciBpbiB3YWxsIGNsb2NrDQo+ IHRpbWUuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gUGVyZkNvdW50ZXJTdG9wICAgVGhlIHZh bHVlIHJldHVybmVkIGJ5DQo+IEdldFBlcmZvcm1hbmNlQ291bnRlcigpLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVkIGxhdGVyIGluIHdhbGwgY2xvY2sNCj4gdGlt ZS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCAgVGhlIG51bWJlciBvZiBtaWNyb3NlY29uZHMgY29y cmVzcG9uZGluZyB0byB0aGUNCj4gY29uY2VwdHVhbA0KPiA+ICsgICAgICAgICAgIGRpZmZlcmVu Y2UgKFBlcmZDb3VudGVyU3RvcC1QZXJmQ291bnRlclN0YXJ0KS4NCj4gPiArKiovDQo+ID4gK1VJ TlQ2NA0KPiA+ICtFRklBUEkNCj4gPiArR2V0TWljcm9TZWNvbmREaWZmZXJlbmNlICgNCj4gPiAr ICBJTiBVSU5UNjQgUGVyZkNvdW50ZXJTdGFydCwNCj4gPiArICBJTiBVSU5UNjQgUGVyZkNvdW50 ZXJTdG9wDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEZyb20gdHdvIHZhbHVl cyByZXRyaWV2ZWQgd2l0aCBUaW1lckxpYidzDQo+IEdldFBlcmZvcm1hbmNlQ291bnRlcigpLCBj YWxjdWxhdGUNCj4gPiArICB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBlbGFwc2VkIGJldHdl ZW4gdGhlbS4NCj4gPiArDQo+ID4gKyAgVGhlIGZ1bmN0aW9uIGNhbm5vdCBoYW5kbGUgbXVsdGlw bGUgd3JhcC1hcm91bmRzIG9mIHRoZQ0KPiBwZXJmb3JtYW5jZSBjb3VudGVyLg0KPiA+ICsNCj4g PiArICBAcGFyYW1baW5dIFBlcmZDb3VudGVyU3RhcnQgIFRoZSB2YWx1ZSByZXR1cm5lZCBieQ0K PiBHZXRQZXJmb3JtYW5jZUNvdW50ZXIoKSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNhbGxlZCBlYXJsaWVyIGluIHdhbGwgY2xvY2sNCj4gdGltZS4NCj4gPiArDQo+ID4g KyAgQHBhcmFtW2luXSBQZXJmQ291bnRlclN0b3AgICBUaGUgdmFsdWUgcmV0dXJuZWQgYnkNCj4g R2V0UGVyZm9ybWFuY2VDb3VudGVyKCksDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjYWxsZWQgbGF0ZXIgaW4gd2FsbCBjbG9jaw0KPiB0aW1lLg0KPiA+ICsNCj4gPiArICBA cmV0dmFsICBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBjb3JyZXNwb25kaW5nIHRvIHRoZQ0K PiBjb25jZXB0dWFsDQo+ID4gKyAgICAgICAgICAgZGlmZmVyZW5jZSAoUGVyZkNvdW50ZXJTdG9w LVBlcmZDb3VudGVyU3RhcnQpLg0KPiA+ICsqKi8NCj4gPiArVUlOVDY0DQo+ID4gK0VGSUFQSQ0K PiA+ICtHZXRNaWxsaVNlY29uZERpZmZlcmVuY2UgKA0KPiA+ICsgIElOIFVJTlQ2NCBQZXJmQ291 bnRlclN0YXJ0LA0KPiA+ICsgIElOIFVJTlQ2NCBQZXJmQ291bnRlclN0b3ANCj4gPiArICApOw0K PiA+ICsNCj4gPiArI2VuZGlmDQo+ID4gZGlmZiAtLWdpdA0KPiBhL092bWZQa2cvTGlicmFyeS9U aW1lclRpY2tEaWZmTGliL1RpbWVyVGlja0RpZmZMaWIuYw0KPiBiL092bWZQa2cvTGlicmFyeS9U aW1lclRpY2tEaWZmTGliL1RpbWVyVGlja0RpZmZMaWIuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi4wM2VjYWU4MjAwYWENCj4gPiAtLS0gL2Rldi9u dWxsDQo+ID4gKysrIGIvT3ZtZlBrZy9MaWJyYXJ5L1RpbWVyVGlja0RpZmZMaWIvVGltZXJUaWNr RGlmZkxpYi5jDQo+ID4gQEAgLTAsMCArMSwxNzggQEANCj4gPiArLyoqIEBmaWxlDQo+ID4gKyAg VGltZXIgdGljayBkaWZmZXJlbmNlIGZ1bmN0aW9ucywgdG8gYmUgdXNlZCB3aXRoIFRpbWVyTGli Lg0KPiA+ICsNCj4gPiArICBDb3B5cmlnaHQgKEMpIDIwMTcsIFJlZCBIYXQsIEluYy4NCj4gPiAr DQo+ID4gKyAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUg bGljZW5zZWQNCj4gYW5kIG1hZGUgYXZhaWxhYmxlDQo+ID4gKyAgdW5kZXIgdGhlIHRlcm1zIGFu ZCBjb25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZSB3aGljaA0KPiBhY2NvbXBhbmllcyB0aGlz DQo+ID4gKyAgZGlzdHJpYnV0aW9uLiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBi ZSBmb3VuZCBhdA0KPiA+ICsgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGlj ZW5zZS5waHANCj4gPiArDQo+ID4gKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIg VEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUw0KPiBJUyIgQkFTSVMsIFdJVEhPVVQNCj4gPiArICBX QVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MN Cj4gT1IgSU1QTElFRC4NCj4gPiArKiovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9C YXNlTGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1RpbWVyTGliLmg+DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICBGcm9tIHR3byB2YWx1ZXMgcmV0cmlldmVkIHdpdGggVGltZXJMaWIncw0K PiBHZXRQZXJmb3JtYW5jZUNvdW50ZXIoKSwgY2FsY3VsYXRlDQo+ID4gKyAgdGhlIG51bWJlciBv ZiB0aWNrcyBlbGFwc2VkIGJldHdlZW4gdGhlbSwgc3VjaCB0aGF0IHRoZQ0KPiBkaWZmZXJlbmNl IGNhbiBiZQ0KPiA+ICsgIHBhc3NlZCB0byBUaW1lckxpYidzIEdldFRpbWVJbk5hbm9TZWNvbmQo KS4NCj4gPiArDQo+ID4gKyAgVGhlIGZ1bmN0aW9uIGNhbm5vdCBoYW5kbGUgbXVsdGlwbGUgd3Jh cC1hcm91bmRzIG9mIHRoZQ0KPiBwZXJmb3JtYW5jZSBjb3VudGVyLg0KPiA+ICsNCj4gPiArICBA cGFyYW1baW5dIFBlcmZDb3VudGVyU3RhcnQgIFRoZSB2YWx1ZSByZXR1cm5lZCBieQ0KPiBHZXRQ ZXJmb3JtYW5jZUNvdW50ZXIoKSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNhbGxlZCBlYXJsaWVyIGluIHdhbGwgY2xvY2sNCj4gdGltZS4NCj4gPiArDQo+ID4gKyAgQHBh cmFtW2luXSBQZXJmQ291bnRlclN0b3AgICBUaGUgdmFsdWUgcmV0dXJuZWQgYnkNCj4gR2V0UGVy Zm9ybWFuY2VDb3VudGVyKCksDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj YWxsZWQgbGF0ZXIgaW4gd2FsbCBjbG9jaw0KPiB0aW1lLg0KPiA+ICsNCj4gPiArICBAcmV0dmFs ICBUaGUgbnVtYmVyIG9mIHRpY2tzIGNvcnJlc3BvbmRpbmcgdG8gdGhlDQo+IGNvbmNlcHR1YWwg ZGlmZmVyZW5jZQ0KPiA+ICsgICAgICAgICAgIChQZXJmQ291bnRlclN0b3AtUGVyZkNvdW50ZXJT dGFydCkuDQo+ID4gKyoqLw0KPiA+ICtVSU5UNjQNCj4gPiArRUZJQVBJDQo+ID4gK0dldFRpY2tE aWZmZXJlbmNlICgNCj4gPiArICBJTiBVSU5UNjQgUGVyZkNvdW50ZXJTdGFydCwNCj4gPiArICBJ TiBVSU5UNjQgUGVyZkNvdW50ZXJTdG9wDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgVUlOVDY0 IFN0YXJ0VmFsdWU7DQo+ID4gKyAgVUlOVDY0IEVuZFZhbHVlOw0KPiA+ICsgIFVJTlQ2NCBUaWNr RGlmZmVyZW5jZTsNCj4gPiArDQo+ID4gKyAgR2V0UGVyZm9ybWFuY2VDb3VudGVyUHJvcGVydGll cyAoJlN0YXJ0VmFsdWUsICZFbmRWYWx1ZSk7DQo+ID4gKw0KPiA+ICsgIGlmIChTdGFydFZhbHVl IDwgRW5kVmFsdWUpIHsNCj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBUaGUgcGVyZm9ybWFuY2Ug Y291bnRlciBjb3VudHMgdXAuDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgaWYgKFBlcmZDb3VudGVy U3RhcnQgPCBQZXJmQ291bnRlclN0b3ApIHsNCj4gPiArICAgICAgLy8NCj4gPiArICAgICAgLy8g VGhlIGNvdW50ZXIgZGlkbid0IHdyYXAgYXJvdW5kLg0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAg ICBUaWNrRGlmZmVyZW5jZSA9IFBlcmZDb3VudGVyU3RvcCAtIFBlcmZDb3VudGVyU3RhcnQ7DQo+ ID4gKyAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAgICAvLyBUaGUgY291bnRl ciB3cmFwcGVkIGFyb3VuZC4NCj4gPiArICAgICAgLy8NCj4gPiArICAgICAgVGlja0RpZmZlcmVu Y2UgPSAoRW5kVmFsdWUgLSBQZXJmQ291bnRlclN0YXJ0KSArDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgKFBlcmZDb3VudGVyU3RvcCAtIFN0YXJ0VmFsdWUpOw0KPiA+ICsgICAgfQ0KPiA+ ICsgIH0gZWxzZSB7DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8gVGhlIHBlcmZvcm1hbmNlIGNv dW50ZXIgY291bnRzIGRvd24uDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgaWYgKFBlcmZDb3VudGVy U3RhcnQgPCBQZXJmQ291bnRlclN0b3ApIHsNCj4gPiArICAgICAgLy8NCj4gPiArICAgICAgLy8g VGhlIGNvdW50ZXIgd3JhcHBlZCBhcm91bmQuDQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIFRp Y2tEaWZmZXJlbmNlID0gKFBlcmZDb3VudGVyU3RhcnQgLSBFbmRWYWx1ZSkgKw0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgIChTdGFydFZhbHVlIC0gUGVyZkNvdW50ZXJTdG9wKTsNCj4gPiAr ICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIC8vIFRoZSBjb3VudGVyIGRp ZG4ndCB3cmFwIGFyb3VuZC4NCj4gPiArICAgICAgLy8NCj4gPiArICAgICAgVGlja0RpZmZlcmVu Y2UgPSBQZXJmQ291bnRlclN0YXJ0IC0gUGVyZkNvdW50ZXJTdG9wOw0KPiA+ICsgICAgfQ0KPiA+ ICsgIH0NCj4gPiArDQo+ID4gKyAgcmV0dXJuIFRpY2tEaWZmZXJlbmNlOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICBGcm9tIHR3byB2YWx1ZXMgcmV0cmlldmVkIHdpdGggVGltZXJM aWIncw0KPiBHZXRQZXJmb3JtYW5jZUNvdW50ZXIoKSwgY2FsY3VsYXRlDQo+ID4gKyAgdGhlIG51 bWJlciBvZiBuYW5vc2Vjb25kcyBlbGFwc2VkIGJldHdlZW4gdGhlbS4NCj4gPiArDQo+ID4gKyAg VGhlIGZ1bmN0aW9uIGNhbm5vdCBoYW5kbGUgbXVsdGlwbGUgd3JhcC1hcm91bmRzIG9mIHRoZQ0K PiBwZXJmb3JtYW5jZSBjb3VudGVyLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dIFBlcmZDb3Vu dGVyU3RhcnQgIFRoZSB2YWx1ZSByZXR1cm5lZCBieQ0KPiBHZXRQZXJmb3JtYW5jZUNvdW50ZXIo KSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxlZCBlYXJsaWVyIGlu IHdhbGwgY2xvY2sNCj4gdGltZS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSBQZXJmQ291bnRl clN0b3AgICBUaGUgdmFsdWUgcmV0dXJuZWQgYnkNCj4gR2V0UGVyZm9ybWFuY2VDb3VudGVyKCks DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsZWQgbGF0ZXIgaW4gd2Fs bCBjbG9jaw0KPiB0aW1lLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsICBUaGUgbnVtYmVyIG9mIG5h bm9zZWNvbmRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlDQo+IGNvbmNlcHR1YWwgZGlmZmVyZW5jZQ0K PiA+ICsgICAgICAgICAgIChQZXJmQ291bnRlclN0b3AtUGVyZkNvdW50ZXJTdGFydCkuDQo+ID4g KyoqLw0KPiA+ICtVSU5UNjQNCj4gPiArRUZJQVBJDQo+ID4gK0dldE5hbm9TZWNvbmREaWZmZXJl bmNlICgNCj4gPiArICBJTiBVSU5UNjQgUGVyZkNvdW50ZXJTdGFydCwNCj4gPiArICBJTiBVSU5U NjQgUGVyZkNvdW50ZXJTdG9wDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgVUlOVDY0IFRpY2tE aWZmZXJlbmNlOw0KPiA+ICsgIFVJTlQ2NCBOYW5vU2Vjb25kRGlmZmVyZW5jZTsNCj4gPiArDQo+ ID4gKyAgVGlja0RpZmZlcmVuY2UgPSBHZXRUaWNrRGlmZmVyZW5jZSAoUGVyZkNvdW50ZXJTdGFy dCwNCj4gUGVyZkNvdW50ZXJTdG9wKTsNCj4gPiArICBOYW5vU2Vjb25kRGlmZmVyZW5jZSA9IEdl dFRpbWVJbk5hbm9TZWNvbmQNCj4gKFRpY2tEaWZmZXJlbmNlKTsNCj4gPiArICByZXR1cm4gTmFu b1NlY29uZERpZmZlcmVuY2U7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEZyb20g dHdvIHZhbHVlcyByZXRyaWV2ZWQgd2l0aCBUaW1lckxpYidzDQo+IEdldFBlcmZvcm1hbmNlQ291 bnRlcigpLCBjYWxjdWxhdGUNCj4gPiArICB0aGUgbnVtYmVyIG9mIG1pY3Jvc2Vjb25kcyBlbGFw c2VkIGJldHdlZW4gdGhlbS4NCj4gPiArDQo+ID4gKyAgVGhlIGZ1bmN0aW9uIGNhbm5vdCBoYW5k bGUgbXVsdGlwbGUgd3JhcC1hcm91bmRzIG9mIHRoZQ0KPiBwZXJmb3JtYW5jZSBjb3VudGVyLg0K PiA+ICsNCj4gPiArICBAcGFyYW1baW5dIFBlcmZDb3VudGVyU3RhcnQgIFRoZSB2YWx1ZSByZXR1 cm5lZCBieQ0KPiBHZXRQZXJmb3JtYW5jZUNvdW50ZXIoKSwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNhbGxlZCBlYXJsaWVyIGluIHdhbGwgY2xvY2sNCj4gdGltZS4NCj4g PiArDQo+ID4gKyAgQHBhcmFtW2luXSBQZXJmQ291bnRlclN0b3AgICBUaGUgdmFsdWUgcmV0dXJu ZWQgYnkNCj4gR2V0UGVyZm9ybWFuY2VDb3VudGVyKCksDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjYWxsZWQgbGF0ZXIgaW4gd2FsbCBjbG9jaw0KPiB0aW1lLg0KPiA+ICsN Cj4gPiArICBAcmV0dmFsICBUaGUgbnVtYmVyIG9mIG1pY3Jvc2Vjb25kcyBjb3JyZXNwb25kaW5n IHRvIHRoZQ0KPiBjb25jZXB0dWFsDQo+ID4gKyAgICAgICAgICAgZGlmZmVyZW5jZSAoUGVyZkNv dW50ZXJTdG9wLVBlcmZDb3VudGVyU3RhcnQpLg0KPiA+ICsqKi8NCj4gPiArVUlOVDY0DQo+ID4g K0VGSUFQSQ0KPiA+ICtHZXRNaWNyb1NlY29uZERpZmZlcmVuY2UgKA0KPiA+ICsgIElOIFVJTlQ2 NCBQZXJmQ291bnRlclN0YXJ0LA0KPiA+ICsgIElOIFVJTlQ2NCBQZXJmQ291bnRlclN0b3ANCj4g PiArICApDQo+ID4gK3sNCj4gPiArICBVSU5UNjQgTmFub1NlY29uZERpZmZlcmVuY2U7DQo+ID4g KyAgVUlOVDY0IE1pY3JvU2Vjb25kRGlmZmVyZW5jZTsNCj4gPiArDQo+ID4gKyAgTmFub1NlY29u ZERpZmZlcmVuY2UgPSBHZXROYW5vU2Vjb25kRGlmZmVyZW5jZSAoDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIFBlcmZDb3VudGVyU3RhcnQsDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIFBlcmZDb3VudGVyU3RvcA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICApOw0KPiA+ICsgIE1pY3JvU2Vjb25kRGlmZmVyZW5jZSA9IERpdlU2NHgzMiAoTmFub1NlY29u ZERpZmZlcmVuY2UsDQo+IDEwMDApOw0KPiA+ICsgIHJldHVybiBNaWNyb1NlY29uZERpZmZlcmVu Y2U7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEZyb20gdHdvIHZhbHVlcyByZXRy aWV2ZWQgd2l0aCBUaW1lckxpYidzDQo+IEdldFBlcmZvcm1hbmNlQ291bnRlcigpLCBjYWxjdWxh dGUNCj4gPiArICB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBlbGFwc2VkIGJldHdlZW4gdGhl bS4NCj4gPiArDQo+ID4gKyAgVGhlIGZ1bmN0aW9uIGNhbm5vdCBoYW5kbGUgbXVsdGlwbGUgd3Jh cC1hcm91bmRzIG9mIHRoZQ0KPiBwZXJmb3JtYW5jZSBjb3VudGVyLg0KPiA+ICsNCj4gPiArICBA cGFyYW1baW5dIFBlcmZDb3VudGVyU3RhcnQgIFRoZSB2YWx1ZSByZXR1cm5lZCBieQ0KPiBHZXRQ ZXJmb3JtYW5jZUNvdW50ZXIoKSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNhbGxlZCBlYXJsaWVyIGluIHdhbGwgY2xvY2sNCj4gdGltZS4NCj4gPiArDQo+ID4gKyAgQHBh cmFtW2luXSBQZXJmQ291bnRlclN0b3AgICBUaGUgdmFsdWUgcmV0dXJuZWQgYnkNCj4gR2V0UGVy Zm9ybWFuY2VDb3VudGVyKCksDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj YWxsZWQgbGF0ZXIgaW4gd2FsbCBjbG9jaw0KPiB0aW1lLg0KPiA+ICsNCj4gPiArICBAcmV0dmFs ICBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBjb3JyZXNwb25kaW5nIHRvIHRoZQ0KPiBjb25j ZXB0dWFsDQo+ID4gKyAgICAgICAgICAgZGlmZmVyZW5jZSAoUGVyZkNvdW50ZXJTdG9wLVBlcmZD b3VudGVyU3RhcnQpLg0KPiA+ICsqKi8NCj4gPiArVUlOVDY0DQo+ID4gK0VGSUFQSQ0KPiA+ICtH ZXRNaWxsaVNlY29uZERpZmZlcmVuY2UgKA0KPiA+ICsgIElOIFVJTlQ2NCBQZXJmQ291bnRlclN0 YXJ0LA0KPiA+ICsgIElOIFVJTlQ2NCBQZXJmQ291bnRlclN0b3ANCj4gPiArICApDQo+ID4gK3sN Cj4gPiArICBVSU5UNjQgTmFub1NlY29uZERpZmZlcmVuY2U7DQo+ID4gKyAgVUlOVDY0IE1pbGxp U2Vjb25kRGlmZmVyZW5jZTsNCj4gPiArDQo+ID4gKyAgTmFub1NlY29uZERpZmZlcmVuY2UgPSBH ZXROYW5vU2Vjb25kRGlmZmVyZW5jZSAoDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg IFBlcmZDb3VudGVyU3RhcnQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlcmZD b3VudGVyU3RvcA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiA+ICsgIE1p bGxpU2Vjb25kRGlmZmVyZW5jZSA9IERpdlU2NHgzMiAoTmFub1NlY29uZERpZmZlcmVuY2UsDQo+ IDEwMDAgKiAxMDAwKTsNCj4gPiArICByZXR1cm4gTWlsbGlTZWNvbmREaWZmZXJlbmNlOw0KPiA+ ICt9DQo=