From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.151; helo=mga17.intel.com; envelope-from=eric.dong@intel.com; receiver=edk2-devel@lists.01.org Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) (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 C45AD210DC1BB for ; Wed, 8 Aug 2018 00:39:57 -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 fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 08 Aug 2018 00:39:56 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,456,1526367600"; d="scan'208";a="73672207" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by orsmga003.jf.intel.com with ESMTP; 08 Aug 2018 00:39:33 -0700 Received: from fmsmsx155.amr.corp.intel.com (10.18.116.71) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 8 Aug 2018 00:39:22 -0700 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by FMSMSX155.amr.corp.intel.com (10.18.116.71) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 8 Aug 2018 00:39:21 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.226]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.240]) with mapi id 14.03.0319.002; Wed, 8 Aug 2018 15:39:19 +0800 From: "Dong, Eric" To: "Dong, Eric" , "edk2-devel@lists.01.org" CC: Laszlo Ersek , "Ni, Ruiyu" Thread-Topic: [edk2] [Patch 1/2] UefiCpuPkg/RegisterCpuFeaturesLib: Combine implementation. Thread-Index: AQHULupWmjDkQr6NIEuQuP0jbLVnAqS1d6QA Date: Wed, 8 Aug 2018 07:39:19 +0000 Message-ID: References: <20180808073427.11008-1-eric.dong@intel.com> <20180808073427.11008-2-eric.dong@intel.com> In-Reply-To: <20180808073427.11008-2-eric.dong@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: Re: [Patch 1/2] UefiCpuPkg/RegisterCpuFeaturesLib: Combine implementation. 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 07:39:58 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 UGxlYXNlIGlnbm9yZSB0aGlzIGNoYW5nZSB3aGljaCBmb3Jnb3QgdG8gY2hhbmdlIHZlcnNpb24g dG8gdjIuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogZWRrMi1kZXZl bCBbbWFpbHRvOmVkazItZGV2ZWwtYm91bmNlc0BsaXN0cy4wMS5vcmddIE9uIEJlaGFsZiBPZiBF cmljDQo+IERvbmcNCj4gU2VudDogV2VkbmVzZGF5LCBBdWd1c3QgOCwgMjAxOCAzOjM0IFBNDQo+ IFRvOiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KPiBDYzogTGFzemxvIEVyc2VrIDxsZXJzZWtA cmVkaGF0LmNvbT47IE5pLCBSdWl5dSA8cnVpeXUubmlAaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBb ZWRrMl0gW1BhdGNoIDEvMl0gVWVmaUNwdVBrZy9SZWdpc3RlckNwdUZlYXR1cmVzTGliOiBDb21i aW5lDQo+IGltcGxlbWVudGF0aW9uLg0KPiANCj4gVjEgY2hhbmdlczoNCj4gPiBDdXJyZW50IGNv ZGUgbG9naWMgY2FuJ3QgY29uZmlybSBDcHVTM0RhdGFEeGUgZHJpdmVyIHN0YXJ0IGJlZm9yZQ0K PiA+IENwdUZlYXR1cmVzRHhlIGRyaXZlci4gU28gdGhlIGFzc3VtcHRpb24gaW4gQ3B1RmVhdHVy ZXNEeGUgbm90IHZhbGlkLg0KPiA+IEFkZCBpbXBsZW1lbnRhdGlvbiBmb3IgQWxsb2NhdGVBY3Bp Q3B1RGF0YSBmdW5jdGlvbiB0byByZW1vdmUgdGhpcw0KPiA+IGFzc3VtcHRpb24uDQo+IA0KPiBW MiBjaGFuZ2VzOg0KPiA+IEJlY2F1c2UgQ3B1UzNEYXRhIG1lbW9yeSB3aWxsIGJlIGNvcHkgdG8g c21yYW0gYXQgU21tUmVhZFRvTG9jaw0KPiBwb2ludCwNCj4gPiBzbyB0aGUgbWVtb3J5IHR5cGUg bm8gbmVlZCB0byBiZSBBQ1BJIE5WUyB0eXBlLCBhbHNvIHRoZSBhZGRyZXNzIG5vdA0KPiA+IGxp bWl0IHRvIGJlbG93IDRHLg0KPiA+IFRoaXMgY2hhbmdlIHJlbW92ZSB0aGUgbGltaXQgb2YgQUNQ SSBOVlMgbWVtb3J5IHR5cGUgYW5kIGJlbG93IDRHLg0KPiANCj4gUGFzcyBPUyBib290IGFuZCBy ZXN1bWUgZnJvbSBTMyB0ZXN0Lg0KPiANCj4gQnVnejogaHR0cHM6Ly9idWd6aWxsYS50aWFub2Nv cmUub3JnL3Nob3dfYnVnLmNnaT9pZD05NTkNCj4gDQo+IFJlcG9ydGVkLWJ5OiBNYXJ2aW4gSMOk dXNlciA8TWFydmluLkhhZXVzZXJAb3V0bG9vay5jb20+DQo+IFN1Z2dlc3RlZC1ieTogRmFuIEpl ZmYgPHZhbmplZmZfOTE5QGhvdG1haWwuY29tPg0KPiBDYzogTWFydmluIEjDpHVzZXIgPE1hcnZp bi5IYWV1c2VyQG91dGxvb2suY29tPg0KPiBDYzogRmFuIEplZmYgPHZhbmplZmZfOTE5QGhvdG1h aWwuY29tPg0KPiBDYzogTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT4NCj4gQ2M6IFJ1 aXl1IE5pIDxydWl5dS5uaUBpbnRlbC5jb20+DQo+IENvbnRyaWJ1dGVkLXVuZGVyOiBUaWFub0Nv cmUgQ29udHJpYnV0aW9uIEFncmVlbWVudCAxLjENCj4gU2lnbmVkLW9mZi1ieTogRXJpYyBEb25n IDxlcmljLmRvbmdAaW50ZWwuY29tPg0KPiAtLS0NCj4gIC4uLi9EeGVSZWdpc3RlckNwdUZlYXR1 cmVzTGliLmMgICAgICAgICAgICAgICAgICAgIHwgIDY3IC0tLS0tLS0tLS0tDQo+ICAuLi4vUGVp UmVnaXN0ZXJDcHVGZWF0dXJlc0xpYi5jICAgICAgICAgICAgICAgICAgICB8IDEzMSAtLS0tLS0t LS0tLS0tLS0tLS0tLS0NCj4gIC4uLi9SZWdpc3RlckNwdUZlYXR1cmVzTGliLmMgICAgICAgICAg ICAgICAgICAgICAgIHwgIDkwICsrKysrKysrKysrKysrDQo+ICAzIGZpbGVzIGNoYW5nZWQsIDkw IGluc2VydGlvbnMoKyksIDE5OCBkZWxldGlvbnMoLSkNCj4gDQo+IGRpZmYgLS1naXQNCj4gYS9V ZWZpQ3B1UGtnL0xpYnJhcnkvUmVnaXN0ZXJDcHVGZWF0dXJlc0xpYi9EeGVSZWdpc3RlckNwdUZl YXR1cmVzTGliLmMNCj4gYi9VZWZpQ3B1UGtnL0xpYnJhcnkvUmVnaXN0ZXJDcHVGZWF0dXJlc0xp Yi9EeGVSZWdpc3RlckNwdUZlYXR1cmVzTGliLmMNCj4gaW5kZXggOTAyYTMzOTUyOS4uMWYzNGEz ZjQ4OSAxMDA2NDQNCj4gLS0tDQo+IGEvVWVmaUNwdVBrZy9MaWJyYXJ5L1JlZ2lzdGVyQ3B1RmVh dHVyZXNMaWIvRHhlUmVnaXN0ZXJDcHVGZWF0dXJlc0xpYi5jDQo+ICsrKyBiL1VlZmlDcHVQa2cv TGlicmFyeS9SZWdpc3RlckNwdUZlYXR1cmVzTGliL0R4ZVJlZ2lzdGVyQ3B1RmVhdHVyZXNMaQ0K PiArKysgYi5jDQo+IEBAIC0xOTcsNzAgKzE5NywzIEBAIEdldE51bWJlck9mUHJvY2Vzc29yICgN Cj4gICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gIH0NCj4gDQo+IC0vKioNCj4gLSAg QWxsb2NhdGVzIEFDUEkgTlZTIG1lbW9yeSB0byBzYXZlIEFDUElfQ1BVX0RBVEEuDQo+IC0NCj4g LSAgQHJldHVybiAgUG9pbnRlciB0byBhbGxvY2F0ZWQgQUNQSV9DUFVfREFUQS4NCj4gLSoqLw0K PiAtQUNQSV9DUFVfREFUQSAqDQo+IC1BbGxvY2F0ZUFjcGlDcHVEYXRhICgNCj4gLSAgVk9JRA0K PiAtICApDQo+IC17DQo+IC0gIC8vDQo+IC0gIC8vIENwdVMzRGF0YUR4ZSB3aWxsIGRvIGl0Lg0K PiAtICAvLw0KPiAtICBBU1NFUlQgKEZBTFNFKTsNCj4gLSAgcmV0dXJuIE5VTEw7DQo+IC19DQo+ IC0NCj4gLS8qKg0KPiAtICBFbmxhcmdlcyBDUFUgcmVnaXN0ZXIgdGFibGUgZm9yIGVhY2ggcHJv Y2Vzc29yLg0KPiAtDQo+IC0gIEBwYXJhbVtpbiwgb3V0XSAgUmVnaXN0ZXJUYWJsZSAgIFBvaW50 ZXIgcHJvY2Vzc29yJ3MgQ1BVIHJlZ2lzdGVyIHRhYmxlDQo+IC0qKi8NCj4gLVZPSUQNCj4gLUVu bGFyZ2VSZWdpc3RlclRhYmxlICgNCj4gLSAgSU4gT1VUIENQVV9SRUdJU1RFUl9UQUJMRSAgICAg ICAgICAgICpSZWdpc3RlclRhYmxlDQo+IC0gICkNCj4gLXsNCj4gLSAgRUZJX1NUQVRVUyAgICAg ICAgICAgIFN0YXR1czsNCj4gLSAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgIEFkZHJlc3M7DQo+IC0g IFVJTlROICAgICAgICAgICAgICAgICBBbGxvY2F0ZVBhZ2VzOw0KPiAtDQo+IC0gIEFkZHJlc3Mg PSBCQVNFXzRHQiAtIDE7DQo+IC0gIEFsbG9jYXRlUGFnZXMgPSBSZWdpc3RlclRhYmxlLT5BbGxv Y2F0ZWRTaXplIC8gRUZJX1BBR0VfU0laRTsNCj4gLSAgU3RhdHVzICA9IGdCUy0+QWxsb2NhdGVQ YWdlcyAoDQo+IC0gICAgICAgICAgICAgICAgICAgQWxsb2NhdGVNYXhBZGRyZXNzLA0KPiAtICAg ICAgICAgICAgICAgICAgIEVmaUFDUElNZW1vcnlOVlMsDQo+IC0gICAgICAgICAgICAgICAgICAg QWxsb2NhdGVQYWdlcyArIDEsDQo+IC0gICAgICAgICAgICAgICAgICAgJkFkZHJlc3MNCj4gLSAg ICAgICAgICAgICAgICAgICApOw0KPiAtICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiAt DQo+IC0gIC8vDQo+IC0gIC8vIElmIHRoZXJlIGFyZSByZWNvcmRzIGV4aXN0aW5nIGluIHRoZSBy ZWdpc3RlciB0YWJsZSwgdGhlbiBjb3B5IGl0cyBjb250ZW50cw0KPiAtICAvLyB0byBuZXcgcmVn aW9uIGFuZCBmcmVlIHRoZSBvbGQgb25lLg0KPiAtICAvLw0KPiAtICBpZiAoUmVnaXN0ZXJUYWJs ZS0+QWxsb2NhdGVkU2l6ZSA+IDApIHsNCj4gLSAgICBDb3B5TWVtICgNCj4gLSAgICAgIChWT0lE ICopIChVSU5UTikgQWRkcmVzcywNCj4gLSAgICAgIChWT0lEICopIChVSU5UTikgUmVnaXN0ZXJU YWJsZS0+UmVnaXN0ZXJUYWJsZUVudHJ5LA0KPiAtICAgICAgUmVnaXN0ZXJUYWJsZS0+QWxsb2Nh dGVkU2l6ZQ0KPiAtICAgICAgKTsNCj4gLSAgICAvLw0KPiAtICAgIC8vIFJlZ2lzdGVyVGFibGVF bnRyeSBpcyBhbGxvY2F0ZWQgYnkgZ0JTLT5BbGxvY2F0ZVBhZ2VzKCkgc2VydmljZS4NCj4gLSAg ICAvLyBTbywgZ0JTLT5GcmVlUGFnZXMoKSBzZXJ2aWNlIGlzIHVzZWQgdG8gZnJlZSBpdC4NCj4g LSAgICAvLw0KPiAtICAgIGdCUy0+RnJlZVBhZ2VzICgNCj4gLSAgICAgIFJlZ2lzdGVyVGFibGUt PlJlZ2lzdGVyVGFibGVFbnRyeSwNCj4gLSAgICAgIEFsbG9jYXRlUGFnZXMNCj4gLSAgICAgICk7 DQo+IC0gIH0NCj4gLQ0KPiAtICAvLw0KPiAtICAvLyBBZGp1c3QgdGhlIGFsbG9jYXRlZCBzaXpl IGFuZCByZWdpc3RlciB0YWJsZSBiYXNlIGFkZHJlc3MuDQo+IC0gIC8vDQo+IC0gIFJlZ2lzdGVy VGFibGUtPkFsbG9jYXRlZFNpemUgICAgICs9IEVGSV9QQUdFX1NJWkU7DQo+IC0gIFJlZ2lzdGVy VGFibGUtPlJlZ2lzdGVyVGFibGVFbnRyeSA9IEFkZHJlc3M7IC19IGRpZmYgLS1naXQNCj4gYS9V ZWZpQ3B1UGtnL0xpYnJhcnkvUmVnaXN0ZXJDcHVGZWF0dXJlc0xpYi9QZWlSZWdpc3RlckNwdUZl YXR1cmVzTGliLmMNCj4gYi9VZWZpQ3B1UGtnL0xpYnJhcnkvUmVnaXN0ZXJDcHVGZWF0dXJlc0xp Yi9QZWlSZWdpc3RlckNwdUZlYXR1cmVzTGliLmMNCj4gaW5kZXggNjgwNGVkZGY2NS4uODJmZTI2 ODgxMiAxMDA2NDQNCj4gLS0tDQo+IGEvVWVmaUNwdVBrZy9MaWJyYXJ5L1JlZ2lzdGVyQ3B1RmVh dHVyZXNMaWIvUGVpUmVnaXN0ZXJDcHVGZWF0dXJlc0xpYi5jDQo+ICsrKyBiL1VlZmlDcHVQa2cv TGlicmFyeS9SZWdpc3RlckNwdUZlYXR1cmVzTGliL1BlaVJlZ2lzdGVyQ3B1RmVhdHVyZXNMaQ0K PiArKysgYi5jDQo+IEBAIC0yNTcsMTM0ICsyNTcsMyBAQCBHZXROdW1iZXJPZlByb2Nlc3NvciAo DQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gICAgQVNTRVJUX0VGSV9FUlJPUiAo U3RhdHVzKTsNCj4gIH0NCj4gLQ0KPiAtLyoqDQo+IC0gIEFsbG9jYXRlcyBBQ1BJIE5WUyBtZW1v cnkgdG8gc2F2ZSBBQ1BJX0NQVV9EQVRBLg0KPiAtDQo+IC0gIEByZXR1cm4gIFBvaW50ZXIgdG8g YWxsb2NhdGVkIEFDUElfQ1BVX0RBVEEuDQo+IC0qKi8NCj4gLUFDUElfQ1BVX0RBVEEgKg0KPiAt QWxsb2NhdGVBY3BpQ3B1RGF0YSAoDQo+IC0gIFZPSUQNCj4gLSAgKQ0KPiAtew0KPiAtICBFRklf U1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiAtICBFRklfUEVJX01Q X1NFUlZJQ0VTX1BQSSAgICAgICAgICAgICAgKkNwdU1wUHBpOw0KPiAtICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZDcHVzOw0KPiAtICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZFbmFibGVkUHJvY2Vzc29yczsNCj4gLSAg QUNQSV9DUFVfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICpBY3BpQ3B1RGF0YTsNCj4gLSAg RUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAgICAgICAgICAgIEFkZHJlc3M7DQo+IC0gIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWJsZVNpemU7DQo+IC0gIENQVV9SRUdJ U1RFUl9UQUJMRSAgICAgICAgICAgICAgICAgICAqUmVnaXN0ZXJUYWJsZTsNCj4gLSAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiAtICBFRklfUFJPQ0VTU09S X0lORk9STUFUSU9OICAgICAgICAgICAgUHJvY2Vzc29ySW5mb0J1ZmZlcjsNCj4gLQ0KPiAtICBT dGF0dXMgPSBQZWlTZXJ2aWNlc0FsbG9jYXRlUGFnZXMgKA0KPiAtICAgICAgICAgICAgIEVmaUFD UElNZW1vcnlOVlMsDQo+IC0gICAgICAgICAgICAgRUZJX1NJWkVfVE9fUEFHRVMgKHNpemVvZiAo QUNQSV9DUFVfREFUQSkpLA0KPiAtICAgICAgICAgICAgICZBZGRyZXNzDQo+IC0gICAgICAgICAg ICAgKTsNCj4gLSAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gLSAgQWNwaUNwdURhdGEg PSAoQUNQSV9DUFVfREFUQSAqKSAoVUlOVE4pIEFkZHJlc3M7DQo+IC0gIEFTU0VSVCAoQWNwaUNw dURhdGEgIT0gTlVMTCk7DQo+IC0NCj4gLSAgLy8NCj4gLSAgLy8gR2V0IE1QIFNlcnZpY2VzIFBy b3RvY29sDQo+IC0gIC8vDQo+IC0gIFN0YXR1cyA9IFBlaVNlcnZpY2VzTG9jYXRlUHBpICgNCj4g LSAgICAgICAgICAgICAmZ0VmaVBlaU1wU2VydmljZXNQcGlHdWlkLA0KPiAtICAgICAgICAgICAg IDAsDQo+IC0gICAgICAgICAgICAgTlVMTCwNCj4gLSAgICAgICAgICAgICAoVk9JRCAqKikmQ3B1 TXBQcGkNCj4gLSAgICAgICAgICAgICApOw0KPiAtICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMp Ow0KPiAtDQo+IC0gIC8vDQo+IC0gIC8vIEdldCB0aGUgbnVtYmVyIG9mIENQVXMNCj4gLSAgLy8N Cj4gLSAgU3RhdHVzID0gQ3B1TXBQcGktPkdldE51bWJlck9mUHJvY2Vzc29ycyAoDQo+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgR2V0UGVpU2VydmljZXNUYWJsZVBvaW50ZXIgKCksDQo+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgQ3B1TXBQcGksDQo+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgJk51bWJlck9mQ3B1cywNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAmTnVtYmVy T2ZFbmFibGVkUHJvY2Vzc29ycw0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+IC0g IEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+IC0gIEFjcGlDcHVEYXRhLT5OdW1iZXJPZkNw dXMgPSAoVUlOVDMyKU51bWJlck9mQ3B1czsNCj4gLQ0KPiAtICAvLw0KPiAtICAvLyBBbGxvY2F0 ZSBidWZmZXIgZm9yIGVtcHR5IFJlZ2lzdGVyVGFibGUgYW5kIFByZVNtbUluaXRSZWdpc3RlclRh YmxlIGZvcg0KPiBhbGwgQ1BVcw0KPiAtICAvLw0KPiAtICBUYWJsZVNpemUgPSAyICogTnVtYmVy T2ZDcHVzICogc2l6ZW9mIChDUFVfUkVHSVNURVJfVEFCTEUpOw0KPiAtICBTdGF0dXMgPSBQZWlT ZXJ2aWNlc0FsbG9jYXRlUGFnZXMgKA0KPiAtICAgICAgICAgICAgIEVmaUFDUElNZW1vcnlOVlMs DQo+IC0gICAgICAgICAgICAgRUZJX1NJWkVfVE9fUEFHRVMgKFRhYmxlU2l6ZSksDQo+IC0gICAg ICAgICAgICAgJkFkZHJlc3MNCj4gLSAgICAgICAgICAgICApOw0KPiAtICBBU1NFUlRfRUZJX0VS Uk9SIChTdGF0dXMpOw0KPiAtICBSZWdpc3RlclRhYmxlID0gKENQVV9SRUdJU1RFUl9UQUJMRSAq KSAoVUlOVE4pIEFkZHJlc3M7DQo+IC0NCj4gLSAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTnVt YmVyT2ZDcHVzOyBJbmRleCsrKSB7DQo+IC0gICAgU3RhdHVzID0gQ3B1TXBQcGktPkdldFByb2Nl c3NvckluZm8gKA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgIEdldFBlaVNlcnZpY2VzVGFi bGVQb2ludGVyICgpLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgIENwdU1wUHBpLA0KPiAt ICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4LA0KPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICZQcm9jZXNzb3JJbmZvQnVmZmVyDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgKTsN Cj4gLSAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiAtDQo+IC0gICAgUmVnaXN0ZXJU YWJsZVtJbmRleF0uSW5pdGlhbEFwaWNJZCAgICAgID0NCj4gKFVJTlQzMilQcm9jZXNzb3JJbmZv QnVmZmVyLlByb2Nlc3NvcklkOw0KPiAtICAgIFJlZ2lzdGVyVGFibGVbSW5kZXhdLlRhYmxlTGVu Z3RoICAgICAgICA9IDA7DQo+IC0gICAgUmVnaXN0ZXJUYWJsZVtJbmRleF0uQWxsb2NhdGVkU2l6 ZSAgICAgID0gMDsNCj4gLSAgICBSZWdpc3RlclRhYmxlW0luZGV4XS5SZWdpc3RlclRhYmxlRW50 cnkgPSAwOw0KPiAtDQo+IC0gICAgUmVnaXN0ZXJUYWJsZVtOdW1iZXJPZkNwdXMgKyBJbmRleF0u SW5pdGlhbEFwaWNJZCAgICAgID0NCj4gKFVJTlQzMilQcm9jZXNzb3JJbmZvQnVmZmVyLlByb2Nl c3NvcklkOw0KPiAtICAgIFJlZ2lzdGVyVGFibGVbTnVtYmVyT2ZDcHVzICsgSW5kZXhdLlRhYmxl TGVuZ3RoICAgICAgICA9IDA7DQo+IC0gICAgUmVnaXN0ZXJUYWJsZVtOdW1iZXJPZkNwdXMgKyBJ bmRleF0uQWxsb2NhdGVkU2l6ZSAgICAgID0gMDsNCj4gLSAgICBSZWdpc3RlclRhYmxlW051bWJl ck9mQ3B1cyArIEluZGV4XS5SZWdpc3RlclRhYmxlRW50cnkgPSAwOw0KPiAtICB9DQo+IC0gIEFj cGlDcHVEYXRhLT5SZWdpc3RlclRhYmxlICAgICAgICAgICA9DQo+IChFRklfUEhZU0lDQUxfQURE UkVTUykoVUlOVE4pUmVnaXN0ZXJUYWJsZTsNCj4gLSAgQWNwaUNwdURhdGEtPlByZVNtbUluaXRS ZWdpc3RlclRhYmxlID0NCj4gKEVGSV9QSFlTSUNBTF9BRERSRVNTKShVSU5UTikoUmVnaXN0ZXJU YWJsZSArIE51bWJlck9mQ3B1cyk7DQo+IC0NCj4gLSAgcmV0dXJuIEFjcGlDcHVEYXRhOw0KPiAt fQ0KPiAtDQo+IC0vKioNCj4gLSAgRW5sYXJnZXMgQ1BVIHJlZ2lzdGVyIHRhYmxlIGZvciBlYWNo IHByb2Nlc3Nvci4NCj4gLQ0KPiAtICBAcGFyYW1baW4sIG91dF0gIFJlZ2lzdGVyVGFibGUgICBQ b2ludGVyIHByb2Nlc3NvcidzIENQVSByZWdpc3RlciB0YWJsZQ0KPiAtKiovDQo+IC1WT0lEDQo+ IC1FbmxhcmdlUmVnaXN0ZXJUYWJsZSAoDQo+IC0gIElOIE9VVCBDUFVfUkVHSVNURVJfVEFCTEUg ICAgICAgICAgICAqUmVnaXN0ZXJUYWJsZQ0KPiAtICApDQo+IC17DQo+IC0gIEVGSV9TVEFUVVMg ICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+IC0gIEVGSV9QSFlTSUNBTF9BRERS RVNTICAgICAgICAgICAgICAgICBBZGRyZXNzOw0KPiAtICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQWxsb2NhdGVQYWdlczsNCj4gLQ0KPiAtICBBbGxvY2F0ZVBhZ2VzID0g UmVnaXN0ZXJUYWJsZS0+QWxsb2NhdGVkU2l6ZSAvIEVGSV9QQUdFX1NJWkU7DQo+IC0gIFN0YXR1 cyA9IFBlaVNlcnZpY2VzQWxsb2NhdGVQYWdlcyAoDQo+IC0gICAgICAgICAgICAgRWZpQUNQSU1l bW9yeU5WUywNCj4gLSAgICAgICAgICAgICBBbGxvY2F0ZVBhZ2VzICsgMSwNCj4gLSAgICAgICAg ICAgICAmQWRkcmVzcw0KPiAtICAgICAgICAgICAgICk7DQo+IC0gIEFTU0VSVF9FRklfRVJST1Ig KFN0YXR1cyk7DQo+IC0NCj4gLSAgLy8NCj4gLSAgLy8gSWYgdGhlcmUgYXJlIHJlY29yZHMgZXhp c3RpbmcgaW4gdGhlIHJlZ2lzdGVyIHRhYmxlLCB0aGVuIGNvcHkgaXRzIGNvbnRlbnRzDQo+IC0g IC8vIHRvIG5ldyByZWdpb24gYW5kIGZyZWUgdGhlIG9sZCBvbmUuDQo+IC0gIC8vDQo+IC0gIGlm IChSZWdpc3RlclRhYmxlLT5BbGxvY2F0ZWRTaXplID4gMCkgew0KPiAtICAgIENvcHlNZW0gKA0K PiAtICAgICAgKFZPSUQgKikgKFVJTlROKSBBZGRyZXNzLA0KPiAtICAgICAgKFZPSUQgKikgKFVJ TlROKSBSZWdpc3RlclRhYmxlLT5SZWdpc3RlclRhYmxlRW50cnksDQo+IC0gICAgICBSZWdpc3Rl clRhYmxlLT5BbGxvY2F0ZWRTaXplDQo+IC0gICAgICApOw0KPiAtICB9DQo+IC0NCj4gLSAgLy8N Cj4gLSAgLy8gQWRqdXN0IHRoZSBhbGxvY2F0ZWQgc2l6ZSBhbmQgcmVnaXN0ZXIgdGFibGUgYmFz ZSBhZGRyZXNzLg0KPiAtICAvLw0KPiAtICBSZWdpc3RlclRhYmxlLT5BbGxvY2F0ZWRTaXplICs9 IEVGSV9QQUdFX1NJWkU7DQo+IC0gIFJlZ2lzdGVyVGFibGUtPlJlZ2lzdGVyVGFibGVFbnRyeSA9 IEFkZHJlc3M7IC19IGRpZmYgLS1naXQNCj4gYS9VZWZpQ3B1UGtnL0xpYnJhcnkvUmVnaXN0ZXJD cHVGZWF0dXJlc0xpYi9SZWdpc3RlckNwdUZlYXR1cmVzTGliLmMNCj4gYi9VZWZpQ3B1UGtnL0xp YnJhcnkvUmVnaXN0ZXJDcHVGZWF0dXJlc0xpYi9SZWdpc3RlckNwdUZlYXR1cmVzTGliLmMNCj4g aW5kZXggZGQ2YTgyYmU3YS4uYjg3ZWIyODBmOCAxMDA2NDQNCj4gLS0tIGEvVWVmaUNwdVBrZy9M aWJyYXJ5L1JlZ2lzdGVyQ3B1RmVhdHVyZXNMaWIvUmVnaXN0ZXJDcHVGZWF0dXJlc0xpYi5jDQo+ ICsrKyBiL1VlZmlDcHVQa2cvTGlicmFyeS9SZWdpc3RlckNwdUZlYXR1cmVzTGliL1JlZ2lzdGVy Q3B1RmVhdHVyZXNMaWIuYw0KPiBAQCAtNDg4LDYgKzQ4OCw5NiBAQCBSZWdpc3RlckNwdUZlYXR1 cmUgKA0KPiAgICByZXR1cm4gUkVUVVJOX1NVQ0NFU1M7DQo+ICB9DQo+IA0KPiArLyoqDQo+ICsg IEFsbG9jYXRlcyBBQ1BJIE5WUyBtZW1vcnkgdG8gc2F2ZSBBQ1BJX0NQVV9EQVRBLg0KPiArDQo+ ICsgIEByZXR1cm4gIFBvaW50ZXIgdG8gYWxsb2NhdGVkIEFDUElfQ1BVX0RBVEEuDQo+ICsqKi8N Cj4gK0FDUElfQ1BVX0RBVEEgKg0KPiArQWxsb2NhdGVBY3BpQ3B1RGF0YSAoDQo+ICsgIFZPSUQN Cj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAg U3RhdHVzOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVy T2ZDcHVzOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVy T2ZFbmFibGVkUHJvY2Vzc29yczsNCj4gKyAgQUNQSV9DUFVfREFUQSAgICAgICAgICAgICAgICAg ICAgICAgICpBY3BpQ3B1RGF0YTsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFRhYmxlU2l6ZTsNCj4gKyAgQ1BVX1JFR0lTVEVSX1RBQkxFICAgICAgICAgICAgICAg ICAgICpSZWdpc3RlclRhYmxlOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgSW5kZXg7DQo+ICsgIEVGSV9QUk9DRVNTT1JfSU5GT1JNQVRJT04gICAgICAgICAgICBQ cm9jZXNzb3JJbmZvQnVmZmVyOw0KPiArDQo+ICsgIEFjcGlDcHVEYXRhICA9IEFsbG9jYXRlUGFn ZXMgKEVGSV9TSVpFX1RPX1BBR0VTIChzaXplb2YNCj4gKyAoQUNQSV9DUFVfREFUQSkpKTsgIEFT U0VSVCAoQWNwaUNwdURhdGEgIT0gTlVMTCk7DQo+ICsNCj4gKyAgR2V0TnVtYmVyT2ZQcm9jZXNz b3IgKCZOdW1iZXJPZkNwdXMsICZOdW1iZXJPZkVuYWJsZWRQcm9jZXNzb3JzKTsNCj4gKyBBY3Bp Q3B1RGF0YS0+TnVtYmVyT2ZDcHVzID0gKFVJTlQzMikgTnVtYmVyT2ZDcHVzOw0KPiArDQo+ICsg IC8vDQo+ICsgIC8vIEFsbG9jYXRlIGJ1ZmZlciBmb3IgZW1wdHkgUmVnaXN0ZXJUYWJsZSBhbmQN Cj4gKyBQcmVTbW1Jbml0UmVnaXN0ZXJUYWJsZSBmb3IgYWxsIENQVXMgIC8vICBUYWJsZVNpemUg PSAyICogTnVtYmVyT2ZDcHVzDQo+ICsgKiBzaXplb2YgKENQVV9SRUdJU1RFUl9UQUJMRSk7ICBS ZWdpc3RlclRhYmxlICA9IEFsbG9jYXRlUGFnZXMNCj4gKyAoRUZJX1NJWkVfVE9fUEFHRVMgKFRh YmxlU2l6ZSkpOyAgQVNTRVJUIChSZWdpc3RlclRhYmxlICE9IE5VTEwpOw0KPiArDQo+ICsgIGZv ciAoSW5kZXggPSAwOyBJbmRleCA8IE51bWJlck9mQ3B1czsgSW5kZXgrKykgew0KPiArICAgIFN0 YXR1cyA9IEdldFByb2Nlc3NvckluZm9ybWF0aW9uIChJbmRleCwgJlByb2Nlc3NvckluZm9CdWZm ZXIpOw0KPiArICAgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ICsNCj4gKyAgICBSZWdp c3RlclRhYmxlW0luZGV4XS5Jbml0aWFsQXBpY0lkICAgICAgPQ0KPiAoVUlOVDMyKVByb2Nlc3Nv ckluZm9CdWZmZXIuUHJvY2Vzc29ySWQ7DQo+ICsgICAgUmVnaXN0ZXJUYWJsZVtJbmRleF0uVGFi bGVMZW5ndGggICAgICAgID0gMDsNCj4gKyAgICBSZWdpc3RlclRhYmxlW0luZGV4XS5BbGxvY2F0 ZWRTaXplICAgICAgPSAwOw0KPiArICAgIFJlZ2lzdGVyVGFibGVbSW5kZXhdLlJlZ2lzdGVyVGFi bGVFbnRyeSA9IDA7DQo+ICsNCj4gKyAgICBSZWdpc3RlclRhYmxlW051bWJlck9mQ3B1cyArIElu ZGV4XS5Jbml0aWFsQXBpY0lkICAgICAgPQ0KPiAoVUlOVDMyKVByb2Nlc3NvckluZm9CdWZmZXIu UHJvY2Vzc29ySWQ7DQo+ICsgICAgUmVnaXN0ZXJUYWJsZVtOdW1iZXJPZkNwdXMgKyBJbmRleF0u VGFibGVMZW5ndGggICAgICAgID0gMDsNCj4gKyAgICBSZWdpc3RlclRhYmxlW051bWJlck9mQ3B1 cyArIEluZGV4XS5BbGxvY2F0ZWRTaXplICAgICAgPSAwOw0KPiArICAgIFJlZ2lzdGVyVGFibGVb TnVtYmVyT2ZDcHVzICsgSW5kZXhdLlJlZ2lzdGVyVGFibGVFbnRyeSA9IDA7ICB9DQo+ICsgIEFj cGlDcHVEYXRhLT5SZWdpc3RlclRhYmxlICAgICAgICAgICA9IChFRklfUEhZU0lDQUxfQUREUkVT UykoVUlOVE4pDQo+IFJlZ2lzdGVyVGFibGU7DQo+ICsgIEFjcGlDcHVEYXRhLT5QcmVTbW1Jbml0 UmVnaXN0ZXJUYWJsZSA9IChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4pDQo+ICsgKFJlZ2lz dGVyVGFibGUgKyBOdW1iZXJPZkNwdXMpOw0KPiArDQo+ICsgIHJldHVybiBBY3BpQ3B1RGF0YTsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEVubGFyZ2VzIENQVSByZWdpc3RlciB0YWJsZSBmb3Ig ZWFjaCBwcm9jZXNzb3IuDQo+ICsNCj4gKyAgQHBhcmFtW2luLCBvdXRdICBSZWdpc3RlclRhYmxl ICAgUG9pbnRlciBwcm9jZXNzb3IncyBDUFUgcmVnaXN0ZXIgdGFibGUNCj4gKyoqLw0KPiArVk9J RA0KPiArRW5sYXJnZVJlZ2lzdGVyVGFibGUgKA0KPiArICBJTiBPVVQgQ1BVX1JFR0lTVEVSX1RB QkxFICAgICAgICAgICAgKlJlZ2lzdGVyVGFibGUNCj4gKyAgKQ0KPiArew0KPiArICBFRklfUEhZ U0lDQUxfQUREUkVTUyAgQWRkcmVzczsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgIFVzZWRQ YWdlczsNCj4gKw0KPiArICBVc2VkUGFnZXMgPSBSZWdpc3RlclRhYmxlLT5BbGxvY2F0ZWRTaXpl IC8gRUZJX1BBR0VfU0laRTsgIEFkZHJlc3MgID0NCj4gKyAoVUlOVE4pIEFsbG9jYXRlUGFnZXMg KFVzZWRQYWdlcyArIDEpOyAgQVNTRVJUIChBZGRyZXNzICE9IDApOw0KPiArDQo+ICsgIC8vDQo+ ICsgIC8vIElmIHRoZXJlIGFyZSByZWNvcmRzIGV4aXN0aW5nIGluIHRoZSByZWdpc3RlciB0YWJs ZSwgdGhlbiBjb3B5IGl0cw0KPiArIGNvbnRlbnRzICAvLyB0byBuZXcgcmVnaW9uIGFuZCBmcmVl IHRoZSBvbGQgb25lLg0KPiArICAvLw0KPiArICBpZiAoUmVnaXN0ZXJUYWJsZS0+QWxsb2NhdGVk U2l6ZSA+IDApIHsNCj4gKyAgICBDb3B5TWVtICgNCj4gKyAgICAgIChWT0lEICopIChVSU5UTikg QWRkcmVzcywNCj4gKyAgICAgIChWT0lEICopIChVSU5UTikgUmVnaXN0ZXJUYWJsZS0+UmVnaXN0 ZXJUYWJsZUVudHJ5LA0KPiArICAgICAgUmVnaXN0ZXJUYWJsZS0+QWxsb2NhdGVkU2l6ZQ0KPiAr ICAgICAgKTsNCj4gKw0KPiArICAgIEZyZWVQYWdlcyAoKFZPSUQgKikgKFVJTlROKSBSZWdpc3Rl clRhYmxlLT5SZWdpc3RlclRhYmxlRW50cnksDQo+ICsgVXNlZFBhZ2VzKTsgIH0NCj4gKw0KPiAr ICAvLw0KPiArICAvLyBBZGp1c3QgdGhlIGFsbG9jYXRlZCBzaXplIGFuZCByZWdpc3RlciB0YWJs ZSBiYXNlIGFkZHJlc3MuDQo+ICsgIC8vDQo+ICsgIFJlZ2lzdGVyVGFibGUtPkFsbG9jYXRlZFNp emUgICAgICs9IEVGSV9QQUdFX1NJWkU7DQo+ICsgIFJlZ2lzdGVyVGFibGUtPlJlZ2lzdGVyVGFi bGVFbnRyeSA9IEFkZHJlc3M7IH0NCj4gKw0KPiAgLyoqDQo+ICAgIEFkZCBhbiBlbnRyeSBpbiBz cGVjaWZpZWQgcmVnaXN0ZXIgdGFibGUuDQo+IA0KPiAtLQ0KPiAyLjE1LjAud2luZG93cy4xDQo+ IA0KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KPiBl ZGsyLWRldmVsIG1haWxpbmcgbGlzdA0KPiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KPiBodHRw czovL2xpc3RzLjAxLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2VkazItZGV2ZWwNCg==