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.31; helo=mga06.intel.com; envelope-from=jiewen.yao@intel.com; receiver=edk2-devel@lists.01.org Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (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 B7A60203369D1 for ; Wed, 11 Jul 2018 00:45:14 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Jul 2018 00:45:14 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,337,1526367600"; d="scan'208";a="53526103" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by fmsmga007.fm.intel.com with ESMTP; 11 Jul 2018 00:45:13 -0700 Received: from fmsmsx112.amr.corp.intel.com (10.18.116.6) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 11 Jul 2018 00:45:13 -0700 Received: from shsmsx104.ccr.corp.intel.com (10.239.4.70) by FMSMSX112.amr.corp.intel.com (10.18.116.6) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 11 Jul 2018 00:45:12 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.124]) by SHSMSX104.ccr.corp.intel.com ([169.254.5.81]) with mapi id 14.03.0319.002; Wed, 11 Jul 2018 15:45:11 +0800 From: "Yao, Jiewen" To: "Dong, Eric" , "Dong, Eric" , 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: AQHUE3rvmjjL3dhMzEODKAQWqrWIe6SAFEKAgAWhtACAADTIgIADw/xg Date: Wed, 11 Jul 2018 07:45:10 +0000 Message-ID: <74D8A39837DF1E4DA445A8C0B3885C503AC9B858@shsmsx102.ccr.corp.intel.com> References: <20180704083736.9272-1-eric.dong@intel.com> <58bddde7-da02-1a73-f738-70c58c10b60a@redhat.com> In-Reply-To: Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiYWMxNjJmM2QtNDVkMi00MmU4LWJlNjgtNzYyNWIzN2U0NWYzIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiekxxYURJOURDVWhKWnNRdDJDbkJKTHhrSGNCeHZTRjJQZ1ZNeDhSeENVbzJrYXdCQ2xMMFwvM3Q5SUJoUnpqRUcifQ== x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.200.100 dlp-reaction: no-action 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 07:45:14 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkNCkkgYmVsaWV2ZSB1c2luZyBzdGFjayBwb2ludGVyIGlzIG5vdCBhIHJvYnVzdCB3YXkgaWYg dGhlIHN0YWNrIGd1YXJkIGZlYXR1cmUgaXMgbm90IGVuYWJsZWQuIFN0YWNrIHBvaW50ZXIgbWF5 IG92ZXJmbG93Lg0KDQpDYW4gd2UgdXNlIEdEVD8gRWFjaCBBUCBoYXMgaXRzIG93biBHRFQuDQoN ClRoYW5rIHlvdQ0KWWFvIEppZXdlbg0KDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0N Cj4gRnJvbTogZWRrMi1kZXZlbCBbbWFpbHRvOmVkazItZGV2ZWwtYm91bmNlc0BsaXN0cy4wMS5v cmddIE9uIEJlaGFsZiBPZiBEb25nLA0KPiBFcmljDQo+IFNlbnQ6IE1vbmRheSwgSnVseSA5LCAy MDE4IDI6MTMgUE0NCj4gVG86IERvbmcsIEVyaWMgPGVyaWMuZG9uZ0BpbnRlbC5jb20+OyBMYXN6 bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPjsgRmFuDQo+IEplZmYgPHZhbmplZmZfOTE5QGhv dG1haWwuY29tPjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNCj4gQ2M6IE5pLCBSdWl5dSA8cnVp eXUubmlAaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBSZTogW2VkazJdIOetlOWkjTogW1BhdGNoXSBV ZWZpQ3B1UGtnL01wSW5pdExpYjogT3B0aW1pemUgZ2V0IHByb2Nlc3Nvcg0KPiBudW1iZXIgcGVy Zm9ybWFuY2UuDQo+IA0KPiBIaSBMYXN6bG8sDQo+IA0KPiBJIGhhdmUgY3JlYXRlZCBodHRwczov L2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDIgdG8gcmVxdWVzdA0K PiB0byBhZGQgQXNtUmVhZEVzcCgpIC8gQXNtUmVhZFJzcCgpLg0KPiANCj4gVGhhbmtzLA0KPiBF cmljDQo+IA0KPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gRnJvbTogZWRrMi1k ZXZlbCBbbWFpbHRvOmVkazItZGV2ZWwtYm91bmNlc0BsaXN0cy4wMS5vcmddIE9uIEJlaGFsZiBP Zg0KPiA+IERvbmcsIEVyaWMNCj4gPiBTZW50OiBNb25kYXksIEp1bHkgOSwgMjAxOCAxMTowNCBB TQ0KPiA+IFRvOiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPjsgRmFuIEplZmYgPHZh bmplZmZfOTE5QGhvdG1haWwuY29tPjsNCj4gPiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KPiA+ IENjOiBOaSwgUnVpeXUgPHJ1aXl1Lm5pQGludGVsLmNvbT4NCj4gPiBTdWJqZWN0OiBSZTogW2Vk azJdIOetlOWkjTogW1BhdGNoXSBVZWZpQ3B1UGtnL01wSW5pdExpYjogT3B0aW1pemUgZ2V0DQo+ ID4gcHJvY2Vzc29yIG51bWJlciBwZXJmb3JtYW5jZS4NCj4gPg0KPiA+IEhpIExhc3psbywNCj4g Pg0KPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+IEZyb206IExhc3psbyBF cnNlayBbbWFpbHRvOmxlcnNla0ByZWRoYXQuY29tXQ0KPiA+ID4gU2VudDogVGh1cnNkYXksIEp1 bHkgNSwgMjAxOCA5OjA0IFBNDQo+ID4gPiBUbzogRmFuIEplZmYgPHZhbmplZmZfOTE5QGhvdG1h aWwuY29tPjsgRG9uZywgRXJpYw0KPiA+ID4gPGVyaWMuZG9uZ0BpbnRlbC5jb20+OyBlZGsyLWRl dmVsQGxpc3RzLjAxLm9yZw0KPiA+ID4gQ2M6IE5pLCBSdWl5dSA8cnVpeXUubmlAaW50ZWwuY29t Pg0KPiA+ID4gU3ViamVjdDogUmU6IFtlZGsyXSDnrZTlpI06IFtQYXRjaF0gVWVmaUNwdVBrZy9N cEluaXRMaWI6IE9wdGltaXplIGdldA0KPiA+ID4gcHJvY2Vzc29yIG51bWJlciBwZXJmb3JtYW5j ZS4NCj4gPiA+DQo+ID4gPiBIaSBKZWZmLA0KPiA+ID4NCj4gPiA+IE9uIDA3LzA0LzE4IDExOjM5 LCBGYW4gSmVmZiB3cm90ZToNCj4gPiA+ID4gRXJpYywNCj4gPiA+ID4NCj4gPiA+ID4gQ3VycmVu dCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBjYWxsIEdldEFwaWNpZCgpIG1hbnkgdGltZXMsICBQ bGVhc2UNCj4gPiA+IGNvcnJlY3QgeW91IGNvbW1pdCBtZXNzYWdlLiBZb3VyIGZpeCBpcyB0byBp bXByb3ZlIHRoZSBwZXJmb3JtYW5jZQ0KPiA+ID4gYWdhaW5zdCB0aGUgY3VycmVudCBpbXBsZW1l bnRhdGlvbi4NCj4gPiA+DQo+ID4gPiBJIHRoaW5rIHRoZSBvcmlnaW5hbCBjb21taXQgbWVzc2Fn ZSBkb2VzIG1ha2Ugc2Vuc2UuIFdpdGhvdXQgdGhlDQo+ID4gPiBwYXRjaCwNCj4gPiA+IEdldFBy b2Nlc3Nvck51bWJlcigpIG1heSBjYWxsIEdldEFwaWNJZCgpIHVwIHRvIFRvdGFsUHJvY2Vzc29y TnVtYmVyDQo+ID4gPiB0aW1lcy4gV2l0aCB0aGUgcGF0Y2gsIGV2ZW4gaWYgd2Ugc2tpcCB0aGUg c3RhY2sgcmFuZ2Ugc2VhcmNoLA0KPiA+ID4gR2V0UHJvY2Vzc29yTnVtYmVyKCkgd2lsbCBjYWxs IEdldEFwaWNJZCgpIGp1c3Qgb25jZS4NCj4gPiA+DQo+ID4gPiBbLi4uXQ0KPiA+ID4NCj4gPiA+ IFNvbWUgbW9yZSBxdWVzdGlvbnMgYmVsb3csIGZvciB0aGUgcGF0Y2g6DQo+ID4gPg0KPiA+ID4g PiDlj5Hku7bkuro6IEVyaWMgRG9uZyA8ZXJpYy5kb25nQGludGVsLmNvbT4NCj4gPiA+ID4g5Y+R 6YCB5pe26Ze0OiBXZWRuZXNkYXksIEp1bHkgNCwgMjAxOCA0OjM3OjM2IFBNDQo+ID4gPiA+IOaU tuS7tuS6ujogZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNCj4gPiA+ID4g5oqE6YCBOiBSdWl5dSBO aTsgSmVmZiBGYW47IExhc3psbyBFcnNlaw0KPiA+ID4gPiDkuLvpopg6IFtQYXRjaF0gVWVmaUNw dVBrZy9NcEluaXRMaWI6IE9wdGltaXplIGdldCBwcm9jZXNzb3IgbnVtYmVyDQo+ID4gPiBwZXJm b3JtYW5jZS4NCj4gPiA+ID4NCj4gPiA+ID4gQ3VycmVudCBmdW5jdGlvbiBoYXMgbG93IHBlcmZv cm1hbmNlIGJlY2F1c2UgaXQgY2FsbHMgR2V0QXBpY0lkIG1hbnkNCj4gPiA+ID4gdGltZXMuDQo+ ID4gPiA+DQo+ID4gPiA+IE5ldyBsb2dpYyBmaXJzdCB0cnkgdG8gYmFzZSBvbiB0aGUgc3RhY2sg cmFuZ2UgdXNlZCBieSBBUCB0byBmaW5kDQo+ID4gPiA+IHRoZSBwcm9jZXNzb3IgbnVtYmVyLiBJ ZiB0aGlzIHNvbHV0aW9uIGZhaWxlZCwgdGhlbiBjYWxsIEdldEFwaWNJZA0KPiA+ID4gPiBvbmNl IGFuZCBiYXNlIG9uIHRoaXMgdmFsdWUgdG8gc2VhcmNoIHRoZSBwcm9jZXNzb3IuDQo+ID4gPiA+ DQo+ID4gPiA+IENjOiBSdWl5dSBOaSA8cnVpeXUubmlAaW50ZWwuY29tPg0KPiA+ID4gPiBDYzog SmVmZiBGYW4gPHZhbmplZmZfOTE5QGhvdG1haWwuY29tPg0KPiA+ID4gPiBDYzogTGFzemxvIEVy c2VrIDxsZXJzZWtAcmVkaGF0LmNvbT4NCj4gPiA+ID4gQ29udHJpYnV0ZWQtdW5kZXI6IFRpYW5v Q29yZSBDb250cmlidXRpb24gQWdyZWVtZW50IDEuMQ0KPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBF cmljIERvbmcgPGVyaWMuZG9uZ0BpbnRlbC5jb20+DQo+ID4gPiA+IC0tLQ0KPiA+ID4gPiAgVWVm aUNwdVBrZy9MaWJyYXJ5L01wSW5pdExpYi9NcExpYi5jIHwgMjUNCj4gKysrKysrKysrKysrKysr KysrKysrKy0tLQ0KPiA+ID4gPiAgMSBmaWxlIGNoYW5nZWQsIDIyIGluc2VydGlvbnMoKyksIDMg ZGVsZXRpb25zKC0pDQo+ID4gPiA+DQo+ID4gPiA+IGRpZmYgLS1naXQgYS9VZWZpQ3B1UGtnL0xp YnJhcnkvTXBJbml0TGliL01wTGliLmMNCj4gPiA+ID4gYi9VZWZpQ3B1UGtnL0xpYnJhcnkvTXBJ bml0TGliL01wTGliLmMNCj4gPiA+ID4gaW5kZXggZWIyNzY1OTEwYy4uYWJkNjViZWUxYSAxMDA2 NDQNCj4gPiA+ID4gLS0tIGEvVWVmaUNwdVBrZy9MaWJyYXJ5L01wSW5pdExpYi9NcExpYi5jDQo+ ID4gPiA+ICsrKyBiL1VlZmlDcHVQa2cvTGlicmFyeS9NcEluaXRMaWIvTXBMaWIuYw0KPiA+ID4g PiBAQCAtNDE4LDcgKzQxOCw4IEBAIEFwSW5pdGlhbGl6ZVN5bmMgKCAgfQ0KPiA+ID4gPg0KPiA+ ID4gPiAgLyoqDQo+ID4gPiA+IC0gIEZpbmQgdGhlIGN1cnJlbnQgUHJvY2Vzc29yIG51bWJlciBi eSBBUElDIElELg0KPiA+ID4gPiArICBGaXJzdCB0cnkgdG8gZmluZCB0aGUgY3VycmVudCBQcm9j ZXNzb3IgbnVtYmVyIGJ5IHN0YWNrIGFkZHJlc3MsDQo+ID4gPiA+ICsgaWYgaXQgZmFpbGVkLCB0 aGVuIGJhc2Ugb24gQVBJQyBJRC4NCj4gPiA+ID4NCj4gPiA+ID4gICAgQHBhcmFtW2luXSAgQ3B1 TXBEYXRhICAgICAgICAgUG9pbnRlciB0byBQRUkgQ1BVIE1QIERhdGENCj4gPiA+ID4gICAgQHBh cmFtW291dF0gUHJvY2Vzc29yTnVtYmVyICAgUmV0dXJuIHRoZSBwb2Nlc3NvciBudW1iZXIgZm91 bmQNCj4gPiA+ID4gQEAgLTQzNSwxNiArNDM2LDM0IEBAIEdldFByb2Nlc3Nvck51bWJlciAoDQo+ ID4gPiA+ICAgIFVJTlROICAgICAgICAgICAgICAgICAgIFRvdGFsUHJvY2Vzc29yTnVtYmVyOw0K PiA+ID4gPiAgICBVSU5UTiAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gPiA+ID4gICAgQ1BV X0lORk9fSU5fSE9CICAgICAgICAgKkNwdUluZm9JbkhvYjsNCj4gPiA+ID4gKyAgVUlOVDMyICAg ICAgICAgICAgICAgICAgQ3VycmVudEFwaWNJZDsNCj4gPiA+ID4NCj4gPiA+ID4gKyAgVG90YWxQ cm9jZXNzb3JOdW1iZXIgPSBDcHVNcERhdGEtPkNwdUNvdW50Ow0KPiA+ID4gPiAgICBDcHVJbmZv SW5Ib2IgPSAoQ1BVX0lORk9fSU5fSE9CICopIChVSU5UTikgQ3B1TXBEYXRhLQ0KPiA+ID4gPkNw dUluZm9JbkhvYjsNCj4gPiA+ID4NCj4gPiA+ID4gLSAgVG90YWxQcm9jZXNzb3JOdW1iZXIgPSBD cHVNcERhdGEtPkNwdUNvdW50Ow0KPiA+ID4gPiArICAvLw0KPiA+ID4gPiArICAvLyBGaXJzdCB0 cnkgdG8gYmFzZSBvbiBjdXJyZW50IHN0YWNrIGFkZHJlc3MgdG8gZmluZCB0aGUgQVAgaW5kZXgu DQo+ID4gPiA+ICsgIC8vICZUb3RhbFByb2Nlc3Nvck51bWJlciB2YWx1ZSBsb2NhdGVkIGluIHRo ZSBzdGFjayByYW5nZS4NCj4gPiA+ID4gKyAgLy8NCj4gPiA+ID4gICAgZm9yIChJbmRleCA9IDA7 IEluZGV4IDwgVG90YWxQcm9jZXNzb3JOdW1iZXI7IEluZGV4ICsrKSB7DQo+ID4gPiA+IC0gICAg aWYgKENwdUluZm9JbkhvYltJbmRleF0uQXBpY0lkID09IEdldEFwaWNJZCAoKSkgew0KPiA+ID4g PiArICAgIGlmICgoQ3B1SW5mb0luSG9iW0luZGV4XS5BcFRvcE9mU3RhY2sgPiAoVUlOVE4pDQo+ ID4gPiAoJlRvdGFsUHJvY2Vzc29yTnVtYmVyKSkgJiYNCj4gPiA+ID4gKyAgICAgICAgKENwdUlu Zm9JbkhvYltJbmRleF0uQXBUb3BPZlN0YWNrIC0NCj4gPiA+ID4gKyBDcHVNcERhdGEtPkNwdUFw U3RhY2tTaXplIDwgKFVJTlROKSAoJlRvdGFsUHJvY2Vzc29yTnVtYmVyKSkpIHsNCj4gPiA+ID4g ICAgICAgICpQcm9jZXNzb3JOdW1iZXIgPSBJbmRleDsNCj4gPiA+ID4gICAgICAgIHJldHVybiBF RklfU1VDQ0VTUzsNCj4gPiA+ID4gICAgICB9DQo+ID4gPiA+ICAgIH0NCj4gPiA+DQo+ID4gPiAo MSkgSWYgSSB1bmRlcnN0YW5kIGNvcnJlY3RseSwgQXBUb3BPZlN0YWNrIGlzIHRoZSBleGNsdXNp dmUgZW5kDQo+ID4gPiAoaGlnaGVzdA0KPiA+ID4gYWRkcmVzcykgb2YgdGhlIEFQIHN0YWNrLCBz byBhbnkgbG9jYWwgdmFyaWFibGUgaXMgc3VwcG9zZWQgdG8gc3RhcnQNCj4gPiA+IHN0cmljdGx5 IGJlbG93IGl0ICh0aGUgc3RhY2sgZ3Jvd3MgZG93bikuIFRoaXMgc2VlbXMgdG8ganVzdGlmeSB0 aGUNCj4gPiA+ICI+IiByZWxhdGlvbmFsIG9wZXJhdG9yLCBpbiB0aGUgZmlyc3Qgc3ViY29uZGl0 aW9uOyBPSy4NCj4gPiA+DQo+ID4gPiBIb3dldmVyLCB3aGF0IGd1YXJhbnRlZXMgdGhhdCB0aGUg VG90YWxQcm9jZXNzb3JOdW1iZXIgbG9jYWwgdmFyaWFibGUNCj4gPiA+IGlzIG5vdCBsb2NhdGVk IGV4YWN0bHkgYXQgdGhlIChpbmNsdXNpdmUpIGJhc2Ugb2YgdGhlIEFQIHN0YWNrPyBJT1csIHdo eSBpcyAiPCINCj4gPiA+IGNvcnJlY3QsIGluIHRoZSBzZWNvbmQgc3ViY29uZGl0aW9uLCByYXRo ZXIgdGhhbiAiPD0iPw0KPiA+ID4NCj4gPg0KPiA+IFtFcmljXSAgVG90YWxQcm9jZXNzb3JOdW1i ZXIgaXMgdGhlIGZpcnN0IGxvY2FsIHZhcmlhYmxlIGluIHRoaXMgZnVuY3Rpb24sIGFsc28NCj4g PiBleGlzdCBvdGhlciBsb2NhbCB2YXJpYWJsZXMgaW4gdGhpcyBmdW5jdGlvbiwgc28gSSBqdXN0 IHVzZSAiPCIgaGVyZS4NCj4gPg0KPiA+ID4NCj4gPiA+ICgyKSBJJ20gZ2VuZXJhbGx5IHVuaGFw cHkgYWJvdXQgdGFraW5nIHRoZSBhZGRyZXNzIG9mIGxvY2FsIHZhcmlhYmxlcywNCj4gPiA+IGlu IG9yZGVyIHRvIGRldGVybWluZSBzdGFjayBsb2NhdGlvbiBpbiBDIGxhbmd1YWdlLiBJbnN0ZWFk LCBJIHRoaW5rDQo+ID4gPiB3ZSBzaG91bGQgaGF2ZQ0KPiA+ID4gQXNtUmVhZEVzcCgpIC8gQXNt UmVhZFJzcCgpIGZ1bmN0aW9ucyAtLSB3ZSB1c2VkIHRvIGhhdmUNCj4gPiA+IEFzbVJlYWRTcCgp IGZvciBJdGFuaXVtLiBQbGVhc2Ugc2VlIHRoZSBmb2xsb3dpbmcgc3ViLXRocmVhZCwgd2hlcmUN Cj4gPiA+IEpvcmRhbiBvcmlnaW5hbGx5IHN1Z2dlc3RlZCBBc21SZWFkRXNwKCkgLyBBc21SZWFk UnNwKCk6DQo+ID4gPg0KPiA+ID4gaHR0cDovL21pZC5tYWlsLQ0KPiA+ID4gYXJjaGl2ZS5jb20v MTUxMDU2NDEwODY3LjE1ODA5LjY1OTcwMTg5NDIyNjY4NzU0M0BqbGp1c3Rlbi1za2wNCj4gPiA+ DQo+ID4gPiBodHRwOi8vbWlkLm1haWwtDQo+ID4gPiBhcmNoaXZlLmNvbS8xNTEwNTk2MjcyNTgu MjA2MTQuMTY1MDU3NjYxOTE0MTUwMDU4MDJAamxqdXN0ZW4tc2tsDQo+ID4gPg0KPiA+ID4gU2hv dWxkIEkgZmlsZSBhIEZlYXR1cmUgUmVxdWVzdCBmb3IgQmFzZUxpYiwgYWJvdXQgYWRkaW5nIEFz bVJlYWRFc3AoKQ0KPiA+ID4gLyBBc21SZWFkUnNwKCk/DQo+ID4gPg0KPiA+ID4gSSdtIG5vdCBz dWdnZXN0aW5nIHRoYXQgd2UgYmxvY2sgdGhpcyBwYXRjaCB3aXRoIHRoYXQgZmVhdHVyZSByZXF1 ZXN0LA0KPiA+ID4gYnV0IHBlcmhhcHMgd2Ugc2hvdWxkIGJsb2NrIHRoZSAqbmV4dCogcGF0Y2gu DQo+ID4gPg0KPiA+DQo+ID4gW0VyaWNdIFllcywgSSB0cmllcyB0byB1c2UgdGhlIGZ1bmN0aW9u IHlvdSBzdWdnZXN0ZWQgYnV0IHdlIGRvbid0IGZpbmQgaXQsIHNvIEkNCj4gPiB1c2UgbG9jYWwg dmFyaWFibGUgaGVyZS4gIEkgYWdyZWUgd2l0aCB5b3VyIHN1Z2dlc3QgdGhhdCB3ZSBzaG91bGQg YWRkIHRoaXMgQVBJDQo+ID4gZm9yIGxhdGVyIHVzYWdlLiBJIHdpbGwgZm9sbG93IHVwIHRvIGFk ZCB0aGlzIG5ldyBBUEkgYW5kIHVwZGF0ZSB0aGlzIHBhdGNoIHRvIFYyLg0KPiA+DQo+ID4gPg0K PiA+ID4gRm9yIHRoZSBwcmVzZW50IHBhdGNoLCBJJ2xsIGZvbGxvdyB1cCB3aXRoIHRlc3QgcmVz dWx0cyBzZXBhcmF0ZWx5Lg0KPiA+ID4NCj4gPiA+IFRoYW5rcywNCj4gPiA+IExhc3psbw0KPiA+ ID4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAvLw0KPiA+ID4gPiArICAvLyBJZiBjYW4ndCBiYXNl IG9uIHN0YWNrIHRvIGZpbmQgdGhlIEFQIGluZGV4LCB1c2UgdGhlIEFQSUMgSUQuDQo+ID4gPiA+ ICsgIC8vDQo+ID4gPiA+ICsgIEN1cnJlbnRBcGljSWQgPSBHZXRBcGljSWQgKCk7DQo+ID4gPiA+ ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFRvdGFsUHJvY2Vzc29yTnVtYmVyOyBJbmRleCAr Kykgew0KPiA+ID4gPiArICAgIGlmIChDcHVJbmZvSW5Ib2JbSW5kZXhdLkFwaWNJZCA9PSBDdXJy ZW50QXBpY0lkKSB7DQo+ID4gPiA+ICsgICAgICAqUHJvY2Vzc29yTnVtYmVyID0gSW5kZXg7DQo+ ID4gPiA+ICsgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gPiA+ICsgICAgfQ0KPiA+ID4g PiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ID4g PiA+ICB9DQo+ID4gPiA+DQo+ID4gPiA+IC0tDQo+ID4gPiA+IDIuMTUuMC53aW5kb3dzLjENCj4g PiA+ID4NCj4gPiA+ID4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18NCj4gPiA+ID4gZWRrMi1kZXZlbCBtYWlsaW5nIGxpc3QNCj4gPiA+ID4gZWRrMi1kZXZl bEBsaXN0cy4wMS5vcmcNCj4gPiA+ID4gaHR0cHM6Ly9saXN0cy4wMS5vcmcvbWFpbG1hbi9saXN0 aW5mby9lZGsyLWRldmVsDQo+ID4gPiA+DQo+ID4NCj4gPiBfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXw0KPiA+IGVkazItZGV2ZWwgbWFpbGluZyBsaXN0DQo+ ID4gZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNCj4gPiBodHRwczovL2xpc3RzLjAxLm9yZy9tYWls bWFuL2xpc3RpbmZvL2VkazItZGV2ZWwNCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18NCj4gZWRrMi1kZXZlbCBtYWlsaW5nIGxpc3QNCj4gZWRrMi1kZXZl bEBsaXN0cy4wMS5vcmcNCj4gaHR0cHM6Ly9saXN0cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5mby9l ZGsyLWRldmVsDQo=