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=-17.8 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 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 B5261C432BE for ; Sun, 29 Aug 2021 11:18:11 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 7F8EA60E90 for ; Sun, 29 Aug 2021 11:18:11 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 7F8EA60E90 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:Cc:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=qIbklgIj8Q4xOUxuZD+6saIDJDTit206QSOmyOnMOJ0=; b=bb3Ql8INvyoPmCLqjeqf+frvQr 6X4WdMZLzzBiOxKWBjIOk/VAVvotsoNB/FZKfDzPYsb9gNlZvE1G+MGG+aeetUBg9vyyKU4nZ20y7 JsKDEKyfBeTEn96IEXGnpvsmL8Le51+fPXlM0UOesRffqw2Z+1bBH+cnVDLSjrzZqJHwX9Ef9uWXf 461nH1JxtqbE53kYvQnnKLsKZpdRuWFkdWi28wOx5m5bQO/CWskLYBCSp7pPDe4jbmXKxNTBehc08 XMOVHkogNAY02z62kNtnJk6Cl4M0cmh4INNhZ+y0kwR49zHlMesBAiuwEIhBqykgeBc28Bv1v8qho HCd/yzog==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mKIn7-00FRoX-Vu; Sun, 29 Aug 2021 11:15:58 +0000 Received: from mail-lj1-x233.google.com ([2a00:1450:4864:20::233]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mKIn0-00FRmV-5K for linux-arm-kernel@lists.infradead.org; Sun, 29 Aug 2021 11:15:54 +0000 Received: by mail-lj1-x233.google.com with SMTP id s12so20439295ljg.0 for ; Sun, 29 Aug 2021 04:15:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=wC1CTh2l7snFmcD0fhsHwXScxjdeg9TL/tj6oR5lm9E=; b=M7duQ9UpxG/cG8eEll+uZDt7LF4KIMxMFa//d06YEceQQ/0yGAunxGEyjhhmt00d8r 0sYlGY90sGeAkLXQAJclXd8gI2wd9Ug2R0s5dyWOj4xXxesu57Q/zzU4F5pYBTlZO3LX n8nM6uacMI+aNx458BMpTUGQz5WktLvIgimD5U9vjQlBjjuy3jtLoG4WvFODzLhuwIiw Fp1CGOmOjXx8T06QptUlNq3JvSCvHccLfdNU0nduJxMvnjcSTER07+O3Ximq1tlGVDy6 9kIzAdJnogcm8yuwDOd97qayoqRXPSGMHWsQLr/HWATOSt5MZZzi99TRMwmKdsWflOoJ iQ2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=wC1CTh2l7snFmcD0fhsHwXScxjdeg9TL/tj6oR5lm9E=; b=tY73Hg4A231fdnTzqzhQNweWvGF2gXOZeeWXYfNprudWViE3EVjopqkynm2LetSSMa sbup0++pTVYdijftOFI06UprM42fC1riw0bnLdFe8IdAbBWoLYHWu3udYxxxEBbpTQCf PdXmGu7h4QhVDSr4KsTH2nas/0YBM7De52ggyBgKYLiVwgjF04NOXieXpnR/ZfkrNeL/ jlBHvwMILr03DBNThUxmXPRKoR8Poze+qdEibJfXcZUUAdMlNKsq1Md2qkNyUUzsLKMr NLsqRsh5qqvQf9+OwA4CK6LrE8Qm95W8MjCFm1yvapWkX3iv8i6W63krBB22G7LyXyVL caxA== X-Gm-Message-State: AOAM5319FmwgobNRGmSzC2MhOPRrgcQIt9PwqKki682EyH55CkF5GDj7 +za9sLDaCS8NU+al+hxdRxU= X-Google-Smtp-Source: ABdhPJyrusqmQ0vc6TgU39ZbYI9vNF3dJPDkSJmOabhzX1+LNmqEBHVxYyztTkVFyVb7CNgrWyp5AA== X-Received: by 2002:a2e:7018:: with SMTP id l24mr16262399ljc.277.1630235747487; Sun, 29 Aug 2021 04:15:47 -0700 (PDT) Received: from [192.168.0.131] ([194.183.54.57]) by smtp.gmail.com with ESMTPSA id e8sm1406961ljj.132.2021.08.29.04.15.46 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 29 Aug 2021 04:15:46 -0700 (PDT) Subject: Re: [PATCH v3 2/5] leds: Add driver for QCOM SPMI Flash LEDs To: =?UTF-8?B?TsOtY29sYXMgRi4gUi4gQS4gUHJhZG8=?= Cc: Pavel Machek , Dan Murphy , Bjorn Andersson , Andy Gross , Rob Herring , linux-leds@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, Brian Masney , Luca Weiss , Russell King , Georgi Djakov , linux-kernel@vger.kernel.org, phone-devel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, ~lkcamp/patches@lists.sr.ht, =?UTF-8?Q?Andr=c3=a9_Almeida?= , kernel@collabora.com References: <20210803162641.1525980-1-nfraprado@collabora.com> <20210803162641.1525980-3-nfraprado@collabora.com> <20210824214515.ekjpvaymkgxltlzp@notapiano> From: Jacek Anaszewski Message-ID: <278ea1e8-8b21-457d-78d7-fbb32544fe0a@gmail.com> Date: Sun, 29 Aug 2021 13:15:45 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 MIME-Version: 1.0 In-Reply-To: <20210824214515.ekjpvaymkgxltlzp@notapiano> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210829_041550_334249_80447800 X-CRM114-Status: GOOD ( 29.14 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgTmljb2xhcywKCk9uIDgvMjQvMjEgMTE6NDUgUE0sIE7DrWNvbGFzIEYuIFIuIEEuIFByYWRv IHdyb3RlOgo+IEhpIEphY2VrLAo+IAo+IFRoYW5rIHlvdSBmb3IgdGhlIHJldmlldy4gSSdsbCBh bnN3ZXIgYmVsb3cuCj4gCj4gT24gVHVlLCBBdWcgMTcsIDIwMjEgYXQgMTI6MDM6NDlBTSArMDIw MCwgSmFjZWsgQW5hc3pld3NraSB3cm90ZToKPj4gSGkgTmljb2xhcywKPj4KPj4gVGhhbmtzIGZv ciB0aGUgdXBkYXRlLiBTZWUgbXkgY29tbWVudHMgYmVsb3cuCj4+Cj4+IE9uIDgvMy8yMSA2OjI2 IFBNLCBOw61jb2xhcyBGLiBSLiBBLiBQcmFkbyB3cm90ZToKPj4+IEFkZCBkcml2ZXIgZm9yIFF1 YWxjb21tJ3MgU1BNSSBGbGFzaCBMRURzLiBUaGVzZSBhcmUgY29udHJvbGxlZAo+Pj4gdGhyb3Vn aCBhbiBTUE1JIGJ1cyBhbmQgYXJlIHBhcnQgb2YgdGhlIFBNODk0MSBQTUlDLiBUaGVyZSBhcmUg dHdvIExFRHMKPj4+IHByZXNlbnQgb24gdGhlIGNoaXAsIHdoaWNoIGNhbiBiZSB1c2VkIGluZGVw ZW5kZW50bHkgYXMgY2FtZXJhIGZsYXNoIG9yLAo+Pj4gd2hlbiBpbiB0b3JjaCBtb2RlLCBhcyBh IGxhbnRlcm4uCj4+Pgo+Pj4gU2lnbmVkLW9mZi1ieTogTsOtY29sYXMgRi4gUi4gQS4gUHJhZG8g PG5mcmFwcmFkb0Bjb2xsYWJvcmEuY29tPgo+Pj4gLS0tCj4+Pgo+Pj4gQ2hhbmdlcyBpbiB2MzoK Pj4+IC0gVGhlIHR3byBMRURzIGNhbiBub3cgYmUgb3BlcmF0ZWQgaW5kZXBlbmRlbnRseSBldmVu IHdoZW4gaW4gdG9yY2ggbW9kZQo+Pj4gLSBUaGUgZmxhc2hlcyBjYW4gbm93IHN0cm9iZSBjb25z ZWN1dGl2ZSB0aW1lcyB3aXRob3V0IG5lZWRpbmcgdG8gbWFudWFsbHkKPj4+ICAgICBkaXNhYmxl IHRoZW0gYmV0d2VlbiBzdHJvYmVzCj4+PiAtIEltcGxlbWVudGVkIHN0cm9iZV9nZXQoKQo+Pj4g LSBNb3ZlZCBkdCBwYXJzaW5nIHRvIGEgc2VwYXJhdGUgZnVuY3Rpb24KPj4+IC0gU3BsaXQgbXVs dGlwbGV4ZWQgdG9yY2gvZmxhc2ggb24vb2ZmIGFuZCB0b3JjaC9mbGFzaCByZWd1bGF0b3Igb24v b2ZmCj4+PiAgICAgZnVuY3Rpb25zCj4+PiAtIFNldCBjdXJyZW50IG9uIGJyaWdodG5lc3MgY2Fs bGJhY2sgYW5kIHRpbWVvdXQgb24gdGltZW91dCBjYWxsYmFjaywgaW5zdGVhZCBvZgo+Pj4gICAg IHNldHRpbmcgZXZlcnl0aGluZyBldmVyeSB0aW1lIHdoZW4gc3Ryb2JpbmcvdHVybmluZyB0b3Jj aCBvbgo+Pj4gLSBBbmQgYSB3aG9sZSBsb3Qgb2Ygb3RoZXIgbWlub3IgY2hhbmdlcwo+Pj4KPj4+ IENoYW5nZXMgaW4gdjI6Cj4+PiAtIFRoYW5rcyB0byBKYWNlazoKPj4+ICAgICAtIEltcGxlbWVu dGVkIGZsYXNoIExFRCBjbGFzcyBmcmFtZXdvcmsKPj4+IC0gVGhhbmtzIHRvIEJqb3JuOgo+Pj4g ICAgIC0gUmVuYW1lZCBkcml2ZXIgdG8gInFjb20gc3BtaSBmbGFzaCIKPj4+IC0gUmVmYWN0b3Jl ZCBjb2RlCj4+PiAtIEFkZGVkIG1pc3NpbmcgY29weXJpZ2h0Cj4+Pgo+Pj4gICAgZHJpdmVycy9s ZWRzL2ZsYXNoL0tjb25maWcgICAgICAgICAgICAgICAgfCAgICA4ICsKPj4+ICAgIGRyaXZlcnMv bGVkcy9mbGFzaC9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICAgMSArCj4+PiAgICBkcml2ZXJz L2xlZHMvZmxhc2gvbGVkcy1xY29tLXNwbWktZmxhc2guYyB8IDEyNTEgKysrKysrKysrKysrKysr KysrKysrCj4+PiAgICAzIGZpbGVzIGNoYW5nZWQsIDEyNjAgaW5zZXJ0aW9ucygrKQo+Pj4gICAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbGVkcy9mbGFzaC9sZWRzLXFjb20tc3BtaS1mbGFz aC5jCj4+Pgo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9mbGFzaC9LY29uZmlnIGIvZHJp dmVycy9sZWRzL2ZsYXNoL0tjb25maWcKPj4+IGluZGV4IDNmNDlmM2VkYmZmYi4uNzJmNjEzMjNj ZDJhIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9sZWRzL2ZsYXNoL0tjb25maWcKPj4+ICsrKyBi L2RyaXZlcnMvbGVkcy9mbGFzaC9LY29uZmlnCj4+PiBAQCAtMjQsNCArMjQsMTIgQEAgY29uZmln IExFRFNfUlQ4NTE1Cj4+PiAgICAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxl LCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCj4+PiAgICAJICB3aWxsIGJlIGNhbGxlZCBsZWRz LXJ0ODUxNS4KPj4+ICtjb25maWcgTEVEU19RQ09NX1NQTUlfRkxBU0gKPj4+ICsJdHJpc3RhdGUg IlN1cHBvcnQgZm9yIFFDT00gU1BNSSBGbGFzaCBMRURzIgo+Pj4gKwlkZXBlbmRzIG9uIFJFR01B UF9TUE1JCj4+PiArCWRlcGVuZHMgb24gT0YKPj4+ICsJaGVscAo+Pj4gKwkgIFRoaXMgb3B0aW9u IGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIGZsYXNoL3RvcmNoIExFRHMgcHJlc2VudCBpbgo+Pj4g KwkgIFF1YWxjb21tJ3MgUE04OTQxIFBNSUMuCj4+PiArCj4+PiAgICBlbmRpZiAjIExFRFNfQ0xB U1NfRkxBU0gKPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvZmxhc2gvTWFrZWZpbGUgYi9k cml2ZXJzL2xlZHMvZmxhc2gvTWFrZWZpbGUKPj4+IGluZGV4IDA5YWVlNTYxZjc2OS4uYzE0MWQy NzdlOWI2IDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9sZWRzL2ZsYXNoL01ha2VmaWxlCj4+PiAr KysgYi9kcml2ZXJzL2xlZHMvZmxhc2gvTWFrZWZpbGUKPj4+IEBAIC0yLDMgKzIsNCBAQAo+Pj4g ICAgb2JqLSQoQ09ORklHX0xFRFNfUlQ0NTA1KQkrPSBsZWRzLXJ0NDUwNS5vCj4+PiAgICBvYmot JChDT05GSUdfTEVEU19SVDg1MTUpCSs9IGxlZHMtcnQ4NTE1Lm8KPj4+ICtvYmotJChDT05GSUdf TEVEU19RQ09NX1NQTUlfRkxBU0gpCSs9IGxlZHMtcWNvbS1zcG1pLWZsYXNoLm8KPj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2xlZHMvZmxhc2gvbGVkcy1xY29tLXNwbWktZmxhc2guYyBiL2RyaXZl cnMvbGVkcy9mbGFzaC9sZWRzLXFjb20tc3BtaS1mbGFzaC5jCj4+PiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+Pj4gaW5kZXggMDAwMDAwMDAwMDAwLi45NzYzNzA3YmI5ODYKPj4+IC0tLSAvZGV2L251 bGwKPj4+ICsrKyBiL2RyaXZlcnMvbGVkcy9mbGFzaC9sZWRzLXFjb20tc3BtaS1mbGFzaC5jCj4+ PiBAQCAtMCwwICsxLDEyNTEgQEAKPj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMC1vbmx5Cj4+PiArLyoKPj4+ICsgKiBRdWFsY29tbSBTUE1JIEZsYXNoIExFRHMgRHJpdmVy Cj4+PiArICoKPj4+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjAtMjAyMSwgTsOtY29sYXMgRi4gUi4g QS4gUHJhZG8gPG5AbmZyYXByYWRvLm5ldD4KPj4+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjEsIENv bGxhYm9yYSBMdGQuCj4+PiArICoKPj4+ICsgKiBCYXNlZCBvbiBRUE5QIExFRHMgZHJpdmVyIGZy b20gZG93bnN0cmVhbSBNU00ga2VybmVsIHNvdXJjZXMuCj4+PiArICogQ29weXJpZ2h0IChjKSAy MDEyLTIwMTMsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+Pj4g KyAqLwo+Pj4gKwo+Pj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+Pj4gKyNpbmNsdWRlIDxs aW51eC9kZXZpY2UuaD4KPj4+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4+PiArI2luY2x1 ZGUgPGxpbnV4L2xlZC1jbGFzcy1mbGFzaC5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4KPj4+ICsjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KPj4+ICsjaW5jbHVkZSA8bGludXgvb2Zf ZGV2aWNlLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgo+Pj4gKyNpbmNsdWRlIDxs aW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KPj4+ICsjaW5jbHVkZSA8bGludXgvc3BtaS5oPgo+ Pj4gKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KPj4+ICsjaW5jbHVkZSA8bGludXgvc3lzZnMu aD4KPj4+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPj4+ICsKPj4+ICsjZGVmaW5lIFFDT01f RkxBU0hfQUREUl9QRVJJUEhFUkFMX1NVQlRZUEUJMHgwNQo+Pj4gKyNkZWZpbmUgUUNPTV9GTEFT SF9BRERSX1NUQVRVUwkJCTB4MTAKPj4+ICsjZGVmaW5lIFFDT01fRkxBU0hfQUREUl9TQUZFVFlf VElNRVIJCTB4NDAKPj4+ICsjZGVmaW5lIFFDT01fRkxBU0hfQUREUl9NQVhfQ1VSUgkJMHg0MQo+ Pj4gKyNkZWZpbmUgUUNPTV9GTEFTSF9BRERSX0NVUlJfTEVEMAkJMHg0Mgo+Pj4gKyNkZWZpbmUg UUNPTV9GTEFTSF9BRERSX0NVUlJfTEVEMQkJMHg0Mwo+Pj4gKyNkZWZpbmUgUUNPTV9GTEFTSF9B RERSX0NMQU1QX0NVUlIJCTB4NDQKPj4+ICsjZGVmaW5lIFFDT01fRkxBU0hfQUREUl9FTkFCTEVf Q09OVFJPTAkJMHg0Ngo+Pj4gKyNkZWZpbmUgUUNPTV9GTEFTSF9BRERSX0xFRF9TVFJPQkVfQ1RS TAkJMHg0Nwo+Pj4gKyNkZWZpbmUgUUNPTV9GTEFTSF9BRERSX0xFRF9UTVJfQ1RSTAkJMHg0OAo+ Pj4gKyNkZWZpbmUgUUNPTV9GTEFTSF9BRERSX0hFQURST09NCQkweDRBCj4+PiArI2RlZmluZSBR Q09NX0ZMQVNIX0FERFJfU1RBUlRVUF9ERUxBWQkJMHg0Qgo+Pj4gKyNkZWZpbmUgUUNPTV9GTEFT SF9BRERSX01BU0tfRU5BQkxFCQkweDRDCj4+PiArI2RlZmluZSBRQ09NX0ZMQVNIX0FERFJfVlJF R19PS19GT1JDRQkJMHg0Rgo+Pj4gKyNkZWZpbmUgUUNPTV9GTEFTSF9BRERSX0xFRF9VTkxPQ0tf U0VDVVJFCTB4RDAKPj4+ICsjZGVmaW5lIFFDT01fRkxBU0hfQUREUl9MRURfVE9SQ0gJCTB4RTQK Pj4+ICsjZGVmaW5lIFFDT01fRkxBU0hfQUREUl9GQVVMVF9ERVRFQ1QJCTB4NTEKPj4+ICsjZGVm aW5lIFFDT01fRkxBU0hfQUREUl9SQU1QX1JBVEUJCTB4NTQKPj4+ICsjZGVmaW5lIFFDT01fRkxB U0hfQUREUl9WUEhfUFdSX0RST09QCQkweDVBCj4+PiArCj4+PiArI2RlZmluZSBRQ09NX0ZMQVNI X01BWF9MRVZFTAkJMHg0Rgo+Pj4gKyNkZWZpbmUgUUNPTV9GTEFTSF9UT1JDSF9NQVhfTEVWRUwJ MHgwRgo+Pj4gKyNkZWZpbmUJUUNPTV9GTEFTSF9OT19NQVNLCQkweDAwCj4+PiArCj4+PiArI2Rl ZmluZSBRQ09NX0ZMQVNIX01BU0tfMQkJMHgyMAo+Pj4gKyNkZWZpbmUgUUNPTV9GTEFTSF9NQVNL X1JFR19NQVNLCTB4RTAKPj4+ICsjZGVmaW5lIFFDT01fRkxBU0hfSEVBRFJPT01fTUFTSwkweDAz Cj4+PiArI2RlZmluZSBRQ09NX0ZMQVNIX1NBRkVUWV9USU1FUl9NQVNLCTB4N0YKPj4+ICsjZGVm aW5lIFFDT01fRkxBU0hfQ1VSUkVOVF9NQVNLCQkweEZGCj4+PiArI2RlZmluZSBRQ09NX0ZMQVNI X01BWF9DVVJSRU5UX01BU0sJMHg3Rgo+Pj4gKyNkZWZpbmUgUUNPTV9GTEFTSF9UTVJfTUFTSwkJ MHgwMwo+Pj4gKyNkZWZpbmUgUUNPTV9GTEFTSF9UTVJfV0FUQ0hET0cJCTB4MDMKPj4+ICsjZGVm aW5lIFFDT01fRkxBU0hfVE1SX1NBRkVUWQkJMHgwMAo+Pj4gKyNkZWZpbmUgUUNPTV9GTEFTSF9G QVVMVF9ERVRFQ1RfTUFTSwkweDgwCj4+PiArI2RlZmluZSBRQ09NX0ZMQVNIX0hXX1ZSRUdfT0sJ CTB4NDAKPj4+ICsjZGVmaW5lIFFDT01fRkxBU0hfVlJFR19NQVNLCQkweEMwCj4+PiArI2RlZmlu ZSBRQ09NX0ZMQVNIX1NUQVJUVVBfRExZX01BU0sJMHgwMgo+Pj4gKyNkZWZpbmUgUUNPTV9GTEFT SF9SQU1QX1JBVEVfTUFTSwkweEJGCj4+PiArI2RlZmluZSBRQ09NX0ZMQVNIX1ZQSF9QV1JfRFJP T1BfTUFTSwkweEYzCj4+PiArCj4+PiArI2RlZmluZSBRQ09NX0ZMQVNIX0VOQUJMRV9BTEwJCTB4 RTAKPj4+ICsjZGVmaW5lIFFDT01fRkxBU0hfRU5BQkxFX01PRFVMRQkweDgwCj4+PiArI2RlZmlu ZSBRQ09NX0ZMQVNIX0VOQUJMRV9NT0RVTEVfTUFTSwkweDgwCj4+PiArI2RlZmluZSBRQ09NX0ZM QVNIX0RJU0FCTEVfQUxMCQkweDAwCj4+PiArI2RlZmluZSBRQ09NX0ZMQVNIX0VOQUJMRV9NQVNL CQkweEUwCj4+PiArI2RlZmluZSBRQ09NX0ZMQVNIX0VOQUJMRV9MRUQwCQkweEMwCj4+PiArI2Rl ZmluZSBRQ09NX0ZMQVNIX0VOQUJMRV9MRUQxCQkweEEwCj4+PiArI2RlZmluZSBRQ09NX0ZMQVNI X0lOSVRfTUFTSwkJMHhFMAo+Pj4gKyNkZWZpbmUgUUNPTV9GTEFTSF9TRUxGQ0hFQ0tfRU5BQkxF CTB4ODAKPj4+ICsjZGVmaW5lIFFDT01fRkxBU0hfU0VMRkNIRUNLX0RJU0FCTEUJMHgwMAo+Pj4g Kwo+Pj4gKyNkZWZpbmUgUUNPTV9GTEFTSF9TVFJPQkVfU1cJCTB4QzAKPj4+ICsjZGVmaW5lIFFD T01fRkxBU0hfU1RST0JFX0hXCQkweDA0Cj4+PiArI2RlZmluZSBRQ09NX0ZMQVNIX1NUUk9CRV9N QVNLCQkweEM3Cj4+PiArI2RlZmluZSBRQ09NX0ZMQVNIX1NUUk9CRV9MRUQwCQkweDgwCj4+PiAr I2RlZmluZSBRQ09NX0ZMQVNIX1NUUk9CRV9MRUQxCQkweDQwCj4+PiArCj4+PiArI2RlZmluZSBR Q09NX0ZMQVNIX1RPUkNIX01BU0sJCTB4MDMKPj4+ICsjZGVmaW5lIFFDT01fRkxBU0hfTEVEX1RP UkNIX0VOQUJMRQkweDAwCj4+PiArI2RlZmluZSBRQ09NX0ZMQVNIX0xFRF9UT1JDSF9ESVNBQkxF CTB4MDMKPj4+ICsjZGVmaW5lIFFDT01fRkxBU0hfVU5MT0NLX1NFQ1VSRQkweEE1Cj4+PiArI2Rl ZmluZSBRQ09NX0ZMQVNIX1NFQ1VSRV9NQVNLCQkweEZGCj4+PiArCj4+PiArI2RlZmluZSBRQ09N X0ZMQVNIX1NVQlRZUEVfRFVBTAkJMHgwMQo+Pj4gKyNkZWZpbmUgUUNPTV9GTEFTSF9TVUJUWVBF X1NJTkdMRQkweDAyCj4+PiArCj4+PiArI2RlZmluZSBRQ09NX0ZMQVNIX0RVUkFUSU9OX1NURVAJ MTAwMDAKPj4+ICsjZGVmaW5lIFFDT01fRkxBU0hfRFVSQVRJT05fTUlOCQkxMDAwMAo+Pj4gKyNk ZWZpbmUgUUNPTV9GTEFTSF9EVVJBVElPTl9ERUZBVUxUCTIwMDAwMAo+Pj4gKwo+Pj4gKyNkZWZp bmUgUUNPTV9GTEFTSF9DVVJSRU5UX1NURVAJCTEyNTAwCj4+PiArI2RlZmluZSBRQ09NX0ZMQVNI X0NVUlJFTlRfTUlOCQkxMjUwMAo+Pj4gKwo+Pj4gKyNkZWZpbmUgUUNPTV9GTEFTSF9ERUZBVUxU X0NMQU1QCTIwMDAwMAo+Pj4gKwo+Pj4gKyNkZWZpbmUgUUNPTV9GTEFTSF9NQVNLX09OX0xFRDAJ CTB4OAo+Pj4gKyNkZWZpbmUgUUNPTV9GTEFTSF9NQVNLX09OX0xFRDEJCTB4Mgo+Pj4gKyNkZWZp bmUgUUNPTV9GTEFTSF9NQVNLX1NUQVRVU19USU1FRE9VVAkweDUKPj4+ICsKPj4+ICtlbnVtIHFj b21fZmxhc2hfaGVhZHJvb20gewo+Pj4gKwlRQ09NX0ZMQVNIX0hFQURST09NXzI1ME1WLAo+Pj4g KwlRQ09NX0ZMQVNIX0hFQURST09NXzMwME1WLAo+Pj4gKwlRQ09NX0ZMQVNIX0hFQURST09NXzQw ME1WLAo+Pj4gKwlRQ09NX0ZMQVNIX0hFQURST09NXzUwME1WLAo+Pj4gK307Cj4+PiArCj4+PiAr ZW51bSBxY29tX2ZsYXNoX3N0YXJ0dXBfZGx5IHsKPj4+ICsJUUNPTV9GTEFTSF9TVEFSVFVQX0RM WV8xMFVTLAo+Pj4gKwlRQ09NX0ZMQVNIX1NUQVJUVVBfRExZXzMyVVMsCj4+PiArCVFDT01fRkxB U0hfU1RBUlRVUF9ETFlfNjRVUywKPj4+ICsJUUNPTV9GTEFTSF9TVEFSVFVQX0RMWV8xMjhVUywK Pj4+ICt9Owo+Pj4gKwo+Pj4gK2VudW0gcWNvbV9mbGFzaF9pZHMgewo+Pj4gKwlRQ09NX0ZMQVNI X0lEX0xFRDAsCj4+PiArCVFDT01fRkxBU0hfSURfTEVEMSwKPj4+ICt9Owo+Pj4gKwo+Pj4gKy8q Kgo+Pj4gKyAqIHN0cnVjdCBxY29tX2ZsYXNoX2xlZCAtIFJlcHJlc2VudHMgZWFjaCBpbmRpdmlk dWFsIGZsYXNoIExFRAo+Pj4gKyAqIEBmbGVkX2NkZXY6IGZsYXNoIExFRCBjbGFzc2Rldgo+Pj4g KyAqIEBpZDogTEVEIElEIGFzIGdpdmVuIGJ5IGVudW0gcWNvbV9mbGFzaF9pZHMKPj4+ICsgKiBA ZGVmYXVsdF9vbjogZGVmYXVsdCBzdGF0ZSBmb3IgdGhlIExFRAo+Pj4gKyAqIEBmbGFzaF9lbmFi bGVfY21kOiBlbmFibGUgY29tbWFuZCBmb3IgcGFydGljdWxhciBmbGFzaAo+Pj4gKyAqIEBmbGFz aF9zdHJvYmVfY21kOiBzdHJvYmUgY29tbWFuZCBmb3IgcGFydGljdWxhciBmbGFzaAo+Pj4gKyAq IEBjdXJyZW50X2FkZHI6IGFkZHJlc3MgdG8gd3JpdGUgZm9yIGN1cnJlbnQKPj4+ICsgKiBAbWFz a19sZWRfb246IGJpdG1hc2sgZm9yIFNUQVRVUyByZWdpc3RlciB0aGF0IHNob3dzIGlmIExFRCBp cyBvbgo+Pj4gKyAqIEBmbGFzaF9jdXJyZW50X2ludmFsaWRhdGVkOiB3aGV0aGVyIHRoZSBmbGFz aCBjdXJyZW50IGluIHRoZSBjdXJyZW50IHJlZ2lzdGVyCj4+PiArICoJd2FzIGludmFsaWRhdGVk IGJ5IHRvcmNoIHVzYWdlCj4+PiArICovCj4+PiArc3RydWN0IHFjb21fZmxhc2hfbGVkIHsKPj4+ ICsJc3RydWN0IGxlZF9jbGFzc2Rldl9mbGFzaCBmbGVkX2NkZXY7Cj4+PiArCWVudW0gcWNvbV9m bGFzaF9pZHMgaWQ7Cj4+PiArCWJvb2wgZGVmYXVsdF9vbjsKPj4+ICsJdTggZmxhc2hfZW5hYmxl X2NtZDsKPj4+ICsJdTggZmxhc2hfc3Ryb2JlX2NtZDsKPj4+ICsJdTE2IGN1cnJlbnRfYWRkcjsK Pj4+ICsJdTggbWFza19sZWRfb247Cj4+PiArCWJvb2wgZmxhc2hfY3VycmVudF9pbnZhbGlkYXRl ZDsKPj4+ICt9Owo+Pj4gKwo+Pj4gKy8qKgo+Pj4gKyAqIHN0cnVjdCBxY29tX2ZsYXNoX2Rldmlj ZSAtIFFDT00gU1BNSSBGbGFzaCBkZXZpY2UsIGNvbnRhaW5zIDIgZmxhc2ggTEVEcwo+Pj4gKyAq IEByZWdtYXA6IHJlZ21hcCB1c2VkIHRvIGFjY2VzcyBMRUQgcmVnaXN0ZXJzIG92ZXIgU1BNSQo+ Pj4gKyAqIEBiYXNlOiBiYXNlIHJlZ2lzdGVyIGdpdmVuIGluIGRldmljZSB0cmVlCj4+PiArICog QGRldjogZGV2aWNlIGZyb20gZGV2aWNldHJlZQo+Pj4gKyAqIEBmbGFzaF9zdXBwbHk6IHZvbHRh Z2UgcmVndWxhdG9yIHRvIHN1cHBseSB0aGUgZmxhc2hlcwo+Pj4gKyAqIEB0b3JjaF9zdXBwbHk6 IHZvbHRhZ2UgcmVndWxhdG9yIHRvIHN1cHBseSB0b3JjaCBtb2RlCj4+PiArICogQGxlZHM6IGZs YXNoIExFRHMKPj4+ICsgKiBAbnVtX2xlZHM6IG51bWJlciBvZiBMRURzIHJlZ2lzdGVyZWQgKGJl dHdlZW4gMCBhbmQgMikKPj4+ICsgKiBAbG9jazogbG9jayB0byBwcm90ZWN0IFNQTUkgdHJhbnNh Y3Rpb25zCj4+PiArICogQHRvcmNoX2VuYWJsZV9jbWQ6IGVuYWJsZSBmbGFzaCBMRUQgdG9yY2gg bW9kZQo+Pj4gKyAqIEBwZXJpcGhlcmFsX3N1YnR5cGU6IG1vZHVsZSBwZXJpcGhlcmFsIHN1YnR5 cGUKPj4+ICsgKiBAZmxhc2hfcmVndWxhdG9yX29uOiBmbGFzaCByZWd1bGF0b3Igc3RhdHVzCj4+ PiArICogQHRvcmNoX3JlZ3VsYXRvcl9vbjogdG9yY2ggcmVndWxhdG9yIHN0YXR1cwo+Pj4gKyAq IEB0b3JjaF9lbmFibGVkOiB3aGV0aGVyIHRvcmNoIG1vZGUgaXMgZW5hYmxlZAo+Pj4gKyAqLwo+ Pj4gK3N0cnVjdCBxY29tX2ZsYXNoX2RldmljZSB7Cj4+PiArCXN0cnVjdCByZWdtYXAgKnJlZ21h cDsKPj4+ICsJdW5zaWduZWQgaW50IGJhc2U7Cj4+PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPj4+ ICsJc3RydWN0IHJlZ3VsYXRvciAqZmxhc2hfc3VwcGx5Owo+Pj4gKwlzdHJ1Y3QgcmVndWxhdG9y ICp0b3JjaF9zdXBwbHk7Cj4+PiArCXN0cnVjdCBxY29tX2ZsYXNoX2xlZCBsZWRzWzJdOwo+Pj4g Kwl1OCBudW1fbGVkczsKPj4+ICsJc3RydWN0IG11dGV4IGxvY2s7Cj4+PiArCXU4IHRvcmNoX2Vu YWJsZV9jbWQ7Cj4+PiArCXVuc2lnbmVkIGludCBwZXJpcGhlcmFsX3N1YnR5cGU7Cj4+PiArCWJv b2wgZmxhc2hfcmVndWxhdG9yX29uOwo+Pj4gKwlib29sIHRvcmNoX3JlZ3VsYXRvcl9vbjsKPj4+ ICsJYm9vbCB0b3JjaF9lbmFibGVkOwo+Pj4gK307Cj4+PiArCj4+PiArc3RydWN0IHFjb21fZmxh c2hfY29uZmlnIHsKPj4+ICsJdW5zaWduZWQgaW50IGJhc2U7Cj4+PiArCXN0cnVjdCByZWd1bGF0 b3IgKmZsYXNoX3N1cHBseTsKPj4+ICsJc3RydWN0IHJlZ3VsYXRvciAqdG9yY2hfc3VwcGx5Owo+ Pj4gKwl1bnNpZ25lZCBpbnQgbnVtX2xlZHM7Cj4+PiArCj4+PiArCWVudW0gcWNvbV9mbGFzaF9p ZHMgaWRbMl07Cj4+PiArCWJvb2wgZGVmYXVsdF9vblsyXTsKPj4+ICsJdTMyIGxlZF9tYXhfYnJp Z2h0bmVzc1syXTsKPj4+ICsJdTMyIGZsYXNoX21heF9icmlnaHRuZXNzWzJdOwo+Pj4gKwl1MzIg Zmxhc2hfbWF4X3RpbWVvdXRbMl07Cj4+PiArfTsKPj4+ICsKPj4+ICtzdGF0aWMgaW5saW5lIHN0 cnVjdCBxY29tX2ZsYXNoX2xlZCAqZmxjZGV2X3RvX2xlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2X2Zs YXNoICpmbGVkX2NkZXYpCj4+PiArewo+Pj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGZsZWRfY2Rl diwgc3RydWN0IHFjb21fZmxhc2hfbGVkLCBmbGVkX2NkZXYpOwo+Pj4gK30KPj4+ICsKPj4+ICtz dGF0aWMgaW5saW5lIHN0cnVjdCBxY29tX2ZsYXNoX2RldmljZSAqbGVkX3RvX2xlZHNfZGV2KHN0 cnVjdCBxY29tX2ZsYXNoX2xlZCAqbGVkKQo+Pj4gK3sKPj4+ICsJcmV0dXJuIGNvbnRhaW5lcl9v ZihsZWQsIHN0cnVjdCBxY29tX2ZsYXNoX2RldmljZSwgbGVkc1tsZWQtPmlkXSk7Cj4+PiArfQo+ Pj4gKwo+Pj4gK3N0YXRpYyBpbmxpbmUgaW50IHFjb21fZmxhc2hfcmVhZF9yZWcoc3RydWN0IHFj b21fZmxhc2hfZGV2aWNlICpsZWRzX2RldiwKPj4+ICsJCQkJICAgICAgdW5zaWduZWQgaW50IHJl ZywgdW5zaWduZWQgaW50ICp2YWwpCj4+PiArewo+Pj4gKwlyZXR1cm4gcmVnbWFwX3JlYWQobGVk c19kZXYtPnJlZ21hcCwgbGVkc19kZXYtPmJhc2UgKyByZWcsIHZhbCk7Cj4+PiArfQo+Pj4gKwo+ Pj4gK3N0YXRpYyBpbmxpbmUgaW50IHFjb21fZmxhc2hfbWFza2VkX3dyaXRlKHN0cnVjdCBxY29t X2ZsYXNoX2RldmljZSAqbGVkc19kZXYsCj4+PiArCQkJCQkgIHVuc2lnbmVkIGludCByZWcsIHVu c2lnbmVkIGludCBtYXNrLAo+Pj4gKwkJCQkJICB1bnNpZ25lZCBpbnQgdmFsKQo+Pj4gK3sKPj4+ ICsJcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhsZWRzX2Rldi0+cmVnbWFwLCBsZWRzX2Rldi0+ YmFzZSArIHJlZywgbWFzaywKPj4+ICsJCQkJICB2YWwpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0 aWMgdTggcWNvbV9mbGFzaF9kdXJhdGlvbl90b19yZWcodTMyIHVzKQo+Pj4gK3sKPj4+ICsJaWYg KHVzIDwgUUNPTV9GTEFTSF9EVVJBVElPTl9NSU4pCj4+PiArCQl1cyA9IFFDT01fRkxBU0hfRFVS QVRJT05fTUlOOwo+Pj4gKwlyZXR1cm4gKHVzIC0gUUNPTV9GTEFTSF9EVVJBVElPTl9NSU4pIC8g UUNPTV9GTEFTSF9EVVJBVElPTl9TVEVQOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdTggcWNv bV9mbGFzaF9jdXJyZW50X3RvX3JlZyh1MzIgdWEpCj4+PiArewo+Pj4gKwlpZiAodWEgPCBRQ09N X0ZMQVNIX0NVUlJFTlRfTUlOKQo+Pj4gKwkJdWEgPSBRQ09NX0ZMQVNIX0NVUlJFTlRfTUlOOwo+ Pj4gKwlyZXR1cm4gKHVhIC0gUUNPTV9GTEFTSF9DVVJSRU5UX01JTikgLyBRQ09NX0ZMQVNIX0NV UlJFTlRfU1RFUDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgY2xhbXBfYWxpZ24odTMy ICp2LCB1MzIgbWluLCB1MzIgbWF4LCB1MzIgc3RlcCkKPj4+ICt7Cj4+PiArCSp2ID0gY2xhbXBf dmFsKCp2LCBtaW4sIG1heCk7Cj4+PiArCWlmIChzdGVwID4gMSkKPj4+ICsJCSp2ID0gKCp2IC0g bWluKSAvIHN0ZXAgKiBzdGVwICsgbWluOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IHFj b21fZmxhc2hfc3RhdHVzX2dldChzdHJ1Y3QgcWNvbV9mbGFzaF9sZWQgKmxlZCkKPj4+ICt7Cj4+ PiArCXN0cnVjdCBxY29tX2ZsYXNoX2RldmljZSAqbGVkc19kZXYgPSBsZWRfdG9fbGVkc19kZXYo bGVkKTsKPj4+ICsJdW5zaWduZWQgaW50IHN0YXR1czsKPj4+ICsJaW50IHJjOwo+Pj4gKwo+Pj4g KwlyYyA9IHFjb21fZmxhc2hfcmVhZF9yZWcobGVkc19kZXYsIFFDT01fRkxBU0hfQUREUl9TVEFU VVMsICZzdGF0dXMpOwo+Pj4gKwlpZiAocmMpIHsKPj4+ICsJCWRldl9lcnIobGVkc19kZXYtPmRl diwgIkZhaWx1cmUgcmVhZGluZyBzdGF0dXMsIHJjID0gICVkXG4iLAo+Pj4gKwkJCXJjKTsKPj4+ ICsJCXJldHVybiByYzsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwlyZXR1cm4gc3RhdHVzICYgbGVkLT5t YXNrX2xlZF9vbjsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBxY29tX2ZsYXNoX3N0YXR1 c19jbGVhcihzdHJ1Y3QgcWNvbV9mbGFzaF9kZXZpY2UgKmxlZHNfZGV2KQo+Pj4gK3sKPj4+ICsJ dW5zaWduZWQgaW50IGVuYWJsZV92YWw7Cj4+PiArCWludCByYzsKPj4+ICsKPj4+ICsJcmMgPSBx Y29tX2ZsYXNoX3JlYWRfcmVnKGxlZHNfZGV2LCBRQ09NX0ZMQVNIX0FERFJfRU5BQkxFX0NPTlRS T0wsCj4+PiArCQkJCSAmZW5hYmxlX3ZhbCk7Cj4+PiArCWlmIChyYykgewo+Pj4gKwkJZGV2X2Vy cihsZWRzX2Rldi0+ZGV2LCAiRW5hYmxlIHJlZyByZWFkIGZhaWxlZCglZClcbiIsIHJjKTsKPj4+ ICsJCXJldHVybiByYzsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwlyYyA9IHFjb21fZmxhc2hfbWFza2Vk X3dyaXRlKGxlZHNfZGV2LCBRQ09NX0ZMQVNIX0FERFJfRU5BQkxFX0NPTlRST0wsCj4+PiArCQkJ CSAgICAgUUNPTV9GTEFTSF9FTkFCTEVfTUFTSywgUUNPTV9GTEFTSF9ESVNBQkxFX0FMTCk7Cj4+ PiArCWlmIChyYykgewo+Pj4gKwkJZGV2X2VycihsZWRzX2Rldi0+ZGV2LCAiRW5hYmxlIHJlZyB3 cml0ZSBmYWlsZWQoJWQpXG4iLCByYyk7Cj4+PiArCQlyZXR1cm4gcmM7Cj4+PiArCX0KPj4+ICsK Pj4+ICsJcmMgPSBxY29tX2ZsYXNoX21hc2tlZF93cml0ZShsZWRzX2RldiwgUUNPTV9GTEFTSF9B RERSX0VOQUJMRV9DT05UUk9MLAo+Pj4gKwkJCQkgICAgIFFDT01fRkxBU0hfRU5BQkxFX01BU0ss IGVuYWJsZV92YWwpOwo+Pj4gKwlpZiAocmMpIHsKPj4+ICsJCWRldl9lcnIobGVkc19kZXYtPmRl diwgIkVuYWJsZSByZWcgd3JpdGUgZmFpbGVkKCVkKVxuIiwgcmMpOwo+Pgo+PiBJdCB3b3VsZCBi ZSBnb29kIHRvIGhhdmUgZGlmZmVyZW50IGVycm9yIG1lc3NhZ2VzIHRvIGRpc2Nlcm4gYmV0d2Vl bgo+PiB0aGUgdHdvIGFib3ZlIGNhbGxzJyBmYWlsdXJlcy4KPiAKPiBJbmRlZWQuCj4gCj4+Cj4+ PiArCQlyZXR1cm4gcmM7Cj4+PiArCX0KPj4+ICsKPj4+ICsJcmV0dXJuIDA7Cj4+PiArfQo+Pj4g Kwo+Pj4gK3N0YXRpYyBpbnQgcWNvbV9mbGFzaF9jaGVja190aW1lZG91dChzdHJ1Y3QgcWNvbV9m bGFzaF9kZXZpY2UgKmxlZHNfZGV2KQo+Pj4gK3sKPj4+ICsJdW5zaWduZWQgaW50IHN0YXR1czsK Pj4+ICsJaW50IHJjOwo+Pj4gKwo+Pj4gKwlyYyA9IHFjb21fZmxhc2hfcmVhZF9yZWcobGVkc19k ZXYsIFFDT01fRkxBU0hfQUREUl9TVEFUVVMsICZzdGF0dXMpOwo+Pj4gKwlpZiAocmMpIHsKPj4+ ICsJCWRldl9lcnIobGVkc19kZXYtPmRldiwgIkZhaWx1cmUgcmVhZGluZyBzdGF0dXMsIHJjID0g ICVkXG4iLAo+Pj4gKwkJCXJjKTsKPj4+ICsJCXJldHVybiByYzsKPj4+ICsJfQo+Pj4gKwo+Pj4g KwlyZXR1cm4gc3RhdHVzICYgUUNPTV9GTEFTSF9NQVNLX1NUQVRVU19USU1FRE9VVDsKPj4+ICt9 Cj4+PiArCj4+PiArc3RhdGljIGludCBxY29tX2ZsYXNoX3RvcmNoX3JlZ19lbmFibGUoc3RydWN0 IHFjb21fZmxhc2hfZGV2aWNlICpsZWRzX2RldiwKPj4+ICsJCQkJICAgICAgIGJvb2wgc3RhdGUp Cj4+PiArewo+Pj4gKwlpbnQgcmM7Cj4+PiArCj4+PiArCWlmIChsZWRzX2Rldi0+dG9yY2hfZW5h YmxlZCA9PSBzdGF0ZSkKPj4+ICsJCXJldHVybiAwOwo+Pj4gKwo+Pj4gKwkvKgo+Pj4gKwkgKiBG b3IgdGhlIFRPUkNIIHJlZ2lzdGVyICgweEU0KSB0byBiZWNvbWUgd3JpdGFibGUsIHRoZSBVTkxP Q0tfU0VDVVJFCj4+PiArCSAqIHJlZ2lzdGVyICgweEQwKSBuZWVkcyB0byBiZSB3cml0dGVuIHdp dGggdGhlIFVOTE9DS19TRUNVUkUgdmFsdWUKPj4+ICsJICogKDB4QTUpIGZpcnN0Lgo+Pj4gKwkg KiBJdCBnZXRzIHJlLWxvY2tlZCBhZnRlciBhbnkgcmVnaXN0ZXIgd3JpdGUuCj4+PiArCSAqLwo+ Pj4gKwlyYyA9IHFjb21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2LAo+Pj4gKwkJCQkgICAg IFFDT01fRkxBU0hfQUREUl9MRURfVU5MT0NLX1NFQ1VSRSwKPj4+ICsJCQkJICAgICBRQ09NX0ZM QVNIX1NFQ1VSRV9NQVNLLAo+Pj4gKwkJCQkgICAgIFFDT01fRkxBU0hfVU5MT0NLX1NFQ1VSRSk7 Cj4+PiArCWlmIChyYykgewo+Pj4gKwkJZGV2X2VycihsZWRzX2Rldi0+ZGV2LCAiU2VjdXJlIHJl ZyB3cml0ZSBmYWlsZWQoJWQpXG4iLCByYyk7Cj4+PiArCQlyZXR1cm4gcmM7Cj4+PiArCX0KPj4+ ICsKPj4+ICsJcmMgPSBxY29tX2ZsYXNoX21hc2tlZF93cml0ZShsZWRzX2RldiwgUUNPTV9GTEFT SF9BRERSX0xFRF9UT1JDSCwKPj4+ICsJCQkJICAgICBRQ09NX0ZMQVNIX1RPUkNIX01BU0ssCj4+ PiArCQkJCSAgICAgc3RhdGUgPyBRQ09NX0ZMQVNIX0xFRF9UT1JDSF9FTkFCTEUgOgo+Pj4gKwkJ CQkJICAgICBRQ09NX0ZMQVNIX0xFRF9UT1JDSF9ESVNBQkxFKTsKPj4+ICsJaWYgKHJjKSB7Cj4+ PiArCQlkZXZfZXJyKGxlZHNfZGV2LT5kZXYsICJUb3JjaCByZWcgd3JpdGUgZmFpbGVkKCVkKVxu IiwgcmMpOwo+Pj4gKwkJcmV0dXJuIHJjOwo+Pj4gKwl9Cj4+PiArCj4+PiArCXJldHVybiAwOwo+ Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IHFjb21fZmxhc2hfbWF4X2JyaWdodG5lc3Nfc2V0 KHN0cnVjdCBxY29tX2ZsYXNoX2xlZCAqbGVkLAo+Pj4gKwkJCQkJIHVuc2lnbmVkIGludCBicmln aHRuZXNzKQo+Pj4gK3sKPj4+ICsJc3RydWN0IHFjb21fZmxhc2hfZGV2aWNlICpsZWRzX2RldiA9 IGxlZF90b19sZWRzX2RldihsZWQpOwo+Pj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBsZWRzX2Rl di0+ZGV2Owo+Pj4gKwlpbnQgcmM7Cj4+PiArCj4+PiArCXJjID0gcWNvbV9mbGFzaF9tYXNrZWRf d3JpdGUobGVkc19kZXYsIFFDT01fRkxBU0hfQUREUl9NQVhfQ1VSUiwKPj4+ICsJCQkJICAgICBR Q09NX0ZMQVNIX0NVUlJFTlRfTUFTSywgYnJpZ2h0bmVzcyk7Cj4+PiArCWlmIChyYykgewo+Pj4g KwkJZGV2X2VycihkZXYsICJNYXggY3VycmVudCByZWcgd3JpdGUgZmFpbGVkKCVkKVxuIiwgcmMp Owo+Pj4gKwkJcmV0dXJuIHJjOwo+Pj4gKwl9Cj4+PiArCj4+PiArCXJldHVybiAwOwo+Pj4gK30K Pj4+ICsKPj4+ICtzdGF0aWMgaW50IHFjb21fZmxhc2hfYnJpZ2h0bmVzc19zZXQoc3RydWN0IHFj b21fZmxhc2hfbGVkICpsZWQsCj4+PiArCQkJCSAgICAgdW5zaWduZWQgaW50IGJyaWdodG5lc3Mp Cj4+PiArewo+Pj4gKwlzdHJ1Y3QgcWNvbV9mbGFzaF9kZXZpY2UgKmxlZHNfZGV2ID0gbGVkX3Rv X2xlZHNfZGV2KGxlZCk7Cj4+PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGxlZHNfZGV2LT5kZXY7 Cj4+PiArCWludCByYzsKPj4+ICsKPj4+ICsJcmMgPSBxY29tX2ZsYXNoX21hc2tlZF93cml0ZShs ZWRzX2RldiwgbGVkLT5jdXJyZW50X2FkZHIsCj4+PiArCQkJCSAgICAgUUNPTV9GTEFTSF9DVVJS RU5UX01BU0ssIGJyaWdodG5lc3MpOwo+Pj4gKwlpZiAocmMpIHsKPj4+ICsJCWRldl9lcnIoZGV2 LCAiQ3VycmVudCByZWcgd3JpdGUgZmFpbGVkKCVkKVxuIiwgcmMpOwo+Pj4gKwkJcmV0dXJuIHJj Owo+Pj4gKwl9Cj4+PiArCj4+PiArCXJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMg aW50IHFjb21fZmxhc2hfZmxlZF9yZWd1bGF0b3Jfb24oc3RydWN0IHFjb21fZmxhc2hfZGV2aWNl ICpsZWRzX2RldikKPj4+ICt7Cj4+PiArCWludCByYzsKPj4+ICsKPj4+ICsJaWYgKGxlZHNfZGV2 LT5mbGFzaF9yZWd1bGF0b3Jfb24pCj4+PiArCQlyZXR1cm4gMDsKPj4+ICsKPj4+ICsJcmMgPSBy ZWd1bGF0b3JfZW5hYmxlKGxlZHNfZGV2LT5mbGFzaF9zdXBwbHkpOwo+Pj4gKwlpZiAocmMpIHsK Pj4+ICsJCWRldl9lcnIobGVkc19kZXYtPmRldiwgIlJlZ3VsYXRvciBlbmFibGUgZmFpbGVkKCVk KVxuIiwgcmMpOwo+Pj4gKwkJcmV0dXJuIHJjOwo+Pj4gKwl9Cj4+PiArCj4+PiArCWxlZHNfZGV2 LT5mbGFzaF9yZWd1bGF0b3Jfb24gPSB0cnVlOwo+Pj4gKwo+Pj4gKwlyZXR1cm4gMDsKPj4+ICt9 Cj4+PiArCj4+PiArc3RhdGljIGludCBxY29tX2ZsYXNoX2ZsZWRfcmVndWxhdG9yX29mZihzdHJ1 Y3QgcWNvbV9mbGFzaF9kZXZpY2UgKmxlZHNfZGV2KQo+Pj4gK3sKPj4+ICsJdW5zaWduZWQgaW50 IGk7Cj4+PiArCXU4IGVuYWJsZSA9IDA7Cj4+PiArCWludCByYzsKPj4+ICsKPj4+ICsJaWYgKCFs ZWRzX2Rldi0+Zmxhc2hfcmVndWxhdG9yX29uKQo+Pj4gKwkJcmV0dXJuIDA7Cj4+PiArCj4+PiAr CWZvciAoaSA9IDA7IGkgPCBsZWRzX2Rldi0+bnVtX2xlZHM7IGkrKykgewo+Pj4gKwkJcmMgPSBx Y29tX2ZsYXNoX3N0YXR1c19nZXQoJmxlZHNfZGV2LT5sZWRzW2ldKTsKPj4+ICsJCWlmIChyYyA8 IDApCj4+PiArCQkJcmV0dXJuIHJjOwo+Pj4gKwo+Pj4gKwkJaWYgKCFyYykKPj4+ICsJCQljb250 aW51ZTsKPj4+ICsKPj4+ICsJCWVuYWJsZSB8PSBsZWRzX2Rldi0+bGVkc1tpXS5mbGFzaF9lbmFi bGVfY21kOwo+Pj4gKwl9Cj4+PiArCj4+PiArCXJjID0gcWNvbV9mbGFzaF9tYXNrZWRfd3JpdGUo bGVkc19kZXYsIFFDT01fRkxBU0hfQUREUl9FTkFCTEVfQ09OVFJPTCwKPj4+ICsJCQkJICAgICBR Q09NX0ZMQVNIX0VOQUJMRV9NQVNLLCBlbmFibGUpOwo+Pj4gKwlpZiAocmMpCj4+PiArCQlkZXZf ZXJyKGxlZHNfZGV2LT5kZXYsICJFbmFibGUgcmVnIHdyaXRlIGZhaWxlZCglZClcbiIsIHJjKTsK Pj4+ICsKPj4+ICsJaWYgKGVuYWJsZSkKPj4+ICsJCXJldHVybiAwOwo+Pj4gKwo+Pj4gKwlyYyA9 IHJlZ3VsYXRvcl9kaXNhYmxlKGxlZHNfZGV2LT5mbGFzaF9zdXBwbHkpOwo+Pj4gKwlpZiAocmMp IHsKPj4+ICsJCWRldl9lcnIobGVkc19kZXYtPmRldiwgIlJlZ3VsYXRvciBkaXNhYmxlIGZhaWxl ZCglZClcbiIsIHJjKTsKPj4+ICsJCXJldHVybiByYzsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwlsZWRz X2Rldi0+Zmxhc2hfcmVndWxhdG9yX29uID0gZmFsc2U7Cj4+PiArCj4+PiArCXJldHVybiAwOwo+ Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IHFjb21fZmxhc2hfdG9yY2hfcmVndWxhdG9yX29u KHN0cnVjdCBxY29tX2ZsYXNoX2RldmljZSAqbGVkc19kZXYpCj4+PiArewo+Pj4gKwlpbnQgcmM7 Cj4+PiArCj4+PiArCWlmIChsZWRzX2Rldi0+dG9yY2hfcmVndWxhdG9yX29uKQo+Pj4gKwkJcmV0 dXJuIDA7Cj4+PiArCj4+PiArCXJjID0gcmVndWxhdG9yX2VuYWJsZShsZWRzX2Rldi0+dG9yY2hf c3VwcGx5KTsKPj4+ICsJaWYgKHJjKSB7Cj4+PiArCQlkZXZfZXJyKGxlZHNfZGV2LT5kZXYsICJS ZWd1bGF0b3IgZW5hYmxlIGZhaWxlZCglZClcbiIsIHJjKTsKPj4+ICsJCXJldHVybiByYzsKPj4+ ICsJfQo+Pj4gKwo+Pj4gKwlsZWRzX2Rldi0+dG9yY2hfcmVndWxhdG9yX29uID0gdHJ1ZTsKPj4+ ICsKPj4+ICsJcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgcWNvbV9mbGFz aF90b3JjaF9yZWd1bGF0b3Jfb2ZmKHN0cnVjdCBxY29tX2ZsYXNoX2RldmljZSAqbGVkc19kZXYp Cj4+PiArewo+Pj4gKwlpbnQgcmM7Cj4+PiArCj4+PiArCWlmICghbGVkc19kZXYtPnRvcmNoX3Jl Z3VsYXRvcl9vbikKPj4+ICsJCXJldHVybiAwOwo+Pj4gKwo+Pj4gKwlyYyA9IHFjb21fZmxhc2hf bWFza2VkX3dyaXRlKGxlZHNfZGV2LCBRQ09NX0ZMQVNIX0FERFJfRU5BQkxFX0NPTlRST0wsCj4+ PiArCQkJCSAgICAgUUNPTV9GTEFTSF9FTkFCTEVfTU9EVUxFX01BU0ssCj4+PiArCQkJCSAgICAg UUNPTV9GTEFTSF9ESVNBQkxFX0FMTCk7Cj4+PiArCWlmIChyYykKPj4+ICsJCWRldl9lcnIobGVk c19kZXYtPmRldiwgIkVuYWJsZSByZWcgd3JpdGUgZmFpbGVkKCVkKVxuIiwgcmMpOwo+Pj4gKwo+ Pj4gKwlyYyA9IHJlZ3VsYXRvcl9kaXNhYmxlKGxlZHNfZGV2LT50b3JjaF9zdXBwbHkpOwo+Pj4g KwlpZiAocmMpIHsKPj4+ICsJCWRldl9lcnIobGVkc19kZXYtPmRldiwgIlJlZ3VsYXRvciBkaXNh YmxlIGZhaWxlZCglZClcbiIsIHJjKTsKPj4+ICsJCXJldHVybiByYzsKPj4+ICsJfQo+Pj4gKwo+ Pj4gKwlsZWRzX2Rldi0+dG9yY2hfcmVndWxhdG9yX29uID0gZmFsc2U7Cj4+PiArCj4+PiArCXJl dHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IHFjb21fZmxhc2hfZmxlZF9vbihz dHJ1Y3QgcWNvbV9mbGFzaF9sZWQgKmxlZCkKPj4+ICt7Cj4+PiArCXN0cnVjdCBxY29tX2ZsYXNo X2RldmljZSAqbGVkc19kZXYgPSBsZWRfdG9fbGVkc19kZXYobGVkKTsKPj4+ICsJc3RydWN0IGRl dmljZSAqZGV2ID0gbGVkc19kZXYtPmRldjsKPj4+ICsJaW50IHJjLCBlcnJvcjsKPj4+ICsKPj4+ ICsJcmMgPSBxY29tX2ZsYXNoX2ZsZWRfcmVndWxhdG9yX29uKGxlZHNfZGV2KTsKPj4+ICsJaWYg KHJjKQo+Pj4gKwkJZ290byBlcnJvcl9mbGFzaF9zZXQ7Cj4+PiArCj4+PiArCXJjID0gcWNvbV9m bGFzaF9tYXNrZWRfd3JpdGUobGVkc19kZXYsIFFDT01fRkxBU0hfQUREUl9FTkFCTEVfQ09OVFJP TCwKPj4+ICsJCQkJICAgICBsZWQtPmZsYXNoX2VuYWJsZV9jbWQsCj4+PiArCQkJCSAgICAgbGVk LT5mbGFzaF9lbmFibGVfY21kKTsKPj4+ICsJaWYgKHJjKSB7Cj4+PiArCQlkZXZfZXJyKGRldiwg IkVuYWJsZSByZWcgd3JpdGUgZmFpbGVkKCVkKVxuIiwgcmMpOwo+Pj4gKwkJZ290byBlcnJvcl9m bGFzaF9zZXQ7Cj4+PiArCX0KPj4+ICsKPj4+ICsJLyoKPj4+ICsJICogVE9ETyBUaGUgZG93bnN0 cmVhbSBkcml2ZXIgYWxzbyBhbGxvd2VkIEhXIHN0cm9iZS4gQWRkIHN1cHBvcnQgZm9yIGl0Cj4+ PiArCSAqIGFmdGVyIHY0bDIgc3VwcG9ydCBpcyBhZGRlZCBhbmQgSVNQIGNhbiBiZSB1c2VkCj4+ PiArCSAqLwo+Pj4gKwlyYyA9IHFjb21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2LCBRQ09N X0ZMQVNIX0FERFJfTEVEX1NUUk9CRV9DVFJMLAo+Pj4gKwkJCQkgICAgIGxlZC0+Zmxhc2hfc3Ry b2JlX2NtZCwKPj4+ICsJCQkJICAgICBsZWQtPmZsYXNoX3N0cm9iZV9jbWQpOwo+Pj4gKwlpZiAo cmMpIHsKPj4+ICsJCWRldl9lcnIoZGV2LCAiTEVEICVkIHN0cm9iZSByZWcgd3JpdGUgZmFpbGVk KCVkKVxuIiwgbGVkLT5pZCwKPj4+ICsJCQlyYyk7Cj4+PiArCQlnb3RvIGVycm9yX2ZsYXNoX3Nl dDsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwlyZXR1cm4gMDsKPj4+ICsKPj4+ICtlcnJvcl9mbGFzaF9z ZXQ6Cj4+PiArCWVycm9yID0gcWNvbV9mbGFzaF9mbGVkX3JlZ3VsYXRvcl9vZmYobGVkc19kZXYp Owo+Pj4gKwlpZiAoZXJyb3IpCj4+PiArCQlyZXR1cm4gZXJyb3I7Cj4+PiArCXJldHVybiByYzsK Pj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBxY29tX2ZsYXNoX2ZsZWRfb2ZmKHN0cnVjdCBx Y29tX2ZsYXNoX2xlZCAqbGVkKQo+Pj4gK3sKPj4+ICsJc3RydWN0IHFjb21fZmxhc2hfZGV2aWNl ICpsZWRzX2RldiA9IGxlZF90b19sZWRzX2RldihsZWQpOwo+Pj4gKwlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSBsZWRzX2Rldi0+ZGV2Owo+Pj4gKwlpbnQgcmMsIGVycm9yOwo+Pj4gKwo+Pj4gKwlyYyA9 IHFjb21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2LCBRQ09NX0ZMQVNIX0FERFJfTEVEX1NU Uk9CRV9DVFJMLAo+Pj4gKwkJCQkgICAgIGxlZC0+Zmxhc2hfc3Ryb2JlX2NtZCwKPj4+ICsJCQkJ ICAgICBRQ09NX0ZMQVNIX0RJU0FCTEVfQUxMKTsKPj4+ICsJaWYgKHJjKQo+Pj4gKwkJZGV2X2Vy cihkZXYsICJMRUQgJWQgZmxhc2ggd3JpdGUgZmFpbGVkKCVkKVxuIiwgbGVkLT5pZCwgcmMpOwo+ Pj4gKwo+Pj4gKwllcnJvciA9IHFjb21fZmxhc2hfZmxlZF9yZWd1bGF0b3Jfb2ZmKGxlZHNfZGV2 KTsKPj4+ICsJaWYgKGVycm9yKQo+Pj4gKwkJcmV0dXJuIGVycm9yOwo+Pj4gKwlyZXR1cm4gcmM7 Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgcWNvbV9mbGFzaF90b3JjaF9vbihzdHJ1Y3Qg cWNvbV9mbGFzaF9sZWQgKmxlZCkKPj4+ICt7Cj4+PiArCWludCByYywgZXJyb3I7Cj4+PiArCXN0 cnVjdCBxY29tX2ZsYXNoX2RldmljZSAqbGVkc19kZXYgPSBsZWRfdG9fbGVkc19kZXYobGVkKTsK Pj4+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gbGVkc19kZXYtPmRldjsKPj4+ICsKPj4+ICsJaWYg KGxlZHNfZGV2LT5wZXJpcGhlcmFsX3N1YnR5cGUgPT0gUUNPTV9GTEFTSF9TVUJUWVBFX0RVQUwp IHsKPj4+ICsJCXJjID0gcWNvbV9mbGFzaF90b3JjaF9yZWd1bGF0b3Jfb24obGVkc19kZXYpOwo+ Pj4gKwkJaWYgKHJjKQo+Pj4gKwkJCWdvdG8gZXJyb3JfcmVnX3dyaXRlOwo+Pj4gKwl9IGVsc2Ug aWYgKGxlZHNfZGV2LT5wZXJpcGhlcmFsX3N1YnR5cGUgPT0gUUNPTV9GTEFTSF9TVUJUWVBFX1NJ TkdMRSkgewo+Pj4gKwkJcmMgPSBxY29tX2ZsYXNoX2ZsZWRfcmVndWxhdG9yX29uKGxlZHNfZGV2 KTsKPj4KPj4gV2h5IGZvciB0b3JjaCBtb2RlIHlvdSBuZWVkIHRvIGVuYWJsZSBmbGVkIHJlZ3Vs YXRvcj8KPiAKPiBCYXNlZCBvbiBbMV0sIGFwcGFyZW50bHkgdGhlIGhhcmR3YXJlIHByZXNlbnQg aW4gdGhlIFNpbmdsZSB2YXJpYW50IG9mIHRoZSBQTUlDCj4gaGFzIHNvbWUgbGltaXRhdGlvbiB0 aGF0IHJlcXVpcmVzIHRoZSB1c2Ugb2YgdGhlIGZsYXNoIHJlZ3VsYXRvciBhbmQgdGhlIHZhbHVl Cj4gUUNPTV9GTEFTSF9FTkFCTEVfQUxMIHRvIGVuYWJsZSB0aGUgTEVEcyBmb3IgdGhlIHRvcmNo IG1vZGUuIFRoZSBEdWFsIHZhcmlhbnQgb24KPiB0aGUgb3RoZXIgaGFuZCBjYW4ganVzdCB1c2Ug dGhlIHRvcmNoIHJlZ3VsYXRvciBhbmQgZW5hYmxlcyB0aGUgTEVEcyB3aXRoCj4gUUNPTV9GTEFT SF9FTkFCTEVfTU9EVUxFLgo+IAo+IFsxXSBodHRwczovL2dpdGh1Yi5jb20vQUlDUC9rZXJuZWxf bGdlX2hhbW1lcmhlYWQvY29tbWl0LzBmNDdjNzQ3YzA3NDk5MzY1NWQwYmZlYmQwNDVlOGRkZDIy OGZlNGMKPiAKPiBJJ20gaG9uZXN0bHkgbm90IHN1cmUgd2hhdCB0aGUgaW1wYWN0IGlzIG9uIHVz aW5nIHRoZSBkaWZmZXJlbnQgcmVndWxhdG9ycyBhbmQKPiBlbmFibGUgdmFsdWVzLiBJIGhhdmUg dGVzdGVkIGVuYWJsaW5nIHRoZSBEdWFsIFBNSUMgd2l0aCBkaWZmZXJlbnQgZW5hYmxlIHZhbHVl cwo+IGFuZCBhbGwgc2VlbWVkIHRvIHdvcmsgdGhlIHNhbWUsIHNvIG11c3QgYmUgc29tZSBoYXJk d2FyZSBkZXRhaWwuCj4gCj4gSSBsZWZ0IHRoYXQgU2luZ2xlIGNvZGVwYXRoIGluIHRoZSBob3Bl IHRoYXQgaXQgaXMgdXNlZnVsIGZvciBkZXZpY2VzIHRoYXQgaGF2ZQo+IHRoYXQgdmFyaWFudCBv ZiB0aGUgaGFyZHdhcmUsIGJ1dCBJIGhhdmUgb25seSBhY3R1YWxseSB0ZXN0ZWQgdGhlIER1YWwg UE1JQywKPiB3aGljaCBpcyB0aGUgb25lIHByZXNlbnQgb24gdGhlIE5leHVzIDUuCgpUaGFua3Mg Zm9yIHRoZSBleHBsYW5hdGlvbi4gSnVzdCB3YW50ZWQgdG8gY29uZmlybSB0aGF0IGl0IHdhcyBu b3QKYSBtaXN0YWtlLgoKPj4KPj4+ICsJCWlmIChyYykKPj4+ICsJCQlnb3RvIGVycm9yX2ZsYXNo X3NldDsKPj4+ICsKPj4+ICsJCS8qCj4+PiArCQkgKiBXcml0ZSAweDgwIHRvIE1PRFVMRV9FTkFC TEUgYmVmb3JlIHdyaXRpbmcKPj4+ICsJCSAqIDB4RTAgaW4gb3JkZXIgdG8gYXZvaWQgYSBoYXJk d2FyZSBidWcgY2F1c2VkCj4+PiArCQkgKiBieSByZWdpc3RlciB2YWx1ZSBnb2luZyBmcm9tIDB4 MDAgdG8gMHhFMC4KPj4+ICsJCSAqLwo+Pj4gKwkJcmMgPSBxY29tX2ZsYXNoX21hc2tlZF93cml0 ZShsZWRzX2RldiwKPj4+ICsJCQkJCSAgICAgUUNPTV9GTEFTSF9BRERSX0VOQUJMRV9DT05UUk9M LAo+Pj4gKwkJCQkJICAgICBRQ09NX0ZMQVNIX0VOQUJMRV9NT0RVTEVfTUFTSywKPj4+ICsJCQkJ CSAgICAgUUNPTV9GTEFTSF9FTkFCTEVfTU9EVUxFKTsKPj4+ICsJCWlmIChyYykgewo+Pj4gKwkJ CWRldl9lcnIoZGV2LCAiRW5hYmxlIHJlZyB3cml0ZSBmYWlsZWQoJWQpXG4iLCByYyk7Cj4+PiAr CQkJZ290byBlcnJvcl9mbGFzaF9zZXQ7Cj4+PiArCQl9Cj4+PiArCX0KPj4+ICsKPj4+ICsJcmMg PSBxY29tX2ZsYXNoX3RvcmNoX3JlZ19lbmFibGUobGVkc19kZXYsIHRydWUpOwo+Pj4gKwlpZiAo cmMpCj4+PiArCQlnb3RvIGVycm9yX3JlZ193cml0ZTsKPj4+ICsKPj4+ICsJcmMgPSBxY29tX2Zs YXNoX21hc2tlZF93cml0ZShsZWRzX2RldiwgUUNPTV9GTEFTSF9BRERSX0VOQUJMRV9DT05UUk9M LAo+Pj4gKwkJCQkgICAgIFFDT01fRkxBU0hfRU5BQkxFX01BU0ssCj4+PiArCQkJCSAgICAgbGVk c19kZXYtPnRvcmNoX2VuYWJsZV9jbWQpOwo+Pj4gKwlpZiAocmMpIHsKPj4+ICsJCWRldl9lcnIo ZGV2LCAiRW5hYmxlIHJlZyB3cml0ZSBmYWlsZWQoJWQpXG4iLCByYyk7Cj4+PiArCQlnb3RvIGVy cm9yX3JlZ193cml0ZTsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwlyYyA9IHFjb21fZmxhc2hfbWFza2Vk X3dyaXRlKGxlZHNfZGV2LCBRQ09NX0ZMQVNIX0FERFJfTEVEX1NUUk9CRV9DVFJMLAo+Pj4gKwkJ CQkgICAgIGxlZC0+Zmxhc2hfc3Ryb2JlX2NtZCwKPj4+ICsJCQkJICAgICBsZWQtPmZsYXNoX3N0 cm9iZV9jbWQpOwo+Pgo+PiBKdXN0IHRvIG1ha2Ugc3VyZSAtIHRoZSBoYXJkd2FyZSByZXF1aXJl cyBzdHJvYmUgY21kIHRvIGVuYWJsZSB0b3JjaD8KPiAKPiBZZXMuIFRoZSBzdHJvYmUgdmFsdWUg aXMgdGhlIG9uZSB0aGF0IGFjdHVhbGx5IHR1cm5zIGVhY2ggb2YgdGhlIExFRHMgb24sCj4gZG9l c24ndCBtYXR0ZXIgaWYgaXQncyBvbiBmbGFzaCBvciB0b3JjaCBtb2RlLiBUaGUgZGlmZmVyZW5j ZSBpbiB0b3JjaCBtb2RlIGlzCj4gYWN0dWFsbHkganVzdCB0aGF0IHRoZSB0aW1lb3V0IG9uIHRo ZSBMRURzIGlzIGRpc2FibGVkIChkb25lIGJ5IHdyaXRpbmcgMHgwMAo+IGludG8gdGhlIFRPUkNI LCAweEU0LCByZWdpc3RlcikuCj4gU28gZm9yIGJvdGggbW9kZXMsIHRoZSBMRURzIGFyZSB0dXJu ZWQgb24gYnkgd3JpdGluZyB0byB0aGUgU1RST0JFX0NUUkwsIDB4NDcsCj4gcmVnaXN0ZXIuIElm IHRvcmNoIGlzIG9uIHRoZXknbGwgc3RheSBvbiBpbmRlZmluaXRlbHksIHdoaWxlIG9uIGZsYXNo IG1vZGUKPiB0aGV5J2xsIHR1cm4gb2ZmIGFmdGVyIHRoZSB0aW1lb3V0Lgo+IAo+IFBlcmhhcHMg aXQncyBqdXN0IGEgbmFtaW5nIGlzc3VlPwoKSSBwcm9wb3NlIHRvIGFkZCB0aGVzZSBjb21tZW50 cyBuZXh0IHRvIHRoZSBjYWxscyBpbiBxdWVzdGlvbi4KCj4+Cj4+PiArCWlmIChyYykgewo+Pj4g KwkJZGV2X2VycihkZXYsICJMRUQgJWQgc3Ryb2JlIHJlZyB3cml0ZSBmYWlsZWQoJWQpXG4iLCBs ZWQtPmlkLAo+Pj4gKwkJCXJjKTsKPj4+ICsJCWdvdG8gZXJyb3JfcmVnX3dyaXRlOwo+Pj4gKwl9 Cj4+PiArCj4+PiArCWxlZHNfZGV2LT50b3JjaF9lbmFibGVkID0gdHJ1ZTsKPj4+ICsKPj4+ICsJ cmV0dXJuIDA7Cj4+PiArCj4+PiArZXJyb3JfcmVnX3dyaXRlOgo+Pj4gKwlpZiAobGVkc19kZXYt PnBlcmlwaGVyYWxfc3VidHlwZSA9PSBRQ09NX0ZMQVNIX1NVQlRZUEVfU0lOR0xFKQo+Pj4gKwkJ Z290byBlcnJvcl9mbGFzaF9zZXQ7Cj4+PiArCj4+PiArCWVycm9yID0gcWNvbV9mbGFzaF90b3Jj aF9yZWd1bGF0b3Jfb2ZmKGxlZHNfZGV2KTsKPj4+ICsJaWYgKGVycm9yKQo+Pj4gKwkJcmV0dXJu IGVycm9yOwo+Pj4gKwlyZXR1cm4gcmM7Cj4+PiArCj4+PiArZXJyb3JfZmxhc2hfc2V0Ogo+Pj4g KwllcnJvciA9IHFjb21fZmxhc2hfZmxlZF9yZWd1bGF0b3Jfb2ZmKGxlZHNfZGV2KTsKPj4+ICsJ aWYgKGVycm9yKQo+Pj4gKwkJcmV0dXJuIGVycm9yOwo+Pj4gKwlyZXR1cm4gcmM7Cj4+PiArfQo+ Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgcWNvbV9mbGFzaF90b3JjaF9vZmYoc3RydWN0IHFjb21fZmxh c2hfbGVkICpsZWQpCj4+PiArewo+Pj4gKwlzdHJ1Y3QgcWNvbV9mbGFzaF9kZXZpY2UgKmxlZHNf ZGV2ID0gbGVkX3RvX2xlZHNfZGV2KGxlZCk7Cj4+PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGxl ZHNfZGV2LT5kZXY7Cj4+PiArCWludCByYywgZXJyb3I7Cj4+PiArCXVuc2lnbmVkIGludCBpOwo+ Pj4gKwo+Pj4gKwlyYyA9IHFjb21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2LCBRQ09NX0ZM QVNIX0FERFJfTEVEX1NUUk9CRV9DVFJMLAo+Pj4gKwkJCQkgICAgIGxlZC0+Zmxhc2hfc3Ryb2Jl X2NtZCwgUUNPTV9GTEFTSF9ESVNBQkxFX0FMTCk7Cj4+PiArCWlmIChyYykgewo+Pj4gKwkJZGV2 X2VycihkZXYsICJMRUQgJWQgZmxhc2ggd3JpdGUgZmFpbGVkKCVkKVxuIiwgbGVkLT5pZCwgcmMp Owo+Pj4gKwkJZ290byBlcnJvcl90b3JjaF9zZXQ7Cj4+PiArCX0KPj4+ICsKPj4+ICsJLyogS2Vl cCB0b3JjaCBvbiBpZiB0aGUgb3RoZXIgTEVEIGlzIHN0aWxsIG9uICovCj4+PiArCWZvciAoaSA9 IDA7IGkgPCBsZWRzX2Rldi0+bnVtX2xlZHM7IGkrKykKPj4+ICsJCWlmIChsZWRzX2Rldi0+bGVk c1tpXS5mbGVkX2NkZXYubGVkX2NkZXYuYnJpZ2h0bmVzcykKPj4+ICsJCQlyZXR1cm4gMDsKPj4+ ICsKPj4+ICsJcmMgPSBxY29tX2ZsYXNoX3RvcmNoX3JlZ19lbmFibGUobGVkc19kZXYsIGZhbHNl KTsKPj4+ICsJaWYgKHJjKQo+Pj4gKwkJZ290byBlcnJvcl90b3JjaF9zZXQ7Cj4+PiArCj4+PiAr CWlmIChsZWRzX2Rldi0+cGVyaXBoZXJhbF9zdWJ0eXBlID09IFFDT01fRkxBU0hfU1VCVFlQRV9E VUFMKSB7Cj4+PiArCQlyYyA9IHFjb21fZmxhc2hfdG9yY2hfcmVndWxhdG9yX29mZihsZWRzX2Rl dik7Cj4+PiArCQlpZiAocmMpCj4+PiArCQkJcmV0dXJuIHJjOwo+Pj4gKwl9IGVsc2UgaWYgKGxl ZHNfZGV2LT5wZXJpcGhlcmFsX3N1YnR5cGUgPT0gUUNPTV9GTEFTSF9TVUJUWVBFX1NJTkdMRSkg ewo+Pj4gKwkJcmMgPSBxY29tX2ZsYXNoX2ZsZWRfcmVndWxhdG9yX29mZihsZWRzX2Rldik7Cj4+ PiArCQlpZiAocmMpCj4+PiArCQkJcmV0dXJuIHJjOwo+Pj4gKwl9Cj4+PiArCj4+PiArCWxlZHNf ZGV2LT50b3JjaF9lbmFibGVkID0gZmFsc2U7Cj4+PiArCj4+PiArCXJldHVybiAwOwo+Pj4gKwo+ Pj4gK2Vycm9yX3RvcmNoX3NldDoKPj4+ICsJZXJyb3IgPSBxY29tX2ZsYXNoX3RvcmNoX3JlZ3Vs YXRvcl9vZmYobGVkc19kZXYpOwo+Pj4gKwlpZiAoZXJyb3IpCj4+PiArCQlyZXR1cm4gZXJyb3I7 Cj4+PiArCXJldHVybiByYzsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBxY29tX2ZsYXNo X2xlZGNkZXZfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCj4+ PiArCQkJCQkgICAgIGVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpCj4+PiArewo+Pj4gKwlzdHJ1 Y3QgbGVkX2NsYXNzZGV2X2ZsYXNoICpmbGVkX2NkZXYgPSBsY2Rldl90b19mbGNkZXYobGVkX2Nk ZXYpOwo+Pj4gKwlzdHJ1Y3QgcWNvbV9mbGFzaF9sZWQgKmxlZCA9IGZsY2Rldl90b19sZWQoZmxl ZF9jZGV2KTsKPj4+ICsJc3RydWN0IHFjb21fZmxhc2hfZGV2aWNlICpsZWRzX2RldiA9IGxlZF90 b19sZWRzX2RldihsZWQpOwo+Pj4gKwl1bnNpZ25lZCBpbnQgbWF4X2JyaWdodG5lc3M7Cj4+PiAr CWludCByYzsKPj4+ICsKPj4+ICsJaWYgKHZhbHVlID4gbGVkX2NkZXYtPm1heF9icmlnaHRuZXNz KSB7Cj4+Cj4+IExFRCBmcmFtZXdvcmsgdGFrZXMgY2FyZSBvZiBpdC4gWW91IGNhbiBza2lwIHRo aXMuCj4gCj4gT2suCj4gCj4+Cj4+PiArCQlkZXZfZXJyKGxlZHNfZGV2LT5kZXYsICJJbnZhbGlk IGJyaWdodG5lc3MgdmFsdWVcbiIpOwo+Pj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+PiArCX0KPj4+ ICsKPj4+ICsJbXV0ZXhfbG9jaygmbGVkc19kZXYtPmxvY2spOwo+Pj4gKwlpZiAoIXZhbHVlKSB7 Cj4+PiArCQlyYyA9IHFjb21fZmxhc2hfdG9yY2hfb2ZmKGxlZCk7Cj4+PiArCX0gZWxzZSB7Cj4+ PiArCQkvKgo+Pj4gKwkJICogVGhlIG1pbmltdW0gb24gdmFsdWUgZm9yIHRoZSBicmlnaHRuZXNz IHJlZ2lzdGVyIGlzIDAsIGJ1dCBmb3IKPj4+ICsJCSAqIGxlZF9jbGFzc2RldiBpcyAxLCBhcyAw IHRoZXJlIG1lYW5zIG9mZi4KPj4+ICsJCSAqLwo+Pj4gKwkJcmMgPSBxY29tX2ZsYXNoX2JyaWdo dG5lc3Nfc2V0KGxlZCwgbGVkX2NkZXYtPmJyaWdodG5lc3MgLSAxKTsKPj4+ICsJCWlmIChyYykK Pj4+ICsJCQlnb3RvIHVubG9jazsKPj4+ICsKPj4+ICsJCWxlZC0+Zmxhc2hfY3VycmVudF9pbnZh bGlkYXRlZCA9IHRydWU7Cj4+PiArCj4+PiArCQlpZiAobGVkc19kZXYtPnRvcmNoX2VuYWJsZWQp IHsKPj4+ICsJCQkvKiBDbGVhciBzdGF0dXMgdG8gdXBkYXRlIGJyaWdodG5lc3MgKi8KPj4+ICsJ CQlyYyA9IHFjb21fZmxhc2hfc3RhdHVzX2NsZWFyKGxlZHNfZGV2KTsKPj4+ICsJCQlpZiAocmMp Cj4+PiArCQkJCWdvdG8gdW5sb2NrOwo+Pj4gKwkJfSBlbHNlIHsKPj4+ICsJCQkvKgo+Pj4gKwkJ CSAqIENsZWFyIHN0YXR1cyBmcm9tIHByZXZpb3VzIGZsYXNoIHN0cm9iZSBzbyB0aGUgTEVECj4+ PiArCQkJICogY2FuIHR1cm4gb24KPj4+ICsJCQkgKi8KPj4+ICsJCQlyYyA9IHFjb21fZmxhc2hf Y2hlY2tfdGltZWRvdXQobGVkc19kZXYpOwo+Pj4gKwkJCWlmIChyYyA+IDApCj4+PiArCQkJCXJj ID0gcWNvbV9mbGFzaF9zdGF0dXNfY2xlYXIobGVkc19kZXYpOwo+Pj4gKwkJCWVsc2UgaWYgKHJj IDwgMCkKPj4+ICsJCQkJZ290byB1bmxvY2s7Cj4+PiArCj4+PiArCQkJbWF4X2JyaWdodG5lc3Mg PSBsZWRfY2Rldi0+bWF4X2JyaWdodG5lc3MgLSAxOwo+Pj4gKwkJCXJjID0gcWNvbV9mbGFzaF9t YXhfYnJpZ2h0bmVzc19zZXQobGVkLCBtYXhfYnJpZ2h0bmVzcyk7Cj4+PiArCQkJaWYgKHJjKQo+ Pj4gKwkJCQlnb3RvIHVubG9jazsKPj4+ICsJCX0KPj4+ICsJCXJjID0gcWNvbV9mbGFzaF90b3Jj aF9vbihsZWQpOwo+Pj4gKwl9Cj4+PiArCj4+PiArdW5sb2NrOgo+Pj4gKwltdXRleF91bmxvY2so JmxlZHNfZGV2LT5sb2NrKTsKPj4+ICsJcmV0dXJuIHJjOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0 aWMgaW50IHFjb21fZmxhc2hfZmxjZGV2X2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3Nk ZXZfZmxhc2ggKmZsZWRfY2RldiwKPj4+ICsJCQkJCSAgICB1MzIgYnJpZ2h0bmVzcykKPj4+ICt7 Cj4+PiArCXN0cnVjdCBxY29tX2ZsYXNoX2xlZCAqbGVkID0gZmxjZGV2X3RvX2xlZChmbGVkX2Nk ZXYpOwo+Pj4gKwlzdHJ1Y3QgcWNvbV9mbGFzaF9kZXZpY2UgKmxlZHNfZGV2ID0gbGVkX3RvX2xl ZHNfZGV2KGxlZCk7Cj4+PiArCXVuc2lnbmVkIGludCBicmlnaHQ7Cj4+PiArCWludCByYzsKPj4+ ICsKPj4+ICsJLyogQ2FuJ3Qgb3BlcmF0ZSBvbiBmbGFzaCBpZiB0b3JjaCBpcyBvbiAqLwo+Pj4g KwlpZiAobGVkc19kZXYtPnRvcmNoX2VuYWJsZWQpCj4+PiArCQlyZXR1cm4gLUVCVVNZOwo+Pj4g Kwo+Pj4gKwljbGFtcF9hbGlnbigmYnJpZ2h0bmVzcywgUUNPTV9GTEFTSF9DVVJSRU5UX01JTiwK Pj4+ICsJCSAgICBmbGVkX2NkZXYtPmJyaWdodG5lc3MubWF4LCBRQ09NX0ZMQVNIX0NVUlJFTlRf U1RFUCk7Cj4+PiArCWZsZWRfY2Rldi0+YnJpZ2h0bmVzcy52YWwgPSBicmlnaHRuZXNzOwo+Pj4g Kwo+Pj4gKwlicmlnaHQgPSBxY29tX2ZsYXNoX2N1cnJlbnRfdG9fcmVnKGJyaWdodG5lc3MpOwo+ Pj4gKwo+Pj4gKwltdXRleF9sb2NrKCZsZWRzX2Rldi0+bG9jayk7Cj4+PiArCXJjID0gcWNvbV9m bGFzaF9icmlnaHRuZXNzX3NldChsZWQsIGJyaWdodCk7Cj4+PiArCWlmIChyYykKPj4+ICsJCWdv dG8gdW5sb2NrOwo+Pj4gKwo+Pj4gKwlpZiAobGVkLT5mbGFzaF9jdXJyZW50X2ludmFsaWRhdGVk KSB7Cj4+PiArCQlicmlnaHQgPSBxY29tX2ZsYXNoX2N1cnJlbnRfdG9fcmVnKGZsZWRfY2Rldi0+ YnJpZ2h0bmVzcy5tYXgpOwo+Pj4gKwkJcmMgPSBxY29tX2ZsYXNoX21heF9icmlnaHRuZXNzX3Nl dChsZWQsIGJyaWdodCk7Cj4+PiArCQlpZiAocmMpCj4+PiArCQkJZ290byB1bmxvY2s7Cj4+PiAr CX0KPj4+ICsKPj4+ICsJbGVkLT5mbGFzaF9jdXJyZW50X2ludmFsaWRhdGVkID0gZmFsc2U7Cj4+ PiArCj4+PiArdW5sb2NrOgo+Pj4gKwltdXRleF91bmxvY2soJmxlZHNfZGV2LT5sb2NrKTsKPj4+ ICsJcmV0dXJuIHJjOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IHFjb21fZmxhc2hfZmxj ZGV2X3N0cm9iZV9zZXQoc3RydWN0IGxlZF9jbGFzc2Rldl9mbGFzaCAqZmxlZF9jZGV2LAo+Pj4g KwkJCQkJYm9vbCBzdGF0ZSkKPj4+ICt7Cj4+PiArCXN0cnVjdCBxY29tX2ZsYXNoX2xlZCAqbGVk ID0gZmxjZGV2X3RvX2xlZChmbGVkX2NkZXYpOwo+Pj4gKwlzdHJ1Y3QgcWNvbV9mbGFzaF9kZXZp Y2UgKmxlZHNfZGV2ID0gbGVkX3RvX2xlZHNfZGV2KGxlZCk7Cj4+PiArCXVuc2lnbmVkIGludCBi cmlnaHQ7Cj4+PiArCXVuc2lnbmVkIGludCBpOwo+Pj4gKwlpbnQgcmM7Cj4+PiArCj4+PiArCS8q IENhbid0IG9wZXJhdGUgb24gZmxhc2ggaWYgdG9yY2ggaXMgb24gKi8KPj4+ICsJaWYgKGxlZHNf ZGV2LT50b3JjaF9lbmFibGVkKQo+Pj4gKwkJcmV0dXJuIC1FQlVTWTsKPj4+ICsKPj4+ICsJbXV0 ZXhfbG9jaygmbGVkc19kZXYtPmxvY2spOwo+Pj4gKwlpZiAoIXN0YXRlKSB7Cj4+PiArCQlyYyA9 IHFjb21fZmxhc2hfZmxlZF9vZmYobGVkKTsKPj4+ICsJfSBlbHNlIHsKPj4+ICsJCS8qCj4+PiAr CQkgKiBUdXJuIG9mZiBmbGFzaCBMRURzIGZyb20gcHJldmlvdXMgc3Ryb2JlCj4+PiArCQkgKi8K Pj4+ICsJCXJjID0gcWNvbV9mbGFzaF9jaGVja190aW1lZG91dChsZWRzX2Rldik7Cj4+PiArCQlp ZiAocmMgPiAwKSB7Cj4+PiArCQkJZm9yIChpID0gMDsgaSA8IGxlZHNfZGV2LT5udW1fbGVkczsg aSsrKSB7Cj4+PiArCQkJCXJjID0gcWNvbV9mbGFzaF9mbGVkX29mZigmbGVkc19kZXYtPmxlZHNb aV0pOwo+Pj4gKwkJCQlpZiAocmMpCj4+PiArCQkJCQlnb3RvIHVubG9jazsKPj4+ICsJCQl9Cj4+ PiArCQl9IGVsc2UgaWYgKHJjIDwgMCkgewo+Pj4gKwkJCWdvdG8gdW5sb2NrOwo+Pj4gKwkJfQo+ Pgo+PiBXaGF0IGlmIGZsYXNoIGdldHMgdGltZWQgb3V0IGFmdGVyIHRoaXMgY2hlY2sgaGVyZT8g V2h5IGRvIHlvdSBuZWVkIHRvCj4+IGNhbGwgcWNvbV9mbGFzaF9mbGVkX29mZigpIGlmIGl0IGhh cyBhbHJlYWR5IHRpbWVkIG91dD8KPiAKPiBUaGUgaXNzdWUgaXMgdGhhdCBhZnRlciB0aGUgZmxh c2ggdGltZXMgb3V0LCB0aGUgaGFyZHdhcmUgaXMgbm90IHJlYWR5IGZvcgo+IGFub3RoZXIgc3Ry b2JlLgo+IAo+IFdoZW4gSSBzdHJvYmUgTEVEMCBmb3IgZXhhbXBsZSwgdGhlIFNUQVRVUyByZWdp c3RlciwgMHgxMCwgZ2V0cyBzZXQgdG8gMHgwOAo+IGluZGljYXRpbmcgdGhlIExFRDAgaXMgb24u IEFmdGVyIHRoZSB0aW1lb3V0LCBpdCBjaGFuZ2VzIHRvIDB4MDQuIEF0IHRoYXQgcG9pbnQKPiBp ZiBJIHRyeSB0byBzdHJvYmUgTEVEMCBhZ2FpbiwgaXQgZG9lc24ndCB3b3JrLiBXaGVuIEkgdHVy biB0aGUgTEVEMCBvZmYgKHdyaXRlCj4gMHgwMCB0byBlaXRoZXIgdGhlIEVOQUJMRSBvciBTVFJP QkUgcmVnaXN0ZXIpLCB0aGUgU1RBVFVTIGlzIHJlc2V0IHRvIDB4MDAuIE5vdwo+IEknbSBhYmxl IHRvIHN0cm9iZSB0aGUgTEVEMCBhZ2Fpbi4KPiAKPiBJJ20gbm90IHN1cmUgaWYgdGhpcyBpcyB0 aGUgbm9ybWFsIGJlaGF2aW9yIG9uIG90aGVyIGZsYXNoIExFRCBjb250cm9sbGVycywgYW5kCj4g bWF5YmUgdGhlcmUncyBldmVuIHNvbWUgY29uZmlndXJhdGlvbiBvZiB0aGlzIFBNSUMgdGhhdCBy ZXNldHMgdGhlIExFRCBzdGF0dXMKPiBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBzdHJvYmUgdGlt ZW91dCwgYnV0IEkgaGF2ZSBub3QgYmVlbiBhYmxlIHRvIGRvIHRoYXQuIFNvCj4gdGhhdCdzIHdo eSBJIHJlc2V0IHRoZSBzdGF0dXMgbWFudWFsbHkgZXZlcnl0aW1lIGl0J3MgbmVlZGVkLgoKTXkg cG9pbnQgd2FzIHRoYXQgdGhlIGZsYXNoIG1heSB0aW1lIG91dCBhZnRlciByZWFkaW5nIFNUQVRV UyByZWdpc3RlcgphbmQgYmVmb3JlIHdyaXRpbmcgUUNPTV9GTEFTSF9BRERSX0xFRF9TVFJPQkVf Q1RSTC4KWW91IGNhbid0IGJlIDEwMCUgc3VyZSB0aGF0IHlvdSBrbm93IHRoZSBleGFjdCBTVEFU VVMgc3RhdGUganVzdAphIG1vbWVudCBiZWZvcmUgc3Ryb2JpbmcuCgpUbyBhbGxldmlhdGUgdGhh dCBJIHByb3Bvc2UgdG8gYXZvaWQgY2hlY2tpbmcgdGhlIHN0YXR1cyBhbmQgYWx3YXlzCmNhbGxp bmcgcWNvbV9mbGFzaF9mbGVkX29mZigpIGJlZm9yZSBpbml0aWF0aW5nIGEgbmV3IHN0cm9iZS4K Cj4+Cj4+PiArCQlpZiAobGVkLT5mbGFzaF9jdXJyZW50X2ludmFsaWRhdGVkKSB7Cj4+PiArCQkJ YnJpZ2h0ID0gcWNvbV9mbGFzaF9jdXJyZW50X3RvX3JlZyhmbGVkX2NkZXYtPmJyaWdodG5lc3Mu dmFsKTsKPj4+ICsJCQlyYyA9IHFjb21fZmxhc2hfYnJpZ2h0bmVzc19zZXQobGVkLCBicmlnaHQp Owo+Pj4gKwkJCWlmIChyYykKPj4+ICsJCQkJZ290byB1bmxvY2s7Cj4+PiArCj4+PiArCQkJYnJp Z2h0ID0gcWNvbV9mbGFzaF9jdXJyZW50X3RvX3JlZyhmbGVkX2NkZXYtPmJyaWdodG5lc3MubWF4 KTsKPj4+ICsJCQlyYyA9IHFjb21fZmxhc2hfbWF4X2JyaWdodG5lc3Nfc2V0KGxlZCwgYnJpZ2h0 KTsKPj4+ICsJCQlpZiAocmMpCj4+PiArCQkJCWdvdG8gdW5sb2NrOwo+Pj4gKwo+Pj4gKwkJCWxl ZC0+Zmxhc2hfY3VycmVudF9pbnZhbGlkYXRlZCA9IGZhbHNlOwo+Pj4gKwkJfQo+Pj4gKwo+Pj4g KwkJcmMgPSBxY29tX2ZsYXNoX2ZsZWRfb24obGVkKTsKPj4+ICsJfQo+Pj4gKwo+Pj4gK3VubG9j azoKPj4+ICsJbXV0ZXhfdW5sb2NrKCZsZWRzX2Rldi0+bG9jayk7Cj4+PiArCXJldHVybiByYzsK Pj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBxY29tX2ZsYXNoX2ZsY2Rldl9zdHJvYmVfZ2V0 KHN0cnVjdCBsZWRfY2xhc3NkZXZfZmxhc2ggKmZsZWRfY2RldiwKPj4+ICsJCQkJCWJvb2wgKnN0 YXRlKQo+Pj4gK3sKPj4+ICsJc3RydWN0IHFjb21fZmxhc2hfbGVkICpsZWQgPSBmbGNkZXZfdG9f bGVkKGZsZWRfY2Rldik7Cj4+PiArCXN0cnVjdCBxY29tX2ZsYXNoX2RldmljZSAqbGVkc19kZXYg PSBsZWRfdG9fbGVkc19kZXYobGVkKTsKPj4+ICsJaW50IHN0YXR1czsKPj4+ICsKPj4+ICsJbXV0 ZXhfbG9jaygmbGVkc19kZXYtPmxvY2spOwo+Pj4gKwlzdGF0dXMgPSBxY29tX2ZsYXNoX3N0YXR1 c19nZXQobGVkKTsKPj4+ICsJbXV0ZXhfdW5sb2NrKCZsZWRzX2Rldi0+bG9jayk7Cj4+PiArCWlm IChzdGF0dXMgPCAwKQo+Pj4gKwkJcmV0dXJuIHN0YXR1czsKPj4+ICsKPj4+ICsJKnN0YXRlID0g c3RhdHVzICYmICFsZWRzX2Rldi0+dG9yY2hfZW5hYmxlZDsKPj4+ICsJcmV0dXJuIDA7Cj4+PiAr fQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgcWNvbV9mbGFzaF9mbGNkZXZfdGltZW91dF9zZXQoc3Ry dWN0IGxlZF9jbGFzc2Rldl9mbGFzaCAqZmxlZF9jZGV2LAo+Pj4gKwkJCQkJIHUzMiB0aW1lb3V0 KQo+Pj4gK3sKPj4+ICsJc3RydWN0IHFjb21fZmxhc2hfbGVkICpsZWQgPSBmbGNkZXZfdG9fbGVk KGZsZWRfY2Rldik7Cj4+PiArCXN0cnVjdCBxY29tX2ZsYXNoX2RldmljZSAqbGVkc19kZXYgPSBs ZWRfdG9fbGVkc19kZXYobGVkKTsKPj4+ICsJdW5zaWduZWQgaW50IHRpbWUsIGk7Cj4+PiArCWlu dCByYzsKPj4+ICsKPj4+ICsJY2xhbXBfYWxpZ24oJnRpbWVvdXQsIFFDT01fRkxBU0hfRFVSQVRJ T05fTUlOLCBmbGVkX2NkZXYtPnRpbWVvdXQubWF4LAo+Pj4gKwkJICAgIFFDT01fRkxBU0hfRFVS QVRJT05fU1RFUCk7Cj4+PiArCj4+PiArCS8qIFNpbmNlIHRoZSB0aW1lb3V0IHJlZ2lzdGVyIGlz IHNoYXJlZCBiZXR3ZWVuIExFRHMsIHVwZGF0ZSBmb3IgYWxsICovCj4+PiArCWZvciAoaSA9IDA7 IGkgPCBsZWRzX2Rldi0+bnVtX2xlZHM7IGkrKykKPj4+ICsJCWxlZHNfZGV2LT5sZWRzW2ldLmZs ZWRfY2Rldi50aW1lb3V0LnZhbCA9IHRpbWVvdXQ7Cj4+PiArCj4+PiArCXRpbWUgPSBxY29tX2Zs YXNoX2R1cmF0aW9uX3RvX3JlZyhmbGVkX2NkZXYtPnRpbWVvdXQudmFsKTsKPj4+ICsKPj4+ICsJ bXV0ZXhfbG9jaygmbGVkc19kZXYtPmxvY2spOwo+Pj4gKwlyYyA9IHFjb21fZmxhc2hfbWFza2Vk X3dyaXRlKGxlZHNfZGV2LCBRQ09NX0ZMQVNIX0FERFJfU0FGRVRZX1RJTUVSLAo+Pj4gKwkJCQkg ICAgIFFDT01fRkxBU0hfU0FGRVRZX1RJTUVSX01BU0ssIHRpbWUpOwo+Pj4gKwlpZiAocmMpCj4+ PiArCQlkZXZfZXJyKGxlZHNfZGV2LT5kZXYsICJTYWZldHkgdGltZXIgcmVnIHdyaXRlIGZhaWxl ZCglZClcbiIsCj4+PiArCQkJcmMpOwo+Pj4gKwltdXRleF91bmxvY2soJmxlZHNfZGV2LT5sb2Nr KTsKPj4+ICsKPj4+ICsJcmV0dXJuIHJjOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IHFj b21fZmxhc2hfZmxjZGV2X2ZhdWx0X2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2X2ZsYXNoICpmbGVk X2NkZXYsCj4+PiArCQkJCSAgICAgICB1MzIgKmZhdWx0KQo+Pj4gK3sKPj4+ICsJLyoKPj4+ICsJ ICogVE9ETyBBZGQgZmF1bHQgZGV0ZWN0aW9uIHdoZW4gd2UgZmluZCBvdXQgaG93IHRvLiBObyBj bHVlIGZyb20KPj4+ICsJICogaW5zcGVjdGluZyB0aGUgU1BNSSByZWdpc3RlcnMKPj4+ICsJICov Cj4+PiArCSpmYXVsdCA9IDA7Cj4+PiArCXJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGxlZF9mbGFzaF9vcHMgZmxhc2hfb3BzID0gewo+Pj4gKwkuZmxhc2hf YnJpZ2h0bmVzc19zZXQJPSBxY29tX2ZsYXNoX2ZsY2Rldl9icmlnaHRuZXNzX3NldCwKPj4+ICsJ LnN0cm9iZV9zZXQJCT0gcWNvbV9mbGFzaF9mbGNkZXZfc3Ryb2JlX3NldCwKPj4+ICsJLnN0cm9i ZV9nZXQJCT0gcWNvbV9mbGFzaF9mbGNkZXZfc3Ryb2JlX2dldCwKPj4+ICsJLnRpbWVvdXRfc2V0 CQk9IHFjb21fZmxhc2hfZmxjZGV2X3RpbWVvdXRfc2V0LAo+Pj4gKwkuZmF1bHRfZ2V0CQk9IHFj b21fZmxhc2hfZmxjZGV2X2ZhdWx0X2dldCwKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQg cWNvbV9mbGFzaF9zZXR1cF9mbGNkZXYoc3RydWN0IHFjb21fZmxhc2hfY29uZmlnICpjZmcsCj4+ PiArCQkJCSAgIHN0cnVjdCBxY29tX2ZsYXNoX2xlZCAqbGVkLAo+Pj4gKwkJCQkgICBzdHJ1Y3Qg ZGV2aWNlX25vZGUgKm5vZGUpCj4+PiArewo+Pj4gKwlpbnQgcmM7Cj4+PiArCXN0cnVjdCBkZXZp Y2UgKmRldiA9IGxlZF90b19sZWRzX2RldihsZWQpLT5kZXY7Cj4+PiArCXN0cnVjdCBsZWRfY2xh c3NkZXZfZmxhc2ggKmZsZWRfY2RldiA9ICZsZWQtPmZsZWRfY2RldjsKPj4+ICsJc3RydWN0IGxl ZF9jbGFzc2RldiAqbGVkX2NkZXYgPSAmZmxlZF9jZGV2LT5sZWRfY2RldjsKPj4+ICsJc3RydWN0 IGxlZF9pbml0X2RhdGEgaW5pdF9kYXRhID0ge307Cj4+PiArCXN0cnVjdCBsZWRfZmxhc2hfc2V0 dGluZyAqc2V0dGluZzsKPj4+ICsKPj4+ICsJaW5pdF9kYXRhLmZ3bm9kZSA9IG9mX2Z3bm9kZV9o YW5kbGUobm9kZSk7Cj4+PiArCj4+PiArCWxlZF9jZGV2LT5icmlnaHRuZXNzX3NldF9ibG9ja2lu ZyA9IHFjb21fZmxhc2hfbGVkY2Rldl9icmlnaHRuZXNzX3NldDsKPj4+ICsKPj4+ICsJbGVkX2Nk ZXYtPm1heF9icmlnaHRuZXNzID0gY2ZnLT5sZWRfbWF4X2JyaWdodG5lc3NbbGVkLT5pZF07Cj4+ PiArCWxlZF9jZGV2LT5tYXhfYnJpZ2h0bmVzcyAvPSBRQ09NX0ZMQVNIX0NVUlJFTlRfU1RFUDsK Pj4KPj4gSnVzdCBhc3NpZ24gdGhlIHJlc3VsdCBvZiBkaXZpc2lvbjoKPj4KPj4gbGVkX2NkZXYt Pm1heF9icmlnaHRuZXNzID0gY2ZnLT5sZWRfbWF4X2JyaWdodG5lc3NbbGVkLT5pZF0gLwo+PiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUUNPTV9GTEFTSF9DVVJSRU5UX1NURVA7Cj4+Cj4+ IFR3byBjb25zZWN1dGl2ZSBhc3NpZ25tZW50cyBsb29rIGEgYml0IGNvbnZvbHV0ZWQuCj4gCj4g U3VyZS4KPiAKPj4KPj4+ICsKPj4+ICsJc2V0dGluZyA9ICZmbGVkX2NkZXYtPmJyaWdodG5lc3M7 Cj4+PiArCXNldHRpbmctPm1heCA9IGNmZy0+Zmxhc2hfbWF4X2JyaWdodG5lc3NbbGVkLT5pZF07 Cj4+PiArCXNldHRpbmctPm1pbiA9IFFDT01fRkxBU0hfQ1VSUkVOVF9NSU47Cj4+PiArCXNldHRp bmctPnN0ZXAgPSBRQ09NX0ZMQVNIX0NVUlJFTlRfU1RFUDsKPj4+ICsJc2V0dGluZy0+dmFsID0g c2V0dGluZy0+bWluOwo+Pj4gKwo+Pj4gKwlzZXR0aW5nID0gJmZsZWRfY2Rldi0+dGltZW91dDsK Pj4+ICsJc2V0dGluZy0+bWF4ID0gY2ZnLT5mbGFzaF9tYXhfdGltZW91dFtsZWQtPmlkXTsKPj4+ ICsJc2V0dGluZy0+bWluID0gUUNPTV9GTEFTSF9EVVJBVElPTl9NSU47Cj4+PiArCXNldHRpbmct PnN0ZXAgPSBRQ09NX0ZMQVNIX0RVUkFUSU9OX1NURVA7Cj4+PiArCXNldHRpbmctPnZhbCA9IFFD T01fRkxBU0hfRFVSQVRJT05fREVGQVVMVDsKPj4+ICsKPj4+ICsJZmxlZF9jZGV2LT5vcHMgPSAm Zmxhc2hfb3BzOwo+Pj4gKwlsZWRfY2Rldi0+ZmxhZ3MgfD0gTEVEX0RFVl9DQVBfRkxBU0g7Cj4+ PiArCj4+PiArCXJjID0gZGV2bV9sZWRfY2xhc3NkZXZfZmxhc2hfcmVnaXN0ZXJfZXh0KGRldiwg ZmxlZF9jZGV2LCAmaW5pdF9kYXRhKTsKPj4+ICsJaWYgKHJjKQo+Pj4gKwkJZGV2X2VycihkZXYs ICJ1bmFibGUgdG8gcmVnaXN0ZXIgbGVkICVkLHJjPSVkXG4iLCBsZWQtPmlkLCByYyk7Cj4+PiAr Cj4+PiArCXJldHVybiByYzsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBxY29tX2ZsYXNo X3NldHVwX2ZsZWQoc3RydWN0IHFjb21fZmxhc2hfY29uZmlnICpjZmcsCj4+PiArCQkJCSBzdHJ1 Y3QgcWNvbV9mbGFzaF9sZWQgKmxlZCwKPj4+ICsJCQkJIGVudW0gcWNvbV9mbGFzaF9pZHMgaWQp Cj4+PiArewo+Pj4gKwlsZWQtPmlkID0gY2ZnLT5pZFtpZF07Cj4+PiArCWxlZC0+ZGVmYXVsdF9v biA9IGNmZy0+ZGVmYXVsdF9vbltpZF07Cj4+PiArCWxlZC0+Zmxhc2hfY3VycmVudF9pbnZhbGlk YXRlZCA9IHRydWU7Cj4+PiArCj4+PiArCWlmIChsZWQtPmlkID09IFFDT01fRkxBU0hfSURfTEVE MCkgewo+Pj4gKwkJbGVkLT5mbGFzaF9lbmFibGVfY21kID0gUUNPTV9GTEFTSF9FTkFCTEVfTEVE MDsKPj4+ICsJCWxlZC0+Zmxhc2hfc3Ryb2JlX2NtZCA9IFFDT01fRkxBU0hfU1RST0JFX0xFRDA7 Cj4+PiArCQlsZWQtPmN1cnJlbnRfYWRkciA9IFFDT01fRkxBU0hfQUREUl9DVVJSX0xFRDA7Cj4+ PiArCQlsZWQtPm1hc2tfbGVkX29uID0gUUNPTV9GTEFTSF9NQVNLX09OX0xFRDA7Cj4+PiArCX0g ZWxzZSB7Cj4+PiArCQlsZWQtPmZsYXNoX2VuYWJsZV9jbWQgPSBRQ09NX0ZMQVNIX0VOQUJMRV9M RUQxOwo+Pj4gKwkJbGVkLT5mbGFzaF9zdHJvYmVfY21kID0gUUNPTV9GTEFTSF9TVFJPQkVfTEVE MTsKPj4+ICsJCWxlZC0+Y3VycmVudF9hZGRyID0gUUNPTV9GTEFTSF9BRERSX0NVUlJfTEVEMTsK Pj4+ICsJCWxlZC0+bWFza19sZWRfb24gPSBRQ09NX0ZMQVNIX01BU0tfT05fTEVEMTsKPj4+ICsJ fQo+Pj4gKwo+Pj4gKwlyZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBxY29t X2ZsYXNoX3NldHVwX3JlZ3Moc3RydWN0IHFjb21fZmxhc2hfZGV2aWNlICpsZWRzX2RldikKPj4+ ICt7Cj4+PiArCWludCByYzsKPj4+ICsKPj4+ICsJcmMgPSBxY29tX2ZsYXNoX21hc2tlZF93cml0 ZShsZWRzX2RldiwgUUNPTV9GTEFTSF9BRERSX0xFRF9TVFJPQkVfQ1RSTCwKPj4+ICsJCQkJICAg ICBRQ09NX0ZMQVNIX1NUUk9CRV9NQVNLLAo+Pj4gKwkJCQkgICAgIFFDT01fRkxBU0hfRElTQUJM RV9BTEwpOwo+Pj4gKwlpZiAocmMpIHsKPj4+ICsJCWRldl9lcnIobGVkc19kZXYtPmRldiwgIkxF RCBmbGFzaCB3cml0ZSBmYWlsZWQoJWQpXG4iLCByYyk7Cj4+PiArCQlyZXR1cm4gcmM7Cj4+PiAr CX0KPj4+ICsKPj4+ICsJLyogRGlzYWJsZSBmbGFzaCBMRUQgbW9kdWxlICovCj4+PiArCXJjID0g cWNvbV9mbGFzaF9tYXNrZWRfd3JpdGUobGVkc19kZXYsIFFDT01fRkxBU0hfQUREUl9FTkFCTEVf Q09OVFJPTCwKPj4+ICsJCQkJICAgICBRQ09NX0ZMQVNIX0VOQUJMRV9NQVNLLAo+Pj4gKwkJCQkg ICAgIFFDT01fRkxBU0hfRElTQUJMRV9BTEwpOwo+Pj4gKwlpZiAocmMpIHsKPj4+ICsJCWRldl9l cnIobGVkc19kZXYtPmRldiwgIkVuYWJsZSByZWcgd3JpdGUgZmFpbGVkKCVkKVxuIiwgcmMpOwo+ Pj4gKwkJcmV0dXJuIHJjOwo+Pj4gKwl9Cj4+PiArCj4+PiArCS8qIFNldCBWcmVnIGZvcmNlICov Cj4+PiArCXJjID0gcWNvbV9mbGFzaF9tYXNrZWRfd3JpdGUobGVkc19kZXYsIFFDT01fRkxBU0hf QUREUl9WUkVHX09LX0ZPUkNFLAo+Pj4gKwkJCQkgICAgIFFDT01fRkxBU0hfVlJFR19NQVNLLAo+ Pj4gKwkJCQkgICAgIFFDT01fRkxBU0hfSFdfVlJFR19PSyk7Cj4+PiArCWlmIChyYykgewo+Pj4g KwkJZGV2X2VycihsZWRzX2Rldi0+ZGV2LCAiVnJlZyBPSyByZWcgd3JpdGUgZmFpbGVkKCVkKVxu IiwgcmMpOwo+Pj4gKwkJcmV0dXJuIHJjOwo+Pj4gKwl9Cj4+PiArCj4+PiArCS8qIFNldCBzZWxm IGZhdWx0IGNoZWNrICovCj4+PiArCXJjID0gcWNvbV9mbGFzaF9tYXNrZWRfd3JpdGUobGVkc19k ZXYsIFFDT01fRkxBU0hfQUREUl9GQVVMVF9ERVRFQ1QsCj4+PiArCQkJCSAgICAgUUNPTV9GTEFT SF9GQVVMVF9ERVRFQ1RfTUFTSywKPj4+ICsJCQkJICAgICBRQ09NX0ZMQVNIX1NFTEZDSEVDS19E SVNBQkxFKTsKPj4+ICsJaWYgKHJjKSB7Cj4+PiArCQlkZXZfZXJyKGxlZHNfZGV2LT5kZXYsICJG YXVsdCBkZXRlY3QgcmVnIHdyaXRlIGZhaWxlZCglZClcbiIsCj4+PiArCQkJcmMpOwo+Pj4gKwkJ cmV0dXJuIHJjOwo+Pj4gKwl9Cj4+PiArCj4+PiArCS8qIFNldCBtYXNrIGVuYWJsZSAqLwo+Pj4g KwlyYyA9IHFjb21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2LCBRQ09NX0ZMQVNIX0FERFJf TUFTS19FTkFCTEUsCj4+PiArCQkJCSAgICAgUUNPTV9GTEFTSF9NQVNLX1JFR19NQVNLLAo+Pj4g KwkJCQkgICAgIFFDT01fRkxBU0hfTUFTS18xKTsKPj4+ICsJaWYgKHJjKSB7Cj4+PiArCQlkZXZf ZXJyKGxlZHNfZGV2LT5kZXYsICJNYXNrIGVuYWJsZSByZWcgd3JpdGUgZmFpbGVkKCVkKVxuIiwK Pj4+ICsJCQlyYyk7Cj4+PiArCQlyZXR1cm4gcmM7Cj4+PiArCX0KPj4+ICsKPj4+ICsJLyogU2V0 IHJhbXAgcmF0ZSAqLwo+Pj4gKwlyYyA9IHFjb21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2 LCBRQ09NX0ZMQVNIX0FERFJfUkFNUF9SQVRFLAo+Pj4gKwkJCQkgICAgIFFDT01fRkxBU0hfUkFN UF9SQVRFX01BU0ssIDB4QkYpOwo+Pj4gKwlpZiAocmMpIHsKPj4+ICsJCWRldl9lcnIobGVkc19k ZXYtPmRldiwgIlJhbXAgcmF0ZSByZWcgd3JpdGUgZmFpbGVkKCVkKVxuIiwgcmMpOwo+Pj4gKwkJ cmV0dXJuIHJjOwo+Pj4gKwl9Cj4+PiArCj4+PiArCS8qIEVuYWJsZSBWUEhfUFdSX0RST09QIGFu ZCBzZXQgdGhyZXNob2xkIHRvIDIuOVYgKi8KPj4+ICsJcmMgPSBxY29tX2ZsYXNoX21hc2tlZF93 cml0ZShsZWRzX2RldiwgUUNPTV9GTEFTSF9BRERSX1ZQSF9QV1JfRFJPT1AsCj4+PiArCQkJCSAg ICAgUUNPTV9GTEFTSF9WUEhfUFdSX0RST09QX01BU0ssIDB4QzIpOwo+Pj4gKwlpZiAocmMpIHsK Pj4+ICsJCWRldl9lcnIobGVkc19kZXYtPmRldiwgIlZQSF9QV1JfRFJPT1AgcmVnIHdyaXRlIGZh aWxlZCglZClcbiIsCj4+PiArCQkJcmMpOwo+Pj4gKwkJcmV0dXJuIHJjOwo+Pj4gKwl9Cj4+PiAr Cj4+PiArCS8qIFNldCBoZWFkcm9vbSAqLwo+Pj4gKwlyYyA9IHFjb21fZmxhc2hfbWFza2VkX3dy aXRlKGxlZHNfZGV2LCBRQ09NX0ZMQVNIX0FERFJfSEVBRFJPT00sCj4+PiArCQkJCSAgICAgUUNP TV9GTEFTSF9IRUFEUk9PTV9NQVNLLAo+Pj4gKwkJCQkgICAgIFFDT01fRkxBU0hfSEVBRFJPT01f NTAwTVYpOwo+Pj4gKwlpZiAocmMpIHsKPj4+ICsJCWRldl9lcnIobGVkc19kZXYtPmRldiwgIkhl YWRyb29tIHJlZyB3cml0ZSBmYWlsZWQoJWQpXG4iLCByYyk7Cj4+PiArCQlyZXR1cm4gcmM7Cj4+ PiArCX0KPj4+ICsKPj4+ICsJLyogU2V0IHN0YXJ0dXAgZGVsYXkgKi8KPj4+ICsJcmMgPSBxY29t X2ZsYXNoX21hc2tlZF93cml0ZShsZWRzX2RldiwgUUNPTV9GTEFTSF9BRERSX1NUQVJUVVBfREVM QVksCj4+PiArCQkJCSAgICAgUUNPTV9GTEFTSF9TVEFSVFVQX0RMWV9NQVNLLAo+Pj4gKwkJCQkg ICAgIFFDT01fRkxBU0hfU1RBUlRVUF9ETFlfMTBVUyk7Cj4+PiArCWlmIChyYykgewo+Pj4gKwkJ ZGV2X2VycihsZWRzX2Rldi0+ZGV2LCAiU3RhcnR1cCBkZWxheSByZWcgd3JpdGUgZmFpbGVkKCVk KVxuIiwKPj4+ICsJCQlyYyk7Cj4+PiArCQlyZXR1cm4gcmM7Cj4+PiArCX0KPj4+ICsKPj4+ICsJ LyoKPj4+ICsJICogVE9ETyBUaGUgZG93bnN0cmVhbSBkcml2ZXIgYWxzbyBzdXBwb3J0ZWQgd2F0 Y2hkb2cgbW9kZS4gTm90IHN1cmUKPj4+ICsJICogYWJvdXQgdGhlIGRpZmZlcmVuY2UsIHNvIG9u bHkgc3VwcG9ydCBzYWZldHkgdGltZXIgZm9yIG5vdwo+Pj4gKwkgKi8KPj4+ICsJLyogU2V0IHRp bWVyIGNvbnRyb2wgKi8KPj4+ICsJcmMgPSBxY29tX2ZsYXNoX21hc2tlZF93cml0ZShsZWRzX2Rl diwgUUNPTV9GTEFTSF9BRERSX0xFRF9UTVJfQ1RSTCwKPj4+ICsJCQkJICAgICBRQ09NX0ZMQVNI X1RNUl9NQVNLLAo+Pj4gKwkJCQkgICAgIFFDT01fRkxBU0hfVE1SX1NBRkVUWSk7Cj4+PiArCWlm IChyYykgewo+Pj4gKwkJZGV2X2VycihsZWRzX2Rldi0+ZGV2LCAiTEVEIHRpbWVyIGN0cmwgcmVn IHdyaXRlIGZhaWxlZCglZClcbiIsCj4+PiArCQkJcmMpOwo+Pj4gKwkJcmV0dXJuIHJjOwo+Pj4g Kwl9Cj4+PiArCj4+PiArCS8qIFNldCBjbGFtcCBjdXJyZW50ICovCj4+PiArCXJjID0gcWNvbV9m bGFzaF9tYXNrZWRfd3JpdGUobGVkc19kZXYsIFFDT01fRkxBU0hfQUREUl9DTEFNUF9DVVJSLAo+ Pj4gKwkJCQkgICAgIFFDT01fRkxBU0hfQ1VSUkVOVF9NQVNLLAo+Pj4gKwkJCQkgICAgIHFjb21f Zmxhc2hfY3VycmVudF90b19yZWcoUUNPTV9GTEFTSF9ERUZBVUxUX0NMQU1QKSk7Cj4+PiArCWlm IChyYykKPj4+ICsJCWRldl9lcnIobGVkc19kZXYtPmRldiwgIkNsYW1wIGN1cnJlbnQgcmVnIHdy aXRlIGZhaWxlZCglZClcbiIsCj4+PiArCQkJcmMpOwo+Pj4gKwo+Pj4gKwlyZXR1cm4gcmM7Cj4+ PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgcWNvbV9mbGFzaF9zZXR1cF9sZWQoc3RydWN0IHFj b21fZmxhc2hfY29uZmlnICpjZmcsCj4+PiArCQkJCXN0cnVjdCBxY29tX2ZsYXNoX2xlZCAqbGVk LAo+Pj4gKwkJCQllbnVtIHFjb21fZmxhc2hfaWRzIGlkLAo+Pj4gKwkJCQlzdHJ1Y3QgZGV2aWNl X25vZGUgKm5vZGUpCj4+PiArewo+Pj4gKwlzdHJ1Y3QgcWNvbV9mbGFzaF9kZXZpY2UgKmxlZHNf ZGV2ID0gbGVkX3RvX2xlZHNfZGV2KGxlZCk7Cj4+PiArCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxl ZF9jZGV2ID0gJmxlZC0+ZmxlZF9jZGV2LmxlZF9jZGV2Owo+Pj4gKwlpbnQgcmM7Cj4+PiArCj4+ PiArCXJjID0gcWNvbV9mbGFzaF9zZXR1cF9mbGVkKGNmZywgbGVkLCBpZCk7Cj4+PiArCWlmIChy YykKPj4+ICsJCXJldHVybiByYzsKPj4+ICsKPj4+ICsJcmMgPSBxY29tX2ZsYXNoX3NldHVwX2Zs Y2RldihjZmcsIGxlZCwgbm9kZSk7Cj4+PiArCWlmIChyYykKPj4+ICsJCXJldHVybiByYzsKPj4+ ICsKPj4+ICsJLyogY29uZmlndXJlIGRlZmF1bHQgc3RhdGUgKi8KPj4+ICsJaWYgKCFsZWQtPmRl ZmF1bHRfb24pIHsKPj4+ICsJCWxlZF9jZGV2LT5icmlnaHRuZXNzID0gTEVEX09GRjsKPj4+ICsJ fSBlbHNlIHsKPj4+ICsJCWxlZF9jZGV2LT5icmlnaHRuZXNzID0gbGVkX2NkZXYtPm1heF9icmln aHRuZXNzOwo+Pj4gKwkJbXV0ZXhfbG9jaygmbGVkc19kZXYtPmxvY2spOwo+Pj4gKwkJcmMgPSBx Y29tX2ZsYXNoX3RvcmNoX29uKGxlZCk7Cj4+PiArCQltdXRleF91bmxvY2soJmxlZHNfZGV2LT5s b2NrKTsKPj4+ICsJCWlmIChyYykKPj4+ICsJCQlyZXR1cm4gcmM7Cj4+PiArCX0KPj4+ICsKPj4+ ICsJcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgcWNvbV9mbGFzaF9zZXR1 cF9sZWRzX2RldmljZShzdHJ1Y3QgcWNvbV9mbGFzaF9kZXZpY2UgKmxlZHNfZGV2LAo+Pj4gKwkJ CQkJc3RydWN0IHFjb21fZmxhc2hfY29uZmlnICpjZmcsCj4+PiArCQkJCQlzdHJ1Y3QgZGV2aWNl ICpkZXYpCj4+PiArewo+Pj4gKwlpbnQgcmM7Cj4+PiArCj4+PiArCWxlZHNfZGV2LT5kZXYgPSBk ZXY7Cj4+PiArCj4+PiArCWxlZHNfZGV2LT5iYXNlID0gY2ZnLT5iYXNlOwo+Pj4gKwlsZWRzX2Rl di0+bnVtX2xlZHMgPSBjZmctPm51bV9sZWRzOwo+Pj4gKwo+Pj4gKwlsZWRzX2Rldi0+cmVnbWFw ID0gZGV2X2dldF9yZWdtYXAoZGV2LT5wYXJlbnQsIE5VTEwpOwo+Pj4gKwlpZiAoIWxlZHNfZGV2 LT5yZWdtYXApIHsKPj4+ICsJCWRldl9lcnIoZGV2LCAiRmFpbHVyZSBnZXR0aW5nIHJlZ21hcFxu Iik7Cj4+PiArCQlyZXR1cm4gLUVOT0RFVjsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwlyYyA9IHFjb21f Zmxhc2hfc2V0dXBfcmVncyhsZWRzX2Rldik7Cj4+PiArCWlmIChyYykKPj4+ICsJCXJldHVybiBy YzsKPj4+ICsKPj4+ICsJcmMgPSBxY29tX2ZsYXNoX3JlYWRfcmVnKGxlZHNfZGV2LCBRQ09NX0ZM QVNIX0FERFJfUEVSSVBIRVJBTF9TVUJUWVBFLAo+Pj4gKwkJCQkgJmxlZHNfZGV2LT5wZXJpcGhl cmFsX3N1YnR5cGUpOwo+Pj4gKwlpZiAocmMpIHsKPj4+ICsJCWRldl9lcnIoZGV2LCAiVW5hYmxl IHRvIHJlYWQgZnJvbSBhZGRyPSV4LCByYyglZClcbiIsCj4+PiArCQkJUUNPTV9GTEFTSF9BRERS X1BFUklQSEVSQUxfU1VCVFlQRSwgcmMpOwo+Pj4gKwkJcmV0dXJuIHJjOwo+Pj4gKwl9Cj4+PiAr Cj4+PiArCWxlZHNfZGV2LT5mbGFzaF9zdXBwbHkgPSBjZmctPmZsYXNoX3N1cHBseTsKPj4+ICsK Pj4+ICsJaWYgKGxlZHNfZGV2LT5wZXJpcGhlcmFsX3N1YnR5cGUgPT0gUUNPTV9GTEFTSF9TVUJU WVBFX0RVQUwpIHsKPj4+ICsJCWxlZHNfZGV2LT50b3JjaF9zdXBwbHkgPSBjZmctPnRvcmNoX3N1 cHBseTsKPj4+ICsJCWxlZHNfZGV2LT50b3JjaF9lbmFibGVfY21kID0gUUNPTV9GTEFTSF9FTkFC TEVfTU9EVUxFOwo+Pj4gKwl9IGVsc2Ugewo+Pj4gKwkJbGVkc19kZXYtPnRvcmNoX2VuYWJsZV9j bWQgPSBRQ09NX0ZMQVNIX0VOQUJMRV9BTEw7Cj4+PiArCX0KPj4+ICsKPj4+ICsJbXV0ZXhfaW5p dCgmbGVkc19kZXYtPmxvY2spOwo+Pj4gKwo+Pj4gKwlyZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+ PiArc3RhdGljIGludCBxY29tX2ZsYXNoX3BhcnNlX2R0KHN0cnVjdCBkZXZpY2UgKmRldiwKPj4+ ICsJCQkgICAgICAgc3RydWN0IHFjb21fZmxhc2hfY29uZmlnICpjZmcsCj4+PiArCQkJICAgICAg IHN0cnVjdCBkZXZpY2Vfbm9kZSAqc3ViX25vZGVzW10pCj4+PiArewo+Pj4gKwlzdHJ1Y3QgZGV2 aWNlX25vZGUgKm5vZGUgPSBkZXYtPm9mX25vZGU7Cj4+PiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAq Y2hpbGRfbm9kZTsKPj4+ICsJY29uc3QgY2hhciAqdGVtcF9zdHJpbmc7Cj4+PiArCWludCByYywg cGFyc2VkX2xlZHMgPSAwOwo+Pj4gKwl1MzIgdmFsOwo+Pj4gKwo+Pj4gKwlyYyA9IG9mX3Byb3Bl cnR5X3JlYWRfdTMyKG5vZGUsICJyZWciLCAmdmFsKTsKPj4+ICsJaWYgKHJjIDwgMCkgewo+Pj4g KwkJZGV2X2VycihkZXYsICJGYWlsdXJlIHJlYWRpbmcgcmVnLCByYyA9ICVkXG4iLCByYyk7Cj4+ PiArCQlyZXR1cm4gcmM7Cj4+PiArCX0KPj4+ICsJY2ZnLT5iYXNlID0gdmFsOwo+Pj4gKwo+Pj4g KwljZmctPmZsYXNoX3N1cHBseSA9IGRldm1fcmVndWxhdG9yX2dldChkZXYsICJmbGFzaC1ib29z dCIpOwo+Pj4gKwljZmctPnRvcmNoX3N1cHBseSA9IGRldm1fcmVndWxhdG9yX2dldChkZXYsICJ0 b3JjaC1ib29zdCIpOwo+Pj4gKwo+Pj4gKwlmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9k ZShub2RlLCBjaGlsZF9ub2RlKSB7Cj4+PiArCQkvKiBMRUQgcHJvcGVydGllcyAqLwo+Pj4gKwo+ Pj4gKwkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihjaGlsZF9ub2RlLCAicmVnIiwKPj4+ICsJ CQkJCSAgJmNmZy0+aWRbcGFyc2VkX2xlZHNdKTsKPj4+ICsJCWlmIChyYykgewo+Pj4gKwkJCWRl dl9lcnIoZGV2LCAiRmFpbHVyZSByZWFkaW5nIGxlZCBpZCwgcmMgPSAgJWRcbiIsIHJjKTsKPj4+ ICsJCQlvZl9ub2RlX3B1dChjaGlsZF9ub2RlKTsKPj4+ICsJCQlyZXR1cm4gcmM7Cj4+PiArCQl9 Cj4+PiArCj4+PiArCQkvKiBBc3N1bWUgTEVEIElEcyBhcmUgb3JkZXJlZCBpbiBEVCBmb3Igc2lt cGxpY2l0eSAqLwo+Pgo+PiBZb3UgbmVlZCB0byBtZW50aW9uIHRoaXMgcmVxdWlyZW1lbnQgaW4g RFQgYmluZGluZ3MsIGJ1dCBJIGFtIG5vdCBzdXJlCj4+IGlmIERUIGNoaWxkIG5vZGVzIHBhcnNp bmcgb3JkZXIgaXMgZ3VhcmFudGVlZCB0byBiZSB0b3AtZG93bi4KPiAKPiBPaywgSSdsbCB0YWtl IGEgbG9vayBhdCB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIERUIGJpbmRpbmdzIGlmIHRoZXJl J3MgYW55Cj4gY2x1ZSBvbiB0aGF0LCBhbmQgY2hlY2sgd2hhdCBvdGhlciBkcml2ZXJzIG5vcm1h bGx5IGRvLiBJIGRpZCB0aGF0IGp1c3QgYmVjYXVzZQo+IGl0J3Mgc2ltcGxlciwgYnV0IEkgZ3Vl c3MgSSBjb3VsZCB1c2UgYSBsaW5rZWQgbGlzdCBmb3IgdGhlIG5vZGVzIGluc3RlYWQgb2YgYW4K PiBhcnJheSwgb3IgbWF5YmUgZXZlbiBzaW1wbGVyLCBoYXZlIGFuIGFycmF5IGZvciB0aGUgTEVE IElEcyByZWFkLCBzbyB3ZSBjYW4KPiByZW1vdmUgdGhpcyByZXN0cmljdGlvbi4KClJpZ2h0LCBq dXN0IGZvbGxvdyB3aGF0IG90aGVyIGRyaXZlcnMgZG8gaW4gc2ltaWxhciBjYXNlcy4KVGhlcmUn cyBubyBuZWVkIHRvIHJlaW52ZW50IHRoZSB3aGVlbC4KCi0tIApCZXN0IHJlZ2FyZHMsCkphY2Vr IEFuYXN6ZXdza2kKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMu aW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2xpbnV4LWFybS1rZXJuZWwK