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 X-Spam-Level: X-Spam-Status: No, score=-20.3 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4BC12C433FE for ; Tue, 8 Dec 2020 19:56:50 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D100523C32 for ; Tue, 8 Dec 2020 19:56:49 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D100523C32 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=xilinx.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=1u5VZb5TgMxnkxSToaTtfuRbB1UGUdee14nsZQUBUO8=; b=28Mh5KFYrhVENZj7rB96wu3mM ofQcnFGynGIRLYpX415Ts9bd7Il2AmEbXbg+B1VNxHBicDFO4wdaeLP0nf925yEfj46hmsb5QwntJ icL0vpJkIGitcIy8Bt+nPcB9uaZ5k9FP3pRdheaXV3hNghmIv0SQKu1IrMNA0LO5qpvu/mLmquEZo QQzMyRNOGkS87JhjDzfUDCBO0XYx2R54Xuco1PHunFYdCvPrMyH7jzTGN7WTdWdmQPl4qvcLhfIUk bbFCR2jeHJqfyhGzA23NfqBjrU4UCN+01B4HiPu0hY6drmUXgUWWtbQJwoez3X3cBGGfStr9ZuO8U 894EM7USQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kmj4o-0000RP-63; Tue, 08 Dec 2020 19:55:10 +0000 Received: from mail-mw2nam10on2069.outbound.protection.outlook.com ([40.107.94.69] helo=NAM10-MW2-obe.outbound.protection.outlook.com) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kmj4k-0000Ql-0p for linux-arm-kernel@lists.infradead.org; Tue, 08 Dec 2020 19:55:08 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KndSvkfMOkJoVydiZsGp/88+3mUx0gS82l/efbZ4mm0YVGs72hVZGgw5QP96rCO/rFuNzygqZwTmro4DNHdArnQRssFAqBw/wEVSODoI80B0ZIZhm/8fCMbX1Vnp17szyf3E5KXaJnbOv9H8OnmK02QZD9nETflKedpLM2abD0VHehUnl4kIvNgAswfWHiYOZ3k5WOWh1su/QQNycLjbk1btXepUjCRn2RfG+6nuDAM/1KTlBkNezYvjVI1FcGzaju5r8E9YqYb1G9BS8jqMAwtCyQO7ROwCd+/v+B7Fpf7X3AuzzFHtfamriY3lJ7/2nxcRJk/zSrmzkyvc5A6XKA== 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-SenderADCheck; bh=yWGPpR4B1KfvbOokxE3Racb5yMfG6N5fZZRT2xb2Nhk=; b=HwrU0l+JVKc6yCaSaaZpF74gGY9Y65z+V8Lc4ymur54thOiE1fOfrQfw73bWzOd6gvZaoJgeUaRafpEdFSZ4xPp8PkEv4zlIGw1qYBx2NUWtnCfdH4TmBCQmFQvDLD4nWbBcngH+yOAi6fDpiK/YJusv1uJLvM7jJD9iOcPE3OydrIWS5ym6+23K6wz5B8ktMWT1RLtgZrcmKrLzLghMrV8VAaav2AplccuG0izJCavNGImLYWvwOjDQQbguMZeA9dYIC+U2OdAO+kqh9/d/EeA1+ELDs0fO63293nwDyzxnBeEEwmgNa/x2mdEYEzCghyoMTHls+CFsXojFRPzJHw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 149.199.62.198) smtp.rcpttodomain=lists.linaro.org smtp.mailfrom=xilinx.com; dmarc=bestguesspass 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=yWGPpR4B1KfvbOokxE3Racb5yMfG6N5fZZRT2xb2Nhk=; b=YSSChMwpIIPN7vAwl7w+gWleIJ+arrIeZQeOcfb/gHdfMLWBTWUoVvz4j4CrHQGGlT8/ojrK4KegqaT6oSfmLdRQ1MX1jc2wKzmZR7/EXPNWHGD5S2eEy9/yMi98BmG4girVmaZZdaDOlRa66lkKpRD3DEXu5BSgtkWl3NfP+Pg= Received: from DM6PR03CA0050.namprd03.prod.outlook.com (2603:10b6:5:100::27) by SN6PR02MB4607.namprd02.prod.outlook.com (2603:10b6:805:b3::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3632.17; Tue, 8 Dec 2020 19:55:00 +0000 Received: from CY1NAM02FT046.eop-nam02.prod.protection.outlook.com (2603:10b6:5:100:cafe::8e) by DM6PR03CA0050.outlook.office365.com (2603:10b6:5:100::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3632.17 via Frontend Transport; Tue, 8 Dec 2020 19:55:00 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 149.199.62.198) smtp.mailfrom=xilinx.com; lists.linaro.org; dkim=none (message not signed) header.d=none;lists.linaro.org; dmarc=bestguesspass action=none header.from=xilinx.com; Received-SPF: Pass (protection.outlook.com: domain of xilinx.com designates 149.199.62.198 as permitted sender) receiver=protection.outlook.com; client-ip=149.199.62.198; helo=xsj-pvapexch01.xlnx.xilinx.com; Received: from xsj-pvapexch01.xlnx.xilinx.com (149.199.62.198) by CY1NAM02FT046.mail.protection.outlook.com (10.152.74.232) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.3632.21 via Frontend Transport; Tue, 8 Dec 2020 19:54:59 +0000 Received: from xsj-pvapexch02.xlnx.xilinx.com (172.19.86.41) by xsj-pvapexch01.xlnx.xilinx.com (172.19.86.40) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1913.5; Tue, 8 Dec 2020 11:54:58 -0800 Received: from smtp.xilinx.com (172.19.127.96) by xsj-pvapexch02.xlnx.xilinx.com (172.19.86.41) with Microsoft SMTP Server id 15.1.1913.5 via Frontend Transport; Tue, 8 Dec 2020 11:54:58 -0800 Received: from [10.23.125.57] (port=51435) by smtp.xilinx.com with esmtp (Exim 4.90) (envelope-from ) id 1kmj4c-0006yB-Ns; Tue, 08 Dec 2020 11:54:58 -0800 Subject: Re: [PATCH 2/9] misc: Add Xilinx AI engine device driver To: Nicolas Dufresne , Wendy Liang , , , , , , , , , , , , References: <1605686780-17886-1-git-send-email-wendy.liang@xilinx.com> <1605686780-17886-3-git-send-email-wendy.liang@xilinx.com> <5c310d188d2a75480452f5b5a9310e8e049f20f6.camel@ndufresne.ca> From: Jiaying Liang Message-ID: Date: Tue, 8 Dec 2020 11:54:57 -0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.5.0 MIME-Version: 1.0 In-Reply-To: <5c310d188d2a75480452f5b5a9310e8e049f20f6.camel@ndufresne.ca> Content-Language: en-US X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 42e504fd-695f-441e-6682-08d89bb32551 X-MS-TrafficTypeDiagnostic: SN6PR02MB4607: X-Microsoft-Antispam-PRVS: X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-MS-Oob-TLC-OOBClassifiers: OLM:5797; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: F3T0rISDuLV/BBYXJvlC1Vgh6j1cyFgoF8fYxYcVFKuYabq1d1TJMsYMHJlIDvPkO+bXz9VHqaoITQoCWPMTBf/W0d8rBSOCowxoNH02FoVx9G1x88H2I1EbIYmc0XYcHteKdkwuK7Rs4nQjQ8DPol9oaBQCWqXot8TWpyJk/ARJqU67fS0I5a9XjEYO1XkPIp5HKxO5t4vtQhtgrqk1W5142Exv/NbOH0FMankKKsEuwbUMcSDllHIQsU3eDBe4Uml/YGSnQFQuyT7AjlVpSXII9L8NlGsdW7/rdm8L9Tgfa4GAClLjhHL50XowbbZe7334ssAQKN2/rznHiTUGCyWEl3wrH96+ULEd7STOUpqPwwliWPzDXjcJNm7S4jU0foDuys/sWzBbqlF3ZmyHV0HDUUxdVUr7jnNm8OdPJeBzG4bW7/k2B16srdpcucjAOcAklwksnyQmvqzGmZH4dK8+BgYtsbEsl+sFj6bxug3m2+uQCfg1QrkLGrLXzsthHur9fHEdww9FHedKiLUcNM6mnAv/2oSDKs0Tv2cLuDg= X-Forefront-Antispam-Report: CIP:149.199.62.198; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:xsj-pvapexch01.xlnx.xilinx.com; PTR:unknown-62-198.xilinx.com; CAT:NONE; SFS:(4636009)(376002)(136003)(346002)(46966005)(5660300002)(26005)(7636003)(47076004)(30864003)(8676002)(8936002)(186003)(9786002)(53546011)(82310400003)(966005)(426003)(31686004)(4326008)(107886003)(70586007)(2616005)(2906002)(54906003)(6636002)(31696002)(508600001)(110136005)(83380400001)(356005)(66574015)(7416002)(336012)(70206006)(921005)(36906005)(36756003)(50156003)(43740500002)(559001)(579004); DIR:OUT; SFP:1101; X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Dec 2020 19:54:59.9818 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 42e504fd-695f-441e-6682-08d89bb32551 X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c; Ip=[149.199.62.198]; Helo=[xsj-pvapexch01.xlnx.xilinx.com] X-MS-Exchange-CrossTenant-AuthSource: CY1NAM02FT046.eop-nam02.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR02MB4607 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201208_145506_261394_97A53908 X-CRM114-Status: GOOD ( 22.59 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, Hyun Kwon , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org, linux-arm-kernel@lists.infradead.org, linux-media@vger.kernel.org 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 Ck9uIDEyLzgvMjAgOToxMiBBTSwgTmljb2xhcyBEdWZyZXNuZSB3cm90ZToKPiBMZSBtZXJjcmVk aSAxOCBub3ZlbWJyZSAyMDIwIMOgIDAwOjA2IC0wODAwLCBXZW5keSBMaWFuZyBhIMOpY3JpdMKg Ogo+PiBDcmVhdGUgQUkgZW5naW5lIGRldmljZS9wYXJ0aXRpb24gaGllcmFyY2hpY2FsIHN0cnVj dHVyZS4KPj4KPj4gRWFjaCBBSSBlbmdpbmUgZGV2aWNlIGNhbiBoYXZlIG11bHRpcGxlIGxvZ2lj YWwgcGFydGl0aW9ucyhncm91cHMgb2YgQUkKPj4gZW5naW5lIHRpbGVzKS4gRWFjaCBwYXJ0aXRp b24gaXMgY29sdW1uIGJhc2VkIGFuZCBoYXMgaXRzIG93biBub2RlIElECj4+IGluIHRoZSBzeXN0 ZW0uIEFJIGVuZ2luZSBkZXZpY2UgZHJpdmVyIG1hbmFnZXMgaXRzIHBhcnRpdGlvbnMuCj4+Cj4+ IEFwcGxpY2F0aW9ucyBjYW4gYWNjZXNzIEFJIGVuZ2luZSBwYXJ0aXRpb24gdGhyb3VnaCB0aGUg QUkgZW5naW5lCj4+IHBhcnRpdGlvbiBkcml2ZXIgaW5zdGFuY2UuIEFJIGVuZ2luZSByZWdpc3Rl cnMgd3JpdGUgaXMgbW92ZWQgdG8ga2VybmVsCj4+IGFzIHRoZXJlIGFyZSByZWdpc3RlcnMgaW4g dGhlIEFJIGVuZ2luZSBhcnJheSBuZWVkcyBwcml2aWxlZ2UKPj4gcGVybWlzc2lvbi4KPiBIaSB0 aGVyZSwgaXQncyBuaWNlIHRvIHNlZSBhbiBlZmZvcnQgdG8gdXBzdHJlYW0gYW4gQUkgZHJpdmVy LiBJJ20gYSBsaXR0bGUKPiB3b3JyaWVkIHRoaXMgZHJpdmVyIGlzIG5vdCBvYnZpb3VzIHRvIHVz ZSBmcm9tIGl0J3Mgc291cmNlIGNvZGUgaXRzZWxmLiBTbyB5b3UKPiBoYXZlIHJlZmVyZW5jZSB0 byBzb21lIE9wZW4gU291cmNlIGNvZGUgdGhhdCBkZW1vbnN0cmF0ZSBpdCdzIHVzYWdlID8KCldl IGhhdmUgQUkgZW5naW5lIGxpYnJhcnkgd2hpY2ggcHJvdmlkZXMgYSBjcm9zcyBwbGF0Zm9ybXMg QVBJcyBmb3Igb3RoZXIKCmxpYnJhcmllcy9hcHBsaWNhdGlvbiB0byB1c2UgdGhlIGhhcmR3YXJl LiBIZXJlIGlzIHRoZSBzb3VyY2UgY29kZToKCmh0dHBzOi8vZ2l0aHViLmNvbS9YaWxpbngvZW1i ZWRkZWRzdy90cmVlL21hc3Rlci9YaWxpbnhQcm9jZXNzb3JJUExpYi9kcml2ZXJzL2FpZW5naW5l djIvc3JjCgpUaGUgY3Jvc3MgcGxhdGZvcm1zIEFJIGVuZ2luZSBsaWJyYXJ5IHJ1bnMgaW4gTElu dXggdXNlcnNwYWNlIGl0IGRlZmluZXMgCmhvdyB0bwoKY29uZmlndXJlLCBhbmQgdGhlIGtlcm5l bCBkcml2ZXIgY29udHJvbHMgaWYgd2hhdCBjYW4gYmUgYWNjZXNzIGFuZCAKbWFuYWdlIGVycm9y cyBmcm9tIGRldmljZS4KCgpCZXN0IFJlZ2FyZHMsCgpXZW5keQoKCj4KPj4gU2lnbmVkLW9mZi1i eTogV2VuZHkgTGlhbmcgPHdlbmR5LmxpYW5nQHhpbGlueC5jb20+Cj4+IFNpZ25lZC1vZmYtYnk6 IEh5dW4gS3dvbiA8aHl1bi5rd29uQHhpbGlueC5jb20+Cj4+IC0tLQo+PiAgwqBNQUlOVEFJTkVS U8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCA4ICsKPj4gIMKgZHJpdmVycy9taXNjL0tjb25m aWfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgfMKgIDEyICsKPj4gIMKgZHJpdmVycy9taXNjL01ha2VmaWxlwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAxICsKPj4g IMKgZHJpdmVycy9taXNjL3hpbGlueC1haS1lbmdpbmUvTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfMKgIDExICsKPj4gIMKgZHJpdmVycy9taXNjL3hpbGlueC1haS1lbmdpbmUvYWkt ZW5naW5lLWFpZS5jwqDCoMKgwqDCoCB8IDExNSArKysrKwo+PiAgwqBkcml2ZXJzL21pc2MveGls aW54LWFpLWVuZ2luZS9haS1lbmdpbmUtZGV2LmPCoMKgwqDCoMKgIHwgNDQ4ICsrKysrKysrKysr KysrKysrKwo+PiAgwqBkcml2ZXJzL21pc2MveGlsaW54LWFpLWVuZ2luZS9haS1lbmdpbmUtaW50 ZXJuYWwuaCB8IDIyNiArKysrKysrKysrCj4+ICDCoGRyaXZlcnMvbWlzYy94aWxpbngtYWktZW5n aW5lL2FpLWVuZ2luZS1wYXJ0LmPCoMKgwqDCoCB8IDQ5OAo+PiArKysrKysrKysrKysrKysrKysr KysKPj4gIMKgZHJpdmVycy9taXNjL3hpbGlueC1haS1lbmdpbmUvYWktZW5naW5lLXJlcy5jwqDC oMKgwqDCoCB8IDExNCArKysrKwo+PiAgwqBpbmNsdWRlL3VhcGkvbGludXgveGxueC1haS1lbmdp bmUuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IDEwNyArKysrKwo+PiAgwqAxMCBm aWxlcyBjaGFuZ2VkLCAxNTQwIGluc2VydGlvbnMoKykKPj4gIMKgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvbWlzYy94aWxpbngtYWktZW5naW5lL01ha2VmaWxlCj4+ICDCoGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL21pc2MveGlsaW54LWFpLWVuZ2luZS9haS1lbmdpbmUtYWllLmMKPj4g IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWlzYy94aWxpbngtYWktZW5naW5lL2FpLWVu Z2luZS1kZXYuYwo+PiAgwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9taXNjL3hpbGlueC1h aS1lbmdpbmUvYWktZW5naW5lLWludGVybmFsLmgKPj4gIMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvbWlzYy94aWxpbngtYWktZW5naW5lL2FpLWVuZ2luZS1wYXJ0LmMKPj4gIMKgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWlzYy94aWxpbngtYWktZW5naW5lL2FpLWVuZ2luZS1yZXMu Ywo+PiAgwqBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS91YXBpL2xpbnV4L3hsbngtYWktZW5n aW5lLmgKPj4KPj4gZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKPj4gaW5k ZXggNWNjNTk1YS4uNDBlMzM1MSAxMDA2NDQKPj4gLS0tIGEvTUFJTlRBSU5FUlMKPj4gKysrIGIv TUFJTlRBSU5FUlMKPj4gQEAgLTE5MjgzLDYgKzE5MjgzLDE0IEBAIFQ6wqDCoMKgwqDCoGdpdCBo dHRwczovL2dpdGh1Yi5jb20vWGlsaW54L2xpbnV4LXhsbnguZ2l0Cj4+ICDCoEY6wqDCoMKgwqDC oERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkveGxueCx6eW5xbXAtcHNndHIu eWFtbAo+PiAgwqBGOsKgwqDCoMKgwqBkcml2ZXJzL3BoeS94aWxpbngvcGh5LXp5bnFtcC5jCj4+ ICAgCj4+ICtYSUxJTlggQUkgRU5HSU5FIERSSVZFUgo+PiArTTrCoMKgwqDCoMKgV2VuZHkgTGlh bmcgPHdlbmR5LmxpYW5nQHhpbGlueC5jb20+Cj4+ICtTOsKgwqDCoMKgwqBTdXBwb3J0ZWQKPj4g K0Y6wqDCoMKgwqDCoERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb2MveGlsaW54 L3hsbngsYWktZW5naW5lLnlhbWwKPj4gK0Y6wqDCoMKgwqDCoGRyaXZlcnMvbWlzYy94aWxpbngt YWktZW5naW5lLwo+PiArRjrCoMKgwqDCoMKgaW5jbHVkZS9saW51eC94bG54LWFpLWVuZ2luZS5o Cj4+ICtGOsKgwqDCoMKgwqBpbmNsdWRlL3VhcGkvbGludXgveGxueC1haS1lbmdpbmUuaAo+PiAr Cj4+ICDCoFhJTExZQlVTIERSSVZFUgo+PiAgwqBNOsKgwqDCoMKgwqBFbGkgQmlsbGF1ZXIgPGVs aS5iaWxsYXVlckBnbWFpbC5jb20+Cj4+ICDCoEw6wqDCoMKgwqDCoGxpbnV4LWtlcm5lbEB2Z2Vy Lmtlcm5lbC5vcmcKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9LY29uZmlnIGIvZHJpdmVy cy9taXNjL0tjb25maWcKPj4gaW5kZXggZmFmYThiMC4uMGI4Y2U0ZCAxMDA2NDQKPj4gLS0tIGEv ZHJpdmVycy9taXNjL0tjb25maWcKPj4gKysrIGIvZHJpdmVycy9taXNjL0tjb25maWcKPj4gQEAg LTQ0NCw2ICs0NDQsMTggQEAgY29uZmlnIFhJTElOWF9TREZFQwo+PiAgIAo+PiAgwqDCoMKgwqDC oMKgwqDCoMKgIElmIHVuc3VyZSwgc2F5IE4uCj4+ICAgCj4+ICtjb25maWcgWElMSU5YX0FJRQo+ PiArwqDCoMKgwqDCoMKgwqB0cmlzdGF0ZSAiWGlsaW54IEFJIGVuZ2luZSIKPj4gK8KgwqDCoMKg wqDCoMKgZGVwZW5kcyBvbiBBUk02NCB8fCBDT01QSUxFX1RFU1QKPj4gK8KgwqDCoMKgwqDCoMKg aGVscAo+PiArwqDCoMKgwqDCoMKgwqDCoCBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9y IHRoZSBYaWxpbnggQUkgZW5naW5lIGRyaXZlci4KPj4gK8KgwqDCoMKgwqDCoMKgwqAgT25lIFhp bGlueCBBSSBlbmdpbmUgZGV2aWNlIGNhbiBoYXZlIG11bHRpcGxlIHBhcnRpdGlvbnMgKGdyb3Vw cyBvZgo+PiArwqDCoMKgwqDCoMKgwqDCoCBBSSBlbmdpbmUgdGlsZXMpLiBYaWxpbnggQUkgZW5n aW5lIGRldmljZSBkcml2ZXIgaW5zdGFuY2UgbWFuYWdlcwo+PiArwqDCoMKgwqDCoMKgwqDCoCBB SSBlbmdpbmUgcGFydGl0aW9ucy4gVXNlciBhcHBsaWNhdGlvbiBhY2Nlc3MgaXRzIHBhcnRpdGlv bnMgdGhyb3VnaAo+PiArwqDCoMKgwqDCoMKgwqDCoCBBSSBlbmdpbmUgcGFydGl0aW9uIGluc3Rh bmNlIGZpbGUgb3BlcmF0aW9ucy4KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDCoCBJZiB1bnN1cmUs IHNheSBOCj4+ICsKPj4gIMKgY29uZmlnIE1JU0NfUlRTWAo+PiAgwqDCoMKgwqDCoMKgwqDCoHRy aXN0YXRlCj4+ICDCoMKgwqDCoMKgwqDCoMKgZGVmYXVsdCBNSVNDX1JUU1hfUENJIHx8IE1JU0Nf UlRTWF9VU0IKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9NYWtlZmlsZSBiL2RyaXZlcnMv bWlzYy9NYWtlZmlsZQo+PiBpbmRleCBkMjMyMzFlLi4yMTc2YjE4IDEwMDY0NAo+PiAtLS0gYS9k cml2ZXJzL21pc2MvTWFrZWZpbGUKPj4gKysrIGIvZHJpdmVycy9taXNjL01ha2VmaWxlCj4+IEBA IC01NywzICs1Nyw0IEBAIG9iai0kKENPTkZJR19IQUJBTkFfQUkpwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgKz0gaGFiYW5hbGFicy8KPj4gIMKgb2JqLSQoQ09ORklHX1VBQ0NFKcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCs9IHVhY2NlLwo+PiAgwqBvYmotJChDT05GSUdfWElMSU5YX1NE RkVDKcKgwqDCoMKgwqArPSB4aWxpbnhfc2RmZWMubwo+PiAgwqBvYmotJChDT05GSUdfSElTSV9I SUtFWV9VU0IpwqDCoMKgKz0gaGlzaV9oaWtleV91c2Iubwo+PiArb2JqLSQoQ09ORklHX1hJTElO WF9BSUUpwqDCoMKgwqDCoMKgwqArPSB4aWxpbngtYWktZW5naW5lLwo+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9taXNjL3hpbGlueC1haS1lbmdpbmUvTWFrZWZpbGUgYi9kcml2ZXJzL21pc2MveGls aW54LWFpLQo+PiBlbmdpbmUvTWFrZWZpbGUKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5k ZXggMDAwMDAwMC4uNzgyN2EwYQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvbWlz Yy94aWxpbngtYWktZW5naW5lL01ha2VmaWxlCj4+IEBAIC0wLDAgKzEsMTEgQEAKPj4gKyMgU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQo+PiArIwo+PiArIyBNYWtlZmlsZSBm b3IgWGlsaW54IEFJIGVuZ2luZSBkZXZpY2UgZHJpdmVyCj4+ICsjCj4+ICsKPj4gK29iai0kKENP TkZJR19YSUxJTlhfQUlFKcKgwqDCoMKgwqDCoMKgKz0geGlsaW54LWFpZS5vCj4+ICsKPj4gK3hp bGlueC1haWUtJChDT05GSUdfWElMSU5YX0FJRSkgOj0gYWktZW5naW5lLWFpZS5vIFwKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBhaS1lbmdpbmUtZGV2Lm8gXAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFpLWVuZ2luZS1wYXJ0Lm8g XAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGFpLWVuZ2luZS1yZXMubwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9t aXNjL3hpbGlueC1haS1lbmdpbmUvYWktZW5naW5lLWFpZS5jCj4+IGIvZHJpdmVycy9taXNjL3hp bGlueC1haS1lbmdpbmUvYWktZW5naW5lLWFpZS5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+ IGluZGV4IDAwMDAwMDAuLjMxOTI2MGYKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJz L21pc2MveGlsaW54LWFpLWVuZ2luZS9haS1lbmdpbmUtYWllLmMKPj4gQEAgLTAsMCArMSwxMTUg QEAKPj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4+ICsvKgo+PiArICog WGlsaW54IEFJIEVuZ2luZSBkcml2ZXIgQUlFIGRldmljZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlv bgo+PiArICoKPj4gKyAqIENvcHlyaWdodCAoQykgMjAyMCBYaWxpbngsIEluYy4KPj4gKyAqLwo+ PiArCj4+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+PiArCj4+ICsjaW5jbHVkZSAiYWktZW5n aW5lLWludGVybmFsLmgiCj4+ICsKPj4gKyNkZWZpbmUgQUlFX0FSUkFZX1NISUZUwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAzMFUKPj4gKyNkZWZpbmUgQUlFX0NPTF9TSElGVMKgwqDC oMKgwqDCoMKgwqDCoMKgMjNVCj4+ICsjZGVmaW5lIEFJRV9ST1dfU0hJRlTCoMKgwqDCoMKgwqDC oMKgwqDCoDE4VQo+PiArCj4+ICsvKgo+PiArICogUmVnaXN0ZXJzIG9mZnNldHMKPj4gKyAqLwo+ PiArI2RlZmluZSBBSUVfU0hJTU5PQ19MMklOVFJfTUFTS19SRUdPRkbCoMKgwqDCoMKgwqDCoMKg wqAweDAwMDE1MDAwVQo+PiArI2RlZmluZSBBSUVfU0hJTU5PQ19MMklOVFJfSU5UUl9SRUdPRkbC oMKgwqDCoMKgwqDCoMKgwqAweDAwMDE1MDEwVQo+PiArI2RlZmluZSBBSUVfU0hJTU5PQ19ETUFf QkQwX0FERFJMT1dfUkVHT0ZGwqDCoMKgwqDCoDB4MDAwMWQwMDBVCj4+ICsjZGVmaW5lIEFJRV9T SElNTk9DX0RNQV9CRDE1X1BBQ0tFVF9SRUdPRkbCoMKgwqDCoMKgMHgwMDAxZDEzY1UKPj4gKyNk ZWZpbmUgQUlFX1NISU1OT0NfQVhJTU1fUkVHT0ZGwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgMHgwMDAxZTAyMFUKPj4gKyNkZWZpbmUgQUlFX1NISU1QTF9MMUlOVFJfTUFTS19BX1JFR09G RsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgwMDAzNTAwMFUKPj4gKyNkZWZpbmUg QUlFX1NISU1QTF9MMUlOVFJfQkxPQ0tfTk9SVEhfQl9SRUdPRkbCoDB4MDAwMzUwNTBVCj4+ICsj ZGVmaW5lIEFJRV9TSElNUExfQ0xLQ05UUl9SRUdPRkbCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgMHgwMDAzNjA0MFUKPj4gKyNkZWZpbmUgQUlFX1NISU1QTF9SRVNFVF9SRUdPRkbCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDAwMDM2MDRjVQo+PiAr I2RlZmluZSBBSUVfVElMRV9DT1JFX0NMS0NOVFJfUkVHT0ZGwqDCoMKgwqDCoMKgwqDCoMKgwqDC oDB4MDAwMzYwNDBVCj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWllX3RpbGVfcmVncyBh aWVfa2VybmVsX3JlZ3NbXSA9IHsKPj4gK8KgwqDCoMKgwqDCoMKgLyogU0hJTSBBWEkgTU0gQ29u ZmlnICovCj4+ICvCoMKgwqDCoMKgwqDCoHsuYXR0cmlidXRlID0gQUlFX1RJTEVfVFlQRV9TSElN Tk9DIDw8IEFJRV9SRUdTX0FUVFJfVElMRV9UWVBFX1NISUZULAo+PiArwqDCoMKgwqDCoMKgwqAg LnNvZmYgPSBBSUVfU0hJTU5PQ19BWElNTV9SRUdPRkYsCj4+ICvCoMKgwqDCoMKgwqDCoCAuZW9m ZiA9IEFJRV9TSElNTk9DX0FYSU1NX1JFR09GRiwKPj4gK8KgwqDCoMKgwqDCoMKgfSwKPj4gK8Kg wqDCoMKgwqDCoMKgLyogU0hJTSBETUEgQUREUkVTUyByYW5nZSAqLwo+PiArwqDCoMKgwqDCoMKg wqB7LmF0dHJpYnV0ZSA9IEFJRV9USUxFX1RZUEVfU0hJTU5PQyA8PCBBSUVfUkVHU19BVFRSX1RJ TEVfVFlQRV9TSElGVCwKPj4gK8KgwqDCoMKgwqDCoMKgIC5zb2ZmID0gQUlFX1NISU1OT0NfRE1B X0JEMF9BRERSTE9XX1JFR09GRiwKPj4gK8KgwqDCoMKgwqDCoMKgIC5lb2ZmID0gQUlFX1NISU1O T0NfRE1BX0JEMTVfUEFDS0VUX1JFR09GRiwKPj4gK8KgwqDCoMKgwqDCoMKgfSwKPj4gK8KgwqDC oMKgwqDCoMKgLyogU0hJTSAybmQgbGV2ZWwgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8KPj4gK8Kg wqDCoMKgwqDCoMKgey5hdHRyaWJ1dGUgPSBBSUVfVElMRV9UWVBFX1NISU1OT0MgPDwgQUlFX1JF R1NfQVRUUl9USUxFX1RZUEVfU0hJRlQsCj4+ICvCoMKgwqDCoMKgwqDCoCAuc29mZiA9IEFJRV9T SElNTk9DX0wySU5UUl9NQVNLX1JFR09GRiwKPj4gK8KgwqDCoMKgwqDCoMKgIC5lb2ZmID0gQUlF X1NISU1OT0NfTDJJTlRSX0lOVFJfUkVHT0ZGLAo+PiArwqDCoMKgwqDCoMKgwqB9LAo+PiArwqDC oMKgwqDCoMKgwqAvKiBTSElNIDFzdCBsZXZlbCBpbnRlcnJ1cHQgY29udHJvbGxlciAqLwo+PiAr wqDCoMKgwqDCoMKgwqB7LmF0dHJpYnV0ZSA9IChBSUVfVElMRV9UWVBFX1NISU1QTCB8IEFJRV9U SUxFX1RZUEVfU0hJTU5PQykgPDwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgQUlFX1JFR1NfQVRUUl9USUxFX1RZUEVfU0hJRlQsCj4+ICvCoMKgwqDCoMKgwqDC oCAuc29mZiA9IEFJRV9TSElNUExfTDFJTlRSX01BU0tfQV9SRUdPRkYsCj4+ICvCoMKgwqDCoMKg wqDCoCAuZW9mZiA9IEFJRV9TSElNUExfTDFJTlRSX0JMT0NLX05PUlRIX0JfUkVHT0ZGLAo+PiAr wqDCoMKgwqDCoMKgwqB9LAo+PiArwqDCoMKgwqDCoMKgwqAvKiBTSElNIHJlc2V0IEVuYWJsZSAq Lwo+PiArwqDCoMKgwqDCoMKgwqB7LmF0dHJpYnV0ZSA9IChBSUVfVElMRV9UWVBFX1NISU1QTCB8 IEFJRV9USUxFX1RZUEVfU0hJTU5PQykgPDwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgQUlFX1JFR1NfQVRUUl9USUxFX1RZUEVfU0hJRlQsCj4+ICvCoMKgwqDC oMKgwqDCoCAuc29mZiA9IEFJRV9TSElNUExfUkVTRVRfUkVHT0ZGLAo+PiArwqDCoMKgwqDCoMKg wqAgLmVvZmYgPSBBSUVfU0hJTVBMX1JFU0VUX1JFR09GRiwKPj4gK8KgwqDCoMKgwqDCoMKgfSwK Pj4gK8KgwqDCoMKgwqDCoMKgLyogU0hJTSBjbG9jayBjb250cm9sICovCj4+ICvCoMKgwqDCoMKg wqDCoHsuYXR0cmlidXRlID0gKEFJRV9USUxFX1RZUEVfU0hJTVBMIHwgQUlFX1RJTEVfVFlQRV9T SElNTk9DKSA8PAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBB SUVfUkVHU19BVFRSX1RJTEVfVFlQRV9TSElGVCwKPj4gK8KgwqDCoMKgwqDCoMKgIC5zb2ZmID0g QUlFX1NISU1QTF9DTEtDTlRSX1JFR09GRiwKPj4gK8KgwqDCoMKgwqDCoMKgIC5lb2ZmID0gQUlF X1NISU1QTF9DTEtDTlRSX1JFR09GRiwKPj4gK8KgwqDCoMKgwqDCoMKgfSwKPj4gK8KgwqDCoMKg wqDCoMKgLyogVGlsZSBjbG9jayBjb250cm9sICovCj4+ICvCoMKgwqDCoMKgwqDCoHsuYXR0cmli dXRlID0gQUlFX1RJTEVfVFlQRV9USUxFIDw8IEFJRV9SRUdTX0FUVFJfVElMRV9UWVBFX1NISUZU LAo+PiArwqDCoMKgwqDCoMKgwqAgLnNvZmYgPSBBSUVfVElMRV9DT1JFX0NMS0NOVFJfUkVHT0ZG LAo+PiArwqDCoMKgwqDCoMKgwqAgLmVvZmYgPSBBSUVfVElMRV9DT1JFX0NMS0NOVFJfUkVHT0ZG LAo+PiArwqDCoMKgwqDCoMKgwqB9LAo+PiArfTsKPj4gKwo+PiArc3RhdGljIHUzMiBhaWVfZ2V0 X3RpbGVfdHlwZShzdHJ1Y3QgYWllX2xvY2F0aW9uICpsb2MpCj4+ICt7Cj4+ICvCoMKgwqDCoMKg wqDCoGlmIChsb2MtPnJvdykKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biBBSUVfVElMRV9UWVBFX1RJTEU7Cj4+ICvCoMKgwqDCoMKgwqDCoC8qIFNISU0gcm93ICovCj4+ ICvCoMKgwqDCoMKgwqDCoGlmICgobG9jLT5jb2wgJSA0KSA8IDIpCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gQUlFX1RJTEVfVFlQRV9TSElNUEw7Cj4+ICsKPj4gK8Kg wqDCoMKgwqDCoMKgcmV0dXJuIEFJRV9USUxFX1RZUEVfU0hJTU5PQzsKPj4gK30KPj4gKwo+PiAr c3RhdGljIGNvbnN0IHN0cnVjdCBhaWVfdGlsZV9vcGVyYXRpb25zIGFpZV9vcHMgPSB7Cj4+ICvC oMKgwqDCoMKgwqDCoC5nZXRfdGlsZV90eXBlID0gYWllX2dldF90aWxlX3R5cGUsCj4+ICt9Owo+ PiArCj4+ICsvKioKPj4gKyAqIGFpZV9kZXZpY2VfaW5pdCgpIC0gSW5pdGlhbGl6ZSBBSSBlbmdp bmUgZGV2aWNlIHN0cnVjdCBBSUUgc3BlY2lmaWMKPj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcHJvcGVydGllcwo+PiArICogQGFkZXY6IEFJIGVuZ2luZSBkZXZp Y2UKPj4gKyAqIEByZXR1cm46IDAgZm9yIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIGZvciBmYWls dXJlLgo+PiArICoKPj4gKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZSB0aGUgQUkgZW5naW5l IGRldmljZSBzdHJ1Y3R1cmUgZGV2aWNlIHZlcnNpb24KPj4gKyAqIHNwZWNpZmljIGVsZW1lbnRz IHN1Y2ggYXMgcmVnaXN0ZXIgYWRkcmVzc2luZyByZWxhdGVkIGFycmF5IHNoaWZ0LAo+PiArICog Y29sdW1uIHNoaWZ0LCBhbmQgcm93IHNoaWZ0OyBBSUUgc3BlY2lmaWMgZGV2aWNlIG9wZXJhdGlv bnMsIGRldmljZQo+PiArICogY29sdW1ucyByZXNvdXJjZS4KPj4gKyAqLwo+PiAraW50IGFpZV9k ZXZpY2VfaW5pdChzdHJ1Y3QgYWllX2RldmljZSAqYWRldikKPj4gK3sKPj4gK8KgwqDCoMKgwqDC oMKgaW50IHJldDsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqBhZGV2LT5hcnJheV9zaGlmdCA9IEFJ RV9BUlJBWV9TSElGVDsKPj4gK8KgwqDCoMKgwqDCoMKgYWRldi0+Y29sX3NoaWZ0ID0gQUlFX0NP TF9TSElGVDsKPj4gK8KgwqDCoMKgwqDCoMKgYWRldi0+cm93X3NoaWZ0ID0gQUlFX1JPV19TSElG VDsKPj4gK8KgwqDCoMKgwqDCoMKgYWRldi0+b3BzID0gJmFpZV9vcHM7Cj4+ICvCoMKgwqDCoMKg wqDCoGFkZXYtPm51bV9rZXJuZWxfcmVncyA9IEFSUkFZX1NJWkUoYWllX2tlcm5lbF9yZWdzKTsK Pj4gK8KgwqDCoMKgwqDCoMKgYWRldi0+a2VybmVsX3JlZ3MgPSBhaWVfa2VybmVsX3JlZ3M7Cj4+ ICsKPj4gK8KgwqDCoMKgwqDCoMKgLyogR2V0IHRoZSBjb2x1bW5zIHJlc291cmNlICovCj4+ICvC oMKgwqDCoMKgwqDCoC8qIEdldCBudW1iZXIgb2YgY29sdW1ucyBmcm9tIEFJIGVuZ2luZSBtZW1v cnkgcmVzb3VyY2UgKi8KPj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gYWllX3Jlc291cmNlX2luaXRp YWxpemUoJmFkZXYtPmNvbHNfcmVzLCA1MCk7Cj4+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKCZhZGV2LT5kZXYsICJmYWls ZWQgdG8gaW5pdGlhbGl6ZSBjb2x1bW5zCj4+IHJlc291cmNlLlxuIik7Cj4+ICsKPj4gK8KgwqDC oMKgwqDCoMKgcmV0dXJuIHJldDsKPj4gK30KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy94 aWxpbngtYWktZW5naW5lL2FpLWVuZ2luZS1kZXYuYwo+PiBiL2RyaXZlcnMvbWlzYy94aWxpbngt YWktZW5naW5lL2FpLWVuZ2luZS1kZXYuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRl eCAwMDAwMDAwLi4yYWIyZGM4Cj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9taXNj L3hpbGlueC1haS1lbmdpbmUvYWktZW5naW5lLWRldi5jCj4+IEBAIC0wLDAgKzEsNDQ4IEBACj4+ ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+PiArLyoKPj4gKyAqIFhpbGlu eCBBSSBFbmdpbmUgZGV2aWNlIGRyaXZlcgo+PiArICoKPj4gKyAqIENvcHlyaWdodCAoQykgMjAy MCBYaWxpbngsIEluYy4KPj4gKyAqLwo+PiArCj4+ICsjaW5jbHVkZSA8bGludXgvYW5vbl9pbm9k ZXMuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvZGVs YXkuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9k bWEtbWFwcGluZy5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KPj4gKyNpbmNsdWRlIDxs aW51eC9mcy5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2lkci5oPgo+PiArI2luY2x1ZGUgPGxpbnV4 L2xpc3QuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPj4gKyNpbmNsdWRlIDxsaW51 eC9tdXRleC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgv b2ZfZGV2aWNlLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4+ICsj aW5jbHVkZSA8bGludXgvc2xhYi5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KPj4g KyNpbmNsdWRlIDx1YXBpL2xpbnV4L3hsbngtYWktZW5naW5lLmg+Cj4+ICsKPj4gKyNpbmNsdWRl ICJhaS1lbmdpbmUtaW50ZXJuYWwuaCIKPj4gKwo+PiArI2RlZmluZSBBSUVfREVWX01BWMKgwqDC oMKgKE1JTk9STUFTSyArIDEpCj4+ICsKPj4gK3N0YXRpYyBkZXZfdCBhaWVfbWFqb3I7Cj4+ICtz dHJ1Y3QgY2xhc3MgKmFpZV9jbGFzczsKPj4gKwo+PiArc3RhdGljIERFRklORV9JREEoYWllX2Rl dmljZV9pZGEpOwo+PiArc3RhdGljIERFRklORV9JREEoYWllX21pbm9yX2lkYSk7Cj4+ICsKPj4g Ky8qKgo+PiArICogYWllX2dldF9wYXJ0aXRpb25fZmQoKSAtIEdldCBBSSBlbmdpbmUgcGFydGl0 aW9uIGZpbGUgZGVzY3JpcHRvcgo+PiArICogQGFwYXJ0OiBBSSBlbmdpbmUgcGFydGl0aW9uCj4+ ICsgKiBAcmV0dXJuOiBmaWxlIGRlc2NyaXB0b3IgZm9yIEFJIGVuZ2luZSBwYXJ0aXRpb24gZm9y IHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlCj4+ICsgKsKgwqDCoMKgwqDCoMKgwqAgdmFsdWUgZm9yIGZh aWx1cmUuCj4+ICsgKgo+PiArICogVGhpcyBmdW5jdGlvbiBnZXRzIGEgZmlsZSBkZXNjcmlwdG9y IGZvciB0aGUgQUkgZW5naW5lIHBhcnRpdGlvbi4KPj4gKyAqLwo+PiArc3RhdGljIGludCBhaWVf Z2V0X3BhcnRpdGlvbl9mZChzdHJ1Y3QgYWllX3BhcnRpdGlvbiAqYXBhcnQpCj4+ICt7Cj4+ICvC oMKgwqDCoMKgwqDCoHN0cnVjdCBmaWxlICpmaWxlcDsKPj4gK8KgwqDCoMKgwqDCoMKgaW50IHJl dDsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAvKgo+PiArwqDCoMKgwqDCoMKgwqAgKiBXZSBjYW4n dCB1c2UgYW5vbl9pbm9kZV9nZXRmZCgpIGJlY2F1c2Ugd2UgbmVlZCB0byBtb2RpZnkKPj4gK8Kg wqDCoMKgwqDCoMKgICogdGhlIGZfbW9kZSBmbGFncyBkaXJlY3RseSB0byBhbGxvdyBtb3JlIHRo YW4ganVzdCBpb2N0bHMKPj4gK8KgwqDCoMKgwqDCoMKgICovCj4+ICvCoMKgwqDCoMKgwqDCoHJl dCA9IGdldF91bnVzZWRfZmRfZmxhZ3MoT19DTE9FWEVDKTsKPj4gK8KgwqDCoMKgwqDCoMKgaWYg KHJldCA8IDApCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ PiArCj4+ICvCoMKgwqDCoMKgwqDCoGZpbGVwID0gYW5vbl9pbm9kZV9nZXRmaWxlKGRldl9uYW1l KCZhcGFydC0+ZGV2KSwgJmFpZV9wYXJ0X2ZvcHMsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXBhcnQsIE9fUkRX Uik7Cj4+ICvCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIoZmlsZXApKSB7Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBwdXRfdW51c2VkX2ZkKHJldCk7Cj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXQgPSBQVFJfRVJSKGZpbGVwKTsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4+ICvCoMKgwqDCoMKgwqDCoH0KPj4gK8KgwqDC oMKgwqDCoMKgZmlsZXAtPmZfbW9kZSB8PSAoRk1PREVfTFNFRUsgfCBGTU9ERV9QUkVBRCB8IEZN T0RFX1BXUklURSk7Cj4+ICvCoMKgwqDCoMKgwqDCoGZkX2luc3RhbGwocmV0LCBmaWxlcCk7Cj4+ ICsKPj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArLyoqCj4+ICsg KiBhaWVfZW5xdWlyZV9wYXJ0aXRpb25zKCkgLSBnZXQgQUkgZW5naW5lIHBhcnRpdGlvbnMgaW5m b3JtYXRpb24KPj4gKyAqIEBhZGV2OiBBSSBlbmdpbmUgZGV2aWNlCj4+ICsgKiBAcXVlcnk6IGRh dGEgc3RydWN0IHRvIHN0b3JlIHRoZSBwYXJ0aXRpb24gaW5mb3JtYXRpb24KPj4gKyAqIEByZXR1 cm46IDAgZm9yIHN1Y2Nlc3MsIGFuZCBuZWdhdGl2ZSB2YWx1ZSBmb3IgZmFpbHVyZS4KPj4gKyAq Lwo+PiArc3RhdGljIGludCBhaWVfZW5xdWlyZV9wYXJ0aXRpb25zKHN0cnVjdCBhaWVfZGV2aWNl ICphZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYWllX3BhcnRpdGlvbl9xdWVyeSAqcXVlcnkpCj4+ ICt7Cj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfcGFydGl0aW9uICphcGFydDsKPj4gK8Kg wqDCoMKgwqDCoMKgdTMyIHBhcnRpdGlvbl9jbnQsIGkgPSAwOwo+PiArwqDCoMKgwqDCoMKgwqBp bnQgcmV0Owo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoGlmICghcXVlcnktPnBhcnRpdGlvbnMpIHsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgKiBJZiBwYXJ0aXRpb25zIGluZm9ybWF0aW9uIGJ1ZmZlciBpcyBOVUxM Lgo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogSXQgaXMgdG8gZ2V0IHRoZSBu dW1iZXIgb2YgcGFydGl0aW9ucy4KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAq Lwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcXVlcnktPnBhcnRpdGlvbl9jbnQg PSAwOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGlzdF9mb3JfZWFjaF9lbnRy eShhcGFydCwgJmFkZXYtPnBhcnRpdGlvbnMsIG5vZGUpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcXVlcnktPnBhcnRpdGlvbl9jbnQrKzsKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+PiArwqDCoMKgwqDCoMKgwqB9 Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgcGFydGl0aW9uX2NudCA9IHF1ZXJ5LT5wYXJ0aXRpb25f Y250Owo+PiArwqDCoMKgwqDCoMKgwqBpZiAoIXBhcnRpdGlvbl9jbnQpCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqByZXQg PSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmFkZXYtPm1sb2NrKTsKPj4gK8KgwqDCoMKgwqDC oMKgaWYgKHJldCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7 Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgbGlzdF9mb3JfZWFjaF9lbnRyeShhcGFydCwgJmFkZXYt PnBhcnRpdGlvbnMsIG5vZGUpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0 cnVjdCBhaWVfcmFuZ2VfYXJncyBwYXJ0Owo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpZiAoaSA+PSBwYXJ0aXRpb25fY250KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcGFydC5wYXJ0aXRpb25faWQgPSBhcGFydC0+cGFydGl0aW9uX2lkOwo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyoKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAqIFRCRDogY2hlY2sgd2l0aCBQTE0gdGhhdCBpZiB0aGUgcGFydGl0aW9uIGlzIHBy b2dyYW1tZWQKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIGFuZCBnZXQgdGhl IFVJRCBvZiB0aGUgaW1hZ2Ugd2hpY2ggaXMgbG9hZGVkIG9uIHRoZSBBSQo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICogZW5naW5lIHBhcnRpdGlvbi4KPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cGFydC51aWQgPSAwOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGFydC5yYW5n ZS5zdGFydC5jb2wgPSBhcGFydC0+cmFuZ2Uuc3RhcnQuY29sOwo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcGFydC5yYW5nZS5zdGFydC5yb3cgPSBhcGFydC0+cmFuZ2Uuc3RhcnQu cm93Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGFydC5yYW5nZS5zaXplLmNv bCA9IGFwYXJ0LT5yYW5nZS5zaXplLmNvbDsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHBhcnQucmFuZ2Uuc2l6ZS5yb3cgPSBhcGFydC0+cmFuZ2Uuc2l6ZS5yb3c7Cj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBDaGVjayBpZiBwYXJ0aXRpb24gaXMgaW4gdXNl ICovCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYXJ0LnN0YXR1cyA9IGFwYXJ0 LT5zdGF0dXM7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoY29weV90b191 c2VyKCh2b2lkIF9fdXNlciAqKSZxdWVyeS0+cGFydGl0aW9uc1tpXSwgJnBhcnQsCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzaXplb2YocGFydCkpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgbXV0ZXhfdW5sb2NrKCZhZGV2LT5tbG9jayk7Cj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FRkFVTFQ7Cj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBpKys7Cj4+ICvCoMKgwqDCoMKgwqDCoH0KPj4gK8KgwqDCoMKgwqDCoMKgbXV0ZXhfdW5s b2NrKCZhZGV2LT5tbG9jayk7Cj4+ICvCoMKgwqDCoMKgwqDCoHF1ZXJ5LT5wYXJ0aXRpb25fY250 ID0gaTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArLyoq Cj4+ICsgKiBhaWVfZ2V0X3BhcnRpdGlvbl9mcm9tX2lkKCkgLSBnZXQgQUkgZW5naW5lIHBhcnRp dGlvbiBmcm9tIGlkCj4+ICsgKiBAYWRldjogQUkgZW5naW5lIGRldmljZQo+PiArICogQHBhcnRp dGlvbl9pZDogcGFydGl0aW9uIGlkIHRvIGNoZWNrCj4+ICsgKiBAcmV0dXJuOiBwYXJ0aXRpb24g cG9pbnRlciBpZiBwYXJ0aXRpb24gZXhpc3RzLCBvdGhlcndpc2UsIE5VTEwuCj4+ICsgKgo+PiAr ICogVGhpcyBmdW5jdGlvbiBjaGVja3MgZGVmaW5lZCBwYXJ0aXRpb25zIHdpdGggcGFydGl0aW9u IGlkLgo+PiArICogVGhpcyBmdW5jdGlvbiBleHBlY3QgdGhlIGNhbGxlciB0byBsb2NrIG1sb2Nr IG9mIEBhZGV2Lgo+PiArICovCj4+ICtzdHJ1Y3QgYWllX3BhcnRpdGlvbiAqYWllX2dldF9wYXJ0 aXRpb25fZnJvbV9pZChzdHJ1Y3QgYWllX2RldmljZSAqYWRldiwKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1MzIgcGFydGl0aW9uX2lkKQo+PiArewo+PiArwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgYWllX3BhcnRpdGlvbiAqYXBhcnQ7Cj4+ICsKPj4gK8KgwqDCoMKgwqDC oMKgbGlzdF9mb3JfZWFjaF9lbnRyeShhcGFydCwgJmFkZXYtPnBhcnRpdGlvbnMsIG5vZGUpIHsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChhcGFydC0+cGFydGl0aW9uX2lk ID09IHBhcnRpdGlvbl9pZCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gYXBhcnQ7Cj4+ICvCoMKgwqDCoMKgwqDCoH0KPj4gKwo+PiArwqDC oMKgwqDCoMKgwqByZXR1cm4gTlVMTDsKPj4gK30KPj4gKwo+PiArLyoqCj4+ICsgKiBhaWVfcmVx dWVzdF9wYXJ0aXRpb24oKSAtIHJlcXVlc3QgQUkgZW5naW5lIHBhcnRpdGlvbgo+PiArICogQGFk ZXY6IEFJIGVuZ2luZSBkZXZpY2UKPj4gKyAqIEByZXE6IHBhcnRpdGlvbiByZXF1ZXN0LCBpbmNs dWRlcyB0aGUgcmVxdWVzdGVkIEFJIGVuZ2luZSBpbmZvcm1hdGlvbgo+PiArICrCoMKgwqDCoMKg IHN1Y2ggYXMgcGFydGl0aW9uIG5vZGUgSUQgYW5kIHRoZSBVSUQgb2YgdGhlIGltYWdlIHdoaWNo IGlzCj4+ICsgKsKgwqDCoMKgwqAgbG9hZGVkIG9uIHRoZSBwYXJ0aXRpb24uCj4+ICsgKiBAcmV0 dXJuOiBwYXJ0aXRpb24gcG9pbnRlciBpZiBwYXJ0aXRpb24gZXhpc3RzLCBvdGhlcndpc2UsIE5V TEwuCj4+ICsgKgo+PiArICogVGhpcyBmdW5jdGlvbiBmaW5kcyBhIGRlZmluZWQgcGFydGl0aW9u IHdoaWNoIG1hdGNoZXMgdGhlIHNwZWNpZmllZAo+PiArICogcGFydGl0aW9uIGlkLCByZXF1ZXN0 IGl0IGlmIGl0IGhhc24ndCBiZWVuIHJlcXVlc3RlZCwgYW5kIHJldHVybnMgaXQuCj4+ICsgKi8K Pj4gK3N0cnVjdCBhaWVfcGFydGl0aW9uICphaWVfcmVxdWVzdF9wYXJ0aXRpb24oc3RydWN0IGFp ZV9kZXZpY2UgKmFkZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGFp ZV9wYXJ0aXRpb25fcmVxICpyZXEpCj4+ICt7Cj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVf cGFydGl0aW9uICphcGFydDsKPj4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPj4gKwo+PiArwqDC oMKgwqDCoMKgwqByZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmFkZXYtPm1sb2NrKTsK Pj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiBFUlJfUFRSKHJldCk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgYXBhcnQgPSBh aWVfZ2V0X3BhcnRpdGlvbl9mcm9tX2lkKGFkZXYsIHJlcS0+cGFydGl0aW9uX2lkKTsKPj4gK8Kg wqDCoMKgwqDCoMKgaWYgKCFhcGFydCkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZGV2X2VycigmYWRldi0+ZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCJyZXF1ZXN0IHBhcnRpdGlvbiAldSBmYWlsZWQsIG5vdCBleGlzdC5c biIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVx LT5wYXJ0aXRpb25faWQpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbXV0ZXhf dW5sb2NrKCZhZGV2LT5tbG9jayk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPj4gK8KgwqDCoMKgwqDCoMKgfQo+PiArwqDCoMKgwqDC oMKgwqAvKgo+PiArwqDCoMKgwqDCoMKgwqAgKiBUQkQ6IEl0IHdpbGwgY2hlY2sgaW1hZ2UgVUlE IHRvbyB0byBzZWUgaWYgdGhlIHVzZXIgbWF0Y2hlcwo+PiArwqDCoMKgwqDCoMKgwqAgKiB3aGF0 J3MgbG9hZGVkIGluIHRoZSBBSSBlbmdpbmUgcGFydGl0aW9uLiBBbmQgY2hlY2sgdGhlIG1ldGEK Pj4gK8KgwqDCoMKgwqDCoMKgICogZGF0YSB0byBzZWUgd2hpY2ggcmVzb3VyY2VzIHVzZWQgYnkg YXBwbGljYXRpb24uCj4+ICvCoMKgwqDCoMKgwqDCoCAqLwo+PiArCj4+ICvCoMKgwqDCoMKgwqDC oHJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYXBhcnQtPm1sb2NrKTsKPj4gK8KgwqDC oMKgwqDCoMKgaWYgKHJldCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biBFUlJfUFRSKHJldCk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgaWYgKGFwYXJ0LT5zdGF0dXMg JiBYQUlFX1BBUlRfU1RBVFVTX0lOVVNFKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBtdXRleF91bmxvY2soJmFwYXJ0LT5tbG9jayk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBkZXZfZXJyKCZhZGV2LT5kZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgInJlcXVlc3QgcGFydGl0aW9uICV1IGZhaWxlZCwgcGFy dGl0aW9uIGluIHVzZS5cbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmVxLT5wYXJ0aXRpb25faWQpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgYXBhcnQgPSBFUlJfUFRSKC1FQlVTWSk7Cj4+ICvCoMKgwqDCoMKgwqDCoH0gZWxz ZSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKgo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICogVEJEOgo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICogMS4gc2V0dXAgTk9DIEFYSSBNTSBjb25maWcgdG8gb25seSBnZW5lcmF0ZSBlcnJvciBl dmVudHMKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqwqDCoMKgIGZvciBzbGF2 ZSBlcnJvciBhbmQgZGVjb2RlIGVycm9yLgo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICogMi4gc2NhbiB0byBzZWUgd2hpY2ggdGlsZXMgaGF2ZSBiZWVuIGNsb2NrIGdhdGVkLgo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICoKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAqIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBiZWZvcmUgdGhlIEFJIGVuZ2lu ZSBwYXJ0aXRpb24gaXMKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIGV4cG9y dGVkIGZvciB1c2VyIHRvIGFjY2Vzcy4KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAqLwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYXBhcnQtPnN0YXR1cyA9IFhB SUVfUEFSVF9TVEFUVVNfSU5VU0U7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBt dXRleF91bmxvY2soJmFwYXJ0LT5tbG9jayk7Cj4+ICvCoMKgwqDCoMKgwqDCoH0KPj4gK8KgwqDC oMKgwqDCoMKgbXV0ZXhfdW5sb2NrKCZhZGV2LT5tbG9jayk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDC oMKgcmV0dXJuIGFwYXJ0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgbG9uZyB4aWxpbnhfYWlfZW5n aW5lX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHVuc2lnbmVkIGxvbmcgYXJnKQo+PiArewo+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaW5v ZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTsKPj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFp ZV9kZXZpY2UgKmFkZXYgPSBjZGV2X3RvX2FpZWRldihpbm9kZS0+aV9jZGV2KTsKPj4gK8KgwqDC oMKgwqDCoMKgdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7Cj4+ICvCoMKg wqDCoMKgwqDCoGludCByZXQ7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgc3dpdGNoIChjbWQpIHsK Pj4gK8KgwqDCoMKgwqDCoMKgY2FzZSBBSUVfRU5RVUlSRV9QQVJUX0lPQ1RMOgo+PiArwqDCoMKg wqDCoMKgwqB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWllX3Bh cnRpdGlvbl9xdWVyeSBxdWVyeTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0 cnVjdCBhaWVfcGFydGl0aW9uX3F1ZXJ5wqAgX191c2VyICp1cXVlcnlfcHRyID0gYXJncDsKPj4g Kwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGNvcHlfZnJvbV91c2VyKCZx dWVyeSwgdXF1ZXJ5X3B0ciwgc2l6ZW9mKHF1ZXJ5KSkpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FRkFVTFQ7Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBhaWVfZW5xdWlyZV9wYXJ0aXRpb25zKGFkZXYsICZx dWVyeSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0 Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGNvcHlfdG9fdXNlcigodm9p ZCBfX3VzZXIgKikmdXF1ZXJ5X3B0ci0+cGFydGl0aW9uX2NudCwKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZxdWVyeS5w YXJ0aXRpb25fY250LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZW9mKHF1ZXJ5LnBhcnRpdGlvbl9jbnQpKSkKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVG QVVMVDsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+PiArwqDCoMKg wqDCoMKgwqB9Cj4+ICvCoMKgwqDCoMKgwqDCoGNhc2UgQUlFX1JFUVVFU1RfUEFSVF9JT0NUTDoK Pj4gK8KgwqDCoMKgwqDCoMKgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3Ry dWN0IGFpZV9wYXJ0aXRpb25fcmVxIHJlcTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHN0cnVjdCBhaWVfcGFydGl0aW9uICphcGFydDsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaWYgKGNvcHlfZnJvbV91c2VyKCZyZXEsIGFyZ3AsIHNpemVvZihyZXEp KSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gLUVGQVVMVDsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGFwYXJ0ID0gYWll X3JlcXVlc3RfcGFydGl0aW9uKGFkZXYsICZyZXEpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgaWYgKElTX0VSUihhcGFydCkpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIFBUUl9FUlIoYXBhcnQpOwo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gYWllX2dldF9wYXJ0aXRpb25fZmQoYXBhcnQpOwo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApIHsKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKCZhcGFydC0+ ZGV2LCAiZmFpbGVkIHRvIGdldCBmZC5cbiIpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgfQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4+ICvCoMKg wqDCoMKgwqDCoH0KPj4gK8KgwqDCoMKgwqDCoMKgZGVmYXVsdDoKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoJmFkZXYtPmRldiwgIkludmFsaWQgaW9jdGwgY29tbWFu ZCAldS5cbiIsIGNtZCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSAt RUlOVkFMOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4+ICvCoMKg wqDCoMKgwqDCoH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhaWVfZGV2aWNlX2ZvcHMg PSB7Cj4+ICvCoMKgwqDCoMKgwqDCoC5vd25lcsKgwqDCoMKgwqDCoMKgwqDCoMKgPSBUSElTX01P RFVMRSwKPj4gK8KgwqDCoMKgwqDCoMKgLnVubG9ja2VkX2lvY3RswqA9IHhpbGlueF9haV9lbmdp bmVfaW9jdGwsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgdm9pZCB4aWxpbnhfYWlfZW5naW5lX3Jl bGVhc2VfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKPj4gK3sKPj4gK8KgwqDCoMKgwqDCoMKg c3RydWN0IGFpZV9kZXZpY2UgKmFkZXYgPSBkZXZfdG9fYWllZGV2KGRldik7Cj4+ICsKPj4gK8Kg wqDCoMKgwqDCoMKgaWRhX3NpbXBsZV9yZW1vdmUoJmFpZV9kZXZpY2VfaWRhLCBkZXYtPmlkKTsK Pj4gK8KgwqDCoMKgwqDCoMKgaWRhX3NpbXBsZV9yZW1vdmUoJmFpZV9taW5vcl9pZGEsIE1JTk9S KGRldi0+ZGV2dCkpOwo+PiArwqDCoMKgwqDCoMKgwqBjZGV2X2RlbCgmYWRldi0+Y2Rldik7Cj4+ ICvCoMKgwqDCoMKgwqDCoGFpZV9yZXNvdXJjZV91bmluaXRpYWxpemUoJmFkZXYtPmNvbHNfcmVz KTsKPj4gK30KPj4gKwo+PiArLyoqCj4+ICsgKiBvZl94aWxpbnhfYWlfZW5naW5lX3BhcnRfcHJv YmUoKSAtIHByb2JlcyBmb3IgQUkgZW5naW5lIHBhcnRpdGlvbiBub2Rlcwo+PiArICogQGFkZXY6 IEFJIGVuZ2luZSBkZXZpY2UKPj4gKyAqCj4+ICsgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcHJvYmUg Zm9yIGNoaWxkcmVuIEFJIGVuZ2luZSBwYXJ0aXRpb24gbm9kZXMgYW5kIGNyZWF0ZQo+PiArICog YW4gQUkgZW5naW5lIHBhcnRpdGlvbiBpbnN0YW5jZSBmb3IgZWFjaCBub2RlLgo+PiArICovCj4+ ICtzdGF0aWMgdm9pZCBvZl94aWxpbnhfYWlfZW5naW5lX3BhcnRfcHJvYmUoc3RydWN0IGFpZV9k ZXZpY2UgKmFkZXYpCj4+ICt7Cj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZpY2Vfbm9kZSAq bmM7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgZm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25v ZGUoYWRldi0+ZGV2Lm9mX25vZGUsIG5jKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBzdHJ1Y3QgYWllX3BhcnRpdGlvbiAqYXBhcnQ7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGlmIChvZl9ub2RlX3Rlc3RfYW5kX3NldF9mbGFnKG5jLCBPRl9QT1BV TEFURUQpKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGNvbnRpbnVlOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYXBhcnQgPSBvZl9h aWVfcGFydF9wcm9iZShhZGV2LCBuYyk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpZiAoSVNfRVJSKGFwYXJ0KSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoJmFkZXYtPmRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIkZhaWxlZCB0byBw cm9iZSBBSSBlbmdpbmUgcGFydCBmb3IgJXBPRlxuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbmMpOwo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG9mX25vZGVfY2xlYXJfZmxh ZyhuYywgT0ZfUE9QVUxBVEVEKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0K Pj4gK8KgwqDCoMKgwqDCoMKgfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHhpbGlueF9haV9l bmdpbmVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4gK3sKPj4gK8KgwqDC oMKgwqDCoMKgc3RydWN0IGFpZV9kZXZpY2UgKmFkZXY7Cj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBkZXZpY2UgKmRldjsKPj4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPj4gKwo+PiArwqDCoMKg wqDCoMKgwqBhZGV2ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqYWRldiksIEdG UF9LRVJORUwpOwo+PiArwqDCoMKgwqDCoMKgwqBpZiAoIWFkZXYpCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT01FTTsKPj4gK8KgwqDCoMKgwqDCoMKgcGxhdGZv cm1fc2V0X2RydmRhdGEocGRldiwgYWRldik7Cj4+ICvCoMKgwqDCoMKgwqDCoElOSVRfTElTVF9I RUFEKCZhZGV2LT5wYXJ0aXRpb25zKTsKPj4gK8KgwqDCoMKgwqDCoMKgbXV0ZXhfaW5pdCgmYWRl di0+bWxvY2spOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoGFkZXYtPnJlcyA9IHBsYXRmb3JtX2dl dF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Cj4+ICvCoMKgwqDCoMKgwqDCoGlm ICghYWRldi0+cmVzKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJy KCZwZGV2LT5kZXYsICJObyBtZW1vcnkgcmVzb3VyY2UuXG4iKTsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOwo+PiArwqDCoMKgwqDCoMKgwqB9Cj4+ICvC oMKgwqDCoMKgwqDCoGFkZXYtPmJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRl diwgYWRldi0+cmVzKTsKPj4gK8KgwqDCoMKgwqDCoMKgaWYgKElTX0VSUihhZGV2LT5iYXNlKSkg ewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycigmcGRldi0+ZGV2LCAi bm8gaW8gbWVtb3J5IHJlc291cmNlLlxuIik7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXR1cm4gUFRSX0VSUihhZGV2LT5iYXNlKTsKPj4gK8KgwqDCoMKgwqDCoMKgfQo+PiAr Cj4+ICvCoMKgwqDCoMKgwqDCoC8qIEluaXRpYWxpemUgQUlFIGRldmljZSBzcGVjaWZpYyBpbnN0 YW5jZS4gKi8KPj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gYWllX2RldmljZV9pbml0KGFkZXYpOwo+ PiArwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgZGV2aWNl Cj4+IGluc3RhbmNlLlxuIik7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gcmV0Owo+PiArwqDCoMKgwqDCoMKgwqB9Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgZGV2ID0g JmFkZXYtPmRldjsKPj4gK8KgwqDCoMKgwqDCoMKgZGV2aWNlX2luaXRpYWxpemUoZGV2KTsKPj4g K8KgwqDCoMKgwqDCoMKgZGV2LT5jbGFzcyA9IGFpZV9jbGFzczsKPj4gK8KgwqDCoMKgwqDCoMKg ZGV2LT5wYXJlbnQgPSAmcGRldi0+ZGV2Owo+PiArwqDCoMKgwqDCoMKgwqBkZXYtPm9mX25vZGUg PSBwZGV2LT5kZXYub2Zfbm9kZTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqByZXQgPSBpZGFfc2lt cGxlX2dldCgmYWllX21pbm9yX2lkYSwgMCwgQUlFX0RFVl9NQVgsIEdGUF9LRVJORUwpOwo+PiAr wqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGdvdG8gZnJlZV9kZXY7Cj4+ICvCoMKgwqDCoMKgwqDCoGRldi0+ZGV2dCA9IE1LREVWKE1B Sk9SKGFpZV9tYWpvciksIHJldCk7Cj4+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGlkYV9zaW1wbGVf Z2V0KCZhaWVfZGV2aWNlX2lkYSwgMCwgMCwgR0ZQX0tFUk5FTCk7Cj4+ICvCoMKgwqDCoMKgwqDC oGlmIChyZXQgPCAwKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBmcmVl X21pbm9yX2lkYTsKPj4gK8KgwqDCoMKgwqDCoMKgZGV2LT5pZCA9IHJldDsKPj4gK8KgwqDCoMKg wqDCoMKgZGV2X3NldF9uYW1lKCZhZGV2LT5kZXYsICJhaWUlZCIsIGRldi0+aWQpOwo+PiArCj4+ ICvCoMKgwqDCoMKgwqDCoGNkZXZfaW5pdCgmYWRldi0+Y2RldiwgJmFpZV9kZXZpY2VfZm9wcyk7 Cj4+ICvCoMKgwqDCoMKgwqDCoGFkZXYtPmNkZXYub3duZXIgPSBUSElTX01PRFVMRTsKPj4gK8Kg wqDCoMKgwqDCoMKgcmV0ID0gY2Rldl9hZGQoJmFkZXYtPmNkZXYsIGRldi0+ZGV2dCwgMSk7Cj4+ ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBnb3RvIGZyZWVfaWRhOwo+PiArwqDCoMKgwqDCoMKgwqAvKiBXZSBjYW4gbm93IHJlbHkgb24g dGhlIHJlbGVhc2UgZnVuY3Rpb24gZm9yIGNsZWFudXAgKi8KPj4gK8KgwqDCoMKgwqDCoMKgZGV2 LT5yZWxlYXNlID0geGlsaW54X2FpX2VuZ2luZV9yZWxlYXNlX2RldmljZTsKPj4gKwo+PiArwqDC oMKgwqDCoMKgwqByZXQgPSBkZXZpY2VfYWRkKGRldik7Cj4+ICvCoMKgwqDCoMKgwqDCoGlmIChy ZXQpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoJnBkZXYtPmRl diwgImRldmljZV9hZGQgZmFpbGVkOiAlZFxuIiwgcmV0KTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHB1dF9kZXZpY2UoZGV2KTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldHVybiByZXQ7Cj4+ICvCoMKgwqDCoMKgwqDCoH0KPj4gKwo+PiArwqDCoMKgwqDC oMKgwqBvZl94aWxpbnhfYWlfZW5naW5lX3BhcnRfcHJvYmUoYWRldik7Cj4+ICvCoMKgwqDCoMKg wqDCoGRldl9pbmZvKCZwZGV2LT5kZXYsICJYaWxpbnggQUkgRW5naW5lIGRldmljZShjb2xzPSV1 KSBwcm9iZWRcbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWRldi0+Y29s c19yZXMudG90YWwpOwo+PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPj4gKwo+PiArZnJlZV9p ZGE6Cj4+ICvCoMKgwqDCoMKgwqDCoGlkYV9zaW1wbGVfcmVtb3ZlKCZhaWVfZGV2aWNlX2lkYSwg ZGV2LT5pZCk7Cj4+ICtmcmVlX21pbm9yX2lkYToKPj4gK8KgwqDCoMKgwqDCoMKgaWRhX3NpbXBs ZV9yZW1vdmUoJmFpZV9taW5vcl9pZGEsIE1JTk9SKGRldi0+ZGV2dCkpOwo+PiArZnJlZV9kZXY6 Cj4+ICvCoMKgwqDCoMKgwqDCoHB1dF9kZXZpY2UoZGV2KTsKPj4gKwo+PiArwqDCoMKgwqDCoMKg wqByZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHhpbGlueF9haV9lbmdpbmVf cmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+ICt7Cj4+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCBhaWVfZGV2aWNlICphZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7 Cj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfcGFydGl0aW9uICphcGFydDsKPj4gKwo+PiAr wqDCoMKgwqDCoMKgwqBsaXN0X2Zvcl9lYWNoX2VudHJ5KGFwYXJ0LCAmYWRldi0+cGFydGl0aW9u cywgbm9kZSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGFpZV9wYXJ0X3JlbW92 ZShhcGFydCk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgZGV2aWNlX2RlbCgmYWRldi0+ZGV2KTsK Pj4gK8KgwqDCoMKgwqDCoMKgcHV0X2RldmljZSgmYWRldi0+ZGV2KTsKPj4gKwo+PiArwqDCoMKg wqDCoMKgwqByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9k ZXZpY2VfaWQgeGlsaW54X2FpX2VuZ2luZV9vZl9tYXRjaFtdID0gewo+PiArwqDCoMKgwqDCoMKg wqB7IC5jb21wYXRpYmxlID0gInhsbngsYWktZW5naW5lLXYxLjAiLCB9LAo+PiArwqDCoMKgwqDC oMKgwqB7IC8qIGVuZCBvZiB0YWJsZSAqLyB9LAo+PiArfTsKPj4gK01PRFVMRV9ERVZJQ0VfVEFC TEUob2YsIHhpbGlueF9haV9lbmdpbmVfb2ZfbWF0Y2gpOwo+PiArCj4+ICtzdGF0aWMgc3RydWN0 IHBsYXRmb3JtX2RyaXZlciB4aWxpbnhfYWlfZW5naW5lX2RyaXZlciA9IHsKPj4gK8KgwqDCoMKg wqDCoMKgLnByb2JlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPSB4aWxpbnhf YWlfZW5naW5lX3Byb2JlLAo+PiArwqDCoMKgwqDCoMKgwqAucmVtb3ZlwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoD0geGlsaW54X2FpX2VuZ2luZV9yZW1vdmUsCj4+ICvCoMKgwqDC oMKgwqDCoC5kcml2ZXLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPSB7Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubmFtZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9 ICJ4aWxpbngtYWktZW5naW5lIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5v Zl9tYXRjaF90YWJsZcKgPSB4aWxpbnhfYWlfZW5naW5lX29mX21hdGNoLAo+PiArwqDCoMKgwqDC oMKgwqB9LAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGludCBfX2luaXQgeGlsaW54X2FpX2VuZ2lu ZV9pbml0KHZvaWQpCj4+ICt7Cj4+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4+ICsKPj4gK8Kg wqDCoMKgwqDCoMKgcmV0ID0gYWxsb2NfY2hyZGV2X3JlZ2lvbigmYWllX21ham9yLCAwLCBBSUVf REVWX01BWCwgImFpZSIpOwo+PiArwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkgewo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJfZXJyKCJhaWU6IGZhaWxlZCB0byBhbGxvY2F0 ZSBhaWUgcmVnaW9uXG4iKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biByZXQ7Cj4+ICvCoMKgwqDCoMKgwqDCoH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqBhaWVfY2xh c3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJhaWUiKTsKPj4gK8KgwqDCoMKgwqDCoMKg aWYgKElTX0VSUihhaWVfY2xhc3MpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBwcl9lcnIoImZhaWxlZCB0byBjcmVhdGUgYWllIGNsYXNzXG4iKTsKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihhaWVfbWFqb3IsIEFJ RV9ERVZfTUFYKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBQVFJf RVJSKGFpZV9jbGFzcyk7Cj4+ICvCoMKgwqDCoMKgwqDCoH0KPj4gKwo+PiArwqDCoMKgwqDCoMKg wqBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnhpbGlueF9haV9lbmdpbmVfZHJpdmVyKTsKPj4g Kwo+PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPj4gK30KPj4gK3Bvc3Rjb3JlX2luaXRjYWxs KHhpbGlueF9haV9lbmdpbmVfaW5pdCk7Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIF9fZXhpdCB4aWxp bnhfYWlfZW5naW5lX2V4aXQodm9pZCkKPj4gK3sKPj4gK8KgwqDCoMKgwqDCoMKgcGxhdGZvcm1f ZHJpdmVyX3VucmVnaXN0ZXIoJnhpbGlueF9haV9lbmdpbmVfZHJpdmVyKTsKPj4gK8KgwqDCoMKg wqDCoMKgY2xhc3NfZGVzdHJveShhaWVfY2xhc3MpOwo+PiArwqDCoMKgwqDCoMKgwqB1bnJlZ2lz dGVyX2NocmRldl9yZWdpb24oYWllX21ham9yLCBBSUVfREVWX01BWCk7Cj4+ICt9Cj4+ICttb2R1 bGVfZXhpdCh4aWxpbnhfYWlfZW5naW5lX2V4aXQpOwo+PiArCj4+ICtNT0RVTEVfQVVUSE9SKCJY aWxpbngsIEluYy4iKTsKPj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvbWlzYy94aWxpbngtYWktZW5naW5lL2FpLWVuZ2luZS1pbnRlcm5hbC5oCj4+ IGIvZHJpdmVycy9taXNjL3hpbGlueC1haS1lbmdpbmUvYWktZW5naW5lLWludGVybmFsLmgKPj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uNmE2OTk0Ngo+PiAtLS0gL2Rl di9udWxsCj4+ICsrKyBiL2RyaXZlcnMvbWlzYy94aWxpbngtYWktZW5naW5lL2FpLWVuZ2luZS1p bnRlcm5hbC5oCj4+IEBAIC0wLDAgKzEsMjI2IEBACj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMC1vbmx5ICovCj4+ICsvKgo+PiArICogWGlsaW54IEFJIEVuZ2luZSBkcml2 ZXIgaW50ZXJuYWwgaGVhZGVyCj4+ICsgKgo+PiArICogQ29weXJpZ2h0IChDKSAyMDIwIFhpbGlu eCwgSW5jLgo+PiArICovCj4+ICsKPj4gKyNpZm5kZWYgQUlFX0lOVEVSTkFMX0gKPj4gKyNkZWZp bmUgQUlFX0lOVEVSTkFMX0gKPj4gKwo+PiArI2luY2x1ZGUgPGxpbnV4L2JpdGZpZWxkLmg+Cj4+ ICsjaW5jbHVkZSA8bGludXgvYml0cy5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KPj4g KyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9pby5oPgo+PiAr I2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgo+PiAr I2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4+ ICsjaW5jbHVkZSA8dWFwaS9saW51eC94bG54LWFpLWVuZ2luZS5oPgo+PiArCj4+ICsvKgo+PiAr ICogTWFjcm9zIGZvciBBSSBlbmdpbmUgdGlsZSB0eXBlIGJpdG1hc2tzCj4+ICsgKi8KPj4gKyNk ZWZpbmUgQUlFX1RJTEVfVFlQRV9USUxFwqDCoMKgwqDCoEJJVCgwKQo+PiArI2RlZmluZSBBSUVf VElMRV9UWVBFX1NISU1QTMKgwqDCoEJJVCgxKQo+PiArLyogU0hJTSBOT0MgdGlsZSBpbmNsdWRl cyBTSElNIFBMIGFuZCBTSElNIE5PQyBtb2R1bGVzICovCj4+ICsjZGVmaW5lIEFJRV9USUxFX1RZ UEVfU0hJTU5PQ8KgwqBCSVQoMikKPj4gKwo+PiArLyoKPj4gKyAqIE1hY3JvcyBmb3IgYXR0cmli dXRlIHByb3BlcnR5IG9mIEFJIGVuZ2luZSByZWdpc3RlcnMgYWNjZXNzZWQgYnkga2VybmVsCj4+ ICsgKiAwIC0gNyBiaXRzOiB0aWxlIHR5cGUgYml0cwo+PiArICogOCAtIDE1IGJpdHM6IHBlcm1p c3Npb24gYml0cy4gSWYgaXQgaXMgMSwgaXQgYWxsb3dzIHdyaXRlIGZyb20gdXNlcnNwYWNlCj4+ ICsgKi8KPj4gKyNkZWZpbmUgQUlFX1JFR1NfQVRUUl9USUxFX1RZUEVfU0hJRlTCoMKgMFUKPj4g KyNkZWZpbmUgQUlFX1JFR1NfQVRUUl9QRVJNX1NISUZUwqDCoMKgwqDCoMKgwqA4VQo+PiArI2Rl ZmluZSBBSUVfUkVHU19BVFRSX1RJTEVfVFlQRV9NQVNLwqDCoMKgR0VOTUFTSyhBSUVfUkVHU19B VFRSX1BFUk1fU0hJRlQgLSAxLAo+PiBcCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgQUlFX1JFR1NfQVRUUl9USUxFX1RZUEVfU0hJRlQpCj4+ICsjZGVmaW5lIEFJRV9S RUdTX0FUVFJfUEVSTV9NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBHRU5NQVNL KDE1LCBcCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQUlFX1JFR1Nf QVRUUl9QRVJNX1NISUZUKQo+PiArCj4+ICsvKioKPj4gKyAqIHN0cnVjdCBhaWVfdGlsZV9yZWdz IC0gY29udGlndW91cyByYW5nZSBvZiBBSSBlbmdpbmUgcmVnaXN0ZXIKPj4gKyAqwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgd2l0aGluIGFuIEFJIGVuZ2luZSB0 aWxlCj4+ICsgKiBAc29mZjogc3RhcnQgb2Zmc2V0IG9mIHRoZSByYW5nZQo+PiArICogQGVvZmY6 IGVuZCBvZmZzZXQgb2YgdGhlIHJhbmdlCj4+ICsgKiBAYXR0cmlidXRlOiByZWdpc3RlcnMgYXR0 cmlidXRlLiBJdCB1c2VzIEFJRV9SRUdTX0FUVFJfKiBtYWNyb3MgZGVmaW5lZAo+PiArICrCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGFib3ZlLgo+PiArICovCj4+ICtzdHJ1Y3QgYWllX3RpbGVfcmVn cyB7Cj4+ICvCoMKgwqDCoMKgwqDCoHNpemVfdCBzb2ZmOwo+PiArwqDCoMKgwqDCoMKgwqBzaXpl X3QgZW9mZjsKPj4gK8KgwqDCoMKgwqDCoMKgdTMyIGF0dHJpYnV0ZTsKPj4gK307Cj4+ICsKPj4g K3N0cnVjdCBhaWVfZGV2aWNlOwo+PiArc3RydWN0IGFpZV9wYXJ0aXRpb247Cj4+ICsKPj4gKy8q Kgo+PiArICogc3RydWN0IGFpZV90aWxlX29wZXJhdGlvbnMgLSBBSSBlbmdpbmUgZGV2aWNlIG9w ZXJhdGlvbnMKPj4gKyAqIEBnZXRfdGlsZV90eXBlOiBnZXQgdHlwZSBvZiB0aWxlIGJhc2VkIG9u IHRpbGUgb3BlcmF0aW9uCj4+ICsgKgo+PiArICogRGlmZmVyZW50IEFJIGVuZ2luZSBkZXZpY2Ug dmVyc2lvbiBoYXMgaXRzIG93biBkZXZpY2UKPj4gKyAqIG9wZXJhdGlvbi4KPj4gKyAqLwo+PiAr c3RydWN0IGFpZV90aWxlX29wZXJhdGlvbnMgewo+PiArwqDCoMKgwqDCoMKgwqB1MzIgKCpnZXRf dGlsZV90eXBlKShzdHJ1Y3QgYWllX2xvY2F0aW9uICpsb2MpOwo+PiArfTsKPj4gKwo+PiArLyoq Cj4+ICsgKiBzdHJ1Y3QgYWllX3Jlc291cmNlIC0gQUkgZW5naW5lIHJlc291cmNlIHN0cnVjdHVy ZQo+PiArICogQGJpdG1hcDogcmVzb3VyY2UgYml0bWFwCj4+ICsgKiBAdG90YWw6IHRvdGFsIG51 bWJlciBvZiByZXNvdXJjZQo+PiArICovCj4+ICtzdHJ1Y3QgYWllX3Jlc291cmNlIHsKPj4gK8Kg wqDCoMKgwqDCoMKgdW5zaWduZWQgbG9uZyAqYml0bWFwOwo+PiArwqDCoMKgwqDCoMKgwqB1MzIg dG90YWw7Cj4+ICt9Owo+PiArCj4+ICsvKioKPj4gKyAqIHN0cnVjdCBhaWVfZGV2aWNlIC0gQUkg ZW5naW5lIGRldmljZSBzdHJ1Y3R1cmUKPj4gKyAqIEBwYXJ0aXRpb25zOiBsaXN0IG9mIHBhcnRp dGlvbnMgcmVxdWVzdGVkCj4+ICsgKiBAY2RldjogY2RldiBmb3IgdGhlIEFJIGVuZ2luZQo+PiAr ICogQGRldjogZGV2aWNlIGZvciB0aGUgQUkgZW5naW5lIGRldmljZQo+PiArICogQG1sb2NrOiBw cm90ZWN0aW9uIGZvciBBSSBlbmdpbmUgZGV2aWNlIG9wZXJhdGlvbnMKPj4gKyAqIEBiYXNlOiBB SSBlbmdpbmUgZGV2aWNlIGJhc2UgdmlydHVhbCBhZGRyZXNzCj4+ICsgKiBAcmVzOiBtZW1vcnkg cmVzb3VyY2Ugb2YgQUkgZW5naW5lIGRldmljZQo+PiArICogQGtlcm5lbF9yZWdzOiBhcnJheSBv ZiBrZXJuZWwgb25seSByZWdpc3RlcnMKPj4gKyAqIEBvcHM6IHRpbGUgb3BlcmF0aW9ucwo+PiAr ICogQHNpemU6IHNpemUgb2YgdGhlIEFJIGVuZ2luZSBhZGRyZXNzIHNwYWNlCj4+ICsgKiBAYXJy YXlfc2hpZnQ6IGFycmF5IGFkZHJlc3Mgc2hpZnQKPj4gKyAqIEBjb2xfc2hpZnQ6IGNvbHVtbiBh ZGRyZXNzIHNoaWZ0Cj4+ICsgKiBAcm93X3NoaWZ0OiByb3cgYWRkcmVzcyBzaGlmdAo+PiArICog QGNvbHNfcmVzOiBBSSBlbmdpbmUgY29sdW1ucyByZXNvdXJjZXMgdG8gaW5kaWNhdGUKPj4gKyAq wqDCoMKgwqDCoMKgwqDCoMKgwqAgd2hpbGUgY29sdW1ucyBhcmUgb2NjdXBpZWQgYnkgcGFydGl0 aW9ucy4KPj4gKyAqIEBudW1fa2VybmVsX3JlZ3M6IG51bWJlciBvZiBrZXJuZWwgb25seSByZWdp c3RlcnMgcmFuZ2UKPj4gKyAqIEB2ZXJzaW9uOiBBSSBlbmdpbmUgZGV2aWNlIHZlcnNpb24KPj4g KyAqLwo+PiArc3RydWN0IGFpZV9kZXZpY2Ugewo+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbGlz dF9oZWFkIHBhcnRpdGlvbnM7Cj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBjZGV2IGNkZXY7Cj4+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZpY2UgZGV2Owo+PiArwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgbXV0ZXggbWxvY2s7IC8qIHByb3RlY3Rpb24gZm9yIEFJIGVuZ2luZSBwYXJ0aXRpb25zICov Cj4+ICvCoMKgwqDCoMKgwqDCoHZvaWQgX19pb21lbSAqYmFzZTsKPj4gK8KgwqDCoMKgwqDCoMKg c3RydWN0IHJlc291cmNlICpyZXM7Cj4+ICvCoMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBhaWVf dGlsZV9yZWdzICprZXJuZWxfcmVnczsKPj4gK8KgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IGFp ZV90aWxlX29wZXJhdGlvbnMgKm9wczsKPj4gK8KgwqDCoMKgwqDCoMKgc2l6ZV90IHNpemU7Cj4+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfcmVzb3VyY2UgY29sc19yZXM7Cj4+ICvCoMKgwqDC oMKgwqDCoHUzMiBhcnJheV9zaGlmdDsKPj4gK8KgwqDCoMKgwqDCoMKgdTMyIGNvbF9zaGlmdDsK Pj4gK8KgwqDCoMKgwqDCoMKgdTMyIHJvd19zaGlmdDsKPj4gK8KgwqDCoMKgwqDCoMKgdTMyIG51 bV9rZXJuZWxfcmVnczsKPj4gK8KgwqDCoMKgwqDCoMKgaW50IHZlcnNpb247Cj4+ICt9Owo+PiAr Cj4+ICsvKioKPj4gKyAqIHN0cnVjdCBhaWVfcGFydGl0aW9uIC0gQUkgZW5naW5lIHBhcnRpdGlv biBzdHJ1Y3R1cmUKPj4gKyAqIEBub2RlOiBsaXN0IG5vZGUKPj4gKyAqIEBhZGV2OiBwb2ludGVy IHRvIEFJIGRldmljZSBpbnN0YW5jZQo+PiArICogQHJhbmdlOiByYW5nZSBvZiBwYXJ0aXRpb24K Pj4gKyAqIEBtbG9jazogcHJvdGVjdGlvbiBmb3IgQUkgZW5naW5lIHBhcnRpdGlvbiBvcGVyYXRp b25zCj4+ICsgKiBAZGV2OiBkZXZpY2UgZm9yIHRoZSBBSSBlbmdpbmUgcGFydGl0aW9uCj4+ICsg KiBAcGFydGl0aW9uX2lkOiBwYXJ0aXRpb24gaWQuIFBhcnRpdGlvbiBJRCBpcyB0aGUgaWRlbnRp Zmllcgo+PiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9mIHRoZSBBSSBlbmdpbmUg cGFydGl0aW9uIGluIHRoZSBzeXN0ZW0uCj4+ICsgKiBAc3RhdHVzOiBpbmRpY2F0ZSBpZiB0aGUg cGFydGl0aW9uIGlzIGluIHVzZQo+PiArICovCj4+ICtzdHJ1Y3QgYWllX3BhcnRpdGlvbiB7Cj4+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKPj4gK8KgwqDCoMKgwqDCoMKg c3RydWN0IGFpZV9kZXZpY2UgKmFkZXY7Cj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfcmFu Z2UgcmFuZ2U7Cj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBtdXRleCBtbG9jazsgLyogcHJvdGVj dGlvbiBmb3IgQUkgZW5naW5lIHBhcnRpdGlvbiBvcGVyYXRpb25zCj4+ICovCj4+ICvCoMKgwqDC oMKgwqDCoHN0cnVjdCBkZXZpY2UgZGV2Owo+PiArwqDCoMKgwqDCoMKgwqB1MzIgcGFydGl0aW9u X2lkOwo+PiArwqDCoMKgwqDCoMKgwqB1MzIgc3RhdHVzOwo+PiArfTsKPj4gKwo+PiArZXh0ZXJu IHN0cnVjdCBjbGFzcyAqYWllX2NsYXNzOwo+PiArZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29w ZXJhdGlvbnMgYWllX3BhcnRfZm9wczsKPj4gKwo+PiArI2RlZmluZSBjZGV2X3RvX2FpZWRldihp X2NkZXYpIGNvbnRhaW5lcl9vZigoaV9jZGV2KSwgc3RydWN0IGFpZV9kZXZpY2UsCj4+IGNkZXYp Cj4+ICsjZGVmaW5lIGRldl90b19haWVkZXYoX2RldikgY29udGFpbmVyX29mKChfZGV2KSwgc3Ry dWN0IGFpZV9kZXZpY2UsIGRldikKPj4gKyNkZWZpbmUgZGV2X3RvX2FpZXBhcnQoX2RldikgY29u dGFpbmVyX29mKChfZGV2KSwgc3RydWN0IGFpZV9wYXJ0aXRpb24sIGRldikKPj4gKwo+PiArI2Rl ZmluZSBhaWVfY29sX21hc2soYWRldikgKHsgXAo+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWll X2RldmljZSAqX2FkZXYgPSAoYWRldik7IFwKPj4gK8KgwqDCoMKgwqDCoMKgR0VOTUFTS19VTEwo X2FkZXYtPmFycmF5X3NoaWZ0IC0gMSwgX2FkZXYtPmNvbF9zaGlmdCk7wqAgXAo+PiArwqDCoMKg wqDCoMKgwqB9KQo+PiArCj4+ICsjZGVmaW5lIGFpZV9yb3dfbWFzayhhZGV2KSAoeyBcCj4+ICvC oMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfZGV2aWNlICpfYWRldiA9IChhZGV2KTsgXAo+PiArwqDC oMKgwqDCoMKgwqBHRU5NQVNLX1VMTChfYWRldi0+Y29sX3NoaWZ0IC0gMSwgX2FkZXYtPnJvd19z aGlmdCk7wqAgXAo+PiArwqDCoMKgwqDCoMKgwqB9KQo+PiArCj4+ICsjZGVmaW5lIGFpZV90aWxl X3JlZ19tYXNrKGFkZXYpICh7IFwKPj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9kZXZpY2Ug Kl9hZGV2ID0gKGFkZXYpOyBcCj4+ICvCoMKgwqDCoMKgwqDCoEdFTk1BU0tfVUxMKF9hZGV2LT5y b3dfc2hpZnQgLSAxLCAwKTvCoCBcCj4+ICvCoMKgwqDCoMKgwqDCoH0pCj4+ICsKPj4gKy8qCj4+ ICsgKiBOZWVkIHRvIGRlZmluZSBmaWVsZCBnZXQsIGFzIEFJIGVuZ2luZSBzaGlmdCBtYXNrIGlz IG5vdCBjb25zdGFudC4KPj4gKyAqIENhbm5vdCB1c2UgRklFTERfR0VUKCkKPj4gKyAqLwo+PiAr I2RlZmluZSBhaWVfdGlsZV9yZWdfZmllbGRfZ2V0KG1hc2ssIHNoaWZ0LCByZWdvZmYpICggXAo+ PiArwqDCoMKgwqDCoMKgwqAoKHJlZ29mZikgJiAobWFzaykpID4+IChzaGlmdCkpCj4+ICsKPj4g KyNkZWZpbmUgYWllX2NhbF90aWxlX3JlZyhhZGV2LCByZWdvZmYpICggXAo+PiArwqDCoMKgwqDC oMKgwqBhaWVfdGlsZV9yZWdfZmllbGRfZ2V0KGFpZV90aWxlX3JlZ19tYXNrKGFkZXYpLCAwLCBy ZWdvZmYpKQo+PiArCj4+ICsvKioKPj4gKyAqIGFpZV9jYWxfcmVnb2ZmKCkgLSBjYWxjdWxhdGUg cmVnaXN0ZXIgb2Zmc2V0IHRvIHRoZSB3aG9sZSBBSSBlbmdpbmUKPj4gKyAqwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldmljZSBzdGFydCBhZGRyZXNzCj4+ICsgKiBAYWRl djogQUkgZW5naW5lIGRldmljZQo+PiArICogQGxvYzogQUkgZW5naW5lIHRpbGUgbG9jYXRpb24K Pj4gKyAqIEByZWdvZmZfaW50aWxlOiByZWdpc3RlciBvZmZzZXQgd2l0aGluIGEgdGlsZQo+PiAr ICogQHJldHVybjogcmVnaXN0ZXIgb2Zmc2V0IHRvIHRoZSB3aG9sZSBBSSBlbmdpbmUgZGV2aWNl IHN0YXJ0IGFkZHJlc3MKPj4gKyAqLwo+PiArc3RhdGljIGlubGluZSB1MzIgYWllX2NhbF9yZWdv ZmYoc3RydWN0IGFpZV9kZXZpY2UgKmFkZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYWllX2xvY2F0aW9u IGxvYywgdTMyIHJlZ29mZl9pbnRpbGUpCj4+ICt7Cj4+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBy ZWdvZmZfaW50aWxlICsgKGxvYy5jb2wgPDwgYWRldi0+Y29sX3NoaWZ0KSArCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAobG9jLnJvdyA8PCBhZGV2LT5yb3dfc2hpZnQpOwo+PiArfQo+ PiArCj4+ICsvKioKPj4gKyAqIGFpZV92YWxpZGF0ZV9sb2NhdGlvbigpIC0gdmFsaWRhdGUgdGls ZSBsb2NhdGlvbiB3aXRoaW4gYW4gQUkgZW5naW5lCj4+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBhcnRpdGlvbgo+PiArICogQGFwYXJ0OiBB SSBlbmdpbmUgcGFydGl0aW9uCj4+ICsgKiBAbG9jOiBBSSBlbmdpbmUgdGlsZSBsb2NhdGlvbgo+ PiArICogQHJldHVybjogcmV0dXJuIDAgaWYgaXQgaXMgdmFsaWQsIG5lZ2F0aXZlIHZhbHVlIGZv ciBlcnJvcnMuCj4+ICsgKgo+PiArICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIEFJIGVu Z2luZSBsb2NhdGlvbiBpcyB3aXRoaW4gdGhlIEFJIGVuZ2luZQo+PiArICogcGFydGl0aW9uLgo+ PiArICovCj4+ICtzdGF0aWMgaW5saW5lIGludCBhaWVfdmFsaWRhdGVfbG9jYXRpb24oc3RydWN0 IGFpZV9wYXJ0aXRpb24gKmFwYXJ0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGFp ZV9sb2NhdGlvbiBsb2MpCj4+ICt7Cj4+ICvCoMKgwqDCoMKgwqDCoGlmIChsb2MuY29sIDwgYXBh cnQtPnJhbmdlLnN0YXJ0LmNvbCB8fAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgbG9jLmNvbCA+ PSBhcGFydC0+cmFuZ2Uuc3RhcnQuY29sICsgYXBhcnQtPnJhbmdlLnNpemUuY29sIHx8Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoCBsb2Mucm93IDwgYXBhcnQtPnJhbmdlLnN0YXJ0LnJvdyB8fAo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgbG9jLnJvdyA+PSBhcGFydC0+cmFuZ2Uuc3RhcnQucm93 ICsgYXBhcnQtPnJhbmdlLnNpemUucm93KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4+ICt9 Cj4+ICsKPj4gK2ludCBhaWVfcmVzb3VyY2VfaW5pdGlhbGl6ZShzdHJ1Y3QgYWllX3Jlc291cmNl ICpyZXMsIGludCBjb3VudCk7Cj4+ICt2b2lkIGFpZV9yZXNvdXJjZV91bmluaXRpYWxpemUoc3Ry dWN0IGFpZV9yZXNvdXJjZSAqcmVzKTsKPj4gK2ludCBhaWVfcmVzb3VyY2VfY2hlY2tfcmVnaW9u KHN0cnVjdCBhaWVfcmVzb3VyY2UgKnJlcywgdTMyIHN0YXJ0LAo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIGNvdW50KTsKPj4g K2ludCBhaWVfcmVzb3VyY2VfZ2V0X3JlZ2lvbihzdHJ1Y3QgYWllX3Jlc291cmNlICpyZXMsIHUz MiBzdGFydCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgdTMyIGNvdW50KTsKPj4gK3ZvaWQgYWllX3Jlc291cmNlX3B1dF9yZWdpb24oc3Ry dWN0IGFpZV9yZXNvdXJjZSAqcmVzLCBpbnQgc3RhcnQsIHUzMiBjb3VudCk7Cj4+ICsKPj4gK2Nv bnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmFpZV9wYXJ0X2dldF9mb3BzKHZvaWQpOwo+PiAr dTggYWllX3BhcnRfaW5fdXNlKHN0cnVjdCBhaWVfcGFydGl0aW9uICphcGFydCk7Cj4+ICtzdHJ1 Y3QgYWllX3BhcnRpdGlvbiAqYWllX2dldF9wYXJ0aXRpb25fZnJvbV9pZChzdHJ1Y3QgYWllX2Rl dmljZSAqYWRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1MzIg cGFydGl0aW9uX2lkKTsKPj4gK3N0cnVjdCBhaWVfcGFydGl0aW9uICphaWVfcmVxdWVzdF9wYXJ0 aXRpb24oc3RydWN0IGFpZV9kZXZpY2UgKmFkZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc3RydWN0IGFpZV9wYXJ0aXRpb25fcmVxICpyZXEpOwo+PiArc3RydWN0IGFpZV9wYXJ0 aXRpb24gKm9mX2FpZV9wYXJ0X3Byb2JlKHN0cnVjdCBhaWVfZGV2aWNlICphZGV2LAo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRldmljZV9ub2RlICpuYyk7Cj4+ICt2b2lkIGFpZV9w YXJ0X3JlbW92ZShzdHJ1Y3QgYWllX3BhcnRpdGlvbiAqYXBhcnQpOwo+PiArCj4+ICtpbnQgYWll X2RldmljZV9pbml0KHN0cnVjdCBhaWVfZGV2aWNlICphZGV2KTsKPj4gKyNlbmRpZiAvKiBBSUVf SU5URVJOQUxfSCAqLwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3hpbGlueC1haS1lbmdp bmUvYWktZW5naW5lLXBhcnQuYwo+PiBiL2RyaXZlcnMvbWlzYy94aWxpbngtYWktZW5naW5lL2Fp LWVuZ2luZS1wYXJ0LmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4u ZmM4ZjlmNQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvbWlzYy94aWxpbngtYWkt ZW5naW5lL2FpLWVuZ2luZS1wYXJ0LmMKPj4gQEAgLTAsMCArMSw0OTggQEAKPj4gKy8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4+ICsvKgo+PiArICogWGlsaW54IEFJIEVuZ2lu ZSBwYXJ0aXRpb24gZHJpdmVyCj4+ICsgKgo+PiArICogQ29weXJpZ2h0IChDKSAyMDIwIFhpbGlu eCwgSW5jLgo+PiArICovCj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+Cj4+ICsjaW5j bHVkZSA8bGludXgvZGVsYXkuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KPj4gKyNp bmNsdWRlIDxsaW51eC9mcy5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+PiArI2lu Y2x1ZGUgPGxpbnV4L2xpc3QuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9tbS5oPgo+PiArI2luY2x1 ZGUgPGxpbnV4L21tYW4uaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9tbXVfY29udGV4dC5oPgo+PiAr I2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPj4gKyNp bmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4+ ICsjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgo+ PiArI2luY2x1ZGUgPHVhcGkvbGludXgveGxueC1haS1lbmdpbmUuaD4KPj4gKwo+PiArI2luY2x1 ZGUgImFpLWVuZ2luZS1pbnRlcm5hbC5oIgo+PiArCj4+ICsvKioKPj4gKyAqIGFpZV9jYWxfbG9j KCkgLSBjYWxjdWxhdGUgdGlsZSBsb2NhdGlvbiBmcm9tIHJlZ2lzdGVyIG9mZnNldCB0byB0aGUg QUkKPj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVuZ2luZSBkZXZpY2UKPj4g KyAqIEBhZGV2OiBBSSBlbmdpbmUgZGV2aWNlCj4+ICsgKiBAbG9jOiBtZW1vcnkgcG9pbnRlciB0 byByZXN0b3JlIHJldHVybmluZyBsb2NhdGlvbiBpbmZvcm1hdGlvbgo+PiArICogQHJlZ29mZjog dGlsZSBpbnRlcm5hbCByZWdpc3RlciBvZmZzZXQKPj4gKyAqCj4+ICsgKiBUaGlzIGZ1bmN0aW9u IHJldHVybnMgdGhlIHRpbGUgbG9jYXRpb24uCj4+ICsgKi8KPj4gK3N0YXRpYyB2b2lkIGFpZV9j YWxfbG9jKHN0cnVjdCBhaWVfZGV2aWNlICphZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfbG9jYXRpb24gKmxvYywgdTY0IHJl Z29mZikKPj4gK3sKPj4gK8KgwqDCoMKgwqDCoMKgbG9jLT5jb2wgPSAodTMyKWFpZV90aWxlX3Jl Z19maWVsZF9nZXQoYWllX2NvbF9tYXNrKGFkZXYpLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGFkZXYtPmNvbF9zaGlmdCwgcmVnb2ZmKTsKPj4gK8KgwqDCoMKgwqDCoMKg bG9jLT5yb3cgPSAodTMyKWFpZV90aWxlX3JlZ19maWVsZF9nZXQoYWllX3Jvd19tYXNrKGFkZXYp LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFkZXYtPnJvd19zaGlmdCwg cmVnb2ZmKTsKPj4gK30KPj4gKwo+PiArLyoqCj4+ICsgKiBhaWVfcGFydF9yZWdfdmFsaWRhdGlv bigpIC0gdmFsaWRhdGUgQUkgZW5naW5lIHBhcnRpdGlvbiByZWdpc3RlciBhY2Nlc3MKPj4gKyAq IEBhcGFydDogQUkgZW5naW5lIHBhcnRpdGlvbgo+PiArICogQG9mZnNldDogQUkgZW5naW5lIHJl Z2lzdGVyIG9mZnNldAo+PiArICogQGxlbjogbGVuIG9mIGRhdGEgdG8gd3JpdGUvcmVhZAo+PiAr ICogQGlzX3dyaXRlOiBpcyB0aGUgYWNjZXNzIHRvIHdyaXRlIHRvIHJlZ2lzdGVyCj4+ICsgKiBA cmV0dXJuOiAwIGZvciBzdWNjZXNzLCBvciBuZWdhdGl2ZSB2YWx1ZSBmb3IgZmFpbHVyZS4KPj4g KyAqCj4+ICsgKiBUaGlzIGZ1bmN0aW9uIHZhbGlkYXRlIGlmIHRoZSByZWdpc3RlciB0byBhY2Nl c3MgaXMgd2l0aGluIHRoZSBBSSBlbmdpbmUKPj4gKyAqIHBhcnRpdGlvbi4gSWYgaXQgaXMgd3Jp dGUgYWNjZXNzLCBpZiB0aGUgcmVnaXN0ZXIgaXMgd3JpdGFibGUgYnkgdXNlci4KPj4gKyAqLwo+ PiArc3RhdGljIGludCBhaWVfcGFydF9yZWdfdmFsaWRhdGlvbihzdHJ1Y3QgYWllX3BhcnRpdGlv biAqYXBhcnQsIHNpemVfdAo+PiBvZmZzZXQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90IGxlbiwgdTgg aXNfd3JpdGUpCj4+ICt7Cj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfZGV2aWNlICphZGV2 Owo+PiArwqDCoMKgwqDCoMKgwqB1MzIgcmVnZW5kMzIsIHR0eXBlOwo+PiArwqDCoMKgwqDCoMKg wqB1NjQgcmVnb2ZmLCByZWdlbmQ2NDsKPj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9sb2Nh dGlvbiBsb2M7Cj4+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludCBpOwo+PiArCj4+ICvCoMKg wqDCoMKgwqDCoGFkZXYgPSBhcGFydC0+YWRldjsKPj4gK8KgwqDCoMKgwqDCoMKgaWYgKG9mZnNl dCAlIHNpemVvZih1MzIpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZf ZXJyKCZhcGFydC0+ZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCJJbnZhbGlkIHJlZyBvZmYoMHglengpLCBub3QgMzJiaXQgYWxpZ25lZC5cbiIs Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb2Zmc2V0 KTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOwo+PiAr wqDCoMKgwqDCoMKgwqB9Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgaWYgKGxlbiAlIHNpemVvZih1 MzIpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKCZhcGFydC0+ ZGV2LCAiSW52YWxpZCByZWcgb3BlcmF0aW9uIGxlbiAlenUuXG4iLCBsZW4pOwo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4+ICvCoMKgwqDCoMKgwqDC oH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqByZWdvZmYgPSBhaWVfY2FsX3RpbGVfcmVnKGFkZXYs IG9mZnNldCk7Cj4+ICvCoMKgwqDCoMKgwqDCoHJlZ2VuZDY0ID0gcmVnb2ZmICsgbGVuOwo+PiAr wqDCoMKgwqDCoMKgwqBpZiAocmVnZW5kNjQgPj0gQklUX1VMTChhZGV2LT5yb3dfc2hpZnQpKSB7 Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKCZhcGFydC0+ZGV2LAo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJJbnZhbGlk IHJlZyBvcGVyYXRpb24gbGVuICV6dS5cbiIsIGxlbik7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPj4gK8KgwqDCoMKgwqDCoMKgfQo+PiArCj4+ICvC oMKgwqDCoMKgwqDCoGFpZV9jYWxfbG9jKGFkZXYsICZsb2MsIG9mZnNldCk7Cj4+ICvCoMKgwqDC oMKgwqDCoGlmIChhaWVfdmFsaWRhdGVfbG9jYXRpb24oYXBhcnQsIGxvYykpIHsKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoJmFwYXJ0LT5kZXYsCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIkludmFsaWQgKCVkLCVkKSBv dXQgb2YgcGFydCglZCwlZCksKCVkLCVkKVxuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsb2MuY29sLCBsb2Mucm93LAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGFwYXJ0LT5yYW5nZS5zdGFydC5jb2ws IGFwYXJ0LT5yYW5nZS5zdGFydC5yb3csCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgYXBhcnQtPnJhbmdlLnNpemUuY29sLCBhcGFydC0+cmFuZ2Uuc2l6 ZS5yb3cpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7 Cj4+ICvCoMKgwqDCoMKgwqDCoH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqBpZiAoIWlzX3dyaXRl KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4+ICsKPj4gK8Kg wqDCoMKgwqDCoMKgcmVnZW5kMzIgPSBsb3dlcl8zMl9iaXRzKHJlZ2VuZDY0KTsKPj4gK8KgwqDC oMKgwqDCoMKgdHR5cGUgPSBhZGV2LT5vcHMtPmdldF90aWxlX3R5cGUoJmxvYyk7Cj4+ICvCoMKg wqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBhZGV2LT5udW1fa2VybmVsX3JlZ3M7IGkrKykgewo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IGFpZV90aWxlX3Jl Z3MgKnJlZ3M7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1MzIgcnR0eXBlLCB3 cml0YWJsZTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVncyA9ICZh ZGV2LT5rZXJuZWxfcmVnc1tpXTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJ0 dHlwZSA9IChyZWdzLT5hdHRyaWJ1dGUgJiBBSUVfUkVHU19BVFRSX1RJTEVfVFlQRV9NQVNLKSA+ Pgo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBSUVf UkVHU19BVFRSX1RJTEVfVFlQRV9TSElGVDsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHdyaXRhYmxlID0gKHJlZ3MtPmF0dHJpYnV0ZSAmIEFJRV9SRUdTX0FUVFJfUEVSTV9NQVNL KSA+Pgo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgQUlFX1JFR1NfQVRUUl9QRVJNX1NISUZUOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaWYgKCEodHR5cGUgJiBydHR5cGUpKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnRpbnVlOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgaWYgKChyZWdvZmYgPj0gcmVncy0+c29mZiAmJiByZWdvZmYgPD0gcmVncy0+ZW9m ZikgfHwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAocmVnZW5kMzIg Pj0gcmVncy0+c29mZiAmJiByZWdlbmQzMiA8PSByZWdzLT5lb2ZmKSkgewo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghd3JpdGFibGUpIHsKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZGV2X2VycigmYXBhcnQtPmRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJyZWcg MHglengsMHglenggbm90IHdyaXRhYmxlLlxuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG9m ZnNldCwgbGVuKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgfQo+PiArwqDCoMKgwqDCoMKgwqB9Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgcmV0 dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiArICogYWllX3BhcnRfd3JpdGVfcmVnaXN0ZXIo KSAtIEFJIGVuZ2luZSBwYXJ0aXRpb24gd3JpdGUgcmVnaXN0ZXIKPj4gKyAqIEBhcGFydDogQUkg ZW5naW5lIHBhcnRpdGlvbgo+PiArICogQG9mZnNldDogQUkgZW5naW5lIHJlZ2lzdGVyIG9mZnNl dAo+PiArICogQGxlbjogbGVuIG9mIGRhdGEgdG8gd3JpdGUKPj4gKyAqIEBkYXRhOiBkYXRhIHRv IHdyaXRlCj4+ICsgKiBAbWFzazogbWFzaywgaWYgaXQgaXMgbm9uIDAsIGl0IGlzIG1hc2sgd3Jp dGUuCj4+ICsgKiBAcmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgd3JpdGUgZm9yIHN1Y2Nlc3MsIG9y IG5lZ2F0aXZlIHZhbHVlIGZvciBmYWlsdXJlLgo+PiArICoKPj4gKyAqIFRoaXMgZnVuY3Rpb24g d3JpdGVzIGRhdGEgdG8gdGhlIHNwZWNpZmllZCByZWdpc3RlcnMuCj4+ICsgKiBJZiB0aGUgbWFz ayBpcyBub24gMCwgaXQgaXMgbWFzayB3cml0ZS4KPj4gKyAqLwo+PiArc3RhdGljIGludCBhaWVf cGFydF93cml0ZV9yZWdpc3RlcihzdHJ1Y3QgYWllX3BhcnRpdGlvbiAqYXBhcnQsIHNpemVfdAo+ PiBvZmZzZXQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90IGxlbiwgdm9pZCAqZGF0YSwgdTMyIG1hc2sp Cj4+ICt7Cj4+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4+ICvCoMKgwqDCoMKgwqDCoHZvaWQg X19pb21lbSAqdmE7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgaWYgKG1hc2sgJiYgbGVuID4gc2l6 ZW9mKHUzMikpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIEZvciBtYXNr IHdyaXRlLCBvbmx5IGFsbG93IDMyYml0LiAqLwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZGV2X2VycigmYXBhcnQtPmRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAiZmFpbGVkIG1hc2sgd3JpdGUsIGxlbiBpcyBtb3JlIHRoYXQg MzJiaXQuXG4iKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlO VkFMOwo+PiArwqDCoMKgwqDCoMKgwqB9Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgLyogb2Zmc2V0 IGlzIGV4cGVjdGVkIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgcGFydGl0aW9u ICovCj4+ICvCoMKgwqDCoMKgwqDCoG9mZnNldCArPSBhaWVfY2FsX3JlZ29mZihhcGFydC0+YWRl diwgYXBhcnQtPnJhbmdlLnN0YXJ0LCAwKTsKPj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gYWllX3Bh cnRfcmVnX3ZhbGlkYXRpb24oYXBhcnQsIG9mZnNldCwgbGVuLCAxKTsKPj4gK8KgwqDCoMKgwqDC oMKgaWYgKHJldCA8IDApIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9l cnIoJmFwYXJ0LT5kZXYsICJmYWlsZWQgdG8gd3JpdGUgdG8gMHglengsMHglenguXG4iLAo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG9mZnNldCwgbGVu KTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4+ICvCoMKg wqDCoMKgwqDCoH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqB2YSA9IGFwYXJ0LT5hZGV2LT5iYXNl ICsgb2Zmc2V0Owo+PiArwqDCoMKgwqDCoMKgwqBpZiAoIW1hc2spIHsKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGlmIChsZW4gPT0gc2l6ZW9mKHUzMikpCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW93cml0ZTMyKCooKHUzMiAqKWRh dGEpLMKgIHZhKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVsc2UKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtZW1jcHlfdG9pbyh2 YSwgZGF0YSwgbGVuKTsKPj4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlIHsKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHUzMiB2YWwgPSBpb3JlYWQzMih2YSk7Cj4+ICsKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhbCAmPSB+bWFzazsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHZhbCB8PSAqKCh1MzIgKilkYXRhKSAmIG1hc2s7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpb3dyaXRlMzIodmFsLCB2YSk7Cj4+ICvCoMKgwqDCoMKg wqDCoH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gKGludClsZW47Cj4+ICt9Cj4+ICsK Pj4gKy8qKgo+PiArICogYWllX3BhcnRfYWNjZXNzX3JlZ3MoKSAtIEFJIGVuZ2luZSBwYXJ0aXRp b24gcmVnaXN0ZXJzIGFjY2Vzcwo+PiArICogQGFwYXJ0OiBBSSBlbmdpbmUgcGFydGl0aW9uCj4+ ICsgKiBAbnVtX3JlcXM6IG51bWJlciBvZiBhY2Nlc3MgcmVxdWVzdHMKPj4gKyAqIEByZXFzOiBh cnJheSBvZiByZWdpc3RlcnMgYWNjZXNzCj4+ICsgKiBAcmV0dXJuOiAwIGZvciBzdWNjZXNzLCBh bmQgbmVnYXRpdmUgdmFsdWUgZm9yIGZhaWx1cmUuCj4+ICsgKgo+PiArICogVGhpcyBmdW5jdGlv biBleGVjdXRlcyBBSSBlbmdpbmUgcGFydGl0aW9uIHJlZ2lzdGVyIGFjY2VzcyByZXF1ZXN0cy4K Pj4gKyAqLwo+PiArc3RhdGljIGludCBhaWVfcGFydF9hY2Nlc3NfcmVncyhzdHJ1Y3QgYWllX3Bh cnRpdGlvbiAqYXBhcnQsIHUzMiBudW1fcmVxcywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9yZWdfYXJn cyAqcmVxcykKPj4gK3sKPj4gK8KgwqDCoMKgwqDCoMKgdTMyIGk7Cj4+ICsKPj4gK8KgwqDCoMKg wqDCoMKgZm9yIChpID0gMDsgaSA8IG51bV9yZXFzOyBpKyspIHsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfcmVnX2FyZ3MgKmFyZ3MgPSAmcmVxc1tpXTsKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4+ICsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChhcmdzLT5vcCAhPSBBSUVfUkVHX1dSSVRFKSB7Cj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2Vycigm YXBhcnQtPmRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIkludmFsaWQgcmVnaXN0ZXIgY29tbWFuZCB0eXBlOiAldS5c biIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGFyZ3MtPm9wKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoH0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IGFpZV9w YXJ0X3dyaXRlX3JlZ2lzdGVyKGFwYXJ0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAoc2l6ZV90KWFyZ3MtPm9mZnNldCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc2l6ZW9mKGFyZ3MtPnZhbCksCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICZhcmdzLT52YWwsIGFyZ3MtPm1hc2spOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaWYgKHJldCA8IDApIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBkZXZfZXJyKCZhcGFydC0+ZGV2LCAicmVnIG9wICV1IGZhaWxlZDogMHgl bGx4LlxuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgYXJncy0+b3AsIGFyZ3MtPm9mZnNldCk7Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPj4gK8KgwqDCoMKgwqDCoMKgfQo+PiArCj4+ICvC oMKgwqDCoMKgwqDCoHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGFpZV9wYXJ0 X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCj4+ICt7Cj4+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfcGFydGl0aW9uICphcGFydCA9IGZpbHAtPnByaXZh dGVfZGF0YTsKPj4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPj4gKwo+PiArwqDCoMKgwqDCoMKg wqAvKgo+PiArwqDCoMKgwqDCoMKgwqAgKiBUT0RPOiBJdCB3aWxsIG5lZWQgdG8gcmVzZXQgdGhl IFNISU0gY29sdW1ucyBhbmQgZ2F0ZSB0aGUKPj4gK8KgwqDCoMKgwqDCoMKgICogdGlsZXMgb2Yg dGhlIHBhcnRpdGlvbi4KPj4gK8KgwqDCoMKgwqDCoMKgICovCj4+ICvCoMKgwqDCoMKgwqDCoHJl dCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYXBhcnQtPm1sb2NrKTsKPj4gK8KgwqDCoMKg wqDCoMKgaWYgKHJldCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBy ZXQ7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgYXBhcnQtPnN0YXR1cyA9IDA7Cj4+ICvCoMKgwqDC oMKgwqDCoG11dGV4X3VubG9jaygmYXBhcnQtPm1sb2NrKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKg wqByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRp b25zX3N0cnVjdCBhaWVfcGFydF9waHlzaWNhbF92bV9vcHMgPSB7Cj4+ICsjaWZkZWYgQ09ORklH X0hBVkVfSU9SRU1BUF9QUk9UCj4+ICvCoMKgwqDCoMKgwqDCoC5hY2Nlc3MgPSBnZW5lcmljX2Fj Y2Vzc19waHlzLAo+PiArI2VuZGlmCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgaW50IGFpZV9wYXJ0 X21tYXAoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPj4gK3sK Pj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9wYXJ0aXRpb24gKmFwYXJ0ID0gZnAtPnByaXZh dGVfZGF0YTsKPj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9kZXZpY2UgKmFkZXYgPSBhcGFy dC0+YWRldjsKPj4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgbG9uZyBvZmZzZXQgPSB2bWEtPnZt X3Bnb2ZmICogUEFHRV9TSVpFOwo+PiArwqDCoMKgwqDCoMKgwqBwaHlzX2FkZHJfdCBhZGRyOwo+ PiArwqDCoMKgwqDCoMKgwqBzaXplX3Qgc2l6ZTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqBpZiAo dm1hLT52bV9lbmQgPCB2bWEtPnZtX3N0YXJ0KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4+ICvCoMKgwqDCoMKgwqDCoC8qIE9ubHkgYWxsb3cgdXNl cnNwYWNlIGRpcmVjdGx5IHJlYWQgcmVnaXN0ZXJzICovCj4+ICvCoMKgwqDCoMKgwqDCoGlmICh2 bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGRldl9lcnIoJmFwYXJ0LT5kZXYsICIlczogZG8gbm90IHN1cHBvcnQgd3JpdGFibGUgbW1h cC5cbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg X19mdW5jX18pOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5W QUw7Cj4+ICvCoMKgwqDCoMKgwqDCoH0KPj4gK8KgwqDCoMKgwqDCoMKgdm1hLT52bV9wcml2YXRl X2RhdGEgPSBhcGFydDsKPj4gK8KgwqDCoMKgwqDCoMKgdm1hLT52bV9vcHMgPSAmYWllX3BhcnRf cGh5c2ljYWxfdm1fb3BzOwo+PiArwqDCoMKgwqDCoMKgwqBzaXplID0gYXBhcnQtPnJhbmdlLnNp emUuY29sIDw8IGFkZXYtPmNvbF9zaGlmdDsKPj4gK8KgwqDCoMKgwqDCoMKgaWYgKCh2bWEtPnZt X2VuZCAtIHZtYS0+dm1fc3RhcnQpID4gKHNpemUgLSBvZmZzZXQpKSB7Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKCZhcGFydC0+ZGV2LAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCIlczogc2l6ZSBleGNlZWQuXG4iLCBf X2Z1bmNfXyk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZB TDsKPj4gK8KgwqDCoMKgwqDCoMKgfQo+PiArwqDCoMKgwqDCoMKgwqB2bWEtPnZtX3BhZ2VfcHJv dCA9IHBncHJvdF9ub25jYWNoZWQodm1hLT52bV9wYWdlX3Byb3QpOwo+PiArwqDCoMKgwqDCoMKg wqAvKiBDYWxjdWxhdGUgdGhlIHBhcnRpdGlvbiBhZGRyZXNzICovCj4+ICvCoMKgwqDCoMKgwqDC oGFkZHIgPSBhZGV2LT5yZXMtPnN0YXJ0Owo+PiArwqDCoMKgwqDCoMKgwqBhZGRyICs9IGFwYXJ0 LT5yYW5nZS5zdGFydC5jb2wgPDwgYWRldi0+Y29sX3NoaWZ0Owo+PiArwqDCoMKgwqDCoMKgwqBh ZGRyICs9IGFwYXJ0LT5yYW5nZS5zdGFydC5yb3cgPDwgYWRldi0+cm93X3NoaWZ0Owo+PiArwqDC oMKgwqDCoMKgwqBhZGRyICs9IG9mZnNldDsKPj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJlbWFw X3Bmbl9yYW5nZSh2bWEsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZtYS0+dm1fc3RhcnQsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFkZHIgPj4gUEFHRV9T SElGVCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2bWEtPnZtX3Bh Z2VfcHJvdCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBsb25nIGFpZV9wYXJ0X2lvY3RsKHN0cnVj dCBmaWxlICpmcCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZwo+PiBhcmcpCj4+ICt7 Cj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfcGFydGl0aW9uICphcGFydCA9IGZwLT5wcml2 YXRlX2RhdGE7Cj4+ICvCoMKgwqDCoMKgwqDCoHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191 c2VyICopYXJnOwo+PiArwqDCoMKgwqDCoMKgwqBsb25nIHJldDsKPj4gKwo+PiArwqDCoMKgwqDC oMKgwqBzd2l0Y2ggKGNtZCkgewo+PiArwqDCoMKgwqDCoMKgwqBjYXNlIEFJRV9SRUdfSU9DVEw6 Cj4+ICvCoMKgwqDCoMKgwqDCoHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0 cnVjdCBhaWVfcmVnX2FyZ3MgcmFjY2VzczsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgaWYgKGNvcHlfZnJvbV91c2VyKCZyYWNjZXNzLCBhcmdwLCBzaXplb2YocmFjY2Vz cykpKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dHVybiAtRUZBVUxUOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQg PSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmFwYXJ0LT5tbG9jayk7Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldCA9IGFpZV9wYXJ0X2FjY2Vzc19yZWdzKGFwYXJ0LCAxLCAmcmFj Y2Vzcyk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtdXRleF91bmxvY2soJmFw YXJ0LT5tbG9jayk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPj4g K8KgwqDCoMKgwqDCoMKgfQo+PiArwqDCoMKgwqDCoMKgwqBkZWZhdWx0Ogo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycigmYXBhcnQtPmRldiwgIkludmFsaWQgaW9jdGwg Y29tbWFuZCAldS5cbiIsIGNtZCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXQgPSAtRUlOVkFMOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4+ ICvCoMKgwqDCoMKgwqDCoH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+PiAr fQo+PiArCj4+ICtjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFpZV9wYXJ0X2ZvcHMgPSB7 Cj4+ICvCoMKgwqDCoMKgwqDCoC5vd25lcsKgwqDCoMKgwqDCoMKgwqDCoMKgPSBUSElTX01PRFVM RSwKPj4gK8KgwqDCoMKgwqDCoMKgLnJlbGVhc2XCoMKgwqDCoMKgwqDCoMKgPSBhaWVfcGFydF9y ZWxlYXNlLAo+PiArwqDCoMKgwqDCoMKgwqAubW1hcMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9IGFp ZV9wYXJ0X21tYXAsCj4+ICvCoMKgwqDCoMKgwqDCoC51bmxvY2tlZF9pb2N0bMKgPSBhaWVfcGFy dF9pb2N0bCwKPj4gK307Cj4+ICsKPj4gKy8qKgo+PiArICogYWllX3BhcnRfcmVsZWFzZV9kZXZp Y2UoKSAtIHJlbGVhc2UgYW4gQUkgZW5naW5lIHBhcnRpdGlvbiBpbnN0YW5jZQo+PiArICogQGRl djogQUkgZW5naW5lIHBhcnRpdGlvbiBkZXZpY2UKPj4gKyAqCj4+ICsgKiBJdCB3aWxsIGJlIGNh bGxlZCBieSBkZXZpY2UgZHJpdmVyIGNvcmUgd2hlbiBubyBvbmUgaG9sZHMgYSB2YWxpZAo+PiAr ICogcG9pbnRlciB0byBAZGV2IGFueW1vcmUuCj4+ICsgKi8KPj4gK3N0YXRpYyB2b2lkIGFpZV9w YXJ0X3JlbGVhc2VfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKPj4gK3sKPj4gK8KgwqDCoMKg wqDCoMKgc3RydWN0IGFpZV9wYXJ0aXRpb24gKmFwYXJ0ID0gZGV2X3RvX2FpZXBhcnQoZGV2KTsK Pj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9kZXZpY2UgKmFkZXYgPSBhcGFydC0+YWRldjsK Pj4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqByZXQgPSBt dXRleF9sb2NrX2ludGVycnVwdGlibGUoJmFkZXYtPm1sb2NrKTsKPj4gK8KgwqDCoMKgwqDCoMKg aWYgKHJldCkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X3dhcm4oJmFw YXJ0LT5kZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICJnZXR0aW5nIGFkZXYtPm1sb2NrIGlzIGludGVycnVwdGVkIGJ5IHNpZ25hbFxuIik7Cj4+ ICvCoMKgwqDCoMKgwqDCoH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqBhaWVfcmVzb3VyY2VfcHV0 X3JlZ2lvbigmYWRldi0+Y29sc19yZXMsIGFwYXJ0LT5yYW5nZS5zdGFydC5jb2wsCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGFwYXJ0LT5yYW5nZS5zaXplLmNvbCk7Cj4+ICvCoMKgwqDCoMKgwqDCoGxpc3RfZGVsKCZhcGFy dC0+bm9kZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoG11dGV4X3VubG9jaygmYWRldi0+bWxvY2spOwo+ PiArwqDCoMKgwqDCoMKgwqBwdXRfZGV2aWNlKGFwYXJ0LT5kZXYucGFyZW50KTsKPj4gK30KPj4g Kwo+PiArLyoqCj4+ICsgKiBhaWVfY3JlYXRlX3BhcnRpdGlvbigpIC0gY3JlYXRlIEFJIGVuZ2lu ZSBwYXJ0aXRpb24gaW5zdGFuY2UKPj4gKyAqIEBhZGV2OiBBSSBlbmdpbmUgZGV2aWNlCj4+ICsg KiBAcmFuZ2U6IEFJIGVuZ2luZSBwYXJ0aXRpb24gcmFuZ2UgdG8gY2hlY2suIEEgcmFuZ2UgZGVz Y3JpYmVzIGEgZ3JvdXAKPj4gKyAqwqDCoMKgwqDCoMKgwqAgb2YgQUkgZW5naW5lIHRpbGVzLgo+ PiArICogQHJldHVybjogY3JlYXRlZCBBSSBlbmdpbmUgcGFydGl0aW9uIHBvaW50ZXIgZm9yIHN1 Y2Nlc3MsIGFuZCBQVFJfRVJSCj4+ICsgKsKgwqDCoMKgwqDCoMKgwqAgZm9yIGZhaWx1cmUuCj4+ ICsgKgo+PiArICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGFuIEFJIGVuZ2luZSBwYXJ0aXRpb24g aW5zdGFuY2UuCj4+ICsgKiBJdCBjcmVhdGVzIEFJIGVuZ2luZSBwYXJ0aXRpb24sIHRoZSBBSSBl bmdpbmUgcGFydGl0aW9uIGRldmljZSBhbmQKPj4gKyAqIHRoZSBBSSBlbmdpbmUgcGFydGl0aW9u IGNoYXJhY3RlciBkZXZpY2UuCj4+ICsgKi8KPj4gK3N0YXRpYyBzdHJ1Y3QgYWllX3BhcnRpdGlv biAqYWllX2NyZWF0ZV9wYXJ0aXRpb24oc3RydWN0IGFpZV9kZXZpY2UgKmFkZXYsCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGFpZV9yYW5nZSAqcmFu Z2UpCj4+ICt7Cj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfcGFydGl0aW9uICphcGFydDsK Pj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRldmljZSAqZGV2Owo+PiArwqDCoMKgwqDCoMKgwqBj aGFyIGRldm5hbWVbMzJdOwo+PiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+PiArCj4+ICvCoMKg wqDCoMKgwqDCoHJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYWRldi0+bWxvY2spOwo+ PiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuIEVSUl9QVFIocmV0KTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqByZXQgPSBhaWVf cmVzb3VyY2VfY2hlY2tfcmVnaW9uKCZhZGV2LT5jb2xzX3JlcywgcmFuZ2UtPnN0YXJ0LmNvbCwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJhbmdlLT5zaXplLmNvbCk7Cj4+ICvCoMKgwqDCoMKg wqDCoGlmIChyZXQgIT0gcmFuZ2UtPnN0YXJ0LmNvbCkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZGV2X2VycigmYWRldi0+ZGV2LCAiaW52YWxpZCBwYXJ0aXRpb24gKCV1LCV1 KSgldSwldSkuXG4iLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJhbmdlLT5zdGFydC5jb2wsIHJhbmdlLT5zdGFydC5yb3csCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmFuZ2UtPnNpemUuY29sLCByYW5n ZS0+c2l6ZS5yb3cpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbXV0ZXhfdW5s b2NrKCZhZGV2LT5tbG9jayk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gRVJSX1BUUigtRUlOVkFMKTsKPj4gK8KgwqDCoMKgwqDCoMKgfQo+PiArwqDCoMKgwqDCoMKg wqByZXQgPSBhaWVfcmVzb3VyY2VfZ2V0X3JlZ2lvbigmYWRldi0+Y29sc19yZXMsIHJhbmdlLT5z dGFydC5jb2wsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmFuZ2UtPnNpemUuY29sKTsKPj4gK8KgwqDC oMKgwqDCoMKgaWYgKHJldCAhPSByYW5nZS0+c3RhcnQuY29sKSB7Cj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKCZhZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IHBhcnRp dGlvbgo+PiAoJXUsJXUpKCV1LCV1KS5cbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmFuZ2UtPnN0YXJ0LmNvbCwgcmFuZ2UtPnN0YXJ0LnJvdywK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByYW5nZS0+ c2l6ZS5jb2wsIHJhbmdlLT5zaXplLnJvdyk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBtdXRleF91bmxvY2soJmFkZXYtPm1sb2NrKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldHVybiBFUlJfUFRSKC1FRkFVTFQpOwo+PiArwqDCoMKgwqDCoMKgwqB9Cj4+ ICvCoMKgwqDCoMKgwqDCoG11dGV4X3VubG9jaygmYWRldi0+bWxvY2spOwo+PiArCj4+ICvCoMKg wqDCoMKgwqDCoGFwYXJ0ID0gZGV2bV9remFsbG9jKCZhZGV2LT5kZXYsIHNpemVvZigqYXBhcnQp LCBHRlBfS0VSTkVMKTsKPj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFhcGFydCkKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+PiArCj4+ICvC oMKgwqDCoMKgwqDCoGFwYXJ0LT5hZGV2ID0gYWRldjsKPj4gK8KgwqDCoMKgwqDCoMKgbWVtY3B5 KCZhcGFydC0+cmFuZ2UsIHJhbmdlLCBzaXplb2YoKnJhbmdlKSk7Cj4+ICvCoMKgwqDCoMKgwqDC oG11dGV4X2luaXQoJmFwYXJ0LT5tbG9jayk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgLyogQ3Jl YXRlIEFJIGVuZ2luZSBwYXJ0aXRpb24gZGV2aWNlICovCj4+ICvCoMKgwqDCoMKgwqDCoGRldiA9 ICZhcGFydC0+ZGV2Owo+PiArwqDCoMKgwqDCoMKgwqBkZXZpY2VfaW5pdGlhbGl6ZShkZXYpOwo+ PiArwqDCoMKgwqDCoMKgwqBkZXYtPnBhcmVudCA9ICZhZGV2LT5kZXY7Cj4+ICvCoMKgwqDCoMKg wqDCoGRldi0+Y2xhc3MgPSBhaWVfY2xhc3M7Cj4+ICvCoMKgwqDCoMKgwqDCoGRldl9zZXRfZHJ2 ZGF0YShkZXYsIGFwYXJ0KTsKPj4gK8KgwqDCoMKgwqDCoMKgc25wcmludGYoZGV2bmFtZSwgc2l6 ZW9mKGRldm5hbWUpIC0gMSwgImFpZXBhcnRfJWRfJWQiLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGFwYXJ0LT5yYW5nZS5zdGFydC5jb2wsIGFwYXJ0LT5yYW5nZS5zaXplLmNv bCk7Cj4+ICvCoMKgwqDCoMKgwqDCoGRldl9zZXRfbmFtZShkZXYsIGRldm5hbWUpOwo+PiArwqDC oMKgwqDCoMKgwqAvKiBXZSBjYW4gbm93IHJlbHkgb24gdGhlIHJlbGVhc2UgZnVuY3Rpb24gZm9y IGNsZWFudXAgKi8KPj4gK8KgwqDCoMKgwqDCoMKgZGV2LT5yZWxlYXNlID0gYWllX3BhcnRfcmVs ZWFzZV9kZXZpY2U7Cj4+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGRldmljZV9hZGQoZGV2KTsKPj4g K8KgwqDCoMKgwqDCoMKgaWYgKHJldCkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZGV2X2VycihkZXYsICJkZXZpY2VfYWRkIGZhaWxlZDogJWRcbiIsIHJldCk7Cj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwdXRfZGV2aWNlKGRldik7Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gRVJSX1BUUihyZXQpOwo+PiArwqDCoMKgwqDCoMKg wqB9Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxl KCZhZGV2LT5tbG9jayk7Cj4+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpIHsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHB1dF9kZXZpY2UoZGV2KTsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiBFUlJfUFRSKHJldCk7Cj4+ICvCoMKgwqDCoMKgwqDCoH0K Pj4gKwo+PiArwqDCoMKgwqDCoMKgwqBsaXN0X2FkZF90YWlsKCZhcGFydC0+bm9kZSwgJmFkZXYt PnBhcnRpdGlvbnMpOwo+PiArwqDCoMKgwqDCoMKgwqBtdXRleF91bmxvY2soJmFkZXYtPm1sb2Nr KTsKPj4gK8KgwqDCoMKgwqDCoMKgZ2V0X2RldmljZSgmYWRldi0+ZGV2KTsKPj4gK8KgwqDCoMKg wqDCoMKgZGV2X2RiZyhkZXYsICJjcmVhdGVkIEFJRSBwYXJ0aXRpb24gZGV2aWNlLlxuIik7Cj4+ ICsKPj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIGFwYXJ0Owo+PiArfQo+PiArCj4+ICtzdHJ1Y3Qg YWllX3BhcnRpdGlvbiAqCj4+ICtvZl9haWVfcGFydF9wcm9iZShzdHJ1Y3QgYWllX2RldmljZSAq YWRldiwgc3RydWN0IGRldmljZV9ub2RlICpuYykKPj4gK3sKPj4gK8KgwqDCoMKgwqDCoMKgc3Ry dWN0IGFpZV9wYXJ0aXRpb24gKmFwYXJ0Owo+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWllX3Jh bmdlIHJhbmdlOwo+PiArwqDCoMKgwqDCoMKgwqB1MzIgcGFydGl0aW9uX2lkLCByZWdzWzRdOwo+ PiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoC8qIFNlbGVj dCBkZXZpY2UgZHJpdmVyICovCj4+ICvCoMKgwqDCoMKgwqDCoHJldCA9IG9mX3Byb3BlcnR5X3Jl YWRfdTMyX2FycmF5KG5jLCAicmVnIiwgcmVncywgQVJSQVlfU0laRShyZWdzKSk7Cj4+ICvCoMKg wqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBkZXZfZXJyKCZhZGV2LT5kZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgInByb2JlICVwT0YgZmFpbGVkLCBubyB0aWxlcyByYW5nZSBpbmZvcm1h dGlvbi5cbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgbmMpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIEVSUl9QVFIo cmV0KTsKPj4gK8KgwqDCoMKgwqDCoMKgfQo+PiArwqDCoMKgwqDCoMKgwqByYW5nZS5zdGFydC5j b2wgPSByZWdzWzBdOwo+PiArwqDCoMKgwqDCoMKgwqByYW5nZS5zdGFydC5yb3cgPSByZWdzWzFd Owo+PiArwqDCoMKgwqDCoMKgwqByYW5nZS5zaXplLmNvbCA9IHJlZ3NbMl07Cj4+ICvCoMKgwqDC oMKgwqDCoHJhbmdlLnNpemUucm93ID0gcmVnc1szXTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqBy ZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChuYywgInhsbngscGFydGl0aW9uLWlkIiwg MCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmcGFydGl0aW9uX2lkKTsKPj4gK8KgwqDCoMKg wqDCoMKgaWYgKHJldCA8IDApIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRl dl9lcnIoJmFkZXYtPmRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAicHJvYmUgJXBPRiBmYWlsZWQsIG5vIHBhcnRpdGlvbiBpZC5cbiIsIG5jKTsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBFUlJfUFRSKHJldCk7Cj4+ ICvCoMKgwqDCoMKgwqDCoH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqByZXQgPSBtdXRleF9sb2Nr X2ludGVycnVwdGlibGUoJmFkZXYtPm1sb2NrKTsKPj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBFUlJfUFRSKHJldCk7Cj4+ ICsKPj4gK8KgwqDCoMKgwqDCoMKgYXBhcnQgPSBhaWVfZ2V0X3BhcnRpdGlvbl9mcm9tX2lkKGFk ZXYsIHBhcnRpdGlvbl9pZCk7Cj4+ICvCoMKgwqDCoMKgwqDCoG11dGV4X3VubG9jaygmYWRldi0+ bWxvY2spOwo+PiArwqDCoMKgwqDCoMKgwqBpZiAoYXBhcnQpIHsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoJmFkZXYtPmRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAicHJvYmUgZmFpbGVkOiBwYXJ0aXRpb24gJXUg ZXhpc3RzLlxuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBwYXJ0aXRpb25faWQpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 dXJuIEVSUl9QVFIocmV0KTsKPj4gK8KgwqDCoMKgwqDCoMKgfQo+PiArCj4+ICvCoMKgwqDCoMKg wqDCoGFwYXJ0ID0gYWllX2NyZWF0ZV9wYXJ0aXRpb24oYWRldiwgJnJhbmdlKTsKPj4gK8KgwqDC oMKgwqDCoMKgaWYgKElTX0VSUihhcGFydCkpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGRldl9lcnIoJmFkZXYtPmRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAiJXM6IGZhaWxlZCB0byBjcmVhdGUgcGFydCgldSwldSksKCV1 LCV1KS5cbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgX19mdW5jX18sIHJhbmdlLnN0YXJ0LmNvbCwgcmFuZ2Uuc3RhcnQucm93LAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJhbmdlLnNpemUuY29sLCBy YW5nZS5zaXplLnJvdyk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g YXBhcnQ7Cj4+ICvCoMKgwqDCoMKgwqDCoH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqBvZl9ub2Rl X2dldChuYyk7Cj4+ICvCoMKgwqDCoMKgwqDCoGFwYXJ0LT5kZXYub2Zfbm9kZSA9IG5jOwo+PiAr wqDCoMKgwqDCoMKgwqBhcGFydC0+cGFydGl0aW9uX2lkID0gcGFydGl0aW9uX2lkOwo+PiArCj4+ ICvCoMKgwqDCoMKgwqDCoGRldl9pbmZvKCZhZGV2LT5kZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgIkFJIGVuZ2luZSBwYXJ0KCV1LCV1KSwoJXUsJXUpLCBpZCAldSBpcyBw cm9iZWQKPj4gc3VjY2Vzc2Z1bGx5LlxuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByYW5nZS5zdGFydC5jb2wsIHJhbmdlLnN0YXJ0LnJvdywKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCByYW5nZS5zaXplLmNvbCwgcmFuZ2Uuc2l6ZS5yb3csIGFwYXJ0LT5w YXJ0aXRpb25faWQpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBhcGFydDsKPj4gK30K Pj4gKwo+PiArLyoqCj4+ICsgKiBhaWVfZGVzdHJveV9wYXJ0KCkgLSBkZXN0cm95IEFJIGVuZ2lu ZSBwYXJ0aXRpb24KPj4gKyAqIEBhcGFydDogQUkgZW5naW5lIHBhcnRpdGlvbgo+PiArICoKPj4g KyAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZW1vdmUgQUkgZW5naW5lIHBhcnRpdGlvbi4KPj4gKyAq Lwo+PiArdm9pZCBhaWVfcGFydF9yZW1vdmUoc3RydWN0IGFpZV9wYXJ0aXRpb24gKmFwYXJ0KQo+ PiArewo+PiArwqDCoMKgwqDCoMKgwqBkZXZpY2VfZGVsKCZhcGFydC0+ZGV2KTsKPj4gK8KgwqDC oMKgwqDCoMKgcHV0X2RldmljZSgmYXBhcnQtPmRldik7Cj4+ICt9Cj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL21pc2MveGlsaW54LWFpLWVuZ2luZS9haS1lbmdpbmUtcmVzLmMKPj4gYi9kcml2ZXJz L21pc2MveGlsaW54LWFpLWVuZ2luZS9haS1lbmdpbmUtcmVzLmMKPj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uMzZmMDhiZgo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBi L2RyaXZlcnMvbWlzYy94aWxpbngtYWktZW5naW5lL2FpLWVuZ2luZS1yZXMuYwo+PiBAQCAtMCww ICsxLDExNCBAQAo+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPj4gKy8q Cj4+ICsgKiBYaWxpbnggQUkgRW5naW5lIGRldmljZSBkcml2ZXIKPj4gKyAqCj4+ICsgKiBDb3B5 cmlnaHQgKEMpIDIwMjAgWGlsaW54LCBJbmMuCj4+ICsgKi8KPj4gKwo+PiArI2luY2x1ZGUgPGxp bnV4L2JpdG1hcC5oPgo+PiArCj4+ICsjaW5jbHVkZSAiYWktZW5naW5lLWludGVybmFsLmgiCj4+ ICsKPj4gKy8qKgo+PiArICogYWllX3Jlc291cmNlX2luaXRpYWxpemUoKSAtIGluaXRpYWxpemUg QUkgZW5naW5lIHJlc291cmNlCj4+ICsgKiBAcmVzOiBwb2ludGVyIHRvIEFJIGVuZ2luZSByZXNv dXJjZQo+PiArICogQGNvdW50OiB0b3RhbCBudW1iZXIgb2YgZWxlbWVudCBvZiB0aGlzIHJlc291 cmNlCj4+ICsgKiBAcmV0dXJuOiAwIGZvciBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBmb3IgZmFp bHVyZS4KPj4gKyAqCj4+ICsgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgaW5pdGlhbGl6ZSB0aGUgZGF0 YSBzdHJ1Y3R1cmUgZm9yIHRoZQo+PiArICogcmVzb3VyY2UuCj4+ICsgKi8KPj4gK2ludCBhaWVf cmVzb3VyY2VfaW5pdGlhbGl6ZShzdHJ1Y3QgYWllX3Jlc291cmNlICpyZXMsIGludCBjb3VudCkK Pj4gK3sKPj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFyZXMgfHwgIWNvdW50KQo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4+ICvCoMKgwqDCoMKgwqDCoHJl cy0+Yml0bWFwID0gYml0bWFwX3phbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7Cj4+ICvCoMKgwqDC oMKgwqDCoGlmICghcmVzLT5iaXRtYXApCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXR1cm4gLUVOT01FTTsKPj4gK8KgwqDCoMKgwqDCoMKgcmVzLT50b3RhbCA9IGNvdW50Owo+ PiArCj4+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAq IGFpZV9yZXNvdXJjZV91bmluaXRpYWxpemUoKSAtIHVuaW5pdGlhbGl6ZSBBSSBlbmdpbmUgcmVz b3VyY2UKPj4gKyAqIEByZXM6IHBvaW50ZXIgdG8gQUkgZW5naW5lIHJlc291cmNlCj4+ICsgKgo+ PiArICogVGhpcyBmdW5jdGlvbiB3aWxsIHJlbGVhc2UgdGhlIEFJIGVuZ2luZSByZXNvdXJjZSBk YXRhIG1lbWJlcnMuCj4+ICsgKi8KPj4gK3ZvaWQgYWllX3Jlc291cmNlX3VuaW5pdGlhbGl6ZShz dHJ1Y3QgYWllX3Jlc291cmNlICpyZXMpCj4+ICt7Cj4+ICvCoMKgwqDCoMKgwqDCoHJlcy0+dG90 YWwgPSAwOwo+PiArwqDCoMKgwqDCoMKgwqBpZiAocmVzLT5iaXRtYXApCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBiaXRtYXBfZnJlZShyZXMtPmJpdG1hcCk7Cj4+ICt9Cj4+ICsK Pj4gKy8qKgo+PiArICogYWllX3Jlc291cmNlX2NoZWNrKCkgLSBjaGVjayBhdmFpbGFiaWxpdHkg b2YgcmVxdWVzdGVkIHJlc291cmNlCj4+ICsgKiBAcmVzOiBwb2ludGVyIHRvIEFJIGVuZ2luZSBy ZXNvdXJjZSB0byBjaGVjawo+PiArICogQHN0YXJ0OiBzdGFydCBpbmRleCBvZiB0aGUgcmVxdWly ZWQgcmVzb3VyY2UsIGl0IHdpbGwgb25seSBiZSB1c2VkIGlmCj4+ICsgKsKgwqDCoMKgwqDCoMKg IEBjb250aW51b3VzIGlzIDEuIEl0IHdpbGwgY2hlY2sgdGhlIGF2YWlsYWJsZSByZXNvdXJjZSBz dGFydGluZwo+PiBmcm9tCj4+ICsgKsKgwqDCoMKgwqDCoMKgIEBzdGFydAo+PiArICogQGNvdW50 OiBudW1iZXIgb2YgcmVxdWVzdGVkIGVsZW1lbnQKPj4gKyAqIEByZXR1cm46IHN0YXJ0IHJlc291 cmNlIGlkIGlmIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIHJlc291cmNlcyBhcmUKPj4gYXZhaWxh YmxlCj4+ICsgKsKgwqDCoMKgwqDCoMKgwqAgSXQgd2lsbCByZXR1cm4gbmVnYXRpdmUgdmFsdWUg b2YgZXJyb3JzLgo+PiArICoKPj4gKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjaGVjayB0aGUgYXZh aWxhYmlsaXR5LiBJdCB3aWxsIHJldHVybiBzdGFydCByZXNvdXJjZQo+PiBpZAo+PiArICogaWYg dGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUuCj4+ICsgKi8K Pj4gK2ludCBhaWVfcmVzb3VyY2VfY2hlY2tfcmVnaW9uKHN0cnVjdCBhaWVfcmVzb3VyY2UgKnJl cywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHUzMiBzdGFydCwgdTMyIGNvdW50KQo+PiArewo+PiArwqDCoMKgwqDCoMKgwqB1bnNp Z25lZCBsb25nIGlkOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoGlmICghcmVzIHx8ICFyZXMtPmJp dG1hcCB8fCAhY291bnQpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g LUVJTlZBTDsKPj4gK8KgwqDCoMKgwqDCoMKgaWQgPSBiaXRtYXBfZmluZF9uZXh0X3plcm9fYXJl YShyZXMtPmJpdG1hcCwgcmVzLT50b3RhbCwgc3RhcnQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBjb3VudCwgMCk7Cj4+ICvCoMKgwqDCoMKgwqDCoGlmIChpZCA+PSByZXMtPnRvdGFsKQo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FUkFOR0U7Cj4+ICsKPj4gK8Kg wqDCoMKgwqDCoMKgcmV0dXJuIChpbnQpaWQ7Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiArICogYWll X3Jlc291cmNlX2dldF9yZWdpb24oKSAtIGdldCByZXF1ZXN0ZWQgQUkgZW5naW5lIHJlc291cmNl Cj4+ICsgKiBAcmVzOiBwb2ludGVyIHRvIEFJIGVuZ2luZSByZXNvdXJjZSB0byBjaGVjawo+PiAr ICogQGNvdW50OiBudW1iZXIgb2YgcmVxdWVzdGVkIGVsZW1lbnQKPj4gKyAqIEBzdGFydDogc3Rh cnQgaW5kZXggb2YgdGhlIHJlcXVpcmVkIHJlc291cmNlCj4+ICsgKiBAcmV0dXJuOiBzdGFydCBy ZXNvdXJjZSBpZCBmb3Igc3VjY2VzcywgYW5kIG5lZ2F0aXZlIHZhbHVlIGZvciBmYWlsdXJlLgo+ PiArICoKPj4gKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2sgaWYgdGhlIHJlcXVlc3RlZCBBSSBlbmdp bmUgcmVzb3VyY2UgaXMgYXZhaWxhYmxlLgo+PiArICogSWYgaXQgaXMgYXZhaWxhYmxlLCBtYXJr IGl0IHVzZWQgYW5kIHJldHVybiB0aGUgc3RhcnQgcmVzb3VyY2UgaWQuCj4+ICsgKi8KPj4gK2lu dCBhaWVfcmVzb3VyY2VfZ2V0X3JlZ2lvbihzdHJ1Y3QgYWllX3Jlc291cmNlICpyZXMsIHUzMiBz dGFydCwgdTMyIGNvdW50KQo+PiArewo+PiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBsb25nIG9m ZjsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqBpZiAoIXJlcyB8fCAhcmVzLT5iaXRtYXAgfHwgIWNv dW50KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4+ ICvCoMKgwqDCoMKgwqDCoG9mZiA9IGJpdG1hcF9maW5kX25leHRfemVyb19hcmVhKHJlcy0+Yml0 bWFwLCByZXMtPnRvdGFsLCBzdGFydCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb3VudCwg MCk7Cj4+ICvCoMKgwqDCoMKgwqDCoGlmIChvZmYgPj0gcmVzLT50b3RhbCkgewo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJfZXJyKCJGYWlsZWQgdG8gZ2V0IGF2YWlsYWJsZSBB SSBlbmdpbmUgcmVzb3VyY2UuXG4iKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybiAtRVJBTkdFOwo+PiArwqDCoMKgwqDCoMKgwqB9Cj4+ICvCoMKgwqDCoMKgwqDCoGJp dG1hcF9zZXQocmVzLT5iaXRtYXAsIG9mZiwgY291bnQpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDC oHJldHVybiAoaW50KW9mZjsKPj4gK30KPj4gKwo+PiArLyoqCj4+ICsgKiBhaWVfcmVzb3VyY2Vf cHV0X3JlZ2lvbigpIC0gcmVsZWFzZSByZXF1ZXN0ZWQgQUkgZW5naW5lIHJlc291cmNlCj4+ICsg KiBAcmVzOiBwb2ludGVyIHRvIEFJIGVuZ2luZSByZXNvdXJjZSB0byBjaGVjawo+PiArICogQHN0 YXJ0OiBzdGFydCBpbmRleCBvZiB0aGUgcmVzb3VyY2UgdG8gcmVsZWFzZQo+PiArICogQGNvdW50 OiBudW1iZXIgb2YgZWxlbWVudHMgdG8gcmVsZWFzZQo+PiArICoKPj4gKyAqIFRoaXMgZnVuY3Rp b24gcmVsZWFzZSB0aGUgcmVxdWVzdGVkIEFJIGVuZ2luZSByZXNvdXJjZS4KPj4gKyAqLwo+PiAr dm9pZCBhaWVfcmVzb3VyY2VfcHV0X3JlZ2lvbihzdHJ1Y3QgYWllX3Jlc291cmNlICpyZXMsIGlu dCBzdGFydCwgdTMyIGNvdW50KQo+PiArewo+PiArwqDCoMKgwqDCoMKgwqBpZiAoIXJlcyB8fCAh Y291bnQpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4+ICvCoMKg wqDCoMKgwqDCoGJpdG1hcF9jbGVhcihyZXMtPmJpdG1hcCwgc3RhcnQsIGNvdW50KTsKPj4gK30K Pj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC94bG54LWFpLWVuZ2luZS5oIGIvaW5j bHVkZS91YXBpL2xpbnV4L3hsbngtYWktCj4+IGVuZ2luZS5oCj4+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4+IGluZGV4IDAwMDAwMDAuLmFjYmM3ODEKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9p bmNsdWRlL3VhcGkvbGludXgveGxueC1haS1lbmdpbmUuaAo+PiBAQCAtMCwwICsxLDEwNyBAQAo+ PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgV0lUSCBMaW51eC1zeXNjYWxs LW5vdGUgKi8KPj4gKy8qCj4+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjAsIFhpbGlueCBJbmMuCj4+ ICsgKi8KPj4gKwo+PiArI2lmbmRlZiBfVUFQSV9BSV9FTkdJTkVfSF8KPj4gKyNkZWZpbmUgX1VB UElfQUlfRU5HSU5FX0hfCj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgo+PiArI2lu Y2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4+ICsKPj4gK2VudW0gYWllX3JlZ19vcCB7Cj4+ICvCoMKg wqDCoMKgwqDCoEFJRV9SRUdfV1JJVEUsCj4+ICt9Owo+PiArCj4+ICsvKiBBSSBlbmdpbmUgcGFy dGl0aW9uIGlzIGluIHVzZSAqLwo+PiArI2RlZmluZSBYQUlFX1BBUlRfU1RBVFVTX0lOVVNFwqDC oMKgwqDCoMKgwqDCoMKgKDFVIDw8IDApCj4+ICsKPj4gKy8qKgo+PiArICogc3RydWN0IGFpZV9s b2NhdGlvbiAtIEFJRSBsb2NhdGlvbiBpbmZvcm1hdGlvbgo+PiArICogQGNvbDogY29sdW1uIGlk Cj4+ICsgKiBAcm93OiByb3cgaWQKPj4gKyAqLwo+PiArc3RydWN0IGFpZV9sb2NhdGlvbiB7Cj4+ ICvCoMKgwqDCoMKgwqDCoF9fdTMyIGNvbDsKPj4gK8KgwqDCoMKgwqDCoMKgX191MzIgcm93Owo+ PiArfTsKPj4gKwo+PiArLyoqCj4+ICsgKiBzdHJ1Y3QgYWllX3JhbmdlIC0gQUlFIHJhbmdlIGlu Zm9ybWF0aW9uCj4+ICsgKiBAc3RhcnQ6IHN0YXJ0IHRpbGUgbG9jYXRpb24KPj4gKyAqIEBzaXpl OiBzaXplIG9mIHRoZSByYW5nZSwgbnVtYmVyIG9mIGNvbHVtbnMgYW5kIHJvd3MKPj4gKyAqLwo+ PiArc3RydWN0IGFpZV9yYW5nZSB7Cj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfbG9jYXRp b24gc3RhcnQ7Cj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfbG9jYXRpb24gc2l6ZTsKPj4g K307Cj4+ICsKPj4gKy8qKgo+PiArICogc3RydWN0IGFpZV9yZWdfYXJncyAtIEFJRSBhY2Nlc3Mg cmVnaXN0ZXIgYXJndW1lbnRzCj4+ICsgKiBAb3A6IGlmIHRoaXMgcmVxdWVzdCBpcyB0byByZWFk LCB3cml0ZSBvciBwb2xsIHJlZ2lzdGVyCj4+ICsgKiBAbWFzazogbWFzayBmb3IgbWFzayB3cml0 ZSwgMCBmb3Igbm90IG1hc2sgd3JpdGUKPj4gKyAqIEBvZmZzZXQ6IG9mZnNldCBvZiByZWdpc3Rl ciB0byB0aGUgc3RhcnQgb2YgYW4gQUkgZW5naW5lIHBhcnRpdGlvbgo+PiArICogQHZhbDogdmFs dWUgdG8gd3JpdGUgb3IgZ2V0Cj4+ICsgKi8KPj4gK3N0cnVjdCBhaWVfcmVnX2FyZ3Mgewo+PiAr wqDCoMKgwqDCoMKgwqBlbnVtIGFpZV9yZWdfb3Agb3A7Cj4+ICvCoMKgwqDCoMKgwqDCoF9fdTMy IG1hc2s7Cj4+ICvCoMKgwqDCoMKgwqDCoF9fdTY0IG9mZnNldDsKPj4gK8KgwqDCoMKgwqDCoMKg X191MzIgdmFsOwo+PiArfTsKPj4gKwo+PiArLyoqCj4+ICsgKiBzdHJ1Y3QgYWllX3JhbmdlX2Fy Z3MgLSBBSUUgcmFuZ2UgcmVxdWVzdCBhcmd1bWVudHMKPj4gKyAqIEBwYXJ0aXRpb25faWQ6IHBh cnRpdGlvbiBpZC4gSXQgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUKPj4gKyAqwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBBSSBlbmdpbmUgcGFydGl0aW9uIGluIHRoZSBzeXN0ZW0uCj4+ICsg KiBAdWlkOiBpbWFnZSBpZGVudGlmaWVyIGxvYWRlZCBvbiB0aGUgQUkgZW5naW5lIHBhcnRpdGlv bgo+PiArICogQHJhbmdlOiByYW5nZSBvZiBBSUUgdGlsZXMKPj4gKyAqIEBzdGF0dXM6IGluZGlj YXRlIGlmIHRoZSBBSSBlbmdpbmUgaXMgaW4gdXNlLgo+PiArICrCoMKgwqDCoMKgwqDCoMKgIDAg bWVhbnMgbm90IGluIHVzZWQsIG90aGVyd2lzZSwgaW4gdXNlLgo+PiArICovCj4+ICtzdHJ1Y3Qg YWllX3JhbmdlX2FyZ3Mgewo+PiArwqDCoMKgwqDCoMKgwqBfX3UzMiBwYXJ0aXRpb25faWQ7Cj4+ ICvCoMKgwqDCoMKgwqDCoF9fdTMyIHVpZDsKPj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9y YW5nZSByYW5nZTsKPj4gK8KgwqDCoMKgwqDCoMKgX191MzIgc3RhdHVzOwo+PiArfTsKPj4gKwo+ PiArLyoqCj4+ICsgKiBzdHJ1Y3QgYWllX3BhcnRpdGlvbl9xdWVyeSAtIEFJRSBwYXJ0aXRpb24g cXVlcnkgYXJndW1lbnRzCj4+ICsgKiBAcGFydGl0aW9uX2NudDogbnVtYmVyIG9mIGRlZmluZWQg cGFydGl0aW9ucyBpbiB0aGUgc3lzdGVtCj4+ICsgKiBAcGFydGl0aW9uczogYnVmZmVyIHRvIHN0 b3JlIGRlZmluZWQgcGFydGl0aW9ucyBpbmZvcm1hdGlvbi4KPj4gKyAqLwo+PiArc3RydWN0IGFp ZV9wYXJ0aXRpb25fcXVlcnkgewo+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWllX3JhbmdlX2Fy Z3MgKnBhcnRpdGlvbnM7Cj4+ICvCoMKgwqDCoMKgwqDCoF9fdTMyIHBhcnRpdGlvbl9jbnQ7Cj4+ ICt9Owo+PiArCj4+ICsvKioKPj4gKyAqIHN0cnVjdCBhaWVfcGFydGl0aW9uX3JlcSAtIEFJRSBy ZXF1ZXN0IHBhcnRpdGlvbiBhcmd1bWVudHMKPj4gKyAqIEBwYXJ0aXRpb25faWQ6IHBhcnRpdGlv biBub2RlIGlkLiBJdCBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBBSSBlbmdpbmUKPj4gKyAqwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwYXJ0aXRpb24gaW4gdGhlIHN5c3RlbS4KPj4gKyAq IEB1aWQ6IGltYWdlIGlkZW50aWZpZXIgbG9hZGVkIG9uIHRoZSBBSSBlbmdpbmUgcGFydGl0aW9u Cj4+ICsgKiBAbWV0YV9kYXRhOiBtZXRhIGRhdGEgdG8gaW5kaWNhdGUgd2hpY2ggcmVzb3VyY2Vz IHVzZWQgYnkgYXBwbGljYXRpb24uCj4+ICsgKiBAZmxhZzogdXNlZCBmb3IgYXBwbGljYXRpb24g dG8gaW5kaWNhdGUgcGFydGljdWxhciBkcml2ZXIgcmVxdWlyZW1lbnRzCj4+ICsgKsKgwqDCoMKg wqDCoCBhcHBsaWNhdGlvbiB3YW50cyB0byBoYXZlIGZvciB0aGUgcGFydGl0aW9uLiBlLmcuIGRv IG5vdCBjbGVhbgo+PiArICrCoMKgwqDCoMKgwqAgcmVzb3VyY2Ugd2hlbiBjbG9zaW5nIHRoZSBw YXJ0aXRpb24uCj4+ICsgKi8KPj4gK3N0cnVjdCBhaWVfcGFydGl0aW9uX3JlcSB7Cj4+ICvCoMKg wqDCoMKgwqDCoF9fdTMyIHBhcnRpdGlvbl9pZDsKPj4gK8KgwqDCoMKgwqDCoMKgX191MzIgdWlk Owo+PiArwqDCoMKgwqDCoMKgwqBfX3U2NCBtZXRhX2RhdGE7Cj4+ICvCoMKgwqDCoMKgwqDCoF9f dTMyIGZsYWc7Cj4+ICt9Owo+PiArCj4+ICsjZGVmaW5lIEFJRV9JT0NUTF9CQVNFICdBJwo+PiAr Cj4+ICsvKiBBSSBlbmdpbmUgZGV2aWNlIElPQ1RMIG9wZXJhdGlvbnMgKi8KPj4gKyNkZWZpbmUg QUlFX0VOUVVJUkVfUEFSVF9JT0NUTMKgwqDCoMKgwqDCoMKgwqDCoF9JT1dSKEFJRV9JT0NUTF9C QVNFLCAweDEsIFwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGFp ZV9wYXJ0aXRpb25fcXVlcnkpCj4+ICsjZGVmaW5lIEFJRV9SRVFVRVNUX1BBUlRfSU9DVEzCoMKg wqDCoMKgwqDCoMKgwqBfSU9SKEFJRV9JT0NUTF9CQVNFLCAweDIsIFwKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBhaWVfcGFydGl0aW9uX3JlcSkKPj4gKwo+PiArLyog QUkgZW5naW5lIHBhcnRpdGlvbiBJT0NUTCBvcGVyYXRpb25zICovCj4+ICsjZGVmaW5lIEFJRV9S RUdfSU9DVEzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBfSU9XUihBSUVfSU9D VExfQkFTRSwgMHg4LCBcCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVj dCBhaWVfcmVnX2FyZ3MpCj4+ICsjZW5kaWYKPgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgt YXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3Jn L21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=