Received: by 10.223.185.116 with SMTP id b49csp3978410wrg; Mon, 19 Feb 2018 09:00:22 -0800 (PST) X-Google-Smtp-Source: AH8x224SudUJVm89u6ee5u7KwyVAqMFQILm92m+DMfNHNI2y9teJMq1WOjGdy0uUGb6e7g8aNVVD X-Received: by 10.99.123.12 with SMTP id w12mr12473985pgc.405.1519059622768; Mon, 19 Feb 2018 09:00:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519059622; cv=none; d=google.com; s=arc-20160816; b=Isflv0PzFM4sBphifT54J0suVvPgiZa/JX9aOUT6uO2eMO0z7aXHqrdSIaRCw3rc3y /+NHYewaDB03Y5iD0OBGywoowXTxWyXA4CO/HdIDF28EFD3WZKiJlaOZ0GPHDN4qO9SN EkxILzjmtmrPiGWbofqaX0mW/vSpRk8V/Y1TwkYMKRNqYgoCtIHCPvdMgQVE6xT3082z 3NkI2YIAEKUnemWO4wxCd8up1BZeDt2EqPddgVxsaGyuY+xF6WdtDtPdVoIpf2Q18QjV F2ExF+p24WW7oDfmT57T5kOAeDhLgtJrmk7l8dglim3Cv2CZndXsZ+Tb5+/c7s12G7Iu MAdg== 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:user-agent:content-language:accept-language:in-reply-to :references:message-id:date:thread-index:thread-topic:subject:cc:to :from:arc-authentication-results; bh=IogGga315Q51i94e5RQmmjwH908TSmVvbnNG8PQk0E8=; b=wOyR5jMUPMEvaKa0nZ617vikKY7HIni162KbueX9HThp0rr4KZAMgyXZzNWSnbXAEr KK/3AKJ3EVxCRH5RyLTEB2SOt6DZbevVKDr2TaDElUuXSwKOpp2NdQ7MAEEEIpImlTuc JDpwxY4lYlLOVp7m4G1owd6fYh4e/Ky+dVEGFSJ8psbfeN4E965IgkO0HDu6ZR1WUT3t X1CTDP+NpdmMf64FCDnu5NPVhnMRHN4OdXro8Ak1DitzgOjdjxZyp+fcdfwNEp/FFD1R 76+tNvQTvrCIGNTXnZOYp9tVZb0x8n5Sdzf9gx4CTqjJPOjWOk1azUMFrg7AjbYhkyNB RXBQ== 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 c14si111457pfj.132.2018.02.19.09.00.08; Mon, 19 Feb 2018 09:00:22 -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 S1753442AbeBSQ6e (ORCPT + 99 others); Mon, 19 Feb 2018 11:58:34 -0500 Received: from mx08-00178001.pphosted.com ([91.207.212.93]:57954 "EHLO mx07-00178001.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753400AbeBSQ6b (ORCPT ); Mon, 19 Feb 2018 11:58:31 -0500 Received: from pps.filterd (m0046661.ppops.net [127.0.0.1]) by mx08-.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id w1JGsYOb016923; Mon, 19 Feb 2018 17:57:58 +0100 Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx08-00178001.pphosted.com with ESMTP id 2g6c5gabwx-1 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Mon, 19 Feb 2018 17:57:58 +0100 Received: from zeta.dmz-eu.st.com (zeta.dmz-eu.st.com [164.129.230.9]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 2C60131; Mon, 19 Feb 2018 16:57:57 +0000 (GMT) Received: from Webmail-eu.st.com (sfhdag3node1.st.com [10.75.127.7]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id B773D5628; Mon, 19 Feb 2018 16:57:56 +0000 (GMT) Received: from SFHDAG3NODE2.st.com (10.75.127.8) by SFHDAG3NODE1.st.com (10.75.127.7) with Microsoft SMTP Server (TLS) id 15.0.1347.2; Mon, 19 Feb 2018 17:57:56 +0100 Received: from SFHDAG3NODE2.st.com ([fe80::b82f:1ce:8854:5b96]) by SFHDAG3NODE2.st.com ([fe80::b82f:1ce:8854:5b96%20]) with mapi id 15.00.1347.000; Mon, 19 Feb 2018 17:57:56 +0100 From: Amelie DELAUNAY To: Lee Jones CC: Linus Walleij , Rob Herring , Mark Rutland , Russell King , Alexandre TORGUE , "Maxime Coquelin" , "linux-gpio@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" Subject: Re: [PATCH 2/6] mfd: Add ST Multi-Function eXpander core driver Thread-Topic: [PATCH 2/6] mfd: Add ST Multi-Function eXpander core driver Thread-Index: AQHToOkCMgAtE6p6MUacifCOH+p/o6OgoRsAgAtR4YA= Date: Mon, 19 Feb 2018 16:57:56 +0000 Message-ID: <91ab70f9-0fd5-12fc-1424-c6186efa47b4@st.com> References: <1518100057-23234-1-git-send-email-amelie.delaunay@st.com> <1518100057-23234-3-git-send-email-amelie.delaunay@st.com> <20180212120600.5cghrzz4jqvvkgz6@dell> In-Reply-To: <20180212120600.5cghrzz4jqvvkgz6@dell> Accept-Language: fr-FR, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 x-ms-exchange-messagesentrepresentingtype: 1 x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [10.75.127.50] Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2018-02-19_08:,, signatures=0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org DQoNCk9uIDAyLzEyLzIwMTggMDE6MDYgUE0sIExlZSBKb25lcyB3cm90ZToNCj4gT24gVGh1LCAw OCBGZWIgMjAxOCwgQW1lbGllIERlbGF1bmF5IHdyb3RlOg0KPiANCj4+IFNUIE11bHRpLUZ1bmN0 aW9uIGVYcGFuZGVyIChNRlgpIGlzIGEgc2xhdmUgY29udHJvbGxlciB1c2luZyBJMkMNCj4+IGZv ciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIG1haW4gTUNVLiBNYWluIGZlYXR1cmVzIGFyZToNCj4+ IC0gMTYgZmFzdCBHUElPcyBpbmRpdmlkdWFsbHkgY29uZmlndXJhYmxlIGluIGlucHV0L291dHB1 dA0KPj4gLSA4IGFsdGVybmF0ZSBHUElPcyBpbmRpdmlkdWFsbHkgY29uZmlndXJhYmxlIGluIGlu cHV0L291dHB1dA0KPj4gLSBNYWluIE1DVSBJREQgbWVhc3VyZW1lbnQNCj4+IC0gUmVzaXN0aXZl IHRvdWNoc2NyZWVuIGNvbnRyb2xsZXINCj4+DQo+PiBPbmx5IEdQSU8gZXhwYW5kZXIgKDE2IGZh c3QgR1BJT3MgKyA4IGFsdGVybmF0ZSkgZmVhdHVyZSBpcw0KPj4gc3VwcG9ydGVkIGZvciB0aGUg bW9tZW50Lg0KPj4NCj4+IFNpZ25lZC1vZmYtYnk6IEFtZWxpZSBEZWxhdW5heSA8YW1lbGllLmRl bGF1bmF5QHN0LmNvbT4NCj4+IC0tLQ0KPj4gICBkcml2ZXJzL21mZC9LY29uZmlnICAgICAgICB8 ICAxNSArKw0KPj4gICBkcml2ZXJzL21mZC9NYWtlZmlsZSAgICAgICB8ICAgMSArDQo+PiAgIGRy aXZlcnMvbWZkL3N0LW1meC5jICAgICAgIHwgNTI2ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKw0KPj4gICBpbmNsdWRlL2xpbnV4L21mZC9zdC1tZnguaCB8IDEx NiArKysrKysrKysrDQo+PiAgIDQgZmlsZXMgY2hhbmdlZCwgNjU4IGluc2VydGlvbnMoKykNCj4+ ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWZkL3N0LW1meC5jDQo+PiAgIGNyZWF0ZSBt b2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4L21mZC9zdC1tZnguaA0KPj4NCj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL21mZC9LY29uZmlnIGIvZHJpdmVycy9tZmQvS2NvbmZpZw0KPj4gaW5kZXggMWQy MGE4MC4uZTc4ZTgxOCAxMDA2NDQNCj4+IC0tLSBhL2RyaXZlcnMvbWZkL0tjb25maWcNCj4+ICsr KyBiL2RyaXZlcnMvbWZkL0tjb25maWcNCj4+IEBAIC0xODIzLDYgKzE4MjMsMjEgQEAgY29uZmln IE1GRF9TVE0zMl9USU1FUlMNCj4+ICAgCSAgZm9yIFBXTSBhbmQgSUlPIFRpbWVyLiBUaGlzIGRy aXZlciBhbGxvdyB0byBzaGFyZSB0aGUNCj4+ICAgCSAgcmVnaXN0ZXJzIGJldHdlZW4gdGhlIG90 aGVycyBkcml2ZXJzLg0KPj4gICANCj4+ICtjb25maWcgTUZEX1NUX01GWA0KPj4gKwlib29sICJT VE1pY3JvZWxlY3Ryb25pY3MgTUZYIg0KPj4gKwlkZXBlbmRzIG9uIEkyQw0KPj4gKwlkZXBlbmRz IG9uIE9GIHx8IENPTVBJTEVfVEVTVA0KPj4gKwlzZWxlY3QgTUZEX0NPUkUNCj4+ICsJc2VsZWN0 IFJFR01BUF9JMkMNCj4+ICsJaGVscA0KPj4gKwkgIFN1cHBvcnQgZm9yIHRoZSBTVE1pY3JvZWxl Y3Ryb25pY3MgTXVsdGktRnVuY3Rpb24gZVhwYW5kZXIuDQo+IA0KPiBJcyB0aGF0IHJlYWxseSB3 aGF0IHRoaXMgZGV2aWNlIGlzIGNhbGxlZD8NClllcywgYWxsIFNUTWljcm9lbGVjdHJvbmljcyBF dmFsdWF0aW9uIGJvYXJkcyBhbmQgRGlzY292ZXJ5IGtpdHMgKHVzaW5nIA0KYW4gZXhwYW5zaW9u IGRldmljZSkgdXNlciBtYW51YWxzIHJlZmVyIHRvICJNRlggKE11bHRpIEZ1bmN0aW9uIGVYcGFu ZGVyKSIuDQo+IA0KPiBJcyB0aGVyZSBhIGRhdGFzaGVldD8NCj4gDQo+PiArCSAgVGhpcyBkcml2 ZXIgcHJvdmlkZXMgY29tbW9uIHN1cHBvcnQgZm9yIGFjY2Vzc2luZyB0aGUgZGV2aWNlLA0KPj4g KwkgIGFkZGl0aW9uYWwgZHJpdmVycyBtdXN0IGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8gdXNlIHRo ZSBmdW5jdGlvbmFsaXR5DQo+PiArCSAgb2YgdGhlIGRldmljZS4gQ3VycmVudGx5IGF2YWlsYWJs ZSBzdWIgZHJpdmVycyBhcmU6DQo+PiArDQo+PiArCQlHUElPOiBtZngtZ3Bpbw0KPiANCj4gVGhp cyBkcml2ZXIgd291bGQgYmUgZWFzaWVyIHRvIHJldmlldyBpZiBJIGNvdWxkIHBpY3R1cmUgdGhl IGRldmljZSBhcw0KPiBhIHdob2xlLiAgV2hhdCBvdGhlciBmdW5jdGlvbmFsaXR5IGRvZXMgaXQg aGF2ZT8gIFdoYXQgaXMgaXQgdGhhdA0KPiBtYWtlcyB0aGlzIGFuIE1GRD8NCj4NCk1GWCBpcyBh IHNsYXZlIGNvbnRyb2xsZXIgYmFzZWQgb24gdGhlIFNUTTMyTDE1MkNDVDYgTUNVLg0KTUZYIGZp cm13YXJlIGludGVncmF0ZXMgMyBmZWF0dXJlczoNCi0gbWFpbiBNQ1UgSUREIG1lYXN1cmVtZW50 OiB0aGlzIGFsbG93cyBtZWFzdXJlbWVudCBvZiB0aGUgSUREIGN1cnJlbnQgDQpjb25zdW1lZCBi eSB0aGUgbWFpbiBNQ1UsIGVzcGVjaWFsbHkgZm9yIHN0YXRpYyBtZWFzdXJlbWVudCBpbiBsb3cg cG93ZXIgDQptb2RlLg0KLSByZXNpc3RpdmUgdG91Y2hzY3JlZW4gY29udHJvbGxlciwgdXNpbmcg QURDIGlucHV0cyBvZiBTVE0zMkwxNTJDQ1Q2Lg0KLSBHUElPIGV4cGFuZGVyOiAxNiBwcm9ncmFt bWFibGUgaW5wdXQvb3V0cHV0ICsgOCBhbHRlcm5hdGUgR1BJTyANCihUb3VjaHNjcmVlbiBjb250 cm9sbGVyIHVzZXMgdGhlIGZvdXIgZmlyc3QgZ3Bpb3Mgb2YgdGhpcyBiYW5rIHdoZW4gDQplbmFi bGVkLCBJREQgdXNlZCB0aGUgNCBsYXN0IG9uZXMgd2hlbiBlbmFibGVkKS4NCg0KSUREIG1lYXN1 cmVtZW50IGRyaXZlciBhbmQgdG91Y2hzY3JlZW4gZHJpdmVyIGhhdmUgbm90IGJlZW4gZGV2ZWxv cGVkIA0KeWV0IGJlY2F1c2UgSSBoYXZlIG5vIGhhcmR3YXJlIHRvIHRlc3QgaXQuIEJ1dCBhbnl3 YXksIEkgd2lsbCBzZW5kIGEgVjIgDQp3aXRoIGdwaW8gZHJpdmVyIG9ubHkuDQoNCj4+ICAgbWVu dSAiTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzIg0KPj4gICAJZGVwZW5kcyBv biBBUkNIX1NBMTEwMA0KPj4gICANCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9NYWtlZmls ZSBiL2RyaXZlcnMvbWZkL01ha2VmaWxlDQo+PiBpbmRleCBkOTQ3NGFkLi4xMzc5YTE4IDEwMDY0 NA0KPj4gLS0tIGEvZHJpdmVycy9tZmQvTWFrZWZpbGUNCj4+ICsrKyBiL2RyaXZlcnMvbWZkL01h a2VmaWxlDQo+PiBAQCAtMjMwLDMgKzIzMCw0IEBAIG9iai0kKENPTkZJR19NRkRfU1RNMzJfTFBU SU1FUikJKz0gc3RtMzItbHB0aW1lci5vDQo+PiAgIG9iai0kKENPTkZJR19NRkRfU1RNMzJfVElN RVJTKSAJKz0gc3RtMzItdGltZXJzLm8NCj4+ICAgb2JqLSQoQ09ORklHX01GRF9NWFNfTFJBREMp ICAgICArPSBteHMtbHJhZGMubw0KPj4gICBvYmotJChDT05GSUdfTUZEX1NDMjdYWF9QTUlDKQkr PSBzcHJkLXNjMjd4eC1zcGkubw0KPj4gK29iai0kKENPTkZJR19NRkRfU1RfTUZYKSAJKz0gc3Qt bWZ4Lm8NCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9zdC1tZnguYyBiL2RyaXZlcnMvbWZk L3N0LW1meC5jDQo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPj4gaW5kZXggMDAwMDAwMC4uNWJl ZTVkMw0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvZHJpdmVycy9tZmQvc3QtbWZ4LmMNCj4+ IEBAIC0wLDAgKzEsNTI2IEBADQo+PiArLyoNCj4+ICsgKiBTVE1pY3JvZWxlY3Ryb25pY3MgTXVs dGktRnVuY3Rpb24gZVhwYW5kZXIgKFNULU1GWCkgQ29yZSBEcml2ZXINCj4+ICsgKg0KPj4gKyAq IENvcHlyaWdodCAoQykgMjAxNywgU1RNaWNyb2VsZWN0cm9uaWNzIC0gQWxsIFJpZ2h0cyBSZXNl cnZlZA0KPj4gKyAqIEF1dGhvcihzKTogQW1lbGllIERlbGF1bmF5IDxhbWVsaWUuZGVsYXVuYXlA c3QuY29tPiBmb3IgU1RNaWNyb2VsZWN0cm9uaWNzLg0KPiANCj4gWW91IGRvbid0IG5lZWQgdG8g cHV0ICJmb3IgU1RNaWNyb2VsZWN0cm9uaWNzIi4gIFRoaXMgd2FzIHNvbWV0aGluZyB3ZQ0KPiBt YWRlIHVwIHdoZW4gc3VibWl0dGluZyBmcm9tIGEgZGlmZmVyZW50ICghc3QuY29tKSBlbWFpbCBh ZGRyZXNzLg0KPiANCk9LLCBJIHdpbGwgZml4IGl0IGluIGdwaW8gZHJpdmVyIGZvciBWMi4NCj4+ ICsgKiBMaWNlbnNlIHRlcm1zOiBHUEwgVjIuMC4NCj4+ICsgKg0KPj4gKyAqIHN0LW1meCBDb3Jl IERyaXZlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5IGl0DQo+PiArICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5DQo+PiArICogdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4NCj4+ICsgKg0KPj4gKyAqIHN0LW1meCBDb3JlIERyaXZlciBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCj4+ICsg KiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mIE1FUkNIQU5UQUJJTElUWSBvcg0KPj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlDQo+PiAr ICogZGV0YWlscy4NCj4+ICsgKg0KPj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgNCj4+ICsgKiBz dC1tZnggQ29yZSBEcml2ZXIuIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4NCj4gDQo+IFlvdSBzaG91bGQgYmUgYWJsZSB0byB1c2UgdGhlIHNob3J0IHZlcnNpb24g b2YgdGhlIGxpY2Vuc2luZw0KPiBhZ3JlZW1lbnQuICBBbHNvLCBwbGVhc2UgZ3JlcCBmb3IgIlNQ RFgiLg0KPiANCk9LLg0KPj4gKyAqLw0KPj4gKyNpbmNsdWRlIDxsaW51eC9iaXRmaWVsZC5oPg0K Pj4gKyNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4 L2kyYy5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4NCj4+ICsjaW5jbHVkZSA8 bGludXgvbW9kdWxlLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+DQo+PiArI2lu Y2x1ZGUgPGxpbnV4L21mZC9zdC1tZnguaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNl Lmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9y ZWdtYXAuaD4NCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBzdHJ1Y3QgbWZ4X3ByaXYgLSBNRlggTUZE IHByaXZhdGUgc3RydWN0dXJlDQo+PiArICogQGRldjogZGV2aWNlLCBtb3N0bHkgZm9yIGxvZ3MN Cj4+ICsgKiBAcmVnbWFwOiByZWdpc3RlciBtYXANCj4+ICsgKiBAbWZ4OiBNRlggTUZEIHB1Ymxp YyBzdHJ1Y3R1cmUsIHRvIHNoYXJlIGluZm9ybWF0aW9uIHdpdGggc3ViZHJpdmVycw0KPj4gKyAq IEBpcnFfZG9tYWluOiBJUlEgZG9tYWluDQo+PiArICogQGlycTogSVJRIG51bWJlciBmb3IgbWZ4 DQo+PiArICogQGlycV9sb2NrOiBJUlEgYnVzIGxvY2sNCj4+ICsgKiBAaXJxZW46IGNhY2hlIG9m IElSUV9TUkNfRU4gcmVnaXN0ZXIgZm9yIGJ1c19sb2NrDQo+PiArICogQG9sZGlycWVuOiBjYWNo ZSBvZiBJUlFfU1JDX0VOIHJlZ2lzdGVyIGZvciBidXNfbG9jaw0KPj4gKyAqLw0KPiANCj4gLyoq DQo+ICAgKiBzdHJ1Y3QgbWZ4X3ByaXYgLSBNRlggTUZEIHByaXZhdGUgc3RydWN0dXJlDQo+ICAg KiBAZGV2OiAgCSAgIGRldmljZSwgbW9zdGx5IGZvciBsb2dzDQo+ICAgKiBAcmVnbWFwOiAJICAg cmVnaXN0ZXIgbWFwDQo+ICAgKiBAbWZ4OiAJICAgTUZYIE1GRCBwdWJsaWMgc3RydWN0dXJlLCB0 byBzaGFyZSBpbmZvcm1hdGlvbiB3aXRoIHN1YmRyaXZlcnMNCj4gICAqIEBpcnFfZG9tYWluOiAg ICBJUlEgZG9tYWluDQo+ICAgKiBAaXJxOiAJICAgSVJRIG51bWJlciBmb3IgbWZ4DQo+ICAgKiBA aXJxX2xvY2s6IAkgICBJUlEgYnVzIGxvY2sNCj4gICAqIEBpcnFlbjogCSAgIGNhY2hlIG9mIElS UV9TUkNfRU4gcmVnaXN0ZXIgZm9yIGJ1c19sb2NrDQo+ICAgKiBAb2xkaXJxZW46IAkgICBjYWNo ZSBvZiBJUlFfU1JDX0VOIHJlZ2lzdGVyIGZvciBidXNfbG9jaw0KPiAgICovDQo+IA0KPiBFYXNp ZXIgdG8gcmVhZD8NCj4gDQpJIHdpbGwgcGF5IGF0dGVudGlvbiB0byB0aGUgaW5kZW50YXRpb24g aW4gZ3BpbyBkcml2ZXIgVjIuDQo+PiArc3RydWN0IG1meF9wcml2IHsNCj4gDQo+IG1meF9kZGF0 YQ0KPiANCk9LLg0KPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+PiArCXN0cnVjdCByZWdtYXAg KnJlZ21hcDsNCj4+ICsJc3RydWN0IG1meCBtZng7DQo+PiArCXN0cnVjdCBpcnFfZG9tYWluICpp cnFfZG9tYWluOw0KPj4gKwlpbnQgaXJxOw0KPj4gKwlzdHJ1Y3QgbXV0ZXggaXJxX2xvY2s7IC8q IElSUSBidXMgbG9jayAqLw0KPj4gKwl1OCBpcnFlbjsNCj4+ICsJdTggb2xkaXJxZW47DQo+PiAr fTsNCj4+ICsNCj4+ICsjZGVmaW5lIHRvX21meF9wcml2KF9tZngpIGNvbnRhaW5lcl9vZihfbWZ4 LCBzdHJ1Y3QgbWZ4X3ByaXYsIG1meCkNCj4gDQo+IEZZSTogSSBkb24ndCBsaWtlIHRoaXMgaWRl YS4gIE1vcmUgdG8gZm9sbG93Lg0KPiANCj4+ICsvKiBNRlggYm9vdCB0aW1lIGlzIGFyb3VuZCAx MG1zLCBzbyBhZnRlciByZXNldCwgd2UgaGF2ZSB0byB3YWl0IHRoaXMgZGVsYXkgKi8NCj4+ICsj ZGVmaW5lIE1GWF9CT09UX1RJTUUgMTANCj4gDQo+IE1GWF9CT09UX1RJTUVfTVMNCj4gDQpPSy4N Cj4+ICtzdGF0aWMgdTggbWZ4X2Jsb2Nrc190b19tYXNrKHUzMiBibG9ja3MpDQo+IA0KPiBJIHRo aW5rIGl0IHdvdWxkIGJlIGJldHRlciB0byBwcmVwZW5kIGEgdmVuZG9yIHRhZyB0byBldmVyeXRo aW5nIHRvby4NCj4gDQo+ICAgIHN0X21meF8qDQo+IA0KT0suDQo+PiArew0KPj4gKwl1OCBtYXNr ID0gMDsNCj4+ICsNCj4+ICsJaWYgKGJsb2NrcyAmIE1GWF9CTE9DS19HUElPKQ0KPj4gKwkJbWFz ayB8PSBNRlhfUkVHX1NZU19DVFJMX0dQSU9fRU47DQo+PiArCWVsc2UNCj4+ICsJCW1hc2sgJj0g fk1GWF9SRUdfU1lTX0NUUkxfR1BJT19FTjsNCj4+ICsNCj4+ICsJaWYgKGJsb2NrcyAmIE1GWF9C TE9DS19UUykNCj4+ICsJCW1hc2sgfD0gTUZYX1JFR19TWVNfQ1RSTF9UU19FTjsNCj4+ICsJZWxz ZQ0KPj4gKwkJbWFzayAmPSB+TUZYX1JFR19TWVNfQ1RSTF9UU19FTjsNCj4+ICsNCj4+ICsJaWYg KGJsb2NrcyAmIE1GWF9CTE9DS19JREQpDQo+PiArCQltYXNrIHw9IE1GWF9SRUdfU1lTX0NUUkxf SUREX0VOOw0KPj4gKwllbHNlDQo+PiArCQltYXNrICY9IH5NRlhfUkVHX1NZU19DVFJMX0lERF9F TjsNCj4+ICsNCj4+ICsJaWYgKGJsb2NrcyAmIE1GWF9CTE9DS19BTFRHUElPKQ0KPj4gKwkJbWFz ayB8PSBNRlhfUkVHX1NZU19DVFJMX0FMVEdQSU9fRU47DQo+PiArCWVsc2UNCj4+ICsJCW1hc2sg Jj0gfk1GWF9SRUdfU1lTX0NUUkxfQUxUR1BJT19FTjsNCj4+ICsNCj4+ICsJcmV0dXJuIG1hc2s7 DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgbWZ4X3Jlc2V0KHN0cnVjdCBtZnggKm1meCkN Cj4+ICt7DQo+PiArCXN0cnVjdCBtZnhfcHJpdiAqbWZ4X3ByaXYgPSB0b19tZnhfcHJpdihtZngp Ow0KPj4gKwlpbnQgcmV0Ow0KPj4gKw0KPj4gKwlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMobWZ4 X3ByaXYtPnJlZ21hcCwgTUZYX1JFR19TWVNfQ1RSTCwNCj4+ICsJCQkJIE1GWF9SRUdfU1lTX0NU UkxfU1dSU1QsDQo+PiArCQkJCSBNRlhfUkVHX1NZU19DVFJMX1NXUlNUKTsNCj4+ICsNCj4+ICsJ aWYgKHJldCA8IDApDQo+PiArCQlyZXR1cm4gcmV0Ow0KPj4gKw0KPj4gKwltc2xlZXAoTUZYX0JP T1RfVElNRSk7DQo+PiArDQo+PiArCXJldHVybiByZXQ7DQo+PiArfQ0KPj4gKw0KPj4gK2ludCBt ZnhfYmxvY2tfcmVhZChzdHJ1Y3QgbWZ4ICptZngsIHU4IHJlZywgdTggbGVuZ3RoLCB1OCAqdmFs dWVzKQ0KPj4gK3sNCj4+ICsJc3RydWN0IG1meF9wcml2ICptZnhfcHJpdiA9IHRvX21meF9wcml2 KG1meCk7DQo+PiArDQo+PiArCXJldHVybiByZWdtYXBfYnVsa19yZWFkKG1meF9wcml2LT5yZWdt YXAsIHJlZywgdmFsdWVzLCBsZW5ndGgpOw0KPj4gK30NCj4+ICtFWFBPUlRfU1lNQk9MX0dQTCht ZnhfYmxvY2tfcmVhZCk7DQo+PiArDQo+PiAraW50IG1meF9ibG9ja193cml0ZShzdHJ1Y3QgbWZ4 ICptZngsIHU4IHJlZywgdTggbGVuZ3RoLCBjb25zdCB1OCAqdmFsdWVzKQ0KPj4gK3sNCj4+ICsJ c3RydWN0IG1meF9wcml2ICptZnhfcHJpdiA9IHRvX21meF9wcml2KG1meCk7DQo+PiArDQo+PiAr CXJldHVybiByZWdtYXBfYnVsa193cml0ZShtZnhfcHJpdi0+cmVnbWFwLCByZWcsIHZhbHVlcywg bGVuZ3RoKTsNCj4+ICt9DQo+PiArRVhQT1JUX1NZTUJPTF9HUEwobWZ4X2Jsb2NrX3dyaXRlKTsN Cj4+ICsNCj4+ICtpbnQgbWZ4X3JlZ19yZWFkKHN0cnVjdCBtZnggKm1meCwgdTggcmVnKQ0KPj4g K3sNCj4+ICsJc3RydWN0IG1meF9wcml2ICptZnhfcHJpdiA9IHRvX21meF9wcml2KG1meCk7DQo+ PiArCXUzMiB2YWw7DQo+PiArCWludCByZXQ7DQo+PiArDQo+PiArCXJldCA9IHJlZ21hcF9yZWFk KG1meF9wcml2LT5yZWdtYXAsIHJlZywgJnZhbCk7DQo+PiArDQo+PiArCXJldHVybiByZXQgPyBy ZXQgOiB2YWw7DQo+PiArfQ0KPj4gK0VYUE9SVF9TWU1CT0xfR1BMKG1meF9yZWdfcmVhZCk7DQo+ PiArDQo+PiAraW50IG1meF9yZWdfd3JpdGUoc3RydWN0IG1meCAqbWZ4LCB1OCByZWcsIHU4IHZh bCkNCj4+ICt7DQo+PiArCXN0cnVjdCBtZnhfcHJpdiAqbWZ4X3ByaXYgPSB0b19tZnhfcHJpdiht ZngpOw0KPj4gKw0KPj4gKwlyZXR1cm4gcmVnbWFwX3dyaXRlKG1meF9wcml2LT5yZWdtYXAsIHJl ZywgdmFsKTsNCj4+ICt9DQo+PiArRVhQT1JUX1NZTUJPTF9HUEwobWZ4X3JlZ193cml0ZSk7DQo+ PiArDQo+PiAraW50IG1meF9zZXRfYml0cyhzdHJ1Y3QgbWZ4ICptZngsIHU4IHJlZywgdTggbWFz aywgdTggdmFsKQ0KPj4gK3sNCj4+ICsJc3RydWN0IG1meF9wcml2ICptZnhfcHJpdiA9IHRvX21m eF9wcml2KG1meCk7DQo+PiArDQo+PiArCXJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMobWZ4X3By aXYtPnJlZ21hcCwgcmVnLCBtYXNrLCB2YWwpOw0KPj4gK30NCj4+ICtFWFBPUlRfU1lNQk9MX0dQ TChtZnhfc2V0X2JpdHMpOw0KPj4gKw0KPj4gK2ludCBtZnhfZW5hYmxlKHN0cnVjdCBtZnggKm1m eCwgdTMyIGJsb2NrcykNCj4+ICt7DQo+PiArCXN0cnVjdCBtZnhfcHJpdiAqbWZ4X3ByaXYgPSB0 b19tZnhfcHJpdihtZngpOw0KPj4gKwl1OCBtYXNrID0gbWZ4X2Jsb2Nrc190b19tYXNrKGJsb2Nr cyk7DQo+PiArDQo+PiArCXJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMobWZ4X3ByaXYtPnJlZ21h cCwgTUZYX1JFR19TWVNfQ1RSTCwNCj4+ICsJCQkJICBtYXNrLCBtYXNrKTsNCj4+ICt9DQo+PiAr RVhQT1JUX1NZTUJPTF9HUEwobWZ4X2VuYWJsZSk7DQo+PiArDQo+PiAraW50IG1meF9kaXNhYmxl KHN0cnVjdCBtZnggKm1meCwgdTMyIGJsb2NrcykNCj4+ICt7DQo+PiArCXN0cnVjdCBtZnhfcHJp diAqbWZ4X3ByaXYgPSB0b19tZnhfcHJpdihtZngpOw0KPj4gKwl1OCBtYXNrID0gbWZ4X2Jsb2Nr c190b19tYXNrKGJsb2Nrcyk7DQo+PiArDQo+PiArCXJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMo bWZ4X3ByaXYtPnJlZ21hcCwgTUZYX1JFR19TWVNfQ1RSTCwNCj4+ICsJCQkJICBtYXNrLCAwKTsN Cj4+ICt9DQo+PiArRVhQT1JUX1NZTUJPTF9HUEwobWZ4X2Rpc2FibGUpOw0KPiANCj4gVGhlIHJl bWFwIGluZnJhc3RydWN0dXJlIGRvZXNuJ3QgbmVlZCBmdXJ0aGVyIGFic3RyYWN0aW9uLiAgUGxl YXNlDQo+IHBhc3MgdGhlIHBvaW50ZXIgdG8gYW55IGNoaWxkIGRldmljZXMgYW5kIGhhdmUgdGhl bSB1c2UgaXQgZGlyZWN0bHkuDQo+IA0KSSB3aWxsIGtlZXAgaXQgaW4gbWluZCBpZiB0aGUgbmVl ZCBvZiBvdGhlciBmZWF0dXJlcyBhcnVzZXMsIGp1c3RpZnlpbmcgDQp0aGUgdXNlIG9mIGFuIE1G RC4NCj4+ICtzdGF0aWMgdm9pZCBtZnhfaXJxX2xvY2soc3RydWN0IGlycV9kYXRhICpkYXRhKQ0K Pj4gK3sNCj4+ICsJc3RydWN0IG1meF9wcml2ICptZnhfcHJpdiA9IGlycV9kYXRhX2dldF9pcnFf Y2hpcF9kYXRhKGRhdGEpOw0KPj4gKw0KPj4gKwltdXRleF9sb2NrKCZtZnhfcHJpdi0+aXJxX2xv Y2spOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBtZnhfaXJxX3N5bmNfdW5sb2NrKHN0 cnVjdCBpcnFfZGF0YSAqZGF0YSkNCj4+ICt7DQo+PiArCXN0cnVjdCBtZnhfcHJpdiAqbWZ4X3By aXYgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkYXRhKTsNCj4+ICsJdTggbmV3ID0gbWZ4 X3ByaXYtPmlycWVuOw0KPj4gKwl1OCBvbGQgPSBtZnhfcHJpdi0+b2xkaXJxZW47DQo+PiArDQo+ PiArCWlmIChuZXcgPT0gb2xkKQ0KPj4gKwkJZ290byB1bmxvY2s7DQo+PiArDQo+PiArCW1meF9w cml2LT5vbGRpcnFlbiA9IG5ldzsNCj4+ICsJbWZ4X3JlZ193cml0ZSgmbWZ4X3ByaXYtPm1meCwg TUZYX1JFR19JUlFfU1JDX0VOLCBuZXcpOw0KPj4gK3VubG9jazoNCj4+ICsJbXV0ZXhfdW5sb2Nr KCZtZnhfcHJpdi0+aXJxX2xvY2spOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBtZnhf aXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkYXRhKQ0KPj4gK3sNCj4+ICsJc3RydWN0IG1meF9w cml2ICptZnhfcHJpdiA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOw0KPj4gKw0K Pj4gKwltZnhfcHJpdi0+aXJxZW4gJj0gfkJJVChkYXRhLT5od2lycSAlIDgpOw0KPj4gK30NCj4+ ICsNCj4+ICtzdGF0aWMgdm9pZCBtZnhfaXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEp DQo+PiArew0KPj4gKwlzdHJ1Y3QgbWZ4X3ByaXYgKm1meF9wcml2ID0gaXJxX2RhdGFfZ2V0X2ly cV9jaGlwX2RhdGEoZGF0YSk7DQo+PiArDQo+PiArCW1meF9wcml2LT5pcnFlbiB8PSBCSVQoZGF0 YS0+aHdpcnEgJSA4KTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBt ZnhfaXJxX2NoaXAgPSB7DQo+PiArCS5uYW1lCQkJPSAibWZ4IiwNCj4+ICsJLmlycV9idXNfbG9j awkJPSBtZnhfaXJxX2xvY2ssDQo+PiArCS5pcnFfYnVzX3N5bmNfdW5sb2NrCT0gbWZ4X2lycV9z eW5jX3VubG9jaywNCj4+ICsJLmlycV9tYXNrCQk9IG1meF9pcnFfbWFzaywNCj4+ICsJLmlycV91 bm1hc2sJCT0gbWZ4X2lycV91bm1hc2ssDQo+PiArfTsNCj4+ICsNCj4+ICtzdGF0aWMgaXJxcmV0 dXJuX3QgbWZ4X2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQ0KPj4gK3sNCj4+ICsJc3RydWN0IG1m eF9wcml2ICptZnhfcHJpdiA9IGRhdGE7DQo+IA0KPiAnZGRhdGEnIGlzIGEgbW9yZSBjb25zaXN0 ZW50IG5hbWluZyBhcHByb2FjaC4NCj4gDQpPSy4NCj4+ICsJdW5zaWduZWQgbG9uZyBzdGF0dXMs IGJpdDsNCj4+ICsJdTggYWNrOw0KPj4gKwlpbnQgcmV0Ow0KPj4gKw0KPj4gKwlyZXQgPSBtZnhf cmVnX3JlYWQoJm1meF9wcml2LT5tZngsIE1GWF9SRUdfSVJRX1BFTkRJTkcpOw0KPj4gKwlpZiAo cmV0IDwgMCkgew0KPj4gKwkJZGV2X2VycihtZnhfcHJpdi0+ZGV2LCAiY2FuJ3QgZ2V0IElSUV9Q RU5ESU5HOiAlZFxuIiwgcmV0KTsNCj4+ICsJCXJldHVybiBJUlFfTk9ORTsNCj4+ICsJfQ0KPj4g Kw0KPj4gKwkvKiBJdCBjYW4gYmUgR1BJTywgSURELCBFUlJPUiwgVFMqIElSUXMgKi8NCj4+ICsJ c3RhdHVzID0gcmV0ICYgbWZ4X3ByaXYtPmlycWVuOw0KPj4gKw0KPj4gKwkvKg0KPj4gKwkgKiBU aGVyZSBpcyBubyBBQ0sgZm9yIEdQSU8sIE1GWF9SRUdfSVJRX1BFTkRJTkdfR1BJTyBpcyBhIGxv Z2ljYWwgT1INCj4+ICsJICogb2YgTUZYX1JFR19JUlFfR1BJIF9QRU5ESU5HMS9fUEVORElORzIv X1BFTkRJTkczDQo+PiArCSAqLw0KPj4gKwlhY2sgPSBzdGF0dXMgJiB+TUZYX1JFR19JUlFfUEVO RElOR19HUElPOw0KPj4gKw0KPj4gKwlmb3JfZWFjaF9zZXRfYml0KGJpdCwgJnN0YXR1cywgOCkN Cj4+ICsJCWhhbmRsZV9uZXN0ZWRfaXJxKGlycV9maW5kX21hcHBpbmcobWZ4X3ByaXYtPmlycV9k b21haW4sIGJpdCkpOw0KPj4gKw0KPj4gKwlpZiAoYWNrKQ0KPj4gKwkJbWZ4X3JlZ193cml0ZSgm bWZ4X3ByaXYtPm1meCwgTUZYX1JFR19JUlFfQUNLLCBhY2spOw0KPj4gKw0KPj4gKwlyZXR1cm4g SVJRX0hBTkRMRUQ7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgbWZ4X2lycV9tYXAoc3Ry dWN0IGlycV9kb21haW4gKmQsIHVuc2lnbmVkIGludCB2aXJxLA0KPj4gKwkJICAgICAgIGlycV9o d19udW1iZXJfdCBod2lycSkNCj4+ICt7DQo+PiArCXN0cnVjdCBtZnhfcHJpdiAqbWZ4X3ByaXYg PSBkLT5ob3N0X2RhdGE7DQo+PiArDQo+PiArCWlycV9zZXRfY2hpcF9kYXRhKHZpcnEsIG1meF9w cml2KTsNCj4+ICsJaXJxX3NldF9jaGlwKHZpcnEsICZtZnhfaXJxX2NoaXApOw0KPj4gKwlpcnFf c2V0X25lc3RlZF90aHJlYWQodmlycSwgMSk7DQo+PiArCWlycV9zZXRfcGFyZW50KHZpcnEsIG1m eF9wcml2LT5pcnEpOw0KPj4gKwlpcnFfc2V0X25vcHJvYmUodmlycSk7DQo+PiArDQo+PiArCXJl dHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBtZnhfaXJxX3VubWFwKHN0cnVj dCBpcnFfZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgdmlycSkNCj4+ICt7DQo+PiArCWlycV9zZXRf Y2hpcF9hbmRfaGFuZGxlcih2aXJxLCBOVUxMLCBOVUxMKTsNCj4+ICsJaXJxX3NldF9jaGlwX2Rh dGEodmlycSwgTlVMTCk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXJx X2RvbWFpbl9vcHMgbWZ4X2lycV9vcHMgPSB7DQo+PiArCS5tYXAgPSBtZnhfaXJxX21hcCwNCj4+ ICsJLnVubWFwID0gbWZ4X2lycV91bm1hcCwNCj4+ICsJLnhsYXRlID0gaXJxX2RvbWFpbl94bGF0 ZV9vbmVjZWxsLA0KPj4gK307DQo+PiArDQo+PiArc3RhdGljIGludCBtZnhfaXJxX2luaXQoc3Ry dWN0IG1meF9wcml2ICptZnhfcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICpucCkNCj4+ICt7DQo+ PiArCWludCBpcnFvdXRwaW4gPSBNRlhfUkVHX0lSUV9PVVRfUElOX1RZUEU7IC8qIFB1c2gtUHVs bCAqLw0KPj4gKwlpbnQgaXJxdHJpZ2dlciwgcmV0Ow0KPj4gKw0KPj4gKwltZnhfcHJpdi0+aXJx ID0gb2ZfaXJxX2dldChucCwgMCk7DQo+PiArCWlmIChtZnhfcHJpdi0+aXJxID4gMCkgew0KPj4g KwkJaXJxdHJpZ2dlciA9IGlycV9nZXRfdHJpZ2dlcl90eXBlKG1meF9wcml2LT5pcnEpOw0KPj4g Kwl9IGVsc2Ugew0KPj4gKwkJZGV2X2VycihtZnhfcHJpdi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBp cnE6ICVkXG4iLA0KPj4gKwkJCW1meF9wcml2LT5pcnEpOw0KPj4gKwkJcmV0dXJuIG1meF9wcml2 LT5pcnE7DQo+PiArCX0NCj4+ICsNCj4+ICsJaWYgKChpcnF0cmlnZ2VyICYgSVJRX1RZUEVfRURH RV9GQUxMSU5HKSB8fA0KPj4gKwkgICAgKGlycXRyaWdnZXIgJiBJUlFfVFlQRV9MRVZFTF9MT1cp KQ0KPj4gKwkJaXJxb3V0cGluICY9IH5NRlhfUkVHX0lSUV9PVVRfUElOX1BPTDsgLyogQWN0aXZl IExvdyAqLw0KPj4gKwllbHNlDQo+PiArCQlpcnFvdXRwaW4gfD0gTUZYX1JFR19JUlFfT1VUX1BJ Tl9QT0w7IC8qIEFjdGl2ZSBIaWdoICovDQo+PiArDQo+PiArCW1meF9yZWdfd3JpdGUoJm1meF9w cml2LT5tZngsIE1GWF9SRUdfSVJRX09VVF9QSU4sIGlycW91dHBpbik7DQo+PiArDQo+PiArCW1m eF9wcml2LT5pcnFfZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfbGluZWFyKG5wLCBNRlhfSVJRX1NS Q19OUiwNCj4+ICsJCQkJCQkgICAgICZtZnhfaXJxX29wcywgbWZ4X3ByaXYpOw0KPj4gKwlpZiAo IW1meF9wcml2LT5pcnFfZG9tYWluKSB7DQo+PiArCQlkZXZfZXJyKG1meF9wcml2LT5kZXYsICJm YWlsZWQgdG8gY3JlYXRlIGlycSBkb21haW5cbiIpOw0KPj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ PiArCX0NCj4+ICsNCj4+ICsJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShtZnhfcHJp di0+ZGV2LCBtZnhfcHJpdi0+aXJxLA0KPj4gKwkJCQkJTlVMTCwgbWZ4X2lycSwNCj4+ICsJCQkJ CWlycXRyaWdnZXIgfCBJUlFGX09ORVNIT1QsICJtZngiLA0KPj4gKwkJCQkJbWZ4X3ByaXYpOw0K Pj4gKwlpZiAocmV0KSB7DQo+PiArCQlkZXZfZXJyKG1meF9wcml2LT5kZXYsICJmYWlsZWQgdG8g cmVxdWVzdCBpcnE6ICVkXG4iLCByZXQpOw0KPj4gKwkJaXJxX2RvbWFpbl9yZW1vdmUobWZ4X3By aXYtPmlycV9kb21haW4pOw0KPj4gKwkJcmV0dXJuIHJldDsNCj4+ICsJfQ0KPj4gKw0KPj4gKwly ZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgbWZ4X2lycV9yZW1vdmUoc3Ry dWN0IG1meF9wcml2ICptZnhfcHJpdikNCj4+ICt7DQo+PiArCWludCBod2lycTsNCj4+ICsNCj4+ ICsJZm9yIChod2lycSA9IDA7IGh3aXJxIDwgTUZYX0lSUV9TUkNfTlI7IGh3aXJxKyspDQo+PiAr CQlpcnFfZGlzcG9zZV9tYXBwaW5nKGlycV9maW5kX21hcHBpbmcobWZ4X3ByaXYtPmlycV9kb21h aW4sDQo+PiArCQkJCQkJICAgICBod2lycSkpOw0KPj4gKwlpcnFfZG9tYWluX3JlbW92ZShtZnhf cHJpdi0+aXJxX2RvbWFpbik7DQo+PiArfQ0KPiANCj4gSXMgdGhlcmUgYW55IHJlYXNvbiB3aHkg dGhpcyBJUlEgc3R1ZmYgY2FuJ3QgbGl2ZSBpbiB0aGUgR1BJTyBkcml2ZXI/DQo+IA0KTUZYIGhh cyBhIGZpcnN0IGxldmVsIG9mIGludGVycnVwdHMgKDggc291cmNlcyksIHdpdGggdG91c2NyZWVu IA0KaW50ZXJydXB0cywgaWRkIGludGVycnVwdCBhbmQgZ3BpbyBpbnRlcnJ1cHQuIFRoZW4gZ3Bp byBoYXMgaXRzIG93biANCmxldmVsIG9mIGludGVycnVwdHMsIHdpdGggMjQgcG9zc2libGUgc291 cmNlcy4NCkdQSU8gaW50ZXJydXB0cyBhcmUgcmFpc2VkIHRocm91Z2ggTUZYX0lSUV9PVVQgcGlu IG9ubHkgaWYgYXQgbGVhc3Qgb25lIA0Kc291cmNlIGlzIGVuYWJsZWQgYXQgZ3BpbyBsZXZlbCwg YW5kIGdwaW8gaW50ZXJydXB0IGlzIGVuYWJsZWQgYXQgTUZYIGxldmVsLg0KICAgICAgICAgICAg ICAgX1RTX09WRg0KICAgICAgICAgICAgICB8X1RTX0ZVTEwNCiAgICAgICAgICAgICAgfF9UU19U SA0KICAgICAgICAgICAgICB8X1RTX05FDQpNRlhfSVJRX09VVCA8IF9UU19ERVQNCiAgICAgICAg ICAgICAgfF9FUlJPUihJREQpICAgICBfIEdQSU8wDQogICAgICAgICAgICAgIHxfSUREICAgICAg ICAgICB8DQogICAgICAgICAgICAgIHxfR1BJTy0tLS0tLS0tLTwuLi4NCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHxfIEdQSU8yMw0KPj4gK3N0YXRpYyBpbnQgbWZ4X2NoaXBfaW5pdChz dHJ1Y3QgbWZ4X3ByaXYgKm1meF9wcml2LCB1MTYgaTJjX2FkZHIpDQo+PiArew0KPj4gKwlzdHJ1 Y3QgbWZ4ICptZnggPSAmbWZ4X3ByaXYtPm1meDsNCj4+ICsJaW50IHJldDsNCj4+ICsJaW50IGlk Ow0KPj4gKwl1OCB2ZXJzaW9uWzJdOw0KPj4gKw0KPj4gKwlpZCA9IG1meF9yZWdfcmVhZChtZngs IE1GWF9SRUdfQ0hJUF9JRCk7DQo+PiArCWlmIChpZCA8IDApIHsNCj4+ICsJCWRldl9lcnIobWZ4 X3ByaXYtPmRldiwgImVycm9yIHJlYWRpbmcgY2hpcCBpZDogJWRcbiIsIGlkKTsNCj4+ICsJCXJl dHVybiBpZDsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlyZXQgPSBtZnhfYmxvY2tfcmVhZChtZngsIE1G WF9SRUdfRldfVkVSU0lPTl9NU0IsDQo+PiArCQkJICAgICBBUlJBWV9TSVpFKHZlcnNpb24pLCB2 ZXJzaW9uKTsNCj4+ICsJaWYgKHJldCA8IDApIHsNCj4+ICsJCWRldl9lcnIobWZ4X3ByaXYtPmRl diwgImVycm9yIHJlYWRpbmcgZncgdmVyc2lvbjogJWRcbiIsIHJldCk7DQo+PiArCQlyZXR1cm4g cmV0Ow0KPj4gKwl9DQo+PiArDQo+PiArCS8qDQo+PiArCSAqIENoZWNrIHRoYXQgSUQgaXMgdGhl IGNvbXBsZW1lbnQgb2YgdGhlIEkyQyBhZGRyZXNzOg0KPj4gKwkgKiBNRlggSTJDIGFkZHJlc3Mg Zm9sbG93cyB0aGUgNy1iaXQgZm9ybWF0IChNU0IpLCB0aGF0J3Mgd2h5DQo+PiArCSAqIGkyY19h ZGRyIGlzIHNoaWZ0ZWQuDQo+PiArCSAqDQo+PiArCSAqIE1GWF9JMkNfQUREUiB8ICAgICAgICAg TUZYICAgICAgICAgfCAgICAgICAgTGludXgNCj4+ICsJICogIGlucHV0IHBpbiAgIHwgSTJDIGRl dmljZSBhZGRyZXNzICB8IEkyQyBkZXZpY2UgYWRkcmVzcw0KPj4gKwkgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+PiArCSAqICAgICAg MCAgICAgICB8IGI6IDEwMDAgMDEweCBoOjB4ODQgfCAgICAgICAweDQyDQo+PiArCSAqICAgICAg MSAgICAgICB8IGI6IDEwMDAgMDExeCBoOjB4ODYgfCAgICAgICAweDQzDQo+PiArCSAqLw0KPj4g KwlpZiAoRklFTERfR0VUKE1GWF9SRUdfQ0hJUF9JRF9NQVNLLCB+aWQpICE9IChpMmNfYWRkciA8 PCAxKSkgew0KPj4gKwkJZGV2X2VycihtZnhfcHJpdi0+ZGV2LCAidW5rbm93biBjaGlwIGlkOiAl I3hcbiIsIGlkKTsNCj4+ICsJCXJldHVybiAtRUlOVkFMOw0KPj4gKwl9DQo+PiArDQo+PiArCWRl dl9pbmZvKG1meF9wcml2LT5kZXYsICJTVC1NRlggY2hpcCBpZDogJSN4LCBmdyB2ZXJzaW9uOiAl eC4lMDJ4XG4iLA0KPj4gKwkJIGlkLCB2ZXJzaW9uWzBdLCB2ZXJzaW9uWzFdKTsNCj4+ICsNCj4+ ICsJLyogRGlzYWJsZSBhbGwgZmVhdHVyZXMsIHN1YmRyaXZlcnMgc2hvdWxkIGVuYWJsZSB3aGF0 IHRoZXkgbmVlZCAqLw0KPj4gKwlyZXQgPSBtZnhfZGlzYWJsZShtZngsIH4wKTsNCj4+ICsJaWYg KHJldCkNCj4+ICsJCXJldHVybiByZXQ7DQo+PiArDQo+PiArCXJldHVybiBtZnhfcmVzZXQobWZ4 KTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIG1m eF9yZWdtYXBfY29uZmlnID0gew0KPj4gKwkucmVnX2JpdHMgPSA4LA0KPj4gKwkudmFsX2JpdHMg PSA4LA0KPj4gK307DQo+PiArDQo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQg bWZ4X29mX21hdGNoW10gPSB7DQo+PiArCXsgLmNvbXBhdGlibGUgPSAic3QsbWZ4IiB9LA0KPj4g Kwl7IH0NCj4+ICt9Ow0KPj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG1meF9vZl9tYXRjaCk7 DQo+PiArDQo+PiArc3RhdGljIGludCBtZnhfb2ZfcHJvYmUoc3RydWN0IGRldmljZV9ub2RlICpu cCwgc3RydWN0IG1meF9wcml2ICptZnhfcHJpdikNCj4+ICt7DQo+PiArCXN0cnVjdCBkZXZpY2Vf bm9kZSAqY2hpbGQ7DQo+PiArDQo+PiArCWlmICghbnApDQo+PiArCQlyZXR1cm4gLUVOT0RFVjsN Cj4gDQo+IElzIHRoaXMgZXZlbiBwb3NzaWJsZT8NCj4gDQo+IERvIHlvdSBzdXBwb3J0ICFPRj8N Cj4gDQpOby4NCj4+ICsJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShucCwgY2hpbGQpIHsNCj4+ICsJ CWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShjaGlsZCwgInN0LG1meC1ncGlvIikpIHsNCj4+ ICsJCQltZnhfcHJpdi0+bWZ4LmJsb2NrcyB8PSBNRlhfQkxPQ0tfR1BJTzsNCj4+ICsJCQltZnhf cHJpdi0+bWZ4Lm51bV9ncGlvID0gMTY7DQo+IA0KPiBUaGlzIGlzIHVnbHkuDQo+IA0KPiBXaGVy ZSBpcyBudW1fZ3BpbyB1c2VkPw0KPiANCldhcyB1c2VkIGluIGdwaW8gZHJpdmVyLiBCdXQgYW55 d2F5IHRoaXMgd2lsbCBkaXNhcHBlYXIgaW4gVjIuDQo+PiArCQl9DQo+PiArCQkvKg0KPj4gKwkJ ICogSGVyZSB3ZSBjb3VsZCBmaW5kIG90aGVyIGNoaWxkcmVuIGxpa2UgInN0LG1meC10cyIgb3IN Cj4+ICsJCSAqICJzdCxtZngtaWRkLg0KPj4gKwkJICovDQo+PiArCX0NCj4+ICsNCj4+ICsJaWYg KCEobWZ4X3ByaXYtPm1meC5ibG9ja3MgJiBNRlhfQkxPQ0tfVFMpICYmDQo+PiArCSAgICAhKG1m eF9wcml2LT5tZnguYmxvY2tzICYgTUZYX0JMT0NLX0lERCkpIHsNCj4+ICsJCW1meF9wcml2LT5t ZnguYmxvY2tzIHw9IE1GWF9CTE9DS19BTFRHUElPOw0KPj4gKwkJbWZ4X3ByaXYtPm1meC5udW1f Z3BpbyArPSA4Ow0KPj4gKwl9DQo+IA0KPiBXaGF0IGFyZSBUUyBhbmQgSUREPw0KPiANCj4gVGhp cyBpcyBzdGFydGluZyB0byBsb29rIGxpa2UgYSBHUElPIGRyaXZlciwgYW5kIG5vdGhpbmcgbW9y ZS4NCj4gDQpXaXRob3V0IHRvdXNjaHJlZW4gY29udHJvbGxlciBkcml2ZXIgYW5kIGlkZCBtZWFz dXJlbWVudCBkcml2ZXIsIA0KZGVmaW5pdGVseSB5ZXMuDQo+PiArCS8qDQo+PiArCSAqIFRPRE86 IGFHUElPWzM6MF0gYW5kIGFHUElPWzc6NF0gY2FuIGJlIHVzZWQgaW5kZXBlbmRlbnRseToNCj4+ ICsJICogLSBpZiBJREQgaXMgdXNlZCBidXQgbm90IFRTLCBhR1BJT1szOjBdIGNhbiBiZSB1c2Vk IGFzIEdQSU8sDQo+PiArCSAqIC0gaWYgVFMgaXMgdXNlZCBidXQgbm90IElERDogYUdQSU9bNzo0 XSBjYW4gYmUgdXNlZCBhcyBHUElPLg0KPj4gKwkgKi8NCj4+ICsNCj4+ICsJcmV0dXJuIG9mX3Bs YXRmb3JtX3BvcHVsYXRlKG5wLCBOVUxMLCBOVUxMLCBtZnhfcHJpdi0+ZGV2KTsNCj4+ICt9DQo+ PiArDQo+PiAraW50IG1meF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCBz dHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpDQo+PiArew0KPj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUg Km5wID0gY2xpZW50LT5kZXYub2Zfbm9kZTsNCj4+ICsJc3RydWN0IG1meF9wcml2ICptZnhfcHJp djsNCj4+ICsJaW50IHJldDsNCj4+ICsNCj4+ICsJbWZ4X3ByaXYgPSBkZXZtX2t6YWxsb2MoJmNs aWVudC0+ZGV2LCBzaXplb2Yoc3RydWN0IG1meF9wcml2KSwNCj4+ICsJCQkJR0ZQX0tFUk5FTCk7 DQo+PiArCWlmICghbWZ4X3ByaXYpDQo+PiArCQlyZXR1cm4gLUVOT01FTTsNCj4+ICsNCj4+ICsJ bWZ4X3ByaXYtPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGNsaWVudCwgJm1meF9yZWdt YXBfY29uZmlnKTsNCj4+ICsJaWYgKElTX0VSUihtZnhfcHJpdi0+cmVnbWFwKSkgew0KPj4gKwkJ cmV0ID0gUFRSX0VSUihtZnhfcHJpdi0+cmVnbWFwKTsNCj4+ICsJCWRldl9lcnIoJmNsaWVudC0+ ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIHJlZ2lzdGVyIG1hcDogJWRcbiIsDQo+PiArCQkJcmV0 KTsNCj4gDQo+IE5pdDogUHJlZmVyIGlmIHlvdSBicm9rZSB0aGUgbGluZSBhZnRlciAnJmNsaWVu dC0+ZGV2LCcuDQo+IA0KT0suDQo+PiArCQlyZXR1cm4gcmV0Ow0KPj4gKwl9DQo+PiArDQo+PiAr CW1meF9wcml2LT5kZXYgPSAmY2xpZW50LT5kZXY7DQo+IA0KPiANCj4+ICsJaTJjX3NldF9jbGll bnRkYXRhKGNsaWVudCwgJm1meF9wcml2LT5tZngpOw0KPj4gKw0KPj4gKwltdXRleF9pbml0KCZt ZnhfcHJpdi0+aXJxX2xvY2spOw0KPj4gKw0KPj4gKwlyZXQgPSBtZnhfY2hpcF9pbml0KG1meF9w cml2LCBjbGllbnQtPmFkZHIpOw0KPj4gKwlpZiAocmV0KSB7DQo+PiArCQlpZiAocmV0ID09IC1F VElNRURPVVQpDQo+PiArCQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7DQo+IA0KPiBSZXR1cm4gLUVQ Uk9CRV9ERUZFUiBmcm9tIHJlc2V0KCkgaW5zdGVhZC4NCj4gDQpPSy4NCj4+ICsJCXJldHVybiBy ZXQ7DQo+PiArCX0NCj4+ICsNCj4+ICsJcmV0ID0gbWZ4X2lycV9pbml0KG1meF9wcml2LCBucCk7 DQo+PiArCWlmIChyZXQgPCAwKQ0KPj4gKwkJcmV0dXJuIHJldDsNCj4+ICsNCj4+ICsJcmV0ID0g bWZ4X29mX3Byb2JlKG5wLCBtZnhfcHJpdik7DQo+PiArCWlmIChyZXQgPCAwKQ0KPj4gKwkJcmV0 dXJuIHJldDsNCj4gDQo+IElzIGl0IHBvc3NpYmxlIHRvIGJ1aWxkIHdpdGggIU9GPw0KPiANCj4g SWYgbm90LCBtb3ZlIGFsbCBwcm9iZSBjb2RlIGludG8gaGVyZS4NCj4gDQo+PiArCWRldl9pbmZv KG1meF9wcml2LT5kZXYsICJTVC1NRlggKENPUkUpIGluaXRpYWxpemVkXG4iKTsNCj4gDQo+IFRo ZXNlIGtpbmRzIG9mIG1lc3NhZ2VzIGFyZSB1c3VhbGx5IGZyb3duZWQgdXBvbi4NCj4gDQpPSy4N Cj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgbWZ4X3JlbW92ZShz dHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQ0KPj4gK3sNCj4+ICsJc3RydWN0IG1meF9wcml2ICpt ZnhfcHJpdiA9IHRvX21meF9wcml2KGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsNCj4+ICsN Cj4+ICsJbWZ4X2lycV9yZW1vdmUobWZ4X3ByaXYpOw0KPj4gKwlvZl9wbGF0Zm9ybV9kZXBvcHVs YXRlKG1meF9wcml2LT5kZXYpOw0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+ PiArI2lmZGVmIENPTkZJR19QTV9TTEVFUA0KPj4gK3N0YXRpYyBpbnQgbWZ4X3N1c3BlbmQoc3Ry dWN0IGRldmljZSAqZGV2KQ0KPj4gK3sNCj4+ICsJc3RydWN0IG1meF9wcml2ICptZnhfcHJpdiA9 IHRvX21meF9wcml2KGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsNCj4+ICsNCj4+ICsJaWYgKGRldmlj ZV9tYXlfd2FrZXVwKGRldikpDQo+PiArCQllbmFibGVfaXJxX3dha2UobWZ4X3ByaXYtPmlycSk7 DQo+PiArDQo+PiArCS8qDQo+PiArCSAqIFRPRE86IERvIHdlIHB1dCBNRlggaW4gU1RBTkRCWSBt b2RlID8NCj4+ICsJICogKFdha2V1cCBieSByaXNpbmcgZWRnZSBvbiBNRlhfd2FrZXVwIHBpbikN Cj4+ICsJICovDQo+IA0KPiBIb3cgbG9uZyBiZWZvcmUgeW91IGFuc3dlciB0aGlzIHF1ZXN0aW9u Pw0KPiANCj4gQmV0dGVyIGRvIGp1c3QgZW5hYmxlIGl0IHJpZ2h0IGF3YXkgb3IgbWFrZSBhIG1l bnRhbCBub3RlIGFuZCByZW1vdmUNCj4gdGhlIGNvbW1lbnQgZnJvbSB0aGUgdXBzdHJlYW0gZHJp dmVyLg0KPiANCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgbWZ4 X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+PiArew0KPj4gKwlzdHJ1Y3QgbWZ4X3ByaXYg Km1meF9wcml2ID0gdG9fbWZ4X3ByaXYoZGV2X2dldF9kcnZkYXRhKGRldikpOw0KPj4gKw0KPj4g KwlpZiAoZGV2aWNlX21heV93YWtldXAoZGV2KSkNCj4+ICsJCWRpc2FibGVfaXJxX3dha2UobWZ4 X3ByaXYtPmlycSk7DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsjZW5kaWYNCj4+ ICsNCj4+ICtzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMobWZ4X2Rldl9wbV9vcHMsIG1meF9zdXNw ZW5kLCBtZnhfcmVzdW1lKTsNCj4+ICsNCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZp Y2VfaWQgbWZ4X2kyY19pZFtdID0gew0KPj4gKwl7ICJtZngiLCB9LA0KPj4gKwl7fSwNCj4+ICt9 Ow0KPj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBtZnhfaWQpOw0KPiANCj4gSSBkb24ndCB0 aGluayB0aGlzIGlzIHJlcXVpcmVkIGFueW1vcmUuDQo+IA0KWW91J3JlIHJpZ2h0Lg0KDQpUaGFu a3MgZm9yIHJldmlldywNCkFtZWxpZQ0KPj4gK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtZnhf ZHJpdmVyID0gew0KPj4gKwkuZHJpdmVyID0gew0KPj4gKwkJLm5hbWUgPSAic3QtbWZ4IiwNCj4+ ICsJCS5wbSA9ICZtZnhfZGV2X3BtX29wcywNCj4+ICsJCS5vZl9tYXRjaF90YWJsZSA9IG1meF9v Zl9tYXRjaCwNCj4+ICsJfSwNCj4+ICsJLnByb2JlID0gbWZ4X3Byb2JlLA0KPj4gKwkucmVtb3Zl ID0gbWZ4X3JlbW92ZSwNCj4+ICsJLmlkX3RhYmxlID0gbWZ4X2kyY19pZCwNCj4+ICt9Ow0KPj4g Kw0KPj4gK3N0YXRpYyBpbnQgX19pbml0IG1meF9pbml0KHZvaWQpDQo+PiArew0KPj4gKwlyZXR1 cm4gaTJjX2FkZF9kcml2ZXIoJm1meF9kcml2ZXIpOw0KPj4gK30NCj4+ICtzdWJzeXNfaW5pdGNh bGwobWZ4X2luaXQpOw0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIF9fZXhpdCBtZnhfZXhpdCh2b2lk KQ0KPj4gK3sNCj4+ICsJaTJjX2RlbF9kcml2ZXIoJm1meF9kcml2ZXIpOw0KPj4gK30NCj4+ICtt b2R1bGVfZXhpdChtZnhfZXhpdCk7DQo+PiArDQo+PiArTU9EVUxFX0RFU0NSSVBUSU9OKCJTVE1p Y3JvZWxlY3Ryb25pY3MgTXVsdGktRnVuY3Rpb24gZVhwYW5kZXIgTUZEIGNvcmUgZHJpdmVyIik7 DQo+PiArTU9EVUxFX0FVVEhPUigiQW1lbGllIERlbGF1bmF5IDxhbWVsaWUuZGVsYXVuYXlAc3Qu Y29tPiIpOw0KPj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsNCj4+IGRpZmYgLS1naXQgYS9p bmNsdWRlL2xpbnV4L21mZC9zdC1tZnguaCBiL2luY2x1ZGUvbGludXgvbWZkL3N0LW1meC5oDQo+ PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPj4gaW5kZXggMDAwMDAwMC4uMWJmN2U2NQ0KPj4gLS0t IC9kZXYvbnVsbA0KPj4gKysrIGIvaW5jbHVkZS9saW51eC9tZmQvc3QtbWZ4LmgNCj4+IEBAIC0w LDAgKzEsMTE2IEBADQo+PiArLyoNCj4+ICsgKiBTVE1pY3JvZWxlY3Ryb25pY3MgTXVsdGktRnVu Y3Rpb24gZVhwYW5kZXIgKFNULU1GWCkNCj4+ICsgKg0KPj4gKyAqIENvcHlyaWdodCAoQykgMjAx NywgU1RNaWNyb2VsZWN0cm9uaWNzIC0gQWxsIFJpZ2h0cyBSZXNlcnZlZA0KPj4gKyAqIEF1dGhv cihzKTogQW1lbGllIERlbGF1bmF5IDxhbWVsaWUuZGVsYXVuYXlAc3QuY29tPiBmb3IgU1RNaWNy b2VsZWN0cm9uaWNzLg0KPj4gKyAqDQo+PiArICogTGljZW5zZSB0ZXJtczogR1BMIFYyLjAuDQo+ PiArICoNCj4+ICsgKiBzdC1tZnggaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeSBpdA0KPj4gKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQ0KPj4gKyAq IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uDQo+PiArICoNCj4+ICsgKiBzdC1tZnggaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQo+PiAr ICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3INCj4+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQ0KPj4g KyAqIGRldGFpbHMuDQo+PiArICoNCj4+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoDQo+PiArICog c3QtbWZ4LiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uDQo+PiAr ICovDQo+PiArDQo+PiArI2lmbmRlZiBfX01GRF9TVF9NRlhfSA0KPj4gKyNkZWZpbmUgX19NRkRf U1RfTUZYX0gNCj4+ICsNCj4+ICtlbnVtIG1meF9ibG9jayB7DQo+PiArCU1GWF9CTE9DS19HUElP CQk9IEJJVCgwKSwNCj4+ICsJTUZYX0JMT0NLX1RTCQk9IEJJVCgxKSwNCj4+ICsJTUZYX0JMT0NL X0lERAkJPSBCSVQoMiksDQo+PiArCU1GWF9CTE9DS19BTFRHUElPCT0gQklUKDMpLA0KPj4gK307 DQo+PiArDQo+PiArLyoNCj4+ICsgKiA4IGV2ZW50cyBjYW4gYWN0aXZhdGUgdGhlIE1GWF9JUlFf T1VUIHNpZ25hbCwNCj4+ICsgKiBidXQgZm9yIHRoZSBtb21lbnQsIG9ubHkgR1BJTyBldmVudCBp cyB1c2VkDQo+PiArICovDQo+PiArZW51bSBtZnhfaXJxIHsNCj4+ICsJTUZYX0lSUV9TUkNfR1BJ TywNCj4+ICsNCj4+ICsJTUZYX0lSUV9TUkNfTlIsDQo+PiArfTsNCj4+ICsNCj4+ICsvKioNCj4+ ICsgKiBzdHJ1Y3QgbWZ4IC0gTUZYIE1GRCBzdHJ1Y3R1cmUNCj4+ICsgKiBAYmxvY2tzOiBtYXNr IG9mIG1meF9ibG9jayB0byBiZSBlbmFibGVkDQo+PiArICogQG51bV9ncGlvOiBudW1iZXIgb2Yg Z3Bpb3MNCj4+ICsgKi8NCj4+ICtzdHJ1Y3QgbWZ4IHsNCj4+ICsJdTMyIGJsb2NrczsNCj4+ICsJ dTMyIG51bV9ncGlvOw0KPj4gK307DQo+PiArDQo+PiAraW50IG1meF9yZWdfd3JpdGUoc3RydWN0 IG1meCAqbWZ4LCB1OCByZWcsIHU4IGRhdGEpOw0KPj4gK2ludCBtZnhfcmVnX3JlYWQoc3RydWN0 IG1meCAqbWZ4LCB1OCByZWcpOw0KPj4gK2ludCBtZnhfYmxvY2tfcmVhZChzdHJ1Y3QgbWZ4ICpt ZngsIHU4IHJlZywgdTggbGVuZ3RoLCB1OCAqdmFsdWVzKTsNCj4+ICtpbnQgbWZ4X2Jsb2NrX3dy aXRlKHN0cnVjdCBtZnggKm1meCwgdTggcmVnLCB1OCBsZW5ndGgsIGNvbnN0IHU4ICp2YWx1ZXMp Ow0KPj4gK2ludCBtZnhfc2V0X2JpdHMoc3RydWN0IG1meCAqbWZ4LCB1OCByZWcsIHU4IG1hc2ss IHU4IHZhbCk7DQo+PiAraW50IG1meF9lbmFibGUoc3RydWN0IG1meCAqbWZ4LCB1bnNpZ25lZCBp bnQgYmxvY2tzKTsNCj4+ICtpbnQgbWZ4X2Rpc2FibGUoc3RydWN0IG1meCAqbWZ4LCB1bnNpZ25l ZCBpbnQgYmxvY2tzKTsNCj4+ICsNCj4+ICsvKiBHZW5lcmFsICovDQo+PiArI2RlZmluZSBNRlhf UkVHX0NISVBfSUQJCQkweDAwIC8qIFIgKi8NCj4+ICsjZGVmaW5lIE1GWF9SRUdfRldfVkVSU0lP Tl9NU0IJCTB4MDEgLyogUiAqLw0KPj4gKyNkZWZpbmUgTUZYX1JFR19GV19WRVJTSU9OX0xTQgkJ MHgwMiAvKiBSICovDQo+PiArI2RlZmluZSBNRlhfUkVHX1NZU19DVFJMCQkweDQwIC8qIFJXICov DQo+PiArLyogSVJRIG91dHB1dCBtYW5hZ2VtZW50ICovDQo+PiArI2RlZmluZSBNRlhfUkVHX0lS UV9PVVRfUElOCQkweDQxIC8qIFJXICovDQo+PiArI2RlZmluZSBNRlhfUkVHX0lSUV9TUkNfRU4J CTB4NDIgLyogUlcgKi8NCj4+ICsjZGVmaW5lIE1GWF9SRUdfSVJRX1BFTkRJTkcJCTB4MDggLyog UiAqLw0KPj4gKyNkZWZpbmUgTUZYX1JFR19JUlFfQUNLCQkJMHg0NCAvKiBSVyAqLw0KPj4gKy8q IEdQSU9zIGV4cGFuZGVyICovDQo+PiArLyogR1BJT19TVEFURTEgMHgxMCwgR1BJT19TVEFURTIg MHgxMSwgR1BJT19TVEFURTMgMHgxMiAqLw0KPj4gKyNkZWZpbmUgTUZYX1JFR19HUElPX1NUQVRF CQkweDEwIC8qIFIgKi8NCj4+ICsvKiBHUElPX0RJUjEgMHg2MCwgR1BJT19ESVIyIDB4NjEsIEdQ SU9fRElSMyAweDYzICovDQo+PiArI2RlZmluZSBNRlhfUkVHX0dQSU9fRElSCQkweDYwIC8qIFJX ICovDQo+PiArLyogR1BJT19UWVBFMSAweDY0LCBHUElPX1RZUEUyIDB4NjUsIEdQSU9fVFlQRTMg MHg2NiAqLw0KPj4gKyNkZWZpbmUgTUZYX1JFR19HUElPX1RZUEUJCTB4NjQgLyogUlcgKi8NCj4+ ICsvKiBHUElPX1BVUEQxIDB4NjgsIEdQSU9fUFVQRDIgMHg2OSwgR1BJT19QVVBEMyAweDZBICov DQo+PiArI2RlZmluZSBNRlhfUkVHX0dQSU9fUFVQRAkJMHg2OCAvKiBSVyAqLw0KPj4gKy8qIEdQ T19TRVQxIDB4NkMsIEdQT19TRVQyIDB4NkQsIEdQT19TRVQzIDB4NkUgKi8NCj4+ICsjZGVmaW5l IE1GWF9SRUdfR1BPX1NFVAkJCTB4NkMgLyogUlcgKi8NCj4+ICsvKiBHUE9fQ0xSMSAweDcwLCBH UE9fQ0xSMiAweDcxLCBHUE9fQ0xSMyAweDcyICovDQo+PiArI2RlZmluZSBNRlhfUkVHX0dQT19D TFIJCQkweDcwIC8qIFJXICovDQo+PiArLyogSVJRX0dQSV9TUkMxIDB4NDgsIElSUV9HUElfU1JD MiAweDQ5LCBJUlFfR1BJX1NSQzMgMHg0QSAqLw0KPj4gKyNkZWZpbmUgTUZYX1JFR19JUlFfR1BJ X1NSQwkJMHg0OCAvKiBSVyAqLw0KPj4gKy8qIElSUV9HUElfRVZUMSAweDRDLCBJUlFfR1BJX0VW VDIgMHg0RCwgSVJRX0dQSV9FVlQzIDB4NEUgKi8NCj4+ICsjZGVmaW5lIE1GWF9SRUdfSVJRX0dQ SV9FVlQJCTB4NEMgLyogUlcgKi8NCj4+ICsvKiBJUlFfR1BJX1RZUEUxIDB4NTAsIElSUV9HUElf VFlQRTIgMHg1MSwgSVJRX0dQSV9UWVBFMyAweDUyICovDQo+PiArI2RlZmluZSBNRlhfUkVHX0lS UV9HUElfVFlQRQkJMHg1MCAvKiBSVyAqLw0KPj4gKy8qIElSUV9HUElfUEVORElORzEgMHgwQywg SVJRX0dQSV9QRU5ESU5HMiAweDBELCBJUlFfR1BJX1BFTkRJTkczIDB4MEUqLw0KPj4gKyNkZWZp bmUgTUZYX1JFR19JUlFfR1BJX1BFTkRJTkcJCTB4MEMgLyogUiAqLw0KPj4gKy8qIElSUV9HUElf QUNLMSAweDU0LCBJUlFfR1BJX0FDSzIgMHg1NSwgSVJRX0dQSV9BQ0szIDB4NTYgKi8NCj4+ICsj ZGVmaW5lIE1GWF9SRUdfSVJRX0dQSV9BQ0sJCTB4NTQgLyogUlcgKi8NCj4+ICsNCj4+ICsvKiBN RlhfUkVHX0NISVBfSUQgYml0ZmllbGRzICovDQo+PiArI2RlZmluZSBNRlhfUkVHX0NISVBfSURf TUFTSwkJR0VOTUFTSyg3LCAwKQ0KPj4gKw0KPj4gKy8qIE1GWF9SRUdfU1lTX0NUUkwgYml0Zmll bGRzICovDQo+PiArI2RlZmluZSBNRlhfUkVHX1NZU19DVFJMX0dQSU9fRU4JQklUKDApDQo+PiAr I2RlZmluZSBNRlhfUkVHX1NZU19DVFJMX1RTX0VOCQlCSVQoMSkNCj4+ICsjZGVmaW5lIE1GWF9S RUdfU1lTX0NUUkxfSUREX0VOCQlCSVQoMikNCj4+ICsjZGVmaW5lIE1GWF9SRUdfU1lTX0NUUkxf QUxUR1BJT19FTglCSVQoMykNCj4+ICsjZGVmaW5lIE1GWF9SRUdfU1lTX0NUUkxfU1RBTkRCWQlC SVQoNikNCj4+ICsjZGVmaW5lIE1GWF9SRUdfU1lTX0NUUkxfU1dSU1QJCUJJVCg3KQ0KPj4gKw0K Pj4gKy8qIE1GWF9SRUdfSVJRX09VVF9QSU4gYml0ZmllbGRzICovDQo+PiArI2RlZmluZSBNRlhf UkVHX0lSUV9PVVRfUElOX1RZUEUJQklUKDApIC8qIDAtT0QgMS1QUCAqLw0KPj4gKyNkZWZpbmUg TUZYX1JFR19JUlFfT1VUX1BJTl9QT0wJCUJJVCgxKSAvKiAwLWFjdGl2ZSBMT1cgMS1hY3RpdmUg SElHSCAqLw0KPj4gKw0KPj4gKy8qIE1GWF9SRUdfSVJRX1NSQ19FTiBiaXRmaWVsZHMgKi8NCj4+ ICsjZGVmaW5lIE1GWF9SRUdfSVJRX1NSQ19FTl9HUElPCQlCSVQoMCkNCj4+ICsNCj4+ICsvKiBN RlhfUkVHX0lSUV9QRU5ESU5HIGJpdGZpZWxkcyAqLw0KPj4gKyNkZWZpbmUgTUZYX1JFR19JUlFf UEVORElOR19HUElPCUJJVCgwKQ0KPj4gKw0KPj4gKyNlbmRpZiAvKiBfX01GRF9TVF9NRlhfSCAq Lw0KPj4gKw0KPiA=