From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D4ACF1093170 for ; Sat, 21 Mar 2026 05:26:24 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 0E7D010EB87; Sat, 21 Mar 2026 05:26:24 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (1024-bit key; unprotected) header.d=amd.com header.i=@amd.com header.b="TsEiREcx"; dkim-atps=neutral Received: from BL2PR02CU003.outbound.protection.outlook.com (mail-eastusazon11011061.outbound.protection.outlook.com [52.101.52.61]) by gabe.freedesktop.org (Postfix) with ESMTPS id 64B6F10E1F8 for ; Sat, 21 Mar 2026 05:26:22 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=sJa51/0rzxhnGw54XKrkWDPzm9A9O+EVPMStRcnpYAUrCJxUXEiXGn2MfZMpfm84+LOysowdjSR2TwKgaB9H05HziWNSjyQze0hxSuXhwFaECSh7wmXPWwOXoUx/Zp0e0tW2aYnamX/WUpOb+sY07pbjqyyhQGotZ4segCLkF+D4T8iunpaFHFo75rdzyPf6S/QWfoSST6DYbyjb4XLEcdMo15NuWzwzLRmeSeTERLGF6dr2AelsVuOavb2qiMkHT+zvC2AFRF55xoX+HHiZY0r5mFpvPJOWtrmpgQuY5vM7XDkyC3IHgZcvpysZae7jJAnNqgD20GW9Z/V908ahuw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=EYt/gf+aNhRoUZRXBn4Qgly6sp6EFeN7tQM2uOLliQE=; b=i6KbdI3EccGXwepV3cugZNqC0p3oSvx0Yd0EyAouPgBNWJudNjGZdLLiHluohZNp+VqWh2yJHU7fpAQVbOcgcRZZ44eF0O8WCVDcyA38AbkO7G3caEZeDksDPovqvzZDo4lt83f2TqvEVUshS8FkAYZLD/Aen82Tgd1selz8lWdDB6ZFs8IxrAosGr5TyIBCyZNiq40Wqann+lEGCDsSYLeBNqx32vu7bHZC5IjXgGQS6IZ8Hbe2af7PGcHA2Ic96UTT7lSqA8wo4CkPyI9C8G+ZRZcO6w2RRf1/f75DLD1TxOGO1e1Cohs5je4O9+jjn9WBFERLCejQLF10kyaIFA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=kernel.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=EYt/gf+aNhRoUZRXBn4Qgly6sp6EFeN7tQM2uOLliQE=; b=TsEiREcx3WEG1u6Yjf85mLunUeuxsZLff3GPdaz/mXLyUdSVYTXwNr7b2+z2lIKz3Kx7aIRRvWnjLYbMf6iTdRRG/RxkIbAzH6artbMi3ztwJmwwV1Yi89fQK+l0+CmJ/lo85DokZJHDJuTunoj+sm8egp1LqWwh+Zm824GcINA= Received: from SN7PR04CA0072.namprd04.prod.outlook.com (2603:10b6:806:121::17) by DS0PR12MB8504.namprd12.prod.outlook.com (2603:10b6:8:155::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9745.15; Sat, 21 Mar 2026 05:26:13 +0000 Received: from SN1PEPF0002BA4E.namprd03.prod.outlook.com (2603:10b6:806:121:cafe::83) by SN7PR04CA0072.outlook.office365.com (2603:10b6:806:121::17) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9723.20 via Frontend Transport; Sat, 21 Mar 2026 05:26:13 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by SN1PEPF0002BA4E.mail.protection.outlook.com (10.167.242.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.19 via Frontend Transport; Sat, 21 Mar 2026 05:26:13 +0000 Received: from satlexmb08.amd.com (10.181.42.217) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Sat, 21 Mar 2026 00:26:12 -0500 Received: from [172.19.71.207] (10.180.168.240) by satlexmb08.amd.com (10.181.42.217) with Microsoft SMTP Server id 15.2.2562.17 via Frontend Transport; Sat, 21 Mar 2026 00:26:12 -0500 Message-ID: Date: Fri, 20 Mar 2026 22:26:12 -0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: [PATCH V2] accel/amdxdna: Refactor GEM BO handling and add helper APIs for address retrieval Content-Language: en-US To: "Mario Limonciello (AMD) (kernel.org)" , , , , CC: Max Zhen , , References: <20260320210615.1973016-1-lizhi.hou@amd.com> <7606b8a9-b9fa-43f6-906f-d87255dd8434@kernel.org> From: Lizhi Hou In-Reply-To: <7606b8a9-b9fa-43f6-906f-d87255dd8434@kernel.org> Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: base64 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN1PEPF0002BA4E:EE_|DS0PR12MB8504:EE_ X-MS-Office365-Filtering-Correlation-Id: 0b1d7720-1a02-4f13-3884-08de870a5e57 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|376014|36860700016|1800799024|56012099003|22082099003|18002099003|7053199007; X-Microsoft-Antispam-Message-Info: vdBNmuoHXdfVuk7nm4WltLouO86zfImMmfFFJz3rjuAeM/zRCFORCkjrIPfodgqd1ijlHP2v+iCI09aMh9nEC+Z9NMLZApYwQDCmLTv7gSXPiDfXnwgkni5HidLsTPqiPxqCOY+viJNXXfN0m4vhRQlj2FJZlsG9NFjJlBuc/bNe9qFIIuMaJWwopXp4zy7BBLhw4geTc1YAZUBHjXJclXqRjPeQdJNuDZ3kUaxuyOXH6AwEDs3xZ/L55MzF6/r6AmIHZinNNESnue4c7NsiSPDUiGj29a0RY8umC+6YQmpTIqHianRFvStaeKyZezht5RzoK/VrvVlydYwWJim+bWpwXEK0cZkvI4b0VYtsNzW4Em9o8Emxs0eCmXwNODNiCzUpo2NTbo3Csb0P1LNfnERtkDPdfTN8dj8ngfRSrW/XGGR0aKrEAsctpKq5QDxHwNhKYtiQJLXkFYUGOZglaJkRxGti57eBZzAuGXDKalWOlhkotipgLPinep7kOwmKZ7t87eHHGW1PKvCFgpIVJKCd57r3vRSjdKPCYnDteyBHvgaHccrpP1QYTnNYSIZtaYv7rfVh8euLHLhtNV4oyG77UFdBfOVsrsj7kIHX7k1xWGyUBk8fTCWID/RAs5nVBEHN6TQrADNePNmR2Hisn9hy/JgiU0Aop5mbC+jW/1Xj/Sav6Sd3pUfVf3JGaVoFH0rYTMboTTfpMGCxy9qaeDlFQNgOhcGaX1hdZKYQjUDyWSj8SbgWQjy19vzbzGOiHr51ZumE+zA8d5DdjQNn5Q== X-Forefront-Antispam-Report: CIP:165.204.84.17; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:satlexmb07.amd.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(82310400026)(376014)(36860700016)(1800799024)(56012099003)(22082099003)(18002099003)(7053199007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 968Wd+mQXd1kHR+URraZeqkL8lJDpVrS8SZBEsPGomY5QxnddWOzw9UjMDsi3JkabIbdNdY7lgL6s0gExUx3KjG22ayrJ35cN0DpnWe10d4Zls66xSOICSHHMgk/t3sES8x+d52biz5hbPKMunFaiY0508LaxMENwomQLbBBtWh2XEwKZrrDdtl2gjQNCo3/P8Uw3NA7dSULrSGICVzGExb03H4/FdUt+slJlCqQz7Tpozdcd83KR1NpllBp1NnQTB/yiWxoktGd26E4epilcXHLHaGLzNt1P3y4ifCMqxqy2PWSXdz98CJRCLZ/XIpmZHFFR/6LHNSn4hoevsn/6KC59hI6aqRYvTUS2UNHKQ+shQWUuKrPV9gS/Zf3VokTc8fSP6m9i6saR46mQFvg6xrAS94AGYTZHpxtvuq7Uc/GD34jSECAQ//vFxMvzc9w X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Mar 2026 05:26:13.4768 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0b1d7720-1a02-4f13-3884-08de870a5e57 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d; Ip=[165.204.84.17]; Helo=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SN1PEPF0002BA4E.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB8504 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Ck9uIDMvMjAvMjYgMTQ6NDYsIE1hcmlvIExpbW9uY2llbGxvIChBTUQpIChrZXJuZWwub3JnKSB3 cm90ZToKPgo+Cj4gT24gMy8yMC8yMDI2IDQ6MDYgUE0sIExpemhpIEhvdSB3cm90ZToKPj4gRnJv bTogTWF4IFpoZW4gPG1heC56aGVuQGFtZC5jb20+Cj4+Cj4+IFJlZmFjdG9yIGFtZHhkbmEgR0VN IGJ1ZmZlciBvYmplY3QgKEJPKSBoYW5kbGluZyB0byBzaW1wbGlmeSBhZGRyZXNzCj4+IG1hbmFn ZW1lbnQgYW5kIHVuaWZ5IEJPIHR5cGUgc2VtYW50aWNzLgo+Pgo+PiBJbnRyb2R1Y2UgaGVscGVy IEFQSXMgdG8gcmV0cmlldmUgY29tbW9ubHkgdXNlZCBCTyBhZGRyZXNzZXM6Cj4+IC0gVXNlciB2 aXJ0dWFsIGFkZHJlc3MgKFVWQSkKPj4gLSBLZXJuZWwgdmlydHVhbCBhZGRyZXNzIChLVkEpCj4+ IC0gRGV2aWNlIGFkZHJlc3MgKElPVkEvUEEpCj4+Cj4+IFRoZXNlIGhlbHBlcnMgY2VudHJhbGl6 ZSBhZGRyZXNzIGxvb2t1cCBsb2dpYyBhbmQgYXZvaWQgZHVwbGljYXRpbmcKPj4gQk8tc3BlY2lm aWMgaGFuZGxpbmcgYWNyb3NzIHN1Ym1pc3Npb24gYW5kIGV4ZWN1dGlvbiBwYXRocy4gVGhpcyBh bHNvCj4+IGltcHJvdmVzIHJlYWRhYmlsaXR5IGFuZCByZWR1Y2VzIHRoZSByaXNrIG9mIGluY29u c2lzdGVudCBhZGRyZXNzCj4+IGhhbmRsaW5nIGluIGZ1dHVyZSBjaGFuZ2VzLgo+Pgo+PiBBcyBw YXJ0IG9mIHRoZSByZWZhY3RvcjoKPj4gLSBSZW5hbWUgU0hNRU0gQk8gdHlwZSB0byBTSEFSRSB0 byBiZXR0ZXIgcmVmbGVjdCBpdHMgdXNhZ2UuCj4+IC0gTWVyZ2UgQ01EIEJPIGhhbmRsaW5nIGlu dG8gU0hBUkUsIHJlbW92aW5nIHNwZWNpYWwtY2FzZSBsb2dpYyBmb3IKPj4gwqDCoCBjb21tYW5k IGJ1ZmZlcnMuCj4+IC0gQ29uc29saWRhdGUgQk8gdHlwZSBoYW5kbGluZyBwYXRocyB0byByZWR1 Y2UgY29kZSBkdXBsaWNhdGlvbiBhbmQKPj4gwqDCoCBzaW1wbGlmeSBtYWludGVuYW5jZS4KPj4K Pj4gTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaXMgaW50ZW5kZWQuIFRoZSByZWZhY3RvciBwcmVwYXJl cyB0aGUgZHJpdmVyIGZvcgo+PiBmdXR1cmUgZW5oYW5jZW1lbnRzIGJ5IHByb3ZpZGluZyBhIGNs ZWFuZXIgYWJzdHJhY3Rpb24gZm9yIEJPIGFkZHJlc3MKPj4gbWFuYWdlbWVudC4KPj4KPj4gU2ln bmVkLW9mZi1ieTogTWF4IFpoZW4gPG1heC56aGVuQGFtZC5jb20+Cj4gWW91IGZvcmdvdCB0byBp bmNsdWRlIHlvdXIgUy1vLWIgaW4gdGhlIGJ1bXAuwqAgUGxlYXNlIGluY2x1ZGUgaXQgd2hlbiAK PiBjb21taXR0aW5nLgo+Cj4gUmV2aWV3ZWQtYnk6IE1hcmlvIExpbW9uY2llbGxvIChBTUQpIDxz dXBlcm0xQGtlcm5lbC5vcmc+ClRoYW5rcy4gQXBwbGllZCB0byBkcm0tbWlzYy1uZXh0Cj4KPj4g LS0tCj4+IMKgIGRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jwqDCoMKgwqDCoMKgwqAg fMKgwqAgOCArLQo+PiDCoCBkcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9tZXNzYWdlLmPCoMKg wqAgfMKgIDMzICstCj4+IMKgIGRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2N0eC5jwqDC oMKgwqAgfMKgIDIzICstCj4+IMKgIGRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2N0eC5o wqDCoMKgwqAgfMKgIDE1ICstCj4+IMKgIGRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dl bS5jwqDCoMKgwqAgfCA0MDAgKysrKysrKysrKystLS0tLS0tLS0tLS0tCj4+IMKgIGRyaXZlcnMv YWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5owqDCoMKgwqAgfMKgIDMyICstCj4+IMKgIGRyaXZl cnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX3BjaV9kcnYuYyB8wqDCoCAyICstCj4+IMKgIGRyaXZl cnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX3VidWYuY8KgwqDCoCB8wqAgMTcgKy0KPj4gwqAgZHJp dmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfdWJ1Zi5owqDCoMKgIHzCoMKgIDUgLQo+PiDCoCBp bmNsdWRlL3VhcGkvZHJtL2FtZHhkbmFfYWNjZWwuaMKgwqDCoMKgwqDCoMKgIHzCoMKgIDkgKy0K Pj4gwqAgMTAgZmlsZXMgY2hhbmdlZCwgMjY2IGluc2VydGlvbnMoKyksIDI3OCBkZWxldGlvbnMo LSkKPj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jIAo+ PiBiL2RyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jCj4+IGluZGV4IDYyOTIzNDk4Njhj NS4uNjZkYmJmZDMyMmEyIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWll Ml9jdHguYwo+PiArKysgYi9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYwo+PiBAQCAt NzksNyArNzksNyBAQCBzdGF0aWMgaW50IGFpZTJfaHdjdHhfcmVzdGFydChzdHJ1Y3QgYW1keGRu YV9kZXYgCj4+ICp4ZG5hLCBzdHJ1Y3QgYW1keGRuYV9od2N0eCAqaHcKPj4gwqDCoMKgwqDCoCB9 Cj4+IMKgIMKgwqDCoMKgwqAgcmV0ID0gYWllMl9tYXBfaG9zdF9idWYoeGRuYS0+ZGV2X2hhbmRs ZSwgaHdjdHgtPmZ3X2N0eF9pZCwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBh bWR4ZG5hX29ial9kbWFfYWRkcihod2N0eC0+Y2xpZW50LCBoZWFwKSwKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBhbWR4ZG5hX29ial9kbWFfYWRkcihoZWFwKSwKPj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBoZWFwLT5tZW0uc2l6ZSk7Cj4+IMKgwqDCoMKg wqAgaWYgKHJldCkgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgWEROQV9FUlIoeGRuYSwgIk1hcCBo b3N0IGJ1ZiBmYWlsZWQsIHJldCAlZCIsIHJldCk7Cj4+IEBAIC02NTksMTQgKzY1OSwxNCBAQCBp bnQgYWllMl9od2N0eF9pbml0KHN0cnVjdCBhbWR4ZG5hX2h3Y3R4ICpod2N0eCkKPj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgLnNpemUgPSBNQVhfQ0hBSU5fQ01EQlVGX1NJWkUsCj4+IMKg wqDCoMKgwqDCoMKgwqDCoCB9Owo+PiDCoCAtwqDCoMKgwqDCoMKgwqAgYWJvID0gYW1keGRuYV9k cm1fYWxsb2NfZGV2X2JvKCZ4ZG5hLT5kZGV2LCAmYXJncywgCj4+IGNsaWVudC0+ZmlscCk7Cj4+ ICvCoMKgwqDCoMKgwqDCoCBhYm8gPSBhbWR4ZG5hX2RybV9jcmVhdGVfZGV2X2JvKCZ4ZG5hLT5k ZGV2LCAmYXJncywgCj4+IGNsaWVudC0+ZmlscCk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAo SVNfRVJSKGFibykpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gUFRSX0VS UihhYm8pOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGZyZWVfY21kX2J1ZnM7 Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+IMKgIMKgwqDCoMKgwqDCoMKgwqDCoCBYRE5BX0RC Ryh4ZG5hLCAiQ29tbWFuZCBidWYgJWQgYWRkciAweCVsbHggc2l6ZSAweCVseCIsCj4+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgaSwgYWJvLT5tZW0uZGV2X2FkZHIsIGFiby0+bWVtLnNpemUp Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGksIGFtZHhkbmFfZ2VtX2Rldl9hZGRyKGFi byksIGFiby0+bWVtLnNpemUpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcHJpdi0+Y21kX2J1Zltp XSA9IGFibzsKPj4gwqDCoMKgwqDCoCB9Cj4+IMKgIEBAIC03MDcsNyArNzA3LDcgQEAgaW50IGFp ZTJfaHdjdHhfaW5pdChzdHJ1Y3QgYW1keGRuYV9od2N0eCAqaHdjdHgpCj4+IMKgwqDCoMKgwqAg fQo+PiDCoCDCoMKgwqDCoMKgIHJldCA9IGFpZTJfbWFwX2hvc3RfYnVmKHhkbmEtPmRldl9oYW5k bGUsIGh3Y3R4LT5md19jdHhfaWQsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg YW1keGRuYV9vYmpfZG1hX2FkZHIoaHdjdHgtPmNsaWVudCwgaGVhcCksCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYW1keGRuYV9vYmpfZG1hX2FkZHIoaGVhcCksCj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaGVhcC0+bWVtLnNpemUpOwo+PiDCoMKgwqDC oMKgIGlmIChyZXQpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIFhETkFfRVJSKHhkbmEsICJNYXAg aG9zdCBidWZmZXIgZmFpbGVkLCByZXQgJWQiLCByZXQpOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9hY2NlbC9hbWR4ZG5hL2FpZTJfbWVzc2FnZS5jIAo+PiBiL2RyaXZlcnMvYWNjZWwvYW1keGRu YS9haWUyX21lc3NhZ2UuYwo+PiBpbmRleCA0ZWM1OTEzMDY4NTQuLjZlM2ZiNTJhYTM1ZiAxMDA2 NDQKPj4gLS0tIGEvZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfbWVzc2FnZS5jCj4+ICsrKyBi L2RyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX21lc3NhZ2UuYwo+PiBAQCAtNTQ4LDEwICs1NDgs MTAgQEAgaW50IGFpZTJfY29uZmlnX2N1KHN0cnVjdCBhbWR4ZG5hX2h3Y3R4ICpod2N0eCwKPj4g wqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gwqAgwqDCoMKgwqDCoMKgwqDCoMKgIHJlcS5jZmdzW2ld ID0gRklFTERfUFJFUChBSUUyX01TR19DRkdfQ1VfUERJX0FERFIsCj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFiby0+bWVtLmRldl9hZGRyID4+IHNoaWZ0KTsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYW1keGRuYV9nZW1f ZGV2X2FkZHIoYWJvKSA+PiBzaGlmdCk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXEuY2Znc1tp XSB8PSBGSUVMRF9QUkVQKEFJRTJfTVNHX0NGR19DVV9GVU5DLCBjdS0+Y3VfZnVuYyk7Cj4+IMKg wqDCoMKgwqDCoMKgwqDCoCBYRE5BX0RCRyh4ZG5hLCAiQ1UgJWQgZnVsbCBhZGRyIDB4JWxseCwg Y2ZnIDB4JXgiLCBpLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFiby0+bWVtLmRldl9h ZGRyLCByZXEuY2Znc1tpXSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYW1keGRuYV9n ZW1fZGV2X2FkZHIoYWJvKSwgcmVxLmNmZ3NbaV0pOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZHJt X2dlbV9vYmplY3RfcHV0KGdvYmopOwo+PiDCoMKgwqDCoMKgIH0KPj4gwqDCoMKgwqDCoCByZXEu bnVtX2N1cyA9IGh3Y3R4LT5jdXMtPm51bV9jdXM7Cj4+IEBAIC05OTgsNiArOTk4LDcgQEAgaW50 IGFpZTJfY21kbGlzdF9tdWx0aV9leGVjYnVmKHN0cnVjdCAKPj4gYW1keGRuYV9od2N0eCAqaHdj dHgsCj4+IMKgwqDCoMKgwqAgc3RydWN0IG1haWxib3hfY2hhbm5lbCAqY2hhbm4gPSBod2N0eC0+ cHJpdi0+bWJveF9jaGFubjsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgYW1keGRuYV9jbGllbnQgKmNs aWVudCA9IGh3Y3R4LT5jbGllbnQ7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGFtZHhkbmFfZ2VtX29i aiAqY21kX2FibyA9IGpvYi0+Y21kX2JvOwo+PiArwqDCoMKgIHZvaWQgKmNtZF9idWYgPSBhbWR4 ZG5hX2dlbV92bWFwKGNtZGJ1Zl9hYm8pOwo+PiDCoMKgwqDCoMKgIHN0cnVjdCBhbWR4ZG5hX2Rl diAqeGRuYSA9IGNsaWVudC0+eGRuYTsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgYW1keGRuYV9jbWRf Y2hhaW4gKnBheWxvYWQ7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IHhkbmFfbWFpbGJveF9tc2cgbXNn Owo+PiBAQCAtMTAwOSw2ICsxMDEwLDkgQEAgaW50IGFpZTJfY21kbGlzdF9tdWx0aV9leGVjYnVm KHN0cnVjdCAKPj4gYW1keGRuYV9od2N0eCAqaHdjdHgsCj4+IMKgwqDCoMKgwqAgdTMyIG9wOwo+ PiDCoMKgwqDCoMKgIHUzMiBpOwo+PiDCoCArwqDCoMKgIGlmICghY21kX2J1ZikKPj4gK8KgwqDC oMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+PiArCj4+IMKgwqDCoMKgwqAgb3AgPSBhbWR4ZG5h X2NtZF9nZXRfb3AoY21kX2Fibyk7Cj4+IMKgwqDCoMKgwqAgcGF5bG9hZCA9IGFtZHhkbmFfY21k X2dldF9wYXlsb2FkKGNtZF9hYm8sICZwYXlsb2FkX2xlbik7Cj4+IMKgwqDCoMKgwqAgaWYgKG9w ICE9IEVSVF9DTURfQ0hBSU4pIHsKPj4gQEAgLTEwMzIsMTUgKzEwMzYsMTQgQEAgaW50IGFpZTJf Y21kbGlzdF9tdWx0aV9leGVjYnVmKHN0cnVjdCAKPj4gYW1keGRuYV9od2N0eCAqaHdjdHgsCj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgYm9oID0gKHUzMikocGF5bG9hZC0+ZGF0YVtpXSk7Cj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm87Cj4+IMKgIC3C oMKgwqDCoMKgwqDCoCBhYm8gPSBhbWR4ZG5hX2dlbV9nZXRfb2JqKGNsaWVudCwgYm9oLCBBTURY RE5BX0JPX0NNRCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBhYm8gPSBhbWR4ZG5hX2dlbV9nZXRfb2Jq KGNsaWVudCwgYm9oLCBBTURYRE5BX0JPX1NITUVNKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlm ICghYWJvKSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFhETkFfRVJSKHhkbmEsICJG YWlsZWQgdG8gZmluZCBjbWQgQk8gJWQiLCBib2gpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXR1cm4gLUVOT0VOVDsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gwqAgwqDCoMKg wqDCoMKgwqDCoMKgIHNpemUgPSBjbWRidWZfYWJvLT5tZW0uc2l6ZSAtIG9mZnNldDsKPj4gLcKg wqDCoMKgwqDCoMKgIHJldCA9IGFpZTJfY21kbGlzdF9maWxsX3Nsb3QoY21kYnVmX2Fiby0+bWVt Lmt2YSArIG9mZnNldCwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBhYm8sICZzaXplLCAmb3ApOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gYWll Ml9jbWRsaXN0X2ZpbGxfc2xvdChjbWRfYnVmICsgb2Zmc2V0LCBhYm8sICZzaXplLCAKPj4gJm9w KTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGFtZHhkbmFfZ2VtX3B1dF9vYmooYWJvKTsKPj4gwqDC oMKgwqDCoMKgwqDCoMKgIGlmIChyZXQpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJl dHVybiByZXQ7Cj4+IEBAIC0xMDUwLDE2ICsxMDUzLDE2IEBAIGludCBhaWUyX2NtZGxpc3RfbXVs dGlfZXhlY2J1ZihzdHJ1Y3QgCj4+IGFtZHhkbmFfaHdjdHggKmh3Y3R4LAo+PiDCoCDCoMKgwqDC oMKgIFhETkFfREJHKHhkbmEsICJUb3RhbCAlZCBjb21tYW5kczoiLCBjY250KTsKPj4gwqDCoMKg wqDCoCBwcmludF9oZXhfZHVtcF9kZWJ1ZygiY21kYnVmczogIiwgRFVNUF9QUkVGSVhfT0ZGU0VU LCAxNiwgNCwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNtZGJ1Zl9hYm8t Pm1lbS5rdmEsIG9mZnNldCwgZmFsc2UpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgY21kX2J1Ziwgb2Zmc2V0LCBmYWxzZSk7Cj4+IMKgIMKgwqDCoMKgwqAgbXNnLm9wY29k ZSA9IEVYRUNfTVNHX09QUyh4ZG5hKS0+Z2V0X2NoYWluX21zZ19vcChvcCk7Cj4+IMKgwqDCoMKg wqAgaWYgKG1zZy5vcGNvZGUgPT0gTVNHX09QX01BWF9PUENPREUpCj4+IMKgwqDCoMKgwqDCoMKg wqDCoCByZXR1cm4gLUVPUE5PVFNVUFA7Cj4+IMKgIMKgwqDCoMKgwqAgLyogVGhlIG9mZnNldCBp cyB0aGUgYWNjdW11bGF0ZWQgdG90YWwgc2l6ZSBvZiB0aGUgY21kIGJ1ZmZlciAqLwo+PiAtwqDC oMKgIEVYRUNfTVNHX09QUyh4ZG5hKS0+aW5pdF9jaGFpbl9yZXEoJnJlcSwgY21kYnVmX2Fiby0+ bWVtLmRldl9hZGRyLAo+PiArwqDCoMKgIEVYRUNfTVNHX09QUyh4ZG5hKS0+aW5pdF9jaGFpbl9y ZXEoJnJlcSwgCj4+IGFtZHhkbmFfZ2VtX2Rldl9hZGRyKGNtZGJ1Zl9hYm8pLAo+PiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb2Zmc2V0LCBjY250KTsK Pj4gLcKgwqDCoCBkcm1fY2xmbHVzaF92aXJ0X3JhbmdlKGNtZGJ1Zl9hYm8tPm1lbS5rdmEsIG9m ZnNldCk7Cj4+ICvCoMKgwqAgZHJtX2NsZmx1c2hfdmlydF9yYW5nZShjbWRfYnVmLCBvZmZzZXQp Owo+PiDCoCDCoMKgwqDCoMKgIG1zZy5oYW5kbGUgPSBqb2I7Cj4+IMKgwqDCoMKgwqAgbXNnLm5v dGlmeV9jYiA9IG5vdGlmeV9jYjsKPj4gQEAgLTEwODQsMjcgKzEwODcsMjkgQEAgaW50IGFpZTJf Y21kbGlzdF9zaW5nbGVfZXhlY2J1ZihzdHJ1Y3QgCj4+IGFtZHhkbmFfaHdjdHggKmh3Y3R4LAo+ PiDCoMKgwqDCoMKgIHN0cnVjdCBtYWlsYm94X2NoYW5uZWwgKmNoYW5uID0gaHdjdHgtPnByaXYt Pm1ib3hfY2hhbm47Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGFtZHhkbmFfZGV2ICp4ZG5hID0gaHdj dHgtPmNsaWVudC0+eGRuYTsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICpj bWRfYWJvID0gam9iLT5jbWRfYm87Cj4+ICvCoMKgwqAgdm9pZCAqY21kX2J1ZiA9IGFtZHhkbmFf Z2VtX3ZtYXAoY21kYnVmX2Fibyk7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IHhkbmFfbWFpbGJveF9t c2cgbXNnOwo+PiDCoMKgwqDCoMKgIHVuaW9uIGV4ZWNfY2hhaW5fcmVxIHJlcTsKPj4gwqDCoMKg wqDCoCB1MzIgb3AgPSBFUlRfSU5WQUxJRF9DTUQ7Cj4+IMKgwqDCoMKgwqAgc2l6ZV90IHNpemU7 Cj4+IMKgwqDCoMKgwqAgaW50IHJldDsKPj4gwqAgK8KgwqDCoCBpZiAoIWNtZF9idWYpCj4+ICvC oMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT01FTTsKPj4gKwo+PiDCoMKgwqDCoMKgIHNpemUgPSBj bWRidWZfYWJvLT5tZW0uc2l6ZTsKPj4gLcKgwqDCoCByZXQgPSBhaWUyX2NtZGxpc3RfZmlsbF9z bG90KGNtZGJ1Zl9hYm8tPm1lbS5rdmEsIGNtZF9hYm8sIAo+PiAmc2l6ZSwgJm9wKTsKPj4gK8Kg wqDCoCByZXQgPSBhaWUyX2NtZGxpc3RfZmlsbF9zbG90KGNtZF9idWYsIGNtZF9hYm8sICZzaXpl LCAmb3ApOwo+PiDCoMKgwqDCoMKgIGlmIChyZXQpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gcmV0Owo+PiDCoCAtwqDCoMKgIHByaW50X2hleF9kdW1wX2RlYnVnKCJjbWRidWY6ICIsIERV TVBfUFJFRklYX09GRlNFVCwgMTYsIDQsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBjbWRidWZfYWJvLT5tZW0ua3ZhLCBzaXplLCBmYWxzZSk7Cj4+ICvCoMKgwqAgcHJpbnRf aGV4X2R1bXBfZGVidWcoImNtZGJ1ZjogIiwgRFVNUF9QUkVGSVhfT0ZGU0VULCAxNiwgNCwgCj4+ IGNtZF9idWYsIHNpemUsIGZhbHNlKTsKPj4gwqAgwqDCoMKgwqDCoCBtc2cub3Bjb2RlID0gRVhF Q19NU0dfT1BTKHhkbmEpLT5nZXRfY2hhaW5fbXNnX29wKG9wKTsKPj4gwqDCoMKgwqDCoCBpZiAo bXNnLm9wY29kZSA9PSBNU0dfT1BfTUFYX09QQ09ERSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJl dHVybiAtRU9QTk9UU1VQUDsKPj4gwqAgLcKgwqDCoCBFWEVDX01TR19PUFMoeGRuYSktPmluaXRf Y2hhaW5fcmVxKCZyZXEsIAo+PiBjbWRidWZfYWJvLT5tZW0uZGV2X2FkZHIsCj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplLCAxKTsKPj4gLcKgwqDC oCBkcm1fY2xmbHVzaF92aXJ0X3JhbmdlKGNtZGJ1Zl9hYm8tPm1lbS5rdmEsIHNpemUpOwo+PiAr wqDCoMKgIEVYRUNfTVNHX09QUyh4ZG5hKS0+aW5pdF9jaGFpbl9yZXEoJnJlcSwgCj4+IGFtZHhk bmFfZ2VtX2Rldl9hZGRyKGNtZGJ1Zl9hYm8pLCBzaXplLCAxKTsKPj4gK8KgwqDCoCBkcm1fY2xm bHVzaF92aXJ0X3JhbmdlKGNtZF9idWYsIHNpemUpOwo+PiDCoCDCoMKgwqDCoMKgIG1zZy5oYW5k bGUgPSBqb2I7Cj4+IMKgwqDCoMKgwqAgbXNnLm5vdGlmeV9jYiA9IG5vdGlmeV9jYjsKPj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2N0eC5jIAo+PiBiL2RyaXZl cnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2N0eC5jCj4+IGluZGV4IDRiOTIxNzE1MTc2ZC4uOTRl NTYzOWFkYzY0IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9j dHguYwo+PiArKysgYi9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9jdHguYwo+PiBAQCAt OTQsOSArOTQsMTIgQEAgaW50IGFtZHhkbmFfaHdjdHhfd2FsayhzdHJ1Y3QgYW1keGRuYV9jbGll bnQgCj4+ICpjbGllbnQsIHZvaWQgKmFyZywKPj4gwqAgwqAgdm9pZCAqYW1keGRuYV9jbWRfZ2V0 X3BheWxvYWQoc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvLCB1MzIgCj4+ICpzaXplKQo+PiDC oCB7Cj4+IC3CoMKgwqAgc3RydWN0IGFtZHhkbmFfY21kICpjbWQgPSBhYm8tPm1lbS5rdmE7Cj4+ ICvCoMKgwqAgc3RydWN0IGFtZHhkbmFfY21kICpjbWQgPSBhbWR4ZG5hX2dlbV92bWFwKGFibyk7 Cj4+IMKgwqDCoMKgwqAgdTMyIG51bV9tYXNrcywgY291bnQ7Cj4+IMKgICvCoMKgwqAgaWYgKCFj bWQpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gTlVMTDsKPj4gKwo+PiDCoMKgwqDCoMKgIGlm IChhbWR4ZG5hX2NtZF9nZXRfb3AoYWJvKSA9PSBFUlRfQ01EX0NIQUlOKQo+PiDCoMKgwqDCoMKg wqDCoMKgwqAgbnVtX21hc2tzID0gMDsKPj4gwqDCoMKgwqDCoCBlbHNlCj4+IEBAIC0xMTgsMTAg KzEyMSwxMyBAQCB2b2lkICphbWR4ZG5hX2NtZF9nZXRfcGF5bG9hZChzdHJ1Y3QgCj4+IGFtZHhk bmFfZ2VtX29iaiAqYWJvLCB1MzIgKnNpemUpCj4+IMKgIMKgIHUzMiBhbWR4ZG5hX2NtZF9nZXRf Y3VfaWR4KHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibykKPj4gwqAgewo+PiAtwqDCoMKgIHN0 cnVjdCBhbWR4ZG5hX2NtZCAqY21kID0gYWJvLT5tZW0ua3ZhOwo+PiArwqDCoMKgIHN0cnVjdCBh bWR4ZG5hX2NtZCAqY21kID0gYW1keGRuYV9nZW1fdm1hcChhYm8pOwo+PiDCoMKgwqDCoMKgIHUz MiBudW1fbWFza3MsIGk7Cj4+IMKgwqDCoMKgwqAgdTMyICpjdV9tYXNrOwo+PiDCoCArwqDCoMKg IGlmICghY21kKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIElOVkFMSURfQ1VfSURYOwo+PiAr Cj4+IMKgwqDCoMKgwqAgaWYgKGFtZHhkbmFfY21kX2dldF9vcChhYm8pID09IEVSVF9DTURfQ0hB SU4pCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gSU5WQUxJRF9DVV9JRFg7Cj4+IMKgIEBA IC0xNDEsMTkgKzE0NywyNCBAQCBpbnQgYW1keGRuYV9jbWRfc2V0X2Vycm9yKHN0cnVjdCAKPj4g YW1keGRuYV9nZW1fb2JqICphYm8sCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2 b2lkICplcnJfZGF0YSwgc2l6ZV90IHNpemUpCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3Qg YW1keGRuYV9jbGllbnQgKmNsaWVudCA9IGpvYi0+aHdjdHgtPmNsaWVudDsKPj4gLcKgwqDCoCBz dHJ1Y3QgYW1keGRuYV9jbWQgKmNtZCA9IGFiby0+bWVtLmt2YTsKPj4gK8KgwqDCoCBzdHJ1Y3Qg YW1keGRuYV9jbWQgKmNtZCA9IGFtZHhkbmFfZ2VtX3ZtYXAoYWJvKTsKPj4gwqDCoMKgwqDCoCBz dHJ1Y3QgYW1keGRuYV9jbWRfY2hhaW4gKmNjID0gTlVMTDsKPj4gwqAgK8KgwqDCoCBpZiAoIWNt ZCkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+PiArCj4+IMKgwqDCoMKgwqAg Y21kLT5oZWFkZXIgJj0gfkFNRFhETkFfQ01EX1NUQVRFOwo+PiDCoMKgwqDCoMKgIGNtZC0+aGVh ZGVyIHw9IEZJRUxEX1BSRVAoQU1EWEROQV9DTURfU1RBVEUsIGVycm9yX3N0YXRlKTsKPj4gwqAg wqDCoMKgwqDCoCBpZiAoYW1keGRuYV9jbWRfZ2V0X29wKGFibykgPT0gRVJUX0NNRF9DSEFJTikg ewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgY2MgPSBhbWR4ZG5hX2NtZF9nZXRfcGF5bG9hZChhYm8s IE5VTEwpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgY2MtPmVycm9yX2luZGV4ID0gKGNtZF9pZHgg PCBjYy0+Y29tbWFuZF9jb3VudCkgPyBjbWRfaWR4IDogMDsKPj4gLcKgwqDCoMKgwqDCoMKgIGFi byA9IGFtZHhkbmFfZ2VtX2dldF9vYmooY2xpZW50LCBjYy0+ZGF0YVswXSwgQU1EWEROQV9CT19D TUQpOwo+PiArwqDCoMKgwqDCoMKgwqAgYWJvID0gYW1keGRuYV9nZW1fZ2V0X29iaihjbGllbnQs IGNjLT5kYXRhWzBdLCAKPj4gQU1EWEROQV9CT19TSE1FTSk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDC oCBpZiAoIWFibykKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7 Cj4+IC3CoMKgwqDCoMKgwqDCoCBjbWQgPSBhYm8tPm1lbS5rdmE7Cj4+ICvCoMKgwqDCoMKgwqDC oCBjbWQgPSBhbWR4ZG5hX2dlbV92bWFwKGFibyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIWNt ZCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4+IMKgwqDCoMKg wqAgfQo+PiDCoCDCoMKgwqDCoMKgIG1lbXNldChjbWQtPmRhdGEsIDB4ZmYsIGFiby0+bWVtLnNp emUgLSBzaXplb2YoKmNtZCkpOwo+PiBAQCAtNDcyLDcgKzQ4Myw3IEBAIGludCBhbWR4ZG5hX2Nt ZF9zdWJtaXQoc3RydWN0IGFtZHhkbmFfY2xpZW50IAo+PiAqY2xpZW50LAo+PiDCoMKgwqDCoMKg IGpvYi0+ZHJ2X2NtZCA9IGRydl9jbWQ7Cj4+IMKgIMKgwqDCoMKgwqAgaWYgKGNtZF9ib19oZGwg IT0gQU1EWEROQV9JTlZBTElEX0JPX0hBTkRMRSkgewo+PiAtwqDCoMKgwqDCoMKgwqAgam9iLT5j bWRfYm8gPSBhbWR4ZG5hX2dlbV9nZXRfb2JqKGNsaWVudCwgY21kX2JvX2hkbCwgCj4+IEFNRFhE TkFfQk9fQ01EKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGpvYi0+Y21kX2JvID0gYW1keGRuYV9nZW1f Z2V0X29iaihjbGllbnQsIGNtZF9ib19oZGwsIAo+PiBBTURYRE5BX0JPX1NITUVNKTsKPj4gwqDC oMKgwqDCoMKgwqDCoMKgIGlmICgham9iLT5jbWRfYm8pIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgWEROQV9FUlIoeGRuYSwgIkZhaWxlZCB0byBnZXQgY21kIGJvIGZyb20gJWQiLCAK Pj4gY21kX2JvX2hkbCk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IC1FSU5W QUw7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9jdHguaCAK Pj4gYi9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9jdHguaAo+PiBpbmRleCA1N2RiMTUy N2E5M2IuLmE4NTU3ZDdlODkyMyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9hY2NlbC9hbWR4ZG5h L2FtZHhkbmFfY3R4LmgKPj4gKysrIGIvZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfY3R4 LmgKPj4gQEAgLTE1OCw3ICsxNTgsMTAgQEAgc3RydWN0IGFtZHhkbmFfc2NoZWRfam9iIHsKPj4g wqAgc3RhdGljIGlubGluZSB1MzIKPj4gwqAgYW1keGRuYV9jbWRfZ2V0X29wKHN0cnVjdCBhbWR4 ZG5hX2dlbV9vYmogKmFibykKPj4gwqAgewo+PiAtwqDCoMKgIHN0cnVjdCBhbWR4ZG5hX2NtZCAq Y21kID0gYWJvLT5tZW0ua3ZhOwo+PiArwqDCoMKgIHN0cnVjdCBhbWR4ZG5hX2NtZCAqY21kID0g YW1keGRuYV9nZW1fdm1hcChhYm8pOwo+PiArCj4+ICvCoMKgwqAgaWYgKCFjbWQpCj4+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gRVJUX0lOVkFMSURfQ01EOwo+PiDCoCDCoMKgwqDCoMKgIHJldHVy biBGSUVMRF9HRVQoQU1EWEROQV9DTURfT1BDT0RFLCBjbWQtPmhlYWRlcik7Cj4+IMKgIH0KPj4g QEAgLTE2Niw3ICsxNjksMTAgQEAgYW1keGRuYV9jbWRfZ2V0X29wKHN0cnVjdCBhbWR4ZG5hX2dl bV9vYmogKmFibykKPj4gwqAgc3RhdGljIGlubGluZSB2b2lkCj4+IMKgIGFtZHhkbmFfY21kX3Nl dF9zdGF0ZShzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8sIGVudW0gCj4+IGVydF9jbWRfc3Rh dGUgcykKPj4gwqAgewo+PiAtwqDCoMKgIHN0cnVjdCBhbWR4ZG5hX2NtZCAqY21kID0gYWJvLT5t ZW0ua3ZhOwo+PiArwqDCoMKgIHN0cnVjdCBhbWR4ZG5hX2NtZCAqY21kID0gYW1keGRuYV9nZW1f dm1hcChhYm8pOwo+PiArCj4+ICvCoMKgwqAgaWYgKCFjbWQpCj4+ICvCoMKgwqDCoMKgwqDCoCBy ZXR1cm47Cj4+IMKgIMKgwqDCoMKgwqAgY21kLT5oZWFkZXIgJj0gfkFNRFhETkFfQ01EX1NUQVRF Owo+PiDCoMKgwqDCoMKgIGNtZC0+aGVhZGVyIHw9IEZJRUxEX1BSRVAoQU1EWEROQV9DTURfU1RB VEUsIHMpOwo+PiBAQCAtMTc1LDcgKzE4MSwxMCBAQCBhbWR4ZG5hX2NtZF9zZXRfc3RhdGUoc3Ry dWN0IGFtZHhkbmFfZ2VtX29iaiAKPj4gKmFibywgZW51bSBlcnRfY21kX3N0YXRlIHMpCj4+IMKg IHN0YXRpYyBpbmxpbmUgZW51bSBlcnRfY21kX3N0YXRlCj4+IMKgIGFtZHhkbmFfY21kX2dldF9z dGF0ZShzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8pCj4+IMKgIHsKPj4gLcKgwqDCoCBzdHJ1 Y3QgYW1keGRuYV9jbWQgKmNtZCA9IGFiby0+bWVtLmt2YTsKPj4gK8KgwqDCoCBzdHJ1Y3QgYW1k eGRuYV9jbWQgKmNtZCA9IGFtZHhkbmFfZ2VtX3ZtYXAoYWJvKTsKPj4gKwo+PiArwqDCoMKgIGlm ICghY21kKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEVSVF9DTURfU1RBVEVfSU5WQUxJRDsK Pj4gwqAgwqDCoMKgwqDCoCByZXR1cm4gRklFTERfR0VUKEFNRFhETkFfQ01EX1NUQVRFLCBjbWQt PmhlYWRlcik7Cj4+IMKgIH0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNjZWwvYW1keGRuYS9h bWR4ZG5hX2dlbS5jIAo+PiBiL2RyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jCj4+ IGluZGV4IGQ4MGNmMTY0NzQwYy4uM2MxNWQwNmI2MDQ4IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJz L2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYwo+PiArKysgYi9kcml2ZXJzL2FjY2VsL2FtZHhk bmEvYW1keGRuYV9nZW0uYwo+PiBAQCAtMzAsNyArMzAsNiBAQCBhbWR4ZG5hX2dlbV9oZWFwX2Fs bG9jKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibykKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgYW1k eGRuYV9kZXYgKnhkbmEgPSBjbGllbnQtPnhkbmE7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGFtZHhk bmFfbWVtICptZW0gPSAmYWJvLT5tZW07Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGFtZHhkbmFfZ2Vt X29iaiAqaGVhcDsKPj4gLcKgwqDCoCB1NjQgb2Zmc2V0Owo+PiDCoMKgwqDCoMKgIHUzMiBhbGln bjsKPj4gwqDCoMKgwqDCoCBpbnQgcmV0Owo+PiDCoCBAQCAtNDIsNyArNDEsNyBAQCBhbWR4ZG5h X2dlbV9oZWFwX2FsbG9jKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibykKPj4gwqDCoMKgwqDC oMKgwqDCoMKgIGdvdG8gdW5sb2NrX291dDsKPj4gwqDCoMKgwqDCoCB9Cj4+IMKgIC3CoMKgwqAg aWYgKGhlYXAtPm1lbS51c2VycHRyID09IEFNRFhETkFfSU5WQUxJRF9BRERSKSB7Cj4+ICvCoMKg wqAgaWYgKGFtZHhkbmFfZ2VtX3V2YShoZWFwKSA9PSBBTURYRE5BX0lOVkFMSURfQUREUikgewo+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgWEROQV9FUlIoeGRuYSwgIkludmFsaWQgZGV2IGhlYXAgdXNl cnB0ciIpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVJTlZBTDsKPj4gwqDCoMKgwqDC oMKgwqDCoMKgIGdvdG8gdW5sb2NrX291dDsKPj4gQEAgLTY0LDExICs2Myw2IEBAIGFtZHhkbmFf Z2VtX2hlYXBfYWxsb2Moc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvKQo+PiDCoMKgwqDCoMKg wqDCoMKgwqAgZ290byB1bmxvY2tfb3V0Owo+PiDCoMKgwqDCoMKgIH0KPj4gwqAgLcKgwqDCoCBt ZW0tPmRldl9hZGRyID0gYWJvLT5tbV9ub2RlLnN0YXJ0Owo+PiAtwqDCoMKgIG9mZnNldCA9IG1l bS0+ZGV2X2FkZHIgLSBoZWFwLT5tZW0uZGV2X2FkZHI7Cj4+IC3CoMKgwqAgbWVtLT51c2VycHRy ID0gaGVhcC0+bWVtLnVzZXJwdHIgKyBvZmZzZXQ7Cj4+IC3CoMKgwqAgbWVtLT5rdmEgPSBoZWFw LT5tZW0ua3ZhICsgb2Zmc2V0Owo+PiAtCj4+IMKgwqDCoMKgwqAgZHJtX2dlbV9vYmplY3RfZ2V0 KHRvX2dvYmooaGVhcCkpOwo+PiDCoCDCoCB1bmxvY2tfb3V0Ogo+PiBAQCAtNzcsMTMgKzcxLDYg QEAgYW1keGRuYV9nZW1faGVhcF9hbGxvYyhzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8pCj4+ IMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4gwqAgfQo+PiDCoCAtc3RhdGljIHZvaWQKPj4gLWFt ZHhkbmFfZ2VtX2Rlc3Ryb3lfb2JqKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibykKPj4gLXsK Pj4gLcKgwqDCoCBtdXRleF9kZXN0cm95KCZhYm8tPmxvY2spOwo+PiAtwqDCoMKgIGtmcmVlKGFi byk7Cj4+IC19Cj4+IC0KPj4gwqAgc3RhdGljIHZvaWQKPj4gwqAgYW1keGRuYV9nZW1faGVhcF9m cmVlKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibykKPj4gwqAgewo+PiBAQCAtOTksNiArODYs MTA1IEBAIGFtZHhkbmFfZ2VtX2hlYXBfZnJlZShzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8p Cj4+IMKgwqDCoMKgwqAgbXV0ZXhfdW5sb2NrKCZhYm8tPmNsaWVudC0+bW1fbG9jayk7Cj4+IMKg IH0KPj4gwqAgK3N0YXRpYyBzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICoKPj4gK2FtZHhkbmFfZ2Vt X2NyZWF0ZV9vYmooc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90IHNpemUpCj4+ICt7Cj4+ ICvCoMKgwqAgc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvOwo+PiArCj4+ICvCoMKgwqAgYWJv ID0ga3phbGxvY19vYmooKmFibyk7Cj4+ICvCoMKgwqAgaWYgKCFhYm8pCj4+ICvCoMKgwqDCoMKg wqDCoCByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPj4gKwo+PiArwqDCoMKgIGFiby0+cGlubmVk ID0gZmFsc2U7Cj4+ICvCoMKgwqAgYWJvLT5hc3NpZ25lZF9od2N0eCA9IEFNRFhETkFfSU5WQUxJ RF9DVFhfSEFORExFOwo+PiArwqDCoMKgIG11dGV4X2luaXQoJmFiby0+bG9jayk7Cj4+ICsKPj4g K8KgwqDCoCBhYm8tPm1lbS5kbWFfYWRkciA9IEFNRFhETkFfSU5WQUxJRF9BRERSOwo+PiArwqDC oMKgIGFiby0+bWVtLnV2YSA9IEFNRFhETkFfSU5WQUxJRF9BRERSOwo+PiArwqDCoMKgIGFiby0+ bWVtLnNpemUgPSBzaXplOwo+PiArwqDCoMKgIElOSVRfTElTVF9IRUFEKCZhYm8tPm1lbS51bWFw X2xpc3QpOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIGFibzsKPj4gK30KPj4gKwo+PiArc3RhdGlj IHZvaWQKPj4gK2FtZHhkbmFfZ2VtX2Rlc3Ryb3lfb2JqKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmog KmFibykKPj4gK3sKPj4gK8KgwqDCoCBtdXRleF9kZXN0cm95KCZhYm8tPmxvY2spOwo+PiArwqDC oMKgIGtmcmVlKGFibyk7Cj4+ICt9Cj4+ICsKPj4gKy8qCj4+ICsgKiBPYnRhaW5zIGEga2VybmVs IHZpcnR1YWwgYWRkcmVzcyBvbiB0aGUgQk8gKHVzdWFsbHkgb2Ygc21hbGwgc2l6ZSkuCj4+ICsg KiBUaGUgbWFwcGluZyBpcyBlc3RhYmxpc2hlZCBvbiB0aGUgZmlyc3QgY2FsbCBhbmQgc3RheXMg dmFsaWQgdW50aWwKPj4gKyAqIGFtZHhkbmFfZ2VtX3Z1bm1hcCgpIGlzIGNhbGxlZC4KPj4gKyAq Lwo+PiArdm9pZCAqYW1keGRuYV9nZW1fdm1hcChzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8p Cj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGlvc3lzX21hcCBtYXAgPSBJT1NZU19NQVBfSU5JVF9W QUREUihOVUxMKTsKPj4gK8KgwqDCoCBpbnQgcmV0Owo+PiArCj4+ICvCoMKgwqAgaWYgKGFiby0+ bWVtLmt2YSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBhYm8tPm1lbS5rdmE7Cj4+ICsKPj4g K8KgwqDCoCAvKiBUaGUgZmlyc3QgY2FsbCB0byBnZXQgdGhlIGt2YSwgdGFraW5nIHNsb3cgcGF0 aC4gKi8KPj4gK8KgwqDCoCBndWFyZChtdXRleCkoJmFiby0+bG9jayk7Cj4+ICsKPj4gK8KgwqDC oCBpZiAoIWFiby0+bWVtLmt2YSkgewo+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gZHJtX2dlbV92 bWFwKHRvX2dvYmooYWJvKSwgJm1hcCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmV0KQo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBYRE5BX0VSUihhYm8tPmNsaWVudC0+eGRuYSwgIlZtYXAg Ym8gZmFpbGVkLCByZXQgJWQiLCByZXQpOwo+PiArwqDCoMKgwqDCoMKgwqAgZWxzZQo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBhYm8tPm1lbS5rdmEgPSBtYXAudmFkZHI7Cj4+ICvCoMKgwqAg fQo+PiArwqDCoMKgIHJldHVybiBhYm8tPm1lbS5rdmE7Cj4+ICt9Cj4+ICsKPj4gKy8qCj4+ICsg KiBGcmVlIG1hcHBpbmcgZXN0YWJsaXNoZWQgdGhyb3VnaCBhbWR4ZG5hX2dlbV92bWFwKCkKPj4g KyAqLwo+PiArc3RhdGljIHZvaWQgYW1keGRuYV9nZW1fdnVubWFwKHN0cnVjdCBhbWR4ZG5hX2dl bV9vYmogKmFibykKPj4gK3sKPj4gK8KgwqDCoCBndWFyZChtdXRleCkoJmFiby0+bG9jayk7Cj4+ ICsKPj4gK8KgwqDCoCBpZiAoYWJvLT5tZW0ua3ZhKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBzdHJ1 Y3QgaW9zeXNfbWFwIG1hcCA9IElPU1lTX01BUF9JTklUX1ZBRERSKGFiby0+bWVtLmt2YSk7Cj4+ ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGRybV9nZW1fdnVubWFwKHRvX2dvYmooYWJvKSwgJm1hcCk7 Cj4+ICvCoMKgwqDCoMKgwqDCoCBhYm8tPm1lbS5rdmEgPSBOVUxMOwo+PiArwqDCoMKgIH0KPj4g K30KPj4gKwo+PiArLyoKPj4gKyAqIE9idGFpbiB0aGUgdXNlciB2aXJ0dWFsIGFkZHJlc3MgZm9y IGFjY2Vzc2luZyB0aGUgQk8uCj4+ICsgKiBJdCBjYW4gYmUgdXNlZCBmb3IgZGV2aWNlIHRvIGFj Y2VzcyB0aGUgQk8gd2hlbiBQQVNJRCBpcyBlbmFibGVkLgo+PiArICovCj4+ICt1NjQgYW1keGRu YV9nZW1fdXZhKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibykKPj4gK3sKPj4gK8KgwqDCoCBp ZiAoYWJvLT50eXBlID09IEFNRFhETkFfQk9fREVWKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBzdHJ1 Y3QgYW1keGRuYV9nZW1fb2JqICpoZWFwID0gYWJvLT5jbGllbnQtPmRldl9oZWFwOwo+PiArwqDC oMKgwqDCoMKgwqAgdTY0IG9mZiA9IGFtZHhkbmFfZGV2X2JvX29mZnNldChhYm8pOwo+PiArCj4+ ICvCoMKgwqDCoMKgwqDCoCBpZiAoYW1keGRuYV9nZW1fdXZhKGhlYXApICE9IEFNRFhETkFfSU5W QUxJRF9BRERSKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gYW1keGRuYV9nZW1f dXZhKGhlYXApICsgb2ZmOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFNRFhETkFfSU5WQUxJ RF9BRERSOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIHJldHVybiBhYm8tPm1lbS51dmE7 Cj4+ICt9Cj4+ICsKPj4gKy8qCj4+ICsgKiBPYnRhaW4gdGhlIGFkZHJlc3MgZm9yIGRldmljZSB0 byBhY2Nlc3MgdGhlIEJPLgo+PiArICovCj4+ICt1NjQgYW1keGRuYV9nZW1fZGV2X2FkZHIoc3Ry dWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvKQo+PiArewo+PiArwqDCoMKgIGlmIChhYm8tPnR5cGUg PT0gQU1EWEROQV9CT19ERVZfSEVBUCkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBhYm8tPmNs aWVudC0+eGRuYS0+ZGV2X2luZm8tPmRldl9tZW1fYmFzZTsKPj4gK8KgwqDCoCBpZiAoYWJvLT50 eXBlID09IEFNRFhETkFfQk9fREVWKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGFiby0+bW1f bm9kZS5zdGFydDsKPj4gK8KgwqDCoCByZXR1cm4gYW1keGRuYV9vYmpfZG1hX2FkZHIoYWJvKTsK Pj4gK30KPj4gKwo+PiDCoCBzdGF0aWMgYm9vbCBhbWR4ZG5hX2htbV9pbnZhbGlkYXRlKHN0cnVj dCBtbXVfaW50ZXJ2YWxfbm90aWZpZXIgKm1uaSwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBjb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICpyYW5nZSwK Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBsb25n IGN1cl9zZXEpCj4+IEBAIC0xNjEsMTYgKzI0NywxOSBAQCBzdGF0aWMgdm9pZCBhbWR4ZG5hX2ht bV91bnJlZ2lzdGVyKHN0cnVjdCAKPj4gYW1keGRuYV9nZW1fb2JqICphYm8sCj4+IMKgIHN0YXRp YyB2b2lkIGFtZHhkbmFfdW1hcF9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpCj4+IMKgIHsKPj4g wqDCoMKgwqDCoCBzdHJ1Y3QgYW1keGRuYV91bWFwICptYXBwID0gY29udGFpbmVyX29mKHJlZiwg c3RydWN0IAo+PiBhbWR4ZG5hX3VtYXAsIHJlZmNudCk7Cj4+ICvCoMKgwqAgc3RydWN0IGFtZHhk bmFfZ2VtX29iaiAqYWJvID0gbWFwcC0+YWJvOwo+PiDCoMKgwqDCoMKgIHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hID0gbWFwcC0+dm1hOwo+PiDCoMKgwqDCoMKgIHN0cnVjdCBhbWR4ZG5hX2Rl diAqeGRuYTsKPj4gwqAgwqDCoMKgwqDCoCBtbXVfaW50ZXJ2YWxfbm90aWZpZXJfcmVtb3ZlKCZt YXBwLT5ub3RpZmllcik7Cj4+IC3CoMKgwqAgaWYgKGlzX2ltcG9ydF9ibyhtYXBwLT5hYm8pICYm IHZtYS0+dm1fZmlsZSAmJiAKPj4gdm1hLT52bV9maWxlLT5mX21hcHBpbmcpCj4+ICvCoMKgwqAg aWYgKGlzX2ltcG9ydF9ibyhhYm8pICYmIHZtYS0+dm1fZmlsZSAmJiB2bWEtPnZtX2ZpbGUtPmZf bWFwcGluZykKPj4gbWFwcGluZ19jbGVhcl91bmV2aWN0YWJsZSh2bWEtPnZtX2ZpbGUtPmZfbWFw cGluZyk7Cj4+IMKgIMKgwqDCoMKgwqAgeGRuYSA9IHRvX3hkbmFfZGV2KHRvX2dvYmoobWFwcC0+ YWJvKS0+ZGV2KTsKPj4gwqDCoMKgwqDCoCBkb3duX3dyaXRlKCZ4ZG5hLT5ub3RpZmllcl9sb2Nr KTsKPj4gwqDCoMKgwqDCoCBsaXN0X2RlbCgmbWFwcC0+bm9kZSk7Cj4+ICvCoMKgwqAgaWYgKGxp c3RfZW1wdHkoJmFiby0+bWVtLnVtYXBfbGlzdCkpCj4+ICvCoMKgwqDCoMKgwqDCoCBhYm8tPm1l bS51dmEgPSBBTURYRE5BX0lOVkFMSURfQUREUjsKPj4gwqDCoMKgwqDCoCB1cF93cml0ZSgmeGRu YS0+bm90aWZpZXJfbG9jayk7Cj4+IMKgIMKgwqDCoMKgwqAga3ZmcmVlKG1hcHAtPnJhbmdlLmht bV9wZm5zKTsKPj4gQEAgLTIzMiwxMyArMzIxLDEzIEBAIHN0YXRpYyBpbnQgYW1keGRuYV9obW1f cmVnaXN0ZXIoc3RydWN0IAo+PiBhbWR4ZG5hX2dlbV9vYmogKmFibywKPj4gwqDCoMKgwqDCoCBt YXBwLT5hYm8gPSBhYm87Cj4+IMKgwqDCoMKgwqAga3JlZl9pbml0KCZtYXBwLT5yZWZjbnQpOwo+ PiDCoCAtwqDCoMKgIGlmIChhYm8tPm1lbS51c2VycHRyID09IEFNRFhETkFfSU5WQUxJRF9BRERS KQo+PiAtwqDCoMKgwqDCoMKgwqAgYWJvLT5tZW0udXNlcnB0ciA9IGFkZHI7Cj4+IMKgwqDCoMKg wqAgSU5JVF9XT1JLKCZtYXBwLT5obW1fdW5yZWdfd29yaywgYW1keGRuYV9obW1fdW5yZWdfd29y ayk7Cj4+IMKgwqDCoMKgwqAgaWYgKGlzX2ltcG9ydF9ibyhhYm8pICYmIHZtYS0+dm1fZmlsZSAm JiB2bWEtPnZtX2ZpbGUtPmZfbWFwcGluZykKPj4gbWFwcGluZ19zZXRfdW5ldmljdGFibGUodm1h LT52bV9maWxlLT5mX21hcHBpbmcpOwo+PiDCoCDCoMKgwqDCoMKgIGRvd25fd3JpdGUoJnhkbmEt Pm5vdGlmaWVyX2xvY2spOwo+PiArwqDCoMKgIGlmIChsaXN0X2VtcHR5KCZhYm8tPm1lbS51bWFw X2xpc3QpKQo+PiArwqDCoMKgwqDCoMKgwqAgYWJvLT5tZW0udXZhID0gYWRkcjsKPj4gwqDCoMKg wqDCoCBsaXN0X2FkZF90YWlsKCZtYXBwLT5ub2RlLCAmYWJvLT5tZW0udW1hcF9saXN0KTsKPj4g wqDCoMKgwqDCoCB1cF93cml0ZSgmeGRuYS0+bm90aWZpZXJfbG9jayk7Cj4+IMKgIEBAIC0yNTYs MTAgKzM0NSwxMSBAQCBzdGF0aWMgdm9pZCBhbWR4ZG5hX2dlbV9kZXZfb2JqX2ZyZWUoc3RydWN0 IAo+PiBkcm1fZ2VtX29iamVjdCAqZ29iaikKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgYW1keGRuYV9k ZXYgKnhkbmEgPSB0b194ZG5hX2Rldihnb2JqLT5kZXYpOwo+PiDCoMKgwqDCoMKgIHN0cnVjdCBh bWR4ZG5hX2dlbV9vYmogKmFibyA9IHRvX3hkbmFfb2JqKGdvYmopOwo+PiDCoCAtwqDCoMKgIFhE TkFfREJHKHhkbmEsICJCTyB0eXBlICVkIHhkbmFfYWRkciAweCVsbHgiLCBhYm8tPnR5cGUsIAo+ PiBhYm8tPm1lbS5kZXZfYWRkcik7Cj4+ICvCoMKgwqAgWEROQV9EQkcoeGRuYSwgIkJPIHR5cGUg JWQgeGRuYV9hZGRyIDB4JWxseCIsIGFiby0+dHlwZSwgCj4+IGFtZHhkbmFfZ2VtX2Rldl9hZGRy KGFibykpOwo+PiDCoMKgwqDCoMKgIGlmIChhYm8tPnBpbm5lZCkKPj4gwqDCoMKgwqDCoMKgwqDC oMKgIGFtZHhkbmFfZ2VtX3VucGluKGFibyk7Cj4+IMKgICvCoMKgwqAgYW1keGRuYV9nZW1fdnVu bWFwKGFibyk7Cj4+IMKgwqDCoMKgwqAgYW1keGRuYV9nZW1faGVhcF9mcmVlKGFibyk7Cj4+IMKg wqDCoMKgwqAgZHJtX2dlbV9vYmplY3RfcmVsZWFzZShnb2JqKTsKPj4gwqDCoMKgwqDCoCBhbWR4 ZG5hX2dlbV9kZXN0cm95X29iaihhYm8pOwo+PiBAQCAtMzkwLDM1ICs0ODAsNiBAQCBzdGF0aWMg Y29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIAo+PiBhbWR4ZG5hX2RtYWJ1Zl9vcHMgPSB7Cj4+IMKg wqDCoMKgwqAgLnZ1bm1hcCA9IGRybV9nZW1fZG1hYnVmX3Z1bm1hcCwKPj4gwqAgfTsKPj4gwqAg LXN0YXRpYyBpbnQgYW1keGRuYV9nZW1fb2JqX3ZtYXAoc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAq YWJvLCB2b2lkIAo+PiAqKnZhZGRyKQo+PiAtewo+PiAtwqDCoMKgIHN0cnVjdCBpb3N5c19tYXAg bWFwID0gSU9TWVNfTUFQX0lOSVRfVkFERFIoTlVMTCk7Cj4+IC3CoMKgwqAgaW50IHJldDsKPj4g LQo+PiAtwqDCoMKgIGlmIChpc19pbXBvcnRfYm8oYWJvKSkKPj4gLcKgwqDCoMKgwqDCoMKgIHJl dCA9IGRtYV9idWZfdm1hcF91bmxvY2tlZChhYm8tPmRtYV9idWYsICZtYXApOwo+PiAtwqDCoMKg IGVsc2UKPj4gLcKgwqDCoMKgwqDCoMKgIHJldCA9IGRybV9nZW1fdm1hcCh0b19nb2JqKGFibyks ICZtYXApOwo+PiAtCj4+IC3CoMKgwqAgKnZhZGRyID0gbWFwLnZhZGRyOwo+PiAtwqDCoMKgIHJl dHVybiByZXQ7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyB2b2lkIGFtZHhkbmFfZ2VtX29ial92dW5t YXAoc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvKQo+PiAtewo+PiAtwqDCoMKgIHN0cnVjdCBp b3N5c19tYXAgbWFwOwo+PiAtCj4+IC3CoMKgwqAgaWYgKCFhYm8tPm1lbS5rdmEpCj4+IC3CoMKg wqDCoMKgwqDCoCByZXR1cm47Cj4+IC0KPj4gLcKgwqDCoCBpb3N5c19tYXBfc2V0X3ZhZGRyKCZt YXAsIGFiby0+bWVtLmt2YSk7Cj4+IC0KPj4gLcKgwqDCoCBpZiAoaXNfaW1wb3J0X2JvKGFibykp Cj4+IC3CoMKgwqDCoMKgwqDCoCBkbWFfYnVmX3Z1bm1hcF91bmxvY2tlZChhYm8tPmRtYV9idWYs ICZtYXApOwo+PiAtwqDCoMKgIGVsc2UKPj4gLcKgwqDCoMKgwqDCoMKgIGRybV9nZW1fdnVubWFw KHRvX2dvYmooYWJvKSwgJm1hcCk7Cj4+IC19Cj4+IC0KPj4gwqAgc3RhdGljIHN0cnVjdCBkbWFf YnVmICphbWR4ZG5hX2dlbV9wcmltZV9leHBvcnQoc3RydWN0IAo+PiBkcm1fZ2VtX29iamVjdCAq Z29iaiwgaW50IGZsYWdzKQo+PiDCoCB7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGFtZHhkbmFfZ2Vt X29iaiAqYWJvID0gdG9feGRuYV9vYmooZ29iaik7Cj4+IEBAIC00NTIsNyArNTEzLDcgQEAgc3Rh dGljIHZvaWQgYW1keGRuYV9nZW1fb2JqX2ZyZWUoc3RydWN0IAo+PiBkcm1fZ2VtX29iamVjdCAq Z29iaikKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgYW1keGRuYV9kZXYgKnhkbmEgPSB0b194ZG5hX2Rl dihnb2JqLT5kZXYpOwo+PiDCoMKgwqDCoMKgIHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibyA9 IHRvX3hkbmFfb2JqKGdvYmopOwo+PiDCoCAtwqDCoMKgIFhETkFfREJHKHhkbmEsICJCTyB0eXBl ICVkIHhkbmFfYWRkciAweCVsbHgiLCBhYm8tPnR5cGUsIAo+PiBhYm8tPm1lbS5kZXZfYWRkcik7 Cj4+ICvCoMKgwqAgWEROQV9EQkcoeGRuYSwgIkJPIHR5cGUgJWQgeGRuYV9hZGRyIDB4JWxseCIs IGFiby0+dHlwZSwgCj4+IGFtZHhkbmFfZ2VtX2Rldl9hZGRyKGFibykpOwo+PiDCoCDCoMKgwqDC oMKgIGFtZHhkbmFfaG1tX3VucmVnaXN0ZXIoYWJvLCBOVUxMKTsKPj4gwqDCoMKgwqDCoCBmbHVz aF93b3JrcXVldWUoeGRuYS0+bm90aWZpZXJfd3EpOwo+PiBAQCAtNDYzLDE1ICs1MjQsMTYgQEAg c3RhdGljIHZvaWQgYW1keGRuYV9nZW1fb2JqX2ZyZWUoc3RydWN0IAo+PiBkcm1fZ2VtX29iamVj dCAqZ29iaikKPj4gwqDCoMKgwqDCoCBpZiAoYWJvLT50eXBlID09IEFNRFhETkFfQk9fREVWX0hF QVApCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBkcm1fbW1fdGFrZWRvd24oJmFiby0+bW0pOwo+PiDC oCAtwqDCoMKgIGFtZHhkbmFfZ2VtX29ial92dW5tYXAoYWJvKTsKPj4gK8KgwqDCoCBpZiAoYW1k eGRuYV9pb3ZhX29uKHhkbmEpKQo+PiArwqDCoMKgwqDCoMKgwqAgYW1keGRuYV9pb21tdV91bm1h cF9ibyh4ZG5hLCBhYm8pOwo+PiArCj4+ICvCoMKgwqAgYW1keGRuYV9nZW1fdnVubWFwKGFibyk7 Cj4+IMKgwqDCoMKgwqAgbXV0ZXhfZGVzdHJveSgmYWJvLT5sb2NrKTsKPj4gwqAgLcKgwqDCoCBp ZiAoaXNfaW1wb3J0X2JvKGFibykpIHsKPj4gK8KgwqDCoCBpZiAoaXNfaW1wb3J0X2JvKGFibykp Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBhbWR4ZG5hX2ltcG9ydGVkX29ial9mcmVlKGFibyk7Cj4+ IC3CoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+IC3CoMKgwqAgfQo+PiAtCj4+IC3CoMKgwqAgZHJt X2dlbV9zaG1lbV9mcmVlKCZhYm8tPmJhc2UpOwo+PiArwqDCoMKgIGVsc2UKPj4gK8KgwqDCoMKg wqDCoMKgIGRybV9nZW1fc2htZW1fZnJlZSgmYWJvLT5iYXNlKTsKPj4gwqAgfQo+PiDCoCDCoCBz dGF0aWMgaW50IGFtZHhkbmFfZ2VtX29ial9vcGVuKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ29i aiwgCj4+IHN0cnVjdCBkcm1fZmlsZSAqZmlscCkKPj4gQEAgLTQ4MSw0MyArNTQzLDM4IEBAIHN0 YXRpYyBpbnQgYW1keGRuYV9nZW1fb2JqX29wZW4oc3RydWN0IAo+PiBkcm1fZ2VtX29iamVjdCAq Z29iaiwgc3RydWN0IGRybV9maWxlICpmaQo+PiDCoMKgwqDCoMKgIGludCByZXQ7Cj4+IMKgIMKg wqDCoMKgwqAgZ3VhcmQobXV0ZXgpKCZhYm8tPmxvY2spOwo+PiAtwqDCoMKgIGlmIChhYm8tPnJl Zikgewo+PiAtwqDCoMKgwqDCoMKgwqAgYWJvLT5yZWYrKzsKPj4gLcKgwqDCoMKgwqDCoMKgIHJl dHVybiAwOwo+PiAtwqDCoMKgIH0KPj4gwqAgK8KgwqDCoCBpZiAoIWFiby0+Y2xpZW50KQo+PiAr wqDCoMKgwqDCoMKgwqAgYWJvLT5jbGllbnQgPSBmaWxwLT5kcml2ZXJfcHJpdjsKPj4gwqDCoMKg wqDCoCBpZiAoYW1keGRuYV9pb3ZhX29uKHhkbmEpKSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBy ZXQgPSBhbWR4ZG5hX2lvbW11X21hcF9ibyh4ZG5hLCBhYm8pOwo+PiDCoMKgwqDCoMKgwqDCoMKg wqAgaWYgKHJldCkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4g wqDCoMKgwqDCoCB9Cj4+IC3CoMKgwqAgYWJvLT5yZWYrKzsKPj4gwqAgwqDCoMKgwqDCoCByZXR1 cm4gMDsKPj4gwqAgfQo+PiDCoCAtc3RhdGljIHZvaWQgYW1keGRuYV9nZW1fb2JqX2Nsb3NlKHN0 cnVjdCBkcm1fZ2VtX29iamVjdCAqZ29iaiwgCj4+IHN0cnVjdCBkcm1fZmlsZSAqZmlscCkKPj4g K3N0YXRpYyBpbnQgYW1keGRuYV9nZW1fZGV2X29ial92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqLCAKPj4gc3RydWN0IGlvc3lzX21hcCAqbWFwKQo+PiDCoCB7Cj4+IC3CoMKgwqAgc3Ry dWN0IGFtZHhkbmFfZGV2ICp4ZG5hID0gdG9feGRuYV9kZXYoZ29iai0+ZGV2KTsKPj4gLcKgwqDC oCBzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8gPSB0b194ZG5hX29iaihnb2JqKTsKPj4gK8Kg wqDCoCBzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8gPSB0b194ZG5hX29iaihvYmopOwo+PiAr wqDCoMKgIHZvaWQgKmJhc2UgPSBhbWR4ZG5hX2dlbV92bWFwKGFiby0+Y2xpZW50LT5kZXZfaGVh cCk7Cj4+ICvCoMKgwqAgdTY0IG9mZnNldCA9IGFtZHhkbmFfZGV2X2JvX29mZnNldChhYm8pOwo+ PiDCoCAtwqDCoMKgIGd1YXJkKG11dGV4KSgmYWJvLT5sb2NrKTsKPj4gLcKgwqDCoCBhYm8tPnJl Zi0tOwo+PiAtwqDCoMKgIGlmIChhYm8tPnJlZikKPj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybjsK Pj4gLQo+PiAtwqDCoMKgIGlmIChhbWR4ZG5hX2lvdmFfb24oeGRuYSkpCj4+IC3CoMKgwqDCoMKg wqDCoCBhbWR4ZG5hX2lvbW11X3VubWFwX2JvKHhkbmEsIGFibyk7Cj4+ICvCoMKgwqAgaWYgKCFi YXNlKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4+ICvCoMKgwqAgaW9zeXNf bWFwX3NldF92YWRkcihtYXAsIGJhc2UgKyBvZmZzZXQpOwo+PiArwqDCoMKgIHJldHVybiAwOwo+ PiDCoCB9Cj4+IMKgIMKgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3RfZnVuY3Mg Cj4+IGFtZHhkbmFfZ2VtX2Rldl9vYmpfZnVuY3MgPSB7Cj4+IMKgwqDCoMKgwqAgLmZyZWUgPSBh bWR4ZG5hX2dlbV9kZXZfb2JqX2ZyZWUsCj4+ICvCoMKgwqAgLnZtYXAgPSBhbWR4ZG5hX2dlbV9k ZXZfb2JqX3ZtYXAsCj4+IMKgIH07Cj4+IMKgIMKgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2dl bV9vYmplY3RfZnVuY3MgYW1keGRuYV9nZW1fc2htZW1fZnVuY3MgPSB7Cj4+IMKgwqDCoMKgwqAg LmZyZWUgPSBhbWR4ZG5hX2dlbV9vYmpfZnJlZSwKPj4gwqDCoMKgwqDCoCAub3BlbiA9IGFtZHhk bmFfZ2VtX29ial9vcGVuLAo+PiAtwqDCoMKgIC5jbG9zZSA9IGFtZHhkbmFfZ2VtX29ial9jbG9z ZSwKPj4gwqDCoMKgwqDCoCAucHJpbnRfaW5mbyA9IGRybV9nZW1fc2htZW1fb2JqZWN0X3ByaW50 X2luZm8sCj4+IMKgwqDCoMKgwqAgLnBpbiA9IGRybV9nZW1fc2htZW1fb2JqZWN0X3BpbiwKPj4g wqDCoMKgwqDCoCAudW5waW4gPSBkcm1fZ2VtX3NobWVtX29iamVjdF91bnBpbiwKPj4gQEAgLTUy OSwzMSArNTg2LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZ2VtX29iamVjdF9mdW5jcyAK Pj4gYW1keGRuYV9nZW1fc2htZW1fZnVuY3MgPSB7Cj4+IMKgwqDCoMKgwqAgLmV4cG9ydCA9IGFt ZHhkbmFfZ2VtX3ByaW1lX2V4cG9ydCwKPj4gwqAgfTsKPj4gwqAgLXN0YXRpYyBzdHJ1Y3QgYW1k eGRuYV9nZW1fb2JqICoKPj4gLWFtZHhkbmFfZ2VtX2NyZWF0ZV9vYmooc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgc2l6ZV90IHNpemUpCj4+IC17Cj4+IC3CoMKgwqAgc3RydWN0IGFtZHhkbmFfZ2Vt X29iaiAqYWJvOwo+PiAtCj4+IC3CoMKgwqAgYWJvID0ga3phbGxvY19vYmooKmFibyk7Cj4+IC3C oMKgwqAgaWYgKCFhYm8pCj4+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gRVJSX1BUUigtRU5PTUVN KTsKPj4gLQo+PiAtwqDCoMKgIGFiby0+cGlubmVkID0gZmFsc2U7Cj4+IC3CoMKgwqAgYWJvLT5h c3NpZ25lZF9od2N0eCA9IEFNRFhETkFfSU5WQUxJRF9DVFhfSEFORExFOwo+PiAtwqDCoMKgIG11 dGV4X2luaXQoJmFiby0+bG9jayk7Cj4+IC0KPj4gLcKgwqDCoCBhYm8tPm1lbS51c2VycHRyID0g QU1EWEROQV9JTlZBTElEX0FERFI7Cj4+IC3CoMKgwqAgYWJvLT5tZW0uZGV2X2FkZHIgPSBBTURY RE5BX0lOVkFMSURfQUREUjsKPj4gLcKgwqDCoCBhYm8tPm1lbS5kbWFfYWRkciA9IEFNRFhETkFf SU5WQUxJRF9BRERSOwo+PiAtwqDCoMKgIGFiby0+bWVtLnNpemUgPSBzaXplOwo+PiAtwqDCoMKg IElOSVRfTElTVF9IRUFEKCZhYm8tPm1lbS51bWFwX2xpc3QpOwo+PiAtCj4+IC3CoMKgwqAgcmV0 dXJuIGFibzsKPj4gLX0KPj4gLQo+PiDCoCAvKiBGb3IgZHJtX2RyaXZlci0+Z2VtX2NyZWF0ZV9v YmplY3QgY2FsbGJhY2sgKi8KPj4gwqAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICoKPj4gLWFtZHhk bmFfZ2VtX2NyZWF0ZV9vYmplY3RfY2Ioc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90IHNp emUpCj4+ICthbWR4ZG5hX2dlbV9jcmVhdGVfc2htZW1fb2JqZWN0X2NiKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHNpemVfdCBzaXplKQo+PiDCoCB7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGFtZHhk bmFfZ2VtX29iaiAqYWJvOwo+PiDCoCBAQCAtNTY3LDggKzYwMiw5IEBAIGFtZHhkbmFfZ2VtX2Ny ZWF0ZV9vYmplY3RfY2Ioc3RydWN0IGRybV9kZXZpY2UgCj4+ICpkZXYsIHNpemVfdCBzaXplKQo+ PiDCoCB9Cj4+IMKgIMKgIHN0YXRpYyBzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICoKPj4gLWFtZHhk bmFfZ2VtX2NyZWF0ZV9zaG1lbV9vYmplY3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90 IHNpemUpCj4+ICthbWR4ZG5hX2dlbV9jcmVhdGVfc2htZW1fb2JqZWN0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHN0cnVjdCAKPj4gYW1keGRuYV9kcm1fY3JlYXRlX2JvICphcmdzKQo+PiDCoCB7 Cj4+ICvCoMKgwqAgc2l6ZV90IHNpemUgPSBhcmdzLT5zaXplOwo+PiDCoMKgwqDCoMKgIHN0cnVj dCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0gPSBkcm1fZ2VtX3NobWVtX2NyZWF0ZShkZXYs IAo+PiBzaXplKTsKPj4gwqAgwqDCoMKgwqDCoCBpZiAoSVNfRVJSKHNobWVtKSkKPj4gQEAgLTU4 Miw3ICs2MTgsNiBAQCBzdGF0aWMgc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqCj4+IMKgIGFtZHhk bmFfZ2VtX2NyZWF0ZV91YnVmX29iamVjdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3Qg Cj4+IGFtZHhkbmFfZHJtX2NyZWF0ZV9ibyAqYXJncykKPj4gwqAgewo+PiDCoMKgwqDCoMKgIHN0 cnVjdCBhbWR4ZG5hX2RldiAqeGRuYSA9IHRvX3hkbmFfZGV2KGRldik7Cj4+IC3CoMKgwqAgZW51 bSBhbWR4ZG5hX3VidWZfZmxhZyBmbGFncyA9IDA7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGFtZHhk bmFfZHJtX3ZhX3RibCB2YV90Ymw7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpnb2JqOwo+PiDCoMKgwqDCoMKgIHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmOwo+PiBAQCAtNTkz LDEwICs2MjgsNyBAQCBhbWR4ZG5hX2dlbV9jcmVhdGVfdWJ1Zl9vYmplY3Qoc3RydWN0IGRybV9k ZXZpY2UgCj4+ICpkZXYsIHN0cnVjdCBhbWR4ZG5hX2RybV9jcmVhdGUKPj4gwqDCoMKgwqDCoCB9 Cj4+IMKgIMKgwqDCoMKgwqAgaWYgKHZhX3RibC5udW1fZW50cmllcykgewo+PiAtwqDCoMKgwqDC oMKgwqAgaWYgKGFyZ3MtPnR5cGUgPT0gQU1EWEROQV9CT19DTUQpCj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGZsYWdzIHw9IEFNRFhETkFfVUJVRl9GTEFHX01BUF9ETUE7Cj4+IC0KPj4gLcKg wqDCoMKgwqDCoMKgIGRtYV9idWYgPSBhbWR4ZG5hX2dldF91YnVmKGRldiwgZmxhZ3MsIHZhX3Ri bC5udW1fZW50cmllcywKPj4gK8KgwqDCoMKgwqDCoMKgIGRtYV9idWYgPSBhbWR4ZG5hX2dldF91 YnVmKGRldiwgdmFfdGJsLm51bV9lbnRyaWVzLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTY0X3RvX3VzZXJfcHRyKGFyZ3MtPnZhZGRyICsgc2l6 ZW9mKHZhX3RibCkpKTsKPj4gwqDCoMKgwqDCoCB9IGVsc2Ugewo+PiDCoMKgwqDCoMKgwqDCoMKg wqAgZG1hX2J1ZiA9IGRtYV9idWZfZ2V0KHZhX3RibC5kbWFidWZfZmQpOwo+PiBAQCAtNjE2LDE4 ICs2NDgsNiBAQCBhbWR4ZG5hX2dlbV9jcmVhdGVfdWJ1Zl9vYmplY3Qoc3RydWN0IGRybV9kZXZp Y2UgCj4+ICpkZXYsIHN0cnVjdCBhbWR4ZG5hX2RybV9jcmVhdGUKPj4gwqDCoMKgwqDCoCByZXR1 cm4gdG9feGRuYV9vYmooZ29iaik7Cj4+IMKgIH0KPj4gwqAgLXN0YXRpYyBzdHJ1Y3QgYW1keGRu YV9nZW1fb2JqICoKPj4gLWFtZHhkbmFfZ2VtX2NyZWF0ZV9vYmplY3Qoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBhbWR4ZG5hX2Ry bV9jcmVhdGVfYm8gKmFyZ3MpCj4+IC17Cj4+IC3CoMKgwqAgc2l6ZV90IGFsaWduZWRfc3ogPSBQ QUdFX0FMSUdOKGFyZ3MtPnNpemUpOwo+PiAtCj4+IC3CoMKgwqAgaWYgKGFyZ3MtPnZhZGRyKQo+ PiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGFtZHhkbmFfZ2VtX2NyZWF0ZV91YnVmX29iamVjdChk ZXYsIGFyZ3MpOwo+PiAtCj4+IC3CoMKgwqAgcmV0dXJuIGFtZHhkbmFfZ2VtX2NyZWF0ZV9zaG1l bV9vYmplY3QoZGV2LCBhbGlnbmVkX3N6KTsKPj4gLX0KPj4gLQo+PiDCoCBzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKgo+PiDCoCBhbWR4ZG5hX2dlbV9wcmltZV9pbXBvcnQoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgc3RydWN0IGRtYV9idWYgCj4+ICpkbWFfYnVmKQo+PiDCoCB7Cj4+IEBAIC02NjAs NyArNjgwLDggQEAgYW1keGRuYV9nZW1fcHJpbWVfaW1wb3J0KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIAo+PiBzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZikKPj4gwqDCoMKgwqDCoCBhYm8gPSB0b194 ZG5hX29iaihnb2JqKTsKPj4gwqDCoMKgwqDCoCBhYm8tPmF0dGFjaCA9IGF0dGFjaDsKPj4gwqDC oMKgwqDCoCBhYm8tPmRtYV9idWYgPSBkbWFfYnVmOwo+PiAtwqDCoMKgIGFiby0+dHlwZSA9IEFN RFhETkFfQk9fU0hNRU07Cj4+ICvCoMKgwqAgYWJvLT50eXBlID0gQU1EWEROQV9CT19TSEFSRTsK Pj4gK8KgwqDCoCBnb2JqLT5yZXN2ID0gZG1hX2J1Zi0+cmVzdjsKPj4gwqAgwqDCoMKgwqDCoCBy ZXR1cm4gZ29iajsKPj4gwqAgQEAgLTY3NSw5MiArNjk2LDkyIEBAIGFtZHhkbmFfZ2VtX3ByaW1l X2ltcG9ydChzdHJ1Y3QgZHJtX2RldmljZSAKPj4gKmRldiwgc3RydWN0IGRtYV9idWYgKmRtYV9i dWYpCj4+IMKgIH0KPj4gwqAgwqAgc3RhdGljIHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKgo+PiAt YW1keGRuYV9kcm1fYWxsb2Nfc2htZW0oc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGFtZHhkbmFfZHJtX2NyZWF0ZV9ibyAqYXJncywKPj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9maWxlICpmaWxwKQo+PiArYW1keGRu YV9kcm1fY3JlYXRlX3NoYXJlX2JvKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGFtZHhkbmFfZHJtX2NyZWF0ZV9ibyAqYXJn cywgc3RydWN0IGRybV9maWxlIAo+PiAqZmlscCkKPj4gwqAgewo+PiAtwqDCoMKgIHN0cnVjdCBh bWR4ZG5hX2NsaWVudCAqY2xpZW50ID0gZmlscC0+ZHJpdmVyX3ByaXY7Cj4+IMKgwqDCoMKgwqAg c3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvOwo+PiDCoCAtwqDCoMKgIGFibyA9IGFtZHhkbmFf Z2VtX2NyZWF0ZV9vYmplY3QoZGV2LCBhcmdzKTsKPj4gK8KgwqDCoCBpZiAoYXJncy0+dmFkZHIp Cj4+ICvCoMKgwqDCoMKgwqDCoCBhYm8gPSBhbWR4ZG5hX2dlbV9jcmVhdGVfdWJ1Zl9vYmplY3Qo ZGV2LCBhcmdzKTsKPj4gK8KgwqDCoCBlbHNlCj4+ICvCoMKgwqDCoMKgwqDCoCBhYm8gPSBhbWR4 ZG5hX2dlbV9jcmVhdGVfc2htZW1fb2JqZWN0KGRldiwgYXJncyk7Cj4+IMKgwqDCoMKgwqAgaWYg KElTX0VSUihhYm8pKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEVSUl9DQVNUKGFibyk7 Cj4+IMKgIC3CoMKgwqAgYWJvLT5jbGllbnQgPSBjbGllbnQ7Cj4+IC3CoMKgwqAgYWJvLT50eXBl ID0gQU1EWEROQV9CT19TSE1FTTsKPj4gK8KgwqDCoCBpZiAoYXJncy0+dHlwZSA9PSBBTURYRE5B X0JPX0RFVl9IRUFQKQo+PiArwqDCoMKgwqDCoMKgwqAgYWJvLT50eXBlID0gQU1EWEROQV9CT19E RVZfSEVBUDsKPj4gK8KgwqDCoCBlbHNlCj4+ICvCoMKgwqDCoMKgwqDCoCBhYm8tPnR5cGUgPSBB TURYRE5BX0JPX1NIQVJFOwo+PiDCoCDCoMKgwqDCoMKgIHJldHVybiBhYm87Cj4+IMKgIH0KPj4g wqAgwqAgc3RhdGljIHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKgo+PiAtYW1keGRuYV9kcm1fY3Jl YXRlX2Rldl9oZWFwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc3RydWN0IGFtZHhkbmFfZHJtX2NyZWF0ZV9ibyAqYXJncywKPj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHApCj4+ICth bWR4ZG5hX2RybV9jcmVhdGVfZGV2X2hlYXBfYm8oc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYW1keGRuYV9kcm1f Y3JlYXRlX2JvICphcmdzLCBzdHJ1Y3QgCj4+IGRybV9maWxlICpmaWxwKQo+PiDCoCB7Cj4+IMKg wqDCoMKgwqAgc3RydWN0IGFtZHhkbmFfY2xpZW50ICpjbGllbnQgPSBmaWxwLT5kcml2ZXJfcHJp djsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgYW1keGRuYV9kZXYgKnhkbmEgPSB0b194ZG5hX2Rldihk ZXYpOwo+PiDCoMKgwqDCoMKgIHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibzsKPj4gwqDCoMKg wqDCoCBpbnQgcmV0Owo+PiDCoCAtwqDCoMKgIGlmIChhcmdzLT5zaXplID4geGRuYS0+ZGV2X2lu Zm8tPmRldl9tZW1fc2l6ZSkgewo+PiAtwqDCoMKgwqDCoMKgwqAgWEROQV9EQkcoeGRuYSwgIklu dmFsaWQgZGV2IGhlYXAgc2l6ZSAweCVsbHgsIGxpbWl0IDB4JWx4IiwKPj4gKyBXQVJOX09OKCFp c19wb3dlcl9vZl8yKHhkbmEtPmRldl9pbmZvLT5kZXZfbWVtX3NpemUpKTsKPj4gK8KgwqDCoCBY RE5BX0RCRyh4ZG5hLCAiUmVxdWVzdGVkIGRldiBoZWFwIHNpemUgMHglbGx4IiwgYXJncy0+c2l6 ZSk7Cj4+ICvCoMKgwqAgaWYgKCFhcmdzLT5zaXplIHx8ICFJU19BTElHTkVEKGFyZ3MtPnNpemUs IAo+PiB4ZG5hLT5kZXZfaW5mby0+ZGV2X21lbV9zaXplKSkgewo+PiArwqDCoMKgwqDCoMKgwqAg WEROQV9FUlIoeGRuYSwgIlRoZSBkZXYgaGVhcCBzaXplIDB4JWxseCBpcyBub3QgbXVsdGlwbGUg b2YgCj4+IDB4JWx4IiwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhcmdzLT5zaXpl LCB4ZG5hLT5kZXZfaW5mby0+ZGV2X21lbV9zaXplKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJl dHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+PiDCoMKgwqDCoMKgIH0KPj4gwqAgK8KgwqDCoCAvKiBI RUFQIEJPIGlzIGEgc3BlY2lhbCBjYXNlIG9mIFNITUVNIEJPLiAqLwo+PiArwqDCoMKgIGFibyA9 IGFtZHhkbmFfZHJtX2NyZWF0ZV9zaGFyZV9ibyhkZXYsIGFyZ3MsIGZpbHApOwo+PiArwqDCoMKg IGlmIChJU19FUlIoYWJvKSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBFUlJfQ0FTVChhYm8p Owo+PiArCj4+ICvCoMKgwqAgLyogU2V0IHVwIGhlYXAgZm9yIHRoaXMgY2xpZW50LiAqLwo+PiDC oMKgwqDCoMKgIG11dGV4X2xvY2soJmNsaWVudC0+bW1fbG9jayk7Cj4+ICsKPj4gwqDCoMKgwqDC oCBpZiAoY2xpZW50LT5kZXZfaGVhcCkgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgWEROQV9EQkco Y2xpZW50LT54ZG5hLCAiZGV2IGhlYXAgaXMgYWxyZWFkeSBjcmVhdGVkIik7Cj4+IMKgwqDCoMKg wqDCoMKgwqDCoCByZXQgPSAtRUJVU1k7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIG1tX3Vu bG9jazsKPj4gwqDCoMKgwqDCoCB9Cj4+IC0KPj4gLcKgwqDCoCBhYm8gPSBhbWR4ZG5hX2dlbV9j cmVhdGVfb2JqZWN0KGRldiwgYXJncyk7Cj4+IC3CoMKgwqAgaWYgKElTX0VSUihhYm8pKSB7Cj4+ IC3CoMKgwqDCoMKgwqDCoCByZXQgPSBQVFJfRVJSKGFibyk7Cj4+IC3CoMKgwqDCoMKgwqDCoCBn b3RvIG1tX3VubG9jazsKPj4gLcKgwqDCoCB9Cj4+IC0KPj4gLcKgwqDCoCBhYm8tPnR5cGUgPSBB TURYRE5BX0JPX0RFVl9IRUFQOwo+PiAtwqDCoMKgIGFiby0+Y2xpZW50ID0gY2xpZW50Owo+PiAt wqDCoMKgIGFiby0+bWVtLmRldl9hZGRyID0gY2xpZW50LT54ZG5hLT5kZXZfaW5mby0+ZGV2X21l bV9iYXNlOwo+PiAtwqDCoMKgIGRybV9tbV9pbml0KCZhYm8tPm1tLCBhYm8tPm1lbS5kZXZfYWRk ciwgYWJvLT5tZW0uc2l6ZSk7Cj4+IC0KPj4gLcKgwqDCoCByZXQgPSBhbWR4ZG5hX2dlbV9vYmpf dm1hcChhYm8sICZhYm8tPm1lbS5rdmEpOwo+PiAtwqDCoMKgIGlmIChyZXQpIHsKPj4gLcKgwqDC oMKgwqDCoMKgIFhETkFfRVJSKHhkbmEsICJWbWFwIGhlYXAgYm8gZmFpbGVkLCByZXQgJWQiLCBy ZXQpOwo+PiAtwqDCoMKgwqDCoMKgwqAgZ290byByZWxlYXNlX29iajsKPj4gLcKgwqDCoCB9Cj4+ IC0KPj4gwqDCoMKgwqDCoCBjbGllbnQtPmRldl9oZWFwID0gYWJvOwo+PiDCoMKgwqDCoMKgIGRy bV9nZW1fb2JqZWN0X2dldCh0b19nb2JqKGFibykpOwo+PiArCj4+ICvCoMKgwqAgZHJtX21tX2lu aXQoJmFiby0+bW0sIHhkbmEtPmRldl9pbmZvLT5kZXZfbWVtX2Jhc2UsIGFiby0+bWVtLnNpemUp Owo+PiArCj4+IMKgwqDCoMKgwqAgbXV0ZXhfdW5sb2NrKCZjbGllbnQtPm1tX2xvY2spOwo+PiDC oCDCoMKgwqDCoMKgIHJldHVybiBhYm87Cj4+IMKgIC1yZWxlYXNlX29iajoKPj4gLcKgwqDCoCBk cm1fZ2VtX29iamVjdF9wdXQodG9fZ29iaihhYm8pKTsKPj4gwqAgbW1fdW5sb2NrOgo+PiDCoMKg wqDCoMKgIG11dGV4X3VubG9jaygmY2xpZW50LT5tbV9sb2NrKTsKPj4gK8KgwqDCoCBkcm1fZ2Vt X29iamVjdF9wdXQodG9fZ29iaihhYm8pKTsKPj4gwqDCoMKgwqDCoCByZXR1cm4gRVJSX1BUUihy ZXQpOwo+PiDCoCB9Cj4+IMKgIMKgIHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKgo+PiAtYW1keGRu YV9kcm1fYWxsb2NfZGV2X2JvKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc3RydWN0IGFtZHhkbmFfZHJtX2NyZWF0ZV9ibyAqYXJncywKPj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHApCj4+ICthbWR4ZG5h X2RybV9jcmVhdGVfZGV2X2JvKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYW1keGRuYV9kcm1fY3JlYXRlX2JvICphcmdzLCBzdHJ1 Y3QgZHJtX2ZpbGUgCj4+ICpmaWxwKQo+PiDCoCB7Cj4+ICvCoMKgwqAgc2l6ZV90IGFsaWduZWRf c3ogPSBQQUdFX0FMSUdOKGFyZ3MtPnNpemUpOwo+PiDCoMKgwqDCoMKgIHN0cnVjdCBhbWR4ZG5h X2NsaWVudCAqY2xpZW50ID0gZmlscC0+ZHJpdmVyX3ByaXY7Cj4+IMKgwqDCoMKgwqAgc3RydWN0 IGFtZHhkbmFfZGV2ICp4ZG5hID0gdG9feGRuYV9kZXYoZGV2KTsKPj4gLcKgwqDCoCBzaXplX3Qg YWxpZ25lZF9zeiA9IFBBR0VfQUxJR04oYXJncy0+c2l6ZSk7Cj4+IMKgwqDCoMKgwqAgc3RydWN0 IGFtZHhkbmFfZ2VtX29iaiAqYWJvOwo+PiArwqDCoMKgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAq Z29iajsKPj4gwqDCoMKgwqDCoCBpbnQgcmV0Owo+PiDCoCAtwqDCoMKgIGFibyA9IGFtZHhkbmFf Z2VtX2NyZWF0ZV9vYmooJnhkbmEtPmRkZXYsIGFsaWduZWRfc3opOwo+PiArwqDCoMKgIGlmICgh YWxpZ25lZF9zeikgewo+PiArwqDCoMKgwqDCoMKgwqAgWEROQV9FUlIoeGRuYSwgIkludmFsaWQg Qk8gc2l6ZSAweCVsbHgiLCBhcmdzLT5zaXplKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBF UlJfUFRSKC1FSU5WQUwpOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGFibyA9IGFtZHhk bmFfZ2VtX2NyZWF0ZV9vYmooZGV2LCBhbGlnbmVkX3N6KTsKPj4gwqDCoMKgwqDCoCBpZiAoSVNf RVJSKGFibykpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gYWJvOwo+PiAtCj4+IC3CoMKg wqAgdG9fZ29iaihhYm8pLT5mdW5jcyA9ICZhbWR4ZG5hX2dlbV9kZXZfb2JqX2Z1bmNzOwo+PiAr wqDCoMKgIGdvYmogPSB0b19nb2JqKGFibyk7Cj4+ICvCoMKgwqAgZ29iai0+ZnVuY3MgPSAmYW1k eGRuYV9nZW1fZGV2X29ial9mdW5jczsKPj4gwqDCoMKgwqDCoCBhYm8tPnR5cGUgPSBBTURYRE5B X0JPX0RFVjsKPj4gwqDCoMKgwqDCoCBhYm8tPmNsaWVudCA9IGNsaWVudDsKPj4gwqAgQEAgLTc3 MCwzMSArNzkxLDcgQEAgYW1keGRuYV9kcm1fYWxsb2NfZGV2X2JvKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBhbWR4ZG5hX2dlbV9kZXN0cm95X29iaihhYm8p Owo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEVSUl9QVFIocmV0KTsKPj4gwqDCoMKgwqDC oCB9Cj4+IC0KPj4gLcKgwqDCoCBkcm1fZ2VtX3ByaXZhdGVfb2JqZWN0X2luaXQoJnhkbmEtPmRk ZXYsIHRvX2dvYmooYWJvKSwgYWxpZ25lZF9zeik7Cj4+IC0KPj4gLcKgwqDCoCByZXR1cm4gYWJv Owo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqCj4+IC1hbWR4 ZG5hX2RybV9jcmVhdGVfY21kX2JvKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYW1keGRuYV9kcm1fY3JlYXRlX2JvICphcmdzLAo+ PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9maWxlICpmaWxwKQo+PiAt ewo+PiAtwqDCoMKgIHN0cnVjdCBhbWR4ZG5hX2RldiAqeGRuYSA9IHRvX3hkbmFfZGV2KGRldik7 Cj4+IC3CoMKgwqAgc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvOwo+PiAtCj4+IC3CoMKgwqAg aWYgKGFyZ3MtPnNpemUgPCBzaXplb2Yoc3RydWN0IGFtZHhkbmFfY21kKSkgewo+PiAtwqDCoMKg wqDCoMKgwqAgWEROQV9EQkcoeGRuYSwgIkNvbW1hbmQgQk8gc2l6ZSAweCVsbHggdG9vIHNtYWxs IiwgYXJncy0+c2l6ZSk7Cj4+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gRVJSX1BUUigtRUlOVkFM KTsKPj4gLcKgwqDCoCB9Cj4+IC0KPj4gLcKgwqDCoCBhYm8gPSBhbWR4ZG5hX2dlbV9jcmVhdGVf b2JqZWN0KGRldiwgYXJncyk7Cj4+IC3CoMKgwqAgaWYgKElTX0VSUihhYm8pKQo+PiAtwqDCoMKg wqDCoMKgwqAgcmV0dXJuIEVSUl9DQVNUKGFibyk7Cj4+IC0KPj4gLcKgwqDCoCBhYm8tPnR5cGUg PSBBTURYRE5BX0JPX0NNRDsKPj4gLcKgwqDCoCBhYm8tPmNsaWVudCA9IGZpbHAtPmRyaXZlcl9w cml2Owo+PiArwqDCoMKgIGRybV9nZW1fcHJpdmF0ZV9vYmplY3RfaW5pdChkZXYsIGdvYmosIGFs aWduZWRfc3opOwo+PiDCoCDCoMKgwqDCoMKgIHJldHVybiBhYm87Cj4+IMKgIH0KPj4gQEAgLTgx MiwxNyArODA5LDE2IEBAIGludCBhbWR4ZG5hX2RybV9jcmVhdGVfYm9faW9jdGwoc3RydWN0IAo+ PiBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZgo+PiDCoMKgwqDCoMKg IFhETkFfREJHKHhkbmEsICJCTyBhcmcgdHlwZSAlZCB2YWRkciAweCVsbHggc2l6ZSAweCVsbHgg ZmxhZ3MgCj4+IDB4JWxseCIsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFyZ3MtPnR5cGUsIGFy Z3MtPnZhZGRyLCBhcmdzLT5zaXplLCBhcmdzLT5mbGFncyk7Cj4+IMKgwqDCoMKgwqAgc3dpdGNo IChhcmdzLT50eXBlKSB7Cj4+IC3CoMKgwqAgY2FzZSBBTURYRE5BX0JPX1NITUVNOgo+PiAtwqDC oMKgwqDCoMKgwqAgYWJvID0gYW1keGRuYV9kcm1fYWxsb2Nfc2htZW0oZGV2LCBhcmdzLCBmaWxw KTsKPj4gK8KgwqDCoCBjYXNlIEFNRFhETkFfQk9fQ01EOgo+PiArwqDCoMKgwqDCoMKgwqAgZmFs bHRocm91Z2g7Cj4+ICvCoMKgwqAgY2FzZSBBTURYRE5BX0JPX1NIQVJFOgo+PiArwqDCoMKgwqDC oMKgwqAgYWJvID0gYW1keGRuYV9kcm1fY3JlYXRlX3NoYXJlX2JvKGRldiwgYXJncywgZmlscCk7 Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gwqDCoMKgwqDCoCBjYXNlIEFNRFhETkFf Qk9fREVWX0hFQVA6Cj4+IC3CoMKgwqDCoMKgwqDCoCBhYm8gPSBhbWR4ZG5hX2RybV9jcmVhdGVf ZGV2X2hlYXAoZGV2LCBhcmdzLCBmaWxwKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGFibyA9IGFtZHhk bmFfZHJtX2NyZWF0ZV9kZXZfaGVhcF9ibyhkZXYsIGFyZ3MsIGZpbHApOwo+PiDCoMKgwqDCoMKg wqDCoMKgwqAgYnJlYWs7Cj4+IMKgwqDCoMKgwqAgY2FzZSBBTURYRE5BX0JPX0RFVjoKPj4gLcKg wqDCoMKgwqDCoMKgIGFibyA9IGFtZHhkbmFfZHJtX2FsbG9jX2Rldl9ibyhkZXYsIGFyZ3MsIGZp bHApOwo+PiAtwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+IC3CoMKgwqAgY2FzZSBBTURYRE5BX0JP X0NNRDoKPj4gLcKgwqDCoMKgwqDCoMKgIGFibyA9IGFtZHhkbmFfZHJtX2NyZWF0ZV9jbWRfYm8o ZGV2LCBhcmdzLCBmaWxwKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGFibyA9IGFtZHhkbmFfZHJtX2Ny ZWF0ZV9kZXZfYm8oZGV2LCBhcmdzLCBmaWxwKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFr Owo+PiDCoMKgwqDCoMKgIGRlZmF1bHQ6Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJ TlZBTDsKPj4gQEAgLTgzOCw4ICs4MzQsOCBAQCBpbnQgYW1keGRuYV9kcm1fY3JlYXRlX2JvX2lv Y3RsKHN0cnVjdCBkcm1fZGV2aWNlIAo+PiAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2YK Pj4gwqDCoMKgwqDCoCB9Cj4+IMKgIMKgwqDCoMKgwqAgWEROQV9EQkcoeGRuYSwgIkJPIGhkbCAl ZCB0eXBlICVkIHVzZXJwdHIgMHglbGx4IHhkbmFfYWRkciAKPj4gMHglbGx4IHNpemUgMHglbHgi LAo+PiAtwqDCoMKgwqDCoMKgwqDCoCBhcmdzLT5oYW5kbGUsIGFyZ3MtPnR5cGUsIGFiby0+bWVt LnVzZXJwdHIsCj4+IC3CoMKgwqDCoMKgwqDCoMKgIGFiby0+bWVtLmRldl9hZGRyLCBhYm8tPm1l bS5zaXplKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqAgYXJncy0+aGFuZGxlLCBhcmdzLT50eXBlLCBh bWR4ZG5hX2dlbV91dmEoYWJvKSwKPj4gK8KgwqDCoMKgwqDCoMKgwqAgYW1keGRuYV9nZW1fZGV2 X2FkZHIoYWJvKSwgYWJvLT5tZW0uc2l6ZSk7Cj4+IMKgIHB1dF9vYmo6Cj4+IMKgwqDCoMKgwqAg LyogRGVyZWZlcmVuY2Ugb2JqZWN0IHJlZmVyZW5jZS4gSGFuZGxlIGhvbGRzIGl0IG5vdy4gKi8K Pj4gwqDCoMKgwqDCoCBkcm1fZ2VtX29iamVjdF9wdXQodG9fZ29iaihhYm8pKTsKPj4gQEAgLTg5 MCwzOCArODg2LDE5IEBAIHZvaWQgYW1keGRuYV9nZW1fdW5waW4oc3RydWN0IGFtZHhkbmFfZ2Vt X29iaiAKPj4gKmFibykKPj4gwqAgc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYW1keGRuYV9nZW1f Z2V0X29iaihzdHJ1Y3QgYW1keGRuYV9jbGllbnQgCj4+ICpjbGllbnQsCj4+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiBib19oZGwsIHU4IGJv X3R5cGUpCj4+IMKgIHsKPj4gLcKgwqDCoCBzdHJ1Y3QgYW1keGRuYV9kZXYgKnhkbmEgPSBjbGll bnQtPnhkbmE7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvOwo+PiDC oMKgwqDCoMKgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ29iajsKPj4gLcKgwqDCoCBpbnQgcmV0 Owo+PiDCoCDCoMKgwqDCoMKgIGdvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoY2xpZW50LT5m aWxwLCBib19oZGwpOwo+PiDCoMKgwqDCoMKgIGlmICghZ29iaikgewo+PiAtwqDCoMKgwqDCoMKg wqAgWEROQV9EQkcoeGRuYSwgIkNhbiBub3QgZmluZCBibyAlZCIsIGJvX2hkbCk7Cj4+ICvCoMKg wqDCoMKgwqDCoCBYRE5BX0RCRyhjbGllbnQtPnhkbmEsICJDYW4gbm90IGZpbmQgYm8gJWQiLCBi b19oZGwpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7Cj4+IMKgwqDCoMKgwqAg fQo+PiDCoCDCoMKgwqDCoMKgIGFibyA9IHRvX3hkbmFfb2JqKGdvYmopOwo+PiAtwqDCoMKgIGlm IChib190eXBlICE9IEFNRFhETkFfQk9fSU5WQUxJRCAmJiBhYm8tPnR5cGUgIT0gYm9fdHlwZSkK Pj4gLcKgwqDCoMKgwqDCoMKgIGdvdG8gcHV0X29iajsKPj4gLQo+PiAtwqDCoMKgIGlmIChib190 eXBlICE9IEFNRFhETkFfQk9fQ01EIHx8IGFiby0+bWVtLmt2YSkKPj4gK8KgwqDCoCBpZiAoYm9f dHlwZSA9PSBBTURYRE5BX0JPX0lOVkFMSUQgfHwgYWJvLT50eXBlID09IGJvX3R5cGUpCj4+IMKg wqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gYWJvOwo+PiDCoCAtwqDCoMKgIGlmIChhYm8tPm1lbS5z aXplID4gU1pfMzJLKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCBYRE5BX0VSUih4ZG5hLCAiQ21kIGJv IGlzIHRvbyBiaWcgJWxkIiwgYWJvLT5tZW0uc2l6ZSk7Cj4+IC3CoMKgwqDCoMKgwqDCoCBnb3Rv IHB1dF9vYmo7Cj4+IC3CoMKgwqAgfQo+PiAtCj4+IC3CoMKgwqAgcmV0ID0gYW1keGRuYV9nZW1f b2JqX3ZtYXAoYWJvLCAmYWJvLT5tZW0ua3ZhKTsKPj4gLcKgwqDCoCBpZiAocmV0KSB7Cj4+IC3C oMKgwqDCoMKgwqDCoCBYRE5BX0VSUih4ZG5hLCAiVm1hcCBjbWQgYm8gZmFpbGVkLCByZXQgJWQi LCByZXQpOwo+PiAtwqDCoMKgwqDCoMKgwqAgZ290byBwdXRfb2JqOwo+PiAtwqDCoMKgIH0KPj4g LQo+PiAtwqDCoMKgIHJldHVybiBhYm87Cj4+IC0KPj4gLXB1dF9vYmo6Cj4+IMKgwqDCoMKgwqAg ZHJtX2dlbV9vYmplY3RfcHV0KGdvYmopOwo+PiDCoMKgwqDCoMKgIHJldHVybiBOVUxMOwo+PiDC oCB9Cj4+IEBAIC05NDQsMTEgKzkyMSw4IEBAIGludCBhbWR4ZG5hX2RybV9nZXRfYm9faW5mb19p b2N0bChzdHJ1Y3QgCj4+IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybQo+ PiDCoMKgwqDCoMKgIH0KPj4gwqAgwqDCoMKgwqDCoCBhYm8gPSB0b194ZG5hX29iaihnb2JqKTsK Pj4gLcKgwqDCoCBhcmdzLT52YWRkciA9IGFiby0+bWVtLnVzZXJwdHI7Cj4+IC3CoMKgwqAgaWYg KGFiby0+bWVtLmRldl9hZGRyICE9IEFNRFhETkFfSU5WQUxJRF9BRERSKQo+PiAtwqDCoMKgwqDC oMKgwqAgYXJncy0+eGRuYV9hZGRyID0gYWJvLT5tZW0uZGV2X2FkZHI7Cj4+IC3CoMKgwqAgZWxz ZQo+PiAtwqDCoMKgwqDCoMKgwqAgYXJncy0+eGRuYV9hZGRyID0gYWJvLT5tZW0uZG1hX2FkZHI7 Cj4+ICvCoMKgwqAgYXJncy0+dmFkZHIgPSBhbWR4ZG5hX2dlbV91dmEoYWJvKTsKPj4gK8KgwqDC oCBhcmdzLT54ZG5hX2FkZHIgPSBhbWR4ZG5hX2dlbV9kZXZfYWRkcihhYm8pOwo+PiDCoCDCoMKg wqDCoMKgIGlmIChhYm8tPnR5cGUgIT0gQU1EWEROQV9CT19ERVYpCj4+IMKgwqDCoMKgwqDCoMKg wqDCoCBhcmdzLT5tYXBfb2Zmc2V0ID0gZHJtX3ZtYV9ub2RlX29mZnNldF9hZGRyKCZnb2JqLT52 bWFfbm9kZSk7Cj4+IEBAIC05OTMsOCArOTY3LDggQEAgaW50IGFtZHhkbmFfZHJtX3N5bmNfYm9f aW9jdGwoc3RydWN0IGRybV9kZXZpY2UgCj4+ICpkZXYsCj4+IMKgIMKgwqDCoMKgwqAgaWYgKGlz X2ltcG9ydF9ibyhhYm8pKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZHJtX2NsZmx1c2hfc2coYWJv LT5iYXNlLnNndCk7Cj4+IC3CoMKgwqAgZWxzZSBpZiAoYWJvLT5tZW0ua3ZhKQo+PiAtwqDCoMKg wqDCoMKgwqAgZHJtX2NsZmx1c2hfdmlydF9yYW5nZShhYm8tPm1lbS5rdmEgKyBhcmdzLT5vZmZz ZXQsIAo+PiBhcmdzLT5zaXplKTsKPj4gK8KgwqDCoCBlbHNlIGlmIChhbWR4ZG5hX2dlbV92bWFw KGFibykpCj4+ICvCoMKgwqDCoMKgwqDCoCBkcm1fY2xmbHVzaF92aXJ0X3JhbmdlKGFtZHhkbmFf Z2VtX3ZtYXAoYWJvKSArIGFyZ3MtPm9mZnNldCwgCj4+IGFyZ3MtPnNpemUpOwo+PiDCoMKgwqDC oMKgIGVsc2UgaWYgKGFiby0+YmFzZS5wYWdlcykKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGRybV9j bGZsdXNoX3BhZ2VzKGFiby0+YmFzZS5wYWdlcywgZ29iai0+c2l6ZSA+PiBQQUdFX1NISUZUKTsK Pj4gwqDCoMKgwqDCoCBlbHNlCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2FjY2VsL2FtZHhkbmEv YW1keGRuYV9nZW0uaCAKPj4gYi9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uaAo+ PiBpbmRleCBmYmViNjIyZTdjZjkuLmE3N2Q5MzQ0ZjhhNCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVy cy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmgKPj4gKysrIGIvZHJpdmVycy9hY2NlbC9hbWR4 ZG5hL2FtZHhkbmFfZ2VtLmgKPj4gQEAgLTI0LDE1ICsyNCwxNiBAQCBzdHJ1Y3QgYW1keGRuYV91 bWFwIHsKPj4gwqAgfTsKPj4gwqAgwqAgc3RydWN0IGFtZHhkbmFfbWVtIHsKPj4gLcKgwqDCoCB1 NjTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdXNlcnB0cjsKPj4gwqDCoMKgwqDCoCB2 b2lkwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICprdmE7Cj4+IC3CoMKgwqAgdTY0wqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9hZGRyOwo+PiDCoMKgwqDCoMKgIHU2NMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkbWFfYWRkcjsKPj4gwqDCoMKgwqDCoCBzaXpl X3TCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZTsKPj4gLcKgwqDCoCBzdHJ1Y3Qg cGFnZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKipwYWdlczsKPj4gLcKgwqDCoCB1MzLCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbnJfcGFnZXM7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGxp c3RfaGVhZMKgwqDCoMKgwqDCoMKgIHVtYXBfbGlzdDsKPj4gwqDCoMKgwqDCoCBib29swqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1hcF9pbnZhbGlkOwo+PiArwqDCoMKgIC8qCj4+ICvC oMKgwqDCoCAqIENhY2hlIHRoZSBmaXJzdCBtbWFwIHV2YSBhcyBQQVNJRCBhZGRyLCB3aGljaCBj YW4gYmUgYWNjZXNzZWQgCj4+IGJ5IGRyaXZlcgo+PiArwqDCoMKgwqAgKiB3aXRob3V0IHRha2lu ZyBub3RpZmllcl9sb2NrLgo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCB1NjTCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdXZhOwo+PiDCoCB9Owo+PiDCoCDCoCBzdHJ1Y3QgYW1keGRu YV9nZW1fb2JqIHsKPj4gQEAgLTQwLDExICs0MSwxMCBAQCBzdHJ1Y3QgYW1keGRuYV9nZW1fb2Jq IHsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgYW1keGRuYV9jbGllbnTCoMKgwqDCoMKgwqDCoCAqY2xp ZW50Owo+PiDCoMKgwqDCoMKgIHU4wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHR5cGU7 Cj4+IMKgwqDCoMKgwqAgYm9vbMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaW5uZWQ7 Cj4+IC3CoMKgwqAgc3RydWN0IG11dGV4wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsb2NrOyAvKiBQ cm90ZWN0czogcGlubmVkICovCj4+ICvCoMKgwqAgc3RydWN0IG11dGV4wqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBsb2NrOyAvKiBQcm90ZWN0czogcGlubmVkLCBtZW0ua3ZhICovCj4+IMKgwqDCoMKg wqAgc3RydWN0IGFtZHhkbmFfbWVtwqDCoMKgwqDCoMKgwqAgbWVtOwo+PiAtwqDCoMKgIHUzMsKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZWY7Cj4+IMKgIC3CoMKgwqAgLyogQmVsb3cg bWVtYmVycyBpcyB1bmluaXRpYWxpemVkIHdoZW4gbmVlZGVkICovCj4+ICvCoMKgwqAgLyogQmVs b3cgbWVtYmVycyBhcmUgaW5pdGlhbGl6ZWQgd2hlbiBuZWVkZWQgKi8KPj4gwqDCoMKgwqDCoCBz dHJ1Y3QgZHJtX21twqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtbTsgLyogRm9yIEFNRFhETkFfQk9f REVWX0hFQVAgKi8KPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX21tX25vZGXCoMKgwqDCoMKgwqDC oCBtbV9ub2RlOyAvKiBGb3IgQU1EWEROQV9CT19ERVYgKi8KPj4gwqDCoMKgwqDCoCB1MzLCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXNzaWduZWRfaHdjdHg7Cj4+IEBAIC02NywyNyAr NjcsMjkgQEAgc3RhdGljIGlubGluZSB2b2lkIGFtZHhkbmFfZ2VtX3B1dF9vYmooc3RydWN0IAo+ PiBhbWR4ZG5hX2dlbV9vYmogKmFibykKPj4gwqDCoMKgwqDCoCBkcm1fZ2VtX29iamVjdF9wdXQo dG9fZ29iaihhYm8pKTsKPj4gwqAgfQo+PiDCoCArdm9pZCAqYW1keGRuYV9nZW1fdm1hcChzdHJ1 Y3QgYW1keGRuYV9nZW1fb2JqICphYm8pOwo+PiArdTY0IGFtZHhkbmFfZ2VtX3V2YShzdHJ1Y3Qg YW1keGRuYV9nZW1fb2JqICphYm8pOwo+PiArdTY0IGFtZHhkbmFfZ2VtX2Rldl9hZGRyKHN0cnVj dCBhbWR4ZG5hX2dlbV9vYmogKmFibyk7Cj4+ICsKPj4gwqAgc3RhdGljIGlubGluZSB1NjQgYW1k eGRuYV9kZXZfYm9fb2Zmc2V0KHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibykKPj4gwqAgewo+ PiAtwqDCoMKgIHJldHVybiBhYm8tPm1lbS5kZXZfYWRkciAtIGFiby0+Y2xpZW50LT5kZXZfaGVh cC0+bWVtLmRldl9hZGRyOwo+PiArwqDCoMKgIHJldHVybiBhbWR4ZG5hX2dlbV9kZXZfYWRkcihh Ym8pIC0gCj4+IGFtZHhkbmFfZ2VtX2Rldl9hZGRyKGFiby0+Y2xpZW50LT5kZXZfaGVhcCk7Cj4+ IMKgIH0KPj4gwqAgLXN0YXRpYyBpbmxpbmUgdTY0IGFtZHhkbmFfb2JqX2RtYV9hZGRyKHN0cnVj dCBhbWR4ZG5hX2NsaWVudCAqY2xpZW50LAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvKQo+PiArc3RhdGlj IGlubGluZSB1NjQgYW1keGRuYV9vYmpfZG1hX2FkZHIoc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAq YWJvKQo+PiDCoCB7Cj4+IC3CoMKgwqAgcmV0dXJuIGFtZHhkbmFfcGFzaWRfb24oY2xpZW50KSA/ IGFiby0+bWVtLnVzZXJwdHIgOiAKPj4gYWJvLT5tZW0uZG1hX2FkZHI7Cj4+ICvCoMKgwqAgcmV0 dXJuIGFtZHhkbmFfcGFzaWRfb24oYWJvLT5jbGllbnQpID8gYW1keGRuYV9nZW1fdXZhKGFibykg OiAKPj4gYWJvLT5tZW0uZG1hX2FkZHI7Cj4+IMKgIH0KPj4gwqAgwqAgdm9pZCBhbWR4ZG5hX3Vt YXBfcHV0KHN0cnVjdCBhbWR4ZG5hX3VtYXAgKm1hcHApOwo+PiDCoCDCoCBzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKgo+PiAtYW1keGRuYV9nZW1fY3JlYXRlX29iamVjdF9jYihzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCBzaXplX3Qgc2l6ZSk7Cj4+ICthbWR4ZG5hX2dlbV9jcmVhdGVfc2htZW1fb2Jq ZWN0X2NiKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHNpemVfdCAKPj4gc2l6ZSk7Cj4+IMKgIHN0 cnVjdCBkcm1fZ2VtX29iamVjdCAqCj4+IMKgIGFtZHhkbmFfZ2VtX3ByaW1lX2ltcG9ydChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZG1hX2J1ZiAKPj4gKmRtYV9idWYpOwo+PiDCoCBz dHJ1Y3QgYW1keGRuYV9nZW1fb2JqICoKPj4gLWFtZHhkbmFfZHJtX2FsbG9jX2Rldl9ibyhzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBh bWR4ZG5hX2RybV9jcmVhdGVfYm8gKmFyZ3MsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c3RydWN0IGRybV9maWxlICpmaWxwKTsKPj4gK2FtZHhkbmFfZHJtX2NyZWF0ZV9kZXZfYm8oc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVj dCBhbWR4ZG5hX2RybV9jcmVhdGVfYm8gKmFyZ3MsIHN0cnVjdCBkcm1fZmlsZSAKPj4gKmZpbHAp Owo+PiDCoCDCoCBpbnQgYW1keGRuYV9nZW1fcGluX25vbG9jayhzdHJ1Y3QgYW1keGRuYV9nZW1f b2JqICphYm8pOwo+PiDCoCBpbnQgYW1keGRuYV9nZW1fcGluKHN0cnVjdCBhbWR4ZG5hX2dlbV9v YmogKmFibyk7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9w Y2lfZHJ2LmMgCj4+IGIvZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfcGNpX2Rydi5jCj4+ IGluZGV4IDUxNDNiOGM5YjkyYi4uZDgzYmUwMGRhZjJiIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJz L2FjY2VsL2FtZHhkbmEvYW1keGRuYV9wY2lfZHJ2LmMKPj4gKysrIGIvZHJpdmVycy9hY2NlbC9h bWR4ZG5hL2FtZHhkbmFfcGNpX2Rydi5jCj4+IEBAIC0yNDUsNyArMjQ1LDcgQEAgY29uc3Qgc3Ry dWN0IGRybV9kcml2ZXIgYW1keGRuYV9kcm1fZHJ2ID0gewo+PiDCoMKgwqDCoMKgIC5pb2N0bHMg PSBhbWR4ZG5hX2RybV9pb2N0bHMsCj4+IMKgwqDCoMKgwqAgLm51bV9pb2N0bHMgPSBBUlJBWV9T SVpFKGFtZHhkbmFfZHJtX2lvY3RscyksCj4+IMKgIC3CoMKgwqAgLmdlbV9jcmVhdGVfb2JqZWN0 ID0gYW1keGRuYV9nZW1fY3JlYXRlX29iamVjdF9jYiwKPj4gK8KgwqDCoCAuZ2VtX2NyZWF0ZV9v YmplY3QgPSBhbWR4ZG5hX2dlbV9jcmVhdGVfc2htZW1fb2JqZWN0X2NiLAo+PiDCoMKgwqDCoMKg IC5nZW1fcHJpbWVfaW1wb3J0ID0gYW1keGRuYV9nZW1fcHJpbWVfaW1wb3J0LAo+PiDCoCB9Owo+ PiDCoCBkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfdWJ1Zi5jIAo+ PiBiL2RyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX3VidWYuYwo+PiBpbmRleCBmYjcxZDZl M2Y0NGQuLmZiOTk5YWEyNTMxOCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9hY2NlbC9hbWR4ZG5h L2FtZHhkbmFfdWJ1Zi5jCj4+ICsrKyBiL2RyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX3Vi dWYuYwo+PiBAQCAtMTcsNyArMTcsNiBAQAo+PiDCoCBzdHJ1Y3QgYW1keGRuYV91YnVmX3ByaXYg ewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBwYWdlICoqcGFnZXM7Cj4+IMKgwqDCoMKgwqAgdTY0IG5y X3BhZ2VzOwo+PiAtwqDCoMKgIGVudW0gYW1keGRuYV91YnVmX2ZsYWcgZmxhZ3M7Cj4+IMKgwqDC oMKgwqAgc3RydWN0IG1tX3N0cnVjdCAqbW07Cj4+IMKgIH07Cj4+IMKgIEBAIC0zNywxMSArMzYs OSBAQCBzdGF0aWMgc3RydWN0IHNnX3RhYmxlICphbWR4ZG5hX3VidWZfbWFwKHN0cnVjdCAKPj4g ZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCj4+IMKgwqDCoMKgwqAgaWYgKHJldCkKPj4gwqDC oMKgwqDCoMKgwqDCoMKgIGdvdG8gZXJyX2ZyZWVfc2c7Cj4+IMKgIC3CoMKgwqAgaWYgKHVidWYt PmZsYWdzICYgQU1EWEROQV9VQlVGX0ZMQUdfTUFQX0RNQSkgewo+PiAtwqDCoMKgwqDCoMKgwqAg cmV0ID0gZG1hX21hcF9zZ3RhYmxlKGF0dGFjaC0+ZGV2LCBzZywgZGlyZWN0aW9uLCAwKTsKPj4g LcKgwqDCoMKgwqDCoMKgIGlmIChyZXQpCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8g ZXJyX2ZyZWVfdGFibGU7Cj4+IC3CoMKgwqAgfQo+PiArwqDCoMKgIHJldCA9IGRtYV9tYXBfc2d0 YWJsZShhdHRhY2gtPmRldiwgc2csIGRpcmVjdGlvbiwgMCk7Cj4+ICvCoMKgwqAgaWYgKHJldCkK Pj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZXJyX2ZyZWVfdGFibGU7Cj4+IMKgIMKgwqDCoMKgwqAg cmV0dXJuIHNnOwo+PiDCoCBAQCAtNTYsMTEgKzUzLDcgQEAgc3RhdGljIHZvaWQgYW1keGRuYV91 YnVmX3VubWFwKHN0cnVjdCAKPj4gZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHNnX3RhYmxlICpzZywK Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbnVtIGRtYV9kYXRh X2RpcmVjdGlvbiBkaXJlY3Rpb24pCj4+IMKgIHsKPj4gLcKgwqDCoCBzdHJ1Y3QgYW1keGRuYV91 YnVmX3ByaXYgKnVidWYgPSBhdHRhY2gtPmRtYWJ1Zi0+cHJpdjsKPj4gLQo+PiAtwqDCoMKgIGlm ICh1YnVmLT5mbGFncyAmIEFNRFhETkFfVUJVRl9GTEFHX01BUF9ETUEpCj4+IC3CoMKgwqDCoMKg wqDCoCBkbWFfdW5tYXBfc2d0YWJsZShhdHRhY2gtPmRldiwgc2csIGRpcmVjdGlvbiwgMCk7Cj4+ IC0KPj4gK8KgwqDCoCBkbWFfdW5tYXBfc2d0YWJsZShhdHRhY2gtPmRldiwgc2csIGRpcmVjdGlv biwgMCk7Cj4+IMKgwqDCoMKgwqAgc2dfZnJlZV90YWJsZShzZyk7Cj4+IMKgwqDCoMKgwqAga2Zy ZWUoc2cpOwo+PiDCoCB9Cj4+IEBAIC0xMzMsNyArMTI2LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVj dCBkbWFfYnVmX29wcyAKPj4gYW1keGRuYV91YnVmX2RtYWJ1Zl9vcHMgPSB7Cj4+IMKgIH07Cj4+ IMKgIMKgIHN0cnVjdCBkbWFfYnVmICphbWR4ZG5hX2dldF91YnVmKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbnVtIGFtZHhkbmFf dWJ1Zl9mbGFnIGZsYWdzLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg dTMyIG51bV9lbnRyaWVzLCB2b2lkIF9fdXNlciAqdmFfZW50cmllcykKPj4gwqAgewo+PiDCoMKg wqDCoMKgIHN0cnVjdCBhbWR4ZG5hX2RldiAqeGRuYSA9IHRvX3hkbmFfZGV2KGRldik7Cj4+IEBA IC0xNTIsNyArMTQ0LDYgQEAgc3RydWN0IGRtYV9idWYgKmFtZHhkbmFfZ2V0X3VidWYoc3RydWN0 IAo+PiBkcm1fZGV2aWNlICpkZXYsCj4+IMKgwqDCoMKgwqAgaWYgKCF1YnVmKQo+PiDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4+IMKgIC3CoMKgwqAgdWJ1Zi0+ ZmxhZ3MgPSBmbGFnczsKPj4gwqDCoMKgwqDCoCB1YnVmLT5tbSA9IGN1cnJlbnQtPm1tOwo+PiDC oMKgwqDCoMKgIG1tZ3JhYih1YnVmLT5tbSk7Cj4+IMKgIGRpZmYgLS1naXQgYS9kcml2ZXJzL2Fj Y2VsL2FtZHhkbmEvYW1keGRuYV91YnVmLmggCj4+IGIvZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2Ft ZHhkbmFfdWJ1Zi5oCj4+IGluZGV4IGU1Y2IzYmRiM2VjOS4uODkwMGE2ZGM0MzcxIDEwMDY0NAo+ PiAtLS0gYS9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV91YnVmLmgKPj4gKysrIGIvZHJp dmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfdWJ1Zi5oCj4+IEBAIC04LDEyICs4LDcgQEAKPj4g wqAgI2luY2x1ZGUgPGRybS9kcm1fZGV2aWNlLmg+Cj4+IMKgICNpbmNsdWRlIDxsaW51eC9kbWEt YnVmLmg+Cj4+IMKgIC1lbnVtIGFtZHhkbmFfdWJ1Zl9mbGFnIHsKPj4gLcKgwqDCoCBBTURYRE5B X1VCVUZfRkxBR19NQVBfRE1BID0gMSwKPj4gLX07Cj4+IC0KPj4gwqAgc3RydWN0IGRtYV9idWYg KmFtZHhkbmFfZ2V0X3VidWYoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVudW0gYW1keGRuYV91YnVmX2ZsYWcgZmxhZ3MsCj4+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgbnVtX2VudHJpZXMsIHZvaWQg X191c2VyICp2YV9lbnRyaWVzKTsKPj4gwqAgwqAgI2VuZGlmIC8qIF9BTURYRE5BX1VCVUZfSF8g Ki8KPj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vYW1keGRuYV9hY2NlbC5oIAo+PiBi L2luY2x1ZGUvdWFwaS9kcm0vYW1keGRuYV9hY2NlbC5oCj4+IGluZGV4IDViZDEzZjQ0MzVmNS4u YmRkYWFhZjk0NWNmIDEwMDY0NAo+PiAtLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2FtZHhkbmFfYWNj ZWwuaAo+PiArKysgYi9pbmNsdWRlL3VhcGkvZHJtL2FtZHhkbmFfYWNjZWwuaAo+PiBAQCAtMTU2 LDEwICsxNTYsMTEgQEAgc3RydWN0IGFtZHhkbmFfZHJtX2NvbmZpZ19od2N0eCB7Cj4+IMKgIMKg IGVudW0gYW1keGRuYV9ib190eXBlIHsKPj4gwqDCoMKgwqDCoCBBTURYRE5BX0JPX0lOVkFMSUQg PSAwLAo+PiAtwqDCoMKgIEFNRFhETkFfQk9fU0hNRU0sCj4+IC3CoMKgwqAgQU1EWEROQV9CT19E RVZfSEVBUCwKPj4gLcKgwqDCoCBBTURYRE5BX0JPX0RFViwKPj4gLcKgwqDCoCBBTURYRE5BX0JP X0NNRCwKPj4gK8KgwqDCoCBBTURYRE5BX0JPX1NITUVNID0gMSwgLyogQmUgY29tcGF0aWJsZSB3 aXRoIGxlZ2FjeSBhcHBsaWNhdGlvbiAKPj4gY29kZS4gKi8KPj4gK8KgwqDCoCBBTURYRE5BX0JP X1NIQVJFID0gMSwKPj4gK8KgwqDCoCBBTURYRE5BX0JPX0RFVl9IRUFQID0gMiwKPj4gK8KgwqDC oCBBTURYRE5BX0JPX0RFViA9IDMsCj4+ICvCoMKgwqAgQU1EWEROQV9CT19DTUQgPSA0LAo+PiDC oCB9Owo+PiDCoCDCoCAvKioKPgo=