From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (NAM11-CO1-obe.outbound.protection.outlook.com [40.107.220.80]) by mx.groups.io with SMTP id smtpd.web09.8620.1662562002446853872 for ; Wed, 07 Sep 2022 07:46:42 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@nvidia.com header.s=selector2 header.b=WTdmT1Z+; spf=permerror, err=parse error for token &{10 18 %{i}._ip.%{h}._ehlo.%{d}._spf.vali.email}: invalid domain name (domain: nvidia.com, ip: 40.107.220.80, mailfrom: jbrasen@nvidia.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TaghpvxhK16s/fjo1lNPoBwpIEbgexezir6GOAzbY/sKUAq1D1ORwiLGiWlFclsRF4ARfYG7wLFCc1gcSqRe6ebNkZzwqs/Bo5mvZ4nAbaw4Y50dzcITEJq5c07qmBaJOoU9CMQBtJWo40eXwkiaQN8rsn0+E3UV6+BYlzJsU+9mw3gcU7CAOnwhFzYDsOzBSct9IzfqCHoutlrNdGvtZgbqNfOm2din7vcSbp8Grg3IMVUvm3yFTsjT9TfkgtkuBZDx95ZhVKYHWeJ98BTucNzcLbeMcEwCljDFTGgDFAuxIFy6vhhoHg0wdH+zFh9GIYuBzF1icXlYucYCS+h1tg== 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=c7bjNmV9alFK+j8x2DrkbNdGITrDb+o39Ne8x1DMi+8=; b=N93D+Xd3jW+KCa/xF4H+U+oJjAG3PbqoEfKCzHUfl4tftsFLPS0oUmspboVa0qBQjMgRvidFYmR/gV1Xjzmki2MxhjrFlqxpNWFxZdb36h4vu2rHgO+UBGDjB0iKGSBepjNkuCj8G0HZTc6zU15LzUxFvyaaM2i1buPwus0I/0Qmpybs7GCkEJ6WbLCAA6dfTZURWlLjJ5W2IhUpAx5YdfaWdrVwYwZJ4qd6Vr2KANUQIKEp8pcdwO0Anz2Xj630dR3ZxshfH2vsgKUvC3DYqz77xrdAP1iQg349lbgzNIc0zZ/jBFCAg3HolL8F3B/VP/pBNa3d7kJx7EnlIgw5cA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=c7bjNmV9alFK+j8x2DrkbNdGITrDb+o39Ne8x1DMi+8=; b=WTdmT1Z+Y2WY/sJhkFBcO2dT3PJqMlSwzpmX5jyFS5ACewhpqI8xOUsUkPZyNVxqBf7wuDgv68o0P4BiyPZLEWT/NzTW1/r2PoAGgtiT5Q7frDcCHjavPrRc4ANFhO4tLtgrd9GdXD7gHKqL9umK2A8QIDVs8c0u4/DZhbUGNy/pBnYSHhunfZFGMGjpI+O1+LCmBXKadr0bUdt2pR5qv7rspuq9ZgLlPTdBceFfng63Yo9coCPkgQQtRBAmxxOK9Vdnfl3kz1pLNizTderAYM2c4Z8ousgS2BmkIrXD9+D6Nd2fwBxRlw1oLayeNSUJACXqYUe367hd4gedSO6fGw== Received: from DS7PR12MB5789.namprd12.prod.outlook.com (2603:10b6:8:74::21) by SA0PR12MB4477.namprd12.prod.outlook.com (2603:10b6:806:92::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5588.10; Wed, 7 Sep 2022 14:46:40 +0000 Received: from DS7PR12MB5789.namprd12.prod.outlook.com ([fe80::addf:154b:ae11:5e13]) by DS7PR12MB5789.namprd12.prod.outlook.com ([fe80::addf:154b:ae11:5e13%4]) with mapi id 15.20.5588.010; Wed, 7 Sep 2022 14:46:40 +0000 From: "Jeff Brasen" To: Ard Biesheuvel CC: "devel@edk2.groups.io" , "quic_llindhol@quicinc.com" , "ardb+tianocore@kernel.org" , "abner.chang@hpe.com" , "daniel.schaefer@hpe.com" Subject: Re: [PATCH] EmbeddedPkg/PrePiMemoryAllocationLib: Add check for space on offset allocation Thread-Topic: [PATCH] EmbeddedPkg/PrePiMemoryAllocationLib: Add check for space on offset allocation Thread-Index: AQHYwpSRTBjvv68m8Ea/htf5tFml+63UC7jg Date: Wed, 7 Sep 2022 14:46:40 +0000 Message-ID: References: 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=nvidia.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 92cf3815-dd53-4e47-1199-08da90dfc613 x-ms-traffictypediagnostic: SA0PR12MB4477:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Y2hL3iPUVGL0GwxbnA6ttrvNjmqIY9E+iSnRfm4PLz/5MTB1fo/jknQsGYPb2J26OgnuWalOCmUXtyFQQGrNLwJpTsVUPsiRTOaSmodYOJgVE0dBaZIkIKVy6Go2G20tkluURRzm8z7uDeSNHJ7z/SAe9DWEOMjsXaEpks9YQiAMMMOBkOiIcZpwBBxPE0SwuAyMLbOie0/AkANaYWMKaozhENAZV3PtmMnrdLrEoX2LnVD49seCjm2XpEyeshoFOErMnRMK5jRaDgcP59gHwzHZIFdcWq7FPTPdwm19kqjfXMPH/m7dzDEHEoA+SDY5bW9y5hzYaGFHpw2VnBJhUAgLgOf9Uq4eZ0tBmv/giYGFo+sGElkGtA1Xi566gX6dCNbLkZmrw0EZKIgbekds1dA1wCzLRxaOBl4gHUrGBW4LOvjvpb2kBVsTDPZOV1exSxQ8UieSc7x12ck8Xrn46XjgV7qtVOp/ECcbT0+x5q7Ir/Na8D9K+wnXzVc2ZIYhHIjH4kpPVw5ySHJ7A+dl+vN2tQMN4sWYlwkBgtyKEIQrFIK7+GiJDEz9QnqU01ywSuJhk6XS59IHIS2/331CQstyy3/lr+ymizwXCprhH37qtpF39O04BXTurATK/8uxvpo9ePhnpktlDnATaF3KI36x65JSUsAgjRdeVa/mVuwVOu2ezYpKi8GRQvs0a2PnOiXk1k2BWSzQ3xZbJni/BISm0DC3CrvYQy9JWotnzX/RQp1BRiU03ZW8/YX5Tijac3A1JB1D7h1gZLdJqzKV1g== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR12MB5789.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(6029001)(4636009)(376002)(366004)(396003)(136003)(346002)(39860400002)(66476007)(71200400001)(316002)(38100700002)(122000001)(6916009)(54906003)(186003)(86362001)(53546011)(66946007)(83380400001)(76116006)(4326008)(66556008)(64756008)(66446008)(8676002)(7696005)(55016003)(6506007)(52536014)(9686003)(38070700005)(8936002)(41300700001)(2906002)(5660300002)(26005)(33656002)(478600001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?SklsZDluMTR6Qk9XMHlBUnBSYlQrajlsb0lMUWJEc295UFE5dDd5cFBvZmtI?= =?utf-8?B?bXJOSExtbVcrNWF4OUFnS1phdnEzczZrVUlSWExWdSt0b2ZtdVNiOU81eWMv?= =?utf-8?B?Mmh3eDlwYWNyU3lyVW42UUkvd010dUxNcXNRTkswLzhhL0g0bEhYeFBpYis4?= =?utf-8?B?VFR1clBTM1BibXk4R1Y4cTdEcitwSHZLOU9Ea0MrdUhmbGFKYmRHTHh5TTNQ?= =?utf-8?B?Tnh4YVZSSDdnMncvVGtRZU9UUkliL2kzVmtvQjUwc2s3YWM4UGNqMkNBNC82?= =?utf-8?B?aVEwem9lSllYRjhFMjJjUWhDem5TRlVPcVczaXFjTlVnTzAvTWp5eGFCNjUz?= =?utf-8?B?cFNiVVRoL1NUZDkvclROVFBiUnBHQ0tGK0FwMVVrRDlFRVErZEg4c2wwRFpH?= =?utf-8?B?SEMwUWJJWmI4ZStKNU52VExqZzBkbEthdlpybjYwWFJzYUpDMGc3YlJhYUdo?= =?utf-8?B?YkZWRTN6SjUxOXdyOUcyM0NLd3MzYmg4KzVUbHdiNERRb1o5ekdpdzRCbFV4?= =?utf-8?B?ZUNmS1FoRlpqUitoVDdxTmNZamlkeHg4dFQyMjF4eXdJcG1GdUVRSHg0dkg5?= =?utf-8?B?aFRuQm9tV0tKL2VsSnJ1djVuRmM2dldmSytva2NYQlRLQXFoSHd6M0NKWTVY?= =?utf-8?B?Z2ZReWMrRGgrZ0dET3ZOVCtpTFNXZkpacWZKd1VZNmd5Zm1QM2J2V3hDMVhG?= =?utf-8?B?aGFIWVNkbFNST2pVUVVJWUxvalF1Y2tkdy9EM3RnQnVGbTBlY1dRcE9NcU9T?= =?utf-8?B?NGl3YkVSZnlQRlVieHFOUnRDcm9RanhGODgvWjZKS0t1bXVJWmt4NGRBZ0Fh?= =?utf-8?B?MS9VVm1xUCtOYXZMOGdYNnJLdHZHcnZIY3pnemsvS3NHNmdhRngvblhJa3Bk?= =?utf-8?B?eFlvK0pGS3BsZ2w4TCtOd1JDdTJBdjNHMnVzejJYMGJ1cExmeVh4UVdvN0ZG?= =?utf-8?B?b2tSdnBzam9BRUkrVURidUJYRkZvNzFVMU1weXBlTVdGVFVYUGRpRGlHaVgz?= =?utf-8?B?YStyVTdYb0dYdjhxWWFMTXk2dWxrTFJlT2ZpTDlkSWt1V0o5MGg4d0NKbXlH?= =?utf-8?B?NERHUEFKbUhHQ3BzRGZ0d0tsMkRsSnNUbzJYQ0t5blM4S0RDb2ZRSHlKOStn?= =?utf-8?B?YS8vSjJmVzRUdXQ3Rm9yeHhkQmZGUTZueExtbmlTQjJSVzZXUGJrRjc0bmR4?= =?utf-8?B?SXJZaitXL0hXV3AvdzQwRUkrZ2VSWXhyUGpyTnRqdTlFUDByTFMvWUlmMlBt?= =?utf-8?B?cnRwVm9rKzRlYXVoUTJ6NEoxRGtXdVNRN2FaNjBpMVc5V1U4UGpGVlY1bXUz?= =?utf-8?B?Yk92aDV0ZzNJblRudG85ZHgxTktpTWhKRFhUQUJhRk83REdNMkh3VUorcHNB?= =?utf-8?B?ZFQwWkMxN2pWYlcwTllLSkVYK21XbVNxR0hDWGFQckx1R0FDbmkzVFQySDZu?= =?utf-8?B?UFF4U2J1dlI0TTRxRVFOc1BpaVZyZWRYUm9ORmNjMHIwdmd5Mkp3NTRmTU9S?= =?utf-8?B?dlc0ODlBUkc1UDluamI4dktBckE4Ukg2Qzg2MktHOHhRUSswRHR3WURxNndV?= =?utf-8?B?R0VSWms0R0U4RHRDVUdBRU42c0JSSEJ3bG1udDFCZ2w0Q3JxUXZjTVRhV3Zj?= =?utf-8?B?OFRLZ3pmb3VQUFZnYlVoV0ljSHJJR2hTTnh1UjhUemg0TUthcGo5Z2xyRkZ0?= =?utf-8?B?bm9IUE16SHMvY1lMSStlaXpQY0toWlR6b2dWaEtVZHJUNUpxV0NMNmU1UjVE?= =?utf-8?B?TDZ5Ky9EQWk3MTVxKzlnTG9VWDM0UEVoSHcvQkpsTzlvck5BTEM3elFLUUl3?= =?utf-8?B?RDdkUnVUZGJpL3ROaEd4akFQa0pmbmtxbTFHL0MxS3dMRCtsR2Jzb0JMN0xW?= =?utf-8?B?M0twYWN6UkU5Nm9adDJ5cis4R21IU0tXNDlEY3F5cmJ1UW5LV2RpK2U3SGQ4?= =?utf-8?B?TWNjMk1LazlobWE4LzJmdWxHNUhPcXVDNGtMRzdiQ014K1FqNDFlNjU2dEVm?= =?utf-8?B?b01XV0VsTjMwS2xsekdLY3ZrSXJ1TmQycVpEc1A4c2RBSHFYUkJjRGZrMlQ4?= =?utf-8?B?ZEc3NlR2aUV6aGhJempOK1paRTA0NmxaSVd5bFNPVHlQRW1zZFpWR05vQXBw?= =?utf-8?Q?XwEXFRhhL/ltLFtZZ3dbYHvHi?= MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DS7PR12MB5789.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 92cf3815-dd53-4e47-1199-08da90dfc613 X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Sep 2022 14:46:40.1435 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: LCjtplL3Tkta6W80unqJABSuGIvdoRrOH2xun8gc2ssirwuYVVm4iEj+zEn7NxlAGMgGYe+V/+FtZOjJz5W9Hg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR12MB4477 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SSdsbCBwb3N0IGFub3RoZXIgdmVyc2lvbiB0byBmaXggdGhlIGZvcm1hdHRpbmcgaXNzdWUgaW4g YSBiaXQsIGJ1dCBiZWZvcmUgdGhlIHBhdGNoIHRoZSBpc3N1ZSB3YXMgd2UgYXBwbGllZCB0aGUg YWxpZ25tZW50IG9mZnNldCBiZWZvcmUgd2UgZGlkIGEgc3BhY2UgY2hlY2suDQoNCi1KZWZmDQoN Cg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBBcmQgQmllc2hldXZlbCA8 YXJkYkBrZXJuZWwub3JnPg0KPiBTZW50OiBXZWRuZXNkYXksIFNlcHRlbWJlciA3LCAyMDIyIDI6 MzQgQU0NCj4gVG86IEplZmYgQnJhc2VuIDxqYnJhc2VuQG52aWRpYS5jb20+DQo+IENjOiBkZXZl bEBlZGsyLmdyb3Vwcy5pbzsgcXVpY19sbGluZGhvbEBxdWljaW5jLmNvbTsNCj4gYXJkYit0aWFu b2NvcmVAa2VybmVsLm9yZzsgYWJuZXIuY2hhbmdAaHBlLmNvbTsgZGFuaWVsLnNjaGFlZmVyQGhw ZS5jb20NCj4gU3ViamVjdDogUmU6IFtQQVRDSF0gRW1iZWRkZWRQa2cvUHJlUGlNZW1vcnlBbGxv Y2F0aW9uTGliOiBBZGQgY2hlY2sgZm9yDQo+IHNwYWNlIG9uIG9mZnNldCBhbGxvY2F0aW9uDQo+ IA0KPiBFeHRlcm5hbCBlbWFpbDogVXNlIGNhdXRpb24gb3BlbmluZyBsaW5rcyBvciBhdHRhY2ht ZW50cw0KPiANCj4gDQo+IE9uIFRodSwgMzAgSnVuIDIwMjIgYXQgMjE6MDYsIEplZmYgQnJhc2Vu IDxqYnJhc2VuQG52aWRpYS5jb20+IHdyb3RlOg0KPiA+DQo+ID4gVXBkYXRlIGNoZWNrIGZvciBl bm91Z2ggc3BhY2UgdG8gb2NjdXIgcHJpb3IgdG8gYWxpZ25tZW50IG9mZnNldC4NCj4gPiBUaGlz IHByZXZlbnRzIGNhc2VzIHdoZXJlIEVmaUZyZWVNZW1vcnlUb3AgPCBFZmlGcmVlTWVtb3J5Qm90 dG9tLg0KPiA+DQo+IA0KPiBTbyBwcmlvciB0byB0aGlzIHBhdGNoLCB3ZSB3b3VsZA0KPiAtIGNo ZWNrIGZvciBlbm91Z2ggc3BhY2UNCj4gLSBhcHBseSB0aGUgYWxpZ25tZW50DQo+IC0gcG90ZW50 aWFsbHkgZXhjZWVkIHRoZSBhdmFpbGFibGUgc3BhY2UgZHVlIHRvIGFsaWdubWVudCBwYWRkaW5n Pw0KPiANCj4gPiBTaWduZWQtb2ZmLWJ5OiBKZWZmIEJyYXNlbiA8amJyYXNlbkBudmlkaWEuY29t Pg0KPiANCj4gVGhpcyBwYXRjaCBnb3QgbWFuZ2xlZCBzbyBJIGNhbm5vdCBhcHBseSBpdCBmcm9t IHRoZSBsaXN0Lg0KPiANCj4gPiAtLS0NCj4gPiAgLi4uL01lbW9yeUFsbG9jYXRpb25MaWIuYyAg ICAgICAgICAgICAgICAgICAgIHwgNTMgKysrKysrKysrKystLS0tLS0tLQ0KPiA+ICAxIGZpbGUg Y2hhbmdlZCwgMzAgaW5zZXJ0aW9ucygrKSwgMjMgZGVsZXRpb25zKC0pDQo+ID4NCj4gPiBkaWZm IC0tZ2l0DQo+ID4gYS9FbWJlZGRlZFBrZy9MaWJyYXJ5L1ByZVBpTWVtb3J5QWxsb2NhdGlvbkxp Yi9NZW1vcnlBbGxvY2F0aW9uTGliLmMNCj4gPiBiL0VtYmVkZGVkUGtnL0xpYnJhcnkvUHJlUGlN ZW1vcnlBbGxvY2F0aW9uTGliL01lbW9yeUFsbG9jYXRpb25MaWIuYw0KPiA+IGluZGV4IDc4Zjhk YTVlOTUuLjE5NTZkNjQ0YzMgMTAwNjQ0DQo+ID4gLS0tDQo+ID4gYS9FbWJlZGRlZFBrZy9MaWJy YXJ5L1ByZVBpTWVtb3J5QWxsb2NhdGlvbkxpYi9NZW1vcnlBbGxvY2F0aW9uTGliLmMNCj4gPiAr KysgYi9FbWJlZGRlZFBrZy9MaWJyYXJ5L1ByZVBpTWVtb3J5QWxsb2NhdGlvbkxpYi9NZW1vcnlB bGxvY2F0aW9uTGliDQo+ID4gKysrIC5jDQo+ID4gQEAgLTM4LDM3ICszOCw0NCBAQCBBbGxvY2F0 ZVBhZ2VzICgNCj4gPg0KPiA+ICAgIEhvYi5SYXcgPSBHZXRIb2JMaXN0ICgpOw0KPiA+DQo+ID4g LSAgLy8gQ2hlY2sgdG8gc2VlIGlmIG9uIDRrIGJvdW5kYXJ5DQo+ID4gICAgT2Zmc2V0ID0gSG9i LkhhbmRvZmZJbmZvcm1hdGlvblRhYmxlLT5FZmlGcmVlTWVtb3J5VG9wICYgMHhGRkY7DQo+ID4g KyAgLy8NCj4gPiArICAvLyBWZXJpZnkgdGhhdCB0aGVyZSBpcyBzdWZmaWNpZW50IG1lbW9yeSB0 byBzYXRpc2Z5IHRoZSBhbGxvY2F0aW9uDQo+ID4gKyBhbmQgcGFkZGluZyBwcmlvciB0byB1cGRh dGluZyBhbnl0aGluZyAgLy8gIGlmDQo+ID4gKyAoKEhvYi5IYW5kb2ZmSW5mb3JtYXRpb25UYWJs ZS0+RWZpRnJlZU1lbW9yeVRvcCAtICgoUGFnZXMgKg0KPiBFRklfUEFHRV9TSVpFKSArIHNpemVv ZiAoRUZJX0hPQl9NRU1PUllfQUxMT0NBVElPTikpIC0gT2Zmc2V0KSA8DQo+IEhvYi5IYW5kb2Zm SW5mb3JtYXRpb25UYWJsZS0+RWZpRnJlZU1lbW9yeUJvdHRvbSkgew0KPiA+ICsgICAgaWYgKE9m ZnNldCAhPSAwKSB7DQo+ID4gKyAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICJPZmZzZXQgYXBw bGllZCB3aXRob3V0IGVub3VnaCBzcGFjZVxyXG4iKSk7DQo+ID4gKyAgICB9IGVsc2Ugew0KPiA+ ICsgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiT3V0IG9mIG1lbW9yeVxyXG4iKSk7DQo+ID4g KyAgICB9DQo+ID4gKw0KPiA+ICsgICAgQVNTRVJUIChGQUxTRSk7DQo+ID4gKyAgICByZXR1cm4g MDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vIENoZWNrIHRvIHNlZSBpZiBvbiA0ayBib3Vu ZGFyeQ0KPiA+ICAgIGlmIChPZmZzZXQgIT0gMCkgew0KPiA+ICAgICAgLy8gSWYgbm90IGFsaWdu ZWQsIG1ha2UgdGhlIGFsbG9jYXRpb24gYWxpZ25lZC4NCj4gPiAgICAgIEhvYi5IYW5kb2ZmSW5m b3JtYXRpb25UYWJsZS0+RWZpRnJlZU1lbW9yeVRvcCAtPSBPZmZzZXQ7DQo+ID4gICAgfQ0KPiA+ DQo+ID4gICAgLy8NCj4gPiAtICAvLyBWZXJpZnkgdGhhdCB0aGVyZSBpcyBzdWZmaWNpZW50IG1l bW9yeSB0byBzYXRpc2Z5IHRoZSBhbGxvY2F0aW9uDQo+ID4gKyAgLy8gVXBkYXRlIHRoZSBQSElU IHRvIHJlZmxlY3QgdGhlIG1lbW9yeSB1c2FnZQ0KPiA+ICAgIC8vDQo+ID4gLSAgaWYgKEhvYi5I YW5kb2ZmSW5mb3JtYXRpb25UYWJsZS0+RWZpRnJlZU1lbW9yeVRvcCAtICgoUGFnZXMgKg0KPiBF RklfUEFHRV9TSVpFKSArIHNpemVvZiAoRUZJX0hPQl9NRU1PUllfQUxMT0NBVElPTikpIDwNCj4g SG9iLkhhbmRvZmZJbmZvcm1hdGlvblRhYmxlLT5FZmlGcmVlTWVtb3J5Qm90dG9tKSB7DQo+ID4g LSAgICByZXR1cm4gMDsNCj4gPiAtICB9IGVsc2Ugew0KPiA+IC0gICAgLy8NCj4gPiAtICAgIC8v IFVwZGF0ZSB0aGUgUEhJVCB0byByZWZsZWN0IHRoZSBtZW1vcnkgdXNhZ2UNCj4gPiAtICAgIC8v DQo+ID4gLSAgICBIb2IuSGFuZG9mZkluZm9ybWF0aW9uVGFibGUtPkVmaUZyZWVNZW1vcnlUb3Ag LT0gUGFnZXMgKg0KPiBFRklfUEFHRV9TSVpFOw0KPiA+IC0NCj4gPiAtICAgIC8vIFRoaXMgcm91 dGluZSB1c2VkIHRvIGNyZWF0ZSBhIG1lbW9yeSBhbGxvY2F0aW9uIEhPQiBhIGxhIFBFSSwgYnV0 IHRoYXQncw0KPiBub3QNCj4gPiAtICAgIC8vIG5lY2Vzc2FyeSBmb3IgdXMuDQo+ID4gLQ0KPiA+ IC0gICAgLy8NCj4gPiAtICAgIC8vIENyZWF0ZSBhIG1lbW9yeSBhbGxvY2F0aW9uIEhPQi4NCj4g PiAtICAgIC8vDQo+ID4gLSAgICBCdWlsZE1lbW9yeUFsbG9jYXRpb25Ib2IgKA0KPiA+IC0gICAg ICBIb2IuSGFuZG9mZkluZm9ybWF0aW9uVGFibGUtPkVmaUZyZWVNZW1vcnlUb3AsDQo+ID4gLSAg ICAgIFBhZ2VzICogRUZJX1BBR0VfU0laRSwNCj4gPiAtICAgICAgRWZpQm9vdFNlcnZpY2VzRGF0 YQ0KPiA+IC0gICAgICApOw0KPiA+IC0gICAgcmV0dXJuIChWT0lEICopKFVJTlROKUhvYi5IYW5k b2ZmSW5mb3JtYXRpb25UYWJsZS0NCj4gPkVmaUZyZWVNZW1vcnlUb3A7DQo+ID4gLSAgfQ0KPiA+ ICsgIEhvYi5IYW5kb2ZmSW5mb3JtYXRpb25UYWJsZS0+RWZpRnJlZU1lbW9yeVRvcCAtPSBQYWdl cyAqDQo+ID4gKyBFRklfUEFHRV9TSVpFOw0KPiA+ICsNCj4gPiArICAvLyBUaGlzIHJvdXRpbmUg dXNlZCB0byBjcmVhdGUgYSBtZW1vcnkgYWxsb2NhdGlvbiBIT0IgYSBsYSBQRUksDQo+ID4gKyBi dXQgdGhhdCdzIG5vdCAgLy8gbmVjZXNzYXJ5IGZvciB1cy4NCj4gPiArDQo+ID4gKyAgLy8NCj4g PiArICAvLyBDcmVhdGUgYSBtZW1vcnkgYWxsb2NhdGlvbiBIT0IuDQo+ID4gKyAgLy8NCj4gPiAr ICBCdWlsZE1lbW9yeUFsbG9jYXRpb25Ib2IgKA0KPiA+ICsgICAgSG9iLkhhbmRvZmZJbmZvcm1h dGlvblRhYmxlLT5FZmlGcmVlTWVtb3J5VG9wLA0KPiA+ICsgICAgUGFnZXMgKiBFRklfUEFHRV9T SVpFLA0KPiA+ICsgICAgRWZpQm9vdFNlcnZpY2VzRGF0YQ0KPiA+ICsgICAgKTsNCj4gPiArICBy ZXR1cm4gKFZPSUQNCj4gPiArICopKFVJTlROKUhvYi5IYW5kb2ZmSW5mb3JtYXRpb25UYWJsZS0+ RWZpRnJlZU1lbW9yeVRvcDsNCj4gPiAgfQ0KPiA+DQo+ID4gIC8qKg0KPiA+IC0tDQo+ID4gMi4y NS4xDQo+ID4NCg==