From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 55F32A00C4; Fri, 29 Jul 2022 19:17:07 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id F3B814069C; Fri, 29 Jul 2022 19:17:06 +0200 (CEST) Received: from smartserver.smartsharesystems.com (smartserver.smartsharesystems.com [77.243.40.215]) by mails.dpdk.org (Postfix) with ESMTP id 5C33140151 for ; Fri, 29 Jul 2022 19:17:05 +0200 (CEST) X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 Subject: RE: [RFC v2] non-temporal memcpy Date: Fri, 29 Jul 2022 19:17:04 +0200 Message-ID: <98CBD80474FA8B44BF855DF32C47DC35D8720F@smartserver.smartshare.dk> In-Reply-To: <24a6aafd01534dc0b75105f1356de574@huawei.com> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: [RFC v2] non-temporal memcpy Thread-Index: AdifYjmzwv8JvkFhT0yj+PrUQl+y2QAQTHNwAN90EwAAAaH6gAAF35igAAtj7lA= References: <98CBD80474FA8B44BF855DF32C47DC35D871D4@smartserver.smartshare.dk> <98CBD80474FA8B44BF855DF32C47DC35D871DB@smartserver.smartshare.dk> <262c214b-7870-a221-2621-6684dce42823@yandex.ru> <98CBD80474FA8B44BF855DF32C47DC35D871E6@smartserver.smartshare.dk> <2c646d01-14d0-e5cb-2d7c-50c8456fc3e5@yandex.ru> <98CBD80474FA8B44BF855DF32C47DC35D8720C@smartserver.smartshare.dk> <24a6aafd01534dc0b75105f1356de574@huawei.com> From: =?UTF-8?B?TW9ydGVuIEJyw7hydXA=?= To: "Konstantin Ananyev" , "Konstantin Ananyev" , , "Bruce Richardson" Cc: "Jan Viktorin" , "Ruifeng Wang" , "David Christensen" , "Stanislaw Kardach" X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org PiBGcm9tOiBLb25zdGFudGluIEFuYW55ZXYgW21haWx0bzprb25zdGFudGluLmFuYW55ZXZAaHVh d2VpLmNvbV0NCj4gU2VudDogRnJpZGF5LCAyOSBKdWx5IDIwMjIgMTMuNTANCj4gDQo+ID4gPiBG cm9tOiBLb25zdGFudGluIEFuYW55ZXYgW21haWx0bzprb25zdGFudGluLnYuYW5hbnlldkB5YW5k ZXgucnVdDQo+ID4gPiBTZW50OiBGcmlkYXksIDI5IEp1bHkgMjAyMiAxMi4wMA0KPiA+ID4NCj4g PiA+IDI0LzA3LzIwMjIgMjM6MTgsIE1vcnRlbiBCcsO4cnVwINC/0LjRiNC10YI6DQo+ID4gPiA+ PiBGcm9tOiBLb25zdGFudGluIEFuYW55ZXYgW21haWx0bzprb25zdGFudGluLnYuYW5hbnlldkB5 YW5kZXgucnVdDQo+ID4gPiA+PiBTZW50OiBTdW5kYXksIDI0IEp1bHkgMjAyMiAxNS4zNQ0KPiA+ ID4gPj4NCj4gPiA+ID4+IDIyLzA3LzIwMjIgMTE6NDQsIE1vcnRlbiBCcsO4cnVwINC/0LjRiNC1 0YI6DQo+ID4gPiA+Pj4+IEZyb206IEtvbnN0YW50aW4gQW5hbnlldg0KPiBbbWFpbHRvOmtvbnN0 YW50aW4udi5hbmFueWV2QHlhbmRleC5ydV0NCj4gPiA+ID4+Pj4gU2VudDogRnJpZGF5LCAyMiBK dWx5IDIwMjIgMDEuMjANCj4gPiA+ID4+Pj4NCj4gPiA+ID4+Pj4gSGkgTW9ydGVuLA0KPiA+ID4g Pj4+Pg0KPiA+ID4gPj4+Pj4gVGhpcyBSRkMgcHJvcG9zZXMgYSBzZXQgb2YgZnVuY3Rpb25zIG9w dGltaXplZCBmb3Igbm9uLQ0KPiB0ZW1wb3JhbA0KPiA+ID4gPj4+PiBtZW1vcnkgY29weS4NCj4g PiA+ID4+Pj4+DQo+ID4gPiA+Pj4+PiBBdCB0aGlzIHN0YWdlLCBJIGFtIGFza2luZyBmb3IgZmVl ZGJhY2sgb24gdGhlIGNvbmNlcHQuDQo+ID4gPiA+Pj4+Pg0KPiA+ID4gPj4+Pj4gQXBwbGljYXRp b25zIHNvbWV0aW1lcyBkYXRhIHRvIGFub3RoZXIgbWVtb3J5IGxvY2F0aW9uLCB3aGljaA0KPiBp cw0KPiA+ID4gPj4gb25seQ0KPiA+ID4gPj4+PiB1c2VkDQo+ID4gPiA+Pj4+PiBtdWNoIGxhdGVy Lg0KPiA+ID4gPj4+Pj4gSW4gdGhpcyBjYXNlLCBpdCBpcyBpbmVmZmljaWVudCB0byBwb2xsdXRl IHRoZSBkYXRhIGNhY2hlDQo+IHdpdGgNCj4gPiA+IHRoZQ0KPiA+ID4gPj4+PiBjb3BpZWQNCj4g PiA+ID4+Pj4+IGRhdGEuDQo+ID4gPiA+Pj4+Pg0KPiA+ID4gPj4+Pj4gQW4gZXhhbXBsZSB1c2Ug Y2FzZSAob3JpZ2luYXRpbmcgZnJvbSBhIHJlYWwgbGlmZQ0KPiBhcHBsaWNhdGlvbik6DQo+ID4g PiA+Pj4+PiBDb3B5aW5nIGZpbHRlcmVkIHBhY2tldHMsIG9yIHRoZSBmaXJzdCBwYXJ0IG9mIHRo ZW0sIGludG8gYQ0KPiA+ID4gY2FwdHVyZQ0KPiA+ID4gPj4+PiBidWZmZXINCj4gPiA+ID4+Pj4+ IGZvciBvZmZsaW5lIGFuYWx5c2lzLg0KPiA+ID4gPj4+Pj4NCj4gPiA+ID4+Pj4+IFRoZSBwdXJw b3NlIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyB0byBhY2hpZXZlIGEgcGVyZm9ybWFuY2UNCj4gZ2Fp bg0KPiA+ID4gYnkNCj4gPiA+ID4+Pj4gbm90DQo+ID4gPiA+Pj4+PiBwb2xsdXRpbmcgdGhlIGNh Y2hlIHdoZW4gY29weWluZyBkYXRhLg0KPiA+ID4gPj4+Pj4gQWx0aG91Z2ggdGhlIHRocm91Z2hw dXQgbWF5IGJlIGltcHJvdmVkIGJ5IGZ1cnRoZXINCj4gb3B0aW1pemF0aW9uLA0KPiA+ID4gSQ0K PiA+ID4gPj4gZG8NCj4gPiA+ID4+Pj4gbm90DQo+ID4gPiA+Pj4+PiBjb25zaWRlciB0aHJvdWdw dXQgb3B0aW1pemF0aW9uIHJlbGV2YW50IGluaXRpYWxseS4NCj4gPiA+ID4+Pj4+DQo+ID4gPiA+ Pj4+PiBUaGUgeDg2IG5vbi10ZW1wb3JhbCBsb2FkIGluc3RydWN0aW9ucyBoYXZlIDE2IGJ5dGUg YWxpZ25tZW50DQo+ID4gPiA+Pj4+PiByZXF1aXJlbWVudHMgWzFdLCB3aGlsZSBBUk0gbm9uLXRl bXBvcmFsIGxvYWQgaW5zdHJ1Y3Rpb25zDQo+IGFyZQ0KPiA+ID4gPj4+PiBhdmFpbGFibGUgd2l0 aA0KPiA+ID4gPj4+Pj4gNCBieXRlIGFsaWdubWVudCByZXF1aXJlbWVudHMgWzJdLg0KPiA+ID4g Pj4+Pj4gQm90aCBwbGF0Zm9ybXMgb2ZmZXIgbm9uLXRlbXBvcmFsIHN0b3JlIGluc3RydWN0aW9u cyB3aXRoIDQNCj4gYnl0ZQ0KPiA+ID4gPj4+PiBhbGlnbm1lbnQNCj4gPiA+ID4+Pj4+IHJlcXVp cmVtZW50cy4NCj4gPiA+ID4+Pj4+DQo+ID4gPiA+Pj4+PiBJbiBhZGRpdGlvbiB0byB0aGUgcHJp bWFyeSBmdW5jdGlvbiB3aXRob3V0IGFueSBhbGlnbm1lbnQNCj4gPiA+ID4+Pj4gcmVxdWlyZW1l bnRzLCB3ZQ0KPiA+ID4gPj4+Pj4gYWxzbyBwcm92aWRlIGZ1bmN0aW9ucyBmb3IgcmVzcGVjdGl2 bHkgMTYgYW5kIDQgYnl0ZSBhbGlnbmVkDQo+ID4gPiBhY2Nlc3MNCj4gPiA+ID4+Pj4gZm9yDQo+ ID4gPiA+Pj4+PiBwZXJmb3JtYW5jZSBwdXJwb3Nlcy4NCj4gPiA+ID4+Pj4+DQo+ID4gPiA+Pj4+ PiBUaGUgZnVuY3Rpb24gbmFtZXMgcmVzZW1ibGUgc3RhbmRhcmQgQyBsaWJyYXJ5IGZ1bmN0aW9u DQo+IG5hbWVzLA0KPiA+ID4gYnV0DQo+ID4gPiA+Pj4+IHRoZWlyDQo+ID4gPiA+Pj4+PiBzaWdu YXR1cmVzIGFyZSBpbnRlbnRpb25hbGx5IGRpZmZlcmVudC4gTm8gbmVlZCB0byBkcmFnDQo+IGxl Z2FjeQ0KPiA+ID4gaW50bw0KPiA+ID4gPj4+PiBpdC4NCj4gPiA+ID4+Pj4+DQo+ID4gPiA+Pj4+ PiBOQjogRG9uJ3QgY29tbWVudCBvbiBzcGFjZXMgZm9yIGluZGVudGF0aW9uOyBhIHBhdGNoIHdp bGwNCj4gZm9sbG93DQo+ID4gPiA+PiBEUERLDQo+ID4gPiA+Pj4+IGNvZGluZw0KPiA+ID4gPj4+ Pj4gc3R5bGUgYW5kIHVzZSBUQUIuDQo+ID4gPiA+Pj4+DQo+ID4gPiA+Pj4+DQo+ID4gPiA+Pj4+ IEkgdGhpbmsgdGhlcmUgd2VyZSBkaXNjdXNzaW9ucyBpbiBvdGhlciBkaXJlY3Rpb24gLSByZW1v dmUNCj4gPiA+ID4+IHJ0ZV9tZW1jcHkoKQ0KPiA+ID4gPj4+PiBjb21wbGV0ZWx5IGFuZCB1c2Ug bWVtY3B5KCkgaW5zdGVhZC4uLg0KPiA+ID4gPj4+DQo+ID4gPiA+Pj4gWWVzLCB0aGUgaGlnaGx5 IG9wdGltaXplZCBydGVfbWVtY3B5KCkgaW1wbGVtZW50YXRpb24gb2YNCj4gbWVtY3B5KCkNCj4g PiA+IGhhcw0KPiA+ID4gPj4gYmVjb21lIG9ic29sZXRlLCBub3cgdGhhdCBtb2Rlcm4gY29tcGls ZXJzIHByb3ZpZGUgYW4gZWZmaWNpZW50DQo+ID4gPiA+PiBtZW1jcHkoKSBpbXBsZW1lbnRhdGlv bi4NCj4gPiA+ID4+Pg0KPiA+ID4gPj4+IEl0J3MgYW4gZXhjZWxsZW50IHJlZmVyZW5jZSwgYmVj YXVzZSB3ZSBzaG91bGQgbGVhcm4gZnJvbSBpdCwNCj4gYW5kDQo+ID4gPiA+PiBhdm9pZCBpbnRy b2R1Y2luZyBzaW1pbGFyIG1pc3Rha2VzIHdpdGggbm9uLXRlbXBvcmFsIG1lbWNweS4NCj4gPiA+ ID4+Pg0KPiA+ID4gPj4+PiBCdXQgaWYgd2UgaGF2ZSBhIGdvb2QgdXNlIGNhc2UgZm9yIHRoYXQs IHRoZW4gSSBhbSBwb3NpdGl2ZSBpbg0KPiA+ID4gPj4+PiBwcmluY2lwbGUuDQo+ID4gPiA+Pj4N Cj4gPiA+ID4+PiBUaGUgc3RhbmRhcmQgQyBsaWJyYXJ5IGRvZXNuJ3Qgb2ZmZXIgbm9uLXRlbXBv cmFsIG1lbWNweSgpLCBzbw0KPiB3ZQ0KPiA+ID4gPj4gbmVlZCB0byBpbXBsZW1lbnQgaXQgb3Vy c2VsdmVzLg0KPiA+ID4gPj4+DQo+ID4gPiA+Pj4+IFRob3VnaCBJIHRoaW5rIHdlIG5lZWQgYSBj bGVhciB1c2UtY2FzZSB3aXRoaW4gZHBkayBmb3IgaXQNCj4gPiA+ID4+Pj4gdG8gZGVtb25zdHJh dGUgcGVyZm9tYW5jZSBnYWluLg0KPiA+ID4gPj4+DQo+ID4gPiA+Pj4gVGhlIHBlcmZvcm1hbmNl IGdhaW4gaXMgdG8gYXZvaWQgcG9sbHV0aW5nIHRoZSBkYXRhIGNhY2hlLiBEUERLDQo+ID4gPiA+ PiBleGFtcGxlIGFwcGxpY2F0aW9ucywgbGlrZSBsM2Z3ZCwgYXJlIHByb2JhYmx5IHRvbyBwcmlt aXRpdmUgdG8NCj4gPiA+IG1lYXN1cmUNCj4gPiA+ID4+IGFueSBiZW5lZml0IGluIHRoaXMgcmVn YXJkLg0KPiA+ID4gPj4+DQo+ID4gPiA+Pj4+IFByb2JhYmx5IGNvcHlpbmcgcGFja2V0cyB3aXRo aW4gcGR1bXAgbGliLCBvciBleGFtcGxlcy9kbWEuIG9yDQo+IC4uLg0KPiA+ID4gPj4+DQo+ID4g PiA+Pj4gR29vZCBwb2ludCAtIHRoZSBuZXcgZnVuY3Rpb25zIHNob3VsZCBiZSB1c2VkIHNvbWV3 aGVyZSB3aXRoaW4NCj4gPiA+IERQREsuDQo+ID4gPiA+PiBGb3IgdGhpcyBwdXJwb3NlLCBJIHdp bGwgbG9vayBpbnRvIG1vZGlmeWluZyBydGVfcGt0bWJ1Zl9jb3B5KCksDQo+ID4gPiB3aGljaA0K PiA+ID4gPj4gaXMgdXNlZCBieSBwZHVtcF9jb3B5KCksIHRvIHVzZSBub24tdGVtcG9yYWwgY29w eWluZyBvZiB0aGUNCj4gcGFja2V0DQo+ID4gPiA+PiBkYXRhLg0KPiA+ID4gPj4+DQo+ID4gPiA+ Pj4+IEFub3RoZXIgdGhvdWdodCAtIGRvIHdlIHJlYWxseSBuZWVkIGEgc2VwYXJhdGUgaW5saW5l IGZ1bmN0aW9uDQo+IGZvcg0KPiA+ID4gPj4gZWFjaA0KPiA+ID4gPj4+PiBmbGF2b3VyPw0KPiA+ ID4gPj4+PiBNaWdodCBiZSBqdXN0IG9uZSBub24taW5saW5lIHJ0ZV9tZW1jcHlfbnQoZHN0LCBz cmMsIHNpemUsDQo+IGZsYWdzKSwNCj4gPiA+ID4+Pj4gd2hlcmUgZmxhZ3MgY291bGQgYmUgY29t YmluYXRpb24gb2YgTlRfU1JDLCBOVF9EU1QsIGFuZCBrZWVwDQo+ID4gPiA+PiBhbGlnbm1lbnQN Cj4gPiA+ID4+Pj4gZGV0ZWN0aW9uL2RlY2lzaW9ucyB0byBwYXJ0aWN1bGFyIGltcGxlbWVudGF0 aW9uPw0KPiA+ID4gPj4+DQo+ID4gPiA+Pj4gVGhhbmsgeW91IGZvciB0aGUgZmVlZGJhY2ssIEtv bnN0YW50aW4uDQo+ID4gPiA+Pj4NCj4gPiA+ID4+PiBNeSBhbnN3ZXIgdG8gdGhpcyBzdWdnZXN0 aW9uIGdldHMgYSBsaXR0bGUgbG9uZ3dpbmRlZC4uLg0KPiA+ID4gPj4+DQo+ID4gPiA+Pj4gTG9v a2luZyBhdCB0aGUgRFBESyBwY2FwbmcgbGlicmFyeSwgaXQgY29waWVzIGEgNCBieXRlIGFsaWdu ZWQNCj4gPiA+ID4+IG1ldGFkYXRhIHN0cnVjdHVyZSBzaXplZCAyOCBieXRlLiBTbyBpdCBjYW4g ZG8gd2l0aCA0IGJ5dGUNCj4gYWxpZ25lZA0KPiA+ID4gPj4gZnVuY3Rpb25zLg0KPiA+ID4gPj4+ DQo+ID4gPiA+Pj4gT3VyIGFwcGxpY2F0aW9uIGNhbiBjYXB0dXJlIHBhY2tldHMgc3RhcnRpbmcg YXQgdGhlIElQIGhlYWRlciwNCj4gPiA+IHdoaWNoDQo+ID4gPiA+PiBpcyBvZmZzZXQgYnkgMTQg Ynl0ZSAoRXRoZXJuZXQgaGVhZGVyIHNpemUpIGZyb20gdGhlIHBhY2tldA0KPiBidWZmZXIsDQo+ ID4gPiBzbw0KPiA+ID4gPj4gaXQgcmVxdWlyZXMgMiBieXRlIGFsaWdubWVudC4gQW5kIHRodXMs IHJlcXVpcmluZyA0IGJ5dGUNCj4gYWxpZ25tZW50DQo+ID4gPiBpcw0KPiA+ID4gPj4gbm90IGFj Y2VwdGFibGUuDQo+ID4gPiA+Pj4NCj4gPiA+ID4+PiBPdXIgYXBwbGljYXRpb24gdXNlcyAxNiBi eXRlIGFsaWdubWVudCBpbiB0aGUgY2FwdHVyZSBidWZmZXINCj4gYXJlYSwNCj4gPiA+ID4+IGFu ZCBjYW4gYmVuZWZpdCBmcm9tIDE2IGJ5dGUgYWxpZ25lZCBmdW5jdGlvbnMuIEZ1cnRoZXJtb3Jl LCB4ODYNCj4gPiA+ID4+IHByb2Nlc3NvcnMgcmVxdWlyZSAxNiBieXRlIGFsaWdubWVudCBmb3Ig bm9uLXRlbXBvcmFsIGxvYWQNCj4gPiA+ID4+IGluc3RydWN0aW9ucywgc28gSSB0aGluayBhIDE2 IGJ5dGUgYWxpZ25lZCBub24tdGVtcG9yYWwgbWVtY3B5DQo+ID4gPiBmdW5jdGlvbg0KPiA+ID4g Pj4gc2hvdWxkIGJlIG9mZmVyZWQuDQo+ID4gPiA+Pg0KPiA+ID4gPj4NCj4gPiA+ID4+IFllcywg eDg2IG5lZWRzIDE2QiBhbGlnbm1lbnQgZm9yIE5UIGxvYWQvc3RvcmVzDQo+ID4gPiA+PiBCdXQg dGhhdCdzIHN1cHBvc2VkIHRvIGJlIGFyY2ggc3BlY2lmaWMgbGltaXRhdGlvbiwNCj4gPiA+ID4+ IHRoYXQgd2UgcHJvYmFibHkgd2FudCB0byBoaWRlLCBubz8NCj4gPiA+ID4NCj4gPiA+ID4gQWdy ZWUuDQo+ID4gPiA+DQo+ID4gPiA+PiBJbnNpZGUgdGhlIGZ1bmN0aW9uIGNhbiBjaGVjayBhbGln bm1lbnQgb2YgYm90aCBzcmMgYW5kIGRzdA0KPiA+ID4gPj4gYW5kIGRlY2lkZSBzaG91bGQgaXQg dXNlIE5UIGxvYWQvc3RvcmUgaW5zdHJ1Y3Rpb25zIG9yIGp1c3QNCj4gPiA+ID4+IGRvIG5vcm1h bCBjb3B5Lg0KPiA+ID4gPg0KPiA+ID4gPiBZZXMsIEknbSBleHBlcmltZW50aW5nIHdpdGggdGhl IHg4NiBpbmxpbmUgZnVuY3Rpb24gc2hvd24gYmVsb3cuDQo+IEFuZA0KPiA+ID4gaG9wZWZ1bGx5 LCB3aXRoIHNvbWUgImV4dGVybiBpbmxpbmUiIG9yIG90aGVyIG1hZ2ljLCBJIGNhbiBoaWRlIHRo ZQ0KPiA+ID4gZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBpbiB0aGUgYXJjaCBzcGVjaWZpYyBo ZWFkZXJzLCBhbmQgb25seQ0KPiBleHBvc2UNCj4gPiA+IHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlv biBvZiBydGVfbWVtY3B5X250KCkgaW4gdGhlIGNvbW1vbiBoZWFkZXIuDQo+ID4gPiA+DQo+ID4g PiA+IEknbSBjdXJyZW50bHkgd29ya2luZyBvbiB0aGUgeDg2IGltcGxlbWVudGF0aW9uIC0gd2hl biBJJ20NCj4gc2F0aXNmaWVkDQo+ID4gPiB3aXRoIHRoYXQsIEknbGwgbG9vayBpbnRvIGhvdyB0 byBoaWRlIHRoZSBpbXBsZW1lbnRhdGlvbnMgaW4gdGhlDQo+IGFyY2gNCj4gPiA+IHNwZWNpZmlj IGhlYWRlciBmaWxlcywgYW5kIG9ubHkgZXhwb3NlIHRoZSBjb21tb24gZnVuY3Rpb24NCj4gZGVj bGFyYXRpb24NCj4gPiA+IGluIHRoZSBnZW5lcmljIGhlYWRlciBmaWxlIGFsc28gdXNlZCBmb3Ig ZG9jdW1lbnRhdGlvbi4gSSB3b3JrcyBmb3INCj4gPiA+IHJ0ZV9tZW1jcHkoKSwgc28gSSBjYW4g cHJvYmFibHkgZmluZCB0aGUgd2F5IHRvIGRvIGl0IHRoZXJlLg0KPiA+ID4gPg0KPiA+ID4gPiAv Kg0KPiA+ID4gPiAgICogTm9uLVRlbXBvcmFsIE1lbW9yeSBPcGVyYXRpb25zIEZsYWdzLg0KPiA+ ID4gPiAgICovDQo+ID4gPiA+DQo+ID4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX0xFTkFfTUFT SyAgKFVJTlQ2NF9DKDB4RkUpIDw8IDApICAgLyoqDQo+IExlbmd0aA0KPiA+ID4gYWxpZ25tZW50 IG1hc2suICovDQo+ID4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX0xFTjJBICAgICAgKFVJTlQ2 NF9DKDIpIDw8IDApICAgICAgLyoqDQo+IExlbmd0aCBpcw0KPiA+ID4gMiBieXRlIGFsaWduZWQu ICovDQo+ID4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX0xFTjRBICAgICAgKFVJTlQ2NF9DKDQp IDw8IDApICAgICAgLyoqDQo+IExlbmd0aCBpcw0KPiA+ID4gNCBieXRlIGFsaWduZWQuICovDQo+ ID4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX0xFTjhBICAgICAgKFVJTlQ2NF9DKDgpIDw8IDAp ICAgICAgLyoqDQo+IExlbmd0aCBpcw0KPiA+ID4gOCBieXRlIGFsaWduZWQuICovDQo+ID4gPiA+ ICNkZWZpbmUgUlRFX01FTU9QU19GX0xFTjE2QSAgICAgKFVJTlQ2NF9DKDE2KSA8PCAwKSAgICAg LyoqDQo+IExlbmd0aCBpcw0KPiA+ID4gMTYgYnl0ZSBhbGlnbmVkLiAqLw0KPiA+ID4gPiAjZGVm aW5lIFJURV9NRU1PUFNfRl9MRU4zMkEgICAgIChVSU5UNjRfQygzMikgPDwgMCkgICAgIC8qKg0K PiBMZW5ndGggaXMNCj4gPiA+IDMyIGJ5dGUgYWxpZ25lZC4gKi8NCj4gPiA+ID4gI2RlZmluZSBS VEVfTUVNT1BTX0ZfTEVONjRBICAgICAoVUlOVDY0X0MoNjQpIDw8IDApICAgICAvKioNCj4gTGVu Z3RoIGlzDQo+ID4gPiA2NCBieXRlIGFsaWduZWQuICovDQo+ID4gPiA+ICNkZWZpbmUgUlRFX01F TU9QU19GX0xFTjEyOEEgICAgKFVJTlQ2NF9DKDEyOCkgPDwgMCkgICAgLyoqDQo+IExlbmd0aCBp cw0KPiA+ID4gMTI4IGJ5dGUgYWxpZ25lZC4gKi8NCj4gPiA+ID4NCj4gPiA+ID4gI2RlZmluZSBS VEVfTUVNT1BTX0ZfRFNUQV9NQVNLICAoVUlOVDY0X0MoMHhGRSkgPDwgOCkgICAvKioNCj4gPiA+ IERlc3RpbmF0aW9uIGFkZHJlc3MgYWxpZ25tZW50IG1hc2suICovDQo+ID4gPiA+ICNkZWZpbmUg UlRFX01FTU9QU19GX0RTVDJBICAgICAgKFVJTlQ2NF9DKDIpIDw8IDgpICAgICAgLyoqDQo+ID4g PiBEZXN0aW5hdGlvbiBhZGRyZXNzIGlzIDIgYnl0ZSBhbGlnbmVkLiAqLw0KPiA+ID4gPiAjZGVm aW5lIFJURV9NRU1PUFNfRl9EU1Q0QSAgICAgIChVSU5UNjRfQyg0KSA8PCA4KSAgICAgIC8qKg0K PiA+ID4gRGVzdGluYXRpb24gYWRkcmVzcyBpcyA0IGJ5dGUgYWxpZ25lZC4gKi8NCj4gPiA+ID4g I2RlZmluZSBSVEVfTUVNT1BTX0ZfRFNUOEEgICAgICAoVUlOVDY0X0MoOCkgPDwgOCkgICAgICAv KioNCj4gPiA+IERlc3RpbmF0aW9uIGFkZHJlc3MgaXMgOCBieXRlIGFsaWduZWQuICovDQo+ID4g PiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX0RTVDE2QSAgICAgKFVJTlQ2NF9DKDE2KSA8PCA4KSAg ICAgLyoqDQo+ID4gPiBEZXN0aW5hdGlvbiBhZGRyZXNzIGlzIDE2IGJ5dGUgYWxpZ25lZC4gKi8N Cj4gPiA+ID4gI2RlZmluZSBSVEVfTUVNT1BTX0ZfRFNUMzJBICAgICAoVUlOVDY0X0MoMzIpIDw8 IDgpICAgICAvKioNCj4gPiA+IERlc3RpbmF0aW9uIGFkZHJlc3MgaXMgMzIgYnl0ZSBhbGlnbmVk LiAqLw0KPiA+ID4gPiAjZGVmaW5lIFJURV9NRU1PUFNfRl9EU1Q2NEEgICAgIChVSU5UNjRfQyg2 NCkgPDwgOCkgICAgIC8qKg0KPiA+ID4gRGVzdGluYXRpb24gYWRkcmVzcyBpcyA2NCBieXRlIGFs aWduZWQuICovDQo+ID4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX0RTVDEyOEEgICAgKFVJTlQ2 NF9DKDEyOCkgPDwgOCkgICAgLyoqDQo+ID4gPiBEZXN0aW5hdGlvbiBhZGRyZXNzIGlzIDEyOCBi eXRlIGFsaWduZWQuICovDQo+ID4gPiA+DQo+ID4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX1NS Q0FfTUFTSyAgKFVJTlQ2NF9DKDB4RkUpIDw8IDE2KSAgLyoqDQo+IFNvdXJjZQ0KPiA+ID4gYWRk cmVzcyBhbGlnbm1lbnQgbWFzay4gKi8NCj4gPiA+ID4gI2RlZmluZSBSVEVfTUVNT1BTX0ZfU1JD MkEgICAgICAoVUlOVDY0X0MoMikgPDwgMTYpICAgICAvKioNCj4gU291cmNlDQo+ID4gPiBhZGRy ZXNzIGlzIDIgYnl0ZSBhbGlnbmVkLiAqLw0KPiA+ID4gPiAjZGVmaW5lIFJURV9NRU1PUFNfRl9T UkM0QSAgICAgIChVSU5UNjRfQyg0KSA8PCAxNikgICAgIC8qKg0KPiBTb3VyY2UNCj4gPiA+IGFk ZHJlc3MgaXMgNCBieXRlIGFsaWduZWQuICovDQo+ID4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19G X1NSQzhBICAgICAgKFVJTlQ2NF9DKDgpIDw8IDE2KSAgICAgLyoqDQo+IFNvdXJjZQ0KPiA+ID4g YWRkcmVzcyBpcyA4IGJ5dGUgYWxpZ25lZC4gKi8NCj4gPiA+ID4gI2RlZmluZSBSVEVfTUVNT1BT X0ZfU1JDMTZBICAgICAoVUlOVDY0X0MoMTYpIDw8IDE2KSAgICAvKioNCj4gU291cmNlDQo+ID4g PiBhZGRyZXNzIGlzIDE2IGJ5dGUgYWxpZ25lZC4gKi8NCj4gPiA+ID4gI2RlZmluZSBSVEVfTUVN T1BTX0ZfU1JDMzJBICAgICAoVUlOVDY0X0MoMzIpIDw8IDE2KSAgICAvKioNCj4gU291cmNlDQo+ ID4gPiBhZGRyZXNzIGlzIDMyIGJ5dGUgYWxpZ25lZC4gKi8NCj4gPiA+ID4gI2RlZmluZSBSVEVf TUVNT1BTX0ZfU1JDNjRBICAgICAoVUlOVDY0X0MoNjQpIDw8IDE2KSAgICAvKioNCj4gU291cmNl DQo+ID4gPiBhZGRyZXNzIGlzIDY0IGJ5dGUgYWxpZ25lZC4gKi8NCj4gPiA+ID4gI2RlZmluZSBS VEVfTUVNT1BTX0ZfU1JDMTI4QSAgICAoVUlOVDY0X0MoMTI4KSA8PCAxNikgICAvKioNCj4gU291 cmNlDQo+ID4gPiBhZGRyZXNzIGlzIDEyOCBieXRlIGFsaWduZWQuICovDQo+ID4gPiA+DQo+ID4g PiA+IC8qKg0KPiA+ID4gPiAgICogQHdhcm5pbmcNCj4gPiA+ID4gICAqIEBiIEVYUEVSSU1FTlRB TDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4NCj4gPiA+ID4gICAq DQo+ID4gPiA+ICAgKiBOb24tdGVtcG9yYWwgbWVtb3J5IGNvcHkuDQo+ID4gPiA+ICAgKiBUaGUg bWVtb3J5IGFyZWFzIG11c3Qgbm90IG92ZXJsYXAuDQo+ID4gPiA+ICAgKg0KPiA+ID4gPiAgICog QG5vdGUNCj4gPiA+ID4gICAqIElmIHRoZSBkZXN0aW5hdGlvbiBhbmQvb3IgbGVuZ3RoIGlzIHVu YWxpZ25lZCwgc29tZSBjb3BpZWQNCj4gYnl0ZXMNCj4gPiA+IHdpbGwgYmUNCj4gPiA+ID4gICAq IHN0b3JlZCBpbiB0aGUgZGVzdGluYXRpb24gbWVtb3J5IGFyZWEgdXNpbmcgdGVtcG9yYWwgYWNj ZXNzLg0KPiA+ID4gPiAgICoNCj4gPiA+ID4gICAqIEBwYXJhbSBkc3QNCj4gPiA+ID4gICAqICAg UG9pbnRlciB0byB0aGUgbm9uLXRlbXBvcmFsIGRlc3RpbmF0aW9uIG1lbW9yeSBhcmVhLg0KPiA+ ID4gPiAgICogQHBhcmFtIHNyYw0KPiA+ID4gPiAgICogICBQb2ludGVyIHRvIHRoZSBub24tdGVt cG9yYWwgc291cmNlIG1lbW9yeSBhcmVhLg0KPiA+ID4gPiAgICogQHBhcmFtIGxlbg0KPiA+ID4g PiAgICogICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weS4NCj4gPiA+ID4gICAqIEBwYXJhbSBmbGFn cw0KPiA+ID4gPiAgICogICBIaW50cyBmb3IgbWVtb3J5IGFjY2Vzcy4NCj4gPiA+ID4gICAqICAg QW55IG9mIHRoZSBSVEVfTUVNT1BTX0ZfTEVObkEsIFJURV9NRU1PUFNfRl9EU1RuQSwNCj4gPiA+ IFJURV9NRU1PUFNfRl9TUkNuQSBmbGFncy4NCj4gPiA+ID4gICAqLw0KPiA+ID4gPiBfX3J0ZV9l eHBlcmltZW50YWwNCj4gPiA+ID4gc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUNCj4gPiA+ID4g X19hdHRyaWJ1dGVfXygoX19ub25udWxsX18oMSwgMiksIF9fYWNjZXNzX18od3JpdGVfb25seSwg MSwgMyksDQo+ID4gPiBfX2FjY2Vzc19fKHJlYWRfb25seSwgMiwgMykpKQ0KPiA+ID4gPiB2b2lk IHJ0ZV9tZW1jcHlfbnQodm9pZCAqIF9fcnRlX3Jlc3RyaWN0IGRzdCwgY29uc3Qgdm9pZCAqDQo+ ID4gPiBfX3J0ZV9yZXN0cmljdCBzcmMsIHNpemVfdCBsZW4sDQo+ID4gPiA+ICAgICAgICAgIGNv bnN0IHVpbnQ2NF90IGZsYWdzKQ0KPiA+ID4gPiB7DQo+ID4gPiA+ICAgICAgaWYgKF9fYnVpbHRp bl9jb25zdGFudF9wKGZsYWdzKSA/DQo+ID4gPiA+ICAgICAgICAgICAgICAoKGZsYWdzICYgUlRF X01FTU9QU19GX0xFTkFfTUFTSykgPj0NCj4gUlRFX01FTU9QU19GX0xFTjE2QQ0KPiA+ID4gJiYN Cj4gPiA+ID4gICAgICAgICAgICAgIChmbGFncyAmIFJURV9NRU1PUFNfRl9EU1RBX01BU0spID49 DQo+IFJURV9NRU1PUFNfRl9EU1QxNkEpDQo+ID4gPiA6DQo+ID4gPiA+ICAgICAgICAgICAgICAh KCgodWludHB0cl90KWRzdCB8IGxlbikgJiAoMTYgLSAxKSkpIHsNCj4gPiA+ID4gICAgICAgICAg aWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGZsYWdzKSA/DQo+ID4gPiA+ICAgICAgICAgICAgICAg ICAgKGZsYWdzICYgUlRFX01FTU9QU19GX1NSQ0FfTUFTSykgPj0NCj4gPiA+IFJURV9NRU1PUFNf Rl9TUkMxNkEgOg0KPiA+ID4gPiAgICAgICAgICAgICAgICAgICEoKHVpbnRwdHJfdClzcmMgJiAo MTYgLSAxKSkpDQo+ID4gPiA+ICAgICAgICAgICAgICBydGVfbWVtY3B5X250MTZhKGRzdCwgc3Jj LCBsZW4vKiwgZmxhZ3MqLyk7DQo+ID4gPiA+ICAgICAgICAgIGVsc2UNCj4gPiA+ID4gICAgICAg ICAgICAgIHJ0ZV9tZW1jcHlfbnQxNmRsYShkc3QsIHNyYywgbGVuLyosIGZsYWdzKi8pOw0KPiA+ ID4gPiAgICAgIH0NCj4gPiA+ID4gICAgICBlbHNlIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChm bGFncykgPyAoDQo+ID4gPiA+ICAgICAgICAgICAgICAoZmxhZ3MgJiBSVEVfTUVNT1BTX0ZfTEVO QV9NQVNLKSA+PQ0KPiBSVEVfTUVNT1BTX0ZfTEVONEENCj4gPiA+ICYmDQo+ID4gPiA+ICAgICAg ICAgICAgICAoZmxhZ3MgJiBSVEVfTUVNT1BTX0ZfRFNUQV9NQVNLKSA+PQ0KPiBSVEVfTUVNT1BT X0ZfRFNUNEENCj4gPiA+ICYmDQo+ID4gPiA+ICAgICAgICAgICAgICAoZmxhZ3MgJiBSVEVfTUVN T1BTX0ZfU1JDQV9NQVNLKSA+PQ0KPiBSVEVfTUVNT1BTX0ZfU1JDNEEpDQo+ID4gPiA6DQo+ID4g PiA+ICAgICAgICAgICAgICAhKCgodWludHB0cl90KWRzdCB8ICh1aW50cHRyX3Qpc3JjIHwgbGVu KSAmICg0IC0NCj4gMSkpKSB7DQo+ID4gPiA+ICAgICAgICAgIHJ0ZV9tZW1jcHlfbnQ0YShkc3Qs IHNyYywgbGVuLyosIGZsYWdzKi8pOw0KPiA+ID4gPiAgICAgIH0NCj4gPiA+ID4gICAgICBlbHNl DQo+ID4gPiA+ICAgICAgICAgIHJ0ZV9tZW1jcHlfbnRfdW5hbGlnbmVkKGRzdCwgc3JjLCBsZW4v KiwgZmxhZ3MqLyk7DQo+ID4gPiA+IH0NCj4gPiA+DQo+ID4gPg0KPiA+ID4gRG8gd2UgcmVhbGx5 IG5lZWQgdG8gZXhwb3NlIGFsbCB0aGVzZSBkb3plbiBmbGFncz8NCj4gPiA+IE15IHRob3VnaHQg YXQgbGVhc3QgYWJvdXQgeDg2IGltcGxlbWVudGFpb24gd2FzIGFib3V0IHNvbWV0aGluZw0KPiBt b3JlDQo+ID4gPiBzaW1wbGUgbGlrZToNCj4gPiA+IHZvaWQgcnRlX21lbWNweV9udCh2b2lkICog X19ydGVfcmVzdHJpY3QgZHN0LA0KPiA+ID4gCWNvbnN0IHZvaWQgKiBfX3J0ZV9yZXN0cmljdCBz cmMsIHNpemVfdCBsZW4sDQo+ID4gPiAJY29uc3QgdWludDY0X3QgZmxhZ3MpDQo+ID4gPiB7DQo+ ID4gPg0KPiA+ID4gCWlmIChmbGFncyA9PSAoU1JDX05UIHwgRFNUX05UKSAmJiAoKGRzdCB8IHNy YykgJiAweGYpID09IDApIHsNCj4gPiA+IAkJX2RvX250X3NyY19udF9kc3RfbnQoLi4uKTsNCj4g PiA+IAl9IGVsc2UgaWYgKGZsYWdzID09IERTVF9OVCAmJiAoZHN0ICYgMHhmKSA9PSAwKSB7DQo+ ID4gPiAJCV9kb19zcmNfbmFfZHN0X250KC4uLik7DQo+ID4gPiAJfSBlbHNlIGlmIChmbGFncyA9 PSBTUkNfTlQgJiYgKHNyYyAmIDB4ZikgPT0gMCkgew0KPiA+ID4gCQlfZG9fc3JjX250X2RzdF9u YSguLi4pOw0KPiA+ID4gCX0gZWxzZQ0KPiA+ID4gCQltZW1jcHkoZHN0LCBzcmMsIGxlbik7DQo+ ID4gPiB9DQo+ID4NCj4gPiBUaGUgY29tYmluYXRpb24gb2YgZmxhZ3MsIGlubGluZSBhbmQgX19i dWlsdGluX2NvbnN0YW50X3AoKSBhbGxvd3MNCj4gdGhlIGNvbXBpbGVyIHRvIHByb2R1Y2UgemVy by1vdmVyaGVhZCBjb2RlLiBXaXRob3V0IGl0LCB0aGUNCj4gPiByZXN1bHRpbmcgY29kZSB3aWxs IGNvbnRhaW4gYSBidW5jaCBvZiBydW4tdGltZSBiaXRtYXNrIGNvbXBhcmlzb25zDQo+IGFuZCBi cmFuY2hlcyB0byBkZXRlcm1pbmUgdGhlIHVsdGltYXRlIGNvcHkgZnVuY3Rpb24uDQo+IA0KPiBJ IHRoaW5rIGl0IGlzIHVuYXZvaWRhYmxlLCB1bmxlc3MgeW91ciBpbnRlbnRpb24gZm9yIHRoaXMg ZnVuY3Rpb24gdG8NCj4gdHJ1c3QgZmxhZ3Mgd2l0aG91dCBjaGVja2luZyBhY3R1YWwgYWRkcmVz c2VzLg0KDQpUaGUgaW50ZW50aW9uIGlzIHRvIHRydXN0IHRoZSBmbGFncy4gRmFzdCBwYXRoIGZ1 bmN0aW9ucyBzaG91bGQgdHJ1c3QgdGhhdCBwYXJhbWV0ZXJzIHBhc3NlZCBhcmUgdmFsaWQgYW5k IGNvbmZvcm0gdG8gc3BlY2lmaWVkIHJlcXVpcmVtZW50cy4NCg0KV2UgY2FuIGFsd2F5cyB0aHJv dyBpbiBhIGZldyBSVEVfQVNTRVJUcyAtIHRoZXkgYXJlIG9taXR0ZWQgdW5sZXNzIGNvbXBpbGVk IGZvciBkZWJ1ZywgYW5kIHRodXMgaGF2ZSB6ZXJvIGNvc3QgaW4gcHJvZHVjdGlvbi4NCg0KPiAN Cj4gIE9uIHg4Ng0KPiA+IHRoZXJlIGFyZSBub3Qgb25seSAxNiBieXRlLCBidXQgYWxzbyA0IGJ5 dGUgYWxpZ25tZW50IHZhcmlhbnRzIG9mDQo+IG5vbi10ZW1wb3JhbCBzdG9yZS4gVGhlIGJlYXV0 eSBvZiBpdCB3aWxsIGJlIG1vcmUgb2J2aW91cyB3aGVuIHRoZQ0KPiA+IHBhdGNoIGlzIHJlYWR5 Lg0KPiANCj4gT2ssIEkgd2lsbCBqdXN0IHdhaXQgZm9yIGZpbmFsIHZlcnNpb24gdGhlbiA6KQ0K PiANCj4gPg0KPiA+IEFuZCBpbiBteSBjdXJyZW50IHdvcmtpbmcgdmVyc2lvbiAobm90IHRoZSBj b2RlIHByb3ZpZGVkIGhlcmUpLCB0aGUNCj4gZmxhZ3MgYXJlIGhpbnRzLCBzbyB1c2luZyB0aGVt IHdpbGwgYmUgb3B0aW9uYWwuIFRoZSBmdW5jdGlvbg0KPiA+IGhlYWRlcnMgd2lsbCBsb29rIHJv dWdobHkgbGlrZSB0aGlzOg0KPiA+DQo+ID4gc3RhdGljIGlubGluZSB2b2lkIHJ0ZV9tZW1jcHlf bnRfZXgoDQo+ID4gCQl2b2lkICogZHN0LCBjb25zdCB2b2lkICogc3JjLA0KPiA+IAkJc2l6ZV90 IGxlbiwgdWludDY0X3QgZmxhZ3MpOw0KPiA+DQo+ID4gc3RhdGljIGlubGluZSB2b2lkIHJ0ZV9t ZW1jcHlfbnQoDQo+ID4gCQl2b2lkICogZHN0LCBjb25zdCB2b2lkICogc3JjLA0KPiA+IAkJc2l6 ZV90IGxlbikNCj4gPiB7DQo+ID4gCXJ0ZV9tZW1jcHlfbnRfZXgoZHN0LCBzcmMsIGxlbiwgMCk7 DQo+ID4gfQ0KPiA+DQo+ID4gSSBtaWdodCBhZGQgYW4gX2V4IHBvc3RmaXggdmFyaWFudCBvZiB0 aGUgbWJ1ZiBwYWNrZXQgbm9uLXRlbXBvcmFsDQo+IGNvcHkgZnVuY3Rpb24gdG9vLCBidXQgSSdt IG5vdCB3b3JraW5nIG9uIHRoYXQgZnVuY3Rpb24geWV0LCBzbyBJDQo+ID4gZG9uJ3QgeWV0IGtu b3cgaWYgaXQgbWFrZXMgc2Vuc2Ugb3Igbm90Lg0KPiA+DQo+ID4gTXkgY29uY2VwdCBmb3IgYnVp bGQgdGltZSBhbGlnbm1lbnQgaGludHMgY2FuIGFsc28gYmUgY29waWVkIGludG8gYW4NCj4gcnRl X21lbWNweV9leCgpIGZ1bmN0aW9uIGZvciBpbXByb3ZlZCBwZXJmb3JtYW5jZS4gQnV0IEkNCj4g PiBkb24ndCB3YW50IG15IHBhdGNoIHRvIGV4cGFuZCB0b28gbXVjaCBvdXRzaWRlIGl0cyBpbml0 aWFsIHNjb3BlLCBzbw0KPiBJIHdpbGwgbm90IG1vZGlmeSBydGVfbWVtY3B5KCkgd2l0aCB0aGlz IHBhdGNoLg0KPiA+DQo+ID4gQWx0ZXJuYXRpdmVseSwgSSBjb3VsZCBwcm92aWRlIHJ0ZV9tZW1j cHlfZXgoZCxzLGwsZmxhZ3MpIGluc3RlYWQgb2YNCj4gcnRlX21lbWNweV9udFtfZXhdKCksIGFu ZCB1c2UgdGhlIGZsYWdzIHRvIGluZGljYXRlIG5vbi0NCj4gPiB0ZW1wb3JhbCBzb3VyY2UgYW5k IGRlc3RpbmF0aW9uLg0KPiA+DQo+ID4gVGhpcyBpcyBvbmx5IGEgcXVlc3Rpb24gYWJvdXQgd2hp Y2ggQVBJIHRoZSBjb21tdW5pdHkgcHJlZmVycy4gSSB3aWxsDQo+IG5vdCBjaGFuZ2UgdGhlIGlt cGxlbWVudGF0aW9uIG9mIHJ0ZV9tZW1jcHkoKSB3aXRoIHRoaXMgcGF0Y2ggLQ0KPiA+IGl0J3Mg YW5vdGhlciBqb2IgdG8gZG8gdGhhdC4NCj4gPg0KPiA+ID4NCj4gPiA+ID4NCj4gPiA+ID4NCj4g PiA+ID4+DQo+ID4gPiA+Pg0KPiA+ID4gPj4+IFdoaWxlIHdvcmtpbmcgb24gdGhlc2UgZnVudGlv bnMsIEkgZXhwZXJpbWVudGVkIHdpdGggYW4NCj4gPiA+ID4+IHJ0ZV9tZW1jcHlfbnQoKSB0YWtp bmcgZmxhZ3MsIHdoaWNoIGlzIGFsc28gbXkgcGVyc29uYWwNCj4gcHJlZmVyZW5jZSwNCj4gPiA+ IGJ1dA0KPiA+ID4gPj4gaGF2ZW4ndCBzdWNjZWVkIHlldC4gRXNwZWNpYWxseSB3aGVuIGNvcHlp bmcgYSAxNiBieXRlIGFsaWduZWQNCj4gPiA+ID4+IHN0cnVjdHVyZSBvZiBvbmx5IDE2IGJ5dGUs IHRoZSBvdmVyaGVhZCBvZiB0aGUgZnVuY3Rpb24gY2FsbCArDQo+ID4gPiA+PiBjb21wYXJpbmcg dGhlIGZsYWdzICsgdGhlIGNvcHkgbG9vcCBvdmVyaGVhZCBpcyBzaWduaWZpY2FudCwNCj4gPiA+ IGNvbXBhcmVkDQo+ID4gPiA+PiB0byBpbmxpbmUgY29kZSBjb25zaXN0aW5nIG9mIG9ubHkgb25l IHBhaXIgb2YgIm1vdm50ZHFhDQo+ID4gPiAoJXJzaSksJXhtbTA7DQo+ID4gPiA+PiBtb3ZudGRx ICV4bW0wLCglcmRpKSIgaW5zdHJ1Y3Rpb25zLg0KPiA+ID4gPj4+DQo+ID4gPiA+Pj4gUmVtZW1i ZXIgdGhhdCBhIG5vbi1pbmxpbmVkIHJ0ZV9tZW1jcHlfbnQoKSB3aWxsIGJlIGNhbGxlZCB3aXRo DQo+ID4gPiB2ZXJ5DQo+ID4gPiA+PiB2YXJ5aW5nIHNpemUsIGR1ZSB0byB0aGUgdHlwaWNhbCBt aXggb2Ygc21hbGwgYW5kIGJpZyBwYWNrZXRzLA0KPiBzbw0KPiA+ID4gPj4gYnJhbmNoIHByZWRp Y3Rpb24gd2lsbCBub3QgaGVscC4NCj4gPiA+ID4+Pg0KPiA+ID4gPj4+IFRoaXMgUkZDIGRvZXMg bm90IHlldCBzaG93IHRoZSBydGVfbWVtY3B5X250KCkgZnVuY3Rpb24NCj4gaGFuZGxpbmcNCj4g PiA+ID4+IHVuYWxpZ25lZCBsb2FkL3N0b3JlLCBidXQgaXQgaXMgbW9yZSBjb21wbGV4IHRoYW4g dGhlIGFsaWduZWQNCj4gPiA+ID4+IGZ1bmN0aW9ucy4gU28gSSB0aGluayB0aGUgYWxpZ25lZCB2 YXJpYW50cyBhcmUgd2FycmFudGVkIC0gZm9yDQo+ID4gPiA+PiBwZXJmb3JtYW5jZSByZWFzb25z Lg0KPiA+ID4gPj4+DQo+ID4gPiA+Pj4gU29tZSBvZiB0aGUgbmVlZCBmb3IgZXhwb3NpbmcgaW5k aXZpZHVhbCBmdW5jdGlvbnMgZm9yDQo+IGRpZmZlcmVudA0KPiA+ID4gPj4gYWxpZ25tZW50IHN0 ZW1zIGZyb20gdGhlIGNvbXBpbGVyIGJlaW5nIHVuYWJsZSB0byBkZXRlcm1pbmUgdGhlDQo+ID4g PiA+PiBhbGlnbm1lbnQgb2YgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcG9pbnRlcnMgYXQg YnVpbGQgdGltZS4NCj4gU28NCj4gPiA+IHdlDQo+ID4gPiA+PiBuZWVkIHRvIGhlbHAgdGhlIGNv bXBpbGVyIHdpdGggdGhpcyBhdCBidWlsZCB0aW1lLCBhbmQgdGh1cyB0aGUNCj4gbmVlZA0KPiA+ ID4gPj4gZm9yIGlubGluaW5nIHRoZSBmdW5jdGlvbi4gSWYgd2UgZXhwb3NlIGEgYnVuY2ggb2Yg c21hbGwgaW5saW5lDQo+ID4gPiA+PiBmdW5jdGlvbnMgb3IgYSBiaWcgaW5saW5lIGZ1bmN0aW9u IHdpdGggZmxhZ3Mgc2VlbXMgdG8gYmUgYQ0KPiBtYXR0ZXINCj4gPiA+IG9mDQo+ID4gPiA+PiB0 YXN0ZS4NCj4gPiA+ID4+Pg0KPiA+ID4gPj4+IFRoaW5raW5nIGFib3V0IGl0LCB5b3UgYXJlIHBy b2JhYmx5IHJpZ2h0IHRoYXQgZXhwb3NpbmcgYQ0KPiBzaW5nbGUNCj4gPiA+ID4+IGZ1bmN0aW9u IHdpdGggZmxhZ3MgaXMgYmV0dGVyIGZvciBkb2N1bWVudGF0aW9uIHB1cnBvc2VzIGFuZA0KPiBl YXNpZXINCj4gPiA+IGZvcg0KPiA+ID4gPj4gb3RoZXIgYXJjaGl0ZWN0dXJlcyB0byBpbXBsZW1l bnQuIEJ1dCBpdCBzdGlsbCBuZWVkcyB0byBiZQ0KPiBpbmxpbmUsDQo+ID4gPiBmb3INCj4gPiA+ ID4+IHRoZSByZWFzb25zIGRlc2NyaWJlZCBhYm92ZS4NCj4gPiA+ID4+DQo+ID4gPiA+Pg0KPiA+ ID4gPj4gT2ssIG15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBtYWluIHVzZS1jYXNlIGZvciBp dCB3b3VsZCBiZQ0KPiA+ID4gY29weWluZw0KPiA+ID4gPj4gb2YNCj4gPiA+ID4+IGJpZyBjaHVu a3Mgb2YgZGF0YSwgYnV0IGZyb20geW91ciBkZXNjcmlwdGlvbiBpdCBtaWdodCBub3QgYmUNCj4g dGhlDQo+ID4gPiBjYXNlLg0KPiA+ID4gPg0KPiA+ID4gPiBUaGlzIGlzIGZvciBxdWlja2x5IGNv cHlpbmcgcmVsYXRpdmVseSBzbWFsbCBwaWVjZXMgb2YgZGF0YQ0KPiA+ID4gc3luY2hyb25vdXNs eSB3aXRob3V0IHBvbGx1dGluZyB0aGUgQ1BVcyBkYXRhIGNhY2hlLCBlLmcuIGp1c3QNCj4gYmVm b3JlDQo+ID4gPiBwYXNzaW5nIG9uIGEgcGFja2V0IHRvIGFuIEV0aGVybmV0IFBNRCBmb3IgdHJh bnNtaXNzaW9uLg0KPiA+ID4gPg0KPiA+ID4gPiBCaWcgY2h1bmtzIG9mIGRhdGEgc2hvdWxkIGJl IGNvcGllZCBhc3luY2hyb25vdXNseSBieSBETUEuDQo+ID4gPiA+DQo+ID4gPiA+PiBZZXMsIGZv ciBqdXN0IDE2LzMyQiBjb3B5IGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQgbWlnaHQgYmUgd2F5DQo+ IHRvbw0KPiA+ID4gPj4gaGlnaC4uLg0KPiA+ID4gPj4gQXMgYW5vdGhlciBhbHRlcm5hdGl2ZSAt IHdvdWxkIG1lbWNweV9udF9idWxrKCkgaGVscCBzb21laG93Pw0KPiA+ID4gPj4gSXQgY2FuIGRv IGNvcHlpbmcgZm9yIHRoZSBzZXZlcmFsIHNyYy9kc3QgcGFpcnMgYXQgb25jZSBhbmQNCj4gPiA+ ID4+IHRoYXQgbWlnaHQgaGVscCB0byBhbW9ydGl6ZSBjb3N0IG9mIGZ1bmN0aW9uIGNhbGwuDQo+ ID4gPiA+DQo+ID4gPiA+IEluIG1hbnkgY2FzZXMsIG1lbWNweV9udCgpIHdpbGwgcmVwbGFjZSBt ZW1jcHkoKSBpbnNpZGUgbG9vcHMsIHNvDQo+IGl0DQo+ID4gPiBzaG91bGQgYmUganVzdCBhcyBl YXN5IHRvIHVzZSBhcyBtZW1jcHkoKS4gRS5nLiBsb29rIGF0DQo+ID4gPiBydGVfcGt0bWJ1Zl9j b3B5KCkuLi4gQnVpbGRpbmcgYSBtZW1jb3B5IGFycmF5IHRvIHBhc3MgdG8NCj4gPiA+IG1lbWNw eV9udF9idWxrKCkgZnJvbSBydGVfcGt0bWJ1Zl9jb3B5KCkgd291bGQgcmVxdWlyZSBhDQo+IHNp Z25pZmljYW50DQo+ID4gPiByZXdyaXRlIG9mIHJ0ZV9wa3RtYnVmX2NvcHkoKSwgY29tcGFyZWQg dG8ganVzdCByZXBsYWNpbmcNCj4gcnRlX21lbWNweSgpDQo+ID4gPiB3aXRoIHJ0ZV9tZW1jcHlf bnQoKS4gQW5kIHRoaXMgaXMganVzdCBvbmUgZnVuY3Rpb24gdXNpbmcgbWVtY3B5KCkuDQo+ID4g Pg0KPiA+ID4gQWN0dWFsbHksIG9uZSBxdWVzdGlvbiBJIGhhdmUgZm9yIHN1Y2ggc21hbGwgZGF0 YS10cmFuc2Zlcg0KPiA+ID4gKDE2QiBwZXIgcGFja2V0KSAtIGRvIHlvdSBzdGlsbCBzZWUgc29t ZSBub3RpY2FibGUgcGVyZm9tYW5jZQ0KPiA+ID4gaW1wcm92ZW1lbnQgZm9yIHN1Y2ggc2NlbmFy aW8/DQo+ID4NCj4gPiBDb3B5aW5nIDE2IGJ5dGUgZnJvbSBlYWNoIHBhY2tldCBpbiBhIGJ1cnN0 IG9mIDMyIHBhY2tldHMgd291bGQNCj4gb3RoZXJ3aXNlIHBvbGx1dGUgNjQgY2FjaGUgbGluZXMg PSA0IEtCIGNhY2hlLiBXaXRoIHR5cGljYWxseSA2NCBLQiBMMQ0KPiA+IGNhY2hlLCBJIHRoaW5r IGl0IG1ha2VzIGEgZGlmZmVyZW5jZS4NCj4gDQo+IEkgdW5kZXJzdGFuZCB0aGUgaW50ZW50aW9u IGJlaGluZCwgbXkgcXVlc3Rpb24gd2FzIC0gaXQgaXMgcmVhbGx5DQo+IG1lYXN1cmFibGU/DQo+ IFNvbWV0aGluZyBsaWtlOiB1c2luZyBwa3RtYnVmX2NvcHlfbnQobGVuPTE2KSBvdmVyIHVzaW5n DQo+IHBrdG1idWZfY29weShsZW49MTYpDQo+IG9uIHdvcmtsb2FkIFggZ2l2ZXMgWSUgdGhvdWdo dHB1dCBpbXByb3ZlbWVudD8NCg0KSWYgdGhlIGFwcGxpY2F0aW9uIGlzIGNvbXBsZXggZW5vdWdo LCBhbmQgbmVlZHMgc29tZSBvZiB0aG9zZSA0IEtCIGNhY2hlIG90aGVyd2lzZSB3YXN0ZWQsIHRo ZXJlIHdpbGwgYmUgYSBzaWduaWZpY2FudCB0aHJvdWdocHV0IGltcHJvdmVtZW50OyBvdGhlcndp c2UgcHJvYmFibHkgbm90Lg0KDQpJIGhhdmUgYSBnZW5lcmFsIHByb2JsZW0gd2l0aCB0aGlzIHR5 cGUgb2YgcXVlc3Rpb246IEkgaGF0ZSB0aGF0IHRocm91Z2hwdXQgaXMgdGhlIG9ubHkgS1BJIChL ZXkgUGVyZm9ybWFuY2UgSW5kaWNhdG9yKSBnZXR0aW5nIGFueSBhdHRlbnRpb24gb24gdGhlIG1h aWxpbmcgbGlzdCEgT3RoZXIgS1BJcywgc3VjaCBhcyBsYXRlbmN5IGFuZCByZXNvdXJjZSBjb25z ZXJ2YXRpb24sIGFyZSBqdXN0IGFzIGltcG9ydGFudCBpbiBtYW55IHJlYWwgbGlmZSB1c2UgY2Fz ZXMuDQoNCkhlcmUncyBhIG51bWJlciBmb3IgeW91OiA2LjI1ICUgcmVkdWN0aW9uIGluIEwxIGRh dGEgY2FjaGUgY29uc3VtcHRpb24uIChBc3N1bWluZyA2NCBLQiBMMSBjYWNoZSB3aXRoIDY0IGJ5 dGUgY2FjaGUgbGluZXMgYW5kIGFwcGxpY2F0aW9uIGJ1cnN0IGxlbmd0aCBvZiAzMiBwYWNrZXRz LikNCg0KPiANCj4gPg0KPiA+ID4gQW5vdGhlciBxdWVzdGlvbiAtIHdobyB3aWxsIGRvICdzZmVu Y2UnIGFmdGVyIHRoZSBjb3B5aW5nPw0KPiA+ID4gV291bGQgaXQgYmUgaW5zaWRlIG1lbWNweV9u dCAoc2VlbXMgcXVpdGUgY29zdGx5KSwgb3Igd291bGQNCj4gPiA+IGl0IGJlIGFub3RoZXIgQVBJ IGZ1bmN0aW9uIGZvciB0aGF0OiBtZW1jcHlfbnRfZmx1c2goKSBvciBzbz8NCj4gPg0KPiA+IE91 dHNpZGUuIE9ubHkgdGhlIGRldmVsb3BlciBrbm93cyB3aGVuIGl0IGlzIHJlcXVpcmVkLCBzbyBp dCB3b3VsZG4ndA0KPiBtYWtlIGFueSBzZW5zZSB0byBhZGQgdGhlIGNvc3QgaW5zaWRlIG1lbWNw eV9udCgpLg0KPiA+DQo+ID4gSSBkb24ndCB0aGluayB3ZSBzaG91bGQgYWRkIGEgZmx1c2ggZnVu Y3Rpb247IGl0IHdvdWxkIGp1c3QgYmUNCj4gYW5vdGhlciBuYW1lIGZvciBhbiBhbHJlYWR5IGV4 aXN0aW5nIGZ1bmN0aW9uLiBSZWZlcnJpbmcgdG8gdGhlDQo+IHJlcXVpcmVkDQo+ID4gb3BlcmF0 aW9uIGluIHRoZSBtZW1jcHlfbnQoKSBmdW5jdGlvbiBkb2N1bWVudGF0aW9uIHNob3VsZCBzdWZm aWNlLg0KPiA+DQo+ID4gPg0KPiA+ID4gPj4NCj4gPiA+ID4+DQo+ID4gPiA+Pj4NCj4gPiA+ID4+ Pj4NCj4gPiA+ID4+Pj4NCj4gPiA+ID4+Pj4+IFsxXSBodHRwczovL3d3dy5pbnRlbC5jb20vY29u dGVudC93d3cvdXMvZW4vZG9jcy9pbnRyaW5zaWNzLQ0KPiA+ID4gPj4+PiBndWlkZS9pbmRleC5o dG1sI3RleHQ9X21tX3N0cmVhbV9sb2FkDQo+ID4gPiA+Pj4+PiBbMl0gaHR0cHM6Ly9kZXZlbG9w ZXIuYXJtLmNvbS9kb2N1bWVudGF0aW9uLzEwMDA3Ni8wMTAwL0E2NC0NCj4gPiA+ID4+Pj4gSW5z dHJ1Y3Rpb24tU2V0LVJlZmVyZW5jZS9BNjQtRmxvYXRpbmctcG9pbnQtDQo+IEluc3RydWN0aW9u cy9MRE5QLS0NCj4gPiA+ID4+IFNJTUQtDQo+ID4gPiA+Pj4+IGFuZC1GUC0NCj4gPiA+ID4+Pj4+ DQo+ID4gPiA+Pj4+PiBWMjoNCj4gPiA+ID4+Pj4+IC0gT25seSBjb3B5IGZyb20gbm9uLXRlbXBv cmFsIHNvdXJjZSB0byBub24tdGVtcG9yYWwNCj4gZGVzdGluYXRpb24uDQo+ID4gPiA+Pj4+PiAg ICAgIEkuZS4gcmVtb3ZlIHRoZSB0d28gdmFyaWFudHMgd2l0aCBvbmx5IHNvdXJjZSBhbmQvb3IN Cj4gPiA+ID4+IGRlc3RpbmF0aW9uDQo+ID4gPiA+Pj4+IGJlaW5nDQo+ID4gPiA+Pj4+PiAgICAg IG5vbi10ZW1wb3JhbC4NCj4gPiA+ID4+Pj4+IC0gRG8gbm90IHJlcXVpcmUgYWxpZ25tZW50Lg0K PiA+ID4gPj4+Pj4gICAgICBJbnN0ZWFkLCBvZmZlciBhZGRpdGlvbmFsIDQgYW5kIDE2IGJ5dGUg YWxpZ25lZA0KPiBmdW5jdGlvbnMNCj4gPiA+IGZvcg0KPiA+ID4gPj4+PiBwZXJmb3JtYW5jZQ0K PiA+ID4gPj4+Pj4gICAgICBwdXJwb3Nlcy4NCj4gPiA+ID4+Pj4+IC0gSW1wbGVtZW50ZWQgdHdv IG9mIHRoZSBmdW5jdGlvbnMgZm9yIHg4Ni4NCj4gPiA+ID4+Pj4+IC0gUmVtb3ZlIG1lbXNldCBm dW5jdGlvbi4NCj4gPiA+ID4+Pj4+DQo+ID4gPiA+Pj4+PiBTaWduZWQtb2ZmLWJ5OiBNb3J0ZW4g QnLDuHJ1cCA8bWJAc21hcnRzaGFyZXN5c3RlbXMuY29tPg0KPiA+ID4gPj4+Pj4gLS0tDQo+ID4g PiA+Pj4+Pg0KPiA+ID4gPj4+Pj4gLyoqDQo+ID4gPiA+Pj4+PiAgICAgKiBAd2FybmluZw0KPiA+ ID4gPj4+Pj4gICAgICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhv dXQgcHJpb3INCj4gbm90aWNlLg0KPiA+ID4gPj4+Pj4gICAgICoNCj4gPiA+ID4+Pj4+ICAgICAq IENvcHkgZGF0YSBmcm9tIG5vbi10ZW1wb3JhbCBzb3VyY2UgdG8gbm9uLXRlbXBvcmFsDQo+ID4g PiA+PiBkZXN0aW5hdGlvbi4NCj4gPiA+ID4+Pj4+ICAgICAqDQo+ID4gPiA+Pj4+PiAgICAgKiBA cGFyYW0gZHN0DQo+ID4gPiA+Pj4+PiAgICAgKiAgIFBvaW50ZXIgdG8gdGhlIG5vbi10ZW1wb3Jh bCBkZXN0aW5hdGlvbiBvZiB0aGUgZGF0YS4NCj4gPiA+ID4+Pj4+ICAgICAqICAgU2hvdWxkIGJl IDQgYnl0ZSBhbGlnbmVkLCBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZS4NCj4gPiA+ID4+Pj4+ICAg ICAqIEBwYXJhbSBzcmMNCj4gPiA+ID4+Pj4+ICAgICAqICAgUG9pbnRlciB0byB0aGUgbm9uLXRl bXBvcmFsIHNvdXJjZSBkYXRhLg0KPiA+ID4gPj4+Pj4gICAgICogICBObyBhbGlnbm1lbnQgcmVx dWlyZW1lbnRzLg0KPiA+ID4gPj4+Pj4gICAgICogQHBhcmFtIGxlbg0KPiA+ID4gPj4+Pj4gICAg ICogICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weS4NCj4gPiA+ID4+Pj4+ICAgICAqICAgU2hvdWxk IGJlIGJlIGRpdmlzaWJsZSBieSA0LCBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZS4NCj4gPiA+ID4+ Pj4+ICAgICAqLw0KPiA+ID4gPj4+Pj4gX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gPiA+Pj4+PiBz dGF0aWMgX19ydGVfYWx3YXlzX2lubGluZQ0KPiA+ID4gPj4+Pj4gX19hdHRyaWJ1dGVfXygoX19u b25udWxsX18oMSwgMiksIF9fYWNjZXNzX18od3JpdGVfb25seSwgMSwNCj4gMyksDQo+ID4gPiA+ Pj4+IF9fYWNjZXNzX18ocmVhZF9vbmx5LCAyLCAzKSkpDQo+ID4gPiA+Pj4+PiB2b2lkIHJ0ZV9t ZW1jcHlfbnQodm9pZCAqIF9fcnRlX3Jlc3RyaWN0IGRzdCwgY29uc3Qgdm9pZCAqDQo+ID4gPiA+ Pj4+IF9fcnRlX3Jlc3RyaWN0IHNyYywgc2l6ZV90IGxlbikNCj4gPiA+ID4+Pj4+IC8qIEltcGxl bWVudGF0aW9uIFQuQi5ELiAqLw0KPiA+ID4gPj4+Pj4NCj4gPiA+ID4+Pj4+IC8qKg0KPiA+ID4g Pj4+Pj4gICAgICogQHdhcm5pbmcNCj4gPiA+ID4+Pj4+ICAgICAqIEBiIEVYUEVSSU1FTlRBTDog dGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yDQo+IG5vdGljZS4NCj4gPiA+ID4+Pj4+ ICAgICAqDQo+ID4gPiA+Pj4+PiAgICAgKiBDb3B5IGRhdGEgaW4gYmxvY2tzIG9mIDE2IGJ5dGUg ZnJvbSBhbGlnbmVkIG5vbi0NCj4gdGVtcG9yYWwNCj4gPiA+ID4+IHNvdXJjZQ0KPiA+ID4gPj4+ Pj4gICAgICogdG8gYWxpZ25lZCBub24tdGVtcG9yYWwgZGVzdGluYXRpb24uDQo+ID4gPiA+Pj4+ PiAgICAgKg0KPiA+ID4gPj4+Pj4gICAgICogQHBhcmFtIGRzdA0KPiA+ID4gPj4+Pj4gICAgICog ICBQb2ludGVyIHRvIHRoZSBub24tdGVtcG9yYWwgZGVzdGluYXRpb24gb2YgdGhlIGRhdGEuDQo+ ID4gPiA+Pj4+PiAgICAgKiAgIE11c3QgYmUgMTYgYnl0ZSBhbGlnbmVkLg0KPiA+ID4gPj4+Pj4g ICAgICogQHBhcmFtIHNyYw0KPiA+ID4gPj4+Pj4gICAgICogICBQb2ludGVyIHRvIHRoZSBub24t dGVtcG9yYWwgc291cmNlIGRhdGEuDQo+ID4gPiA+Pj4+PiAgICAgKiAgIE11c3QgYmUgMTYgYnl0 ZSBhbGlnbmVkLg0KPiA+ID4gPj4+Pj4gICAgICogQHBhcmFtIGxlbg0KPiA+ID4gPj4+Pj4gICAg ICogICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weS4NCj4gPiA+ID4+Pj4+ICAgICAqICAgTXVzdCBi ZSBkaXZpc2libGUgYnkgMTYuDQo+ID4gPiA+Pj4+PiAgICAgKi8NCj4gPiA+ID4+Pj4+IF9fcnRl X2V4cGVyaW1lbnRhbA0KPiA+ID4gPj4+Pj4gc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUNCj4g PiA+ID4+Pj4+IF9fYXR0cmlidXRlX18oKF9fbm9ubnVsbF9fKDEsIDIpLCBfX2FjY2Vzc19fKHdy aXRlX29ubHksIDEsDQo+IDMpLA0KPiA+ID4gPj4+PiBfX2FjY2Vzc19fKHJlYWRfb25seSwgMiwg MykpKQ0KPiA+ID4gPj4+Pj4gdm9pZCBydGVfbWVtY3B5X250MTZhKHZvaWQgKiBfX3J0ZV9yZXN0 cmljdCBkc3QsIGNvbnN0IHZvaWQgKg0KPiA+ID4gPj4+PiBfX3J0ZV9yZXN0cmljdCBzcmMsIHNp emVfdCBsZW4pDQo+ID4gPiA+Pj4+PiB7DQo+ID4gPiA+Pj4+PiAgICAgICAgY29uc3Qgdm9pZCAq IGNvbnN0ICBlbmQgPSBSVEVfUFRSX0FERChzcmMsIGxlbik7DQo+ID4gPiA+Pj4+Pg0KPiA+ID4g Pj4+Pj4gICAgICAgIFJURV9BU1NFUlQocnRlX2lzX2FsaWduZWQoZHN0LCBzaXplb2YoX19tMTI4 aSkpKTsNCj4gPiA+ID4+Pj4+ICAgICAgICBSVEVfQVNTRVJUKHJ0ZV9pc19hbGlnbmVkKHNyYywg c2l6ZW9mKF9fbTEyOGkpKSk7DQo+ID4gPiA+Pj4+PiAgICAgICAgUlRFX0FTU0VSVChydGVfaXNf YWxpZ25lZChsZW4sIHNpemVvZihfX20xMjhpKSkpOw0KPiA+ID4gPj4+Pj4NCj4gPiA+ID4+Pj4+ ICAgICAgICAvKiBDb3B5IGxhcmdlIHBvcnRpb24gb2YgZGF0YS4gKi8NCj4gPiA+ID4+Pj4+ICAg ICAgICB3aGlsZSAoUlRFX1BUUl9ESUZGKGVuZCwgc3JjKSA+PSA0ICogc2l6ZW9mKF9fbTEyOGkp KQ0KPiB7DQo+ID4gPiA+Pj4+PiAgICAgICAgICAgIHJlZ2lzdGVyIF9fbTEyOGkgICAgeG1tMCwg eG1tMSwgeG1tMiwgeG1tMzsNCj4gPiA+ID4+Pj4+DQo+ID4gPiA+Pj4+PiAvKiBOb3RlOiBXb3Jr YXJvdW5kIGZvciBfbW1fc3RyZWFtX2xvYWRfc2kxMjgoKSBub3QgdGFraW5nIGENCj4gPiA+IGNv bnN0DQo+ID4gPiA+Pj4+IHBvaW50ZXIgYXMgcGFyYW1ldGVyLiAqLw0KPiA+ID4gPj4+Pj4gI3By YWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoDQo+ID4gPiA+Pj4+PiAjcHJhZ21hIEdDQyBkaWFnbm9z dGljIGlnbm9yZWQgIi1XZGlzY2FyZGVkLXF1YWxpZmllcnMiDQo+ID4gPiA+Pj4+PiAgICAgICAg ICAgIHhtbTAgPSBfbW1fc3RyZWFtX2xvYWRfc2kxMjgoUlRFX1BUUl9BREQoc3JjLCAwICoNCj4g PiA+ID4+Pj4gc2l6ZW9mKF9fbTEyOGkpKSk7DQo+ID4gPiA+Pj4+PiAgICAgICAgICAgIHhtbTEg PSBfbW1fc3RyZWFtX2xvYWRfc2kxMjgoUlRFX1BUUl9BREQoc3JjLCAxICoNCj4gPiA+ID4+Pj4g c2l6ZW9mKF9fbTEyOGkpKSk7DQo+ID4gPiA+Pj4+PiAgICAgICAgICAgIHhtbTIgPSBfbW1fc3Ry ZWFtX2xvYWRfc2kxMjgoUlRFX1BUUl9BREQoc3JjLCAyICoNCj4gPiA+ID4+Pj4gc2l6ZW9mKF9f bTEyOGkpKSk7DQo+ID4gPiA+Pj4+PiAgICAgICAgICAgIHhtbTMgPSBfbW1fc3RyZWFtX2xvYWRf c2kxMjgoUlRFX1BUUl9BREQoc3JjLCAzICoNCj4gPiA+ID4+Pj4gc2l6ZW9mKF9fbTEyOGkpKSk7 DQo+ID4gPiA+Pj4+PiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcA0KPiA+ID4gPj4+Pj4gICAg ICAgICAgICBfbW1fc3RyZWFtX3NpMTI4KFJURV9QVFJfQUREKGRzdCwgMCAqDQo+ID4gPiBzaXpl b2YoX19tMTI4aSkpLA0KPiA+ID4gPj4+PiB4bW0wKTsNCj4gPiA+ID4+Pj4+ICAgICAgICAgICAg X21tX3N0cmVhbV9zaTEyOChSVEVfUFRSX0FERChkc3QsIDEgKg0KPiA+ID4gc2l6ZW9mKF9fbTEy OGkpKSwNCj4gPiA+ID4+Pj4geG1tMSk7DQo+ID4gPiA+Pj4+PiAgICAgICAgICAgIF9tbV9zdHJl YW1fc2kxMjgoUlRFX1BUUl9BREQoZHN0LCAyICoNCj4gPiA+IHNpemVvZihfX20xMjhpKSksDQo+ ID4gPiA+Pj4+IHhtbTIpOw0KPiA+ID4gPj4+Pj4gICAgICAgICAgICBfbW1fc3RyZWFtX3NpMTI4 KFJURV9QVFJfQUREKGRzdCwgMyAqDQo+ID4gPiBzaXplb2YoX19tMTI4aSkpLA0KPiA+ID4gPj4+ PiB4bW0zKTsNCj4gPiA+ID4+Pj4+ICAgICAgICAgICAgc3JjID0gUlRFX1BUUl9BREQoc3JjLCA0 ICogc2l6ZW9mKF9fbTEyOGkpKTsNCj4gPiA+ID4+Pj4+ICAgICAgICAgICAgZHN0ID0gUlRFX1BU Ul9BREQoZHN0LCA0ICogc2l6ZW9mKF9fbTEyOGkpKTsNCj4gPiA+ID4+Pj4+ICAgICAgICB9DQo+ ID4gPiA+Pj4+Pg0KPiA+ID4gPj4+Pj4gICAgICAgIC8qIENvcHkgcmVtYWluaW5nIGRhdGEuICov DQo+ID4gPiA+Pj4+PiAgICAgICAgd2hpbGUgKHNyYyAhPSBlbmQpIHsNCj4gPiA+ID4+Pj4+ICAg ICAgICAgICAgcmVnaXN0ZXIgX19tMTI4aSAgICB4bW07DQo+ID4gPiA+Pj4+Pg0KPiA+ID4gPj4+ Pj4gLyogTm90ZTogV29ya2Fyb3VuZCBmb3IgX21tX3N0cmVhbV9sb2FkX3NpMTI4KCkgbm90IHRh a2luZyBhDQo+ID4gPiBjb25zdA0KPiA+ID4gPj4+PiBwb2ludGVyIGFzIHBhcmFtZXRlci4gKi8N Cj4gPiA+ID4+Pj4+ICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaA0KPiA+ID4gPj4+Pj4gI3By YWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2Rpc2NhcmRlZC1xdWFsaWZpZXJzIg0KPiA+ ID4gPj4+Pj4gICAgICAgICAgICB4bW0gPSBfbW1fc3RyZWFtX2xvYWRfc2kxMjgoc3JjKTsNCj4g PiA+ID4+Pj4+ICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wDQo+ID4gPiA+Pj4+PiAgICAgICAg ICAgIF9tbV9zdHJlYW1fc2kxMjgoZHN0LCB4bW0pOw0KPiA+ID4gPj4+Pj4gICAgICAgICAgICBz cmMgPSBSVEVfUFRSX0FERChzcmMsIHNpemVvZihfX20xMjhpKSk7DQo+ID4gPiA+Pj4+PiAgICAg ICAgICAgIGRzdCA9IFJURV9QVFJfQUREKGRzdCwgc2l6ZW9mKF9fbTEyOGkpKTsNCj4gPiA+ID4+ Pj4+ICAgICAgICB9DQo+ID4gPiA+Pj4+PiB9DQo+ID4gPiA+Pj4+Pg0KPiA+ID4gPj4+Pj4gLyoq DQo+ID4gPiA+Pj4+PiAgICAgKiBAd2FybmluZw0KPiA+ID4gPj4+Pj4gICAgICogQGIgRVhQRVJJ TUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3INCj4gbm90aWNlLg0KPiA+ ID4gPj4+Pj4gICAgICoNCj4gPiA+ID4+Pj4+ICAgICAqIENvcHkgZGF0YSBpbiBibG9ja3Mgb2Yg NCBieXRlIGZyb20gYWxpZ25lZCBub24tdGVtcG9yYWwNCj4gPiA+IHNvdXJjZQ0KPiA+ID4gPj4+ Pj4gICAgICogdG8gYWxpZ25lZCBub24tdGVtcG9yYWwgZGVzdGluYXRpb24uDQo+ID4gPiA+Pj4+ PiAgICAgKg0KPiA+ID4gPj4+Pj4gICAgICogQHBhcmFtIGRzdA0KPiA+ID4gPj4+Pj4gICAgICog ICBQb2ludGVyIHRvIHRoZSBub24tdGVtcG9yYWwgZGVzdGluYXRpb24gb2YgdGhlIGRhdGEuDQo+ ID4gPiA+Pj4+PiAgICAgKiAgIE11c3QgYmUgNCBieXRlIGFsaWduZWQuDQo+ID4gPiA+Pj4+PiAg ICAgKiBAcGFyYW0gc3JjDQo+ID4gPiA+Pj4+PiAgICAgKiAgIFBvaW50ZXIgdG8gdGhlIG5vbi10 ZW1wb3JhbCBzb3VyY2UgZGF0YS4NCj4gPiA+ID4+Pj4+ICAgICAqICAgTXVzdCBiZSA0IGJ5dGUg YWxpZ25lZC4NCj4gPiA+ID4+Pj4+ICAgICAqIEBwYXJhbSBsZW4NCj4gPiA+ID4+Pj4+ICAgICAq ICAgTnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkuDQo+ID4gPiA+Pj4+PiAgICAgKiAgIE11c3QgYmUg ZGl2aXNpYmxlIGJ5IDQuDQo+ID4gPiA+Pj4+PiAgICAgKi8NCj4gPiA+ID4+Pj4+IF9fcnRlX2V4 cGVyaW1lbnRhbA0KPiA+ID4gPj4+Pj4gc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUNCj4gPiA+ ID4+Pj4+IF9fYXR0cmlidXRlX18oKF9fbm9ubnVsbF9fKDEsIDIpLCBfX2FjY2Vzc19fKHdyaXRl X29ubHksIDEsDQo+IDMpLA0KPiA+ID4gPj4+PiBfX2FjY2Vzc19fKHJlYWRfb25seSwgMiwgMykp KQ0KPiA+ID4gPj4+Pj4gdm9pZCBydGVfbWVtY3B5X250NGEodm9pZCAqIF9fcnRlX3Jlc3RyaWN0 IGRzdCwgY29uc3Qgdm9pZCAqDQo+ID4gPiA+Pj4+IF9fcnRlX3Jlc3RyaWN0IHNyYywgc2l6ZV90 IGxlbikNCj4gPiA+ID4+Pj4+IHsNCj4gPiA+ID4+Pj4+ICAgICAgICBpbnQzMl90ICAgICAgICAg ICAgIGJ1ZltzaXplb2YoX19tMTI4aSkgLw0KPiBzaXplb2YoaW50MzJfdCldDQo+ID4gPiA+Pj4+ IF9fcnRlX2FsaWduZWQoc2l6ZW9mKF9fbTEyOGkpKTsNCj4gPiA+ID4+Pj4+ICAgICAgICAvKiog QWRkcmVzcyBvZiBzb3VyY2UgZGF0YSwgcm91bmRlZCBkb3duIHRvIGFjaGlldmUNCj4gPiA+ID4+ IGFsaWdubWVudC4NCj4gPiA+ID4+Pj4gKi8NCj4gPiA+ID4+Pj4+ICAgICAgICBjb25zdCB2b2lk ICogICAgICAgIHNyY2EgPSBSVEVfUFRSX0FMSUdOX0ZMT09SKHNyYywNCj4gPiA+ID4+Pj4gc2l6 ZW9mKF9fbTEyOGkpKTsNCj4gPiA+ID4+Pj4+ICAgICAgICAvKiogQWRkcmVzcyBvZiBlbmQgb2Yg c291cmNlIGRhdGEsIHJvdW5kZWQgZG93biB0bw0KPiBhY2hpZXZlDQo+ID4gPiA+Pj4+IGFsaWdu bWVudC4gKi8NCj4gPiA+ID4+Pj4+ICAgICAgICBjb25zdCB2b2lkICogY29uc3QgIHNyY2VuZGEg PQ0KPiA+ID4gPj4+PiBSVEVfUFRSX0FMSUdOX0ZMT09SKFJURV9QVFJfQUREKHNyYywgbGVuKSwg c2l6ZW9mKF9fbTEyOGkpKTsNCj4gPiA+ID4+Pj4+ICAgICAgICBjb25zdCBpbnQgICAgICAgICAg IG9mZnNldCA9ICBSVEVfUFRSX0RJRkYoc3JjLCBzcmNhKQ0KPiAvDQo+ID4gPiA+Pj4+IHNpemVv ZihpbnQzMl90KTsNCj4gPiA+ID4+Pj4+ICAgICAgICByZWdpc3RlciBfX20xMjhpICAgIHhtbTA7 DQo+ID4gPiA+Pj4+Pg0KPiA+ID4gPj4+Pj4gICAgICAgIFJURV9BU1NFUlQocnRlX2lzX2FsaWdu ZWQoZHN0LCBzaXplb2YoaW50MzJfdCkpKTsNCj4gPiA+ID4+Pj4+ICAgICAgICBSVEVfQVNTRVJU KHJ0ZV9pc19hbGlnbmVkKHNyYywgc2l6ZW9mKGludDMyX3QpKSk7DQo+ID4gPiA+Pj4+PiAgICAg ICAgUlRFX0FTU0VSVChydGVfaXNfYWxpZ25lZChsZW4sIHNpemVvZihpbnQzMl90KSkpOw0KPiA+ ID4gPj4+Pj4NCj4gPiA+ID4+Pj4+ICAgICAgICBpZiAodW5saWtlbHkobGVuID09IDApKSByZXR1 cm47DQo+ID4gPiA+Pj4+Pg0KPiA+ID4gPj4+Pj4gICAgICAgIC8qIENvcHkgZmlyc3QsIG5vbi1f X20xMjhpIGFsaWduZWQsIHBhcnQgb2Ygc291cmNlDQo+IGRhdGEuDQo+ID4gPiAqLw0KPiA+ID4g Pj4+Pj4gICAgICAgIGlmIChvZmZzZXQpIHsNCj4gPiA+ID4+Pj4+IC8qIE5vdGU6IFdvcmthcm91 bmQgZm9yIF9tbV9zdHJlYW1fbG9hZF9zaTEyOCgpIG5vdCB0YWtpbmcgYQ0KPiA+ID4gY29uc3QN Cj4gPiA+ID4+Pj4gcG9pbnRlciBhcyBwYXJhbWV0ZXIuICovDQo+ID4gPiA+Pj4+PiAjcHJhZ21h IEdDQyBkaWFnbm9zdGljIHB1c2gNCj4gPiA+ID4+Pj4+ICNwcmFnbWEgR0NDIGRpYWdub3N0aWMg aWdub3JlZCAiLVdkaXNjYXJkZWQtcXVhbGlmaWVycyINCj4gPiA+ID4+Pj4+ICAgICAgICAgICAg eG1tMCA9IF9tbV9zdHJlYW1fbG9hZF9zaTEyOChzcmNhKTsNCj4gPiA+ID4+Pj4+ICAgICAgICAg ICAgX21tX3N0b3JlX3NpMTI4KCh2b2lkICopYnVmLCB4bW0wKTsNCj4gPiA+ID4+Pj4+ICNwcmFn bWEgR0NDIGRpYWdub3N0aWMgcG9wDQo+ID4gPiA+Pj4+PiAgICAgICAgICAgIHN3aXRjaCAob2Zm c2V0KSB7DQo+ID4gPiA+Pj4+PiAgICAgICAgICAgICAgICBjYXNlIDE6DQo+ID4gPiA+Pj4+PiAg ICAgICAgICAgICAgICAgICAgX21tX3N0cmVhbV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMCAqDQo+ ID4gPiA+Pj4+IHNpemVvZihpbnQzMl90KSksIGJ1ZlsxXSk7DQo+ID4gPiA+Pj4+PiAgICAgICAg ICAgICAgICAgICAgaWYgKHVubGlrZWx5KGxlbiA9PSAxICogc2l6ZW9mKGludDMyX3QpKSkNCj4g PiA+IHJldHVybjsNCj4gPiA+ID4+Pj4+ICAgICAgICAgICAgICAgICAgICBfbW1fc3RyZWFtX3Np MzIoUlRFX1BUUl9BREQoZHN0LCAxICoNCj4gPiA+ID4+Pj4gc2l6ZW9mKGludDMyX3QpKSwgYnVm WzJdKTsNCj4gPiA+ID4+Pj4+ICAgICAgICAgICAgICAgICAgICBpZiAodW5saWtlbHkobGVuID09 IDIgKiBzaXplb2YoaW50MzJfdCkpKQ0KPiA+ID4gcmV0dXJuOw0KPiA+ID4gPj4+Pj4gICAgICAg ICAgICAgICAgICAgIF9tbV9zdHJlYW1fc2kzMihSVEVfUFRSX0FERChkc3QsIDIgKg0KPiA+ID4g Pj4+PiBzaXplb2YoaW50MzJfdCkpLCBidWZbM10pOw0KPiA+ID4gPj4+Pj4gICAgICAgICAgICAg ICAgICAgIGJyZWFrOw0KPiA+ID4gPj4+Pj4gICAgICAgICAgICAgICAgY2FzZSAyOg0KPiA+ID4g Pj4+Pj4gICAgICAgICAgICAgICAgICAgIF9tbV9zdHJlYW1fc2kzMihSVEVfUFRSX0FERChkc3Qs IDAgKg0KPiA+ID4gPj4+PiBzaXplb2YoaW50MzJfdCkpLCBidWZbMl0pOw0KPiA+ID4gPj4+Pj4g ICAgICAgICAgICAgICAgICAgIGlmICh1bmxpa2VseShsZW4gPT0gMSAqIHNpemVvZihpbnQzMl90 KSkpDQo+ID4gPiByZXR1cm47DQo+ID4gPiA+Pj4+PiAgICAgICAgICAgICAgICAgICAgX21tX3N0 cmVhbV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMSAqDQo+ID4gPiA+Pj4+IHNpemVvZihpbnQzMl90 KSksIGJ1ZlszXSk7DQo+ID4gPiA+Pj4+PiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4g PiA+Pj4+PiAgICAgICAgICAgICAgICBjYXNlIDM6DQo+ID4gPiA+Pj4+PiAgICAgICAgICAgICAg ICAgICAgX21tX3N0cmVhbV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMCAqDQo+ID4gPiA+Pj4+IHNp emVvZihpbnQzMl90KSksIGJ1ZlszXSk7DQo+ID4gPiA+Pj4+PiAgICAgICAgICAgICAgICAgICAg YnJlYWs7DQo+ID4gPiA+Pj4+PiAgICAgICAgICAgIH0NCj4gPiA+ID4+Pj4+ICAgICAgICAgICAg c3JjYSA9IFJURV9QVFJfQUREKHNyY2EsICg0IC0gb2Zmc2V0KSAqDQo+ID4gPiBzaXplb2YoaW50 MzJfdCkpOw0KPiA+ID4gPj4+Pj4gICAgICAgICAgICBkc3QgPSBSVEVfUFRSX0FERChkc3QsICg0 IC0gb2Zmc2V0KSAqDQo+ID4gPiBzaXplb2YoaW50MzJfdCkpOw0KPiA+ID4gPj4+Pj4gICAgICAg IH0NCj4gPiA+ID4+Pj4+DQo+ID4gPiA+Pj4+PiAgICAgICAgLyogQ29weSBtaWRkbGUsIF9fbTEy OGkgYWxpZ25lZCwgcGFydCBvZiBzb3VyY2UgZGF0YS4NCj4gKi8NCj4gPiA+ID4+Pj4+ICAgICAg ICB3aGlsZSAoc3JjYSAhPSBzcmNlbmRhKSB7DQo+ID4gPiA+Pj4+PiAvKiBOb3RlOiBXb3JrYXJv dW5kIGZvciBfbW1fc3RyZWFtX2xvYWRfc2kxMjgoKSBub3QgdGFraW5nIGENCj4gPiA+IGNvbnN0 DQo+ID4gPiA+Pj4+IHBvaW50ZXIgYXMgcGFyYW1ldGVyLiAqLw0KPiA+ID4gPj4+Pj4gI3ByYWdt YSBHQ0MgZGlhZ25vc3RpYyBwdXNoDQo+ID4gPiA+Pj4+PiAjcHJhZ21hIEdDQyBkaWFnbm9zdGlj IGlnbm9yZWQgIi1XZGlzY2FyZGVkLXF1YWxpZmllcnMiDQo+ID4gPiA+Pj4+PiAgICAgICAgICAg IHhtbTAgPSBfbW1fc3RyZWFtX2xvYWRfc2kxMjgoc3JjYSk7DQo+ID4gPiA+Pj4+PiAjcHJhZ21h IEdDQyBkaWFnbm9zdGljIHBvcA0KPiA+ID4gPj4+Pj4gICAgICAgICAgICBfbW1fc3RvcmVfc2kx MjgoKHZvaWQgKilidWYsIHhtbTApOw0KPiA+ID4gPj4+Pj4gICAgICAgICAgICBfbW1fc3RyZWFt X3NpMzIoUlRFX1BUUl9BREQoZHN0LCAwICoNCj4gc2l6ZW9mKGludDMyX3QpKSwNCj4gPiA+ID4+ Pj4gYnVmWzBdKTsNCj4gPiA+ID4+Pj4+ICAgICAgICAgICAgX21tX3N0cmVhbV9zaTMyKFJURV9Q VFJfQUREKGRzdCwgMSAqDQo+IHNpemVvZihpbnQzMl90KSksDQo+ID4gPiA+Pj4+IGJ1ZlsxXSk7 DQo+ID4gPiA+Pj4+PiAgICAgICAgICAgIF9tbV9zdHJlYW1fc2kzMihSVEVfUFRSX0FERChkc3Qs IDIgKg0KPiBzaXplb2YoaW50MzJfdCkpLA0KPiA+ID4gPj4+PiBidWZbMl0pOw0KPiA+ID4gPj4+ Pj4gICAgICAgICAgICBfbW1fc3RyZWFtX3NpMzIoUlRFX1BUUl9BREQoZHN0LCAzICoNCj4gc2l6 ZW9mKGludDMyX3QpKSwNCj4gPiA+ID4+Pj4gYnVmWzNdKTsNCj4gPiA+ID4+Pj4+ICAgICAgICAg ICAgc3JjYSA9IFJURV9QVFJfQUREKHNyY2EsIHNpemVvZihfX20xMjhpKSk7DQo+ID4gPiA+Pj4+ PiAgICAgICAgICAgIGRzdCA9IFJURV9QVFJfQUREKGRzdCwgNCAqIHNpemVvZihpbnQzMl90KSk7 DQo+ID4gPiA+Pj4+PiAgICAgICAgfQ0KPiA+ID4gPj4+Pj4NCj4gPiA+ID4+Pj4+ICAgICAgICAv KiBDb3B5IGxhc3QsIG5vbi1fX20xMjhpIGFsaWduZWQsIHBhcnQgb2Ygc291cmNlDQo+IGRhdGEu ICovDQo+ID4gPiA+Pj4+PiAgICAgICAgaWYgKFJURV9QVFJfRElGRihzcmNhLCBzcmMpICE9IDQp IHsNCj4gPiA+ID4+Pj4+IC8qIE5vdGU6IFdvcmthcm91bmQgZm9yIF9tbV9zdHJlYW1fbG9hZF9z aTEyOCgpIG5vdCB0YWtpbmcgYQ0KPiA+ID4gY29uc3QNCj4gPiA+ID4+Pj4gcG9pbnRlciBhcyBw YXJhbWV0ZXIuICovDQo+ID4gPiA+Pj4+PiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gNCj4g PiA+ID4+Pj4+ICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkaXNjYXJkZWQtcXVh bGlmaWVycyINCj4gPiA+ID4+Pj4+ICAgICAgICAgICAgeG1tMCA9IF9tbV9zdHJlYW1fbG9hZF9z aTEyOChzcmNhKTsNCj4gPiA+ID4+Pj4+ICAgICAgICAgICAgX21tX3N0b3JlX3NpMTI4KCh2b2lk ICopYnVmLCB4bW0wKTsNCj4gPiA+ID4+Pj4+ICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wDQo+ ID4gPiA+Pj4+PiAgICAgICAgICAgIHN3aXRjaCAob2Zmc2V0KSB7DQo+ID4gPiA+Pj4+PiAgICAg ICAgICAgICAgICBjYXNlIDE6DQo+ID4gPiA+Pj4+PiAgICAgICAgICAgICAgICAgICAgX21tX3N0 cmVhbV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMCAqDQo+ID4gPiA+Pj4+IHNpemVvZihpbnQzMl90 KSksIGJ1ZlswXSk7DQo+ID4gPiA+Pj4+PiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4g PiA+Pj4+PiAgICAgICAgICAgICAgICBjYXNlIDI6DQo+ID4gPiA+Pj4+PiAgICAgICAgICAgICAg ICAgICAgX21tX3N0cmVhbV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMCAqDQo+ID4gPiA+Pj4+IHNp emVvZihpbnQzMl90KSksIGJ1ZlswXSk7DQo+ID4gPiA+Pj4+PiAgICAgICAgICAgICAgICAgICAg aWYgKHVubGlrZWx5KFJURV9QVFJfRElGRihzcmNhLCBzcmMpID09IDENCj4gKg0KPiA+ID4gPj4+ PiBzaXplb2YoaW50MzJfdCkpKSByZXR1cm47DQo+ID4gPiA+Pj4+PiAgICAgICAgICAgICAgICAg ICAgX21tX3N0cmVhbV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMSAqDQo+ID4gPiA+Pj4+IHNpemVv ZihpbnQzMl90KSksIGJ1ZlsxXSk7DQo+ID4gPiA+Pj4+PiAgICAgICAgICAgICAgICAgICAgYnJl YWs7DQo+ID4gPiA+Pj4+PiAgICAgICAgICAgICAgICBjYXNlIDM6DQo+ID4gPiA+Pj4+PiAgICAg ICAgICAgICAgICAgICAgX21tX3N0cmVhbV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMCAqDQo+ID4g PiA+Pj4+IHNpemVvZihpbnQzMl90KSksIGJ1ZlswXSk7DQo+ID4gPiA+Pj4+PiAgICAgICAgICAg ICAgICAgICAgaWYgKHVubGlrZWx5KFJURV9QVFJfRElGRihzcmNhLCBzcmMpID09IDENCj4gKg0K PiA+ID4gPj4+PiBzaXplb2YoaW50MzJfdCkpKSByZXR1cm47DQo+ID4gPiA+Pj4+PiAgICAgICAg ICAgICAgICAgICAgX21tX3N0cmVhbV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMSAqDQo+ID4gPiA+ Pj4+IHNpemVvZihpbnQzMl90KSksIGJ1ZlsxXSk7DQo+ID4gPiA+Pj4+PiAgICAgICAgICAgICAg ICAgICAgaWYgKHVubGlrZWx5KFJURV9QVFJfRElGRihzcmNhLCBzcmMpID09IDINCj4gKg0KPiA+ ID4gPj4+PiBzaXplb2YoaW50MzJfdCkpKSByZXR1cm47DQo+ID4gPiA+Pj4+PiAgICAgICAgICAg ICAgICAgICAgX21tX3N0cmVhbV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMiAqDQo+ID4gPiA+Pj4+ IHNpemVvZihpbnQzMl90KSksIGJ1ZlsyXSk7DQo+ID4gPiA+Pj4+PiAgICAgICAgICAgICAgICAg ICAgYnJlYWs7DQo+ID4gPiA+Pj4+PiAgICAgICAgICAgIH0NCj4gPiA+ID4+Pj4+ICAgICAgICB9 DQo+ID4gPiA+Pj4+PiB9DQo+ID4gPiA+Pj4+Pg0KPiA+ID4gPj4+Pg0KPiA+ID4gPj4+DQo+ID4g PiA+Pg0KPiA+ID4gPg0KPiA+ID4NCg0K