Received: by 2002:a6b:fb09:0:0:0:0:0 with SMTP id h9csp419764iog; Thu, 30 Jun 2022 03:26:14 -0700 (PDT) X-Google-Smtp-Source: AGRyM1tou09BCdWDKKVChispII410xuX9YwSkdX09Tnyse3/RnEyqfsQl90rAgekxq8PfqNLKqM/ X-Received: by 2002:a05:6402:25c2:b0:431:932e:eb6f with SMTP id x2-20020a05640225c200b00431932eeb6fmr10746893edb.296.1656584773952; Thu, 30 Jun 2022 03:26:13 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1656584773; cv=pass; d=google.com; s=arc-20160816; b=h0B8iOuQ3os+Yp/HeXEiOTG+oP85mRphjwthHMTvPmfDqKev+Vx2rhimYRTh6w6N0H S0Nt85XHntRFschY6wS7XLwu8EFHwGY77WgwsYXGabzQmsYTvidovsoQahwmHeJaKkRJ enUfh/FObCyOCCxJW3I8HnETUOxHwHjegkr+5YRq76fuf8AyzKnIr8x6D/h7bE0AsQwD nudYMYX2jV0Az2uTeUPfFNh8rjZSgi3scvGDNUBRtDMQa5toIG2V1RYL3eqhSfN3Wor3 LOWFarH4au+WKzAyWSuoEMHZ1+qPrVxCa+we5xcIkIw+KgPrAC7sEhoyHl9pADbuMYZQ MBXA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:msscp.transfermailtomossagent:mime-version :content-transfer-encoding:content-language:accept-language :in-reply-to:references:message-id:date:thread-index:thread-topic :subject:cc:to:from; bh=lbHyEBUeusCE3auAnYNFZESQ9nQLZhQ/euOkrKuLy0U=; b=JBGwobiV+G44XmWHrJxpYkHsKq8plU1qeYkRaaUFpjdJppu2pctrkj3kzPrTAiOCrj 87boY/KG9eBDjagbgF1+g12oaFknrtS5toodGlizsRHkOLgHs5/WxgcG4DQfPGmERh86 e0tJG9IqggUyANHbYtVyK16mRAzxh2daRNftqdiyysUNcYvT2DPcXWmLA1oNvz0DHsps GxUVJo/H2sOPHSuEifiktjrZ3+uQpK1XrZgKjRj5r9vBCwWwg/AVUZpGH+HQp+sCETwh XmRHjOmLTZOz3GwKrJtxviErEgVn+MplSL/8eOuoDbWyrKN+Cphqf9+GK0EKh+OX3tsx iK9Q== ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=toshiba.co.jp dkim=pass dkdomain=toshiba.co.jp dmarc=pass fromdomain=toshiba.co.jp); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=toshiba.co.jp Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id gs8-20020a1709072d0800b007246e08d78dsi3787539ejc.827.2022.06.30.03.25.47; Thu, 30 Jun 2022 03:26:13 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=toshiba.co.jp dkim=pass dkdomain=toshiba.co.jp dmarc=pass fromdomain=toshiba.co.jp); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=toshiba.co.jp Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234606AbiF3KVm (ORCPT + 99 others); Thu, 30 Jun 2022 06:21:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59656 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233780AbiF3KVi (ORCPT ); Thu, 30 Jun 2022 06:21:38 -0400 Received: from mo-csw.securemx.jp (mo-csw1116.securemx.jp [210.130.202.158]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 050F14552D; Thu, 30 Jun 2022 03:21:33 -0700 (PDT) Received: by mo-csw.securemx.jp (mx-mo-csw1116) id 25UAK8RX002601; Thu, 30 Jun 2022 19:20:08 +0900 X-Iguazu-Qid: 2wGqj56vEDKR99B9ja X-Iguazu-QSIG: v=2; s=0; t=1656584407; q=2wGqj56vEDKR99B9ja; m=w4YWSAQWcCg3oRUYo+D3DaCf5rwuefgZmq+CB+ysdTg= Received: from imx2-a.toshiba.co.jp (imx2-a.toshiba.co.jp [106.186.93.35]) by relay.securemx.jp (mx-mr1112) id 25UAK64W014422 (version=TLSv1.2 cipher=AES128-GCM-SHA256 bits=128 verify=NOT); Thu, 30 Jun 2022 19:20:06 +0900 X-SA-MID: 41020227 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DRMkzp8ZUBmoOH3YI/cKMRRiXe0frf1qA2X421WMgza0A3kdtvBgzMc55i07fGaIrzLYumD62HjbTIN7WKhUyO5YVpsL/5Cz5AR0++ZCBND4uwkr1b2l93Az9wOqX2Eyt4gC56mdc27rSFn8NMmVvi0zO8ZMmRfS12nyo58ozTvJGjAWY1ZK7rHclHRP9fPrcEsOcMxBwmTZfopb3pm7ssoOTd4B2ffJwNe2Hs1DaC+19A69zc4Gl5ZFIWur2tbzVZXpMrFaKwJFHO5jUlFQBrfEurq8+qphGj3C7fXxNXa+xH+27WtvNOlWoEK0h605U7Q2UEszbagavbvmOvA+2A== 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=lbHyEBUeusCE3auAnYNFZESQ9nQLZhQ/euOkrKuLy0U=; b=BHVaIt0u11ANyXPQU/5b4zo0tksDa8m9Qlblp8JeEPDNpfUCCBF27tYuLICImxV2Do8OtgRduI8ldfFYyrYSKELANM2aRiRSwvXU4SugLkif/+Ae4NvC+yZPFnMp1axMDDClv/ywgUq163dVtrLISqsuKLgIfrRept/CfXywK7sRZs1R7qTRXv+DSrZRB99K6p+stAa9/J5b212mVhqQ8wLEfwlmmQkNRIDl+0LDl51clSW1JofDNSsm6nY49Asad02WEzC75tBKiUeflR/kzQ6cjE6HdeOJxB31qhVjykj2gSR+lKyn0nd3VLaMJLBoR4kX00ulhVMf5J8+TABN0Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=toshiba.co.jp; dmarc=pass action=none header.from=toshiba.co.jp; dkim=pass header.d=toshiba.co.jp; arc=none From: To: , , , CC: , , Subject: RE: media: platform: visconti: Toshiba Visconti Video driver with media control framework. Thread-Topic: media: platform: visconti: Toshiba Visconti Video driver with media control framework. Thread-Index: AQHYidTemojl0dh8QEumM5vzRzrW361mYoMAgAFP08A= Date: Thu, 30 Jun 2022 10:15:00 +0000 X-TSB-HOP2: ON Message-ID: References: <20220627032009.10250-1-yuji2.ishikawa@toshiba.co.jp> <91144047-f07f-0bf4-a2d7-6e36ce140862@xs4all.nl> In-Reply-To: <91144047-f07f-0bf4-a2d7-6e36ce140862@xs4all.nl> Accept-Language: ja-JP, en-US Content-Language: ja-JP X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=toshiba.co.jp; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 9edb387b-64cc-4505-b433-08da5a816408 x-ms-traffictypediagnostic: TYWPR01MB9806:EE_ x-ld-processed: f109924e-fb71-4ba0-b2cc-65dcdf6fbe4f,ExtAddr,ExtFwd x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: zciwfYGfn5Pb8tNTODB14Li5Py6YS3bjFBugovscEHUILKKH+VDyj9pr4XZ8iPJYdr6VI3ElFx57O+W2rufWw2WSk+4Y9RMU+K3w8VDNqGQiQK76qrIwzECdwUk7l7jmS1Hb83FiDfeKYFkFvmr6cIKkYnTIT7ZZjJx0Ihs/D4U3ZlkoClzeEHiSc4BWHYFUSZcJBjnldXXUc5+GxDFCN+rCGQ9t2dooFIP7WkcL9BvOY0X2II05FzEPJJo3211ilqcOUT1DwrtZ3NUqEjqkLGB43IpiF5ECL53+TVeFdgg6JTF3akaIuenw2YZF8aB+vk64y2q7xeUS4IuossPd5s+bDfdwrZCVL+fQP2Ehh9yCTVaYT1NsOHpL/KHKhCyEWW7JyhpY9QNnNxHDI2Cxf2JHiGUcjsAh+HG6FDdVCqiJUmaWnHMRxyajZeF7MvlIgP4P6ojpwoXJod23KEd2rnqOh7wvzIJQsdHNDsqmgQqKD+SC0MLnN6rO59+Ag3JV2IIS8wY8LJPJ6G/E4mage87bB7bYdwZGusL3QujyMfUg5xX4CeJ8sN7RrG/8OYwHfcJBKtKNctukZImiarBmlXVMpPkHdGJ+Niw1BJKEMZIcsqQokunSp0Ao5ZAf4sXplKfWwqE9BEz7dJuRchN/ePptOd5tYw0krBbazqQjHp3lMjEPU8n5KF8YDKTafKj09S+xYltoRejyZz57PY4oDKfElGmIpe18/TiwzD1EkOozdseiszOkJjHXx7KotqElfKRiOnxepgy/ABTPj/VlfzXaPwdqeQt32ToPRfTqHwg6/8QATCdaKt3YKmXRgV6E/spo4IuK//2m//biQxXrO1vdSQ21RUL3lIgUFa0/tpg= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYAPR01MB6201.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(366004)(39860400002)(396003)(136003)(346002)(376002)(86362001)(55016003)(122000001)(8676002)(53546011)(33656002)(64756008)(8936002)(26005)(6506007)(66446008)(66556008)(66476007)(9686003)(7696005)(38100700002)(5660300002)(38070700005)(2906002)(186003)(83380400001)(52536014)(54906003)(316002)(110136005)(76116006)(71200400001)(478600001)(4326008)(30864003)(6636002)(66946007)(41300700001)(461764006)(579004)(559001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Z2VNMEgzZHQ5bklVNitaZXMrVzA2WmwvR2ZLc2Q3ejJZanVOMFlKbFQxSlNu?= =?utf-8?B?SUdGZkxPN3N2WkRVcVJFdFdZVEJkWno5QTQ2MmgrbkkyQmMzYk1Cd2xoWGpU?= =?utf-8?B?WFRSTlhuVUMvenYvc20wU2hrQmxIYmZXVnltdFhDTDdib3E2bk5TbDZpbDdU?= =?utf-8?B?N0dkbmU0OE1WSjc2dEJvWDNqd3VDQTMwT3JCcWU5VjB0K2VISXB4UERUN2Vs?= =?utf-8?B?STFOZHB1dzMxSzF1b0t0TWttTHlLcnlCejdOcXRBYzVCdzY3LytMVmROTWxx?= =?utf-8?B?Q0tmNDNNeG5ES3pPalo5aWw4REZJTEVQKzJlMGxPUytEeXo0RGpSY3lKeTVU?= =?utf-8?B?UHd0UUxwbGpSMkhOc1Y3RTJCdm9kVU1LOXM1amQ3V0Y4SGo5MS8rR3B4UWVj?= =?utf-8?B?MTdaQVIrOGpES28rSnR3TzBmcGM0MVhHVEVRQ2FTTVVUOVlhcEQrM21xNm40?= =?utf-8?B?VCtMSGQwUndtRVFNbWdrNnpnMlNHd21SL045eXB5ejlBSW9xcXI3Q1ZmYmtU?= =?utf-8?B?NTIvRXJSU05sb3RyaUoraVJOMFFTeXlSbFlVWWVYbC95Y3IyMXpIVUhvdXVx?= =?utf-8?B?ajlJWWFDU3JlYU5UK2lMbU4yYmN0VEMveHpxdFJOcmNXdlptaFd2c0dvVU5r?= =?utf-8?B?ZmNIQ1c2SEJXYkxYNGRiT2haRy9LZUhpQmpEanJ3d1JqYWFJdzNFVU4xV0Z4?= =?utf-8?B?dDlZektvTzJSellSVFdoMDl6eXNReGtGdGFlUEtkb1VXVzhXMnVrMW9FdHNa?= =?utf-8?B?TEM4VkgrYXVlVTVxM2l4d0hsYXlDbExGamREMnlJckRNYkJOTmtaNTVWZXpo?= =?utf-8?B?ejN2bFduSE9ZVTlyY1Nrcll4aEJDajdQSzRWNFhFUWRiV1QxOEhROGJhdUxO?= =?utf-8?B?Z2ZpTkJ2bGNvVXRLbkIzQ2ZUdDVpWE43NWwwQ09xWjJhSFhIMmFiYVJHdmRz?= =?utf-8?B?K1FWREtrQmYrQUVyaXdPaFZ1Q2F2VXhKYi9XWWx1dlQ3T1I1YVVsWUJuMC9x?= =?utf-8?B?SUxKVm90NVlYVGlKL2hicko5UFlZRFp6WitpTmJXR3ptdis5ZHdKNVd3dWR2?= =?utf-8?B?aUN2OWtDTTM4SGVOcmprL1QvdFdBZFFKdlk4OTcxenBmOTVQdXVWZVd3czJv?= =?utf-8?B?MlREVU4xMGVZRWhjTUE0VXBhZWRQa0g3cG9iRXY2UVJZaHd5SUdqeTJ3OEpl?= =?utf-8?B?UVUySXR0MUkxUGFWcG1LY2c0ODZkNlN3T2NhRUlPZHg3cFJFWEp2SDNyQldp?= =?utf-8?B?dzIrQXV5QlcvMmYwaERqRGlydnB1bU1oS2d4dUU2Y3duOForYlowYTRGUURy?= =?utf-8?B?OXIwSy8vejNpdDFFVzBxVXRxV0hDRUVMM2VYWE1tMm1QVjcyRWk5dlprTWt5?= =?utf-8?B?Y0orWFhSZG1SKzNnR3R2ZHdCdUFrK3pRcDFaZEcxOEpyRHI0MVg3WHJFa0hF?= =?utf-8?B?MHRBVDhEaU1vellSTXJ1N0RWRG9Cc3VyT0JKR29yVk4rWmJvckxnaU9ZYlVh?= =?utf-8?B?S0plcWpjRVAvOXBHamlnSzk3S3lCazI3OWhNbHhSaVFxaWNGUmdzSm93emwv?= =?utf-8?B?ak9remZQVWgxVXJKcmdUSWNiNTFRN3hGNFhzTFd3bnIySWo3THo2dGR5ZHhm?= =?utf-8?B?cG9LZnp1ajNGdEhsSWVsVmNXQjBGa21hcGd2L3JONHZFazFuRkluR1puRUdI?= =?utf-8?B?dzllMk1xSWFkYUVzRzZkR2J5RXhvd0czdmt4ZGV4UEpYU0ZGajUzbi8vSnM4?= =?utf-8?B?MHV0L2dySkxjVHFkay9ubTNJaTNvUUpmS2sxZWVGbjlOVDdHQkdHUEhHSm1r?= =?utf-8?B?anhEZEhXbk1XTEFBWHlaT3cvbjF6VW5yYXRGSVRnTjRjZERhYnNxUHQ2RHhu?= =?utf-8?B?MGxzbGZyVDFmeTI1Zi9BbnBqSDd2Uzc1bm5OakVGQzVLTURLVmxvNC9iNDlP?= =?utf-8?B?Tm84a2tOaXU2eU1EMmtjdDdPeXZha2RsN1FuSEt1M0pnUlRrVHphMStkenRa?= =?utf-8?B?Q1lIVjRES3Y3RVRRNHJ4U3RhVmt4NDlNMG16V0lNKzBYS2w3WndBNjNhamZM?= =?utf-8?B?Y0VLelZlQ1pKTHZIYmNnSlJIOC9Wb0owSEg0bFVUQ1FQajg2MkJ6WkpGejcy?= =?utf-8?B?VFIxYWtOTE02WnN3VUovMHdWTWVMYjcwbFZJMzdMRUc1TVVCSk5xSUpPY0Mw?= =?utf-8?B?Z3c9PQ==?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYAPR01MB6201.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9edb387b-64cc-4505-b433-08da5a816408 X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Jun 2022 10:15:00.1607 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f109924e-fb71-4ba0-b2cc-65dcdf6fbe4f X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: zGeP5E2f8587ranndpU4F5wz+VZTqPpjFrh603Sz6LA11P7xG5IlmoWTsxhP/IyQxydAl0C8IBOasizKQR5w6MiHjW/SvJE5m+bue/IWpR0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYWPR01MB9806 X-OriginatorOrg: toshiba.co.jp MSSCP.TransferMailToMossAgent: 103 X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_LOW, SPF_HELO_PASS,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgSGFucywNCg0KVGhhbmsgeW91IGZvciB5b3VyIGNvbW1lbnQuDQpJJ20gdmVyeSBoYXBweSB0 byBoZWFyIHRoYXQgdGhlIG1vZHVsZSBkZXNpZ24gb2YgVklJRiBkcml2ZXIgYmV0dGVyIG1ha2Vz IHNlbnNlLg0KDQo+ID4gLSBIb3cgc2hvdWxkIEkgZGVmaW5lIElEIG51bWJlciBvZiB2ZW5kb3Ig c3BlY2lmaWMgY29udHJvbHMsIHN1Y2ggYXMNCj4gVjRMMl9DSURfVklTQ09OVElfVklJRl9JU1Bf TDJfU0VUX0NST1A/DQo+ID4gICBJdCBzZWVtcywgdGhlIHN0YW5kYXJkIHdheSBpcyB0byByZXNl cnZlIHZlbmRvciBzcGVjaWZpYyBJRHMgcmVsYXRpdmUgdG8NCj4gVjRMMl9DSURfVVNFUl9CQVNF Lg0KPiA+ICAgSXMgdGhhdCBtZWFuLCB2ZW5kb3Igc3BlY2lmaWMgQ0lEIGZvciBpb2N0bChTX0VY VF9DVFJMcykgaXMgc2hhcmVkLA0KPiBsaW1pdGVkIHJlc291cmNlcyBhbW9uZyB2NGwyIGRyaXZl cnM/DQo+IA0KPiBZZXMuIFlvdSByZXNlcnZlIGEgcmFuZ2Ugb2YgY29udHJvbHMgZm9yIHVzZSBi eSB0aGUgZHJpdmVyIGluDQo+IGluY2x1ZGUvdWFwaS9saW51eC92NGwyLWNvbnRyb2xzLg0KPiBU aGlzIGlzIHRvIGF2b2lkIGRpZmZlcmVudCBkcml2ZXJzIGZyb20gdXNpbmcgdGhlIHNhbWUgQ0lE LCB0aGF0J3Mgbm90IG5pY2UuDQo+IA0KPiBUaGVuIGluIGEgZHJpdmVyLXNwZWNpZmljIHB1Ymxp YyBoZWFkZXIgeW91IGRlZmluZSB0aGUgQ0lEcyBmb3IgeW91ciBkcml2ZXIsDQo+IGluY2x1ZGlu Zw0KPiBkb2N1bWVudGluZyB0aGVtLg0KDQpJIHVuZGVyc3RhbmQuDQpJIGNoZWNrZWQgdjRsMi1j b250cm9scy5oIGFuZCBmb3VuZCBzb21lIHNwZWNpZmljIENJRHMgZm9yIEgyNjQsIFZQOCwgVlA5 IGNvZGVjcy4NCg0KDQo+ID4gLSBIb3cgc2hvdWxkIEkgZXhwbGFpbiBlcnJvci9pbmNvbnNpc3Rl bmN5IG9mIHZpZGVvIGZvcm1hdCwgcmVzb2x1dGlvbiwgSVNQDQo+IGNvbmZpZ3VyYXRpb25zIGFt b25nIHY0bDIgKHN1Yi0pZGV2aWNlcz8NCj4gPiAgIEJlY2F1c2UgdGhlIFZJSUYgSFcgaXMgbm90 IHBvd2VyZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyAvZGV2L3ZpZGVvWA0KPiBpcyBjbG9zZWQs DQo+ID4gICBzZXR0aW5ncyBmcm9tIG1lZGlhLWN0bCBhbmQgdjRsMi1jdGwgYXJlIGhlbGQgdW5j aGVja2VkLA0KPiA+ICAgdGhlcmVmb3JlLCBzb21lIG9mIGluY29uc2lzdGVuY3kgd291bGQgYmUg ZGV0ZWN0ZWQgYXQgbGlua192YWxpZGF0ZSgpIGNhbGwNCj4gYmFjayB0cmlnZ2VyZCBieSBzdGFy dC1zdHJlYW1pbmcuDQo+ID4gICBDdXJyZW50bHksIEkgc2V0IEVYRUNVVEVfT05fV1JJVEUgZmxh ZyB0byBldmVyeSB2ZW5kb3Igc3BlY2lmaWMgY29udHJvbHMNCj4gYW5kIHJlamVjdCBjaGFuZ2Vz IHdoZW4gdGhlIEhXIGlzIG5vdCBwb3dlcmVkLA0KPiA+ICAgYWx0aG91Z2ggSSBob3BlIHRoZXJl IHNob3VsZCBiZSBiZXR0ZXIgaWRlYS4NCj4gDQo+IEkgYW0gbm90IHN1cmUgSSB1bmRlcnN0YW5k IHlvdXIgcXVlc3Rpb24uIEkgdGhpbmsgeW91ciBpc3N1ZSBpcyB0aGF0IGlmIHRoZQ0KPiBWSUlG IEhXIGlzIHBvd2VyZWQgZG93biwgaXQgYWxzbyBsb3NlcyBpdHMgY29uZmlndXJhdGlvbiAoaS5l LiBjb250cm9sIHNldHRpbmdzKS4NCj4gU28gaXMgdGhlIHF1ZXN0aW9uIHdoYXQgdG8gZG8gd2hl biBpdCBpcyBwb3dlcmVkIHVwIGFnYWluPyBJLmUuIGhvdyB0byByZXN0b3JlDQo+IHRoZSBjb250 cm9scz8NCj4gDQo+IE9yIGFtIEkgY29tcGxldGVseSBtaXN1bmRlcnN0YW5kaW5nIHlvdXIgcXVl c3Rpb24/DQoNCkkgaG9wZSBJIHVuZGVyc3RhbmQgc3RhbmRhcmQgd2F5IHRvIHJlc3RvcmUgY29u dHJvbCB2YWx1ZXMgdG8gSFcuIE15IHVuZGVyc3RhbmRpbmcgaXMgLi4uLg0KKiBWNGwyLWNvbnRy b2xzIGhvbGQgdGhlIGxhc3QgdmFsdWUgc2V0IGJ5IHVzZXJsYW5kLg0KKiBPbiByZXN0b3JhdGlv biwgc3RvcmVkIGNvbnRyb2wtdmFsdWUgYXJlIHByb3ZpZGVkIGJ5IGVpdGhlciBvZjoNCiAgKiBD YWxsaW5nIF9fdjRsMl9jdHJsX2hhbmRsZXJfc2V0dXAoKSBmdW5jdGlvbg0KICAqIENoZWNraW5n IGVhY2ggdjRsMi1jdHJsIGluc3RhbmNlLg0KDQpUaGlzIHJlc3RvcmF0aW9uIGlzIHR5cGljYWxs eSBkb25lIGF0IHY0bDJfc3ViZGV2X3ZpZGVvX29wczo6c19zdHJlYW0gY2FsbGJhY2suDQpWaXNj b250aTUgVklJRiBIVyBpcyBzdXJlbHkgcG93ZXJlZCB3aGVuIHNfc3RyZWFtIGlzIGNhbGxlZC4g Tm8gcHJvYmxlbS4NCg0KTXkgY29uY2VybiBpcyAuLi4gaWYgaW5jb25zaXN0ZW50IHNldCBvZiBj b25maWd1cmF0aW9ucyBpcyBwcm92aWRlZCB0aHJvdWdoIHY0bDItY29udHJvbHMsIGhvdyBkcml2 ZXJzIGNhbiByZXBvcnQgdGhlIGVycm9yICh3aGljaCBjb250cm9sIHZhbHVlIGlzIG5vdCBnb29k KSB0byB1c2VybGFuZC4NCjEuIHdoZW4gVklJRiBIVyBpcyB0dXJuZWQgb2ZmDQoyLiB2NGwyLWNv dG5yb2wgdmFsdWUgaXMgc2V0IHdpdGggdjRsMi1jdGwgdG9vbA0KMy4gc19jdHJsIGNhbGxiYWNr IGlzIGNhbGxlZC4gSG93ZXZlciwgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBub3QgY2hlY2tlZCBj b21wbGV0ZWx5IGJlY2F1c2UgVklJRiBIVyBpcyBub3QgcG93ZXJlZC4NCiAgKiBZZXMgSSBrbm93 LCB0aGlzIGlzIG1haW5seSBiZWNhdXNlIG9mIHBvb3IgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBW SUlGIGRyaXZlci4NCjQuIHY0bDItY3RsIHRvb2wgcmV0dXJucyBPSyBmb3IgcmVxdWVzdCAod2l0 aCByb3VnaCBlcnJvciBjaGVjaykNCjUuIFZJSUYgSFcgaXMgdHVybmVkIG9uIGFuZCBpb2N0bChW SURJT0NfU1RSRUFNT04pIGlzIGNhbGxlZA0KNi4gY29udHJvbCB2YWx1ZXMgYXJlIHJlc3RvcmVk IHdpdGggX192NGwyX2N0cmxfaGFuZGxlcl9zZXR1cCgpDQo3LiBpbmNvbnNpc3RlbmN5IGFtb25n IGNvbnRyb2wgdmFsdWVzIGFyZSBkZXRlY3RlZCB3aGVuIGNvbmZpZ3VyaW5nIEhXLg0KOC4gaW9j dGwoVklESU9DX1NUUkVBTU9OKSBmYWlscy4gQW5kIHVzZXIgd2FudCB0byBrbm93IHdoaWNoIGNv bnRyb2wgdmFsdWUgaXMgbm90IGFjdHVhbGx5IGdvb2QuDQoNCkkga25vdyB0aGUgYmVzdCBzb2x1 dGlvbiBpcyB0byBkZXRlY3QgaW5jb25zaXN0ZW5jeSBhcyBlYXJseSBhcyBwb3NzaWJsZSwgcG9z c2libHkgYXQgc3RlcCAzLg0KSXMgdGhlcmUgc29tZSBnb29kIHByYWN0aWNlIHRvIGhlbHAgdXNl ciB1bmRlcnN0YW5kIHdoYXQgdGhlIHByb2JsZW0gaXMgPw0KV2UgY2FuIHVzZSBkZXZfZXJyKCkg dG8gc2hvdyBkZXRhaWw/DQoNClJlZ2FyZHMsDQoJWXVqaSANCg0KPiAtLS0tLU9yaWdpbmFsIE1l c3NhZ2UtLS0tLQ0KPiBGcm9tOiBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4NCj4g U2VudDogV2VkbmVzZGF5LCBKdW5lIDI5LCAyMDIyIDEwOjIxIFBNDQo+IFRvOiBpc2hpa2F3YSB5 dWppKOefs+W3nSDmgqDlj7gg4peL77yy77yk77yj4pah77yh77yp77y077yj4peL77yl77yh6ZaL KQ0KPiA8eXVqaTIuaXNoaWthd2FAdG9zaGliYS5jby5qcD47IExhdXJlbnQgUGluY2hhcnQNCj4g PGxhdXJlbnQucGluY2hhcnRAaWRlYXNvbmJvYXJkLmNvbT47IE1hdXJvIENhcnZhbGhvIENoZWhh Yg0KPiA8bWNoZWhhYkBrZXJuZWwub3JnPjsgaXdhbWF0c3Ugbm9idWhpcm8o5bKp5p2+IOS/oea0 iyDilqHvvLPvvLfvvKPil6/vvKHvvKPvvLQpDQo+IDxub2J1aGlybzEuaXdhbWF0c3VAdG9zaGli YS5jby5qcD4NCj4gQ2M6IGxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZzsgbGludXgtYXJtLWtl cm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnOw0KPiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3Jn DQo+IFN1YmplY3Q6IFJlOiBtZWRpYTogcGxhdGZvcm06IHZpc2NvbnRpOiBUb3NoaWJhIFZpc2Nv bnRpIFZpZGVvIGRyaXZlciB3aXRoIG1lZGlhDQo+IGNvbnRyb2wgZnJhbWV3b3JrLg0KPiANCj4g T24gMjcvMDYvMjAyMiAwNToyMCwgWXVqaSBJc2hpa2F3YSB3cm90ZToNCj4gPiBIaSwgSGFucw0K PiA+IEknbSBub3cgcmUtd3JpdGluZyB0aGUgdG9wIGxheWVyIG9mIFZpc2NvbnRpNSB2aWRlbyBp bnB1dCBkcml2ZXIgZm9sbG93aW5nIHlvdXINCj4gc3VnZ2VzdGlvbnMuDQo+ID4gSSBqdXN0IGFw cGxpZWQgbWVkaWEtY29udHJvbGxlciBmcmFtZXdvcmssIGFuZCBpbXBsZW1lbnRlZCAobGltaXRl ZCBudW1iZXINCj4gb2YpIGNvbXBvdW5kIGNvbnRyb2xscyBpbnN0ZWFkIG9mIHByaXZhdGUgaW9j dGxzLg0KPiA+IFBsZWFzZSBsZXQgbWUga25vdyBpZiB0aGlzIGltcGxlbWVudGF0aW9uIHNhdGlm aWVzIHRoZSBsYXRlc3Qgc3RhbmRhcmQgb2YNCj4gbWVkaWEgZHJpdmVycy4NCj4gPg0KPiA+IEhl cmUncyBzb21lIGRlc2NyaXB0aW9uIG9mIHRoZSBkcml2ZXIgYW5kIHRoZSBjb3JyZXNwb25kaW5n IGhhcmR3YXJlLg0KPiA+IEZpcnN0bHksIFZpc2NvbnRpNSBTb0MgdmlkZW8gY2FwdHVyZSBzdWJz eXN0ZW0gaXMgY29tcG9zZWQgb2YgdGhlc2UgdW5pdHMuDQo+ID4NCj4gPiAtIENTSTJSWDogcmVj ZWl2ZXMgTUlQSSBDU0ktMiBzaWduYWwNCj4gPiAtIEwxIElTUDogY29ycmVjdGlvbiBhbmQgZW5o YW5jZW1lbnQgdG8gUkFXIHBpY3R1cmUNCj4gPiAtIEwyIElTUDogdW5kaXN0b3J0aW9uLCBzY2Fs aW5nLCB1cCB0byAyIFJPSXMNCj4gPiAtIFZETUFDOiAgaW50ZWdyYXRlZCB0byBMMklTUCwgdHJh bnNmZXIgcGljdHVyZSB0byBtYWluIG1lbW9yeS4NCj4gPg0KPiA+IFRoZSB1cGRhdGVkIFZpc2Nv bnRpIFZpZGVvIGlucHV0IGRyaXZlciBzdHJ1Y3R1cmUgaXM6DQo+ID4NCj4gPiArLS0tLS0tLS0t LS0tLS0rICAgICAgICstLS0tLS0tLS0tLS0tLS0tKyAgICAgICArLS0tLS0tLS0tLS0tLS0tLSsN Cj4gPiB8IGltYWdlIHNlbnNvciB8ID09PT0+IHwgSVNQIHN1YmRldmljZSAgfCA9PT09PiB8IENh cHR1cmUgZGV2aWNlIHwNCj4gPiArLS0tLS0tLS0tLS0tLS0rICAgICAgICstLS0tLS0tLS0tLS0t LS0tKyAgICAgICArLS0tLS0tLS0tLS0tLS0tLSsNCj4gDQo+IFRoaXMgZGVzaWduIG1ha2VzIG11 Y2ggbW9yZSBzZW5zZSwgbmljZSENCj4gDQo+ID4NCj4gPiAtIEltYWdlIHNlbnNvcg0KPiA+ICAg LSB0ZXN0ZWQgd2l0aCBJTVgyMTkNCj4gPiAgIC0gcGFkDQo+ID4gICAgIC0gc291cmNlDQo+ID4g ICAgICAgLSBmb3JtYXQ6IFNSR0dCMTAgMTkyMHgxMDgwDQo+ID4gICAgICAgLSBzZWxlY3Rpb24N Cj4gPiAgICAgICAgIC0gY3JvcA0KPiA+ICAgICAgICAgLSBuYXRpdmUNCj4gPiAtIElTUCBzdWJk ZXZpY2UNCj4gPiAgIC0gY29ycmVzcG9uZHMgdG86IENTSTJSWCwgTDFJU1AsIEwySVNQDQo+ID4g ICAtIHBhZA0KPiA+ICAgICAtIHNpbmsNCj4gPiAgICAgICAtIGZvcm1hdDogdGhlIHNhbWUgYXMg c2Vuc29yOjpwYWQ6OnNvdXJjZTo6Zm9ybWF0DQo+ID4gICAgICAgLSBzZWxlY3Rpb24NCj4gPiAg ICAgICAgIC0gY3JvcDogdGhlIHNhbWUgYXMgZm9ybWF0DQo+ID4gICAgICAgICAtIGNvbXBvc2U6 IChyZWFkb25seSkgaW50ZXJtZWRpYXRlIHt3aWR0aCwgaGVpZ2h0fSBkZXJpdmVkIGJ5DQo+IHVu ZGlzdG9ydGlvbiBhbmQgc2NhbGluZy4NCj4gPiAgICAgICAgIC0gY29tcG9zZS5ib3VuZDogKGZp eGVkKSA4MTkyIHggNDA5Ng0KPiA+ICAgICAtIHNvdXJjZQ0KPiA+ICAgICAgIC0gZm9ybWF0OiBZ VVY4IGZvciBSQVcvWVVWIHNlbnNvciBpbnB1dCwgUkdCODg4IGZvciBSR0Igc2Vuc29yDQo+IGlu cHV0DQo+ID4gICAgICAgLSBzZWxlY3Rpb24NCj4gPiAgICAgICAgIC0gY3JvcDoge2xlZnQsIHRv cCwgd2lkdGgsIGhlaWdodH0gaW4gaXNwOjpwYWQ6OnNpbms6OnNlbGVjdGlvbjo6Y29tcG9zZQ0K PiA+ICAgLSBjb21wb3VuZCBjb250cm9scw0KPiA+ICAgICAtIHVuZGlzdG9ydGlvbiBhbmQgc2Nh bGluZw0KPiA+ICAgICAgIC0gdXBkYXRlcyBpc3A6OnBhZDo6c2luazo6c2VsZWN0aW9uOjpjb21w b3NlDQo+ID4gICAgIC0gb3RoZXIgYXBwcm94LiAzMCB2ZW5kb3Igc3BlY2lmaWMgY29udHJvbHMg dG8gY29uZmlndXJlIElTUCBvcGVyYXRpb24NCj4gPiAtIENhcHR1cmUgZGV2aWNlDQo+ID4gICAt IGNvcnJlc3BvbmRzIHRvOiBWRE1BQw0KPiA+ICAgLSBwYWQNCj4gPiAgICAgLSBzaW5rOiBjb25u ZWN0ZWQgdG8gSVNQIHN1YmRldmljZQ0KPiA+DQo+ID4gSW4gdGVybXMgb2Ygc29mdHdhcmUgaW1w bGVtZW50YXRpb24sIHRoZSBkcml2ZXIgcm91Z2hseSBjb21wb3NlZCBvZiB0d28NCj4gbGF5ZXJz Lg0KPiA+DQo+ID4gLSBBUEkgbGF5ZXI6IHRvIGNvbW11bmljYXRlIHdpdGggVjRMMiBzdWJzeXN0 ZW0NCj4gPiAgIC0gdmlpZi5jDQo+ID4gICAtIHZpaWZfY2FwdHVyZS5jOiBDYXB0dXJlIFY0TDIg ZGV2aWNlIG5vZGUNCj4gPiAgIC0gdmlpZl9pc3AuYzogSVNQIHY0bDIgc3ViZGV2aWNlIG5vZGUN Cj4gPiAgICAgLSB2aWlmX2lvY3RsLmM6IHNfY3RybCBoYW5kbGVycyB0byBjb25maWd1cmUgSVNQ DQo+ID4gLSBIVyBzcGVjaWZpYyBsYXllcjogdG8gaGFuZGxlIGhhcmR3YXJlIHJlZ2lzdGVyIHZh bHVlcw0KPiA+ICAgLSBod2RfdmlpZl8qLltjaF0NCj4gPg0KPiA+IEFsb25nIHdpdGggcmUtd3Jp dGluZywgSSBnb3Qgc29tZSBxdWVzdGlvbnMuIERvIHlvdSBoYXZlIHJ1bGVzIG9yIHByYWN0aWNl cyB0bw0KPiByZXNvbHZlIHRoZW0/DQo+ID4NCj4gPiAtIEhvdyBzaG91bGQgSSBkZWZpbmUgSUQg bnVtYmVyIG9mIHZlbmRvciBzcGVjaWZpYyBjb250cm9scywgc3VjaCBhcw0KPiBWNEwyX0NJRF9W SVNDT05USV9WSUlGX0lTUF9MMl9TRVRfQ1JPUD8NCj4gPiAgIEl0IHNlZW1zLCB0aGUgc3RhbmRh cmQgd2F5IGlzIHRvIHJlc2VydmUgdmVuZG9yIHNwZWNpZmljIElEcyByZWxhdGl2ZSB0bw0KPiBW NEwyX0NJRF9VU0VSX0JBU0UuDQo+ID4gICBJcyB0aGF0IG1lYW4sIHZlbmRvciBzcGVjaWZpYyBD SUQgZm9yIGlvY3RsKFNfRVhUX0NUUkxzKSBpcyBzaGFyZWQsDQo+IGxpbWl0ZWQgcmVzb3VyY2Vz IGFtb25nIHY0bDIgZHJpdmVycz8NCj4gDQo+IFllcy4gWW91IHJlc2VydmUgYSByYW5nZSBvZiBj b250cm9scyBmb3IgdXNlIGJ5IHRoZSBkcml2ZXIgaW4NCj4gaW5jbHVkZS91YXBpL2xpbnV4L3Y0 bDItY29udHJvbHMuDQo+IFRoaXMgaXMgdG8gYXZvaWQgZGlmZmVyZW50IGRyaXZlcnMgZnJvbSB1 c2luZyB0aGUgc2FtZSBDSUQsIHRoYXQncyBub3QgbmljZS4NCj4gDQo+IFRoZW4gaW4gYSBkcml2 ZXItc3BlY2lmaWMgcHVibGljIGhlYWRlciB5b3UgZGVmaW5lIHRoZSBDSURzIGZvciB5b3VyIGRy aXZlciwNCj4gaW5jbHVkaW5nDQo+IGRvY3VtZW50aW5nIHRoZW0uDQo+IA0KPiA+IC0gSG93IHNo b3VsZCBJIGV4cGxhaW4gZXJyb3IvaW5jb25zaXN0ZW5jeSBvZiB2aWRlbyBmb3JtYXQsIHJlc29s dXRpb24sIElTUA0KPiBjb25maWd1cmF0aW9ucyBhbW9uZyB2NGwyIChzdWItKWRldmljZXM/DQo+ ID4gICBCZWNhdXNlIHRoZSBWSUlGIEhXIGlzIG5vdCBwb3dlcmVkIHdoZW4gdGhlIGNvcnJlc3Bv bmRpbmcgL2Rldi92aWRlb1gNCj4gaXMgY2xvc2VkLA0KPiA+ICAgc2V0dGluZ3MgZnJvbSBtZWRp YS1jdGwgYW5kIHY0bDItY3RsIGFyZSBoZWxkIHVuY2hlY2tlZCwNCj4gPiAgIHRoZXJlZm9yZSwg c29tZSBvZiBpbmNvbnNpc3RlbmN5IHdvdWxkIGJlIGRldGVjdGVkIGF0IGxpbmtfdmFsaWRhdGUo KSBjYWxsDQo+IGJhY2sgdHJpZ2dlcmQgYnkgc3RhcnQtc3RyZWFtaW5nLg0KPiA+ICAgQ3VycmVu dGx5LCBJIHNldCBFWEVDVVRFX09OX1dSSVRFIGZsYWcgdG8gZXZlcnkgdmVuZG9yIHNwZWNpZmlj IGNvbnRyb2xzDQo+IGFuZCByZWplY3QgY2hhbmdlcyB3aGVuIHRoZSBIVyBpcyBub3QgcG93ZXJl ZCwNCj4gPiAgIGFsdGhvdWdoIEkgaG9wZSB0aGVyZSBzaG91bGQgYmUgYmV0dGVyIGlkZWEuDQo+ IA0KPiBJIGFtIG5vdCBzdXJlIEkgdW5kZXJzdGFuZCB5b3VyIHF1ZXN0aW9uLiBJIHRoaW5rIHlv dXIgaXNzdWUgaXMgdGhhdCBpZiB0aGUNCj4gVklJRiBIVyBpcyBwb3dlcmVkIGRvd24sIGl0IGFs c28gbG9zZXMgaXRzIGNvbmZpZ3VyYXRpb24gKGkuZS4gY29udHJvbCBzZXR0aW5ncykuDQo+IFNv IGlzIHRoZSBxdWVzdGlvbiB3aGF0IHRvIGRvIHdoZW4gaXQgaXMgcG93ZXJlZCB1cCBhZ2Fpbj8g SS5lLiBob3cgdG8gcmVzdG9yZQ0KPiB0aGUgY29udHJvbHM/DQo+IA0KPiBPciBhbSBJIGNvbXBs ZXRlbHkgbWlzdW5kZXJzdGFuZGluZyB5b3VyIHF1ZXN0aW9uPw0KPiANCj4gUmVnYXJkcywNCj4g DQo+IAlIYW5zDQo+IA0KPiA+DQo+ID4gSSBob3BlIEknbSBub3Qgb24gdGhlIHdyb25nIHdheSBv ZiByZS13cml0aW5nLg0KPiA+DQo+ID4gUmVnYXJkcywNCj4gPiAJWXVqaQ0KPiA+DQo+ID4gLS0t DQo+ID4gQWRkIHN1cHBvcnQgdG8gVmlkZW8gSW5wdXQgSW50ZXJmYWNlIG9uIFRvc2hpYmEgVmlz Y29udGkgQVJNIFNvQ3MuDQo+ID4gVGhlIFZpZGVvIElucHV0IEludGVyZmFjZSBpbmNsdWRlcyBD U0kyIHJlY2VpdmVyLCBmcmFtZSBncmFiYmVyIGFuZCBpbWFnZQ0KPiBzaWduYWwgcHJvY2Vzc29y Lg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogWXVqaSBJc2hpa2F3YSA8eXVqaTIuaXNoaWthd2FA dG9zaGliYS5jby5qcD4NCj4gPiAtLS0NCj4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92aXNj b250aS9NYWtlZmlsZSAgICAgIHwgICAxICsNCj4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92 aXNjb250aS92aWlmLmMgICAgICAgIHwgNDkxICsrKysrKysrKw0KPiA+ICAuLi4vbWVkaWEvcGxh dGZvcm0vdmlzY29udGkvdmlpZl9jYXB0dXJlLmMgICAgfCA5NDgNCj4gKysrKysrKysrKysrKysr KysNCj4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92aXNjb250aS92aWlmX2lvY3RsLmMgIHwg Mjg3ICsrKysrKw0KPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Zpc2NvbnRpL3ZpaWZfaXNw LmMgICAgfCA5NjgNCj4gKysrKysrKysrKysrKysrKysrDQo+ID4gIDUgZmlsZXMgY2hhbmdlZCwg MjY5NSBpbnNlcnRpb25zKCspDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlh L3BsYXRmb3JtL3Zpc2NvbnRpL3ZpaWYuYw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS92aXNjb250aS92aWlmX2NhcHR1cmUuYw0KPiA+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92aXNjb250aS92aWlmX2lvY3RsLmMNCj4g PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdmlzY29udGkvdmlp Zl9pc3AuYw0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdmlz Y29udGkvTWFrZWZpbGUNCj4gYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Zpc2NvbnRpL01ha2Vm aWxlDQo+ID4gaW5kZXggZDI3ZGE2MTFhLi4xMWQ4MGFlYjMgMTAwNjQ0DQo+ID4gLS0tIGEvZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS92aXNjb250aS9NYWtlZmlsZQ0KPiA+ICsrKyBiL2RyaXZlcnMv bWVkaWEvcGxhdGZvcm0vdmlzY29udGkvTWFrZWZpbGUNCj4gPiBAQCAtMyw2ICszLDcgQEANCj4g PiAgIyBNYWtlZmlsZSBmb3IgdGhlIFZpc2NvbnRpIHZpZGVvIGlucHV0IGRldmljZSBkcml2ZXIN Cj4gPiAgIw0KPiA+DQo+ID4gK3Zpc2NvbnRpLXZpaWYtb2JqcyA9IHZpaWYubyB2aWlmX2NhcHR1 cmUubyB2aWlmX2lvY3RsLm8gdmlpZl9pc3Aubw0KPiA+ICB2aXNjb250aS12aWlmLW9ianMgKz0g aHdkX3ZpaWZfY3NpMnJ4Lm8gaHdkX3ZpaWYubyBod2RfdmlpZl9sMWlzcC5vDQo+ID4NCj4gPiAg b2JqLSQoQ09ORklHX1ZJREVPX1ZJU0NPTlRJX1ZJSUYpICs9IHZpc2NvbnRpLXZpaWYubw0KPiA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Zpc2NvbnRpL3ZpaWYuYw0KPiBi L2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdmlzY29udGkvdmlpZi5jDQo+ID4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAuLmFjNzc4ZDZhYg0KPiA+IC0tLSAvZGV2L251 bGwNCj4gPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Zpc2NvbnRpL3ZpaWYuYw0KPiA+ IEBAIC0wLDAgKzEsNDkxIEBADQo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wIE9SIEJTRC0yLUNsYXVzZQ0KPiA+ICsvKiBUb3NoaWJhIFZpc2NvbnRpIFZpZGVvIENhcHR1 cmUgU3VwcG9ydA0KPiA+ICsgKg0KPiA+ICsgKiAoQykgQ29weXJpZ2h0IDIwMjIgVE9TSElCQSBD T1JQT1JBVElPTg0KPiA+ICsgKiAoQykgQ29weXJpZ2h0IDIwMjIgVG9zaGliYSBFbGVjdHJvbmlj IERldmljZXMgJiBTdG9yYWdlIENvcnBvcmF0aW9uDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2lu Y2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4g PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4N Cj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgv b2ZfZ3JhcGguaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KPiA+ ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1md25vZGUuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlICJ2 aWlmLmgiDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFZJSUZfSVNQX0dVQVJEX1NUQVJUKHZpaWZfZGV2 KQ0KPiBcDQo+ID4gKwlkbw0KPiB7DQo+ICAgICAgICAgICAgICAgICBcDQo+ID4gKw0KPiAJaHdk X1ZJSUZfaXNwX2Rpc2FibGVfcmVnYnVmX2F1dG9fdHJhbnNtaXNzaW9uKHZpaWZfZGV2LT5jaCk7 DQo+IFwNCj4gPiArCQluZGVsYXkoNTAwKTsNCj4gXA0KPiA+ICsJCWh3ZF9WSUlGX21haW5fbWFz a192bGF0Y2godmlpZl9kZXYtPmNoLA0KPiBIV0RfVklJRl9FTkFCTEUpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgXA0KPiA+ICsJfSB3aGlsZSAoMCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgVklJ Rl9JU1BfR1VBUkRfRU5EKHZpaWZfZGV2KQ0KPiBcDQo+ID4gKwlkbw0KPiB7DQo+ICAgICAgICAg ICAgICAgICBcDQo+ID4gKwkJaHdkX1ZJSUZfbWFpbl9tYXNrX3ZsYXRjaCh2aWlmX2Rldi0+Y2gs DQo+IEhXRF9WSUlGX0RJU0FCTEUpOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQo+ID4gKwkJ aHdkX1ZJSUZfaXNwX3NldF9yZWdidWZfYXV0b190cmFuc21pc3Npb24odmlpZl9kZXYtPmNoLA0K PiBWSUlGX0lTUF9SRUdCVUZfMCwgICAgICAgICBcDQo+ID4gKw0KPiBWSUlGX0lTUF9SRUdCVUZf MCwgMCk7ICAgICAgICAgICAgICAgICAgIFwNCj4gPiArCX0gd2hpbGUgKDApDQo+ID4gKw0KPiA+ ICt2b2lkIHZpaWZfaHdfb24oc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldikNCj4gPiArew0K PiA+ICsJaHdkX1ZJSUZfaW5pdGlhbGl6ZSh2aWlmX2Rldi0+Y2gsIHZpaWZfZGV2LT5jc2kyaG9z dF9yZWcsDQo+IHZpaWZfZGV2LT5jYXB0dXJlX3JlZyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3Zv aWQgdmlpZl9od19vZmYoc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldikNCj4gPiArew0KPiA+ ICsJLyogVW5pbml0aWFsaXplIEhXRCBkcml2ZXIgKi8NCj4gPiArCWh3ZF9WSUlGX3VuaW5pdGlh bGl6ZSh2aWlmX2Rldi0+Y2gpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHN0 cnVjdCB2aWlmX2RldmljZSAqdjRsMl90b192aWlmKHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9k ZXYpDQo+ID4gK3sNCj4gPiArCXJldHVybiBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCB2 aWlmX2RldmljZSwgdjRsMl9kZXYpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0 IHZpaWZfc3ViZGV2ICp0b192aWlmX3N1YmRldihzdHJ1Y3QgdjRsMl9hc3luY19zdWJkZXYgKmFz ZCkNCj4gPiArew0KPiA+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihhc2QsIHN0cnVjdCB2aWlmX3N1 YmRldiwgYXNkKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArI2RlZmluZSBWSUlGX0VSUl9NX0VWRU5U X0dBTU1BVEJMX1NISUZUIDhVDQo+ID4gKyNkZWZpbmUgVklJRl9FUlJfTV9FVkVOVF9HQU1NQVRC TF9NQVNLCTB4N1UNCj4gPiArI2RlZmluZSBWSUlGX1NZTkNfTV9FVkVOVF9ERUxBWTJfU0hJRlQJ MlUNCj4gPiArI2RlZmluZSBNQUlOX0RFTEFZX0lOVF9FUlJfTUFTSwkJMHgwMTAwMDAwMFUNCj4g PiArDQo+ID4gK2V4dGVybiB2b2lkIHZpc2NvbnRpX3ZpaWZfY2FwdHVyZV9zd2l0Y2hfYnVmZmVy KHN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYsDQo+IHVpbnQzMl90IHN0YXR1c19lcnIsDQo+ ID4gKwkJCQkJCXVpbnQzMl90IGwyX3RyYW5zZmVyX3N0YXR1cyk7DQo+ID4gKw0KPiA+ICtzdGF0 aWMgdm9pZCB2aWlmX3ZzeW5jX2lycV9oYW5kbGVyX3dfaXNwKHN0cnVjdCB2aWlmX2RldmljZSAq dmlpZl9kZXYpDQo+ID4gK3sNCj4gPiArCXVpbnQzMl90IGV2ZW50X21haW4sIGV2ZW50X3N1Yiwg bWFzaywgc3RhdHVzX2VyciwgbDJfdHJhbnNmZXJfc3RhdHVzOw0KPiA+ICsNCj4gPiArCWh3ZF9W SUlGX3ZzeW5jX2lycV9oYW5kbGVyKHZpaWZfZGV2LT5jaCwgJmV2ZW50X21haW4sICZldmVudF9z dWIpOw0KPiA+ICsNCj4gPiArCS8qIERlbGF5ZWQgVnN5bmMgb2YgTUFJTiB1bml0ICovDQo+ID4g KwlpZiAoKChldmVudF9tYWluID4+IFZJSUZfU1lOQ19NX0VWRU5UX0RFTEFZMl9TSElGVCkgJiAw eDFVKQ0KPiA9PSAweDFVKSB7DQo+ID4gKwkJLyogdW5tYXNrIHRpbWVvdXQgZXJyb3Igb2YgZ2Ft bWEgdGFibGUgKi8NCj4gPiArCQltYXNrID0gTUFJTl9ERUxBWV9JTlRfRVJSX01BU0s7DQo+ID4g KwkJaHdkX1ZJSUZfbWFpbl9zdGF0dXNfZXJyX3NldF9pcnFfbWFzayh2aWlmX2Rldi0+Y2gsDQo+ ICZtYXNrKTsNCj4gPiArCQl2aWlmX2Rldi0+bWFza2VkX2dhbW1hX3BhdGggPSAwOw0KPiA+ICsN Cj4gPiArCQkvKiBHZXQgYWJvcnQgc3RhdHVzIG9mIEwySVNQICovDQo+ID4gKwkJVklJRl9JU1Bf R1VBUkRfU1RBUlQodmlpZl9kZXYpOw0KPiA+ICsJCWh3ZF9WSUlGX2lzcF9nZXRfaW5mbyh2aWlm X2Rldi0+Y2gsIFZJSUZfSVNQX1JFR0JVRl8wLA0KPiBOVUxMLCBOVUxMLCBOVUxMLA0KPiA+ICsJ CQkJICAgICAgJmwyX3RyYW5zZmVyX3N0YXR1cywgTlVMTCwgTlVMTCk7DQo+ID4gKwkJVklJRl9J U1BfR1VBUkRfRU5EKHZpaWZfZGV2KTsNCj4gPiArDQo+ID4gKwkJc3RhdHVzX2VyciA9IHZpaWZf ZGV2LT5zdGF0dXNfZXJyOw0KPiA+ICsJCXZpaWZfZGV2LT5zdGF0dXNfZXJyID0gMDsNCj4gPiAr DQo+ID4gKwkJdmlzY29udGlfdmlpZl9jYXB0dXJlX3N3aXRjaF9idWZmZXIodmlpZl9kZXYsIHN0 YXR1c19lcnIsDQo+IGwyX3RyYW5zZmVyX3N0YXR1cyk7DQo+ID4gKwl9DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyB2b2lkIHZpaWZfc3RhdHVzX2Vycl9pcnFfaGFuZGxlcihzdHJ1Y3Qgdmlp Zl9kZXZpY2UgKnZpaWZfZGV2KQ0KPiA+ICt7DQo+ID4gKwl1aW50MzJfdCBldmVudF9tYWluLCBl dmVudF9zdWIsIHZhbCwgbWFzazsNCj4gPiArDQo+ID4gKwlod2RfVklJRl9zdGF0dXNfZXJyX2ly cV9oYW5kbGVyKHZpaWZfZGV2LT5jaCwgJmV2ZW50X21haW4sDQo+ICZldmVudF9zdWIpOw0KPiA+ ICsNCj4gPiArCWlmIChldmVudF9tYWluICE9IDBVKSB7DQo+ID4gKwkJLyogbWFzayBmb3IgZ2Ft bWEgdGFibGUgdGltZSBvdXQgZXJyb3Igd2hpY2ggd2lsbCBiZQ0KPiB1bm1hc2tlZCBpbiB0aGUg bmV4dCBWc3luYyAqLw0KPiA+ICsJCXZhbCA9IChldmVudF9tYWluID4+DQo+IFZJSUZfRVJSX01f RVZFTlRfR0FNTUFUQkxfU0hJRlQpICYNCj4gPiArCQkgICAgICBWSUlGX0VSUl9NX0VWRU5UX0dB TU1BVEJMX01BU0s7DQo+ID4gKwkJaWYgKHZhbCAhPSAwVSkgew0KPiA+ICsJCQl2aWlmX2Rldi0+ bWFza2VkX2dhbW1hX3BhdGggfD0gdmFsOw0KPiA+ICsJCQltYXNrID0gTUFJTl9ERUxBWV9JTlRf RVJSX01BU0sgfA0KPiA+ICsJCQkgICAgICAgKHZpaWZfZGV2LT5tYXNrZWRfZ2FtbWFfcGF0aCA8 PA0KPiBWSUlGX0VSUl9NX0VWRU5UX0dBTU1BVEJMX1NISUZUKTsNCj4gPiArDQo+IAlod2RfVklJ Rl9tYWluX3N0YXR1c19lcnJfc2V0X2lycV9tYXNrKHZpaWZfZGV2LT5jaCwgJm1hc2spOw0KPiA+ ICsJCX0NCj4gPiArDQo+ID4gKwkJdmlpZl9kZXYtPnN0YXR1c19lcnIgPSBldmVudF9tYWluOw0K PiA+ICsJfQ0KPiA+ICsJZGV2X2Vycih2aWlmX2Rldi0+ZGV2LCAiU3RhdHVzIGVycm9yIDB4JXgu XG4iLCBldmVudF9tYWluKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgdmlpZl9j c2kycnhfZXJyX2lycV9oYW5kbGVyKHN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYpDQo+ID4g K3sNCj4gPiArCXVpbnQzMl90IGV2ZW50Ow0KPiA+ICsNCj4gPiArCWV2ZW50ID0gaHdkX1ZJSUZf Y3NpMnJ4X2Vycl9pcnFfaGFuZGxlcih2aWlmX2Rldi0+Y2gpOw0KPiA+ICsJZGV2X2Vycih2aWlm X2Rldi0+ZGV2LCAiQ1NJMlJYIGVycm9yIDB4JXguXG4iLCBldmVudCk7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyBpcnFyZXR1cm5fdCB2aXNjb250aV92aWlmX2lycShpbnQgaXJxLCB2b2lk ICpkZXZfaWQpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYgPSBk ZXZfaWQ7DQo+ID4gKwlpbnQgaXJxX3R5cGUgPSBpcnEgLSB2aWlmX2Rldi0+aXJxWzBdOw0KPiA+ ICsNCj4gPiArCXNwaW5fbG9jaygmdmlpZl9kZXYtPmxvY2spOw0KPiA+ICsNCj4gPiArCXN3aXRj aCAoaXJxX3R5cGUpIHsNCj4gPiArCWNhc2UgMDoNCj4gPiArCQl2aWlmX3ZzeW5jX2lycV9oYW5k bGVyX3dfaXNwKHZpaWZfZGV2KTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgMToNCj4gPiAr CQl2aWlmX3N0YXR1c19lcnJfaXJxX2hhbmRsZXIodmlpZl9kZXYpOw0KPiA+ICsJCWJyZWFrOw0K PiA+ICsJY2FzZSAyOg0KPiA+ICsJCXZpaWZfY3NpMnJ4X2Vycl9pcnFfaGFuZGxlcih2aWlmX2Rl dik7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJc3Bpbl91bmxvY2soJnZp aWZfZGV2LT5sb2NrKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gSVJRX0hBTkRMRUQ7DQo+ID4gK30N Cj4gPiArDQo+ID4gKy8qIC0tLS0tIEFzeW5jIE5vdGlmaWVyIE9wZXJhdGlvbnMtLS0tLSAqLw0K PiA+ICtzdGF0aWMgaW50IHZpc2NvbnRpX3ZpaWZfbm90aWZ5X2JvdW5kKHN0cnVjdCB2NGwyX2Fz eW5jX25vdGlmaWVyICpub3RpZmllciwNCj4gPiArCQkJCSAgICAgIHN0cnVjdCB2NGwyX3N1YmRl diAqdjRsMl9zZCwgc3RydWN0DQo+IHY0bDJfYXN5bmNfc3ViZGV2ICphc2QpDQo+ID4gK3sNCj4g PiArCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBub3RpZmllci0+djRsMl9kZXY7DQo+ ID4gKwlzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2ID0gdjRsMl90b192aWlmKHY0bDJfZGV2 KTsNCj4gPiArCXN0cnVjdCB2aWlmX3N1YmRldiAqdmlpZl9zZCA9IHRvX3ZpaWZfc3ViZGV2KGFz ZCk7DQo+ID4gKw0KPiA+ICsJdmlpZl9zZC0+djRsMl9zZCA9IHY0bDJfc2Q7DQo+ID4gKwl2aWlm X2Rldi0+bnVtX3NkKys7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyB2b2lkIHZpc2NvbnRpX3ZpaWZfY3JlYXRlX2xpbmtzKHN0cnVjdCB2aWlmX2Rl dmljZSAqdmlpZl9kZXYpDQo+ID4gK3sNCj4gPiArCXVuc2lnbmVkIGludCBzb3VyY2VfcGFkOw0K PiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwkvKiBjYW1lcmEgc3ViZGV2IHBhZDAgLT4gaXNw IHN1ZGRldiBwYWQwICovDQo+ID4gKwlyZXQgPSBtZWRpYV9lbnRpdHlfZ2V0X2Z3bm9kZV9wYWQo JnZpaWZfZGV2LT5zZC0+djRsMl9zZC0+ZW50aXR5LA0KPiA+ICsJCQkJCSAgdmlpZl9kZXYtPnNk LT52NGwyX3NkLT5md25vZGUsDQo+IE1FRElBX1BBRF9GTF9TT1VSQ0UpOw0KPiA+ICsJaWYgKHJl dCA8IDApIHsNCj4gPiArCQlkZXZfZXJyKHZpaWZfZGV2LT5kZXYsICJmYWlsZWQgdG8gZmluZCBz b3VyY2UgcGFkXG4iKTsNCj4gPiArCQlyZXR1cm47DQo+ID4gKwl9DQo+ID4gKwlzb3VyY2VfcGFk ID0gcmV0Ow0KPiA+ICsNCj4gPiArCXJldCA9IG1lZGlhX2NyZWF0ZV9wYWRfbGluaygmdmlpZl9k ZXYtPnNkLT52NGwyX3NkLT5lbnRpdHksDQo+IHNvdXJjZV9wYWQsDQo+ID4gKwkJCQkgICAgJnZp aWZfZGV2LT5pc3Bfc3ViZGV2LnNkLmVudGl0eSwNCj4gVklJRl9JU1BfUEFEX1NJTkssDQo+ID4g KwkJCQkgICAgTUVESUFfTE5LX0ZMX0VOQUJMRUQpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlk ZXZfZXJyKHZpaWZfZGV2LT5kZXYsICJmYWlsZWQgY3JlYXRlX3BhZF9saW5rIChjYW1lcmE6c3Jj IC0+DQo+IGlzcDpzaW5rKVxuIik7DQo+ID4gKw0KPiA+ICsJcmV0ID0gbWVkaWFfY3JlYXRlX3Bh ZF9saW5rKCZ2aWlmX2Rldi0+aXNwX3N1YmRldi5zZC5lbnRpdHksDQo+IFZJSUZfSVNQX1BBRF9T UkMsDQo+ID4gKwkJCQkgICAgJnZpaWZfZGV2LT52ZGV2LmVudGl0eSwNCj4gVklJRl9DQVBUVVJF X1BBRF9TSU5LLA0KPiA+ICsJCQkJICAgIE1FRElBX0xOS19GTF9FTkFCTEVEKTsNCj4gPiArCWlm IChyZXQpDQo+ID4gKwkJZGV2X2Vycih2aWlmX2Rldi0+ZGV2LCAiZmFpbGVkIGNyZWF0ZV9wYWRf bGluayAoaXNwOnNyYyAtPg0KPiBjYW1lcmE6c2luaylcbiIpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgdm9pZCB2aXNjb250aV92aWlmX25vdGlmeV91bmJpbmQoc3RydWN0IHY0bDJfYXN5 bmNfbm90aWZpZXIgKm5vdGlmaWVyLA0KPiA+ICsJCQkJCXN0cnVjdCB2NGwyX3N1YmRldiAqc3Vi ZGV2LCBzdHJ1Y3QNCj4gdjRsMl9hc3luY19zdWJkZXYgKmFzZCkNCj4gPiArew0KPiA+ICsJc3Ry dWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IG5vdGlmaWVyLT52NGwyX2RldjsNCj4gPiArCXN0 cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYgPSB2NGwyX3RvX3ZpaWYodjRsMl9kZXYpOw0KPiA+ ICsJc3RydWN0IHZpaWZfc3ViZGV2ICp2aWlmX3NkID0gdG9fdmlpZl9zdWJkZXYoYXNkKTsNCj4g PiArDQo+ID4gKwl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZ2aWlmX2Rldi0+Y3RybF9oYW5kbGVy KTsNCj4gPiArCXY0bDJfZGV2LT5jdHJsX2hhbmRsZXIgPSBOVUxMOw0KPiA+ICsJdmlpZl9zZC0+ djRsMl9zZCA9IE5VTEw7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdmlzY29udGlf dmlpZl9ub3RpZnlfY29tcGxldGUoc3RydWN0IHY0bDJfYXN5bmNfbm90aWZpZXIgKm5vdGlmaWVy KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gbm90aWZpZXIt PnY0bDJfZGV2Ow0KPiA+ICsJc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldiA9IHY0bDJfdG9f dmlpZih2NGwyX2Rldik7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCXJldCA9IHY0bDJf ZGV2aWNlX3JlZ2lzdGVyX3N1YmRldl9ub2Rlcyh2NGwyX2Rldik7DQo+ID4gKwlpZiAocmV0IDwg MCkgew0KPiA+ICsJCWRldl9lcnIodjRsMl9kZXYtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBz dWJkZXYgbm9kZXNcbiIpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJLyogTWFrZSBzdXJlIGF0IGxlYXN0IG9uZSBzZW5zb3IgaXMgcHJpbWFyeSBhbmQgdXNlIGl0 IHRvIGluaXRpYWxpemUgKi8NCj4gPiArCWlmICghdmlpZl9kZXYtPnNkKSB7DQo+ID4gKwkJdmlp Zl9kZXYtPnNkID0gJnZpaWZfZGV2LT5zdWJkZXZzWzBdOw0KPiA+ICsJCXZpaWZfZGV2LT5zZF9p bmRleCA9IDA7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogVE9ETzogbWlnaHQgbmVlZCB0byBj aGVjayBpZiBzdWJkZXYncyBtYnVzIGNvZGUgaXMgdmFsaWQgZm9yIHRoaXMNCj4gZHJpdmVyICov DQo+ID4gKw0KPiA+ICsJcmV0ID0gdjRsMl9jdHJsX2FkZF9oYW5kbGVyKCZ2aWlmX2Rldi0+Y3Ry bF9oYW5kbGVyLA0KPiB2aWlmX2Rldi0+c2QtPnY0bDJfc2QtPmN0cmxfaGFuZGxlciwNCj4gPiAr CQkJCSAgICBOVUxMLCB0cnVlKTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKHY0 bDJfZGV2LT5kZXYsICJGYWlsZWQgdG8gYWRkIHNlbnNvciBjdHJsX2hhbmRsZXIiKTsNCj4gPiAr CQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsJcmV0ID0gdjRsMl9jdHJsX2FkZF9oYW5kbGVy KCZ2aWlmX2Rldi0+Y3RybF9oYW5kbGVyLA0KPiAmdmlpZl9kZXYtPmlzcF9zdWJkZXYuY3RybF9o YW5kbGVyLA0KPiA+ICsJCQkJICAgIE5VTEwsIHRydWUpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ ICsJCWRldl9lcnIodjRsMl9kZXYtPmRldiwgIkZhaWxlZCB0byBhZGQgaXNwIHN1YmRldg0KPiBj dHJsX2hhbmRsZXIiKTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CXZpc2NvbnRpX3ZpaWZfY3JlYXRlX2xpbmtzKHZpaWZfZGV2KTsNCj4gPiArDQo+ID4gKwlyZXR1 cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2FzeW5j X25vdGlmaWVyX29wZXJhdGlvbnMgdmlpZl9ub3RpZnlfb3BzID0gew0KPiA+ICsJLmJvdW5kID0g dmlzY29udGlfdmlpZl9ub3RpZnlfYm91bmQsDQo+ID4gKwkudW5iaW5kID0gdmlzY29udGlfdmlp Zl9ub3RpZnlfdW5iaW5kLA0KPiA+ICsJLmNvbXBsZXRlID0gdmlzY29udGlfdmlpZl9ub3RpZnlf Y29tcGxldGUsDQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKiAtLS0tLSBQcm9iZSBhbmQgUmVtb3Zl IC0tLS0tICovDQo+ID4gK3N0YXRpYyBpbnQgdmlzY29udGlfdmlpZl9pbml0X2FzeW5jX3N1YmRl dnMoc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldiwNCj4gdW5zaWduZWQgaW50IG5fc2QpDQo+ ID4gK3sNCj4gPiArCS8qIFJlc2VydmUgbWVtb3J5IGZvciAnbl9zZCcgdmlpZl9zdWJkZXYgZGVz Y3JpcHRvcnMuICovDQo+ID4gKwl2aWlmX2Rldi0+c3ViZGV2cyA9DQo+ID4gKwkJZGV2bV9rY2Fs bG9jKHZpaWZfZGV2LT5kZXYsIG5fc2QsIHNpemVvZigqdmlpZl9kZXYtPnN1YmRldnMpLA0KPiBH RlBfS0VSTkVMKTsNCj4gPiArCWlmICghdmlpZl9kZXYtPnN1YmRldnMpDQo+ID4gKwkJcmV0dXJu IC1FTk9NRU07DQo+ID4gKw0KPiA+ICsJLyogUmVzZXJ2ZSBtZW1vcnkgZm9yICduX3NkJyBwb2lu dGVycyB0byBhc3luY19zdWJkZXZpY2VzLg0KPiA+ICsJICogdmlpZl9kZXYtPmFzZHMgbWVtYmVy cyB3aWxsIHBvaW50IHRvICZ2aWlmX2Rldi5hc2QNCj4gPiArCSAqLw0KPiA+ICsJdmlpZl9kZXYt PmFzZHMgPSBkZXZtX2tjYWxsb2ModmlpZl9kZXYtPmRldiwgbl9zZCwNCj4gc2l6ZW9mKCp2aWlm X2Rldi0+YXNkcyksIEdGUF9LRVJORUwpOw0KPiA+ICsJaWYgKCF2aWlmX2Rldi0+YXNkcykNCj4g PiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKwl2aWlmX2Rldi0+c2QgPSBOVUxMOw0K PiA+ICsJdmlpZl9kZXYtPnNkX2luZGV4ID0gMDsNCj4gPiArCXZpaWZfZGV2LT5udW1fc2QgPSAw Ow0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50 IHZpc2NvbnRpX3ZpaWZfcGFyc2VfZHQoc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldikNCj4g PiArew0KPiA+ICsJc3RydWN0IGRldmljZV9ub2RlICpvZiA9IHZpaWZfZGV2LT5kZXYtPm9mX25v ZGU7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9md25vZGVfZW5kcG9pbnQgZndfZXA7DQo+ID4gKwlzdHJ1 Y3QgdmlpZl9zdWJkZXYgKnZpaWZfc2Q7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmVwOw0K PiA+ICsJdW5zaWduZWQgaW50IGk7DQo+ID4gKwlpbnQgbnVtX2VwOw0KPiA+ICsJaW50IHJldDsN Cj4gPiArDQo+ID4gKwltZW1zZXQoJmZ3X2VwLCAwLCBzaXplb2Yoc3RydWN0IHY0bDJfZndub2Rl X2VuZHBvaW50KSk7DQo+ID4gKw0KPiA+ICsJbnVtX2VwID0gb2ZfZ3JhcGhfZ2V0X2VuZHBvaW50 X2NvdW50KG9mKTsNCj4gPiArCWlmICghbnVtX2VwKQ0KPiA+ICsJCXJldHVybiAtRU5PREVWOw0K PiA+ICsNCj4gPiArCXJldCA9IHZpc2NvbnRpX3ZpaWZfaW5pdF9hc3luY19zdWJkZXZzKHZpaWZf ZGV2LCBudW1fZXApOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsN Cj4gPiArCWZvciAoaSA9IDA7IGkgPCBudW1fZXA7IGkrKykgew0KPiA+ICsJCWVwID0gb2ZfZ3Jh cGhfZ2V0X2VuZHBvaW50X2J5X3JlZ3Mob2YsIDAsIGkpOw0KPiA+ICsJCWlmICghZXApIHsNCj4g PiArCQkJZGV2X2Vycih2aWlmX2Rldi0+ZGV2LCAiTm8gc3ViZGV2aWNlIGNvbm5lY3RlZCBvbg0K PiBlbmRwb2ludCAldS5cbiIsIGkpOw0KPiA+ICsJCQlyZXQgPSAtRU5PREVWOw0KPiA+ICsJCQln b3RvIGVycm9yX3B1dF9ub2RlOw0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJcmV0ID0gdjRsMl9m d25vZGVfZW5kcG9pbnRfcGFyc2Uob2ZfZndub2RlX2hhbmRsZShlcCksDQo+ICZmd19lcCk7DQo+ ID4gKwkJaWYgKHJldCkgew0KPiA+ICsJCQlkZXZfZXJyKHZpaWZfZGV2LT5kZXYsICJVbmFibGUg dG8gcGFyc2UgZW5kcG9pbnQNCj4gIyV1LlxuIiwgaSk7DQo+ID4gKwkJCWdvdG8gZXJyb3JfcHV0 X25vZGU7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlpZiAoZndfZXAuYnVzX3R5cGUgIT0gVjRM Ml9NQlVTX0NTSTJfRFBIWSB8fA0KPiA+ICsJCSAgICBmd19lcC5idXMubWlwaV9jc2kyLm51bV9k YXRhX2xhbmVzID09IDApIHsNCj4gPiArCQkJZGV2X2Vycih2aWlmX2Rldi0+ZGV2LCAibWlzc2lu ZyBDU0ktMiBwcm9wZXJ0aWVzIGluDQo+IGVuZHBvaW50XG4iKTsNCj4gPiArCQkJcmV0ID0gLUVJ TlZBTDsNCj4gPiArCQkJZ290byBlcnJvcl9wdXRfbm9kZTsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ ICsJCS8qIFNldHVwIHRoZSBjZXUgc3ViZGV2aWNlIGFuZCB0aGUgYXN5bmMgc3ViZGV2aWNlLiAq Lw0KPiA+ICsJCXZpaWZfc2QgPSAmdmlpZl9kZXYtPnN1YmRldnNbaV07DQo+ID4gKwkJSU5JVF9M SVNUX0hFQUQoJnZpaWZfc2QtPmFzZC5saXN0KTsNCj4gPiArDQo+ID4gKwkJdmlpZl9zZC0+bWJ1 c19mbGFncyA9IGZ3X2VwLmJ1cy5taXBpX2NzaTIuZmxhZ3M7DQo+ID4gKwkJdmlpZl9zZC0+bnVt X2xhbmUgPSBmd19lcC5idXMubWlwaV9jc2kyLm51bV9kYXRhX2xhbmVzOw0KPiA+ICsJCXZpaWZf c2QtPmFzZC5tYXRjaF90eXBlID0gVjRMMl9BU1lOQ19NQVRDSF9GV05PREU7DQo+ID4gKwkJdmlp Zl9zZC0+YXNkLm1hdGNoLmZ3bm9kZSA9DQo+ID4gKw0KPiAJZndub2RlX2dyYXBoX2dldF9yZW1v dGVfcG9ydF9wYXJlbnQob2ZfZndub2RlX2hhbmRsZShlcCkpOw0KPiA+ICsNCj4gPiArCQl2aWlm X2Rldi0+YXNkc1tpXSA9ICZ2aWlmX3NkLT5hc2Q7DQo+ID4gKwkJb2Zfbm9kZV9wdXQoZXApOw0K PiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiBudW1fZXA7DQo+ID4gKw0KPiA+ICtlcnJvcl9w dXRfbm9kZToNCj4gPiArCW9mX25vZGVfcHV0KGVwKTsNCj4gPiArCXJldHVybiByZXQ7DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHZpc2NvbnRp X3ZpaWZfb2ZfdGFibGVbXSA9IHsNCj4gPiArCXsNCj4gPiArCQkuY29tcGF0aWJsZSA9ICJ0b3No aWJhLHZpc2NvbnRpLXZpaWYiLA0KPiA+ICsJfSwNCj4gPiArCXt9LA0KPiA+ICt9Ow0KPiA+ICtN T0RVTEVfREVWSUNFX1RBQkxFKG9mLCB2aXNjb250aV92aWlmX29mX3RhYmxlKTsNCj4gPiArDQo+ ID4gK2ludCB2aXNjb250aV92aWlmX2lzcF9yZWdpc3RlcihzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZp aWZfZGV2KTsNCj4gPiAraW50IHZpc2NvbnRpX3ZpaWZfY2FwdHVyZV9yZWdpc3RlcihzdHJ1Y3Qg dmlpZl9kZXZpY2UgKnZpaWZfZGV2KTsNCj4gPiArdm9pZCB2aXNjb250aV92aWlmX2lzcF91bnJl Z2lzdGVyKHN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYpOw0KPiA+ICt2b2lkIHZpc2NvbnRp X3ZpaWZfY2FwdHVyZV91bnJlZ2lzdGVyKHN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYpOw0K PiA+ICsNCj4gPiArc3RhdGljIGludCB2aXNjb250aV92aWlmX3Byb2JlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2 LT5kZXY7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2Ow0KPiA+ICsJaW50IHJl dCwgaSwgbnVtX3NkOw0KPiA+ICsJZG1hX2FkZHJfdCB0YWJsZV9wYWRkcjsNCj4gPiArCWNvbnN0 IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX2lkOw0KPiA+ICsNCj4gPiArCS8vcmV0ID0gZG1hX3Nl dF9tYXNrX2FuZF9jb2hlcmVudChkZXYsIERNQV9CSVRfTUFTSygzNikpOw0KPiA+ICsJLy9pZiAo cmV0KQ0KPiA+ICsJLy8JcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKwl2aWlmX2RldiA9IGRldm1f a3phbGxvYyhkZXYsIHNpemVvZigqdmlpZl9kZXYpLCBHRlBfS0VSTkVMKTsNCj4gPiArCWlmICgh dmlpZl9kZXYpDQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4gKw0KPiA+ICsJdmlpZl9kZXYt PmlzX3Bvd2VyZWQgPSAwOw0KPiA+ICsNCj4gPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYs IHZpaWZfZGV2KTsNCj4gPiArCXZpaWZfZGV2LT5kZXYgPSBkZXY7DQo+ID4gKw0KPiA+ICsJSU5J VF9MSVNUX0hFQUQoJnZpaWZfZGV2LT5jYXB0dXJlKTsNCj4gPiArCXNwaW5fbG9ja19pbml0KCZ2 aWlmX2Rldi0+bG9jayk7DQo+ID4gKwltdXRleF9pbml0KCZ2aWlmX2Rldi0+bWxvY2spOw0KPiA+ ICsNCj4gPiArCXZpaWZfZGV2LT5jYXB0dXJlX3JlZyA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9y ZXNvdXJjZShwZGV2LCAwKTsNCj4gPiArCWlmIChJU19FUlIodmlpZl9kZXYtPmNhcHR1cmVfcmVn KSkNCj4gPiArCQlyZXR1cm4gUFRSX0VSUih2aWlmX2Rldi0+Y2FwdHVyZV9yZWcpOw0KPiA+ICsN Cj4gPiArCXZpaWZfZGV2LT5jc2kyaG9zdF9yZWcgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVz b3VyY2UocGRldiwgMSk7DQo+ID4gKwlpZiAoSVNfRVJSKHZpaWZfZGV2LT5jc2kyaG9zdF9yZWcp KQ0KPiA+ICsJCXJldHVybiBQVFJfRVJSKHZpaWZfZGV2LT5jc2kyaG9zdF9yZWcpOw0KPiA+ICsN Cj4gPiArCWRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYsICJpbmRleCIsICZ2aWlmX2Rldi0+ Y2gpOw0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsNCj4gPiArCQl2aWlm X2Rldi0+aXJxW2ldID0gcmV0ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCBpKTsNCj4gPiArCQlp ZiAocmV0IDwgMCkgew0KPiA+ICsJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhY3F1aXJlIGly cSByZXNvdXJjZVxuIik7DQo+ID4gKwkJCXJldHVybiByZXQ7DQo+ID4gKwkJfQ0KPiA+ICsJCXJl dCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCB2aWlmX2Rldi0+aXJxW2ldLCB2aXNjb250aV92aWlm X2lycSwNCj4gMCwgInZpaWYiLA0KPiA+ICsJCQkJICAgICAgIHZpaWZfZGV2KTsNCj4gPiArCQlp ZiAocmV0KSB7DQo+ID4gKwkJCWRldl9lcnIoZGV2LCAiaXJxIHJlcXVlc3QgZmFpbGVkXG4iKTsN Cj4gPiArCQkJcmV0dXJuIHJldDsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJdmlp Zl9kZXYtPnRhYmxlX3ZhZGRyID0NCj4gPiArCQlkbWFfYWxsb2Nfd2MoZGV2LCBzaXplb2Yoc3Ry dWN0IHZpaWZfdGFibGVfYXJlYSksICZ0YWJsZV9wYWRkciwNCj4gR0ZQX0tFUk5FTCk7DQo+ID4g KwlpZiAoIXZpaWZfZGV2LT50YWJsZV92YWRkcikgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAiZG1h X2FsbG9jX3djIGZhaWxlZFxuIik7DQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4gKwl9DQo+ ID4gKwl2aWlmX2Rldi0+dGFibGVfcGFkZHIgPSAoc3RydWN0IHZpaWZfdGFibGVfYXJlYSAqKXRh YmxlX3BhZGRyOw0KPiA+ICsNCj4gPiArCS8qIGJ1aWxkIG1lZGlhX2RldiAqLw0KPiA+ICsJdmlp Zl9kZXYtPm1lZGlhX2Rldi5od19yZXZpc2lvbiA9IDA7DQo+ID4gKwlzdHJzY3B5KHZpaWZfZGV2 LT5tZWRpYV9kZXYubW9kZWwsICJ2aXNjb250aV92aWlmIiwNCj4gc2l6ZW9mKHZpaWZfZGV2LT5t ZWRpYV9kZXYubW9kZWwpKTsNCj4gPiArCXZpaWZfZGV2LT5tZWRpYV9kZXYuZGV2ID0gZGV2Ow0K PiA+ICsJc3Ryc2NweSh2aWlmX2Rldi0+bWVkaWFfZGV2LmJ1c19pbmZvLCAicGxhdGZvcm06dmlz Y29udGlfdmlpZiIsDQo+ID4gKwkJc2l6ZW9mKHZpaWZfZGV2LT5tZWRpYV9kZXYuYnVzX2luZm8p KTsNCj4gPiArCW1lZGlhX2RldmljZV9pbml0KCZ2aWlmX2Rldi0+bWVkaWFfZGV2KTsNCj4gPiAr DQo+ID4gKwkvKiBidWlsZCB2NGwyX2RldiAqLw0KPiA+ICsJdmlpZl9kZXYtPnY0bDJfZGV2Lm1k ZXYgPSAmdmlpZl9kZXYtPm1lZGlhX2RldjsNCj4gPiArCXJldCA9IHY0bDJfZGV2aWNlX3JlZ2lz dGVyKGRldiwgJnZpaWZfZGV2LT52NGwyX2Rldik7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCWdv dG8gZXJyb3JfZG1hX2ZyZWU7DQo+ID4gKw0KPiA+ICsJcmV0ID0gbWVkaWFfZGV2aWNlX3JlZ2lz dGVyKCZ2aWlmX2Rldi0+bWVkaWFfZGV2KTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZf ZXJyKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBtZWRpYSBkZXZpY2U6ICVkXG4iLCByZXQpOw0K PiA+ICsJCWdvdG8gZXJyb3JfdjRsMl91bnJlZ2lzdGVyOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CXJldCA9IHZpc2NvbnRpX3ZpaWZfaXNwX3JlZ2lzdGVyKHZpaWZfZGV2KTsNCj4gPiArCWlmIChy ZXQpIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBpc3Agc3ViIG5v ZGU6ICVkXG4iLCByZXQpOw0KPiA+ICsJCWdvdG8gZXJyb3JfbWVkaWFfdW5yZWdpc3RlcjsNCj4g PiArCX0NCj4gPiArCXJldCA9IHZpc2NvbnRpX3ZpaWZfY2FwdHVyZV9yZWdpc3Rlcih2aWlmX2Rl dik7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVn aXN0ZXIgY2FwdHVyZSBub2RlOiAlZFxuIiwgcmV0KTsNCj4gPiArCQlnb3RvIGVycm9yX21lZGlh X3VucmVnaXN0ZXI7DQo+ID4gKwl9DQo+ID4gKwlyZXQgPSB2NGwyX2N0cmxfaGFuZGxlcl9pbml0 KCZ2aWlmX2Rldi0+Y3RybF9oYW5kbGVyLCAyMCk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJ ZGV2X2VycihkZXYsICJmYWlsZWQgb24gdjRsMl9jdHJsX2hhbmRsZXJfaW5pdCIpOw0KPiA+ICsJ CXJldHVybiAtRU5PTUVNOw0KPiA+ICsJfQ0KPiA+ICsJdmlpZl9kZXYtPnY0bDJfZGV2LmN0cmxf aGFuZGxlciA9ICZ2aWlmX2Rldi0+Y3RybF9oYW5kbGVyOw0KPiA+ICsJdmlpZl9kZXYtPnZkZXYu Y3RybF9oYW5kbGVyID0gJnZpaWZfZGV2LT5jdHJsX2hhbmRsZXI7DQo+ID4gKw0KPiA+ICsJLyog Y2hlY2sgZGV2aWNlIHR5cGUgKi8NCj4gPiArCW9mX2lkID0gb2ZfbWF0Y2hfZGV2aWNlKHZpc2Nv bnRpX3ZpaWZfb2ZfdGFibGUsIGRldik7DQo+ID4gKw0KPiA+ICsJbnVtX3NkID0gdmlzY29udGlf dmlpZl9wYXJzZV9kdCh2aWlmX2Rldik7DQo+ID4gKwlpZiAocmV0IDwgMCkgew0KPiA+ICsJCXJl dCA9IG51bV9zZDsNCj4gPiArCQlnb3RvIGVycm9yX21lZGlhX3VucmVnaXN0ZXI7DQo+ID4gKwl9 DQo+ID4gKw0KPiA+ICsJdmlpZl9kZXYtPm5vdGlmaWVyLnY0bDJfZGV2ID0gJnZpaWZfZGV2LT52 NGwyX2RldjsNCj4gPiArCXY0bDJfYXN5bmNfbmZfaW5pdCgmdmlpZl9kZXYtPm5vdGlmaWVyKTsN Cj4gPiArCWZvciAoaSA9IDA7IGkgPCBudW1fc2Q7IGkrKykgew0KPiA+ICsJCV9fdjRsMl9hc3lu Y19uZl9hZGRfc3ViZGV2KCZ2aWlmX2Rldi0+bm90aWZpZXIsDQo+IHZpaWZfZGV2LT5hc2RzW2ld KTsNCj4gPiArCX0NCj4gPiArCXZpaWZfZGV2LT5ub3RpZmllci5vcHMgPSAmdmlpZl9ub3RpZnlf b3BzOw0KPiA+ICsJcmV0ID0gdjRsMl9hc3luY19uZl9yZWdpc3RlcigmdmlpZl9kZXYtPnY0bDJf ZGV2LA0KPiAmdmlpZl9kZXYtPm5vdGlmaWVyKTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJZ290 byBlcnJvcl9tZWRpYV91bnJlZ2lzdGVyOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICsN Cj4gPiArZXJyb3JfbWVkaWFfdW5yZWdpc3RlcjoNCj4gPiArCW1lZGlhX2RldmljZV91bnJlZ2lz dGVyKCZ2aWlmX2Rldi0+bWVkaWFfZGV2KTsNCj4gPiArZXJyb3JfdjRsMl91bnJlZ2lzdGVyOg0K PiA+ICsJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmdmlpZl9kZXYtPnY0bDJfZGV2KTsNCj4gPiAr ZXJyb3JfZG1hX2ZyZWU6DQo+ID4gKwlkbWFfZnJlZV93YygmcGRldi0+ZGV2LCBzaXplb2Yoc3Ry dWN0IHZpaWZfdGFibGVfYXJlYSksDQo+IHZpaWZfZGV2LT50YWJsZV92YWRkciwNCj4gPiArCQkg ICAgKGRtYV9hZGRyX3QpdmlpZl9kZXYtPnRhYmxlX3BhZGRyKTsNCj4gPiArCXJldHVybiByZXQ7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdmlzY29udGlfdmlpZl9yZW1vdmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gPiArew0KPiA+ICsJc3RydWN0IHZpaWZfZGV2 aWNlICp2aWlmX2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KPiA+ICsNCj4gPiAr CXZpc2NvbnRpX3ZpaWZfaXNwX3VucmVnaXN0ZXIodmlpZl9kZXYpOw0KPiA+ICsJdmlzY29udGlf dmlpZl9jYXB0dXJlX3VucmVnaXN0ZXIodmlpZl9kZXYpOw0KPiA+ICsJdjRsMl9hc3luY19uZl91 bnJlZ2lzdGVyKCZ2aWlmX2Rldi0+bm90aWZpZXIpOw0KPiA+ICsJbWVkaWFfZGV2aWNlX3VucmVn aXN0ZXIoJnZpaWZfZGV2LT5tZWRpYV9kZXYpOw0KPiA+ICsJdjRsMl9kZXZpY2VfdW5yZWdpc3Rl cigmdmlpZl9kZXYtPnY0bDJfZGV2KTsNCj4gPiArCWRtYV9mcmVlX3djKCZwZGV2LT5kZXYsIHNp emVvZihzdHJ1Y3QgdmlpZl90YWJsZV9hcmVhKSwNCj4gdmlpZl9kZXYtPnRhYmxlX3ZhZGRyLA0K PiA+ICsJCSAgICAoZG1hX2FkZHJfdCl2aWlmX2Rldi0+dGFibGVfcGFkZHIpOw0KPiA+ICsNCj4g PiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3Jt X2RyaXZlciB2aXNjb250aV92aWlmX2RyaXZlciA9IHsNCj4gPiArCS5wcm9iZSA9IHZpc2NvbnRp X3ZpaWZfcHJvYmUsDQo+ID4gKwkucmVtb3ZlID0gdmlzY29udGlfdmlpZl9yZW1vdmUsDQo+ID4g KwkuZHJpdmVyID0gew0KPiA+ICsJCQkubmFtZSA9ICJ2aXNjb250aV92aWlmIiwNCj4gPiArCQkJ Lm9mX21hdGNoX3RhYmxlID0gdmlzY29udGlfdmlpZl9vZl90YWJsZSwNCj4gPiArCQl9LA0KPiA+ ICt9Ow0KPiA+ICsNCj4gPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcih2aXNjb250aV92aWlmX2Ry aXZlcik7DQo+ID4gKw0KPiA+ICtNT0RVTEVfQVVUSE9SKCJZdWppIElzaGlrYXdhIDx5dWppMi5p c2hpa2F3YUB0b3NoaWJhLmNvLmpwPiIpOw0KPiA+ICtNT0RVTEVfREVTQ1JJUFRJT04oIlRvc2hp YmEgVmlzY29udGkgVmlkZW8gSW5wdXQgZHJpdmVyIik7DQo+ID4gK01PRFVMRV9MSUNFTlNFKCJE dWFsIEJTRC9HUEwiKTsNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92 aXNjb250aS92aWlmX2NhcHR1cmUuYw0KPiBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdmlzY29u dGkvdmlpZl9jYXB0dXJlLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAw MDAwMDAwMC4uOGIwYTYzODUyDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMv bWVkaWEvcGxhdGZvcm0vdmlzY29udGkvdmlpZl9jYXB0dXJlLmMNCj4gPiBAQCAtMCwwICsxLDk0 OCBAQA0KPiA+ICsjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4NCj4gPiArI2luY2x1ZGUgPG1lZGlh L3Y0bDItY29tbW9uLmg+DQo+ID4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLXN1YmRldi5oPg0KPiA+ ICsNCj4gPiArI2luY2x1ZGUgInZpaWYuaCINCj4gPiArDQo+ID4gKyNkZWZpbmUgVklJRl9DUk9Q X01BWF9YX0lTUCAoODA2MlUpDQo+ID4gKyNkZWZpbmUgVklJRl9DUk9QX01BWF9ZX0lTUCAoMzk2 NlUpDQo+ID4gKyNkZWZpbmUgVklJRl9DUk9QX01JTl9XCSAgICAoMTI4VSkNCj4gPiArI2RlZmlu ZSBWSUlGX0NST1BfTUFYX1dfSVNQICg4MTkwVSkNCj4gPiArI2RlZmluZSBWSUlGX0NST1BfTUlO X0gJICAgICgxMjhVKQ0KPiA+ICsjZGVmaW5lIFZJSUZfQ1JPUF9NQVhfSF9JU1AgKDQwOTRVKQ0K PiA+ICsNCj4gPiArI2RlZmluZSBWSUlGX0lTUF9HVUFSRF9TVEFSVCh2aWlmX2RldikNCj4gXA0K PiA+ICsJZG8NCj4gew0KPiAgICAgICAgICAgICAgICAgXA0KPiA+ICsNCj4gCWh3ZF9WSUlGX2lz cF9kaXNhYmxlX3JlZ2J1Zl9hdXRvX3RyYW5zbWlzc2lvbih2aWlmX2Rldi0+Y2gpOw0KPiBcDQo+ ID4gKwkJbmRlbGF5KDUwMCk7DQo+IFwNCj4gPiArCQlod2RfVklJRl9tYWluX21hc2tfdmxhdGNo KHZpaWZfZGV2LT5jaCwNCj4gSFdEX1ZJSUZfRU5BQkxFKTsgICAgICAgICAgICAgICAgICAgICAg ICAgIFwNCj4gPiArCX0gd2hpbGUgKDApDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFZJSUZfSVNQX0dV QVJEX0VORCh2aWlmX2RldikNCj4gXA0KPiA+ICsJZG8NCj4gew0KPiAgICAgICAgICAgICAgICAg XA0KPiA+ICsJCWh3ZF9WSUlGX21haW5fbWFza192bGF0Y2godmlpZl9kZXYtPmNoLA0KPiBIV0Rf VklJRl9ESVNBQkxFKTsgICAgICAgICAgICAgICAgICAgICAgICAgXA0KPiA+ICsJCWh3ZF9WSUlG X2lzcF9zZXRfcmVnYnVmX2F1dG9fdHJhbnNtaXNzaW9uKHZpaWZfZGV2LT5jaCwNCj4gVklJRl9J U1BfUkVHQlVGXzAsICAgICAgICAgXA0KPiA+ICsNCj4gVklJRl9JU1BfUkVHQlVGXzAsIDApOyAg ICAgICAgICAgICAgICAgICBcDQo+ID4gKwl9IHdoaWxlICgwKQ0KPiA+ICsNCj4gPiArc3RydWN0 IHZpaWZfYnVmZmVyIHsNCj4gPiArCXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgdmI7DQo+ID4gKwlz dHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGlubGlu ZSBzdHJ1Y3QgdmlpZl9idWZmZXIgKnZiMl90b192aWlmKHN0cnVjdCB2YjJfdjRsMl9idWZmZXIg KnZidWYpDQo+ID4gK3sNCj4gPiArCXJldHVybiBjb250YWluZXJfb2YodmJ1Ziwgc3RydWN0IHZp aWZfYnVmZmVyLCB2Yik7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIC0tLS0tIElTUnMgYW5kIFZC MiBPcGVyYXRpb25zIC0tLS0tICovDQo+ID4gK3N0YXRpYyBpbnQgdmlpZl9zZXRfaW1nKHN0cnVj dCB2aWlmX2RldmljZSAqdmlpZl9kZXYsIHN0cnVjdCB2YjJfYnVmZmVyICp2YikNCj4gPiArew0K PiA+ICsJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdF9tcGxhbmUgKnBpeCA9ICZ2aWlmX2Rldi0+djRs Ml9waXg7DQo+ID4gKwlzdHJ1Y3QgaHdkX3ZpaWZfaW1nIG5leHRfb3V0X2ltZzsNCj4gPiArCWRt YV9hZGRyX3QgcGh5c19hZGRyOw0KPiA+ICsJaW50IGksIHJldCA9IDA7DQo+ID4gKw0KPiA+ICsJ bmV4dF9vdXRfaW1nLndpZHRoID0gcGl4LT53aWR0aDsNCj4gPiArCW5leHRfb3V0X2ltZy5oZWln aHQgPSBwaXgtPmhlaWdodDsNCj4gPiArCW5leHRfb3V0X2ltZy5mb3JtYXQgPSB2aWlmX2Rldi0+ b3V0X2Zvcm1hdDsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgcGl4LT5udW1fcGxhbmVz OyBpKyspIHsNCj4gPiArCQluZXh0X291dF9pbWcucGl4ZWxtYXBbaV0ucGl0Y2ggPQ0KPiBwaXgt PnBsYW5lX2ZtdFtpXS5ieXRlc3BlcmxpbmU7DQo+ID4gKwkJcGh5c19hZGRyID0gdmIyX2RtYV9j b250aWdfcGxhbmVfZG1hX2FkZHIodmIsIGkpOw0KPiA+ICsJCS8qIGFkZHJlc3MgbWFwcGluZzoN Cj4gPiArCQkgKiAtIEREUjA6IChDUFUpMHgwXzgwMDBfMDAwMC0weDBfRkZGRl9GRkZGIC0+DQo+ IChIVykweDgwMDBfMDAwMC0weEZGRkZfRkZGRg0KPiA+ICsJCSAqIC0gRERSMTogKENQVSkweDhf ODAwMF8wMDAwLTB4OF9GRkZGX0ZGRkYgLT4NCj4gKEhXKTB4MDAwMF8wMDAwLTB4N0ZGRl9GRkZG DQo+ID4gKwkJICovDQo+ID4gKwkJbmV4dF9vdXRfaW1nLnBpeGVsbWFwW2ldLnBtYXBfcGFkZHIg PSAocGh5c19hZGRyICYNCj4gMHg4MDAwMDAwMDBVTCkgPw0KPiA+ICsJCQkJCQkJICAgICAgKHBo eXNfYWRkciAmDQo+IDB4N2ZmZmZmZmYpIDoNCj4gPiArCQkJCQkJCSAgICAgIChwaHlzX2FkZHIg Jg0KPiAweGZmZmZmZmZmKTsNCj4gPiArCX0NCj4gPiArCVZJSUZfSVNQX0dVQVJEX1NUQVJUKHZp aWZfZGV2KTsNCj4gPiArCXJldCA9IGh3ZF9WSUlGX2wyX3NldF9pbWdfdHJhbnNtaXNzaW9uKHZp aWZfZGV2LT5jaCwNCj4gVklJRl9MMklTUF9QT1NUXzAsIFZJSUZfSVNQX1JFR0JVRl8wLA0KPiA+ ICsJCQkJCSAgICAgICBIV0RfVklJRl9FTkFCTEUsDQo+ICZ2aWlmX2Rldi0+aW1nX2FyZWEsDQo+ ID4gKwkJCQkJICAgICAgICZ2aWlmX2Rldi0+b3V0X3Byb2Nlc3MsDQo+ICZuZXh0X291dF9pbWcp Ow0KPiA+ICsJVklJRl9JU1BfR1VBUkRfRU5EKHZpaWZfZGV2KTsNCj4gPiArCWlmIChyZXQpDQo+ ID4gKwkJZGV2X2Vycih2aWlmX2Rldi0+ZGV2LCAic2V0IGltZyBlcnJvci4gJWRcbiIsIHJldCk7 DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9pZCB2aXNj b250aV92aWlmX2NhcHR1cmVfc3dpdGNoX2J1ZmZlcihzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZf ZGV2LA0KPiB1aW50MzJfdCBzdGF0dXNfZXJyLA0KPiA+ICsJCQkJCSB1aW50MzJfdCBsMl90cmFu c2Zlcl9zdGF0dXMpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnZidWY7 DQo+ID4gKwlzdHJ1Y3QgdmlpZl9idWZmZXIgKmJ1ZjsNCj4gPiArCWVudW0gdmIyX2J1ZmZlcl9z dGF0ZSBzdGF0ZTsNCj4gPiArDQo+ID4gKwl2YnVmID0gdmlpZl9kZXYtPmRtYV9hY3RpdmU7DQo+ ID4gKwlpZiAoIXZidWYpDQo+ID4gKwkJZ290byBuZXh0Ow0KPiA+ICsNCj4gPiArCXZpaWZfZGV2 LT5idWZfY250LS07DQo+ID4gKwl2YnVmLT52YjJfYnVmLnRpbWVzdGFtcCA9IGt0aW1lX2dldF9u cygpOw0KPiA+ICsJdmJ1Zi0+c2VxdWVuY2UgPSB2aWlmX2Rldi0+c2VxdWVuY2UrKzsNCj4gPiAr CXZidWYtPmZpZWxkID0gdmlpZl9kZXYtPmZpZWxkOw0KPiA+ICsJaWYgKHN0YXR1c19lcnIgfHwg bDJfdHJhbnNmZXJfc3RhdHVzKQ0KPiA+ICsJCXN0YXRlID0gVkIyX0JVRl9TVEFURV9FUlJPUjsN Cj4gPiArCWVsc2UNCj4gPiArCQlzdGF0ZSA9IFZCMl9CVUZfU1RBVEVfRE9ORTsNCj4gPiArDQo+ ID4gKwl2YjJfYnVmZmVyX2RvbmUoJnZidWYtPnZiMl9idWYsIHN0YXRlKTsNCj4gPiArCXZpaWZf ZGV2LT5kbWFfYWN0aXZlID0gTlVMTDsNCj4gPiArDQo+ID4gK25leHQ6DQo+ID4gKwl2YnVmID0g dmlpZl9kZXYtPmFjdGl2ZTsNCj4gPiArCWlmICghdmJ1ZikNCj4gPiArCQlyZXR1cm47DQo+ID4g Kw0KPiA+ICsJaWYgKHZpaWZfZGV2LT5sYXN0X2FjdGl2ZSkgew0KPiA+ICsJCXZpaWZfZGV2LT5k bWFfYWN0aXZlID0gdmlpZl9kZXYtPmxhc3RfYWN0aXZlOw0KPiA+ICsJCXZpaWZfZGV2LT5sYXN0 X2FjdGl2ZSA9IE5VTEw7DQo+ID4gKwl9IGVsc2UgaWYgKCF2aWlmX2Rldi0+ZG1hX2FjdGl2ZSkg ew0KPiA+ICsJCXZpaWZfZGV2LT5kbWFfYWN0aXZlID0gdmJ1ZjsNCj4gPiArCQlidWYgPSB2YjJf dG9fdmlpZih2YnVmKTsNCj4gPiArCQlsaXN0X2RlbF9pbml0KCZidWYtPnF1ZXVlKTsNCj4gPiAr CX0NCj4gPiArDQo+ID4gKwlpZiAoIWxpc3RfZW1wdHkoJnZpaWZfZGV2LT5jYXB0dXJlKSkgew0K PiA+ICsJCWJ1ZiA9IGxpc3RfZW50cnkodmlpZl9kZXYtPmNhcHR1cmUubmV4dCwgc3RydWN0IHZp aWZfYnVmZmVyLA0KPiBxdWV1ZSk7DQo+ID4gKwkJdmlpZl9kZXYtPmFjdGl2ZSA9ICZidWYtPnZi Ow0KPiA+ICsJCXZpaWZfc2V0X2ltZyh2aWlmX2RldiwgJmJ1Zi0+dmIudmIyX2J1Zik7DQo+ID4g Kwl9IGVsc2Ugew0KPiA+ICsJCWRldl9kYmcodmlpZl9kZXYtPmRldiwgIm5vIHF1ZXVlXG4iKTsN Cj4gPiArCQl2aWlmX2Rldi0+bGFzdF9hY3RpdmUgPSB2aWlmX2Rldi0+ZG1hX2FjdGl2ZTsNCj4g PiArCQl2aWlmX2Rldi0+ZG1hX2FjdGl2ZSA9IE5VTEw7DQo+ID4gKwkJdmlpZl9kZXYtPmFjdGl2 ZSA9IE5VTEw7DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIC0tLSBDYXB0dXJlIGJ1 ZmZlciBjb250cm9sIC0tLSAqLw0KPiA+ICtzdGF0aWMgaW50IHZpaWZfdmIyX3NldHVwKHN0cnVj dCB2YjJfcXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgKmNvdW50LA0KPiB1bnNpZ25lZCBpbnQgKm51 bV9wbGFuZXMsDQo+ID4gKwkJCSAgdW5zaWduZWQgaW50IHNpemVzW10sIHN0cnVjdCBkZXZpY2Ug KmFsbG9jX2RldnNbXSkNCj4gPiArew0KPiA+ICsJc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2Rl diA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOw0KPiA+ICsJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdF9t cGxhbmUgKnBpeCA9ICZ2aWlmX2Rldi0+djRsMl9waXg7DQo+ID4gKwl1bnNpZ25lZCBpbnQgaTsN Cj4gPiArDQo+ID4gKwkvKiBudW1fcGxhbmVzIGlzIHNldDoganVzdCBjaGVjayBwbGFuZSBzaXpl cy4gKi8NCj4gPiArCWlmICgqbnVtX3BsYW5lcykgew0KPiA+ICsJCWZvciAoaSA9IDA7IGkgPCBw aXgtPm51bV9wbGFuZXM7IGkrKykNCj4gPiArCQkJaWYgKHNpemVzW2ldIDwgcGl4LT5wbGFuZV9m bXRbaV0uc2l6ZWltYWdlKQ0KPiA+ICsJCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJ CXJldHVybiAwOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIG51bV9wbGFuZXMgbm90IHNldDog Y2FsbGVkIGZyb20gUkVRQlVGUywganVzdCBzZXQgcGxhbmUgc2l6ZXMuICovDQo+ID4gKwkqbnVt X3BsYW5lcyA9IHBpeC0+bnVtX3BsYW5lczsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBwaXgtPm51 bV9wbGFuZXM7IGkrKykNCj4gPiArCQlzaXplc1tpXSA9IHBpeC0+cGxhbmVfZm10W2ldLnNpemVp bWFnZTsNCj4gPiArDQo+ID4gKwl2aWlmX2Rldi0+YnVmX2NudCA9IDA7DQo+ID4gKw0KPiA+ICsJ cmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHZpaWZfdmIyX3F1ZXVl KHN0cnVjdCB2YjJfYnVmZmVyICp2YikNCj4gPiArew0KPiA+ICsJc3RydWN0IHZpaWZfZGV2aWNl ICp2aWlmX2RldiA9IHZiMl9nZXRfZHJ2X3ByaXYodmItPnZiMl9xdWV1ZSk7DQo+ID4gKwlzdHJ1 Y3QgdmIyX3Y0bDJfYnVmZmVyICp2YnVmID0gdG9fdmIyX3Y0bDJfYnVmZmVyKHZiKTsNCj4gPiAr CXN0cnVjdCB2aWlmX2J1ZmZlciAqYnVmID0gdmIyX3RvX3ZpaWYodmJ1Zik7DQo+ID4gKwl1bnNp Z25lZCBsb25nIGlycWZsYWdzOw0KPiA+ICsNCj4gPiArCXNwaW5fbG9ja19pcnFzYXZlKCZ2aWlm X2Rldi0+bG9jaywgaXJxZmxhZ3MpOw0KPiA+ICsJbGlzdF9hZGRfdGFpbCgmYnVmLT5xdWV1ZSwg JnZpaWZfZGV2LT5jYXB0dXJlKTsNCj4gPiArCXZpaWZfZGV2LT5idWZfY250Kys7DQo+ID4gKw0K PiA+ICsJaWYgKCF2aWlmX2Rldi0+YWN0aXZlKSB7DQo+ID4gKwkJdmlpZl9kZXYtPmFjdGl2ZSA9 IHZidWY7DQo+ID4gKwkJaWYgKCF2aWlmX2Rldi0+bGFzdF9hY3RpdmUpDQo+ID4gKwkJCXZpaWZf c2V0X2ltZyh2aWlmX2RldiwgdmIpOw0KPiA+ICsJfQ0KPiA+ICsJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmdmlpZl9kZXYtPmxvY2ssIGlycWZsYWdzKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIGludCB2aWlmX3ZiMl9wcmVwYXJlKHN0cnVjdCB2YjJfYnVmZmVyICp2YikNCj4gPiArew0K PiA+ICsJc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldiA9IHZiMl9nZXRfZHJ2X3ByaXYodmIt PnZiMl9xdWV1ZSk7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0X21wbGFuZSAqcGl4ID0g JnZpaWZfZGV2LT52NGwyX3BpeDsNCj4gPiArCXVuc2lnbmVkIGludCBpOw0KPiA+ICsNCj4gPiAr CWZvciAoaSA9IDA7IGkgPCBwaXgtPm51bV9wbGFuZXM7IGkrKykgew0KPiA+ICsJCWlmICh2YjJf cGxhbmVfc2l6ZSh2YiwgaSkgPCBwaXgtPnBsYW5lX2ZtdFtpXS5zaXplaW1hZ2UpIHsNCj4gPiAr CQkJZGV2X2Vycih2aWlmX2Rldi0+ZGV2LCAiUGxhbmUgc2l6ZSB0b28gc21hbGwgKCVsdQ0KPiA8 ICV1KVxuIiwNCj4gPiArCQkJCXZiMl9wbGFuZV9zaXplKHZiLCBpKSwNCj4gcGl4LT5wbGFuZV9m bXRbaV0uc2l6ZWltYWdlKTsNCj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwkJfQ0KPiA+ ICsNCj4gPiArCQl2YjJfc2V0X3BsYW5lX3BheWxvYWQodmIsIGksIHBpeC0+cGxhbmVfZm10W2ld LnNpemVpbWFnZSk7DQo+ID4gKwl9DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICtzdGF0 aWMgaW50IHZpaWZfc3RhcnRfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUgKnZxLCB1bnNpZ25l ZCBpbnQgY291bnQpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYg PSB2YjJfZ2V0X2Rydl9wcml2KHZxKTsNCj4gPiArCXN0cnVjdCB2aWlmX3N1YmRldiAqdmlpZl9z ZCA9IHZpaWZfZGV2LT5zZDsNCj4gPiArCWludCByZXQ7DQo+ID4gKwl1bnNpZ25lZCBsb25nIGly cWZsYWdzOw0KPiA+ICsNCj4gPiArCXNwaW5fbG9ja19pcnFzYXZlKCZ2aWlmX2Rldi0+bG9jaywg aXJxZmxhZ3MpOw0KPiA+ICsNCj4gPiArCXJldCA9IG1lZGlhX3BpcGVsaW5lX3N0YXJ0KCZ2aWlm X2Rldi0+dmRldi5lbnRpdHksICZ2aWlmX2Rldi0+cGlwZSk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ ID4gKwkJZGV2X2Vycih2aWlmX2Rldi0+ZGV2LCAic3RhcnQgcGlwZWxpbmUgZmFpbGVkICVkXG4i LCByZXQpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIENTSTJSWCBzdGFydCAqLw0KPiA+ICsJ cmV0ID0gdjRsMl9zdWJkZXZfY2FsbCgmdmlpZl9kZXYtPmlzcF9zdWJkZXYuc2QsIHZpZGVvLCBz X3N0cmVhbSwgMSk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2Vycih2aWlmX2Rldi0+ ZGV2LCAiU3RhcnQgaXNwIHN1YmRldmljZSBzdHJlYW0NCj4gZmFpbGVkLiAlZFxuIiwgcmV0KTsN Cj4gPiArCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aWlmX2Rldi0+bG9jaywgaXJxZmxhZ3Mp Ow0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogYnVmZmVyIGNv bnRyb2wgKi8NCj4gPiArCXZpaWZfZGV2LT5zZXF1ZW5jZSA9IDA7DQo+ID4gKw0KPiA+ICsJLyog ZmluaXNoIGNyaXRpY2FsIHNlY3Rpb246IHNvbWUgc2Vuc29yIGRyaXZlciAoaW5jbHVkaW5nIGlt eDIxOSkgY2FsbHMNCj4gc2NoZWR1bGUoKSAqLw0KPiA+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmdmlpZl9kZXYtPmxvY2ssIGlycWZsYWdzKTsNCj4gPiArDQo+ID4gKwkvKiBDYW1lcmEgKENT STIgc291cmNlKSBzdGFydCBzdHJlYW1pbmcgKi8NCj4gPiArCXJldCA9IHY0bDJfc3ViZGV2X2Nh bGwodmlpZl9zZC0+djRsMl9zZCwgdmlkZW8sIHNfc3RyZWFtLCAxKTsNCj4gPiArCWlmIChyZXQp IHsNCj4gPiArCQlkZXZfZXJyKHZpaWZfZGV2LT5kZXYsICJTdGFydCBzdWJkZXYgc3RyZWFtIGZh aWxlZC4gJWRcbiIsDQo+IHJldCk7DQo+ID4gKwkJKHZvaWQpdjRsMl9zdWJkZXZfY2FsbCgmdmlp Zl9kZXYtPmlzcF9zdWJkZXYuc2QsIHZpZGVvLA0KPiBzX3N0cmVhbSwgMCk7DQo+ID4gKwkJcmV0 dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIHZvaWQgdmlpZl9zdG9wX3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICp2 cSkNCj4gPiArew0KPiA+ICsJc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldiA9IHZiMl9nZXRf ZHJ2X3ByaXYodnEpOw0KPiA+ICsJc3RydWN0IHZpaWZfc3ViZGV2ICp2aWlmX3NkID0gdmlpZl9k ZXYtPnNkOw0KPiA+ICsJc3RydWN0IHZpaWZfYnVmZmVyICpidWY7DQo+ID4gKwl1bnNpZ25lZCBs b25nIGlycWZsYWdzOw0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlyZXQgPSB2NGwyX3N1 YmRldl9jYWxsKHZpaWZfc2QtPnY0bDJfc2QsIHZpZGVvLCBzX3N0cmVhbSwgMCk7DQo+ID4gKwlp ZiAocmV0KQ0KPiA+ICsJCWRldl9lcnIodmlpZl9kZXYtPmRldiwgIlN0b3Agc3ViZGV2IHN0cmVh bSBmYWlsZWQuICVkXG4iLA0KPiByZXQpOw0KPiA+ICsNCj4gPiArCXNwaW5fbG9ja19pcnFzYXZl KCZ2aWlmX2Rldi0+bG9jaywgaXJxZmxhZ3MpOw0KPiA+ICsNCj4gPiArCXJldCA9IHY0bDJfc3Vi ZGV2X2NhbGwoJnZpaWZfZGV2LT5pc3Bfc3ViZGV2LnNkLCB2aWRlbywgc19zdHJlYW0sIDApOw0K PiA+ICsJaWYgKHJldCkNCj4gPiArCQlkZXZfZXJyKHZpaWZfZGV2LT5kZXYsICJTdG9wIGlzcCBz dWJkZXZpY2Ugc3RyZWFtDQo+IGZhaWxlZCAlZFxuIiwgcmV0KTsNCj4gPiArDQo+ID4gKwkvKiBi dWZmZXIgY29udHJvbCAqLw0KPiA+ICsJdmlpZl9kZXYtPmFjdGl2ZSA9IE5VTEw7DQo+ID4gKwlp ZiAodmlpZl9kZXYtPmRtYV9hY3RpdmUpIHsNCj4gPiArCQl2YjJfYnVmZmVyX2RvbmUoJnZpaWZf ZGV2LT5kbWFfYWN0aXZlLT52YjJfYnVmLA0KPiBWQjJfQlVGX1NUQVRFX0VSUk9SKTsNCj4gPiAr CQl2aWlmX2Rldi0+YnVmX2NudC0tOw0KPiA+ICsJCXZpaWZfZGV2LT5kbWFfYWN0aXZlID0gTlVM TDsNCj4gPiArCX0NCj4gPiArCWlmICh2aWlmX2Rldi0+bGFzdF9hY3RpdmUpIHsNCj4gPiArCQl2 YjJfYnVmZmVyX2RvbmUoJnZpaWZfZGV2LT5sYXN0X2FjdGl2ZS0+dmIyX2J1ZiwNCj4gVkIyX0JV Rl9TVEFURV9FUlJPUik7DQo+ID4gKwkJdmlpZl9kZXYtPmJ1Zl9jbnQtLTsNCj4gPiArCQl2aWlm X2Rldi0+bGFzdF9hY3RpdmUgPSBOVUxMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIFJlbGVh c2UgYWxsIHF1ZXVlZCBidWZmZXJzLiAqLw0KPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeSAoYnVm LCAmdmlpZl9kZXYtPmNhcHR1cmUsIHF1ZXVlKSB7DQo+ID4gKwkJdmIyX2J1ZmZlcl9kb25lKCZi dWYtPnZiLnZiMl9idWYsDQo+IFZCMl9CVUZfU1RBVEVfRVJST1IpOw0KPiA+ICsJCXZpaWZfZGV2 LT5idWZfY250LS07DQo+ID4gKwl9DQo+ID4gKwlJTklUX0xJU1RfSEVBRCgmdmlpZl9kZXYtPmNh cHR1cmUpOw0KPiA+ICsJaWYgKHZpaWZfZGV2LT5idWZfY250KQ0KPiA+ICsJCWRldl9lcnIodmlp Zl9kZXYtPmRldiwgIkJ1ZmZlciBjb3VudCBlcnJvciAlZFxuIiwNCj4gdmlpZl9kZXYtPmJ1Zl9j bnQpOw0KPiA+ICsNCj4gPiArCW1lZGlhX3BpcGVsaW5lX3N0b3AoJnZpaWZfZGV2LT52ZGV2LmVu dGl0eSk7DQo+ID4gKw0KPiA+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlpZl9kZXYtPmxv Y2ssIGlycWZsYWdzKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2 YjJfb3BzIHZpaWZfdmIyX29wcyA9IHsNCj4gPiArCS5xdWV1ZV9zZXR1cCA9IHZpaWZfdmIyX3Nl dHVwLA0KPiA+ICsJLmJ1Zl9xdWV1ZSA9IHZpaWZfdmIyX3F1ZXVlLA0KPiA+ICsJLmJ1Zl9wcmVw YXJlID0gdmlpZl92YjJfcHJlcGFyZSwNCj4gPiArCS53YWl0X3ByZXBhcmUgPSB2YjJfb3BzX3dh aXRfcHJlcGFyZSwNCj4gPiArCS53YWl0X2ZpbmlzaCA9IHZiMl9vcHNfd2FpdF9maW5pc2gsDQo+ ID4gKwkuc3RhcnRfc3RyZWFtaW5nID0gdmlpZl9zdGFydF9zdHJlYW1pbmcsDQo+ID4gKwkuc3Rv cF9zdHJlYW1pbmcgPSB2aWlmX3N0b3Bfc3RyZWFtaW5nLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiAr LyogLS0tIFZJSUYgaGFyZHdhcmUgc2V0dGluZ3MgLS0tICovDQo+ID4gK2V4dGVybiBpbnQgdmlp Zl9pc3BfbWFpbl9zZXRfdW5pdChzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2KTsNCj4gPiAr DQo+ID4gKy8qIEwySVNQIG91dHB1dCBjc2Mgc2V0dGluZyBmb3IgWVVWIHRvIFJHQihJVFUtUiBC VC43MDkpICovDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHdkX3ZpaWZfY3NjX3BhcmFtIHZp aWZfY3NjX3l1djJyZ2IgPSB7DQo+ID4gKwkucl9jcl9pbl9vZmZzZXQgPSAweDE4MDAwLA0KPiA+ ICsJLmdfeV9pbl9vZmZzZXQgPSAweDFmMDAwLA0KPiA+ICsJLmJfY2JfaW5fb2Zmc2V0ID0gMHgx ODAwMCwNCj4gPiArCS5jb2VmID0gew0KPiA+ICsJCQlbMF0gPSAweDEwMDAsDQo+ID4gKwkJCVsx XSA9IDB4ZmQxMiwNCj4gPiArCQkJWzJdID0gMHhmOGFkLA0KPiA+ICsJCQlbM10gPSAweDEwMDAs DQo+ID4gKwkJCVs0XSA9IDB4MWQwNywNCj4gPiArCQkJWzVdID0gMHgwMDAwLA0KPiA+ICsJCQlb Nl0gPSAweDEwMDAsDQo+ID4gKwkJCVs3XSA9IDB4MDAwMCwNCj4gPiArCQkJWzhdID0gMHgxOGEy LA0KPiA+ICsJCX0sDQo+ID4gKwkucl9jcl9vdXRfb2Zmc2V0ID0gMHgxMDAwLA0KPiA+ICsJLmdf eV9vdXRfb2Zmc2V0ID0gMHgxMDAwLA0KPiA+ICsJLmJfY2Jfb3V0X29mZnNldCA9IDB4MTAwMCwN Cj4gPiArfTsNCj4gPiArDQo+ID4gKy8qIEwySVNQIG91dHB1dCBjc2Mgc2V0dGluZyBmb3IgUkdC IHRvIFlVVihJVFUtUiBCVC43MDkpICovDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHdkX3Zp aWZfY3NjX3BhcmFtIHZpaWZfY3NjX3JnYjJ5dXYgPSB7DQo+ID4gKwkucl9jcl9pbl9vZmZzZXQg PSAweDFmMDAwLA0KPiA+ICsJLmdfeV9pbl9vZmZzZXQgPSAweDFmMDAwLA0KPiA+ICsJLmJfY2Jf aW5fb2Zmc2V0ID0gMHgxZjAwMCwNCj4gPiArCS5jb2VmID0gew0KPiA+ICsJCQlbMF0gPSAweDBi NzEsDQo+ID4gKwkJCVsxXSA9IDB4MDEyOCwNCj4gPiArCQkJWzJdID0gMHgwMzY3LA0KPiA+ICsJ CQlbM10gPSAweGY5YjEsDQo+ID4gKwkJCVs0XSA9IDB4MDgyZiwNCj4gPiArCQkJWzVdID0gMHhm ZTIwLA0KPiA+ICsJCQlbNl0gPSAweGY4OTEsDQo+ID4gKwkJCVs3XSA9IDB4ZmY0MCwNCj4gPiAr CQkJWzhdID0gMHgwODJmLA0KPiA+ICsJCX0sDQo+ID4gKwkucl9jcl9vdXRfb2Zmc2V0ID0gMHg4 MDAwLA0KPiA+ICsJLmdfeV9vdXRfb2Zmc2V0ID0gMHgxMDAwLA0KPiA+ICsJLmJfY2Jfb3V0X29m ZnNldCA9IDB4ODAwMCwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdmlpZl9sMl9z ZXRfZm9ybWF0KHN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYpDQo+ID4gK3sNCj4gPiArCXN0 cnVjdCB2NGwyX3BpeF9mb3JtYXRfbXBsYW5lICpwaXggPSAmdmlpZl9kZXYtPnY0bDJfcGl4Ow0K PiA+ICsJY29uc3Qgc3RydWN0IGh3ZF92aWlmX2NzY19wYXJhbSAqY3NjX3BhcmFtID0gTlVMTDsN Cj4gPiArCXN0cnVjdCB2NGwyX3N1YmRldl9zZWxlY3Rpb24gc2VsID0gew0KPiA+ICsJCS5wYWQg PSBWSUlGX0lTUF9QQURfU1JDLA0KPiA+ICsJCS50YXJnZXQgPSBWNEwyX1NFTF9UR1RfQ1JPUCwN Cj4gPiArCQkud2hpY2ggPSBWNEwyX1NVQkRFVl9GT1JNQVRfQUNUSVZFLA0KPiA+ICsJfTsNCj4g PiArCXN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgZm10ID0gew0KPiA+ICsJCS5wYWQgPSBWSUlG X0lTUF9QQURfU1JDLA0KPiA+ICsJCS53aGljaCA9IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUs DQo+ID4gKwl9Ow0KPiA+ICsJYm9vbCBpbnBfaXNfcmdiID0gZmFsc2U7DQo+ID4gKwlib29sIG91 dF9pc19yZ2IgPSBmYWxzZTsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJdmlpZl9kZXYt Pm91dF9wcm9jZXNzLmhhbGZfc2NhbGUgPSBIV0RfVklJRl9ESVNBQkxFOw0KPiA+ICsJdmlpZl9k ZXYtPm91dF9wcm9jZXNzLnNlbGVjdF9jb2xvciA9IEhXRF9WSUlGX0NPTE9SX1lVVl9SR0I7DQo+ ID4gKwl2aWlmX2Rldi0+b3V0X3Byb2Nlc3MuYWxwaGEgPSAwOw0KPiA+ICsNCj4gPiArCXJldCA9 IHY0bDJfc3ViZGV2X2NhbGwoJnZpaWZfZGV2LT5pc3Bfc3ViZGV2LnNkLCBwYWQsIGdldF9zZWxl Y3Rpb24sDQo+IE5VTEwsICZzZWwpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCXZpaWZfZGV2 LT5pbWdfYXJlYS54ID0gMDsNCj4gPiArCQl2aWlmX2Rldi0+aW1nX2FyZWEueSA9IDA7DQo+ID4g KwkJdmlpZl9kZXYtPmltZ19hcmVhLncgPSBwaXgtPndpZHRoOw0KPiA+ICsJCXZpaWZfZGV2LT5p bWdfYXJlYS5oID0gcGl4LT5oZWlnaHQ7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCXZpaWZfZGV2 LT5pbWdfYXJlYS54ID0gc2VsLnIubGVmdDsNCj4gPiArCQl2aWlmX2Rldi0+aW1nX2FyZWEueSA9 IHNlbC5yLnRvcDsNCj4gPiArCQl2aWlmX2Rldi0+aW1nX2FyZWEudyA9IHNlbC5yLndpZHRoOw0K PiA+ICsJCXZpaWZfZGV2LT5pbWdfYXJlYS5oID0gc2VsLnIuaGVpZ2h0Ow0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoJnZpaWZfZGV2LT5pc3Bfc3ViZGV2LnNk LCBwYWQsIGdldF9mbXQsIE5VTEwsDQo+ICZmbXQpOw0KPiA+ICsJaWYgKCFyZXQpDQo+ID4gKwkJ aW5wX2lzX3JnYiA9IChmbXQuZm9ybWF0LmNvZGUgPT0NCj4gTUVESUFfQlVTX0ZNVF9SR0I4ODhf MVgyNCk7DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChwaXgtPnBpeGVsZm9ybWF0KSB7DQo+ID4gKwlj YXNlIFY0TDJfUElYX0ZNVF9SR0IyNDoNCj4gPiArCQl2aWlmX2Rldi0+b3V0X2Zvcm1hdCA9IEhX RF9WSUlGX1JHQjg4OF9QQUNLRUQ7DQo+ID4gKwkJb3V0X2lzX3JnYiA9IHRydWU7DQo+ID4gKwkJ YnJlYWs7DQo+ID4gKwljYXNlIFY0TDJfUElYX0ZNVF9BQkdSMzI6DQo+ID4gKwkJdmlpZl9kZXYt Pm91dF9mb3JtYXQgPSBIV0RfVklJRl9BUkdCODg4OF9QQUNLRUQ7DQo+ID4gKwkJdmlpZl9kZXYt Pm91dF9wcm9jZXNzLmFscGhhID0gMHhmZjsNCj4gPiArCQlvdXRfaXNfcmdiID0gdHJ1ZTsNCj4g PiArCQlicmVhazsNCj4gPiArCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMk06DQo+ID4gKwkJdmlp Zl9kZXYtPm91dF9mb3JtYXQgPSBIV0RfVklJRl9ZQ0JDUjQyMl84X1BMQU5BUjsNCj4gPiArCQli cmVhazsNCj4gPiArCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQ0NE06DQo+ID4gKwkJdmlpZl9kZXYt Pm91dF9mb3JtYXQgPQ0KPiBIV0RfVklJRl9SR0I4ODhfWUNCQ1I0NDRfOF9QTEFOQVI7DQo+ID4g KwkJYnJlYWs7DQo+ID4gKwljYXNlIFY0TDJfUElYX0ZNVF9ZMTY6DQo+ID4gKwkJdmlpZl9kZXYt Pm91dF9mb3JtYXQgPSBIV0RfVklJRl9PTkVfQ09MT1JfMTY7DQo+ID4gKwkJdmlpZl9kZXYtPm91 dF9wcm9jZXNzLnNlbGVjdF9jb2xvciA9IEhXRF9WSUlGX0NPTE9SX1lfRzsNCj4gPiArCQlicmVh azsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoIWlucF9pc19yZ2IgJiYgb3V0X2lzX3JnYikN Cj4gPiArCQljc2NfcGFyYW0gPSAmdmlpZl9jc2NfeXV2MnJnYjsgLyogWVVWIC0+IFJHQiAqLw0K PiA+ICsJZWxzZSBpZiAoaW5wX2lzX3JnYiAmJiAhb3V0X2lzX3JnYikNCj4gPiArCQljc2NfcGFy YW0gPSAmdmlpZl9jc2NfcmdiMnl1djsgLyogUkdCIC0+IFlVViAqLw0KPiA+ICsNCj4gPiArCXJl dHVybiBod2RfVklJRl9sMl9zZXRfb3V0cHV0X2NzYyh2aWlmX2Rldi0+Y2gsIFZJSUZfTDJJU1Bf UE9TVF8wLA0KPiBWSUlGX0lTUF9SRUdCVUZfMCwNCj4gPiArCQkJCQkgIGNzY19wYXJhbSk7DQo+ ID4gK30NCj4gPiArDQo+ID4gK2ludCB2aWlmX2wyX3NldF9jcm9wKHN0cnVjdCB2aWlmX2Rldmlj ZSAqdmlpZl9kZXYsIHN0cnVjdCB2aWlmX2wyX2Nyb3BfY29uZmlnDQo+ICpsMl9jcm9wKQ0KPiA+ ICt7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXZfc2VsZWN0aW9uIHNlbCA9IHsNCj4gPiArCQku cGFkICAgID0gVklJRl9JU1BfUEFEX1NSQywNCj4gPiArCQkudGFyZ2V0ID0gVjRMMl9TRUxfVEdU X0NST1AsDQo+ID4gKwkJLndoaWNoICA9IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUsDQo+ID4g KwkJLnIgPSB7DQo+ID4gKwkJCS5sZWZ0ICAgPSBsMl9jcm9wLT54LA0KPiA+ICsJCQkudG9wICAg ID0gbDJfY3JvcC0+eSwNCj4gPiArCQkJLndpZHRoICA9IGwyX2Nyb3AtPncsDQo+ID4gKwkJCS5o ZWlnaHQgPSBsMl9jcm9wLT5oLA0KPiA+ICsJCX0sDQo+ID4gKwl9Ow0KPiA+ICsNCj4gPiArCWlm ICgobDJfY3JvcC0+eCA+IFZJSUZfQ1JPUF9NQVhfWF9JU1ApIHx8IChsMl9jcm9wLT55ID4NCj4g VklJRl9DUk9QX01BWF9ZX0lTUCkgfHwNCj4gPiArCSAgICAobDJfY3JvcC0+dyA8IFZJSUZfQ1JP UF9NSU5fVykgfHwgKGwyX2Nyb3AtPncgPg0KPiBWSUlGX0NST1BfTUFYX1dfSVNQKSB8fA0KPiA+ ICsJICAgIChsMl9jcm9wLT5oIDwgVklJRl9DUk9QX01JTl9IKSB8fCAobDJfY3JvcC0+aCA+DQo+ IFZJSUZfQ1JPUF9NQVhfSF9JU1ApKSB7DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9 DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoJnZpaWZfZGV2LT5pc3Bfc3Vi ZGV2LnNkLCBwYWQsIHNldF9zZWxlY3Rpb24sDQo+IE5VTEwsICZzZWwpOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKiAtLS0gSU9DVEwgT3BlcmF0aW9ucyAtLS0gKi8NCj4gPiArc3RhdGljIGNvbnN0 IHN0cnVjdCB2aWlmX2ZtdCB2aWlmX2ZtdF9saXN0W10gPSB7DQo+ID4gKwl7DQo+ID4gKwkJLmZv dXJjYyA9IFY0TDJfUElYX0ZNVF9SR0IyNCwNCj4gPiArCQkuYnBwID0geyAyNCwgMCwgMCB9LA0K PiA+ICsJCS5udW1fcGxhbmVzID0gMSwNCj4gPiArCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JT UEFDRV9TUkdCLA0KPiA+ICsJCS5waXRjaF9hbGlnbiA9IDM4NCwNCj4gPiArCX0sDQo+ID4gKwl7 DQo+ID4gKwkJLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9BQkdSMzIsDQo+ID4gKwkJLmJwcCA9IHsg MzIsIDAsIDAgfSwNCj4gPiArCQkubnVtX3BsYW5lcyA9IDEsDQo+ID4gKwkJLmNvbG9yc3BhY2Ug PSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwNCj4gPiArCQkucGl0Y2hfYWxpZ24gPSA1MTIsDQo+ID4g Kwl9LA0KPiA+ICsJew0KPiA+ICsJCS5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfWVVWNDIyTSwNCj4g PiArCQkuYnBwID0geyA4LCA0LCA0IH0sDQo+ID4gKwkJLm51bV9wbGFuZXMgPSAzLA0KPiA+ICsJ CS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1JFQzcwOSwNCj4gPiArCQkucGl0Y2hfYWxp Z24gPSAxMjgsDQo+ID4gKwl9LA0KPiA+ICsJew0KPiA+ICsJCS5mb3VyY2MgPSBWNEwyX1BJWF9G TVRfWVVWNDQ0TSwNCj4gPiArCQkuYnBwID0geyA4LCA4LCA4IH0sDQo+ID4gKwkJLm51bV9wbGFu ZXMgPSAzLA0KPiA+ICsJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1JFQzcwOSwNCj4g PiArCQkucGl0Y2hfYWxpZ24gPSAxMjgsDQo+ID4gKwl9LA0KPiA+ICsJew0KPiA+ICsJCS5mb3Vy Y2MgPSBWNEwyX1BJWF9GTVRfWTE2LA0KPiA+ICsJCS5icHAgPSB7IDE2LCAwLCAwIH0sDQo+ID4g KwkJLm51bV9wbGFuZXMgPSAxLA0KPiA+ICsJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNF X1JFQzcwOSwNCj4gPiArCQkucGl0Y2hfYWxpZ24gPSAxMjgsDQo+ID4gKwl9LA0KPiA+ICt9Ow0K PiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2aWlmX2ZtdCAqZ2V0X3ZpaWZfZm10X2Zy b21fZm91cmNjKHVuc2lnbmVkIGludCBmb3VyY2MpDQo+ID4gK3sNCj4gPiArCWNvbnN0IHN0cnVj dCB2aWlmX2ZtdCAqZm10ID0gJnZpaWZfZm10X2xpc3RbMF07DQo+ID4gKwl1bnNpZ25lZCBpbnQg aTsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2aWlmX2ZtdF9saXN0 KTsgaSsrLCBmbXQrKykNCj4gPiArCQlpZiAoZm10LT5mb3VyY2MgPT0gZm91cmNjKQ0KPiA+ICsJ CQlyZXR1cm4gZm10Ow0KPiA+ICsNCj4gPiArCXJldHVybiBOVUxMOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgdm9pZCB2aWlmX3VwZGF0ZV9wbGFuZV9zaXplcyhzdHJ1Y3QgdjRsMl9wbGFu ZV9waXhfZm9ybWF0ICpwbGFuZSwNCj4gdW5zaWduZWQgaW50IGJwbCwNCj4gPiArCQkJCSAgICB1 bnNpZ25lZCBpbnQgc3ppbWFnZSkNCj4gPiArew0KPiA+ICsJbWVtc2V0KHBsYW5lLCAwLCBzaXpl b2YoKnBsYW5lKSk7DQo+ID4gKw0KPiA+ICsJcGxhbmUtPnNpemVpbWFnZSA9IHN6aW1hZ2U7DQo+ ID4gKwlwbGFuZS0+Ynl0ZXNwZXJsaW5lID0gYnBsOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgdm9pZCB2aWlmX2NhbGNfcGxhbmVfc2l6ZXMoY29uc3Qgc3RydWN0IHZpaWZfZm10ICp2aWlm X2ZtdCwNCj4gPiArCQkJCSAgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdF9tcGxhbmUgKnBpeCkNCj4g PiArew0KPiA+ICsJdW5zaWduZWQgaW50IGksIGJwbCwgc3ppbWFnZTsNCj4gPiArDQo+ID4gKwlm b3IgKGkgPSAwOyBpIDwgdmlpZl9mbXQtPm51bV9wbGFuZXM7IGkrKykgew0KPiA+ICsJCWJwbCA9 IHBpeC0+d2lkdGggKiB2aWlmX2ZtdC0+YnBwW2ldIC8gODsNCj4gPiArCQkvKiByb3VuZCB1cCBw dGNoICovDQo+ID4gKwkJYnBsID0gKGJwbCArICh2aWlmX2ZtdC0+cGl0Y2hfYWxpZ24gLSAxKSkg Lw0KPiB2aWlmX2ZtdC0+cGl0Y2hfYWxpZ247DQo+ID4gKwkJYnBsICo9IHZpaWZfZm10LT5waXRj aF9hbGlnbjsNCj4gPiArCQlzemltYWdlID0gcGl4LT5oZWlnaHQgKiBicGw7DQo+ID4gKwkJdmlp Zl91cGRhdGVfcGxhbmVfc2l6ZXMoJnBpeC0+cGxhbmVfZm10W2ldLCBicGwsIHN6aW1hZ2UpOw0K PiA+ICsJfQ0KPiA+ICsJcGl4LT5udW1fcGxhbmVzID0gdmlpZl9mbXQtPm51bV9wbGFuZXM7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdmlpZl9xdWVyeWNhcChzdHJ1Y3QgZmlsZSAq ZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfY2FwYWJpbGl0eQ0KPiAqY2FwKQ0KPiA+ICt7 DQo+ID4gKwlzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxl KTsNCj4gPiArDQo+ID4gKwlzdHJzY3B5KGNhcC0+Y2FyZCwgIlRvc2hpYmEgVklJRiIsIHNpemVv ZihjYXAtPmNhcmQpKTsNCj4gPiArCXN0cnNjcHkoY2FwLT5kcml2ZXIsICJ2aWlmIiwgc2l6ZW9m KGNhcC0+ZHJpdmVyKSk7DQo+ID4gKwlzbnByaW50ZihjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2Fw LT5idXNfaW5mbyksDQo+ICJwbGF0Zm9ybTp0b3NoaWJhLXZpaWYtJXMiLA0KPiA+ICsJCSBkZXZf bmFtZSh2aWlmX2Rldi0+ZGV2KSk7DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIGludCB2aWlmX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZv aWQgKnByaXYsIHN0cnVjdA0KPiB2NGwyX2ZtdGRlc2MgKmYpDQo+ID4gK3sNCj4gPiArCWNvbnN0 IHN0cnVjdCB2aWlmX2ZtdCAqZm10Ow0KPiA+ICsNCj4gPiArCWlmIChmLT5pbmRleCA+PSBBUlJB WV9TSVpFKHZpaWZfZm10X2xpc3QpKQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4g PiArCWZtdCA9ICZ2aWlmX2ZtdF9saXN0W2YtPmluZGV4XTsNCj4gPiArCWYtPnBpeGVsZm9ybWF0 ID0gZm10LT5mb3VyY2M7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ ID4gKy8qIHNpemUgb2YgbWluaW11bS9tYXhpbXVtIG91dHB1dCBpbWFnZSAqLw0KPiA+ICsjZGVm aW5lIFZJSUZfTUlOX09VVFBVVF9JTUdfV0lEVEggICAgICgxMjhVKQ0KPiA+ICsjZGVmaW5lIFZJ SUZfTUFYX09VVFBVVF9JTUdfV0lEVEhfSVNQICg1NzYwVSkNCj4gPiArI2RlZmluZSBWSUlGX01B WF9PVVRQVVRfSU1HX1dJRFRIX1NVQiAoNDA5NlUpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFZJSUZf TUlOX09VVFBVVF9JTUdfSEVJR0hUICAgICAoMTI4VSkNCj4gPiArI2RlZmluZSBWSUlGX01BWF9P VVRQVVRfSU1HX0hFSUdIVF9JU1AgKDMyNDBVKQ0KPiA+ICsjZGVmaW5lIFZJSUZfTUFYX09VVFBV VF9JTUdfSEVJR0hUX1NVQiAoMjE2MFUpDQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZpaWZfdHJ5 X2ZtdChzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2LCBzdHJ1Y3QgdjRsMl9mb3JtYXQNCj4g KnY0bDJfZm10KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0X21wbGFuZSAq cGl4ID0gJnY0bDJfZm10LT5mbXQucGl4X21wOw0KPiA+ICsJc3RydWN0IHY0bDJfc3ViZGV2X2Zv cm1hdCBmb3JtYXQgPSB7DQo+ID4gKwkJLnBhZCA9IFZJSUZfSVNQX1BBRF9TUkMsDQo+ID4gKwkJ LndoaWNoID0gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRSwNCj4gPiArCX07DQo+ID4gKwljb25z dCBzdHJ1Y3QgdmlpZl9mbXQgKnZpaWZfZm10Ow0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4g KwkvKiBmb3VyY2MgY2hlY2sgKi8NCj4gPiArCXZpaWZfZm10ID0gZ2V0X3ZpaWZfZm10X2Zyb21f Zm91cmNjKHBpeC0+cGl4ZWxmb3JtYXQpOw0KPiA+ICsJaWYgKCF2aWlmX2ZtdCkNCj4gPiArCQly ZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwkvKiBtaW4vbWF4IHdpZHRoLCBoZWlnaHQgY2hl Y2sgKi8NCj4gPiArCWlmIChwaXgtPndpZHRoIDwgVklJRl9NSU5fT1VUUFVUX0lNR19XSURUSCkN Cj4gPiArCQlwaXgtPndpZHRoID0gVklJRl9NSU5fT1VUUFVUX0lNR19XSURUSDsNCj4gPiArDQo+ ID4gKwlpZiAocGl4LT53aWR0aCA+IFZJSUZfTUFYX09VVFBVVF9JTUdfV0lEVEhfSVNQKQ0KPiA+ ICsJCXBpeC0+d2lkdGggPSBWSUlGX01BWF9PVVRQVVRfSU1HX1dJRFRIX0lTUDsNCj4gPiArDQo+ ID4gKwlpZiAocGl4LT5oZWlnaHQgPCBWSUlGX01JTl9PVVRQVVRfSU1HX0hFSUdIVCkNCj4gPiAr CQlwaXgtPmhlaWdodCA9IFZJSUZfTUlOX09VVFBVVF9JTUdfSEVJR0hUOw0KPiA+ICsNCj4gPiAr CWlmIChwaXgtPmhlaWdodCA+IFZJSUZfTUFYX09VVFBVVF9JTUdfSEVJR0hUX0lTUCkNCj4gPiAr CQlwaXgtPmhlaWdodCA9IFZJSUZfTUFYX09VVFBVVF9JTUdfSEVJR0hUX0lTUDsNCj4gPiArDQo+ ID4gKwkvKiBleHBlcmltZW50YWw6IGNvbnNpc3RlbmN5IHdpdGggaXNwOjpwYWQ6OnNyYzo6Zm10 ICovDQo+ID4gKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKCZ2aWlmX2Rldi0+aXNwX3N1YmRldi5z ZCwgcGFkLCBnZXRfZm10LCBOVUxMLA0KPiAmZm9ybWF0KTsNCj4gPiArCWlmIChyZXQpDQo+ID4g KwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwlpZiAocGl4LT53aWR0aCAhPSBmb3JtYXQuZm9ybWF0 LndpZHRoKQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJaWYgKHBpeC0+aGVpZ2h0ICE9 IGZvcm1hdC5mb3JtYXQuaGVpZ2h0KQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4g PiArCS8qIHVwZGF0ZSBkZXJpdmVkIHBhcmFtZXRlcnMsIHN1Y2ggYXMgYnBwICovDQo+ID4gKwl2 aWlmX2NhbGNfcGxhbmVfc2l6ZXModmlpZl9mbXQsIHBpeCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJu IDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdmlpZl90cnlfZm10X3ZpZF9jYXAo c3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2Zvcm1hdA0KPiAqZikN Cj4gPiArew0KPiA+ICsJc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldiA9IHZpZGVvX2RydmRh dGEoZmlsZSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHZpaWZfdHJ5X2ZtdCh2aWlmX2RldiwgZik7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdmlpZl9zX2ZtdF92aWRfY2FwKHN0cnVj dCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9mb3JtYXQNCj4gKmYpDQo+ID4g K3sNCj4gPiArCXN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYgPSB2aWRlb19kcnZkYXRhKGZp bGUpOw0KPiA+ICsJaW50IHJldCA9IDA7DQo+ID4gKw0KPiA+ICsJaWYgKHZiMl9pc19zdHJlYW1p bmcoJnZpaWZfZGV2LT52YjJfdnEpKQ0KPiA+ICsJCXJldHVybiAtRUJVU1k7DQo+ID4gKw0KPiA+ ICsJaWYgKGYtPnR5cGUgIT0gdmlpZl9kZXYtPnZiMl92cS50eXBlKQ0KPiA+ICsJCXJldHVybiAt RUlOVkFMOw0KPiA+ICsNCj4gPiArCXJldCA9IHZpaWZfdHJ5X2ZtdCh2aWlmX2RldiwgZik7DQo+ ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJLyogVE9ETzog dGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gdmlpZl9pc3Bfc19zdHJlYW0oKT8/ ICovDQo+ID4gKwlyZXQgPSB2aWlmX2lzcF9tYWluX3NldF91bml0KHZpaWZfZGV2KTsNCj4gPiAr CWlmIChyZXQpDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKwl2aWlmX2Rldi0+djRs Ml9waXggPSBmLT5mbXQucGl4X21wOw0KPiA+ICsJdmlpZl9kZXYtPmZpZWxkID0gVjRMMl9GSUVM RF9OT05FOw0KPiA+ICsNCj4gPiArCXJldHVybiB2aWlmX2wyX3NldF9mb3JtYXQodmlpZl9kZXYp Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZpaWZfZ19mbXRfdmlkX2NhcChzdHJ1 Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfZm9ybWF0DQo+ICpmKQ0KPiA+ ICt7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2ID0gdmlkZW9fZHJ2ZGF0YShm aWxlKTsNCj4gPiArDQo+ID4gKwlmLT5mbXQucGl4X21wID0gdmlpZl9kZXYtPnY0bDJfcGl4Ow0K PiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZp aWZfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJf aW5wdXQgKmlucCkNCj4gPiArew0KPiA+ICsJc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldiA9 IHZpZGVvX2RydmRhdGEoZmlsZSk7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9zdWJkZXYgKnZpaWZfc2Q7 DQo+ID4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnY0bDJfc2Q7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ ICsNCj4gPiArCWlmIChpbnAtPmluZGV4ID49IHZpaWZfZGV2LT5udW1fc2QpDQo+ID4gKwkJcmV0 dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJdmlpZl9zZCA9ICZ2aWlmX2Rldi0+c3ViZGV2c1tp bnAtPmluZGV4XTsNCj4gPiArCXY0bDJfc2QgPSB2aWlmX3NkLT52NGwyX3NkOw0KPiA+ICsNCj4g PiArCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwodjRsMl9zZCwgdmlkZW8sIGdfaW5wdXRfc3RhdHVz LCAmaW5wLT5zdGF0dXMpOw0KPiA+ICsJaWYgKHJldCA8IDAgJiYgcmV0ICE9IC1FTk9JT0NUTENN RCAmJiByZXQgIT0gLUVOT0RFVikNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJaW5wLT50eXBl ID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsNCj4gPiArCWlucC0+c3RkID0gMDsNCj4gPiArCWlm ICh2NGwyX3N1YmRldl9oYXNfb3AodjRsMl9zZCwgcGFkLCBkdl90aW1pbmdzX2NhcCkpDQo+ID4g KwkJaW5wLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0lOX0NBUF9EVl9USU1JTkdTOw0KPiA+ICsJZWxz ZQ0KPiA+ICsJCWlucC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9JTl9DQVBfU1REOw0KPiA+ICsJc25w cmludGYoaW5wLT5uYW1lLCBzaXplb2YoaW5wLT5uYW1lKSwgIkNhbWVyYSV1OiAlcyIsIGlucC0+ aW5kZXgsDQo+IHZpaWZfc2QtPnY0bDJfc2QtPm5hbWUpOw0KPiA+ICsNCj4gPiArCXJldHVybiAw Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZpaWZfZ19pbnB1dChzdHJ1Y3QgZmls ZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1 Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCj4gPiArDQo+ ID4gKwkqaSA9IHZpaWZfZGV2LT5zZF9pbmRleDsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2aWlmX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZp bGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3Qgdmlp Zl9kZXZpY2UgKnZpaWZfZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCj4gPiArDQo+ID4gKwlp ZiAoaSA+PSB2aWlmX2Rldi0+bnVtX3NkKQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsN Cj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZpaWZfZHZf dGltaW5nc19jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXZfZmgsIHN0cnVjdA0KPiB2 NGwyX2R2X3RpbWluZ3NfY2FwICpjYXApDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB2aWlmX2Rldmlj ZSAqdmlpZl9kZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KPiA+ICsJc3RydWN0IHZpaWZfc3Vi ZGV2ICp2aWlmX3NkID0gdmlpZl9kZXYtPnNkOw0KPiA+ICsNCj4gPiArCXJldHVybiB2NGwyX3N1 YmRldl9jYWxsKHZpaWZfc2QtPnY0bDJfc2QsIHBhZCwgZHZfdGltaW5nc19jYXAsIGNhcCk7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdmlpZl9lbnVtX2R2X3RpbWluZ3Moc3RydWN0 IGZpbGUgKmZpbGUsIHZvaWQgKnByaXZfZmgsDQo+ID4gKwkJCQlzdHJ1Y3QgdjRsMl9lbnVtX2R2 X3RpbWluZ3MgKnRpbWluZ3MpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB2aWlmX2RldmljZSAqdmlp Zl9kZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KPiA+ICsJc3RydWN0IHZpaWZfc3ViZGV2ICp2 aWlmX3NkID0gdmlpZl9kZXYtPnNkOw0KPiA+ICsNCj4gPiArCXJldHVybiB2NGwyX3N1YmRldl9j YWxsKHZpaWZfc2QtPnY0bDJfc2QsIHBhZCwgZW51bV9kdl90aW1pbmdzLA0KPiB0aW1pbmdzKTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2aWlmX2dfZHZfdGltaW5ncyhzdHJ1Y3Qg ZmlsZSAqZmlsZSwgdm9pZCAqcHJpdl9maCwgc3RydWN0DQo+IHY0bDJfZHZfdGltaW5ncyAqdGlt aW5ncykNCj4gPiArew0KPiA+ICsJc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldiA9IHZpZGVv X2RydmRhdGEoZmlsZSk7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9zdWJkZXYgKnZpaWZfc2QgPSB2aWlm X2Rldi0+c2Q7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwodmlpZl9zZC0+ djRsMl9zZCwgdmlkZW8sIGdfZHZfdGltaW5ncywNCj4gdGltaW5ncyk7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyBpbnQgdmlpZl9zX2R2X3RpbWluZ3Moc3RydWN0IGZpbGUgKmZpbGUsIHZv aWQgKnByaXZfZmgsIHN0cnVjdA0KPiB2NGwyX2R2X3RpbWluZ3MgKnRpbWluZ3MpDQo+ID4gK3sN Cj4gPiArCXN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUp Ow0KPiA+ICsJc3RydWN0IHZpaWZfc3ViZGV2ICp2aWlmX3NkID0gdmlpZl9kZXYtPnNkOw0KPiA+ ICsNCj4gPiArCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHZpaWZfc2QtPnY0bDJfc2QsIHZpZGVv LCBzX2R2X3RpbWluZ3MsDQo+IHRpbWluZ3MpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg aW50IHZpaWZfcXVlcnlfZHZfdGltaW5ncyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdl9m aCwgc3RydWN0DQo+IHY0bDJfZHZfdGltaW5ncyAqdGltaW5ncykNCj4gPiArew0KPiA+ICsJc3Ry dWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7DQo+ID4gKwlz dHJ1Y3QgdmlpZl9zdWJkZXYgKnZpaWZfc2QgPSB2aWlmX2Rldi0+c2Q7DQo+ID4gKw0KPiA+ICsJ cmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwodmlpZl9zZC0+djRsMl9zZCwgdmlkZW8sIHF1ZXJ5X2R2 X3RpbWluZ3MsDQo+IHRpbWluZ3MpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZp aWZfZ19lZGlkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZWRpZCAq ZWRpZCkNCj4gPiArew0KPiA+ICsJc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldiA9IHZpZGVv X2RydmRhdGEoZmlsZSk7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9zdWJkZXYgKnZpaWZfc2QgPSB2aWlm X2Rldi0+c2Q7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwodmlpZl9zZC0+ djRsMl9zZCwgcGFkLCBnZXRfZWRpZCwgZWRpZCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyBpbnQgdmlpZl9zX2VkaWQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRs Ml9lZGlkICplZGlkKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2 ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCj4gPiArCXN0cnVjdCB2aWlmX3N1YmRldiAqdmlpZl9z ZCA9IHZpaWZfZGV2LT5zZDsNCj4gPiArDQo+ID4gKwlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbCh2 aWlmX3NkLT52NGwyX3NkLCBwYWQsIHNldF9lZGlkLCBlZGlkKTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIGludCB2aWlmX2dfcGFybShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0 cnVjdCB2NGwyX3N0cmVhbXBhcm0gKmEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB2aWlmX2Rldmlj ZSAqdmlpZl9kZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KPiA+ICsNCj4gPiArCXJldHVybiB2 NGwyX2dfcGFybV9jYXAodmlkZW9fZGV2ZGF0YShmaWxlKSwgdmlpZl9kZXYtPnNkLT52NGwyX3Nk LA0KPiBhKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2aWlmX3NfcGFybShzdHJ1 Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKmEpDQo+ID4g K3sNCj4gPiArCXN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYgPSB2aWRlb19kcnZkYXRhKGZp bGUpOw0KPiA+ICsNCj4gPiArCXJldHVybiB2NGwyX3NfcGFybV9jYXAodmlkZW9fZGV2ZGF0YShm aWxlKSwgdmlpZl9kZXYtPnNkLT52NGwyX3NkLA0KPiBhKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIGludCB2aWlmX2VudW1fZnJhbWVzaXplcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAq ZmgsIHN0cnVjdA0KPiB2NGwyX2ZybXNpemVlbnVtICpmc2l6ZSkNCj4gPiArew0KPiA+ICsJc3Ry dWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7DQo+ID4gKwlz dHJ1Y3QgdmlpZl9zdWJkZXYgKnZpaWZfc2QgPSB2aWlmX2Rldi0+c2Q7DQo+ID4gKwlzdHJ1Y3Qg djRsMl9zdWJkZXYgKnY0bDJfc2QgPSB2aWlmX3NkLT52NGwyX3NkOw0KPiA+ICsJc3RydWN0IHY0 bDJfc3ViZGV2X2ZyYW1lX3NpemVfZW51bSBmc2UgPSB7DQo+ID4gKwkJLmNvZGUgPSB2aWlmX3Nk LT5tYnVzX2NvZGUsDQo+ID4gKwkJLmluZGV4ID0gZnNpemUtPmluZGV4LA0KPiA+ICsJCS53aGlj aCA9IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUsDQo+ID4gKwl9Ow0KPiA+ICsJaW50IHJldDsN Cj4gPiArDQo+ID4gKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHY0bDJfc2QsIHBhZCwgZW51bV9m cmFtZV9zaXplLCBOVUxMLCAmZnNlKTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJcmV0dXJuIHJl dDsNCj4gPiArDQo+ID4gKwlmc2l6ZS0+dHlwZSA9IFY0TDJfRlJNU0laRV9UWVBFX0RJU0NSRVRF Ow0KPiA+ICsJZnNpemUtPmRpc2NyZXRlLndpZHRoID0gZnNlLm1heF93aWR0aDsNCj4gPiArCWZz aXplLT5kaXNjcmV0ZS5oZWlnaHQgPSBmc2UubWF4X2hlaWdodDsNCj4gPiArDQo+ID4gKwlyZXR1 cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2aWlmX2VudW1fZnJhbWVpbnRl cnZhbHMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QNCj4gdjRsMl9mcm1pdmFs ZW51bSAqZml2YWwpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYg PSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KPiA+ICsJc3RydWN0IHZpaWZfc3ViZGV2ICp2aWlmX3Nk ID0gdmlpZl9kZXYtPnNkOw0KPiA+ICsJc3RydWN0IHY0bDJfc3ViZGV2ICp2NGwyX3NkID0gdmlp Zl9zZC0+djRsMl9zZDsNCj4gPiArCXN0cnVjdCB2NGwyX3N1YmRldl9mcmFtZV9pbnRlcnZhbF9l bnVtIGZpZSA9IHsNCj4gPiArCQkuY29kZSA9IHZpaWZfc2QtPm1idXNfY29kZSwNCj4gPiArCQku aW5kZXggPSBmaXZhbC0+aW5kZXgsDQo+ID4gKwkJLndpZHRoID0gZml2YWwtPndpZHRoLA0KPiA+ ICsJCS5oZWlnaHQgPSBmaXZhbC0+aGVpZ2h0LA0KPiA+ICsJCS53aGljaCA9IFY0TDJfU1VCREVW X0ZPUk1BVF9BQ1RJVkUsDQo+ID4gKwl9Ow0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwly ZXQgPSB2NGwyX3N1YmRldl9jYWxsKHY0bDJfc2QsIHBhZCwgZW51bV9mcmFtZV9pbnRlcnZhbCwg TlVMTCwNCj4gJmZpZSk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4g Kw0KPiA+ICsJZml2YWwtPnR5cGUgPSBWNEwyX0ZSTUlWQUxfVFlQRV9ESVNDUkVURTsNCj4gPiAr CWZpdmFsLT5kaXNjcmV0ZSA9IGZpZS5pbnRlcnZhbDsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB2 aWlmX2lvY3RsX29wcyA9IHsNCj4gPiArCS52aWRpb2NfcXVlcnljYXAgPSB2aWlmX3F1ZXJ5Y2Fw LA0KPiA+ICsNCj4gPiArCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IHZpaWZfZW51bV9mbXRf dmlkX2NhcCwNCj4gPiArCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwX21wbGFuZSA9IHZpaWZfdHJ5 X2ZtdF92aWRfY2FwLA0KPiA+ICsJLnZpZGlvY19zX2ZtdF92aWRfY2FwX21wbGFuZSA9IHZpaWZf c19mbXRfdmlkX2NhcCwNCj4gPiArCS52aWRpb2NfZ19mbXRfdmlkX2NhcF9tcGxhbmUgPSB2aWlm X2dfZm10X3ZpZF9jYXAsDQo+ID4gKw0KPiA+ICsJLnZpZGlvY19lbnVtX2lucHV0ID0gdmlpZl9l bnVtX2lucHV0LA0KPiA+ICsJLnZpZGlvY19nX2lucHV0ID0gdmlpZl9nX2lucHV0LA0KPiA+ICsJ LnZpZGlvY19zX2lucHV0ID0gdmlpZl9zX2lucHV0LA0KPiA+ICsNCj4gPiArCS52aWRpb2NfZHZf dGltaW5nc19jYXAgPSB2aWlmX2R2X3RpbWluZ3NfY2FwLA0KPiA+ICsJLnZpZGlvY19lbnVtX2R2 X3RpbWluZ3MgPSB2aWlmX2VudW1fZHZfdGltaW5ncywNCj4gPiArCS52aWRpb2NfZ19kdl90aW1p bmdzID0gdmlpZl9nX2R2X3RpbWluZ3MsDQo+ID4gKwkudmlkaW9jX3NfZHZfdGltaW5ncyA9IHZp aWZfc19kdl90aW1pbmdzLA0KPiA+ICsJLnZpZGlvY19xdWVyeV9kdl90aW1pbmdzID0gdmlpZl9x dWVyeV9kdl90aW1pbmdzLA0KPiA+ICsNCj4gPiArCS52aWRpb2NfZ19lZGlkID0gdmlpZl9nX2Vk aWQsDQo+ID4gKwkudmlkaW9jX3NfZWRpZCA9IHZpaWZfc19lZGlkLA0KPiA+ICsNCj4gPiArCS52 aWRpb2NfZ19wYXJtID0gdmlpZl9nX3Bhcm0sDQo+ID4gKwkudmlkaW9jX3NfcGFybSA9IHZpaWZf c19wYXJtLA0KPiA+ICsNCj4gPiArCS52aWRpb2NfZW51bV9mcmFtZXNpemVzID0gdmlpZl9lbnVt X2ZyYW1lc2l6ZXMsDQo+ID4gKwkudmlkaW9jX2VudW1fZnJhbWVpbnRlcnZhbHMgPSB2aWlmX2Vu dW1fZnJhbWVpbnRlcnZhbHMsDQo+ID4gKw0KPiA+ICsJLnZpZGlvY19yZXFidWZzID0gdmIyX2lv Y3RsX3JlcWJ1ZnMsDQo+ID4gKwkudmlkaW9jX3F1ZXJ5YnVmID0gdmIyX2lvY3RsX3F1ZXJ5YnVm LA0KPiA+ICsJLnZpZGlvY19xYnVmID0gdmIyX2lvY3RsX3FidWYsDQo+ID4gKwkudmlkaW9jX2V4 cGJ1ZiA9IHZiMl9pb2N0bF9leHBidWYsDQo+ID4gKwkudmlkaW9jX2RxYnVmID0gdmIyX2lvY3Rs X2RxYnVmLA0KPiA+ICsJLnZpZGlvY19jcmVhdGVfYnVmcyA9IHZiMl9pb2N0bF9jcmVhdGVfYnVm cywNCj4gPiArCS52aWRpb2NfcHJlcGFyZV9idWYgPSB2YjJfaW9jdGxfcHJlcGFyZV9idWYsDQo+ ID4gKwkudmlkaW9jX3N0cmVhbW9uID0gdmIyX2lvY3RsX3N0cmVhbW9uLA0KPiA+ICsJLnZpZGlv Y19zdHJlYW1vZmYgPSB2YjJfaW9jdGxfc3RyZWFtb2ZmLA0KPiA+ICsNCj4gPiArCS52aWRpb2Nf bG9nX3N0YXR1cyA9IHY0bDJfY3RybF9sb2dfc3RhdHVzLA0KPiA+ICsJLnZpZGlvY19zdWJzY3Jp YmVfZXZlbnQgPSB2NGwyX2N0cmxfc3Vic2NyaWJlX2V2ZW50LA0KPiA+ICsJLnZpZGlvY191bnN1 YnNjcmliZV9ldmVudCA9IHY0bDJfZXZlbnRfdW5zdWJzY3JpYmUsDQo+ID4gK307DQo+ID4gKw0K PiA+ICsvKiAtLS0gRmlsZSBPcGVyYXRpb25zIC0tLSAqLw0KPiA+ICt2b2lkIHZpaWZfaHdfb24o c3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2Rldik7DQo+ID4gK3ZvaWQgdmlpZl9od19vZmYoc3Ry dWN0IHZpaWZfZGV2aWNlICp2aWlmX2Rldik7DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZpaWZf Y2FwdHVyZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3Qgdmlp Zl9kZXZpY2UgKnZpaWZfZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCj4gPiArCWludCByZXQs IG1hc2s7DQo+ID4gKw0KPiA+ICsJcmV0ID0gdjRsMl9maF9vcGVuKGZpbGUpOw0KPiA+ICsJaWYg KHJldCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCXZpaWZfZGV2LT5yYXdwYWNr X21vZGUgPSBIV0RfVklJRl9SQVdQQUNLX0RJU0FCTEU7DQo+ID4gKw0KPiA+ICsJdmlpZl9kZXYt PmlzX3Bvd2VyZWQgPSAxOw0KPiA+ICsNCj4gPiArCW11dGV4X2xvY2soJnZpaWZfZGV2LT5tbG9j ayk7DQo+ID4gKw0KPiA+ICsJLyogSW5pdGlhbGl6ZSBIV0QgZHJpdmVyICovDQo+ID4gKwl2aWlm X2h3X29uKHZpaWZfZGV2KTsNCj4gPiArDQo+ID4gKwkvKiBWU1lOQyBtYXNrIHNldHRpbmcgb2Yg TUFJTiB1bml0ICovDQo+ID4gKwltYXNrID0gMHgwMDA1MDAwMzsNCj4gPiArCWh3ZF9WSUlGX21h aW5fdnN5bmNfc2V0X2lycV9tYXNrKHZpaWZfZGV2LT5jaCwgJm1hc2spOw0KPiA+ICsNCj4gPiAr CS8qIFNUQVRVUyBlcnJvciBtYXNrIHNldHRpbmcodW5tYXNrKSBvZiBNQUlOIHVuaXQgKi8NCj4g PiArCW1hc2sgPSAweDAxMDAwMDAwOw0KPiA+ICsJaHdkX1ZJSUZfbWFpbl9zdGF0dXNfZXJyX3Nl dF9pcnFfbWFzayh2aWlmX2Rldi0+Y2gsICZtYXNrKTsNCj4gPiArDQo+ID4gKwltdXRleF91bmxv Y2soJnZpaWZfZGV2LT5tbG9jayk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGludCB2aWlmX2NhcHR1cmVfcmVsZWFzZShzdHJ1Y3QgZmlsZSAq ZmlsZSkNCj4gPiArew0KPiA+ICsJc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldiA9IHZpZGVv X2RydmRhdGEoZmlsZSk7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCXJldCA9IHZiMl9m b3BfcmVsZWFzZShmaWxlKTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4g PiArDQo+ID4gKwltdXRleF9sb2NrKCZ2aWlmX2Rldi0+bWxvY2spOw0KPiA+ICsJdmlpZl9od19v ZmYodmlpZl9kZXYpOw0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZ2aWlmX2Rldi0+bWxvY2spOw0KPiA+ ICsNCj4gPiArCXZpaWZfZGV2LT5pc19wb3dlcmVkID0gMDsNCj4gPiArDQo+ID4gKwlyZXR1cm4g MDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3Bl cmF0aW9ucyB2aWlmX2ZvcHMgPSB7DQo+ID4gKwkub3duZXIgPSBUSElTX01PRFVMRSwNCj4gPiAr CS5vcGVuID0gdmlpZl9jYXB0dXJlX29wZW4sDQo+ID4gKwkucmVsZWFzZSA9IHZpaWZfY2FwdHVy ZV9yZWxlYXNlLA0KPiA+ICsJLnVubG9ja2VkX2lvY3RsID0gdmlkZW9faW9jdGwyLA0KPiA+ICsJ Lm1tYXAgPSB2YjJfZm9wX21tYXAsDQo+ID4gKwkucG9sbCA9IHZiMl9mb3BfcG9sbCwNCj4gPiAr fTsNCj4gPiArDQo+ID4gKy8qIC0tLS0tIG1lZGlhIGNvbnRyb2wgY2FsbGJhY2tzIC0tLS0tICov DQo+ID4gK3N0YXRpYyBpbnQgdmlpZl9jYXB0dXJlX2xpbmtfdmFsaWRhdGUoc3RydWN0IG1lZGlh X2xpbmsgKmxpbmspDQo+ID4gK3sNCj4gPiArCS8qIFRPRE86IGFkZCBsaW5rIHZhbGlkYXRpb24g YXQgc3RhcnQtc3RyZWFtICovDQo+ID4gKwlwcl9pbmZvKCJ2aWlmX2NhcHR1cmVfbGlua192YWxp ZGF0ZSBjYWxsZWRcbiIpOw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgbWVkaWFfZW50aXR5X29wZXJhdGlvbnMgdmlpZl9tZWRpYV9vcHMg PSB7DQo+ID4gKwkubGlua192YWxpZGF0ZSA9IHZpaWZfY2FwdHVyZV9saW5rX3ZhbGlkYXRlLA0K PiA+ICt9Ow0KPiA+ICsNCj4gPiArLyogLS0tLS0gcmVnaXN0ZXIvcmVtb3ZlIGNhcHR1cmUgZGV2 aWNlIG5vZGUgLS0tLS0gKi8NCj4gPiAraW50IHZpc2NvbnRpX3ZpaWZfY2FwdHVyZV9yZWdpc3Rl cihzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgdjRs Ml9kZXZpY2UgKnY0bDJfZGV2ID0gJnZpaWZfZGV2LT52NGwyX2RldjsNCj4gPiArCXN0cnVjdCB2 aWRlb19kZXZpY2UgKnZkZXYgPSAmdmlpZl9kZXYtPnZkZXY7DQo+ID4gKwlzdHJ1Y3QgdmIyX3F1 ZXVlICpxID0gJnZpaWZfZGV2LT52YjJfdnE7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiAr CS8qIEluaXRpYWxpemUgdmIyIHF1ZXVlLiAqLw0KPiA+ICsJcS0+dHlwZSA9IFY0TDJfQlVGX1RZ UEVfVklERU9fQ0FQVFVSRV9NUExBTkU7DQo+ID4gKwlxLT5pb19tb2RlcyA9IFZCMl9ETUFCVUY7 DQo+ID4gKwlxLT50aW1lc3RhbXBfZmxhZ3MgPSBWNEwyX0JVRl9GTEFHX1RJTUVTVEFNUF9NT05P VE9OSUM7DQo+ID4gKwlxLT5vcHMgPSAmdmlpZl92YjJfb3BzOw0KPiA+ICsJcS0+bWVtX29wcyA9 ICZ2YjJfZG1hX2NvbnRpZ19tZW1vcHM7DQo+ID4gKwlxLT5kcnZfcHJpdiA9IHZpaWZfZGV2Ow0K PiA+ICsJcS0+YnVmX3N0cnVjdF9zaXplID0gc2l6ZW9mKHN0cnVjdCB2aWlmX2J1ZmZlcik7DQo+ ID4gKwlxLT5taW5fYnVmZmVyc19uZWVkZWQgPSAyOw0KPiA+ICsJcS0+bG9jayA9ICZ2aWlmX2Rl di0+bWxvY2s7DQo+ID4gKwlxLT5kZXYgPSB2aWlmX2Rldi0+djRsMl9kZXYuZGV2Ow0KPiA+ICsN Cj4gPiArCXJldCA9IHZiMl9xdWV1ZV9pbml0KHEpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQly ZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCS8qIFJlZ2lzdGVyIHRoZSB2aWRlbyBkZXZpY2UuICov DQo+ID4gKwlzdHJzY3B5KHZkZXYtPm5hbWUsICJ2aWlmX2NhcHR1cmUiLCBzaXplb2YodmRldi0+ bmFtZSkpOw0KPiA+ICsJdmRldi0+djRsMl9kZXYgPSB2NGwyX2RldjsNCj4gPiArCXZkZXYtPmxv Y2sgPSAmdmlpZl9kZXYtPm1sb2NrOw0KPiA+ICsJdmRldi0+cXVldWUgPSAmdmlpZl9kZXYtPnZi Ml92cTsNCj4gPiArCXZkZXYtPmN0cmxfaGFuZGxlciA9IE5VTEw7DQo+ID4gKwl2ZGV2LT5mb3Bz ID0gJnZpaWZfZm9wczsNCj4gPiArCXZkZXYtPmlvY3RsX29wcyA9ICZ2aWlmX2lvY3RsX29wczsN Cj4gPiArCXZkZXYtPmRldmljZV9jYXBzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRV9NUExBTkUg fA0KPiBWNEwyX0NBUF9TVFJFQU1JTkc7DQo+ID4gKwl2ZGV2LT5kZXZpY2VfY2FwcyB8PSBWNEwy X0NBUF9JT19NQzsNCj4gPiArCXZkZXYtPmVudGl0eS5vcHMgPSAmdmlpZl9tZWRpYV9vcHM7DQo+ ID4gKwl2ZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHk7DQo+ID4gKwl2 aWRlb19zZXRfZHJ2ZGF0YSh2ZGV2LCB2aWlmX2Rldik7DQo+ID4gKwl2ZGV2LT52ZmxfZGlyID0g VkZMX0RJUl9SWDsNCj4gPiArCXZpaWZfZGV2LT5jYXB0dXJlX3BhZC5mbGFncyA9IE1FRElBX1BB RF9GTF9TSU5LOw0KPiA+ICsNCj4gPiArCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2ZGV2 LCBWRkxfVFlQRV9WSURFTywgLTEpOw0KPiA+ICsJaWYgKHJldCA8IDApIHsNCj4gPiArCQlkZXZf ZXJyKHY0bDJfZGV2LT5kZXYsICJ2aWRlb19yZWdpc3Rlcl9kZXZpY2UgZmFpbGVkOiAlZFxuIiwN Cj4gcmV0KTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldCA9 IG1lZGlhX2VudGl0eV9wYWRzX2luaXQoJnZkZXYtPmVudGl0eSwgMSwNCj4gJnZpaWZfZGV2LT5j YXB0dXJlX3BhZCk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJdmlkZW9fdW5yZWdpc3Rlcl9k ZXZpY2UodmRldik7DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwly ZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9pZCB2aXNjb250aV92aWlmX2NhcHR1cmVf dW5yZWdpc3RlcihzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2KQ0KPiA+ICt7DQo+ID4gKwlt ZWRpYV9lbnRpdHlfY2xlYW51cCgmdmlpZl9kZXYtPnZkZXYuZW50aXR5KTsNCj4gPiArCXZiMl92 aWRlb191bnJlZ2lzdGVyX2RldmljZSgmdmlpZl9kZXYtPnZkZXYpOw0KPiA+ICt9DQo+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdmlzY29udGkvdmlpZl9pb2N0bC5jDQo+ IGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92aXNjb250aS92aWlmX2lvY3RsLmMNCj4gPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMC4uNzVhNGJiODNmDQo+ID4gLS0t IC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdmlzY29udGkvdmlp Zl9pb2N0bC5jDQo+ID4gQEAgLTAsMCArMSwyODcgQEANCj4gPiArI2luY2x1ZGUgPGxpbnV4L2Rl bGF5Lmg+DQo+ID4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPg0KPiA+ICsjaW5jbHVk ZSA8bWVkaWEvdjRsMi1zdWJkZXYuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlICJ2aWlmLmgiDQo+ ID4gKw0KPiA+ICsjZGVmaW5lIFZJSUZfSVNQX0dVQVJEX1NUQVJUKHZpaWZfZGV2KQ0KPiBcDQo+ ID4gKwlkbw0KPiB7DQo+ICAgICAgICAgICAgICAgICBcDQo+ID4gKw0KPiAJaHdkX1ZJSUZfaXNw X2Rpc2FibGVfcmVnYnVmX2F1dG9fdHJhbnNtaXNzaW9uKHZpaWZfZGV2LT5jaCk7DQo+IFwNCj4g PiArCQluZGVsYXkoNTAwKTsNCj4gXA0KPiA+ICsJCWh3ZF9WSUlGX21haW5fbWFza192bGF0Y2go dmlpZl9kZXYtPmNoLA0KPiBIV0RfVklJRl9FTkFCTEUpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgXA0KPiA+ICsJfSB3aGlsZSAoMCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgVklJRl9JU1BfR1VB UkRfRU5EKHZpaWZfZGV2KQ0KPiBcDQo+ID4gKwlkbw0KPiB7DQo+ICAgICAgICAgICAgICAgICBc DQo+ID4gKwkJaHdkX1ZJSUZfbWFpbl9tYXNrX3ZsYXRjaCh2aWlmX2Rldi0+Y2gsDQo+IEhXRF9W SUlGX0RJU0FCTEUpOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQo+ID4gKwkJaHdkX1ZJSUZf aXNwX3NldF9yZWdidWZfYXV0b190cmFuc21pc3Npb24odmlpZl9kZXYtPmNoLA0KPiBWSUlGX0lT UF9SRUdCVUZfMCwgICAgICAgICBcDQo+ID4gKw0KPiBWSUlGX0lTUF9SRUdCVUZfMCwgMCk7ICAg ICAgICAgICAgICAgICAgIFwNCj4gPiArCX0gd2hpbGUgKDApDQo+ID4gKw0KPiA+ICtpbnQgdmlp Zl9sMV9zZXRfaW5wdXRfbW9kZShzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2LA0KPiA+ICsJ CQkgICBzdHJ1Y3QgdmlpZl9sMV9pbnB1dF9tb2RlX2NvbmZpZyAqaW5wdXRfbW9kZSkNCj4gPiAr ew0KPiA+ICsJaW50IHJldDsNCj4gPiArCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7DQo+ID4gKw0K PiA+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJnZpaWZfZGV2LT5sb2NrLCBpcnFmbGFncyk7DQo+ID4g KwlWSUlGX0lTUF9HVUFSRF9TVEFSVCh2aWlmX2Rldik7DQo+ID4gKwkvKiBTRFIgaW5wdXQgaXMg bm90IHN1cHBvcnRlZCAqLw0KPiA+ICsJcmV0ID0gaHdkX1ZJSUZfbDFfc2V0X2lucHV0X21vZGUo dmlpZl9kZXYtPmNoLCBpbnB1dF9tb2RlLT5tb2RlLA0KPiBpbnB1dF9tb2RlLT5kZXB0aCwNCj4g PiArCQkJCQkgaW5wdXRfbW9kZS0+cmF3X2NvbG9yX2ZpbHRlciwNCj4gTlVMTCk7DQo+ID4gKwlW SUlGX0lTUF9HVUFSRF9FTkQodmlpZl9kZXYpOw0KPiA+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmdmlpZl9kZXYtPmxvY2ssIGlycWZsYWdzKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcmV0Ow0K PiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQgdmlpZl9sMV9zZXRfbWFpbl9wcm9jZXNzKHN0cnVjdCB2 aWlmX2RldmljZSAqdmlpZl9kZXYsIHN0cnVjdA0KPiB2aWlmX2wxX21haW5fcHJvY2Vzc19jb25m aWcgKm1wcm8pDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBod2RfdmlpZl9sMV9jb2xvcl9tYXRyaXhf Y29ycmVjdGlvbiBjb2xvcl9tYXRyaXg7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsJdW5zaWduZWQg bG9uZyBpcnFmbGFnczsNCj4gPiArDQo+ID4gKwlpZiAobXByby0+cGFyYW0pIHsNCj4gPiArCQlp ZiAoY29weV9mcm9tX3VzZXIoJmNvbG9yX21hdHJpeCwgKHZvaWQgX191c2VyDQo+ICopbXByby0+ cGFyYW0sDQo+ID4gKwkJCQkgICBzaXplb2Yoc3RydWN0DQo+IGh3ZF92aWlmX2wxX2NvbG9yX21h dHJpeF9jb3JyZWN0aW9uKSkpDQo+ID4gKwkJCXJldHVybiAtRUZBVUxUOw0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCXNwaW5fbG9ja19pcnFzYXZlKCZ2aWlmX2Rldi0+bG9jaywgaXJxZmxhZ3MpOw0K PiA+ICsJVklJRl9JU1BfR1VBUkRfU1RBUlQodmlpZl9kZXYpOw0KPiA+ICsJcmV0ID0gaHdkX1ZJ SUZfbDFfc2V0X21haW5fcHJvY2Vzcyh2aWlmX2Rldi0+Y2gsDQo+IFZJSUZfSVNQX1JFR0JVRl8w LCBtcHJvLT5kZW1vc2FpY19tb2RlLA0KPiA+ICsJCQkJCSAgIG1wcm8tPmRhbXBfbHNic2VsLA0K PiBtcHJvLT5wYXJhbSA/ICZjb2xvcl9tYXRyaXggOiBOVUxMLA0KPiA+ICsJCQkJCSAgIG1wcm8t PmRzdF9tYXh2YWwpOw0KPiA+ICsJVklJRl9JU1BfR1VBUkRfRU5EKHZpaWZfZGV2KTsNCj4gPiAr CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpaWZfZGV2LT5sb2NrLCBpcnFmbGFncyk7DQo+ID4g Kw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAraW50IHZpaWZfbDFfc2V0 X2JsYWNrX2xldmVsX2NvcnJlY3Rpb24oc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldiwNCj4g PiArCQkJCSAgICAgICBzdHJ1Y3QNCj4gdmlpZl9sMV9ibGFja19sZXZlbF9jb3JyZWN0aW9uX2Nv bmZpZyAqYmxjKQ0KPiA+ICt7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsJdW5zaWduZWQgbG9uZyBp cnFmbGFnczsNCj4gPiArDQo+ID4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmdmlpZl9kZXYtPmxvY2ss IGlycWZsYWdzKTsNCj4gPiArCVZJSUZfSVNQX0dVQVJEX1NUQVJUKHZpaWZfZGV2KTsNCj4gPiAr CXJldCA9IGh3ZF9WSUlGX2wxX3NldF9ibGFja19sZXZlbF9jb3JyZWN0aW9uKA0KPiA+ICsJCXZp aWZfZGV2LT5jaCwgVklJRl9JU1BfUkVHQlVGXzAsIChzdHJ1Y3QNCj4gaHdkX3ZpaWZfbDFfYmxh Y2tfbGV2ZWxfY29ycmVjdGlvbiAqKWJsYyk7DQo+ID4gKwlWSUlGX0lTUF9HVUFSRF9FTkQodmlp Zl9kZXYpOw0KPiA+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlpZl9kZXYtPmxvY2ssIGly cWZsYWdzKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtp bnQgdmlpZl9sMV9zZXRfYXdiKHN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYsIHN0cnVjdCB2 aWlmX2wxX2F3Yl9jb25maWcNCj4gKmwxX2F3YikNCj4gPiArew0KPiA+ICsJc3RydWN0IGh3ZF92 aWlmX2wxX2F3YiBwYXJhbTsNCj4gPiArCWludCByZXQ7DQo+ID4gKwl1bnNpZ25lZCBsb25nIGly cWZsYWdzOw0KPiA+ICsNCj4gPiArCWlmIChsMV9hd2ItPnBhcmFtKSB7DQo+ID4gKwkJaWYgKGNv cHlfZnJvbV91c2VyKCZwYXJhbSwgKHZvaWQgX191c2VyICopbDFfYXdiLT5wYXJhbSwNCj4gPiAr CQkJCSAgIHNpemVvZihzdHJ1Y3QgaHdkX3ZpaWZfbDFfYXdiKSkpDQo+ID4gKwkJCXJldHVybiAt RUZBVUxUOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXNwaW5fbG9ja19pcnFzYXZlKCZ2aWlmX2Rl di0+bG9jaywgaXJxZmxhZ3MpOw0KPiA+ICsJVklJRl9JU1BfR1VBUkRfU1RBUlQodmlpZl9kZXYp Ow0KPiA+ICsJcmV0ID0gaHdkX1ZJSUZfbDFfc2V0X2F3Yih2aWlmX2Rldi0+Y2gsIFZJSUZfSVNQ X1JFR0JVRl8wLA0KPiBsMV9hd2ItPnBhcmFtID8gJnBhcmFtIDogTlVMTCwNCj4gPiArCQkJCSAg bDFfYXdiLT5hd2hiX3dibXJnLA0KPiBsMV9hd2ItPmF3aGJfd2JtZ2csIGwxX2F3Yi0+YXdoYl93 Ym1iZyk7DQo+ID4gKwlWSUlGX0lTUF9HVUFSRF9FTkQodmlpZl9kZXYpOw0KPiA+ICsJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmdmlpZl9kZXYtPmxvY2ssIGlycWZsYWdzKTsNCj4gPiArDQo+ID4g KwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQgdmlpZl9sMV9zZXRfaGRyYyhz dHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2LCBzdHJ1Y3QgdmlpZl9sMV9oZHJjX2NvbmZpZw0K PiAqaGRyYykNCj4gPiArew0KPiA+ICsJc3RydWN0IGh3ZF92aWlmX2wxX2hkcmMgcGFyYW07DQo+ ID4gKwlpbnQgcmV0Ow0KPiA+ICsJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsNCj4gPiArDQo+ID4g KwlpZiAoaGRyYy0+cGFyYW0pIHsNCj4gPiArCQlpZiAoY29weV9mcm9tX3VzZXIoJnBhcmFtLCAo dm9pZCBfX3VzZXIgKiloZHJjLT5wYXJhbSwNCj4gPiArCQkJCSAgIHNpemVvZihzdHJ1Y3QgaHdk X3ZpaWZfbDFfaGRyYykpKQ0KPiA+ICsJCQlyZXR1cm4gLUVGQVVMVDsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmdmlpZl9kZXYtPmxvY2ssIGlycWZsYWdzKTsNCj4g PiArCVZJSUZfSVNQX0dVQVJEX1NUQVJUKHZpaWZfZGV2KTsNCj4gPiArCXJldCA9IGh3ZF9WSUlG X2wxX3NldF9oZHJjKHZpaWZfZGV2LT5jaCwgVklJRl9JU1BfUkVHQlVGXzAsDQo+IGhkcmMtPnBh cmFtID8gJnBhcmFtIDogTlVMTCwNCj4gPiArCQkJCSAgIGhkcmMtPmhkcmNfdGhyX3NmdF9hbXQp Ow0KPiA+ICsJVklJRl9JU1BfR1VBUkRfRU5EKHZpaWZfZGV2KTsNCj4gPiArCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJnZpaWZfZGV2LT5sb2NrLCBpcnFmbGFncyk7DQo+ID4gKw0KPiA+ICsJcmV0 dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAraW50IHZpaWZfbDFfc2V0X2ltZ19xdWFsaXR5 X2FkanVzdG1lbnQoc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldiwNCj4gPiArCQkJCSAgICAg ICBzdHJ1Y3QNCj4gdmlpZl9sMV9pbWdfcXVhbGl0eV9hZGp1c3RtZW50X2NvbmZpZyAqaW1nX3F1 YWxpdHkpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB2aWlmX2wxX25vbmxpbmVhcl9jb250cmFzdCBu b25saW5lYXI7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9sMV9sdW1fbm9pc2VfcmVkdWN0aW9uIGx1bV9u b2lzZTsNCj4gPiArCXN0cnVjdCB2aWlmX2wxX2VkZ2VfZW5oYW5jZW1lbnQgZWRnZV9lbmg7DQo+ ID4gKwlzdHJ1Y3QgdmlpZl9sMV91dl9zdXBwcmVzc2lvbiB1djsNCj4gPiArCXN0cnVjdCB2aWlm X2wxX2NvcmluZ19zdXBwcmVzc2lvbiBjb3Jpbmc7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9sMV9lZGdl X3N1cHByZXNzaW9uIGVkZ2Vfc3VwOw0KPiA+ICsJc3RydWN0IHZpaWZfbDFfY29sb3JfbGV2ZWwg Y29sb3I7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsNCj4g PiArDQo+ID4gKwlpZiAoaW1nX3F1YWxpdHktPm5vbmxpbmVhcl9jb250cmFzdCkgew0KPiA+ICsJ CWlmIChjb3B5X2Zyb21fdXNlcigmbm9ubGluZWFyLCAodm9pZCBfX3VzZXINCj4gKilpbWdfcXVh bGl0eS0+bm9ubGluZWFyX2NvbnRyYXN0LA0KPiA+ICsJCQkJICAgc2l6ZW9mKHN0cnVjdCB2aWlm X2wxX25vbmxpbmVhcl9jb250cmFzdCkpKQ0KPiA+ICsJCQlyZXR1cm4gLUVGQVVMVDsNCj4gPiAr CQlpbWdfcXVhbGl0eS0+bm9ubGluZWFyX2NvbnRyYXN0ID0gJm5vbmxpbmVhcjsNCj4gPiArCX0N Cj4gPiArCWlmIChpbWdfcXVhbGl0eS0+bHVtX25vaXNlX3JlZHVjdGlvbikgew0KPiA+ICsJCWlm IChjb3B5X2Zyb21fdXNlcigmbHVtX25vaXNlLCAodm9pZCBfX3VzZXINCj4gKilpbWdfcXVhbGl0 eS0+bHVtX25vaXNlX3JlZHVjdGlvbiwNCj4gPiArCQkJCSAgIHNpemVvZihzdHJ1Y3QNCj4gdmlp Zl9sMV9sdW1fbm9pc2VfcmVkdWN0aW9uKSkpDQo+ID4gKwkJCXJldHVybiAtRUZBVUxUOw0KPiA+ ICsJCWltZ19xdWFsaXR5LT5sdW1fbm9pc2VfcmVkdWN0aW9uID0gJmx1bV9ub2lzZTsNCj4gPiAr CX0NCj4gPiArCWlmIChpbWdfcXVhbGl0eS0+ZWRnZV9lbmhhbmNlbWVudCkgew0KPiA+ICsJCWlm IChjb3B5X2Zyb21fdXNlcigmZWRnZV9lbmgsICh2b2lkIF9fdXNlcg0KPiAqKWltZ19xdWFsaXR5 LT5lZGdlX2VuaGFuY2VtZW50LA0KPiA+ICsJCQkJICAgc2l6ZW9mKHN0cnVjdCB2aWlmX2wxX2Vk Z2VfZW5oYW5jZW1lbnQpKSkNCj4gPiArCQkJcmV0dXJuIC1FRkFVTFQ7DQo+ID4gKwkJaW1nX3F1 YWxpdHktPmVkZ2VfZW5oYW5jZW1lbnQgPSAmZWRnZV9lbmg7DQo+ID4gKwl9DQo+ID4gKwlpZiAo aW1nX3F1YWxpdHktPnV2X3N1cHByZXNzaW9uKSB7DQo+ID4gKwkJaWYgKGNvcHlfZnJvbV91c2Vy KCZ1diwgKHZvaWQgX191c2VyDQo+ICopaW1nX3F1YWxpdHktPnV2X3N1cHByZXNzaW9uLA0KPiA+ ICsJCQkJICAgc2l6ZW9mKHN0cnVjdCB2aWlmX2wxX3V2X3N1cHByZXNzaW9uKSkpDQo+ID4gKwkJ CXJldHVybiAtRUZBVUxUOw0KPiA+ICsJCWltZ19xdWFsaXR5LT51dl9zdXBwcmVzc2lvbiA9ICZ1 djsNCj4gPiArCX0NCj4gPiArCWlmIChpbWdfcXVhbGl0eS0+Y29yaW5nX3N1cHByZXNzaW9uKSB7 DQo+ID4gKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZjb3JpbmcsICh2b2lkIF9fdXNlcg0KPiAqKWlt Z19xdWFsaXR5LT5jb3Jpbmdfc3VwcHJlc3Npb24sDQo+ID4gKwkJCQkgICBzaXplb2Yoc3RydWN0 IHZpaWZfbDFfY29yaW5nX3N1cHByZXNzaW9uKSkpDQo+ID4gKwkJCXJldHVybiAtRUZBVUxUOw0K PiA+ICsJCWltZ19xdWFsaXR5LT5jb3Jpbmdfc3VwcHJlc3Npb24gPSAmY29yaW5nOw0KPiA+ICsJ fQ0KPiA+ICsJaWYgKGltZ19xdWFsaXR5LT5lZGdlX3N1cHByZXNzaW9uKSB7DQo+ID4gKwkJaWYg KGNvcHlfZnJvbV91c2VyKCZlZGdlX3N1cCwgKHZvaWQgX191c2VyDQo+ICopaW1nX3F1YWxpdHkt PmVkZ2Vfc3VwcHJlc3Npb24sDQo+ID4gKwkJCQkgICBzaXplb2Yoc3RydWN0IHZpaWZfbDFfZWRn ZV9zdXBwcmVzc2lvbikpKQ0KPiA+ICsJCQlyZXR1cm4gLUVGQVVMVDsNCj4gPiArCQlpbWdfcXVh bGl0eS0+ZWRnZV9zdXBwcmVzc2lvbiA9ICZlZGdlX3N1cDsNCj4gPiArCX0NCj4gPiArCWlmIChp bWdfcXVhbGl0eS0+Y29sb3JfbGV2ZWwpIHsNCj4gPiArCQlpZiAoY29weV9mcm9tX3VzZXIoJmNv bG9yLCAodm9pZCBfX3VzZXINCj4gKilpbWdfcXVhbGl0eS0+Y29sb3JfbGV2ZWwsDQo+ID4gKwkJ CQkgICBzaXplb2Yoc3RydWN0IHZpaWZfbDFfY29sb3JfbGV2ZWwpKSkNCj4gPiArCQkJcmV0dXJu IC1FRkFVTFQ7DQo+ID4gKwkJaW1nX3F1YWxpdHktPmNvbG9yX2xldmVsID0gJmNvbG9yOw0KPiA+ ICsJfQ0KPiA+ICsNCj4gPiArCXNwaW5fbG9ja19pcnFzYXZlKCZ2aWlmX2Rldi0+bG9jaywgaXJx ZmxhZ3MpOw0KPiA+ICsJVklJRl9JU1BfR1VBUkRfU1RBUlQodmlpZl9kZXYpOw0KPiA+ICsJcmV0 ID0gaHdkX1ZJSUZfbDFfc2V0X2ltZ19xdWFsaXR5X2FkanVzdG1lbnQoDQo+ID4gKwkJdmlpZl9k ZXYtPmNoLCBWSUlGX0lTUF9SRUdCVUZfMCwNCj4gPiArCQkoc3RydWN0IGh3ZF92aWlmX2wxX2lt Z19xdWFsaXR5X2FkanVzdG1lbnQgKilpbWdfcXVhbGl0eSk7DQo+ID4gKwlWSUlGX0lTUF9HVUFS RF9FTkQodmlpZl9kZXYpOw0KPiA+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlpZl9kZXYt PmxvY2ssIGlycWZsYWdzKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsjZGVmaW5lIFZJU0NPTlRJX1ZJSUZfRFBDX1RBQkxFX1NJWkVfTUlOIDEwMjQNCj4g PiArI2RlZmluZSBWSVNDT05USV9WSUlGX0RQQ19UQUJMRV9TSVpFX01BWCA4MTkyDQo+ID4gK2lu dCB2aWlmX2wyX3NldF91bmRpc3Qoc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2Rldiwgc3RydWN0 DQo+IHZpaWZfbDJfdW5kaXN0X2NvbmZpZyAqdW5kaXN0KQ0KPiA+ICt7DQo+ID4gKwlpbnQgcmV0 Ow0KPiA+ICsJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsNCj4gPiArCXVpbnRwdHJfdCB0YWJsZV93 cml0ZV9nX3BhZGRyID0gMDsNCj4gPiArCXVpbnRwdHJfdCB0YWJsZV9yZWFkX2JfcGFkZHIgPSAw Ow0KPiA+ICsJdWludHB0cl90IHRhYmxlX3JlYWRfZ19wYWRkciA9IDA7DQo+ID4gKwl1aW50cHRy X3QgdGFibGVfcmVhZF9yX3BhZGRyID0gMDsNCj4gPiArDQo+ID4gKwlpZiAoKHVuZGlzdC0+c2l6 ZSAmJiAodW5kaXN0LT5zaXplIDwNCj4gVklTQ09OVElfVklJRl9EUENfVEFCTEVfU0laRV9NSU4p KSB8fA0KPiA+ICsJICAgICh1bmRpc3QtPnNpemUgPiBWSVNDT05USV9WSUlGX0RQQ19UQUJMRV9T SVpFX01BWCkpDQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJaWYgKHVuZGlz dC0+d3JpdGVfZykgew0KPiA+ICsJCWlmIChjb3B5X2Zyb21fdXNlcih2aWlmX2Rldi0+dGFibGVf dmFkZHItPnVuZGlzdF93cml0ZV9nLA0KPiA+ICsJCQkJICAgKHZvaWQgX191c2VyICopdW5kaXN0 LT53cml0ZV9nLA0KPiB1bmRpc3QtPnNpemUpKQ0KPiA+ICsJCQlyZXR1cm4gLUVGQVVMVDsNCj4g PiArCQl0YWJsZV93cml0ZV9nX3BhZGRyID0NCj4gKHVpbnRwdHJfdCl2aWlmX2Rldi0+dGFibGVf cGFkZHItPnVuZGlzdF93cml0ZV9nOw0KPiA+ICsJfQ0KPiA+ICsJaWYgKHVuZGlzdC0+cmVhZF9i KSB7DQo+ID4gKwkJaWYgKGNvcHlfZnJvbV91c2VyKHZpaWZfZGV2LT50YWJsZV92YWRkci0+dW5k aXN0X3JlYWRfYiwNCj4gPiArCQkJCSAgICh2b2lkIF9fdXNlciAqKXVuZGlzdC0+cmVhZF9iLA0K PiB1bmRpc3QtPnNpemUpKQ0KPiA+ICsJCQlyZXR1cm4gLUVGQVVMVDsNCj4gPiArCQl0YWJsZV9y ZWFkX2JfcGFkZHIgPQ0KPiAodWludHB0cl90KXZpaWZfZGV2LT50YWJsZV9wYWRkci0+dW5kaXN0 X3JlYWRfYjsNCj4gPiArCX0NCj4gPiArCWlmICh1bmRpc3QtPnJlYWRfZykgew0KPiA+ICsJCWlm IChjb3B5X2Zyb21fdXNlcih2aWlmX2Rldi0+dGFibGVfdmFkZHItPnVuZGlzdF9yZWFkX2csDQo+ ID4gKwkJCQkgICAodm9pZCBfX3VzZXIgKil1bmRpc3QtPnJlYWRfZywNCj4gdW5kaXN0LT5zaXpl KSkNCj4gPiArCQkJcmV0dXJuIC1FRkFVTFQ7DQo+ID4gKwkJdGFibGVfcmVhZF9nX3BhZGRyID0N Cj4gKHVpbnRwdHJfdCl2aWlmX2Rldi0+dGFibGVfcGFkZHItPnVuZGlzdF9yZWFkX2c7DQo+ID4g Kwl9DQo+ID4gKwlpZiAodW5kaXN0LT5yZWFkX3IpIHsNCj4gPiArCQlpZiAoY29weV9mcm9tX3Vz ZXIodmlpZl9kZXYtPnRhYmxlX3ZhZGRyLT51bmRpc3RfcmVhZF9yLA0KPiA+ICsJCQkJICAgKHZv aWQgX191c2VyICopdW5kaXN0LT5yZWFkX3IsDQo+IHVuZGlzdC0+c2l6ZSkpDQo+ID4gKwkJCXJl dHVybiAtRUZBVUxUOw0KPiA+ICsJCXRhYmxlX3JlYWRfcl9wYWRkciA9DQo+ICh1aW50cHRyX3Qp dmlpZl9kZXYtPnRhYmxlX3BhZGRyLT51bmRpc3RfcmVhZF9yOw0KPiA+ICsJfQ0KPiA+ICsNCj4g PiArCXNwaW5fbG9ja19pcnFzYXZlKCZ2aWlmX2Rldi0+bG9jaywgaXJxZmxhZ3MpOw0KPiA+ICsJ VklJRl9JU1BfR1VBUkRfU1RBUlQodmlpZl9kZXYpOw0KPiA+ICsJcmV0ID0gaHdkX1ZJSUZfbDJf c2V0X3VuZGlzdF90YWJsZV90cmFuc21pc3Npb24odmlpZl9kZXYtPmNoLA0KPiB0YWJsZV93cml0 ZV9nX3BhZGRyLA0KPiA+ICsJCQkJCQkJdGFibGVfcmVhZF9iX3BhZGRyLA0KPiB0YWJsZV9yZWFk X2dfcGFkZHIsDQo+ID4gKwkJCQkJCQl0YWJsZV9yZWFkX3JfcGFkZHIsDQo+IHVuZGlzdC0+c2l6 ZSk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2Vycih2aWlmX2Rldi0+ZGV2LCAibDJf c2V0X3VuZGlzdF90YWJsZV90cmFuc21pc3Npb24NCj4gZXJyb3IuICVkXG4iLCByZXQpOw0KPiA+ ICsJCWdvdG8gZXJyOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldCA9IGh3ZF9WSUlGX2wyX3Nl dF91bmRpc3QodmlpZl9kZXYtPmNoLCBWSUlGX0lTUF9SRUdCVUZfMCwNCj4gPiArCQkJCSAgICAg KHN0cnVjdCBod2RfdmlpZl9sMl91bmRpc3QNCj4gKikmdW5kaXN0LT5wYXJhbSk7DQo+ID4gK2Vy cjoNCj4gPiArCVZJSUZfSVNQX0dVQVJEX0VORCh2aWlmX2Rldik7DQo+ID4gKwlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZ2aWlmX2Rldi0+bG9jaywgaXJxZmxhZ3MpOw0KPiA+ICsJcmV0dXJuIHJl dDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAraW50IHZpaWZfbDJfc2V0X3JvaShzdHJ1Y3QgdmlpZl9k ZXZpY2UgKnZpaWZfZGV2LCBzdHJ1Y3QgdmlpZl9sMl9yb2lfY29uZmlnICpyb2kpDQo+ID4gK3sN Cj4gPiArCWludCByZXQ7DQo+ID4gKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOw0KPiA+ICsNCj4g PiArCXNwaW5fbG9ja19pcnFzYXZlKCZ2aWlmX2Rldi0+bG9jaywgaXJxZmxhZ3MpOw0KPiA+ICsJ VklJRl9JU1BfR1VBUkRfU1RBUlQodmlpZl9kZXYpOw0KPiA+ICsJcmV0ID0gaHdkX1ZJSUZfbDJf c2V0X3JvaSh2aWlmX2Rldi0+Y2gsIFZJSUZfSVNQX1JFR0JVRl8wLCAoc3RydWN0DQo+IGh3ZF92 aWlmX2wyX3JvaSAqKXJvaSk7DQo+ID4gKwlWSUlGX0lTUF9HVUFSRF9FTkQodmlpZl9kZXYpOw0K PiA+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlpZl9kZXYtPmxvY2ssIGlycWZsYWdzKTsN Cj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK2ludCB2aWlmX2NzaTJyeF9n ZXRfY2FsaWJyYXRpb25fc3RhdHVzKA0KPiA+ICsJc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2Rl diwNCj4gPiArCXN0cnVjdCB2aWlmX2NzaTJyeF9kcGh5X2NhbGlicmF0aW9uX3N0YXR1cyAqY2Fs aWJyYXRpb25fc3RhdHVzKQ0KPiA+ICt7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCWlm ICghdmIyX2lzX3N0cmVhbWluZygmdmlpZl9kZXYtPnZiMl92cSkpDQo+ID4gKwkJcmV0dXJuIC1F SU87DQo+ID4gKw0KPiA+ICsJcmV0ID0gaHdkX1ZJSUZfY3NpMnJ4X2dldF9jYWxpYnJhdGlvbl9z dGF0dXMoDQo+ID4gKwkJdmlpZl9kZXYtPmNoLCAoc3RydWN0IGh3ZF92aWlmX2NzaTJyeF9kcGh5 X2NhbGlicmF0aW9uX3N0YXR1cw0KPiAqKWNhbGlicmF0aW9uX3N0YXR1cyk7DQo+ID4gKw0KPiA+ ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAraW50IHZpaWZfY3NpMnJ4X2dldF9l cnJfc3RhdHVzKHN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYsIHN0cnVjdA0KPiB2aWlmX2Nz aTJyeF9lcnJfc3RhdHVzICpjc2lfZXJyKQ0KPiA+ICt7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsN Cj4gPiArCWlmICghdmIyX2lzX3N0cmVhbWluZygmdmlpZl9kZXYtPnZiMl92cSkpDQo+ID4gKwkJ cmV0dXJuIC1FSU87DQo+ID4gKw0KPiA+ICsJcmV0ID0gaHdkX1ZJSUZfY3NpMnJ4X2dldF9lcnJf c3RhdHVzKHZpaWZfZGV2LT5jaCwNCj4gJmNzaV9lcnItPmVycl9waHlfZmF0YWwsDQo+ID4gKwkJ CQkJICAgICAmY3NpX2Vyci0+ZXJyX3BrdF9mYXRhbCwNCj4gJmNzaV9lcnItPmVycl9mcmFtZV9m YXRhbCwNCj4gPiArCQkJCQkgICAgICZjc2lfZXJyLT5lcnJfcGh5LA0KPiAmY3NpX2Vyci0+ZXJy X3BrdCwNCj4gPiArCQkJCQkgICAgICZjc2lfZXJyLT5lcnJfbGluZSk7DQo+ID4gKw0KPiA+ICsJ cmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRm b3JtL3Zpc2NvbnRpL3ZpaWZfaXNwLmMNCj4gYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Zpc2Nv bnRpL3ZpaWZfaXNwLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAw MDAwMC4uZTI3MWRmZjE1DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbWVk aWEvcGxhdGZvcm0vdmlzY29udGkvdmlpZl9pc3AuYw0KPiA+IEBAIC0wLDAgKzEsOTY4IEBADQo+ ID4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPg0KPiA+ICsjaW5jbHVkZSA8bWVkaWEv djRsMi1zdWJkZXYuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlICJ2aWlmLmgiDQo+ID4gKw0KPiA+ ICsvKiAtLS0tLSBzdXBwb3J0ZWQgTUJVUyBmb3JtYXRzIC0tLS0tICovDQo+ID4gK3N0cnVjdCB2 aXNjb250aV9tYnVzX2Zvcm1hdCB7DQo+ID4gKwl1bnNpZ25lZCBpbnQgY29kZTsNCj4gPiArCXVu c2lnbmVkIGludCBicHA7DQo+ID4gKwlpbnQgcmdiX291dDsNCj4gPiArfSBzdGF0aWMgdmlzY29u dGlfbWJ1c19mb3JtYXRzW10gPSB7DQo+ID4gKwl7IC5jb2RlID0gTUVESUFfQlVTX0ZNVF9SR0I4 ODhfMVgyNCwgLmJwcCA9IDI0LCAucmdiX291dCA9IDEgfSwNCj4gPiArCXsgLmNvZGUgPSBNRURJ QV9CVVNfRk1UX1VZVlk4XzFYMTYsIC5icHAgPSAxNiwgLnJnYl9vdXQgPSAwIH0sDQo+ID4gKwl7 IC5jb2RlID0gTUVESUFfQlVTX0ZNVF9VWVZZMTBfMVgyMCwgLmJwcCA9IDIwLCAucmdiX291dCA9 IDAgfSwNCj4gPiArCXsgLmNvZGUgPSBNRURJQV9CVVNfRk1UX1JHQjU2NV8xWDE2LCAuYnBwID0g MTYsIC5yZ2Jfb3V0ID0gMSB9LA0KPiA+ICsJeyAuY29kZSA9IE1FRElBX0JVU19GTVRfU0JHR1I4 XzFYOCwgLmJwcCA9IDgsIC5yZ2Jfb3V0ID0gMCB9LA0KPiA+ICsJeyAuY29kZSA9IE1FRElBX0JV U19GTVRfU0dCUkc4XzFYOCwgLmJwcCA9IDgsIC5yZ2Jfb3V0ID0gMCB9LA0KPiA+ICsJeyAuY29k ZSA9IE1FRElBX0JVU19GTVRfU0dSQkc4XzFYOCwgLmJwcCA9IDgsIC5yZ2Jfb3V0ID0gMCB9LA0K PiA+ICsJeyAuY29kZSA9IE1FRElBX0JVU19GTVRfU1JHR0I4XzFYOCwgLmJwcCA9IDgsIC5yZ2Jf b3V0ID0gMCB9LA0KPiA+ICsJeyAuY29kZSA9IE1FRElBX0JVU19GTVRfU1JHR0IxMF8xWDEwLCAu YnBwID0gMTAsIC5yZ2Jfb3V0ID0gMCB9LA0KPiA+ICsJeyAuY29kZSA9IE1FRElBX0JVU19GTVRf U0dSQkcxMF8xWDEwLCAuYnBwID0gMTAsIC5yZ2Jfb3V0ID0gMCB9LA0KPiA+ICsJeyAuY29kZSA9 IE1FRElBX0JVU19GTVRfU0dCUkcxMF8xWDEwLCAuYnBwID0gMTAsIC5yZ2Jfb3V0ID0gMCB9LA0K PiA+ICsJeyAuY29kZSA9IE1FRElBX0JVU19GTVRfU0JHR1IxMF8xWDEwLCAuYnBwID0gMTAsIC5y Z2Jfb3V0ID0gMCB9LA0KPiA+ICsJeyAuY29kZSA9IE1FRElBX0JVU19GTVRfU1JHR0IxMl8xWDEy LCAuYnBwID0gMTIsIC5yZ2Jfb3V0ID0gMCB9LA0KPiA+ICsJeyAuY29kZSA9IE1FRElBX0JVU19G TVRfU0dSQkcxMl8xWDEyLCAuYnBwID0gMTIsIC5yZ2Jfb3V0ID0gMCB9LA0KPiA+ICsJeyAuY29k ZSA9IE1FRElBX0JVU19GTVRfU0dCUkcxMl8xWDEyLCAuYnBwID0gMTIsIC5yZ2Jfb3V0ID0gMCB9 LA0KPiA+ICsJeyAuY29kZSA9IE1FRElBX0JVU19GTVRfU0JHR1IxMl8xWDEyLCAuYnBwID0gMTIs IC5yZ2Jfb3V0ID0gMCB9LA0KPiA+ICsJeyAuY29kZSA9IE1FRElBX0JVU19GTVRfU1JHR0IxNF8x WDE0LCAuYnBwID0gMTQsIC5yZ2Jfb3V0ID0gMCB9LA0KPiA+ICsJeyAuY29kZSA9IE1FRElBX0JV U19GTVRfU0dSQkcxNF8xWDE0LCAuYnBwID0gMTQsIC5yZ2Jfb3V0ID0gMCB9LA0KPiA+ICsJeyAu Y29kZSA9IE1FRElBX0JVU19GTVRfU0dCUkcxNF8xWDE0LCAuYnBwID0gMTQsIC5yZ2Jfb3V0ID0g MCB9LA0KPiA+ICsJeyAuY29kZSA9IE1FRElBX0JVU19GTVRfU0JHR1IxNF8xWDE0LCAuYnBwID0g MTQsIC5yZ2Jfb3V0ID0gMCB9LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2aWlm X2dldF9tYnVzX3JnYl9vdXQodW5zaWduZWQgaW50IG1idXNfY29kZSkNCj4gPiArew0KPiA+ICsJ aW50IGk7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodmlzY29udGlf bWJ1c19mb3JtYXRzKTsgaSsrKQ0KPiA+ICsJCWlmICh2aXNjb250aV9tYnVzX2Zvcm1hdHNbaV0u Y29kZSA9PSBtYnVzX2NvZGUpDQo+ID4gKwkJCXJldHVybiB2aXNjb250aV9tYnVzX2Zvcm1hdHNb aV0ucmdiX291dDsNCj4gPiArDQo+ID4gKwkvKiBZVVYgaW50ZXJtZWRpYXRlIGNvZGUgYnkgZGVm YXVsdCAqLw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB1bnNp Z25lZCBpbnQgdmlpZl9nZXRfbWJ1c19icHAodW5zaWduZWQgaW50IG1idXNfY29kZSkNCj4gPiAr ew0KPiA+ICsJaW50IGk7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo dmlzY29udGlfbWJ1c19mb3JtYXRzKTsgaSsrKQ0KPiA+ICsJCWlmICh2aXNjb250aV9tYnVzX2Zv cm1hdHNbaV0uY29kZSA9PSBtYnVzX2NvZGUpDQo+ID4gKwkJCXJldHVybiB2aXNjb250aV9tYnVz X2Zvcm1hdHNbaV0uYnBwOw0KPiA+ICsNCj4gPiArCS8qIGRlZmF1bHQgYnBwIHZhbHVlICovDQo+ ID4gKwlyZXR1cm4gMjQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBib29sIHZpaWZfaXNf dmFsaWRfbWJ1c19jb2RlKHVuc2lnbmVkIGludCBtYnVzX2NvZGUpDQo+ID4gK3sNCj4gPiArCWlu dCBpOw0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZpc2NvbnRpX21i dXNfZm9ybWF0cyk7IGkrKykNCj4gPiArCQlpZiAodmlzY29udGlfbWJ1c19mb3JtYXRzW2ldLmNv ZGUgPT0gbWJ1c19jb2RlKQ0KPiA+ICsJCQlyZXR1cm4gdHJ1ZTsNCj4gPiArCXJldHVybiBmYWxz ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogLS0tLS0gaGFuZGxpbmcgbWFpbiBwcm9jZXNzaW5n IHBhdGggLS0tLS0gKi8NCj4gPiArc3RhdGljIGludCB2aWlmX2dldF9kdl90aW1pbmdzKHN0cnVj dCB2aWlmX2RldmljZSAqdmlpZl9kZXYsIHN0cnVjdA0KPiB2NGwyX2R2X3RpbWluZ3MgKnRpbWlu Z3MpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB2aWlmX3N1YmRldiAqdmlpZl9zZCA9IHZpaWZfZGV2 LT5zZDsNCj4gPiArCXN0cnVjdCB2NGwyX2N0cmwgKmN0cmw7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ ICsJc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgcGFkX2NmZzsNCj4gPiArCXN0cnVjdCB2 NGwyX3N1YmRldl9zdGF0ZSBwYWRfc3RhdGUgPSB7DQo+ID4gKwkJLnBhZHMgPSAmcGFkX2NmZywN Cj4gPiArCX07DQo+ID4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0IGZvcm1hdCA9IHsNCj4g PiArCQkud2hpY2ggPSBWNEwyX1NVQkRFVl9GT1JNQVRfQUNUSVZFLA0KPiA+ICsJCS5wYWQgPSAw LA0KPiA+ICsJfTsNCj4gPiArDQo+ID4gKwkvKiBzb21lIHZpZGVvIEkvRiBzdXBwb3J0IGR2X3Rp bWluZ3MgcXVlcnkgKi8NCj4gPiArCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwodmlpZl9zZC0+djRs Ml9zZCwgdmlkZW8sIGdfZHZfdGltaW5ncywgdGltaW5ncyk7DQo+ID4gKwlpZiAocmV0ID09IDAp DQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICsJLyogb3RoZXJzOiBjYWxsIHNvbWUgZGlz Y3JldGUgQVBJcyAqLw0KPiA+ICsJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbCh2aWlmX3NkLT52NGwy X3NkLCBwYWQsIGdldF9mbXQsICZwYWRfc3RhdGUsDQo+ICZmb3JtYXQpOw0KPiA+ICsJaWYgKHJl dCAhPSAwKQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJdGltaW5ncy0+YnQud2lk dGggPSBmb3JtYXQuZm9ybWF0LndpZHRoOw0KPiA+ICsJdGltaW5ncy0+YnQuaGVpZ2h0ID0gZm9y bWF0LmZvcm1hdC5oZWlnaHQ7DQo+ID4gKw0KPiA+ICsJY3RybCA9IHY0bDJfY3RybF9maW5kKHZp aWZfc2QtPnY0bDJfc2QtPmN0cmxfaGFuZGxlciwNCj4gVjRMMl9DSURfSEJMQU5LKTsNCj4gPiAr CWlmICghY3RybCkgew0KPiA+ICsJCWRldl9lcnIodmlpZl9kZXYtPmRldiwgInN1YmRldjogVjRM Ml9DSURfVkJMQU5LIGVycm9yLlxuIik7DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9 DQo+ID4gKwl0aW1pbmdzLT5idC5oc3luYyA9IHY0bDJfY3RybF9nX2N0cmwoY3RybCk7DQo+ID4g Kw0KPiA+ICsJY3RybCA9IHY0bDJfY3RybF9maW5kKHZpaWZfc2QtPnY0bDJfc2QtPmN0cmxfaGFu ZGxlciwNCj4gVjRMMl9DSURfVkJMQU5LKTsNCj4gPiArCWlmICghY3RybCkgew0KPiA+ICsJCWRl dl9lcnIodmlpZl9kZXYtPmRldiwgInN1YmRldjogVjRMMl9DSURfVkJMQU5LIGVycm9yLlxuIik7 DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKwl0aW1pbmdzLT5idC52c3lu YyA9IHY0bDJfY3RybF9nX2N0cmwoY3RybCk7DQo+ID4gKw0KPiA+ICsJY3RybCA9IHY0bDJfY3Ry bF9maW5kKHZpaWZfc2QtPnY0bDJfc2QtPmN0cmxfaGFuZGxlciwNCj4gVjRMMl9DSURfUElYRUxf UkFURSk7DQo+ID4gKwlpZiAoIWN0cmwpIHsNCj4gPiArCQlkZXZfZXJyKHZpaWZfZGV2LT5kZXYs ICJzdWJkZXY6IFY0TDJfQ0lEX1BJWEVMX1JBVEUNCj4gZXJyb3IuXG4iKTsNCj4gPiArCQlyZXR1 cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArCXRpbWluZ3MtPmJ0LnBpeGVsY2xvY2sgPSB2NGwy X2N0cmxfZ19jdHJsX2ludDY0KGN0cmwpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICsvKlRPRE86IHNob3VsZCBiZSBtb3ZlZCBiZWxvdyB2aXNjb250aV92aWlm X2lzcF9zX3N0cmVhbSgpPz8gKi8NCj4gPiAraW50IHZpaWZfaXNwX21haW5fc2V0X3VuaXQoc3Ry dWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldikNCj4gPiArew0KPiA+ICsJc3RydWN0IHZpaWZfc3Vi ZGV2ICp2aWlmX3NkID0gdmlpZl9kZXYtPnNkOw0KPiA+ICsJc3RydWN0IHY0bDJfZHZfdGltaW5n cyB0aW1pbmdzOw0KPiA+ICsJc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCBmbXQgPSB7DQo+ID4g KwkJLnBhZCA9IDAsDQo+ID4gKwkJLndoaWNoID0gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRSwN Cj4gPiArCX07DQo+ID4gKwl1bnNpZ25lZCBpbnQgZHRfaW1hZ2UsIGNvbG9yX3R5cGUsIHJhd3Bh Y2ssIHl1dl9jb252Ow0KPiA+ICsJc3RydWN0IGh3ZF92aWlmX2lucHV0X2ltZyBpbl9pbWdfbWFp bjsNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsJaW50IG1hZ19oYWN0aXZlID0gMTsNCj4gPiAr CXN0cnVjdCBod2RfdmlpZl9sMl91bmRpc3QgdW5kaXN0ID0geyAwIH07DQo+ID4gKw0KPiA+ICsJ cmV0ID0gdmlpZl9nZXRfZHZfdGltaW5ncyh2aWlmX2RldiwgJnRpbWluZ3MpOw0KPiA+ICsJaWYg KHJldCkgew0KPiA+ICsJCWRldl9lcnIodmlpZl9kZXYtPmRldiwgImNvdWxkIG5vdCBnZXQgdGlt aW5nIGluZm9ybWF0aW9uIG9mDQo+IHN1YmRldiIpOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0K PiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwodmlpZl9zZC0+djRs Ml9zZCwgcGFkLCBnZXRfZm10LCBOVUxMLCAmZm10KTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiAr CQlkZXZfZXJyKHZpaWZfZGV2LT5kZXYsICJjb3VsZCBub3QgZ2V0IHBhZCBpbmZvcm1hdGlvbiBv Zg0KPiBzdWJkZXYiKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ ID4gKwlzd2l0Y2ggKGZtdC5mb3JtYXQuY29kZSkgew0KPiA+ICsJY2FzZSBNRURJQV9CVVNfRk1U X1JHQjg4OF8xWDI0Og0KPiA+ICsJCWR0X2ltYWdlID0gVklTQ09OVElfQ1NJMl9EVF9SR0I4ODg7 DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIE1FRElBX0JVU19GTVRfVVlWWThfMVgxNjoNCj4g PiArCQlkdF9pbWFnZSA9IFZJU0NPTlRJX0NTSTJfRFRfWVVWNDIyOEI7DQo+ID4gKwkJYnJlYWs7 DQo+ID4gKwljYXNlIE1FRElBX0JVU19GTVRfVVlWWTEwXzFYMjA6DQo+ID4gKwkJZHRfaW1hZ2Ug PSBWSVNDT05USV9DU0kyX0RUX1lVVjQyMjEwQjsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2Ug TUVESUFfQlVTX0ZNVF9SR0I1NjVfMVgxNjoNCj4gPiArCQlkdF9pbWFnZSA9IFZJU0NPTlRJX0NT STJfRFRfUkdCNTY1Ow0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBNRURJQV9CVVNfRk1UX1NC R0dSOF8xWDg6DQo+ID4gKwljYXNlIE1FRElBX0JVU19GTVRfU0dCUkc4XzFYODoNCj4gPiArCWNh c2UgTUVESUFfQlVTX0ZNVF9TR1JCRzhfMVg4Og0KPiA+ICsJY2FzZSBNRURJQV9CVVNfRk1UX1NS R0dCOF8xWDg6DQo+ID4gKwkJZHRfaW1hZ2UgPSBWSVNDT05USV9DU0kyX0RUX1JBVzg7DQo+ID4g KwkJYnJlYWs7DQo+ID4gKwljYXNlIE1FRElBX0JVU19GTVRfU1JHR0IxMF8xWDEwOg0KPiA+ICsJ Y2FzZSBNRURJQV9CVVNfRk1UX1NHUkJHMTBfMVgxMDoNCj4gPiArCWNhc2UgTUVESUFfQlVTX0ZN VF9TR0JSRzEwXzFYMTA6DQo+ID4gKwljYXNlIE1FRElBX0JVU19GTVRfU0JHR1IxMF8xWDEwOg0K PiA+ICsJCWR0X2ltYWdlID0gVklTQ09OVElfQ1NJMl9EVF9SQVcxMDsNCj4gPiArCQlicmVhazsN Cj4gPiArCWNhc2UgTUVESUFfQlVTX0ZNVF9TUkdHQjEyXzFYMTI6DQo+ID4gKwljYXNlIE1FRElB X0JVU19GTVRfU0dSQkcxMl8xWDEyOg0KPiA+ICsJY2FzZSBNRURJQV9CVVNfRk1UX1NHQlJHMTJf MVgxMjoNCj4gPiArCWNhc2UgTUVESUFfQlVTX0ZNVF9TQkdHUjEyXzFYMTI6DQo+ID4gKwkJZHRf aW1hZ2UgPSBWSVNDT05USV9DU0kyX0RUX1JBVzEyOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2Fz ZSBNRURJQV9CVVNfRk1UX1NSR0dCMTRfMVgxNDoNCj4gPiArCWNhc2UgTUVESUFfQlVTX0ZNVF9T R1JCRzE0XzFYMTQ6DQo+ID4gKwljYXNlIE1FRElBX0JVU19GTVRfU0dCUkcxNF8xWDE0Og0KPiA+ ICsJY2FzZSBNRURJQV9CVVNfRk1UX1NCR0dSMTRfMVgxNDoNCj4gPiArCQlkdF9pbWFnZSA9IFZJ U0NPTlRJX0NTSTJfRFRfUkFXMTQ7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwlkZWZhdWx0Og0KPiA+ ICsJCWR0X2ltYWdlID0gVklTQ09OVElfQ1NJMl9EVF9SR0I4ODg7DQo+ID4gKwkJYnJlYWs7DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJY29sb3JfdHlwZSA9IGR0X2ltYWdlOw0KPiA+ICsNCj4gPiAr CWlmICgoY29sb3JfdHlwZSA9PSBWSVNDT05USV9DU0kyX0RUX1JBVzgpIHx8IChjb2xvcl90eXBl ID09DQo+IFZJU0NPTlRJX0NTSTJfRFRfUkFXMTApIHx8DQo+ID4gKwkgICAgKGNvbG9yX3R5cGUg PT0gVklTQ09OVElfQ1NJMl9EVF9SQVcxMikpIHsNCj4gPiArCQlyYXdwYWNrID0gdmlpZl9kZXYt PnJhd3BhY2tfbW9kZTsNCj4gPiArCQlpZiAocmF3cGFjayAhPSBIV0RfVklJRl9SQVdQQUNLX0RJ U0FCTEUpDQo+ID4gKwkJCW1hZ19oYWN0aXZlID0gMjsNCj4gPiArCX0gZWxzZQ0KPiA+ICsJCXJh d3BhY2sgPSBIV0RfVklJRl9SQVdQQUNLX0RJU0FCTEU7DQo+ID4gKw0KPiA+ICsJaWYgKChjb2xv cl90eXBlID09IFZJU0NPTlRJX0NTSTJfRFRfWVVWNDIyOEIpIHx8IChjb2xvcl90eXBlID09DQo+ IFZJU0NPTlRJX0NTSTJfRFRfWVVWNDIyMTBCKSkNCj4gPiArCQl5dXZfY29udiA9IEhXRF9WSUlG X1lVVl9DT05WX0lOVEVSUE9MQVRJT047DQo+ID4gKwllbHNlDQo+ID4gKwkJeXV2X2NvbnYgPSBI V0RfVklJRl9ZVVZfQ09OVl9SRVBFQVQ7DQo+ID4gKw0KPiA+ICsJaW5faW1nX21haW4uaGFjdGl2 ZV9zaXplID0gdGltaW5ncy5idC53aWR0aDsNCj4gPiArCWluX2ltZ19tYWluLnZhY3RpdmVfc2l6 ZSA9IHRpbWluZ3MuYnQuaGVpZ2h0Ow0KPiA+ICsJaW5faW1nX21haW4uaHRvdGFsX3NpemUgPSB0 aW1pbmdzLmJ0LndpZHRoICogbWFnX2hhY3RpdmUgKw0KPiB0aW1pbmdzLmJ0LmhzeW5jOw0KPiA+ ICsJaW5faW1nX21haW4udnRvdGFsX3NpemUgPSB0aW1pbmdzLmJ0LmhlaWdodCArIHRpbWluZ3Mu YnQudnN5bmM7DQo+ID4gKwlpbl9pbWdfbWFpbi5waXhlbF9jbG9jayA9IHRpbWluZ3MuYnQucGl4 ZWxjbG9jayAvIDEwMDA7DQo+ID4gKwlpbl9pbWdfbWFpbi52YnBfc2l6ZSA9IHRpbWluZ3MuYnQu dnN5bmMgLSA1Ow0KPiA+ICsNCj4gPiArCWluX2ltZ19tYWluLmludGVycG9sYXRpb25fbW9kZSA9 DQo+IEhXRF9WSUlGX0wxX0lOUFVUX0lOVEVSUE9MQVRJT05fTElORTsNCj4gPiArCWluX2ltZ19t YWluLmlucHV0X251bSA9IDE7DQo+ID4gKwlpbl9pbWdfbWFpbi5ob2JjX3dpZHRoID0gMDsNCj4g PiArCWluX2ltZ19tYWluLmhvYmNfbWFyZ2luID0gMDsNCj4gPiArDQo+ID4gKwkvKiBjb25maWd1 cmF0aW9uIG9mIE1BSU4gdW5pdCAqLw0KPiA+ICsJcmV0ID0gaHdkX1ZJSUZfbWFpbl9zZXRfdW5p dCh2aWlmX2Rldi0+Y2gsIGR0X2ltYWdlLCAwLA0KPiAmaW5faW1nX21haW4sIGNvbG9yX3R5cGUs IHJhd3BhY2ssDQo+ID4gKwkJCQkgICAgIHl1dl9jb252KTsNCj4gPiArCWlmIChyZXQpIHsNCj4g PiArCQlkZXZfZXJyKHZpaWZfZGV2LT5kZXYsICJtYWluX3NldF91bml0IGVycm9yLiAlZFxuIiwg cmV0KTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIEVuYWJs ZSByZWdidWYgKi8NCj4gPiArCWh3ZF9WSUlGX2lzcF9zZXRfcmVnYnVmX2F1dG9fdHJhbnNtaXNz aW9uKHZpaWZfZGV2LT5jaCwNCj4gVklJRl9JU1BfUkVHQlVGXzAsDQo+ID4gKwkJCQkJCSAgVklJ Rl9JU1BfUkVHQlVGXzAsIDApOw0KPiA+ICsNCj4gPiArCS8qIEwyIFVORElTVCBFbmFibGUgdGhy b3VnaCBtb2RlIGFzIGRlZmF1bHQgICovDQo+ID4gKwl1bmRpc3QudGhyb3VnaF9tb2RlID0gSFdE X1ZJSUZfRU5BQkxFOw0KPiA+ICsJdW5kaXN0LnNlbnNvcl9jcm9wX29mc19oID0gMSAtIGluX2lt Z19tYWluLmhhY3RpdmVfc2l6ZTsNCj4gPiArCXVuZGlzdC5zZW5zb3JfY3JvcF9vZnNfdiA9IDEg LSBpbl9pbWdfbWFpbi52YWN0aXZlX3NpemU7DQo+ID4gKwl1bmRpc3QuZ3JpZF9ub2RlX251bV9o ID0gMTY7DQo+ID4gKwl1bmRpc3QuZ3JpZF9ub2RlX251bV92ID0gMTY7DQo+ID4gKwlyZXQgPSBo d2RfVklJRl9sMl9zZXRfdW5kaXN0KHZpaWZfZGV2LT5jaCwgVklJRl9JU1BfUkVHQlVGXzAsDQo+ ICZ1bmRpc3QpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlkZXZfZXJyKHZpaWZfZGV2LT5kZXYs ICJsMl9zZXRfdW5kaXN0IGVycm9yLiAlZFxuIiwgcmV0KTsNCj4gPiArCXJldHVybiByZXQ7DQo+ ID4gK30NCj4gPiArDQo+ID4gKy8qIC0tLS0tIGhhbmRsaW5nIENTSTJSWCBoYXJkd2FyZSAtLS0t LSAqLw0KPiA+ICtzdGF0aWMgaW50IHZpaWZfY3NpMnJ4X2luaXRpYWxpemUoc3RydWN0IHZpaWZf ZGV2aWNlICp2aWlmX2RldikNCj4gPiArew0KPiA+ICsJc3RydWN0IHZpaWZfc3ViZGV2ICp2aWlm X3NkID0gdmlpZl9kZXYtPnNkOw0KPiA+ICsJc3RydWN0IGh3ZF92aWlmX2NzaTJyeF9saW5lX2Vy cl90YXJnZXQgZXJyX3RhcmdldCA9IHsgMCB9Ow0KPiA+ICsJc3RydWN0IGh3ZF92aWlmX2NzaTJy eF9pcnFfbWFzayBjc2kycnhfbWFzazsNCj4gPiArCXN0cnVjdCB2NGwyX21idXNfY29uZmlnIGNm ZyA9IHsgMCB9Ow0KPiA+ICsJc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCBmbXQgPSB7DQo+ID4g KwkJLnBhZCA9IDAsDQo+ID4gKwkJLndoaWNoID0gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRSwN Cj4gPiArCX07DQo+ID4gKwlzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzIHRpbWluZ3M7DQo+ID4gKwlp bnQgbnVtX2xhbmUsIGRwaHlfcmF0ZTsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJcmV0 ID0gdjRsMl9zdWJkZXZfY2FsbCh2aWlmX3NkLT52NGwyX3NkLCBwYWQsIGdldF9tYnVzX2NvbmZp ZywgMCwNCj4gJmNmZyk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2RiZyh2aWlmX2Rl di0+ZGV2LCAic3ViZGV2OiBnX21idXNfY29uZmlnIGVycm9yLiAlZFxuIiwNCj4gcmV0KTsNCj4g PiArCQludW1fbGFuZSA9IHZpaWZfc2QtPm51bV9sYW5lOw0KPiA+ICsJfSBlbHNlIHsNCj4gPiAr CQlzd2l0Y2ggKGNmZy5mbGFncyAmIFY0TDJfTUJVU19DU0kyX0xBTkVTKSB7DQo+ID4gKwkJY2Fz ZSBWNEwyX01CVVNfQ1NJMl8xX0xBTkU6DQo+ID4gKwkJCW51bV9sYW5lID0gMTsNCj4gPiArCQkJ YnJlYWs7DQo+ID4gKwkJY2FzZSBWNEwyX01CVVNfQ1NJMl8yX0xBTkU6DQo+ID4gKwkJCW51bV9s YW5lID0gMjsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJY2FzZSBWNEwyX01CVVNfQ1NJMl8zX0xB TkU6DQo+ID4gKwkJCW51bV9sYW5lID0gMzsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJY2FzZSBW NEwyX01CVVNfQ1NJMl80X0xBTkU6DQo+ID4gKwkJCW51bV9sYW5lID0gNDsNCj4gPiArCQkJYnJl YWs7DQo+ID4gKwkJZGVmYXVsdDoNCj4gPiArCQkJbnVtX2xhbmUgPSA0Ow0KPiA+ICsJCQlicmVh azsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0ID0gdjRsMl9zdWJkZXZfY2Fs bCh2aWlmX3NkLT52NGwyX3NkLCBwYWQsIGdldF9mbXQsIDAsICZmbXQpOw0KPiA+ICsJaWYgKHJl dCkNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwlyZXQgPSB2aWlmX2dldF9k dl90aW1pbmdzKHZpaWZfZGV2LCAmdGltaW5ncyk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJl dHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArCWRwaHlfcmF0ZSA9ICh0aW1pbmdzLmJ0LnBpeGVs Y2xvY2sgLyAxMDAwKSAqDQo+IHZpaWZfZ2V0X21idXNfYnBwKGZtdC5mb3JtYXQuY29kZSkgLyBu dW1fbGFuZTsNCj4gPiArCWRwaHlfcmF0ZSA9IGRwaHlfcmF0ZSAvIDEwMDA7DQo+ID4gKw0KPiA+ ICsJLyogY2hlY2sgZXJyb3IgZm9yIENIMDogYWxsIHN1cHBvcnRlZCBEVHMgKi8NCj4gPiArCWVy cl90YXJnZXQuZHRbMF0gPSBWSVNDT05USV9DU0kyX0RUX1JHQjU2NTsNCj4gPiArCWVycl90YXJn ZXQuZHRbMV0gPSBWSVNDT05USV9DU0kyX0RUX1lVVjQyMjhCOw0KPiA+ICsJZXJyX3RhcmdldC5k dFsyXSA9IFZJU0NPTlRJX0NTSTJfRFRfWVVWNDIyMTBCOw0KPiA+ICsJZXJyX3RhcmdldC5kdFsz XSA9IFZJU0NPTlRJX0NTSTJfRFRfUkdCODg4Ow0KPiA+ICsJZXJyX3RhcmdldC5kdFs0XSA9IFZJ U0NPTlRJX0NTSTJfRFRfUkFXODsNCj4gPiArCWVycl90YXJnZXQuZHRbNV0gPSBWSVNDT05USV9D U0kyX0RUX1JBVzEwOw0KPiA+ICsJZXJyX3RhcmdldC5kdFs2XSA9IFZJU0NPTlRJX0NTSTJfRFRf UkFXMTI7DQo+ID4gKwllcnJfdGFyZ2V0LmR0WzddID0gVklTQ09OVElfQ1NJMl9EVF9SQVcxNDsN Cj4gPiArDQo+ID4gKwkvKiBEZWZpbmUgZXJyb3JzIHRvIGJlIG1hc2tlZCAqLw0KPiA+ICsJY3Np MnJ4X21hc2subWFza1swXSA9IDB4MDAwMDAwMEY7IC8qY2hlY2sgYWxsIGZvciBQSFlfRkFUQUwq Lw0KPiA+ICsJY3NpMnJ4X21hc2subWFza1sxXSA9IDB4MDAwMTAwMEY7IC8qY2hlY2sgYWxsIGZv ciBQS1RfRkFUQUwqLw0KPiA+ICsJY3NpMnJ4X21hc2subWFza1syXSA9IDB4MDAwRjBGMEY7IC8q Y2hlY2sgYWxsIGZvciBGUkFNRV9GQVRBTCovDQo+ID4gKwljc2kycnhfbWFzay5tYXNrWzNdID0g MHgwMDBGMDAwRjsgLypjaGVjayBhbGwgZm9yIFBIWSovDQo+ID4gKwljc2kycnhfbWFzay5tYXNr WzRdID0gMHgwMDBGMDAwRjsgLypjaGVjayBhbGwgZm9yIFBLVCovDQo+ID4gKwljc2kycnhfbWFz ay5tYXNrWzVdID0gMHgwMEZGMDBGRjsgLypjaGVjayBhbGwgZm9yIExJTkUqLw0KPiA+ICsNCj4g PiArCXJldHVybiBod2RfVklJRl9jc2kycnhfaW5pdGlhbGl6ZSh2aWlmX2Rldi0+Y2gsIG51bV9s YW5lLA0KPiBIV0RfVklJRl9DU0kyX0RQSFlfTDBMMUwyTDMsDQo+ID4gKwkJCQkJICBkcGh5X3Jh dGUsIEhXRF9WSUlGX0VOQUJMRSwNCj4gJmVycl90YXJnZXQsDQo+ID4gKwkJCQkJICBIV0RfVklJ Rl9DU0kyX0lOUFVUX09XTiwNCj4gJmNzaTJyeF9tYXNrKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIGludCB2aWlmX2NzaTJyeF9zdGFydChzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2 KQ0KPiA+ICt7DQo+ID4gKwl1aW50MzJfdCB2Y19tYWluID0gMDsNCj4gPiArCXN0cnVjdCBod2Rf dmlpZl9jc2kycnhfcGFja2V0IHBhY2tldCA9IHsgMCB9Ow0KPiA+ICsNCj4gPiArCXZpaWZfZGV2 LT5tYXNrZWRfZ2FtbWFfcGF0aCA9IDBVOw0KPiA+ICsNCj4gPiArCXJldHVybiBod2RfVklJRl9j c2kycnhfc3RhcnQodmlpZl9kZXYtPmNoLCB2Y19tYWluLA0KPiBIV0RfVklJRl9DU0kyX05PVF9D QVBUVVJFLCAmcGFja2V0LA0KPiA+ICsJCQkJICAgICBIV0RfVklJRl9ESVNBQkxFKTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2aWlmX2NzaTJyeF9zdG9wKHN0cnVjdCB2aWlmX2Rl dmljZSAqdmlpZl9kZXYpDQo+ID4gK3sNCj4gPiArCWludDMyX3QgcmV0Ow0KPiA+ICsNCj4gPiAr CXJldCA9IGh3ZF9WSUlGX2NzaTJyeF9zdG9wKHZpaWZfZGV2LT5jaCk7DQo+ID4gKwlpZiAocmV0 KQ0KPiA+ICsJCWRldl9lcnIodmlpZl9kZXYtPmRldiwgImNzaTJyeF9zdG9wIGVycm9yLiAlZFxu IiwgcmV0KTsNCj4gPiArDQo+ID4gKwlod2RfVklJRl9jc2kycnhfdW5pbml0aWFsaXplKHZpaWZf ZGV2LT5jaCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr LyogLS0tLS0gc3ViZGV2aWNlIHZpZGVvIG9wZXJhdGlvbnMgLS0tLS0gKi8NCj4gPiArc3RhdGlj IGludCB2aXNjb250aV92aWlmX2lzcF9zX3N0cmVhbShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBp bnQgZW5hYmxlKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2ID0g KChzdHJ1Y3QgaXNwX3N1YmRldiAqKXNkKS0+dmlpZl9kZXY7DQo+ID4gKwlpZiAoZW5hYmxlKSB7 DQo+ID4gKwkJaW50IHJldCA9IHZpaWZfY3NpMnJ4X2luaXRpYWxpemUodmlpZl9kZXYpOw0KPiA+ ICsJCWlmIChyZXQpDQo+ID4gKwkJCXJldHVybiByZXQ7DQo+ID4gKwkJdmlpZl9jc2kycnhfc3Rh cnQodmlpZl9kZXYpOw0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQkodm9pZCl2aWlmX2NzaTJyeF9z dG9wKHZpaWZfZGV2KTsNCj4gPiArCX0NCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICsvKiAtLS0tLSBzdWJkZXZpY2UgcGFkIG9wZXJhdGlvbnMgLS0tLS0gKi8NCj4gPiArc3Rh dGljIGludCB2aXNjb250aV92aWlmX2lzcF9lbnVtX21idXNfY29kZShzdHJ1Y3QgdjRsMl9zdWJk ZXYgKnNkLA0KPiA+ICsJCQkJCSAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfc3RhdGUNCj4gKnNkX3N0 YXRlLA0KPiA+ICsJCQkJCSAgICBzdHJ1Y3QNCj4gdjRsMl9zdWJkZXZfbWJ1c19jb2RlX2VudW0g KmNvZGUpDQo+ID4gK3sNCj4gPiArCWlmIChjb2RlLT5wYWQgPT0gMCkgew0KPiA+ICsJCS8qIHNp bmsgKi8NCj4gPiArCQlpZiAoY29kZS0+aW5kZXggPiBBUlJBWV9TSVpFKHZpc2NvbnRpX21idXNf Zm9ybWF0cykgLSAxKQ0KPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCQljb2RlLT5jb2Rl ID0gdmlzY29udGlfbWJ1c19mb3JtYXRzW2NvZGUtPmluZGV4XS5jb2RlOw0KPiA+ICsJCXJldHVy biAwOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIHNvdXJjZSAqLw0KPiA+ICsJaWYgKGNvZGUt PmluZGV4ID4gMCkNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCWNvZGUtPmNvZGUgPSBN RURJQV9CVVNfRk1UX1JHQjg4OF8xWDI0Ow0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICp2aXNjb250aV92aWlmX2lz cF9nZXRfcGFkX2ZtdChzdHJ1Y3QNCj4gdjRsMl9zdWJkZXYgKnNkLA0KPiA+ICsJCQkJCQkJCXN0 cnVjdA0KPiB2NGwyX3N1YmRldl9zdGF0ZSAqc2Rfc3RhdGUsDQo+ID4gKwkJCQkJCQkJdW5zaWdu ZWQNCj4gaW50IHBhZCwgdTMyIHdoaWNoKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9kZXZp Y2UgKnZpaWZfZGV2ID0gKChzdHJ1Y3QgaXNwX3N1YmRldiAqKXNkKS0+dmlpZl9kZXY7DQo+ID4g KwlzdHJ1Y3QgdjRsMl9zdWJkZXZfc3RhdGUgc3RhdGUgPSB7DQo+ID4gKwkJLnBhZHMgPSB2aWlm X2Rldi0+aXNwX3N1YmRldi5wYWRfY2ZnLA0KPiA+ICsJfTsNCj4gPiArDQo+ID4gKwlpZiAod2hp Y2ggPT0gVjRMMl9TVUJERVZfRk9STUFUX1RSWSkNCj4gPiArCQlyZXR1cm4gdjRsMl9zdWJkZXZf Z2V0X3RyeV9mb3JtYXQoJnZpaWZfZGV2LT5pc3Bfc3ViZGV2LnNkLA0KPiBzZF9zdGF0ZSwgcGFk KTsNCj4gPiArCWVsc2UNCj4gPiArCQlyZXR1cm4gdjRsMl9zdWJkZXZfZ2V0X3RyeV9mb3JtYXQo JnZpaWZfZGV2LT5pc3Bfc3ViZGV2LnNkLA0KPiAmc3RhdGUsIHBhZCk7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyBzdHJ1Y3QgdjRsMl9yZWN0ICp2aXNjb250aV92aWlmX2lzcF9nZXRfcGFk X2Nyb3Aoc3RydWN0IHY0bDJfc3ViZGV2DQo+ICpzZCwNCj4gPiArCQkJCQkJCXN0cnVjdA0KPiB2 NGwyX3N1YmRldl9zdGF0ZSAqc2Rfc3RhdGUsDQo+ID4gKwkJCQkJCQl1bnNpZ25lZCBpbnQgcGFk LA0KPiB1MzIgd2hpY2gpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9k ZXYgPSAoKHN0cnVjdCBpc3Bfc3ViZGV2ICopc2QpLT52aWlmX2RldjsNCj4gPiArCXN0cnVjdCB2 NGwyX3N1YmRldl9zdGF0ZSBzdGF0ZSA9IHsNCj4gPiArCQkucGFkcyA9IHZpaWZfZGV2LT5pc3Bf c3ViZGV2LnBhZF9jZmcsDQo+ID4gKwl9Ow0KPiA+ICsNCj4gPiArCWlmICh3aGljaCA9PSBWNEwy X1NVQkRFVl9GT1JNQVRfVFJZKQ0KPiA+ICsJCXJldHVybiB2NGwyX3N1YmRldl9nZXRfdHJ5X2Ny b3AoJnZpaWZfZGV2LT5pc3Bfc3ViZGV2LnNkLA0KPiBzZF9zdGF0ZSwgcGFkKTsNCj4gPiArCWVs c2UNCj4gPiArCQlyZXR1cm4gdjRsMl9zdWJkZXZfZ2V0X3RyeV9jcm9wKCZ2aWlmX2Rldi0+aXNw X3N1YmRldi5zZCwNCj4gJnN0YXRlLCBwYWQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg c3RydWN0IHY0bDJfcmVjdCAqdmlzY29udGlfdmlpZl9pc3BfZ2V0X3BhZF9jb21wb3NlKHN0cnVj dA0KPiB2NGwyX3N1YmRldiAqc2QsDQo+ID4gKwkJCQkJCQkgICBzdHJ1Y3QNCj4gdjRsMl9zdWJk ZXZfc3RhdGUgKnNkX3N0YXRlLA0KPiA+ICsJCQkJCQkJICAgdW5zaWduZWQgaW50IHBhZCwNCj4g dTMyIHdoaWNoKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2ID0g KChzdHJ1Y3QgaXNwX3N1YmRldiAqKXNkKS0+dmlpZl9kZXY7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9z dWJkZXZfc3RhdGUgc3RhdGUgPSB7DQo+ID4gKwkJLnBhZHMgPSB2aWlmX2Rldi0+aXNwX3N1YmRl di5wYWRfY2ZnLA0KPiA+ICsJfTsNCj4gPiArDQo+ID4gKwlpZiAod2hpY2ggPT0gVjRMMl9TVUJE RVZfRk9STUFUX1RSWSkNCj4gPiArCQlyZXR1cm4NCj4gdjRsMl9zdWJkZXZfZ2V0X3RyeV9jb21w b3NlKCZ2aWlmX2Rldi0+aXNwX3N1YmRldi5zZCwgc2Rfc3RhdGUsIHBhZCk7DQo+ID4gKwllbHNl DQo+ID4gKwkJcmV0dXJuDQo+IHY0bDJfc3ViZGV2X2dldF90cnlfY29tcG9zZSgmdmlpZl9kZXYt PmlzcF9zdWJkZXYuc2QsICZzdGF0ZSwgcGFkKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IGludCB2aXNjb250aV92aWlmX2lzcF9nZXRfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0 cnVjdA0KPiB2NGwyX3N1YmRldl9zdGF0ZSAqc2Rfc3RhdGUsDQo+ID4gKwkJCQkgICAgIHN0cnVj dCB2NGwyX3N1YmRldl9mb3JtYXQgKmZtdCkNCj4gPiArew0KPiA+ICsJc3RydWN0IHZpaWZfZGV2 aWNlICp2aWlmX2RldiA9ICgoc3RydWN0IGlzcF9zdWJkZXYgKilzZCktPnZpaWZfZGV2Ow0KPiA+ ICsNCj4gPiArCW11dGV4X2xvY2soJnZpaWZfZGV2LT5pc3Bfc3ViZGV2Lm9wc19sb2NrKTsNCj4g PiArCWZtdC0+Zm9ybWF0ID0gKnZpc2NvbnRpX3ZpaWZfaXNwX2dldF9wYWRfZm10KHNkLCBzZF9z dGF0ZSwgZm10LT5wYWQsDQo+IGZtdC0+d2hpY2gpOw0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZ2aWlm X2Rldi0+aXNwX3N1YmRldi5vcHNfbG9jayk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHZpc2NvbnRpX3ZpaWZfaXNwX3NldF9zaW5rX2Zt dChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KPiA+ICsJCQkJCSAgIHN0cnVjdCB2NGwyX3N1YmRl dl9zdGF0ZQ0KPiAqc2Rfc3RhdGUsDQo+ID4gKwkJCQkJICAgc3RydWN0IHY0bDJfbWJ1c19mcmFt ZWZtdA0KPiAqZm9ybWF0LCB1MzIgd2hpY2gpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB2NGwyX21i dXNfZnJhbWVmbXQgKnNpbmtfZm10LCAqc3JjX2ZtdDsNCj4gPiArDQo+ID4gKwlwcl9pbmZvKCJ2 aXNjb250aV92aWlmX2lzcF9zZXRfc2lua19mbXQgY2FsbGVkICVkIiwgd2hpY2gpOw0KPiA+ICsN Cj4gPiArCXNpbmtfZm10ID0gdmlzY29udGlfdmlpZl9pc3BfZ2V0X3BhZF9mbXQoc2QsIHNkX3N0 YXRlLCAwLCB3aGljaCk7DQo+ID4gKwlzcmNfZm10ID0gdmlzY29udGlfdmlpZl9pc3BfZ2V0X3Bh ZF9mbXQoc2QsIHNkX3N0YXRlLCAxLCB3aGljaCk7DQo+ID4gKw0KPiA+ICsJLyogdXBkYXRlIG1i dXMgY29kZSBvbmx5IGlmIGl0J3MgYXZhaWxhYmxlICovDQo+ID4gKwlpZiAodmlpZl9pc192YWxp ZF9tYnVzX2NvZGUoZm9ybWF0LT5jb2RlKSkNCj4gPiArCQlzaW5rX2ZtdC0+Y29kZSA9IGZvcm1h dC0+Y29kZTsNCj4gPiArDQo+ID4gKwkvKiBzaW5rOjptYnVzX2NvZGUgaXMgZGVyaXZlZCBmcm9t IHNyYzo6bWJ1c19jb2RlICovDQo+ID4gKwlpZiAodmlpZl9nZXRfbWJ1c19yZ2Jfb3V0KHNpbmtf Zm10LT5jb2RlKSkNCj4gPiArCQlzcmNfZm10LT5jb2RlID0gTUVESUFfQlVTX0ZNVF9SR0I4ODhf MVgyNDsNCj4gPiArCWVsc2UNCj4gPiArCQlzcmNfZm10LT5jb2RlID0gTUVESUFfQlVTX0ZNVF9Z VVY4XzFYMjQ7DQo+ID4gKw0KPiA+ICsJLyogc2l6ZSBjaGVjayAqLw0KPiA+ICsJc2lua19mbXQt PndpZHRoID0gZm9ybWF0LT53aWR0aDsNCj4gPiArCXNpbmtfZm10LT5oZWlnaHQgPSBmb3JtYXQt PmhlaWdodDsNCj4gPiArDQo+ID4gKwkqZm9ybWF0ID0gKnNpbmtfZm10Ow0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgdm9pZCB2aXNjb250aV92aWlmX2lzcF9zZXRfc3JjX2ZtdChzdHJ1Y3Qg djRsMl9zdWJkZXYgKnNkLA0KPiA+ICsJCQkJCSAgc3RydWN0IHY0bDJfc3ViZGV2X3N0YXRlDQo+ ICpzZF9zdGF0ZSwNCj4gPiArCQkJCQkgIHN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQNCj4gKmZv cm1hdCwgdTMyIHdoaWNoKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10 ICpzaW5rX2ZtdCwgKnNyY19mbXQ7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9yZWN0ICpzcmNfY3JvcDsN Cj4gPiArDQo+ID4gKwlwcl9pbmZvKCJ2aXNjb250aV92aWlmX2lzcF9zZXRfc3JjX2ZtdCBjYWxs ZWQgJWQiLCB3aGljaCk7DQo+ID4gKw0KPiA+ICsJc2lua19mbXQgPSB2aXNjb250aV92aWlmX2lz cF9nZXRfcGFkX2ZtdChzZCwgc2Rfc3RhdGUsIDAsDQo+IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJ VkUpOw0KPiA+ICsJc3JjX2ZtdCA9IHZpc2NvbnRpX3ZpaWZfaXNwX2dldF9wYWRfZm10KHNkLCBz ZF9zdGF0ZSwgMSwgd2hpY2gpOw0KPiA+ICsJc3JjX2Nyb3AgPSB2aXNjb250aV92aWlmX2lzcF9n ZXRfcGFkX2Nyb3Aoc2QsIHNkX3N0YXRlLCAxLCB3aGljaCk7DQo+ID4gKw0KPiA+ICsJLyogc2lu azo6bWJ1c19jb2RlIGlzIGRlcml2ZWQgZnJvbSBzcmM6Om1idXNfY29kZSAqLw0KPiA+ICsJaWYg KHZpaWZfZ2V0X21idXNfcmdiX291dChzaW5rX2ZtdC0+Y29kZSkpDQo+ID4gKwkJc3JjX2ZtdC0+ Y29kZSA9IE1FRElBX0JVU19GTVRfUkdCODg4XzFYMjQ7DQo+ID4gKwllbHNlDQo+ID4gKwkJc3Jj X2ZtdC0+Y29kZSA9IE1FRElBX0JVU19GTVRfWVVWOF8xWDI0Ow0KPiA+ICsNCj4gPiArCS8qc2l6 ZSBjaGVjayovDQo+ID4gKwlzcmNfZm10LT53aWR0aCA9IGZvcm1hdC0+d2lkdGg7DQo+ID4gKwlz cmNfZm10LT5oZWlnaHQgPSBmb3JtYXQtPmhlaWdodDsNCj4gPiArDQo+ID4gKwkvKnVwZGF0ZSBj cm9wKi8NCj4gPiArCXNyY19jcm9wLT53aWR0aCA9IGZvcm1hdC0+d2lkdGg7DQo+ID4gKwlzcmNf Y3JvcC0+aGVpZ2h0ID0gZm9ybWF0LT5oZWlnaHQ7DQo+ID4gKw0KPiA+ICsJKmZvcm1hdCA9ICpz cmNfZm10Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZpc2NvbnRpX3ZpaWZfaXNw X3NldF9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0DQo+IHY0bDJfc3ViZGV2X3N0 YXRlICpzZF9zdGF0ZSwNCj4gPiArCQkJCSAgICAgc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCAq Zm10KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2ID0gKChzdHJ1 Y3QgaXNwX3N1YmRldiAqKXNkKS0+dmlpZl9kZXY7DQo+ID4gKw0KPiA+ICsJbXV0ZXhfbG9jaygm dmlpZl9kZXYtPmlzcF9zdWJkZXYub3BzX2xvY2spOw0KPiA+ICsNCj4gPiArCWlmIChmbXQtPnBh ZCA9PSAwKQ0KPiA+ICsJCXZpc2NvbnRpX3ZpaWZfaXNwX3NldF9zaW5rX2ZtdChzZCwgc2Rfc3Rh dGUsICZmbXQtPmZvcm1hdCwNCj4gZm10LT53aGljaCk7DQo+ID4gKwllbHNlDQo+ID4gKwkJdmlz Y29udGlfdmlpZl9pc3Bfc2V0X3NyY19mbXQoc2QsIHNkX3N0YXRlLCAmZm10LT5mb3JtYXQsDQo+ IGZtdC0+d2hpY2gpOw0KPiA+ICsNCj4gPiArCW11dGV4X3VubG9jaygmdmlpZl9kZXYtPmlzcF9z dWJkZXYub3BzX2xvY2spOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgaW50IHZpc2NvbnRpX3ZpaWZfaXNwX2luaXRfY29uZmlnKHN0cnVjdCB2NGwy X3N1YmRldiAqc2QsIHN0cnVjdA0KPiB2NGwyX3N1YmRldl9zdGF0ZSAqc2Rfc3RhdGUpDQo+ID4g K3sNCj4gPiArCXN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYgPSAoKHN0cnVjdCBpc3Bfc3Vi ZGV2ICopc2QpLT52aWlmX2RldjsNCj4gPiArCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKnNp bmtfZm10LCAqc3JjX2ZtdDsNCj4gPiArCXN0cnVjdCB2NGwyX3JlY3QgKnNyY19jcm9wLCAqc2lu a19jb21wb3NlOw0KPiA+ICsJcHJfaW5mbygidmlzY29udGlfdmlpZl9pc3BfaW5pdF9jb25maWcg Y2FsbGVkIik7DQo+ID4gKw0KPiA+ICsJc2lua19mbXQgPSB2NGwyX3N1YmRldl9nZXRfdHJ5X2Zv cm1hdCgmdmlpZl9kZXYtPmlzcF9zdWJkZXYuc2QsDQo+IHNkX3N0YXRlLCAwKTsNCj4gPiArCXNp bmtfZm10LT53aWR0aCA9IDE5MjA7DQo+ID4gKwlzaW5rX2ZtdC0+aGVpZ2h0ID0gMTA4MDsNCj4g PiArCXNpbmtfZm10LT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsNCj4gPiArCXNpbmtfZm10LT5j b2RlID0gTUVESUFfQlVTX0ZNVF9TUkdHQjEwXzFYMTA7DQo+ID4gKw0KPiA+ICsJc3JjX2ZtdCA9 IHY0bDJfc3ViZGV2X2dldF90cnlfZm9ybWF0KCZ2aWlmX2Rldi0+aXNwX3N1YmRldi5zZCwNCj4g c2Rfc3RhdGUsIDEpOw0KPiA+ICsJc3JjX2ZtdC0+d2lkdGggPSAxOTIwOw0KPiA+ICsJc3JjX2Zt dC0+aGVpZ2h0ID0gMTA4MDsNCj4gPiArCXNyY19mbXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05F Ow0KPiA+ICsJc3JjX2ZtdC0+Y29kZSA9IE1FRElBX0JVU19GTVRfWVVWOF8xWDI0Ow0KPiA+ICsN Cj4gPiArCXNyY19jcm9wID0gdjRsMl9zdWJkZXZfZ2V0X3RyeV9jcm9wKCZ2aWlmX2Rldi0+aXNw X3N1YmRldi5zZCwNCj4gc2Rfc3RhdGUsIDEpOw0KPiA+ICsJc3JjX2Nyb3AtPnRvcCA9IDA7DQo+ ID4gKwlzcmNfY3JvcC0+bGVmdCA9IDA7DQo+ID4gKwlzcmNfY3JvcC0+d2lkdGggPSAxOTIwOw0K PiA+ICsJc3JjX2Nyb3AtPmhlaWdodCA9IDEwODA7DQo+ID4gKw0KPiA+ICsJc2lua19jb21wb3Nl ID0NCj4gdjRsMl9zdWJkZXZfZ2V0X3RyeV9jb21wb3NlKCZ2aWlmX2Rldi0+aXNwX3N1YmRldi5z ZCwgc2Rfc3RhdGUsIDApOw0KPiA+ICsJc2lua19jb21wb3NlLT50b3AgPSAwOw0KPiA+ICsJc2lu a19jb21wb3NlLT5sZWZ0ID0gMDsNCj4gPiArCXNpbmtfY29tcG9zZS0+d2lkdGggPSAxOTIwOw0K PiA+ICsJc2lua19jb21wb3NlLT5oZWlnaHQgPSAxMDgwOw0KPiA+ICsNCj4gPiArCXJldHVybiAw Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZpc2NvbnRpX3ZpaWZfaXNwX2dldF9z ZWxlY3Rpb24oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwNCj4gPiArCQkJCQkgICBzdHJ1Y3QgdjRs Ml9zdWJkZXZfc3RhdGUNCj4gKnNkX3N0YXRlLA0KPiA+ICsJCQkJCSAgIHN0cnVjdCB2NGwyX3N1 YmRldl9zZWxlY3Rpb24gKnNlbCkNCj4gPiArew0KPiA+ICsJc3RydWN0IHZpaWZfZGV2aWNlICp2 aWlmX2RldiA9ICgoc3RydWN0IGlzcF9zdWJkZXYgKilzZCktPnZpaWZfZGV2Ow0KPiA+ICsJc3Ry dWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqc2lua19mbXQ7DQo+ID4gKwlpbnQgcmV0ID0gLUVJTlZB TDsNCj4gPiArDQo+ID4gKwltdXRleF9sb2NrKCZ2aWlmX2Rldi0+aXNwX3N1YmRldi5vcHNfbG9j ayk7DQo+ID4gKwlpZiAoc2VsLT5wYWQgPT0gMCkgew0KPiA+ICsJCS8qIFNJTksgUEFEICovDQo+ ID4gKwkJc3dpdGNoIChzZWwtPnRhcmdldCkgew0KPiA+ICsJCWNhc2UgVjRMMl9TRUxfVEdUX0NS T1A6DQo+ID4gKwkJCXNpbmtfZm10ID0gdmlzY29udGlfdmlpZl9pc3BfZ2V0X3BhZF9mbXQoc2Qs IHNkX3N0YXRlLA0KPiAwLCBzZWwtPndoaWNoKTsNCj4gPiArCQkJc2VsLT5yLnRvcCA9IDA7DQo+ ID4gKwkJCXNlbC0+ci5sZWZ0ID0gMDsNCj4gPiArCQkJc2VsLT5yLndpZHRoID0gc2lua19mbXQt PndpZHRoOw0KPiA+ICsJCQlzZWwtPnIuaGVpZ2h0ID0gc2lua19mbXQtPmhlaWdodDsNCj4gPiAr CQkJcmV0ID0gMDsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJY2FzZSBWNEwyX1NFTF9UR1RfQ09N UE9TRToNCj4gPiArCQkJc2VsLT5yID0gKnZpc2NvbnRpX3ZpaWZfaXNwX2dldF9wYWRfY29tcG9z ZShzZCwNCj4gc2Rfc3RhdGUsIDAsIHNlbC0+d2hpY2gpOw0KPiA+ICsJCQlyZXQgPSAwOw0KPiA+ ICsJCQlicmVhazsNCj4gPiArCQljYXNlIFY0TDJfU0VMX1RHVF9DT01QT1NFX0JPVU5EUzoNCj4g PiArCQkJLyogZml4ZWQgdmFsdWUgKi8NCj4gPiArCQkJc2VsLT5yLnRvcCA9IDA7DQo+ID4gKwkJ CXNlbC0+ci5sZWZ0ID0gMDsNCj4gPiArCQkJc2VsLT5yLndpZHRoID0gODE5MjsNCj4gPiArCQkJ c2VsLT5yLmhlaWdodCA9IDQwOTQ7DQo+ID4gKwkJCXJldCA9IDA7DQo+ID4gKwkJCWJyZWFrOw0K PiA+ICsJCX0NCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJLyogU1JDIFBBRCAqLw0KPiA+ICsJCXN3 aXRjaCAoc2VsLT50YXJnZXQpIHsNCj4gPiArCQljYXNlIFY0TDJfU0VMX1RHVF9DUk9QOg0KPiA+ ICsJCQlzZWwtPnIgPSAqdmlzY29udGlfdmlpZl9pc3BfZ2V0X3BhZF9jcm9wKHNkLCBzZF9zdGF0 ZSwNCj4gMSwgc2VsLT53aGljaCk7DQo+ID4gKwkJCXJldCA9IDA7DQo+ID4gKwkJCWJyZWFrOw0K PiA+ICsJCX0NCj4gPiArCX0NCj4gPiArCW11dGV4X3VubG9jaygmdmlpZl9kZXYtPmlzcF9zdWJk ZXYub3BzX2xvY2spOw0KPiA+ICsNCj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyBpbnQgdmlzY29udGlfdmlpZl9pc3Bfc2V0X3NlbGVjdGlvbihzdHJ1Y3QgdjRs Ml9zdWJkZXYgKnNkLA0KPiA+ICsJCQkJCSAgIHN0cnVjdCB2NGwyX3N1YmRldl9zdGF0ZQ0KPiAq c2Rfc3RhdGUsDQo+ID4gKwkJCQkJICAgc3RydWN0IHY0bDJfc3ViZGV2X3NlbGVjdGlvbiAqc2Vs KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2ID0gKChzdHJ1Y3Qg aXNwX3N1YmRldiAqKXNkKS0+dmlpZl9kZXY7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1l Zm10ICpzaW5rX2ZtdDsNCj4gPiArCXN0cnVjdCB2NGwyX3JlY3QgKnJlY3Q7DQo+ID4gKwlpbnQg cmV0ID0gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwltdXRleF9sb2NrKCZ2aWlmX2Rldi0+aXNwX3N1 YmRldi5vcHNfbG9jayk7DQo+ID4gKwkvKiBvbmx5IHNvdXJjZTo6c2VsZWN0aW9uOjpjcm9wIGlz IHdyaXRhYmxlICovDQo+ID4gKwlpZiAoc2VsLT5wYWQgPT0gMSkgew0KPiA+ICsJCXN3aXRjaCAo c2VsLT50YXJnZXQpIHsNCj4gPiArCQljYXNlIFY0TDJfU0VMX1RHVF9DUk9QOiB7DQo+ID4gKwkJ CS8qIFRPRE86IHZhbGlkYXRpb24gKi8NCj4gPiArCQkJcmVjdCA9IHZpc2NvbnRpX3ZpaWZfaXNw X2dldF9wYWRfY3JvcChzZCwgc2Rfc3RhdGUsIDEsDQo+IHNlbC0+d2hpY2gpOw0KPiA+ICsJCQkq cmVjdCA9IHNlbC0+cjsNCj4gPiArCQkJc2lua19mbXQgPSB2aXNjb250aV92aWlmX2lzcF9nZXRf cGFkX2ZtdChzZCwgc2Rfc3RhdGUsDQo+IDEsIHNlbC0+d2hpY2gpOw0KPiA+ICsJCQlzaW5rX2Zt dC0+d2lkdGggPSBzZWwtPnIud2lkdGg7DQo+ID4gKwkJCXNpbmtfZm10LT5oZWlnaHQgPSBzZWwt PnIuaGVpZ2h0Ow0KPiA+ICsJCQlyZXQgPSAwOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQl9DQo+ ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZ2aWlmX2Rldi0+aXNwX3N1YmRl di5vcHNfbG9jayk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIGNvbnN0IHN0cnVjdCBtZWRpYV9lbnRpdHlfb3BlcmF0aW9ucyB2aXNjb250aV92 aWlmX2lzcF9tZWRpYV9vcHMgPSB7DQo+ID4gKwkubGlua192YWxpZGF0ZSA9IHY0bDJfc3ViZGV2 X2xpbmtfdmFsaWRhdGUsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IHY0bDJfc3ViZGV2X3BhZF9vcHMgdmlzY29udGlfdmlpZl9pc3BfcGFkX29wcyA9IHsNCj4gPiAr CS5lbnVtX21idXNfY29kZSA9IHZpc2NvbnRpX3ZpaWZfaXNwX2VudW1fbWJ1c19jb2RlLA0KPiA+ ICsJLmdldF9zZWxlY3Rpb24gPSB2aXNjb250aV92aWlmX2lzcF9nZXRfc2VsZWN0aW9uLA0KPiA+ ICsJLnNldF9zZWxlY3Rpb24gPSB2aXNjb250aV92aWlmX2lzcF9zZXRfc2VsZWN0aW9uLA0KPiA+ ICsJLmluaXRfY2ZnID0gdmlzY29udGlfdmlpZl9pc3BfaW5pdF9jb25maWcsDQo+ID4gKwkuZ2V0 X2ZtdCA9IHZpc2NvbnRpX3ZpaWZfaXNwX2dldF9mbXQsDQo+ID4gKwkuc2V0X2ZtdCA9IHZpc2Nv bnRpX3ZpaWZfaXNwX3NldF9mbXQsDQo+ID4gKwkubGlua192YWxpZGF0ZSA9IHY0bDJfc3ViZGV2 X2xpbmtfdmFsaWRhdGVfZGVmYXVsdCwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIHZpc2NvbnRpX3ZpaWZfaXNwX3ZpZGVvX29w cyA9IHsNCj4gPiArCS5zX3N0cmVhbSA9IHZpc2NvbnRpX3ZpaWZfaXNwX3Nfc3RyZWFtLA0KPiA+ ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgdmlz Y29udGlfdmlpZl9pc3Bfb3BzID0gew0KPiA+ICsJLnZpZGVvID0gJnZpc2NvbnRpX3ZpaWZfaXNw X3ZpZGVvX29wcywNCj4gPiArCS5wYWQgPSAmdmlzY29udGlfdmlpZl9pc3BfcGFkX29wcywNCj4g PiArfTsNCj4gPiArDQo+ID4gKy8qIC0tLS0tIGNvbnRyb2wgaGFuZGxlciAtLS0tLSAqLw0KPiA+ ICsjZGVmaW5lIFY0TDJfQ0lEX1ZJU0NPTlRJX1ZJSUZfSVNQX0JBU0UNCj4gKFY0TDJfQ0lEX1VT RVJfQkFTRSArIDB4MTAwMCkNCj4gPiArI2RlZmluZSBWNEwyX0NJRF9WSVNDT05USV9WSUlGX0lT UF9MMV9TRVRfSU5QVVRfTU9ERQ0KPiAoVjRMMl9DSURfVklTQ09OVElfVklJRl9JU1BfQkFTRSAr IDMpDQo+ID4gKyNkZWZpbmUNCj4gVjRMMl9DSURfVklTQ09OVElfVklJRl9JU1BfTDFfU0VUX0JM QUNLX0xFVkVMX0NPUlJFQ1RJT04NCj4gXA0KPiA+ICsJKFY0TDJfQ0lEX1ZJU0NPTlRJX1ZJSUZf SVNQX0JBU0UgKyA0KQ0KPiA+ICsjZGVmaW5lIFY0TDJfQ0lEX1ZJU0NPTlRJX1ZJSUZfSVNQX0wx X1NFVF9NQUlOX1BST0NFU1MNCj4gKFY0TDJfQ0lEX1ZJU0NPTlRJX1ZJSUZfSVNQX0JBU0UgKyA1 KQ0KPiA+ICsjZGVmaW5lIFY0TDJfQ0lEX1ZJU0NPTlRJX1ZJSUZfSVNQX0wxX1NFVF9BV0INCj4g KFY0TDJfQ0lEX1ZJU0NPTlRJX1ZJSUZfSVNQX0JBU0UgKyA2KQ0KPiA+ICsjZGVmaW5lIFY0TDJf Q0lEX1ZJU0NPTlRJX1ZJSUZfSVNQX0wxX1NFVF9IRFJDDQo+IChWNEwyX0NJRF9WSVNDT05USV9W SUlGX0lTUF9CQVNFICsgNykNCj4gPiArI2RlZmluZQ0KPiBWNEwyX0NJRF9WSVNDT05USV9WSUlG X0lTUF9MMV9TRVRfSU1HX1FVQUxJVFlfQURKVVNUTUVOVA0KPiBcDQo+ID4gKwkoVjRMMl9DSURf VklTQ09OVElfVklJRl9JU1BfQkFTRSArIDgpDQo+ID4gKyNkZWZpbmUNCj4gVjRMMl9DSURfVklT Q09OVElfVklJRl9JU1BfQ1NJMlJYX0dFVF9DQUxJQlJBVElPTl9TVEFUVVMNCj4gXA0KPiA+ICsJ KFY0TDJfQ0lEX1ZJU0NPTlRJX1ZJSUZfSVNQX0JBU0UgKyA5KQ0KPiA+ICsjZGVmaW5lIFY0TDJf Q0lEX1ZJU0NPTlRJX1ZJSUZfSVNQX0NTSTJSWF9HRVRfRVJSX1NUQVRVUw0KPiAoVjRMMl9DSURf VklTQ09OVElfVklJRl9JU1BfQkFTRSArIDEwKQ0KPiA+ICsjZGVmaW5lIFY0TDJfQ0lEX1ZJU0NP TlRJX1ZJSUZfSVNQX0wyX1NFVF9VTkRJU1QNCj4gKFY0TDJfQ0lEX1ZJU0NPTlRJX1ZJSUZfSVNQ X0JBU0UgKyAxMSkNCj4gPiArI2RlZmluZSBWNEwyX0NJRF9WSVNDT05USV9WSUlGX0lTUF9MMl9T RVRfUk9JDQo+IChWNEwyX0NJRF9WSVNDT05USV9WSUlGX0lTUF9CQVNFICsgMTIpDQo+ID4gKyNk ZWZpbmUgVjRMMl9DSURfVklTQ09OVElfVklJRl9JU1BfTDJfU0VUX0NST1ANCj4gKFY0TDJfQ0lE X1ZJU0NPTlRJX1ZJSUZfSVNQX0JBU0UgKyAxMykNCj4gPiArI2RlZmluZSBDT01QT1VORF9UWVBF X1NBTVBMRTAxDQo+IDB4MDI4MA0KPiA+ICsNCj4gPiAraW50IHZpaWZfbDFfc2V0X2lucHV0X21v ZGUoc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldiwNCj4gPiArCQkJICAgc3RydWN0IHZpaWZf bDFfaW5wdXRfbW9kZV9jb25maWcgKmlucHV0X21vZGUpOw0KPiA+ICtpbnQgdmlpZl9sMV9zZXRf YmxhY2tfbGV2ZWxfY29ycmVjdGlvbihzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2LA0KPiA+ ICsJCQkJICAgICAgIHN0cnVjdA0KPiB2aWlmX2wxX2JsYWNrX2xldmVsX2NvcnJlY3Rpb25fY29u ZmlnICpibGMpOw0KPiA+ICtpbnQgdmlpZl9sMV9zZXRfbWFpbl9wcm9jZXNzKHN0cnVjdCB2aWlm X2RldmljZSAqdmlpZl9kZXYsDQo+ID4gKwkJCSAgICAgc3RydWN0IHZpaWZfbDFfbWFpbl9wcm9j ZXNzX2NvbmZpZyAqbXBybyk7DQo+ID4gK2ludCB2aWlmX2wxX3NldF9hd2Ioc3RydWN0IHZpaWZf ZGV2aWNlICp2aWlmX2Rldiwgc3RydWN0IHZpaWZfbDFfYXdiX2NvbmZpZw0KPiAqbDFfYXdiKTsN Cj4gPiAraW50IHZpaWZfbDFfc2V0X2hkcmMoc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2Rldiwg c3RydWN0IHZpaWZfbDFfaGRyY19jb25maWcNCj4gKmhkcmMpOw0KPiA+ICtpbnQgdmlpZl9sMV9z ZXRfaW1nX3F1YWxpdHlfYWRqdXN0bWVudChzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2LA0K PiA+ICsJCQkJICAgICAgIHN0cnVjdA0KPiB2aWlmX2wxX2ltZ19xdWFsaXR5X2FkanVzdG1lbnRf Y29uZmlnICppbWdfcXVhbGl0eSk7DQo+ID4gK2ludCB2aWlmX2NzaTJyeF9nZXRfY2FsaWJyYXRp b25fc3RhdHVzKA0KPiA+ICsJc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldiwNCj4gPiArCXN0 cnVjdCB2aWlmX2NzaTJyeF9kcGh5X2NhbGlicmF0aW9uX3N0YXR1cyAqY2FsaWJyYXRpb25fc3Rh dHVzKTsNCj4gPiAraW50IHZpaWZfY3NpMnJ4X2dldF9lcnJfc3RhdHVzKHN0cnVjdCB2aWlmX2Rl dmljZSAqdmlpZl9kZXYsDQo+ID4gKwkJCSAgICAgICBzdHJ1Y3QgdmlpZl9jc2kycnhfZXJyX3N0 YXR1cyAqY3NpX2Vycik7DQo+ID4gK2ludCB2aWlmX2wyX3NldF91bmRpc3Qoc3RydWN0IHZpaWZf ZGV2aWNlICp2aWlmX2Rldiwgc3RydWN0DQo+IHZpaWZfbDJfdW5kaXN0X2NvbmZpZyAqdW5kaXN0 KTsNCj4gPiAraW50IHZpaWZfbDJfc2V0X3JvaShzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2 LCBzdHJ1Y3QgdmlpZl9sMl9yb2lfY29uZmlnICpyb2kpOw0KPiA+ICtpbnQgdmlpZl9sMl9zZXRf Y3JvcChzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2LCBzdHJ1Y3QgdmlpZl9sMl9jcm9wX2Nv bmZpZw0KPiAqbDJfY3JvcCk7DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZpaWZfbDJfc2V0X3Jv aV93cmFwKHN0cnVjdCB2aWlmX2RldmljZSAqdmlpZl9kZXYsIHN0cnVjdA0KPiB2aWlmX2wyX3Jv aV9jb25maWcgKnJvaSkNCj4gPiArew0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlyZXQg PSB2aWlmX2wyX3NldF9yb2kodmlpZl9kZXYsIHJvaSk7DQo+ID4gKwlpZiAoIXJldCkgew0KPiA+ ICsJCXN0cnVjdCB2NGwyX3JlY3QgKnJlY3Q7DQo+ID4gKwkJcmVjdCA9DQo+IHZpc2NvbnRpX3Zp aWZfaXNwX2dldF9wYWRfY29tcG9zZSgmdmlpZl9kZXYtPmlzcF9zdWJkZXYuc2QsIE5VTEwsIDAs DQo+ID4gKw0KPiBWNEwyX1NVQkRFVl9GT1JNQVRfQUNUSVZFKTsNCj4gPiArCQlyZWN0LT50b3Ag PSAwOw0KPiA+ICsJCXJlY3QtPmxlZnQgPSAwOw0KPiA+ICsJCXJlY3QtPndpZHRoID0gcm9pLT5j b3JyZWN0ZWRfaHNpemU7DQo+ID4gKwkJcmVjdC0+aGVpZ2h0ID0gcm9pLT5jb3JyZWN0ZWRfdnNp emU7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIGludCB2aXNjb250aV92aWlmX2lzcF9zZXRfY3RybChzdHJ1Y3QgdjRsMl9jdHJs ICpjdHJsKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2ID0gY3Ry bC0+cHJpdjsNCj4gPiArDQo+ID4gKwlwcl9pbmZvKCJpc3Bfc2V0X2N0cmw6ICVzIiwgY3RybC0+ bmFtZSk7DQo+ID4gKwlpZiAoIXZpaWZfZGV2LT5pc19wb3dlcmVkKSB7DQo+ID4gKwkJcHJfaW5m bygid2FybmluZzogdmlzY29udGkgdmlpZiBIVyBpcyBub3QgcG93ZXJlZCIpOw0KPiA+ICsJCXJl dHVybiAwOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXN3aXRjaCAoY3RybC0+aWQpIHsNCj4gPiAr CWNhc2UgVjRMMl9DSURfVklTQ09OVElfVklJRl9JU1BfTDFfU0VUX0lOUFVUX01PREU6DQo+ID4g KwkJcmV0dXJuIHZpaWZfbDFfc2V0X2lucHV0X21vZGUodmlpZl9kZXYsIGN0cmwtPnBfbmV3LnAp Ow0KPiA+ICsJY2FzZQ0KPiBWNEwyX0NJRF9WSVNDT05USV9WSUlGX0lTUF9MMV9TRVRfQkxBQ0tf TEVWRUxfQ09SUkVDVElPTjoNCj4gPiArCQlyZXR1cm4gdmlpZl9sMV9zZXRfYmxhY2tfbGV2ZWxf Y29ycmVjdGlvbih2aWlmX2RldiwNCj4gY3RybC0+cF9uZXcucCk7DQo+ID4gKwljYXNlIFY0TDJf Q0lEX1ZJU0NPTlRJX1ZJSUZfSVNQX0wxX1NFVF9NQUlOX1BST0NFU1M6DQo+ID4gKwkJcmV0dXJu IHZpaWZfbDFfc2V0X21haW5fcHJvY2Vzcyh2aWlmX2RldiwgY3RybC0+cF9uZXcucCk7DQo+ID4g KwljYXNlIFY0TDJfQ0lEX1ZJU0NPTlRJX1ZJSUZfSVNQX0wxX1NFVF9BV0I6DQo+ID4gKwkJcmV0 dXJuIHZpaWZfbDFfc2V0X2F3Yih2aWlmX2RldiwgY3RybC0+cF9uZXcucCk7DQo+ID4gKwljYXNl IFY0TDJfQ0lEX1ZJU0NPTlRJX1ZJSUZfSVNQX0wxX1NFVF9IRFJDOg0KPiA+ICsJCXJldHVybiB2 aWlmX2wxX3NldF9oZHJjKHZpaWZfZGV2LCBjdHJsLT5wX25ldy5wKTsNCj4gPiArCWNhc2UNCj4g VjRMMl9DSURfVklTQ09OVElfVklJRl9JU1BfTDFfU0VUX0lNR19RVUFMSVRZX0FESlVTVE1FTlQ6 DQo+ID4gKwkJcmV0dXJuIHZpaWZfbDFfc2V0X2ltZ19xdWFsaXR5X2FkanVzdG1lbnQodmlpZl9k ZXYsDQo+IGN0cmwtPnBfbmV3LnApOw0KPiA+ICsJY2FzZSBWNEwyX0NJRF9WSVNDT05USV9WSUlG X0lTUF9MMl9TRVRfVU5ESVNUOg0KPiA+ICsJCXJldHVybiB2aWlmX2wyX3NldF91bmRpc3Qodmlp Zl9kZXYsIGN0cmwtPnBfbmV3LnApOw0KPiA+ICsJY2FzZSBWNEwyX0NJRF9WSVNDT05USV9WSUlG X0lTUF9MMl9TRVRfUk9JOg0KPiA+ICsJCXJldHVybiB2aWlmX2wyX3NldF9yb2lfd3JhcCh2aWlm X2RldiwgY3RybC0+cF9uZXcucCk7DQo+ID4gKwljYXNlIFY0TDJfQ0lEX1ZJU0NPTlRJX1ZJSUZf SVNQX0wyX1NFVF9DUk9QOg0KPiA+ICsJCXJldHVybiB2aWlmX2wyX3NldF9jcm9wKHZpaWZfZGV2 LCBjdHJsLT5wX25ldy5wKTsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJcHJfaW5mbygidW5rbm93 bl9jdHJsOiBpZD0lMDhYIHZhbD0lZCIsIGN0cmwtPmlkLCBjdHJsLT52YWwpOw0KPiA+ICsJCWJy ZWFrOw0KPiA+ICsJfQ0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyBpbnQgdmlzY29udGlfdmlpZl9pc3BfZ2V0X2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3RybCkN Cj4gPiArew0KPiA+ICsJc3RydWN0IHZpaWZfZGV2aWNlICp2aWlmX2RldiA9IGN0cmwtPnByaXY7 DQo+ID4gKw0KPiA+ICsJcHJfaW5mbygiaXNwX2dldF9jdHJsOiAlcyIsIGN0cmwtPm5hbWUpOw0K PiA+ICsJaWYgKCF2aWlmX2Rldi0+aXNfcG93ZXJlZCkgew0KPiA+ICsJCXByX2luZm8oIndhcm5p bmc6IHZpc2NvbnRpIHZpaWYgSFcgaXMgbm90IHBvd2VyZWQiKTsNCj4gPiArCQlyZXR1cm4gMDsN Cj4gPiArCX0NCj4gPiArDQo+ID4gKwlzd2l0Y2ggKGN0cmwtPmlkKSB7DQo+ID4gKwljYXNlDQo+ IFY0TDJfQ0lEX1ZJU0NPTlRJX1ZJSUZfSVNQX0NTSTJSWF9HRVRfQ0FMSUJSQVRJT05fU1RBVFVT Og0KPiA+ICsJCXJldHVybiB2aWlmX2NzaTJyeF9nZXRfY2FsaWJyYXRpb25fc3RhdHVzKHZpaWZf ZGV2LA0KPiBjdHJsLT5wX25ldy5wKTsNCj4gPiArCWNhc2UgVjRMMl9DSURfVklTQ09OVElfVklJ Rl9JU1BfQ1NJMlJYX0dFVF9FUlJfU1RBVFVTOg0KPiA+ICsJCXJldHVybiB2aWlmX2NzaTJyeF9n ZXRfZXJyX3N0YXR1cyh2aWlmX2RldiwgY3RybC0+cF9uZXcucCk7DQo+ID4gKwlkZWZhdWx0Og0K PiA+ICsJCXByX2luZm8oInVua25vd25fY3RybDogaWQ9JTA4WCB2YWw9JWQiLCBjdHJsLT5pZCwg Y3RybC0+dmFsKTsNCj4gPiArCQlicmVhazsNCj4gPiArCX0NCj4gPiArCXJldHVybiAwOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgdmlzY29u dGlfdmlpZl9pc3BfY3RybF9vcHMgPSB7DQo+ID4gKwkuZ192b2xhdGlsZV9jdHJsID0gdmlzY29u dGlfdmlpZl9pc3BfZ2V0X2N0cmwsDQo+ID4gKwkuc19jdHJsID0gdmlzY29udGlfdmlpZl9pc3Bf c2V0X2N0cmwsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCB2aXNjb250aV92aWlm X2lzcF9jdXN0b21fY3RybF9lcXVhbChjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsLA0KPiB1 MzIgaWR4LA0KPiA+ICsJCQkJCQl1bmlvbiB2NGwyX2N0cmxfcHRyIHB0cjEsDQo+IHVuaW9uIHY0 bDJfY3RybF9wdHIgcHRyMikNCj4gPiArew0KPiA+ICsJcmV0dXJuICFtZW1jbXAocHRyMS5wX2Nv bnN0LCBwdHIyLnBfY29uc3QsIGN0cmwtPmVsZW1fc2l6ZSk7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyB2b2lkIHZpc2NvbnRpX3ZpaWZfaXNwX2N1c3RvbV9jdHJsX2luaXQoY29uc3Qgc3Ry dWN0IHY0bDJfY3RybCAqY3RybCwgdTMyDQo+IGlkeCwNCj4gPiArCQkJCQkgICAgICAgdW5pb24g djRsMl9jdHJsX3B0ciBwdHIpDQo+ID4gK3sNCj4gPiArCWlmIChjdHJsLT5wX2RlZi5wX2NvbnN0 KQ0KPiA+ICsJCW1lbWNweShwdHIucCwgY3RybC0+cF9kZWYucF9jb25zdCwgY3RybC0+ZWxlbV9z aXplKTsNCj4gPiArCWVsc2UNCj4gPiArCQltZW1zZXQocHRyLnAsIDAsIGN0cmwtPmVsZW1fc2l6 ZSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHZpc2NvbnRpX3ZpaWZfaXNwX2N1 c3RvbV9jdHJsX2xvZyhjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQ0KPiA+ICt7DQo+ID4g Kwlwcl9jb250KCJ2aWlmIHNwZWNpZmljOiAlcyIsIGN0cmwtPm5hbWUpOw0KPiA+ICsJcmV0dXJu Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZpc2NvbnRpX3ZpaWZfaXNwX2N1c3Rv bV9jdHJsX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwsDQo+IHUzMiBpZHgs DQo+ID4gKwkJCQkJCSAgdW5pb24gdjRsMl9jdHJsX3B0ciBwdHIpDQo+ID4gK3sNCj4gPiArCXBy X2luZm8oInN0ZF92YWxpZGF0ZTogJXMiLCBjdHJsLT5uYW1lKTsNCj4gPiArCXJldHVybiAwOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF90eXBlX29w cyBjdXN0b21fdHlwZV9vcHMgPSB7DQo+ID4gKwkuZXF1YWwgPSB2aXNjb250aV92aWlmX2lzcF9j dXN0b21fY3RybF9lcXVhbCwNCj4gPiArCS5pbml0ID0gdmlzY29udGlfdmlpZl9pc3BfY3VzdG9t X2N0cmxfaW5pdCwNCj4gPiArCS5sb2cgPSB2aXNjb250aV92aWlmX2lzcF9jdXN0b21fY3RybF9s b2csDQo+ID4gKwkudmFsaWRhdGUgPSB2aXNjb250aV92aWlmX2lzcF9jdXN0b21fY3RybF92YWxp ZGF0ZSwNCj4gPiArfTsNCj4gPiArDQo+ID4gKyNkZWZpbmUgQ1RSTF9DT05GSUdfREVGQVVMVF9F TlRSWQ0KPiBcDQo+ID4gKwkub3BzID0gJnZpc2NvbnRpX3ZpaWZfaXNwX2N0cmxfb3BzLCAudHlw ZV9vcHMgPSAmY3VzdG9tX3R5cGVfb3BzLA0KPiBcDQo+ID4gKwkudHlwZSA9IENPTVBPVU5EX1RZ UEVfU0FNUExFMDEsIC5mbGFncyA9DQo+IFY0TDJfQ1RSTF9GTEFHX0VYRUNVVEVfT05fV1JJVEUN Cj4gPiArDQo+ID4gKyNkZWZpbmUgQ1RSTF9DT05GSUdfUkRPTkxZX0VOVFJZDQo+IFwNCj4gPiAr CS5vcHMgPSAmdmlzY29udGlfdmlpZl9pc3BfY3RybF9vcHMsIC50eXBlX29wcyA9ICZjdXN0b21f dHlwZV9vcHMsDQo+IFwNCj4gPiArCS50eXBlID0gQ09NUE9VTkRfVFlQRV9TQU1QTEUwMSwgLmZs YWdzID0NCj4gVjRMMl9DVFJMX0ZMQUdfVk9MQVRJTEUNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgdjRsMl9jdHJsX2NvbmZpZyB2aXNjb250aV92aWlmX2lzcF9jdHJsX2NvbmZpZ1td ID0gew0KPiA+ICsJLyogTDFfU0VUX0lOUFVUX01PREUgKi8gew0KPiA+ICsJCUNUUkxfQ09ORklH X0RFRkFVTFRfRU5UUlksDQo+ID4gKwkJLmlkID0gVjRMMl9DSURfVklTQ09OVElfVklJRl9JU1Bf TDFfU0VUX0lOUFVUX01PREUsDQo+ID4gKwkJLm5hbWUgPSAibDFfaW5wdXRfbW9kZSIsDQo+ID4g KwkJLnBfZGVmID0geyAucF9jb25zdCA9IE5VTEwgfSwNCj4gPiArCQkuZWxlbV9zaXplID0gc2l6 ZW9mKHN0cnVjdCB2aWlmX2wxX2lucHV0X21vZGVfY29uZmlnKSwNCj4gPiArCX0sDQo+ID4gKwkv KiBMMV9TRVRfQkxBQ0tfTEVWRUxfQ09SUkVDVElPTiAqLw0KPiA+ICsJew0KPiA+ICsJCUNUUkxf Q09ORklHX0RFRkFVTFRfRU5UUlksDQo+ID4gKwkJLmlkID0NCj4gVjRMMl9DSURfVklTQ09OVElf VklJRl9JU1BfTDFfU0VUX0JMQUNLX0xFVkVMX0NPUlJFQ1RJT04sDQo+ID4gKwkJLm5hbWUgPSAi bDFfYmxhY2tfbGV2ZWxfY29ycmVjdGlvbiIsDQo+ID4gKwkJLnBfZGVmID0geyAucF9jb25zdCA9 IE5VTEwgfSwNCj4gPiArCQkuZWxlbV9zaXplID0gc2l6ZW9mKHN0cnVjdA0KPiB2aWlmX2wxX2Js YWNrX2xldmVsX2NvcnJlY3Rpb25fY29uZmlnKSwNCj4gPiArCX0sDQo+ID4gKwkvKiBMMV9TRVRf TUFJTl9QUk9DRVNTICovDQo+ID4gKwl7DQo+ID4gKwkJQ1RSTF9DT05GSUdfREVGQVVMVF9FTlRS WSwNCj4gPiArCQkuaWQgPQ0KPiBWNEwyX0NJRF9WSVNDT05USV9WSUlGX0lTUF9MMV9TRVRfTUFJ Tl9QUk9DRVNTLA0KPiA+ICsJCS5uYW1lID0gImwxX21haW5fcHJvY2VzcyIsDQo+ID4gKwkJLnBf ZGVmID0geyAucF9jb25zdCA9IE5VTEwgfSwNCj4gPiArCQkuZWxlbV9zaXplID0gc2l6ZW9mKHN0 cnVjdCB2aWlmX2wxX21haW5fcHJvY2Vzc19jb25maWcpLA0KPiA+ICsJfSwNCj4gPiArCS8qIEwx X1NFVF9BV0IgKi8NCj4gPiArCXsNCj4gPiArCQlDVFJMX0NPTkZJR19ERUZBVUxUX0VOVFJZLA0K PiA+ICsJCS5pZCA9IFY0TDJfQ0lEX1ZJU0NPTlRJX1ZJSUZfSVNQX0wxX1NFVF9BV0IsDQo+ID4g KwkJLm5hbWUgPSAibDFfYXdiIiwNCj4gPiArCQkucF9kZWYgPSB7IC5wX2NvbnN0ID0gTlVMTCB9 LA0KPiA+ICsJCS5lbGVtX3NpemUgPSBzaXplb2Yoc3RydWN0IHZpaWZfbDFfYXdiX2NvbmZpZyks DQo+ID4gKwl9LA0KPiA+ICsJLyogTDFfU0VUX0hEUkMgKi8NCj4gPiArCXsNCj4gPiArCQlDVFJM X0NPTkZJR19ERUZBVUxUX0VOVFJZLA0KPiA+ICsJCS5pZCA9IFY0TDJfQ0lEX1ZJU0NPTlRJX1ZJ SUZfSVNQX0wxX1NFVF9IRFJDLA0KPiA+ICsJCS5uYW1lID0gImwxX2hkcmMiLA0KPiA+ICsJCS5w X2RlZiA9IHsgLnBfY29uc3QgPSBOVUxMIH0sDQo+ID4gKwkJLmVsZW1fc2l6ZSA9IHNpemVvZihz dHJ1Y3QgdmlpZl9sMV9oZHJjX2NvbmZpZyksDQo+ID4gKwl9LA0KPiA+ICsJLyogTDFfU0VUX0lN R19RVUFMSVRZX0FESlVTVE1FTlQgKi8NCj4gPiArCXsNCj4gPiArCQlDVFJMX0NPTkZJR19ERUZB VUxUX0VOVFJZLA0KPiA+ICsJCS5pZCA9DQo+IFY0TDJfQ0lEX1ZJU0NPTlRJX1ZJSUZfSVNQX0wx X1NFVF9JTUdfUVVBTElUWV9BREpVU1RNRU5ULA0KPiA+ICsJCS5uYW1lID0gImwxX2ltZ19xdWFs aXR5X2FkanVzdG1lbnQiLA0KPiA+ICsJCS5wX2RlZiA9IHsgLnBfY29uc3QgPSBOVUxMIH0sDQo+ ID4gKwkJLmVsZW1fc2l6ZSA9IHNpemVvZihzdHJ1Y3QNCj4gdmlpZl9sMV9pbWdfcXVhbGl0eV9h ZGp1c3RtZW50X2NvbmZpZyksDQo+ID4gKwl9LA0KPiA+ICsJLyogQ1NJMlJYX0dFVF9DQUxJQlJB VElPTl9TVEFUVVMgKi8NCj4gPiArCXsNCj4gPiArCQlDVFJMX0NPTkZJR19SRE9OTFlfRU5UUlks DQo+ID4gKwkJLmlkID0NCj4gVjRMMl9DSURfVklTQ09OVElfVklJRl9JU1BfQ1NJMlJYX0dFVF9D QUxJQlJBVElPTl9TVEFUVVMsDQo+ID4gKwkJLm5hbWUgPSAiY3NpMnJ4X2NhbGlicmF0aW9uX3N0 YXR1cyIsDQo+ID4gKwkJLnBfZGVmID0geyAucF9jb25zdCA9IE5VTEwgfSwNCj4gPiArCQkuZWxl bV9zaXplID0gc2l6ZW9mKHN0cnVjdA0KPiB2aWlmX2NzaTJyeF9kcGh5X2NhbGlicmF0aW9uX3N0 YXR1cyksDQo+ID4gKwl9LA0KPiA+ICsJLyogQ1NJMlJYX0dFVF9FUlJfU1RBVFVTICovDQo+ID4g Kwl7DQo+ID4gKwkJQ1RSTF9DT05GSUdfUkRPTkxZX0VOVFJZLA0KPiA+ICsJCS5pZCA9DQo+IFY0 TDJfQ0lEX1ZJU0NPTlRJX1ZJSUZfSVNQX0NTSTJSWF9HRVRfRVJSX1NUQVRVUywNCj4gPiArCQku bmFtZSA9ICJjc2kycnhfZXJyX3N0YXR1cyIsDQo+ID4gKwkJLnBfZGVmID0geyAucF9jb25zdCA9 IE5VTEwgfSwNCj4gPiArCQkuZWxlbV9zaXplID0gc2l6ZW9mKHN0cnVjdCB2aWlmX2NzaTJyeF9l cnJfc3RhdHVzKSwNCj4gPiArCX0sDQo+ID4gKwkvKiBMMl9TRVRfVU5ESVNUICovDQo+ID4gKwl7 DQo+ID4gKwkJQ1RSTF9DT05GSUdfREVGQVVMVF9FTlRSWSwNCj4gPiArCQkuaWQgPSBWNEwyX0NJ RF9WSVNDT05USV9WSUlGX0lTUF9MMl9TRVRfVU5ESVNULA0KPiA+ICsJCS5uYW1lID0gImwyX3Vu ZGlzdCIsDQo+ID4gKwkJLnBfZGVmID0geyAucF9jb25zdCA9IE5VTEwgfSwNCj4gPiArCQkuZWxl bV9zaXplID0gc2l6ZW9mKHN0cnVjdCB2aWlmX2wyX3VuZGlzdF9jb25maWcpLA0KPiA+ICsJfSwN Cj4gPiArCS8qIEwyX1NFVF9ST0kgKi8NCj4gPiArCXsNCj4gPiArCQlDVFJMX0NPTkZJR19ERUZB VUxUX0VOVFJZLA0KPiA+ICsJCS5pZCA9IFY0TDJfQ0lEX1ZJU0NPTlRJX1ZJSUZfSVNQX0wyX1NF VF9ST0ksDQo+ID4gKwkJLm5hbWUgPSAibDJfcm9pIiwNCj4gPiArCQkucF9kZWYgPSB7IC5wX2Nv bnN0ID0gTlVMTCB9LA0KPiA+ICsJCS5lbGVtX3NpemUgPSBzaXplb2Yoc3RydWN0IHZpaWZfbDJf cm9pX2NvbmZpZyksDQo+ID4gKwl9LA0KPiA+ICsJLyogTDJfU0VUX0NST1AgKi8NCj4gPiArCXsN Cj4gPiArCQlDVFJMX0NPTkZJR19ERUZBVUxUX0VOVFJZLA0KPiA+ICsJCS5pZCA9IFY0TDJfQ0lE X1ZJU0NPTlRJX1ZJSUZfSVNQX0wyX1NFVF9DUk9QLA0KPiA+ICsJCS5uYW1lID0gImwyX2Nyb3Ai LA0KPiA+ICsJCS5wX2RlZiA9IHsgLnBfY29uc3QgPSBOVUxMIH0sDQo+ID4gKwkJLmVsZW1fc2l6 ZSA9IHNpemVvZihzdHJ1Y3QgdmlpZl9sMl9jcm9wX2NvbmZpZyksDQo+ID4gKwl9LA0KPiA+ICsN Cj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdmlzY29udGlfdmlpZl9pc3BfaW5pdF9j b250cm9scyhzdHJ1Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1 Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmN0cmxfaGFuZGxlciA9DQo+ICZ2aWlmX2Rldi0+aXNwX3N1 YmRldi5jdHJsX2hhbmRsZXI7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsJaW50IGk7DQo+ID4gKw0K PiA+ICsJcmV0ID0gdjRsMl9jdHJsX2hhbmRsZXJfaW5pdChjdHJsX2hhbmRsZXIsIDEwKTsNCj4g PiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKHZpaWZfZGV2LT5kZXYsICJmYWlsZWQgb24g djRsMl9jdHJsX2hhbmRsZXJfaW5pdCIpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodmlzY29udGlfdmlpZl9pc3Bf Y3RybF9jb25maWcpOyBpKyspIHsNCj4gPiArCQlzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsOw0KPiA+ ICsNCj4gPiArCQljdHJsID0gdjRsMl9jdHJsX25ld19jdXN0b20oY3RybF9oYW5kbGVyLA0KPiAm dmlzY29udGlfdmlpZl9pc3BfY3RybF9jb25maWdbaV0sDQo+ID4gKwkJCQkJICAgIHZpaWZfZGV2 KTsNCj4gPiArCQlpZiAoY3RybCA9PSBOVUxMKSB7DQo+ID4gKwkJCWRldl9lcnIodmlpZl9kZXYt PmRldiwgImZhaWxlZCB0byBhZGQgY3RybCBjcm9wOiAlZCIsDQo+IGN0cmxfaGFuZGxlci0+ZXJy b3IpOw0KPiA+ICsJCQlyZXR1cm4gY3RybF9oYW5kbGVyLT5lcnJvcjsNCj4gPiArCQl9DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsJdmlpZl9kZXYtPmlzcF9zdWJkZXYuc2QuY3RybF9oYW5kbGVyID0N Cj4gJnZpaWZfZGV2LT5pc3Bfc3ViZGV2LmN0cmxfaGFuZGxlcjsNCj4gPiArCXJldHVybiAwOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICsvKiAtLS0tLSByZWdpc3Rlci9yZW1vdmUgaXNwIHN1YmRldmlj ZSBub2RlIC0tLS0tICovDQo+ID4gK2ludCB2aXNjb250aV92aWlmX2lzcF9yZWdpc3RlcihzdHJ1 Y3QgdmlpZl9kZXZpY2UgKnZpaWZfZGV2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9zdWJk ZXZfc3RhdGUgc3RhdGUgPSB7DQo+ID4gKwkJLnBhZHMgPSB2aWlmX2Rldi0+aXNwX3N1YmRldi5w YWRfY2ZnLA0KPiA+ICsJfTsNCj4gPiArCXN0cnVjdCBtZWRpYV9wYWQgKnBhZHMgPSB2aWlmX2Rl di0+aXNwX3N1YmRldi5wYWRzOw0KPiA+ICsJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9ICZ2aWlm X2Rldi0+aXNwX3N1YmRldi5zZDsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJdmlpZl9k ZXYtPmlzcF9zdWJkZXYudmlpZl9kZXYgPSB2aWlmX2RldjsNCj4gPiArDQo+ID4gKwl2NGwyX3N1 YmRldl9pbml0KHNkLCAmdmlzY29udGlfdmlpZl9pc3Bfb3BzKTsNCj4gPiArCXNkLT5mbGFncyB8 PSBWNEwyX1NVQkRFVl9GTF9IQVNfREVWTk9ERTsNCj4gPiArCXNkLT5lbnRpdHkub3BzID0gJnZp c2NvbnRpX3ZpaWZfaXNwX21lZGlhX29wczsNCj4gPiArCXNkLT5lbnRpdHkuZnVuY3Rpb24gPSBN RURJQV9FTlRfRl9QUk9DX1ZJREVPX1NDQUxFUjsNCj4gPiArCXNkLT5vd25lciA9IFRISVNfTU9E VUxFOw0KPiA+ICsJc3Ryc2NweShzZC0+bmFtZSwgInZpc2NvbnRpLXZpaWY6aXNwIiwgc2l6ZW9m KHNkLT5uYW1lKSk7DQo+ID4gKw0KPiA+ICsJcGFkc1swXS5mbGFncyA9IE1FRElBX1BBRF9GTF9T SU5LIHwNCj4gTUVESUFfUEFEX0ZMX01VU1RfQ09OTkVDVDsNCj4gPiArCXBhZHNbMV0uZmxhZ3Mg PSBNRURJQV9QQURfRkxfU09VUkNFIHwNCj4gTUVESUFfUEFEX0ZMX01VU1RfQ09OTkVDVDsNCj4g PiArDQo+ID4gKwltdXRleF9pbml0KCZ2aWlmX2Rldi0+aXNwX3N1YmRldi5vcHNfbG9jayk7DQo+ ID4gKw0KPiA+ICsJdmlzY29udGlfdmlpZl9pc3BfaW5pdF9jb250cm9scyh2aWlmX2Rldik7DQo+ ID4gKw0KPiA+ICsJcmV0ID0gbWVkaWFfZW50aXR5X3BhZHNfaW5pdCgmc2QtPmVudGl0eSwgMiwg cGFkcyk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2Vycih2aWlmX2Rldi0+ZGV2LCAi RmFpbGVkIG9uIG1lZGlhX2VudGl0eV9wYWRzX2luaXRcbiIpOw0KPiA+ICsJCXJldHVybiByZXQ7 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2 KCZ2aWlmX2Rldi0+djRsMl9kZXYsIHNkKTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZf ZXJyKHZpaWZfZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVzaXplIElTUCBzdWJkZXZcbiIpOw0KPiA+ ICsJCWdvdG8gZXJyX2NsZWFudXBfbWVkaWFfZW50aXR5Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CXZpc2NvbnRpX3ZpaWZfaXNwX2luaXRfY29uZmlnKHNkLCAmc3RhdGUpOw0KPiA+ICsNCj4gPiAr CXJldHVybiAwOw0KPiA+ICsNCj4gPiArZXJyX2NsZWFudXBfbWVkaWFfZW50aXR5Og0KPiA+ICsJ bWVkaWFfZW50aXR5X2NsZWFudXAoJnNkLT5lbnRpdHkpOw0KPiA+ICsJcmV0dXJuIHJldDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArdm9pZCB2aXNjb250aV92aWlmX2lzcF91bnJlZ2lzdGVyKHN0cnVj dCB2aWlmX2RldmljZSAqdmlpZl9kZXYpDQo+ID4gK3sNCj4gPiArCXY0bDJfZGV2aWNlX3VucmVn aXN0ZXJfc3ViZGV2KCZ2aWlmX2Rldi0+aXNwX3N1YmRldi5zZCk7DQo+ID4gKwltZWRpYV9lbnRp dHlfY2xlYW51cCgmdmlpZl9kZXYtPmlzcF9zdWJkZXYuc2QuZW50aXR5KTsNCj4gPiArfQ0K