From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.115; helo=mga14.intel.com; envelope-from=star.zeng@intel.com; receiver=edk2-devel@lists.01.org Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) (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 CF3DE2111B76D for ; Wed, 5 Sep 2018 03:02:23 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 05 Sep 2018 03:02:23 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,333,1531810800"; d="scan'208";a="87802940" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by orsmga001.jf.intel.com with ESMTP; 05 Sep 2018 03:02:22 -0700 Received: from shsmsx151.ccr.corp.intel.com (10.239.6.50) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 5 Sep 2018 03:02:22 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.226]) by SHSMSX151.ccr.corp.intel.com ([169.254.3.16]) with mapi id 14.03.0319.002; Wed, 5 Sep 2018 18:02:20 +0800 From: "Zeng, Star" To: "Ni, Ruiyu" , "Yao, Jiewen" , "Kinney, Michael D" CC: "edk2-devel@lists.01.org" , Younas khan , "Gao, Liming" , "Zeng, Star" Thread-Topic: [edk2] [PATCH 1/6] MdePkg UefiLib: Add new EfiFindAcpiTableBySignature() API Thread-Index: AQHUQR3tMsGxdk8RAEWjSOjGEFnM36TZO1YAgABL1gCAAG5UgIAD48yA//+m24CAAInYYP//iHIAgAAFDYCAA+RzcA== Date: Wed, 5 Sep 2018 10:02:19 +0000 Message-ID: <0C09AFA07DD0434D9E2A0C6AEB0483103BBB560C@shsmsx102.ccr.corp.intel.com> References: <1535714959-73472-1-git-send-email-star.zeng@intel.com> <1535714959-73472-2-git-send-email-star.zeng@intel.com> <74D8A39837DF1E4DA445A8C0B3885C503AD36A49@shsmsx102.ccr.corp.intel.com> <74D8A39837DF1E4DA445A8C0B3885C503AD37F11@shsmsx102.ccr.corp.intel.com> <0C09AFA07DD0434D9E2A0C6AEB0483103BBB49F2@shsmsx102.ccr.corp.intel.com> <734D49CCEBEEF84792F5B80ED585239D5BDEFCAF@SHSMSX104.ccr.corp.intel.com> <0C09AFA07DD0434D9E2A0C6AEB0483103BBB4B68@shsmsx102.ccr.corp.intel.com> <74D8A39837DF1E4DA445A8C0B3885C503AD3BFF0@shsmsx102.ccr.corp.intel.com> <734D49CCEBEEF84792F5B80ED585239D5BDEFE1A@SHSMSX104.ccr.corp.intel.com> In-Reply-To: <734D49CCEBEEF84792F5B80ED585239D5BDEFE1A@SHSMSX104.ccr.corp.intel.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH 1/6] MdePkg UefiLib: Add new EfiFindAcpiTableBySignature() API X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 05 Sep 2018 10:02:24 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 QWZ0ZXIgb2ZmbGluZSBkaXNjdXNzaW9uIHdpdGggSmlld2VuIGFuZCBSYXksIHdlIGFncmVlIHRv IGZvbGxvdyBTMSB0aGF0IHdpbGwgbWFrZSB0aGUgY29uc3VtZXIgZWFzaWVyIGZvciBzaW5nbGUg QUNQSSB0YWJsZSBjYXNlLg0KSSB3aWxsIHVwZGF0ZSBwYXRjaGVzIGFuZCBzZW5kIG5ldyBWMiBz ZXJpZXMuDQoNClRoYW5rcyBmb3IgYWxsIHRoZSBmZWVkYmFja3MuDQoNClN0YXINCi0tLS0tT3Jp Z2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBOaSwgUnVpeXUgDQpTZW50OiBNb25kYXksIFNlcHRl bWJlciAzLCAyMDE4IDI6MzMgUE0NClRvOiBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5j b20+OyBaZW5nLCBTdGFyIDxzdGFyLnplbmdAaW50ZWwuY29tPjsgS2lubmV5LCBNaWNoYWVsIEQg PG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPg0KQ2M6IGVkazItZGV2ZWxAbGlzdHMuMDEub3Jn OyBZb3VuYXMga2hhbiA8cG1keW91bmFza2hhbjc4NkBnbWFpbC5jb20+OyBHYW8sIExpbWluZyA8 bGltaW5nLmdhb0BpbnRlbC5jb20+DQpTdWJqZWN0OiBSRTogW2VkazJdIFtQQVRDSCAxLzZdIE1k ZVBrZyBVZWZpTGliOiBBZGQgbmV3IEVmaUZpbmRBY3BpVGFibGVCeVNpZ25hdHVyZSgpIEFQSQ0K DQpJIHByZWZlciBTMi4NClNpbmdsZSBpbnRlcmZhY2UgaXMgbW9yZSBlYXN5IGZvciBjb25zdW1l ciB0byByZW1lbWJlciBob3cgdG8gdXNlLg0KDQpUaGFua3MvUmF5DQoNCj4gLS0tLS1PcmlnaW5h bCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogWWFvLCBKaWV3ZW4NCj4gU2VudDogTW9uZGF5LCBTZXB0 ZW1iZXIgMywgMjAxOCAyOjE1IFBNDQo+IFRvOiBaZW5nLCBTdGFyIDxzdGFyLnplbmdAaW50ZWwu Y29tPjsgTmksIFJ1aXl1IDxydWl5dS5uaUBpbnRlbC5jb20+OyANCj4gS2lubmV5LCBNaWNoYWVs IEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPg0KPiBDYzogZWRrMi1kZXZlbEBsaXN0cy4w MS5vcmc7IFlvdW5hcyBraGFuIDxwbWR5b3VuYXNraGFuNzg2QGdtYWlsLmNvbT47IA0KPiBHYW8s IExpbWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJFOiBbZWRrMl0gW1BB VENIIDEvNl0gTWRlUGtnIFVlZmlMaWI6IEFkZCBuZXcNCj4gRWZpRmluZEFjcGlUYWJsZUJ5U2ln bmF0dXJlKCkgQVBJDQo+IA0KPiBJIHByZWZlciBTMS4NCj4gSSBiZWxpZXZlIHRoYXQgdGhlIEVm aUxvY2F0ZU5leHRBY3BpVGFibGUoKSBjYW4gYWxzbyBiZSB1c2VkIGluIFMxLg0KPiANCj4gDQo+ ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiBGcm9tOiBaZW5nLCBTdGFyDQo+ID4g U2VudDogTW9uZGF5LCBTZXB0ZW1iZXIgMywgMjAxOCAyOjEyIFBNDQo+ID4gVG86IE5pLCBSdWl5 dSA8cnVpeXUubmlAaW50ZWwuY29tPjsgWWFvLCBKaWV3ZW4gDQo+ID4gPGppZXdlbi55YW9AaW50 ZWwuY29tPjsgS2lubmV5LCBNaWNoYWVsIEQgDQo+ID4gPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwu Y29tPg0KPiA+IENjOiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzsgWW91bmFzIGtoYW4NCj4gPHBt ZHlvdW5hc2toYW43ODZAZ21haWwuY29tPjsNCj4gPiBHYW8sIExpbWluZyA8bGltaW5nLmdhb0Bp bnRlbC5jb20+OyBaZW5nLCBTdGFyIDxzdGFyLnplbmdAaW50ZWwuY29tPg0KPiA+IFN1YmplY3Q6 IFJFOiBbZWRrMl0gW1BBVENIIDEvNl0gTWRlUGtnIFVlZmlMaWI6IEFkZCBuZXcNCj4gPiBFZmlG aW5kQWNwaVRhYmxlQnlTaWduYXR1cmUoKSBBUEkNCj4gPg0KPiA+IFRoYW5rcy4NCj4gPiBPaywg cGxlYXNlIGhlbHAgYW5kIHdlIGNhbiBoYXZlIGdvb2QgYW5kIGZsZXhpYmxlIGludGVyZmFjZShz KSBmb3IgDQo+ID4gYm90aCBwcm9kdWNlciBhbmQgY29uc3VtZXIuDQo+ID4NCj4gPiBGaXJzdCwg dGhlcmUgYXJlIHR3byBjYXNlcyB3ZSBuZWVkIHRvIGNvbnNpZGVyLg0KPiA+IDEuIFNpbmdsZSB0 YWJsZSwgbGlrZSBGQURULCBGQUNTLCBEU0RULCBldGMuDQo+ID4gMi4gTXVsdGlwbGUgdGFibGVz LCBsaWtlIFNTRFQsIGV0Yy4NCj4gPg0KPiA+IFRoZW4sIHdlIGhhdmUgdHdvIHNvbHV0aW9ucy4N Cj4gPiBTMToNCj4gPiBPbmUgaW50ZXJmYWNlIGZvciBzaW5nbGUgdGFibGUgY2FzZSwgY29uc3Vt ZXIgb25seSBuZWVkcyBpbnB1dCANCj4gPiBTaWduYXR1cmUsIGhhcyBubyBuZWVkIGlucHV0IHBy ZXZpb3VzIHJldHVybmVkIFRhYmxlLiBMaWtlDQo+IEdldEZpcnN0R3VpZEhvYj8NCj4gPiBPbmUg aW50ZXJmYWNlIGZvciBtdWx0aXBsZSB0YWJsZSBjYXNlLCBjb25zdW1lciBuZWVkcyBpbnB1dCAN Cj4gPiBTaWduYXR1cmUgYW5kIHByZXZpb3VzIHJldHVybmVkIFRhYmxlLiBMaWtlIEdldE5leHRH dWlkSG9iPyBDb3VsZCB3ZSANCj4gPiBhZGQgaXQgbGF0ZXIgYmFzZWQgb24gcmVhbCByZXF1ZXN0 Pw0KPiA+IFMyOg0KPiA+IE9uZSBpbnRlcmZhY2UgZm9yIGJvdGggc2luZ2xlIHRhYmxlIGFuZCBt dWx0aXBsZSB0YWJsZSBjYXNlcywgDQo+ID4gY29uc3VtZXIgbmVlZHMgaW5wdXQgU2lnbmF0dXJl IGFuZCBwcmV2aW91cyByZXR1cm5lZCBUYWJsZS4gRG9lcyANCj4gPiBjb25zdW1lciBuZWVkIGlu cHV0IHRoZSB0YWJsZSBoZWFkZXIgc3RvcmVkIGluIGNvbmZpZ3VyYXRpb24gdGFibGUgDQo+ID4g YnkgaXRzZWxmKGdldHRpbmcNCj4gY29uZmlndXJhdGlvbiB0YWJsZSk/DQo+ID4NCj4gPg0KPiA+ IElmIHdlIGxpa2UgUzIsIHRoZSBpbnRlcmZhY2Ugc2hvdWxkIGJlIGxpa2UgYmVsb3c/DQo+ID4N Cj4gPiAvKioNCj4gPiAgIFRoaXMgZnVuY3Rpb24gbG9jYXRlcyBuZXh0IEFDUEkgdGFibGUgYmFz ZWQgb24gU2lnbmF0dXJlIGFuZCANCj4gPiBwcmV2aW91cyByZXR1cm5lZCBUYWJsZS4NCj4gPiAg IElmIHRoZSBpbnB1dCBwcmV2aW91cyByZXR1cm5lZCBUYWJsZSBpcyBOVUxMLCB0aGlzIGZ1bmN0 aW9uIHdpbGwgDQo+ID4gbG9jYXRlIG5leHQNCj4gdGFibGUNCj4gPiAgIGluIGdFZmlBY3BpMjBU YWJsZUd1aWQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gdGFibGUgZmlyc3QsIGFuZCB0aGVuIA0KPiA+ IGdFZmlBY3BpMTBUYWJsZUd1aWQNCj4gPiAgIHN5c3RlbSBjb25maWd1cmF0aW9uIHRhYmxlLg0K PiA+ICAgSWYgdGhlIGlucHV0IHByZXZpb3VzIHJldHVybmVkIFRhYmxlIGlzIG5vdCBOVUxMIGFu ZCBjb3VsZCBiZSBsb2NhdGVkIGluDQo+ID4gICBnRWZpQWNwaTIwVGFibGVHdWlkIHN5c3RlbSBj b25maWd1cmF0aW9uIHRhYmxlLCB0aGlzIGZ1bmN0aW9uIHdpbGwgDQo+ID4ganVzdCBsb2NhdGUg bmV4dA0KPiA+ICAgdGFibGUgaW4gZ0VmaUFjcGkyMFRhYmxlR3VpZCBzeXN0ZW0gY29uZmlndXJh dGlvbiB0YWJsZSwgb3RoZXJ3aXNlIA0KPiA+IGdFZmlBY3BpMTBUYWJsZUd1aWQNCj4gPiAgIHN5 c3RlbSBjb25maWd1cmF0aW9uIHRhYmxlLg0KPiA+DQo+ID4gICBAcGFyYW0gU2lnbmF0dXJlICBB Q1BJIHRhYmxlIHNpZ25hdHVyZS4NCj4gPiAgIEBwYXJhbSBUYWJsZSAgICAgIFBvaW50ZXIgdG8g cHJldmlvdXMgcmV0dXJuZWQgVGFibGUsIG9yIE5VTEwgdG8gbG9jYXRlDQo+ID4gZmlyc3QgdGFi bGUuDQo+ID4NCj4gPiAgIEByZXR1cm4gTmV4dCBBQ1BJIHRhYmxlIG9yIE5VTEwgaWYgbm90IGZv dW5kLg0KPiA+DQo+ID4gKiovDQo+ID4gRUZJX0FDUElfQ09NTU9OX0hFQURFUiAqDQo+ID4gRUZJ QVBJDQo+ID4gRWZpTG9jYXRlTmV4dEFjcGlUYWJsZSAoDQo+ID4gICBJTiBVSU5UMzIgICAgICAg ICAgICAgICAgICBTaWduYXR1cmUsDQo+ID4gICBJTiBFRklfQUNQSV9DT01NT05fSEVBREVSICAq VGFibGUNCj4gPiAgICkNCj4gPg0KPiA+DQo+ID4NCj4gPiBUaGFua3MsDQo+ID4gU3Rhcg0KPiA+ IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gRnJvbTogTmksIFJ1aXl1DQo+ID4gU2Vu dDogTW9uZGF5LCBTZXB0ZW1iZXIgMywgMjAxOCAxOjA5IFBNDQo+ID4gVG86IFplbmcsIFN0YXIg PHN0YXIuemVuZ0BpbnRlbC5jb20+OyBZYW8sIEppZXdlbiANCj4gPiA8amlld2VuLnlhb0BpbnRl bC5jb20+OyBLaW5uZXksIE1pY2hhZWwgRCANCj4gPiA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5j b20+DQo+ID4gQ2M6IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnOyBZb3VuYXMga2hhbg0KPiA8cG1k eW91bmFza2hhbjc4NkBnbWFpbC5jb20+Ow0KPiA+IEdhbywgTGltaW5nIDxsaW1pbmcuZ2FvQGlu dGVsLmNvbT4NCj4gPiBTdWJqZWN0OiBSRTogW2VkazJdIFtQQVRDSCAxLzZdIE1kZVBrZyBVZWZp TGliOiBBZGQgbmV3DQo+ID4gRWZpRmluZEFjcGlUYWJsZUJ5U2lnbmF0dXJlKCkgQVBJDQo+ID4N Cj4gPiBUaGF0J3MgZmluZSB0byBiZSBpbiBVZWZpTGliLiBJdCdzIGFscmVhZHkgYSBjb21ibyBs aWJyYXJ5Lg0KPiA+DQo+ID4gQnV0IEkgZG8gcmVjb21tZW5kIHdlIHRoaW5rIGFib3V0IGhvdyB0 byBoYW5kbGUgbXVsdGlwbGUgdGFibGVzIHdpdGggDQo+ID4gc2FtZSBzaWduYXR1cmUuDQo+ID4g V2hlbiB3ZSBhcmUgYWRkaW5nIG5ldyBBUElzLCB3ZSBub3Qgb25seSBuZWVkIHRvIGV2YWx1YXRl IHRoZSANCj4gPiBleGlzdGluZyByZWFsIGNhc2UsIGJ1dCBhbHNvIHdlIG5lZWQgdG8gZ2VuZXJh bGl6ZSB0aGUgcmVhbCBjYXNlcyANCj4gPiBhbmQgdHJ5IHRvIHRoaW5rIGFib3V0IHRoZSBtb3Jl IGZsZXhpYmxlIGludGVyZmFjZS4NCj4gPg0KPiA+DQo+ID4gVGhhbmtzL1JheQ0KPiA+DQo+ID4g PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gRnJvbTogWmVuZywgU3Rhcg0KPiA+ ID4gU2VudDogTW9uZGF5LCBTZXB0ZW1iZXIgMywgMjAxOCAxMToyNiBBTQ0KPiA+ID4gVG86IFlh bywgSmlld2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbT47IE5pLCBSdWl5dSANCj4gPiA+IDxydWl5 dS5uaUBpbnRlbC5jb20+OyBLaW5uZXksIE1pY2hhZWwgRCANCj4gPiA+IDxtaWNoYWVsLmQua2lu bmV5QGludGVsLmNvbT4NCj4gPiA+IENjOiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzsgWW91bmFz IGtoYW4gDQo+ID4gPiA8cG1keW91bmFza2hhbjc4NkBnbWFpbC5jb20+OyBHYW8sIExpbWluZyA8 bGltaW5nLmdhb0BpbnRlbC5jb20+OyANCj4gPiA+IFplbmcsIFN0YXIgPHN0YXIuemVuZ0BpbnRl bC5jb20+DQo+ID4gPiBTdWJqZWN0OiBSRTogW2VkazJdIFtQQVRDSCAxLzZdIE1kZVBrZyBVZWZp TGliOiBBZGQgbmV3DQo+ID4gPiBFZmlGaW5kQWNwaVRhYmxlQnlTaWduYXR1cmUoKSBBUEkNCj4g PiA+DQo+ID4gPiBHb29kIGlkZWEuDQo+ID4gPg0KPiA+ID4gSSBkaWQgY29uc2lkZXIgRFNEVCBh bmQgbXVsdGlwbGUgU1NEVHMgY2FzZXMuIEJ1dCBJIGRpZCBub3QgZmluZCANCj4gPiA+IGFueSBy ZWFsIGNhc2UgZm9yIHRoZW0uDQo+ID4gPiBTbyBJIG1hZGUgdGhlIGNvZGUgc2ltcGx5IGZvciBj dXJyZW50IGNhc2VzLCBhbmQgdGhlIGNvZGUgY2FuIGJlIA0KPiA+ID4gZWFzaWx5IGVuaGFuY2Vk IGxhdGVyIGZvciBEU0RULCBhIG5ldyBBUEkgY2FuIGJlIGFkZGVkIGxhdGVyIGZvciANCj4gPiA+ IG11bHRpcGxlDQo+ID4gU1NEVHMuDQo+ID4gPg0KPiA+ID4gQWJvdXQgYWRkaW5nIHRoZSBuZXcg QVBJIGluIFVlZmlMaWIgVlMgbmV3IGxpYnJhcnkgY2xhc3MsIEkgZGlkIA0KPiA+ID4gYWxzbyBj b25zaWRlciBpdCBhbmQgZXZlbiBjcmVhdGVkIGNvZGUgZm9yIG5ldyBsaWJyYXJ5IGNsYXNzIA0K PiA+ID4gKGdpdEBnaXRodWIuY29tOmx6ZW5nMTQvZWRrMi5naXQgYnJhbmNoIA0KPiA+ID4gRmlu ZEFjcGlUYWJsZUJ5U2lnbmF0dXJlX1VlZmlBY3BpVGFibGVMaWIpLg0KPiA+ID4gQnV0IEkgcmVt ZW1iZXIgSSBkaWQgZGlzY3VzcyBpdCB3aXRoIE1pa2UgYW5kIEppZXdlbiwgd2UgDQo+ID4gPiBy ZWNvbW1lbmRlZCBVZWZpTGliIGFzIGl0IHdpbGwgZG8gbm90IHJlcXVpcmUgYW55IHBsYXRmb3Jt IGNoYW5nZS4NCj4gPiA+DQo+ID4gPg0KPiA+ID4NCj4gPiA+IFRoYW5rcywNCj4gPiA+IFN0YXIN Cj4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiBGcm9tOiBZYW8sIEppZXdl bg0KPiA+ID4gU2VudDogU2F0dXJkYXksIFNlcHRlbWJlciAxLCAyMDE4IDc6MDQgQU0NCj4gPiA+ IFRvOiBOaSwgUnVpeXUgPHJ1aXl1Lm5pQGludGVsLmNvbT4NCj4gPiA+IENjOiBaZW5nLCBTdGFy IDxzdGFyLnplbmdAaW50ZWwuY29tPjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc7IA0KPiA+ID4g S2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPjsgWW91bmFzIGto YW4gDQo+ID4gPiA8cG1keW91bmFza2hhbjc4NkBnbWFpbC5jb20+OyBHYW8sIExpbWluZyA8bGlt aW5nLmdhb0BpbnRlbC5jb20+DQo+ID4gPiBTdWJqZWN0OiBSRTogW2VkazJdIFtQQVRDSCAxLzZd IE1kZVBrZyBVZWZpTGliOiBBZGQgbmV3DQo+ID4gPiBFZmlGaW5kQWNwaVRhYmxlQnlTaWduYXR1 cmUoKSBBUEkNCj4gPiA+DQo+ID4gPiBHb29kIGlkZWEgb24gTG9jYXRlTmV4dEFjcGlUYWJsZSgp Lg0KPiA+ID4NCj4gPiA+DQo+ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4g PiA+IEZyb206IE5pLCBSdWl5dQ0KPiA+ID4gPiBTZW50OiBTYXR1cmRheSwgU2VwdGVtYmVyIDEs IDIwMTggMTI6MjkgQU0NCj4gPiA+ID4gVG86IFlhbywgSmlld2VuIDxqaWV3ZW4ueWFvQGludGVs LmNvbT4NCj4gPiA+ID4gQ2M6IFplbmcsIFN0YXIgPHN0YXIuemVuZ0BpbnRlbC5jb20+OyBlZGsy LWRldmVsQGxpc3RzLjAxLm9yZzsgDQo+ID4gPiA+IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVs LmQua2lubmV5QGludGVsLmNvbT47IFlvdW5hcyBraGFuIA0KPiA+ID4gPiA8cG1keW91bmFza2hh bjc4NkBnbWFpbC5jb20+OyBHYW8sIExpbWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb20+DQo+ID4g PiA+IFN1YmplY3Q6IFJlOiBbZWRrMl0gW1BBVENIIDEvNl0gTWRlUGtnIFVlZmlMaWI6IEFkZCBu ZXcNCj4gPiA+ID4gRWZpRmluZEFjcGlUYWJsZUJ5U2lnbmF0dXJlKCkgQVBJDQo+ID4gPiA+DQo+ ID4gPiA+IEkgdGhpbmsgTG9jYXRlTmV4dEFjcGlUYWJsZSgpIGlzIG1vcmUgcHJvcGVyIHRvIGhh bmRsZSB0aGUgDQo+ID4gPiA+IG11bHRpcGxlIHRhYmxlcyB3aXRoIHNhbWUgc2lnbmF0dXJlLiBJ dCB3aWxsIGNhcnJ5IHRocmVlIA0KPiA+ID4gPiBwYXJhbWV0ZXJzLCBvbmUgaXMgdGhlIHRhYmxl IGhlYWRlciBzdG9yZWQgaW4gY29uZmlndXJhdGlvbiANCj4gPiA+ID4gdGFibGUsIG9uZSBpcyB0 aGUgc2lnbmF0dXJlLCBhbm90aGVyIGlzDQo+ID4gPiB0aGUgcHJldmlvdXMgbG9jYXRlZCB0YWJs ZS4NCj4gPiA+ID4gQ2FuIHdlIHJldHVybiBhIGNvbW1vbiB0YWJsZSBoZWFkZXIgb3RoZXIgdGhh biB2b2lkKj8NCj4gPiA+ID4NCj4gPiA+ID4gSXMgdGhlcmUgYmV0dGVyIHBsYWNlIG90aGVyIHRo YW4gVWVmaUxpYj8NCj4gPiA+ID4gRG8gd2UgbmVlZCB0byBhZGQgYSBuZXcgbGlicmFyeSBjbGFz cyBsaWtlIEFjcGlMaWI/DQo+ID4gPiA+DQo+ID4gPiA+IOWPkeiHquaIkeeahCBpUGhvbmUNCj4g PiA+ID4NCj4gPiA+ID4gPiDlnKggMjAxOOW5tDjmnIgzMeaXpe+8jOS4i+WNiDg6MDDvvIxZYW8s IEppZXdlbg0KPiA8amlld2VuLnlhb0BpbnRlbC5jb20+DQo+ID4gPiDlhpkNCj4gPiA+ID4g6YGT 77yaDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBHb29kIGVuaGFuY2VtZW50Lg0KPiA+ID4gPiA+DQo+ ID4gPiA+ID4gSSBoYXZlIDIgYWRkaXRpb25hbCB0aG91Z2h0Og0KPiA+ID4gPiA+DQo+ID4gPiA+ ID4gMSkgSG93IHRvIGhhbmRsZSBEU0RUPw0KPiA+ID4gPiA+IFdlIGhhdmUgc3BlY2lhbCBjb2Rl IHRvIGhhbmRsZSBGQUNTLCBidXQgbm8gRFNEVC4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IDIpIEhv dyB0byBoYW5kbGUgU1NEVCBvciBvdGhlciBtdWx0aXBsZSBBQ1BJIHRhYmxlcz8NCj4gPiA+ID4g PiBXZSBtYXkgaGF2ZSBtdWx0aXBsZSBTU0RULiBVc3VhbGx5LCBpdCBpcyBpZGVudGlmaWVkIGFz IE9FTUlELg0KPiA+ID4gPiA+IERvIHdlIHdhbnQgdG8gcHJvdmlkZSBzaW1pbGFyIGZ1bmN0aW9u IGZvciB0aGVtPw0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gQW55d2F5LCBqdXN0ICphZGRpdGlvbmFs KiB0aG91Z2h0LiA6LSkgQ3VycmVudCBpbXBsZW1lbnRhdGlvbiANCj4gPiA+ID4gPiBpcyBnb29k IGVub3VnaCBmb3IgY2hlY2sgaW4uDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBSZXZpZXdlZC1ieTog Smlld2VuLnlhb0BpbnRlbC5jb20NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IFRoYW5rIHlvdQ0KPiA+ ID4gPiA+IFlhbyBKaWV3ZW4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4+IC0tLS0t T3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4+IEZyb206IGVkazItZGV2ZWwgW21haWx0 bzplZGsyLWRldmVsLWJvdW5jZXNAbGlzdHMuMDEub3JnXSBPbiANCj4gPiA+ID4gPj4gQmVoYWxm IE9mDQo+ID4gPiA+IFN0YXINCj4gPiA+ID4gPj4gWmVuZw0KPiA+ID4gPiA+PiBTZW50OiBGcmlk YXksIEF1Z3VzdCAzMSwgMjAxOCA3OjI5IFBNDQo+ID4gPiA+ID4+IFRvOiBlZGsyLWRldmVsQGxp c3RzLjAxLm9yZw0KPiA+ID4gPiA+PiBDYzogS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5r aW5uZXlAaW50ZWwuY29tPjsgWW91bmFzIA0KPiA+ID4gPiA+PiBraGFuIDxwbWR5b3VuYXNraGFu Nzg2QGdtYWlsLmNvbT47IFlhbywgSmlld2VuDQo+ID4gPiA8amlld2VuLnlhb0BpbnRlbC5jb20+ Ow0KPiA+ID4gPiBHYW8sDQo+ID4gPiA+ID4+IExpbWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb20+ OyBaZW5nLCBTdGFyIA0KPiA+ID4gPiA+PiA8c3Rhci56ZW5nQGludGVsLmNvbT4NCj4gPiA+ID4g Pj4gU3ViamVjdDogW2VkazJdIFtQQVRDSCAxLzZdIE1kZVBrZyBVZWZpTGliOiBBZGQgbmV3DQo+ ID4gPiA+ID4+IEVmaUZpbmRBY3BpVGFibGVCeVNpZ25hdHVyZSgpIEFQSQ0KPiA+ID4gPiA+Pg0K PiA+ID4gPiA+PiBodHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lk PTk2Nw0KPiA+ID4gPiA+PiBSZXF1ZXN0IHRvIGFkZCBhIGxpYnJhcnkgZnVuY3Rpb24gZm9yIEdl dEFjcGlUYWJsZSgpIGluIG9yZGVyIA0KPiA+ID4gPiA+PiB0byBnZXQgQUNQSSB0YWJsZSB1c2lu ZyBzaWduYXR1cmUgYXMgaW5wdXQuDQo+ID4gPiA+ID4+DQo+ID4gPiA+ID4+IEFmdGVyIGV2YWx1 YXRpb24sIHdlIGZvdW5kIHRoZXJlIGFyZSBtYW55IGR1cGxpY2F0ZWQgY29kZSB0byANCj4gPiA+ ID4gPj4gZmluZCBBQ1BJIHRhYmxlIGJ5IHNpZ25hdHVyZSBpbiBkaWZmZXJlbnQgbW9kdWxlcy4N Cj4gPiA+ID4gPj4NCj4gPiA+ID4gPj4gVGhpcyBwYXRjaCBhZGRzIG5ldyBFZmlGaW5kQWNwaVRh YmxlQnlTaWduYXR1cmUoKSBBUEkgaW4gDQo+ID4gPiA+ID4+IFVlZmlMaWIgZm9yIHRoZSByZXF1 ZXN0IGFuZCBhbHNvIHRoZSBmb2xsb3dpbmcgcGF0Y2ggdG8gDQo+ID4gPiA+ID4+IHJlbW92ZSB0 aGUgZHVwbGljYXRlZCBjb2RlLg0KPiA+ID4gPiA+Pg0KPiA+ID4gPiA+PiBDYzogWW91bmFzIGto YW4gPHBtZHlvdW5hc2toYW43ODZAZ21haWwuY29tPg0KPiA+ID4gPiA+PiBDYzogTWljaGFlbCBE IEtpbm5leSA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+DQo+ID4gPiA+ID4+IENjOiBMaW1p bmcgR2FvIDxsaW1pbmcuZ2FvQGludGVsLmNvbT4NCj4gPiA+ID4gPj4gQ2M6IEppZXdlbiBZYW8g PGppZXdlbi55YW9AaW50ZWwuY29tPg0KPiA+ID4gPiA+PiBDb250cmlidXRlZC11bmRlcjogVGlh bm9Db3JlIENvbnRyaWJ1dGlvbiBBZ3JlZW1lbnQgMS4xDQo+ID4gPiA+ID4+IFNpZ25lZC1vZmYt Ynk6IFN0YXIgWmVuZyA8c3Rhci56ZW5nQGludGVsLmNvbT4NCj4gPiA+ID4gPj4gLS0tDQo+ID4g PiA+ID4+IE1kZVBrZy9JbmNsdWRlL0xpYnJhcnkvVWVmaUxpYi5oICAgfCAgMTcgKysrDQo+ID4g PiA+ID4+IE1kZVBrZy9MaWJyYXJ5L1VlZmlMaWIvQWNwaS5jICAgICAgfCAyMjYNCj4gPiA+ID4g Pj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ID4gPiA+PiBNZGVQ a2cvTGlicmFyeS9VZWZpTGliL1VlZmlMaWIuaW5mIHwgICAzICsNCj4gPiA+ID4gPj4gMyBmaWxl cyBjaGFuZ2VkLCAyNDYgaW5zZXJ0aW9ucygrKSBjcmVhdGUgbW9kZSAxMDA2NDQgDQo+ID4gPiA+ ID4+IE1kZVBrZy9MaWJyYXJ5L1VlZmlMaWIvQWNwaS5jDQo+ID4gPiA+ID4+DQo+ID4gPiA+ID4+ IGRpZmYgLS1naXQgYS9NZGVQa2cvSW5jbHVkZS9MaWJyYXJ5L1VlZmlMaWIuaA0KPiA+ID4gPiA+ PiBiL01kZVBrZy9JbmNsdWRlL0xpYnJhcnkvVWVmaUxpYi5oDQo+ID4gPiA+ID4+IGluZGV4IGY4 MDA2N2YxMTEwMy4uOGRkMjVmMzI0ZmQyIDEwMDY0NA0KPiA+ID4gPiA+PiAtLS0gYS9NZGVQa2cv SW5jbHVkZS9MaWJyYXJ5L1VlZmlMaWIuaA0KPiA+ID4gPiA+PiArKysgYi9NZGVQa2cvSW5jbHVk ZS9MaWJyYXJ5L1VlZmlMaWIuaA0KPiA+ID4gPiA+PiBAQCAtMTU5NSw0ICsxNTk1LDIxIEBAIEVm aU9wZW5GaWxlQnlEZXZpY2VQYXRoICgNCj4gPiA+ID4gPj4gIElOICAgICBVSU5UNjQgICAgICAg ICAgICAgICAgICAgIE9wZW5Nb2RlLA0KPiA+ID4gPiA+PiAgSU4gICAgIFVJTlQ2NCAgICAgICAg ICAgICAgICAgICAgQXR0cmlidXRlcw0KPiA+ID4gPiA+PiAgKTsNCj4gPiA+ID4gPj4gKw0KPiA+ ID4gPiA+PiArLyoqDQo+ID4gPiA+ID4+ICsgIFRoaXMgZnVuY3Rpb24gZmluZHMgQUNQSSB0YWJs ZSBieSBzaWduYXR1cmUuDQo+ID4gPiA+ID4+ICsgIEl0IHdpbGwgZmluZCB0aGUgdGFibGUgaW4g Z0VmaUFjcGkyMFRhYmxlR3VpZCBzeXN0ZW0gDQo+ID4gPiA+ID4+ICtjb25maWd1cmF0aW9uIHRh YmxlDQo+ID4gPiA+IGZpcnN0LA0KPiA+ID4gPiA+PiArICBhbmQgdGhlbiBnRWZpQWNwaTEwVGFi bGVHdWlkIHN5c3RlbSBjb25maWd1cmF0aW9uIHRhYmxlLg0KPiA+ID4gPiA+PiArDQo+ID4gPiA+ ID4+ICsgIEBwYXJhbSBTaWduYXR1cmUgIEFDUEkgdGFibGUgc2lnbmF0dXJlLg0KPiA+ID4gPiA+ PiArDQo+ID4gPiA+ID4+ICsgIEByZXR1cm4gQUNQSSB0YWJsZSBvciBOVUxMIGlmIG5vdCBmb3Vu ZC4NCj4gPiA+ID4gPj4gKw0KPiA+ID4gPiA+PiArKiovDQo+ID4gPiA+ID4+ICtWT0lEICoNCj4g PiA+ID4gPj4gK0VGSUFQSQ0KPiA+ID4gPiA+PiArRWZpRmluZEFjcGlUYWJsZUJ5U2lnbmF0dXJl ICgNCj4gPiA+ID4gPj4gKyAgSU4gVUlOVDMyICAgICBTaWduYXR1cmUNCj4gPiA+ID4gPj4gKyAg KTsNCj4gPiA+ID4gPj4gKw0KPiA+ID4gPiA+PiAjZW5kaWYNCj4gPiA+ID4gPj4gZGlmZiAtLWdp dCBhL01kZVBrZy9MaWJyYXJ5L1VlZmlMaWIvQWNwaS5jIA0KPiA+ID4gPiA+PiBiL01kZVBrZy9M aWJyYXJ5L1VlZmlMaWIvQWNwaS5jIG5ldyBmaWxlIG1vZGUgMTAwNjQ0IGluZGV4IA0KPiA+ID4g PiA+PiAwMDAwMDAwMDAwMDAuLjVjYjkzOTY2YjU5Zg0KPiA+ID4gPiA+PiAtLS0gL2Rldi9udWxs DQo+ID4gPiA+ID4+ICsrKyBiL01kZVBrZy9MaWJyYXJ5L1VlZmlMaWIvQWNwaS5jDQo+ID4gPiA+ ID4+IEBAIC0wLDAgKzEsMjI2IEBADQo+ID4gPiA+ID4+ICsvKiogQGZpbGUNCj4gPiA+ID4gPj4g KyAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgaGVscCBmdW5jdGlvbiBmb3IgZmluZGluZyBBQ1BJIHRh YmxlLg0KPiA+ID4gPiA+PiArDQo+ID4gPiA+ID4+ICsgIENvcHlyaWdodCAoYykgMjAxOCwgSW50 ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgDQo+ID4gPiA+ID4+ICsgcmVzZXJ2ZWQuPEJSPiBU aGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIA0KPiA+ID4gPiA+PiAr IGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCANCj4g PiA+ID4gPj4gKyBjb25kaXRpb25zIG9mIHRoZQ0KPiA+ID4gPiBCU0QNCj4gPiA+ID4gPj4gTGlj ZW5zZQ0KPiA+ID4gPiA+PiArICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4g IFRoZSBmdWxsIHRleHQgb2YgdGhlIA0KPiA+ID4gPiA+PiArIGxpY2Vuc2UgbWF5IGJlDQo+ID4g PiA+ID4+IGZvdW5kIGF0DQo+ID4gPiA+ID4+ICsgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNl bnNlcy9ic2QtbGljZW5zZS5waHAuDQo+ID4gPiA+ID4+ICsNCj4gPiA+ID4gPj4gKyAgVEhFIFBS T0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFODQo+ICJBUw0K PiA+ID4gSVMiDQo+ID4gPiA+ID4+IEJBU0lTLA0KPiA+ID4gPiA+PiArICBXSVRIT1VUIFdBUlJB TlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELA0KPiBFSVRIRVINCj4gPiA+ID4g Pj4gRVhQUkVTUyBPUiBJTVBMSUVELg0KPiA+ID4gPiA+PiArDQo+ID4gPiA+ID4+ICsqKi8NCj4g PiA+ID4gPj4gKw0KPiA+ID4gPiA+PiArI2luY2x1ZGUgIlVlZmlMaWJJbnRlcm5hbC5oIg0KPiA+ ID4gPiA+PiArI2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRhcmQvQWNwaS5oPiAjaW5jbHVkZSA8R3Vp ZC9BY3BpLmg+DQo+ID4gPiA+ID4+ICsNCj4gPiA+ID4gPj4gKy8qKg0KPiA+ID4gPiA+PiArICBU aGlzIGZ1bmN0aW9uIHNjYW5zIEFDUEkgdGFibGUgaW4gUlNEVC4NCj4gPiA+ID4gPj4gKw0KPiA+ ID4gPiA+PiArICBAcGFyYW0gUnNkdCAgICAgICBBQ1BJIFJTRFQNCj4gPiA+ID4gPj4gKyAgQHBh cmFtIFNpZ25hdHVyZSAgQUNQSSB0YWJsZSBzaWduYXR1cmUNCj4gPiA+ID4gPj4gKw0KPiA+ID4g PiA+PiArICBAcmV0dXJuIEFDUEkgdGFibGUgb3IgTlVMTCBpZiBub3QgZm91bmQuDQo+ID4gPiA+ ID4+ICsNCj4gPiA+ID4gPj4gKyoqLw0KPiA+ID4gPiA+PiArVk9JRCAqDQo+ID4gPiA+ID4+ICtT Y2FuVGFibGVJblJTRFQgKA0KPiA+ID4gPiA+PiArICBJTiBFRklfQUNQSV9ERVNDUklQVElPTl9I RUFERVIgICAgKlJzZHQsDQo+ID4gPiA+ID4+ICsgIElOIFVJTlQzMiAgICAgICAgICAgICAgICAg ICAgICAgICBTaWduYXR1cmUNCj4gPiA+ID4gPj4gKyAgKQ0KPiA+ID4gPiA+PiArew0KPiA+ID4g PiA+PiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiA+ID4g PiA+PiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudHJ5Q291bnQ7DQo+ ID4gPiA+ID4+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkVudHJ5UHRy Ow0KPiA+ID4gPiA+PiArICBFRklfQUNQSV9ERVNDUklQVElPTl9IRUFERVIgICAgICAgICpUYWJs ZTsNCj4gPiA+ID4gPj4gKw0KPiA+ID4gPiA+PiArICBpZiAoUnNkdCA9PSBOVUxMKSB7DQo+ID4g PiA+ID4+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4gPiA+ID4+ICsgIH0NCj4gPiA+ID4gPj4gKw0K PiA+ID4gPiA+PiArICBFbnRyeUNvdW50ID0gKFJzZHQtPkxlbmd0aCAtIHNpemVvZg0KPiA+ID4g PiA+PiArIChFRklfQUNQSV9ERVNDUklQVElPTl9IRUFERVIpKSAvDQo+ID4gPiA+ID4+IHNpemVv ZihVSU5UMzIpOw0KPiA+ID4gPiA+PiArDQo+ID4gPiA+ID4+ICsgIEVudHJ5UHRyID0gKFVJTlQz MiAqKShSc2R0ICsgMSk7ICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCANCj4gPiA+ID4gPj4gKyBF bnRyeUNvdW50OyBJbmRleCArKywgRW50cnlQdHIgKyspIHsNCj4gPiA+ID4gPj4gKyAgICBUYWJs ZSA9IChFRklfQUNQSV9ERVNDUklQVElPTl9IRUFERVINCj4gKikoKFVJTlROKSgqRW50cnlQdHIp KTsNCj4gPiA+ID4gPj4gKyAgICBpZiAoVGFibGUtPlNpZ25hdHVyZSA9PSBTaWduYXR1cmUpIHsN Cj4gPiA+ID4gPj4gKyAgICAgIHJldHVybiBUYWJsZTsNCj4gPiA+ID4gPj4gKyAgICB9DQo+ID4g PiA+ID4+ICsgIH0NCj4gPiA+ID4gPj4gKw0KPiA+ID4gPiA+PiArICByZXR1cm4gTlVMTDsNCj4g PiA+ID4gPj4gK30NCj4gPiA+ID4gPj4gKw0KPiA+ID4gPiA+PiArLyoqDQo+ID4gPiA+ID4+ICsg IFRoaXMgZnVuY3Rpb24gc2NhbnMgQUNQSSB0YWJsZSBpbiBYU0RULg0KPiA+ID4gPiA+PiArDQo+ ID4gPiA+ID4+ICsgIEBwYXJhbSBYc2R0ICAgICAgIEFDUEkgWFNEVA0KPiA+ID4gPiA+PiArICBA cGFyYW0gU2lnbmF0dXJlICBBQ1BJIHRhYmxlIHNpZ25hdHVyZQ0KPiA+ID4gPiA+PiArDQo+ID4g PiA+ID4+ICsgIEByZXR1cm4gQUNQSSB0YWJsZSBvciBOVUxMIGlmIG5vdCBmb3VuZC4NCj4gPiA+ ID4gPj4gKw0KPiA+ID4gPiA+PiArKiovDQo+ID4gPiA+ID4+ICtWT0lEICoNCj4gPiA+ID4gPj4g K1NjYW5UYWJsZUluWFNEVCAoDQo+ID4gPiA+ID4+ICsgIElOIEVGSV9BQ1BJX0RFU0NSSVBUSU9O X0hFQURFUiAgICAqWHNkdCwNCj4gPiA+ID4gPj4gKyAgSU4gVUlOVDMyICAgICAgICAgICAgICAg ICAgICAgICAgIFNpZ25hdHVyZQ0KPiA+ID4gPiA+PiArICApDQo+ID4gPiA+ID4+ICt7DQo+ID4g PiA+ID4+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gPiA+ID4g Pj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIEVudHJ5Q291bnQ7DQo+ID4gPiA+ ID4+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICBFbnRyeVB0cjsNCj4gPiA+ID4g Pj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VQdHI7DQo+ID4gPiA+ID4+ ICsgIEVGSV9BQ1BJX0RFU0NSSVBUSU9OX0hFQURFUiAgICAqVGFibGU7DQo+ID4gPiA+ID4+ICsN Cj4gPiA+ID4gPj4gKyAgaWYgKFhzZHQgPT0gTlVMTCkgew0KPiA+ID4gPiA+PiArICAgIHJldHVy biBOVUxMOw0KPiA+ID4gPiA+PiArICB9DQo+ID4gPiA+ID4+ICsNCj4gPiA+ID4gPj4gKyAgRW50 cnlDb3VudCA9IChYc2R0LT5MZW5ndGggLSBzaXplb2YNCj4gPiA+ID4gPj4gKyAoRUZJX0FDUElf REVTQ1JJUFRJT05fSEVBREVSKSkgLw0KPiA+ID4gPiA+PiBzaXplb2YoVUlOVDY0KTsNCj4gPiA+ ID4gPj4gKw0KPiA+ID4gPiA+PiArICBCYXNlUHRyID0gKFVJTlROKShYc2R0ICsgMSk7ICBmb3Ig KEluZGV4ID0gMDsgSW5kZXggPCANCj4gPiA+ID4gPj4gKyBFbnRyeUNvdW50OyBJbmRleCArKykg ew0KPiA+ID4gPiA+PiArICAgIENvcHlNZW0gKCZFbnRyeVB0ciwgKFZPSUQgKikoQmFzZVB0ciAr IEluZGV4ICogDQo+ID4gPiA+ID4+ICsgc2l6ZW9mKFVJTlQ2NCkpLA0KPiA+ID4gPiA+PiBzaXpl b2YoVUlOVDY0KSk7DQo+ID4gPiA+ID4+ICsgICAgVGFibGUgPSAoRUZJX0FDUElfREVTQ1JJUFRJ T05fSEVBREVSICopKChVSU5UTikoRW50cnlQdHIpKTsNCj4gPiA+ID4gPj4gKyAgICBpZiAoVGFi bGUtPlNpZ25hdHVyZSA9PSBTaWduYXR1cmUpIHsNCj4gPiA+ID4gPj4gKyAgICAgIHJldHVybiBU YWJsZTsNCj4gPiA+ID4gPj4gKyAgICB9DQo+ID4gPiA+ID4+ICsgIH0NCj4gPiA+ID4gPj4gKw0K PiA+ID4gPiA+PiArICByZXR1cm4gTlVMTDsNCj4gPiA+ID4gPj4gK30NCj4gPiA+ID4gPj4gKw0K PiA+ID4gPiA+PiArLyoqDQo+ID4gPiA+ID4+ICsgIFRvIGZpbmQgRmFjcyBpbiBGQURULg0KPiA+ ID4gPiA+PiArDQo+ID4gPiA+ID4+ICsgIEBwYXJhbSBGYWR0ICAgRkFEVCB0YWJsZSBwb2ludGVy DQo+ID4gPiA+ID4+ICsNCj4gPiA+ID4gPj4gKyAgQHJldHVybiBGYWNzIHRhYmxlIHBvaW50ZXIg b3IgTlVMTCBpZiBub3QgZm91bmQuDQo+ID4gPiA+ID4+ICsNCj4gPiA+ID4gPj4gKyoqLw0KPiA+ ID4gPiA+PiArRUZJX0FDUElfMl8wX0ZJUk1XQVJFX0FDUElfQ09OVFJPTF9TVFJVQ1RVUkUgKiAN Cj4gPiA+ID4gPj4gK0ZpbmRBY3BpRmFjc0Zyb21GYWR0ICgNCj4gPiA+ID4gPj4gKyAgSU4gRUZJ X0FDUElfMl8wX0ZJWEVEX0FDUElfREVTQ1JJUFRJT05fVEFCTEUgICpGYWR0DQo+ID4gPiA+ID4+ ICsgICkNCj4gPiA+ID4gPj4gK3sNCj4gPiA+ID4gPj4gKyAgRUZJX0FDUElfMl8wX0ZJUk1XQVJF X0FDUElfQ09OVFJPTF9TVFJVQ1RVUkUgICpGYWNzOw0KPiA+ID4gPiA+PiArICBVSU5UNjQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YTY0Ow0KPiA+ID4gPiA+PiAr DQo+ID4gPiA+ID4+ICsgIGlmIChGYWR0ID09IE5VTEwpIHsNCj4gPiA+ID4gPj4gKyAgICByZXR1 cm4gTlVMTDsNCj4gPiA+ID4gPj4gKyAgfQ0KPiA+ID4gPiA+PiArDQo+ID4gPiA+ID4+ICsgIGlm IChGYWR0LT5IZWFkZXIuUmV2aXNpb24gPA0KPiA+ID4gPiA+PiBFRklfQUNQSV8yXzBfRklYRURf QUNQSV9ERVNDUklQVElPTl9UQUJMRV9SRVZJU0lPTikgew0KPiA+ID4gPiA+PiArICAgIEZhY3Mg PSAoRUZJX0FDUElfMl8wX0ZJUk1XQVJFX0FDUElfQ09OVFJPTF9TVFJVQ1RVUkUNCj4gPiA+ID4g Pj4gKikoVUlOVE4pRmFkdC0+RmlybXdhcmVDdHJsOw0KPiA+ID4gPiA+PiArICB9IGVsc2Ugew0K PiA+ID4gPiA+PiArICAgIENvcHlNZW0gKCZEYXRhNjQsICZGYWR0LT5YRmlybXdhcmVDdHJsLCBz aXplb2YoVUlOVDY0KSk7DQo+ID4gPiA+ID4+ICsgICAgaWYgKERhdGE2NCAhPSAwKSB7DQo+ID4g PiA+ID4+ICsgICAgICBGYWNzID0gKEVGSV9BQ1BJXzJfMF9GSVJNV0FSRV9BQ1BJX0NPTlRST0xf U1RSVUNUVVJFDQo+ID4gPiA+ID4+ICopKFVJTlROKURhdGE2NDsNCj4gPiA+ID4gPj4gKyAgICB9 IGVsc2Ugew0KPiA+ID4gPiA+PiArICAgICAgRmFjcyA9IChFRklfQUNQSV8yXzBfRklSTVdBUkVf QUNQSV9DT05UUk9MX1NUUlVDVFVSRQ0KPiA+ID4gPiA+PiAqKShVSU5UTilGYWR0LT5GaXJtd2Fy ZUN0cmw7DQo+ID4gPiA+ID4+ICsgICAgfQ0KPiA+ID4gPiA+PiArICB9DQo+ID4gPiA+ID4+ICsg IHJldHVybiBGYWNzOw0KPiA+ID4gPiA+PiArfQ0KPiA+ID4gPiA+PiArDQo+ID4gPiA+ID4+ICsv KioNCj4gPiA+ID4gPj4gKyAgVG8gZmluZCBBQ1BJIHRhYmxlIGluIEFDUEkgQ29uZmlndXJhdGlv blRhYmxlLg0KPiA+ID4gPiA+PiArDQo+ID4gPiA+ID4+ICsgIEBwYXJhbSBBY3BpVGFibGVHdWlk ICBUaGUgZ3VpZCB1c2VkIHRvIGZpbmQgQUNQSQ0KPiA+ID4gQ29uZmlndXJhdGlvblRhYmxlLg0K PiA+ID4gPiA+PiArICBAcGFyYW0gU2lnbmF0dXJlICAgICAgQUNQSSB0YWJsZSBzaWduYXR1cmUu DQo+ID4gPiA+ID4+ICsNCj4gPiA+ID4gPj4gKyAgQHJldHVybiBBQ1BJIHRhYmxlIG9yIE5VTEwg aWYgbm90IGZvdW5kLg0KPiA+ID4gPiA+PiArDQo+ID4gPiA+ID4+ICsqKi8NCj4gPiA+ID4gPj4g K1ZPSUQgICoNCj4gPiA+ID4gPj4gK0ZpbmRBY3BpVGFibGVJbkFjcGlDb25maWd1cmF0aW9uVGFi bGUgKA0KPiA+ID4gPiA+PiArICBJTiBFRklfR1VJRCAgICpBY3BpR3VpZCwNCj4gPiA+ID4gPj4g KyAgSU4gVUlOVDMyICAgICBTaWduYXR1cmUNCj4gPiA+ID4gPj4gKw0KPiA+ID4gPiA+PiArICAp DQo+ID4gPiA+ID4+ICt7DQo+ID4gPiA+ID4+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gPiA+ID4+ICsgIFZPSUQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqVGFibGU7DQo+ID4gPiA+ID4+ICsgIEVG SV9BQ1BJXzJfMF9ST09UX1NZU1RFTV9ERVNDUklQVElPTl9QT0lOVEVSICAqUnNkcDsNCj4gPiA+ ID4gPj4gKyAgRUZJX0FDUElfREVTQ1JJUFRJT05fSEVBREVSICAgICAgICAgICAgICAgICAgICpS c2R0Ow0KPiA+ID4gPiA+PiArICBFRklfQUNQSV9ERVNDUklQVElPTl9IRUFERVIgICAgICAgICAg ICAgICAgICAgKlhzZHQ7DQo+ID4gPiA+ID4+ICsgIEVGSV9BQ1BJXzJfMF9GSVhFRF9BQ1BJX0RF U0NSSVBUSU9OX1RBQkxFICAgICAqRmFkdDsNCj4gPiA+ID4gPj4gKw0KPiA+ID4gPiA+PiArICBS c2RwID0gTlVMTDsNCj4gPiA+ID4gPj4gKyAgLy8NCj4gPiA+ID4gPj4gKyAgLy8gRmluZCBBQ1BJ IENvbmZpZ3VyYXRpb25UYWJsZSAoUlNEX1BUUikgIC8vICBTdGF0dXMgPSANCj4gPiA+ID4gPj4g KyBFZmlHZXRTeXN0ZW1Db25maWd1cmF0aW9uVGFibGUoQWNwaUd1aWQsIChWT0lEICoqKSZSc2Rw KTsgIA0KPiA+ID4gPiA+PiArIGlmIChFRklfRVJST1IgKFN0YXR1cykgfHwgKFJzZHAgPT0gTlVM TCkpIHsNCj4gPiA+ID4gPj4gKyAgICByZXR1cm4gTlVMTDsNCj4gPiA+ID4gPj4gKyAgfQ0KPiA+ ID4gPiA+PiArDQo+ID4gPiA+ID4+ICsgIFRhYmxlID0gTlVMTDsNCj4gPiA+ID4gPj4gKw0KPiA+ ID4gPiA+PiArICAvLw0KPiA+ID4gPiA+PiArICAvLyBTZWFyY2ggWFNEVA0KPiA+ID4gPiA+PiAr ICAvLw0KPiA+ID4gPiA+PiArICBpZiAoUnNkcC0+UmV2aXNpb24gPj0NCj4gPiA+ID4gPj4gRUZJ X0FDUElfMl8wX1JPT1RfU1lTVEVNX0RFU0NSSVBUSU9OX1BPSU5URVJfUkVWSVNJT04pIHsNCj4g PiA+ID4gPj4gKyAgICBYc2R0ID0gKEVGSV9BQ1BJX0RFU0NSSVBUSU9OX0hFQURFUiAqKShVSU5U TikNCj4gPiA+ID4gUnNkcC0+WHNkdEFkZHJlc3M7DQo+ID4gPiA+ID4+ICsgICAgaWYgKFNpZ25h dHVyZSA9PQ0KPiA+ID4gPiA+Pg0KPiBFRklfQUNQSV8yXzBfRklSTVdBUkVfQUNQSV9DT05UUk9M X1NUUlVDVFVSRV9TSUdOQVRVUkUpIHsNCj4gPiA+ID4gPj4gKyAgICAgIC8vDQo+ID4gPiA+ID4+ ICsgICAgICAvLyBJdCBpcyB0byBmaW5kIEZBQ1MgQUNQSSB0YWJsZSwNCj4gPiA+ID4gPj4gKyAg ICAgIC8vIG5lZWQgZmluZCBGQURUIGZpcnN0Lg0KPiA+ID4gPiA+PiArICAgICAgLy8NCj4gPiA+ ID4gPj4gKyAgICAgIEZhZHQgPSBTY2FuVGFibGVJblhTRFQgKFhzZHQsDQo+ID4gPiA+ID4+IEVG SV9BQ1BJXzJfMF9GSVhFRF9BQ1BJX0RFU0NSSVBUSU9OX1RBQkxFX1NJR05BVFVSRSk7DQo+ID4g PiA+ID4+ICsgICAgICBUYWJsZSA9IEZpbmRBY3BpRmFjc0Zyb21GYWR0IChGYWR0KTsNCj4gPiA+ ID4gPj4gKyAgICB9IGVsc2Ugew0KPiA+ID4gPiA+PiArICAgICAgVGFibGUgPSBTY2FuVGFibGVJ blhTRFQgKFhzZHQsIFNpZ25hdHVyZSk7DQo+ID4gPiA+ID4+ICsgICAgfQ0KPiA+ID4gPiA+PiAr ICB9DQo+ID4gPiA+ID4+ICsNCj4gPiA+ID4gPj4gKyAgaWYgKFRhYmxlICE9IE5VTEwpIHsNCj4g PiA+ID4gPj4gKyAgICByZXR1cm4gVGFibGU7DQo+ID4gPiA+ID4+ICsgIH0NCj4gPiA+ID4gPj4g Kw0KPiA+ID4gPiA+PiArICAvLw0KPiA+ID4gPiA+PiArICAvLyBTZWFyY2ggUlNEVA0KPiA+ID4g PiA+PiArICAvLw0KPiA+ID4gPiA+PiArICBSc2R0ID0gKEVGSV9BQ1BJX0RFU0NSSVBUSU9OX0hF QURFUiAqKShVSU5UTikgUnNkcC0NCj4gPiA+ID5Sc2R0QWRkcmVzczsNCj4gPiA+ID4gPj4gKyBp ZiAoU2lnbmF0dXJlID09DQo+ID4gPiA+ID4+DQo+IEVGSV9BQ1BJXzJfMF9GSVJNV0FSRV9BQ1BJ X0NPTlRST0xfU1RSVUNUVVJFX1NJR05BVFVSRSkgew0KPiA+ID4gPiA+PiArICAgIC8vDQo+ID4g PiA+ID4+ICsgICAgLy8gSXQgaXMgdG8gZmluZCBGQUNTIEFDUEkgdGFibGUsDQo+ID4gPiA+ID4+ ICsgICAgLy8gbmVlZCBmaW5kIEZBRFQgZmlyc3QuDQo+ID4gPiA+ID4+ICsgICAgLy8NCj4gPiA+ ID4gPj4gKyAgICBGYWR0ID0gU2NhblRhYmxlSW5SU0RUIChSc2R0LA0KPiA+ID4gPiA+PiBFRklf QUNQSV8yXzBfRklYRURfQUNQSV9ERVNDUklQVElPTl9UQUJMRV9TSUdOQVRVUkUpOw0KPiA+ID4g PiA+PiArICAgIFRhYmxlID0gRmluZEFjcGlGYWNzRnJvbUZhZHQgKEZhZHQpOyAgfSBlbHNlIHsN Cj4gPiA+ID4gPj4gKyAgICBUYWJsZSA9IFNjYW5UYWJsZUluUlNEVCAoUnNkdCwgU2lnbmF0dXJl KTsgIH0NCj4gPiA+ID4gPj4gKw0KPiA+ID4gPiA+PiArICByZXR1cm4gVGFibGU7DQo+ID4gPiA+ ID4+ICt9DQo+ID4gPiA+ID4+ICsNCj4gPiA+ID4gPj4gKy8qKg0KPiA+ID4gPiA+PiArICBUaGlz IGZ1bmN0aW9uIGZpbmRzIEFDUEkgdGFibGUgYnkgc2lnbmF0dXJlLg0KPiA+ID4gPiA+PiArICBJ dCB3aWxsIGZpbmQgdGhlIHRhYmxlIGluIGdFZmlBY3BpMjBUYWJsZUd1aWQgc3lzdGVtIA0KPiA+ ID4gPiA+PiArY29uZmlndXJhdGlvbiB0YWJsZQ0KPiA+ID4gPiBmaXJzdCwNCj4gPiA+ID4gPj4g KyAgYW5kIHRoZW4gZ0VmaUFjcGkxMFRhYmxlR3VpZCBzeXN0ZW0gY29uZmlndXJhdGlvbiB0YWJs ZS4NCj4gPiA+ID4gPj4gKw0KPiA+ID4gPiA+PiArICBAcGFyYW0gU2lnbmF0dXJlICBBQ1BJIHRh YmxlIHNpZ25hdHVyZS4NCj4gPiA+ID4gPj4gKw0KPiA+ID4gPiA+PiArICBAcmV0dXJuIEFDUEkg dGFibGUgb3IgTlVMTCBpZiBub3QgZm91bmQuDQo+ID4gPiA+ID4+ICsNCj4gPiA+ID4gPj4gKyoq Lw0KPiA+ID4gPiA+PiArVk9JRCAqDQo+ID4gPiA+ID4+ICtFRklBUEkNCj4gPiA+ID4gPj4gK0Vm aUZpbmRBY3BpVGFibGVCeVNpZ25hdHVyZSAoDQo+ID4gPiA+ID4+ICsgIElOIFVJTlQzMiAgICAg U2lnbmF0dXJlDQo+ID4gPiA+ID4+ICsgICkNCj4gPiA+ID4gPj4gK3sNCj4gPiA+ID4gPj4gKyAg Vk9JRCAgICAgICAgICAqVGFibGU7DQo+ID4gPiA+ID4+ICsNCj4gPiA+ID4gPj4gKyAgVGFibGUg PSBGaW5kQWNwaVRhYmxlSW5BY3BpQ29uZmlndXJhdGlvblRhYmxlDQo+ID4gPiA+ID4+ICsgKCZn RWZpQWNwaTIwVGFibGVHdWlkLA0KPiA+ID4gPiA+PiBTaWduYXR1cmUpOw0KPiA+ID4gPiA+PiAr ICBpZiAoVGFibGUgIT0gTlVMTCkgew0KPiA+ID4gPiA+PiArICAgIHJldHVybiBUYWJsZTsNCj4g PiA+ID4gPj4gKyAgfQ0KPiA+ID4gPiA+PiArDQo+ID4gPiA+ID4+ICsgIHJldHVybiBGaW5kQWNw aVRhYmxlSW5BY3BpQ29uZmlndXJhdGlvblRhYmxlDQo+ID4gPiA+ID4+ICsgKCZnRWZpQWNwaTEw VGFibGVHdWlkLA0KPiA+ID4gPiA+PiBTaWduYXR1cmUpOw0KPiA+ID4gPiA+PiArfQ0KPiA+ID4g PiA+PiArDQo+ID4gPiA+ID4+IGRpZmYgLS1naXQgYS9NZGVQa2cvTGlicmFyeS9VZWZpTGliL1Vl ZmlMaWIuaW5mDQo+ID4gPiA+ID4+IGIvTWRlUGtnL0xpYnJhcnkvVWVmaUxpYi9VZWZpTGliLmlu Zg0KPiA+ID4gPiA+PiBpbmRleCBhNmM3MzllZjNkNmQuLmFlYTIwZmU2NzE1MyAxMDA2NDQNCj4g PiA+ID4gPj4gLS0tIGEvTWRlUGtnL0xpYnJhcnkvVWVmaUxpYi9VZWZpTGliLmluZg0KPiA+ID4g PiA+PiArKysgYi9NZGVQa2cvTGlicmFyeS9VZWZpTGliL1VlZmlMaWIuaW5mDQo+ID4gPiA+ID4+ IEBAIC00MSw2ICs0MSw3IEBAIFtTb3VyY2VzXQ0KPiA+ID4gPiA+PiAgQ29uc29sZS5jDQo+ID4g PiA+ID4+ICBVZWZpTGliLmMNCj4gPiA+ID4gPj4gIFVlZmlMaWJJbnRlcm5hbC5oDQo+ID4gPiA+ ID4+ICsgIEFjcGkuYw0KPiA+ID4gPiA+Pg0KPiA+ID4gPiA+Pg0KPiA+ID4gPiA+PiBbUGFja2Fn ZXNdDQo+ID4gPiA+ID4+IEBAIC02Miw2ICs2Myw4IEBAIFtHdWlkc10NCj4gPiA+ID4gPj4gIGdF ZmlFdmVudFJlYWR5VG9Cb290R3VpZCAgICAgICAgICAgICAgICAgICAgICAjIw0KPiA+ID4gPiA+ PiBTT01FVElNRVNfQ09OU1VNRVMgICMjIEV2ZW50DQo+ID4gPiA+ID4+ICBnRWZpRXZlbnRMZWdh Y3lCb290R3VpZCAgICAgICAgICAgICAgICAgICAgICAgIyMNCj4gPiA+ID4gPj4gU09NRVRJTUVT X0NPTlNVTUVTICAjIyBFdmVudA0KPiA+ID4gPiA+PiAgZ0VmaUdsb2JhbFZhcmlhYmxlR3VpZCAg ICAgICAgICAgICAgICAgICAgICAgICMjDQo+ID4gPiA+ID4+IFNPTUVUSU1FU19DT05TVU1FUyAg IyMgVmFyaWFibGUNCj4gPiA+ID4gPj4gKyAgZ0VmaUFjcGkyMFRhYmxlR3VpZCAgICAgICAgICAg ICAgICAgICAgICAgICAgICMjDQo+ID4gPiA+ID4+IFNPTUVUSU1FU19DT05TVU1FUyAgIyMgU3lz dGVtVGFibGUNCj4gPiA+ID4gPj4gKyAgZ0VmaUFjcGkxMFRhYmxlR3VpZCAgICAgICAgICAgICAg ICAgICAgICAgICAgICMjDQo+ID4gPiA+ID4+IFNPTUVUSU1FU19DT05TVU1FUyAgIyMgU3lzdGVt VGFibGUNCj4gPiA+ID4gPj4NCj4gPiA+ID4gPj4gW1Byb3RvY29sc10NCj4gPiA+ID4gPj4gIGdF ZmlEcml2ZXJCaW5kaW5nUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAgICMjDQo+ID4gPiA+ ID4+IFNPTUVUSU1FU19QUk9EVUNFUw0KPiA+ID4gPiA+PiAtLQ0KPiA+ID4gPiA+PiAyLjcuMC53 aW5kb3dzLjENCj4gPiA+ID4gPj4NCj4gPiA+ID4gPj4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18NCj4gPiA+ID4gPj4gZWRrMi1kZXZlbCBtYWlsaW5nIGxp c3QNCj4gPiA+ID4gPj4gZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNCj4gPiA+ID4gPj4gaHR0cHM6 Ly9saXN0cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5mby9lZGsyLWRldmVsDQo+ID4gPiA+ID4gX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gPiA+ID4gPiBl ZGsyLWRldmVsIG1haWxpbmcgbGlzdA0KPiA+ID4gPiA+IGVkazItZGV2ZWxAbGlzdHMuMDEub3Jn DQo+ID4gPiA+ID4gaHR0cHM6Ly9saXN0cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5mby9lZGsyLWRl dmVsDQo=