From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.100; helo=mga07.intel.com; envelope-from=eric.dong@intel.com; receiver=edk2-devel@lists.01.org Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) (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 F3B3B210C2D6F for ; Tue, 7 Aug 2018 18:04:39 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 07 Aug 2018 18:04:39 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,456,1526367600"; d="scan'208";a="73599359" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by orsmga003.jf.intel.com with ESMTP; 07 Aug 2018 18:04:30 -0700 Received: from fmsmsx101.amr.corp.intel.com (10.18.124.199) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 7 Aug 2018 18:04:30 -0700 Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by fmsmsx101.amr.corp.intel.com (10.18.124.199) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 7 Aug 2018 18:04:30 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.226]) by SHSMSX152.ccr.corp.intel.com ([169.254.6.150]) with mapi id 14.03.0319.002; Wed, 8 Aug 2018 09:04:26 +0800 From: "Dong, Eric" To: Laszlo Ersek CC: "edk2-devel@lists.01.org" , "Ni, Ruiyu" , =?utf-8?B?TWFydmluIEjDpHVzZXI=?= , Jeff Fan , "Ard Biesheuvel" Thread-Topic: [Patch] UefiCpuPkg/RegisterCpuFeaturesLib: Implement AllocateAcpiCpuData function. Thread-Index: AQHUK0l8AsqapacNWUi9Cwa4kdCkN6SzjuaA Date: Wed, 8 Aug 2018 01:04:25 +0000 Message-ID: References: <20180803021031.18244-1-eric.dong@intel.com> <8cf4b763-52c3-9d91-56e9-53e38bd71f12@redhat.com> In-Reply-To: <8cf4b763-52c3-9d91-56e9-53e38bd71f12@redhat.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [Patch] UefiCpuPkg/RegisterCpuFeaturesLib: Implement AllocateAcpiCpuData function. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.27 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Aug 2018 01:04:40 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgTGFzemxvLA0KDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTGFz emxvIEVyc2VrIFttYWlsdG86bGVyc2VrQHJlZGhhdC5jb21dDQo+IFNlbnQ6IFNhdHVyZGF5LCBB dWd1c3QgNCwgMjAxOCAxMjo0NiBBTQ0KPiBUbzogRG9uZywgRXJpYyA8ZXJpYy5kb25nQGludGVs LmNvbT4NCj4gQ2M6IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnOyBOaSwgUnVpeXUgPHJ1aXl1Lm5p QGludGVsLmNvbT47IE1hcnZpbiBIw6R1c2VyDQo+IDxNYXJ2aW4uSGFldXNlckBvdXRsb29rLmNv bT47IEplZmYgRmFuIDx2YW5qZWZmXzkxOUBob3RtYWlsLmNvbT47IEFyZA0KPiBCaWVzaGV1dmVs IDxhcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnPg0KPiBTdWJqZWN0OiBSZTogW1BhdGNoXSBVZWZp Q3B1UGtnL1JlZ2lzdGVyQ3B1RmVhdHVyZXNMaWI6IEltcGxlbWVudA0KPiBBbGxvY2F0ZUFjcGlD cHVEYXRhIGZ1bmN0aW9uLg0KPiANCj4gSGVsbG8gRXJpYywNCj4gDQo+IE9WTUYgZG9lcyBub3Qg aW5jbHVkZSBDcHVGZWF0dXJlc1BlaSAvIENwdUZlYXR1cmVzRHhlLCBhbmQgc28gaXQgZG9lc24n dA0KPiBjb25zdW1lIHRoaXMgbGlicmFyeS4gSSBjYW4ndCBwcm92aWRlIHRlc3QgcmVzdWx0cywg YnV0IEkgaGF2ZSBzb21lIHN1cGVyZmljaWFsDQo+IGNvbW1lbnRzLg0KPiANCj4gRmlyc3QsIEkn bSBhZGRpbmcgTWFydmluIGFuZCBKZWZmIC0tIEkgKnZhZ3VlbHkqIHJlY2FsbCB0aGF0IHRoaXMg aXNzdWUgbWF5IGhhdmUNCj4gYmVlbiByYWlzZWQgYnkgTWFydmluLiBIbS4uLiB5ZXMsIGl0IHNl ZW1zIHNvOg0KPiANCj4gICBbZWRrMl0gQ3B1UzNEYXRhRHhlIC8gRHhlUmVnaXN0ZXJDcHVGZWF0 dXJlc0xpYiBkZXBlbmRlbmN5Lg0KPiANCj4gICBodHRwOi8vbWlkLm1haWwtDQo+IGFyY2hpdmUu Y29tL1ZJMVBSMDgwMU1CMTc5MDhEQjFGMDNBM0M1Rjg0NTQ1RTEwODA2OTBAVkkxUFIwODAxDQo+ IE1CMTc5MC5ldXJwcmQwOC5wcm9kLm91dGxvb2suY29tDQo+ICAgaHR0cHM6Ly9saXN0cy4wMS5v cmcvcGlwZXJtYWlsL2VkazItZGV2ZWwvMjAxOC1NYXkvMDI1MTYzLmh0bWwNCj4gDQo+IEkgaGF2 ZSB0aHJlZSBxdWVzdGlvbnMgaGVyZToNCj4gDQo+ICgxKSBEbyB3ZSBoYXZlIGEgVGlhbm9Db3Jl IEJaIGFib3V0IHRoaXM/DQo+IA0KPiAoMikgSWYgbm90LCBkb2VzIHRoZSBjdXJyZW50bHkgcHJv cG9zZWQgY29tbWl0IG1lc3NhZ2UgY2FwdHVyZSB0aGUgaXNzdWUgaW4NCj4gZW5vdWdoIGRldGFp bD8gU2hvdWxkIHdlIHJlZmVyZW5jZSBNYXJ2aW4ncyBpbml0aWFsIHJlcG9ydCBhbmQvb3IgYQ0K PiBUaWFub0NvcmUgQlogKGlmIHdlIGhhdmUgb25lKT8NCj4gDQoNClllcywgaXQgaGFzIGFuIEJa OiBodHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTk1OQ0KSSB3 aWxsIGluY2x1ZGUgdGhpcyBpbmZvIGluIG15IG5leHQgdmVyc2lvbiBwYXRjaC4NCg0KPiAoMykg VGhlIGltcGxlbWVudGF0aW9uIHNlZW1zIHRvIGZvbGxvdyBKZWZmJ3MgaWRlYS4gTWFydmluIGFu ZCBKZWZmLCBjYW4geW91DQo+IHBsZWFzZSBoZWxwIHdpdGggdGhlIHJldmlldz8NCj4gDQo+IEVp dGhlciB3YXksIEkgcHJvcG9zZSB0aGUgZm9sbG93aW5nIHR3byB0YWdzIHRvIGJlIGFwcGVuZGVk Og0KPiANCj4gUmVwb3J0ZWQtYnk6IE1hcnZpbiBIw6R1c2VyIDxNYXJ2aW4uSGFldXNlckBvdXRs b29rLmNvbT4NCj4gU3VnZ2VzdGVkLWJ5OiBGYW4gSmVmZiA8dmFuamVmZl85MTlAaG90bWFpbC5j b20+DQo+IA0KDQpTdXJlLCB3aWxsIGluY2x1ZGUgdGhlbSBpbiBteSBuZXh0IHZlcnNpb24gcGF0 Y2guDQoNCj4gDQo+IEFuZCBvbmUgdGVjaG5pY2FsIHF1ZXN0aW9uIGZvbGxvd3MgYmVsb3c6DQo+ IA0KPiBPbiAwOC8wMy8xOCAwNDoxMCwgRXJpYyBEb25nIHdyb3RlOg0KPiA+IEN1cnJlbnQgY29k ZSBsb2dpYyBjYW4ndCBjb25maXJtIENwdVMzRGF0YUR4ZSBkcml2ZXIgc3RhcnQgYmVmb3JlDQo+ ID4gQ3B1RmVhdHVyZXNEeGUgZHJpdmVyLiBTbyB0aGUgYXNzdW1wdGlvbiBpbiBDcHVGZWF0dXJl c0R4ZSBub3QgdmFsaWQuDQo+ID4gQWRkIGltcGxlbWVudGF0aW9uIGZvciBBbGxvY2F0ZUFjcGlD cHVEYXRhIGZ1bmN0aW9uIHRvIHJlbW92ZSB0aGlzDQo+ID4gYXNzdW1wdGlvbi4NCj4gPg0KPiA+ IFBhc3MgT1MgYm9vdCBhbmQgcmVzdW1lIGZyb20gUzMgdGVzdC4NCj4gPg0KPiA+IENjOiBMYXN6 bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPg0KPiA+IENjOiBSdWl5dSBOaSA8cnVpeXUubmlA aW50ZWwuY29tPg0KPiA+IENvbnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9u IEFncmVlbWVudCAxLjENCj4gPiBTaWduZWQtb2ZmLWJ5OiBFcmljIERvbmcgPGVyaWMuZG9uZ0Bp bnRlbC5jb20+DQo+ID4gLS0tDQo+ID4gIC4uLi9EeGVSZWdpc3RlckNwdUZlYXR1cmVzTGliLmMg ICAgICAgICAgICAgICAgICAgIHwgNTcgKysrKysrKysrKysrKysrKysrKystLQ0KPiA+ICAxIGZp bGUgY2hhbmdlZCwgNTQgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkNCj4gPg0KPiA+IGRp ZmYgLS1naXQNCj4gPiBhL1VlZmlDcHVQa2cvTGlicmFyeS9SZWdpc3RlckNwdUZlYXR1cmVzTGli L0R4ZVJlZ2lzdGVyQ3B1RmVhdHVyZXNMaWIuDQo+ID4gYw0KPiA+IGIvVWVmaUNwdVBrZy9MaWJy YXJ5L1JlZ2lzdGVyQ3B1RmVhdHVyZXNMaWIvRHhlUmVnaXN0ZXJDcHVGZWF0dXJlc0xpYi4NCj4g PiBjDQo+ID4gaW5kZXggOTAyYTMzOTUyOS4uMDcyMmRiNmM2NCAxMDA2NDQNCj4gPiAtLS0NCj4g PiBhL1VlZmlDcHVQa2cvTGlicmFyeS9SZWdpc3RlckNwdUZlYXR1cmVzTGliL0R4ZVJlZ2lzdGVy Q3B1RmVhdHVyZXNMaWIuDQo+ID4gYw0KPiA+ICsrKyBiL1VlZmlDcHVQa2cvTGlicmFyeS9SZWdp c3RlckNwdUZlYXR1cmVzTGliL0R4ZVJlZ2lzdGVyQ3B1RmVhdHVyZXMNCj4gPiArKysgTGliLmMN Cj4gPiBAQCAtMjA3LDExICsyMDcsNjIgQEAgQWxsb2NhdGVBY3BpQ3B1RGF0YSAoDQo+ID4gICAg Vk9JRA0KPiA+ICAgICkNCj4gPiAgew0KPiA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAg ICAgICAgICAgICBTdGF0dXM7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE51bWJlck9mQ3B1czsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTnVtYmVyT2ZFbmFibGVkUHJvY2Vzc29yczsNCj4gPiArICBBQ1BJX0NQVV9EQVRB ICAgICAgICAgICAgICAgICAgICAgICAgKkFjcGlDcHVEYXRhOw0KPiA+ICsgIEVGSV9QSFlTSUNB TF9BRERSRVNTICAgICAgICAgICAgICAgICBBZGRyZXNzOw0KPiA+ICsgIFVJTlROICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBUYWJsZVNpemU7DQo+ID4gKyAgQ1BVX1JFR0lTVEVSX1RB QkxFICAgICAgICAgICAgICAgICAgICpSZWdpc3RlclRhYmxlOw0KPiA+ICsgIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gPiArICBFRklfUFJPQ0VTU09SX0lO Rk9STUFUSU9OICAgICAgICAgICAgUHJvY2Vzc29ySW5mb0J1ZmZlcjsNCj4gPiArDQo+ID4gKyAg QWRkcmVzcyA9IEJBU0VfNEdCIC0gMTsNCj4gPiArICBTdGF0dXMgID0gZ0JTLT5BbGxvY2F0ZVBh Z2VzICgNCj4gPiArICAgICAgICAgICAgICAgICAgIEFsbG9jYXRlTWF4QWRkcmVzcywNCj4gPiAr ICAgICAgICAgICAgICAgICAgIEVmaUFDUElNZW1vcnlOVlMsDQo+ID4gKyAgICAgICAgICAgICAg ICAgICBFRklfU0laRV9UT19QQUdFUyAoc2l6ZW9mIChBQ1BJX0NQVV9EQVRBKSksDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAmQWRkcmVzcw0KPiA+ICsgICAgICAgICAgICAgICAgICAgKTsNCj4g PiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiANCj4gSSB1bmRlcnN0YW5kIHRoYXQg dGhpcyBjb2RlIGlzIGZvciBJQTMyIGFuZCBYNjQgb25seSwgYnV0IHN0aWxsLCBBcmQgaGFzIHJl Y2VudGx5DQo+IGludHJvZHVjZWQgYSBEeGVTZXJ2aWNlc0xpYiBBUEkgZm9yIHRoaXMga2luZCBv ZiBhbGxvY2F0aW9uOg0KPiBpdCdzIGNhbGxlZCBBbGxvY2F0ZVBlaUFjY2Vzc2libGVQYWdlcygp LiBTZWUgY29tbWl0IGE0MGUwYjdhYTkxOC4NCj4gDQo+ICg0KSBJcyBpdCBmZWFzaWJsZSB0byB1 c2UgdGhhdCBmdW5jdGlvbiBoZXJlIChhbmQgaW4gdGhlIHNlY29uZCBpbnN0YW5jZSBiZWxvdyk/ DQo+IA0KDQpBZnRlciBjaGVjayB0aGUgY29kZSwgSSBmb3VuZCBjdXJyZW50IHVzYWdlIG1vZGFs IG5vdCByZXF1aXJlZCBpdCBiZWxvdyA0RywgYWxzbyBpdCBkb2Vzbid0IG5lZWQgQUNQSSBOVlMg dHlwZSBtZW1vcnkuDQpJIHdpbGwgdXBkYXRlIGl0IGluIG15IG5leHQgdmVyc2lvbiBjaGFuZ2Uu DQoNCj4gRnJvbSBhIGxpYnJhcnkgZGVwZW5kZW5jeSBzdGFuZHBvaW50LCBJIHRoaW5rIGl0IHNo b3VsZCBiZSBmaW5lOiB3ZSBhcmUNCj4gbW9kaWZ5aW5nIHRoZSBEWEUgaW5zdGFuY2Ugb2YgdGhl IFJlZ2lzdGVyQ3B1RmVhdHVyZXNMaWIgY2xhc3MsIHNvIGENCj4gZGVwZW5kZW5jeSBvbiBEeGVT ZXJ2aWNlc0xpYiBzaG91bGQgYmUgaW4gb3JkZXIuDQo+IA0KPiBOb3csIGlmIHRoaXMgYWxsb2Nh dGlvbiAqbXVzdCogYmUgc2F0aXNmaWVkIGZyb20gYmVsb3cgNEdCLCBldmVuIGlmIHRoZSBQRUkN Cj4gcGhhc2UgaGFzIGFjY2VzcyB0byA+PTRHQiBSQU0gKGFzIGRldGVybWluZWQgYnkNCj4gDQo+ ICAgUGhpdEhvYi0+RWZpRnJlZU1lbW9yeVRvcCA+IE1BWF9VSU5UMzINCj4gDQo+ICksIHRoZW4g bXkgc3VnZ2VzdGlvbiBpcyB3cm9uZyAoYmVjYXVzZSBpbiB0aGF0IGNhc2UsDQo+IEFsbG9jYXRl UGVpQWNjZXNzaWJsZVBhZ2VzKCkgd291bGRuJ3QgcmVzdHJpY3QgdGhlIGFsbG9jYXRpb24gdW5k ZXIgNEdCKS4NCj4gDQo+IENDJ2luZyBBcmQgdG9vLg0KPiANCj4gVGhhbmtzIQ0KPiBMYXN6bG8N Cj4gDQo+ID4gKyAgQWNwaUNwdURhdGEgPSAoQUNQSV9DUFVfREFUQSAqKSAoVUlOVE4pIEFkZHJl c3M7ICBBU1NFUlQNCj4gPiArIChBY3BpQ3B1RGF0YSAhPSBOVUxMKTsNCj4gPiArDQo+ID4gKyAg R2V0TnVtYmVyT2ZQcm9jZXNzb3IgKCZOdW1iZXJPZkNwdXMsDQo+ICZOdW1iZXJPZkVuYWJsZWRQ cm9jZXNzb3JzKTsNCj4gPiArIEFjcGlDcHVEYXRhLT5OdW1iZXJPZkNwdXMgPSAoVUlOVDMyKSBO dW1iZXJPZkNwdXM7DQo+ID4gKw0KPiA+ICAgIC8vDQo+ID4gLSAgLy8gQ3B1UzNEYXRhRHhlIHdp bGwgZG8gaXQuDQo+ID4gKyAgLy8gQWxsb2NhdGUgYnVmZmVyIGZvciBlbXB0eSBSZWdpc3RlclRh YmxlIGFuZA0KPiA+ICsgUHJlU21tSW5pdFJlZ2lzdGVyVGFibGUgZm9yIGFsbCBDUFVzDQo+ID4g ICAgLy8NCj4gPiAtICBBU1NFUlQgKEZBTFNFKTsNCj4gPiAtICByZXR1cm4gTlVMTDsNCj4gPiAr ICBUYWJsZVNpemUgPSAyICogTnVtYmVyT2ZDcHVzICogc2l6ZW9mIChDUFVfUkVHSVNURVJfVEFC TEUpOw0KPiA+ICsgQWRkcmVzcyA9IEJBU0VfNEdCIC0gMTsgIFN0YXR1cyAgPSBnQlMtPkFsbG9j YXRlUGFnZXMgKA0KPiA+ICsgICAgICAgICAgICAgICAgICAgQWxsb2NhdGVNYXhBZGRyZXNzLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgRWZpQUNQSU1lbW9yeU5WUywNCj4gPiArICAgICAgICAg ICAgICAgICAgIEVGSV9TSVpFX1RPX1BBR0VTIChUYWJsZVNpemUpLA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgJkFkZHJlc3MNCj4gPiArICAgICAgICAgICAgICAgICAgICk7DQo+ID4gKyAgQVNT RVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPiArICBSZWdpc3RlclRhYmxlID0gKENQVV9SRUdJ U1RFUl9UQUJMRSAqKSAoVUlOVE4pIEFkZHJlc3M7DQo+ID4gKw0KPiA+ICsgIGZvciAoSW5kZXgg PSAwOyBJbmRleCA8IE51bWJlck9mQ3B1czsgSW5kZXgrKykgew0KPiA+ICsgICAgU3RhdHVzID0g R2V0UHJvY2Vzc29ySW5mb3JtYXRpb24gKEluZGV4LCAmUHJvY2Vzc29ySW5mb0J1ZmZlcik7DQo+ ID4gKyAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ICsNCj4gPiArICAgIFJlZ2lz dGVyVGFibGVbSW5kZXhdLkluaXRpYWxBcGljSWQgICAgICA9DQo+IChVSU5UMzIpUHJvY2Vzc29y SW5mb0J1ZmZlci5Qcm9jZXNzb3JJZDsNCj4gPiArICAgIFJlZ2lzdGVyVGFibGVbSW5kZXhdLlRh YmxlTGVuZ3RoICAgICAgICA9IDA7DQo+ID4gKyAgICBSZWdpc3RlclRhYmxlW0luZGV4XS5BbGxv Y2F0ZWRTaXplICAgICAgPSAwOw0KPiA+ICsgICAgUmVnaXN0ZXJUYWJsZVtJbmRleF0uUmVnaXN0 ZXJUYWJsZUVudHJ5ID0gMDsNCj4gPiArDQo+ID4gKyAgICBSZWdpc3RlclRhYmxlW051bWJlck9m Q3B1cyArIEluZGV4XS5Jbml0aWFsQXBpY0lkICAgICAgPQ0KPiAoVUlOVDMyKVByb2Nlc3Nvcklu Zm9CdWZmZXIuUHJvY2Vzc29ySWQ7DQo+ID4gKyAgICBSZWdpc3RlclRhYmxlW051bWJlck9mQ3B1 cyArIEluZGV4XS5UYWJsZUxlbmd0aCAgICAgICAgPSAwOw0KPiA+ICsgICAgUmVnaXN0ZXJUYWJs ZVtOdW1iZXJPZkNwdXMgKyBJbmRleF0uQWxsb2NhdGVkU2l6ZSAgICAgID0gMDsNCj4gPiArICAg IFJlZ2lzdGVyVGFibGVbTnVtYmVyT2ZDcHVzICsgSW5kZXhdLlJlZ2lzdGVyVGFibGVFbnRyeSA9 IDA7ICB9DQo+ID4gKyAgQWNwaUNwdURhdGEtPlJlZ2lzdGVyVGFibGUgICAgICAgICAgID0NCj4g KEVGSV9QSFlTSUNBTF9BRERSRVNTKShVSU5UTilSZWdpc3RlclRhYmxlOw0KPiA+ICsgIEFjcGlD cHVEYXRhLT5QcmVTbW1Jbml0UmVnaXN0ZXJUYWJsZSA9DQo+ID4gKyAoRUZJX1BIWVNJQ0FMX0FE RFJFU1MpKFVJTlROKShSZWdpc3RlclRhYmxlICsgTnVtYmVyT2ZDcHVzKTsNCj4gPiArDQo+ID4g KyAgcmV0dXJuIEFjcGlDcHVEYXRhOw0KPiA+ICB9DQo+ID4NCj4gPiAgLyoqDQo+ID4NCg0K