From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT 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 E9199C433FF for ; Tue, 30 Jul 2019 09:36:55 +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 B2E0120665 for ; Tue, 30 Jul 2019 09:36:55 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="QNg2tKMO"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="N7Cgthcd" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B2E0120665 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-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=VP01MOw9FMezNTWSH2zMcCOC9pKjpCVS2jK4PUHoqYc=; b=QNg2tKMOMIEEEY MO9y7paHSaVO06IV8gR3aDj+OztxRzdq0WaFho2I4Xu5qDdERTfmqkuaKg6PwznkNnTl0b6tGKRgm Dk+78W3T/tfsLUv3z1+TyaajrU+dIXYktjb+LfJV9w9PpMeybkChZQFtfhEsRSfx8bgEkHHf+XHz4 YvFzdHV0wAyaELqIu+sBpSl4XTAIZFKcqfhELdJ/KRhXYb/yAC0lTx6KOTEkJd7O34M+18N8mkZXr 9KBJ7TkDxJ8lo5wZkK/HqU08bJlxFHv64r7RObHJ0vR5WYGFJ7IPHI+A/T1K5AgyWnghW7nWC+R9T 8XMl169XLE6vPpYNkZLg==; 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 1hsOYx-0007yD-46; Tue, 30 Jul 2019 09:36:55 +0000 Received: from fllv0016.ext.ti.com ([198.47.19.142]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hsOXC-0005qk-28 for linux-arm-kernel@lists.infradead.org; Tue, 30 Jul 2019 09:35:13 +0000 Received: from lelv0265.itg.ti.com ([10.180.67.224]) by fllv0016.ext.ti.com (8.15.2/8.15.2) with ESMTP id x6U9YwtO100670; Tue, 30 Jul 2019 04:34:58 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1564479298; bh=dSKVHsu0/TzkvLv9pNbbMbHLG0w6sxDQK5hLCa7QfBI=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=N7CgthcdnSF4L/TE55eucT8UGuTJwASfq4FSugvNjLgh1r4YFJdOM41J7ksrCqP6q tn1N6npyFn8GMtFJfsVugQbrNIA+z8GO2ttrLKQvXq2A7LajvEq8rHxekMmBlH7Z/Z H6YaKMt3x4zp2bR2XCUulkHx2n2Lft6/I2bzEGPo= Received: from DFLE105.ent.ti.com (dfle105.ent.ti.com [10.64.6.26]) by lelv0265.itg.ti.com (8.15.2/8.15.2) with ESMTPS id x6U9YwYx048266 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 30 Jul 2019 04:34:58 -0500 Received: from DFLE107.ent.ti.com (10.64.6.28) by DFLE105.ent.ti.com (10.64.6.26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Tue, 30 Jul 2019 04:34:57 -0500 Received: from lelv0326.itg.ti.com (10.180.67.84) by DFLE107.ent.ti.com (10.64.6.28) 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; Tue, 30 Jul 2019 04:34:57 -0500 Received: from feketebors.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by lelv0326.itg.ti.com (8.15.2/8.15.2) with ESMTP id x6U9YkTx027547; Tue, 30 Jul 2019 04:34:53 -0500 From: Peter Ujfalusi To: , , , Subject: [PATCH v2 02/14] soc: ti: k3: add navss ringacc driver Date: Tue, 30 Jul 2019 12:34:38 +0300 Message-ID: <20190730093450.12664-3-peter.ujfalusi@ti.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190730093450.12664-1-peter.ujfalusi@ti.com> References: <20190730093450.12664-1-peter.ujfalusi@ti.com> MIME-Version: 1.0 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-20190730_023506_289416_AD626D4F X-CRM114-Status: GOOD ( 24.42 ) 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, t-kristo@ti.com, tony@atomide.com, dmaengine@vger.kernel.org, dan.j.williams@intel.com, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org RnJvbTogR3J5Z29yaWkgU3RyYXNoa28gPGdyeWdvcmlpLnN0cmFzaGtvQHRpLmNvbT4KClRoZSBS aW5nIEFjY2VsZXJhdG9yIChSSU5HQUNDIG9yIFJBKSBwcm92aWRlcyBoYXJkd2FyZSBhY2NlbGVy YXRpb24gdG8KZW5hYmxlIHN0cmFpZ2h0Zm9yd2FyZCBwYXNzaW5nIG9mIHdvcmsgYmV0d2VlbiBh IHByb2R1Y2VyIGFuZCBhIGNvbnN1bWVyLgpUaGVyZSBpcyBvbmUgUklOR0FDQyBtb2R1bGUgcGVy IE5BVlNTIG9uIFRJIEFNNjV4IFNvQ3MuCgpUaGUgUklOR0FDQyBjb252ZXJ0cyBjb25zdGFudC1h ZGRyZXNzIHJlYWQgYW5kIHdyaXRlIGFjY2Vzc2VzIHRvIGVxdWl2YWxlbnQKcmVhZCBvciB3cml0 ZSBhY2Nlc3NlcyB0byBhIGNpcmN1bGFyIGRhdGEgc3RydWN0dXJlIGluIG1lbW9yeS4gVGhlIFJJ TkdBQ0MKZWxpbWluYXRlcyB0aGUgbmVlZCBmb3IgZWFjaCBETUEgY29udHJvbGxlciB3aGljaCBu ZWVkcyB0byBhY2Nlc3MgcmluZwplbGVtZW50cyBmcm9tIGhhdmluZyB0byBrbm93IHRoZSBjdXJy ZW50IHN0YXRlIG9mIHRoZSByaW5nIChiYXNlIGFkZHJlc3MsCmN1cnJlbnQgb2Zmc2V0KS4gVGhl IERNQSBjb250cm9sbGVyIHBlcmZvcm1zIGEgcmVhZCBvciB3cml0ZSBhY2Nlc3MgdG8gYQpzcGVj aWZpYyBhZGRyZXNzIHJhbmdlICh3aGljaCBtYXBzIHRvIHRoZSBzb3VyY2UgaW50ZXJmYWNlIG9u IHRoZSBSSU5HQUNDKQphbmQgdGhlIFJJTkdBQ0MgcmVwbGFjZXMgdGhlIGFkZHJlc3MgZm9yIHRo ZSB0cmFuc2FjdGlvbiB3aXRoIGEgbmV3IGFkZHJlc3MKd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhl IGhlYWQgb3IgdGFpbCBlbGVtZW50IG9mIHRoZSByaW5nIChoZWFkIGZvciByZWFkcywKdGFpbCBm b3Igd3JpdGVzKS4gU2luY2UgdGhlIFJJTkdBQ0MgbWFpbnRhaW5zIHRoZSBzdGF0ZSwgbXVsdGlw bGUgRE1BCmNvbnRyb2xsZXJzIG9yIGNoYW5uZWxzIGFyZSBhbGxvd2VkIHRvIGNvaGVyZW50bHkg c2hhcmUgdGhlIHNhbWUgcmluZ3MgYXMKYXBwbGljYWJsZS4gVGhlIFJJTkdBQ0MgaXMgYWJsZSB0 byBwbGFjZSBkYXRhIHdoaWNoIGlzIGRlc3RpbmVkIHRvd2FyZHMKc29mdHdhcmUgaW50byBjYWNo ZWQgbWVtb3J5IGRpcmVjdGx5LgoKU3VwcG9ydGVkIHJpbmcgbW9kZXM6Ci0gUmluZyBNb2RlCi0g TWVzc2FnaW5nIE1vZGUKLSBDcmVkZW50aWFscyBNb2RlCi0gUXVldWUgTWFuYWdlciBNb2RlCgpU SS1TQ0kgaW50ZWdyYXRpb246CgpUZXhhcyBJbnN0cnVtZW50J3MgU3lzdGVtIENvbnRyb2wgSW50 ZXJmYWNlIChUSS1TQ0kpIE1lc3NhZ2UgUHJvdG9jb2wgbm93CmhhcyBjb250cm9sIG92ZXIgUmlu Z2FjYyBtb2R1bGUgcmVzb3VyY2VzIG1hbmFnZW1lbnQgKFJNKSBhbmQgUmluZ3MKY29uZmlndXJh dGlvbi4KClRoZSBjb3JyZXNwb25kaW5nIHN1cHBvcnQgb2YgVEktU0NJIFJpbmdhY2MgbW9kdWxl IFJNIHByb3RvY29sCmludHJvZHVjZWQgYXMgb3B0aW9uIHRocm91Z2ggRFQgcGFyYW1ldGVyczoK LSB0aSxzY2k6IHBoYW5kbGUgb24gVEktU0NJIGZpcm13YXJlIGNvbnRyb2xsZXIgRFQgbm9kZQot IHRpLHNjaS1kZXYtaWQ6IFRJLVNDSSBkZXZpY2UgaWRlbnRpZmllciBhcyBwZXIgVEktU0NJIGZp cm13YXJlIHNwZWMKCmlmIGJvdGggcGFyYW1ldGVycyBwcmVzZW50IC0gUmluZ2FjYyBkcml2ZXIg d2lsbCBjb25maWd1cmUvZnJlZS9yZXNldCBSaW5ncwp1c2luZyBUSS1TQ0kgTWVzc2FnZSBSaW5n YWNjIFJNIFByb3RvY29sLgoKVGhlIFJpbmdhY2MgZHJpdmVyIG1hbmFnZXMgUmluZ3MgYWxsb2Nh dGlvbiBieSBpdHNlbGYgbm93IGFuZCByZXF1ZXN0cwpUSS1TQ0kgZmlybXdhcmUgdG8gYWxsb2Nh dGUgYW5kIGNvbmZpZ3VyZSBzcGVjaWZpYyBSaW5ncyBvbmx5LiBJdCdzIGRvbmUKdGhpcyB3YXkg YmVjYXVzZSwgTGludXggZHJpdmVyIGltcGxlbWVudHMgdHdvIHN0YWdlIFJpbmdzIGFsbG9jYXRp b24gYW5kCmNvbmZpZ3VyYXRpb24gKGFsbG9jYXRlIHJpbmcgYW5kIGNvbmZpZ3VyZSByaW5nKSB3 aGlsZSBJLVNDSSBNZXNzYWdlClByb3RvY29sIHN1cHBvcnRzIG9ubHkgb25lIGNvbWJpbmVkIG9w ZXJhdGlvbiAoYWxsb2NhdGUrY29uZmlndXJlKS4KCkdyeWdvcmlpIFN0cmFzaGtvIDxncnlnb3Jp aS5zdHJhc2hrb0B0aS5jb20+ClNpZ25lZC1vZmYtYnk6IFBldGVyIFVqZmFsdXNpIDxwZXRlci51 amZhbHVzaUB0aS5jb20+Ci0tLQogZHJpdmVycy9zb2MvdGkvS2NvbmZpZyAgICAgICAgICAgIHwg ICAxNyArCiBkcml2ZXJzL3NvYy90aS9NYWtlZmlsZSAgICAgICAgICAgfCAgICAxICsKIGRyaXZl cnMvc29jL3RpL2szLXJpbmdhY2MuYyAgICAgICB8IDExOTEgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIGluY2x1ZGUvbGludXgvc29jL3RpL2szLXJpbmdhY2MuaCB8ICAyNjIgKysrKysr KwogNCBmaWxlcyBjaGFuZ2VkLCAxNDcxIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL3NvYy90aS9rMy1yaW5nYWNjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRl L2xpbnV4L3NvYy90aS9rMy1yaW5nYWNjLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy90aS9L Y29uZmlnIGIvZHJpdmVycy9zb2MvdGkvS2NvbmZpZwppbmRleCBjZjU0NWY0MjhkMDMuLjEwYzc2 ZmFhNTAzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zb2MvdGkvS2NvbmZpZworKysgYi9kcml2ZXJz L3NvYy90aS9LY29uZmlnCkBAIC04MCw2ICs4MCwyMyBAQCBjb25maWcgVElfU0NJX1BNX0RPTUFJ TlMKIAkgIGNhbGxlZCB0aV9zY2lfcG1fZG9tYWlucy4gTm90ZSB0aGlzIGlzIG5lZWRlZCBlYXJs eSBpbiBib290IGJlZm9yZQogCSAgcm9vdGZzIG1heSBiZSBhdmFpbGFibGUuCiAKK2NvbmZpZyBU SV9LM19SSU5HQUNDCisJdHJpc3RhdGUgIkszIFJpbmcgYWNjZWxlcmF0b3IgU3ViIFN5c3RlbSIK KwlkZXBlbmRzIG9uIEFSQ0hfSzMgfHwgQ09NUElMRV9URVNUCisJZGVwZW5kcyBvbiBUSV9TQ0lf SU5UQV9JUlFDSElQCisJZGVmYXVsdCB5CisJaGVscAorCSAgU2F5IHkgaGVyZSB0byBzdXBwb3J0 IHRoZSBLMyBSaW5nIGFjY2VsZXJhdG9yIG1vZHVsZS4KKwkgIFRoZSBSaW5nIEFjY2VsZXJhdG9y IChSSU5HQUNDIG9yIFJBKSAgcHJvdmlkZXMgaGFyZHdhcmUgYWNjZWxlcmF0aW9uCisJICB0byBl bmFibGUgc3RyYWlnaHRmb3J3YXJkIHBhc3Npbmcgb2Ygd29yayBiZXR3ZWVuIGEgcHJvZHVjZXIK KwkgIGFuZCBhIGNvbnN1bWVyLiBUaGVyZSBpcyBvbmUgUklOR0FDQyBtb2R1bGUgcGVyIE5BVlNT IG9uIFRJIEFNNjV4IFNvQ3MKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBUSV9LM19S SU5HQUNDX0RFQlVHCisJdHJpc3RhdGUgIkszIFJpbmcgYWNjZWxlcmF0b3IgU3ViIFN5c3RlbSB0 ZXN0cyBhbmQgZGVidWciCisJZGVwZW5kcyBvbiBUSV9LM19SSU5HQUNDCisJZGVmYXVsdCBuCisK IGVuZGlmICMgU09DX1RJCiAKIGNvbmZpZyBUSV9TQ0lfSU5UQV9NU0lfRE9NQUlOCmRpZmYgLS1n aXQgYS9kcml2ZXJzL3NvYy90aS9NYWtlZmlsZSBiL2RyaXZlcnMvc29jL3RpL01ha2VmaWxlCmlu ZGV4IGIzODY4ZDM5MmQ0Zi4uY2M0YmM4YjA4YmY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NvYy90 aS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3NvYy90aS9NYWtlZmlsZQpAQCAtOSwzICs5LDQgQEAg b2JqLSQoQ09ORklHX0FNWDNfUE0pCQkJKz0gcG0zM3h4Lm8KIG9iai0kKENPTkZJR19XS1VQX00z X0lQQykJCSs9IHdrdXBfbTNfaXBjLm8KIG9iai0kKENPTkZJR19USV9TQ0lfUE1fRE9NQUlOUykJ CSs9IHRpX3NjaV9wbV9kb21haW5zLm8KIG9iai0kKENPTkZJR19USV9TQ0lfSU5UQV9NU0lfRE9N QUlOKQkrPSB0aV9zY2lfaW50YV9tc2kubworb2JqLSQoQ09ORklHX1RJX0szX1JJTkdBQ0MpCQkr PSBrMy1yaW5nYWNjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL3RpL2szLXJpbmdhY2MuYyBi L2RyaXZlcnMvc29jL3RpL2szLXJpbmdhY2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLjQwMWRmYzk2MzMxOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc29j L3RpL2szLXJpbmdhY2MuYwpAQCAtMCwwICsxLDExOTEgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wCisvKgorICogVEkgSzMgTkFWU1MgUmluZyBBY2NlbGVyYXRvciBzdWJz eXN0ZW0gZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE5IFRleGFzIEluc3RydW1lbnRz IEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tCisgKi8KKworI2luY2x1ZGUgPGxpbnV4 L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9t b2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3Jt X2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxsaW51 eC9zb2MvdGkvazMtcmluZ2FjYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NvYy90aS90aV9zY2lfcHJv dG9jb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2MvdGkvdGlfc2NpX2ludGFfbXNpLmg+CisjaW5j bHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaXJxZG9tYWluLmg+CisKK3N0 YXRpYyBMSVNUX0hFQUQoazNfcmluZ2FjY19saXN0KTsKK3N0YXRpYyBERUZJTkVfTVVURVgoazNf cmluZ2FjY19saXN0X2xvY2spOworCisjaWZkZWYgQ09ORklHX1RJX0szX1JJTkdBQ0NfREVCVUcK KyNkZWZpbmUJazNfbmF2X2RiZyhkZXYsIGFyZy4uLikgZGV2X2VycihkZXYsIGFyZykKK3N0YXRp Ywl2b2lkIGRiZ193cml0ZWwodTMyIHYsIHZvaWQgX19pb21lbSAqcmVnKQoreworCXByX2Vycigi V1JJVEVMKDMyKTogdiglMDhYKS0tPnJlZyglcClcbiIsIHYsIHJlZyk7CisJd3JpdGVsKHYsIHJl Zyk7Cit9CisKK3N0YXRpYwl1MzIgZGJnX3JlYWRsKHZvaWQgX19pb21lbSAqcmVnKQoreworCXUz MiB2OworCisJdiA9IHJlYWRsKHJlZyk7CisJcHJfZXJyKCJSRUFETCgzMik6IHYoJTA4WCk8LS1y ZWcoJXApXG4iLCB2LCByZWcpOworCXJldHVybiB2OworfQorI2Vsc2UKKyNkZWZpbmUJazNfbmF2 X2RiZyhkZXYsIGFyZy4uLikgZGV2X2RiZyhkZXYsIGFyZykKKyNkZWZpbmUgZGJnX3dyaXRlbCh2 LCByZWcpIHdyaXRlbCh2LCByZWcpCisKKyNkZWZpbmUgZGJnX3JlYWRsKHJlZykgcmVhZGwocmVn KQorI2VuZGlmCisKKyNkZWZpbmUgSzNfUklOR0FDQ19DRkdfUklOR19TSVpFX0VMQ05UX01BU0sJ CUdFTk1BU0soMTksIDApCisKKy8qKgorICogc3RydWN0IGszX3JpbmdfcnRfcmVncyAtICBUaGUg UkEgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXJzIHJlZ2lvbgorICovCitzdHJ1Y3QgazNfcmluZ19y dF9yZWdzIHsKKwl1MzIJcmVzdl8xNls0XTsKKwl1MzIJZGI7CQkvKiBSVCBSaW5nIE4gRG9vcmJl bGwgUmVnaXN0ZXIgKi8KKwl1MzIJcmVzdl80WzFdOworCXUzMglvY2M7CQkvKiBSVCBSaW5nIE4g T2NjdXBhbmN5IFJlZ2lzdGVyICovCisJdTMyCWluZHg7CQkvKiBSVCBSaW5nIE4gQ3VycmVudCBJ bmRleCBSZWdpc3RlciAqLworCXUzMglod29jYzsJCS8qIFJUIFJpbmcgTiBIYXJkd2FyZSBPY2N1 cGFuY3kgUmVnaXN0ZXIgKi8KKwl1MzIJaHdpbmR4OwkJLyogUlQgUmluZyBOIEN1cnJlbnQgSW5k ZXggUmVnaXN0ZXIgKi8KK307CisKKyNkZWZpbmUgSzNfUklOR0FDQ19SVF9SRUdTX1NURVAJMHgx MDAwCisKKy8qKgorICogc3RydWN0IGszX3JpbmdfZmlmb19yZWdzIC0gIFRoZSBSaW5nIEFjY2Vs ZXJhdG9yIFF1ZXVlcyBSZWdpc3RlcnMgcmVnaW9uCisgKi8KK3N0cnVjdCBrM19yaW5nX2ZpZm9f cmVncyB7CisJdTMyCWhlYWRfZGF0YVsxMjhdOwkJLyogUmluZyBIZWFkIEVudHJ5IERhdGEgUmVn aXN0ZXJzICovCisJdTMyCXRhaWxfZGF0YVsxMjhdOwkJLyogUmluZyBUYWlsIEVudHJ5IERhdGEg UmVnaXN0ZXJzICovCisJdTMyCXBlZWtfaGVhZF9kYXRhWzEyOF07CS8qIFJpbmcgUGVlayBIZWFk IEVudHJ5IERhdGEgUmVncyAqLworCXUzMglwZWVrX3RhaWxfZGF0YVsxMjhdOwkvKiBSaW5nIFBl ZWsgVGFpbCBFbnRyeSBEYXRhIFJlZ3MgKi8KK307CisKKy8qKgorICogc3RydWN0IGszX3Jpbmdh Y2NfcHJveHlfZ2NmZ19yZWdzIC0gUkEgUHJveHkgR2xvYmFsIENvbmZpZyBNTUlPIFJlZ2lvbgor ICovCitzdHJ1Y3QgazNfcmluZ2FjY19wcm94eV9nY2ZnX3JlZ3MgeworCXUzMglyZXZpc2lvbjsJ LyogUmV2aXNpb24gUmVnaXN0ZXIgKi8KKwl1MzIJY29uZmlnOwkJLyogQ29uZmlnIFJlZ2lzdGVy ICovCit9OworCisjZGVmaW5lIEszX1JJTkdBQ0NfUFJPWFlfQ0ZHX1RIUkVBRFNfTUFTSwkJR0VO TUFTSygxNSwgMCkKKworLyoqCisgKiBzdHJ1Y3QgazNfcmluZ2FjY19wcm94eV90YXJnZXRfcmVn cyAtICBQcm94eSBEYXRhcGF0aCBNTUlPIFJlZ2lvbgorICovCitzdHJ1Y3QgazNfcmluZ2FjY19w cm94eV90YXJnZXRfcmVncyB7CisJdTMyCWNvbnRyb2w7CS8qIFByb3h5IENvbnRyb2wgUmVnaXN0 ZXIgKi8KKwl1MzIJc3RhdHVzOwkJLyogUHJveHkgU3RhdHVzIFJlZ2lzdGVyICovCisJdTgJcmVz dl81MTJbNTA0XTsKKwl1MzIJZGF0YVsxMjhdOwkvKiBQcm94eSBEYXRhIFJlZ2lzdGVyICovCit9 OworCisjZGVmaW5lIEszX1JJTkdBQ0NfUFJPWFlfVEFSR0VUX1NURVAJMHgxMDAwCisjZGVmaW5l IEszX1JJTkdBQ0NfUFJPWFlfTk9UX1VTRUQJKC0xKQorCitlbnVtIGszX3JpbmdhY2NfcHJveHlf YWNjZXNzX21vZGUgeworCVBST1hZX0FDQ0VTU19NT0RFX0hFQUQgPSAwLAorCVBST1hZX0FDQ0VT U19NT0RFX1RBSUwgPSAxLAorCVBST1hZX0FDQ0VTU19NT0RFX1BFRUtfSEVBRCA9IDIsCisJUFJP WFlfQUNDRVNTX01PREVfUEVFS19UQUlMID0gMywKK307CisKKyNkZWZpbmUgSzNfUklOR0FDQ19G SUZPX1dJTkRPV19TSVpFX0JZVEVTICAoNTEyVSkKKyNkZWZpbmUgSzNfUklOR0FDQ19GSUZPX1JF R1NfU1RFUAkweDEwMDAKKyNkZWZpbmUgSzNfUklOR0FDQ19NQVhfREJfUklOR19DTlQgICAgKDEy N1UpCisKKy8qKgorICogc3RydWN0IGszX3Jpbmdfb3BzIC0gIFJpbmcgb3BlcmF0aW9ucworICov CitzdHJ1Y3QgazNfcmluZ19vcHMgeworCWludCAoKnB1c2hfdGFpbCkoc3RydWN0IGszX3Jpbmcg KnJpbmcsIHZvaWQgKmVsbSk7CisJaW50ICgqcHVzaF9oZWFkKShzdHJ1Y3QgazNfcmluZyAqcmlu Zywgdm9pZCAqZWxtKTsKKwlpbnQgKCpwb3BfdGFpbCkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZv aWQgKmVsbSk7CisJaW50ICgqcG9wX2hlYWQpKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICpl bG0pOworfTsKKworLyoqCisgKiBzdHJ1Y3QgazNfcmluZyAtIFJBIFJpbmcgZGVzY3JpcHRvcgor ICoKKyAqIEBydCAtIFJpbmcgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXJzCisgKiBAZmlmb3MgLSBS aW5nIHF1ZXVlcyByZWdpc3RlcnMKKyAqIEBwcm94eSAtIFJpbmcgUHJveHkgRGF0YXBhdGggcmVn aXN0ZXJzCisgKiBAcmluZ19tZW1fZG1hIC0gUmluZyBidWZmZXIgZG1hIGFkZHJlc3MKKyAqIEBy aW5nX21lbV92aXJ0IC0gUmluZyBidWZmZXIgdmlydCBhZGRyZXNzCisgKiBAb3BzIC0gUmluZyBv cGVyYXRpb25zCisgKiBAc2l6ZSAtIFJpbmcgc2l6ZSBpbiBlbGVtZW50cworICogQGVsbV9zaXpl IC0gU2l6ZSBvZiB0aGUgcmluZyBlbGVtZW50CisgKiBAbW9kZSAtIFJpbmcgbW9kZQorICogQGZs YWdzIC0gZmxhZ3MKKyAqIEBmcmVlIC0gTnVtYmVyIG9mIGZyZWUgZWxlbWVudHMKKyAqIEBvY2Mg LSBSaW5nIG9jY3VwYW5jeQorICogQHdpbmRleCAtIFdyaXRlIGluZGV4IChvbmx5IGZvciBASzNf UklOR0FDQ19SSU5HX01PREVfUklORykKKyAqIEByaW5kZXggLSBSZWFkIGluZGV4IChvbmx5IGZv ciBASzNfUklOR0FDQ19SSU5HX01PREVfUklORykKKyAqIEByaW5nX2lkIC0gUmluZyBJZAorICog QHBhcmVudCAtIFBvaW50ZXIgb24gc3RydWN0IEBrM19yaW5nYWNjCisgKiBAdXNlX2NvdW50IC0g VXNlIGNvdW50IGZvciBzaGFyZWQgcmluZ3MKKyAqIEBwcm94eV9pZCAtIFJBIFJpbmcgUHJveHkg SWQgKG9ubHkgaWYgQEszX1JJTkdBQ0NfUklOR19VU0VfUFJPWFkpCisgKi8KK3N0cnVjdCBrM19y aW5nIHsKKwlzdHJ1Y3QgazNfcmluZ19ydF9yZWdzIF9faW9tZW0gKnJ0OworCXN0cnVjdCBrM19y aW5nX2ZpZm9fcmVncyBfX2lvbWVtICpmaWZvczsKKwlzdHJ1Y3QgazNfcmluZ2FjY19wcm94eV90 YXJnZXRfcmVncyAgX19pb21lbSAqcHJveHk7CisJZG1hX2FkZHJfdAlyaW5nX21lbV9kbWE7CisJ dm9pZAkJKnJpbmdfbWVtX3ZpcnQ7CisJc3RydWN0IGszX3Jpbmdfb3BzICpvcHM7CisJdTMyCQlz aXplOworCWVudW0gazNfcmluZ19zaXplIGVsbV9zaXplOworCWVudW0gazNfcmluZ19tb2RlIG1v ZGU7CisJdTMyCQlmbGFnczsKKyNkZWZpbmUgSzNfUklOR19GTEFHX0JVU1kJQklUKDEpCisjZGVm aW5lIEszX1JJTkdfRkxBR19TSEFSRUQJQklUKDIpCisJdTMyCQlmcmVlOworCXUzMgkJb2NjOwor CXUzMgkJd2luZGV4OworCXUzMgkJcmluZGV4OworCXUzMgkJcmluZ19pZDsKKwlzdHJ1Y3QgazNf cmluZ2FjYwkqcGFyZW50OworCXUzMgkJdXNlX2NvdW50OworCWludAkJcHJveHlfaWQ7Cit9Owor CisvKioKKyAqIHN0cnVjdCBrM19yaW5nYWNjIC0gUmluZ3MgYWNjZWxlcmF0b3IgZGVzY3JpcHRv cgorICoKKyAqIEBkZXYgLSBwb2ludGVyIG9uIFJBIGRldmljZQorICogQHByb3h5X2djZmcgLSBS QSBwcm94eSBnbG9iYWwgY29uZmlnIHJlZ2lzdGVycworICogQHByb3h5X3RhcmdldF9iYXNlIC0g UkEgcHJveHkgZGF0YXBhdGggcmVnaW9uCisgKiBAbnVtX3JpbmdzIC0gbnVtYmVyIG9mIHJpbmcg aW4gUkEKKyAqIEBybV9ncF9yYW5nZSAtIGdlbmVyYWwgcHVycG9zZSByaW5ncyByYW5nZSBmcm9t IHRpc2NpCisgKiBAZG1hX3JpbmdfcmVzZXRfcXVpcmsgLSBETUEgcmVzZXQgdy9hIGVuYWJsZQor ICogQG51bV9wcm94aWVzIC0gbnVtYmVyIG9mIFJBIHByb3hpZXMKKyAqIEByaW5ncyAtIGFycmF5 IG9mIHJpbmdzIGRlc2NyaXB0b3JzIChzdHJ1Y3QgQGszX3JpbmcpCisgKiBAbGlzdCAtIGxpc3Qg b2YgUkFzIGluIHRoZSBzeXN0ZW0KKyAqIEB0aXNjaSAtIHBvaW50ZXIgdGktc2NpIGhhbmRsZQor ICogQHRpc2NpX3Jpbmdfb3BzIC0gdGktc2NpIHJpbmdzIG9wcworICogQHRpc2NpX2Rldl9pZCAt IHRpLXNjaSBkZXZpY2UgaWQKKyAqLworc3RydWN0IGszX3JpbmdhY2MgeworCXN0cnVjdCBkZXZp Y2UgKmRldjsKKwlzdHJ1Y3QgazNfcmluZ2FjY19wcm94eV9nY2ZnX3JlZ3MgX19pb21lbSAqcHJv eHlfZ2NmZzsKKwl2b2lkIF9faW9tZW0gKnByb3h5X3RhcmdldF9iYXNlOworCXUzMiBudW1fcmlu Z3M7IC8qIG51bWJlciBvZiByaW5ncyBpbiBSaW5nYWNjIG1vZHVsZSAqLworCXVuc2lnbmVkIGxv bmcgKnJpbmdzX2ludXNlOworCXN0cnVjdCB0aV9zY2lfcmVzb3VyY2UgKnJtX2dwX3JhbmdlOwor CisJYm9vbCBkbWFfcmluZ19yZXNldF9xdWlyazsKKwl1MzIgbnVtX3Byb3hpZXM7CisJdW5zaWdu ZWQgbG9uZyAqcHJveHlfaW51c2U7CisKKwlzdHJ1Y3QgazNfcmluZyAqcmluZ3M7CisJc3RydWN0 IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBtdXRleCByZXFfbG9jazsgLyogcHJvdGVjdCByaW5n cyBhbGxvY2F0aW9uICovCisKKwljb25zdCBzdHJ1Y3QgdGlfc2NpX2hhbmRsZSAqdGlzY2k7CisJ Y29uc3Qgc3RydWN0IHRpX3NjaV9ybV9yaW5nYWNjX29wcyAqdGlzY2lfcmluZ19vcHM7CisJdTMy ICB0aXNjaV9kZXZfaWQ7Cit9OworCitzdGF0aWMgbG9uZyBrM19yaW5nYWNjX3JpbmdfZ2V0X2Zp Zm9fcG9zKHN0cnVjdCBrM19yaW5nICpyaW5nKQoreworCXJldHVybiBLM19SSU5HQUNDX0ZJRk9f V0lORE9XX1NJWkVfQllURVMgLQorCSAgICAgICAoNCA8PCByaW5nLT5lbG1fc2l6ZSk7Cit9CisK K3N0YXRpYyB2b2lkICprM19yaW5nYWNjX2dldF9lbG1fYWRkcihzdHJ1Y3QgazNfcmluZyAqcmlu ZywgdTMyIGlkeCkKK3sKKwlyZXR1cm4gKGlkeCAqICg0IDw8IHJpbmctPmVsbV9zaXplKSArIHJp bmctPnJpbmdfbWVtX3ZpcnQpOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wdXNo X21lbShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7CitzdGF0aWMgaW50IGszX3Jp bmdhY2NfcmluZ19wb3BfbWVtKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKTsKKwor c3RhdGljIHN0cnVjdCBrM19yaW5nX29wcyBrM19yaW5nX21vZGVfcmluZ19vcHMgPSB7CisJCS5w dXNoX3RhaWwgPSBrM19yaW5nYWNjX3JpbmdfcHVzaF9tZW0sCisJCS5wb3BfaGVhZCA9IGszX3Jp bmdhY2NfcmluZ19wb3BfbWVtLAorfTsKKworc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcHVz aF9pbyhzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7CitzdGF0aWMgaW50IGszX3Jp bmdhY2NfcmluZ19wb3BfaW8oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOworc3Rh dGljIGludCBrM19yaW5nYWNjX3JpbmdfcHVzaF9oZWFkX2lvKHN0cnVjdCBrM19yaW5nICpyaW5n LCB2b2lkICplbGVtKTsKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3BvcF90YWlsX2lvKHN0 cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKTsKKworc3RhdGljIHN0cnVjdCBrM19yaW5n X29wcyBrM19yaW5nX21vZGVfbXNnX29wcyA9IHsKKwkJLnB1c2hfdGFpbCA9IGszX3JpbmdhY2Nf cmluZ19wdXNoX2lvLAorCQkucHVzaF9oZWFkID0gazNfcmluZ2FjY19yaW5nX3B1c2hfaGVhZF9p bywKKwkJLnBvcF90YWlsID0gazNfcmluZ2FjY19yaW5nX3BvcF90YWlsX2lvLAorCQkucG9wX2hl YWQgPSBrM19yaW5nYWNjX3JpbmdfcG9wX2lvLAorfTsKKworc3RhdGljIGludCBrM19yaW5nYWNj X3JpbmdfcHVzaF9oZWFkX3Byb3h5KHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKTsK K3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hfdGFpbF9wcm94eShzdHJ1Y3QgazNfcmlu ZyAqcmluZywgdm9pZCAqZWxlbSk7CitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wb3BfaGVh ZF9wcm94eShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7CitzdGF0aWMgaW50IGsz X3JpbmdhY2NfcmluZ19wb3BfdGFpbF9wcm94eShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAq ZWxlbSk7CisKK3N0YXRpYyBzdHJ1Y3QgazNfcmluZ19vcHMgazNfcmluZ19tb2RlX3Byb3h5X29w cyA9IHsKKwkJLnB1c2hfdGFpbCA9IGszX3JpbmdhY2NfcmluZ19wdXNoX3RhaWxfcHJveHksCisJ CS5wdXNoX2hlYWQgPSBrM19yaW5nYWNjX3JpbmdfcHVzaF9oZWFkX3Byb3h5LAorCQkucG9wX3Rh aWwgPSBrM19yaW5nYWNjX3JpbmdfcG9wX3RhaWxfcHJveHksCisJCS5wb3BfaGVhZCA9IGszX3Jp bmdhY2NfcmluZ19wb3BfaGVhZF9wcm94eSwKK307CisKKyNpZmRlZiBDT05GSUdfVElfSzNfUklO R0FDQ19ERUJVRwordm9pZCBrM19yaW5nYWNjX3JpbmdfZHVtcChzdHJ1Y3QgazNfcmluZyAqcmlu ZykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByaW5nLT5wYXJlbnQtPmRldjsKKworCWszX25h dl9kYmcoZGV2LCAiZHVtcCByaW5nOiAlZFxuIiwgcmluZy0+cmluZ19pZCk7CisJazNfbmF2X2Ri ZyhkZXYsICJkdW1wIG1lbSB2aXJ0ICVwLCBkbWEgJXBhZFxuIiwKKwkJICAgcmluZy0+cmluZ19t ZW1fdmlydCwgJnJpbmctPnJpbmdfbWVtX2RtYSk7CisJazNfbmF2X2RiZyhkZXYsICJkdW1wIGVs bXNpemUgJWQsIHNpemUgJWQsIG1vZGUgJWQsIHByb3h5X2lkICVkXG4iLAorCQkgICByaW5nLT5l bG1fc2l6ZSwgcmluZy0+c2l6ZSwgcmluZy0+bW9kZSwgcmluZy0+cHJveHlfaWQpOworCisJazNf bmF2X2RiZyhkZXYsICJkdW1wIHJpbmdfcnRfcmVnczogZGIlMDh4XG4iLAorCQkgICByZWFkbCgm cmluZy0+cnQtPmRiKSk7CisJazNfbmF2X2RiZyhkZXYsICJkdW1wIG9jYyUwOHhcbiIsCisJCSAg IHJlYWRsKCZyaW5nLT5ydC0+b2NjKSk7CisJazNfbmF2X2RiZyhkZXYsICJkdW1wIGluZHglMDh4 XG4iLAorCQkgICByZWFkbCgmcmluZy0+cnQtPmluZHgpKTsKKwlrM19uYXZfZGJnKGRldiwgImR1 bXAgaHdvY2MlMDh4XG4iLAorCQkgICByZWFkbCgmcmluZy0+cnQtPmh3b2NjKSk7CisJazNfbmF2 X2RiZyhkZXYsICJkdW1wIGh3aW5keCUwOHhcbiIsCisJCSAgIHJlYWRsKCZyaW5nLT5ydC0+aHdp bmR4KSk7CisKKwlpZiAocmluZy0+cmluZ19tZW1fdmlydCkKKwkJcHJpbnRfaGV4X2R1bXAoS0VS Tl9FUlIsICJkdW1wIHJpbmdfbWVtX3ZpcnQgIiwKKwkJCSAgICAgICBEVU1QX1BSRUZJWF9OT05F LCAxNiwgMSwKKwkJCSAgICAgICByaW5nLT5yaW5nX21lbV92aXJ0LCAxNiAqIDgsIGZhbHNlKTsK K30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfcmluZ19kdW1wKTsKKyNlbmRpZgorCitz dHJ1Y3QgazNfcmluZyAqazNfcmluZ2FjY19yZXF1ZXN0X3Jpbmcoc3RydWN0IGszX3JpbmdhY2Mg KnJpbmdhY2MsCisJCQkJCWludCBpZCwgdTMyIGZsYWdzKQoreworCWludCBwcm94eV9pZCA9IEsz X1JJTkdBQ0NfUFJPWFlfTk9UX1VTRUQ7CisKKwltdXRleF9sb2NrKCZyaW5nYWNjLT5yZXFfbG9j ayk7CisKKwlpZiAoaWQgPT0gSzNfUklOR0FDQ19SSU5HX0lEX0FOWSkgeworCQkvKiBSZXF1ZXN0 IGZvciBhbnkgZ2VuZXJhbCBwdXJwb3NlIHJpbmcgKi8KKwkJc3RydWN0IHRpX3NjaV9yZXNvdXJj ZV9kZXNjICpncF9yaW5ncyA9CisJCQkJCQkmcmluZ2FjYy0+cm1fZ3BfcmFuZ2UtPmRlc2NbMF07 CisJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCQlzaXplID0gZ3BfcmluZ3MtPnN0YXJ0ICsgZ3Bf cmluZ3MtPm51bTsKKwkJaWQgPSBmaW5kX25leHRfemVyb19iaXQocmluZ2FjYy0+cmluZ3NfaW51 c2UsIHNpemUsCisJCQkJCWdwX3JpbmdzLT5zdGFydCk7CisJCWlmIChpZCA9PSBzaXplKQorCQkJ Z290byBlcnJvcjsKKwl9IGVsc2UgaWYgKGlkIDwgMCkgeworCQlnb3RvIGVycm9yOworCX0KKwor CWlmICh0ZXN0X2JpdChpZCwgcmluZ2FjYy0+cmluZ3NfaW51c2UpICYmCisJICAgICEocmluZ2Fj Yy0+cmluZ3NbaWRdLmZsYWdzICYgSzNfUklOR19GTEFHX1NIQVJFRCkpCisJCWdvdG8gZXJyb3I7 CisJZWxzZSBpZiAocmluZ2FjYy0+cmluZ3NbaWRdLmZsYWdzICYgSzNfUklOR19GTEFHX1NIQVJF RCkKKwkJZ290byBvdXQ7CisKKwlpZiAoZmxhZ3MgJiBLM19SSU5HQUNDX1JJTkdfVVNFX1BST1hZ KSB7CisJCXByb3h5X2lkID0gZmluZF9uZXh0X3plcm9fYml0KHJpbmdhY2MtPnByb3h5X2ludXNl LAorCQkJCQkgICAgICByaW5nYWNjLT5udW1fcHJveGllcywgMCk7CisJCWlmIChwcm94eV9pZCA9 PSByaW5nYWNjLT5udW1fcHJveGllcykKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKCF0cnlf bW9kdWxlX2dldChyaW5nYWNjLT5kZXYtPmRyaXZlci0+b3duZXIpKQorCQlnb3RvIGVycm9yOwor CisJaWYgKHByb3h5X2lkICE9IEszX1JJTkdBQ0NfUFJPWFlfTk9UX1VTRUQpIHsKKwkJc2V0X2Jp dChwcm94eV9pZCwgcmluZ2FjYy0+cHJveHlfaW51c2UpOworCQlyaW5nYWNjLT5yaW5nc1tpZF0u cHJveHlfaWQgPSBwcm94eV9pZDsKKwkJazNfbmF2X2RiZyhyaW5nYWNjLT5kZXYsICJHaXZpbmcg cmluZyMlZCBwcm94eSMlZFxuIiwKKwkJCSAgIGlkLCBwcm94eV9pZCk7CisJfSBlbHNlIHsKKwkJ azNfbmF2X2RiZyhyaW5nYWNjLT5kZXYsICJHaXZpbmcgcmluZyMlZFxuIiwgaWQpOworCX0KKwor CXNldF9iaXQoaWQsIHJpbmdhY2MtPnJpbmdzX2ludXNlKTsKK291dDoKKwlyaW5nYWNjLT5yaW5n c1tpZF0udXNlX2NvdW50Kys7CisJbXV0ZXhfdW5sb2NrKCZyaW5nYWNjLT5yZXFfbG9jayk7CisJ cmV0dXJuICZyaW5nYWNjLT5yaW5nc1tpZF07CisKK2Vycm9yOgorCW11dGV4X3VubG9jaygmcmlu Z2FjYy0+cmVxX2xvY2spOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwoazNf cmluZ2FjY19yZXF1ZXN0X3JpbmcpOworCitzdGF0aWMgdm9pZCBrM19yaW5nYWNjX3JpbmdfcmVz ZXRfc2NpKHN0cnVjdCBrM19yaW5nICpyaW5nKQoreworCXN0cnVjdCBrM19yaW5nYWNjICpyaW5n YWNjID0gcmluZy0+cGFyZW50OworCWludCByZXQ7CisKKwlyZXQgPSByaW5nYWNjLT50aXNjaV9y aW5nX29wcy0+Y29uZmlnKAorCQkJcmluZ2FjYy0+dGlzY2ksCisJCQlUSV9TQ0lfTVNHX1ZBTFVF X1JNX1JJTkdfQ09VTlRfVkFMSUQsCisJCQlyaW5nYWNjLT50aXNjaV9kZXZfaWQsCisJCQlyaW5n LT5yaW5nX2lkLAorCQkJMCwKKwkJCTAsCisJCQlyaW5nLT5zaXplLAorCQkJMCwKKwkJCTAsCisJ CQkwKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKHJpbmdhY2MtPmRldiwgIlRJU0NJIHJlc2V0IHJp bmcgZmFpbCAoJWQpIHJpbmdfaWR4ICVkXG4iLAorCQkJcmV0LCByaW5nLT5yaW5nX2lkKTsKK30K Kwordm9pZCBrM19yaW5nYWNjX3JpbmdfcmVzZXQoc3RydWN0IGszX3JpbmcgKnJpbmcpCit7CisJ aWYgKCFyaW5nIHx8ICEocmluZy0+ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkpCisJCXJldHVy bjsKKworCXJpbmctPm9jYyA9IDA7CisJcmluZy0+ZnJlZSA9IDA7CisJcmluZy0+cmluZGV4ID0g MDsKKwlyaW5nLT53aW5kZXggPSAwOworCisJazNfcmluZ2FjY19yaW5nX3Jlc2V0X3NjaShyaW5n KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfcmluZ19yZXNldCk7CisKK3N0YXRp YyB2b2lkIGszX3JpbmdhY2NfcmluZ19yZWNvbmZpZ19xbW9kZV9zY2koc3RydWN0IGszX3Jpbmcg KnJpbmcsCisJCQkJCSAgICAgICBlbnVtIGszX3JpbmdfbW9kZSBtb2RlKQoreworCXN0cnVjdCBr M19yaW5nYWNjICpyaW5nYWNjID0gcmluZy0+cGFyZW50OworCWludCByZXQ7CisKKwlyZXQgPSBy aW5nYWNjLT50aXNjaV9yaW5nX29wcy0+Y29uZmlnKAorCQkJcmluZ2FjYy0+dGlzY2ksCisJCQlU SV9TQ0lfTVNHX1ZBTFVFX1JNX1JJTkdfTU9ERV9WQUxJRCwKKwkJCXJpbmdhY2MtPnRpc2NpX2Rl dl9pZCwKKwkJCXJpbmctPnJpbmdfaWQsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQltb2RlLAor CQkJMCwKKwkJCTApOworCWlmIChyZXQpCisJCWRldl9lcnIocmluZ2FjYy0+ZGV2LCAiVElTQ0kg cmVjb25mIHFtb2RlIGZhaWwgKCVkKSByaW5nX2lkeCAlZFxuIiwKKwkJCXJldCwgcmluZy0+cmlu Z19pZCk7Cit9CisKK3ZvaWQgazNfcmluZ2FjY19yaW5nX3Jlc2V0X2RtYShzdHJ1Y3QgazNfcmlu ZyAqcmluZywgdTMyIG9jYykKK3sKKwlpZiAoIXJpbmcgfHwgIShyaW5nLT5mbGFncyAmIEszX1JJ TkdfRkxBR19CVVNZKSkKKwkJcmV0dXJuOworCisJaWYgKCFyaW5nLT5wYXJlbnQtPmRtYV9yaW5n X3Jlc2V0X3F1aXJrKQorCQlyZXR1cm47CisKKwlpZiAoIW9jYykKKwkJb2NjID0gZGJnX3JlYWRs KCZyaW5nLT5ydC0+b2NjKTsKKworCWlmIChvY2MpIHsKKwkJdTMyIGRiX3JpbmdfY250LCBkYl9y aW5nX2NudF9jdXI7CisKKwkJazNfbmF2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgIiVzICV1IG9j YzogJXVcbiIsIF9fZnVuY19fLAorCQkJICAgcmluZy0+cmluZ19pZCwgb2NjKTsKKwkJLyogMi4g UmVzZXQgdGhlIHJpbmcgKi8KKwkJazNfcmluZ2FjY19yaW5nX3Jlc2V0X3NjaShyaW5nKTsKKwor CQkvKgorCQkgKiAzLiBTZXR1cCB0aGUgcmluZyBpbiByaW5nL2Rvb3JiZWxsIG1vZGUKKwkJICog KGlmIG5vdCBhbHJlYWR5IGluIHRoaXMgbW9kZSkKKwkJICovCisJCWlmIChyaW5nLT5tb2RlICE9 IEszX1JJTkdBQ0NfUklOR19NT0RFX1JJTkcpCisJCQlrM19yaW5nYWNjX3JpbmdfcmVjb25maWdf cW1vZGVfc2NpKAorCQkJCQlyaW5nLCBLM19SSU5HQUNDX1JJTkdfTU9ERV9SSU5HKTsKKwkJLyoK KwkJICogNC4gUmluZyB0aGUgZG9vcmJlbGwgMioqMjIg4oCTIHJpbmdPY2MgdGltZXMuCisJCSAq IFRoaXMgd2lsbCB3cmFwIHRoZSBpbnRlcm5hbCBVRE1BUCByaW5nIHN0YXRlIG9jY3VwYW5jeQor CQkgKiBjb3VudGVyICh3aGljaCBpcyAyMS1iaXRzIHdpZGUpIHRvIDAuCisJCSAqLworCQlkYl9y aW5nX2NudCA9ICgxVSA8PCAyMikgLSBvY2M7CisKKwkJd2hpbGUgKGRiX3JpbmdfY250ICE9IDAp IHsKKwkJCS8qCisJCQkgKiBSaW5nIHRoZSBkb29yYmVsbCB3aXRoIHRoZSBtYXhpbXVtIGNvdW50 IGVhY2gKKwkJCSAqIGl0ZXJhdGlvbiBpZiBwb3NzaWJsZSB0byBtaW5pbWl6ZSB0aGUgdG90YWwK KwkJCSAqIG9mIHdyaXRlcworCQkJICovCisJCQlpZiAoZGJfcmluZ19jbnQgPiBLM19SSU5HQUND X01BWF9EQl9SSU5HX0NOVCkKKwkJCQlkYl9yaW5nX2NudF9jdXIgPSBLM19SSU5HQUNDX01BWF9E Ql9SSU5HX0NOVDsKKwkJCWVsc2UKKwkJCQlkYl9yaW5nX2NudF9jdXIgPSBkYl9yaW5nX2NudDsK KworCQkJd3JpdGVsKGRiX3JpbmdfY250X2N1ciwgJnJpbmctPnJ0LT5kYik7CisJCQlkYl9yaW5n X2NudCAtPSBkYl9yaW5nX2NudF9jdXI7CisJCX0KKworCQkvKiA1LiBSZXN0b3JlIHRoZSBvcmln aW5hbCByaW5nIG1vZGUgKGlmIG5vdCByaW5nIG1vZGUpICovCisJCWlmIChyaW5nLT5tb2RlICE9 IEszX1JJTkdBQ0NfUklOR19NT0RFX1JJTkcpCisJCQlrM19yaW5nYWNjX3JpbmdfcmVjb25maWdf cW1vZGVfc2NpKHJpbmcsIHJpbmctPm1vZGUpOworCX0KKworCS8qIDIuIFJlc2V0IHRoZSByaW5n ICovCisJazNfcmluZ2FjY19yaW5nX3Jlc2V0KHJpbmcpOworfQorRVhQT1JUX1NZTUJPTF9HUEwo azNfcmluZ2FjY19yaW5nX3Jlc2V0X2RtYSk7CisKK3N0YXRpYyB2b2lkIGszX3JpbmdhY2Nfcmlu Z19mcmVlX3NjaShzdHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlzdHJ1Y3QgazNfcmluZ2FjYyAq cmluZ2FjYyA9IHJpbmctPnBhcmVudDsKKwlpbnQgcmV0OworCisJcmV0ID0gcmluZ2FjYy0+dGlz Y2lfcmluZ19vcHMtPmNvbmZpZygKKwkJCXJpbmdhY2MtPnRpc2NpLAorCQkJVElfU0NJX01TR19W QUxVRV9STV9BTExfTk9fT1JERVIsCisJCQlyaW5nYWNjLT50aXNjaV9kZXZfaWQsCisJCQlyaW5n LT5yaW5nX2lkLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwKTsKKwlp ZiAocmV0KQorCQlkZXZfZXJyKHJpbmdhY2MtPmRldiwgIlRJU0NJIHJpbmcgZnJlZSBmYWlsICgl ZCkgcmluZ19pZHggJWRcbiIsCisJCQlyZXQsIHJpbmctPnJpbmdfaWQpOworfQorCitpbnQgazNf cmluZ2FjY19yaW5nX2ZyZWUoc3RydWN0IGszX3JpbmcgKnJpbmcpCit7CisJc3RydWN0IGszX3Jp bmdhY2MgKnJpbmdhY2M7CisKKwlpZiAoIXJpbmcpCisJCXJldHVybiAtRUlOVkFMOworCisJcmlu Z2FjYyA9IHJpbmctPnBhcmVudDsKKworCWszX25hdl9kYmcocmluZy0+cGFyZW50LT5kZXYsICJm bGFnczogMHglMDh4XG4iLCByaW5nLT5mbGFncyk7CisKKwlpZiAoIXRlc3RfYml0KHJpbmctPnJp bmdfaWQsIHJpbmdhY2MtPnJpbmdzX2ludXNlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRl eF9sb2NrKCZyaW5nYWNjLT5yZXFfbG9jayk7CisKKwlpZiAoLS1yaW5nLT51c2VfY291bnQpCisJ CWdvdG8gb3V0OworCisJaWYgKCEocmluZy0+ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkpCisJ CWdvdG8gbm9faW5pdDsKKworCWszX3JpbmdhY2NfcmluZ19mcmVlX3NjaShyaW5nKTsKKworCWRt YV9mcmVlX2NvaGVyZW50KHJpbmdhY2MtPmRldiwKKwkJCSAgcmluZy0+c2l6ZSAqICg0IDw8IHJp bmctPmVsbV9zaXplKSwKKwkJCSAgcmluZy0+cmluZ19tZW1fdmlydCwgcmluZy0+cmluZ19tZW1f ZG1hKTsKKwlyaW5nLT5mbGFncyA9IDA7CisJcmluZy0+b3BzID0gTlVMTDsKKwlpZiAocmluZy0+ cHJveHlfaWQgIT0gSzNfUklOR0FDQ19QUk9YWV9OT1RfVVNFRCkgeworCQljbGVhcl9iaXQocmlu Zy0+cHJveHlfaWQsIHJpbmdhY2MtPnByb3h5X2ludXNlKTsKKwkJcmluZy0+cHJveHkgPSBOVUxM OworCQlyaW5nLT5wcm94eV9pZCA9IEszX1JJTkdBQ0NfUFJPWFlfTk9UX1VTRUQ7CisJfQorCitu b19pbml0OgorCWNsZWFyX2JpdChyaW5nLT5yaW5nX2lkLCByaW5nYWNjLT5yaW5nc19pbnVzZSk7 CisKKwltb2R1bGVfcHV0KHJpbmdhY2MtPmRldi0+ZHJpdmVyLT5vd25lcik7CisKK291dDoKKwlt dXRleF91bmxvY2soJnJpbmdhY2MtPnJlcV9sb2NrKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9T WU1CT0xfR1BMKGszX3JpbmdhY2NfcmluZ19mcmVlKTsKKwordTMyIGszX3JpbmdhY2NfZ2V0X3Jp bmdfaWQoc3RydWN0IGszX3JpbmcgKnJpbmcpCit7CisJaWYgKCFyaW5nKQorCQlyZXR1cm4gLUVJ TlZBTDsKKworCXJldHVybiByaW5nLT5yaW5nX2lkOworfQorRVhQT1JUX1NZTUJPTF9HUEwoazNf cmluZ2FjY19nZXRfcmluZ19pZCk7CisKK3UzMiBrM19yaW5nYWNjX2dldF90aXNjaV9kZXZfaWQo c3RydWN0IGszX3JpbmcgKnJpbmcpCit7CisJaWYgKCFyaW5nKQorCQlyZXR1cm4gLUVJTlZBTDsK KworCXJldHVybiByaW5nLT5wYXJlbnQtPnRpc2NpX2Rldl9pZDsKK30KK0VYUE9SVF9TWU1CT0xf R1BMKGszX3JpbmdhY2NfZ2V0X3Rpc2NpX2Rldl9pZCk7CisKK2ludCBrM19yaW5nYWNjX2dldF9y aW5nX2lycV9udW0oc3RydWN0IGszX3JpbmcgKnJpbmcpCit7CisJaW50IGlycV9udW07CisKKwlp ZiAoIXJpbmcpCisJCXJldHVybiAtRUlOVkFMOworCisJaXJxX251bSA9IHRpX3NjaV9pbnRhX21z aV9nZXRfdmlycShyaW5nLT5wYXJlbnQtPmRldiwgcmluZy0+cmluZ19pZCk7CisJaWYgKGlycV9u dW0gPD0gMCkKKwkJaXJxX251bSA9IC1FSU5WQUw7CisJcmV0dXJuIGlycV9udW07Cit9CitFWFBP UlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX2dldF9yaW5nX2lycV9udW0pOworCitzdGF0aWMgaW50 IGszX3JpbmdhY2NfcmluZ19jZmdfc2NpKHN0cnVjdCBrM19yaW5nICpyaW5nKQoreworCXN0cnVj dCBrM19yaW5nYWNjICpyaW5nYWNjID0gcmluZy0+cGFyZW50OworCXUzMiByaW5nX2lkeDsKKwlp bnQgcmV0OworCisJaWYgKCFyaW5nYWNjLT50aXNjaSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwly aW5nX2lkeCA9IHJpbmctPnJpbmdfaWQ7CisJcmV0ID0gcmluZ2FjYy0+dGlzY2lfcmluZ19vcHMt PmNvbmZpZygKKwkJCXJpbmdhY2MtPnRpc2NpLAorCQkJVElfU0NJX01TR19WQUxVRV9STV9BTExf Tk9fT1JERVIsCisJCQlyaW5nYWNjLT50aXNjaV9kZXZfaWQsCisJCQlyaW5nX2lkeCwKKwkJCWxv d2VyXzMyX2JpdHMocmluZy0+cmluZ19tZW1fZG1hKSwKKwkJCXVwcGVyXzMyX2JpdHMocmluZy0+ cmluZ19tZW1fZG1hKSwKKwkJCXJpbmctPnNpemUsCisJCQlyaW5nLT5tb2RlLAorCQkJcmluZy0+ ZWxtX3NpemUsCisJCQkwKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKHJpbmdhY2MtPmRldiwgIlRJ U0NJIGNvbmZpZyByaW5nIGZhaWwgKCVkKSByaW5nX2lkeCAlZFxuIiwKKwkJCXJldCwgcmluZ19p ZHgpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGszX3JpbmdhY2NfcmluZ19jZmcoc3RydWN0 IGszX3JpbmcgKnJpbmcsIHN0cnVjdCBrM19yaW5nX2NmZyAqY2ZnKQoreworCXN0cnVjdCBrM19y aW5nYWNjICpyaW5nYWNjID0gcmluZy0+cGFyZW50OworCWludCByZXQgPSAwOworCisJaWYgKCFy aW5nIHx8ICFjZmcpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjZmctPmVsbV9zaXplID4gSzNf UklOR0FDQ19SSU5HX0VMU0laRV8yNTYgfHwKKwkgICAgY2ZnLT5tb2RlID4gSzNfUklOR0FDQ19S SU5HX01PREVfUU0gfHwKKwkgICAgY2ZnLT5zaXplICYgfkszX1JJTkdBQ0NfQ0ZHX1JJTkdfU0la RV9FTENOVF9NQVNLIHx8CisJICAgICF0ZXN0X2JpdChyaW5nLT5yaW5nX2lkLCByaW5nYWNjLT5y aW5nc19pbnVzZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHJpbmctPnVzZV9jb3VudCAh PSAxKQorCQlyZXR1cm4gMDsKKworCXJpbmctPnNpemUgPSBjZmctPnNpemU7CisJcmluZy0+ZWxt X3NpemUgPSBjZmctPmVsbV9zaXplOworCXJpbmctPm1vZGUgPSBjZmctPm1vZGU7CisJcmluZy0+ b2NjID0gMDsKKwlyaW5nLT5mcmVlID0gMDsKKwlyaW5nLT5yaW5kZXggPSAwOworCXJpbmctPndp bmRleCA9IDA7CisKKwlpZiAocmluZy0+cHJveHlfaWQgIT0gSzNfUklOR0FDQ19QUk9YWV9OT1Rf VVNFRCkKKwkJcmluZy0+cHJveHkgPSByaW5nYWNjLT5wcm94eV90YXJnZXRfYmFzZSArCisJCQkg ICAgICByaW5nLT5wcm94eV9pZCAqIEszX1JJTkdBQ0NfUFJPWFlfVEFSR0VUX1NURVA7CisKKwlz d2l0Y2ggKHJpbmctPm1vZGUpIHsKKwljYXNlIEszX1JJTkdBQ0NfUklOR19NT0RFX1JJTkc6CisJ CXJpbmctPm9wcyA9ICZrM19yaW5nX21vZGVfcmluZ19vcHM7CisJCWJyZWFrOworCWNhc2UgSzNf UklOR0FDQ19SSU5HX01PREVfUU06CisJCS8qCisJCSAqIEluIFF1ZXVlIG1vZGUgZWxtX3NpemUg Y2FuIGJlIDggb25seSBhbmQgZWFjaCBvcGVyYXRpb24KKwkJICogdXNlcyAyIGVsZW1lbnQgc2xv dHMKKwkJICovCisJCWlmIChjZmctPmVsbV9zaXplICE9IEszX1JJTkdBQ0NfUklOR19FTFNJWkVf OCB8fAorCQkgICAgY2ZnLT5zaXplICUgMikKKwkJCWdvdG8gZXJyX2ZyZWVfcHJveHk7CisJCS8q IGVsc2UsIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgSzNfUklOR0FDQ19SSU5HX01PREVfTUVTU0FH RToKKwkJaWYgKHJpbmctPnByb3h5KQorCQkJcmluZy0+b3BzID0gJmszX3JpbmdfbW9kZV9wcm94 eV9vcHM7CisJCWVsc2UKKwkJCXJpbmctPm9wcyA9ICZrM19yaW5nX21vZGVfbXNnX29wczsKKwkJ YnJlYWs7CisJZGVmYXVsdDoKKwkJcmluZy0+b3BzID0gTlVMTDsKKwkJcmV0ID0gLUVJTlZBTDsK KwkJZ290byBlcnJfZnJlZV9wcm94eTsKKwl9OworCisJcmluZy0+cmluZ19tZW1fdmlydCA9CisJ CQlkbWFfYWxsb2NfY29oZXJlbnQocmluZ2FjYy0+ZGV2LAorCQkJCQkgICByaW5nLT5zaXplICog KDQgPDwgcmluZy0+ZWxtX3NpemUpLAorCQkJCQkgICAmcmluZy0+cmluZ19tZW1fZG1hLCBHRlBf S0VSTkVMKTsKKwlpZiAoIXJpbmctPnJpbmdfbWVtX3ZpcnQpIHsKKwkJZGV2X2VycihyaW5nYWNj LT5kZXYsICJGYWlsZWQgdG8gYWxsb2MgcmluZyBtZW1cbiIpOworCQlyZXQgPSAtRU5PTUVNOwor CQlnb3RvIGVycl9mcmVlX29wczsKKwl9CisKKwlyZXQgPSBrM19yaW5nYWNjX3JpbmdfY2ZnX3Nj aShyaW5nKTsKKworCWlmIChyZXQpCisJCWdvdG8gZXJyX2ZyZWVfbWVtOworCisJcmluZy0+Zmxh Z3MgfD0gSzNfUklOR19GTEFHX0JVU1k7CisJcmluZy0+ZmxhZ3MgfD0gKGNmZy0+ZmxhZ3MgJiBL M19SSU5HQUNDX1JJTkdfU0hBUkVEKSA/CisJCQlLM19SSU5HX0ZMQUdfU0hBUkVEIDogMDsKKwor CWszX3JpbmdhY2NfcmluZ19kdW1wKHJpbmcpOworCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX21l bToKKwlkbWFfZnJlZV9jb2hlcmVudChyaW5nYWNjLT5kZXYsCisJCQkgIHJpbmctPnNpemUgKiAo NCA8PCByaW5nLT5lbG1fc2l6ZSksCisJCQkgIHJpbmctPnJpbmdfbWVtX3ZpcnQsCisJCQkgIHJp bmctPnJpbmdfbWVtX2RtYSk7CitlcnJfZnJlZV9vcHM6CisJcmluZy0+b3BzID0gTlVMTDsKK2Vy cl9mcmVlX3Byb3h5OgorCXJpbmctPnByb3h5ID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorRVhQ T1JUX1NZTUJPTF9HUEwoazNfcmluZ2FjY19yaW5nX2NmZyk7CisKK3UzMiBrM19yaW5nYWNjX3Jp bmdfZ2V0X3NpemUoc3RydWN0IGszX3JpbmcgKnJpbmcpCit7CisJaWYgKCFyaW5nIHx8ICEocmlu Zy0+ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0 dXJuIHJpbmctPnNpemU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfZ2V0 X3NpemUpOworCit1MzIgazNfcmluZ2FjY19yaW5nX2dldF9mcmVlKHN0cnVjdCBrM19yaW5nICpy aW5nKQoreworCWlmICghcmluZyB8fCAhKHJpbmctPmZsYWdzICYgSzNfUklOR19GTEFHX0JVU1kp KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghcmluZy0+ZnJlZSkKKwkJcmluZy0+ZnJlZSA9 IHJpbmctPnNpemUgLSBkYmdfcmVhZGwoJnJpbmctPnJ0LT5vY2MpOworCisJcmV0dXJuIHJpbmct PmZyZWU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfZ2V0X2ZyZWUpOwor Cit1MzIgazNfcmluZ2FjY19yaW5nX2dldF9vY2Moc3RydWN0IGszX3JpbmcgKnJpbmcpCit7CisJ aWYgKCFyaW5nIHx8ICEocmluZy0+ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkpCisJCXJldHVy biAtRUlOVkFMOworCisJcmV0dXJuIGRiZ19yZWFkbCgmcmluZy0+cnQtPm9jYyk7Cit9CitFWFBP UlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfZ2V0X29jYyk7CisKK3UzMiBrM19yaW5nYWNj X3JpbmdfaXNfZnVsbChzdHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlyZXR1cm4gIWszX3Jpbmdh Y2NfcmluZ19nZXRfZnJlZShyaW5nKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2Nf cmluZ19pc19mdWxsKTsKKworZW51bSBrM19yaW5nYWNjX2FjY2Vzc19tb2RlIHsKKwlLM19SSU5H QUNDX0FDQ0VTU19NT0RFX1BVU0hfSEVBRCwKKwlLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9I RUFELAorCUszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVTSF9UQUlMLAorCUszX1JJTkdBQ0NfQUND RVNTX01PREVfUE9QX1RBSUwsCisJSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QRUVLX0hFQUQsCisJ SzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QRUVLX1RBSUwsCit9OworCitzdGF0aWMgaW50IGszX3Jp bmdhY2NfcmluZ19jZmdfcHJveHkoc3RydWN0IGszX3JpbmcgKnJpbmcsCisJCQkJICAgICBlbnVt IGszX3JpbmdhY2NfcHJveHlfYWNjZXNzX21vZGUgbW9kZSkKK3sKKwl1MzIgdmFsOworCisJdmFs ID0gcmluZy0+cmluZ19pZDsKKwl2YWwgfD0gbW9kZSA8PCAxNjsKKwl2YWwgfD0gcmluZy0+ZWxt X3NpemUgPDwgMjQ7CisJZGJnX3dyaXRlbCh2YWwsICZyaW5nLT5wcm94eS0+Y29udHJvbCk7CisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX2FjY2Vzc19wcm94eShz dHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSwKKwkJCQkJZW51bSBrM19yaW5nYWNjX2Fj Y2Vzc19tb2RlIGFjY2Vzc19tb2RlKQoreworCXZvaWQgX19pb21lbSAqcHRyOworCisJcHRyID0g KHZvaWQgX19pb21lbSAqKSZyaW5nLT5wcm94eS0+ZGF0YTsKKworCXN3aXRjaCAoYWNjZXNzX21v ZGUpIHsKKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVTSF9IRUFEOgorCWNhc2UgSzNf UklOR0FDQ19BQ0NFU1NfTU9ERV9QT1BfSEVBRDoKKwkJazNfcmluZ2FjY19yaW5nX2NmZ19wcm94 eShyaW5nLCBQUk9YWV9BQ0NFU1NfTU9ERV9IRUFEKTsKKwkJYnJlYWs7CisJY2FzZSBLM19SSU5H QUNDX0FDQ0VTU19NT0RFX1BVU0hfVEFJTDoKKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVf UE9QX1RBSUw6CisJCWszX3JpbmdhY2NfcmluZ19jZmdfcHJveHkocmluZywgUFJPWFlfQUNDRVNT X01PREVfVEFJTCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0K KworCXB0ciArPSBrM19yaW5nYWNjX3JpbmdfZ2V0X2ZpZm9fcG9zKHJpbmcpOworCisJc3dpdGNo IChhY2Nlc3NfbW9kZSkgeworCWNhc2UgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QT1BfSEVBRDoK KwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9QX1RBSUw6CisJCWszX25hdl9kYmcocmlu Zy0+cGFyZW50LT5kZXYsICJwcm94eTptZW1jcHlfZnJvbWlvKHgpOiAtLT4gcHRyKCVwKSwgbW9k ZTolZFxuIiwKKwkJCSAgIHB0ciwgYWNjZXNzX21vZGUpOworCQltZW1jcHlfZnJvbWlvKGVsZW0s IHB0ciwgKDQgPDwgcmluZy0+ZWxtX3NpemUpKTsKKwkJcmluZy0+b2NjLS07CisJCWJyZWFrOwor CWNhc2UgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QVVNIX1RBSUw6CisJY2FzZSBLM19SSU5HQUND X0FDQ0VTU19NT0RFX1BVU0hfSEVBRDoKKwkJazNfbmF2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwg InByb3h5Om1lbWNweV90b2lvKHgpOiAtLT4gcHRyKCVwKSwgbW9kZTolZFxuIiwKKwkJCSAgIHB0 ciwgYWNjZXNzX21vZGUpOworCQltZW1jcHlfdG9pbyhwdHIsIGVsZW0sICg0IDw8IHJpbmctPmVs bV9zaXplKSk7CisJCXJpbmctPmZyZWUtLTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJu IC1FSU5WQUw7CisJfQorCisJazNfbmF2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgInByb3h5OiBm cmVlJWQgb2NjJWRcbiIsCisJCSAgIHJpbmctPmZyZWUsIHJpbmctPm9jYyk7CisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hfaGVhZF9wcm94eShzdHJ1Y3Qg azNfcmluZyAqcmluZywgdm9pZCAqZWxlbSkKK3sKKwlyZXR1cm4gazNfcmluZ2FjY19yaW5nX2Fj Y2Vzc19wcm94eShyaW5nLCBlbGVtLAorCQkJCQkgICAgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9Q VVNIX0hFQUQpOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wdXNoX3RhaWxfcHJv eHkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJcmV0dXJuIGszX3Jpbmdh Y2NfcmluZ19hY2Nlc3NfcHJveHkocmluZywgZWxlbSwKKwkJCQkJICAgIEszX1JJTkdBQ0NfQUND RVNTX01PREVfUFVTSF9UQUlMKTsKK30KKworc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcG9w X2hlYWRfcHJveHkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJcmV0dXJu IGszX3JpbmdhY2NfcmluZ19hY2Nlc3NfcHJveHkocmluZywgZWxlbSwKKwkJCQkJICAgIEszX1JJ TkdBQ0NfQUNDRVNTX01PREVfUE9QX0hFQUQpOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2Nf cmluZ19wb3BfdGFpbF9wcm94eShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSkKK3sK KwlyZXR1cm4gazNfcmluZ2FjY19yaW5nX2FjY2Vzc19wcm94eShyaW5nLCBlbGVtLAorCQkJCQkg ICAgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QT1BfSEVBRCk7Cit9CisKK3N0YXRpYyBpbnQgazNf cmluZ2FjY19yaW5nX2FjY2Vzc19pbyhzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSwK KwkJCQkgICAgIGVudW0gazNfcmluZ2FjY19hY2Nlc3NfbW9kZSBhY2Nlc3NfbW9kZSkKK3sKKwl2 b2lkIF9faW9tZW0gKnB0cjsKKworCXN3aXRjaCAoYWNjZXNzX21vZGUpIHsKKwljYXNlIEszX1JJ TkdBQ0NfQUNDRVNTX01PREVfUFVTSF9IRUFEOgorCWNhc2UgSzNfUklOR0FDQ19BQ0NFU1NfTU9E RV9QT1BfSEVBRDoKKwkJcHRyID0gKHZvaWQgX19pb21lbSAqKSZyaW5nLT5maWZvcy0+aGVhZF9k YXRhOworCQlicmVhazsKKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVTSF9UQUlMOgor CWNhc2UgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QT1BfVEFJTDoKKwkJcHRyID0gKHZvaWQgX19p b21lbSAqKSZyaW5nLT5maWZvcy0+dGFpbF9kYXRhOworCQlicmVhazsKKwlkZWZhdWx0OgorCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwdHIgKz0gazNfcmluZ2FjY19yaW5nX2dldF9maWZvX3Bv cyhyaW5nKTsKKworCXN3aXRjaCAoYWNjZXNzX21vZGUpIHsKKwljYXNlIEszX1JJTkdBQ0NfQUND RVNTX01PREVfUE9QX0hFQUQ6CisJY2FzZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9UQUlM OgorCQlrM19uYXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LCAibWVtY3B5X2Zyb21pbyh4KTogLS0+ IHB0ciglcCksIG1vZGU6JWRcbiIsCisJCQkgICBwdHIsIGFjY2Vzc19tb2RlKTsKKwkJbWVtY3B5 X2Zyb21pbyhlbGVtLCBwdHIsICg0IDw8IHJpbmctPmVsbV9zaXplKSk7CisJCXJpbmctPm9jYy0t OworCQlicmVhazsKKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVTSF9UQUlMOgorCWNh c2UgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QVVNIX0hFQUQ6CisJCWszX25hdl9kYmcocmluZy0+ cGFyZW50LT5kZXYsICJtZW1jcHlfdG9pbyh4KTogLS0+IHB0ciglcCksIG1vZGU6JWRcbiIsCisJ CQkgICBwdHIsIGFjY2Vzc19tb2RlKTsKKwkJbWVtY3B5X3RvaW8ocHRyLCBlbGVtLCAoNCA8PCBy aW5nLT5lbG1fc2l6ZSkpOworCQlyaW5nLT5mcmVlLS07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJ CXJldHVybiAtRUlOVkFMOworCX0KKworCWszX25hdl9kYmcocmluZy0+cGFyZW50LT5kZXYsICJm cmVlJWQgaW5kZXglZCBvY2MlZCBpbmRleCVkXG4iLAorCQkgICByaW5nLT5mcmVlLCByaW5nLT53 aW5kZXgsIHJpbmctPm9jYywgcmluZy0+cmluZGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBrM19yaW5nYWNjX3JpbmdfcHVzaF9oZWFkX2lvKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2 b2lkICplbGVtKQoreworCXJldHVybiBrM19yaW5nYWNjX3JpbmdfYWNjZXNzX2lvKHJpbmcsIGVs ZW0sCisJCQkJCSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BVU0hfSEVBRCk7Cit9CisKK3N0YXRp YyBpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hfaW8oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQg KmVsZW0pCit7CisJcmV0dXJuIGszX3JpbmdhY2NfcmluZ19hY2Nlc3NfaW8ocmluZywgZWxlbSwK KwkJCQkJIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVTSF9UQUlMKTsKK30KKworc3RhdGljIGlu dCBrM19yaW5nYWNjX3JpbmdfcG9wX2lvKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVt KQoreworCXJldHVybiBrM19yaW5nYWNjX3JpbmdfYWNjZXNzX2lvKHJpbmcsIGVsZW0sCisJCQkJ CSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9IRUFEKTsKK30KKworc3RhdGljIGludCBrM19y aW5nYWNjX3JpbmdfcG9wX3RhaWxfaW8oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0p Cit7CisJcmV0dXJuIGszX3JpbmdhY2NfcmluZ19hY2Nlc3NfaW8ocmluZywgZWxlbSwKKwkJCQkJ IEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9QX0hFQUQpOworfQorCitzdGF0aWMgaW50IGszX3Jp bmdhY2NfcmluZ19wdXNoX21lbShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSkKK3sK Kwl2b2lkICplbGVtX3B0cjsKKworCWVsZW1fcHRyID0gazNfcmluZ2FjY19nZXRfZWxtX2FkZHIo cmluZywgcmluZy0+d2luZGV4KTsKKworCW1lbWNweShlbGVtX3B0ciwgZWxlbSwgKDQgPDwgcmlu Zy0+ZWxtX3NpemUpKTsKKworCXJpbmctPndpbmRleCA9IChyaW5nLT53aW5kZXggKyAxKSAlIHJp bmctPnNpemU7CisJcmluZy0+ZnJlZS0tOworCWRiZ193cml0ZWwoMSwgJnJpbmctPnJ0LT5kYik7 CisKKwlrM19uYXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LCAicmluZ19wdXNoX21lbTogZnJlZSVk IGluZGV4JWRcbiIsCisJCSAgIHJpbmctPmZyZWUsIHJpbmctPndpbmRleCk7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcG9wX21lbShzdHJ1Y3QgazNfcmlu ZyAqcmluZywgdm9pZCAqZWxlbSkKK3sKKwl2b2lkICplbGVtX3B0cjsKKworCWVsZW1fcHRyID0g azNfcmluZ2FjY19nZXRfZWxtX2FkZHIocmluZywgcmluZy0+cmluZGV4KTsKKworCW1lbWNweShl bGVtLCBlbGVtX3B0ciwgKDQgPDwgcmluZy0+ZWxtX3NpemUpKTsKKworCXJpbmctPnJpbmRleCA9 IChyaW5nLT5yaW5kZXggKyAxKSAlIHJpbmctPnNpemU7CisJcmluZy0+b2NjLS07CisJZGJnX3dy aXRlbCgtMSwgJnJpbmctPnJ0LT5kYik7CisKKwlrM19uYXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2 LCAicmluZ19wb3BfbWVtOiBvY2MlZCBpbmRleCVkIHBvc19wdHIlcFxuIiwKKwkJICAgcmluZy0+ b2NjLCByaW5nLT5yaW5kZXgsIGVsZW1fcHRyKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGszX3Jp bmdhY2NfcmluZ19wdXNoKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKQoreworCWlu dCByZXQgPSAtRU9QTk9UU1VQUDsKKworCWlmICghcmluZyB8fCAhKHJpbmctPmZsYWdzICYgSzNf UklOR19GTEFHX0JVU1kpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWszX25hdl9kYmcocmluZy0+ cGFyZW50LT5kZXYsICJyaW5nX3B1c2g6IGZyZWUlZCBpbmRleCVkXG4iLAorCQkgICByaW5nLT5m cmVlLCByaW5nLT53aW5kZXgpOworCisJaWYgKGszX3JpbmdhY2NfcmluZ19pc19mdWxsKHJpbmcp KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChyaW5nLT5vcHMgJiYgcmluZy0+b3BzLT5wdXNo X3RhaWwpCisJCXJldCA9IHJpbmctPm9wcy0+cHVzaF90YWlsKHJpbmcsIGVsZW0pOworCisJcmV0 dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfcmluZ19wdXNoKTsKKwor aW50IGszX3JpbmdhY2NfcmluZ19wdXNoX2hlYWQoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQg KmVsZW0pCit7CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOworCisJaWYgKCFyaW5nIHx8ICEocmlu Zy0+ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkpCisJCXJldHVybiAtRUlOVkFMOworCisJazNf bmF2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgInJpbmdfcHVzaF9oZWFkOiBmcmVlJWQgaW5kZXgl ZFxuIiwKKwkJICAgcmluZy0+ZnJlZSwgcmluZy0+d2luZGV4KTsKKworCWlmIChrM19yaW5nYWNj X3JpbmdfaXNfZnVsbChyaW5nKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAocmluZy0+b3Bz ICYmIHJpbmctPm9wcy0+cHVzaF9oZWFkKQorCQlyZXQgPSByaW5nLT5vcHMtPnB1c2hfaGVhZChy aW5nLCBlbGVtKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5n YWNjX3JpbmdfcHVzaF9oZWFkKTsKKworaW50IGszX3JpbmdhY2NfcmluZ19wb3Aoc3RydWN0IGsz X3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOworCisJ aWYgKCFyaW5nIHx8ICEocmluZy0+ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkpCisJCXJldHVy biAtRUlOVkFMOworCisJaWYgKCFyaW5nLT5vY2MpCisJCXJpbmctPm9jYyA9IGszX3JpbmdhY2Nf cmluZ19nZXRfb2NjKHJpbmcpOworCisJazNfbmF2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgInJp bmdfcG9wOiBvY2MlZCBpbmRleCVkXG4iLAorCQkgICByaW5nLT5vY2MsIHJpbmctPnJpbmRleCk7 CisKKwlpZiAoIXJpbmctPm9jYykKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJaWYgKHJpbmctPm9w cyAmJiByaW5nLT5vcHMtPnBvcF9oZWFkKQorCQlyZXQgPSByaW5nLT5vcHMtPnBvcF9oZWFkKHJp bmcsIGVsZW0pOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX3Jpbmdh Y2NfcmluZ19wb3ApOworCitpbnQgazNfcmluZ2FjY19yaW5nX3BvcF90YWlsKHN0cnVjdCBrM19y aW5nICpyaW5nLCB2b2lkICplbGVtKQoreworCWludCByZXQgPSAtRU9QTk9UU1VQUDsKKworCWlm ICghcmluZyB8fCAhKHJpbmctPmZsYWdzICYgSzNfUklOR19GTEFHX0JVU1kpKQorCQlyZXR1cm4g LUVJTlZBTDsKKworCWlmICghcmluZy0+b2NjKQorCQlyaW5nLT5vY2MgPSBrM19yaW5nYWNjX3Jp bmdfZ2V0X29jYyhyaW5nKTsKKworCWszX25hdl9kYmcocmluZy0+cGFyZW50LT5kZXYsICJyaW5n X3BvcF90YWlsOiBvY2MlZCBpbmRleCVkXG4iLAorCQkgICByaW5nLT5vY2MsIHJpbmctPnJpbmRl eCk7CisKKwlpZiAoIXJpbmctPm9jYykKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJaWYgKHJpbmct Pm9wcyAmJiByaW5nLT5vcHMtPnBvcF90YWlsKQorCQlyZXQgPSByaW5nLT5vcHMtPnBvcF90YWls KHJpbmcsIGVsZW0pOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX3Jp bmdhY2NfcmluZ19wb3BfdGFpbCk7CisKK3N0cnVjdCBrM19yaW5nYWNjICpvZl9rM19yaW5nYWNj X2dldF9ieV9waGFuZGxlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJCQljb25zdCBjaGFy ICpwcm9wZXJ0eSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJpbmdhY2NfbnA7CisJc3RydWN0 IGszX3JpbmdhY2MgKnJpbmdhY2MgPSBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOworCXN0cnVjdCBr M19yaW5nYWNjICplbnRyeTsKKworCXJpbmdhY2NfbnAgPSBvZl9wYXJzZV9waGFuZGxlKG5wLCBw cm9wZXJ0eSwgMCk7CisJaWYgKCFyaW5nYWNjX25wKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREVW KTsKKworCW11dGV4X2xvY2soJmszX3JpbmdhY2NfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNo X2VudHJ5KGVudHJ5LCAmazNfcmluZ2FjY19saXN0LCBsaXN0KQorCQlpZiAoZW50cnktPmRldi0+ b2Zfbm9kZSA9PSByaW5nYWNjX25wKSB7CisJCQlyaW5nYWNjID0gZW50cnk7CisJCQlicmVhazsK KwkJfQorCW11dGV4X3VubG9jaygmazNfcmluZ2FjY19saXN0X2xvY2spOworCW9mX25vZGVfcHV0 KHJpbmdhY2NfbnApOworCisJcmV0dXJuIHJpbmdhY2M7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChv Zl9rM19yaW5nYWNjX2dldF9ieV9waGFuZGxlKTsKKworc3RhdGljIGludCBrM19yaW5nYWNjX3By b2JlX2R0KHN0cnVjdCBrM19yaW5nYWNjICpyaW5nYWNjKQoreworCXN0cnVjdCBkZXZpY2Vfbm9k ZSAqbm9kZSA9IHJpbmdhY2MtPmRldi0+b2Zfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBy aW5nYWNjLT5kZXY7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3Jt X2RldmljZShkZXYpOworCWludCByZXQ7CisKKwlpZiAoIW5vZGUpIHsKKwkJZGV2X2VycihkZXYs ICJkZXZpY2UgdHJlZSBpbmZvIHVuYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJ fQorCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInRpLG51bS1yaW5ncyIsICZy aW5nYWNjLT5udW1fcmluZ3MpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJ0aSxudW0t cmluZ3MgcmVhZCBmYWlsdXJlICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJp bmdhY2MtPmRtYV9yaW5nX3Jlc2V0X3F1aXJrID0KKwkJCW9mX3Byb3BlcnR5X3JlYWRfYm9vbChu b2RlLCAidGksZG1hLXJpbmctcmVzZXQtcXVpcmsiKTsKKworCXJpbmdhY2MtPnRpc2NpID0gdGlf c2NpX2dldF9ieV9waGFuZGxlKG5vZGUsICJ0aSxzY2kiKTsKKwlpZiAoSVNfRVJSKHJpbmdhY2Mt PnRpc2NpKSkgeworCQlyZXQgPSBQVFJfRVJSKHJpbmdhY2MtPnRpc2NpKTsKKwkJaWYgKHJldCAh PSAtRVBST0JFX0RFRkVSKQorCQkJZGV2X2VycihkZXYsICJ0aSxzY2kgcmVhZCBmYWlsICVkXG4i LCByZXQpOworCQlyaW5nYWNjLT50aXNjaSA9IE5VTEw7CisJCXJldHVybiByZXQ7CisJfQorCisJ cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInRpLHNjaS1kZXYtaWQiLAorCQkJCSAg ICZyaW5nYWNjLT50aXNjaV9kZXZfaWQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJ0 aSxzY2ktZGV2LWlkIHJlYWQgZmFpbCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisK KwlwZGV2LT5pZCA9IHJpbmdhY2MtPnRpc2NpX2Rldl9pZDsKKworCXJpbmdhY2MtPnJtX2dwX3Jh bmdlID0gZGV2bV90aV9zY2lfZ2V0X29mX3Jlc291cmNlKHJpbmdhY2MtPnRpc2NpLCBkZXYsCisJ CQkJCQlyaW5nYWNjLT50aXNjaV9kZXZfaWQsCisJCQkJCQkidGksc2NpLXJtLXJhbmdlLWdwLXJp bmdzIik7CisJaWYgKElTX0VSUihyaW5nYWNjLT5ybV9ncF9yYW5nZSkpIHsKKwkJZGV2X2Vycihk ZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgTVNJIGludGVycnVwdHNcbiIpOworCQlyZXR1cm4gUFRS X0VSUihyaW5nYWNjLT5ybV9ncF9yYW5nZSk7CisJfQorCisJcmV0dXJuIHRpX3NjaV9pbnRhX21z aV9kb21haW5fYWxsb2NfaXJxcyhyaW5nYWNjLT5kZXYsCisJCQkJCQkgcmluZ2FjYy0+cm1fZ3Bf cmFuZ2UpOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcHJvYmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgazNfcmluZ2FjYyAqcmluZ2FjYzsKKwl2b2lkIF9f aW9tZW0gKmJhc2VfZmlmbywgKmJhc2VfcnQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYt PmRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgcmV0LCBpOworCisJcmluZ2FjYyA9 IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcmluZ2FjYyksIEdGUF9LRVJORUwpOworCWlmICgh cmluZ2FjYykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyaW5nYWNjLT5kZXYgPSBkZXY7CisJbXV0 ZXhfaW5pdCgmcmluZ2FjYy0+cmVxX2xvY2spOworCisJZGV2LT5tc2lfZG9tYWluID0gb2ZfbXNp X2dldF9kb21haW4oZGV2LCBkZXYtPm9mX25vZGUsCisJCQkJCSAgICBET01BSU5fQlVTX1RJX1ND SV9JTlRBX01TSSk7CisJaWYgKCFkZXYtPm1zaV9kb21haW4pIHsKKwkJZGV2X2VycihkZXYsICJG YWlsZWQgdG8gZ2V0IE1TSSBkb21haW5cbiIpOworCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwl9 CisKKwlyZXQgPSBrM19yaW5nYWNjX3Byb2JlX2R0KHJpbmdhY2MpOworCWlmIChyZXQpCisJCXJl dHVybiByZXQ7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElP UkVTT1VSQ0VfTUVNLCAicnQiKTsKKwliYXNlX3J0ID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRl diwgcmVzKTsKKwlpZiAoSVNfRVJSKGJhc2VfcnQpKQorCQlyZXR1cm4gUFRSX0VSUihiYXNlX3J0 KTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJD RV9NRU0sICJmaWZvcyIpOworCWJhc2VfZmlmbyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYs IHJlcyk7CisJaWYgKElTX0VSUihiYXNlX2ZpZm8pKQorCQlyZXR1cm4gUFRSX0VSUihiYXNlX2Zp Zm8pOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09V UkNFX01FTSwgInByb3h5X2djZmciKTsKKwlyaW5nYWNjLT5wcm94eV9nY2ZnID0gZGV2bV9pb3Jl bWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKHJpbmdhY2MtPnByb3h5X2djZmcp KQorCQlyZXR1cm4gUFRSX0VSUihyaW5nYWNjLT5wcm94eV9nY2ZnKTsKKworCXJlcyA9IHBsYXRm b3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sCisJCQkJCSAgICJw cm94eV90YXJnZXQiKTsKKwlyaW5nYWNjLT5wcm94eV90YXJnZXRfYmFzZSA9IGRldm1faW9yZW1h cF9yZXNvdXJjZShkZXYsIHJlcyk7CisJaWYgKElTX0VSUihyaW5nYWNjLT5wcm94eV90YXJnZXRf YmFzZSkpCisJCXJldHVybiBQVFJfRVJSKHJpbmdhY2MtPnByb3h5X3RhcmdldF9iYXNlKTsKKwor CXJpbmdhY2MtPm51bV9wcm94aWVzID0gZGJnX3JlYWRsKCZyaW5nYWNjLT5wcm94eV9nY2ZnLT5j b25maWcpICYKKwkJCQkJIEszX1JJTkdBQ0NfUFJPWFlfQ0ZHX1RIUkVBRFNfTUFTSzsKKworCXJp bmdhY2MtPnJpbmdzID0gZGV2bV9remFsbG9jKGRldiwKKwkJCQkgICAgICBzaXplb2YoKnJpbmdh Y2MtPnJpbmdzKSAqCisJCQkJICAgICAgcmluZ2FjYy0+bnVtX3JpbmdzLAorCQkJCSAgICAgIEdG UF9LRVJORUwpOworCXJpbmdhY2MtPnJpbmdzX2ludXNlID0gZGV2bV9rY2FsbG9jKGRldiwKKwkJ CQkJICAgIEJJVFNfVE9fTE9OR1MocmluZ2FjYy0+bnVtX3JpbmdzKSwKKwkJCQkJICAgIHNpemVv Zih1bnNpZ25lZCBsb25nKSwgR0ZQX0tFUk5FTCk7CisJcmluZ2FjYy0+cHJveHlfaW51c2UgPSBk ZXZtX2tjYWxsb2MoZGV2LAorCQkJCQkgICAgQklUU19UT19MT05HUyhyaW5nYWNjLT5udW1fcHJv eGllcyksCisJCQkJCSAgICBzaXplb2YodW5zaWduZWQgbG9uZyksIEdGUF9LRVJORUwpOworCisJ aWYgKCFyaW5nYWNjLT5yaW5ncyB8fCAhcmluZ2FjYy0+cmluZ3NfaW51c2UgfHwgIXJpbmdhY2Mt PnByb3h5X2ludXNlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCByaW5n YWNjLT5udW1fcmluZ3M7IGkrKykgeworCQlyaW5nYWNjLT5yaW5nc1tpXS5ydCA9IGJhc2VfcnQg KworCQkJCSAgICAgICBLM19SSU5HQUNDX1JUX1JFR1NfU1RFUCAqIGk7CisJCXJpbmdhY2MtPnJp bmdzW2ldLmZpZm9zID0gYmFzZV9maWZvICsKKwkJCQkJICBLM19SSU5HQUNDX0ZJRk9fUkVHU19T VEVQICogaTsKKwkJcmluZ2FjYy0+cmluZ3NbaV0ucGFyZW50ID0gcmluZ2FjYzsKKwkJcmluZ2Fj Yy0+cmluZ3NbaV0ucmluZ19pZCA9IGk7CisJCXJpbmdhY2MtPnJpbmdzW2ldLnByb3h5X2lkID0g SzNfUklOR0FDQ19QUk9YWV9OT1RfVVNFRDsKKwl9CisJZGV2X3NldF9kcnZkYXRhKGRldiwgcmlu Z2FjYyk7CisKKwlyaW5nYWNjLT50aXNjaV9yaW5nX29wcyA9ICZyaW5nYWNjLT50aXNjaS0+b3Bz LnJtX3Jpbmdfb3BzOworCisJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKKwlyZXQgPSBwbV9ydW50 aW1lX2dldF9zeW5jKGRldik7CisJaWYgKHJldCA8IDApIHsKKwkJcG1fcnVudGltZV9wdXRfbm9p ZGxlKGRldik7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBwbSAlZFxuIiwgcmV0 KTsKKwkJZ290byBlcnI7CisJfQorCisJbXV0ZXhfbG9jaygmazNfcmluZ2FjY19saXN0X2xvY2sp OworCWxpc3RfYWRkX3RhaWwoJnJpbmdhY2MtPmxpc3QsICZrM19yaW5nYWNjX2xpc3QpOworCW11 dGV4X3VubG9jaygmazNfcmluZ2FjY19saXN0X2xvY2spOworCisJZGV2X2luZm8oZGV2LCAiUmlu ZyBBY2NlbGVyYXRvciBwcm9iZWQgcmluZ3M6JXUsIGdwLXJpbmdzWyV1LCV1XSBzY2ktZGV2LWlk OiV1XG4iLAorCQkgcmluZ2FjYy0+bnVtX3JpbmdzLAorCQkgcmluZ2FjYy0+cm1fZ3BfcmFuZ2Ut PmRlc2NbMF0uc3RhcnQsCisJCSByaW5nYWNjLT5ybV9ncF9yYW5nZS0+ZGVzY1swXS5udW0sCisJ CSByaW5nYWNjLT50aXNjaV9kZXZfaWQpOworCWRldl9pbmZvKGRldiwgImRtYS1yaW5nLXJlc2V0 LXF1aXJrOiAlc1xuIiwKKwkJIHJpbmdhY2MtPmRtYV9yaW5nX3Jlc2V0X3F1aXJrID8gImVuYWJs ZWQiIDogImRpc2FibGVkIik7CisJZGV2X2luZm8oZGV2LCAiUkEgUHJveHkgcmV2LiAlMDh4LCBu dW1fcHJveGllczoldVxuIiwKKwkJIGRiZ19yZWFkbCgmcmluZ2FjYy0+cHJveHlfZ2NmZy0+cmV2 aXNpb24pLAorCQkgcmluZ2FjYy0+bnVtX3Byb3hpZXMpOworCXJldHVybiAwOworCitlcnI6CisJ cG1fcnVudGltZV9kaXNhYmxlKGRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBr M19yaW5nYWNjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVj dCBrM19yaW5nYWNjICpyaW5nYWNjID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCisJ cG1fcnVudGltZV9wdXRfc3luYygmcGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBk ZXYtPmRldik7CisKKwltdXRleF9sb2NrKCZrM19yaW5nYWNjX2xpc3RfbG9jayk7CisJbGlzdF9k ZWwoJnJpbmdhY2MtPmxpc3QpOworCW11dGV4X3VubG9jaygmazNfcmluZ2FjY19saXN0X2xvY2sp OworCXJldHVybiAwOworfQorCisvKiBNYXRjaCB0YWJsZSBmb3Igb2ZfcGxhdGZvcm0gYmluZGlu ZyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgazNfcmluZ2FjY19vZl9tYXRj aFtdID0geworCXsgLmNvbXBhdGlibGUgPSAidGksYW02NTQtbmF2c3MtcmluZ2FjYyIsIH0sCisJ e30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgazNfcmluZ2FjY19vZl9tYXRjaCk7CisK K3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGszX3JpbmdhY2NfZHJpdmVyID0geworCS5w cm9iZQkJPSBrM19yaW5nYWNjX3Byb2JlLAorCS5yZW1vdmUJCT0gazNfcmluZ2FjY19yZW1vdmUs CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImszLXJpbmdhY2MiLAorCQkub2ZfbWF0Y2hfdGFi bGUgPSBrM19yaW5nYWNjX29mX21hdGNoLAorCX0sCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZl cihrM19yaW5nYWNjX2RyaXZlcik7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVM RV9ERVNDUklQVElPTigiVEkgUmluZ2FjYyBkcml2ZXIgZm9yIEszIFNPQ3MiKTsKK01PRFVMRV9B VVRIT1IoIkdyeWdvcmlpIFN0cmFzaGtvIDxncnlnb3JpaS5zdHJhc2hrb0B0aS5jb20+Iik7CmRp ZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvYy90aS9rMy1yaW5nYWNjLmggYi9pbmNsdWRlL2xp bnV4L3NvYy90aS9rMy1yaW5nYWNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwLi5kZWJmZmJhNDhhYzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3Nv Yy90aS9rMy1yaW5nYWNjLmgKQEAgLTAsMCArMSwyNjIgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wICovCisvKgorICogSzMgUmluZyBBY2NlbGVyYXRvciAoUkEpIHN1YnN5 c3RlbSBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgVGV4YXMgSW5zdHJ1bWVu dHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20KKyAqLworCisjaWZuZGVmIF9fU09D X1RJX0szX1JJTkdBQ0NfQVBJX0hfCisjZGVmaW5lIF9fU09DX1RJX0szX1JJTkdBQ0NfQVBJX0hf CisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgZGV2aWNlX25vZGU7CisKKy8q KgorICogZW51bSBrM19yaW5nX21vZGUgLSAmc3RydWN0IGszX3JpbmdfY2ZnIG1vZGUKKyAqCisg KiBSQSByaW5nIG9wZXJhdGlvbmFsIG1vZGVzCisgKgorICogQEszX1JJTkdBQ0NfUklOR19NT0RF X1JJTkc6IEV4cG9zZWQgUmluZyBtb2RlIGZvciBTVyBkaXJlY3QgYWNjZXNzCisgKiBASzNfUklO R0FDQ19SSU5HX01PREVfTUVTU0FHRTogTWVzc2FnaW5nIG1vZGUuIE1lc3NhZ2luZyBtb2RlIHJl cXVpcmVzCisgKgl0aGF0IGFsbCBhY2Nlc3NlcyB0byB0aGUgcXVldWUgbXVzdCBnbyB0aHJvdWdo IHRoaXMgSVAgc28gdGhhdCBhbGwKKyAqCWFjY2Vzc2VzIHRvIHRoZSBtZW1vcnkgYXJlIGNvbnRy b2xsZWQgYW5kIG9yZGVyZWQuIFRoaXMgSVAgdGhlbgorICoJY29udHJvbHMgdGhlIGVudGlyZSBz dGF0ZSBvZiB0aGUgcXVldWUsIGFuZCBTVyBoYXMgbm8gZGlyZWN0bHkgY29udHJvbCwKKyAqCXN1 Y2ggYXMgdGhyb3VnaCBkb29yYmVsbHMgYW5kIGNhbm5vdCBhY2Nlc3MgdGhlIHN0b3JhZ2UgbWVt b3J5IGRpcmVjdGx5LgorICoJVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIHdoZW4gbW9yZSB0 aGFuIG9uZSBTVyBvciBIVyBlbnRpdHkgY2FuIGJlCisgKgl0aGUgcHJvZHVjZXIgYW5kL29yIGNv bnN1bWVyIGF0IHRoZSBzYW1lIHRpbWUKKyAqIEBLM19SSU5HQUNDX1JJTkdfTU9ERV9DUkVERU5U SUFMUzogQ3JlZGVudGlhbHMgbW9kZSBpcyBtZXNzYWdlIG1vZGUgcGx1cworICoJc3RvcmVzIGNy ZWRlbnRpYWxzIHdpdGggZWFjaCBtZXNzYWdlLCByZXF1aXJpbmcgdGhlIGVsZW1lbnQgc2l6ZSB0 byBiZQorICoJZG91YmxlZCB0byBmaXQgdGhlIGNyZWRlbnRpYWxzLiBBbnkgZXhwb3NlZCBtZW1v cnkgc2hvdWxkIGJlIHByb3RlY3RlZAorICoJYnkgYSBmaXJld2FsbCBmcm9tIHVud2FudGVkIGFj Y2VzcworICogQEszX1JJTkdBQ0NfUklOR19NT0RFX1FNOiAgUXVldWUgbWFuYWdlciBtb2RlLiBU aGlzIHRha2VzIHRoZSBjcmVkZW50aWFscworICoJbW9kZSBhbmQgYWRkcyBwYWNrZXQgbGVuZ3Ro IHBlciBlbGVtZW50LCBhbG9uZyB3aXRoIGFkZGl0aW9uYWwgcmVhZCBvbmx5CisgKglmaWVsZHMg Zm9yIGVsZW1lbnQgY291bnQgYW5kIGFjY3VtdWxhdGVkIHF1ZXVlIGxlbmd0aC4gVGhlIFFNIG1v ZGUgb25seQorICoJb3BlcmF0ZXMgd2l0aCBhbiA4IGJ5dGUgZWxlbWVudCBzaXplIChhbnkgb3Ro ZXIgZWxlbWVudCBzaXplIGlzCisgKglpbGxlZ2FsKSwgYW5kIGxpa2UgaW4gY3JlZGVudGlhbHMg bW9kZSBlYWNoIG9wZXJhdGlvbiB1c2VzIDIgZWxlbWVudAorICoJc2xvdHMgdG8gc3RvcmUgdGhl IGNyZWRlbnRpYWxzIGFuZCBsZW5ndGggZmllbGRzCisgKi8KK2VudW0gazNfcmluZ19tb2RlIHsK KwlLM19SSU5HQUNDX1JJTkdfTU9ERV9SSU5HID0gMCwKKwlLM19SSU5HQUNDX1JJTkdfTU9ERV9N RVNTQUdFLAorCUszX1JJTkdBQ0NfUklOR19NT0RFX0NSRURFTlRJQUxTLAorCUszX1JJTkdBQ0Nf UklOR19NT0RFX1FNLAorCUszX1JJTkdBQ0NfUklOR19NT0RFX0lOVkFMSUQKK307CisKKy8qKgor ICogZW51bSBrM19yaW5nX3NpemUgLSAmc3RydWN0IGszX3JpbmdfY2ZnIGVsbV9zaXplCisgKgor ICogUkEgcmluZyBlbGVtZW50J3Mgc2l6ZXMgaW4gYnl0ZXMuCisgKi8KK2VudW0gazNfcmluZ19z aXplIHsKKwlLM19SSU5HQUNDX1JJTkdfRUxTSVpFXzQgPSAwLAorCUszX1JJTkdBQ0NfUklOR19F TFNJWkVfOCwKKwlLM19SSU5HQUNDX1JJTkdfRUxTSVpFXzE2LAorCUszX1JJTkdBQ0NfUklOR19F TFNJWkVfMzIsCisJSzNfUklOR0FDQ19SSU5HX0VMU0laRV82NCwKKwlLM19SSU5HQUNDX1JJTkdf RUxTSVpFXzEyOCwKKwlLM19SSU5HQUNDX1JJTkdfRUxTSVpFXzI1NiwKKwlLM19SSU5HQUNDX1JJ TkdfRUxTSVpFX0lOVkFMSUQKK307CisKK3N0cnVjdCBrM19yaW5nYWNjOworc3RydWN0IGszX3Jp bmc7CisKKy8qKgorICogZW51bSBrM19yaW5nX2NmZyAtIFJBIHJpbmcgY29uZmlndXJhdGlvbiBz dHJ1Y3R1cmUKKyAqCisgKiBAc2l6ZTogUmluZyBzaXplLCBudW1iZXIgb2YgZWxlbWVudHMKKyAq IEBlbG1fc2l6ZTogUmluZyBlbGVtZW50IHNpemUKKyAqIEBtb2RlOiBSaW5nIG9wZXJhdGlvbmFs IG1vZGUKKyAqIEBmbGFnczogUmluZyBjb25maWd1cmF0aW9uIGZsYWdzLiBQb3NzaWJsZSB2YWx1 ZXM6CisgKgkgQEszX1JJTkdBQ0NfUklOR19TSEFSRUQ6IHdoZW4gc2V0IGFsbG93cyB0byByZXF1 ZXN0IHRoZSBzYW1lIHJpbmcKKyAqCSBmZXcgdGltZXMuIEl0J3MgdXNhYmxlIHdoZW4gdGhlIHNh bWUgcmluZyBpcyB1c2VkIGFzIEZyZWUgSG9zdCBQRCByaW5nCisgKgkgZm9yIGRpZmZlcmVudCBm bG93cywgZm9yIGV4YW1wbGUuCisgKgkgTm90ZTogTG9ja2luZyBzaG91bGQgYmUgZG9uZSBieSBj b25zdW1lciBpZiByZXF1aXJlZAorICovCitzdHJ1Y3QgazNfcmluZ19jZmcgeworCXUzMiBzaXpl OworCWVudW0gazNfcmluZ19zaXplIGVsbV9zaXplOworCWVudW0gazNfcmluZ19tb2RlIG1vZGU7 CisjZGVmaW5lIEszX1JJTkdBQ0NfUklOR19TSEFSRUQgQklUKDEpCisJdTMyIGZsYWdzOworfTsK KworI2RlZmluZSBLM19SSU5HQUNDX1JJTkdfSURfQU5ZICgtMSkKKworLyoqCisgKiBvZl9rM19y aW5nYWNjX2dldF9ieV9waGFuZGxlIC0gZmluZCBhIFJBIGJ5IHBoYW5kbGUgcHJvcGVydHkKKyAq IEBucDogZGV2aWNlIG5vZGUKKyAqIEBwcm9wbmFtZTogcHJvcGVydHkgbmFtZSBjb250YWluaW5n IHBoYW5kbGUgb24gUkEgbm9kZQorICoKKyAqIFJldHVybnMgcG9pbnRlciBvbiB0aGUgUkEgLSBz dHJ1Y3QgazNfcmluZ2FjYworICogb3IgLUVOT0RFViBpZiBub3QgZm91bmQsCisgKiBvciAtRVBS T0JFX0RFRkVSIGlmIG5vdCB5ZXQgcmVnaXN0ZXJlZAorICovCitzdHJ1Y3QgazNfcmluZ2FjYyAq b2ZfazNfcmluZ2FjY19nZXRfYnlfcGhhbmRsZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJ CQkJY29uc3QgY2hhciAqcHJvcGVydHkpOworCisjZGVmaW5lIEszX1JJTkdBQ0NfUklOR19VU0Vf UFJPWFkgQklUKDEpCisKKy8qKgorICogazNfcmluZ2FjY19yZXF1ZXN0X3JpbmcgLSByZXF1ZXN0 IHJpbmcgZnJvbSByaW5nYWNjCisgKiBAcmluZ2FjYzogcG9pbnRlciBvbiByaW5nYWNjCisgKiBA aWQ6IHJpbmcgaWQgb3IgSzNfUklOR0FDQ19SSU5HX0lEX0FOWSBmb3IgYW55IGdlbmVyYWwgcHVy cG9zZSByaW5nCisgKiBAZmxhZ3M6CisgKglASzNfUklOR0FDQ19SSU5HX1VTRV9QUk9YWTogaWYg c2V0IC0gcHJveHkgd2lsbCBiZSBhbGxvY2F0ZWQgYW5kCisgKgkJdXNlZCB0byBhY2Nlc3Mgcmlu ZyBtZW1vcnkuIFNvcHBvcnRlZCBvbmx5IGZvciByaW5ncyBpbgorICoJCU1lc3NhZ2UvQ3JlZGVu dGlhbHMvUXVldWUgbW9kZS4KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgb24gdGhlIFJpbmcgLSBz dHJ1Y3QgazNfcmluZworICogb3IgTlVMTCBpbiBjYXNlIG9mIGZhaWx1cmUuCisgKi8KK3N0cnVj dCBrM19yaW5nICprM19yaW5nYWNjX3JlcXVlc3RfcmluZyhzdHJ1Y3QgazNfcmluZ2FjYyAqcmlu Z2FjYywKKwkJCQkJaW50IGlkLCB1MzIgZmxhZ3MpOworCisvKioKKyAqIGszX3JpbmdhY2Nfcmlu Z19yZXNldCAtIHJpbmcgcmVzZXQKKyAqIEByaW5nOiBwb2ludGVyIG9uIFJpbmcKKyAqCisgKiBS ZXNldHMgcmluZyBpbnRlcm5hbCBzdGF0ZSAoKGh3KW9jYywgKGh3KWlkeCkuCisgKiBUT0RPX0dT OiA/IFJpbmcgY2FuIGJlIHJldXNlZCB3aXRob3V0IHJlY29uZmlndXJhdGlvbgorICovCit2b2lk IGszX3JpbmdhY2NfcmluZ19yZXNldChzdHJ1Y3QgazNfcmluZyAqcmluZyk7CisvKioKKyAqIGsz X3JpbmdhY2NfcmluZ19yZXNldCAtIHJpbmcgcmVzZXQgZm9yIERNQSByaW5ncworICogQHJpbmc6 IHBvaW50ZXIgb24gUmluZworICoKKyAqIFJlc2V0cyByaW5nIGludGVybmFsIHN0YXRlICgoaHcp b2NjLCAoaHcpaWR4KS4gU2hvdWxkIGJlIHVzZWQgZm9yIHJpbmdzCisgKiB3aGljaCBhcmUgcmVh ZCBieSBLMyBVRE1BLCBsaWtlIFRYIG9yIEZyZWUgSG9zdCBQRCByaW5ncy4KKyAqLwordm9pZCBr M19yaW5nYWNjX3JpbmdfcmVzZXRfZG1hKHN0cnVjdCBrM19yaW5nICpyaW5nLCB1MzIgb2NjKTsK KworLyoqCisgKiBrM19yaW5nYWNjX3JpbmdfZnJlZSAtIHJpbmcgZnJlZQorICogQHJpbmc6IHBv aW50ZXIgb24gUmluZworICoKKyAqIFJlc2V0cyByaW5nIGFuZCBmcmVlIGFsbCBhbG9jYXRlZCBy ZXNvdXJjZXMuCisgKi8KK2ludCBrM19yaW5nYWNjX3JpbmdfZnJlZShzdHJ1Y3QgazNfcmluZyAq cmluZyk7CisKKy8qKgorICogazNfcmluZ2FjY19nZXRfcmluZ19pZCAtIEdldCB0aGUgUmluZyBJ RAorICogQHJpbmc6IHBvaW50ZXIgb24gcmluZworICoKKyAqIFJldHVybnMgdGhlIFJpbmcgSUQK KyAqLwordTMyIGszX3JpbmdhY2NfZ2V0X3JpbmdfaWQoc3RydWN0IGszX3JpbmcgKnJpbmcpOwor CisvKioKKyAqIGszX3JpbmdhY2NfZ2V0X3JpbmdfaXJxX251bSAtIEdldCB0aGUgaXJxIG51bWJl ciBmb3IgdGhlIHJpbmcKKyAqIEByaW5nOiBwb2ludGVyIG9uIHJpbmcKKyAqCisgKiBSZXR1cm5z IHRoZSBpbnRlcnJ1cHQgbnVtYmVyIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgdGhlIGlu dGVycnVwdAorICovCitpbnQgazNfcmluZ2FjY19nZXRfcmluZ19pcnFfbnVtKHN0cnVjdCBrM19y aW5nICpyaW5nKTsKKworLyoqCisgKiBrM19yaW5nYWNjX3JpbmdfY2ZnIC0gcmluZyBjb25maWd1 cmUKKyAqIEByaW5nOiBwb2ludGVyIG9uIHJpbmcKKyAqIEBjZmc6IFJpbmcgY29uZmlndXJhdGlv biBwYXJhbWV0ZXJzIChzZWUgJnN0cnVjdCBrM19yaW5nX2NmZykKKyAqCisgKiBDb25maWd1cmVz IHJpbmcsIGluY2x1ZGluZyByaW5nIG1lbW9yeSBhbGxvY2F0aW9uLgorICogUmV0dXJucyAwIG9u IHN1Y2Nlc3MsIGVycm5vIG90aGVyd2lzZS4KKyAqLworaW50IGszX3JpbmdhY2NfcmluZ19jZmco c3RydWN0IGszX3JpbmcgKnJpbmcsIHN0cnVjdCBrM19yaW5nX2NmZyAqY2ZnKTsKKworLyoqCisg KiBrM19yaW5nYWNjX3JpbmdfZ2V0X3NpemUgLSBnZXQgcmluZyBzaXplCisgKiBAcmluZzogcG9p bnRlciBvbiByaW5nCisgKgorICogUmV0dXJucyByaW5nIHNpemUgaW4gbnVtYmVyIG9mIGVsZW1l bnRzLgorICovCit1MzIgazNfcmluZ2FjY19yaW5nX2dldF9zaXplKHN0cnVjdCBrM19yaW5nICpy aW5nKTsKKworLyoqCisgKiBrM19yaW5nYWNjX3JpbmdfZ2V0X2ZyZWUgLSBnZXQgZnJlZSBlbGVt ZW50cworICogQHJpbmc6IHBvaW50ZXIgb24gcmluZworICoKKyAqIFJldHVybnMgbnVtYmVyIG9m IGZyZWUgZWxlbWVudHMgaW4gdGhlIHJpbmcuCisgKi8KK3UzMiBrM19yaW5nYWNjX3JpbmdfZ2V0 X2ZyZWUoc3RydWN0IGszX3JpbmcgKnJpbmcpOworCisvKioKKyAqIGszX3JpbmdhY2NfcmluZ19n ZXRfb2NjIC0gZ2V0IHJpbmcgb2NjdXBhbmN5CisgKiBAcmluZzogcG9pbnRlciBvbiByaW5nCisg KgorICogUmV0dXJucyB0b3RhbCBudW1iZXIgb2YgdmFsaWQgZW50cmllcyBvbiB0aGUgcmluZwor ICovCit1MzIgazNfcmluZ2FjY19yaW5nX2dldF9vY2Moc3RydWN0IGszX3JpbmcgKnJpbmcpOwor CisvKioKKyAqIGszX3JpbmdhY2NfcmluZ19pc19mdWxsIC0gY2hlY2tzIGlmIHJpbmcgaXMgZnVs bAorICogQHJpbmc6IHBvaW50ZXIgb24gcmluZworICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUg cmluZyBpcyBmdWxsCisgKi8KK3UzMiBrM19yaW5nYWNjX3JpbmdfaXNfZnVsbChzdHJ1Y3QgazNf cmluZyAqcmluZyk7CisKKy8qKgorICogazNfcmluZ2FjY19yaW5nX3B1c2ggLSBwdXNoIGVsZW1l bnQgdG8gdGhlIHJpbmcgdGFpbAorICogQHJpbmc6IHBvaW50ZXIgb24gcmluZworICogQGVsZW06 IHBvaW50ZXIgb24gcmluZyBlbGVtZW50IGJ1ZmZlcgorICoKKyAqIFB1c2ggb25lIHJpbmcgZWxl bWVudCB0byB0aGUgcmluZyB0YWlsLiBTaXplIG9mIHRoZSByaW5nIGVsZW1lbnQgaXMKKyAqIGRl dGVybWluZWQgYnkgcmluZyBjb25maWd1cmF0aW9uICZzdHJ1Y3QgazNfcmluZ19jZmcgZWxtX3Np emUuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG90aGVyd2lzZS4KKyAqLwor aW50IGszX3JpbmdhY2NfcmluZ19wdXNoKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVt KTsKKworLyoqCisgKiBrM19yaW5nYWNjX3JpbmdfcG9wIC0gcG9wIGVsZW1lbnQgZnJvbSB0aGUg cmluZyBoZWFkCisgKiBAcmluZzogcG9pbnRlciBvbiByaW5nCisgKiBAZWxlbTogcG9pbnRlciBv biByaW5nIGVsZW1lbnQgYnVmZmVyCisgKgorICogUHVzaCBvbmUgcmluZyBlbGVtZW50IGZyb20g dGhlIHJpbmcgaGVhZC4gU2l6ZSBvZiB0aGUgcmluZyBlbGVtZW50IGlzCisgKiBkZXRlcm1pbmVk IGJ5IHJpbmcgY29uZmlndXJhdGlvbiAmc3RydWN0IGszX3JpbmdfY2ZnIGVsbV9zaXplLi4KKyAq CisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb3RoZXJ3aXNlLgorICovCitpbnQgazNf cmluZ2FjY19yaW5nX3BvcChzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7CisKKy8q KgorICogazNfcmluZ2FjY19yaW5nX3B1c2hfaGVhZCAtIHB1c2ggZWxlbWVudCB0byB0aGUgcmlu ZyBoZWFkCisgKiBAcmluZzogcG9pbnRlciBvbiByaW5nCisgKiBAZWxlbTogcG9pbnRlciBvbiBy aW5nIGVsZW1lbnQgYnVmZmVyCisgKgorICogUHVzaCBvbmUgcmluZyBlbGVtZW50IHRvIHRoZSBy aW5nIGhlYWQuIFNpemUgb2YgdGhlIHJpbmcgZWxlbWVudCBpcworICogZGV0ZXJtaW5lZCBieSBy aW5nIGNvbmZpZ3VyYXRpb24gJnN0cnVjdCBrM19yaW5nX2NmZyBlbG1fc2l6ZS4KKyAqCisgKiBS ZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb3RoZXJ3aXNlLgorICogTm90IFN1cHBvcnRlZCBi eSByaW5nIG1vZGVzOiBLM19SSU5HQUNDX1JJTkdfTU9ERV9SSU5HCisgKi8KK2ludCBrM19yaW5n YWNjX3JpbmdfcHVzaF9oZWFkKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKTsKKwor LyoqCisgKiBrM19yaW5nYWNjX3JpbmdfcG9wX3RhaWwgLSBwb3AgZWxlbWVudCBmcm9tIHRoZSBy aW5nIHRhaWwKKyAqIEByaW5nOiBwb2ludGVyIG9uIHJpbmcKKyAqIEBlbGVtOiBwb2ludGVyIG9u IHJpbmcgZWxlbWVudCBidWZmZXIKKyAqCisgKiBQdXNoIG9uZSByaW5nIGVsZW1lbnQgZnJvbSB0 aGUgcmluZyB0YWlsLiBTaXplIG9mIHRoZSByaW5nIGVsZW1lbnQgaXMKKyAqIGRldGVybWluZWQg YnkgcmluZyBjb25maWd1cmF0aW9uICZzdHJ1Y3QgazNfcmluZ19jZmcgZWxtX3NpemUuCisgKgor ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG90aGVyd2lzZS4KKyAqIE5vdCBTdXBwb3J0 ZWQgYnkgcmluZyBtb2RlczogSzNfUklOR0FDQ19SSU5HX01PREVfUklORworICovCitpbnQgazNf cmluZ2FjY19yaW5nX3BvcF90YWlsKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKTsK KwordTMyIGszX3JpbmdhY2NfZ2V0X3Rpc2NpX2Rldl9pZChzdHJ1Y3QgazNfcmluZyAqcmluZyk7 CisKKy8qKgorICogRGVidWdnaW5nIGRlZmluaXRpb25zCisgKiBUT0RPOiBtaWdodCBiZSByZW1v dmVkCisgKi8KKyNpZmRlZiBDT05GSUdfVElfSzNfUklOR0FDQ19ERUJVRwordm9pZCBrM19yaW5n YWNjX3JpbmdfZHVtcChzdHJ1Y3QgazNfcmluZyAqcmluZyk7CisjZWxzZQorc3RhdGljIGlubGlu ZSB2b2lkIGszX3JpbmdhY2NfcmluZ19kdW1wKHN0cnVjdCBrM19yaW5nICpyaW5nKSB7fTsKKyNl bmRpZgorCisjZW5kaWYgLyogX19TT0NfVElfSzNfUklOR0FDQ19BUElfSF8gKi8KLS0gClBldGVy CgpUZXhhcyBJbnN0cnVtZW50cyBGaW5sYW5kIE95LCBQb3Jra2FsYW5rYXR1IDIyLCAwMDE4MCBI ZWxzaW5raS4KWS10dW5udXMvQnVzaW5lc3MgSUQ6IDA2MTU1MjEtNC4gS290aXBhaWtrYS9Eb21p Y2lsZTogSGVsc2lua2kKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxp c3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0 aW5mby9saW51eC1hcm0ta2VybmVsCg==