Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp3552509pxb; Mon, 30 Aug 2021 05:16:12 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwU9LvoTcyluJazMGplBNbWtRRU8+NnnjGVImCT5BAhp5Nc8g4AGe24TnRL4EJOIMAM8Dou X-Received: by 2002:a92:c702:: with SMTP id a2mr16146173ilp.210.1630325772325; Mon, 30 Aug 2021 05:16:12 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1630325772; cv=pass; d=google.com; s=arc-20160816; b=WABnKDYf2RkhqE+8oL/GIhsT0C6FFbgXmO/EEevpOaA2gQqFyJLda4GjE+UTAsm4Mt 1SaN+zQG+JRWTjzn8A6EK+ovorj7hoIgDDY9jqqijKPIKowPhqDjIceYLEODi4JeiMCx Zslbgg49KFD/HYRr0KEz87XSsFTQ0lwy/eSiQ3JNx6UWkTWwslfTOXHt5gRzJ/wAiS/1 IcTo+6U42f8gmy54FuNBfF/DLPz/FrXttIot6Hkt8MCGOYY35Ctqfe+EyeTyy+8HubRl PRsSDMuxRKjs1371S0SCqsEspd+JwTvoNg2MjxLnlqmj5axoMXav1YIXCieK+oVgXjjH OJxA== 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 :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=SN5j+A0EoBbaj7mBb5hVU95R53o8JVA4BXHdPgUanGg=; b=IDLAPcAe86hpyGTswsk8QrAReIL7Dl7K62pCumdc4tE2PgMoM4tA6LsfllH+vzq5xV NQj4y61030m7hHYRcIP6QqlOsaNMF0biuVbfm3kZp8NsMGPo9GgCir0Q4y+zCPaqnng/ J/Q4eMfmLn6u25OtGnv42QWTb3ZEisE2hh7OaIDM4UIQjBa4CKKIY2FROpynO62122Hi KeK41Kf+cQomK8ejA4DSB5AqsaWzfxi+JkqTuDXe7j0oK7B+BdiZShTMC7+NUoJb1CP7 8r4yhPkTgWG55PrOar3hU2qj9TUgNfxJ5idzxkA55PHjHYfphnN/OoVrTkBC0+qEVMIa aZDg== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@towerbridgetechnology.onmicrosoft.com header.s=selector2-towerbridgetechnology-onmicrosoft-com header.b=J2JXlANR; arc=pass (i=1 spf=pass spfdomain=bayhubtech.com dkim=pass dkdomain=bayhubtech.com dmarc=pass fromdomain=bayhubtech.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 n20si13732299iod.5.2021.08.30.05.15.59; Mon, 30 Aug 2021 05:16:12 -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=@towerbridgetechnology.onmicrosoft.com header.s=selector2-towerbridgetechnology-onmicrosoft-com header.b=J2JXlANR; arc=pass (i=1 spf=pass spfdomain=bayhubtech.com dkim=pass dkdomain=bayhubtech.com dmarc=pass fromdomain=bayhubtech.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 S236641AbhH3MPl (ORCPT + 99 others); Mon, 30 Aug 2021 08:15:41 -0400 Received: from mail-dm6nam08on2110.outbound.protection.outlook.com ([40.107.102.110]:10145 "EHLO NAM04-DM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S231165AbhH3MPk (ORCPT ); Mon, 30 Aug 2021 08:15:40 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ig0bp0rsdWJGOClmllQVHR2WFuUVcX1TbeslSBiqL7TDXkcSVptOj/Z6rhoZme49W/gHlj8IwaKawyZB3+NU6nDR2v7k8UrKTlpMAleN6ryCOhSzp2vSa9n7Fc9yrbEoDFGXZ23o9zGTJzNRQpEbLCgc3ll59bZogmCUY0PieTYjlyp1GbxeiQkWDxFerVQNbLsHVvv8zHWBoYBRnpmjY2WziB/CQpQtYdhKTooB59e/L17kbONHhKe+f3ZPN7l/08HhV2gObZOf0jxGANzjvrwaF1gUq4Qnkl1uE+HC98wBLn1VYitpPkhu8ACIYUSJKgkqNcPrlxpu8hTdzzjjZA== 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=SN5j+A0EoBbaj7mBb5hVU95R53o8JVA4BXHdPgUanGg=; b=Jsp3W11J9STkUS/cdt6pDq6Ob2gDdjjYgUqGZ+w/UAp+9qSWbFSua4L8OXq8nheQ8+vdo4xAwcLKLlVlHfnJO8ShcmUk4ePCjaMiHmiojCTvDNwpqvA2mzgcscPDPubE9oP8aSSf0hzl+J9rRRtVhxzsm1kKKoWQ4x+87O4SLh0BCeDz0tSr+6y72j+3m4qaiud5uiw58Idu5p+MnCX3LTXCvWwNjzayLq6RnSfEsuqoL7lNDFrs6savZYomNycxDiqfDB8mQHvD1VNFcej7Cpes9s9NL92qKgy/RlaXcOdq0ZA+6753Hv3GA75RRGUhUJrc9u5QtUMJ/ZZmhnq7uw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bayhubtech.com; dmarc=pass action=none header.from=bayhubtech.com; dkim=pass header.d=bayhubtech.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=towerbridgetechnology.onmicrosoft.com; s=selector2-towerbridgetechnology-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=SN5j+A0EoBbaj7mBb5hVU95R53o8JVA4BXHdPgUanGg=; b=J2JXlANRM5ey+pIIQej/taXPLojUB1SQKzVXTN0Edp64jd0Y8KeQa1532WR450yt4GxMqOyVN954fh/u4u3EP5E5VCqOaHB3RFZhf4EP2F9PAh2ZVgEAUV6tmIrbe3l+InYVgNiZAZMfDpQSuuvShzEv6miU/91nj5vPez1ff3k= Received: from SN6PR16MB2480.namprd16.prod.outlook.com (2603:10b6:805:d2::17) by SA0PR16MB3904.namprd16.prod.outlook.com (2603:10b6:806:88::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4457.17; Mon, 30 Aug 2021 12:14:43 +0000 Received: from SN6PR16MB2480.namprd16.prod.outlook.com ([fe80::d8fa:910d:1d26:1242]) by SN6PR16MB2480.namprd16.prod.outlook.com ([fe80::d8fa:910d:1d26:1242%4]) with mapi id 15.20.4457.024; Mon, 30 Aug 2021 12:14:43 +0000 From: "Chevron Li (WH)" To: Bjorn Andersson CC: "agross@kernel.org" , "linux-arm-msm@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "Shaper Liu (WH)" , "Xiaoguang Yu (WH)" , "Shirley Her (SC)" Subject: =?gb2312?B?u9i4tDogW1BBVENIIFYxIDEvMV1tbWM6c2RoY2ktYmF5aHViOmZpeCBRdWFs?= =?gb2312?Q?comm_sd_host_845_SD_card_compatibility_issue?= Thread-Topic: [PATCH V1 1/1]mmc:sdhci-bayhub:fix Qualcomm sd host 845 SD card compatibility issue Thread-Index: AQHXg9gpHl9njd3k+kKHKpSWWi5CaKt82IGAgA8p+3A= Date: Mon, 30 Aug 2021 12:14:43 +0000 Message-ID: References: <20210728174357.21400-1-chevron.li@bayhubtech.com> In-Reply-To: Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: linaro.org; dkim=none (message not signed) header.d=none;linaro.org; dmarc=none action=none header.from=bayhubtech.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 127bbfa6-0d3c-4f23-b5b1-08d96bafc01e x-ms-traffictypediagnostic: SA0PR16MB3904: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 42VocoWS/9tgJ4jVsYcP70m3P0KJdi/kOJ1OyU7AtOdzyiGuPQnf9iF4yjmVf1efwRn9oOGgPL89ocuXM2k4OqKYf8YZZ3F7UKL5Nz3Gm1CzsHAlI/7zD+4DDlzy12aOfIMUTW4YHEsNfdl5g7J8FXP1hqmC0Z6O0GyQBXlx65Chb4aFjAXeaXP+pwnUFRBZIUWuznQcMhrqYFk+2ivhhHs8KpGUtEe1qkpVVIzPNb6JMPHN1vLGEU2SJDCBhu2yN4oJoODxyj976C4sAGRJDBXk6DFuwfsxWZ+YK+WBvCQFb3TIDCoVc+YJPPhrUN6vk5/N910Z7bvxhn5h4+YHK1tAE2fZDvWjAEI3/e8jRmiKMBA7dNRkqCynrKR1nTcwhLxKBWdRMeN1s0FCczA8Y6mBKNMg5Dh7xDAPjnShgLU+li+PWueP3zYDDuyQBglxpktwQb5PZxD8HBCJX+2nX8FlzhqXSnvKP+VbZCU12fWYGdFs9lZLbKQo0F16EoEkwD4sgFvB1sjL0nlgi8yW30+Wt9bBVI70YC0FNoLv0/GvaFGAqcRH8fPk+mlrX4Hd+fH4XirFFsa45OtF5sRWWJCclXCRF3EwdiGpQqcC1qGQsMqHRuJLbRv90Oqd9UgRpdEEcynXvF21lnXDSDykwMrgv6ei1y7hkfYwV4n8KBvsjJorICWwPxZWny2TnALpk0qRPHb27IT0MHvz0ElXvXqsW4WNatJRB7bxMMwloHQ= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR16MB2480.namprd16.prod.outlook.com;PTR:;CAT:NONE;SFS:(39830400003)(136003)(346002)(376002)(366004)(396003)(52536014)(64756008)(6506007)(478600001)(66946007)(38070700005)(2906002)(316002)(8936002)(76116006)(5660300002)(55016002)(66476007)(66556008)(66446008)(33656002)(6916009)(7696005)(9686003)(107886003)(224303003)(86362001)(54906003)(83380400001)(30864003)(186003)(38100700002)(71200400001)(26005)(122000001)(4326008)(2004002)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?gb2312?B?VjBFUUdDaHJSNCtRbXBqZXlBN2VFYTNZbmMrRkpKZDNrVWEySlZWVzNQN2Ez?= =?gb2312?B?U20rK3pZYnZXSU4walRIajdlQ0w3SlpWS1ZybFVOQTlrQXY5TzJvUEI0ZndE?= =?gb2312?B?QjFOOG1MMnh5MjJDUDhhdG9SZXFkNmEzQlZJcmk1OTdFT3kzSVBNL3NOMGhn?= =?gb2312?B?UTlCS3lWSVJjcHBYaDhUME82bE1sSFkrUHdlQlpRdjFNei9vRjdUdVByTml5?= =?gb2312?B?Nkh1Nzh0UkZyenJGbUtMVHpQZ3U5OFdPQkYxdU5RbTRvcXlveWZsd3A2WVFH?= =?gb2312?B?aFF3U0tLNU11emxKL0NWTTFoYUo1bTRIUk9WdTdEUm5aMlV5dmdtMFlJOTc4?= =?gb2312?B?akllMm1qb1RJUkt1Sk1JUWJCRTRXK00rTE1Yb1BjMkh1U255dFRKQW82bTM5?= =?gb2312?B?RFZpR0w1REYxL1VVVmxPdFV3a3RMWjMwK0x6V0VmYTFMd2Ixb0ltMnZJajRv?= =?gb2312?B?YjR5SzVuVTRDVFc0TVA0OUpuZGRHYjhTUGx4NDdLSTBHaWdLOVkwRS9KMlBX?= =?gb2312?B?dUw2UXpQZ2xjenoybGpUWHlWQlpmVEl1Y1hHOEIxOVFCQ2lVTmxERU45eGVO?= =?gb2312?B?QVZPTUxzbzFrVlpEL2tjRmJ3TFpCZm1VMElKcC9QS0E2a29WY1FZZkE4Nk05?= =?gb2312?B?MEMyUWZGMDB4eDlLMUxHSVQySldEU1Awb0hYQ1RER2dWL2w3Q3hveXFNNmg4?= =?gb2312?B?N1BUN1FINndDeU1VNjdVMmhXNHRWOWV1bVNGNHdxTlBsWlYzT0tKemdhQUlG?= =?gb2312?B?QlZXaklnRDBrUHFva1VvcGxRVit0Y3JiSHZMd2NTZUFNUzZxaVBSODJCMUxI?= =?gb2312?B?cjNOTzgweGpVbXJ1Qkx5Tmd0aVBjVnloV0FUcDFqVnZyWFhkdWcvTmliZlFt?= =?gb2312?B?azV6RmQwUFQxYmpBYlJwMi96QTJ5MFpEOVZVblltY0h3NHExNHlqSmNEYTJU?= =?gb2312?B?NzJCZEI2cUdSL0dDa25xanJNa3doOEF5Y2M2cExPaXVEeWtKUjFVbTFsMm5U?= =?gb2312?B?Q2lYdnZYNkdtRld0b21QY1g1MEZQYXR3cVZyT21WbGh6NUkvYlJaU3lMekhV?= =?gb2312?B?Mko4YlBBcDB0YmpNWEM4aUx3ZVV2MksrUVJ5alFIVHl5U1dwN0xOckE4RlhN?= =?gb2312?B?U096REtKNm4wSkdTT1YrbHhJZXNVajRjREwvYzhCeGVOdmJEL2pIQXcza3dv?= =?gb2312?B?aXZuU01TbGFVN2t2Q3JnNisxZG8vZjhBQm1Ud1RPaDNJY3QvWVMzVktNVmZx?= =?gb2312?B?anoxZ3kra2JTY3pyRjZObVlwK3o5cXp2VDRXUmhKbitObGZBa0Q4QmpEMEE5?= =?gb2312?B?Y21QbmZ5dG5wWEZ5VlRPdTJ4VVdYWlJQanNYcjZSRWdwL0NIN1hISDNIUWEw?= =?gb2312?B?VXlvanVvUHlmdFNML1hmNC94VHZaZGo0MmJZenVuSnZUTEZaTkJqMFhJWHVQ?= =?gb2312?B?ZGRPTTJoMWMwVzJXcTUwUXZ4VW45K0E2Mk5DQXRjaWtncHhrWmQwZEVKbHRz?= =?gb2312?B?MlBOMi82ZzFkaTNuSmZZTktYQk15WWxpSWkwNVVzQ3krUS9FYmQxaXhTVmZH?= =?gb2312?B?R2RiVkZQMUJEK3cxdzZleDdFalRTTVhoVHhNYTBVUU4xaTViRXAwTk1XTzk5?= =?gb2312?B?VDYrMEhxUWkvVEtTbVpQQlpTMmh3QncvSmcxK1ZUSjNaV1dtU3d3R0RMdjdG?= =?gb2312?B?djdJdkxqeHNrTzlIaEViM2hGS0QrRVhKYWV4UEdRMERrU1BiR3JyQmVzVExC?= =?gb2312?Q?SeUmQPM/GGHhCE1vULp3MI/+xaByYf9GlwC+y5+?= Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: bayhubtech.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN6PR16MB2480.namprd16.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 127bbfa6-0d3c-4f23-b5b1-08d96bafc01e X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Aug 2021 12:14:43.4563 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 0a7aae2b-8f2e-44df-ba2f-42de7f93c642 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: BhAEFPcyFDhPuN3RXnGgXBxMfUvLYBAYqx8Xf/Rb+iexu5F2xqqqoRpksT+EkWbnjhW26JJH+1bLuxmPTTnT9Tn0A65p/GcaovNLi5e1zw8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR16MB3904 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGksIEJqb3JuLA0KDQpUaGFua3MgZm9yIHlvdXIgZ2VuZXJvdXMgYWR2aWNlLg0KSSBoYXZlIGFu c3dlcmVkIHlvdXIgcXVlc3Rpb25zIGVtYmVkZGVkLg0KSWYgdGhlcmUgYXJlIG5vIHByb2JsZW0s IEkgd2lsbCBjb21lIG91dCB0aGUgVjIgYXMgeW91ciBhZHZpY2UuDQoNClRoYW5rIHlvdSBmb3Ig eW91ciBwYXRpZW50IGFnYWluIQ0KDQpCUiwgDQpDaGV2cm9uIA0KDQo+IC0tLS0t08q8/tStvP4t LS0tLQ0KPiC3orz+yMs6IEJqb3JuIEFuZGVyc3NvbiA8Ympvcm4uYW5kZXJzc29uQGxpbmFyby5v cmc+DQo+ILeiy83KsbzkOiBTYXR1cmRheSwgQXVndXN0IDIxLCAyMDIxIDI6MjENCj4gytW8/sjL OiBDaGV2cm9uIExpIChXSCkgPGNoZXZyb24ubGlAYmF5aHVidGVjaC5jb20+DQo+ILOty806IGFn cm9zc0BrZXJuZWwub3JnOyBsaW51eC1hcm0tbXNtQHZnZXIua2VybmVsLm9yZzsgbGludXgtDQo+ IGtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IFNoYXBlciBMaXUgKFdIKSA8c2hhcGVyLmxpdUBiYXlo dWJ0ZWNoLmNvbT47DQo+IFhpYW9ndWFuZyBZdSAoV0gpIDx4aWFvZ3VhbmcueXVAYmF5aHVidGVj aC5jb20+OyBTaGlybGV5IEhlciAoU0MpDQo+IDxzaGlybGV5LmhlckBiYXlodWJ0ZWNoLmNvbT4N Cj4g1vfM4jogUmU6IFtQQVRDSCBWMSAxLzFdbW1jOnNkaGNpLWJheWh1YjpmaXggUXVhbGNvbW0g c2QgaG9zdCA4NDUgU0QNCj4gY2FyZCBjb21wYXRpYmlsaXR5IGlzc3VlDQo+IA0KPiBPbiBXZWQg MjggSnVsIDEwOjQzIFBEVCAyMDIxLCBjaGV2cm9uIHdyb3RlOg0KPiANCj4gPiBJbXByb3ZlIHRo ZSBzaWduYWwgaW50ZWdyaXR5IGZvciBsb25nIFNEIGJ1cyB0cmFjZSBieSB1c2luZyA4NDUrQkgy MDENCj4gPiBTRCBob3N0IHJlZHJpdmVyIGNoaXANCj4gPg0KPiANCj4gVGhpcyBpcyBhIGxhcmdl IHBhdGNoIHdpdGggYSB2ZXJ5IHNob3J0IGNvbW1pdCBtZXNzYWdlLCB3aGljaCBsaWtlbHkgaXMg dGhlDQo+IHJlYXNvbiB3aHkgeW91J3ZlIG5vdCBnb3R0ZW4gYW55IHJldmlld3MuDQo+IA0KWWVz LCBJJ20gYSBmcmVzaG1hbiBmb3IgdGhlIHBhdGNoIHN1Ym1pc3Npb24uIFRoYW5rcyBmb3IgeW91 ciBwYXRpZW50IHJldmlldyENCg0KPiBXaGF0IGlzIHRoaXMgaGFyZHdhcmU/IFRoZSBjb21taXQg bWVzc2FnZSBnaXZlcyBtZSBhIGZlZWxpbmcgdGhhdCB0aGUNCj4gQkgyMDEgaXMgYW4gZXh0ZXJu YWwgcmVkcml2ZXIgdGhhdCBoYXMgYmVlbiBwYWlyZWQgd2l0aCB0aGUgU0RNODQ1DQo+IHNvbWV0 aW1lcz8NCj4gDQpUaGUgaGFyZHdhcmUgaXMgR0dDKGNoaXAgbmFtZSksIGFuZCB0aGlzIHByb2pl Y3QgbmFtZSBpcyBCSDIwMS4gDQpHR0MgaXMgYSBTRCBidXMgc2lnbmFsIHJlLXRpbWluZyBJQyB0 aGF0IGhhcyBiZWVuIHBhaXJlZCB3aXRoIHRoZSBTRE04NDUgc29tZXRpbWVzLg0KDQo+IFBsZWFz ZSBkZXNjcmliZSBwcm9wZXJseSBob3cgdGhlIGhhcmR3YXJlIHNldHVwIGxvb2tzIGxpa2UuDQo+ IA0KQXNzaWduIHJlc291cmNlIGZvciBHR0MgY2hpcCBkdXJpbmcgUXVhbGNvbW0gaG9zdCBwcm9i ZToNCjEuIEdHQyBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24NCjIuIEdHQyBHUElPIHJlc291cmNl IGFwcGx5DQozLiBJbXBsZW1lbnQgR0dDIGNoaXAgc3BlY2lhbCBpbml0aWFsaXphdGlvbiBmdW5j dGlvbiB3aXRoICJob3N0LT5tbWNfaG9zdF9vcHMuaW5pdF9jYXJkIiBjYWxsYmFjay4NCjQuIFJl bG9hZCBob3N0LT5tbWMtPmRldGVjdCB3aXRoIEdHQyBjaGlwIHNwZWNpYWwgaW5pdGlhdGlvbiBm bG93Lg0KICAgIEdHQyBjaGlwIHNwZWNpYWwgaW5pdGlhdGlvbiBmbG93IG1hdGNoIHdpdGggU0Qg c3BlYywgYnV0IG5vdCBtYXRjaCB3aXRoIGN1cnJlbnQgU0QgaW5pdGlhbGl6YXRpb24gZmxvdyBv ZiBMaW51eC4NCiAgICBJdCdzIG5vdCBuZWNlc3NhcnkgaWYgd2UgY2FuIHBhdGNoIHRoZSBjb2Rl IGF0IHNkLmMuDQo1LiBSZWxvYWQgdGhlIGhvc3QtPm1tY19ob3N0X29wcy5leGVjdXRlX3R1bmlu ZyB3aXRoIEdHQyBjaGlwIHNwZWNpYWwgdHVuaW5nIGZsb3cuDQoNClRoZSBrZXkgcG9pbnRzIGFy ZSBpbml0aWFsaXplZCBHR0MgY2hpcCBkdXJpbmcgU0QgaW5pdGlhbGl6YXRpb24gYW5kIHVzZSBH R0Mgc3BlY2lhbCB0dW5pbmcgZmxvdyB0byByZS10aW1pbmcgU0QgYnVzIHNpZ25hbC4NCg0KPiAN Cj4gSSBkaWQgc2tpbSB0aHJvdWdoIHRoZSBwYXRjaCB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGF0 IHlvdSdyZSBkb2luZyBhbmQgZ2F2ZQ0KPiB5b3Ugc29tZSBmZWVkYmFjayBiZWxvdywgYnV0IHRo aXMgaXMgZmFyIGZyb20gYSBjb21wbGV0ZSByZXZpZXcuDQo+IEFuZCBtYW55IG9mIHRoZSB0aGlu Z3MgSSBwb2ludCBvdXQgcmVwZWF0cyB0aHJvdWdob3V0IHRoZSBwYXRjaC4NCj4gDQo+IEkgdGhp bmsgdGhlIGZpcnN0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB3aGF0IHRoaXMgaXMgYW5kIGlmIHlv dXIgZGVzaWduIGlzIHRoZSByaWdodA0KPiBvbmUuLi4NCj4gDQpZZXMsIGFic29sdXRlbHkgYWdy ZWUsIHRoYW5rcyBmb3IgeW91ciBwYXRpZW50IGFnYWluLg0KVGhlIGZ1bmN0aW9uIG9mIHRoZSBw YXRjaCBpcyBhbHJlYWR5IHZlcmlmaWVkIG9uIENocm9tZSBPUywgYW5kIEdvb2dsZSByZXF1ZXN0 IHVzIHRvIHN1Ym1pdCB0aGUgcGF0Y2ggdG8gTGludXguDQoNCj4gPiBTaWduZWQtb2ZmLWJ5OiBj aGV2cm9uLmxpIDxjaGV2cm9uLmxpQGJheWh1YnRlY2guY29tPg0KPiANCj4gSXMgeW91ciBuYW1l IHJlYWxseSBjaGV2cm9uLmxpPyBQZXJoYXBzIENoZXZyb24gTGk/DQo+IA0KWWVzLCB0aGFua3Mg Zm9yIHlvdXIgYWR2aWNlLg0KDQo+ID4gLS0tDQo+ID4gY2hhbmdlIGluIFYxOg0KPiANCj4gSSdt IG5vdCBhYmxlIHRvIGZpbmQgdjAsIGNhbiB5b3UgcG9pbnQgbWUgdG8gaXQsIGJlY2F1c2UgSSB3 b3VsZCBsaWtlIHRvDQo+IHVuZGVyc3RhbmQgd2h5IHRoZXNlIGNoYW5nZXMgd2FzIG1hZGU6DQo+ IA0KU29ycnkgdG8gY29uZnVzZSB5b3UsIHRoaXMgcGF0Y2ggaXMgdGhlIGZpcnN0IHZlcnNpb24s IHlvdSBjYW4gdGhpbmsgaXQgYXMgVjAuDQoNCj4gPiAxLiBjb3B5IFF1YWxjb21tIGRyaXZlciBi YXNlIGZyb20gc2RoY2ktbXNtLmMgdG8gc2RoY2ktYmF5aHViLmMNCj4gDQo+IFdoeSBkbyB3ZSBu ZWVkIHRvIGR1cGxpY2F0ZSBhbGwgdGhpcyBjb2RlLg0KPiANCjEuIEdHQyBpcyBhIFNEIGJ1cyBz aWduYWwgcmUtdGltaW5nIElDLCBoYXMgbm8gdmVuZG9yIElELCAgYW5kIG5lZWQgdG8gd29yayB3 aXRoIHNkIGhvc3QgSUMgdG9nZXRoZXIuDQoyLiBRdWFsY29tbSBlbmdpbmVlciBkb2VzbqGvdCBh bGxvdyB1cyB0byBhZGQgY29kZSBpbnRvIHRoZWlyIHNvdXJjZSBjb2RlIGZpbGUuDQozLiBXZSB3 aWxsIHJlbW92ZSB0aGUgdW51c2VkIGNvZGUgb2YgUXVhbGNvbW0gbmV4dCB2ZXJzaW9uLg0KNC4g V2UgYWxzbyBjb3B5IHNvbWUgY29kZXMgZnJvbSBjb3JlIGZvbGRlciB0byBpbXBsZW1lbnQgR0dD IGNoaXAgaW5pdGlhbGl6YXRpb24uIEl0IG1hdGNoZXMgd2l0aCBTRCBob3N0IHNwZWMsIGJ1dCBk b26hr3QgbWF0Y2ggd2l0aCBjdXJyZW50IHNkIGluaXRpYWxhemF0aW9uIGZsb3cuDQpLZXkgcG9p bnRzIGFzIGJlbG93Og0KICA0LjEgQnVzIHdpZHRoIHN3aXRjaCBzaG91bGQgYXQgZnJvbnQgb2Yg dHJhbnNmZXIgbW9kZSBzd2l0Y2ggZHVyaW5nIG1vZGUgc3dpdGNoIHN0YWdlDQogIDQuMiBBQ01E NDIgc2hvdWxkIGJlIGFkZGVkIGJldHdlZW4gQnVzIHdpZHRoIHN3aXRjaCBhbmQgdHJhbnNmZXIg bW9kZSBzd2l0Y2gNCiAgNC4zIElmIGFib3ZlIHR3byBwb2ludHMgY2FuIGJlIHBhdGNoZWQgdG8g c2QuYyBkaXJlY3RseSwgd2UgY2FuIGRlY3JlYXNlIG11Y2ggcmVkdW5kYW50IGNvZGUuDQoNCj4g PiAyLiBpbXBsZW1lbnQgdGhlIEJIMjAxIGNoaXAgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gYXQg c2RoY2ktYmF5aHViLmMNCj4gDQo+IFN1Ym1pdHRpbmcgdGhpcyBhcyBhIGxhcmdlICJjb3B5IHNk aGNpLW1zbSBhbmQgaW1wbGVtZW50IEJIMjAxIiBtYWtlcyBpdA0KPiBpbXBvc3NpYmxlIHRvIGZp Z3VyZSBvdXQgd2hhdCB0aGUgQkgyMDEgc3BlY2lmaWMgcGllY2VzICh0aGF0IG5lZWRzIHRoZQ0K PiByZXZpZXcpIGFyZS4NCj4gDQpJZiB3ZSBuZWVkIHRvIHN1Ym1pdCBCSDIwMSBjaGlwIGluaXRp YWxpemF0aW9uIGZ1bmN0aW9uIHdpdGggYW4gaW5kZXBlbmRlbnQgcGF0Y2g/DQpJZiB5ZXMsIEkg d2lsbCBkbyBpdCBhdCBuZXh0IHZlcnNpb24uDQoNCj4gPiAzLiBpbXBsZW1lbnQgdGhlIEJIMjAx IGNoaXAgcG93ZXIgY29udHJvbCBmdW5jdGlvbiBhdCBzZGhjaS1iYXlodWIuYw0KPiA+IDQuIGlt cGxlbWVudCB0aGUgQkgyMDEgY2hpcCB0dW5pbmcgZnVuY3Rpb24gYXQgc2RoY2ktYmF5aHViLmMg NS4NCj4gPiByZS1pbXBsZW1lbnQgbW1jX3Jlc2NhbiB0byBtYXRjaCBCSDIwMSBtb2RlIHN3aXRj aCBmbG93IGF0DQo+ID4gc2RoY2ktYmF5aHViLmMNCj4gDQo+IElmIHRoaXMgaXMgYW4gZXh0ZXJu YWwgcmVkcml2ZXIsIGNhbiB0aGlzIGJlIHBhaXJlZCB3aXRoIGFueSBvdGhlciBTREhDSQ0KPiBj b250cm9sbGVyPw0KPiANCjEuIEdHQyBpcyBhIFNEIGJ1cyBzaWduYWwgcmUtdGltaW5nIElDLCBj YW4gd29yayB3aXRoIGFueSBvdGhlciBzdGFuZGFyZCBTREhDSSBjb250cm9sbGVyIHRvIGltcHJv dmUgU0Qgc2lnbmFsIFNJIGFuZCBUaW1pbmcsIHNwZWNpYWxseSB1c2VkIGF0IGhpZ2gtc3BlZWQg U0QgbW9kZShleC4gU0RSMTA0KSBhbmQgbG9uZyB3aXJlcyBvZiBTRCBzaWduYWxzLiANCjIuIFdl IGNvb3BlcmF0ZWQgd2l0aCBJbnRlbC9RdWFsY29tbS9NVEsvU1BSRCBzZCBob3N0IGFscmVhZHku DQoNCj4gPiAtLS0NCj4gPiAtLS0NCj4gWy4uXQ0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21t Yy9ob3N0L3NkaGNpLWJheWh1Yi5jDQo+ID4gYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLWJheWh1 Yi5jIG5ldyBmaWxlIG1vZGUgMTAwNjQ0IGluZGV4DQo+ID4gMDAwMDAwMDAwMDAwLi43NTAyOTQ3 MGJkMjINCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhj aS1iYXlodWIuYw0KPiA+IEBAIC0wLDAgKzEsNjU2MyBAQA0KPiA+ICsvLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMC1vbmx5DQo+ID4gKy8qDQo+ID4gKyAqIEJheWh1YiBUZWNobm9s b2dpZXMsIEluYy4gQkgyMDEgU0RIQ0kgYnJpZGdlIElDIGZvcg0KPiA+ICsgKiBWRU5ET1IgU0RI Q0kgcGxhdGZvcm0gZHJpdmVyIHNvdXJjZSBmaWxlDQo+ID4gKyAqDQo+ID4gKyAqIENvcHlyaWdo dCAoYykgMjAxMi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4NCj4gPiArICoNCj4gPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KPiA+ICttb2RpZnkNCj4gPiArICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5k DQo+ID4gKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLg0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCj4gPiArICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCj4g PiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQ0KPiA+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLg0KPiANCj4gVGhlIFNQRFggaGVhZGVyIGNvdmVycyB0aGlzLCBzbyBkb24ndCByZXBl YXQgdGhlIGxpY2Vuc2UgdGV4dCBoZXJlLg0KPiANClllcywgdGhhbmtzIGZvciB5b3VyIGFkdmlj ZS4NCg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4g PiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvZGVs YXkuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21tYy9tbWMuaD4NCj4gPiArI2luY2x1ZGUgPGxp bnV4L3BtX3J1bnRpbWUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3BtX29wcC5oPg0KPiA+ICsj aW5jbHVkZSA8bGludXgvc2xhYi5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4gI2luY2x1ZGUgPGxpbnV4 L2ludGVyY29ubmVjdC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcGluY3RybC9jb25zdW1lci5o PiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21tYy9j YXJkLmg+ICNpbmNsdWRlIDxsaW51eC9tbWMvc2QuaD4gI2luY2x1ZGUNCj4gPiArPGxpbnV4L2lv Lmg+ICNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSAic2Ro Y2ktcGx0Zm0uaCINCj4gPiArI2luY2x1ZGUgImNxaGNpLmgiDQo+ID4gKyNpbmNsdWRlICIuLi9j b3JlL2NvcmUuaCINCj4gPiArI2luY2x1ZGUgIi4uL2NvcmUvc2Rfb3BzLmgiDQo+ID4gKyNpbmNs dWRlICIuLi9jb3JlL3NkaW9fb3BzLmgiDQo+ID4gKyNpbmNsdWRlICIuLi9jb3JlL21tY19vcHMu aCINCj4gPiArI2luY2x1ZGUgIi4uL2NvcmUvc2QuaCINCj4gPiArI2luY2x1ZGUgIi4uL2NvcmUv YnVzLmgiDQo+ID4gKyNpbmNsdWRlICIuLi9jb3JlL2hvc3QuaCINCj4gPiArI2luY2x1ZGUgIi4u L2NvcmUvY2FyZC5oIg0KPiA+ICsjaW5jbHVkZSAiLi4vY29yZS9wd3JzZXEuaCINCj4gPiArDQo+ ID4gKyNkZWZpbmUgVFJVRQkxDQo+ID4gKyNkZWZpbmUgRkFMU0UJMA0KPiANCj4gVXNlICJ0cnVl IiBhbmQgImZhbHNlIi4uLg0KPiANClllcywgdGhhbmtzIGZvciB5b3VyIGFkdmljZS4NCg0KPiA+ ICsNCj4gPiArI2RlZmluZQlTRF9GTkNfQU1fU0RSNTAJCTB4Mg0KPiA+ICsjZGVmaW5lCVNEX0ZO Q19BTV9TRFIxMDQJMHgzDQo+ID4gKyNkZWZpbmUgQklUX1BBU1NfTUFTSyAgKDB4N2ZmKQ0KPiA+ ICsjZGVmaW5lIFNEUjEwNF9NQU5VQUxfSU5KRUNUIDB4M2ZmDQo+ID4gKyNkZWZpbmUgU0RSNTBf TUFOVUFMX0lOSkVDVCAgMHg3N2YNCj4gPiArDQo+IFsuLl0NCj4gPiArI2RlZmluZSBUVU5JTkdf UEhBU0VfU0laRQkxMQ0KPiA+ICsjZGVmaW5lIEdHQ19DRkdfREFUQSB7MHgwNzAwMDAwMCwgMHgw NzM2NDAyMiwgMHgwMTAxNTQxMiwNCj4gMHgwMTA2MjQwMCxcDQo+ID4gKwkweDEwNDAwMDc2LCAw eDAwMDI1NDMyLCAweDAxMDQ2MDc2LCAweDYyMDExMDAwLFwNCj4gPiArCTB4MzA1MDMxMDYsIDB4 NjQxNDE3MTEsIDB4MTAwNTc1MTMsIDB4MDAzMzYyMDAsXA0KPiA+ICsJMHgwMDAyMDAwNiwgMHg0 MDAwMDQwMCwgMHgxMjIwMDMxMCwgMHgzQTMxNDE3N30NCj4gPiArDQo+ID4gK3N0cnVjdCBnZ2Nf YnVzX21vZGVfY2ZnX3Qgew0KPiANCj4gRG9lcyAiX3QiIHNheSB0aGlzIGlzIGEgc3RydWN0PyBO byBuZWVkIGZvciB0aGF0IGFzICJzdHJ1Y3QgZ2djLi4uIg0KPiBhbHJlYWR5IHNheXMgIml0J3Mg YSBzdHJ1Y3QiLg0KPiANClllcywgdGhhbmtzIGZvciB5b3VyIGFkdmljZS4NCg0KPiA+ICsJdTMy IHR4X3NlbGJfdGJbVFVOSU5HX1BIQVNFX1NJWkVdOw0KPiA+ICsJdTMyIGFsbF9zZWxiX3RiW1RV TklOR19QSEFTRV9TSVpFXTsNCj4gPiArCXUzMiB0eF9zZWxiX2ZhaWxlZF9oaXN0b3J5Ow0KPiA+ ICsJaW50IGJ1c19tb2RlOw0KPiA+ICsJaW50IGRlZmF1bHRfc2VsYTsNCj4gPiArCWludCBkZWZh dWx0X3NlbGI7DQo+ID4gKwl1MzIgZGVmYXVsdF9kZWxheWNvZGU7DQo+ID4gKwl1MzIgZGxsX3Zv bHRhZ2VfdW5sb2NrX2NudFs0XTsNCj4gPiArCXUzMiBtYXhfZGVsYXljb2RlOw0KPiA+ICsJdTMy IG1pbl9kZWxheWNvZGU7DQo+ID4gKwl1MzIgZGVsYXljb2RlX25hcnJvd2Rvd25faW5kZXg7DQo+ ID4gKwl1MzIgZmFpbF9waGFzZTsNCj4gPiArfTsNCj4gPiArDQo+ID4gK2VudW0gdHVuaW5nX3N0 YXRfZXQgew0KPiANCj4gRG9lcyAiX2V0IiBtYWtlIHRoaXMgYW4gZW51bT8NClllcywgd2lsbCBt b2RpZnkgYXQgbmV4dCB2ZXJzaW9uLg0KDQo+IA0KPiA+ICsJTk9fVFVOSU5HID0gMCwNCj4gPiAr CU9VVFBVVF9QQVNTX1RZUEUgPSAxLA0KPiA+ICsJU0VUX1BIQVNFX0ZBSUxfVFlQRSA9IDIsDQo+ ID4gKwlUVU5JTkdfRkFJTF9UWVBFID0gMywNCj4gPiArCVJFQURfU1RBVFVTX0ZBSUxfVFlQRSA9 IDQsDQo+ID4gKwlUVU5JTkdfQ01EN19USU1FT1VUID0gNSwNCj4gPiArCVJFVFVOSU5HX0NBU0Ug PSA2LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArDQo+ID4gK3N0cnVjdCB0X2dnX3JlZ19zdHJ0IHsN Cj4gDQo+IFdoYXQgaXMgYSAidCBnZyByZWcgc3RydCI/DQo+IA0KSXQgbWVhbnMgR0dDIHJlZ2lz dGVyIHN0cnVjdHVyZSwgdXNlIHRoZSBzcGVjaWFsIHN0cnVjdHVyZSB0byBjb25maWd1cmUgR0dD IHJlZ2lzdGVycy4NCg0KPiA+ICsJdTMyIG9mczsNCj4gPiArCXUzMiBtYXNrOw0KPiA+ICsJdTMy IHZhbHVlOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IHJsX2JpdF9sY3Qgew0KPiA+ICsJ dTggYml0czsNCj4gPiArCXU4IHJsX2JpdHM7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3Qg Y2hrX3R5cGVfdCB7DQo+IA0KPiBUaGlzIG9ubHkgdGltZSB0aGlzIGlzIHVzZWQsIGl0J3MgdGhl cmUgdG8gcGFzcyAzIGJvb2xzIGludG8gYSBmdW5jdGlvbi4NCj4gSnVzdCB1c2UgZnVuY3Rpb24g YXJndW1lbnRzLg0KPiANClllcywgdGhhbmtzIGZvciB5b3VyIGFkdmljZS4NCg0KPiA+ICsJdTgg cmlnaHRfdmFsaWQ6MTsNCj4gPiArCXU4IGZpcnN0X3ZhbGlkOjE7DQo+ID4gKwl1OCByZWNvcmRf dmFsaWQ6MTsNCj4gPiArCXU4IHJlc2VydmVkOjU7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0 aWMgY29uc3QgY2hhciAqY29uc3Qgb3BfZGJnX3N0cltdID0gew0KPiA+ICsJIm5vIHR1bmluZyIs DQo+ID4gKwkicGFzcyIsDQo+ID4gKwkic2V0X3BoYXNlX2ZhaWwiLA0KPiA+ICsJInR1bmluZyBm YWlsIiwNCj4gPiArCSJyZWFkIHN0YXR1cyBmYWlsIiwNCj4gPiArCSJ0dW5pbmcgQ01ENyB0aW1l b3V0IiwNCj4gPiArCSJyZXR1bmluZyBjYXNlIg0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0 IGdnY19wbGF0Zm9ybV90IHsNCj4gDQo+IFdoYXQgaXMgdGhpcyAiZ2djIiBhbmQgd2hhdCAicGxh dGZvcm0iIGRvZXMgdGhpcyByZXByZXNlbnQ/DQo+IA0KR0dDIGlzIHRoZSBjaGlwIElDIG5hbWUg Zm9yIEJIMjAxIHByb2plY3QsIHBsYXRmb3JtIG1lYW5zIHRoZSBJQyByZWxhdGVkIG1heWJlIGNh biB1c2UgaG9zdCB0byByZXBsYWNlIGl0Lg0KDQo+ID4gKwlzdHJ1Y3QgZ2djX2J1c19tb2RlX2Nm Z190IHNkcjUwOw0KPiA+ICsJc3RydWN0IGdnY19idXNfbW9kZV9jZmdfdCBzZHIxMDQ7DQo+ID4g KwlzdHJ1Y3QgZ2djX2J1c19tb2RlX2NmZ190ICpjdXJfYnVzX21vZGU7DQo+ID4gKw0KPiA+ICsJ c3RydWN0IHRfZ2dfcmVnX3N0cnQgcGhhX3N0YXNfcnhfbG93MzI7DQo+ID4gKwlzdHJ1Y3QgdF9n Z19yZWdfc3RydCBwaGFfc3Rhc19yeF9oaWdoMzI7DQo+ID4gKwlzdHJ1Y3QgdF9nZ19yZWdfc3Ry dCBwaGFfc3Rhc190eF9sb3czMjsNCj4gPiArCXN0cnVjdCB0X2dnX3JlZ19zdHJ0IHBoYV9zdGFz X3R4X2hpZ2gzMjsNCj4gPiArCXN0cnVjdCB0X2dnX3JlZ19zdHJ0IGRsbF9zZWxhX2FmdGVyX21h c2s7DQo+ID4gKwlzdHJ1Y3QgdF9nZ19yZWdfc3RydCBkbGxfc2VsYl9hZnRlcl9tYXNrOw0KPiA+ ICsNCj4gPiArCXN0cnVjdCB0X2dnX3JlZ19zdHJ0IGRsbF9kZWxheV8xMDBtX2JhY2t1cDsNCj4g PiArCXN0cnVjdCB0X2dnX3JlZ19zdHJ0IGRsbF9kZWxheV8yMDBtX2JhY2t1cDsNCj4gPiArDQo+ ID4gKwlzdHJ1Y3QgdF9nZ19yZWdfc3RydCBkbGxfc2VsYV8xMDBtX2NmZzsNCj4gPiArCXN0cnVj dCB0X2dnX3JlZ19zdHJ0IGRsbF9zZWxhXzIwMG1fY2ZnOw0KPiA+ICsJc3RydWN0IHRfZ2dfcmVn X3N0cnQgZGxsX3NlbGJfMTAwbV9jZmc7DQo+ID4gKwlzdHJ1Y3QgdF9nZ19yZWdfc3RydCBkbGxf c2VsYl8yMDBtX2NmZzsNCj4gPiArCXN0cnVjdCB0X2dnX3JlZ19zdHJ0IGRsbF9zZWxiXzEwMG1f Y2ZnX2VuOw0KPiA+ICsJc3RydWN0IHRfZ2dfcmVnX3N0cnQgZGxsX3NlbGJfMjAwbV9jZmdfZW47 DQo+ID4gKwlzdHJ1Y3QgdF9nZ19yZWdfc3RydCBpbnRlcm5sX3R1bmluZ19lbl8xMDBtOw0KPiA+ ICsJc3RydWN0IHRfZ2dfcmVnX3N0cnQgaW50ZXJubF90dW5pbmdfZW5fMjAwbTsNCj4gPiArCXN0 cnVjdCB0X2dnX3JlZ19zdHJ0IGNtZDE5X2NudF9jZmc7DQo+ID4gKw0KPiA+ICsJc3RydWN0IHRf Z2dfcmVnX3N0cnQgaW5qZWN0X2ZhaWx1cmVfZm9yX3R1bmluZ19lbmFibGVfY2ZnOw0KPiA+ICsJ c3RydWN0IHRfZ2dfcmVnX3N0cnQgaW5qZWN0X2ZhaWx1cmVfZm9yXzIwMG1fdHVuaW5nX2NmZzsN Cj4gPiArCXN0cnVjdCB0X2dnX3JlZ19zdHJ0IGluamVjdF9mYWlsdXJlX2Zvcl8xMDBtX3R1bmlu Z19jZmc7DQo+ID4gKw0KPiA+ICsJaW50IGRlZl9zZWxhXzEwMG07DQo+ID4gKwlpbnQgZGVmX3Nl bGFfMjAwbTsNCj4gPiArCWludCBkZWZfc2VsYl8xMDBtOw0KPiA+ICsJaW50IGRlZl9zZWxiXzIw MG07DQo+ID4gKw0KPiA+ICsJdTMyIF9nZ19yZWdfY3VyWzE2XTsNCj4gPiArCXU4IF9jdXJfcmVh ZF9idWZbNTEyXTsNCj4gDQo+IFdoeSBkb2VzIHRoZXNlIGhhdmUgYSAnXycgcHJlZml4Pw0KPiAN Ckl0J3Mgbm8gbmVlZCwgd2lsbCBtb2RpZnkgYXQgbmV4dCB2ZXJzaW9uLg0KDQo+ID4gKw0KPiA+ ICsJYm9vbCBkbGxfdW5sb2NrX3JlaW5pdF9mbGc7DQo+ID4gKwl1OCBkcml2ZXJfc3RyZW5ndGhf cmVpbml0X2ZsZzsNCj4gPiArCWJvb2wgdHVuaW5nX2NtZDdfdGltZW91dF9yZWluaXRfZmxnOw0K PiA+ICsJdTMyIHR1bmluZ19jbWQ3X3RpbWVvdXRfcmVpbml0X2NudDsNCj4gPiArCXUzMiBnZ2Nf Y3VyX3NlbGE7DQo+ID4gKwlib29sIHNlbHhfdHVuaW5nX2RvbmVfZmxhZzsNCj4gPiArCXUzMiBn Z2NfY21kX3R4X3NlbGJfZmFpbGVkX3JhbmdlOw0KPiA+ICsJaW50IGdnY19zd19zZWxiX3R1bmlu Z19maXJzdF9zZWxiOw0KPiA+ICsJZW51bSB0dW5pbmdfc3RhdF9ldCBnZ2Nfc2VsYV90dW5pbmdf cmVzdWx0WzExXTsNCj4gPiArCWludCBkbGxfdm9sdGFnZV9zY2FuX21hcFs0XTsNCj4gPiArCWlu dCBjdXJfZGxsX3ZvbHRhZ2VfaWR4Ow0KPiA+ICsJaW50IHNkcjUwX25vdHVuaW5nX3NlbGFfaW5q ZWN0X2ZsYWc7DQo+ID4gKwlpbnQgc2RyNTBfbm90dW5pbmdfY3JjX2Vycm9yX2ZsYWc7DQo+ID4g Kwl1MzIgc2RyNTBfbm90dW5pbmdfc2VsYV9yeF9pbmplY3Q7DQo+ID4gKwl1MzIgYmgyMDFfc2Ry NTBfc2VsYV9zd19pbmplY3Q7DQo+ID4gKwl1MzIgYmgyMDFfc2RyNTBfc2VsYl9od19pbmplY3Q7 DQo+ID4gKwl1MzIgYmgyMDFfc2RyMTA0X3NlbGJfaHdfaW5qZWN0Ow0KPiA+ICsJdTMyIGJoMjAx X2RyaXZlX3N0cmVuZ3RoOw0KPiA+ICsJYm9vbCB0dW5pbmdfaW5fcHJvZ3Jlc3M7DQo+ID4gKwlp bnQgYmgyMDFfdXNlZDsNCj4gPiArCWludCBwd3JfZ3BpbzsgLyogRXh0ZXJuYWwgcG93ZXIgZW5h YmxlIHBpbiBmb3IgUmVkcml2ZXIgSUMgKi8NCj4gPiArCWludCBkZXRfZ3BpbzsNCj4gPiArfTsN Cj4gWy4uXQ0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHNkaGNpX21zbV9iYXlodWJfb2Zmc2V0 DQo+IHNkaGNpX21zbV9iYXlodWJfdjVfb2Zmc2V0ID0gew0KPiA+ICsJLmNvcmVfbWNpX2RhdGFf Y250ID0gMHgzNWMsDQo+ID4gKwkuY29yZV9tY2lfc3RhdHVzID0gMHgzMjQsDQo+ID4gKwkuY29y ZV9tY2lfZmlmb19jbnQgPSAweDMwOCwNCj4gPiArCS5jb3JlX21jaV92ZXJzaW9uID0gMHgzMTgs DQo+ID4gKwkuY29yZV9nZW5lcmljcyA9IDB4MzIwLA0KPiA+ICsJLmNvcmVfdGVzdGJ1c19jb25m aWcgPSAweDMyYywNCj4gPiArCS5jb3JlX3Rlc3RidXNfc2VsMl9iaXQgPSAzLA0KPiA+ICsJLmNv cmVfdGVzdGJ1c19lbmEgPSAoMSA8PCAzMSksDQo+ID4gKwkuY29yZV90ZXN0YnVzX3NlbDIgPSAo MSA8PCAzKSwNCj4gPiArCS5jb3JlX3B3cmN0bF9zdGF0dXMgPSAweDI0MCwNCj4gPiArCS5jb3Jl X3B3cmN0bF9tYXNrID0gMHgyNDQsDQo+ID4gKwkuY29yZV9wd3JjdGxfY2xlYXIgPSAweDI0OCwN Cj4gPiArCS5jb3JlX3B3cmN0bF9jdGwgPSAweDI0YywNCj4gPiArCS5jb3JlX3NkY2NfZGVidWdf cmVnID0gMHgzNTgsDQo+ID4gKwkuY29yZV9kbGxfY29uZmlnID0gMHgyMDAsDQo+ID4gKwkuY29y ZV9kbGxfc3RhdHVzID0gMHgyMDgsDQo+ID4gKwkuY29yZV92ZW5kb3Jfc3BlYyA9IDB4MjBjLA0K PiA+ICsJLmNvcmVfdmVuZG9yX3NwZWNfYWRtYV9lcnJfYWRkcjAgPSAweDIxNCwNCj4gPiArCS5j b3JlX3ZlbmRvcl9zcGVjX2FkbWFfZXJyX2FkZHIxID0gMHgyMTgsDQo+ID4gKwkuY29yZV92ZW5k b3Jfc3BlY19mdW5jMiA9IDB4MjEwLA0KPiA+ICsJLmNvcmVfdmVuZG9yX3NwZWNfY2FwYWJpbGl0 aWVzMCA9IDB4MjFjLA0KPiA+ICsJLmNvcmVfZGRyXzIwMF9jZmcgPSAweDIyNCwNCj4gPiArCS5j b3JlX3ZlbmRvcl9zcGVjMyA9IDB4MjUwLA0KPiA+ICsJLmNvcmVfZGxsX2NvbmZpZ18yID0gMHgy NTQsDQo+ID4gKwkuY29yZV9kbGxfY29uZmlnXzMgPSAweDI1OCwNCj4gPiArCS5jb3JlX2Rkcl9j b25maWcgPSAweDI1YywNCj4gPiArCS5jb3JlX2RsbF91c3JfY3RsID0gMHgzODgsDQo+ID4gK307 DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHNkaGNpX21zbV9iYXlodWJfb2Zmc2V0 DQo+ID4gK3NkaGNpX21zbV9iYXlodWJfbWNpX29mZnNldCA9IHsNCj4gDQo+IFRoaXMgaXMgdW51 c2VkIGFuZCBhcyBzdWNoIHlvdSBkb24ndCBuZWVkIHRoZSBzZGhjaV9tc21fYmF5aHViX29mZnNl dA0KPiBlaXRoZXIuDQo+IA0KWWVzLCB3aWxsIG1vZGlmeSBhdCBuZXh0IHZlcnNpb24uDQoNCj4g PiArCS5jb3JlX2hjX21vZGUgPSAweDc4LA0KPiA+ICsJLmNvcmVfbWNpX2RhdGFfY250ID0gMHgz MCwNCj4gPiArCS5jb3JlX21jaV9zdGF0dXMgPSAweDM0LA0KPiA+ICsJLmNvcmVfbWNpX2ZpZm9f Y250ID0gMHg0NCwNCj4gPiArCS5jb3JlX21jaV92ZXJzaW9uID0gMHgwNTAsDQo+ID4gKwkuY29y ZV9nZW5lcmljcyA9IDB4NzAsDQo+ID4gKwkuY29yZV90ZXN0YnVzX2NvbmZpZyA9IDB4MGNjLA0K PiA+ICsJLmNvcmVfdGVzdGJ1c19zZWwyX2JpdCA9IDQsDQo+ID4gKwkuY29yZV90ZXN0YnVzX2Vu YSA9ICgxIDw8IDMpLA0KPiA+ICsJLmNvcmVfdGVzdGJ1c19zZWwyID0gKDEgPDwgNCksDQo+ID4g KwkuY29yZV9wd3JjdGxfc3RhdHVzID0gMHhkYywNCj4gPiArCS5jb3JlX3B3cmN0bF9tYXNrID0g MHhlMCwNCj4gPiArCS5jb3JlX3B3cmN0bF9jbGVhciA9IDB4ZTQsDQo+ID4gKwkuY29yZV9wd3Jj dGxfY3RsID0gMHhlOCwNCj4gPiArCS5jb3JlX3NkY2NfZGVidWdfcmVnID0gMHgxMjQsDQo+ID4g KwkuY29yZV9kbGxfY29uZmlnID0gMHgxMDAsDQo+ID4gKwkuY29yZV9kbGxfc3RhdHVzID0gMHgx MDgsDQo+ID4gKwkuY29yZV92ZW5kb3Jfc3BlYyA9IDB4MTBjLA0KPiA+ICsJLmNvcmVfdmVuZG9y X3NwZWNfYWRtYV9lcnJfYWRkcjAgPSAweDExNCwNCj4gPiArCS5jb3JlX3ZlbmRvcl9zcGVjX2Fk bWFfZXJyX2FkZHIxID0gMHgxMTgsDQo+ID4gKwkuY29yZV92ZW5kb3Jfc3BlY19mdW5jMiA9IDB4 MTEwLA0KPiA+ICsJLmNvcmVfdmVuZG9yX3NwZWNfY2FwYWJpbGl0aWVzMCA9IDB4MTFjLA0KPiA+ ICsJLmNvcmVfZGRyXzIwMF9jZmcgPSAweDE4NCwNCj4gPiArCS5jb3JlX3ZlbmRvcl9zcGVjMyA9 IDB4MWIwLA0KPiA+ICsJLmNvcmVfZGxsX2NvbmZpZ18yID0gMHgxYjQsDQo+ID4gKwkuY29yZV9k ZHJfY29uZmlnX29sZCA9IDB4MWI4LA0KPiA+ICsJLmNvcmVfZGRyX2NvbmZpZyA9IDB4MWJjLA0K PiA+ICt9Ow0KPiA+ICsNCj4gWy4uXQ0KPiA+ICtzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGZy ZXFzW10gPSB7IDQwMDAwMCwgMzAwMDAwLCAyMDAwMDAsIDEwMDAwMA0KPiA+ICt9Ow0KPiA+ICsN Cj4gPiArc3RhdGljIHZvaWQgY2ZnX2JpdF8yX2J0KGludCBtYXhfYml0LCBpbnQgdGFyLCBpbnQg KmJ5dCwgaW50ICpiaXQpIHsNCj4gPiArCXN0cnVjdCBybF9iaXRfbGN0IGNmZ19iaXRfbWFwWzZd ID0gew0KPiA+ICsJCXswLCA2fSwJezEsIDV9LAl7MiwgNH0sDQo+ID4gKwkJezMsIDJ9LAl7NCwg MX0sCXs1LCAwfSwNCj4gPiArCX07DQo+IA0KPiBTbyB5b3UgaGF2ZSBhbiBhcnJheSBvZiB0dXBs ZXMsIHdoZXJlIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgdHVwbGUgaXMgdGhlIGluZGV4DQo+IGlu IHRoZSBhcnJheT8gQW5kIHRoZW4geW91IG9ubHkgdXNlIHJsX2JpdHMgYW55d2F5cy4uLg0KPiAN Cj4gSG93IGFib3V0Og0KPiAJdTggYml0X21hcFs2XSA9IHsgNiwgNSwgNCwgMiwgMSwgMCB9DQo+ IA0KWWVzLCB0aGFua3MgZm9yIHlvdXIgYWR2aWNlLg0KDQo+ID4gKw0KPiA+ICsJKmJ5dCA9ICht YXhfYml0IC0gdGFyKSAvIDY7DQo+ID4gKwkqYml0ID0gY2ZnX2JpdF9tYXBbKG1heF9iaXQgLSB0 YXIpICUgNl0ucmxfYml0czsgfQ0KPiA+ICsNCj4gPiArc3RhdGljIHUzMiBjZmdfcmVhZF9iaXRz X29mc19tYXNrKHU4ICpjZmcsIHN0cnVjdCB0X2dnX3JlZ19zdHJ0ICpidHMpDQo+ID4gK3sNCj4g PiArCXUzMiBydiA9IDA7DQo+ID4gKwl1MzIgbXNrID0gYnRzLT5tYXNrOw0KPiA+ICsJaW50IGJ5 dCA9IDAsIGJpdCA9IDA7DQo+ID4gKwlpbnQgaSA9IDA7DQo+ID4gKw0KPiA+ICsJZG8gew0KPiA+ ICsJCWNmZ19iaXRfMl9idChNQVhfQ0ZHX0JJVF9WQUwsIGJ0cy0+b2ZzICsgaSwgJmJ5dCwgJmJp dCk7DQo+IA0KPiBTbyAiYnQiIGlzIHNob3J0IGZvciAiYnl0ZSIgYW5kICJidHMiIGlzICJieXRl cyI/DQpZZXMsIHdpbGwgdXNlIGZ1bGwgbmFtZSBhdCBuZXh0IHZlcnNpb24uDQoNCj4gDQo+ID4g KwkJaWYgKGNmZ1tieXRdICYgKDEgPDwgYml0KSkNCj4gPiArCQkJcnYgfD0gMSA8PCBpOw0KPiA+ ICsNCj4gPiArCQlpKys7DQo+ID4gKwkJbXNrID4+PSAxOw0KPiA+ICsJCWlmIChtc2sgPT0gMCkN Cj4gPiArCQkJYnJlYWs7DQo+IA0KPiBUaGVyZSdzIG5vIGNhc2Ugd2hlcmUgbWFzayBpcyAwIChh bmQgSSBkb24ndCBzZWUgd2h5IGl0IHdvdWxkIGJlKSwgc28NCj4gDQo+IAl3aGlsZSAobXNrKSB7 DQo+IAkJLi4uOw0KPiAJCW1zayA+Pj0gMTsNCj4gCX0NCj4gDQo+IFNlZW1zIGNsZWFuZXINCj4g DQo+IA0KPiBCdXQgYWxsIG9mIHRoaXMgd291bGQgYmVuZWZpdCBmcm9tIGJldHRlciBuYW1pbmcg YW5kIHByb2JhYmx5IHNvbWUNCj4gY29tbWVudHMgZGVzY3JpYmluZyB0aGUgYWN0dWFsIGZvcm1h dC9zdHJ1Y3R1cmUgb2YgdGhlc2UgYml0cyBhbmQgYnl0ZXMuDQo+IA0KWWVzLCB0aGFua3MgZm9y IHlvdXIgYWR2aWNlLg0KDQo+ID4gKwl9IHdoaWxlICgxKTsNCj4gPiArCXJldHVybiBydjsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgZ2V0X2RlZmF1bHRfc2V0dGluZyhzdHJ1Y3Qg c2RoY2lfaG9zdCAqaG9zdCwgdTggKmRhdGEpIHsNCj4gPiArCXN0cnVjdCBzZGhjaV9wbHRmbV9o b3N0ICpwbHRmbV9ob3N0ID0gc2RoY2lfcHJpdihob3N0KTsNCj4gPiArCXN0cnVjdCBzZGhjaV9t c21fYmF5aHViX2hvc3QgKnZlbmRvcl9ob3N0ID0NCj4gPiArc2RoY2lfcGx0Zm1fcHJpdihwbHRm bV9ob3N0KTsNCj4gPiArDQo+ID4gKwl2ZW5kb3JfaG9zdC0+Z2djLmRlZl9zZWxhXzEwMG0gPQ0K PiA+ICsJCWNmZ19yZWFkX2JpdHNfb2ZzX21hc2soZGF0YSwgJnZlbmRvcl9ob3N0LQ0KPiA+Z2dj LmRsbF9zZWxhXzEwMG1fY2ZnKTsNCj4gPiArCXZlbmRvcl9ob3N0LT5nZ2MuZGVmX3NlbGFfMjAw bSA9DQo+ID4gKwkJY2ZnX3JlYWRfYml0c19vZnNfbWFzayhkYXRhLCAmdmVuZG9yX2hvc3QtDQo+ ID5nZ2MuZGxsX3NlbGFfMjAwbV9jZmcpOw0KPiA+ICsJdmVuZG9yX2hvc3QtPmdnYy5kZWZfc2Vs Yl8xMDBtID0NCj4gPiArCQljZmdfcmVhZF9iaXRzX29mc19tYXNrKGRhdGEsICZ2ZW5kb3JfaG9z dC0NCj4gPmdnYy5kbGxfc2VsYV8xMDBtX2NmZyk7DQo+ID4gKwl2ZW5kb3JfaG9zdC0+Z2djLmRl Zl9zZWxiXzIwMG0gPQ0KPiA+ICsJCWNmZ19yZWFkX2JpdHNfb2ZzX21hc2soZGF0YSwgJnZlbmRv cl9ob3N0LQ0KPiA+Z2djLmRsbF9zZWxhXzIwMG1fY2ZnKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIHZvaWQgY2ZnX3dyaXRlX2JpdHNfb2ZzX21hc2sodTggKmNmZywNCj4gPiArCQlzdHJ1 Y3QgdF9nZ19yZWdfc3RydCAqYnRzLCB1MzIgd192YWx1ZSkgew0KPiA+ICsJdTMyIHd2ID0gd192 YWx1ZSAmIGJ0cy0+bWFzazsNCj4gPiArCXUzMiBtc2sgPSBidHMtPm1hc2s7DQo+ID4gKwlpbnQg Ynl0ID0gMCwgYml0ID0gMDsNCj4gPiArCWludCBpID0gMDsNCj4gPiArDQo+ID4gKwlkbyB7DQo+ ID4gKwkJY2ZnX2JpdF8yX2J0KE1BWF9DRkdfQklUX1ZBTCwgYnRzLT5vZnMgKyBpLCAmYnl0LCAm Yml0KTsNCj4gPiArCQlpZiAod3YgJiAxKQ0KPiA+ICsJCQljZmdbYnl0XSB8PSAodTgpICgxIDw8 IGJpdCk7DQo+ID4gKwkJZWxzZQ0KPiA+ICsJCQljZmdbYnl0XSAmPSAodTgpICh+KDEgPDwgYml0 KSk7DQo+ID4gKw0KPiA+ICsJCWkrKzsNCj4gPiArCQl3diA+Pj0gMTsNCj4gPiArCQltc2sgPj49 IDE7DQo+ID4gKwkJaWYgKG1zayA9PSAwKQ0KPiA+ICsJCQlicmVhazsNCj4gPiArCX0gd2hpbGUg KDEpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCByYW1fYml0XzJfYnQoaW50IHRh ciwgaW50ICpieXQsIGludCAqYml0KQ0KPiANCj4gU28gdGhlICJyYW0iIHZhcmlhbnQgaXMganVz dCBhIHJlZ3VsYXIgYml0bWFwIHdpdGggOCBiaXRzIHBlciBieXRlPw0KPiBpbmNsdWRlL2xpbnV4 L2JpdG1hcC5oIGdpdmVzIHlvdXIgYW4gaW50ZXJmYWNlIGZvciBkZWFsaW5nIHdpdGggdGhvc2Uu DQo+IA0KWWVzLCB0aGFua3MgZm9yIHlvdXIgYWR2aWNlLiBJIHdpbGwgY2hlY2sgaXQuDQoNCj4g PiArew0KPiA+ICsJKmJ5dCA9IHRhciAvIDg7DQo+ID4gKwkqYml0ID0gdGFyICUgODsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgc2V0X2dnX3JlZ19jdXJfdmFsKHN0cnVjdCBnZ2Nf cGxhdGZvcm1fdCAgKmdnYywNCj4gPiArCXU4ICpkYXRhLCB1OCBsZW4pDQo+ID4gK3sNCj4gPiAr CW1lbWNweSgmZ2djLT5fZ2dfcmVnX2N1clswXSwgZGF0YSwgbGVuKTsgfQ0KPiA+ICsNCj4gPiAr c3RhdGljIHZvaWQgZ2V0X2dnX3JlZ19jdXJfdmFsKHN0cnVjdCBnZ2NfcGxhdGZvcm1fdCAgKmdn YywNCj4gPiArCXU4ICpkYXRhLCB1OCBsZW4pDQo+ID4gK3sNCj4gPiArCW1lbWNweShkYXRhLCAm Z2djLT5fZ2dfcmVnX2N1clswXSwgbGVuKTsgfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgZ2V0 X2dnX3JlZ19kZWYoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHU4ICpkYXRhKSB7DQo+ID4gKwl1 MzIgZ2dfc3dfZGVmWzE2XSA9IEdHQ19DRkdfREFUQTsNCj4gPiArDQo+ID4gKwltZW1jcHkoZGF0 YSwgKHU4ICopJihnZ19zd19kZWZbMF0pLCBzaXplb2YoZ2dfc3dfZGVmKSk7DQo+IA0KPiAodTgg KikmKGdnX3N3X2RlZlswXSkuLi4gVGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGVsZW1lbnQsIHR5 cGUgY2FzdGVkIHRvIGENCj4gKHU4KiksIHRoZW4gcGFzc2VkIHRvIGEgdm9pZCAqPw0KPiANCj4g SXNuJ3QgdGhhdCB0aGUgc2FtZSB0aGluZyBhcyBqdXN0IHR5cGluZyAiZ2dfc3dfZGVmIj8NCj4g DQo+IA0KPiBCdXQgd2h5IGlzIEdHQ19DRkdfREFUQSBhIGRlZmluZSBhbmQgbm90IGp1c3QgYSBz dGF0aWMgY29uc3QgdTMyIGFycmF5LCBpbg0KPiB3aGljaCBjYXNlIHlvdSBjYW4gcmVwbGFjZSB0 aGlzIGZ1bmN0aW9uIHdpdGgganVzdCBhIHNpbXBsZSBtZW1jcHkgaW4NCj4gZ2djX2NoaXBfaW5p dCgpLg0KPiANClllcywgdGhhbmtzIGZvciB5b3VyIGFkdmljZS4gSSB3aWxsIGNoZWNrIGl0Lg0K DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB1MzIgcmVhZF9yYW1fYml0c19vZnNfbWFzayh1 OCAqY2ZnLCBzdHJ1Y3QgdF9nZ19yZWdfc3RydCAqYnRzKQ0KPiA+ICt7DQo+ID4gKwl1MzIgcnYg PSAwOw0KPiA+ICsJdTMyIG1zayA9IGJ0cy0+bWFzazsNCj4gPiArCWludCBieXQgPSAwLCBiaXQg PSAwOw0KPiA+ICsJaW50IGkgPSAwOw0KPiA+ICsNCj4gPiArCWRvIHsNCj4gPiArCQlyYW1fYml0 XzJfYnQoYnRzLT5vZnMgKyBpLCAmYnl0LCAmYml0KTsNCj4gPiArCQlpZiAoY2ZnW2J5dF0gJiAo MSA8PCBiaXQpKQ0KPiA+ICsJCQlydiB8PSAxIDw8IGk7DQo+ID4gKw0KPiA+ICsJCWkrKzsNCj4g PiArCQltc2sgPj49IDE7DQo+ID4gKwkJaWYgKG1zayA9PSAwKQ0KPiA+ICsJCQlicmVhazsNCj4g PiArDQo+ID4gKwl9IHdoaWxlICgxKTsNCj4gPiArCXJldHVybiBydjsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIHZvaWQgZ2djX2RsbF92b2x0YWdlX2luaXQoc3RydWN0IHNkaGNpX2hvc3Qg Kmhvc3QpIHsNCj4gPiArCWludCBpID0gMDsNCj4gPiArCXN0cnVjdCBzZGhjaV9wbHRmbV9ob3N0 ICpwbHRmbV9ob3N0ID0gc2RoY2lfcHJpdihob3N0KTsNCj4gPiArCXN0cnVjdCBzZGhjaV9tc21f YmF5aHViX2hvc3QgKnZlbmRvcl9ob3N0ID0NCj4gPiArCQkJCQkJc2RoY2lfcGx0Zm1fcHJpdihw bHRmbV9ob3N0KTsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7DQo+ID4g KwkJdmVuZG9yX2hvc3QtPmdnYy5kbGxfdm9sdGFnZV9zY2FuX21hcFtpXSA9IDA7DQo+ID4gKwkJ dmVuZG9yX2hvc3QtPmdnYy5zZHI1MC5kbGxfdm9sdGFnZV91bmxvY2tfY250W2ldID0gMDsNCj4g PiArCQl2ZW5kb3JfaG9zdC0+Z2djLnNkcjEwNC5kbGxfdm9sdGFnZV91bmxvY2tfY250W2ldID0g MDsNCj4gPiArCX0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgZ2djX2NoaXBfaW5p dChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkgew0KPiA+ICsJdTggZGF0YVs1MTJdID0geyAwIH07 DQo+ID4gKwlzdHJ1Y3Qgc2RoY2lfcGx0Zm1faG9zdCAqcGx0Zm1faG9zdCA9IHNkaGNpX3ByaXYo aG9zdCk7DQo+ID4gKwlzdHJ1Y3Qgc2RoY2lfbXNtX2JheWh1Yl9ob3N0ICp2ZW5kb3JfaG9zdCA9 DQo+ID4gKwkJCQkJCXNkaGNpX3BsdGZtX3ByaXYocGx0Zm1faG9zdCk7DQo+ID4gKw0KPiA+ICsJ Z2V0X2dnX3JlZ19kZWYoaG9zdCwgZGF0YSk7DQo+ID4gKwlnZXRfZGVmYXVsdF9zZXR0aW5nKGhv c3QsIGRhdGEpOw0KPiA+ICsJc2V0X2dnX3JlZ19jdXJfdmFsKCZ2ZW5kb3JfaG9zdC0+Z2djLCBk YXRhLCA2NCk7IH0NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgZHJpdmVyX3NlbmRfY29tbWFuZDco c3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpIHsNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsJaW50 IGVycjsNCj4gPiArCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gaG9zdC0+bW1jOw0KPiA+ICsJc3Ry dWN0IG1tY19jb21tYW5kIGNtZCA9IHswfTsNCj4gPiArDQo+ID4gKwljbWQub3Bjb2RlID0gTU1D X1NFTEVDVF9DQVJEOw0KPiA+ICsJY21kLmFyZyA9IDA7DQo+ID4gKwljbWQuZmxhZ3MgPSBNTUNf UlNQX05PTkUgfCBNTUNfQ01EX0FDOw0KPiA+ICsJZXJyID0gbW1jX3dhaXRfZm9yX2NtZChtbWMs ICZjbWQsIDMpOw0KPiA+ICsJaWYgKGVycikNCj4gPiArCQlyZXQgPSAwOw0KPiA+ICsJZWxzZQ0K PiA+ICsJCXJldCA9IDE7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gDQo+IHJldHVybiBt bWNfd2FpdF9mb3JfY21kKCkgc2VlbXMgbW9yZSByZWFzb25hYmxlLCBidXQgeW91IGRvbid0IGNo ZWNrDQo+IHRoZSByZXR1cm4gdmFsdWUgaW4gYW55IG9mZiB0aGUgY2FsbCBzaXRlcy4uLg0KPiAN ClllcywgdGhhbmtzIGZvciB5b3VyIGFkdmljZS4gSSB3aWxsIGNoZWNrIGl0Lg0KDQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIGRyaXZlcl9zZW5kX2NvbW1hbmQyNChzdHJ1Y3Qgc2Ro Y2lfaG9zdCAqaG9zdCwNCj4gPiArCQl1MzIgKmNmZ19kYXRhLCBpbnQgZGF0YV9sZW4pDQo+ID4g K3sNCj4gPiArCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gaG9zdC0+bW1jOw0KPiA+ICsJc3RydWN0 IG1tY19yZXF1ZXN0IG1ycSA9IHswfTsNCj4gPiArCXN0cnVjdCBtbWNfY29tbWFuZCBjbWQgPSB7 IDAgfTsNCj4gPiArCXN0cnVjdCBtbWNfZGF0YSBkYXRhID0geyAwIH07DQo+ID4gKwlzdHJ1Y3Qg c2NhdHRlcmxpc3Qgc2c7DQo+ID4gKwl1OCAqZGF0YTEgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQ X0tFUk5FTCk7DQo+IA0KPiBUaGlzIGFsbG9jYXRpb24gbmVlZHMgYSBOVUxMIGNoZWNrLg0KPiAN ClllcywgdGhhbmtzIGZvciB5b3VyIGFkdmljZS4NCg0KPiA+ICsNCj4gPiArCW1lbWNweShkYXRh MSwgKHU4ICopJihjZmdfZGF0YVswXSksIGRhdGFfbGVuKTsNCj4gPiArCXNnX2luaXRfb25lKCZz ZywgZGF0YTEsIDUxMik7DQo+ID4gKw0KPiA+ICsJY21kLm9wY29kZSA9IE1NQ19XUklURV9CTE9D SzsNCj4gPiArCWNtZC5hcmcgPSAwOw0KPiA+ICsJY21kLmZsYWdzID0gTU1DX1JTUF9SMSB8IE1N Q19DTURfQURUQzsNCj4gPiArCWRhdGEuYmxrc3ogPSA1MTI7DQo+ID4gKwlkYXRhLmJsb2NrcyA9 IDE7DQo+ID4gKwlkYXRhLmZsYWdzID0gTU1DX0RBVEFfV1JJVEU7DQo+ID4gKwlkYXRhLnRpbWVv dXRfbnMgPSAxMDAwICogMTAwMCAqIDEwMDA7DQo+ID4gKwlkYXRhLnNnID0gJnNnOw0KPiA+ICsJ ZGF0YS5zZ19sZW4gPSAxOw0KPiA+ICsJbXJxLmNtZCA9ICZjbWQ7DQo+ID4gKwltcnEuZGF0YSA9 ICZkYXRhOw0KPiA+ICsJbXJxLnN0b3AgPSBOVUxMOw0KPiA+ICsNCj4gPiArCW1tY193YWl0X2Zv cl9yZXEobW1jLCAmbXJxKTsNCj4gPiArCWtmcmVlKGRhdGExKTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIHZvaWQgYmh0X3VwZGF0ZV9jZmcoc3RydWN0IG1tY19ob3N0ICptbWNfaG9zdCwN Cj4gPiArCXN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgdTMyICpjZmdfZGF0YSwgaW50IGRhdGFfbGVu KSB7DQo+ID4gKwlpbnQgcmV0ID0gMDsNCj4gDQo+IFRoaXMgaXMgdW51c2VkLg0KPiANClllcywg d2lsbCByZW1vdmUgaXQgbmV4dCB2ZXJzaW9uLg0KDQo+ID4gKwlzdHJ1Y3Qgc2RoY2lfaG9zdCAq aG9zdDsNCj4gPiArDQo+ID4gKwlob3N0ID0gbW1jX3ByaXYobW1jX2hvc3QpOw0KPiA+ICsJbW1j X3NldF9idXNfd2lkdGgobW1jX2hvc3QsIE1NQ19CVVNfV0lEVEhfNCk7DQo+ID4gKwlpZiAoaG9z dC0+b3BzLT5yZXNldCkNCj4gPiArCQlob3N0LT5vcHMtPnJlc2V0KGhvc3QsDQo+IFNESENJX1JF U0VUX0NNRHxTREhDSV9SRVNFVF9EQVRBKTsNCj4gPiArDQo+ID4gKwlkcml2ZXJfc2VuZF9jb21t YW5kNyhob3N0KTsNCj4gPiArCWRyaXZlcl9zZW5kX2NvbW1hbmQyNChob3N0LCBjZmdfZGF0YSwg ZGF0YV9sZW4pOw0KPiA+ICsJZHJpdmVyX3NlbmRfY29tbWFuZDcoaG9zdCk7DQo+ID4gKw0KPiA+ ICsJbW1jX3NldF9idXNfd2lkdGgobW1jX2hvc3QsIE1NQ19CVVNfV0lEVEhfMSk7IH0NCj4gPiAr DQo+ID4gKw0KPiBbLi5dDQo+ID4gK3N0YXRpYyB2b2lkIGJodF9sb2FkX2h3X2luamVjdChzdHJ1 Y3QgbW1jX2hvc3QgKm1tY19ob3N0LA0KPiA+ICsJc3RydWN0IG1tY19jYXJkICpjYXJkLCB1MzIg KmNmZ19kYXRhLCBpbnQgZGF0YV9sZW4sDQo+ID4gKwl1MzIgc2VsMjAwLCB1MzIgc2VsMTAwKQ0K PiA+ICt7DQo+ID4gKwlzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tY19ob3N0 KTsNCj4gPiArCXN0cnVjdCBzZGhjaV9wbHRmbV9ob3N0ICpwbHRmbV9ob3N0ID0gc2RoY2lfcHJp dihob3N0KTsNCj4gPiArCXN0cnVjdCBzZGhjaV9tc21fYmF5aHViX2hvc3QgKnZlbmRvcl9ob3N0 ID0NCj4gPiArCQkJCQkJc2RoY2lfcGx0Zm1fcHJpdihwbHRmbV9ob3N0KTsNCj4gPiArCXUzMiBn Z19od19pbmpbMTZdID0gR0dDX0NGR19EQVRBOw0KPiA+ICsNCj4gPiArCWdnX2h3X2lualsxXSA9 IDB4NzM2NDAzMjsNCj4gPiArDQo+ID4gKwlpZiAodmVuZG9yX2hvc3QtPmdnYy5iaDIwMV9zZHIx MDRfc2VsYl9od19pbmplY3QpDQo+ID4gKwkJZ2dfaHdfaW5qWzExXSA9IHZlbmRvcl9ob3N0LQ0K PiA+Z2djLmJoMjAxX3NkcjEwNF9zZWxiX2h3X2luamVjdDsNCj4gPiArCWVsc2UNCj4gPiArCQln Z19od19pbmpbMTFdID0gMHg1NzMzNjIwMDsNCj4gDQo+IE1ha2UgdGhpcyB0aGUgZGVmYXVsdCB2 YWx1ZSBvZiBiaDIwMV9zZHI1MF9zZWxiX2h3X2luamVjdCBhbmQgeW91IGRvbid0DQo+IG5lZWQg dG8gbWFrZSB0aGVzZSBjb25kaXRpb25hbHMgdGhyb3VnaG91dCB0aGUgY29kZS4NCj4gDQpZZXMs IHRoYW5rcyBmb3IgeW91ciBhZHZpY2UuDQoNCj4gPiArDQo+ID4gKwlpZiAodmVuZG9yX2hvc3Qt PmdnYy5iaDIwMV9zZHI1MF9zZWxiX2h3X2luamVjdCkNCj4gPiArCQlnZ19od19pbmpbMTJdID0g dmVuZG9yX2hvc3QtDQo+ID5nZ2MuYmgyMDFfc2RyNTBfc2VsYl9od19pbmplY3Q7DQo+ID4gKwll bHNlDQo+ID4gKwkJZ2dfaHdfaW5qWzEyXSA9IDB4MDA3MjU3Nzc7DQo+ID4gKw0KPiA+ICsJaWYg KHZlbmRvcl9ob3N0LT5nZ2MuYmgyMDFfZHJpdmVfc3RyZW5ndGgpDQo+ID4gKwkJZ2dfaHdfaW5q WzE1XSA9IHZlbmRvcl9ob3N0LT5nZ2MuYmgyMDFfZHJpdmVfc3RyZW5ndGg7DQo+ID4gKw0KPiA+ ICsJYmh0X3VwZGF0ZV9jZmcobW1jX2hvc3QsIGNhcmQsIGdnX2h3X2luaiwgZGF0YV9sZW4pOyB9 DQo+ID4gKw0KPiBbLi5dDQo+ID4gK3N0YXRpYyB2b2lkIHNkaGNpX21zbV9iYXlodWJfd3JpdGVi KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1OCB2YWwsDQo+ID4gK2ludCByZWcpIHsNCj4gPiAr CXUzMiByZXFfdHlwZSA9IDA7DQo+IA0KPiBEb24ndCBpbml0aWFsaXplIHZhcmlhYmxlcyB3aGVu IHRoZSBuZXh0IG9wZXJhdGlvbiBvbiB0aGF0IHZhcmlhYmxlIGlzIGFuDQo+IGFzc2lnbm1lbnQu DQo+IA0KWWVzLCB0aGFua3MgZm9yIHlvdXIgYWR2aWNlLg0KDQo+ID4gKw0KPiA+ICsJcmVxX3R5 cGUgPSBfX3NkaGNpX21zbV9iYXlodWJfY2hlY2tfd3JpdGUoaG9zdCwgdmFsLCByZWcpOw0KPiA+ ICsNCj4gPiArCXdyaXRlYl9yZWxheGVkKHZhbCwgaG9zdC0+aW9hZGRyICsgcmVnKTsNCj4gPiAr DQo+ID4gKwlpZiAocmVxX3R5cGUpDQo+ID4gKwkJc2RoY2lfbXNtX2JheWh1Yl9jaGVja19wb3dl cl9zdGF0dXMoaG9zdCwgcmVxX3R5cGUpOyB9DQo+IFsuLl0NCj4gPiArc3RhdGljIGludCBzZGhj aV9tc21fYmF5aHViX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpIHsNCj4gWy4u XQ0KPiA+ICsJaWYgKG9mX2ZpbmRfcHJvcGVydHkobm9kZSwgInVzZS1iYXlodWItYmgyMDEiLCBO VUxMKSkgew0KPiANCj4gV2h5IHdvdWxkIHNvbWVvbmUgdXNlIHRoZSBiYXlodWIgY29tcGF0aWJs ZSwgYnV0IG5vdCBoYXZlIHRoZSBiaDIwMT8NCj4gDQo+IElzbid0IHRoaXMgYSBsZWZ0b3ZlciBm cm9tIGEgcHJldmlvdXMgdmVyc2lvbiB3aGVyZSB0aGlzIHdhcyBhIHBhdGNoIG9udG9wIG9mDQo+ IHNkaGNpLW1zbT8NCj4gDQpZZXMsIHlvdSBhcmUgcmlnaHQsIHdpbGwgbW9kaWZ5IGl0IGF0IG5l eHQgdmVyc2lvbi4NCg0KPiA+ICsJCXNkaGNpX2JoMjAxX3BhcnNlKG1zbV9iYXlodWJfaG9zdC0+ bW1jKTsNCj4gPiArCQlJTklUX0RFTEFZRURfV09SSygmaG9zdC0+bW1jLT5kZXRlY3QsDQo+IG1t Y19yZXNjYW5fYmF5aHViKTsNCj4gPiArCX0gZWxzZQ0KPiA+ICsJCW1zbV9iYXlodWJfaG9zdC0+ Z2djLmJoMjAxX3VzZWQgPSAwOw0KPiA+ICsNCj4gDQo+IFJlZ2FyZHMsDQo+IEJqb3JuDQo=