From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mx.groups.io with SMTP id smtpd.web11.1720.1684975612508034424 for ; Wed, 24 May 2023 17:46:53 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=Ni78s4Ub; spf=pass (domain: intel.com, ip: 192.55.52.93, mailfrom: ray.ni@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1684975612; x=1716511612; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=GXiRNjQtZg14IbhicW/6hQmKiKqX1ogUfxXH4NF/6/0=; b=Ni78s4Ub1lxQR/8U06KMrX494EcRDxIxd8YfCNoN1EDkHzNiSAsnhKKw VLDIsGEojQuJide/UgdsJn2jvpIKl5iPyVKNqYH3hveSJQsWbZSLVu1ZP aX8rEen8GKHLb4iijwSvvDuvwgsB6Tn+1ZkkFO8XmFaOcYSs9pB1huSmE HPXj5EQwIz00/UIadTq/Cv6ym14GlyRqAtlkuc6LFs6jz4dhdJqV2BPi0 vCVACo5IU6HQyIo+KQ4pw+l+st5t33QgcvKXR0VgAVwoBiY2FTAuWyNdu JwT8RvCEacsiRI8qwewHE1Njs5QiGs8qMloC2Q1P++mbi8HcQchom6dtB g==; X-IronPort-AV: E=McAfee;i="6600,9927,10720"; a="351246211" X-IronPort-AV: E=Sophos;i="6.00,190,1681196400"; d="scan'208";a="351246211" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 May 2023 17:46:44 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10720"; a="737515767" X-IronPort-AV: E=Sophos;i="6.00,190,1681196400"; d="scan'208";a="737515767" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by orsmga001.jf.intel.com with ESMTP; 24 May 2023 17:46:42 -0700 Received: from orsmsx603.amr.corp.intel.com (10.22.229.16) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Wed, 24 May 2023 17:46:41 -0700 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23 via Frontend Transport; Wed, 24 May 2023 17:46:41 -0700 Received: from NAM02-BN1-obe.outbound.protection.outlook.com (104.47.51.45) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.23; Wed, 24 May 2023 17:46:41 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kBPuDL88y30TyZdhn/TXJpqNB3lYmIg/mbRxybadZ3WrJ+Mzi/5CuG5eY5U+Vb9Gx7tZtF0MoMkgEl2PiNKlcWbstR8sc3lP7+dewhJGPX+p+4uX4/mIEE2d2C19YhAyBqglk87ei+uBaT8K5FymJePoBz07vRN+Z6/atgVZYVckgnb6LjKtdO6eDbCqwsJ8Xh+/CtKRDMk5740wJQiAGjpZg8jDVhHQUEyt4FNFrFopZyOGev8D+zGNCAROYyKycPV0auu3v6zAVv9AHCsUZbYaXLfh7Z1UG3SJul+m5hK6R77Pv7hOBZRsqpiE7DyaL6ev9aPZDjjHGhP++Gqc2g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=GXiRNjQtZg14IbhicW/6hQmKiKqX1ogUfxXH4NF/6/0=; b=H9FhZN4q849CiMkhkpA+3zO4NsaYm90LgkVlH87qZ4LsSOq5VoFy4lS94lxgj2FI1NkAjn+mYDueBTG0254v+3E2oQZPFZT47BLCKYVHun8JzrjjFvqlDodriHgdFBX8Ycb6nINgOWdk0pv+IS2oy0k17c+eoqtTQXDiYjWjzmT9l5m2vMEMpOGEQ85try20/y4+jdfqaumB482xdY8jYZGUq7exUBQDmJZUEVAwmKZ73AZbwLNxmv6v2xmX1Iea+80nUrhIvRTJ3TglcTbivSRiHFMRceTIh0xBCkpMYAIW4/D56/4gf7NSufPNRCUlj3fo3Ee83zWP2d0GA7VHuA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from MN6PR11MB8244.namprd11.prod.outlook.com (2603:10b6:208:470::14) by MN6PR11MB8219.namprd11.prod.outlook.com (2603:10b6:208:471::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6411.28; Thu, 25 May 2023 00:46:39 +0000 Received: from MN6PR11MB8244.namprd11.prod.outlook.com ([fe80::892b:b8e6:bab7:635d]) by MN6PR11MB8244.namprd11.prod.outlook.com ([fe80::892b:b8e6:bab7:635d%5]) with mapi id 15.20.6411.028; Thu, 25 May 2023 00:46:39 +0000 From: "Ni, Ray" To: Kun Qin , "devel@edk2.groups.io" , "Tan, Dun" CC: "Dong, Eric" , "Kumar, Rahul R" , Gerd Hoffmann Subject: Re: [edk2-devel] [Patch V4 07/15] UefiCpuPkg/PiSmmCpuDxeSmm: Add 2 function to disable/enable CR0.WP Thread-Topic: [edk2-devel] [Patch V4 07/15] UefiCpuPkg/PiSmmCpuDxeSmm: Add 2 function to disable/enable CR0.WP Thread-Index: AQHZh91MGatpTlyfU0StU8Xn4AQfwa9ibd0AgAUwagCAAjAbAIAAZhEQ Date: Thu, 25 May 2023 00:46:38 +0000 Message-ID: References: <20230516095932.1525-1-dun.tan@intel.com> <20230516095932.1525-8-dun.tan@intel.com> <88ebdba4-c595-2b4e-885e-a0fef4beea2f@gmail.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MN6PR11MB8244:EE_|MN6PR11MB8219:EE_ x-ms-office365-filtering-correlation-id: a6c9cc4d-cf3c-47aa-6f04-08db5cb9800d x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: D67wbiVQrVW0a8VRuSre+dvmVvVczOrfBUdTC1u68meb+v+Qjgw9DYM9cPvfcQVrxu+3NQJLeeRzHcEdURwAeC6ficqD1PBF/jZyQVM5rKXdUDYNu9D02zqv2wpXKklEvRFne4+Z1mbv2Sd4v02BbJqB/LVwqfVWVWvzYovw63OADAawUseg/BqKmDka+g3xqqE9RlVmwoDD/3pjRQHd3Y3zEAeHCs34i1P/mJzL2Ct+c+5JIjZrRM2H5NNB/Hbme6KzSTtStYxZy6fD72CvTd0XWqEohMqlZblhgW9/MchGmT71PAvTTYu2nqjN4m209i3sIjc3JWvtNd46vDSFpL02oi7iRVSZiUTLL7aKHQP9UZbvwRAO8SURYl0AyBxnr3cYE72M0nYsKP1a549kIRBrXmfAFRyOR4RsfrzglHqlI/n2cZEFqYzzhuxb3hhMS015BDgqVhIZBL5sMfZU7DxIyJeE5Egz3Lnoh9enHiVTCyRw3iRJunW1nhTzcfo5kjgeNUOzBt9fisW2e7MoDQONqtZSfVg4P/EFLeZQs93oJI161W3Z3RzKV4Jt8TGIFiokwgbP2H50byOqNvVdYvWBAmFYCTk5nSEi6kntvA0rclrmLkpBIH3V9UYxWxHLywO4RnLHBtUhT7dwoOgbXg== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN6PR11MB8244.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(6029001)(39860400002)(376002)(346002)(136003)(396003)(366004)(451199021)(55016003)(33656002)(30864003)(6506007)(82960400001)(122000001)(53546011)(9686003)(26005)(38100700002)(2906002)(186003)(83380400001)(316002)(71200400001)(64756008)(66946007)(86362001)(66446008)(66556008)(66476007)(76116006)(6636002)(4326008)(966005)(41300700001)(7696005)(54906003)(478600001)(110136005)(8936002)(8676002)(38070700005)(5660300002)(66899021)(52536014);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?cmUvejdsVnlsaEFtSEFOUE0wYWpoemN6dkJ5VkU4YzlXb09ndzVFUU5zWlJW?= =?utf-8?B?QU02UUhObWZKYVNBemhPbFlwbFBkeG9kUkhSZ2hrYWVKVmQxMzFBamZuQ00x?= =?utf-8?B?VlozTnllUlJCcmNGeWRxOVNOeEYvTEwybWl0bUpmMzE2N0o4Q1k3UERHQjJ3?= =?utf-8?B?eHoxbHF6dEV1VkRzZWRGbUNMN21JdlVlR1F1Z01NaGE0aWZvMmNFL2JBRHZF?= =?utf-8?B?b0dZQUl5WXEvR2p4aWhhamdILzVieUR3dFQrL1U2TUZUTWUvMW9OMTBidmYz?= =?utf-8?B?b3AxQVZISHdEbmxUMktVd3FWenNiUURodUsvTjVjWndGN1l5RXIxMGQyNkNK?= =?utf-8?B?ei8xbkxvYVQwVW5vZWVvZ0l1V2p1d20vaFVrUWswWWhpeG0wS3VOa2c5YXl4?= =?utf-8?B?c3QxL2FvcUlKNTlmU09FQUJJc0NiQ3lia3pRVU9EazQ3ZXpkbHczak42eTBW?= =?utf-8?B?V2ExbkRjNm0zZ25ocGlNaE90QUxNdGd3cVNwdm9BTUpKWnZSTlhLa0k4TFBh?= =?utf-8?B?MStwTS82SXFaUkNDbTZBcUh6S21MNk5WRzZzSzVBVURIWmFEVXNrOGFPT0xQ?= =?utf-8?B?UlduWWYzRG5TVmw0MXUyZGVYWnZHMDdOQ3lWenpoQUk2WUNhNFBQNWVxYlRp?= =?utf-8?B?VVlmaHVyTnZ1THlXY2FKV2dSWUNHM0wxU3AvUkYrNmNqVjVSeVVlbllweXdh?= =?utf-8?B?R0VqUkNyU01udnNtRVFmRjQwTGFibnBhNFBZSFZIN2FZQUJwa3J6bWUyanln?= =?utf-8?B?c1p5ZVhpVFdhTGI3Tkc4bTlWNXh0MDZISVI4TktsaldveHdaLzhybUJ2TjZ0?= =?utf-8?B?b2x5bHZqSFZRR2tFTHlFSC9CQi9ReS9jUTgrZzVaV240aWxGaWpVM2phRmQ0?= =?utf-8?B?TXZrV2N1T2t3S2xRMWpLSHhqcnBqbEszRTdBNmpPR1ZkZXdkZHZSUnBqUVpV?= =?utf-8?B?S2ErNnZSMWtPN3VHRWV1SCtDUTluWlk0L09TdUs1YWQvVDY5SUZVZ2c3dnFt?= =?utf-8?B?WU9LY1JNVEozclhYT0R4NDdxV08za1I4djNVOG5BRUUxRTRuRDF5clhlZll3?= =?utf-8?B?Zi91Mkdqb2luVHoreVFVUWpuVHdxaDJhbWllWFpkK2Z2Vi9GaWZ0ZjFFNjNG?= =?utf-8?B?ZlVzUlp1eHJjQVJIL1NNWWRQMnFuTDBsM0tYOTlwZXQyNkxic0FxRUhLZUJ4?= =?utf-8?B?R1NLRFB3QzlsVG9ydnhESFNrMXY1ekZKT29NeE1OZ2lYWHdISGErU3FmVFlt?= =?utf-8?B?cnZ5MVN2cFhFUnBZQXl0WHRZY3dRWVdISllwMTBQOU9yRDQyRnNTeStrMUZr?= =?utf-8?B?aVZ4TlVDcXcxdloyZlpsVHFabm1yQTFPWGRHT2J5cWV0OE9Rc0w2WWJzMnVL?= =?utf-8?B?c2dKbmFjZlZQZ3hJYjNyWmp3V2hQRUM0Nk9ONWpGc2xpRStuOFpJbHNmeGlm?= =?utf-8?B?QTFYWmdRS1J6VGN6NG04b1M3ZGdORzA4eklFWUpUMVJ6dGRnaTh2UE9VVXlU?= =?utf-8?B?dEdDSW94a0NoTXlxWVBBaFAvU2N3aEQxc0RiTklVaDZoeUJYYUZPVEFPRUtz?= =?utf-8?B?TW5adzVxd0k2QW1ZYVlmSmd0MU9seG04MUZoYWRENnRwTnZXY21EeTU2UVlv?= =?utf-8?B?VU1TdkE3Sk1CckRyWDg5Z3c2UjRFR21HQStjVHVxa2VHS1ZTZFE2RnhoR3Qz?= =?utf-8?B?YlA3YzBzeGdlSUM3cFpoamMyNzZQWFVpNHU2dmRWaUszVFZvTzRkTkxzdnU0?= =?utf-8?B?ZVROVGk1Y3RTZU0vd3o4V1RUOG50TlVNSThTSEpiT2lZRnltQk1aUy93VEdE?= =?utf-8?B?cG9GNDlqSi8rdlMraEtLd2swckljL1ZhcEo4NWx3cmYra0krdEE4V3VuRWg1?= =?utf-8?B?c1BKZFpWQlJ1NEtJQWZleFBIcEJqQXU1NzZ3TzZyaDcrNGlPWEtvamk0OWd4?= =?utf-8?B?Y0kzQXVQTXNmNHo5d3NCTXo0VlIxbk1VZ2VmNUNpQlFrTUZtTmFBQzNodlZs?= =?utf-8?B?aUJxTHhCajB6dzhiTis3UXdnOWZ3NCtvcUptYWc0RCs4Nnp6elBhSHFzMTlt?= =?utf-8?B?WGVMWWJsY2d5eW5uYTdrRTd4djhXa2FNdFVTMmlYeVBKWXdOZjkrMlZHRDlU?= =?utf-8?Q?xNOo=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN6PR11MB8244.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a6c9cc4d-cf3c-47aa-6f04-08db5cb9800d X-MS-Exchange-CrossTenant-originalarrivaltime: 25 May 2023 00:46:38.9532 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: YYchXbyyVGQKTx+eDql7DT7guSow45Nuiunyg2YafuL+VbwoGOqARDRi+u1ylRS4CIIw2B+9HgxORCIa5wX7ug== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN6PR11MB8219 Return-Path: ray.ni@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 S3VuLA0KVGhhbmtzIGZvciByYWlzaW5nIHRoYXQgdXDwn5iKDQoNCldlIGhhdmUgc29tZSBpZGVh cy4gV2lsbCBwb3N0IHRoZW0gbGF0ZXIuDQpMb29raW5nIGZvcndhcmQgdG8gd29yayB3aXRoIGNv bW11bml0eSB0b2dldGhlci4NCg0KVGhhbmtzLA0KUmF5DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNz YWdlLS0tLS0NCj4gRnJvbTogS3VuIFFpbiA8a3VxaW4xMkBnbWFpbC5jb20+DQo+IFNlbnQ6IFRo dXJzZGF5LCBNYXkgMjUsIDIwMjMgMjozOSBBTQ0KPiBUbzogZGV2ZWxAZWRrMi5ncm91cHMuaW87 IFRhbiwgRHVuIDxkdW4udGFuQGludGVsLmNvbT4NCj4gQ2M6IERvbmcsIEVyaWMgPGVyaWMuZG9u Z0BpbnRlbC5jb20+OyBOaSwgUmF5IDxyYXkubmlAaW50ZWwuY29tPjsgS3VtYXIsDQo+IFJhaHVs IFIgPHJhaHVsLnIua3VtYXJAaW50ZWwuY29tPjsgR2VyZCBIb2ZmbWFubiA8a3JheGVsQHJlZGhh dC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbZWRrMi1kZXZlbF0gW1BhdGNoIFY0IDA3LzE1XSBVZWZp Q3B1UGtnL1BpU21tQ3B1RHhlU21tOg0KPiBBZGQgMiBmdW5jdGlvbiB0byBkaXNhYmxlL2VuYWJs ZSBDUjAuV1ANCj4gDQo+IEhpIER1biwNCj4gDQo+IFRoYW5rcyBmb3IgeW91ciByZXBseS4gVGhh dCB3YXMgaGVscGZ1bCENCj4gDQo+IEp1c3QgYSBmb2xsb3ctdXAgcXVlc3Rpb24sIGlzIHRoZXJl IGFueSBwbGFuIHRvIHN1cHBvcnQgaGVhcCBndWFyZCB3aXRoDQo+IFBjZENwdVNtbVJlc3RyaWN0 ZWRNZW1vcnlBY2Nlc3MgZW5hYmxlZCBhZnRlciB0aGVzZSBjaGFuZ2VzPyBJIHRoaW5rIGl0DQo+ IHdvdWxkIGJlIGEgZ3JlYXQgdmFsdWUgcHJvcCBmb3IgdGhlIGRldmVsb3BlcnMgdG8gaGF2ZSBi b3RoIGZlYXR1cmVzDQo+IGVuYWJsZWQgZHVyaW5nIGZpcm13YXJlIHZhbGlkYXRpb24gcHJvY2Vz cy4NCj4gDQo+IFRoYW5rcywNCj4gS3VuDQo+IA0KPiBPbiA1LzIzLzIwMjMgMjoxNCBBTSwgZHVu dGFuIHdyb3RlOg0KPiA+IEhpIEt1biwNCj4gPg0KPiA+IEkndmUgdXBkYXRlZCBteSBhbnN3ZXJz IGluIHlvdXIgb3JpZ2luYWwgbWFpbC4NCj4gPg0KPiA+IFRoYW5rcywNCj4gPiBEdW4NCj4gPg0K PiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gRnJvbTogS3VuIFFpbiA8a3VxaW4x MkBnbWFpbC5jb20+DQo+ID4gU2VudDogU2F0dXJkYXksIE1heSAyMCwgMjAyMyAxMDowMCBBTQ0K PiA+IFRvOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbzsgVGFuLCBEdW4gPGR1bi50YW5AaW50ZWwuY29t Pg0KPiA+IENjOiBEb25nLCBFcmljIDxlcmljLmRvbmdAaW50ZWwuY29tPjsgTmksIFJheSA8cmF5 Lm5pQGludGVsLmNvbT47IEt1bWFyLA0KPiBSYWh1bCBSIDxyYWh1bC5yLmt1bWFyQGludGVsLmNv bT47IEdlcmQgSG9mZm1hbm4gPGtyYXhlbEByZWRoYXQuY29tPg0KPiA+IFN1YmplY3Q6IFJlOiBb ZWRrMi1kZXZlbF0gW1BhdGNoIFY0IDA3LzE1XQ0KPiBVZWZpQ3B1UGtnL1BpU21tQ3B1RHhlU21t OiBBZGQgMiBmdW5jdGlvbiB0byBkaXNhYmxlL2VuYWJsZSBDUjAuV1ANCj4gPg0KPiA+IEhpIER1 biwNCj4gPg0KPiA+IFRoYW5rcyBmb3IgdGhlIG5vdGljZSBvbiB0aGUgb3RoZXIgdGhyZWFkICh2 NCAwNC8xNSkuDQo+ID4NCj4gPiBJIGhhdmUgYSBmZXcgbW9yZSBxdWVzdGlvbnMgb24gdGhpcyBz cGVjaWZpYyBwYXRjaCAoYW5kIGEgZmV3IGFzc29jaWF0ZWQNCj4gY29tbWl0cyByZWxhdGVkIHRv IGl0KToNCj4gPg0KPiA+IFdoeSB3b3VsZCB3ZSBhbGxvdyBwYWdlIHRhYmxlIG1hbmlwdWxhdGlv biBhZnRlciBgbUlzUmVhZE9ubHlQYWdlVGFibGVgDQo+IGlzIGV2YWx1YXRlZCB0byBUUlVFPw0K PiA+IER1bjogYG1Jc1JlYWRPbmx5UGFnZVRhYmxlYCBpcyBhIGZsYWcgdG8gaW5kaWNhdGUgdGhh dCBjdXJyZW50IHBhZ2UgdGFibGUgaGFzDQo+IGJlZW4gbWFya2VkIGFzIFJPIGFuZCB0aGUgbmV3 IGFsbG9jYXRlZCBwb29sIHNob3VsZCBhbHNvIGJlIFJPLiBXZSBvbmx5DQo+IG5lZWQgdG8gY2xl YXIgQ3IwLldQIGJlZm9yZSBtb2RpZnkgcGFnZSB0YWJsZS4NCj4gPg0KPiA+DQo+ID4gQXMgZmFy IGFzIEkgY2FuIHRlbGwsIGBtSXNSZWFkT25seVBhZ2VUYWJsZWAgaXMgc2V0IHRvIFRSVUUgaW5z aWRlDQo+IGBTZXRQYWdlVGFibGVBdHRyaWJ1dGVzYCBmdW5jdGlvbiwgYnV0IHRoZW4gd2UgYWxz byBoYXZlIGNvZGUgaW4NCj4gYEluaXRpYWxpemVQYWdlVGFibGVQb29sYCB0byBleHBlY3QgbW9y ZSBwYWdlIHRhYmxlcyB0byBiZSBhbGxvY2F0ZWQuDQo+ID4gQ291bGQgeW91IHBsZWFzZSBsZXQg bWUgd2hlbiB0aGlzIHdvdWxkIGhhcHBlbj8NCj4gPiBEdW46IEFmdGVyIGBTZXRQYWdlVGFibGVB dHRyaWJ1dGVzYCwgaW4NCj4gJ1NtbUNwdUZlYXR1cmVzQ29tcGxldGVTbW1SZWFkeVRvTG9jaygp JyBBUEkgb2YgZGlmZmVyZW50IHBsYXRmb3JtDQo+IFNtbUNwdUZlYXR1cmVzTGliLCBFREtJSV9T TU1fTUVNT1JZX0FUVFJJQlVURV9QUk9UT0NPTCBtYXkgYmUNCj4gdXNlZCB0byBjb252ZXJ0IG1l bW9yeSBhdHRyaWJ1dGUuIEFsc28sIGluIFNNSSBoYW5kbGVyIGFmdGVyIFJlYWR5VG9Mb2NrLA0K PiBFREtJSV9TTU1fTUVNT1JZX0FUVFJJQlVURV9QUk9UT0NPTCBzdGlsbCBtYXkgYmUgdXNlZCB0 byBjb252ZXJ0DQo+IG1lbW9yeSBhdHRyaWJ1dGUuIER1cmluZyB0aGlzIHByb2Nlc3MsIGlmIHBh Z2Ugc3BsaXQgaGFwcGVucywgbmV3IHBhZ2UgdGFibGUNCj4gcG9vbCBtYXkgYmUgYWxsb2NhdGVk Lg0KPiA+DQo+ID4NCj4gPiBJIHRob3VnaHQgdGhlcmUgd291bGQgbm90IGJlIGFueSBuZXcgcGFn ZSB0YWJsZSBtZW1vcnkgKGkuZS4gbWVtb3J5DQo+IGF0dHJpYnV0ZSB1cGRhdGUpIGFmdGVyIHJl YWR5IHRvIGxvY2sgd2l0aCByZXN0cmljdGVkIG1lbW9yeSBhY2Nlc3Mgb3B0aW9uPw0KPiBXaXRo IHRoZXNlIGNoYW5nZSwgaXQgc2VlbXMgdG8gYmUgZG9hYmxlIHRocm91Z2gNCj4gRURLSUlfU01N X01FTU9SWV9BVFRSSUJVVEVfUFJPVE9DT0wgbm93LCBpcyB0aGF0IGNvcnJlY3Q/IElmIHNvLA0K PiB3b3VsZCB5b3UgbWluZCBzaGVkZGluZyBzb21lIGxpZ2h0IG9uIHdoYXQgb3RoZXIgYmVoYXZp b3IgY2hhbmdlcyB0aGVyZQ0KPiBtaWdodCBiZT8NCj4gPiBEdW46IERvIHlvdSBtZWFuIHRoYXQg d2Ugc2hvdWxkIGNoZWNrIGlmIFJlYWR5VG9Mb2NrIGluDQo+IEVES0lJX1NNTV9NRU1PUllfQVRU UklCVVRFX1BST1RPQ09MIGltcGxlbWVudGF0aW9uIHRvIG1ha2Ugc3VyZQ0KPiB0aGF0IHBhZ2Ug dGFibGUgd29uJ3QgYmUgbW9kaWZpZWQgYWZ0ZXIgUmVhZHlUb0xvY2s/DQo+ID4gSWYgaXMsIGFz IEkgbWVudGlvbmVkIGFib3ZlLCBwYWdlIHRhYmxlIHN0aWxsIG1heSBiZSBtb2RpZmllZCBhZnRl cg0KPiBSZWFkeVRvTG9jay4NCj4gPg0KPiA+DQo+ID4gSW4gYWRkaXRpb24sIEkgbWlnaHQgbWlz cyBpdCBpbiB0aGUgcGF0Y2ggc2VyaWVzLiBJZiB0aGUgbmV3bHkgYWxsb2NhdGVkIHBhZ2UNCj4g bWVtb3J5IGlzIG1hcmtlZCBhcyByZWFkIG9ubHkgYWZ0ZXIgdGhlIGFib3ZlIGZsYWcgaXMgc2V0 IHRvIFRSVUUsIGhvdyB3b3VsZA0KPiB0aGUgY2FsbGVycyBhYmxlIHRvIHVzZSB0aGVtPw0KPiA+ IER1bjogQ2FsbGVyIGNhbiBjbGVhciB0aGUgQ3IwLldQIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHBh Z2UgdGFibGUuDQo+ID4NCj4gPg0KPiA+IFRoYW5rcyBpbiBhZHZhbmNlLg0KPiA+DQo+ID4gUmVn YXJkcywNCj4gPiBLdW4NCj4gPg0KPiA+IE9uIDUvMTYvMjAyMyAyOjU5IEFNLCBkdW50YW4gd3Jv dGU6DQo+ID4+IEFkZCB0d28gZnVuY3Rpb25zIHRvIGRpc2FibGUvZW5hYmxlIENSMC5XUC4gVGhl c2UgdHdvIHVuY3Rpb25zIHdpbGwNCj4gPj4gYWxzbyBiZSB1c2VkIGluIGxhdGVyIGNvbW1pdHMu IFRoaXMgY29tbWl0IGRvZXNuJ3QgY2hhbmdlIGFueQ0KPiA+PiBmdW5jdGlvbmFsaXR5Lg0KPiA+ Pg0KPiA+PiBTaWduZWQtb2ZmLWJ5OiBEdW4gVGFuIDxkdW4udGFuQGludGVsLmNvbT4NCj4gPj4g Q2M6IEVyaWMgRG9uZyA8ZXJpYy5kb25nQGludGVsLmNvbT4NCj4gPj4gQ2M6IFJheSBOaSA8cmF5 Lm5pQGludGVsLmNvbT4NCj4gPj4gQ2M6IFJhaHVsIEt1bWFyIDxyYWh1bDEua3VtYXJAaW50ZWwu Y29tPg0KPiA+PiBDYzogR2VyZCBIb2ZmbWFubiA8a3JheGVsQHJlZGhhdC5jb20+DQo+ID4+IC0t LQ0KPiA+PiAgICBVZWZpQ3B1UGtnL1BpU21tQ3B1RHhlU21tL1BpU21tQ3B1RHhlU21tLmggICAg ICAgICB8ICAyNA0KPiArKysrKysrKysrKysrKysrKysrKysrKysNCj4gPj4gICAgVWVmaUNwdVBr Zy9QaVNtbUNwdUR4ZVNtbS9TbW1DcHVNZW1vcnlNYW5hZ2VtZW50LmMgfCAxMTUNCj4gKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiAr KysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N Cj4gPj4gICAgMiBmaWxlcyBjaGFuZ2VkLCA5MCBpbnNlcnRpb25zKCspLCA0OSBkZWxldGlvbnMo LSkNCj4gPj4NCj4gPj4gZGlmZiAtLWdpdCBhL1VlZmlDcHVQa2cvUGlTbW1DcHVEeGVTbW0vUGlT bW1DcHVEeGVTbW0uaA0KPiA+PiBiL1VlZmlDcHVQa2cvUGlTbW1DcHVEeGVTbW0vUGlTbW1DcHVE eGVTbW0uaA0KPiA+PiBpbmRleCBiYTM0MWNhZGM2Li5lMGM0Y2E3NmRjIDEwMDY0NA0KPiA+PiAt LS0gYS9VZWZpQ3B1UGtnL1BpU21tQ3B1RHhlU21tL1BpU21tQ3B1RHhlU21tLmgNCj4gPj4gKysr IGIvVWVmaUNwdVBrZy9QaVNtbUNwdUR4ZVNtbS9QaVNtbUNwdUR4ZVNtbS5oDQo+ID4+IEBAIC0x NTY1LDQgKzE1NjUsMjggQEAgU21tV2FpdEZvckFwQXJyaXZhbCAoDQo+ID4+ICAgICAgVk9JRA0K PiA+PiAgICAgICk7DQo+ID4+DQo+ID4+ICsvKioNCj4gPj4gKyAgRGlzYWJsZSBXcml0ZSBQcm90 ZWN0IG9uIHBhZ2VzIG1hcmtlZCBhcyByZWFkLW9ubHkgaWYgQ3IwLkJpdHMuV1AgaXMgMS4NCj4g Pj4gKw0KPiA+PiArICBAcGFyYW1bb3V0XSAgV3BFbmFibGVkICAgICAgSWYgQ3IwLldQIGlzIGVu YWJsZWQuDQo+ID4+ICsgIEBwYXJhbVtvdXRdICBDZXRFbmFibGVkICAgICBJZiBDRVQgaXMgZW5h YmxlZC4NCj4gPj4gKyoqLw0KPiA+PiArVk9JRA0KPiA+PiArRGlzYWJsZVJlYWRPbmx5UGFnZVdy aXRlUHJvdGVjdCAoDQo+ID4+ICsgIE9VVCBCT09MRUFOICAqV3BFbmFibGVkLA0KPiA+PiArICBP VVQgQk9PTEVBTiAgKkNldEVuYWJsZWQNCj4gPj4gKyAgKTsNCj4gPj4gKw0KPiA+PiArLyoqDQo+ ID4+ICsgIEVuYWJsZSBXcml0ZSBQcm90ZWN0IG9uIHBhZ2VzIG1hcmtlZCBhcyByZWFkLW9ubHku DQo+ID4+ICsNCj4gPj4gKyAgQHBhcmFtW291dF0gIFdwRW5hYmxlZCAgICAgIElmIENyMC5XUCBz aG91bGQgYmUgZW5hYmxlZC4NCj4gPj4gKyAgQHBhcmFtW291dF0gIENldEVuYWJsZWQgICAgIElm IENFVCBzaG91bGQgYmUgZW5hYmxlZC4NCj4gPj4gKyoqLw0KPiA+PiArVk9JRA0KPiA+PiArRW5h YmxlUmVhZE9ubHlQYWdlV3JpdGVQcm90ZWN0ICgNCj4gPj4gKyAgQk9PTEVBTiAgV3BFbmFibGVk LA0KPiA+PiArICBCT09MRUFOICBDZXRFbmFibGVkDQo+ID4+ICsgICk7DQo+ID4+ICsNCj4gPj4g ICAgI2VuZGlmDQo+ID4+IGRpZmYgLS1naXQNCj4gYS9VZWZpQ3B1UGtnL1BpU21tQ3B1RHhlU21t L1NtbUNwdU1lbW9yeU1hbmFnZW1lbnQuYw0KPiA+PiBiL1VlZmlDcHVQa2cvUGlTbW1DcHVEeGVT bW0vU21tQ3B1TWVtb3J5TWFuYWdlbWVudC5jDQo+ID4+IGluZGV4IDJmYWVlOGY4NTkuLjRiNTEy ZWRmNjggMTAwNjQ0DQo+ID4+IC0tLSBhL1VlZmlDcHVQa2cvUGlTbW1DcHVEeGVTbW0vU21tQ3B1 TWVtb3J5TWFuYWdlbWVudC5jDQo+ID4+ICsrKyBiL1VlZmlDcHVQa2cvUGlTbW1DcHVEeGVTbW0v U21tQ3B1TWVtb3J5TWFuYWdlbWVudC5jDQo+ID4+IEBAIC00MCw2ICs0MCw2NCBAQCBQQUdFX1RB QkxFX1BPT0wgICptUGFnZVRhYmxlUG9vbCA9IE5VTEw7DQo+ID4+ICAgIC8vDQo+ID4+ICAgIEJP T0xFQU4gIG1Jc1JlYWRPbmx5UGFnZVRhYmxlID0gRkFMU0U7DQo+ID4+DQo+ID4+ICsvKioNCj4g Pj4gKyAgRGlzYWJsZSBXcml0ZSBQcm90ZWN0IG9uIHBhZ2VzIG1hcmtlZCBhcyByZWFkLW9ubHkg aWYgQ3IwLkJpdHMuV1AgaXMgMS4NCj4gPj4gKw0KPiA+PiArICBAcGFyYW1bb3V0XSAgV3BFbmFi bGVkICAgICAgSWYgQ3IwLldQIGlzIGVuYWJsZWQuDQo+ID4+ICsgIEBwYXJhbVtvdXRdICBDZXRF bmFibGVkICAgICBJZiBDRVQgaXMgZW5hYmxlZC4NCj4gPj4gKyoqLw0KPiA+PiArVk9JRA0KPiA+ PiArRGlzYWJsZVJlYWRPbmx5UGFnZVdyaXRlUHJvdGVjdCAoDQo+ID4+ICsgIE9VVCBCT09MRUFO ICAqV3BFbmFibGVkLA0KPiA+PiArICBPVVQgQk9PTEVBTiAgKkNldEVuYWJsZWQNCj4gPj4gKyAg KQ0KPiA+PiArew0KPiA+PiArICBJQTMyX0NSMCAgQ3IwOw0KPiA+PiArDQo+ID4+ICsgICpDZXRF bmFibGVkID0gKChBc21SZWFkQ3I0ICgpICYgQ1I0X0NFVF9FTkFCTEUpICE9IDApID8gVFJVRSA6 DQo+IEZBTFNFOw0KPiA+PiArICBDcjAuVWludE4gICA9IEFzbVJlYWRDcjAgKCk7DQo+ID4+ICsg ICpXcEVuYWJsZWQgID0gKENyMC5CaXRzLldQICE9IDApID8gVFJVRSA6IEZBTFNFOyAgaWYgKCpX cEVuYWJsZWQpIHsNCj4gPj4gKyAgICBpZiAoKkNldEVuYWJsZWQpIHsNCj4gPj4gKyAgICAgIC8v DQo+ID4+ICsgICAgICAvLyBDRVQgbXVzdCBiZSBkaXNhYmxlZCBpZiBXUCBpcyBkaXNhYmxlZC4g RGlzYWJsZSBDRVQgYmVmb3JlIGNsZWFyaW5nDQo+IENSMC5XUC4NCj4gPj4gKyAgICAgIC8vDQo+ ID4+ICsgICAgICBEaXNhYmxlQ2V0ICgpOw0KPiA+PiArICAgIH0NCj4gPj4gKw0KPiA+PiArICAg IENyMC5CaXRzLldQID0gMDsNCj4gPj4gKyAgICBBc21Xcml0ZUNyMCAoQ3IwLlVpbnROKTsNCj4g Pj4gKyAgfQ0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICsvKioNCj4gPj4gKyAgRW5hYmxlIFdyaXRl IFByb3RlY3Qgb24gcGFnZXMgbWFya2VkIGFzIHJlYWQtb25seS4NCj4gPj4gKw0KPiA+PiArICBA cGFyYW1bb3V0XSAgV3BFbmFibGVkICAgICAgSWYgQ3IwLldQIHNob3VsZCBiZSBlbmFibGVkLg0K PiA+PiArICBAcGFyYW1bb3V0XSAgQ2V0RW5hYmxlZCAgICAgSWYgQ0VUIHNob3VsZCBiZSBlbmFi bGVkLg0KPiA+PiArKiovDQo+ID4+ICtWT0lEDQo+ID4+ICtFbmFibGVSZWFkT25seVBhZ2VXcml0 ZVByb3RlY3QgKA0KPiA+PiArICBCT09MRUFOICBXcEVuYWJsZWQsDQo+ID4+ICsgIEJPT0xFQU4g IENldEVuYWJsZWQNCj4gPj4gKyAgKQ0KPiA+PiArew0KPiA+PiArICBJQTMyX0NSMCAgQ3IwOw0K PiA+PiArDQo+ID4+ICsgIGlmIChXcEVuYWJsZWQpIHsNCj4gPj4gKyAgICBDcjAuVWludE4gICA9 IEFzbVJlYWRDcjAgKCk7DQo+ID4+ICsgICAgQ3IwLkJpdHMuV1AgPSAxOw0KPiA+PiArICAgIEFz bVdyaXRlQ3IwIChDcjAuVWludE4pOw0KPiA+PiArDQo+ID4+ICsgICAgaWYgKENldEVuYWJsZWQp IHsNCj4gPj4gKyAgICAgIC8vDQo+ID4+ICsgICAgICAvLyByZS1lbmFibGUgQ0VULg0KPiA+PiAr ICAgICAgLy8NCj4gPj4gKyAgICAgIEVuYWJsZUNldCAoKTsNCj4gPj4gKyAgICB9DQo+ID4+ICsg IH0NCj4gPj4gK30NCj4gPj4gKw0KPiA+PiAgICAvKioNCj4gPj4gICAgICBJbml0aWFsaXplIGEg YnVmZmVyIHBvb2wgZm9yIHBhZ2UgdGFibGUgdXNlIG9ubHkuDQo+ID4+DQo+ID4+IEBAIC02Miwx MCArMTIwLDkgQEAgSW5pdGlhbGl6ZVBhZ2VUYWJsZVBvb2wgKA0KPiA+PiAgICAgIElOIFVJTlRO ICBQb29sUGFnZXMNCj4gPj4gICAgICApDQo+ID4+ICAgIHsNCj4gPj4gLSAgVk9JRCAgICAgICpC dWZmZXI7DQo+ID4+IC0gIEJPT0xFQU4gICBDZXRFbmFibGVkOw0KPiA+PiAtICBCT09MRUFOICAg V3BFbmFibGVkOw0KPiA+PiAtICBJQTMyX0NSMCAgQ3IwOw0KPiA+PiArICBWT0lEICAgICAqQnVm ZmVyOw0KPiA+PiArICBCT09MRUFOICBXcEVuYWJsZWQ7DQo+ID4+ICsgIEJPT0xFQU4gIENldEVu YWJsZWQ7DQo+ID4+DQo+ID4+ICAgICAgLy8NCj4gPj4gICAgICAvLyBBbHdheXMgcmVzZXJ2ZSBh dCBsZWFzdCBQQUdFX1RBQkxFX1BPT0xfVU5JVF9QQUdFUywgaW5jbHVkaW5nDQo+ID4+IG9uZSBw YWdlIGZvciBAQCAtMTAyLDM0ICsxNTksOSBAQCBJbml0aWFsaXplUGFnZVRhYmxlUG9vbCAoDQo+ ID4+ICAgICAgLy8gSWYgcGFnZSB0YWJsZSBtZW1vcnkgaGFzIGJlZW4gbWFya2VkIGFzIFJPLCBt YXJrIHRoZSBuZXcgcG9vbA0KPiBwYWdlcyBhcyByZWFkLW9ubHkuDQo+ID4+ICAgICAgLy8NCj4g Pj4gICAgICBpZiAobUlzUmVhZE9ubHlQYWdlVGFibGUpIHsNCj4gPj4gLSAgICBDZXRFbmFibGVk ID0gKChBc21SZWFkQ3I0ICgpICYgQ1I0X0NFVF9FTkFCTEUpICE9IDApID8gVFJVRSA6IEZBTFNF Ow0KPiA+PiAtICAgIENyMC5VaW50TiAgPSBBc21SZWFkQ3IwICgpOw0KPiA+PiAtICAgIFdwRW5h YmxlZCAgPSAoQ3IwLkJpdHMuV1AgIT0gMCkgPyBUUlVFIDogRkFMU0U7DQo+ID4+IC0gICAgaWYg KFdwRW5hYmxlZCkgew0KPiA+PiAtICAgICAgaWYgKENldEVuYWJsZWQpIHsNCj4gPj4gLSAgICAg ICAgLy8NCj4gPj4gLSAgICAgICAgLy8gQ0VUIG11c3QgYmUgZGlzYWJsZWQgaWYgV1AgaXMgZGlz YWJsZWQuIERpc2FibGUgQ0VUIGJlZm9yZSBjbGVhcmluZw0KPiBDUjAuV1AuDQo+ID4+IC0gICAg ICAgIC8vDQo+ID4+IC0gICAgICAgIERpc2FibGVDZXQgKCk7DQo+ID4+IC0gICAgICB9DQo+ID4+ IC0NCj4gPj4gLSAgICAgIENyMC5CaXRzLldQID0gMDsNCj4gPj4gLSAgICAgIEFzbVdyaXRlQ3Iw IChDcjAuVWludE4pOw0KPiA+PiAtICAgIH0NCj4gPj4gLQ0KPiA+PiArICAgIERpc2FibGVSZWFk T25seVBhZ2VXcml0ZVByb3RlY3QgKCZXcEVuYWJsZWQsICZDZXRFbmFibGVkKTsNCj4gPj4gICAg ICAgIFNtbVNldE1lbW9yeUF0dHJpYnV0ZXMgKChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4p QnVmZmVyLA0KPiBFRklfUEFHRVNfVE9fU0laRSAoUG9vbFBhZ2VzKSwgRUZJX01FTU9SWV9STyk7 DQo+ID4+IC0gICAgaWYgKFdwRW5hYmxlZCkgew0KPiA+PiAtICAgICAgQ3IwLlVpbnROICAgPSBB c21SZWFkQ3IwICgpOw0KPiA+PiAtICAgICAgQ3IwLkJpdHMuV1AgPSAxOw0KPiA+PiAtICAgICAg QXNtV3JpdGVDcjAgKENyMC5VaW50Tik7DQo+ID4+IC0NCj4gPj4gLSAgICAgIGlmIChDZXRFbmFi bGVkKSB7DQo+ID4+IC0gICAgICAgIC8vDQo+ID4+IC0gICAgICAgIC8vIHJlLWVuYWJsZSBDRVQu DQo+ID4+IC0gICAgICAgIC8vDQo+ID4+IC0gICAgICAgIEVuYWJsZUNldCAoKTsNCj4gPj4gLSAg ICAgIH0NCj4gPj4gLSAgICB9DQo+ID4+ICsgICAgRW5hYmxlUmVhZE9ubHlQYWdlV3JpdGVQcm90 ZWN0IChXcEVuYWJsZWQsIENldEVuYWJsZWQpOw0KPiA+PiAgICAgIH0NCj4gPj4NCj4gPj4gICAg ICByZXR1cm4gVFJVRTsNCj4gPj4gQEAgLTE3ODIsNiArMTgxNCw3IEBAIFNldFBhZ2VUYWJsZUF0 dHJpYnV0ZXMgKA0KPiA+PiAgICAgIFZPSUQNCj4gPj4gICAgICApDQo+ID4+ICAgIHsNCj4gPj4g KyAgQk9PTEVBTiAgV3BFbmFibGVkOw0KPiA+PiAgICAgIEJPT0xFQU4gIENldEVuYWJsZWQ7DQo+ ID4+DQo+ID4+ICAgICAgaWYgKCFJZlJlYWRPbmx5UGFnZVRhYmxlTmVlZGVkICgpKSB7IEBAIC0x Nzk0LDE1ICsxODI3LDcgQEANCj4gPj4gU2V0UGFnZVRhYmxlQXR0cmlidXRlcyAoDQo+ID4+ICAg ICAgLy8gRGlzYWJsZSB3cml0ZSBwcm90ZWN0aW9uLCBiZWNhdXNlIHdlIG5lZWQgbWFyayBwYWdl IHRhYmxlIHRvIGJlIHdyaXRlDQo+IHByb3RlY3RlZC4NCj4gPj4gICAgICAvLyBXZSBuZWVkICp3 cml0ZSogcGFnZSB0YWJsZSBtZW1vcnksIHRvIG1hcmsgaXRzZWxmIHRvIGJlICpyZWFkIG9ubHkq Lg0KPiA+PiAgICAgIC8vDQo+ID4+IC0gIENldEVuYWJsZWQgPSAoKEFzbVJlYWRDcjQgKCkgJiBD UjRfQ0VUX0VOQUJMRSkgIT0gMCkgPyBUUlVFIDoNCj4gPj4gRkFMU0U7DQo+ID4+IC0gIGlmIChD ZXRFbmFibGVkKSB7DQo+ID4+IC0gICAgLy8NCj4gPj4gLSAgICAvLyBDRVQgbXVzdCBiZSBkaXNh YmxlZCBpZiBXUCBpcyBkaXNhYmxlZC4NCj4gPj4gLSAgICAvLw0KPiA+PiAtICAgIERpc2FibGVD ZXQgKCk7DQo+ID4+IC0gIH0NCj4gPj4gLQ0KPiA+PiAtICBBc21Xcml0ZUNyMCAoQXNtUmVhZENy MCAoKSAmIH5DUjBfV1ApOw0KPiA+PiArICBEaXNhYmxlUmVhZE9ubHlQYWdlV3JpdGVQcm90ZWN0 ICgmV3BFbmFibGVkLCAmQ2V0RW5hYmxlZCk7DQo+ID4+DQo+ID4+ICAgICAgLy8gU2V0IG1lbW9y eSB1c2VkIGJ5IHBhZ2UgdGFibGUgYXMgUmVhZCBPbmx5Lg0KPiA+PiAgICAgIERFQlVHICgoREVC VUdfSU5GTywgIlN0YXJ0Li4uXG4iKSk7IEBAIC0xODExLDIwICsxODM2LDEyIEBADQo+ID4+IFNl dFBhZ2VUYWJsZUF0dHJpYnV0ZXMgKA0KPiA+PiAgICAgIC8vDQo+ID4+ICAgICAgLy8gRW5hYmxl IHdyaXRlIHByb3RlY3Rpb24sIGFmdGVyIHBhZ2UgdGFibGUgYXR0cmlidXRlIHVwZGF0ZWQuDQo+ ID4+ICAgICAgLy8NCj4gPj4gLSAgQXNtV3JpdGVDcjAgKEFzbVJlYWRDcjAgKCkgfCBDUjBfV1Ap Ow0KPiA+PiArICBFbmFibGVSZWFkT25seVBhZ2VXcml0ZVByb3RlY3QgKFRSVUUsIENldEVuYWJs ZWQpOw0KPiA+PiAgICAgIG1Jc1JlYWRPbmx5UGFnZVRhYmxlID0gVFJVRTsNCj4gPj4NCj4gPj4g ICAgICAvLw0KPiA+PiAgICAgIC8vIEZsdXNoIFRMQiBhZnRlciBtYXJrIGFsbCBwYWdlIHRhYmxl IHBvb2wgYXMgcmVhZCBvbmx5Lg0KPiA+PiAgICAgIC8vDQo+ID4+ICAgICAgRmx1c2hUbGJGb3JB bGwgKCk7DQo+ID4+IC0NCj4gPj4gLSAgaWYgKENldEVuYWJsZWQpIHsNCj4gPj4gLSAgICAvLw0K PiA+PiAtICAgIC8vIHJlLWVuYWJsZSBDRVQuDQo+ID4+IC0gICAgLy8NCj4gPj4gLSAgICBFbmFi bGVDZXQgKCk7DQo+ID4+IC0gIH0NCj4gPj4gLQ0KPiA+PiAgICAgIHJldHVybjsNCj4gPj4gICAg fQ0KPiA+DQo+ID4gDQo+ID4NCj4gPg0K