From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by mx.groups.io with SMTP id smtpd.web09.5569.1623232165885502997 for ; Wed, 09 Jun 2021 02:49:26 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=LCqFeJI7; spf=pass (domain: intel.com, ip: 134.134.136.31, mailfrom: ray.ni@intel.com) IronPort-SDR: TypgVFtU4GnhmUPwgHz9fs5CtPirqDKQYTECSBaCjSEZEXO5WLr38NhHtx/H1GoPUsBKNy2UKx yfXNqp3JlrUQ== X-IronPort-AV: E=McAfee;i="6200,9189,10009"; a="266194793" X-IronPort-AV: E=Sophos;i="5.83,260,1616482800"; d="scan'208";a="266194793" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Jun 2021 02:49:24 -0700 IronPort-SDR: W5DdSBuuxacYlyLVbhFXOUONSdSOAEBUDtN+eRGIG3ujtKY+O5h/VXKLeJ4nWaU+QugwBdcEuf 8Gt7Rx/rUm5A== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.83,260,1616482800"; d="scan'208";a="476906537" Received: from fmsmsx604.amr.corp.intel.com ([10.18.126.84]) by FMSMGA003.fm.intel.com with ESMTP; 09 Jun 2021 02:49:23 -0700 Received: from fmsmsx605.amr.corp.intel.com (10.18.126.85) by fmsmsx604.amr.corp.intel.com (10.18.126.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.4; Wed, 9 Jun 2021 02:49:22 -0700 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx605.amr.corp.intel.com (10.18.126.85) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.4 via Frontend Transport; Wed, 9 Jun 2021 02:49:22 -0700 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (104.47.59.174) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2242.4; Wed, 9 Jun 2021 02:49:21 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=O+8CuuSCWClQmc+qrdlQbU0++Jnr1nuWCfaeL2wi2l1HUKqEam01ozA/ZJeV4j7OVAkz3FqYBYc+19LK1qlpRYEYD5t6WgV0Op5qjyIm7UqS/lveuUhkfvmVi735E0EpyGxWneZmfZ4qalaTAAnbR95jxQfQUMMrYfJAd3a2mjz7UPdFXf+fbcAiBqqOQxJOokvMiN1fqPJltFMUtOrYJH13WN1zobnqRRoT53w35TMWgAOteqsHMP6mpF0BDGSM/ivRcVeu/u9TOBCKLAC/n2zOncsMX7FVcu6ydGuPuhEYEUOng9KEOWbw7Wt2IhaVwp6zwfnMMrdw00aUc4gbaA== 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-SenderADCheck; bh=8NDT3TtYlsGA19KIiHWmT1bIMfZgvfuxqV6iTIsFpQ8=; b=asHDqdhEoqhHp3T2oOwWOZvfmt9DMVhtiZPT9j11t9HWEKkgQV36yGgEE5k1/koHwhS1DnxtwATgNswHh0p9h5y7IarqMMzmDiL/nDhZo0xl2KVnYcgLK+Gf8dLVu+G8AZXS7NBCZszpMgx47YtIWHsBclJjZ/1EM6IORbCdEjEzTYlgHbVZsLVNaKDWezmzDyyHiYVtt1LIu/mI3qLpSEsk3z3XWYzxEv5ox9H2mUZozAPJ9BdJXyss01HnEsR/kwwnANtn7QMtpyEsOmJUHL2awqRERGJrRUeor7pX6cYewtgj8FGPeut52rYMZhE3cq8ad9NsKjbWrKGMBBBqsg== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8NDT3TtYlsGA19KIiHWmT1bIMfZgvfuxqV6iTIsFpQ8=; b=LCqFeJI7EUvjL21R68ocx0D19SZ4I4vVIBgcmBHwXxRwZaLsosYKPJF80+QIm6dloCHGzCF28oOVl2YG7HvV7/nOZFEHBPL4VG75EBTAU9EAmTuVoVE4MsPVHdbz9BqpoOP+q6KXeSY9Oyddv1aSoR2dp3pHfkdsXkWAQcRgVnU= Received: from CO1PR11MB4930.namprd11.prod.outlook.com (2603:10b6:303:9b::11) by MW3PR11MB4585.namprd11.prod.outlook.com (2603:10b6:303:52::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.21; Wed, 9 Jun 2021 09:49:20 +0000 Received: from CO1PR11MB4930.namprd11.prod.outlook.com ([fe80::a439:f8ae:4699:718f]) by CO1PR11MB4930.namprd11.prod.outlook.com ([fe80::a439:f8ae:4699:718f%6]) with mapi id 15.20.4195.030; Wed, 9 Jun 2021 09:49:20 +0000 From: "Ni, Ray" To: "devel@edk2.groups.io" , "mhaeuser@posteo.de" CC: "Ma, Maurice" , "Dong, Guo" , "You, Benjamin" Subject: Re: [edk2-devel] [PATCH v2 2/3] UefiPayloadPkg: Add PayloadLoaderPeim which can load ELF payload Thread-Topic: [edk2-devel] [PATCH v2 2/3] UefiPayloadPkg: Add PayloadLoaderPeim which can load ELF payload Thread-Index: AQHXW+d9ZDq2f23CBEuC3j7NuTt8fqsJXgVQgABmFoCAAaNHQA== Date: Wed, 9 Jun 2021 09:49:19 +0000 Message-ID: References: <20210603062259.1390-1-ray.ni@intel.com> <20210603062259.1390-3-ray.ni@intel.com> <812b8f13-e951-5d27-9bd1-61711e6dd840@posteo.de> <486c5ab8-240e-3ac5-5a4a-7f368cb68644@posteo.de> In-Reply-To: <486c5ab8-240e-3ac5-5a4a-7f368cb68644@posteo.de> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=intel.com; x-originating-ip: [192.198.142.2] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: c9f5bc1f-702c-47f5-af11-08d92b2bda9d x-ms-traffictypediagnostic: MW3PR11MB4585: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: psqh6MZ1qTmXBvlyoSrokkxHmgUSHnuq9JdRjQyH99sPl2qzDULrFQvexhdP0lWnHwGsyDzbP0Pty7mboA0MBVQUJXjMsj67J0B0fG/26iHjAL381qY+WKp+aBEU+I6xZwNOqfZViDYNjttyd6c1UlZXHLSeWWV2DFIlFhBv1psIEZVoCOhfJcCR4i/3KnGqjy34FwxgRjkXPKGGINMw5WAb+lLHz53xS4QoX30s5CIIjK3nEbgwIfNCwgQCaBGV+Xyzev5n/ZHaLvLHVSwC0EB0dT7BvE7mzENcbw6FbXhq4gs1YYIYuoLTGiCx+nNPPs5XAg+PrT0oI+Dwk+AgTr/nkj2Yf5IYQ57ak3GO8sGPhgMlT/lJ+HPoY5fwgoe08TiuVIaBn2CaKmNe4DBCxfr6D5Ljs2nmXkKWYqTzTmKaLfomMFuZDTVmDUeh9oXNX/HGG9FgWIcWxoSFkII0PtF5PrHoWbT/Ctko7U5hn0EJ7yAlXMTYgV/gM0FHtcOIGolnxoqNCPRm6/OUjK1e9xJ6GefM0XvjgybCHadqC6G8hI7vx3LFuubm4uRK4twV+v5HEfOY4KTLMcFdw2hnMBVEhd2Uni5d9T/KqI9cevPIjzYIqwNBBsZcojLgSxN0TunhgPPikU/Ba2xbFkLlDnsgYb0gTcrvO9g9nw9y/57QH4Z0TVzi+o4HaoTA/IJUELWBHqRMA3V4y/+oEKMUqWYvyxYxbesT3Oiur4LDU64= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO1PR11MB4930.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(376002)(346002)(136003)(396003)(366004)(39860400002)(316002)(966005)(107886003)(71200400001)(186003)(76116006)(478600001)(26005)(2906002)(66946007)(38100700002)(9686003)(66446008)(86362001)(5660300002)(30864003)(33656002)(19627235002)(8936002)(4326008)(54906003)(110136005)(7696005)(8676002)(6506007)(55016002)(52536014)(64756008)(66556008)(66476007)(122000001)(83380400001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?VGlCaTA3QVVPVExZNFM1M3hETzYrK0hyL1drblNTUGRkSmF1bjRRUmREWm1M?= =?utf-8?B?dnhrVk80L3B6SW9qc0drY3ZwRGl5ZVV0bmNWTHkxUDgwNlBFSmFOVC9IRnF6?= =?utf-8?B?cERxM09reGlJOWNFYjJZQ0ZHSTIvOGx4Y3FMRk0wR1FCY3pjNnNMSE5vaFND?= =?utf-8?B?c2IwRWkyYldacmppK2pZSzZtV1BEbzhScDBjV3dGbmZYVmNpT2ttL3ZxQjZC?= =?utf-8?B?aUxMenU3a3ZvS1NSTjBLVXNQZTBNVzRzZS9wYzRxTnNENWMzbUxFbjNLY1FL?= =?utf-8?B?emZIdUM5Y2w0UFVUcmM5dCtCYW9SWUZuV2ZjSk10aXRKd2p6d1lXRVhxR1la?= =?utf-8?B?SG5EQ091N250NzdxelI0djRKVXltRkt2eGh6U3BQSXcrMVJ3L1FjdWhSUitH?= =?utf-8?B?Kzhsam56T2tDNGZTTW9iMVlhSVZtNk1menNadlF6TGVDNFFFNCtRZmJmdkVw?= =?utf-8?B?cDNjNEFNZnpCd2xIZk4vYUF1UDJVUnBjRFZpUkFjNi9kZWlKRVFKN3NoMm5L?= =?utf-8?B?Y0ZESHkva2loUmpKSDJBczFndUp4TGxpNFF2d1FLT0t2a1JvWHBLS3d4OUJP?= =?utf-8?B?dWY1T21xWmUxQ21QSDRCcmR3Yk5FT3ZVMzE5NWd5bGRWZ2hkZ004VWtML1hU?= =?utf-8?B?bFhhbFZ3VDhnZzMyZDNKNXNualJSNzN6ZXAra3JaMkJrVE14WGtUKzJrYVpl?= =?utf-8?B?Q0xZTFZIRWpNa01hOGd3LzhTajg5WHoyWldjejVhWk9EZ3R3d01saWVDZCtG?= =?utf-8?B?ZlZHTzlLZW5leERGVG94QzZENnZOZFh5Y2cwZW9pN3pFWjJxKy9hQ2VtbUV4?= =?utf-8?B?MWx0WEkrNS9mc3gyRGNVUzFoSi8vcmxpT0FJVEY5R01UNkVHbzVqcG5UKzZj?= =?utf-8?B?aGVINHlZK25HcCtHM0p3THpraGl4aDFZYWd0Y0JBWVN5MUZUbUdnNUNad1Ji?= =?utf-8?B?Z0JIbWRmUklUTGVkeHQ1amRiRGxQNEtMZ2Q2UWZEdnd6U0VtZHFrVDVFdGJ0?= =?utf-8?B?cVFIdXI3ZFhnZkRxaCtvMXgvRVh1Y3hCdmlERitzVSt1N2FhTDZKS2JNRXBv?= =?utf-8?B?UHNPbHhBampMNFdvT1lXOEN2b2xWUVpzNDBYWkRSMDUxa2xTb3QvMUx1TkxR?= =?utf-8?B?ekRaMFBVaGJScmtaSDg3MndZWERjVkFBUUdVa0NMZXJNRC9mK2N5RzdNcDVK?= =?utf-8?B?T2Z6SXJ5WWRwMzZiaXZjVVlnNll4ZS9TSGMwVEJmdkExclc2WUNES1N6ZUxH?= =?utf-8?B?VUt1UEhCQnByYmV0eHlsUUI1TmhCdittS0s2ek5PRW9nUUZPVi9tbVUycDRX?= =?utf-8?B?QUVHaThMT2phaFJPbHl4SzFDZUhlRmV6bG05ZTlDQk8vZ0NZdXBuT05sTEgz?= =?utf-8?B?RFZqT0FlbDZZU1pXampzdGR1MW9wZ3k5OFgyTUJueTFrNFRvc1locERJTnpx?= =?utf-8?B?N3JBT3Zhc00wV1NLK09UY25zOVgvOGUxWWdRKy9kVlRHZXZxSU9wOUVmQXVp?= =?utf-8?B?OTRpRG9zdk9TVWNIOVlxL0h6aTEySDEyTlZlTStSVEROcFVwam1xRTRyU3Mx?= =?utf-8?B?MEhOTkZvN1pNN0MrbkZyQXVHbWkyZkJ1a0hFRlZWRjR0VEpoWk1BOGRFMUNV?= =?utf-8?B?ODVWaDROclJqMWxPUzRNWDBsbFJ3TVY3Z3VKQm1qUWF3ZTJLdXJRakJ2c1NR?= =?utf-8?B?NEFSRGhtQ2hhYVlXMVRySWVsN2dua3FieXVlY296b1Zzck5scXFCOFI5bGgy?= =?utf-8?Q?eew0hqNEegWWd/s989gnoikFLWS+ftWndhPuAVh?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO1PR11MB4930.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c9f5bc1f-702c-47f5-af11-08d92b2bda9d X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Jun 2021 09:49:19.9945 (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: H9yS/+wSo965OIP4HopbpSKJkQ1jDgkbhn/t2MIlgtvbVs0VOJJUul1xagVL+HFkOokHTD/H8MWlK3lkMyNTrg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW3PR11MB4585 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 PiBUaGFuayB5b3UgZm9yIHlvdXIgcXVpY2sgcmVwbHksIGNvbW1lbnRzIGlubGluZS4NCg0KSSBo YXZlIHRvIGJlIHF1aWNrIGJlY2F1c2UgbXkgcHJvamVjdCBkZXBlbmRzIG9uIHRoZSBjaGVjay1p biBvZiB0aGlzIGNvZGXwn5iKDQoNCj4gPj4+ICsgIGZvciAoIEluZGV4ID0gMA0KPiA+Pj4gKyAg ICAgIDsgUmVsYUVudHJ5U2l6ZSAqIEluZGV4IDwgUmVsYVNpemUNCj4gPj4gT3ZlcmZsb3c/DQo+ ID4+DQo+ID4gV2lsbCBjaGFuZ2UgZnJvbToNCj4gPiAgICBSZWxhRW50cnlTaXplICogSW5kZXgg PCBSZWxhU2l6ZQ0KPiA+IHRvOg0KPiA+ICAgIEluZGV4IDwgUmVsYVNpemUgLyBSZWxhRW50cnlT aXplDQo+IA0KPiBpbW8gYWRkIEFTU0VSVCBmb3IgUmVsYUVudHJ5U2l6ZSA+IDAgdGhlbi4NCg0K U3VyZS4gVG8gYXZvaWQgZGl2aWRlbmQgYnkgemVybyBlcnJvci4NCg0KPiBCYXNpY2FsbHkgdGhl IGFsaWdubWVudCBvZiBhbnkgb2Zmc2V0IHdpdGggd2hpY2ggYSBwb2ludGVyIHRvDQo+IG5vbi10 cml2aWFsbHktYWxpZ25lZCAoaS5lLiByZXF1aXJlbWVudCA+IDEgQnl0ZSkgZGF0YSBjYW4gYmUg Zm9yZ2VkDQo+IG11c3QgYmUgY2hlY2tlZC4NCj4gDQo+IEV4YW1wbGVzIGZyb20gb3VyIG5ldyBQ RSBsb2FkZXI6DQo+IGh0dHBzOi8vZ2l0aHViLmNvbS9taGFldXNlci9JU1BSQVNPcGVuLQ0KPiBT ZWN1cmVQRS90cmVlLzZhN2FiY2Q4NjQ3Y2Y2ZmFhNzMzMDgyZjZkOGRjYzlhZGMxNDFkN2Uvc3Jj L1BlQ29mZkluaXQuDQo+IGMjTDEyMjYNCj4gLT4NCj4gaHR0cHM6Ly9naXRodWIuY29tL21oYWV1 c2VyL0lTUFJBU09wZW4tDQo+IFNlY3VyZVBFL3RyZWUvNmE3YWJjZDg2NDdjZjZmYWE3MzMwODJm NmQ4ZGNjOWFkYzE0MWQ3ZS9zcmMvUGVDb2ZmSW5pdC4NCj4gYyNMMTI0Mg0KPiBodHRwczovL2dp dGh1Yi5jb20vbWhhZXVzZXIvSVNQUkFTT3Blbi0NCj4gU2VjdXJlUEUvdHJlZS82YTdhYmNkODY0 N2NmNmZhYTczMzA4MmY2ZDhkY2M5YWRjMTQxZDdlL3NyYy9QZUNvZmZJbml0Lg0KPiBjI0wxMzg5 DQo+IC0+DQo+IGh0dHBzOi8vZ2l0aHViLmNvbS9taGFldXNlci9JU1BSQVNPcGVuLQ0KPiBTZWN1 cmVQRS90cmVlLzZhN2FiY2Q4NjQ3Y2Y2ZmFhNzMzMDgyZjZkOGRjYzlhZGMxNDFkN2Uvc3JjL1Bl Q29mZkluaXQuDQo+IGMjTDE0OA0KPiANCj4gVGhlIGlkZWEgaGVyZSBpcyB0aGF0IHRoZSBiYXNl IHBvaW50ZXIgKGkuZS4gaW1hZ2UgaGVhZGVyKSBpcyAibWF4aW1hbGx5DQo+IGFsaWduZWQiIChp LmUuIGNhbiBob2xkIGRhdGEgb2YgYW55IHBsYXRmb3JtIGRhdGEgYWxpZ25tZW50KS4gRm9yIHRo ZSA4DQo+IEJ5dGVzIEFsbG9jYXRlUG9vbCgpIGd1YXJhbnRlZXMgKGZpbGUgZGF0YSksIHRoaXMg aXMgc3VmZmljaWVudCBmb3IgYW55DQo+IHByaW1pdGl2ZSBhbmQgY29tcG9zaXRlIGRhdGEgdHlw ZS4gRm9yIHRoZSA0IEtCIEFsbG9jYXRlUGFnZXMoKQ0KPiBndWFyYW50ZWVzIChkZXN0aW5hdGlv biksIHRoaXMgaXMgc3VmZmljaWVudCBvZiB0aGF0LCBhbmQgZm9yIGFkdmFuY2VkDQo+IHRoaW5n cyBsaWtlIEFWWCAoaG93ZXZlciBub3QgbmVlZGVkIGhlcmUpLiBJZiB0aGUgYmFzZSBpcyBtYXhp bWFsbHkNCj4gYWxpZ25lZCwgQmFzZSArIFggaXMgZ3VhcmFudGVlZCBhbGlnbmVkIGZvciBBIGlm IFggaXMgYWxpZ25lZCBmb3IgQSwNCj4gaS5lLiBYICUgX0FsaWdub2YoQSkgPSAwLiBGYWlsaW5n IHRvIHZlcmlmeSB0aGlzIGNhbiBjYXVzZSBleGNlcHRpb25zIG9uDQo+IHBsYXRmb3JtcyB3aGlj aCBkb24ndCBzdXBwb3J0IG9yIGhhdmUgZGlzYWJsZWQgdGhlIGNhcGFiaWxpdHkgdG8gcGVyZm9y bQ0KPiB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzc2VzLg0KPiANCg0KSSB1bmRlcnN0YW5kIG5vdy4g SSByZW1lbWJlciB0aGF0IFg4NiBjb250YWlucyBhIGNvbnRyb2wgZmxhZyB0aGF0IGNhbiB0cmln Z2VyDQpDUFUgZXhjZXB0aW9uIGFzIHdlbGwgd2hlbiB1bmFsaWduZWQgYWNjZXNzIGhhcHBlbnMu DQoNCkJ1dCBhZGRpbmcgc3VjaCBjaGVjayBpbiBhbGwgcGxhY2VzIG1pZ2h0IHJlcXVpcmUgYSBo dWdlIGNoYW5nZSB0byB0b2RheSdzIGNvZGUuDQpDYW4geW91IGFjY2VwdCB0aGF0IEkgaWdub3Jl IHN1Y2ggY2hlY2sgZm9yIG5vdyBhbmQgYWRkIGl0IGxhdGVyPw0KDQo+IA0KPiA+DQo+ID4+PiAr ICAvLw0KPiA+Pj4gKyAgLy8gSXQncyBhYm5vcm1hbCBhIERZTiBFTEYgZG9lc24ndCBjb250YWlu IGEgZHluYW1pYyBzZWN0aW9uLg0KPiA+Pj4gKyAgLy8NCj4gPj4+ICsgIEFTU0VSVCAoRHluU2hk ciAhPSBOVUxMKTsNCj4gPj4+ICsgIGlmIChEeW5TaGRyID09IE5VTEwpIHsNCj4gPj4+ICsgICAg cmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gPj4+ICsgIH0NCj4gPj4+ICsgIEFTU0VSVCAoRHlu U2hkci0+c2hfdHlwZSA9PSBTSFRfRFlOQU1JQyk7DQo+ID4+PiArICBBU1NFUlQgKER5blNoZHIt PnNoX2VudHNpemUgPj0gc2l6ZW9mICgqRHluKSk7DQo+ID4+IEFibm9ybWFsaXRpZXMgaW4gdW5r bm93bi91bnRydXN0ZWQgZGF0YSBtdXN0IGJlIGZpbHRlcmVkIHdpdGggYSBydW50aW1lDQo+ID4+ IGNoZWNrLCBub3Qgd2l0aCBhbiBBU1NFUlQuDQo+ID4+DQo+ID4gU3VyZS4gSSB3aWxsIGFkZCBp Zi1jaGVjayBiZWxvdyB0aGUgYXNzZXJ0aW9uIHNvIGFzc2VydGlvbi1lbmFibGVkIGJ1aWxkIGNh bg0KPiA+IHJlcG9ydCB0aGUgZXJyb3JzIGVhcmxpZXIuDQo+IA0KPiBJIGhhdmUgc3RhcnRlZCB0 aGlzIGRpc2N1c3Npb24gdW5kZXIgYW5vdGhlciBwYXRjaCwgbWF5YmUgSSBzaG91bGQgd3JpdGUN Cj4gYSBicm9hZGVyLXNjb3BlIG1haWwgdG8gdGhlIGxpc3QgZm9yIGNvbW1lbnRzLiBCYXNpY2Fs bHkgdXNpbmcgQVNTRVJUcw0KPiBmb3IgYW55dGhpbmcgYnV0ICppbXBvc3NpYmxlKiAoKm5vdCog YXNzdW1pbmcgdGhlIGlucHV0IGRhdGEgaXMNCj4gd2VsbC1mb3JtZWQpIHNpdHVhdGlvbnMgc2ln bmlmaWNhbnRseSByZWR1Y2VzIHRoZSBlZmZpY2FjeSBvZiBkeW5hbWljDQo+IGFuYWx5c2lzLiBX aGVuIGRvaW5nIGZ1enppbmcgZm9yIGV4YW1wbGUsIHlvdSB3YW50IHRvIGtlZXAgdGhlIEFTU0VS VHMNCj4gZW5hYmxlZCB0byBiZSBtYWRlIGF3YXJlIG9mIGFueSBpbnRlcm5hbCBpbnZhcmlhbnQg dmlvbGF0aW9ucy4gQnV0IGlmDQo+IEFTU0VSVHMgaGFwcGVuIG9uIHBvc3NpYmxlIGNvbmRpdGlv bnMsIHRoZXkgd2lsbCBraWxsIHRoZSBmdXp6aW5nDQo+IHByb2Nlc3MgZm9yIG5vIGdvb2QgcmVh c29uLiBUdXJuaW5nIHRoZW0gb2ZmIHdpbGwgbm90IGFuYWx5c2UgeW91cg0KPiBBU1NFUlRzIGZv ciBwb3NzaWJsZSBjb2RlIGRlZmVjdHMuDQo+IA0KPiBNYXliZSBmdXp6aW5nIHdvdWxkIGJlIGEg Z29vZCBpZGVhIGZvciB0aGlzIGxpYnJhcnk/IDopDQo+IA0KDQpJIHVuZGVyc3RhbmQgbm93LiBJ IGFtIG9rIHRvIHJlbW92ZSBhc3NlcnRpb24gZm9yIGV4dGVybmFsIGlucHV0cy4NCg0KPiA+DQo+ ID4NCj4gPj4+ICsgIGZvciAoIEluZGV4ID0gMCwgRHluID0gKEVsZjMyX0R5biAqKSAoRWxmQ3Qt PkZpbGVCYXNlICsgRHluU2hkci0NCj4gPnNoX29mZnNldCkNCj4gPj4+ICsgICAgICA7IEluZGV4 IDwgRHluU2hkci0+c2hfc2l6ZSAvIER5blNoZHItPnNoX2VudHNpemUNCj4gPj4gSXMgInNoX2Vu dHNpemUiIGNoZWNrZWQgZm9yIDA/DQo+ID4+DQo+ID4gTm8gbmVlZC4gQmVjYXVzZSBjb2RlIGFi b3ZlIG1ha2VzIHN1cmUgc2hfZW50c2l6ZSA+PSBzaXplb2YgKCpEeW4pLg0KPiANCj4gV2hlbiB5 b3UgdHVybiBpdCBpbnRvIGEgcnVudGltZSBjaGVjayBhcyBkaXNjdXNzZWQgYWJvdmUsIHllcy4N Cj4gDQo+ID4NCj4gPg0KPiA+Pj4gKyAgQVNTRVJUIChSZWxTaGRyLT5zaF90eXBlID09IFJlbGFU eXBlKTsNCj4gPj4+ICsgIEFTU0VSVCAoUmVsU2hkci0+c2hfZW50c2l6ZSA9PSBSZWxhRW50cnlT aXplKTsNCj4gPj4gU2VlIGFib3ZlLg0KPiA+Pg0KPiA+IEFncmVlLiBXaWxsIGFkZCBpZi1jaGVj a3MuDQo+ID4NCj4gPg0KPiA+Pj4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJEWU4gRUxGOiBS ZWxvY2F0ZSB1c2luZyBkeW5hbWljDQo+IHNlY3Rpb25zLi4uXG4iKSk7DQo+ID4+PiArICAgIFN0 YXR1cyA9IFJlbG9jYXRlRWxmMzJEeW5hbWljIChFbGZDdCk7DQo+ID4+PiArICAgIEFTU0VSVF9F RklfRVJST1IgKFN0YXR1cyk7DQo+ID4+IFdoeSBjYW5ub3QgdGhpcyBmYWlsPw0KPiA+Pg0KPiA+ IEEgRFlOIHR5cGUgRUxGIGltYWdlIHNob3VsZCBjb250YWluIGR5bmFtaWMgc2VjdGlvbi4gU28g b25seSBhbiBhYm5vcm1hbA0KPiBFTEYgaW1hZ2UgY2FuIGZhaWwuDQo+IA0KPiBTYW1lIEFTU0VS VCBwb2ludCBhcyBhYm92ZSwgImNhbm5vdCIgcmVmZXJzIHRvIGJvdGggd2VsbC1mb3JtZWQgYW5k DQo+IGlsbC1mb3JtZWQgaW1hZ2VzLg0KPiANCg0KU3VyZS4gV2lsbCByZW1vdmUgYXNzZXJ0aW9u Lg0KDQo+ID4NCj4gPg0KPiA+Pj4gKyAgcmV0dXJuIChFbGY2NF9QaGRyICopKEltYWdlQmFzZSAr IEVoZHItPmVfcGhvZmYgKyBJbmRleCAqIEVoZHItDQo+ID5lX3BoZW50c2l6ZSk7DQo+ID4+IEFs aWdubWVudCBjaGVja3M/IEJvdW5kcyBjaGVja3M/DQo+ID4+DQo+ID4gRm9yIHRoZSBhbGlnbm1l bnQgY2hlY2tzLCBkbyB5b3Ugc3VnZ2VzdCB0aGF0IEkgc2hvdWxkIG1ha2Ugc3VyZSB0aGUNCj4g c2VnbWVudCBzaG91bGQgYmUgcGxhY2VkDQo+ID4gaW4gdGhlIGFkZHJlc3MgdGhhdCBtZWV0cyB0 aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50Pw0KPiANCj4gSXQgY291bGQgYmUgaW1wbGVtZW50ZWQs IFBFIGNvZGUgZG9lcyBpdCwgYnV0IEkgbWVhbnQgcG9pbnRlciBhbGlnbm1lbnQNCj4gYXMgZGlz Y3Vzc2VkIGFib3ZlIHNvbWV3aGVyZS4gSSBkb24ndCB0aGluayBFTEZzIHdvdWxkIGxpa2VseSBy ZXF1ZXN0DQo+IG1vcmUgdGhhbiBwYWdlIGFsaWdubWVudCwgYnV0IGFib3J0ICsgREVCVUcgbWVz c2FnZSBzb3VuZHMgbGlrZSBhIGdvb2QNCj4gaWRlYS4NCj4gDQo+ID4gRUxGIHNwZWMganVzdCBy ZXF1aXJlcyBiZWxvdyBmb3IgRWxmNjRfUGhkci5wX2FsaWduOg0KPiA+ICAgIGxvYWRhYmxlIHBy b2Nlc3Mgc2VnbWVudHMgbXVzdCBoYXZlIGNvbmdydWVudCB2YWx1ZXMgZm9yIHBfdmFkZHIgYW5k DQo+IHBfb2Zmc2V0LCBtb2R1bG8gdGhlIHBhZ2Ugc2l6ZS4NCj4gPg0KPiA+IEkgY2FuIGFkZCBz dWNoIGNoZWNrIGluIFBhcnNlRWxmSW1hZ2UoKS4NCj4gPg0KPiA+Pj4gKyAgUHJvY2Vzc1JlbG9j YXRpb242NCAoDQo+ID4+PiArICAgIChFbGY2NF9SZWxhICopIChFbGZDdC0+RmlsZUJhc2UgKyBS ZWxTaGRyLT5zaF9vZmZzZXQpLA0KPiA+PiBBbGlnbm1lbnQ/IDopIEkga25vdyB0aGVyZSBpcyBu byByZWFsIGNvbmNlcHQgaW4gRURLIElJIHlldCwgYnV0IGl0DQo+ID4+IHJlYWxseSBpcyBuZWVk ZWQuDQo+ID4+DQo+ID4gQ2FuIHlvdSBleHBsYWluIGEgYml0IG1vcmUgb24gdGhlIGFsaWdubWVu dD8NCj4gDQo+IERvbmUgYWJvdmUsIHNvcnJ5Lg0KPiANCj4gPg0KPiA+DQo+ID4+PiArDQo+ID4+ PiArLyoqDQo+ID4+PiArICBDaGVjayBpZiB0aGUgRUxGIGltYWdlIGlzIHZhbGlkLg0KPiA+Pj4g Kw0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgSW1hZ2VCYXNlICAgICAgIE1lbW9yeSBhZGRyZXNzIG9m IGFuIGltYWdlLg0KPiA+Pj4gKw0KPiA+Pj4gKyAgQHJldHZhbCAgICAgVFJVRSBpZiB2YWxpZC4N Cj4gPj4+ICsNCj4gPj4+ICsqKi8NCj4gPj4+ICtCT09MRUFODQo+ID4+PiArSXNFbGZGb3JtYXQg KA0KPiA+Pj4gKyAgSU4gIENPTlNUIFVJTlQ4ICAgICAgICAgICAgICpJbWFnZUJhc2UNCj4gPj4g WW91IGNhbm5vdCBzYWZlbHkgaW5zcGVjdCB1bnRydXN0ZWQvdW5rbm93biBkYXRhIHdpdGhvdXQg YSBzaXplIGZpZWxkLA0KPiA+PiBhbHNvIG5lZWRzIGNoZWNrcyBiZWxvdy4NCj4gPj4NCj4gPiBB Z3JlZS4gT3JpZ2luYWwgaWRlYSB3YXMgdG8gYWRkIGEgRUxGIGxvYWRlciB0aGF0IGNhbiBsb2Fk IHRoZSBFTEYgYXNzdW1pbmcNCj4gPiB0aGUgRUxGIGltYWdlIGlzIHdlbGwtZm9ybWF0dGVkLg0K PiANCj4gSSBnZXQgdGhhdCBpZGVhLCBidXQgdGhlIHJlYWxpdHkgaXMgdGhhdCBwZW9wbGUgd2ls bCBzdGFydCB1c2luZyBpdCBmb3INCj4gZXh0ZXJuYWwgaW1hZ2VzIG9uY2UgaXQgaXMgbmVlZGVk LiA6KQ0KPiBTb3JyeSBmb3IgYmVpbmcgcGVkYW50aWMuDQo+IA0KPiA+DQo+ID4gQnV0IHdpdGgg eW91ciBoZWxwLCBJIGFtIGdsYWQgdG8gZW5oYW5jZSB0aGUgbG9naWMgYSBiaXQgbW9yZSB0byBl eHBhbmQNCj4gPiB0aGUgc3VwcG9ydCBvZiBleHRlcm5hbCBFTEYgaW1hZ2VzLg0KPiA+DQo+ID4g V2lsbCBhZGQgYSAiVUlOVE4gSW1hZ2VTaXplIiBwYXJhbWV0ZXIuDQo+ID4NCj4gPj4+ICsgICkN Cj4gPj4+ICt7DQo+ID4+PiArICBFbGYzMl9FaGRyICAgICAgICAgICAgICAgICAgKkVsZjMySGRy Ow0KPiA+Pj4gKyAgRWxmNjRfRWhkciAgICAgICAgICAgICAgICAgICpFbGY2NEhkcjsNCj4gPj4+ ICsNCj4gPj4+ICsgIEFTU0VSVCAoSW1hZ2VCYXNlICE9IE5VTEwpOw0KPiA+Pj4gKw0KPiA+Pj4g KyAgRWxmMzJIZHIgPSAoRWxmMzJfRWhkciAqKUltYWdlQmFzZTsNCj4gPj4+ICsNCj4gPj4+ICsg IC8vDQo+ID4+PiArICAvLyBTdGFydCB3aXRoIGNvcnJlY3Qgc2lnbmF0dXJlICJcN2ZFTEYiDQo+ ID4+PiArICAvLw0KPiA+Pj4gKyAgaWYgKChFbGYzMkhkci0+ZV9pZGVudFtFSV9NQUcwXSAhPSBF TEZNQUcwKSB8fA0KPiA+Pj4gKyAgICAgIChFbGYzMkhkci0+ZV9pZGVudFtFSV9NQUcxXSAhPSBF TEZNQUcxKSB8fA0KPiA+Pj4gKyAgICAgIChFbGYzMkhkci0+ZV9pZGVudFtFSV9NQUcxXSAhPSBF TEZNQUcxKSB8fA0KPiA+Pj4gKyAgICAgIChFbGYzMkhkci0+ZV9pZGVudFtFSV9NQUcyXSAhPSBF TEZNQUcyKQ0KPiA+Pj4gKyAgICAgKSB7DQo+ID4+PiArICAgIHJldHVybiBGQUxTRTsNCj4gPj4+ ICsgIH0NCj4gPj4+ICsNCj4gPj4+ICsgIC8vDQo+ID4+PiArICAvLyBTdXBwb3J0IGxpdHRsZS1l bmRpYW4gb25seQ0KPiA+Pj4gKyAgLy8NCj4gPj4+ICsgIGlmIChFbGYzMkhkci0+ZV9pZGVudFtF SV9EQVRBXSAhPSBFTEZEQVRBMkxTQikgew0KPiA+Pj4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4+ PiArICB9DQo+ID4+PiArDQo+ID4+PiArICAvLw0KPiA+Pj4gKyAgLy8gQ2hlY2sgMzIvNjQtYml0 IGFyY2hpdGVjdHVyZQ0KPiA+Pj4gKyAgLy8NCj4gPj4+ICsgIGlmIChFbGYzMkhkci0+ZV9pZGVu dFtFSV9DTEFTU10gPT0gRUxGQ0xBU1M2NCkgew0KPiA+Pj4gKyAgICBFbGY2NEhkciA9IChFbGY2 NF9FaGRyICopRWxmMzJIZHI7DQo+ID4+PiArICAgIEVsZjMySGRyID0gTlVMTDsNCj4gPj4+ICsg IH0gZWxzZSBpZiAoRWxmMzJIZHItPmVfaWRlbnRbRUlfQ0xBU1NdID09IEVMRkNMQVNTMzIpIHsN Cj4gPj4+ICsgICAgRWxmNjRIZHIgPSBOVUxMOw0KPiA+Pj4gKyAgfSBlbHNlIHsNCj4gPj4+ICsg ICAgcmV0dXJuIEZBTFNFOw0KPiA+Pj4gKyAgfQ0KPiA+PiBXaHkgYXJlIHRoZSBicmFuY2hlcyBh Ym92ZSBhbmQgYmVsb3cgc2VwYXJhdGVkIHdoZW4gdGhleSBtYXANCj4gYmFzaWNhbGx5IDE6MT8N Cj4gPj4NCj4gPiBJbmRlZWQuIFRoYW5rcyBmb3IgY2F0Y2hpbmcgdGhpcy4NCj4gPiBXaWxsIG1l cmdlIHRoZSBzZXBhcmF0ZSAiaWYiIHRvZ2V0aGVyLg0KPiA+DQo+ID4+PiArDQo+ID4+PiArICBp ZiAoRWxmNjRIZHIgIT0gTlVMTCkgew0KPiA+Pj4gKyAgICAvLw0KPiA+Pj4gKyAgICAvLyBTdXBw b3J0IGludGVsIGFyY2hpdGVjdHVyZSBvbmx5IGZvciBub3cNCj4gPj4+ICsgICAgLy8NCj4gPj4+ ICsgICAgaWYgKEVsZjY0SGRyLT5lX21hY2hpbmUgIT0gRU1fWDg2XzY0KSB7DQo+ID4+PiArICAg ICAgcmV0dXJuIEZBTFNFOw0KPiA+Pj4gKyAgICB9DQo+ID4+PiArDQo+ID4NCj4gPj4+ICsgIC8v IFVzZSBsYXN0IHNlY3Rpb24gYXMgZW5kIG9mIGZpbGUNCj4gPj4+ICsgIFN0YXR1cyA9IEdldEVs ZlNlY3Rpb25Qb3MgKEVsZkN0LCBFbGZDdC0+U2hOdW0gLSAxLCAmT2Zmc2V0LCAmU2l6ZSk7DQo+ ID4+IFdoYXQgaWYgU2hOdW0gaXMgMD8NCj4gPj4NCj4gPiBBZ3JlZS4gVGhlIGxvZ2ljIHRvIGNh bGN1bGF0ZSBmaWxlIHNpemUgbWlnaHQgbm90IGJlIG5lZWRlZC4NCj4gPiBMZXQgbWUgY29uZmly bSBhbmQgdHJ5IHRvIHJlbW92ZSB0aGUgZW50aXJlIGZ1bmN0aW9uLg0KPiA+DQo+ID4NCj4gPj4+ ICsgIGlmIChFbGZDdC0+RWlDbGFzcyA9PSBFTEZDTEFTUzMyKSB7DQo+ID4+PiArICAgIEVsZjMy SGRyICAgPSAoRWxmMzJfRWhkciAqKUVsZkN0LT5GaWxlQmFzZTsNCj4gPj4+ICsgICAgRmlsZVNp emUyID0gRWxmMzJIZHItPmVfc2hvZmYgKyBFbGYzMkhkci0+ZV9zaGVudHNpemUgKiBFbGYzMkhk ci0NCj4gPmVfc2hudW07DQo+ID4+PiArICB9IGVsc2UgaWYgKEVsZkN0LT5FaUNsYXNzID09IEVM RkNMQVNTNjQpIHsNCj4gPj4+ICsgICAgRWxmNjRIZHIgICA9IChFbGY2NF9FaGRyICopRWxmQ3Qt PkZpbGVCYXNlOw0KPiA+Pj4gKyAgICBGaWxlU2l6ZTIgPSAoVUlOVE4pKEVsZjY0SGRyLT5lX3No b2ZmICsgRWxmNjRIZHItPmVfc2hlbnRzaXplICoNCj4gRWxmNjRIZHItPmVfc2hudW0pOw0KPiA+ Pj4gKyAgfQ0KPiA+PiBPdmVyZmxvd3M/DQo+ID4+DQo+ID4gSW50ZWdlciBvdmVyZmxvdz8NCj4g DQo+IFllcywgc29ycnkuDQo+IA0KPiA+IFdpbGwgYWRkIGludGVnZXIgb3ZlcmZsb3cgY2hlY2sg aWYgdGhpcyBmaWxlIHNpemUgY2FsY3VsYXRpb24gbG9naWMgaXMgc3RpbGwgbmVlZGVkLg0KPiA+ DQo+ID4NCj4gPj4+ICsNCj4gPj4+ICsgIGlmIChFbGZDdCA9PSBOVUxMKSB7DQo+ID4+PiArICAg IHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4+PiArICB9DQo+ID4+IEFzIHRoaXMg aXMgZnVuY3Rpb24gY29udHJhY3QsIEknZCByZXBsYWNlIHRoaXMgd2l0aCBhbiBBU1NFUlQsIG9y IGF0DQo+ID4+IGxlYXN0IGhhdmUgYm90aC4NCj4gPj4NCj4gPiBJIHdpbGwgcHV0ICJBU1NFUlQg KEVsZkN0ICE9IE5VTEwpIiBhYm92ZSB0aGUgaWYuDQo+ID4NCj4gPg0KPiA+Pj4gKyAgWmVyb01l bSAoRWxmQ3QsIHNpemVvZihFTEZfSU1BR0VfQ09OVEVYVCkpOw0KPiA+Pj4gKw0KPiA+Pj4gKyAg aWYgKEltYWdlQmFzZSA9PSBOVUxMKSB7DQo+ID4+PiArICAgIHJldHVybiAoRWxmQ3QtPlBhcnNl U3RhdHVzID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSKTsNCj4gPj4gSWYgSSBzZWUgaXQgY29ycmVj dGx5LCBhbGwgaW5zdGFuY2VzIHRoYXQgY2FuIGFzc2lnbiBQYXJzZVN0YXR1cyBhbHNvDQo+ID4+ IHJldHVybiBpdC4gV2h5IGlzIHRoZSBtZW1iZXIgbmVlZGVkIGF0IGFsbD8NCj4gPj4NCj4gPiBJ IGV4cGVjdCB0aGF0IGNhbGxlciBuZWVkcyB0byBjYWxsIFBhcnNlRWxmSW1hZ2UoKSB0byBnZXQg dGhlIFBhcnNlU3RhdHVzDQo+ID4gcHJvcGVybHkgYXNzaWduZWQgYmVmb3JlIGNhbGxpbmcgTG9h ZEVsZkltYWdlKCkuDQo+IA0KPiBCdXQgaXQganVzdCB0aHJvd3MgYmFjayB0aGUgZXJyb3Igd2l0 aG91dCBkb2luZyBhbnl0aGluZyBhcyBmYXIgYXMgSSBjYW4NCj4gc2VlLiBGb3IgdGhlIG5ldyBQ RSBsb2FkZXIsIHRoZXJlIGFyZSAiUGVDb2ZmSW5pdGlhbGl6ZUNvbnRleHQiIChtb3JlIG9yDQo+ IGxlc3MgIlBhcnNlRWxmSW1hZ2UiKSBhbmQgIlBlQ29mZkxvYWRJbWFnZSIgKG1vcmUgb3IgbGVz cw0KPiAiTG9hZEVsZkltYWdlIiksIGFuZCB0aGVyZSBpcyBhIHByZWNvbmRpdGlvbiB0byBub3Qg Y2FsbCBsYXR0ZXIgd2hlbg0KPiBmb3JtZXIgZXJyb3InZC4NCj4gQSBtaW5pbWFsIGNhbGxlciBj YWwgbG9vayBsaWtlIHRoaXM6DQo+IA0KPiAgICBTdGF0dXMgPSBQZUNvZmZJbml0aWFsaXplQ29u dGV4dCAoJkNvbnRleHQsIEZpbGVCdWZmZXIsIEZpbGVTaXplKTsNCj4gICAgaWYgKFJFVFVSTl9F UlJPUiAoU3RhdHVzKSkgew0KPiAgICAgIHJldHVybiBTdGF0dXM7DQo+ICAgIH0NCj4gDQo+ICAg IC8vIFsgLi4uIGhhc2ggaW1hZ2UsIGFsbG9jYXRlIGRlc3RpbmF0aW9uLCBhbmQgc28gb24gLi4u IF0NCj4gDQo+ICAgIFBlQ29mZkxvYWRJbWFnZSAoQ29udGV4dCwgRGVzdGluYXRpb24sIERlc3Rp bmF0aW9uU2l6ZSk7DQo+IA0KPiBUaGUgbG9hZCBmdW5jdGlvbiBpcyBuZXZlciBpbnZva2VkIGlm IHRoZSBpbml0IGZ1bmN0aW9uIGZhaWxzLiBUaGlzDQo+IGdpdmVzIGFuIGludHVpdGl2ZSBhbmQg ZWFzeS10by1jb21wcmVoZW5kIGNvbnRyb2wgZmxvdy4gVGhlIG9sZCBQRSBsaWINCj4gYWxzbyBo YXMgYSBzdGF0dXMgbWVtYmVyIGluIHRoZSBjb250ZXh0LCBhbmQgaXQgd2FzIG9uZSBvZiB0aGUg Zmlyc3QNCj4gdGhpbmdzIEkgd2VudCBhd2F5IHdpdGguIENhbGxlcnMgc2hvdWxkIG5vdCByZWFk IGZyb20gdGhlIGNvbnRleHQsIGFuZA0KPiBjYWxsZWVzIGhhdmUgY2xlYXIgY29udHJhY3RzLg0K PiANCg0KV2l0aG91dCB0aGUgUGFyc2VTdGF0dXMgZmllbGQsIGNhbGxlZSBjYW5ub3Qga25vdyB3 aGV0aGVyIFBhcnNlRWxmSW1hZ2UoKSBpcyBjYWxsZWQuDQpUaGVyZSBhcmUgc2V2ZXJhbCBBUElz IHdoaWNoIGFsbCBkZXBlbmQgb24gdGhlIHdlbGwgZm9ybWF0IG9mIEVMRiBpbWFnZS4NCkZvciBl eGFtcGxlOiANCiAgR2V0RWxmU2VjdGlvbk5hbWUNCiAgR2V0RWxmU2VjdGlvblBvcw0KICBMb2Fk RWxmSW1hZ2UNCg0KSWYgdGhlIFBhcnNlU3RhdHVzIGlzIHJlbW92ZWQsIGFsbCBhYm92ZSBBUEkg aW1wbGVtZW50YXRpb25zIG5lZWQgdG8gY2FsbA0KUGFyc2VFbGZJbWFnZSgpIGFnYWluIGludGVy bmFsbHkgdG8gbWFrZSBzdXJlIHRoZSBFTEYgaW1hZ2UgaXMgd2VsbCBmb3JtYXR0ZWQuDQoNCkNh bGxlciBkb2Vzbid0IG5lZWQgdG8gcmVhZCB0aGUgUGFyc2VTdGF0dXMuIEl0IGp1c3QgbmVlZCB0 byBjaGVjayB0aGUgcmV0dXJuDQpzdGF0dXMgb2YgQVBJIGNhbGxzLg0KDQo+ID4NCj4gPiBUaGUg bWVtYmVyIFBhcnNlU3RhdHVzIGlzIGNoZWNrZWQgaW4gTG9hZEVsZkltYWdlKCkgbGF0ZXIuDQo+ ID4gVG9kYXkgaXQncyBqdXN0IFBheWxvYWRMb2FkZXJQZWltIHRoYXQgY2FsbHMgdGhlIEVsZkxp YiBmdW5jdGlvbnMuDQo+ID4gQnV0IEkgZXhwZWN0IHRoYXQgdGhlIEVsZkxpYiBmdW5jdGlvbnMg Y2FuIGJlIHB1YmxpYyBsaWIgQVBJcyBpbiBmdXR1cmUNCj4gPiBpZiBuZWVkcyBhcHBlYXIuDQo+ ID4NCj4gPg0KPiA+Pj4gKyAgICAgIE5hbWUgPSAoQ0hBUjggKikoRWxmQ3QtPkZpbGVCYXNlICsg RWxmQ3QtPlNoU3RyT2ZmICsgRWxmNjRTaGRyLQ0KPiA+c2hfbmFtZSk7DQo+ID4+IDAtdGVybWlu YXRpb24gY2hlY2tzLCBvciByZXR1cm4gc2l6ZT8NCj4gPj4NCj4gPiBJIHdpbGwgdmFsaWRhdGUg dGhlIHN0cmluZyBzZWN0aW9uIGluIFBhcnNlRWxmSW1hZ2UoKS4gVGhlIHZhbGlkYXRpb24gbG9n aWMgd2lsbDoNCj4gPiAxLiBWZXJpZnkgdGhhdCBlYWNoIHNlY3Rpb24gbmFtZSBpcyBwb2ludGVk IGZyb20gdGhlIGVfc2hzdHJuZHgNCj4gPiAyLiBWZXJpZnkgdGhhdCBzZWN0aW9uIG5hbWUgc3Ry aW5ncyBkb24ndCBvY2N1cHkgc3BhY2VzIG91dHNpZGUgb2YgdGhlIHN0cmluZw0KPiBzZWN0aW9u Lg0KPiA+DQo+ID4NCj4gPj4+ICsNCj4gPj4+ICsgICAgWmVyb01lbSAoJkNvbnRleHQsIHNpemVv ZiAoQ29udGV4dCkpOw0KPiA+PiBUaGlzIGlzIGRvbmUgYnkgdGhlIGNhbGxlZSBhbHJlYWR5Lg0K PiA+Pg0KPiA+IEluZGVlZC4gV2lsbCByZW1vdmUgdGhpcy4NCj4gDQo+IFJlc3QgbG9va3MgZ29v ZCwgdGhhbmtzIGEgbG90IQ0KPiANCj4gSWYgeW91IGhhdmUgc29tZSB0aW1lLCBwbGVhc2UgY29u c2lkZXIgY2hlY2tpbmcgdGhlIHJlc3QgZm9yIHNpbWlsYXINCj4gaXNzdWVzLiBJIG1heWJlIGNv dWxkIGhlbHAgd2l0aCBpdCBpZiB5b3Ugd291bGQgbGlrZSB0aGF0LCBidXQgbm90IHJpZ2h0DQo+ IG5vdywgc29ycnkuIDopDQo+IA0KPiBCZXN0IHJlZ2FyZHMsDQo+IE1hcnZpbg0KPiANCg0K