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 0DFEDC433F5 for ; Wed, 9 Mar 2022 07:20:48 +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:In-Reply-To:References:CC:To:From:Subject: MIME-Version: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=V530F5gagFF64+wc2HoTj/AR3Iz2uGNb2AqgWUO5xGg=; b=4Pp3az3vcld1jx 3uCxoGwBEtZmhyeRcoDUhg9xOGobtgtwu7byY+slghpIK/EEFqi7yFNbWenWWzpcG8obldsw+IXFU z6SGXixPWJrvvnT+BVzLsYclqOqpPxT1zOdu19D8MhQFhAPTRa5tVbP1TET9Q//3wv26wFboJS5Z/ omQUhkvYhd2euo4ROKucGQYXkSkhL8DW8rtH2Uz2MnOYaEzg4PyuQQh5cPUhau7Ob0k59dnZrlfi7 3yGkfc0JpuC7m8I8KP8jNdjMrs0RcZy9uSP3nOqC6g8rbqPIbVvU5ntg/gfdIalM10mT10a/6Zlhy 6Xzljz5gDCY/2t+J1kIA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nRqbB-007agU-KJ; Wed, 09 Mar 2022 07:19:05 +0000 Received: from mail-co1nam11on20604.outbound.protection.outlook.com ([2a01:111:f400:7eab::604] helo=NAM11-CO1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nRqb7-007af5-LJ for linux-arm-kernel@lists.infradead.org; Wed, 09 Mar 2022 07:19:04 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UVxo05Gjq8uNLHu9VTsMHnF85N+sg6p+BE9Ez45d14UonsFXTFXt7C446jK2N+35PcE4/EAu2JGvl3+DObfBy501lYKdiOWDZdlKjjOda63rAsLCRM5Q4XMX2RRdE9ETjBUZSHjvetG4JrnwYv91USvo/C9i+GP8cFT2IVbrGH3j4VrTKRw3HhXkbk6O4PiDS5UzDG68FLb6szcyLFZZLOZscE18te71G6yJniRj+ODwIZLHhZP5ZuCfC7IzSFHBWtIxsk0IvpewnRv8QH5LM41cY50+rpLYnPlaHD5WBV/kCeXR0vtUyO6OiPoStTFhoLV1l1Gh7JYexCgWcIvalw== 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=9m6uvq3lF6bcXBCqK8BirC2YHMi290W5KOR/dc6KHok=; b=gTco53TWgteQw57cNrpE1Q2jyfYBo2YPxG8ATu9Q23gbgfhbPN430njHyedGrn8692xbpqZdtLMp1KJVrHEmcuMHVWlkB6cmkNlt+f0SqCODeTsQwia0n8TQ0USdqH/wEysK/idxYk01l5MsLMtVCg/kgNiiLT9ory1WmgQzxSjMpOBTH8uglG0jIx99XcRa54odUdjnJfJY2SD0RhesUbIMsj6bGqXQM1YPQZSD8leIkupNcjMIUoIT8666rSzFbBi3m+1iTX6yDPu2CNz9UHyvuZU7Nnsg6v57K5Jdf77geYgT9zc/FPiKA5zNBqIR7VyT8N3WJXehx/bul/UNCw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 149.199.80.198) smtp.rcpttodomain=linaro.org smtp.mailfrom=xilinx.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=xilinx.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector2-xilinx-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9m6uvq3lF6bcXBCqK8BirC2YHMi290W5KOR/dc6KHok=; b=iBNZKX9N7iM23xoTBbVX6g2MWcSBNeivBOEJxxcG52BYGkJ3VuUFc6e5NwtnNZUyIlr+e9ZVo7v9QGsFxe1o8ggDBIu23xRm+9dxTcZtUA3klbl1wGZQ1Jk7YL8n+EOeubQKLcQtd3l+SvrG9779XleKifWyNYH/GiUFiZc2h3k= Received: from SN4PR0501CA0105.namprd05.prod.outlook.com (2603:10b6:803:42::22) by CH2PR02MB6088.namprd02.prod.outlook.com (2603:10b6:610:5::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5038.14; Wed, 9 Mar 2022 07:18:55 +0000 Received: from SN1NAM02FT0021.eop-nam02.prod.protection.outlook.com (2603:10b6:803:42:cafe::42) by SN4PR0501CA0105.outlook.office365.com (2603:10b6:803:42::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5061.7 via Frontend Transport; Wed, 9 Mar 2022 07:18:54 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 149.199.80.198) smtp.mailfrom=xilinx.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=xilinx.com; Received-SPF: Pass (protection.outlook.com: domain of xilinx.com designates 149.199.80.198 as permitted sender) receiver=protection.outlook.com; client-ip=149.199.80.198; helo=xir-pvapexch02.xlnx.xilinx.com; Received: from xir-pvapexch02.xlnx.xilinx.com (149.199.80.198) by SN1NAM02FT0021.mail.protection.outlook.com (10.97.5.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.5038.14 via Frontend Transport; Wed, 9 Mar 2022 07:18:54 +0000 Received: from xir-pvapexch02.xlnx.xilinx.com (172.21.17.17) by xir-pvapexch02.xlnx.xilinx.com (172.21.17.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.14; Wed, 9 Mar 2022 07:18:53 +0000 Received: from smtp.xilinx.com (172.21.105.198) by xir-pvapexch02.xlnx.xilinx.com (172.21.17.17) with Microsoft SMTP Server id 15.1.2176.14 via Frontend Transport; Wed, 9 Mar 2022 07:18:53 +0000 Received: from [10.71.116.239] (port=60794) by smtp.xilinx.com with esmtp (Exim 4.90) (envelope-from ) id 1nRqay-0004Sm-FZ; Wed, 09 Mar 2022 07:18:52 +0000 Message-ID: <1be9d9bd-4c74-d38f-6a9b-3a17d86fe380@xilinx.com> Date: Tue, 8 Mar 2022 23:18:49 -0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.6.1 Subject: Re: [PATCH v3 6/6] drivers: remoteproc: Add Xilinx r5 remoteproc driver Content-Language: en-US From: Tanmay Shah To: Mathieu Poirier CC: , , , , , , , , , , , References: <20220210112824.2084724-1-tanmay.shah@xilinx.com> <20220210112824.2084724-7-tanmay.shah@xilinx.com> <20220218191150.GB574087@p14s> <6a9dcca9-3c86-f603-d13a-acc74161f1a1@xilinx.com> In-Reply-To: <6a9dcca9-3c86-f603-d13a-acc74161f1a1@xilinx.com> X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4c6cf969-d4d6-4904-3044-08da019d11e1 X-MS-TrafficTypeDiagnostic: CH2PR02MB6088:EE_ X-Microsoft-Antispam-PRVS: X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: BFAKe1q+FuDTHhQM6QFH7xX3vYyHr+i/0/WBF55lNuXE/OPZI06i0Mg25HkofiF3NbDZMLrxmG0/v77RiyyBkpLMHaQYhmtffr5ij2p5SKQwXM5WuZaBrxT02j8fTml+268yeeplQklX75qAMNycXMiDyq4fR4ORRPrW8XatceR60y1Iiq9EQcrlf4Dz0BsLZS3VZoPWJE5FrcXaUR11NWjC3p97IjzHeBN9YZTZEkGQkm7OqaA+rVaCjofdbsBaSdcDhywQBhegu5lR2LvNIrqN8PlVGnqwkTGa8Saf4Cg0sufjQ3qZoR6YsSRqwyS+ffwuny/JN93O4KWyz6Xe//fuhf/1tuG/jbi3vuAg4+ABHsDB1X5ltOA2V9FPEnAPromN4Av7rZed4LKbldFZaWE9PqXB3HDp7BUVPXDb5GV+3B72XamtMEByhhRIZC/PM+5jzE8ipj5T0HKsniYx4nLIi9udlI9gFROasS1zjnCs4K4CrGX+oeVVy0b+ihusVRfiOeqXXTEdiGVEzgbBWU+HGz9NlwQQKGE/cUHNGNlN2W3SKtFhUBjpBIHDaYEvWl0FUemtAUdJ8pKxolCMw6HeGUoDQmp41JnTzX61+4Vx1wn4cFLj6na+pK97mhUAf0tTGBPibpP1D+zrkJGUzp+VywZDSJYbQ+ZCAleZdlOYFdu+1eYGjGeww+h0cDPnU15HZb0f+b3zOagGfWfD/Fs2Ausm58uZedcTH9HMTl0= X-Forefront-Antispam-Report: CIP:149.199.80.198; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:xir-pvapexch02.xlnx.xilinx.com; PTR:unknown-80-198.xilinx.com; CAT:NONE; SFS:(13230001)(4636009)(46966006)(40470700004)(36840700001)(36860700001)(508600001)(316002)(44832011)(31696002)(47076005)(6666004)(2616005)(36756003)(336012)(426003)(186003)(26005)(31686004)(83380400001)(82310400004)(4326008)(356005)(8676002)(70206006)(2906002)(70586007)(8936002)(6916009)(5660300002)(9786002)(54906003)(7636003)(30864003)(40460700003)(53546011)(50156003)(43740500002); DIR:OUT; SFP:1101; X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Mar 2022 07:18:54.5154 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4c6cf969-d4d6-4904-3044-08da019d11e1 X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c; Ip=[149.199.80.198]; Helo=[xir-pvapexch02.xlnx.xilinx.com] X-MS-Exchange-CrossTenant-AuthSource: SN1NAM02FT0021.eop-nam02.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR02MB6088 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220308_231901_812300_8461F923 X-CRM114-Status: GOOD ( 25.39 ) 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 Ck9uIDIvMjEvMjIgNjoxMyBQTSwgVGFubWF5IFNoYWggd3JvdGU6Cj4KPiBPbiAyLzE4LzIyIDEx OjExIEFNLCBNYXRoaWV1IFBvaXJpZXIgd3JvdGU6Cj4+IE9uIFRodSwgRmViIDEwLCAyMDIyIGF0 IDAzOjI4OjI0QU0gLTA4MDAsIFRhbm1heSBTaGFoIHdyb3RlOgo+Pj4gVGhpcyBkcml2ZXIgZW5h YmxlcyByNWYgZHVhbCBjb3JlIFJlYWwgdGltZSBQcm9jZXNzaW5nIFVuaXQgc3Vic3lzdGVtCj4+ PiBhdmFpbGFibGUgb24gWGlsaW54IFp5bnEgVWx0cmFzY2FsZSBNUFNvQyBQbGF0Zm9ybS4gUlBV IHN1YnN5c3RlbQo+Pj4gKGNsdXN0ZXIpIGNhbiBiZSBjb25maWd1cmVkIGluIGRpZmZlcmVudCBt b2RlcyBlLmcuIHNwbGl0IG1vZGUgaW4gd2hpY2gKPj4+IHR3byByNWYgY29yZXMgd29yayBpbmRl cGVuZGVudCBvZiBlYWNoIG90aGVyIGFuZCBsb2NrLXN0ZXAgbW9kZSBpbiAKPj4+IHdoaWNoCj4+ PiBib3RoIHI1ZiBjb3JlcyBleGVjdXRlIHNhbWUgY29kZSBjbG9jay1mb3ItY2xvY2sgYW5kIG5v dGlmeSBpZiB0aGUKPj4+IHJlc3VsdCBpcyBkaWZmZXJlbnQuCj4+Pgo+Pj4gVGhlIFhpbGlueCBy NSBSZW1vdGVwcm9jIERyaXZlciBib290cyB0aGUgUlBVIGNvcmVzIHZpYSBjYWxscyB0byB0aGUg Cj4+PiBYaWxpbngKPj4+IFBsYXRmb3JtIE1hbmFnZW1lbnQgVW5pdCB0aGF0IGhhbmRsZXMgdGhl IFI1IGNvbmZpZ3VyYXRpb24sIG1lbW9yeSAKPj4+IGFjY2Vzcwo+Pj4gYW5kIFI1IGxpZmVjeWNs ZSBtYW5hZ2VtZW50LiBUaGUgaW50ZXJmYWNlIHRvIHRoaXMgbWFuYWdlciBpcyBkb25lIAo+Pj4g aW4gdGhpcwo+Pj4gZHJpdmVyIHZpYSB6eW5xbXBfcG1fKiBmdW5jdGlvbiBjYWxscy4KPj4+Cj4+ PiBTaWduZWQtb2ZmLWJ5OiBCZW4gTGV2aW5za3k8YmVuLmxldmluc2t5QHhpbGlueC5jb20+Cj4+ PiBTaWduZWQtb2ZmLWJ5OiBUYW5tYXkgU2hhaDx0YW5tYXkuc2hhaEB4aWxpbnguY29tPgo+Pj4g LS0tCgpbIC4uLi4gXQoKCj4+PiArCj4+PiArLyoKPj4+ICsgKiB6eW5xbXBfcjVfcnByb2NfbWVt X21hcAo+Pj4gKyAqIEBycHJvYzogc2luZ2xlIFI1IGNvcmUncyBjb3JyZXNwb25kaW5nIHJwcm9j IGluc3RhbmNlCj4+PiArICogQG1lbTogbWVtIGVudHJ5IHRvIG1hcAo+Pj4gKyAqCj4+PiArICog Q2FsbGJhY2sgdG8gbWFwIHZhIGZvciBtZW1vcnktcmVnaW9uJ3MgY2FydmVvdXQuCj4+PiArICoK Pj4+ICsgKiByZXR1cm4gMCBvbiBzdWNjZXNzLCBvdGhlcndpc2Ugbm9uLXplcm8gdmFsdWUgb24g ZmFpbHVyZQo+Pj4gKyAqLwo+Pj4gK3N0YXRpYyBpbnQgenlucW1wX3I1X3Jwcm9jX21lbV9tYXAo c3RydWN0IHJwcm9jICpycHJvYywKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc3RydWN0IHJwcm9jX21lbV9lbnRyeSAqbWVtKQo+Pj4gK3sKPj4+ICvCoMKgwqAgdm9p ZCBfX2lvbWVtICp2YTsKPj4+ICsKPj4+ICvCoMKgwqAgdmEgPSBpb3JlbWFwX3djKG1lbS0+ZG1h LCBtZW0tPmxlbik7Cj4+PiArwqDCoMKgIGlmIChJU19FUlJfT1JfTlVMTCh2YSkpCj4+PiArwqDC oMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4+PiArCj4+PiArwqDCoMKgIG1lbS0+dmEgPSAo dm9pZCAqKXZhOwo+Pj4gKwo+Pj4gK8KgwqDCoCByZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiAr LyoKPj4+ICsgKiB6eW5xbXBfcjVfcnByb2NfbWVtX3VubWFwCj4+PiArICogQHJwcm9jOiBzaW5n bGUgUjUgY29yZSdzIGNvcnJlc3BvbmRpbmcgcnByb2MgaW5zdGFuY2UKPj4+ICsgKiBAbWVtOiBt ZW0gZW50cnkgdG8gdW5tYXAKPj4+ICsgKgo+Pj4gKyAqIFVubWFwIG1lbW9yeS1yZWdpb24gY2Fy dmVvdXQKPj4+ICsgKgo+Pj4gKyAqIHJldHVybiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBub24t emVybyB2YWx1ZSBvbiBmYWlsdXJlCj4+PiArICovCj4+PiArc3RhdGljIGludCB6eW5xbXBfcjVf cnByb2NfbWVtX3VubWFwKHN0cnVjdCBycHJvYyAqcnByb2MsCj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgcnByb2NfbWVtX2VudHJ5ICptZW0pCj4+ PiArewo+Pj4gK8KgwqDCoCBpb3VubWFwKCh2b2lkIF9faW9tZW0gKiltZW0tPnZhKTsKPj4+ICvC oMKgwqAgcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gKy8qCj4+PiArICogYWRkX21lbV9yZWdp b25zCj4+PiArICogQHI1X2NvcmU6IHNpbmdsZSBSNSBjb3JlJ3MgY29ycmVzcG9uZGluZyB6eW5x bXBfcjVfY29yZSB0eXBlIAo+Pj4gaW5zdGFuY2UKPj4+ICsgKiBAcm1lbTogcmVzZXJ2ZWQgbWVt IHJlZ2lvbiBwYXJzZWQgZnJvbSBkdCBub2RlCj4+PiArICoKPj4+ICsgKiBDb25zdHJ1Y3QgcnBy b2MgbWVtIGNhcnZlb3V0cyBmcm9tIGNhcnZlb3V0IHByb3ZpZGVkIGluCj4+PiArICogbWVtb3J5 LXJlZ2lvbiBwcm9wZXJ0eQo+Pj4gKyAqCj4+PiArICogcmV0dXJuIDAgb24gc3VjY2Vzcywgb3Ro ZXJ3aXNlIG5vbi16ZXJvIHZhbHVlIG9uIGZhaWx1cmUKPj4+ICsgKi8KPj4+ICtzdGF0aWMgaW50 IGFkZF9tZW1fcmVnaW9uc19jYXJ2ZW91dChzdHJ1Y3QgenlucW1wX3I1X2NvcmUgKnI1X2NvcmUs Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHJlc2Vy dmVkX21lbSAqcm1lbSkKPj4+ICt7Cj4+PiArwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRldjsKPj4+ ICvCoMKgwqAgc3RydWN0IHJwcm9jX21lbV9lbnRyeSAqbWVtOwo+Pj4gK8KgwqDCoCBzdHJ1Y3Qg cnByb2MgKnJwcm9jOwo+Pj4gKwo+Pj4gK8KgwqDCoCBycHJvYyA9IHI1X2NvcmUtPnJwcm9jOwo+ Pj4gK8KgwqDCoCBkZXYgPSByNV9jb3JlLT5kZXY7Cj4+PiArCj4+PiArwqDCoMKgIC8qIFJlZ2lz dGVyIGFzc29jaWF0ZWQgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMgKi8KPj4+ICvCoMKgwqAgbWVt ID0gcnByb2NfbWVtX2VudHJ5X2luaXQoZGV2LCBOVUxMLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAoZG1hX2FkZHJfdClybWVtLT5iYXNlLAo+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBybWVtLT5zaXplLCBybWVtLT5iYXNlLAo+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB6eW5xbXBfcjVfcnByb2NfbWVt X21hcCwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgenlucW1wX3I1 X3Jwcm9jX21lbV91bm1hcCwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcm1lbS0+bmFtZSk7Cj4+PiArwqDCoMKgIGlmICghbWVtKQo+Pj4gK8KgwqDCoMKgwqDCoMKg IHJldHVybiAtRU5PTUVNOwo+Pj4gKwo+Pj4gK8KgwqDCoCBycHJvY19hZGRfY2FydmVvdXQocnBy b2MsIG1lbSk7Cj4+PiArCj4+PiArwqDCoMKgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+Clsg Li4uIF0KCj4+PiArCj4+PiArLyoKPj4+ICsgKiB6eW5xbXBfcjVfcGFyc2VfZncoKQo+Pj4gKyAq IEBycHJvYzogc2luZ2xlIFI1IGNvcmUncyBjb3JyZXNwb25kaW5nIHJwcm9jIGluc3RhbmNlCj4+ PiArICogQGZ3OiBwdHIgdG8gZmlybXdhcmUgdG8gYmUgbG9hZGVkIG9udG8gcjUgY29yZQo+Pj4g KyAqCj4+PiArICogV2hlbiBsb2FkaW5nIGZpcm13YXJlLCBlbnN1cmUgdGhlIG5lY2Vzc2FyeSBj YXJ2ZW91dHMgYXJlIGluIAo+Pj4gcmVtb3RlcHJvYwo+Pj4gKyAqCj4+PiArICogcmV0dXJuIDAg b24gc3VjY2Vzcywgb3RoZXJ3aXNlIG5vbi16ZXJvIHZhbHVlIG9uIGZhaWx1cmUKPj4+ICsgKi8K Pj4+ICtzdGF0aWMgaW50IHp5bnFtcF9yNV9wYXJzZV9mdyhzdHJ1Y3QgcnByb2MgKnJwcm9jLCBj b25zdCBzdHJ1Y3QgCj4+PiBmaXJtd2FyZSAqZncpCj4+PiArewo+Pj4gK8KgwqDCoCBpbnQgcmV0 Owo+Pj4gK8KgwqDCoCBzdHJ1Y3QgenlucW1wX3I1X2NvcmUgKnI1X2NvcmU7Cj4+PiArwqDCoMKg IHN0cnVjdCBkZXZpY2UgKmRldjsKPj4+ICsKPj4+ICvCoMKgwqAgcjVfY29yZSA9IHJwcm9jLT5w cml2Owo+Pj4gKwo+Pj4gK8KgwqDCoCBkZXYgPSByNV9jb3JlLT5kZXY7Cj4+PiArCj4+PiArwqDC oMKgIHJldCA9IGFkZF90Y21fYmFua3MocnByb2MpOwo+Pj4gK8KgwqDCoCBpZiAocmV0KSB7Cj4+ PiArwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IFRDTSBiYW5rcywg ZXJyICVkXG4iLCByZXQpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+PiArwqDC oMKgIH0KPj4+ICsKPj4+ICvCoMKgwqAgcmV0ID0gcnByb2NfZWxmX2xvYWRfcnNjX3RhYmxlKHJw cm9jLCBmdyk7Cj4+PiArwqDCoMKgIGlmIChyZXQgPT0gLUVJTlZBTCkgewo+Pj4gK8KgwqDCoMKg wqDCoMKgIC8qCj4+PiArwqDCoMKgwqDCoMKgwqDCoCAqIHJlc291cmNlIHRhYmxlIG9ubHkgcmVx dWlyZWQgZm9yIElQQy4KPj4+ICvCoMKgwqDCoMKgwqDCoMKgICogaWYgbm90IHByZXNlbnQsIHRo aXMgaXMgbm90IG5lY2Vzc2FyaWx5IGFuIGVycm9yOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBm b3IgZXhhbXBsZSwgbG9hZGluZyByNSBoZWxsbyB3b3JsZCBhcHBsaWNhdGlvbgo+Pj4gK8KgwqDC oMKgwqDCoMKgwqAgKiBzbyBzaW1wbHkgaW5mb3JtIHVzZXIgYW5kIGtlZXAgZ29pbmcuCj4+PiAr wqDCoMKgwqDCoMKgwqDCoCAqLwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGRldl9pbmZvKCZycHJvYy0+ ZGV2LCAibm8gcmVzb3VyY2UgdGFibGUgZm91bmQuXG4iKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBy ZXQgPSAwOwo+Pj4gK8KgwqDCoCB9Cj4+PiArwqDCoMKgIHJldHVybiByZXQ7Cj4+PiArfQo+Pj4g Kwo+Pj4gK3N0YXRpYyBzdHJ1Y3QgcnByb2Nfb3BzIHp5bnFtcF9yNV9ycHJvY19vcHMgPSB7Cj4+ PiArwqDCoMKgIC5zdGFydMKgwqDCoMKgwqDCoMKgID0genlucW1wX3I1X3Jwcm9jX3N0YXJ0LAo+ Pj4gK8KgwqDCoCAuc3RvcMKgwqDCoMKgwqDCoMKgID0genlucW1wX3I1X3Jwcm9jX3N0b3AsCj4+ PiArwqDCoMKgIC5sb2FkwqDCoMKgwqDCoMKgwqAgPSBycHJvY19lbGZfbG9hZF9zZWdtZW50cywK Pj4+ICvCoMKgwqAgLnBhcnNlX2Z3wqDCoMKgID0genlucW1wX3I1X3BhcnNlX2Z3LAo+Pj4gK8Kg wqDCoCAuZmluZF9sb2FkZWRfcnNjX3RhYmxlID0gcnByb2NfZWxmX2ZpbmRfbG9hZGVkX3JzY190 YWJsZSwKPj4+ICvCoMKgwqAgLnNhbml0eV9jaGVja8KgwqDCoCA9IHJwcm9jX2VsZl9zYW5pdHlf Y2hlY2ssCj4+PiArwqDCoMKgIC5nZXRfYm9vdF9hZGRywqDCoMKgID0gcnByb2NfZWxmX2dldF9i b290X2FkZHIsCj4+PiArfTsKPj4+ICsKPj4+ClsgLi4uIF0KCgo+Pj4gKwo+Pj4gKy8qKgo+Pj4g KyAqIHp5bnFtcF9yNV9nZXRfbWVtX3JlZ2lvbl9ub2RlKCkKPj4+ICsgKiBwYXJzZSBtZW1vcnkt cmVnaW9uIHByb3BlcnR5IGZyb20gZHQgbm9kZSBhbmQgYWRkCj4+PiArICogbWVtb3J5IHJlZ2lv biBjYXJ2ZW91dHMKPj4+ICsgKgo+Pj4gKyAqIEByNV9jb3JlOiBwb2ludGVyIHRvIHp5bnFtcF9y NV9jb3JlIHR5cGUgb2JqZWN0Cj4+PiArICoKPj4+ICsgKiBSZXR1cm46IDAgZm9yIHN1Y2Nlc3Mg YW5kIGVycm9yIGNvZGUgZm9yIGZhaWx1cmUuCj4+PiArICovCj4+PiArc3RhdGljIGludCB6eW5x bXBfcjVfZ2V0X21lbV9yZWdpb25fbm9kZShzdHJ1Y3QgenlucW1wX3I1X2NvcmUgCj4+PiAqcjVf Y29yZSkKPj4+ICt7Cj4+PiArwqDCoMKgIGludCByZXNfbWVtX2NvdW50LCBpLCByZXQ7Cj4+PiAr wqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRldjsKPj4+ICvCoMKgwqAgc3RydWN0IGRldmljZV9ub2Rl ICpucCwgKnJtZW1fbnA7Cj4+PiArwqDCoMKgIHN0cnVjdCByZXNlcnZlZF9tZW0gKnJtZW07Cj4+ PiArCj4+PiArwqDCoMKgIGRldiA9IHI1X2NvcmUtPmRldjsKPj4+ICsKPj4+ICvCoMKgwqAgbnAg PSByNV9jb3JlLT5ucDsKPj4+ICsKPj4+ICvCoMKgwqAgcmVzX21lbV9jb3VudCA9IG9mX3Byb3Bl cnR5X2NvdW50X2VsZW1zX29mX3NpemUobnAsIAo+Pj4gIm1lbW9yeS1yZWdpb24iLAo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXpl b2YocGhhbmRsZSkpOwo+Pj4gK8KgwqDCoCBpZiAocmVzX21lbV9jb3VudCA8PSAwKSB7Cj4+PiAr wqDCoMKgwqDCoMKgwqAgZGV2X3dhcm4oZGV2LCAiZmFpbGVkIHRvIGdldCBtZW1vcnktcmVnaW9u IHByb3BlcnR5ICVkXG4iLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXNfbWVtX2Nv dW50KTsKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4+ICvCoMKgwqAgfQo+ Pj4gKwo+Pj4gK8KgwqDCoCBmb3IgKGkgPSAwOyBpIDwgcmVzX21lbV9jb3VudDsgaSsrKSB7Cj4+ PiArwqDCoMKgwqDCoMKgwqAgcm1lbV9ucCA9IG9mX3BhcnNlX3BoYW5kbGUobnAsICJtZW1vcnkt cmVnaW9uIiwgaSk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCFybWVtX25wKQo+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKg wqAgcm1lbSA9IG9mX3Jlc2VydmVkX21lbV9sb29rdXAocm1lbV9ucCk7Cj4+PiArwqDCoMKgwqDC oMKgwqAgaWYgKCFybWVtKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvZl9ub2RlX3B1 dChybWVtX25wKTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+ PiBXaGF0IGhhcHBlbnMgdG8gcHJldmlvdXNseSBhbGxvY2F0ZWQgcmVnaW9ucyB3aGVuIHRoZXJl IGlzIGEgZmFpbHVyZT8KPgo+IFJpZ2h0LCBJIG5lZWQgdG8gdW5tYXAgbWVtb3J5IGFuZCB1c2Ug a2ZyZWUocm1lbSkgdG8gZGUtYWxsb2NhdGUgbWVtb3J5Lgo+Cj4+PiArwqDCoMKgwqDCoMKgwqAg fQo+Pj4gKwo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IGFkZF9tZW1fcmVnaW9uc19jYXJ2ZW91 dChyNV9jb3JlLCBybWVtKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmV0KQo+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZGV2X3dhcm4oZGV2LCAiZmFpbGVkIHRvIGdldCByZXNlcnZlIG1l bSByZWdpb25zICVkXG4iLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJl dCk7Cj4+IFNhbWUgaGVyZS4KPgo+IEhlcmUgYXMgd2VsbC4gSSB3aWxsIHJlbGVhc2UgcmVzZXJ2 ZWQgbWVtIGRldiB3aXRoIAo+IG9mX3Jlc2VydmVkX21lbV9kZXZpY2VfcmVsZWFzZSBBUEkuCj4K PiBPbmUgbW9yZSB0aGluZy4gSSBtb3ZlZCBhZGRfbWVtX3JlZ2lvbnNfY2FydmVvdXQgZnJvbSBw YXJzZV9mdyB0byAKPiB6eW5xbXBfcjVfZ2V0X21lbV9yZWdpb25fbm9kZS4KPgo+IEhvd2V2ZXIs IEkgYmVsaWV2ZSBJIHNob3VsZCBtb3ZlIGl0IGJhY2sgdG8gcGFyc2VfZncuCj4KPiBGb2xsb3dp bmcgdGVzdCBjYXNlIGlzIGZhaWxpbmcgaW4gd2hlbiBhZGRfbWVtX3JlZ2lvbnNfY2FydmVvdXQg aXMgbm90IAo+IGF2YWlsYWJsZSBpbiBwYXJzZV9mdzoKPgo+IGxvYWRfcnB1X2Z3IC0+IHN0YXJ0 IHJwdSAtPiBzdG9wIHJwdSAtPiBzdGFydCBycHUgYWdhaW4KPgo+IEluIGFib3ZlIGNhc2UsIGR1 cmluZyBtZW0gcmVnaW9ucyBhcmUgbm90IGFkZGVkIGFnYWluLgo+Cj4gSXMgaXQgZmluZSwgaWYg SSBtb3ZlIHRoaXMgYWRkX21lbV9yZWdpb25zX2NhcnZlb3V0IGJhY2sgdG8gCj4genlucW1wX3I1 X3BhcnNlX2Z3ID8KCgpIaSBNYXRoaWV1LAoKSSBoYXZlIGFkZHJlc3NlZCBtb3N0IG9mIHRoZSBj b21tZW50cyBmcm9tIHRoaXMgcmV2aXNpb24uCgpIb3dldmVyLCBJIHdhbnRlZCB5b3VyIG9waW5p b24gb24gdGhpcy4KCkkgdGhpbmsgbWFwcGluZyBtZW1vcnktcmVnaW9ucyBkdXJpbmcgcGFyc2Vf ZncganVzdCBsaWtlIHRjbSBtYXBwaW5nIGlzIAplYXNpbHkKCm1haW50YWluYWJsZSByYXRoZXIg dGhhbiBtYXBwaW5nIGR1cmluZyBwcm9iZS4gQWxzbyBpbiBteSBjYXNlLCBJIGFtIG5vdCAKYWJs ZSB0byBzdGFydCBSUFUgYWdhaW4gYmVjYXVzZSBtZW1vcnkgcmVnaW9ucyBhcmUgdW5tYXBwZWQK CmR1cmluZyBSUFUgc3RvcCBhbmQgY2FuJ3QgYmUgbWFwcGVkIGFnYWluLiBTbywgaXMgaXQgb2sg aWYgSSBtb3ZlIGJhY2sgCmFkZF9tZW1fcmVnaW9uc19jYXJ2ZW91dCBmcm9tIGRyaXZlciBwcm9i ZSB0byBwYXJzZV9mdz8KClRoYW5rcywKClRhbm1heQoKCj4+IEkgYW0gb3V0IG9mIHRpbWUgZm9y IHRoaXMgc2V0LsKgIFBsZWFzZSBhZGRyZXNzIGNvbW1lbnRzIHByb3ZpZGVkIHVwIAo+PiB0byBo ZXJlIGFuZAo+PiB3ZSB3aWxsIHNlZSBhYm91dCB0aGUgcmVzdCBpbiBhIGZ1dHVyZSByZXZpc2lv bi4KPj4KPj4gVGhhbmtzLAo+PiBNYXRoaWV1Cj4+Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKgwqAg b2Zfbm9kZV9wdXQocm1lbV9ucCk7Cj4+PiArwqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKgwqAgcmV0 dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gKy8qCj4+PiArICogenlucW1wX3I1X2NvcmVfaW5pdCgp Cj4+PiArICogQ3JlYXRlIGFuZCBpbml0aWFsaXplIHp5bnFtcF9yNV9jb3JlIHR5cGUgb2JqZWN0 Cj4+PiArICoKPj4+ICsgKiBAY2x1c3RlcjogcG9pbnRlciB0byB6eW5xbXBfcjVfY2x1c3RlciB0 eXBlIG9iamVjdAo+Pj4gKyAqCj4+PiArICogUmV0dXJuOiAwIGZvciBzdWNjZXNzIGFuZCBlcnJv ciBjb2RlIGZvciBmYWlsdXJlLgo+Pj4gKyAqLwo+Pj4gK3N0YXRpYyBpbnQgenlucW1wX3I1X2Nv cmVfaW5pdChzdHJ1Y3QgenlucW1wX3I1X2NsdXN0ZXIgKmNsdXN0ZXIpCj4+PiArewo+Pj4gK8Kg wqDCoCBpbnQgcmV0LCBpOwo+Pj4gK8KgwqDCoCBzdHJ1Y3QgenlucW1wX3I1X2NvcmUgKnI1X2Nv cmU7Cj4+PiArwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRldiA9IGNsdXN0ZXItPmRldjsKPj4+ICsK Pj4+ICvCoMKgwqAgcmV0ID0genlucW1wX3I1X2dldF90Y21fbm9kZShjbHVzdGVyKTsKPj4+ICvC oMKgwqAgaWYgKHJldCA8IDApIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwgImNh bid0IGdldCB0Y20gbm9kZSwgZXJyICVkXG4iLCByZXQpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJl dHVybiByZXQ7Cj4+PiArwqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8 IGNsdXN0ZXItPmNvcmVfY291bnQ7IGkrKykgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIHI1X2NvcmUg PSBjbHVzdGVyLT5yNV9jb3Jlc1tpXTsKPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSB6 eW5xbXBfcjVfZ2V0X21lbV9yZWdpb25fbm9kZShyNV9jb3JlKTsKPj4+ICvCoMKgwqDCoMKgwqDC oCBpZiAocmV0KQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X3dhcm4oZGV2LCAibWVt b3J5LXJlZ2lvbiBwcm9wIGZhaWxlZCAlZFxuIiwgcmV0KTsKPj4+ICsKPj4+ICvCoMKgwqDCoMKg wqDCoCAvKiBJbml0aWFsaXplIHI1IGNvcmVzIHdpdGggcG93ZXItZG9tYWlucyBwYXJzZWQgZnJv bSBkdHMgKi8KPj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9p bmRleChyNV9jb3JlLT5ucCwgInBvd2VyLWRvbWFpbnMiLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAxLCAmcjVfY29yZS0+cG1fZG9tYWluX2lk KTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmV0KSB7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgcG93ZXItZG9tYWlucyBwcm9wZXJ0eVxu Iik7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+Pj4gK8KgwqDCoMKg wqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSB6eW5xbXBfcjVfc2V0X21v ZGUocjVfY29yZSwgY2x1c3Rlci0+bW9kZSk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHJldCkg ewo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICJmYWlsZWQgdG8gc2V0 IHI1IGNsdXN0ZXIgbW9kZSAlZCwgZXJyICVkXG4iLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBjbHVzdGVyLT5tb2RlLCByZXQpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmV0dXJuIHJldDsKPj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+PiArwqDCoMKgIH0KPj4+ICsK Pj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gKy8qCj4+PiArICogenlucW1w X3I1X2NsdXN0ZXJfaW5pdCgpCj4+PiArICogQ3JlYXRlIGFuZCBpbml0aWFsaXplIHp5bnFtcF9y NV9jbHVzdGVyIHR5cGUgb2JqZWN0Cj4+PiArICoKPj4+ICsgKiBAY2x1c3RlcjogcG9pbnRlciB0 byB6eW5xbXBfcjVfY2x1c3RlciB0eXBlIG9iamVjdAo+Pj4gKyAqCj4+PiArICogUmV0dXJuOiAw IGZvciBzdWNjZXNzIGFuZCBlcnJvciBjb2RlIGZvciBmYWlsdXJlLgo+Pj4gKyAqLwo+Pj4gK3N0 YXRpYyBpbnQgenlucW1wX3I1X2NsdXN0ZXJfaW5pdChzdHJ1Y3QgenlucW1wX3I1X2NsdXN0ZXIg KmNsdXN0ZXIpCj4+PiArewo+Pj4gK8KgwqDCoCBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjbHVzdGVy LT5kZXY7Cj4+PiArwqDCoMKgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2X25vZGUgPSBkZXZfb2Zf bm9kZShkZXYpOwo+Pj4gK8KgwqDCoCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkOwo+Pj4gK8Kg wqDCoCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjaGlsZF9wZGV2Owo+Pj4gK8KgwqDCoCBpbnQg Y29yZV9jb3VudCA9IDAsIHJldCwgaTsKPj4+ICvCoMKgwqAgZW51bSB6eW5xbXBfcjVfY2x1c3Rl cl9tb2RlIGNsdXN0ZXJfbW9kZSA9IExPQ0tTVEVQX01PREU7Cj4+PiArwqDCoMKgIHN0cnVjdCB6 eW5xbXBfcjVfY29yZSAqKnI1X2NvcmVzOwo+Pj4gKwo+Pj4gK8KgwqDCoCByZXQgPSBvZl9wcm9w ZXJ0eV9yZWFkX3UzMihkZXZfbm9kZSwgInhsbngsY2x1c3Rlci1tb2RlIiwgCj4+PiAmY2x1c3Rl cl9tb2RlKTsKPj4+ICsKPj4+ICvCoMKgwqAgLyoKPj4+ICvCoMKgwqDCoCAqIG9uIHN1Y2Nlc3Mg cmV0dXJucyAwLCBpZiBub3QgZGVmaW5lZCB0aGVuIHJldHVybnMgLUVJTlZBTCwKPj4+ICvCoMKg wqDCoCAqIEluIHRoYXQgY2FzZSwgZGVmYXVsdCBpcyBMT0NLU1RFUCBtb2RlCj4+PiArwqDCoMKg wqAgKi8KPj4+ICvCoMKgwqAgaWYgKHJldCAhPSAtRUlOVkFMICYmIHJldCAhPSAwKSB7Cj4+PiAr wqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICJJbnZhbGlkIHhsbngsY2x1c3Rlci1tb2RlIHBy b3BlcnR5XG4iKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4+ICvCoMKg wqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoCAvKgo+Pj4gK8KgwqDCoMKgICogRm9yIG5vdyBkcml2ZXIg b25seSBzdXBwb3J0cyBzcGxpdCBtb2RlIGFuZCBsb2Nrc3RlcCBtb2RlLgo+Pj4gK8KgwqDCoMKg ICogZmFpbCBkcml2ZXIgcHJvYmUgaWYgZWl0aGVyIG9mIHRoYXQgaXMgbm90IHNldCBpbiBkdHMK Pj4+ICvCoMKgwqDCoCAqLwo+Pj4gK8KgwqDCoCBpZiAoY2x1c3Rlcl9tb2RlID09IFNJTkdMRV9D UFVfTU9ERSkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIGRldl9lcnIoZGV2LCAiZHJpdmVyIGRvZXMg bm90IHN1cHBvcnQgc2luZ2xlIGNwdSBtb2RlXG4iKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm4gLUVJTlZBTDsKPj4+ICvCoMKgwqAgfSBlbHNlIGlmICgoY2x1c3Rlcl9tb2RlICE9IFNQTElU X01PREUgJiYKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBjbHVzdGVyX21vZGUgIT0gTE9DS1NU RVBfTU9ERSkpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwgIkludmFsaWQgY2x1 c3RlciBtb2RlXG4iKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4+ICvC oMKgwqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoCAvKgo+Pj4gK8KgwqDCoMKgICogTnVtYmVyIG9mIGNv cmVzIGlzIGRlY2lkZWQgYnkgbnVtYmVyIG9mIGNoaWxkIG5vZGVzIG9mCj4+PiArwqDCoMKgwqAg KiByNWYgc3Vic3lzdGVtIG5vZGUgaW4gZHRzLiBJZiBTcGxpdCBtb2RlIGlzIHVzZWQgaW4gZHRz Cj4+PiArwqDCoMKgwqAgKiAyIGNoaWxkIG5vZGVzIGFyZSBleHBlY3RlZC4KPj4+ICvCoMKgwqDC oCAqIEluIGxvY2tzdGVwIG1vZGUgaWYgdHdvIGNoaWxkIG5vZGVzIGFyZSBhdmFpbGFibGUsCj4+ PiArwqDCoMKgwqAgKiBvbmx5IHVzZSBmaXJzdCBjaGlsZCBub2RlIGFuZCBjb25zaWRlciBpdCBh cyBjb3JlMAo+Pj4gK8KgwqDCoMKgICogYW5kIGlnbm9yZSBjb3JlMSBkdCBub2RlLgo+Pj4gK8Kg wqDCoMKgICovCj4+PiArwqDCoMKgIGNvcmVfY291bnQgPSBvZl9nZXRfYXZhaWxhYmxlX2NoaWxk X2NvdW50KGRldl9ub2RlKTsKPj4+ICvCoMKgwqAgaWYgKGNvcmVfY291bnQgPD0gMCkgewo+Pj4g K8KgwqDCoMKgwqDCoMKgIGRldl9lcnIoZGV2LCAiSW52YWxpZCBudW1iZXIgb2YgcjUgY29yZXMg JWQiLCBjb3JlX2NvdW50KTsKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4+ ICvCoMKgwqAgfSBlbHNlIGlmIChjbHVzdGVyX21vZGUgPT0gU1BMSVRfTU9ERSAmJiBjb3JlX2Nv dW50ICE9IDIpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwgIkludmFsaWQgbnVt YmVyIG9mIHI1IGNvcmVzIGZvciBzcGxpdCBtb2RlXG4iKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gLUVJTlZBTDsKPj4+ICvCoMKgwqAgfSBlbHNlIGlmIChjbHVzdGVyX21vZGUgPT0gTE9D S1NURVBfTU9ERSAmJiBjb3JlX2NvdW50ID09IDIpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZf d2FybihkZXYsICJPbmx5IHI1IGNvcmUwIHdpbGwgYmUgdXNlZFxuIik7Cj4+PiArwqDCoMKgwqDC oMKgwqAgY29yZV9jb3VudCA9IDE7Cj4+PiArwqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKgwqAgcjVf Y29yZXMgPSBkZXZtX2tjYWxsb2MoZGV2LCBjb3JlX2NvdW50LAo+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzaXplb2Yoc3RydWN0IHp5bnFtcF9yNV9jb3JlICopLCBHRlBfS0VS TkVMKTsKPj4+ICvCoMKgwqAgaWYgKCFyNV9jb3JlcykKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm4gLUVOT01FTTsKPj4+ICsKPj4+ICvCoMKgwqAgaSA9IDA7Cj4+PiArwqDCoMKgIGZvcl9lYWNo X2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKGRldl9ub2RlLCBjaGlsZCkgewo+Pj4gK8KgwqDCoMKg wqDCoMKgIGNoaWxkX3BkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKGNoaWxkKTsKPj4+ICvC oMKgwqDCoMKgwqDCoCBpZiAoIWNoaWxkX3BkZXYpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIG9mX25vZGVfcHV0KGNoaWxkKTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVy biAtRU5PREVWOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDC oCAvKiBjcmVhdGUgYW5kIGFkZCByZW1vdGVwcm9jIGluc3RhbmNlIG9mIHR5cGUgc3RydWN0IHJw cm9jICovCj4+PiArwqDCoMKgwqDCoMKgwqAgcjVfY29yZXNbaV0gPSB6eW5xbXBfcjVfYWRkX3Jw cm9jX2NvcmUoJmNoaWxkX3BkZXYtPmRldik7Cj4+PiArwqDCoMKgwqDCoMKgwqAgcjVfY29yZXNb aV0tPmRldiA9ICZjaGlsZF9wZGV2LT5kZXY7Cj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCFyNV9j b3Jlc1tpXS0+ZGV2KSB7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwg ImNhbid0IGdldCBkZXZpY2UgZm9yIHI1IGNvcmUgJWRcbiIsIGkpOwo+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgb2Zfbm9kZV9wdXQoY2hpbGQpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmV0dXJuIC1FTk9ERVY7Cj4+PiArwqDCoMKgwqDCoMKgwqAgfQo+Pj4gKwo+Pj4gK8KgwqDC oMKgwqDCoMKgIHI1X2NvcmVzW2ldLT5ucCA9IGRldl9vZl9ub2RlKHI1X2NvcmVzW2ldLT5kZXYp Owo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmICghcjVfY29yZXNbaV0tPm5wKSB7Cj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwgImNhbid0IGdldCBkZXZpY2Ugbm9kZSBmb3Ig cjUgY29yZSAlZFxuIiwgaSk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvZl9ub2RlX3B1 dChjaGlsZCk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT0RFVjsKPj4+ ICvCoMKgwqDCoMKgwqDCoCB9Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKgwqAgaSsrOwo+Pj4gKwo+ Pj4gK8KgwqDCoMKgwqDCoMKgIC8qCj4+PiArwqDCoMKgwqDCoMKgwqDCoCAqIElmIHR3byBjaGls ZCBub2RlcyBhcmUgYXZhaWxhYmxlIGluIGR0cyBpbiBsb2Nrc3RlcCBtb2RlLAo+Pj4gK8KgwqDC oMKgwqDCoMKgwqAgKiB0aGVuIGlnbm9yZSBzZWNvbmQgY2hpbGQgbm9kZS4KPj4+ICvCoMKgwqDC oMKgwqDCoMKgICovCj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGkgPT0gY29yZV9jb3VudCkgewo+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb2Zfbm9kZV9wdXQoY2hpbGQpOwo+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+PiArwqDCoMKgwqDCoMKgwqAgfQo+Pj4gK8KgwqDC oMKgwqDCoMKgIG9mX25vZGVfcHV0KGNoaWxkKTsKPj4+ICvCoMKgwqAgfQo+Pj4gKwo+Pj4gK8Kg wqDCoCBjbHVzdGVyLT5tb2RlID0gY2x1c3Rlcl9tb2RlOwo+Pj4gK8KgwqDCoCBjbHVzdGVyLT5j b3JlX2NvdW50ID0gY29yZV9jb3VudDsKPj4+ICvCoMKgwqAgY2x1c3Rlci0+cjVfY29yZXMgPSBy NV9jb3JlczsKPj4+ICsKPj4+ICvCoMKgwqAgcmV0ID0genlucW1wX3I1X2NvcmVfaW5pdChjbHVz dGVyKTsKPj4+ICvCoMKgwqAgaWYgKHJldCA8IDApIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZf ZXJyKGRldiwgImZhaWxlZCB0byBpbml0IHI1IGNvcmUgZXJyICVkXG4iLCByZXQpOwo+Pj4gK8Kg wqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+PiArwqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKgwqAg cmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIHp5bnFtcF9yNV9jbHVzdGVy X2V4aXQodm9pZCAqZGF0YSkKPj4+ICt7Cj4+PiArwqDCoMKgIHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYgPSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKWRhdGE7Cj4+PiArCj4+PiArwqDC oMKgIHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwo+Pj4gKwo+Pj4gK8KgwqDCoCBw cl9pbmZvKCJFeGl0IHI1ZiBzdWJzeXN0ZW0gZHJpdmVyXG4iKTsKPj4+ICt9Cj4+PiArCj4+PiAr LyoKPj4+ICsgKiB6eW5xbXBfcjVfcmVtb3RlcHJvY19wcm9iZSgpCj4+PiArICoKPj4+ICsgKiBA cGRldjogZG9tYWluIHBsYXRmb3JtIGRldmljZSBmb3IgUjUgY2x1c3Rlcgo+Pj4gKyAqCj4+PiAr ICogY2FsbGVkIHdoZW4gZHJpdmVyIGlzIHByb2JlZCwgZm9yIGVhY2ggUjUgY29yZSBzcGVjaWZp ZWQgaW4gRFQsCj4+PiArICogc2V0dXAgYXMgbmVlZGVkIHRvIGRvIHJlbW90ZXByb2MtcmVsYXRl ZCBvcGVyYXRpb25zCj4+PiArICoKPj4+ICsgKiBSZXR1cm46IDAgZm9yIHN1Y2Nlc3MsIG5lZ2F0 aXZlIHZhbHVlIGZvciBmYWlsdXJlLgo+Pj4gKyAqLwo+Pj4gK3N0YXRpYyBpbnQgenlucW1wX3I1 X3JlbW90ZXByb2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4+ICt7Cj4+ PiArwqDCoMKgIGludCByZXQ7Cj4+PiArwqDCoMKgIHN0cnVjdCB6eW5xbXBfcjVfY2x1c3RlciAq Y2x1c3RlcjsKPj4+ICvCoMKgwqAgc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKPj4+ ICsKPj4+ICvCoMKgwqAgY2x1c3RlciA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY2x1c3Rl ciksIEdGUF9LRVJORUwpOwo+Pj4gK8KgwqDCoCBpZiAoIWNsdXN0ZXIpCj4+PiArwqDCoMKgwqDC oMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4+PiArCj4+PiArwqDCoMKgIGNsdXN0ZXItPmRldiA9IGRl djsKPj4+ICsKPj4+ICvCoMKgwqAgcmV0ID0gZGV2bV9vZl9wbGF0Zm9ybV9wb3B1bGF0ZShkZXYp Owo+Pj4gK8KgwqDCoCBpZiAocmV0KSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYs ICJmYWlsZWQgdG8gcG9wdWxhdGUgcGxhdGZvcm0gZGV2ICVkXG4iLCByZXQpOwo+Pj4gK8KgwqDC oMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+PiArwqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKgwqAgLyog d2lyZSBpbiBzbyBlYWNoIGNvcmUgY2FuIGJlIGNsZWFuZWQgdXAgYXQgZHJpdmVyIHJlbW92ZSAq Lwo+Pj4gK8KgwqDCoCBwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjbHVzdGVyKTsKPj4+ICsK Pj4+ICvCoMKgwqAgcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgenlucW1wX3I1 X2NsdXN0ZXJfZXhpdCwgcGRldik7Cj4+PiArwqDCoMKgIGlmIChyZXQpCj4+PiArwqDCoMKgwqDC oMKgwqAgcmV0dXJuIHJldDsKPj4+ICsKPj4+ICvCoMKgwqAgcmV0ID0genlucW1wX3I1X2NsdXN0 ZXJfaW5pdChjbHVzdGVyKTsKPj4+ICvCoMKgwqAgaWYgKHJldCkgewo+Pj4gK8KgwqDCoMKgwqDC oMKgIGRldl9lcnIoZGV2LCAiSW52YWxpZCByNWYgc3Vic3lzdGVtIGRldmljZSB0cmVlXG4iKTsK Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+Pj4gK8KgwqDCoCB9Cj4+PiArCj4+PiAr wqDCoMKgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICsvKiBNYXRjaCB0YWJsZSBmb3IgT0Yg cGxhdGZvcm0gYmluZGluZyAqLwo+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lk IHp5bnFtcF9yNV9yZW1vdGVwcm9jX21hdGNoW10gPSB7Cj4+PiArwqDCoMKgIHsgLmNvbXBhdGli bGUgPSAieGxueCx6eW5xbXAtcjVmc3MiLCB9LAo+Pj4gK8KgwqDCoCB7IC8qIGVuZCBvZiBsaXN0 ICovIH0sCj4+PiArfTsKPj4+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB6eW5xbXBfcjVfcmVt b3RlcHJvY19tYXRjaCk7Cj4+PiArCj4+PiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIg enlucW1wX3I1X3JlbW90ZXByb2NfZHJpdmVyID0gewo+Pj4gK8KgwqDCoCAucHJvYmUgPSB6eW5x bXBfcjVfcmVtb3RlcHJvY19wcm9iZSwKPj4+ICvCoMKgwqAgLmRyaXZlciA9IHsKPj4+ICvCoMKg wqDCoMKgwqDCoCAubmFtZSA9ICJ6eW5xbXBfcjVfcmVtb3RlcHJvYyIsCj4+PiArwqDCoMKgwqDC oMKgwqAgLm9mX21hdGNoX3RhYmxlID0genlucW1wX3I1X3JlbW90ZXByb2NfbWF0Y2gsCj4+PiAr wqDCoMKgIH0sCj4+PiArfTsKPj4+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHp5bnFtcF9yNV9y ZW1vdGVwcm9jX2RyaXZlcik7Cj4+PiArCj4+PiArTU9EVUxFX0RFU0NSSVBUSU9OKCJYaWxpbngg UjVGIHJlbW90ZSBwcm9jZXNzb3IgZHJpdmVyIik7Cj4+PiArTU9EVUxFX0FVVEhPUigiWGlsaW54 IEluYy4iKTsKPj4+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Cj4+PiAtLSAKPj4+IDIuMjUu MQo+Pj4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxp bnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFk ZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4 LWFybS1rZXJuZWwK