From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) (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 AF1E3821CF for ; Tue, 28 Feb 2017 23:58:03 -0800 (PST) Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga105.fm.intel.com with ESMTP; 28 Feb 2017 23:58:03 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.35,224,1484035200"; d="scan'208";a="1116947498" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by fmsmga001.fm.intel.com with ESMTP; 28 Feb 2017 23:58:03 -0800 Received: from fmsmsx122.amr.corp.intel.com (10.18.125.37) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.248.2; Tue, 28 Feb 2017 23:58:02 -0800 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by fmsmsx122.amr.corp.intel.com (10.18.125.37) with Microsoft SMTP Server (TLS) id 14.3.248.2; Tue, 28 Feb 2017 23:58:02 -0800 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.59]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.177]) with mapi id 14.03.0248.002; Wed, 1 Mar 2017 15:58:01 +0800 From: "Ni, Ruiyu" To: Ard Biesheuvel , Laszlo Ersek CC: "edk2-devel@lists.01.org" , "Carsey, Jaben" , "Chen, Chen A" , chen881220 Thread-Topic: [edk2] [PATCH] ShellPkg/bcfg: Add Shell Spec 2.2 modification functionality Thread-Index: AQHSkM4+sYug2WdGbEKX2SqTj5QS7KF/FFgAgACJLoA= Date: Wed, 1 Mar 2017 07:58:00 +0000 Message-ID: <734D49CCEBEEF84792F5B80ED585239D5B8BBB61@SHSMSX104.ccr.corp.intel.com> References: <20170227075002.322540-1-ruiyu.ni@intel.com> In-Reply-To: Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH] ShellPkg/bcfg: Add Shell Spec 2.2 modification functionality X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 01 Mar 2017 07:58:03 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 WWVzLg0Kc29ycnkgYWJvdXQgdGhhdCENCkNhbiB5b3UgY29tbWl0IHRoaXMgY2hhbmdlPw0KDQpU aGFua3MvUmF5DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQXJkIEJp ZXNoZXV2ZWwgW21haWx0bzphcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnXQ0KPiBTZW50OiBXZWRu ZXNkYXksIE1hcmNoIDEsIDIwMTcgMzozMyBQTQ0KPiBUbzogTmksIFJ1aXl1IDxydWl5dS5uaUBp bnRlbC5jb20+OyBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPg0KPiBDYzogZWRrMi1k ZXZlbEBsaXN0cy4wMS5vcmc7IENhcnNleSwgSmFiZW4gPGphYmVuLmNhcnNleUBpbnRlbC5jb20+ OyBDaGVuLA0KPiBDaGVuIEEgPGNoZW4uYS5jaGVuQGludGVsLmNvbT47IGNoZW44ODEyMjAgPGFp X3RlcnJhbkBmb3htYWlsLmNvbT4NCj4gU3ViamVjdDogUmU6IFtlZGsyXSBbUEFUQ0hdIFNoZWxs UGtnL2JjZmc6IEFkZCBTaGVsbCBTcGVjIDIuMiBtb2RpZmljYXRpb24NCj4gZnVuY3Rpb25hbGl0 eQ0KPiANCj4gT24gMjcgRmVicnVhcnkgMjAxNyBhdCAwNzo1MCwgUnVpeXUgTmkgPHJ1aXl1Lm5p QGludGVsLmNvbT4gd3JvdGU6DQo+ID4gRnJvbTogY2hlbjg4MTIyMCA8YWlfdGVycmFuQGZveG1h aWwuY29tPg0KPiA+DQo+ID4gQ29udHJpYnV0ZWQtdW5kZXI6IFRpYW5vQ29yZSBDb250cmlidXRp b24gQWdyZWVtZW50IDEuMA0KPiA+IFNpZ25lZC1vZmYtYnk6IENoZW4gQSBDaGVuIDxjaGVuLmEu Y2hlbkBpbnRlbC5jb20+DQo+ID4gQ2M6IEphYmVuIENhcnNleSA8amFiZW4uY2Fyc2V5QGludGVs LmNvbT4NCj4gDQo+IFRoaXMgcGF0Y2ggaGFzIGJyb2tlbiB0aGUgQXJtVmlydFhlbi5kc2MgYnVp bGQNCj4gDQo+IFByb2Nlc3NpbmcgbWV0YS1kYXRhIC4NCj4gDQo+IGJ1aWxkLnB5Li4uDQo+IDxo dHRwczovL2NpLmxpbmFyby5vcmcvamVua2lucy9qb2IvbGVnLXZpcnQtdGlhbm9jb3JlLWVkazIt DQo+IHVwc3RyZWFtL3dzL2VkazIvQXJtVmlydFBrZy9Bcm1WaXJ0WGVuLmRzYyguLi4pPjoNCj4g ZXJyb3IgNDAwMDogSW5zdGFuY2Ugb2YgbGlicmFyeSBjbGFzcyBbVWVmaUJvb3RNYW5hZ2VyTGli XSBpcyBub3QNCj4gZm91bmQNCj4gICAgICAgICBpbiBbPGh0dHBzOi8vY2kubGluYXJvLm9yZy9q ZW5raW5zL2pvYi9sZWctdmlydC10aWFub2NvcmUtZWRrMi0NCj4gdXBzdHJlYW0vd3MvZWRrMi9T aGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEJjZmdDb21tYW5kTGliL1VlZmlTaGVsbEJjZg0KPiBn Q29tbWFuZExpYi5pbmZdPg0KPiBbQVJNXQ0KPiAgICAgICAgIGNvbnN1bWVkIGJ5IG1vZHVsZQ0K PiBbPGh0dHBzOi8vY2kubGluYXJvLm9yZy9qZW5raW5zL2pvYi9sZWctdmlydC10aWFub2NvcmUt ZWRrMi0NCj4gdXBzdHJlYW0vd3MvZWRrMi9TaGVsbFBrZy9BcHBsaWNhdGlvbi9TaGVsbC9TaGVs bC5pbmZdPg0KPiANCj4gSSB0YWtlIGl0IHRoYXQgaXQgaXMgc2ltcGx5IGEgbWF0dGVyIG9mIGFk ZGluZw0KPiANCj4gVWVmaUJvb3RNYW5hZ2VyTGlifE1kZU1vZHVsZVBrZy9MaWJyYXJ5L1VlZmlC b290TWFuYWdlckxpYi9VZWZpQm9vDQo+IHRNYW5hZ2VyTGliLmluZg0KPiANCj4gdG8gdGhlIGJy b2tlbiBwbGF0Zm9ybXM/DQo+IA0KPiANCj4gPiAtLS0NCj4gPiAgLi4uL1VlZmlTaGVsbEJjZmdD b21tYW5kTGliLmMgICAgICAgICAgICAgICAgICAgICAgfCAzNTIgKysrKysrKysrKysrKysrKysr KystDQo+ID4gIC4uLi9VZWZpU2hlbGxCY2ZnQ29tbWFuZExpYi5pbmYgICAgICAgICAgICAgICAg ICAgIHwgICAzICstDQo+ID4gIFNoZWxsUGtnL1NoZWxsUGtnLmRzYyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgICA4ICsNCj4gPiAgMyBmaWxlcyBjaGFuZ2VkLCAzNjAgaW5zZXJ0aW9u cygrKSwgMyBkZWxldGlvbnMoLSkNCj4gPg0KPiA+IGRpZmYgLS1naXQNCj4gYS9TaGVsbFBrZy9M aWJyYXJ5L1VlZmlTaGVsbEJjZmdDb21tYW5kTGliL1VlZmlTaGVsbEJjZmdDb21tYW5kTGliLmMN Cj4gYi9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEJjZmdDb21tYW5kTGliL1VlZmlTaGVsbEJj ZmdDb21tYW5kTGliLmMNCj4gPiBpbmRleCA2MmE1MmFkLi4xNTM4YmM2IDEwMDY0NA0KPiA+IC0t LQ0KPiBhL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsQmNmZ0NvbW1hbmRMaWIvVWVmaVNoZWxs QmNmZ0NvbW1hbmRMaWIuYw0KPiA+ICsrKw0KPiBiL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxs QmNmZ0NvbW1hbmRMaWIvVWVmaVNoZWxsQmNmZ0NvbW1hbmRMaWIuYw0KPiA+IEBAIC0yLDcgKzIs NyBAQA0KPiA+ICAgIE1haW4gZmlsZSBmb3IgQkNGRyBjb21tYW5kLg0KPiA+DQo+ID4gICAgKEMp IENvcHlyaWdodCAyMDE0LTIwMTUgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnks IEwuUC48QlI+DQo+ID4gLSAgQ29weXJpZ2h0IChjKSAyMDEwIC0gMjAxNiwgSW50ZWwgQ29ycG9y YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICsgIENvcHlyaWdodCAoYykgMjAx MCAtIDIwMTcsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4g PiAgICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ID4gICAg YXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRp dGlvbnMgb2YgdGhlDQo+IEJTRCBMaWNlbnNlDQo+ID4gICAgd2hpY2ggYWNjb21wYW5pZXMgdGhp cyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPiBm b3VuZCBhdA0KPiA+IEBAIC00MSw2ICs0MSw3IEBADQo+ID4gICNpbmNsdWRlIDxMaWJyYXJ5L1By aW50TGliLmg+DQo+ID4gICNpbmNsdWRlIDxMaWJyYXJ5L0hhbmRsZVBhcnNpbmdMaWIuaD4NCj4g PiAgI2luY2x1ZGUgPExpYnJhcnkvRGV2aWNlUGF0aExpYi5oPg0KPiA+ICsjaW5jbHVkZSA8TGli cmFyeS9VZWZpQm9vdE1hbmFnZXJMaWIuaD4NCj4gPg0KPiA+ICBTVEFUSUMgQ09OU1QgQ0hBUjE2 IG1GaWxlTmFtZVtdID0gTCJTaGVsbENvbW1hbmRzIjsNCj4gPiAgU1RBVElDIEVGSV9IQU5ETEUg Z1NoZWxsQmNmZ0hpaUhhbmRsZSAgPSBOVUxMOw0KPiA+IEBAIC01OSw3ICs2MCwxMSBAQCB0eXBl ZGVmIGVudW0gew0KPiA+ICAgIEJjZmdUeXBlUm0gICAgICAgICA9IDQsDQo+ID4gICAgQmNmZ1R5 cGVNdiAgICAgICAgID0gNSwNCj4gPiAgICBCY2ZnVHlwZU9wdCAgICAgICAgPSA2LA0KPiA+IC0g IEJjZmdUeXBlTWF4ICAgICAgICA9IDcNCj4gPiArICBCY2ZnVHlwZU1vZCAgICAgICAgPSA3LA0K PiA+ICsgIEJjZmdUeXBlTW9kZiAgICAgICA9IDgsDQo+ID4gKyAgQmNmZ1R5cGVNb2RwICAgICAg ID0gOSwNCj4gPiArICBCY2ZnVHlwZU1vZGggICAgICAgPSAxMCwNCj4gPiArICBCY2ZnVHlwZU1h eCAgICAgICAgPSAxMQ0KPiA+ICB9IEJDRkdfT1BFUkFUSU9OX1RZUEU7DQo+ID4NCj4gPiAgdHlw ZWRlZiBzdHJ1Y3Qgew0KPiA+IEBAIC0yNzUsNiArMjgwLDI0NyBAQCBHZXREZXZpY2VQYXRoRm9y RHJpdmVySGFuZGxlICgNCj4gPiAgfQ0KPiA+DQo+ID4gIC8qKg0KPiA+ICsgIEZ1bmN0aW5vIHRv IGdldCBEZXZpY2UgUGF0aCBieSBhIGhhbmRsZS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAg ICAgICAgVGhlSGFuZGxlICAgVXNlIGl0IHRvIGdldCBEZXZpY2VQYXRoLg0KPiA+ICsgIEBwYXJh bVtpbl0gICAgICAgIFRhcmdldCAgICAgIEJvb3Qgb3B0aW9uIHRhcmdldC4NCj4gPiArICBAcGFy YW1baW4sIG91dF0gICBEZXZpY2VQYXRoICBPbiBhIHN1Y2Vzc2Z1bCByZXR1cm4gdGhlIGRldmlj ZSBwYXRoIHRvDQo+IHRoZSBoYW5kbGUuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgICBTSEVMTF9J TlZBTElEX1BBUkFNRVRFUiBUaGUgaGFuZGxlIHdhcyBOVUxMLg0KPiA+ICsgIEByZXR2YWwgICBT SEVMTF9OT1RfRk9VTkQgICAgICAgICBOb3QgZm91bmQgZGV2aWNlIHBhdGggYnkgaGFuZGxlLg0K PiA+ICsgIEByZXR2YWwgICBTSEVMTF9TVUNDRVNTICAgICAgICAgICBHZXQgZGV2aWNlIHBhdGgg c3VjY2Vzc2Z1bGx5Lg0KPiA+ICsqKi8NCj4gPiArU0hFTExfU1RBVFVTDQo+ID4gK0dldERldmlj ZVBhdGhCeUhhbmRsZSgNCj4gPiArICBJTiAgICAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgIFRo ZUhhbmRsZSwNCj4gPiArICBJTiAgICAgQkNGR19PUEVSQVRJT05fVEFSR0VUICAgIFRhcmdldCwN Cj4gPiArICBJTiBPVVQgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICoqRGV2aWNlUGF0aA0KPiA+ ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFUVVMgICBTdGF0dXM7DQo+ID4gKyAgU0hFTExf U1RBVFVTIFNoZWxsU3RhdHVzOw0KPiA+ICsNCj4gPiArICBVSU5UTiBEcml2ZXJCaW5kaW5nSGFu ZGxlQ291bnQ7DQo+ID4gKyAgVUlOVE4gUGFyZW50Q29udHJvbGxlckhhbmRsZUNvdW50Ow0KPiA+ ICsgIFVJTlROIENoaWxkQ29udHJvbGxlckhhbmRsZUNvdW50Ow0KPiA+ICsNCj4gPiArICBTaGVs bFN0YXR1cyA9IFNIRUxMX1NVQ0NFU1M7DQo+ID4gKw0KPiA+ICsgIGlmIChUaGVIYW5kbGUgPT0g TlVMTCkgew0KPiA+ICsgICAgU2hlbGxQcmludEhpaUV4ICgtMSwgLTEsIE5VTEwsIFNUUklOR19U T0tFTiAoU1RSX0dFTl9QQVJBTV9JTlYpLA0KPiBnU2hlbGxCY2ZnSGlpSGFuZGxlLCBMImJjZmci LCBMIkhhbmRsZSBOdW1iZXIiKTsNCj4gPiArICAgIHJldHVybiBTSEVMTF9JTlZBTElEX1BBUkFN RVRFUjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IFBBUlNFX0hBTkRMRV9EQVRB QkFTRV9VRUZJX0RSSVZFUlMgKFRoZUhhbmRsZSwNCj4gJkRyaXZlckJpbmRpbmdIYW5kbGVDb3Vu dCwgTlVMTCk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ID4gKyAgICBEcml2 ZXJCaW5kaW5nSGFuZGxlQ291bnQgPSAwOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgU3RhdHVz ID0gUEFSU0VfSEFORExFX0RBVEFCQVNFX1BBUkVOVFMgKFRoZUhhbmRsZSwNCj4gJlBhcmVudENv bnRyb2xsZXJIYW5kbGVDb3VudCwgTlVMTCk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiA+ICsgICAgUGFyZW50Q29udHJvbGxlckhhbmRsZUNvdW50ID0gMDsNCj4gPiArICB9 DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IFBhcnNlSGFuZGxlRGF0YWJhc2VGb3JDaGlsZENvbnRy b2xsZXJzIChUaGVIYW5kbGUsDQo+ICZDaGlsZENvbnRyb2xsZXJIYW5kbGVDb3VudCwgTlVMTCk7 DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgQ2hpbGRDb250cm9s bGVySGFuZGxlQ291bnQgPSAwOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gZ0JT LT5IYW5kbGVQcm90b2NvbCAoVGhlSGFuZGxlLCAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQs DQo+IChWT0lEKiopRGV2aWNlUGF0aCk7DQo+ID4gKw0KPiA+ICsgIGlmICggRHJpdmVyQmluZGlu Z0hhbmRsZUNvdW50ICAgID4gMCB8fA0KPiA+ICsgICAgICAgUGFyZW50Q29udHJvbGxlckhhbmRs ZUNvdW50ID4gMCB8fA0KPiA+ICsgICAgICAgQ2hpbGRDb250cm9sbGVySGFuZGxlQ291bnQgID4g MCB8fA0KPiA+ICsgICAgICAgIUVGSV9FUlJPUihTdGF0dXMpDQo+ID4gKyAgICAgKSB7DQo+ID4g KyAgICAvLw0KPiA+ICsgICAgLy8gVGhlIGhhbmRsZSBwb2ludHMgdG8gYSByZWFsIGNvbnRyb2xs ZXIgd2hpY2ggaGFzIGEgZGV2aWNlIHBhdGguDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgaWYgKFRh cmdldCA9PSBCY2ZnVGFyZ2V0RHJpdmVyT3JkZXIpIHsNCj4gPiArICAgICAgU2hlbGxQcmludEhp aUV4ICgNCj4gPiArICAgICAgICAtMSwNCj4gPiArICAgICAgICAtMSwNCj4gPiArICAgICAgICBO VUxMLFNUUklOR19UT0tFTiAoU1RSX0dFTl9QQVJBTV9JTlYpLA0KPiA+ICsgICAgICAgIGdTaGVs bEJjZmdIaWlIYW5kbGUsDQo+ID4gKyAgICAgICAgTCJiY2ZnIiwNCj4gPiArICAgICAgICBMIkhh bmRsZSBzaG91bGQgcG9pbnQgdG8gZHJpdmVyIGltYWdlLiINCj4gPiArICAgICAgKTsNCj4gPiAr ICAgICAgU2hlbGxTdGF0dXMgPSBTSEVMTF9OT1RfRk9VTkQ7DQo+ID4gKyAgICB9DQo+ID4gKyAg fSBlbHNlIHsNCj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBUaGUgaGFuZGxlIHBvaW50cyB0byBh IGRyaXZlciBpbWFnZS4NCj4gPiArICAgIC8vDQo+ID4gKyAgICBpZiAoVGFyZ2V0ID09IEJjZmdU YXJnZXRCb290T3JkZXIpIHsNCj4gPiArICAgICAgU2hlbGxQcmludEhpaUV4ICgNCj4gPiArICAg ICAgICAtMSwNCj4gPiArICAgICAgICAtMSwNCj4gPiArICAgICAgICBOVUxMLA0KPiA+ICsgICAg ICAgIFNUUklOR19UT0tFTiAoU1RSX0dFTl9QQVJBTV9JTlYpLA0KPiA+ICsgICAgICAgIGdTaGVs bEJjZmdIaWlIYW5kbGUsDQo+ID4gKyAgICAgICAgTCJiY2ZnIiwNCj4gPiArICAgICAgICBMIkhh bmRsZSBzaG91bGQgcG9pbnQgdG8gY29udHJvbGxlci4iDQo+ID4gKyAgICAgICk7DQo+ID4gKyAg ICAgIFNoZWxsU3RhdHVzID0gU0hFTExfTk9UX0ZPVU5EOw0KPiA+ICsgICAgfSBlbHNlIHsNCj4g PiArICAgICAgaWYgKEVGSV9FUlJPUiAoR2V0RGV2aWNlUGF0aEZvckRyaXZlckhhbmRsZSAoVGhl SGFuZGxlLA0KPiBEZXZpY2VQYXRoKSkpIHsNCj4gPiArICAgICAgICBTaGVsbFN0YXR1cyA9IFNI RUxMX05PVF9GT1VORDsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiAr DQo+ID4gKyAgcmV0dXJuIChTaGVsbFN0YXR1cyk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgIEZ1bmN0aW9uIHRvIG1vZGlmeSBhbiBvcHRpb24uDQo+ID4gKw0KPiA+ICsgIEBwYXJh bVtpbl0gQmNmZ09wZXJhdGlvbiAgUG9pbnRlciB0byBCQ0ZHIG9wZXJhdGlvbi4NCj4gPiArICBA cGFyYW1baW5dIE9yZGVyQ291bnQgICAgIFRoZSBudW1iZXIgaWYgaXRlbXMgaW4gQ3VycmVudE9y ZGVyLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFNIRUxMX1NVQ0NFU1MgICAgICAgICAgICAgVGhl IG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4NCj4gPiArICBAcmV0dmFsIFNIRUxMX0lOVkFMSURf UEFSQU1FVEVSICAgQSBwYXJhbWV0ZXIgd2FzIGludmFsaWQuDQo+ID4gKyAgQHJldHZhbCBTSEVM TF9PVVRfT0ZfUkVTT1VDRVMgICAgIEEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLg0KPiA+ICsq Ki8NCj4gPiArU0hFTExfU1RBVFVTDQo+ID4gK0JjZmdNb2QgKA0KPiA+ICsgIElOIENPTlNUIEJH RkdfT1BFUkFUSU9OICAgKkJjZmdPcGVyYXRpb24sDQo+ID4gKyAgSU4gQ09OU1QgVUlOVE4gICAg ICAgICAgICBPcmRlckNvdW50DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAg ICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICsgIEVGSV9IQU5ETEUgICAgICAgICAgICAg ICAgICAgIEN1ckhhbmRsZTsNCj4gPiArICBTSEVMTF9TVEFUVVMgICAgICAgICAgICAgICAgICBT aGVsbFN0YXR1czsNCj4gPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25T dHJbNDBdOw0KPiA+ICsgIEVGSV9TSEVMTF9GSUxFX0lORk8gICAgICAgICAgICpGaWxlTGlzdDsN Cj4gPiArICBFRklfU0hFTExfRklMRV9JTkZPICAgICAgICAgICAqQXJnOw0KPiA+ICsgIEVGSV9E RVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgICpEZXZpY2VQYXRoOw0KPiA+ICsgIEVGSV9ERVZJQ0Vf UEFUSF9QUk9UT0NPTCAgICAgICpEZXZpY2VQYXRoQnVmZmVyOw0KPiA+ICsgIEVGSV9ERVZJQ0Vf UEFUSF9QUk9UT0NPTCAgICAgICpEZXZpY2VQYXRoV2Fsa2VyOw0KPiA+ICsgIEVGSV9CT09UX01B TkFHRVJfTE9BRF9PUFRJT04gIExvYWRPcHRpb247DQo+ID4gKw0KPiA+ICsgIFNoZWxsU3RhdHVz ICAgICAgID0gU0hFTExfU1VDQ0VTUzsNCj4gPiArICBGaWxlTGlzdCAgICAgICAgICA9IE5VTEw7 DQo+ID4gKyAgRGV2aWNlUGF0aCAgICAgICAgPSBOVUxMOw0KPiA+ICsNCj4gPiArICBaZXJvTWVt ICgmTG9hZE9wdGlvbiwgc2l6ZW9mKEVGSV9CT09UX01BTkFHRVJfTE9BRF9PUFRJT04pKTsNCj4g PiArDQo+ID4gKyAgaWYgKCAoQmNmZ09wZXJhdGlvbi0+VHlwZSA9PSBCY2ZnVHlwZU1vZCAgJiYg QmNmZ09wZXJhdGlvbi0NCj4gPkRlc2NyaXB0aW9uID09IE5VTEwpICB8fA0KPiA+ICsgICAgICAg KEJjZmdPcGVyYXRpb24tPlR5cGUgPT0gQmNmZ1R5cGVNb2RmICYmIEJjZmdPcGVyYXRpb24tDQo+ ID5GaWxlTmFtZSA9PSBOVUxMKSAgICAgfHwNCj4gPiArICAgICAgIChCY2ZnT3BlcmF0aW9uLT5U eXBlID09IEJjZmdUeXBlTW9kcCAmJiBCY2ZnT3BlcmF0aW9uLQ0KPiA+RmlsZU5hbWUgPT0gTlVM TCkgICAgIHx8DQo+ID4gKyAgICAgICAoQmNmZ09wZXJhdGlvbi0+VHlwZSA9PSBCY2ZnVHlwZU1v ZGggJiYgQmNmZ09wZXJhdGlvbi0NCj4gPkhhbmRsZUluZGV4ID09IDApICAgICB8fA0KPiA+ICsg ICAgICAgKEJjZmdPcGVyYXRpb24tPk51bWJlcjEgPiBPcmRlckNvdW50KQ0KPiA+ICsgICAgICkg ew0KPiA+ICsgICAgcmV0dXJuIChTSEVMTF9JTlZBTElEX1BBUkFNRVRFUik7DQo+ID4gKyAgfQ0K PiA+ICsNCj4gPiArICBpZiAoQmNmZ09wZXJhdGlvbi0+VHlwZSA9PSBCY2ZnVHlwZU1vZGgpIHsN Cj4gPiArICAgIEN1ckhhbmRsZSA9IENvbnZlcnRIYW5kbGVJbmRleFRvSGFuZGxlIChCY2ZnT3Bl cmF0aW9uLQ0KPiA+SGFuZGxlSW5kZXgpOw0KPiA+ICsgICAgU2hlbGxTdGF0dXMgPSBHZXREZXZp Y2VQYXRoQnlIYW5kbGUgKEN1ckhhbmRsZSwgQmNmZ09wZXJhdGlvbi0NCj4gPlRhcmdldCwgJkRl dmljZVBhdGhCdWZmZXIpOw0KPiA+ICsgICAgaWYgKFNoZWxsU3RhdHVzID09IFNIRUxMX1NVQ0NF U1MpIHsNCj4gPiArICAgICAgRGV2aWNlUGF0aCA9IER1cGxpY2F0ZURldmljZVBhdGggKERldmlj ZVBhdGhCdWZmZXIpOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0gZWxzZSBpZiAoQmNmZ09wZXJhdGlv bi0+VHlwZSA9PSBCY2ZnVHlwZU1vZGYgfHwgQmNmZ09wZXJhdGlvbi0NCj4gPlR5cGUgPT0gQmNm Z1R5cGVNb2RwKSB7DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8gR2V0IERldmljZSBQYXRoIGJ5 IEZpbGVOYW1lLg0KPiA+ICsgICAgLy8NCj4gPiArICAgIFNoZWxsT3BlbkZpbGVNZXRhQXJnICgo Q0hBUjE2ICopQmNmZ09wZXJhdGlvbi0+RmlsZU5hbWUsDQo+IEVGSV9GSUxFX01PREVfUkVBRCwg JkZpbGVMaXN0KTsNCj4gPiArICAgIGlmIChGaWxlTGlzdCA9PSBOVUxMKSB7DQo+ID4gKyAgICAg IC8vDQo+ID4gKyAgICAgIC8vIFRoZSBuYW1lIG9mIGZpbGUgbWF0Y2hlZCBub3RoaW5nLg0KPiA+ ICsgICAgICAvLw0KPiA+ICsgICAgICBTaGVsbFByaW50SGlpRXggKC0xLCAtMSwgTlVMTCwgU1RS SU5HX1RPS0VODQo+IChTVFJfR0VOX0ZJTEVfT1BFTl9GQUlMKSwgZ1NoZWxsQmNmZ0hpaUhhbmRs ZSwgTCJiY2ZnIiwgQmNmZ09wZXJhdGlvbi0NCj4gPkZpbGVOYW1lKTsNCj4gPiArICAgICAgU2hl bGxTdGF0dXMgPSBTSEVMTF9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICAgIH0NCj4gPiArICAg IGVsc2UgaWYgKEZpbGVMaXN0LT5MaW5rLkZvcndhcmRMaW5rICE9IEZpbGVMaXN0LT5MaW5rLkJh Y2tMaW5rKSB7DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIC8vIElmIHRoZSBuYW1lIG9mIGZp bGUgZXhwYW5kZWQgdG8gbXVsdGlwbGUgbmFtZXMsIGl0J3MgZmFpbC4NCj4gPiArICAgICAgLy8N Cj4gPiArICAgICAgU2hlbGxQcmludEhpaUV4ICgtMSwgLTEsIE5VTEwsIFNUUklOR19UT0tFTiAo U1RSX0JDRkdfRklMRSksDQo+IGdTaGVsbEJjZmdIaWlIYW5kbGUsIEwiYmNmZyIsIEJjZmdPcGVy YXRpb24tPkZpbGVOYW1lKTsNCj4gPiArICAgICAgU2hlbGxTdGF0dXMgPSBTSEVMTF9JTlZBTElE X1BBUkFNRVRFUjsNCj4gPiArICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgIEFyZyA9IChFRklfU0hF TExfRklMRV9JTkZPICopR2V0Rmlyc3ROb2RlICgmRmlsZUxpc3QtPkxpbmspOw0KPiA+ICsgICAg ICBpZiAoRUZJX0VSUk9SIChBcmctPlN0YXR1cykpIHsNCj4gPiArICAgICAgICBTaGVsbFByaW50 SGlpRXggKC0xLCAtMSwgTlVMTCwgU1RSSU5HX1RPS0VOIChTVFJfQkNGR19GSUxFX09QRU4pLA0K PiBnU2hlbGxCY2ZnSGlpSGFuZGxlLCBMImJjZmciLCBCY2ZnT3BlcmF0aW9uLT5GaWxlTmFtZSk7 DQo+ID4gKyAgICAgICAgU2hlbGxTdGF0dXMgPSBTSEVMTF9JTlZBTElEX1BBUkFNRVRFUjsNCj4g PiArICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICBEZXZpY2VQYXRoQnVmZmVyID0gZ0VmaVNo ZWxsUHJvdG9jb2wtPkdldERldmljZVBhdGhGcm9tRmlsZVBhdGgNCj4gKEFyZy0+RnVsbE5hbWUp Ow0KPiA+ICsgICAgICAgIGlmIChEZXZpY2VQYXRoQnVmZmVyID09IE5VTEwpIHsNCj4gPiArICAg ICAgICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEsIC0xLCBOVUxMLCBTVFJJTkdfVE9LRU4gKFNUUl9C Q0ZHX0ZJTEVfRFApLA0KPiBnU2hlbGxCY2ZnSGlpSGFuZGxlLCBMImJjZmciLCBBcmctPkZ1bGxO YW1lKTsNCj4gPiArICAgICAgICAgIFNoZWxsU3RhdHVzID0gU0hFTExfVU5TVVBQT1JURUQ7DQo+ ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgICB9DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAg aWYgKFNoZWxsU3RhdHVzID09IFNIRUxMX1NVQ0NFU1MpIHsNCj4gPiArICAgICAgaWYgKEJjZmdP cGVyYXRpb24tPlR5cGUgPT0gQmNmZ1R5cGVNb2RwKSB7DQo+ID4gKyAgICAgICAgU2hlbGxTdGF0 dXMgPSBTSEVMTF9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICAgICAgICBEZXZpY2VQYXRoV2Fs a2VyID0gRGV2aWNlUGF0aEJ1ZmZlcjsNCj4gPiArICAgICAgICB3aGlsZSAoIUlzRGV2aWNlUGF0 aEVuZCAoRGV2aWNlUGF0aFdhbGtlcikpIHsNCj4gPiArICAgICAgICAgIGlmICggRGV2aWNlUGF0 aFR5cGUgKERldmljZVBhdGhXYWxrZXIpID09IE1FRElBX0RFVklDRV9QQVRIDQo+ICYmDQo+ID4g KyAgICAgICAgICAgICAgIERldmljZVBhdGhTdWJUeXBlIChEZXZpY2VQYXRoV2Fsa2VyKSA9PQ0K PiBNRURJQV9IQVJERFJJVkVfRFANCj4gPiArICAgICAgICAgICAgICkgew0KPiA+ICsgICAgICAg ICAgICAvLw0KPiA+ICsgICAgICAgICAgICAvLyBXZSBmb3VuZCB0aGUgcG9ydGlvbiBvZiBkZXZp Y2UgcGF0aCBzdGFydGluZyB3aXRoIHRoZSBoYXJkIGRyaXZlcg0KPiBwYXJ0aXRpb24uDQo+ID4g KyAgICAgICAgICAgIC8vDQo+ID4gKyAgICAgICAgICAgIFNoZWxsU3RhdHVzID0gU0hFTExfU1VD Q0VTUzsNCj4gPiArICAgICAgICAgICAgRGV2aWNlUGF0aCA9IER1cGxpY2F0ZURldmljZVBhdGgg KERldmljZVBhdGhXYWxrZXIpOw0KPiA+ICsgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAg ICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgIERldmljZVBhdGhXYWxrZXIgPSBOZXh0RGV2 aWNlUGF0aE5vZGUgKERldmljZVBhdGhXYWxrZXIpOw0KPiA+ICsgICAgICAgICAgfQ0KPiA+ICsg ICAgICAgIH0NCj4gPiArICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICBEZXZpY2VQYXRoID0g RHVwbGljYXRlRGV2aWNlUGF0aCAoRGV2aWNlUGF0aEJ1ZmZlcik7DQo+ID4gKyAgICAgIH0NCj4g PiArDQo+ID4gKyAgICAgIEZyZWVQb29sIChEZXZpY2VQYXRoQnVmZmVyKTsNCj4gPiArICAgIH0N Cj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChTaGVsbFN0YXR1cyA9PSBTSEVMTF9TVUNDRVNT KSB7DQo+ID4gKyAgICBpZiAoQmNmZ09wZXJhdGlvbi0+VGFyZ2V0ID09IEJjZmdUYXJnZXRCb290 T3JkZXIpIHsNCj4gPiArICAgICAgVW5pY29kZVNQcmludCAoT3B0aW9uU3RyLCBzaXplb2YgKE9w dGlvblN0ciksIEwiQm9vdCUwNHgiLA0KPiBCY2ZnT3BlcmF0aW9uLT5PcmRlcltCY2ZnT3BlcmF0 aW9uLT5OdW1iZXIxXSk7DQo+ID4gKyAgICB9IGVsc2Ugew0KPiA+ICsgICAgICBVbmljb2RlU1By aW50IChPcHRpb25TdHIsIHNpemVvZiAoT3B0aW9uU3RyKSwgTCJEcml2ZXIlMDR4IiwNCj4gQmNm Z09wZXJhdGlvbi0+T3JkZXJbQmNmZ09wZXJhdGlvbi0+TnVtYmVyMV0pOw0KPiA+ICsgICAgfQ0K PiA+ICsgICAgU3RhdHVzID0gRWZpQm9vdE1hbmFnZXJWYXJpYWJsZVRvTG9hZE9wdGlvbiAoT3B0 aW9uU3RyLA0KPiAmTG9hZE9wdGlvbik7DQo+ID4gKyAgICBpZiAoRUZJX0VSUk9SKFN0YXR1cykp IHsNCj4gPiArICAgICAgU2hlbGxQcmludEhpaUV4ICgtMSwgLTEsIE5VTEwsIFNUUklOR19UT0tF TiAoU1RSX0JDRkdfTk9ORSksDQo+IGdTaGVsbEJjZmdIaWlIYW5kbGUpOw0KPiA+ICsgICAgICBT aGVsbFN0YXR1cyA9IFNIRUxMX05PVF9GT1VORDsNCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4g Kw0KPiA+ICsgIGlmIChTaGVsbFN0YXR1cyA9PSBTSEVMTF9TVUNDRVNTKSB7DQo+ID4gKyAgICBp ZiAoQmNmZ09wZXJhdGlvbi0+VHlwZSA9PSBCY2ZnVHlwZU1vZCkgew0KPiA+ICsgICAgICBTSEVM TF9GUkVFX05PTl9OVUxMIChMb2FkT3B0aW9uLkRlc2NyaXB0aW9uKTsNCj4gPiArICAgICAgTG9h ZE9wdGlvbi5EZXNjcmlwdGlvbiA9IEFsbG9jYXRlQ29weVBvb2wgKFN0clNpemUgKEJjZmdPcGVy YXRpb24tDQo+ID5EZXNjcmlwdGlvbiksIEJjZmdPcGVyYXRpb24tPkRlc2NyaXB0aW9uKTsNCj4g PiArICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKExvYWRPcHRp b24uRmlsZVBhdGgpOw0KPiA+ICsgICAgICBMb2FkT3B0aW9uLkZpbGVQYXRoID0gRHVwbGljYXRl RGV2aWNlUGF0aCAoRGV2aWNlUGF0aCk7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgU3Rh dHVzID0gRWZpQm9vdE1hbmFnZXJMb2FkT3B0aW9uVG9WYXJpYWJsZSAoJkxvYWRPcHRpb24pOw0K PiA+ICsgICAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ID4gKyAgICAgIFNoZWxsUHJpbnRI aWlFeCAoLTEsIC0xLCBOVUxMLCBTVFJJTkdfVE9LRU4NCj4gKFNUUl9CQ0ZHX1NFVF9WQVJfRkFJ TCksIGdTaGVsbEJjZmdIaWlIYW5kbGUsIEwiYmNmZyIsIE9wdGlvblN0cik7DQo+ID4gKyAgICAg IFNoZWxsU3RhdHVzID0gU0hFTExfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgICB9DQo+ID4g KyAgfQ0KPiA+ICsNCj4gPiArICBFZmlCb290TWFuYWdlckZyZWVMb2FkT3B0aW9uICgmTG9hZE9w dGlvbik7DQo+ID4gKw0KPiA+ICsgIGlmIChEZXZpY2VQYXRoICE9IE5VTEwpIHsNCj4gPiArICAg IEZyZWVQb29sIChEZXZpY2VQYXRoKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChGaWxl TGlzdCAhPSBOVUxMKSB7DQo+ID4gKyAgICBTaGVsbENsb3NlRmlsZU1ldGFBcmcgKCZGaWxlTGlz dCk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICByZXR1cm4gKFNoZWxsU3RhdHVzKTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gICAgRnVuY3Rpb24gdG8gYWRkIGEgb3B0aW9uLg0KPiA+ DQo+ID4gICAgQHBhcmFtW2luXSBQb3NpdGlvbiAgICAgICBUaGUgcG9zaXRpb24gdG8gYWRkIFRh cmdldCBhdC4NCj4gPiBAQCAtMTQwNCw2ICsxNjUwLDEwMiBAQCBTaGVsbENvbW1hbmRSdW5CY2Zn ICgNCj4gPiAgICAgICAgICAgICAgICB9DQo+ID4gICAgICAgICAgICAgIH0NCj4gPiAgICAgICAg ICAgIH0NCj4gPiArICAgICAgICB9DQo+ID4gKyAgICAgICAgZWxzZSBpZiAoZ1VuaWNvZGVDb2xs YXRpb24tPlN0cmlDb2xsIChnVW5pY29kZUNvbGxhdGlvbiwNCj4gKENIQVIxNiopQ3VycmVudFBh cmFtLCBMIm1vZCIpID09IDApIHsNCj4gPiArICAgICAgICAgIGlmICgoUGFyYW1OdW1iZXIgKyAy KSA+PSBTaGVsbENvbW1hbmRMaW5lR2V0Q291bnQgKFBhY2thZ2UpKSB7DQo+ID4gKyAgICAgICAg ICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEsIC0xLCBOVUxMLCBTVFJJTkdfVE9LRU4gKFNUUl9HRU5f VE9PX0ZFVyksDQo+IGdTaGVsbEJjZmdIaWlIYW5kbGUsIEwiYmNmZyIpOw0KPiA+ICsgICAgICAg ICAgICBTaGVsbFN0YXR1cyA9IFNIRUxMX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgICAgICAg ICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgQ3VycmVudE9wZXJhdGlvbi5UeXBlID0gQmNm Z1R5cGVNb2Q7DQo+ID4gKyAgICAgICAgICAgIEN1cnJlbnRQYXJhbSA9IFNoZWxsQ29tbWFuZExp bmVHZXRSYXdWYWx1ZSAoUGFja2FnZSwNCj4gKytQYXJhbU51bWJlcik7DQo+ID4gKyAgICAgICAg ICAgIGlmIChDdXJyZW50UGFyYW0gPT0gTlVMTCB8fCAhU2hlbGxJc0hleE9yRGVjaW1hbE51bWJl cg0KPiAoQ3VycmVudFBhcmFtLCBUUlVFLCBGQUxTRSkpIHsNCj4gPiArICAgICAgICAgICAgICBT aGVsbFByaW50SGlpRXggKC0xLCAtMSwgTlVMTCwgU1RSSU5HX1RPS0VODQo+IChTVFJfR0VOX1BB UkFNX0lOViksIGdTaGVsbEJjZmdIaWlIYW5kbGUsIEwiYmNmZyIsIEN1cnJlbnRQYXJhbSk7DQo+ ID4gKyAgICAgICAgICAgICAgU2hlbGxTdGF0dXMgPSBTSEVMTF9JTlZBTElEX1BBUkFNRVRFUjsN Cj4gPiArICAgICAgICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgICBTdGF0dXMgPSBT aGVsbENvbnZlcnRTdHJpbmdUb1VpbnQ2NCAoQ3VycmVudFBhcmFtLA0KPiAmSW50ZXJtZWRpYXRl LCBUUlVFLCBGQUxTRSk7DQo+ID4gKyAgICAgICAgICAgICAgQ3VycmVudE9wZXJhdGlvbi5OdW1i ZXIxID0gKFVJTlQxNilJbnRlcm1lZGlhdGU7DQo+ID4gKyAgICAgICAgICAgICAgaWYgKEN1cnJl bnRPcGVyYXRpb24uTnVtYmVyMSA+PSBDb3VudCkgew0KPiA+ICsgICAgICAgICAgICAgICAgU2hl bGxQcmludEhpaUV4ICgtMSwgLTEsIE5VTEwsIFNUUklOR19UT0tFTg0KPiAoU1RSX0JDRkdfTlVN Ql9SQU5HRSksIGdTaGVsbEJjZmdIaWlIYW5kbGUsIEwiYmNmZyIsIENvdW50KTsNCj4gPiArICAg ICAgICAgICAgICAgIFNoZWxsU3RhdHVzID0gU0hFTExfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4g KyAgICAgICAgICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgICAgIEFTU0VSVCAoQ3Vy cmVudE9wZXJhdGlvbi5EZXNjcmlwdGlvbiA9PSBOVUxMKTsNCj4gPiArICAgICAgICAgICAgICAg IEN1cnJlbnRPcGVyYXRpb24uRGVzY3JpcHRpb24gPSBTdHJuQ2F0R3Jvdw0KPiAoJkN1cnJlbnRP cGVyYXRpb24uRGVzY3JpcHRpb24sIE5VTEwsIFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1ZQ0K PiAoUGFja2FnZSwgKytQYXJhbU51bWJlciksIDApOw0KPiA+ICsgICAgICAgICAgICAgIH0NCj4g PiArICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgfQ0KPiA+ICsgICAgICAgIH0gZWxzZSBp ZiAoZ1VuaWNvZGVDb2xsYXRpb24tPlN0cmlDb2xsIChnVW5pY29kZUNvbGxhdGlvbiwNCj4gKENI QVIxNiopQ3VycmVudFBhcmFtLCBMIm1vZGYiKSA9PSAwKSB7DQo+ID4gKyAgICAgICAgICBpZiAo KFBhcmFtTnVtYmVyICsgMikgPj0gU2hlbGxDb21tYW5kTGluZUdldENvdW50IChQYWNrYWdlKSkg ew0KPiA+ICsgICAgICAgICAgICBTaGVsbFByaW50SGlpRXggKC0xLCAtMSwgTlVMTCwgU1RSSU5H X1RPS0VOIChTVFJfR0VOX1RPT19GRVcpLA0KPiBnU2hlbGxCY2ZnSGlpSGFuZGxlLCBMImJjZmci KTsNCj4gPiArICAgICAgICAgICAgU2hlbGxTdGF0dXMgPSBTSEVMTF9JTlZBTElEX1BBUkFNRVRF UjsNCj4gPiArICAgICAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgIEN1cnJlbnRPcGVy YXRpb24uVHlwZSA9IEJjZmdUeXBlTW9kZjsNCj4gPiArICAgICAgICAgICAgQ3VycmVudFBhcmFt ID0gU2hlbGxDb21tYW5kTGluZUdldFJhd1ZhbHVlIChQYWNrYWdlLA0KPiArK1BhcmFtTnVtYmVy KTsNCj4gPiArICAgICAgICAgICAgaWYgKEN1cnJlbnRQYXJhbSA9PSBOVUxMIHx8ICFTaGVsbElz SGV4T3JEZWNpbWFsTnVtYmVyDQo+IChDdXJyZW50UGFyYW0sIFRSVUUsIEZBTFNFKSkgew0KPiA+ ICsgICAgICAgICAgICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEsIC0xLCBOVUxMLCBTVFJJTkdfVE9L RU4NCj4gKFNUUl9HRU5fUEFSQU1fSU5WKSwgZ1NoZWxsQmNmZ0hpaUhhbmRsZSwgTCJiY2ZnIiwg Q3VycmVudFBhcmFtKTsNCj4gPiArICAgICAgICAgICAgICBTaGVsbFN0YXR1cyA9IFNIRUxMX0lO VkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgICAgICAgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAg ICAgICAgIFN0YXR1cyA9IFNoZWxsQ29udmVydFN0cmluZ1RvVWludDY0ICAoQ3VycmVudFBhcmFt LA0KPiAmSW50ZXJtZWRpYXRlLCBUUlVFLCBGQUxTRSk7DQo+ID4gKyAgICAgICAgICAgICAgQ3Vy cmVudE9wZXJhdGlvbi5OdW1iZXIxID0gKFVJTlQxNilJbnRlcm1lZGlhdGU7DQo+ID4gKyAgICAg ICAgICAgICAgaWYgKEN1cnJlbnRPcGVyYXRpb24uTnVtYmVyMSA+PSBDb3VudCkgew0KPiA+ICsg ICAgICAgICAgICAgICAgU2hlbGxQcmludEhpaUV4ICgtMSwgLTEsIE5VTEwsIFNUUklOR19UT0tF Tg0KPiAoU1RSX0JDRkdfTlVNQl9SQU5HRSksIGdTaGVsbEJjZmdIaWlIYW5kbGUsIEwiYmNmZyIs IENvdW50KTsNCj4gPiArICAgICAgICAgICAgICAgIFNoZWxsU3RhdHVzID0gU0hFTExfSU5WQUxJ RF9QQVJBTUVURVI7DQo+ID4gKyAgICAgICAgICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAg ICAgICAgIEFTU0VSVCAoQ3VycmVudE9wZXJhdGlvbi5GaWxlTmFtZSA9PSBOVUxMKTsNCj4gPiAr ICAgICAgICAgICAgICAgIEN1cnJlbnRPcGVyYXRpb24uRmlsZU5hbWUgPSBTdHJuQ2F0R3Jvdw0K PiAoJkN1cnJlbnRPcGVyYXRpb24uRmlsZU5hbWUsIE5VTEwsIFNoZWxsQ29tbWFuZExpbmVHZXRS YXdWYWx1ZQ0KPiAoUGFja2FnZSwgKytQYXJhbU51bWJlciksIDApOw0KPiA+ICsgICAgICAgICAg ICAgIH0NCj4gPiArICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgfQ0KPiA+ICsgICAgICAg IH0gZWxzZSBpZiAoZ1VuaWNvZGVDb2xsYXRpb24tPlN0cmlDb2xsIChnVW5pY29kZUNvbGxhdGlv biwNCj4gKENIQVIxNiopQ3VycmVudFBhcmFtLCBMIm1vZHAiKSA9PSAwKSB7DQo+ID4gKyAgICAg ICAgICBpZiAoKFBhcmFtTnVtYmVyICsgMikgPj0gU2hlbGxDb21tYW5kTGluZUdldENvdW50IChQ YWNrYWdlKSkgew0KPiA+ICsgICAgICAgICAgICBTaGVsbFByaW50SGlpRXggKC0xLCAtMSwgTlVM TCwgU1RSSU5HX1RPS0VOIChTVFJfR0VOX1RPT19GRVcpLA0KPiBnU2hlbGxCY2ZnSGlpSGFuZGxl LCBMImJjZmciKTsNCj4gPiArICAgICAgICAgICAgU2hlbGxTdGF0dXMgPSBTSEVMTF9JTlZBTElE X1BBUkFNRVRFUjsNCj4gPiArICAgICAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgIEN1 cnJlbnRPcGVyYXRpb24uVHlwZSA9IEJjZmdUeXBlTW9kcDsNCj4gPiArICAgICAgICAgICAgQ3Vy cmVudFBhcmFtID0gU2hlbGxDb21tYW5kTGluZUdldFJhd1ZhbHVlIChQYWNrYWdlLA0KPiArK1Bh cmFtTnVtYmVyKTsNCj4gPiArICAgICAgICAgICAgaWYgKEN1cnJlbnRQYXJhbSA9PSBOVUxMIHx8 ICFTaGVsbElzSGV4T3JEZWNpbWFsTnVtYmVyDQo+IChDdXJyZW50UGFyYW0sIFRSVUUsIEZBTFNF KSkgew0KPiA+ICsgICAgICAgICAgICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEsIC0xLCBOVUxMLCBT VFJJTkdfVE9LRU4NCj4gKFNUUl9HRU5fUEFSQU1fSU5WKSwgZ1NoZWxsQmNmZ0hpaUhhbmRsZSwg TCJiY2ZnIiwgQ3VycmVudFBhcmFtKTsNCj4gPiArICAgICAgICAgICAgICBTaGVsbFN0YXR1cyA9 IFNIRUxMX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgICAgICAgICAgICB9IGVsc2Ugew0KPiA+ ICsgICAgICAgICAgICAgIFN0YXR1cyA9IFNoZWxsQ29udmVydFN0cmluZ1RvVWludDY0IChDdXJy ZW50UGFyYW0sDQo+ICZJbnRlcm1lZGlhdGUsIFRSVUUsIEZBTFNFKTsNCj4gPiArICAgICAgICAg ICAgICBDdXJyZW50T3BlcmF0aW9uLk51bWJlcjEgPSAoVUlOVDE2KUludGVybWVkaWF0ZTsNCj4g PiArICAgICAgICAgICAgICBpZiAoQ3VycmVudE9wZXJhdGlvbi5OdW1iZXIxID49IENvdW50KSB7 DQo+ID4gKyAgICAgICAgICAgICAgICBTaGVsbFByaW50SGlpRXggKC0xLCAtMSwgTlVMTCwgU1RS SU5HX1RPS0VODQo+IChTVFJfQkNGR19OVU1CX1JBTkdFKSwgZ1NoZWxsQmNmZ0hpaUhhbmRsZSwg TCJiY2ZnIiwgQ291bnQpOw0KPiA+ICsgICAgICAgICAgICAgICAgU2hlbGxTdGF0dXMgPSBTSEVM TF9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICAgICAgICAgICAgICB9IGVsc2Ugew0KPiA+ICsg ICAgICAgICAgICAgICAgQVNTRVJUIChDdXJyZW50T3BlcmF0aW9uLkZpbGVOYW1lID09IE5VTEwp Ow0KPiA+ICsgICAgICAgICAgICAgICAgQ3VycmVudE9wZXJhdGlvbi5GaWxlTmFtZSA9IFN0cm5D YXRHcm93DQo+ICgmQ3VycmVudE9wZXJhdGlvbi5GaWxlTmFtZSwgTlVMTCwgU2hlbGxDb21tYW5k TGluZUdldFJhd1ZhbHVlDQo+IChQYWNrYWdlLCArK1BhcmFtTnVtYmVyKSwgMCk7DQo+ID4gKyAg ICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICB9DQo+ID4g KyAgICAgICAgfSBlbHNlIGlmIChnVW5pY29kZUNvbGxhdGlvbi0+U3RyaUNvbGwgKGdVbmljb2Rl Q29sbGF0aW9uLA0KPiAoQ0hBUjE2KilDdXJyZW50UGFyYW0sIEwibW9kaCIpID09IDApIHsNCj4g PiArICAgICAgICAgIGlmICgoUGFyYW1OdW1iZXIgKyAyKSA+PSBTaGVsbENvbW1hbmRMaW5lR2V0 Q291bnQgKFBhY2thZ2UpKSB7DQo+ID4gKyAgICAgICAgICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEs IC0xLCBOVUxMLCBTVFJJTkdfVE9LRU4gKFNUUl9HRU5fVE9PX0ZFVyksDQo+IGdTaGVsbEJjZmdI aWlIYW5kbGUsIEwiYmNmZyIpOw0KPiA+ICsgICAgICAgICAgICBTaGVsbFN0YXR1cyA9IFNIRUxM X0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgICAgICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAg ICAgICAgQ3VycmVudE9wZXJhdGlvbi5UeXBlID0gQmNmZ1R5cGVNb2RoOw0KPiA+ICsgICAgICAg ICAgICBDdXJyZW50UGFyYW0gPSBTaGVsbENvbW1hbmRMaW5lR2V0UmF3VmFsdWUgKFBhY2thZ2Us DQo+ICsrUGFyYW1OdW1iZXIpOw0KPiA+ICsgICAgICAgICAgICBpZiAoQ3VycmVudFBhcmFtID09 IE5VTEwgfHwgIVNoZWxsSXNIZXhPckRlY2ltYWxOdW1iZXINCj4gKEN1cnJlbnRQYXJhbSwgVFJV RSwgRkFMU0UpKSB7DQo+ID4gKyAgICAgICAgICAgICAgU2hlbGxQcmludEhpaUV4ICgtMSwgLTEs IE5VTEwsIFNUUklOR19UT0tFTg0KPiAoU1RSX0dFTl9QQVJBTV9JTlYpLCBnU2hlbGxCY2ZnSGlp SGFuZGxlLCBMImJjZmciLCBDdXJyZW50UGFyYW0pOw0KPiA+ICsgICAgICAgICAgICAgIFNoZWxs U3RhdHVzID0gU0hFTExfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgICAgICAgICAgIH0NCj4g PiArICAgICAgICAgICAgZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICAgU3RhdHVzID0gU2hlbGxD b252ZXJ0U3RyaW5nVG9VaW50NjQgKEN1cnJlbnRQYXJhbSwNCj4gJkludGVybWVkaWF0ZSwgVFJV RSwgRkFMU0UpOw0KPiA+ICsgICAgICAgICAgICAgIEN1cnJlbnRPcGVyYXRpb24uTnVtYmVyMSA9 IChVSU5UMTYpSW50ZXJtZWRpYXRlOw0KPiA+ICsgICAgICAgICAgICAgIGlmIChDdXJyZW50T3Bl cmF0aW9uLk51bWJlcjEgPj0gQ291bnQpIHsNCj4gPiArICAgICAgICAgICAgICAgIFNoZWxsUHJp bnRIaWlFeCAoLTEsIC0xLCBOVUxMLCBTVFJJTkdfVE9LRU4NCj4gKFNUUl9CQ0ZHX05VTUJfUkFO R0UpLCBnU2hlbGxCY2ZnSGlpSGFuZGxlLCBMImJjZmciLCBDb3VudCk7DQo+ID4gKyAgICAgICAg ICAgICAgICBTaGVsbFN0YXR1cyA9IFNIRUxMX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgICAg ICAgICAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICAgICBDdXJyZW50UGFyYW0gPSBT aGVsbENvbW1hbmRMaW5lR2V0UmF3VmFsdWUgKFBhY2thZ2UsDQo+ICsrUGFyYW1OdW1iZXIpOw0K PiA+ICsgICAgICAgICAgICAgICAgaWYgKEN1cnJlbnRQYXJhbSA9PSBOVUxMIHx8ICFTaGVsbElz SGV4T3JEZWNpbWFsTnVtYmVyDQo+IChDdXJyZW50UGFyYW0sIFRSVUUsIEZBTFNFKSkgew0KPiA+ ICsgICAgICAgICAgICAgICAgICBTaGVsbFByaW50SGlpRXggKC0xLCAtMSwgTlVMTCwgU1RSSU5H X1RPS0VODQo+IChTVFJfR0VOX1BBUkFNX0lOViksIGdTaGVsbEJjZmdIaWlIYW5kbGUsIEwiYmNm ZyIsIEN1cnJlbnRQYXJhbSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgIFNoZWxsU3RhdHVzID0g U0hFTExfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgICAgICAgICAgICAgICB9IGVsc2Ugew0K PiA+ICsgICAgICAgICAgICAgICAgICBTdGF0dXMgPSBTaGVsbENvbnZlcnRTdHJpbmdUb1VpbnQ2 NCAoQ3VycmVudFBhcmFtLA0KPiAmSW50ZXJtZWRpYXRlLCBUUlVFLCBGQUxTRSk7DQo+ID4gKyAg ICAgICAgICAgICAgICAgIEN1cnJlbnRPcGVyYXRpb24uSGFuZGxlSW5kZXggPSAoVUlOVDE2KUlu dGVybWVkaWF0ZTsNCj4gPiArICAgICAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAgICB9 DQo+ID4gKyAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgIH0NCj4gPiAgICAgICAgICB9IGVs c2Ugew0KPiA+ICAgICAgICAgICAgU2hlbGxQcmludEhpaUV4KC0xLCAtMSwgTlVMTCwgU1RSSU5H X1RPS0VOIChTVFJfR0VOX1BBUkFNX0lOViksDQo+IGdTaGVsbEJjZmdIaWlIYW5kbGUsIEwiYmNm ZyIsIEN1cnJlbnRQYXJhbSk7DQo+ID4gICAgICAgICAgICBTaGVsbFN0YXR1cyA9IFNIRUxMX0lO VkFMSURfUEFSQU1FVEVSOw0KPiA+IEBAIC0xNDUxLDYgKzE3OTMsMTIgQEAgU2hlbGxDb21tYW5k UnVuQmNmZyAoDQo+ID4gICAgICAgICAgICAgIChCT09MRUFOKShDdXJyZW50T3BlcmF0aW9uLlR5 cGUgPT0gQmNmZ1R5cGVBZGRwKSwNCj4gPiAgICAgICAgICAgICAgQ3VycmVudE9wZXJhdGlvbi5I YW5kbGVJbmRleCk7DQo+ID4gICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAgICBjYXNlICAg QmNmZ1R5cGVNb2Q6DQo+ID4gKyAgICAgICAgY2FzZSAgIEJjZmdUeXBlTW9kZjoNCj4gPiArICAg ICAgICBjYXNlICAgQmNmZ1R5cGVNb2RwOg0KPiA+ICsgICAgICAgIGNhc2UgICBCY2ZnVHlwZU1v ZGg6DQo+ID4gKyAgICAgICAgICBTaGVsbFN0YXR1cyA9IEJjZmdNb2QgKCZDdXJyZW50T3BlcmF0 aW9uLCBDb3VudCk7DQo+ID4gKyAgICAgICAgICBicmVhazsNCj4gPiAgICAgICAgICBjYXNlICAg QmNmZ1R5cGVPcHQ6DQo+ID4gICAgICAgICAgICBTaGVsbFN0YXR1cyA9IEJjZmdBZGRPcHQoDQo+ ID4gICAgICAgICAgICAgIEN1cnJlbnRPcGVyYXRpb24uT3B0RGF0YSwNCj4gPiBkaWZmIC0tZ2l0 DQo+IGEvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxCY2ZnQ29tbWFuZExpYi9VZWZpU2hlbGxC Y2ZnQ29tbWFuZExpYi5pbmYNCj4gYi9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEJjZmdDb21t YW5kTGliL1VlZmlTaGVsbEJjZmdDb21tYW5kTGliLmluZg0KPiA+IGluZGV4IDQ0YzhiN2UuLjg4 Yjk2ZWEgMTAwNjQ0DQo+ID4gLS0tDQo+IGEvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxCY2Zn Q29tbWFuZExpYi9VZWZpU2hlbGxCY2ZnQ29tbWFuZExpYi5pbmYNCj4gPiArKysNCj4gYi9TaGVs bFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEJjZmdDb21tYW5kTGliL1VlZmlTaGVsbEJjZmdDb21tYW5k TGliLmluZg0KPiA+IEBAIC0xLDcgKzEsNyBAQA0KPiA+ICAjIyAgQGZpbGUNCj4gPiAgIyAgUHJv dmlkZXMgc2hlbGwgaW5zdGFsbDEgZnVuY3Rpb25zDQo+ID4gICMNCj4gPiAtIyAgQ29weXJpZ2h0 IChjKSAyMDEwIC0gMjAxNSwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu IDxCUj4NCj4gPiArIyAgQ29weXJpZ2h0IChjKSAyMDEwIC0gMjAxNywgSW50ZWwgQ29ycG9yYXRp b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIDxCUj4NCj4gPiAgIw0KPiA+ICAjICBUaGlzIHByb2dy YW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ID4gICMgIGFyZSBsaWNlbnNlZCBh bmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQ0K PiBCU0QgTGljZW5zZQ0KPiA+IEBAIC00MSw2ICs0MSw3IEBAIFtMaWJyYXJ5Q2xhc3Nlc10NCj4g PiAgICBVZWZpQm9vdFNlcnZpY2VzVGFibGVMaWINCj4gPiAgICBTb3J0TGliDQo+ID4gICAgUHJp bnRMaWINCj4gPiArICBVZWZpQm9vdE1hbmFnZXJMaWINCj4gPg0KPiA+ICBbR3VpZHNdDQo+ID4g ICAgZ1NoZWxsQmNmZ0hpaUd1aWQgICAgICAgICAgICAgIyMgU09NRVRJTUVTX0NPTlNVTUVTICMj IEhJSQ0KPiA+IGRpZmYgLS1naXQgYS9TaGVsbFBrZy9TaGVsbFBrZy5kc2MgYi9TaGVsbFBrZy9T aGVsbFBrZy5kc2MNCj4gPiBpbmRleCA1YzAxOTMzLi5hODc0MjhhIDEwMDY0NA0KPiA+IC0tLSBh L1NoZWxsUGtnL1NoZWxsUGtnLmRzYw0KPiA+ICsrKyBiL1NoZWxsUGtnL1NoZWxsUGtnLmRzYw0K PiA+IEBAIC01NSw2ICs1NSwxNCBAQCBbTGlicmFyeUNsYXNzZXMuY29tbW9uXQ0KPiA+DQo+IEJj ZmdDb21tYW5kTGlifFNoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsQmNmZ0NvbW1hbmRMaWIvVWVm aVNoZWxsQmNmZw0KPiBDb21tYW5kTGliLmluZg0KPiA+ICAgIElvTGlifE1kZVBrZy9MaWJyYXJ5 L0Jhc2VJb0xpYkludHJpbnNpYy9CYXNlSW9MaWJJbnRyaW5zaWMuaW5mDQo+ID4NCj4gPiArDQo+ IFVlZmlCb290TWFuYWdlckxpYnxNZGVNb2R1bGVQa2cvTGlicmFyeS9VZWZpQm9vdE1hbmFnZXJM aWIvVWVmaUJvbw0KPiB0TWFuYWdlckxpYi5pbmYNCj4gPiArICBIb2JMaWJ8TWRlUGtnL0xpYnJh cnkvRHhlSG9iTGliL0R4ZUhvYkxpYi5pbmYNCj4gPiArDQo+IFRpbWVyTGlifE1kZVBrZy9MaWJy YXJ5L0Jhc2VUaW1lckxpYk51bGxUZW1wbGF0ZS9CYXNlVGltZXJMaWJOdWxsVGVtDQo+IHBsYXRl LmluZg0KPiA+ICsNCj4gUGVyZm9ybWFuY2VMaWJ8TWRlUGtnL0xpYnJhcnkvQmFzZVBlcmZvcm1h bmNlTGliTnVsbC9CYXNlUGVyZm9ybWFuYw0KPiBlTGliTnVsbC5pbmYNCj4gPiArDQo+IER4ZVNl cnZpY2VzVGFibGVMaWJ8TWRlUGtnL0xpYnJhcnkvRHhlU2VydmljZXNUYWJsZUxpYi9EeGVTZXJ2 aWNlc1RhYmwNCj4gZUxpYi5pbmYNCj4gPiArICBEeGVTZXJ2aWNlc0xpYnxNZGVQa2cvTGlicmFy eS9EeGVTZXJ2aWNlc0xpYi9EeGVTZXJ2aWNlc0xpYi5pbmYNCj4gPiArDQo+IFJlcG9ydFN0YXR1 c0NvZGVMaWJ8TWRlUGtnL0xpYnJhcnkvQmFzZVJlcG9ydFN0YXR1c0NvZGVMaWJOdWxsL0Jhc2VS DQo+IGVwb3J0U3RhdHVzQ29kZUxpYk51bGwuaW5mDQo+ID4gKw0KPiA+ICBbTGlicmFyeUNsYXNz ZXMuQVJNXQ0KPiA+ICAgICMNCj4gPiAgICAjIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBwcmV2ZW50 IHRoZSBBUk0gY29tcGlsZXIgZm9yIGdlbmVyaWMgaW50cmluc2ljDQo+IGZ1bmN0aW9ucy4NCj4g PiAtLQ0KPiA+IDIuOS4wLndpbmRvd3MuMQ0KPiA+DQo+ID4gX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gPiBlZGsyLWRldmVsIG1haWxpbmcgbGlzdA0K PiA+IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnDQo+ID4gaHR0cHM6Ly9saXN0cy4wMS5vcmcvbWFp bG1hbi9saXN0aW5mby9lZGsyLWRldmVsDQo=