From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=40.107.2.77; helo=eur02-ve1-obe.outbound.protection.outlook.com; envelope-from=meenakshi.aggarwal@nxp.com; receiver=edk2-devel@lists.01.org Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-eopbgr20077.outbound.protection.outlook.com [40.107.2.77]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 872BE2035BB33 for ; Mon, 13 Nov 2017 21:11:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=Gh91zU3Ihb+sWBOVQEX1ymJvt32kWkvZR2e0vBk7S58=; b=i9K7h7VR679qun9rG3vP42KA9Wpi96KMWY1wcsN8kxwjIdK/NDmRqKQj5iEZvlvt3KEws27PpQtDaPFhm6EfdD5+Ps7J5MLcfm+LabJ8G6OhQVOBoWTVQMSsG6MH3e4M0PLiU4NzRv7mHoRymupY8rhEVAQbYKC1ftZSZaVOL3U= Received: from DB5PR04MB0998.eurprd04.prod.outlook.com (10.161.199.12) by HE1PR0402MB3337.eurprd04.prod.outlook.com (10.167.125.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.218.12; Tue, 14 Nov 2017 05:15:39 +0000 Received: from DB5PR04MB0998.eurprd04.prod.outlook.com ([fe80::7964:3b7:763b:63ba]) by DB5PR04MB0998.eurprd04.prod.outlook.com ([fe80::7964:3b7:763b:63ba%13]) with mapi id 15.20.0197.017; Tue, 14 Nov 2017 05:15:39 +0000 From: Meenakshi Aggarwal To: Ard Biesheuvel CC: Leif Lindholm , "Kinney, Michael D" , "edk2-devel@lists.01.org" , Udit Kumar , Varun Sethi Thread-Topic: [PATCH 01/10] Platform/NXP: Library to provide helper functions. Thread-Index: AQHTV6X/r/ydUb1wdkqMw9N+JFczfqMSQEiAgAEBnlA= Date: Tue, 14 Nov 2017 05:15:38 +0000 Message-ID: References: <1510065736-9394-1-git-send-email-meenakshi.aggarwal@nxp.com> <1510065736-9394-2-git-send-email-meenakshi.aggarwal@nxp.com> In-Reply-To: Accept-Language: en-GB, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=meenakshi.aggarwal@nxp.com; x-originating-ip: [192.88.169.1] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; HE1PR0402MB3337; 6:QKoCiO4eZpA4Jf9v4+1ZJu30uqlfMdPOBiyMm2f0icH6TiWOgZ+nBLDETt+xqYiK7eoTSx3Yk3YTxdOcvLvSMLQdQ0x+/JNWcL5cRme2foON3464hcMxJUwwiimRy5ZY3+eFHXSjucZrygYTl79hd4JW2ZtzYC8kBkVEPt9GSYdvX3jvIJsETyyV0oXWs+vduhLcmsugt+xqJVwfy1q79GFC9nHyPXNZju0Amx9IK2ogf5OFvInL9i959zxhu96bfkh5to6lXzVNdJDBS24fm8ur32gILE7dl3JwOMbbRi5l/uf3jgqxGCfR2OMM9V/by+ru+E0+ZiI7z597YMVRrcFVfyIM4CpG/yPe7gXeK3c=; 5:PsJ23TdA/lHVGnKB0P8Zd+1DJmfkELcst9w8LdNYuXQfVJz12TUNIl2vPdUD2hcJB5NdcjCNG6hVwozWLASRv9uJPkJsGxOVCkyvn+TcqqJvOwx4gvUmOyHKHPwQYEi5T6RILL+tvnh2Qm08txHVG2s8ex/In64QTPiSnkQ32Zk=; 24:uDIePzr4GR/9blGKJ77E+8EJLyyXyzhjTwpNelvRGfXHR+kfaxuCy5INkMsq35J/hR4+h8V2yKWxfBHVdOOxhu+LnVPJZGN1ZN3OyZ+ocaM=; 7:CSqH0oXxjaUa9vihN+H3T4z4yDk66lxKZTL5ojNY8QtsNUgbTeBS/Gwwf/j19dFkriCTacedg2MHAUUFmbE9Mq0bLHNXb5bjaD1Kwhu/POxNjmv5FQE7k0n0cuBo5jeAMHyavtOukam8quz9TB3oysZoVJXcYl/cl+UrKgJ/qkYX7D32eNUJjM8OKS7IC6saKmMBCw2S8rbby7+oDdWxwiygKOdycSPhBd0aBokvxZ87AM2rzKIwAltuvvhpg2S0 x-ms-exchange-antispam-srfa-diagnostics: SSOS;SSOR; x-forefront-antispam-report: SFV:SKI; SCL:-1; SFV:NSPM; SFS:(10009020)(6009001)(346002)(376002)(39860400002)(189002)(24454002)(13464003)(199003)(7736002)(105586002)(25786009)(6246003)(55016002)(6306002)(9686003)(53936002)(316002)(8936002)(4326008)(99286004)(81156014)(81166006)(5250100002)(97736004)(74316002)(8676002)(5660300001)(3280700002)(3660700001)(106356001)(2906002)(7696004)(76176999)(54356999)(50986999)(86362001)(33656002)(575784001)(101416001)(6116002)(66066001)(14454004)(102836003)(3846002)(6916009)(2950100002)(53546010)(54906003)(2900100001)(966005)(45080400002)(229853002)(478600001)(189998001)(305945005)(6436002)(68736007)(6506006)(16799955002)(21314002)(547064002)(19627235001); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR0402MB3337; H:DB5PR04MB0998.eurprd04.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; x-ms-office365-filtering-correlation-id: 120ccb2e-e61e-4de7-9708-08d52b1ebeaa x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(48565401081)(2017052603199); SRVR:HE1PR0402MB3337; x-ms-traffictypediagnostic: HE1PR0402MB3337: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(189930954265078)(185117386973197)(788757137089)(162533806227266)(45079756050767)(228905959029699); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(5005006)(8121501046)(3002001)(10201501046)(3231022)(93006095)(93001095)(100000703101)(100105400095)(6055026)(6041248)(20161123562025)(20161123558100)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(20161123560025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:HE1PR0402MB3337; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:HE1PR0402MB3337; x-forefront-prvs: 04916EA04C received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 120ccb2e-e61e-4de7-9708-08d52b1ebeaa X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Nov 2017 05:15:38.9407 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0402MB3337 Subject: Re: [PATCH 01/10] Platform/NXP: Library to provide helper functions. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Nov 2017 05:11:37 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQXJkIEJpZXNoZXV2ZWwg W21haWx0bzphcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnXQ0KPiBTZW50OiBNb25kYXksIE5vdmVt YmVyIDEzLCAyMDE3IDU6MzYgUE0NCj4gVG86IE1lZW5ha3NoaSBBZ2dhcndhbCA8bWVlbmFrc2hp LmFnZ2Fyd2FsQG54cC5jb20+DQo+IENjOiBMZWlmIExpbmRob2xtIDxsZWlmLmxpbmRob2xtQGxp bmFyby5vcmc+OyBLaW5uZXksIE1pY2hhZWwgRA0KPiA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5j b20+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzsgVWRpdCBLdW1hcg0KPiA8dWRpdC5rdW1hckBu eHAuY29tPjsgVmFydW4gU2V0aGkgPFYuU2V0aGlAbnhwLmNvbT4NCj4gU3ViamVjdDogUmU6IFtQ QVRDSCAwMS8xMF0gUGxhdGZvcm0vTlhQOiBMaWJyYXJ5IHRvIHByb3ZpZGUgaGVscGVyDQo+IGZ1 bmN0aW9ucy4NCj4gDQo+IE9uIDcgTm92ZW1iZXIgMjAxNyBhdCAxNDo0MiwgTWVlbmFrc2hpIEFn Z2Fyd2FsDQo+IDxtZWVuYWtzaGkuYWdnYXJ3YWxAbnhwLmNvbT4gd3JvdGU6DQo+ID4gVXRpbHNM aWIgcHJvdmlkZSBoZWxwZXIgZnVuY3Rpb25zIHdoaWNoIHdpbGwgYmUgbmVlZGVkIGJ5IE5YUCBT b0NzDQo+ID4gTGlicmFyeSBhbmQgRHJpdmVycy4NCj4gPg0KPiA+IENvbnRyaWJ1dGVkLXVuZGVy OiBUaWFub0NvcmUgQ29udHJpYnV0aW9uIEFncmVlbWVudCAxLjENCj4gPiBTaWduZWQtb2ZmLWJ5 OiBNZWVuYWtzaGkgQWdnYXJ3YWwgPG1lZW5ha3NoaS5hZ2dhcndhbEBueHAuY29tPg0KPiA+IC0t LQ0KPiA+ICBQbGF0Zm9ybS9OWFAvSW5jbHVkZS9MaWJyYXJ5L1V0aWxzLmggICAgfCAxMzcNCj4g KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gPiAgUGxhdGZvcm0vTlhQL0xpYnJh cnkvVXRpbHNMaWIvVXRpbHMuYyAgIHwgIDk3ICsrKysrKysrKysrKysrKysrKysrKysNCj4gPiAg UGxhdGZvcm0vTlhQL0xpYnJhcnkvVXRpbHNMaWIvVXRpbHMuaW5mIHwgIDMwICsrKysrKysNCj4g PiAgMyBmaWxlcyBjaGFuZ2VkLCAyNjQgaW5zZXJ0aW9ucygrKQ0KPiA+ICBjcmVhdGUgbW9kZSAx MDA2NDQgUGxhdGZvcm0vTlhQL0luY2x1ZGUvTGlicmFyeS9VdGlscy5oDQo+ID4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBQbGF0Zm9ybS9OWFAvTGlicmFyeS9VdGlsc0xpYi9VdGlscy5jDQo+ID4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9OWFAvTGlicmFyeS9VdGlsc0xpYi9VdGlscy5pbmYN Cj4gPg0KPiA+IGRpZmYgLS1naXQgYS9QbGF0Zm9ybS9OWFAvSW5jbHVkZS9MaWJyYXJ5L1V0aWxz LmgNCj4gPiBiL1BsYXRmb3JtL05YUC9JbmNsdWRlL0xpYnJhcnkvVXRpbHMuaA0KPiA+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMC4uODkyMGU0ZA0KPiA+IC0tLSAvZGV2 L251bGwNCj4gPiArKysgYi9QbGF0Zm9ybS9OWFAvSW5jbHVkZS9MaWJyYXJ5L1V0aWxzLmgNCj4g PiBAQCAtMCwwICsxLDEzNyBAQA0KPiA+ICsvKiogVXRpbHMuaA0KPiA+ICsgIEhlYWRlciBkZWZp bmluZyB0aGUgR2VuZXJhbCBQdXJwb3NlIFV0aWxpdGllcw0KPiA+ICsNCj4gPiArICBDb3B5cmln aHQgMjAxNyBOWFANCj4gPiArDQo+ID4gKyAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55 aW5nIG1hdGVyaWFscyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlDQo+ID4gKyBhdmFpbGFibGUgdW5k ZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZSAgd2hpY2gNCj4g PiArIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUg bGljZW5zZSBtYXkgYmUNCj4gPiArIGZvdW5kIGF0DQo+ID4gKw0KPiA+ICsNCj4gaHR0cHM6Ly9l bWVhMDEuc2FmZWxpbmtzLnByb3RlY3Rpb24ub3V0bG9vay5jb20vP3VybD1odHRwJTNBJTJGJTJG b3ANCj4gPiArIGVuc291cmNlLm9yZyUyRmxpY2Vuc2VzJTJGYnNkLQ0KPiBsaWNlbnNlLnBocCZk YXRhPTAyJTdDMDElN0NtZWVuYWtzaGkuYQ0KPiA+ICsNCj4gZ2dhcndhbCU0MG54cC5jb20lN0Mx NTQ1YzI5ZDU5YWQ0NjQ0YzM4YjA4ZDUyYThlZWUxMCU3QzY4NmVhMWQzDQo+IGJjMmI0DQo+ID4g Kw0KPiBjNmZhOTJjZDk5YzVjMzAxNjM1JTdDMCU3QzAlN0M2MzY0NjE3MTU3Mzc4Njk4OTEmc2Rh dGE9YnBiaXBOSTN6JQ0KPiAyRm0NCj4gPiArIHRGMk5UbiUyQkxFTFlCZnYxQzM4RlBmTTE0YXBo MiUyQlJLQSUzRCZyZXNlcnZlZD0wDQo+ID4gKw0KPiA+ICsgIFRIRSBQUk9HUkFNIElTIERJU1RS SUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+ID4gKyBCQVNJUywg IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsDQo+IEVJ VEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArDQo+ID4gKyNp Zm5kZWYgX19VVElMU19IX18NCj4gPiArI2RlZmluZSBfX1VUSUxTX0hfXw0KPiA+ICsNCj4gPiAr LyoNCj4gPiArICogRGl2aWRlIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIGRpdmlkZW5kIGJ5IHBvc2l0 aXZlIGRpdmlzb3IgYW5kIHJvdW5kDQo+ID4gKyAqIHRvIGNsb3Nlc3QgVUlOVE5lZ2VyLiBSZXN1 bHQgaXMgdW5kZWZpbmVkIGZvciBuZWdhdGl2ZSBkaXZpc29ycw0KPiA+ICthbmQNCj4gDQo+IFNl YXJjaC9yZXBsYWNlIGVycm9yDQo+IA0KT0ssIHdpbGwgZG8gdGhpcw0KDQo+ID4gKyAqIGZvciBu ZWdhdGl2ZSBkaXZpZGVuZHMgaWYgdGhlIGRpdmlzb3IgdmFyaWFibGUgdHlwZSBpcyB1bnNpZ25l ZC4NCj4gPiArICovDQo+ID4gKyNkZWZpbmUgRElWX1JPVU5EX0NMT1NFU1QoWCwgRGl2aXNvciko ICAgICAgICAgICBcDQo+ID4gK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcDQo+ID4gKyAgdHlwZW9mKFgpIF9fWCA9IFg7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcDQo+ID4gKyAgdHlwZW9mKERpdmlzb3IpIF9fRCA9IERpdmlzb3I7ICAgICAg ICAgICAgICAgICBcDQo+ID4gKyAgKCgodHlwZW9mKFgpKS0xKSA+IDAgfHwgICAgICAgICAgICAg ICAgICAgICAgICBcDQo+ID4gKyAgICAoKHR5cGVvZihEaXZpc29yKSktMSkgPiAwIHx8IChfX1gp ID4gMCkgPyAgICBcDQo+ID4gKyAgICAgICgoKF9fWCkgKyAoKF9fRCkgLyAyKSkgLyAoX19EKSkg OiAgICAgICAgICBcDQo+ID4gKyAgICAgICgoKF9fWCkgLSAoKF9fRCkgLyAyKSkgLyAoX19EKSk7 ICAgICAgICAgICBcDQo+ID4gK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcDQo+ID4gKykNCj4gPiArDQo+IA0KPiBXaGljaCBwYXRjaCB1c2VzIHRoaXMg ZnVuY3Rpb24/DQo+DQpUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgU3RyaW5nVG9NSHooKSBmdW5j dGlvbiwgd2hpY2ggaXMgdXNlZCBieSBTb2NMaWIuDQogDQo+ID4gKy8qDQo+ID4gKyAqIEhhbW1p bmdXZWlnaHQzMjogcmV0dXJucyB0aGUgaGFtbWluZyB3ZWlnaHQgKGkuZS4gdGhlIG51bWJlcg0K PiA+ICsgKiBvZiBiaXRzIHNldCkgb2YgYSAzMi1iaXQgd29yZA0KPiA+ICsgKi8NCj4gPiArU1RB VElDDQo+ID4gK2lubGluZQ0KPiA+ICtVSU5UTg0KPiA+ICtIYW1taW5nV2VpZ2h0MzIgKA0KPiA+ ICsgIElOICBVSU5UTiAgVw0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIFVJTlROIFJlczsNCj4g PiArDQo+ID4gKyAgUmVzID0gKFcgJiAweDU1NTU1NTU1KSArICgoVyA+PiAxKSAmIDB4NTU1NTU1 NTUpOyAgUmVzID0gKFJlcyAmDQo+ID4gKyAweDMzMzMzMzMzKSArICgoUmVzID4+IDIpICYgMHgz MzMzMzMzMyk7ICBSZXMgPSAoUmVzICYgMHgwRjBGMEYwRikgKw0KPiA+ICsgKChSZXMgPj4gNCkg JiAweDBGMEYwRjBGKTsgIFJlcyA9IChSZXMgJiAweDAwRkYwMEZGKSArICgoUmVzID4+IDgpICYN Cj4gPiArIDB4MDBGRjAwRkYpOw0KPiA+ICsNCj4gPiArICByZXR1cm4gKFJlcyAmIDB4MDAwMEZG RkYpICsgKChSZXMgPj4gMTYpICYgMHgwMDAwRkZGRik7IH0NCj4gPiArDQo+IA0KPiBQbGVhc2Ug bW92ZSB0aGlzIGludG8gdGhlIHBhdGNoIHRoYXQgdXNlcyBpdC4NCj4gDQpPSw0KDQo+ID4gK1NU QVRJQw0KPiA+ICtpbmxpbmUNCj4gPiArVUlOVE4NCj4gPiArQ3B1TWFza05leHQgKA0KPiA+ICsg IElOICBVSU5UTiAgQ3B1LA0KPiA+ICsgIElOICBVSU5UTiAgTWFzaw0KPiA+ICsgICkNCj4gPiAr ew0KPiA+ICsgIGZvciAoQ3B1Kys7ICEoKDEgPDwgQ3B1KSAmIE1hc2spOyBDcHUrKykNCj4gPiAr ICAgIDsNCj4gPiArDQo+ID4gKyAgcmV0dXJuIENwdTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArI2Rl ZmluZSBGb3JFYWNoQ3B1KEl0ZXIsIENwdSwgTnVtQ3B1cywgTWFzaykgXA0KPiA+ICsgIGZvciAo SXRlciA9IDAsIENwdSA9IENwdU1hc2tOZXh0KC0xLCBNYXNrKTsgXA0KPiA+ICsgICAgSXRlciA8 IE51bUNwdXM7IFwNCj4gPiArICAgIEl0ZXIrKywgQ3B1ID0gQ3B1TWFza05leHQoQ3B1LCBNYXNr KSkgXA0KPiA+ICsNCj4gDQo+IFNhbWUgaGVyZQ0KPiANCj4gPiArLyoqDQo+ID4gKyAgRmluZCBs YXN0IChtb3N0LXNpZ25pZmljYW50KSBiaXQgc2V0DQo+ID4gKw0KPiA+ICsgIEBwYXJhbSAgIFgg OiAgICAgICAgdGhlIHdvcmQgdG8gc2VhcmNoDQo+ID4gKw0KPiA+ICsgIE5vdGUgRmxzKDApID0g MCwgRmxzKDEpID0gMSwgRmxzKDB4ODAwMDAwMDApID0gMzIuDQo+ID4gKw0KPiA+ICsqKi8NCj4g PiArU1RBVElDDQo+ID4gK2lubGluZQ0KPiA+ICtJTlQzMg0KPiA+ICtHZW5lcmljRmxzICgNCj4g PiArICBJTiAgSU5UMzIgIFgNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBJTlQzMiBSID0gMzI7 DQo+ID4gKw0KPiA+ICsgIGlmICghWCkNCj4gPiArICAgIHJldHVybiAwOw0KPiA+ICsNCj4gPiAr ICBpZiAoIShYICYgMHhmZmZmMDAwMHUpKSB7DQo+ID4gKyAgICBYIDw8PSAxNjsNCj4gPiArICAg IFIgLT0gMTY7DQo+ID4gKyAgfQ0KPiA+ICsgIGlmICghKFggJiAweGZmMDAwMDAwdSkpIHsNCj4g PiArICAgIFggPDw9IDg7DQo+ID4gKyAgICBSIC09IDg7DQo+ID4gKyAgfQ0KPiA+ICsgIGlmICgh KFggJiAweGYwMDAwMDAwdSkpIHsNCj4gPiArICAgIFggPDw9IDQ7DQo+ID4gKyAgICBSIC09IDQ7 DQo+ID4gKyAgfQ0KPiA+ICsgIGlmICghKFggJiAweGMwMDAwMDAwdSkpIHsNCj4gPiArICAgIFgg PDw9IDI7DQo+ID4gKyAgICBSIC09IDI7DQo+ID4gKyAgfQ0KPiA+ICsgIGlmICghKFggJiAweDgw MDAwMDAwdSkpIHsNCj4gPiArICAgIFggPDw9IDE7DQo+ID4gKyAgICBSIC09IDE7DQo+ID4gKyAg fQ0KPiA+ICsNCj4gPiArICByZXR1cm4gUjsNCj4gPiArfQ0KPiA+ICsNCj4gDQo+IFdoaWNoIHBh dGNoIHVzZXMgdGhpcyBmdW5jdGlvbj8NCj4NClRoaXMgZnVuY3Rpb24gd2lsbCBiZSB1c2VkIGJ5 IG91ciBuZXh0IHNldCBvZiBwYXRjaGVzLg0KSSB3aWxsIGFkZCB0aGlzIGluIHRoZSBuZXh0IHNl dCBvZiBwYXRjaCB3aGljaCBhcmUgdXNpbmcgdGhpcyBmdW5jdGlvbiBhbmQgcmVtb3ZlIGZyb20g aGVyZS4NCiANCj4gPiArLyoNCj4gPiArICogUHJJTlQzMiBTaXplcyBBcyAiWHh4IEtpQiIsICJY eHguWSBLaUIiLCAiWHh4IE1pQiIsICJYeHguWSBNaUIiLA0KPiANCj4gU2VhcmNoL3JlcGxhY2Ug ZXJyb3IuDQo+IA0KPiA+ICsgKiBYeHggR2lCLCBYeHguWSBHaUIsIEV0YyBBcyBOZWVkZWQ7IEFs bG93IGZvciBPcHRpb25hbCBUcmFpbGluZw0KPiA+ICtTdHJpbmcNCj4gPiArICogKExpa2UgIlxu IikNCj4gPiArICovDQo+ID4gK1ZPSUQNCj4gPiArUHJpbnRTaXplICgNCj4gPiArICBJTiAgVUlO VDY0IFNpemUsDQo+ID4gKyAgSU4gIENPTlNUIElOVDggKlMNCj4gPiArICApOw0KPiA+ICsNCj4g PiArLyogRnVuY3Rpb24gdG8gY29udmVydCBhIGZyZXF1ZW5jeSB0byBNSHogKi8NCj4gPiArQ0hB UjggKlN0cmluZ1RvTUh6ICgNCj4gPiArICBDSEFSOCAgICpCdWYsDQo+ID4gKyAgVUlOVDMyICBT aXplLA0KPiA+ICsgIFVJTlQ2NCAgSHoNCj4gPiArICApOw0KPiA+ICsNCj4gDQo+IFBsZWFzZSBt b3ZlIHRoZXNlIGludG8gdGhlIHBhdGNoIHRoYXQgdXNlcyB0aGVtLg0KPiANCk9LDQoNCj4gPiAr I2VuZGlmDQo+ID4gZGlmZiAtLWdpdCBhL1BsYXRmb3JtL05YUC9MaWJyYXJ5L1V0aWxzTGliL1V0 aWxzLmMNCj4gPiBiL1BsYXRmb3JtL05YUC9MaWJyYXJ5L1V0aWxzTGliL1V0aWxzLmMNCj4gPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAuLjRmNWExNWMNCj4gPiAtLS0g L2Rldi9udWxsDQo+ID4gKysrIGIvUGxhdGZvcm0vTlhQL0xpYnJhcnkvVXRpbHNMaWIvVXRpbHMu Yw0KPiA+IEBAIC0wLDAgKzEsOTcgQEANCj4gPiArLyoqIFV0aWxzLmMNCj4gPiArDQo+ID4gKyAg Q29weXJpZ2h0IDIwMTcgTlhQDQo+ID4gKw0KPiA+ICsgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFj Y29tcGFueWluZyBtYXRlcmlhbHMgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZQ0KPiA+ICsgYXZhaWxh YmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2UgIHdo aWNoDQo+ID4gKyBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQg b2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+ID4gKyBmb3VuZCBhdA0KPiA+ICsNCj4gPiArDQo+IGh0 dHBzOi8vZW1lYTAxLnNhZmVsaW5rcy5wcm90ZWN0aW9uLm91dGxvb2suY29tLz91cmw9aHR0cCUz QSUyRiUyRm9wDQo+ID4gKyBlbnNvdXJjZS5vcmclMkZsaWNlbnNlcyUyRmJzZC0NCj4gbGljZW5z ZS5waHAmZGF0YT0wMiU3QzAxJTdDbWVlbmFrc2hpLmENCj4gPiArDQo+IGdnYXJ3YWwlNDBueHAu Y29tJTdDMTU0NWMyOWQ1OWFkNDY0NGMzOGIwOGQ1MmE4ZWVlMTAlN0M2ODZlYTFkMw0KPiBiYzJi NA0KPiA+ICsNCj4gYzZmYTkyY2Q5OWM1YzMwMTYzNSU3QzAlN0MwJTdDNjM2NDYxNzE1NzM3ODY5 ODkxJnNkYXRhPWJwYmlwTkkzeiUNCj4gMkZtDQo+ID4gKyB0RjJOVG4lMkJMRUxZQmZ2MUMzOEZQ Zk0xNGFwaDIlMkJSS0ElM0QmcmVzZXJ2ZWQ9MA0KPiA+ICsNCj4gPiArICBUSEUgUFJPR1JBTSBJ UyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIg0KPiA+ICsg QkFTSVMsICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5E LA0KPiBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KPiA+ICsNCj4gPiArKiovDQo+ID4gKw0K PiA+ICsjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPiA+ICsjaW5jbHVkZSA8TGlicmFy eS9QcmludExpYi5oPg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9VdGlscy5oPg0KPiA+ICsNCj4g PiArLyogRnVuY3Rpb24gdG8gY29udmVydCBhIGZyZXF1ZW5jeSB0byBNSHogKi8NCj4gPiArQ0hB UjggKg0KPiA+ICtTdHJpbmdUb01IeiAoDQo+ID4gKyAgSU4gIENIQVI4ICAgKkJ1ZiwNCj4gPiAr ICBJTiAgVUlOVDMyICBTaXplLA0KPiA+ICsgIElOICBVSU5UNjQgIEh6DQo+ID4gKyAgKQ0KPiA+ ICt7DQo+ID4gKyAgVUlOVDY0IEw7DQo+ID4gKyAgVUlOVDY0IE07DQo+ID4gKyAgVUlOVDY0IE47 DQo+ID4gKw0KPiA+ICsgIE4gPSBESVZfUk9VTkRfQ0xPU0VTVChIeiwgMTAwMCkgLyAxMDAwTDsg IEwgPSBBc2NpaVNQcmludCAoQnVmLA0KPiA+ICsgU2l6ZSwgIiVsZCIsIE4pOw0KPiA+ICsNCj4g PiArICBIeiAtPSBOICogMTAwMDAwMEw7DQo+ID4gKyAgTSA9IERJVl9ST1VORF9DTE9TRVNUKEh6 LCAxMDAwTCk7DQo+ID4gKw0KPiA+ICsgIGlmIChNICE9IDApIHsNCj4gPiArICAgIEFzY2lpU1By aW50IChCdWYgKyBMLCBTaXplLCAiLiUwM2xkIiwgTSk7ICB9DQo+ID4gKw0KPiA+ICsgIHJldHVy biAoQnVmKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogUHJJTlQzMiBTaXplcyBB cyAiWHh4IEtpQiIsICJYeHguWSBLaUIiLCAiWHh4IE1pQiIsICJYeHguWSBNaUIiLA0KPiA+ICsg KiBYeHggR2lCLCBYeHguWSBHaUIsIEV0YyBBcyBOZWVkZWQ7IEFsbG93IGZvciBPcHRpb25hbCBU cmFpbGluZw0KPiA+ICtTdHJpbmcNCj4gPiArICogKExpa2UgIlxuIikNCj4gPiArICovDQo+ID4g K1ZPSUQNCj4gPiArUHJpbnRTaXplICgNCj4gPiArICBJTiAgVUlOVDY0IFNpemUsDQo+ID4gKyAg SU4gIENPTlNUICBJTlQ4ICpTDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgVUlOVDY0IE07DQo+ ID4gKyAgVUlOVDY0IE47DQo+ID4gKyAgVUlOVDY0IEY7DQo+ID4gKyAgVUlOVDY0IEQ7DQo+ID4g KyAgQ0hBUjggQzsNCj4gPiArICBVSU5UMzIgSTsNCj4gPiArICBJTlQ4IE5hbWVzWzZdID0geydF JywgJ1AnLCAnVCcsICdHJywgJ00nLCAnSyd9Ow0KPiA+ICsNCj4gPiArICBNID0gMDsNCj4gPiAr ICBEID0gMTAgKiBBUlJBWV9TSVpFKE5hbWVzKTsNCj4gPiArICBDID0gMDsNCj4gPiArDQo+ID4g KyAgZm9yIChJID0gMDsgSSA8IEFSUkFZX1NJWkUoTmFtZXMpOyBJKyssIEQgLT0gMTApIHsNCj4g PiArICAgIGlmIChTaXplID4+IEQpIHsNCj4gPiArICAgICAgQyA9IE5hbWVzW0ldOw0KPiA+ICsg ICAgICBicmVhazsNCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmICghQykg ew0KPiA+ICsgICAgREVCVUcoKERFQlVHX0VSUk9SLCAiJUxkIEJ5dGVzLFxuICVhIiwgU2l6ZSwg UykpOw0KPiA+ICsgICAgcmV0dXJuOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgTiA9IFNpemUg Pj4gRDsNCj4gPiArICBGID0gU2l6ZSAmICgoMVVMTCA8PCBEKSAtIDEpOw0KPiA+ICsNCj4gPiAr ICAvKiBpZiBUaGVyZSdTIEEgUmVtYWluZGVyLCBEZWFsIFdpdGggSXQgKi8gIGlmIChGKSB7DQo+ ID4gKyAgICBNID0gKDEwVUxMICogRiArICgxVUxMIDw8IChEIC0gMSkpKSA+PiBEOw0KPiA+ICsN Cj4gPiArICAgIGlmIChNID49IDEwKSB7DQo+ID4gKyAgICAgICAgICAgTSAtPSAxMDsNCj4gPiAr ICAgICAgICAgICBOICs9IDE7DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBE RUJVRygoREVCVUdfRVJST1IsICIlTGQiLCBOKSk7DQo+ID4gKyAgaWYgKE0pIHsNCj4gPiArICAg IERFQlVHKChERUJVR19FUlJPUiwgIi4lTGQiLCBNKSk7DQo+ID4gKyAgfQ0KPiA+ICsgIERFQlVH KChERUJVR19FUlJPUiwgIiAlY2lCLCAlYSAiLCBDLCBTKSk7IH0NCj4gDQo+IFdoeSBERUJVR19F UlJPUiA/IERvbid0IHVzZSB0aGF0IGZvciBERUJVRyBjb2RlLCBhbmQgaW4gZ2VuZXJhbCwgYWRk aW5nDQo+IERFQlVHICgpIHRvIGEgbGlicmFyeSBzaG91bGQgYmUgZG9uZSB3aXRoIGNhcmUuIChJ dCBtYXkgYnJlYWsNCj4gRFhFX1JVTlRJTUVfRFJJVkVSIG1vZHVsZXMgY2FsbGVkIGJ5IHRoZSBP UykNCj4gDQo+DQpXZSBhcmUgbm90IHVzaW5nIHRoaXMgZnVuY3Rpb24gaW4gRFhFX1JVTlRJTUVf RFJJVkVSLg0KV2UgdXNlZCBERUJVR19FUlJPUiBiZWNhdXNlIHdlIG5lZWQgdGhpcyBpbmZvcm1h dGlvbiBpbiBib3RoIERFQlVHIGFuZCBSRUxFQVNFIGJ1aWxkLg0KUGxlYXNlIHN1Z2dlc3QgYWx0 ZXJuYXRlIHdheSB0byBnZXQgdGhpcyBpbmZvcm1hdGlvbiBpbiBSRUxFQVNFIGJ1aWxkIGFzIHdl bGwNCiANCj4gPiBkaWZmIC0tZ2l0IGEvUGxhdGZvcm0vTlhQL0xpYnJhcnkvVXRpbHNMaWIvVXRp bHMuaW5mDQo+ID4gYi9QbGF0Zm9ybS9OWFAvTGlicmFyeS9VdGlsc0xpYi9VdGlscy5pbmYNCj4g PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAuLjk5MDE0NDUNCj4gPiAt LS0gL2Rldi9udWxsDQo+ID4gKysrIGIvUGxhdGZvcm0vTlhQL0xpYnJhcnkvVXRpbHNMaWIvVXRp bHMuaW5mDQo+ID4gQEAgLTAsMCArMSwzMCBAQA0KPiA+ICsjICBAVXRpbHMuaW5mDQo+ID4gKw0K PiA+ICsjICBDb3B5cmlnaHQgMjAxNyBOWFANCj4gPiArIw0KPiA+ICsjICBUaGlzIHByb2dyYW0g YW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzICMgIGFyZSBsaWNlbnNlZCBhbmQNCj4gPiAr bWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0Qg TGljZW5zZSAjDQo+ID4gK3doaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhl IGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZQ0KPiA+ICttYXkgYmUgZm91bmQgYXQgIw0KPiA+DQo+ ICtodHRwczovL2VtZWEwMS5zYWZlbGlua3MucHJvdGVjdGlvbi5vdXRsb29rLmNvbS8/dXJsPWh0 dHAlM0ElMkYlMkZvcA0KPiBlDQo+ID4gK25zb3VyY2Uub3JnJTJGbGljZW5zZXMlMkZic2QtDQo+ IGxpY2Vuc2UucGhwJmRhdGE9MDIlN0MwMSU3Q21lZW5ha3NoaS5hZ2cNCj4gPg0KPiArYXJ3YWwl NDBueHAuY29tJTdDMTU0NWMyOWQ1OWFkNDY0NGMzOGIwOGQ1MmE4ZWVlMTAlN0M2ODZlYTFkM2IN Cj4gYzJiNGM2Zg0KPiA+DQo+ICthOTJjZDk5YzVjMzAxNjM1JTdDMCU3QzAlN0M2MzY0NjE3MTU3 Mzc4Njk4OTEmc2RhdGE9YnBiaXBOSTN6JTINCj4gRm10RjJODQo+ID4gK1RuJTJCTEVMWUJmdjFD MzhGUGZNMTRhcGgyJTJCUktBJTNEJnJlc2VydmVkPTANCj4gPiArIw0KPiA+ICsjICBUSEUgUFJP R1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIg0K PiA+ICtCQVNJUywgIyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBB TlkgS0lORCwNCj4gRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gPiArIw0KPiA+ICsNCj4g PiArW0RlZmluZXNdDQo+ID4gKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgID0gMHgw MDAxMDAwNQ0KPiANCj4gU2hvdWxkIGJlIDB4MDAwMTAwMUENCk9LDQo+IA0KPiA+ICsgIEJBU0Vf TkFNRSAgICAgICAgICAgICAgICAgICAgICA9IFV0aWxzTGliDQo+ID4gKyAgRklMRV9HVUlEICAg ICAgICAgICAgICAgICAgICAgID0gMDk4NWQ0ZTgtNWE0MS00MGNmLWFkMTItMmFkNWQzNWU4MTdm DQo+ID4gKyAgTU9EVUxFX1RZUEUgICAgICAgICAgICAgICAgICAgID0gQkFTRQ0KPiA+ICsgIFZF UlNJT05fU1RSSU5HICAgICAgICAgICAgICAgICA9IDEuMA0KPiA+ICsgIExJQlJBUllfQ0xBU1Mg ICAgICAgICAgICAgICAgICA9IFV0aWxzTGliDQo+ID4gKw0KPiA+ICtbUGFja2FnZXNdDQo+ID4g KyAgTWRlUGtnL01kZVBrZy5kZWMNCj4gPiArICBlZGsyLXBsYXRmb3Jtcy9QbGF0Zm9ybS9OWFAv TnhwUW9yaXFMcy5kZWMNCj4gDQo+IFBsZWFzZSBkcm9wIHRoZSBlZGsyLXBsYXRmb3JtcyBwcmVm aXgsIGFuZCBhZGQgaXQgdG8geW91ciBQQUNLQUdFU19QQVRIDQo+IA0KT0ssIHdlIHdpbGwgbG9v ayBpbnRvIHRoaXMuDQo+ID4gKw0KPiA+ICtbTGlicmFyeUNsYXNzZXNdDQo+ID4gKyAgUHJpbnRM aWINCj4gPiArDQo+ID4gK1tTb3VyY2VzLmNvbW1vbl0NCj4gPiArICBVdGlscy5jDQo+ID4gLS0N Cj4gPiAxLjkuMQ0KPiA+DQo=