Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp3422803imu; Mon, 10 Dec 2018 01:47:59 -0800 (PST) X-Google-Smtp-Source: AFSGD/WaGMRNeOC7ZHn2lkykTK3BPNktpIF93QwYyo5gWvVBxZiolKXTwZ4sQAOg6KaR8LLXfYEo X-Received: by 2002:a17:902:b68d:: with SMTP id c13mr11504822pls.102.1544435279038; Mon, 10 Dec 2018 01:47:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544435278; cv=none; d=google.com; s=arc-20160816; b=dNUFk7bHsSG/wlI9oSNki7SG2hVwWAgjY8jh5O9yq2Fj/fMauM6QvI94EX2CXF7qdc lSM81DqGDCEm3XbRxIi9E/R8nnAqi2IchnBW5x943bYxH67tISPuCTBk3dJNPQgvqCyc eMcuF+Yte0mx6G0ZBHi/7rX/04WkSIlcrBUhSqS4yy9i7nBkYeWhim1s9XEDuUe7YVPj 6ef20FgyHWuRDKD4+G196v0e9AP5tP5GCc5JQTuzb/BPdhMwfXcnou9GtVGavH7RkPQM owfI2fsfrTUC09VqpRF7sNRTCE+RWiw1GLo3D5n8RH3UPBh2UqDvBKttEO5BpWD4AVUX B/fw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :spamdiagnosticmetadata:spamdiagnosticoutput:content-language :accept-language:in-reply-to:references:message-id:date:thread-index :thread-topic:subject:cc:to:from:dkim-signature; bh=ajt/C5iey/0EXPAbBQ5nQ8dTs0osLo7Ph5ra/4YzgTI=; b=dEhqZwcur4hSlpinRkTzi+ZIL8ahYK6TNYap81ki4AkkBHlqpCqg1Kh66V58/CfsF5 mtYtGoK1IbvoBRoFrYfhjYovXr+cZ8eGo4dzwS0MlLdKnGrY7W+xr9Lv3yRZacW9mI8t DrTP2cEhg0DaTIBUcGwGzGDXx/+AojVgBBQdmqKTWsGBR+ubvi4Q7vej+NRWgQMCBe9t iZcLRSu1C5GmpbZLuwGSjkC4z9vL+AIIh4PjVo5wOV+EDXZNm+cjnANBi7jZqkdmNOQ+ j6XKmHeaPLzoF1tUdcfNxt/34j+xGiGfRrV0bNDOYY0LwfJpzWiDSrxVArEqQCtSrBes P/rg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector1 header.b=WpsH44os; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k189si9000308pgd.589.2018.12.10.01.47.43; Mon, 10 Dec 2018 01:47:58 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector1 header.b=WpsH44os; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727063AbeLJJpU (ORCPT + 99 others); Mon, 10 Dec 2018 04:45:20 -0500 Received: from mail-eopbgr130052.outbound.protection.outlook.com ([40.107.13.52]:19245 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726392AbeLJJpM (ORCPT ); Mon, 10 Dec 2018 04:45:12 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ajt/C5iey/0EXPAbBQ5nQ8dTs0osLo7Ph5ra/4YzgTI=; b=WpsH44osA4QuIVNCzoZzMMfIZZmETFQIGtY3UUcGwYk6iaoMUAML+9ZAcRo/M9+o4KfX33kI0fWZqjLu7ITQyygypWuY4o6dCzZrSAF0Arg71+JLqaNT6oNDIARmeBLfAPnjErBQ7Wm/ggRBCF1v3BoVR1H4veZJ1naFsmS8ZUE= Received: from VI1PR04MB5726.eurprd04.prod.outlook.com (20.178.127.24) by VI1PR04MB1295.eurprd04.prod.outlook.com (10.162.121.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1404.19; Mon, 10 Dec 2018 09:41:51 +0000 Received: from VI1PR04MB5726.eurprd04.prod.outlook.com ([fe80::595a:9890:8397:5d51]) by VI1PR04MB5726.eurprd04.prod.outlook.com ([fe80::595a:9890:8397:5d51%4]) with mapi id 15.20.1404.026; Mon, 10 Dec 2018 09:41:51 +0000 From: Yogesh Narayan Gaur To: Schrempf Frieder , "linux-mtd@lists.infradead.org" , "boris.brezillon@bootlin.com" , "marek.vasut@gmail.com" , "broonie@kernel.org" , "linux-spi@vger.kernel.org" , "devicetree@vger.kernel.org" CC: "robh@kernel.org" , "mark.rutland@arm.com" , "shawnguo@kernel.org" , "linux-arm-kernel@lists.infradead.org" , "computersforpeace@gmail.com" , "linux-kernel@vger.kernel.org" Subject: RE: [PATCH v5 1/5] spi: spi-mem: Add driver for NXP FlexSPI controller Thread-Topic: [PATCH v5 1/5] spi: spi-mem: Add driver for NXP FlexSPI controller Thread-Index: AQHUfZ10PwLsFrd7X0a81BAspcUxiKVxj0sAgAZCwzA= Date: Mon, 10 Dec 2018 09:41:51 +0000 Message-ID: References: <1542366701-16065-1-git-send-email-yogeshnarayan.gaur@nxp.com> <1542366701-16065-2-git-send-email-yogeshnarayan.gaur@nxp.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=yogeshnarayan.gaur@nxp.com; x-originating-ip: [14.142.187.166] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;VI1PR04MB1295;6:SE12NuVUQOtN8GwUI4J42ONy+AK/L1K5s+AFEfvTEi+UrFgI4H2ARhi8JyKKK2cXOqY4ZKd3Ok9zTSIaiJcbk42FtXzMRr4STEZ9rdj5WrwFSgJYUZg+xD6813SMssaLxcSnkYapsJxRJiY19+GA7irSc4iaDKmnk4Da2bTMxeyNBxvb4eEQfYfH+78Cxg5bFOxQlzsOPyXbqTRU+ICbLvKYR/2UU/MUmo8WSpi68qYGVYWH8OZ74RrA49EbMIpiNQituLoGzWucad10r1Nzv9iWVf/F0C9I4MEFsGTEr/uN4QaOMjeMqtpFY7cYAHFooiUdrIRzMTHjQ6KvWWj+8ZD1bCnkTLi0TN6YHaGLzuYDktrQCSLtCKQsdRhbDTy2TJi0BI41ry+Vv0LlGERShw0CwxuV2L/0XfyJnReLGVrCfoHWtkq+8v5ZonSO9mw7nLKr4i5cR/iAlEm7chyWXA==;5:zD0uvsR7qv8cn/MNCbplHVfn9csYgdFvqYeET+X94eo/g0TEW7l1nFvVdEo0SBffedEpMzifox3x96GLBdqRIMzmKCBv7VlazMz341JQFBDehfJYDKPxJW2YHRMOgp4zvKTeWnYe8k1nlwOK40inz8tsUeck2xbneAcBvD//kes=;7:5Ha8UpxTW34c6W1CAS6z5JdvcyKf7/rlyAUnyj1lKvdISFhW8+FllinC/bRzVol4uVR81vF7F0bWbmXSh9fQrBZt9phGK/YwCADasKjigG6uNyZEAovj7ZJIHUFrdDWdHznKYk+MeiZ/nT+BBnJAFg== x-ms-exchange-antispam-srfa-diagnostics: SOS; x-ms-office365-filtering-correlation-id: 6c1543a8-21bd-4ede-ac88-08d65e83b689 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390098)(7020095)(4652040)(8989299)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020);SRVR:VI1PR04MB1295; x-ms-traffictypediagnostic: VI1PR04MB1295: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3002001)(3231455)(999002)(944501520)(52105112)(93006095)(93001095)(10201501046)(6055026)(148016)(149066)(150057)(6041310)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123560045)(201708071742011)(7699051)(76991095);SRVR:VI1PR04MB1295;BCL:0;PCL:0;RULEID:;SRVR:VI1PR04MB1295; x-forefront-prvs: 08828D20BC x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(366004)(396003)(136003)(39860400002)(376002)(346002)(13464003)(51914003)(189003)(199004)(11346002)(25786009)(478600001)(14444005)(2906002)(99286004)(6436002)(186003)(68736007)(476003)(71200400001)(71190400001)(26005)(53936002)(97736004)(256004)(486006)(53946003)(4744004)(86362001)(76176011)(575784001)(316002)(6116002)(8676002)(102836004)(2501003)(5660300001)(6506007)(3846002)(2201001)(81156014)(8936002)(78486014)(7736002)(7696005)(9686003)(33656002)(55236004)(81166006)(4326008)(6246003)(39060400002)(110136005)(106356001)(229853002)(55016002)(54906003)(105586002)(66066001)(446003)(7416002)(14454004)(305945005)(53546011)(74316002)(579004)(559001)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR04MB1295;H:VI1PR04MB5726.eurprd04.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: hdg8AfrE+hpriVyhwp/WmnN2d4b92z8/mMf0sJhXf9ThPXnuceiNeQYCZagBDjFR7/lHhhvRY+Oe4qt2Ti9GCNDYh9XqaqDJyvLinYymq/U8gw17w7AbefBDmhAAKMe90DVltnwazCvMIMZ95Ty3iY+z4bfYj014eufL+8kGGMj+igPMEmQjLjJZXZAFFRG7PZ+068YYCHf8cEmWvqpGeavU/9aMOcakFjav3KJTg/h3VcHOH5VakoEvuAQy0+1R+2d7Pe3oEEwLmXlpv1V5/kiUuOdAex7XkO/wssVU1NTCYW77g4CuOqSC6R8euwnvOCLldkjkA0tMgFnux8P/XjdPk/TqiL0HcqikOaR0llA= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6c1543a8-21bd-4ede-ac88-08d65e83b689 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Dec 2018 09:41:51.4235 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB1295 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgRnJpZWRlciwNCg0KVGhhbmtzIGZvciB0aGUgcmV2aWV3LiBQbGVhc2UgZmluZCBteSBjb21t ZW50cyBpbmxpbmUuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogU2No cmVtcGYgRnJpZWRlciBbbWFpbHRvOmZyaWVkZXIuc2NocmVtcGZAa29udHJvbi5kZV0NCj4gU2Vu dDogVGh1cnNkYXksIERlY2VtYmVyIDYsIDIwMTggMjo1MyBQTQ0KPiBUbzogWW9nZXNoIE5hcmF5 YW4gR2F1ciA8eW9nZXNobmFyYXlhbi5nYXVyQG54cC5jb20+OyBsaW51eC0NCj4gbXRkQGxpc3Rz LmluZnJhZGVhZC5vcmc7IGJvcmlzLmJyZXppbGxvbkBib290bGluLmNvbTsgbWFyZWsudmFzdXRA Z21haWwuY29tOw0KPiBicm9vbmllQGtlcm5lbC5vcmc7IGxpbnV4LXNwaUB2Z2VyLmtlcm5lbC5v cmc7IGRldmljZXRyZWVAdmdlci5rZXJuZWwub3JnDQo+IENjOiByb2JoQGtlcm5lbC5vcmc7IG1h cmsucnV0bGFuZEBhcm0uY29tOyBzaGF3bmd1b0BrZXJuZWwub3JnOyBsaW51eC0NCj4gYXJtLWtl cm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnOyBjb21wdXRlcnNmb3JwZWFjZUBnbWFpbC5jb207IGxp bnV4LQ0KPiBrZXJuZWxAdmdlci5rZXJuZWwub3JnDQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjUg MS81XSBzcGk6IHNwaS1tZW06IEFkZCBkcml2ZXIgZm9yIE5YUCBGbGV4U1BJIGNvbnRyb2xsZXIN Cj4gDQo+IEhpIFlvZ2VzaCwNCj4gDQo+IEkndmUgaGFkIGEgY2xvc2VyIGxvb2sgYXQgeW91ciB2 NS4gU2VlIG15IGNvbW1lbnRzIGJlbG93Lg0KPiANCj4gT24gMTYuMTEuMTggMTI6MTMsIFlvZ2Vz aCBOYXJheWFuIEdhdXIgd3JvdGU6DQo+ID4gLSBBZGQgZHJpdmVyIGZvciBOWFAgRmxleFNQSSBo b3N0IGNvbnRyb2xsZXINCj4gPg0KPiA+ICgwKSBXaGF0IGlzIHRoZSBGbGV4U1BJIGNvbnRyb2xs ZXI/DQo+ID4gICBGbGV4U1BJIGlzIGEgZmxleHNpYmxlIFNQSSBob3N0IGNvbnRyb2xsZXIgd2hp Y2ggc3VwcG9ydHMgdHdvIFNQSQ0KPiA+ICAgY2hhbm5lbHMgYW5kIHVwIHRvIDQgZXh0ZXJuYWwg ZGV2aWNlcy4gRWFjaCBjaGFubmVsIHN1cHBvcnRzDQo+ID4gICBTaW5nbGUvRHVhbC9RdWFkL09j dGFsIG1vZGUgZGF0YSB0cmFuc2ZlciAoMS8yLzQvOCBiaWRpcmVjdGlvbmFsDQo+ID4gICBkYXRh IGxpbmVzKSBpLmUuIEZsZXhTUEkgYWN0cyBhcyBhbiBpbnRlcmZhY2UgdG8gZXh0ZXJuYWwgZGV2 aWNlcywNCj4gPiAgIG1heGltdW0gNCwgZWFjaCB3aXRoIHVwIHRvIDggYmlkaXJlY3Rpb25hbCBk YXRhIGxpbmVzLg0KPiA+DQo+ID4gICBJdCB1c2VzIG5ldyBTUEkgbWVtb3J5IGludGVyZmFjZSBv ZiB0aGUgU1BJIGZyYW1ld29yayB0byBpc3N1ZQ0KPiA+ICAgZmxhc2ggbWVtb3J5IG9wZXJhdGlv bnMgdG8gdXAgdG8gZm91ciBjb25uZWN0ZWQgZmxhc2gNCj4gPiAgIGRldmljZXMgKDIgYnVzZXMg d2l0aCAyIENTIGVhY2gpLg0KPiA+DQo+ID4gKDEpIFRlc3RlZCB0aGlzIGRyaXZlciB3aXRoIHRo ZSBtdGRfZGVidWcgYW5kIEpGRlMyIGZpbGVzeXN0ZW0gdXRpbGl0eQ0KPiA+ICAgb24gTlhQIExY MjE2MEFSREIgYW5kIExYMjE2MEFRRFMgdGFyZ2V0cy4NCj4gPiAgIExYMjE2MEFSREIgaXMgaGF2 aW5nIHR3byBOT1Igc2xhdmUgZGV2aWNlIGNvbm5lY3RlZCBvbiBzaW5nbGUgYnVzIEENCj4gPiAg IGkuZS4gQTAgYW5kIEExIChDUzAgYW5kIENTMSkuDQo+ID4gICBMWDIxNjBBUURTIGlzIGhhdmlu ZyB0d28gTk9SIHNsYXZlIGRldmljZSBjb25uZWN0ZWQgb24gc2VwYXJhdGUgYnVzZXMNCj4gPiAg IG9uZSBmbGFzaCBvbiBBMCBhbmQgc2Vjb25kIG9uIEIxIGkuZS4gKENTMCBhbmQgQ1MzKS4NCj4g PiAgIFZlcmlmaWVkIHRoaXMgZHJpdmVyIG9uIGZvbGxvd2luZyBTUEkgTk9SIGZsYXNoZXM6DQo+ ID4gICAgICBNaWNyb24sIG10MzV4dTUxMmFiLCBbUmVhZCAtIDEgYml0IG1vZGVdDQo+ID4gICAg ICBDeXByZXNzLCBzMjVmbDUxMnMsIFtSZWFkIC0gMS8yLzQgYml0IG1vZGVdDQo+ID4NCj4gPiBT aWduZWQtb2ZmLWJ5OiBZb2dlc2ggR2F1ciA8eW9nZXNobmFyYXlhbi5nYXVyQG54cC5jb20+DQo+ ID4gLS0tDQo+ID4gQ2hhbmdlcyBmb3IgdjU6DQo+ID4gLSBSZWJhc2Ugb24gdG9wIG9mIHY0LjIw LXJjMg0KPiA+IC0gTW9kaWZpZWQgZnNwaV9yZWFkbF9wb2xsX3RvdXQoKSBhcyBwZXIgcmV2aWV3 IGNvbW1lbnRzDQo+ID4gLSBBcnJhbmdlIGhlYWRlciBmaWxlIGluIGFscGhhYmV0aWNhbCBvcmRl cg0KPiA+IC0gUmVtb3ZlZCB1c2FnZSBvZiByZWFkKCkvd3JpdGUoKSBmdW5jdGlvbiBjYWxsYmFj ayBwb2ludGVyDQo+ID4gLSBBZGQgc3VwcG9ydCBmb3IgMSBhbmQgMiBieXRlIGFkZHJlc3MgbGVu Z3RoDQo+ID4gLSBDaGFuZ2UgRnJpZWRlciBlLW1haWwgdG8gbmV3IGUtbWFpbCBhZGRyZXNzIENo YW5nZXMgZm9yIHY0Og0KPiA+IC0gSW5jb3Jwb3JhdGUgQm9yaXMgcmV2aWV3IGNvbW1lbnRzDQo+ ID4gICAgKiBVc2UgcmVhZGxfcG9sbF90aW1lb3V0KCkgaW5zdGVhZCBvZiBidXN5IGxvb3Bpbmcu DQo+ID4gICAgKiBSZS1kZWZpbmUgcmVnaXN0ZXIgbWFza2luZyBhcyBwZXIgY29tbWVudC4NCj4g PiAgICAqIERyb3AgZnNwaV9kZXZ0eXBlIGVudW0uDQo+ID4gQ2hhbmdlcyBmb3IgdjM6DQo+ID4g LSBBZGRlZCBlbmRpYW5uZXNzIGZsYWcgaW4gcGxhdGZvcm0gc3BlY2lmaWMgc3RydWN0dXJlIGlu c3RlYWQgb2YgRFRTLg0KPiA+IC0gTW9kaWZpZWQgbnhwX2ZzcGlfcmVhZF9haGIoKSwgcmVtb3Zl ZCByZW1hcHBpbmcgY29kZS4NCj4gPiAtIEFkZGVkIEJvcmlzIGFuZCBGcmllZGVyIGFzIEF1dGhv ciBhbmQgcHJvdmlkZWQgcmVmZXJlbmNlIG9mDQo+ID4gc3BpLWZzbC1xc3BpLmMgQ2hhbmdlcyBm b3IgdjI6DQo+ID4gLSBJbmNvcnBvcmF0ZWQgQm9yaXMgcmV2aWV3IGNvbW1lbnRzLg0KPiA+IC0g UmVtb3ZlIGRlcGVuZGVuY3kgb2YgZHJpdmVyIG92ZXIgY29ubmVjdGVkIGZsYXNoIGRldmljZSBz aXplLg0KPiA+IC0gTW9kaWZpZWQgdGhlIGxvZ2ljIHRvIHNlbGVjdCByZXF1ZXN0ZWQgQ1MuDQo+ ID4gLSBSZW1vdmUgU1BJLU9jdGFsIE1hY3Jvcy4NCj4gPg0KPiA+ICAgZHJpdmVycy9zcGkvS2Nv bmZpZyAgICAgICAgfCAgIDEwICsNCj4gPiAgIGRyaXZlcnMvc3BpL01ha2VmaWxlICAgICAgIHwg ICAgMSArDQo+ID4gICBkcml2ZXJzL3NwaS9zcGktbnhwLWZzcGkuYyB8IDExNDUNCj4gKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gPiAgIDMgZmlsZXMgY2hh bmdlZCwgMTE1NiBpbnNlcnRpb25zKCspDQo+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9zcGkvc3BpLW54cC1mc3BpLmMNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9L Y29uZmlnIGIvZHJpdmVycy9zcGkvS2NvbmZpZyBpbmRleA0KPiA+IDdkM2E1YzkuLjM2NjMwYTEg MTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9zcGkvS2NvbmZpZw0KPiA+ICsrKyBiL2RyaXZlcnMv c3BpL0tjb25maWcNCj4gPiBAQCAtMjU5LDYgKzI1OSwxNiBAQCBjb25maWcgU1BJX0ZTTF9MUFNQ SQ0KPiA+ICAgCWhlbHANCj4gPiAgIAkgIFRoaXMgZW5hYmxlcyBGcmVlc2NhbGUgaS5NWCBMUFNQ SSBjb250cm9sbGVycyBpbiBtYXN0ZXIgbW9kZS4NCj4gPg0KPiA+ICtjb25maWcgU1BJX05YUF9G TEVYU1BJDQo+ID4gKwl0cmlzdGF0ZSAiTlhQIEZsZXggU1BJIGNvbnRyb2xsZXIiDQo+ID4gKwlk ZXBlbmRzIG9uIEFSQ0hfTEFZRVJTQ0FQRSB8fCBIQVNfSU9NRU0NCj4gPiArCWhlbHANCj4gPiAr CSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBGbGV4IFNQSSBjb250cm9sbGVyIGluIG1h c3RlciBtb2RlLg0KPiA+ICsJICBVcCB0byBmb3VyIHNsYXZlIGRldmljZXMgY2FuIGJlIGNvbm5l Y3RlZCBvbiB0d28gYnVzZXMgd2l0aCB0d28NCj4gPiArCSAgY2hpcHNlbGVjdHMgZWFjaC4NCj4g PiArCSAgVGhpcyBjb250cm9sbGVyIGRvZXMgbm90IHN1cHBvcnQgZ2VuZXJpYyBTUEkgbWVzc2Fn ZXMgYW5kIG9ubHkNCj4gPiArCSAgc3VwcG9ydHMgdGhlIGhpZ2gtbGV2ZWwgU1BJIG1lbW9yeSBp bnRlcmZhY2UuDQo+ID4gKw0KPiA+ICAgY29uZmlnIFNQSV9HUElPDQo+ID4gICAJdHJpc3RhdGUg IkdQSU8tYmFzZWQgYml0YmFuZ2luZyBTUEkgTWFzdGVyIg0KPiA+ICAgCWRlcGVuZHMgb24gR1BJ T0xJQiB8fCBDT01QSUxFX1RFU1QNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvTWFrZWZp bGUgYi9kcml2ZXJzL3NwaS9NYWtlZmlsZSBpbmRleA0KPiA+IDM1NzUyMDUuLjU1ZmVjNWMgMTAw NjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9zcGkvTWFrZWZpbGUNCj4gPiArKysgYi9kcml2ZXJzL3Nw aS9NYWtlZmlsZQ0KPiA+IEBAIC02MCw2ICs2MCw3IEBAIG9iai0kKENPTkZJR19TUElfTVBDNTJ4 eCkJCSs9IHNwaS0NCj4gbXBjNTJ4eC5vDQo+ID4gICBvYmotJChDT05GSUdfU1BJX01UNjVYWCkg ICAgICAgICAgICAgICAgKz0gc3BpLW10NjV4eC5vDQo+ID4gICBvYmotJChDT05GSUdfU1BJX01Y UykJCQkrPSBzcGktbXhzLm8NCj4gPiAgIG9iai0kKENPTkZJR19TUElfTlVDOTAwKQkJKz0gc3Bp LW51YzkwMC5vDQo+ID4gK29iai0kKENPTkZJR19TUElfTlhQX0ZMRVhTUEkpCQkrPSBzcGktbnhw LWZzcGkubw0KPiA+ICAgb2JqLSQoQ09ORklHX1NQSV9PQ19USU5ZKQkJKz0gc3BpLW9jLXRpbnku bw0KPiA+ICAgc3BpLW9jdGVvbi1vYmpzCQkJCTo9IHNwaS1jYXZpdW0ubyBzcGktY2F2aXVtLQ0K PiBvY3Rlb24ubw0KPiA+ICAgb2JqLSQoQ09ORklHX1NQSV9PQ1RFT04pCQkrPSBzcGktb2N0ZW9u Lm8NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLW54cC1mc3BpLmMgYi9kcml2ZXJz L3NwaS9zcGktbnhwLWZzcGkuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0IGluZGV4IDAwMDAw MDAuLmEzNTAxM2INCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9zcGkvc3Bp LW54cC1mc3BpLmMNCj4gPiBAQCAtMCwwICsxLDExNDUgQEANCj4gPiArLy8gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjArDQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBOWFAgRmxleFNQ SShGU1BJKSBjb250cm9sbGVyIGRyaXZlci4NCj4gPiArICoNCj4gPiArICogQ29weXJpZ2h0IDIw MTggTlhQLg0KPiA+ICsgKg0KPiA+ICsgKiBGbGV4U1BJIGlzIGEgZmxleHNpYmxlIFNQSSBob3N0 IGNvbnRyb2xsZXIgd2hpY2ggc3VwcG9ydHMgdHdvIFNQSQ0KPiA+ICsgKiBjaGFubmVscyBhbmQg dXAgdG8gNCBleHRlcm5hbCBkZXZpY2VzLiBFYWNoIGNoYW5uZWwgc3VwcG9ydHMNCj4gPiArICog U2luZ2xlL0R1YWwvUXVhZC9PY3RhbCBtb2RlIGRhdGEgdHJhbnNmZXIgKDEvMi80LzggYmlkaXJl Y3Rpb25hbA0KPiA+ICsgKiBkYXRhIGxpbmVzKS4NCj4gPiArICoNCj4gPiArICogRmxleFNQSSBj b250cm9sbGVyIGlzIGRyaXZlbiBieSB0aGUgTFVUKExvb2stdXAgVGFibGUpIHJlZ2lzdGVycw0K PiA+ICsgKiBMVVQgcmVnaXN0ZXJzIGFyZSBhIGxvb2stdXAtdGFibGUgZm9yIHNlcXVlbmNlcyBv ZiBpbnN0cnVjdGlvbnMuDQo+ID4gKyAqIEEgdmFsaWQgc2VxdWVuY2UgY29uc2lzdHMgb2YgZm91 ciBMVVQgcmVnaXN0ZXJzLg0KPiA+ICsgKiBNYXhpbXVtIDMyIExVVCBzZXF1ZW5jZXMgY2FuIGJl IHByb2dyYW1tZWQgc2ltdWx0YW5lb3VzbHkuDQo+ID4gKyAqDQo+ID4gKyAqIExVVHMgYXJlIGJl aW5nIGNyZWF0ZWQgYXQgcnVuLXRpbWUgYmFzZWQgb24gdGhlIGNvbW1hbmRzIHBhc3NlZA0KPiA+ ICsgKiBmcm9tIHRoZSBzcGktbWVtIGZyYW1ld29yaywgdGh1cyB1c2luZyBzaW5nbGUgTFVUIGlu ZGV4Lg0KPiA+ICsgKg0KPiA+ICsgKiBTb2Z0d2FyZSB0cmlnZ2VyZWQgRmxhc2ggcmVhZC93cml0 ZSBhY2Nlc3MgYnkgSVAgQnVzLg0KPiA+ICsgKg0KPiA+ICsgKiBNZW1vcnkgbWFwcGVkIHJlYWQg YWNjZXNzIGJ5IEFIQiBCdXMuDQo+ID4gKyAqDQo+ID4gKyAqIEJhc2VkIG9uIFNQSSBNRU0gaW50 ZXJmYWNlIGFuZCBzcGktZnNsLXFzcGkuYyBkcml2ZXIuDQo+ID4gKyAqDQo+ID4gKyAqIEF1dGhv cjoNCj4gPiArICogICAgIFlvZ2VzaCBHYXVyIDx5b2dlc2huYXJheWFuLmdhdXJAbnhwLmNvbT4N Cj4gPiArICogICAgIEJvcmlzIEJyZXppbGxpb24gPGJvcmlzLmJyZXppbGxvbkBib290bGluLmNv bT4NCj4gPiArICogICAgIEZyaWVkZXIgU2NocmVtcGYgPGZyaWVkZXIuc2NocmVtcGZAa29udHJv bi5kZT4NCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRp b24uaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51 eC9lcnIuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+DQo+ID4gKyNpbmNsdWRlIDxs aW51eC9pbnRlcnJ1cHQuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+DQo+ID4gKyNpbmNs dWRlIDxsaW51eC9pb3BvbGwuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4NCj4g PiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxl Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgv b2YuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8 bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbV9xb3MuaD4N Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3NpemVzLmg+DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8bGlu dXgvc3BpL3NwaS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvc3BpL3NwaS1tZW0uaD4NCj4gPiAr DQo+ID4gKy8qDQo+ID4gKyAqIFRoZSBkcml2ZXIgb25seSB1c2VzIG9uZSBzaW5nbGUgTFVUIGVu dHJ5LCB0aGF0IGlzIHVwZGF0ZWQgb24NCj4gPiArICogZWFjaCBjYWxsIG9mIGV4ZWNfb3AoKS4g SW5kZXggMCBpcyBwcmVzZXQgYXQgYm9vdCB3aXRoIGEgYmFzaWMNCj4gPiArICogcmVhZCBvcGVy YXRpb24sIHNvIGxldCdzIHVzZSB0aGUgbGFzdCBlbnRyeSAoMzEpLg0KPiA+ICsgKi8NCj4gPiAr I2RlZmluZQlTRVFJRF9MVVQJCQkzMQ0KPiA+ICsNCj4gPiArLyogUmVnaXN0ZXJzIHVzZWQgYnkg dGhlIGRyaXZlciAqLw0KPiA+ICsjZGVmaW5lIEZTUElfTUNSMAkJCTB4MDANCj4gPiArI2RlZmlu ZSBGU1BJX01DUjBfQUhCX1RJTUVPVVQoeCkJKCh4KSA8PCAyNCkNCj4gPiArI2RlZmluZSBGU1BJ X01DUjBfSVBfVElNRU9VVCh4KQkJKCh4KSA8PCAxNikNCj4gPiArI2RlZmluZSBGU1BJX01DUjBf TEVBUk5fRU4JCUJJVCgxNSkNCj4gPiArI2RlZmluZSBGU1BJX01DUjBfU0NSRlJVTl9FTgkJQklU KDE0KQ0KPiA+ICsjZGVmaW5lIEZTUElfTUNSMF9PQ1RDT01CX0VOCQlCSVQoMTMpDQo+ID4gKyNk ZWZpbmUgRlNQSV9NQ1IwX0RPWkVfRU4JCUJJVCgxMikNCj4gPiArI2RlZmluZSBGU1BJX01DUjBf SFNFTgkJCUJJVCgxMSkNCj4gPiArI2RlZmluZSBGU1BJX01DUjBfU0VSQ0xLRElWCQlCSVQoOCkN Cj4gPiArI2RlZmluZSBGU1BJX01DUjBfQVRERl9FTgkJQklUKDcpDQo+ID4gKyNkZWZpbmUgRlNQ SV9NQ1IwX0FSREZfRU4JCUJJVCg2KQ0KPiA+ICsjZGVmaW5lIEZTUElfTUNSMF9SWENMS1NSQyh4 KQkJKCh4KSA8PCA0KQ0KPiA+ICsjZGVmaW5lIEZTUElfTUNSMF9FTkRfQ0ZHKHgpCQkoKHgpIDw8 IDIpDQo+ID4gKyNkZWZpbmUgRlNQSV9NQ1IwX01ESVMJCQlCSVQoMSkNCj4gPiArI2RlZmluZSBG U1BJX01DUjBfU1dSU1QJCQlCSVQoMCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgRlNQSV9NQ1IxCQkJ MHgwNA0KPiA+ICsjZGVmaW5lIEZTUElfTUNSMV9TRVFfVElNRU9VVCh4KQkoKHgpIDw8IDE2KQ0K PiA+ICsjZGVmaW5lIEZTUElfTUNSMV9BSEJfVElNRU9VVCh4KQkoeCkNCj4gPiArDQo+ID4gKyNk ZWZpbmUgRlNQSV9NQ1IyCQkJMHgwOA0KPiA+ICsjZGVmaW5lIEZTUElfTUNSMl9JRExFX1dBSVQo eCkJCSgoeCkgPDwgMjQpDQo+ID4gKyNkZWZpbmUgRlNQSV9NQ1IyX1NBTUVERVZJQ0VFTgkJQklU KDE1KQ0KPiA+ICsjZGVmaW5lIEZTUElfTUNSMl9DTFJMUlBIUwkJQklUKDE0KQ0KPiA+ICsjZGVm aW5lIEZTUElfTUNSMl9BQlJEQVRTWgkJQklUKDgpDQo+ID4gKyNkZWZpbmUgRlNQSV9NQ1IyX0FC UkxFQVJOCQlCSVQoNykNCj4gPiArI2RlZmluZSBGU1BJX01DUjJfQUJSX1JFQUQJCUJJVCg2KQ0K PiA+ICsjZGVmaW5lIEZTUElfTUNSMl9BQlJXUklURQkJQklUKDUpDQo+ID4gKyNkZWZpbmUgRlNQ SV9NQ1IyX0FCUkRVTU1ZCQlCSVQoNCkNCj4gPiArI2RlZmluZSBGU1BJX01DUjJfQUJSX01PREUJ CUJJVCgzKQ0KPiA+ICsjZGVmaW5lIEZTUElfTUNSMl9BQlJDQUREUgkJQklUKDIpDQo+ID4gKyNk ZWZpbmUgRlNQSV9NQ1IyX0FCUlJBRERSCQlCSVQoMSkNCj4gPiArI2RlZmluZSBGU1BJX01DUjJf QUJSX0NNRAkJQklUKDApDQo+ID4gKw0KPiA+ICsjZGVmaW5lIEZTUElfQUhCQ1IJCQkweDBjDQo+ ID4gKyNkZWZpbmUgRlNQSV9BSEJDUl9SREFERFJPUFQJCUJJVCg2KQ0KPiA+ICsjZGVmaW5lIEZT UElfQUhCQ1JfUFJFRl9FTgkJQklUKDUpDQo+ID4gKyNkZWZpbmUgRlNQSV9BSEJDUl9CVUZGX0VO CQlCSVQoNCkNCj4gPiArI2RlZmluZSBGU1BJX0FIQkNSX0NBQ0hfRU4JCUJJVCgzKQ0KPiA+ICsj ZGVmaW5lIEZTUElfQUhCQ1JfQ0xSVFhCVUYJCUJJVCgyKQ0KPiA+ICsjZGVmaW5lIEZTUElfQUhC Q1JfQ0xSUlhCVUYJCUJJVCgxKQ0KPiA+ICsjZGVmaW5lIEZTUElfQUhCQ1JfUEFSX0VOCQlCSVQo MCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgRlNQSV9JTlRFTgkJCTB4MTANCj4gPiArI2RlZmluZSBG U1BJX0lOVEVOX1NDTEtTQldSCQlCSVQoOSkNCj4gPiArI2RlZmluZSBGU1BJX0lOVEVOX1NDTEtT QlJECQlCSVQoOCkNCj4gPiArI2RlZmluZSBGU1BJX0lOVEVOX0RBVEFMUk5GTAkJQklUKDcpDQo+ ID4gKyNkZWZpbmUgRlNQSV9JTlRFTl9JUFRYV0UJCUJJVCg2KQ0KPiA+ICsjZGVmaW5lIEZTUElf SU5URU5fSVBSWFdBCQlCSVQoNSkNCj4gPiArI2RlZmluZSBGU1BJX0lOVEVOX0FIQkNNREVSUgkJ QklUKDQpDQo+ID4gKyNkZWZpbmUgRlNQSV9JTlRFTl9JUENNREVSUgkJQklUKDMpDQo+ID4gKyNk ZWZpbmUgRlNQSV9JTlRFTl9BSEJDTURHRQkJQklUKDIpDQo+ID4gKyNkZWZpbmUgRlNQSV9JTlRF Tl9JUENNREdFCQlCSVQoMSkNCj4gPiArI2RlZmluZSBGU1BJX0lOVEVOX0lQQ01ERE9ORQkJQklU KDApDQo+ID4gKw0KPiA+ICsjZGVmaW5lIEZTUElfSU5UUgkJCTB4MTQNCj4gPiArI2RlZmluZSBG U1BJX0lOVFJfU0NMS1NCV1IJCUJJVCg5KQ0KPiA+ICsjZGVmaW5lIEZTUElfSU5UUl9TQ0xLU0JS RAkJQklUKDgpDQo+ID4gKyNkZWZpbmUgRlNQSV9JTlRSX0RBVEFMUk5GTAkJQklUKDcpDQo+ID4g KyNkZWZpbmUgRlNQSV9JTlRSX0lQVFhXRQkJQklUKDYpDQo+ID4gKyNkZWZpbmUgRlNQSV9JTlRS X0lQUlhXQQkJQklUKDUpDQo+ID4gKyNkZWZpbmUgRlNQSV9JTlRSX0FIQkNNREVSUgkJQklUKDQp DQo+ID4gKyNkZWZpbmUgRlNQSV9JTlRSX0lQQ01ERVJSCQlCSVQoMykNCj4gPiArI2RlZmluZSBG U1BJX0lOVFJfQUhCQ01ER0UJCUJJVCgyKQ0KPiA+ICsjZGVmaW5lIEZTUElfSU5UUl9JUENNREdF CQlCSVQoMSkNCj4gPiArI2RlZmluZSBGU1BJX0lOVFJfSVBDTURET05FCQlCSVQoMCkNCj4gPiAr DQo+ID4gKyNkZWZpbmUgRlNQSV9MVVRLRVkJCQkweDE4DQo+ID4gKyNkZWZpbmUgRlNQSV9MVVRL RVlfVkFMVUUJCTB4NUFGMDVBRjANCj4gPiArDQo+ID4gKyNkZWZpbmUgRlNQSV9MQ0tDUgkJCTB4 MUMNCj4gPiArDQo+ID4gKyNkZWZpbmUgRlNQSV9MQ0tFUl9MT0NLCQkJMHgxDQo+ID4gKyNkZWZp bmUgRlNQSV9MQ0tFUl9VTkxPQ0sJCTB4Mg0KPiA+ICsNCj4gPiArI2RlZmluZSBGU1BJX0JVRlhD Ul9JTlZBTElEX01TVFJJRAkweEUNCj4gPiArI2RlZmluZSBGU1BJX0FIQlJYX0JVRjBDUjAJCTB4 MjANCj4gPiArI2RlZmluZSBGU1BJX0FIQlJYX0JVRjFDUjAJCTB4MjQNCj4gPiArI2RlZmluZSBG U1BJX0FIQlJYX0JVRjJDUjAJCTB4MjgNCj4gPiArI2RlZmluZSBGU1BJX0FIQlJYX0JVRjNDUjAJ CTB4MkMNCj4gPiArI2RlZmluZSBGU1BJX0FIQlJYX0JVRjRDUjAJCTB4MzANCj4gPiArI2RlZmlu ZSBGU1BJX0FIQlJYX0JVRjVDUjAJCTB4MzQNCj4gPiArI2RlZmluZSBGU1BJX0FIQlJYX0JVRjZD UjAJCTB4MzgNCj4gPiArI2RlZmluZSBGU1BJX0FIQlJYX0JVRjdDUjAJCTB4M0MNCj4gPiArI2Rl ZmluZSBGU1BJX0FIQlJYQlVGMENSN19QUkVGCQlCSVQoMzEpDQo+ID4gKw0KPiA+ICsjZGVmaW5l IEZTUElfQUhCUlhfQlVGMENSMQkJMHg0MA0KPiA+ICsjZGVmaW5lIEZTUElfQUhCUlhfQlVGMUNS MQkJMHg0NA0KPiA+ICsjZGVmaW5lIEZTUElfQUhCUlhfQlVGMkNSMQkJMHg0OA0KPiA+ICsjZGVm aW5lIEZTUElfQUhCUlhfQlVGM0NSMQkJMHg0Qw0KPiA+ICsjZGVmaW5lIEZTUElfQUhCUlhfQlVG NENSMQkJMHg1MA0KPiA+ICsjZGVmaW5lIEZTUElfQUhCUlhfQlVGNUNSMQkJMHg1NA0KPiA+ICsj ZGVmaW5lIEZTUElfQUhCUlhfQlVGNkNSMQkJMHg1OA0KPiA+ICsjZGVmaW5lIEZTUElfQUhCUlhf QlVGN0NSMQkJMHg1Qw0KPiA+ICsNCj4gPiArI2RlZmluZSBGU1BJX0ZMU0hBMUNSMAkJCTB4NjAN Cj4gPiArI2RlZmluZSBGU1BJX0ZMU0hBMkNSMAkJCTB4NjQNCj4gPiArI2RlZmluZSBGU1BJX0ZM U0hCMUNSMAkJCTB4NjgNCj4gPiArI2RlZmluZSBGU1BJX0ZMU0hCMkNSMAkJCTB4NkMNCj4gPiAr I2RlZmluZSBGU1BJX0ZMU0hYQ1IwX1NaX0tCCQkxMA0KPiA+ICsjZGVmaW5lIEZTUElfRkxTSFhD UjBfU1ooeCkJCSgoeCkgPj4gRlNQSV9GTFNIWENSMF9TWl9LQikNCj4gPiArDQo+ID4gKyNkZWZp bmUgRlNQSV9GTFNIQTFDUjEJCQkweDcwDQo+ID4gKyNkZWZpbmUgRlNQSV9GTFNIQTJDUjEJCQkw eDc0DQo+ID4gKyNkZWZpbmUgRlNQSV9GTFNIQjFDUjEJCQkweDc4DQo+ID4gKyNkZWZpbmUgRlNQ SV9GTFNIQjJDUjEJCQkweDdDDQo+ID4gKyNkZWZpbmUgRlNQSV9GTFNIWENSMV9DU0lOVFIoeCkJ CSgoeCkgPDwgMTYpDQo+ID4gKyNkZWZpbmUgRlNQSV9GTFNIWENSMV9DQVMoeCkJCSgoeCkgPDwg MTEpDQo+ID4gKyNkZWZpbmUgRlNQSV9GTFNIWENSMV9XQQkJQklUKDEwKQ0KPiA+ICsjZGVmaW5l IEZTUElfRkxTSFhDUjFfVENTSCh4KQkJKCh4KSA8PCA1KQ0KPiA+ICsjZGVmaW5lIEZTUElfRkxT SFhDUjFfVENTUyh4KQkJKHgpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIEZTUElfRkxTSEExQ1IyCQkJ MHg4MA0KPiA+ICsjZGVmaW5lIEZTUElfRkxTSEEyQ1IyCQkJMHg4NA0KPiA+ICsjZGVmaW5lIEZT UElfRkxTSEIxQ1IyCQkJMHg4OA0KPiA+ICsjZGVmaW5lIEZTUElfRkxTSEIyQ1IyCQkJMHg4Qw0K PiA+ICsjZGVmaW5lIEZTUElfRkxTSFhDUjJfQ0xSSU5TUAkJQklUKDI0KQ0KPiA+ICsjZGVmaW5l IEZTUElfRkxTSFhDUjJfQVdSV0FJVAkJQklUKDE2KQ0KPiA+ICsjZGVmaW5lIEZTUElfRkxTSFhD UjJfQVdSU0VRTl9TSElGVAkxMw0KPiA+ICsjZGVmaW5lIEZTUElfRkxTSFhDUjJfQVdSU0VRSV9T SElGVAk4DQo+ID4gKyNkZWZpbmUgRlNQSV9GTFNIWENSMl9BUkRTRVFOX1NISUZUCTUNCj4gPiAr I2RlZmluZSBGU1BJX0ZMU0hYQ1IyX0FSRFNFUUlfU0hJRlQJMA0KPiA+ICsNCj4gPiArI2RlZmlu ZSBGU1BJX0lQQ1IwCQkJMHhBMA0KPiA+ICsNCj4gPiArI2RlZmluZSBGU1BJX0lQQ1IxCQkJMHhB NA0KPiA+ICsjZGVmaW5lIEZTUElfSVBDUjFfSVBBUkVOCQlCSVQoMzEpDQo+ID4gKyNkZWZpbmUg RlNQSV9JUENSMV9TRVFOVU1fU0hJRlQJCTI0DQo+ID4gKyNkZWZpbmUgRlNQSV9JUENSMV9TRVFJ RF9TSElGVAkJMTYNCj4gPiArI2RlZmluZSBGU1BJX0lQQ1IxX0lEQVRTWih4KQkJKHgpDQo+ID4g Kw0KPiA+ICsjZGVmaW5lIEZTUElfSVBDTUQJCQkweEIwDQo+ID4gKyNkZWZpbmUgRlNQSV9JUENN RF9UUkcJCQlCSVQoMCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgRlNQSV9ETFBSCQkJMHhCNA0KPiA+ ICsNCj4gPiArI2RlZmluZSBGU1BJX0lQUlhGQ1IJCQkweEI4DQo+ID4gKyNkZWZpbmUgRlNQSV9J UFJYRkNSX0NMUgkJQklUKDApDQo+ID4gKyNkZWZpbmUgRlNQSV9JUFJYRkNSX0RNQV9FTgkJQklU KDEpDQo+ID4gKyNkZWZpbmUgRlNQSV9JUFJYRkNSX1dNUksoeCkJCSgoeCkgPDwgMikNCj4gPiAr DQo+ID4gKyNkZWZpbmUgRlNQSV9JUFRYRkNSCQkJMHhCQw0KPiA+ICsjZGVmaW5lIEZTUElfSVBU WEZDUl9DTFIJCUJJVCgwKQ0KPiA+ICsjZGVmaW5lIEZTUElfSVBUWEZDUl9ETUFfRU4JCUJJVCgx KQ0KPiA+ICsjZGVmaW5lIEZTUElfSVBUWEZDUl9XTVJLKHgpCQkoKHgpIDw8IDIpDQo+ID4gKw0K PiA+ICsjZGVmaW5lIEZTUElfRExMQUNSCQkJMHhDMA0KPiA+ICsjZGVmaW5lIEZTUElfRExMQUNS X09WUkRFTgkJQklUKDgpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIEZTUElfRExMQkNSCQkJMHhDNA0K PiA+ICsjZGVmaW5lIEZTUElfRExMQkNSX09WUkRFTgkJQklUKDgpDQo+ID4gKw0KPiA+ICsjZGVm aW5lIEZTUElfU1RTMAkJCTB4RTANCj4gPiArI2RlZmluZSBGU1BJX1NUUzBfRExQSEIoeCkJCSgo eCkgPDwgOCkNCj4gPiArI2RlZmluZSBGU1BJX1NUUzBfRExQSEEoeCkJCSgoeCkgPDwgNCkNCj4g PiArI2RlZmluZSBGU1BJX1NUUzBfQ01EX1NSQyh4KQkJKCh4KSA8PCAyKQ0KPiA+ICsjZGVmaW5l IEZTUElfU1RTMF9BUkJfSURMRQkJQklUKDEpDQo+ID4gKyNkZWZpbmUgRlNQSV9TVFMwX1NFUV9J RExFCQlCSVQoMCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgRlNQSV9TVFMxCQkJMHhFNA0KPiA+ICsj ZGVmaW5lIEZTUElfU1RTMV9JUF9FUlJDRCh4KQkJKCh4KSA8PCAyNCkNCj4gPiArI2RlZmluZSBG U1BJX1NUUzFfSVBfRVJSSUQoeCkJCSgoeCkgPDwgMTYpDQo+ID4gKyNkZWZpbmUgRlNQSV9TVFMx X0FIQl9FUlJDRCh4KQkJKCh4KSA8PCA4KQ0KPiA+ICsjZGVmaW5lIEZTUElfU1RTMV9BSEJfRVJS SUQoeCkJCSh4KQ0KPiA+ICsNCj4gPiArI2RlZmluZSBGU1BJX0FIQlNQTlNUCQkJMHhFQw0KPiA+ ICsjZGVmaW5lIEZTUElfQUhCU1BOU1RfREFUTEZUKHgpCQkoKHgpIDw8IDE2KQ0KPiA+ICsjZGVm aW5lIEZTUElfQUhCU1BOU1RfQlVGSUQoeCkJCSgoeCkgPDwgMSkNCj4gPiArI2RlZmluZSBGU1BJ X0FIQlNQTlNUX0FDVElWRQkJQklUKDApDQo+ID4gKw0KPiA+ICsjZGVmaW5lIEZTUElfSVBSWEZT VFMJCQkweEYwDQo+ID4gKyNkZWZpbmUgRlNQSV9JUFJYRlNUU19SRENOVFIoeCkJCSgoeCkgPDwg MTYpDQo+ID4gKyNkZWZpbmUgRlNQSV9JUFJYRlNUU19GSUxMKHgpCQkoeCkNCj4gPiArDQo+ID4g KyNkZWZpbmUgRlNQSV9JUFRYRlNUUwkJCTB4RjQNCj4gPiArI2RlZmluZSBGU1BJX0lQVFhGU1RT X1dSQ05UUih4KQkJKCh4KSA8PCAxNikNCj4gPiArI2RlZmluZSBGU1BJX0lQVFhGU1RTX0ZJTEwo eCkJCSh4KQ0KPiA+ICsNCj4gPiArI2RlZmluZSBGU1BJX1JGRFIJCQkweDEwMA0KPiA+ICsjZGVm aW5lIEZTUElfVEZEUgkJCTB4MTgwDQo+ID4gKw0KPiA+ICsjZGVmaW5lIEZTUElfTFVUX0JBU0UJ CQkweDIwMA0KPiA+ICsjZGVmaW5lIEZTUElfTFVUX09GRlNFVAkJCShTRVFJRF9MVVQgKiA0ICog NCkNCj4gPiArI2RlZmluZSBGU1BJX0xVVF9SRUcoaWR4KSBcDQo+ID4gKwkoRlNQSV9MVVRfQkFT RSArIEZTUElfTFVUX09GRlNFVCArIChpZHgpICogNCkNCj4gPiArDQo+ID4gKy8qIHJlZ2lzdGVy IG1hcCBlbmQgKi8NCj4gPiArDQo+ID4gKy8qIEluc3RydWN0aW9uIHNldCBmb3IgdGhlIExVVCBy ZWdpc3Rlci4gKi8NCj4gPiArI2RlZmluZSBMVVRfU1RPUAkJCTB4MDANCj4gPiArI2RlZmluZSBM VVRfQ01ECQkJCTB4MDENCj4gPiArI2RlZmluZSBMVVRfQUREUgkJCTB4MDINCj4gPiArI2RlZmlu ZSBMVVRfQ0FERFJfU0RSCQkJMHgwMw0KPiA+ICsjZGVmaW5lIExVVF9NT0RFCQkJMHgwNA0KPiA+ ICsjZGVmaW5lIExVVF9NT0RFMgkJCTB4MDUNCj4gPiArI2RlZmluZSBMVVRfTU9ERTQJCQkweDA2 DQo+ID4gKyNkZWZpbmUgTFVUX01PREU4CQkJMHgwNw0KPiA+ICsjZGVmaW5lIExVVF9OWFBfV1JJ VEUJCQkweDA4DQo+ID4gKyNkZWZpbmUgTFVUX05YUF9SRUFECQkJMHgwOQ0KPiA+ICsjZGVmaW5l IExVVF9MRUFSTl9TRFIJCQkweDBBDQo+ID4gKyNkZWZpbmUgTFVUX0RBVFNaX1NEUgkJCTB4MEIN Cj4gPiArI2RlZmluZSBMVVRfRFVNTVkJCQkweDBDDQo+ID4gKyNkZWZpbmUgTFVUX0RVTU1ZX1JX RFNfU0RSCQkweDBEDQo+ID4gKyNkZWZpbmUgTFVUX0pNUF9PTl9DUwkJCTB4MUYNCj4gPiArI2Rl ZmluZSBMVVRfQ01EX0REUgkJCTB4MjENCj4gPiArI2RlZmluZSBMVVRfQUREUl9ERFIJCQkweDIy DQo+ID4gKyNkZWZpbmUgTFVUX0NBRERSX0REUgkJCTB4MjMNCj4gPiArI2RlZmluZSBMVVRfTU9E RV9ERFIJCQkweDI0DQo+ID4gKyNkZWZpbmUgTFVUX01PREUyX0REUgkJCTB4MjUNCj4gPiArI2Rl ZmluZSBMVVRfTU9ERTRfRERSCQkJMHgyNg0KPiA+ICsjZGVmaW5lIExVVF9NT0RFOF9ERFIJCQkw eDI3DQo+ID4gKyNkZWZpbmUgTFVUX1dSSVRFX0REUgkJCTB4MjgNCj4gPiArI2RlZmluZSBMVVRf UkVBRF9ERFIJCQkweDI5DQo+ID4gKyNkZWZpbmUgTFVUX0xFQVJOX0REUgkJCTB4MkENCj4gPiAr I2RlZmluZSBMVVRfREFUU1pfRERSCQkJMHgyQg0KPiA+ICsjZGVmaW5lIExVVF9EVU1NWV9ERFIJ CQkweDJDDQo+ID4gKyNkZWZpbmUgTFVUX0RVTU1ZX1JXRFNfRERSCQkweDJEDQo+ID4gKw0KPiA+ ICsvKg0KPiA+ICsgKiBDYWxjdWxhdGUgbnVtYmVyIG9mIHJlcXVpcmVkIFBBRCBiaXRzIGZvciBM VVQgcmVnaXN0ZXIuDQo+ID4gKyAqDQo+ID4gKyAqIFRoZSBwYWQgc3RhbmRzIGZvciB0aGUgbnVt YmVyIG9mIElPIGxpbmVzIFswOjddLg0KPiA+ICsgKiBGb3IgZXhhbXBsZSwgdGhlIG9jdGFsIHJl YWQgbmVlZHMgZWlnaHQgSU8gbGluZXMsDQo+ID4gKyAqIHNvIHlvdSBzaG91bGQgdXNlIExVVF9Q QUQoOCkuIFRoaXMgbWFjcm8NCj4gPiArICogcmV0dXJucyAzIGkuZS4gdXNlIGVpZ2h0ICgyXjMp IElQIGxpbmVzIGZvciByZWFkLg0KPiA+ICsgKi8NCj4gPiArI2RlZmluZSBMVVRfUEFEKHgpIChm bHMoeCkgLSAxKQ0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogTWFjcm8gZm9yIGNvbnN0cnVjdGlu ZyB0aGUgTFVUIGVudHJpZXMgd2l0aCB0aGUgZm9sbG93aW5nDQo+ID4gKyAqIHJlZ2lzdGVyIGxh eW91dDoNCj4gPiArICoNCj4gPiArICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ICsgKiAgfCBJTlNUUjEgfCBQQUQxIHwgT1BSTkQxIHwg SU5TVFIwIHwgUEFEMCB8IE9QUk5EMCB8DQo+ID4gKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPiArICovDQo+ID4gKyNkZWZpbmUgUEFE X1NISUZUCQk4DQo+ID4gKyNkZWZpbmUgSU5TVFJfU0hJRlQJCTEwDQo+ID4gKyNkZWZpbmUgT1BS TkRfU0hJRlQJCTE2DQo+ID4gKw0KPiA+ICsvKiBNYWNyb3MgZm9yIGNvbnN0cnVjdGluZyB0aGUg TFVUIHJlZ2lzdGVyLiAqLw0KPiA+ICsjZGVmaW5lIExVVF9ERUYoaWR4LCBpbnMsIHBhZCwgb3By KQkJCSAgXA0KPiA+ICsJKCgoKGlucykgPDwgSU5TVFJfU0hJRlQpIHwgKChwYWQpIDw8IFBBRF9T SElGVCkgfCBcDQo+ID4gKwkob3ByKSkgPDwgKCgoaWR4KSAlIDIpICogT1BSTkRfU0hJRlQpKQ0K PiA+ICsNCj4gPiArLyogT3BlcmFuZHMgZm9yIHRoZSBMVVQgcmVnaXN0ZXIuICovDQo+ID4gKyNk ZWZpbmUgQUREUjhCSVQJCTB4MDgNCj4gPiArI2RlZmluZSBBRERSMTZCSVQJCTB4MTANCj4gPiAr I2RlZmluZSBBRERSMjRCSVQJCTB4MTgNCj4gPiArI2RlZmluZSBBRERSMzJCSVQJCTB4MjANCj4g DQo+IFlvdSBjYW4gZHJvcCB0aGVzZSBBRERSWEJJVCBkZWZpbml0aW9ucywgc2VlIGJlbG93Li4u DQo+IA0KT2ssIHdvdWxkIGRyb3AgaW4gbmV4dCB2ZXJzaW9uLg0KDQo+ID4gKw0KPiA+ICsjZGVm aW5lIFBPTExfVE9VVAkJNTAwMA0KPiA+ICsjZGVmaW5lIE5YUF9GU1BJX01BWF9DSElQU0VMRUNU CQk0DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgbnhwX2ZzcGlfZGV2dHlwZV9kYXRhIHsNCj4gPiArCXVu c2lnbmVkIGludCByeGZpZm87DQo+ID4gKwl1bnNpZ25lZCBpbnQgdHhmaWZvOw0KPiA+ICsJdW5z aWduZWQgaW50IGFoYl9idWZfc2l6ZTsNCj4gPiArCXVuc2lnbmVkIGludCBxdWlya3M7DQo+ID4g Kwlib29sIGxpdHRsZV9lbmRpYW47DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qg c3RydWN0IG54cF9mc3BpX2RldnR5cGVfZGF0YSBseDIxNjBhX2RhdGEgPSB7DQo+ID4gKwkucnhm aWZvID0gU1pfNTEyLCAgICAgICAvKiAoNjQgICogNjQgYml0cykgICovDQo+ID4gKwkudHhmaWZv ID0gU1pfMUssICAgICAgICAvKiAoMTI4ICogNjQgYml0cykgICovDQo+ID4gKwkuYWhiX2J1Zl9z aXplID0gU1pfMkssICAvKiAoMjU2ICogNjQgYml0cykgICovDQo+ID4gKwkucXVpcmtzID0gMCwN Cj4gPiArCS5saXR0bGVfZW5kaWFuID0gdHJ1ZSwgIC8qIGxpdHRsZS1lbmRpYW4gICAgKi8NCj4g PiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBueHBfZnNwaSB7DQo+ID4gKwl2b2lkIF9faW9tZW0g KmlvYmFzZTsNCj4gPiArCXZvaWQgX19pb21lbSAqYWhiX2FkZHI7DQo+ID4gKwl1MzIgbWVtbWFw X3BoeTsNCj4gPiArCXUzMiBtZW1tYXBfcGh5X3NpemU7DQo+ID4gKwlzdHJ1Y3QgY2xrICpjbGss ICpjbGtfZW47DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+ID4gKwlzdHJ1Y3QgY29tcGxl dGlvbiBjOw0KPiA+ICsJY29uc3Qgc3RydWN0IG54cF9mc3BpX2RldnR5cGVfZGF0YSAqZGV2dHlw ZV9kYXRhOw0KPiA+ICsJc3RydWN0IG11dGV4IGxvY2s7DQo+ID4gKwlzdHJ1Y3QgcG1fcW9zX3Jl cXVlc3QgcG1fcW9zX3JlcTsNCj4gPiArCWludCBzZWxlY3RlZDsNCj4gPiArfTsNCj4gPiArDQo+ ID4gKy8qDQo+ID4gKyAqIFIvVyBmdW5jdGlvbnMgZm9yIGJpZy0gb3IgbGl0dGxlLWVuZGlhbiBy ZWdpc3RlcnM6DQo+ID4gKyAqIFRoZSBGU1BJIGNvbnRyb2xsZXIncyBlbmRpYW5uZXNzIGlzIGlu ZGVwZW5kZW50IG9mDQo+ID4gKyAqIHRoZSBDUFUgY29yZSdzIGVuZGlhbm5lc3MuIFNvIGZhciwg YWx0aG91Z2ggdGhlIENQVQ0KPiA+ICsgKiBjb3JlIGlzIGxpdHRsZS1lbmRpYW4gdGhlIEZTUEkg Y29udHJvbGxlciBjYW4gdXNlDQo+ID4gKyAqIGJpZy1lbmRpYW4gb3IgbGl0dGxlLWVuZGlhbi4N Cj4gPiArICovDQo+ID4gK3N0YXRpYyB2b2lkIGZzcGlfd3JpdGVsKHN0cnVjdCBueHBfZnNwaSAq ZiwgdTMyIHZhbCwgdm9pZCBfX2lvbWVtDQo+ID4gKyphZGRyKSB7DQo+ID4gKwlpZiAoZi0+ZGV2 dHlwZV9kYXRhLT5saXR0bGVfZW5kaWFuKQ0KPiA+ICsJCWlvd3JpdGUzMih2YWwsIGFkZHIpOw0K PiA+ICsJZWxzZQ0KPiA+ICsJCWlvd3JpdGUzMmJlKHZhbCwgYWRkcik7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyB1MzIgZnNwaV9yZWFkbChzdHJ1Y3QgbnhwX2ZzcGkgKmYsIHZvaWQgX19p b21lbSAqYWRkcikgew0KPiA+ICsJaWYgKGYtPmRldnR5cGVfZGF0YS0+bGl0dGxlX2VuZGlhbikN Cj4gPiArCQlyZXR1cm4gaW9yZWFkMzIoYWRkcik7DQo+ID4gKwllbHNlDQo+ID4gKwkJcmV0dXJu IGlvcmVhZDMyYmUoYWRkcik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpcnFyZXR1cm5f dCBueHBfZnNwaV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpIHsNCj4gPiArCXN0 cnVjdCBueHBfZnNwaSAqZiA9IGRldl9pZDsNCj4gPiArCXUzMiByZWc7DQo+ID4gKw0KPiA+ICsJ LyogY2xlYXIgaW50ZXJydXB0ICovDQo+ID4gKwlyZWcgPSBmc3BpX3JlYWRsKGYsIGYtPmlvYmFz ZSArIEZTUElfSU5UUik7DQo+ID4gKwlmc3BpX3dyaXRlbChmLCBGU1BJX0lOVFJfSVBDTURET05F LCBmLT5pb2Jhc2UgKyBGU1BJX0lOVFIpOw0KPiA+ICsNCj4gPiArCWlmIChyZWcgJiBGU1BJX0lO VFJfSVBDTURET05FKQ0KPiA+ICsJCWNvbXBsZXRlKCZmLT5jKTsNCj4gPiArDQo+ID4gKwlyZXR1 cm4gSVJRX0hBTkRMRUQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbnhwX2ZzcGlf Y2hlY2tfYnVzd2lkdGgoc3RydWN0IG54cF9mc3BpICpmLCB1OCB3aWR0aCkgew0KPiA+ICsJc3dp dGNoICh3aWR0aCkgew0KPiA+ICsJY2FzZSAxOg0KPiA+ICsJY2FzZSAyOg0KPiA+ICsJY2FzZSA0 Og0KPiA+ICsJY2FzZSA4Og0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CXJldHVybiAtRU5PVFNVUFA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBib29sIG54cF9m c3BpX3N1cHBvcnRzX29wKHN0cnVjdCBzcGlfbWVtICptZW0sDQo+ID4gKwkJCQkgY29uc3Qgc3Ry dWN0IHNwaV9tZW1fb3AgKm9wKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbnhwX2ZzcGkgKmYgPSBz cGlfY29udHJvbGxlcl9nZXRfZGV2ZGF0YShtZW0tPnNwaS0+bWFzdGVyKTsNCj4gPiArCWludCBy ZXQ7DQo+ID4gKw0KPiA+ICsJcmV0ID0gbnhwX2ZzcGlfY2hlY2tfYnVzd2lkdGgoZiwgb3AtPmNt ZC5idXN3aWR0aCk7DQo+ID4gKw0KPiA+ICsJaWYgKG9wLT5hZGRyLm5ieXRlcykNCj4gPiArCQly ZXQgfD0gbnhwX2ZzcGlfY2hlY2tfYnVzd2lkdGgoZiwgb3AtPmFkZHIuYnVzd2lkdGgpOw0KPiA+ ICsNCj4gPiArCWlmIChvcC0+ZHVtbXkubmJ5dGVzKQ0KPiA+ICsJCXJldCB8PSBueHBfZnNwaV9j aGVja19idXN3aWR0aChmLCBvcC0+ZHVtbXkuYnVzd2lkdGgpOw0KPiA+ICsNCj4gPiArCWlmIChv cC0+ZGF0YS5uYnl0ZXMpDQo+ID4gKwkJcmV0IHw9IG54cF9mc3BpX2NoZWNrX2J1c3dpZHRoKGYs IG9wLT5kYXRhLmJ1c3dpZHRoKTsNCj4gPiArDQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJldHVy biBmYWxzZTsNCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJICogVGhlIG51bWJlciBvZiBpbnN0cnVj dGlvbnMgbmVlZGVkIGZvciB0aGUgb3AsIG5lZWRzDQo+ID4gKwkgKiB0byBmaXQgaW50byBhIHNp bmdsZSBMVVQgZW50cnkuDQo+ID4gKwkgKi8NCj4gPiArCWlmIChvcC0+YWRkci5uYnl0ZXMgKw0K PiA+ICsJICAgKG9wLT5kdW1teS5uYnl0ZXMgPyAxOjApICsNCj4gPiArCSAgIChvcC0+ZGF0YS5u Ynl0ZXMgPyAxOjApID4gNikNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsJLyog TWF4IDY0IGR1bW15IGNsb2NrIGN5Y2xlcyBzdXBwb3J0ZWQgKi8NCj4gPiArCWlmIChvcC0+ZHVt bXkuYnVzd2lkdGggJiYNCj4gPiArCSAgICAob3AtPmR1bW15Lm5ieXRlcyAqIDggLyBvcC0+ZHVt bXkuYnVzd2lkdGggPiA2NCkpDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCS8q IE1heCBkYXRhIGxlbmd0aCwgY2hlY2sgY29udHJvbGxlciBsaW1pdHMgYW5kIGFsaWdubWVudCAq Lw0KPiA+ICsJaWYgKG9wLT5kYXRhLmRpciA9PSBTUElfTUVNX0RBVEFfSU4gJiYNCj4gPiArCSAg ICAob3AtPmRhdGEubmJ5dGVzID4gZi0+ZGV2dHlwZV9kYXRhLT5haGJfYnVmX3NpemUgfHwNCj4g PiArCSAgICAgKG9wLT5kYXRhLm5ieXRlcyA+IGYtPmRldnR5cGVfZGF0YS0+cnhmaWZvIC0gNCAm Jg0KPiA+ICsJICAgICAgIUlTX0FMSUdORUQob3AtPmRhdGEubmJ5dGVzLCA4KSkpKQ0KPiA+ICsJ CXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwlpZiAob3AtPmRhdGEuZGlyID09IFNQSV9NRU1f REFUQV9PVVQgJiYNCj4gPiArCSAgICBvcC0+ZGF0YS5uYnl0ZXMgPiBmLT5kZXZ0eXBlX2RhdGEt PnR4ZmlmbykNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHRydWU7 DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIEluc3RlYWQgb2YgYnVzeSBsb29waW5nIGludm9rZSBy ZWFkbF9wb2xsX3RpbWVvdXQgZnVuY3Rpb25hbGl0eS4NCj4gPiArKi8gc3RhdGljIGludCBmc3Bp X3JlYWRsX3BvbGxfdG91dChzdHJ1Y3QgbnhwX2ZzcGkgKmYsIHZvaWQgX19pb21lbSAqYmFzZSwN Cj4gPiArCQkJCXUzMiBtYXNrLCB1MzIgZGVsYXlfdXMsDQo+ID4gKwkJCQl1MzIgdGltZW91dF91 cywgYm9vbCBjb25kaXRpb24pDQo+ID4gK3sNCj4gPiArCXUzMiByZWc7DQo+ID4gKw0KPiA+ICsJ aWYgKCFmLT5kZXZ0eXBlX2RhdGEtPmxpdHRsZV9lbmRpYW4pDQo+ID4gKwkJbWFzayA9ICh1MzIp Y3B1X3RvX2JlMzIobWFzayk7DQo+ID4gKw0KPiA+ICsJaWYgKGNvbmRpdGlvbikNCj4gPiArCQly ZXR1cm4gcmVhZGxfcG9sbF90aW1lb3V0KGJhc2UsIHJlZywgKHJlZyAmIG1hc2spLA0KPiA+ICsJ CQkJCSAgZGVsYXlfdXMsIHRpbWVvdXRfdXMpOw0KPiA+ICsJZWxzZQ0KPiA+ICsJCXJldHVybiBy ZWFkbF9wb2xsX3RpbWVvdXQoYmFzZSwgcmVnLCAhKHJlZyAmIG1hc2spLA0KPiA+ICsJCQkJCSAg ZGVsYXlfdXMsIHRpbWVvdXRfdXMpOw0KPiANCj4gSSB3b3VsZCByYXRoZXIgdXNlIGEgbG9jYWwg dmFyaWFibGUgdG8gc3RvcmUgdGhlIGNvbmRpdGlvbjoNCj4gDQo+IGJvb2wgYyA9IGNvbmRpdGlv biA/IChyZWcgJiBtYXNrKTohKHJlZyAmIG1hc2spOw0KPiANCldpdGggdGhlc2UgdHlwZSBvZiB1 c2FnZSBnZXR0aW5nIGJlbG93IHdhcm5pbmcgbWVzc2FnZXMuDQogDQpkcml2ZXJzL3NwaS9zcGkt bnhwLWZzcGkuYzogSW4gZnVuY3Rpb24g4oCYZnNwaV9yZWFkbF9wb2xsX3RvdXQuaXNyYS4xMC5j b25zdHByb3DigJk6DQpkcml2ZXJzL3NwaS9zcGktbnhwLWZzcGkuYzo0NDY6MjE6IHdhcm5pbmc6 IOKAmHJlZ+KAmSBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkIGluIHRoaXMgZnVuY3Rpb24gWy1X bWF5YmUtdW5pbml0aWFsaXplZF0NCiAgYm9vbCBjbiA9IGMgPyAocmVnICYgbWFzaykgOiAhKHJl ZyAmIG1hc2spOw0KDQpJZiBhc3NpZ24gdmFsdWUgdG8gcmVnID0gMHhmZmZmZmZmZiB0aGVuIHRp bWVvdXQgaXMgc3RhcnQgZ2V0dGluZyBoaXQgZm9yIEZhbHNlIGNhc2UgYW5kIGlmIGFzc2lnbiB2 YWx1ZSAwIHRoZW4gc3RhcnQgZ2V0dGluZyB0aW1lb3V0IGhpdCBmb3IgdHJ1ZSBjYXNlLg0KDQpJ IHdvdWxkIHJhdGhlciBub3QgdHJ5IHRvIG1vZGlmeSB0aGlzIGZ1bmN0aW9uLg0KDQo+IHJldHVy biByZWFkbF9wb2xsX3RpbWVvdXQoYmFzZSwgcmVnLCBjLCBkZWxheV91cywgdGltZW91dF91cyk7 DQo+IA0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBJZiB0aGUgc2xhdmUgZGV2aWNl IGNvbnRlbnQgYmVpbmcgY2hhbmdlZCBieSBXcml0ZS9FcmFzZSwgbmVlZCB0bw0KPiA+ICsgKiBp bnZhbGlkYXRlIHRoZSBBSEIgYnVmZmVyLiBUaGlzIGNhbiBiZSBhY2hpZXZlZCBieSBkb2luZyB0 aGUgcmVzZXQNCj4gPiArICogb2YgY29udHJvbGxlciBhZnRlciBzZXR0aW5nIE1DUjBbU1dSRVNF VF0gYml0Lg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGlubGluZSB2b2lkIG54cF9mc3BpX2ludmFs aWQoc3RydWN0IG54cF9mc3BpICpmKSB7DQo+ID4gKwl1MzIgcmVnOw0KPiA+ICsJaW50IHJldDsN Cj4gPiArDQo+ID4gKwlyZWcgPSBmc3BpX3JlYWRsKGYsIGYtPmlvYmFzZSArIEZTUElfTUNSMCk7 DQo+ID4gKwlmc3BpX3dyaXRlbChmLCByZWcgfCBGU1BJX01DUjBfU1dSU1QsIGYtPmlvYmFzZSAr IEZTUElfTUNSMCk7DQo+ID4gKw0KPiA+ICsJLyogdzFjIHJlZ2lzdGVyLCB3YWl0IHVuaXQgY2xl YXIgKi8NCj4gPiArCXJldCA9IGZzcGlfcmVhZGxfcG9sbF90b3V0KGYsIGYtPmlvYmFzZSArIEZT UElfTUNSMCwNCj4gPiArCQkJCSAgIEZTUElfTUNSMF9TV1JTVCwgMCwgUE9MTF9UT1VULCBmYWxz ZSk7DQo+ID4gKwlXQVJOX09OKHJldCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lk IG54cF9mc3BpX3ByZXBhcmVfbHV0KHN0cnVjdCBueHBfZnNwaSAqZiwNCj4gPiArCQkJCSBjb25z dCBzdHJ1Y3Qgc3BpX21lbV9vcCAqb3ApDQo+ID4gK3sNCj4gPiArCXZvaWQgX19pb21lbSAqYmFz ZSA9IGYtPmlvYmFzZTsNCj4gPiArCXUzMiBsdXR2YWxbNF0gPSB7fTsNCj4gPiArCWludCBsdXRp ZHggPSAxLCBpOw0KPiA+ICsNCj4gPiArCS8qIGNtZCAqLw0KPiA+ICsJbHV0dmFsWzBdIHw9IExV VF9ERUYoMCwgTFVUX0NNRCwgTFVUX1BBRChvcC0+Y21kLmJ1c3dpZHRoKSwNCj4gPiArCQkJICAg ICBvcC0+Y21kLm9wY29kZSk7DQo+ID4gKw0KPiA+ICsJLyogYWRkciBidXMgd2lkdGggKi8NCj4g PiArCWlmIChvcC0+YWRkci5uYnl0ZXMpIHsNCj4gPiArCQl1MzIgYWRkcmxlbiA9IDA7DQo+ID4g Kw0KPiA+ICsJCXN3aXRjaCAob3AtPmFkZHIubmJ5dGVzKSB7DQo+ID4gKwkJY2FzZSAxOg0KPiA+ ICsJCQlhZGRybGVuID0gQUREUjhCSVQ7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWNhc2UgMjoN Cj4gPiArCQkJYWRkcmxlbiA9IEFERFIxNkJJVDsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJY2Fz ZSAzOg0KPiA+ICsJCQlhZGRybGVuID0gQUREUjI0QklUOw0KPiA+ICsJCQlicmVhazsNCj4gPiAr CQljYXNlIDQ6DQo+ID4gKwkJCWFkZHJsZW4gPSBBRERSMzJCSVQ7DQo+ID4gKwkJCWJyZWFrOw0K PiA+ICsJCWRlZmF1bHQ6DQo+ID4gKwkJCWRldl9lcnIoZi0+ZGV2LCAiSW4tY29ycmVjdCBhZGRy ZXNzIGxlbmd0aFxuIik7DQo+ID4gKwkJCXJldHVybjsNCj4gPiArCQl9DQo+IA0KPiBZb3UgZG9u J3QgbmVlZCB0byB2YWxpZGF0ZSBvcC0+YWRkci5uYnl0ZXMgaGVyZSwgdGhpcyBpcyBhbHJlYWR5 IGRvbmUgaW4NCj4gbnhwX2ZzcGlfc3VwcG9ydHNfb3AoKS4NCg0KWWVzLCBJIG5lZWQgdG8gdmFs aWRhdGUgb3AtPmFkZHIubmJ5dGVzIGVsc2UgTFVUIHdvdWxkIGdvaW5nIHRvIGJlIHByb2dyYW1t ZWQgZm9yIDAgYWRkcmxlbi4NCkkgaGF2ZSBjaGVja2VkIHRoaXMgb24gdGhlIHRhcmdldC4NCg0K PiANCj4gPiArDQo+ID4gKwkJbHV0dmFsW2x1dGlkeCAvIDJdIHw9IExVVF9ERUYobHV0aWR4LCBM VVRfQUREUiwNCj4gPiArCQkJCQkgICAgICBMVVRfUEFEKG9wLT5hZGRyLmJ1c3dpZHRoKSwNCj4g PiArCQkJCQkgICAgICBhZGRybGVuKTsNCj4gDQo+IFlvdSBjYW4gYWxzbyBqdXN0IHJlbW92ZSB0 aGUgd2hvbGUgc3dpdGNoIHN0YXRlbWVudCBhYm92ZSBhbmQgdXNlIHRoaXM6DQo+IA0KPiBsdXR2 YWxbbHV0aWR4IC8gMl0gfD0gTFVUX0RFRihsdXRpZHgsIExVVF9BRERSLA0KPiAJCQkgICAgICBM VVRfUEFEKG9wLT5hZGRyLmJ1c3dpZHRoKSwNCj4gCQkJICAgICAgb3AtPmFkZHIubmJ5dGVzICog OCk7DQo+IA0KT2ssIHdvdWxkIGluY2x1ZGUgaW4gbmV4dCB2ZXJzaW9uLg0KDQo+ID4gKwkJbHV0 aWR4Kys7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogZHVtbXkgYnl0ZXMsIGlmIG5lZWRlZCAq Lw0KPiA+ICsJaWYgKG9wLT5kdW1teS5uYnl0ZXMpIHsNCj4gPiArCQlsdXR2YWxbbHV0aWR4IC8g Ml0gfD0gTFVUX0RFRihsdXRpZHgsIExVVF9EVU1NWSwNCj4gPiArCQkvKg0KPiA+ICsJCSAqIER1 ZSB0byBGbGV4U1BJIGNvbnRyb2xsZXIgbGltaXRhdGlvbiBudW1iZXIgb2YgUEFEIGZvcg0KPiBk dW1teQ0KPiA+ICsJCSAqIGJ1c3dpZHRoIG5lZWRzIHRvIGJlIHByb2dyYW1tZWQgYXMgZXF1YWwg dG8gZGF0YSBidXN3aWR0aC4NCj4gPiArCQkgKi8NCj4gPiArCQkJCQkgICAgICBMVVRfUEFEKG9w LT5kYXRhLmJ1c3dpZHRoKSwNCj4gPiArCQkJCQkgICAgICBvcC0+ZHVtbXkubmJ5dGVzICogOCAv DQo+ID4gKwkJCQkJICAgICAgb3AtPmR1bW15LmJ1c3dpZHRoKTsNCj4gPiArCQlsdXRpZHgrKzsN Cj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiByZWFkL3dyaXRlIGRhdGEgYnl0ZXMgKi8NCj4gPiAr CWlmIChvcC0+ZGF0YS5uYnl0ZXMpIHsNCj4gPiArCQlsdXR2YWxbbHV0aWR4IC8gMl0gfD0gTFVU X0RFRihsdXRpZHgsDQo+ID4gKwkJCQkJICAgICAgb3AtPmRhdGEuZGlyID09DQo+IFNQSV9NRU1f REFUQV9JTiA/DQo+ID4gKwkJCQkJICAgICAgTFVUX05YUF9SRUFEIDogTFVUX05YUF9XUklURSwN Cj4gPiArCQkJCQkgICAgICBMVVRfUEFEKG9wLT5kYXRhLmJ1c3dpZHRoKSwNCj4gPiArCQkJCQkg ICAgICAwKTsNCj4gPiArCQlsdXRpZHgrKzsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBzdG9w IGNvbmRpdGlvbi4gKi8NCj4gPiArCWx1dHZhbFtsdXRpZHggLyAyXSB8PSBMVVRfREVGKGx1dGlk eCwgTFVUX1NUT1AsIDAsIDApOw0KPiA+ICsNCj4gPiArCS8qIHVubG9jayBMVVQgKi8NCj4gPiAr CWZzcGlfd3JpdGVsKGYsIEZTUElfTFVUS0VZX1ZBTFVFLCBmLT5pb2Jhc2UgKyBGU1BJX0xVVEtF WSk7DQo+ID4gKwlmc3BpX3dyaXRlbChmLCBGU1BJX0xDS0VSX1VOTE9DSywgZi0+aW9iYXNlICsg RlNQSV9MQ0tDUik7DQo+ID4gKw0KPiA+ICsJLyogZmlsbCBMVVQgKi8NCj4gPiArCWZvciAoaSA9 IDA7IGkgPCBBUlJBWV9TSVpFKGx1dHZhbCk7IGkrKykNCj4gPiArCQlmc3BpX3dyaXRlbChmLCBs dXR2YWxbaV0sIGJhc2UgKyBGU1BJX0xVVF9SRUcoaSkpOw0KPiA+ICsNCj4gPiArCWRldl9kYmco Zi0+ZGV2LCAiQ01EWyV4XSBsdXR2YWxbMDoleCBcdCAxOiV4IFx0IDI6JXggXHQgMzoleF1cbiIs DQo+ID4gKwkJb3AtPmNtZC5vcGNvZGUsIGx1dHZhbFswXSwgbHV0dmFsWzFdLCBsdXR2YWxbMl0s IGx1dHZhbFszXSk7DQo+ID4gKw0KPiA+ICsJLyogbG9jayBMVVQgKi8NCj4gPiArCWZzcGlfd3Jp dGVsKGYsIEZTUElfTFVUS0VZX1ZBTFVFLCBmLT5pb2Jhc2UgKyBGU1BJX0xVVEtFWSk7DQo+ID4g Kwlmc3BpX3dyaXRlbChmLCBGU1BJX0xDS0VSX0xPQ0ssIGYtPmlvYmFzZSArIEZTUElfTENLQ1Ip OyB9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG54cF9mc3BpX2Nsa19wcmVwX2VuYWJsZShzdHJ1 Y3QgbnhwX2ZzcGkgKmYpIHsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJcmV0ID0gY2xr X3ByZXBhcmVfZW5hYmxlKGYtPmNsa19lbik7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJldHVy biByZXQ7DQo+ID4gKw0KPiA+ICsJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGYtPmNsayk7DQo+ ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGYtPmNsa19lbik7 DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgbnhwX2ZzcGlfY2xrX2Rpc2FibGVfdW5wcmVw KHN0cnVjdCBueHBfZnNwaSAqZikgew0KPiA+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGYtPmNs ayk7DQo+ID4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZi0+Y2xrX2VuKTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArLyoNCj4gPiArICogSW4gRmxleFNQSSBjb250cm9sbGVyLCBmbGFzaCBhY2Nlc3Mg aXMgYmFzZWQgb24gdmFsdWUgb2YNCj4gPiArRlNQSV9GTFNIWFhDUjANCj4gPiArICogcmVnaXN0 ZXIgYW5kIHN0YXJ0IGJhc2UgYWRkcmVzcyBvZiB0aGUgc2xhdmUgZGV2aWNlLg0KPiA+ICsgKg0K PiA+ICsgKgkJCQkJCQkgICAgKEhpZ2hlciBhZGRyZXNzKQ0KPiA+ICsgKgkJCQktLS0tLS0tLSAg ICA8LS0gRkxTSEIyQ1IwDQo+ID4gKyAqCQkJCXwgIEIyICB8DQo+ID4gKyAqCQkJCXwgICAgICB8 DQo+ID4gKyAqCUIyIHN0YXJ0IGFkZHJlc3MgLS0+CS0tLS0tLS0tICAgIDwtLSBGTFNIQjFDUjAN Cj4gPiArICoJCQkJfCAgQjEgIHwNCj4gPiArICoJCQkJfCAgICAgIHwNCj4gPiArICoJQjEgc3Rh cnQgYWRkcmVzcyAtLT4JLS0tLS0tLS0gICAgPC0tIEZMU0hBMkNSMA0KPiA+ICsgKgkJCQl8ICBB MiAgfA0KPiA+ICsgKgkJCQl8ICAgICAgfA0KPiA+ICsgKglBMiBzdGFydCBhZGRyZXNzIC0tPgkt LS0tLS0tLSAgICA8LS0gRkxTSEExQ1IwDQo+ID4gKyAqCQkJCXwgIEExICB8DQo+ID4gKyAqCQkJ CXwgICAgICB8DQo+ID4gKyAqCUExIHN0YXJ0IGFkZHJlc3MgLS0+CS0tLS0tLS0tCQkgICAgKExv d2VyIGFkZHJlc3MpDQo+ID4gKyAqDQo+ID4gKyAqDQo+ID4gKyAqIFN0YXJ0IGJhc2UgYWRkcmVz cyBkZWZpbmVzIHRoZSBzdGFydGluZyBhZGRyZXNzIHJhbmdlIGZvciBnaXZlbiBDUw0KPiA+ICth bmQNCj4gPiArICogRlNQSV9GTFNIWFhDUjAgZGVmaW5lcyB0aGUgc2l6ZSBvZiB0aGUgc2xhdmUg ZGV2aWNlIGNvbm5lY3RlZCBhdCBnaXZlbiBDUy4NCj4gPiArICoNCj4gPiArICogQnV0LCBkaWZm ZXJlbnQgdGFyZ2V0cyBhcmUgaGF2aW5nIGRpZmZlcmVudCBjb21iaW5hdGlvbnMgb2YgbnVtYmVy DQo+ID4gK29mIENTLA0KPiA+ICsgKiBzb21lIHRhcmdldHMgb25seSBoYXZlIHNpbmdsZSBDUyBv ciB0d28gQ1MgY292ZXJpbmcgY29udHJvbGxlcidzDQo+ID4gK2Z1bGwNCj4gPiArICogbWVtb3J5 IG1hcHBlZCBzcGFjZSBhcmVhLg0KPiA+ICsgKiBUaHVzLCBpbXBsZW1lbnRhdGlvbiBpcyBiZWlu ZyBkb25lIGFzIGluZGVwZW5kZW50IG9mIHRoZSBzaXplIGFuZA0KPiA+ICtudW1iZXINCj4gPiAr ICogb2YgdGhlIGNvbm5lY3RlZCBzbGF2ZSBkZXZpY2UuDQo+ID4gKyAqIEFzc2lnbiBjb250cm9s bGVyIG1lbW9yeSBtYXBwZWQgc3BhY2Ugc2l6ZSBhcyB0aGUgc2l6ZSB0byB0aGUNCj4gPiArY29u bmVjdGVkDQo+ID4gKyAqIHNsYXZlIGRldmljZS4NCj4gPiArICogTWFyayBGTFNIeHhDUjAgYXMg emVybyBpbml0aWFsbHkgYW5kIHRoZW4gYXNzaWduIHZhbHVlIG9ubHkgdG8gdGhlDQo+ID4gK3Nl bGVjdGVkDQo+ID4gKyAqIGNoaXAtc2VsZWN0IEZsYXNoIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIu DQo+ID4gKyAqDQo+ID4gKyAqIEZvciBlLmcuIHRvIGFjY2VzcyBDUzIgKEIxKSwgRkxTSEIxQ1Iw IHJlZ2lzdGVyIHdvdWxkIGJlIGVxdWFsIHRvDQo+ID4gK3RoZQ0KPiA+ICsgKiBtZW1vcnkgbWFw cGVkIHNpemUgb2YgdGhlIGNvbnRyb2xsZXIuDQo+ID4gKyAqIFZhbHVlIGZvciByZXN0IG9mIHRo ZSBDUyBGTFNIeHhDUjAgcmVnaXN0ZXIgd291bGQgYmUgemVyby4NCj4gPiArICoNCj4gPiArICov DQo+ID4gK3N0YXRpYyB2b2lkIG54cF9mc3BpX3NlbGVjdF9tZW0oc3RydWN0IG54cF9mc3BpICpm LCBzdHJ1Y3Qgc3BpX2RldmljZQ0KPiA+ICsqc3BpKSB7DQo+ID4gKwl1bnNpZ25lZCBsb25nIHJh dGUgPSBzcGktPm1heF9zcGVlZF9oejsNCj4gPiArCWludCByZXQ7DQo+ID4gKwl1aW50NjRfdCBz aXplX2tiOw0KPiA+ICsNCj4gPiArCS8qDQo+ID4gKwkgKiBSZXR1cm4sIGlmIHByZXZpb3VzbHkg c2VsZWN0ZWQgc2xhdmUgZGV2aWNlIGlzIHNhbWUgYXMgY3VycmVudA0KPiA+ICsJICogcmVxdWVz dGVkIHNsYXZlIGRldmljZS4NCj4gPiArCSAqLw0KPiA+ICsJaWYgKGYtPnNlbGVjdGVkID09IHNw aS0+Y2hpcF9zZWxlY3QpDQo+ID4gKwkJcmV0dXJuOw0KPiA+ICsNCj4gPiArCS8qIFJlc2V0IEZM U0h4eENSMCByZWdpc3RlcnMgKi8NCj4gPiArCWZzcGlfd3JpdGVsKGYsIDAsIGYtPmlvYmFzZSAr IEZTUElfRkxTSEExQ1IwKTsNCj4gPiArCWZzcGlfd3JpdGVsKGYsIDAsIGYtPmlvYmFzZSArIEZT UElfRkxTSEEyQ1IwKTsNCj4gPiArCWZzcGlfd3JpdGVsKGYsIDAsIGYtPmlvYmFzZSArIEZTUElf RkxTSEIxQ1IwKTsNCj4gPiArCWZzcGlfd3JpdGVsKGYsIDAsIGYtPmlvYmFzZSArIEZTUElfRkxT SEIyQ1IwKTsNCj4gPiArDQo+ID4gKwkvKiBBc3NpZ24gY29udHJvbGxlciBtZW1vcnkgbWFwcGVk IHNwYWNlIGFzIHNpemUsIEtCeXRlcywgb2YgZmxhc2guICovDQo+ID4gKwlzaXplX2tiID0gRlNQ SV9GTFNIWENSMF9TWihmLT5tZW1tYXBfcGh5X3NpemUpOw0KPiANCkFib3ZlIGRlc2NyaXB0aW9u IG9mIHRoaXMgZnVuY3Rpb24sIGV4cGxhaW5zIHRoZSByZWFzb24gZm9yIHVzaW5nIG1lbW1hcF9w aHlfc2l6ZS4NClRoaXMgaXMgbm90IHRoZSBhcmJpdHJhcnkgc2l6ZSwgYnV0IHRoZSBtZW1vcnkg bWFwcGVkIHNpemUgYmVpbmcgYXNzaWduZWQgdG8gdGhlIGNvbnRyb2xsZXIuDQoNCj4gWW91IGFy ZSBzdGlsbCB1c2luZyBtZW1vcnkgb2YgYXJiaXRyYXJ5IHNpemUgKG1lbW1hcF9waHlfc2l6ZSkg Zm9yIG1hcHBpbmcgdGhlDQo+IGZsYXNoLiBXaHkgbm90IHVzZSB0aGUgc2FtZSBhcHByb2FjaCBh cyBpbiB0aGUgUVNQSSBkcml2ZXIgYW5kIGp1c3QgbWFwDQo+IGFoYl9idWZfc2l6ZSB1bnRpbCB3 ZSBpbXBsZW1lbnQgdGhlIGRpcm1hcCBBUEk/DQpUaGUgYXBwcm9hY2ggd2hpY2ggYmVpbmcgdXNl ZCBpbiBRU1BJIGRyaXZlciBkaWRuJ3Qgd29yayBoZXJlLCBJIGhhdmUgdHJpZWQgd2l0aCB0aGF0 Lg0KSW4gUVNQSSBkcml2ZXIsIHdoaWxlIHByZXBhcmluZyBMVVQgd2UgYXJlIGFzc2lnbmluZyBy ZWFkL3dyaXRlIGFkZHJlc3MgaW4gdGhlIExVVCBwcmVwYXJhdGlvbiBhbmQgaGF2ZSB0byBmb3Ig c29tZSB1bmtub3duIGhhY2sgaGF2ZSB0byBwcm92aWRlIG1hY3JvIGZvciBMVVRfTU9ERSBpbnN0 ZWFkIG9mIExVVF9BRERSLg0KQnV0IHRoaXMgdGhpbmcgZGlkbid0IHdvcmsgZm9yIEZsZXhTUEku DQpJIGRpc2N1c3NlZCB3aXRoIEhXIElQIG93bmVyIGFuZCB0aGV5IHN1Z2dlc3RlZCBvbmx5IHRv IHVzZSBMVVRfQUREUiBmb3Igc3BlY2lmeWluZyB0aGUgYWRkcmVzcyBsZW5ndGggb2YgdGhlIGNv bW1hbmQgaS5lLiAzLWJ5dGUgb3IgNC1ieXRlIGFkZHJlc3MgY29tbWFuZCAoTk9SKSBvciAxLTIg Ynl0ZSBhZGRyZXNzIGNvbW1hbmQgZm9yIE5BTkQuDQoNClRodXMsIGluIExVVCBwcmVwYXJhdGlv biB3ZSBoYXZlIGFzc2lnbmVkIG9ubHkgdGhlIGJhc2UgYWRkcmVzcy4NCk5vdyBpZiBJIGhhdmUg YXNzaWduZWQgYWhiX2J1Zl9zaXplIHRvIEZTUElfRkxTSFhYQ1IwIHJlZ2lzdGVyIHRoZW4gZm9y IHJlYWQvd3JpdGUgZGF0YSBiZXlvbmQgbGltaXQgb2YgYWhiX2J1Zl9zaXplIG9mZnNldCBJIGdl dCBkYXRhIGNvcnJ1cHRpb24uDQoNClRodXMsIGZvciBnZW5lcmljIGFwcHJvYWNoIGhhdmUgYXNz aWduZWQgRlNQSV9GTFNIWFhDUjAgZXF1YWwgdG8gdGhlIG1lbW9yeSBtYXBwZWQgc2l6ZSB0byB0 aGUgY29udHJvbGxlci4gVGhpcyB3b3VsZCBhbHNvIG5vdCBnb2luZyB0byBkZXBlbmQgb24gdGhl IG51bWJlciBvZiBDUyBwcmVzZW50IG9uIHRoZSB0YXJnZXQuDQoNCj4gWW91IGFyZSBhbHJlYWR5 IGFsaWduaW5nIHRoZSBBSEIgcmVhZHMgZm9yIHRoaXMgaW4gbnhwX2ZzcGlfYWRqdXN0X29wX3Np emUoKS4NCj4gDQpZZXMsIG1heCByZWFkIGRhdGEgc2l6ZSBjYW4gYmUgYWhiX2J1Zl9zaXplLiBU aHVzIHdlIG5lZWQgdG8gY2hlY2sgbWF4IHJlYWQgc2l6ZSB3aXRoIGFoYl9idWZfc2l6ZS4NCg0K PiA+ICsNCj4gPiArCXN3aXRjaCAoc3BpLT5jaGlwX3NlbGVjdCkgew0KPiA+ICsJY2FzZSAwOg0K PiA+ICsJCWZzcGlfd3JpdGVsKGYsIHNpemVfa2IsIGYtPmlvYmFzZSArIEZTUElfRkxTSEExQ1Iw KTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgMToNCj4gPiArCQlmc3BpX3dyaXRlbChmLCBz aXplX2tiLCBmLT5pb2Jhc2UgKyBGU1BJX0ZMU0hBMkNSMCk7DQo+ID4gKwkJYnJlYWs7DQo+ID4g KwljYXNlIDI6DQo+ID4gKwkJZnNwaV93cml0ZWwoZiwgc2l6ZV9rYiwgZi0+aW9iYXNlICsgRlNQ SV9GTFNIQjFDUjApOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSAzOg0KPiA+ICsJCWZzcGlf d3JpdGVsKGYsIHNpemVfa2IsIGYtPmlvYmFzZSArIEZTUElfRkxTSEIyQ1IwKTsNCj4gPiArCQli cmVhazsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJZGV2X2VycihmLT5kZXYsICJJbi1jb3JyZWN0 IENTIHByb3ZpZGVkXG4iKTsNCj4gPiArCQlyZXR1cm47DQo+IA0KPiBZb3UgZG9uJ3QgbmVlZCB0 byB2YWxpZGF0ZSBzcGktPmNoaXBfc2VsZWN0IGhlcmUuIFRoaXMgc2hvdWxkIG5ldmVyIGJlIGlu dmFsaWQNCj4gYW5kIGlmIGl0IGlzLCBzb21ldGhpbmcgaXMgcmVhbGx5IHdyb25nIGFuZCB5b3Vy IGNoZWNrIHdvbid0IGhlbHAuDQpPaywgd291bGQgcmVtb3ZlIGluIG5leHQgdmVyc2lvbi4NCg0K PiANCj4gPiArCX0NCj4gPiArDQo+ID4gKwlkZXZfZGJnKGYtPmRldiwgIlNsYXZlIGRldmljZSBb Q1M6JXhdIHNlbGVjdGVkXG4iLA0KPiA+ICtzcGktPmNoaXBfc2VsZWN0KTsNCj4gPiArDQo+ID4g KwlueHBfZnNwaV9jbGtfZGlzYWJsZV91bnByZXAoZik7DQo+ID4gKw0KPiA+ICsJcmV0ID0gY2xr X3NldF9yYXRlKGYtPmNsaywgcmF0ZSk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJldHVybjsN Cj4gPiArDQo+ID4gKwlyZXQgPSBueHBfZnNwaV9jbGtfcHJlcF9lbmFibGUoZik7DQo+ID4gKwlp ZiAocmV0KQ0KPiA+ICsJCXJldHVybjsNCj4gDQo+IE1pc3NpbmcgbmV3bGluZSBsaW5lIGhlcmUu DQpPaw0KDQo+IA0KPiA+ICsJZi0+c2VsZWN0ZWQgPSBzcGktPmNoaXBfc2VsZWN0Ow0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBueHBfZnNwaV9yZWFkX2FoYihzdHJ1Y3QgbnhwX2Zz cGkgKmYsIGNvbnN0IHN0cnVjdA0KPiA+ICtzcGlfbWVtX29wICpvcCkgew0KPiA+ICsJdTMyIGxl biA9IG9wLT5kYXRhLm5ieXRlczsNCj4gPiArDQo+ID4gKwkvKiBSZWFkIG91dCB0aGUgZGF0YSBk aXJlY3RseSBmcm9tIHRoZSBBSEIgYnVmZmVyLiAqLw0KPiA+ICsJbWVtY3B5X2Zyb21pbyhvcC0+ ZGF0YS5idWYuaW4sIChmLT5haGJfYWRkciArIG9wLT5hZGRyLnZhbCksIGxlbik7IH0NCj4gPiAr DQo+ID4gK3N0YXRpYyB2b2lkIG54cF9mc3BpX2ZpbGxfdHhmaWZvKHN0cnVjdCBueHBfZnNwaSAq ZiwNCj4gPiArCQkJCSBjb25zdCBzdHJ1Y3Qgc3BpX21lbV9vcCAqb3ApDQo+ID4gK3sNCj4gPiAr CXZvaWQgX19pb21lbSAqYmFzZSA9IGYtPmlvYmFzZTsNCj4gPiArCWludCBpLCBqLCByZXQ7DQo+ ID4gKwlpbnQgc2l6ZSwgdG1wX3NpemUsIHdtX3NpemU7DQo+ID4gKwl1MzIgZGF0YSA9IDA7DQo+ ID4gKwl1MzIgKnR4YnVmID0gKHUzMiAqKSBvcC0+ZGF0YS5idWYub3V0Ow0KPiA+ICsNCj4gPiAr CS8qIGNsZWFyIHRoZSBUWCBGSUZPLiAqLw0KPiA+ICsJZnNwaV93cml0ZWwoZiwgRlNQSV9JUFRY RkNSX0NMUiwgYmFzZSArIEZTUElfSVBUWEZDUik7DQo+ID4gKw0KPiA+ICsJLyogRGVmYXVsdCB2 YWx1ZSBvZiB3YXRlciBtYXJrIGxldmVsIGlzIDggYnl0ZXMuICovDQo+ID4gKwl3bV9zaXplID0g ODsNCj4gPiArCXNpemUgPSBvcC0+ZGF0YS5uYnl0ZXMgLyB3bV9zaXplOw0KPiA+ICsJZm9yIChp ID0gMDsgaSA8IHNpemU7IGkrKykgew0KPiA+ICsJCS8qIFdhaXQgZm9yIFRYRklGTyBlbXB0eSAq Lw0KPiA+ICsJCXJldCA9IGZzcGlfcmVhZGxfcG9sbF90b3V0KGYsIGYtPmlvYmFzZSArIEZTUElf SU5UUiwNCj4gPiArCQkJCQkgICBGU1BJX0lOVFJfSVBUWFdFLCAwLA0KPiA+ICsJCQkJCSAgIFBP TExfVE9VVCwgdHJ1ZSk7DQo+ID4gKwkJV0FSTl9PTihyZXQpOw0KPiA+ICsNCj4gPiArCQlqID0g MDsNCj4gPiArCQl0bXBfc2l6ZSA9IHdtX3NpemU7DQo+ID4gKwkJd2hpbGUgKHRtcF9zaXplID4g MCkgew0KPiA+ICsJCQlkYXRhID0gMDsNCj4gPiArCQkJbWVtY3B5KCZkYXRhLCB0eGJ1ZiwgNCk7 DQo+ID4gKwkJCWZzcGlfd3JpdGVsKGYsIGRhdGEsIGJhc2UgKyBGU1BJX1RGRFIgKyBqICogNCk7 DQo+ID4gKwkJCXRtcF9zaXplIC09IDQ7DQo+ID4gKwkJCWorKzsNCj4gPiArCQkJdHhidWYgKz0g MTsNCj4gPiArCQl9DQo+ID4gKwkJZnNwaV93cml0ZWwoZiwgRlNQSV9JTlRSX0lQVFhXRSwgYmFz ZSArIEZTUElfSU5UUik7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJc2l6ZSA9IG9wLT5kYXRhLm5i eXRlcyAlIHdtX3NpemU7DQo+ID4gKwlpZiAoc2l6ZSkgew0KPiA+ICsJCS8qIFdhaXQgZm9yIFRY RklGTyBlbXB0eSAqLw0KPiA+ICsJCXJldCA9IGZzcGlfcmVhZGxfcG9sbF90b3V0KGYsIGYtPmlv YmFzZSArIEZTUElfSU5UUiwNCj4gPiArCQkJCQkgICBGU1BJX0lOVFJfSVBUWFdFLCAwLA0KPiA+ ICsJCQkJCSAgIFBPTExfVE9VVCwgdHJ1ZSk7DQo+ID4gKwkJV0FSTl9PTihyZXQpOw0KPiA+ICsN Cj4gPiArCQlqID0gMDsNCj4gPiArCQl0bXBfc2l6ZSA9IDA7DQo+ID4gKwkJd2hpbGUgKHNpemUg PiAwKSB7DQo+ID4gKwkJCWRhdGEgPSAwOw0KPiA+ICsJCQl0bXBfc2l6ZSA9IChzaXplIDwgNCkg PyBzaXplIDogNDsNCj4gPiArCQkJbWVtY3B5KCZkYXRhLCB0eGJ1ZiwgdG1wX3NpemUpOw0KPiA+ ICsJCQlmc3BpX3dyaXRlbChmLCBkYXRhLCBiYXNlICsgRlNQSV9URkRSICsgaiAqIDQpOw0KPiA+ ICsJCQlzaXplIC09IHRtcF9zaXplOw0KPiA+ICsJCQlqKys7DQo+ID4gKwkJCXR4YnVmICs9IDE7 DQo+ID4gKwkJfQ0KPiA+ICsJCWZzcGlfd3JpdGVsKGYsIEZTUElfSU5UUl9JUFRYV0UsIGJhc2Ug KyBGU1BJX0lOVFIpOw0KPiA+ICsJfQ0KPiANCj4gQWxsIHRoZXNlIG5lc3RlZCBsb29wcyB0byBm aWxsIHRoZSBUWCBidWZmZXIgYW5kIGFsc28gdGhlIG9uZXMgYmVsb3cgdG8gcmVhZCB0aGUNCj4g UlggYnVmZmVyIGxvb2sgbXVjaCBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gdGhleSBzaG91bGQgcmVh bGx5IGJlLiBDYW4geW91IHRyeSB0bw0KPiBtYWtlIHRoaXMgbW9yZSByZWFkYWJsZT8NClllcw0K PiANCj4gTWF5YmUgc29tZXRoaW5nIGxpa2UgdGhpcyB3b3VsZCB3b3JrOg0KPiANCj4gZm9yIChp ID0gMDsgaSA8IEFMSUdOX0RPV04ob3AtPmRhdGEubmJ5dGVzLCA4KTsgaSArPSA4KSB7DQo+IAkv KiBXYWl0IGZvciBUWEZJRk8gZW1wdHkgKi8NCj4gCXJldCA9IGZzcGlfcmVhZGxfcG9sbF90b3V0 KGYsIGYtPmlvYmFzZSArIEZTUElfSU5UUiwNCj4gCQkJCSAgIEZTUElfSU5UUl9JUFRYV0UsIDAs DQo+IAkJCQkgICBQT0xMX1RPVVQsIHRydWUpOw0KPiANCj4gCWZzcGlfd3JpdGVsKGYsIG9wLT5k YXRhLmJ1Zi5vdXQgKyBpLCBiYXNlICsgRlNQSV9URkRSKTsNCj4gCWZzcGlfd3JpdGVsKGYsIG9w LT5kYXRhLmJ1Zi5vdXQgKyBpICsgNCwgYmFzZSArIEZTUElfVEZEUiArIDQpOw0KPiAJZnNwaV93 cml0ZWwoZiwgRlNQSV9JTlRSX0lQVFhXRSwgYmFzZSArIEZTUElfSU5UUik7IH0NCldpdGggdGhp cyBhYm92ZSAyIGxpbmVzIHdlIGFyZSBoYXJkY29kaW5nIGl0IGZvciByZWFkL3dyaXRlIHdpdGgg d2F0ZXJtYXJrIHNpemUgYXMgOCBieXRlcy4NCldhdGVybWFyayBzaXplIGNhbiBiZSB2YXJpYWJs ZSBhbmQgZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YgSVBSWEZDUi9JUFRYRkNSIHJlZ2lzdGVyIHdp dGggZGVmYXVsdCB2YWx1ZSBhcyA4IGJ5dGVzDQpUaHVzLCBJIHdvdWxkIHN0aWxsIHByZWZlciB0 byB1c2UgdGhlIGludGVybmFsIGZvciBsb29wIGluc3RlYWQgb2YgMiBmc3BpX3dyaXRlbCguLi4p IGZvciBGU1BJX1RGRFIgYW5kIEZTUElfVEZEUiArIDQgcmVnaXN0ZXIgd3JpdGUgY29tbWFuZHMu DQoNCj4gDQo+IGlmIChpIDwgb3AtPmRhdGEubmJ5dGVzKSB7DQo+IAl1MzIgZGF0YSA9IDA7DQo+ IAlpbnQgajsNCj4gCS8qIFdhaXQgZm9yIFRYRklGTyBlbXB0eSAqLw0KPiAJcmV0ID0gZnNwaV9y ZWFkbF9wb2xsX3RvdXQoZiwgZi0+aW9iYXNlICsgRlNQSV9JTlRSLA0KPiAJCQkJICAgRlNQSV9J TlRSX0lQVFhXRSwgMCwNCj4gCQkJCSAgIFBPTExfVE9VVCwgdHJ1ZSk7DQo+IA0KPiAJZm9yIChq ID0gMDsgaiA8IEFMSUdOKG9wLT5kYXRhLm5ieXRlcyAtIGksIDQpOyBqICs9IDQpIHsNCj4gCQlt ZW1jcHkoJmRhdGEsIG9wLT5kYXRhLmJ1Zi5vdXQgKyBpICsgaiwgNCk7DQo+IAkJZnNwaV93cml0 ZWwoZiwgZGF0YSwgYmFzZSArIEZTUElfVEZEUiArIGopOw0KPiAJfQ0KPiANCj4gCWZzcGlfd3Jp dGVsKGYsIEZTUElfSU5UUl9JUFRYV0UsIGJhc2UgKyBGU1BJX0lOVFIpOyB9DQo+IA0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBueHBfZnNwaV9yZWFkX3J4ZmlmbyhzdHJ1Y3Qgbnhw X2ZzcGkgKmYsDQo+ID4gKwkJCSAgY29uc3Qgc3RydWN0IHNwaV9tZW1fb3AgKm9wKQ0KPiA+ICt7 DQo+ID4gKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBmLT5pb2Jhc2U7DQo+ID4gKwlpbnQgaSwgajsN Cj4gPiArCWludCBzaXplLCB0bXBfc2l6ZSwgd21fc2l6ZSwgcmV0Ow0KPiA+ICsJdTMyIHRtcCA9 IDA7DQo+ID4gKwl1OCAqYnVmID0gb3AtPmRhdGEuYnVmLmluOw0KPiA+ICsJdTMyIGxlbiA9IG9w LT5kYXRhLm5ieXRlczsNCj4gPiArDQo+ID4gKwkvKiBEZWZhdWx0IHZhbHVlIG9mIHdhdGVyIG1h cmsgbGV2ZWwgaXMgOCBieXRlcy4gKi8NCj4gPiArCXdtX3NpemUgPSA4Ow0KPiA+ICsNCj4gPiAr CXdoaWxlIChsZW4gPiAwKSB7DQo+ID4gKwkJc2l6ZSA9IGxlbiAvIHdtX3NpemU7DQo+ID4gKw0K PiA+ICsJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsNCj4gPiArCQkJLyogV2FpdCBmb3Ig UlhGSUZPIGF2YWlsYWJsZSAqLw0KPiA+ICsJCQlyZXQgPSBmc3BpX3JlYWRsX3BvbGxfdG91dChm LCBmLT5pb2Jhc2UgKyBGU1BJX0lOVFIsDQo+ID4gKwkJCQkJCSAgIEZTUElfSU5UUl9JUFJYV0Es IDAsDQo+ID4gKwkJCQkJCSAgIFBPTExfVE9VVCwgdHJ1ZSk7DQo+ID4gKwkJCVdBUk5fT04ocmV0 KTsNCj4gPiArDQo+ID4gKwkJCWogPSAwOw0KPiA+ICsJCQl0bXBfc2l6ZSA9IHdtX3NpemU7DQo+ ID4gKwkJCXdoaWxlICh0bXBfc2l6ZSA+IDApIHsNCj4gPiArCQkJCXRtcCA9IDA7DQo+ID4gKwkJ CQl0bXAgPSBmc3BpX3JlYWRsKGYsIGJhc2UgKyBGU1BJX1JGRFIgKyBqICogNCk7DQo+ID4gKwkJ CQltZW1jcHkoYnVmLCAmdG1wLCA0KTsNCj4gPiArCQkJCXRtcF9zaXplIC09IDQ7DQo+ID4gKwkJ CQlqKys7DQo+ID4gKwkJCQlidWYgKz0gNDsNCj4gPiArCQkJfQ0KPiA+ICsJCQkvKiBtb3ZlIHRo ZSBGSUZPIHBvaW50ZXIgKi8NCj4gPiArCQkJZnNwaV93cml0ZWwoZiwgRlNQSV9JTlRSX0lQUlhX QSwgYmFzZSArIEZTUElfSU5UUik7DQo+ID4gKwkJCWxlbiAtPSB3bV9zaXplOw0KPiA+ICsJCX0N Cj4gPiArDQo+ID4gKwkJc2l6ZSA9IGxlbiAlIHdtX3NpemU7DQo+ID4gKw0KPiA+ICsJCWogPSAw Ow0KPiA+ICsJCWlmIChzaXplKSB7DQo+ID4gKwkJCS8qIFdhaXQgZm9yIFJYRklGTyBhdmFpbGFi bGUgKi8NCj4gPiArCQkJcmV0ID0gZnNwaV9yZWFkbF9wb2xsX3RvdXQoZiwgZi0+aW9iYXNlICsg RlNQSV9JTlRSLA0KPiA+ICsJCQkJCQkgICBGU1BJX0lOVFJfSVBSWFdBLCAwLA0KPiA+ICsJCQkJ CQkgICBQT0xMX1RPVVQsIHRydWUpOw0KPiA+ICsJCQlXQVJOX09OKHJldCk7DQo+ID4gKw0KPiA+ ICsJCQl3aGlsZSAobGVuID4gMCkgew0KPiA+ICsJCQkJdG1wID0gMDsNCj4gPiArCQkJCXNpemUg PSAobGVuIDwgNCkgPyBsZW4gOiA0Ow0KPiA+ICsJCQkJdG1wID0gZnNwaV9yZWFkbChmLCBiYXNl ICsgRlNQSV9SRkRSICsgaiAqIDQpOw0KPiA+ICsJCQkJbWVtY3B5KGJ1ZiwgJnRtcCwgc2l6ZSk7 DQo+ID4gKwkJCQlsZW4gLT0gc2l6ZTsNCj4gPiArCQkJCWorKzsNCj4gPiArCQkJCWJ1ZiArPSBz aXplOw0KPiA+ICsJCQl9DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQkvKiBpbnZhbGlkIHRoZSBS WEZJRk8gKi8NCj4gPiArCQlmc3BpX3dyaXRlbChmLCBGU1BJX0lQUlhGQ1JfQ0xSLCBiYXNlICsg RlNQSV9JUFJYRkNSKTsNCj4gPiArCQkvKiBtb3ZlIHRoZSBGSUZPIHBvaW50ZXIgKi8NCj4gPiAr CQlmc3BpX3dyaXRlbChmLCBGU1BJX0lOVFJfSVBSWFdBLCBiYXNlICsgRlNQSV9JTlRSKTsNCj4g PiArCX0NCj4gDQo+IFNhbWUgaGVyZS4gSSB0aGluayB0aGlzIGlzIG92ZXJseSBjb21wbGljYXRl ZC4NCj4gDQpZZXMsIHdvdWxkIGRvIGluIG5leHQgdmVyc2lvbi4NCg0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgaW50IG54cF9mc3BpX2RvX29wKHN0cnVjdCBueHBfZnNwaSAqZiwgY29uc3Qg c3RydWN0IHNwaV9tZW1fb3ANCj4gPiArKm9wKSB7DQo+ID4gKwl2b2lkIF9faW9tZW0gKmJhc2Ug PSBmLT5pb2Jhc2U7DQo+ID4gKwlpbnQgc2VxbnVtID0gMDsNCj4gPiArCWludCBlcnIgPSAwOw0K PiA+ICsJdTMyIHJlZzsNCj4gPiArDQo+ID4gKwlyZWcgPSBmc3BpX3JlYWRsKGYsIGJhc2UgKyBG U1BJX0lQUlhGQ1IpOw0KPiA+ICsJLyogaW52YWxpZCBSWEZJRk8gZmlyc3QgKi8NCj4gPiArCXJl ZyAmPSB+RlNQSV9JUFJYRkNSX0RNQV9FTjsNCj4gPiArCXJlZyA9IHJlZyB8IEZTUElfSVBSWEZD Ul9DTFI7DQo+ID4gKwlmc3BpX3dyaXRlbChmLCByZWcsIGJhc2UgKyBGU1BJX0lQUlhGQ1IpOw0K PiA+ICsNCj4gPiArCWluaXRfY29tcGxldGlvbigmZi0+Yyk7DQo+ID4gKw0KPiA+ICsJZnNwaV93 cml0ZWwoZiwgb3AtPmFkZHIudmFsLCBiYXNlICsgRlNQSV9JUENSMCk7DQo+ID4gKwkvKg0KPiA+ ICsJICogQWx3YXlzIHN0YXJ0IHRoZSBzZXF1ZW5jZSBhdCB0aGUgc2FtZSBpbmRleCBzaW5jZSB3 ZSB1cGRhdGUNCj4gPiArCSAqIHRoZSBMVVQgYXQgZWFjaCBleGVjX29wKCkgY2FsbC4gQW5kIGFs c28gc3BlY2lmeSB0aGUgREFUQQ0KPiA+ICsJICogbGVuZ3RoLCBzaW5jZSBpdCdzIGhhcyBub3Qg YmVlbiBzcGVjaWZpZWQgaW4gdGhlIExVVC4NCj4gPiArCSAqLw0KPiA+ICsJZnNwaV93cml0ZWwo Ziwgb3AtPmRhdGEubmJ5dGVzIHwNCj4gPiArCQkgKFNFUUlEX0xVVCA8PCBGU1BJX0lQQ1IxX1NF UUlEX1NISUZUKSB8DQo+ID4gKwkJIChzZXFudW0gPDwgRlNQSV9JUENSMV9TRVFOVU1fU0hJRlQp LA0KPiA+ICsJCSBiYXNlICsgRlNQSV9JUENSMSk7DQo+ID4gKw0KPiA+ICsJLyogVHJpZ2dlciB0 aGUgTFVUIG5vdy4gKi8NCj4gPiArCWZzcGlfd3JpdGVsKGYsIEZTUElfSVBDTURfVFJHLCBiYXNl ICsgRlNQSV9JUENNRCk7DQo+ID4gKw0KPiA+ICsJLyogV2FpdCBmb3IgdGhlIGludGVycnVwdC4g Ki8NCj4gPiArCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZmLT5jLCBtc2Vjc190 b19qaWZmaWVzKDEwMDApKSkNCj4gPiArCQllcnIgPSAtRVRJTUVET1VUOw0KPiA+ICsNCj4gPiAr CS8qIEludm9rZSBJUCBkYXRhIHJlYWQsIGlmIHJlcXVlc3QgaXMgb2YgZGF0YSByZWFkLiAqLw0K PiA+ICsJaWYgKCFlcnIgJiYgb3AtPmRhdGEubmJ5dGVzICYmIG9wLT5kYXRhLmRpciA9PSBTUElf TUVNX0RBVEFfSU4pDQo+ID4gKwkJbnhwX2ZzcGlfcmVhZF9yeGZpZm8oZiwgb3ApOw0KPiA+ICsN Cj4gPiArCXJldHVybiBlcnI7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbnhwX2Zz cGlfZXhlY19vcChzdHJ1Y3Qgc3BpX21lbSAqbWVtLCBjb25zdCBzdHJ1Y3QNCj4gPiArc3BpX21l bV9vcCAqb3ApIHsNCj4gPiArCXN0cnVjdCBueHBfZnNwaSAqZiA9IHNwaV9jb250cm9sbGVyX2dl dF9kZXZkYXRhKG1lbS0+c3BpLT5tYXN0ZXIpOw0KPiA+ICsJaW50IGVyciA9IDA7DQo+ID4gKw0K PiA+ICsJbXV0ZXhfbG9jaygmZi0+bG9jayk7DQo+ID4gKw0KPiA+ICsJLyogV2FpdCBmb3IgY29u dHJvbGxlciBiZWluZyByZWFkeS4gKi8NCj4gPiArCWVyciA9IGZzcGlfcmVhZGxfcG9sbF90b3V0 KGYsIGYtPmlvYmFzZSArIEZTUElfU1RTMCwNCj4gPiArCQkJCSAgIEZTUElfU1RTMF9BUkJfSURM RSwgMSwgUE9MTF9UT1VULCB0cnVlKTsNCj4gPiArCVdBUk5fT04oZXJyKTsNCj4gPiArDQo+ID4g KwlueHBfZnNwaV9zZWxlY3RfbWVtKGYsIG1lbS0+c3BpKTsNCj4gPiArDQo+ID4gKwlueHBfZnNw aV9wcmVwYXJlX2x1dChmLCBvcCk7DQo+ID4gKwkvKg0KPiA+ICsJICogSWYgd2UgaGF2ZSBsYXJn ZSBjaHVua3Mgb2YgZGF0YSwgd2UgcmVhZCB0aGVtIHRocm91Z2ggdGhlIEFIQiBidXMNCj4gPiAr CSAqIGJ5IGFjY2Vzc2luZyB0aGUgbWFwcGVkIG1lbW9yeS4gSW4gYWxsIG90aGVyIGNhc2VzIHdl IHVzZQ0KPiA+ICsJICogSVAgY29tbWFuZHMgdG8gYWNjZXNzIHRoZSBmbGFzaC4NCj4gPiArCSAq Lw0KPiA+ICsJaWYgKG9wLT5kYXRhLm5ieXRlcyA+IChmLT5kZXZ0eXBlX2RhdGEtPnJ4ZmlmbyAt IDQpICYmDQo+ID4gKwkgICAgb3AtPmRhdGEuZGlyID09IFNQSV9NRU1fREFUQV9JTikgew0KPiA+ ICsJCW54cF9mc3BpX3JlYWRfYWhiKGYsIG9wKTsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJaWYg KG9wLT5kYXRhLm5ieXRlcyAmJiBvcC0+ZGF0YS5kaXIgPT0gU1BJX01FTV9EQVRBX09VVCkNCj4g PiArCQkJbnhwX2ZzcGlfZmlsbF90eGZpZm8oZiwgb3ApOw0KPiA+ICsNCj4gPiArCQllcnIgPSBu eHBfZnNwaV9kb19vcChmLCBvcCk7DQo+ID4gKw0KPiA+ICsJCS8qIEludmFsaWRhdGUgdGhlIGRh dGEgaW4gdGhlIEFIQiBidWZmZXIuICovDQo+ID4gKwkJaWYgKG9wLT5kYXRhLm5ieXRlcyAmJiBv cC0+ZGF0YS5kaXIgPT0gU1BJX01FTV9EQVRBX09VVCkNCj4gPiArCQkJbnhwX2ZzcGlfaW52YWxp ZChmKTsNCj4gDQo+IEUuZy4gaW4gY2FzZSBvZiBhbiBlcmFzZSBvcGVyYXRpb24gb3IgYSBOQU5E IGxvYWQgcGFnZSBvcGVyYXRpb24sIHRoZQ0KPiBpbnZhbGlkYXRpb24gaXMgbm90IHRyaWdnZXJl ZCwgYnV0IGZsYXNoL2J1ZmZlciBjb250ZW50cyBoYXZlIGNoYW5nZWQuDQo+IFNvIEknbSBub3Qg c3VyZSBpZiB0aGlzIGlzIGVub3VnaC4uLg0KT2ssIHdvdWxkIGNoYW5nZSB0aGlzIGFuZCBoYXZl IGludmFsaWRhdGUgZm9yIGFsbCBvcGVyYXRpb25zLg0KDQo+IA0KPiA+ICsJfQ0KPiA+ICsNCj4g PiArCW11dGV4X3VubG9jaygmZi0+bG9jayk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGVycjsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBueHBfZnNwaV9hZGp1c3Rfb3Bfc2l6ZShzdHJ1 Y3Qgc3BpX21lbSAqbWVtLCBzdHJ1Y3QNCj4gPiArc3BpX21lbV9vcCAqb3ApIHsNCj4gPiArCXN0 cnVjdCBueHBfZnNwaSAqZiA9IHNwaV9jb250cm9sbGVyX2dldF9kZXZkYXRhKG1lbS0+c3BpLT5t YXN0ZXIpOw0KPiA+ICsNCj4gPiArCWlmIChvcC0+ZGF0YS5kaXIgPT0gU1BJX01FTV9EQVRBX09V VCkgew0KPiA+ICsJCWlmIChvcC0+ZGF0YS5uYnl0ZXMgPiBmLT5kZXZ0eXBlX2RhdGEtPnR4Zmlm bykNCj4gPiArCQkJb3AtPmRhdGEubmJ5dGVzID0gZi0+ZGV2dHlwZV9kYXRhLT50eGZpZm87DQo+ ID4gKwl9IGVsc2Ugew0KPiA+ICsJCWlmIChvcC0+ZGF0YS5uYnl0ZXMgPiBmLT5kZXZ0eXBlX2Rh dGEtPmFoYl9idWZfc2l6ZSkNCj4gPiArCQkJb3AtPmRhdGEubmJ5dGVzID0gZi0+ZGV2dHlwZV9k YXRhLT5haGJfYnVmX3NpemU7DQo+ID4gKwkJZWxzZSBpZiAob3AtPmRhdGEubmJ5dGVzID4gKGYt PmRldnR5cGVfZGF0YS0+cnhmaWZvIC0gNCkpDQo+ID4gKwkJCW9wLT5kYXRhLm5ieXRlcyA9IEFM SUdOX0RPV04ob3AtPmRhdGEubmJ5dGVzLCA4KTsNCj4gDQo+IFlvdSBhcmUgdXNpbmcgdGhlIHNh bWUgYWxpZ25tZW50cyBhcyBpbiB0aGUgUVNQSSBkcml2ZXIuIFNvIEFIQiByZWFkcyB3aWxsDQo+ IGhhcHBlbiBpbiBwb3J0aW9ucyBvZiBhaGJfYnVmX3NpemUsIGJ1dCB5b3UgZG9udCcgc3RpY2sg dG8gdGhpcyB3aGVuIHlvdSBtYXAgdGhlDQo+IG1lbW9yeS4gU2VlIGFib3ZlLg0KDQpSZWFzb24g bWVudGlvbmVkIGFib3ZlLg0KDQotLQ0KUmVnYXJkcw0KWW9nZXNoIEdhdXINCg0KPiANCj4gUmVn YXJkcywNCj4gRnJpZWRlcg0KWy4uLl0NCg==