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.65; helo=mga03.intel.com; envelope-from=eric.dong@intel.com; receiver=edk2-devel@lists.01.org Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) (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 0B736209605AC for ; Wed, 11 Jul 2018 04:31:54 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Jul 2018 04:31:53 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,338,1526367600"; d="scan'208";a="244804518" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by fmsmga006.fm.intel.com with ESMTP; 11 Jul 2018 04:31:53 -0700 Received: from fmsmsx125.amr.corp.intel.com (10.18.125.40) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 11 Jul 2018 04:31:52 -0700 Received: from shsmsx102.ccr.corp.intel.com (10.239.4.154) by FMSMSX125.amr.corp.intel.com (10.18.125.40) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 11 Jul 2018 04:31:52 -0700 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.57]) by shsmsx102.ccr.corp.intel.com ([169.254.2.124]) with mapi id 14.03.0319.002; Wed, 11 Jul 2018 19:31:50 +0800 From: "Dong, Eric" To: "Yao, Jiewen" , Laszlo Ersek , Fan Jeff , "edk2-devel@lists.01.org" CC: "Ni, Ruiyu" Thread-Topic: =?utf-8?B?W2VkazJdIOetlOWkjTogW1BhdGNoXSBVZWZpQ3B1UGtnL01wSW5pdExpYjog?= =?utf-8?Q?Optimize_get_processor_number_performance.?= Thread-Index: AQHUE3rmDFOShawv6UKSeDwsvBHbsKSAFEKAgAYl3lCAADZdYIACuKAAgADEssA= Date: Wed, 11 Jul 2018 11:31:50 +0000 Message-ID: References: <20180704083736.9272-1-eric.dong@intel.com> <58bddde7-da02-1a73-f738-70c58c10b60a@redhat.com> <74D8A39837DF1E4DA445A8C0B3885C503AC9B858@shsmsx102.ccr.corp.intel.com> In-Reply-To: <74D8A39837DF1E4DA445A8C0B3885C503AC9B858@shsmsx102.ccr.corp.intel.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: =?UTF-8?B?UmU6IOetlOWkjTogW1BhdGNoXSBVZWZpQ3B1UGtnL01wSW5pdExpYjogT3B0aW1pemUgZ2V0IHByb2Nlc3NvciBudW1iZXIgcGVyZm9ybWFuY2Uu?= 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, 11 Jul 2018 11:31:55 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgSmlld2VuLA0KDQpJIGNoZWNrZWQgdGhlIGNvZGUsIGZvdW5kIGluIHRoZSBBUCBmdW5jdGlv biAoQXBXYWtldXBGdW5jdGlvbiksIGl0IHVwZGF0ZWQgdGhlIEdEVCB2YWx1ZSB3aXRoIHRoZSBz YXZlZCBHRFQgdmFsdWUgZnJvbSBCU1AuIFNvIEkgdGhpbmsgd2UgY2FuJ3QgdXNlIEdEVCBpbiB0 aGlzIGNhc2UuIFJpZ2h0Pw0KDQogICAgICAvLw0KICAgICAgLy8gU3luYyBCU1AncyBDb250cm9s IHJlZ2lzdGVycyB0byBBUHMNCiAgICAgIC8vDQogICAgICBSZXN0b3JlVm9sYXRpbGVSZWdpc3Rl cnMgKCZDcHVNcERhdGEtPkNwdURhdGFbMF0uVm9sYXRpbGVSZWdpc3RlcnMsIEZBTFNFKTsNCg0K VGhhbmtzLA0KRXJpYw0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFlh bywgSmlld2VuDQo+IFNlbnQ6IFdlZG5lc2RheSwgSnVseSAxMSwgMjAxOCAzOjQ1IFBNDQo+IFRv OiBEb25nLCBFcmljIDxlcmljLmRvbmdAaW50ZWwuY29tPjsgRG9uZywgRXJpYyA8ZXJpYy5kb25n QGludGVsLmNvbT47DQo+IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+OyBGYW4gSmVm ZiA8dmFuamVmZl85MTlAaG90bWFpbC5jb20+Ow0KPiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0K PiBDYzogTmksIFJ1aXl1IDxydWl5dS5uaUBpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJFOiBbZWRr Ml0g562U5aSNOiBbUGF0Y2hdIFVlZmlDcHVQa2cvTXBJbml0TGliOiBPcHRpbWl6ZSBnZXQNCj4g cHJvY2Vzc29yIG51bWJlciBwZXJmb3JtYW5jZS4NCj4gDQo+IEhpDQo+IEkgYmVsaWV2ZSB1c2lu ZyBzdGFjayBwb2ludGVyIGlzIG5vdCBhIHJvYnVzdCB3YXkgaWYgdGhlIHN0YWNrIGd1YXJkIGZl YXR1cmUgaXMNCj4gbm90IGVuYWJsZWQuIFN0YWNrIHBvaW50ZXIgbWF5IG92ZXJmbG93Lg0KPiAN Cj4gQ2FuIHdlIHVzZSBHRFQ/IEVhY2ggQVAgaGFzIGl0cyBvd24gR0RULg0KPiANCj4gVGhhbmsg eW91DQo+IFlhbyBKaWV3ZW4NCj4gDQo+IA0KPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0t DQo+ID4gRnJvbTogZWRrMi1kZXZlbCBbbWFpbHRvOmVkazItZGV2ZWwtYm91bmNlc0BsaXN0cy4w MS5vcmddIE9uIEJlaGFsZiBPZg0KPiA+IERvbmcsIEVyaWMNCj4gPiBTZW50OiBNb25kYXksIEp1 bHkgOSwgMjAxOCAyOjEzIFBNDQo+ID4gVG86IERvbmcsIEVyaWMgPGVyaWMuZG9uZ0BpbnRlbC5j b20+OyBMYXN6bG8gRXJzZWsNCj4gPiA8bGVyc2VrQHJlZGhhdC5jb20+OyBGYW4gSmVmZiA8dmFu amVmZl85MTlAaG90bWFpbC5jb20+Ow0KPiA+IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnDQo+ID4g Q2M6IE5pLCBSdWl5dSA8cnVpeXUubmlAaW50ZWwuY29tPg0KPiA+IFN1YmplY3Q6IFJlOiBbZWRr Ml0g562U5aSNOiBbUGF0Y2hdIFVlZmlDcHVQa2cvTXBJbml0TGliOiBPcHRpbWl6ZSBnZXQNCj4g PiBwcm9jZXNzb3IgbnVtYmVyIHBlcmZvcm1hbmNlLg0KPiA+DQo+ID4gSGkgTGFzemxvLA0KPiA+ DQo+ID4gSSBoYXZlIGNyZWF0ZWQgaHR0cHM6Ly9idWd6aWxsYS50aWFub2NvcmUub3JnL3Nob3df YnVnLmNnaT9pZD0xMDAyIHRvDQo+ID4gcmVxdWVzdCB0byBhZGQgQXNtUmVhZEVzcCgpIC8gQXNt UmVhZFJzcCgpLg0KPiA+DQo+ID4gVGhhbmtzLA0KPiA+IEVyaWMNCj4gPg0KPiA+ID4gLS0tLS1P cmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+IEZyb206IGVkazItZGV2ZWwgW21haWx0bzplZGsy LWRldmVsLWJvdW5jZXNAbGlzdHMuMDEub3JnXSBPbiBCZWhhbGYNCj4gPiA+IE9mIERvbmcsIEVy aWMNCj4gPiA+IFNlbnQ6IE1vbmRheSwgSnVseSA5LCAyMDE4IDExOjA0IEFNDQo+ID4gPiBUbzog TGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT47IEZhbiBKZWZmDQo+ID4gPiA8dmFuamVm Zl85MTlAaG90bWFpbC5jb20+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KPiA+ID4gQ2M6IE5p LCBSdWl5dSA8cnVpeXUubmlAaW50ZWwuY29tPg0KPiA+ID4gU3ViamVjdDogUmU6IFtlZGsyXSDn rZTlpI06IFtQYXRjaF0gVWVmaUNwdVBrZy9NcEluaXRMaWI6IE9wdGltaXplIGdldA0KPiA+ID4g cHJvY2Vzc29yIG51bWJlciBwZXJmb3JtYW5jZS4NCj4gPiA+DQo+ID4gPiBIaSBMYXN6bG8sDQo+ ID4gPg0KPiA+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiBGcm9tOiBM YXN6bG8gRXJzZWsgW21haWx0bzpsZXJzZWtAcmVkaGF0LmNvbV0NCj4gPiA+ID4gU2VudDogVGh1 cnNkYXksIEp1bHkgNSwgMjAxOCA5OjA0IFBNDQo+ID4gPiA+IFRvOiBGYW4gSmVmZiA8dmFuamVm Zl85MTlAaG90bWFpbC5jb20+OyBEb25nLCBFcmljDQo+ID4gPiA+IDxlcmljLmRvbmdAaW50ZWwu Y29tPjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNCj4gPiA+ID4gQ2M6IE5pLCBSdWl5dSA8cnVp eXUubmlAaW50ZWwuY29tPg0KPiA+ID4gPiBTdWJqZWN0OiBSZTogW2VkazJdIOetlOWkjTogW1Bh dGNoXSBVZWZpQ3B1UGtnL01wSW5pdExpYjogT3B0aW1pemUgZ2V0DQo+ID4gPiA+IHByb2Nlc3Nv ciBudW1iZXIgcGVyZm9ybWFuY2UuDQo+ID4gPiA+DQo+ID4gPiA+IEhpIEplZmYsDQo+ID4gPiA+ DQo+ID4gPiA+IE9uIDA3LzA0LzE4IDExOjM5LCBGYW4gSmVmZiB3cm90ZToNCj4gPiA+ID4gPiBF cmljLA0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gQ3VycmVudCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5v dCBjYWxsIEdldEFwaWNpZCgpIG1hbnkgdGltZXMsDQo+ID4gPiA+ID4gUGxlYXNlDQo+ID4gPiA+ IGNvcnJlY3QgeW91IGNvbW1pdCBtZXNzYWdlLiBZb3VyIGZpeCBpcyB0byBpbXByb3ZlIHRoZSBw ZXJmb3JtYW5jZQ0KPiA+ID4gPiBhZ2FpbnN0IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLg0K PiA+ID4gPg0KPiA+ID4gPiBJIHRoaW5rIHRoZSBvcmlnaW5hbCBjb21taXQgbWVzc2FnZSBkb2Vz IG1ha2Ugc2Vuc2UuIFdpdGhvdXQgdGhlDQo+ID4gPiA+IHBhdGNoLA0KPiA+ID4gPiBHZXRQcm9j ZXNzb3JOdW1iZXIoKSBtYXkgY2FsbCBHZXRBcGljSWQoKSB1cCB0bw0KPiA+ID4gPiBUb3RhbFBy b2Nlc3Nvck51bWJlciB0aW1lcy4gV2l0aCB0aGUgcGF0Y2gsIGV2ZW4gaWYgd2Ugc2tpcCB0aGUN Cj4gPiA+ID4gc3RhY2sgcmFuZ2Ugc2VhcmNoLA0KPiA+ID4gPiBHZXRQcm9jZXNzb3JOdW1iZXIo KSB3aWxsIGNhbGwgR2V0QXBpY0lkKCkganVzdCBvbmNlLg0KPiA+ID4gPg0KPiA+ID4gPiBbLi4u XQ0KPiA+ID4gPg0KPiA+ID4gPiBTb21lIG1vcmUgcXVlc3Rpb25zIGJlbG93LCBmb3IgdGhlIHBh dGNoOg0KPiA+ID4gPg0KPiA+ID4gPiA+IOWPkeS7tuS6ujogRXJpYyBEb25nIDxlcmljLmRvbmdA aW50ZWwuY29tPg0KPiA+ID4gPiA+IOWPkemAgeaXtumXtDogV2VkbmVzZGF5LCBKdWx5IDQsIDIw MTggNDozNzozNiBQTQ0KPiA+ID4gPiA+IOaUtuS7tuS6ujogZWRrMi1kZXZlbEBsaXN0cy4wMS5v cmcNCj4gPiA+ID4gPiDmioTpgIE6IFJ1aXl1IE5pOyBKZWZmIEZhbjsgTGFzemxvIEVyc2VrDQo+ ID4gPiA+ID4g5Li76aKYOiBbUGF0Y2hdIFVlZmlDcHVQa2cvTXBJbml0TGliOiBPcHRpbWl6ZSBn ZXQgcHJvY2Vzc29yIG51bWJlcg0KPiA+ID4gPiBwZXJmb3JtYW5jZS4NCj4gPiA+ID4gPg0KPiA+ ID4gPiA+IEN1cnJlbnQgZnVuY3Rpb24gaGFzIGxvdyBwZXJmb3JtYW5jZSBiZWNhdXNlIGl0IGNh bGxzIEdldEFwaWNJZA0KPiA+ID4gPiA+IG1hbnkgdGltZXMuDQo+ID4gPiA+ID4NCj4gPiA+ID4g PiBOZXcgbG9naWMgZmlyc3QgdHJ5IHRvIGJhc2Ugb24gdGhlIHN0YWNrIHJhbmdlIHVzZWQgYnkg QVAgdG8NCj4gPiA+ID4gPiBmaW5kIHRoZSBwcm9jZXNzb3IgbnVtYmVyLiBJZiB0aGlzIHNvbHV0 aW9uIGZhaWxlZCwgdGhlbiBjYWxsDQo+ID4gPiA+ID4gR2V0QXBpY0lkIG9uY2UgYW5kIGJhc2Ug b24gdGhpcyB2YWx1ZSB0byBzZWFyY2ggdGhlIHByb2Nlc3Nvci4NCj4gPiA+ID4gPg0KPiA+ID4g PiA+IENjOiBSdWl5dSBOaSA8cnVpeXUubmlAaW50ZWwuY29tPg0KPiA+ID4gPiA+IENjOiBKZWZm IEZhbiA8dmFuamVmZl85MTlAaG90bWFpbC5jb20+DQo+ID4gPiA+ID4gQ2M6IExhc3psbyBFcnNl ayA8bGVyc2VrQHJlZGhhdC5jb20+DQo+ID4gPiA+ID4gQ29udHJpYnV0ZWQtdW5kZXI6IFRpYW5v Q29yZSBDb250cmlidXRpb24gQWdyZWVtZW50IDEuMQ0KPiA+ID4gPiA+IFNpZ25lZC1vZmYtYnk6 IEVyaWMgRG9uZyA8ZXJpYy5kb25nQGludGVsLmNvbT4NCj4gPiA+ID4gPiAtLS0NCj4gPiA+ID4g PiAgVWVmaUNwdVBrZy9MaWJyYXJ5L01wSW5pdExpYi9NcExpYi5jIHwgMjUNCj4gPiArKysrKysr KysrKysrKysrKysrKysrLS0tDQo+ID4gPiA+ID4gIDEgZmlsZSBjaGFuZ2VkLCAyMiBpbnNlcnRp b25zKCspLCAzIGRlbGV0aW9ucygtKQ0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gZGlmZiAtLWdpdCBh L1VlZmlDcHVQa2cvTGlicmFyeS9NcEluaXRMaWIvTXBMaWIuYw0KPiA+ID4gPiA+IGIvVWVmaUNw dVBrZy9MaWJyYXJ5L01wSW5pdExpYi9NcExpYi5jDQo+ID4gPiA+ID4gaW5kZXggZWIyNzY1OTEw Yy4uYWJkNjViZWUxYSAxMDA2NDQNCj4gPiA+ID4gPiAtLS0gYS9VZWZpQ3B1UGtnL0xpYnJhcnkv TXBJbml0TGliL01wTGliLmMNCj4gPiA+ID4gPiArKysgYi9VZWZpQ3B1UGtnL0xpYnJhcnkvTXBJ bml0TGliL01wTGliLmMNCj4gPiA+ID4gPiBAQCAtNDE4LDcgKzQxOCw4IEBAIEFwSW5pdGlhbGl6 ZVN5bmMgKCAgfQ0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gIC8qKg0KPiA+ID4gPiA+IC0gIEZpbmQg dGhlIGN1cnJlbnQgUHJvY2Vzc29yIG51bWJlciBieSBBUElDIElELg0KPiA+ID4gPiA+ICsgIEZp cnN0IHRyeSB0byBmaW5kIHRoZSBjdXJyZW50IFByb2Nlc3NvciBudW1iZXIgYnkgc3RhY2sNCj4g PiA+ID4gPiArIGFkZHJlc3MsIGlmIGl0IGZhaWxlZCwgdGhlbiBiYXNlIG9uIEFQSUMgSUQuDQo+ ID4gPiA+ID4NCj4gPiA+ID4gPiAgICBAcGFyYW1baW5dICBDcHVNcERhdGEgICAgICAgICBQb2lu dGVyIHRvIFBFSSBDUFUgTVAgRGF0YQ0KPiA+ID4gPiA+ICAgIEBwYXJhbVtvdXRdIFByb2Nlc3Nv ck51bWJlciAgIFJldHVybiB0aGUgcG9jZXNzb3IgbnVtYmVyIGZvdW5kDQo+ID4gPiA+ID4gQEAg LTQzNSwxNiArNDM2LDM0IEBAIEdldFByb2Nlc3Nvck51bWJlciAoDQo+ID4gPiA+ID4gICAgVUlO VE4gICAgICAgICAgICAgICAgICAgVG90YWxQcm9jZXNzb3JOdW1iZXI7DQo+ID4gPiA+ID4gICAg VUlOVE4gICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ID4gPiA+ID4gICAgQ1BVX0lORk9fSU5f SE9CICAgICAgICAgKkNwdUluZm9JbkhvYjsNCj4gPiA+ID4gPiArICBVSU5UMzIgICAgICAgICAg ICAgICAgICBDdXJyZW50QXBpY0lkOw0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gKyAgVG90YWxQcm9j ZXNzb3JOdW1iZXIgPSBDcHVNcERhdGEtPkNwdUNvdW50Ow0KPiA+ID4gPiA+ICAgIENwdUluZm9J bkhvYiA9IChDUFVfSU5GT19JTl9IT0IgKikgKFVJTlROKSBDcHVNcERhdGEtDQo+ID4gPiA+ID5D cHVJbmZvSW5Ib2I7DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAtICBUb3RhbFByb2Nlc3Nvck51bWJl ciA9IENwdU1wRGF0YS0+Q3B1Q291bnQ7DQo+ID4gPiA+ID4gKyAgLy8NCj4gPiA+ID4gPiArICAv LyBGaXJzdCB0cnkgdG8gYmFzZSBvbiBjdXJyZW50IHN0YWNrIGFkZHJlc3MgdG8gZmluZCB0aGUg QVAgaW5kZXguDQo+ID4gPiA+ID4gKyAgLy8gJlRvdGFsUHJvY2Vzc29yTnVtYmVyIHZhbHVlIGxv Y2F0ZWQgaW4gdGhlIHN0YWNrIHJhbmdlLg0KPiA+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ID4gICAg Zm9yIChJbmRleCA9IDA7IEluZGV4IDwgVG90YWxQcm9jZXNzb3JOdW1iZXI7IEluZGV4ICsrKSB7 DQo+ID4gPiA+ID4gLSAgICBpZiAoQ3B1SW5mb0luSG9iW0luZGV4XS5BcGljSWQgPT0gR2V0QXBp Y0lkICgpKSB7DQo+ID4gPiA+ID4gKyAgICBpZiAoKENwdUluZm9JbkhvYltJbmRleF0uQXBUb3BP ZlN0YWNrID4gKFVJTlROKQ0KPiA+ID4gPiAoJlRvdGFsUHJvY2Vzc29yTnVtYmVyKSkgJiYNCj4g PiA+ID4gPiArICAgICAgICAoQ3B1SW5mb0luSG9iW0luZGV4XS5BcFRvcE9mU3RhY2sgLQ0KPiA+ ID4gPiA+ICsgQ3B1TXBEYXRhLT5DcHVBcFN0YWNrU2l6ZSA8IChVSU5UTikgKCZUb3RhbFByb2Nl c3Nvck51bWJlcikpKQ0KPiA+ID4gPiA+ICsgQ3B1TXBEYXRhLT57DQo+ID4gPiA+ID4gICAgICAg ICpQcm9jZXNzb3JOdW1iZXIgPSBJbmRleDsNCj4gPiA+ID4gPiAgICAgICAgcmV0dXJuIEVGSV9T VUNDRVNTOw0KPiA+ID4gPiA+ICAgICAgfQ0KPiA+ID4gPiA+ICAgIH0NCj4gPiA+ID4NCj4gPiA+ ID4gKDEpIElmIEkgdW5kZXJzdGFuZCBjb3JyZWN0bHksIEFwVG9wT2ZTdGFjayBpcyB0aGUgZXhj bHVzaXZlIGVuZA0KPiA+ID4gPiAoaGlnaGVzdA0KPiA+ID4gPiBhZGRyZXNzKSBvZiB0aGUgQVAg c3RhY2ssIHNvIGFueSBsb2NhbCB2YXJpYWJsZSBpcyBzdXBwb3NlZCB0bw0KPiA+ID4gPiBzdGFy dCBzdHJpY3RseSBiZWxvdyBpdCAodGhlIHN0YWNrIGdyb3dzIGRvd24pLiBUaGlzIHNlZW1zIHRv DQo+ID4gPiA+IGp1c3RpZnkgdGhlICI+IiByZWxhdGlvbmFsIG9wZXJhdG9yLCBpbiB0aGUgZmly c3Qgc3ViY29uZGl0aW9uOyBPSy4NCj4gPiA+ID4NCj4gPiA+ID4gSG93ZXZlciwgd2hhdCBndWFy YW50ZWVzIHRoYXQgdGhlIFRvdGFsUHJvY2Vzc29yTnVtYmVyIGxvY2FsDQo+ID4gPiA+IHZhcmlh YmxlIGlzIG5vdCBsb2NhdGVkIGV4YWN0bHkgYXQgdGhlIChpbmNsdXNpdmUpIGJhc2Ugb2YgdGhl IEFQIHN0YWNrPw0KPiBJT1csIHdoeSBpcyAiPCINCj4gPiA+ID4gY29ycmVjdCwgaW4gdGhlIHNl Y29uZCBzdWJjb25kaXRpb24sIHJhdGhlciB0aGFuICI8PSI/DQo+ID4gPiA+DQo+ID4gPg0KPiA+ ID4gW0VyaWNdICBUb3RhbFByb2Nlc3Nvck51bWJlciBpcyB0aGUgZmlyc3QgbG9jYWwgdmFyaWFi bGUgaW4gdGhpcw0KPiA+ID4gZnVuY3Rpb24sIGFsc28gZXhpc3Qgb3RoZXIgbG9jYWwgdmFyaWFi bGVzIGluIHRoaXMgZnVuY3Rpb24sIHNvIEkganVzdCB1c2UgIjwiDQo+IGhlcmUuDQo+ID4gPg0K PiA+ID4gPg0KPiA+ID4gPiAoMikgSSdtIGdlbmVyYWxseSB1bmhhcHB5IGFib3V0IHRha2luZyB0 aGUgYWRkcmVzcyBvZiBsb2NhbA0KPiA+ID4gPiB2YXJpYWJsZXMsIGluIG9yZGVyIHRvIGRldGVy bWluZSBzdGFjayBsb2NhdGlvbiBpbiBDIGxhbmd1YWdlLg0KPiA+ID4gPiBJbnN0ZWFkLCBJIHRo aW5rIHdlIHNob3VsZCBoYXZlDQo+ID4gPiA+IEFzbVJlYWRFc3AoKSAvIEFzbVJlYWRSc3AoKSBm dW5jdGlvbnMgLS0gd2UgdXNlZCB0byBoYXZlDQo+ID4gPiA+IEFzbVJlYWRTcCgpIGZvciBJdGFu aXVtLiBQbGVhc2Ugc2VlIHRoZSBmb2xsb3dpbmcgc3ViLXRocmVhZCwNCj4gPiA+ID4gd2hlcmUg Sm9yZGFuIG9yaWdpbmFsbHkgc3VnZ2VzdGVkIEFzbVJlYWRFc3AoKSAvIEFzbVJlYWRSc3AoKToN Cj4gPiA+ID4NCj4gPiA+ID4gaHR0cDovL21pZC5tYWlsLQ0KPiA+ID4gPiBhcmNoaXZlLmNvbS8x NTEwNTY0MTA4NjcuMTU4MDkuNjU5NzAxODk0MjI2Njg3NTQzQGpsanVzdGVuLXNrbA0KPiA+ID4g Pg0KPiA+ID4gPiBodHRwOi8vbWlkLm1haWwtDQo+ID4gPiA+IGFyY2hpdmUuY29tLzE1MTA1OTYy NzI1OC4yMDYxNC4xNjUwNTc2NjE5MTQxNTAwNTgwMkBqbGp1c3Rlbi1za2wNCj4gPiA+ID4NCj4g PiA+ID4gU2hvdWxkIEkgZmlsZSBhIEZlYXR1cmUgUmVxdWVzdCBmb3IgQmFzZUxpYiwgYWJvdXQg YWRkaW5nDQo+ID4gPiA+IEFzbVJlYWRFc3AoKSAvIEFzbVJlYWRSc3AoKT8NCj4gPiA+ID4NCj4g PiA+ID4gSSdtIG5vdCBzdWdnZXN0aW5nIHRoYXQgd2UgYmxvY2sgdGhpcyBwYXRjaCB3aXRoIHRo YXQgZmVhdHVyZQ0KPiA+ID4gPiByZXF1ZXN0LCBidXQgcGVyaGFwcyB3ZSBzaG91bGQgYmxvY2sg dGhlICpuZXh0KiBwYXRjaC4NCj4gPiA+ID4NCj4gPiA+DQo+ID4gPiBbRXJpY10gWWVzLCBJIHRy aWVzIHRvIHVzZSB0aGUgZnVuY3Rpb24geW91IHN1Z2dlc3RlZCBidXQgd2UgZG9uJ3QNCj4gPiA+ IGZpbmQgaXQsIHNvIEkgdXNlIGxvY2FsIHZhcmlhYmxlIGhlcmUuICBJIGFncmVlIHdpdGggeW91 ciBzdWdnZXN0DQo+ID4gPiB0aGF0IHdlIHNob3VsZCBhZGQgdGhpcyBBUEkgZm9yIGxhdGVyIHVz YWdlLiBJIHdpbGwgZm9sbG93IHVwIHRvIGFkZCB0aGlzIG5ldw0KPiBBUEkgYW5kIHVwZGF0ZSB0 aGlzIHBhdGNoIHRvIFYyLg0KPiA+ID4NCj4gPiA+ID4NCj4gPiA+ID4gRm9yIHRoZSBwcmVzZW50 IHBhdGNoLCBJJ2xsIGZvbGxvdyB1cCB3aXRoIHRlc3QgcmVzdWx0cyBzZXBhcmF0ZWx5Lg0KPiA+ ID4gPg0KPiA+ID4gPiBUaGFua3MsDQo+ID4gPiA+IExhc3psbw0KPiA+ID4gPg0KPiA+ID4gPiA+ ICsNCj4gPiA+ID4gPiArICAvLw0KPiA+ID4gPiA+ICsgIC8vIElmIGNhbid0IGJhc2Ugb24gc3Rh Y2sgdG8gZmluZCB0aGUgQVAgaW5kZXgsIHVzZSB0aGUgQVBJQyBJRC4NCj4gPiA+ID4gPiArICAv Lw0KPiA+ID4gPiA+ICsgIEN1cnJlbnRBcGljSWQgPSBHZXRBcGljSWQgKCk7ICBmb3IgKEluZGV4 ID0gMDsgSW5kZXggPA0KPiA+ID4gPiA+ICsgVG90YWxQcm9jZXNzb3JOdW1iZXI7IEluZGV4ICsr KSB7DQo+ID4gPiA+ID4gKyAgICBpZiAoQ3B1SW5mb0luSG9iW0luZGV4XS5BcGljSWQgPT0gQ3Vy cmVudEFwaWNJZCkgew0KPiA+ID4gPiA+ICsgICAgICAqUHJvY2Vzc29yTnVtYmVyID0gSW5kZXg7 DQo+ID4gPiA+ID4gKyAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiA+ID4gPiArICAgIH0N Cj4gPiA+ID4gPiArICB9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICAgIHJldHVybiBFRklfTk9U X0ZPVU5EOw0KPiA+ID4gPiA+ICB9DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAtLQ0KPiA+ID4gPiA+ IDIuMTUuMC53aW5kb3dzLjENCj4gPiA+ID4gPg0KPiA+ID4gPiA+IF9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQo+ID4gPiA+ID4gZWRrMi1kZXZlbCBtYWls aW5nIGxpc3QNCj4gPiA+ID4gPiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KPiA+ID4gPiA+IGh0 dHBzOi8vbGlzdHMuMDEub3JnL21haWxtYW4vbGlzdGluZm8vZWRrMi1kZXZlbA0KPiA+ID4gPiA+ DQo+ID4gPg0KPiA+ID4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18NCj4gPiA+IGVkazItZGV2ZWwgbWFpbGluZyBsaXN0DQo+ID4gPiBlZGsyLWRldmVsQGxp c3RzLjAxLm9yZw0KPiA+ID4gaHR0cHM6Ly9saXN0cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5mby9l ZGsyLWRldmVsDQo+ID4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18NCj4gPiBlZGsyLWRldmVsIG1haWxpbmcgbGlzdA0KPiA+IGVkazItZGV2ZWxAbGlzdHMu MDEub3JnDQo+ID4gaHR0cHM6Ly9saXN0cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5mby9lZGsyLWRl dmVsDQo=