From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1B252C433E2 for ; Wed, 9 Sep 2020 09:42:05 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9F41221973 for ; Wed, 9 Sep 2020 09:42:04 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="LQGvs5Au"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="CCmQ7pqJ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9F41221973 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linaro.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References:Message-ID: Subject:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=uzcMfJELEE4K7SLCURwn5+Vpsl5YCC4JzNkz0HHlEf8=; b=LQGvs5AuVNdxMxW3L8N3vojff +Hdpdr2IOF3Hc8goqkbhyKp4nmvEt1i5Phlan6RpKNxfnvRrCAlh0JoueH6akAg/PJ33Gtl/3AKGb E5qq+C360TNlS9zp8bnDwkFLcwPaJ29bgVBZemzbejhxQXY9yeR5eBDM0NrOLmylbpKgFcMFr0zGO YyuY194bWq2WUT6jwBT+Ps3M/dvuxzYorpUCy5EAKG/nx5un/mnAjGHD1TWR6/0EeV5bN2eDu3gG5 i9+13ZW7fmMl+WqQpdzCsBd793eJbEV2r9a53q9GB9faJyyEQfjudiEs6jEq3ULmqDhk3GYCnDl0P HB/khblNQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kFwae-0000ZB-L1; Wed, 09 Sep 2020 09:40:32 +0000 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kFwaZ-0000Xl-Tw for linux-arm-kernel@lists.infradead.org; Wed, 09 Sep 2020 09:40:30 +0000 Received: by mail-wr1-x441.google.com with SMTP id t10so2218364wrv.1 for ; Wed, 09 Sep 2020 02:40:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to; bh=0UaOVIJ+hNzawKQd88XdopSYF/hkCKKcCoc5LB+dGxo=; b=CCmQ7pqJ1C0et7IYooMvx8x+OnOu2BvK/GmZkEfZ9vj10nNejo26aJ94mlCZbCqL3D T1nVz+DEsSpCT0Yq4AQkOWL6JI2QqYaL4qLk9gjwhNC785COQ/18effy9qxlb0g2RWvK DMLv1BREnWAOhHH0cx1qXc0EGt+foVwuD/8r2cmpcCckNh2ArssjLMlyilA14rjhbFS9 wDhBho/ts/Hre5SklogumymkXKsjvW/ng+0xDQaDOYTyMneBwYgtgzH937tcsq3ROEX4 oNECKtbcFd5IroloykIXKgHSndLmbasrkmoKQFH+7Qcy/10PeRKZMSlCVqhTHYYzmbQI WNqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=0UaOVIJ+hNzawKQd88XdopSYF/hkCKKcCoc5LB+dGxo=; b=PUGy2I3+ojmYa8ydz9+I6gaFzPFwH/FXmOxT1c02whySxfaSqO/kxF1zYkFm3cIDQ+ 3dOf1D88tJvi0Q05tNxIFf2GyChBQe5bUwJHq3KPx4k/j40PtaZ6jC51imY7TOdtpW0u uVp3QdDOXkNmVecEIbEpQ5wSyC8RdrmsmaZlUcpBqI/9qMN4iaoS2Al8SNTAZ/9AxrfX mLZHOV8ybP2/YlBG/xINW6wKSiEHSYn+Kt3kGNzf/UTo0+rpp7voBvDsUTUhn/HG+Xvf S+ZasfDnDIvQHYq9f/UAQf8XBuh8P8LaaYvfW49GdIxgtRXpbOEJB9i8F9ixe3SdeJz8 L+EQ== X-Gm-Message-State: AOAM531kpkYvB8VWvlzJo3bQhLtcM6QInsLcIezQ0MMe6uw7W1MRhNtm CjSY31u3rTj+2+74XSVFxQy3Ow== X-Google-Smtp-Source: ABdhPJxG5KT9GrnAW3oUiyeiVzfvZpWb3wbbpf8WqrWp2tNDb0VenGdC0C9EeVSSpCmFVIPrS1pDlQ== X-Received: by 2002:a5d:634d:: with SMTP id b13mr3039013wrw.324.1599644424607; Wed, 09 Sep 2020 02:40:24 -0700 (PDT) Received: from dell ([91.110.221.208]) by smtp.gmail.com with ESMTPSA id q20sm2999032wmj.5.2020.09.09.02.40.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Sep 2020 02:40:23 -0700 (PDT) Date: Wed, 9 Sep 2020 10:40:21 +0100 From: Lee Jones To: Luka Kovacic Subject: Re: [PATCH 2/7] drivers: mfd: Add a driver for iEi WT61P803 PUZZLE MCU Message-ID: <20200909094021.GB218742@dell> References: <20200905130336.967622-1-luka.kovacic@sartura.hr> <20200905130336.967622-3-luka.kovacic@sartura.hr> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20200905130336.967622-3-luka.kovacic@sartura.hr> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200909_054028_246079_03F5E734 X-CRM114-Status: GOOD ( 42.76 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-hwmon@vger.kernel.org, andrew@lunn.ch, jdelvare@suse.com, luka.perkov@sartura.hr, jason@lakedaemon.net, gregory.clement@bootlin.com, linux@roeck-us.net, linux-kernel@vger.kernel.org, robh+dt@kernel.org, linux-arm-kernel@lists.infradead.org, pavel@ucw.cz, linux-leds@vger.kernel.org, dmurphy@ti.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gU2F0LCAwNSBTZXAgMjAyMCwgTHVrYSBLb3ZhY2ljIHdyb3RlOgoKPiBBZGQgYSBkcml2ZXIg Zm9yIHRoZSBpRWkgV1Q2MVA4MDMgUFVaWkxFIG1pY3JvY29udHJvbGxlciwgdXNlZCBpbiBzb21l Cj4gaUVpIFB1enpsZSBzZXJpZXMgZGV2aWNlcy4gVGhlIG1pY3JvY29udHJvbGxlciBjb250cm9s cyBzeXN0ZW0gcG93ZXIsCj4gdGVtcGVyYXR1cmUgc2Vuc29ycywgZmFucyBhbmQgTEVEcy4KPiAK PiBUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgZm9yIGRldmlj ZSBjb21tdW5pY2F0aW9uCj4gb3ZlciB0aGUgc3lzdGVtIHNlcmlhbCAoc2VyZGV2IGJ1cykuIEl0 IGhhbmRsZXMgTUNVIG1lc3NhZ2VzIGFuZCB0aGUKPiBpbnRlcm5hbCBNQ1UgcHJvcGVydGllcy4g U29tZSBwcm9wZXJ0aWVzIGNhbiBiZSBtYW5hZ2VkIG92ZXIgc3lzZnMuCgpEbyB5b3UgcHJvdmlk ZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgbmV3IHN5c2ZzIGVudHJpZXM/Cgo+IFNpZ25lZC1vZmYt Ynk6IEx1a2EgS292YWNpYyA8bHVrYS5rb3ZhY2ljQHNhcnR1cmEuaHI+Cj4gQ2M6IEx1a2EgUGVy a292IDxsdWthLnBlcmtvdkBzYXJ0dXJhLmhyPgo+IC0tLQo+ICBkcml2ZXJzL21mZC9LY29uZmln ICAgICAgICAgICAgICAgICAgICAgfCAgICA4ICsKPiAgZHJpdmVycy9tZmQvTWFrZWZpbGUgICAg ICAgICAgICAgICAgICAgIHwgICAgMSArCj4gIGRyaXZlcnMvbWZkL2llaS13dDYxcDgwMy1wdXp6 bGUuYyAgICAgICB8IDEyNDIgKysrKysrKysrKysrKysrKysrKysrKysKPiAgaW5jbHVkZS9saW51 eC9tZmQvaWVpLXd0NjFwODAzLXB1enpsZS5oIHwgICAyNyArCj4gIDQgZmlsZXMgY2hhbmdlZCwg MTI3OCBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21mZC9pZWkt d3Q2MXA4MDMtcHV6emxlLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvbWZk L2llaS13dDYxcDgwMy1wdXp6bGUuaAo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9LY29u ZmlnIGIvZHJpdmVycy9tZmQvS2NvbmZpZwo+IGluZGV4IDMzZGYwODM3YWI0MS4uM2ZjZGE5NWYw N2EzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvbWZkL0tjb25maWcKPiArKysgYi9kcml2ZXJzL21m ZC9LY29uZmlnCj4gQEAgLTIxMTgsNSArMjExOCwxMyBAQCBjb25maWcgU0dJX01GRF9JT0MzCj4g IAkgIElmIHlvdSBoYXZlIGFuIFNHSSBPcmlnaW4sIE9jdGFuZSwgb3IgYSBQQ0kgSU9DMyBjYXJk LAo+ICAJICB0aGVuIHNheSBZLiBPdGhlcndpc2Ugc2F5IE4uCj4gIAo+ICtjb25maWcgTUZEX0lF SV9XVDYxUDgwM19QVVpaTEUKPiArCXRyaXN0YXRlICJpRWkgV1Q2MVA4MDMgUFVaWkxFIE1DVSBk cml2ZXIiCj4gKwlkZXBlbmRzIG9uIFNFUklBTF9ERVZfQlVTCj4gKwloZWxwCj4gKwkgIGlFaSBX VDYxUDgwMyBQVVpaTEUgaXMgYSBzeXN0ZW0gcG93ZXIgbWFuYWdlbWVudCBtaWNyb2NvbnRyb2xs ZXIKPiArCSAgdXNlZCBmb3IgZmFuIGNvbnRyb2wsIHRlbXBlcmF0dXJlIHNlbnNvciByZWFkaW5n LCBsZWQgY29udHJvbAo+ICsJICBhbmQgc3lzdGVtIGlkZW50aWZpY2F0aW9uLgo+ICsKPiAgZW5k bWVudQo+ICBlbmRpZgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9NYWtlZmlsZSBiL2RyaXZl cnMvbWZkL01ha2VmaWxlCj4gaW5kZXggYTYwZTVmODM1MjgzLi4zM2I4ODAyM2E2OGQgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9tZmQvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL21mZC9NYWtlZmls ZQo+IEBAIC0yMzYsNiArMjM2LDcgQEAgb2JqLSQoQ09ORklHX01GRF9ISTY1NVhfUE1JQykgICAr PSBoaTY1NXgtcG1pYy5vCj4gIG9iai0kKENPTkZJR19NRkRfRExOMikJCSs9IGRsbjIubwo+ICBv YmotJChDT05GSUdfTUZEX1JUNTAzMykJKz0gcnQ1MDMzLm8KPiAgb2JqLSQoQ09ORklHX01GRF9T S1k4MTQ1MikJKz0gc2t5ODE0NTIubwo+ICtvYmotJChDT05GSUdfTUZEX0lFSV9XVDYxUDgwM19Q VVpaTEUpCSs9IGllaS13dDYxcDgwMy1wdXp6bGUubwo+ICAKPiAgaW50ZWwtc29jLXBtaWMtb2Jq cwkJOj0gaW50ZWxfc29jX3BtaWNfY29yZS5vIGludGVsX3NvY19wbWljX2NyYy5vCj4gIG9iai0k KENPTkZJR19JTlRFTF9TT0NfUE1JQykJKz0gaW50ZWwtc29jLXBtaWMubwo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL21mZC9pZWktd3Q2MXA4MDMtcHV6emxlLmMgYi9kcml2ZXJzL21mZC9pZWktd3Q2 MXA4MDMtcHV6emxlLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAw MC4uMTEwZWExYjg0YzUzCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvbWZkL2llaS13 dDYxcDgwMy1wdXp6bGUuYwo+IEBAIC0wLDAgKzEsMTI0MiBAQAo+ICsvLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Cj4gKwoKUGxlYXNlIHJlbW92ZSB0aGlzIGxpbmUuCgo+ ICsvKiBpRWkgV1Q2MVA4MDMgUFVaWkxFIE1DVSBEcml2ZXIKPiArICoKPiArICogQ29weXJpZ2h0 IChDKSAyMDIwIFNhcnR1cmEgTHRkLgo+ICsgKiBBdXRob3I6IEx1a2EgS292YWNpYyA8bHVrYS5r b3ZhY2ljQHNhcnR1cmEuaHI+Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2F0b21pYy5o Pgo+ICsjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5o Pgo+ICsjaW5jbHVkZSA8bGludXgvaW5pdC5oPgo+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tZmQvaWVpLXd0 NjFwODAzLXB1enpsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9vZi5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9zY2hlZC5oPgo+ICsjaW5jbHVkZSA8bGludXgvc2VyZGV2Lmg+Cj4gKyNpbmNsdWRl IDxhc20vdW5hbGlnbmVkLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+ICsjaW5jbHVk ZSA8bGludXgvc3lzZnMuaD4KCkFscGhhYmV0aWNhbC4KCj4gKyNkZWZpbmUgSUVJX1dUNjFQODAz X1BVWlpMRV9NQVhfQ09NTUFORF9MRU5HVEggKDIwICsgMikKPiArI2RlZmluZSBJRUlfV1Q2MVA4 MDNfUFVaWkxFX1JFU1BfQlVGX1NJWkUgNTEyCj4gKyNkZWZpbmUgSUVJX1dUNjFQODAzX1BVWlpM RV9HRU5FUkFMX1RJTUVPVVQgSFoKCkNhbiB5b3UgdGFiIGFsaWduIHRoZSB2YWx1ZXMgcGxlYXNl LgoKQ29tbWVudCByZXF1aXJlZCBmb3IgdGhlIHVzZSBvZiAnSFonLgoKPiArLyoqCj4gKyAqIHN0 cnVjdCBpZWlfd3Q2MXA4MDNfcHV6emxlX21jdV9zdGF0dXMgLSBNQ1UgZmxhZ3Mgc3RhdGUKPiAr ICoKPiArICogQGFjX3JlY292ZXJ5X3N0YXR1c19mbGFnOiBBQyBSZWNvdmVyeSBTdGF0dXMgRmxh Zwo+ICsgKiBAcG93ZXJfbG9zc19yZWNvdmVyeTogU3lzdGVtIHJlY292ZXJ5IGFmdGVyIHBvd2Vy IGxvc3MKPiArICogQHBvd2VyX3N0YXR1czogU3lzdGVtIFBvd2VyLW9uIE1ldGhvZAo+ICsgKi8K ClBsZWFzZSB0YWIgb3V0IHRoZSBkZXNjcmlwdGlvbnMuCgo+ICtzdHJ1Y3QgaWVpX3d0NjFwODAz X3B1enpsZV9tY3Vfc3RhdHVzIHsKPiArCXU4IGFjX3JlY292ZXJ5X3N0YXR1c19mbGFnOwo+ICsJ dTggcG93ZXJfbG9zc19yZWNvdmVyeTsKPiArCXU4IHBvd2VyX3N0YXR1czsKPiArfTsKPiArCj4g Ky8qKgo+ICsgKiBlbnVtIGllaV93dDYxcDgwM19wdXp6bGVfcmVwbHlfc3RhdGUgLSBTdGF0ZSBv ZiB0aGUgcmVwbHkKPiArICogQEZSQU1FX09LOiBUaGUgZnJhbWUgd2FzIGNvbXBsZXRlbHkgcHJv Y2Vzc2VkL3JlY2VpdmVkCj4gKyAqIEBGUkFNRV9QUk9DRVNTSU5HOiBGaXJzdCBieXRlcyB3ZXJl IHJlY2VpdmVkLCBidXQgdGhlIGZyYW1lIGlzbid0IGNvbXBsZXRlCj4gKyAqIEBGUkFNRV9TVFJV Q1RfRU1QVFk6IFRoZSBmcmFtZSBzdHJ1Y3QgaXMgZW1wdHksIG5vIGRhdGEgd2FzIHJlY2VpdmVk Cj4gKyAqIEBGUkFNRV9USU1FT1VUOiBUaGUgZnJhbWUgcHJvY2Vzc2luZyB0aW1lZCBvdXQsIGNv bW11bmljYXRpb24gZmFpbGVkCgpBcyBhYm92ZS4gIEp1c3QgbWFrZXMgaXQgZWFzaWVyIG9uIHRo ZSBleWUgSU1ITy4KCj4gKyAqIFRoZSBlbnVtIGllaV93dDYxcDgwM19wdXp6bGVfcmVwbHlfc3Rh dGUgaXMgdXNlZCB0byBkZXNjcmliZSB0aGUgZ2VuZXJhbCBzdGF0ZQoKcy9UaGUgZW51bSBpZWlf d3Q2MXA4MDNfcHV6emxlX3JlcGx5X3N0YXRlIGlzIHVzZWQgdG8gZGVzY3JpYmUvRGVzY3JpYmVz LwoKPiArICogb2YgdGhlIGZyYW1lIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIHJlY2VpdmVkLgo+ ICsgKi8KPiArZW51bSBpZWlfd3Q2MXA4MDNfcHV6emxlX3JlcGx5X3N0YXRlIHsKPiArCUZSQU1F X09LID0gMHgwMCwKPiArCUZSQU1FX1BST0NFU1NJTkcgPSAweDAxLAo+ICsJRlJBTUVfU1RSVUNU X0VNUFRZID0gMHhGRiwKPiArCUZSQU1FX1RJTUVPVVQgPSAweEZFCj4gK307Cj4gKwo+ICsvKioK PiArICogc3RydWN0IGllaV93dDYxcDgwM19wdXp6bGVfcmVwbHkgLSBNQ1UgcmVwbHkKPiArICoK PiArICogQHNpemU6IFNpemUgb2YgdGhlIE1DVSByZXBseQo+ICsgKiBAZGF0YTogRnVsbCBNQ1Ug cmVwbHkgYnVmZmVyCj4gKyAqIEBzdGF0ZTogQ3VycmVudCBzdGF0ZSBvZiB0aGUgcGFja2V0Cj4g KyAqIEByZWNlaXZlZDogV2FzIHRoZSByZXNwb25zZSBmdWxsZmlsbGVkCj4gKyAqLwo+ICtzdHJ1 Y3QgaWVpX3d0NjFwODAzX3B1enpsZV9yZXBseSB7Cj4gKwlzaXplX3Qgc2l6ZTsKPiArCXVuc2ln bmVkIGNoYXIgKmRhdGE7Cj4gKwl1OCBzdGF0ZTsKPiArCXN0cnVjdCBjb21wbGV0aW9uIHJlY2Vp dmVkOwo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCBpZWlfd3Q2MXA4MDNfcHV6emxlX21j dV92ZXJzaW9uIC0gTUNVIHZlcnNpb24gc3RhdHVzCj4gKyAqCj4gKyAqIEB2ZXJzaW9uOiBQcmlt YXJ5IGZpcm13YXJlIHZlcnNpb24KPiArICogQGJ1aWxkX2luZm86IEJ1aWxkIGRhdGUgYW5kIHRp bWUKPiArICogQGJvb3Rsb2FkZXJfbW9kZTogU3RhdHVzIG9mIHRoZSBNQ1Ugb3BlcmF0aW9uCj4g KyAqIEBwcm90b2NvbF92ZXJzaW9uOiBNQ1UgY29tbXVuaWNhdGlvbiBwcm90b2NvbCB2ZXJzaW9u Cj4gKyAqIEBzZXJpYWxfbnVtYmVyOiBEZXZpY2UgZmFjdG9yeSBzZXJpYWwgbnVtYmVyCj4gKyAq IEBtYWNfYWRkcmVzczogRGV2aWNlIGZhY3RvcnkgTUFDIGFkZHJlc3Nlcwo+ICsgKi8KPiArc3Ry dWN0IGllaV93dDYxcDgwM19wdXp6bGVfbWN1X3ZlcnNpb24gewo+ICsJY29uc3QgY2hhciAqdmVy c2lvbjsKPiArCWNvbnN0IGNoYXIgKmJ1aWxkX2luZm87Cj4gKwlib29sIGJvb3Rsb2FkZXJfbW9k ZTsKPiArCWNvbnN0IGNoYXIgKnByb3RvY29sX3ZlcnNpb247Cj4gKwljb25zdCBjaGFyICpzZXJp YWxfbnVtYmVyOwo+ICsJY29uc3QgY2hhciAqbWFjX2FkZHJlc3NbOF07Cj4gK307Cj4gKwo+ICsv KioKPiArICogc3RydWN0IGllaV93dDYxcDgwM19wdXp6bGUgLSBpRWkgV1Q2MVA4MDMgUFVaWkxF IE1DVSBEcml2ZXIKPiArICoKPiArICogQHNlcmRldjogUG9pbnRlciB0byB1bmRlcmx5aW5nIHNl cmRldiBkZXZpY2UKPiArICogQGtvYmo6IFBvaW50ZXIgdG8ga29iamVjdCAoc3lzZnMpCj4gKyAq IEByZXBseV9sb2NrOiBSZXBseSBtdXRleCBsb2NrCj4gKyAqIEBidXNfbG9jazogQnVzIG11dGV4 IGxvY2sKPiArICogQHJlcGx5OiBQb2ludGVyIHRvIHRoZSBpZWlfd3Q2MXA4MDNfcHV6emxlX3Jl cGx5IHN0cnVjdAo+ICsgKiBAdmVyc2lvbl9sb2NrOiBWZXJzaW9uIFIvVyBtdXRleCBsb2NrCj4g KyAqIEB2ZXJzaW9uOiBQb2ludGVyIHRvIHRoZSBpZWlfd3Q2MXA4MDNfcHV6emxlX21jdV92ZXJz aW9uIHN0cnVjdAo+ICsgKiBAc3RhdHVzX2xvY2s6IFN0YXR1cyBSL1cgbXV0ZXggbG9jawo+ICsg KiBAc3RhdHVzOiBQb2ludGVyIHRvIHRoZSBpZWlfd3Q2MXA4MDNfcHV6emxlX21jdV9zdGF0dXMg c3RydWN0Cj4gKyAqLwo+ICtzdHJ1Y3QgaWVpX3d0NjFwODAzX3B1enpsZSB7Cj4gKwlzdHJ1Y3Qg c2VyZGV2X2RldmljZSAqc2VyZGV2Owo+ICsJc3RydWN0IGtvYmplY3QgKmtvYmo7Cj4gKwo+ICsJ c3RydWN0IG11dGV4IHJlcGx5X2xvY2s7Cj4gKwlzdHJ1Y3QgbXV0ZXggYnVzX2xvY2s7Cj4gKwo+ ICsJc3RydWN0IGllaV93dDYxcDgwM19wdXp6bGVfcmVwbHkgKnJlcGx5Owo+ICsKPiArCXN0cnVj dCBtdXRleCB2ZXJzaW9uX2xvY2s7Cj4gKwlzdHJ1Y3QgaWVpX3d0NjFwODAzX3B1enpsZV9tY3Vf dmVyc2lvbiAqdmVyc2lvbjsKPiArCj4gKwlzdHJ1Y3QgbXV0ZXggc3RhdHVzX2xvY2s7Cj4gKwlz dHJ1Y3QgaWVpX3d0NjFwODAzX3B1enpsZV9tY3Vfc3RhdHVzICpzdGF0dXM7Cj4gK307CgpXaHkg ZG8geW91IG5lZWQgc28gbWFueSBsb2Nrcz8KCkFyZSB0aGV5IGludGVydHdpbmVkPwoKQW55IHJl YXNvbiB3aHkgeW91IGNhbid0IGp1c3QgdXNlIG9uZT8KCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg b2ZfZGV2aWNlX2lkIGllaV93dDYxcDgwM19wdXp6bGVfZHRfaWRzW10gPSB7Cj4gKwl7IC5jb21w YXRpYmxlID0gImllaSx3dDYxcDgwMy1wdXp6bGUiIH0sCj4gKwl7IC8qIHNlbnRpbmVsICovIH0K ClBsZWFzZSByZW1vdmUgdGhpcyBjb21tZW50LgoKPiArfTsKCk1vdmUgdGhpcyB0byBqdXN0IGFi b3ZlICdzdHJ1Y3Qgc2VyZGV2X2RldmljZV9kcml2ZXInLgoKPiArdW5zaWduZWQgY2hhciBpZWlf d3Q2MXA4MDNfcHV6emxlX2FkZF94b3JfY2hlY2tzdW0odW5zaWduZWQgY2hhciAqYnVmLAoKJ2ll aV93dDYxcDgwM19wdXp6bGVfY2hlY2tzdW0nIHdpbGwgYmUgZmluZS4KCj4gKwkJdW5zaWduZWQg Y2hhciB4b3JfbGVuKQoKJ2xlbicKCj4gK3sKPiArCXVuc2lnbmVkIGNoYXIgeG9yX3N1bSA9IDA7 CgonY2hlY2tzdW0nCgo+ICsJdW5zaWduZWQgaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8 IHhvcl9sZW47IGkrKykKPiArCQl4b3Jfc3VtIF49IGJ1ZltpXTsKPiArCj4gKwlyZXR1cm4geG9y X3N1bTsKPiArfQo+ICsKPiArc3RhdGljIGludCBpZWlfd3Q2MXA4MDNfcHV6emxlX3Byb2Nlc3Nf cmVzcChzdHJ1Y3QgaWVpX3d0NjFwODAzX3B1enpsZSAqbWN1LAoKQ291bGQgeW91IGNoYW5nZSBh bGwgaW5zdGFuY2VzIG9mICdtY3UnIHRvICdkZGF0YScgcGxlYXNlLgoKPiArCQl1bnNpZ25lZCBj aGFyICpyYXdfcmVzcF9kYXRhLCBzaXplX3Qgc2l6ZSkKPiArewo+ICsJc3RydWN0IGRldmljZSAq ZGV2ID0gJm1jdS0+c2VyZGV2LT5kZXY7Cj4gKwo+ICsJdW5zaWduZWQgY2hhciB4b3JfY2hlY2tz dW07Cj4gKwo+ICsJLyoKPiArCSAqIFN0YXJ0IHJlY2VpdmluZyB0aGUgZnJhbWUvQ29udGludWUg cmVjZWl2aW5nIHRoZSBmcmFtZQoKCSAqIFN0YXJ0L2NvbnRpbnVlIHJlY2VpdmluZyB0aGUgZnJh bWUKCj4gKwkgKgo+ICsJICogVGhlIGNvZGUgYmVsb3cgZGV0ZXJtaW5lcyB3aGV0aGVyOgoKInRo ZSBjb2RlIGJlbG93IiBpcyBhc3N1bWVkLgoKPiArCSAqICogd2UgYXJlIHJlY2VpdmluZyBhIG5l dyBmcmFtZQo+ICsJICogKiBhcHBlbmRpbmcgZGF0YSB0byBhbiBleGlzdGluZyBmcmFtZQo+ICsJ ICoKPiArCSAqLwoKSXMgdGhpcyBjb21tZW50IHJlYWxseSByZXF1aXJlZD8KCj4gKwkvKiBMb2Nr IHRoZSByZXBseSBzdHJ1Y3QgbXV0ZXggKi8KClRoaXMgY29tbWVudCBpcyBkZWZpbml0ZWx5IG5v dCByZXF1aXJlZC4KCj4gKwltdXRleF9sb2NrKCZtY3UtPnJlcGx5X2xvY2spOwo+ICsKPiArCS8q IENoZWNrIHRoZSBpbmNvbWluZyBmcmFtZSBoZWFkZXIgKi8KPiArCWlmICghKHJhd19yZXNwX2Rh dGFbMF0gPT0gJ0AnIHx8IHJhd19yZXNwX2RhdGFbMF0gPT0gJyUnIHx8Cj4gKwkJKHJhd19yZXNw X2RhdGFbMF0gPT0gMHhGNyAmJiByYXdfcmVzcF9kYXRhWzFdID09IDB4QTEpKSkgewoKUGxlYXNl IGRlZmluZSAqYWxsKiBtYWdpYyBudW1iZXJzLgoKPiArCQkvKiBGcmFtZSBoZWFkZXIgaXMgbm90 IGNvcnJlY3QsIGNoZWNrIHdoZXRoZXIgdG8gYXBwZW5kICovCj4gKwkJaWYgKG1jdS0+cmVwbHkt PnN0YXRlICE9IEZSQU1FX1BST0NFU1NJTkcpIHsKPiArCQkJLyogVGhlIGluY29taW5nIGZyYW1l IHNob3VsZCBiZSBkaXNjYXJkZWQgKi8KCkFnYWluLCB0aGlzIHJlYWxseSBpc24ndCByZXF1aXJl ZC4gIFdlIGNhbiBzZWUgdGhlIGVycm9yIHJldHVybi4KCj4gKwkJCWRldl9lcnIoZGV2LCAiSW52 YWxpZCBmcmFtZSBoZWFkZXIgYW5kIHN0YXRlICgweCV4KSIsCj4gKwkJCQkJbWN1LT5yZXBseS0+ c3RhdGUpOwo+ICsKPiArCQkJbXV0ZXhfdW5sb2NrKCZtY3UtPnJlcGx5X2xvY2spOwo+ICsJCQly ZXR1cm4gLTE7CgpBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmV0dXJuIC1FUEVSTT8gIEkgc3Vn Z2VzdCBub3QuCgpQbGVhc2UgdXNlIHByb3Blcmx5IGRlZmluZWQgTGludXggZXJyb3IgY29kZXMg dGhyb3VnaG91dDoKCiBodHRwczovL3d3dy1udW1pLmZuYWwuZ292L29mZmxpbmVfc29mdHdhcmUv c3J0X3B1YmxpY19jb250ZXh0L1dlYkRvY3MvRXJyb3JzL3VuaXhfc3lzdGVtX2Vycm9ycy5odG1s Cgo+ICsJCX0KPiArCj4gKwkJLyogVGhlIGZyYW1lIHNob3VsZCBiZSBhcHBlbmRlZCB0byB0aGUg ZXhpc3RpbmcgZGF0YSAqLwoKVGVsbCB0aGUgY29kZSB3aGF0IHRvIGRvOgoKICJBcHBlbmQgdGhl IGZyYW1lIHRvIGV4aXN0aW5nIGRhdGEiCgo+ICsJCW1lbWNweShtY3UtPnJlcGx5LT5kYXRhK21j dS0+cmVwbHktPnNpemUsIHJhd19yZXNwX2RhdGEsIHNpemUpOwo+ICsJCW1jdS0+cmVwbHktPnNp emUgKz0gc2l6ZTsKPiArCX0gZWxzZSB7Cj4gKwkJLyogU3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBm cmFtZSAqLwo+ICsJCW1lbWNweShtY3UtPnJlcGx5LT5kYXRhLCByYXdfcmVzcF9kYXRhLCBzaXpl KTsKPiArCQltY3UtPnJlcGx5LT5zaXplID0gc2l6ZTsKPiArCQltY3UtPnJlcGx5LT5zdGF0ZSA9 IEZSQU1FX1BST0NFU1NJTkc7Cj4gKwl9Cj4gKwo+ICsJLyogQ3JlYXRlIGFuIHhvciBjaGVja3N1 bSBvZiB0aGUgZGF0YSAqLwoKUGxlYXNlIHJlbW92ZS4gIENvZGUgaXMgY2xlYXIgZW5vdWdoLgoK PiArCXhvcl9jaGVja3N1bSA9IGllaV93dDYxcDgwM19wdXp6bGVfYWRkX3hvcl9jaGVja3N1bSht Y3UtPnJlcGx5LT5kYXRhLAoKSnVzdCAnY2hlY2tzdW0nIHdpbGwgZG8uCgo+ICsJCQkoKGludClt Y3UtPnJlcGx5LT5zaXplKS0xKTsKCldoeSBhcmUgeW91IGNhc3RpbmcgdG8gYSBmdW5jdGlvbiB5 b3UgYXV0aG9yZWQ/Cgo+ICsKPiArCS8qIENoZWNrIHdoZXRoZXIgdGhlIGNhbHVjbGF0ZWQgY2hl Y2tzdW0gbWF0Y2hlcyB0aGUgcmVjZWl2ZWQgb25lICovCgpUaGVyZSdzIHdheXl5eXkgdG9vIG11 Y2ggY29tbWVudGluZyBoYXBwZW5pbmcgaGVyZS4gIFlvdSBvbmx5IG5lZWQgdG8KcHJvdmlkZSBj b21tZW50cyBmb3IgcG9pbnRzIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBiZSB1bmNsZWFyLgoKPiAr CWlmICh4b3JfY2hlY2tzdW0gIT0gbWN1LT5yZXBseS0+ZGF0YVsoKGludCltY3UtPnJlcGx5LT5z aXplKS0xXSkgewoKUmVtb3ZlIGFsbCBvZiB0aGVzZSBjYXN0cyBwbGVhc2UgLSBubyBuZWVkLgoK PiArCQkvKiBUaGUgY2hlY2tzdW0gZG9lc24ndCBtYXRjaCwgd2FpdGluZyBmb3IgZGF0YSAqLwoK Tm8gZXJyb3IgbWVzc2FnZXMgdG8gdGhhdCBlZmZlY3Q/Cgo+ICsJCW11dGV4X3VubG9jaygmbWN1 LT5yZXBseV9sb2NrKTsKPiArCQlyZXR1cm4gKGludClzaXplOwo+ICsJfQo+ICsKPiArCS8qCj4g KwkgKiBVcGRhdGUgaW50ZXJuYWwgZHJpdmVyIHN0YXRlIHdpdGggdGhlIGxhdGVzdCByZXNwb25z ZSBjb2RlCj4gKwkgKi8KPiArCj4gKwkvKiBSZWNlaXZlZCBhbGwgdGhlIGRhdGEgKi8KPiArCW1j dS0+cmVwbHktPnN0YXRlID0gRlJBTUVfT0s7Cj4gKwljb21wbGV0ZSgmbWN1LT5yZXBseS0+cmVj ZWl2ZWQpOwo+ICsKPiArCW11dGV4X3VubG9jaygmbWN1LT5yZXBseV9sb2NrKTsKPiArCj4gKwly ZXR1cm4gKGludClzaXplOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGllaV93dDYxcDgwM19wdXp6 bGVfcmVjdl9idWYoc3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldiwKPiArCQljb25zdCB1bnNp Z25lZCBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSkKPiArewo+ICsJc3RydWN0IGllaV93dDYxcDgw M19wdXp6bGUgKm1jdSA9IHNlcmRldl9kZXZpY2VfZ2V0X2RydmRhdGEoc2VyZGV2KTsKPiArCWlu dCByZXQ7Cj4gKwo+ICsJcmV0ID0gaWVpX3d0NjFwODAzX3B1enpsZV9wcm9jZXNzX3Jlc3AobWN1 LCAodW5zaWduZWQgY2hhciAqKWRhdGEsIHNpemUpOwo+ICsKPiArCS8qIFJldHVybiB0aGUgbnVt YmVyIG9mIHByb2Nlc3NlZCBieXRlcyBpZiBmdW5jdGlvbiByZXR1cm5zIGVycm9yICovCj4gKwlp ZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gKGludClzaXplOwo+ICsKPiArCXJldHVybiByZXQ7Cj4g K30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VyZGV2X2RldmljZV9vcHMgaWVpX3d0NjFw ODAzX3B1enpsZV9zZXJkZXZfZGV2aWNlX29wcyA9IHsKPiArCS5yZWNlaXZlX2J1ZiAgPSBpZWlf d3Q2MXA4MDNfcHV6emxlX3JlY3ZfYnVmLAo+ICsJLndyaXRlX3dha2V1cCA9IHNlcmRldl9kZXZp Y2Vfd3JpdGVfd2FrZXVwLAo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIGllaV93dDYxcDgwM19wdXp6 bGVfd3JpdGVfY29tbWFuZF93YXRjaGRvZygpIC0gV2F0Y2hkb2cgb2YgdGhlIG5vcm1hbCBjbWQK PiArICogQG1jdTogUG9pbnRlciB0byB0aGUgaWVpX3d0NjFwODAzX3B1enpsZSBjb3JlIE1GRCBz dHJ1Y3QKPiArICogQGNtZDogUG9pbnRlciB0byB0aGUgY2hhciBhcnJheSB0byBzZW5kIChzaXpl IHNob3VsZCBiZSBjb250ZW50ICsgMSAoeG9yKSkKPiArICogQHNpemU6IFNpemUgb2YgdGhlIGNt ZCBjaGFyIGFycmF5Cj4gKyAqIEByZXBseV9kYXRhOiBQb2ludGVyIHRvIHRoZSByZXBseS9yZXNw b25zZSBkYXRhIGFycmF5IChzaG91bGQgYmUgYWxsb2NhdGVkKQo+ICsgKiBAcmVwbHlfc2l6ZTog UG9pbnRlciB0byBzaXplX3QgKHNpemUgb2YgcmVwbHlfZGF0YSkKPiArICogQHJldHJ5X2NvdW50 OiBOdW1iZXIgb2YgdGltZXMgdG8gcmV0cnkgc2VuZGluZyB0aGUgY29tbWFuZCB0byB0aGUgTUNV Cj4gKyAqLwo+ICtpbnQgaWVpX3d0NjFwODAzX3B1enpsZV93cml0ZV9jb21tYW5kX3dhdGNoZG9n KHN0cnVjdCBpZWlfd3Q2MXA4MDNfcHV6emxlICptY3UsCj4gKwkJdW5zaWduZWQgY2hhciAqY21k LCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgY2hhciAqcmVwbHlfZGF0YSwKPiArCQlzaXplX3QgKnJl cGx5X3NpemUsIGludCByZXRyeV9jb3VudCkKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0g Jm1jdS0+c2VyZGV2LT5kZXY7Cj4gKwlpbnQgcmV0LCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkg PCByZXRyeV9jb3VudDsgaSsrKSB7Cj4gKwkJcmV0ID0gaWVpX3d0NjFwODAzX3B1enpsZV93cml0 ZV9jb21tYW5kKG1jdSwgY21kLCBzaXplLAo+ICsJCQkJcmVwbHlfZGF0YSwgcmVwbHlfc2l6ZSk7 Cj4gKwo+ICsJCWlmIChyZXQgIT0gLUVUSU1FRE9VVCkKPiArCQkJcmV0dXJuIHJldDsKPiArCX0K PiArCj4gKwlkZXZfZXJyKGRldiwgIiVzOiBDb21tYW5kIHJlc3BvbnNlIHRpbWVkIG91dC4gUmV0 cmllczogJWQiLCBfX2Z1bmNfXywKPiArCQkJcmV0cnlfY291bnQpOwo+ICsKPiArCXJldHVybiAt RVRJTUVET1VUOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGllaV93dDYxcDgwM19wdXp6bGVf d3JpdGVfY29tbWFuZF93YXRjaGRvZyk7Cj4gKwo+ICsvKioKPiArICogaWVpX3d0NjFwODAzX3B1 enpsZV93cml0ZV9jb21tYW5kKCkgLSBTZW5kIGEgc3RydWN0dXJlZCBjb21tYW5kIHRvIHRoZSBN Q1UKPiArICogQG1jdTogUG9pbnRlciB0byB0aGUgaWVpX3d0NjFwODAzX3B1enpsZSBjb3JlIE1G RCBzdHJ1Y3QKPiArICogQGNtZDogUG9pbnRlciB0byB0aGUgY2hhciBhcnJheSB0byBzZW5kIChz aXplIHNob3VsZCBiZSBjb250ZW50ICsgMSAoeG9yKSkKPiArICogQHNpemU6IFNpemUgb2YgdGhl IGNtZCBjaGFyIGFycmF5Cj4gKyAqIEByZXBseV9kYXRhOiBQb2ludGVyIHRvIHRoZSByZXBseS9y ZXNwb25zZSBkYXRhIGFycmF5IChzaG91bGQgYmUgYWxsb2NhdGVkKQo+ICsgKgo+ICsgKiBGdW5j dGlvbiBpZWlfd3Q2MXA4MDNfcHV6emxlX3dyaXRlX2NvbW1hbmQoKSBzZW5kcyBhIHN0cnVjdHVy ZWQgY29tbWFuZCB0bwo+ICsgKiB0aGUgTUNVLgo+ICsgKi8KPiAraW50IGllaV93dDYxcDgwM19w dXp6bGVfd3JpdGVfY29tbWFuZChzdHJ1Y3QgaWVpX3d0NjFwODAzX3B1enpsZSAqbWN1LAo+ICsJ CXVuc2lnbmVkIGNoYXIgKmNtZCwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGNoYXIgKnJlcGx5X2Rh dGEsCj4gKwkJc2l6ZV90ICpyZXBseV9zaXplKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSAmbWN1LT5zZXJkZXYtPmRldjsKPiArCj4gKwlpbnQgcmV0Owo+ICsJaW50IGxlbiA9IChpbnQp c2l6ZTsKPiArCj4gKwlpZiAoc2l6ZSA+IElFSV9XVDYxUDgwM19QVVpaTEVfTUFYX0NPTU1BTkRf TEVOR1RIKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCS8qIENyZWF0ZSBhbiBYT1IgY2hl Y2tzdW0gZm9yIHRoZSBwcm92aWRlZCBjb21tYW5kICovCj4gKwljbWRbbGVuIC0gMV0gPSBpZWlf d3Q2MXA4MDNfcHV6emxlX2FkZF94b3JfY2hlY2tzdW0oY21kLCBsZW4pOwo+ICsKPiArCW11dGV4 X2xvY2soJm1jdS0+YnVzX2xvY2spOwo+ICsKPiArCS8qIEluaXRpYWxpemUgcmVwbHkgc3RydWN0 ICovCj4gKwltdXRleF9sb2NrKCZtY3UtPnJlcGx5X2xvY2spOwo+ICsJaWYgKG1jdS0+cmVwbHkp IHsKPiArCQlyZWluaXRfY29tcGxldGlvbigmbWN1LT5yZXBseS0+cmVjZWl2ZWQpOwo+ICsKPiAr CQltY3UtPnJlcGx5LT5zdGF0ZSA9IEZSQU1FX1NUUlVDVF9FTVBUWTsKPiArCj4gKwkJbWN1LT5y ZXBseS0+c2l6ZSA9IDA7Cj4gKwl9IGVsc2Ugewo+ICsJCWRldl9lcnIoZGV2LCAiUmVwbHkgc3Ry dWN0IGlzIE5VTEwuXG4iKTsKClRoaXMgZG9lc24ndCBtZWFuIGFueXRoaW5nLgoKUGxlYXNlIHN0 YXRlIHdoYXQgaGFwcGVuZWQuICAnV2h5JyBpcyB0aGUgc3RydWN0IE5VTEw/Cgo+ICsJCW11dGV4 X3VubG9jaygmbWN1LT5yZXBseV9sb2NrKTsKPiArCQltdXRleF91bmxvY2soJm1jdS0+YnVzX2xv Y2spOwoKSW1wcm92ZSB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aCAnZ290bydzLgoKTW92ZSB0aGUg dW5sb2NrcyB0byB0aGUgYm90dG9tIGFuZCAnZ290bycgdGhlbSBpbnN0ZWFkIG9mIHBsYWNpbmcK dW5sb2NrcyBpbiBlYWNoIGVycm9yIGhhbmRsZXIuCgo+ICsJCXJldHVybiAtMTsKPiArCX0KCkp1 c3QgY2hlY2sgZm9yICchbWN1LT5yZXBseScuCgpCcmVhayB0aGUgJ3JlaW5pdCcgY29kZSBvdXQg b2YgdGhlICdpZiAoKScKCj4gKwltdXRleF91bmxvY2soJm1jdS0+cmVwbHlfbG9jayk7Cj4gKwo+ ICsJLyogV3JpdGUgdG8gTUNVIFVBUlQgKi8KPiArCXJldCA9IHNlcmRldl9kZXZpY2Vfd3JpdGUo bWN1LT5zZXJkZXYsIGNtZCwgbGVuLAo+ICsJCQlJRUlfV1Q2MVA4MDNfUFVaWkxFX0dFTkVSQUxf VElNRU9VVCk7Cj4gKwoKUmVtb3ZlIHRoaXMgbGluZS4KCj4gKwlpZiAocmV0IDwgMCkKPiArCQly ZXR1cm4gcmV0OwoKSXNuJ3QgdGhlIGJ1c19sb2NrIHN0aWxsIHRha2VuPwoKPiArCS8qIFdhaXQg Zm9yIHRoZSBNQ1UgcmVzcG9uc2UgKi8KPiArCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1l b3V0KCZtY3UtPnJlcGx5LT5yZWNlaXZlZCwKPiArCQkJCUlFSV9XVDYxUDgwM19QVVpaTEVfR0VO RVJBTF9USU1FT1VUKSkgewo+ICsJCWRldl9lcnIoZGV2LCAiQ29tbWFuZCByZXBseSByZWNlaXZl IHRpbWVvdXRcbiIpOwo+ICsKPiArCQlyZXQgPSAtRVRJTUVET1VUOwo+ICsKPiArCQltdXRleF9s b2NrKCZtY3UtPnJlcGx5X2xvY2spOwo+ICsJCXJlaW5pdF9jb21wbGV0aW9uKCZtY3UtPnJlcGx5 LT5yZWNlaXZlZCk7Cj4gKwkJbWN1LT5yZXBseS0+c3RhdGUgPSBGUkFNRV9USU1FT1VUOwo+ICsJ CW11dGV4X3VubG9jaygmbWN1LT5yZXBseV9sb2NrKTsKPiArCX0KPiArCj4gKwlpZiAocmV0IDwg MCkgewo+ICsJCW11dGV4X3VubG9jaygmbWN1LT5idXNfbG9jayk7Cj4gKwkJcmV0dXJuIHJldDsK PiArCX0KCldoeSBpcyB0aGlzIG91dCBoZXJlIGFuZCBub3QgaGFuZGxlZCBpbnNpZGUgdGhlICdp ZiAoKScgYWJvdmU/Cgo+ICsJLyogVmVyaWZ5IE1DVSByZXNwb25zZSBzdGF0dXMgKi8KPiArCW11 dGV4X2xvY2soJm1jdS0+cmVwbHlfbG9jayk7Cj4gKwo+ICsJaWYgKG1jdS0+cmVwbHkpIHsKPiAr CQkvKiBDb3B5IHJlc3BvbnNlICovCj4gKwkJKnJlcGx5X3NpemUgPSBtY3UtPnJlcGx5LT5zaXpl Owo+ICsJCW1lbWNweShyZXBseV9kYXRhLCBtY3UtPnJlcGx5LT5kYXRhLCBtY3UtPnJlcGx5LT5z aXplKTsKPiArCX0gZWxzZSB7Cj4gKwkJZGV2X2VycihkZXYsICJSZXBseSBzdHJ1Y3QgaXMgTlVM TC5cbiIpOwo+ICsKPiArCQltdXRleF91bmxvY2soJm1jdS0+cmVwbHlfbG9jayk7Cj4gKwkJbXV0 ZXhfdW5sb2NrKCZtY3UtPmJ1c19sb2NrKTsKPiArCj4gKwkJcmV0dXJuIC0xOwo+ICsJfQoKU2Ft ZSBjb21tZW50cyBhcyBhYm92ZS4KCj4gKwltdXRleF91bmxvY2soJm1jdS0+cmVwbHlfbG9jayk7 Cj4gKwltdXRleF91bmxvY2soJm1jdS0+YnVzX2xvY2spOwo+ICsKPiArCXJldHVybiAwOwo+ICt9 Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGllaV93dDYxcDgwM19wdXp6bGVfd3JpdGVfY29tbWFuZCk7 Cj4gKwo+ICtpbnQgaWVpX3d0NjFwODAzX3B1enpsZV9idXp6ZXIoc3RydWN0IGllaV93dDYxcDgw M19wdXp6bGUgKm1jdSwgYm9vbCBsb25nX2JlZXApCj4gK3sKPiArCS8qIEJ1enplciAwLjUgc2Vj ICovCgpQbGFjZSB0aGlzIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUuCgo+ICsJdW5zaWduZWQgY2hh ciBidXp6ZXJfc2hvcnRfY21kWzRdID0geyAnQCcsICdDJywgJzInIH07Cj4gKwkvKiBCdXp6ZXIg MS41IHNlYyAqLwoKQXMgYWJvdmUuCgo+ICsJdW5zaWduZWQgY2hhciBidXp6ZXJfbG9uZ19jbWRb NF0gPSB7ICdAJywgJ0MnLCAnMycgfTsKPiArCgpSZW1vdmUgdGhpcyBsaW5lLgoKPiArCWludCBy ZXQ7Cj4gKwoKUmVtb3ZlIHRoaXMgbGluZS4KCj4gKwlzaXplX3QgcmVwbHlfc2l6ZSA9IDA7Cj4g Kwl1bnNpZ25lZCBjaGFyICpyZXNwX2J1ZjsKPiArCj4gKwlyZXNwX2J1ZiA9IGttYWxsb2MoSUVJ X1dUNjFQODAzX1BVWlpMRV9CVUZfU0laRSwgR0ZQX0tFUk5FTCk7CgpXaGF0J3MgdGhlIGRpZmZl cmVuY2UgYmV0d2VlbiB0aGlzIGFuZCAnbWN1LT5yZXBseS0+ZGF0YSc/Cgo+ICsJaWYgKCFyZXNw X2J1ZikKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlyZXQgPSBpZWlfd3Q2MXA4MDNfcHV6 emxlX3dyaXRlX2NvbW1hbmQobWN1LAo+ICsJCQlsb25nX2JlZXAgPyBidXp6ZXJfbG9uZ19jbWQg OiBidXp6ZXJfc2hvcnRfY21kLCA0LAoKRGVmaW5lIGFsbCBtYWdpYyBudW1iZXJzLgoKRG8gdGhp cyB0aHJvdWdob3V0IHRoZSBjb2RlLgoKPiArCQkJcmVzcF9idWYsICZyZXBseV9zaXplKTsKPiAr Cj4gKwlpZiAocmV0KSB7Cj4gKwkJa2ZyZWUocmVzcF9idWYpOwoKVXNlICdnb3RvJ3Mgc28geW91 IGRvbid0IGhhdmUgdG8gZnJlZSBpbiBlYWNoIGhhbmRsZXIuCgpEbyB0aGlzIHRocm91Z2hvdXQg dGhlIGNvZGUuCgo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKHJlcGx5X3NpemUg IT0gMykgewo+ICsJCWtmcmVlKHJlc3BfYnVmKTsKPiArCQlyZXR1cm4gLUVJTzsKPiArCX0KPiAr Cj4gKwlpZiAoIShyZXNwX2J1ZlswXSA9PSAnQCcgJiYgcmVzcF9idWZbMV0gPT0gJzAnICYmCj4g KwkJCQlyZXNwX2J1ZlsyXSA9PSAweDcwKSkgewo+ICsJCWtmcmVlKHJlc3BfYnVmKTsKPiArCQly ZXR1cm4gLUVQUk9UTzsKPiArCX0KPiArCj4gKwlrZnJlZShyZXNwX2J1Zik7Cj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiAraW50IGllaV93dDYxcDgwM19wdXp6bGVfZ2V0X3ZlcnNpb24oc3RydWN0 IGllaV93dDYxcDgwM19wdXp6bGUgKm1jdSkKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0g Jm1jdS0+c2VyZGV2LT5kZXY7Cj4gKwo+ICsJLyogQ29tbWFuZHMgKi8KCk5vdCBuZWVkZWQuCgo+ ICsJdW5zaWduZWQgY2hhciB2ZXJzaW9uX2NtZFszXSA9IHsgJyUnLCAnVicgfTsKPiArCXVuc2ln bmVkIGNoYXIgYnVpbGRfaW5mb19jbWRbM10gPSB7ICclJywgJ0InIH07Cj4gKwl1bnNpZ25lZCBj aGFyIGJvb3Rsb2FkZXJfbW9kZV9jbWRbM10gPSB7ICclJywgJ00nIH07Cj4gKwl1bnNpZ25lZCBj aGFyIHByb3RvY29sX3ZlcnNpb25fY21kWzNdID0geyAnJScsICdQJyB9Owo+ICsKClJlbW92ZSBl bXB0eSBsaW5lcyBiZXR3ZWVuIGRlY2xhcmF0aW9ucy4KCkRvIHRoaXMgdGhyb3VnaG91dCB0aGUg Y29kZS4KCj4gKwl1bnNpZ25lZCBjaGFyICpyZDsKPiArCXNpemVfdCByZXBseV9zaXplID0gMDsK PiArCj4gKwlpbnQgcmV0Owo+ICsKPiArCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGJ1ZmZl ciAqLwo+ICsJcmQgPSBrbWFsbG9jKElFSV9XVDYxUDgwM19QVVpaTEVfQlVGX1NJWkUsIEdGUF9L RVJORUwpOwo+ICsJaWYgKCFyZCkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlyZXQgPSBp ZWlfd3Q2MXA4MDNfcHV6emxlX3dyaXRlX2NvbW1hbmQobWN1LCB2ZXJzaW9uX2NtZCwKPiArCQkJ c2l6ZW9mKHZlcnNpb25fY21kKSwgcmQsICZyZXBseV9zaXplKTsKPiArCWlmIChyZXQpCj4gKwkJ Z290byBlcnI7Cj4gKwo+ICsJaWYgKHJlcGx5X3NpemUgPCA3KSB7Cj4gKwkJcmV0ID0gLUVJTzsK PiArCQlnb3RvIGVycjsKPiArCX0KPiArCj4gKwltY3UtPnZlcnNpb24tPnZlcnNpb24gPSBkZXZt X2thc3ByaW50ZihkZXYsIEdGUF9LRVJORUwsICJ2JWMuJWMlYyVjIiwKPiArCQkJCXJkWzJdLCBy ZFszXSwgcmRbNF0sIHJkWzVdKTsKClBsZWFzZSByZW1vdmUgZW1wdHkgbGluZXMgZm9yIGVhY2gg Z3JvdXAuICBMaWtlOgoKCXJldCA9IGllaV93dDYxcDgwM19wdXp6bGVfd3JpdGVfY29tbWFuZCht Y3UsIHZlcnNpb25fY21kLAoJCQlzaXplb2YodmVyc2lvbl9jbWQpLCByZCwgJnJlcGx5X3NpemUp OwoJaWYgKHJldCkKCQlnb3RvIGVycjsKCWlmIChyZXBseV9zaXplIDwgNykgewoJCXJldCA9IC1F SU87CgkJZ290byBlcnI7Cgl9CgltY3UtPnZlcnNpb24tPnZlcnNpb24gPSBkZXZtX2thc3ByaW50 ZihkZXYsIEdGUF9LRVJORUwsICJ2JWMuJWMlYyVjIiwKCQkJCXJkWzJdLCByZFszXSwgcmRbNF0s IHJkWzVdKTsKCj4gKwlyZXQgPSBpZWlfd3Q2MXA4MDNfcHV6emxlX3dyaXRlX2NvbW1hbmQobWN1 LCBidWlsZF9pbmZvX2NtZCwKPiArCQkJc2l6ZW9mKGJ1aWxkX2luZm9fY21kKSwgcmQsICZyZXBs eV9zaXplKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnI7Cj4gKwo+ICsJaWYgKHJlcGx5X3Np emUgPCAxNSkgewo+ICsJCXJldCA9IC1FSU87Cj4gKwkJZ290byBlcnI7Cj4gKwl9Cj4gKwo+ICsJ bWN1LT52ZXJzaW9uLT5idWlsZF9pbmZvID0gZGV2bV9rYXNwcmludGYoZGV2LCBHRlBfS0VSTkVM LAo+ICsJCQkiJWMlYy8lYyVjLyVjJWMlYyVjICVjJWM6JWMlYyIsCj4gKwkJCXJkWzhdLCByZFs5 XSwgcmRbNl0sIHJkWzddLCByZFsyXSwKPiArCQkJcmRbM10sIHJkWzRdLCByZFs1XSwgcmRbMTBd LCByZFsxMV0sCj4gKwkJCXJkWzEyXSwgcmRbMTNdKTsKPiArCj4gKwlyZXQgPSBpZWlfd3Q2MXA4 MDNfcHV6emxlX3dyaXRlX2NvbW1hbmQobWN1LCBib290bG9hZGVyX21vZGVfY21kLAo+ICsJCQlz aXplb2YoYm9vdGxvYWRlcl9tb2RlX2NtZCksIHJkLCAmcmVwbHlfc2l6ZSk7Cj4gKwlpZiAocmV0 KQo+ICsJCWdvdG8gZXJyOwo+ICsKPiArCWlmIChyZXBseV9zaXplIDwgNCkgewo+ICsJCXJldCA9 IC1FSU87Cj4gKwkJZ290byBlcnI7Cj4gKwl9Cj4gKwo+ICsJaWYgKHJkWzJdID09IDB4MzEpIHsK PiArCQkvKiBUaGUgTUNVIGlzIGluIG5vcm1hbCBtb2RlICovCj4gKwkJbWN1LT52ZXJzaW9uLT5i b290bG9hZGVyX21vZGUgPSBmYWxzZTsKPiArCX0gZWxzZSBpZiAocmRbMl0gPT0gMHgzMCkgewo+ ICsJCS8qIFRoZSBNQ1UgaXMgaW4gYm9vdGxvYWRlciBtb2RlICovCj4gKwkJbWN1LT52ZXJzaW9u LT5ib290bG9hZGVyX21vZGUgPSB0cnVlOwo+ICsJfQo+ICsKPiArCXJldCA9IGllaV93dDYxcDgw M19wdXp6bGVfd3JpdGVfY29tbWFuZChtY3UsIHByb3RvY29sX3ZlcnNpb25fY21kLAo+ICsJCQlz aXplb2YocHJvdG9jb2xfdmVyc2lvbl9jbWQpLCByZCwgJnJlcGx5X3NpemUpOwo+ICsJaWYgKHJl dCkKPiArCQlnb3RvIGVycjsKPiArCj4gKwlpZiAocmVwbHlfc2l6ZSA8IDkpIHsKPiArCQlyZXQg PSAtRUlPOwo+ICsJCWdvdG8gZXJyOwo+ICsJfQo+ICsKPiArCW1jdS0+dmVyc2lvbi0+cHJvdG9j b2xfdmVyc2lvbiA9IGRldm1fa2FzcHJpbnRmKGRldiwgR0ZQX0tFUk5FTCwKPiArCQkJInYlYy4l YyVjJWMlYyVjIiwKPiArCQkJcmRbN10sIHJkWzZdLCByZFs1XSwgcmRbNF0sIHJkWzNdLCByZFsy XSk7Cj4gKwo+ICsJLyogRnJlZSB0aGUgYWxsb2NhdGVkIG1lbW9yeSByZXNvdXJjZXMgKi8KPiAr CWtmcmVlKHJkKTsKPiArCj4gKwlyZXR1cm4gMDsKCk5vIG5lZWQgdG8ga2ZyZWUvcmV0dXJuIHR3 aWNlLgoKUmVtb3ZlIHRoZSA1IGxpbmVzIGFib3ZlLgoKPiArZXJyOgo+ICsJa2ZyZWUocmQpOwo+ ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAraW50IGllaV93dDYxcDgwM19wdXp6bGVfZ2V0X21j dV9zdGF0dXMoc3RydWN0IGllaV93dDYxcDgwM19wdXp6bGUgKm1jdSkKPiArewo+ICsJLyogTUNV IFN0YXR1cyBDb21tYW5kICovCj4gKwl1bnNpZ25lZCBjaGFyIG1jdV9zdGF0dXNfY21kWzVdID0g eyAnQCcsICdPJywgJ1MnLCAnUycgfTsKPiArCj4gKwlpbnQgcmV0Owo+ICsKPiArCXVuc2lnbmVk IGNoYXIgKnJkOwo+ICsJc2l6ZV90IHJlcGx5X3NpemUgPSAwOwo+ICsKPiArCS8qIEFsbG9jYXRl IG1lbW9yeSBmb3IgdGhlIGJ1ZmZlciAqLwo+ICsJcmQgPSBrbWFsbG9jKElFSV9XVDYxUDgwM19Q VVpaTEVfQlVGX1NJWkUsIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFyZCkKPiArCQlyZXR1cm4gLUVO T01FTTsKPiArCj4gKwlyZXQgPSBpZWlfd3Q2MXA4MDNfcHV6emxlX3dyaXRlX2NvbW1hbmQobWN1 LCBtY3Vfc3RhdHVzX2NtZCwKPiArCQkJc2l6ZW9mKG1jdV9zdGF0dXNfY21kKSwgcmQsICZyZXBs eV9zaXplKTsKPiArCWlmIChyZXQpIHsKPiArCQlrZnJlZShyZCk7Cj4gKwkJcmV0dXJuIHJldDsK PiArCX0KPiArCj4gKwlpZiAocmVwbHlfc2l6ZSA8IDIwKSB7Cj4gKwkJa2ZyZWUocmQpOwo+ICsJ CXJldHVybiAtRUlPOwo+ICsJfQo+ICsKPiArCS8qIFJlc3BvbnNlIGZvcm1hdDoKPiArCSAqIChJ RFgJUkVTUE9OU0UpCj4gKwkgKiAwCUAKPiArCSAqIDEJTwo+ICsJICogMglTCj4gKwkgKiAzCVMK PiArCSAqIC4uLgo+ICsJICogNQlBQyBSZWNvdmVyeSBTdGF0dXMgRmxhZwo+ICsJICogLi4uCj4g KwkgKiAxMAlQb3dlciBMb3NzIFJlY292ZXJ5Cj4gKwkgKiAuLi4KPiArCSAqIDE5CVBvd2VyIFN0 YXR1cyAoc3lzdGVtIHBvd2VyIG9uIG1ldGhvZCkKPiArCSAqIDIwCVhPUiBjaGVja3N1bQo+ICsJ ICovCj4gKwo+ICsJaWYgKHJkWzBdID09ICdAJyAmJiByZFsxXSA9PSAnTycgJiYgcmRbMl0gPT0g J1MnICYmIHJkWzNdID09ICdTJykgewo+ICsJCW11dGV4X2xvY2soJm1jdS0+c3RhdHVzX2xvY2sp Owo+ICsJCW1jdS0+c3RhdHVzLT5hY19yZWNvdmVyeV9zdGF0dXNfZmxhZyA9IHJkWzVdOwo+ICsJ CW1jdS0+c3RhdHVzLT5wb3dlcl9sb3NzX3JlY292ZXJ5ID0gcmRbMTBdOwo+ICsJCW1jdS0+c3Rh dHVzLT5wb3dlcl9zdGF0dXMgPSByZFsxOV07Cj4gKwkJbXV0ZXhfdW5sb2NrKCZtY3UtPnN0YXR1 c19sb2NrKTsKPiArCX0KPiArCj4gKwkvKiBGcmVlIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IHJlc291 cmNlcyAqLwo+ICsJa2ZyZWUocmQpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQg aWVpX3d0NjFwODAzX3B1enpsZV9nZXRfc2VyaWFsX251bWJlcihzdHJ1Y3QgaWVpX3d0NjFwODAz X3B1enpsZSAqbWN1KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmbWN1LT5zZXJkZXYt PmRldjsKPiArCXVuc2lnbmVkIGNoYXIgc2VyaWFsX251bWJlcl9jbWRbNV0gPSB7IDB4RjcsIDB4 QTEsIDB4MDAsIDB4MjQgfTsKPiArCj4gKwlpbnQgcmV0Owo+ICsKPiArCXVuc2lnbmVkIGNoYXIg KnJkOwo+ICsJc2l6ZV90IHJlcGx5X3NpemUgPSAwOwo+ICsKPiArCS8qIEFsbG9jYXRlIG1lbW9y eSBmb3IgdGhlIGJ1ZmZlciAqLwo+ICsJcmQgPSBrbWFsbG9jKElFSV9XVDYxUDgwM19QVVpaTEVf QlVGX1NJWkUsIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFyZCkKPiArCQlyZXR1cm4gLUVOT01FTTsK CkFsbG9jYXRlIHRoaXMgb25jZSBpbiAucHJvYmUoKS4KCk5vIG5lZWQgdG8ga2VlcCBhbGxvY2F0 aW5nIGFuZCBmcmVlaW5nIGVhY2ggdGltZS4KCj4gKwlyZXQgPSBpZWlfd3Q2MXA4MDNfcHV6emxl X3dyaXRlX2NvbW1hbmQobWN1LCBzZXJpYWxfbnVtYmVyX2NtZCwKPiArCQkJc2l6ZW9mKHNlcmlh bF9udW1iZXJfY21kKSwgcmQsICZyZXBseV9zaXplKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBl cnI7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmbWN1LT52ZXJzaW9uX2xvY2spOwo+ICsJbWN1LT52ZXJz aW9uLT5zZXJpYWxfbnVtYmVyID0gZGV2bV9rYXNwcmludGYoZGV2LCBHRlBfS0VSTkVMLCAiJS4q cyIsCj4gKwkJCShpbnQpcmVwbHlfc2l6ZSAtIDUsIHJkICsgNCk7Cj4gKwltdXRleF91bmxvY2so Jm1jdS0+dmVyc2lvbl9sb2NrKTsKPiArCj4gKwkvKiBGcmVlIHRoZSBhbGxvY2F0ZWQgbWVtb3J5 IHJlc291cmNlcyAqLwo+ICsJa2ZyZWUocmQpOwo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZXJy Ogo+ICsJa2ZyZWUocmQpOwo+ICsJcmV0dXJuIHJldDsKPiArCgpSZW1vdmUgYWxsIHVubmVjZXNz YXJ5IGJsYW5rIGxpbmVzLgoKPiArfQo+ICsKPiAraW50IGllaV93dDYxcDgwM19wdXp6bGVfd3Jp dGVfc2VyaWFsX251bWJlcihzdHJ1Y3QgaWVpX3d0NjFwODAzX3B1enpsZSAqbWN1LAo+ICsJCXVu c2lnbmVkIGNoYXIgc2VyaWFsX251bWJlclszNl0pCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRl diA9ICZtY3UtPnNlcmRldi0+ZGV2Owo+ICsJdW5zaWduZWQgY2hhciBzZXJpYWxfbnVtYmVyX2hl YWRlcls0XSA9IHsgMHhGNywgMHhBMCwgMHgwMCwgMHhDIH07Cj4gKwo+ICsJLyogNCBieXRlIGhl YWRlciwgMTIgYnl0ZSBzZXJpYWwgbnVtYmVyIGNodW5rLCAxIGJ5dGUgWE9SIGNoZWNrc3VtICov Cj4gKwl1bnNpZ25lZCBjaGFyIHNlcmlhbF9udW1iZXJfY21kWzQrMTIrMV07Cj4gKwo+ICsJaW50 IHJldCwgc25fY291bnRlcjsKPiArCj4gKwl1bnNpZ25lZCBjaGFyICpyZDsKPiArCXNpemVfdCBy ZXBseV9zaXplID0gMDsKPiArCj4gKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBidWZmZXIg Ki8KPiArCXJkID0ga21hbGxvYyhJRUlfV1Q2MVA4MDNfUFVaWkxFX0JVRl9TSVpFLCBHRlBfS0VS TkVMKTsKPiArCWlmICghcmQpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJLyogVGhlIE1D VSBjYW4gb25seSBoYW5kbGUgMjIgYnl0ZSBtZXNzYWdlcywgc2VuZCB0aGUgUy9OIGluIGNodW5r cyAqLwo+ICsJZm9yIChzbl9jb3VudGVyID0gMDsgc25fY291bnRlciA8IDM7IHNuX2NvdW50ZXIr Kykgewo+ICsJCXNlcmlhbF9udW1iZXJfaGVhZGVyWzJdID0gMHgwICsgKDB4QykgKiBzbl9jb3Vu dGVyOwo+ICsKPiArCQltZW1jcHkoc2VyaWFsX251bWJlcl9jbWQsIHNlcmlhbF9udW1iZXJfaGVh ZGVyLCA0KTsKPiArCQltZW1jcHkoc2VyaWFsX251bWJlcl9jbWQgKyA0LCBzZXJpYWxfbnVtYmVy ICsgKDB4QykgKiBzbl9jb3VudGVyLCAweEMpOwo+ICsKPiArCQkvKiBJbml0aWFsaXplIHRoZSBs YXN0IGJ5dGUgKi8KPiArCQlzZXJpYWxfbnVtYmVyX2NtZFtzaXplb2Yoc2VyaWFsX251bWJlcl9j bWQpIC0gMV0gPSAwOwo+ICsKPiArCQlyZXQgPSBpZWlfd3Q2MXA4MDNfcHV6emxlX3dyaXRlX2Nv bW1hbmQobWN1LCBzZXJpYWxfbnVtYmVyX2NtZCwKPiArCQkJCXNpemVvZihzZXJpYWxfbnVtYmVy X2NtZCksIHJkLCAmcmVwbHlfc2l6ZSk7Cj4gKwkJaWYgKHJldCkKPiArCQkJZ290byBlcnI7Cj4g Kwo+ICsJCWlmIChyZXBseV9zaXplICE9IDMpIHsKPiArCQkJcmV0ID0gLUVJTzsKPiArCQkJZ290 byBlcnI7Cj4gKwkJfQo+ICsKPiArCQlpZiAoIShyZFswXSA9PSAnQCcgJiYgcmRbMV0gPT0gJzAn ICYmIHJkWzJdID09IDB4NzApKSB7Cj4gKwkJCXJldCA9IC1FUFJPVE87Cj4gKwkJCWdvdG8gZXJy Owo+ICsJCX0KPiArCX0KPiArCj4gKwltdXRleF9sb2NrKCZtY3UtPnZlcnNpb25fbG9jayk7Cj4g KwltY3UtPnZlcnNpb24tPnNlcmlhbF9udW1iZXIgPSBkZXZtX2thc3ByaW50ZihkZXYsIEdGUF9L RVJORUwsICIlLipzIiwKPiArCQkJMzYsIHNlcmlhbF9udW1iZXIpOwo+ICsJbXV0ZXhfdW5sb2Nr KCZtY3UtPnZlcnNpb25fbG9jayk7Cj4gKwo+ICsJLyogRnJlZSB0aGUgYWxsb2NhdGVkIG1lbW9y eSByZXNvdXJjZXMgKi8KPiArCWtmcmVlKHJkKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2Vy cjoKPiArCWtmcmVlKHJkKTsKPiArCXJldHVybiByZXQ7Cj4gK30KClNhbWUgY29tbWVudHMgYXMg YWJvdmUuCgo+ICtpbnQgaWVpX3d0NjFwODAzX3B1enpsZV9nZXRfbWFjX2FkZHJlc3NlcyhzdHJ1 Y3QgaWVpX3d0NjFwODAzX3B1enpsZSAqbWN1KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSAmbWN1LT5zZXJkZXYtPmRldjsKPiArCXVuc2lnbmVkIGNoYXIgbWFjX2FkZHJlc3NfY21kWzVd ID0geyAweEY3LCAweEExLCAweDAwLCAweDExIH07Cj4gKwo+ICsJaW50IHJldCwgbWFjX2NvdW50 ZXI7Cj4gKwo+ICsJdW5zaWduZWQgY2hhciAqcmQ7Cj4gKwlzaXplX3QgcmVwbHlfc2l6ZSA9IDA7 Cj4gKwo+ICsJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgYnVmZmVyICovCj4gKwlyZCA9IGtt YWxsb2MoSUVJX1dUNjFQODAzX1BVWlpMRV9CVUZfU0laRSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAo IXJkKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWZvciAobWFjX2NvdW50ZXIgPSAwOyBt YWNfY291bnRlciA8IDg7IG1hY19jb3VudGVyKyspIHsKPiArCQltYWNfYWRkcmVzc19jbWRbMl0g PSAweDI0ICsgKDB4MTEpICogbWFjX2NvdW50ZXI7Cj4gKwkJbWFjX2FkZHJlc3NfY21kWzRdID0g MHgwMDsKPiArCj4gKwkJcmV0ID0gaWVpX3d0NjFwODAzX3B1enpsZV93cml0ZV9jb21tYW5kKG1j dSwgbWFjX2FkZHJlc3NfY21kLAo+ICsJCQkJc2l6ZW9mKG1hY19hZGRyZXNzX2NtZCksIHJkLCAm cmVwbHlfc2l6ZSk7Cj4gKwkJaWYgKHJldCkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWlmIChy ZXBseV9zaXplIDwgMjIpIHsKPiArCQkJcmV0ID0gLUVJTzsKPiArCQkJZ290byBlcnI7Cj4gKwkJ fQo+ICsKPiArCQltdXRleF9sb2NrKCZtY3UtPnZlcnNpb25fbG9jayk7Cj4gKwkJbWN1LT52ZXJz aW9uLT5tYWNfYWRkcmVzc1ttYWNfY291bnRlcl0gPSBkZXZtX2thc3ByaW50ZihkZXYsCj4gKwkJ CQlHRlBfS0VSTkVMLCAiJS4qcyIsIChpbnQpcmVwbHlfc2l6ZSAtIDUsCj4gKwkJCQlyZCArIDQp Owo+ICsJCW11dGV4X3VubG9jaygmbWN1LT52ZXJzaW9uX2xvY2spOwo+ICsJfQo+ICsKPiArCS8q IEZyZWUgdGhlIGFsbG9jYXRlZCBtZW1vcnkgcmVzb3VyY2VzICovCj4gKwlrZnJlZShyZCk7Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnI6Cj4gKwlrZnJlZShyZCk7Cj4gKwlyZXR1cm4gcmV0 Owo+ICt9CgpTYW1lIGNvbW1lbnRzIGFzIGFib3ZlLgoKPiAraW50IGllaV93dDYxcDgwM19wdXp6 bGVfd3JpdGVfbWFjX2FkZHJlc3Moc3RydWN0IGllaV93dDYxcDgwM19wdXp6bGUgKm1jdSwKPiAr CQl1bnNpZ25lZCBjaGFyIG1hY19hZGRyZXNzWzE3XSwgaW50IG1hY19hZGRyZXNzX2lkeCkKPiAr ewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJm1jdS0+c2VyZGV2LT5kZXY7Cj4gKwl1bnNpZ25l ZCBjaGFyIG1hY19hZGRyZXNzX2hlYWRlcls0XSA9IHsgMHhGNywgMHhBMCwgMHgwMCwgMHgxMSB9 Owo+ICsKPiArCS8qIDQgYnl0ZSBoZWFkZXIsIDE3IGJ5dGUgTUFDIGFkZHJlc3MsIDEgYnl0ZSBY T1IgY2hlY2tzdW0gKi8KPiArCXVuc2lnbmVkIGNoYXIgbWFjX2FkZHJlc3NfY21kWzQrMTcrMV07 Cj4gKwo+ICsJaW50IHJldDsKPiArCj4gKwl1bnNpZ25lZCBjaGFyICpyZDsKPiArCXNpemVfdCBy ZXBseV9zaXplID0gMDsKPiArCj4gKwlpZiAoIShtYWNfYWRkcmVzc19pZHggPCA4KSkKPiArCQly ZXR1cm4gLUVJTlZBTDsKPiArCj4gKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBidWZmZXIg Ki8KPiArCXJkID0ga21hbGxvYyhJRUlfV1Q2MVA4MDNfUFVaWkxFX0JVRl9TSVpFLCBHRlBfS0VS TkVMKTsKPiArCWlmICghcmQpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJbWFjX2FkZHJl c3NfaGVhZGVyWzJdID0gMHgyNCArICgweDExKSAqIG1hY19hZGRyZXNzX2lkeDsKPiArCj4gKwkv KiBDb25jYXQgbWFjX2FkZHJlc3NfaGVhZGVyLCBtYWNfYWRkcmVzcyB0byBtYWNfYWRkcmVzc19j bWQgKi8KPiArCW1lbWNweShtYWNfYWRkcmVzc19jbWQsIG1hY19hZGRyZXNzX2hlYWRlciwgNCk7 Cj4gKwltZW1jcHkobWFjX2FkZHJlc3NfY21kICsgNCwgbWFjX2FkZHJlc3MsIDE3KTsKPiArCj4g KwkvKiBJbml0aWFsaXplIHRoZSBsYXN0IGJ5dGUgKi8KPiArCW1hY19hZGRyZXNzX2NtZFtzaXpl b2YobWFjX2FkZHJlc3NfY21kKSAtIDFdID0gMDsKPiArCj4gKwlyZXQgPSBpZWlfd3Q2MXA4MDNf cHV6emxlX3dyaXRlX2NvbW1hbmQobWN1LCBtYWNfYWRkcmVzc19jbWQsCj4gKwkJCXNpemVvZiht YWNfYWRkcmVzc19jbWQpLCByZCwgJnJlcGx5X3NpemUpOwo+ICsJaWYgKHJldCkKPiArCQlnb3Rv IGVycjsKPiArCj4gKwlpZiAocmVwbHlfc2l6ZSAhPSAzKSB7Cj4gKwkJcmV0ID0gLUVJTzsKPiAr CQlnb3RvIGVycjsKPiArCX0KPiArCj4gKwlpZiAoIShyZFswXSA9PSAnQCcgJiYgcmRbMV0gPT0g JzAnICYmIHJkWzJdID09IDB4NzApKSB7Cj4gKwkJcmV0ID0gLUVQUk9UTzsKPiArCQlnb3RvIGVy cjsKPiArCX0KPiArCj4gKwltdXRleF9sb2NrKCZtY3UtPnZlcnNpb25fbG9jayk7Cj4gKwltY3Ut PnZlcnNpb24tPm1hY19hZGRyZXNzW21hY19hZGRyZXNzX2lkeF0gPSBkZXZtX2thc3ByaW50Zihk ZXYsCj4gKwkJCUdGUF9LRVJORUwsICIlLipzIiwgMTcsIG1hY19hZGRyZXNzKTsKPiArCW11dGV4 X3VubG9jaygmbWN1LT52ZXJzaW9uX2xvY2spOwo+ICsKPiArCS8qIEZyZWUgdGhlIGFsbG9jYXRl ZCBtZW1vcnkgcmVzb3VyY2VzICovCj4gKwlrZnJlZShyZCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4g Kwo+ICtlcnI6Cj4gKwlrZnJlZShyZCk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9CgpTYW1lIGNvbW1l bnRzIGFzIGFib3ZlLgoKPiAraW50IGllaV93dDYxcDgwM19wdXp6bGVfd3JpdGVfcG93ZXJfbG9z c19yZWNvdmVyeShzdHJ1Y3QgaWVpX3d0NjFwODAzX3B1enpsZSAqbWN1LAo+ICsJCWludCBwb3dl cl9sb3NzX3JlY292ZXJ5X2FjdGlvbikKPiArewo+ICsJdW5zaWduZWQgY2hhciBwb3dlcl9sb3Nz X3JlY292ZXJ5X2NtZFs1XSA9IHsgJ0AnLCAnTycsICdBJywgJzAnIH07Cj4gKwo+ICsJdW5zaWdu ZWQgY2hhciAqcmVzcF9idWY7Cj4gKwlzaXplX3QgcmVwbHlfc2l6ZSA9IDA7Cj4gKwo+ICsJLyog QnVmZmVyIGZvciB0aGUgcG93ZXJfbG9zc19yZWNvdmVyeV9hY3Rpb24gdG8gY2hhcmFjdGVyICov Cj4gKwl1bnNpZ25lZCBjaGFyIGNtZF9idWZbMl07Cj4gKwo+ICsJaW50IHJldDsKPiArCj4gKwkv KiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBidWZmZXIgKi8KPiArCXJlc3BfYnVmID0ga21hbGxv YyhJRUlfV1Q2MVA4MDNfUFVaWkxFX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKPiArCWlmICghcmVz cF9idWYpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJLyogQ2hlY2sgdGhlIGFjY2VwdGFi bGUgcmFuZ2UgKi8KPiArCWlmIChwb3dlcl9sb3NzX3JlY292ZXJ5X2FjdGlvbiA8IDAgfHwgcG93 ZXJfbG9zc19yZWNvdmVyeV9hY3Rpb24gPiA0KSB7Cj4gKwkJa2ZyZWUocmVzcF9idWYpOwo+ICsJ CXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCS8qIENvbnZlcnQgaW50IHRvIGNoYXIgKi8K PiArCXJldCA9IHNucHJpbnRmKGNtZF9idWYsIHNpemVvZihjbWRfYnVmKSwgIiVkIiwKPiArCQkJ cG93ZXJfbG9zc19yZWNvdmVyeV9hY3Rpb24pOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlrZnJl ZShyZXNwX2J1Zik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwkvKiBNb2RpZnkgdGhl IGNvbW1hbmQgd2l0aCB0aGUgYWN0aW9uIGluZGV4ICovCj4gKwlwb3dlcl9sb3NzX3JlY292ZXJ5 X2NtZFszXSA9IGNtZF9idWZbMF07Cj4gKwo+ICsJcmV0ID0gaWVpX3d0NjFwODAzX3B1enpsZV93 cml0ZV9jb21tYW5kKG1jdSwgcG93ZXJfbG9zc19yZWNvdmVyeV9jbWQsCj4gKwkJCXNpemVvZihw b3dlcl9sb3NzX3JlY292ZXJ5X2NtZCksIHJlc3BfYnVmLCAmcmVwbHlfc2l6ZSk7Cj4gKwlpZiAo cmV0KSB7Cj4gKwkJa2ZyZWUocmVzcF9idWYpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ ICsJLyogVXBkYXRlIHRoZSBpbnRlcm5hbCBzdGF0dXMgKHN0cnVjdCkgKi8KPiArCW11dGV4X2xv Y2soJm1jdS0+c3RhdHVzX2xvY2spOwo+ICsJbWN1LT5zdGF0dXMtPnBvd2VyX2xvc3NfcmVjb3Zl cnkgPSBwb3dlcl9sb3NzX3JlY292ZXJ5X2FjdGlvbjsKPiArCW11dGV4X3VubG9jaygmbWN1LT5z dGF0dXNfbG9jayk7Cj4gKwo+ICsJLyogRnJlZSB0aGUgYWxsb2NhdGVkIG1lbW9yeSByZXNvdXJj ZXMgKi8KPiArCWtmcmVlKHJlc3BfYnVmKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQoKU2FtZSBj b21tZW50cyBhcyBhYm92ZS4KCj4gKwo+ICsKClJlbW92ZSB0aGlzIGxpbmUuCgo+ICsjZGVmaW5l IHN5c2ZzX2NvbnRhaW5lcihkZXYpIFwKPiArCShjb250YWluZXJfb2YoKGRldiktPmtvYmoucGFy ZW50LCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKSkKCldoYXQgZGV2aWNlIGlzIHRoaXMgZmV0Y2hpbmc/ Cgo+ICtzdGF0aWMgc3NpemVfdCB2ZXJzaW9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAo+ICsJ CXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCj4gK3sKPiArCXN0cnVj dCBkZXZpY2UgKmRldl9jb250YWluZXIgPSBzeXNmc19jb250YWluZXIoZGV2KTsKPiArCXN0cnVj dCBpZWlfd3Q2MXA4MDNfcHV6emxlICptY3UgPSBkZXZfZ2V0X2RydmRhdGEoZGV2X2NvbnRhaW5l cik7Cj4gKwo+ICsJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIG1jdS0+dmVyc2lvbi0+dmVy c2lvbik7Cj4gK30KPiArCgpSZW1vdmUgdGhpcyBsaW5lLgoKU2FtZSB0aHJvdWdob3V0LgoKPiAr c3RhdGljIERFVklDRV9BVFRSX1JPKHZlcnNpb24pOwo+ICsKPiArc3RhdGljIHNzaXplX3QgYnVp bGRfaW5mb19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKPiArCXN0cnVjdCBkZXZpY2VfYXR0cmli dXRlICphdHRyLCBjaGFyICpidWYpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldl9jb250YWlu ZXIgPSBzeXNmc19jb250YWluZXIoZGV2KTsKPiArCXN0cnVjdCBpZWlfd3Q2MXA4MDNfcHV6emxl ICptY3UgPSBkZXZfZ2V0X2RydmRhdGEoZGV2X2NvbnRhaW5lcik7Cj4gKwo+ICsJcmV0dXJuIHNw cmludGYoYnVmLCAiJXNcbiIsIG1jdS0+dmVyc2lvbi0+YnVpbGRfaW5mbyk7Cj4gK30KPiArCj4g K3N0YXRpYyBERVZJQ0VfQVRUUl9STyhidWlsZF9pbmZvKTsKPiArCj4gK3N0YXRpYyBzc2l6ZV90 IGJvb3Rsb2FkZXJfbW9kZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKPiArCXN0cnVjdCBkZXZp Y2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRl dl9jb250YWluZXIgPSBzeXNmc19jb250YWluZXIoZGV2KTsKPiArCXN0cnVjdCBpZWlfd3Q2MXA4 MDNfcHV6emxlICptY3UgPSBkZXZfZ2V0X2RydmRhdGEoZGV2X2NvbnRhaW5lcik7Cj4gKwo+ICsJ cmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIG1jdS0+dmVyc2lvbi0+Ym9vdGxvYWRlcl9tb2Rl KTsKPiArfQo+ICsKPiArc3RhdGljIERFVklDRV9BVFRSX1JPKGJvb3Rsb2FkZXJfbW9kZSk7Cj4g Kwo+ICtzdGF0aWMgc3NpemVfdCBwcm90b2NvbF92ZXJzaW9uX3Nob3coc3RydWN0IGRldmljZSAq ZGV2LAo+ICsJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKPiArewo+ ICsJc3RydWN0IGRldmljZSAqZGV2X2NvbnRhaW5lciA9IHN5c2ZzX2NvbnRhaW5lcihkZXYpOwo+ ICsJc3RydWN0IGllaV93dDYxcDgwM19wdXp6bGUgKm1jdSA9IGRldl9nZXRfZHJ2ZGF0YShkZXZf Y29udGFpbmVyKTsKPiArCj4gKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgbWN1LT52ZXJz aW9uLT5wcm90b2NvbF92ZXJzaW9uKTsKPiArfQo+ICsKPiArc3RhdGljIERFVklDRV9BVFRSX1JP KHByb3RvY29sX3ZlcnNpb24pOwo+ICsKPiArc3RhdGljIHNzaXplX3Qgc2VyaWFsX251bWJlcl9z aG93KHN0cnVjdCBkZXZpY2UgKmRldiwKPiArCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRy LCBjaGFyICpidWYpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldl9jb250YWluZXIgPSBzeXNm c19jb250YWluZXIoZGV2KTsKPiArCXN0cnVjdCBpZWlfd3Q2MXA4MDNfcHV6emxlICptY3UgPSBk ZXZfZ2V0X2RydmRhdGEoZGV2X2NvbnRhaW5lcik7Cj4gKwo+ICsJaW50IHJldDsKPiArCj4gKwlt dXRleF9sb2NrKCZtY3UtPnZlcnNpb25fbG9jayk7Cj4gKwlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVz XG4iLCBtY3UtPnZlcnNpb24tPnNlcmlhbF9udW1iZXIpOwo+ICsJbXV0ZXhfdW5sb2NrKCZtY3Ut PnZlcnNpb25fbG9jayk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHNz aXplX3Qgc2VyaWFsX251bWJlcl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gKwkJc3RydWN0 IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4gKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291 bnQpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldl9jb250YWluZXIgPSBzeXNmc19jb250YWlu ZXIoZGV2KTsKPiArCXN0cnVjdCBpZWlfd3Q2MXA4MDNfcHV6emxlICptY3UgPSBkZXZfZ2V0X2Ry dmRhdGEoZGV2X2NvbnRhaW5lcik7Cj4gKwo+ICsJdW5zaWduZWQgY2hhciBzZXJpYWxfbnVtYmVy WzM2XTsKPiArCWludCByZXQ7Cj4gKwo+ICsJLyogQ2hlY2sgd2hldGhlciB0aGUgc2VyaWFsIG51 bWJlciBpcyAzNiBjaGFyYWN0ZXJzIGxvbmcgKyBudWxsICovCj4gKwlpZiAoKGludCljb3VudCAh PSAzNiArIDEpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJLyogQ29weSAzNiBjaGFyYWN0 ZXJzIGZyb20gdGhlIGJ1ZmZlciB0byBzZXJpYWxfbnVtYmVyICovCj4gKwltZW1jcHkoc2VyaWFs X251bWJlciwgKHVuc2lnbmVkIGNoYXIgKilidWYsIDM2KTsKPiArCj4gKwlyZXQgPSBpZWlfd3Q2 MXA4MDNfcHV6emxlX3dyaXRlX3NlcmlhbF9udW1iZXIobWN1LCBzZXJpYWxfbnVtYmVyKTsKPiAr CWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXR1cm4gY291bnQ7Cj4gK30KPiAr Cj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhzZXJpYWxfbnVtYmVyKTsKPiArCj4gK3N0YXRpYyBz c2l6ZV90IG1hY19hZGRyZXNzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAo+ICsJc3RydWN0IGRl dmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKPiArewo+ICsJc3RydWN0IGRldmljZSAq ZGV2X2NvbnRhaW5lciA9IHN5c2ZzX2NvbnRhaW5lcihkZXYpOwo+ICsJc3RydWN0IGllaV93dDYx cDgwM19wdXp6bGUgKm1jdSA9IGRldl9nZXRfZHJ2ZGF0YShkZXZfY29udGFpbmVyKTsKPiArCj4g KwlpbnQgcmV0Owo+ICsKPiArCW11dGV4X2xvY2soJm1jdS0+dmVyc2lvbl9sb2NrKTsKPiArCj4g KwlpZiAoIXN0cmNtcChhdHRyLT5hdHRyLm5hbWUsICJtYWNfYWRkcmVzc18wIikpCj4gKwkJcmV0 ID0gc3ByaW50ZihidWYsICIlc1xuIiwgbWN1LT52ZXJzaW9uLT5tYWNfYWRkcmVzc1swXSk7Cj4g KwllbHNlIGlmICghc3RyY21wKGF0dHItPmF0dHIubmFtZSwgIm1hY19hZGRyZXNzXzEiKSkKPiAr CQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBtY3UtPnZlcnNpb24tPm1hY19hZGRyZXNzWzFd KTsKPiArCWVsc2UgaWYgKCFzdHJjbXAoYXR0ci0+YXR0ci5uYW1lLCAibWFjX2FkZHJlc3NfMiIp KQo+ICsJCXJldCA9IHNwcmludGYoYnVmLCAiJXNcbiIsIG1jdS0+dmVyc2lvbi0+bWFjX2FkZHJl c3NbMl0pOwo+ICsJZWxzZSBpZiAoIXN0cmNtcChhdHRyLT5hdHRyLm5hbWUsICJtYWNfYWRkcmVz c18zIikpCj4gKwkJcmV0ID0gc3ByaW50ZihidWYsICIlc1xuIiwgbWN1LT52ZXJzaW9uLT5tYWNf YWRkcmVzc1szXSk7Cj4gKwllbHNlIGlmICghc3RyY21wKGF0dHItPmF0dHIubmFtZSwgIm1hY19h ZGRyZXNzXzQiKSkKPiArCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBtY3UtPnZlcnNpb24t Pm1hY19hZGRyZXNzWzRdKTsKPiArCWVsc2UgaWYgKCFzdHJjbXAoYXR0ci0+YXR0ci5uYW1lLCAi bWFjX2FkZHJlc3NfNSIpKQo+ICsJCXJldCA9IHNwcmludGYoYnVmLCAiJXNcbiIsIG1jdS0+dmVy c2lvbi0+bWFjX2FkZHJlc3NbNV0pOwo+ICsJZWxzZSBpZiAoIXN0cmNtcChhdHRyLT5hdHRyLm5h bWUsICJtYWNfYWRkcmVzc182IikpCj4gKwkJcmV0ID0gc3ByaW50ZihidWYsICIlc1xuIiwgbWN1 LT52ZXJzaW9uLT5tYWNfYWRkcmVzc1s2XSk7Cj4gKwllbHNlIGlmICghc3RyY21wKGF0dHItPmF0 dHIubmFtZSwgIm1hY19hZGRyZXNzXzciKSkKPiArCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVzXG4i LCBtY3UtPnZlcnNpb24tPm1hY19hZGRyZXNzWzddKTsKPiArCWVsc2UKPiArCQlyZXQgPSBzcHJp bnRmKGJ1ZiwgIlxuIik7Cj4gKwo+ICsJbXV0ZXhfdW5sb2NrKCZtY3UtPnZlcnNpb25fbG9jayk7 Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHNzaXplX3QgbWFjX2FkZHJl c3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAo+ICsJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRl ICphdHRyLAo+ICsJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQo+ICt7Cj4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXZfY29udGFpbmVyID0gc3lzZnNfY29udGFpbmVyKGRldik7Cj4gKwlzdHJ1 Y3QgaWVpX3d0NjFwODAzX3B1enpsZSAqbWN1ID0gZGV2X2dldF9kcnZkYXRhKGRldl9jb250YWlu ZXIpOwo+ICsKPiArCXVuc2lnbmVkIGNoYXIgbWFjX2FkZHJlc3NbMTddOwo+ICsJaW50IHJldDsK PiArCj4gKwkvKiBDaGVjayB3aGV0aGVyIHRoZSBNQUMgYWRkcmVzcyBpcyAxNyBjaGFyYWN0ZXJz IGxvbmcgKyBudWxsICovCj4gKwlpZiAoKGludCljb3VudCAhPSAxNyArIDEpCj4gKwkJcmV0dXJu IC1FSU5WQUw7Cj4gKwo+ICsJLyogQ29weSAxNyBjaGFyYWN0ZXJzIGZyb20gdGhlIGJ1ZmZlciB0 byBtYWNfYWRkcmVzcyAqLwo+ICsJbWVtY3B5KG1hY19hZGRyZXNzLCAodW5zaWduZWQgY2hhciAq KWJ1ZiwgMTcpOwo+ICsKPiArCWlmICghc3RyY21wKGF0dHItPmF0dHIubmFtZSwgIm1hY19hZGRy ZXNzXzAiKSkKPiArCQlyZXQgPSBpZWlfd3Q2MXA4MDNfcHV6emxlX3dyaXRlX21hY19hZGRyZXNz KG1jdSwgbWFjX2FkZHJlc3MsIDApOwo+ICsJZWxzZSBpZiAoIXN0cmNtcChhdHRyLT5hdHRyLm5h bWUsICJtYWNfYWRkcmVzc18xIikpCj4gKwkJcmV0ID0gaWVpX3d0NjFwODAzX3B1enpsZV93cml0 ZV9tYWNfYWRkcmVzcyhtY3UsIG1hY19hZGRyZXNzLCAxKTsKPiArCWVsc2UgaWYgKCFzdHJjbXAo YXR0ci0+YXR0ci5uYW1lLCAibWFjX2FkZHJlc3NfMiIpKQo+ICsJCXJldCA9IGllaV93dDYxcDgw M19wdXp6bGVfd3JpdGVfbWFjX2FkZHJlc3MobWN1LCBtYWNfYWRkcmVzcywgMik7Cj4gKwllbHNl IGlmICghc3RyY21wKGF0dHItPmF0dHIubmFtZSwgIm1hY19hZGRyZXNzXzMiKSkKPiArCQlyZXQg PSBpZWlfd3Q2MXA4MDNfcHV6emxlX3dyaXRlX21hY19hZGRyZXNzKG1jdSwgbWFjX2FkZHJlc3Ms IDMpOwo+ICsJZWxzZSBpZiAoIXN0cmNtcChhdHRyLT5hdHRyLm5hbWUsICJtYWNfYWRkcmVzc180 IikpCj4gKwkJcmV0ID0gaWVpX3d0NjFwODAzX3B1enpsZV93cml0ZV9tYWNfYWRkcmVzcyhtY3Us IG1hY19hZGRyZXNzLCA0KTsKPiArCWVsc2UgaWYgKCFzdHJjbXAoYXR0ci0+YXR0ci5uYW1lLCAi bWFjX2FkZHJlc3NfNSIpKQo+ICsJCXJldCA9IGllaV93dDYxcDgwM19wdXp6bGVfd3JpdGVfbWFj X2FkZHJlc3MobWN1LCBtYWNfYWRkcmVzcywgNSk7Cj4gKwllbHNlIGlmICghc3RyY21wKGF0dHIt PmF0dHIubmFtZSwgIm1hY19hZGRyZXNzXzYiKSkKPiArCQlyZXQgPSBpZWlfd3Q2MXA4MDNfcHV6 emxlX3dyaXRlX21hY19hZGRyZXNzKG1jdSwgbWFjX2FkZHJlc3MsIDYpOwo+ICsJZWxzZSBpZiAo IXN0cmNtcChhdHRyLT5hdHRyLm5hbWUsICJtYWNfYWRkcmVzc183IikpCj4gKwkJcmV0ID0gaWVp X3d0NjFwODAzX3B1enpsZV93cml0ZV9tYWNfYWRkcmVzcyhtY3UsIG1hY19hZGRyZXNzLCA3KTsK PiArCj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0dXJuIGNvdW50Owo+ ICt9Cj4gKwo+ICtzdGF0aWMgREVWSUNFX0FUVFIobWFjX2FkZHJlc3NfMCwgMDY0NCwgbWFjX2Fk ZHJlc3Nfc2hvdywgbWFjX2FkZHJlc3Nfc3RvcmUpOwo+ICtzdGF0aWMgREVWSUNFX0FUVFIobWFj X2FkZHJlc3NfMSwgMDY0NCwgbWFjX2FkZHJlc3Nfc2hvdywgbWFjX2FkZHJlc3Nfc3RvcmUpOwo+ ICtzdGF0aWMgREVWSUNFX0FUVFIobWFjX2FkZHJlc3NfMiwgMDY0NCwgbWFjX2FkZHJlc3Nfc2hv dywgbWFjX2FkZHJlc3Nfc3RvcmUpOwo+ICtzdGF0aWMgREVWSUNFX0FUVFIobWFjX2FkZHJlc3Nf MywgMDY0NCwgbWFjX2FkZHJlc3Nfc2hvdywgbWFjX2FkZHJlc3Nfc3RvcmUpOwo+ICtzdGF0aWMg REVWSUNFX0FUVFIobWFjX2FkZHJlc3NfNCwgMDY0NCwgbWFjX2FkZHJlc3Nfc2hvdywgbWFjX2Fk ZHJlc3Nfc3RvcmUpOwo+ICtzdGF0aWMgREVWSUNFX0FUVFIobWFjX2FkZHJlc3NfNSwgMDY0NCwg bWFjX2FkZHJlc3Nfc2hvdywgbWFjX2FkZHJlc3Nfc3RvcmUpOwo+ICtzdGF0aWMgREVWSUNFX0FU VFIobWFjX2FkZHJlc3NfNiwgMDY0NCwgbWFjX2FkZHJlc3Nfc2hvdywgbWFjX2FkZHJlc3Nfc3Rv cmUpOwo+ICtzdGF0aWMgREVWSUNFX0FUVFIobWFjX2FkZHJlc3NfNywgMDY0NCwgbWFjX2FkZHJl c3Nfc2hvdywgbWFjX2FkZHJlc3Nfc3RvcmUpOwo+ICsKPiArc3RhdGljIHNzaXplX3QgYWNfcmVj b3Zlcnlfc3RhdHVzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAo+ICsJc3RydWN0IGRldmljZV9h dHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2X2Nv bnRhaW5lciA9IHN5c2ZzX2NvbnRhaW5lcihkZXYpOwo+ICsJc3RydWN0IGllaV93dDYxcDgwM19w dXp6bGUgKm1jdSA9IGRldl9nZXRfZHJ2ZGF0YShkZXZfY29udGFpbmVyKTsKPiArCj4gKwlpbnQg cmV0Owo+ICsKPiArCXJldCA9IGllaV93dDYxcDgwM19wdXp6bGVfZ2V0X21jdV9zdGF0dXMobWN1 KTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwltdXRleF9sb2NrKCZtY3Ut PnN0YXR1c19sb2NrKTsKPiArCXJldCA9IHNwcmludGYoYnVmLCAiJXhcbiIsIG1jdS0+c3RhdHVz LT5hY19yZWNvdmVyeV9zdGF0dXNfZmxhZyk7Cj4gKwltdXRleF91bmxvY2soJm1jdS0+c3RhdHVz X2xvY2spOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBERVZJQ0VfQVRU Ul9STyhhY19yZWNvdmVyeV9zdGF0dXMpOwo+ICsKPiArc3RhdGljIHNzaXplX3QgcG93ZXJfbG9z c19yZWNvdmVyeV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKPiArCXN0cnVjdCBkZXZpY2VfYXR0 cmlidXRlICphdHRyLCBjaGFyICpidWYpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldl9jb250 YWluZXIgPSBzeXNmc19jb250YWluZXIoZGV2KTsKPiArCXN0cnVjdCBpZWlfd3Q2MXA4MDNfcHV6 emxlICptY3UgPSBkZXZfZ2V0X2RydmRhdGEoZGV2X2NvbnRhaW5lcik7Cj4gKwo+ICsJaW50IHJl dDsKPiArCj4gKwlyZXQgPSBpZWlfd3Q2MXA4MDNfcHV6emxlX2dldF9tY3Vfc3RhdHVzKG1jdSk7 Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmbWN1LT5z dGF0dXNfbG9jayk7Cj4gKwlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiV4XG4iLCBtY3UtPnN0YXR1cy0+ cG93ZXJfbG9zc19yZWNvdmVyeSk7Cj4gKwltdXRleF91bmxvY2soJm1jdS0+c3RhdHVzX2xvY2sp Owo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBzc2l6ZV90IHBvd2VyX2xv c3NfcmVjb3Zlcnlfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAo+ICsJCXN0cnVjdCBkZXZpY2Vf YXR0cmlidXRlICphdHRyLAo+ICsJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQo+ICt7 Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXZfY29udGFpbmVyID0gc3lzZnNfY29udGFpbmVyKGRldik7 Cj4gKwlzdHJ1Y3QgaWVpX3d0NjFwODAzX3B1enpsZSAqbWN1ID0gZGV2X2dldF9kcnZkYXRhKGRl dl9jb250YWluZXIpOwo+ICsKPiArCWludCByZXQ7Cj4gKwlsb25nIHBvd2VyX2xvc3NfcmVjb3Zl cnlfYWN0aW9uID0gMDsKPiArCj4gKwlyZXQgPSBrc3RydG9sKGJ1ZiwgMTAsICZwb3dlcl9sb3Nz X3JlY292ZXJ5X2FjdGlvbik7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJ cmV0ID0gaWVpX3d0NjFwODAzX3B1enpsZV93cml0ZV9wb3dlcl9sb3NzX3JlY292ZXJ5KG1jdSwK PiArCQkJKGludClwb3dlcl9sb3NzX3JlY292ZXJ5X2FjdGlvbik7Cj4gKwlpZiAocmV0KQo+ICsJ CXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0dXJuIGNvdW50Owo+ICt9Cj4gKwo+ICtzdGF0aWMgREVW SUNFX0FUVFJfUlcocG93ZXJfbG9zc19yZWNvdmVyeSk7Cj4gKwo+ICtzdGF0aWMgc3NpemVfdCBw b3dlcl9zdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gKwlzdHJ1Y3QgZGV2aWNlX2F0 dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXZfY29u dGFpbmVyID0gc3lzZnNfY29udGFpbmVyKGRldik7Cj4gKwlzdHJ1Y3QgaWVpX3d0NjFwODAzX3B1 enpsZSAqbWN1ID0gZGV2X2dldF9kcnZkYXRhKGRldl9jb250YWluZXIpOwo+ICsKPiArCWludCBy ZXQ7Cj4gKwo+ICsJcmV0ID0gaWVpX3d0NjFwODAzX3B1enpsZV9nZXRfbWN1X3N0YXR1cyhtY3Up Owo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCW11dGV4X2xvY2soJm1jdS0+ c3RhdHVzX2xvY2spOwo+ICsJcmV0ID0gc3ByaW50ZihidWYsICIleFxuIiwgbWN1LT5zdGF0dXMt PnBvd2VyX3N0YXR1cyk7Cj4gKwltdXRleF91bmxvY2soJm1jdS0+c3RhdHVzX2xvY2spOwo+ICsK PiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9STyhwb3dlcl9z dGF0dXMpOwo+ICsKPiArc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmllaV93dDYxcDgwM19wdXp6 bGVfYXR0cnNbXSA9IHsKPiArCSZkZXZfYXR0cl92ZXJzaW9uLmF0dHIsCj4gKwkmZGV2X2F0dHJf YnVpbGRfaW5mby5hdHRyLAo+ICsJJmRldl9hdHRyX2Jvb3Rsb2FkZXJfbW9kZS5hdHRyLAo+ICsJ JmRldl9hdHRyX3Byb3RvY29sX3ZlcnNpb24uYXR0ciwKPiArCSZkZXZfYXR0cl9zZXJpYWxfbnVt YmVyLmF0dHIsCj4gKwkmZGV2X2F0dHJfbWFjX2FkZHJlc3NfMC5hdHRyLAo+ICsJJmRldl9hdHRy X21hY19hZGRyZXNzXzEuYXR0ciwKPiArCSZkZXZfYXR0cl9tYWNfYWRkcmVzc18yLmF0dHIsCj4g KwkmZGV2X2F0dHJfbWFjX2FkZHJlc3NfMy5hdHRyLAo+ICsJJmRldl9hdHRyX21hY19hZGRyZXNz XzQuYXR0ciwKPiArCSZkZXZfYXR0cl9tYWNfYWRkcmVzc181LmF0dHIsCj4gKwkmZGV2X2F0dHJf bWFjX2FkZHJlc3NfNi5hdHRyLAo+ICsJJmRldl9hdHRyX21hY19hZGRyZXNzXzcuYXR0ciwKPiAr CSZkZXZfYXR0cl9hY19yZWNvdmVyeV9zdGF0dXMuYXR0ciwKPiArCSZkZXZfYXR0cl9wb3dlcl9s b3NzX3JlY292ZXJ5LmF0dHIsCj4gKwkmZGV2X2F0dHJfcG93ZXJfc3RhdHVzLmF0dHIsCj4gKwlO VUxMCj4gK307Cj4gKwo+ICtBVFRSSUJVVEVfR1JPVVBTKGllaV93dDYxcDgwM19wdXp6bGUpOwo+ ICsKPiArc3RhdGljIGludCBpZWlfd3Q2MXA4MDNfcHV6emxlX3N5c2ZzX2NyZWF0ZShzdHJ1Y3Qg ZGV2aWNlICpkZXYsCj4gKwkJc3RydWN0IGllaV93dDYxcDgwM19wdXp6bGUgKm1jdSkKPiArewo+ ICsJaW50IHJldDsKPiArCj4gKwltY3UtPmtvYmogPQoKVGhpcyBpcyBhbiBvZGQgcGxhY2UgZm9y IGEgbGluZSBicmVhay4KCj4gKwkJa29iamVjdF9jcmVhdGVfYW5kX2FkZCgiaWVpX3d0NjFwODAz X3B1enpsZV9jb3JlIiwgJmRldi0+a29iaik7Cj4gKwlpZiAoIW1jdS0+a29iaikKPiArCQlyZXR1 cm4gLUVOT01FTTsKPiArCj4gKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXBzKG1jdS0+a29iaiwg aWVpX3d0NjFwODAzX3B1enpsZV9ncm91cHMpOwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIo ZGV2LCAic3lzZnMgY3JlYXRpb24gZmFpbGVkIik7Cj4gKwo+ICsJCS8qIENsZWFuIHVwICovCj4g KwkJa29iamVjdF9kZWwobWN1LT5rb2JqKTsKPiArCQlrb2JqZWN0X3B1dChtY3UtPmtvYmopOwo+ ICsJCW1jdS0+a29iaiA9IE5VTEw7Cj4gKwo+ICsJCXJldHVybiByZXQ7CgpEcm9wIHRoaXMgbGlu ZS4KCj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7CgpSZXR1cm4gcmV0LgoKPiArfQo+ICsKPiArc3Rh dGljIGludCBpZWlfd3Q2MXA4MDNfcHV6emxlX3N5c2ZzX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpk ZXYsCj4gKwkJc3RydWN0IGllaV93dDYxcDgwM19wdXp6bGUgKm1jdSkKPiArewo+ICsJLyogUmVt b3ZlIHN5c2ZzIGdyb3VwcyAqLwo+ICsJc3lzZnNfcmVtb3ZlX2dyb3VwcyhtY3UtPmtvYmosIGll aV93dDYxcDgwM19wdXp6bGVfZ3JvdXBzKTsKPiArCj4gKwkvKiBSZW1vdmUgdGhlIGtvYmplY3Qg Ki8KPiArCWtvYmplY3RfZGVsKG1jdS0+a29iaik7Cj4gKwlrb2JqZWN0X3B1dChtY3UtPmtvYmop Owo+ICsJbWN1LT5rb2JqID0gTlVMTDsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIGludCBpZWlfd3Q2MXA4MDNfcHV6emxlX3Byb2JlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpz ZXJkZXYpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZzZXJkZXYtPmRldjsKPiArCXN0 cnVjdCBpZWlfd3Q2MXA4MDNfcHV6emxlICptY3U7Cj4gKwl1MzIgYmF1ZDsKPiArCWludCByZXQ7 Cj4gKwo+ICsJLyogUmVhZCB0aGUgY3VycmVudC1zcGVlZCBwcm9wZXJ0eSBmcm9tIHRoZSBkZXZp Y2UgdHJlZSAqLwo+ICsJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKGRldi0+b2Zfbm9kZSwgImN1 cnJlbnQtc3BlZWQiLCAmYmF1ZCkpIHsKClN1cmVseSB0aGlzIGlzIHRoZSBiYXVkIHlvdSB3YW50 IHRvIHNldCwgbm90IHdoYXQgaXMgYWxyZWFkeSBzZXQ/Cgo+ICsJCWRldl9lcnIoZGV2LAo+ICsJ CQkiJ2N1cnJlbnQtc3BlZWQnIGlzIG5vdCBzcGVjaWZpZWQgaW4gZGV2aWNlIG5vZGVcbiIpOwo+ ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCS8qIExvZyB0aGUgc3BlY2lmaWVkIEJB VUQgUkFURSAqLwo+ICsJZGV2X2luZm8oZGV2LCAiRHJpdmVyIGJhdWQgcmF0ZTogJWQiLCBiYXVk KTsKPiArCj4gKwkvKiBBbGxvY2F0ZSB0aGUgbWVtb3J5ICovCj4gKwltY3UgPSBkZXZtX2t6YWxs b2MoZGV2LCBzaXplb2YoKm1jdSksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFtY3UpCj4gKwkJcmV0 dXJuIC1FTk9NRU07Cj4gKwo+ICsJbWN1LT52ZXJzaW9uID0gZGV2bV9remFsbG9jKGRldiwgc2l6 ZW9mKCptY3UtPnZlcnNpb24pLCBHRlBfS0VSTkVMKTsKPiArCWlmICghbWN1LT52ZXJzaW9uKQo+ ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCW1jdS0+c3RhdHVzID0gZGV2bV9remFsbG9jKGRl diwgc2l6ZW9mKCptY3UtPnZlcnNpb24pLCBHRlBfS0VSTkVMKTsKPiArCWlmICghbWN1LT5zdGF0 dXMpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJbWN1LT5yZXBseSA9IGRldm1fa3phbGxv YyhkZXYsIHNpemVvZigqbWN1LT5yZXBseSksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFtY3UtPnJl cGx5KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCW1jdS0+cmVwbHktPmRhdGEgPSBkZXZt X2t6YWxsb2MoZGV2LCBJRUlfV1Q2MVA4MDNfUFVaWkxFX1JFU1BfQlVGX1NJWkUsCj4gKwkJCUdG UF9LRVJORUwpOwo+ICsJaWYgKCFtY3UtPnJlcGx5LT5kYXRhKQo+ICsJCXJldHVybiAtRU5PTUVN OwoKV2h5IG5vdCBhbGxvY2F0ZSBhbGwgbWVtb3J5IGF0IG9uY2U/Cgo+ICsJLyogSW5pdGlhbGl6 ZSBkZXZpY2Ugc3RydWN0IGRhdGEgKi8KPiArCW1jdS0+c2VyZGV2ID0gc2VyZGV2Owo+ICsKPiAr CW1jdS0+c3RhdHVzLT5hY19yZWNvdmVyeV9zdGF0dXNfZmxhZyA9IDB4MDA7Cj4gKwltY3UtPnN0 YXR1cy0+cG93ZXJfbG9zc19yZWNvdmVyeSA9IDB4MDA7Cj4gKwltY3UtPnN0YXR1cy0+cG93ZXJf c3RhdHVzID0gMHgwMDsKClRoZXNlIHNob3VsZCBhbHJlYWR5IGJlIDAuCgo+ICsJaW5pdF9jb21w bGV0aW9uKCZtY3UtPnJlcGx5LT5yZWNlaXZlZCk7Cj4gKwo+ICsJLyogTXV0ZXhlcyAqLwo+ICsJ bXV0ZXhfaW5pdCgmbWN1LT5yZXBseV9sb2NrKTsKPiArCW11dGV4X2luaXQoJm1jdS0+YnVzX2xv Y2spOwo+ICsJbXV0ZXhfaW5pdCgmbWN1LT5zdGF0dXNfbG9jayk7Cj4gKwltdXRleF9pbml0KCZt Y3UtPnZlcnNpb25fbG9jayk7CgpXaHkgc28gbWFueT8KCj4gKwkvKiBTZXR1cCBVQVJUIGludGVy ZmFjZSAqLwo+ICsJc2VyZGV2X2RldmljZV9zZXRfZHJ2ZGF0YShzZXJkZXYsIG1jdSk7Cj4gKwlz ZXJkZXZfZGV2aWNlX3NldF9jbGllbnRfb3BzKHNlcmRldiwKPiArCQkJJmllaV93dDYxcDgwM19w dXp6bGVfc2VyZGV2X2RldmljZV9vcHMpOwo+ICsKPiArCXJldCA9IGRldm1fc2VyZGV2X2Rldmlj ZV9vcGVuKGRldiwgc2VyZGV2KTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4g KwlzZXJkZXZfZGV2aWNlX3NldF9iYXVkcmF0ZShzZXJkZXYsIGJhdWQpOwo+ICsKPiArCXNlcmRl dl9kZXZpY2Vfc2V0X2Zsb3dfY29udHJvbChzZXJkZXYsIGZhbHNlKTsKPiArCj4gKwlyZXQgPSBz ZXJkZXZfZGV2aWNlX3NldF9wYXJpdHkoc2VyZGV2LCBTRVJERVZfUEFSSVRZX05PTkUpOwo+ICsJ aWYgKHJldCkgewo+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHNldCBwYXJpdHlcbiIpOwo+ ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gaWVpX3d0NjFwODAzX3B1enpsZV9n ZXRfdmVyc2lvbihtY3UpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXJl dCA9IGllaV93dDYxcDgwM19wdXp6bGVfZ2V0X21hY19hZGRyZXNzZXMobWN1KTsKPiArCWlmIChy ZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXQgPSBpZWlfd3Q2MXA4MDNfcHV6emxlX2dl dF9zZXJpYWxfbnVtYmVyKG1jdSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ ICsJZGV2X2luZm8oZGV2LCAiTUNVIHZlcnNpb246ICVzIiwgbWN1LT52ZXJzaW9uLT52ZXJzaW9u KTsKPiArCj4gKwlkZXZfaW5mbyhkZXYsICJNQ1UgZmlybXdhcmUgYnVpbGQgaW5mbzogJXMiLCBt Y3UtPnZlcnNpb24tPmJ1aWxkX2luZm8pOwo+ICsJZGV2X2luZm8oZGV2LCAiTUNVIGluIGJvb3Rs b2FkZXIgbW9kZTogJXMiLAo+ICsJCQltY3UtPnZlcnNpb24tPmJvb3Rsb2FkZXJfbW9kZSA/ICJ0 cnVlIiA6ICJmYWxzZSIpOwo+ICsJZGV2X2luZm8oZGV2LCAiTUNVIHByb3RvY29sIHZlcnNpb246 ICVzIiwgbWN1LT52ZXJzaW9uLT5wcm90b2NvbF92ZXJzaW9uKTsKPiArCj4gKwlpZiAob2ZfcHJv cGVydHlfcmVhZF9ib29sKGRldi0+b2Zfbm9kZSwgImVuYWJsZS1wcm9iZS1iZWVwIikpIHsKClBy b2JpbmcgaXMgYSBMaW51eGlzdW0uICBJdCBoYXMgbm8gcGxhY2UgaW4gRFQuCgo+ICsJCXJldCA9 IGllaV93dDYxcDgwM19wdXp6bGVfYnV6emVyKG1jdSwgZmFsc2UpOwo+ICsJCWlmIChyZXQpCj4g KwkJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gaWVpX3d0NjFwODAzX3B1enpsZV9z eXNmc19jcmVhdGUoZGV2LCBtY3UpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsK PiArCXJldHVybiBkZXZtX29mX3BsYXRmb3JtX3BvcHVsYXRlKGRldik7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGllaV93dDYxcDgwM19wdXp6bGVfcmVtb3ZlKHN0cnVjdCBzZXJkZXZfZGV2aWNl ICpzZXJkZXYpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZzZXJkZXYtPmRldjsKPiAr CXN0cnVjdCBpZWlfd3Q2MXA4MDNfcHV6emxlICptY3UgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsK PiArCj4gKwkvKiBSZW1vdmUgc3lzZnMga29iamVjdHMgYW5kIGF0dHJpYnV0ZXMgKi8KPiArCWll aV93dDYxcDgwM19wdXp6bGVfc3lzZnNfcmVtb3ZlKGRldiwgbWN1KTsKPiArCj4gKwlkZXZfaW5m byhkZXYsICJEZXZpY2UgdW5yZWdpc3RlcmVkIik7CgpObyBjb250ZW50bGVzcy9mdW5jdGlvbmxl c3MgcHJpbnRzIHBsZWFzZS4KCj4gK30KPiArCj4gKwoKUGxhY2UgdGhlIHRhYmxlIGhlcmUuCgo+ ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBpZWlfd3Q2MXA4MDNfcHV6emxlX2R0X2lkcyk7Cj4g Kwo+ICtzdGF0aWMgc3RydWN0IHNlcmRldl9kZXZpY2VfZHJpdmVyIGllaV93dDYxcDgwM19wdXp6 bGVfZHJ2ID0gewo+ICsJLnByb2JlCQkJPSBpZWlfd3Q2MXA4MDNfcHV6emxlX3Byb2JlLAo+ICsJ LnJlbW92ZQkJCT0gaWVpX3d0NjFwODAzX3B1enpsZV9yZW1vdmUsCj4gKwkuZHJpdmVyID0gewo+ ICsJCS5uYW1lCQk9ICJpZWktd3Q2MXA4MDMtcHV6emxlIiwKPiArCQkub2ZfbWF0Y2hfdGFibGUJ PSBpZWlfd3Q2MXA4MDNfcHV6emxlX2R0X2lkcywKPiArCX0sCj4gK307Cj4gKwo+ICttb2R1bGVf c2VyZGV2X2RldmljZV9kcml2ZXIoaWVpX3d0NjFwODAzX3B1enpsZV9kcnYpOwo+ICsKPiArTU9E VUxFX0xJQ0VOU0UoIkdQTCIpOwo+ICtNT0RVTEVfQVVUSE9SKCJMdWthIEtvdmFjaWMgPGx1a2Eu a292YWNpY0BzYXJ0dXJhLmhyPiIpOwo+ICtNT0RVTEVfREVTQ1JJUFRJT04oImlFaSBXVDYxUDgw MyBQVVpaTEUgTUNVIERyaXZlciIpOwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9p ZWktd3Q2MXA4MDMtcHV6emxlLmggYi9pbmNsdWRlL2xpbnV4L21mZC9pZWktd3Q2MXA4MDMtcHV6 emxlLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMmJiNjI1 NjU3NGJjCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2luY2x1ZGUvbGludXgvbWZkL2llaS13dDYx cDgwMy1wdXp6bGUuaAo+IEBAIC0wLDAgKzEsMjcgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAtb25seSAqLwo+ICsKPiArLyogaUVpIFdUNjFQODAzIFBVWlpMRSBNQ1Ug TUZEIERyaXZlcgoKTm8gc3VjaCB0aGluZyBhcyBhbiBNRkQuCgpQbGVhc2UgZGVzY3JpYmUgdGhl IGRldmljZS4KCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAyMCBTYXJ0dXJhIEx0ZC4KPiAr ICogQXV0aG9yOiBMdWthIEtvdmFjaWMgPGx1a2Eua292YWNpY0BzYXJ0dXJhLmhyPgo+ICsgKi8K PiArCj4gKyNpZm5kZWYgX0xJTlVYX0lFSV9XVDYxUDgwM19QVVpaTEVfSF8KPiArI2RlZmluZSBf TElOVVhfSUVJX1dUNjFQODAzX1BVWlpMRV9IXwoKcy9MSU5VWC9NRkQvCgo+ICsjZGVmaW5lIElF SV9XVDYxUDgwM19QVVpaTEVfQlVGX1NJWkUgNTEyCj4gKwo+ICtzdHJ1Y3QgaWVpX3d0NjFwODAz X3B1enpsZV9tY3VfdmVyc2lvbjsKPiArc3RydWN0IGllaV93dDYxcDgwM19wdXp6bGVfcmVwbHk7 Cj4gK3N0cnVjdCBpZWlfd3Q2MXA4MDNfcHV6emxlOwo+ICsKPiAraW50IGllaV93dDYxcDgwM19w dXp6bGVfd3JpdGVfY29tbWFuZF93YXRjaGRvZyhzdHJ1Y3QgaWVpX3d0NjFwODAzX3B1enpsZSAq bWN1LAo+ICsJCXVuc2lnbmVkIGNoYXIgKmNtZCwgc2l6ZV90IHNpemUsCj4gKwkJdW5zaWduZWQg Y2hhciAqcmVwbHlfZGF0YSwgc2l6ZV90ICpyZXBseV9zaXplLAo+ICsJCWludCByZXRyeV9jb3Vu dCk7Cj4gKwo+ICtpbnQgaWVpX3d0NjFwODAzX3B1enpsZV93cml0ZV9jb21tYW5kKHN0cnVjdCBp ZWlfd3Q2MXA4MDNfcHV6emxlICptY3UsCj4gKwkJdW5zaWduZWQgY2hhciAqY21kLCBzaXplX3Qg c2l6ZSwKPiArCQl1bnNpZ25lZCBjaGFyICpyZXBseV9kYXRhLCBzaXplX3QgKnJlcGx5X3NpemUp Owo+ICsKPiArI2VuZGlmIC8qIF9MSU5VWF9JRUlfV1Q2MVA4MDNfUFVaWkxFX0hfICovCgotLSAK TGVlIEpvbmVzIFvmnY7nkLzmlq9dClNlbmlvciBUZWNobmljYWwgTGVhZCAtIERldmVsb3BlciBT ZXJ2aWNlcwpMaW5hcm8ub3JnIOKUgiBPcGVuIHNvdXJjZSBzb2Z0d2FyZSBmb3IgQXJtIFNvQ3MK Rm9sbG93IExpbmFybzogRmFjZWJvb2sgfCBUd2l0dGVyIHwgQmxvZwoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5n IGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5p bmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=