From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id DBA2AECAAD3 for ; Fri, 2 Sep 2022 00:05:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:From:References:Cc:To: Subject:Date:Message-ID:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=43fmWz+Ng3mt52fIMALhUAEvyWie/W5VkLKw0HG/UYc=; b=IBmw+dtahKsU6jkTdm5WkQZqjE BHtowjPXfXj9MWOqlzcheczi5I6LTVS3pCnJsE0XwvPgD+msE0bESpPF/iPI/FefobEt+0wr9ZKKE rZm362SP2ElvLoKTvKlChdmIaXZ/qwhuOIrE0xU1GAEUyHW6juo8D4u29kTi8YmHgui8nS9THSpmf R7HWUSaSIEKIKfZOhJGMh5TG+Q1dWeqt7lbCWKI7eMaCxl82ECSEsT30zPtxnqLFdadLKEoYRtKRD 32fr43ayvfj5UAUKQufnZUivfpnbXj24eknQfibv5Wg+QmXA7LRjIq8zafYaZ4m69InVowDR2YnPY pOzG+kzw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oTuAd-00G1MM-Em; Fri, 02 Sep 2022 00:04:27 +0000 Received: from mail-bn1nam07on2088.outbound.protection.outlook.com ([40.107.212.88] helo=NAM02-BN1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oTuAW-00G1Kk-Jz for linux-arm-kernel@lists.infradead.org; Fri, 02 Sep 2022 00:04:26 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CtQud74uHem+YitKNlohE14kDPVkim3e2Flf5BCbp+35se5vgNlSs7WfF6tDtYkRo+6ForSgLSJUiEh17FkGQHCDfLBHl/AUHMCt4SChWAVTdz3dWo3NSt/eM9U/3KMdVajVLr1WbFK98ngazrxfrmw98mvEbIFXTJn0Je+r2sZRrdPPNkxP2zhw5jReK/DbOcJGDM1fEhPt8cHT9Kbp93ppZz4+/MIrPK4ED4juARHE67dWv0qz8FMtC11BoX7KSQV1b9bOroXGA0M5mfTV3bMr2aIO0Q4qJyG3SJldtxA5G8tVooewikrYBYUn0HIPS8IItHGw5UxnCdv2ZF+E8w== 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=bvWmrL1/LijJLe6wjhEkqiH7KQU3uOpbAqNQqMlBvlU=; b=f2+szye6m5VjykIpac4mO1jFKnfCPIOfIiB7r0dRrrkOc4A5aFG14BhDAJmMi0wlVjBDppgCkjOa5jOVpuclntF7JHN+WitW2E+qXx60VUin4pKjfrFX2Nfk20RSZGIYaBB4of4ZIiEMmnqmYipblVCHXDr97HZd9EIMtCuGc+VvVsVVt4yTxEeHNkaDNvg8mIoZS0BBUI2MS+Zlp5n0KIncb4ECt7H+EyIiqiHn95yOWx3Eofku43QH2EiU7OyHnB7t9UOM5mUCGdcJgHM+8qpHnaPZZ8VCu5jjcJ2Rr0mptlTP60Wcs6Wibs6r/c0I1DlG4qyvqoTk5fLrTmgsyg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bvWmrL1/LijJLe6wjhEkqiH7KQU3uOpbAqNQqMlBvlU=; b=bk96MykrnZhpFhy0eVNxHta/9rZzGPErGvFKgCJek2wfPb5p34r34LZVHWpM9YP9QFsGvnWlLzo2SYkT5BQYGUE9uqOHX4MS++/rRpN7Q6ZEg5RUW2CRUVJCoUTawOJhrl30bcf4g3kO/k37iNtlurT+1VuPn+X38Gw+/wXJiYI= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; Received: from BY5PR12MB3683.namprd12.prod.outlook.com (2603:10b6:a03:1a5::16) by BY5PR12MB4065.namprd12.prod.outlook.com (2603:10b6:a03:202::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5588.10; Fri, 2 Sep 2022 00:04:12 +0000 Received: from BY5PR12MB3683.namprd12.prod.outlook.com ([fe80::3441:5a68:b4b7:e988]) by BY5PR12MB3683.namprd12.prod.outlook.com ([fe80::3441:5a68:b4b7:e988%6]) with mapi id 15.20.5566.021; Fri, 2 Sep 2022 00:04:12 +0000 Message-ID: Date: Thu, 1 Sep 2022 17:04:07 -0700 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.13.0 Subject: Re: [PATCH v9 6/6] drivers: remoteproc: Add Xilinx r5 remoteproc driver Content-Language: en-US To: Mathieu Poirier , Tanmay Shah Cc: bjorn.andersson@linaro.org, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, michal.simek@xilinx.com, ben.levinsky@xilinx.com, tanmay.shah@xilinx.com, michal.simek@amd.com, linux-remoteproc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org References: <20220708013955.2340449-1-tanmay.shah@amd.com> <20220708013955.2340449-7-tanmay.shah@amd.com> <20220901202517.GB626605@p14s> From: Tanmay Shah In-Reply-To: <20220901202517.GB626605@p14s> X-ClientProxiedBy: BY5PR20CA0033.namprd20.prod.outlook.com (2603:10b6:a03:1f4::46) To BY5PR12MB3683.namprd12.prod.outlook.com (2603:10b6:a03:1a5::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9fc42843-b0db-482a-a2ca-08da8c76aa7d X-MS-TrafficTypeDiagnostic: BY5PR12MB4065:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ARrZpB6fD5cfy6Paapwzus2w11BNpqNy2Ypz85eC/HcZbse4e91+BAoBWxx4S4dRZF/gPK2oReubjT4A/I958p7okj1rbHQc7BC2KXdWG4V67/8XUSkbXLZmwWrgTsT7pA1FrYEITSENLI2ams0A7meXBprSUJoVt7KYlro3eSqISsHftpO8xE6CYfWYCkff8rQKKD7dKcD+crSBzZHHWCE4LSvCrf5BwXdKEd5jrs2H0NHkgwaWABgnk5WlPPaLjelYmJLEBPe8JB7uiSWRAZdaifoyha9qRjfqEb3DqwXUZ3nzzr6jM/02/TZvd3lhPMnelMiqgl+xbU/R+bt1cQTgEUzt76/WtgT8X07faI0yKXuPZgrLTXkJlXt/I0DFhw85WUqt84sYBlYEzOPWy2ZcTCMQJ+oxAZ8R2x9plL91qg4jut97j+tel5SYFpk3gpuP77M+JbgWIWgtoxD6mwQVw3sFmpR/UkzOfmPuuBCjsslzhgysp5y9xpS/e7aQBHX/iq42EejmGnCj7inhH87SQ/4HzBGWo4DPxfNJQqxF12c+WInRe0J0wWaVG0aDTu6w120ML40RrLDgkcRKcw+g1hdKmLS5Hn0XyRUUYuKrG2WfSY+0+J1hW7jjNIVt1JBDQOPq8+jeooESuCgaek75yx8sWAFh4oXw+3/dpDFc5S+0H4ggsaxGYyOpaltjevvUeGpjWuZ2fAmgLNpdYlHkM1JYfvSRYtd+KZWW7oagVAb2m7xkrNVibZU56K6cBq+OIkjMgCzoAyex1/Shtok2J30BDgnXvjaWd5JRUPw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY5PR12MB3683.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(366004)(346002)(396003)(376002)(39860400002)(136003)(31696002)(316002)(38100700002)(26005)(6636002)(2616005)(30864003)(8936002)(2906002)(8676002)(66556008)(5660300002)(66946007)(4326008)(66476007)(186003)(110136005)(6486002)(83380400001)(6512007)(41300700001)(6666004)(478600001)(36756003)(6506007)(53546011)(31686004)(43740500002)(45980500001)(579004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VWZYdENidEF3ME95MjYwVDRtMU1LZmhsMk9Yci81Wm4yK2Vmb0ZGQk1qYzBP?= =?utf-8?B?M29XS1BSWCs5U2E4YUQwc3BFQ0FCU29ocVpER0JyUjAranRFTmh4ajFUOUUz?= =?utf-8?B?NzJDMjdXbWNocWZnZVlvenRrOFNwU1RvZ3p0MlBVbDI1UmlMdUFYbUF1ZW8x?= =?utf-8?B?NXdqUmpTRlZpeFJJSDRsSjRyR2xDaXBHa1YyYWI2M2ZHMUJKUHVvaWo4bWt1?= =?utf-8?B?REVXY0dJc01XMFNaaXliSGNGNVNXczI5WExmL1NEdlcxR2lqNnVzUnpjTEw3?= =?utf-8?B?VUpCR0s0RytlSFFYeDNqY0R4ZWx4T1ZvZU9CNzNaME1vWTVXeDBPbmw1K1Zk?= =?utf-8?B?SnNURThucVFKL29tdldCZHpUNkFvazBubE9va0paTmVHQlJOblBVVlpXQkZX?= =?utf-8?B?ZG1tTCthRXBlcVBOaStHY2t1K2tKUi9EaFFPZVFMYStDZGpKWHNqSUFyL3hN?= =?utf-8?B?dG5Kb1B4VWxiTVlXTHdRcmc4S1ZqcUxpZDR6d2RBQU13NzBlQ1ZZTWJKRVFi?= =?utf-8?B?b0hUMkc4eERVZXkwSkpqbnhoY0hzdEZGVCtKeEV2dDFCMVh5d2d0Q0FRcnN2?= =?utf-8?B?UzZKYWJoaWI5ZmFHcDBTL1NNRWtjT1ZNTFV5aEorR21Xa0lYUlAzb0hncm1h?= =?utf-8?B?bWR4M1hqcGQ4R2JwMmp2d3BWZFIrQTJVZDErOUhjZW5FMlJ0TTlWOWZkV3Vv?= =?utf-8?B?bkdUK29hd2gvOEdCRTlkam4xa3lNdy82SkVNK3lGMmg5OFFUMm9nMXd4dE1i?= =?utf-8?B?WGhpb3BGbEt3QUlicU5BMWk4WkJjY1c2Rm0wQVNJNytVczhZSnlGeXg3NCsw?= =?utf-8?B?bDZJR1p5TTNrWmIyM053ekJpMzRSakprcVY0NjZDTGJoSVJnNEZrbUVXUnh4?= =?utf-8?B?N2VNanNISVl0NmhPaDJJaXdIUm5jOWVibFVKK282TTZITlc4TDRDNjNDU205?= =?utf-8?B?SzFNcE5kRnVJSnRrT055Uk5rMFVXODhST2tORmxIdkxxNDRwZjFNMFZwZjR4?= =?utf-8?B?eXBCQjNQZ2pGR25sZ2RRcDhCOUsvK1hwUEt3bUxaNzZKd3h6U2dqcGczQ1VX?= =?utf-8?B?cnN5QWZsZWxsQTJCTU1jQmZGNm16blJaSWh2NzFaTE03VlE2MjlHcEVBVkQv?= =?utf-8?B?K3VXRnBrY1ZIbTFFMU0yYmNjalV4WVBtK0QrQ0ZCaG41anBrVEhlYkRaT1Y4?= =?utf-8?B?S3orZFFzdDFndnlUYWJiWGQyc2pmcFZRMW1LRlF4OVYvd0VxWU1DN2lrUFY1?= =?utf-8?B?UTlFUGNKOW1aZjRLZnMvOGM0RFFxcExOczJjbXNpdm5BMzByODBPL3lveXpM?= =?utf-8?B?UU5UVE1ZdVBNR3drWk41MVUrQXlQQyt6NVI4TVVVRWtrcmdWTys3ekwzWlZt?= =?utf-8?B?RGp0ZGE3c05tSC9Udm5SSjR4MG9lMjJ6NTZNbWFtV0cvVHBJZUxMdzF0UXla?= =?utf-8?B?K2ZkcTV2djB5TzArak9HL25nRUpXRXh2RDJPWk1mMmlmTlBJbzFUeDB0M2Nm?= =?utf-8?B?UEQ1dms5TmhDR1BhUVh3elgrZ1BZVUtEWVFTTFFjdGc4MFZlLzZCRTZNc2xx?= =?utf-8?B?YzBDUzlqL2dhSW01ZXhZckpwbWlUWE9rMG4yTXMyaUpjdXVKdG5ZTDVjZXdq?= =?utf-8?B?R1EzMjlad20yNStLTVRBbHNwU3hiZklyVER3QkExUmd4R3ZmTWNWNVAxakNs?= =?utf-8?B?TUZSQ1JOZ1BHSjlQQXZYZ0RuelA4ODExSDRZNzNYM09GUmVrZUo3amJoeFh2?= =?utf-8?B?S2E3MnI4dVc5WWRTNUVZRzdVdUFZZm15VEZIZzdRdTdrdVFLWC9UQUxiZ2tv?= =?utf-8?B?WTZZUjNoMlZXMHp3K1lJSS9mNExacTlGa3lCcE1uTlBjQytWamZSNTUyS2Rz?= =?utf-8?B?aHV5MGt6QU1FKzROK3N1M1BpTUhPcXoyQmxjMW1TM1dXRnc5N25DLytEdFZD?= =?utf-8?B?cThYNHlmTXV6cVYrWkhxdVBNSllGS1V4RVdRQStqV1ZlUC9PNXR2SjRMeTZv?= =?utf-8?B?Z3dBQ0RDTE9JQ1hLU2o5dmJnRDh6dEg4WWNjMzhXKzZIcWlSaUZ3QlNQcEg3?= =?utf-8?B?Z3o3SEVqZ3NLZ3VESlUvdFpPL1dzbHo1ZEJOdlZJUCtRZzZKcFE3ejR1NVlo?= =?utf-8?Q?hpV0rg9nU9W5Bu9swZZnFwfU/?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9fc42843-b0db-482a-a2ca-08da8c76aa7d X-MS-Exchange-CrossTenant-AuthSource: BY5PR12MB3683.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Sep 2022 00:04:12.3236 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: VajcL5lU2A7NFVYX23dXDCpq99nLyonNYz9b+sVkQMkar+aPHXqxV9bSDzJ5rPT2 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR12MB4065 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220901_170421_190330_894EC79D X-CRM114-Status: GOOD ( 29.12 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgTWF0aGlldSwKClRoYW5rcyBmb3IgcmV2aWV3cy4gUGxlYXNlIGZpbmQgbXkgY29tbWVudHMg YmVsb3cuCgpPbiA5LzEvMjIgMToyNSBQTSwgTWF0aGlldSBQb2lyaWVyIHdyb3RlOgo+IE9uIFRo dSwgSnVsIDA3LCAyMDIyIGF0IDA2OjM5OjU1UE0gLTA3MDAsIFRhbm1heSBTaGFoIHdyb3RlOgo+ PiBGcm9tOiBUYW5tYXkgU2hhaCA8dGFubWF5LnNoYWhAeGlsaW54LmNvbT4KPj4KPj4gVGhpcyBk cml2ZXIgZW5hYmxlcyByNWYgZHVhbCBjb3JlIFJlYWwgdGltZSBQcm9jZXNzaW5nIFVuaXQgc3Vi c3lzdGVtCj4+IGF2YWlsYWJsZSBvbiBYaWxpbnggWnlucSBVbHRyYXNjYWxlIE1QU29DIFBsYXRm b3JtLiBSUFUgc3Vic3lzdGVtCj4+IChjbHVzdGVyKSBjYW4gYmUgY29uZmlndXJlZCBpbiBkaWZm ZXJlbnQgbW9kZXMgZS5nLiBzcGxpdCBtb2RlIGluIHdoaWNoCj4+IHR3byByNWYgY29yZXMgd29y ayBpbmRlcGVuZGVudCBvZiBlYWNoIG90aGVyIGFuZCBsb2NrLXN0ZXAgbW9kZSBpbiB3aGljaAo+ PiBib3RoIHI1ZiBjb3JlcyBleGVjdXRlIHNhbWUgY29kZSBjbG9jay1mb3ItY2xvY2sgYW5kIG5v dGlmeSBpZiB0aGUKPj4gcmVzdWx0IGlzIGRpZmZlcmVudC4KPj4KPj4gVGhlIFhpbGlueCByNSBS ZW1vdGVwcm9jIERyaXZlciBib290cyB0aGUgUlBVIGNvcmVzIHZpYSBjYWxscyB0byB0aGUgWGls aW54Cj4+IFBsYXRmb3JtIE1hbmFnZW1lbnQgVW5pdCB0aGF0IGhhbmRsZXMgdGhlIFI1IGNvbmZp Z3VyYXRpb24sIG1lbW9yeSBhY2Nlc3MKPj4gYW5kIFI1IGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBU aGUgaW50ZXJmYWNlIHRvIHRoaXMgbWFuYWdlciBpcyBkb25lIGluIHRoaXMKPj4gZHJpdmVyIHZp YSB6eW5xbXBfcG1fKiBmdW5jdGlvbiBjYWxscy4KPj4KPj4gU2lnbmVkLW9mZi1ieTogQmVuIExl dmluc2t5IDxiZW4ubGV2aW5za3lAeGlsaW54LmNvbT4KPj4gU2lnbmVkLW9mZi1ieTogVGFubWF5 IFNoYWggPHRhbm1heS5zaGFoQHhpbGlueC5jb20+Cj4+IFNpZ25lZC1vZmYtYnk6IFRhbm1heSBT aGFoIDx0YW5tYXkuc2hhaEBhbWQuY29tPgo+PiAtLS0KPj4KPj4gQ2hhbmdlcyBpbiB2OQo+PiAg ICAtIHJlcGxhY2UgZGV2bV9ycHJvY19hbGxvYyB3aXRoIHJwcm9jX2FsbG9jCj4+ICAgIC0gJXMv dW50aWwvd2hpbGUvcgo+PiAgICAtIHJlbW92ZSBleHRyYSBsaW5lCj4+ICAgIC0gJXMvaSA+IC0x L2kgPj0wL3IgZml4IHRoaXMgdGhyb3VnaG91dCB0aGUgZHJpdmVyCj4+ICAgIC0gZml4IHR5cGUg b2YgdGNtX21vZGUgZnJvbSBpbnQgdG8gZW51bSBycHVfdGNtX2NvbWIKPj4gICAgLSByZWxlYXNl ICZjaGlsZF9wZGV2LT5kZXYgcmVmZXJlbmNlcyBpbiBjYXNlIG9mIGZhaWx1cmUKPj4gICAgLSBy ZW1vdmUgenlucW1wX3I1X2NvcmVfZXhpdCgpCj4+ICAgIC0gdW5kZWZpbmVkIG1lbW9yeS1yZWdp b24gcHJvcGVydHkgaXNuJ3QgZHJpdmVyIGZhaWx1cmUKPj4gICAgLSByZW1vdmUgdGNtIGJhbmsg Y291bnQgY2hlY2sgZnJvbSBvcHMKPj4gICAgLSBmaXggdGNtIGJhbmsgdHVybi1vZmYgc2VxdWVu Y2UKPj4gICAgLSBmaXggcGFyc2VfZncgZnVuY3Rpb24gZG9jdW1lbnRhdGlvbgo+PiAgICAtIGRv IG5vdCB1c2UgcnByb2NfbWVtX2VudHJ5X2luaXQgb24gdmRldjBidWZmZXJzCj4+ICAgIC0gZGVj bGFyZSB2YXJpYWJscyBpbiByZXZlcnNlIHhtYXMgdHJlZSBvcmRlciB0aHJvdWdob3V0ICAgIHRo ZSBkcml2ZXIKPj4KPj4gQ2hhbmdlcyBpbiB2ODoKPj4gICAgLSBOb25lCj4+Cj4+IENoYW5nZXMg aW4gdjc6Cj4+ICAgIC0gTm9uZQo+Pgo+PiBDaGFuZ2VzIGluIHY2Ogo+PiAgICAtIE5vbmUKPj4K Pj4gQ2hhbmdlcyBpbiB2NToKPj4gICAgLSBOb25lCj4+Cj4+IENoYW5nZXMgaW4gdjQ6Cj4+ICAg IC0gUmVtb3ZlIHJlZHVuZGFudCBoZWFkZXIgZmlsZXMKPj4gICAgLSB1c2UgZGV2X2Vycl9wcm9i ZSgpIHRvIHJlcG9ydCBlcnJvcnMgZHVyaW5nIHByb2JlCj4+ICAgIC0gRml4IG1pc3NpbmcgY2hl Y2sgb24gZXJyb3IgY29kZSByZXR1cm5lZCBieSB6eW5xbXBfcjVfYWRkX3Jwcm9jX2NvcmUoKQo+ PiAgICAtIEZpeCBtZW1vcnkgbGVha3MgYWxsIG92ZXIgdGhlIGRyaXZlciB3aGVuIHJlc291cmNl IGFsbG9jYXRpb24gZmFpbHMgZm9yIGFueSBjb3JlCj4+ICAgIC0gbWFrZSBjbHVzdGVyIG1vZGUg Y2hlY2sgb25seSBhdCBvbmUgcGxhY2UKPj4gICAgLSByZW1vdmUgcmVkdW5kYW50IGluaXRpYWxp emF0aW9uIG9mIHZhcmlhYmxlCj4+ICAgIC0gcmVtb3ZlIHJlZHVuZGFudCB1c2Ugb2Ygb2Zfbm9k ZV9wdXQoKQo+PiAgICAtIEZpeCBDb21tZW50IGZvcm1hdCBwcm9ibGVtCj4+ICAgIC0gQXNzaWdu IG9mZnNldCBvZiB6eW5xbXBfdGNtX2JhbmtzIGluc3RlYWQgb2YgZHVwbGljYXRpbmcgaXQKPj4g ICAgLSBBZGQgdGNtIGFuZCBtZW1vcnkgcmVnaW9ucyBycHJvYyBjYXJ2ZW91dHMgZHVyaW5nIHBy ZXBhcmUgaW5zdGVhZCBvZiBwYXJzZV9mdwo+PiAgICAtIFJlbW92ZSBycHJvY19tZW1fZW50cnkg b2JqZWN0IGZyb20gcjVfY29yZQo+PiAgICAtIFVzZSBwdXRfZGV2aWNlKCkgYW5kIHJwcm9jX2Rl bCgpIEFQSXMgdG8gZml4IG1lbW9yeSBsZWFrcwo+PiAgICAtIFJlcGxhY2UgcHJfKiB3aXRoIGRl dl8qLiBUaGlzIHdhcyBtaXNzZWQgaW4gdjMsIGZpeCBub3cuCj4+ICAgIC0gVXNlICJHUEwiIGlu c3RlYWQgb2YgIkdQTCB2MiIgaW4gTU9EVUxFX0xJQ0VOU0UgbWFjcm8uIFRoaXMgd2FzIHN1Z2dl c3RlZCBieSBjaGVja3BhdGNoIHNjcmlwdC4KPj4KPj4gQ2hhbmdlcyBpbiB2MzoKPj4gICAgLSBG aXggY2hlY2twYXRjaCBzY3JpcHQgaW5kZW50YXRpb24gd2FybmluZwo+PiAgICAtIFJlbW92ZSB1 bnVzZWQgdmFyaWFibGUgZnJvbSB4aWxpbnggcmVtb3RlcHJvYyBkcml2ZXIKPj4gICAgLSB1c2Ug QyBzdHlsZSBjb21tZW50cywgaS5lIC8qLi4uKi8KPj4gICAgLSBSZW1vdmUgcmVkdW5kYW50IGRl YnVnIGluZm9ybWF0aW9uIHdoaWNoIGNhbiBiZSBkZXJpdmVkIHVzaW5nIC9wcm9jL2RldmljZS10 cmVlCj4+ICAgIC0gRml4IG11bHRpbGluZWQgY29tbWVudCBmb3JtYXQKPj4gICAgLSBzLyJmaW5h bCBmb3QgVENNIi8iZmluYWwgZm9yIFRDTSIKPj4gICAgLSBGdW5jdGlvbiBkZXZtX2t6YWxsb2Mo KSBkb2VzIG5vdCByZXR1cm4gYW4gY29kZSBvbiBlcnJvciwganVzdCBOVUxMLgo+PiAgICAgIFJl bW92ZSByZWR1bmRhbnQgZXJyb3IgY2hlY2sgZm9yIHRoaXMgZnVuY3Rpb24gdGhyb3VnaG91dCB0 aGUgZHJpdmVyLgo+PiAgICAtIEZpeCBSUFUgbW9kZSBjb25maWd1cmF0aW9uIGFuZCBhZGQgZG9j dW1lbnRhdGlvbiBhY2NvcmRpbmdseQo+PiAgICAtIEdldCByaWQgb2YgdGhlIGluZGVudGF0aW9u cyB0byBtYXRjaCBmdW5jdGlvbiBkb2N1bWVudGF0aW9uIHN0eWxlIHdpdGggcmVzdCBvZiB0aGUg ZHJpdmVyCj4+ICAgIC0gRml4IG1lbW9yeSBsZWFrIGJ5IG9ubHkgdXNpbmcgcjVfcnByb2MtPnBy aXYgYW5kIG5vdCByZXBsYWNlIGl0IHdpdGggbmV3IGluc3RhbmNlCj4+ICAgIC0gVXNlICdpJyBm b3IgdGhlIG91dGVyIGxvb3AgYW5kICdqJyBmb3IgdGhlIGlubmVyIG9uZSBhcyBwZXIgY29udmVu dGlvbgo+PiAgICAtIFJlbW92ZSByZWR1bmRhbnQgZXJyb3IgYW5kIE5VTEwgY2hlY2tzIHRocm91 Z2hvdXQgdGhlIGRyaXZlcgo+PiAgICAtIFVzZSBkZXZtX2tjYWxsb2MoKSB3aGVuIG1vcmUgdGhh biBvbmUgZWxlbWVudCBpcyByZXF1aXJlZAo+PiAgICAtIEFkZCBtZW1vcnktcmVnaW9ucyBjYXJ2 ZW91dHMgZHVyaW5nIGRyaXZlciBwcm9iZSBpbnN0ZWFkIG9mIHBhcnNlX2Z3IGNhbGwKPj4gICAg ICBUaGlzIHJlbW92ZXMgcmVkdW5kYW50IGNvcHkgb2YgcmVzZXJ2ZWRfbWVtIG9iamVjdCBpbiBy NV9jb3JlIHN0cnVjdHVyZS4KPj4gICAgLSBGaXggbWVtb3J5IGxlYWsgYnkgdXNpbmcgb2Zfbm9k ZV9wdXQoKQo+PiAgICAtIEZpeCBpbmRlbnRhdGlvbiBvZiB0Y21fbWVtX21hcCBmdW5jdGlvbiBh cmdzCj4+ICAgIC0gUmVtb3ZlIHJlZHVuZGFudCBpbml0IG9mIHZhcmlhYmxlcwo+PiAgICAtIElu aXRpYWxpemUgdGNtIGJhbmsgc2l6ZSB2YXJpYWJsZSBmb3IgbG9ja3N0ZXAgbW9kZQo+PiAgICAt IFJlcGxhY2UgdTMyIHdpdGggcGh5c19hZGRyX3QgZm9yIHZhcmlhYmxlIHN0cm9pbmcgbWVtb3J5 IGJhbmsgYWRkcmVzcwo+PiAgICAtIEFkZCBkb2N1bWVudGF0aW9uIG9mIFRDTSBiZWhhdmlvciBp biBsb2Nrc3RlcCBtb2RlCj4+ICAgIC0gVXNlIGRldl9nZXRfZHJ2ZGF0YSBpbnN0ZWFkIG9mIHBs YXRmb3JtIGRyaXZlciBBUEkKPj4gICAgLSBSZW1vdmUgaW5mbyBsZXZlbCBtZXNzYWdlcwo+PiAg ICAtIEZpeCBjaGVja3BhdGNoLnBsIHdhcm5pbmdzCj4+ICAgIC0gQWRkIGRvY3VtZW50YXRpb24g Zm9yIHRoZSBYaWxpbnggcjVmIHBsYXRmb3JtIHRvIHVuZGVyc3RhbmQgZHJpdmVyIGRlc2lnbgo+ PiAgIGRyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnICAgICAgICAgICAgICB8ICAgMTIgKwo+PiAg IGRyaXZlcnMvcmVtb3RlcHJvYy9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgIDEgKwo+PiAgIGRy aXZlcnMvcmVtb3RlcHJvYy94bG54X3I1X3JlbW90ZXByb2MuYyB8IDEwNTUgKysrKysrKysrKysr KysrKysrKysrKysKPj4gICAzIGZpbGVzIGNoYW5nZWQsIDEwNjggaW5zZXJ0aW9ucygrKQo+PiAg IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3JlbW90ZXByb2MveGxueF9yNV9yZW1vdGVwcm9j LmMKPj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnIGIvZHJpdmVy cy9yZW1vdGVwcm9jL0tjb25maWcKPj4gaW5kZXggMTY2MDE5Nzg2NjUzLi41NjM3YTcxYzA2Nzcg MTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnCj4+ICsrKyBiL2RyaXZl cnMvcmVtb3RlcHJvYy9LY29uZmlnCj4+IEBAIC0zNTIsNiArMzUyLDE4IEBAIGNvbmZpZyBUSV9L M19SNV9SRU1PVEVQUk9DCj4+ICAgCSAgSXQncyBzYWZlIHRvIHNheSBOIGhlcmUgaWYgeW91J3Jl IG5vdCBpbnRlcmVzdGVkIGluIHV0aWxpemluZwo+PiAgIAkgIGEgc2xhdmUgcHJvY2Vzc29yLgo+ PiAgIAo+PiArY29uZmlnIFhMTlhfUjVfUkVNT1RFUFJPQwo+PiArCXRyaXN0YXRlICJYaWxpbngg UjUgcmVtb3RlcHJvYyBzdXBwb3J0Igo+PiArCWRlcGVuZHMgb24gUE0gJiYgQVJDSF9aWU5RTVAK Pj4gKwlkZXBlbmRzIG9uIFpZTlFNUF9GSVJNV0FSRQo+PiArCXNlbGVjdCBSUE1TR19WSVJUSU8K Pj4gKwlzZWxlY3QgWllOUU1QX0lQSV9NQk9YCj4+ICsJaGVscAo+PiArCSAgU2F5IHkgb3IgbSBo ZXJlIHRvIHN1cHBvcnQgWGlsaW54IFI1IHJlbW90ZSBwcm9jZXNzb3JzIHZpYSB0aGUgcmVtb3Rl Cj4+ICsJICBwcm9jZXNzb3IgZnJhbWV3b3JrLgo+PiArCj4+ICsJICBJdCdzIHNhZmUgdG8gc2F5 IE4gaWYgbm90IGludGVyZXN0ZWQgaW4gdXNpbmcgUlBVIHI1ZiBjb3Jlcy4KPj4gKwo+PiAgIGVu ZGlmICMgUkVNT1RFUFJPQwo+PiAgIAo+PiAgIGVuZG1lbnUKPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvcmVtb3RlcHJvYy9NYWtlZmlsZSBiL2RyaXZlcnMvcmVtb3RlcHJvYy9NYWtlZmlsZQo+PiBp bmRleCA1NDc4YzdjYjllMDcuLjkxMzE0YTliNDNjZSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9y ZW1vdGVwcm9jL01ha2VmaWxlCj4+ICsrKyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9NYWtlZmlsZQo+ PiBAQCAtMzgsMyArMzgsNCBAQCBvYmotJChDT05GSUdfU1RfU0xJTV9SRU1PVEVQUk9DKQkrPSBz dF9zbGltX3Jwcm9jLm8KPj4gICBvYmotJChDT05GSUdfU1RNMzJfUlBST0MpCQkrPSBzdG0zMl9y cHJvYy5vCj4+ICAgb2JqLSQoQ09ORklHX1RJX0szX0RTUF9SRU1PVEVQUk9DKQkrPSB0aV9rM19k c3BfcmVtb3RlcHJvYy5vCj4+ICAgb2JqLSQoQ09ORklHX1RJX0szX1I1X1JFTU9URVBST0MpCSs9 IHRpX2szX3I1X3JlbW90ZXByb2Mubwo+PiArb2JqLSQoQ09ORklHX1hMTlhfUjVfUkVNT1RFUFJP QykJKz0geGxueF9yNV9yZW1vdGVwcm9jLm8KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVtb3Rl cHJvYy94bG54X3I1X3JlbW90ZXByb2MuYyBiL2RyaXZlcnMvcmVtb3RlcHJvYy94bG54X3I1X3Jl bW90ZXByb2MuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwMDAwMDAu Ljk4NjViNTFlMDM1Ngo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvcmVtb3RlcHJv Yy94bG54X3I1X3JlbW90ZXByb2MuYwo+PiBAQCAtMCwwICsxLDEwNTUgQEAKPj4gKy8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4+ICsvKgo+PiArICogWnlucU1QIFI1IFJlbW90 ZSBQcm9jZXNzb3IgZHJpdmVyCj4+ICsgKgo+PiArICovCj4+ICsKPj4gKyNpbmNsdWRlIDxkdC1i aW5kaW5ncy9wb3dlci94bG54LXp5bnFtcC1wb3dlci5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2Rt YS1tYXBwaW5nLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvZmlybXdhcmUveGxueC16eW5xbXAuaD4K Pj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4KPj4gKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgv b2ZfcGxhdGZvcm0uaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9vZl9yZXNlcnZlZF9tZW0uaD4KPj4g KyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9y ZW1vdGVwcm9jLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+PiArCj4+ICsjaW5jbHVk ZSAicmVtb3RlcHJvY19pbnRlcm5hbC5oIgo+PiArCj4+ICsvKiBzZXR0aW5ncyBmb3IgUlBVIGNs dXN0ZXIgbW9kZSAqLwo+PiArZW51bSB6eW5xbXBfcjVfY2x1c3Rlcl9tb2RlIHsKPj4gKwlTUExJ VF9NT0RFID0gMCwgLyogV2hlbiBjb3JlcyBydW4gYXMgc2VwYXJhdGUgcHJvY2Vzc29yICovCj4+ ICsJTE9DS1NURVBfTU9ERSA9IDEsIC8qIGNvcmVzIGV4ZWN1dGUgc2FtZSBjb2RlIGluIGxvY2tz dGVwLGNsay1mb3ItY2xrICovCj4+ICsJU0lOR0xFX0NQVV9NT0RFID0gMiwgLyogY29yZTAgaXMg aGVsZCBpbiByZXNldCBhbmQgb25seSBjb3JlMSBydW5zICovCj4+ICt9Owo+PiArCj4+ICsvKioK Pj4gKyAqIHN0cnVjdCBtZW1fYmFua19kYXRhIC0gTWVtb3J5IEJhbmsgZGVzY3JpcHRpb24KPj4g KyAqCj4+ICsgKiBAYWRkcjogU3RhcnQgYWRkcmVzcyBvZiBtZW1vcnkgYmFuawo+PiArICogQHNp emU6IFNpemUgb2YgTWVtb3J5IGJhbmsKPj4gKyAqIEBwbV9kb21haW5faWQ6IFBvd2VyLWRvbWFp bnMgaWQgb2YgbWVtb3J5IGJhbmsgZm9yIGZpcm13YXJlIHRvIHR1cm4gb24vb2ZmCj4+ICsgKiBA YmFua19uYW1lOiBuYW1lIG9mIHRoZSBiYW5rIGZvciByZW1vdGVwcm9jIGZyYW1ld29yawo+PiAr ICovCj4+ICtzdHJ1Y3QgbWVtX2JhbmtfZGF0YSB7Cj4+ICsJcGh5c19hZGRyX3QgYWRkcjsKPj4g KwlzaXplX3Qgc2l6ZTsKPj4gKwl1MzIgcG1fZG9tYWluX2lkOwo+PiArCWNoYXIgKmJhbmtfbmFt ZTsKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtX2JhbmtfZGF0YSB6eW5x bXBfdGNtX2JhbmtzW10gPSB7Cj4+ICsJezB4ZmZlMDAwMDBVTCwgMHgxMDAwMFVMLCBQRF9SNV8w X0FUQ00sICJhdGNtMCJ9LCAvKiBUQ00gNjRLQiBlYWNoICovCj4+ICsJezB4ZmZlMjAwMDBVTCwg MHgxMDAwMFVMLCBQRF9SNV8wX0JUQ00sICJidGNtMCJ9LAo+PiArCXsweGZmZTkwMDAwVUwsIDB4 MTAwMDBVTCwgUERfUjVfMV9BVENNLCAiYXRjbTEifSwKPj4gKwl7MHhmZmViMDAwMFVMLCAweDEw MDAwVUwsIFBEX1I1XzFfQlRDTSwgImJ0Y20xIn0sCj4+ICt9Owo+PiArCj4+ICsvKioKPj4gKyAq IHN0cnVjdCB6eW5xbXBfcjVfY29yZSAtIFp5bnFNUCBSNSBjb3JlIHN0cnVjdHVyZQo+PiArICoK Pj4gKyAqIEBkZXY6IGRldmljZSBvZiBSUFUgaW5zdGFuY2UKPj4gKyAqIEBucDogZGV2aWNlIG5v ZGUgb2YgUlBVIGluc3RhbmNlCj4+ICsgKiBAdGNtX2JhbmtfY291bnQ6IG51bWJlciBUQ00gYmFu a3MgYWNjZXNzaWJsZSB0byB0aGlzIFJQVQo+PiArICogQHRjbV9iYW5rczogYXJyYXkgb2YgZWFj aCBUQ00gYmFuayBkYXRhCj4+ICsgKiBAcm1lbV9jb3VudDogTnVtYmVyIG9mIHJlc2VydmVkIG1l bSByZWdpb25zCj4+ICsgKiBAcm1lbTogcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbiBub2RlcyBmcm9t IGRldmljZSB0cmVlCj4+ICsgKiBAcnByb2M6IHJwcm9jIGhhbmRsZQo+PiArICogQHBtX2RvbWFp bl9pZDogUlBVIENQVSBwb3dlciBkb21haW4gaWQKPj4gKyAqLwo+PiArc3RydWN0IHp5bnFtcF9y NV9jb3JlIHsKPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4+ICsJc3RydWN0IGRldmljZV9ub2Rl ICpucDsKPj4gKwlpbnQgdGNtX2JhbmtfY291bnQ7Cj4+ICsJc3RydWN0IG1lbV9iYW5rX2RhdGEg Kip0Y21fYmFua3M7Cj4+ICsJaW50IHJtZW1fY291bnQ7Cj4+ICsJc3RydWN0IHJlc2VydmVkX21l bSAqKnJtZW07Cj4+ICsJc3RydWN0IHJwcm9jICpycHJvYzsKPj4gKwl1MzIgcG1fZG9tYWluX2lk Owo+PiArfTsKPj4gKwo+PiArLyoqCj4+ICsgKiBzdHJ1Y3QgenlucW1wX3I1X2NsdXN0ZXIgLSBa eW5xTVAgUjUgY2x1c3RlciBzdHJ1Y3R1cmUKPj4gKyAqCj4+ICsgKiBAZGV2OiByNWYgc3Vic3lz dGVtIGNsdXN0ZXIgZGV2aWNlIG5vZGUKPj4gKyAqIEBtb2RlOiBjbHVzdGVyIG1vZGUgb2YgdHlw ZSB6eW5xbXBfcjVfY2x1c3Rlcl9tb2RlCj4+ICsgKiBAY29yZV9jb3VudDogbnVtYmVyIG9mIHI1 IGNvcmVzIHVzZWQgZm9yIHRoaXMgY2x1c3RlciBtb2RlCj4+ICsgKiBAcjVfY29yZXM6IEFycmF5 IG9mIHBvaW50ZXJzIHBvaW50aW5nIHRvIHI1IGNvcmUKPj4gKyAqLwo+PiArc3RydWN0IHp5bnFt cF9yNV9jbHVzdGVyIHsKPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4+ICsJZW51bSAgenlucW1w X3I1X2NsdXN0ZXJfbW9kZSBtb2RlOwo+PiArCWludCBjb3JlX2NvdW50Owo+PiArCXN0cnVjdCB6 eW5xbXBfcjVfY29yZSAqKnI1X2NvcmVzOwo+PiArfTsKPj4gKwo+PiArLyoKPj4gKyAqIHp5bnFt cF9yNV9zZXRfbW9kZSAtIHNldCBSUFUgb3BlcmF0aW9uIG1vZGUKPj4gKyAqCj4+ICsgKiBzZXQg UlBVIG9wZXJhdGlvbiBtb2RlCj4+ICsgKgo+PiArICogUmV0dXJuOiAwIGZvciBzdWNjZXNzLCBu ZWdhdGl2ZSB2YWx1ZSBmb3IgZmFpbHVyZQo+PiArICovCj4+ICtzdGF0aWMgaW50IHp5bnFtcF9y NV9zZXRfbW9kZShzdHJ1Y3QgenlucW1wX3I1X2NvcmUgKnI1X2NvcmUsCj4+ICsJCQkgICAgICBl bnVtIHJwdV9vcGVyX21vZGUgZndfcmVnX3ZhbCwKPj4gKwkJCSAgICAgIGVudW0gcnB1X3RjbV9j b21iIHRjbV9tb2RlKQo+PiArewo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwlyZXQgPSB6eW5xbXBf cG1fc2V0X3JwdV9tb2RlKHI1X2NvcmUtPnBtX2RvbWFpbl9pZCwgZndfcmVnX3ZhbCk7Cj4+ICsJ aWYgKHJldCA8IDApIHsKPj4gKwkJZGV2X2VycihyNV9jb3JlLT5kZXYsICJmYWlsZWQgdG8gc2V0 IFJQVSBtb2RlXG4iKTsKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwl9Cj4+ICsKPj4gKwlyZXQgPSB6 eW5xbXBfcG1fc2V0X3RjbV9jb25maWcocjVfY29yZS0+cG1fZG9tYWluX2lkLCB0Y21fbW9kZSk7 Cj4+ICsJaWYgKHJldCA8IDApCj4+ICsJCWRldl9lcnIocjVfY29yZS0+ZGV2LCAiZmFpbGVkIHRv IGNvbmZpZ3VyZSBUQ01cbiIpOwo+PiArCj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiAr LyoKPj4gKyAqIHp5bnFtcF9yNV9ycHJvY19zdGFydAo+PiArICogQHJwcm9jOiBzaW5nbGUgUjUg Y29yZSdzIGNvcnJlc3BvbmRpbmcgcnByb2MgaW5zdGFuY2UKPj4gKyAqCj4+ICsgKiBTdGFydCBS NSBDb3JlIGZyb20gZGVzaWduYXRlZCBib290IGFkZHJlc3MuCj4+ICsgKgo+PiArICogcmV0dXJu IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIG5vbi16ZXJvIHZhbHVlIG9uIGZhaWx1cmUKPj4gKyAq Lwo+PiArc3RhdGljIGludCB6eW5xbXBfcjVfcnByb2Nfc3RhcnQoc3RydWN0IHJwcm9jICpycHJv YykKPj4gK3sKPj4gKwlzdHJ1Y3QgenlucW1wX3I1X2NvcmUgKnI1X2NvcmUgPSBycHJvYy0+cHJp djsKPj4gKwllbnVtIHJwdV9ib290X21lbSBib290bWVtOwo+PiArCWludCByZXQ7Cj4+ICsKPj4g KwkvKgo+PiArCSAqIFRoZSBleGNlcHRpb24gdmVjdG9yIHBvaW50ZXJzIChFVlApIHJlZmVyIHRv IHRoZSBiYXNlLWFkZHJlc3Mgb2YKPj4gKwkgKiBleGNlcHRpb24gdmVjdG9ycyAoZm9yIHJlc2V0 LCBJUlEsIEZJUSwgZXRjKS4gVGhlIHJlc2V0LXZlY3Rvcgo+PiArCSAqIHN0YXJ0cyBhdCB0aGUg YmFzZS1hZGRyZXNzIGFuZCBzdWJzZXF1ZW50IHZlY3RvcnMgYXJlIG9uIDQtYnl0ZQo+PiArCSAq IGJvdW5kYXJpZXMuCj4+ICsJICoKPj4gKwkgKiBFeGNlcHRpb24gdmVjdG9ycyBjYW4gc3RhcnQg ZWl0aGVyIGZyb20gMHgwMDAwXzAwMDAgKExPVkVDKSBvcgo+PiArCSAqIGZyb20gMHhGRkZGXzAw MDAgKEhJVkVDKSB3aGljaCBpcyBtYXBwZWQgaW4gdGhlIE9DTSAoT24tQ2hpcCBNZW1vcnkpCj4+ ICsJICoKPj4gKwkgKiBVc3VhbGx5IGZpcm13YXJlIHdpbGwgcHV0IEV4Y2VwdGlvbiB2ZWN0b3Jz IGF0IExPVkVDLgo+PiArCSAqCj4+ICsJICogSXQgaXMgbm90IHJlY29tbWVuZCB0aGF0IHlvdSBj aGFuZ2UgdGhlIGV4Y2VwdGlvbiB2ZWN0b3IuCj4+ICsJICogQ2hhbmdpbmcgdGhlIEVWUCB0byBI SVZFQyB3aWxsIHJlc3VsdCBpbiBpbmNyZWFzZWQgaW50ZXJydXB0IGxhdGVuY3kKPj4gKwkgKiBh bmQgaml0dGVyLiBBbHNvLCBpZiB0aGUgT0NNIGlzIHNlY3VyZWQgYW5kIHRoZSBDb3J0ZXgtUjVG IHByb2Nlc3Nvcgo+PiArCSAqIGlzIG5vbi1zZWN1cmVkLCB0aGVuIHRoZSBDb3J0ZXgtUjVGIHBy b2Nlc3NvciBjYW5ub3QgYWNjZXNzIHRoZQo+PiArCSAqIEhJVkVDIGV4Y2VwdGlvbiB2ZWN0b3Jz IGluIHRoZSBPQ00uCj4+ICsJICovCj4+ICsJYm9vdG1lbSA9IChycHJvYy0+Ym9vdGFkZHIgPj0g MHhGRkZDMDAwMCkgPwo+PiArCQkgICBQTV9SUFVfQk9PVE1FTV9ISVZFQyA6IFBNX1JQVV9CT09U TUVNX0xPVkVDOwo+PiArCj4+ICsJZGV2X2RiZyhyNV9jb3JlLT5kZXYsICJSUFUgYm9vdCBhZGRy IDB4JWxseCBmcm9tICVzLiIsIHJwcm9jLT5ib290YWRkciwKPj4gKwkJYm9vdG1lbSA9PSBQTV9S UFVfQk9PVE1FTV9ISVZFQyA/ICJPQ00iIDogIlRDTSIpOwo+PiArCj4+ICsJcmV0ID0genlucW1w X3BtX3JlcXVlc3Rfd2FrZShyNV9jb3JlLT5wbV9kb21haW5faWQsIDEsCj4+ICsJCQkJICAgICBi b290bWVtLCBaWU5RTVBfUE1fUkVRVUVTVF9BQ0tfTk8pOwo+PiArCWlmIChyZXQpCj4+ICsJCWRl dl9lcnIocjVfY29yZS0+ZGV2LAo+PiArCQkJImZhaWxlZCB0byBzdGFydCBSUFUgPSAweCV4XG4i LCByNV9jb3JlLT5wbV9kb21haW5faWQpOwo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4g Ky8qCj4+ICsgKiB6eW5xbXBfcjVfcnByb2Nfc3RvcAo+PiArICogQHJwcm9jOiBzaW5nbGUgUjUg Y29yZSdzIGNvcnJlc3BvbmRpbmcgcnByb2MgaW5zdGFuY2UKPj4gKyAqCj4+ICsgKiBQb3dlciBk b3duICBSNSBDb3JlLgo+PiArICoKPj4gKyAqIHJldHVybiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lz ZSBub24temVybyB2YWx1ZSBvbiBmYWlsdXJlCj4+ICsgKi8KPj4gK3N0YXRpYyBpbnQgenlucW1w X3I1X3Jwcm9jX3N0b3Aoc3RydWN0IHJwcm9jICpycHJvYykKPj4gK3sKPj4gKwlzdHJ1Y3Qgenlu cW1wX3I1X2NvcmUgKnI1X2NvcmUgPSBycHJvYy0+cHJpdjsKPj4gKwlpbnQgcmV0Owo+PiArCj4+ ICsJcmV0ID0genlucW1wX3BtX2ZvcmNlX3B3cmR3bihyNV9jb3JlLT5wbV9kb21haW5faWQsCj4+ ICsJCQkJICAgICBaWU5RTVBfUE1fUkVRVUVTVF9BQ0tfQkxPQ0tJTkcpOwo+PiArCWlmIChyZXQp Cj4+ICsJCWRldl9lcnIocjVfY29yZS0+ZGV2LCAiZmFpbGVkIHRvIHN0b3AgcmVtb3RlcHJvYyBS UFUgJWRcbiIsIHJldCk7Cj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICsvKgo+ PiArICogenlucW1wX3I1X21lbV9yZWdpb25fbWFwCj4+ICsgKiBAcnByb2M6IHNpbmdsZSBSNSBj b3JlJ3MgY29ycmVzcG9uZGluZyBycHJvYyBpbnN0YW5jZQo+PiArICogQG1lbTogbWVtIGVudHJ5 IHRvIG1hcAo+PiArICoKPj4gKyAqIENhbGxiYWNrIHRvIG1hcCB2YSBmb3IgbWVtb3J5LXJlZ2lv bidzIGNhcnZlb3V0Lgo+PiArICoKPj4gKyAqIHJldHVybiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lz ZSBub24temVybyB2YWx1ZSBvbiBmYWlsdXJlCj4+ICsgKi8KPj4gK3N0YXRpYyBpbnQgenlucW1w X3I1X21lbV9yZWdpb25fbWFwKHN0cnVjdCBycHJvYyAqcnByb2MsCj4+ICsJCQkJICAgIHN0cnVj dCBycHJvY19tZW1fZW50cnkgKm1lbSkKPj4gK3sKPj4gKwl2b2lkIF9faW9tZW0gKnZhOwo+PiAr Cj4+ICsJdmEgPSBpb3JlbWFwX3djKG1lbS0+ZG1hLCBtZW0tPmxlbik7Cj4+ICsJaWYgKElTX0VS Ul9PUl9OVUxMKHZhKSkKPj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4+ICsKPj4gKwltZW0tPnZhID0g KHZvaWQgKil2YTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICsvKgo+PiArICog enlucW1wX3I1X3Jwcm9jX21lbV91bm1hcAo+PiArICogQHJwcm9jOiBzaW5nbGUgUjUgY29yZSdz IGNvcnJlc3BvbmRpbmcgcnByb2MgaW5zdGFuY2UKPj4gKyAqIEBtZW06IG1lbSBlbnRyeSB0byB1 bm1hcAo+PiArICoKPj4gKyAqIFVubWFwIG1lbW9yeS1yZWdpb24gY2FydmVvdXQKPj4gKyAqCj4+ ICsgKiByZXR1cm4gMCBvbiBzdWNjZXNzLCBvdGhlcndpc2Ugbm9uLXplcm8gdmFsdWUgb24gZmFp bHVyZQo+PiArICovCj4+ICtzdGF0aWMgaW50IHp5bnFtcF9yNV9tZW1fcmVnaW9uX3VubWFwKHN0 cnVjdCBycHJvYyAqcnByb2MsCj4+ICsJCQkJICAgICAgc3RydWN0IHJwcm9jX21lbV9lbnRyeSAq bWVtKQo+PiArewo+PiArCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKW1lbS0+dmEpOwo+PiArCXJl dHVybiAwOwo+PiArfQo+PiArCj4+ICsvKgo+PiArICogYWRkX21lbV9yZWdpb25zCj4+ICsgKiBA cjVfY29yZTogc2luZ2xlIFI1IGNvcmUncyBjb3JyZXNwb25kaW5nIHp5bnFtcF9yNV9jb3JlIHR5 cGUgaW5zdGFuY2UKPj4gKyAqIEBybWVtOiByZXNlcnZlZCBtZW0gcmVnaW9uIHBhcnNlZCBmcm9t IGR0IG5vZGUKPj4gKyAqCj4+ICsgKiBDb25zdHJ1Y3QgcnByb2MgbWVtIGNhcnZlb3V0cyBmcm9t IGNhcnZlb3V0IHByb3ZpZGVkIGluCj4+ICsgKiBtZW1vcnktcmVnaW9uIHByb3BlcnR5Cj4+ICsg Kgo+PiArICogcmV0dXJuIDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIG5vbi16ZXJvIHZhbHVlIG9u IGZhaWx1cmUKPj4gKyAqLwo+PiArc3RhdGljIGludCBhZGRfbWVtX3JlZ2lvbnNfY2FydmVvdXQo c3RydWN0IHJwcm9jICpycHJvYykKPj4gK3sKPj4gKwlzdHJ1Y3QgcnByb2NfbWVtX2VudHJ5ICoq cnByb2NfbWVtOwo+PiArCXN0cnVjdCB6eW5xbXBfcjVfY29yZSAqcjVfY29yZTsKPj4gKwlzdHJ1 Y3QgcmVzZXJ2ZWRfbWVtICpybWVtOwo+PiArCWludCBpLCBudW1fbWVtX3JlZ2lvbnM7Cj4+ICsK Pj4gKwlyNV9jb3JlID0gKHN0cnVjdCB6eW5xbXBfcjVfY29yZSAqKXJwcm9jLT5wcml2Owo+PiAr CW51bV9tZW1fcmVnaW9ucyA9IHI1X2NvcmUtPnJtZW1fY291bnQ7Cj4+ICsKPj4gKwkvKiBtZW1v cnkgcmVnaW9ucyBub3QgZGVmaW5lZCAqLwo+PiArCWlmIChudW1fbWVtX3JlZ2lvbnMgPCAxKQo+ PiArCQlyZXR1cm4gMDsKPj4gKwo+PiArCXJwcm9jX21lbSA9IGtjYWxsb2MobnVtX21lbV9yZWdp b25zLAo+PiArCQkJICAgIHNpemVvZihzdHJ1Y3QgcnByb2NfbWVtX2VudHJ5ICopLCBHRlBfS0VS TkVMKTsKPj4gKwlpZiAoIXJwcm9jX21lbSkKPj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4+ICsKPj4g Kwlmb3IgKGkgPSAwOyBpIDwgbnVtX21lbV9yZWdpb25zOyBpKyspIHsKPj4gKwkJcm1lbSA9IHI1 X2NvcmUtPnJtZW1baV07Cj4+ICsKPj4gKwkJaWYgKCFzdHJuY21wKHJtZW0tPm5hbWUsICJ2ZGV2 MGJ1ZmZlciIsIHN0cmxlbigidmRldjBidWZmZXIiKSkpIHsKPj4gKwkJCS8qIFJlZ2lzdGVyIHJl c2VydmVkIG1lbW9yeSBmb3IgdmRldiBidWZmZXIgKi8KPj4gKwkJCXJwcm9jX21lbVtpXSA9IHJw cm9jX29mX3Jlc21fbWVtX2VudHJ5X2luaXQoJnJwcm9jLT5kZXYsIGksCj4+ICsJCQkJCQkJCSAg ICBybWVtLT5zaXplLAo+PiArCQkJCQkJCQkgICAgcm1lbS0+YmFzZSwKPj4gKwkJCQkJCQkJICAg IHJtZW0tPm5hbWUpOwo+PiArCQl9IGVsc2Ugewo+PiArCQkJLyogUmVnaXN0ZXIgYXNzb2NpYXRl ZCByZXNlcnZlZCBtZW1vcnkgcmVnaW9ucyAqLwo+PiArCQkJcnByb2NfbWVtW2ldID0gcnByb2Nf bWVtX2VudHJ5X2luaXQoJnJwcm9jLT5kZXYsIE5VTEwsCj4+ICsJCQkJCQkJICAgIChkbWFfYWRk cl90KXJtZW0tPmJhc2UsCj4+ICsJCQkJCQkJICAgIHJtZW0tPnNpemUsIHJtZW0tPmJhc2UsCj4+ ICsJCQkJCQkJICAgIHp5bnFtcF9yNV9tZW1fcmVnaW9uX21hcCwKPj4gKwkJCQkJCQkgICAgenlu cW1wX3I1X21lbV9yZWdpb25fdW5tYXAsCj4+ICsJCQkJCQkJICAgIHJtZW0tPm5hbWUpOwo+PiAr CQl9Cj4+ICsKPj4gKwkJaWYgKCFycHJvY19tZW1baV0pCj4+ICsJCQlnb3RvIHJlbGVhc2VfbWVt X3JlZ2lvbnM7Cj4+ICsKPj4gKwkJZGV2X2RiZygmcnByb2MtPmRldiwgInJlc2VydmVkIG1lbSBj YXJ2ZW91dCAlcyBhZGRyPSVsbHgsIHNpemU9MHglbGx4IiwKPj4gKwkJCXJtZW0tPm5hbWUsIHJt ZW0tPmJhc2UsIHJtZW0tPnNpemUpOwo+PiArCX0KPj4gKwo+PiArCS8qCj4+ICsJICogQWRkIGNh cnZlb3V0cyBvbmx5IGlmIGFsbCBycHJvYyBtZW0gZW50aWVzIGFyZQo+PiArCSAqIHN1Y2Nlc3Nm dWxseSBpbml0aWFsaXplZAo+PiArCSAqLwo+PiArCWZvciAoaSA9IDA7IGkgPCBudW1fbWVtX3Jl Z2lvbnM7IGkrKykKPj4gKwkJcnByb2NfYWRkX2NhcnZlb3V0KHJwcm9jLCBycHJvY19tZW1baV0p Owo+PiArCj4+ICsJa2ZyZWUocnByb2NfbWVtKTsKPj4gKwlyZXR1cm4gMDsKPj4gKwo+PiArcmVs ZWFzZV9tZW1fcmVnaW9uczoKPj4gKwlmb3IgKGktLTsgaSA+PSAwOyBpLS0pCj4+ICsJCWtmcmVl KHJwcm9jX21lbVtpXSk7Cj4+ICsJa2ZyZWUocnByb2NfbWVtKTsKPj4gKwlyZXR1cm4gLUVOT01F TTsKPj4gK30KPj4gKwo+PiArLyoKPj4gKyAqIHp5bnFtcF9yNV9ycHJvY19tZW1fdW5tYXAKPj4g KyAqIEBycHJvYzogc2luZ2xlIFI1IGNvcmUncyBjb3JyZXNwb25kaW5nIHJwcm9jIGluc3RhbmNl Cj4+ICsgKiBAbWVtOiBtZW0gZW50cnkgdG8gdW5tYXAKPj4gKyAqCj4+ICsgKiBVbm1hcCBUQ00g YmFua3Mgd2hlbiBwb3dlcmluZyBkb3duIFI1IGNvcmUuCj4+ICsgKgo+PiArICogcmV0dXJuIDAg b24gc3VjY2Vzcywgb3RoZXJ3aXNlIG5vbi16ZXJvIHZhbHVlIG9uIGZhaWx1cmUKPj4gKyAqLwo+ PiArc3RhdGljIGludCB0Y21fbWVtX3VubWFwKHN0cnVjdCBycHJvYyAqcnByb2MsIHN0cnVjdCBy cHJvY19tZW1fZW50cnkgKm1lbSkKPj4gK3sKPj4gKwlpb3VubWFwKCh2b2lkIF9faW9tZW0gKilt ZW0tPnZhKTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICsvKgo+PiArICogdGNt X21lbV9tYXAKPj4gKyAqIEBycHJvYzogc2luZ2xlIFI1IGNvcmUncyBjb3JyZXNwb25kaW5nIHJw cm9jIGluc3RhbmNlCj4+ICsgKiBAbWVtOiBtZW0gZW50cnkgdG8gaW5pdGlhbGl6ZSB0aGUgdmEg YW5kIGRhIGZpZWxkcyBvZgo+PiArICoKPj4gKyAqIEdpdmVuIFRDTSBiYW5rIGVudHJ5LCB0aGlz IGNhbGxiYWNrIHdpbGwgc2V0IGRldmljZSBhZGRyZXNzIGZvciBSNQo+PiArICogcnVubmluZyBv biBUQ00gYW5kIGFsc28gc2V0dXAgdmlydHVhbCBhZGRyZXNzIGZvciBUQ00gYmFuawo+PiArICog cmVtb3RlcHJvYyBjYXJ2ZW91dC4KPj4gKyAqCj4+ICsgKiByZXR1cm4gMCBvbiBzdWNjZXNzLCBv dGhlcndpc2Ugbm9uLXplcm8gdmFsdWUgb24gZmFpbHVyZQo+PiArICovCj4+ICtzdGF0aWMgaW50 IHRjbV9tZW1fbWFwKHN0cnVjdCBycHJvYyAqcnByb2MsCj4+ICsJCSAgICAgICBzdHJ1Y3QgcnBy b2NfbWVtX2VudHJ5ICptZW0pCj4+ICt7Cj4+ICsJdm9pZCBfX2lvbWVtICp2YTsKPj4gKwo+PiAr CXZhID0gaW9yZW1hcF93YyhtZW0tPmRtYSwgbWVtLT5sZW4pOwo+PiArCWlmIChJU19FUlJfT1Jf TlVMTCh2YSkpCj4+ICsJCXJldHVybiAtRU5PTUVNOwo+PiArCj4+ICsJLyogVXBkYXRlIG1lbW9y eSBlbnRyeSB2YSAqLwo+PiArCW1lbS0+dmEgPSAodm9pZCAqKXZhOwo+PiArCj4+ICsJLyogY2xl YXIgVENNcyAqLwo+PiArCW1lbXNldF9pbyh2YSwgMCwgbWVtLT5sZW4pOwo+PiArCj4+ICsJLyoK Pj4gKwkgKiBUaGUgUjVzIGV4cGVjdCB0aGVpciBUQ00gYmFua3MgdG8gYmUgYXQgYWRkcmVzcyAw eDAgYW5kIDB4MjAwMCwKPj4gKwkgKiB3aGlsZSBvbiB0aGUgTGludXggc2lkZSB0aGV5IGFyZSBh dCAweGZmZXh4eHh4Lgo+PiArCSAqCj4+ICsJICogWmVybyBvdXQgdGhlIGhpZ2ggMTIgYml0cyBv ZiB0aGUgYWRkcmVzcy4gVGhpcyB3aWxsIGdpdmUKPj4gKwkgKiBleHBlY3RlZCB2YWx1ZXMgZm9y IFRDTSBCYW5rcyAwQSBhbmQgMEIgKDB4MCBhbmQgMHgyMDAwMCkuCj4+ICsJICovCj4+ICsJbWVt LT5kYSAmPSAweDAwMGZmZmZmOwo+PiArCj4+ICsJLyoKPj4gKwkgKiBUQ00gQmFua3MgMUEgYW5k IDFCIHN0aWxsIGhhdmUgdG8gYmUgdHJhbnNsYXRlZC4KPj4gKwkgKgo+PiArCSAqIEJlbG93IGhh bmRsZSB0aGVzZSB0d28gYmFua3MnIGFic29sdXRlIGFkZHJlc3NlcyAoMHhmZmU5MDAwMCBhbmQK Pj4gKwkgKiAweGZmZWIwMDAwKSBhbmQgY29udmVydCB0byB0aGUgZXhwZWN0ZWQgcmVsYXRpdmUg YWRkcmVzc2VzCj4+ICsJICogKDB4MCBhbmQgMHgyMDAwMCkuCj4+ICsJICovCj4+ICsJaWYgKG1l bS0+ZGEgPT0gMHg5MDAwMCB8fCBtZW0tPmRhID09IDB4QjAwMDApCj4+ICsJCW1lbS0+ZGEgLT0g MHg5MDAwMDsKPj4gKwo+PiArCS8qIGlmIHRyYW5zbGF0ZWQgVENNIGJhbmsgYWRkcmVzcyBpcyBu b3QgdmFsaWQgcmVwb3J0IGVycm9yICovCj4+ICsJaWYgKG1lbS0+ZGEgIT0gMHgwICYmIG1lbS0+ ZGEgIT0gMHgyMDAwMCkgewo+PiArCQlkZXZfZXJyKCZycHJvYy0+ZGV2LCAiaW52YWxpZCBUQ00g YWRkcmVzczogJXhcbiIsIG1lbS0+ZGEpOwo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgYWRkX3RjbV9jYXJ2ZW91dF9z cGxpdF9tb2RlKHN0cnVjdCBycHJvYyAqcnByb2MpCj4+ICt7Cj4+ICsJc3RydWN0IHJwcm9jX21l bV9lbnRyeSAqKnJwcm9jX21lbTsKPj4gKwlzdHJ1Y3QgenlucW1wX3I1X2NvcmUgKnI1X2NvcmU7 Cj4+ICsJaW50IGksIG51bV9iYW5rcywgcmV0Owo+PiArCXBoeXNfYWRkcl90IGJhbmtfYWRkcjsK Pj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4+ICsJdTMyIHBtX2RvbWFpbl9pZDsKPj4gKwlzaXpl X3QgYmFua19zaXplOwo+PiArCWNoYXIgKmJhbmtfbmFtZTsKPj4gKwo+PiArCXI1X2NvcmUgPSAo c3RydWN0IHp5bnFtcF9yNV9jb3JlICopcnByb2MtPnByaXY7Cj4+ICsJZGV2ID0gcjVfY29yZS0+ ZGV2Owo+PiArCW51bV9iYW5rcyA9IHI1X2NvcmUtPnRjbV9iYW5rX2NvdW50Owo+PiArCj4+ICsJ cnByb2NfbWVtID0ga2NhbGxvYyhudW1fYmFua3MsCj4+ICsJCQkgICAgc2l6ZW9mKHN0cnVjdCBy cHJvY19tZW1fZW50cnkgKiksIEdGUF9LRVJORUwpOwo+PiArCWlmICghcnByb2NfbWVtKQo+PiAr CQlyZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArCS8qCj4+ICsJICogUG93ZXItb24gRWFjaCA2NEtC IFRDTSwKPj4gKwkgKiByZWdpc3RlciBpdHMgYWRkcmVzcyBzcGFjZSwgbWFwIGFuZCB1bm1hcCBm dW5jdGlvbnMKPj4gKwkgKiBhbmQgYWRkIGNhcnZlb3V0cyBhY2NvcmRpbmdseQo+PiArCSAqLwo+ PiArCWZvciAoaSA9IDA7IGkgPCBudW1fYmFua3M7IGkrKykgewo+PiArCQliYW5rX2FkZHIgPSBy NV9jb3JlLT50Y21fYmFua3NbaV0tPmFkZHI7Cj4+ICsJCWJhbmtfbmFtZSA9IHI1X2NvcmUtPnRj bV9iYW5rc1tpXS0+YmFua19uYW1lOwo+PiArCQliYW5rX3NpemUgPSByNV9jb3JlLT50Y21fYmFu a3NbaV0tPnNpemU7Cj4+ICsJCXBtX2RvbWFpbl9pZCA9IHI1X2NvcmUtPnRjbV9iYW5rc1tpXS0+ cG1fZG9tYWluX2lkOwo+PiArCj4+ICsJCXJldCA9IHp5bnFtcF9wbV9yZXF1ZXN0X25vZGUocG1f ZG9tYWluX2lkLAo+PiArCQkJCQkgICAgIFpZTlFNUF9QTV9DQVBBQklMSVRZX0FDQ0VTUywgMCwK Pj4gKwkJCQkJICAgICBaWU5RTVBfUE1fUkVRVUVTVF9BQ0tfQkxPQ0tJTkcpOwo+PiArCQlpZiAo cmV0IDwgMCkgewo+PiArCQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gdHVybiBvbiBUQ00gMHgl eCIsIHBtX2RvbWFpbl9pZCk7Cj4+ICsJCQlnb3RvIHJlbGVhc2VfdGNtX3NwbGl0Owo+PiArCQl9 Cj4+ICsKPj4gKwkJZGV2X2RiZyhkZXYsICJUQ00gY2FydmVvdXQgc3BsaXQgbW9kZSAlcyBhZGRy PSVsbHgsIHNpemU9MHglbHgiLAo+PiArCQkJYmFua19uYW1lLCBiYW5rX2FkZHIsIGJhbmtfc2l6 ZSk7Cj4+ICsKPj4gKwkJcnByb2NfbWVtW2ldID0gcnByb2NfbWVtX2VudHJ5X2luaXQoZGV2LCBO VUxMLCBiYW5rX2FkZHIsCj4+ICsJCQkJCQkgICAgYmFua19zaXplLCBiYW5rX2FkZHIsCj4+ICsJ CQkJCQkgICAgdGNtX21lbV9tYXAsIHRjbV9tZW1fdW5tYXAsCj4+ICsJCQkJCQkgICAgYmFua19u YW1lKTsKPj4gKwkJaWYgKCFycHJvY19tZW1baV0pIHsKPj4gKwkJCXJldCA9IC1FTk9NRU07Cj4+ ICsJCQl6eW5xbXBfcG1fcmVsZWFzZV9ub2RlKHBtX2RvbWFpbl9pZCk7Cj4+ICsJCQlnb3RvIHJl bGVhc2VfdGNtX3NwbGl0Owo+PiArCQl9Cj4+ICsJfQo+PiArCj4+ICsJLyoKPj4gKwkgKiBBZGQg Y2FydmVvdXRzIG9ubHkgaWYgYWxsIHJwcm9jIG1lbSBlbnRpZXMgYXJlCj4+ICsJICogc3VjY2Vz c2Z1bGx5IGluaXRpYWxpemVkCj4+ICsJICovCj4+ICsJZm9yIChpID0gMDsgaSA8IG51bV9iYW5r czsgaSsrKQo+PiArCQlycHJvY19hZGRfY2FydmVvdXQocnByb2MsIHJwcm9jX21lbVtpXSk7Cj4+ ICsKPj4gKwlrZnJlZShycHJvY19tZW0pOwo+PiArCXJldHVybiAwOwo+PiArCj4+ICtyZWxlYXNl X3RjbV9zcGxpdDoKPj4gKwkvKiBJZiBmYWlsZWQsIFR1cm4gb2ZmIGFsbCBUQ00gYmFua3MgdHVy bmVkIG9uIGJlZm9yZSAqLwo+PiArCWZvciAoaS0tOyBpID49IDA7IGktLSkgewo+PiArCQlwbV9k b21haW5faWQgPSByNV9jb3JlLT50Y21fYmFua3NbaV0tPnBtX2RvbWFpbl9pZDsKPj4gKwkJenlu cW1wX3BtX3JlbGVhc2Vfbm9kZShwbV9kb21haW5faWQpOwo+PiArCQlrZnJlZShycHJvY19tZW1b aV0pOwo+PiArCX0KPj4gKwlrZnJlZShycHJvY19tZW0pOwo+PiArCXJldHVybiByZXQ7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBpbnQgYWRkX3RjbV9jYXJ2ZW91dF9sb2Nrc3RlcF9tb2RlKHN0cnVj dCBycHJvYyAqcnByb2MpCj4+ICt7Cj4+ICsJc3RydWN0IHJwcm9jX21lbV9lbnRyeSAqcnByb2Nf bWVtOwo+PiArCXN0cnVjdCB6eW5xbXBfcjVfY29yZSAqcjVfY29yZTsKPj4gKwlpbnQgaSwgbnVt X2JhbmtzLCByZXQ7Cj4+ICsJcGh5c19hZGRyX3QgYmFua19hZGRyOwo+PiArCXNpemVfdCBiYW5r X3NpemUgPSAwOwo+PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPj4gKwl1MzIgcG1fZG9tYWluX2lk Owo+PiArCWNoYXIgKmJhbmtfbmFtZTsKPj4gKwo+PiArCXI1X2NvcmUgPSAoc3RydWN0IHp5bnFt cF9yNV9jb3JlICopcnByb2MtPnByaXY7Cj4+ICsJZGV2ID0gcjVfY29yZS0+ZGV2Owo+PiArCj4+ ICsJLyogR28gdGhyb3VnaCB6eW5xbXAgYmFua3MgZm9yIHI1IG5vZGUgKi8KPj4gKwludW1fYmFu a3MgPSByNV9jb3JlLT50Y21fYmFua19jb3VudDsKPj4gKwo+PiArCS8qCj4+ICsJICogSW4gbG9j a3N0ZXAgbW9kZSwgVENNIGlzIGNvbnRpZ3VvdXMgbWVtb3J5IGJsb2NrCj4+ICsJICogSG93ZXZl ciwgZWFjaCBUQ00gYmxvY2sgc3RpbGwgbmVlZHMgdG8gYmUgZW5hYmxlZCBpbmRpdmlkdWFsbHku Cj4+ICsJICogU28sIEVuYWJsZSBlYWNoIFRDTSBibG9jayBpbmRpdmlkdWFsbHksIGJ1dCBhZGQg dGhlaXIgc2l6ZQo+PiArCSAqIHRvIGNyZWF0ZSBjb250aWd1b3VzIG1lbW9yeSByZWdpb24uCj4+ ICsJICovCj4+ICsJYmFua19hZGRyID0gcjVfY29yZS0+dGNtX2JhbmtzWzBdLT5hZGRyOwo+PiAr CWJhbmtfbmFtZSA9IHI1X2NvcmUtPnRjbV9iYW5rc1swXS0+YmFua19uYW1lOwo+PiArCj4+ICsJ Zm9yIChpID0gMDsgaSA8IG51bV9iYW5rczsgaSsrKSB7Cj4+ICsJCWJhbmtfc2l6ZSArPSByNV9j b3JlLT50Y21fYmFua3NbaV0tPnNpemU7Cj4+ICsJCXBtX2RvbWFpbl9pZCA9IHI1X2NvcmUtPnRj bV9iYW5rc1tpXS0+cG1fZG9tYWluX2lkOwo+PiArCj4+ICsJCS8qIFR1cm4gb24gZWFjaCBUQ00g YmFuayBpbmRpdmlkdWFsbHkgKi8KPj4gKwkJcmV0ID0genlucW1wX3BtX3JlcXVlc3Rfbm9kZShw bV9kb21haW5faWQsCj4+ICsJCQkJCSAgICAgWllOUU1QX1BNX0NBUEFCSUxJVFlfQUNDRVNTLCAw LAo+PiArCQkJCQkgICAgIFpZTlFNUF9QTV9SRVFVRVNUX0FDS19CTE9DS0lORyk7Cj4+ICsJCWlm IChyZXQgPCAwKSB7Cj4+ICsJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byB0dXJuIG9uIFRDTSAw eCV4IiwgcG1fZG9tYWluX2lkKTsKPj4gKwkJCWdvdG8gcmVsZWFzZV90Y21fbG9ja3N0ZXA7Cj4+ ICsJCX0KPj4gKwl9Cj4+ICsKPj4gKwlkZXZfZGJnKGRldiwgIlRDTSBhZGQgY2FydmVvdXQgbG9j a3N0ZXAgbW9kZSAlcyBhZGRyPTB4JWxseCwgc2l6ZT0weCVseCIsCj4+ICsJCWJhbmtfbmFtZSwg YmFua19hZGRyLCBiYW5rX3NpemUpOwo+PiArCj4+ICsJLyogUmVnaXN0ZXIgVENNIGFkZHJlc3Mg cmFuZ2UsIFRDTSBtYXAgYW5kIHVubWFwIGZ1bmN0aW9ucyAqLwo+PiArCXJwcm9jX21lbSA9IHJw cm9jX21lbV9lbnRyeV9pbml0KGRldiwgTlVMTCwgYmFua19hZGRyLAo+PiArCQkJCQkgYmFua19z aXplLCBiYW5rX2FkZHIsCj4+ICsJCQkJCSB0Y21fbWVtX21hcCwgdGNtX21lbV91bm1hcCwKPj4g KwkJCQkJIGJhbmtfbmFtZSk7Cj4+ICsJaWYgKCFycHJvY19tZW0pIHsKPj4gKwkJcmV0ID0gLUVO T01FTTsKPj4gKwkJZ290byByZWxlYXNlX3RjbV9sb2Nrc3RlcDsKPj4gKwl9Cj4+ICsKPj4gKwkv KiBJZiByZWdpc3RyYXRpb24gaXMgc3VjY2VzcywgYWRkIGNhcnZlb3V0cyAqLwo+PiArCXJwcm9j X2FkZF9jYXJ2ZW91dChycHJvYywgcnByb2NfbWVtKTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiAr Cj4+ICtyZWxlYXNlX3RjbV9sb2Nrc3RlcDoKPj4gKwkvKiBJZiBmYWlsZWQsIFR1cm4gb2ZmIGFs bCBUQ00gYmFua3MgdHVybmVkIG9uIGJlZm9yZSAqLwo+PiArCWZvciAoaS0tOyBpID49IDA7IGkt LSkgewo+PiArCQlwbV9kb21haW5faWQgPSByNV9jb3JlLT50Y21fYmFua3NbaV0tPnBtX2RvbWFp bl9pZDsKPj4gKwkJenlucW1wX3BtX3JlbGVhc2Vfbm9kZShwbV9kb21haW5faWQpOwo+PiArCX0K Pj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICsvKgo+PiArICogYWRkX3RjbV9iYW5rcygp Cj4+ICsgKiBAcnByb2M6IHNpbmdsZSBSNSBjb3JlJ3MgY29ycmVzcG9uZGluZyBycHJvYyBpbnN0 YW5jZQo+PiArICoKPj4gKyAqIEdpdmVuIFI1IG5vZGUgaW4gcmVtb3RlcHJvYyBpbnN0YW5jZQo+ PiArICogYWxsb2NhdGUgcmVtb3RlcHJvYyBjYXJ2ZW91dCBmb3IgVENNIG1lbW9yeQo+PiArICog bmVlZGVkIGZvciBmaXJtd2FyZSB0byBiZSBsb2FkZWQKPj4gKyAqCj4+ICsgKiByZXR1cm4gMCBv biBzdWNjZXNzLCBvdGhlcndpc2Ugbm9uLXplcm8gdmFsdWUgb24gZmFpbHVyZQo+PiArICovCj4+ ICtzdGF0aWMgaW50IGFkZF90Y21fYmFua3Moc3RydWN0IHJwcm9jICpycHJvYykKPj4gK3sKPj4g KwlzdHJ1Y3QgenlucW1wX3I1X2NsdXN0ZXIgKmNsdXN0ZXI7Cj4+ICsJc3RydWN0IHp5bnFtcF9y NV9jb3JlICpyNV9jb3JlOwo+PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPj4gKwo+PiArCXI1X2Nv cmUgPSAoc3RydWN0IHp5bnFtcF9yNV9jb3JlICopcnByb2MtPnByaXY7Cj4+ICsJaWYgKCFyNV9j b3JlKQo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiArCWRldiA9IHI1X2NvcmUtPmRldjsK Pj4gKwo+PiArCWNsdXN0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2LT5wYXJlbnQpOwo+PiArCWlm ICghY2x1c3Rlcikgewo+PiArCQlkZXZfZXJyKGRldi0+cGFyZW50LCAiSW52YWxpZCBkcml2ZXIg ZGF0YVxuIik7Cj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCX0KPj4gKwo+PiArCS8qCj4+ICsJ ICogSW4gbG9ja3N0ZXAgbW9kZSBUQ00gYmFua3MgYXJlIG9uZSBjb250aWd1b3VzIG1lbW9yeSBy ZWdpb24gb2YgMjU2S2IKPj4gKwkgKiBJbiBzcGxpdCBtb2RlLCBlYWNoIFRDTSBiYW5rIGlzIDY0 S2IgYW5kIG5vdCBjb250aWd1b3VzLgo+PiArCSAqIFdlIGFkZCBtZW1vcnkgY2FydmVvdXRzIGFj Y29yZGluZ2x5Lgo+PiArCSAqLwo+PiArCWlmIChjbHVzdGVyLT5tb2RlID09IFNQTElUX01PREUp Cj4+ICsJCXJldHVybiBhZGRfdGNtX2NhcnZlb3V0X3NwbGl0X21vZGUocnByb2MpOwo+PiArCWVs c2UgaWYgKGNsdXN0ZXItPm1vZGUgPT0gTE9DS1NURVBfTU9ERSkKPj4gKwkJcmV0dXJuIGFkZF90 Y21fY2FydmVvdXRfbG9ja3N0ZXBfbW9kZShycHJvYyk7Cj4+ICsKPj4gKwlkZXZfZXJyKGNsdXN0 ZXItPmRldiwgImludmFsaWQgY2x1c3RlciBtb2RlXG4iKTsKPj4gKwlyZXR1cm4gLUVJTlZBTDsK Pj4gK30KPj4gKwo+PiArLyoKPj4gKyAqIHp5bnFtcF9yNV9wYXJzZV9mdygpCj4+ICsgKiBAcnBy b2M6IHNpbmdsZSBSNSBjb3JlJ3MgY29ycmVzcG9uZGluZyBycHJvYyBpbnN0YW5jZQo+PiArICog QGZ3OiBwdHIgdG8gZmlybXdhcmUgdG8gYmUgbG9hZGVkIG9udG8gcjUgY29yZQo+PiArICoKPj4g KyAqIGdldCByZXNvdXJjZSB0YWJsZSBpZiBhdmFpbGFibGUKPj4gKyAqCj4+ICsgKiByZXR1cm4g MCBvbiBzdWNjZXNzLCBvdGhlcndpc2Ugbm9uLXplcm8gdmFsdWUgb24gZmFpbHVyZQo+PiArICov Cj4+ICtzdGF0aWMgaW50IHp5bnFtcF9yNV9wYXJzZV9mdyhzdHJ1Y3QgcnByb2MgKnJwcm9jLCBj b25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQo+PiArewo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwly ZXQgPSBycHJvY19lbGZfbG9hZF9yc2NfdGFibGUocnByb2MsIGZ3KTsKPj4gKwlpZiAocmV0ID09 IC1FSU5WQUwpIHsKPj4gKwkJLyoKPj4gKwkJICogcmVzb3VyY2UgdGFibGUgb25seSByZXF1aXJl ZCBmb3IgSVBDLgo+PiArCQkgKiBpZiBub3QgcHJlc2VudCwgdGhpcyBpcyBub3QgbmVjZXNzYXJp bHkgYW4gZXJyb3I7Cj4+ICsJCSAqIGZvciBleGFtcGxlLCBsb2FkaW5nIHI1IGhlbGxvIHdvcmxk IGFwcGxpY2F0aW9uCj4+ICsJCSAqIHNvIHNpbXBseSBpbmZvcm0gdXNlciBhbmQga2VlcCBnb2lu Zy4KPj4gKwkJICovCj4+ICsJCWRldl9pbmZvKCZycHJvYy0+ZGV2LCAibm8gcmVzb3VyY2UgdGFi bGUgZm91bmQuXG4iKTsKPj4gKwkJcmV0ID0gMDsKPj4gKwl9Cj4+ICsJcmV0dXJuIHJldDsKPj4g K30KPj4gKwo+PiArc3RhdGljIGludCB6eW5xbXBfcjVfcnByb2NfcHJlcGFyZShzdHJ1Y3QgcnBy b2MgKnJwcm9jKQo+PiArewo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwlyZXQgPSBhZGRfdGNtX2Jh bmtzKHJwcm9jKTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCWRldl9lcnIoJnJwcm9jLT5kZXYsICJm YWlsZWQgdG8gZ2V0IFRDTSBiYW5rcywgZXJyICVkXG4iLCByZXQpOwo+PiArCQlyZXR1cm4gcmV0 Owo+PiArCX0KPj4gKwo+PiArCXJldCA9IGFkZF9tZW1fcmVnaW9uc19jYXJ2ZW91dChycHJvYyk7 Cj4+ICsJaWYgKHJldCkKPj4gKwkJZGV2X3dhcm4oJnJwcm9jLT5kZXYsICJmYWlsZWQgdG8gZ2V0 IHJlc2VydmUgbWVtIHJlZ2lvbnMgJWRcbiIsCj4+ICsJCQkgcmV0KTsKPj4gKwo+PiArCXJldHVy biAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHp5bnFtcF9yNV9ycHJvY191bnByZXBhcmUo c3RydWN0IHJwcm9jICpycHJvYykKPj4gK3sKPj4gKwlzdHJ1Y3QgenlucW1wX3I1X2NvcmUgKnI1 X2NvcmU7Cj4+ICsJdTMyIHBtX2RvbWFpbl9pZDsKPj4gKwlpbnQgaTsKPj4gKwo+PiArCXI1X2Nv cmUgPSAoc3RydWN0IHp5bnFtcF9yNV9jb3JlICopcnByb2MtPnByaXY7Cj4+ICsKPj4gKwlmb3Ig KGkgPSAwOyBpIDwgcjVfY29yZS0+dGNtX2JhbmtfY291bnQ7IGkrKykgewo+PiArCQlwbV9kb21h aW5faWQgPSByNV9jb3JlLT50Y21fYmFua3NbaV0tPnBtX2RvbWFpbl9pZDsKPj4gKwkJaWYgKHp5 bnFtcF9wbV9yZWxlYXNlX25vZGUocG1fZG9tYWluX2lkKSkKPj4gKwkJCWRldl93YXJuKHI1X2Nv cmUtPmRldiwKPj4gKwkJCQkgImNhbid0IHR1cm4gb2ZmIFRDTSBiYW5rIDB4JXgiLCBwbV9kb21h aW5faWQpOwo+PiArCX0KPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IHJwcm9jX29wcyB6eW5xbXBfcjVfcnByb2Nfb3BzID0gewo+PiArCS5wcmVw YXJlCT0genlucW1wX3I1X3Jwcm9jX3ByZXBhcmUsCj4+ICsJLnVucHJlcGFyZQk9IHp5bnFtcF9y NV9ycHJvY191bnByZXBhcmUsCj4+ICsJLnN0YXJ0CQk9IHp5bnFtcF9yNV9ycHJvY19zdGFydCwK Pj4gKwkuc3RvcAkJPSB6eW5xbXBfcjVfcnByb2Nfc3RvcCwKPj4gKwkubG9hZAkJPSBycHJvY19l bGZfbG9hZF9zZWdtZW50cywKPj4gKwkucGFyc2VfZncJPSB6eW5xbXBfcjVfcGFyc2VfZncsCj4+ ICsJLmZpbmRfbG9hZGVkX3JzY190YWJsZSA9IHJwcm9jX2VsZl9maW5kX2xvYWRlZF9yc2NfdGFi bGUsCj4+ICsJLnNhbml0eV9jaGVjawk9IHJwcm9jX2VsZl9zYW5pdHlfY2hlY2ssCj4+ICsJLmdl dF9ib290X2FkZHIJPSBycHJvY19lbGZfZ2V0X2Jvb3RfYWRkciwKPj4gK307Cj4+ICsKPj4gKy8q Kgo+PiArICogenlucW1wX3I1X2FkZF9ycHJvY19jb3JlKCkKPj4gKyAqIFByb2JlcyBaeW5xTVAg UjUgcHJvY2Vzc29yIGRldmljZSBub2RlCj4+ICsgKiB0aGlzIGlzIGNhbGxlZCBmb3IgZWFjaCBp bmRpdmlkdWFsIFI1IGNvcmUKPj4gKyAqCj4+ICsgKiBAY2RldjogRGV2aWNlIG5vZGUgb2YgZWFj aCByNSBjb3JlCj4+ICsgKgo+PiArICogUmV0dXJuOiB6eW5xbXBfcjVfY29yZSBvYmplY3QgZm9y IHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgaW4gY2FzZSBvZiBlcnJvci4KPj4gKyAqLwo+PiArc3Rh dGljIHN0cnVjdCB6eW5xbXBfcjVfY29yZSAqenlucW1wX3I1X2FkZF9ycHJvY19jb3JlKHN0cnVj dCBkZXZpY2UgKmNkZXYpCj4+ICt7Cj4+ICsJc3RydWN0IHp5bnFtcF9yNV9jb3JlICpyNV9jb3Jl Owo+PiArCXN0cnVjdCBycHJvYyAqcjVfcnByb2M7Cj4+ICsJaW50IHJldDsKPj4gKwo+PiArCS8q IFNldCB1cCBETUEgbWFzayAqLwo+PiArCXJldCA9IGRtYV9zZXRfY29oZXJlbnRfbWFzayhjZGV2 LCBETUFfQklUX01BU0soMzIpKTsKPj4gKwlpZiAocmV0KQo+PiArCQlyZXR1cm4gRVJSX1BUUihy ZXQpOwo+PiArCj4+ICsJLyogQWxsb2NhdGUgcmVtb3RlcHJvYyBpbnN0YW5jZSAqLwo+PiArCXI1 X3Jwcm9jID0gcnByb2NfYWxsb2MoY2RldiwgZGV2X25hbWUoY2RldiksCj4+ICsJCQkgICAgICAg Jnp5bnFtcF9yNV9ycHJvY19vcHMsCj4+ICsJCQkgICAgICAgTlVMTCwgc2l6ZW9mKHN0cnVjdCB6 eW5xbXBfcjVfY29yZSkpOwo+PiArCWlmICghcjVfcnByb2MpIHsKPj4gKwkJZGV2X2VycihjZGV2 LCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcnByb2MgaW5zdGFuY2VcbiIpOwo+PiAr CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPj4gKwl9Cj4+ICsKPj4gKwlyNV9ycHJvYy0+YXV0 b19ib290ID0gZmFsc2U7Cj4+ICsJcjVfY29yZSA9IChzdHJ1Y3QgenlucW1wX3I1X2NvcmUgKily NV9ycHJvYy0+cHJpdjsKPj4gKwlyNV9jb3JlLT5kZXYgPSBjZGV2Owo+PiArCXI1X2NvcmUtPm5w ID0gZGV2X29mX25vZGUoY2Rldik7Cj4+ICsJaWYgKCFyNV9jb3JlLT5ucCkgewo+PiArCQlkZXZf ZXJyKGNkZXYsICJjYW4ndCBnZXQgZGV2aWNlIG5vZGUgZm9yIHI1IGNvcmVcbiIpOwo+PiArCQly ZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiBIZXJlIEByNV9ycHJvYyBpcyBsZWFrZWQgYW5kIHI1 X3Jwcm9jLT5ycHJvYyBuZXZlciBmcmVlJ2VkLgoKVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHVzZWQg aW4gY2x1c3Rlcl9pbml0LgoKcjVfcnByb2MtPnJwcm9jIGlzIGZyZWUnZWQgaW4gcmVsZWFzZV9y NV9jb3JlIGxhYmVsIGluIAp6eW5xbXBfcjVfY2x1c3Rlcl9pbml0IGZ1bmN0aW9uIGlmIHRoaXMg ZnVuY3Rpb24gZmFpbHMuCgpUaGlzIGF2b2lkcyBtdWx0aXBsZSBmcmVlIG9mIHNhbWUgcmVzb3Vy Y2UuCgo+Cj4+ICsJfQo+PiArCj4+ICsJLyogQWRkIFI1IHJlbW90ZXByb2MgY29yZSAqLwo+PiAr CXJldCA9IHJwcm9jX2FkZChyNV9ycHJvYyk7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlkZXZfZXJy KGNkZXYsICJmYWlsZWQgdG8gYWRkIHI1IHJlbW90ZXByb2NcbiIpOwo+PiArCQlyZXR1cm4gRVJS X1BUUihyZXQpOwo+IFNhbWUuClNhbWUgYXMgYWJvdmUuCj4KPj4gKwl9Cj4+ICsKPj4gKwlyNV9j b3JlLT5ycHJvYyA9IHI1X3Jwcm9jOwo+PiArCXJldHVybiByNV9jb3JlOwo+PiArfQo+PiArCj4+ ICsvKioKPj4gKyAqIHp5bnFtcF9yNV9nZXRfdGNtX25vZGUoKQo+PiArICogSWRlYWxseSB0aGlz IGZ1bmN0aW9uIHNob3VsZCBwYXJzZSB0Y20gbm9kZSBhbmQgc3RvcmUgaW5mb3JtYXRpb24KPj4g KyAqIGluIHI1X2NvcmUgaW5zdGFuY2UuIFdlIHdpbGwgdXNlIGhhcmRjb2RlZCBUQ00gaW5mb3Jt YXRpb24gZnJvbQo+PiArICogZHJpdmVyIGZvciBub3cgaW4gdGhpcyBmdW5jdGlvbi4KPj4gKyAq Cj4gSXQgd291bGQgYmUgYSBnb29kIGlkZWEgdG8gZXhwbGFpbiBfd2h5XyBoYXJkY29kZWQgdmFs dWVzIGFyZSB1c2VkLgpJdCBpcyBleHBsYWluZWQgaW4gZnVuY3Rpb24sIGJ1dCB3aWxsIGFkZCBp biBkZXNjcmlwdGlvbiB0b28uCj4KPgo+PiArICogQGNsdXN0ZXI6IHBvaW50ZXIgdG8genlucW1w X3I1X2NsdXN0ZXIgdHlwZSBvYmplY3QKPj4gKyAqCj4+ICsgKiBSZXR1cm46IDAgZm9yIHN1Y2Nl c3MgYW5kIGVycm9yIGNvZGUgZm9yIGZhaWx1cmUuCj4+ICsgKi8KPj4gK3N0YXRpYyBpbnQgenlu cW1wX3I1X2dldF90Y21fbm9kZShzdHJ1Y3QgenlucW1wX3I1X2NsdXN0ZXIgKmNsdXN0ZXIpCj4+ ICt7Cj4+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gY2x1c3Rlci0+ZGV2Owo+PiArCXN0cnVjdCB6 eW5xbXBfcjVfY29yZSAqcjVfY29yZTsKPj4gKwlpbnQgdGNtX2JhbmtfY291bnQsIHRjbV9ub2Rl Owo+PiArCWludCBpLCBqOwo+PiArCj4+ICsJLyoKPj4gKwkgKiBUb0RvOiBVc2UgcHJlZGVmaW5l ZCBUQ00gYWRkcmVzcyBzcGFjZSB2YWx1ZXMgZnJvbSBkcml2ZXIgd2hpbGUKPiBJJ20gbm90IHN1 cmUgd2h5IHRoZXJlIGlzIGEgIlRvRG8iIGhlcmUgc2luY2UgdGhpcyBpcyBleGFjdGx5IHdoYXQg eW91IGFyZQo+IGRvaW5nLgpBY2suIFRvRG8gbmVlZHMgdG8gZ28uCj4+ICsJICogc3lzdGVtLWR0 IHNwZWMgaXMgbm90IGZpbmFsIGZvciBUQ00KPj4gKwkgKi8KPj4gKwl0Y21fYmFua19jb3VudCA9 IEFSUkFZX1NJWkUoenlucW1wX3RjbV9iYW5rcyk7Cj4+ICsKPj4gKwkvKiBjb3VudCBwZXIgY29y ZSB0Y20gYmFua3MgKi8KPj4gKwl0Y21fYmFua19jb3VudCA9IHRjbV9iYW5rX2NvdW50IC8gY2x1 c3Rlci0+Y29yZV9jb3VudDsKPj4gKwo+PiArCWlmICh0Y21fYmFua19jb3VudCA8PSAwKQo+PiAr CQlyZXR1cm4gLUVJTlZBTDsKPiBBcyBmYXIgYXMgSSBjYW4gdGVsbCB0aGlzIGNhbid0IGhhcHBl biBhbmQgYXMgc3VjaCBzaG91bGQgYmUgcmVtb3ZlZC4KCkkga2VwdCB0aGlzIGNoZWNrIGZvciBm dXR1cmUsIHdoZW4gd2UgYWRkIFRDTSBkdCBub2Rlcy4gSSB3aWxsIHJlbW92ZSBpdC4KCj4KPj4g Kwo+PiArCS8qCj4+ICsJICogcjUgY29yZSAwIHdpbGwgdXNlIGFsbCBvZiBUQ00gYmFua3MgaW4g bG9ja3N0ZXAgbW9kZS4KPj4gKwkgKiBJbiBzcGxpdCBtb2RlLCByNSBjb3JlMCB3aWxsIHVzZSAx MjhrIGFuZCByNSBjb3JlMSB3aWxsIHVzZSBhbm90aGVyCj4+ICsJICogMTI4ay4gQXNzaWduIFRD TSBiYW5rcyB0byBlYWNoIGNvcmUgYWNjb3JkaW5nbHkKPj4gKwkgKi8KPj4gKwl0Y21fbm9kZSA9 IDA7Cj4+ICsJZm9yIChpID0gMDsgaSA8IGNsdXN0ZXItPmNvcmVfY291bnQ7IGkrKykgewo+PiAr CQlyNV9jb3JlID0gY2x1c3Rlci0+cjVfY29yZXNbaV07Cj4+ICsJCXI1X2NvcmUtPnRjbV9iYW5r cyA9IGRldm1fa2NhbGxvYyhkZXYsIHRjbV9iYW5rX2NvdW50LAo+PiArCQkJCQkJICBzaXplb2Yo c3RydWN0IG1lbV9iYW5rX2RhdGEgKiksCj4+ICsJCQkJCQkgIEdGUF9LRVJORUwpOwo+PiArCQlp ZiAoIXI1X2NvcmUtPnRjbV9iYW5rcykKPj4gKwkJCXJldHVybiAtRU5PTUVNOwo+PiArCj4+ICsJ CWZvciAoaiA9IDA7IGogPCB0Y21fYmFua19jb3VudDsgaisrKSB7Cj4+ICsJCQkvKgo+PiArCQkJ ICogVXNlIHByZS1kZWZpbmVkIFRDTSByZWcgdmFsdWVzLgo+PiArCQkJICogRXZlbnR1YWxseSB0 aGlzIHNob3VsZCBiZSByZXBsYWNlZCBieSB2YWx1ZXMKPj4gKwkJCSAqIHBhcnNlZCBmcm9tIGR0 cy4KPj4gKwkJCSAqLwo+PiArCQkJcjVfY29yZS0+dGNtX2JhbmtzW2pdID0KPj4gKwkJCQkoc3Ry dWN0IG1lbV9iYW5rX2RhdGEgKikmenlucW1wX3RjbV9iYW5rc1t0Y21fbm9kZV07Cj4+ICsJCQl0 Y21fbm9kZSsrOwo+PiArCQl9Cj4+ICsKPj4gKwkJcjVfY29yZS0+dGNtX2JhbmtfY291bnQgPSB0 Y21fYmFua19jb3VudDsKPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiAr LyoqCj4+ICsgKiB6eW5xbXBfcjVfZ2V0X21lbV9yZWdpb25fbm9kZSgpCj4+ICsgKiBwYXJzZSBt ZW1vcnktcmVnaW9uIHByb3BlcnR5IGZyb20gZHQgbm9kZSBhbmQgYWRkCj4+ICsgKiBtZW1vcnkg cmVnaW9uIGNhcnZlb3V0cwo+PiArICoKPj4gKyAqIEByNV9jb3JlOiBwb2ludGVyIHRvIHp5bnFt cF9yNV9jb3JlIHR5cGUgb2JqZWN0Cj4+ICsgKgo+PiArICogUmV0dXJuOiAwIGZvciBzdWNjZXNz IGFuZCBlcnJvciBjb2RlIGZvciBmYWlsdXJlLgo+PiArICovCj4+ICtzdGF0aWMgaW50IHp5bnFt cF9yNV9nZXRfbWVtX3JlZ2lvbl9ub2RlKHN0cnVjdCB6eW5xbXBfcjVfY29yZSAqcjVfY29yZSkK Pj4gK3sKPj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCAqcm1lbV9ucDsKPj4gKwlzdHJ1Y3Qg cmVzZXJ2ZWRfbWVtICoqcm1lbTsKPj4gKwlpbnQgcmVzX21lbV9jb3VudCwgaTsKPj4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXY7Cj4+ICsKPj4gKwlkZXYgPSByNV9jb3JlLT5kZXY7Cj4+ICsJbnAgPSBy NV9jb3JlLT5ucDsKPj4gKwo+PiArCXJlc19tZW1fY291bnQgPSBvZl9wcm9wZXJ0eV9jb3VudF9l bGVtc19vZl9zaXplKG5wLCAibWVtb3J5LXJlZ2lvbiIsCj4+ICsJCQkJCQkJc2l6ZW9mKHBoYW5k bGUpKTsKPj4gKwlpZiAocmVzX21lbV9jb3VudCA8PSAwKSB7Cj4+ICsJCWRldl93YXJuKGRldiwg ImZhaWxlZCB0byBnZXQgbWVtb3J5LXJlZ2lvbiBwcm9wZXJ0eSAlZFxuIiwKPj4gKwkJCSByZXNf bWVtX2NvdW50KTsKPj4gKwkJcjVfY29yZS0+cm1lbV9jb3VudCA9IDA7Cj4+ICsJCXJldHVybiAw Owo+PiArCX0KPj4gKwo+PiArCXJtZW0gPSBkZXZtX2tjYWxsb2MoZGV2LCByZXNfbWVtX2NvdW50 LAo+PiArCQkJICAgIHNpemVvZihzdHJ1Y3QgcmVzZXJ2ZWRfbWVtICopLCBHRlBfS0VSTkVMKTsK Pj4gKwlpZiAoIXJtZW0pCj4+ICsJCXJldHVybiAtRU5PTUVNOwo+PiArCj4+ICsJZm9yIChpID0g MDsgaSA8IHJlc19tZW1fY291bnQ7IGkrKykgewo+PiArCQlybWVtX25wID0gb2ZfcGFyc2VfcGhh bmRsZShucCwgIm1lbW9yeS1yZWdpb24iLCBpKTsKPj4gKwkJaWYgKCFybWVtX25wKQo+PiArCQkJ Z290byByZWxlYXNlX3JtZW07Cj4+ICsKPj4gKwkJcm1lbVtpXSA9IG9mX3Jlc2VydmVkX21lbV9s b29rdXAocm1lbV9ucCk7Cj4+ICsJCWlmICghcm1lbVtpXSkgewo+PiArCQkJb2Zfbm9kZV9wdXQo cm1lbV9ucCk7Cj4+ICsJCQlnb3RvIHJlbGVhc2Vfcm1lbTsKPj4gKwkJfQo+PiArCj4+ICsJCW9m X25vZGVfcHV0KHJtZW1fbnApOwo+PiArCX0KPj4gKwo+PiArCXI1X2NvcmUtPnJtZW1fY291bnQg PSByZXNfbWVtX2NvdW50Owo+PiArCXI1X2NvcmUtPnJtZW0gPSBybWVtOwo+PiArCXJldHVybiAw Owo+PiArCj4+ICtyZWxlYXNlX3JtZW06Cj4+ICsJZm9yIChpLS07IGkgPj0gMDsgaS0tKQo+PiAr CQlrZnJlZShybWVtW2ldKTsKPiBGdW5jdGlvbiBvZl9yZXNlcnZlZF9tZW1fbG9va3VwKCkgZG9l c24ndCBhbGxvY2F0ZSBhIG5ldyByZXNlcnZlZF9tZW0gc3RydWN0dXJlLAo+IHlvdSBnZXQgYSBy ZWZlcmVuY2UgdG8gYW4gZXhpc3Rpbmcgb25lLiAgQXMgc3VjaCB0aGVyZSBpcyBubyBuZWVkIHRv IGV4cGxpY2l0bHkKPiBmcmVlIGluZGl2aWR1YWwgZWxlbWVudHMgb2YgdGhlIHJtZW0gYXJyYXku CkFjay4KPgo+PiArCWRldm1fa2ZyZWUoZGV2LCBybWVtKTsKPj4gKwlyZXR1cm4gLUVOT01FTTsK Pj4gK30KPj4gKwo+PiArLyoKPj4gKyAqIHp5bnFtcF9yNV9jb3JlX2luaXQoKQo+PiArICogQ3Jl YXRlIGFuZCBpbml0aWFsaXplIHp5bnFtcF9yNV9jb3JlIHR5cGUgb2JqZWN0Cj4+ICsgKgo+PiAr ICogQGNsdXN0ZXI6IHBvaW50ZXIgdG8genlucW1wX3I1X2NsdXN0ZXIgdHlwZSBvYmplY3QKPj4g KyAqCj4+ICsgKiBSZXR1cm46IDAgZm9yIHN1Y2Nlc3MgYW5kIGVycm9yIGNvZGUgZm9yIGZhaWx1 cmUuCj4+ICsgKi8KPj4gK3N0YXRpYyBpbnQgenlucW1wX3I1X2NvcmVfaW5pdChzdHJ1Y3Qgenlu cW1wX3I1X2NsdXN0ZXIgKmNsdXN0ZXIsCj4+ICsJCQkgICAgICAgZW51bSBycHVfb3Blcl9tb2Rl IGZ3X3JlZ192YWwsCj4+ICsJCQkgICAgICAgZW51bSBycHVfdGNtX2NvbWIgdGNtX21vZGUpCj4+ ICt7Cj4+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gY2x1c3Rlci0+ZGV2Owo+PiArCXN0cnVjdCB6 eW5xbXBfcjVfY29yZSAqcjVfY29yZTsKPj4gKwlpbnQgcmV0LCBpOwo+PiArCj4+ICsJcmV0ID0g enlucW1wX3I1X2dldF90Y21fbm9kZShjbHVzdGVyKTsKPj4gKwlpZiAocmV0IDwgMCkgewo+PiAr CQlkZXZfZXJyKGRldiwgImNhbid0IGdldCB0Y20gbm9kZSwgZXJyICVkXG4iLCByZXQpOwo+PiAr CQlyZXR1cm4gcmV0Owo+PiArCX0KPj4gKwo+PiArCWZvciAoaSA9IDA7IGkgPCBjbHVzdGVyLT5j b3JlX2NvdW50OyBpKyspIHsKPj4gKwkJcjVfY29yZSA9IGNsdXN0ZXItPnI1X2NvcmVzW2ldOwo+ PiArCj4+ICsJCXJldCA9IHp5bnFtcF9yNV9nZXRfbWVtX3JlZ2lvbl9ub2RlKHI1X2NvcmUpOwo+ PiArCQlpZiAocmV0KQo+PiArCQkJZGV2X3dhcm4oZGV2LCAibWVtb3J5LXJlZ2lvbiBwcm9wIGZh aWxlZCAlZFxuIiwgcmV0KTsKPj4gKwo+PiArCQkvKiBJbml0aWFsaXplIHI1IGNvcmVzIHdpdGgg cG93ZXItZG9tYWlucyBwYXJzZWQgZnJvbSBkdHMgKi8KPj4gKwkJcmV0ID0gb2ZfcHJvcGVydHlf cmVhZF91MzJfaW5kZXgocjVfY29yZS0+bnAsICJwb3dlci1kb21haW5zIiwKPj4gKwkJCQkJCSAx LCAmcjVfY29yZS0+cG1fZG9tYWluX2lkKTsKPj4gKwkJaWYgKHJldCkgewo+PiArCQkJZGV2X2Vy cihkZXYsICJmYWlsZWQgdG8gZ2V0IHBvd2VyLWRvbWFpbnMgcHJvcGVydHlcbiIpOwo+PiArCQkJ cmV0dXJuIHJldDsKPj4gKwkJfQo+PiArCj4+ICsJCXJldCA9IHp5bnFtcF9yNV9zZXRfbW9kZShy NV9jb3JlLCBmd19yZWdfdmFsLCB0Y21fbW9kZSk7Cj4+ICsJCWlmIChyZXQpIHsKPj4gKwkJCWRl dl9lcnIoZGV2LCAiZmFpbGVkIHRvIHNldCByNSBjbHVzdGVyIG1vZGUgJWQsIGVyciAlZFxuIiwK Pj4gKwkJCQljbHVzdGVyLT5tb2RlLCByZXQpOwo+PiArCQkJcmV0dXJuIHJldDsKPj4gKwkJfQo+ PiArCX0KPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICsvKgo+PiArICogenlucW1w X3I1X2NsdXN0ZXJfaW5pdCgpCj4+ICsgKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgenlucW1wX3I1 X2NsdXN0ZXIgdHlwZSBvYmplY3QKPj4gKyAqCj4+ICsgKiBAY2x1c3RlcjogcG9pbnRlciB0byB6 eW5xbXBfcjVfY2x1c3RlciB0eXBlIG9iamVjdAo+PiArICoKPj4gKyAqIFJldHVybjogMCBmb3Ig c3VjY2VzcyBhbmQgZXJyb3IgY29kZSBmb3IgZmFpbHVyZS4KPj4gKyAqLwo+PiArc3RhdGljIGlu dCB6eW5xbXBfcjVfY2x1c3Rlcl9pbml0KHN0cnVjdCB6eW5xbXBfcjVfY2x1c3RlciAqY2x1c3Rl cikKPj4gK3sKPj4gKwllbnVtIHp5bnFtcF9yNV9jbHVzdGVyX21vZGUgY2x1c3Rlcl9tb2RlID0g TE9DS1NURVBfTU9ERTsKPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjbHVzdGVyLT5kZXY7Cj4+ ICsJc3RydWN0IGRldmljZV9ub2RlICpkZXZfbm9kZSA9IGRldl9vZl9ub2RlKGRldik7Cj4+ICsJ c3RydWN0IHBsYXRmb3JtX2RldmljZSAqY2hpbGRfcGRldjsKPj4gKwlzdHJ1Y3QgenlucW1wX3I1 X2NvcmUgKipyNV9jb3JlczsKPj4gKwllbnVtIHJwdV9vcGVyX21vZGUgZndfcmVnX3ZhbDsKPj4g KwlzdHJ1Y3QgZGV2aWNlICoqY2hpbGRfZGV2czsKPj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNo aWxkOwo+PiArCWVudW0gcnB1X3RjbV9jb21iIHRjbV9tb2RlOwo+PiArCWludCBjb3JlX2NvdW50 LCByZXQsIGk7Cj4+ICsKPj4gKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXZfbm9kZSwg InhsbngsY2x1c3Rlci1tb2RlIiwgJmNsdXN0ZXJfbW9kZSk7Cj4+ICsKPj4gKwkvKgo+PiArCSAq IG9uIHN1Y2Nlc3MgcmV0dXJucyAwLCBpZiBub3QgZGVmaW5lZCB0aGVuIHJldHVybnMgLUVJTlZB TCwKPj4gKwkgKiBJbiB0aGF0IGNhc2UsIGRlZmF1bHQgaXMgTE9DS1NURVAgbW9kZQo+PiArCSAq Lwo+PiArCWlmIChyZXQgIT0gLUVJTlZBTCAmJiByZXQgIT0gMCkgewo+PiArCQlkZXZfZXJyKGRl diwgIkludmFsaWQgeGxueCxjbHVzdGVyLW1vZGUgcHJvcGVydHlcbiIpOwo+PiArCQlyZXR1cm4g LUVJTlZBTDsKPj4gKwl9Cj4+ICsKPj4gKwkvKgo+PiArCSAqIEZvciBub3cgZHJpdmVyIG9ubHkg c3VwcG9ydHMgc3BsaXQgbW9kZSBhbmQgbG9ja3N0ZXAgbW9kZS4KPj4gKwkgKiBmYWlsIGRyaXZl ciBwcm9iZSBpZiBlaXRoZXIgb2YgdGhhdCBpcyBub3Qgc2V0IGluIGR0cy4KPj4gKwkgKi8KPj4g KwlpZiAoY2x1c3Rlcl9tb2RlID09IExPQ0tTVEVQX01PREUpIHsKPiBXaHkgaXMgYXJlIExPQ0tT VEVQX01PREUgYW5kIExPQ0tTVEVQX01PREUgZGVmaW5lZCB3aGVuIHRoZSBzYW1lIHZhbHVlcyB3 ZXJlCj4gYWxyZWFkeSBhZGRlZCBpbiB4bG54LXp5bnFtcC5oIGluIHBhdGNoIDMvNj8KCkFjdHVh bGx5IExPQ0tTVEVQX01PREUgZGVmaW5lZCBpbiB0aGlzIGRyaXZlciBpcyB0YWtlbiBmcm9tIGR0 LWJpbmRpbmdzIApvZiB0aGlzIGRyaXZlci4gSG93ZXZlciwgUE1fUlBVX01PREVfTE9DS1NURVAg ZGVmaW5lZCBpbiBmaXJtd2FyZSAKcmVwcmVzZW50cyB2YWx1ZSBleHBlY3RlZCBieSBmaXJtd2Fy ZS4gVGhleSBhcmUgbm90IHRoZSBzYW1lIGRlZmluZXMuIApMT0NLU1RFUF9NT0RFID0gMSB3aGlj aCBpcyBkZWZpbmVkIGFzIHBlciB4bG54LGNsdXN0ZXItbW9kZSBiaW5kaW5ncyBhbmQgCnNpbWls YXIgdG8gdGkgY2x1c3Rlci1tb2RlIGJpbmRpbmdzLiBQTV9SUFVfTU9ERV9MT0NLU1RFUCA9IDAg d2hpY2ggaXMgCmV4cGVjdGVkIGZyb20gZmlybXdhcmUuCgoKPiAgICBBbmQgd2h5IG5vdCBhZGQg U0lOR0xFX0NQVV9NT0RFCj4gdGhlcmUgYXMgd2VsbCBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIHRo aW5ncyBpbiBlbnVtIHp5bnFtcF9yNV9jbHVzdGVyX21vZGU/CgoKU0lOR0xFX0NQVV9NT0RFIGp1 c3QgcmVwcmVzZW50cyB4bG54LGNsdXN0ZXItbW9kZSB2YWx1ZSBmcm9tIApkdC1iaW5kaW5ncy4g SXQgaXMgbm90IHN1cHBvcnRlZCBpbiBmaXJtd2FyZS4KClRoZXJlIGFyZSBtdWx0aXBsZSB3YXlz IHRvIGNvbmZpZ3VyZSByNSBjbHVzdGVyIGluIHNpbmdsZS1jcHUgbW9kZS4KCjEpIEFkZCBuZXcg RUVNSSBjYWxsIHdoaWNoIGFza3MgZmlybXdhcmUgdG8gY29uZmlndXJlIGNsdXN0ZXIgaW4gCnNp bmdsZS1jcHUgbW9kZS4KCm9yIDIpIHVzZSBleGlzdGluZyBFRU1JIGNhbGxzIGFuZCBjb25maWd1 cmUgY29yZXMgZnJvbSBkcml2ZXIuIEFzIApzaW5nbGUtY3B1LW1vZGUgaXMgbm90IHN1cHBvcnRl ZCB5ZXQsIEkgYW0gbm90IHN1cmUsIGhvdyBpdCB3aWxsCgpiZSBpbXBsZW1lbnRlZCBvciB3aGF0 IGl0cyBkZXNpZ24gd2lsbCBsb29rIGxpa2UuIFNvLCBJIGhhdmVuJ3QgbW9kaWZpZWQgCmFueXRo aW5nIGluIGZpcm13YXJlIGRyaXZlciByZWxhdGVkIHRvIHNpbmdsZS1jcHUgbW9kZS4KCgo+PiAr CQl0Y21fbW9kZSA9IFBNX1JQVV9UQ01fQ09NQjsKPj4gKwkJZndfcmVnX3ZhbCA9IFBNX1JQVV9N T0RFX0xPQ0tTVEVQOwo+PiArCX0gZWxzZSBpZiAoY2x1c3Rlcl9tb2RlID09IFNQTElUX01PREUp IHsKPj4gKwkJdGNtX21vZGUgPSBQTV9SUFVfVENNX1NQTElUOwo+PiArCQlmd19yZWdfdmFsID0g UE1fUlBVX01PREVfU1BMSVQ7Cj4+ICsJfSBlbHNlIHsKPj4gKwkJZGV2X2VycihkZXYsICJkcml2 ZXIgZG9lcyBub3Qgc3VwcG9ydCBjbHVzdGVyIG1vZGUgJWRcbiIsIGNsdXN0ZXJfbW9kZSk7Cj4+ ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCX0KPj4gKwo+PiArCS8qCj4+ICsJICogTnVtYmVyIG9m IGNvcmVzIGlzIGRlY2lkZWQgYnkgbnVtYmVyIG9mIGNoaWxkIG5vZGVzIG9mCj4+ICsJICogcjVm IHN1YnN5c3RlbSBub2RlIGluIGR0cy4gSWYgU3BsaXQgbW9kZSBpcyB1c2VkIGluIGR0cwo+PiAr CSAqIDIgY2hpbGQgbm9kZXMgYXJlIGV4cGVjdGVkLgo+PiArCSAqIEluIGxvY2tzdGVwIG1vZGUg aWYgdHdvIGNoaWxkIG5vZGVzIGFyZSBhdmFpbGFibGUsCj4+ICsJICogb25seSB1c2UgZmlyc3Qg Y2hpbGQgbm9kZSBhbmQgY29uc2lkZXIgaXQgYXMgY29yZTAKPj4gKwkgKiBhbmQgaWdub3JlIGNv cmUxIGR0IG5vZGUuCj4+ICsJICovCj4+ICsJY29yZV9jb3VudCA9IG9mX2dldF9hdmFpbGFibGVf Y2hpbGRfY291bnQoZGV2X25vZGUpOwo+PiArCWlmIChjb3JlX2NvdW50IDw9IDApIHsKPj4gKwkJ ZGV2X2VycihkZXYsICJJbnZhbGlkIG51bWJlciBvZiByNSBjb3JlcyAlZCIsIGNvcmVfY291bnQp Owo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9IGVsc2UgaWYgKGNsdXN0ZXJfbW9kZSA9PSBT UExJVF9NT0RFICYmIGNvcmVfY291bnQgIT0gMikgewo+PiArCQlkZXZfZXJyKGRldiwgIkludmFs aWQgbnVtYmVyIG9mIHI1IGNvcmVzIGZvciBzcGxpdCBtb2RlXG4iKTsKPj4gKwkJcmV0dXJuIC1F SU5WQUw7Cj4+ICsJfSBlbHNlIGlmIChjbHVzdGVyX21vZGUgPT0gTE9DS1NURVBfTU9ERSAmJiBj b3JlX2NvdW50ID09IDIpIHsKPj4gKwkJZGV2X3dhcm4oZGV2LCAiT25seSByNSBjb3JlMCB3aWxs IGJlIHVzZWRcbiIpOwo+PiArCQljb3JlX2NvdW50ID0gMTsKPj4gKwl9Cj4+ICsKPj4gKwljaGls ZF9kZXZzID0ga2NhbGxvYyhjb3JlX2NvdW50LCBzaXplb2Yoc3RydWN0IGRldmljZSAqKSwgR0ZQ X0tFUk5FTCk7Cj4+ICsJaWYgKCFjaGlsZF9kZXZzKQo+PiArCQlyZXR1cm4gLUVOT01FTTsKPj4g Kwo+PiArCXI1X2NvcmVzID0ga2NhbGxvYyhjb3JlX2NvdW50LAo+PiArCQkJICAgc2l6ZW9mKHN0 cnVjdCB6eW5xbXBfcjVfY29yZSAqKSwgR0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKCFyNV9jb3Jlcykg ewo+PiArCQlrZnJlZShjaGlsZF9kZXZzKTsKPj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4+ICsJfQo+ PiArCj4+ICsJaSA9IDA7Cj4+ICsJZm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUoZGV2 X25vZGUsIGNoaWxkKSB7Cj4+ICsJCWNoaWxkX3BkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2Rl KGNoaWxkKTsKPj4gKwkJaWYgKCFjaGlsZF9wZGV2KSB7Cj4+ICsJCQlvZl9ub2RlX3B1dChjaGls ZCk7Cj4+ICsJCQlyZXQgPSAtRU5PREVWOwo+PiArCQkJZ290byByZWxlYXNlX3I1X2NvcmVzOwo+ PiArCQl9Cj4+ICsKPj4gKwkJY2hpbGRfZGV2c1tpXSA9ICZjaGlsZF9wZGV2LT5kZXY7Cj4+ICsK Pj4gKwkJLyogY3JlYXRlIGFuZCBhZGQgcmVtb3RlcHJvYyBpbnN0YW5jZSBvZiB0eXBlIHN0cnVj dCBycHJvYyAqLwo+PiArCQlyNV9jb3Jlc1tpXSA9IHp5bnFtcF9yNV9hZGRfcnByb2NfY29yZSgm Y2hpbGRfcGRldi0+ZGV2KTsKPj4gKwkJaWYgKElTX0VSUihyNV9jb3Jlc1tpXSkpIHsKPj4gKwkJ CW9mX25vZGVfcHV0KGNoaWxkKTsKPj4gKwkJCXJldCA9IFBUUl9FUlIocjVfY29yZXNbaV0pOwo+ PiArCQkJZ290byByZWxlYXNlX3I1X2NvcmVzOwo+IElmIHdlIGFyZSBoZXJlIGFuZCBpID09IDAs IHdlIGFyZSBsZWFraW5nIGEgcmVmZXJlbmNlIHRvIGNoaWxkX3BkZXYgc2luY2UgdGhlCj4gbG9v cCBpbiByZWxlYXNlX3I1X2NvcmVzIHdvbid0IGV4ZWN1dGUuCkFjay4gSSB3aWxsIGNoZWNrIGlm IGkgPT0gMCBhbmQgcHV0X2RldmljZSgpIGJlZm9yZSBqdW1waW5nIHRvIApyZWxlYXNlX3I1X2Nv cmVzLgo+Cj4+ICsJCX0KPj4gKwo+PiArCQlpKys7Cj4+ICsKPj4gKwkJLyoKPj4gKwkJICogSWYg dHdvIGNoaWxkIG5vZGVzIGFyZSBhdmFpbGFibGUgaW4gZHRzIGluIGxvY2tzdGVwIG1vZGUsCj4+ ICsJCSAqIHRoZW4gaWdub3JlIHNlY29uZCBjaGlsZCBub2RlLgo+PiArCQkgKi8KPj4gKwkJaWYg KGkgPT0gY29yZV9jb3VudCkgewo+PiArCQkJb2Zfbm9kZV9wdXQoY2hpbGQpOwo+PiArCQkJYnJl YWs7Cj4+ICsJCX0KPiBJbnN0ZWFkIG9mIHVzaW5nIHRoZSBpIHRvIGNoZWNrIHRoZSBjb3Jlcywg c2ltcGx5IGJyZWFrIGlmIGNsdXN0ZXJfbW9kZSA9PQo+IExPQ0tTVEVQX01PREUuICBUaGF0IHdp bGwgYXZvaWQgdGhlIGZyYWdpbGUgZGFuY2UgYXJvdW5kIHRoZSBtYW5pcHVsYXRpb24gb2YKPiB2 YXJpYWJsZSBpIGFuZCBzaW1wbGlmeSB0aGUgcmVsZWFzZSBvZiByZXNvdXJjZXMgaW4gcmVsZWFz ZV9yNV9jb3Jlcy4KPgpBY3R1YWxseSB2YXJpYWJsZSBuYW1lICJpIiBuZWVkcyB0byBiZSBjaGFu Z2VkLiBJIG5lZWQgdGhhdCB2YXJpYWJsZSB0byAKdHJhY2sgaG93IG1hbnkgY29yZXPCoCBhcmUg YWRkZWQgc3VjY2Vzc2Z1bGx5LgoKU28sIGlmIGZpcnN0IGNvcmUgaXMgYWRkZWQgYW5kIHNlY29u ZCBjb3JlIGZhaWxzLCB0aGVuIEkgY2FuIHJlbGVhc2UgCnJlc291cmNlcyBhbGxvY2F0ZWQgZm9y IGZpcnN0IGNvcmUgc3VjY2Vzc2Z1bGx5LgoKU28sIGluc3RlYWQgb2YgImkiIEkgY2FuIHVzZSBt ZWFuaW5nZnVsIHZhcmlhYmxlIG5hbWUgbGlrZSAiY29yZXNfYWRkZWQiIApvciAiY29yZXNfYWxs b2NhdGVkIi4KCj4+ICsJfQo+PiArCj4+ICsJY2x1c3Rlci0+bW9kZSA9IGNsdXN0ZXJfbW9kZTsK Pj4gKwljbHVzdGVyLT5jb3JlX2NvdW50ID0gY29yZV9jb3VudDsKPj4gKwljbHVzdGVyLT5yNV9j b3JlcyA9IHI1X2NvcmVzOwo+PiArCj4+ICsJcmV0ID0genlucW1wX3I1X2NvcmVfaW5pdChjbHVz dGVyLCBmd19yZWdfdmFsLCB0Y21fbW9kZSk7Cj4+ICsJaWYgKHJldCA8IDApIHsKPj4gKwkJZGV2 X2VycihkZXYsICJmYWlsZWQgdG8gaW5pdCByNSBjb3JlIGVyciAlZFxuIiwgcmV0KTsKPj4gKwkJ Y2x1c3Rlci0+Y29yZV9jb3VudCA9IDA7Cj4+ICsJCWNsdXN0ZXItPnI1X2NvcmVzID0gTlVMTDsK Pj4gKwkJZ290byByZWxlYXNlX3I1X2NvcmVzOwo+PiArCX0KPj4gKwo+PiArCWtmcmVlKGNoaWxk X2RldnMpOwo+PiArCXJldHVybiAwOwo+PiArCj4+ICtyZWxlYXNlX3I1X2NvcmVzOgo+PiArCWZv ciAoaS0tOyBpID49IDA7IGktLSkgewo+PiArCQlwdXRfZGV2aWNlKGNoaWxkX2RldnNbaV0pOwo+ PiArCQlycHJvY19kZWwocjVfY29yZXNbaV0tPnJwcm9jKTsKPj4gKwkJcnByb2NfZnJlZShyNV9j b3Jlc1tpXS0+cnByb2MpOwo+PiArCX0KPj4gKwlrZnJlZShyNV9jb3Jlcyk7Cj4+ICsJa2ZyZWUo Y2hpbGRfZGV2cyk7Cj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQg enlucW1wX3I1X2NsdXN0ZXJfZXhpdCh2b2lkICpkYXRhKQo+PiArewo+PiArCXN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYgPSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKWRhdGE7Cj4+ICsJ c3RydWN0IHp5bnFtcF9yNV9jbHVzdGVyICpjbHVzdGVyOwo+PiArCXN0cnVjdCB6eW5xbXBfcjVf Y29yZSAqcjVfY29yZTsKPj4gKwlpbnQgaTsKPj4gKwo+PiArCWNsdXN0ZXIgPSAoc3RydWN0IHp5 bnFtcF9yNV9jbHVzdGVyICopcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Cj4+ICsJaWYgKCFj bHVzdGVyKQo+PiArCQlyZXR1cm47Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgY2x1c3Rlci0+ Y29yZV9jb3VudDsgaSsrKSB7Cj4+ICsJCXI1X2NvcmUgPSBjbHVzdGVyLT5yNV9jb3Jlc1tpXTsK Pj4gKwkJcHV0X2RldmljZShyNV9jb3JlLT5kZXYpOwo+PiArCQlycHJvY19kZWwocjVfY29yZS0+ cnByb2MpOwo+PiArCQlycHJvY19mcmVlKHI1X2NvcmUtPnJwcm9jKTsKPj4gKwl9Cj4+ICsKPj4g KwlrZnJlZShjbHVzdGVyLT5yNV9jb3Jlcyk7Cj4+ICsJa2ZyZWUoY2x1c3Rlcik7Cj4+ICsJcGxh dGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Cj4+ICt9Cj4+ICsKPj4gKy8qCj4+ICsgKiB6 eW5xbXBfcjVfcmVtb3RlcHJvY19wcm9iZSgpCj4+ICsgKgo+PiArICogQHBkZXY6IGRvbWFpbiBw bGF0Zm9ybSBkZXZpY2UgZm9yIFI1IGNsdXN0ZXIKPj4gKyAqCj4+ICsgKiBjYWxsZWQgd2hlbiBk cml2ZXIgaXMgcHJvYmVkLCBmb3IgZWFjaCBSNSBjb3JlIHNwZWNpZmllZCBpbiBEVCwKPj4gKyAq IHNldHVwIGFzIG5lZWRlZCB0byBkbyByZW1vdGVwcm9jLXJlbGF0ZWQgb3BlcmF0aW9ucwo+PiAr ICoKPj4gKyAqIFJldHVybjogMCBmb3Igc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgZm9yIGZhaWx1 cmUuCj4+ICsgKi8KPj4gK3N0YXRpYyBpbnQgenlucW1wX3I1X3JlbW90ZXByb2NfcHJvYmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4gK3sKPj4gKwlzdHJ1Y3QgenlucW1wX3I1X2Ns dXN0ZXIgKmNsdXN0ZXI7Cj4+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKPj4g KwlpbnQgcmV0Owo+PiArCj4+ICsJY2x1c3RlciA9IGt6YWxsb2Moc2l6ZW9mKCpjbHVzdGVyKSwg R0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKCFjbHVzdGVyKQo+PiArCQlyZXR1cm4gLUVOT01FTTsKPj4g Kwo+PiArCWNsdXN0ZXItPmRldiA9IGRldjsKPj4gKwo+PiArCXJldCA9IGRldm1fb2ZfcGxhdGZv cm1fcG9wdWxhdGUoZGV2KTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCWRldl9lcnJfcHJvYmUoZGV2 LCByZXQsICJmYWlsZWQgdG8gcG9wdWxhdGUgcGxhdGZvcm0gZGV2XG4iKTsKPj4gKwkJa2ZyZWUo Y2x1c3Rlcik7Cj4+ICsJCXJldHVybiByZXQ7Cj4+ICsJfQo+PiArCj4+ICsJLyogd2lyZSBpbiBz byBlYWNoIGNvcmUgY2FuIGJlIGNsZWFuZWQgdXAgYXQgZHJpdmVyIHJlbW92ZSAqLwo+PiArCXBs YXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNsdXN0ZXIpOwo+PiArCj4+ICsJcmV0ID0genlucW1w X3I1X2NsdXN0ZXJfaW5pdChjbHVzdGVyKTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCXp5bnFtcF9y NV9jbHVzdGVyX2V4aXQocGRldik7Cj4+ICsJCWRldl9lcnJfcHJvYmUoZGV2LCByZXQsICJJbnZh bGlkIHI1ZiBzdWJzeXN0ZW0gZGV2aWNlIHRyZWVcbiIpOwo+PiArCQlyZXR1cm4gcmV0Owo+PiAr CX0KPj4gKwo+PiArCXJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIHp5bnFtcF9y NV9jbHVzdGVyX2V4aXQsIHBkZXYpOwo+PiArCWlmIChyZXQpCj4+ICsJCXJldHVybiByZXQ7Cj4+ ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArLyogTWF0Y2ggdGFibGUgZm9yIE9GIHBs YXRmb3JtIGJpbmRpbmcgKi8KPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHp5 bnFtcF9yNV9yZW1vdGVwcm9jX21hdGNoW10gPSB7Cj4+ICsJeyAuY29tcGF0aWJsZSA9ICJ4bG54 LHp5bnFtcC1yNWZzcyIsIH0sCj4+ICsJeyAvKiBlbmQgb2YgbGlzdCAqLyB9LAo+PiArfTsKPj4g K01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHp5bnFtcF9yNV9yZW1vdGVwcm9jX21hdGNoKTsKPj4g Kwo+PiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgenlucW1wX3I1X3JlbW90ZXByb2Nf ZHJpdmVyID0gewo+PiArCS5wcm9iZSA9IHp5bnFtcF9yNV9yZW1vdGVwcm9jX3Byb2JlLAo+PiAr CS5kcml2ZXIgPSB7Cj4+ICsJCS5uYW1lID0gInp5bnFtcF9yNV9yZW1vdGVwcm9jIiwKPj4gKwkJ Lm9mX21hdGNoX3RhYmxlID0genlucW1wX3I1X3JlbW90ZXByb2NfbWF0Y2gsCj4+ICsJfSwKPj4g K307Cj4+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHp5bnFtcF9yNV9yZW1vdGVwcm9jX2RyaXZl cik7Cj4+ICsKPj4gK01PRFVMRV9ERVNDUklQVElPTigiWGlsaW54IFI1RiByZW1vdGUgcHJvY2Vz c29yIGRyaXZlciIpOwo+PiArTU9EVUxFX0FVVEhPUigiWGlsaW54IEluYy4iKTsKPj4gK01PRFVM RV9MSUNFTlNFKCJHUEwiKTsKPiBUaGVyZSBpcyBhIGRpc2NyZXBlbmN5IGJldHdlZW4gdGhlIEdQ TC0yLjAgaW4gdGhlIFNQRFMgaWRlbnRpZmllciBhbmQgdGhlIGFib3ZlLgo+Cj4gTW9yZSBjb21t ZW50cyB0b21vcnJvdyBvciBUdWVzZGF5Lgo+Cj4gVGhhbmtzLAo+IE1hdGhpZXUKPgo+PiAtLSAK Pj4gMi4yNS4xCj4+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3Rz LmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5m by9saW51eC1hcm0ta2VybmVsCg==