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=-8.5 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,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 3C348C00307 for ; Mon, 9 Sep 2019 06:09:34 +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 053BC2067D for ; Mon, 9 Sep 2019 06:09:34 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="ngf6p3Zp"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="uv8njzjs" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 053BC2067D Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=ti.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-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=bombadil.20170209; h=Sender:Content-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=Wc9zk4oWmIbUgVBa21bOMIe91RWZUOUwOGss5FrRAMk=; b=ngf6p3ZpuGyBuzA6m5TatLXcX jAPZwCrp3sNW2n4mfwc1nwicYqKvOXq19Sg1fbsGD4vYOxbuuPtsV3gB0qEdSve2tWxz6/1DPJDAr +sbwQNEnymZ254nHbmYnX06m3nJ2DMBietCjiDcmTwzNwBq2IMKDsAF5/AG+VZsEy6UMm3OvNlGLa H1nC7Z1Nt9hq0Gf9Z+KZnfhnRQhgqfk90zlH6Ae4WG96Cxu8TOLisZKuE7V7GZw1kIilx6sZ6Lm59 kmslXBVXQU2M0HeY6Oe2LPtfHxoNI5KAbaSNVcbINHfTNzhbosu9cDkDu706qSioch3tmmiaZIjO/ w6lbOoGJg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1i7Crb-0004pW-Io; Mon, 09 Sep 2019 06:09:23 +0000 Received: from fllv0015.ext.ti.com ([198.47.19.141]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1i7CrU-0004oi-W2 for linux-arm-kernel@lists.infradead.org; Mon, 09 Sep 2019 06:09:21 +0000 Received: from fllv0035.itg.ti.com ([10.64.41.0]) by fllv0015.ext.ti.com (8.15.2/8.15.2) with ESMTP id x89699UU011917; Mon, 9 Sep 2019 01:09:09 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1568009349; bh=bIMvlDN/lDFk8Qm9dp1Y1TLky74lTqI9t2Fx9dit6Xk=; h=Subject:To:CC:References:From:Date:In-Reply-To; b=uv8njzjs7qk2utSp2eHzwKt4RtGhWIGbi9WAEbpMyim9j60bVY3vHPT/w0dzW3mrq /6yC3feYoSPydS/+/Zmo7rYNtLfzhSK6jLadpIR6rBED9AWbynf1oyRxIUbhBkKVEH JgnrN+qZznhogyYDYZ5vwFu8NoaZ183pez26mR5I= Received: from DLEE109.ent.ti.com (dlee109.ent.ti.com [157.170.170.41]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTP id x89699Es008471; Mon, 9 Sep 2019 01:09:09 -0500 Received: from DLEE114.ent.ti.com (157.170.170.25) by DLEE109.ent.ti.com (157.170.170.41) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Mon, 9 Sep 2019 01:09:06 -0500 Received: from lelv0326.itg.ti.com (10.180.67.84) by DLEE114.ent.ti.com (157.170.170.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5 via Frontend Transport; Mon, 9 Sep 2019 01:09:06 -0500 Received: from [127.0.0.1] (ileax41-snat.itg.ti.com [10.172.224.153]) by lelv0326.itg.ti.com (8.15.2/8.15.2) with ESMTP id x89692hi072988; Mon, 9 Sep 2019 01:09:03 -0500 Subject: Re: [PATCH v2 02/14] soc: ti: k3: add navss ringacc driver To: Peter Ujfalusi , , , , References: <20190730093450.12664-1-peter.ujfalusi@ti.com> <20190730093450.12664-3-peter.ujfalusi@ti.com> From: Tero Kristo Message-ID: <13e5c02f-7060-3a30-56cb-a9caca9fc85b@ti.com> Date: Mon, 9 Sep 2019 09:09:02 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <20190730093450.12664-3-peter.ujfalusi@ti.com> Content-Language: en-US X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190908_230917_175527_FFC54AC5 X-CRM114-Status: GOOD ( 33.38 ) 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: devicetree@vger.kernel.org, grygorii.strashko@ti.com, lokeshvutla@ti.com, j-keerthy@ti.com, linux-kernel@vger.kernel.org, tony@atomide.com, dmaengine@vger.kernel.org, dan.j.williams@intel.com, linux-arm-kernel@lists.infradead.org Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGksCgpNb3N0bHkgc29tZSBjb3NtZXRpYyBjb21tZW50cyBiZWxvdywgb3RoZXIgdGhhbiB0aGF0 IHNlZW1zIGZpbmUgdG8gbWUuCgpPbiAzMC8wNy8yMDE5IDEyOjM0LCBQZXRlciBVamZhbHVzaSB3 cm90ZToKPiBGcm9tOiBHcnlnb3JpaSBTdHJhc2hrbyA8Z3J5Z29yaWkuc3RyYXNoa29AdGkuY29t Pgo+IAo+IFRoZSBSaW5nIEFjY2VsZXJhdG9yIChSSU5HQUNDIG9yIFJBKSBwcm92aWRlcyBoYXJk d2FyZSBhY2NlbGVyYXRpb24gdG8KPiBlbmFibGUgc3RyYWlnaHRmb3J3YXJkIHBhc3Npbmcgb2Yg d29yayBiZXR3ZWVuIGEgcHJvZHVjZXIgYW5kIGEgY29uc3VtZXIuCj4gVGhlcmUgaXMgb25lIFJJ TkdBQ0MgbW9kdWxlIHBlciBOQVZTUyBvbiBUSSBBTTY1eCBTb0NzLgo+IAo+IFRoZSBSSU5HQUND IGNvbnZlcnRzIGNvbnN0YW50LWFkZHJlc3MgcmVhZCBhbmQgd3JpdGUgYWNjZXNzZXMgdG8gZXF1 aXZhbGVudAo+IHJlYWQgb3Igd3JpdGUgYWNjZXNzZXMgdG8gYSBjaXJjdWxhciBkYXRhIHN0cnVj dHVyZSBpbiBtZW1vcnkuIFRoZSBSSU5HQUNDCj4gZWxpbWluYXRlcyB0aGUgbmVlZCBmb3IgZWFj aCBETUEgY29udHJvbGxlciB3aGljaCBuZWVkcyB0byBhY2Nlc3MgcmluZwo+IGVsZW1lbnRzIGZy b20gaGF2aW5nIHRvIGtub3cgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHJpbmcgKGJhc2UgYWRk cmVzcywKPiBjdXJyZW50IG9mZnNldCkuIFRoZSBETUEgY29udHJvbGxlciBwZXJmb3JtcyBhIHJl YWQgb3Igd3JpdGUgYWNjZXNzIHRvIGEKPiBzcGVjaWZpYyBhZGRyZXNzIHJhbmdlICh3aGljaCBt YXBzIHRvIHRoZSBzb3VyY2UgaW50ZXJmYWNlIG9uIHRoZSBSSU5HQUNDKQo+IGFuZCB0aGUgUklO R0FDQyByZXBsYWNlcyB0aGUgYWRkcmVzcyBmb3IgdGhlIHRyYW5zYWN0aW9uIHdpdGggYSBuZXcg YWRkcmVzcwo+IHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBoZWFkIG9yIHRhaWwgZWxlbWVudCBv ZiB0aGUgcmluZyAoaGVhZCBmb3IgcmVhZHMsCj4gdGFpbCBmb3Igd3JpdGVzKS4gU2luY2UgdGhl IFJJTkdBQ0MgbWFpbnRhaW5zIHRoZSBzdGF0ZSwgbXVsdGlwbGUgRE1BCj4gY29udHJvbGxlcnMg b3IgY2hhbm5lbHMgYXJlIGFsbG93ZWQgdG8gY29oZXJlbnRseSBzaGFyZSB0aGUgc2FtZSByaW5n cyBhcwo+IGFwcGxpY2FibGUuIFRoZSBSSU5HQUNDIGlzIGFibGUgdG8gcGxhY2UgZGF0YSB3aGlj aCBpcyBkZXN0aW5lZCB0b3dhcmRzCj4gc29mdHdhcmUgaW50byBjYWNoZWQgbWVtb3J5IGRpcmVj dGx5Lgo+IAo+IFN1cHBvcnRlZCByaW5nIG1vZGVzOgo+IC0gUmluZyBNb2RlCj4gLSBNZXNzYWdp bmcgTW9kZQo+IC0gQ3JlZGVudGlhbHMgTW9kZQo+IC0gUXVldWUgTWFuYWdlciBNb2RlCj4gCj4g VEktU0NJIGludGVncmF0aW9uOgo+IAo+IFRleGFzIEluc3RydW1lbnQncyBTeXN0ZW0gQ29udHJv bCBJbnRlcmZhY2UgKFRJLVNDSSkgTWVzc2FnZSBQcm90b2NvbCBub3cKPiBoYXMgY29udHJvbCBv dmVyIFJpbmdhY2MgbW9kdWxlIHJlc291cmNlcyBtYW5hZ2VtZW50IChSTSkgYW5kIFJpbmdzCj4g Y29uZmlndXJhdGlvbi4KPiAKPiBUaGUgY29ycmVzcG9uZGluZyBzdXBwb3J0IG9mIFRJLVNDSSBS aW5nYWNjIG1vZHVsZSBSTSBwcm90b2NvbAo+IGludHJvZHVjZWQgYXMgb3B0aW9uIHRocm91Z2gg RFQgcGFyYW1ldGVyczoKPiAtIHRpLHNjaTogcGhhbmRsZSBvbiBUSS1TQ0kgZmlybXdhcmUgY29u dHJvbGxlciBEVCBub2RlCj4gLSB0aSxzY2ktZGV2LWlkOiBUSS1TQ0kgZGV2aWNlIGlkZW50aWZp ZXIgYXMgcGVyIFRJLVNDSSBmaXJtd2FyZSBzcGVjCj4gCj4gaWYgYm90aCBwYXJhbWV0ZXJzIHBy ZXNlbnQgLSBSaW5nYWNjIGRyaXZlciB3aWxsIGNvbmZpZ3VyZS9mcmVlL3Jlc2V0IFJpbmdzCj4g dXNpbmcgVEktU0NJIE1lc3NhZ2UgUmluZ2FjYyBSTSBQcm90b2NvbC4KPiAKPiBUaGUgUmluZ2Fj YyBkcml2ZXIgbWFuYWdlcyBSaW5ncyBhbGxvY2F0aW9uIGJ5IGl0c2VsZiBub3cgYW5kIHJlcXVl c3RzCj4gVEktU0NJIGZpcm13YXJlIHRvIGFsbG9jYXRlIGFuZCBjb25maWd1cmUgc3BlY2lmaWMg UmluZ3Mgb25seS4gSXQncyBkb25lCj4gdGhpcyB3YXkgYmVjYXVzZSwgTGludXggZHJpdmVyIGlt cGxlbWVudHMgdHdvIHN0YWdlIFJpbmdzIGFsbG9jYXRpb24gYW5kCj4gY29uZmlndXJhdGlvbiAo YWxsb2NhdGUgcmluZyBhbmQgY29uZmlndXJlIHJpbmcpIHdoaWxlIEktU0NJIE1lc3NhZ2UKCkkt U0NJIHNob3VsZCBiZSBUSS1TQ0kgSSBiZWxpZXZlLgoKPiBQcm90b2NvbCBzdXBwb3J0cyBvbmx5 IG9uZSBjb21iaW5lZCBvcGVyYXRpb24gKGFsbG9jYXRlK2NvbmZpZ3VyZSkuCj4gCj4gR3J5Z29y aWkgU3RyYXNoa28gPGdyeWdvcmlpLnN0cmFzaGtvQHRpLmNvbT4KCkFib3ZlIHNlZW1zIHRvIGJl IG1pc3NpbmcgU29CPwoKPiBTaWduZWQtb2ZmLWJ5OiBQZXRlciBVamZhbHVzaSA8cGV0ZXIudWpm YWx1c2lAdGkuY29tPgo+IC0tLQo+ICAgZHJpdmVycy9zb2MvdGkvS2NvbmZpZyAgICAgICAgICAg IHwgICAxNyArCj4gICBkcml2ZXJzL3NvYy90aS9NYWtlZmlsZSAgICAgICAgICAgfCAgICAxICsK PiAgIGRyaXZlcnMvc29jL3RpL2szLXJpbmdhY2MuYyAgICAgICB8IDExOTEgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKPiAgIGluY2x1ZGUvbGludXgvc29jL3RpL2szLXJpbmdhY2MuaCB8 ICAyNjIgKysrKysrKwo+ICAgNCBmaWxlcyBjaGFuZ2VkLCAxNDcxIGluc2VydGlvbnMoKykKPiAg IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3NvYy90aS9rMy1yaW5nYWNjLmMKPiAgIGNyZWF0 ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4L3NvYy90aS9rMy1yaW5nYWNjLmgKPiAKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9zb2MvdGkvS2NvbmZpZyBiL2RyaXZlcnMvc29jL3RpL0tjb25maWcK PiBpbmRleCBjZjU0NWY0MjhkMDMuLjEwYzc2ZmFhNTAzZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L3NvYy90aS9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9zb2MvdGkvS2NvbmZpZwo+IEBAIC04MCw2 ICs4MCwyMyBAQCBjb25maWcgVElfU0NJX1BNX0RPTUFJTlMKPiAgIAkgIGNhbGxlZCB0aV9zY2lf cG1fZG9tYWlucy4gTm90ZSB0aGlzIGlzIG5lZWRlZCBlYXJseSBpbiBib290IGJlZm9yZQo+ICAg CSAgcm9vdGZzIG1heSBiZSBhdmFpbGFibGUuCj4gICAKPiArY29uZmlnIFRJX0szX1JJTkdBQ0MK PiArCXRyaXN0YXRlICJLMyBSaW5nIGFjY2VsZXJhdG9yIFN1YiBTeXN0ZW0iCj4gKwlkZXBlbmRz IG9uIEFSQ0hfSzMgfHwgQ09NUElMRV9URVNUCj4gKwlkZXBlbmRzIG9uIFRJX1NDSV9JTlRBX0lS UUNISVAKPiArCWRlZmF1bHQgeQo+ICsJaGVscAo+ICsJICBTYXkgeSBoZXJlIHRvIHN1cHBvcnQg dGhlIEszIFJpbmcgYWNjZWxlcmF0b3IgbW9kdWxlLgo+ICsJICBUaGUgUmluZyBBY2NlbGVyYXRv ciAoUklOR0FDQyBvciBSQSkgIHByb3ZpZGVzIGhhcmR3YXJlIGFjY2VsZXJhdGlvbgo+ICsJICB0 byBlbmFibGUgc3RyYWlnaHRmb3J3YXJkIHBhc3Npbmcgb2Ygd29yayBiZXR3ZWVuIGEgcHJvZHVj ZXIKPiArCSAgYW5kIGEgY29uc3VtZXIuIFRoZXJlIGlzIG9uZSBSSU5HQUNDIG1vZHVsZSBwZXIg TkFWU1Mgb24gVEkgQU02NXggU29Dcwo+ICsJICBJZiB1bnN1cmUsIHNheSBOLgo+ICsKPiArY29u ZmlnIFRJX0szX1JJTkdBQ0NfREVCVUcKPiArCXRyaXN0YXRlICJLMyBSaW5nIGFjY2VsZXJhdG9y IFN1YiBTeXN0ZW0gdGVzdHMgYW5kIGRlYnVnIgo+ICsJZGVwZW5kcyBvbiBUSV9LM19SSU5HQUND Cj4gKwlkZWZhdWx0IG4KPiArCj4gICBlbmRpZiAjIFNPQ19USQo+ICAgCj4gICBjb25maWcgVElf U0NJX0lOVEFfTVNJX0RPTUFJTgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy90aS9NYWtlZmls ZSBiL2RyaXZlcnMvc29jL3RpL01ha2VmaWxlCj4gaW5kZXggYjM4NjhkMzkyZDRmLi5jYzRiYzhi MDhiZjUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9zb2MvdGkvTWFrZWZpbGUKPiArKysgYi9kcml2 ZXJzL3NvYy90aS9NYWtlZmlsZQo+IEBAIC05LDMgKzksNCBAQCBvYmotJChDT05GSUdfQU1YM19Q TSkJCQkrPSBwbTMzeHgubwo+ICAgb2JqLSQoQ09ORklHX1dLVVBfTTNfSVBDKQkJKz0gd2t1cF9t M19pcGMubwo+ICAgb2JqLSQoQ09ORklHX1RJX1NDSV9QTV9ET01BSU5TKQkJKz0gdGlfc2NpX3Bt X2RvbWFpbnMubwo+ICAgb2JqLSQoQ09ORklHX1RJX1NDSV9JTlRBX01TSV9ET01BSU4pCSs9IHRp X3NjaV9pbnRhX21zaS5vCj4gK29iai0kKENPTkZJR19USV9LM19SSU5HQUNDKQkJKz0gazMtcmlu Z2FjYy5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL3RpL2szLXJpbmdhY2MuYyBiL2RyaXZl cnMvc29jL3RpL2szLXJpbmdhY2MuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAw MDAwMDAwMDAwLi40MDFkZmM5NjMzMTkKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9z b2MvdGkvazMtcmluZ2FjYy5jCj4gQEAgLTAsMCArMSwxMTkxIEBACj4gKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAqIFRJIEszIE5BVlNTIFJpbmcgQWNjZWxl cmF0b3Igc3Vic3lzdGVtIGRyaXZlcgo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgVGV4 YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20KPiArICovCj4g Kwo+ICsjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lv Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mLmg+ Cj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L3BtX3J1bnRpbWUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NvYy90aS9rMy1yaW5nYWNjLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9zb2MvdGkvdGlfc2NpX3Byb3RvY29sLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9zb2MvdGkvdGlfc2NpX2ludGFfbXNpLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEu aD4KPiArI2luY2x1ZGUgPGxpbnV4L2lycWRvbWFpbi5oPgo+ICsKPiArc3RhdGljIExJU1RfSEVB RChrM19yaW5nYWNjX2xpc3QpOwo+ICtzdGF0aWMgREVGSU5FX01VVEVYKGszX3JpbmdhY2NfbGlz dF9sb2NrKTsKPiArCj4gKyNpZmRlZiBDT05GSUdfVElfSzNfUklOR0FDQ19ERUJVRwo+ICsjZGVm aW5lCWszX25hdl9kYmcoZGV2LCBhcmcuLi4pIGRldl9lcnIoZGV2LCBhcmcpCgpkZXZfZXJyIHNl ZW1zIGV4YWdnZXJhdGlvbiBmb3IgZGVidWcgcHVycG9zZXMsIG1heWJlIGp1c3QgZGV2X2luZm8u Cgo+ICtzdGF0aWMJdm9pZCBkYmdfd3JpdGVsKHUzMiB2LCB2b2lkIF9faW9tZW0gKnJlZykKPiAr ewo+ICsJcHJfZXJyKCJXUklURUwoMzIpOiB2KCUwOFgpLS0+cmVnKCVwKVxuIiwgdiwgcmVnKTsK CkFnYWluLCBtYXliZSBqdXN0IHByX2luZm8uCgo+ICsJd3JpdGVsKHYsIHJlZyk7Cj4gK30KPiAr Cj4gK3N0YXRpYwl1MzIgZGJnX3JlYWRsKHZvaWQgX19pb21lbSAqcmVnKQo+ICt7Cj4gKwl1MzIg djsKPiArCj4gKwl2ID0gcmVhZGwocmVnKTsKPiArCXByX2VycigiUkVBREwoMzIpOiB2KCUwOFgp PC0tcmVnKCVwKVxuIiwgdiwgcmVnKTsKPiArCXJldHVybiB2Owo+ICt9Cj4gKyNlbHNlCj4gKyNk ZWZpbmUJazNfbmF2X2RiZyhkZXYsIGFyZy4uLikgZGV2X2RiZyhkZXYsIGFyZykKPiArI2RlZmlu ZSBkYmdfd3JpdGVsKHYsIHJlZykgd3JpdGVsKHYsIHJlZykKCkRvIHlvdSBuZWVkIHRvIHVzZSBo YXJkIHdyaXRlbCwgd3JpdGVsX3JlbGF4ZWQgaXMgbm90IGVub3VnaD8KCj4gKwo+ICsjZGVmaW5l IGRiZ19yZWFkbChyZWcpIHJlYWRsKHJlZykKClNhbWUgYXMgYWJvdmUgYnV0IGZvciByZWFkPwoK PiArI2VuZGlmCj4gKwo+ICsjZGVmaW5lIEszX1JJTkdBQ0NfQ0ZHX1JJTkdfU0laRV9FTENOVF9N QVNLCQlHRU5NQVNLKDE5LCAwKQo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCBrM19yaW5nX3J0X3Jl Z3MgLSAgVGhlIFJBIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVycyByZWdpb24KPiArICovCj4gK3N0 cnVjdCBrM19yaW5nX3J0X3JlZ3Mgewo+ICsJdTMyCXJlc3ZfMTZbNF07Cj4gKwl1MzIJZGI7CQkv KiBSVCBSaW5nIE4gRG9vcmJlbGwgUmVnaXN0ZXIgKi8KPiArCXUzMglyZXN2XzRbMV07Cj4gKwl1 MzIJb2NjOwkJLyogUlQgUmluZyBOIE9jY3VwYW5jeSBSZWdpc3RlciAqLwo+ICsJdTMyCWluZHg7 CQkvKiBSVCBSaW5nIE4gQ3VycmVudCBJbmRleCBSZWdpc3RlciAqLwo+ICsJdTMyCWh3b2NjOwkJ LyogUlQgUmluZyBOIEhhcmR3YXJlIE9jY3VwYW5jeSBSZWdpc3RlciAqLwo+ICsJdTMyCWh3aW5k eDsJCS8qIFJUIFJpbmcgTiBDdXJyZW50IEluZGV4IFJlZ2lzdGVyICovCj4gK307Cj4gKwo+ICsj ZGVmaW5lIEszX1JJTkdBQ0NfUlRfUkVHU19TVEVQCTB4MTAwMAo+ICsKPiArLyoqCj4gKyAqIHN0 cnVjdCBrM19yaW5nX2ZpZm9fcmVncyAtICBUaGUgUmluZyBBY2NlbGVyYXRvciBRdWV1ZXMgUmVn aXN0ZXJzIHJlZ2lvbgo+ICsgKi8KPiArc3RydWN0IGszX3JpbmdfZmlmb19yZWdzIHsKPiArCXUz MgloZWFkX2RhdGFbMTI4XTsJCS8qIFJpbmcgSGVhZCBFbnRyeSBEYXRhIFJlZ2lzdGVycyAqLwo+ ICsJdTMyCXRhaWxfZGF0YVsxMjhdOwkJLyogUmluZyBUYWlsIEVudHJ5IERhdGEgUmVnaXN0ZXJz ICovCj4gKwl1MzIJcGVla19oZWFkX2RhdGFbMTI4XTsJLyogUmluZyBQZWVrIEhlYWQgRW50cnkg RGF0YSBSZWdzICovCj4gKwl1MzIJcGVla190YWlsX2RhdGFbMTI4XTsJLyogUmluZyBQZWVrIFRh aWwgRW50cnkgRGF0YSBSZWdzICovCj4gK307Cj4gKwo+ICsvKioKPiArICogc3RydWN0IGszX3Jp bmdhY2NfcHJveHlfZ2NmZ19yZWdzIC0gUkEgUHJveHkgR2xvYmFsIENvbmZpZyBNTUlPIFJlZ2lv bgo+ICsgKi8KPiArc3RydWN0IGszX3JpbmdhY2NfcHJveHlfZ2NmZ19yZWdzIHsKPiArCXUzMgly ZXZpc2lvbjsJLyogUmV2aXNpb24gUmVnaXN0ZXIgKi8KPiArCXUzMgljb25maWc7CQkvKiBDb25m aWcgUmVnaXN0ZXIgKi8KPiArfTsKPiArCj4gKyNkZWZpbmUgSzNfUklOR0FDQ19QUk9YWV9DRkdf VEhSRUFEU19NQVNLCQlHRU5NQVNLKDE1LCAwKQo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCBrM19y aW5nYWNjX3Byb3h5X3RhcmdldF9yZWdzIC0gIFByb3h5IERhdGFwYXRoIE1NSU8gUmVnaW9uCj4g KyAqLwo+ICtzdHJ1Y3QgazNfcmluZ2FjY19wcm94eV90YXJnZXRfcmVncyB7Cj4gKwl1MzIJY29u dHJvbDsJLyogUHJveHkgQ29udHJvbCBSZWdpc3RlciAqLwo+ICsJdTMyCXN0YXR1czsJCS8qIFBy b3h5IFN0YXR1cyBSZWdpc3RlciAqLwo+ICsJdTgJcmVzdl81MTJbNTA0XTsKPiArCXUzMglkYXRh WzEyOF07CS8qIFByb3h5IERhdGEgUmVnaXN0ZXIgKi8KPiArfTsKPiArCj4gKyNkZWZpbmUgSzNf UklOR0FDQ19QUk9YWV9UQVJHRVRfU1RFUAkweDEwMDAKPiArI2RlZmluZSBLM19SSU5HQUNDX1BS T1hZX05PVF9VU0VECSgtMSkKPiArCj4gK2VudW0gazNfcmluZ2FjY19wcm94eV9hY2Nlc3NfbW9k ZSB7Cj4gKwlQUk9YWV9BQ0NFU1NfTU9ERV9IRUFEID0gMCwKPiArCVBST1hZX0FDQ0VTU19NT0RF X1RBSUwgPSAxLAo+ICsJUFJPWFlfQUNDRVNTX01PREVfUEVFS19IRUFEID0gMiwKPiArCVBST1hZ X0FDQ0VTU19NT0RFX1BFRUtfVEFJTCA9IDMsCj4gK307Cj4gKwo+ICsjZGVmaW5lIEszX1JJTkdB Q0NfRklGT19XSU5ET1dfU0laRV9CWVRFUyAgKDUxMlUpCj4gKyNkZWZpbmUgSzNfUklOR0FDQ19G SUZPX1JFR1NfU1RFUAkweDEwMDAKPiArI2RlZmluZSBLM19SSU5HQUNDX01BWF9EQl9SSU5HX0NO VCAgICAoMTI3VSkKPiArCj4gKy8qKgo+ICsgKiBzdHJ1Y3QgazNfcmluZ19vcHMgLSAgUmluZyBv cGVyYXRpb25zCj4gKyAqLwo+ICtzdHJ1Y3QgazNfcmluZ19vcHMgewo+ICsJaW50ICgqcHVzaF90 YWlsKShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxtKTsKPiArCWludCAoKnB1c2hfaGVh ZCkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsbSk7Cj4gKwlpbnQgKCpwb3BfdGFpbCko c3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsbSk7Cj4gKwlpbnQgKCpwb3BfaGVhZCkoc3Ry dWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsbSk7Cj4gK307Cj4gKwo+ICsvKioKPiArICogc3Ry dWN0IGszX3JpbmcgLSBSQSBSaW5nIGRlc2NyaXB0b3IKPiArICoKPiArICogQHJ0IC0gUmluZyBj b250cm9sL3N0YXR1cyByZWdpc3RlcnMKPiArICogQGZpZm9zIC0gUmluZyBxdWV1ZXMgcmVnaXN0 ZXJzCj4gKyAqIEBwcm94eSAtIFJpbmcgUHJveHkgRGF0YXBhdGggcmVnaXN0ZXJzCj4gKyAqIEBy aW5nX21lbV9kbWEgLSBSaW5nIGJ1ZmZlciBkbWEgYWRkcmVzcwo+ICsgKiBAcmluZ19tZW1fdmly dCAtIFJpbmcgYnVmZmVyIHZpcnQgYWRkcmVzcwo+ICsgKiBAb3BzIC0gUmluZyBvcGVyYXRpb25z Cj4gKyAqIEBzaXplIC0gUmluZyBzaXplIGluIGVsZW1lbnRzCj4gKyAqIEBlbG1fc2l6ZSAtIFNp emUgb2YgdGhlIHJpbmcgZWxlbWVudAo+ICsgKiBAbW9kZSAtIFJpbmcgbW9kZQo+ICsgKiBAZmxh Z3MgLSBmbGFncwo+ICsgKiBAZnJlZSAtIE51bWJlciBvZiBmcmVlIGVsZW1lbnRzCj4gKyAqIEBv Y2MgLSBSaW5nIG9jY3VwYW5jeQo+ICsgKiBAd2luZGV4IC0gV3JpdGUgaW5kZXggKG9ubHkgZm9y IEBLM19SSU5HQUNDX1JJTkdfTU9ERV9SSU5HKQo+ICsgKiBAcmluZGV4IC0gUmVhZCBpbmRleCAo b25seSBmb3IgQEszX1JJTkdBQ0NfUklOR19NT0RFX1JJTkcpCj4gKyAqIEByaW5nX2lkIC0gUmlu ZyBJZAo+ICsgKiBAcGFyZW50IC0gUG9pbnRlciBvbiBzdHJ1Y3QgQGszX3JpbmdhY2MKPiArICog QHVzZV9jb3VudCAtIFVzZSBjb3VudCBmb3Igc2hhcmVkIHJpbmdzCj4gKyAqIEBwcm94eV9pZCAt IFJBIFJpbmcgUHJveHkgSWQgKG9ubHkgaWYgQEszX1JJTkdBQ0NfUklOR19VU0VfUFJPWFkpCj4g KyAqLwo+ICtzdHJ1Y3QgazNfcmluZyB7Cj4gKwlzdHJ1Y3QgazNfcmluZ19ydF9yZWdzIF9faW9t ZW0gKnJ0Owo+ICsJc3RydWN0IGszX3JpbmdfZmlmb19yZWdzIF9faW9tZW0gKmZpZm9zOwo+ICsJ c3RydWN0IGszX3JpbmdhY2NfcHJveHlfdGFyZ2V0X3JlZ3MgIF9faW9tZW0gKnByb3h5Owo+ICsJ ZG1hX2FkZHJfdAlyaW5nX21lbV9kbWE7Cj4gKwl2b2lkCQkqcmluZ19tZW1fdmlydDsKPiArCXN0 cnVjdCBrM19yaW5nX29wcyAqb3BzOwo+ICsJdTMyCQlzaXplOwo+ICsJZW51bSBrM19yaW5nX3Np emUgZWxtX3NpemU7Cj4gKwllbnVtIGszX3JpbmdfbW9kZSBtb2RlOwo+ICsJdTMyCQlmbGFnczsK PiArI2RlZmluZSBLM19SSU5HX0ZMQUdfQlVTWQlCSVQoMSkKPiArI2RlZmluZSBLM19SSU5HX0ZM QUdfU0hBUkVECUJJVCgyKQo+ICsJdTMyCQlmcmVlOwo+ICsJdTMyCQlvY2M7Cj4gKwl1MzIJCXdp bmRleDsKPiArCXUzMgkJcmluZGV4Owo+ICsJdTMyCQlyaW5nX2lkOwo+ICsJc3RydWN0IGszX3Jp bmdhY2MJKnBhcmVudDsKPiArCXUzMgkJdXNlX2NvdW50Owo+ICsJaW50CQlwcm94eV9pZDsKPiAr fTsKPiArCj4gKy8qKgo+ICsgKiBzdHJ1Y3QgazNfcmluZ2FjYyAtIFJpbmdzIGFjY2VsZXJhdG9y IGRlc2NyaXB0b3IKPiArICoKPiArICogQGRldiAtIHBvaW50ZXIgb24gUkEgZGV2aWNlCj4gKyAq IEBwcm94eV9nY2ZnIC0gUkEgcHJveHkgZ2xvYmFsIGNvbmZpZyByZWdpc3RlcnMKPiArICogQHBy b3h5X3RhcmdldF9iYXNlIC0gUkEgcHJveHkgZGF0YXBhdGggcmVnaW9uCj4gKyAqIEBudW1fcmlu Z3MgLSBudW1iZXIgb2YgcmluZyBpbiBSQQo+ICsgKiBAcm1fZ3BfcmFuZ2UgLSBnZW5lcmFsIHB1 cnBvc2UgcmluZ3MgcmFuZ2UgZnJvbSB0aXNjaQo+ICsgKiBAZG1hX3JpbmdfcmVzZXRfcXVpcmsg LSBETUEgcmVzZXQgdy9hIGVuYWJsZQo+ICsgKiBAbnVtX3Byb3hpZXMgLSBudW1iZXIgb2YgUkEg cHJveGllcwo+ICsgKiBAcmluZ3MgLSBhcnJheSBvZiByaW5ncyBkZXNjcmlwdG9ycyAoc3RydWN0 IEBrM19yaW5nKQo+ICsgKiBAbGlzdCAtIGxpc3Qgb2YgUkFzIGluIHRoZSBzeXN0ZW0KPiArICog QHRpc2NpIC0gcG9pbnRlciB0aS1zY2kgaGFuZGxlCj4gKyAqIEB0aXNjaV9yaW5nX29wcyAtIHRp LXNjaSByaW5ncyBvcHMKPiArICogQHRpc2NpX2Rldl9pZCAtIHRpLXNjaSBkZXZpY2UgaWQKPiAr ICovCj4gK3N0cnVjdCBrM19yaW5nYWNjIHsKPiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPiArCXN0 cnVjdCBrM19yaW5nYWNjX3Byb3h5X2djZmdfcmVncyBfX2lvbWVtICpwcm94eV9nY2ZnOwo+ICsJ dm9pZCBfX2lvbWVtICpwcm94eV90YXJnZXRfYmFzZTsKPiArCXUzMiBudW1fcmluZ3M7IC8qIG51 bWJlciBvZiByaW5ncyBpbiBSaW5nYWNjIG1vZHVsZSAqLwo+ICsJdW5zaWduZWQgbG9uZyAqcmlu Z3NfaW51c2U7Cj4gKwlzdHJ1Y3QgdGlfc2NpX3Jlc291cmNlICpybV9ncF9yYW5nZTsKPiArCj4g Kwlib29sIGRtYV9yaW5nX3Jlc2V0X3F1aXJrOwo+ICsJdTMyIG51bV9wcm94aWVzOwo+ICsJdW5z aWduZWQgbG9uZyAqcHJveHlfaW51c2U7Cgpwcm94eV9pbnVzZSBpcyBub3QgZG9jdW1lbnRlZCBh Ym92ZS4KCj4gKwo+ICsJc3RydWN0IGszX3JpbmcgKnJpbmdzOwo+ICsJc3RydWN0IGxpc3RfaGVh ZCBsaXN0Owo+ICsJc3RydWN0IG11dGV4IHJlcV9sb2NrOyAvKiBwcm90ZWN0IHJpbmdzIGFsbG9j YXRpb24gKi8KPiArCj4gKwljb25zdCBzdHJ1Y3QgdGlfc2NpX2hhbmRsZSAqdGlzY2k7Cj4gKwlj b25zdCBzdHJ1Y3QgdGlfc2NpX3JtX3JpbmdhY2Nfb3BzICp0aXNjaV9yaW5nX29wczsKPiArCXUz MiAgdGlzY2lfZGV2X2lkOwo+ICt9Owo+ICsKPiArc3RhdGljIGxvbmcgazNfcmluZ2FjY19yaW5n X2dldF9maWZvX3BvcyhzdHJ1Y3QgazNfcmluZyAqcmluZykKPiArewo+ICsJcmV0dXJuIEszX1JJ TkdBQ0NfRklGT19XSU5ET1dfU0laRV9CWVRFUyAtCj4gKwkgICAgICAgKDQgPDwgcmluZy0+ZWxt X3NpemUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCAqazNfcmluZ2FjY19nZXRfZWxtX2FkZHIo c3RydWN0IGszX3JpbmcgKnJpbmcsIHUzMiBpZHgpCj4gK3sKPiArCXJldHVybiAoaWR4ICogKDQg PDwgcmluZy0+ZWxtX3NpemUpICsgcmluZy0+cmluZ19tZW1fdmlydCk7CgpUaGUgYXJpdGhtZXRp YyBoZXJlIHNlZW1zIGJhY2t3YXJkcyBjb21wYXJlZCB0byBtb3N0IG90aGVyIGNvZGUgSSd2ZSAK c2Vlbi4gSXQgd291bGQgYmUgbW9yZSByZWFkYWJsZSBpZiB5b3UgaGF2ZSBpdCBsaWtlOgoKcmlu Zy0+cmluZ19tZW1fdmlydCArIGlkeCAqICg0IDw8IHJpbmctPmVsbV9zaXplKTsKCj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hfbWVtKHN0cnVjdCBrM19yaW5nICpy aW5nLCB2b2lkICplbGVtKTsKPiArc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcG9wX21lbShz dHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGsz X3Jpbmdfb3BzIGszX3JpbmdfbW9kZV9yaW5nX29wcyA9IHsKPiArCQkucHVzaF90YWlsID0gazNf cmluZ2FjY19yaW5nX3B1c2hfbWVtLAo+ICsJCS5wb3BfaGVhZCA9IGszX3JpbmdhY2NfcmluZ19w b3BfbWVtLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcHVzaF9pbyhz dHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7Cj4gK3N0YXRpYyBpbnQgazNfcmluZ2Fj Y19yaW5nX3BvcF9pbyhzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7Cj4gK3N0YXRp YyBpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hfaGVhZF9pbyhzdHJ1Y3QgazNfcmluZyAqcmluZywg dm9pZCAqZWxlbSk7Cj4gK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3BvcF90YWlsX2lvKHN0 cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgazNf cmluZ19vcHMgazNfcmluZ19tb2RlX21zZ19vcHMgPSB7Cj4gKwkJLnB1c2hfdGFpbCA9IGszX3Jp bmdhY2NfcmluZ19wdXNoX2lvLAo+ICsJCS5wdXNoX2hlYWQgPSBrM19yaW5nYWNjX3JpbmdfcHVz aF9oZWFkX2lvLAo+ICsJCS5wb3BfdGFpbCA9IGszX3JpbmdhY2NfcmluZ19wb3BfdGFpbF9pbywK PiArCQkucG9wX2hlYWQgPSBrM19yaW5nYWNjX3JpbmdfcG9wX2lvLAo+ICt9Owo+ICsKPiArc3Rh dGljIGludCBrM19yaW5nYWNjX3JpbmdfcHVzaF9oZWFkX3Byb3h5KHN0cnVjdCBrM19yaW5nICpy aW5nLCB2b2lkICplbGVtKTsKPiArc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcHVzaF90YWls X3Byb3h5KHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKTsKPiArc3RhdGljIGludCBr M19yaW5nYWNjX3JpbmdfcG9wX2hlYWRfcHJveHkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQg KmVsZW0pOwo+ICtzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wb3BfdGFpbF9wcm94eShzdHJ1 Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGszX3Jp bmdfb3BzIGszX3JpbmdfbW9kZV9wcm94eV9vcHMgPSB7Cj4gKwkJLnB1c2hfdGFpbCA9IGszX3Jp bmdhY2NfcmluZ19wdXNoX3RhaWxfcHJveHksCj4gKwkJLnB1c2hfaGVhZCA9IGszX3JpbmdhY2Nf cmluZ19wdXNoX2hlYWRfcHJveHksCj4gKwkJLnBvcF90YWlsID0gazNfcmluZ2FjY19yaW5nX3Bv cF90YWlsX3Byb3h5LAo+ICsJCS5wb3BfaGVhZCA9IGszX3JpbmdhY2NfcmluZ19wb3BfaGVhZF9w cm94eSwKPiArfTsKPiArCj4gKyNpZmRlZiBDT05GSUdfVElfSzNfUklOR0FDQ19ERUJVRwo+ICt2 b2lkIGszX3JpbmdhY2NfcmluZ19kdW1wKHN0cnVjdCBrM19yaW5nICpyaW5nKQo+ICt7Cj4gKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSByaW5nLT5wYXJlbnQtPmRldjsKPiArCj4gKwlrM19uYXZfZGJn KGRldiwgImR1bXAgcmluZzogJWRcbiIsIHJpbmctPnJpbmdfaWQpOwo+ICsJazNfbmF2X2RiZyhk ZXYsICJkdW1wIG1lbSB2aXJ0ICVwLCBkbWEgJXBhZFxuIiwKPiArCQkgICByaW5nLT5yaW5nX21l bV92aXJ0LCAmcmluZy0+cmluZ19tZW1fZG1hKTsKPiArCWszX25hdl9kYmcoZGV2LCAiZHVtcCBl bG1zaXplICVkLCBzaXplICVkLCBtb2RlICVkLCBwcm94eV9pZCAlZFxuIiwKPiArCQkgICByaW5n LT5lbG1fc2l6ZSwgcmluZy0+c2l6ZSwgcmluZy0+bW9kZSwgcmluZy0+cHJveHlfaWQpOwo+ICsK PiArCWszX25hdl9kYmcoZGV2LCAiZHVtcCByaW5nX3J0X3JlZ3M6IGRiJTA4eFxuIiwKPiArCQkg ICByZWFkbCgmcmluZy0+cnQtPmRiKSk7CgpXaHkgbm90IHVzZSByZWFkbF9yZWxheGVkIGluIHRo aXMgZnVuYz8KCj4gKwlrM19uYXZfZGJnKGRldiwgImR1bXAgb2NjJTA4eFxuIiwKPiArCQkgICBy ZWFkbCgmcmluZy0+cnQtPm9jYykpOwo+ICsJazNfbmF2X2RiZyhkZXYsICJkdW1wIGluZHglMDh4 XG4iLAo+ICsJCSAgIHJlYWRsKCZyaW5nLT5ydC0+aW5keCkpOwo+ICsJazNfbmF2X2RiZyhkZXYs ICJkdW1wIGh3b2NjJTA4eFxuIiwKPiArCQkgICByZWFkbCgmcmluZy0+cnQtPmh3b2NjKSk7Cj4g KwlrM19uYXZfZGJnKGRldiwgImR1bXAgaHdpbmR4JTA4eFxuIiwKPiArCQkgICByZWFkbCgmcmlu Zy0+cnQtPmh3aW5keCkpOwo+ICsKPiArCWlmIChyaW5nLT5yaW5nX21lbV92aXJ0KQo+ICsJCXBy aW50X2hleF9kdW1wKEtFUk5fRVJSLCAiZHVtcCByaW5nX21lbV92aXJ0ICIsCj4gKwkJCSAgICAg ICBEVU1QX1BSRUZJWF9OT05FLCAxNiwgMSwKPiArCQkJICAgICAgIHJpbmctPnJpbmdfbWVtX3Zp cnQsIDE2ICogOCwgZmFsc2UpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2Nf cmluZ19kdW1wKTsKCkRvIHlvdSByZWFsbHkgbmVlZCB0byBleHBvcnQgYSBkZWJ1ZyBmdW5jdGlv bj8KCj4gKyNlbmRpZgo+ICsKPiArc3RydWN0IGszX3JpbmcgKmszX3JpbmdhY2NfcmVxdWVzdF9y aW5nKHN0cnVjdCBrM19yaW5nYWNjICpyaW5nYWNjLAo+ICsJCQkJCWludCBpZCwgdTMyIGZsYWdz KQo+ICt7Cj4gKwlpbnQgcHJveHlfaWQgPSBLM19SSU5HQUNDX1BST1hZX05PVF9VU0VEOwo+ICsK PiArCW11dGV4X2xvY2soJnJpbmdhY2MtPnJlcV9sb2NrKTsKPiArCj4gKwlpZiAoaWQgPT0gSzNf UklOR0FDQ19SSU5HX0lEX0FOWSkgewo+ICsJCS8qIFJlcXVlc3QgZm9yIGFueSBnZW5lcmFsIHB1 cnBvc2UgcmluZyAqLwo+ICsJCXN0cnVjdCB0aV9zY2lfcmVzb3VyY2VfZGVzYyAqZ3BfcmluZ3Mg PQo+ICsJCQkJCQkmcmluZ2FjYy0+cm1fZ3BfcmFuZ2UtPmRlc2NbMF07Cj4gKwkJdW5zaWduZWQg bG9uZyBzaXplOwo+ICsKPiArCQlzaXplID0gZ3BfcmluZ3MtPnN0YXJ0ICsgZ3BfcmluZ3MtPm51 bTsKPiArCQlpZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChyaW5nYWNjLT5yaW5nc19pbnVzZSwgc2l6 ZSwKPiArCQkJCQlncF9yaW5ncy0+c3RhcnQpOwo+ICsJCWlmIChpZCA9PSBzaXplKQo+ICsJCQln b3RvIGVycm9yOwo+ICsJfSBlbHNlIGlmIChpZCA8IDApIHsKPiArCQlnb3RvIGVycm9yOwo+ICsJ fQo+ICsKPiArCWlmICh0ZXN0X2JpdChpZCwgcmluZ2FjYy0+cmluZ3NfaW51c2UpICYmCj4gKwkg ICAgIShyaW5nYWNjLT5yaW5nc1tpZF0uZmxhZ3MgJiBLM19SSU5HX0ZMQUdfU0hBUkVEKSkKPiAr CQlnb3RvIGVycm9yOwo+ICsJZWxzZSBpZiAocmluZ2FjYy0+cmluZ3NbaWRdLmZsYWdzICYgSzNf UklOR19GTEFHX1NIQVJFRCkKPiArCQlnb3RvIG91dDsKPiArCj4gKwlpZiAoZmxhZ3MgJiBLM19S SU5HQUNDX1JJTkdfVVNFX1BST1hZKSB7Cj4gKwkJcHJveHlfaWQgPSBmaW5kX25leHRfemVyb19i aXQocmluZ2FjYy0+cHJveHlfaW51c2UsCj4gKwkJCQkJICAgICAgcmluZ2FjYy0+bnVtX3Byb3hp ZXMsIDApOwo+ICsJCWlmIChwcm94eV9pZCA9PSByaW5nYWNjLT5udW1fcHJveGllcykKPiArCQkJ Z290byBlcnJvcjsKPiArCX0KPiArCj4gKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KHJpbmdhY2MtPmRl di0+ZHJpdmVyLT5vd25lcikpCj4gKwkJZ290byBlcnJvcjsKPiArCj4gKwlpZiAocHJveHlfaWQg IT0gSzNfUklOR0FDQ19QUk9YWV9OT1RfVVNFRCkgewo+ICsJCXNldF9iaXQocHJveHlfaWQsIHJp bmdhY2MtPnByb3h5X2ludXNlKTsKPiArCQlyaW5nYWNjLT5yaW5nc1tpZF0ucHJveHlfaWQgPSBw cm94eV9pZDsKPiArCQlrM19uYXZfZGJnKHJpbmdhY2MtPmRldiwgIkdpdmluZyByaW5nIyVkIHBy b3h5IyVkXG4iLAo+ICsJCQkgICBpZCwgcHJveHlfaWQpOwo+ICsJfSBlbHNlIHsKPiArCQlrM19u YXZfZGJnKHJpbmdhY2MtPmRldiwgIkdpdmluZyByaW5nIyVkXG4iLCBpZCk7Cj4gKwl9Cj4gKwo+ ICsJc2V0X2JpdChpZCwgcmluZ2FjYy0+cmluZ3NfaW51c2UpOwo+ICtvdXQ6Cj4gKwlyaW5nYWNj LT5yaW5nc1tpZF0udXNlX2NvdW50Kys7Cj4gKwltdXRleF91bmxvY2soJnJpbmdhY2MtPnJlcV9s b2NrKTsKPiArCXJldHVybiAmcmluZ2FjYy0+cmluZ3NbaWRdOwo+ICsKPiArZXJyb3I6Cj4gKwlt dXRleF91bmxvY2soJnJpbmdhY2MtPnJlcV9sb2NrKTsKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4g K0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfcmVxdWVzdF9yaW5nKTsKPiArCj4gK3N0YXRp YyB2b2lkIGszX3JpbmdhY2NfcmluZ19yZXNldF9zY2koc3RydWN0IGszX3JpbmcgKnJpbmcpCj4g K3sKPiArCXN0cnVjdCBrM19yaW5nYWNjICpyaW5nYWNjID0gcmluZy0+cGFyZW50Owo+ICsJaW50 IHJldDsKPiArCj4gKwlyZXQgPSByaW5nYWNjLT50aXNjaV9yaW5nX29wcy0+Y29uZmlnKAo+ICsJ CQlyaW5nYWNjLT50aXNjaSwKPiArCQkJVElfU0NJX01TR19WQUxVRV9STV9SSU5HX0NPVU5UX1ZB TElELAo+ICsJCQlyaW5nYWNjLT50aXNjaV9kZXZfaWQsCj4gKwkJCXJpbmctPnJpbmdfaWQsCj4g KwkJCTAsCj4gKwkJCTAsCj4gKwkJCXJpbmctPnNpemUsCj4gKwkJCTAsCj4gKwkJCTAsCj4gKwkJ CTApOwo+ICsJaWYgKHJldCkKPiArCQlkZXZfZXJyKHJpbmdhY2MtPmRldiwgIlRJU0NJIHJlc2V0 IHJpbmcgZmFpbCAoJWQpIHJpbmdfaWR4ICVkXG4iLAo+ICsJCQlyZXQsIHJpbmctPnJpbmdfaWQp OwoKUmV0dXJuIHZhbHVlIG9mIHNjaSBvcHMgaXMgbWFza2VkLCB3aHkgbm90IHJldHVybiBpdCBh bmQgbGV0IHRoZSBjYWxsZXIgCmhhbmRsZSBpdCBwcm9wZXJseT8KClNhbWUgY29tbWVudCBmb3Ig YW55dGhpbmcgc2ltaWxhciB0aGF0IGZvbGxvd3MuCgo+ICt9Cj4gKwo+ICt2b2lkIGszX3Jpbmdh Y2NfcmluZ19yZXNldChzdHJ1Y3QgazNfcmluZyAqcmluZykKPiArewo+ICsJaWYgKCFyaW5nIHx8 ICEocmluZy0+ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkpCj4gKwkJcmV0dXJuOwo+ICsKPiAr CXJpbmctPm9jYyA9IDA7Cj4gKwlyaW5nLT5mcmVlID0gMDsKPiArCXJpbmctPnJpbmRleCA9IDA7 Cj4gKwlyaW5nLT53aW5kZXggPSAwOwo+ICsKPiArCWszX3JpbmdhY2NfcmluZ19yZXNldF9zY2ko cmluZyk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwoazNfcmluZ2FjY19yaW5nX3Jlc2V0KTsK PiArCj4gK3N0YXRpYyB2b2lkIGszX3JpbmdhY2NfcmluZ19yZWNvbmZpZ19xbW9kZV9zY2koc3Ry dWN0IGszX3JpbmcgKnJpbmcsCj4gKwkJCQkJICAgICAgIGVudW0gazNfcmluZ19tb2RlIG1vZGUp Cj4gK3sKPiArCXN0cnVjdCBrM19yaW5nYWNjICpyaW5nYWNjID0gcmluZy0+cGFyZW50Owo+ICsJ aW50IHJldDsKPiArCj4gKwlyZXQgPSByaW5nYWNjLT50aXNjaV9yaW5nX29wcy0+Y29uZmlnKAo+ ICsJCQlyaW5nYWNjLT50aXNjaSwKPiArCQkJVElfU0NJX01TR19WQUxVRV9STV9SSU5HX01PREVf VkFMSUQsCj4gKwkJCXJpbmdhY2MtPnRpc2NpX2Rldl9pZCwKPiArCQkJcmluZy0+cmluZ19pZCwK PiArCQkJMCwKPiArCQkJMCwKPiArCQkJMCwKPiArCQkJbW9kZSwKPiArCQkJMCwKPiArCQkJMCk7 Cj4gKwlpZiAocmV0KQo+ICsJCWRldl9lcnIocmluZ2FjYy0+ZGV2LCAiVElTQ0kgcmVjb25mIHFt b2RlIGZhaWwgKCVkKSByaW5nX2lkeCAlZFxuIiwKPiArCQkJcmV0LCByaW5nLT5yaW5nX2lkKTsK Pit9Cj4gKwo+ICt2b2lkIGszX3JpbmdhY2NfcmluZ19yZXNldF9kbWEoc3RydWN0IGszX3Jpbmcg KnJpbmcsIHUzMiBvY2MpCj4gK3sKPiArCWlmICghcmluZyB8fCAhKHJpbmctPmZsYWdzICYgSzNf UklOR19GTEFHX0JVU1kpKQo+ICsJCXJldHVybjsKPiArCj4gKwlpZiAoIXJpbmctPnBhcmVudC0+ ZG1hX3JpbmdfcmVzZXRfcXVpcmspCj4gKwkJcmV0dXJuOwo+ICsKPiArCWlmICghb2NjKQo+ICsJ CW9jYyA9IGRiZ19yZWFkbCgmcmluZy0+cnQtPm9jYyk7Cj4gKwo+ICsJaWYgKG9jYykgewo+ICsJ CXUzMiBkYl9yaW5nX2NudCwgZGJfcmluZ19jbnRfY3VyOwo+ICsKPiArCQlrM19uYXZfZGJnKHJp bmctPnBhcmVudC0+ZGV2LCAiJXMgJXUgb2NjOiAldVxuIiwgX19mdW5jX18sCj4gKwkJCSAgIHJp bmctPnJpbmdfaWQsIG9jYyk7Cj4gKwkJLyogMi4gUmVzZXQgdGhlIHJpbmcgKi8KCjI/IFdoZXJl IGlzIDE/Cgo+ICsJCWszX3JpbmdhY2NfcmluZ19yZXNldF9zY2kocmluZyk7Cj4gKwo+ICsJCS8q Cj4gKwkJICogMy4gU2V0dXAgdGhlIHJpbmcgaW4gcmluZy9kb29yYmVsbCBtb2RlCj4gKwkJICog KGlmIG5vdCBhbHJlYWR5IGluIHRoaXMgbW9kZSkKPiArCQkgKi8KPiArCQlpZiAocmluZy0+bW9k ZSAhPSBLM19SSU5HQUNDX1JJTkdfTU9ERV9SSU5HKQo+ICsJCQlrM19yaW5nYWNjX3JpbmdfcmVj b25maWdfcW1vZGVfc2NpKAo+ICsJCQkJCXJpbmcsIEszX1JJTkdBQ0NfUklOR19NT0RFX1JJTkcp Owo+ICsJCS8qCj4gKwkJICogNC4gUmluZyB0aGUgZG9vcmJlbGwgMioqMjIg4oCTIHJpbmdPY2Mg dGltZXMuCj4gKwkJICogVGhpcyB3aWxsIHdyYXAgdGhlIGludGVybmFsIFVETUFQIHJpbmcgc3Rh dGUgb2NjdXBhbmN5Cj4gKwkJICogY291bnRlciAod2hpY2ggaXMgMjEtYml0cyB3aWRlKSB0byAw Lgo+ICsJCSAqLwo+ICsJCWRiX3JpbmdfY250ID0gKDFVIDw8IDIyKSAtIG9jYzsKPiArCj4gKwkJ d2hpbGUgKGRiX3JpbmdfY250ICE9IDApIHsKPiArCQkJLyoKPiArCQkJICogUmluZyB0aGUgZG9v cmJlbGwgd2l0aCB0aGUgbWF4aW11bSBjb3VudCBlYWNoCj4gKwkJCSAqIGl0ZXJhdGlvbiBpZiBw b3NzaWJsZSB0byBtaW5pbWl6ZSB0aGUgdG90YWwKPiArCQkJICogb2Ygd3JpdGVzCj4gKwkJCSAq Lwo+ICsJCQlpZiAoZGJfcmluZ19jbnQgPiBLM19SSU5HQUNDX01BWF9EQl9SSU5HX0NOVCkKPiAr CQkJCWRiX3JpbmdfY250X2N1ciA9IEszX1JJTkdBQ0NfTUFYX0RCX1JJTkdfQ05UOwo+ICsJCQll bHNlCj4gKwkJCQlkYl9yaW5nX2NudF9jdXIgPSBkYl9yaW5nX2NudDsKPiArCj4gKwkJCXdyaXRl bChkYl9yaW5nX2NudF9jdXIsICZyaW5nLT5ydC0+ZGIpOwo+ICsJCQlkYl9yaW5nX2NudCAtPSBk Yl9yaW5nX2NudF9jdXI7Cj4gKwkJfQo+ICsKPiArCQkvKiA1LiBSZXN0b3JlIHRoZSBvcmlnaW5h bCByaW5nIG1vZGUgKGlmIG5vdCByaW5nIG1vZGUpICovCj4gKwkJaWYgKHJpbmctPm1vZGUgIT0g SzNfUklOR0FDQ19SSU5HX01PREVfUklORykKPiArCQkJazNfcmluZ2FjY19yaW5nX3JlY29uZmln X3Ftb2RlX3NjaShyaW5nLCByaW5nLT5tb2RlKTsKPiArCX0KPiArCj4gKwkvKiAyLiBSZXNldCB0 aGUgcmluZyAqLwoKQWdhaW4gMj8KCj4gKwlrM19yaW5nYWNjX3JpbmdfcmVzZXQocmluZyk7Cj4g K30KPiArRVhQT1JUX1NZTUJPTF9HUEwoazNfcmluZ2FjY19yaW5nX3Jlc2V0X2RtYSk7Cj4gKwo+ ICtzdGF0aWMgdm9pZCBrM19yaW5nYWNjX3JpbmdfZnJlZV9zY2koc3RydWN0IGszX3JpbmcgKnJp bmcpCj4gK3sKPiArCXN0cnVjdCBrM19yaW5nYWNjICpyaW5nYWNjID0gcmluZy0+cGFyZW50Owo+ ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSByaW5nYWNjLT50aXNjaV9yaW5nX29wcy0+Y29uZmln KAo+ICsJCQlyaW5nYWNjLT50aXNjaSwKPiArCQkJVElfU0NJX01TR19WQUxVRV9STV9BTExfTk9f T1JERVIsCj4gKwkJCXJpbmdhY2MtPnRpc2NpX2Rldl9pZCwKPiArCQkJcmluZy0+cmluZ19pZCwK PiArCQkJMCwKPiArCQkJMCwKPiArCQkJMCwKPiArCQkJMCwKPiArCQkJMCwKPiArCQkJMCk7Cj4g KwlpZiAocmV0KQo+ICsJCWRldl9lcnIocmluZ2FjYy0+ZGV2LCAiVElTQ0kgcmluZyBmcmVlIGZh aWwgKCVkKSByaW5nX2lkeCAlZFxuIiwKPiArCQkJcmV0LCByaW5nLT5yaW5nX2lkKTsKPiArfQo+ ICsKPiAraW50IGszX3JpbmdhY2NfcmluZ19mcmVlKHN0cnVjdCBrM19yaW5nICpyaW5nKQo+ICt7 Cj4gKwlzdHJ1Y3QgazNfcmluZ2FjYyAqcmluZ2FjYzsKPiArCj4gKwlpZiAoIXJpbmcpCj4gKwkJ cmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJcmluZ2FjYyA9IHJpbmctPnBhcmVudDsKPiArCj4gKwlr M19uYXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LCAiZmxhZ3M6IDB4JTA4eFxuIiwgcmluZy0+Zmxh Z3MpOwo+ICsKPiArCWlmICghdGVzdF9iaXQocmluZy0+cmluZ19pZCwgcmluZ2FjYy0+cmluZ3Nf aW51c2UpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCW11dGV4X2xvY2soJnJpbmdhY2Mt PnJlcV9sb2NrKTsKPiArCj4gKwlpZiAoLS1yaW5nLT51c2VfY291bnQpCj4gKwkJZ290byBvdXQ7 Cj4gKwo+ICsJaWYgKCEocmluZy0+ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkpCj4gKwkJZ290 byBub19pbml0Owo+ICsKPiArCWszX3JpbmdhY2NfcmluZ19mcmVlX3NjaShyaW5nKTsKPiArCj4g KwlkbWFfZnJlZV9jb2hlcmVudChyaW5nYWNjLT5kZXYsCj4gKwkJCSAgcmluZy0+c2l6ZSAqICg0 IDw8IHJpbmctPmVsbV9zaXplKSwKPiArCQkJICByaW5nLT5yaW5nX21lbV92aXJ0LCByaW5nLT5y aW5nX21lbV9kbWEpOwo+ICsJcmluZy0+ZmxhZ3MgPSAwOwo+ICsJcmluZy0+b3BzID0gTlVMTDsK PiArCWlmIChyaW5nLT5wcm94eV9pZCAhPSBLM19SSU5HQUNDX1BST1hZX05PVF9VU0VEKSB7Cj4g KwkJY2xlYXJfYml0KHJpbmctPnByb3h5X2lkLCByaW5nYWNjLT5wcm94eV9pbnVzZSk7Cj4gKwkJ cmluZy0+cHJveHkgPSBOVUxMOwo+ICsJCXJpbmctPnByb3h5X2lkID0gSzNfUklOR0FDQ19QUk9Y WV9OT1RfVVNFRDsKPiArCX0KPiArCj4gK25vX2luaXQ6Cj4gKwljbGVhcl9iaXQocmluZy0+cmlu Z19pZCwgcmluZ2FjYy0+cmluZ3NfaW51c2UpOwo+ICsKPiArCW1vZHVsZV9wdXQocmluZ2FjYy0+ ZGV2LT5kcml2ZXItPm93bmVyKTsKPiArCj4gK291dDoKPiArCW11dGV4X3VubG9jaygmcmluZ2Fj Yy0+cmVxX2xvY2spOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwoazNf cmluZ2FjY19yaW5nX2ZyZWUpOwo+ICsKPiArdTMyIGszX3JpbmdhY2NfZ2V0X3JpbmdfaWQoc3Ry dWN0IGszX3JpbmcgKnJpbmcpCj4gK3sKPiArCWlmICghcmluZykKPiArCQlyZXR1cm4gLUVJTlZB TDsKPiArCj4gKwlyZXR1cm4gcmluZy0+cmluZ19pZDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQ TChrM19yaW5nYWNjX2dldF9yaW5nX2lkKTsKPiArCj4gK3UzMiBrM19yaW5nYWNjX2dldF90aXNj aV9kZXZfaWQoc3RydWN0IGszX3JpbmcgKnJpbmcpCj4gK3sKPiArCWlmICghcmluZykKPiArCQly ZXR1cm4gLUVJTlZBTDsKPiArCgpXaGF0IGlmIHBhcmVudCBpcyBOVUxMPyBDYW4gaXQgZXZlciBi ZSBoZXJlPwoKPiArCXJldHVybiByaW5nLT5wYXJlbnQtPnRpc2NpX2Rldl9pZDsKPiArfQo+ICtF WFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX2dldF90aXNjaV9kZXZfaWQpOwo+ICsKPiAraW50 IGszX3JpbmdhY2NfZ2V0X3JpbmdfaXJxX251bShzdHJ1Y3QgazNfcmluZyAqcmluZykKPiArewo+ ICsJaW50IGlycV9udW07Cj4gKwo+ICsJaWYgKCFyaW5nKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ ICsKPiArCWlycV9udW0gPSB0aV9zY2lfaW50YV9tc2lfZ2V0X3ZpcnEocmluZy0+cGFyZW50LT5k ZXYsIHJpbmctPnJpbmdfaWQpOwo+ICsJaWYgKGlycV9udW0gPD0gMCkKPiArCQlpcnFfbnVtID0g LUVJTlZBTDsKPiArCXJldHVybiBpcnFfbnVtOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGsz X3JpbmdhY2NfZ2V0X3JpbmdfaXJxX251bSk7Cj4gKwo+ICtzdGF0aWMgaW50IGszX3JpbmdhY2Nf cmluZ19jZmdfc2NpKHN0cnVjdCBrM19yaW5nICpyaW5nKQo+ICt7Cj4gKwlzdHJ1Y3QgazNfcmlu Z2FjYyAqcmluZ2FjYyA9IHJpbmctPnBhcmVudDsKPiArCXUzMiByaW5nX2lkeDsKPiArCWludCBy ZXQ7Cj4gKwo+ICsJaWYgKCFyaW5nYWNjLT50aXNjaSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiAr Cj4gKwlyaW5nX2lkeCA9IHJpbmctPnJpbmdfaWQ7Cj4gKwlyZXQgPSByaW5nYWNjLT50aXNjaV9y aW5nX29wcy0+Y29uZmlnKAo+ICsJCQlyaW5nYWNjLT50aXNjaSwKPiArCQkJVElfU0NJX01TR19W QUxVRV9STV9BTExfTk9fT1JERVIsCj4gKwkJCXJpbmdhY2MtPnRpc2NpX2Rldl9pZCwKPiArCQkJ cmluZ19pZHgsCj4gKwkJCWxvd2VyXzMyX2JpdHMocmluZy0+cmluZ19tZW1fZG1hKSwKPiArCQkJ dXBwZXJfMzJfYml0cyhyaW5nLT5yaW5nX21lbV9kbWEpLAo+ICsJCQlyaW5nLT5zaXplLAo+ICsJ CQlyaW5nLT5tb2RlLAo+ICsJCQlyaW5nLT5lbG1fc2l6ZSwKPiArCQkJMCk7Cj4gKwlpZiAocmV0 KQo+ICsJCWRldl9lcnIocmluZ2FjYy0+ZGV2LCAiVElTQ0kgY29uZmlnIHJpbmcgZmFpbCAoJWQp IHJpbmdfaWR4ICVkXG4iLAo+ICsJCQlyZXQsIHJpbmdfaWR4KTsKPiArCj4gKwlyZXR1cm4gcmV0 Owo+ICt9Cj4gKwo+ICtpbnQgazNfcmluZ2FjY19yaW5nX2NmZyhzdHJ1Y3QgazNfcmluZyAqcmlu Zywgc3RydWN0IGszX3JpbmdfY2ZnICpjZmcpCj4gK3sKPiArCXN0cnVjdCBrM19yaW5nYWNjICpy aW5nYWNjID0gcmluZy0+cGFyZW50Owo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJaWYgKCFyaW5n IHx8ICFjZmcpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwlpZiAoY2ZnLT5lbG1fc2l6ZSA+IEsz X1JJTkdBQ0NfUklOR19FTFNJWkVfMjU2IHx8Cj4gKwkgICAgY2ZnLT5tb2RlID4gSzNfUklOR0FD Q19SSU5HX01PREVfUU0gfHwKPiArCSAgICBjZmctPnNpemUgJiB+SzNfUklOR0FDQ19DRkdfUklO R19TSVpFX0VMQ05UX01BU0sgfHwKPiArCSAgICAhdGVzdF9iaXQocmluZy0+cmluZ19pZCwgcmlu Z2FjYy0+cmluZ3NfaW51c2UpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWlmIChyaW5n LT51c2VfY291bnQgIT0gMSkKCkhtbSwgaXNuJ3QgdGhpcyBhIGZhaWx1cmUgYWN0dWFsbHk/Cgo+ ICsJCXJldHVybiAwOwo+ICsKPiArCXJpbmctPnNpemUgPSBjZmctPnNpemU7Cj4gKwlyaW5nLT5l bG1fc2l6ZSA9IGNmZy0+ZWxtX3NpemU7Cj4gKwlyaW5nLT5tb2RlID0gY2ZnLT5tb2RlOwo+ICsJ cmluZy0+b2NjID0gMDsKPiArCXJpbmctPmZyZWUgPSAwOwo+ICsJcmluZy0+cmluZGV4ID0gMDsK PiArCXJpbmctPndpbmRleCA9IDA7Cj4gKwo+ICsJaWYgKHJpbmctPnByb3h5X2lkICE9IEszX1JJ TkdBQ0NfUFJPWFlfTk9UX1VTRUQpCj4gKwkJcmluZy0+cHJveHkgPSByaW5nYWNjLT5wcm94eV90 YXJnZXRfYmFzZSArCj4gKwkJCSAgICAgIHJpbmctPnByb3h5X2lkICogSzNfUklOR0FDQ19QUk9Y WV9UQVJHRVRfU1RFUDsKPiArCj4gKwlzd2l0Y2ggKHJpbmctPm1vZGUpIHsKPiArCWNhc2UgSzNf UklOR0FDQ19SSU5HX01PREVfUklORzoKPiArCQlyaW5nLT5vcHMgPSAmazNfcmluZ19tb2RlX3Jp bmdfb3BzOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBLM19SSU5HQUNDX1JJTkdfTU9ERV9RTToKPiAr CQkvKgo+ICsJCSAqIEluIFF1ZXVlIG1vZGUgZWxtX3NpemUgY2FuIGJlIDggb25seSBhbmQgZWFj aCBvcGVyYXRpb24KPiArCQkgKiB1c2VzIDIgZWxlbWVudCBzbG90cwo+ICsJCSAqLwo+ICsJCWlm IChjZmctPmVsbV9zaXplICE9IEszX1JJTkdBQ0NfUklOR19FTFNJWkVfOCB8fAo+ICsJCSAgICBj ZmctPnNpemUgJSAyKQo+ICsJCQlnb3RvIGVycl9mcmVlX3Byb3h5Owo+ICsJCS8qIGVsc2UsIGZh bGwgdGhyb3VnaCAqLwo+ICsJY2FzZSBLM19SSU5HQUNDX1JJTkdfTU9ERV9NRVNTQUdFOgo+ICsJ CWlmIChyaW5nLT5wcm94eSkKPiArCQkJcmluZy0+b3BzID0gJmszX3JpbmdfbW9kZV9wcm94eV9v cHM7Cj4gKwkJZWxzZQo+ICsJCQlyaW5nLT5vcHMgPSAmazNfcmluZ19tb2RlX21zZ19vcHM7Cj4g KwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCXJpbmctPm9wcyA9IE5VTEw7Cj4gKwkJcmV0ID0g LUVJTlZBTDsKPiArCQlnb3RvIGVycl9mcmVlX3Byb3h5Owo+ICsJfTsKPiArCj4gKwlyaW5nLT5y aW5nX21lbV92aXJ0ID0KPiArCQkJZG1hX2FsbG9jX2NvaGVyZW50KHJpbmdhY2MtPmRldiwKPiAr CQkJCQkgICByaW5nLT5zaXplICogKDQgPDwgcmluZy0+ZWxtX3NpemUpLAo+ICsJCQkJCSAgICZy aW5nLT5yaW5nX21lbV9kbWEsIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFyaW5nLT5yaW5nX21lbV92 aXJ0KSB7Cj4gKwkJZGV2X2VycihyaW5nYWNjLT5kZXYsICJGYWlsZWQgdG8gYWxsb2MgcmluZyBt ZW1cbiIpOwo+ICsJCXJldCA9IC1FTk9NRU07Cj4gKwkJZ290byBlcnJfZnJlZV9vcHM7Cj4gKwl9 Cj4gKwo+ICsJcmV0ID0gazNfcmluZ2FjY19yaW5nX2NmZ19zY2kocmluZyk7Cj4gKwo+ICsJaWYg KHJldCkKPiArCQlnb3RvIGVycl9mcmVlX21lbTsKPiArCj4gKwlyaW5nLT5mbGFncyB8PSBLM19S SU5HX0ZMQUdfQlVTWTsKPiArCXJpbmctPmZsYWdzIHw9IChjZmctPmZsYWdzICYgSzNfUklOR0FD Q19SSU5HX1NIQVJFRCkgPwo+ICsJCQlLM19SSU5HX0ZMQUdfU0hBUkVEIDogMDsKPiArCj4gKwlr M19yaW5nYWNjX3JpbmdfZHVtcChyaW5nKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2Vycl9m cmVlX21lbToKPiArCWRtYV9mcmVlX2NvaGVyZW50KHJpbmdhY2MtPmRldiwKPiArCQkJICByaW5n LT5zaXplICogKDQgPDwgcmluZy0+ZWxtX3NpemUpLAo+ICsJCQkgIHJpbmctPnJpbmdfbWVtX3Zp cnQsCj4gKwkJCSAgcmluZy0+cmluZ19tZW1fZG1hKTsKPiArZXJyX2ZyZWVfb3BzOgo+ICsJcmlu Zy0+b3BzID0gTlVMTDsKPiArZXJyX2ZyZWVfcHJveHk6Cj4gKwlyaW5nLT5wcm94eSA9IE5VTEw7 Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2Nfcmlu Z19jZmcpOwo+ICsKPiArdTMyIGszX3JpbmdhY2NfcmluZ19nZXRfc2l6ZShzdHJ1Y3QgazNfcmlu ZyAqcmluZykKPiArewo+ICsJaWYgKCFyaW5nIHx8ICEocmluZy0+ZmxhZ3MgJiBLM19SSU5HX0ZM QUdfQlVTWSkpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJcmV0dXJuIHJpbmctPnNpemU7 Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwoazNfcmluZ2FjY19yaW5nX2dldF9zaXplKTsKPiAr Cj4gK3UzMiBrM19yaW5nYWNjX3JpbmdfZ2V0X2ZyZWUoc3RydWN0IGszX3JpbmcgKnJpbmcpCj4g K3sKPiArCWlmICghcmluZyB8fCAhKHJpbmctPmZsYWdzICYgSzNfUklOR19GTEFHX0JVU1kpKQo+ ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWlmICghcmluZy0+ZnJlZSkKPiArCQlyaW5nLT5m cmVlID0gcmluZy0+c2l6ZSAtIGRiZ19yZWFkbCgmcmluZy0+cnQtPm9jYyk7Cj4gKwo+ICsJcmV0 dXJuIHJpbmctPmZyZWU7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwoazNfcmluZ2FjY19yaW5n X2dldF9mcmVlKTsKPiArCj4gK3UzMiBrM19yaW5nYWNjX3JpbmdfZ2V0X29jYyhzdHJ1Y3QgazNf cmluZyAqcmluZykKPiArewo+ICsJaWYgKCFyaW5nIHx8ICEocmluZy0+ZmxhZ3MgJiBLM19SSU5H X0ZMQUdfQlVTWSkpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJcmV0dXJuIGRiZ19yZWFk bCgmcmluZy0+cnQtPm9jYyk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwoazNfcmluZ2FjY19y aW5nX2dldF9vY2MpOwo+ICsKPiArdTMyIGszX3JpbmdhY2NfcmluZ19pc19mdWxsKHN0cnVjdCBr M19yaW5nICpyaW5nKQo+ICt7Cj4gKwlyZXR1cm4gIWszX3JpbmdhY2NfcmluZ19nZXRfZnJlZShy aW5nKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfaXNfZnVsbCk7 Cj4gKwo+ICtlbnVtIGszX3JpbmdhY2NfYWNjZXNzX21vZGUgewo+ICsJSzNfUklOR0FDQ19BQ0NF U1NfTU9ERV9QVVNIX0hFQUQsCj4gKwlLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9IRUFELAo+ ICsJSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QVVNIX1RBSUwsCj4gKwlLM19SSU5HQUNDX0FDQ0VT U19NT0RFX1BPUF9UQUlMLAo+ICsJSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QRUVLX0hFQUQsCj4g KwlLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BFRUtfVEFJTCwKPiArfTsKPiArCj4gK3N0YXRpYyBp bnQgazNfcmluZ2FjY19yaW5nX2NmZ19wcm94eShzdHJ1Y3QgazNfcmluZyAqcmluZywKPiArCQkJ CSAgICAgZW51bSBrM19yaW5nYWNjX3Byb3h5X2FjY2Vzc19tb2RlIG1vZGUpCj4gK3sKPiArCXUz MiB2YWw7Cj4gKwo+ICsJdmFsID0gcmluZy0+cmluZ19pZDsKPiArCXZhbCB8PSBtb2RlIDw8IDE2 Owo+ICsJdmFsIHw9IHJpbmctPmVsbV9zaXplIDw8IDI0OwoKV291bGQgYmUgbmljZSB0byBoYXZl IHRoZXNlIG1hZ2ljIHNoaWZ0cyBhcyBkZWZpbmVzLgoKPiArCWRiZ193cml0ZWwodmFsLCAmcmlu Zy0+cHJveHktPmNvbnRyb2wpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg azNfcmluZ2FjY19yaW5nX2FjY2Vzc19wcm94eShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAq ZWxlbSwKPiArCQkJCQllbnVtIGszX3JpbmdhY2NfYWNjZXNzX21vZGUgYWNjZXNzX21vZGUpCj4g K3sKPiArCXZvaWQgX19pb21lbSAqcHRyOwo+ICsKPiArCXB0ciA9ICh2b2lkIF9faW9tZW0gKikm cmluZy0+cHJveHktPmRhdGE7Cj4gKwo+ICsJc3dpdGNoIChhY2Nlc3NfbW9kZSkgewo+ICsJY2Fz ZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BVU0hfSEVBRDoKPiArCWNhc2UgSzNfUklOR0FDQ19B Q0NFU1NfTU9ERV9QT1BfSEVBRDoKPiArCQlrM19yaW5nYWNjX3JpbmdfY2ZnX3Byb3h5KHJpbmcs IFBST1hZX0FDQ0VTU19NT0RFX0hFQUQpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBLM19SSU5HQUND X0FDQ0VTU19NT0RFX1BVU0hfVEFJTDoKPiArCWNhc2UgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9Q T1BfVEFJTDoKPiArCQlrM19yaW5nYWNjX3JpbmdfY2ZnX3Byb3h5KHJpbmcsIFBST1hZX0FDQ0VT U19NT0RFX1RBSUwpOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlyZXR1cm4gLUVJTlZB TDsKPiArCX0KPiArCj4gKwlwdHIgKz0gazNfcmluZ2FjY19yaW5nX2dldF9maWZvX3BvcyhyaW5n KTsKPiArCj4gKwlzd2l0Y2ggKGFjY2Vzc19tb2RlKSB7Cj4gKwljYXNlIEszX1JJTkdBQ0NfQUND RVNTX01PREVfUE9QX0hFQUQ6Cj4gKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9QX1RB SUw6Cj4gKwkJazNfbmF2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgInByb3h5Om1lbWNweV9mcm9t aW8oeCk6IC0tPiBwdHIoJXApLCBtb2RlOiVkXG4iLAo+ICsJCQkgICBwdHIsIGFjY2Vzc19tb2Rl KTsKPiArCQltZW1jcHlfZnJvbWlvKGVsZW0sIHB0ciwgKDQgPDwgcmluZy0+ZWxtX3NpemUpKTsK PiArCQlyaW5nLT5vY2MtLTsKPiArCQlicmVhazsKPiArCWNhc2UgSzNfUklOR0FDQ19BQ0NFU1Nf TU9ERV9QVVNIX1RBSUw6Cj4gKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVTSF9IRUFE Ogo+ICsJCWszX25hdl9kYmcocmluZy0+cGFyZW50LT5kZXYsICJwcm94eTptZW1jcHlfdG9pbyh4 KTogLS0+IHB0ciglcCksIG1vZGU6JWRcbiIsCj4gKwkJCSAgIHB0ciwgYWNjZXNzX21vZGUpOwo+ ICsJCW1lbWNweV90b2lvKHB0ciwgZWxlbSwgKDQgPDwgcmluZy0+ZWxtX3NpemUpKTsKPiArCQly aW5nLT5mcmVlLS07Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCXJldHVybiAtRUlOVkFM Owo+ICsJfQo+ICsKPiArCWszX25hdl9kYmcocmluZy0+cGFyZW50LT5kZXYsICJwcm94eTogZnJl ZSVkIG9jYyVkXG4iLAo+ICsJCSAgIHJpbmctPmZyZWUsIHJpbmctPm9jYyk7Cj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiArc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcHVzaF9oZWFkX3Byb3h5 KHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKQo+ICt7Cj4gKwlyZXR1cm4gazNfcmlu Z2FjY19yaW5nX2FjY2Vzc19wcm94eShyaW5nLCBlbGVtLAo+ICsJCQkJCSAgICBLM19SSU5HQUND X0FDQ0VTU19NT0RFX1BVU0hfSEVBRCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgazNfcmluZ2Fj Y19yaW5nX3B1c2hfdGFpbF9wcm94eShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSkK PiArewo+ICsJcmV0dXJuIGszX3JpbmdhY2NfcmluZ19hY2Nlc3NfcHJveHkocmluZywgZWxlbSwK PiArCQkJCQkgICAgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QVVNIX1RBSUwpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wb3BfaGVhZF9wcm94eShzdHJ1Y3QgazNfcmlu ZyAqcmluZywgdm9pZCAqZWxlbSkKPiArewo+ICsJcmV0dXJuIGszX3JpbmdhY2NfcmluZ19hY2Nl c3NfcHJveHkocmluZywgZWxlbSwKPiArCQkJCQkgICAgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9Q T1BfSEVBRCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3BvcF90YWls X3Byb3h5KHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKQo+ICt7Cj4gKwlyZXR1cm4g azNfcmluZ2FjY19yaW5nX2FjY2Vzc19wcm94eShyaW5nLCBlbGVtLAo+ICsJCQkJCSAgICBLM19S SU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9IRUFEKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBrM19y aW5nYWNjX3JpbmdfYWNjZXNzX2lvKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtLAo+ ICsJCQkJICAgICBlbnVtIGszX3JpbmdhY2NfYWNjZXNzX21vZGUgYWNjZXNzX21vZGUpCj4gK3sK PiArCXZvaWQgX19pb21lbSAqcHRyOwo+ICsKPiArCXN3aXRjaCAoYWNjZXNzX21vZGUpIHsKPiAr CWNhc2UgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QVVNIX0hFQUQ6Cj4gKwljYXNlIEszX1JJTkdB Q0NfQUNDRVNTX01PREVfUE9QX0hFQUQ6Cj4gKwkJcHRyID0gKHZvaWQgX19pb21lbSAqKSZyaW5n LT5maWZvcy0+aGVhZF9kYXRhOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBLM19SSU5HQUNDX0FDQ0VT U19NT0RFX1BVU0hfVEFJTDoKPiArCWNhc2UgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QT1BfVEFJ TDoKPiArCQlwdHIgPSAodm9pZCBfX2lvbWVtICopJnJpbmctPmZpZm9zLT50YWlsX2RhdGE7Cj4g KwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiAr CXB0ciArPSBrM19yaW5nYWNjX3JpbmdfZ2V0X2ZpZm9fcG9zKHJpbmcpOwo+ICsKPiArCXN3aXRj aCAoYWNjZXNzX21vZGUpIHsKPiArCWNhc2UgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QT1BfSEVB RDoKPiArCWNhc2UgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QT1BfVEFJTDoKPiArCQlrM19uYXZf ZGJnKHJpbmctPnBhcmVudC0+ZGV2LCAibWVtY3B5X2Zyb21pbyh4KTogLS0+IHB0ciglcCksIG1v ZGU6JWRcbiIsCj4gKwkJCSAgIHB0ciwgYWNjZXNzX21vZGUpOwo+ICsJCW1lbWNweV9mcm9taW8o ZWxlbSwgcHRyLCAoNCA8PCByaW5nLT5lbG1fc2l6ZSkpOwo+ICsJCXJpbmctPm9jYy0tOwo+ICsJ CWJyZWFrOwo+ICsJY2FzZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BVU0hfVEFJTDoKPiArCWNh c2UgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QVVNIX0hFQUQ6Cj4gKwkJazNfbmF2X2RiZyhyaW5n LT5wYXJlbnQtPmRldiwgIm1lbWNweV90b2lvKHgpOiAtLT4gcHRyKCVwKSwgbW9kZTolZFxuIiwK PiArCQkJICAgcHRyLCBhY2Nlc3NfbW9kZSk7Cj4gKwkJbWVtY3B5X3RvaW8ocHRyLCBlbGVtLCAo NCA8PCByaW5nLT5lbG1fc2l6ZSkpOwo+ICsJCXJpbmctPmZyZWUtLTsKPiArCQlicmVhazsKPiAr CWRlZmF1bHQ6Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJazNfbmF2X2RiZyhy aW5nLT5wYXJlbnQtPmRldiwgImZyZWUlZCBpbmRleCVkIG9jYyVkIGluZGV4JWRcbiIsCj4gKwkJ ICAgcmluZy0+ZnJlZSwgcmluZy0+d2luZGV4LCByaW5nLT5vY2MsIHJpbmctPnJpbmRleCk7Cj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcHVzaF9o ZWFkX2lvKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKQo+ICt7Cj4gKwlyZXR1cm4g azNfcmluZ2FjY19yaW5nX2FjY2Vzc19pbyhyaW5nLCBlbGVtLAo+ICsJCQkJCSBLM19SSU5HQUND X0FDQ0VTU19NT0RFX1BVU0hfSEVBRCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgazNfcmluZ2Fj Y19yaW5nX3B1c2hfaW8oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCj4gK3sKPiAr CXJldHVybiBrM19yaW5nYWNjX3JpbmdfYWNjZXNzX2lvKHJpbmcsIGVsZW0sCj4gKwkJCQkJIEsz X1JJTkdBQ0NfQUNDRVNTX01PREVfUFVTSF9UQUlMKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBr M19yaW5nYWNjX3JpbmdfcG9wX2lvKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKQo+ ICt7Cj4gKwlyZXR1cm4gazNfcmluZ2FjY19yaW5nX2FjY2Vzc19pbyhyaW5nLCBlbGVtLAo+ICsJ CQkJCSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9IRUFEKTsKPiArfQo+ICsKPiArc3RhdGlj IGludCBrM19yaW5nYWNjX3JpbmdfcG9wX3RhaWxfaW8oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZv aWQgKmVsZW0pCj4gK3sKPiArCXJldHVybiBrM19yaW5nYWNjX3JpbmdfYWNjZXNzX2lvKHJpbmcs IGVsZW0sCj4gKwkJCQkJIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9QX0hFQUQpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wdXNoX21lbShzdHJ1Y3QgazNfcmluZyAq cmluZywgdm9pZCAqZWxlbSkKPiArewo+ICsJdm9pZCAqZWxlbV9wdHI7Cj4gKwo+ICsJZWxlbV9w dHIgPSBrM19yaW5nYWNjX2dldF9lbG1fYWRkcihyaW5nLCByaW5nLT53aW5kZXgpOwo+ICsKPiAr CW1lbWNweShlbGVtX3B0ciwgZWxlbSwgKDQgPDwgcmluZy0+ZWxtX3NpemUpKTsKPiArCj4gKwly aW5nLT53aW5kZXggPSAocmluZy0+d2luZGV4ICsgMSkgJSByaW5nLT5zaXplOwo+ICsJcmluZy0+ ZnJlZS0tOwo+ICsJZGJnX3dyaXRlbCgxLCAmcmluZy0+cnQtPmRiKTsKPiArCj4gKwlrM19uYXZf ZGJnKHJpbmctPnBhcmVudC0+ZGV2LCAicmluZ19wdXNoX21lbTogZnJlZSVkIGluZGV4JWRcbiIs Cj4gKwkJICAgcmluZy0+ZnJlZSwgcmluZy0+d2luZGV4KTsKPiArCj4gKwlyZXR1cm4gMDsKPiAr fQo+ICsKPiArc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcG9wX21lbShzdHJ1Y3QgazNfcmlu ZyAqcmluZywgdm9pZCAqZWxlbSkKPiArewo+ICsJdm9pZCAqZWxlbV9wdHI7Cj4gKwo+ICsJZWxl bV9wdHIgPSBrM19yaW5nYWNjX2dldF9lbG1fYWRkcihyaW5nLCByaW5nLT5yaW5kZXgpOwo+ICsK PiArCW1lbWNweShlbGVtLCBlbGVtX3B0ciwgKDQgPDwgcmluZy0+ZWxtX3NpemUpKTsKPiArCj4g KwlyaW5nLT5yaW5kZXggPSAocmluZy0+cmluZGV4ICsgMSkgJSByaW5nLT5zaXplOwo+ICsJcmlu Zy0+b2NjLS07Cj4gKwlkYmdfd3JpdGVsKC0xLCAmcmluZy0+cnQtPmRiKTsKPiArCj4gKwlrM19u YXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LCAicmluZ19wb3BfbWVtOiBvY2MlZCBpbmRleCVkIHBv c19wdHIlcFxuIiwKPiArCQkgICByaW5nLT5vY2MsIHJpbmctPnJpbmRleCwgZWxlbV9wdHIpOwo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK2ludCBrM19yaW5nYWNjX3JpbmdfcHVzaChzdHJ1Y3Qg azNfcmluZyAqcmluZywgdm9pZCAqZWxlbSkKPiArewo+ICsJaW50IHJldCA9IC1FT1BOT1RTVVBQ Owo+ICsKPiArCWlmICghcmluZyB8fCAhKHJpbmctPmZsYWdzICYgSzNfUklOR19GTEFHX0JVU1kp KQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWszX25hdl9kYmcocmluZy0+cGFyZW50LT5k ZXYsICJyaW5nX3B1c2g6IGZyZWUlZCBpbmRleCVkXG4iLAo+ICsJCSAgIHJpbmctPmZyZWUsIHJp bmctPndpbmRleCk7Cj4gKwo+ICsJaWYgKGszX3JpbmdhY2NfcmluZ19pc19mdWxsKHJpbmcpKQo+ ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWlmIChyaW5nLT5vcHMgJiYgcmluZy0+b3BzLT5w dXNoX3RhaWwpCj4gKwkJcmV0ID0gcmluZy0+b3BzLT5wdXNoX3RhaWwocmluZywgZWxlbSk7Cj4g Kwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3Jp bmdfcHVzaCk7Cj4gKwo+ICtpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hfaGVhZChzdHJ1Y3QgazNf cmluZyAqcmluZywgdm9pZCAqZWxlbSkKPiArewo+ICsJaW50IHJldCA9IC1FT1BOT1RTVVBQOwo+ ICsKPiArCWlmICghcmluZyB8fCAhKHJpbmctPmZsYWdzICYgSzNfUklOR19GTEFHX0JVU1kpKQo+ ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWszX25hdl9kYmcocmluZy0+cGFyZW50LT5kZXYs ICJyaW5nX3B1c2hfaGVhZDogZnJlZSVkIGluZGV4JWRcbiIsCj4gKwkJICAgcmluZy0+ZnJlZSwg cmluZy0+d2luZGV4KTsKPiArCj4gKwlpZiAoazNfcmluZ2FjY19yaW5nX2lzX2Z1bGwocmluZykp Cj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJaWYgKHJpbmctPm9wcyAmJiByaW5nLT5vcHMt PnB1c2hfaGVhZCkKPiArCQlyZXQgPSByaW5nLT5vcHMtPnB1c2hfaGVhZChyaW5nLCBlbGVtKTsK PiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2Nf cmluZ19wdXNoX2hlYWQpOwo+ICsKPiAraW50IGszX3JpbmdhY2NfcmluZ19wb3Aoc3RydWN0IGsz X3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCj4gK3sKPiArCWludCByZXQgPSAtRU9QTk9UU1VQUDsK PiArCj4gKwlpZiAoIXJpbmcgfHwgIShyaW5nLT5mbGFncyAmIEszX1JJTkdfRkxBR19CVVNZKSkK PiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlpZiAoIXJpbmctPm9jYykKPiArCQlyaW5nLT5v Y2MgPSBrM19yaW5nYWNjX3JpbmdfZ2V0X29jYyhyaW5nKTsKPiArCj4gKwlrM19uYXZfZGJnKHJp bmctPnBhcmVudC0+ZGV2LCAicmluZ19wb3A6IG9jYyVkIGluZGV4JWRcbiIsCj4gKwkJICAgcmlu Zy0+b2NjLCByaW5nLT5yaW5kZXgpOwo+ICsKPiArCWlmICghcmluZy0+b2NjKQo+ICsJCXJldHVy biAtRU5PREFUQTsKPiArCj4gKwlpZiAocmluZy0+b3BzICYmIHJpbmctPm9wcy0+cG9wX2hlYWQp Cj4gKwkJcmV0ID0gcmluZy0+b3BzLT5wb3BfaGVhZChyaW5nLCBlbGVtKTsKPiArCj4gKwlyZXR1 cm4gcmV0Owo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfcmluZ19wb3ApOwo+ ICsKPiAraW50IGszX3JpbmdhY2NfcmluZ19wb3BfdGFpbChzdHJ1Y3QgazNfcmluZyAqcmluZywg dm9pZCAqZWxlbSkKPiArewo+ICsJaW50IHJldCA9IC1FT1BOT1RTVVBQOwo+ICsKPiArCWlmICgh cmluZyB8fCAhKHJpbmctPmZsYWdzICYgSzNfUklOR19GTEFHX0JVU1kpKQo+ICsJCXJldHVybiAt RUlOVkFMOwo+ICsKPiArCWlmICghcmluZy0+b2NjKQo+ICsJCXJpbmctPm9jYyA9IGszX3Jpbmdh Y2NfcmluZ19nZXRfb2NjKHJpbmcpOwo+ICsKPiArCWszX25hdl9kYmcocmluZy0+cGFyZW50LT5k ZXYsICJyaW5nX3BvcF90YWlsOiBvY2MlZCBpbmRleCVkXG4iLAo+ICsJCSAgIHJpbmctPm9jYywg cmluZy0+cmluZGV4KTsKPiArCj4gKwlpZiAoIXJpbmctPm9jYykKPiArCQlyZXR1cm4gLUVOT0RB VEE7Cj4gKwo+ICsJaWYgKHJpbmctPm9wcyAmJiByaW5nLT5vcHMtPnBvcF90YWlsKQo+ICsJCXJl dCA9IHJpbmctPm9wcy0+cG9wX3RhaWwocmluZywgZWxlbSk7Cj4gKwo+ICsJcmV0dXJuIHJldDsK PiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfcG9wX3RhaWwpOwo+ICsK PiArc3RydWN0IGszX3JpbmdhY2MgKm9mX2szX3JpbmdhY2NfZ2V0X2J5X3BoYW5kbGUoc3RydWN0 IGRldmljZV9ub2RlICpucCwKPiArCQkJCQkJY29uc3QgY2hhciAqcHJvcGVydHkpCj4gK3sKPiAr CXN0cnVjdCBkZXZpY2Vfbm9kZSAqcmluZ2FjY19ucDsKPiArCXN0cnVjdCBrM19yaW5nYWNjICpy aW5nYWNjID0gRVJSX1BUUigtRVBST0JFX0RFRkVSKTsKPiArCXN0cnVjdCBrM19yaW5nYWNjICpl bnRyeTsKPiArCj4gKwlyaW5nYWNjX25wID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgcHJvcGVydHks IDApOwo+ICsJaWYgKCFyaW5nYWNjX25wKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwo+ ICsKPiArCW11dGV4X2xvY2soJmszX3JpbmdhY2NfbGlzdF9sb2NrKTsKPiArCWxpc3RfZm9yX2Vh Y2hfZW50cnkoZW50cnksICZrM19yaW5nYWNjX2xpc3QsIGxpc3QpCj4gKwkJaWYgKGVudHJ5LT5k ZXYtPm9mX25vZGUgPT0gcmluZ2FjY19ucCkgewo+ICsJCQlyaW5nYWNjID0gZW50cnk7Cj4gKwkJ CWJyZWFrOwo+ICsJCX0KPiArCW11dGV4X3VubG9jaygmazNfcmluZ2FjY19saXN0X2xvY2spOwo+ ICsJb2Zfbm9kZV9wdXQocmluZ2FjY19ucCk7Cj4gKwo+ICsJcmV0dXJuIHJpbmdhY2M7Cj4gK30K PiArRVhQT1JUX1NZTUJPTF9HUEwob2ZfazNfcmluZ2FjY19nZXRfYnlfcGhhbmRsZSk7Cj4gKwo+ ICtzdGF0aWMgaW50IGszX3JpbmdhY2NfcHJvYmVfZHQoc3RydWN0IGszX3JpbmdhY2MgKnJpbmdh Y2MpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IHJpbmdhY2MtPmRldi0+b2Zf bm9kZTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IHJpbmdhY2MtPmRldjsKPiArCXN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKPiArCWludCBy ZXQ7Cj4gKwo+ICsJaWYgKCFub2RlKSB7Cj4gKwkJZGV2X2VycihkZXYsICJkZXZpY2UgdHJlZSBp bmZvIHVuYXZhaWxhYmxlXG4iKTsKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArCj4gKwly ZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAidGksbnVtLXJpbmdzIiwgJnJpbmdhY2Mt Pm51bV9yaW5ncyk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycihkZXYsICJ0aSxudW0tcmlu Z3MgcmVhZCBmYWlsdXJlICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ ICsJcmluZ2FjYy0+ZG1hX3JpbmdfcmVzZXRfcXVpcmsgPQo+ICsJCQlvZl9wcm9wZXJ0eV9yZWFk X2Jvb2wobm9kZSwgInRpLGRtYS1yaW5nLXJlc2V0LXF1aXJrIik7Cj4gKwo+ICsJcmluZ2FjYy0+ dGlzY2kgPSB0aV9zY2lfZ2V0X2J5X3BoYW5kbGUobm9kZSwgInRpLHNjaSIpOwo+ICsJaWYgKElT X0VSUihyaW5nYWNjLT50aXNjaSkpIHsKPiArCQlyZXQgPSBQVFJfRVJSKHJpbmdhY2MtPnRpc2Np KTsKPiArCQlpZiAocmV0ICE9IC1FUFJPQkVfREVGRVIpCj4gKwkJCWRldl9lcnIoZGV2LCAidGks c2NpIHJlYWQgZmFpbCAlZFxuIiwgcmV0KTsKPiArCQlyaW5nYWNjLT50aXNjaSA9IE5VTEw7Cj4g KwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihu b2RlLCAidGksc2NpLWRldi1pZCIsCj4gKwkJCQkgICAmcmluZ2FjYy0+dGlzY2lfZGV2X2lkKTsK PiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGRldiwgInRpLHNjaS1kZXYtaWQgcmVhZCBmYWls ICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcGRldi0+aWQgPSBy aW5nYWNjLT50aXNjaV9kZXZfaWQ7Cj4gKwo+ICsJcmluZ2FjYy0+cm1fZ3BfcmFuZ2UgPSBkZXZt X3RpX3NjaV9nZXRfb2ZfcmVzb3VyY2UocmluZ2FjYy0+dGlzY2ksIGRldiwKPiArCQkJCQkJcmlu Z2FjYy0+dGlzY2lfZGV2X2lkLAo+ICsJCQkJCQkidGksc2NpLXJtLXJhbmdlLWdwLXJpbmdzIik7 Cj4gKwlpZiAoSVNfRVJSKHJpbmdhY2MtPnJtX2dwX3JhbmdlKSkgewo+ICsJCWRldl9lcnIoZGV2 LCAiRmFpbGVkIHRvIGFsbG9jYXRlIE1TSSBpbnRlcnJ1cHRzXG4iKTsKPiArCQlyZXR1cm4gUFRS X0VSUihyaW5nYWNjLT5ybV9ncF9yYW5nZSk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHRpX3NjaV9p bnRhX21zaV9kb21haW5fYWxsb2NfaXJxcyhyaW5nYWNjLT5kZXYsCj4gKwkJCQkJCSByaW5nYWNj LT5ybV9ncF9yYW5nZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgazNfcmluZ2FjY19wcm9iZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgazNfcmluZ2FjYyAq cmluZ2FjYzsKPiArCXZvaWQgX19pb21lbSAqYmFzZV9maWZvLCAqYmFzZV9ydDsKPiArCXN0cnVj dCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKPiAr CWludCByZXQsIGk7Cj4gKwo+ICsJcmluZ2FjYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigq cmluZ2FjYyksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFyaW5nYWNjKQo+ICsJCXJldHVybiAtRU5P TUVNOwo+ICsKPiArCXJpbmdhY2MtPmRldiA9IGRldjsKPiArCW11dGV4X2luaXQoJnJpbmdhY2Mt PnJlcV9sb2NrKTsKPiArCj4gKwlkZXYtPm1zaV9kb21haW4gPSBvZl9tc2lfZ2V0X2RvbWFpbihk ZXYsIGRldi0+b2Zfbm9kZSwKPiArCQkJCQkgICAgRE9NQUlOX0JVU19USV9TQ0lfSU5UQV9NU0kp Owo+ICsJaWYgKCFkZXYtPm1zaV9kb21haW4pIHsKPiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0 byBnZXQgTVNJIGRvbWFpblxuIik7Cj4gKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7Cj4gKwl9Cj4g Kwo+ICsJcmV0ID0gazNfcmluZ2FjY19wcm9iZV9kdChyaW5nYWNjKTsKPiArCWlmIChyZXQpCj4g KwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1l KHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicnQiKTsKPiArCWJhc2VfcnQgPSBkZXZtX2lvcmVtYXBf cmVzb3VyY2UoZGV2LCByZXMpOwo+ICsJaWYgKElTX0VSUihiYXNlX3J0KSkKPiArCQlyZXR1cm4g UFRSX0VSUihiYXNlX3J0KTsKPiArCj4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnlu YW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAiZmlmb3MiKTsKPiArCWJhc2VfZmlmbyA9IGRldm1f aW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7Cj4gKwlpZiAoSVNfRVJSKGJhc2VfZmlmbykpCj4g KwkJcmV0dXJuIFBUUl9FUlIoYmFzZV9maWZvKTsKPiArCj4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRf cmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicHJveHlfZ2NmZyIpOwo+ICsJ cmluZ2FjYy0+cHJveHlfZ2NmZyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7Cj4g KwlpZiAoSVNfRVJSKHJpbmdhY2MtPnByb3h5X2djZmcpKQo+ICsJCXJldHVybiBQVFJfRVJSKHJp bmdhY2MtPnByb3h5X2djZmcpOwo+ICsKPiArCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9i eW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sCj4gKwkJCQkJICAgInByb3h5X3RhcmdldCIpOwo+ ICsJcmluZ2FjYy0+cHJveHlfdGFyZ2V0X2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2 LCByZXMpOwo+ICsJaWYgKElTX0VSUihyaW5nYWNjLT5wcm94eV90YXJnZXRfYmFzZSkpCj4gKwkJ cmV0dXJuIFBUUl9FUlIocmluZ2FjYy0+cHJveHlfdGFyZ2V0X2Jhc2UpOwo+ICsKPiArCXJpbmdh Y2MtPm51bV9wcm94aWVzID0gZGJnX3JlYWRsKCZyaW5nYWNjLT5wcm94eV9nY2ZnLT5jb25maWcp ICYKPiArCQkJCQkgSzNfUklOR0FDQ19QUk9YWV9DRkdfVEhSRUFEU19NQVNLOwo+ICsKPiArCXJp bmdhY2MtPnJpbmdzID0gZGV2bV9remFsbG9jKGRldiwKPiArCQkJCSAgICAgIHNpemVvZigqcmlu Z2FjYy0+cmluZ3MpICoKPiArCQkJCSAgICAgIHJpbmdhY2MtPm51bV9yaW5ncywKPiArCQkJCSAg ICAgIEdGUF9LRVJORUwpOwo+ICsJcmluZ2FjYy0+cmluZ3NfaW51c2UgPSBkZXZtX2tjYWxsb2Mo ZGV2LAo+ICsJCQkJCSAgICBCSVRTX1RPX0xPTkdTKHJpbmdhY2MtPm51bV9yaW5ncyksCj4gKwkJ CQkJICAgIHNpemVvZih1bnNpZ25lZCBsb25nKSwgR0ZQX0tFUk5FTCk7Cj4gKwlyaW5nYWNjLT5w cm94eV9pbnVzZSA9IGRldm1fa2NhbGxvYyhkZXYsCj4gKwkJCQkJICAgIEJJVFNfVE9fTE9OR1Mo cmluZ2FjYy0+bnVtX3Byb3hpZXMpLAo+ICsJCQkJCSAgICBzaXplb2YodW5zaWduZWQgbG9uZyks IEdGUF9LRVJORUwpOwo+ICsKPiArCWlmICghcmluZ2FjYy0+cmluZ3MgfHwgIXJpbmdhY2MtPnJp bmdzX2ludXNlIHx8ICFyaW5nYWNjLT5wcm94eV9pbnVzZSkKPiArCQlyZXR1cm4gLUVOT01FTTsK PiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgcmluZ2FjYy0+bnVtX3JpbmdzOyBpKyspIHsKPiArCQly aW5nYWNjLT5yaW5nc1tpXS5ydCA9IGJhc2VfcnQgKwo+ICsJCQkJICAgICAgIEszX1JJTkdBQ0Nf UlRfUkVHU19TVEVQICogaTsKPiArCQlyaW5nYWNjLT5yaW5nc1tpXS5maWZvcyA9IGJhc2VfZmlm byArCj4gKwkJCQkJICBLM19SSU5HQUNDX0ZJRk9fUkVHU19TVEVQICogaTsKPiArCQlyaW5nYWNj LT5yaW5nc1tpXS5wYXJlbnQgPSByaW5nYWNjOwo+ICsJCXJpbmdhY2MtPnJpbmdzW2ldLnJpbmdf aWQgPSBpOwo+ICsJCXJpbmdhY2MtPnJpbmdzW2ldLnByb3h5X2lkID0gSzNfUklOR0FDQ19QUk9Y WV9OT1RfVVNFRDsKPiArCX0KPiArCWRldl9zZXRfZHJ2ZGF0YShkZXYsIHJpbmdhY2MpOwo+ICsK PiArCXJpbmdhY2MtPnRpc2NpX3Jpbmdfb3BzID0gJnJpbmdhY2MtPnRpc2NpLT5vcHMucm1fcmlu Z19vcHM7Cj4gKwo+ICsJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKPiArCXJldCA9IHBtX3J1bnRp bWVfZ2V0X3N5bmMoZGV2KTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJcG1fcnVudGltZV9wdXRf bm9pZGxlKGRldik7Cj4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIHBtICVkXG4i LCByZXQpOwo+ICsJCWdvdG8gZXJyOwo+ICsJfQo+ICsKPiArCW11dGV4X2xvY2soJmszX3Jpbmdh Y2NfbGlzdF9sb2NrKTsKPiArCWxpc3RfYWRkX3RhaWwoJnJpbmdhY2MtPmxpc3QsICZrM19yaW5n YWNjX2xpc3QpOwo+ICsJbXV0ZXhfdW5sb2NrKCZrM19yaW5nYWNjX2xpc3RfbG9jayk7Cj4gKwo+ ICsJZGV2X2luZm8oZGV2LCAiUmluZyBBY2NlbGVyYXRvciBwcm9iZWQgcmluZ3M6JXUsIGdwLXJp bmdzWyV1LCV1XSBzY2ktZGV2LWlkOiV1XG4iLAo+ICsJCSByaW5nYWNjLT5udW1fcmluZ3MsCj4g KwkJIHJpbmdhY2MtPnJtX2dwX3JhbmdlLT5kZXNjWzBdLnN0YXJ0LAo+ICsJCSByaW5nYWNjLT5y bV9ncF9yYW5nZS0+ZGVzY1swXS5udW0sCj4gKwkJIHJpbmdhY2MtPnRpc2NpX2Rldl9pZCk7Cj4g KwlkZXZfaW5mbyhkZXYsICJkbWEtcmluZy1yZXNldC1xdWlyazogJXNcbiIsCj4gKwkJIHJpbmdh Y2MtPmRtYV9yaW5nX3Jlc2V0X3F1aXJrID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7Cj4gKwlk ZXZfaW5mbyhkZXYsICJSQSBQcm94eSByZXYuICUwOHgsIG51bV9wcm94aWVzOiV1XG4iLAo+ICsJ CSBkYmdfcmVhZGwoJnJpbmdhY2MtPnByb3h5X2djZmctPnJldmlzaW9uKSwKPiArCQkgcmluZ2Fj Yy0+bnVtX3Byb3hpZXMpOwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnI6Cj4gKwlwbV9ydW50aW1l X2Rpc2FibGUoZGV2KTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgazNf cmluZ2FjY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJc3Ry dWN0IGszX3JpbmdhY2MgKnJpbmdhY2MgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7Cj4g Kwo+ICsJcG1fcnVudGltZV9wdXRfc3luYygmcGRldi0+ZGV2KTsKPiArCXBtX3J1bnRpbWVfZGlz YWJsZSgmcGRldi0+ZGV2KTsKPiArCj4gKwltdXRleF9sb2NrKCZrM19yaW5nYWNjX2xpc3RfbG9j ayk7Cj4gKwlsaXN0X2RlbCgmcmluZ2FjYy0+bGlzdCk7Cj4gKwltdXRleF91bmxvY2soJmszX3Jp bmdhY2NfbGlzdF9sb2NrKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKiBNYXRjaCB0YWJs ZSBmb3Igb2ZfcGxhdGZvcm0gYmluZGluZyAqLwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rl dmljZV9pZCBrM19yaW5nYWNjX29mX21hdGNoW10gPSB7Cj4gKwl7IC5jb21wYXRpYmxlID0gInRp LGFtNjU0LW5hdnNzLXJpbmdhY2MiLCB9LAo+ICsJe30sCj4gK307Cj4gK01PRFVMRV9ERVZJQ0Vf VEFCTEUob2YsIGszX3JpbmdhY2Nfb2ZfbWF0Y2gpOwo+ICsKPiArc3RhdGljIHN0cnVjdCBwbGF0 Zm9ybV9kcml2ZXIgazNfcmluZ2FjY19kcml2ZXIgPSB7Cj4gKwkucHJvYmUJCT0gazNfcmluZ2Fj Y19wcm9iZSwKPiArCS5yZW1vdmUJCT0gazNfcmluZ2FjY19yZW1vdmUsCj4gKwkuZHJpdmVyCQk9 IHsKPiArCQkubmFtZQk9ICJrMy1yaW5nYWNjIiwKPiArCQkub2ZfbWF0Y2hfdGFibGUgPSBrM19y aW5nYWNjX29mX21hdGNoLAo+ICsJfSwKPiArfTsKPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihr M19yaW5nYWNjX2RyaXZlcik7Cj4gKwo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Cj4gK01P RFVMRV9ERVNDUklQVElPTigiVEkgUmluZ2FjYyBkcml2ZXIgZm9yIEszIFNPQ3MiKTsKPiArTU9E VUxFX0FVVEhPUigiR3J5Z29yaWkgU3RyYXNoa28gPGdyeWdvcmlpLnN0cmFzaGtvQHRpLmNvbT4i KTsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2MvdGkvazMtcmluZ2FjYy5oIGIvaW5j bHVkZS9saW51eC9zb2MvdGkvazMtcmluZ2FjYy5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCAwMDAwMDAwMDAwMDAuLmRlYmZmYmE0OGFjOQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9p bmNsdWRlL2xpbnV4L3NvYy90aS9rMy1yaW5nYWNjLmgKPiBAQCAtMCwwICsxLDI2MiBAQAo+ICsv KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwo+ICsvKgo+ICsgKiBLMyBSaW5n IEFjY2VsZXJhdG9yIChSQSkgc3Vic3lzdGVtIGludGVyZmFjZQo+ICsgKgo+ICsgKiBDb3B5cmln aHQgKEMpIDIwMTkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50 aS5jb20KPiArICovCj4gKwo+ICsjaWZuZGVmIF9fU09DX1RJX0szX1JJTkdBQ0NfQVBJX0hfCj4g KyNkZWZpbmUgX19TT0NfVElfSzNfUklOR0FDQ19BUElfSF8KPiArCj4gKyNpbmNsdWRlIDxsaW51 eC90eXBlcy5oPgo+ICsKPiArc3RydWN0IGRldmljZV9ub2RlOwo+ICsKPiArLyoqCj4gKyAqIGVu dW0gazNfcmluZ19tb2RlIC0gJnN0cnVjdCBrM19yaW5nX2NmZyBtb2RlCj4gKyAqCj4gKyAqIFJB IHJpbmcgb3BlcmF0aW9uYWwgbW9kZXMKPiArICoKPiArICogQEszX1JJTkdBQ0NfUklOR19NT0RF X1JJTkc6IEV4cG9zZWQgUmluZyBtb2RlIGZvciBTVyBkaXJlY3QgYWNjZXNzCj4gKyAqIEBLM19S SU5HQUNDX1JJTkdfTU9ERV9NRVNTQUdFOiBNZXNzYWdpbmcgbW9kZS4gTWVzc2FnaW5nIG1vZGUg cmVxdWlyZXMKPiArICoJdGhhdCBhbGwgYWNjZXNzZXMgdG8gdGhlIHF1ZXVlIG11c3QgZ28gdGhy b3VnaCB0aGlzIElQIHNvIHRoYXQgYWxsCj4gKyAqCWFjY2Vzc2VzIHRvIHRoZSBtZW1vcnkgYXJl IGNvbnRyb2xsZWQgYW5kIG9yZGVyZWQuIFRoaXMgSVAgdGhlbgo+ICsgKgljb250cm9scyB0aGUg ZW50aXJlIHN0YXRlIG9mIHRoZSBxdWV1ZSwgYW5kIFNXIGhhcyBubyBkaXJlY3RseSBjb250cm9s LAo+ICsgKglzdWNoIGFzIHRocm91Z2ggZG9vcmJlbGxzIGFuZCBjYW5ub3QgYWNjZXNzIHRoZSBz dG9yYWdlIG1lbW9yeSBkaXJlY3RseS4KPiArICoJVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVs IHdoZW4gbW9yZSB0aGFuIG9uZSBTVyBvciBIVyBlbnRpdHkgY2FuIGJlCj4gKyAqCXRoZSBwcm9k dWNlciBhbmQvb3IgY29uc3VtZXIgYXQgdGhlIHNhbWUgdGltZQo+ICsgKiBASzNfUklOR0FDQ19S SU5HX01PREVfQ1JFREVOVElBTFM6IENyZWRlbnRpYWxzIG1vZGUgaXMgbWVzc2FnZSBtb2RlIHBs dXMKPiArICoJc3RvcmVzIGNyZWRlbnRpYWxzIHdpdGggZWFjaCBtZXNzYWdlLCByZXF1aXJpbmcg dGhlIGVsZW1lbnQgc2l6ZSB0byBiZQo+ICsgKglkb3VibGVkIHRvIGZpdCB0aGUgY3JlZGVudGlh bHMuIEFueSBleHBvc2VkIG1lbW9yeSBzaG91bGQgYmUgcHJvdGVjdGVkCj4gKyAqCWJ5IGEgZmly ZXdhbGwgZnJvbSB1bndhbnRlZCBhY2Nlc3MKPiArICogQEszX1JJTkdBQ0NfUklOR19NT0RFX1FN OiAgUXVldWUgbWFuYWdlciBtb2RlLiBUaGlzIHRha2VzIHRoZSBjcmVkZW50aWFscwo+ICsgKglt b2RlIGFuZCBhZGRzIHBhY2tldCBsZW5ndGggcGVyIGVsZW1lbnQsIGFsb25nIHdpdGggYWRkaXRp b25hbCByZWFkIG9ubHkKPiArICoJZmllbGRzIGZvciBlbGVtZW50IGNvdW50IGFuZCBhY2N1bXVs YXRlZCBxdWV1ZSBsZW5ndGguIFRoZSBRTSBtb2RlIG9ubHkKPiArICoJb3BlcmF0ZXMgd2l0aCBh biA4IGJ5dGUgZWxlbWVudCBzaXplIChhbnkgb3RoZXIgZWxlbWVudCBzaXplIGlzCj4gKyAqCWls bGVnYWwpLCBhbmQgbGlrZSBpbiBjcmVkZW50aWFscyBtb2RlIGVhY2ggb3BlcmF0aW9uIHVzZXMg MiBlbGVtZW50Cj4gKyAqCXNsb3RzIHRvIHN0b3JlIHRoZSBjcmVkZW50aWFscyBhbmQgbGVuZ3Ro IGZpZWxkcwo+ICsgKi8KPiArZW51bSBrM19yaW5nX21vZGUgewo+ICsJSzNfUklOR0FDQ19SSU5H X01PREVfUklORyA9IDAsCj4gKwlLM19SSU5HQUNDX1JJTkdfTU9ERV9NRVNTQUdFLAo+ICsJSzNf UklOR0FDQ19SSU5HX01PREVfQ1JFREVOVElBTFMsCj4gKwlLM19SSU5HQUNDX1JJTkdfTU9ERV9R TSwKPiArCUszX1JJTkdBQ0NfUklOR19NT0RFX0lOVkFMSUQKPiArfTsKPiArCj4gKy8qKgo+ICsg KiBlbnVtIGszX3Jpbmdfc2l6ZSAtICZzdHJ1Y3QgazNfcmluZ19jZmcgZWxtX3NpemUKPiArICoK PiArICogUkEgcmluZyBlbGVtZW50J3Mgc2l6ZXMgaW4gYnl0ZXMuCj4gKyAqLwo+ICtlbnVtIGsz X3Jpbmdfc2l6ZSB7Cj4gKwlLM19SSU5HQUNDX1JJTkdfRUxTSVpFXzQgPSAwLAo+ICsJSzNfUklO R0FDQ19SSU5HX0VMU0laRV84LAo+ICsJSzNfUklOR0FDQ19SSU5HX0VMU0laRV8xNiwKPiArCUsz X1JJTkdBQ0NfUklOR19FTFNJWkVfMzIsCj4gKwlLM19SSU5HQUNDX1JJTkdfRUxTSVpFXzY0LAo+ ICsJSzNfUklOR0FDQ19SSU5HX0VMU0laRV8xMjgsCj4gKwlLM19SSU5HQUNDX1JJTkdfRUxTSVpF XzI1NiwKPiArCUszX1JJTkdBQ0NfUklOR19FTFNJWkVfSU5WQUxJRAo+ICt9Owo+ICsKPiArc3Ry dWN0IGszX3JpbmdhY2M7Cj4gK3N0cnVjdCBrM19yaW5nOwo+ICsKPiArLyoqCj4gKyAqIGVudW0g azNfcmluZ19jZmcgLSBSQSByaW5nIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCj4gKyAqCj4gKyAq IEBzaXplOiBSaW5nIHNpemUsIG51bWJlciBvZiBlbGVtZW50cwo+ICsgKiBAZWxtX3NpemU6IFJp bmcgZWxlbWVudCBzaXplCj4gKyAqIEBtb2RlOiBSaW5nIG9wZXJhdGlvbmFsIG1vZGUKPiArICog QGZsYWdzOiBSaW5nIGNvbmZpZ3VyYXRpb24gZmxhZ3MuIFBvc3NpYmxlIHZhbHVlczoKPiArICoJ IEBLM19SSU5HQUNDX1JJTkdfU0hBUkVEOiB3aGVuIHNldCBhbGxvd3MgdG8gcmVxdWVzdCB0aGUg c2FtZSByaW5nCj4gKyAqCSBmZXcgdGltZXMuIEl0J3MgdXNhYmxlIHdoZW4gdGhlIHNhbWUgcmlu ZyBpcyB1c2VkIGFzIEZyZWUgSG9zdCBQRCByaW5nCj4gKyAqCSBmb3IgZGlmZmVyZW50IGZsb3dz LCBmb3IgZXhhbXBsZS4KPiArICoJIE5vdGU6IExvY2tpbmcgc2hvdWxkIGJlIGRvbmUgYnkgY29u c3VtZXIgaWYgcmVxdWlyZWQKPiArICovCj4gK3N0cnVjdCBrM19yaW5nX2NmZyB7Cj4gKwl1MzIg c2l6ZTsKPiArCWVudW0gazNfcmluZ19zaXplIGVsbV9zaXplOwo+ICsJZW51bSBrM19yaW5nX21v ZGUgbW9kZTsKPiArI2RlZmluZSBLM19SSU5HQUNDX1JJTkdfU0hBUkVEIEJJVCgxKQo+ICsJdTMy IGZsYWdzOwo+ICt9Owo+ICsKPiArI2RlZmluZSBLM19SSU5HQUNDX1JJTkdfSURfQU5ZICgtMSkK PiArCj4gKy8qKgo+ICsgKiBvZl9rM19yaW5nYWNjX2dldF9ieV9waGFuZGxlIC0gZmluZCBhIFJB IGJ5IHBoYW5kbGUgcHJvcGVydHkKPiArICogQG5wOiBkZXZpY2Ugbm9kZQo+ICsgKiBAcHJvcG5h bWU6IHByb3BlcnR5IG5hbWUgY29udGFpbmluZyBwaGFuZGxlIG9uIFJBIG5vZGUKPiArICoKPiAr ICogUmV0dXJucyBwb2ludGVyIG9uIHRoZSBSQSAtIHN0cnVjdCBrM19yaW5nYWNjCj4gKyAqIG9y IC1FTk9ERVYgaWYgbm90IGZvdW5kLAo+ICsgKiBvciAtRVBST0JFX0RFRkVSIGlmIG5vdCB5ZXQg cmVnaXN0ZXJlZAo+ICsgKi8KPiArc3RydWN0IGszX3JpbmdhY2MgKm9mX2szX3JpbmdhY2NfZ2V0 X2J5X3BoYW5kbGUoc3RydWN0IGRldmljZV9ub2RlICpucCwKPiArCQkJCQkJY29uc3QgY2hhciAq cHJvcGVydHkpOwo+ICsKPiArI2RlZmluZSBLM19SSU5HQUNDX1JJTkdfVVNFX1BST1hZIEJJVCgx KQo+ICsKPiArLyoqCj4gKyAqIGszX3JpbmdhY2NfcmVxdWVzdF9yaW5nIC0gcmVxdWVzdCByaW5n IGZyb20gcmluZ2FjYwo+ICsgKiBAcmluZ2FjYzogcG9pbnRlciBvbiByaW5nYWNjCj4gKyAqIEBp ZDogcmluZyBpZCBvciBLM19SSU5HQUNDX1JJTkdfSURfQU5ZIGZvciBhbnkgZ2VuZXJhbCBwdXJw b3NlIHJpbmcKPiArICogQGZsYWdzOgo+ICsgKglASzNfUklOR0FDQ19SSU5HX1VTRV9QUk9YWTog aWYgc2V0IC0gcHJveHkgd2lsbCBiZSBhbGxvY2F0ZWQgYW5kCj4gKyAqCQl1c2VkIHRvIGFjY2Vz cyByaW5nIG1lbW9yeS4gU29wcG9ydGVkIG9ubHkgZm9yIHJpbmdzIGluCj4gKyAqCQlNZXNzYWdl L0NyZWRlbnRpYWxzL1F1ZXVlIG1vZGUuCj4gKyAqCj4gKyAqIFJldHVybnMgcG9pbnRlciBvbiB0 aGUgUmluZyAtIHN0cnVjdCBrM19yaW5nCj4gKyAqIG9yIE5VTEwgaW4gY2FzZSBvZiBmYWlsdXJl Lgo+ICsgKi8KPiArc3RydWN0IGszX3JpbmcgKmszX3JpbmdhY2NfcmVxdWVzdF9yaW5nKHN0cnVj dCBrM19yaW5nYWNjICpyaW5nYWNjLAo+ICsJCQkJCWludCBpZCwgdTMyIGZsYWdzKTsKPiArCj4g Ky8qKgo+ICsgKiBrM19yaW5nYWNjX3JpbmdfcmVzZXQgLSByaW5nIHJlc2V0Cj4gKyAqIEByaW5n OiBwb2ludGVyIG9uIFJpbmcKPiArICoKPiArICogUmVzZXRzIHJpbmcgaW50ZXJuYWwgc3RhdGUg KChodylvY2MsIChodylpZHgpLgo+ICsgKiBUT0RPX0dTOiA/IFJpbmcgY2FuIGJlIHJldXNlZCB3 aXRob3V0IHJlY29uZmlndXJhdGlvbgo+ICsgKi8KPiArdm9pZCBrM19yaW5nYWNjX3JpbmdfcmVz ZXQoc3RydWN0IGszX3JpbmcgKnJpbmcpOwo+ICsvKioKPiArICogazNfcmluZ2FjY19yaW5nX3Jl c2V0IC0gcmluZyByZXNldCBmb3IgRE1BIHJpbmdzCj4gKyAqIEByaW5nOiBwb2ludGVyIG9uIFJp bmcKPiArICoKPiArICogUmVzZXRzIHJpbmcgaW50ZXJuYWwgc3RhdGUgKChodylvY2MsIChodylp ZHgpLiBTaG91bGQgYmUgdXNlZCBmb3IgcmluZ3MKPiArICogd2hpY2ggYXJlIHJlYWQgYnkgSzMg VURNQSwgbGlrZSBUWCBvciBGcmVlIEhvc3QgUEQgcmluZ3MuCj4gKyAqLwo+ICt2b2lkIGszX3Jp bmdhY2NfcmluZ19yZXNldF9kbWEoc3RydWN0IGszX3JpbmcgKnJpbmcsIHUzMiBvY2MpOwo+ICsK PiArLyoqCj4gKyAqIGszX3JpbmdhY2NfcmluZ19mcmVlIC0gcmluZyBmcmVlCj4gKyAqIEByaW5n OiBwb2ludGVyIG9uIFJpbmcKPiArICoKPiArICogUmVzZXRzIHJpbmcgYW5kIGZyZWUgYWxsIGFs b2NhdGVkIHJlc291cmNlcy4KPiArICovCj4gK2ludCBrM19yaW5nYWNjX3JpbmdfZnJlZShzdHJ1 Y3QgazNfcmluZyAqcmluZyk7Cj4gKwo+ICsvKioKPiArICogazNfcmluZ2FjY19nZXRfcmluZ19p ZCAtIEdldCB0aGUgUmluZyBJRAo+ICsgKiBAcmluZzogcG9pbnRlciBvbiByaW5nCj4gKyAqCj4g KyAqIFJldHVybnMgdGhlIFJpbmcgSUQKPiArICovCj4gK3UzMiBrM19yaW5nYWNjX2dldF9yaW5n X2lkKHN0cnVjdCBrM19yaW5nICpyaW5nKTsKPiArCj4gKy8qKgo+ICsgKiBrM19yaW5nYWNjX2dl dF9yaW5nX2lycV9udW0gLSBHZXQgdGhlIGlycSBudW1iZXIgZm9yIHRoZSByaW5nCj4gKyAqIEBy aW5nOiBwb2ludGVyIG9uIHJpbmcKPiArICoKPiArICogUmV0dXJucyB0aGUgaW50ZXJydXB0IG51 bWJlciB3aGljaCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IHRoZSBpbnRlcnJ1cHQKPiArICovCj4g K2ludCBrM19yaW5nYWNjX2dldF9yaW5nX2lycV9udW0oc3RydWN0IGszX3JpbmcgKnJpbmcpOwo+ ICsKPiArLyoqCj4gKyAqIGszX3JpbmdhY2NfcmluZ19jZmcgLSByaW5nIGNvbmZpZ3VyZQo+ICsg KiBAcmluZzogcG9pbnRlciBvbiByaW5nCj4gKyAqIEBjZmc6IFJpbmcgY29uZmlndXJhdGlvbiBw YXJhbWV0ZXJzIChzZWUgJnN0cnVjdCBrM19yaW5nX2NmZykKPiArICoKPiArICogQ29uZmlndXJl cyByaW5nLCBpbmNsdWRpbmcgcmluZyBtZW1vcnkgYWxsb2NhdGlvbi4KPiArICogUmV0dXJucyAw IG9uIHN1Y2Nlc3MsIGVycm5vIG90aGVyd2lzZS4KPiArICovCj4gK2ludCBrM19yaW5nYWNjX3Jp bmdfY2ZnKHN0cnVjdCBrM19yaW5nICpyaW5nLCBzdHJ1Y3QgazNfcmluZ19jZmcgKmNmZyk7Cj4g Kwo+ICsvKioKPiArICogazNfcmluZ2FjY19yaW5nX2dldF9zaXplIC0gZ2V0IHJpbmcgc2l6ZQo+ ICsgKiBAcmluZzogcG9pbnRlciBvbiByaW5nCj4gKyAqCj4gKyAqIFJldHVybnMgcmluZyBzaXpl IGluIG51bWJlciBvZiBlbGVtZW50cy4KPiArICovCj4gK3UzMiBrM19yaW5nYWNjX3JpbmdfZ2V0 X3NpemUoc3RydWN0IGszX3JpbmcgKnJpbmcpOwo+ICsKPiArLyoqCj4gKyAqIGszX3JpbmdhY2Nf cmluZ19nZXRfZnJlZSAtIGdldCBmcmVlIGVsZW1lbnRzCj4gKyAqIEByaW5nOiBwb2ludGVyIG9u IHJpbmcKPiArICoKPiArICogUmV0dXJucyBudW1iZXIgb2YgZnJlZSBlbGVtZW50cyBpbiB0aGUg cmluZy4KPiArICovCj4gK3UzMiBrM19yaW5nYWNjX3JpbmdfZ2V0X2ZyZWUoc3RydWN0IGszX3Jp bmcgKnJpbmcpOwo+ICsKPiArLyoqCj4gKyAqIGszX3JpbmdhY2NfcmluZ19nZXRfb2NjIC0gZ2V0 IHJpbmcgb2NjdXBhbmN5Cj4gKyAqIEByaW5nOiBwb2ludGVyIG9uIHJpbmcKPiArICoKPiArICog UmV0dXJucyB0b3RhbCBudW1iZXIgb2YgdmFsaWQgZW50cmllcyBvbiB0aGUgcmluZwo+ICsgKi8K PiArdTMyIGszX3JpbmdhY2NfcmluZ19nZXRfb2NjKHN0cnVjdCBrM19yaW5nICpyaW5nKTsKPiAr Cj4gKy8qKgo+ICsgKiBrM19yaW5nYWNjX3JpbmdfaXNfZnVsbCAtIGNoZWNrcyBpZiByaW5nIGlz IGZ1bGwKPiArICogQHJpbmc6IHBvaW50ZXIgb24gcmluZwo+ICsgKgo+ICsgKiBSZXR1cm5zIHRy dWUgaWYgdGhlIHJpbmcgaXMgZnVsbAo+ICsgKi8KPiArdTMyIGszX3JpbmdhY2NfcmluZ19pc19m dWxsKHN0cnVjdCBrM19yaW5nICpyaW5nKTsKPiArCj4gKy8qKgo+ICsgKiBrM19yaW5nYWNjX3Jp bmdfcHVzaCAtIHB1c2ggZWxlbWVudCB0byB0aGUgcmluZyB0YWlsCj4gKyAqIEByaW5nOiBwb2lu dGVyIG9uIHJpbmcKPiArICogQGVsZW06IHBvaW50ZXIgb24gcmluZyBlbGVtZW50IGJ1ZmZlcgo+ ICsgKgo+ICsgKiBQdXNoIG9uZSByaW5nIGVsZW1lbnQgdG8gdGhlIHJpbmcgdGFpbC4gU2l6ZSBv ZiB0aGUgcmluZyBlbGVtZW50IGlzCj4gKyAqIGRldGVybWluZWQgYnkgcmluZyBjb25maWd1cmF0 aW9uICZzdHJ1Y3QgazNfcmluZ19jZmcgZWxtX3NpemUuCj4gKyAqCj4gKyAqIFJldHVybnMgMCBv biBzdWNjZXNzLCBlcnJubyBvdGhlcndpc2UuCj4gKyAqLwo+ICtpbnQgazNfcmluZ2FjY19yaW5n X3B1c2goc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOwo+ICsKPiArLyoqCj4gKyAq IGszX3JpbmdhY2NfcmluZ19wb3AgLSBwb3AgZWxlbWVudCBmcm9tIHRoZSByaW5nIGhlYWQKPiAr ICogQHJpbmc6IHBvaW50ZXIgb24gcmluZwo+ICsgKiBAZWxlbTogcG9pbnRlciBvbiByaW5nIGVs ZW1lbnQgYnVmZmVyCj4gKyAqCj4gKyAqIFB1c2ggb25lIHJpbmcgZWxlbWVudCBmcm9tIHRoZSBy aW5nIGhlYWQuIFNpemUgb2YgdGhlIHJpbmcgZWxlbWVudCBpcwo+ICsgKiBkZXRlcm1pbmVkIGJ5 IHJpbmcgY29uZmlndXJhdGlvbiAmc3RydWN0IGszX3JpbmdfY2ZnIGVsbV9zaXplLi4KPiArICoK PiArICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG90aGVyd2lzZS4KPiArICovCj4gK2lu dCBrM19yaW5nYWNjX3JpbmdfcG9wKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKTsK PiArCj4gKy8qKgo+ICsgKiBrM19yaW5nYWNjX3JpbmdfcHVzaF9oZWFkIC0gcHVzaCBlbGVtZW50 IHRvIHRoZSByaW5nIGhlYWQKPiArICogQHJpbmc6IHBvaW50ZXIgb24gcmluZwo+ICsgKiBAZWxl bTogcG9pbnRlciBvbiByaW5nIGVsZW1lbnQgYnVmZmVyCj4gKyAqCj4gKyAqIFB1c2ggb25lIHJp bmcgZWxlbWVudCB0byB0aGUgcmluZyBoZWFkLiBTaXplIG9mIHRoZSByaW5nIGVsZW1lbnQgaXMK PiArICogZGV0ZXJtaW5lZCBieSByaW5nIGNvbmZpZ3VyYXRpb24gJnN0cnVjdCBrM19yaW5nX2Nm ZyBlbG1fc2l6ZS4KPiArICoKPiArICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG90aGVy d2lzZS4KPiArICogTm90IFN1cHBvcnRlZCBieSByaW5nIG1vZGVzOiBLM19SSU5HQUNDX1JJTkdf TU9ERV9SSU5HCj4gKyAqLwo+ICtpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hfaGVhZChzdHJ1Y3Qg azNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7Cj4gKwo+ICsvKioKPiArICogazNfcmluZ2FjY19y aW5nX3BvcF90YWlsIC0gcG9wIGVsZW1lbnQgZnJvbSB0aGUgcmluZyB0YWlsCj4gKyAqIEByaW5n OiBwb2ludGVyIG9uIHJpbmcKPiArICogQGVsZW06IHBvaW50ZXIgb24gcmluZyBlbGVtZW50IGJ1 ZmZlcgo+ICsgKgo+ICsgKiBQdXNoIG9uZSByaW5nIGVsZW1lbnQgZnJvbSB0aGUgcmluZyB0YWls LiBTaXplIG9mIHRoZSByaW5nIGVsZW1lbnQgaXMKPiArICogZGV0ZXJtaW5lZCBieSByaW5nIGNv bmZpZ3VyYXRpb24gJnN0cnVjdCBrM19yaW5nX2NmZyBlbG1fc2l6ZS4KPiArICoKPiArICogUmV0 dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG90aGVyd2lzZS4KPiArICogTm90IFN1cHBvcnRlZCBi eSByaW5nIG1vZGVzOiBLM19SSU5HQUNDX1JJTkdfTU9ERV9SSU5HCj4gKyAqLwo+ICtpbnQgazNf cmluZ2FjY19yaW5nX3BvcF90YWlsKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKTsK PiArCj4gK3UzMiBrM19yaW5nYWNjX2dldF90aXNjaV9kZXZfaWQoc3RydWN0IGszX3JpbmcgKnJp bmcpOwo+ICsKPiArLyoqCj4gKyAqIERlYnVnZ2luZyBkZWZpbml0aW9ucwo+ICsgKiBUT0RPOiBt aWdodCBiZSByZW1vdmVkCj4gKyAqLwo+ICsjaWZkZWYgQ09ORklHX1RJX0szX1JJTkdBQ0NfREVC VUcKPiArdm9pZCBrM19yaW5nYWNjX3JpbmdfZHVtcChzdHJ1Y3QgazNfcmluZyAqcmluZyk7Cj4g KyNlbHNlCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBrM19yaW5nYWNjX3JpbmdfZHVtcChzdHJ1Y3Qg azNfcmluZyAqcmluZykge307Cj4gKyNlbmRpZgo+ICsKPiArI2VuZGlmIC8qIF9fU09DX1RJX0sz X1JJTkdBQ0NfQVBJX0hfICovCj4gCgotLQpUZXhhcyBJbnN0cnVtZW50cyBGaW5sYW5kIE95LCBQ b3Jra2FsYW5rYXR1IDIyLCAwMDE4MCBIZWxzaW5raS4gWS10dW5udXMvQnVzaW5lc3MgSUQ6IDA2 MTU1MjEtNC4gS290aXBhaWtrYS9Eb21pY2lsZTogSGVsc2lua2kKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBs aXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5m cmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK