Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp868422imu; Wed, 28 Nov 2018 00:29:17 -0800 (PST) X-Google-Smtp-Source: AJdET5dGzqkLKD3Qdz7L3D730ee9U+i3sia6m15t5j+nwbrfogw2plLeReoYTIJEpyjjyjUxrtkR X-Received: by 2002:aa7:87ce:: with SMTP id i14mr36306061pfo.20.1543393756995; Wed, 28 Nov 2018 00:29:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543393756; cv=none; d=google.com; s=arc-20160816; b=Ha3Pn8l5WYQp3cPsegOrO1Q5HPWVVF6DNs0ORxJlN52RJA6vdtgnBJs7P9VwUxYAzY PQC/Ee1YAL32dWsEphsGcm/FjdaVptwz023Sqp4a5ULSc5yl6goG1LCYY+w9RUJ97r0L +E6y5tV+KaU/A99AvSI2akrTYAcdILo/l56w/lH8GLAPvV36zLYXIx+KAIQADobZCHnt pQij9yqDXGISvwxbZnhSunIF3Z6D90MyVDH7WVw1ol+DokB5Yw6SUHZQyLNAKV5AAWmF QK81r49vy/k4xJeLK6QSHVyBZ/LKte8FFmZz0vDARWETfBBwyAFVUjPpIU88a4liufeJ nBAg== 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 :content-id:content-language:accept-language:in-reply-to:references :message-id:date:thread-index:thread-topic:subject:cc:to:from; bh=NZYyoTtuZmmWx8T2NspTgxwPpSCkp/alh2Tj97FMtUw=; b=hYbHtBmG0/6tSdOWRkPBOodMx/ZsPhLrrMIT7K1pbnryE/+X5WRCeaKDX8pA/6il6E ltNg9P17zGCv9TypM+PlKSpQo6vB6sndBWQZAQiSJsGI392/PrzxZLCSS5dGXDYLEUIy Lui7MnksoivM+VWOrvRjKIAp1gJ8R1oip0zguS5Ne0lkvPRpO46STsr6R2+Ik7exeN3E htFEgEPyoktwtUStOwgg2Ge5lZFw64q2NTUk/vHGVVCs+K8iXE5WAILe0Ta7o0QnnMPI y0ocCP71361odbjJOSVInGLZv+3QvFD3wzs1NyneCrUjvpL4qpQpIH0W7m9VXJlz2J4l rPZA== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 144si6217524pga.322.2018.11.28.00.29.01; Wed, 28 Nov 2018 00:29:16 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727746AbeK1T3M (ORCPT + 99 others); Wed, 28 Nov 2018 14:29:12 -0500 Received: from skedge04.snt-world.com ([91.208.41.69]:36906 "EHLO skedge04.snt-world.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727268AbeK1T3L (ORCPT ); Wed, 28 Nov 2018 14:29:11 -0500 Received: from sntmail14r.snt-is.com (unknown [10.203.32.184]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by skedge04.snt-world.com (Postfix) with ESMTPS id A73F167A7DD; Wed, 28 Nov 2018 09:28:11 +0100 (CET) Received: from sntmail12r.snt-is.com (10.203.32.182) by sntmail14r.snt-is.com (10.203.32.184) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1466.3; Wed, 28 Nov 2018 09:28:11 +0100 Received: from sntmail12r.snt-is.com ([fe80::e551:8750:7bba:3305]) by sntmail12r.snt-is.com ([fe80::e551:8750:7bba:3305%5]) with mapi id 15.01.1466.003; Wed, 28 Nov 2018 09:28:11 +0100 From: Schrempf Frieder To: "linux-mtd@lists.infradead.org" , "boris.brezillon@bootlin.com" , "linux-spi@vger.kernel.org" , Marek Vasut , Mark Brown , Han Xu CC: "dwmw2@infradead.org" , "computersforpeace@gmail.com" , "richard@nod.at" , "miquel.raynal@bootlin.com" , "david.wolfe@nxp.com" , "fabio.estevam@nxp.com" , "prabhakar.kushwaha@nxp.com" , "yogeshnarayan.gaur@nxp.com" , "shawnguo@kernel.org" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH v6 3/9] spi: Add a driver for the Freescale/NXP QuadSPI controller Thread-Topic: [PATCH v6 3/9] spi: Add a driver for the Freescale/NXP QuadSPI controller Thread-Index: AQHUhjte86vILtO4B0icsbZQtceaAqVky10A Date: Wed, 28 Nov 2018 08:28:10 +0000 Message-ID: <3981845c-327a-bb14-2908-47dd443971bf@kontron.de> References: <1543314174-28580-1-git-send-email-frieder.schrempf@kontron.de> <1543314174-28580-4-git-send-email-frieder.schrempf@kontron.de> In-Reply-To: <1543314174-28580-4-git-send-email-frieder.schrempf@kontron.de> Accept-Language: de-DE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [172.25.9.43] x-c2processedorg: 51b406b7-48a2-4d03-b652-521f56ac89f3 Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-SnT-MailScanner-Information: Please contact the ISP for more information X-SnT-MailScanner-ID: A73F167A7DD.A32D9 X-SnT-MailScanner: Found to be clean X-SnT-MailScanner-SpamCheck: X-SnT-MailScanner-From: frieder.schrempf@kontron.de X-SnT-MailScanner-To: boris.brezillon@bootlin.com, broonie@kernel.org, computersforpeace@gmail.com, david.wolfe@nxp.com, dwmw2@infradead.org, fabio.estevam@nxp.com, han.xu@nxp.com, linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org, linux-spi@vger.kernel.org, marek.vasut@gmail.com, miquel.raynal@bootlin.com, prabhakar.kushwaha@nxp.com, richard@nod.at, shawnguo@kernel.org, yogeshnarayan.gaur@nxp.com X-Spam-Status: No Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gMjcuMTEuMTggMTE6MjQsIFNjaHJlbXBmIEZyaWVkZXIgd3JvdGU6DQo+IFRoaXMgZHJpdmVy IGlzIGRlcml2ZWQgZnJvbSB0aGUgU1BJIE5PUiBkcml2ZXIgYXQNCj4gbXRkL3NwaS1ub3IvZnNs LXF1YWRzcGkuYy4gSXQgdXNlcyB0aGUgbmV3IFNQSSBtZW1vcnkgaW50ZXJmYWNlDQo+IG9mIHRo ZSBTUEkgZnJhbWV3b3JrIHRvIGlzc3VlIGZsYXNoIG1lbW9yeSBvcGVyYXRpb25zIHRvIHVwIHRv DQo+IGZvdXIgY29ubmVjdGVkIGZsYXNoIGNoaXBzICgyIGJ1c2VzIHdpdGggMiBDUyBlYWNoKS4N Cj4gDQo+IFRoZSBjb250cm9sbGVyIGRvZXMgbm90IHN1cHBvcnQgZ2VuZXJpYyBTUEkgbWVzc2Fn ZXMuDQo+IA0KPiBUaGlzIHBhdGNoIGFsc28gZGlzYWJsZXMgdGhlIGJ1aWxkIG9mIHRoZSAib2xk IiBkcml2ZXIgYW5kIHJldXNlcw0KPiBpdHMgS2NvbmZpZyBvcHRpb24gQ09ORklHX1NQSV9GU0xf UVVBRFNQSSB0byByZXBsYWNlIGl0Lg0KPiANCj4gU2lnbmVkLW9mZi1ieTogRnJpZWRlciBTY2hy ZW1wZiA8ZnJpZWRlci5zY2hyZW1wZkBrb250cm9uLmRlPg0KPiAtLS0NCj4gICBkcml2ZXJzL210 ZC9zcGktbm9yL0tjb25maWcgIHwgICA5IC0NCj4gICBkcml2ZXJzL210ZC9zcGktbm9yL01ha2Vm aWxlIHwgICAxIC0NCj4gICBkcml2ZXJzL3NwaS9LY29uZmlnICAgICAgICAgIHwgIDExICsNCj4g ICBkcml2ZXJzL3NwaS9NYWtlZmlsZSAgICAgICAgIHwgICAxICsNCj4gICBkcml2ZXJzL3NwaS9z cGktZnNsLXFzcGkuYyAgIHwgOTY3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrDQo+ICAgNSBmaWxlcyBjaGFuZ2VkLCA5NzkgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25z KC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvc3BpLW5vci9LY29uZmlnIGIvZHJp dmVycy9tdGQvc3BpLW5vci9LY29uZmlnDQo+IGluZGV4IDZjYzljOTIuLmQxY2EzMDcgMTAwNjQ0 DQo+IC0tLSBhL2RyaXZlcnMvbXRkL3NwaS1ub3IvS2NvbmZpZw0KPiArKysgYi9kcml2ZXJzL210 ZC9zcGktbm9yL0tjb25maWcNCj4gQEAgLTU5LDE1ICs1OSw2IEBAIGNvbmZpZyBTUElfQ0FERU5D RV9RVUFEU1BJDQo+ICAgCSAgZGV2aWNlIHdpdGggYSBDYWRlbmNlIFFTUEkgY29udHJvbGxlciBh bmQgd2FudCB0byBhY2Nlc3MgdGhlDQo+ICAgCSAgRmxhc2ggYXMgYW4gTVREIGRldmljZS4NCj4g ICANCj4gLWNvbmZpZyBTUElfRlNMX1FVQURTUEkNCj4gLQl0cmlzdGF0ZSAiRnJlZXNjYWxlIFF1 YWQgU1BJIGNvbnRyb2xsZXIiDQo+IC0JZGVwZW5kcyBvbiBBUkNIX01YQyB8fCBTT0NfTFMxMDIx QSB8fCBBUkNIX0xBWUVSU0NBUEUgfHwgQ09NUElMRV9URVNUDQo+IC0JZGVwZW5kcyBvbiBIQVNf SU9NRU0NCj4gLQloZWxwDQo+IC0JICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFF1YWQg U1BJIGNvbnRyb2xsZXIgaW4gbWFzdGVyIG1vZGUuDQo+IC0JICBUaGlzIGNvbnRyb2xsZXIgZG9l cyBub3Qgc3VwcG9ydCBnZW5lcmljIFNQSS4gSXQgb25seSBzdXBwb3J0cw0KPiAtCSAgU1BJIE5P Ui4NCj4gLQ0KPiAgIGNvbmZpZyBTUElfSElTSV9TRkMNCj4gICAJdHJpc3RhdGUgIkhpc2lsaWNv biBTUEktTk9SIEZsYXNoIENvbnRyb2xsZXIoU0ZDKSINCj4gICAJZGVwZW5kcyBvbiBBUkNIX0hJ U0kgfHwgQ09NUElMRV9URVNUDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9zcGktbm9yL01h a2VmaWxlIGIvZHJpdmVycy9tdGQvc3BpLW5vci9NYWtlZmlsZQ0KPiBpbmRleCBmNGM2MWQyLi4z ZjE2MGMyZTMgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvbXRkL3NwaS1ub3IvTWFrZWZpbGUNCj4g KysrIGIvZHJpdmVycy9tdGQvc3BpLW5vci9NYWtlZmlsZQ0KPiBAQCAtMyw3ICszLDYgQEAgb2Jq LSQoQ09ORklHX01URF9TUElfTk9SKQkrPSBzcGktbm9yLm8NCj4gICBvYmotJChDT05GSUdfU1BJ X0FTUEVFRF9TTUMpCSs9IGFzcGVlZC1zbWMubw0KPiAgIG9iai0kKENPTkZJR19TUElfQVRNRUxf UVVBRFNQSSkJKz0gYXRtZWwtcXVhZHNwaS5vDQo+ICAgb2JqLSQoQ09ORklHX1NQSV9DQURFTkNF X1FVQURTUEkpCSs9IGNhZGVuY2UtcXVhZHNwaS5vDQo+IC1vYmotJChDT05GSUdfU1BJX0ZTTF9R VUFEU1BJKQkrPSBmc2wtcXVhZHNwaS5vDQo+ICAgb2JqLSQoQ09ORklHX1NQSV9ISVNJX1NGQykJ Kz0gaGlzaS1zZmMubw0KPiAgIG9iai0kKENPTkZJR19NVERfTVQ4MXh4X05PUikgICAgKz0gbXRr LXF1YWRzcGkubw0KPiAgIG9iai0kKENPTkZJR19TUElfTlhQX1NQSUZJKQkrPSBueHAtc3BpZmku bw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvS2NvbmZpZyBiL2RyaXZlcnMvc3BpL0tjb25m aWcNCj4gaW5kZXggN2QzYTVjOS4uOGM4NDE4NiAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9zcGkv S2NvbmZpZw0KPiArKysgYi9kcml2ZXJzL3NwaS9LY29uZmlnDQo+IEBAIC0yNTksNiArMjU5LDE3 IEBAIGNvbmZpZyBTUElfRlNMX0xQU1BJDQo+ICAgCWhlbHANCj4gICAJICBUaGlzIGVuYWJsZXMg RnJlZXNjYWxlIGkuTVggTFBTUEkgY29udHJvbGxlcnMgaW4gbWFzdGVyIG1vZGUuDQo+ICAgDQo+ ICtjb25maWcgU1BJX0ZTTF9RVUFEU1BJDQo+ICsJdHJpc3RhdGUgIkZyZWVzY2FsZSBRU1BJIGNv bnRyb2xsZXIiDQo+ICsJZGVwZW5kcyBvbiBBUkNIX01YQyB8fCBTT0NfTFMxMDIxQSB8fCBBUkNI X0xBWUVSU0NBUEUgfHwgQ09NUElMRV9URVNUDQo+ICsJZGVwZW5kcyBvbiBIQVNfSU9NRU0NCj4g KwloZWxwDQo+ICsJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFF1YWQgU1BJIGNvbnRy b2xsZXIgaW4gbWFzdGVyIG1vZGUuDQo+ICsJICBVcCB0byBmb3VyIGZsYXNoIGNoaXBzIGNhbiBi ZSBjb25uZWN0ZWQgb24gdHdvIGJ1c2VzIHdpdGggdHdvDQo+ICsJICBjaGlwc2VsZWN0cyBlYWNo Lg0KPiArCSAgVGhpcyBjb250cm9sbGVyIGRvZXMgbm90IHN1cHBvcnQgZ2VuZXJpYyBTUEkgbWVz c2FnZXMuIEl0IG9ubHkNCj4gKwkgIHN1cHBvcnRzIHRoZSBoaWdoLWxldmVsIFNQSSBtZW1vcnkg aW50ZXJmYWNlLg0KPiArDQo+ICAgY29uZmlnIFNQSV9HUElPDQo+ICAgCXRyaXN0YXRlICJHUElP LWJhc2VkIGJpdGJhbmdpbmcgU1BJIE1hc3RlciINCj4gICAJZGVwZW5kcyBvbiBHUElPTElCIHx8 IENPTVBJTEVfVEVTVA0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvTWFrZWZpbGUgYi9kcml2 ZXJzL3NwaS9NYWtlZmlsZQ0KPiBpbmRleCAzNTc1MjA1Li41Mzc3ZTYxIDEwMDY0NA0KPiAtLS0g YS9kcml2ZXJzL3NwaS9NYWtlZmlsZQ0KPiArKysgYi9kcml2ZXJzL3NwaS9NYWtlZmlsZQ0KPiBA QCAtNDQsNiArNDQsNyBAQCBvYmotJChDT05GSUdfU1BJX0ZTTF9EU1BJKQkJKz0gc3BpLWZzbC1k c3BpLm8NCj4gICBvYmotJChDT05GSUdfU1BJX0ZTTF9MSUIpCQkrPSBzcGktZnNsLWxpYi5vDQo+ ICAgb2JqLSQoQ09ORklHX1NQSV9GU0xfRVNQSSkJCSs9IHNwaS1mc2wtZXNwaS5vDQo+ICAgb2Jq LSQoQ09ORklHX1NQSV9GU0xfTFBTUEkpCQkrPSBzcGktZnNsLWxwc3BpLm8NCj4gK29iai0kKENP TkZJR19TUElfRlNMX1FVQURTUEkpCQkrPSBzcGktZnNsLXFzcGkubw0KPiAgIG9iai0kKENPTkZJ R19TUElfRlNMX1NQSSkJCSs9IHNwaS1mc2wtc3BpLm8NCj4gICBvYmotJChDT05GSUdfU1BJX0dQ SU8pCQkJKz0gc3BpLWdwaW8ubw0KPiAgIG9iai0kKENPTkZJR19TUElfSU1HX1NQRkkpCQkrPSBz cGktaW1nLXNwZmkubw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLWZzbC1xc3BpLmMg Yi9kcml2ZXJzL3NwaS9zcGktZnNsLXFzcGkuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBp bmRleCAwMDAwMDAwLi5iMmQ0MjM3DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9z cGkvc3BpLWZzbC1xc3BpLmMNCj4gQEAgLTAsMCArMSw5NjcgQEANCj4gKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wKw0KPiArDQo+ICsvKg0KPiArICogRnJlZXNjYWxlIFF1YWRT UEkgZHJpdmVyLg0KPiArICoNCj4gKyAqIENvcHlyaWdodCAoQykgMjAxMyBGcmVlc2NhbGUgU2Vt aWNvbmR1Y3RvciwgSW5jLg0KPiArICogQ29weXJpZ2h0IChDKSAyMDE4IEJvb3RsaW4NCj4gKyAq IENvcHlyaWdodCAoQykgMjAxOCBleGNlZXQgZWxlY3Ryb25pY3MgR21iSA0KPiArICogQ29weXJp Z2h0IChDKSAyMDE4IEtvbnRyb24gRWxlY3Ryb25pY3MgR21iSA0KPiArICoNCj4gKyAqIFRyYW5z aXRpb24gdG8gU1BJIE1FTSBpbnRlcmZhY2U6DQo+ICsgKiBBdXRob3JzOg0KPiArICogICAgIEJv cmlzIEJyZXppbGxpb24gPGJvcmlzLmJyZXppbGxvbkBib290bGluLmNvbT4NCj4gKyAqICAgICBG cmllZGVyIFNjaHJlbXBmIDxmcmllZGVyLnNjaHJlbXBmQGtvbnRyb24uZGU+DQo+ICsgKiAgICAg WW9nZXNoIEdhdXIgPHlvZ2VzaG5hcmF5YW4uZ2F1ckBueHAuY29tPg0KPiArICogICAgIFN1cmVz aCBHdXB0YSA8c3VyZXNoLmd1cHRhQG54cC5jb20+DQo+ICsgKg0KPiArICogQmFzZWQgb24gdGhl IG9yaWdpbmFsIGZzbC1xdWFkc3BpLmMgc3BpLW5vciBkcml2ZXI6DQo+ICsgKiBBdXRob3I6IEZy ZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuDQo+ICsgKg0KPiArICovDQo+ICsNCj4gKyNpbmNs dWRlIDxsaW51eC9iaXRvcHMuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4NCj4gKyNpbmNs dWRlIDxsaW51eC9jb21wbGV0aW9uLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4NCj4g KyNpbmNsdWRlIDxsaW51eC9lcnIuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPg0KPiAr I2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+DQo+ ICsjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvamlmZmllcy5o Pg0KPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvb2Yu aD4NCj4gKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9w bGF0Zm9ybV9kZXZpY2UuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9wbV9xb3MuaD4NCj4gKyNpbmNs dWRlIDxsaW51eC9zaXplcy5oPg0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPg0K PiArI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGktbWVtLmg+DQo+ICsNCj4gKy8qDQo+ICsgKiBUaGUg ZHJpdmVyIG9ubHkgdXNlcyBvbmUgc2luZ2xlIExVVCBlbnRyeSwgdGhhdCBpcyB1cGRhdGVkIG9u DQo+ICsgKiBlYWNoIGNhbGwgb2YgZXhlY19vcCgpLiBJbmRleCAwIGlzIHByZXNldCBhdCBib290 IHdpdGggYSBiYXNpYw0KPiArICogcmVhZCBvcGVyYXRpb24sIHNvIGxldCdzIHVzZSB0aGUgbGFz dCBlbnRyeSAoMTUpLg0KPiArICovDQo+ICsjZGVmaW5lCVNFUUlEX0xVVAkJCTE1DQo+ICsNCj4g Ky8qIFJlZ2lzdGVycyB1c2VkIGJ5IHRoZSBkcml2ZXIgKi8NCj4gKyNkZWZpbmUgUVVBRFNQSV9N Q1IJCQkweDAwDQo+ICsjZGVmaW5lIFFVQURTUElfTUNSX1JFU0VSVkVEX01BU0sJR0VOTUFTSygx OSwgMTYpDQo+ICsjZGVmaW5lIFFVQURTUElfTUNSX01ESVNfTUFTSwkJQklUKDE0KQ0KPiArI2Rl ZmluZSBRVUFEU1BJX01DUl9DTFJfVFhGX01BU0sJQklUKDExKQ0KPiArI2RlZmluZSBRVUFEU1BJ X01DUl9DTFJfUlhGX01BU0sJQklUKDEwKQ0KPiArI2RlZmluZSBRVUFEU1BJX01DUl9ERFJfRU5f TUFTSwkJQklUKDcpDQo+ICsjZGVmaW5lIFFVQURTUElfTUNSX0VORF9DRkdfTUFTSwlHRU5NQVNL KDMsIDIpDQo+ICsjZGVmaW5lIFFVQURTUElfTUNSX1NXUlNUSERfTUFTSwlCSVQoMSkNCj4gKyNk ZWZpbmUgUVVBRFNQSV9NQ1JfU1dSU1RTRF9NQVNLCUJJVCgwKQ0KPiArDQo+ICsjZGVmaW5lIFFV QURTUElfSVBDUgkJCTB4MDgNCj4gKyNkZWZpbmUgUVVBRFNQSV9JUENSX1NFUUlEKHgpCQkoKHgp IDw8IDI0KQ0KPiArDQo+ICsjZGVmaW5lIFFVQURTUElfQlVGM0NSCQkJMHgxYw0KPiArI2RlZmlu ZSBRVUFEU1BJX0JVRjNDUl9BTExNU1RfTUFTSwlCSVQoMzEpDQo+ICsjZGVmaW5lIFFVQURTUElf QlVGM0NSX0FEQVRTWih4KQkoKHgpIDw8IDgpDQo+ICsjZGVmaW5lIFFVQURTUElfQlVGM0NSX0FE QVRTWl9NQVNLCUdFTk1BU0soMTUsIDgpDQo+ICsNCj4gKyNkZWZpbmUgUVVBRFNQSV9CRkdFTkNS CQkJMHgyMA0KPiArI2RlZmluZSBRVUFEU1BJX0JGR0VOQ1JfU0VRSUQoeCkJKCh4KSA8PCAxMikN Cj4gKw0KPiArI2RlZmluZSBRVUFEU1BJX0JVRjBJTkQJCQkweDMwDQo+ICsjZGVmaW5lIFFVQURT UElfQlVGMUlORAkJCTB4MzQNCj4gKyNkZWZpbmUgUVVBRFNQSV9CVUYySU5ECQkJMHgzOA0KPiAr I2RlZmluZSBRVUFEU1BJX1NGQVIJCQkweDEwMA0KPiArDQo+ICsjZGVmaW5lIFFVQURTUElfU01Q UgkJCTB4MTA4DQo+ICsjZGVmaW5lIFFVQURTUElfU01QUl9ERFJTTVBfTUFTSwlHRU5NQVNLKDE4 LCAxNikNCj4gKyNkZWZpbmUgUVVBRFNQSV9TTVBSX0ZTRExZX01BU0sJCUJJVCg2KQ0KPiArI2Rl ZmluZSBRVUFEU1BJX1NNUFJfRlNQSFNfTUFTSwkJQklUKDUpDQo+ICsjZGVmaW5lIFFVQURTUElf U01QUl9IU0VOQV9NQVNLCQlCSVQoMCkNCj4gKw0KPiArI2RlZmluZSBRVUFEU1BJX1JCQ1QJCQkw eDExMA0KPiArI2RlZmluZSBRVUFEU1BJX1JCQ1RfV01SS19NQVNLCQlHRU5NQVNLKDQsIDApDQo+ ICsjZGVmaW5lIFFVQURTUElfUkJDVF9SWEJSRF9VU0VJUFMJQklUKDgpDQo+ICsNCj4gKyNkZWZp bmUgUVVBRFNQSV9UQkRSCQkJMHgxNTQNCj4gKw0KPiArI2RlZmluZSBRVUFEU1BJX1NSCQkJMHgx NWMNCj4gKyNkZWZpbmUgUVVBRFNQSV9TUl9JUF9BQ0NfTUFTSwkJQklUKDEpDQo+ICsjZGVmaW5l IFFVQURTUElfU1JfQUhCX0FDQ19NQVNLCQlCSVQoMikNCj4gKw0KPiArI2RlZmluZSBRVUFEU1BJ X0ZSCQkJMHgxNjANCj4gKyNkZWZpbmUgUVVBRFNQSV9GUl9URkZfTUFTSwkJQklUKDApDQo+ICsN Cj4gKyNkZWZpbmUgUVVBRFNQSV9TUFRSQ0xSCQkJMHgxNmMNCj4gKyNkZWZpbmUgUVVBRFNQSV9T UFRSQ0xSX0lQUFRSQwkJQklUKDgpDQo+ICsjZGVmaW5lIFFVQURTUElfU1BUUkNMUl9CRlBUUkMJ CUJJVCgwKQ0KPiArDQo+ICsjZGVmaW5lIFFVQURTUElfU0ZBMUFECQkJMHgxODANCj4gKyNkZWZp bmUgUVVBRFNQSV9TRkEyQUQJCQkweDE4NA0KPiArI2RlZmluZSBRVUFEU1BJX1NGQjFBRAkJCTB4 MTg4DQo+ICsjZGVmaW5lIFFVQURTUElfU0ZCMkFECQkJMHgxOGMNCj4gKyNkZWZpbmUgUVVBRFNQ SV9SQkRSKHgpCQkJKDB4MjAwICsgKCh4KSAqIDQpKQ0KPiArDQo+ICsjZGVmaW5lIFFVQURTUElf TFVUS0VZCQkJMHgzMDANCj4gKyNkZWZpbmUgUVVBRFNQSV9MVVRLRVlfVkFMVUUJCTB4NUFGMDVB RjANCj4gKw0KPiArI2RlZmluZSBRVUFEU1BJX0xDS0NSCQkJMHgzMDQNCj4gKyNkZWZpbmUgUVVB RFNQSV9MQ0tFUl9MT0NLCQlCSVQoMCkNCj4gKyNkZWZpbmUgUVVBRFNQSV9MQ0tFUl9VTkxPQ0sJ CUJJVCgxKQ0KPiArDQo+ICsjZGVmaW5lIFFVQURTUElfUlNFUgkJCTB4MTY0DQo+ICsjZGVmaW5l IFFVQURTUElfUlNFUl9URklFCQlCSVQoMCkNCj4gKw0KPiArI2RlZmluZSBRVUFEU1BJX0xVVF9C QVNFCQkweDMxMA0KPiArI2RlZmluZSBRVUFEU1BJX0xVVF9PRkZTRVQJCShTRVFJRF9MVVQgKiA0 ICogNCkNCj4gKyNkZWZpbmUgUVVBRFNQSV9MVVRfUkVHKGlkeCkgXA0KPiArCShRVUFEU1BJX0xV VF9CQVNFICsgUVVBRFNQSV9MVVRfT0ZGU0VUICsgKGlkeCkgKiA0KQ0KPiArDQo+ICsvKiBJbnN0 cnVjdGlvbiBzZXQgZm9yIHRoZSBMVVQgcmVnaXN0ZXIgKi8NCj4gKyNkZWZpbmUgTFVUX1NUT1AJ CTANCj4gKyNkZWZpbmUgTFVUX0NNRAkJCTENCj4gKyNkZWZpbmUgTFVUX0FERFIJCTINCj4gKyNk ZWZpbmUgTFVUX0RVTU1ZCQkzDQo+ICsjZGVmaW5lIExVVF9NT0RFCQk0DQo+ICsjZGVmaW5lIExV VF9NT0RFMgkJNQ0KPiArI2RlZmluZSBMVVRfTU9ERTQJCTYNCj4gKyNkZWZpbmUgTFVUX0ZTTF9S RUFECQk3DQo+ICsjZGVmaW5lIExVVF9GU0xfV1JJVEUJCTgNCj4gKyNkZWZpbmUgTFVUX0pNUF9P Tl9DUwkJOQ0KPiArI2RlZmluZSBMVVRfQUREUl9ERFIJCTEwDQo+ICsjZGVmaW5lIExVVF9NT0RF X0REUgkJMTENCj4gKyNkZWZpbmUgTFVUX01PREUyX0REUgkJMTINCj4gKyNkZWZpbmUgTFVUX01P REU0X0REUgkJMTMNCj4gKyNkZWZpbmUgTFVUX0ZTTF9SRUFEX0REUgkxNA0KPiArI2RlZmluZSBM VVRfRlNMX1dSSVRFX0REUgkxNQ0KPiArI2RlZmluZSBMVVRfREFUQV9MRUFSTgkJMTYNCj4gKw0K PiArLyoNCj4gKyAqIFRoZSBQQUQgZGVmaW5pdGlvbnMgZm9yIExVVCByZWdpc3Rlci4NCj4gKyAq DQo+ICsgKiBUaGUgcGFkIHN0YW5kcyBmb3IgdGhlIG51bWJlciBvZiBJTyBsaW5lcyBbMDozXS4N Cj4gKyAqIEZvciBleGFtcGxlLCB0aGUgcXVhZCByZWFkIG5lZWRzIGZvdXIgSU8gbGluZXMsDQo+ ICsgKiBzbyB5b3Ugc2hvdWxkIHVzZSBMVVRfUEFEKDQpLg0KPiArICovDQo+ICsjZGVmaW5lIExV VF9QQUQoeCkgKGZscyh4KSAtIDEpDQo+ICsNCj4gKy8qDQo+ICsgKiBNYWNybyBmb3IgY29uc3Ry dWN0aW5nIHRoZSBMVVQgZW50cmllcyB3aXRoIHRoZSBmb2xsb3dpbmcNCj4gKyAqIHJlZ2lzdGVy IGxheW91dDoNCj4gKyAqDQo+ICsgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQo+ICsgKiAgfCBJTlNUUjEgfCBQQUQxIHwgT1BSTkQxIHwgSU5T VFIwIHwgUEFEMCB8IE9QUk5EMCB8DQo+ICsgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ICsgKi8NCj4gKyNkZWZpbmUgTFVUX0RFRihpZHgs IGlucywgcGFkLCBvcHIpCQkJCQlcDQo+ICsJKCgoKGlucykgPDwgMTApIHwgKChwYWQpIDw8IDgp IHwgKG9wcikpIDw8ICgoKGlkeCkgJSAyKSAqIDE2KSkNCj4gKw0KPiArLyogQ29udHJvbGxlciBu ZWVkcyBkcml2ZXIgdG8gc3dhcCBlbmRpYW5uZXNzICovDQo+ICsjZGVmaW5lIFFVQURTUElfUVVJ UktfU1dBUF9FTkRJQU4JQklUKDApDQo+ICsNCj4gKy8qIENvbnRyb2xsZXIgbmVlZHMgNHggaW50 ZXJuYWwgY2xvY2sgKi8NCj4gKyNkZWZpbmUgUVVBRFNQSV9RVUlSS180WF9JTlRfQ0xLCUJJVCgx KQ0KPiArDQo+ICsvKg0KPiArICogVEtUMjUzODkwLCB0aGUgY29udHJvbGxlciBuZWVkcyB0aGUg ZHJpdmVyIHRvIGZpbGwgdGhlIHR4ZmlmbyB3aXRoDQo+ICsgKiAxNiBieXRlcyBhdCBsZWFzdCB0 byB0cmlnZ2VyIGEgZGF0YSB0cmFuc2ZlciwgZXZlbiB0aG91Z2ggdGhlIGV4dHJhDQo+ICsgKiBk YXRhIHdvbid0IGJlIHRyYW5zZmVycmVkLg0KPiArICovDQo+ICsjZGVmaW5lIFFVQURTUElfUVVJ UktfVEtUMjUzODkwCQlCSVQoMikNCj4gKw0KPiArLyogVEtUMjQ1NjE4LCB0aGUgY29udHJvbGxl ciBjYW5ub3Qgd2FrZSB1cCBmcm9tIHdhaXQgbW9kZSAqLw0KPiArI2RlZmluZSBRVUFEU1BJX1FV SVJLX1RLVDI0NTYxOAkJQklUKDMpDQo+ICsNCj4gKy8qDQo+ICsgKiBDb250cm9sbGVyIGFkZHMg UVNQSV9BTUJBX0JBU0UgKGJhc2UgYWRkcmVzcyBvZiB0aGUgbWFwcGVkIG1lbW9yeSkNCj4gKyAq IGludGVybmFsbHkuIE5vIG5lZWQgdG8gYWRkIGl0IHdoZW4gc2V0dGluZyBTRlhYQUQgYW5kIFNG QVIgcmVnaXN0ZXJzDQo+ICsgKi8NCj4gKyNkZWZpbmUgUVVBRFNQSV9RVUlSS19CQVNFX0lOVEVS TkFMCUJJVCg0KQ0KPiArDQo+ICtzdHJ1Y3QgZnNsX3FzcGlfZGV2dHlwZV9kYXRhIHsNCj4gKwl1 bnNpZ25lZCBpbnQgcnhmaWZvOw0KPiArCXVuc2lnbmVkIGludCB0eGZpZm87DQo+ICsJdW5zaWdu ZWQgaW50IGFoYl9idWZfc2l6ZTsNCj4gKwl1bnNpZ25lZCBpbnQgcXVpcmtzOw0KPiArCWJvb2wg bGl0dGxlX2VuZGlhbjsNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnNsX3Fz cGlfZGV2dHlwZV9kYXRhIHZ5YnJpZF9kYXRhID0gew0KPiArCS5yeGZpZm8gPSBTWl8xMjgsDQo+ ICsJLnR4ZmlmbyA9IFNaXzY0LA0KPiArCS5haGJfYnVmX3NpemUgPSBTWl8xSywNCj4gKwkucXVp cmtzID0gUVVBRFNQSV9RVUlSS19TV0FQX0VORElBTiwNCj4gKwkubGl0dGxlX2VuZGlhbiA9IHRy dWUsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZzbF9xc3BpX2RldnR5cGVf ZGF0YSBpbXg2c3hfZGF0YSA9IHsNCj4gKwkucnhmaWZvID0gU1pfMTI4LA0KPiArCS50eGZpZm8g PSBTWl81MTIsDQo+ICsJLmFoYl9idWZfc2l6ZSA9IFNaXzFLLA0KPiArCS5xdWlya3MgPSBRVUFE U1BJX1FVSVJLXzRYX0lOVF9DTEsgfCBRVUFEU1BJX1FVSVJLX1RLVDI0NTYxOCwNCj4gKwkubGl0 dGxlX2VuZGlhbiA9IHRydWUsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZz bF9xc3BpX2RldnR5cGVfZGF0YSBpbXg3ZF9kYXRhID0gew0KPiArCS5yeGZpZm8gPSBTWl81MTIs DQo+ICsJLnR4ZmlmbyA9IFNaXzUxMiwNCj4gKwkuYWhiX2J1Zl9zaXplID0gU1pfMUssDQo+ICsJ LnF1aXJrcyA9IFFVQURTUElfUVVJUktfVEtUMjUzODkwIHwgUVVBRFNQSV9RVUlSS180WF9JTlRf Q0xLLA0KPiArCS5saXR0bGVfZW5kaWFuID0gdHJ1ZSwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZnNsX3FzcGlfZGV2dHlwZV9kYXRhIGlteDZ1bF9kYXRhID0gew0KPiArCS5y eGZpZm8gPSBTWl8xMjgsDQo+ICsJLnR4ZmlmbyA9IFNaXzUxMiwNCj4gKwkuYWhiX2J1Zl9zaXpl ID0gU1pfMUssDQo+ICsJLnF1aXJrcyA9IFFVQURTUElfUVVJUktfVEtUMjUzODkwIHwgUVVBRFNQ SV9RVUlSS180WF9JTlRfQ0xLLA0KPiArCS5saXR0bGVfZW5kaWFuID0gdHJ1ZSwNCj4gK307DQo+ ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnNsX3FzcGlfZGV2dHlwZV9kYXRhIGxzMTAyMWFf ZGF0YSA9IHsNCj4gKwkucnhmaWZvID0gU1pfMTI4LA0KPiArCS50eGZpZm8gPSBTWl82NCwNCj4g KwkuYWhiX2J1Zl9zaXplID0gU1pfMUssDQo+ICsJLnF1aXJrcyA9IDAsDQo+ICsJLmxpdHRsZV9l bmRpYW4gPSBmYWxzZSwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnNsX3Fz cGlfZGV2dHlwZV9kYXRhIGxzMjA4MGFfZGF0YSA9IHsNCj4gKwkucnhmaWZvID0gU1pfMTI4LA0K PiArCS50eGZpZm8gPSBTWl82NCwNCj4gKwkuYWhiX2J1Zl9zaXplID0gU1pfMUssDQo+ICsJLnF1 aXJrcyA9IFFVQURTUElfUVVJUktfVEtUMjUzODkwIHwgUVVBRFNQSV9RVUlSS19CQVNFX0lOVEVS TkFMLA0KPiArCS5saXR0bGVfZW5kaWFuID0gdHJ1ZSwNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBm c2xfcXNwaSB7DQo+ICsJdm9pZCBfX2lvbWVtICppb2Jhc2U7DQo+ICsJdm9pZCBfX2lvbWVtICph aGJfYWRkcjsNCj4gKwl1MzIgbWVtbWFwX3BoeTsNCj4gKwlzdHJ1Y3QgY2xrICpjbGssICpjbGtf ZW47DQo+ICsJc3RydWN0IGRldmljZSAqZGV2Ow0KPiArCXN0cnVjdCBjb21wbGV0aW9uIGM7DQo+ ICsJY29uc3Qgc3RydWN0IGZzbF9xc3BpX2RldnR5cGVfZGF0YSAqZGV2dHlwZV9kYXRhOw0KPiAr CXN0cnVjdCBtdXRleCBsb2NrOw0KPiArCXN0cnVjdCBwbV9xb3NfcmVxdWVzdCBwbV9xb3NfcmVx Ow0KPiArCWludCBzZWxlY3RlZDsNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgaW50IG5l ZWRzX3N3YXBfZW5kaWFuKHN0cnVjdCBmc2xfcXNwaSAqcSkNCj4gK3sNCj4gKwlyZXR1cm4gcS0+ ZGV2dHlwZV9kYXRhLT5xdWlya3MgJiBRVUFEU1BJX1FVSVJLX1NXQVBfRU5ESUFOOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgaW5saW5lIGludCBuZWVkc180eF9jbG9jayhzdHJ1Y3QgZnNsX3FzcGkg KnEpDQo+ICt7DQo+ICsJcmV0dXJuIHEtPmRldnR5cGVfZGF0YS0+cXVpcmtzICYgUVVBRFNQSV9R VUlSS180WF9JTlRfQ0xLOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIGludCBuZWVkc19m aWxsX3R4ZmlmbyhzdHJ1Y3QgZnNsX3FzcGkgKnEpDQo+ICt7DQo+ICsJcmV0dXJuIHEtPmRldnR5 cGVfZGF0YS0+cXVpcmtzICYgUVVBRFNQSV9RVUlSS19US1QyNTM4OTA7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbmxpbmUgaW50IG5lZWRzX3dha2V1cF93YWl0X21vZGUoc3RydWN0IGZzbF9xc3Bp ICpxKQ0KPiArew0KPiArCXJldHVybiBxLT5kZXZ0eXBlX2RhdGEtPnF1aXJrcyAmIFFVQURTUElf UVVJUktfVEtUMjQ1NjE4Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIGludCBuZWVkc19h bWJhX2Jhc2Vfb2Zmc2V0KHN0cnVjdCBmc2xfcXNwaSAqcSkNCj4gK3sNCj4gKwlyZXR1cm4gIShx LT5kZXZ0eXBlX2RhdGEtPnF1aXJrcyAmIFFVQURTUElfUVVJUktfQkFTRV9JTlRFUk5BTCk7DQo+ ICt9DQo+ICsNCj4gKy8qDQo+ICsgKiBBbiBJQyBidWcgbWFrZXMgaXQgbmVjZXNzYXJ5IHRvIHJl YXJyYW5nZSB0aGUgMzItYml0IGRhdGEuDQo+ICsgKiBMYXRlciBjaGlwcywgc3VjaCBhcyBJTVg2 U0xYLCBoYXZlIGZpeGVkIHRoaXMgYnVnLg0KPiArICovDQo+ICtzdGF0aWMgaW5saW5lIHUzMiBm c2xfcXNwaV9lbmRpYW5feGNoZyhzdHJ1Y3QgZnNsX3FzcGkgKnEsIHUzMiBhKQ0KPiArew0KPiAr CXJldHVybiBuZWVkc19zd2FwX2VuZGlhbihxKSA/IF9fc3dhYjMyKGEpIDogYTsNCj4gK30NCj4g Kw0KPiArLyoNCj4gKyAqIFIvVyBmdW5jdGlvbnMgZm9yIGJpZy0gb3IgbGl0dGxlLWVuZGlhbiBy ZWdpc3RlcnM6DQo+ICsgKiBUaGUgUVNQSSBjb250cm9sbGVyJ3MgZW5kaWFubmVzcyBpcyBpbmRl cGVuZGVudCBvZg0KPiArICogdGhlIENQVSBjb3JlJ3MgZW5kaWFubmVzcy4gU28gZmFyLCBhbHRo b3VnaCB0aGUgQ1BVDQo+ICsgKiBjb3JlIGlzIGxpdHRsZS1lbmRpYW4gdGhlIFFTUEkgY29udHJv bGxlciBjYW4gdXNlDQo+ICsgKiBiaWctZW5kaWFuIG9yIGxpdHRsZS1lbmRpYW4uDQo+ICsgKi8N Cj4gK3N0YXRpYyB2b2lkIHFzcGlfd3JpdGVsKHN0cnVjdCBmc2xfcXNwaSAqcSwgdTMyIHZhbCwg dm9pZCBfX2lvbWVtICphZGRyKQ0KPiArew0KPiArCWlmIChxLT5kZXZ0eXBlX2RhdGEtPmxpdHRs ZV9lbmRpYW4pDQo+ICsJCWlvd3JpdGUzMih2YWwsIGFkZHIpOw0KPiArCWVsc2UNCj4gKwkJaW93 cml0ZTMyYmUodmFsLCBhZGRyKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHUzMiBxc3BpX3JlYWRs KHN0cnVjdCBmc2xfcXNwaSAqcSwgdm9pZCBfX2lvbWVtICphZGRyKQ0KPiArew0KPiArCWlmIChx LT5kZXZ0eXBlX2RhdGEtPmxpdHRsZV9lbmRpYW4pDQo+ICsJCXJldHVybiBpb3JlYWQzMihhZGRy KTsNCj4gKw0KPiArCXJldHVybiBpb3JlYWQzMmJlKGFkZHIpOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgaXJxcmV0dXJuX3QgZnNsX3FzcGlfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lk KQ0KPiArew0KPiArCXN0cnVjdCBmc2xfcXNwaSAqcSA9IGRldl9pZDsNCj4gKwl1MzIgcmVnOw0K PiArDQo+ICsJLyogY2xlYXIgaW50ZXJydXB0ICovDQo+ICsJcmVnID0gcXNwaV9yZWFkbChxLCBx LT5pb2Jhc2UgKyBRVUFEU1BJX0ZSKTsNCj4gKwlxc3BpX3dyaXRlbChxLCByZWcsIHEtPmlvYmFz ZSArIFFVQURTUElfRlIpOw0KPiArDQo+ICsJaWYgKHJlZyAmIFFVQURTUElfRlJfVEZGX01BU0sp DQo+ICsJCWNvbXBsZXRlKCZxLT5jKTsNCj4gKw0KPiArCWRldl9kYmcocS0+ZGV2LCAiUVVBRFNQ SV9GUiA6IDB4JS44eDoweCUuOHhcbiIsIDAsIHJlZyk7DQo+ICsJcmV0dXJuIElSUV9IQU5ETEVE Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGZzbF9xc3BpX2NoZWNrX2J1c3dpZHRoKHN0cnVj dCBmc2xfcXNwaSAqcSwgdTggd2lkdGgpDQo+ICt7DQo+ICsJc3dpdGNoICh3aWR0aCkgew0KPiAr CWNhc2UgMToNCj4gKwljYXNlIDI6DQo+ICsJY2FzZSA0Og0KPiArCQlyZXR1cm4gMDsNCj4gKwl9 DQo+ICsNCj4gKwlyZXR1cm4gLUVOT1RTVVBQOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBm c2xfcXNwaV9zdXBwb3J0c19vcChzdHJ1Y3Qgc3BpX21lbSAqbWVtLA0KPiArCQkJCSBjb25zdCBz dHJ1Y3Qgc3BpX21lbV9vcCAqb3ApDQo+ICt7DQo+ICsJc3RydWN0IGZzbF9xc3BpICpxID0gc3Bp X2NvbnRyb2xsZXJfZ2V0X2RldmRhdGEobWVtLT5zcGktPm1hc3Rlcik7DQo+ICsJaW50IHJldDsN Cj4gKw0KPiArCXJldCA9IGZzbF9xc3BpX2NoZWNrX2J1c3dpZHRoKHEsIG9wLT5jbWQuYnVzd2lk dGgpOw0KPiArDQo+ICsJaWYgKG9wLT5hZGRyLm5ieXRlcykNCj4gKwkJcmV0IHw9IGZzbF9xc3Bp X2NoZWNrX2J1c3dpZHRoKHEsIG9wLT5hZGRyLmJ1c3dpZHRoKTsNCj4gKw0KPiArCWlmIChvcC0+ ZHVtbXkubmJ5dGVzKQ0KPiArCQlyZXQgfD0gZnNsX3FzcGlfY2hlY2tfYnVzd2lkdGgocSwgb3At PmR1bW15LmJ1c3dpZHRoKTsNCj4gKw0KPiArCWlmIChvcC0+ZGF0YS5uYnl0ZXMpDQo+ICsJCXJl dCB8PSBmc2xfcXNwaV9jaGVja19idXN3aWR0aChxLCBvcC0+ZGF0YS5idXN3aWR0aCk7DQo+ICsN Cj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gZmFsc2U7DQo+ICsNCj4gKwkvKg0KPiArCSAqIFRo ZSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIG5lZWRlZCBmb3IgdGhlIG9wLCBuZWVkcw0KPiArCSAq IHRvIGZpdCBpbnRvIGEgc2luZ2xlIExVVCBlbnRyeS4NCj4gKwkgKi8NCj4gKwlpZiAob3AtPmFk ZHIubmJ5dGVzICsNCj4gKwkgICAob3AtPmR1bW15Lm5ieXRlcyA/IDE6MCkgKw0KPiArCSAgIChv cC0+ZGF0YS5uYnl0ZXMgPyAxOjApID4gNikNCj4gKwkJcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsJ LyogTWF4IDY0IGR1bW15IGNsb2NrIGN5Y2xlcyBzdXBwb3J0ZWQgKi8NCj4gKwlpZiAob3AtPmR1 bW15Lm5ieXRlcyAmJg0KPiArCSAgICAob3AtPmR1bW15Lm5ieXRlcyAqIDggLyBvcC0+ZHVtbXku YnVzd2lkdGggPiA2NCkpDQo+ICsJCXJldHVybiBmYWxzZTsNCj4gKw0KPiArCS8qIE1heCBkYXRh IGxlbmd0aCwgY2hlY2sgY29udHJvbGxlciBsaW1pdHMgYW5kIGFsaWdubWVudCAqLw0KPiArCWlm IChvcC0+ZGF0YS5kaXIgPT0gU1BJX01FTV9EQVRBX0lOICYmDQo+ICsJICAgIChvcC0+ZGF0YS5u Ynl0ZXMgPiBxLT5kZXZ0eXBlX2RhdGEtPmFoYl9idWZfc2l6ZSB8fA0KPiArCSAgICAgKG9wLT5k YXRhLm5ieXRlcyA+IHEtPmRldnR5cGVfZGF0YS0+cnhmaWZvIC0gNCAmJg0KPiArCSAgICAgICFJ U19BTElHTkVEKG9wLT5kYXRhLm5ieXRlcywgOCkpKSkNCj4gKwkJcmV0dXJuIGZhbHNlOw0KPiAr DQo+ICsJaWYgKG9wLT5kYXRhLmRpciA9PSBTUElfTUVNX0RBVEFfT1VUICYmDQo+ICsJICAgIG9w LT5kYXRhLm5ieXRlcyA+IHEtPmRldnR5cGVfZGF0YS0+dHhmaWZvKQ0KPiArCQlyZXR1cm4gZmFs c2U7DQo+ICsNCj4gKwlyZXR1cm4gdHJ1ZTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgZnNs X3FzcGlfcHJlcGFyZV9sdXQoc3RydWN0IGZzbF9xc3BpICpxLA0KPiArCQkJCSBjb25zdCBzdHJ1 Y3Qgc3BpX21lbV9vcCAqb3ApDQo+ICt7DQo+ICsJdm9pZCBfX2lvbWVtICpiYXNlID0gcS0+aW9i YXNlOw0KPiArCXUzMiBsdXR2YWxbNF0gPSB7fTsNCj4gKwlpbnQgbHV0aWR4ID0gMSwgaTsNCj4g Kw0KPiArCWx1dHZhbFswXSB8PSBMVVRfREVGKDAsIExVVF9DTUQsIExVVF9QQUQob3AtPmNtZC5i dXN3aWR0aCksDQo+ICsJCQkgICAgIG9wLT5jbWQub3Bjb2RlKTsNCj4gKw0KPiArCS8qDQo+ICsJ ICogRm9yIHNvbWUgdW5rbm93biByZWFzb24sIHVzaW5nIExVVF9BRERSIGRvZXNuJ3Qgd29yayBp biBzb21lDQo+ICsJICogY2FzZXMgKGF0IGxlYXN0IHdpdGggb25seSBvbmUgYnl0ZSBsb25nIGFk ZHJlc3NlcyksIHNvDQo+ICsJICogbGV0J3MgdXNlIExVVF9NT0RFIHRvIHdyaXRlIHRoZSBhZGRy ZXNzIGJ5dGVzIG9uZSBieSBvbmUNCj4gKwkgKi8NCj4gKwlmb3IgKGkgPSAwOyBpIDwgb3AtPmFk ZHIubmJ5dGVzOyBpKyspIHsNCj4gKwkJdTggYWRkcmJ5dGUgPSBvcC0+YWRkci52YWwgPj4gKDgg KiAob3AtPmFkZHIubmJ5dGVzIC0gaSAtIDEpKTsNCj4gKw0KPiArCQlsdXR2YWxbbHV0aWR4IC8g Ml0gfD0gTFVUX0RFRihsdXRpZHgsIExVVF9NT0RFLA0KPiArCQkJCQkgICAgICBMVVRfUEFEKG9w LT5hZGRyLmJ1c3dpZHRoKSwNCj4gKwkJCQkJICAgICAgYWRkcmJ5dGUpOw0KPiArCQlsdXRpZHgr KzsNCj4gKwl9DQo+ICsNCj4gKwlpZiAob3AtPmR1bW15Lm5ieXRlcykgew0KPiArCQlsdXR2YWxb bHV0aWR4IC8gMl0gfD0gTFVUX0RFRihsdXRpZHgsIExVVF9EVU1NWSwNCj4gKwkJCQkJICAgICAg TFVUX1BBRChvcC0+ZHVtbXkuYnVzd2lkdGgpLA0KPiArCQkJCQkgICAgICBvcC0+ZHVtbXkubmJ5 dGVzICogOCAvDQo+ICsJCQkJCSAgICAgIG9wLT5kdW1teS5idXN3aWR0aCk7DQo+ICsJCWx1dGlk eCsrOw0KPiArCX0NCj4gKw0KPiArCWlmIChvcC0+ZGF0YS5uYnl0ZXMpIHsNCj4gKwkJbHV0dmFs W2x1dGlkeCAvIDJdIHw9IExVVF9ERUYobHV0aWR4LA0KPiArCQkJCQkgICAgICBvcC0+ZGF0YS5k aXIgPT0gU1BJX01FTV9EQVRBX0lOID8NCj4gKwkJCQkJICAgICAgTFVUX0ZTTF9SRUFEIDogTFVU X0ZTTF9XUklURSwNCj4gKwkJCQkJICAgICAgTFVUX1BBRChvcC0+ZGF0YS5idXN3aWR0aCksDQo+ ICsJCQkJCSAgICAgIDApOw0KPiArCQlsdXRpZHgrKzsNCj4gKwl9DQo+ICsNCj4gKwlsdXR2YWxb bHV0aWR4IC8gMl0gfD0gTFVUX0RFRihsdXRpZHgsIExVVF9TVE9QLCAwLCAwKTsNCj4gKw0KPiAr CS8qIHVubG9jayBMVVQgKi8NCj4gKwlxc3BpX3dyaXRlbChxLCBRVUFEU1BJX0xVVEtFWV9WQUxV RSwgcS0+aW9iYXNlICsgUVVBRFNQSV9MVVRLRVkpOw0KPiArCXFzcGlfd3JpdGVsKHEsIFFVQURT UElfTENLRVJfVU5MT0NLLCBxLT5pb2Jhc2UgKyBRVUFEU1BJX0xDS0NSKTsNCj4gKw0KPiArCS8q IGZpbGwgTFVUICovDQo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobHV0dmFsKTsgaSsr KQ0KPiArCQlxc3BpX3dyaXRlbChxLCBsdXR2YWxbaV0sIGJhc2UgKyBRVUFEU1BJX0xVVF9SRUco aSkpOw0KPiArDQo+ICsJLyogbG9jayBMVVQgKi8NCj4gKwlxc3BpX3dyaXRlbChxLCBRVUFEU1BJ X0xVVEtFWV9WQUxVRSwgcS0+aW9iYXNlICsgUVVBRFNQSV9MVVRLRVkpOw0KPiArCXFzcGlfd3Jp dGVsKHEsIFFVQURTUElfTENLRVJfTE9DSywgcS0+aW9iYXNlICsgUVVBRFNQSV9MQ0tDUik7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgZnNsX3FzcGlfY2xrX3ByZXBfZW5hYmxlKHN0cnVjdCBm c2xfcXNwaSAqcSkNCj4gK3sNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJcmV0ID0gY2xrX3ByZXBh cmVfZW5hYmxlKHEtPmNsa19lbik7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4g Kw0KPiArCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShxLT5jbGspOw0KPiArCWlmIChyZXQpIHsN Cj4gKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHEtPmNsa19lbik7DQo+ICsJCXJldHVybiByZXQ7 DQo+ICsJfQ0KPiArDQo+ICsJaWYgKG5lZWRzX3dha2V1cF93YWl0X21vZGUocSkpDQo+ICsJCXBt X3Fvc19hZGRfcmVxdWVzdCgmcS0+cG1fcW9zX3JlcSwgUE1fUU9TX0NQVV9ETUFfTEFURU5DWSwg MCk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgZnNsX3Fz cGlfY2xrX2Rpc2FibGVfdW5wcmVwKHN0cnVjdCBmc2xfcXNwaSAqcSkNCj4gK3sNCj4gKwlpZiAo bmVlZHNfd2FrZXVwX3dhaXRfbW9kZShxKSkNCj4gKwkJcG1fcW9zX3JlbW92ZV9yZXF1ZXN0KCZx LT5wbV9xb3NfcmVxKTsNCj4gKw0KPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShxLT5jbGspOw0K PiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShxLT5jbGtfZW4pOw0KPiArfQ0KPiArDQo+ICsvKg0K PiArICogSWYgd2UgaGF2ZSBjaGFuZ2VkIHRoZSBjb250ZW50IG9mIHRoZSBmbGFzaCBieSB3cml0 aW5nIG9yIGVyYXNpbmcsIG9yIGlmIHdlDQo+ICsgKiByZWFkIGZyb20gZmxhc2ggd2l0aCBhIGRp ZmZlcmVudCBvZmZzZXQgaW50byB0aGUgcGFnZSBidWZmZXIsIHdlIG5lZWQgdG8NCj4gKyAqIGlu dmFsaWRhdGUgdGhlIEFIQiBidWZmZXIuIElmIHdlIGRvIG5vdCBkbyBzbywgd2UgbWF5IHJlYWQg b3V0IHRoZSB3cm9uZw0KPiArICogZGF0YS4gVGhlIHNwZWMgdGVsbHMgdXMgcmVzZXQgdGhlIEFI QiBkb21haW4gYW5kIFNlcmlhbCBGbGFzaCBkb21haW4gYXQNCj4gKyAqIHRoZSBzYW1lIHRpbWUu DQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkIGZzbF9xc3BpX2ludmFsaWRhdGUoc3RydWN0IGZzbF9x c3BpICpxKQ0KPiArew0KPiArCXUzMiByZWc7DQo+ICsNCj4gKwlyZWcgPSBxc3BpX3JlYWRsKHEs IHEtPmlvYmFzZSArIFFVQURTUElfTUNSKTsNCj4gKwlyZWcgfD0gUVVBRFNQSV9NQ1JfU1dSU1RI RF9NQVNLIHwgUVVBRFNQSV9NQ1JfU1dSU1RTRF9NQVNLOw0KPiArCXFzcGlfd3JpdGVsKHEsIHJl ZywgcS0+aW9iYXNlICsgUVVBRFNQSV9NQ1IpOw0KPiArDQo+ICsJLyoNCj4gKwkgKiBUaGUgbWlu aW11bSBkZWxheSA6IDEgQUhCICsgMiBTRkNLIGNsb2Nrcy4NCj4gKwkgKiBEZWxheSAxIHVzIGlz IGVub3VnaC4NCj4gKwkgKi8NCj4gKwl1ZGVsYXkoMSk7DQo+ICsNCj4gKwlyZWcgJj0gfihRVUFE U1BJX01DUl9TV1JTVEhEX01BU0sgfCBRVUFEU1BJX01DUl9TV1JTVFNEX01BU0spOw0KPiArCXFz cGlfd3JpdGVsKHEsIHJlZywgcS0+aW9iYXNlICsgUVVBRFNQSV9NQ1IpOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgdm9pZCBmc2xfcXNwaV9zZWxlY3RfbWVtKHN0cnVjdCBmc2xfcXNwaSAqcSwgc3Ry dWN0IHNwaV9kZXZpY2UgKnNwaSkNCj4gK3sNCj4gKwl1bnNpZ25lZCBsb25nIHJhdGUgPSBzcGkt Pm1heF9zcGVlZF9oejsNCj4gKwlpbnQgcmV0LCBpOw0KPiArCXUzMiBtYXBfYWRkcjsNCg0KRm9y Z290IHRvIGRyb3Agc29tZSB1bnVzZWQgdmFycyBoZXJlLiBJIHdpbGwgcmVtb3ZlIHRoZW0gaW4g dGhlIG5leHQgDQp2ZXJzaW9uLg0KDQo+ICsNCj4gKwlpZiAocS0+c2VsZWN0ZWQgPT0gc3BpLT5j aGlwX3NlbGVjdCkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJaWYgKG5lZWRzXzR4X2Nsb2NrKHEp KQ0KPiArCQlyYXRlICo9IDQ7DQo+ICsNCj4gKwlmc2xfcXNwaV9jbGtfZGlzYWJsZV91bnByZXAo cSk7DQo+ICsNCj4gKwlyZXQgPSBjbGtfc2V0X3JhdGUocS0+Y2xrLCByYXRlKTsNCj4gKwlpZiAo cmV0KQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwlyZXQgPSBmc2xfcXNwaV9jbGtfcHJlcF9lbmFi bGUocSk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJcS0+c2VsZWN0ZWQg PSBzcGktPmNoaXBfc2VsZWN0Ow0KPiArDQo+ICsJZnNsX3FzcGlfaW52YWxpZGF0ZShxKTsNCj4g K30NCj4gKw0KPiArc3RhdGljIHZvaWQgZnNsX3FzcGlfcmVhZF9haGIoc3RydWN0IGZzbF9xc3Bp ICpxLCBjb25zdCBzdHJ1Y3Qgc3BpX21lbV9vcCAqb3ApDQo+ICt7DQo+ICsJbWVtY3B5X2Zyb21p byhvcC0+ZGF0YS5idWYuaW4sDQo+ICsJCSAgICAgIHEtPmFoYl9hZGRyICsgcS0+c2VsZWN0ZWQg KiBxLT5kZXZ0eXBlX2RhdGEtPmFoYl9idWZfc2l6ZSwNCj4gKwkJICAgICAgb3AtPmRhdGEubmJ5 dGVzKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgZnNsX3FzcGlfZmlsbF90eGZpZm8oc3Ry dWN0IGZzbF9xc3BpICpxLA0KPiArCQkJCSBjb25zdCBzdHJ1Y3Qgc3BpX21lbV9vcCAqb3ApDQo+ ICt7DQo+ICsJdm9pZCBfX2lvbWVtICpiYXNlID0gcS0+aW9iYXNlOw0KPiArCWludCBpOw0KPiAr CXUzMiB2YWw7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgQUxJR05fRE9XTihvcC0+ZGF0YS5u Ynl0ZXMsIDQpOyBpICs9IDQpIHsNCj4gKwkJbWVtY3B5KCZ2YWwsIG9wLT5kYXRhLmJ1Zi5vdXQg KyBpLCA0KTsNCj4gKwkJdmFsID0gZnNsX3FzcGlfZW5kaWFuX3hjaGcocSwgdmFsKTsNCj4gKwkJ cXNwaV93cml0ZWwocSwgdmFsLCBiYXNlICsgUVVBRFNQSV9UQkRSKTsNCj4gKwl9DQo+ICsNCj4g KwlpZiAoaSA8IG9wLT5kYXRhLm5ieXRlcykgew0KPiArCQltZW1jcHkoJnZhbCwgb3AtPmRhdGEu YnVmLm91dCArIGksIG9wLT5kYXRhLm5ieXRlcyAtIGkpOw0KPiArCQl2YWwgPSBmc2xfcXNwaV9l bmRpYW5feGNoZyhxLCB2YWwpOw0KPiArCQlxc3BpX3dyaXRlbChxLCB2YWwsIGJhc2UgKyBRVUFE U1BJX1RCRFIpOw0KPiArCX0NCj4gKw0KPiArCWlmIChuZWVkc19maWxsX3R4ZmlmbyhxKSkgew0K PiArCQlmb3IgKGkgPSBvcC0+ZGF0YS5uYnl0ZXM7IGkgPCAxNjsgaSArPSA0KQ0KPiArCQkJcXNw aV93cml0ZWwocSwgMCwgYmFzZSArIFFVQURTUElfVEJEUik7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgdm9pZCBmc2xfcXNwaV9yZWFkX3J4ZmlmbyhzdHJ1Y3QgZnNsX3FzcGkgKnEsDQo+ ICsJCQkgIGNvbnN0IHN0cnVjdCBzcGlfbWVtX29wICpvcCkNCj4gK3sNCj4gKwl2b2lkIF9faW9t ZW0gKmJhc2UgPSBxLT5pb2Jhc2U7DQo+ICsJaW50IGk7DQo+ICsJdTggKmJ1ZiA9IG9wLT5kYXRh LmJ1Zi5pbjsNCj4gKwl1MzIgdmFsOw0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IEFMSUdOX0RP V04ob3AtPmRhdGEubmJ5dGVzLCA0KTsgaSArPSA0KSB7DQo+ICsJCXZhbCA9IHFzcGlfcmVhZGwo cSwgYmFzZSArIFFVQURTUElfUkJEUihpIC8gNCkpOw0KPiArCQl2YWwgPSBmc2xfcXNwaV9lbmRp YW5feGNoZyhxLCB2YWwpOw0KPiArCQltZW1jcHkoYnVmICsgaSwgJnZhbCwgNCk7DQo+ICsJfQ0K PiArDQo+ICsJaWYgKGkgPCBvcC0+ZGF0YS5uYnl0ZXMpIHsNCj4gKwkJdmFsID0gcXNwaV9yZWFk bChxLCBiYXNlICsgUVVBRFNQSV9SQkRSKGkgLyA0KSk7DQo+ICsJCXZhbCA9IGZzbF9xc3BpX2Vu ZGlhbl94Y2hnKHEsIHZhbCk7DQo+ICsJCW1lbWNweShidWYgKyBpLCAmdmFsLCBvcC0+ZGF0YS5u Ynl0ZXMgLSBpKTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgZnNsX3FzcGlfZG9f b3Aoc3RydWN0IGZzbF9xc3BpICpxLCBjb25zdCBzdHJ1Y3Qgc3BpX21lbV9vcCAqb3ApDQo+ICt7 DQo+ICsJdm9pZCBfX2lvbWVtICpiYXNlID0gcS0+aW9iYXNlOw0KPiArCWludCBlcnIgPSAwOw0K PiArDQo+ICsJaW5pdF9jb21wbGV0aW9uKCZxLT5jKTsNCj4gKw0KPiArCS8qDQo+ICsJICogQWx3 YXlzIHN0YXJ0IHRoZSBzZXF1ZW5jZSBhdCB0aGUgc2FtZSBpbmRleCBzaW5jZSB3ZSB1cGRhdGUN Cj4gKwkgKiB0aGUgTFVUIGF0IGVhY2ggZXhlY19vcCgpIGNhbGwuIEFuZCBhbHNvIHNwZWNpZnkg dGhlIERBVEENCj4gKwkgKiBsZW5ndGgsIHNpbmNlIGl0J3MgaGFzIG5vdCBiZWVuIHNwZWNpZmll ZCBpbiB0aGUgTFVULg0KPiArCSAqLw0KPiArCXFzcGlfd3JpdGVsKHEsIG9wLT5kYXRhLm5ieXRl cyB8IFFVQURTUElfSVBDUl9TRVFJRChTRVFJRF9MVVQpLA0KPiArCQkgICAgYmFzZSArIFFVQURT UElfSVBDUik7DQo+ICsNCj4gKwkvKiBXYWl0IGZvciB0aGUgaW50ZXJydXB0LiAqLw0KPiArCWlm ICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZxLT5jLCBtc2Vjc190b19qaWZmaWVzKDEw MDApKSkNCj4gKwkJZXJyID0gLUVUSU1FRE9VVDsNCj4gKw0KPiArCWlmICghZXJyICYmIG9wLT5k YXRhLm5ieXRlcyAmJiBvcC0+ZGF0YS5kaXIgPT0gU1BJX01FTV9EQVRBX0lOKQ0KPiArCQlmc2xf cXNwaV9yZWFkX3J4ZmlmbyhxLCBvcCk7DQo+ICsNCj4gKwlyZXR1cm4gZXJyOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgaW50IGZzbF9xc3BpX3JlYWRsX3BvbGxfdG91dChzdHJ1Y3QgZnNsX3FzcGkg KnEsIHZvaWQgX19pb21lbSAqYmFzZSwNCj4gKwkJCQkgICAgdTMyIG1hc2ssIHUzMiBkZWxheV91 cywgdTMyIHRpbWVvdXRfdXMpDQo+ICt7DQo+ICsJdTMyIHJlZzsNCj4gKw0KPiArCWlmICghcS0+ ZGV2dHlwZV9kYXRhLT5saXR0bGVfZW5kaWFuKQ0KPiArCQltYXNrID0gKHUzMiljcHVfdG9fYmUz MihtYXNrKTsNCj4gKw0KPiArCXJldHVybiByZWFkbF9wb2xsX3RpbWVvdXQoYmFzZSwgcmVnLCAh KHJlZyAmIG1hc2spLCBkZWxheV91cywNCj4gKwkJCQkgIHRpbWVvdXRfdXMpOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgaW50IGZzbF9xc3BpX2V4ZWNfb3Aoc3RydWN0IHNwaV9tZW0gKm1lbSwgY29u c3Qgc3RydWN0IHNwaV9tZW1fb3AgKm9wKQ0KPiArew0KPiArCXN0cnVjdCBmc2xfcXNwaSAqcSA9 IHNwaV9jb250cm9sbGVyX2dldF9kZXZkYXRhKG1lbS0+c3BpLT5tYXN0ZXIpOw0KPiArCXZvaWQg X19pb21lbSAqYmFzZSA9IHEtPmlvYmFzZTsNCj4gKwl1MzIgYWRkcl9vZmZzZXQgPSAwOw0KPiAr CWludCBlcnIgPSAwOw0KPiArDQo+ICsJbXV0ZXhfbG9jaygmcS0+bG9jayk7DQo+ICsNCj4gKwkv KiB3YWl0IGZvciB0aGUgY29udHJvbGxlciBiZWluZyByZWFkeSAqLw0KPiArCWZzbF9xc3BpX3Jl YWRsX3BvbGxfdG91dChxLCBiYXNlICsgUVVBRFNQSV9TUiwgKFFVQURTUElfU1JfSVBfQUNDX01B U0sgfA0KPiArCQkJCSBRVUFEU1BJX1NSX0FIQl9BQ0NfTUFTSyksIDEwLCAxMDAwKTsNCj4gKw0K PiArCWZzbF9xc3BpX3NlbGVjdF9tZW0ocSwgbWVtLT5zcGkpOw0KPiArDQo+ICsJaWYgKG5lZWRz X2FtYmFfYmFzZV9vZmZzZXQocSkpDQo+ICsJCWFkZHJfb2Zmc2V0ID0gcS0+bWVtbWFwX3BoeTsN Cj4gKw0KPiArCXFzcGlfd3JpdGVsKHEsDQo+ICsJCSAgICBxLT5zZWxlY3RlZCAqIHEtPmRldnR5 cGVfZGF0YS0+YWhiX2J1Zl9zaXplICsgYWRkcl9vZmZzZXQsDQo+ICsJCSAgICBiYXNlICsgUVVB RFNQSV9TRkFSKTsNCj4gKw0KPiArCXFzcGlfd3JpdGVsKHEsIHFzcGlfcmVhZGwocSwgYmFzZSAr IFFVQURTUElfTUNSKSB8DQo+ICsJCSAgICBRVUFEU1BJX01DUl9DTFJfUlhGX01BU0sgfCBRVUFE U1BJX01DUl9DTFJfVFhGX01BU0ssDQo+ICsJCSAgICBiYXNlICsgUVVBRFNQSV9NQ1IpOw0KPiAr DQo+ICsJcXNwaV93cml0ZWwocSwgUVVBRFNQSV9TUFRSQ0xSX0JGUFRSQyB8IFFVQURTUElfU1BU UkNMUl9JUFBUUkMsDQo+ICsJCSAgICBiYXNlICsgUVVBRFNQSV9TUFRSQ0xSKTsNCj4gKw0KPiAr CWZzbF9xc3BpX3ByZXBhcmVfbHV0KHEsIG9wKTsNCj4gKw0KPiArCS8qDQo+ICsJICogSWYgd2Ug aGF2ZSBsYXJnZSBjaHVua3Mgb2YgZGF0YSwgd2UgcmVhZCB0aGVtIHRocm91Z2ggdGhlIEFIQiBi dXMNCj4gKwkgKiBieSBhY2Nlc3NpbmcgdGhlIG1hcHBlZCBtZW1vcnkuIEluIGFsbCBvdGhlciBj YXNlcyB3ZSB1c2UNCj4gKwkgKiBJUCBjb21tYW5kcyB0byBhY2Nlc3MgdGhlIGZsYXNoLg0KPiAr CSAqLw0KPiArCWlmIChvcC0+ZGF0YS5uYnl0ZXMgPiAocS0+ZGV2dHlwZV9kYXRhLT5yeGZpZm8g LSA0KSAmJg0KPiArCSAgICBvcC0+ZGF0YS5kaXIgPT0gU1BJX01FTV9EQVRBX0lOKSB7DQo+ICsJ CWZzbF9xc3BpX3JlYWRfYWhiKHEsIG9wKTsNCj4gKwl9IGVsc2Ugew0KPiArCQlxc3BpX3dyaXRl bChxLCBRVUFEU1BJX1JCQ1RfV01SS19NQVNLIHwNCj4gKwkJCSAgICBRVUFEU1BJX1JCQ1RfUlhC UkRfVVNFSVBTLCBiYXNlICsgUVVBRFNQSV9SQkNUKTsNCj4gKw0KPiArCQlpZiAob3AtPmRhdGEu bmJ5dGVzICYmIG9wLT5kYXRhLmRpciA9PSBTUElfTUVNX0RBVEFfT1VUKQ0KPiArCQkJZnNsX3Fz cGlfZmlsbF90eGZpZm8ocSwgb3ApOw0KPiArDQo+ICsJCWVyciA9IGZzbF9xc3BpX2RvX29wKHEs IG9wKTsNCj4gKwl9DQo+ICsNCj4gKwkvKiBJbnZhbGlkYXRlIHRoZSBkYXRhIGluIHRoZSBBSEIg YnVmZmVyLiAqLw0KPiArCWZzbF9xc3BpX2ludmFsaWRhdGUocSk7DQo+ICsNCj4gKwltdXRleF91 bmxvY2soJnEtPmxvY2spOw0KPiArDQo+ICsJcmV0dXJuIGVycjsNCj4gK30NCj4gKw0KPiArc3Rh dGljIGludCBmc2xfcXNwaV9hZGp1c3Rfb3Bfc2l6ZShzdHJ1Y3Qgc3BpX21lbSAqbWVtLCBzdHJ1 Y3Qgc3BpX21lbV9vcCAqb3ApDQo+ICt7DQo+ICsJc3RydWN0IGZzbF9xc3BpICpxID0gc3BpX2Nv bnRyb2xsZXJfZ2V0X2RldmRhdGEobWVtLT5zcGktPm1hc3Rlcik7DQo+ICsNCj4gKwlpZiAob3At PmRhdGEuZGlyID09IFNQSV9NRU1fREFUQV9PVVQpIHsNCj4gKwkJaWYgKG9wLT5kYXRhLm5ieXRl cyA+IHEtPmRldnR5cGVfZGF0YS0+dHhmaWZvKQ0KPiArCQkJb3AtPmRhdGEubmJ5dGVzID0gcS0+ ZGV2dHlwZV9kYXRhLT50eGZpZm87DQo+ICsJfSBlbHNlIHsNCj4gKwkJaWYgKG9wLT5kYXRhLm5i eXRlcyA+IHEtPmRldnR5cGVfZGF0YS0+YWhiX2J1Zl9zaXplKQ0KPiArCQkJb3AtPmRhdGEubmJ5 dGVzID0gcS0+ZGV2dHlwZV9kYXRhLT5haGJfYnVmX3NpemU7DQo+ICsJCWVsc2UgaWYgKG9wLT5k YXRhLm5ieXRlcyA+IChxLT5kZXZ0eXBlX2RhdGEtPnJ4ZmlmbyAtIDQpKQ0KPiArCQkJb3AtPmRh dGEubmJ5dGVzID0gQUxJR05fRE9XTihvcC0+ZGF0YS5uYnl0ZXMsIDgpOw0KPiArCX0NCj4gKw0K PiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGZzbF9xc3BpX2RlZmF1bHRf c2V0dXAoc3RydWN0IGZzbF9xc3BpICpxKQ0KPiArew0KPiArCXZvaWQgX19pb21lbSAqYmFzZSA9 IHEtPmlvYmFzZTsNCj4gKwl1MzIgcmVnLCBhZGRyX29mZnNldCA9IDA7DQo+ICsJaW50IHJldDsN Cj4gKw0KPiArCS8qIGRpc2FibGUgYW5kIHVucHJlcGFyZSBjbG9jayB0byBhdm9pZCBnbGl0Y2gg cGFzcyB0byBjb250cm9sbGVyICovDQo+ICsJZnNsX3FzcGlfY2xrX2Rpc2FibGVfdW5wcmVwKHEp Ow0KPiArDQo+ICsJLyogdGhlIGRlZmF1bHQgZnJlcXVlbmN5LCB3ZSB3aWxsIGNoYW5nZSBpdCBs YXRlciBpZiBuZWNlc3NhcnkuICovDQo+ICsJcmV0ID0gY2xrX3NldF9yYXRlKHEtPmNsaywgNjYw MDAwMDApOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwlyZXQgPSBm c2xfcXNwaV9jbGtfcHJlcF9lbmFibGUocSk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJl dDsNCj4gKw0KPiArCS8qIFJlc2V0IHRoZSBtb2R1bGUgKi8NCj4gKwlxc3BpX3dyaXRlbChxLCBR VUFEU1BJX01DUl9TV1JTVFNEX01BU0sgfCBRVUFEU1BJX01DUl9TV1JTVEhEX01BU0ssDQo+ICsJ CSAgICBiYXNlICsgUVVBRFNQSV9NQ1IpOw0KPiArCXVkZWxheSgxKTsNCj4gKw0KPiArCS8qIERp c2FibGUgdGhlIG1vZHVsZSAqLw0KPiArCXFzcGlfd3JpdGVsKHEsIFFVQURTUElfTUNSX01ESVNf TUFTSyB8IFFVQURTUElfTUNSX1JFU0VSVkVEX01BU0ssDQo+ICsJCSAgICBiYXNlICsgUVVBRFNQ SV9NQ1IpOw0KPiArDQo+ICsJcmVnID0gcXNwaV9yZWFkbChxLCBiYXNlICsgUVVBRFNQSV9TTVBS KTsNCj4gKwlxc3BpX3dyaXRlbChxLCByZWcgJiB+KFFVQURTUElfU01QUl9GU0RMWV9NQVNLDQo+ ICsJCQl8IFFVQURTUElfU01QUl9GU1BIU19NQVNLDQo+ICsJCQl8IFFVQURTUElfU01QUl9IU0VO QV9NQVNLDQo+ICsJCQl8IFFVQURTUElfU01QUl9ERFJTTVBfTUFTSyksIGJhc2UgKyBRVUFEU1BJ X1NNUFIpOw0KPiArDQo+ICsJLyogV2Ugb25seSB1c2UgdGhlIGJ1ZmZlcjMgZm9yIEFIQiByZWFk ICovDQo+ICsJcXNwaV93cml0ZWwocSwgMCwgYmFzZSArIFFVQURTUElfQlVGMElORCk7DQo+ICsJ cXNwaV93cml0ZWwocSwgMCwgYmFzZSArIFFVQURTUElfQlVGMUlORCk7DQo+ICsJcXNwaV93cml0 ZWwocSwgMCwgYmFzZSArIFFVQURTUElfQlVGMklORCk7DQo+ICsNCj4gKwlxc3BpX3dyaXRlbChx LCBRVUFEU1BJX0JGR0VOQ1JfU0VRSUQoU0VRSURfTFVUKSwNCj4gKwkJICAgIHEtPmlvYmFzZSAr IFFVQURTUElfQkZHRU5DUik7DQo+ICsJcXNwaV93cml0ZWwocSwgUVVBRFNQSV9SQkNUX1dNUktf TUFTSywgYmFzZSArIFFVQURTUElfUkJDVCk7DQo+ICsJcXNwaV93cml0ZWwocSwgUVVBRFNQSV9C VUYzQ1JfQUxMTVNUX01BU0sgfA0KPiArCQkgICAgUVVBRFNQSV9CVUYzQ1JfQURBVFNaKHEtPmRl dnR5cGVfZGF0YS0+YWhiX2J1Zl9zaXplIC8gOCksDQo+ICsJCSAgICBiYXNlICsgUVVBRFNQSV9C VUYzQ1IpOw0KPiArDQo+ICsJaWYgKG5lZWRzX2FtYmFfYmFzZV9vZmZzZXQocSkpDQo+ICsJCWFk ZHJfb2Zmc2V0ID0gcS0+bWVtbWFwX3BoeTsNCj4gKw0KPiArCS8qDQo+ICsJICogSW4gSFcgdGhl cmUgY2FuIGJlIGEgbWF4aW11bSBvZiBmb3VyIGNoaXBzIG9uIHR3byBidXNlcyB3aXRoDQo+ICsJ ICogdHdvIGNoaXAgc2VsZWN0cyBvbiBlYWNoIGJ1cy4gV2UgdXNlIGZvdXIgY2hpcCBzZWxlY3Rz IGluIFNXDQo+ICsJICogdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZSBmb3VyIGNoaXBzLg0K PiArCSAqIFdlIHVzZSBhaGJfYnVmX3NpemUgZm9yIGVhY2ggY2hpcCBhbmQgc2V0IFNGQTFBRCwg U0ZBMkFELCBTRkIxQUQsDQo+ICsJICogU0ZCMkFEIGFjY29yZGluZ2x5Lg0KPiArCSAqLw0KPiAr CXFzcGlfd3JpdGVsKHEsIHEtPmRldnR5cGVfZGF0YS0+YWhiX2J1Zl9zaXplICsgYWRkcl9vZmZz ZXQsDQo+ICsJCSAgICBiYXNlICsgUVVBRFNQSV9TRkExQUQpOw0KPiArCXFzcGlfd3JpdGVsKHEs IHEtPmRldnR5cGVfZGF0YS0+YWhiX2J1Zl9zaXplICogMiArIGFkZHJfb2Zmc2V0LA0KPiArCQkg ICAgYmFzZSArIFFVQURTUElfU0ZBMkFEKTsNCj4gKwlxc3BpX3dyaXRlbChxLCBxLT5kZXZ0eXBl X2RhdGEtPmFoYl9idWZfc2l6ZSAqIDMgKyBhZGRyX29mZnNldCwNCj4gKwkJICAgIGJhc2UgKyBR VUFEU1BJX1NGQjFBRCk7DQo+ICsJcXNwaV93cml0ZWwocSwgcS0+ZGV2dHlwZV9kYXRhLT5haGJf YnVmX3NpemUgKiA0ICsgYWRkcl9vZmZzZXQsDQo+ICsJCSAgICBiYXNlICsgUVVBRFNQSV9TRkIy QUQpOw0KPiArDQo+ICsJcS0+c2VsZWN0ZWQgPSAtMTsNCj4gKw0KPiArCS8qIEVuYWJsZSB0aGUg bW9kdWxlICovDQo+ICsJcXNwaV93cml0ZWwocSwgUVVBRFNQSV9NQ1JfUkVTRVJWRURfTUFTSyB8 IFFVQURTUElfTUNSX0VORF9DRkdfTUFTSywNCj4gKwkJICAgIGJhc2UgKyBRVUFEU1BJX01DUik7 DQo+ICsNCj4gKwkvKiBjbGVhciBhbGwgaW50ZXJydXB0IHN0YXR1cyAqLw0KPiArCXFzcGlfd3Jp dGVsKHEsIDB4ZmZmZmZmZmYsIHEtPmlvYmFzZSArIFFVQURTUElfRlIpOw0KPiArDQo+ICsJLyog ZW5hYmxlIHRoZSBpbnRlcnJ1cHQgKi8NCj4gKwlxc3BpX3dyaXRlbChxLCBRVUFEU1BJX1JTRVJf VEZJRSwgcS0+aW9iYXNlICsgUVVBRFNQSV9SU0VSKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgY29uc3QgY2hhciAqZnNsX3FzcGlfZ2V0X25hbWUoc3RydWN0IHNw aV9tZW0gKm1lbSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZnNsX3FzcGkgKnEgPSBzcGlfY29udHJvbGxl cl9nZXRfZGV2ZGF0YShtZW0tPnNwaS0+bWFzdGVyKTsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSAmbWVtLT5zcGktPmRldjsNCj4gKwljb25zdCBjaGFyICpuYW1lOw0KPiArDQo+ICsJLyoNCj4g KwkgKiBJbiBvcmRlciB0byBrZWVwIG10ZHBhcnRzIGNvbXBhdGlibGUgd2l0aCB0aGUgb2xkIE1U RCBkcml2ZXIgYXQNCj4gKwkgKiBtdGQvc3BpLW5vci9mc2wtcXVhZHNwaS5jLCB3ZSBzZXQgYSBj dXN0b20gbmFtZSBkZXJpdmVkIGZyb20gdGhlDQo+ICsJICogcGxhdGZvcm1fZGV2aWNlIG9mIHRo ZSBjb250cm9sbGVyLg0KPiArCSAqLw0KPiArCWlmIChvZl9nZXRfYXZhaWxhYmxlX2NoaWxkX2Nv dW50KHEtPmRldi0+b2Zfbm9kZSkgPT0gMSkNCj4gKwkJcmV0dXJuIGRldl9uYW1lKHEtPmRldik7 DQo+ICsNCj4gKwluYW1lID0gZGV2bV9rYXNwcmludGYoZGV2LCBHRlBfS0VSTkVMLA0KPiArCQkJ ICAgICAgIiVzLSVkIiwgZGV2X25hbWUocS0+ZGV2KSwNCj4gKwkJCSAgICAgIG1lbS0+c3BpLT5j aGlwX3NlbGVjdCk7DQo+ICsNCj4gKwlpZiAoIW5hbWUpIHsNCj4gKwkJZGV2X2VycihkZXYsICJm YWlsZWQgdG8gZ2V0IG1lbW9yeSBmb3IgY3VzdG9tIGZsYXNoIG5hbWVcbiIpOw0KPiArCQlyZXR1 cm4gRVJSX1BUUigtRU5PTUVNKTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gbmFtZTsNCj4gK30N Cj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfY29udHJvbGxlcl9tZW1fb3BzIGZzbF9x c3BpX21lbV9vcHMgPSB7DQo+ICsJLmFkanVzdF9vcF9zaXplID0gZnNsX3FzcGlfYWRqdXN0X29w X3NpemUsDQo+ICsJLnN1cHBvcnRzX29wID0gZnNsX3FzcGlfc3VwcG9ydHNfb3AsDQo+ICsJLmV4 ZWNfb3AgPSBmc2xfcXNwaV9leGVjX29wLA0KPiArCS5nZXRfbmFtZSA9IGZzbF9xc3BpX2dldF9u YW1lLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGludCBmc2xfcXNwaV9wcm9iZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQ0KPiArew0KPiArCXN0cnVjdCBzcGlfY29udHJvbGxlciAqY3Rs cjsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Ow0KPiArCXN0cnVjdCBkZXZp Y2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7DQo+ICsJc3RydWN0IHJlc291cmNlICpyZXM7DQo+ ICsJc3RydWN0IGZzbF9xc3BpICpxOw0KPiArCWludCByZXQ7DQo+ICsNCj4gKwljdGxyID0gc3Bp X2FsbG9jX21hc3RlcigmcGRldi0+ZGV2LCBzaXplb2YoKnEpKTsNCj4gKwlpZiAoIWN0bHIpDQo+ ICsJCXJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsJY3Rsci0+bW9kZV9iaXRzID0gU1BJX1JYX0RV QUwgfCBTUElfUlhfUVVBRCB8DQo+ICsJCQkgIFNQSV9UWF9EVUFMIHwgU1BJX1RYX1FVQUQ7DQo+ ICsNCj4gKwlxID0gc3BpX2NvbnRyb2xsZXJfZ2V0X2RldmRhdGEoY3Rscik7DQo+ICsJcS0+ZGV2 ID0gZGV2Ow0KPiArCXEtPmRldnR5cGVfZGF0YSA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShk ZXYpOw0KPiArCWlmICghcS0+ZGV2dHlwZV9kYXRhKSB7DQo+ICsJCXJldCA9IC1FTk9ERVY7DQo+ ICsJCWdvdG8gZXJyX3B1dF9jdHJsOw0KPiArCX0NCj4gKw0KPiArCXBsYXRmb3JtX3NldF9kcnZk YXRhKHBkZXYsIHEpOw0KPiArDQo+ICsJLyogZmluZCB0aGUgcmVzb3VyY2VzICovDQo+ICsJcmVz ID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgIlF1 YWRTUEkiKTsNCj4gKwlxLT5pb2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMp Ow0KPiArCWlmIChJU19FUlIocS0+aW9iYXNlKSkgew0KPiArCQlyZXQgPSBQVFJfRVJSKHEtPmlv YmFzZSk7DQo+ICsJCWdvdG8gZXJyX3B1dF9jdHJsOw0KPiArCX0NCj4gKw0KPiArCXJlcyA9IHBs YXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sDQo+ICsJCQkJ CSJRdWFkU1BJLW1lbW9yeSIpOw0KPiArCXEtPmFoYl9hZGRyID0gZGV2bV9pb3JlbWFwX3Jlc291 cmNlKGRldiwgcmVzKTsNCj4gKwlpZiAoSVNfRVJSKHEtPmFoYl9hZGRyKSkgew0KPiArCQlyZXQg PSBQVFJfRVJSKHEtPmFoYl9hZGRyKTsNCj4gKwkJZ290byBlcnJfcHV0X2N0cmw7DQo+ICsJfQ0K PiArDQo+ICsJcS0+bWVtbWFwX3BoeSA9IHJlcy0+c3RhcnQ7DQo+ICsNCj4gKwkvKiBmaW5kIHRo ZSBjbG9ja3MgKi8NCj4gKwlxLT5jbGtfZW4gPSBkZXZtX2Nsa19nZXQoZGV2LCAicXNwaV9lbiIp Ow0KPiArCWlmIChJU19FUlIocS0+Y2xrX2VuKSkgew0KPiArCQlyZXQgPSBQVFJfRVJSKHEtPmNs a19lbik7DQo+ICsJCWdvdG8gZXJyX3B1dF9jdHJsOw0KPiArCX0NCj4gKw0KPiArCXEtPmNsayA9 IGRldm1fY2xrX2dldChkZXYsICJxc3BpIik7DQo+ICsJaWYgKElTX0VSUihxLT5jbGspKSB7DQo+ ICsJCXJldCA9IFBUUl9FUlIocS0+Y2xrKTsNCj4gKwkJZ290byBlcnJfcHV0X2N0cmw7DQo+ICsJ fQ0KPiArDQo+ICsJcmV0ID0gZnNsX3FzcGlfY2xrX3ByZXBfZW5hYmxlKHEpOw0KPiArCWlmIChy ZXQpIHsNCj4gKwkJZGV2X2VycihkZXYsICJjYW4gbm90IGVuYWJsZSB0aGUgY2xvY2tcbiIpOw0K PiArCQlnb3RvIGVycl9wdXRfY3RybDsNCj4gKwl9DQo+ICsNCj4gKwkvKiBmaW5kIHRoZSBpcnEg Ki8NCj4gKwlyZXQgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOw0KPiArCWlmIChyZXQgPCAw KSB7DQo+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCB0aGUgaXJxOiAlZFxuIiwgcmV0 KTsNCj4gKwkJZ290byBlcnJfZGlzYWJsZV9jbGs7DQo+ICsJfQ0KPiArDQo+ICsJcmV0ID0gZGV2 bV9yZXF1ZXN0X2lycShkZXYsIHJldCwNCj4gKwkJCWZzbF9xc3BpX2lycV9oYW5kbGVyLCAwLCBw ZGV2LT5uYW1lLCBxKTsNCj4gKwlpZiAocmV0KSB7DQo+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVk IHRvIHJlcXVlc3QgaXJxOiAlZFxuIiwgcmV0KTsNCj4gKwkJZ290byBlcnJfZGlzYWJsZV9jbGs7 DQo+ICsJfQ0KPiArDQo+ICsJbXV0ZXhfaW5pdCgmcS0+bG9jayk7DQo+ICsNCj4gKwljdGxyLT5i dXNfbnVtID0gLTE7DQo+ICsJY3Rsci0+bnVtX2NoaXBzZWxlY3QgPSA0Ow0KPiArCWN0bHItPm1l bV9vcHMgPSAmZnNsX3FzcGlfbWVtX29wczsNCj4gKw0KPiArCWZzbF9xc3BpX2RlZmF1bHRfc2V0 dXAocSk7DQo+ICsNCj4gKwljdGxyLT5kZXYub2Zfbm9kZSA9IG5wOw0KPiArDQo+ICsJcmV0ID0g c3BpX3JlZ2lzdGVyX2NvbnRyb2xsZXIoY3Rscik7DQo+ICsJaWYgKHJldCkNCj4gKwkJZ290byBl cnJfZGVzdHJveV9tdXRleDsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArDQo+ICtlcnJfZGVzdHJv eV9tdXRleDoNCj4gKwltdXRleF9kZXN0cm95KCZxLT5sb2NrKTsNCj4gKw0KPiArZXJyX2Rpc2Fi bGVfY2xrOg0KPiArCWZzbF9xc3BpX2Nsa19kaXNhYmxlX3VucHJlcChxKTsNCj4gKw0KPiArZXJy X3B1dF9jdHJsOg0KPiArCXNwaV9jb250cm9sbGVyX3B1dChjdGxyKTsNCj4gKw0KPiArCWRldl9l cnIoZGV2LCAiRnJlZXNjYWxlIFF1YWRTUEkgcHJvYmUgZmFpbGVkXG4iKTsNCj4gKwlyZXR1cm4g cmV0Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGZzbF9xc3BpX3JlbW92ZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQ0KPiArew0KPiArCXN0cnVjdCBmc2xfcXNwaSAqcSA9IHBsYXRm b3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KPiArDQo+ICsJLyogZGlzYWJsZSB0aGUgaGFyZHdhcmUg Ki8NCj4gKwlxc3BpX3dyaXRlbChxLCBRVUFEU1BJX01DUl9NRElTX01BU0ssIHEtPmlvYmFzZSAr IFFVQURTUElfTUNSKTsNCj4gKwlxc3BpX3dyaXRlbChxLCAweDAsIHEtPmlvYmFzZSArIFFVQURT UElfUlNFUik7DQo+ICsNCj4gKwlmc2xfcXNwaV9jbGtfZGlzYWJsZV91bnByZXAocSk7DQo+ICsN Cj4gKwltdXRleF9kZXN0cm95KCZxLT5sb2NrKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgaW50IGZzbF9xc3BpX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQ0K PiArew0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGZzbF9xc3BpX3Jl c3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ICt7DQo+ICsJc3RydWN0IGZzbF9xc3BpICpxID0g ZGV2X2dldF9kcnZkYXRhKGRldik7DQo+ICsNCj4gKwlmc2xfcXNwaV9kZWZhdWx0X3NldHVwKHEp Ow0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg b2ZfZGV2aWNlX2lkIGZzbF9xc3BpX2R0X2lkc1tdID0gew0KPiArCXsgLmNvbXBhdGlibGUgPSAi ZnNsLHZmNjEwLXFzcGkiLCAuZGF0YSA9ICZ2eWJyaWRfZGF0YSwgfSwNCj4gKwl7IC5jb21wYXRp YmxlID0gImZzbCxpbXg2c3gtcXNwaSIsIC5kYXRhID0gJmlteDZzeF9kYXRhLCB9LA0KPiArCXsg LmNvbXBhdGlibGUgPSAiZnNsLGlteDdkLXFzcGkiLCAuZGF0YSA9ICZpbXg3ZF9kYXRhLCB9LA0K PiArCXsgLmNvbXBhdGlibGUgPSAiZnNsLGlteDZ1bC1xc3BpIiwgLmRhdGEgPSAmaW14NnVsX2Rh dGEsIH0sDQo+ICsJeyAuY29tcGF0aWJsZSA9ICJmc2wsbHMxMDIxYS1xc3BpIiwgLmRhdGEgPSAm bHMxMDIxYV9kYXRhLCB9LA0KPiArCXsgLmNvbXBhdGlibGUgPSAiZnNsLGxzMjA4MGEtcXNwaSIs IC5kYXRhID0gJmxzMjA4MGFfZGF0YSwgfSwNCj4gKwl7IC8qIHNlbnRpbmVsICovIH0NCj4gK307 DQo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBmc2xfcXNwaV9kdF9pZHMpOw0KPiArDQo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgZnNsX3FzcGlfcG1fb3BzID0gew0KPiArCS5z dXNwZW5kCT0gZnNsX3FzcGlfc3VzcGVuZCwNCj4gKwkucmVzdW1lCQk9IGZzbF9xc3BpX3Jlc3Vt ZSwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZzbF9xc3Bp X2RyaXZlciA9IHsNCj4gKwkuZHJpdmVyID0gew0KPiArCQkubmFtZQk9ICJmc2wtcXVhZHNwaSIs DQo+ICsJCS5vZl9tYXRjaF90YWJsZSA9IGZzbF9xc3BpX2R0X2lkcywNCj4gKwkJLnBtID0gICAm ZnNsX3FzcGlfcG1fb3BzLA0KPiArCX0sDQo+ICsJLnByb2JlICAgICAgICAgID0gZnNsX3FzcGlf cHJvYmUsDQo+ICsJLnJlbW92ZQkJPSBmc2xfcXNwaV9yZW1vdmUsDQo+ICt9Ow0KPiArbW9kdWxl X3BsYXRmb3JtX2RyaXZlcihmc2xfcXNwaV9kcml2ZXIpOw0KPiArDQo+ICtNT0RVTEVfREVTQ1JJ UFRJT04oIkZyZWVzY2FsZSBRdWFkU1BJIENvbnRyb2xsZXIgRHJpdmVyIik7DQo+ICtNT0RVTEVf QVVUSE9SKCJGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuIik7DQo+ICtNT0RVTEVfQVVUSE9S KCJCb3JpcyBCcmV6aWxsaW9uIDxib3Jpcy5icmV6aWxsb25AYm9vdGxpbi5jb20+Iik7DQo+ICtN T0RVTEVfQVVUSE9SKCJGcmllZGVyIFNjaHJlbXBmIDxmcmllZGVyLnNjaHJlbXBmQGtvbnRyb24u ZGU+Iik7DQo+ICtNT0RVTEVfQVVUSE9SKCJZb2dlc2ggR2F1ciA8eW9nZXNobmFyYXlhbi5nYXVy QG54cC5jb20+Iik7DQo+ICtNT0RVTEVfQVVUSE9SKCJTdXJlc2ggR3VwdGEgPHN1cmVzaC5ndXB0 YUBueHAuY29tPiIpOw0KPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KPiA=