Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp3293257pxf; Mon, 15 Mar 2021 06:28:35 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwXkSmC28rYpCCKIJKw0Od1FAe1cOOUVHlWNX8P3KvebA2bGoXB5HLwMbQf/nOhNwhckhXz X-Received: by 2002:a05:6402:c:: with SMTP id d12mr29488271edu.100.1615814915320; Mon, 15 Mar 2021 06:28:35 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1615814915; cv=pass; d=google.com; s=arc-20160816; b=NvHou/wnmD3zI24Jrjr/ORsTsNCl7+Z8af9fncGwr3QoKBSn8fur5wsr2nuZUQOVWL XrOT5iodk9ZQswIJrbZWdO5Lrzf+scMgI+1aTv5hgNXP0U9+TjF2xilgGJgOrLNSv4N+ 2haRiRVGKcM3o981+hUo4JFvNZPzv6IashesAyGPilAo2KO6jgETYZFBOLuLFvvL5Ogt EKH5LTcF/4NfyctSBO3F2ArkisjphlcE0K7qNcC5jp1apCt11gb5YgX6T/9lrk5b6FxZ cVGbug6LA0QQ1wbioGvuQwSMlFsczxnNNA909GVnrye6ixp+BAPpZa5oYL6+6r7VIX0s LU4g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=exTyAl2IN+0LGbvYPafutmn1iuLLMUL52LyfNRiU4uA=; b=aKG2uiOPr83LBmEtrTeQL71q8gzNR8ZQFDAqNaXPwKln5QUZcKVwYIswA5tQ5BjZN9 5vGa4ePHAQCdxGxEfxpLY4JEZnLfx0W57eCfL1qvBdXvXf7uRqpdpqg889rj5J04EgjO xsn03xS9vOtP4HoiWCj3X8zcEBJpjxA5PBBWqn2sEH4+xt/DOhwsF+8DCTJauqzagPhC FYDHXRt6bZ3xUp6CKpsmNu6AdEcP+74VczTevJVjWpm+Rc4VeBI2kfGBOx35bEjz10Qd IUkRzBAPSsj1lAtdSpoqWyE8o78SHPwaExVwFwrQvoCZ0SPtWLASgiqSBcuXEAiiUyES vyaA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@silabs.onmicrosoft.com header.s=selector2-silabs-onmicrosoft-com header.b=qgwOsFQu; arc=pass (i=1 spf=pass spfdomain=silabs.com dkim=pass dkdomain=silabs.com dmarc=pass fromdomain=silabs.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id zn8si10735976ejb.621.2021.03.15.06.28.12; Mon, 15 Mar 2021 06:28:35 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@silabs.onmicrosoft.com header.s=selector2-silabs-onmicrosoft-com header.b=qgwOsFQu; arc=pass (i=1 spf=pass spfdomain=silabs.com dkim=pass dkdomain=silabs.com dmarc=pass fromdomain=silabs.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231599AbhCON1O (ORCPT + 99 others); Mon, 15 Mar 2021 09:27:14 -0400 Received: from mail-co1nam11on2054.outbound.protection.outlook.com ([40.107.220.54]:63187 "EHLO NAM11-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S230386AbhCON0c (ORCPT ); Mon, 15 Mar 2021 09:26:32 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lm1voZ3MG6tfmet7d0VMG+Dzlu3B8ylHimlhbSApLj9vUDvirZD++iVbOenIatX6X6AyInysXUQzUE1++ISeUBDzelG4e2fgWSWBd89rxt5W/+BQ6oMejh8o5jNBrZn9YO6ylaEkSqPF2VkPPL0jR4vj9p3rK2GH1bocrAz2f2/PV/bOFm+0hQqXE9t1gi3Rgcus04oDA+t2FBUvZ22gtr9MScPTQLAKP5A6xU+1AjngZhdnevfcZPCGCy1OT58zLe2aPZlVUFytgyCoTjeSauXGybjeADYBdl0jZ4H0OAVrXHMfJtoFqO1bcYc8TyNKk1Z0arLMy82MjLSyuKiyZg== 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=exTyAl2IN+0LGbvYPafutmn1iuLLMUL52LyfNRiU4uA=; b=i3a28QeoOAM+NZKpH78iHH+Sk2nxDoj2JkvXknrzBA8G0DijAlayN5aKdh4lLTXnTi2YZ5ONPwrznmDGT9oKzqZdVHU24h8QWQM+RQncb39AJksXJrMdr+IGjgUK8nictihRgmUt3uWWJhEvOQufqdKcA7CsssKqvckjKXgynZ+yeeSXCaqTZFqYxfd40fyLUYyHC/bL5hscawvlkAm0GDpksXi3QhdP36xo76IPMUq0+ATpeGtku70pBhBxDmqHzU5HkQoYBFhX0MwGUzLksiJLTuTUQJjKniLoaZtoW4QEhsE46cDNSDFrCXNUgCbzYtY47KcMTQCPkbij/3spCQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=silabs.com; dmarc=pass action=none header.from=silabs.com; dkim=pass header.d=silabs.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.onmicrosoft.com; s=selector2-silabs-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=exTyAl2IN+0LGbvYPafutmn1iuLLMUL52LyfNRiU4uA=; b=qgwOsFQu5wqWkkEm88Rmq491vqZJGnRxwk8dZyLF3suNFTsL1qGC1qwH2EvUzildjtpImcMwu2Fj2rQ6K35zYXPqQAU2XixWLGaDxErnK7Zv/D8aLp3x4sVNgekRim4X06F0uaX7ckFQFq+6F1F1fseRlZsEbVFuvFvVKdPTEv4= Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=silabs.com; Received: from SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) by SN6PR11MB3216.namprd11.prod.outlook.com (2603:10b6:805:c1::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3933.32; Mon, 15 Mar 2021 13:26:26 +0000 Received: from SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::41bc:5ce:dfa0:9701]) by SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::41bc:5ce:dfa0:9701%7]) with mapi id 15.20.3933.032; Mon, 15 Mar 2021 13:26:26 +0000 From: Jerome Pouiller To: linux-wireless@vger.kernel.org, netdev@vger.kernel.org Cc: devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org, Greg Kroah-Hartman , Kalle Valo , "David S . Miller" , devicetree@vger.kernel.org, Rob Herring , linux-mmc@vger.kernel.org, =?UTF-8?q?Pali=20Roh=C3=A1r?= , Ulf Hansson , =?UTF-8?q?J=C3=A9r=C3=B4me=20Pouiller?= Subject: [PATCH v5 23/24] wfx: remove from the staging area Date: Mon, 15 Mar 2021 14:25:00 +0100 Message-Id: <20210315132501.441681-24-Jerome.Pouiller@silabs.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210315132501.441681-1-Jerome.Pouiller@silabs.com> References: <20210315132501.441681-1-Jerome.Pouiller@silabs.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 X-Originating-IP: [2a01:e35:2435:66a0:544b:f17b:7ae8:fb7] X-ClientProxiedBy: SN4PR0801CA0014.namprd08.prod.outlook.com (2603:10b6:803:29::24) To SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from pc-42.silabs.com (2a01:e35:2435:66a0:544b:f17b:7ae8:fb7) by SN4PR0801CA0014.namprd08.prod.outlook.com (2603:10b6:803:29::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3933.32 via Frontend Transport; Mon, 15 Mar 2021 13:26:23 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e7e45e44-630e-4542-40c7-08d8e7b5eee2 X-MS-TrafficTypeDiagnostic: SN6PR11MB3216: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5236; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: i1MJ1mHRwSVR804glrFMRsuE50mODKLJ6/AYnB4ke8woJGDyT5uj/4cDvoUpBaBiSFFA6kWAQmaccoL1/T9F61HwfqLSXxMGEueERVLgzJuVcXDzi1EJ2fydpnqUGAKH7k9US671PHHN81n80m2Yt9bntm4+fF6Y9JC4D2IoHVxYHkLDT/ZNDRVnAEOnht8v0vbzMdZT3be3gId/G+o445CceT7A25XcLp4H22Ni801NwSSejeH7OMiDOFiqbW6b1GF1LfpXtyD8Ee5Afp7CbP1rmQFNen73rE2ESheDCXREqlm8JswhRVXp1ZNCxmBA+LWxJJbv/Sy2SQwN5GAflelVnjw3Xb3KuGaw+wgVf9tpuSXGE4nWifXUSbgrgedO5H5M2vKbieiE927BUJK4ySz6HlGo/SITPOOdC2ZHP7moLrphityGtF4ZRg0p9JFe8hpUvu8StEe7OJmWYJpfneMWyCq1gzgc++no4IS6yjB1EjsAglDjH7bEJQwm8MxBJXkfssb0awTv6BQeOajmas43ivP8ErZ3NG+hE3YXQwG75ewLm/lMrRUL599qRggWDaEeABCpM8kxzjPF44+RbnJQdwCvdeM5jvOlaqYw6nyTwCAbeq/dm0dufhA0NZprg6eogsVBG1C3+xy1eM1KwlucqjHX4dFuLafhx54EtjmgrYAJ+qoXxiNyXNh7b6k+9SXWnNVQ09coyKq7E33MmA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR11MB2718.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(376002)(346002)(396003)(366004)(39850400004)(136003)(86362001)(107886003)(2616005)(966005)(186003)(1076003)(4326008)(316002)(30864003)(66556008)(478600001)(8676002)(66476007)(6486002)(7696005)(5660300002)(66946007)(2906002)(54906003)(83380400001)(6666004)(8936002)(36756003)(52116002)(7416002)(66574015)(16526019)(21314003)(559001)(579004)(569008);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?SEhyYlZsZ2k3ZTBpdGtyM3F5bm41RlNxeWZmTitWc3FlM0d0WithQVFUZXJO?= =?utf-8?B?NlczWC9QWHZuUGk3dmpaZ0s5cnlMaThlTlJQZG8rcVhCVm55QTVxT05iMTJW?= =?utf-8?B?ZlZSRktQeWF2WjEwVTlVWHh0a3RtM29JbDdnM0o1V0xKajNIU0syRTVHbHhr?= =?utf-8?B?MkkyUHg1V1lscW4yMTBoYjgzRmNuSHJJZ0xUY1dHK1VvVFhPanIxT0wrRzJl?= =?utf-8?B?cjVsdEVwTFlIQ0JMcnJnNXpaVHVSR2JraXcyT1lWeExsOXBJbHRNbm5HS2ha?= =?utf-8?B?WVFETTE0dVcvZEtVTUg4cGNyU1NicFZrZTZ3OFRYS2loU3RGS1ZyQWRwV1VP?= =?utf-8?B?bUJMUjI2WmpzOWY2TVRXVGZka3pXTGpjOE45c3NRbFdNczEyVHQ5UWN2aUd1?= =?utf-8?B?RUswemRUUFNpZkR6dGM0M1R6eXByUUtDQk5PbTlETEpBY0xxM1JYN2ZNeHZI?= =?utf-8?B?dU5jRG5OSk9RNngrOXlxSEJrT3R2cUszTFFKTzR2bWQvQ2dOdVh6eFh3ZWYy?= =?utf-8?B?QitQbm1SOTMxdFVrN2VGZTdsN2JidWZWeGdnU2dYcmRGQ0xxMkdRM1RuU0lv?= =?utf-8?B?cGdqV3VneTdZTDFId1diVmQvdXpJMjJkVXJNOGVyMnlBdXdCQWNmQXFBVmk0?= =?utf-8?B?RFVUVk81eldRUGJLTlphR2o3VllqbXZmQUcxNEUyMmtDb1FqRG5PZWpVNE83?= =?utf-8?B?VStPMFc1bWRQbDhjYzd1M21OaTB3K2dFNkFnZjBKYXZxOHFyb0granlsWHI0?= =?utf-8?B?Z0xpYjV4VUExQ2dlbW14RjNtc1laNGxZWUluV01SbXlFbjUxNEsvY1Y0TFIr?= =?utf-8?B?V0pnei9EeUZBRzNNMW5zcmFqWHUvMVMzdWg4QWpVNXRUTmt1czRJZFJFSHlW?= =?utf-8?B?dzlzSVZwK2dNQ1hvWXQ1RStyWUEraWM5dmJIR010aHZ5Q1dmQ1QwR21sZ2lM?= =?utf-8?B?Uno1SzZLK0FrSVlqckpIOVByMGoxRVBqTUJ1TGhsYUpzT3VvZmM4VnVlb2JJ?= =?utf-8?B?Vkx3NlFoeUhQMGtCMVpZYm5ONDFYMGsrcFpTTnNVZVVFOS8vLzVxb3diWllm?= =?utf-8?B?WFZSRkdqK1NqTmowaTRLM3hKZW1jV1YrdlhKZGNoZ2xDSVpXaE9ZMlpUL1Rs?= =?utf-8?B?dDcrQXo0UWhwRnBqemJkZngzUTdJTkRBNUZuYWJWNG9pYlhoelI5MmpHWFFN?= =?utf-8?B?UCtmcFU4NnluT3RuK2JqS2NDOHl5b0tDYndTOTJZV0hmaFZ2TDQ1OHJ0STRj?= =?utf-8?B?TjVsa1NrK1IrSnpDSFB6eUdwK3psenBtTGkxL3k2U0lDR3kyQVRrRTIzSDlI?= =?utf-8?B?RVgwaUVabitwRG11MHJDaXlKaElha2R4L0NwWnJVdjVvUTd0bjFwL281eXox?= =?utf-8?B?bkJwNHMxdTNkV2FxeWRmYlovbnBBU2NCOCtLb0NjMXlhM0J0Q0R4Z3g3R01H?= =?utf-8?B?dzZIOWVGdmMrRGlZdHlKclJxVGpueFBkbDlnMnRiK2x5NExJSTQ4emFwRjJi?= =?utf-8?B?SVFxVVRFVnZQZzE3Z2JmT01wNXhOczlsd0JyTFQyNUlCQkpkdjR1eTRFWTZI?= =?utf-8?B?aFQ1V3NtNGk1QmxRNE5VZmtvZnpWaVBNTTlXcnhqUy9FNXF4S01mRkREaW91?= =?utf-8?B?ckpBdUs3MjRQa3o2S05mV3JHcklHRkVPVlkwWUNLczBjU01UalNYYVFZMmVx?= =?utf-8?B?UXJ3TkR3c2F1NUdOcVdSRDkvWGhTS0ZHUkJlVlNxSVNhMThMeFgyV2tJZ0hn?= =?utf-8?B?WHREbGxsNnNIbktTQTZseHRxS0ZaSkpJSUZ0MVBXQ25SOXA5Q1BHQ01ITGdi?= =?utf-8?B?WnBLa3FjRm5ZZlBiRDhHcDZVTVVXdHFHaHR1aVNjU0VnZ3Rmem1WRGZrVXU1?= =?utf-8?Q?s+VIwzw8pTVHM?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: e7e45e44-630e-4542-40c7-08d8e7b5eee2 X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB2718.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Mar 2021 13:26:26.7200 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Zuw1Pt0a+NINW62Zo/zf4181MIPR3X8y5yRPF+MZe9gPbNFTHA2L/sgy2qHno5graBuyjRbNG6FSG5E2bYbjag== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR11MB3216 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPgoKU2ln bmVkLW9mZi1ieTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29t PgotLS0KIC4uLi9iaW5kaW5ncy9uZXQvd2lyZWxlc3Mvc2lsYWJzLHdmeC55YW1sICAgICB8IDEy NSAtLS0KIGRyaXZlcnMvc3RhZ2luZy93ZngvS2NvbmZpZyAgICAgICAgICAgICAgICAgICB8ICAg OCAtCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L01ha2VmaWxlICAgICAgICAgICAgICAgICAgfCAgMjUg LQogZHJpdmVycy9zdGFnaW5nL3dmeC9iaC5jICAgICAgICAgICAgICAgICAgICAgIHwgMzMzIC0t LS0tLS0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2JoLmggICAgICAgICAgICAgICAgICAgICAgfCAg MzMgLQogZHJpdmVycy9zdGFnaW5nL3dmeC9idXMuaCAgICAgICAgICAgICAgICAgICAgIHwgIDM4 IC0KIGRyaXZlcnMvc3RhZ2luZy93ZngvYnVzX3NkaW8uYyAgICAgICAgICAgICAgICB8IDI2OSAt LS0tLS0KIGRyaXZlcnMvc3RhZ2luZy93ZngvYnVzX3NwaS5jICAgICAgICAgICAgICAgICB8IDI3 MSAtLS0tLS0KIGRyaXZlcnMvc3RhZ2luZy93ZngvZGF0YV9yeC5jICAgICAgICAgICAgICAgICB8 ICA5MyAtLQogZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3J4LmggICAgICAgICAgICAgICAgIHwg IDE4IC0KIGRyaXZlcnMvc3RhZ2luZy93ZngvZGF0YV90eC5jICAgICAgICAgICAgICAgICB8IDU5 MyAtLS0tLS0tLS0tLS0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfdHguaCAgICAgICAgICAg ICAgICAgfCAgNjggLS0KIGRyaXZlcnMvc3RhZ2luZy93ZngvZGVidWcuYyAgICAgICAgICAgICAg ICAgICB8IDM1OSAtLS0tLS0tLQogZHJpdmVycy9zdGFnaW5nL3dmeC9kZWJ1Zy5oICAgICAgICAg ICAgICAgICAgIHwgIDE5IC0KIGRyaXZlcnMvc3RhZ2luZy93ZngvZndpby5jICAgICAgICAgICAg ICAgICAgICB8IDQwNSAtLS0tLS0tLS0KIGRyaXZlcnMvc3RhZ2luZy93ZngvZndpby5oICAgICAg ICAgICAgICAgICAgICB8ICAxNSAtCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl9hcGlfY21kLmgg ICAgICAgICAgICAgfCA1NTMgLS0tLS0tLS0tLS0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl9h cGlfZ2VuZXJhbC5oICAgICAgICAgfCAyNjcgLS0tLS0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2hp Zl9hcGlfbWliLmggICAgICAgICAgICAgfCAzNDMgLS0tLS0tLS0KIGRyaXZlcnMvc3RhZ2luZy93 ZngvaGlmX3J4LmMgICAgICAgICAgICAgICAgICB8IDQxNSAtLS0tLS0tLS0KIGRyaXZlcnMvc3Rh Z2luZy93ZngvaGlmX3J4LmggICAgICAgICAgICAgICAgICB8ICAxOCAtCiBkcml2ZXJzL3N0YWdp bmcvd2Z4L2hpZl90eC5jICAgICAgICAgICAgICAgICAgfCA1MjMgLS0tLS0tLS0tLS0tCiBkcml2 ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eC5oICAgICAgICAgICAgICAgICAgfCAgNjAgLS0KIGRyaXZl cnMvc3RhZ2luZy93ZngvaGlmX3R4X21pYi5jICAgICAgICAgICAgICB8IDMyNCAtLS0tLS0tCiBk cml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eF9taWIuaCAgICAgICAgICAgICAgfCAgNDkgLS0KIGRy aXZlcnMvc3RhZ2luZy93ZngvaHdpby5jICAgICAgICAgICAgICAgICAgICB8IDM1MiAtLS0tLS0t LQogZHJpdmVycy9zdGFnaW5nL3dmeC9od2lvLmggICAgICAgICAgICAgICAgICAgIHwgIDc1IC0t CiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2tleS5jICAgICAgICAgICAgICAgICAgICAgfCAyNDEgLS0t LS0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2tleS5oICAgICAgICAgICAgICAgICAgICAgfCAgMjAg LQogZHJpdmVycy9zdGFnaW5nL3dmeC9tYWluLmMgICAgICAgICAgICAgICAgICAgIHwgNDkwIC0t LS0tLS0tLS0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L21haW4uaCAgICAgICAgICAgICAgICAgICAg fCAgNDQgLQogZHJpdmVycy9zdGFnaW5nL3dmeC9xdWV1ZS5jICAgICAgICAgICAgICAgICAgIHwg MzA0IC0tLS0tLS0KIGRyaXZlcnMvc3RhZ2luZy93ZngvcXVldWUuaCAgICAgICAgICAgICAgICAg ICB8ICA0NSAtCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L3NjYW4uYyAgICAgICAgICAgICAgICAgICAg fCAxMzIgLS0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L3NjYW4uaCAgICAgICAgICAgICAgICAgICAg fCAgMjIgLQogZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEuYyAgICAgICAgICAgICAgICAgICAgIHwg ODA3IC0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEuaCAgICAgICAg ICAgICAgICAgICAgIHwgIDczIC0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L3RyYWNlcy5oICAgICAg ICAgICAgICAgICAgfCA1MDEgLS0tLS0tLS0tLS0KIGRyaXZlcnMvc3RhZ2luZy93Zngvd2Z4Lmgg ICAgICAgICAgICAgICAgICAgICB8IDE2NiAtLS0tCiAzOSBmaWxlcyBjaGFuZ2VkLCA4NDk2IGRl bGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvRG9jdW1l bnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9zaWxhYnMsd2Z4LnlhbWwK IGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L0tjb25maWcKIGRlbGV0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L01ha2VmaWxlCiBkZWxldGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9iaC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9z dGFnaW5nL3dmeC9iaC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9i dXMuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvYnVzX3NkaW8uYwog ZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvYnVzX3NwaS5jCiBkZWxldGUg bW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3J4LmMKIGRlbGV0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfcnguaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvc3RhZ2luZy93ZngvZGF0YV90eC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9z dGFnaW5nL3dmeC9kYXRhX3R4LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcv d2Z4L2RlYnVnLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L2RlYnVn LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L2Z3aW8uYwogZGVsZXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvZndpby5oCiBkZWxldGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfYXBpX2NtZC5oCiBkZWxldGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfYXBpX2dlbmVyYWwuaAogZGVsZXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvc3RhZ2luZy93ZngvaGlmX2FwaV9taWIuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvc3RhZ2luZy93ZngvaGlmX3J4LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0 YWdpbmcvd2Z4L2hpZl9yeC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dm eC9oaWZfdHguYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4 LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eF9taWIuYwog ZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4X21pYi5oCiBkZWxl dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9od2lvLmMKIGRlbGV0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L2h3aW8uaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvc3RhZ2luZy93Zngva2V5LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcv d2Z4L2tleS5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9tYWluLmMK IGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L21haW4uaAogZGVsZXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvcXVldWUuYwogZGVsZXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvc3RhZ2luZy93ZngvcXVldWUuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv c3RhZ2luZy93Zngvc2Nhbi5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dm eC9zY2FuLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L3N0YS5jCiBk ZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEuaAogZGVsZXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvdHJhY2VzLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL3N0YWdpbmcvd2Z4L3dmeC5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dm eC9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3NpbGFicyx3 ZngueWFtbCBiL2RyaXZlcnMvc3RhZ2luZy93ZngvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2Jp bmRpbmdzL25ldC93aXJlbGVzcy9zaWxhYnMsd2Z4LnlhbWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDUxMGVkZDEyZWQxOS4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2lu Zy93ZngvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9zaWxh YnMsd2Z4LnlhbWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotIyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpCi0jIENvcHlyaWdo dCAoYykgMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSVZQU1MIDEuMgotLS0tCi0K LSRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3dpcmVsZXNzL3NpbGFicyx3 ZngueWFtbCMKLSRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29y ZS55YW1sIwotCi10aXRsZTogU2lsaWNvbiBMYWJzIFdGeHh4IGRldmljZXRyZWUgYmluZGluZ3MK LQotbWFpbnRhaW5lcnM6Ci0gIC0gSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBz aWxhYnMuY29tPgotCi1kZXNjcmlwdGlvbjoKLSAgVGhlIFdGeHh4IGNoaXAgc2VyaWVzIGNhbiBi ZSBjb25uZWN0ZWQgdmlhIFNQSSBvciB2aWEgU0RJTy4KLQotICBGb3IgU0RJTyc6JwotCi0gICAg VGhlIGRyaXZlciBpcyBhYmxlIHRvIGRldGVjdCBhIFdGeHh4IGNoaXAgb24gU0RJTyBidXMgYnkg bWF0Y2hpbmcgaXRzIFZlbmRvcgotICAgIElEIGFuZCBQcm9kdWN0IElELiBIb3dldmVyLCBkcml2 ZXIgd2lsbCBvbmx5IHByb3ZpZGUgbGltaXRlZCBmZWF0dXJlcyBpbgotICAgIHRoaXMgY2FzZS4g VGh1cyBkZWNsYXJpbmcgV0Z4eHggY2hpcCBpbiBkZXZpY2UgdHJlZSBpcyByZWNvbW1lbmRlZCAo YW5kIG1heQotICAgIGJlY29tZSBtYW5kYXRvcnkgaW4gdGhlIGZ1dHVyZSkuCi0KLSAgICBJbiBh ZGRpdGlvbiwgaXQgaXMgcmVjb21tZW5kZWQgdG8gZGVjbGFyZSBhIG1tYy1wd3JzZXEgb24gU0RJ TyBob3N0IGFib3ZlCi0gICAgV0Z4LiBXaXRob3V0IGl0LCB5b3UgbWF5IGVuY291bnRlciBpc3N1 ZXMgd2l0aCB3YXJtIGJvb3QuIFRoZSBtbWMtcHdyc2VxCi0gICAgc2hvdWxkIGJlIGNvbXBhdGli bGUgd2l0aCBtbWMtcHdyc2VxLXNpbXBsZS4gUGxlYXNlIGNvbnN1bHQKLSAgICBEb2N1bWVudGF0 aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1wd3JzZXEtc2ltcGxlLnlhbWwgZm9yIG1v cmUKLSAgICBpbmZvcm1hdGlvbi4KLQotICBGb3IgU1BJJzonCi0KLSAgICBJbiBhZGQgb2YgdGhl IHByb3BlcnRpZXMgYmVsb3csIHBsZWFzZSBjb25zdWx0Ci0gICAgRG9jdW1lbnRhdGlvbi9kZXZp Y2V0cmVlL2JpbmRpbmdzL3NwaS9zcGktY29udHJvbGxlci55YW1sIGZvciBvcHRpb25hbCBTUEkK LSAgICByZWxhdGVkIHByb3BlcnRpZXMuCi0KLSAgTm90ZSB0aGF0IGluIGFkZCBvZiB0aGUgcHJv cGVydGllcyBiZWxvdywgdGhlIFdGeCBkcml2ZXIgYWxzbyBzdXBwb3J0cwotICBgbWFjLWFkZHJl c3NgIGFuZCBgbG9jYWwtbWFjLWFkZHJlc3NgIGFzIGRlc2NyaWJlZCBpbgotICBEb2N1bWVudGF0 aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2V0aGVybmV0LnR4dAotCi1wcm9wZXJ0aWVzOgot ICBjb21wYXRpYmxlOgotICAgIGNvbnN0OiBzaWxhYnMsd2YyMDAKLSAgcmVnOgotICAgIGRlc2Ny aXB0aW9uOgotICAgICAgV2hlbiB1c2VkIG9uIFNESU8gYnVzLCA8cmVnPiBtdXN0IGJlIHNldCB0 byAxLiBXaGVuIHVzZWQgb24gU1BJIGJ1cywgaXQgaXMKLSAgICAgIHRoZSBjaGlwIHNlbGVjdCBh ZGRyZXNzIG9mIHRoZSBkZXZpY2UgYXMgZGVmaW5lZCBpbiB0aGUgU1BJIGRldmljZXMKLSAgICAg IGJpbmRpbmdzLgotICAgIG1heEl0ZW1zOiAxCi0gIHNwaS1tYXgtZnJlcXVlbmN5OgotICAgIGRl c2NyaXB0aW9uOiAoU1BJIG9ubHkpIE1heGltdW0gU1BJIGNsb2NraW5nIHNwZWVkIG9mIGRldmlj ZSBpbiBIei4KLSAgICBtYXhJdGVtczogMQotICBpbnRlcnJ1cHRzOgotICAgIGRlc2NyaXB0aW9u OiBUaGUgaW50ZXJydXB0IGxpbmUuIFRyaWdnZXJzIElSUV9UWVBFX0xFVkVMX0hJR0ggYW5kCi0g ICAgICBJUlFfVFlQRV9FREdFX1JJU0lORyBhcmUgYm90aCBzdXBwb3J0ZWQgYnkgdGhlIGNoaXAg YW5kIHRoZSBkcml2ZXIuIFdoZW4KLSAgICAgIFNQSSBpcyB1c2VkLCB0aGlzIHByb3BlcnR5IGlz IHJlcXVpcmVkLiBXaGVuIFNESU8gaXMgdXNlZCwgdGhlICJpbi1iYW5kIgotICAgICAgaW50ZXJy dXB0IHByb3ZpZGVkIGJ5IHRoZSBTRElPIGJ1cyBpcyB1c2VkIHVubGVzcyBhbiBpbnRlcnJ1cHQg aXMgZGVmaW5lZAotICAgICAgaW4gdGhlIERldmljZSBUcmVlLgotICAgIG1heEl0ZW1zOiAxCi0g IHJlc2V0LWdwaW9zOgotICAgIGRlc2NyaXB0aW9uOiAoU1BJIG9ubHkpIFBoYW5kbGUgb2YgZ3Bp byB0aGF0IHdpbGwgYmUgdXNlZCB0byByZXNldCBjaGlwCi0gICAgICBkdXJpbmcgcHJvYmUuIFdp dGhvdXQgdGhpcyBwcm9wZXJ0eSwgeW91IG1heSBlbmNvdW50ZXIgaXNzdWVzIHdpdGggd2FybQot ICAgICAgYm9vdC4gKEZvciBsZWdhY3kgcHVycG9zZSwgdGhlIGdwaW8gaW4gaW52ZXJ0ZWQgd2hl biBjb21wYXRpYmxlID09Ci0gICAgICAic2lsYWJzLHdmeC1zcGkiKQotCi0gICAgICBGb3IgU0RJ TywgdGhlIHJlc2V0IGdwaW8gc2hvdWxkIGRlY2xhcmVkIHVzaW5nIGEgbW1jLXB3cnNlcS4KLSAg ICBtYXhJdGVtczogMQotICB3YWtldXAtZ3Bpb3M6Ci0gICAgZGVzY3JpcHRpb246IFBoYW5kbGUg b2YgZ3BpbyB0aGF0IHdpbGwgYmUgdXNlZCB0byB3YWtlLXVwIGNoaXAuIFdpdGhvdXQgdGhpcwot ICAgICAgcHJvcGVydHksIGRyaXZlciB3aWxsIGRpc2FibGUgbW9zdCBvZiBwb3dlciBzYXZpbmcg ZmVhdHVyZXMuCi0gICAgbWF4SXRlbXM6IDEKLSAgY29uZmlnLWZpbGU6Ci0gICAgZGVzY3JpcHRp b246IFVzZSBhbiBhbHRlcm5hdGl2ZSBmaWxlIGFzIFBEUy4gRGVmYXVsdCBpcyBgd2YyMDAucGRz YC4gT25seQotICAgICAgbmVjZXNzYXJ5IGZvciBkZXZlbG9wbWVudC9kZWJ1ZyBwdXJwb3NlLgot ICAgIG1heEl0ZW1zOiAxCi0KLXJlcXVpcmVkOgotICAtIGNvbXBhdGlibGUKLSAgLSByZWcKLQot ZXhhbXBsZXM6Ci0gIC0gfAotICAgICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4K LSAgICAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+Ci0K LSAgICBzcGkwIHsKLSAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0gICAgICAgICNzaXpl LWNlbGxzID0gPDA+OwotCi0gICAgICAgIHdmeEAwIHsKLSAgICAgICAgICAgIGNvbXBhdGlibGUg PSAic2lsYWJzLHdmMjAwIjsKLSAgICAgICAgICAgIHBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7 Ci0gICAgICAgICAgICBwaW5jdHJsLTAgPSA8JndmeF9pcnEgJndmeF9ncGlvcz47Ci0gICAgICAg ICAgICByZWcgPSA8MD47Ci0gICAgICAgICAgICBpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZncGlv IDE2IElSUV9UWVBFX0VER0VfUklTSU5HPjsKLSAgICAgICAgICAgIHdha2V1cC1ncGlvcyA9IDwm Z3BpbyAxMiBHUElPX0FDVElWRV9ISUdIPjsKLSAgICAgICAgICAgIHJlc2V0LWdwaW9zID0gPCZn cGlvIDEzIEdQSU9fQUNUSVZFX0xPVz47Ci0gICAgICAgICAgICBzcGktbWF4LWZyZXF1ZW5jeSA9 IDw0MjAwMDAwMD47Ci0gICAgICAgIH07Ci0gICAgfTsKLQotICAtIHwKLSAgICAjaW5jbHVkZSA8 ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+Ci0gICAgI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVy cnVwdC1jb250cm9sbGVyL2lycS5oPgotCi0gICAgd2Z4X3B3cnNlcTogd2Z4X3B3cnNlcSB7Ci0g ICAgICAgIGNvbXBhdGlibGUgPSAibW1jLXB3cnNlcS1zaW1wbGUiOwotICAgICAgICBwaW5jdHJs LW5hbWVzID0gImRlZmF1bHQiOwotICAgICAgICBwaW5jdHJsLTAgPSA8JndmeF9yZXNldD47Ci0g ICAgICAgIHJlc2V0LWdwaW9zID0gPCZncGlvIDEzIEdQSU9fQUNUSVZFX0xPVz47Ci0gICAgfTsK LQotICAgIG1tYzAgewotICAgICAgICBtbWMtcHdyc2VxID0gPCZ3ZnhfcHdyc2VxPjsKLSAgICAg ICAgI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0gICAgICAgICNzaXplLWNlbGxzID0gPDA+OwotCi0g ICAgICAgIG1tY0AxIHsKLSAgICAgICAgICAgIGNvbXBhdGlibGUgPSAic2lsYWJzLHdmMjAwIjsK LSAgICAgICAgICAgIHBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0gICAgICAgICAgICBwaW5j dHJsLTAgPSA8JndmeF93YWtldXA+OwotICAgICAgICAgICAgcmVnID0gPDE+OwotICAgICAgICAg ICAgd2FrZXVwLWdwaW9zID0gPCZncGlvIDEyIEdQSU9fQUNUSVZFX0hJR0g+OwotICAgICAgICB9 OwotICAgIH07Ci0uLi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvS2NvbmZpZyBi L2RyaXZlcnMvc3RhZ2luZy93ZngvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggODNlZTRkMGNhOGM2Li4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9L Y29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1jb25maWcgV0ZYCi0JdHJpc3Rh dGUgIlNpbGljb24gTGFicyB3aXJlbGVzcyBjaGlwcyBXRjIwMCBhbmQgZnVydGhlciIKLQlkZXBl bmRzIG9uIE1BQzgwMjExCi0JZGVwZW5kcyBvbiBNTUMgfHwgIU1NQyAjIGRvIG5vdCBhbGxvdyBX Rlg9eSBpZiBNTUM9bQotCWRlcGVuZHMgb24gKFNQSSB8fCBNTUMpCi0JaGVscAotCSAgVGhpcyBp cyBhIGRyaXZlciBmb3IgU2lsaWNvbnMgTGFicyBXRnh4eCBzZXJpZXMgKFdGMjAwIGFuZCBmdXJ0 aGVyKQotCSAgY2hpcHNldHMuIFRoaXMgY2hpcCBjYW4gYmUgZm91bmQgb24gU1BJIG9yIFNESU8g YnVzZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L01ha2VmaWxlIGIvZHJpdmVy cy9zdGFnaW5nL3dmeC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUw Y2M5ODJjZWFiLi4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9NYWtlZmls ZQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAKLQotIyBOZWNlc3NhcnkgZm9yIENSRUFURV9UUkFDRV9QT0lOVFMKLUNGTEFH U19kZWJ1Zy5vID0gLUkkKHNyYykKLQotd2Z4LXkgOj0gXAotCWJoLm8gXAotCWh3aW8ubyBcCi0J Zndpby5vIFwKLQloaWZfdHhfbWliLm8gXAotCWhpZl90eC5vIFwKLQloaWZfcngubyBcCi0JcXVl dWUubyBcCi0JZGF0YV90eC5vIFwKLQlkYXRhX3J4Lm8gXAotCXNjYW4ubyBcCi0Jc3RhLm8gXAot CWtleS5vIFwKLQltYWluLm8gXAotCXN0YS5vIFwKLQlkZWJ1Zy5vCi13ZngtJChDT05GSUdfU1BJ KSArPSBidXNfc3BpLm8KLXdmeC0kKHN1YnN0IG0seSwkKENPTkZJR19NTUMpKSArPSBidXNfc2Rp by5vCi0KLW9iai0kKENPTkZJR19XRlgpICs9IHdmeC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0 YWdpbmcvd2Z4L2JoLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2JoLmMKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IGVkNTNkMGI0NTU5Mi4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMv c3RhZ2luZy93ZngvYmguYworKysgL2Rldi9udWxsCkBAIC0xLDMzMyArMCwwIEBACi0vLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0vKgotICogSW50ZXJydXB0IGJvdHRv bSBoYWxmIChCSCkuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFi b3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCi0gKi8K LSNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+Ci0jaW5jbHVkZSA8bmV0L21hYzgwMjEx Lmg+Ci0KLSNpbmNsdWRlICJiaC5oIgotI2luY2x1ZGUgIndmeC5oIgotI2luY2x1ZGUgImh3aW8u aCIKLSNpbmNsdWRlICJ0cmFjZXMuaCIKLSNpbmNsdWRlICJoaWZfcnguaCIKLSNpbmNsdWRlICJo aWZfYXBpX2NtZC5oIgotCi1zdGF0aWMgdm9pZCBkZXZpY2Vfd2FrZXVwKHN0cnVjdCB3ZnhfZGV2 ICp3ZGV2KQotewotCWludCBtYXhfcmV0cnkgPSAzOwotCi0JaWYgKCF3ZGV2LT5wZGF0YS5ncGlv X3dha2V1cCkKLQkJcmV0dXJuOwotCWlmIChncGlvZF9nZXRfdmFsdWVfY2Fuc2xlZXAod2Rldi0+ cGRhdGEuZ3Bpb193YWtldXApID4gMCkKLQkJcmV0dXJuOwotCi0JaWYgKHdmeF9hcGlfb2xkZXJf dGhhbih3ZGV2LCAxLCA0KSkgewotCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAod2Rldi0+cGRh dGEuZ3Bpb193YWtldXAsIDEpOwotCQlpZiAoIWNvbXBsZXRpb25fZG9uZSgmd2Rldi0+aGlmLmN0 cmxfcmVhZHkpKQotCQkJdXNsZWVwX3JhbmdlKDIwMDAsIDI1MDApOwotCQlyZXR1cm47Ci0JfQot CWZvciAoOzspIHsKLQkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHdkZXYtPnBkYXRhLmdwaW9f d2FrZXVwLCAxKTsKLQkJLy8gY29tcGxldGlvbi5oIGRvZXMgbm90IHByb3ZpZGUgYW55IGZ1bmN0 aW9uIHRvIHdhaXQKLQkJLy8gY29tcGxldGlvbiB3aXRob3V0IGNvbnN1bWUgaXQgKGEga2luZCBv ZgotCQkvLyB3YWl0X2Zvcl9jb21wbGV0aW9uX2RvbmVfdGltZW91dCgpKS4gU28gd2UgaGF2ZSB0 byBlbXVsYXRlCi0JCS8vIGl0LgotCQlpZiAod2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ3 ZGV2LT5oaWYuY3RybF9yZWFkeSwKLQkJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMikpKSB7Ci0JCQlj b21wbGV0ZSgmd2Rldi0+aGlmLmN0cmxfcmVhZHkpOwotCQkJcmV0dXJuOwotCQl9IGVsc2UgaWYg KG1heF9yZXRyeS0tID4gMCkgewotCQkJLy8gT2xkZXIgZmlybXdhcmVzIGhhdmUgYSByYWNlIGlu IHNsZWVwL3dha2UtdXAgcHJvY2Vzcy4KLQkJCS8vIFJlZG8gdGhlIHByb2Nlc3MgaXMgc3VmZmlj aWVudCB0byB1bmZyZWV6ZSB0aGUKLQkJCS8vIGNoaXAuCi0JCQlkZXZfZXJyKHdkZXYtPmRldiwg InRpbWVvdXQgd2hpbGUgd2FrZSB1cCBjaGlwXG4iKTsKLQkJCWdwaW9kX3NldF92YWx1ZV9jYW5z bGVlcCh3ZGV2LT5wZGF0YS5ncGlvX3dha2V1cCwgMCk7Ci0JCQl1c2xlZXBfcmFuZ2UoMjAwMCwg MjUwMCk7Ci0JCX0gZWxzZSB7Ci0JCQlkZXZfZXJyKHdkZXYtPmRldiwgIm1heCB3YWtlLXVwIHJl dHJpZXMgcmVhY2hlZFxuIik7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lk IGRldmljZV9yZWxlYXNlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQotewotCWlmICghd2Rldi0+cGRh dGEuZ3Bpb193YWtldXApCi0JCXJldHVybjsKLQotCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcCh3 ZGV2LT5wZGF0YS5ncGlvX3dha2V1cCwgMCk7Ci19Ci0KLXN0YXRpYyBpbnQgcnhfaGVscGVyKHN0 cnVjdCB3ZnhfZGV2ICp3ZGV2LCBzaXplX3QgcmVhZF9sZW4sIGludCAqaXNfY25mKQotewotCXN0 cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGhpZl9tc2cgKmhpZjsKLQlzaXplX3QgYWxsb2Nf bGVuOwotCXNpemVfdCBjb21wdXRlZF9sZW47Ci0JaW50IHJlbGVhc2VfY291bnQ7Ci0JaW50IHBp Z2d5YmFjayA9IDA7Ci0KLQlXQVJOKHJlYWRfbGVuID4gcm91bmRfZG93bigweEZGRiwgMikgKiBz aXplb2YodTE2KSwKLQkgICAgICIlczogcmVxdWVzdCBleGNlZWQgV0Z4IGNhcGFiaWxpdHkiLCBf X2Z1bmNfXyk7Ci0KLQkvLyBBZGQgMiB0byB0YWtlIGludG8gYWNjb3VudCBwaWdneWJhY2sgc2l6 ZQotCWFsbG9jX2xlbiA9IHdkZXYtPmh3YnVzX29wcy0+YWxpZ25fc2l6ZSh3ZGV2LT5od2J1c19w cml2LCByZWFkX2xlbiArIDIpOwotCXNrYiA9IGRldl9hbGxvY19za2IoYWxsb2NfbGVuKTsKLQlp ZiAoIXNrYikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAod2Z4X2RhdGFfcmVhZCh3ZGV2LCBz a2ItPmRhdGEsIGFsbG9jX2xlbikpCi0JCWdvdG8gZXJyOwotCi0JcGlnZ3liYWNrID0gbGUxNl90 b19jcHVwKChfX2xlMTYgKikoc2tiLT5kYXRhICsgYWxsb2NfbGVuIC0gMikpOwotCV90cmFjZV9w aWdneWJhY2socGlnZ3liYWNrLCBmYWxzZSk7Ci0KLQloaWYgPSAoc3RydWN0IGhpZl9tc2cgKilz a2ItPmRhdGE7Ci0JV0FSTihoaWYtPmVuY3J5cHRlZCAmIDB4MywgImVuY3J5cHRpb24gaXMgdW5z dXBwb3J0ZWQiKTsKLQlpZiAoV0FSTihyZWFkX2xlbiA8IHNpemVvZihzdHJ1Y3QgaGlmX21zZyks ICJjb3JydXB0ZWQgcmVhZCIpKQotCQlnb3RvIGVycjsKLQljb21wdXRlZF9sZW4gPSBsZTE2X3Rv X2NwdShoaWYtPmxlbik7Ci0JY29tcHV0ZWRfbGVuID0gcm91bmRfdXAoY29tcHV0ZWRfbGVuLCAy KTsKLQlpZiAoY29tcHV0ZWRfbGVuICE9IHJlYWRfbGVuKSB7Ci0JCWRldl9lcnIod2Rldi0+ZGV2 LCAiaW5jb25zaXN0ZW50IG1lc3NhZ2UgbGVuZ3RoOiAlenUgIT0gJXp1XG4iLAotCQkJY29tcHV0 ZWRfbGVuLCByZWFkX2xlbik7Ci0JCXByaW50X2hleF9kdW1wKEtFUk5fSU5GTywgImhpZjogIiwg RFVNUF9QUkVGSVhfT0ZGU0VULCAxNiwgMSwKLQkJCSAgICAgICBoaWYsIHJlYWRfbGVuLCB0cnVl KTsKLQkJZ290byBlcnI7Ci0JfQotCi0JaWYgKCEoaGlmLT5pZCAmIEhJRl9JRF9JU19JTkRJQ0FU SU9OKSkgewotCQkoKmlzX2NuZikrKzsKLQkJaWYgKGhpZi0+aWQgPT0gSElGX0NORl9JRF9NVUxU SV9UUkFOU01JVCkKLQkJCXJlbGVhc2VfY291bnQgPSAoKHN0cnVjdCBoaWZfY25mX211bHRpX3Ry YW5zbWl0ICopaGlmLT5ib2R5KS0+bnVtX3R4X2NvbmZzOwotCQllbHNlCi0JCQlyZWxlYXNlX2Nv dW50ID0gMTsKLQkJV0FSTih3ZGV2LT5oaWYudHhfYnVmZmVyc191c2VkIDwgcmVsZWFzZV9jb3Vu dCwgImNvcnJ1cHRlZCBidWZmZXIgY291bnRlciIpOwotCQl3ZGV2LT5oaWYudHhfYnVmZmVyc191 c2VkIC09IHJlbGVhc2VfY291bnQ7Ci0JfQotCV90cmFjZV9oaWZfcmVjdihoaWYsIHdkZXYtPmhp Zi50eF9idWZmZXJzX3VzZWQpOwotCi0JaWYgKGhpZi0+aWQgIT0gSElGX0lORF9JRF9FWENFUFRJ T04gJiYgaGlmLT5pZCAhPSBISUZfSU5EX0lEX0VSUk9SKSB7Ci0JCWlmIChoaWYtPnNlcW51bSAh PSB3ZGV2LT5oaWYucnhfc2VxbnVtKQotCQkJZGV2X3dhcm4od2Rldi0+ZGV2LCAid3JvbmcgbWVz c2FnZSBzZXF1ZW5jZTogJWQgIT0gJWRcbiIsCi0JCQkJIGhpZi0+c2VxbnVtLCB3ZGV2LT5oaWYu cnhfc2VxbnVtKTsKLQkJd2Rldi0+aGlmLnJ4X3NlcW51bSA9IChoaWYtPnNlcW51bSArIDEpICUg KEhJRl9DT1VOVEVSX01BWCArIDEpOwotCX0KLQotCXNrYl9wdXQoc2tiLCBsZTE2X3RvX2NwdSho aWYtPmxlbikpOwotCS8vIHdmeF9oYW5kbGVfcnggdGFrZXMgY2FyZSBvbiBTS0IgbGl2ZXRpbWUK LQl3ZnhfaGFuZGxlX3J4KHdkZXYsIHNrYik7Ci0JaWYgKCF3ZGV2LT5oaWYudHhfYnVmZmVyc191 c2VkKQotCQl3YWtlX3VwKCZ3ZGV2LT5oaWYudHhfYnVmZmVyc19lbXB0eSk7Ci0KLQlyZXR1cm4g cGlnZ3liYWNrOwotCi1lcnI6Ci0JaWYgKHNrYikKLQkJZGV2X2tmcmVlX3NrYihza2IpOwotCXJl dHVybiAtRUlPOwotfQotCi1zdGF0aWMgaW50IGJoX3dvcmtfcngoc3RydWN0IHdmeF9kZXYgKndk ZXYsIGludCBtYXhfbXNnLCBpbnQgKm51bV9jbmYpCi17Ci0Jc2l6ZV90IGxlbjsKLQlpbnQgaTsK LQlpbnQgY3RybF9yZWcsIHBpZ2d5YmFjazsKLQotCXBpZ2d5YmFjayA9IDA7Ci0JZm9yIChpID0g MDsgaSA8IG1heF9tc2c7IGkrKykgewotCQlpZiAocGlnZ3liYWNrICYgQ1RSTF9ORVhUX0xFTl9N QVNLKQotCQkJY3RybF9yZWcgPSBwaWdneWJhY2s7Ci0JCWVsc2UgaWYgKHRyeV93YWl0X2Zvcl9j b21wbGV0aW9uKCZ3ZGV2LT5oaWYuY3RybF9yZWFkeSkpCi0JCQljdHJsX3JlZyA9IGF0b21pY194 Y2hnKCZ3ZGV2LT5oaWYuY3RybF9yZWcsIDApOwotCQllbHNlCi0JCQljdHJsX3JlZyA9IDA7Ci0J CWlmICghKGN0cmxfcmVnICYgQ1RSTF9ORVhUX0xFTl9NQVNLKSkKLQkJCXJldHVybiBpOwotCQkv LyBjdHJsX3JlZyB1bml0cyBhcmUgMTZiaXRzIHdvcmRzCi0JCWxlbiA9IChjdHJsX3JlZyAmIENU UkxfTkVYVF9MRU5fTUFTSykgKiAyOwotCQlwaWdneWJhY2sgPSByeF9oZWxwZXIod2RldiwgbGVu LCBudW1fY25mKTsKLQkJaWYgKHBpZ2d5YmFjayA8IDApCi0JCQlyZXR1cm4gaTsKLQkJaWYgKCEo cGlnZ3liYWNrICYgQ1RSTF9XTEFOX1JFQURZKSkKLQkJCWRldl9lcnIod2Rldi0+ZGV2LCAidW5l eHBlY3RlZCBwaWdneWJhY2sgdmFsdWU6IHJlYWR5IGJpdCBub3Qgc2V0OiAlMDR4XG4iLAotCQkJ CXBpZ2d5YmFjayk7Ci0JfQotCWlmIChwaWdneWJhY2sgJiBDVFJMX05FWFRfTEVOX01BU0spIHsK LQkJY3RybF9yZWcgPSBhdG9taWNfeGNoZygmd2Rldi0+aGlmLmN0cmxfcmVnLCBwaWdneWJhY2sp OwotCQljb21wbGV0ZSgmd2Rldi0+aGlmLmN0cmxfcmVhZHkpOwotCQlpZiAoY3RybF9yZWcpCi0J CQlkZXZfZXJyKHdkZXYtPmRldiwgInVuZXhwZWN0ZWQgSVJRIGhhcHBlbmVkOiAlMDR4LyUwNHhc biIsCi0JCQkJY3RybF9yZWcsIHBpZ2d5YmFjayk7Ci0JfQotCXJldHVybiBpOwotfQotCi1zdGF0 aWMgdm9pZCB0eF9oZWxwZXIoc3RydWN0IHdmeF9kZXYgKndkZXYsIHN0cnVjdCBoaWZfbXNnICpo aWYpCi17Ci0JaW50IHJldDsKLQl2b2lkICpkYXRhOwotCWJvb2wgaXNfZW5jcnlwdGVkID0gZmFs c2U7Ci0Jc2l6ZV90IGxlbiA9IGxlMTZfdG9fY3B1KGhpZi0+bGVuKTsKLQotCVdBUk4obGVuIDwg c2l6ZW9mKCpoaWYpLCAidHJ5IHRvIHNlbmQgY29ycnVwdGVkIGRhdGEiKTsKLQotCWhpZi0+c2Vx bnVtID0gd2Rldi0+aGlmLnR4X3NlcW51bTsKLQl3ZGV2LT5oaWYudHhfc2VxbnVtID0gKHdkZXYt PmhpZi50eF9zZXFudW0gKyAxKSAlIChISUZfQ09VTlRFUl9NQVggKyAxKTsKLQotCWRhdGEgPSBo aWY7Ci0JV0FSTihsZW4gPiB3ZGV2LT5od19jYXBzLnNpemVfaW5wX2NoX2J1ZiwKLQkgICAgICIl czogcmVxdWVzdCBleGNlZWQgV0Z4IGNhcGFiaWxpdHk6ICV6dSA+ICVkXG4iLCBfX2Z1bmNfXywK LQkgICAgIGxlbiwgd2Rldi0+aHdfY2Fwcy5zaXplX2lucF9jaF9idWYpOwotCWxlbiA9IHdkZXYt Pmh3YnVzX29wcy0+YWxpZ25fc2l6ZSh3ZGV2LT5od2J1c19wcml2LCBsZW4pOwotCXJldCA9IHdm eF9kYXRhX3dyaXRlKHdkZXYsIGRhdGEsIGxlbik7Ci0JaWYgKHJldCkKLQkJZ290byBlbmQ7Ci0K LQl3ZGV2LT5oaWYudHhfYnVmZmVyc191c2VkKys7Ci0JX3RyYWNlX2hpZl9zZW5kKGhpZiwgd2Rl di0+aGlmLnR4X2J1ZmZlcnNfdXNlZCk7Ci1lbmQ6Ci0JaWYgKGlzX2VuY3J5cHRlZCkKLQkJa2Zy ZWUoZGF0YSk7Ci19Ci0KLXN0YXRpYyBpbnQgYmhfd29ya190eChzdHJ1Y3Qgd2Z4X2RldiAqd2Rl diwgaW50IG1heF9tc2cpCi17Ci0Jc3RydWN0IGhpZl9tc2cgKmhpZjsKLQlpbnQgaTsKLQotCWZv ciAoaSA9IDA7IGkgPCBtYXhfbXNnOyBpKyspIHsKLQkJaGlmID0gTlVMTDsKLQkJaWYgKHdkZXYt PmhpZi50eF9idWZmZXJzX3VzZWQgPCB3ZGV2LT5od19jYXBzLm51bV9pbnBfY2hfYnVmcykgewot CQkJaWYgKHRyeV93YWl0X2Zvcl9jb21wbGV0aW9uKCZ3ZGV2LT5oaWZfY21kLnJlYWR5KSkgewot CQkJCVdBUk4oIW11dGV4X2lzX2xvY2tlZCgmd2Rldi0+aGlmX2NtZC5sb2NrKSwgImRhdGEgbG9j a2luZyBlcnJvciIpOwotCQkJCWhpZiA9IHdkZXYtPmhpZl9jbWQuYnVmX3NlbmQ7Ci0JCQl9IGVs c2UgewotCQkJCWhpZiA9IHdmeF90eF9xdWV1ZXNfZ2V0KHdkZXYpOwotCQkJfQotCQl9Ci0JCWlm ICghaGlmKQotCQkJcmV0dXJuIGk7Ci0JCXR4X2hlbHBlcih3ZGV2LCBoaWYpOwotCX0KLQlyZXR1 cm4gaTsKLX0KLQotLyogSW4gU0RJTyBtb2RlLCBpdCBpcyBuZWNlc3NhcnkgdG8gbWFrZSBhbiBh Y2Nlc3MgdG8gYSByZWdpc3RlciB0byBhY2tub3dsZWRnZQotICogbGFzdCByZWNlaXZlZCBtZXNz YWdlLiBJdCBjb3VsZCBiZSBwb3NzaWJsZSB0byByZXN0cmljdCB0aGlzIGFja25vd2xlZGdlIHRv Ci0gKiBTRElPIG1vZGUgYW5kIG9ubHkgaWYgbGFzdCBvcGVyYXRpb24gd2FzIHJ4LgotICovCi1z dGF0aWMgdm9pZCBhY2tfc2Rpb19kYXRhKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQotewotCXUzMiBj ZmdfcmVnOwotCi0JY29uZmlnX3JlZ19yZWFkKHdkZXYsICZjZmdfcmVnKTsKLQlpZiAoY2ZnX3Jl ZyAmIDB4RkYpIHsKLQkJZGV2X3dhcm4od2Rldi0+ZGV2LCAiY2hpcCByZXBvcnRzIGVycm9yczog JTAyeFxuIiwKLQkJCSBjZmdfcmVnICYgMHhGRik7Ci0JCWNvbmZpZ19yZWdfd3JpdGVfYml0cyh3 ZGV2LCAweEZGLCAweDAwKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGJoX3dvcmsoc3RydWN0IHdv cmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gY29udGFpbmVyX29m KHdvcmssIHN0cnVjdCB3ZnhfZGV2LCBoaWYuYmgpOwotCWludCBzdGF0c19yZXEgPSAwLCBzdGF0 c19jbmYgPSAwLCBzdGF0c19pbmQgPSAwOwotCWJvb2wgcmVsZWFzZV9jaGlwID0gZmFsc2UsIGxh c3Rfb3BfaXNfcnggPSBmYWxzZTsKLQlpbnQgbnVtX3R4LCBudW1fcng7Ci0KLQlkZXZpY2Vfd2Fr ZXVwKHdkZXYpOwotCWRvIHsKLQkJbnVtX3R4ID0gYmhfd29ya190eCh3ZGV2LCAzMik7Ci0JCXN0 YXRzX3JlcSArPSBudW1fdHg7Ci0JCWlmIChudW1fdHgpCi0JCQlsYXN0X29wX2lzX3J4ID0gZmFs c2U7Ci0JCW51bV9yeCA9IGJoX3dvcmtfcngod2RldiwgMzIsICZzdGF0c19jbmYpOwotCQlzdGF0 c19pbmQgKz0gbnVtX3J4OwotCQlpZiAobnVtX3J4KQotCQkJbGFzdF9vcF9pc19yeCA9IHRydWU7 Ci0JfSB3aGlsZSAobnVtX3J4IHx8IG51bV90eCk7Ci0Jc3RhdHNfaW5kIC09IHN0YXRzX2NuZjsK LQotCWlmIChsYXN0X29wX2lzX3J4KQotCQlhY2tfc2Rpb19kYXRhKHdkZXYpOwotCWlmICghd2Rl di0+aGlmLnR4X2J1ZmZlcnNfdXNlZCAmJiAhd29ya19wZW5kaW5nKHdvcmspKSB7Ci0JCWRldmlj ZV9yZWxlYXNlKHdkZXYpOwotCQlyZWxlYXNlX2NoaXAgPSB0cnVlOwotCX0KLQlfdHJhY2VfYmhf c3RhdHMoc3RhdHNfaW5kLCBzdGF0c19yZXEsIHN0YXRzX2NuZiwKLQkJCXdkZXYtPmhpZi50eF9i dWZmZXJzX3VzZWQsIHJlbGVhc2VfY2hpcCk7Ci19Ci0KLS8qCi0gKiBBbiBJUlEgZnJvbSBjaGlw IGRpZCBvY2N1cgotICovCi12b2lkIHdmeF9iaF9yZXF1ZXN0X3J4KHN0cnVjdCB3ZnhfZGV2ICp3 ZGV2KQotewotCXUzMiBjdXIsIHByZXY7Ci0KLQljb250cm9sX3JlZ19yZWFkKHdkZXYsICZjdXIp OwotCXByZXYgPSBhdG9taWNfeGNoZygmd2Rldi0+aGlmLmN0cmxfcmVnLCBjdXIpOwotCWNvbXBs ZXRlKCZ3ZGV2LT5oaWYuY3RybF9yZWFkeSk7Ci0JcXVldWVfd29yayhzeXN0ZW1faGlnaHByaV93 cSwgJndkZXYtPmhpZi5iaCk7Ci0KLQlpZiAoIShjdXIgJiBDVFJMX05FWFRfTEVOX01BU0spKQot CQlkZXZfZXJyKHdkZXYtPmRldiwgInVuZXhwZWN0ZWQgY29udHJvbCByZWdpc3RlciB2YWx1ZTog bGVuZ3RoIGZpZWxkIGlzIDA6ICUwNHhcbiIsCi0JCQljdXIpOwotCWlmIChwcmV2ICE9IDApCi0J CWRldl9lcnIod2Rldi0+ZGV2LCAicmVjZWl2ZWQgSVJRIGJ1dCBwcmV2aW91cyBkYXRhIHdhcyBu b3QgKHlldCkgcmVhZDogJTA0eC8lMDR4XG4iLAotCQkJcHJldiwgY3VyKTsKLX0KLQotLyoKLSAq IERyaXZlciB3YW50IHRvIHNlbmQgZGF0YQotICovCi12b2lkIHdmeF9iaF9yZXF1ZXN0X3R4KHN0 cnVjdCB3ZnhfZGV2ICp3ZGV2KQotewotCXF1ZXVlX3dvcmsoc3lzdGVtX2hpZ2hwcmlfd3EsICZ3 ZGV2LT5oaWYuYmgpOwotfQotCi0vKgotICogSWYgSVJRIGlzIG5vdCBhdmFpbGFibGUsIHRoaXMg ZnVuY3Rpb24gYWxsb3cgdG8gbWFudWFsbHkgcG9sbCB0aGUgY29udHJvbAotICogcmVnaXN0ZXIg YW5kIHNpbXVsYXRlIGFuIElSUSBhaGVuIGFuIGV2ZW50IGhhcHBlbmVkLgotICoKLSAqIE5vdGUg dGhhdCB0aGUgZGV2aWNlIGhhcyBhIGJ1ZzogSWYgYW4gSVJRIHJhaXNlIHdoaWxlIGhvc3QgcmVh ZCBjb250cm9sCi0gKiByZWdpc3RlciwgdGhlIElSUSBpcyBsb3N0LiBTbywgdXNlIHRoaXMgZnVu Y3Rpb24gY2FyZWZ1bGx5IChvbmx5IGR1aW5nCi0gKiBkZXZpY2UgaW5pdGlhbGlzYXRpb24pLgot ICovCi12b2lkIHdmeF9iaF9wb2xsX2lycShzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKLXsKLQlrdGlt ZV90IG5vdywgc3RhcnQ7Ci0JdTMyIHJlZzsKLQotCVdBUk4oIXdkZXYtPnBvbGxfaXJxLCAidW5l eHBlY3RlZCBJUlEgcG9sbGluZyBjYW4gbWFzayBJUlEiKTsKLQlzdGFydCA9IGt0aW1lX2dldCgp OwotCWZvciAoOzspIHsKLQkJY29udHJvbF9yZWdfcmVhZCh3ZGV2LCAmcmVnKTsKLQkJbm93ID0g a3RpbWVfZ2V0KCk7Ci0JCWlmIChyZWcgJiAweEZGRikKLQkJCWJyZWFrOwotCQlpZiAoa3RpbWVf YWZ0ZXIobm93LCBrdGltZV9hZGRfbXMoc3RhcnQsIDEwMDApKSkgewotCQkJZGV2X2Vycih3ZGV2 LT5kZXYsICJ0aW1lIG91dCB3aGlsZSBwb2xsaW5nIGNvbnRyb2wgcmVnaXN0ZXJcbiIpOwotCQkJ cmV0dXJuOwotCQl9Ci0JCXVkZWxheSgyMDApOwotCX0KLQl3ZnhfYmhfcmVxdWVzdF9yeCh3ZGV2 KTsKLX0KLQotdm9pZCB3ZnhfYmhfcmVnaXN0ZXIoc3RydWN0IHdmeF9kZXYgKndkZXYpCi17Ci0J SU5JVF9XT1JLKCZ3ZGV2LT5oaWYuYmgsIGJoX3dvcmspOwotCWluaXRfY29tcGxldGlvbigmd2Rl di0+aGlmLmN0cmxfcmVhZHkpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJndkZXYtPmhpZi50eF9i dWZmZXJzX2VtcHR5KTsKLX0KLQotdm9pZCB3ZnhfYmhfdW5yZWdpc3RlcihzdHJ1Y3Qgd2Z4X2Rl diAqd2RldikKLXsKLQlmbHVzaF93b3JrKCZ3ZGV2LT5oaWYuYmgpOwotfQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9zdGFnaW5nL3dmeC9iaC5oIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9iaC5oCmRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGM0OTMyOWUyMmEuLjAwMDAwMDAwMDAwMAotLS0g YS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2JoLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBA Ci0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCi0vKgotICogSW50 ZXJydXB0IGJvdHRvbSBoYWxmLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxp Y29uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3Nv bgotICovCi0jaWZuZGVmIFdGWF9CSF9ICi0jZGVmaW5lIFdGWF9CSF9ICi0KLSNpbmNsdWRlIDxs aW51eC9hdG9taWMuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgv d29ya3F1ZXVlLmg+Ci0KLXN0cnVjdCB3ZnhfZGV2OwotCi1zdHJ1Y3Qgd2Z4X2hpZiB7Ci0Jc3Ry dWN0IHdvcmtfc3RydWN0IGJoOwotCXN0cnVjdCBjb21wbGV0aW9uIGN0cmxfcmVhZHk7Ci0Jd2Fp dF9xdWV1ZV9oZWFkX3QgdHhfYnVmZmVyc19lbXB0eTsKLQlhdG9taWNfdCBjdHJsX3JlZzsKLQlp bnQgcnhfc2VxbnVtOwotCWludCB0eF9zZXFudW07Ci0JaW50IHR4X2J1ZmZlcnNfdXNlZDsKLX07 Ci0KLXZvaWQgd2Z4X2JoX3JlZ2lzdGVyKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KTsKLXZvaWQgd2Z4 X2JoX3VucmVnaXN0ZXIoc3RydWN0IHdmeF9kZXYgKndkZXYpOwotdm9pZCB3ZnhfYmhfcmVxdWVz dF9yeChzdHJ1Y3Qgd2Z4X2RldiAqd2Rldik7Ci12b2lkIHdmeF9iaF9yZXF1ZXN0X3R4KHN0cnVj dCB3ZnhfZGV2ICp3ZGV2KTsKLXZvaWQgd2Z4X2JoX3BvbGxfaXJxKHN0cnVjdCB3ZnhfZGV2ICp3 ZGV2KTsKLQotI2VuZGlmIC8qIFdGWF9CSF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdp bmcvd2Z4L2J1cy5oIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9idXMuaApkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggY2EwNGIzZGE2MjA0Li4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9z dGFnaW5nL3dmeC9idXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KLS8qCi0gKiBDb21tb24gYnVzIGFi c3RyYWN0aW9uIGxheWVyLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxpY29u IExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3Nvbgot ICovCi0jaWZuZGVmIFdGWF9CVVNfSAotI2RlZmluZSBXRlhfQlVTX0gKLQotI2luY2x1ZGUgPGxp bnV4L21tYy9zZGlvX2Z1bmMuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0KLSNkZWZp bmUgV0ZYX1JFR19DT05GSUcgICAgICAgIDB4MAotI2RlZmluZSBXRlhfUkVHX0NPTlRST0wgICAg ICAgMHgxCi0jZGVmaW5lIFdGWF9SRUdfSU5fT1VUX1FVRVVFICAweDIKLSNkZWZpbmUgV0ZYX1JF R19BSEJfRFBPUlQgICAgIDB4MwotI2RlZmluZSBXRlhfUkVHX0JBU0VfQUREUiAgICAgMHg0Ci0j ZGVmaW5lIFdGWF9SRUdfU1JBTV9EUE9SVCAgICAweDUKLSNkZWZpbmUgV0ZYX1JFR19TRVRfR0VO X1JfVyAgIDB4NgotI2RlZmluZSBXRlhfUkVHX0ZSQU1FX09VVCAgICAgMHg3Ci0KLXN0cnVjdCBo d2J1c19vcHMgewotCWludCAoKmNvcHlfZnJvbV9pbykodm9pZCAqYnVzX3ByaXYsIHVuc2lnbmVk IGludCBhZGRyLAotCQkJICAgIHZvaWQgKmRzdCwgc2l6ZV90IGNvdW50KTsKLQlpbnQgKCpjb3B5 X3RvX2lvKSh2b2lkICpidXNfcHJpdiwgdW5zaWduZWQgaW50IGFkZHIsCi0JCQkgIGNvbnN0IHZv aWQgKnNyYywgc2l6ZV90IGNvdW50KTsKLQlpbnQgKCppcnFfc3Vic2NyaWJlKSh2b2lkICpidXNf cHJpdik7Ci0JaW50ICgqaXJxX3Vuc3Vic2NyaWJlKSh2b2lkICpidXNfcHJpdik7Ci0Jdm9pZCAo KmxvY2spKHZvaWQgKmJ1c19wcml2KTsKLQl2b2lkICgqdW5sb2NrKSh2b2lkICpidXNfcHJpdik7 Ci0Jc2l6ZV90ICgqYWxpZ25fc2l6ZSkodm9pZCAqYnVzX3ByaXYsIHNpemVfdCBzaXplKTsKLX07 Ci0KLWV4dGVybiBzdHJ1Y3Qgc2Rpb19kcml2ZXIgd2Z4X3NkaW9fZHJpdmVyOwotZXh0ZXJuIHN0 cnVjdCBzcGlfZHJpdmVyIHdmeF9zcGlfZHJpdmVyOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvc3RhZ2luZy93ZngvYnVzX3NkaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvYnVzX3Nk aW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA2ZDdlMWViZTljLi4wMDAwMDAw MDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9idXNfc2Rpby5jCisrKyAvZGV2L251bGwK QEAgLTEsMjY5ICswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9u bHkKLS8qCi0gKiBTRElPIGludGVyZmFjZS4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAy MCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwgU1Qt RXJpY3Nzb24KLSAqLwotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4 L21tYy9zZGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvbW1jL3NkaW9fZnVuYy5oPgotI2luY2x1ZGUg PGxpbnV4L21tYy9jYXJkLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVk ZSA8bGludXgvb2ZfaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0KLSNpbmNsdWRlICJi dXMuaCIKLSNpbmNsdWRlICJ3ZnguaCIKLSNpbmNsdWRlICJod2lvLmgiCi0jaW5jbHVkZSAibWFp bi5oIgotI2luY2x1ZGUgImJoLmgiCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3Jt X2RhdGEgd2Z4X3NkaW9fcGRhdGEgPSB7Ci0JLmZpbGVfZncgPSAid2ZtX3dmMjAwIiwKLQkuZmls ZV9wZHMgPSAid2YyMDAucGRzIiwKLX07Ci0KLXN0cnVjdCB3Znhfc2Rpb19wcml2IHsKLQlzdHJ1 Y3Qgc2Rpb19mdW5jICpmdW5jOwotCXN0cnVjdCB3ZnhfZGV2ICpjb3JlOwotCXU4IGJ1Zl9pZF90 eDsKLQl1OCBidWZfaWRfcng7Ci0JaW50IG9mX2lycTsKLX07Ci0KLXN0YXRpYyBpbnQgd2Z4X3Nk aW9fY29weV9mcm9tX2lvKHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCByZWdfaWQsCi0JCQkJIHZv aWQgKmRzdCwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCB3Znhfc2Rpb19wcml2ICpidXMgPSBw cml2OwotCXVuc2lnbmVkIGludCBzZGlvX2FkZHIgPSByZWdfaWQgPDwgMjsKLQlpbnQgcmV0Owot Ci0JV0FSTihyZWdfaWQgPiA3LCAiY2hpcCBvbmx5IGhhcyA3IHJlZ2lzdGVycyIpOwotCVdBUk4o KCh1aW50cHRyX3QpZHN0KSAmIDMsICJ1bmFsaWduZWQgYnVmZmVyIHNpemUiKTsKLQlXQVJOKGNv dW50ICYgMywgInVuYWxpZ25lZCBidWZmZXIgYWRkcmVzcyIpOwotCi0JLyogVXNlIHF1ZXVlIG1v ZGUgYnVmZmVycyAqLwotCWlmIChyZWdfaWQgPT0gV0ZYX1JFR19JTl9PVVRfUVVFVUUpCi0JCXNk aW9fYWRkciB8PSAoYnVzLT5idWZfaWRfcnggKyAxKSA8PCA3OwotCXJldCA9IHNkaW9fbWVtY3B5 X2Zyb21pbyhidXMtPmZ1bmMsIGRzdCwgc2Rpb19hZGRyLCBjb3VudCk7Ci0JaWYgKCFyZXQgJiYg cmVnX2lkID09IFdGWF9SRUdfSU5fT1VUX1FVRVVFKQotCQlidXMtPmJ1Zl9pZF9yeCA9IChidXMt PmJ1Zl9pZF9yeCArIDEpICUgNDsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4 X3NkaW9fY29weV90b19pbyh2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgcmVnX2lkLAotCQkJICAg ICAgIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCB3Znhfc2Rpb19w cml2ICpidXMgPSBwcml2OwotCXVuc2lnbmVkIGludCBzZGlvX2FkZHIgPSByZWdfaWQgPDwgMjsK LQlpbnQgcmV0OwotCi0JV0FSTihyZWdfaWQgPiA3LCAiY2hpcCBvbmx5IGhhcyA3IHJlZ2lzdGVy cyIpOwotCVdBUk4oKCh1aW50cHRyX3Qpc3JjKSAmIDMsICJ1bmFsaWduZWQgYnVmZmVyIHNpemUi KTsKLQlXQVJOKGNvdW50ICYgMywgInVuYWxpZ25lZCBidWZmZXIgYWRkcmVzcyIpOwotCi0JLyog VXNlIHF1ZXVlIG1vZGUgYnVmZmVycyAqLwotCWlmIChyZWdfaWQgPT0gV0ZYX1JFR19JTl9PVVRf UVVFVUUpCi0JCXNkaW9fYWRkciB8PSBidXMtPmJ1Zl9pZF90eCA8PCA3OwotCS8vIEZJWE1FOiBk aXNjYXJkcyAnY29uc3QnIHF1YWxpZmllciBmb3Igc3JjCi0JcmV0ID0gc2Rpb19tZW1jcHlfdG9p byhidXMtPmZ1bmMsIHNkaW9fYWRkciwgKHZvaWQgKilzcmMsIGNvdW50KTsKLQlpZiAoIXJldCAm JiByZWdfaWQgPT0gV0ZYX1JFR19JTl9PVVRfUVVFVUUpCi0JCWJ1cy0+YnVmX2lkX3R4ID0gKGJ1 cy0+YnVmX2lkX3R4ICsgMSkgJSAzMjsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lk IHdmeF9zZGlvX2xvY2sodm9pZCAqcHJpdikKLXsKLQlzdHJ1Y3Qgd2Z4X3NkaW9fcHJpdiAqYnVz ID0gcHJpdjsKLQotCXNkaW9fY2xhaW1faG9zdChidXMtPmZ1bmMpOwotfQotCi1zdGF0aWMgdm9p ZCB3Znhfc2Rpb191bmxvY2sodm9pZCAqcHJpdikKLXsKLQlzdHJ1Y3Qgd2Z4X3NkaW9fcHJpdiAq YnVzID0gcHJpdjsKLQotCXNkaW9fcmVsZWFzZV9ob3N0KGJ1cy0+ZnVuYyk7Ci19Ci0KLXN0YXRp YyB2b2lkIHdmeF9zZGlvX2lycV9oYW5kbGVyKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpCi17Ci0J c3RydWN0IHdmeF9zZGlvX3ByaXYgKmJ1cyA9IHNkaW9fZ2V0X2RydmRhdGEoZnVuYyk7Ci0KLQl3 ZnhfYmhfcmVxdWVzdF9yeChidXMtPmNvcmUpOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3Qgd2Z4 X3NkaW9faXJxX2hhbmRsZXJfZXh0KGludCBpcnEsIHZvaWQgKnByaXYpCi17Ci0Jc3RydWN0IHdm eF9zZGlvX3ByaXYgKmJ1cyA9IHByaXY7Ci0KLQlzZGlvX2NsYWltX2hvc3QoYnVzLT5mdW5jKTsK LQl3ZnhfYmhfcmVxdWVzdF9yeChidXMtPmNvcmUpOwotCXNkaW9fcmVsZWFzZV9ob3N0KGJ1cy0+ ZnVuYyk7Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgaW50IHdmeF9zZGlvX2ly cV9zdWJzY3JpYmUodm9pZCAqcHJpdikKLXsKLQlzdHJ1Y3Qgd2Z4X3NkaW9fcHJpdiAqYnVzID0g cHJpdjsKLQl1MzIgZmxhZ3M7Ci0JaW50IHJldDsKLQl1OCBjY2NyOwotCi0JaWYgKCFidXMtPm9m X2lycSkgewotCQlzZGlvX2NsYWltX2hvc3QoYnVzLT5mdW5jKTsKLQkJcmV0ID0gc2Rpb19jbGFp bV9pcnEoYnVzLT5mdW5jLCB3Znhfc2Rpb19pcnFfaGFuZGxlcik7Ci0JCXNkaW9fcmVsZWFzZV9o b3N0KGJ1cy0+ZnVuYyk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0Jc2Rpb19jbGFpbV9ob3N0KGJ1 cy0+ZnVuYyk7Ci0JY2NjciA9IHNkaW9fZjBfcmVhZGIoYnVzLT5mdW5jLCBTRElPX0NDQ1JfSUVO eCwgTlVMTCk7Ci0JY2NjciB8PSBCSVQoMCk7Ci0JY2NjciB8PSBCSVQoYnVzLT5mdW5jLT5udW0p OwotCXNkaW9fZjBfd3JpdGViKGJ1cy0+ZnVuYywgY2NjciwgU0RJT19DQ0NSX0lFTngsIE5VTEwp OwotCXNkaW9fcmVsZWFzZV9ob3N0KGJ1cy0+ZnVuYyk7Ci0JZmxhZ3MgPSBpcnFfZ2V0X3RyaWdn ZXJfdHlwZShidXMtPm9mX2lycSk7Ci0JaWYgKCFmbGFncykKLQkJZmxhZ3MgPSBJUlFGX1RSSUdH RVJfSElHSDsKLQlmbGFncyB8PSBJUlFGX09ORVNIT1Q7Ci0JcmV0dXJuIGRldm1fcmVxdWVzdF90 aHJlYWRlZF9pcnEoJmJ1cy0+ZnVuYy0+ZGV2LCBidXMtPm9mX2lycSwgTlVMTCwKLQkJCQkJIHdm eF9zZGlvX2lycV9oYW5kbGVyX2V4dCwgZmxhZ3MsCi0JCQkJCSAid2Z4IiwgYnVzKTsKLX0KLQot c3RhdGljIGludCB3Znhfc2Rpb19pcnFfdW5zdWJzY3JpYmUodm9pZCAqcHJpdikKLXsKLQlzdHJ1 Y3Qgd2Z4X3NkaW9fcHJpdiAqYnVzID0gcHJpdjsKLQlpbnQgcmV0OwotCi0JaWYgKGJ1cy0+b2Zf aXJxKQotCQlkZXZtX2ZyZWVfaXJxKCZidXMtPmZ1bmMtPmRldiwgYnVzLT5vZl9pcnEsIGJ1cyk7 Ci0Jc2Rpb19jbGFpbV9ob3N0KGJ1cy0+ZnVuYyk7Ci0JcmV0ID0gc2Rpb19yZWxlYXNlX2lycShi dXMtPmZ1bmMpOwotCXNkaW9fcmVsZWFzZV9ob3N0KGJ1cy0+ZnVuYyk7Ci0JcmV0dXJuIHJldDsK LX0KLQotc3RhdGljIHNpemVfdCB3Znhfc2Rpb19hbGlnbl9zaXplKHZvaWQgKnByaXYsIHNpemVf dCBzaXplKQotewotCXN0cnVjdCB3Znhfc2Rpb19wcml2ICpidXMgPSBwcml2OwotCi0JcmV0dXJu IHNkaW9fYWxpZ25fc2l6ZShidXMtPmZ1bmMsIHNpemUpOwotfQotCi1zdGF0aWMgY29uc3Qgc3Ry dWN0IGh3YnVzX29wcyB3Znhfc2Rpb19od2J1c19vcHMgPSB7Ci0JLmNvcHlfZnJvbV9pbyA9IHdm eF9zZGlvX2NvcHlfZnJvbV9pbywKLQkuY29weV90b19pbyA9IHdmeF9zZGlvX2NvcHlfdG9faW8s Ci0JLmlycV9zdWJzY3JpYmUgPSB3Znhfc2Rpb19pcnFfc3Vic2NyaWJlLAotCS5pcnFfdW5zdWJz Y3JpYmUgPSB3Znhfc2Rpb19pcnFfdW5zdWJzY3JpYmUsCi0JLmxvY2sJCQk9IHdmeF9zZGlvX2xv Y2ssCi0JLnVubG9jawkJCT0gd2Z4X3NkaW9fdW5sb2NrLAotCS5hbGlnbl9zaXplCQk9IHdmeF9z ZGlvX2FsaWduX3NpemUsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB3 Znhfc2Rpb19vZl9tYXRjaFtdID0gewotCXsgLmNvbXBhdGlibGUgPSAic2lsYWJzLHdmeC1zZGlv IiB9LAotCXsgLmNvbXBhdGlibGUgPSAic2lsYWJzLHdmMjAwIiB9LAotCXsgfSwKLX07Ci1NT0RV TEVfREVWSUNFX1RBQkxFKG9mLCB3Znhfc2Rpb19vZl9tYXRjaCk7Ci0KLXN0YXRpYyBpbnQgd2Z4 X3NkaW9fcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqZnVuYywKLQkJCSAgY29uc3Qgc3RydWN0IHNk aW9fZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZnVuYy0+ZGV2 Lm9mX25vZGU7Ci0Jc3RydWN0IHdmeF9zZGlvX3ByaXYgKmJ1czsKLQlpbnQgcmV0OwotCi0JaWYg KGZ1bmMtPm51bSAhPSAxKSB7Ci0JCWRldl9lcnIoJmZ1bmMtPmRldiwgIlNESU8gZnVuY3Rpb24g bnVtYmVyIGlzICVkIHdoaWxlIGl0IHNob3VsZCBhbHdheXMgYmUgMSAodW5zdXBwb3J0ZWQgY2hp cD8pXG4iLAotCQkJZnVuYy0+bnVtKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JYnVzID0g ZGV2bV9remFsbG9jKCZmdW5jLT5kZXYsIHNpemVvZigqYnVzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYg KCFidXMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKG5wKSB7Ci0JCWlmICghb2ZfbWF0Y2hf bm9kZSh3Znhfc2Rpb19vZl9tYXRjaCwgbnApKSB7Ci0JCQlkZXZfd2FybigmZnVuYy0+ZGV2LCAi bm8gY29tcGF0aWJsZSBkZXZpY2UgZm91bmQgaW4gRFRcbiIpOwotCQkJcmV0dXJuIC1FTk9ERVY7 Ci0JCX0KLQkJYnVzLT5vZl9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7Ci0JfSBl bHNlIHsKLQkJZGV2X3dhcm4oJmZ1bmMtPmRldiwKLQkJCSAiZGV2aWNlIGlzIG5vdCBkZWNsYXJl ZCBpbiBEVCwgZmVhdHVyZXMgd2lsbCBiZSBsaW1pdGVkXG4iKTsKLQkJLy8gRklYTUU6IGlnbm9y ZSBWSUQvUElEIGFuZCBvbmx5IHJlbHkgb24gZGV2aWNlIHRyZWUKLQkJLy8gcmV0dXJuIC1FTk9E RVY7Ci0JfQotCi0JYnVzLT5mdW5jID0gZnVuYzsKLQlzZGlvX3NldF9kcnZkYXRhKGZ1bmMsIGJ1 cyk7Ci0JZnVuYy0+Y2FyZC0+cXVpcmtzIHw9IE1NQ19RVUlSS19MRU5JRU5UX0ZOMCB8Ci0JCQkg ICAgICBNTUNfUVVJUktfQkxLU1pfRk9SX0JZVEVfTU9ERSB8Ci0JCQkgICAgICBNTUNfUVVJUktf QlJPS0VOX0JZVEVfTU9ERV81MTI7Ci0KLQlzZGlvX2NsYWltX2hvc3QoZnVuYyk7Ci0JcmV0ID0g c2Rpb19lbmFibGVfZnVuYyhmdW5jKTsKLQkvLyBCbG9jayBvZiA2NCBieXRlcyBpcyBtb3JlIGVm ZmljaWVudCB0aGFuIDUxMkIgZm9yIGZyYW1lIHNpemVzIDwgNGsKLQlzZGlvX3NldF9ibG9ja19z aXplKGZ1bmMsIDY0KTsKLQlzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTsKLQlpZiAocmV0KQotCQln b3RvIGVycjA7Ci0KLQlidXMtPmNvcmUgPSB3ZnhfaW5pdF9jb21tb24oJmZ1bmMtPmRldiwgJndm eF9zZGlvX3BkYXRhLAotCQkJCSAgICAmd2Z4X3NkaW9faHdidXNfb3BzLCBidXMpOwotCWlmICgh YnVzLT5jb3JlKSB7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gZXJyMTsKLQl9Ci0KLQlyZXQgPSB3 ZnhfcHJvYmUoYnVzLT5jb3JlKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjE7Ci0KLQlyZXR1cm4g MDsKLQotZXJyMToKLQlzZGlvX2NsYWltX2hvc3QoZnVuYyk7Ci0Jc2Rpb19kaXNhYmxlX2Z1bmMo ZnVuYyk7Ci0Jc2Rpb19yZWxlYXNlX2hvc3QoZnVuYyk7Ci1lcnIwOgotCXJldHVybiByZXQ7Ci19 Ci0KLXN0YXRpYyB2b2lkIHdmeF9zZGlvX3JlbW92ZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKQot ewotCXN0cnVjdCB3Znhfc2Rpb19wcml2ICpidXMgPSBzZGlvX2dldF9kcnZkYXRhKGZ1bmMpOwot Ci0Jd2Z4X3JlbGVhc2UoYnVzLT5jb3JlKTsKLQlzZGlvX2NsYWltX2hvc3QoZnVuYyk7Ci0Jc2Rp b19kaXNhYmxlX2Z1bmMoZnVuYyk7Ci0Jc2Rpb19yZWxlYXNlX2hvc3QoZnVuYyk7Ci19Ci0KLSNk ZWZpbmUgU0RJT19WRU5ET1JfSURfU0lMQUJTICAgICAgICAweDAwMDAKLSNkZWZpbmUgU0RJT19E RVZJQ0VfSURfU0lMQUJTX1dGMjAwICAweDEwMDAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Rpb19k ZXZpY2VfaWQgd2Z4X3NkaW9faWRzW10gPSB7Ci0JeyBTRElPX0RFVklDRShTRElPX1ZFTkRPUl9J RF9TSUxBQlMsIFNESU9fREVWSUNFX0lEX1NJTEFCU19XRjIwMCkgfSwKLQkvLyBGSVhNRTogaWdu b3JlIFZJRC9QSUQgYW5kIG9ubHkgcmVseSBvbiBkZXZpY2UgdHJlZQotCS8vIHsgU0RJT19ERVZJ Q0UoU0RJT19BTllfSUQsIFNESU9fQU5ZX0lEKSB9LAotCXsgfSwKLX07Ci1NT0RVTEVfREVWSUNF X1RBQkxFKHNkaW8sIHdmeF9zZGlvX2lkcyk7Ci0KLXN0cnVjdCBzZGlvX2RyaXZlciB3Znhfc2Rp b19kcml2ZXIgPSB7Ci0JLm5hbWUgPSAid2Z4LXNkaW8iLAotCS5pZF90YWJsZSA9IHdmeF9zZGlv X2lkcywKLQkucHJvYmUgPSB3Znhfc2Rpb19wcm9iZSwKLQkucmVtb3ZlID0gd2Z4X3NkaW9fcmVt b3ZlLAotCS5kcnYgPSB7Ci0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCQkub2ZfbWF0Y2hfdGFi bGUgPSB3Znhfc2Rpb19vZl9tYXRjaCwKLQl9Ci19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFn aW5nL3dmeC9idXNfc3BpLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2J1c19zcGkuYwpkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk5MTI1ZDFhMzBkLi4wMDAwMDAwMDAwMDAKLS0tIGEv ZHJpdmVycy9zdGFnaW5nL3dmeC9idXNfc3BpLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzEgKzAs MCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQotLyoKLSAqIFNQ SSBpbnRlcmZhY2UuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFi b3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEsIFNhZ3JhZCBJbmMuCi0gKiBD b3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29u c3VtZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50 ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvb2YuaD4K LQotI2luY2x1ZGUgImJ1cy5oIgotI2luY2x1ZGUgIndmeC5oIgotI2luY2x1ZGUgImh3aW8uaCIK LSNpbmNsdWRlICJtYWluLmgiCi0jaW5jbHVkZSAiYmguaCIKLQotI2RlZmluZSBTRVRfV1JJVEUg MHg3RkZGICAgICAgICAvKiB1c2FnZTogYW5kIG9wZXJhdGlvbiAqLwotI2RlZmluZSBTRVRfUkVB RCAweDgwMDAgICAgICAgICAvKiB1c2FnZTogb3Igb3BlcmF0aW9uICovCi0KLSNkZWZpbmUgV0ZY X1JFU0VUX0lOVkVSVEVEIDEKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB3ZnhfcGxhdGZvcm1fZGF0 YSB3Znhfc3BpX3BkYXRhID0gewotCS5maWxlX2Z3ID0gIndmbV93ZjIwMCIsCi0JLmZpbGVfcGRz ID0gIndmMjAwLnBkcyIsCi0JLnVzZV9yaXNpbmdfY2xrID0gdHJ1ZSwKLX07Ci0KLXN0cnVjdCB3 Znhfc3BpX3ByaXYgewotCXN0cnVjdCBzcGlfZGV2aWNlICpmdW5jOwotCXN0cnVjdCB3ZnhfZGV2 ICpjb3JlOwotCXN0cnVjdCBncGlvX2Rlc2MgKmdwaW9fcmVzZXQ7Ci0JYm9vbCBuZWVkX3N3YWI7 Ci19OwotCi0vKgotICogV0Z4IGNoaXAgcmVhZCBkYXRhIDE2Yml0cyBhdCB0aW1lIGFuZCBwbGFj ZSB0aGVtIGRpcmVjdGx5IGludG8gKGxpdHRsZQotICogZW5kaWFuKSBDUFUgcmVnaXN0ZXIuIFNv LCBjaGlwIGV4cGVjdCBieXRlIG9yZGVyIGxpa2UgIkIxIEIwIEIzIEIyIiAod2hpbGUKLSAqIExF IGlzICJCMCBCMSBCMiBCMyIgYW5kIEJFIGlzICJCMyBCMiBCMSBCMCIpCi0gKgotICogQSBsaXR0 bGUgZW5kaWFuIGhvc3Qgd2l0aCBiaXRzX3Blcl93b3JkID09IDE2IHNob3VsZCBkbyB0aGUgcmln aHQgam9iCi0gKiBuYXRpdmVseS4gVGhlIGNvZGUgYmVsb3cgdG8gc3VwcG9ydCBiaWcgZW5kaWFu IGhvc3QgYW5kIGNvbW1vbmx5IHVzZWQgU1BJCi0gKiA4Yml0cy4KLSAqLwotc3RhdGljIGludCB3 Znhfc3BpX2NvcHlfZnJvbV9pbyh2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgYWRkciwKLQkJCQl2 b2lkICpkc3QsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3Qgd2Z4X3NwaV9wcml2ICpidXMgPSBw cml2OwotCXUxNiByZWdhZGRyID0gKGFkZHIgPDwgMTIpIHwgKGNvdW50IC8gMikgfCBTRVRfUkVB RDsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgICAgICBtOwotCXN0cnVjdCBzcGlfdHJhbnNmZXIgICAg IHRfYWRkciA9IHsKLQkJLnR4X2J1ZiAgICAgICAgID0gJnJlZ2FkZHIsCi0JCS5sZW4gICAgICAg ICAgICA9IHNpemVvZihyZWdhZGRyKSwKLQl9OwotCXN0cnVjdCBzcGlfdHJhbnNmZXIgICAgIHRf bXNnID0gewotCQkucnhfYnVmICAgICAgICAgPSBkc3QsCi0JCS5sZW4gICAgICAgICAgICA9IGNv dW50LAotCX07Ci0JdTE2ICpkc3QxNiA9IGRzdDsKLQlpbnQgcmV0LCBpOwotCi0JV0FSTihjb3Vu dCAlIDIsICJidWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMiIpOwotCi0JY3B1X3Rv X2xlMTZzKCZyZWdhZGRyKTsKLQlpZiAoYnVzLT5uZWVkX3N3YWIpCi0JCXN3YWIxNnMoJnJlZ2Fk ZHIpOwotCi0Jc3BpX21lc3NhZ2VfaW5pdCgmbSk7Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRf YWRkciwgJm0pOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0X21zZywgJm0pOwotCXJldCA9IHNw aV9zeW5jKGJ1cy0+ZnVuYywgJm0pOwotCi0JaWYgKGJ1cy0+bmVlZF9zd2FiICYmIGFkZHIgPT0g V0ZYX1JFR19DT05GSUcpCi0JCWZvciAoaSA9IDA7IGkgPCBjb3VudCAvIDI7IGkrKykKLQkJCXN3 YWIxNnMoJmRzdDE2W2ldKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHdmeF9zcGlf Y29weV90b19pbyh2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgYWRkciwKLQkJCSAgICAgIGNvbnN0 IHZvaWQgKnNyYywgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCB3Znhfc3BpX3ByaXYgKmJ1cyA9 IHByaXY7Ci0JdTE2IHJlZ2FkZHIgPSAoYWRkciA8PCAxMikgfCAoY291bnQgLyAyKTsKLQkvLyBG SVhNRTogdXNlIGEgYm91bmNlIGJ1ZmZlcgotCXUxNiAqc3JjMTYgPSAodm9pZCAqKXNyYzsKLQlp bnQgcmV0LCBpOwotCXN0cnVjdCBzcGlfbWVzc2FnZSAgICAgIG07Ci0Jc3RydWN0IHNwaV90cmFu c2ZlciAgICAgdF9hZGRyID0gewotCQkudHhfYnVmICAgICAgICAgPSAmcmVnYWRkciwKLQkJLmxl biAgICAgICAgICAgID0gc2l6ZW9mKHJlZ2FkZHIpLAotCX07Ci0Jc3RydWN0IHNwaV90cmFuc2Zl ciAgICAgdF9tc2cgPSB7Ci0JCS50eF9idWYgICAgICAgICA9IHNyYywKLQkJLmxlbiAgICAgICAg ICAgID0gY291bnQsCi0JfTsKLQotCVdBUk4oY291bnQgJSAyLCAiYnVmZmVyIHNpemUgbXVzdCBi ZSBhIG11bHRpcGxlIG9mIDIiKTsKLQlXQVJOKHJlZ2FkZHIgJiBTRVRfUkVBRCwgImJhZCBhZGRy IG9yIHNpemUgb3ZlcmZsb3ciKTsKLQotCWNwdV90b19sZTE2cygmcmVnYWRkcik7Ci0KLQkvLyBS ZWdpc3RlciBhZGRyZXNzIGFuZCBDT05GSUcgY29udGVudCBhbHdheXMgdXNlIDE2Yml0IGJpZyBl bmRpYW4KLQkvLyAoIkJBREMiIG9yZGVyKQotCWlmIChidXMtPm5lZWRfc3dhYikKLQkJc3dhYjE2 cygmcmVnYWRkcik7Ci0JaWYgKGJ1cy0+bmVlZF9zd2FiICYmIGFkZHIgPT0gV0ZYX1JFR19DT05G SUcpCi0JCWZvciAoaSA9IDA7IGkgPCBjb3VudCAvIDI7IGkrKykKLQkJCXN3YWIxNnMoJnNyYzE2 W2ldKTsKLQotCXNwaV9tZXNzYWdlX2luaXQoJm0pOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0 X2FkZHIsICZtKTsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdF9tc2csICZtKTsKLQlyZXQgPSBz cGlfc3luYyhidXMtPmZ1bmMsICZtKTsKLQotCWlmIChidXMtPm5lZWRfc3dhYiAmJiBhZGRyID09 IFdGWF9SRUdfQ09ORklHKQotCQlmb3IgKGkgPSAwOyBpIDwgY291bnQgLyAyOyBpKyspCi0JCQlz d2FiMTZzKCZzcmMxNltpXSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgd2Z4X3Nw aV9sb2NrKHZvaWQgKnByaXYpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIHdmeF9zcGlfdW5sb2NrKHZv aWQgKnByaXYpCi17Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCB3Znhfc3BpX2lycV9oYW5kbGVy KGludCBpcnEsIHZvaWQgKnByaXYpCi17Ci0Jc3RydWN0IHdmeF9zcGlfcHJpdiAqYnVzID0gcHJp djsKLQotCXdmeF9iaF9yZXF1ZXN0X3J4KGJ1cy0+Y29yZSk7Ci0JcmV0dXJuIElSUV9IQU5ETEVE OwotfQotCi1zdGF0aWMgaW50IHdmeF9zcGlfaXJxX3N1YnNjcmliZSh2b2lkICpwcml2KQotewot CXN0cnVjdCB3Znhfc3BpX3ByaXYgKmJ1cyA9IHByaXY7Ci0JdTMyIGZsYWdzOwotCi0JZmxhZ3Mg PSBpcnFfZ2V0X3RyaWdnZXJfdHlwZShidXMtPmZ1bmMtPmlycSk7Ci0JaWYgKCFmbGFncykKLQkJ ZmxhZ3MgPSBJUlFGX1RSSUdHRVJfSElHSDsKLQlmbGFncyB8PSBJUlFGX09ORVNIT1Q7Ci0JcmV0 dXJuIGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoJmJ1cy0+ZnVuYy0+ZGV2LCBidXMtPmZ1bmMt PmlycSwgTlVMTCwKLQkJCQkJIHdmeF9zcGlfaXJxX2hhbmRsZXIsIElSUUZfT05FU0hPVCwKLQkJ CQkJICJ3ZngiLCBidXMpOwotfQotCi1zdGF0aWMgaW50IHdmeF9zcGlfaXJxX3Vuc3Vic2NyaWJl KHZvaWQgKnByaXYpCi17Ci0Jc3RydWN0IHdmeF9zcGlfcHJpdiAqYnVzID0gcHJpdjsKLQotCWRl dm1fZnJlZV9pcnEoJmJ1cy0+ZnVuYy0+ZGV2LCBidXMtPmZ1bmMtPmlycSwgYnVzKTsKLQlyZXR1 cm4gMDsKLX0KLQotc3RhdGljIHNpemVfdCB3Znhfc3BpX2FsaWduX3NpemUodm9pZCAqcHJpdiwg c2l6ZV90IHNpemUpCi17Ci0JLy8gTW9zdCBvZiBTUEkgY29udHJvbGxlcnMgYXZvaWQgRE1BIGlm IGJ1ZmZlciBzaXplIGlzIG5vdCAzMmJpdCBhbGlnbmVkCi0JcmV0dXJuIEFMSUdOKHNpemUsIDQp OwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGh3YnVzX29wcyB3Znhfc3BpX2h3YnVzX29wcyA9 IHsKLQkuY29weV9mcm9tX2lvID0gd2Z4X3NwaV9jb3B5X2Zyb21faW8sCi0JLmNvcHlfdG9faW8g PSB3Znhfc3BpX2NvcHlfdG9faW8sCi0JLmlycV9zdWJzY3JpYmUgPSB3Znhfc3BpX2lycV9zdWJz Y3JpYmUsCi0JLmlycV91bnN1YnNjcmliZSA9IHdmeF9zcGlfaXJxX3Vuc3Vic2NyaWJlLAotCS5s b2NrCQkJPSB3Znhfc3BpX2xvY2ssCi0JLnVubG9jawkJCT0gd2Z4X3NwaV91bmxvY2ssCi0JLmFs aWduX3NpemUJCT0gd2Z4X3NwaV9hbGlnbl9zaXplLAotfTsKLQotc3RhdGljIGludCB3Znhfc3Bp X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpmdW5jKQotewotCXN0cnVjdCB3Znhfc3BpX3ByaXYg KmJ1czsKLQlpbnQgcmV0OwotCi0JaWYgKCFmdW5jLT5iaXRzX3Blcl93b3JkKQotCQlmdW5jLT5i aXRzX3Blcl93b3JkID0gMTY7Ci0JcmV0ID0gc3BpX3NldHVwKGZ1bmMpOwotCWlmIChyZXQpCi0J CXJldHVybiByZXQ7Ci0JLy8gVHJhY2UgYmVsb3cgaXMgYWxzbyBkaXNwbGF5ZWQgYnkgc3BpX3Nl dHVwKCkgaWYgY29tcGlsZWQgd2l0aCBERUJVRwotCWRldl9kYmcoJmZ1bmMtPmRldiwgIlNQSSBw YXJhbXM6IENTPSVkLCBtb2RlPSVkIGJpdHMvd29yZD0lZCBzcGVlZD0lZFxuIiwKLQkJZnVuYy0+ Y2hpcF9zZWxlY3QsIGZ1bmMtPm1vZGUsIGZ1bmMtPmJpdHNfcGVyX3dvcmQsCi0JCWZ1bmMtPm1h eF9zcGVlZF9oeik7Ci0JaWYgKGZ1bmMtPmJpdHNfcGVyX3dvcmQgIT0gMTYgJiYgZnVuYy0+Yml0 c19wZXJfd29yZCAhPSA4KQotCQlkZXZfd2FybigmZnVuYy0+ZGV2LCAidW51c3VhbCBiaXRzL3dv cmQgdmFsdWU6ICVkXG4iLAotCQkJIGZ1bmMtPmJpdHNfcGVyX3dvcmQpOwotCWlmIChmdW5jLT5t YXhfc3BlZWRfaHogPiA1MDAwMDAwMCkKLQkJZGV2X3dhcm4oJmZ1bmMtPmRldiwgIiVkSHogaXMg YSB2ZXJ5IGhpZ2ggc3BlZWRcbiIsCi0JCQkgZnVuYy0+bWF4X3NwZWVkX2h6KTsKLQotCWJ1cyA9 IGRldm1fa3phbGxvYygmZnVuYy0+ZGV2LCBzaXplb2YoKmJ1cyksIEdGUF9LRVJORUwpOwotCWlm ICghYnVzKQotCQlyZXR1cm4gLUVOT01FTTsKLQlidXMtPmZ1bmMgPSBmdW5jOwotCWlmIChmdW5j LT5iaXRzX3Blcl93b3JkID09IDggfHwgSVNfRU5BQkxFRChDT05GSUdfQ1BVX0JJR19FTkRJQU4p KQotCQlidXMtPm5lZWRfc3dhYiA9IHRydWU7Ci0Jc3BpX3NldF9kcnZkYXRhKGZ1bmMsIGJ1cyk7 Ci0KLQlidXMtPmdwaW9fcmVzZXQgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbCgmZnVuYy0+ZGV2 LCAicmVzZXQiLAotCQkJCQkJICBHUElPRF9PVVRfTE9XKTsKLQlpZiAoSVNfRVJSKGJ1cy0+Z3Bp b19yZXNldCkpCi0JCXJldHVybiBQVFJfRVJSKGJ1cy0+Z3Bpb19yZXNldCk7Ci0JaWYgKCFidXMt PmdwaW9fcmVzZXQpIHsKLQkJZGV2X3dhcm4oJmZ1bmMtPmRldiwKLQkJCSAiZ3BpbyByZXNldCBp cyBub3QgZGVmaW5lZCwgdHJ5aW5nIHRvIGxvYWQgZmlybXdhcmUgYW55d2F5XG4iKTsKLQl9IGVs c2UgewotCQlncGlvZF9zZXRfY29uc3VtZXJfbmFtZShidXMtPmdwaW9fcmVzZXQsICJ3ZnggcmVz ZXQiKTsKLQkJaWYgKHNwaV9nZXRfZGV2aWNlX2lkKGZ1bmMpLT5kcml2ZXJfZGF0YSAmIFdGWF9S RVNFVF9JTlZFUlRFRCkKLQkJCWdwaW9kX3RvZ2dsZV9hY3RpdmVfbG93KGJ1cy0+Z3Bpb19yZXNl dCk7Ci0JCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChidXMtPmdwaW9fcmVzZXQsIDEpOwotCQl1 c2xlZXBfcmFuZ2UoMTAwLCAxNTApOwotCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoYnVzLT5n cGlvX3Jlc2V0LCAwKTsKLQkJdXNsZWVwX3JhbmdlKDIwMDAsIDI1MDApOwotCX0KLQotCWJ1cy0+ Y29yZSA9IHdmeF9pbml0X2NvbW1vbigmZnVuYy0+ZGV2LCAmd2Z4X3NwaV9wZGF0YSwKLQkJCQkg ICAgJndmeF9zcGlfaHdidXNfb3BzLCBidXMpOwotCWlmICghYnVzLT5jb3JlKQotCQlyZXR1cm4g LUVJTzsKLQotCXJldHVybiB3ZnhfcHJvYmUoYnVzLT5jb3JlKTsKLX0KLQotc3RhdGljIGludCB3 Znhfc3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqZnVuYykKLXsKLQlzdHJ1Y3Qgd2Z4X3Nw aV9wcml2ICpidXMgPSBzcGlfZ2V0X2RydmRhdGEoZnVuYyk7Ci0KLQl3ZnhfcmVsZWFzZShidXMt PmNvcmUpOwotCXJldHVybiAwOwotfQotCi0vKgotICogRm9yIGR5bmFtaWMgZHJpdmVyIGJpbmRp bmcsIGtlcm5lbCBkb2VzIG5vdCB1c2UgT0YgdG8gbWF0Y2ggZHJpdmVyLiBJdCBvbmx5Ci0gKiB1 c2UgbW9kYWxpYXMgYW5kIG1vZGFsaWFzIGlzIGEgY29weSBvZiAnY29tcGF0aWJsZScgRFQgbm9k ZSB3aXRoIHZlbmRvcgotICogc3RyaXBwZWQuCi0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3Bp X2RldmljZV9pZCB3Znhfc3BpX2lkW10gPSB7Ci0JeyAid2Z4LXNwaSIsIFdGWF9SRVNFVF9JTlZF UlRFRCB9LAotCXsgIndmMjAwIiwgMCB9LAotCXsgfSwKLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxF KHNwaSwgd2Z4X3NwaV9pZCk7Ci0KLSNpZmRlZiBDT05GSUdfT0YKLXN0YXRpYyBjb25zdCBzdHJ1 Y3Qgb2ZfZGV2aWNlX2lkIHdmeF9zcGlfb2ZfbWF0Y2hbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0g InNpbGFicyx3Zngtc3BpIiwgLmRhdGEgPSAodm9pZCAqKVdGWF9SRVNFVF9JTlZFUlRFRCB9LAot CXsgLmNvbXBhdGlibGUgPSAic2lsYWJzLHdmMjAwIiB9LAotCXsgfSwKLX07Ci1NT0RVTEVfREVW SUNFX1RBQkxFKG9mLCB3Znhfc3BpX29mX21hdGNoKTsKLSNlbmRpZgotCi1zdHJ1Y3Qgc3BpX2Ry aXZlciB3Znhfc3BpX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJ3Zngtc3Bp IiwKLQkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKHdmeF9zcGlfb2ZfbWF0Y2gpLAot CX0sCi0JLmlkX3RhYmxlID0gd2Z4X3NwaV9pZCwKLQkucHJvYmUgPSB3Znhfc3BpX3Byb2JlLAot CS5yZW1vdmUgPSB3Znhfc3BpX3JlbW92ZSwKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdp bmcvd2Z4L2RhdGFfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvZGF0YV9yeC5jCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODVmMmQ0MmEwZTIuLjAwMDAwMDAwMDAwMAotLS0gYS9k cml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfcnguYworKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAg QEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8qCi0gKiBEYXRh cGF0aCBpbXBsZW1lbnRhdGlvbi4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2ls aWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nz b24KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bmV0L21h YzgwMjExLmg+Ci0KLSNpbmNsdWRlICJkYXRhX3J4LmgiCi0jaW5jbHVkZSAid2Z4LmgiCi0jaW5j bHVkZSAiYmguaCIKLSNpbmNsdWRlICJzdGEuaCIKLQotc3RhdGljIHZvaWQgd2Z4X3J4X2hhbmRs ZV9iYShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210KQot ewotCWludCBwYXJhbXMsIHRpZDsKLQotCWlmICh3ZnhfYXBpX29sZGVyX3RoYW4od3ZpZi0+d2Rl diwgMywgNikpCi0JCXJldHVybjsKLQotCXN3aXRjaCAobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9y ZXEuYWN0aW9uX2NvZGUpIHsKLQljYXNlIFdMQU5fQUNUSU9OX0FEREJBX1JFUToKLQkJcGFyYW1z ID0gbGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuY2FwYWIpOwotCQl0aWQg PSAocGFyYW1zICYgSUVFRTgwMjExX0FEREJBX1BBUkFNX1RJRF9NQVNLKSA+PiAyOwotCQlpZWVl ODAyMTFfc3RhcnRfcnhfYmFfc2Vzc2lvbl9vZmZsKHd2aWYtPnZpZiwgbWdtdC0+c2EsIHRpZCk7 Ci0JCWJyZWFrOwotCWNhc2UgV0xBTl9BQ1RJT05fREVMQkE6Ci0JCXBhcmFtcyA9IGxlMTZfdG9f Y3B1KG1nbXQtPnUuYWN0aW9uLnUuZGVsYmEucGFyYW1zKTsKLQkJdGlkID0gKHBhcmFtcyAmICBJ RUVFODAyMTFfREVMQkFfUEFSQU1fVElEX01BU0spID4+IDEyOwotCQlpZWVlODAyMTFfc3RvcF9y eF9iYV9zZXNzaW9uX29mZmwod3ZpZi0+dmlmLCBtZ210LT5zYSwgdGlkKTsKLQkJYnJlYWs7Ci0J fQotfQotCi12b2lkIHdmeF9yeF9jYihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwKLQkgICAgICAgY29u c3Qgc3RydWN0IGhpZl9pbmRfcnggKmFyZywgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1 Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqaGRyID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7Ci0J c3RydWN0IGllZWU4MDIxMV9oZHIgKmZyYW1lID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2ti LT5kYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjEx X21nbXQgKilza2ItPmRhdGE7Ci0KLQltZW1zZXQoaGRyLCAwLCBzaXplb2YoKmhkcikpOwotCi0J aWYgKGFyZy0+c3RhdHVzID09IEhJRl9TVEFUVVNfUlhfRkFJTF9NSUMpCi0JCWhkci0+ZmxhZyB8 PSBSWF9GTEFHX01NSUNfRVJST1IgfCBSWF9GTEFHX0lWX1NUUklQUEVEOwotCWVsc2UgaWYgKGFy Zy0+c3RhdHVzKQotCQlnb3RvIGRyb3A7Ci0KLQlpZiAoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0 IGllZWU4MDIxMV9wc3BvbGwpKSB7Ci0JCWRldl93YXJuKHd2aWYtPndkZXYtPmRldiwgIm1hbGZv cm1lZCBTRFUgcmVjZWl2ZWRcbiIpOwotCQlnb3RvIGRyb3A7Ci0JfQotCi0JaGRyLT5iYW5kID0g Tkw4MDIxMV9CQU5EXzJHSFo7Ci0JaGRyLT5mcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJl cXVlbmN5KGFyZy0+Y2hhbm5lbF9udW1iZXIsCi0JCQkJCQkgICBoZHItPmJhbmQpOwotCi0JaWYg KGFyZy0+cnhlZF9yYXRlID49IDE0KSB7Ci0JCWhkci0+ZW5jb2RpbmcgPSBSWF9FTkNfSFQ7Ci0J CWhkci0+cmF0ZV9pZHggPSBhcmctPnJ4ZWRfcmF0ZSAtIDE0OwotCX0gZWxzZSBpZiAoYXJnLT5y eGVkX3JhdGUgPj0gNCkgewotCQloZHItPnJhdGVfaWR4ID0gYXJnLT5yeGVkX3JhdGUgLSAyOwot CX0gZWxzZSB7Ci0JCWhkci0+cmF0ZV9pZHggPSBhcmctPnJ4ZWRfcmF0ZTsKLQl9Ci0KLQlpZiAo IWFyZy0+cmNwaV9yc3NpKSB7Ci0JCWhkci0+ZmxhZyB8PSBSWF9GTEFHX05PX1NJR05BTF9WQUw7 Ci0JCWRldl9pbmZvKHd2aWYtPndkZXYtPmRldiwgInJlY2VpdmVkIGZyYW1lIHdpdGhvdXQgUlNT SSBkYXRhXG4iKTsKLQl9Ci0JaGRyLT5zaWduYWwgPSBhcmctPnJjcGlfcnNzaSAvIDIgLSAxMTA7 Ci0JaGRyLT5hbnRlbm5hID0gMDsKLQotCWlmIChhcmctPmVuY3J5cCkKLQkJaGRyLT5mbGFnIHw9 IFJYX0ZMQUdfREVDUllQVEVEOwotCi0JLy8gQmxvY2sgYWNrIG5lZ290aWF0aW9uIGlzIG9mZmxv YWRlZCBieSB0aGUgZmlybXdhcmUuIEhvd2V2ZXIsCi0JLy8gcmUtb3JkZXJpbmcgbXVzdCBiZSBk b25lIGJ5IHRoZSBtYWM4MDIxMS4KLQlpZiAoaWVlZTgwMjExX2lzX2FjdGlvbihmcmFtZS0+ZnJh bWVfY29udHJvbCkgJiYKLQkgICAgbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgPT0gV0xBTl9DQVRF R09SWV9CQUNLICYmCi0JICAgIHNrYi0+bGVuID4gSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSkg ewotCQl3ZnhfcnhfaGFuZGxlX2JhKHd2aWYsIG1nbXQpOwotCQlnb3RvIGRyb3A7Ci0JfQotCi0J aWVlZTgwMjExX3J4X2lycXNhZmUod3ZpZi0+d2Rldi0+aHcsIHNrYik7Ci0JcmV0dXJuOwotCi1k cm9wOgotCWRldl9rZnJlZV9za2Ioc2tiKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2lu Zy93ZngvZGF0YV9yeC5oIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3J4LmgKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMGRhMzdmMjA4NC4uMDAwMDAwMDAwMDAwCi0tLSBhL2Ry aXZlcnMvc3RhZ2luZy93ZngvZGF0YV9yeC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBA QAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwotLyoKLSAqIERh dGFwYXRoIGltcGxlbWVudGF0aW9uLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBT aWxpY29uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmlj c3NvbgotICovCi0jaWZuZGVmIFdGWF9EQVRBX1JYX0gKLSNkZWZpbmUgV0ZYX0RBVEFfUlhfSAot Ci1zdHJ1Y3Qgd2Z4X3ZpZjsKLXN0cnVjdCBza19idWZmOwotc3RydWN0IGhpZl9pbmRfcng7Ci0K LXZvaWQgd2Z4X3J4X2NiKHN0cnVjdCB3ZnhfdmlmICp3dmlmLAotCSAgICAgICBjb25zdCBzdHJ1 Y3QgaGlmX2luZF9yeCAqYXJnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLQotI2VuZGlmIC8qIFdG WF9EQVRBX1JYX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvZGF0YV90eC5j IGIvZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3R4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDc3ZmIxMDRlZmRlYy4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93 ZngvZGF0YV90eC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTkzICswLDAgQEAKLS8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8qCi0gKiBEYXRhcGF0aCBpbXBsZW1lbnRh dGlvbi4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3Jp ZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KLSAqLwotI2luY2x1 ZGUgPG5ldC9tYWM4MDIxMS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0KLSNp bmNsdWRlICJkYXRhX3R4LmgiCi0jaW5jbHVkZSAid2Z4LmgiCi0jaW5jbHVkZSAiYmguaCIKLSNp bmNsdWRlICJzdGEuaCIKLSNpbmNsdWRlICJxdWV1ZS5oIgotI2luY2x1ZGUgImRlYnVnLmgiCi0j aW5jbHVkZSAidHJhY2VzLmgiCi0jaW5jbHVkZSAiaGlmX3R4X21pYi5oIgotCi1zdGF0aWMgaW50 IHdmeF9nZXRfaHdfcmF0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwKLQkJCSAgIGNvbnN0IHN0cnVj dCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRl ZF9iYW5kICpiYW5kOwotCi0JaWYgKHJhdGUtPmlkeCA8IDApCi0JCXJldHVybiAtMTsKLQlpZiAo cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfTUNTKSB7Ci0JCWlmIChyYXRlLT5pZHggPiA3 KSB7Ci0JCQlXQVJOKDEsICJ3cm9uZyByYXRlLT5pZHggdmFsdWU6ICVkIiwgcmF0ZS0+aWR4KTsK LQkJCXJldHVybiAtMTsKLQkJfQotCQlyZXR1cm4gcmF0ZS0+aWR4ICsgMTQ7Ci0JfQotCS8vIFdG eCBvbmx5IHN1cHBvcnQgMkdIeiwgZWxzZSBiYW5kIGluZm9ybWF0aW9uIHNob3VsZCBiZSByZXRy aWV2ZWQKLQkvLyBmcm9tIGllZWU4MDIxMV90eF9pbmZvCi0JYmFuZCA9IHdkZXYtPmh3LT53aXBo eS0+YmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdOwotCWlmIChyYXRlLT5pZHggPj0gYmFuZC0+bl9i aXRyYXRlcykgewotCQlXQVJOKDEsICJ3cm9uZyByYXRlLT5pZHggdmFsdWU6ICVkIiwgcmF0ZS0+ aWR4KTsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXR1cm4gYmFuZC0+Yml0cmF0ZXNbcmF0ZS0+aWR4 XS5od192YWx1ZTsKLX0KLQotLyogVFggcG9saWN5IGNhY2hlIGltcGxlbWVudGF0aW9uICovCi0K LXN0YXRpYyB2b2lkIHdmeF90eF9wb2xpY3lfYnVpbGQoc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0 cnVjdCB0eF9wb2xpY3kgKnBvbGljeSwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJh dGVzKQotewotCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gd3ZpZi0+d2RldjsKLQlpbnQgaSwgcmF0 ZWlkOwotCXU4IGNvdW50OwotCi0JV0FSTihyYXRlc1swXS5pZHggPCAwLCAiaW52YWxpZCByYXRl IHBvbGljeSIpOwotCW1lbXNldChwb2xpY3ksIDAsIHNpemVvZigqcG9saWN5KSk7Ci0JZm9yIChp ID0gMDsgaSA8IElFRUU4MDIxMV9UWF9NQVhfUkFURVM7ICsraSkgewotCQlpZiAocmF0ZXNbaV0u aWR4IDwgMCkKLQkJCWJyZWFrOwotCQlXQVJOX09OKHJhdGVzW2ldLmNvdW50ID4gMTUpOwotCQly YXRlaWQgPSB3ZnhfZ2V0X2h3X3JhdGUod2RldiwgJnJhdGVzW2ldKTsKLQkJLy8gUGFjayB0d28g dmFsdWVzIGluIGVhY2ggYnl0ZSBvZiBwb2xpY3ktPnJhdGVzCi0JCWNvdW50ID0gcmF0ZXNbaV0u Y291bnQ7Ci0JCWlmIChyYXRlaWQgJSAyKQotCQkJY291bnQgPDw9IDQ7Ci0JCXBvbGljeS0+cmF0 ZXNbcmF0ZWlkIC8gMl0gfD0gY291bnQ7Ci0JfQotfQotCi1zdGF0aWMgYm9vbCB0eF9wb2xpY3lf aXNfZXF1YWwoY29uc3Qgc3RydWN0IHR4X3BvbGljeSAqYSwKLQkJCSAgICAgICBjb25zdCBzdHJ1 Y3QgdHhfcG9saWN5ICpiKQotewotCXJldHVybiAhbWVtY21wKGEtPnJhdGVzLCBiLT5yYXRlcywg c2l6ZW9mKGEtPnJhdGVzKSk7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4X3R4X3BvbGljeV9maW5kKHN0 cnVjdCB0eF9wb2xpY3lfY2FjaGUgKmNhY2hlLAotCQkJICAgICAgc3RydWN0IHR4X3BvbGljeSAq d2FudGVkKQotewotCXN0cnVjdCB0eF9wb2xpY3kgKml0OwotCi0JbGlzdF9mb3JfZWFjaF9lbnRy eShpdCwgJmNhY2hlLT51c2VkLCBsaW5rKQotCQlpZiAodHhfcG9saWN5X2lzX2VxdWFsKHdhbnRl ZCwgaXQpKQotCQkJcmV0dXJuIGl0IC0gY2FjaGUtPmNhY2hlOwotCWxpc3RfZm9yX2VhY2hfZW50 cnkoaXQsICZjYWNoZS0+ZnJlZSwgbGluaykKLQkJaWYgKHR4X3BvbGljeV9pc19lcXVhbCh3YW50 ZWQsIGl0KSkKLQkJCXJldHVybiBpdCAtIGNhY2hlLT5jYWNoZTsKLQlyZXR1cm4gLTE7Ci19Ci0K LXN0YXRpYyB2b2lkIHdmeF90eF9wb2xpY3lfdXNlKHN0cnVjdCB0eF9wb2xpY3lfY2FjaGUgKmNh Y2hlLAotCQkJICAgICAgc3RydWN0IHR4X3BvbGljeSAqZW50cnkpCi17Ci0JKytlbnRyeS0+dXNh Z2VfY291bnQ7Ci0JbGlzdF9tb3ZlKCZlbnRyeS0+bGluaywgJmNhY2hlLT51c2VkKTsKLX0KLQot c3RhdGljIGludCB3ZnhfdHhfcG9saWN5X3JlbGVhc2Uoc3RydWN0IHR4X3BvbGljeV9jYWNoZSAq Y2FjaGUsCi0JCQkJIHN0cnVjdCB0eF9wb2xpY3kgKmVudHJ5KQotewotCWludCByZXQgPSAtLWVu dHJ5LT51c2FnZV9jb3VudDsKLQotCWlmICghcmV0KQotCQlsaXN0X21vdmUoJmVudHJ5LT5saW5r LCAmY2FjaGUtPmZyZWUpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4X3R4X3Bv bGljeV9nZXQoc3RydWN0IHdmeF92aWYgKnd2aWYsCi0JCQkgICAgIHN0cnVjdCBpZWVlODAyMTFf dHhfcmF0ZSAqcmF0ZXMsIGJvb2wgKnJlbmV3KQotewotCWludCBpZHg7Ci0Jc3RydWN0IHR4X3Bv bGljeV9jYWNoZSAqY2FjaGUgPSAmd3ZpZi0+dHhfcG9saWN5X2NhY2hlOwotCXN0cnVjdCB0eF9w b2xpY3kgd2FudGVkOwotCi0Jd2Z4X3R4X3BvbGljeV9idWlsZCh3dmlmLCAmd2FudGVkLCByYXRl cyk7Ci0KLQlzcGluX2xvY2tfYmgoJmNhY2hlLT5sb2NrKTsKLQlpZiAobGlzdF9lbXB0eSgmY2Fj aGUtPmZyZWUpKSB7Ci0JCVdBUk4oMSwgInVuYWJsZSB0byBnZXQgYSB2YWxpZCBUeCBwb2xpY3ki KTsKLQkJc3Bpbl91bmxvY2tfYmgoJmNhY2hlLT5sb2NrKTsKLQkJcmV0dXJuIEhJRl9UWF9SRVRS WV9QT0xJQ1lfSU5WQUxJRDsKLQl9Ci0JaWR4ID0gd2Z4X3R4X3BvbGljeV9maW5kKGNhY2hlLCAm d2FudGVkKTsKLQlpZiAoaWR4ID49IDApIHsKLQkJKnJlbmV3ID0gZmFsc2U7Ci0JfSBlbHNlIHsK LQkJc3RydWN0IHR4X3BvbGljeSAqZW50cnk7Ci0JCSpyZW5ldyA9IHRydWU7Ci0JCS8qIElmIHBv bGljeSBpcyBub3QgZm91bmQgY3JlYXRlIGEgbmV3IG9uZQotCQkgKiB1c2luZyB0aGUgb2xkZXN0 IGVudHJ5IGluICJmcmVlIiBsaXN0Ci0JCSAqLwotCQllbnRyeSA9IGxpc3RfZW50cnkoY2FjaGUt PmZyZWUucHJldiwgc3RydWN0IHR4X3BvbGljeSwgbGluayk7Ci0JCW1lbWNweShlbnRyeS0+cmF0 ZXMsIHdhbnRlZC5yYXRlcywgc2l6ZW9mKGVudHJ5LT5yYXRlcykpOwotCQllbnRyeS0+dXBsb2Fk ZWQgPSBmYWxzZTsKLQkJZW50cnktPnVzYWdlX2NvdW50ID0gMDsKLQkJaWR4ID0gZW50cnkgLSBj YWNoZS0+Y2FjaGU7Ci0JfQotCXdmeF90eF9wb2xpY3lfdXNlKGNhY2hlLCAmY2FjaGUtPmNhY2hl W2lkeF0pOwotCWlmIChsaXN0X2VtcHR5KCZjYWNoZS0+ZnJlZSkpCi0JCWllZWU4MDIxMV9zdG9w X3F1ZXVlcyh3dmlmLT53ZGV2LT5odyk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmNhY2hlLT5sb2NrKTsK LQlyZXR1cm4gaWR4OwotfQotCi1zdGF0aWMgdm9pZCB3ZnhfdHhfcG9saWN5X3B1dChzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZiwgaW50IGlkeCkKLXsKLQlpbnQgdXNhZ2UsIGxvY2tlZDsKLQlzdHJ1Y3Qg dHhfcG9saWN5X2NhY2hlICpjYWNoZSA9ICZ3dmlmLT50eF9wb2xpY3lfY2FjaGU7Ci0KLQlpZiAo aWR4ID09IEhJRl9UWF9SRVRSWV9QT0xJQ1lfSU5WQUxJRCkKLQkJcmV0dXJuOwotCXNwaW5fbG9j a19iaCgmY2FjaGUtPmxvY2spOwotCWxvY2tlZCA9IGxpc3RfZW1wdHkoJmNhY2hlLT5mcmVlKTsK LQl1c2FnZSA9IHdmeF90eF9wb2xpY3lfcmVsZWFzZShjYWNoZSwgJmNhY2hlLT5jYWNoZVtpZHhd KTsKLQlpZiAobG9ja2VkICYmICF1c2FnZSkKLQkJaWVlZTgwMjExX3dha2VfcXVldWVzKHd2aWYt PndkZXYtPmh3KTsKLQlzcGluX3VubG9ja19iaCgmY2FjaGUtPmxvY2spOwotfQotCi1zdGF0aWMg aW50IHdmeF90eF9wb2xpY3lfdXBsb2FkKHN0cnVjdCB3ZnhfdmlmICp3dmlmKQotewotCXN0cnVj dCB0eF9wb2xpY3kgKnBvbGljaWVzID0gd3ZpZi0+dHhfcG9saWN5X2NhY2hlLmNhY2hlOwotCXU4 IHRtcF9yYXRlc1sxMl07Ci0JaW50IGksIGlzX3VzZWQ7Ci0KLQlkbyB7Ci0JCXNwaW5fbG9ja19i aCgmd3ZpZi0+dHhfcG9saWN5X2NhY2hlLmxvY2spOwotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRSh3dmlmLT50eF9wb2xpY3lfY2FjaGUuY2FjaGUpOyArK2kpIHsKLQkJCWlzX3VzZWQgPSBt ZW16Y21wKHBvbGljaWVzW2ldLnJhdGVzLAotCQkJCQkgIHNpemVvZihwb2xpY2llc1tpXS5yYXRl cykpOwotCQkJaWYgKCFwb2xpY2llc1tpXS51cGxvYWRlZCAmJiBpc191c2VkKQotCQkJCWJyZWFr OwotCQl9Ci0JCWlmIChpIDwgQVJSQVlfU0laRSh3dmlmLT50eF9wb2xpY3lfY2FjaGUuY2FjaGUp KSB7Ci0JCQlwb2xpY2llc1tpXS51cGxvYWRlZCA9IHRydWU7Ci0JCQltZW1jcHkodG1wX3JhdGVz LCBwb2xpY2llc1tpXS5yYXRlcywgc2l6ZW9mKHRtcF9yYXRlcykpOwotCQkJc3Bpbl91bmxvY2tf YmgoJnd2aWYtPnR4X3BvbGljeV9jYWNoZS5sb2NrKTsKLQkJCWhpZl9zZXRfdHhfcmF0ZV9yZXRy eV9wb2xpY3kod3ZpZiwgaSwgdG1wX3JhdGVzKTsKLQkJfSBlbHNlIHsKLQkJCXNwaW5fdW5sb2Nr X2JoKCZ3dmlmLT50eF9wb2xpY3lfY2FjaGUubG9jayk7Ci0JCX0KLQl9IHdoaWxlIChpIDwgQVJS QVlfU0laRSh3dmlmLT50eF9wb2xpY3lfY2FjaGUuY2FjaGUpKTsKLQlyZXR1cm4gMDsKLX0KLQot dm9pZCB3ZnhfdHhfcG9saWN5X3VwbG9hZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykK LXsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qg d2Z4X3ZpZiwgdHhfcG9saWN5X3VwbG9hZF93b3JrKTsKLQotCXdmeF90eF9wb2xpY3lfdXBsb2Fk KHd2aWYpOwotCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rldik7Ci19Ci0KLXZvaWQgd2Z4X3R4X3Bv bGljeV9pbml0KHN0cnVjdCB3ZnhfdmlmICp3dmlmKQotewotCXN0cnVjdCB0eF9wb2xpY3lfY2Fj aGUgKmNhY2hlID0gJnd2aWYtPnR4X3BvbGljeV9jYWNoZTsKLQlpbnQgaTsKLQotCW1lbXNldChj YWNoZSwgMCwgc2l6ZW9mKCpjYWNoZSkpOwotCi0Jc3Bpbl9sb2NrX2luaXQoJmNhY2hlLT5sb2Nr KTsKLQlJTklUX0xJU1RfSEVBRCgmY2FjaGUtPnVzZWQpOwotCUlOSVRfTElTVF9IRUFEKCZjYWNo ZS0+ZnJlZSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjYWNoZS0+Y2FjaGUpOyAr K2kpCi0JCWxpc3RfYWRkKCZjYWNoZS0+Y2FjaGVbaV0ubGluaywgJmNhY2hlLT5mcmVlKTsKLX0K LQotLyogVHggaW1wbGVtZW50YXRpb24gKi8KLQotc3RhdGljIGJvb2wgaWVlZTgwMjExX2lzX2Fj dGlvbl9iYWNrKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCi17Ci0Jc3RydWN0IGllZWU4MDIx MV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKWhkcjsKLQotCWlmICghaWVl ZTgwMjExX2lzX2FjdGlvbihtZ210LT5mcmFtZV9jb250cm9sKSkKLQkJcmV0dXJuIGZhbHNlOwot CWlmIChtZ210LT51LmFjdGlvbi5jYXRlZ29yeSAhPSBXTEFOX0NBVEVHT1JZX0JBQ0spCi0JCXJl dHVybiBmYWxzZTsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHU4IHdmeF90eF9nZXRfbGlu a19pZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKLQkJ CSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKLXsKLQlzdHJ1Y3Qgd2Z4X3N0YV9wcml2 ICpzdGFfcHJpdiA9Ci0JCXN0YSA/IChzdHJ1Y3Qgd2Z4X3N0YV9wcml2ICopJnN0YS0+ZHJ2X3By aXYgOiBOVUxMOwotCWNvbnN0IHU4ICpkYSA9IGllZWU4MDIxMV9nZXRfREEoaGRyKTsKLQotCWlm IChzdGFfcHJpdiAmJiBzdGFfcHJpdi0+bGlua19pZCkKLQkJcmV0dXJuIHN0YV9wcml2LT5saW5r X2lkOwotCWlmICh3dmlmLT52aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApCi0JCXJldHVy biAwOwotCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihkYSkpCi0JCXJldHVybiAwOwotCXJl dHVybiBISUZfTElOS19JRF9OT1RfQVNTT0NJQVRFRDsKLX0KLQotc3RhdGljIHZvaWQgd2Z4X3R4 X2ZpeHVwX3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZXMpCi17Ci0JaW50IGk7 Ci0JYm9vbCBmaW5pc2hlZDsKLQotCS8vIEZpcm13YXJlIGlzIG5vdCBhYmxlIHRvIG1peCByYXRl cyB3aXRoIGRpZmZlcmVudCBmbGFncwotCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfVFhfTUFY X1JBVEVTOyBpKyspIHsKLQkJaWYgKHJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1NI T1JUX0dJKQotCQkJcmF0ZXNbaV0uZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJOwot CQlpZiAoIShyYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSkpCi0JCQly YXRlc1tpXS5mbGFncyAmPSB+SUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJOwotCQlpZiAoIShyYXRl c1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUykpCi0JCQlyYXRlc1tpXS5m bGFncyAmPSB+SUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTOwotCX0KLQotCS8vIFNvcnQgcmF0 ZXMgYW5kIHJlbW92ZSBkdXBsaWNhdGVzCi0JZG8gewotCQlmaW5pc2hlZCA9IHRydWU7Ci0JCWZv ciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfVFhfTUFYX1JBVEVTIC0gMTsgaSsrKSB7Ci0JCQlpZiAo cmF0ZXNbaSArIDFdLmlkeCA9PSByYXRlc1tpXS5pZHggJiYKLQkJCSAgICByYXRlc1tpXS5pZHgg IT0gLTEpIHsKLQkJCQlyYXRlc1tpXS5jb3VudCArPSByYXRlc1tpICsgMV0uY291bnQ7Ci0JCQkJ aWYgKHJhdGVzW2ldLmNvdW50ID4gMTUpCi0JCQkJCXJhdGVzW2ldLmNvdW50ID0gMTU7Ci0JCQkJ cmF0ZXNbaSArIDFdLmlkeCA9IC0xOwotCQkJCXJhdGVzW2kgKyAxXS5jb3VudCA9IDA7Ci0KLQkJ CQlmaW5pc2hlZCA9IGZhbHNlOwotCQkJfQotCQkJaWYgKHJhdGVzW2kgKyAxXS5pZHggPiByYXRl c1tpXS5pZHgpIHsKLQkJCQlzd2FwKHJhdGVzW2kgKyAxXSwgcmF0ZXNbaV0pOwotCQkJCWZpbmlz aGVkID0gZmFsc2U7Ci0JCQl9Ci0JCX0KLQl9IHdoaWxlICghZmluaXNoZWQpOwotCS8vIEVuc3Vy ZSB0aGF0IE1DUzAgb3IgMU1icHMgaXMgcHJlc2VudCBhdCB0aGUgZW5kIG9mIHRoZSByZXRyeSBs aXN0Ci0JZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9UWF9NQVhfUkFURVM7IGkrKykgewotCQlp ZiAocmF0ZXNbaV0uaWR4ID09IDApCi0JCQlicmVhazsKLQkJaWYgKHJhdGVzW2ldLmlkeCA9PSAt MSkgewotCQkJcmF0ZXNbaV0uaWR4ID0gMDsKLQkJCXJhdGVzW2ldLmNvdW50ID0gODsgLy8gPT0g aHctPm1heF9yYXRlX3RyaWVzCi0JCQlyYXRlc1tpXS5mbGFncyA9IHJhdGVzW2kgLSAxXS5mbGFn cyAmCi0JCQkJCSBJRUVFODAyMTFfVFhfUkNfTUNTOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JLy8g QWxsIHJldHJpZXMgdXNlIGxvbmcgR0kKLQlmb3IgKGkgPSAxOyBpIDwgSUVFRTgwMjExX1RYX01B WF9SQVRFUzsgaSsrKQotCQlyYXRlc1tpXS5mbGFncyAmPSB+SUVFRTgwMjExX1RYX1JDX1NIT1JU X0dJOwotfQotCi1zdGF0aWMgdTggd2Z4X3R4X2dldF9yYXRlX2lkKHN0cnVjdCB3ZnhfdmlmICp3 dmlmLAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8pCi17Ci0JYm9v bCB0eF9wb2xpY3lfcmVuZXcgPSBmYWxzZTsKLQl1OCByYXRlX2lkOwotCi0JcmF0ZV9pZCA9IHdm eF90eF9wb2xpY3lfZ2V0KHd2aWYsCi0JCQkJICAgIHR4X2luZm8tPmRyaXZlcl9yYXRlcywgJnR4 X3BvbGljeV9yZW5ldyk7Ci0JaWYgKHJhdGVfaWQgPT0gSElGX1RYX1JFVFJZX1BPTElDWV9JTlZB TElEKQotCQlkZXZfd2Fybih3dmlmLT53ZGV2LT5kZXYsICJ1bmFibGUgdG8gZ2V0IGEgdmFsaWQg VHggcG9saWN5Iik7Ci0KLQlpZiAodHhfcG9saWN5X3JlbmV3KSB7Ci0JCXdmeF90eF9sb2NrKHd2 aWYtPndkZXYpOwotCQlpZiAoIXNjaGVkdWxlX3dvcmsoJnd2aWYtPnR4X3BvbGljeV91cGxvYWRf d29yaykpCi0JCQl3ZnhfdHhfdW5sb2NrKHd2aWYtPndkZXYpOwotCX0KLQlyZXR1cm4gcmF0ZV9p ZDsKLX0KLQotc3RhdGljIGludCB3ZnhfdHhfZ2V0X2ZyYW1lX2Zvcm1hdChzdHJ1Y3QgaWVlZTgw MjExX3R4X2luZm8gKnR4X2luZm8pCi17Ci0JaWYgKCEodHhfaW5mby0+ZHJpdmVyX3JhdGVzWzBd LmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX01DUykpCi0JCXJldHVybiBISUZfRlJBTUVfRk9STUFU X05PTl9IVDsKLQllbHNlIGlmICghKHR4X2luZm8tPmRyaXZlcl9yYXRlc1swXS5mbGFncyAmIElF RUU4MDIxMV9UWF9SQ19HUkVFTl9GSUVMRCkpCi0JCXJldHVybiBISUZfRlJBTUVfRk9STUFUX01J WEVEX0ZPUk1BVF9IVDsKLQllbHNlCi0JCXJldHVybiBISUZfRlJBTUVfRk9STUFUX0dGX0hUXzEx TjsKLX0KLQotc3RhdGljIGludCB3ZnhfdHhfZ2V0X2ljdl9sZW4oc3RydWN0IGllZWU4MDIxMV9r ZXlfY29uZiAqaHdfa2V5KQotewotCWludCBtaWNfc3BhY2U7Ci0KLQlpZiAoIWh3X2tleSkKLQkJ cmV0dXJuIDA7Ci0JaWYgKGh3X2tleS0+Y2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19D TUFDKQotCQlyZXR1cm4gMDsKLQltaWNfc3BhY2UgPSAoaHdfa2V5LT5jaXBoZXIgPT0gV0xBTl9D SVBIRVJfU1VJVEVfVEtJUCkgPyA4IDogMDsKLQlyZXR1cm4gaHdfa2V5LT5pY3ZfbGVuICsgbWlj X3NwYWNlOwotfQotCi1zdGF0aWMgaW50IHdmeF90eF9pbm5lcihzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp Ziwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKLQkJCXN0cnVjdCBza19idWZmICpza2IpCi17 Ci0Jc3RydWN0IGhpZl9tc2cgKmhpZl9tc2c7Ci0Jc3RydWN0IGhpZl9yZXFfdHggKnJlcTsKLQlz dHJ1Y3Qgd2Z4X3R4X3ByaXYgKnR4X3ByaXY7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0 eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXN0cnVjdCBpZWVlODAyMTFfa2V5X2Nv bmYgKmh3X2tleSA9IHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5OwotCXN0cnVjdCBpZWVlODAyMTFf aGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7Ci0JaW50IHF1ZXVl X2lkID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7Ci0Jc2l6ZV90IG9mZnNldCA9IChzaXpl X3Qpc2tiLT5kYXRhICYgMzsKLQlpbnQgd21zZ19sZW4gPSBzaXplb2Yoc3RydWN0IGhpZl9tc2cp ICsKLQkJCXNpemVvZihzdHJ1Y3QgaGlmX3JlcV90eCkgKyBvZmZzZXQ7Ci0KLQlXQVJOKHF1ZXVl X2lkID49IElFRUU4MDIxMV9OVU1fQUNTLCAidW5zdXBwb3J0ZWQgcXVldWVfaWQiKTsKLQl3Znhf dHhfZml4dXBfcmF0ZXModHhfaW5mby0+ZHJpdmVyX3JhdGVzKTsKLQotCS8vIEZyb20gbm93IHR4 X2luZm8tPmNvbnRyb2wgaXMgdW51c2FibGUKLQltZW1zZXQodHhfaW5mby0+cmF0ZV9kcml2ZXJf ZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCB3ZnhfdHhfcHJpdikpOwotCS8vIEZpbGwgdHhfcHJpdgot CXR4X3ByaXYgPSAoc3RydWN0IHdmeF90eF9wcml2ICopdHhfaW5mby0+cmF0ZV9kcml2ZXJfZGF0 YTsKLQl0eF9wcml2LT5pY3Zfc2l6ZSA9IHdmeF90eF9nZXRfaWN2X2xlbihod19rZXkpOwotCi0J Ly8gRmlsbCBoaWZfbXNnCi0JV0FSTihza2JfaGVhZHJvb20oc2tiKSA8IHdtc2dfbGVuLCAibm90 IGVub3VnaCBzcGFjZSBpbiBza2IiKTsKLQlXQVJOKG9mZnNldCAmIDEsICJhdHRlbXB0IHRvIHRy YW5zbWl0IGFuIHVuYWxpZ25lZCBmcmFtZSIpOwotCXNrYl9wdXQoc2tiLCB0eF9wcml2LT5pY3Zf c2l6ZSk7Ci0Jc2tiX3B1c2goc2tiLCB3bXNnX2xlbik7Ci0JbWVtc2V0KHNrYi0+ZGF0YSwgMCwg d21zZ19sZW4pOwotCWhpZl9tc2cgPSAoc3RydWN0IGhpZl9tc2cgKilza2ItPmRhdGE7Ci0JaGlm X21zZy0+bGVuID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4pOwotCWhpZl9tc2ctPmlkID0gSElGX1JF UV9JRF9UWDsKLQloaWZfbXNnLT5pbnRlcmZhY2UgPSB3dmlmLT5pZDsKLQlpZiAoc2tiLT5sZW4g PiB3dmlmLT53ZGV2LT5od19jYXBzLnNpemVfaW5wX2NoX2J1ZikgewotCQlkZXZfd2Fybih3dmlm LT53ZGV2LT5kZXYsCi0JCQkgInJlcXVlc3RlZCBmcmFtZSBzaXplICglZCkgaXMgbGFyZ2VyIHRo YW4gbWF4aW11bSBzdXBwb3J0ZWQgKCVkKVxuIiwKLQkJCSBza2ItPmxlbiwgd3ZpZi0+d2Rldi0+ aHdfY2Fwcy5zaXplX2lucF9jaF9idWYpOwotCQlza2JfcHVsbChza2IsIHdtc2dfbGVuKTsKLQkJ cmV0dXJuIC1FSU87Ci0JfQotCi0JLy8gRmlsbCB0eCByZXF1ZXN0Ci0JcmVxID0gKHN0cnVjdCBo aWZfcmVxX3R4ICopaGlmX21zZy0+Ym9keTsKLQkvLyBwYWNrZXRfaWQganVzdCBuZWVkIHRvIGJl IHVuaXF1ZSBvbiBkZXZpY2UuIDMyYml0cyBhcmUgbW9yZSB0aGFuCi0JLy8gbmVjZXNzYXJ5IGZv ciB0aGF0IHRhc2ssIHNvIHdlIHRhZSBhZHZhbnRhZ2Ugb2YgaXQgdG8gYWRkIHNvbWUgZXh0cmEK LQkvLyBkYXRhIGZvciBkZWJ1Zy4KLQlyZXEtPnBhY2tldF9pZCA9IGF0b21pY19hZGRfcmV0dXJu KDEsICZ3dmlmLT53ZGV2LT5wYWNrZXRfaWQpICYgMHhGRkZGOwotCXJlcS0+cGFja2V0X2lkIHw9 IElFRUU4MDIxMV9TRVFfVE9fU04obGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCkpIDw8IDE2Owot CXJlcS0+cGFja2V0X2lkIHw9IHF1ZXVlX2lkIDw8IDI4OwotCi0JcmVxLT5mY19vZmZzZXQgPSBv ZmZzZXQ7Ci0JaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9TRU5EX0FGVEVS X0RUSU0pCi0JCXJlcS0+YWZ0ZXJfZHRpbSA9IDE7Ci0JcmVxLT5wZWVyX3N0YV9pZCA9IHdmeF90 eF9nZXRfbGlua19pZCh3dmlmLCBzdGEsIGhkcik7Ci0JLy8gUXVldWUgaW5kZXggYXJlIGludmVy dGVkIGJldHdlZW4gZmlybXdhcmUgYW5kIExpbnV4Ci0JcmVxLT5xdWV1ZV9pZCA9IDMgLSBxdWV1 ZV9pZDsKLQlyZXEtPnJldHJ5X3BvbGljeV9pbmRleCA9IHdmeF90eF9nZXRfcmF0ZV9pZCh3dmlm LCB0eF9pbmZvKTsKLQlyZXEtPmZyYW1lX2Zvcm1hdCA9IHdmeF90eF9nZXRfZnJhbWVfZm9ybWF0 KHR4X2luZm8pOwotCWlmICh0eF9pbmZvLT5kcml2ZXJfcmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAy MTFfVFhfUkNfU0hPUlRfR0kpCi0JCXJlcS0+c2hvcnRfZ2kgPSAxOwotCi0JLy8gQXV4aWxpYXJ5 IG9wZXJhdGlvbnMKLQl3ZnhfdHhfcXVldWVzX3B1dCh3dmlmLCBza2IpOwotCWlmICh0eF9pbmZv LT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfU0VORF9BRlRFUl9EVElNKQotCQlzY2hlZHVsZV93 b3JrKCZ3dmlmLT51cGRhdGVfdGltX3dvcmspOwotCXdmeF9iaF9yZXF1ZXN0X3R4KHd2aWYtPndk ZXYpOwotCXJldHVybiAwOwotfQotCi12b2lkIHdmeF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dywgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sLAotCSAgICBzdHJ1Y3Qgc2tf YnVmZiAqc2tiKQotewotCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7Ci0Jc3RydWN0 IHdmeF92aWYgKnd2aWY7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9IGNvbnRyb2wgPyBj b250cm9sLT5zdGEgOiBOVUxMOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9 IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0 cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCXNpemVfdCBkcml2ZXJfZGF0YV9yb29t ID0gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbywKLQkJCQkJICAgICAgIHJh dGVfZHJpdmVyX2RhdGEpOwotCi0JY29tcGlsZXRpbWVfYXNzZXJ0KHNpemVvZihzdHJ1Y3Qgd2Z4 X3R4X3ByaXYpIDw9IGRyaXZlcl9kYXRhX3Jvb20sCi0JCQkgICAic3RydWN0IHR4X3ByaXYgaXMg dG9vIGxhcmdlIik7Ci0JV0FSTihza2ItPm5leHQgfHwgc2tiLT5wcmV2LCAic2tiIGlzIGFscmVh ZHkgbWVtYmVyIG9mIGEgbGlzdCIpOwotCS8vIGNvbnRyb2wudmlmIGNhbiBiZSBOVUxMIGZvciBp bmplY3RlZCBmcmFtZXMKLQlpZiAodHhfaW5mby0+Y29udHJvbC52aWYpCi0JCXd2aWYgPSAoc3Ry dWN0IHdmeF92aWYgKil0eF9pbmZvLT5jb250cm9sLnZpZi0+ZHJ2X3ByaXY7Ci0JZWxzZQotCQl3 dmlmID0gd3ZpZl9pdGVyYXRlKHdkZXYsIE5VTEwpOwotCWlmIChXQVJOX09OKCF3dmlmKSkKLQkJ Z290byBkcm9wOwotCS8vIEJlY2F1c2Ugb2YgVFhfQU1QRFVfU0VUVVBfSU5fSFcsIG1hYzgwMjEx IGRvZXMgbm90IHRyeSB0byBzZW5kIGFueQotCS8vIEJsb2NrQWNrIHNlc3Npb24gbWFuYWdlbWVu dCBmcmFtZS4gVGhlIGNoZWNrIGJlbG93IGV4aXN0IGp1c3QgaW4gY2FzZS4KLQlpZiAoaWVlZTgw MjExX2lzX2FjdGlvbl9iYWNrKGhkcikpIHsKLQkJZGV2X2luZm8od2Rldi0+ZGV2LCAiZHJvcCBC QSBhY3Rpb25cbiIpOwotCQlnb3RvIGRyb3A7Ci0JfQotCWlmICh3ZnhfdHhfaW5uZXIod3ZpZiwg c3RhLCBza2IpKQotCQlnb3RvIGRyb3A7Ci0KLQlyZXR1cm47Ci0KLWRyb3A6Ci0JaWVlZTgwMjEx X3R4X3N0YXR1c19pcnFzYWZlKHdkZXYtPmh3LCBza2IpOwotfQotCi1zdGF0aWMgdm9pZCB3Znhf c2tiX2R0b3Ioc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0J c3RydWN0IGhpZl9tc2cgKmhpZiA9IChzdHJ1Y3QgaGlmX21zZyAqKXNrYi0+ZGF0YTsKLQlzdHJ1 Y3QgaGlmX3JlcV90eCAqcmVxID0gKHN0cnVjdCBoaWZfcmVxX3R4ICopaGlmLT5ib2R5OwotCXVu c2lnbmVkIGludCBvZmZzZXQgPSBzaXplb2Yoc3RydWN0IGhpZl9tc2cpICsKLQkJCSAgICAgIHNp emVvZihzdHJ1Y3QgaGlmX3JlcV90eCkgKwotCQkJICAgICAgcmVxLT5mY19vZmZzZXQ7Ci0KLQlp ZiAoIXd2aWYpIHsKLQkJcHJfd2FybigiJXM6IHZpZiBhc3NvY2lhdGVkIHdpdGggdGhlIHNrYiBk b2VzIG5vdCBleGlzdCBhbnltb3JlXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybjsKLQl9Ci0Jd2Z4 X3R4X3BvbGljeV9wdXQod3ZpZiwgcmVxLT5yZXRyeV9wb2xpY3lfaW5kZXgpOwotCXNrYl9wdWxs KHNrYiwgb2Zmc2V0KTsKLQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUod3ZpZi0+d2Rldi0+ aHcsIHNrYik7Ci19Ci0KLXN0YXRpYyB2b2lkIHdmeF90eF9maWxsX3JhdGVzKHN0cnVjdCB3Znhf ZGV2ICp3ZGV2LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvLAot CQkJICAgICAgY29uc3Qgc3RydWN0IGhpZl9jbmZfdHggKmFyZykKLXsKLQlzdHJ1Y3QgaWVlZTgw MjExX3R4X3JhdGUgKnJhdGU7Ci0JaW50IHR4X2NvdW50OwotCWludCBpOwotCi0JdHhfY291bnQg PSBhcmctPmFja19mYWlsdXJlczsKLQlpZiAoIWFyZy0+c3RhdHVzIHx8IGFyZy0+YWNrX2ZhaWx1 cmVzKQotCQl0eF9jb3VudCArPSAxOyAvLyBBbHNvIHJlcG9ydCBzdWNjZXNzCi0JZm9yIChpID0g MDsgaSA8IElFRUU4MDIxMV9UWF9NQVhfUkFURVM7IGkrKykgewotCQlyYXRlID0gJnR4X2luZm8t PnN0YXR1cy5yYXRlc1tpXTsKLQkJaWYgKHJhdGUtPmlkeCA8IDApCi0JCQlicmVhazsKLQkJaWYg KHR4X2NvdW50IDwgcmF0ZS0+Y291bnQgJiYKLQkJICAgIGFyZy0+c3RhdHVzID09IEhJRl9TVEFU VVNfVFhfRkFJTF9SRVRSSUVTICYmCi0JCSAgICBhcmctPmFja19mYWlsdXJlcykKLQkJCWRldl9k Ymcod2Rldi0+ZGV2LCAiYWxsIHJldHJpZXMgd2VyZSBub3QgY29uc3VtZWQ6ICVkICE9ICVkXG4i LAotCQkJCXJhdGUtPmNvdW50LCB0eF9jb3VudCk7Ci0JCWlmICh0eF9jb3VudCA8PSByYXRlLT5j b3VudCAmJiB0eF9jb3VudCAmJgotCQkgICAgYXJnLT50eGVkX3JhdGUgIT0gd2Z4X2dldF9od19y YXRlKHdkZXYsIHJhdGUpKQotCQkJZGV2X2RiZyh3ZGV2LT5kZXYsICJpbmNvbnNpc3RlbnQgdHhf aW5mbyByYXRlczogJWQgIT0gJWRcbiIsCi0JCQkJYXJnLT50eGVkX3JhdGUsIHdmeF9nZXRfaHdf cmF0ZSh3ZGV2LCByYXRlKSk7Ci0JCWlmICh0eF9jb3VudCA+IHJhdGUtPmNvdW50KSB7Ci0JCQl0 eF9jb3VudCAtPSByYXRlLT5jb3VudDsKLQkJfSBlbHNlIGlmICghdHhfY291bnQpIHsKLQkJCXJh dGUtPmNvdW50ID0gMDsKLQkJCXJhdGUtPmlkeCA9IC0xOwotCQl9IGVsc2UgewotCQkJcmF0ZS0+ Y291bnQgPSB0eF9jb3VudDsKLQkJCXR4X2NvdW50ID0gMDsKLQkJfQotCX0KLQlpZiAodHhfY291 bnQpCi0JCWRldl9kYmcod2Rldi0+ZGV2LCAiJWQgbW9yZSByZXRyaWVzIHRoYW4gZXhwZWN0ZWRc biIsIHR4X2NvdW50KTsKLX0KLQotdm9pZCB3ZnhfdHhfY29uZmlybV9jYihzdHJ1Y3Qgd2Z4X2Rl diAqd2RldiwgY29uc3Qgc3RydWN0IGhpZl9jbmZfdHggKmFyZykKLXsKLQljb25zdCBzdHJ1Y3Qg d2Z4X3R4X3ByaXYgKnR4X3ByaXY7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZv OwotCXN0cnVjdCB3ZnhfdmlmICp3dmlmOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQlza2Ig PSB3ZnhfcGVuZGluZ19nZXQod2RldiwgYXJnLT5wYWNrZXRfaWQpOwotCWlmICghc2tiKSB7Ci0J CWRldl93YXJuKHdkZXYtPmRldiwgInJlY2VpdmVkIHVua25vd24gcGFja2V0X2lkICglIy44eCkg ZnJvbSBjaGlwXG4iLAotCQkJIGFyZy0+cGFja2V0X2lkKTsKLQkJcmV0dXJuOwotCX0KLQl0eF9p bmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXR4X3ByaXYgPSB3Znhfc2tiX3R4X3ByaXYo c2tiKTsKLQl3dmlmID0gd2Rldl90b193dmlmKHdkZXYsICgoc3RydWN0IGhpZl9tc2cgKilza2It PmRhdGEpLT5pbnRlcmZhY2UpOwotCVdBUk5fT04oIXd2aWYpOwotCWlmICghd3ZpZikKLQkJcmV0 dXJuOwotCi0JLy8gTm90ZSB0aGF0IHdmeF9wZW5kaW5nX2dldF9wa3RfdXNfZGVsYXkoKSBnZXQg ZGF0YSBmcm9tIHR4X2luZm8KLQlfdHJhY2VfdHhfc3RhdHMoYXJnLCBza2IsIHdmeF9wZW5kaW5n X2dldF9wa3RfdXNfZGVsYXkod2Rldiwgc2tiKSk7Ci0Jd2Z4X3R4X2ZpbGxfcmF0ZXMod2Rldiwg dHhfaW5mbywgYXJnKTsKLQlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gdHhfcHJpdi0+aWN2X3Np emUpOwotCi0JLy8gRnJvbSBub3csIHlvdSBjYW4gdG91Y2ggdG8gdHhfaW5mby0+c3RhdHVzLCBi dXQgZG8gbm90IHRvdWNoIHRvCi0JLy8gdHhfcHJpdiBhbnltb3JlCi0JLy8gRklYTUU6IHVzZSBp ZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXMoKQotCW1lbXNldCh0eF9pbmZvLT5yYXRlX2Ry aXZlcl9kYXRhLCAwLCBzaXplb2YodHhfaW5mby0+cmF0ZV9kcml2ZXJfZGF0YSkpOwotCW1lbXNl dCh0eF9pbmZvLT5wYWQsIDAsIHNpemVvZih0eF9pbmZvLT5wYWQpKTsKLQotCWlmICghYXJnLT5z dGF0dXMpIHsKLQkJdHhfaW5mby0+c3RhdHVzLnR4X3RpbWUgPQotCQkJbGUzMl90b19jcHUoYXJn LT5tZWRpYV9kZWxheSkgLQotCQkJbGUzMl90b19jcHUoYXJnLT50eF9xdWV1ZV9kZWxheSk7Ci0J CWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKQotCQkJdHhfaW5m by0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfTk9BQ0tfVFJBTlNNSVRURUQ7Ci0JCWVsc2UK LQkJCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKLQl9IGVsc2UgaWYg KGFyZy0+c3RhdHVzID09IEhJRl9TVEFUVVNfVFhfRkFJTF9SRVFVRVVFKSB7Ci0JCVdBUk4oIWFy Zy0+cmVxdWV1ZSwgImluY29oZXJlbnQgc3RhdHVzIGFuZCByZXN1bHRfZmxhZ3MiKTsKLQkJaWYg KHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9TRU5EX0FGVEVSX0RUSU0pIHsKLQkJ CXd2aWYtPmFmdGVyX2R0aW1fdHhfYWxsb3dlZCA9IGZhbHNlOyAvLyBEVElNIHBlcmlvZCBlbGFw c2VkCi0JCQlzY2hlZHVsZV93b3JrKCZ3dmlmLT51cGRhdGVfdGltX3dvcmspOwotCQl9Ci0JCXR4 X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX1RYX0ZJTFRFUkVEOwotCX0KLQl3Znhf c2tiX2R0b3Iod3ZpZiwgc2tiKTsKLX0KLQotc3RhdGljIHZvaWQgd2Z4X2ZsdXNoX3ZpZihzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiwgdTMyIHF1ZXVlcywKLQkJCSAgc3RydWN0IHNrX2J1ZmZfaGVhZCAq ZHJvcHBlZCkKLXsKLQlzdHJ1Y3Qgd2Z4X3F1ZXVlICpxdWV1ZTsKLQlpbnQgaTsKLQotCWZvciAo aSA9IDA7IGkgPCBJRUVFODAyMTFfTlVNX0FDUzsgaSsrKSB7Ci0JCWlmICghKEJJVChpKSAmIHF1 ZXVlcykpCi0JCQljb250aW51ZTsKLQkJcXVldWUgPSAmd3ZpZi0+dHhfcXVldWVbaV07Ci0JCWlm IChkcm9wcGVkKQotCQkJd2Z4X3R4X3F1ZXVlX2Ryb3Aod3ZpZiwgcXVldWUsIGRyb3BwZWQpOwot CX0KLQlpZiAod3ZpZi0+d2Rldi0+Y2hpcF9mcm96ZW4pCi0JCXJldHVybjsKLQlmb3IgKGkgPSAw OyBpIDwgSUVFRTgwMjExX05VTV9BQ1M7IGkrKykgewotCQlpZiAoIShCSVQoaSkgJiBxdWV1ZXMp KQotCQkJY29udGludWU7Ci0JCXF1ZXVlID0gJnd2aWYtPnR4X3F1ZXVlW2ldOwotCQlpZiAod2Fp dF9ldmVudF90aW1lb3V0KHd2aWYtPndkZXYtPnR4X2RlcXVldWUsCi0JCQkJICAgICAgIHdmeF90 eF9xdWV1ZV9lbXB0eSh3dmlmLCBxdWV1ZSksCi0JCQkJICAgICAgIG1zZWNzX3RvX2ppZmZpZXMo MTAwMCkpIDw9IDApCi0JCQlkZXZfd2Fybih3dmlmLT53ZGV2LT5kZXYsCi0JCQkJICJmcmFtZXMg cXVldWVkIHdoaWxlIGZsdXNoaW5nIHR4IHF1ZXVlcz8iKTsKLQl9Ci19Ci0KLXZvaWQgd2Z4X2Zs dXNoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAot CSAgICAgICB1MzIgcXVldWVzLCBib29sIGRyb3ApCi17Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXYg PSBody0+cHJpdjsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGRyb3BwZWQ7Ci0Jc3RydWN0IHdmeF92 aWYgKnd2aWY7Ci0Jc3RydWN0IGhpZl9tc2cgKmhpZjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwot Ci0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmZHJvcHBlZCk7Ci0JaWYgKHZpZikgewotCQl3dmlmID0g KHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKLQkJd2Z4X2ZsdXNoX3ZpZih3dmlmLCBx dWV1ZXMsIGRyb3AgPyAmZHJvcHBlZCA6IE5VTEwpOwotCX0gZWxzZSB7Ci0JCXd2aWYgPSBOVUxM OwotCQl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJhdGUod2Rldiwgd3ZpZikpICE9IE5VTEwpCi0J CQl3ZnhfZmx1c2hfdmlmKHd2aWYsIHF1ZXVlcywgZHJvcCA/ICZkcm9wcGVkIDogTlVMTCk7Ci0J fQotCXdmeF90eF9mbHVzaCh3ZGV2KTsKLQlpZiAod2Rldi0+Y2hpcF9mcm96ZW4pCi0JCXdmeF9w ZW5kaW5nX2Ryb3Aod2RldiwgJmRyb3BwZWQpOwotCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUo JmRyb3BwZWQpKSAhPSBOVUxMKSB7Ci0JCWhpZiA9IChzdHJ1Y3QgaGlmX21zZyAqKXNrYi0+ZGF0 YTsKLQkJd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2LCBoaWYtPmludGVyZmFjZSk7Ci0JCWllZWU4 MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyhJRUVFODAyMTFfU0tCX0NCKHNrYikpOwotCQl3Znhf c2tiX2R0b3Iod3ZpZiwgc2tiKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcv d2Z4L2RhdGFfdHguaCBiL2RyaXZlcnMvc3RhZ2luZy93ZngvZGF0YV90eC5oCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCA0MDEzNjNkNmI1NjMuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2 ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfdHguaAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAK LS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KLS8qCi0gKiBEYXRh cGF0aCBpbXBsZW1lbnRhdGlvbi4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2ls aWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nz b24KLSAqLwotI2lmbmRlZiBXRlhfREFUQV9UWF9ICi0jZGVmaW5lIFdGWF9EQVRBX1RYX0gKLQot I2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLQotI2lu Y2x1ZGUgImhpZl9hcGlfY21kLmgiCi0jaW5jbHVkZSAiaGlmX2FwaV9taWIuaCIKLQotc3RydWN0 IHdmeF90eF9wcml2Owotc3RydWN0IHdmeF9kZXY7Ci1zdHJ1Y3Qgd2Z4X3ZpZjsKLQotc3RydWN0 IHR4X3BvbGljeSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaW5rOwotCWludCB1c2FnZV9jb3VudDsK LQl1OCByYXRlc1sxMl07Ci0JYm9vbCB1cGxvYWRlZDsKLX07Ci0KLXN0cnVjdCB0eF9wb2xpY3lf Y2FjaGUgewotCXN0cnVjdCB0eF9wb2xpY3kgY2FjaGVbSElGX1RYX1JFVFJZX1BPTElDWV9NQVhd OwotCS8vIEZJWE1FOiB1c2UgYSB0cmVlcyBhbmQgZHJvcCBoYXNoIGZyb20gdHhfcG9saWN5Ci0J c3RydWN0IGxpc3RfaGVhZCB1c2VkOwotCXN0cnVjdCBsaXN0X2hlYWQgZnJlZTsKLQlzcGlubG9j a190IGxvY2s7Ci19OwotCi1zdHJ1Y3Qgd2Z4X3R4X3ByaXYgewotCWt0aW1lX3QgeG1pdF90aW1l c3RhbXA7Ci0JdW5zaWduZWQgY2hhciBpY3Zfc2l6ZTsKLX07Ci0KLXZvaWQgd2Z4X3R4X3BvbGlj eV9pbml0KHN0cnVjdCB3ZnhfdmlmICp3dmlmKTsKLXZvaWQgd2Z4X3R4X3BvbGljeV91cGxvYWRf d29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotCi12b2lkIHdmeF90eChzdHJ1Y3QgaWVl ZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sLAotCSAg ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXZvaWQgd2Z4X3R4X2NvbmZpcm1fY2Ioc3RydWN0IHdm eF9kZXYgKndkZXYsIGNvbnN0IHN0cnVjdCBoaWZfY25mX3R4ICphcmcpOwotdm9pZCB3ZnhfZmx1 c2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0J ICAgICAgIHUzMiBxdWV1ZXMsIGJvb2wgZHJvcCk7Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHdm eF90eF9wcml2ICp3Znhfc2tiX3R4X3ByaXYoc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1 Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm87Ci0KLQlpZiAoIXNrYikKLQkJcmV0dXJuIE5V TEw7Ci0JdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlyZXR1cm4gKHN0cnVjdCB3 ZnhfdHhfcHJpdiAqKXR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGE7Ci19Ci0KLXN0YXRpYyBpbmxp bmUgc3RydWN0IGhpZl9yZXFfdHggKndmeF9za2JfdHhyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYikK LXsKLQlzdHJ1Y3QgaGlmX21zZyAqaGlmID0gKHN0cnVjdCBoaWZfbXNnICopc2tiLT5kYXRhOwot CXN0cnVjdCBoaWZfcmVxX3R4ICpyZXEgPSAoc3RydWN0IGhpZl9yZXFfdHggKiloaWYtPmJvZHk7 Ci0KLQlyZXR1cm4gcmVxOwotfQotCi0jZW5kaWYgLyogV0ZYX0RBVEFfVFhfSCAqLwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9kZWJ1Zy5jIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9k ZWJ1Zy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWRhZGE3OGMyNWYuLjAwMDAw MDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2RlYnVnLmMKKysrIC9kZXYvbnVsbApA QCAtMSwzNTkgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25s eQotLyoKLSAqIERlYnVnZnMgaW50ZXJmYWNlLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0y MDIwLCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBT VC1Fcmljc3NvbgotICovCi0jaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgotI2luY2x1ZGUgPGxp bnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLQotI2luY2x1ZGUgImRl YnVnLmgiCi0jaW5jbHVkZSAid2Z4LmgiCi0jaW5jbHVkZSAic3RhLmgiCi0jaW5jbHVkZSAibWFp bi5oIgotI2luY2x1ZGUgImhpZl90eC5oIgotI2luY2x1ZGUgImhpZl90eF9taWIuaCIKLQotI2Rl ZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCi0jaW5jbHVkZSAidHJhY2VzLmgiCi0KLXN0YXRpYyBj b25zdCBzdHJ1Y3QgdHJhY2VfcHJpbnRfZmxhZ3MgaGlmX21zZ19wcmludF9tYXBbXSA9IHsKLQlo aWZfbXNnX2xpc3QsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHRyYWNlX3ByaW50X2ZsYWdz IGhpZl9taWJfcHJpbnRfbWFwW10gPSB7Ci0JaGlmX21pYl9saXN0LAotfTsKLQotc3RhdGljIGNv bnN0IHN0cnVjdCB0cmFjZV9wcmludF9mbGFncyB3ZnhfcmVnX3ByaW50X21hcFtdID0gewotCXdm eF9yZWdfbGlzdCwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpnZXRfc3ltYm9sKHVuc2lnbmVk IGxvbmcgdmFsLAotCQkJICAgICAgY29uc3Qgc3RydWN0IHRyYWNlX3ByaW50X2ZsYWdzICpzeW1i b2xfYXJyYXkpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBzeW1ib2xfYXJyYXlbaV0ubWFz ayAhPSAtMTsgaSsrKSB7Ci0JCWlmICh2YWwgPT0gc3ltYm9sX2FycmF5W2ldLm1hc2spCi0JCQly ZXR1cm4gc3ltYm9sX2FycmF5W2ldLm5hbWU7Ci0JfQotCi0JcmV0dXJuICJ1bmtub3duIjsKLX0K LQotY29uc3QgY2hhciAqZ2V0X2hpZl9uYW1lKHVuc2lnbmVkIGxvbmcgaWQpCi17Ci0JcmV0dXJu IGdldF9zeW1ib2woaWQsIGhpZl9tc2dfcHJpbnRfbWFwKTsKLX0KLQotY29uc3QgY2hhciAqZ2V0 X21pYl9uYW1lKHVuc2lnbmVkIGxvbmcgaWQpCi17Ci0JcmV0dXJuIGdldF9zeW1ib2woaWQsIGhp Zl9taWJfcHJpbnRfbWFwKTsKLX0KLQotY29uc3QgY2hhciAqZ2V0X3JlZ19uYW1lKHVuc2lnbmVk IGxvbmcgaWQpCi17Ci0JcmV0dXJuIGdldF9zeW1ib2woaWQsIHdmeF9yZWdfcHJpbnRfbWFwKTsK LX0KLQotc3RhdGljIGludCB3ZnhfY291bnRlcnNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwg dm9pZCAqdikKLXsKLQlpbnQgcmV0LCBpOwotCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gc2VxLT5w cml2YXRlOwotCXN0cnVjdCBoaWZfbWliX2V4dGVuZGVkX2NvdW50X3RhYmxlIGNvdW50ZXJzWzNd OwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY291bnRlcnMpOyBpKyspIHsKLQkJcmV0 ID0gaGlmX2dldF9jb3VudGVyc190YWJsZSh3ZGV2LCBpLCBjb3VudGVycyArIGkpOwotCQlpZiAo cmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0JCWlmIChyZXQgPiAwKQotCQkJcmV0dXJuIC1FSU87 Ci0JfQotCi0Jc2VxX3ByaW50ZihzZXEsICIlLTI0cyAlMTJzICUxMnMgJTEyc1xuIiwKLQkJICAg IiIsICJnbG9iYWwiLCAiaWZhY2UgMCIsICJpZmFjZSAxIik7Ci0KLSNkZWZpbmUgUFVUX0NPVU5U RVIobmFtZSkgXAotCXNlcV9wcmludGYoc2VxLCAiJS0yNHMgJTEyZCAlMTJkICUxMmRcbiIsICNu YW1lLCBcCi0JCSAgIGxlMzJfdG9fY3B1KGNvdW50ZXJzWzJdLmNvdW50XyMjbmFtZSksIFwKLQkJ ICAgbGUzMl90b19jcHUoY291bnRlcnNbMF0uY291bnRfIyNuYW1lKSwgXAotCQkgICBsZTMyX3Rv X2NwdShjb3VudGVyc1sxXS5jb3VudF8jI25hbWUpKQotCi0JUFVUX0NPVU5URVIodHhfcGFja2V0 cyk7Ci0JUFVUX0NPVU5URVIodHhfbXVsdGljYXN0X2ZyYW1lcyk7Ci0JUFVUX0NPVU5URVIodHhf ZnJhbWVzX3N1Y2Nlc3MpOwotCVBVVF9DT1VOVEVSKHR4X2ZyYW1lX2ZhaWx1cmVzKTsKLQlQVVRf Q09VTlRFUih0eF9mcmFtZXNfcmV0cmllZCk7Ci0JUFVUX0NPVU5URVIodHhfZnJhbWVzX211bHRp X3JldHJpZWQpOwotCi0JUFVUX0NPVU5URVIocnRzX3N1Y2Nlc3MpOwotCVBVVF9DT1VOVEVSKHJ0 c19mYWlsdXJlcyk7Ci0JUFVUX0NPVU5URVIoYWNrX2ZhaWx1cmVzKTsKLQotCVBVVF9DT1VOVEVS KHJ4X3BhY2tldHMpOwotCVBVVF9DT1VOVEVSKHJ4X2ZyYW1lc19zdWNjZXNzKTsKLQlQVVRfQ09V TlRFUihyeF9wYWNrZXRfZXJyb3JzKTsKLQlQVVRfQ09VTlRFUihwbGNwX2Vycm9ycyk7Ci0JUFVU X0NPVU5URVIoZmNzX2Vycm9ycyk7Ci0JUFVUX0NPVU5URVIocnhfZGVjcnlwdGlvbl9mYWlsdXJl cyk7Ci0JUFVUX0NPVU5URVIocnhfbWljX2ZhaWx1cmVzKTsKLQlQVVRfQ09VTlRFUihyeF9ub19r ZXlfZmFpbHVyZXMpOwotCVBVVF9DT1VOVEVSKHJ4X2ZyYW1lX2R1cGxpY2F0ZXMpOwotCVBVVF9D T1VOVEVSKHJ4X211bHRpY2FzdF9mcmFtZXMpOwotCVBVVF9DT1VOVEVSKHJ4X2NtYWNpY3ZfZXJy b3JzKTsKLQlQVVRfQ09VTlRFUihyeF9jbWFjX3JlcGxheXMpOwotCVBVVF9DT1VOVEVSKHJ4X21n bXRfY2NtcF9yZXBsYXlzKTsKLQotCVBVVF9DT1VOVEVSKHJ4X2JlYWNvbik7Ci0JUFVUX0NPVU5U RVIobWlzc19iZWFjb24pOwotCi0jdW5kZWYgUFVUX0NPVU5URVIKLQotCWZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKGNvdW50ZXJzWzBdLnJlc2VydmVkKTsgaSsrKQotCQlzZXFfcHJpbnRmKHNl cSwgInJlc2VydmVkWyUwMmRdJTEycyAlMTJkICUxMmQgJTEyZFxuIiwgaSwgIiIsCi0JCQkgICBs ZTMyX3RvX2NwdShjb3VudGVyc1syXS5yZXNlcnZlZFtpXSksCi0JCQkgICBsZTMyX3RvX2NwdShj b3VudGVyc1swXS5yZXNlcnZlZFtpXSksCi0JCQkgICBsZTMyX3RvX2NwdShjb3VudGVyc1sxXS5y ZXNlcnZlZFtpXSkpOwotCi0JcmV0dXJuIDA7Ci19Ci1ERUZJTkVfU0hPV19BVFRSSUJVVEUod2Z4 X2NvdW50ZXJzKTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjaGFubmVsX25hbWVzW10g PSB7Ci0JWzBdID0gIjFNIiwKLQlbMV0gPSAiMk0iLAotCVsyXSA9ICI1LjVNIiwKLQlbM10gPSAi MTFNIiwKLQkvKiBFbnRyaWVzIDQgYW5kIDUgZG9lcyBub3QgZXhpc3QgKi8KLQlbNl0gPSAiNk0i LAotCVs3XSA9ICI5TSIsCi0JWzhdID0gIjEyTSIsCi0JWzldID0gIjE4TSIsCi0JWzEwXSA9ICIy NE0iLAotCVsxMV0gPSAiMzZNIiwKLQlbMTJdID0gIjQ4TSIsCi0JWzEzXSA9ICI1NE0iLAotCVsx NF0gPSAiTUNTMCIsCi0JWzE1XSA9ICJNQ1MxIiwKLQlbMTZdID0gIk1DUzIiLAotCVsxN10gPSAi TUNTMyIsCi0JWzE4XSA9ICJNQ1M0IiwKLQlbMTldID0gIk1DUzUiLAotCVsyMF0gPSAiTUNTNiIs Ci0JWzIxXSA9ICJNQ1M3IiwKLX07Ci0KLXN0YXRpYyBpbnQgd2Z4X3J4X3N0YXRzX3Nob3coc3Ry dWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXYgPSBz ZXEtPnByaXZhdGU7Ci0Jc3RydWN0IGhpZl9yeF9zdGF0cyAqc3QgPSAmd2Rldi0+cnhfc3RhdHM7 Ci0JaW50IGk7Ci0KLQltdXRleF9sb2NrKCZ3ZGV2LT5yeF9zdGF0c19sb2NrKTsKLQlzZXFfcHJp bnRmKHNlcSwgIlRpbWVzdGFtcDogJWR1c1xuIiwgc3QtPmRhdGUpOwotCXNlcV9wcmludGYoc2Vx LCAiTG93IHBvd2VyIGNsb2NrOiBmcmVxdWVuY3kgJXVIeiwgZXh0ZXJuYWwgJXNcbiIsCi0JCSAg IGxlMzJfdG9fY3B1KHN0LT5wd3JfY2xrX2ZyZXEpLAotCQkgICBzdC0+aXNfZXh0X3B3cl9jbGsg PyAieWVzIiA6ICJubyIpOwotCXNlcV9wcmludGYoc2VxLAotCQkgICAiTnVtLiBvZiBmcmFtZXM6 ICVkLCBQRVIgKHgxMGU0KTogJWQsIFRocm91Z2hwdXQ6ICVkS2Jwcy9zXG4iLAotCQkgICBzdC0+ bmJfcnhfZnJhbWUsIHN0LT5wZXJfdG90YWwsIHN0LT50aHJvdWdocHV0KTsKLQlzZXFfcHV0cyhz ZXEsICIgICAgICAgTnVtLiBvZiAgICAgIFBFUiAgICAgUlNTSSAgICAgIFNOUiAgICAgIENGT1xu Iik7Ci0Jc2VxX3B1dHMoc2VxLCAiICAgICAgICBmcmFtZXMgICh4MTBlNCkgICAgKGRCbSkgICAg IChkQikgICAgKGtIeilcbiIpOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNoYW5uZWxf bmFtZXMpOyBpKyspIHsKLQkJaWYgKGNoYW5uZWxfbmFtZXNbaV0pCi0JCQlzZXFfcHJpbnRmKHNl cSwgIiU1cyAlOGQgJThkICU4ZCAlOGQgJThkXG4iLAotCQkJCSAgIGNoYW5uZWxfbmFtZXNbaV0s Ci0JCQkJICAgbGUzMl90b19jcHUoc3QtPm5iX3J4X2J5X3JhdGVbaV0pLAotCQkJCSAgIGxlMTZf dG9fY3B1KHN0LT5wZXJbaV0pLAotCQkJCSAgIChzMTYpbGUxNl90b19jcHUoc3QtPnJzc2lbaV0p IC8gMTAwLAotCQkJCSAgIChzMTYpbGUxNl90b19jcHUoc3QtPnNucltpXSkgLyAxMDAsCi0JCQkJ ICAgKHMxNilsZTE2X3RvX2NwdShzdC0+Y2ZvW2ldKSk7Ci0JfQotCW11dGV4X3VubG9jaygmd2Rl di0+cnhfc3RhdHNfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLURFRklORV9TSE9XX0FUVFJJQlVU RSh3Znhfcnhfc3RhdHMpOwotCi1zdGF0aWMgaW50IHdmeF90eF9wb3dlcl9sb29wX3Nob3coc3Ry dWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXYgPSBz ZXEtPnByaXZhdGU7Ci0Jc3RydWN0IGhpZl90eF9wb3dlcl9sb29wX2luZm8gKnN0ID0gJndkZXYt PnR4X3Bvd2VyX2xvb3BfaW5mbzsKLQlpbnQgdG1wOwotCi0JbXV0ZXhfbG9jaygmd2Rldi0+dHhf cG93ZXJfbG9vcF9pbmZvX2xvY2spOwotCXRtcCA9IGxlMTZfdG9fY3B1KHN0LT50eF9nYWluX2Rp Zyk7Ci0Jc2VxX3ByaW50ZihzZXEsICJUeCBnYWluIGRpZ2l0YWw6ICVkXG4iLCB0bXApOwotCXRt cCA9IGxlMTZfdG9fY3B1KHN0LT50eF9nYWluX3BhKTsKLQlzZXFfcHJpbnRmKHNlcSwgIlR4IGdh aW4gUEE6ICVkXG4iLCB0bXApOwotCXRtcCA9IChzMTYpbGUxNl90b19jcHUoc3QtPnRhcmdldF9w b3V0KTsKLQlzZXFfcHJpbnRmKHNlcSwgIlRhcmdldCBQb3V0OiAlZC4lMDJkIGRCbVxuIiwgdG1w IC8gNCwgKHRtcCAlIDQpICogMjUpOwotCXRtcCA9IChzMTYpbGUxNl90b19jcHUoc3QtPnBfZXN0 aW1hdGlvbik7Ci0Jc2VxX3ByaW50ZihzZXEsICJGRU0gUG91dDogJWQuJTAyZCBkQm1cbiIsIHRt cCAvIDQsICh0bXAgJSA0KSAqIDI1KTsKLQl0bXAgPSBsZTE2X3RvX2NwdShzdC0+dnBkZXQpOwot CXNlcV9wcmludGYoc2VxLCAiVnBkZXQ6ICVkIG1WXG4iLCB0bXApOwotCXNlcV9wcmludGYoc2Vx LCAiTWVhc3VyZSBpbmRleDogJWRcbiIsIHN0LT5tZWFzdXJlbWVudF9pbmRleCk7Ci0JbXV0ZXhf dW5sb2NrKCZ3ZGV2LT50eF9wb3dlcl9sb29wX2luZm9fbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0K LURFRklORV9TSE9XX0FUVFJJQlVURSh3ZnhfdHhfcG93ZXJfbG9vcCk7Ci0KLXN0YXRpYyBzc2l6 ZV90IHdmeF9zZW5kX3Bkc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkgIGNvbnN0IGNo YXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQot ewotCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgKmJ1 ZjsKLQlpbnQgcmV0OwotCi0JaWYgKCpwcG9zICE9IDApIHsKLQkJZGV2X2RiZyh3ZGV2LT5kZXYs ICJQRFMgZGF0YSBtdXN0IGJlIHdyaXR0ZW4gaW4gb25lIHRyYW5zYWN0aW9uIik7Ci0JCXJldHVy biAtRUJVU1k7Ci0JfQotCWJ1ZiA9IG1lbWR1cF91c2VyKHVzZXJfYnVmLCBjb3VudCk7Ci0JaWYg KElTX0VSUihidWYpKQotCQlyZXR1cm4gUFRSX0VSUihidWYpOwotCSpwcG9zID0gKnBwb3MgKyBj b3VudDsKLQlyZXQgPSB3Znhfc2VuZF9wZHMod2RldiwgYnVmLCBjb3VudCk7Ci0Ja2ZyZWUoYnVm KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0 YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdmeF9zZW5kX3Bkc19mb3BzID0gewot CS5vcGVuID0gc2ltcGxlX29wZW4sCi0JLndyaXRlID0gd2Z4X3NlbmRfcGRzX3dyaXRlLAotfTsK LQotc3RydWN0IGRiZ2ZzX2hpZl9tc2cgewotCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2OwotCXN0cnVj dCBjb21wbGV0aW9uIGNvbXBsZXRlOwotCXU4IHJlcGx5WzEwMjRdOwotCWludCByZXQ7Ci19Owot Ci1zdGF0aWMgc3NpemVfdCB3Znhfc2VuZF9oaWZfbXNnX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxl LAotCQkJCSAgICAgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQkgICAgICBzaXpl X3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgZGJnZnNfaGlmX21zZyAqY29udGV4 dCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGNvbnRleHQt PndkZXY7Ci0Jc3RydWN0IGhpZl9tc2cgKnJlcXVlc3Q7Ci0KLQlpZiAoY29tcGxldGlvbl9kb25l KCZjb250ZXh0LT5jb21wbGV0ZSkpIHsKLQkJZGV2X2RiZyh3ZGV2LT5kZXYsICJyZWFkIHByZXZp b3VzIHJlc3VsdCBiZWZvcmUgc3RhcnQgYSBuZXcgb25lXG4iKTsKLQkJcmV0dXJuIC1FQlVTWTsK LQl9Ci0JaWYgKGNvdW50IDwgc2l6ZW9mKHN0cnVjdCBoaWZfbXNnKSkKLQkJcmV0dXJuIC1FSU5W QUw7Ci0KLQkvLyB3ZnhfY21kX3NlbmQoKSBjaGVja3MgdGhhdCByZXBseSBidWZmZXIgaXMgd2lk ZSBlbm91Z2gsIGJ1dCBkb2VzIG5vdAotCS8vIHJldHVybiBwcmVjaXNlIGxlbmd0aCByZWFkLiBV c2VyIGhhdmUgdG8ga25vdyBob3cgbWFueSBieXRlcyBzaG91bGQKLQkvLyBiZSByZWFkLiBGaWxs aW5nIHJlcGx5IGJ1ZmZlciB3aXRoIGEgbWVtb3J5IHBhdHRlcm4gbWF5IGhlbHAgdXNlci4KLQlt ZW1zZXQoY29udGV4dC0+cmVwbHksIDB4RkYsIHNpemVvZihjb250ZXh0LT5yZXBseSkpOwotCXJl cXVlc3QgPSBtZW1kdXBfdXNlcih1c2VyX2J1ZiwgY291bnQpOwotCWlmIChJU19FUlIocmVxdWVz dCkpCi0JCXJldHVybiBQVFJfRVJSKHJlcXVlc3QpOwotCWlmIChsZTE2X3RvX2NwdShyZXF1ZXN0 LT5sZW4pICE9IGNvdW50KSB7Ci0JCWtmcmVlKHJlcXVlc3QpOwotCQlyZXR1cm4gLUVJTlZBTDsK LQl9Ci0JY29udGV4dC0+cmV0ID0gd2Z4X2NtZF9zZW5kKHdkZXYsIHJlcXVlc3QsIGNvbnRleHQt PnJlcGx5LAotCQkJCSAgICBzaXplb2YoY29udGV4dC0+cmVwbHkpLCBmYWxzZSk7Ci0KLQlrZnJl ZShyZXF1ZXN0KTsKLQljb21wbGV0ZSgmY29udGV4dC0+Y29tcGxldGUpOwotCXJldHVybiBjb3Vu dDsKLX0KLQotc3RhdGljIHNzaXplX3Qgd2Z4X3NlbmRfaGlmX21zZ19yZWFkKHN0cnVjdCBmaWxl ICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCi0JCQkJICAgICBzaXplX3QgY291bnQsIGxv ZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgZGJnZnNfaGlmX21zZyAqY29udGV4dCA9IGZpbGUtPnBy aXZhdGVfZGF0YTsKLQlpbnQgcmV0OwotCi0JaWYgKGNvdW50ID4gc2l6ZW9mKGNvbnRleHQtPnJl cGx5KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRl cnJ1cHRpYmxlKCZjb250ZXh0LT5jb21wbGV0ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsK LQlpZiAoY29udGV4dC0+cmV0IDwgMCkKLQkJcmV0dXJuIGNvbnRleHQtPnJldDsKLQkvLyBCZSBj YXJlZnVsLCB3cml0ZSgpIGlzIHdhaXRpbmcgZm9yIGEgZnVsbCBtZXNzYWdlIHdoaWxlIHJlYWQo KQotCS8vIG9ubHkgcmV0dXJucyBhIHBheWxvYWQKLQlpZiAoY29weV90b191c2VyKHVzZXJfYnVm LCBjb250ZXh0LT5yZXBseSwgY291bnQpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCXJldHVybiBj b3VudDsKLX0KLQotc3RhdGljIGludCB3Znhfc2VuZF9oaWZfbXNnX29wZW4oc3RydWN0IGlub2Rl ICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IGRiZ2ZzX2hpZl9tc2cgKmNv bnRleHQgPSBremFsbG9jKHNpemVvZigqY29udGV4dCksIEdGUF9LRVJORUwpOwotCi0JaWYgKCFj b250ZXh0KQotCQlyZXR1cm4gLUVOT01FTTsKLQljb250ZXh0LT53ZGV2ID0gaW5vZGUtPmlfcHJp dmF0ZTsKLQlpbml0X2NvbXBsZXRpb24oJmNvbnRleHQtPmNvbXBsZXRlKTsKLQlmaWxlLT5wcml2 YXRlX2RhdGEgPSBjb250ZXh0OwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdmeF9zZW5k X2hpZl9tc2dfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkK LXsKLQlzdHJ1Y3QgZGJnZnNfaGlmX21zZyAqY29udGV4dCA9IGZpbGUtPnByaXZhdGVfZGF0YTsK LQotCWtmcmVlKGNvbnRleHQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0 IGZpbGVfb3BlcmF0aW9ucyB3Znhfc2VuZF9oaWZfbXNnX2ZvcHMgPSB7Ci0JLm9wZW4gPSB3Znhf c2VuZF9oaWZfbXNnX29wZW4sCi0JLnJlbGVhc2UgPSB3Znhfc2VuZF9oaWZfbXNnX3JlbGVhc2Us Ci0JLndyaXRlID0gd2Z4X3NlbmRfaGlmX21zZ193cml0ZSwKLQkucmVhZCA9IHdmeF9zZW5kX2hp Zl9tc2dfcmVhZCwKLX07Ci0KLXN0YXRpYyBpbnQgd2Z4X3BzX3RpbWVvdXRfc2V0KHZvaWQgKmRh dGEsIHU2NCB2YWwpCi17Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXYgPSAoc3RydWN0IHdmeF9kZXYg KilkYXRhOwotCXN0cnVjdCB3ZnhfdmlmICp3dmlmOwotCi0Jd2Rldi0+Zm9yY2VfcHNfdGltZW91 dCA9IHZhbDsKLQl3dmlmID0gTlVMTDsKLQl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJhdGUod2Rl diwgd3ZpZikpICE9IE5VTEwpCi0JCXdmeF91cGRhdGVfcG0od3ZpZik7Ci0JcmV0dXJuIDA7Ci19 Ci0KLXN0YXRpYyBpbnQgd2Z4X3BzX3RpbWVvdXRfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQot ewotCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gKHN0cnVjdCB3ZnhfZGV2ICopZGF0YTsKLQotCSp2 YWwgPSB3ZGV2LT5mb3JjZV9wc190aW1lb3V0OwotCXJldHVybiAwOwotfQotCi1ERUZJTkVfREVC VUdGU19BVFRSSUJVVEUod2Z4X3BzX3RpbWVvdXRfZm9wcywgd2Z4X3BzX3RpbWVvdXRfZ2V0LCB3 ZnhfcHNfdGltZW91dF9zZXQsICIlbGxkXG4iKTsKLQotaW50IHdmeF9kZWJ1Z19pbml0KHN0cnVj dCB3ZnhfZGV2ICp3ZGV2KQotewotCXN0cnVjdCBkZW50cnkgKmQ7Ci0KLQlkID0gZGVidWdmc19j cmVhdGVfZGlyKCJ3ZngiLCB3ZGV2LT5ody0+d2lwaHktPmRlYnVnZnNkaXIpOwotCWRlYnVnZnNf Y3JlYXRlX2ZpbGUoImNvdW50ZXJzIiwgMDQ0NCwgZCwgd2RldiwgJndmeF9jb3VudGVyc19mb3Bz KTsKLQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyeF9zdGF0cyIsIDA0NDQsIGQsIHdkZXYsICZ3Znhf cnhfc3RhdHNfZm9wcyk7Ci0JZGVidWdmc19jcmVhdGVfZmlsZSgidHhfcG93ZXJfbG9vcCIsIDA0 NDQsIGQsIHdkZXYsCi0JCQkgICAgJndmeF90eF9wb3dlcl9sb29wX2ZvcHMpOwotCWRlYnVnZnNf Y3JlYXRlX2ZpbGUoInNlbmRfcGRzIiwgMDIwMCwgZCwgd2RldiwgJndmeF9zZW5kX3Bkc19mb3Bz KTsKLQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzZW5kX2hpZl9tc2ciLCAwNjAwLCBkLCB3ZGV2LAot CQkJICAgICZ3Znhfc2VuZF9oaWZfbXNnX2ZvcHMpOwotCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInBz X3RpbWVvdXQiLCAwNjAwLCBkLCB3ZGV2LCAmd2Z4X3BzX3RpbWVvdXRfZm9wcyk7Ci0KLQlyZXR1 cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvZGVidWcuaCBiL2RyaXZl cnMvc3RhZ2luZy93ZngvZGVidWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmYy Zjg0ZDY0YzllLi4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9kZWJ1Zy5o CisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAtb25seSAqLwotLyoKLSAqIERlYnVnZnMgaW50ZXJmYWNlLgotICoKLSAqIENv cHlyaWdodCAoYykgMjAxNy0yMDE5LCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29w eXJpZ2h0IChjKSAyMDExLCBTVC1Fcmljc3NvbgotICovCi0jaWZuZGVmIFdGWF9ERUJVR19ICi0j ZGVmaW5lIFdGWF9ERUJVR19ICi0KLXN0cnVjdCB3ZnhfZGV2OwotCi1pbnQgd2Z4X2RlYnVnX2lu aXQoc3RydWN0IHdmeF9kZXYgKndkZXYpOwotCi1jb25zdCBjaGFyICpnZXRfaGlmX25hbWUodW5z aWduZWQgbG9uZyBpZCk7Ci1jb25zdCBjaGFyICpnZXRfbWliX25hbWUodW5zaWduZWQgbG9uZyBp ZCk7Ci1jb25zdCBjaGFyICpnZXRfcmVnX25hbWUodW5zaWduZWQgbG9uZyBpZCk7Ci0KLSNlbmRp ZiAvKiBXRlhfREVCVUdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9md2lv LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2Z3aW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMWI4YWVjMDJkMTY5Li4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dm eC9md2lvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MDUgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQotLyoKLSAqIEZpcm13YXJlIGxvYWRpbmcuCi0gKgot ICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuCi0g KiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9m aXJtd2FyZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5o PgotI2luY2x1ZGUgPGxpbnV4L2JpdGZpZWxkLmg+Ci0KLSNpbmNsdWRlICJmd2lvLmgiCi0jaW5j bHVkZSAid2Z4LmgiCi0jaW5jbHVkZSAiaHdpby5oIgotCi0vLyBBZGRyZXNzZXMgYmVsb3cgYXJl IGluIFNSQU0gYXJlYQotI2RlZmluZSBXRlhfRE5MRF9GSUZPICAgICAgICAgICAgIDB4MDkwMDQw MDAKLSNkZWZpbmUgICAgIEROTERfQkxPQ0tfU0laRSAgICAgICAgICAgMHgwNDAwCi0jZGVmaW5l ICAgICBETkxEX0ZJRk9fU0laRSAgICAgICAgICAgIDB4ODAwMCAvLyAoMzIgKiBETkxEX0JMT0NL X1NJWkUpCi0vLyBEb3dubG9hZCBDb250cm9sIEFyZWEgKERDQSkKLSNkZWZpbmUgV0ZYX0RDQV9J TUFHRV9TSVpFICAgICAgICAweDA5MDBDMDAwCi0jZGVmaW5lIFdGWF9EQ0FfUFVUICAgICAgICAg ICAgICAgMHgwOTAwQzAwNAotI2RlZmluZSBXRlhfRENBX0dFVCAgICAgICAgICAgICAgIDB4MDkw MEMwMDgKLSNkZWZpbmUgV0ZYX0RDQV9IT1NUX1NUQVRVUyAgICAgICAweDA5MDBDMDBDCi0jZGVm aW5lICAgICBIT1NUX1JFQURZICAgICAgICAgICAgICAgIDB4ODc2NTQzMjEKLSNkZWZpbmUgICAg IEhPU1RfSU5GT19SRUFEICAgICAgICAgICAgMHhBNzUzQkQ5OQotI2RlZmluZSAgICAgSE9TVF9V UExPQURfUEVORElORyAgICAgICAweEFCQ0REQ0JBCi0jZGVmaW5lICAgICBIT1NUX1VQTE9BRF9D T01QTEVURSAgICAgIDB4RDRDNjRBOTkKLSNkZWZpbmUgICAgIEhPU1RfT0tfVE9fSlVNUCAgICAg ICAgICAgMHgxNzRGQzg4MgotI2RlZmluZSBXRlhfRENBX05DUF9TVEFUVVMgICAgICAgIDB4MDkw MEMwMTAKLSNkZWZpbmUgICAgIE5DUF9OT1RfUkVBRFkgICAgICAgICAgICAgMHgxMjM0NTY3OAot I2RlZmluZSAgICAgTkNQX1JFQURZICAgICAgICAgICAgICAgICAweDg3NjU0MzIxCi0jZGVmaW5l ICAgICBOQ1BfSU5GT19SRUFEWSAgICAgICAgICAgIDB4QkQ1M0VGOTkKLSNkZWZpbmUgICAgIE5D UF9ET1dOTE9BRF9QRU5ESU5HICAgICAgMHhBQkNERENCQQotI2RlZmluZSAgICAgTkNQX0RPV05M T0FEX0NPTVBMRVRFICAgICAweENBRkVGRUNBCi0jZGVmaW5lICAgICBOQ1BfQVVUSF9PSyAgICAg ICAgICAgICAgIDB4RDRDNjRBOTkKLSNkZWZpbmUgICAgIE5DUF9BVVRIX0ZBSUwgICAgICAgICAg ICAgMHgxNzRGQzg4MgotI2RlZmluZSAgICAgTkNQX1BVQl9LRVlfUkRZICAgICAgICAgICAweDdB QjQxRDE5Ci0jZGVmaW5lIFdGWF9EQ0FfRldfU0lHTkFUVVJFICAgICAgMHgwOTAwQzAxNAotI2Rl ZmluZSAgICAgRldfU0lHTkFUVVJFX1NJWkUgICAgICAgICAweDQwCi0jZGVmaW5lIFdGWF9EQ0Ff RldfSEFTSCAgICAgICAgICAgMHgwOTAwQzA1NAotI2RlZmluZSAgICAgRldfSEFTSF9TSVpFICAg ICAgICAgICAgICAweDA4Ci0jZGVmaW5lIFdGWF9EQ0FfRldfVkVSU0lPTiAgICAgICAgMHgwOTAw QzA1QwotI2RlZmluZSAgICAgRldfVkVSU0lPTl9TSVpFICAgICAgICAgICAweDA0Ci0jZGVmaW5l IFdGWF9EQ0FfUkVTRVJWRUQgICAgICAgICAgMHgwOTAwQzA2MAotI2RlZmluZSAgICAgRENBX1JF U0VSVkVEX1NJWkUgICAgICAgICAweDIwCi0jZGVmaW5lIFdGWF9TVEFUVVNfSU5GTyAgICAgICAg ICAgMHgwOTAwQzA4MAotI2RlZmluZSBXRlhfQk9PVExPQURFUl9MQUJFTCAgICAgIDB4MDkwMEMw ODQKLSNkZWZpbmUgICAgIEJPT1RMT0FERVJfTEFCRUxfU0laRSAgICAgMHgzQwotI2RlZmluZSBX RlhfUFRFX0lORk8gICAgICAgICAgICAgIDB4MDkwMEMwQzAKLSNkZWZpbmUgICAgIFBURV9JTkZP X0tFWVNFVF9JRFggICAgICAgMHgwRAotI2RlZmluZSAgICAgUFRFX0lORk9fU0laRSAgICAgICAg ICAgICAweDEwCi0jZGVmaW5lIFdGWF9FUlJfSU5GTyAgICAgICAgICAgICAgMHgwOTAwQzBEMAot I2RlZmluZSAgICAgRVJSX0lOVkFMSURfU0VDX1RZUEUgICAgICAweDA1Ci0jZGVmaW5lICAgICBF UlJfU0lHX1ZFUklGX0ZBSUxFRCAgICAgIDB4MEYKLSNkZWZpbmUgICAgIEVSUl9BRVNfQ1RSTF9L RVkgICAgICAgICAgMHgxMAotI2RlZmluZSAgICAgRVJSX0VDQ19QVUJfS0VZICAgICAgICAgICAw eDExCi0jZGVmaW5lICAgICBFUlJfTUFDX0tFWSAgICAgICAgICAgICAgIDB4MTgKLQotI2RlZmlu ZSBEQ0FfVElNRU9VVCAgNTAgLy8gbWlsbGlzZWNvbmRzCi0jZGVmaW5lIFdBS0VVUF9USU1FT1VU IDIwMCAvLyBtaWxsaXNlY29uZHMKLQotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmd2lvX2Vy cm9yc1tdID0gewotCVtFUlJfSU5WQUxJRF9TRUNfVFlQRV0gPSAiSW52YWxpZCBzZWN0aW9uIHR5 cGUgb3Igd3JvbmcgZW5jcnlwdGlvbiIsCi0JW0VSUl9TSUdfVkVSSUZfRkFJTEVEXSA9ICJTaWdu YXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZCIsCi0JW0VSUl9BRVNfQ1RSTF9LRVldID0gIkFFUyBj b250cm9sIGtleSBub3QgaW5pdGlhbGl6ZWQiLAotCVtFUlJfRUNDX1BVQl9LRVldID0gIkVDQyBw dWJsaWMga2V5IG5vdCBpbml0aWFsaXplZCIsCi0JW0VSUl9NQUNfS0VZXSA9ICJNQUMga2V5IG5v dCBpbml0aWFsaXplZCIsCi19OwotCi0vKgotICogcmVxdWVzdF9maXJtd2FyZSgpIGFsbG9jYXRl IGRhdGEgdXNpbmcgdm1hbGxvYygpLiBJdCBpcyBub3QgY29tcGF0aWJsZSB3aXRoCi0gKiB1bmRl cmx5aW5nIGhhcmR3YXJlIHRoYXQgdXNlIERNQS4gRnVuY3Rpb24gYmVsb3cgZGV0ZWN0IHRoaXMg Y2FzZSBhbmQKLSAqIGFsbG9jYXRlIGEgYm91bmNlIGJ1ZmZlciBpZiBuZWNlc3NhcnkuCi0gKgot ICogTm90aWNlIHRoYXQsIGluIGRvdWJ0LCB5b3UgY2FuIGVuYWJsZSBDT05GSUdfREVCVUdfU0cg dG8gYXNrIGtlcm5lbCB0bwotICogZGV0ZWN0IHRoaXMgcHJvYmxlbSBhdCBydW50aW1lICAoZWxz ZSwga2VybmVsIHNpbGVudGx5IGZhaWwpLgotICoKLSAqIE5PVEU6IGl0IG1heSBhbHNvIGJlIHBv c3NpYmxlIHRvIHVzZSAncGFnZXMnIGZyb20gc3RydWN0IGZpcm13YXJlIGFuZCBhdm9pZAotICog Ym91bmNlIGJ1ZmZlcgotICovCi1zdGF0aWMgaW50IHNyYW1fd3JpdGVfZG1hX3NhZmUoc3RydWN0 IHdmeF9kZXYgKndkZXYsIHUzMiBhZGRyLCBjb25zdCB1OCAqYnVmLAotCQkJICAgICAgIHNpemVf dCBsZW4pCi17Ci0JaW50IHJldDsKLQljb25zdCB1OCAqdG1wOwotCi0JaWYgKCF2aXJ0X2FkZHJf dmFsaWQoYnVmKSkgewotCQl0bXAgPSBrbWVtZHVwKGJ1ZiwgbGVuLCBHRlBfS0VSTkVMKTsKLQkJ aWYgKCF0bXApCi0JCQlyZXR1cm4gLUVOT01FTTsKLQl9IGVsc2UgewotCQl0bXAgPSBidWY7Ci0J fQotCXJldCA9IHNyYW1fYnVmX3dyaXRlKHdkZXYsIGFkZHIsIHRtcCwgbGVuKTsKLQlpZiAodG1w ICE9IGJ1ZikKLQkJa2ZyZWUodG1wKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGdl dF9maXJtd2FyZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIGtleXNldF9jaGlwLAotCQkJY29u c3Qgc3RydWN0IGZpcm13YXJlICoqZncsIGludCAqZmlsZV9vZmZzZXQpCi17Ci0JaW50IGtleXNl dF9maWxlOwotCWNoYXIgZmlsZW5hbWVbMjU2XTsKLQljb25zdCBjaGFyICpkYXRhOwotCWludCBy ZXQ7Ci0KLQlzbnByaW50ZihmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwgIiVzXyUwMlguc2Vj IiwKLQkJIHdkZXYtPnBkYXRhLmZpbGVfZncsIGtleXNldF9jaGlwKTsKLQlyZXQgPSBmaXJtd2Fy ZV9yZXF1ZXN0X25vd2FybihmdywgZmlsZW5hbWUsIHdkZXYtPmRldik7Ci0JaWYgKHJldCkgewot CQlkZXZfaW5mbyh3ZGV2LT5kZXYsICJjYW4ndCBsb2FkICVzLCBmYWxsaW5nIGJhY2sgdG8gJXMu c2VjXG4iLAotCQkJIGZpbGVuYW1lLCB3ZGV2LT5wZGF0YS5maWxlX2Z3KTsKLQkJc25wcmludGYo ZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksICIlcy5zZWMiLAotCQkJIHdkZXYtPnBkYXRhLmZp bGVfZncpOwotCQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKGZ3LCBmaWxlbmFtZSwgd2Rldi0+ZGV2 KTsKLQkJaWYgKHJldCkgewotCQkJZGV2X2Vycih3ZGV2LT5kZXYsICJjYW4ndCBsb2FkICVzXG4i LCBmaWxlbmFtZSk7Ci0JCQkqZncgPSBOVUxMOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQot CWRhdGEgPSAoKmZ3KS0+ZGF0YTsKLQlpZiAobWVtY21wKGRhdGEsICJLRVlTRVQiLCA2KSAhPSAw KSB7Ci0JCS8vIExlZ2FjeSBmaXJtd2FyZSBmb3JtYXQKLQkJKmZpbGVfb2Zmc2V0ID0gMDsKLQkJ a2V5c2V0X2ZpbGUgPSAweDkwOwotCX0gZWxzZSB7Ci0JCSpmaWxlX29mZnNldCA9IDg7Ci0JCWtl eXNldF9maWxlID0gKGhleF90b19iaW4oZGF0YVs2XSkgKiAxNikgfCBoZXhfdG9fYmluKGRhdGFb N10pOwotCQlpZiAoa2V5c2V0X2ZpbGUgPCAwKSB7Ci0JCQlkZXZfZXJyKHdkZXYtPmRldiwgIiVz IGNvcnJ1cHRlZFxuIiwgZmlsZW5hbWUpOwotCQkJcmVsZWFzZV9maXJtd2FyZSgqZncpOwotCQkJ KmZ3ID0gTlVMTDsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCWlmIChrZXlzZXRfZmls ZSAhPSBrZXlzZXRfY2hpcCkgewotCQlkZXZfZXJyKHdkZXYtPmRldiwgImZpcm13YXJlIGtleXNl dCBpcyBpbmNvbXBhdGlibGUgd2l0aCBjaGlwIChmaWxlOiAweCUwMlgsIGNoaXA6IDB4JTAyWClc biIsCi0JCQlrZXlzZXRfZmlsZSwga2V5c2V0X2NoaXApOwotCQlyZWxlYXNlX2Zpcm13YXJlKCpm dyk7Ci0JCSpmdyA9IE5VTEw7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQl3ZGV2LT5rZXlzZXQg PSBrZXlzZXRfZmlsZTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3YWl0X25jcF9zdGF0 dXMoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBzdGF0dXMpCi17Ci0Ja3RpbWVfdCBub3csIHN0 YXJ0OwotCXUzMiByZWc7Ci0JaW50IHJldDsKLQotCXN0YXJ0ID0ga3RpbWVfZ2V0KCk7Ci0JZm9y ICg7OykgewotCQlyZXQgPSBzcmFtX3JlZ19yZWFkKHdkZXYsIFdGWF9EQ0FfTkNQX1NUQVRVUywg JnJlZyk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIC1FSU87Ci0JCW5vdyA9IGt0aW1lX2dl dCgpOwotCQlpZiAocmVnID09IHN0YXR1cykKLQkJCWJyZWFrOwotCQlpZiAoa3RpbWVfYWZ0ZXIo bm93LCBrdGltZV9hZGRfbXMoc3RhcnQsIERDQV9USU1FT1VUKSkpCi0JCQlyZXR1cm4gLUVUSU1F RE9VVDsKLQl9Ci0JaWYgKGt0aW1lX2NvbXBhcmUobm93LCBzdGFydCkpCi0JCWRldl9kYmcod2Rl di0+ZGV2LCAiY2hpcCBhbnN3ZXIgYWZ0ZXIgJWxsZHVzXG4iLAotCQkJa3RpbWVfdXNfZGVsdGEo bm93LCBzdGFydCkpOwotCWVsc2UKLQkJZGV2X2RiZyh3ZGV2LT5kZXYsICJjaGlwIGFuc3dlciBp bW1lZGlhdGVseVxuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdXBsb2FkX2Zpcm13 YXJlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbikKLXsK LQlpbnQgcmV0OwotCXUzMiBvZmZzLCBieXRlc19kb25lID0gMDsKLQlrdGltZV90IG5vdywgc3Rh cnQ7Ci0KLQlpZiAobGVuICUgRE5MRF9CTE9DS19TSVpFKSB7Ci0JCWRldl9lcnIod2Rldi0+ZGV2 LCAiZmlybXdhcmUgc2l6ZSBpcyBub3QgYWxpZ25lZC4gQnVmZmVyIG92ZXJydW4gd2lsbCBvY2N1 clxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlvZmZzID0gMDsKLQl3aGlsZSAob2ZmcyA8IGxl bikgewotCQlzdGFydCA9IGt0aW1lX2dldCgpOwotCQlmb3IgKDs7KSB7Ci0JCQlub3cgPSBrdGlt ZV9nZXQoKTsKLQkJCWlmIChvZmZzICsgRE5MRF9CTE9DS19TSVpFIC0gYnl0ZXNfZG9uZSA8IERO TERfRklGT19TSVpFKQotCQkJCWJyZWFrOwotCQkJaWYgKGt0aW1lX2FmdGVyKG5vdywga3RpbWVf YWRkX21zKHN0YXJ0LCBEQ0FfVElNRU9VVCkpKQotCQkJCXJldHVybiAtRVRJTUVET1VUOwotCQkJ cmV0ID0gc3JhbV9yZWdfcmVhZCh3ZGV2LCBXRlhfRENBX0dFVCwgJmJ5dGVzX2RvbmUpOwotCQkJ aWYgKHJldCA8IDApCi0JCQkJcmV0dXJuIHJldDsKLQkJfQotCQlpZiAoa3RpbWVfY29tcGFyZShu b3csIHN0YXJ0KSkKLQkJCWRldl9kYmcod2Rldi0+ZGV2LCAiYW5zd2VyIGFmdGVyICVsbGR1c1xu IiwKLQkJCQlrdGltZV91c19kZWx0YShub3csIHN0YXJ0KSk7Ci0KLQkJcmV0ID0gc3JhbV93cml0 ZV9kbWFfc2FmZSh3ZGV2LCBXRlhfRE5MRF9GSUZPICsKLQkJCQkJICAob2ZmcyAlIEROTERfRklG T19TSVpFKSwKLQkJCQkJICBkYXRhICsgb2ZmcywgRE5MRF9CTE9DS19TSVpFKTsKLQkJaWYgKHJl dCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCi0JCS8vIFdGeCBzZWVtcyB0byBub3Qgc3VwcG9ydCB3 cml0aW5nIDAgaW4gdGhpcyByZWdpc3RlciBkdXJpbmcKLQkJLy8gZmlyc3QgbG9vcAotCQlvZmZz ICs9IEROTERfQkxPQ0tfU0laRTsKLQkJcmV0ID0gc3JhbV9yZWdfd3JpdGUod2RldiwgV0ZYX0RD QV9QVVQsIG9mZnMpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCXJldHVy biAwOwotfQotCi1zdGF0aWMgdm9pZCBwcmludF9ib290X3N0YXR1cyhzdHJ1Y3Qgd2Z4X2RldiAq d2RldikKLXsKLQl1MzIgcmVnOwotCi0Jc3JhbV9yZWdfcmVhZCh3ZGV2LCBXRlhfU1RBVFVTX0lO Rk8sICZyZWcpOwotCWlmIChyZWcgPT0gMHgxMjM0NTY3OCkKLQkJcmV0dXJuOwotCXNyYW1fcmVn X3JlYWQod2RldiwgV0ZYX0VSUl9JTkZPLCAmcmVnKTsKLQlpZiAocmVnIDwgQVJSQVlfU0laRShm d2lvX2Vycm9ycykgJiYgZndpb19lcnJvcnNbcmVnXSkKLQkJZGV2X2luZm8od2Rldi0+ZGV2LCAi c2VjdXJlIGJvb3Q6ICVzXG4iLCBmd2lvX2Vycm9yc1tyZWddKTsKLQllbHNlCi0JCWRldl9pbmZv KHdkZXYtPmRldiwgInNlY3VyZSBib290OiBFcnJvciAlIzAyeFxuIiwgcmVnKTsKLX0KLQotc3Rh dGljIGludCBsb2FkX2Zpcm13YXJlX3NlY3VyZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKLXsKLQlj b25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gTlVMTDsKLQlpbnQgaGVhZGVyX3NpemU7Ci0JaW50 IGZ3X29mZnNldDsKLQlrdGltZV90IHN0YXJ0OwotCXU4ICpidWY7Ci0JaW50IHJldDsKLQotCUJV SUxEX0JVR19PTihQVEVfSU5GT19TSVpFID4gQk9PVExPQURFUl9MQUJFTF9TSVpFKTsKLQlidWYg PSBrbWFsbG9jKEJPT1RMT0FERVJfTEFCRUxfU0laRSArIDEsIEdGUF9LRVJORUwpOwotCWlmICgh YnVmKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXNyYW1fcmVnX3dyaXRlKHdkZXYsIFdGWF9EQ0Ff SE9TVF9TVEFUVVMsIEhPU1RfUkVBRFkpOwotCXJldCA9IHdhaXRfbmNwX3N0YXR1cyh3ZGV2LCBO Q1BfSU5GT19SRUFEWSk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJvcjsKLQotCXNyYW1fYnVmX3Jl YWQod2RldiwgV0ZYX0JPT1RMT0FERVJfTEFCRUwsIGJ1ZiwgQk9PVExPQURFUl9MQUJFTF9TSVpF KTsKLQlidWZbQk9PVExPQURFUl9MQUJFTF9TSVpFXSA9IDA7Ci0JZGV2X2RiZyh3ZGV2LT5kZXYs ICJib290bG9hZGVyOiBcIiVzXCJcbiIsIGJ1Zik7Ci0KLQlzcmFtX2J1Zl9yZWFkKHdkZXYsIFdG WF9QVEVfSU5GTywgYnVmLCBQVEVfSU5GT19TSVpFKTsKLQlyZXQgPSBnZXRfZmlybXdhcmUod2Rl diwgYnVmW1BURV9JTkZPX0tFWVNFVF9JRFhdLCAmZncsICZmd19vZmZzZXQpOwotCWlmIChyZXQp Ci0JCWdvdG8gZXJyb3I7Ci0JaGVhZGVyX3NpemUgPSBmd19vZmZzZXQgKyBGV19TSUdOQVRVUkVf U0laRSArIEZXX0hBU0hfU0laRTsKLQotCXNyYW1fcmVnX3dyaXRlKHdkZXYsIFdGWF9EQ0FfSE9T VF9TVEFUVVMsIEhPU1RfSU5GT19SRUFEKTsKLQlyZXQgPSB3YWl0X25jcF9zdGF0dXMod2Rldiwg TkNQX1JFQURZKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycm9yOwotCi0Jc3JhbV9yZWdfd3JpdGUo d2RldiwgV0ZYX0ROTERfRklGTywgMHhGRkZGRkZGRik7IC8vIEZpZm8gaW5pdAotCXNyYW1fd3Jp dGVfZG1hX3NhZmUod2RldiwgV0ZYX0RDQV9GV19WRVJTSU9OLCAiXHgwMVx4MDBceDAwXHgwMCIs Ci0JCQkgICAgRldfVkVSU0lPTl9TSVpFKTsKLQlzcmFtX3dyaXRlX2RtYV9zYWZlKHdkZXYsIFdG WF9EQ0FfRldfU0lHTkFUVVJFLCBmdy0+ZGF0YSArIGZ3X29mZnNldCwKLQkJCSAgICBGV19TSUdO QVRVUkVfU0laRSk7Ci0Jc3JhbV93cml0ZV9kbWFfc2FmZSh3ZGV2LCBXRlhfRENBX0ZXX0hBU0gs Ci0JCQkgICAgZnctPmRhdGEgKyBmd19vZmZzZXQgKyBGV19TSUdOQVRVUkVfU0laRSwKLQkJCSAg ICBGV19IQVNIX1NJWkUpOwotCXNyYW1fcmVnX3dyaXRlKHdkZXYsIFdGWF9EQ0FfSU1BR0VfU0la RSwgZnctPnNpemUgLSBoZWFkZXJfc2l6ZSk7Ci0Jc3JhbV9yZWdfd3JpdGUod2RldiwgV0ZYX0RD QV9IT1NUX1NUQVRVUywgSE9TVF9VUExPQURfUEVORElORyk7Ci0JcmV0ID0gd2FpdF9uY3Bfc3Rh dHVzKHdkZXYsIE5DUF9ET1dOTE9BRF9QRU5ESU5HKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycm9y OwotCi0Jc3RhcnQgPSBrdGltZV9nZXQoKTsKLQlyZXQgPSB1cGxvYWRfZmlybXdhcmUod2Rldiwg ZnctPmRhdGEgKyBoZWFkZXJfc2l6ZSwKLQkJCSAgICAgIGZ3LT5zaXplIC0gaGVhZGVyX3NpemUp OwotCWlmIChyZXQpCi0JCWdvdG8gZXJyb3I7Ci0JZGV2X2RiZyh3ZGV2LT5kZXYsICJmaXJtd2Fy ZSBsb2FkIGFmdGVyICVsbGR1c1xuIiwKLQkJa3RpbWVfdXNfZGVsdGEoa3RpbWVfZ2V0KCksIHN0 YXJ0KSk7Ci0KLQlzcmFtX3JlZ193cml0ZSh3ZGV2LCBXRlhfRENBX0hPU1RfU1RBVFVTLCBIT1NU X1VQTE9BRF9DT01QTEVURSk7Ci0JcmV0ID0gd2FpdF9uY3Bfc3RhdHVzKHdkZXYsIE5DUF9BVVRI X09LKTsKLQkvLyBMZWdhY3kgUk9NIHN1cHBvcnQKLQlpZiAocmV0IDwgMCkKLQkJcmV0ID0gd2Fp dF9uY3Bfc3RhdHVzKHdkZXYsIE5DUF9QVUJfS0VZX1JEWSk7Ci0JaWYgKHJldCA8IDApCi0JCWdv dG8gZXJyb3I7Ci0Jc3JhbV9yZWdfd3JpdGUod2RldiwgV0ZYX0RDQV9IT1NUX1NUQVRVUywgSE9T VF9PS19UT19KVU1QKTsKLQotZXJyb3I6Ci0Ja2ZyZWUoYnVmKTsKLQlpZiAoZncpCi0JCXJlbGVh c2VfZmlybXdhcmUoZncpOwotCWlmIChyZXQpCi0JCXByaW50X2Jvb3Rfc3RhdHVzKHdkZXYpOwot CXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaW5pdF9ncHIoc3RydWN0IHdmeF9kZXYgKndk ZXYpCi17Ci0JaW50IHJldCwgaTsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IHsKLQkJaW50IGluZGV4 OwotCQl1MzIgdmFsdWU7Ci0JfSBncHJfaW5pdFtdID0gewotCQl7IDB4MDcsIDB4MjA4Nzc1IH0s Ci0JCXsgMHgwOCwgMHgyRUMwMjAgfSwKLQkJeyAweDA5LCAweDNDM0MzQyB9LAotCQl7IDB4MEIs IDB4MzIyQzQ0IH0sCi0JCXsgMHgwQywgMHhBMDY0OTcgfSwKLQl9OwotCi0JZm9yIChpID0gMDsg aSA8IEFSUkFZX1NJWkUoZ3ByX2luaXQpOyBpKyspIHsKLQkJcmV0ID0gaWdwcl9yZWdfd3JpdGUo d2RldiwgZ3ByX2luaXRbaV0uaW5kZXgsCi0JCQkJICAgICBncHJfaW5pdFtpXS52YWx1ZSk7Ci0J CWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQkJZGV2X2RiZyh3ZGV2LT5kZXYsICIgIGlu ZGV4ICUwMng6ICUwOHhcbiIsCi0JCQlncHJfaW5pdFtpXS5pbmRleCwgZ3ByX2luaXRbaV0udmFs dWUpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdmeF9pbml0X2RldmljZShzdHJ1Y3Qgd2Z4 X2RldiAqd2RldikKLXsKLQlpbnQgcmV0OwotCWludCBod19yZXZpc2lvbiwgaHdfdHlwZTsKLQlp bnQgd2FrZXVwX3RpbWVvdXQgPSA1MDsgLy8gbXMKLQlrdGltZV90IG5vdywgc3RhcnQ7Ci0JdTMy IHJlZzsKLQotCXJlZyA9IENGR19ESVJFQ1RfQUNDRVNTX01PREUgfCBDRkdfQ1BVX1JFU0VUIHwg Q0ZHX0JZVEVfT1JERVJfQUJDRDsKLQlpZiAod2Rldi0+cGRhdGEudXNlX3Jpc2luZ19jbGspCi0J CXJlZyB8PSBDRkdfQ0xLX1JJU0VfRURHRTsKLQlyZXQgPSBjb25maWdfcmVnX3dyaXRlKHdkZXYs IHJlZyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2Vycih3ZGV2LT5kZXYsICJidXMgcmV0dXJu ZWQgYW4gZXJyb3IgZHVyaW5nIGZpcnN0IHdyaXRlIGFjY2Vzcy4gSG9zdCBjb25maWd1cmF0aW9u IGVycm9yP1xuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXJldCA9IGNvbmZpZ19yZWdfcmVh ZCh3ZGV2LCAmcmVnKTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKHdkZXYtPmRldiwgImJ1 cyByZXR1cm5lZCBhbiBlcnJvciBkdXJpbmcgZmlyc3QgcmVhZCBhY2Nlc3MuIEJ1cyBjb25maWd1 cmF0aW9uIGVycm9yP1xuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlpZiAocmVnID09IDAgfHwg cmVnID09IH4wKSB7Ci0JCWRldl9lcnIod2Rldi0+ZGV2LCAiY2hpcCBtdXRlLiBCdXMgY29uZmln dXJhdGlvbiBlcnJvciBvciBjaGlwIHdhc24ndCByZXNldD9cbiIpOwotCQlyZXR1cm4gLUVJTzsK LQl9Ci0JZGV2X2RiZyh3ZGV2LT5kZXYsICJpbml0aWFsIGNvbmZpZyByZWdpc3RlciB2YWx1ZTog JTA4eFxuIiwgcmVnKTsKLQotCWh3X3JldmlzaW9uID0gRklFTERfR0VUKENGR19ERVZJQ0VfSURf TUFKT1IsIHJlZyk7Ci0JaWYgKGh3X3JldmlzaW9uID09IDApIHsKLQkJZGV2X2Vycih3ZGV2LT5k ZXYsICJiYWQgaGFyZHdhcmUgcmV2aXNpb24gbnVtYmVyOiAlZFxuIiwKLQkJCWh3X3JldmlzaW9u KTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCWh3X3R5cGUgPSBGSUVMRF9HRVQoQ0ZHX0RFVklD RV9JRF9UWVBFLCByZWcpOwotCWlmIChod190eXBlID09IDEpIHsKLQkJZGV2X25vdGljZSh3ZGV2 LT5kZXYsICJkZXZlbG9wbWVudCBoYXJkd2FyZSBkZXRlY3RlZFxuIik7Ci0JCXdha2V1cF90aW1l b3V0ID0gMjAwMDsKLQl9Ci0KLQlyZXQgPSBpbml0X2dwcih3ZGV2KTsKLQlpZiAocmV0IDwgMCkK LQkJcmV0dXJuIHJldDsKLQotCXJldCA9IGNvbnRyb2xfcmVnX3dyaXRlKHdkZXYsIENUUkxfV0xB Tl9XQUtFVVApOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gLUVJTzsKLQlzdGFydCA9IGt0aW1l X2dldCgpOwotCWZvciAoOzspIHsKLQkJcmV0ID0gY29udHJvbF9yZWdfcmVhZCh3ZGV2LCAmcmVn KTsKLQkJbm93ID0ga3RpbWVfZ2V0KCk7Ci0JCWlmIChyZWcgJiBDVFJMX1dMQU5fUkVBRFkpCi0J CQlicmVhazsKLQkJaWYgKGt0aW1lX2FmdGVyKG5vdywga3RpbWVfYWRkX21zKHN0YXJ0LCB3YWtl dXBfdGltZW91dCkpKSB7Ci0JCQlkZXZfZXJyKHdkZXYtPmRldiwgImNoaXAgZGlkbid0IHdha2Ug dXAuIENoaXAgd2Fzbid0IHJlc2V0P1xuIik7Ci0JCQlyZXR1cm4gLUVUSU1FRE9VVDsKLQkJfQot CX0KLQlkZXZfZGJnKHdkZXYtPmRldiwgImNoaXAgd2FrZSB1cCBhZnRlciAlbGxkdXNcbiIsCi0J CWt0aW1lX3VzX2RlbHRhKG5vdywgc3RhcnQpKTsKLQotCXJldCA9IGNvbmZpZ19yZWdfd3JpdGVf Yml0cyh3ZGV2LCBDRkdfQ1BVX1JFU0VULCAwKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJl dDsKLQlyZXQgPSBsb2FkX2Zpcm13YXJlX3NlY3VyZSh3ZGV2KTsKLQlpZiAocmV0IDwgMCkKLQkJ cmV0dXJuIHJldDsKLQlyZXR1cm4gY29uZmlnX3JlZ193cml0ZV9iaXRzKHdkZXYsCi0JCQkJICAg ICBDRkdfRElSRUNUX0FDQ0VTU19NT0RFIHwKLQkJCQkgICAgIENGR19JUlFfRU5BQkxFX0RBVEEg fAotCQkJCSAgICAgQ0ZHX0lSUV9FTkFCTEVfV1JEWSwKLQkJCQkgICAgIENGR19JUlFfRU5BQkxF X0RBVEEpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9md2lvLmggYi9kcml2 ZXJzL3N0YWdpbmcvd2Z4L2Z3aW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjAy OGY5MjUwM2ZlLi4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9md2lvLmgK KysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMC1vbmx5ICovCi0vKgotICogRmlybXdhcmUgbG9hZGluZy4KLSAqCi0gKiBDb3B5 cmlnaHQgKGMpIDIwMTctMjAxOSwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHly aWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KLSAqLwotI2lmbmRlZiBXRlhfRldJT19ICi0jZGVm aW5lIFdGWF9GV0lPX0gKLQotc3RydWN0IHdmeF9kZXY7Ci0KLWludCB3ZnhfaW5pdF9kZXZpY2Uo c3RydWN0IHdmeF9kZXYgKndkZXYpOwotCi0jZW5kaWYgLyogV0ZYX0ZXSU9fSCAqLwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfYXBpX2NtZC5oIGIvZHJpdmVycy9zdGFnaW5n L3dmeC9oaWZfYXBpX2NtZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGM5YmIw MzYwMTEuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl9hcGlfY21k LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NTMgKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEFwYWNoZS0yLjAgKi8KLS8qCi0gKiBXRnggaGFyZHdhcmUgaW50ZXJmYWNlIGRlZmlu aXRpb25zCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjAsIFNpbGljb24gTGFib3JhdG9y aWVzIEluYy4KLSAqLwotCi0jaWZuZGVmIFdGWF9ISUZfQVBJX0NNRF9ICi0jZGVmaW5lIFdGWF9I SUZfQVBJX0NNRF9ICi0KLSNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KLQotI2luY2x1ZGUg ImhpZl9hcGlfZ2VuZXJhbC5oIgotCi1lbnVtIGhpZl9yZXF1ZXN0c19pZHMgewotCUhJRl9SRVFf SURfUkVTRVQgICAgICAgICAgICAgICAgPSAweDBhLAotCUhJRl9SRVFfSURfUkVBRF9NSUIgICAg ICAgICAgICAgPSAweDA1LAotCUhJRl9SRVFfSURfV1JJVEVfTUlCICAgICAgICAgICAgPSAweDA2 LAotCUhJRl9SRVFfSURfU1RBUlRfU0NBTiAgICAgICAgICAgPSAweDA3LAotCUhJRl9SRVFfSURf U1RPUF9TQ0FOICAgICAgICAgICAgPSAweDA4LAotCUhJRl9SRVFfSURfVFggICAgICAgICAgICAg ICAgICAgPSAweDA0LAotCUhJRl9SRVFfSURfSk9JTiAgICAgICAgICAgICAgICAgPSAweDBiLAot CUhJRl9SRVFfSURfU0VUX1BNX01PREUgICAgICAgICAgPSAweDEwLAotCUhJRl9SRVFfSURfU0VU X0JTU19QQVJBTVMgICAgICAgPSAweDExLAotCUhJRl9SRVFfSURfQUREX0tFWSAgICAgICAgICAg ICAgPSAweDBjLAotCUhJRl9SRVFfSURfUkVNT1ZFX0tFWSAgICAgICAgICAgPSAweDBkLAotCUhJ Rl9SRVFfSURfRURDQV9RVUVVRV9QQVJBTVMgICAgPSAweDEzLAotCUhJRl9SRVFfSURfU1RBUlQg ICAgICAgICAgICAgICAgPSAweDE3LAotCUhJRl9SRVFfSURfQkVBQ09OX1RSQU5TTUlUICAgICAg PSAweDE4LAotCUhJRl9SRVFfSURfVVBEQVRFX0lFICAgICAgICAgICAgPSAweDFiLAotCUhJRl9S RVFfSURfTUFQX0xJTksgICAgICAgICAgICAgPSAweDFjLAotfTsKLQotZW51bSBoaWZfY29uZmly bWF0aW9uc19pZHMgewotCUhJRl9DTkZfSURfUkVTRVQgICAgICAgICAgICAgICAgPSAweDBhLAot CUhJRl9DTkZfSURfUkVBRF9NSUIgICAgICAgICAgICAgPSAweDA1LAotCUhJRl9DTkZfSURfV1JJ VEVfTUlCICAgICAgICAgICAgPSAweDA2LAotCUhJRl9DTkZfSURfU1RBUlRfU0NBTiAgICAgICAg ICAgPSAweDA3LAotCUhJRl9DTkZfSURfU1RPUF9TQ0FOICAgICAgICAgICAgPSAweDA4LAotCUhJ Rl9DTkZfSURfVFggICAgICAgICAgICAgICAgICAgPSAweDA0LAotCUhJRl9DTkZfSURfTVVMVElf VFJBTlNNSVQgICAgICAgPSAweDFlLAotCUhJRl9DTkZfSURfSk9JTiAgICAgICAgICAgICAgICAg PSAweDBiLAotCUhJRl9DTkZfSURfU0VUX1BNX01PREUgICAgICAgICAgPSAweDEwLAotCUhJRl9D TkZfSURfU0VUX0JTU19QQVJBTVMgICAgICAgPSAweDExLAotCUhJRl9DTkZfSURfQUREX0tFWSAg ICAgICAgICAgICAgPSAweDBjLAotCUhJRl9DTkZfSURfUkVNT1ZFX0tFWSAgICAgICAgICAgPSAw eDBkLAotCUhJRl9DTkZfSURfRURDQV9RVUVVRV9QQVJBTVMgICAgPSAweDEzLAotCUhJRl9DTkZf SURfU1RBUlQgICAgICAgICAgICAgICAgPSAweDE3LAotCUhJRl9DTkZfSURfQkVBQ09OX1RSQU5T TUlUICAgICAgPSAweDE4LAotCUhJRl9DTkZfSURfVVBEQVRFX0lFICAgICAgICAgICAgPSAweDFi LAotCUhJRl9DTkZfSURfTUFQX0xJTksgICAgICAgICAgICAgPSAweDFjLAotfTsKLQotZW51bSBo aWZfaW5kaWNhdGlvbnNfaWRzIHsKLQlISUZfSU5EX0lEX1JYICAgICAgICAgICAgICAgICAgID0g MHg4NCwKLQlISUZfSU5EX0lEX1NDQU5fQ01QTCAgICAgICAgICAgID0gMHg4NiwKLQlISUZfSU5E X0lEX0pPSU5fQ09NUExFVEUgICAgICAgID0gMHg4ZiwKLQlISUZfSU5EX0lEX1NFVF9QTV9NT0RF X0NNUEwgICAgID0gMHg4OSwKLQlISUZfSU5EX0lEX1NVU1BFTkRfUkVTVU1FX1RYICAgID0gMHg4 YywKLQlISUZfSU5EX0lEX0VWRU5UICAgICAgICAgICAgICAgID0gMHg4NQotfTsKLQotc3RydWN0 IGhpZl9yZXFfcmVzZXQgewotCXU4ICAgICByZXNldF9zdGF0OjE7Ci0JdTggICAgIHJlc2V0X2Fs bF9pbnQ6MTsKLQl1OCAgICAgcmVzZXJ2ZWQxOjY7Ci0JdTggICAgIHJlc2VydmVkMlszXTsKLX0g X19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfY25mX3Jlc2V0IHsKLQlfX2xlMzIgc3RhdHVzOwotfSBf X3BhY2tlZDsKLQotc3RydWN0IGhpZl9yZXFfcmVhZF9taWIgewotCV9fbGUxNiBtaWJfaWQ7Ci0J X19sZTE2IHJlc2VydmVkOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9jbmZfcmVhZF9taWIg ewotCV9fbGUzMiBzdGF0dXM7Ci0JX19sZTE2IG1pYl9pZDsKLQlfX2xlMTYgbGVuZ3RoOwotCXU4 ICAgICBtaWJfZGF0YVtdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9yZXFfd3JpdGVfbWli IHsKLQlfX2xlMTYgbWliX2lkOwotCV9fbGUxNiBsZW5ndGg7Ci0JdTggICAgIG1pYl9kYXRhW107 Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX2NuZl93cml0ZV9taWIgewotCV9fbGUzMiBzdGF0 dXM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX3JlcV91cGRhdGVfaWUgewotCXU4ICAgICBi ZWFjb246MTsKLQl1OCAgICAgcHJvYmVfcmVzcDoxOwotCXU4ICAgICBwcm9iZV9yZXE6MTsKLQl1 OCAgICAgcmVzZXJ2ZWQxOjU7Ci0JdTggICAgIHJlc2VydmVkMjsKLQlfX2xlMTYgbnVtX2llczsK LQl1OCAgICAgaWVbXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfY25mX3VwZGF0ZV9pZSB7 Ci0JX19sZTMyIHN0YXR1czsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfc3NpZF9kZWYgewot CV9fbGUzMiBzc2lkX2xlbmd0aDsKLQl1OCAgICAgc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVO XTsKLX0gX19wYWNrZWQ7Ci0KLSNkZWZpbmUgSElGX0FQSV9NQVhfTkJfU1NJRFMgICAgICAgICAg ICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIEhJRl9BUElfTUFYX05CX0NIQU5ORUxTICAgICAg ICAgICAgICAgICAgICAgICAxNAotCi1zdHJ1Y3QgaGlmX3JlcV9zdGFydF9zY2FuX2FsdCB7Ci0J dTggICAgIGJhbmQ7Ci0JdTggICAgIG1haW50YWluX2N1cnJlbnRfYnNzOjE7Ci0JdTggICAgIHBl cmlvZGljOjE7Ci0JdTggICAgIHJlc2VydmVkMTo2OwotCXU4ICAgICBkaXNhbGxvd19wczoxOwot CXU4ICAgICByZXNlcnZlZDI6MTsKLQl1OCAgICAgc2hvcnRfcHJlYW1ibGU6MTsKLQl1OCAgICAg cmVzZXJ2ZWQzOjU7Ci0JdTggICAgIG1heF90cmFuc21pdF9yYXRlOwotCV9fbGUxNiBwZXJpb2Rp Y19pbnRlcnZhbDsKLQl1OCAgICAgcmVzZXJ2ZWQ0OwotCXM4ICAgICBwZXJpb2RpY19yc3NpX3Ro cjsKLQl1OCAgICAgbnVtX29mX3Byb2JlX3JlcXVlc3RzOwotCXU4ICAgICBwcm9iZV9kZWxheTsK LQl1OCAgICAgbnVtX29mX3NzaWRzOwotCXU4ICAgICBudW1fb2ZfY2hhbm5lbHM7Ci0JX19sZTMy IG1pbl9jaGFubmVsX3RpbWU7Ci0JX19sZTMyIG1heF9jaGFubmVsX3RpbWU7Ci0JX19sZTMyIHR4 X3Bvd2VyX2xldmVsOyAvLyBzaWduZWQgdmFsdWUKLQlzdHJ1Y3QgaGlmX3NzaWRfZGVmIHNzaWRf ZGVmW0hJRl9BUElfTUFYX05CX1NTSURTXTsKLQl1OCAgICAgY2hhbm5lbF9saXN0W107Ci19IF9f cGFja2VkOwotCi1zdHJ1Y3QgaGlmX2NuZl9zdGFydF9zY2FuIHsKLQlfX2xlMzIgc3RhdHVzOwot fSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9jbmZfc3RvcF9zY2FuIHsKLQlfX2xlMzIgc3RhdHVz OwotfSBfX3BhY2tlZDsKLQotZW51bSBoaWZfcG1fbW9kZV9zdGF0dXMgewotCUhJRl9QTV9NT0RF X0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MCwKLQlISUZfUE1fTU9ERV9QUyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEsCi0JSElGX1BNX01PREVfVU5ERVRFUk1J TkVEICAgICAgICAgICAgICAgICAgID0gMHgyCi19OwotCi1zdHJ1Y3QgaGlmX2luZF9zY2FuX2Nt cGwgewotCV9fbGUzMiBzdGF0dXM7Ci0JdTggICAgIHBtX21vZGU7Ci0JdTggICAgIG51bV9jaGFu bmVsc19jb21wbGV0ZWQ7Ci0JX19sZTE2IHJlc2VydmVkOwotfSBfX3BhY2tlZDsKLQotZW51bSBo aWZfcXVldWVfaWQgewotCUhJRl9RVUVVRV9JRF9CQUNLR1JPVU5EICAgICAgICAgICAgICAgICAg ICA9IDB4MCwKLQlISUZfUVVFVUVfSURfQkVTVEVGRk9SVCAgICAgICAgICAgICAgICAgICAgPSAw eDEsCi0JSElGX1FVRVVFX0lEX1ZJREVPICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyLAot CUhJRl9RVUVVRV9JRF9WT0lDRSAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MwotfTsKLQot ZW51bSBoaWZfZnJhbWVfZm9ybWF0IHsKLQlISUZfRlJBTUVfRk9STUFUX05PTl9IVCAgICAgICAg ICAgICAgICAgICAgPSAweDAsCi0JSElGX0ZSQU1FX0ZPUk1BVF9NSVhFRF9GT1JNQVRfSFQgICAg ICAgICAgID0gMHgxLAotCUhJRl9GUkFNRV9GT1JNQVRfR0ZfSFRfMTFOICAgICAgICAgICAgICAg ICA9IDB4MgotfTsKLQotc3RydWN0IGhpZl9yZXFfdHggewotCS8vIHBhY2tldF9pZCBpcyBub3Qg aW50ZXJwcmV0ZWQgYnkgdGhlIGRldmljZSwgc28gaXQgaXMgbm90IG5lY2Vzc2FyeSB0bwotCS8v IGRlY2xhcmUgaXQgbGl0dGxlIGVuZGlhbgotCXUzMiAgICBwYWNrZXRfaWQ7Ci0JdTggICAgIG1h eF90eF9yYXRlOwotCXU4ICAgICBxdWV1ZV9pZDoyOwotCXU4ICAgICBwZWVyX3N0YV9pZDo0Owot CXU4ICAgICByZXNlcnZlZDE6MjsKLQl1OCAgICAgbW9yZToxOwotCXU4ICAgICBmY19vZmZzZXQ6 MzsKLQl1OCAgICAgYWZ0ZXJfZHRpbToxOwotCXU4ICAgICByZXNlcnZlZDI6MzsKLQl1OCAgICAg c3RhcnRfZXhwOjE7Ci0JdTggICAgIHJlc2VydmVkMzozOwotCXU4ICAgICByZXRyeV9wb2xpY3lf aW5kZXg6NDsKLQlfX2xlMzIgcmVzZXJ2ZWQ0OwotCV9fbGUzMiBleHBpcmVfdGltZTsKLQl1OCAg ICAgZnJhbWVfZm9ybWF0OjQ7Ci0JdTggICAgIGZlY19jb2Rpbmc6MTsKLQl1OCAgICAgc2hvcnRf Z2k6MTsKLQl1OCAgICAgcmVzZXJ2ZWQ1OjE7Ci0JdTggICAgIHN0YmM6MTsKLQl1OCAgICAgcmVz ZXJ2ZWQ2OwotCXU4ICAgICBhZ2dyZWdhdGlvbjoxOwotCXU4ICAgICByZXNlcnZlZDc6NzsKLQl1 OCAgICAgcmVzZXJ2ZWQ4OwotCXU4ICAgICBmcmFtZVtdOwotfSBfX3BhY2tlZDsKLQotZW51bSBo aWZfcW9zX2Fja3BsY3kgewotCUhJRl9RT1NfQUNLUExDWV9OT1JNQUwgICAgICAgICAgICAgICAg ICAgICAgICAgPSAweDAsCi0JSElGX1FPU19BQ0tQTENZX1RYTk9BQ0sgICAgICAgICAgICAgICAg ICAgICAgICA9IDB4MSwKLQlISUZfUU9TX0FDS1BMQ1lfTk9FWFBBQ0sgICAgICAgICAgICAgICAg ICAgICAgID0gMHgyLAotCUhJRl9RT1NfQUNLUExDWV9CTENLQUNLICAgICAgICAgICAgICAgICAg ICAgICAgPSAweDMKLX07Ci0KLXN0cnVjdCBoaWZfY25mX3R4IHsKLQlfX2xlMzIgc3RhdHVzOwot CS8vIHBhY2tldF9pZCBpcyBjb3BpZWQgZnJvbSBzdHJ1Y3QgaGlmX3JlcV90eCB3aXRob3V0IGJl ZW4gaW50ZXJwcmV0ZWQKLQkvLyBieSB0aGUgZGV2aWNlLCBzbyBpdCBpcyBub3QgbmVjZXNzYXJ5 IHRvIGRlY2xhcmUgaXQgbGl0dGxlIGVuZGlhbgotCXUzMiAgICBwYWNrZXRfaWQ7Ci0JdTggICAg IHR4ZWRfcmF0ZTsKLQl1OCAgICAgYWNrX2ZhaWx1cmVzOwotCXU4ICAgICBhZ2dyOjE7Ci0JdTgg ICAgIHJlcXVldWU6MTsKLQl1OCAgICAgYWNrX3BvbGljeToyOwotCXU4ICAgICB0eG9wX2xpbWl0 OjE7Ci0JdTggICAgIHJlc2VydmVkMTozOwotCXU4ICAgICByZXNlcnZlZDI7Ci0JX19sZTMyIG1l ZGlhX2RlbGF5OwotCV9fbGUzMiB0eF9xdWV1ZV9kZWxheTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVj dCBoaWZfY25mX211bHRpX3RyYW5zbWl0IHsKLQl1OCAgICAgbnVtX3R4X2NvbmZzOwotCXU4ICAg ICByZXNlcnZlZFszXTsKLQlzdHJ1Y3QgaGlmX2NuZl90eCB0eF9jb25mX3BheWxvYWRbXTsKLX0g X19wYWNrZWQ7Ci0KLWVudW0gaGlmX3JpX2ZsYWdzX2VuY3J5cHQgewotCUhJRl9SSV9GTEFHU19V TkVOQ1JZUFRFRCAgICAgICAgICAgICAgICAgICA9IDB4MCwKLQlISUZfUklfRkxBR1NfV0VQX0VO Q1JZUFRFRCAgICAgICAgICAgICAgICAgPSAweDEsCi0JSElGX1JJX0ZMQUdTX1RLSVBfRU5DUllQ VEVEICAgICAgICAgICAgICAgID0gMHgyLAotCUhJRl9SSV9GTEFHU19BRVNfRU5DUllQVEVEICAg ICAgICAgICAgICAgICA9IDB4MywKLQlISUZfUklfRkxBR1NfV0FQSV9FTkNSWVBURUQgICAgICAg ICAgICAgICAgPSAweDQKLX07Ci0KLXN0cnVjdCBoaWZfaW5kX3J4IHsKLQlfX2xlMzIgc3RhdHVz OwotCXU4ICAgICBjaGFubmVsX251bWJlcjsKLQl1OCAgICAgcmVzZXJ2ZWQxOwotCXU4ICAgICBy eGVkX3JhdGU7Ci0JdTggICAgIHJjcGlfcnNzaTsKLQl1OCAgICAgZW5jcnlwOjM7Ci0JdTggICAg IGluX2FnZ3I6MTsKLQl1OCAgICAgZmlyc3RfYWdncjoxOwotCXU4ICAgICBsYXN0X2FnZ3I6MTsK LQl1OCAgICAgZGVmcmFnOjE7Ci0JdTggICAgIGJlYWNvbjoxOwotCXU4ICAgICB0aW06MTsKLQl1 OCAgICAgYml0bWFwOjE7Ci0JdTggICAgIG1hdGNoX3NzaWQ6MTsKLQl1OCAgICAgbWF0Y2hfYnNz aWQ6MTsKLQl1OCAgICAgbW9yZToxOwotCXU4ICAgICByZXNlcnZlZDI6MTsKLQl1OCAgICAgaHQ6 MTsKLQl1OCAgICAgc3RiYzoxOwotCXU4ICAgICBtYXRjaF91Y19hZGRyOjE7Ci0JdTggICAgIG1h dGNoX21jX2FkZHI6MTsKLQl1OCAgICAgbWF0Y2hfYmNfYWRkcjoxOwotCXU4ICAgICBrZXlfdHlw ZToxOwotCXU4ICAgICBrZXlfaW5kZXg6NDsKLQl1OCAgICAgcmVzZXJ2ZWQzOjE7Ci0JdTggICAg IHBlZXJfc3RhX2lkOjQ7Ci0JdTggICAgIHJlc2VydmVkNDoyOwotCXU4ICAgICByZXNlcnZlZDU6 MTsKLQl1OCAgICAgZnJhbWVbXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfcmVxX2VkY2Ff cXVldWVfcGFyYW1zIHsKLQl1OCAgICAgcXVldWVfaWQ7Ci0JdTggICAgIHJlc2VydmVkMTsKLQl1 OCAgICAgYWlmc247Ci0JdTggICAgIHJlc2VydmVkMjsKLQlfX2xlMTYgY3dfbWluOwotCV9fbGUx NiBjd19tYXg7Ci0JX19sZTE2IHR4X29wX2xpbWl0OwotCV9fbGUxNiBhbGxvd2VkX21lZGl1bV90 aW1lOwotCV9fbGUzMiByZXNlcnZlZDM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX2NuZl9l ZGNhX3F1ZXVlX3BhcmFtcyB7Ci0JX19sZTMyIHN0YXR1czsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVj dCBoaWZfcmVxX2pvaW4gewotCXU4ICAgICBpbmZyYXN0cnVjdHVyZV9ic3NfbW9kZToxOwotCXU4 ICAgICByZXNlcnZlZDE6NzsKLQl1OCAgICAgYmFuZDsKLQl1OCAgICAgY2hhbm5lbF9udW1iZXI7 Ci0JdTggICAgIHJlc2VydmVkMjsKLQl1OCAgICAgYnNzaWRbRVRIX0FMRU5dOwotCV9fbGUxNiBh dGltX3dpbmRvdzsKLQl1OCAgICAgc2hvcnRfcHJlYW1ibGU6MTsKLQl1OCAgICAgcmVzZXJ2ZWQz Ojc7Ci0JdTggICAgIHByb2JlX2Zvcl9qb2luOwotCXU4ICAgICByZXNlcnZlZDQ7Ci0JdTggICAg IHJlc2VydmVkNToyOwotCXU4ICAgICBmb3JjZV9ub19iZWFjb246MTsKLQl1OCAgICAgZm9yY2Vf d2l0aF9pbmQ6MTsKLQl1OCAgICAgcmVzZXJ2ZWQ2OjQ7Ci0JX19sZTMyIHNzaWRfbGVuZ3RoOwot CXU4ICAgICBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOwotCV9fbGUzMiBiZWFjb25faW50 ZXJ2YWw7Ci0JX19sZTMyIGJhc2ljX3JhdGVfc2V0OwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhp Zl9jbmZfam9pbiB7Ci0JX19sZTMyIHN0YXR1czsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZf aW5kX2pvaW5fY29tcGxldGUgewotCV9fbGUzMiBzdGF0dXM7Ci19IF9fcGFja2VkOwotCi1zdHJ1 Y3QgaGlmX3JlcV9zZXRfYnNzX3BhcmFtcyB7Ci0JdTggICAgIGxvc3RfY291bnRfb25seToxOwot CXU4ICAgICByZXNlcnZlZDo3OwotCXU4ICAgICBiZWFjb25fbG9zdF9jb3VudDsKLQlfX2xlMTYg YWlkOwotCV9fbGUzMiBvcGVyYXRpb25hbF9yYXRlX3NldDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVj dCBoaWZfY25mX3NldF9ic3NfcGFyYW1zIHsKLQlfX2xlMzIgc3RhdHVzOwotfSBfX3BhY2tlZDsK LQotc3RydWN0IGhpZl9yZXFfc2V0X3BtX21vZGUgewotCXU4ICAgICBlbnRlcl9wc206MTsKLQl1 OCAgICAgcmVzZXJ2ZWQ6NjsKLQl1OCAgICAgZmFzdF9wc206MTsKLQl1OCAgICAgZmFzdF9wc21f aWRsZV9wZXJpb2Q7Ci0JdTggICAgIGFwX3BzbV9jaGFuZ2VfcGVyaW9kOwotCXU4ICAgICBtaW5f YXV0b19wc19wb2xsX3BlcmlvZDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfY25mX3NldF9w bV9tb2RlIHsKLQlfX2xlMzIgc3RhdHVzOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9pbmRf c2V0X3BtX21vZGVfY21wbCB7Ci0JX19sZTMyIHN0YXR1czsKLQl1OCAgICAgcG1fbW9kZTsKLQl1 OCAgICAgcmVzZXJ2ZWRbM107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX3JlcV9zdGFydCB7 Ci0JdTggICAgIG1vZGU7Ci0JdTggICAgIGJhbmQ7Ci0JdTggICAgIGNoYW5uZWxfbnVtYmVyOwot CXU4ICAgICByZXNlcnZlZDE7Ci0JX19sZTMyIHJlc2VydmVkMjsKLQlfX2xlMzIgYmVhY29uX2lu dGVydmFsOwotCXU4ICAgICBkdGltX3BlcmlvZDsKLQl1OCAgICAgc2hvcnRfcHJlYW1ibGU6MTsK LQl1OCAgICAgcmVzZXJ2ZWQzOjc7Ci0JdTggICAgIHJlc2VydmVkNDsKLQl1OCAgICAgc3NpZF9s ZW5ndGg7Ci0JdTggICAgIHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07Ci0JX19sZTMyIGJh c2ljX3JhdGVfc2V0OwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9jbmZfc3RhcnQgewotCV9f bGUzMiBzdGF0dXM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX3JlcV9iZWFjb25fdHJhbnNt aXQgewotCXU4ICAgICBlbmFibGVfYmVhY29uaW5nOwotCXU4ICAgICByZXNlcnZlZFszXTsKLX0g X19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfY25mX2JlYWNvbl90cmFuc21pdCB7Ci0JX19sZTMyIHN0 YXR1czsKLX0gX19wYWNrZWQ7Ci0KLSNkZWZpbmUgSElGX0xJTktfSURfTUFYICAgICAgICAgICAg MTQKLSNkZWZpbmUgSElGX0xJTktfSURfTk9UX0FTU09DSUFURUQgKEhJRl9MSU5LX0lEX01BWCAr IDEpCi0KLXN0cnVjdCBoaWZfcmVxX21hcF9saW5rIHsKLQl1OCAgICAgbWFjX2FkZHJbRVRIX0FM RU5dOwotCXU4ICAgICB1bm1hcDoxOwotCXU4ICAgICBtZnBjOjE7Ci0JdTggICAgIHJlc2VydmVk OjY7Ci0JdTggICAgIHBlZXJfc3RhX2lkOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9jbmZf bWFwX2xpbmsgewotCV9fbGUzMiBzdGF0dXM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX2lu ZF9zdXNwZW5kX3Jlc3VtZV90eCB7Ci0JdTggICAgIHJlc3VtZToxOwotCXU4ICAgICByZXNlcnZl ZDE6MjsKLQl1OCAgICAgYmNfbWNfb25seToxOwotCXU4ICAgICByZXNlcnZlZDI6NDsKLQl1OCAg ICAgcmVzZXJ2ZWQzOwotCV9fbGUxNiBwZWVyX3N0YV9zZXQ7Ci19IF9fcGFja2VkOwotCi0KLSNk ZWZpbmUgTUFYX0tFWV9FTlRSSUVTICAgICAgICAgMjQKLSNkZWZpbmUgSElGX0FQSV9XRVBfS0VZ X0RBVEFfU0laRSAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgSElGX0FQSV9US0lQ X0tFWV9EQVRBX1NJWkUgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgSElGX0FQSV9S WF9NSUNfS0VZX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBISUZfQVBJ X1RYX01JQ19LRVlfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIEhJRl9B UElfQUVTX0tFWV9EQVRBX1NJWkUgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIEhJ Rl9BUElfV0FQSV9LRVlfREFUQV9TSVpFICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5l IEhJRl9BUElfTUlDX0tFWV9EQVRBX1NJWkUgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVm aW5lIEhJRl9BUElfSUdUS19LRVlfREFUQV9TSVpFICAgICAgICAgICAgICAgICAgICAgIDE2Ci0j ZGVmaW5lIEhJRl9BUElfUlhfU0VRVUVOQ0VfQ09VTlRFUl9TSVpFICAgICAgICAgICAgICAgIDgK LSNkZWZpbmUgSElGX0FQSV9JUE5fU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OAotCi1lbnVtIGhpZl9rZXlfdHlwZSB7Ci0JSElGX0tFWV9UWVBFX1dFUF9ERUZBVUxUICAgICAg ICAgICAgICAgICAgID0gMHgwLAotCUhJRl9LRVlfVFlQRV9XRVBfUEFJUldJU0UgICAgICAgICAg ICAgICAgICA9IDB4MSwKLQlISUZfS0VZX1RZUEVfVEtJUF9HUk9VUCAgICAgICAgICAgICAgICAg ICAgPSAweDIsCi0JSElGX0tFWV9UWVBFX1RLSVBfUEFJUldJU0UgICAgICAgICAgICAgICAgID0g MHgzLAotCUhJRl9LRVlfVFlQRV9BRVNfR1JPVVAgICAgICAgICAgICAgICAgICAgICA9IDB4NCwK LQlISUZfS0VZX1RZUEVfQUVTX1BBSVJXSVNFICAgICAgICAgICAgICAgICAgPSAweDUsCi0JSElG X0tFWV9UWVBFX1dBUElfR1JPVVAgICAgICAgICAgICAgICAgICAgID0gMHg2LAotCUhJRl9LRVlf VFlQRV9XQVBJX1BBSVJXSVNFICAgICAgICAgICAgICAgICA9IDB4NywKLQlISUZfS0VZX1RZUEVf SUdUS19HUk9VUCAgICAgICAgICAgICAgICAgICAgPSAweDgsCi0JSElGX0tFWV9UWVBFX05PTkUg ICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5Ci19OwotCi1zdHJ1Y3QgaGlmX3dlcF9wYWly d2lzZV9rZXkgewotCXU4ICAgICBwZWVyX2FkZHJlc3NbRVRIX0FMRU5dOwotCXU4ICAgICByZXNl cnZlZDsKLQl1OCAgICAga2V5X2xlbmd0aDsKLQl1OCAgICAga2V5X2RhdGFbSElGX0FQSV9XRVBf S0VZX0RBVEFfU0laRV07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX3dlcF9ncm91cF9rZXkg ewotCXU4ICAgICBrZXlfaWQ7Ci0JdTggICAgIGtleV9sZW5ndGg7Ci0JdTggICAgIHJlc2VydmVk WzJdOwotCXU4ICAgICBrZXlfZGF0YVtISUZfQVBJX1dFUF9LRVlfREFUQV9TSVpFXTsKLX0gX19w YWNrZWQ7Ci0KLXN0cnVjdCBoaWZfdGtpcF9wYWlyd2lzZV9rZXkgewotCXU4ICAgICBwZWVyX2Fk ZHJlc3NbRVRIX0FMRU5dOwotCXU4ICAgICByZXNlcnZlZFsyXTsKLQl1OCAgICAgdGtpcF9rZXlf ZGF0YVtISUZfQVBJX1RLSVBfS0VZX0RBVEFfU0laRV07Ci0JdTggICAgIHJ4X21pY19rZXlbSElG X0FQSV9SWF9NSUNfS0VZX1NJWkVdOwotCXU4ICAgICB0eF9taWNfa2V5W0hJRl9BUElfVFhfTUlD X0tFWV9TSVpFXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfdGtpcF9ncm91cF9rZXkgewot CXU4ICAgICB0a2lwX2tleV9kYXRhW0hJRl9BUElfVEtJUF9LRVlfREFUQV9TSVpFXTsKLQl1OCAg ICAgcnhfbWljX2tleVtISUZfQVBJX1JYX01JQ19LRVlfU0laRV07Ci0JdTggICAgIGtleV9pZDsK LQl1OCAgICAgcmVzZXJ2ZWRbM107Ci0JdTggICAgIHJ4X3NlcXVlbmNlX2NvdW50ZXJbSElGX0FQ SV9SWF9TRVFVRU5DRV9DT1VOVEVSX1NJWkVdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9h ZXNfcGFpcndpc2Vfa2V5IHsKLQl1OCAgICAgcGVlcl9hZGRyZXNzW0VUSF9BTEVOXTsKLQl1OCAg ICAgcmVzZXJ2ZWRbMl07Ci0JdTggICAgIGFlc19rZXlfZGF0YVtISUZfQVBJX0FFU19LRVlfREFU QV9TSVpFXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfYWVzX2dyb3VwX2tleSB7Ci0JdTgg ICAgIGFlc19rZXlfZGF0YVtISUZfQVBJX0FFU19LRVlfREFUQV9TSVpFXTsKLQl1OCAgICAga2V5 X2lkOwotCXU4ICAgICByZXNlcnZlZFszXTsKLQl1OCAgICAgcnhfc2VxdWVuY2VfY291bnRlcltI SUZfQVBJX1JYX1NFUVVFTkNFX0NPVU5URVJfU0laRV07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3Qg aGlmX3dhcGlfcGFpcndpc2Vfa2V5IHsKLQl1OCAgICAgcGVlcl9hZGRyZXNzW0VUSF9BTEVOXTsK LQl1OCAgICAga2V5X2lkOwotCXU4ICAgICByZXNlcnZlZDsKLQl1OCAgICAgd2FwaV9rZXlfZGF0 YVtISUZfQVBJX1dBUElfS0VZX0RBVEFfU0laRV07Ci0JdTggICAgIG1pY19rZXlfZGF0YVtISUZf QVBJX01JQ19LRVlfREFUQV9TSVpFXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfd2FwaV9n cm91cF9rZXkgewotCXU4ICAgICB3YXBpX2tleV9kYXRhW0hJRl9BUElfV0FQSV9LRVlfREFUQV9T SVpFXTsKLQl1OCAgICAgbWljX2tleV9kYXRhW0hJRl9BUElfTUlDX0tFWV9EQVRBX1NJWkVdOwot CXU4ICAgICBrZXlfaWQ7Ci0JdTggICAgIHJlc2VydmVkWzNdOwotfSBfX3BhY2tlZDsKLQotc3Ry dWN0IGhpZl9pZ3RrX2dyb3VwX2tleSB7Ci0JdTggICAgIGlndGtfa2V5X2RhdGFbSElGX0FQSV9J R1RLX0tFWV9EQVRBX1NJWkVdOwotCXU4ICAgICBrZXlfaWQ7Ci0JdTggICAgIHJlc2VydmVkWzNd OwotCXU4ICAgICBpcG5bSElGX0FQSV9JUE5fU0laRV07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3Qg aGlmX3JlcV9hZGRfa2V5IHsKLQl1OCAgICAgdHlwZTsKLQl1OCAgICAgZW50cnlfaW5kZXg7Ci0J dTggICAgIGludF9pZDoyOwotCXU4ICAgICByZXNlcnZlZDE6NjsKLQl1OCAgICAgcmVzZXJ2ZWQy OwotCXVuaW9uIHsKLQkJc3RydWN0IGhpZl93ZXBfcGFpcndpc2Vfa2V5ICB3ZXBfcGFpcndpc2Vf a2V5OwotCQlzdHJ1Y3QgaGlmX3dlcF9ncm91cF9rZXkgICAgIHdlcF9ncm91cF9rZXk7Ci0JCXN0 cnVjdCBoaWZfdGtpcF9wYWlyd2lzZV9rZXkgdGtpcF9wYWlyd2lzZV9rZXk7Ci0JCXN0cnVjdCBo aWZfdGtpcF9ncm91cF9rZXkgICAgdGtpcF9ncm91cF9rZXk7Ci0JCXN0cnVjdCBoaWZfYWVzX3Bh aXJ3aXNlX2tleSAgYWVzX3BhaXJ3aXNlX2tleTsKLQkJc3RydWN0IGhpZl9hZXNfZ3JvdXBfa2V5 ICAgICBhZXNfZ3JvdXBfa2V5OwotCQlzdHJ1Y3QgaGlmX3dhcGlfcGFpcndpc2Vfa2V5IHdhcGlf cGFpcndpc2Vfa2V5OwotCQlzdHJ1Y3QgaGlmX3dhcGlfZ3JvdXBfa2V5ICAgIHdhcGlfZ3JvdXBf a2V5OwotCQlzdHJ1Y3QgaGlmX2lndGtfZ3JvdXBfa2V5ICAgIGlndGtfZ3JvdXBfa2V5OwotCX0g a2V5OwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9jbmZfYWRkX2tleSB7Ci0JX19sZTMyIHN0 YXR1czsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfcmVxX3JlbW92ZV9rZXkgewotCXU4ICAg ICBlbnRyeV9pbmRleDsKLQl1OCAgICAgcmVzZXJ2ZWRbM107Ci19IF9fcGFja2VkOwotCi1zdHJ1 Y3QgaGlmX2NuZl9yZW1vdmVfa2V5IHsKLQlfX2xlMzIgc3RhdHVzOwotfSBfX3BhY2tlZDsKLQot ZW51bSBoaWZfZXZlbnRfaW5kIHsKLQlISUZfRVZFTlRfSU5EX0JTU0xPU1QgICAgICAgICAgICAg ICAgICAgICAgPSAweDEsCi0JSElGX0VWRU5UX0lORF9CU1NSRUdBSU5FRCAgICAgICAgICAgICAg ICAgID0gMHgyLAotCUhJRl9FVkVOVF9JTkRfUkNQSV9SU1NJICAgICAgICAgICAgICAgICAgICA9 IDB4MywKLQlISUZfRVZFTlRfSU5EX1BTX01PREVfRVJST1IgICAgICAgICAgICAgICAgPSAweDQs Ci0JSElGX0VWRU5UX0lORF9JTkFDVElWSVRZICAgICAgICAgICAgICAgICAgID0gMHg1Ci19Owot Ci1lbnVtIGhpZl9wc19tb2RlX2Vycm9yIHsKLQlISUZfUFNfRVJST1JfTk9fRVJST1IgICAgICAg ICAgICAgICAgICAgICAgPSAwLAotCUhJRl9QU19FUlJPUl9BUF9OT1RfUkVTUF9UT19QT0xMICAg ICAgICAgICA9IDEsCi0JSElGX1BTX0VSUk9SX0FQX05PVF9SRVNQX1RPX1VBUFNEX1RSSUdHRVIg ID0gMiwKLQlISUZfUFNfRVJST1JfQVBfU0VOVF9VTklDQVNUX0lOX0RPWkUgICAgICAgPSAzLAot CUhJRl9QU19FUlJPUl9BUF9OT19EQVRBX0FGVEVSX1RJTSAgICAgICAgICA9IDQKLX07Ci0KLXN0 cnVjdCBoaWZfaW5kX2V2ZW50IHsKLQlfX2xlMzIgZXZlbnRfaWQ7Ci0JdW5pb24gewotCQl1OCAg ICAgcmNwaV9yc3NpOwotCQlfX2xlMzIgcHNfbW9kZV9lcnJvcjsKLQkJX19sZTMyIHBlZXJfc3Rh X3NldDsKLQl9IGV2ZW50X2RhdGE7Ci19IF9fcGFja2VkOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBh L2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX2FwaV9nZW5lcmFsLmggYi9kcml2ZXJzL3N0YWdpbmcv d2Z4L2hpZl9hcGlfZ2VuZXJhbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDE4 ODk0NTcxOGQuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl9hcGlf Z2VuZXJhbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjY3ICswLDAgQEAKLS8qIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wICovCi0vKgotICogV0Z4IGhhcmR3YXJlIGludGVyZmFj ZSBkZWZpbml0aW9ucwotICoKLSAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwLCBTaWxpY29uIExh Ym9yYXRvcmllcyBJbmMuCi0gKi8KLQotI2lmbmRlZiBXRlhfSElGX0FQSV9HRU5FUkFMX0gKLSNk ZWZpbmUgV0ZYX0hJRl9BUElfR0VORVJBTF9ICi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVk ZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgotI2Vsc2UKLSNp bmNsdWRlIDxuZXQvZXRoZXJuZXQuaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNkZWZpbmUgX19w YWNrZWQgX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpCi0jZW5kaWYKLQotI2RlZmluZSBISUZf SURfSVNfSU5ESUNBVElPTiAgICAgIDB4ODAKLSNkZWZpbmUgSElGX0NPVU5URVJfTUFYICAgICAg ICAgICA3Ci0KLXN0cnVjdCBoaWZfbXNnIHsKLQlfX2xlMTYgbGVuOwotCXU4ICAgICBpZDsKLQl1 OCAgICAgcmVzZXJ2ZWQ6MTsKLQl1OCAgICAgaW50ZXJmYWNlOjI7Ci0JdTggICAgIHNlcW51bToz OwotCXU4ICAgICBlbmNyeXB0ZWQ6MjsKLQl1OCAgICAgYm9keVtdOwotfSBfX3BhY2tlZDsKLQot ZW51bSBoaWZfZ2VuZXJhbF9yZXF1ZXN0c19pZHMgewotCUhJRl9SRVFfSURfQ09ORklHVVJBVElP TiAgICAgICAgPSAweDA5LAotCUhJRl9SRVFfSURfQ09OVFJPTF9HUElPICAgICAgICAgPSAweDI2 LAotCUhJRl9SRVFfSURfU0VUX1NMX01BQ19LRVkgICAgICAgPSAweDI3LAotCUhJRl9SRVFfSURf U0xfRVhDSEFOR0VfUFVCX0tFWVMgPSAweDI4LAotCUhJRl9SRVFfSURfU0xfQ09ORklHVVJFICAg ICAgICAgPSAweDI5LAotCUhJRl9SRVFfSURfUFJFVkVOVF9ST0xMQkFDSyAgICAgPSAweDJhLAot CUhJRl9SRVFfSURfUFRBX1NFVFRJTkdTICAgICAgICAgPSAweDJiLAotCUhJRl9SRVFfSURfUFRB X1BSSU9SSVRZICAgICAgICAgPSAweDJjLAotCUhJRl9SRVFfSURfUFRBX1NUQVRFICAgICAgICAg ICAgPSAweDJkLAotCUhJRl9SRVFfSURfU0hVVF9ET1dOICAgICAgICAgICAgPSAweDMyLAotfTsK LQotZW51bSBoaWZfZ2VuZXJhbF9jb25maXJtYXRpb25zX2lkcyB7Ci0JSElGX0NORl9JRF9DT05G SUdVUkFUSU9OICAgICAgICA9IDB4MDksCi0JSElGX0NORl9JRF9DT05UUk9MX0dQSU8gICAgICAg ICA9IDB4MjYsCi0JSElGX0NORl9JRF9TRVRfU0xfTUFDX0tFWSAgICAgICA9IDB4MjcsCi0JSElG X0NORl9JRF9TTF9FWENIQU5HRV9QVUJfS0VZUyA9IDB4MjgsCi0JSElGX0NORl9JRF9TTF9DT05G SUdVUkUgICAgICAgICA9IDB4MjksCi0JSElGX0NORl9JRF9QUkVWRU5UX1JPTExCQUNLICAgICA9 IDB4MmEsCi0JSElGX0NORl9JRF9QVEFfU0VUVElOR1MgICAgICAgICA9IDB4MmIsCi0JSElGX0NO Rl9JRF9QVEFfUFJJT1JJVFkgICAgICAgICA9IDB4MmMsCi0JSElGX0NORl9JRF9QVEFfU1RBVEUg ICAgICAgICAgICA9IDB4MmQsCi0JSElGX0NORl9JRF9TSFVUX0RPV04gICAgICAgICAgICA9IDB4 MzIsCi19OwotCi1lbnVtIGhpZl9nZW5lcmFsX2luZGljYXRpb25zX2lkcyB7Ci0JSElGX0lORF9J RF9FWENFUFRJT04gICAgICAgICAgICA9IDB4ZTAsCi0JSElGX0lORF9JRF9TVEFSVFVQICAgICAg ICAgICAgICA9IDB4ZTEsCi0JSElGX0lORF9JRF9XQUtFVVAgICAgICAgICAgICAgICA9IDB4ZTIs Ci0JSElGX0lORF9JRF9HRU5FUklDICAgICAgICAgICAgICA9IDB4ZTMsCi0JSElGX0lORF9JRF9F UlJPUiAgICAgICAgICAgICAgICA9IDB4ZTQsCi0JSElGX0lORF9JRF9TTF9FWENIQU5HRV9QVUJf S0VZUyA9IDB4ZTUKLX07Ci0KLSNkZWZpbmUgSElGX1NUQVRVU19TVUNDRVNTICAgICAgICAgICAg ICAgICAgICAgICAgIChjcHVfdG9fbGUzMigweDAwMDApKQotI2RlZmluZSBISUZfU1RBVFVTX0ZB SUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNwdV90b19sZTMyKDB4MDAwMSkpCi0jZGVm aW5lIEhJRl9TVEFUVVNfSU5WQUxJRF9QQVJBTUVURVIgICAgICAgICAgICAgICAoY3B1X3RvX2xl MzIoMHgwMDAyKSkKLSNkZWZpbmUgSElGX1NUQVRVU19XQVJOSU5HICAgICAgICAgICAgICAgICAg ICAgICAgIChjcHVfdG9fbGUzMigweDAwMDMpKQotI2RlZmluZSBISUZfU1RBVFVTX1VOS05PV05f UkVRVUVTVCAgICAgICAgICAgICAgICAgKGNwdV90b19sZTMyKDB4MDAwNCkpCi0jZGVmaW5lIEhJ Rl9TVEFUVVNfUlhfRkFJTF9ERUNSWVBUICAgICAgICAgICAgICAgICAoY3B1X3RvX2xlMzIoMHgw MDEwKSkKLSNkZWZpbmUgSElGX1NUQVRVU19SWF9GQUlMX01JQyAgICAgICAgICAgICAgICAgICAg IChjcHVfdG9fbGUzMigweDAwMTEpKQotI2RlZmluZSBISUZfU1RBVFVTX1JYX0ZBSUxfTk9fS0VZ ICAgICAgICAgICAgICAgICAgKGNwdV90b19sZTMyKDB4MDAxMikpCi0jZGVmaW5lIEhJRl9TVEFU VVNfVFhfRkFJTF9SRVRSSUVTICAgICAgICAgICAgICAgICAoY3B1X3RvX2xlMzIoMHgwMDEzKSkK LSNkZWZpbmUgSElGX1NUQVRVU19UWF9GQUlMX1RJTUVPVVQgICAgICAgICAgICAgICAgIChjcHVf dG9fbGUzMigweDAwMTQpKQotI2RlZmluZSBISUZfU1RBVFVTX1RYX0ZBSUxfUkVRVUVVRSAgICAg ICAgICAgICAgICAgKGNwdV90b19sZTMyKDB4MDAxNSkpCi0jZGVmaW5lIEhJRl9TVEFUVVNfUkVG VVNFRCAgICAgICAgICAgICAgICAgICAgICAgICAoY3B1X3RvX2xlMzIoMHgwMDE2KSkKLSNkZWZp bmUgSElGX1NUQVRVU19CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjcHVfdG9fbGUz MigweDAwMTcpKQotI2RlZmluZSBISUZfU1RBVFVTX1NMS19TRVRfS0VZX1NVQ0NFU1MgICAgICAg ICAgICAgKGNwdV90b19sZTMyKDB4MDA1QSkpCi0jZGVmaW5lIEhJRl9TVEFUVVNfU0xLX1NFVF9L RVlfQUxSRUFEWV9CVVJORUQgICAgICAoY3B1X3RvX2xlMzIoMHgwMDZCKSkKLSNkZWZpbmUgSElG X1NUQVRVU19TTEtfU0VUX0tFWV9ESVNBTExPV0VEX01PREUgICAgIChjcHVfdG9fbGUzMigweDAw N0MpKQotI2RlZmluZSBISUZfU1RBVFVTX1NMS19TRVRfS0VZX1VOS05PV05fTU9ERSAgICAgICAg KGNwdV90b19sZTMyKDB4MDA4RCkpCi0jZGVmaW5lIEhJRl9TVEFUVVNfU0xLX05FR09fU1VDQ0VT UyAgICAgICAgICAgICAgICAoY3B1X3RvX2xlMzIoMHgwMDlFKSkKLSNkZWZpbmUgSElGX1NUQVRV U19TTEtfTkVHT19GQUlMRUQgICAgICAgICAgICAgICAgIChjcHVfdG9fbGUzMigweDAwQUYpKQot I2RlZmluZSBISUZfU1RBVFVTX1JPTExCQUNLX1NVQ0NFU1MgICAgICAgICAgICAgICAgKGNwdV90 b19sZTMyKDB4MTIzNCkpCi0jZGVmaW5lIEhJRl9TVEFUVVNfUk9MTEJBQ0tfRkFJTCAgICAgICAg ICAgICAgICAgICAoY3B1X3RvX2xlMzIoMHgxMjU2KSkKLQotZW51bSBoaWZfYXBpX3JhdGVfaW5k ZXggewotCUFQSV9SQVRFX0lOREVYX0JfMU1CUFMgICAgID0gMCwKLQlBUElfUkFURV9JTkRFWF9C XzJNQlBTICAgICA9IDEsCi0JQVBJX1JBVEVfSU5ERVhfQl81UDVNQlBTICAgPSAyLAotCUFQSV9S QVRFX0lOREVYX0JfMTFNQlBTICAgID0gMywKLQlBUElfUkFURV9JTkRFWF9QQkNDXzIyTUJQUyA9 IDQsCi0JQVBJX1JBVEVfSU5ERVhfUEJDQ18zM01CUFMgPSA1LAotCUFQSV9SQVRFX0lOREVYX0df Nk1CUFMgICAgID0gNiwKLQlBUElfUkFURV9JTkRFWF9HXzlNQlBTICAgICA9IDcsCi0JQVBJX1JB VEVfSU5ERVhfR18xMk1CUFMgICAgPSA4LAotCUFQSV9SQVRFX0lOREVYX0dfMThNQlBTICAgID0g OSwKLQlBUElfUkFURV9JTkRFWF9HXzI0TUJQUyAgICA9IDEwLAotCUFQSV9SQVRFX0lOREVYX0df MzZNQlBTICAgID0gMTEsCi0JQVBJX1JBVEVfSU5ERVhfR180OE1CUFMgICAgPSAxMiwKLQlBUElf UkFURV9JTkRFWF9HXzU0TUJQUyAgICA9IDEzLAotCUFQSV9SQVRFX0lOREVYX05fNlA1TUJQUyAg ID0gMTQsCi0JQVBJX1JBVEVfSU5ERVhfTl8xM01CUFMgICAgPSAxNSwKLQlBUElfUkFURV9JTkRF WF9OXzE5UDVNQlBTICA9IDE2LAotCUFQSV9SQVRFX0lOREVYX05fMjZNQlBTICAgID0gMTcsCi0J QVBJX1JBVEVfSU5ERVhfTl8zOU1CUFMgICAgPSAxOCwKLQlBUElfUkFURV9JTkRFWF9OXzUyTUJQ UyAgICA9IDE5LAotCUFQSV9SQVRFX0lOREVYX05fNThQNU1CUFMgID0gMjAsCi0JQVBJX1JBVEVf SU5ERVhfTl82NU1CUFMgICAgPSAyMSwKLQlBUElfUkFURV9OVU1fRU5UUklFUyAgICAgICA9IDIy Ci19OwotCi1lbnVtIGhpZl9md190eXBlIHsKLQlISUZfRldfVFlQRV9FVEYgID0gMHgwLAotCUhJ Rl9GV19UWVBFX1dGTSAgPSAweDEsCi0JSElGX0ZXX1RZUEVfV1NNICA9IDB4MgotfTsKLQotc3Ry dWN0IGhpZl9pbmRfc3RhcnR1cCB7Ci0JLy8gQXMgdGhlIG90aGVycywgdGhpcyBzdHJ1Y3QgaXMg aW50ZXJwcmV0ZWQgYXMgbGl0dGxlIGVuZGlhbiBieSB0aGUKLQkvLyBkZXZpY2UuIEhvd2V2ZXIs IHRoaXMgc3RydWN0IGlzIGFsc28gdXNlZCBieSB0aGUgZHJpdmVyLiBXZSBwcmVmZXIgdG8KLQkv LyBkZWNsYXJlIGl0IGluIG5hdGl2ZSBvcmRlciBhbmQgZG9pbmcgYnl0ZSBzd2FwIG9uIHJlY2Vw dGlvbi4KLQlfX2xlMzIgc3RhdHVzOwotCXUxNiAgICBoYXJkd2FyZV9pZDsKLQl1OCAgICAgb3Bu WzE0XTsKLQl1OCAgICAgdWlkWzhdOwotCXUxNiAgICBudW1faW5wX2NoX2J1ZnM7Ci0JdTE2ICAg IHNpemVfaW5wX2NoX2J1ZjsKLQl1OCAgICAgbnVtX2xpbmtzX2FwOwotCXU4ICAgICBudW1faW50 ZXJmYWNlczsKLQl1OCAgICAgbWFjX2FkZHJbMl1bRVRIX0FMRU5dOwotCXU4ICAgICBhcGlfdmVy c2lvbl9taW5vcjsKLQl1OCAgICAgYXBpX3ZlcnNpb25fbWFqb3I7Ci0JdTggICAgIGxpbmtfbW9k ZToyOwotCXU4ICAgICByZXNlcnZlZDE6NjsKLQl1OCAgICAgcmVzZXJ2ZWQyOwotCXU4ICAgICBy ZXNlcnZlZDM7Ci0JdTggICAgIHJlc2VydmVkNDsKLQl1OCAgICAgZmlybXdhcmVfYnVpbGQ7Ci0J dTggICAgIGZpcm13YXJlX21pbm9yOwotCXU4ICAgICBmaXJtd2FyZV9tYWpvcjsKLQl1OCAgICAg ZmlybXdhcmVfdHlwZTsKLQl1OCAgICAgZGlzYWJsZWRfY2hhbm5lbF9saXN0WzJdOwotCXU4ICAg ICByZWdpb25fc2VsX21vZGU6NDsKLQl1OCAgICAgcmVzZXJ2ZWQ1OjQ7Ci0JdTggICAgIHBoeTFf cmVnaW9uOjM7Ci0JdTggICAgIHBoeTBfcmVnaW9uOjM7Ci0JdTggICAgIG90cF9waHlfdmVyOjI7 Ci0JdTMyICAgIHN1cHBvcnRlZF9yYXRlX21hc2s7Ci0JdTggICAgIGZpcm13YXJlX2xhYmVsWzEy OF07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX2luZF93YWtldXAgewotfSBfX3BhY2tlZDsK LQotc3RydWN0IGhpZl9yZXFfY29uZmlndXJhdGlvbiB7Ci0JX19sZTE2IGxlbmd0aDsKLQl1OCAg ICAgcGRzX2RhdGFbXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfY25mX2NvbmZpZ3VyYXRp b24gewotCV9fbGUzMiBzdGF0dXM7Ci19IF9fcGFja2VkOwotCi1lbnVtIGhpZl9ncGlvX21vZGUg ewotCUhJRl9HUElPX01PREVfRDAgICAgICAgPSAweDAsCi0JSElGX0dQSU9fTU9ERV9EMSAgICAg ICA9IDB4MSwKLQlISUZfR1BJT19NT0RFX09EMCAgICAgID0gMHgyLAotCUhJRl9HUElPX01PREVf T0QxICAgICAgPSAweDMsCi0JSElGX0dQSU9fTU9ERV9UUklTVEFURSA9IDB4NCwKLQlISUZfR1BJ T19NT0RFX1RPR0dMRSAgID0gMHg1LAotCUhJRl9HUElPX01PREVfUkVBRCAgICAgPSAweDYKLX07 Ci0KLXN0cnVjdCBoaWZfcmVxX2NvbnRyb2xfZ3BpbyB7Ci0JdTggICAgIGdwaW9fbGFiZWw7Ci0J dTggICAgIGdwaW9fbW9kZTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfY25mX2NvbnRyb2xf Z3BpbyB7Ci0JX19sZTMyIHN0YXR1czsKLQlfX2xlMzIgdmFsdWU7Ci19IF9fcGFja2VkOwotCi1l bnVtIGhpZl9nZW5lcmljX2luZGljYXRpb25fdHlwZSB7Ci0JSElGX0dFTkVSSUNfSU5ESUNBVElP Tl9UWVBFX1JBVyAgICAgICAgICAgICAgICA9IDB4MCwKLQlISUZfR0VORVJJQ19JTkRJQ0FUSU9O X1RZUEVfU1RSSU5HICAgICAgICAgICAgID0gMHgxLAotCUhJRl9HRU5FUklDX0lORElDQVRJT05f VFlQRV9SWF9TVEFUUyAgICAgICAgICAgPSAweDIsCi0JSElGX0dFTkVSSUNfSU5ESUNBVElPTl9U WVBFX1RYX1BPV0VSX0xPT1BfSU5GTyA9IDB4MywKLX07Ci0KLXN0cnVjdCBoaWZfcnhfc3RhdHMg ewotCV9fbGUzMiBuYl9yeF9mcmFtZTsKLQlfX2xlMzIgbmJfY3JjX2ZyYW1lOwotCV9fbGUzMiBw ZXJfdG90YWw7Ci0JX19sZTMyIHRocm91Z2hwdXQ7Ci0JX19sZTMyIG5iX3J4X2J5X3JhdGVbQVBJ X1JBVEVfTlVNX0VOVFJJRVNdOwotCV9fbGUxNiBwZXJbQVBJX1JBVEVfTlVNX0VOVFJJRVNdOwot CV9fbGUxNiBzbnJbQVBJX1JBVEVfTlVNX0VOVFJJRVNdOyAgLy8gc2lnbmVkIHZhbHVlCi0JX19s ZTE2IHJzc2lbQVBJX1JBVEVfTlVNX0VOVFJJRVNdOyAvLyBzaWduZWQgdmFsdWUKLQlfX2xlMTYg Y2ZvW0FQSV9SQVRFX05VTV9FTlRSSUVTXTsgIC8vIHNpZ25lZCB2YWx1ZQotCV9fbGUzMiBkYXRl OwotCV9fbGUzMiBwd3JfY2xrX2ZyZXE7Ci0JdTggICAgIGlzX2V4dF9wd3JfY2xrOwotCXM4ICAg ICBjdXJyZW50X3RlbXA7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX3R4X3Bvd2VyX2xvb3Bf aW5mbyB7Ci0JX19sZTE2IHR4X2dhaW5fZGlnOwotCV9fbGUxNiB0eF9nYWluX3BhOwotCV9fbGUx NiB0YXJnZXRfcG91dDsgLy8gc2lnbmVkIHZhbHVlCi0JX19sZTE2IHBfZXN0aW1hdGlvbjsgLy8g c2lnbmVkIHZhbHVlCi0JX19sZTE2IHZwZGV0OwotCXU4ICAgICBtZWFzdXJlbWVudF9pbmRleDsK LQl1OCAgICAgcmVzZXJ2ZWQ7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX2luZF9nZW5lcmlj IHsKLQlfX2xlMzIgdHlwZTsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBoaWZfcnhfc3RhdHMgcnhfc3Rh dHM7Ci0JCXN0cnVjdCBoaWZfdHhfcG93ZXJfbG9vcF9pbmZvIHR4X3Bvd2VyX2xvb3BfaW5mbzsK LQl9IGRhdGE7Ci19IF9fcGFja2VkOwotCi1lbnVtIGhpZl9lcnJvciB7Ci0JSElGX0VSUk9SX0ZJ Uk1XQVJFX1JPTExCQUNLICAgICAgICAgICA9IDB4MDAsCi0JSElGX0VSUk9SX0ZJUk1XQVJFX0RF QlVHX0VOQUJMRUQgICAgICA9IDB4MDEsCi0JSElGX0VSUk9SX1NMS19PVVREQVRFRF9TRVNTSU9O X0tFWSAgICA9IDB4MDIsCi0JSElGX0VSUk9SX1NMS19TRVNTSU9OX0tFWSAgICAgICAgICAgICA9 IDB4MDMsCi0JSElGX0VSUk9SX09PUl9WT0xUQUdFICAgICAgICAgICAgICAgICA9IDB4MDQsCi0J SElGX0VSUk9SX1BEU19QQVlMT0FEICAgICAgICAgICAgICAgICA9IDB4MDUsCi0JSElGX0VSUk9S X09PUl9URU1QRVJBVFVSRSAgICAgICAgICAgICA9IDB4MDYsCi0JSElGX0VSUk9SX1NMS19SRVFf RFVSSU5HX0tFWV9FWENIQU5HRSA9IDB4MDcsCi0JSElGX0VSUk9SX1NMS19NVUxUSV9UWF9VTlNV UFBPUlRFRCAgICA9IDB4MDgsCi0JSElGX0VSUk9SX1NMS19PVkVSRkxPVyAgICAgICAgICAgICAg ICA9IDB4MDksCi0JSElGX0VSUk9SX1NMS19ERUNSWVBUSU9OICAgICAgICAgICAgICA9IDB4MGEs Ci0JSElGX0VSUk9SX1NMS19XUk9OR19FTkNSWVBUSU9OX1NUQVRFICA9IDB4MGIsCi0JSElGX0VS Uk9SX0hJRl9CVVNfRlJFUVVFTkNZX1RPT19MT1cgICA9IDB4MGMsCi0JSElGX0VSUk9SX0hJRl9S WF9EQVRBX1RPT19MQVJHRSAgICAgICA9IDB4MGUsCi0JSElGX0VSUk9SX0hJRl9UWF9RVUVVRV9G VUxMICAgICAgICAgICA9IDB4MGQsCi0JSElGX0VSUk9SX0hJRl9CVVMgICAgICAgICAgICAgICAg ICAgICA9IDB4MGYsCi0JSElGX0VSUk9SX1BEU19URVNURkVBVFVSRSAgICAgICAgICAgICA9IDB4 MTAsCi0JSElGX0VSUk9SX1NMS19VTkNPTkZJR1VSRUQgICAgICAgICAgICA9IDB4MTEsCi19Owot Ci1zdHJ1Y3QgaGlmX2luZF9lcnJvciB7Ci0JX19sZTMyIHR5cGU7Ci0JdTggICAgIGRhdGFbXTsK LX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfaW5kX2V4Y2VwdGlvbiB7Ci0JX19sZTMyIHR5cGU7 Ci0JdTggICAgIGRhdGFbXTsKLX0gX19wYWNrZWQ7Ci0KLWVudW0gaGlmX3NlY3VyZV9saW5rX3N0 YXRlIHsKLQlTRUNfTElOS19VTkFWQUlMQUJMRSA9IDB4MCwKLQlTRUNfTElOS19SRVNFUlZFRCAg ICA9IDB4MSwKLQlTRUNfTElOS19FVkFMICAgICAgICA9IDB4MiwKLQlTRUNfTElOS19FTkZPUkNF RCAgICA9IDB4MwotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4 L2hpZl9hcGlfbWliLmggYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl9hcGlfbWliLmgKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjZTkyNDcyMGNlNi4uMDAwMDAwMDAwMDAwCi0tLSBh L2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX2FwaV9taWIuaAorKysgL2Rldi9udWxsCkBAIC0xLDM0 MyArMCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCAqLwotLyoK LSAqIFdGeCBoYXJkd2FyZSBpbnRlcmZhY2UgZGVmaW5pdGlvbnMKLSAqCi0gKiBDb3B5cmlnaHQg KGMpIDIwMTgtMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMgSW5jLgotICovCi0KLSNpZm5kZWYg V0ZYX0hJRl9BUElfTUlCX0gKLSNkZWZpbmUgV0ZYX0hJRl9BUElfTUlCX0gKLQotI2luY2x1ZGUg ImhpZl9hcGlfZ2VuZXJhbC5oIgotCi0jZGVmaW5lIEhJRl9BUElfSVBWNF9BRERSRVNTX1NJWkUg NAotI2RlZmluZSBISUZfQVBJX0lQVjZfQUREUkVTU19TSVpFIDE2Ci0KLWVudW0gaGlmX21pYl9p ZHMgewotCUhJRl9NSUJfSURfR0xfT1BFUkFUSU9OQUxfUE9XRVJfTU9ERSAgICAgICAgPSAweDIw MDAsCi0JSElGX01JQl9JRF9HTF9CTE9DS19BQ0tfSU5GTyAgICAgICAgICAgICAgICA9IDB4MjAw MSwKLQlISUZfTUlCX0lEX0dMX1NFVF9NVUxUSV9NU0cgICAgICAgICAgICAgICAgID0gMHgyMDAy LAotCUhJRl9NSUJfSURfQ0NBX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgPSAweDIwMDMs Ci0JSElGX01JQl9JRF9FVEhFUlRZUEVfREFUQUZSQU1FX0NPTkRJVElPTiAgICA9IDB4MjAxMCwK LQlISUZfTUlCX0lEX1BPUlRfREFUQUZSQU1FX0NPTkRJVElPTiAgICAgICAgID0gMHgyMDExLAot CUhJRl9NSUJfSURfTUFHSUNfREFUQUZSQU1FX0NPTkRJVElPTiAgICAgICAgPSAweDIwMTIsCi0J SElGX01JQl9JRF9NQUNfQUREUl9EQVRBRlJBTUVfQ09ORElUSU9OICAgICA9IDB4MjAxMywKLQlI SUZfTUlCX0lEX0lQVjRfQUREUl9EQVRBRlJBTUVfQ09ORElUSU9OICAgID0gMHgyMDE0LAotCUhJ Rl9NSUJfSURfSVBWNl9BRERSX0RBVEFGUkFNRV9DT05ESVRJT04gICAgPSAweDIwMTUsCi0JSElG X01JQl9JRF9VQ19NQ19CQ19EQVRBRlJBTUVfQ09ORElUSU9OICAgICA9IDB4MjAxNiwKLQlISUZf TUlCX0lEX0NPTkZJR19EQVRBX0ZJTFRFUiAgICAgICAgICAgICAgID0gMHgyMDE3LAotCUhJRl9N SUJfSURfU0VUX0RBVEFfRklMVEVSSU5HICAgICAgICAgICAgICAgPSAweDIwMTgsCi0JSElGX01J Ql9JRF9BUlBfSVBfQUREUkVTU0VTX1RBQkxFICAgICAgICAgICA9IDB4MjAxOSwKLQlISUZfTUlC X0lEX05TX0lQX0FERFJFU1NFU19UQUJMRSAgICAgICAgICAgID0gMHgyMDFBLAotCUhJRl9NSUJf SURfUlhfRklMVEVSICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIwMUIsCi0JSElGX01JQl9J RF9CRUFDT05fRklMVEVSX1RBQkxFICAgICAgICAgICAgICA9IDB4MjAxQywKLQlISUZfTUlCX0lE X0JFQUNPTl9GSUxURVJfRU5BQkxFICAgICAgICAgICAgID0gMHgyMDFELAotCUhJRl9NSUJfSURf R1JQX1NFUV9DT1VOVEVSICAgICAgICAgICAgICAgICAgPSAweDIwMzAsCi0JSElGX01JQl9JRF9U U0ZfQ09VTlRFUiAgICAgICAgICAgICAgICAgICAgICA9IDB4MjAzMSwKLQlISUZfTUlCX0lEX1NU QVRJU1RJQ1NfVEFCTEUgICAgICAgICAgICAgICAgID0gMHgyMDMyLAotCUhJRl9NSUJfSURfQ09V TlRFUlNfVEFCTEUgICAgICAgICAgICAgICAgICAgPSAweDIwMzMsCi0JSElGX01JQl9JRF9NQVhf VFhfUE9XRVJfTEVWRUwgICAgICAgICAgICAgICA9IDB4MjAzNCwKLQlISUZfTUlCX0lEX0VYVEVO REVEX0NPVU5URVJTX1RBQkxFICAgICAgICAgID0gMHgyMDM1LAotCUhJRl9NSUJfSURfRE9UMTFf TUFDX0FERFJFU1MgICAgICAgICAgICAgICAgPSAweDIwNDAsCi0JSElGX01JQl9JRF9ET1QxMV9N QVhfVFJBTlNNSVRfTVNEVV9MSUZFVElNRSA9IDB4MjA0MSwKLQlISUZfTUlCX0lEX0RPVDExX01B WF9SRUNFSVZFX0xJRkVUSU1FICAgICAgID0gMHgyMDQyLAotCUhJRl9NSUJfSURfRE9UMTFfV0VQ X0RFRkFVTFRfS0VZX0lEICAgICAgICAgPSAweDIwNDMsCi0JSElGX01JQl9JRF9ET1QxMV9SVFNf VEhSRVNIT0xEICAgICAgICAgICAgICA9IDB4MjA0NCwKLQlISUZfTUlCX0lEX1NMT1RfVElNRSAg ICAgICAgICAgICAgICAgICAgICAgID0gMHgyMDQ1LAotCUhJRl9NSUJfSURfQ1VSUkVOVF9UWF9Q T1dFUl9MRVZFTCAgICAgICAgICAgPSAweDIwNDYsCi0JSElGX01JQl9JRF9OT05fRVJQX1BST1RF Q1RJT04gICAgICAgICAgICAgICA9IDB4MjA0NywKLQlISUZfTUlCX0lEX1RFTVBMQVRFX0ZSQU1F ICAgICAgICAgICAgICAgICAgID0gMHgyMDQ4LAotCUhJRl9NSUJfSURfQkVBQ09OX1dBS0VVUF9Q RVJJT0QgICAgICAgICAgICAgPSAweDIwNDksCi0JSElGX01JQl9JRF9SQ1BJX1JTU0lfVEhSRVNI T0xEICAgICAgICAgICAgICA9IDB4MjA0QSwKLQlISUZfTUlCX0lEX0JMT0NLX0FDS19QT0xJQ1kg ICAgICAgICAgICAgICAgID0gMHgyMDRCLAotCUhJRl9NSUJfSURfT1ZFUlJJREVfSU5URVJOQUxf VFhfUkFURSAgICAgICAgPSAweDIwNEMsCi0JSElGX01JQl9JRF9TRVRfQVNTT0NJQVRJT05fTU9E RSAgICAgICAgICAgICA9IDB4MjA0RCwKLQlISUZfTUlCX0lEX1NFVF9VQVBTRF9JTkZPUk1BVElP TiAgICAgICAgICAgID0gMHgyMDRFLAotCUhJRl9NSUJfSURfU0VUX1RYX1JBVEVfUkVUUllfUE9M SUNZICAgICAgICAgPSAweDIwNEYsCi0JSElGX01JQl9JRF9QUk9URUNURURfTUdNVF9QT0xJQ1kg ICAgICAgICAgICA9IDB4MjA1MCwKLQlISUZfTUlCX0lEX1NFVF9IVF9QUk9URUNUSU9OICAgICAg ICAgICAgICAgID0gMHgyMDUxLAotCUhJRl9NSUJfSURfS0VFUF9BTElWRV9QRVJJT0QgICAgICAg ICAgICAgICAgPSAweDIwNTIsCi0JSElGX01JQl9JRF9BUlBfS0VFUF9BTElWRV9QRVJJT0QgICAg ICAgICAgICA9IDB4MjA1MywKLQlISUZfTUlCX0lEX0lOQUNUSVZJVFlfVElNRVIgICAgICAgICAg ICAgICAgID0gMHgyMDU0LAotCUhJRl9NSUJfSURfSU5URVJGQUNFX1BST1RFQ1RJT04gICAgICAg ICAgICAgPSAweDIwNTUsCi0JSElGX01JQl9JRF9CRUFDT05fU1RBVFMgICAgICAgICAgICAgICAg ICAgICA9IDB4MjA1NiwKLX07Ci0KLWVudW0gaGlmX29wX3Bvd2VyX21vZGUgewotCUhJRl9PUF9Q T1dFUl9NT0RFX0FDVElWRSAgICA9IDB4MCwKLQlISUZfT1BfUE9XRVJfTU9ERV9ET1pFICAgICAg PSAweDEsCi0JSElGX09QX1BPV0VSX01PREVfUVVJRVNDRU5UID0gMHgyCi19OwotCi1zdHJ1Y3Qg aGlmX21pYl9nbF9vcGVyYXRpb25hbF9wb3dlcl9tb2RlIHsKLQl1OCAgICAgcG93ZXJfbW9kZTo0 OwotCXU4ICAgICByZXNlcnZlZDE6MzsKLQl1OCAgICAgd3VwX2luZF9hY3RpdmF0aW9uOjE7Ci0J dTggICAgIHJlc2VydmVkMlszXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfbWliX2dsX3Nl dF9tdWx0aV9tc2cgewotCXU4ICAgICBlbmFibGVfbXVsdGlfdHhfY29uZjoxOwotCXU4ICAgICBy ZXNlcnZlZDE6NzsKLQl1OCAgICAgcmVzZXJ2ZWQyWzNdOwotfSBfX3BhY2tlZDsKLQotZW51bSBo aWZfYXJwX25zX2ZyYW1lX3RyZWF0bWVudCB7Ci0JSElGX0FSUF9OU19GSUxURVJJTkdfRElTQUJM RSA9IDB4MCwKLQlISUZfQVJQX05TX0ZJTFRFUklOR19FTkFCTEUgID0gMHgxLAotCUhJRl9BUlBf TlNfUkVQTFlfRU5BQkxFICAgICAgPSAweDIKLX07Ci0KLXN0cnVjdCBoaWZfbWliX2FycF9pcF9h ZGRyX3RhYmxlIHsKLQl1OCAgICAgY29uZGl0aW9uX2lkeDsKLQl1OCAgICAgYXJwX2VuYWJsZTsK LQl1OCAgICAgcmVzZXJ2ZWRbMl07Ci0JdTggICAgIGlwdjRfYWRkcmVzc1tISUZfQVBJX0lQVjRf QUREUkVTU19TSVpFXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfbWliX3J4X2ZpbHRlciB7 Ci0JdTggICAgIHJlc2VydmVkMToxOwotCXU4ICAgICBic3NpZF9maWx0ZXI6MTsKLQl1OCAgICAg cmVzZXJ2ZWQyOjE7Ci0JdTggICAgIGZ3ZF9wcm9iZV9yZXE6MTsKLQl1OCAgICAga2VlcF9hbGl2 ZV9maWx0ZXI6MTsKLQl1OCAgICAgcmVzZXJ2ZWQzOjM7Ci0JdTggICAgIHJlc2VydmVkNFszXTsK LX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfaWVfdGFibGVfZW50cnkgewotCXU4ICAgICBpZV9p ZDsKLQl1OCAgICAgaGFzX2NoYW5nZWQ6MTsKLQl1OCAgICAgbm9fbG9uZ2VyOjE7Ci0JdTggICAg IGhhc19hcHBlYXJlZDoxOwotCXU4ICAgICByZXNlcnZlZDoxOwotCXU4ICAgICBudW1fbWF0Y2hf ZGF0YTo0OwotCXU4ICAgICBvdWlbM107Ci0JdTggICAgIG1hdGNoX2RhdGFbM107Ci19IF9fcGFj a2VkOwotCi1zdHJ1Y3QgaGlmX21pYl9iY25fZmlsdGVyX3RhYmxlIHsKLQlfX2xlMzIgbnVtX29m X2luZm9fZWxtdHM7Ci0Jc3RydWN0IGhpZl9pZV90YWJsZV9lbnRyeSBpZV90YWJsZVtdOwotfSBf X3BhY2tlZDsKLQotZW51bSBoaWZfYmVhY29uX2ZpbHRlciB7Ci0JSElGX0JFQUNPTl9GSUxURVJf RElTQUJMRSAgPSAweDAsCi0JSElGX0JFQUNPTl9GSUxURVJfRU5BQkxFICAgPSAweDEsCi0JSElG X0JFQUNPTl9GSUxURVJfQVVUT19FUlAgPSAweDIKLX07Ci0KLXN0cnVjdCBoaWZfbWliX2Jjbl9m aWx0ZXJfZW5hYmxlIHsKLQlfX2xlMzIgZW5hYmxlOwotCV9fbGUzMiBiY25fY291bnQ7Ci19IF9f cGFja2VkOwotCi1zdHJ1Y3QgaGlmX21pYl9leHRlbmRlZF9jb3VudF90YWJsZSB7Ci0JX19sZTMy IGNvdW50X3BsY3BfZXJyb3JzOwotCV9fbGUzMiBjb3VudF9mY3NfZXJyb3JzOwotCV9fbGUzMiBj b3VudF90eF9wYWNrZXRzOwotCV9fbGUzMiBjb3VudF9yeF9wYWNrZXRzOwotCV9fbGUzMiBjb3Vu dF9yeF9wYWNrZXRfZXJyb3JzOwotCV9fbGUzMiBjb3VudF9yeF9kZWNyeXB0aW9uX2ZhaWx1cmVz OwotCV9fbGUzMiBjb3VudF9yeF9taWNfZmFpbHVyZXM7Ci0JX19sZTMyIGNvdW50X3J4X25vX2tl eV9mYWlsdXJlczsKLQlfX2xlMzIgY291bnRfdHhfbXVsdGljYXN0X2ZyYW1lczsKLQlfX2xlMzIg Y291bnRfdHhfZnJhbWVzX3N1Y2Nlc3M7Ci0JX19sZTMyIGNvdW50X3R4X2ZyYW1lX2ZhaWx1cmVz OwotCV9fbGUzMiBjb3VudF90eF9mcmFtZXNfcmV0cmllZDsKLQlfX2xlMzIgY291bnRfdHhfZnJh bWVzX211bHRpX3JldHJpZWQ7Ci0JX19sZTMyIGNvdW50X3J4X2ZyYW1lX2R1cGxpY2F0ZXM7Ci0J X19sZTMyIGNvdW50X3J0c19zdWNjZXNzOwotCV9fbGUzMiBjb3VudF9ydHNfZmFpbHVyZXM7Ci0J X19sZTMyIGNvdW50X2Fja19mYWlsdXJlczsKLQlfX2xlMzIgY291bnRfcnhfbXVsdGljYXN0X2Zy YW1lczsKLQlfX2xlMzIgY291bnRfcnhfZnJhbWVzX3N1Y2Nlc3M7Ci0JX19sZTMyIGNvdW50X3J4 X2NtYWNpY3ZfZXJyb3JzOwotCV9fbGUzMiBjb3VudF9yeF9jbWFjX3JlcGxheXM7Ci0JX19sZTMy IGNvdW50X3J4X21nbXRfY2NtcF9yZXBsYXlzOwotCV9fbGUzMiBjb3VudF9yeF9iaXBtaWNfZXJy b3JzOwotCV9fbGUzMiBjb3VudF9yeF9iZWFjb247Ci0JX19sZTMyIGNvdW50X21pc3NfYmVhY29u OwotCV9fbGUzMiByZXNlcnZlZFsxNV07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX21pYl9j b3VudF90YWJsZSB7Ci0JX19sZTMyIGNvdW50X3BsY3BfZXJyb3JzOwotCV9fbGUzMiBjb3VudF9m Y3NfZXJyb3JzOwotCV9fbGUzMiBjb3VudF90eF9wYWNrZXRzOwotCV9fbGUzMiBjb3VudF9yeF9w YWNrZXRzOwotCV9fbGUzMiBjb3VudF9yeF9wYWNrZXRfZXJyb3JzOwotCV9fbGUzMiBjb3VudF9y eF9kZWNyeXB0aW9uX2ZhaWx1cmVzOwotCV9fbGUzMiBjb3VudF9yeF9taWNfZmFpbHVyZXM7Ci0J X19sZTMyIGNvdW50X3J4X25vX2tleV9mYWlsdXJlczsKLQlfX2xlMzIgY291bnRfdHhfbXVsdGlj YXN0X2ZyYW1lczsKLQlfX2xlMzIgY291bnRfdHhfZnJhbWVzX3N1Y2Nlc3M7Ci0JX19sZTMyIGNv dW50X3R4X2ZyYW1lX2ZhaWx1cmVzOwotCV9fbGUzMiBjb3VudF90eF9mcmFtZXNfcmV0cmllZDsK LQlfX2xlMzIgY291bnRfdHhfZnJhbWVzX211bHRpX3JldHJpZWQ7Ci0JX19sZTMyIGNvdW50X3J4 X2ZyYW1lX2R1cGxpY2F0ZXM7Ci0JX19sZTMyIGNvdW50X3J0c19zdWNjZXNzOwotCV9fbGUzMiBj b3VudF9ydHNfZmFpbHVyZXM7Ci0JX19sZTMyIGNvdW50X2Fja19mYWlsdXJlczsKLQlfX2xlMzIg Y291bnRfcnhfbXVsdGljYXN0X2ZyYW1lczsKLQlfX2xlMzIgY291bnRfcnhfZnJhbWVzX3N1Y2Nl c3M7Ci0JX19sZTMyIGNvdW50X3J4X2NtYWNpY3ZfZXJyb3JzOwotCV9fbGUzMiBjb3VudF9yeF9j bWFjX3JlcGxheXM7Ci0JX19sZTMyIGNvdW50X3J4X21nbXRfY2NtcF9yZXBsYXlzOwotCV9fbGUz MiBjb3VudF9yeF9iaXBtaWNfZXJyb3JzOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9taWJf bWFjX2FkZHJlc3MgewotCXU4ICAgICBtYWNfYWRkcltFVEhfQUxFTl07Ci0JX19sZTE2IHJlc2Vy dmVkOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9taWJfd2VwX2RlZmF1bHRfa2V5X2lkIHsK LQl1OCAgICAgd2VwX2RlZmF1bHRfa2V5X2lkOwotCXU4ICAgICByZXNlcnZlZFszXTsKLX0gX19w YWNrZWQ7Ci0KLXN0cnVjdCBoaWZfbWliX2RvdDExX3J0c190aHJlc2hvbGQgewotCV9fbGUzMiB0 aHJlc2hvbGQ7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX21pYl9zbG90X3RpbWUgewotCV9f bGUzMiBzbG90X3RpbWU7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX21pYl9jdXJyZW50X3R4 X3Bvd2VyX2xldmVsIHsKLQlfX2xlMzIgcG93ZXJfbGV2ZWw7IC8vIHNpZ25lZCB2YWx1ZQotfSBf X3BhY2tlZDsKLQotc3RydWN0IGhpZl9taWJfbm9uX2VycF9wcm90ZWN0aW9uIHsKLQl1OCAgICAg dXNlX2N0c190b19zZWxmOjE7Ci0JdTggICAgIHJlc2VydmVkMTo3OwotCXU4ICAgICByZXNlcnZl ZDJbM107Ci19IF9fcGFja2VkOwotCi1lbnVtIGhpZl90bXBsdCB7Ci0JSElGX1RNUExUX1BSQlJF USA9IDB4MCwKLQlISUZfVE1QTFRfQkNOICAgID0gMHgxLAotCUhJRl9UTVBMVF9OVUxMICAgPSAw eDIsCi0JSElGX1RNUExUX1FPU05VTCA9IDB4MywKLQlISUZfVE1QTFRfUFNQT0xMID0gMHg0LAot CUhJRl9UTVBMVF9QUkJSRVMgPSAweDUsCi0JSElGX1RNUExUX0FSUCAgICA9IDB4NiwKLQlISUZf VE1QTFRfTkEgICAgID0gMHg3Ci19OwotCi0jZGVmaW5lIEhJRl9BUElfTUFYX1RFTVBMQVRFX0ZS QU1FX1NJWkUgNzAwCi0KLXN0cnVjdCBoaWZfbWliX3RlbXBsYXRlX2ZyYW1lIHsKLQl1OCAgICAg ZnJhbWVfdHlwZTsKLQl1OCAgICAgaW5pdF9yYXRlOjc7Ci0JdTggICAgIG1vZGU6MTsKLQlfX2xl MTYgZnJhbWVfbGVuZ3RoOwotCXU4ICAgICBmcmFtZVtdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0 IGhpZl9taWJfYmVhY29uX3dha2VfdXBfcGVyaW9kIHsKLQl1OCAgICAgd2FrZXVwX3BlcmlvZF9t aW47Ci0JdTggICAgIHJlY2VpdmVfZHRpbToxOwotCXU4ICAgICByZXNlcnZlZDE6NzsKLQl1OCAg ICAgd2FrZXVwX3BlcmlvZF9tYXg7Ci0JdTggICAgIHJlc2VydmVkMjsKLX0gX19wYWNrZWQ7Ci0K LXN0cnVjdCBoaWZfbWliX3JjcGlfcnNzaV90aHJlc2hvbGQgewotCXU4ICAgICBkZXRlY3Rpb246 MTsKLQl1OCAgICAgcmNwaV9yc3NpOjE7Ci0JdTggICAgIHVwcGVydGhyZXNoOjE7Ci0JdTggICAg IGxvd2VydGhyZXNoOjE7Ci0JdTggICAgIHJlc2VydmVkOjQ7Ci0JdTggICAgIGxvd2VyX3RocmVz aG9sZDsKLQl1OCAgICAgdXBwZXJfdGhyZXNob2xkOwotCXU4ICAgICByb2xsaW5nX2F2ZXJhZ2Vf Y291bnQ7Ci19IF9fcGFja2VkOwotCi0jZGVmaW5lIERFRkFVTFRfQkFfTUFYX1JYX0JVRkZFUl9T SVpFIDE2Ci0KLXN0cnVjdCBoaWZfbWliX2Jsb2NrX2Fja19wb2xpY3kgewotCXU4ICAgICBibG9j a19hY2tfdHhfdGlkX3BvbGljeTsKLQl1OCAgICAgcmVzZXJ2ZWQxOwotCXU4ICAgICBibG9ja19h Y2tfcnhfdGlkX3BvbGljeTsKLQl1OCAgICAgYmxvY2tfYWNrX3J4X21heF9idWZmZXJfc2l6ZTsK LX0gX19wYWNrZWQ7Ci0KLWVudW0gaGlmX21wZHVfc3RhcnRfc3BhY2luZyB7Ci0JSElGX01QRFVf U1RBUlRfU1BBQ0lOR19OT19SRVNUUklDID0gMHgwLAotCUhJRl9NUERVX1NUQVJUX1NQQUNJTkdf UVVBUlRFUiAgICA9IDB4MSwKLQlISUZfTVBEVV9TVEFSVF9TUEFDSU5HX0hBTEYgICAgICAgPSAw eDIsCi0JSElGX01QRFVfU1RBUlRfU1BBQ0lOR19PTkUgICAgICAgID0gMHgzLAotCUhJRl9NUERV X1NUQVJUX1NQQUNJTkdfVFdPICAgICAgICA9IDB4NCwKLQlISUZfTVBEVV9TVEFSVF9TUEFDSU5H X0ZPVVIgICAgICAgPSAweDUsCi0JSElGX01QRFVfU1RBUlRfU1BBQ0lOR19FSUdIVCAgICAgID0g MHg2LAotCUhJRl9NUERVX1NUQVJUX1NQQUNJTkdfU0lYVEVFTiAgICA9IDB4NwotfTsKLQotc3Ry dWN0IGhpZl9taWJfc2V0X2Fzc29jaWF0aW9uX21vZGUgewotCXU4ICAgICBwcmVhbWJ0eXBlX3Vz ZToxOwotCXU4ICAgICBtb2RlOjE7Ci0JdTggICAgIHJhdGVzZXQ6MTsKLQl1OCAgICAgc3BhY2lu ZzoxOwotCXU4ICAgICByZXNlcnZlZDE6NDsKLQl1OCAgICAgc2hvcnRfcHJlYW1ibGU6MTsKLQl1 OCAgICAgcmVzZXJ2ZWQyOjc7Ci0JdTggICAgIGdyZWVuZmllbGQ6MTsKLQl1OCAgICAgcmVzZXJ2 ZWQzOjc7Ci0JdTggICAgIG1wZHVfc3RhcnRfc3BhY2luZzsKLQlfX2xlMzIgYmFzaWNfcmF0ZV9z ZXQ7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX21pYl9zZXRfdWFwc2RfaW5mb3JtYXRpb24g ewotCXU4ICAgICB0cmlnX2Jja2dybmQ6MTsKLQl1OCAgICAgdHJpZ19iZToxOwotCXU4ICAgICB0 cmlnX3ZpZGVvOjE7Ci0JdTggICAgIHRyaWdfdm9pY2U6MTsKLQl1OCAgICAgcmVzZXJ2ZWQxOjQ7 Ci0JdTggICAgIGRlbGl2X2Jja2dybmQ6MTsKLQl1OCAgICAgZGVsaXZfYmU6MTsKLQl1OCAgICAg ZGVsaXZfdmlkZW86MTsKLQl1OCAgICAgZGVsaXZfdm9pY2U6MTsKLQl1OCAgICAgcmVzZXJ2ZWQy OjQ7Ci0JX19sZTE2IG1pbl9hdXRvX3RyaWdnZXJfaW50ZXJ2YWw7Ci0JX19sZTE2IG1heF9hdXRv X3RyaWdnZXJfaW50ZXJ2YWw7Ci0JX19sZTE2IGF1dG9fdHJpZ2dlcl9zdGVwOwotfSBfX3BhY2tl ZDsKLQotc3RydWN0IGhpZl90eF9yYXRlX3JldHJ5X3BvbGljeSB7Ci0JdTggICAgIHBvbGljeV9p bmRleDsKLQl1OCAgICAgc2hvcnRfcmV0cnlfY291bnQ7Ci0JdTggICAgIGxvbmdfcmV0cnlfY291 bnQ7Ci0JdTggICAgIGZpcnN0X3JhdGVfc2VsOjI7Ci0JdTggICAgIHRlcm1pbmF0ZToxOwotCXU4 ICAgICBjb3VudF9pbml0OjE7Ci0JdTggICAgIHJlc2VydmVkMTo0OwotCXU4ICAgICByYXRlX3Jl Y292ZXJ5X2NvdW50OwotCXU4ICAgICByZXNlcnZlZDJbM107Ci0JdTggICAgIHJhdGVzWzEyXTsK LX0gX19wYWNrZWQ7Ci0KLSNkZWZpbmUgSElGX1RYX1JFVFJZX1BPTElDWV9NQVggICAgIDE1Ci0j ZGVmaW5lIEhJRl9UWF9SRVRSWV9QT0xJQ1lfSU5WQUxJRCBISUZfVFhfUkVUUllfUE9MSUNZX01B WAotCi1zdHJ1Y3QgaGlmX21pYl9zZXRfdHhfcmF0ZV9yZXRyeV9wb2xpY3kgewotCXU4ICAgICBu dW1fdHhfcmF0ZV9wb2xpY2llczsKLQl1OCAgICAgcmVzZXJ2ZWRbM107Ci0Jc3RydWN0IGhpZl90 eF9yYXRlX3JldHJ5X3BvbGljeSB0eF9yYXRlX3JldHJ5X3BvbGljeVtdOwotfSBfX3BhY2tlZDsK LQotc3RydWN0IGhpZl9taWJfcHJvdGVjdGVkX21nbXRfcG9saWN5IHsKLQl1OCAgICAgcG1mX2Vu YWJsZToxOwotCXU4ICAgICB1bnBtZl9hbGxvd2VkOjE7Ci0JdTggICAgIGhvc3RfZW5jX2F1dGhf ZnJhbWVzOjE7Ci0JdTggICAgIHJlc2VydmVkMTo1OwotCXU4ICAgICByZXNlcnZlZDJbM107Ci19 IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX21pYl9rZWVwX2FsaXZlX3BlcmlvZCB7Ci0JX19sZTE2 IGtlZXBfYWxpdmVfcGVyaW9kOwotCXU4ICAgICByZXNlcnZlZFsyXTsKLX0gX19wYWNrZWQ7Ci0K LSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfcnguYyBiL2RyaXZl cnMvc3RhZ2luZy93ZngvaGlmX3J4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlm Y2E3ZjI2MzcyYS4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3J4 LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MTUgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAtb25seQotLyoKLSAqIEltcGxlbWVudGF0aW9uIG9mIGNoaXAtdG8taG9z dCBldmVudCAoYWthIGluZGljYXRpb25zKSBvZiBXRnh4eCBTcGxpdCBNYWMKLSAqIChXU00pIEFQ SS4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMs IEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KLSAqLwotI2luY2x1ZGUg PGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0KLSNpbmNs dWRlICJoaWZfcnguaCIKLSNpbmNsdWRlICJ3ZnguaCIKLSNpbmNsdWRlICJzY2FuLmgiCi0jaW5j bHVkZSAiYmguaCIKLSNpbmNsdWRlICJzdGEuaCIKLSNpbmNsdWRlICJkYXRhX3J4LmgiCi0jaW5j bHVkZSAiaGlmX2FwaV9jbWQuaCIKLQotc3RhdGljIGludCBoaWZfZ2VuZXJpY19jb25maXJtKHN0 cnVjdCB3ZnhfZGV2ICp3ZGV2LAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBoaWZfbXNnICpoaWYs IGNvbnN0IHZvaWQgKmJ1ZikKLXsKLQkvLyBBbGwgY29uZmlybSBtZXNzYWdlcyBzdGFydCB3aXRo IHN0YXR1cwotCWludCBzdGF0dXMgPSBsZTMyX3RvX2NwdXAoKF9fbGUzMiAqKWJ1Zik7Ci0JaW50 IGNtZCA9IGhpZi0+aWQ7Ci0JaW50IGxlbiA9IGxlMTZfdG9fY3B1KGhpZi0+bGVuKSAtIDQ7IC8v IGRyb3AgaGVhZGVyCi0KLQlXQVJOKCFtdXRleF9pc19sb2NrZWQoJndkZXYtPmhpZl9jbWQubG9j ayksICJkYXRhIGxvY2tpbmcgZXJyb3IiKTsKLQotCWlmICghd2Rldi0+aGlmX2NtZC5idWZfc2Vu ZCkgewotCQlkZXZfd2Fybih3ZGV2LT5kZXYsICJ1bmV4cGVjdGVkIGNvbmZpcm1hdGlvbjogMHgl LjJ4XG4iLCBjbWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoY21kICE9IHdkZXYt PmhpZl9jbWQuYnVmX3NlbmQtPmlkKSB7Ci0JCWRldl93YXJuKHdkZXYtPmRldiwKLQkJCSAiY2hp cCByZXNwb25zZSBtaXNtYXRjaCByZXF1ZXN0OiAweCUuMnggdnMgMHglLjJ4XG4iLAotCQkJIGNt ZCwgd2Rldi0+aGlmX2NtZC5idWZfc2VuZC0+aWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0K LQlpZiAod2Rldi0+aGlmX2NtZC5idWZfcmVjdikgewotCQlpZiAod2Rldi0+aGlmX2NtZC5sZW5f cmVjdiA+PSBsZW4gJiYgbGVuID4gMCkKLQkJCW1lbWNweSh3ZGV2LT5oaWZfY21kLmJ1Zl9yZWN2 LCBidWYsIGxlbik7Ci0JCWVsc2UKLQkJCXN0YXR1cyA9IC1FSU87Ci0JfQotCXdkZXYtPmhpZl9j bWQucmV0ID0gc3RhdHVzOwotCi0JY29tcGxldGUoJndkZXYtPmhpZl9jbWQuZG9uZSk7Ci0JcmV0 dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIGludCBoaWZfdHhfY29uZmlybShzdHJ1Y3Qgd2Z4X2Rl diAqd2RldiwKLQkJCSAgY29uc3Qgc3RydWN0IGhpZl9tc2cgKmhpZiwgY29uc3Qgdm9pZCAqYnVm KQotewotCWNvbnN0IHN0cnVjdCBoaWZfY25mX3R4ICpib2R5ID0gYnVmOwotCi0Jd2Z4X3R4X2Nv bmZpcm1fY2Iod2RldiwgYm9keSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaGlmX211 bHRpX3R4X2NvbmZpcm0oc3RydWN0IHdmeF9kZXYgKndkZXYsCi0JCQkJY29uc3Qgc3RydWN0IGhp Zl9tc2cgKmhpZiwgY29uc3Qgdm9pZCAqYnVmKQotewotCWNvbnN0IHN0cnVjdCBoaWZfY25mX211 bHRpX3RyYW5zbWl0ICpib2R5ID0gYnVmOwotCWludCBpOwotCi0JV0FSTihib2R5LT5udW1fdHhf Y29uZnMgPD0gMCwgImNvcnJ1cHRlZCBtZXNzYWdlIik7Ci0JZm9yIChpID0gMDsgaSA8IGJvZHkt Pm51bV90eF9jb25mczsgaSsrKQotCQl3ZnhfdHhfY29uZmlybV9jYih3ZGV2LCAmYm9keS0+dHhf Y29uZl9wYXlsb2FkW2ldKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBoaWZfc3RhcnR1 cF9pbmRpY2F0aW9uKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LAotCQkJCSAgY29uc3Qgc3RydWN0IGhp Zl9tc2cgKmhpZiwgY29uc3Qgdm9pZCAqYnVmKQotewotCWNvbnN0IHN0cnVjdCBoaWZfaW5kX3N0 YXJ0dXAgKmJvZHkgPSBidWY7Ci0KLQlpZiAoYm9keS0+c3RhdHVzIHx8IGJvZHktPmZpcm13YXJl X3R5cGUgPiA0KSB7Ci0JCWRldl9lcnIod2Rldi0+ZGV2LCAicmVjZWl2ZWQgaW52YWxpZCBzdGFy dHVwIGluZGljYXRpb24iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCW1lbWNweSgmd2Rldi0+ aHdfY2FwcywgYm9keSwgc2l6ZW9mKHN0cnVjdCBoaWZfaW5kX3N0YXJ0dXApKTsKLQlsZTE2X3Rv X2NwdXMoKF9fbGUxNiAqKSZ3ZGV2LT5od19jYXBzLmhhcmR3YXJlX2lkKTsKLQlsZTE2X3RvX2Nw dXMoKF9fbGUxNiAqKSZ3ZGV2LT5od19jYXBzLm51bV9pbnBfY2hfYnVmcyk7Ci0JbGUxNl90b19j cHVzKChfX2xlMTYgKikmd2Rldi0+aHdfY2Fwcy5zaXplX2lucF9jaF9idWYpOwotCWxlMzJfdG9f Y3B1cygoX19sZTMyICopJndkZXYtPmh3X2NhcHMuc3VwcG9ydGVkX3JhdGVfbWFzayk7Ci0KLQlj b21wbGV0ZSgmd2Rldi0+ZmlybXdhcmVfcmVhZHkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMg aW50IGhpZl93YWtldXBfaW5kaWNhdGlvbihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwKLQkJCQkgY29u c3Qgc3RydWN0IGhpZl9tc2cgKmhpZiwgY29uc3Qgdm9pZCAqYnVmKQotewotCWlmICghd2Rldi0+ cGRhdGEuZ3Bpb193YWtldXAgfHwKLQkgICAgZ3Bpb2RfZ2V0X3ZhbHVlKHdkZXYtPnBkYXRhLmdw aW9fd2FrZXVwKSA9PSAwKSB7Ci0JCWRldl93YXJuKHdkZXYtPmRldiwgInVuZXhwZWN0ZWQgd2Fr ZS11cCBpbmRpY2F0aW9uXG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXJldHVybiAwOwotfQot Ci1zdGF0aWMgaW50IGhpZl9yZWNlaXZlX2luZGljYXRpb24oc3RydWN0IHdmeF9kZXYgKndkZXYs Ci0JCQkJICBjb25zdCBzdHJ1Y3QgaGlmX21zZyAqaGlmLAotCQkJCSAgY29uc3Qgdm9pZCAqYnVm LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gd2Rldl90 b193dmlmKHdkZXYsIGhpZi0+aW50ZXJmYWNlKTsKLQljb25zdCBzdHJ1Y3QgaGlmX2luZF9yeCAq Ym9keSA9IGJ1ZjsKLQotCWlmICghd3ZpZikgewotCQlkZXZfd2Fybih3ZGV2LT5kZXYsICIlczog aWdub3JlIHJ4IGRhdGEgZm9yIG5vbi1leGlzdGVudCB2aWYgJWRcbiIsCi0JCQkgX19mdW5jX18s IGhpZi0+aW50ZXJmYWNlKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXNrYl9wdWxsKHNrYiwgc2l6 ZW9mKHN0cnVjdCBoaWZfbXNnKSArIHNpemVvZihzdHJ1Y3QgaGlmX2luZF9yeCkpOwotCXdmeF9y eF9jYih3dmlmLCBib2R5LCBza2IpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaGlm X2V2ZW50X2luZGljYXRpb24oc3RydWN0IHdmeF9kZXYgKndkZXYsCi0JCQkJY29uc3Qgc3RydWN0 IGhpZl9tc2cgKmhpZiwgY29uc3Qgdm9pZCAqYnVmKQotewotCXN0cnVjdCB3ZnhfdmlmICp3dmlm ID0gd2Rldl90b193dmlmKHdkZXYsIGhpZi0+aW50ZXJmYWNlKTsKLQljb25zdCBzdHJ1Y3QgaGlm X2luZF9ldmVudCAqYm9keSA9IGJ1ZjsKLQlpbnQgdHlwZSA9IGxlMzJfdG9fY3B1KGJvZHktPmV2 ZW50X2lkKTsKLQotCWlmICghd3ZpZikgewotCQlkZXZfd2Fybih3ZGV2LT5kZXYsICIlczogcmVj ZWl2ZWQgZXZlbnQgZm9yIG5vbi1leGlzdGVudCB2aWZcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJu IC1FSU87Ci0JfQotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBISUZfRVZFTlRfSU5EX1JDUElf UlNTSToKLQkJd2Z4X2V2ZW50X3JlcG9ydF9yc3NpKHd2aWYsIGJvZHktPmV2ZW50X2RhdGEucmNw aV9yc3NpKTsKLQkJYnJlYWs7Ci0JY2FzZSBISUZfRVZFTlRfSU5EX0JTU0xPU1Q6Ci0JCXNjaGVk dWxlX2RlbGF5ZWRfd29yaygmd3ZpZi0+YmVhY29uX2xvc3Nfd29yaywgMCk7Ci0JCWJyZWFrOwot CWNhc2UgSElGX0VWRU5UX0lORF9CU1NSRUdBSU5FRDoKLQkJY2FuY2VsX2RlbGF5ZWRfd29yaygm d3ZpZi0+YmVhY29uX2xvc3Nfd29yayk7Ci0JCWRldl9kYmcod2Rldi0+ZGV2LCAiaWdub3JlIEJT U1JFR0FJTkVEIGluZGljYXRpb25cbiIpOwotCQlicmVhazsKLQljYXNlIEhJRl9FVkVOVF9JTkRf UFNfTU9ERV9FUlJPUjoKLQkJZGV2X3dhcm4od2Rldi0+ZGV2LCAiZXJyb3Igd2hpbGUgcHJvY2Vz c2luZyBwb3dlciBzYXZlIHJlcXVlc3Q6ICVkXG4iLAotCQkJIGxlMzJfdG9fY3B1KGJvZHktPmV2 ZW50X2RhdGEucHNfbW9kZV9lcnJvcikpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlkZXZfd2Fy bih3ZGV2LT5kZXYsICJ1bmhhbmRsZWQgZXZlbnQgaW5kaWNhdGlvbjogJS4yeFxuIiwKLQkJCSB0 eXBlKTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGhpZl9wbV9t b2RlX2NvbXBsZXRlX2luZGljYXRpb24oc3RydWN0IHdmeF9kZXYgKndkZXYsCi0JCQkJCSAgIGNv bnN0IHN0cnVjdCBoaWZfbXNnICpoaWYsCi0JCQkJCSAgIGNvbnN0IHZvaWQgKmJ1ZikKLXsKLQlz dHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2LCBoaWYtPmludGVyZmFjZSk7 Ci0KLQlpZiAoIXd2aWYpIHsKLQkJZGV2X3dhcm4od2Rldi0+ZGV2LCAiJXM6IHJlY2VpdmVkIGV2 ZW50IGZvciBub24tZXhpc3RlbnQgdmlmXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRUlPOwot CX0KLQljb21wbGV0ZSgmd3ZpZi0+c2V0X3BtX21vZGVfY29tcGxldGUpOwotCi0JcmV0dXJuIDA7 Ci19Ci0KLXN0YXRpYyBpbnQgaGlmX3NjYW5fY29tcGxldGVfaW5kaWNhdGlvbihzdHJ1Y3Qgd2Z4 X2RldiAqd2RldiwKLQkJCQkJY29uc3Qgc3RydWN0IGhpZl9tc2cgKmhpZiwKLQkJCQkJY29uc3Qg dm9pZCAqYnVmKQotewotCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gd2Rldl90b193dmlmKHdkZXYs IGhpZi0+aW50ZXJmYWNlKTsKLQotCWlmICghd3ZpZikgewotCQlkZXZfd2Fybih3ZGV2LT5kZXYs ICIlczogcmVjZWl2ZWQgZXZlbnQgZm9yIG5vbi1leGlzdGVudCB2aWZcbiIsIF9fZnVuY19fKTsK LQkJcmV0dXJuIC1FSU87Ci0JfQotCi0Jd2Z4X3NjYW5fY29tcGxldGUod3ZpZik7Ci0KLQlyZXR1 cm4gMDsKLX0KLQotc3RhdGljIGludCBoaWZfam9pbl9jb21wbGV0ZV9pbmRpY2F0aW9uKHN0cnVj dCB3ZnhfZGV2ICp3ZGV2LAotCQkJCQljb25zdCBzdHJ1Y3QgaGlmX21zZyAqaGlmLAotCQkJCQlj b25zdCB2b2lkICpidWYpCi17Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWYgPSB3ZGV2X3RvX3d2aWYo d2RldiwgaGlmLT5pbnRlcmZhY2UpOwotCi0JaWYgKCF3dmlmKSB7Ci0JCWRldl93YXJuKHdkZXYt PmRldiwgIiVzOiByZWNlaXZlZCBldmVudCBmb3Igbm9uLWV4aXN0ZW50IHZpZlxuIiwgX19mdW5j X18pOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JZGV2X3dhcm4od2Rldi0+ZGV2LCAidW5hdHRlbmRl ZCBKb2luQ29tcGxldGVJbmRcbiIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaGlm X3N1c3BlbmRfcmVzdW1lX2luZGljYXRpb24oc3RydWN0IHdmeF9kZXYgKndkZXYsCi0JCQkJCSBj b25zdCBzdHJ1Y3QgaGlmX21zZyAqaGlmLAotCQkJCQkgY29uc3Qgdm9pZCAqYnVmKQotewotCWNv bnN0IHN0cnVjdCBoaWZfaW5kX3N1c3BlbmRfcmVzdW1lX3R4ICpib2R5ID0gYnVmOwotCXN0cnVj dCB3ZnhfdmlmICp3dmlmOwotCi0JaWYgKGJvZHktPmJjX21jX29ubHkpIHsKLQkJd3ZpZiA9IHdk ZXZfdG9fd3ZpZih3ZGV2LCBoaWYtPmludGVyZmFjZSk7Ci0JCWlmICghd3ZpZikgewotCQkJZGV2 X3dhcm4od2Rldi0+ZGV2LCAiJXM6IHJlY2VpdmVkIGV2ZW50IGZvciBub24tZXhpc3RlbnQgdmlm XG4iLCBfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCQlpZiAoYm9keS0+cmVzdW1l KQotCQkJd2Z4X3N1c3BlbmRfcmVzdW1lX21jKHd2aWYsIFNUQV9OT1RJRllfQVdBS0UpOwotCQll bHNlCi0JCQl3Znhfc3VzcGVuZF9yZXN1bWVfbWMod3ZpZiwgU1RBX05PVElGWV9TTEVFUCk7Ci0J fSBlbHNlIHsKLQkJV0FSTihib2R5LT5wZWVyX3N0YV9zZXQsICJtaXN1bmRlcnN0b29kIGluZGlj YXRpb24iKTsKLQkJV0FSTihoaWYtPmludGVyZmFjZSAhPSAyLCAibWlzdW5kZXJzdG9vZCBpbmRp Y2F0aW9uIik7Ci0JCWlmIChib2R5LT5yZXN1bWUpCi0JCQl3Znhfc3VzcGVuZF9ob3RfZGV2KHdk ZXYsIFNUQV9OT1RJRllfQVdBS0UpOwotCQllbHNlCi0JCQl3Znhfc3VzcGVuZF9ob3RfZGV2KHdk ZXYsIFNUQV9OT1RJRllfU0xFRVApOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50 IGhpZl9nZW5lcmljX2luZGljYXRpb24oc3RydWN0IHdmeF9kZXYgKndkZXYsCi0JCQkJICBjb25z dCBzdHJ1Y3QgaGlmX21zZyAqaGlmLCBjb25zdCB2b2lkICpidWYpCi17Ci0JY29uc3Qgc3RydWN0 IGhpZl9pbmRfZ2VuZXJpYyAqYm9keSA9IGJ1ZjsKLQlpbnQgdHlwZSA9IGxlMzJfdG9fY3B1KGJv ZHktPnR5cGUpOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBISUZfR0VORVJJQ19JTkRJQ0FU SU9OX1RZUEVfUkFXOgotCQlyZXR1cm4gMDsKLQljYXNlIEhJRl9HRU5FUklDX0lORElDQVRJT05f VFlQRV9TVFJJTkc6Ci0JCWRldl9pbmZvKHdkZXYtPmRldiwgImZpcm13YXJlIHNheXM6ICVzXG4i LCAoY2hhciAqKSZib2R5LT5kYXRhKTsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBISUZfR0VORVJJQ19J TkRJQ0FUSU9OX1RZUEVfUlhfU1RBVFM6Ci0JCW11dGV4X2xvY2soJndkZXYtPnJ4X3N0YXRzX2xv Y2spOwotCQkvLyBPbGRlciBmaXJtd2FyZSBzZW5kIGEgZ2VuZXJpYyBpbmRpY2F0aW9uIGJlc2lk ZSBSeFN0YXRzCi0JCWlmICghd2Z4X2FwaV9vbGRlcl90aGFuKHdkZXYsIDEsIDQpKQotCQkJZGV2 X2luZm8od2Rldi0+ZGV2LCAiUnggdGVzdCBvbmdvaW5nLiBUZW1wZXJhdHVyZTogJWQgZGVncmVl cyBDXG4iLAotCQkJCSBib2R5LT5kYXRhLnJ4X3N0YXRzLmN1cnJlbnRfdGVtcCk7Ci0JCW1lbWNw eSgmd2Rldi0+cnhfc3RhdHMsICZib2R5LT5kYXRhLnJ4X3N0YXRzLAotCQkgICAgICAgc2l6ZW9m KHdkZXYtPnJ4X3N0YXRzKSk7Ci0JCW11dGV4X3VubG9jaygmd2Rldi0+cnhfc3RhdHNfbG9jayk7 Ci0JCXJldHVybiAwOwotCWNhc2UgSElGX0dFTkVSSUNfSU5ESUNBVElPTl9UWVBFX1RYX1BPV0VS X0xPT1BfSU5GTzoKLQkJbXV0ZXhfbG9jaygmd2Rldi0+dHhfcG93ZXJfbG9vcF9pbmZvX2xvY2sp OwotCQltZW1jcHkoJndkZXYtPnR4X3Bvd2VyX2xvb3BfaW5mbywKLQkJICAgICAgICZib2R5LT5k YXRhLnR4X3Bvd2VyX2xvb3BfaW5mbywKLQkJICAgICAgIHNpemVvZih3ZGV2LT50eF9wb3dlcl9s b29wX2luZm8pKTsKLQkJbXV0ZXhfdW5sb2NrKCZ3ZGV2LT50eF9wb3dlcl9sb29wX2luZm9fbG9j ayk7Ci0JCXJldHVybiAwOwotCWRlZmF1bHQ6Ci0JCWRldl9lcnIod2Rldi0+ZGV2LCAiZ2VuZXJp Y19pbmRpY2F0aW9uOiB1bmtub3duIGluZGljYXRpb24gdHlwZTogJSMuOHhcbiIsCi0JCQl0eXBl KTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHsKLQlpbnQg dmFsOwotCWNvbnN0IGNoYXIgKnN0cjsKLQlib29sIGhhc19wYXJhbTsKLX0gaGlmX2Vycm9yc1td ID0gewotCXsgSElGX0VSUk9SX0ZJUk1XQVJFX1JPTExCQUNLLAotCQkicm9sbGJhY2sgc3RhdHVz IiB9LAotCXsgSElGX0VSUk9SX0ZJUk1XQVJFX0RFQlVHX0VOQUJMRUQsCi0JCSJkZWJ1ZyBmZWF0 dXJlIGVuYWJsZWQiIH0sCi0JeyBISUZfRVJST1JfUERTX1BBWUxPQUQsCi0JCSJQRFMgdmVyc2lv biBpcyBub3Qgc3VwcG9ydGVkIiB9LAotCXsgSElGX0VSUk9SX1BEU19URVNURkVBVFVSRSwKLQkJ IlBEUyBhc2sgZm9yIGFuIHVua25vd24gdGVzdCBtb2RlIiB9LAotCXsgSElGX0VSUk9SX09PUl9W T0xUQUdFLAotCQkib3V0LW9mLXJhbmdlIHBvd2VyIHN1cHBseSB2b2x0YWdlIiwgdHJ1ZSB9LAot CXsgSElGX0VSUk9SX09PUl9URU1QRVJBVFVSRSwKLQkJIm91dC1vZi1yYW5nZSB0ZW1wZXJhdHVy ZSIsIHRydWUgfSwKLQl7IEhJRl9FUlJPUl9TTEtfUkVRX0RVUklOR19LRVlfRVhDSEFOR0UsCi0J CSJzZWN1cmUgbGluayBkb2VzIG5vdCBleHBlY3QgcmVxdWVzdCBkdXJpbmcga2V5IGV4Y2hhbmdl IiB9LAotCXsgSElGX0VSUk9SX1NMS19TRVNTSU9OX0tFWSwKLQkJInNlY3VyZSBsaW5rIHNlc3Np b24ga2V5IGlzIGludmFsaWQiIH0sCi0JeyBISUZfRVJST1JfU0xLX09WRVJGTE9XLAotCQkic2Vj dXJlIGxpbmsgb3ZlcmZsb3ciIH0sCi0JeyBISUZfRVJST1JfU0xLX1dST05HX0VOQ1JZUFRJT05f U1RBVEUsCi0JCSJzZWN1cmUgbGluayBtZXNzYWdlcyBsaXN0IGRvZXMgbm90IG1hdGNoIG1lc3Nh Z2UgZW5jcnlwdGlvbiIgfSwKLQl7IEhJRl9FUlJPUl9TTEtfVU5DT05GSUdVUkVELAotCQkic2Vj dXJlIGxpbmsgbm90IHlldCBjb25maWd1cmVkIiB9LAotCXsgSElGX0VSUk9SX0hJRl9CVVNfRlJF UVVFTkNZX1RPT19MT1csCi0JCSJidXMgY2xvY2sgaXMgdG9vIHNsb3cgKDwxa0h6KSIgfSwKLQl7 IEhJRl9FUlJPUl9ISUZfUlhfREFUQV9UT09fTEFSR0UsCi0JCSJISUYgbWVzc2FnZSB0b28gbGFy Z2UiIH0sCi0JLy8gRm9sbG93aW5nIGVycm9ycyBvbmx5IGV4aXN0cyBpbiBvbGQgZmlybXdhcmUg dmVyc2lvbnM6Ci0JeyBISUZfRVJST1JfSElGX1RYX1FVRVVFX0ZVTEwsCi0JCSJISUYgbWVzc2Fn ZXMgcXVldWUgaXMgZnVsbCIgfSwKLQl7IEhJRl9FUlJPUl9ISUZfQlVTLAotCQkiSElGIGJ1cyIg fSwKLQl7IEhJRl9FUlJPUl9TTEtfTVVMVElfVFhfVU5TVVBQT1JURUQsCi0JCSJzZWN1cmUgbGlu ayBkb2VzIG5vdCBzdXBwb3J0IG11bHRpLXR4IGNvbmZpcm1hdGlvbnMiIH0sCi0JeyBISUZfRVJS T1JfU0xLX09VVERBVEVEX1NFU1NJT05fS0VZLAotCQkic2VjdXJlIGxpbmsgc2Vzc2lvbiBrZXkg aXMgb3V0ZGF0ZWQiIH0sCi0JeyBISUZfRVJST1JfU0xLX0RFQ1JZUFRJT04sCi0JCSJzZWN1cmUg bGluayBwYXJhbXMgKG5vbmNlIG9yIHRhZykgbWlzbWF0Y2giIH0sCi19OwotCi1zdGF0aWMgaW50 IGhpZl9lcnJvcl9pbmRpY2F0aW9uKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LAotCQkJCWNvbnN0IHN0 cnVjdCBoaWZfbXNnICpoaWYsIGNvbnN0IHZvaWQgKmJ1ZikKLXsKLQljb25zdCBzdHJ1Y3QgaGlm X2luZF9lcnJvciAqYm9keSA9IGJ1ZjsKLQlpbnQgdHlwZSA9IGxlMzJfdG9fY3B1KGJvZHktPnR5 cGUpOwotCWludCBwYXJhbSA9IChzOClib2R5LT5kYXRhWzBdOwotCWludCBpOwotCi0JZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUoaGlmX2Vycm9ycyk7IGkrKykKLQkJaWYgKHR5cGUgPT0gaGlm X2Vycm9yc1tpXS52YWwpCi0JCQlicmVhazsKLQlpZiAoaSA8IEFSUkFZX1NJWkUoaGlmX2Vycm9y cykpCi0JCWlmIChoaWZfZXJyb3JzW2ldLmhhc19wYXJhbSkKLQkJCWRldl9lcnIod2Rldi0+ZGV2 LCAiYXN5bmNocm9ub3VzIGVycm9yOiAlczogJWRcbiIsCi0JCQkJaGlmX2Vycm9yc1tpXS5zdHIs IHBhcmFtKTsKLQkJZWxzZQotCQkJZGV2X2Vycih3ZGV2LT5kZXYsICJhc3luY2hyb25vdXMgZXJy b3I6ICVzXG4iLAotCQkJCWhpZl9lcnJvcnNbaV0uc3RyKTsKLQllbHNlCi0JCWRldl9lcnIod2Rl di0+ZGV2LCAiYXN5bmNocm9ub3VzIGVycm9yOiB1bmtub3duOiAlMDh4XG4iLCB0eXBlKTsKLQlw cmludF9oZXhfZHVtcChLRVJOX0lORk8sICJoaWY6ICIsIERVTVBfUFJFRklYX09GRlNFVCwKLQkJ ICAgICAgIDE2LCAxLCBoaWYsIGxlMTZfdG9fY3B1KGhpZi0+bGVuKSwgZmFsc2UpOwotCXdkZXYt PmNoaXBfZnJvemVuID0gdHJ1ZTsKLQotCXJldHVybiAwOwotfTsKLQotc3RhdGljIGludCBoaWZf ZXhjZXB0aW9uX2luZGljYXRpb24oc3RydWN0IHdmeF9kZXYgKndkZXYsCi0JCQkJICAgIGNvbnN0 IHN0cnVjdCBoaWZfbXNnICpoaWYsIGNvbnN0IHZvaWQgKmJ1ZikKLXsKLQljb25zdCBzdHJ1Y3Qg aGlmX2luZF9leGNlcHRpb24gKmJvZHkgPSBidWY7Ci0JaW50IHR5cGUgPSBsZTMyX3RvX2NwdShi b2R5LT50eXBlKTsKLQotCWlmICh0eXBlID09IDQpCi0JCWRldl9lcnIod2Rldi0+ZGV2LCAiZmly bXdhcmUgYXNzZXJ0ICVkXG4iLAotCQkJbGUzMl90b19jcHVwKChfX2xlMzIgKilib2R5LT5kYXRh KSk7Ci0JZWxzZQotCQlkZXZfZXJyKHdkZXYtPmRldiwgImZpcm13YXJlIGV4Y2VwdGlvblxuIik7 Ci0JcHJpbnRfaGV4X2R1bXAoS0VSTl9JTkZPLCAiaGlmOiAiLCBEVU1QX1BSRUZJWF9PRkZTRVQs Ci0JCSAgICAgICAxNiwgMSwgaGlmLCBsZTE2X3RvX2NwdShoaWYtPmxlbiksIGZhbHNlKTsKLQl3 ZGV2LT5jaGlwX2Zyb3plbiA9IHRydWU7Ci0KLQlyZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBjb25z dCBzdHJ1Y3QgewotCWludCBtc2dfaWQ7Ci0JaW50ICgqaGFuZGxlcikoc3RydWN0IHdmeF9kZXYg KndkZXYsCi0JCSAgICAgICBjb25zdCBzdHJ1Y3QgaGlmX21zZyAqaGlmLCBjb25zdCB2b2lkICpi dWYpOwotfSBoaWZfaGFuZGxlcnNbXSA9IHsKLQkvKiBDb25maXJtYXRpb25zICovCi0JeyBISUZf Q05GX0lEX1RYLCAgICAgICAgICAgICAgICAgICBoaWZfdHhfY29uZmlybSB9LAotCXsgSElGX0NO Rl9JRF9NVUxUSV9UUkFOU01JVCwgICAgICAgaGlmX211bHRpX3R4X2NvbmZpcm0gfSwKLQkvKiBJ bmRpY2F0aW9ucyAqLwotCXsgSElGX0lORF9JRF9TVEFSVFVQLCAgICAgICAgICAgICAgaGlmX3N0 YXJ0dXBfaW5kaWNhdGlvbiB9LAotCXsgSElGX0lORF9JRF9XQUtFVVAsICAgICAgICAgICAgICAg aGlmX3dha2V1cF9pbmRpY2F0aW9uIH0sCi0JeyBISUZfSU5EX0lEX0pPSU5fQ09NUExFVEUsICAg ICAgICBoaWZfam9pbl9jb21wbGV0ZV9pbmRpY2F0aW9uIH0sCi0JeyBISUZfSU5EX0lEX1NFVF9Q TV9NT0RFX0NNUEwsICAgICBoaWZfcG1fbW9kZV9jb21wbGV0ZV9pbmRpY2F0aW9uIH0sCi0JeyBI SUZfSU5EX0lEX1NDQU5fQ01QTCwgICAgICAgICAgICBoaWZfc2Nhbl9jb21wbGV0ZV9pbmRpY2F0 aW9uIH0sCi0JeyBISUZfSU5EX0lEX1NVU1BFTkRfUkVTVU1FX1RYLCAgICBoaWZfc3VzcGVuZF9y ZXN1bWVfaW5kaWNhdGlvbiB9LAotCXsgSElGX0lORF9JRF9FVkVOVCwgICAgICAgICAgICAgICAg aGlmX2V2ZW50X2luZGljYXRpb24gfSwKLQl7IEhJRl9JTkRfSURfR0VORVJJQywgICAgICAgICAg ICAgIGhpZl9nZW5lcmljX2luZGljYXRpb24gfSwKLQl7IEhJRl9JTkRfSURfRVJST1IsICAgICAg ICAgICAgICAgIGhpZl9lcnJvcl9pbmRpY2F0aW9uIH0sCi0JeyBISUZfSU5EX0lEX0VYQ0VQVElP TiwgICAgICAgICAgICBoaWZfZXhjZXB0aW9uX2luZGljYXRpb24gfSwKLQkvLyBGSVhNRTogYWxs b2NhdGUgc2tiX3AgZnJvbSBoaWZfcmVjZWl2ZV9pbmRpY2F0aW9uIGFuZCBtYWtlIGl0IGdlbmVy aWMKLQkvL3sgSElGX0lORF9JRF9SWCwgICAgICAgICAgICAgICAgIGhpZl9yZWNlaXZlX2luZGlj YXRpb24gfSwKLX07Ci0KLXZvaWQgd2Z4X2hhbmRsZV9yeChzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwg c3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlpbnQgaTsKLQljb25zdCBzdHJ1Y3QgaGlmX21zZyAq aGlmID0gKGNvbnN0IHN0cnVjdCBoaWZfbXNnICopc2tiLT5kYXRhOwotCWludCBoaWZfaWQgPSBo aWYtPmlkOwotCi0JaWYgKGhpZl9pZCA9PSBISUZfSU5EX0lEX1JYKSB7Ci0JCS8vIGhpZl9yZWNl aXZlX2luZGljYXRpb24gdGFrZSBjYXJlIG9mIHNrYiBsaWZldGltZQotCQloaWZfcmVjZWl2ZV9p bmRpY2F0aW9uKHdkZXYsIGhpZiwgaGlmLT5ib2R5LCBza2IpOwotCQlyZXR1cm47Ci0JfQotCS8v IE5vdGU6IG11dGV4X2lzX2xvY2sgY2F1c2UgYW4gaW1wbGljaXQgbWVtb3J5IGJhcnJpZXIgdGhh dCBwcm90ZWN0Ci0JLy8gYnVmX3NlbmQKLQlpZiAobXV0ZXhfaXNfbG9ja2VkKCZ3ZGV2LT5oaWZf Y21kLmxvY2spICYmCi0JICAgIHdkZXYtPmhpZl9jbWQuYnVmX3NlbmQgJiYKLQkgICAgd2Rldi0+ aGlmX2NtZC5idWZfc2VuZC0+aWQgPT0gaGlmX2lkKSB7Ci0JCWhpZl9nZW5lcmljX2NvbmZpcm0o d2RldiwgaGlmLCBoaWYtPmJvZHkpOwotCQlnb3RvIGZyZWU7Ci0JfQotCWZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKGhpZl9oYW5kbGVycyk7IGkrKykgewotCQlpZiAoaGlmX2hhbmRsZXJzW2ld Lm1zZ19pZCA9PSBoaWZfaWQpIHsKLQkJCWlmIChoaWZfaGFuZGxlcnNbaV0uaGFuZGxlcikKLQkJ CQloaWZfaGFuZGxlcnNbaV0uaGFuZGxlcih3ZGV2LCBoaWYsIGhpZi0+Ym9keSk7Ci0JCQlnb3Rv IGZyZWU7Ci0JCX0KLQl9Ci0JaWYgKGhpZl9pZCAmIDB4ODApCi0JCWRldl9lcnIod2Rldi0+ZGV2 LCAidW5zdXBwb3J0ZWQgSElGIGluZGljYXRpb246IElEICUwMnhcbiIsCi0JCQloaWZfaWQpOwot CWVsc2UKLQkJZGV2X2Vycih3ZGV2LT5kZXYsICJ1bmV4cGVjdGVkIEhJRiBjb25maXJtYXRpb246 IElEICUwMnhcbiIsCi0JCQloaWZfaWQpOwotZnJlZToKLQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci19 CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl9yeC5oIGIvZHJpdmVycy9zdGFn aW5nL3dmeC9oaWZfcnguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA3YzEwYzhj NmJkLi4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfcnguaAorKysg L2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wLW9ubHkgKi8KLS8qCi0gKiBJbXBsZW1lbnRhdGlvbiBvZiBjaGlwLXRvLWhvc3QgZXZl bnQgKGFrYSBpbmRpY2F0aW9ucykgb2YgV0Z4eHggU3BsaXQgTWFjCi0gKiAoV1NNKSBBUEkuCi0g KgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTksIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMu Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCi0gKiBDb3B5cmlnaHQgKEMpIDIw MTAsIFNULUVyaWNzc29uIFNBCi0gKi8KLSNpZm5kZWYgV0ZYX0hJRl9SWF9ICi0jZGVmaW5lIFdG WF9ISUZfUlhfSAotCi1zdHJ1Y3Qgd2Z4X2RldjsKLXN0cnVjdCBza19idWZmOwotCi12b2lkIHdm eF9oYW5kbGVfcngoc3RydWN0IHdmeF9kZXYgKndkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwot Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4LmMgYi9kcml2 ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2 M2I0MzcyNjFlYjcuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90 eC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTIzICswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8qCi0gKiBJbXBsZW1lbnRhdGlvbiBvZiBob3N0LXRvLWNo aXAgY29tbWFuZHMgKGFrYSByZXF1ZXN0L2NvbmZpcm1hdGlvbikgb2YgV0Z4eHgKLSAqIFNwbGl0 IE1hYyAoV1NNKSBBUEkuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24g TGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCi0g Ki8KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotCi0jaW5jbHVkZSAiaGlmX3R4Lmgi Ci0jaW5jbHVkZSAid2Z4LmgiCi0jaW5jbHVkZSAiYmguaCIKLSNpbmNsdWRlICJod2lvLmgiCi0j aW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJzdGEuaCIKLQotdm9pZCB3ZnhfaW5pdF9oaWZf Y21kKHN0cnVjdCB3ZnhfaGlmX2NtZCAqaGlmX2NtZCkKLXsKLQlpbml0X2NvbXBsZXRpb24oJmhp Zl9jbWQtPnJlYWR5KTsKLQlpbml0X2NvbXBsZXRpb24oJmhpZl9jbWQtPmRvbmUpOwotCW11dGV4 X2luaXQoJmhpZl9jbWQtPmxvY2spOwotfQotCi1zdGF0aWMgdm9pZCB3ZnhfZmlsbF9oZWFkZXIo c3RydWN0IGhpZl9tc2cgKmhpZiwgaW50IGlmX2lkLAotCQkJICAgIHVuc2lnbmVkIGludCBjbWQs IHNpemVfdCBzaXplKQotewotCWlmIChpZl9pZCA9PSAtMSkKLQkJaWZfaWQgPSAyOwotCi0JV0FS TihjbWQgPiAweDNmLCAiaW52YWxpZCBXU00gY29tbWFuZCAlIy4yeCIsIGNtZCk7Ci0JV0FSTihz aXplID4gMHhGRkYsICJyZXF1ZXN0ZWQgYnVmZmVyIGlzIHRvbyBsYXJnZTogJXp1IGJ5dGVzIiwg c2l6ZSk7Ci0JV0FSTihpZl9pZCA+IDB4MywgImludmFsaWQgaW50ZXJmYWNlIElEICVkIiwgaWZf aWQpOwotCi0JaGlmLT5sZW4gPSBjcHVfdG9fbGUxNihzaXplICsgNCk7Ci0JaGlmLT5pZCA9IGNt ZDsKLQloaWYtPmludGVyZmFjZSA9IGlmX2lkOwotfQotCi1zdGF0aWMgdm9pZCAqd2Z4X2FsbG9j X2hpZihzaXplX3QgYm9keV9sZW4sIHN0cnVjdCBoaWZfbXNnICoqaGlmKQotewotCSpoaWYgPSBr emFsbG9jKHNpemVvZihzdHJ1Y3QgaGlmX21zZykgKyBib2R5X2xlbiwgR0ZQX0tFUk5FTCk7Ci0J aWYgKCpoaWYpCi0JCXJldHVybiAoKmhpZiktPmJvZHk7Ci0JZWxzZQotCQlyZXR1cm4gTlVMTDsK LX0KLQotaW50IHdmeF9jbWRfc2VuZChzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwgc3RydWN0IGhpZl9t c2cgKnJlcXVlc3QsCi0JCSB2b2lkICpyZXBseSwgc2l6ZV90IHJlcGx5X2xlbiwgYm9vbCBub19y ZXBseSkKLXsKLQljb25zdCBjaGFyICptaWJfbmFtZSA9ICIiOwotCWNvbnN0IGNoYXIgKm1pYl9z ZXAgPSAiIjsKLQlpbnQgY21kID0gcmVxdWVzdC0+aWQ7Ci0JaW50IHZpZiA9IHJlcXVlc3QtPmlu dGVyZmFjZTsKLQlpbnQgcmV0OwotCi0JLy8gRG8gbm90IHdhaXQgZm9yIGFueSByZXBseSBpZiBj aGlwIGlzIGZyb3plbgotCWlmICh3ZGV2LT5jaGlwX2Zyb3plbikKLQkJcmV0dXJuIC1FVElNRURP VVQ7Ci0KLQltdXRleF9sb2NrKCZ3ZGV2LT5oaWZfY21kLmxvY2spOwotCVdBUk4od2Rldi0+aGlm X2NtZC5idWZfc2VuZCwgImRhdGEgbG9ja2luZyBlcnJvciIpOwotCi0JLy8gTm90ZTogY2FsbCB0 byBjb21wbGV0ZSgpIGJlbG93IGhhcyBhbiBpbXBsaWNpdCBtZW1vcnkgYmFycmllciB0aGF0Ci0J Ly8gaG9wZWZ1bGx5IHByb3RlY3QgYnVmX3NlbmQKLQl3ZGV2LT5oaWZfY21kLmJ1Zl9zZW5kID0g cmVxdWVzdDsKLQl3ZGV2LT5oaWZfY21kLmJ1Zl9yZWN2ID0gcmVwbHk7Ci0Jd2Rldi0+aGlmX2Nt ZC5sZW5fcmVjdiA9IHJlcGx5X2xlbjsKLQljb21wbGV0ZSgmd2Rldi0+aGlmX2NtZC5yZWFkeSk7 Ci0KLQl3ZnhfYmhfcmVxdWVzdF90eCh3ZGV2KTsKLQotCWlmIChub19yZXBseSkgewotCQkvLyBD aGlwIHdvbid0IHJlcGx5LiBHaXZlIGVub3VnaCB0aW1lIHRvIHRoZSB3cSB0byBzZW5kIHRoZQot CQkvLyBidWZmZXIuCi0JCW1zbGVlcCgxMDApOwotCQl3ZGV2LT5oaWZfY21kLmJ1Zl9zZW5kID0g TlVMTDsKLQkJbXV0ZXhfdW5sb2NrKCZ3ZGV2LT5oaWZfY21kLmxvY2spOwotCQlyZXR1cm4gMDsK LQl9Ci0KLQlpZiAod2Rldi0+cG9sbF9pcnEpCi0JCXdmeF9iaF9wb2xsX2lycSh3ZGV2KTsKLQot CXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmd2Rldi0+aGlmX2NtZC5kb25lLCAx ICogSFopOwotCWlmICghcmV0KSB7Ci0JCWRldl9lcnIod2Rldi0+ZGV2LCAiY2hpcCBpcyBhYm5v cm1hbGx5IGxvbmcgdG8gYW5zd2VyXG4iKTsKLQkJcmVpbml0X2NvbXBsZXRpb24oJndkZXYtPmhp Zl9jbWQucmVhZHkpOwotCQlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJndkZXYt PmhpZl9jbWQuZG9uZSwgMyAqIEhaKTsKLQl9Ci0JaWYgKCFyZXQpIHsKLQkJZGV2X2Vycih3ZGV2 LT5kZXYsICJjaGlwIGRpZCBub3QgYW5zd2VyXG4iKTsKLQkJd2Z4X3BlbmRpbmdfZHVtcF9vbGRf ZnJhbWVzKHdkZXYsIDMwMDApOwotCQl3ZGV2LT5jaGlwX2Zyb3plbiA9IHRydWU7Ci0JCXJlaW5p dF9jb21wbGV0aW9uKCZ3ZGV2LT5oaWZfY21kLmRvbmUpOwotCQlyZXQgPSAtRVRJTUVET1VUOwot CX0gZWxzZSB7Ci0JCXJldCA9IHdkZXYtPmhpZl9jbWQucmV0OwotCX0KLQotCXdkZXYtPmhpZl9j bWQuYnVmX3NlbmQgPSBOVUxMOwotCW11dGV4X3VubG9jaygmd2Rldi0+aGlmX2NtZC5sb2NrKTsK LQotCWlmIChyZXQgJiYKLQkgICAgKGNtZCA9PSBISUZfUkVRX0lEX1JFQURfTUlCIHx8IGNtZCA9 PSBISUZfUkVRX0lEX1dSSVRFX01JQikpIHsKLQkJbWliX25hbWUgPSBnZXRfbWliX25hbWUoKCh1 MTYgKilyZXF1ZXN0KVsyXSk7Ci0JCW1pYl9zZXAgPSAiLyI7Ci0JfQotCWlmIChyZXQgPCAwKQot CQlkZXZfZXJyKHdkZXYtPmRldiwKLQkJCSJXU00gcmVxdWVzdCAlcyVzJXMgKCUjLjJ4KSBvbiB2 aWYgJWQgcmV0dXJuZWQgZXJyb3IgJWRcbiIsCi0JCQlnZXRfaGlmX25hbWUoY21kKSwgbWliX3Nl cCwgbWliX25hbWUsIGNtZCwgdmlmLCByZXQpOwotCWlmIChyZXQgPiAwKQotCQlkZXZfd2Fybih3 ZGV2LT5kZXYsCi0JCQkgIldTTSByZXF1ZXN0ICVzJXMlcyAoJSMuMngpIG9uIHZpZiAlZCByZXR1 cm5lZCBzdGF0dXMgJWRcbiIsCi0JCQkgZ2V0X2hpZl9uYW1lKGNtZCksIG1pYl9zZXAsIG1pYl9u YW1lLCBjbWQsIHZpZiwgcmV0KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rp b24gaXMgc3BlY2lhbC4gQWZ0ZXIgSElGX1JFUV9JRF9TSFVUX0RPV04sIGNoaXAgd29uJ3QgcmVw bHkgdG8gYW55Ci0vLyByZXF1ZXN0IGFueW1vcmUuIE9idmlvdXNseSwgb25seSBjYWxsIHRoaXMg ZnVuY3Rpb24gZHVyaW5nIGRldmljZSB1bnJlZ2lzdGVyLgotaW50IGhpZl9zaHV0ZG93bihzdHJ1 Y3Qgd2Z4X2RldiAqd2RldikKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBoaWZfbXNnICpoaWY7Ci0K LQl3ZnhfYWxsb2NfaGlmKDAsICZoaWYpOwotCWlmICghaGlmKQotCQlyZXR1cm4gLUVOT01FTTsK LQl3ZnhfZmlsbF9oZWFkZXIoaGlmLCAtMSwgSElGX1JFUV9JRF9TSFVUX0RPV04sIDApOwotCXJl dCA9IHdmeF9jbWRfc2VuZCh3ZGV2LCBoaWYsIE5VTEwsIDAsIHRydWUpOwotCWlmICh3ZGV2LT5w ZGF0YS5ncGlvX3dha2V1cCkKLQkJZ3Bpb2Rfc2V0X3ZhbHVlKHdkZXYtPnBkYXRhLmdwaW9fd2Fr ZXVwLCAwKTsKLQllbHNlCi0JCWNvbnRyb2xfcmVnX3dyaXRlKHdkZXYsIDApOwotCWtmcmVlKGhp Zik7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IGhpZl9jb25maWd1cmF0aW9uKHN0cnVjdCB3Znhf ZGV2ICp3ZGV2LCBjb25zdCB1OCAqY29uZiwgc2l6ZV90IGxlbikKLXsKLQlpbnQgcmV0OwotCXNp emVfdCBidWZfbGVuID0gc2l6ZW9mKHN0cnVjdCBoaWZfcmVxX2NvbmZpZ3VyYXRpb24pICsgbGVu OwotCXN0cnVjdCBoaWZfbXNnICpoaWY7Ci0Jc3RydWN0IGhpZl9yZXFfY29uZmlndXJhdGlvbiAq Ym9keSA9IHdmeF9hbGxvY19oaWYoYnVmX2xlbiwgJmhpZik7Ci0KLQlpZiAoIWhpZikKLQkJcmV0 dXJuIC1FTk9NRU07Ci0JYm9keS0+bGVuZ3RoID0gY3B1X3RvX2xlMTYobGVuKTsKLQltZW1jcHko Ym9keS0+cGRzX2RhdGEsIGNvbmYsIGxlbik7Ci0Jd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgLTEsIEhJ Rl9SRVFfSURfQ09ORklHVVJBVElPTiwgYnVmX2xlbik7Ci0JcmV0ID0gd2Z4X2NtZF9zZW5kKHdk ZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOwotCWtmcmVlKGhpZik7Ci0JcmV0dXJuIHJldDsKLX0K LQotaW50IGhpZl9yZXNldChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9vbCByZXNldF9zdGF0KQot ewotCWludCByZXQ7Ci0Jc3RydWN0IGhpZl9tc2cgKmhpZjsKLQlzdHJ1Y3QgaGlmX3JlcV9yZXNl dCAqYm9keSA9IHdmeF9hbGxvY19oaWYoc2l6ZW9mKCpib2R5KSwgJmhpZik7Ci0KLQlpZiAoIWhp ZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JYm9keS0+cmVzZXRfc3RhdCA9IHJlc2V0X3N0YXQ7Ci0J d2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQsIEhJRl9SRVFfSURfUkVTRVQsIHNpemVvZigq Ym9keSkpOwotCXJldCA9IHdmeF9jbWRfc2VuZCh3dmlmLT53ZGV2LCBoaWYsIE5VTEwsIDAsIGZh bHNlKTsKLQlrZnJlZShoaWYpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCBoaWZfcmVhZF9taWIo c3RydWN0IHdmeF9kZXYgKndkZXYsIGludCB2aWZfaWQsIHUxNiBtaWJfaWQsCi0JCSB2b2lkICp2 YWwsIHNpemVfdCB2YWxfbGVuKQotewotCWludCByZXQ7Ci0Jc3RydWN0IGhpZl9tc2cgKmhpZjsK LQlpbnQgYnVmX2xlbiA9IHNpemVvZihzdHJ1Y3QgaGlmX2NuZl9yZWFkX21pYikgKyB2YWxfbGVu OwotCXN0cnVjdCBoaWZfcmVxX3JlYWRfbWliICpib2R5ID0gd2Z4X2FsbG9jX2hpZihzaXplb2Yo KmJvZHkpLCAmaGlmKTsKLQlzdHJ1Y3QgaGlmX2NuZl9yZWFkX21pYiAqcmVwbHkgPSBrbWFsbG9j KGJ1Zl9sZW4sIEdGUF9LRVJORUwpOwotCi0JaWYgKCFib2R5IHx8ICFyZXBseSkgewotCQlyZXQg PSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0JYm9keS0+bWliX2lkID0gY3B1X3RvX2xlMTYo bWliX2lkKTsKLQl3ZnhfZmlsbF9oZWFkZXIoaGlmLCB2aWZfaWQsIEhJRl9SRVFfSURfUkVBRF9N SUIsIHNpemVvZigqYm9keSkpOwotCXJldCA9IHdmeF9jbWRfc2VuZCh3ZGV2LCBoaWYsIHJlcGx5 LCBidWZfbGVuLCBmYWxzZSk7Ci0KLQlpZiAoIXJldCAmJiBtaWJfaWQgIT0gbGUxNl90b19jcHUo cmVwbHktPm1pYl9pZCkpIHsKLQkJZGV2X3dhcm4od2Rldi0+ZGV2LCAiJXM6IGNvbmZpcm1hdGlv biBtaXNtYXRjaCByZXF1ZXN0XG4iLAotCQkJIF9fZnVuY19fKTsKLQkJcmV0ID0gLUVJTzsKLQl9 Ci0JaWYgKHJldCA9PSAtRU5PTUVNKQotCQlkZXZfZXJyKHdkZXYtPmRldiwgImJ1ZmZlciBpcyB0 b28gc21hbGwgdG8gcmVjZWl2ZSAlcyAoJXp1IDwgJWQpXG4iLAotCQkJZ2V0X21pYl9uYW1lKG1p Yl9pZCksIHZhbF9sZW4sCi0JCQlsZTE2X3RvX2NwdShyZXBseS0+bGVuZ3RoKSk7Ci0JaWYgKCFy ZXQpCi0JCW1lbWNweSh2YWwsICZyZXBseS0+bWliX2RhdGEsIGxlMTZfdG9fY3B1KHJlcGx5LT5s ZW5ndGgpKTsKLQllbHNlCi0JCW1lbXNldCh2YWwsIDB4RkYsIHZhbF9sZW4pOwotb3V0OgotCWtm cmVlKGhpZik7Ci0Ja2ZyZWUocmVwbHkpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCBoaWZfd3Jp dGVfbWliKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgdmlmX2lkLCB1MTYgbWliX2lkLAotCQkg IHZvaWQgKnZhbCwgc2l6ZV90IHZhbF9sZW4pCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgaGlmX21z ZyAqaGlmOwotCWludCBidWZfbGVuID0gc2l6ZW9mKHN0cnVjdCBoaWZfcmVxX3dyaXRlX21pYikg KyB2YWxfbGVuOwotCXN0cnVjdCBoaWZfcmVxX3dyaXRlX21pYiAqYm9keSA9IHdmeF9hbGxvY19o aWYoYnVmX2xlbiwgJmhpZik7Ci0KLQlpZiAoIWhpZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JYm9k eS0+bWliX2lkID0gY3B1X3RvX2xlMTYobWliX2lkKTsKLQlib2R5LT5sZW5ndGggPSBjcHVfdG9f bGUxNih2YWxfbGVuKTsKLQltZW1jcHkoJmJvZHktPm1pYl9kYXRhLCB2YWwsIHZhbF9sZW4pOwot CXdmeF9maWxsX2hlYWRlcihoaWYsIHZpZl9pZCwgSElGX1JFUV9JRF9XUklURV9NSUIsIGJ1Zl9s ZW4pOwotCXJldCA9IHdmeF9jbWRfc2VuZCh3ZGV2LCBoaWYsIE5VTEwsIDAsIGZhbHNlKTsKLQlr ZnJlZShoaWYpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCBoaWZfc2NhbihzdHJ1Y3Qgd2Z4X3Zp ZiAqd3ZpZiwgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxLAotCSAgICAgaW50IGNo YW5fc3RhcnRfaWR4LCBpbnQgY2hhbl9udW0sIGludCAqdGltZW91dCkKLXsKLQlpbnQgcmV0LCBp OwotCXN0cnVjdCBoaWZfbXNnICpoaWY7Ci0Jc2l6ZV90IGJ1Zl9sZW4gPQotCQlzaXplb2Yoc3Ry dWN0IGhpZl9yZXFfc3RhcnRfc2Nhbl9hbHQpICsgY2hhbl9udW0gKiBzaXplb2YodTgpOwotCXN0 cnVjdCBoaWZfcmVxX3N0YXJ0X3NjYW5fYWx0ICpib2R5ID0gd2Z4X2FsbG9jX2hpZihidWZfbGVu LCAmaGlmKTsKLQlpbnQgdG1vX2NoYW5fZmcsIHRtb19jaGFuX2JnLCB0bW87Ci0KLQlXQVJOKGNo YW5fbnVtID4gSElGX0FQSV9NQVhfTkJfQ0hBTk5FTFMsICJpbnZhbGlkIHBhcmFtcyIpOwotCVdB Uk4ocmVxLT5uX3NzaWRzID4gSElGX0FQSV9NQVhfTkJfU1NJRFMsICJpbnZhbGlkIHBhcmFtcyIp OwotCi0JaWYgKCFoaWYpCi0JCXJldHVybiAtRU5PTUVNOwotCWZvciAoaSA9IDA7IGkgPCByZXEt Pm5fc3NpZHM7IGkrKykgewotCQltZW1jcHkoYm9keS0+c3NpZF9kZWZbaV0uc3NpZCwgcmVxLT5z c2lkc1tpXS5zc2lkLAotCQkgICAgICAgSUVFRTgwMjExX01BWF9TU0lEX0xFTik7Ci0JCWJvZHkt PnNzaWRfZGVmW2ldLnNzaWRfbGVuZ3RoID0KLQkJCWNwdV90b19sZTMyKHJlcS0+c3NpZHNbaV0u c3NpZF9sZW4pOwotCX0KLQlib2R5LT5udW1fb2Zfc3NpZHMgPSBISUZfQVBJX01BWF9OQl9TU0lE UzsKLQlib2R5LT5tYWludGFpbl9jdXJyZW50X2JzcyA9IDE7Ci0JYm9keS0+ZGlzYWxsb3dfcHMg PSAxOwotCWJvZHktPnR4X3Bvd2VyX2xldmVsID0KLQkJY3B1X3RvX2xlMzIocmVxLT5jaGFubmVs c1tjaGFuX3N0YXJ0X2lkeF0tPm1heF9wb3dlcik7Ci0JYm9keS0+bnVtX29mX2NoYW5uZWxzID0g Y2hhbl9udW07Ci0JZm9yIChpID0gMDsgaSA8IGNoYW5fbnVtOyBpKyspCi0JCWJvZHktPmNoYW5u ZWxfbGlzdFtpXSA9Ci0JCQlyZXEtPmNoYW5uZWxzW2kgKyBjaGFuX3N0YXJ0X2lkeF0tPmh3X3Zh bHVlOwotCWlmIChyZXEtPm5vX2NjaykKLQkJYm9keS0+bWF4X3RyYW5zbWl0X3JhdGUgPSBBUElf UkFURV9JTkRFWF9HXzZNQlBTOwotCWVsc2UKLQkJYm9keS0+bWF4X3RyYW5zbWl0X3JhdGUgPSBB UElfUkFURV9JTkRFWF9CXzFNQlBTOwotCWlmIChyZXEtPmNoYW5uZWxzW2NoYW5fc3RhcnRfaWR4 XS0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19JUikgewotCQlib2R5LT5taW5fY2hhbm5lbF90 aW1lID0gY3B1X3RvX2xlMzIoNTApOwotCQlib2R5LT5tYXhfY2hhbm5lbF90aW1lID0gY3B1X3Rv X2xlMzIoMTUwKTsKLQl9IGVsc2UgewotCQlib2R5LT5taW5fY2hhbm5lbF90aW1lID0gY3B1X3Rv X2xlMzIoMTApOwotCQlib2R5LT5tYXhfY2hhbm5lbF90aW1lID0gY3B1X3RvX2xlMzIoNTApOwot CQlib2R5LT5udW1fb2ZfcHJvYmVfcmVxdWVzdHMgPSAyOwotCQlib2R5LT5wcm9iZV9kZWxheSA9 IDEwMDsKLQl9Ci0JdG1vX2NoYW5fYmcgPSBsZTMyX3RvX2NwdShib2R5LT5tYXhfY2hhbm5lbF90 aW1lKSAqIFVTRUNfUEVSX1RVOwotCXRtb19jaGFuX2ZnID0gNTEyICogVVNFQ19QRVJfVFUgKyBi b2R5LT5wcm9iZV9kZWxheTsKLQl0bW9fY2hhbl9mZyAqPSBib2R5LT5udW1fb2ZfcHJvYmVfcmVx dWVzdHM7Ci0JdG1vID0gY2hhbl9udW0gKiBtYXgodG1vX2NoYW5fYmcsIHRtb19jaGFuX2ZnKSAr IDUxMiAqIFVTRUNfUEVSX1RVOwotCWlmICh0aW1lb3V0KQotCQkqdGltZW91dCA9IHVzZWNzX3Rv X2ppZmZpZXModG1vKTsKLQotCXdmeF9maWxsX2hlYWRlcihoaWYsIHd2aWYtPmlkLCBISUZfUkVR X0lEX1NUQVJUX1NDQU4sIGJ1Zl9sZW4pOwotCXJldCA9IHdmeF9jbWRfc2VuZCh3dmlmLT53ZGV2 LCBoaWYsIE5VTEwsIDAsIGZhbHNlKTsKLQlrZnJlZShoaWYpOwotCXJldHVybiByZXQ7Ci19Ci0K LWludCBoaWZfc3RvcF9zY2FuKHN0cnVjdCB3ZnhfdmlmICp3dmlmKQotewotCWludCByZXQ7Ci0J c3RydWN0IGhpZl9tc2cgKmhpZjsKLQkvLyBib2R5IGFzc29jaWF0ZWQgdG8gSElGX1JFUV9JRF9T VE9QX1NDQU4gaXMgZW1wdHkKLQl3ZnhfYWxsb2NfaGlmKDAsICZoaWYpOwotCi0JaWYgKCFoaWYp Ci0JCXJldHVybiAtRU5PTUVNOwotCXdmeF9maWxsX2hlYWRlcihoaWYsIHd2aWYtPmlkLCBISUZf UkVRX0lEX1NUT1BfU0NBTiwgMCk7Ci0JcmV0ID0gd2Z4X2NtZF9zZW5kKHd2aWYtPndkZXYsIGhp ZiwgTlVMTCwgMCwgZmFsc2UpOwotCWtmcmVlKGhpZik7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50 IGhpZl9qb2luKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2Jz c19jb25mICpjb25mLAotCSAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLCBj b25zdCB1OCAqc3NpZCwgaW50IHNzaWRsZW4pCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgaGlmX21z ZyAqaGlmOwotCXN0cnVjdCBoaWZfcmVxX2pvaW4gKmJvZHkgPSB3ZnhfYWxsb2NfaGlmKHNpemVv ZigqYm9keSksICZoaWYpOwotCi0JV0FSTl9PTighY29uZi0+YmVhY29uX2ludCk7Ci0JV0FSTl9P TighY29uZi0+YmFzaWNfcmF0ZXMpOwotCVdBUk5fT04oc2l6ZW9mKGJvZHktPnNzaWQpIDwgc3Np ZGxlbik7Ci0JV0FSTighY29uZi0+aWJzc19qb2luZWQgJiYgIXNzaWRsZW4sICJqb2luaW5nIGFu IHVua25vd24gQlNTIik7Ci0JaWYgKFdBUk5fT04oIWNoYW5uZWwpKQotCQlyZXR1cm4gLUVJTlZB TDsKLQlpZiAoIWhpZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JYm9keS0+aW5mcmFzdHJ1Y3R1cmVf YnNzX21vZGUgPSAhY29uZi0+aWJzc19qb2luZWQ7Ci0JYm9keS0+c2hvcnRfcHJlYW1ibGUgPSBj b25mLT51c2Vfc2hvcnRfcHJlYW1ibGU7Ci0JaWYgKGNoYW5uZWwtPmZsYWdzICYgSUVFRTgwMjEx X0NIQU5fTk9fSVIpCi0JCWJvZHktPnByb2JlX2Zvcl9qb2luID0gMDsKLQllbHNlCi0JCWJvZHkt PnByb2JlX2Zvcl9qb2luID0gMTsKLQlib2R5LT5jaGFubmVsX251bWJlciA9IGNoYW5uZWwtPmh3 X3ZhbHVlOwotCWJvZHktPmJlYWNvbl9pbnRlcnZhbCA9IGNwdV90b19sZTMyKGNvbmYtPmJlYWNv bl9pbnQpOwotCWJvZHktPmJhc2ljX3JhdGVfc2V0ID0KLQkJY3B1X3RvX2xlMzIod2Z4X3JhdGVf bWFza190b19odyh3dmlmLT53ZGV2LCBjb25mLT5iYXNpY19yYXRlcykpOwotCW1lbWNweShib2R5 LT5ic3NpZCwgY29uZi0+YnNzaWQsIHNpemVvZihib2R5LT5ic3NpZCkpOwotCWlmIChzc2lkKSB7 Ci0JCWJvZHktPnNzaWRfbGVuZ3RoID0gY3B1X3RvX2xlMzIoc3NpZGxlbik7Ci0JCW1lbWNweShi b2R5LT5zc2lkLCBzc2lkLCBzc2lkbGVuKTsKLQl9Ci0Jd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3Zp Zi0+aWQsIEhJRl9SRVFfSURfSk9JTiwgc2l6ZW9mKCpib2R5KSk7Ci0JcmV0ID0gd2Z4X2NtZF9z ZW5kKHd2aWYtPndkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOwotCWtmcmVlKGhpZik7Ci0JcmV0 dXJuIHJldDsKLX0KLQotaW50IGhpZl9zZXRfYnNzX3BhcmFtcyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZiwgaW50IGFpZCwgaW50IGJlYWNvbl9sb3N0X2NvdW50KQotewotCWludCByZXQ7Ci0Jc3RydWN0 IGhpZl9tc2cgKmhpZjsKLQlzdHJ1Y3QgaGlmX3JlcV9zZXRfYnNzX3BhcmFtcyAqYm9keSA9Ci0J CXdmeF9hbGxvY19oaWYoc2l6ZW9mKCpib2R5KSwgJmhpZik7Ci0KLQlpZiAoIWhpZikKLQkJcmV0 dXJuIC1FTk9NRU07Ci0JYm9keS0+YWlkID0gY3B1X3RvX2xlMTYoYWlkKTsKLQlib2R5LT5iZWFj b25fbG9zdF9jb3VudCA9IGJlYWNvbl9sb3N0X2NvdW50OwotCXdmeF9maWxsX2hlYWRlcihoaWYs IHd2aWYtPmlkLCBISUZfUkVRX0lEX1NFVF9CU1NfUEFSQU1TLAotCQkJc2l6ZW9mKCpib2R5KSk7 Ci0JcmV0ID0gd2Z4X2NtZF9zZW5kKHd2aWYtPndkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOwot CWtmcmVlKGhpZik7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IGhpZl9hZGRfa2V5KHN0cnVjdCB3 ZnhfZGV2ICp3ZGV2LCBjb25zdCBzdHJ1Y3QgaGlmX3JlcV9hZGRfa2V5ICphcmcpCi17Ci0JaW50 IHJldDsKLQlzdHJ1Y3QgaGlmX21zZyAqaGlmOwotCS8vIEZJWE1FOiBvbmx5IHNlbmQgbmVjZXNz YXJ5IGJpdHMKLQlzdHJ1Y3QgaGlmX3JlcV9hZGRfa2V5ICpib2R5ID0gd2Z4X2FsbG9jX2hpZihz aXplb2YoKmJvZHkpLCAmaGlmKTsKLQotCWlmICghaGlmKQotCQlyZXR1cm4gLUVOT01FTTsKLQkv LyBGSVhNRTogc3dhcCBieXRlcyBhcyBuZWNlc3NhcnkgaW4gYm9keQotCW1lbWNweShib2R5LCBh cmcsIHNpemVvZigqYm9keSkpOwotCWlmICh3ZnhfYXBpX29sZGVyX3RoYW4od2RldiwgMSwgNSkp Ci0JCS8vIExlZ2FjeSBmaXJtd2FyZXMgZXhwZWN0IHRoYXQgYWRkX2tleSB0byBiZSBzZW50IG9u IHJpZ2h0Ci0JCS8vIGludGVyZmFjZS4KLQkJd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgYXJnLT5pbnRf aWQsIEhJRl9SRVFfSURfQUREX0tFWSwKLQkJCQlzaXplb2YoKmJvZHkpKTsKLQllbHNlCi0JCXdm eF9maWxsX2hlYWRlcihoaWYsIC0xLCBISUZfUkVRX0lEX0FERF9LRVksIHNpemVvZigqYm9keSkp OwotCXJldCA9IHdmeF9jbWRfc2VuZCh3ZGV2LCBoaWYsIE5VTEwsIDAsIGZhbHNlKTsKLQlrZnJl ZShoaWYpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCBoaWZfcmVtb3ZlX2tleShzdHJ1Y3Qgd2Z4 X2RldiAqd2RldiwgaW50IGlkeCkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBoaWZfbXNnICpoaWY7 Ci0Jc3RydWN0IGhpZl9yZXFfcmVtb3ZlX2tleSAqYm9keSA9IHdmeF9hbGxvY19oaWYoc2l6ZW9m KCpib2R5KSwgJmhpZik7Ci0KLQlpZiAoIWhpZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JYm9keS0+ ZW50cnlfaW5kZXggPSBpZHg7Ci0Jd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgLTEsIEhJRl9SRVFfSURf UkVNT1ZFX0tFWSwgc2l6ZW9mKCpib2R5KSk7Ci0JcmV0ID0gd2Z4X2NtZF9zZW5kKHdkZXYsIGhp ZiwgTlVMTCwgMCwgZmFsc2UpOwotCWtmcmVlKGhpZik7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50 IGhpZl9zZXRfZWRjYV9xdWV1ZV9wYXJhbXMoc3RydWN0IHdmeF92aWYgKnd2aWYsIHUxNiBxdWV1 ZSwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICphcmcp Ci17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgaGlmX21zZyAqaGlmOwotCXN0cnVjdCBoaWZfcmVxX2Vk Y2FfcXVldWVfcGFyYW1zICpib2R5ID0gd2Z4X2FsbG9jX2hpZihzaXplb2YoKmJvZHkpLAotCQkJ CQkJCSAgICAgICAmaGlmKTsKLQotCWlmICghYm9keSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlX QVJOX09OKGFyZy0+YWlmcyA+IDI1NSk7Ci0JaWYgKCFoaWYpCi0JCXJldHVybiAtRU5PTUVNOwot CWJvZHktPmFpZnNuID0gYXJnLT5haWZzOwotCWJvZHktPmN3X21pbiA9IGNwdV90b19sZTE2KGFy Zy0+Y3dfbWluKTsKLQlib2R5LT5jd19tYXggPSBjcHVfdG9fbGUxNihhcmctPmN3X21heCk7Ci0J Ym9keS0+dHhfb3BfbGltaXQgPSBjcHVfdG9fbGUxNihhcmctPnR4b3AgKiBVU0VDX1BFUl9UWE9Q KTsKLQlib2R5LT5xdWV1ZV9pZCA9IDMgLSBxdWV1ZTsKLQkvLyBBUEkgMi4wIGhhcyBjaGFuZ2Vk IHF1ZXVlIElEcyB2YWx1ZXMKLQlpZiAod2Z4X2FwaV9vbGRlcl90aGFuKHd2aWYtPndkZXYsIDIs IDApICYmIHF1ZXVlID09IElFRUU4MDIxMV9BQ19CRSkKLQkJYm9keS0+cXVldWVfaWQgPSBISUZf UVVFVUVfSURfQkFDS0dST1VORDsKLQlpZiAod2Z4X2FwaV9vbGRlcl90aGFuKHd2aWYtPndkZXYs IDIsIDApICYmIHF1ZXVlID09IElFRUU4MDIxMV9BQ19CSykKLQkJYm9keS0+cXVldWVfaWQgPSBI SUZfUVVFVUVfSURfQkVTVEVGRk9SVDsKLQl3ZnhfZmlsbF9oZWFkZXIoaGlmLCB3dmlmLT5pZCwg SElGX1JFUV9JRF9FRENBX1FVRVVFX1BBUkFNUywKLQkJCXNpemVvZigqYm9keSkpOwotCXJldCA9 IHdmeF9jbWRfc2VuZCh3dmlmLT53ZGV2LCBoaWYsIE5VTEwsIDAsIGZhbHNlKTsKLQlrZnJlZSho aWYpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCBoaWZfc2V0X3BtKHN0cnVjdCB3ZnhfdmlmICp3 dmlmLCBib29sIHBzLCBpbnQgZHluYW1pY19wc190aW1lb3V0KQotewotCWludCByZXQ7Ci0Jc3Ry dWN0IGhpZl9tc2cgKmhpZjsKLQlzdHJ1Y3QgaGlmX3JlcV9zZXRfcG1fbW9kZSAqYm9keSA9IHdm eF9hbGxvY19oaWYoc2l6ZW9mKCpib2R5KSwgJmhpZik7Ci0KLQlpZiAoIWJvZHkpCi0JCXJldHVy biAtRU5PTUVNOwotCi0JaWYgKCFoaWYpCi0JCXJldHVybiAtRU5PTUVNOwotCWlmIChwcykgewot CQlib2R5LT5lbnRlcl9wc20gPSAxOwotCQkvLyBGaXJtd2FyZSBkb2VzIG5vdCBzdXBwb3J0IG1v cmUgdGhhbiAxMjhtcwotCQlib2R5LT5mYXN0X3BzbV9pZGxlX3BlcmlvZCA9IG1pbihkeW5hbWlj X3BzX3RpbWVvdXQgKiAyLCAyNTUpOwotCQlpZiAoYm9keS0+ZmFzdF9wc21faWRsZV9wZXJpb2Qp Ci0JCQlib2R5LT5mYXN0X3BzbSA9IDE7Ci0JfQotCXdmeF9maWxsX2hlYWRlcihoaWYsIHd2aWYt PmlkLCBISUZfUkVRX0lEX1NFVF9QTV9NT0RFLCBzaXplb2YoKmJvZHkpKTsKLQlyZXQgPSB3Znhf Y21kX3NlbmQod3ZpZi0+d2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7Ci0Ja2ZyZWUoaGlmKTsK LQlyZXR1cm4gcmV0OwotfQotCi1pbnQgaGlmX3N0YXJ0KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBj b25zdCBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpjb25mLAotCSAgICAgIGNvbnN0IHN0cnVj dCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBoaWZf bXNnICpoaWY7Ci0Jc3RydWN0IGhpZl9yZXFfc3RhcnQgKmJvZHkgPSB3ZnhfYWxsb2NfaGlmKHNp emVvZigqYm9keSksICZoaWYpOwotCi0JV0FSTl9PTighY29uZi0+YmVhY29uX2ludCk7Ci0JaWYg KCFoaWYpCi0JCXJldHVybiAtRU5PTUVNOwotCWJvZHktPmR0aW1fcGVyaW9kID0gY29uZi0+ZHRp bV9wZXJpb2Q7Ci0JYm9keS0+c2hvcnRfcHJlYW1ibGUgPSBjb25mLT51c2Vfc2hvcnRfcHJlYW1i bGU7Ci0JYm9keS0+Y2hhbm5lbF9udW1iZXIgPSBjaGFubmVsLT5od192YWx1ZTsKLQlib2R5LT5i ZWFjb25faW50ZXJ2YWwgPSBjcHVfdG9fbGUzMihjb25mLT5iZWFjb25faW50KTsKLQlib2R5LT5i YXNpY19yYXRlX3NldCA9Ci0JCWNwdV90b19sZTMyKHdmeF9yYXRlX21hc2tfdG9faHcod3ZpZi0+ d2RldiwgY29uZi0+YmFzaWNfcmF0ZXMpKTsKLQlib2R5LT5zc2lkX2xlbmd0aCA9IGNvbmYtPnNz aWRfbGVuOwotCW1lbWNweShib2R5LT5zc2lkLCBjb25mLT5zc2lkLCBjb25mLT5zc2lkX2xlbik7 Ci0Jd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQsIEhJRl9SRVFfSURfU1RBUlQsIHNpemVv ZigqYm9keSkpOwotCXJldCA9IHdmeF9jbWRfc2VuZCh3dmlmLT53ZGV2LCBoaWYsIE5VTEwsIDAs IGZhbHNlKTsKLQlrZnJlZShoaWYpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCBoaWZfYmVhY29u X3RyYW5zbWl0KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29sIGVuYWJsZSkKLXsKLQlpbnQgcmV0 OwotCXN0cnVjdCBoaWZfbXNnICpoaWY7Ci0Jc3RydWN0IGhpZl9yZXFfYmVhY29uX3RyYW5zbWl0 ICpib2R5ID0gd2Z4X2FsbG9jX2hpZihzaXplb2YoKmJvZHkpLAotCQkJCQkJCSAgICAgJmhpZik7 Ci0KLQlpZiAoIWhpZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JYm9keS0+ZW5hYmxlX2JlYWNvbmlu ZyA9IGVuYWJsZSA/IDEgOiAwOwotCXdmeF9maWxsX2hlYWRlcihoaWYsIHd2aWYtPmlkLCBISUZf UkVRX0lEX0JFQUNPTl9UUkFOU01JVCwKLQkJCXNpemVvZigqYm9keSkpOwotCXJldCA9IHdmeF9j bWRfc2VuZCh3dmlmLT53ZGV2LCBoaWYsIE5VTEwsIDAsIGZhbHNlKTsKLQlrZnJlZShoaWYpOwot CXJldHVybiByZXQ7Ci19Ci0KLWludCBoaWZfbWFwX2xpbmsoc3RydWN0IHdmeF92aWYgKnd2aWYs IGJvb2wgdW5tYXAsIHU4ICptYWNfYWRkciwgaW50IHN0YV9pZCwgYm9vbCBtZnApCi17Ci0JaW50 IHJldDsKLQlzdHJ1Y3QgaGlmX21zZyAqaGlmOwotCXN0cnVjdCBoaWZfcmVxX21hcF9saW5rICpi b2R5ID0gd2Z4X2FsbG9jX2hpZihzaXplb2YoKmJvZHkpLCAmaGlmKTsKLQotCWlmICghaGlmKQot CQlyZXR1cm4gLUVOT01FTTsKLQlpZiAobWFjX2FkZHIpCi0JCWV0aGVyX2FkZHJfY29weShib2R5 LT5tYWNfYWRkciwgbWFjX2FkZHIpOwotCWJvZHktPm1mcGMgPSBtZnAgPyAxIDogMDsKLQlib2R5 LT51bm1hcCA9IHVubWFwID8gMSA6IDA7Ci0JYm9keS0+cGVlcl9zdGFfaWQgPSBzdGFfaWQ7Ci0J d2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQsIEhJRl9SRVFfSURfTUFQX0xJTkssIHNpemVv ZigqYm9keSkpOwotCXJldCA9IHdmeF9jbWRfc2VuZCh3dmlmLT53ZGV2LCBoaWYsIE5VTEwsIDAs IGZhbHNlKTsKLQlrZnJlZShoaWYpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCBoaWZfdXBkYXRl X2llX2JlYWNvbihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgY29uc3QgdTggKmllcywgc2l6ZV90IGll c19sZW4pCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgaGlmX21zZyAqaGlmOwotCWludCBidWZfbGVu ID0gc2l6ZW9mKHN0cnVjdCBoaWZfcmVxX3VwZGF0ZV9pZSkgKyBpZXNfbGVuOwotCXN0cnVjdCBo aWZfcmVxX3VwZGF0ZV9pZSAqYm9keSA9IHdmeF9hbGxvY19oaWYoYnVmX2xlbiwgJmhpZik7Ci0K LQlpZiAoIWhpZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JYm9keS0+YmVhY29uID0gMTsKLQlib2R5 LT5udW1faWVzID0gY3B1X3RvX2xlMTYoMSk7Ci0JbWVtY3B5KGJvZHktPmllLCBpZXMsIGllc19s ZW4pOwotCXdmeF9maWxsX2hlYWRlcihoaWYsIHd2aWYtPmlkLCBISUZfUkVRX0lEX1VQREFURV9J RSwgYnVmX2xlbik7Ci0JcmV0ID0gd2Z4X2NtZF9zZW5kKHd2aWYtPndkZXYsIGhpZiwgTlVMTCwg MCwgZmFsc2UpOwotCWtmcmVlKGhpZik7Ci0JcmV0dXJuIHJldDsKLX0KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4LmggYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eC5o CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTIxYzU0NWFlNmIuLjAwMDAwMDAwMDAw MAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eC5oCisrKyAvZGV2L251bGwKQEAgLTEs NjAgKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwot LyoKLSAqIEltcGxlbWVudGF0aW9uIG9mIGhvc3QtdG8tY2hpcCBjb21tYW5kcyAoYWthIHJlcXVl c3QvY29uZmlybWF0aW9uKSBvZiBXRnh4eAotICogU3BsaXQgTWFjIChXU00pIEFQSS4KLSAqCi0g KiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAq IENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KLSAqIENvcHlyaWdodCAoQykgMjAxMCwg U1QtRXJpY3Nzb24gU0EKLSAqLwotI2lmbmRlZiBXRlhfSElGX1RYX0gKLSNkZWZpbmUgV0ZYX0hJ Rl9UWF9ICi0KLXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbDsKLXN0cnVjdCBpZWVlODAyMTFfYnNz X2NvbmY7Ci1zdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtczsKLXN0cnVjdCBjZmc4MDIx MV9zY2FuX3JlcXVlc3Q7Ci1zdHJ1Y3QgaGlmX3JlcV9hZGRfa2V5Owotc3RydWN0IHdmeF9kZXY7 Ci1zdHJ1Y3Qgd2Z4X3ZpZjsKLQotc3RydWN0IHdmeF9oaWZfY21kIHsKLQlzdHJ1Y3QgbXV0ZXgg ICAgICBsb2NrOwotCXN0cnVjdCBjb21wbGV0aW9uIHJlYWR5OwotCXN0cnVjdCBjb21wbGV0aW9u IGRvbmU7Ci0Jc3RydWN0IGhpZl9tc2cgICAgKmJ1Zl9zZW5kOwotCXZvaWQgICAgICAgICAgICAg ICpidWZfcmVjdjsKLQlzaXplX3QgICAgICAgICAgICBsZW5fcmVjdjsKLQlpbnQgICAgICAgICAg ICAgICByZXQ7Ci19OwotCi12b2lkIHdmeF9pbml0X2hpZl9jbWQoc3RydWN0IHdmeF9oaWZfY21k ICp3ZnhfaGlmX2NtZCk7Ci1pbnQgd2Z4X2NtZF9zZW5kKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBz dHJ1Y3QgaGlmX21zZyAqcmVxdWVzdCwKLQkJIHZvaWQgKnJlcGx5LCBzaXplX3QgcmVwbHlfbGVu LCBib29sIGFzeW5jKTsKLQotaW50IGhpZl9zaHV0ZG93bihzdHJ1Y3Qgd2Z4X2RldiAqd2Rldik7 Ci1pbnQgaGlmX2NvbmZpZ3VyYXRpb24oc3RydWN0IHdmeF9kZXYgKndkZXYsIGNvbnN0IHU4ICpj b25mLCBzaXplX3QgbGVuKTsKLWludCBoaWZfcmVzZXQoc3RydWN0IHdmeF92aWYgKnd2aWYsIGJv b2wgcmVzZXRfc3RhdCk7Ci1pbnQgaGlmX3JlYWRfbWliKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBp bnQgdmlmX2lkLCB1MTYgbWliX2lkLAotCQkgdm9pZCAqYnVmLCBzaXplX3QgYnVmX3NpemUpOwot aW50IGhpZl93cml0ZV9taWIoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCB2aWZfaWQsIHUxNiBt aWJfaWQsCi0JCSAgdm9pZCAqYnVmLCBzaXplX3QgYnVmX3NpemUpOwotaW50IGhpZl9zY2FuKHN0 cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXE4MDIx MSwKLQkgICAgIGludCBjaGFuX3N0YXJ0LCBpbnQgY2hhbl9udW0sIGludCAqdGltZW91dCk7Ci1p bnQgaGlmX3N0b3Bfc2NhbihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZik7Ci1pbnQgaGlmX2pvaW4oc3Ry dWN0IHdmeF92aWYgKnd2aWYsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmNvbmYs Ci0JICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsIGNvbnN0IHU4ICpzc2lk LCBpbnQgc3NpZGxlbik7Ci1pbnQgaGlmX3NldF9wbShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9v bCBwcywgaW50IGR5bmFtaWNfcHNfdGltZW91dCk7Ci1pbnQgaGlmX3NldF9ic3NfcGFyYW1zKHN0 cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgYWlkLCBpbnQgYmVhY29uX2xvc3RfY291bnQpOwotaW50 IGhpZl9hZGRfa2V5KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBjb25zdCBzdHJ1Y3QgaGlmX3JlcV9h ZGRfa2V5ICphcmcpOwotaW50IGhpZl9yZW1vdmVfa2V5KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBp bnQgaWR4KTsKLWludCBoaWZfc2V0X2VkY2FfcXVldWVfcGFyYW1zKHN0cnVjdCB3ZnhfdmlmICp3 dmlmLCB1MTYgcXVldWUsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVl X3BhcmFtcyAqYXJnKTsKLWludCBoaWZfc3RhcnQoc3RydWN0IHdmeF92aWYgKnd2aWYsIGNvbnN0 IHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmNvbmYsCi0JICAgICAgY29uc3Qgc3RydWN0IGll ZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKTsKLWludCBoaWZfYmVhY29uX3RyYW5zbWl0KHN0cnVj dCB3ZnhfdmlmICp3dmlmLCBib29sIGVuYWJsZSk7Ci1pbnQgaGlmX21hcF9saW5rKHN0cnVjdCB3 ZnhfdmlmICp3dmlmLAotCQkgYm9vbCB1bm1hcCwgdTggKm1hY19hZGRyLCBpbnQgc3RhX2lkLCBi b29sIG1mcCk7Ci1pbnQgaGlmX3VwZGF0ZV9pZV9iZWFjb24oc3RydWN0IHdmeF92aWYgKnd2aWYs IGNvbnN0IHU4ICppZXMsIHNpemVfdCBpZXNfbGVuKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9k cml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eF9taWIuYyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlm X3R4X21pYi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTI2Y2YxYjYyYmUuLjAw MDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eF9taWIuYworKysgL2Rl di9udWxsCkBAIC0xLDMyNCArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMC1vbmx5Ci0vKgotICogSW1wbGVtZW50YXRpb24gb2YgaG9zdC10by1jaGlwIE1JQnMgb2Yg V0Z4eHggU3BsaXQgTWFjIChXU00pIEFQSS4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAy MCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwgU1Qt RXJpY3Nzb24KLSAqIENvcHlyaWdodCAoQykgMjAxMCwgU1QtRXJpY3Nzb24gU0EKLSAqLwotCi0j aW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLQotI2luY2x1ZGUgIndmeC5oIgotI2luY2x1 ZGUgImhpZl90eC5oIgotI2luY2x1ZGUgImhpZl90eF9taWIuaCIKLSNpbmNsdWRlICJoaWZfYXBp X21pYi5oIgotCi1pbnQgaGlmX3NldF9vdXRwdXRfcG93ZXIoc3RydWN0IHdmeF92aWYgKnd2aWYs IGludCB2YWwpCi17Ci0Jc3RydWN0IGhpZl9taWJfY3VycmVudF90eF9wb3dlcl9sZXZlbCBhcmcg PSB7Ci0JCS5wb3dlcl9sZXZlbCA9IGNwdV90b19sZTMyKHZhbCAqIDEwKSwKLQl9OwotCi0JcmV0 dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsCi0JCQkgICAgIEhJRl9NSUJf SURfQ1VSUkVOVF9UWF9QT1dFUl9MRVZFTCwKLQkJCSAgICAgJmFyZywgc2l6ZW9mKGFyZykpOwot fQotCi1pbnQgaGlmX3NldF9iZWFjb25fd2FrZXVwX3BlcmlvZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZiwKLQkJCQkgdW5zaWduZWQgaW50IGR0aW1faW50ZXJ2YWwsCi0JCQkJIHVuc2lnbmVkIGludCBs aXN0ZW5faW50ZXJ2YWwpCi17Ci0Jc3RydWN0IGhpZl9taWJfYmVhY29uX3dha2VfdXBfcGVyaW9k IGFyZyA9IHsKLQkJLndha2V1cF9wZXJpb2RfbWluID0gZHRpbV9pbnRlcnZhbCwKLQkJLnJlY2Vp dmVfZHRpbSA9IDAsCi0JCS53YWtldXBfcGVyaW9kX21heCA9IGxpc3Rlbl9pbnRlcnZhbCwKLQl9 OwotCi0JaWYgKGR0aW1faW50ZXJ2YWwgPiAweEZGIHx8IGxpc3Rlbl9pbnRlcnZhbCA+IDB4RkZG RikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwg d3ZpZi0+aWQsCi0JCQkgICAgIEhJRl9NSUJfSURfQkVBQ09OX1dBS0VVUF9QRVJJT0QsCi0JCQkg ICAgICZhcmcsIHNpemVvZihhcmcpKTsKLX0KLQotaW50IGhpZl9zZXRfcmNwaV9yc3NpX3RocmVz aG9sZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwKLQkJCQlpbnQgcnNzaV90aG9sZCwgaW50IHJzc2lf aHlzdCkKLXsKLQlzdHJ1Y3QgaGlmX21pYl9yY3BpX3Jzc2lfdGhyZXNob2xkIGFyZyA9IHsKLQkJ LnJvbGxpbmdfYXZlcmFnZV9jb3VudCA9IDgsCi0JCS5kZXRlY3Rpb24gPSAxLAotCX07Ci0KLQlp ZiAoIXJzc2lfdGhvbGQgJiYgIXJzc2lfaHlzdCkgewotCQlhcmcudXBwZXJ0aHJlc2ggPSAxOwot CQlhcmcubG93ZXJ0aHJlc2ggPSAxOwotCX0gZWxzZSB7Ci0JCWFyZy51cHBlcl90aHJlc2hvbGQg PSByc3NpX3Rob2xkICsgcnNzaV9oeXN0OwotCQlhcmcudXBwZXJfdGhyZXNob2xkID0gKGFyZy51 cHBlcl90aHJlc2hvbGQgKyAxMTApICogMjsKLQkJYXJnLmxvd2VyX3RocmVzaG9sZCA9IHJzc2lf dGhvbGQ7Ci0JCWFyZy5sb3dlcl90aHJlc2hvbGQgPSAoYXJnLmxvd2VyX3RocmVzaG9sZCArIDEx MCkgKiAyOwotCX0KLQotCXJldHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlk LAotCQkJICAgICBISUZfTUlCX0lEX1JDUElfUlNTSV9USFJFU0hPTEQsICZhcmcsIHNpemVvZihh cmcpKTsKLX0KLQotaW50IGhpZl9nZXRfY291bnRlcnNfdGFibGUoc3RydWN0IHdmeF9kZXYgKndk ZXYsIGludCB2aWZfaWQsCi0JCQkgICBzdHJ1Y3QgaGlmX21pYl9leHRlbmRlZF9jb3VudF90YWJs ZSAqYXJnKQotewotCWlmICh3ZnhfYXBpX29sZGVyX3RoYW4od2RldiwgMSwgMykpIHsKLQkJLy8g ZXh0ZW5kZWRfY291bnRfdGFibGUgaXMgd2lkZXIgdGhhbiBjb3VudF90YWJsZQotCQltZW1zZXQo YXJnLCAweEZGLCBzaXplb2YoKmFyZykpOwotCQlyZXR1cm4gaGlmX3JlYWRfbWliKHdkZXYsIHZp Zl9pZCwgSElGX01JQl9JRF9DT1VOVEVSU19UQUJMRSwKLQkJCQkgICAgYXJnLCBzaXplb2Yoc3Ry dWN0IGhpZl9taWJfY291bnRfdGFibGUpKTsKLQl9IGVsc2UgewotCQlyZXR1cm4gaGlmX3JlYWRf bWliKHdkZXYsIHZpZl9pZCwKLQkJCQkgICAgSElGX01JQl9JRF9FWFRFTkRFRF9DT1VOVEVSU19U QUJMRSwgYXJnLAotCQkJCXNpemVvZihzdHJ1Y3QgaGlmX21pYl9leHRlbmRlZF9jb3VudF90YWJs ZSkpOwotCX0KLX0KLQotaW50IGhpZl9zZXRfbWFjYWRkcihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwg dTggKm1hYykKLXsKLQlzdHJ1Y3QgaGlmX21pYl9tYWNfYWRkcmVzcyBtc2cgPSB7IH07Ci0KLQlp ZiAobWFjKQotCQlldGhlcl9hZGRyX2NvcHkobXNnLm1hY19hZGRyLCBtYWMpOwotCXJldHVybiBo aWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLCBISUZfTUlCX0lEX0RPVDExX01BQ19B RERSRVNTLAotCQkJICAgICAmbXNnLCBzaXplb2YobXNnKSk7Ci19Ci0KLWludCBoaWZfc2V0X3J4 X2ZpbHRlcihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwKLQkJICAgICAgYm9vbCBmaWx0ZXJfYnNzaWQs IGJvb2wgZmlsdGVyX3ByYnJlcSkKLXsKLQlzdHJ1Y3QgaGlmX21pYl9yeF9maWx0ZXIgYXJnID0g eyB9OwotCi0JaWYgKGZpbHRlcl9ic3NpZCkKLQkJYXJnLmJzc2lkX2ZpbHRlciA9IDE7Ci0JaWYg KCFmaWx0ZXJfcHJicmVxKQotCQlhcmcuZndkX3Byb2JlX3JlcSA9IDE7Ci0JcmV0dXJuIGhpZl93 cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsIEhJRl9NSUJfSURfUlhfRklMVEVSLAotCQkJ ICAgICAmYXJnLCBzaXplb2YoYXJnKSk7Ci19Ci0KLWludCBoaWZfc2V0X2JlYWNvbl9maWx0ZXJf dGFibGUoc3RydWN0IHdmeF92aWYgKnd2aWYsIGludCB0YmxfbGVuLAotCQkJCWNvbnN0IHN0cnVj dCBoaWZfaWVfdGFibGVfZW50cnkgKnRibCkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBoaWZfbWli X2Jjbl9maWx0ZXJfdGFibGUgKmFyZzsKLQlpbnQgYnVmX2xlbiA9IHN0cnVjdF9zaXplKGFyZywg aWVfdGFibGUsIHRibF9sZW4pOwotCi0JYXJnID0ga3phbGxvYyhidWZfbGVuLCBHRlBfS0VSTkVM KTsKLQlpZiAoIWFyZykKLQkJcmV0dXJuIC1FTk9NRU07Ci0JYXJnLT5udW1fb2ZfaW5mb19lbG10 cyA9IGNwdV90b19sZTMyKHRibF9sZW4pOwotCW1lbWNweShhcmctPmllX3RhYmxlLCB0YmwsIGZs ZXhfYXJyYXlfc2l6ZShhcmcsIGllX3RhYmxlLCB0YmxfbGVuKSk7Ci0JcmV0ID0gaGlmX3dyaXRl X21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwKLQkJCSAgICBISUZfTUlCX0lEX0JFQUNPTl9GSUxU RVJfVEFCTEUsIGFyZywgYnVmX2xlbik7Ci0Ja2ZyZWUoYXJnKTsKLQlyZXR1cm4gcmV0OwotfQot Ci1pbnQgaGlmX2JlYWNvbl9maWx0ZXJfY29udHJvbChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwKLQkJ CSAgICAgIGludCBlbmFibGUsIGludCBiZWFjb25fY291bnQpCi17Ci0Jc3RydWN0IGhpZl9taWJf YmNuX2ZpbHRlcl9lbmFibGUgYXJnID0gewotCQkuZW5hYmxlID0gY3B1X3RvX2xlMzIoZW5hYmxl KSwKLQkJLmJjbl9jb3VudCA9IGNwdV90b19sZTMyKGJlYWNvbl9jb3VudCksCi0JfTsKLQlyZXR1 cm4gaGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwKLQkJCSAgICAgSElGX01JQl9J RF9CRUFDT05fRklMVEVSX0VOQUJMRSwKLQkJCSAgICAgJmFyZywgc2l6ZW9mKGFyZykpOwotfQot Ci1pbnQgaGlmX3NldF9vcGVyYXRpb25hbF9tb2RlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBlbnVt IGhpZl9vcF9wb3dlcl9tb2RlIG1vZGUpCi17Ci0Jc3RydWN0IGhpZl9taWJfZ2xfb3BlcmF0aW9u YWxfcG93ZXJfbW9kZSBhcmcgPSB7Ci0JCS5wb3dlcl9tb2RlID0gbW9kZSwKLQkJLnd1cF9pbmRf YWN0aXZhdGlvbiA9IDEsCi0JfTsKLQotCXJldHVybiBoaWZfd3JpdGVfbWliKHdkZXYsIC0xLCBI SUZfTUlCX0lEX0dMX09QRVJBVElPTkFMX1BPV0VSX01PREUsCi0JCQkgICAgICZhcmcsIHNpemVv ZihhcmcpKTsKLX0KLQotaW50IGhpZl9zZXRfdGVtcGxhdGVfZnJhbWUoc3RydWN0IHdmeF92aWYg Knd2aWYsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICB1OCBmcmFtZV90eXBlLCBpbnQgaW5p dF9yYXRlKQotewotCXN0cnVjdCBoaWZfbWliX3RlbXBsYXRlX2ZyYW1lICphcmc7Ci0KLQlXQVJO KHNrYi0+bGVuID4gSElGX0FQSV9NQVhfVEVNUExBVEVfRlJBTUVfU0laRSwgImZyYW1lIGlzIHRv byBiaWciKTsKLQlza2JfcHVzaChza2IsIDQpOwotCWFyZyA9IChzdHJ1Y3QgaGlmX21pYl90ZW1w bGF0ZV9mcmFtZSAqKXNrYi0+ZGF0YTsKLQlza2JfcHVsbChza2IsIDQpOwotCWFyZy0+aW5pdF9y YXRlID0gaW5pdF9yYXRlOwotCWFyZy0+ZnJhbWVfdHlwZSA9IGZyYW1lX3R5cGU7Ci0JYXJnLT5m cmFtZV9sZW5ndGggPSBjcHVfdG9fbGUxNihza2ItPmxlbik7Ci0JcmV0dXJuIGhpZl93cml0ZV9t aWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsIEhJRl9NSUJfSURfVEVNUExBVEVfRlJBTUUsCi0JCQkg ICAgIGFyZywgc2l6ZW9mKCphcmcpICsgc2tiLT5sZW4pOwotfQotCi1pbnQgaGlmX3NldF9tZnAo c3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wgY2FwYWJsZSwgYm9vbCByZXF1aXJlZCkKLXsKLQlz dHJ1Y3QgaGlmX21pYl9wcm90ZWN0ZWRfbWdtdF9wb2xpY3kgYXJnID0geyB9OwotCi0JV0FSTihy ZXF1aXJlZCAmJiAhY2FwYWJsZSwgImluY29oZXJlbnQgYXJndW1lbnRzIik7Ci0JaWYgKGNhcGFi bGUpIHsKLQkJYXJnLnBtZl9lbmFibGUgPSAxOwotCQlhcmcuaG9zdF9lbmNfYXV0aF9mcmFtZXMg PSAxOwotCX0KLQlpZiAoIXJlcXVpcmVkKQotCQlhcmcudW5wbWZfYWxsb3dlZCA9IDE7Ci0JcmV0 dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsCi0JCQkgICAgIEhJRl9NSUJf SURfUFJPVEVDVEVEX01HTVRfUE9MSUNZLAotCQkJICAgICAmYXJnLCBzaXplb2YoYXJnKSk7Ci19 Ci0KLWludCBoaWZfc2V0X2Jsb2NrX2Fja19wb2xpY3koc3RydWN0IHdmeF92aWYgKnd2aWYsCi0J CQkgICAgIHU4IHR4X3RpZF9wb2xpY3ksIHU4IHJ4X3RpZF9wb2xpY3kpCi17Ci0Jc3RydWN0IGhp Zl9taWJfYmxvY2tfYWNrX3BvbGljeSBhcmcgPSB7Ci0JCS5ibG9ja19hY2tfdHhfdGlkX3BvbGlj eSA9IHR4X3RpZF9wb2xpY3ksCi0JCS5ibG9ja19hY2tfcnhfdGlkX3BvbGljeSA9IHJ4X3RpZF9w b2xpY3ksCi0JfTsKLQotCXJldHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlk LCBISUZfTUlCX0lEX0JMT0NLX0FDS19QT0xJQ1ksCi0JCQkgICAgICZhcmcsIHNpemVvZihhcmcp KTsKLX0KLQotaW50IGhpZl9zZXRfYXNzb2NpYXRpb25fbW9kZShzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZiwgaW50IGFtcGR1X2RlbnNpdHksCi0JCQkgICAgIGJvb2wgZ3JlZW5maWVsZCwgYm9vbCBzaG9y dF9wcmVhbWJsZSkKLXsKLQlzdHJ1Y3QgaGlmX21pYl9zZXRfYXNzb2NpYXRpb25fbW9kZSBhcmcg PSB7Ci0JCS5wcmVhbWJ0eXBlX3VzZSA9IDEsCi0JCS5tb2RlID0gMSwKLQkJLnNwYWNpbmcgPSAx LAotCQkuc2hvcnRfcHJlYW1ibGUgPSBzaG9ydF9wcmVhbWJsZSwKLQkJLmdyZWVuZmllbGQgPSBn cmVlbmZpZWxkLAotCQkubXBkdV9zdGFydF9zcGFjaW5nID0gYW1wZHVfZGVuc2l0eSwKLQl9Owot Ci0JcmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsCi0JCQkgICAgIEhJ Rl9NSUJfSURfU0VUX0FTU09DSUFUSU9OX01PREUsICZhcmcsIHNpemVvZihhcmcpKTsKLX0KLQot aW50IGhpZl9zZXRfdHhfcmF0ZV9yZXRyeV9wb2xpY3koc3RydWN0IHdmeF92aWYgKnd2aWYsCi0J CQkJIGludCBwb2xpY3lfaW5kZXgsIHU4ICpyYXRlcykKLXsKLQlzdHJ1Y3QgaGlmX21pYl9zZXRf dHhfcmF0ZV9yZXRyeV9wb2xpY3kgKmFyZzsKLQlzaXplX3Qgc2l6ZSA9IHN0cnVjdF9zaXplKGFy ZywgdHhfcmF0ZV9yZXRyeV9wb2xpY3ksIDEpOwotCWludCByZXQ7Ci0KLQlhcmcgPSBremFsbG9j KHNpemUsIEdGUF9LRVJORUwpOwotCWlmICghYXJnKQotCQlyZXR1cm4gLUVOT01FTTsKLQlhcmct Pm51bV90eF9yYXRlX3BvbGljaWVzID0gMTsKLQlhcmctPnR4X3JhdGVfcmV0cnlfcG9saWN5WzBd LnBvbGljeV9pbmRleCA9IHBvbGljeV9pbmRleDsKLQlhcmctPnR4X3JhdGVfcmV0cnlfcG9saWN5 WzBdLnNob3J0X3JldHJ5X2NvdW50ID0gMjU1OwotCWFyZy0+dHhfcmF0ZV9yZXRyeV9wb2xpY3lb MF0ubG9uZ19yZXRyeV9jb3VudCA9IDI1NTsKLQlhcmctPnR4X3JhdGVfcmV0cnlfcG9saWN5WzBd LmZpcnN0X3JhdGVfc2VsID0gMTsKLQlhcmctPnR4X3JhdGVfcmV0cnlfcG9saWN5WzBdLnRlcm1p bmF0ZSA9IDE7Ci0JYXJnLT50eF9yYXRlX3JldHJ5X3BvbGljeVswXS5jb3VudF9pbml0ID0gMTsK LQltZW1jcHkoJmFyZy0+dHhfcmF0ZV9yZXRyeV9wb2xpY3lbMF0ucmF0ZXMsIHJhdGVzLAotCSAg ICAgICBzaXplb2YoYXJnLT50eF9yYXRlX3JldHJ5X3BvbGljeVswXS5yYXRlcykpOwotCXJldCA9 IGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsCi0JCQkgICAgSElGX01JQl9JRF9T RVRfVFhfUkFURV9SRVRSWV9QT0xJQ1ksIGFyZywgc2l6ZSk7Ci0Ja2ZyZWUoYXJnKTsKLQlyZXR1 cm4gcmV0OwotfQotCi1pbnQgaGlmX2tlZXBfYWxpdmVfcGVyaW9kKHN0cnVjdCB3ZnhfdmlmICp3 dmlmLCBpbnQgcGVyaW9kKQotewotCXN0cnVjdCBoaWZfbWliX2tlZXBfYWxpdmVfcGVyaW9kIGFy ZyA9IHsKLQkJLmtlZXBfYWxpdmVfcGVyaW9kID0gY3B1X3RvX2xlMTYocGVyaW9kKSwKLQl9Owot Ci0JcmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsIEhJRl9NSUJfSURf S0VFUF9BTElWRV9QRVJJT0QsCi0JCQkgICAgICZhcmcsIHNpemVvZihhcmcpKTsKLX07Ci0KLWlu dCBoaWZfc2V0X2FycF9pcHY0X2ZpbHRlcihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IGlkeCwg X19iZTMyICphZGRyKQotewotCXN0cnVjdCBoaWZfbWliX2FycF9pcF9hZGRyX3RhYmxlIGFyZyA9 IHsKLQkJLmNvbmRpdGlvbl9pZHggPSBpZHgsCi0JCS5hcnBfZW5hYmxlID0gSElGX0FSUF9OU19G SUxURVJJTkdfRElTQUJMRSwKLQl9OwotCi0JaWYgKGFkZHIpIHsKLQkJLy8gQ2F1dGlvbjogdHlw ZSBvZiBhZGRyIGlzIF9fYmUzMgotCQltZW1jcHkoYXJnLmlwdjRfYWRkcmVzcywgYWRkciwgc2l6 ZW9mKGFyZy5pcHY0X2FkZHJlc3MpKTsKLQkJYXJnLmFycF9lbmFibGUgPSBISUZfQVJQX05TX0ZJ TFRFUklOR19FTkFCTEU7Ci0JfQotCXJldHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2 aWYtPmlkLAotCQkJICAgICBISUZfTUlCX0lEX0FSUF9JUF9BRERSRVNTRVNfVEFCTEUsCi0JCQkg ICAgICZhcmcsIHNpemVvZihhcmcpKTsKLX0KLQotaW50IGhpZl91c2VfbXVsdGlfdHhfY29uZihz dHJ1Y3Qgd2Z4X2RldiAqd2RldiwgYm9vbCBlbmFibGUpCi17Ci0Jc3RydWN0IGhpZl9taWJfZ2xf c2V0X211bHRpX21zZyBhcmcgPSB7Ci0JCS5lbmFibGVfbXVsdGlfdHhfY29uZiA9IGVuYWJsZSwK LQl9OwotCi0JcmV0dXJuIGhpZl93cml0ZV9taWIod2RldiwgLTEsIEhJRl9NSUJfSURfR0xfU0VU X01VTFRJX01TRywKLQkJCSAgICAgJmFyZywgc2l6ZW9mKGFyZykpOwotfQotCi1pbnQgaGlmX3Nl dF91YXBzZF9pbmZvKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCB1bnNpZ25lZCBsb25nIHZhbCkKLXsK LQlzdHJ1Y3QgaGlmX21pYl9zZXRfdWFwc2RfaW5mb3JtYXRpb24gYXJnID0geyB9OwotCi0JaWYg KHZhbCAmIEJJVChJRUVFODAyMTFfQUNfVk8pKQotCQlhcmcudHJpZ192b2ljZSA9IDE7Ci0JaWYg KHZhbCAmIEJJVChJRUVFODAyMTFfQUNfVkkpKQotCQlhcmcudHJpZ192aWRlbyA9IDE7Ci0JaWYg KHZhbCAmIEJJVChJRUVFODAyMTFfQUNfQkUpKQotCQlhcmcudHJpZ19iZSA9IDE7Ci0JaWYgKHZh bCAmIEJJVChJRUVFODAyMTFfQUNfQkspKQotCQlhcmcudHJpZ19iY2tncm5kID0gMTsKLQlyZXR1 cm4gaGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwKLQkJCSAgICAgSElGX01JQl9J RF9TRVRfVUFQU0RfSU5GT1JNQVRJT04sCi0JCQkgICAgICZhcmcsIHNpemVvZihhcmcpKTsKLX0K LQotaW50IGhpZl9lcnBfdXNlX3Byb3RlY3Rpb24oc3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wg ZW5hYmxlKQotewotCXN0cnVjdCBoaWZfbWliX25vbl9lcnBfcHJvdGVjdGlvbiBhcmcgPSB7Ci0J CS51c2VfY3RzX3RvX3NlbGYgPSBlbmFibGUsCi0JfTsKLQotCXJldHVybiBoaWZfd3JpdGVfbWli KHd2aWYtPndkZXYsIHd2aWYtPmlkLAotCQkJICAgICBISUZfTUlCX0lEX05PTl9FUlBfUFJPVEVD VElPTiwgJmFyZywgc2l6ZW9mKGFyZykpOwotfQotCi1pbnQgaGlmX3Nsb3RfdGltZShzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZiwgaW50IHZhbCkKLXsKLQlzdHJ1Y3QgaGlmX21pYl9zbG90X3RpbWUgYXJn ID0gewotCQkuc2xvdF90aW1lID0gY3B1X3RvX2xlMzIodmFsKSwKLQl9OwotCi0JcmV0dXJuIGhp Zl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsIEhJRl9NSUJfSURfU0xPVF9USU1FLAot CQkJICAgICAmYXJnLCBzaXplb2YoYXJnKSk7Ci19Ci0KLWludCBoaWZfd2VwX2RlZmF1bHRfa2V5 X2lkKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgdmFsKQotewotCXN0cnVjdCBoaWZfbWliX3dl cF9kZWZhdWx0X2tleV9pZCBhcmcgPSB7Ci0JCS53ZXBfZGVmYXVsdF9rZXlfaWQgPSB2YWwsCi0J fTsKLQotCXJldHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLAotCQkJICAg ICBISUZfTUlCX0lEX0RPVDExX1dFUF9ERUZBVUxUX0tFWV9JRCwKLQkJCSAgICAgJmFyZywgc2l6 ZW9mKGFyZykpOwotfQotCi1pbnQgaGlmX3J0c190aHJlc2hvbGQoc3RydWN0IHdmeF92aWYgKnd2 aWYsIGludCB2YWwpCi17Ci0Jc3RydWN0IGhpZl9taWJfZG90MTFfcnRzX3RocmVzaG9sZCBhcmcg PSB7Ci0JCS50aHJlc2hvbGQgPSBjcHVfdG9fbGUzMih2YWwgPj0gMCA/IHZhbCA6IDB4RkZGRiks Ci0JfTsKLQotCXJldHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLAotCQkJ ICAgICBISUZfTUlCX0lEX0RPVDExX1JUU19USFJFU0hPTEQsICZhcmcsIHNpemVvZihhcmcpKTsK LX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4X21pYi5oIGIvZHJpdmVy cy9zdGFnaW5nL3dmeC9oaWZfdHhfbWliLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDgxMmIzYmEwZjAwZS4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlm X3R4X21pYi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyogU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwotLyoKLSAqIEltcGxlbWVudGF0aW9uIG9mIGhv c3QtdG8tY2hpcCBNSUJzIG9mIFdGeHh4IFNwbGl0IE1hYyAoV1NNKSBBUEkuCi0gKgotICogQ29w eXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5 cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIFNULUVy aWNzc29uIFNBCi0gKi8KLSNpZm5kZWYgV0ZYX0hJRl9UWF9NSUJfSAotI2RlZmluZSBXRlhfSElG X1RYX01JQl9ICi0KLXN0cnVjdCB3ZnhfdmlmOwotc3RydWN0IHNrX2J1ZmY7Ci0KLWludCBoaWZf c2V0X291dHB1dF9wb3dlcihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IHZhbCk7Ci1pbnQgaGlm X3NldF9iZWFjb25fd2FrZXVwX3BlcmlvZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwKLQkJCQkgdW5z aWduZWQgaW50IGR0aW1faW50ZXJ2YWwsCi0JCQkJIHVuc2lnbmVkIGludCBsaXN0ZW5faW50ZXJ2 YWwpOwotaW50IGhpZl9zZXRfcmNwaV9yc3NpX3RocmVzaG9sZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZiwKLQkJCQlpbnQgcnNzaV90aG9sZCwgaW50IHJzc2lfaHlzdCk7Ci1pbnQgaGlmX2dldF9jb3Vu dGVyc190YWJsZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IHZpZl9pZCwKLQkJCSAgIHN0cnVj dCBoaWZfbWliX2V4dGVuZGVkX2NvdW50X3RhYmxlICphcmcpOwotaW50IGhpZl9zZXRfbWFjYWRk cihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgdTggKm1hYyk7Ci1pbnQgaGlmX3NldF9yeF9maWx0ZXIo c3RydWN0IHdmeF92aWYgKnd2aWYsCi0JCSAgICAgIGJvb2wgZmlsdGVyX2Jzc2lkLCBib29sIGZ3 ZF9wcm9iZV9yZXEpOwotaW50IGhpZl9zZXRfYmVhY29uX2ZpbHRlcl90YWJsZShzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZiwgaW50IHRibF9sZW4sCi0JCQkJY29uc3Qgc3RydWN0IGhpZl9pZV90YWJsZV9l bnRyeSAqdGJsKTsKLWludCBoaWZfYmVhY29uX2ZpbHRlcl9jb250cm9sKHN0cnVjdCB3Znhfdmlm ICp3dmlmLAotCQkJICAgICAgaW50IGVuYWJsZSwgaW50IGJlYWNvbl9jb3VudCk7Ci1pbnQgaGlm X3NldF9vcGVyYXRpb25hbF9tb2RlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBlbnVtIGhpZl9vcF9w b3dlcl9tb2RlIG1vZGUpOwotaW50IGhpZl9zZXRfdGVtcGxhdGVfZnJhbWUoc3RydWN0IHdmeF92 aWYgKnd2aWYsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICB1OCBmcmFtZV90eXBlLCBpbnQg aW5pdF9yYXRlKTsKLWludCBoaWZfc2V0X21mcChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9vbCBj YXBhYmxlLCBib29sIHJlcXVpcmVkKTsKLWludCBoaWZfc2V0X2Jsb2NrX2Fja19wb2xpY3koc3Ry dWN0IHdmeF92aWYgKnd2aWYsCi0JCQkgICAgIHU4IHR4X3RpZF9wb2xpY3ksIHU4IHJ4X3RpZF9w b2xpY3kpOwotaW50IGhpZl9zZXRfYXNzb2NpYXRpb25fbW9kZShzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZiwgaW50IGFtcGR1X2RlbnNpdHksCi0JCQkgICAgIGJvb2wgZ3JlZW5maWVsZCwgYm9vbCBzaG9y dF9wcmVhbWJsZSk7Ci1pbnQgaGlmX3NldF90eF9yYXRlX3JldHJ5X3BvbGljeShzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZiwKLQkJCQkgaW50IHBvbGljeV9pbmRleCwgdTggKnJhdGVzKTsKLWludCBoaWZf a2VlcF9hbGl2ZV9wZXJpb2Qoc3RydWN0IHdmeF92aWYgKnd2aWYsIGludCBwZXJpb2QpOwotaW50 IGhpZl9zZXRfYXJwX2lwdjRfZmlsdGVyKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgaWR4LCBf X2JlMzIgKmFkZHIpOwotaW50IGhpZl91c2VfbXVsdGlfdHhfY29uZihzdHJ1Y3Qgd2Z4X2RldiAq d2RldiwgYm9vbCBlbmFibGUpOwotaW50IGhpZl9zZXRfdWFwc2RfaW5mbyhzdHJ1Y3Qgd2Z4X3Zp ZiAqd3ZpZiwgdW5zaWduZWQgbG9uZyB2YWwpOwotaW50IGhpZl9lcnBfdXNlX3Byb3RlY3Rpb24o c3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wgZW5hYmxlKTsKLWludCBoaWZfc2xvdF90aW1lKHN0 cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgdmFsKTsKLWludCBoaWZfd2VwX2RlZmF1bHRfa2V5X2lk KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgdmFsKTsKLWludCBoaWZfcnRzX3RocmVzaG9sZChz dHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IHZhbCk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9zdGFnaW5nL3dmeC9od2lvLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2h3aW8uYwpkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZmYmM1YjVkNjRjLi4wMDAwMDAwMDAwMDAKLS0t IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9od2lvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNTIgKzAs MCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQotLyoKLSAqIExv dy1sZXZlbCBJL08gZnVuY3Rpb25zLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBT aWxpY29uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmlj c3NvbgotICovCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVs YXkuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLSNpbmNsdWRlICJod2lvLmgiCi0jaW5j bHVkZSAid2Z4LmgiCi0jaW5jbHVkZSAiYnVzLmgiCi0jaW5jbHVkZSAidHJhY2VzLmgiCi0KLS8q Ci0gKiBJbnRlcm5hbCBoZWxwZXJzLgotICoKLSAqIEFib3V0IENPTkZJR19WTUFQX1NUQUNLOgot ICogV2hlbiBDT05GSUdfVk1BUF9TVEFDSyBpcyBlbmFibGVkLCBpdCBpcyBub3QgcG9zc2libGUg dG8gcnVuIERNQSBvbiBzdGFjawotICogYWxsb2NhdGVkIGRhdGEuIEZ1bmN0aW9ucyBiZWxvdyB0 aGF0IHdvcmsgd2l0aCByZWdpc3RlcnMgKGFrYSBmdW5jdGlvbnMKLSAqIGVuZGluZyB3aXRoICIz MiIpIGF1dG9tYXRpY2FsbHkgcmVhbGxvY2F0ZSBidWZmZXJzIHdpdGgga21hbGxvYy4gSG93ZXZl ciwKLSAqIGZ1bmN0aW9ucyB0aGF0IHdvcmsgd2l0aCBhcmJpdHJhcnkgbGVuZ3RoIGJ1ZmZlcnMg bGV0J3MgY2FsbGVyIHRvIGhhbmRsZQotICogbWVtb3J5IGxvY2F0aW9uLiBJbiBkb3VidCwgZW5h YmxlIENPTkZJR19ERUJVR19TRyB0byBkZXRlY3QgYmFkbHkgbG9jYXRlZAotICogYnVmZmVyLgot ICovCi0KLXN0YXRpYyBpbnQgcmVhZDMyKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgcmVnLCB1 MzIgKnZhbCkKLXsKLQlpbnQgcmV0OwotCV9fbGUzMiAqdG1wID0ga21hbGxvYyhzaXplb2YodTMy KSwgR0ZQX0tFUk5FTCk7Ci0KLQkqdmFsID0gfjA7IC8vIE5ldmVyIHJldHVybiB1bmRlZmluZWQg dmFsdWUKLQlpZiAoIXRtcCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcmV0ID0gd2Rldi0+aHdidXNf b3BzLT5jb3B5X2Zyb21faW8od2Rldi0+aHdidXNfcHJpdiwgcmVnLCB0bXAsCi0JCQkJCSAgICBz aXplb2YodTMyKSk7Ci0JaWYgKHJldCA+PSAwKQotCQkqdmFsID0gbGUzMl90b19jcHUoKnRtcCk7 Ci0Ja2ZyZWUodG1wKTsKLQlpZiAocmV0KQotCQlkZXZfZXJyKHdkZXYtPmRldiwgIiVzOiBidXMg Y29tbXVuaWNhdGlvbiBlcnJvcjogJWRcbiIsCi0JCQlfX2Z1bmNfXywgcmV0KTsKLQlyZXR1cm4g cmV0OwotfQotCi1zdGF0aWMgaW50IHdyaXRlMzIoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCBy ZWcsIHUzMiB2YWwpCi17Ci0JaW50IHJldDsKLQlfX2xlMzIgKnRtcCA9IGttYWxsb2Moc2l6ZW9m KHUzMiksIEdGUF9LRVJORUwpOwotCi0JaWYgKCF0bXApCi0JCXJldHVybiAtRU5PTUVNOwotCSp0 bXAgPSBjcHVfdG9fbGUzMih2YWwpOwotCXJldCA9IHdkZXYtPmh3YnVzX29wcy0+Y29weV90b19p byh3ZGV2LT5od2J1c19wcml2LCByZWcsIHRtcCwKLQkJCQkJICBzaXplb2YodTMyKSk7Ci0Ja2Zy ZWUodG1wKTsKLQlpZiAocmV0KQotCQlkZXZfZXJyKHdkZXYtPmRldiwgIiVzOiBidXMgY29tbXVu aWNhdGlvbiBlcnJvcjogJWRcbiIsCi0JCQlfX2Z1bmNfXywgcmV0KTsKLQlyZXR1cm4gcmV0Owot fQotCi1zdGF0aWMgaW50IHJlYWQzMl9sb2NrZWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCBy ZWcsIHUzMiAqdmFsKQotewotCWludCByZXQ7Ci0KLQl3ZGV2LT5od2J1c19vcHMtPmxvY2sod2Rl di0+aHdidXNfcHJpdik7Ci0JcmV0ID0gcmVhZDMyKHdkZXYsIHJlZywgdmFsKTsKLQlfdHJhY2Vf aW9fcmVhZDMyKHJlZywgKnZhbCk7Ci0Jd2Rldi0+aHdidXNfb3BzLT51bmxvY2sod2Rldi0+aHdi dXNfcHJpdik7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB3cml0ZTMyX2xvY2tlZChz dHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IHJlZywgdTMyIHZhbCkKLXsKLQlpbnQgcmV0OwotCi0J d2Rldi0+aHdidXNfb3BzLT5sb2NrKHdkZXYtPmh3YnVzX3ByaXYpOwotCXJldCA9IHdyaXRlMzIo d2RldiwgcmVnLCB2YWwpOwotCV90cmFjZV9pb193cml0ZTMyKHJlZywgdmFsKTsKLQl3ZGV2LT5o d2J1c19vcHMtPnVubG9jayh3ZGV2LT5od2J1c19wcml2KTsKLQlyZXR1cm4gcmV0OwotfQotCi1z dGF0aWMgaW50IHdyaXRlMzJfYml0c19sb2NrZWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCBy ZWcsIHUzMiBtYXNrLCB1MzIgdmFsKQotewotCWludCByZXQ7Ci0JdTMyIHZhbF9yLCB2YWxfdzsK LQotCVdBUk5fT04ofm1hc2sgJiB2YWwpOwotCXZhbCAmPSBtYXNrOwotCXdkZXYtPmh3YnVzX29w cy0+bG9jayh3ZGV2LT5od2J1c19wcml2KTsKLQlyZXQgPSByZWFkMzIod2RldiwgcmVnLCAmdmFs X3IpOwotCV90cmFjZV9pb19yZWFkMzIocmVnLCB2YWxfcik7Ci0JaWYgKHJldCA8IDApCi0JCWdv dG8gZXJyOwotCXZhbF93ID0gKHZhbF9yICYgfm1hc2spIHwgdmFsOwotCWlmICh2YWxfdyAhPSB2 YWxfcikgewotCQlyZXQgPSB3cml0ZTMyKHdkZXYsIHJlZywgdmFsX3cpOwotCQlfdHJhY2VfaW9f d3JpdGUzMihyZWcsIHZhbF93KTsKLQl9Ci1lcnI6Ci0Jd2Rldi0+aHdidXNfb3BzLT51bmxvY2so d2Rldi0+aHdidXNfcHJpdik7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBpbmRpcmVj dF9yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgcmVnLCB1MzIgYWRkciwKLQkJCSB2b2lk ICpidWYsIHNpemVfdCBsZW4pCi17Ci0JaW50IHJldDsKLQlpbnQgaTsKLQl1MzIgY2ZnOwotCXUz MiBwcmVmZXRjaDsKLQotCVdBUk5fT04obGVuID49IDB4MjAwMCk7Ci0JV0FSTl9PTihyZWcgIT0g V0ZYX1JFR19BSEJfRFBPUlQgJiYgcmVnICE9IFdGWF9SRUdfU1JBTV9EUE9SVCk7Ci0KLQlpZiAo cmVnID09IFdGWF9SRUdfQUhCX0RQT1JUKQotCQlwcmVmZXRjaCA9IENGR19QUkVGRVRDSF9BSEI7 Ci0JZWxzZSBpZiAocmVnID09IFdGWF9SRUdfU1JBTV9EUE9SVCkKLQkJcHJlZmV0Y2ggPSBDRkdf UFJFRkVUQ0hfU1JBTTsKLQllbHNlCi0JCXJldHVybiAtRU5PREVWOwotCi0JcmV0ID0gd3JpdGUz Mih3ZGV2LCBXRlhfUkVHX0JBU0VfQUREUiwgYWRkcik7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8g ZXJyOwotCi0JcmV0ID0gcmVhZDMyKHdkZXYsIFdGWF9SRUdfQ09ORklHLCAmY2ZnKTsKLQlpZiAo cmV0IDwgMCkKLQkJZ290byBlcnI7Ci0KLQlyZXQgPSB3cml0ZTMyKHdkZXYsIFdGWF9SRUdfQ09O RklHLCBjZmcgfCBwcmVmZXRjaCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyOwotCi0JZm9y IChpID0gMDsgaSA8IDIwOyBpKyspIHsKLQkJcmV0ID0gcmVhZDMyKHdkZXYsIFdGWF9SRUdfQ09O RklHLCAmY2ZnKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIGVycjsKLQkJaWYgKCEoY2ZnICYg cHJlZmV0Y2gpKQotCQkJYnJlYWs7Ci0JCXVzbGVlcF9yYW5nZSgyMDAsIDI1MCk7Ci0JfQotCWlm IChpID09IDIwKSB7Ci0JCXJldCA9IC1FVElNRURPVVQ7Ci0JCWdvdG8gZXJyOwotCX0KLQotCXJl dCA9IHdkZXYtPmh3YnVzX29wcy0+Y29weV9mcm9tX2lvKHdkZXYtPmh3YnVzX3ByaXYsIHJlZywg YnVmLCBsZW4pOwotCi1lcnI6Ci0JaWYgKHJldCA8IDApCi0JCW1lbXNldChidWYsIDB4RkYsIGxl bik7IC8vIE5ldmVyIHJldHVybiB1bmRlZmluZWQgdmFsdWUKLQlyZXR1cm4gcmV0OwotfQotCi1z dGF0aWMgaW50IGluZGlyZWN0X3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgcmVnLCB1 MzIgYWRkciwKLQkJCSAgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQotewotCWludCByZXQ7 Ci0KLQlXQVJOX09OKGxlbiA+PSAweDIwMDApOwotCVdBUk5fT04ocmVnICE9IFdGWF9SRUdfQUhC X0RQT1JUICYmIHJlZyAhPSBXRlhfUkVHX1NSQU1fRFBPUlQpOwotCXJldCA9IHdyaXRlMzIod2Rl diwgV0ZYX1JFR19CQVNFX0FERFIsIGFkZHIpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0 OwotCi0JcmV0dXJuIHdkZXYtPmh3YnVzX29wcy0+Y29weV90b19pbyh3ZGV2LT5od2J1c19wcml2 LCByZWcsIGJ1ZiwgbGVuKTsKLX0KLQotc3RhdGljIGludCBpbmRpcmVjdF9yZWFkX2xvY2tlZChz dHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IHJlZywgdTMyIGFkZHIsCi0JCQkJdm9pZCAqYnVmLCBz aXplX3QgbGVuKQotewotCWludCByZXQ7Ci0KLQl3ZGV2LT5od2J1c19vcHMtPmxvY2sod2Rldi0+ aHdidXNfcHJpdik7Ci0JcmV0ID0gaW5kaXJlY3RfcmVhZCh3ZGV2LCByZWcsIGFkZHIsIGJ1Ziwg bGVuKTsKLQlfdHJhY2VfaW9faW5kX3JlYWQocmVnLCBhZGRyLCBidWYsIGxlbik7Ci0Jd2Rldi0+ aHdidXNfb3BzLT51bmxvY2sod2Rldi0+aHdidXNfcHJpdik7Ci0JcmV0dXJuIHJldDsKLX0KLQot c3RhdGljIGludCBpbmRpcmVjdF93cml0ZV9sb2NrZWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIGlu dCByZWcsIHUzMiBhZGRyLAotCQkJCSBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCi17Ci0J aW50IHJldDsKLQotCXdkZXYtPmh3YnVzX29wcy0+bG9jayh3ZGV2LT5od2J1c19wcml2KTsKLQly ZXQgPSBpbmRpcmVjdF93cml0ZSh3ZGV2LCByZWcsIGFkZHIsIGJ1ZiwgbGVuKTsKLQlfdHJhY2Vf aW9faW5kX3dyaXRlKHJlZywgYWRkciwgYnVmLCBsZW4pOwotCXdkZXYtPmh3YnVzX29wcy0+dW5s b2NrKHdkZXYtPmh3YnVzX3ByaXYpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaW5k aXJlY3RfcmVhZDMyX2xvY2tlZChzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IHJlZywKLQkJCQkg IHUzMiBhZGRyLCB1MzIgKnZhbCkKLXsKLQlpbnQgcmV0OwotCV9fbGUzMiAqdG1wID0ga21hbGxv YyhzaXplb2YodTMyKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIXRtcCkKLQkJcmV0dXJuIC1FTk9N RU07Ci0Jd2Rldi0+aHdidXNfb3BzLT5sb2NrKHdkZXYtPmh3YnVzX3ByaXYpOwotCXJldCA9IGlu ZGlyZWN0X3JlYWQod2RldiwgcmVnLCBhZGRyLCB0bXAsIHNpemVvZih1MzIpKTsKLQkqdmFsID0g bGUzMl90b19jcHUoKnRtcCk7Ci0JX3RyYWNlX2lvX2luZF9yZWFkMzIocmVnLCBhZGRyLCAqdmFs KTsKLQl3ZGV2LT5od2J1c19vcHMtPnVubG9jayh3ZGV2LT5od2J1c19wcml2KTsKLQlrZnJlZSh0 bXApOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaW5kaXJlY3Rfd3JpdGUzMl9sb2Nr ZWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCByZWcsCi0JCQkJICAgdTMyIGFkZHIsIHUzMiB2 YWwpCi17Ci0JaW50IHJldDsKLQlfX2xlMzIgKnRtcCA9IGttYWxsb2Moc2l6ZW9mKHUzMiksIEdG UF9LRVJORUwpOwotCi0JaWYgKCF0bXApCi0JCXJldHVybiAtRU5PTUVNOwotCSp0bXAgPSBjcHVf dG9fbGUzMih2YWwpOwotCXdkZXYtPmh3YnVzX29wcy0+bG9jayh3ZGV2LT5od2J1c19wcml2KTsK LQlyZXQgPSBpbmRpcmVjdF93cml0ZSh3ZGV2LCByZWcsIGFkZHIsIHRtcCwgc2l6ZW9mKHUzMikp OwotCV90cmFjZV9pb19pbmRfd3JpdGUzMihyZWcsIGFkZHIsIHZhbCk7Ci0Jd2Rldi0+aHdidXNf b3BzLT51bmxvY2sod2Rldi0+aHdidXNfcHJpdik7Ci0Ja2ZyZWUodG1wKTsKLQlyZXR1cm4gcmV0 OwotfQotCi1pbnQgd2Z4X2RhdGFfcmVhZChzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwgdm9pZCAqYnVm LCBzaXplX3QgbGVuKQotewotCWludCByZXQ7Ci0KLQlXQVJOKChsb25nKWJ1ZiAmIDMsICIlczog dW5hbGlnbmVkIGJ1ZmZlciIsIF9fZnVuY19fKTsKLQl3ZGV2LT5od2J1c19vcHMtPmxvY2sod2Rl di0+aHdidXNfcHJpdik7Ci0JcmV0ID0gd2Rldi0+aHdidXNfb3BzLT5jb3B5X2Zyb21faW8od2Rl di0+aHdidXNfcHJpdiwKLQkJCQkJICAgIFdGWF9SRUdfSU5fT1VUX1FVRVVFLCBidWYsIGxlbik7 Ci0JX3RyYWNlX2lvX3JlYWQoV0ZYX1JFR19JTl9PVVRfUVVFVUUsIGJ1ZiwgbGVuKTsKLQl3ZGV2 LT5od2J1c19vcHMtPnVubG9jayh3ZGV2LT5od2J1c19wcml2KTsKLQlpZiAocmV0KQotCQlkZXZf ZXJyKHdkZXYtPmRldiwgIiVzOiBidXMgY29tbXVuaWNhdGlvbiBlcnJvcjogJWRcbiIsCi0JCQlf X2Z1bmNfXywgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgd2Z4X2RhdGFfd3JpdGUoc3Ry dWN0IHdmeF9kZXYgKndkZXYsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlpbnQg cmV0OwotCi0JV0FSTigobG9uZylidWYgJiAzLCAiJXM6IHVuYWxpZ25lZCBidWZmZXIiLCBfX2Z1 bmNfXyk7Ci0Jd2Rldi0+aHdidXNfb3BzLT5sb2NrKHdkZXYtPmh3YnVzX3ByaXYpOwotCXJldCA9 IHdkZXYtPmh3YnVzX29wcy0+Y29weV90b19pbyh3ZGV2LT5od2J1c19wcml2LAotCQkJCQkgIFdG WF9SRUdfSU5fT1VUX1FVRVVFLCBidWYsIGxlbik7Ci0JX3RyYWNlX2lvX3dyaXRlKFdGWF9SRUdf SU5fT1VUX1FVRVVFLCBidWYsIGxlbik7Ci0Jd2Rldi0+aHdidXNfb3BzLT51bmxvY2sod2Rldi0+ aHdidXNfcHJpdik7Ci0JaWYgKHJldCkKLQkJZGV2X2Vycih3ZGV2LT5kZXYsICIlczogYnVzIGNv bW11bmljYXRpb24gZXJyb3I6ICVkXG4iLAotCQkJX19mdW5jX18sIHJldCk7Ci0JcmV0dXJuIHJl dDsKLX0KLQotaW50IHNyYW1fYnVmX3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBhZGRy LCB2b2lkICpidWYsIHNpemVfdCBsZW4pCi17Ci0JcmV0dXJuIGluZGlyZWN0X3JlYWRfbG9ja2Vk KHdkZXYsIFdGWF9SRUdfU1JBTV9EUE9SVCwgYWRkciwgYnVmLCBsZW4pOwotfQotCi1pbnQgYWhi X2J1Zl9yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgdm9pZCAqYnVmLCBzaXpl X3QgbGVuKQotewotCXJldHVybiBpbmRpcmVjdF9yZWFkX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX0FI Ql9EUE9SVCwgYWRkciwgYnVmLCBsZW4pOwotfQotCi1pbnQgc3JhbV9idWZfd3JpdGUoc3RydWN0 IHdmeF9kZXYgKndkZXYsIHUzMiBhZGRyLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCi17 Ci0JcmV0dXJuIGluZGlyZWN0X3dyaXRlX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX1NSQU1fRFBPUlQs IGFkZHIsIGJ1ZiwgbGVuKTsKLX0KLQotaW50IGFoYl9idWZfd3JpdGUoc3RydWN0IHdmeF9kZXYg KndkZXYsIHUzMiBhZGRyLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCi17Ci0JcmV0dXJu IGluZGlyZWN0X3dyaXRlX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX0FIQl9EUE9SVCwgYWRkciwgYnVm LCBsZW4pOwotfQotCi1pbnQgc3JhbV9yZWdfcmVhZChzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMy IGFkZHIsIHUzMiAqdmFsKQotewotCXJldHVybiBpbmRpcmVjdF9yZWFkMzJfbG9ja2VkKHdkZXYs IFdGWF9SRUdfU1JBTV9EUE9SVCwgYWRkciwgdmFsKTsKLX0KLQotaW50IGFoYl9yZWdfcmVhZChz dHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIGFkZHIsIHUzMiAqdmFsKQotewotCXJldHVybiBpbmRp cmVjdF9yZWFkMzJfbG9ja2VkKHdkZXYsIFdGWF9SRUdfQUhCX0RQT1JULCBhZGRyLCB2YWwpOwot fQotCi1pbnQgc3JhbV9yZWdfd3JpdGUoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBhZGRyLCB1 MzIgdmFsKQotewotCXJldHVybiBpbmRpcmVjdF93cml0ZTMyX2xvY2tlZCh3ZGV2LCBXRlhfUkVH X1NSQU1fRFBPUlQsIGFkZHIsIHZhbCk7Ci19Ci0KLWludCBhaGJfcmVnX3dyaXRlKHN0cnVjdCB3 ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgdTMyIHZhbCkKLXsKLQlyZXR1cm4gaW5kaXJlY3Rfd3Jp dGUzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19BSEJfRFBPUlQsIGFkZHIsIHZhbCk7Ci19Ci0KLWlu dCBjb25maWdfcmVnX3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiAqdmFsKQotewotCXJl dHVybiByZWFkMzJfbG9ja2VkKHdkZXYsIFdGWF9SRUdfQ09ORklHLCB2YWwpOwotfQotCi1pbnQg Y29uZmlnX3JlZ193cml0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIHZhbCkKLXsKLQlyZXR1 cm4gd3JpdGUzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19DT05GSUcsIHZhbCk7Ci19Ci0KLWludCBj b25maWdfcmVnX3dyaXRlX2JpdHMoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBtYXNrLCB1MzIg dmFsKQotewotCXJldHVybiB3cml0ZTMyX2JpdHNfbG9ja2VkKHdkZXYsIFdGWF9SRUdfQ09ORklH LCBtYXNrLCB2YWwpOwotfQotCi1pbnQgY29udHJvbF9yZWdfcmVhZChzdHJ1Y3Qgd2Z4X2RldiAq d2RldiwgdTMyICp2YWwpCi17Ci0JcmV0dXJuIHJlYWQzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19D T05UUk9MLCB2YWwpOwotfQotCi1pbnQgY29udHJvbF9yZWdfd3JpdGUoc3RydWN0IHdmeF9kZXYg KndkZXYsIHUzMiB2YWwpCi17Ci0JcmV0dXJuIHdyaXRlMzJfbG9ja2VkKHdkZXYsIFdGWF9SRUdf Q09OVFJPTCwgdmFsKTsKLX0KLQotaW50IGNvbnRyb2xfcmVnX3dyaXRlX2JpdHMoc3RydWN0IHdm eF9kZXYgKndkZXYsIHUzMiBtYXNrLCB1MzIgdmFsKQotewotCXJldHVybiB3cml0ZTMyX2JpdHNf bG9ja2VkKHdkZXYsIFdGWF9SRUdfQ09OVFJPTCwgbWFzaywgdmFsKTsKLX0KLQotaW50IGlncHJf cmVnX3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCBpbmRleCwgdTMyICp2YWwpCi17Ci0J aW50IHJldDsKLQotCSp2YWwgPSB+MDsgLy8gTmV2ZXIgcmV0dXJuIHVuZGVmaW5lZCB2YWx1ZQot CXJldCA9IHdyaXRlMzJfbG9ja2VkKHdkZXYsIFdGWF9SRUdfU0VUX0dFTl9SX1csIElHUFJfUlcg fCBpbmRleCA8PCAyNCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQlyZXQgPSByZWFkMzJf bG9ja2VkKHdkZXYsIFdGWF9SRUdfU0VUX0dFTl9SX1csIHZhbCk7Ci0JaWYgKHJldCkKLQkJcmV0 dXJuIHJldDsKLQkqdmFsICY9IElHUFJfVkFMVUU7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IGln cHJfcmVnX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgaW5kZXgsIHUzMiB2YWwpCi17 Ci0JcmV0dXJuIHdyaXRlMzJfbG9ja2VkKHdkZXYsIFdGWF9SRUdfU0VUX0dFTl9SX1csIGluZGV4 IDw8IDI0IHwgdmFsKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvaHdpby5o IGIvZHJpdmVycy9zdGFnaW5nL3dmeC9od2lvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDBiOGU0ZjcxNTdkZi4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93Zngv aHdpby5oCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwotLyoKLSAqIExvdy1sZXZlbCBBUEkuCi0gKgotICog Q29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuCi0gKiBD b3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCi0gKi8KLSNpZm5kZWYgV0ZYX0hXSU9fSAot I2RlZmluZSBXRlhfSFdJT19ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi1zdHJ1Y3Qg d2Z4X2RldjsKLQotaW50IHdmeF9kYXRhX3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHZvaWQg KmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pOwotaW50IHdmeF9kYXRhX3dyaXRlKHN0cnVjdCB3ZnhfZGV2 ICp3ZGV2LCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBidWZfbGVuKTsKLQotaW50IHNyYW1fYnVm X3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBhZGRyLCB2b2lkICpidWYsIHNpemVfdCBs ZW4pOwotaW50IHNyYW1fYnVmX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwg Y29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKLQotaW50IGFoYl9idWZfcmVhZChzdHJ1Y3Qg d2Z4X2RldiAqd2RldiwgdTMyIGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7Ci1pbnQgYWhi X2J1Zl93cml0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIGFkZHIsIGNvbnN0IHZvaWQgKmJ1 Ziwgc2l6ZV90IGxlbik7Ci0KLWludCBzcmFtX3JlZ19yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2 LCB1MzIgYWRkciwgdTMyICp2YWwpOwotaW50IHNyYW1fcmVnX3dyaXRlKHN0cnVjdCB3ZnhfZGV2 ICp3ZGV2LCB1MzIgYWRkciwgdTMyIHZhbCk7Ci0KLWludCBhaGJfcmVnX3JlYWQoc3RydWN0IHdm eF9kZXYgKndkZXYsIHUzMiBhZGRyLCB1MzIgKnZhbCk7Ci1pbnQgYWhiX3JlZ193cml0ZShzdHJ1 Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIGFkZHIsIHUzMiB2YWwpOwotCi0jZGVmaW5lIENGR19FUlJf U1BJX0ZSQU1FICAgICAgICAgIDB4MDAwMDAwMDEgLy8gb25seSB3aXRoIFNQSQotI2RlZmluZSBD RkdfRVJSX1NESU9fQlVGX01JU01BVENIICAweDAwMDAwMDAxIC8vIG9ubHkgd2l0aCBTRElPCi0j ZGVmaW5lIENGR19FUlJfQlVGX1VOREVSUlVOICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgQ0ZH X0VSUl9EQVRBX0lOX1RPT19MQVJHRSAgMHgwMDAwMDAwNAotI2RlZmluZSBDRkdfRVJSX0hPU1Rf Tk9fT1VUX1FVRVVFICAweDAwMDAwMDA4Ci0jZGVmaW5lIENGR19FUlJfQlVGX09WRVJSVU4gICAg ICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgQ0ZHX0VSUl9EQVRBX09VVF9UT09fTEFSR0UgMHgwMDAw MDAyMAotI2RlZmluZSBDRkdfRVJSX0hPU1RfTk9fSU5fUVVFVUUgICAweDAwMDAwMDQwCi0jZGVm aW5lIENGR19FUlJfSE9TVF9DUkNfTUlTUyAgICAgIDB4MDAwMDAwODAgLy8gb25seSB3aXRoIFNE SU8KLSNkZWZpbmUgQ0ZHX1NQSV9JR05PUkVfQ1MgICAgICAgICAgMHgwMDAwMDA4MCAvLyBvbmx5 IHdpdGggU1BJCi0jZGVmaW5lIENGR19CWVRFX09SREVSX01BU0sgICAgICAgIDB4MDAwMDAzMDAg Ly8gb25seSB3cml0YWJsZSB3aXRoIFNQSQotI2RlZmluZSAgICAgQ0ZHX0JZVEVfT1JERVJfQkFE QyAgICAweDAwMDAwMDAwCi0jZGVmaW5lICAgICBDRkdfQllURV9PUkRFUl9EQ0JBICAgIDB4MDAw MDAxMDAKLSNkZWZpbmUgICAgIENGR19CWVRFX09SREVSX0FCQ0QgICAgMHgwMDAwMDIwMCAvLyBT RElPIGFsd2F5cyB1c2UgdGhpcyB2YWx1ZQotI2RlZmluZSBDRkdfRElSRUNUX0FDQ0VTU19NT0RF ICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIENGR19QUkVGRVRDSF9BSEIgICAgICAgICAgIDB4MDAw MDA4MDAKLSNkZWZpbmUgQ0ZHX0RJU0FCTEVfQ1BVX0NMSyAgICAgICAgMHgwMDAwMTAwMAotI2Rl ZmluZSBDRkdfUFJFRkVUQ0hfU1JBTSAgICAgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIENGR19D UFVfUkVTRVQgICAgICAgICAgICAgIDB4MDAwMDQwMDAKLSNkZWZpbmUgQ0ZHX1NESU9fRElTQUJM RV9JUlEgICAgICAgMHgwMDAwODAwMCAvLyBvbmx5IHdpdGggU0RJTwotI2RlZmluZSBDRkdfSVJR X0VOQUJMRV9EQVRBICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIENGR19JUlFfRU5BQkxFX1dS RFkgICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgQ0ZHX0NMS19SSVNFX0VER0UgICAgICAgICAg MHgwMDA0MDAwMAotI2RlZmluZSBDRkdfU0RJT19ESVNBQkxFX0NSQ19DSEsgICAweDAwMDgwMDAw IC8vIG9ubHkgd2l0aCBTRElPCi0jZGVmaW5lIENGR19SRVNFUlZFRCAgICAgICAgICAgICAgIDB4 MDBGMDAwMDAKLSNkZWZpbmUgQ0ZHX0RFVklDRV9JRF9NQUpPUiAgICAgICAgMHgwNzAwMDAwMAot I2RlZmluZSBDRkdfREVWSUNFX0lEX1JFU0VSVkVEICAgICAweDc4MDAwMDAwCi0jZGVmaW5lIENG R19ERVZJQ0VfSURfVFlQRSAgICAgICAgIDB4ODAwMDAwMDAKLWludCBjb25maWdfcmVnX3JlYWQo c3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiAqdmFsKTsKLWludCBjb25maWdfcmVnX3dyaXRlKHN0 cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgdmFsKTsKLWludCBjb25maWdfcmVnX3dyaXRlX2JpdHMo c3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBtYXNrLCB1MzIgdmFsKTsKLQotI2RlZmluZSBDVFJM X05FWFRfTEVOX01BU0sgICAweDAwMDAwRkZGCi0jZGVmaW5lIENUUkxfV0xBTl9XQUtFVVAgICAg IDB4MDAwMDEwMDAKLSNkZWZpbmUgQ1RSTF9XTEFOX1JFQURZICAgICAgMHgwMDAwMjAwMAotaW50 IGNvbnRyb2xfcmVnX3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiAqdmFsKTsKLWludCBj b250cm9sX3JlZ193cml0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIHZhbCk7Ci1pbnQgY29u dHJvbF9yZWdfd3JpdGVfYml0cyhzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIG1hc2ssIHUzMiB2 YWwpOwotCi0jZGVmaW5lIElHUFJfUlcgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBJR1BS X0lOREVYICAgICAgIDB4N0YwMDAwMDAKLSNkZWZpbmUgSUdQUl9WQUxVRSAgICAgICAweDAwRkZG RkZGCi1pbnQgaWdwcl9yZWdfcmVhZChzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IGluZGV4LCB1 MzIgKnZhbCk7Ci1pbnQgaWdwcl9yZWdfd3JpdGUoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCBp bmRleCwgdTMyIHZhbCk7Ci0KLSNlbmRpZiAvKiBXRlhfSFdJT19IICovCmRpZmYgLS1naXQgYS9k cml2ZXJzL3N0YWdpbmcvd2Z4L2tleS5jIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9rZXkuYwpkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFiODJiZWQ0YzFiLi4wMDAwMDAwMDAwMDAKLS0t IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9rZXkuYworKysgL2Rldi9udWxsCkBAIC0xLDI0MSArMCww IEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0vKgotICogS2V5 IG1hbmFnZW1lbnQgcmVsYXRlZCBmdW5jdGlvbnMuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE3 LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAs IFNULUVyaWNzc29uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1 ZGUgPG5ldC9tYWM4MDIxMS5oPgotCi0jaW5jbHVkZSAia2V5LmgiCi0jaW5jbHVkZSAid2Z4Lmgi Ci0jaW5jbHVkZSAiaGlmX3R4X21pYi5oIgotCi1zdGF0aWMgaW50IHdmeF9hbGxvY19rZXkoc3Ry dWN0IHdmeF9kZXYgKndkZXYpCi17Ci0JaW50IGlkeDsKLQotCWlkeCA9IGZmcyh+d2Rldi0+a2V5 X21hcCkgLSAxOwotCWlmIChpZHggPCAwIHx8IGlkeCA+PSBNQVhfS0VZX0VOVFJJRVMpCi0JCXJl dHVybiAtMTsKLQotCXdkZXYtPmtleV9tYXAgfD0gQklUKGlkeCk7Ci0JcmV0dXJuIGlkeDsKLX0K LQotc3RhdGljIHZvaWQgd2Z4X2ZyZWVfa2V5KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgaWR4 KQotewotCVdBUk4oISh3ZGV2LT5rZXlfbWFwICYgQklUKGlkeCkpLCAiaW5jb25zaXN0ZW50IGtl eSBhbGxvY2F0aW9uIik7Ci0Jd2Rldi0+a2V5X21hcCAmPSB+QklUKGlkeCk7Ci19Ci0KLXN0YXRp YyB1OCBmaWxsX3dlcF9wYWlyKHN0cnVjdCBoaWZfd2VwX3BhaXJ3aXNlX2tleSAqbXNnLAotCQkJ ICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXksIHU4ICpwZWVyX2FkZHIpCi17Ci0J V0FSTihrZXktPmtleWxlbiA+IHNpemVvZihtc2ctPmtleV9kYXRhKSwgImluY29uc2lzdGVudCBk YXRhIik7Ci0JbXNnLT5rZXlfbGVuZ3RoID0ga2V5LT5rZXlsZW47Ci0JbWVtY3B5KG1zZy0+a2V5 X2RhdGEsIGtleS0+a2V5LCBrZXktPmtleWxlbik7Ci0JZXRoZXJfYWRkcl9jb3B5KG1zZy0+cGVl cl9hZGRyZXNzLCBwZWVyX2FkZHIpOwotCXJldHVybiBISUZfS0VZX1RZUEVfV0VQX1BBSVJXSVNF OwotfQotCi1zdGF0aWMgdTggZmlsbF93ZXBfZ3JvdXAoc3RydWN0IGhpZl93ZXBfZ3JvdXBfa2V5 ICptc2csCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCi17Ci0JV0FS TihrZXktPmtleWxlbiA+IHNpemVvZihtc2ctPmtleV9kYXRhKSwgImluY29uc2lzdGVudCBkYXRh Iik7Ci0JbXNnLT5rZXlfaWQgPSBrZXktPmtleWlkeDsKLQltc2ctPmtleV9sZW5ndGggPSBrZXkt PmtleWxlbjsKLQltZW1jcHkobXNnLT5rZXlfZGF0YSwga2V5LT5rZXksIGtleS0+a2V5bGVuKTsK LQlyZXR1cm4gSElGX0tFWV9UWVBFX1dFUF9ERUZBVUxUOwotfQotCi1zdGF0aWMgdTggZmlsbF90 a2lwX3BhaXIoc3RydWN0IGhpZl90a2lwX3BhaXJ3aXNlX2tleSAqbXNnLAotCQkJICAgICAgc3Ry dWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5LCB1OCAqcGVlcl9hZGRyKQotewotCXU4ICprZXli dWYgPSBrZXktPmtleTsKLQotCVdBUk4oa2V5LT5rZXlsZW4gIT0gc2l6ZW9mKG1zZy0+dGtpcF9r ZXlfZGF0YSkKLQkJCSAgICArIHNpemVvZihtc2ctPnR4X21pY19rZXkpCi0JCQkgICAgKyBzaXpl b2YobXNnLT5yeF9taWNfa2V5KSwgImluY29uc2lzdGVudCBkYXRhIik7Ci0JbWVtY3B5KG1zZy0+ dGtpcF9rZXlfZGF0YSwga2V5YnVmLCBzaXplb2YobXNnLT50a2lwX2tleV9kYXRhKSk7Ci0Ja2V5 YnVmICs9IHNpemVvZihtc2ctPnRraXBfa2V5X2RhdGEpOwotCW1lbWNweShtc2ctPnR4X21pY19r ZXksIGtleWJ1Ziwgc2l6ZW9mKG1zZy0+dHhfbWljX2tleSkpOwotCWtleWJ1ZiArPSBzaXplb2Yo bXNnLT50eF9taWNfa2V5KTsKLQltZW1jcHkobXNnLT5yeF9taWNfa2V5LCBrZXlidWYsIHNpemVv Zihtc2ctPnJ4X21pY19rZXkpKTsKLQlldGhlcl9hZGRyX2NvcHkobXNnLT5wZWVyX2FkZHJlc3Ms IHBlZXJfYWRkcik7Ci0JcmV0dXJuIEhJRl9LRVlfVFlQRV9US0lQX1BBSVJXSVNFOwotfQotCi1z dGF0aWMgdTggZmlsbF90a2lwX2dyb3VwKHN0cnVjdCBoaWZfdGtpcF9ncm91cF9rZXkgKm1zZywK LQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXksCi0JCQkgICAgICAgc3Ry dWN0IGllZWU4MDIxMV9rZXlfc2VxICpzZXEsCi0JCQkgICAgICAgZW51bSBubDgwMjExX2lmdHlw ZSBpZnR5cGUpCi17Ci0JdTggKmtleWJ1ZiA9IGtleS0+a2V5OwotCi0JV0FSTihrZXktPmtleWxl biAhPSBzaXplb2YobXNnLT50a2lwX2tleV9kYXRhKQotCQkJICAgICsgMiAqIHNpemVvZihtc2ct PnJ4X21pY19rZXkpLCAiaW5jb25zaXN0ZW50IGRhdGEiKTsKLQltc2ctPmtleV9pZCA9IGtleS0+ a2V5aWR4OwotCW1lbWNweShtc2ctPnJ4X3NlcXVlbmNlX2NvdW50ZXIsCi0JICAgICAgICZzZXEt PnRraXAuaXYxNiwgc2l6ZW9mKHNlcS0+dGtpcC5pdjE2KSk7Ci0JbWVtY3B5KG1zZy0+cnhfc2Vx dWVuY2VfY291bnRlciArIHNpemVvZih1MTYpLAotCSAgICAgICAmc2VxLT50a2lwLml2MzIsIHNp emVvZihzZXEtPnRraXAuaXYzMikpOwotCW1lbWNweShtc2ctPnRraXBfa2V5X2RhdGEsIGtleWJ1 Ziwgc2l6ZW9mKG1zZy0+dGtpcF9rZXlfZGF0YSkpOwotCWtleWJ1ZiArPSBzaXplb2YobXNnLT50 a2lwX2tleV9kYXRhKTsKLQlpZiAoaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKQotCQkvLyBV c2UgVHggTUlDIEtleQotCQltZW1jcHkobXNnLT5yeF9taWNfa2V5LCBrZXlidWYgKyAwLCBzaXpl b2YobXNnLT5yeF9taWNfa2V5KSk7Ci0JZWxzZQotCQkvLyBVc2UgUnggTUlDIEtleQotCQltZW1j cHkobXNnLT5yeF9taWNfa2V5LCBrZXlidWYgKyA4LCBzaXplb2YobXNnLT5yeF9taWNfa2V5KSk7 Ci0JcmV0dXJuIEhJRl9LRVlfVFlQRV9US0lQX0dST1VQOwotfQotCi1zdGF0aWMgdTggZmlsbF9j Y21wX3BhaXIoc3RydWN0IGhpZl9hZXNfcGFpcndpc2Vfa2V5ICptc2csCi0JCQkgICAgICBzdHJ1 Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXksIHU4ICpwZWVyX2FkZHIpCi17Ci0JV0FSTihrZXkt PmtleWxlbiAhPSBzaXplb2YobXNnLT5hZXNfa2V5X2RhdGEpLCAiaW5jb25zaXN0ZW50IGRhdGEi KTsKLQlldGhlcl9hZGRyX2NvcHkobXNnLT5wZWVyX2FkZHJlc3MsIHBlZXJfYWRkcik7Ci0JbWVt Y3B5KG1zZy0+YWVzX2tleV9kYXRhLCBrZXktPmtleSwga2V5LT5rZXlsZW4pOwotCXJldHVybiBI SUZfS0VZX1RZUEVfQUVTX1BBSVJXSVNFOwotfQotCi1zdGF0aWMgdTggZmlsbF9jY21wX2dyb3Vw KHN0cnVjdCBoaWZfYWVzX2dyb3VwX2tleSAqbXNnLAotCQkJICAgICAgIHN0cnVjdCBpZWVlODAy MTFfa2V5X2NvbmYgKmtleSwKLQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9zZXEgKnNl cSkKLXsKLQlXQVJOKGtleS0+a2V5bGVuICE9IHNpemVvZihtc2ctPmFlc19rZXlfZGF0YSksICJp bmNvbnNpc3RlbnQgZGF0YSIpOwotCW1lbWNweShtc2ctPmFlc19rZXlfZGF0YSwga2V5LT5rZXks IGtleS0+a2V5bGVuKTsKLQltZW1jcHkobXNnLT5yeF9zZXF1ZW5jZV9jb3VudGVyLCBzZXEtPmNj bXAucG4sIHNpemVvZihzZXEtPmNjbXAucG4pKTsKLQltZW1yZXZlcnNlKG1zZy0+cnhfc2VxdWVu Y2VfY291bnRlciwgc2l6ZW9mKHNlcS0+Y2NtcC5wbikpOwotCW1zZy0+a2V5X2lkID0ga2V5LT5r ZXlpZHg7Ci0JcmV0dXJuIEhJRl9LRVlfVFlQRV9BRVNfR1JPVVA7Ci19Ci0KLXN0YXRpYyB1OCBm aWxsX3NtczRfcGFpcihzdHJ1Y3QgaGlmX3dhcGlfcGFpcndpc2Vfa2V5ICptc2csCi0JCQkgICAg ICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXksIHU4ICpwZWVyX2FkZHIpCi17Ci0JdTgg KmtleWJ1ZiA9IGtleS0+a2V5OwotCi0JV0FSTihrZXktPmtleWxlbiAhPSBzaXplb2YobXNnLT53 YXBpX2tleV9kYXRhKQotCQkJICAgICsgc2l6ZW9mKG1zZy0+bWljX2tleV9kYXRhKSwgImluY29u c2lzdGVudCBkYXRhIik7Ci0JZXRoZXJfYWRkcl9jb3B5KG1zZy0+cGVlcl9hZGRyZXNzLCBwZWVy X2FkZHIpOwotCW1lbWNweShtc2ctPndhcGlfa2V5X2RhdGEsIGtleWJ1Ziwgc2l6ZW9mKG1zZy0+ d2FwaV9rZXlfZGF0YSkpOwotCWtleWJ1ZiArPSBzaXplb2YobXNnLT53YXBpX2tleV9kYXRhKTsK LQltZW1jcHkobXNnLT5taWNfa2V5X2RhdGEsIGtleWJ1Ziwgc2l6ZW9mKG1zZy0+bWljX2tleV9k YXRhKSk7Ci0JbXNnLT5rZXlfaWQgPSBrZXktPmtleWlkeDsKLQlyZXR1cm4gSElGX0tFWV9UWVBF X1dBUElfUEFJUldJU0U7Ci19Ci0KLXN0YXRpYyB1OCBmaWxsX3NtczRfZ3JvdXAoc3RydWN0IGhp Zl93YXBpX2dyb3VwX2tleSAqbXNnLAotCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2Nv bmYgKmtleSkKLXsKLQl1OCAqa2V5YnVmID0ga2V5LT5rZXk7Ci0KLQlXQVJOKGtleS0+a2V5bGVu ICE9IHNpemVvZihtc2ctPndhcGlfa2V5X2RhdGEpCi0JCQkgICAgKyBzaXplb2YobXNnLT5taWNf a2V5X2RhdGEpLCAiaW5jb25zaXN0ZW50IGRhdGEiKTsKLQltZW1jcHkobXNnLT53YXBpX2tleV9k YXRhLCBrZXlidWYsIHNpemVvZihtc2ctPndhcGlfa2V5X2RhdGEpKTsKLQlrZXlidWYgKz0gc2l6 ZW9mKG1zZy0+d2FwaV9rZXlfZGF0YSk7Ci0JbWVtY3B5KG1zZy0+bWljX2tleV9kYXRhLCBrZXli dWYsIHNpemVvZihtc2ctPm1pY19rZXlfZGF0YSkpOwotCW1zZy0+a2V5X2lkID0ga2V5LT5rZXlp ZHg7Ci0JcmV0dXJuIEhJRl9LRVlfVFlQRV9XQVBJX0dST1VQOwotfQotCi1zdGF0aWMgdTggZmls bF9hZXNfY21hY19ncm91cChzdHJ1Y3QgaGlmX2lndGtfZ3JvdXBfa2V5ICptc2csCi0JCQkJICAg c3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5LAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFf a2V5X3NlcSAqc2VxKQotewotCVdBUk4oa2V5LT5rZXlsZW4gIT0gc2l6ZW9mKG1zZy0+aWd0a19r ZXlfZGF0YSksICJpbmNvbnNpc3RlbnQgZGF0YSIpOwotCW1lbWNweShtc2ctPmlndGtfa2V5X2Rh dGEsIGtleS0+a2V5LCBrZXktPmtleWxlbik7Ci0JbWVtY3B5KG1zZy0+aXBuLCBzZXEtPmFlc19j bWFjLnBuLCBzaXplb2Yoc2VxLT5hZXNfY21hYy5wbikpOwotCW1lbXJldmVyc2UobXNnLT5pcG4s IHNpemVvZihzZXEtPmFlc19jbWFjLnBuKSk7Ci0JbXNnLT5rZXlfaWQgPSBrZXktPmtleWlkeDsK LQlyZXR1cm4gSElGX0tFWV9UWVBFX0lHVEtfR1JPVVA7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4X2Fk ZF9rZXkoc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCi0J CSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCi17Ci0JaW50IHJldDsKLQlz dHJ1Y3QgaGlmX3JlcV9hZGRfa2V5IGsgPSB7IH07Ci0Jc3RydWN0IGllZWU4MDIxMV9rZXlfc2Vx IHNlcTsKLQlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IHd2aWYtPndkZXY7Ci0JaW50IGlkeCA9IHdm eF9hbGxvY19rZXkod3ZpZi0+d2Rldik7Ci0JYm9vbCBwYWlyd2lzZSA9IGtleS0+ZmxhZ3MgJiBJ RUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0U7Ci0KLQlXQVJOKGtleS0+ZmxhZ3MgJiBJRUVFODAy MTFfS0VZX0ZMQUdfUEFJUldJU0UgJiYgIXN0YSwgImluY29uc2lzdGVudCBkYXRhIik7Ci0JaWVl ZTgwMjExX2dldF9rZXlfcnhfc2VxKGtleSwgMCwgJnNlcSk7Ci0JaWYgKGlkeCA8IDApCi0JCXJl dHVybiAtRUlOVkFMOwotCWsuaW50X2lkID0gd3ZpZi0+aWQ7Ci0Jay5lbnRyeV9pbmRleCA9IGlk eDsKLQlpZiAoa2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDAgfHwKLQkgICAg a2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0KSB7Ci0JCWlmIChwYWlyd2lz ZSkKLQkJCWsudHlwZSA9IGZpbGxfd2VwX3BhaXIoJmsua2V5LndlcF9wYWlyd2lzZV9rZXksIGtl eSwKLQkJCQkJICAgICAgIHN0YS0+YWRkcik7Ci0JCWVsc2UKLQkJCWsudHlwZSA9IGZpbGxfd2Vw X2dyb3VwKCZrLmtleS53ZXBfZ3JvdXBfa2V5LCBrZXkpOwotCX0gZWxzZSBpZiAoa2V5LT5jaXBo ZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCkgewotCQlpZiAocGFpcndpc2UpCi0JCQlrLnR5 cGUgPSBmaWxsX3RraXBfcGFpcigmay5rZXkudGtpcF9wYWlyd2lzZV9rZXksIGtleSwKLQkJCQkJ CXN0YS0+YWRkcik7Ci0JCWVsc2UKLQkJCWsudHlwZSA9IGZpbGxfdGtpcF9ncm91cCgmay5rZXku dGtpcF9ncm91cF9rZXksIGtleSwKLQkJCQkJCSAmc2VxLCB3dmlmLT52aWYtPnR5cGUpOwotCX0g ZWxzZSBpZiAoa2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUCkgewotCQlpZiAo cGFpcndpc2UpCi0JCQlrLnR5cGUgPSBmaWxsX2NjbXBfcGFpcigmay5rZXkuYWVzX3BhaXJ3aXNl X2tleSwga2V5LAotCQkJCQkJc3RhLT5hZGRyKTsKLQkJZWxzZQotCQkJay50eXBlID0gZmlsbF9j Y21wX2dyb3VwKCZrLmtleS5hZXNfZ3JvdXBfa2V5LCBrZXksCi0JCQkJCQkgJnNlcSk7Ci0JfSBl bHNlIGlmIChrZXktPmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9TTVM0KSB7Ci0JCWlmIChw YWlyd2lzZSkKLQkJCWsudHlwZSA9IGZpbGxfc21zNF9wYWlyKCZrLmtleS53YXBpX3BhaXJ3aXNl X2tleSwga2V5LAotCQkJCQkJc3RhLT5hZGRyKTsKLQkJZWxzZQotCQkJay50eXBlID0gZmlsbF9z bXM0X2dyb3VwKCZrLmtleS53YXBpX2dyb3VwX2tleSwga2V5KTsKLQl9IGVsc2UgaWYgKGtleS0+ Y2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDKSB7Ci0JCWsudHlwZSA9IGZpbGxf YWVzX2NtYWNfZ3JvdXAoJmsua2V5LmlndGtfZ3JvdXBfa2V5LCBrZXksICZzZXEpOwotCQlrZXkt PmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9NTUlFOwotCX0gZWxzZSB7Ci0J CWRldl93YXJuKHdkZXYtPmRldiwgInVuc3VwcG9ydGVkIGtleSB0eXBlICVkXG4iLCBrZXktPmNp cGhlcik7Ci0JCXdmeF9mcmVlX2tleSh3ZGV2LCBpZHgpOwotCQlyZXR1cm4gLUVPUE5PVFNVUFA7 Ci0JfQotCXJldCA9IGhpZl9hZGRfa2V5KHdkZXYsICZrKTsKLQlpZiAocmV0KSB7Ci0JCXdmeF9m cmVlX2tleSh3ZGV2LCBpZHgpOwotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCWtleS0+Zmxh Z3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX1BVVF9JVl9TUEFDRSB8Ci0JCSAgICAgIElFRUU4MDIx MV9LRVlfRkxBR19SRVNFUlZFX1RBSUxST09NOwotCWtleS0+aHdfa2V5X2lkeCA9IGlkeDsKLQly ZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3ZnhfcmVtb3ZlX2tleShzdHJ1Y3Qgd2Z4X3ZpZiAq d3ZpZiwgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQotewotCVdBUk4oa2V5LT5od19r ZXlfaWR4ID49IE1BWF9LRVlfRU5UUklFUywgImNvcnJ1cHRlZCBod19rZXlfaWR4Iik7Ci0Jd2Z4 X2ZyZWVfa2V5KHd2aWYtPndkZXYsIGtleS0+aHdfa2V5X2lkeCk7Ci0JcmV0dXJuIGhpZl9yZW1v dmVfa2V5KHd2aWYtPndkZXYsIGtleS0+aHdfa2V5X2lkeCk7Ci19Ci0KLWludCB3Znhfc2V0X2tl eShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsCi0JCXN0cnVj dCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCi0JCXN0cnVj dCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKLXsKLQlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7Ci0J c3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYgKil2aWYtPmRydl9wcml2Owot Ci0JbXV0ZXhfbG9jaygmd3ZpZi0+d2Rldi0+Y29uZl9tdXRleCk7Ci0JaWYgKGNtZCA9PSBTRVRf S0VZKQotCQlyZXQgPSB3ZnhfYWRkX2tleSh3dmlmLCBzdGEsIGtleSk7Ci0JaWYgKGNtZCA9PSBE SVNBQkxFX0tFWSkKLQkJcmV0ID0gd2Z4X3JlbW92ZV9rZXkod3ZpZiwga2V5KTsKLQltdXRleF91 bmxvY2soJnd2aWYtPndkZXYtPmNvbmZfbXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0KZGlmZiAt LWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93Zngva2V5LmggYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2tl eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MGE0NGQwY2EzNWUuLjAwMDAwMDAw MDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2tleS5oCisrKyAvZGV2L251bGwKQEAgLTEs MjAgKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwot LyoKLSAqIEltcGxlbWVudGF0aW9uIG9mIG1hYzgwMjExIEFQSS4KLSAqCi0gKiBDb3B5cmlnaHQg KGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAo YykgMjAxMCwgU1QtRXJpY3Nzb24KLSAqLwotI2lmbmRlZiBXRlhfS0VZX0gKLSNkZWZpbmUgV0ZY X0tFWV9ICi0KLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLQotc3RydWN0IHdmeF9kZXY7Ci1z dHJ1Y3Qgd2Z4X3ZpZjsKLQotaW50IHdmeF9zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3 LCBlbnVtIHNldF9rZXlfY21kIGNtZCwKLQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc3Ry dWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKLQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5 KTsKLQotI2VuZGlmIC8qIFdGWF9TVEFfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5n L3dmeC9tYWluLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L21haW4uYwpkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggZTdiYzE5ODgxMjRhLi4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9z dGFnaW5nL3dmeC9tYWluLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0OTAgKzAsMCBAQAotLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQotLyoKLSAqIERldmljZSBwcm9iZSBh bmQgcmVnaXN0ZXIuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFi b3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCi0gKiBD b3B5cmlnaHQgKGMpIDIwMDgsIEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5u ZXQ+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz dWJzaWRpYXJ5KC1pZXMpLgotICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDksIENocmlzdGlhbiBM YW1wYXJ0ZXIgPGNodW5rZWV5QHdlYi5kZT4KLSAqIENvcHlyaWdodCAoYykgMjAwNiwgTWljaGFl bCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAw NiBKZWFuLUJhcHRpc3RlIE5vdGUgPGpibm90ZUBnbWFpbC5jb20+LCBldCBhbC4KLSAqLwotI2lu Y2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L29mLmg+Ci0jaW5jbHVkZSA8 bGludXgvb2ZfbmV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgotI2luY2x1 ZGUgPGxpbnV4L21tYy9zZGlvX2Z1bmMuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0j aW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5o PgotCi0jaW5jbHVkZSAibWFpbi5oIgotI2luY2x1ZGUgIndmeC5oIgotI2luY2x1ZGUgImZ3aW8u aCIKLSNpbmNsdWRlICJod2lvLmgiCi0jaW5jbHVkZSAiYnVzLmgiCi0jaW5jbHVkZSAiYmguaCIK LSNpbmNsdWRlICJzdGEuaCIKLSNpbmNsdWRlICJrZXkuaCIKLSNpbmNsdWRlICJzY2FuLmgiCi0j aW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJkYXRhX3R4LmgiCi0jaW5jbHVkZSAiaGlmX3R4 X21pYi5oIgotI2luY2x1ZGUgImhpZl9hcGlfY21kLmgiCi0KLSNkZWZpbmUgV0ZYX1BEU19NQVhf U0laRSAxNTAwCi0KLU1PRFVMRV9ERVNDUklQVElPTigiU2lsaWNvbiBMYWJzIDgwMi4xMSBXaXJl bGVzcyBMQU4gZHJpdmVyIGZvciBXRngiKTsKLU1PRFVMRV9BVVRIT1IoIkrDqXLDtG1lIFBvdWls bGVyIDxqZXJvbWUucG91aWxsZXJAc2lsYWJzLmNvbT4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwi KTsKLQotI2RlZmluZSBSQVRFVEFCX0VOVChfcmF0ZSwgX3JhdGVpZCwgX2ZsYWdzKSB7IFwKLQku Yml0cmF0ZSAgPSAoX3JhdGUpLCAgIFwKLQkuaHdfdmFsdWUgPSAoX3JhdGVpZCksIFwKLQkuZmxh Z3MgICAgPSAoX2ZsYWdzKSwgIFwKLX0KLQotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSB3 ZnhfcmF0ZXNbXSA9IHsKLQlSQVRFVEFCX0VOVCgxMCwgIDAsICAwKSwKLQlSQVRFVEFCX0VOVCgy MCwgIDEsICBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSksCi0JUkFURVRBQl9FTlQoNTUs ICAyLCAgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpLAotCVJBVEVUQUJfRU5UKDExMCwg MywgIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFKSwKLQlSQVRFVEFCX0VOVCg2MCwgIDYs ICAwKSwKLQlSQVRFVEFCX0VOVCg5MCwgIDcsICAwKSwKLQlSQVRFVEFCX0VOVCgxMjAsIDgsICAw KSwKLQlSQVRFVEFCX0VOVCgxODAsIDksICAwKSwKLQlSQVRFVEFCX0VOVCgyNDAsIDEwLCAwKSwK LQlSQVRFVEFCX0VOVCgzNjAsIDExLCAwKSwKLQlSQVRFVEFCX0VOVCg0ODAsIDEyLCAwKSwKLQlS QVRFVEFCX0VOVCg1NDAsIDEzLCAwKSwKLX07Ci0KLSNkZWZpbmUgQ0hBTjJHKF9jaGFubmVsLCBf ZnJlcSwgX2ZsYWdzKSB7IFwKLQkuYmFuZCA9IE5MODAyMTFfQkFORF8yR0haLCBcCi0JLmNlbnRl cl9mcmVxID0gKF9mcmVxKSwgICAgXAotCS5od192YWx1ZSA9IChfY2hhbm5lbCksICAgIFwKLQku ZmxhZ3MgPSAoX2ZsYWdzKSwgICAgICAgICBcCi0JLm1heF9hbnRlbm5hX2dhaW4gPSAwLCAgICAg XAotCS5tYXhfcG93ZXIgPSAzMCwgICAgICAgICAgIFwKLX0KLQotc3RhdGljIHN0cnVjdCBpZWVl ODAyMTFfY2hhbm5lbCB3ZnhfMmdoel9jaGFudGFibGVbXSA9IHsKLQlDSEFOMkcoMSwgIDI0MTIs IDApLAotCUNIQU4yRygyLCAgMjQxNywgMCksCi0JQ0hBTjJHKDMsICAyNDIyLCAwKSwKLQlDSEFO MkcoNCwgIDI0MjcsIDApLAotCUNIQU4yRyg1LCAgMjQzMiwgMCksCi0JQ0hBTjJHKDYsICAyNDM3 LCAwKSwKLQlDSEFOMkcoNywgIDI0NDIsIDApLAotCUNIQU4yRyg4LCAgMjQ0NywgMCksCi0JQ0hB TjJHKDksICAyNDUyLCAwKSwKLQlDSEFOMkcoMTAsIDI0NTcsIDApLAotCUNIQU4yRygxMSwgMjQ2 MiwgMCksCi0JQ0hBTjJHKDEyLCAyNDY3LCAwKSwKLQlDSEFOMkcoMTMsIDI0NzIsIDApLAotCUNI QU4yRygxNCwgMjQ4NCwgMCksCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9z dXBwb3J0ZWRfYmFuZCB3ZnhfYmFuZF8yZ2h6ID0gewotCS5jaGFubmVscyA9IHdmeF8yZ2h6X2No YW50YWJsZSwKLQkubl9jaGFubmVscyA9IEFSUkFZX1NJWkUod2Z4XzJnaHpfY2hhbnRhYmxlKSwK LQkuYml0cmF0ZXMgPSB3ZnhfcmF0ZXMsCi0JLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKHdmeF9y YXRlcyksCi0JLmh0X2NhcCA9IHsKLQkJLy8gUmVjZWl2ZSBjYXBzCi0JCS5jYXAgPSBJRUVFODAy MTFfSFRfQ0FQX0dSTl9GTEQgfCBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMCB8Ci0JCSAgICAgICBJ RUVFODAyMTFfSFRfQ0FQX01BWF9BTVNEVSB8Ci0JCSAgICAgICAoMSA8PCBJRUVFODAyMTFfSFRf Q0FQX1JYX1NUQkNfU0hJRlQpLAotCQkuaHRfc3VwcG9ydGVkID0gMSwKLQkJLmFtcGR1X2ZhY3Rv ciA9IElFRUU4MDIxMV9IVF9NQVhfQU1QRFVfMTZLLAotCQkuYW1wZHVfZGVuc2l0eSA9IElFRUU4 MDIxMV9IVF9NUERVX0RFTlNJVFlfTk9ORSwKLQkJLm1jcyA9IHsKLQkJCS5yeF9tYXNrID0geyAw eEZGIH0sIC8vIE1DUzAgdG8gTUNTNwotCQkJLnJ4X2hpZ2hlc3QgPSBjcHVfdG9fbGUxNig3Miks Ci0JCQkudHhfcGFyYW1zID0gSUVFRTgwMjExX0hUX01DU19UWF9ERUZJTkVELAotCQl9LAotCX0s Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9pZmFjZV9saW1pdCB3ZGV2X2lm YWNlX2xpbWl0c1tdID0gewotCXsgLm1heCA9IDEsIC50eXBlcyA9IEJJVChOTDgwMjExX0lGVFlQ RV9TVEFUSU9OKSB9LAotCXsgLm1heCA9IDEsIC50eXBlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9B UCkgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2NvbWJpbmF0 aW9uIHdmeF9pZmFjZV9jb21iaW5hdGlvbnNbXSA9IHsKLQl7Ci0JCS5udW1fZGlmZmVyZW50X2No YW5uZWxzID0gMiwKLQkJLm1heF9pbnRlcmZhY2VzID0gMiwKLQkJLmxpbWl0cyA9IHdkZXZfaWZh Y2VfbGltaXRzLAotCQkubl9saW1pdHMgPSBBUlJBWV9TSVpFKHdkZXZfaWZhY2VfbGltaXRzKSwK LQl9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgd2Z4X29wcyA9IHsK LQkuc3RhcnQJCQk9IHdmeF9zdGFydCwKLQkuc3RvcAkJCT0gd2Z4X3N0b3AsCi0JLmFkZF9pbnRl cmZhY2UJCT0gd2Z4X2FkZF9pbnRlcmZhY2UsCi0JLnJlbW92ZV9pbnRlcmZhY2UJPSB3ZnhfcmVt b3ZlX2ludGVyZmFjZSwKLQkuY29uZmlnICAgICAgICAgICAgICAgICA9IHdmeF9jb25maWcsCi0J LnR4CQkJPSB3ZnhfdHgsCi0JLmpvaW5faWJzcwkJPSB3Znhfam9pbl9pYnNzLAotCS5sZWF2ZV9p YnNzCQk9IHdmeF9sZWF2ZV9pYnNzLAotCS5jb25mX3R4CQk9IHdmeF9jb25mX3R4LAotCS5od19z Y2FuCQk9IHdmeF9od19zY2FuLAotCS5jYW5jZWxfaHdfc2NhbgkJPSB3ZnhfY2FuY2VsX2h3X3Nj YW4sCi0JLnN0YXJ0X2FwCQk9IHdmeF9zdGFydF9hcCwKLQkuc3RvcF9hcAkJPSB3Znhfc3RvcF9h cCwKLQkuc3RhX2FkZAkJPSB3Znhfc3RhX2FkZCwKLQkuc3RhX3JlbW92ZQkJPSB3Znhfc3RhX3Jl bW92ZSwKLQkuc2V0X3RpbQkJPSB3Znhfc2V0X3RpbSwKLQkuc2V0X2tleQkJPSB3Znhfc2V0X2tl eSwKLQkuc2V0X3J0c190aHJlc2hvbGQJPSB3Znhfc2V0X3J0c190aHJlc2hvbGQsCi0JLnNldF9k ZWZhdWx0X3VuaWNhc3Rfa2V5ID0gd2Z4X3NldF9kZWZhdWx0X3VuaWNhc3Rfa2V5LAotCS5ic3Nf aW5mb19jaGFuZ2VkCT0gd2Z4X2Jzc19pbmZvX2NoYW5nZWQsCi0JLmNvbmZpZ3VyZV9maWx0ZXIJ PSB3ZnhfY29uZmlndXJlX2ZpbHRlciwKLQkuYW1wZHVfYWN0aW9uCQk9IHdmeF9hbXBkdV9hY3Rp b24sCi0JLmZsdXNoCQkJPSB3ZnhfZmx1c2gsCi0JLmFkZF9jaGFuY3R4CQk9IHdmeF9hZGRfY2hh bmN0eCwKLQkucmVtb3ZlX2NoYW5jdHgJCT0gd2Z4X3JlbW92ZV9jaGFuY3R4LAotCS5jaGFuZ2Vf Y2hhbmN0eAkJPSB3ZnhfY2hhbmdlX2NoYW5jdHgsCi0JLmFzc2lnbl92aWZfY2hhbmN0eAk9IHdm eF9hc3NpZ25fdmlmX2NoYW5jdHgsCi0JLnVuYXNzaWduX3ZpZl9jaGFuY3R4CT0gd2Z4X3VuYXNz aWduX3ZpZl9jaGFuY3R4LAotfTsKLQotYm9vbCB3ZnhfYXBpX29sZGVyX3RoYW4oc3RydWN0IHdm eF9kZXYgKndkZXYsIGludCBtYWpvciwgaW50IG1pbm9yKQotewotCWlmICh3ZGV2LT5od19jYXBz LmFwaV92ZXJzaW9uX21ham9yIDwgbWFqb3IpCi0JCXJldHVybiB0cnVlOwotCWlmICh3ZGV2LT5o d19jYXBzLmFwaV92ZXJzaW9uX21ham9yID4gbWFqb3IpCi0JCXJldHVybiBmYWxzZTsKLQlpZiAo d2Rldi0+aHdfY2Fwcy5hcGlfdmVyc2lvbl9taW5vciA8IG1pbm9yKQotCQlyZXR1cm4gdHJ1ZTsK LQlyZXR1cm4gZmFsc2U7Ci19Ci0KLS8qIE5PVEU6IHdmeF9zZW5kX3BkcygpIGRlc3Ryb3kgYnVm ICovCi1pbnQgd2Z4X3NlbmRfcGRzKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1OCAqYnVmLCBzaXpl X3QgbGVuKQotewotCWludCByZXQ7Ci0JaW50IHN0YXJ0LCBicmFjZV9sZXZlbCwgaTsKLQotCXN0 YXJ0ID0gMDsKLQlicmFjZV9sZXZlbCA9IDA7Ci0JaWYgKGJ1ZlswXSAhPSAneycpIHsKLQkJZGV2 X2Vycih3ZGV2LT5kZXYsICJ2YWxpZCBQRFMgc3RhcnQgd2l0aCAneycuIERpZCB5b3UgZm9yZ2V0 IHRvIGNvbXByZXNzIGl0P1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlmb3IgKGkgPSAx OyBpIDwgbGVuIC0gMTsgaSsrKSB7Ci0JCWlmIChidWZbaV0gPT0gJ3snKQotCQkJYnJhY2VfbGV2 ZWwrKzsKLQkJaWYgKGJ1ZltpXSA9PSAnfScpCi0JCQlicmFjZV9sZXZlbC0tOwotCQlpZiAoYnVm W2ldID09ICd9JyAmJiAhYnJhY2VfbGV2ZWwpIHsKLQkJCWkrKzsKLQkJCWlmIChpIC0gc3RhcnQg KyAxID4gV0ZYX1BEU19NQVhfU0laRSkKLQkJCQlyZXR1cm4gLUVGQklHOwotCQkJYnVmW3N0YXJ0 XSA9ICd7JzsKLQkJCWJ1ZltpXSA9IDA7Ci0JCQlkZXZfZGJnKHdkZXYtPmRldiwgInNlbmQgUERT ICclc30nXG4iLCBidWYgKyBzdGFydCk7Ci0JCQlidWZbaV0gPSAnfSc7Ci0JCQlyZXQgPSBoaWZf Y29uZmlndXJhdGlvbih3ZGV2LCBidWYgKyBzdGFydCwKLQkJCQkJCWkgLSBzdGFydCArIDEpOwot CQkJaWYgKHJldCA+IDApIHsKLQkJCQlkZXZfZXJyKHdkZXYtPmRldiwgIlBEUyBieXRlcyAlZCB0 byAlZDogaW52YWxpZCBkYXRhICh1bnN1cHBvcnRlZCBvcHRpb25zPylcbiIsCi0JCQkJCXN0YXJ0 LCBpKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJCWlmIChyZXQgPT0gLUVUSU1FRE9V VCkgewotCQkJCWRldl9lcnIod2Rldi0+ZGV2LCAiUERTIGJ5dGVzICVkIHRvICVkOiBjaGlwIGRp ZG4ndCByZXBseSAoY29ycnVwdGVkIGZpbGU/KVxuIiwKLQkJCQkJc3RhcnQsIGkpOwotCQkJCXJl dHVybiByZXQ7Ci0JCQl9Ci0JCQlpZiAocmV0KSB7Ci0JCQkJZGV2X2Vycih3ZGV2LT5kZXYsICJQ RFMgYnl0ZXMgJWQgdG8gJWQ6IGNoaXAgcmV0dXJuZWQgYW4gdW5rbm93biBlcnJvclxuIiwKLQkJ CQkJc3RhcnQsIGkpOwotCQkJCXJldHVybiAtRUlPOwotCQkJfQotCQkJYnVmW2ldID0gJywnOwot CQkJc3RhcnQgPSBpOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdmeF9z ZW5kX3BkYXRhX3BkcyhzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKLXsKLQlpbnQgcmV0ID0gMDsKLQlj b25zdCBzdHJ1Y3QgZmlybXdhcmUgKnBkczsKLQl1OCAqdG1wX2J1ZjsKLQotCXJldCA9IHJlcXVl c3RfZmlybXdhcmUoJnBkcywgd2Rldi0+cGRhdGEuZmlsZV9wZHMsIHdkZXYtPmRldik7Ci0JaWYg KHJldCkgewotCQlkZXZfZXJyKHdkZXYtPmRldiwgImNhbid0IGxvYWQgUERTIGZpbGUgJXNcbiIs Ci0JCQl3ZGV2LT5wZGF0YS5maWxlX3Bkcyk7Ci0JCWdvdG8gZXJyMTsKLQl9Ci0JdG1wX2J1ZiA9 IGttZW1kdXAocGRzLT5kYXRhLCBwZHMtPnNpemUsIEdGUF9LRVJORUwpOwotCWlmICghdG1wX2J1 ZikgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycjI7Ci0JfQotCXJldCA9IHdmeF9zZW5k X3Bkcyh3ZGV2LCB0bXBfYnVmLCBwZHMtPnNpemUpOwotCWtmcmVlKHRtcF9idWYpOwotZXJyMjoK LQlyZWxlYXNlX2Zpcm13YXJlKHBkcyk7Ci1lcnIxOgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRp YyB2b2lkIHdmeF9mcmVlX2NvbW1vbih2b2lkICpkYXRhKQotewotCXN0cnVjdCB3ZnhfZGV2ICp3 ZGV2ID0gZGF0YTsKLQotCW11dGV4X2Rlc3Ryb3koJndkZXYtPnR4X3Bvd2VyX2xvb3BfaW5mb19s b2NrKTsKLQltdXRleF9kZXN0cm95KCZ3ZGV2LT5yeF9zdGF0c19sb2NrKTsKLQltdXRleF9kZXN0 cm95KCZ3ZGV2LT5jb25mX211dGV4KTsKLQlpZWVlODAyMTFfZnJlZV9odyh3ZGV2LT5odyk7Ci19 Ci0KLXN0cnVjdCB3ZnhfZGV2ICp3ZnhfaW5pdF9jb21tb24oc3RydWN0IGRldmljZSAqZGV2LAot CQkJCWNvbnN0IHN0cnVjdCB3ZnhfcGxhdGZvcm1fZGF0YSAqcGRhdGEsCi0JCQkJY29uc3Qgc3Ry dWN0IGh3YnVzX29wcyAqaHdidXNfb3BzLAotCQkJCXZvaWQgKmh3YnVzX3ByaXYpCi17Ci0Jc3Ry dWN0IGllZWU4MDIxMV9odyAqaHc7Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXY7Ci0KLQlodyA9IGll ZWU4MDIxMV9hbGxvY19odyhzaXplb2Yoc3RydWN0IHdmeF9kZXYpLCAmd2Z4X29wcyk7Ci0JaWYg KCFodykKLQkJcmV0dXJuIE5VTEw7Ci0KLQlTRVRfSUVFRTgwMjExX0RFVihodywgZGV2KTsKLQot CWllZWU4MDIxMV9od19zZXQoaHcsIFRYX0FNUERVX1NFVFVQX0lOX0hXKTsKLQlpZWVlODAyMTFf aHdfc2V0KGh3LCBBTVBEVV9BR0dSRUdBVElPTik7Ci0JaWVlZTgwMjExX2h3X3NldChodywgQ09O TkVDVElPTl9NT05JVE9SKTsKLQlpZWVlODAyMTFfaHdfc2V0KGh3LCBSRVBPUlRTX1RYX0FDS19T VEFUVVMpOwotCWllZWU4MDIxMV9od19zZXQoaHcsIFNVUFBPUlRTX0RZTkFNSUNfUFMpOwotCWll ZWU4MDIxMV9od19zZXQoaHcsIFNJR05BTF9EQk0pOwotCWllZWU4MDIxMV9od19zZXQoaHcsIFNV UFBPUlRTX1BTKTsKLQlpZWVlODAyMTFfaHdfc2V0KGh3LCBNRlBfQ0FQQUJMRSk7Ci0KLQlody0+ dmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgd2Z4X3ZpZik7Ci0JaHctPnN0YV9kYXRhX3Np emUgPSBzaXplb2Yoc3RydWN0IHdmeF9zdGFfcHJpdik7Ci0JaHctPnF1ZXVlcyA9IDQ7Ci0JaHct Pm1heF9yYXRlcyA9IDg7Ci0JaHctPm1heF9yYXRlX3RyaWVzID0gODsKLQlody0+ZXh0cmFfdHhf aGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IGhpZl9tc2cpCi0JCQkJKyBzaXplb2Yoc3RydWN0IGhp Zl9yZXFfdHgpCi0JCQkJKyA0IC8qIGFsaWdubWVudCAqLyArIDggLyogVEtJUCBJViAqLzsKLQlo dy0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8 Ci0JCQkJICAgICBCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpIHwKLQkJCQkgICAgIEJJVChOTDgw MjExX0lGVFlQRV9BUCk7Ci0JaHctPndpcGh5LT5wcm9iZV9yZXNwX29mZmxvYWQgPSBOTDgwMjEx X1BST0JFX1JFU1BfT0ZGTE9BRF9TVVBQT1JUX1dQUyB8Ci0JCQkJCU5MODAyMTFfUFJPQkVfUkVT UF9PRkZMT0FEX1NVUFBPUlRfV1BTMiB8Ci0JCQkJCU5MODAyMTFfUFJPQkVfUkVTUF9PRkZMT0FE X1NVUFBPUlRfUDJQIHwKLQkJCQkJTkw4MDIxMV9QUk9CRV9SRVNQX09GRkxPQURfU1VQUE9SVF84 MDIxMVU7Ci0JaHctPndpcGh5LT5mZWF0dXJlcyB8PSBOTDgwMjExX0ZFQVRVUkVfQVBfU0NBTjsK LQlody0+d2lwaHktPmZsYWdzIHw9IFdJUEhZX0ZMQUdfQVBfUFJPQkVfUkVTUF9PRkZMT0FEOwot CWh3LT53aXBoeS0+ZmxhZ3MgfD0gV0lQSFlfRkxBR19BUF9VQVBTRDsKLQlody0+d2lwaHktPm1h eF9hcF9hc3NvY19zdGEgPSBISUZfTElOS19JRF9NQVg7Ci0JaHctPndpcGh5LT5tYXhfc2Nhbl9z c2lkcyA9IDI7Ci0JaHctPndpcGh5LT5tYXhfc2Nhbl9pZV9sZW4gPSBJRUVFODAyMTFfTUFYX0RB VEFfTEVOOwotCWh3LT53aXBoeS0+bl9pZmFjZV9jb21iaW5hdGlvbnMgPSBBUlJBWV9TSVpFKHdm eF9pZmFjZV9jb21iaW5hdGlvbnMpOwotCWh3LT53aXBoeS0+aWZhY2VfY29tYmluYXRpb25zID0g d2Z4X2lmYWNlX2NvbWJpbmF0aW9uczsKLQlody0+d2lwaHktPmJhbmRzW05MODAyMTFfQkFORF8y R0haXSA9IGRldm1fa21hbGxvYyhkZXYsIHNpemVvZih3ZnhfYmFuZF8yZ2h6KSwgR0ZQX0tFUk5F TCk7Ci0JLy8gRklYTUU6IGFsc28gY29weSB3ZnhfcmF0ZXMgYW5kIHdmeF8yZ2h6X2NoYW50YWJs ZQotCW1lbWNweShody0+d2lwaHktPmJhbmRzW05MODAyMTFfQkFORF8yR0haXSwgJndmeF9iYW5k XzJnaHosCi0JICAgICAgIHNpemVvZih3ZnhfYmFuZF8yZ2h6KSk7Ci0KLQl3ZGV2ID0gaHctPnBy aXY7Ci0Jd2Rldi0+aHcgPSBodzsKLQl3ZGV2LT5kZXYgPSBkZXY7Ci0Jd2Rldi0+aHdidXNfb3Bz ID0gaHdidXNfb3BzOwotCXdkZXYtPmh3YnVzX3ByaXYgPSBod2J1c19wcml2OwotCW1lbWNweSgm d2Rldi0+cGRhdGEsIHBkYXRhLCBzaXplb2YoKnBkYXRhKSk7Ci0Jb2ZfcHJvcGVydHlfcmVhZF9z dHJpbmcoZGV2LT5vZl9ub2RlLCAiY29uZmlnLWZpbGUiLAotCQkJCSZ3ZGV2LT5wZGF0YS5maWxl X3Bkcyk7Ci0Jd2Rldi0+cGRhdGEuZ3Bpb193YWtldXAgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25h bChkZXYsICJ3YWtldXAiLAotCQkJCQkJCSAgR1BJT0RfT1VUX0xPVyk7Ci0JaWYgKElTX0VSUih3 ZGV2LT5wZGF0YS5ncGlvX3dha2V1cCkpCi0JCXJldHVybiBOVUxMOwotCWlmICh3ZGV2LT5wZGF0 YS5ncGlvX3dha2V1cCkKLQkJZ3Bpb2Rfc2V0X2NvbnN1bWVyX25hbWUod2Rldi0+cGRhdGEuZ3Bp b193YWtldXAsICJ3Znggd2FrZXVwIik7Ci0KLQltdXRleF9pbml0KCZ3ZGV2LT5jb25mX211dGV4 KTsKLQltdXRleF9pbml0KCZ3ZGV2LT5yeF9zdGF0c19sb2NrKTsKLQltdXRleF9pbml0KCZ3ZGV2 LT50eF9wb3dlcl9sb29wX2luZm9fbG9jayk7Ci0JaW5pdF9jb21wbGV0aW9uKCZ3ZGV2LT5maXJt d2FyZV9yZWFkeSk7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJndkZXYtPmNvb2xpbmdfdGltZW91dF93 b3JrLAotCQkJICB3ZnhfY29vbGluZ190aW1lb3V0X3dvcmspOwotCXNrYl9xdWV1ZV9oZWFkX2lu aXQoJndkZXYtPnR4X3BlbmRpbmcpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJndkZXYtPnR4X2Rl cXVldWUpOwotCXdmeF9pbml0X2hpZl9jbWQoJndkZXYtPmhpZl9jbWQpOwotCXdkZXYtPmZvcmNl X3BzX3RpbWVvdXQgPSAtMTsKLQotCWlmIChkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCB3 ZnhfZnJlZV9jb21tb24sIHdkZXYpKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiB3ZGV2Owot fQotCi1pbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQotewotCWludCBpOwotCWlu dCBlcnI7Ci0JY29uc3Qgdm9pZCAqbWFjYWRkcjsKLQlzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvX3Nh dmVkOwotCi0JLy8gRHVyaW5nIGZpcnN0IHBhcnQgb2YgYm9vdCwgZ3Bpb193YWtldXAgY2Fubm90 IHlldCBiZWVuIHVzZWQuIFNvCi0JLy8gcHJldmVudCBiaCgpIHRvIHRvdWNoIGl0LgotCWdwaW9f c2F2ZWQgPSB3ZGV2LT5wZGF0YS5ncGlvX3dha2V1cDsKLQl3ZGV2LT5wZGF0YS5ncGlvX3dha2V1 cCA9IE5VTEw7Ci0Jd2Rldi0+cG9sbF9pcnEgPSB0cnVlOwotCi0Jd2Z4X2JoX3JlZ2lzdGVyKHdk ZXYpOwotCi0JZXJyID0gd2Z4X2luaXRfZGV2aWNlKHdkZXYpOwotCWlmIChlcnIpCi0JCWdvdG8g ZXJyMDsKLQotCXdmeF9iaF9wb2xsX2lycSh3ZGV2KTsKLQllcnIgPSB3YWl0X2Zvcl9jb21wbGV0 aW9uX3RpbWVvdXQoJndkZXYtPmZpcm13YXJlX3JlYWR5LCAxICogSFopOwotCWlmIChlcnIgPD0g MCkgewotCQlpZiAoZXJyID09IDApIHsKLQkJCWRldl9lcnIod2Rldi0+ZGV2LCAidGltZW91dCB3 aGlsZSB3YWl0aW5nIGZvciBzdGFydHVwIGluZGljYXRpb25cbiIpOwotCQkJZXJyID0gLUVUSU1F RE9VVDsKLQkJfSBlbHNlIGlmIChlcnIgPT0gLUVSRVNUQVJUU1lTKSB7Ci0JCQlkZXZfaW5mbyh3 ZGV2LT5kZXYsICJwcm9iZSBpbnRlcnJ1cHRlZCBieSB1c2VyXG4iKTsKLQkJfQotCQlnb3RvIGVy cjA7Ci0JfQotCi0JLy8gRklYTUU6IGZpbGwgd2lwaHk6Omh3X3ZlcnNpb24KLQlkZXZfaW5mbyh3 ZGV2LT5kZXYsICJzdGFydGVkIGZpcm13YXJlICVkLiVkLiVkIFwiJXNcIiAoQVBJOiAlZC4lZCwg a2V5c2V0OiAlMDJYLCBjYXBzOiAweCUuOFgpXG4iLAotCQkgd2Rldi0+aHdfY2Fwcy5maXJtd2Fy ZV9tYWpvciwgd2Rldi0+aHdfY2Fwcy5maXJtd2FyZV9taW5vciwKLQkJIHdkZXYtPmh3X2NhcHMu ZmlybXdhcmVfYnVpbGQsIHdkZXYtPmh3X2NhcHMuZmlybXdhcmVfbGFiZWwsCi0JCSB3ZGV2LT5o d19jYXBzLmFwaV92ZXJzaW9uX21ham9yLCB3ZGV2LT5od19jYXBzLmFwaV92ZXJzaW9uX21pbm9y LAotCQkgd2Rldi0+a2V5c2V0LCB3ZGV2LT5od19jYXBzLmxpbmtfbW9kZSk7Ci0Jc25wcmludGYo d2Rldi0+aHctPndpcGh5LT5md192ZXJzaW9uLAotCQkgc2l6ZW9mKHdkZXYtPmh3LT53aXBoeS0+ ZndfdmVyc2lvbiksCi0JCSAiJWQuJWQuJWQiLAotCQkgd2Rldi0+aHdfY2Fwcy5maXJtd2FyZV9t YWpvciwKLQkJIHdkZXYtPmh3X2NhcHMuZmlybXdhcmVfbWlub3IsCi0JCSB3ZGV2LT5od19jYXBz LmZpcm13YXJlX2J1aWxkKTsKLQotCWlmICh3ZnhfYXBpX29sZGVyX3RoYW4od2RldiwgMSwgMCkp IHsKLQkJZGV2X2Vycih3ZGV2LT5kZXYsCi0JCQkidW5zdXBwb3J0ZWQgZmlybXdhcmUgQVBJIHZl cnNpb24gKGV4cGVjdCAxIHdoaWxlIGZpcm13YXJlIHJldHVybnMgJWQpXG4iLAotCQkJd2Rldi0+ aHdfY2Fwcy5hcGlfdmVyc2lvbl9tYWpvcik7Ci0JCWVyciA9IC1FTk9UU1VQUDsKLQkJZ290byBl cnIwOwotCX0KLQotCWlmICh3ZGV2LT5od19jYXBzLmxpbmtfbW9kZSA9PSBTRUNfTElOS19FTkZP UkNFRCkgewotCQlkZXZfZXJyKHdkZXYtPmRldiwKLQkJCSJjaGlwIHJlcXVpcmUgc2VjdXJlX2xp bmssIGJ1dCBjYW4ndCBuZWdvdGlhdGUgaXRcbiIpOwotCQlnb3RvIGVycjA7Ci0JfQotCi0JaWYg KHdkZXYtPmh3X2NhcHMucmVnaW9uX3NlbF9tb2RlKSB7Ci0JCXdkZXYtPmh3LT53aXBoeS0+YmFu ZHNbTkw4MDIxMV9CQU5EXzJHSFpdLT5jaGFubmVsc1sxMV0uZmxhZ3MgfD0gSUVFRTgwMjExX0NI QU5fTk9fSVI7Ci0JCXdkZXYtPmh3LT53aXBoeS0+YmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLT5j aGFubmVsc1sxMl0uZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fTk9fSVI7Ci0JCXdkZXYtPmh3LT53 aXBoeS0+YmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLT5jaGFubmVsc1sxM10uZmxhZ3MgfD0gSUVF RTgwMjExX0NIQU5fRElTQUJMRUQ7Ci0JfQotCi0JZGV2X2RiZyh3ZGV2LT5kZXYsICJzZW5kaW5n IGNvbmZpZ3VyYXRpb24gZmlsZSAlc1xuIiwKLQkJd2Rldi0+cGRhdGEuZmlsZV9wZHMpOwotCWVy ciA9IHdmeF9zZW5kX3BkYXRhX3Bkcyh3ZGV2KTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBlcnIw OwotCi0Jd2Rldi0+cG9sbF9pcnEgPSBmYWxzZTsKLQllcnIgPSB3ZGV2LT5od2J1c19vcHMtPmly cV9zdWJzY3JpYmUod2Rldi0+aHdidXNfcHJpdik7Ci0JaWYgKGVycikKLQkJZ290byBlcnIwOwot Ci0JZXJyID0gaGlmX3VzZV9tdWx0aV90eF9jb25mKHdkZXYsIHRydWUpOwotCWlmIChlcnIpCi0J CWRldl9lcnIod2Rldi0+ZGV2LCAibWlzY29uZmlndXJlZCBJUlE/XG4iKTsKLQotCXdkZXYtPnBk YXRhLmdwaW9fd2FrZXVwID0gZ3Bpb19zYXZlZDsKLQlpZiAod2Rldi0+cGRhdGEuZ3Bpb193YWtl dXApIHsKLQkJZGV2X2RiZyh3ZGV2LT5kZXYsCi0JCQkiZW5hYmxlICdxdWllc2NlbnQnIHBvd2Vy IG1vZGUgd2l0aCB3YWtldXAgR1BJTyBhbmQgUERTIGZpbGUgJXNcbiIsCi0JCQl3ZGV2LT5wZGF0 YS5maWxlX3Bkcyk7Ci0JCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcCh3ZGV2LT5wZGF0YS5ncGlv X3dha2V1cCwgMSk7Ci0JCWNvbnRyb2xfcmVnX3dyaXRlKHdkZXYsIDApOwotCQloaWZfc2V0X29w ZXJhdGlvbmFsX21vZGUod2RldiwgSElGX09QX1BPV0VSX01PREVfUVVJRVNDRU5UKTsKLQl9IGVs c2UgewotCQloaWZfc2V0X29wZXJhdGlvbmFsX21vZGUod2RldiwgSElGX09QX1BPV0VSX01PREVf RE9aRSk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod2Rldi0+YWRkcmVzc2Vz KTsgaSsrKSB7Ci0JCWV0aF96ZXJvX2FkZHIod2Rldi0+YWRkcmVzc2VzW2ldLmFkZHIpOwotCQlt YWNhZGRyID0gb2ZfZ2V0X21hY19hZGRyZXNzKHdkZXYtPmRldi0+b2Zfbm9kZSk7Ci0JCWlmICgh SVNfRVJSX09SX05VTEwobWFjYWRkcikpIHsKLQkJCWV0aGVyX2FkZHJfY29weSh3ZGV2LT5hZGRy ZXNzZXNbaV0uYWRkciwgbWFjYWRkcik7Ci0JCQl3ZGV2LT5hZGRyZXNzZXNbaV0uYWRkcltFVEhf QUxFTiAtIDFdICs9IGk7Ci0JCX0gZWxzZSB7Ci0JCQlldGhlcl9hZGRyX2NvcHkod2Rldi0+YWRk cmVzc2VzW2ldLmFkZHIsCi0JCQkJCXdkZXYtPmh3X2NhcHMubWFjX2FkZHJbaV0pOwotCQl9Ci0J CWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcih3ZGV2LT5hZGRyZXNzZXNbaV0uYWRkcikpIHsKLQkJ CWRldl93YXJuKHdkZXYtPmRldiwgInVzaW5nIHJhbmRvbSBNQUMgYWRkcmVzc1xuIik7Ci0JCQll dGhfcmFuZG9tX2FkZHIod2Rldi0+YWRkcmVzc2VzW2ldLmFkZHIpOwotCQl9Ci0JCWRldl9pbmZv KHdkZXYtPmRldiwgIk1BQyBhZGRyZXNzICVkOiAlcE1cbiIsIGksCi0JCQkgd2Rldi0+YWRkcmVz c2VzW2ldLmFkZHIpOwotCX0KLQl3ZGV2LT5ody0+d2lwaHktPm5fYWRkcmVzc2VzID0gQVJSQVlf U0laRSh3ZGV2LT5hZGRyZXNzZXMpOwotCXdkZXYtPmh3LT53aXBoeS0+YWRkcmVzc2VzID0gd2Rl di0+YWRkcmVzc2VzOwotCi0JZXJyID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KHdkZXYtPmh3KTsK LQlpZiAoZXJyKQotCQlnb3RvIGVycjE7Ci0KLQllcnIgPSB3ZnhfZGVidWdfaW5pdCh3ZGV2KTsK LQlpZiAoZXJyKQotCQlnb3RvIGVycjI7Ci0KLQlyZXR1cm4gMDsKLQotZXJyMjoKLQlpZWVlODAy MTFfdW5yZWdpc3Rlcl9odyh3ZGV2LT5odyk7Ci1lcnIxOgotCXdkZXYtPmh3YnVzX29wcy0+aXJx X3Vuc3Vic2NyaWJlKHdkZXYtPmh3YnVzX3ByaXYpOwotZXJyMDoKLQl3ZnhfYmhfdW5yZWdpc3Rl cih3ZGV2KTsKLQlyZXR1cm4gZXJyOwotfQotCi12b2lkIHdmeF9yZWxlYXNlKHN0cnVjdCB3Znhf ZGV2ICp3ZGV2KQotewotCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHdkZXYtPmh3KTsKLQloaWZf c2h1dGRvd24od2Rldik7Ci0Jd2Rldi0+aHdidXNfb3BzLT5pcnFfdW5zdWJzY3JpYmUod2Rldi0+ aHdidXNfcHJpdik7Ci0Jd2Z4X2JoX3VucmVnaXN0ZXIod2Rldik7Ci19Ci0KLXN0YXRpYyBpbnQg X19pbml0IHdmeF9jb3JlX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChJU19F TkFCTEVEKENPTkZJR19TUEkpKQotCQlyZXQgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZ3Znhfc3Bp X2RyaXZlcik7Ci0JaWYgKElTX0VOQUJMRUQoQ09ORklHX01NQykgJiYgIXJldCkKLQkJcmV0ID0g c2Rpb19yZWdpc3Rlcl9kcml2ZXIoJndmeF9zZGlvX2RyaXZlcik7Ci0JcmV0dXJuIHJldDsKLX0K LW1vZHVsZV9pbml0KHdmeF9jb3JlX2luaXQpOwotCi1zdGF0aWMgdm9pZCBfX2V4aXQgd2Z4X2Nv cmVfZXhpdCh2b2lkKQotewotCWlmIChJU19FTkFCTEVEKENPTkZJR19NTUMpKQotCQlzZGlvX3Vu cmVnaXN0ZXJfZHJpdmVyKCZ3Znhfc2Rpb19kcml2ZXIpOwotCWlmIChJU19FTkFCTEVEKENPTkZJ R19TUEkpKQotCQlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJndmeF9zcGlfZHJpdmVyKTsKLX0KLW1v ZHVsZV9leGl0KHdmeF9jb3JlX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dm eC9tYWluLmggYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L21haW4uaApkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggYTBkYjMyMjM4M2EzLi4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFn aW5nL3dmeC9tYWluLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCi0vKgotICogRGV2aWNlIHByb2JlIGFu ZCByZWdpc3Rlci4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJv cmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KLSAqIENv cHlyaWdodCAoYykgMjAwNiwgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+Ci0g KiBDb3B5cmlnaHQgMjAwNC0yMDA2IEplYW4tQmFwdGlzdGUgTm90ZSA8amJub3RlQGdtYWlsLmNv bT4sIGV0IGFsLgotICovCi0jaWZuZGVmIFdGWF9NQUlOX0gKLSNkZWZpbmUgV0ZYX01BSU5fSAot Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1l ci5oPgotCi0jaW5jbHVkZSAiaGlmX2FwaV9nZW5lcmFsLmgiCi0KLXN0cnVjdCB3ZnhfZGV2Owot c3RydWN0IGh3YnVzX29wczsKLQotc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhIHsKLQkvKiBLZXlz ZXQgYW5kICIuc2VjIiBleHRlbnNpb24gd2lsbCBiZSBhcHBlbmRlZCB0byB0aGlzIHN0cmluZyAq LwotCWNvbnN0IGNoYXIgKmZpbGVfZnc7Ci0JY29uc3QgY2hhciAqZmlsZV9wZHM7Ci0Jc3RydWN0 IGdwaW9fZGVzYyAqZ3Bpb193YWtldXA7Ci0JLyoKLQkgKiBpZiB0cnVlIEhJRiBEX291dCBpcyBz YW1wbGVkIG9uIHRoZSByaXNpbmcgZWRnZSBvZiB0aGUgY2xvY2sKLQkgKiAoaW50ZW5kZWQgdG8g YmUgdXNlZCBpbiA1ME1oeiBTRElPKQotCSAqLwotCWJvb2wgdXNlX3Jpc2luZ19jbGs7Ci19Owot Ci1zdHJ1Y3Qgd2Z4X2RldiAqd2Z4X2luaXRfY29tbW9uKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJ CQljb25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgKnBkYXRhLAotCQkJCWNvbnN0IHN0cnVj dCBod2J1c19vcHMgKmh3YnVzX29wcywKLQkJCQl2b2lkICpod2J1c19wcml2KTsKLQotaW50IHdm eF9wcm9iZShzdHJ1Y3Qgd2Z4X2RldiAqd2Rldik7Ci12b2lkIHdmeF9yZWxlYXNlKHN0cnVjdCB3 ZnhfZGV2ICp3ZGV2KTsKLQotYm9vbCB3ZnhfYXBpX29sZGVyX3RoYW4oc3RydWN0IHdmeF9kZXYg KndkZXYsIGludCBtYWpvciwgaW50IG1pbm9yKTsKLWludCB3Znhfc2VuZF9wZHMoc3RydWN0IHdm eF9kZXYgKndkZXYsIHU4ICpidWYsIHNpemVfdCBsZW4pOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBh L2RyaXZlcnMvc3RhZ2luZy93ZngvcXVldWUuYyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvcXVldWUu YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFjMzdmNjljMjk1Li4wMDAwMDAwMDAw MDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9xdWV1ZS5jCisrKyAvZGV2L251bGwKQEAgLTEs MzA0ICswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8q Ci0gKiBPKDEpIFRYIHF1ZXVlIHdpdGggYnVpbHQtaW4gYWxsb2NhdG9yLgotICoKLSAqIENvcHly aWdodCAoYykgMjAxNy0yMDIwLCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJp Z2h0IChjKSAyMDEwLCBTVC1Fcmljc3NvbgotICovCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4K LSNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLQotI2luY2x1ZGUgInF1ZXVlLmgiCi0jaW5jbHVk ZSAid2Z4LmgiCi0jaW5jbHVkZSAic3RhLmgiCi0jaW5jbHVkZSAiZGF0YV90eC5oIgotI2luY2x1 ZGUgInRyYWNlcy5oIgotCi12b2lkIHdmeF90eF9sb2NrKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQot ewotCWF0b21pY19pbmMoJndkZXYtPnR4X2xvY2spOwotfQotCi12b2lkIHdmeF90eF91bmxvY2so c3RydWN0IHdmeF9kZXYgKndkZXYpCi17Ci0JaW50IHR4X2xvY2sgPSBhdG9taWNfZGVjX3JldHVy bigmd2Rldi0+dHhfbG9jayk7Ci0KLQlXQVJOKHR4X2xvY2sgPCAwLCAiaW5jb25zaXN0ZW50IHR4 X2xvY2sgdmFsdWUiKTsKLQlpZiAoIXR4X2xvY2spCi0JCXdmeF9iaF9yZXF1ZXN0X3R4KHdkZXYp OwotfQotCi12b2lkIHdmeF90eF9mbHVzaChzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKLXsKLQlpbnQg cmV0OwotCi0JLy8gRG8gbm90IHdhaXQgZm9yIGFueSByZXBseSBpZiBjaGlwIGlzIGZyb3plbgot CWlmICh3ZGV2LT5jaGlwX2Zyb3plbikKLQkJcmV0dXJuOwotCi0Jd2Z4X3R4X2xvY2sod2Rldik7 Ci0JbXV0ZXhfbG9jaygmd2Rldi0+aGlmX2NtZC5sb2NrKTsKLQlyZXQgPSB3YWl0X2V2ZW50X3Rp bWVvdXQod2Rldi0+aGlmLnR4X2J1ZmZlcnNfZW1wdHksCi0JCQkJICF3ZGV2LT5oaWYudHhfYnVm ZmVyc191c2VkLAotCQkJCSBtc2Vjc190b19qaWZmaWVzKDMwMDApKTsKLQlpZiAoIXJldCkgewot CQlkZXZfd2Fybih3ZGV2LT5kZXYsICJjYW5ub3QgZmx1c2ggdHggYnVmZmVycyAoJWQgc3RpbGwg YnVzeSlcbiIsCi0JCQkgd2Rldi0+aGlmLnR4X2J1ZmZlcnNfdXNlZCk7Ci0JCXdmeF9wZW5kaW5n X2R1bXBfb2xkX2ZyYW1lcyh3ZGV2LCAzMDAwKTsKLQkJLy8gRklYTUU6IGRyb3AgcGVuZGluZyBm cmFtZXMgaGVyZQotCQl3ZGV2LT5jaGlwX2Zyb3plbiA9IHRydWU7Ci0JfQotCW11dGV4X3VubG9j aygmd2Rldi0+aGlmX2NtZC5sb2NrKTsKLQl3ZnhfdHhfdW5sb2NrKHdkZXYpOwotfQotCi12b2lk IHdmeF90eF9sb2NrX2ZsdXNoKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQotewotCXdmeF90eF9sb2Nr KHdkZXYpOwotCXdmeF90eF9mbHVzaCh3ZGV2KTsKLX0KLQotdm9pZCB3ZnhfdHhfcXVldWVzX2lu aXQoc3RydWN0IHdmeF92aWYgKnd2aWYpCi17Ci0JLy8gVGhlIGRldmljZSBpcyBpbiBjaGFyZ2Ug dG8gcmVzcGVjdCB0aGUgZGV0YWlscyBvZiB0aGUgUW9TIHBhcmFtZXRlcnMuCi0JLy8gVGhlIGRy aXZlciBqdXN0IGVuc3VyZSB0aGF0IGl0IHJvdWdodGx5IHJlc3BlY3QgdGhlIHByaW9yaXRpZXMg dG8KLQkvLyBhdm9pZCBhbnkgc2hvcnRhZ2UuCi0JY29uc3QgaW50IHByaW9yaXRpZXNbSUVFRTgw MjExX05VTV9BQ1NdID0geyAxLCAyLCA2NCwgMTI4IH07Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAw OyBpIDwgSUVFRTgwMjExX05VTV9BQ1M7ICsraSkgewotCQlza2JfcXVldWVfaGVhZF9pbml0KCZ3 dmlmLT50eF9xdWV1ZVtpXS5ub3JtYWwpOwotCQlza2JfcXVldWVfaGVhZF9pbml0KCZ3dmlmLT50 eF9xdWV1ZVtpXS5jYWIpOwotCQl3dmlmLT50eF9xdWV1ZVtpXS5wcmlvcml0eSA9IHByaW9yaXRp ZXNbaV07Ci0JfQotfQotCi12b2lkIHdmeF90eF9xdWV1ZXNfY2hlY2tfZW1wdHkoc3RydWN0IHdm eF92aWYgKnd2aWYpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX05V TV9BQ1M7ICsraSkgewotCQlXQVJOX09OKGF0b21pY19yZWFkKCZ3dmlmLT50eF9xdWV1ZVtpXS5w ZW5kaW5nX2ZyYW1lcykpOwotCQlXQVJOX09OKCFza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoJnd2 aWYtPnR4X3F1ZXVlW2ldLm5vcm1hbCkpOwotCQlXQVJOX09OKCFza2JfcXVldWVfZW1wdHlfbG9j a2xlc3MoJnd2aWYtPnR4X3F1ZXVlW2ldLmNhYikpOwotCX0KLX0KLQotYm9vbCB3ZnhfdHhfcXVl dWVfZW1wdHkoc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCB3ZnhfcXVldWUgKnF1ZXVlKQot ewotCXJldHVybiBza2JfcXVldWVfZW1wdHkoJnF1ZXVlLT5ub3JtYWwpICYmIHNrYl9xdWV1ZV9l bXB0eSgmcXVldWUtPmNhYik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fd2Z4X3R4X3F1ZXVlX2Ryb3Ao c3RydWN0IHdmeF92aWYgKnd2aWYsCi0JCQkJc3RydWN0IHNrX2J1ZmZfaGVhZCAqc2tiX3F1ZXVl LAotCQkJCXN0cnVjdCBza19idWZmX2hlYWQgKmRyb3BwZWQpCi17Ci0Jc3RydWN0IHNrX2J1ZmYg KnNrYiwgKnRtcDsKLQotCXNwaW5fbG9ja19iaCgmc2tiX3F1ZXVlLT5sb2NrKTsKLQlza2JfcXVl dWVfd2Fsa19zYWZlKHNrYl9xdWV1ZSwgc2tiLCB0bXApIHsKLQkJX19za2JfdW5saW5rKHNrYiwg c2tiX3F1ZXVlKTsKLQkJc2tiX3F1ZXVlX2hlYWQoZHJvcHBlZCwgc2tiKTsKLQl9Ci0Jc3Bpbl91 bmxvY2tfYmgoJnNrYl9xdWV1ZS0+bG9jayk7Ci19Ci0KLXZvaWQgd2Z4X3R4X3F1ZXVlX2Ryb3Ao c3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCB3ZnhfcXVldWUgKnF1ZXVlLAotCQkgICAgICAg c3RydWN0IHNrX2J1ZmZfaGVhZCAqZHJvcHBlZCkKLXsKLQlfX3dmeF90eF9xdWV1ZV9kcm9wKHd2 aWYsICZxdWV1ZS0+Y2FiLCBkcm9wcGVkKTsKLQlfX3dmeF90eF9xdWV1ZV9kcm9wKHd2aWYsICZx dWV1ZS0+bm9ybWFsLCBkcm9wcGVkKTsKLQl3YWtlX3VwKCZ3dmlmLT53ZGV2LT50eF9kZXF1ZXVl KTsKLX0KLQotdm9pZCB3ZnhfdHhfcXVldWVzX3B1dChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3Ry dWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3Qgd2Z4X3F1ZXVlICpxdWV1ZSA9ICZ3dmlmLT50 eF9xdWV1ZVtza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKV07Ci0Jc3RydWN0IGllZWU4MDIxMV90 eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCi0JaWYgKHR4X2luZm8t PmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9TRU5EX0FGVEVSX0RUSU0pCi0JCXNrYl9xdWV1ZV90 YWlsKCZxdWV1ZS0+Y2FiLCBza2IpOwotCWVsc2UKLQkJc2tiX3F1ZXVlX3RhaWwoJnF1ZXVlLT5u b3JtYWwsIHNrYik7Ci19Ci0KLXZvaWQgd2Z4X3BlbmRpbmdfZHJvcChzdHJ1Y3Qgd2Z4X2RldiAq d2Rldiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZHJvcHBlZCkKLXsKLQlzdHJ1Y3Qgd2Z4X3F1ZXVl ICpxdWV1ZTsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZjsKLQlzdHJ1Y3QgaGlmX21zZyAqaGlmOwot CXN0cnVjdCBza19idWZmICpza2I7Ci0KLQlXQVJOKCF3ZGV2LT5jaGlwX2Zyb3plbiwgIiVzIHNo b3VsZCBvbmx5IGJlIHVzZWQgdG8gcmVjb3ZlciBhIGZyb3plbiBkZXZpY2UiLAotCSAgICAgX19m dW5jX18pOwotCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJndkZXYtPnR4X3BlbmRpbmcpKSAh PSBOVUxMKSB7Ci0JCWhpZiA9IChzdHJ1Y3QgaGlmX21zZyAqKXNrYi0+ZGF0YTsKLQkJd3ZpZiA9 IHdkZXZfdG9fd3ZpZih3ZGV2LCBoaWYtPmludGVyZmFjZSk7Ci0JCWlmICh3dmlmKSB7Ci0JCQlx dWV1ZSA9ICZ3dmlmLT50eF9xdWV1ZVtza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKV07Ci0JCQlX QVJOX09OKHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpID4gMyk7Ci0JCQlXQVJOX09OKCFhdG9t aWNfcmVhZCgmcXVldWUtPnBlbmRpbmdfZnJhbWVzKSk7Ci0JCQlhdG9taWNfZGVjKCZxdWV1ZS0+ cGVuZGluZ19mcmFtZXMpOwotCQl9Ci0JCXNrYl9xdWV1ZV9oZWFkKGRyb3BwZWQsIHNrYik7Ci0J fQotfQotCi1zdHJ1Y3Qgc2tfYnVmZiAqd2Z4X3BlbmRpbmdfZ2V0KHN0cnVjdCB3ZnhfZGV2ICp3 ZGV2LCB1MzIgcGFja2V0X2lkKQotewotCXN0cnVjdCB3ZnhfcXVldWUgKnF1ZXVlOwotCXN0cnVj dCBoaWZfcmVxX3R4ICpyZXE7Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWY7Ci0Jc3RydWN0IGhpZl9t c2cgKmhpZjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0Jc3Bpbl9sb2NrX2JoKCZ3ZGV2LT50 eF9wZW5kaW5nLmxvY2spOwotCXNrYl9xdWV1ZV93YWxrKCZ3ZGV2LT50eF9wZW5kaW5nLCBza2Ip IHsKLQkJaGlmID0gKHN0cnVjdCBoaWZfbXNnICopc2tiLT5kYXRhOwotCQlyZXEgPSAoc3RydWN0 IGhpZl9yZXFfdHggKiloaWYtPmJvZHk7Ci0JCWlmIChyZXEtPnBhY2tldF9pZCAhPSBwYWNrZXRf aWQpCi0JCQljb250aW51ZTsKLQkJc3Bpbl91bmxvY2tfYmgoJndkZXYtPnR4X3BlbmRpbmcubG9j ayk7Ci0JCXd2aWYgPSB3ZGV2X3RvX3d2aWYod2RldiwgaGlmLT5pbnRlcmZhY2UpOwotCQlpZiAo d3ZpZikgewotCQkJcXVldWUgPSAmd3ZpZi0+dHhfcXVldWVbc2tiX2dldF9xdWV1ZV9tYXBwaW5n KHNrYildOwotCQkJV0FSTl9PTihza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSA+IDMpOwotCQkJ V0FSTl9PTighYXRvbWljX3JlYWQoJnF1ZXVlLT5wZW5kaW5nX2ZyYW1lcykpOwotCQkJYXRvbWlj X2RlYygmcXVldWUtPnBlbmRpbmdfZnJhbWVzKTsKLQkJfQotCQlza2JfdW5saW5rKHNrYiwgJndk ZXYtPnR4X3BlbmRpbmcpOwotCQlyZXR1cm4gc2tiOwotCX0KLQlzcGluX3VubG9ja19iaCgmd2Rl di0+dHhfcGVuZGluZy5sb2NrKTsKLQlXQVJOKDEsICJjYW5ub3QgZmluZCBwYWNrZXQgaW4gcGVu ZGluZyBxdWV1ZSIpOwotCXJldHVybiBOVUxMOwotfQotCi12b2lkIHdmeF9wZW5kaW5nX2R1bXBf b2xkX2ZyYW1lcyhzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdW5zaWduZWQgaW50IGxpbWl0X21zKQot ewotCWt0aW1lX3Qgbm93ID0ga3RpbWVfZ2V0KCk7Ci0Jc3RydWN0IHdmeF90eF9wcml2ICp0eF9w cml2OwotCXN0cnVjdCBoaWZfcmVxX3R4ICpyZXE7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQli b29sIGZpcnN0ID0gdHJ1ZTsKLQotCXNwaW5fbG9ja19iaCgmd2Rldi0+dHhfcGVuZGluZy5sb2Nr KTsKLQlza2JfcXVldWVfd2Fsaygmd2Rldi0+dHhfcGVuZGluZywgc2tiKSB7Ci0JCXR4X3ByaXYg PSB3Znhfc2tiX3R4X3ByaXYoc2tiKTsKLQkJcmVxID0gd2Z4X3NrYl90eHJlcShza2IpOwotCQlp ZiAoa3RpbWVfYWZ0ZXIobm93LCBrdGltZV9hZGRfbXModHhfcHJpdi0+eG1pdF90aW1lc3RhbXAs Ci0JCQkJCQkgIGxpbWl0X21zKSkpIHsKLQkJCWlmIChmaXJzdCkgewotCQkJCWRldl9pbmZvKHdk ZXYtPmRldiwgImZyYW1lcyBzdHVjayBpbiBmaXJtd2FyZSBzaW5jZSAlZG1zIG9yIG1vcmU6XG4i LAotCQkJCQkgbGltaXRfbXMpOwotCQkJCWZpcnN0ID0gZmFsc2U7Ci0JCQl9Ci0JCQlkZXZfaW5m byh3ZGV2LT5kZXYsICIgICBpZCAlMDh4IHNlbnQgJWxsZG1zIGFnb1xuIiwKLQkJCQkgcmVxLT5w YWNrZXRfaWQsCi0JCQkJIGt0aW1lX21zX2RlbHRhKG5vdywgdHhfcHJpdi0+eG1pdF90aW1lc3Rh bXApKTsKLQkJfQotCX0KLQlzcGluX3VubG9ja19iaCgmd2Rldi0+dHhfcGVuZGluZy5sb2NrKTsK LX0KLQotdW5zaWduZWQgaW50IHdmeF9wZW5kaW5nX2dldF9wa3RfdXNfZGVsYXkoc3RydWN0IHdm eF9kZXYgKndkZXYsCi0JCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlrdGltZV90IG5v dyA9IGt0aW1lX2dldCgpOwotCXN0cnVjdCB3ZnhfdHhfcHJpdiAqdHhfcHJpdiA9IHdmeF9za2Jf dHhfcHJpdihza2IpOwotCi0JcmV0dXJuIGt0aW1lX3VzX2RlbHRhKG5vdywgdHhfcHJpdi0+eG1p dF90aW1lc3RhbXApOwotfQotCi1ib29sIHdmeF90eF9xdWV1ZXNfaGFzX2NhYihzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZikKLXsKLQlpbnQgaTsKLQotCWlmICh3dmlmLT52aWYtPnR5cGUgIT0gTkw4MDIx MV9JRlRZUEVfQVApCi0JCXJldHVybiBmYWxzZTsKLQlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjEx X05VTV9BQ1M7ICsraSkKLQkJLy8gTm90ZTogc2luY2Ugb25seSBBUCBjYW4gaGF2ZSBtY2FzdCBm cmFtZXMgaW4gcXVldWUgYW5kIG9ubHkKLQkJLy8gb25lIHZpZiBjYW4gYmUgQVAsIGFsbCBxdWV1 ZWQgZnJhbWVzIGhhcyBzYW1lIGludGVyZmFjZSBpZAotCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eV9s b2NrbGVzcygmd3ZpZi0+dHhfcXVldWVbaV0uY2FiKSkKLQkJCXJldHVybiB0cnVlOwotCXJldHVy biBmYWxzZTsKLX0KLQotc3RhdGljIGludCB3ZnhfdHhfcXVldWVfZ2V0X3dlaWdodChzdHJ1Y3Qg d2Z4X3F1ZXVlICpxdWV1ZSkKLXsKLQlyZXR1cm4gYXRvbWljX3JlYWQoJnF1ZXVlLT5wZW5kaW5n X2ZyYW1lcykgKiBxdWV1ZS0+cHJpb3JpdHk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAq d2Z4X3R4X3F1ZXVlc19nZXRfc2tiKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQotewotCXN0cnVjdCB3 ZnhfcXVldWUgKnF1ZXVlc1tJRUVFODAyMTFfTlVNX0FDUyAqIEFSUkFZX1NJWkUod2Rldi0+dmlm KV07Ci0JaW50IGksIGosIG51bV9xdWV1ZXMgPSAwOwotCXN0cnVjdCB3ZnhfdmlmICp3dmlmOwot CXN0cnVjdCBoaWZfbXNnICpoaWY7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCS8vIHNvcnQg dGhlIHF1ZXVlcwotCXd2aWYgPSBOVUxMOwotCXdoaWxlICgod3ZpZiA9IHd2aWZfaXRlcmF0ZSh3 ZGV2LCB3dmlmKSkgIT0gTlVMTCkgewotCQlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX05VTV9B Q1M7IGkrKykgewotCQkJV0FSTl9PTihudW1fcXVldWVzID49IEFSUkFZX1NJWkUocXVldWVzKSk7 Ci0JCQlxdWV1ZXNbbnVtX3F1ZXVlc10gPSAmd3ZpZi0+dHhfcXVldWVbaV07Ci0JCQlmb3IgKGog PSBudW1fcXVldWVzOyBqID4gMDsgai0tKQotCQkJCWlmICh3ZnhfdHhfcXVldWVfZ2V0X3dlaWdo dChxdWV1ZXNbal0pIDwKLQkJCQkgICAgd2Z4X3R4X3F1ZXVlX2dldF93ZWlnaHQocXVldWVzW2og LSAxXSkpCi0JCQkJCXN3YXAocXVldWVzW2ogLSAxXSwgcXVldWVzW2pdKTsKLQkJCW51bV9xdWV1 ZXMrKzsKLQkJfQotCX0KLQotCXd2aWYgPSBOVUxMOwotCXdoaWxlICgod3ZpZiA9IHd2aWZfaXRl cmF0ZSh3ZGV2LCB3dmlmKSkgIT0gTlVMTCkgewotCQlpZiAoIXd2aWYtPmFmdGVyX2R0aW1fdHhf YWxsb3dlZCkKLQkJCWNvbnRpbnVlOwotCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3F1ZXVlczsgaSsr KSB7Ci0JCQlza2IgPSBza2JfZGVxdWV1ZSgmcXVldWVzW2ldLT5jYWIpOwotCQkJaWYgKCFza2Ip Ci0JCQkJY29udGludWU7Ci0JCQkvLyBOb3RlOiBzaW5jZSBvbmx5IEFQIGNhbiBoYXZlIG1jYXN0 IGZyYW1lcyBpbiBxdWV1ZQotCQkJLy8gYW5kIG9ubHkgb25lIHZpZiBjYW4gYmUgQVAsIGFsbCBx dWV1ZWQgZnJhbWVzIGhhcwotCQkJLy8gc2FtZSBpbnRlcmZhY2UgaWQKLQkJCWhpZiA9IChzdHJ1 Y3QgaGlmX21zZyAqKXNrYi0+ZGF0YTsKLQkJCVdBUk5fT04oaGlmLT5pbnRlcmZhY2UgIT0gd3Zp Zi0+aWQpOwotCQkJV0FSTl9PTihxdWV1ZXNbaV0gIT0KLQkJCQkmd3ZpZi0+dHhfcXVldWVbc2ti X2dldF9xdWV1ZV9tYXBwaW5nKHNrYildKTsKLQkJCWF0b21pY19pbmMoJnF1ZXVlc1tpXS0+cGVu ZGluZ19mcmFtZXMpOwotCQkJdHJhY2VfcXVldWVzX3N0YXRzKHdkZXYsIHF1ZXVlc1tpXSk7Ci0J CQlyZXR1cm4gc2tiOwotCQl9Ci0JCS8vIE5vIG1vcmUgbXVsdGljYXN0IHRvIHNlbnQKLQkJd3Zp Zi0+YWZ0ZXJfZHRpbV90eF9hbGxvd2VkID0gZmFsc2U7Ci0JCXNjaGVkdWxlX3dvcmsoJnd2aWYt PnVwZGF0ZV90aW1fd29yayk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IG51bV9xdWV1ZXM7IGkr KykgewotCQlza2IgPSBza2JfZGVxdWV1ZSgmcXVldWVzW2ldLT5ub3JtYWwpOwotCQlpZiAoc2ti KSB7Ci0JCQlhdG9taWNfaW5jKCZxdWV1ZXNbaV0tPnBlbmRpbmdfZnJhbWVzKTsKLQkJCXRyYWNl X3F1ZXVlc19zdGF0cyh3ZGV2LCBxdWV1ZXNbaV0pOwotCQkJcmV0dXJuIHNrYjsKLQkJfQotCX0K LQlyZXR1cm4gTlVMTDsKLX0KLQotc3RydWN0IGhpZl9tc2cgKndmeF90eF9xdWV1ZXNfZ2V0KHN0 cnVjdCB3ZnhfZGV2ICp3ZGV2KQotewotCXN0cnVjdCB3ZnhfdHhfcHJpdiAqdHhfcHJpdjsKLQlz dHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0JaWYgKGF0b21pY19yZWFkKCZ3ZGV2LT50eF9sb2NrKSkK LQkJcmV0dXJuIE5VTEw7Ci0Jc2tiID0gd2Z4X3R4X3F1ZXVlc19nZXRfc2tiKHdkZXYpOwotCWlm ICghc2tiKQotCQlyZXR1cm4gTlVMTDsKLQlza2JfcXVldWVfdGFpbCgmd2Rldi0+dHhfcGVuZGlu Zywgc2tiKTsKLQl3YWtlX3VwKCZ3ZGV2LT50eF9kZXF1ZXVlKTsKLQl0eF9wcml2ID0gd2Z4X3Nr Yl90eF9wcml2KHNrYik7Ci0JdHhfcHJpdi0+eG1pdF90aW1lc3RhbXAgPSBrdGltZV9nZXQoKTsK LQlyZXR1cm4gKHN0cnVjdCBoaWZfbXNnICopc2tiLT5kYXRhOwotfQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9zdGFnaW5nL3dmeC9xdWV1ZS5oIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9xdWV1ZS5oCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGJhMTk0NTVlZjMuLjAwMDAwMDAwMDAwMAot LS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3F1ZXVlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NSAr MCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCi0vKgot ICogTygxKSBUWCBxdWV1ZSB3aXRoIGJ1aWx0LWluIGFsbG9jYXRvci4KLSAqCi0gKiBDb3B5cmln aHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdo dCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KLSAqLwotI2lmbmRlZiBXRlhfUVVFVUVfSAotI2RlZmlu ZSBXRlhfUVVFVUVfSAotCi0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGlu dXgvYXRvbWljLmg+Ci0KLXN0cnVjdCB3ZnhfZGV2Owotc3RydWN0IHdmeF92aWY7Ci0KLXN0cnVj dCB3ZnhfcXVldWUgewotCXN0cnVjdCBza19idWZmX2hlYWQJbm9ybWFsOwotCXN0cnVjdCBza19i dWZmX2hlYWQJY2FiOyAvLyBDb250ZW50IEFmdGVyIChEVElNKSBCZWFjb24KLQlhdG9taWNfdAkJ cGVuZGluZ19mcmFtZXM7Ci0JaW50CQkJcHJpb3JpdHk7Ci19OwotCi12b2lkIHdmeF90eF9sb2Nr KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KTsKLXZvaWQgd2Z4X3R4X3VubG9jayhzdHJ1Y3Qgd2Z4X2Rl diAqd2Rldik7Ci12b2lkIHdmeF90eF9mbHVzaChzdHJ1Y3Qgd2Z4X2RldiAqd2Rldik7Ci12b2lk IHdmeF90eF9sb2NrX2ZsdXNoKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KTsKLQotdm9pZCB3ZnhfdHhf cXVldWVzX2luaXQoc3RydWN0IHdmeF92aWYgKnd2aWYpOwotdm9pZCB3ZnhfdHhfcXVldWVzX2No ZWNrX2VtcHR5KHN0cnVjdCB3ZnhfdmlmICp3dmlmKTsKLWJvb2wgd2Z4X3R4X3F1ZXVlc19oYXNf Y2FiKHN0cnVjdCB3ZnhfdmlmICp3dmlmKTsKLXZvaWQgd2Z4X3R4X3F1ZXVlc19wdXQoc3RydWN0 IHdmeF92aWYgKnd2aWYsIHN0cnVjdCBza19idWZmICpza2IpOwotc3RydWN0IGhpZl9tc2cgKndm eF90eF9xdWV1ZXNfZ2V0KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KTsKLQotYm9vbCB3ZnhfdHhfcXVl dWVfZW1wdHkoc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCB3ZnhfcXVldWUgKnF1ZXVlKTsK LXZvaWQgd2Z4X3R4X3F1ZXVlX2Ryb3Aoc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCB3Znhf cXVldWUgKnF1ZXVlLAotCQkgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZHJvcHBlZCk7Ci0K LXN0cnVjdCBza19idWZmICp3ZnhfcGVuZGluZ19nZXQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUz MiBwYWNrZXRfaWQpOwotdm9pZCB3ZnhfcGVuZGluZ19kcm9wKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2 LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpkcm9wcGVkKTsKLXVuc2lnbmVkIGludCB3ZnhfcGVuZGlu Z19nZXRfcGt0X3VzX2RlbGF5KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LAotCQkJCQkgIHN0cnVjdCBz a19idWZmICpza2IpOwotdm9pZCB3ZnhfcGVuZGluZ19kdW1wX29sZF9mcmFtZXMoc3RydWN0IHdm eF9kZXYgKndkZXYsIHVuc2lnbmVkIGludCBsaW1pdF9tcyk7Ci0KLSNlbmRpZiAvKiBXRlhfUVVF VUVfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9zY2FuLmMgYi9kcml2ZXJz L3N0YWdpbmcvd2Z4L3NjYW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI0N2M3 Y2RkZjJmLi4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9zY2FuLmMKKysr IC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAtb25seQotLyoKLSAqIFNjYW4gcmVsYXRlZCBmdW5jdGlvbnMuCi0gKgotICogQ29w eXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5 cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCi0gKi8KLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEu aD4KLQotI2luY2x1ZGUgInNjYW4uaCIKLSNpbmNsdWRlICJ3ZnguaCIKLSNpbmNsdWRlICJzdGEu aCIKLSNpbmNsdWRlICJoaWZfdHhfbWliLmgiCi0KLXN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3Nj YW5fY29tcGxldGVkX2NvbXBhdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkJICAgICAg Ym9vbCBhYm9ydGVkKQotewotCXN0cnVjdCBjZmc4MDIxMV9zY2FuX2luZm8gaW5mbyA9IHsKLQkJ LmFib3J0ZWQgPSBhYm9ydGVkLAotCX07Ci0KLQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoaHcs ICZpbmZvKTsKLX0KLQotc3RhdGljIGludCB1cGRhdGVfcHJvYmVfdG1wbChzdHJ1Y3Qgd2Z4X3Zp ZiAqd3ZpZiwKLQkJCSAgICAgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKQotewot CXN0cnVjdCBza19idWZmICpza2I7Ci0KLQlza2IgPSBpZWVlODAyMTFfcHJvYmVyZXFfZ2V0KHd2 aWYtPndkZXYtPmh3LCB3dmlmLT52aWYtPmFkZHIsCi0JCQkJICAgICBOVUxMLCAwLCByZXEtPmll X2xlbik7Ci0JaWYgKCFza2IpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jc2tiX3B1dF9kYXRhKHNr YiwgcmVxLT5pZSwgcmVxLT5pZV9sZW4pOwotCWhpZl9zZXRfdGVtcGxhdGVfZnJhbWUod3ZpZiwg c2tiLCBISUZfVE1QTFRfUFJCUkVRLCAwKTsKLQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJu IDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2VuZF9zY2FuX3JlcShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwK LQkJCSBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEsIGludCBzdGFydF9pZHgpCi17 Ci0JaW50IGksIHJldCwgdGltZW91dDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoX3N0 YXJ0LCAqY2hfY3VyOwotCi0JZm9yIChpID0gc3RhcnRfaWR4OyBpIDwgcmVxLT5uX2NoYW5uZWxz OyBpKyspIHsKLQkJY2hfc3RhcnQgPSByZXEtPmNoYW5uZWxzW3N0YXJ0X2lkeF07Ci0JCWNoX2N1 ciA9IHJlcS0+Y2hhbm5lbHNbaV07Ci0JCVdBUk4oY2hfY3VyLT5iYW5kICE9IE5MODAyMTFfQkFO RF8yR0haLCAiYmFuZCBub3Qgc3VwcG9ydGVkIik7Ci0JCWlmIChjaF9jdXItPm1heF9wb3dlciAh PSBjaF9zdGFydC0+bWF4X3Bvd2VyKQotCQkJYnJlYWs7Ci0JCWlmICgoY2hfY3VyLT5mbGFncyBe IGNoX3N0YXJ0LT5mbGFncykgJiBJRUVFODAyMTFfQ0hBTl9OT19JUikKLQkJCWJyZWFrOwotCX0K LQl3ZnhfdHhfbG9ja19mbHVzaCh3dmlmLT53ZGV2KTsKLQl3dmlmLT5zY2FuX2Fib3J0ID0gZmFs c2U7Ci0JcmVpbml0X2NvbXBsZXRpb24oJnd2aWYtPnNjYW5fY29tcGxldGUpOwotCXJldCA9IGhp Zl9zY2FuKHd2aWYsIHJlcSwgc3RhcnRfaWR4LCBpIC0gc3RhcnRfaWR4LCAmdGltZW91dCk7Ci0J aWYgKHJldCkgewotCQl3ZnhfdHhfdW5sb2NrKHd2aWYtPndkZXYpOwotCQlyZXR1cm4gLUVJTzsK LQl9Ci0JcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ3dmlmLT5zY2FuX2NvbXBs ZXRlLCB0aW1lb3V0KTsKLQlpZiAocmVxLT5jaGFubmVsc1tzdGFydF9pZHhdLT5tYXhfcG93ZXIg IT0gd3ZpZi0+dmlmLT5ic3NfY29uZi50eHBvd2VyKQotCQloaWZfc2V0X291dHB1dF9wb3dlcih3 dmlmLCB3dmlmLT52aWYtPmJzc19jb25mLnR4cG93ZXIpOwotCXdmeF90eF91bmxvY2sod3ZpZi0+ d2Rldik7Ci0JaWYgKCFyZXQpIHsKLQkJZGV2X25vdGljZSh3dmlmLT53ZGV2LT5kZXYsICJzY2Fu IHRpbWVvdXRcbiIpOwotCQloaWZfc3RvcF9zY2FuKHd2aWYpOwotCQlyZXR1cm4gLUVUSU1FRE9V VDsKLQl9Ci0JaWYgKHd2aWYtPnNjYW5fYWJvcnQpIHsKLQkJZGV2X25vdGljZSh3dmlmLT53ZGV2 LT5kZXYsICJzY2FuIGFib3J0XG4iKTsKLQkJcmV0dXJuIC1FQ09OTkFCT1JURUQ7Ci0JfQotCXJl dHVybiBpIC0gc3RhcnRfaWR4OwotfQotCi0vKgotICogSXQgaXMgbm90IHJlYWxseSBuZWNlc3Nh cnkgdG8gcnVuIHNjYW4gcmVxdWVzdCBhc3luY2hyb25vdXNseS4gSG93ZXZlciwKLSAqIHRoZXJl IGlzIGEgYnVnIGluICJpdyBzY2FuIiB3aGVuIGllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZCgpIGlz IGNhbGxlZCBiZWZvcmUKLSAqIHdmeF9od19zY2FuKCkgcmV0dXJuCi0gKi8KLXZvaWQgd2Z4X2h3 X3NjYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHdmeF92aWYg Knd2aWYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdmeF92aWYsIHNjYW5fd29yayk7Ci0J c3RydWN0IGllZWU4MDIxMV9zY2FuX3JlcXVlc3QgKmh3X3JlcSA9IHd2aWYtPnNjYW5fcmVxOwot CWludCBjaGFuX2N1ciwgcmV0OwotCi0JbXV0ZXhfbG9jaygmd3ZpZi0+d2Rldi0+Y29uZl9tdXRl eCk7Ci0JbXV0ZXhfbG9jaygmd3ZpZi0+c2Nhbl9sb2NrKTsKLQlpZiAod3ZpZi0+am9pbl9pbl9w cm9ncmVzcykgewotCQlkZXZfaW5mbyh3dmlmLT53ZGV2LT5kZXYsICIlczogYWJvcnQgaW4tcHJv Z3Jlc3MgUkVRX0pPSU4iLAotCQkJIF9fZnVuY19fKTsKLQkJd2Z4X3Jlc2V0KHd2aWYpOwotCX0K LQl1cGRhdGVfcHJvYmVfdG1wbCh3dmlmLCAmaHdfcmVxLT5yZXEpOwotCWNoYW5fY3VyID0gMDsK LQlkbyB7Ci0JCXJldCA9IHNlbmRfc2Nhbl9yZXEod3ZpZiwgJmh3X3JlcS0+cmVxLCBjaGFuX2N1 cik7Ci0JCWlmIChyZXQgPiAwKQotCQkJY2hhbl9jdXIgKz0gcmV0OwotCX0gd2hpbGUgKHJldCA+ IDAgJiYgY2hhbl9jdXIgPCBod19yZXEtPnJlcS5uX2NoYW5uZWxzKTsKLQltdXRleF91bmxvY2so Jnd2aWYtPnNjYW5fbG9jayk7Ci0JbXV0ZXhfdW5sb2NrKCZ3dmlmLT53ZGV2LT5jb25mX211dGV4 KTsKLQlfX2llZWU4MDIxMV9zY2FuX2NvbXBsZXRlZF9jb21wYXQod3ZpZi0+d2Rldi0+aHcsIHJl dCA8IDApOwotfQotCi1pbnQgd2Z4X2h3X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0 cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCXN0cnVjdCBpZWVlODAyMTFfc2Nhbl9yZXF1ZXN0 ICpod19yZXEpCi17Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYgKil2 aWYtPmRydl9wcml2OwotCi0JV0FSTl9PTihod19yZXEtPnJlcS5uX2NoYW5uZWxzID4gSElGX0FQ SV9NQVhfTkJfQ0hBTk5FTFMpOwotCXd2aWYtPnNjYW5fcmVxID0gaHdfcmVxOwotCXNjaGVkdWxl X3dvcmsoJnd2aWYtPnNjYW5fd29yayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgd2Z4X2NhbmNl bF9od19zY2FuKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAq dmlmKQotewotCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5k cnZfcHJpdjsKLQotCXd2aWYtPnNjYW5fYWJvcnQgPSB0cnVlOwotCWhpZl9zdG9wX3NjYW4od3Zp Zik7Ci19Ci0KLXZvaWQgd2Z4X3NjYW5fY29tcGxldGUoc3RydWN0IHdmeF92aWYgKnd2aWYpCi17 Ci0JY29tcGxldGUoJnd2aWYtPnNjYW5fY29tcGxldGUpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9zdGFnaW5nL3dmeC9zY2FuLmggYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L3NjYW4uaApkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc0OTZhNzY2NDc4Li4wMDAwMDAwMDAwMDAKLS0tIGEv ZHJpdmVycy9zdGFnaW5nL3dmeC9zY2FuLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBA Ci0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCi0vKgotICogU2Nh biByZWxhdGVkIGZ1bmN0aW9ucy4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2ls aWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nz b24KLSAqLwotI2lmbmRlZiBXRlhfU0NBTl9ICi0jZGVmaW5lIFdGWF9TQ0FOX0gKLQotI2luY2x1 ZGUgPG5ldC9tYWM4MDIxMS5oPgotCi1zdHJ1Y3Qgd2Z4X2RldjsKLXN0cnVjdCB3ZnhfdmlmOwot Ci12b2lkIHdmeF9od19zY2FuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLWludCB3 ZnhfaHdfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYg KnZpZiwKLQkJc3RydWN0IGllZWU4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSk7Ci12b2lkIHdmeF9j YW5jZWxfaHdfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92 aWYgKnZpZik7Ci12b2lkIHdmeF9zY2FuX2NvbXBsZXRlKHN0cnVjdCB3ZnhfdmlmICp3dmlmKTsK LQotI2VuZGlmIC8qIFdGWF9TQ0FOX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93 Zngvc3RhLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L3N0YS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCBjYjdlOGFiZGY0M2MuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdp bmcvd2Z4L3N0YS5jCisrKyAvZGV2L251bGwKQEAgLTEsODA3ICswLDAgQEAKLS8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8qCi0gKiBJbXBsZW1lbnRhdGlvbiBvZiBt YWM4MDIxMSBBUEkuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFi b3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCi0gKi8K LSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5o PgotCi0jaW5jbHVkZSAic3RhLmgiCi0jaW5jbHVkZSAid2Z4LmgiCi0jaW5jbHVkZSAiZndpby5o IgotI2luY2x1ZGUgImJoLmgiCi0jaW5jbHVkZSAia2V5LmgiCi0jaW5jbHVkZSAic2Nhbi5oIgot I2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAiaGlmX3R4LmgiCi0jaW5jbHVkZSAiaGlmX3R4 X21pYi5oIgotCi0jZGVmaW5lIEhJRl9NQVhfQVJQX0lQX0FERFJUQUJMRV9FTlRSSUVTIDIKLQot dTMyIHdmeF9yYXRlX21hc2tfdG9faHcoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiByYXRlcykK LXsKLQlpbnQgaTsKLQl1MzIgcmV0ID0gMDsKLQkvLyBXRnggb25seSBzdXBwb3J0IDJHSHoKLQlz dHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCA9IHdkZXYtPmh3LT53aXBoeS0+ YmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdOwotCi0JZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2Jp dHJhdGVzOyBpKyspIHsKLQkJaWYgKHJhdGVzICYgQklUKGkpKSB7Ci0JCQlpZiAoaSA+PSBzYmFu ZC0+bl9iaXRyYXRlcykKLQkJCQlkZXZfd2Fybih3ZGV2LT5kZXYsICJ1bnN1cHBvcnRlZCBiYXNp YyByYXRlXG4iKTsKLQkJCWVsc2UKLQkJCQlyZXQgfD0gQklUKHNiYW5kLT5iaXRyYXRlc1tpXS5o d192YWx1ZSk7Ci0JCX0KLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotdm9pZCB3ZnhfY29vbGluZ190 aW1lb3V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCB3ZnhfZGV2 ICp3ZGV2ID0gY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSwKLQkJCQkJICAgIHN0 cnVjdCB3ZnhfZGV2LAotCQkJCQkgICAgY29vbGluZ190aW1lb3V0X3dvcmspOwotCi0Jd2Rldi0+ Y2hpcF9mcm96ZW4gPSB0cnVlOwotCXdmeF90eF91bmxvY2sod2Rldik7Ci19Ci0KLXZvaWQgd2Z4 X3N1c3BlbmRfaG90X2RldihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgZW51bSBzdGFfbm90aWZ5X2Nt ZCBjbWQpCi17Ci0JaWYgKGNtZCA9PSBTVEFfTk9USUZZX0FXQUtFKSB7Ci0JCS8vIERldmljZSBy ZWNvdmVyIG5vcm1hbCB0ZW1wZXJhdHVyZQotCQlpZiAoY2FuY2VsX2RlbGF5ZWRfd29yaygmd2Rl di0+Y29vbGluZ190aW1lb3V0X3dvcmspKQotCQkJd2Z4X3R4X3VubG9jayh3ZGV2KTsKLQl9IGVs c2UgewotCQkvLyBEZXZpY2UgaXMgdG9vIGhvdAotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJndk ZXYtPmNvb2xpbmdfdGltZW91dF93b3JrLCAxMCAqIEhaKTsKLQkJd2Z4X3R4X2xvY2sod2Rldik7 Ci0JfQotfQotCi1zdGF0aWMgdm9pZCB3ZnhfZmlsdGVyX2JlYWNvbihzdHJ1Y3Qgd2Z4X3ZpZiAq d3ZpZiwgYm9vbCBmaWx0ZXJfYmVhY29uKQotewotCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGlmX2ll X3RhYmxlX2VudHJ5IGZpbHRlcl9pZXNbXSA9IHsKLQkJewotCQkJLmllX2lkICAgICAgICA9IFdM QU5fRUlEX1ZFTkRPUl9TUEVDSUZJQywKLQkJCS5oYXNfY2hhbmdlZCAgPSAxLAotCQkJLm5vX2xv bmdlciAgICA9IDEsCi0JCQkuaGFzX2FwcGVhcmVkID0gMSwKLQkJCS5vdWkgICAgICAgICAgPSB7 IDB4NTAsIDB4NkYsIDB4OUEgfSwKLQkJfSwgewotCQkJLmllX2lkICAgICAgICA9IFdMQU5fRUlE X0hUX09QRVJBVElPTiwKLQkJCS5oYXNfY2hhbmdlZCAgPSAxLAotCQkJLm5vX2xvbmdlciAgICA9 IDEsCi0JCQkuaGFzX2FwcGVhcmVkID0gMSwKLQkJfSwgewotCQkJLmllX2lkICAgICAgICA9IFdM QU5fRUlEX0VSUF9JTkZPLAotCQkJLmhhc19jaGFuZ2VkICA9IDEsCi0JCQkubm9fbG9uZ2VyICAg ID0gMSwKLQkJCS5oYXNfYXBwZWFyZWQgPSAxLAotCQl9Ci0JfTsKLQotCWlmICghZmlsdGVyX2Jl YWNvbikgewotCQloaWZfYmVhY29uX2ZpbHRlcl9jb250cm9sKHd2aWYsIDAsIDEpOwotCX0gZWxz ZSB7Ci0JCWhpZl9zZXRfYmVhY29uX2ZpbHRlcl90YWJsZSh3dmlmLCAzLCBmaWx0ZXJfaWVzKTsK LQkJaGlmX2JlYWNvbl9maWx0ZXJfY29udHJvbCh3dmlmLCBISUZfQkVBQ09OX0ZJTFRFUl9FTkFC TEUsIDApOwotCX0KLX0KLQotdm9pZCB3ZnhfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodywgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCi0JCQkgIHVuc2lnbmVkIGlu dCAqdG90YWxfZmxhZ3MsIHU2NCB1bnVzZWQpCi17Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWYgPSBO VUxMOwotCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7Ci0JYm9vbCBmaWx0ZXJfYnNz aWQsIGZpbHRlcl9wcmJyZXEsIGZpbHRlcl9iZWFjb247Ci0KLQkvLyBOb3RlczoKLQkvLyAgIC0g UHJvYmUgcmVzcG9uc2VzIChGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykgYXJlIG5ldmVyIGZpbHRl cmVkCi0JLy8gICAtIFBTLVBvbGwgKEZJRl9QU1BPTEwpIGFyZSBuZXZlciBmaWx0ZXJlZAotCS8v ICAgLSBSVFMsIENUUyBhbmQgQWNrIChGSUZfQ09OVFJPTCkgYXJlIGFsd2F5cyBmaWx0ZXJlZAot CS8vICAgLSBCcm9rZW4gZnJhbWVzIChGSUZfRkNTRkFJTCBhbmQgRklGX1BMQ1BGQUlMKSBhcmUg YWx3YXlzIGZpbHRlcmVkCi0JLy8gICAtIEZpcm13YXJlIGRvZXMgKHlldCkgYWxsb3cgdG8gZm9y d2FyZCB1bmljYXN0IHRyYWZmaWMgc2VudCB0bwotCS8vICAgICBvdGhlciBzdGF0aW9ucyAoYWth LiBwcm9taXNjdW91cyBtb2RlKQotCSp0b3RhbF9mbGFncyAmPSBGSUZfQkNOX1BSQlJFU1BfUFJP TUlTQyB8IEZJRl9BTExNVUxUSSB8IEZJRl9PVEhFUl9CU1MgfAotCQkJRklGX1BST0JFX1JFUSB8 IEZJRl9QU1BPTEw7Ci0KLQltdXRleF9sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsKLQl3aGlsZSAo KHd2aWYgPSB3dmlmX2l0ZXJhdGUod2Rldiwgd3ZpZikpICE9IE5VTEwpIHsKLQkJbXV0ZXhfbG9j aygmd3ZpZi0+c2Nhbl9sb2NrKTsKLQotCQkvLyBOb3RlOiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlT QyBjb3ZlcnMgcHJvYmUgcmVzcG9uc2UgYW5kCi0JCS8vIGJlYWNvbnMgZnJvbSBvdGhlciBCU1MK LQkJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKQotCQkJZmlsdGVy X2JlYWNvbiA9IGZhbHNlOwotCQllbHNlCi0JCQlmaWx0ZXJfYmVhY29uID0gdHJ1ZTsKLQkJd2Z4 X2ZpbHRlcl9iZWFjb24od3ZpZiwgZmlsdGVyX2JlYWNvbik7Ci0KLQkJaWYgKCp0b3RhbF9mbGFn cyAmIEZJRl9PVEhFUl9CU1MpCi0JCQlmaWx0ZXJfYnNzaWQgPSBmYWxzZTsKLQkJZWxzZQotCQkJ ZmlsdGVyX2Jzc2lkID0gdHJ1ZTsKLQotCQkvLyBJbiBBUCBtb2RlLCBjaGlwIGNhbiByZXBseSB0 byBwcm9iZSByZXF1ZXN0IGl0c2VsZgotCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX1BST0JFX1JF USAmJgotCQkgICAgd3ZpZi0+dmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7Ci0JCQlk ZXZfZGJnKHdkZXYtPmRldiwgImRvIG5vdCBmb3J3YXJkIHByb2JlIHJlcXVlc3QgaW4gQVAgbW9k ZVxuIik7Ci0JCQkqdG90YWxfZmxhZ3MgJj0gfkZJRl9QUk9CRV9SRVE7Ci0JCX0KLQotCQlpZiAo KnRvdGFsX2ZsYWdzICYgRklGX1BST0JFX1JFUSkKLQkJCWZpbHRlcl9wcmJyZXEgPSBmYWxzZTsK LQkJZWxzZQotCQkJZmlsdGVyX3ByYnJlcSA9IHRydWU7Ci0JCWhpZl9zZXRfcnhfZmlsdGVyKHd2 aWYsIGZpbHRlcl9ic3NpZCwgZmlsdGVyX3ByYnJlcSk7Ci0KLQkJbXV0ZXhfdW5sb2NrKCZ3dmlm LT5zY2FuX2xvY2spOwotCX0KLQltdXRleF91bmxvY2soJndkZXYtPmNvbmZfbXV0ZXgpOwotfQot Ci1zdGF0aWMgaW50IHdmeF9nZXRfcHNfdGltZW91dChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9v bCAqZW5hYmxlX3BzKQotewotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjAgPSBOVUxM LCAqY2hhbjEgPSBOVUxMOwotCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZ3dmlmLT53 ZGV2LT5ody0+Y29uZjsKLQotCVdBUk4oIXd2aWYtPnZpZi0+YnNzX2NvbmYuYXNzb2MgJiYgZW5h YmxlX3BzLAotCSAgICAgImVuYWJsZV9wcyBpcyByZWxpYWJsZSBvbmx5IGlmIGFzc29jaWF0ZWQi KTsKLQlpZiAod2Rldl90b193dmlmKHd2aWYtPndkZXYsIDApKQotCQljaGFuMCA9IHdkZXZfdG9f d3ZpZih3dmlmLT53ZGV2LCAwKS0+dmlmLT5ic3NfY29uZi5jaGFuZGVmLmNoYW47Ci0JaWYgKHdk ZXZfdG9fd3ZpZih3dmlmLT53ZGV2LCAxKSkKLQkJY2hhbjEgPSB3ZGV2X3RvX3d2aWYod3ZpZi0+ d2RldiwgMSktPnZpZi0+YnNzX2NvbmYuY2hhbmRlZi5jaGFuOwotCWlmIChjaGFuMCAmJiBjaGFu MSAmJiBjaGFuMC0+aHdfdmFsdWUgIT0gY2hhbjEtPmh3X3ZhbHVlICYmCi0JICAgIHd2aWYtPnZp Zi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkgewotCQkvLyBJdCBpcyBuZWNlc3NhcnkgdG8g ZW5hYmxlIHBvd2Vyc2F2ZSBpZiBjaGFubmVscwotCQkvLyBhcmUgZGlmZmVyZW50LgotCQlpZiAo ZW5hYmxlX3BzKQotCQkJKmVuYWJsZV9wcyA9IHRydWU7Ci0JCWlmICh3dmlmLT53ZGV2LT5mb3Jj ZV9wc190aW1lb3V0ID4gLTEpCi0JCQlyZXR1cm4gd3ZpZi0+d2Rldi0+Zm9yY2VfcHNfdGltZW91 dDsKLQkJZWxzZSBpZiAod2Z4X2FwaV9vbGRlcl90aGFuKHd2aWYtPndkZXYsIDMsIDIpKQotCQkJ cmV0dXJuIDA7Ci0JCWVsc2UKLQkJCXJldHVybiAzMDsKLQl9Ci0JaWYgKGVuYWJsZV9wcykKLQkJ KmVuYWJsZV9wcyA9IHd2aWYtPnZpZi0+YnNzX2NvbmYucHM7Ci0JaWYgKHd2aWYtPndkZXYtPmZv cmNlX3BzX3RpbWVvdXQgPiAtMSkKLQkJcmV0dXJuIHd2aWYtPndkZXYtPmZvcmNlX3BzX3RpbWVv dXQ7Ci0JZWxzZSBpZiAod3ZpZi0+dmlmLT5ic3NfY29uZi5hc3NvYyAmJiB3dmlmLT52aWYtPmJz c19jb25mLnBzKQotCQlyZXR1cm4gY29uZi0+ZHluYW1pY19wc190aW1lb3V0OwotCWVsc2UKLQkJ cmV0dXJuIC0xOwotfQotCi1pbnQgd2Z4X3VwZGF0ZV9wbShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZikK LXsKLQlpbnQgcHNfdGltZW91dDsKLQlib29sIHBzOwotCi0JaWYgKCF3dmlmLT52aWYtPmJzc19j b25mLmFzc29jKQotCQlyZXR1cm4gMDsKLQlwc190aW1lb3V0ID0gd2Z4X2dldF9wc190aW1lb3V0 KHd2aWYsICZwcyk7Ci0JaWYgKCFwcykKLQkJcHNfdGltZW91dCA9IDA7Ci0JV0FSTl9PTihwc190 aW1lb3V0IDwgMCk7Ci0JaWYgKHd2aWYtPnVhcHNkX21hc2spCi0JCXBzX3RpbWVvdXQgPSAwOwot Ci0JaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnd2aWYtPnNldF9wbV9tb2RlX2Nv bXBsZXRlLAotCQkJCQkgVFVfVE9fSklGRklFUyg1MTIpKSkKLQkJZGV2X3dhcm4od3ZpZi0+d2Rl di0+ZGV2LAotCQkJICJ0aW1lb3V0IHdoaWxlIHdhaXRpbmcgb2Ygc2V0X3BtX21vZGVfY29tcGxl dGVcbiIpOwotCXJldHVybiBoaWZfc2V0X3BtKHd2aWYsIHBzLCBwc190aW1lb3V0KTsKLX0KLQot aW50IHdmeF9jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjEx X3ZpZiAqdmlmLAotCQl1MTYgcXVldWUsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVf cGFyYW1zICpwYXJhbXMpCi17Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsKLQlz dHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7Ci0J aW50IG9sZF91YXBzZCA9IHd2aWYtPnVhcHNkX21hc2s7Ci0KLQlXQVJOX09OKHF1ZXVlID49IGh3 LT5xdWV1ZXMpOwotCi0JbXV0ZXhfbG9jaygmd2Rldi0+Y29uZl9tdXRleCk7Ci0JYXNzaWduX2Jp dChxdWV1ZSwgJnd2aWYtPnVhcHNkX21hc2ssIHBhcmFtcy0+dWFwc2QpOwotCWhpZl9zZXRfZWRj YV9xdWV1ZV9wYXJhbXMod3ZpZiwgcXVldWUsIHBhcmFtcyk7Ci0JaWYgKHd2aWYtPnZpZi0+dHlw ZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCi0JICAgIG9sZF91YXBzZCAhPSB3dmlmLT51 YXBzZF9tYXNrKSB7Ci0JCWhpZl9zZXRfdWFwc2RfaW5mbyh3dmlmLCB3dmlmLT51YXBzZF9tYXNr KTsKLQkJd2Z4X3VwZGF0ZV9wbSh3dmlmKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZ3ZGV2LT5jb25m X211dGV4KTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IHdmeF9zZXRfcnRzX3RocmVzaG9sZChzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHZhbHVlKQotewotCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2 ID0gaHctPnByaXY7Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWYgPSBOVUxMOwotCi0Jd2hpbGUgKCh3 dmlmID0gd3ZpZl9pdGVyYXRlKHdkZXYsIHd2aWYpKSAhPSBOVUxMKQotCQloaWZfcnRzX3RocmVz aG9sZCh3dmlmLCB2YWx1ZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIFdTTSBjYWxsYmFja3MgKi8K LQotdm9pZCB3ZnhfZXZlbnRfcmVwb3J0X3Jzc2koc3RydWN0IHdmeF92aWYgKnd2aWYsIHU4IHJh d19yY3BpX3Jzc2kpCi17Ci0JLyogUlNTSTogc2lnbmVkIFE4LjAsIFJDUEk6IHVuc2lnbmVkIFE3 LjEKLQkgKiBSU1NJID0gUkNQSSAvIDIgLSAxMTAKLQkgKi8KLQlpbnQgcmNwaV9yc3NpOwotCWlu dCBjcW1fZXZ0OwotCi0JcmNwaV9yc3NpID0gcmF3X3JjcGlfcnNzaSAvIDIgLSAxMTA7Ci0JaWYg KHJjcGlfcnNzaSA8PSB3dmlmLT52aWYtPmJzc19jb25mLmNxbV9yc3NpX3Rob2xkKQotCQljcW1f ZXZ0ID0gTkw4MDIxMV9DUU1fUlNTSV9USFJFU0hPTERfRVZFTlRfTE9XOwotCWVsc2UKLQkJY3Ft X2V2dCA9IE5MODAyMTFfQ1FNX1JTU0lfVEhSRVNIT0xEX0VWRU5UX0hJR0g7Ci0JaWVlZTgwMjEx X2NxbV9yc3NpX25vdGlmeSh3dmlmLT52aWYsIGNxbV9ldnQsIHJjcGlfcnNzaSwgR0ZQX0tFUk5F TCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdmeF9iZWFjb25fbG9zc193b3JrKHN0cnVjdCB3b3JrX3N0 cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IGNvbnRhaW5lcl9vZih0b19k ZWxheWVkX3dvcmsod29yayksCi0JCQkJCSAgICBzdHJ1Y3Qgd2Z4X3ZpZiwgYmVhY29uX2xvc3Nf d29yayk7Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYgPSAmd3ZpZi0+dmlm LT5ic3NfY29uZjsKLQotCWllZWU4MDIxMV9iZWFjb25fbG9zcyh3dmlmLT52aWYpOwotCXNjaGVk dWxlX2RlbGF5ZWRfd29yayh0b19kZWxheWVkX3dvcmsod29yayksCi0JCQkgICAgICBtc2Vjc190 b19qaWZmaWVzKGJzc19jb25mLT5iZWFjb25faW50KSk7Ci19Ci0KLXZvaWQgd2Z4X3NldF9kZWZh dWx0X3VuaWNhc3Rfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSBzdHJ1Y3QgaWVl ZTgwMjExX3ZpZiAqdmlmLCBpbnQgaWR4KQotewotCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0 cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKLQotCWhpZl93ZXBfZGVmYXVsdF9rZXlfaWQo d3ZpZiwgaWR4KTsKLX0KLQotdm9pZCB3ZnhfcmVzZXQoc3RydWN0IHdmeF92aWYgKnd2aWYpCi17 Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXYgPSB3dmlmLT53ZGV2OwotCi0Jd2Z4X3R4X2xvY2tfZmx1 c2god2Rldik7Ci0JaGlmX3Jlc2V0KHd2aWYsIGZhbHNlKTsKLQl3ZnhfdHhfcG9saWN5X2luaXQo d3ZpZik7Ci0JaWYgKHd2aWZfY291bnQod2RldikgPD0gMSkKLQkJaGlmX3NldF9ibG9ja19hY2tf cG9saWN5KHd2aWYsIDB4RkYsIDB4RkYpOwotCXdmeF90eF91bmxvY2sod2Rldik7Ci0Jd3ZpZi0+ am9pbl9pbl9wcm9ncmVzcyA9IGZhbHNlOwotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmd3Zp Zi0+YmVhY29uX2xvc3Nfd29yayk7Ci0Jd3ZpZiA9ICBOVUxMOwotCXdoaWxlICgod3ZpZiA9IHd2 aWZfaXRlcmF0ZSh3ZGV2LCB3dmlmKSkgIT0gTlVMTCkKLQkJd2Z4X3VwZGF0ZV9wbSh3dmlmKTsK LX0KLQotaW50IHdmeF9zdGFfYWRkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVl ZTgwMjExX3ZpZiAqdmlmLAotCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQotewotCXN0cnVj dCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKLQlzdHJ1 Y3Qgd2Z4X3N0YV9wcml2ICpzdGFfcHJpdiA9IChzdHJ1Y3Qgd2Z4X3N0YV9wcml2ICopJnN0YS0+ ZHJ2X3ByaXY7Ci0KLQlzdGFfcHJpdi0+dmlmX2lkID0gd3ZpZi0+aWQ7Ci0KLQlpZiAodmlmLT50 eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCWhpZl9zZXRfbWZwKHd2aWYsIHN0YS0+ bWZwLCBzdGEtPm1mcCk7Ci0KLQkvLyBJbiBzdGF0aW9uIG1vZGUsIHRoZSBmaXJtd2FyZSBpbnRl cnByZXRzIG5ldyBsaW5rLWlkIGFzIGEgVERMUyBwZWVyLgotCWlmICh2aWYtPnR5cGUgPT0gTkw4 MDIxMV9JRlRZUEVfU1RBVElPTiAmJiAhc3RhLT50ZGxzKQotCQlyZXR1cm4gMDsKLQlzdGFfcHJp di0+bGlua19pZCA9IGZmeih3dmlmLT5saW5rX2lkX21hcCk7Ci0Jd3ZpZi0+bGlua19pZF9tYXAg fD0gQklUKHN0YV9wcml2LT5saW5rX2lkKTsKLQlXQVJOX09OKCFzdGFfcHJpdi0+bGlua19pZCk7 Ci0JV0FSTl9PTihzdGFfcHJpdi0+bGlua19pZCA+PSBISUZfTElOS19JRF9NQVgpOwotCWhpZl9t YXBfbGluayh3dmlmLCBmYWxzZSwgc3RhLT5hZGRyLCBzdGFfcHJpdi0+bGlua19pZCwgc3RhLT5t ZnApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB3Znhfc3RhX3JlbW92ZShzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJICAgc3RydWN0IGllZWU4 MDIxMV9zdGEgKnN0YSkKLXsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3Zp ZiAqKXZpZi0+ZHJ2X3ByaXY7Ci0Jc3RydWN0IHdmeF9zdGFfcHJpdiAqc3RhX3ByaXYgPSAoc3Ry dWN0IHdmeF9zdGFfcHJpdiAqKSZzdGEtPmRydl9wcml2OwotCi0JLy8gU2VlIG5vdGUgaW4gd2Z4 X3N0YV9hZGQoKQotCWlmICghc3RhX3ByaXYtPmxpbmtfaWQpCi0JCXJldHVybiAwOwotCS8vIEZJ WE1FIGFkZCBhIG11dGV4PwotCWhpZl9tYXBfbGluayh3dmlmLCB0cnVlLCBzdGEtPmFkZHIsIHN0 YV9wcml2LT5saW5rX2lkLCBmYWxzZSk7Ci0Jd3ZpZi0+bGlua19pZF9tYXAgJj0gfkJJVChzdGFf cHJpdi0+bGlua19pZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4X3VwbG9hZF9h cF90ZW1wbGF0ZXMoc3RydWN0IHdmeF92aWYgKnd2aWYpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNr YjsKLQotCXNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHd2aWYtPndkZXYtPmh3LCB3dmlmLT52 aWYpOwotCWlmICghc2tiKQotCQlyZXR1cm4gLUVOT01FTTsKLQloaWZfc2V0X3RlbXBsYXRlX2Zy YW1lKHd2aWYsIHNrYiwgSElGX1RNUExUX0JDTiwKLQkJCSAgICAgICBBUElfUkFURV9JTkRFWF9C XzFNQlBTKTsKLQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0KLQlza2IgPSBpZWVlODAyMTFfcHJvYmVy ZXNwX2dldCh3dmlmLT53ZGV2LT5odywgd3ZpZi0+dmlmKTsKLQlpZiAoIXNrYikKLQkJcmV0dXJu IC1FTk9NRU07Ci0JaGlmX3NldF90ZW1wbGF0ZV9mcmFtZSh3dmlmLCBza2IsIEhJRl9UTVBMVF9Q UkJSRVMsCi0JCQkgICAgICAgQVBJX1JBVEVfSU5ERVhfQl8xTUJQUyk7Ci0JZGV2X2tmcmVlX3Nr Yihza2IpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB3Znhfc2V0X21mcF9hcChzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZikKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gaWVlZTgwMjExX2Jl YWNvbl9nZXQod3ZpZi0+d2Rldi0+aHcsIHd2aWYtPnZpZik7Ci0JY29uc3QgaW50IGllb2Zmc2V0 ID0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LCB1LmJlYWNvbi52YXJpYWJsZSk7Ci0J Y29uc3QgdTE2ICpwdHIgPSAodTE2ICopY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9SU04sCi0J CQkJCQkgc2tiLT5kYXRhICsgaWVvZmZzZXQsCi0JCQkJCQkgc2tiLT5sZW4gLSBpZW9mZnNldCk7 Ci0JY29uc3QgaW50IHBhaXJ3aXNlX2NpcGhlcl9zdWl0ZV9jb3VudF9vZmZzZXQgPSA4IC8gc2l6 ZW9mKHUxNik7Ci0JY29uc3QgaW50IHBhaXJ3aXNlX2NpcGhlcl9zdWl0ZV9zaXplID0gNCAvIHNp emVvZih1MTYpOwotCWNvbnN0IGludCBha21fc3VpdGVfc2l6ZSA9IDQgLyBzaXplb2YodTE2KTsK LQotCWlmIChwdHIpIHsKLQkJcHRyICs9IHBhaXJ3aXNlX2NpcGhlcl9zdWl0ZV9jb3VudF9vZmZz ZXQ7Ci0JCWlmIChXQVJOX09OKHB0ciA+ICh1MTYgKilza2JfdGFpbF9wb2ludGVyKHNrYikpKQot CQkJcmV0dXJuOwotCQlwdHIgKz0gMSArIHBhaXJ3aXNlX2NpcGhlcl9zdWl0ZV9zaXplICogKnB0 cjsKLQkJaWYgKFdBUk5fT04ocHRyID4gKHUxNiAqKXNrYl90YWlsX3BvaW50ZXIoc2tiKSkpCi0J CQlyZXR1cm47Ci0JCXB0ciArPSAxICsgYWttX3N1aXRlX3NpemUgKiAqcHRyOwotCQlpZiAoV0FS Tl9PTihwdHIgPiAodTE2ICopc2tiX3RhaWxfcG9pbnRlcihza2IpKSkKLQkJCXJldHVybjsKLQkJ aGlmX3NldF9tZnAod3ZpZiwgKnB0ciAmIEJJVCg3KSwgKnB0ciAmIEJJVCg2KSk7Ci0JfQotfQot Ci1pbnQgd2Z4X3N0YXJ0X2FwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgw MjExX3ZpZiAqdmlmKQotewotCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3Znhfdmlm ICopdmlmLT5kcnZfcHJpdjsKLQlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IHd2aWYtPndkZXY7Ci0J aW50IHJldDsKLQotCXd2aWYgPSAgTlVMTDsKLQl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJhdGUo d2Rldiwgd3ZpZikpICE9IE5VTEwpCi0JCXdmeF91cGRhdGVfcG0od3ZpZik7Ci0Jd3ZpZiA9IChz dHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7Ci0Jd2Z4X3VwbG9hZF9hcF90ZW1wbGF0ZXMo d3ZpZik7Ci0JcmV0ID0gaGlmX3N0YXJ0KHd2aWYsICZ2aWYtPmJzc19jb25mLCB3dmlmLT5jaGFu bmVsKTsKLQlpZiAocmV0ID4gMCkKLQkJcmV0dXJuIC1FSU87Ci0Jd2Z4X3NldF9tZnBfYXAod3Zp Zik7Ci0JcmV0dXJuIHJldDsKLX0KLQotdm9pZCB3Znhfc3RvcF9hcChzdHJ1Y3QgaWVlZTgwMjEx X2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKLXsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAq d3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7Ci0KLQl3ZnhfcmVzZXQod3Zp Zik7Ci19Ci0KLXN0YXRpYyB2b2lkIHdmeF9qb2luKHN0cnVjdCB3ZnhfdmlmICp3dmlmKQotewot CWludCByZXQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqY29uZiA9ICZ3dmlmLT52aWYt PmJzc19jb25mOwotCXN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyA9IE5VTEw7Ci0JdTggc3NpZFtJ RUVFODAyMTFfTUFYX1NTSURfTEVOXTsKLQljb25zdCB1OCAqc3NpZGllID0gTlVMTDsKLQlpbnQg c3NpZGxlbiA9IDA7Ci0KLQl3ZnhfdHhfbG9ja19mbHVzaCh3dmlmLT53ZGV2KTsKLQotCWJzcyA9 IGNmZzgwMjExX2dldF9ic3Mod3ZpZi0+d2Rldi0+aHctPndpcGh5LCB3dmlmLT5jaGFubmVsLAot CQkJICAgICAgIGNvbmYtPmJzc2lkLCBOVUxMLCAwLAotCQkJICAgICAgIElFRUU4MDIxMV9CU1Nf VFlQRV9BTlksIElFRUU4MDIxMV9QUklWQUNZX0FOWSk7Ci0JaWYgKCFic3MgJiYgIWNvbmYtPmli c3Nfam9pbmVkKSB7Ci0JCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rldik7Ci0JCXJldHVybjsKLQl9 Ci0KLQlyY3VfcmVhZF9sb2NrKCk7IC8vIHByb3RlY3Qgc3NpZGllCi0JaWYgKGJzcykKLQkJc3Np ZGllID0gaWVlZTgwMjExX2Jzc19nZXRfaWUoYnNzLCBXTEFOX0VJRF9TU0lEKTsKLQlpZiAoc3Np ZGllKSB7Ci0JCXNzaWRsZW4gPSBzc2lkaWVbMV07Ci0JCWlmIChzc2lkbGVuID4gSUVFRTgwMjEx X01BWF9TU0lEX0xFTikKLQkJCXNzaWRsZW4gPSBJRUVFODAyMTFfTUFYX1NTSURfTEVOOwotCQlt ZW1jcHkoc3NpZCwgJnNzaWRpZVsyXSwgc3NpZGxlbik7Ci0JfQotCXJjdV9yZWFkX3VubG9jaygp OwotCi0JY2ZnODAyMTFfcHV0X2Jzcyh3dmlmLT53ZGV2LT5ody0+d2lwaHksIGJzcyk7Ci0KLQl3 dmlmLT5qb2luX2luX3Byb2dyZXNzID0gdHJ1ZTsKLQlyZXQgPSBoaWZfam9pbih3dmlmLCBjb25m LCB3dmlmLT5jaGFubmVsLCBzc2lkLCBzc2lkbGVuKTsKLQlpZiAocmV0KSB7Ci0JCWllZWU4MDIx MV9jb25uZWN0aW9uX2xvc3Mod3ZpZi0+dmlmKTsKLQkJd2Z4X3Jlc2V0KHd2aWYpOwotCX0gZWxz ZSB7Ci0JCS8qIER1ZSB0byBiZWFjb24gZmlsdGVyaW5nIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhl Ci0JCSAqIEFQJ3MgYmVhY29uIGlzIG5vdCBrbm93biBmb3IgdGhlIG1hYzgwMjExIHN0YWNrLgot CQkgKiBEaXNhYmxlIGZpbHRlcmluZyB0ZW1wb3JhcnkgdG8gbWFrZSBzdXJlIHRoZSBzdGFjawot CQkgKiByZWNlaXZlcyBhdCBsZWFzdCBvbmUKLQkJICovCi0JCXdmeF9maWx0ZXJfYmVhY29uKHd2 aWYsIGZhbHNlKTsKLQl9Ci0Jd2Z4X3R4X3VubG9jayh3dmlmLT53ZGV2KTsKLX0KLQotc3RhdGlj IHZvaWQgd2Z4X2pvaW5fZmluYWxpemUoc3RydWN0IHdmeF92aWYgKnd2aWYsCi0JCQkgICAgICBz dHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvKQotewotCXN0cnVjdCBpZWVlODAyMTFfc3Rh ICpzdGEgPSBOVUxMOwotCWludCBhbXBkdV9kZW5zaXR5ID0gMDsKLQlib29sIGdyZWVuZmllbGQg PSBmYWxzZTsKLQotCXJjdV9yZWFkX2xvY2soKTsgLy8gcHJvdGVjdCBzdGEKLQlpZiAoaW5mby0+ YnNzaWQgJiYgIWluZm8tPmlic3Nfam9pbmVkKQotCQlzdGEgPSBpZWVlODAyMTFfZmluZF9zdGEo d3ZpZi0+dmlmLCBpbmZvLT5ic3NpZCk7Ci0JaWYgKHN0YSAmJiBzdGEtPmh0X2NhcC5odF9zdXBw b3J0ZWQpCi0JCWFtcGR1X2RlbnNpdHkgPSBzdGEtPmh0X2NhcC5hbXBkdV9kZW5zaXR5OwotCWlm IChzdGEgJiYgc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkICYmCi0JICAgICEoaW5mby0+aHRfb3Bl cmF0aW9uX21vZGUgJiBJRUVFODAyMTFfSFRfT1BfTU9ERV9OT05fR0ZfU1RBX1BSU05UKSkKLQkJ Z3JlZW5maWVsZCA9ICEhKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfR1JOX0ZM RCk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQl3dmlmLT5qb2luX2luX3Byb2dyZXNzID0gZmFs c2U7Ci0JaGlmX3NldF9hc3NvY2lhdGlvbl9tb2RlKHd2aWYsIGFtcGR1X2RlbnNpdHksIGdyZWVu ZmllbGQsCi0JCQkJIGluZm8tPnVzZV9zaG9ydF9wcmVhbWJsZSk7Ci0JaGlmX2tlZXBfYWxpdmVf cGVyaW9kKHd2aWYsIDApOwotCS8vIGJlYWNvbl9sb3NzX2NvdW50IGlzIGRlZmluZWQgdG8gNyBp biBuZXQvbWFjODAyMTEvbWxtZS5jLiBMZXQncyB1c2UKLQkvLyB0aGUgc2FtZSB2YWx1ZS4KLQlo aWZfc2V0X2Jzc19wYXJhbXMod3ZpZiwgaW5mby0+YWlkLCA3KTsKLQloaWZfc2V0X2JlYWNvbl93 YWtldXBfcGVyaW9kKHd2aWYsIDEsIDEpOwotCXdmeF91cGRhdGVfcG0od3ZpZik7Ci19Ci0KLWlu dCB3Znhfam9pbl9pYnNzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjEx X3ZpZiAqdmlmKQotewotCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICop dmlmLT5kcnZfcHJpdjsKLQotCXdmeF91cGxvYWRfYXBfdGVtcGxhdGVzKHd2aWYpOwotCXdmeF9q b2luKHd2aWYpOwotCXJldHVybiAwOwotfQotCi12b2lkIHdmeF9sZWF2ZV9pYnNzKHN0cnVjdCBp ZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQotewotCXN0cnVjdCB3 ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKLQotCXdmeF9y ZXNldCh3dmlmKTsKLX0KLQotc3RhdGljIHZvaWQgd2Z4X2VuYWJsZV9iZWFjb24oc3RydWN0IHdm eF92aWYgKnd2aWYsIGJvb2wgZW5hYmxlKQotewotCS8vIERyaXZlciBoYXMgQ29udGVudCBBZnRl ciBEVElNIEJlYWNvbiBpbiBxdWV1ZS4gRHJpdmVyIGlzIHdhaXRpbmcgZm9yCi0JLy8gYSBzaWdu YWwgZnJvbSB0aGUgZmlybXdhcmUuIFNpbmNlIHdlIGFyZSBnb2luZyB0byBzdG9wIHRvIHNlbmQK LQkvLyBiZWFjb25zLCB0aGlzIHNpZ25hbCB3aWxsIG5ldmVyIGhhcHBlbnMuIFNlZSBhbHNvCi0J Ly8gd2Z4X3N1c3BlbmRfcmVzdW1lX21jKCkKLQlpZiAoIWVuYWJsZSAmJiB3ZnhfdHhfcXVldWVz X2hhc19jYWIod3ZpZikpIHsKLQkJd3ZpZi0+YWZ0ZXJfZHRpbV90eF9hbGxvd2VkID0gdHJ1ZTsK LQkJd2Z4X2JoX3JlcXVlc3RfdHgod3ZpZi0+d2Rldik7Ci0JfQotCWhpZl9iZWFjb25fdHJhbnNt aXQod3ZpZiwgZW5hYmxlKTsKLX0KLQotdm9pZCB3ZnhfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3Qg aWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCSAgc3RydWN0 IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywgdTMyIGNoYW5nZWQpCi17Ci0Jc3RydWN0IHdmeF9k ZXYgKndkZXYgPSBody0+cHJpdjsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4 X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7Ci0JaW50IGk7Ci0KLQltdXRleF9sb2NrKCZ3ZGV2LT5jb25m X211dGV4KTsKLQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkFTSUNfUkFURVMgfHwKLQkg ICAgY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTl9JTlQgfHwKLQkgICAgY2hhbmdlZCAmIEJT U19DSEFOR0VEX0JTU0lEKSB7Ci0JCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RB VElPTikKLQkJCXdmeF9qb2luKHd2aWYpOwotCX0KLQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5H RURfQVNTT0MpIHsKLQkJaWYgKGluZm8tPmFzc29jIHx8IGluZm8tPmlic3Nfam9pbmVkKQotCQkJ d2Z4X2pvaW5fZmluYWxpemUod3ZpZiwgaW5mbyk7Ci0JCWVsc2UgaWYgKCFpbmZvLT5hc3NvYyAm JiB2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKLQkJCXdmeF9yZXNldCh3dmlm KTsKLQkJZWxzZQotCQkJZGV2X3dhcm4od2Rldi0+ZGV2LCAiJXM6IG1pc3VuZGVyc3Rvb2QgY2hh bmdlOiBBU1NPQ1xuIiwKLQkJCQkgX19mdW5jX18pOwotCX0KLQotCWlmIChjaGFuZ2VkICYgQlNT X0NIQU5HRURfQkVBQ09OX0lORk8pIHsKLQkJaWYgKHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQ RV9TVEFUSU9OKQotCQkJZGV2X3dhcm4od2Rldi0+ZGV2LCAiJXM6IG1pc3VuZGVyc3Rvb2QgY2hh bmdlOiBCRUFDT05fSU5GT1xuIiwKLQkJCQkgX19mdW5jX18pOwotCQloaWZfc2V0X2JlYWNvbl93 YWtldXBfcGVyaW9kKHd2aWYsIGluZm8tPmR0aW1fcGVyaW9kLAotCQkJCQkgICAgIGluZm8tPmR0 aW1fcGVyaW9kKTsKLQkJLy8gV2UgdGVtcG9yYXJ5IGZvcndhcmRlZCBiZWFjb24gZm9yIGpvaW4g cHJvY2Vzcy4gSXQgaXMgbm93IG5vCi0JCS8vIG1vcmUgbmVjZXNzYXJ5LgotCQl3ZnhfZmlsdGVy X2JlYWNvbih3dmlmLCB0cnVlKTsKLQl9Ci0KLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FS UF9GSUxURVIpIHsKLQkJZm9yIChpID0gMDsgaSA8IEhJRl9NQVhfQVJQX0lQX0FERFJUQUJMRV9F TlRSSUVTOyBpKyspIHsKLQkJCV9fYmUzMiAqYXJwX2FkZHIgPSAmaW5mby0+YXJwX2FkZHJfbGlz dFtpXTsKLQotCQkJaWYgKGluZm8tPmFycF9hZGRyX2NudCA+IEhJRl9NQVhfQVJQX0lQX0FERFJU QUJMRV9FTlRSSUVTKQotCQkJCWFycF9hZGRyID0gTlVMTDsKLQkJCWlmIChpID49IGluZm8tPmFy cF9hZGRyX2NudCkKLQkJCQlhcnBfYWRkciA9IE5VTEw7Ci0JCQloaWZfc2V0X2FycF9pcHY0X2Zp bHRlcih3dmlmLCBpLCBhcnBfYWRkcik7Ci0JCX0KLQl9Ci0KLQlpZiAoY2hhbmdlZCAmIEJTU19D SEFOR0VEX0FQX1BST0JFX1JFU1AgfHwKLQkgICAgY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNP TikKLQkJd2Z4X3VwbG9hZF9hcF90ZW1wbGF0ZXMod3ZpZik7Ci0KLQlpZiAoY2hhbmdlZCAmIEJT U19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKQotCQl3ZnhfZW5hYmxlX2JlYWNvbih3dmlmLCBpbmZv LT5lbmFibGVfYmVhY29uKTsKLQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfS0VFUF9BTElW RSkKLQkJaGlmX2tlZXBfYWxpdmVfcGVyaW9kKHd2aWYsIGluZm8tPm1heF9pZGxlX3BlcmlvZCAq Ci0JCQkJCSAgICBVU0VDX1BFUl9UVSAvIFVTRUNfUEVSX01TRUMpOwotCi0JaWYgKGNoYW5nZWQg JiBCU1NfQ0hBTkdFRF9FUlBfQ1RTX1BST1QpCi0JCWhpZl9lcnBfdXNlX3Byb3RlY3Rpb24od3Zp ZiwgaW5mby0+dXNlX2N0c19wcm90KTsKLQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQ X1NMT1QpCi0JCWhpZl9zbG90X3RpbWUod3ZpZiwgaW5mby0+dXNlX3Nob3J0X3Nsb3QgPyA5IDog MjApOwotCi0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9DUU0pCi0JCWhpZl9zZXRfcmNwaV9y c3NpX3RocmVzaG9sZCh3dmlmLCBpbmZvLT5jcW1fcnNzaV90aG9sZCwKLQkJCQkJICAgIGluZm8t PmNxbV9yc3NpX2h5c3QpOwotCi0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9UWFBPV0VSKQot CQloaWZfc2V0X291dHB1dF9wb3dlcih3dmlmLCBpbmZvLT50eHBvd2VyKTsKLQotCWlmIChjaGFu Z2VkICYgQlNTX0NIQU5HRURfUFMpCi0JCXdmeF91cGRhdGVfcG0od3ZpZik7Ci0KLQltdXRleF91 bmxvY2soJndkZXYtPmNvbmZfbXV0ZXgpOwotfQotCi1zdGF0aWMgaW50IHdmeF91cGRhdGVfdGlt KHN0cnVjdCB3ZnhfdmlmICp3dmlmKQotewotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdTE2IHRp bV9vZmZzZXQsIHRpbV9sZW5ndGg7Ci0JdTggKnRpbV9wdHI7Ci0KLQlza2IgPSBpZWVlODAyMTFf YmVhY29uX2dldF90aW0od3ZpZi0+d2Rldi0+aHcsIHd2aWYtPnZpZiwKLQkJCQkgICAgICAgJnRp bV9vZmZzZXQsICZ0aW1fbGVuZ3RoKTsKLQlpZiAoIXNrYikKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0J dGltX3B0ciA9IHNrYi0+ZGF0YSArIHRpbV9vZmZzZXQ7Ci0KLQlpZiAodGltX29mZnNldCAmJiB0 aW1fbGVuZ3RoID49IDYpIHsKLQkJLyogSWdub3JlIERUSU0gY291bnQgZnJvbSBtYWM4MDIxMToK LQkJICogZmlybXdhcmUgaGFuZGxlcyBEVElNIGludGVybmFsbHkuCi0JCSAqLwotCQl0aW1fcHRy WzJdID0gMDsKLQotCQkvKiBTZXQvcmVzZXQgYWlkMCBiaXQgKi8KLQkJaWYgKHdmeF90eF9xdWV1 ZXNfaGFzX2NhYih3dmlmKSkKLQkJCXRpbV9wdHJbNF0gfD0gMTsKLQkJZWxzZQotCQkJdGltX3B0 cls0XSAmPSB+MTsKLQl9Ci0KLQloaWZfdXBkYXRlX2llX2JlYWNvbih3dmlmLCB0aW1fcHRyLCB0 aW1fbGVuZ3RoKTsKLQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3Rh dGljIHZvaWQgd2Z4X3VwZGF0ZV90aW1fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17 Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdmeF92 aWYsIHVwZGF0ZV90aW1fd29yayk7Ci0KLQl3ZnhfdXBkYXRlX3RpbSh3dmlmKTsKLX0KLQotaW50 IHdmeF9zZXRfdGltKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0 YSAqc3RhLCBib29sIHNldCkKLXsKLQlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2Owot CXN0cnVjdCB3Znhfc3RhX3ByaXYgKnN0YV9kZXYgPSAoc3RydWN0IHdmeF9zdGFfcHJpdiAqKSZz dGEtPmRydl9wcml2OwotCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gd2Rldl90b193dmlmKHdkZXYs IHN0YV9kZXYtPnZpZl9pZCk7Ci0KLQlpZiAoIXd2aWYpIHsKLQkJZGV2X3dhcm4od2Rldi0+ZGV2 LCAiJXM6IHJlY2VpdmVkIGV2ZW50IGZvciBub24tZXhpc3RlbnQgdmlmXG4iLCBfX2Z1bmNfXyk7 Ci0JCXJldHVybiAtRUlPOwotCX0KLQlzY2hlZHVsZV93b3JrKCZ3dmlmLT51cGRhdGVfdGltX3dv cmspOwotCXJldHVybiAwOwotfQotCi12b2lkIHdmeF9zdXNwZW5kX3Jlc3VtZV9tYyhzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZiwgZW51bSBzdGFfbm90aWZ5X2NtZCBub3RpZnlfY21kKQotewotCWlmIChu b3RpZnlfY21kICE9IFNUQV9OT1RJRllfQVdBS0UpCi0JCXJldHVybjsKLQlXQVJOKCF3ZnhfdHhf cXVldWVzX2hhc19jYWIod3ZpZiksICJpbmNvcnJlY3Qgc2VxdWVuY2UiKTsKLQlXQVJOKHd2aWYt PmFmdGVyX2R0aW1fdHhfYWxsb3dlZCwgImluY29ycmVjdCBzZXF1ZW5jZSIpOwotCXd2aWYtPmFm dGVyX2R0aW1fdHhfYWxsb3dlZCA9IHRydWU7Ci0Jd2Z4X2JoX3JlcXVlc3RfdHgod3ZpZi0+d2Rl dik7Ci19Ci0KLWludCB3ZnhfYW1wZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAot CQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCSAgICAgc3RydWN0IGllZWU4MDIx MV9hbXBkdV9wYXJhbXMgKnBhcmFtcykKLXsKLQkvLyBBZ2dyZWdhdGlvbiBpcyBpbXBsZW1lbnRl ZCBmdWxseSBpbiBmaXJtd2FyZQotCXN3aXRjaCAocGFyYW1zLT5hY3Rpb24pIHsKLQljYXNlIElF RUU4MDIxMV9BTVBEVV9SWF9TVEFSVDoKLQljYXNlIElFRUU4MDIxMV9BTVBEVV9SWF9TVE9QOgot CQkvLyBKdXN0IGFja25vd2xlZGdlIGl0IHRvIGVuYWJsZSBmcmFtZSByZS1vcmRlcmluZwotCQly ZXR1cm4gMDsKLQlkZWZhdWx0OgotCQkvLyBMZWF2ZSB0aGUgZmlybXdhcmUgZG9pbmcgaXRzIGJ1 c2luZXNzIGZvciB0eCBhZ2dyZWdhdGlvbgotCQlyZXR1cm4gLUVOT1RTVVBQOwotCX0KLX0KLQot aW50IHdmeF9hZGRfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJICAgIHN0cnVj dCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mKQotewotCXJldHVybiAwOwotfQotCi12b2lk IHdmeF9yZW1vdmVfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCXN0cnVjdCBp ZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mKQotewotfQotCi12b2lkIHdmeF9jaGFuZ2VfY2hh bmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0 eF9jb25mICpjb25mLAotCQkJdTMyIGNoYW5nZWQpCi17Ci19Ci0KLWludCB3ZnhfYXNzaWduX3Zp Zl9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAq dmlmLAotCQkJICAgc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpCi17Ci0Jc3Ry dWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYgKil2aWYtPmRydl9wcml2OwotCXN0 cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2ggPSBjb25mLT5kZWYuY2hhbjsKLQotCVdBUk4od3Zp Zi0+Y2hhbm5lbCwgImNoYW5uZWwgb3ZlcndyaXRlIik7Ci0Jd3ZpZi0+Y2hhbm5lbCA9IGNoOwot Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgd2Z4X3VuYXNzaWduX3ZpZl9jaGFuY3R4KHN0cnVjdCBp ZWVlODAyMTFfaHcgKmh3LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJ CSAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mKQotewotCXN0cnVjdCB3 ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKLQlzdHJ1Y3Qg aWVlZTgwMjExX2NoYW5uZWwgKmNoID0gY29uZi0+ZGVmLmNoYW47Ci0KLQlXQVJOKHd2aWYtPmNo YW5uZWwgIT0gY2gsICJjaGFubmVsIG1pc21hdGNoIik7Ci0Jd3ZpZi0+Y2hhbm5lbCA9IE5VTEw7 Ci19Ci0KLWludCB3ZnhfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdl ZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotaW50IHdmeF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVl ODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQotewotCWludCBpLCByZXQg PSAwOwotCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7Ci0Jc3RydWN0IHdmeF92aWYg Knd2aWYgPSAoc3RydWN0IHdmeF92aWYgKil2aWYtPmRydl9wcml2OwotCi0JdmlmLT5kcml2ZXJf ZmxhZ3MgfD0gSUVFRTgwMjExX1ZJRl9CRUFDT05fRklMVEVSIHwKLQkJCSAgICAgSUVFRTgwMjEx X1ZJRl9TVVBQT1JUU19VQVBTRCB8Ci0JCQkgICAgIElFRUU4MDIxMV9WSUZfU1VQUE9SVFNfQ1FN X1JTU0k7Ci0KLQltdXRleF9sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsKLQotCXN3aXRjaCAodmlm LT50eXBlKSB7Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCWNhc2UgTkw4MDIxMV9J RlRZUEVfQURIT0M6Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKLQkJYnJlYWs7Ci0JZGVmYXVs dDoKLQkJbXV0ZXhfdW5sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsKLQkJcmV0dXJuIC1FT1BOT1RT VVBQOwotCX0KLQotCS8vIEZJWE1FOiBwcmVmZXIgdXNlIG9mIGNvbnRhaW5lcl9vZigpIHRvIGdl dCB2aWYKLQl3dmlmLT52aWYgPSB2aWY7Ci0Jd3ZpZi0+d2RldiA9IHdkZXY7Ci0KLQl3dmlmLT5s aW5rX2lkX21hcCA9IDE7IC8vIGxpbmstaWQgMCBpcyByZXNlcnZlZCBmb3IgbXVsdGljYXN0Ci0J SU5JVF9XT1JLKCZ3dmlmLT51cGRhdGVfdGltX3dvcmssIHdmeF91cGRhdGVfdGltX3dvcmspOwot CUlOSVRfREVMQVlFRF9XT1JLKCZ3dmlmLT5iZWFjb25fbG9zc193b3JrLCB3ZnhfYmVhY29uX2xv c3Nfd29yayk7Ci0KLQlpbml0X2NvbXBsZXRpb24oJnd2aWYtPnNldF9wbV9tb2RlX2NvbXBsZXRl KTsKLQljb21wbGV0ZSgmd3ZpZi0+c2V0X3BtX21vZGVfY29tcGxldGUpOwotCUlOSVRfV09SSygm d3ZpZi0+dHhfcG9saWN5X3VwbG9hZF93b3JrLCB3ZnhfdHhfcG9saWN5X3VwbG9hZF93b3JrKTsK LQotCW11dGV4X2luaXQoJnd2aWYtPnNjYW5fbG9jayk7Ci0JaW5pdF9jb21wbGV0aW9uKCZ3dmlm LT5zY2FuX2NvbXBsZXRlKTsKLQlJTklUX1dPUksoJnd2aWYtPnNjYW5fd29yaywgd2Z4X2h3X3Nj YW5fd29yayk7Ci0KLQl3ZnhfdHhfcXVldWVzX2luaXQod3ZpZik7Ci0Jd2Z4X3R4X3BvbGljeV9p bml0KHd2aWYpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod2Rldi0+dmlmKTsgaSsr KSB7Ci0JCWlmICghd2Rldi0+dmlmW2ldKSB7Ci0JCQl3ZGV2LT52aWZbaV0gPSB2aWY7Ci0JCQl3 dmlmLT5pZCA9IGk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlXQVJOKGkgPT0gQVJSQVlfU0laRSh3 ZGV2LT52aWYpLCAidHJ5IHRvIGluc3RhbnRpYXRlIG1vcmUgdmlmIHRoYW4gc3VwcG9ydGVkIik7 Ci0KLQloaWZfc2V0X21hY2FkZHIod3ZpZiwgdmlmLT5hZGRyKTsKLQotCW11dGV4X3VubG9jaygm d2Rldi0+Y29uZl9tdXRleCk7Ci0KLQl3dmlmID0gTlVMTDsKLQl3aGlsZSAoKHd2aWYgPSB3dmlm X2l0ZXJhdGUod2Rldiwgd3ZpZikpICE9IE5VTEwpIHsKLQkJLy8gQ29tYm8gbW9kZSBkb2VzIG5v dCBzdXBwb3J0IEJsb2NrIEFja3MuIFdlIGNhbiByZS1lbmFibGUgdGhlbQotCQlpZiAod3ZpZl9j b3VudCh3ZGV2KSA9PSAxKQotCQkJaGlmX3NldF9ibG9ja19hY2tfcG9saWN5KHd2aWYsIDB4RkYs IDB4RkYpOwotCQllbHNlCi0JCQloaWZfc2V0X2Jsb2NrX2Fja19wb2xpY3kod3ZpZiwgMHgwMCwg MHgwMCk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQgd2Z4X3JlbW92ZV9pbnRlcmZhY2Uo c3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCi17Ci0J c3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9 IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7Ci0KLQl3YWl0X2Zvcl9jb21wbGV0aW9u X3RpbWVvdXQoJnd2aWYtPnNldF9wbV9tb2RlX2NvbXBsZXRlLCBtc2Vjc190b19qaWZmaWVzKDMw MCkpOwotCXdmeF90eF9xdWV1ZXNfY2hlY2tfZW1wdHkod3ZpZik7Ci0KLQltdXRleF9sb2NrKCZ3 ZGV2LT5jb25mX211dGV4KTsKLQlXQVJOKHd2aWYtPmxpbmtfaWRfbWFwICE9IDEsICJjb3JydXB0 ZWQgc3RhdGUiKTsKLQotCWhpZl9yZXNldCh3dmlmLCBmYWxzZSk7Ci0JaGlmX3NldF9tYWNhZGRy KHd2aWYsIE5VTEwpOwotCXdmeF90eF9wb2xpY3lfaW5pdCh3dmlmKTsKLQotCWNhbmNlbF9kZWxh eWVkX3dvcmtfc3luYygmd3ZpZi0+YmVhY29uX2xvc3Nfd29yayk7Ci0Jd2Rldi0+dmlmW3d2aWYt PmlkXSA9IE5VTEw7Ci0Jd3ZpZi0+dmlmID0gTlVMTDsKLQotCW11dGV4X3VubG9jaygmd2Rldi0+ Y29uZl9tdXRleCk7Ci0KLQl3dmlmID0gTlVMTDsKLQl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJh dGUod2Rldiwgd3ZpZikpICE9IE5VTEwpIHsKLQkJLy8gQ29tYm8gbW9kZSBkb2VzIG5vdCBzdXBw b3J0IEJsb2NrIEFja3MuIFdlIGNhbiByZS1lbmFibGUgdGhlbQotCQlpZiAod3ZpZl9jb3VudCh3 ZGV2KSA9PSAxKQotCQkJaGlmX3NldF9ibG9ja19hY2tfcG9saWN5KHd2aWYsIDB4RkYsIDB4RkYp OwotCQllbHNlCi0JCQloaWZfc2V0X2Jsb2NrX2Fja19wb2xpY3kod3ZpZiwgMHgwMCwgMHgwMCk7 Ci0JfQotfQotCi1pbnQgd2Z4X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXJl dHVybiAwOwotfQotCi12b2lkIHdmeF9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewot CXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7Ci0KLQlXQVJOX09OKCFza2JfcXVldWVf ZW1wdHlfbG9ja2xlc3MoJndkZXYtPnR4X3BlbmRpbmcpKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZl cnMvc3RhZ2luZy93Zngvc3RhLmggYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L3N0YS5oCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2I1ZGY1ZWE0ZTYuLjAwMDAwMDAwMDAwMAotLS0gYS9k cml2ZXJzL3N0YWdpbmcvd2Z4L3N0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAot LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwotLyoKLSAqIEltcGxl bWVudGF0aW9uIG9mIG1hYzgwMjExIEFQSS4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAy MCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwgU1Qt RXJpY3Nzb24KLSAqLwotI2lmbmRlZiBXRlhfU1RBX0gKLSNkZWZpbmUgV0ZYX1NUQV9ICi0KLSNp bmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLQotc3RydWN0IHdmeF9kZXY7Ci1zdHJ1Y3Qgd2Z4X3Zp ZjsKLQotc3RydWN0IHdmeF9zdGFfcHJpdiB7Ci0JaW50IGxpbmtfaWQ7Ci0JaW50IHZpZl9pZDsK LX07Ci0KLS8vIG1hYzgwMjExIGludGVyZmFjZQotaW50IHdmeF9zdGFydChzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodyk7Ci12b2lkIHdmeF9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKLWlu dCB3ZnhfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCk7Ci1pbnQg d2Z4X3NldF9ydHNfdGhyZXNob2xkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgdmFsdWUp Owotdm9pZCB3Znhfc2V0X2RlZmF1bHRfdW5pY2FzdF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAq aHcsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIGludCBpZHgpOwotdm9pZCB3Znhf Y29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdW5zaWduZWQgaW50IGNo YW5nZWRfZmxhZ3MsCi0JCQkgIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsIHU2NCB1bnVzZWQp OwotCi1pbnQgd2Z4X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVj dCBpZWVlODAyMTFfdmlmICp2aWYpOwotdm9pZCB3ZnhfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3Qg aWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7Ci1pbnQgd2Z4X3N0 YXJ0X2FwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlm KTsKLXZvaWQgd2Z4X3N0b3BfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVl ODAyMTFfdmlmICp2aWYpOwotaW50IHdmeF9qb2luX2lic3Moc3RydWN0IGllZWU4MDIxMV9odyAq aHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwotdm9pZCB3ZnhfbGVhdmVfaWJzcyhzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7Ci1pbnQgd2Z4 X2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2 aWYsCi0JCXUxNiBxdWV1ZSwgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMg KnBhcmFtcyk7Ci12b2lkIHdmeF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcg Kmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2Jz c19jb25mICppbmZvLCB1MzIgY2hhbmdlZCk7Ci1pbnQgd2Z4X3N0YV9hZGQoc3RydWN0IGllZWU4 MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCXN0cnVjdCBpZWVlODAy MTFfc3RhICpzdGEpOwotaW50IHdmeF9zdGFfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3 LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAq c3RhKTsKLXZvaWQgd2Z4X3N0YV9ub3RpZnkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVj dCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCSAgICBlbnVtIHN0YV9ub3RpZnlfY21kIGNtZCwgc3Ry dWN0IGllZWU4MDIxMV9zdGEgKnN0YSk7Ci1pbnQgd2Z4X3NldF90aW0oc3RydWN0IGllZWU4MDIx MV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIGJvb2wgc2V0KTsKLWludCB3Znhf YW1wZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3Zp ZiAqdmlmLAotCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfYW1wZHVfcGFyYW1zICpwYXJhbXMpOwot aW50IHdmeF9hZGRfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJICAgIHN0cnVj dCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mKTsKLXZvaWQgd2Z4X3JlbW92ZV9jaGFuY3R4 KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2Nv bmYgKmNvbmYpOwotdm9pZCB3ZnhfY2hhbmdlX2NoYW5jdHgoc3RydWN0IGllZWU4MDIxMV9odyAq aHcsCi0JCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZiwgdTMyIGNoYW5nZWQp OwotaW50IHdmeF9hc3NpZ25fdmlmX2NoYW5jdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0 cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhf Y29uZiAqY29uZik7Ci12b2lkIHdmeF91bmFzc2lnbl92aWZfY2hhbmN0eChzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodywKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCQkgICAg ICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZik7Ci0KLS8vIFdTTSBDYWxsYmFj a3MKLXZvaWQgd2Z4X2Nvb2xpbmdfdGltZW91dF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29y ayk7Ci12b2lkIHdmeF9zdXNwZW5kX2hvdF9kZXYoc3RydWN0IHdmeF9kZXYgKndkZXYsIGVudW0g c3RhX25vdGlmeV9jbWQgY21kKTsKLXZvaWQgd2Z4X3N1c3BlbmRfcmVzdW1lX21jKHN0cnVjdCB3 ZnhfdmlmICp3dmlmLCBlbnVtIHN0YV9ub3RpZnlfY21kIGNtZCk7Ci12b2lkIHdmeF9ldmVudF9y ZXBvcnRfcnNzaShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgdTggcmF3X3JjcGlfcnNzaSk7Ci1pbnQg d2Z4X3VwZGF0ZV9wbShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZik7Ci0KLS8vIE90aGVyIEhlbHBlcnMK LXZvaWQgd2Z4X3Jlc2V0KHN0cnVjdCB3ZnhfdmlmICp3dmlmKTsKLXUzMiB3ZnhfcmF0ZV9tYXNr X3RvX2h3KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgcmF0ZXMpOwotCi0jZW5kaWYgLyogV0ZY X1NUQV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3RyYWNlcy5oIGIvZHJp dmVycy9zdGFnaW5nL3dmeC90cmFjZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg ZTM0YzdhNTM4YzY1Li4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC90cmFj ZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDUwMSArMCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMC1vbmx5ICovCi0vKgotICogVHJhY2Vwb2ludHMgZGVmaW5pdGlvbnMu Ci0gKgotICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJ bmMuCi0gKi8KLQotI3VuZGVmIFRSQUNFX1NZU1RFTQotI2RlZmluZSBUUkFDRV9TWVNURU0gd2Z4 Ci0KLSNpZiAhZGVmaW5lZChfV0ZYX1RSQUNFX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01V TFRJX1JFQUQpCi0jZGVmaW5lIF9XRlhfVFJBQ0VfSAotCi0jaW5jbHVkZSA8bGludXgvdHJhY2Vw b2ludC5oPgotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotCi0jaW5jbHVkZSAiYnVzLmgiCi0j aW5jbHVkZSAiaGlmX2FwaV9jbWQuaCIKLSNpbmNsdWRlICJoaWZfYXBpX21pYi5oIgotCi0vKiBU aGUgaGVsbCBiZWxvdyBuZWVkIHNvbWUgZXhwbGFuYXRpb25zLiBGb3IgZWFjaCBzeW1ib2xpYyBu dW1iZXIsIHdlIG5lZWQgdG8KLSAqIGRlZmluZSBpdCB3aXRoIFRSQUNFX0RFRklORV9FTlVNKCkg YW5kIGluIGEgbGlzdCBmb3IgX19wcmludF9zeW1ib2xpYy4KLSAqCi0gKiAgIDEuIERlZmluZSBh IG5ldyBtYWNybyB0aGF0IGNhbGwgVFJBQ0VfREVGSU5FX0VOVU0oKToKLSAqCi0gKiAgICAgICAg ICAjZGVmaW5lIHh4eF9uYW1lKHN5bSkgVFJBQ0VfREVGSU5FX0VOVU0oc3ltKTsKLSAqCi0gKiAg IDIuIERlZmluZSBsaXN0IG9mIGFsbCBzeW1ib2xzOgotICoKLSAqICAgICAgICAgICNkZWZpbmUg bGlzdF9uYW1lcyAgICAgXAotICogICAgICAgICAgICAgLi4uICAgICAgICAgICAgICAgICBcCi0g KiAgICAgICAgICAgICB4eHhfbmFtZShYWFgpICAgICAgIFwKLSAqICAgICAgICAgICAgIC4uLgot ICoKLSAqICAgMy4gSW5zdGFudGlhdGUgdGhhdCBsaXN0X25hbWVzOgotICoKLSAqICAgICAgICAg IGxpc3RfbmFtZXMKLSAqCi0gKiAgIDQuIFJlZGVmaW5lIHh4eF9uYW1lKCkgYXMgYW4gZW50cnkg b2YgYXJyYXkgZm9yIF9fcHJpbnRfc3ltYm9saWMoKQotICoKLSAqICAgICAgICAgICN1bmRlZiB4 eHhfbmFtZQotICogICAgICAgICAgI2RlZmluZSB4eHhfbmFtZShtc2cpIHsgbXNnLCAjbXNnIH0s Ci0gKgotICogICA1LiBsaXN0X25hbWUgY2FuIG5vdyBuZWFybHkgYmUgdXNlZCB3aXRoIF9fcHJp bnRfc3ltYm9saWMoKSBidXQsCi0gKiAgICAgIF9fcHJpbnRfc3ltYm9saWMoKSBkaXNsaWtlIGxh c3QgY29tbWEgb2YgbGlzdC4gU28gd2UgZGVmaW5lIGEgbmV3IGxpc3QKLSAqICAgICAgd2l0aCBh IGR1bW15IGVsZW1lbnQ6Ci0gKgotICogICAgICAgICAgI2RlZmluZSBsaXN0X2Zvcl9wcmludF9z eW1ib2xpYyBsaXN0X25hbWVzIHsgLTEsIE5VTEwgfQotICovCi0KLSNkZWZpbmUgX2hpZl9tc2df bGlzdCAgICAgICAgICAgICAgICAgICAgICAgXAotCWhpZl9jbmZfbmFtZShBRERfS0VZKSAgICAg ICAgICAgICAgIFwKLQloaWZfY25mX25hbWUoQkVBQ09OX1RSQU5TTUlUKSAgICAgICBcCi0JaGlm X2NuZl9uYW1lKEVEQ0FfUVVFVUVfUEFSQU1TKSAgICAgXAotCWhpZl9jbmZfbmFtZShKT0lOKSAg ICAgICAgICAgICAgICAgIFwKLQloaWZfY25mX25hbWUoTUFQX0xJTkspICAgICAgICAgICAgICBc Ci0JaGlmX2NuZl9uYW1lKFJFQURfTUlCKSAgICAgICAgICAgICAgXAotCWhpZl9jbmZfbmFtZShS RU1PVkVfS0VZKSAgICAgICAgICAgIFwKLQloaWZfY25mX25hbWUoUkVTRVQpICAgICAgICAgICAg ICAgICBcCi0JaGlmX2NuZl9uYW1lKFNFVF9CU1NfUEFSQU1TKSAgICAgICAgXAotCWhpZl9jbmZf bmFtZShTRVRfUE1fTU9ERSkgICAgICAgICAgIFwKLQloaWZfY25mX25hbWUoU1RBUlQpICAgICAg ICAgICAgICAgICBcCi0JaGlmX2NuZl9uYW1lKFNUQVJUX1NDQU4pICAgICAgICAgICAgXAotCWhp Zl9jbmZfbmFtZShTVE9QX1NDQU4pICAgICAgICAgICAgIFwKLQloaWZfY25mX25hbWUoVFgpICAg ICAgICAgICAgICAgICAgICBcCi0JaGlmX2NuZl9uYW1lKE1VTFRJX1RSQU5TTUlUKSAgICAgICAg XAotCWhpZl9jbmZfbmFtZShVUERBVEVfSUUpICAgICAgICAgICAgIFwKLQloaWZfY25mX25hbWUo V1JJVEVfTUlCKSAgICAgICAgICAgICBcCi0JaGlmX2NuZl9uYW1lKENPTkZJR1VSQVRJT04pICAg ICAgICAgXAotCWhpZl9jbmZfbmFtZShDT05UUk9MX0dQSU8pICAgICAgICAgIFwKLQloaWZfY25m X25hbWUoUFJFVkVOVF9ST0xMQkFDSykgICAgICBcCi0JaGlmX2NuZl9uYW1lKFNFVF9TTF9NQUNf S0VZKSAgICAgICAgXAotCWhpZl9jbmZfbmFtZShTTF9DT05GSUdVUkUpICAgICAgICAgIFwKLQlo aWZfY25mX25hbWUoU0xfRVhDSEFOR0VfUFVCX0tFWVMpICBcCi0JaGlmX2NuZl9uYW1lKFNIVVRf RE9XTikgICAgICAgICAgICAgXAotCWhpZl9pbmRfbmFtZShFVkVOVCkgICAgICAgICAgICAgICAg IFwKLQloaWZfaW5kX25hbWUoSk9JTl9DT01QTEVURSkgICAgICAgICBcCi0JaGlmX2luZF9uYW1l KFJYKSAgICAgICAgICAgICAgICAgICAgXAotCWhpZl9pbmRfbmFtZShTQ0FOX0NNUEwpICAgICAg ICAgICAgIFwKLQloaWZfaW5kX25hbWUoU0VUX1BNX01PREVfQ01QTCkgICAgICBcCi0JaGlmX2lu ZF9uYW1lKFNVU1BFTkRfUkVTVU1FX1RYKSAgICAgXAotCWhpZl9pbmRfbmFtZShTTF9FWENIQU5H RV9QVUJfS0VZUykgIFwKLQloaWZfaW5kX25hbWUoRVJST1IpICAgICAgICAgICAgICAgICBcCi0J aGlmX2luZF9uYW1lKEVYQ0VQVElPTikgICAgICAgICAgICAgXAotCWhpZl9pbmRfbmFtZShHRU5F UklDKSAgICAgICAgICAgICAgIFwKLQloaWZfaW5kX25hbWUoV0FLRVVQKSAgICAgICAgICAgICAg ICBcCi0JaGlmX2luZF9uYW1lKFNUQVJUVVApCi0KLSNkZWZpbmUgaGlmX21zZ19saXN0X2VudW0g X2hpZl9tc2dfbGlzdAotCi0jdW5kZWYgaGlmX2NuZl9uYW1lCi0jdW5kZWYgaGlmX2luZF9uYW1l Ci0jZGVmaW5lIGhpZl9jbmZfbmFtZShtc2cpIFRSQUNFX0RFRklORV9FTlVNKEhJRl9DTkZfSURf IyNtc2cpOwotI2RlZmluZSBoaWZfaW5kX25hbWUobXNnKSBUUkFDRV9ERUZJTkVfRU5VTShISUZf SU5EX0lEXyMjbXNnKTsKLWhpZl9tc2dfbGlzdF9lbnVtCi0jdW5kZWYgaGlmX2NuZl9uYW1lCi0j dW5kZWYgaGlmX2luZF9uYW1lCi0jZGVmaW5lIGhpZl9jbmZfbmFtZShtc2cpIHsgSElGX0NORl9J RF8jI21zZywgI21zZyB9LAotI2RlZmluZSBoaWZfaW5kX25hbWUobXNnKSB7IEhJRl9JTkRfSURf IyNtc2csICNtc2cgfSwKLSNkZWZpbmUgaGlmX21zZ19saXN0IGhpZl9tc2dfbGlzdF9lbnVtIHsg LTEsIE5VTEwgfQotCi0jZGVmaW5lIF9oaWZfbWliX2xpc3QgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLQloaWZfbWliX25hbWUoQVJQX0lQX0FERFJFU1NFU19UQUJMRSkgICAgICAg ICBcCi0JaGlmX21pYl9uYW1lKEFSUF9LRUVQX0FMSVZFX1BFUklPRCkgICAgICAgICAgXAotCWhp Zl9taWJfbmFtZShCRUFDT05fRklMVEVSX0VOQUJMRSkgICAgICAgICAgIFwKLQloaWZfbWliX25h bWUoQkVBQ09OX0ZJTFRFUl9UQUJMRSkgICAgICAgICAgICBcCi0JaGlmX21pYl9uYW1lKEJFQUNP Tl9TVEFUUykgICAgICAgICAgICAgICAgICAgXAotCWhpZl9taWJfbmFtZShCRUFDT05fV0FLRVVQ X1BFUklPRCkgICAgICAgICAgIFwKLQloaWZfbWliX25hbWUoQkxPQ0tfQUNLX1BPTElDWSkgICAg ICAgICAgICAgICBcCi0JaGlmX21pYl9uYW1lKENDQV9DT05GSUcpICAgICAgICAgICAgICAgICAg ICAgXAotCWhpZl9taWJfbmFtZShDT05GSUdfREFUQV9GSUxURVIpICAgICAgICAgICAgIFwKLQlo aWZfbWliX25hbWUoQ09VTlRFUlNfVEFCTEUpICAgICAgICAgICAgICAgICBcCi0JaGlmX21pYl9u YW1lKENVUlJFTlRfVFhfUE9XRVJfTEVWRUwpICAgICAgICAgXAotCWhpZl9taWJfbmFtZShET1Qx MV9NQUNfQUREUkVTUykgICAgICAgICAgICAgIFwKLQloaWZfbWliX25hbWUoRE9UMTFfTUFYX1JF Q0VJVkVfTElGRVRJTUUpICAgICBcCi0JaGlmX21pYl9uYW1lKERPVDExX01BWF9UUkFOU01JVF9N U0RVX0xJRkVUSU1FKSBcCi0JaGlmX21pYl9uYW1lKERPVDExX1JUU19USFJFU0hPTEQpICAgICAg ICAgICAgXAotCWhpZl9taWJfbmFtZShET1QxMV9XRVBfREVGQVVMVF9LRVlfSUQpICAgICAgIFwK LQloaWZfbWliX25hbWUoRVRIRVJUWVBFX0RBVEFGUkFNRV9DT05ESVRJT04pICBcCi0JaGlmX21p Yl9uYW1lKEVYVEVOREVEX0NPVU5URVJTX1RBQkxFKSAgICAgICAgXAotCWhpZl9taWJfbmFtZShH TF9CTE9DS19BQ0tfSU5GTykgICAgICAgICAgICAgIFwKLQloaWZfbWliX25hbWUoR0xfT1BFUkFU SU9OQUxfUE9XRVJfTU9ERSkgICAgICBcCi0JaGlmX21pYl9uYW1lKEdMX1NFVF9NVUxUSV9NU0cp ICAgICAgICAgICAgICAgXAotCWhpZl9taWJfbmFtZShHUlBfU0VRX0NPVU5URVIpICAgICAgICAg ICAgICAgIFwKLQloaWZfbWliX25hbWUoSU5BQ1RJVklUWV9USU1FUikgICAgICAgICAgICAgICBc Ci0JaGlmX21pYl9uYW1lKElOVEVSRkFDRV9QUk9URUNUSU9OKSAgICAgICAgICAgXAotCWhpZl9t aWJfbmFtZShJUFY0X0FERFJfREFUQUZSQU1FX0NPTkRJVElPTikgIFwKLQloaWZfbWliX25hbWUo SVBWNl9BRERSX0RBVEFGUkFNRV9DT05ESVRJT04pICBcCi0JaGlmX21pYl9uYW1lKEtFRVBfQUxJ VkVfUEVSSU9EKSAgICAgICAgICAgICAgXAotCWhpZl9taWJfbmFtZShNQUNfQUREUl9EQVRBRlJB TUVfQ09ORElUSU9OKSAgIFwKLQloaWZfbWliX25hbWUoTUFHSUNfREFUQUZSQU1FX0NPTkRJVElP TikgICAgICBcCi0JaGlmX21pYl9uYW1lKE1BWF9UWF9QT1dFUl9MRVZFTCkgICAgICAgICAgICAg XAotCWhpZl9taWJfbmFtZShOT05fRVJQX1BST1RFQ1RJT04pICAgICAgICAgICAgIFwKLQloaWZf bWliX25hbWUoTlNfSVBfQUREUkVTU0VTX1RBQkxFKSAgICAgICAgICBcCi0JaGlmX21pYl9uYW1l KE9WRVJSSURFX0lOVEVSTkFMX1RYX1JBVEUpICAgICAgXAotCWhpZl9taWJfbmFtZShQT1JUX0RB VEFGUkFNRV9DT05ESVRJT04pICAgICAgIFwKLQloaWZfbWliX25hbWUoUFJPVEVDVEVEX01HTVRf UE9MSUNZKSAgICAgICAgICBcCi0JaGlmX21pYl9uYW1lKFJDUElfUlNTSV9USFJFU0hPTEQpICAg ICAgICAgICAgXAotCWhpZl9taWJfbmFtZShSWF9GSUxURVIpICAgICAgICAgICAgICAgICAgICAg IFwKLQloaWZfbWliX25hbWUoU0VUX0FTU09DSUFUSU9OX01PREUpICAgICAgICAgICBcCi0JaGlm X21pYl9uYW1lKFNFVF9EQVRBX0ZJTFRFUklORykgICAgICAgICAgICAgXAotCWhpZl9taWJfbmFt ZShTRVRfSFRfUFJPVEVDVElPTikgICAgICAgICAgICAgIFwKLQloaWZfbWliX25hbWUoU0VUX1RY X1JBVEVfUkVUUllfUE9MSUNZKSAgICAgICBcCi0JaGlmX21pYl9uYW1lKFNFVF9VQVBTRF9JTkZP Uk1BVElPTikgICAgICAgICAgXAotCWhpZl9taWJfbmFtZShTTE9UX1RJTUUpICAgICAgICAgICAg ICAgICAgICAgIFwKLQloaWZfbWliX25hbWUoU1RBVElTVElDU19UQUJMRSkgICAgICAgICAgICAg ICBcCi0JaGlmX21pYl9uYW1lKFRFTVBMQVRFX0ZSQU1FKSAgICAgICAgICAgICAgICAgXAotCWhp Zl9taWJfbmFtZShUU0ZfQ09VTlRFUikgICAgICAgICAgICAgICAgICAgIFwKLQloaWZfbWliX25h bWUoVUNfTUNfQkNfREFUQUZSQU1FX0NPTkRJVElPTikKLQotI2RlZmluZSBoaWZfbWliX2xpc3Rf ZW51bSBfaGlmX21pYl9saXN0Ci0KLSN1bmRlZiBoaWZfbWliX25hbWUKLSNkZWZpbmUgaGlmX21p Yl9uYW1lKG1pYikgVFJBQ0VfREVGSU5FX0VOVU0oSElGX01JQl9JRF8jI21pYik7Ci1oaWZfbWli X2xpc3RfZW51bQotI3VuZGVmIGhpZl9taWJfbmFtZQotI2RlZmluZSBoaWZfbWliX25hbWUobWli KSB7IEhJRl9NSUJfSURfIyNtaWIsICNtaWIgfSwKLSNkZWZpbmUgaGlmX21pYl9saXN0IGhpZl9t aWJfbGlzdF9lbnVtIHsgLTEsIE5VTEwgfQotCi1ERUNMQVJFX0VWRU5UX0NMQVNTKGhpZl9kYXRh LAotCVRQX1BST1RPKGNvbnN0IHN0cnVjdCBoaWZfbXNnICpoaWYsIGludCB0eF9maWxsX2xldmVs LCBib29sIGlzX3JlY3YpLAotCVRQX0FSR1MoaGlmLCB0eF9maWxsX2xldmVsLCBpc19yZWN2KSwK LQlUUF9TVFJVQ1RfX2VudHJ5KAotCQlfX2ZpZWxkKGludCwgdHhfZmlsbF9sZXZlbCkKLQkJX19m aWVsZChpbnQsIG1zZ19pZCkKLQkJX19maWVsZChjb25zdCBjaGFyICosIG1zZ190eXBlKQotCQlf X2ZpZWxkKGludCwgbXNnX2xlbikKLQkJX19maWVsZChpbnQsIGJ1Zl9sZW4pCi0JCV9fZmllbGQo aW50LCBpZl9pZCkKLQkJX19maWVsZChpbnQsIG1pYikKLQkJX19hcnJheSh1OCwgYnVmLCAxMjgp Ci0JKSwKLQlUUF9mYXN0X2Fzc2lnbigKLQkJaW50IGhlYWRlcl9sZW47Ci0KLQkJX19lbnRyeS0+ dHhfZmlsbF9sZXZlbCA9IHR4X2ZpbGxfbGV2ZWw7Ci0JCV9fZW50cnktPm1zZ19sZW4gPSBsZTE2 X3RvX2NwdShoaWYtPmxlbik7Ci0JCV9fZW50cnktPm1zZ19pZCA9IGhpZi0+aWQ7Ci0JCV9fZW50 cnktPmlmX2lkID0gaGlmLT5pbnRlcmZhY2U7Ci0JCWlmIChpc19yZWN2KQotCQkJX19lbnRyeS0+ bXNnX3R5cGUgPSBfX2VudHJ5LT5tc2dfaWQgJiAweDgwID8gIklORCIgOiAiQ05GIjsKLQkJZWxz ZQotCQkJX19lbnRyeS0+bXNnX3R5cGUgPSAiUkVRIjsKLQkJaWYgKCFpc19yZWN2ICYmCi0JCSAg ICAoX19lbnRyeS0+bXNnX2lkID09IEhJRl9SRVFfSURfUkVBRF9NSUIgfHwKLQkJICAgICBfX2Vu dHJ5LT5tc2dfaWQgPT0gSElGX1JFUV9JRF9XUklURV9NSUIpKSB7Ci0JCQlfX2VudHJ5LT5taWIg PSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKWhpZi0+Ym9keSk7Ci0JCQloZWFkZXJfbGVuID0gNDsK LQkJfSBlbHNlIHsKLQkJCV9fZW50cnktPm1pYiA9IC0xOwotCQkJaGVhZGVyX2xlbiA9IDA7Ci0J CX0KLQkJX19lbnRyeS0+YnVmX2xlbiA9IG1pbl90KGludCwgX19lbnRyeS0+bXNnX2xlbiwKLQkJ CQkJIHNpemVvZihfX2VudHJ5LT5idWYpKQotCQkJCSAgIC0gc2l6ZW9mKHN0cnVjdCBoaWZfbXNn KSAtIGhlYWRlcl9sZW47Ci0JCW1lbWNweShfX2VudHJ5LT5idWYsIGhpZi0+Ym9keSArIGhlYWRl cl9sZW4sIF9fZW50cnktPmJ1Zl9sZW4pOwotCSksCi0JVFBfcHJpbnRrKCIlZDolZDolc18lcyVz JXM6ICVzJXMgKCVkIGJ5dGVzKSIsCi0JCV9fZW50cnktPnR4X2ZpbGxfbGV2ZWwsCi0JCV9fZW50 cnktPmlmX2lkLAotCQlfX2VudHJ5LT5tc2dfdHlwZSwKLQkJX19wcmludF9zeW1ib2xpYyhfX2Vu dHJ5LT5tc2dfaWQsIGhpZl9tc2dfbGlzdCksCi0JCV9fZW50cnktPm1pYiAhPSAtMSA/ICIvIiA6 ICIiLAotCQlfX2VudHJ5LT5taWIgIT0gLTEgPyBfX3ByaW50X3N5bWJvbGljKF9fZW50cnktPm1p YiwgaGlmX21pYl9saXN0KSA6ICIiLAotCQlfX3ByaW50X2hleChfX2VudHJ5LT5idWYsIF9fZW50 cnktPmJ1Zl9sZW4pLAotCQlfX2VudHJ5LT5tc2dfbGVuID4gc2l6ZW9mKF9fZW50cnktPmJ1Zikg PyAiIC4uLiIgOiAiIiwKLQkJX19lbnRyeS0+bXNnX2xlbgotCSkKLSk7Ci1ERUZJTkVfRVZFTlQo aGlmX2RhdGEsIGhpZl9zZW5kLAotCVRQX1BST1RPKGNvbnN0IHN0cnVjdCBoaWZfbXNnICpoaWYs IGludCB0eF9maWxsX2xldmVsLCBib29sIGlzX3JlY3YpLAotCVRQX0FSR1MoaGlmLCB0eF9maWxs X2xldmVsLCBpc19yZWN2KSk7Ci0jZGVmaW5lIF90cmFjZV9oaWZfc2VuZChoaWYsIHR4X2ZpbGxf bGV2ZWwpXAotCXRyYWNlX2hpZl9zZW5kKGhpZiwgdHhfZmlsbF9sZXZlbCwgZmFsc2UpCi1ERUZJ TkVfRVZFTlQoaGlmX2RhdGEsIGhpZl9yZWN2LAotCVRQX1BST1RPKGNvbnN0IHN0cnVjdCBoaWZf bXNnICpoaWYsIGludCB0eF9maWxsX2xldmVsLCBib29sIGlzX3JlY3YpLAotCVRQX0FSR1MoaGlm LCB0eF9maWxsX2xldmVsLCBpc19yZWN2KSk7Ci0jZGVmaW5lIF90cmFjZV9oaWZfcmVjdihoaWYs IHR4X2ZpbGxfbGV2ZWwpXAotCXRyYWNlX2hpZl9yZWN2KGhpZiwgdHhfZmlsbF9sZXZlbCwgdHJ1 ZSkKLQotI2RlZmluZSB3ZnhfcmVnX2xpc3RfZW51bSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLQl3ZnhfcmVnX25hbWUoV0ZYX1JFR19DT05GSUcsICAgICAgICJDT05GSUciKSAg ICAgIFwKLQl3ZnhfcmVnX25hbWUoV0ZYX1JFR19DT05UUk9MLCAgICAgICJDT05UUk9MIikgICAg IFwKLQl3ZnhfcmVnX25hbWUoV0ZYX1JFR19JTl9PVVRfUVVFVUUsICJRVUVVRSIpICAgICAgIFwK LQl3ZnhfcmVnX25hbWUoV0ZYX1JFR19BSEJfRFBPUlQsICAgICJBSEIiKSAgICAgICAgIFwKLQl3 ZnhfcmVnX25hbWUoV0ZYX1JFR19CQVNFX0FERFIsICAgICJCQVNFX0FERFIiKSAgIFwKLQl3Znhf cmVnX25hbWUoV0ZYX1JFR19TUkFNX0RQT1JULCAgICJTUkFNIikgICAgICAgIFwKLQl3ZnhfcmVn X25hbWUoV0ZYX1JFR19TRVRfR0VOX1JfVywgICJTRVRfR0VOX1JfVyIpIFwKLQl3ZnhfcmVnX25h bWUoV0ZYX1JFR19GUkFNRV9PVVQsICAgICJGUkFNRV9PVVQiKQotCi0jdW5kZWYgd2Z4X3JlZ19u YW1lCi0jZGVmaW5lIHdmeF9yZWdfbmFtZShzeW0sIG5hbWUpIFRSQUNFX0RFRklORV9FTlVNKHN5 bSk7Ci13ZnhfcmVnX2xpc3RfZW51bQotI3VuZGVmIHdmeF9yZWdfbmFtZQotI2RlZmluZSB3Znhf cmVnX25hbWUoc3ltLCBuYW1lKSB7IHN5bSwgbmFtZSB9LAotI2RlZmluZSB3ZnhfcmVnX2xpc3Qg d2Z4X3JlZ19saXN0X2VudW0geyAtMSwgTlVMTCB9Ci0KLURFQ0xBUkVfRVZFTlRfQ0xBU1MoaW9f ZGF0YSwKLQlUUF9QUk9UTyhpbnQgcmVnLCBpbnQgYWRkciwgY29uc3Qgdm9pZCAqaW9fYnVmLCBz aXplX3QgbGVuKSwKLQlUUF9BUkdTKHJlZywgYWRkciwgaW9fYnVmLCBsZW4pLAotCVRQX1NUUlVD VF9fZW50cnkoCi0JCV9fZmllbGQoaW50LCByZWcpCi0JCV9fZmllbGQoaW50LCBhZGRyKQotCQlf X2ZpZWxkKGludCwgbXNnX2xlbikKLQkJX19maWVsZChpbnQsIGJ1Zl9sZW4pCi0JCV9fYXJyYXko dTgsIGJ1ZiwgMzIpCi0JCV9fYXJyYXkodTgsIGFkZHJfc3RyLCAxMCkKLQkpLAotCVRQX2Zhc3Rf YXNzaWduKAotCQlfX2VudHJ5LT5yZWcgPSByZWc7Ci0JCV9fZW50cnktPmFkZHIgPSBhZGRyOwot CQlfX2VudHJ5LT5tc2dfbGVuID0gbGVuOwotCQlfX2VudHJ5LT5idWZfbGVuID0gbWluX3QoaW50 LCBzaXplb2YoX19lbnRyeS0+YnVmKSwKLQkJCQkJIF9fZW50cnktPm1zZ19sZW4pOwotCQltZW1j cHkoX19lbnRyeS0+YnVmLCBpb19idWYsIF9fZW50cnktPmJ1Zl9sZW4pOwotCQlpZiAoYWRkciA+ PSAwKQotCQkJc25wcmludGYoX19lbnRyeS0+YWRkcl9zdHIsIDEwLCAiLyUwOHgiLCBhZGRyKTsK LQkJZWxzZQotCQkJX19lbnRyeS0+YWRkcl9zdHJbMF0gPSAwOwotCSksCi0JVFBfcHJpbnRrKCIl cyVzOiAlcyVzICglZCBieXRlcykiLAotCQlfX3ByaW50X3N5bWJvbGljKF9fZW50cnktPnJlZywg d2Z4X3JlZ19saXN0KSwKLQkJX19lbnRyeS0+YWRkcl9zdHIsCi0JCV9fcHJpbnRfaGV4KF9fZW50 cnktPmJ1ZiwgX19lbnRyeS0+YnVmX2xlbiksCi0JCV9fZW50cnktPm1zZ19sZW4gPiBzaXplb2Yo X19lbnRyeS0+YnVmKSA/ICIgLi4uIiA6ICIiLAotCQlfX2VudHJ5LT5tc2dfbGVuCi0JKQotKTsK LURFRklORV9FVkVOVChpb19kYXRhLCBpb193cml0ZSwKLQlUUF9QUk9UTyhpbnQgcmVnLCBpbnQg YWRkciwgY29uc3Qgdm9pZCAqaW9fYnVmLCBzaXplX3QgbGVuKSwKLQlUUF9BUkdTKHJlZywgYWRk ciwgaW9fYnVmLCBsZW4pKTsKLSNkZWZpbmUgX3RyYWNlX2lvX2luZF93cml0ZShyZWcsIGFkZHIs IGlvX2J1ZiwgbGVuKVwKLQl0cmFjZV9pb193cml0ZShyZWcsIGFkZHIsIGlvX2J1ZiwgbGVuKQot I2RlZmluZSBfdHJhY2VfaW9fd3JpdGUocmVnLCBpb19idWYsIGxlbikgdHJhY2VfaW9fd3JpdGUo cmVnLCAtMSwgaW9fYnVmLCBsZW4pCi1ERUZJTkVfRVZFTlQoaW9fZGF0YSwgaW9fcmVhZCwKLQlU UF9QUk9UTyhpbnQgcmVnLCBpbnQgYWRkciwgY29uc3Qgdm9pZCAqaW9fYnVmLCBzaXplX3QgbGVu KSwKLQlUUF9BUkdTKHJlZywgYWRkciwgaW9fYnVmLCBsZW4pKTsKLSNkZWZpbmUgX3RyYWNlX2lv X2luZF9yZWFkKHJlZywgYWRkciwgaW9fYnVmLCBsZW4pXAotCXRyYWNlX2lvX3JlYWQocmVnLCBh ZGRyLCBpb19idWYsIGxlbikKLSNkZWZpbmUgX3RyYWNlX2lvX3JlYWQocmVnLCBpb19idWYsIGxl bikgdHJhY2VfaW9fcmVhZChyZWcsIC0xLCBpb19idWYsIGxlbikKLQotREVDTEFSRV9FVkVOVF9D TEFTUyhpb19kYXRhMzIsCi0JVFBfUFJPVE8oaW50IHJlZywgaW50IGFkZHIsIHUzMiB2YWwpLAot CVRQX0FSR1MocmVnLCBhZGRyLCB2YWwpLAotCVRQX1NUUlVDVF9fZW50cnkoCi0JCV9fZmllbGQo aW50LCByZWcpCi0JCV9fZmllbGQoaW50LCBhZGRyKQotCQlfX2ZpZWxkKGludCwgdmFsKQotCQlf X2FycmF5KHU4LCBhZGRyX3N0ciwgMTApCi0JKSwKLQlUUF9mYXN0X2Fzc2lnbigKLQkJX19lbnRy eS0+cmVnID0gcmVnOwotCQlfX2VudHJ5LT5hZGRyID0gYWRkcjsKLQkJX19lbnRyeS0+dmFsID0g dmFsOwotCQlpZiAoYWRkciA+PSAwKQotCQkJc25wcmludGYoX19lbnRyeS0+YWRkcl9zdHIsIDEw LCAiLyUwOHgiLCBhZGRyKTsKLQkJZWxzZQotCQkJX19lbnRyeS0+YWRkcl9zdHJbMF0gPSAwOwot CSksCi0JVFBfcHJpbnRrKCIlcyVzOiAlMDh4IiwKLQkJX19wcmludF9zeW1ib2xpYyhfX2VudHJ5 LT5yZWcsIHdmeF9yZWdfbGlzdCksCi0JCV9fZW50cnktPmFkZHJfc3RyLAotCQlfX2VudHJ5LT52 YWwKLQkpCi0pOwotREVGSU5FX0VWRU5UKGlvX2RhdGEzMiwgaW9fd3JpdGUzMiwKLQlUUF9QUk9U TyhpbnQgcmVnLCBpbnQgYWRkciwgdTMyIHZhbCksCi0JVFBfQVJHUyhyZWcsIGFkZHIsIHZhbCkp OwotI2RlZmluZSBfdHJhY2VfaW9faW5kX3dyaXRlMzIocmVnLCBhZGRyLCB2YWwpIHRyYWNlX2lv X3dyaXRlMzIocmVnLCBhZGRyLCB2YWwpCi0jZGVmaW5lIF90cmFjZV9pb193cml0ZTMyKHJlZywg dmFsKSB0cmFjZV9pb193cml0ZTMyKHJlZywgLTEsIHZhbCkKLURFRklORV9FVkVOVChpb19kYXRh MzIsIGlvX3JlYWQzMiwKLQlUUF9QUk9UTyhpbnQgcmVnLCBpbnQgYWRkciwgdTMyIHZhbCksCi0J VFBfQVJHUyhyZWcsIGFkZHIsIHZhbCkpOwotI2RlZmluZSBfdHJhY2VfaW9faW5kX3JlYWQzMihy ZWcsIGFkZHIsIHZhbCkgdHJhY2VfaW9fcmVhZDMyKHJlZywgYWRkciwgdmFsKQotI2RlZmluZSBf dHJhY2VfaW9fcmVhZDMyKHJlZywgdmFsKSB0cmFjZV9pb19yZWFkMzIocmVnLCAtMSwgdmFsKQot Ci1ERUNMQVJFX0VWRU5UX0NMQVNTKHBpZ2d5YmFjaywKLQlUUF9QUk9UTyh1MzIgdmFsLCBib29s IGlnbm9yZWQpLAotCVRQX0FSR1ModmFsLCBpZ25vcmVkKSwKLQlUUF9TVFJVQ1RfX2VudHJ5KAot CQlfX2ZpZWxkKGludCwgdmFsKQotCQlfX2ZpZWxkKGJvb2wsIGlnbm9yZWQpCi0JKSwKLQlUUF9m YXN0X2Fzc2lnbigKLQkJX19lbnRyeS0+dmFsID0gdmFsOwotCQlfX2VudHJ5LT5pZ25vcmVkID0g aWdub3JlZDsKLQkpLAotCVRQX3ByaW50aygiQ09OVFJPTDogJTA4eCVzIiwKLQkJX19lbnRyeS0+ dmFsLAotCQlfX2VudHJ5LT5pZ25vcmVkID8gIiAoaWdub3JlZCkiIDogIiIKLQkpCi0pOwotREVG SU5FX0VWRU5UKHBpZ2d5YmFjaywgcGlnZ3liYWNrLAotCVRQX1BST1RPKHUzMiB2YWwsIGJvb2wg aWdub3JlZCksCi0JVFBfQVJHUyh2YWwsIGlnbm9yZWQpKTsKLSNkZWZpbmUgX3RyYWNlX3BpZ2d5 YmFjayh2YWwsIGlnbm9yZWQpIHRyYWNlX3BpZ2d5YmFjayh2YWwsIGlnbm9yZWQpCi0KLVRSQUNF X0VWRU5UKGJoX3N0YXRzLAotCVRQX1BST1RPKGludCBpbmQsIGludCByZXEsIGludCBjbmYsIGlu dCBidXN5LCBib29sIHJlbGVhc2UpLAotCVRQX0FSR1MoaW5kLCByZXEsIGNuZiwgYnVzeSwgcmVs ZWFzZSksCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJX19maWVsZChpbnQsIGluZCkKLQkJX19maWVs ZChpbnQsIHJlcSkKLQkJX19maWVsZChpbnQsIGNuZikKLQkJX19maWVsZChpbnQsIGJ1c3kpCi0J CV9fZmllbGQoYm9vbCwgcmVsZWFzZSkKLQkpLAotCVRQX2Zhc3RfYXNzaWduKAotCQlfX2VudHJ5 LT5pbmQgPSBpbmQ7Ci0JCV9fZW50cnktPnJlcSA9IHJlcTsKLQkJX19lbnRyeS0+Y25mID0gY25m OwotCQlfX2VudHJ5LT5idXN5ID0gYnVzeTsKLQkJX19lbnRyeS0+cmVsZWFzZSA9IHJlbGVhc2U7 Ci0JKSwKLQlUUF9wcmludGsoIklORC9SRVEvQ05GOiUzZC8lM2QvJTNkLCBSRVEgaW4gcHJvZ3Jl c3M6JTNkLCBXVVA6ICVzIiwKLQkJX19lbnRyeS0+aW5kLAotCQlfX2VudHJ5LT5yZXEsCi0JCV9f ZW50cnktPmNuZiwKLQkJX19lbnRyeS0+YnVzeSwKLQkJX19lbnRyeS0+cmVsZWFzZSA/ICJyZWxl YXNlIiA6ICJrZWVwIgotCSkKLSk7Ci0jZGVmaW5lIF90cmFjZV9iaF9zdGF0cyhpbmQsIHJlcSwg Y25mLCBidXN5LCByZWxlYXNlKVwKLQl0cmFjZV9iaF9zdGF0cyhpbmQsIHJlcSwgY25mLCBidXN5 LCByZWxlYXNlKQotCi1UUkFDRV9FVkVOVCh0eF9zdGF0cywKLQlUUF9QUk9UTyhjb25zdCBzdHJ1 Y3QgaGlmX2NuZl90eCAqdHhfY25mLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgaW50 IGRlbGF5KSwKLQlUUF9BUkdTKHR4X2NuZiwgc2tiLCBkZWxheSksCi0JVFBfU1RSVUNUX19lbnRy eSgKLQkJX19maWVsZChpbnQsIHBrdF9pZCkKLQkJX19maWVsZChpbnQsIGRlbGF5X21lZGlhKQot CQlfX2ZpZWxkKGludCwgZGVsYXlfcXVldWUpCi0JCV9fZmllbGQoaW50LCBkZWxheV9mdykKLQkJ X19maWVsZChpbnQsIGFja19mYWlsdXJlcykKLQkJX19maWVsZChpbnQsIGZsYWdzKQotCQlfX2Fy cmF5KGludCwgcmF0ZSwgNCkKLQkJX19hcnJheShpbnQsIHR4X2NvdW50LCA0KQotCSksCi0JVFBf ZmFzdF9hc3NpZ24oCi0JCS8vIEtlZXAgc3luYyB3aXRoIHdmeF9yYXRlcyBkZWZpbml0aW9uIGlu IG1haW4uYwotCQlzdGF0aWMgY29uc3QgaW50IGh3X3JhdGVbXSA9IHsgMCwgMSwgMiwgMywgNiwg NywgOCwgOSwKLQkJCQkJICAgICAgIDEwLCAxMSwgMTIsIDEzIH07Ci0JCWNvbnN0IHN0cnVjdCBp ZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9Ci0JCQkoY29uc3Qgc3RydWN0IGllZWU4MDIxMV90 eF9pbmZvICopc2tiLT5jYjsKLQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRl cyA9IHR4X2luZm8tPmRyaXZlcl9yYXRlczsKLQkJaW50IGk7Ci0KLQkJX19lbnRyeS0+cGt0X2lk ID0gdHhfY25mLT5wYWNrZXRfaWQ7Ci0JCV9fZW50cnktPmRlbGF5X21lZGlhID0gbGUzMl90b19j cHUodHhfY25mLT5tZWRpYV9kZWxheSk7Ci0JCV9fZW50cnktPmRlbGF5X3F1ZXVlID0gbGUzMl90 b19jcHUodHhfY25mLT50eF9xdWV1ZV9kZWxheSk7Ci0JCV9fZW50cnktPmRlbGF5X2Z3ID0gZGVs YXk7Ci0JCV9fZW50cnktPmFja19mYWlsdXJlcyA9IHR4X2NuZi0+YWNrX2ZhaWx1cmVzOwotCQlp ZiAoIXR4X2NuZi0+c3RhdHVzIHx8IF9fZW50cnktPmFja19mYWlsdXJlcykKLQkJCV9fZW50cnkt PmFja19mYWlsdXJlcyArPSAxOwotCi0JCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTlVNX0FD UzsgaSsrKSB7Ci0JCQlpZiAocmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfTUNTKQot CQkJCV9fZW50cnktPnJhdGVbaV0gPSByYXRlc1tpXS5pZHg7Ci0JCQllbHNlCi0JCQkJX19lbnRy eS0+cmF0ZVtpXSA9IGh3X3JhdGVbcmF0ZXNbaV0uaWR4XTsKLQkJCV9fZW50cnktPnR4X2NvdW50 W2ldID0gcmF0ZXNbaV0uY291bnQ7Ci0JCX0KLQkJX19lbnRyeS0+ZmxhZ3MgPSAwOwotCQlpZiAo cmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfTUNTKQotCQkJX19lbnRyeS0+ZmxhZ3Mg fD0gMHgwMTsKLQkJaWYgKHJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJ KQotCQkJX19lbnRyeS0+ZmxhZ3MgfD0gMHgwMjsKLQkJaWYgKHJhdGVzWzBdLmZsYWdzICYgSUVF RTgwMjExX1RYX1JDX0dSRUVOX0ZJRUxEKQotCQkJX19lbnRyeS0+ZmxhZ3MgfD0gMHgwNDsKLQkJ aWYgKHJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKQotCQkJX19l bnRyeS0+ZmxhZ3MgfD0gMHgwODsKLQkJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RY X0NUTF9TRU5EX0FGVEVSX0RUSU0pCi0JCQlfX2VudHJ5LT5mbGFncyB8PSAweDEwOwotCQlpZiAo dHhfY25mLT5zdGF0dXMpCi0JCQlfX2VudHJ5LT5mbGFncyB8PSAweDIwOwotCQlpZiAodHhfY25m LT5zdGF0dXMgPT0gSElGX1NUQVRVU19UWF9GQUlMX1JFUVVFVUUpCi0JCQlfX2VudHJ5LT5mbGFn cyB8PSAweDQwOwotCSksCi0JVFBfcHJpbnRrKCJwYWNrZXQgSUQ6ICUwOHgsIHJhdGUgcG9saWN5 OiAlcyAlZHwlZCAlZHwlZCAlZHwlZCAlZHwlZCAtPiAlZCBhdHRlbXB0LCBEZWxheXMgbWVkaWEv cXVldWUvdG90YWw6ICU0ZHVzLyU0ZHVzLyU0ZHVzIiwKLQkJX19lbnRyeS0+cGt0X2lkLAotCQlf X3ByaW50X2ZsYWdzKF9fZW50cnktPmZsYWdzLCBOVUxMLAotCQkJeyAweDAxLCAiTSIgfSwgeyAw eDAyLCAiUyIgfSwgeyAweDA0LCAiRyIgfSwKLQkJCXsgMHgwOCwgIlIiIH0sIHsgMHgxMCwgIkQi IH0sIHsgMHgyMCwgIkYiIH0sCi0JCQl7IDB4NDAsICJRIiB9KSwKLQkJX19lbnRyeS0+cmF0ZVsw XSwKLQkJX19lbnRyeS0+dHhfY291bnRbMF0sCi0JCV9fZW50cnktPnJhdGVbMV0sCi0JCV9fZW50 cnktPnR4X2NvdW50WzFdLAotCQlfX2VudHJ5LT5yYXRlWzJdLAotCQlfX2VudHJ5LT50eF9jb3Vu dFsyXSwKLQkJX19lbnRyeS0+cmF0ZVszXSwKLQkJX19lbnRyeS0+dHhfY291bnRbM10sCi0JCV9f ZW50cnktPmFja19mYWlsdXJlcywKLQkJX19lbnRyeS0+ZGVsYXlfbWVkaWEsCi0JCV9fZW50cnkt PmRlbGF5X3F1ZXVlLAotCQlfX2VudHJ5LT5kZWxheV9mdwotCSkKLSk7Ci0jZGVmaW5lIF90cmFj ZV90eF9zdGF0cyh0eF9jbmYsIHNrYiwgZGVsYXkpIHRyYWNlX3R4X3N0YXRzKHR4X2NuZiwgc2ti LCBkZWxheSkKLQotVFJBQ0VfRVZFTlQocXVldWVzX3N0YXRzLAotCVRQX1BST1RPKHN0cnVjdCB3 ZnhfZGV2ICp3ZGV2LCBjb25zdCBzdHJ1Y3Qgd2Z4X3F1ZXVlICplbGVjdGVkX3F1ZXVlKSwKLQlU UF9BUkdTKHdkZXYsIGVsZWN0ZWRfcXVldWUpLAotCVRQX1NUUlVDVF9fZW50cnkoCi0JCV9fZmll bGQoaW50LCB2aWZfaWQpCi0JCV9fZmllbGQoaW50LCBxdWV1ZV9pZCkKLQkJX19hcnJheShpbnQs IGh3LCBJRUVFODAyMTFfTlVNX0FDUyAqIDIpCi0JCV9fYXJyYXkoaW50LCBkcnYsIElFRUU4MDIx MV9OVU1fQUNTICogMikKLQkJX19hcnJheShpbnQsIGNhYiwgSUVFRTgwMjExX05VTV9BQ1MgKiAy KQotCSksCi0JVFBfZmFzdF9hc3NpZ24oCi0JCWNvbnN0IHN0cnVjdCB3ZnhfcXVldWUgKnF1ZXVl OwotCQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZjsKLQkJaW50IGksIGo7Ci0KLQkJZm9yIChqID0gMDsg aiA8IElFRUU4MDIxMV9OVU1fQUNTICogMjsgaisrKSB7Ci0JCQlfX2VudHJ5LT5od1tqXSA9IC0x OwotCQkJX19lbnRyeS0+ZHJ2W2pdID0gLTE7Ci0JCQlfX2VudHJ5LT5jYWJbal0gPSAtMTsKLQkJ fQotCQlfX2VudHJ5LT52aWZfaWQgPSAtMTsKLQkJX19lbnRyeS0+cXVldWVfaWQgPSAtMTsKLQkJ d3ZpZiA9IE5VTEw7Ci0JCXdoaWxlICgod3ZpZiA9IHd2aWZfaXRlcmF0ZSh3ZGV2LCB3dmlmKSkg IT0gTlVMTCkgewotCQkJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1fQUNTOyBpKyspIHsK LQkJCQlqID0gd3ZpZi0+aWQgKiBJRUVFODAyMTFfTlVNX0FDUyArIGk7Ci0JCQkJV0FSTl9PTihq ID49IElFRUU4MDIxMV9OVU1fQUNTICogMik7Ci0JCQkJcXVldWUgPSAmd3ZpZi0+dHhfcXVldWVb aV07Ci0JCQkJX19lbnRyeS0+aHdbal0gPSBhdG9taWNfcmVhZCgmcXVldWUtPnBlbmRpbmdfZnJh bWVzKTsKLQkJCQlfX2VudHJ5LT5kcnZbal0gPSBza2JfcXVldWVfbGVuKCZxdWV1ZS0+bm9ybWFs KTsKLQkJCQlfX2VudHJ5LT5jYWJbal0gPSBza2JfcXVldWVfbGVuKCZxdWV1ZS0+Y2FiKTsKLQkJ CQlpZiAocXVldWUgPT0gZWxlY3RlZF9xdWV1ZSkgewotCQkJCQlfX2VudHJ5LT52aWZfaWQgPSB3 dmlmLT5pZDsKLQkJCQkJX19lbnRyeS0+cXVldWVfaWQgPSBpOwotCQkJCX0KLQkJCX0KLQkJfQot CSksCi0JVFBfcHJpbnRrKCJnb3Qgc2tiIGZyb20gJWQvJWQsIHBlbmQuIGh3L25vcm0vY2FiOiBb ICVkLyVkLyVkICVkLyVkLyVkICVkLyVkLyVkICVkLyVkLyVkIF0gWyAlZC8lZC8lZCAlZC8lZC8l ZCAlZC8lZC8lZCAlZC8lZC8lZCBdIiwKLQkJX19lbnRyeS0+dmlmX2lkLCBfX2VudHJ5LT5xdWV1 ZV9pZCwKLQkJX19lbnRyeS0+aHdbMF0sIF9fZW50cnktPmRydlswXSwgX19lbnRyeS0+Y2FiWzBd LAotCQlfX2VudHJ5LT5od1sxXSwgX19lbnRyeS0+ZHJ2WzFdLCBfX2VudHJ5LT5jYWJbMV0sCi0J CV9fZW50cnktPmh3WzJdLCBfX2VudHJ5LT5kcnZbMl0sIF9fZW50cnktPmNhYlsyXSwKLQkJX19l bnRyeS0+aHdbM10sIF9fZW50cnktPmRydlszXSwgX19lbnRyeS0+Y2FiWzNdLAotCQlfX2VudHJ5 LT5od1s0XSwgX19lbnRyeS0+ZHJ2WzRdLCBfX2VudHJ5LT5jYWJbNF0sCi0JCV9fZW50cnktPmh3 WzVdLCBfX2VudHJ5LT5kcnZbNV0sIF9fZW50cnktPmNhYls1XSwKLQkJX19lbnRyeS0+aHdbNl0s IF9fZW50cnktPmRydls2XSwgX19lbnRyeS0+Y2FiWzZdLAotCQlfX2VudHJ5LT5od1s3XSwgX19l bnRyeS0+ZHJ2WzddLCBfX2VudHJ5LT5jYWJbN10KLQkpCi0pOwotCi0jZW5kaWYKLQotLyogVGhp cyBwYXJ0IG11c3QgYmUgb3V0c2lkZSBwcm90ZWN0aW9uICovCi0jdW5kZWYgVFJBQ0VfSU5DTFVE RV9QQVRICi0jZGVmaW5lIFRSQUNFX0lOQ0xVREVfUEFUSCAuCi0jdW5kZWYgVFJBQ0VfSU5DTFVE RV9GSUxFCi0jZGVmaW5lIFRSQUNFX0lOQ0xVREVfRklMRSB0cmFjZXMKLQotI2luY2x1ZGUgPHRy YWNlL2RlZmluZV90cmFjZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC93Zngu aCBiL2RyaXZlcnMvc3RhZ2luZy93Zngvd2Z4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDk0ODk4NjgwY2NkZS4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93Zngv d2Z4LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjYgKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwotLyoKLSAqIENvbW1vbiBwcml2YXRlIGRhdGEgZm9y IFNpbGljb24gTGFicyBXRnggY2hpcHMuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAs IFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVy aWNzc29uCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291 cm1pbGsubmV0PgotICogQ29weXJpZ2h0IDIwMDQtMjAwNiBKZWFuLUJhcHRpc3RlIE5vdGUgPGpi bm90ZUBnbWFpbC5jb20+LCBldCBhbC4KLSAqLwotI2lmbmRlZiBXRlhfSAotI2RlZmluZSBXRlhf SAotCi0jaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtx dWV1ZS5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvbm9zcGVj Lmg+Ci0jaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Ci0KLSNpbmNsdWRlICJiaC5oIgotI2luY2x1 ZGUgImRhdGFfdHguaCIKLSNpbmNsdWRlICJtYWluLmgiCi0jaW5jbHVkZSAicXVldWUuaCIKLSNp bmNsdWRlICJoaWZfdHguaCIKLQotI2RlZmluZSBVU0VDX1BFUl9UWE9QIDMyIC8vIHNlZSBzdHJ1 Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcwotI2RlZmluZSBVU0VDX1BFUl9UVSAxMDI0Ci0K LXN0cnVjdCBod2J1c19vcHM7Ci0KLXN0cnVjdCB3ZnhfZGV2IHsKLQlzdHJ1Y3Qgd2Z4X3BsYXRm b3JtX2RhdGEgcGRhdGE7Ci0Jc3RydWN0IGRldmljZQkJKmRldjsKLQlzdHJ1Y3QgaWVlZTgwMjEx X2h3CSpodzsKLQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZgkqdmlmWzJdOwotCXN0cnVjdCBtYWNfYWRk cmVzcwlhZGRyZXNzZXNbMl07Ci0JY29uc3Qgc3RydWN0IGh3YnVzX29wcwkqaHdidXNfb3BzOwot CXZvaWQJCQkqaHdidXNfcHJpdjsKLQotCXU4CQkJa2V5c2V0OwotCXN0cnVjdCBjb21wbGV0aW9u CWZpcm13YXJlX3JlYWR5OwotCXN0cnVjdCBoaWZfaW5kX3N0YXJ0dXAJaHdfY2FwczsKLQlzdHJ1 Y3Qgd2Z4X2hpZgkJaGlmOwotCXN0cnVjdCBkZWxheWVkX3dvcmsJY29vbGluZ190aW1lb3V0X3dv cms7Ci0JYm9vbAkJCXBvbGxfaXJxOwotCWJvb2wJCQljaGlwX2Zyb3plbjsKLQlzdHJ1Y3QgbXV0 ZXgJCWNvbmZfbXV0ZXg7Ci0KLQlzdHJ1Y3Qgd2Z4X2hpZl9jbWQJaGlmX2NtZDsKLQlzdHJ1Y3Qg c2tfYnVmZl9oZWFkCXR4X3BlbmRpbmc7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QJdHhfZGVxdWV1ZTsK LQlhdG9taWNfdAkJdHhfbG9jazsKLQotCWF0b21pY190CQlwYWNrZXRfaWQ7Ci0JdTMyCQkJa2V5 X21hcDsKLQotCXN0cnVjdCBoaWZfcnhfc3RhdHMJcnhfc3RhdHM7Ci0Jc3RydWN0IG11dGV4CQly eF9zdGF0c19sb2NrOwotCXN0cnVjdCBoaWZfdHhfcG93ZXJfbG9vcF9pbmZvIHR4X3Bvd2VyX2xv b3BfaW5mbzsKLQlzdHJ1Y3QgbXV0ZXgJCXR4X3Bvd2VyX2xvb3BfaW5mb19sb2NrOwotCWludAkJ CWZvcmNlX3BzX3RpbWVvdXQ7Ci19OwotCi1zdHJ1Y3Qgd2Z4X3ZpZiB7Ci0Jc3RydWN0IHdmeF9k ZXYJCSp3ZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfdmlmCSp2aWY7Ci0Jc3RydWN0IGllZWU4MDIx MV9jaGFubmVsICpjaGFubmVsOwotCWludAkJCWlkOwotCi0JdTMyCQkJbGlua19pZF9tYXA7Ci0K LQlib29sCQkJYWZ0ZXJfZHRpbV90eF9hbGxvd2VkOwotCWJvb2wJCQlqb2luX2luX3Byb2dyZXNz OwotCi0Jc3RydWN0IGRlbGF5ZWRfd29yawliZWFjb25fbG9zc193b3JrOwotCi0Jc3RydWN0IHdm eF9xdWV1ZQl0eF9xdWV1ZVs0XTsKLQlzdHJ1Y3QgdHhfcG9saWN5X2NhY2hlCXR4X3BvbGljeV9j YWNoZTsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJdHhfcG9saWN5X3VwbG9hZF93b3JrOwotCi0Jc3Ry dWN0IHdvcmtfc3RydWN0CXVwZGF0ZV90aW1fd29yazsKLQotCXVuc2lnbmVkIGxvbmcJCXVhcHNk X21hc2s7Ci0KLQkvKiBhdm9pZCBzb21lIG9wZXJhdGlvbnMgaW4gcGFyYWxsZWwgd2l0aCBzY2Fu ICovCi0Jc3RydWN0IG11dGV4CQlzY2FuX2xvY2s7Ci0Jc3RydWN0IHdvcmtfc3RydWN0CXNjYW5f d29yazsKLQlzdHJ1Y3QgY29tcGxldGlvbglzY2FuX2NvbXBsZXRlOwotCWJvb2wJCQlzY2FuX2Fi b3J0OwotCXN0cnVjdCBpZWVlODAyMTFfc2Nhbl9yZXF1ZXN0ICpzY2FuX3JlcTsKLQotCXN0cnVj dCBjb21wbGV0aW9uCXNldF9wbV9tb2RlX2NvbXBsZXRlOwotfTsKLQotc3RhdGljIGlubGluZSBz dHJ1Y3Qgd2Z4X3ZpZiAqd2Rldl90b193dmlmKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgdmlm X2lkKQotewotCWlmICh2aWZfaWQgPj0gQVJSQVlfU0laRSh3ZGV2LT52aWYpKSB7Ci0JCWRldl9k Ymcod2Rldi0+ZGV2LCAicmVxdWVzdGluZyBub24tZXhpc3RlbnQgdmlmOiAlZFxuIiwgdmlmX2lk KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXZpZl9pZCA9IGFycmF5X2luZGV4X25vc3BlYyh2aWZf aWQsIEFSUkFZX1NJWkUod2Rldi0+dmlmKSk7Ci0JaWYgKCF3ZGV2LT52aWZbdmlmX2lkXSkgewot CQlkZXZfZGJnKHdkZXYtPmRldiwgInJlcXVlc3Rpbmcgbm9uLWFsbG9jYXRlZCB2aWY6ICVkXG4i LAotCQkJdmlmX2lkKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXJldHVybiAoc3RydWN0IHdmeF92 aWYgKikgd2Rldi0+dmlmW3ZpZl9pZF0tPmRydl9wcml2OwotfQotCi1zdGF0aWMgaW5saW5lIHN0 cnVjdCB3ZnhfdmlmICp3dmlmX2l0ZXJhdGUoc3RydWN0IHdmeF9kZXYgKndkZXYsCi0JCQkJCSAg IHN0cnVjdCB3ZnhfdmlmICpjdXIpCi17Ci0JaW50IGk7Ci0JaW50IG1hcmsgPSAwOwotCXN0cnVj dCB3ZnhfdmlmICp0bXA7Ci0KLQlpZiAoIWN1cikKLQkJbWFyayA9IDE7Ci0JZm9yIChpID0gMDsg aSA8IEFSUkFZX1NJWkUod2Rldi0+dmlmKTsgaSsrKSB7Ci0JCXRtcCA9IHdkZXZfdG9fd3ZpZih3 ZGV2LCBpKTsKLQkJaWYgKG1hcmsgJiYgdG1wKQotCQkJcmV0dXJuIHRtcDsKLQkJaWYgKHRtcCA9 PSBjdXIpCi0JCQltYXJrID0gMTsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbmxp bmUgaW50IHd2aWZfY291bnQoc3RydWN0IHdmeF9kZXYgKndkZXYpCi17Ci0JaW50IGk7Ci0JaW50 IHJldCA9IDA7Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWY7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRSh3ZGV2LT52aWYpOyBpKyspIHsKLQkJd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2LCBp KTsKLQkJaWYgKHd2aWYpCi0JCQlyZXQrKzsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGlj IGlubGluZSB2b2lkIG1lbXJldmVyc2UodTggKnNyYywgdTggbGVuZ3RoKQotewotCXU4ICpsbyA9 IHNyYzsKLQl1OCAqaGkgPSBzcmMgKyBsZW5ndGggLSAxOwotCXU4IHN3YXA7Ci0KLQl3aGlsZSAo bG8gPCBoaSkgewotCQlzd2FwID0gKmxvOwotCQkqbG8rKyA9ICpoaTsKLQkJKmhpLS0gPSBzd2Fw OwotCX0KLX0KLQotc3RhdGljIGlubGluZSBpbnQgbWVtemNtcCh2b2lkICpzcmMsIHVuc2lnbmVk IGludCBzaXplKQotewotCXU4ICpidWYgPSBzcmM7Ci0KLQlpZiAoIXNpemUpCi0JCXJldHVybiAw OwotCWlmICgqYnVmKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gbWVtY21wKGJ1ZiwgYnVmICsgMSwg c2l6ZSAtIDEpOwotfQotCi0jZW5kaWYgLyogV0ZYX0ggKi8KLS0gCjIuMzAuMgoK