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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 94B26C433EF for ; Thu, 3 Feb 2022 21:45:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=8yVkyxwfagqne/KPYHJWqB4mGq66kQJCePkjmDnooO0=; b=NjJmnWWVn4rLrg ZcJqZiov9h0NYXsAwHEZbr28Noh1c57PpGzqyJga0twFYwkKOChRfFnL67RoF9Z4rgkY/SuPbHOvG 0NUqe99bqEEsa2nW8ytJxTW/ZOC4nfaV4kIXG7E0gtdv6qvdpj2iE1cjj8Q1JzsT813OP0Gspftcm lBCJeRriQeyn1YolRvQYj6ejtltKW4goN/2f1Q00iOWmghGs3AG5+hCk2ywPznqgAs0pW9kNw+iLC PSo1AMiCEjOdoJqqqj8rnq9glAMbniT9kJ/BqK1SB34npIlAjqMIm3tYzXLM+LESmju6V62W0ZVbE mcfMj1DO09EruRCw03wg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nFjuY-002zeE-0o; Thu, 03 Feb 2022 21:45:02 +0000 Received: from ams.source.kernel.org ([145.40.68.75]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nFjuR-002zbW-CI for linux-phy@lists.infradead.org; Thu, 03 Feb 2022 21:45:00 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id D0DA2B83599; Thu, 3 Feb 2022 21:44:53 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 17D52C340F1; Thu, 3 Feb 2022 21:44:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1643924692; bh=w5LMY1+rwA9Dj62H2O4fDscbckU5NkGy+WESghS1ADw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qNXMVcAzRIgCPDgHOQvTo4NwO9xRPiTCPUkBnyfZRWuNJmp9jHV5OxTcRBcKR9NY/ brq9ZTveb2nWT1KIG60bJzxB5fDORrUdNpsnUk3D1UgVECQlPYXqPlGBiBUNSSwCcE B7X+r6Z2MA72KFwz5TPJjHpY7btTYlkR4c0yB0s9ojV873H9aMUUFSFyPA53lmbXkO lB6HnH+W8iPUspk8+JsApiNEnGbma3gvimKd7vBASLNB2Azfonh2s/WeGqFG5Vdgh0 8A8r8LetieYi0TFlB0DQQzFo4yS3XHlP0r6rpg0CJpXQhp9uVcWCy8jzVrHz2EPCGj He6Hl+Jgi1s1w== From: =?UTF-8?q?Marek=20Beh=C3=BAn?= To: Vinod Koul Cc: linux-phy@lists.infradead.org, Kishon Vijay Abraham I , pali@kernel.org, Miquel Raynal , =?UTF-8?q?Marek=20Beh=C3=BAn?= Subject: [PATCH phy v4 2/5] phy: marvell: phy-mvebu-a3700-comphy: Add native kernel implementation Date: Thu, 3 Feb 2022 22:44:41 +0100 Message-Id: <20220203214444.1508-3-kabel@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220203214444.1508-1-kabel@kernel.org> References: <20220203214444.1508-1-kabel@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220203_134455_931959_B28BF365 X-CRM114-Status: GOOD ( 27.60 ) X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org RnJvbTogUGFsaSBSb2jDoXIgPHBhbGlAa2VybmVsLm9yZz4KClJlbW92ZSBvbGQgUlBDIGltcGxl bWVudGF0aW9uIGFuZCBhZGQgYSBuZXcgbmF0aXZlIGtlcm5lbCBpbXBsZW1lbnRhdGlvbi4KClRo ZSBvbGQgaW1wbGVtZW50YXRpb24gdXNlcyBBUk0gU01DIEFQSSB0byBpc3N1ZSBSUEMgY2FsbHMg dG8gQVJNIFRydXN0ZWQKRmlybXdhcmUgd2hpY2ggcHJvdmlkZXMgcmVhbCBpbXBsZW1lbnRhdGlv biBvZiBQSFkgY29uZmlndXJhdGlvbi4KCkJ1dCBvbGRlciB2ZXJzaW9ucyBvZiBBUk0gVHJ1c3Rl ZCBGaXJtd2FyZSBkbyBub3QgcHJvdmlkZSB0aGlzIFBIWQpjb25maWd1cmF0aW9uIGZ1bmN0aW9u YWxpdHksIHNpbXBseSByZXR1cm5pbmc6IG9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkOyBvcgp3b3Jz ZSwgc29tZSB2ZXJzaW9ucyBwcm92aWRlIHRoZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9uYWxpdHkg aW5jb3JyZWN0bHkuCgpGb3IgZXhhbXBsZSB0aGUgZmlybXdhcmUgc2hpcHBlZCBpbiBFU1BSRVNT T2JpbiBib2FyZCBoYXMgdGhpcyBvbGRlcgp2ZXJzaW9uIG9mIEFSTSBUcnVzdGVkIEZpcm13YXJl IGFuZCB0aGVyZWZvcmUgU0FUQSwgVVNCIDMuMCBhbmQgUENJZQpmdW5jdGlvbmFsaXR5IGRvIG5v dCB3b3JrIHdpdGggbmV3ZXIgdmVyc2lvbnMgb2YgTGludXgga2VybmVsLgoKRHVlIHRvIHRoZSBh Ym92ZSByZWFzb25zLCB0aGUgZm9sbG93aW5nIGNvbW1pdHMgd2VyZSBpbnRyb2R1Y2VkIGludG8g TGludXgsCnRvIHdvcmthcm91bmQgdGhlc2UgaXNzdWVzIGJ5IGlnbm9yaW5nIC1FT1BOT1RTVVBQ IGVycm9yIGNvZGUgZnJvbQpwaHktbXZlYnUtYTM3MDAtY29tcGh5IGRyaXZlciBmdW5jdGlvbiBw aHlfcG93ZXJfb24oKToKCmNvbW1pdCA0NWFlZmUzZDIyNTEgKCJhdGE6IGFoY2k6IG12ZWJ1OiBN YWtlIFNBVEEgUEhZIG9wdGlvbmFsIGZvciBBcm1hZGEKMzcyMCIpCmNvbW1pdCAzMjQxOTI5YjY3 ZDIgKCJ1c2I6IGhvc3Q6IHhoY2k6IG12ZWJ1OiBtYWtlIFVTQiAzLjAgUEhZIG9wdGlvbmFsIGZv cgpBcm1hZGEgMzcyMCIpCmNvbW1pdCBiMGM2YWUwZjg5NDggKCJQQ0k6IGFhcmR2YXJrOiBGaXgg aW5pdGlhbGl6YXRpb24gd2l0aCBvbGQgTWFydmVsbCdzCkFybSBUcnVzdGVkIEZpcm13YXJlIikK ClJlcGxhY2UgdGhpcyBSUEMgaW1wbGVtZW50YXRpb24gd2l0aCBwcm9wZXIgbmF0aXZlIGtlcm5l bCBpbXBsZW1lbnRhdGlvbiwKd2hpY2ggaXMgaW5kZXBlbmRlbnQgb24gdGhlIGZpcm13YXJlLiBO ZXZlciByZXR1cm4gLUVPUE5PVFNVUFAgZm9yIHByb3Blcgphcmd1bWVudHMuCgpUaGlzIHNob3Vs ZCBzb2x2ZSBtdWx0aXBsZSBpc3N1ZXMgd2l0aCByZWFsLXdvcmxkIGJvYXJkcywgd2hlcmUgaXQg aXMgbm90CnBvc3NpYmxlIG9yIHJlYWxseSBpbmNvbnZlbmllbnQgdG8gY2hhbmdlIHRoZSBmaXJt d2FyZS4gTGV0J3MgZWxpbWluYXRlCnRoZXNlIGlzc3Vlcy4KClRoaXMgaW1wbGVtZW50YXRpb24g aXMgcG9ydGVkIGRpcmVjdGx5IGZyb20gQXJtYWRhIDM3MjAgY29tcGh5IGRyaXZlciBmb3VuZApp biBuZXdlc3QgdmVyc2lvbiBvZiBBUk0gVHJ1c3RlZCBGaXJtd2FyZSBzb3VyY2UgY29kZSwgYnV0 IHdpdGggdmFyaW91cwpmaXhlcyBvZiByZWdpc3RlciBuYW1lcywgc29tZSBhZGRlZCBjb21tZW50 cywgc29tZSByZWZhY3RvcmluZyBkdWUgdG8gdGhlCm9yaWdpbmFsIGNvZGUgbm90IGNvbmZvcm1p bmcgdG8ga2VybmVsIHN0YW5kYXJkcy4gQWxzbyBQQ0llIG1vZGUgcG93ZXJvZmYKc3VwcG9ydCB3 YXMgYWRkZWQgaGVyZSwgYW5kIFBIWSByZXNldCBzdXBwb3J0LiBUaGVzZSBjaGFuZ2VzIGFyZSBh bHNvIGdvaW5nCnRvIGJlIHNlbnQgdG8gQVJNIFRydXN0ZWQgRmlybXdhcmUuCgpTaWduZWQtb2Zm LWJ5OiBQYWxpIFJvaMOhciA8cGFsaUBrZXJuZWwub3JnPgpBY2tlZC1ieTogTWlxdWVsIFJheW5h bCA8bWlxdWVsLnJheW5hbEBib290bGluLmNvbT4KWyBQYWxpIGRpZCB0aGUgcG9ydGluZyBmcm9t IEFURi4KICBJIChNYXJlaykgdGhlbiBmaXhlZCBzb21lIHJlZ2lzdGVyIG5hbWVzLCBzb21lIHZh cmlvdXMgb3RoZXIgdGhpbmdzLAogIGFkZGVkIHNvbWUgY29tbWVudHMgYW5kIHJlZmFjdG9yZWQg dGhlIGNvZGUgdG8ga2VybmVsIHN0YW5kYXJkcy4gQWxzbwogIGZpeGVkIFBIWSBwb3dlcm9mZiBh bmQgYWRkZWQgUEhZIHJlc2V0LiBdClNpZ25lZC1vZmYtYnk6IE1hcmVrIEJlaMO6biA8a2FiZWxA a2VybmVsLm9yZz4KLS0tCkNoYW5nZXMgc2luY2UgdjM6Ci0gYWRkcmVzc2VkIFZpbm9kJ3MgY29t bWVudHMsIHNlZQogIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xpbnV4LXBoeS8yMDIyMDIwMzIy MzkxMy40MWU5ZjM3NUB0aGlua3BhZC9ULyN1Ci0gY2hhbmdlZCBjb21tZW50IG9mIHN0ZXAgMTIg aW4gbXZlYnVfYTM3MDBfY29tcGh5X2V0aGVybmV0X3Bvd2VyX29uKCkKICBhIGxpdHRsZQpDaGFu Z2VzIHNpbmNlIHYyOgotIGNoYW5nZWQgcmF3IHNwaW4gbG9jayB0byBvcmRpbmFyeSBzcGluIGxv Y2sKLSBmaXhlZCBpbmRlbnRhdGlvbiBvZiBnYmVfcGh5X2luaXRfZml4Ci0gdXNlIEZJRUxEX1BS RVAoKSBtYWNybwpDaGFuZ2VzIHNpbmNlIHYxOgotIHJlZmFjdG9yZWQgdG8gdXNlIEdFTk1BU0so KQotIGZpeGVkIHZhcmlvdXMgcmVnaXN0ZXIgbmFtZXMgdG8gY29uZm9ybSB0byBGdW5jdGlvbmFs IFNwZWNpZmljYXRpb24KLSByZWZhY3RvcmVkIHZhcmlvdXMgcmVnaXN0ZXIgbmFtZXMgdG8gaGF2 ZSB1bmlmb3JtIG5hbWluZwotIHJlZmFjdG9yZWQgcmVnaXN0ZXIgYWNjZXNzIGludG8gb25lIGZ1 bmN0aW9uLCB3aGljaCBkZWNpZGVzIHdoZXRoZXIKICB0aGUgYWNjZXNzIHNob3VsZCBiZSBkaXJl Y3Qgb3IgaW5kaXJlY3QsIHNvIGFzIHRvIG5vdCBoYXZlIGFsbCB0aGVzZQogIGNoZWNrcyBkb25l IGV2ZXJ5d2hlcmUgaW4gdGhlIGNvZGUKLSBtb3ZlZCBhcm91bmQgb25lIHJlZ2lzdGVyIGRlZmlu aXRpb24gdG8gaGF2ZSB0aGUgcmVnaXN0ZXJzIHNvcnRlZAogIGFjY29yZGluZyB0byB0aGVpciBv ZmZzZXQKLSBhZGRlZCBjb21tZW50cyB0byBzb21lIHJlZ2lzdGVyIGRlZmluaXRpb25zCi0gYWRk ZWQgc3VwcG9ydCBmb3IgUEhZIHJlc2V0KCkgbWV0aG9kCi0gd2hlbiBjaGFuZ2luZyBQSFkgbW9k ZSwgdGhlIGRyaXZlciBub3cgcmVzZXRzIHRoZSBQSFkgYW5kIGl0cwogIHJlZ2lzdGVycyB0byBw dXQgdGhlIFBIWSBpbiBrbm93biBzdGF0ZQotIGZpeGVkIHRoZSBwb3dlcl9vZmYoKSBtZXRob2QK LSBhZGRlZCBzcGlubG9jayBndWFyZCB3aGVuIGFjY2Vzc2luZyBQSFkgU2VsZWN0b3IgcmVnaXN0 ZXIsIHNpbmNlIGl0CiAgaXMgc2hhcmVkIGJldHdlZW4gdGhlIFBIWXMgYW5kIHNvIHRoZSBQSFkg bXV0ZXggaXMgaW5zdWZmaWNpZW50Ci0gdXBvbiBkcml2ZXIgcHJvYmUgY2hhbmdlZCB0aGUgY2Fs bHMgdG8gcG93ZXJfb2ZmKCkgdG8gcmVzZXQoKQotLS0KIGRyaXZlcnMvcGh5L21hcnZlbGwvcGh5 LW12ZWJ1LWEzNzAwLWNvbXBoeS5jIHwgMTMzMiArKysrKysrKysrKysrKysrLS0KIDEgZmlsZSBj aGFuZ2VkLCAxMjE1IGluc2VydGlvbnMoKyksIDExNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9kcml2ZXJzL3BoeS9tYXJ2ZWxsL3BoeS1tdmVidS1hMzcwMC1jb21waHkuYyBiL2RyaXZlcnMv cGh5L21hcnZlbGwvcGh5LW12ZWJ1LWEzNzAwLWNvbXBoeS5jCmluZGV4IGRiYjJkNDMwODg1MS4u YTRkN2Q5YmQxMDBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BoeS9tYXJ2ZWxsL3BoeS1tdmVidS1h MzcwMC1jb21waHkuYworKysgYi9kcml2ZXJzL3BoeS9tYXJ2ZWxsL3BoeS1tdmVidS1hMzcwMC1j b21waHkuYwpAQCAtNSwxMiArNSwxNiBAQAogICogQXV0aG9yczoKICAqICAgRXZhbiBXYW5nIDx4 c3dhbmdAbWFydmVsbC5jb20+CiAgKiAgIE1pcXXDqGwgUmF5bmFsIDxtaXF1ZWwucmF5bmFsQGJv b3RsaW4uY29tPgorICogICBQYWxpIFJvaMOhciA8cGFsaUBrZXJuZWwub3JnPgorICogICBNYXJl ayBCZWjDum4gPGthYmVsQGtlcm5lbC5vcmc+CiAgKgogICogU3RydWN0dXJlIGluc3BpcmVkIGZy b20gcGh5LW12ZWJ1LWNwMTEwLWNvbXBoeS5jIHdyaXR0ZW4gYnkgQW50b2luZSBUZW5hcnQuCi0g KiBTTUMgY2FsbCBpbml0aWFsIHN1cHBvcnQgZG9uZSBieSBHcnplZ29yeiBKYXN6Y3p5ay4KKyAq IENvbXBoeSBjb2RlIGZyb20gQVJNIFRydXN0ZWQgRmlybXdhcmUgcG9ydGVkIGJ5IFBhbGkgUm9o w6FyIDxwYWxpQGtlcm5lbC5vcmc+CisgKiBhbmQgTWFyZWsgQmVow7puIDxrYWJlbEBrZXJuZWwu b3JnPi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvYXJtLXNtY2NjLmg+CisjaW5jbHVkZSA8bGlu dXgvYml0ZmllbGQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9p by5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNj b24uaD4KQEAgLTE4LDEwMyArMjIsMTExOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgogI2lu Y2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2Uu aD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCi0jZGVmaW5lIE1WRUJVX0EzNzAwX0NP TVBIWV9MQU5FUwkJMwotCi0vKiBDT01QSFkgRmFzdCBTTUMgZnVuY3Rpb24gaWRlbnRpZmllcnMg Ki8KLSNkZWZpbmUgQ09NUEhZX1NJUF9QT1dFUl9PTgkJCTB4ODIwMDAwMDEKLSNkZWZpbmUgQ09N UEhZX1NJUF9QT1dFUl9PRkYJCQkweDgyMDAwMDAyCi0jZGVmaW5lIENPTVBIWV9TSVBfUExMX0xP Q0sJCQkweDgyMDAwMDAzCi0KLSNkZWZpbmUgQ09NUEhZX0ZXX01PREVfU0FUQQkJCTB4MQotI2Rl ZmluZSBDT01QSFlfRldfTU9ERV9TR01JSQkJCTB4MgotI2RlZmluZSBDT01QSFlfRldfTU9ERV8y NTAwQkFTRVgJCTB4MwotI2RlZmluZSBDT01QSFlfRldfTU9ERV9VU0IzSAkJCTB4NAotI2RlZmlu ZSBDT01QSFlfRldfTU9ERV9VU0IzRAkJCTB4NQotI2RlZmluZSBDT01QSFlfRldfTU9ERV9QQ0lF CQkJMHg2Ci0jZGVmaW5lIENPTVBIWV9GV19NT0RFX1VTQjMJCQkweGEKLQotI2RlZmluZSBDT01Q SFlfRldfU1BFRURfMV8yNUcJCQkwIC8qIFNHTUlJIDFHICovCi0jZGVmaW5lIENPTVBIWV9GV19T UEVFRF8yXzVHCQkJMQotI2RlZmluZSBDT01QSFlfRldfU1BFRURfM18xMjVHCQkJMiAvKiAyNTAw QkFTRS1YICovCi0jZGVmaW5lIENPTVBIWV9GV19TUEVFRF81RwkJCTMKLSNkZWZpbmUgQ09NUEhZ X0ZXX1NQRUVEX01BWAkJCTB4M0YKLQotI2RlZmluZSBDT01QSFlfRldfTU9ERShtb2RlKQkJCSgo bW9kZSkgPDwgMTIpCi0jZGVmaW5lIENPTVBIWV9GV19ORVQobW9kZSwgaWR4LCBzcGVlZCkJCShD T01QSFlfRldfTU9ERShtb2RlKSB8IFwKLQkJCQkJCSAoKGlkeCkgPDwgOCkgfAlcCi0JCQkJCQkg KChzcGVlZCkgPDwgMikpCi0jZGVmaW5lIENPTVBIWV9GV19QQ0lFKG1vZGUsIHNwZWVkLCB3aWR0 aCkJKENPTVBIWV9GV19ORVQobW9kZSwgMCwgc3BlZWQpIHwgXAotCQkJCQkJICgod2lkdGgpIDw8 IDE4KSkKKyNkZWZpbmUgUExMX1NFVF9ERUxBWV9VUwkJNjAwCisjZGVmaW5lIENPTVBIWV9QTExf U0xFRVAJCTEwMDAKKyNkZWZpbmUgQ09NUEhZX1BMTF9USU1FT1VUCQkxNTAwMDAKKworLyogQ29t cGh5IGxhbmUyIGluZGlyZWN0IGFjY2VzcyByZWdpc3RlciBvZmZzZXQgKi8KKyNkZWZpbmUgQ09N UEhZX0xBTkUyX0lORElSX0FERFIJCTB4MAorI2RlZmluZSBDT01QSFlfTEFORTJfSU5ESVJfREFU QQkJMHg0CisKKy8qIFNBVEEgYW5kIFVTQjMgUEhZIG9mZnNldCBjb21wYXJlZCB0byBTQVRBIFBI WSAqLworI2RlZmluZSBDT01QSFlfTEFORTJfUkVHU19CQVNFCQkweDIwMAorCisvKgorICogV2hl biBhY2Nlc3NpbmcgY29tbW9uIFBIWSBsYW5lIHJlZ2lzdGVycyBkaXJlY3RseSwgd2UgbmVlZCB0 byBzaGlmdCBieSAxLAorICogc2luY2UgdGhlIHJlZ2lzdGVycyBhcmUgMTYtYml0LgorICovCisj ZGVmaW5lIENPTVBIWV9MQU5FX1JFR19ESVJFQ1QocmVnKQkoKChyZWcpICYgMHg3RkYpIDw8IDEp CisKKy8qIENPTVBIWSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQ09NUEhZX1BPV0VSX1BMTF9DVFJM CQkweDAxCisjZGVmaW5lIFBVX0lWUkVGX0JJVAkJCUJJVCgxNSkKKyNkZWZpbmUgUFVfUExMX0JJ VAkJCUJJVCgxNCkKKyNkZWZpbmUgUFVfUlhfQklUCQkJQklUKDEzKQorI2RlZmluZSBQVV9UWF9C SVQJCQlCSVQoMTIpCisjZGVmaW5lIFBVX1RYX0lOVFBfQklUCQkJQklUKDExKQorI2RlZmluZSBQ VV9ERkVfQklUCQkJQklUKDEwKQorI2RlZmluZSBSRVNFVF9EVExfUlhfQklUCQlCSVQoOSkKKyNk ZWZpbmUgUExMX0xPQ0tfQklUCQkJQklUKDgpCisjZGVmaW5lIFJFRl9GUkVGX1NFTF9NQVNLCQlH RU5NQVNLKDQsIDApCisjZGVmaW5lIFJFRl9GUkVGX1NFTF9TRVJERVNfMjVNSFoJRklFTERfUFJF UChSRUZfRlJFRl9TRUxfTUFTSywgMHgxKQorI2RlZmluZSBSRUZfRlJFRl9TRUxfU0VSREVTXzQw TUhaCUZJRUxEX1BSRVAoUkVGX0ZSRUZfU0VMX01BU0ssIDB4MykKKyNkZWZpbmUgUkVGX0ZSRUZf U0VMX1NFUkRFU181ME1IWglGSUVMRF9QUkVQKFJFRl9GUkVGX1NFTF9NQVNLLCAweDQpCisjZGVm aW5lIFJFRl9GUkVGX1NFTF9QQ0lFX1VTQjNfMjVNSFoJRklFTERfUFJFUChSRUZfRlJFRl9TRUxf TUFTSywgMHgyKQorI2RlZmluZSBSRUZfRlJFRl9TRUxfUENJRV9VU0IzXzQwTUhaCUZJRUxEX1BS RVAoUkVGX0ZSRUZfU0VMX01BU0ssIDB4MykKKyNkZWZpbmUgQ09NUEhZX01PREVfTUFTSwkJR0VO TUFTSyg3LCA1KQorI2RlZmluZSBDT01QSFlfTU9ERV9TQVRBCQlGSUVMRF9QUkVQKENPTVBIWV9N T0RFX01BU0ssIDB4MCkKKyNkZWZpbmUgQ09NUEhZX01PREVfUENJRQkJRklFTERfUFJFUChDT01Q SFlfTU9ERV9NQVNLLCAweDMpCisjZGVmaW5lIENPTVBIWV9NT0RFX1NFUkRFUwkJRklFTERfUFJF UChDT01QSFlfTU9ERV9NQVNLLCAweDQpCisjZGVmaW5lIENPTVBIWV9NT0RFX1VTQjMJCUZJRUxE X1BSRVAoQ09NUEhZX01PREVfTUFTSywgMHg1KQorCisjZGVmaW5lIENPTVBIWV9LVkNPX0NBTF9D VFJMCQkweDAyCisjZGVmaW5lIFVTRV9NQVhfUExMX1JBVEVfQklUCQlCSVQoMTIpCisjZGVmaW5l IFNQRUVEX1BMTF9NQVNLCQkJR0VOTUFTSyg3LCAyKQorI2RlZmluZSBTUEVFRF9QTExfVkFMVUVf MTYJCUZJRUxEX1BSRVAoU1BFRURfUExMX01BU0ssIDB4MTApCisKKyNkZWZpbmUgQ09NUEhZX0RJ R19MT09QQkFDS19FTgkJMHgyMworI2RlZmluZSBTRUxfREFUQV9XSURUSF9NQVNLCQlHRU5NQVNL KDExLCAxMCkKKyNkZWZpbmUgREFUQV9XSURUSF8xMEJJVAkJRklFTERfUFJFUChTRUxfREFUQV9X SURUSF9NQVNLLCAweDApCisjZGVmaW5lIERBVEFfV0lEVEhfMjBCSVQJCUZJRUxEX1BSRVAoU0VM X0RBVEFfV0lEVEhfTUFTSywgMHgxKQorI2RlZmluZSBEQVRBX1dJRFRIXzQwQklUCQlGSUVMRF9Q UkVQKFNFTF9EQVRBX1dJRFRIX01BU0ssIDB4MikKKyNkZWZpbmUgUExMX1JFQURZX1RYX0JJVAkJ QklUKDQpCisKKyNkZWZpbmUgQ09NUEhZX1NZTkNfUEFUVEVSTgkJMHgyNAorI2RlZmluZSBUWERf SU5WRVJUX0JJVAkJCUJJVCgxMCkKKyNkZWZpbmUgUlhEX0lOVkVSVF9CSVQJCQlCSVQoMTEpCisK KyNkZWZpbmUgQ09NUEhZX1NZTkNfTUFTS19HRU4JCTB4MjUKKyNkZWZpbmUgUEhZX0dFTl9NQVhf TUFTSwkJR0VOTUFTSygxMSwgMTApCisjZGVmaW5lIFBIWV9HRU5fTUFYX1VTQjNfNUcJCUZJRUxE X1BSRVAoUEhZX0dFTl9NQVhfTUFTSywgMHgxKQorCisjZGVmaW5lIENPTVBIWV9JU09MQVRJT05f Q1RSTAkJMHgyNgorI2RlZmluZSBQSFlfSVNPTEFURV9NT0RFCQlCSVQoMTUpCisKKyNkZWZpbmUg Q09NUEhZX0dFTjJfU0VUMgkJMHgzZQorI2RlZmluZSBHUzJfVFhfU1NDX0FNUF9NQVNLCQlHRU5N QVNLKDE1LCA5KQorI2RlZmluZSBHUzJfVFhfU1NDX0FNUF80MTI4CQlGSUVMRF9QUkVQKEdTMl9U WF9TU0NfQU1QX01BU0ssIDB4MjApCisjZGVmaW5lIEdTMl9WUkVHX1JYVFhfTUFTX0lTRVRfTUFT SwlHRU5NQVNLKDgsIDcpCisjZGVmaW5lIEdTMl9WUkVHX1JYVFhfTUFTX0lTRVRfNjBVCUZJRUxE X1BSRVAoR1MyX1ZSRUdfUlhUWF9NQVNfSVNFVF9NQVNLLFwKKwkJCQkJCSAgIDB4MCkKKyNkZWZp bmUgR1MyX1ZSRUdfUlhUWF9NQVNfSVNFVF84MFUJRklFTERfUFJFUChHUzJfVlJFR19SWFRYX01B U19JU0VUX01BU0ssXAorCQkJCQkJICAgMHgxKQorI2RlZmluZSBHUzJfVlJFR19SWFRYX01BU19J U0VUXzEwMFUJRklFTERfUFJFUChHUzJfVlJFR19SWFRYX01BU19JU0VUX01BU0ssXAorCQkJCQkJ ICAgMHgyKQorI2RlZmluZSBHUzJfVlJFR19SWFRYX01BU19JU0VUXzEyMFUJRklFTERfUFJFUChH UzJfVlJFR19SWFRYX01BU19JU0VUX01BU0ssXAorCQkJCQkJICAgMHgzKQorI2RlZmluZSBHUzJf UlNWRF82XzBfTUFTSwkJR0VOTUFTSyg2LCAwKQorCisjZGVmaW5lIENPTVBIWV9HRU4zX1NFVDIJ CTB4M2YKKworI2RlZmluZSBDT01QSFlfSURMRV9TWU5DX0VOCQkweDQ4CisjZGVmaW5lIElETEVf U1lOQ19FTgkJCUJJVCgxMikKKworI2RlZmluZSBDT01QSFlfTUlTQ19DVFJMMAkJMHg0RgorI2Rl ZmluZSBDTEsxMDBNXzEyNU1fRU4JCQlCSVQoNCkKKyNkZWZpbmUgVFhEQ0xLXzJYX1NFTAkJCUJJ VCg2KQorI2RlZmluZSBDTEs1MDBNX0VOCQkJQklUKDcpCisjZGVmaW5lIFBIWV9SRUZfQ0xLX1NF TAkJCUJJVCgxMCkKKworI2RlZmluZSBDT01QSFlfU0ZUX1JFU0VUCQkweDUyCisjZGVmaW5lIFNG VF9SU1QJCQkJQklUKDkpCisjZGVmaW5lIFNGVF9SU1RfTk9fUkVHCQkJQklUKDEwKQorCisjZGVm aW5lIENPTVBIWV9NSVNDX0NUUkwxCQkweDczCisjZGVmaW5lIFNFTF9CSVRTX1BDSUVfRk9SQ0UJ CUJJVCgxNSkKKworI2RlZmluZSBDT01QSFlfR0VOMl9TRVQzCQkweDExMgorI2RlZmluZSBHUzNf RkZFX0NBUF9TRUxfTUFTSwkJR0VOTUFTSygzLCAwKQorI2RlZmluZSBHUzNfRkZFX0NBUF9TRUxf VkFMVUUJCUZJRUxEX1BSRVAoR1MzX0ZGRV9DQVBfU0VMX01BU0ssIDB4RikKKworLyogUElQRSBy ZWdpc3RlcnMgKi8KKyNkZWZpbmUgQ09NUEhZX1BJUEVfTEFORV9DRkcwCQkweDE4MAorI2RlZmlu ZSBQUkRfVFhERUVNUEgwX01BU0sJCUJJVCgwKQorI2RlZmluZSBQUkRfVFhNQVJHSU5fTUFTSwkJ R0VOTUFTSygzLCAxKQorI2RlZmluZSBQUkRfVFhTV0lOR19NQVNLCQlCSVQoNCkKKyNkZWZpbmUg Q0ZHX1RYX0FMSUdOX1BPU19NQVNLCQlHRU5NQVNLKDgsIDUpCisKKyNkZWZpbmUgQ09NUEhZX1BJ UEVfTEFORV9DRkcxCQkweDE4MQorI2RlZmluZSBQUkRfVFhERUVNUEgxX01BU0sJCUJJVCgxNSkK KyNkZWZpbmUgVVNFX01BWF9QTExfUkFURV9FTgkJQklUKDkpCisjZGVmaW5lIFRYX0RFVF9SWF9N T0RFCQkJQklUKDYpCisjZGVmaW5lIEdFTjJfVFhfREFUQV9ETFlfTUFTSwkJR0VOTUFTSyg0LCAz KQorI2RlZmluZSBHRU4yX1RYX0RBVEFfRExZX0RFRlQJCUZJRUxEX1BSRVAoR0VOMl9UWF9EQVRB X0RMWV9NQVNLLCAyKQorI2RlZmluZSBUWF9FTEVDX0lETEVfTU9ERV9FTgkJQklUKDApCisKKyNk ZWZpbmUgQ09NUEhZX1BJUEVfTEFORV9TVEFUMQkJMHgxODMKKyNkZWZpbmUgVFhEQ0xLX1BDTEtf RU4JCQlCSVQoMCkKKworI2RlZmluZSBDT01QSFlfUElQRV9MQU5FX0NGRzQJCTB4MTg4CisjZGVm aW5lIFNQUkVBRF9TUEVDVFJVTV9DTEtfRU4JCUJJVCg3KQorCisjZGVmaW5lIENPTVBIWV9QSVBF X1JTVF9DTEtfQ1RSTAkweDFDMQorI2RlZmluZSBQSVBFX1NPRlRfUkVTRVQJCQlCSVQoMCkKKyNk ZWZpbmUgUElQRV9SRUdfUkVTRVQJCQlCSVQoMSkKKyNkZWZpbmUgTU9ERV9DT1JFX0NMS19GUkVR X1NFTAkJQklUKDkpCisjZGVmaW5lIE1PREVfUElQRV9XSURUSF8zMgkJQklUKDMpCisjZGVmaW5l IE1PREVfUkVGRElWX01BU0sJCUdFTk1BU0soNSwgNCkKKyNkZWZpbmUgTU9ERV9SRUZESVZfQllf NAkJRklFTERfUFJFUChNT0RFX1JFRkRJVl9NQVNLLCAweDIpCisKKyNkZWZpbmUgQ09NUEhZX1BJ UEVfVEVTVF9NT0RFX0NUUkwJMHgxQzIKKyNkZWZpbmUgTU9ERV9NQVJHSU5fT1ZFUlJJREUJCUJJ VCgyKQorCisjZGVmaW5lIENPTVBIWV9QSVBFX0NMS19TUkNfTE8JCTB4MUMzCisjZGVmaW5lIE1P REVfQ0xLX1NSQwkJCUJJVCgwKQorI2RlZmluZSBCVU5ETEVfUEVSSU9EX1NFTAkJQklUKDEpCisj ZGVmaW5lIEJVTkRMRV9QRVJJT0RfU0NBTEVfTUFTSwlHRU5NQVNLKDMsIDIpCisjZGVmaW5lIEJV TkRMRV9TQU1QTEVfQ1RSTAkJQklUKDQpCisjZGVmaW5lIFBMTF9SRUFEWV9ETFlfTUFTSwkJR0VO TUFTSyg3LCA1KQorI2RlZmluZSBDRkdfU0VMXzIwQgkJCUJJVCgxNSkKKworI2RlZmluZSBDT01Q SFlfUElQRV9QV1JfTUdNX1RJTTEJMHgxRDAKKyNkZWZpbmUgQ0ZHX1BNX09TQ0NMS19XQUlUX01B U0sJCUdFTk1BU0soMTUsIDEyKQorI2RlZmluZSBDRkdfUE1fUlhERU5fV0FJVF9NQVNLCQlHRU5N QVNLKDExLCA4KQorI2RlZmluZSBDRkdfUE1fUlhERU5fV0FJVF8xX1VOSVQJRklFTERfUFJFUChD RkdfUE1fUlhERU5fV0FJVF9NQVNLLCAweDEpCisjZGVmaW5lIENGR19QTV9SWERMT1pfV0FJVF9N QVNLCQlHRU5NQVNLKDcsIDApCisjZGVmaW5lIENGR19QTV9SWERMT1pfV0FJVF83X1VOSVQJRklF TERfUFJFUChDRkdfUE1fUlhETE9aX1dBSVRfTUFTSywgMHg3KQorI2RlZmluZSBDRkdfUE1fUlhE TE9aX1dBSVRfMTJfVU5JVAlGSUVMRF9QUkVQKENGR19QTV9SWERMT1pfV0FJVF9NQVNLLCAweEMp CisKKy8qCisgKiBUaGlzIHJlZ2lzdGVyIGlzIG5vdCBmcm9tIFBIWSBsYW5lIHJlZ2lzdGVyIHNw YWNlLiBJdCBvbmx5IGV4aXN0cyBpbiB0aGUKKyAqIGluZGlyZWN0IHJlZ2lzdGVyIHNwYWNlLCBi ZWZvcmUgdGhlIGFjdHVhbCBQSFkgbGFuZSAyIHJlZ2lzdGVycy4gU28gdGhlCisgKiBvZmZzZXQg aXMgYWJzb2x1dGUsIG5vdCByZWxhdGl2ZSB0byBDT01QSFlfTEFORTJfUkVHU19CQVNFLgorICog SXQgaXMgdXNlZCBvbmx5IGZvciBTQVRBIFBIWSBpbml0aWFsaXphdGlvbi4KKyAqLworI2RlZmlu ZSBDT01QSFlfUkVTRVJWRURfUkVHCQkweDBFCisjZGVmaW5lIFBIWUNUUkxfRlJNX1BJTl9CSVQJ CUJJVCgxMykKKworLyogU291dGggQnJpZGdlIFBIWSBDb25maWd1cmF0aW9uIFJlZ2lzdGVycyAq LworI2RlZmluZSBDT01QSFlfUEhZX1JFRyhsYW5lLCByZWcpCSgoKDEgLSAobGFuZSkpICogMHgy OCkgKyAoKHJlZykgJiAweDNmKSkKKworLyoKKyAqIGxhbmUwOiBVU0IzL0diRTEgUEhZIENvbmZp Z3VyYXRpb24gMQorICogbGFuZTE6IFBDSWUvR2JFMCBQSFkgQ29uZmlndXJhdGlvbiAxCisgKiAo dXNlZCBvbmx5IGJ5IFNHTUlJIGNvZGUpCisgKi8KKyNkZWZpbmUgQ09NUEhZX1BIWV9DRkcxCQkJ MHgwCisjZGVmaW5lIFBJTl9QVV9JVlJFRl9CSVQJCUJJVCgxKQorI2RlZmluZSBQSU5fUkVTRVRf Q09SRV9CSVQJCUJJVCgxMSkKKyNkZWZpbmUgUElOX1JFU0VUX0NPTVBIWV9CSVQJCUJJVCgxMikK KyNkZWZpbmUgUElOX1BVX1BMTF9CSVQJCQlCSVQoMTYpCisjZGVmaW5lIFBJTl9QVV9SWF9CSVQJ CQlCSVQoMTcpCisjZGVmaW5lIFBJTl9QVV9UWF9CSVQJCQlCSVQoMTgpCisjZGVmaW5lIFBJTl9U WF9JRExFX0JJVAkJCUJJVCgxOSkKKyNkZWZpbmUgR0VOX1JYX1NFTF9NQVNLCQkJR0VOTUFTSygy NSwgMjIpCisjZGVmaW5lIEdFTl9SWF9TRUxfVkFMVUUodmFsKQkJRklFTERfUFJFUChHRU5fUlhf U0VMX01BU0ssICh2YWwpKQorI2RlZmluZSBHRU5fVFhfU0VMX01BU0sJCQlHRU5NQVNLKDI5LCAy NikKKyNkZWZpbmUgR0VOX1RYX1NFTF9WQUxVRSh2YWwpCQlGSUVMRF9QUkVQKEdFTl9UWF9TRUxf TUFTSywgKHZhbCkpCisjZGVmaW5lIFNFUkRFU19TUEVFRF8xXzI1X0cJCTB4NgorI2RlZmluZSBT RVJERVNfU1BFRURfM18xMjVfRwkJMHg4CisjZGVmaW5lIFBIWV9SWF9JTklUX0JJVAkJCUJJVCgz MCkKKworLyoKKyAqIGxhbmUwOiBVU0IzL0diRTEgUEhZIFN0YXR1cyAxCisgKiBsYW5lMTogUENJ ZS9HYkUwIFBIWSBTdGF0dXMgMQorICogKHVzZWQgb25seSBieSBTR01JSSBjb2RlKQorICovCisj ZGVmaW5lIENPTVBIWV9QSFlfU1RBVDEJCTB4MTgKKyNkZWZpbmUgUEhZX1JYX0lOSVRfRE9ORV9C SVQJCUJJVCgwKQorI2RlZmluZSBQSFlfUExMX1JFQURZX1JYX0JJVAkJQklUKDIpCisjZGVmaW5l IFBIWV9QTExfUkVBRFlfVFhfQklUCQlCSVQoMykKKworLyogUEhZIFNlbGVjdG9yICovCisjZGVm aW5lIENPTVBIWV9TRUxFQ1RPUl9QSFlfUkVHCQkJMHhGQworLyogYml0MDogMDogTGFuZTEgaXMg R2JFMDsgMTogTGFuZTEgaXMgUENJZSAqLworI2RlZmluZSBDT01QSFlfU0VMRUNUT1JfUENJRV9H QkUwX1NFTF9CSVQJQklUKDApCisvKiBiaXQ0OiAwOiBMYW5lMCBpcyBHYkUxOyAxOiBMYW5lMCBp cyBVU0IzICovCisjZGVmaW5lIENPTVBIWV9TRUxFQ1RPUl9VU0IzX0dCRTFfU0VMX0JJVAlCSVQo NCkKKy8qIGJpdDg6IDA6IExhbmUwIGlzIFVTQjMgaW5zdGVhZCBvZiBHYkUxLCBMYW5lMiBpcyBT QVRBOyAxOiBMYW5lMiBpcyBVU0IzICovCisjZGVmaW5lIENPTVBIWV9TRUxFQ1RPUl9VU0IzX1BI WV9TRUxfQklUCUJJVCg4KQogCiBzdHJ1Y3QgbXZlYnVfYTM3MDBfY29tcGh5X2NvbmYgewogCXVu c2lnbmVkIGludCBsYW5lOwogCWVudW0gcGh5X21vZGUgbW9kZTsKIAlpbnQgc3VibW9kZTsKLQl1 MzIgZndfbW9kZTsKIH07CiAKLSNkZWZpbmUgTVZFQlVfQTM3MDBfQ09NUEhZX0NPTkYoX2xhbmUs IF9tb2RlLCBfc21vZGUsIF9mdykJCVwKKyNkZWZpbmUgTVZFQlVfQTM3MDBfQ09NUEhZX0NPTkYo X2xhbmUsIF9tb2RlLCBfc21vZGUpCQkJXAogCXsJCQkJCQkJCVwKIAkJLmxhbmUgPSBfbGFuZSwJ CQkJCQlcCiAJCS5tb2RlID0gX21vZGUsCQkJCQkJXAogCQkuc3VibW9kZSA9IF9zbW9kZSwJCQkJ CVwKLQkJLmZ3X21vZGUgPSBfZncsCQkJCQkJXAogCX0KIAotI2RlZmluZSBNVkVCVV9BMzcwMF9D T01QSFlfQ09ORl9HRU4oX2xhbmUsIF9tb2RlLCBfZncpIFwKLQlNVkVCVV9BMzcwMF9DT01QSFlf Q09ORihfbGFuZSwgX21vZGUsIFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSwgX2Z3KQorI2RlZmluZSBN VkVCVV9BMzcwMF9DT01QSFlfQ09ORl9HRU4oX2xhbmUsIF9tb2RlKSBcCisJTVZFQlVfQTM3MDBf Q09NUEhZX0NPTkYoX2xhbmUsIF9tb2RlLCBQSFlfSU5URVJGQUNFX01PREVfTkEpCiAKLSNkZWZp bmUgTVZFQlVfQTM3MDBfQ09NUEhZX0NPTkZfRVRIKF9sYW5lLCBfc21vZGUsIF9mdykgXAotCU1W RUJVX0EzNzAwX0NPTVBIWV9DT05GKF9sYW5lLCBQSFlfTU9ERV9FVEhFUk5FVCwgX3Ntb2RlLCBf ZncpCisjZGVmaW5lIE1WRUJVX0EzNzAwX0NPTVBIWV9DT05GX0VUSChfbGFuZSwgX3Ntb2RlKSBc CisJTVZFQlVfQTM3MDBfQ09NUEhZX0NPTkYoX2xhbmUsIFBIWV9NT0RFX0VUSEVSTkVULCBfc21v ZGUpCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXZlYnVfYTM3MDBfY29tcGh5X2NvbmYgbXZlYnVf YTM3MDBfY29tcGh5X21vZGVzW10gPSB7CiAJLyogbGFuZSAwICovCi0JTVZFQlVfQTM3MDBfQ09N UEhZX0NPTkZfR0VOKDAsIFBIWV9NT0RFX1VTQl9IT1NUX1NTLAotCQkJCSAgICBDT01QSFlfRldf TU9ERV9VU0IzSCksCi0JTVZFQlVfQTM3MDBfQ09NUEhZX0NPTkZfRVRIKDAsIFBIWV9JTlRFUkZB Q0VfTU9ERV9TR01JSSwKLQkJCQkgICAgQ09NUEhZX0ZXX01PREVfU0dNSUkpLAotCU1WRUJVX0Ez NzAwX0NPTVBIWV9DT05GX0VUSCgwLCBQSFlfSU5URVJGQUNFX01PREVfMjUwMEJBU0VYLAotCQkJ CSAgICBDT01QSFlfRldfTU9ERV8yNTAwQkFTRVgpLAorCU1WRUJVX0EzNzAwX0NPTVBIWV9DT05G X0dFTigwLCBQSFlfTU9ERV9VU0JfSE9TVF9TUyksCisJTVZFQlVfQTM3MDBfQ09NUEhZX0NPTkZf RVRIKDAsIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSksCisJTVZFQlVfQTM3MDBfQ09NUEhZX0NP TkZfRVRIKDAsIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgpLAorCU1WRUJVX0EzNzAwX0NP TVBIWV9DT05GX0VUSCgwLCBQSFlfSU5URVJGQUNFX01PREVfMjUwMEJBU0VYKSwKIAkvKiBsYW5l IDEgKi8KLQlNVkVCVV9BMzcwMF9DT01QSFlfQ09ORl9HRU4oMSwgUEhZX01PREVfUENJRSwgQ09N UEhZX0ZXX01PREVfUENJRSksCi0JTVZFQlVfQTM3MDBfQ09NUEhZX0NPTkZfRVRIKDEsIFBIWV9J TlRFUkZBQ0VfTU9ERV9TR01JSSwKLQkJCQkgICAgQ09NUEhZX0ZXX01PREVfU0dNSUkpLAotCU1W RUJVX0EzNzAwX0NPTVBIWV9DT05GX0VUSCgxLCBQSFlfSU5URVJGQUNFX01PREVfMjUwMEJBU0VY LAotCQkJCSAgICBDT01QSFlfRldfTU9ERV8yNTAwQkFTRVgpLAorCU1WRUJVX0EzNzAwX0NPTVBI WV9DT05GX0dFTigxLCBQSFlfTU9ERV9QQ0lFKSwKKwlNVkVCVV9BMzcwMF9DT01QSFlfQ09ORl9F VEgoMSwgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSwKKwlNVkVCVV9BMzcwMF9DT01QSFlfQ09O Rl9FVEgoMSwgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCksCisJTVZFQlVfQTM3MDBfQ09N UEhZX0NPTkZfRVRIKDEsIFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVgpLAogCS8qIGxhbmUg MiAqLwotCU1WRUJVX0EzNzAwX0NPTVBIWV9DT05GX0dFTigyLCBQSFlfTU9ERV9TQVRBLCBDT01Q SFlfRldfTU9ERV9TQVRBKSwKLQlNVkVCVV9BMzcwMF9DT01QSFlfQ09ORl9HRU4oMiwgUEhZX01P REVfVVNCX0hPU1RfU1MsCi0JCQkJICAgIENPTVBIWV9GV19NT0RFX1VTQjNIKSwKKwlNVkVCVV9B MzcwMF9DT01QSFlfQ09ORl9HRU4oMiwgUEhZX01PREVfU0FUQSksCisJTVZFQlVfQTM3MDBfQ09N UEhZX0NPTkZfR0VOKDIsIFBIWV9NT0RFX1VTQl9IT1NUX1NTKSwKK307CisKK3N0cnVjdCBtdmVi dV9hMzcwMF9jb21waHlfcHJpdiB7CisJdm9pZCBfX2lvbWVtICpjb21waHlfcmVnczsKKwl2b2lk IF9faW9tZW0gKmxhbmUwX3BoeV9yZWdzOyAvKiBVU0IzIGFuZCBHYkUxICovCisJdm9pZCBfX2lv bWVtICpsYW5lMV9waHlfcmVnczsgLyogUENJZSBhbmQgR2JFMCAqLworCXZvaWQgX19pb21lbSAq bGFuZTJfcGh5X2luZGlyZWN0OyAvKiBTQVRBIGFuZCBVU0IzICovCisJc3BpbmxvY2tfdCBsb2Nr OyAvKiBmb3IgUEhZIHNlbGVjdG9yIGFjY2VzcyAqLworCWJvb2wgeHRhbF9pc180MG07CiB9Owog CiBzdHJ1Y3QgbXZlYnVfYTM3MDBfY29tcGh5X2xhbmUgeworCXN0cnVjdCBtdmVidV9hMzcwMF9j b21waHlfcHJpdiAqcHJpdjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJdW5zaWduZWQgaW50IGlk OwogCWVudW0gcGh5X21vZGUgbW9kZTsKIAlpbnQgc3VibW9kZTsKKwlib29sIGludmVydF90eDsK Kwlib29sIGludmVydF9yeDsKKwlib29sIG5lZWRzX3Jlc2V0OworfTsKKworc3RydWN0IGdiZV9w aHlfaW5pdF9kYXRhX2ZpeCB7CisJdTE2IGFkZHI7CisJdTE2IHZhbHVlOworfTsKKworLyogQ2hh bmdlcyB0byA0ME0xRzI1IG1vZGUgZGF0YSByZXF1aXJlZCBmb3IgcnVubmluZyA0ME0zRzEyNSBp bml0IG1vZGUgKi8KK3N0YXRpYyBzdHJ1Y3QgZ2JlX3BoeV9pbml0X2RhdGFfZml4IGdiZV9waHlf aW5pdF9maXhbXSA9IHsKKwl7IDB4MDA1LCAweDA3Q0MgfSwgeyAweDAxNSwgMHgwMDAwIH0sIHsg MHgwMUIsIDB4MDAwMCB9LAorCXsgMHgwMUQsIDB4MDAwMCB9LCB7IDB4MDFFLCAweDAwMDAgfSwg eyAweDAxRiwgMHgwMDAwIH0sCisJeyAweDAyMCwgMHgwMDAwIH0sIHsgMHgwMjEsIDB4MDAzMCB9 LCB7IDB4MDI2LCAweDA4ODggfSwKKwl7IDB4MDRELCAweDAxNTIgfSwgeyAweDA0RiwgMHhBMDIw IH0sIHsgMHgwNTAsIDB4MDdDQyB9LAorCXsgMHgwNTMsIDB4RTlDQSB9LCB7IDB4MDU1LCAweEJE OTcgfSwgeyAweDA3MSwgMHgzMDE1IH0sCisJeyAweDA3NiwgMHgwM0FBIH0sIHsgMHgwN0MsIDB4 MEZERiB9LCB7IDB4MEMyLCAweDMwMzAgfSwKKwl7IDB4MEMzLCAweDgwMDAgfSwgeyAweDBFMiwg MHg1NTUwIH0sIHsgMHgwRTMsIDB4MTJBNCB9LAorCXsgMHgwRTQsIDB4N0QwMCB9LCB7IDB4MEU2 LCAweDBDODMgfSwgeyAweDEwMSwgMHhGQ0MwIH0sCisJeyAweDEwNCwgMHgwQzEwIH0KK307CisK Ky8qIDQwTTFHMjUgbW9kZSBpbml0IGRhdGEgKi8KK3N0YXRpYyB1MTYgZ2JlX3BoeV9pbml0WzUx Ml0gPSB7CisJLyogMCAgICAgICAxICAgICAgIDIgICAgICAgMyAgICAgICA0ICAgICAgIDUgICAg ICAgNiAgICAgICA3ICovCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJLyogOCAgICAgICA5ICAgICAgIEEgICAgICAgQiAg ICAgICBDICAgICAgIEQgICAgICAgRSAgICAgICBGICovCisJMHgzMTEwLCAweEZEODMsIDB4NjQz MCwgMHg0MTJGLCAweDgyQzAsIDB4MDZGQSwgMHg0NTAwLCAweDZEMjYsCS8qIDAwICovCisJMHhB RkMwLCAweDgwMDAsIDB4QzAwMCwgMHgwMDAwLCAweDIwMDAsIDB4NDlDQywgMHgwQkM5LCAweDJB NTIsCS8qIDA4ICovCisJMHgwQkQyLCAweDBDREUsIDB4MTNEMiwgMHgwQ0U4LCAweDExNDksIDB4 MTBFMCwgMHgwMDAwLCAweDAwMDAsCS8qIDEwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwg MHgwMDAxLCAweDAwMDAsIDB4NDEzNCwgMHgwRDJELCAweEZGRkYsCS8qIDE4ICovCisJMHhGRkUw LCAweDQwMzAsIDB4MTAxNiwgMHgwMDMwLCAweDAwMDAsIDB4MDgwMCwgMHgwODY2LCAweDAwMDAs CS8qIDIwICovCisJMHgwMDAwLCAweDAwMDAsIDB4RkZGRiwgMHhGRkZGLCAweEZGRkYsIDB4RkZG RiwgMHhGRkZGLCAweEZGRkYsCS8qIDI4ICovCisJMHhGRkZGLCAweEZGRkYsIDB4MDAwMCwgMHgw MDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qIDMwICovCisJMHgwMDAwLCAw eDAwMDAsIDB4MDAwRiwgMHg2QTYyLCAweDE5ODgsIDB4MzEwMCwgMHgzMTAwLCAweDMxMDAsCS8q IDM4ICovCisJMHgzMTAwLCAweEE3MDgsIDB4MjQzMCwgMHgwODMwLCAweDEwMzAsIDB4NDYxMCwg MHhGRjAwLCAweEZGMDAsCS8qIDQwICovCisJMHgwMDYwLCAweDEwMDAsIDB4MDQwMCwgMHgwMDQw LCAweDAwRjAsIDB4MDE1NSwgMHgxMTAwLCAweEEwMkEsCS8qIDQ4ICovCisJMHgwNkZBLCAweDAw ODAsIDB4QjAwOCwgMHhFM0VELCAweDUwMDIsIDB4QjU5MiwgMHg3QTgwLCAweDAwMDEsCS8qIDUw ICovCisJMHgwMjBBLCAweDg4MjAsIDB4NjAxNCwgMHg4MDU0LCAweEFDQUEsIDB4RkM4OCwgMHgy QTAyLCAweDQ1Q0YsCS8qIDU4ICovCisJMHgwMDBGLCAweDE4MTcsIDB4Mjg2MCwgMHgwNjRGLCAw eDAwMDAsIDB4MDIwNCwgMHgxODAwLCAweDYwMDAsCS8qIDYwICovCisJMHg4MTBGLCAweDRGMjMs IDB4NDAwMCwgMHg0NDk4LCAweDA4NTAsIDB4MDAwMCwgMHgwMDBFLCAweDEwMDIsCS8qIDY4ICov CisJMHg5RDNBLCAweDMwMDksIDB4RDA2NiwgMHgwNDkxLCAweDAwMDEsIDB4NkFCMCwgMHgwMzk5 LCAweDM3ODAsCS8qIDcwICovCisJMHgwMDQwLCAweDVBQzAsIDB4NEE4MCwgMHgwMDAwLCAweDAx REYsIDB4MDAwMCwgMHgwMDA3LCAweDAwMDAsCS8qIDc4ICovCisJMHgyRDU0LCAweDAwQTEsIDB4 NDAwMCwgMHgwMTAwLCAweEEyMEEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qIDgwICovCisJ MHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg3NDAwLCAweDBFODEsIDB4MTAwMCwgMHgxMjQyLCAw eDAyMTAsCS8qIDg4ICovCisJMHg4MERGLCAweDBGMUYsIDB4MkYzRiwgMHg0RjVGLCAweDZGN0Ys IDB4MEYxRiwgMHgyRjNGLCAweDRGNUYsCS8qIDkwICovCisJMHg2RjdGLCAweDRCQUQsIDB4MDAw MCwgMHgwMDAwLCAweDA4MDAsIDB4MDAwMCwgMHgyNDAwLCAweEI2NTEsCS8qIDk4ICovCisJMHhD OUUwLCAweDQyNDcsIDB4MEEyNCwgMHgwMDAwLCAweEFGMTksIDB4MTAwNCwgMHgwMDAwLCAweDAw MDAsCS8qIEEwICovCisJMHgwMDAwLCAweDAwMTMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4 MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qIEE4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwg MHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qIEIwICovCisJMHgwMDAw LCAweDAwMDAsIDB4MDAwMCwgMHgwMDYwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAs CS8qIEI4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MzAxMCwgMHhGQTAwLCAweDAwMDAsIDB4MDAw MCwgMHgwMDAwLCAweDAwMDMsCS8qIEMwICovCisJMHgxNjE4LCAweDgyMDAsIDB4ODAwMCwgMHgw NDAwLCAweDA1MEYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qIEM4ICovCisJMHg0QzkzLCAw eDAwMDAsIDB4MTAwMCwgMHgxMTIwLCAweDAwMTAsIDB4MTI0MiwgMHgxMjQyLCAweDFFMDAsCS8q IEQwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMEY4LCAweDAwMDAsIDB4MDA0MSwg MHgwODAwLCAweDAwMDAsCS8qIEQ4ICovCisJMHg4MkEwLCAweDU3MkUsIDB4MjQ5MCwgMHgxNEE5 LCAweDRFMDAsIDB4MDAwMCwgMHgwODAzLCAweDA1NDEsCS8qIEUwICovCisJMHgwQzE1LCAweDAw MDAsIDB4MDAwMCwgMHgwNDAwLCAweDI2MjYsIDB4MDAwMCwgMHgwMDAwLCAweDQyMDAsCS8qIEU4 ICovCisJMHgwMDAwLCAweEFBNTUsIDB4MTAyMCwgMHgwMDAwLCAweDAwMDAsIDB4NTAxMCwgMHgw MDAwLCAweDAwMDAsCS8qIEYwICovCisJMHgwMDAwLCAweDAwMDAsIDB4NTAwMCwgMHgwMDAwLCAw eDAwMDAsIDB4MDAwMCwgMHgwMkYyLCAweDAwMDAsCS8qIEY4ICovCisJMHgxMDFGLCAweEZEQzAs IDB4NDAwMCwgMHg4MDEwLCAweDAxMTAsIDB4MDAwNiwgMHgwMDAwLCAweDAwMDAsCS8qMTAwICov CisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAw LCAweDAwMDAsCS8qMTA4ICovCisJMHgwNENGLCAweDAwMDAsIDB4MDRDRiwgMHgwMDAwLCAweDA0 Q0YsIDB4MDAwMCwgMHgwNEM2LCAweDAwMDAsCS8qMTEwICovCisJMHgwMDAwLCAweDAwMDAsIDB4 MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTE4ICovCisJ MHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAw eDAwMDAsCS8qMTIwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAs IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTI4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAw MCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTMwICovCisJMHgw MDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAw MDAsCS8qMTM4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4 MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTQwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwg MHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTQ4ICovCisJMHgwMDAw LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAs CS8qMTUwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAw MCwgMHgwMDAwLCAweDAwMDAsCS8qMTU4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgw MDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTYwICovCisJMHgwMDAwLCAw eDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8q MTY4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwg MHgwMDAwLCAweDAwMDAsCS8qMTcwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMEYw LCAweDA4QTIsIDB4MzExMiwgMHgwQTE0LCAweDAwMDAsCS8qMTc4ICovCisJMHgwMDAwLCAweDAw MDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTgw ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgw MDAwLCAweDAwMDAsCS8qMTg4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAw eDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTkwICovCisJMHgwMDAwLCAweDAwMDAs IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTk4ICov CisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAw LCAweDAwMDAsCS8qMUEwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAw MDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMUE4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4 MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMUIwICovCisJ MHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAw eDAwMDAsCS8qMUI4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAs IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMUMwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAw MCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMUM4ICovCisJMHgw MDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAw MDAsCS8qMUQwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4 MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMUQ4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwg MHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMUUwICovCisJMHgwMDAw LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAs CS8qMUU4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAw MCwgMHgwMDAwLCAweDAwMDAsCS8qMUYwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgw MDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAJLyoxRjggKi8KIH07CiAKLXN0YXRp YyBpbnQgbXZlYnVfYTM3MDBfY29tcGh5X3NtYyh1bnNpZ25lZCBsb25nIGZ1bmN0aW9uLCB1bnNp Z25lZCBsb25nIGxhbmUsCi0JCQkJICB1bnNpZ25lZCBsb25nIG1vZGUpCitzdGF0aWMgaW5saW5l IHZvaWQgY29tcGh5X3JlZ19zZXQodm9pZCBfX2lvbWVtICphZGRyLCB1MzIgZGF0YSwgdTMyIG1h c2spCiB7Ci0Jc3RydWN0IGFybV9zbWNjY19yZXMgcmVzOwotCXMzMiByZXQ7CisJdTMyIHZhbDsK IAotCWFybV9zbWNjY19zbWMoZnVuY3Rpb24sIGxhbmUsIG1vZGUsIDAsIDAsIDAsIDAsIDAsICZy ZXMpOwotCXJldCA9IHJlcy5hMDsKKwl2YWwgPSByZWFkbChhZGRyKTsKKwl2YWwgPSAodmFsICYg fm1hc2spIHwgKGRhdGEgJiBtYXNrKTsKKwl3cml0ZWwodmFsLCBhZGRyKTsKK30KKworc3RhdGlj IGlubGluZSB2b2lkIGNvbXBoeV9yZWdfc2V0MTYodm9pZCBfX2lvbWVtICphZGRyLCB1MTYgZGF0 YSwgdTE2IG1hc2spCit7CisJdTE2IHZhbDsKKworCXZhbCA9IHJlYWR3KGFkZHIpOworCXZhbCA9 ICh2YWwgJiB+bWFzaykgfCAoZGF0YSAmIG1hc2spOworCXdyaXRldyh2YWwsIGFkZHIpOworfQor CisvKiBVc2VkIGZvciBhY2Nlc3NpbmcgbGFuZSAyIHJlZ2lzdGVycyAoU0FUQS9VU0IzIFBIWSkg Ki8KK3N0YXRpYyB2b2lkIGNvbXBoeV9zZXRfaW5kaXJlY3Qoc3RydWN0IG12ZWJ1X2EzNzAwX2Nv bXBoeV9wcml2ICpwcml2LAorCQkJCXUzMiBvZmZzZXQsIHUxNiBkYXRhLCB1MTYgbWFzaykKK3sK Kwl3cml0ZWwob2Zmc2V0LAorCSAgICAgICBwcml2LT5sYW5lMl9waHlfaW5kaXJlY3QgKyBDT01Q SFlfTEFORTJfSU5ESVJfQUREUik7CisJY29tcGh5X3JlZ19zZXQocHJpdi0+bGFuZTJfcGh5X2lu ZGlyZWN0ICsgQ09NUEhZX0xBTkUyX0lORElSX0RBVEEsCisJCSAgICAgICBkYXRhLCBtYXNrKTsK K30KKworc3RhdGljIHZvaWQgY29tcGh5X2xhbmVfcmVnX3NldChzdHJ1Y3QgbXZlYnVfYTM3MDBf Y29tcGh5X2xhbmUgKmxhbmUsCisJCQkJdTE2IHJlZywgdTE2IGRhdGEsIHUxNiBtYXNrKQorewor CWlmIChsYW5lLT5pZCA9PSAyKSB7CisJCS8qIGxhbmUgMiBQSFkgcmVnaXN0ZXJzIGFyZSBhY2Nl c3NlZCBpbmRpcmVjdGx5ICovCisJCWNvbXBoeV9zZXRfaW5kaXJlY3QobGFuZS0+cHJpdiwKKwkJ CQkgICAgcmVnICsgQ09NUEhZX0xBTkUyX1JFR1NfQkFTRSwKKwkJCQkgICAgZGF0YSwgbWFzayk7 CisJfSBlbHNlIHsKKwkJdm9pZCBfX2lvbWVtICpiYXNlID0gbGFuZS0+aWQgPT0gMSA/CisJCQkJ ICAgICBsYW5lLT5wcml2LT5sYW5lMV9waHlfcmVncyA6CisJCQkJICAgICBsYW5lLT5wcml2LT5s YW5lMF9waHlfcmVnczsKKworCQljb21waHlfcmVnX3NldDE2KGJhc2UgKyBDT01QSFlfTEFORV9S RUdfRElSRUNUKHJlZyksCisJCQkJIGRhdGEsIG1hc2spOworCX0KK30KKworc3RhdGljIGludCBj b21waHlfbGFuZV9yZWdfcG9sbChzdHJ1Y3QgbXZlYnVfYTM3MDBfY29tcGh5X2xhbmUgKmxhbmUs CisJCQkJdTE2IHJlZywgdTE2IGJpdHMsCisJCQkJdWxvbmcgc2xlZXBfdXMsIHVsb25nIHRpbWVv dXRfdXMpCit7CisJaW50IHJldDsKKworCWlmIChsYW5lLT5pZCA9PSAyKSB7CisJCXUzMiBkYXRh OworCisJCS8qIGxhbmUgMiBQSFkgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZCBpbmRpcmVjdGx5ICov CisJCXdyaXRlbChyZWcgKyBDT01QSFlfTEFORTJfUkVHU19CQVNFLAorCQkgICAgICAgbGFuZS0+ cHJpdi0+bGFuZTJfcGh5X2luZGlyZWN0ICsKKwkJICAgICAgIENPTVBIWV9MQU5FMl9JTkRJUl9B RERSKTsKKworCQlyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQobGFuZS0+cHJpdi0+bGFuZTJfcGh5 X2luZGlyZWN0ICsKKwkJCQkJIENPTVBIWV9MQU5FMl9JTkRJUl9EQVRBLAorCQkJCQkgZGF0YSwg KGRhdGEgJiBiaXRzKSA9PSBiaXRzLAorCQkJCQkgc2xlZXBfdXMsIHRpbWVvdXRfdXMpOworCX0g ZWxzZSB7CisJCXZvaWQgX19pb21lbSAqYmFzZSA9IGxhbmUtPmlkID09IDEgPworCQkJCSAgICAg bGFuZS0+cHJpdi0+bGFuZTFfcGh5X3JlZ3MgOgorCQkJCSAgICAgbGFuZS0+cHJpdi0+bGFuZTBf cGh5X3JlZ3M7CisJCXUxNiBkYXRhOworCisJCXJldCA9IHJlYWR3X3BvbGxfdGltZW91dChiYXNl ICsgQ09NUEhZX0xBTkVfUkVHX0RJUkVDVChyZWcpLAorCQkJCQkgZGF0YSwgKGRhdGEgJiBiaXRz KSA9PSBiaXRzLAorCQkJCQkgc2xlZXBfdXMsIHRpbWVvdXRfdXMpOworCX0KKworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXBoeV9wZXJpcGhfcmVnX3NldChzdHJ1Y3QgbXZlYnVf YTM3MDBfY29tcGh5X2xhbmUgKmxhbmUsCisJCQkJICB1OCByZWcsIHUzMiBkYXRhLCB1MzIgbWFz aykKK3sKKwljb21waHlfcmVnX3NldChsYW5lLT5wcml2LT5jb21waHlfcmVncyArIENPTVBIWV9Q SFlfUkVHKGxhbmUtPmlkLCByZWcpLAorCQkgICAgICAgZGF0YSwgbWFzayk7Cit9CisKK3N0YXRp YyBpbnQgY29tcGh5X3BlcmlwaF9yZWdfcG9sbChzdHJ1Y3QgbXZlYnVfYTM3MDBfY29tcGh5X2xh bmUgKmxhbmUsCisJCQkJICB1OCByZWcsIHUzMiBiaXRzLAorCQkJCSAgdWxvbmcgc2xlZXBfdXMs IHVsb25nIHRpbWVvdXRfdXMpCit7CisJdTMyIGRhdGE7CisKKwlyZXR1cm4gcmVhZGxfcG9sbF90 aW1lb3V0KGxhbmUtPnByaXYtPmNvbXBoeV9yZWdzICsKKwkJCQkgIENPTVBIWV9QSFlfUkVHKGxh bmUtPmlkLCByZWcpLAorCQkJCSAgZGF0YSwgKGRhdGEgJiBiaXRzKSA9PSBiaXRzLAorCQkJCSAg c2xlZXBfdXMsIHRpbWVvdXRfdXMpOworfQorCisvKiBQSFkgc2VsZWN0b3IgY29uZmlndXJlcyB3 aXRoIGNvcnJlc3BvbmRpbmcgbW9kZXMgKi8KK3N0YXRpYyBpbnQKK212ZWJ1X2EzNzAwX2NvbXBo eV9zZXRfcGh5X3NlbGVjdG9yKHN0cnVjdCBtdmVidV9hMzcwMF9jb21waHlfbGFuZSAqbGFuZSkK K3sKKwl1MzIgb2xkLCBuZXcsIGNsciA9IDAsIHNldCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFn czsKKworCXN3aXRjaCAobGFuZS0+bW9kZSkgeworCWNhc2UgUEhZX01PREVfU0FUQToKKwkJLyog U0FUQSBtdXN0IGJlIGluIExhbmUyICovCisJCWlmIChsYW5lLT5pZCA9PSAyKQorCQkJY2xyID0g Q09NUEhZX1NFTEVDVE9SX1VTQjNfUEhZX1NFTF9CSVQ7CisJCWVsc2UKKwkJCWdvdG8gZXJyb3I7 CisJCWJyZWFrOworCisJY2FzZSBQSFlfTU9ERV9FVEhFUk5FVDoKKwkJaWYgKGxhbmUtPmlkID09 IDApCisJCQljbHIgPSBDT01QSFlfU0VMRUNUT1JfVVNCM19HQkUxX1NFTF9CSVQ7CisJCWVsc2Ug aWYgKGxhbmUtPmlkID09IDEpCisJCQljbHIgPSBDT01QSFlfU0VMRUNUT1JfUENJRV9HQkUwX1NF TF9CSVQ7CisJCWVsc2UKKwkJCWdvdG8gZXJyb3I7CisJCWJyZWFrOworCisJY2FzZSBQSFlfTU9E RV9VU0JfSE9TVF9TUzoKKwkJaWYgKGxhbmUtPmlkID09IDIpCisJCQlzZXQgPSBDT01QSFlfU0VM RUNUT1JfVVNCM19QSFlfU0VMX0JJVDsKKwkJZWxzZSBpZiAobGFuZS0+aWQgPT0gMCkKKwkJCXNl dCA9IENPTVBIWV9TRUxFQ1RPUl9VU0IzX0dCRTFfU0VMX0JJVDsKKwkJZWxzZQorCQkJZ290byBl cnJvcjsKKwkJYnJlYWs7CisKKwljYXNlIFBIWV9NT0RFX1BDSUU6CisJCS8qIFBDSUUgbXVzdCBi ZSBpbiBMYW5lMSAqLworCQlpZiAobGFuZS0+aWQgPT0gMSkKKwkJCXNldCA9IENPTVBIWV9TRUxF Q1RPUl9QQ0lFX0dCRTBfU0VMX0JJVDsKKwkJZWxzZQorCQkJZ290byBlcnJvcjsKKwkJYnJlYWs7 CiAKLQlzd2l0Y2ggKHJldCkgewotCWNhc2UgU01DQ0NfUkVUX1NVQ0NFU1M6Ci0JCXJldHVybiAw OwotCWNhc2UgU01DQ0NfUkVUX05PVF9TVVBQT1JURUQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsK IAlkZWZhdWx0OgorCQlnb3RvIGVycm9yOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZsYW5l LT5wcml2LT5sb2NrLCBmbGFncyk7CisKKwlvbGQgPSByZWFkbChsYW5lLT5wcml2LT5jb21waHlf cmVncyArIENPTVBIWV9TRUxFQ1RPUl9QSFlfUkVHKTsKKwluZXcgPSAob2xkICYgfmNscikgfCBz ZXQ7CisJd3JpdGVsKG5ldywgbGFuZS0+cHJpdi0+Y29tcGh5X3JlZ3MgKyBDT01QSFlfU0VMRUNU T1JfUEhZX1JFRyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsYW5lLT5wcml2LT5sb2Nr LCBmbGFncyk7CisKKwlkZXZfZGJnKGxhbmUtPmRldiwKKwkJIkNPTVBIWVslZF0gbW9kZVslZF0g Y2hhbmdlZCBQSFkgc2VsZWN0b3IgMHglMDh4IC0+IDB4JTA4eFxuIiwKKwkJbGFuZS0+aWQsIGxh bmUtPm1vZGUsIG9sZCwgbmV3KTsKKworCXJldHVybiAwOworZXJyb3I6CisJZGV2X2VycihsYW5l LT5kZXYsICJDT01QSFlbJWRdIG1vZGVbJWRdIGlzIGludmFsaWRcbiIsIGxhbmUtPmlkLAorCQls YW5lLT5tb2RlKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludAorbXZlYnVfYTM3 MDBfY29tcGh5X3NhdGFfcG93ZXJfb24oc3RydWN0IG12ZWJ1X2EzNzAwX2NvbXBoeV9sYW5lICps YW5lKQoreworCXUzMiBtYXNrLCBkYXRhLCByZWZfY2xrOworCWludCByZXQ7CisKKwkvKiBDb25m aWd1cmUgcGh5IHNlbGVjdG9yIGZvciBTQVRBICovCisJcmV0ID0gbXZlYnVfYTM3MDBfY29tcGh5 X3NldF9waHlfc2VsZWN0b3IobGFuZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8q IENsZWFyIHBoeSBpc29sYXRpb24gbW9kZSB0byBtYWtlIGl0IHdvcmsgaW4gbm9ybWFsIG1vZGUg Ki8KKwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUsIENPTVBIWV9JU09MQVRJT05fQ1RSTCwKKwkJ CSAgICAweDAsIFBIWV9JU09MQVRFX01PREUpOworCisJLyogMC4gQ2hlY2sgdGhlIFBvbGFyaXR5 IGludmVydCBiaXRzICovCisJZGF0YSA9IDB4MDsKKwlpZiAobGFuZS0+aW52ZXJ0X3R4KQorCQlk YXRhIHw9IFRYRF9JTlZFUlRfQklUOworCWlmIChsYW5lLT5pbnZlcnRfcngpCisJCWRhdGEgfD0g UlhEX0lOVkVSVF9CSVQ7CisJbWFzayA9IFRYRF9JTlZFUlRfQklUIHwgUlhEX0lOVkVSVF9CSVQ7 CisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01QSFlfU1lOQ19QQVRURVJOLCBkYXRhLCBt YXNrKTsKKworCS8qIDEuIFNlbGVjdCA0MC1iaXQgZGF0YSB3aWR0aCAqLworCWNvbXBoeV9sYW5l X3JlZ19zZXQobGFuZSwgQ09NUEhZX0RJR19MT09QQkFDS19FTiwKKwkJCSAgICBEQVRBX1dJRFRI XzQwQklULCBTRUxfREFUQV9XSURUSF9NQVNLKTsKKworCS8qIDIuIFNlbGVjdCByZWZlcmVuY2Ug Y2xvY2soMjVNKSBhbmQgUEhZIG1vZGUgKFNBVEEpICovCisJaWYgKGxhbmUtPnByaXYtPnh0YWxf aXNfNDBtKQorCQlyZWZfY2xrID0gUkVGX0ZSRUZfU0VMX1NFUkRFU180ME1IWjsKKwllbHNlCisJ CXJlZl9jbGsgPSBSRUZfRlJFRl9TRUxfU0VSREVTXzI1TUhaOworCisJZGF0YSA9IHJlZl9jbGsg fCBDT01QSFlfTU9ERV9TQVRBOworCW1hc2sgPSBSRUZfRlJFRl9TRUxfTUFTSyB8IENPTVBIWV9N T0RFX01BU0s7CisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01QSFlfUE9XRVJfUExMX0NU UkwsIGRhdGEsIG1hc2spOworCisJLyogMy4gVXNlIG1heGltdW0gUExMIHJhdGUgKG5vIHBvd2Vy IHNhdmUpICovCisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01QSFlfS1ZDT19DQUxfQ1RS TCwKKwkJCSAgICBVU0VfTUFYX1BMTF9SQVRFX0JJVCwgVVNFX01BWF9QTExfUkFURV9CSVQpOwor CisJLyogNC4gUmVzZXQgcmVzZXJ2ZWQgYml0ICovCisJY29tcGh5X3NldF9pbmRpcmVjdChsYW5l LT5wcml2LCBDT01QSFlfUkVTRVJWRURfUkVHLAorCQkJICAgIDB4MCwgUEhZQ1RSTF9GUk1fUElO X0JJVCk7CisKKwkvKiA1LiBTZXQgdmVuZG9yLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gKEl0IGlz IGRvbmUgaW4gc2F0YSBkcml2ZXIpICovCisJLyogWFhYOiBpbiBVLUJvb3QgYmVsb3cgc2VxdWVu Y2Ugd2FzIGV4ZWN1dGVkIGluIHRoaXMgcGxhY2UsIGluIExpbnV4CisJICogbm90LiAgTm93IGl0 IGlzIGRvbmUgb25seSBpbiBVLUJvb3QgYmVmb3JlIHRoaXMgY29tcGh5CisJICogaW5pdGlhbGl6 YXRpb24gLSB0ZXN0cyBzaG93cyB0aGF0IGl0IHdvcmtzIG9rLCBidXQgaW4gY2FzZSBvZiBhbnkK KwkgKiBmdXR1cmUgcHJvYmxlbSBpdCBpcyBsZWZ0IGZvciByZWZlcmVuY2UuCisJICogICByZWdf c2V0KE1WRUJVX1JFR1NfQkFTRSArIDB4ZTAwYTAsIDAsIDB4ZmZmZmZmZmYpOworCSAqICAgcmVn X3NldChNVkVCVV9SRUdTX0JBU0UgKyAweGUwMGE0LCBCSVQoNiksIEJJVCg2KSk7CisJICovCisK KwkvKiBXYWl0IGZvciA+IDU1IHVzIHRvIGFsbG93IFBMTCBiZSBlbmFibGVkICovCisJdWRlbGF5 KFBMTF9TRVRfREVMQVlfVVMpOworCisJLyogUG9sbGluZyBzdGF0dXMgKi8KKwlyZXQgPSBjb21w aHlfbGFuZV9yZWdfcG9sbChsYW5lLCBDT01QSFlfRElHX0xPT1BCQUNLX0VOLAorCQkJCSAgIFBM TF9SRUFEWV9UWF9CSVQsIENPTVBIWV9QTExfU0xFRVAsCisJCQkJICAgQ09NUEhZX1BMTF9USU1F T1VUKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKGxhbmUtPmRldiwgIkZhaWxlZCB0byBsb2NrIFNB VEEgUExMXG4iKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXBoeV9nYmVf cGh5X2luaXQoc3RydWN0IG12ZWJ1X2EzNzAwX2NvbXBoeV9sYW5lICpsYW5lLAorCQkJCWJvb2wg aXNfMWdicHMpCit7CisJaW50IGFkZHIsIGZpeF9pZHg7CisJdTE2IHZhbDsKKworCWZpeF9pZHgg PSAwOworCWZvciAoYWRkciA9IDA7IGFkZHIgPCA1MTI7IGFkZHIrKykgeworCQkvKgorCQkgKiBB bGwgUEhZIHJlZ2lzdGVyIHZhbHVlcyBhcmUgZGVmaW5lZCBpbiBmdWxsIGZvciAzLjEyNUdicHMK KwkJICogU0VSREVTIHNwZWVkLiBUaGUgdmFsdWVzIHJlcXVpcmVkIGZvciAxLjI1IEdicHMgYXJl IGFsbW9zdAorCQkgKiB0aGUgc2FtZSBhbmQgb25seSBmZXcgcmVnaXN0ZXJzIHNob3VsZCBiZSAi Zml4ZWQiIGluCisJCSAqIGNvbXBhcmlzb24gdG8gMy4xMjUgR2JwcyB2YWx1ZXMuIFRoZXNlIHJl Z2lzdGVyIHZhbHVlcyBhcmUKKwkJICogc3RvcmVkIGluICJnYmVfcGh5X2luaXRfZml4IiBhcnJh eS4KKwkJICovCisJCWlmICghaXNfMWdicHMgJiYgZ2JlX3BoeV9pbml0X2ZpeFtmaXhfaWR4XS5h ZGRyID09IGFkZHIpIHsKKwkJCS8qIFVzZSBuZXcgdmFsdWUgKi8KKwkJCXZhbCA9IGdiZV9waHlf aW5pdF9maXhbZml4X2lkeF0udmFsdWU7CisJCQlpZiAoZml4X2lkeCA8IEFSUkFZX1NJWkUoZ2Jl X3BoeV9pbml0X2ZpeCkpCisJCQkJZml4X2lkeCsrOworCQl9IGVsc2UgeworCQkJdmFsID0gZ2Jl X3BoeV9pbml0W2FkZHJdOworCQl9CisKKwkJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBhZGRy LCB2YWwsIDB4RkZGRik7CisJfQorfQorCitzdGF0aWMgaW50CittdmVidV9hMzcwMF9jb21waHlf ZXRoZXJuZXRfcG93ZXJfb24oc3RydWN0IG12ZWJ1X2EzNzAwX2NvbXBoeV9sYW5lICpsYW5lKQor eworCXUzMiBtYXNrLCBkYXRhLCBzcGVlZF9zZWw7CisJaW50IHJldDsKKworCS8qIFNldCBzZWxl Y3RvciAqLworCXJldCA9IG12ZWJ1X2EzNzAwX2NvbXBoeV9zZXRfcGh5X3NlbGVjdG9yKGxhbmUp OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIDEuIFJlc2V0IFBIWSBieSBz ZXR0aW5nIFBIWSBpbnB1dCBwb3J0IFBJTl9SRVNFVD0xLgorCSAqIDIuIFNldCBQSFkgaW5wdXQg cG9ydCBQSU5fVFhfSURMRT0xLCBQSU5fUFVfSVZSRUY9MSB0byBrZWVwCisJICogICAgUEhZIFRY UC9UWE4gb3V0cHV0IHRvIGlkbGUgc3RhdGUgZHVyaW5nIFBIWSBpbml0aWFsaXphdGlvbgorCSAq IDMuIFNldCBQSFkgaW5wdXQgcG9ydCBQSU5fUFVfUExMPTAsIFBJTl9QVV9SWD0wLCBQSU5fUFVf VFg9MC4KKwkgKi8KKwlkYXRhID0gUElOX1BVX0lWUkVGX0JJVCB8IFBJTl9UWF9JRExFX0JJVCB8 IFBJTl9SRVNFVF9DT01QSFlfQklUOworCW1hc2sgPSBkYXRhIHwgUElOX1JFU0VUX0NPUkVfQklU IHwgUElOX1BVX1BMTF9CSVQgfCBQSU5fUFVfUlhfQklUIHwKKwkgICAgICAgUElOX1BVX1RYX0JJ VCB8IFBIWV9SWF9JTklUX0JJVDsKKwljb21waHlfcGVyaXBoX3JlZ19zZXQobGFuZSwgQ09NUEhZ X1BIWV9DRkcxLCBkYXRhLCBtYXNrKTsKKworCS8qIDQuIFJlbGVhc2UgcmVzZXQgdG8gdGhlIFBI WSBieSBzZXR0aW5nIFBJTl9SRVNFVD0wLiAqLworCWRhdGEgPSAweDA7CisJbWFzayA9IFBJTl9S RVNFVF9DT01QSFlfQklUOworCWNvbXBoeV9wZXJpcGhfcmVnX3NldChsYW5lLCBDT01QSFlfUEhZ X0NGRzEsIGRhdGEsIG1hc2spOworCisJLyoKKwkgKiA1LiBTZXQgUElOX1BIWV9HRU5fVFhbMzow XSBhbmQgUElOX1BIWV9HRU5fUlhbMzowXSB0byBkZWNpZGUgQ09NUEhZCisJICogYml0IHJhdGUK KwkgKi8KKwlzd2l0Y2ggKGxhbmUtPnN1Ym1vZGUpIHsKKwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9E RV9TR01JSToKKwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg6CisJCS8qIFNHTUlJ IDFHLCBTZXJEZXMgc3BlZWQgMS4yNUcgKi8KKwkJc3BlZWRfc2VsID0gU0VSREVTX1NQRUVEXzFf MjVfRzsKKwkJYnJlYWs7CisJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfMjUwMEJBU0VYOgorCQkv KiAyNTAwQmFzZS1YLCBTZXJEZXMgc3BlZWQgMy4xMjVHICovCisJCXNwZWVkX3NlbCA9IFNFUkRF U19TUEVFRF8zXzEyNV9HOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBPdGhlciByYXRlcyBh cmUgbm90IHN1cHBvcnRlZCAqLworCQlkZXZfZXJyKGxhbmUtPmRldiwKKwkJCSJ1bnN1cHBvcnRl ZCBwaHkgc3BlZWQgJWQgb24gY29tcGh5IGxhbmUlZFxuIiwKKwkJCWxhbmUtPnN1Ym1vZGUsIGxh bmUtPmlkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCWRhdGEgPSBHRU5fUlhfU0VMX1ZBTFVF KHNwZWVkX3NlbCkgfCBHRU5fVFhfU0VMX1ZBTFVFKHNwZWVkX3NlbCk7CisJbWFzayA9IEdFTl9S WF9TRUxfTUFTSyB8IEdFTl9UWF9TRUxfTUFTSzsKKwljb21waHlfcGVyaXBoX3JlZ19zZXQobGFu ZSwgQ09NUEhZX1BIWV9DRkcxLCBkYXRhLCBtYXNrKTsKKworCS8qCisJICogNi4gV2FpdCAxMG1T IGZvciBiYW5kZ2FwIGFuZCByZWZlcmVuY2UgY2xvY2tzIHRvIHN0YWJpbGl6ZTsgdGhlbgorCSAq IHN0YXJ0IFNXIHByb2dyYW1taW5nLgorCSAqLworCW1kZWxheSgxMCk7CisKKwkvKiA3LiBQcm9n cmFtIENPTVBIWSByZWdpc3RlciBQSFlfTU9ERSAqLworCWRhdGEgPSBDT01QSFlfTU9ERV9TRVJE RVM7CisJbWFzayA9IENPTVBIWV9NT0RFX01BU0s7CisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5l LCBDT01QSFlfUE9XRVJfUExMX0NUUkwsIGRhdGEsIG1hc2spOworCisJLyoKKwkgKiA4LiBTZXQg Q09NUEhZIHJlZ2lzdGVyIFJFRkNMS19TRUwgdG8gc2VsZWN0IHRoZSBjb3JyZWN0IFJFRkNMSwor CSAqIHNvdXJjZQorCSAqLworCWRhdGEgPSAweDA7CisJbWFzayA9IFBIWV9SRUZfQ0xLX1NFTDsK Kwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUsIENPTVBIWV9NSVNDX0NUUkwwLCBkYXRhLCBtYXNr KTsKKworCS8qCisJICogOS4gU2V0IGNvcnJlY3QgcmVmZXJlbmNlIGNsb2NrIGZyZXF1ZW5jeSBp biBDT01QSFkgcmVnaXN0ZXIKKwkgKiBSRUZfRlJFRl9TRUwuCisJICovCisJaWYgKGxhbmUtPnBy aXYtPnh0YWxfaXNfNDBtKQorCQlkYXRhID0gUkVGX0ZSRUZfU0VMX1NFUkRFU181ME1IWjsKKwll bHNlCisJCWRhdGEgPSBSRUZfRlJFRl9TRUxfU0VSREVTXzI1TUhaOworCisJbWFzayA9IFJFRl9G UkVGX1NFTF9NQVNLOworCWNvbXBoeV9sYW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX1BPV0VSX1BM TF9DVFJMLCBkYXRhLCBtYXNrKTsKKworCS8qCisJICogMTAuIFByb2dyYW0gQ09NUEhZIHJlZ2lz dGVyIFBIWV9HRU5fTUFYWzE6MF0KKwkgKiBUaGlzIHN0ZXAgaXMgbWVudGlvbmVkIGluIHRoZSBm bG93IHJlY2VpdmVkIGZyb20gdmVyaWZpY2F0aW9uIHRlYW0uCisJICogSG93ZXZlciB0aGUgUEhZ X0dFTl9NQVggdmFsdWUgaXMgb25seSBtZWFuaW5nZnVsIGZvciBvdGhlciBpbnRlcmZhY2VzCisJ ICogKG5vdCBTRVJERVMpLiBGb3IgaW5zdGFuY2UsIGl0IHNlbGVjdHMgU0FUQSBzcGVlZCAxLjUv My82IEdicHMgb3IKKwkgKiBQQ0llIHNwZWVkIDIuNS81IEdicHMKKwkgKi8KKworCS8qCisJICog MTEuIFByb2dyYW0gQ09NUEhZIHJlZ2lzdGVyIFNFTF9CSVRTIHRvIHNldCBjb3JyZWN0IHBhcmFs bGVsIGRhdGEKKwkgKiBidXMgd2lkdGgKKwkgKi8KKwlkYXRhID0gREFUQV9XSURUSF8xMEJJVDsK KwltYXNrID0gU0VMX0RBVEFfV0lEVEhfTUFTSzsKKwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUs IENPTVBIWV9ESUdfTE9PUEJBQ0tfRU4sIGRhdGEsIG1hc2spOworCisJLyoKKwkgKiAxMi4gQXMg bG9uZyBhcyBERkUgZnVuY3Rpb24gbmVlZHMgdG8gYmUgZW5hYmxlZCBpbiBhbnkgbW9kZSwKKwkg KiBDT01QSFkgcmVnaXN0ZXIgREZFX1VQREFURV9FTls1OjBdIHNoYWxsIGJlIHByb2dyYW1tZWQg dG8gMHgzRgorCSAqIGZvciByZWFsIGNoaXAgZHVyaW5nIENPTVBIWSBwb3dlciBvbi4KKwkgKiBU aGUgdmFsdWUgb2YgdGhlIERGRV9VUERBVEVfRU4gYWxyZWFkeSBpcyAweDNGLCBiZWNhdXNlIGl0 IGlzIHRoZQorCSAqIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQgb2YgdGhlIFBIWS4KKwkgKi8K KworCS8qCisJICogMTMuIFByb2dyYW0gQ09NUEhZIEdFTiByZWdpc3RlcnMuCisJICogVGhlc2Ug cmVnaXN0ZXJzIHNob3VsZCBiZSBwcm9ncmFtbWVkIGJhc2VkIG9uIHRoZSBsYWIgdGVzdGluZyBy ZXN1bHQKKwkgKiB0byBhY2hpZXZlIG9wdGltYWwgcGVyZm9ybWFuY2UuIFBsZWFzZSBjb250YWN0 IHRoZSBDRUEgZ3JvdXAgdG8gZ2V0CisJICogdGhlIHJlbGF0ZWQgR0VOIHRhYmxlIGR1cmluZyBy ZWFsIGNoaXAgYnJpbmctdXAuIFdlIG9ubHkgcmVxdWlyZWQgdG8KKwkgKiBydW4gdGhvdWdoIHRo ZSBlbnRpcmUgcmVnaXN0ZXJzIHByb2dyYW1taW5nIGZsb3cgZGVmaW5lZCBieQorCSAqICJjb21w aHlfZ2JlX3BoeV9pbml0IiB3aGVuIHRoZSBSRUYgY2xvY2sgaXMgNDAgTUh6LiBGb3IgUkVGIGNs b2NrCisJICogMjUgTUh6IHRoZSBkZWZhdWx0IHZhbHVlcyBzdG9yZWQgaW4gUEhZIHJlZ2lzdGVy cyBhcmUgT0suCisJICovCisJZGV2X2RiZyhsYW5lLT5kZXYsICJSdW5uaW5nIEMtRFBJIHBoeSBp bml0ICVzIG1vZGVcbiIsCisJCWxhbmUtPnN1Ym1vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzI1 MDBCQVNFWCA/ICIyRzUiIDogIjFHIik7CisJaWYgKGxhbmUtPnByaXYtPnh0YWxfaXNfNDBtKQor CQljb21waHlfZ2JlX3BoeV9pbml0KGxhbmUsCisJCQkJICAgIGxhbmUtPnN1Ym1vZGUgIT0gUEhZ X0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWCk7CisKKwkvKgorCSAqIDE0LiBDaGVjayB0aGUgUEhZ IFBvbGFyaXR5IGludmVydCBiaXQKKwkgKi8KKwlkYXRhID0gMHgwOworCWlmIChsYW5lLT5pbnZl cnRfdHgpCisJCWRhdGEgfD0gVFhEX0lOVkVSVF9CSVQ7CisJaWYgKGxhbmUtPmludmVydF9yeCkK KwkJZGF0YSB8PSBSWERfSU5WRVJUX0JJVDsKKwltYXNrID0gVFhEX0lOVkVSVF9CSVQgfCBSWERf SU5WRVJUX0JJVDsKKwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUsIENPTVBIWV9TWU5DX1BBVFRF Uk4sIGRhdGEsIG1hc2spOworCisJLyoKKwkgKiAxNS4gU2V0IFBIWSBpbnB1dCBwb3J0cyBQSU5f UFVfUExMLCBQSU5fUFVfVFggYW5kIFBJTl9QVV9SWCB0byAxIHRvCisJICogc3RhcnQgUEhZIHBv d2VyIHVwIHNlcXVlbmNlLiBBbGwgdGhlIFBIWSByZWdpc3RlciBwcm9ncmFtbWluZyBzaG91bGQK KwkgKiBiZSBkb25lIGJlZm9yZSBQSU5fUFVfUExMPTEuIFRoZXJlIHNob3VsZCBiZSBubyByZWdp c3RlciBwcm9ncmFtbWluZworCSAqIGZvciBub3JtYWwgUEhZIG9wZXJhdGlvbiBmcm9tIHRoaXMg cG9pbnQuCisJICovCisJZGF0YSA9IFBJTl9QVV9QTExfQklUIHwgUElOX1BVX1JYX0JJVCB8IFBJ Tl9QVV9UWF9CSVQ7CisJbWFzayA9IGRhdGE7CisJY29tcGh5X3BlcmlwaF9yZWdfc2V0KGxhbmUs IENPTVBIWV9QSFlfQ0ZHMSwgZGF0YSwgbWFzayk7CisKKwkvKgorCSAqIDE2LiBXYWl0IGZvciBQ SFkgcG93ZXIgdXAgc2VxdWVuY2UgdG8gZmluaXNoIGJ5IGNoZWNraW5nIG91dHB1dCBwb3J0cwor CSAqIFBJTl9QTExfUkVBRFlfVFg9MSBhbmQgUElOX1BMTF9SRUFEWV9SWD0xLgorCSAqLworCXJl dCA9IGNvbXBoeV9wZXJpcGhfcmVnX3BvbGwobGFuZSwgQ09NUEhZX1BIWV9TVEFUMSwKKwkJCQkg ICAgIFBIWV9QTExfUkVBRFlfVFhfQklUIHwKKwkJCQkgICAgIFBIWV9QTExfUkVBRFlfUlhfQklU LAorCQkJCSAgICAgQ09NUEhZX1BMTF9TTEVFUCwgQ09NUEhZX1BMTF9USU1FT1VUKTsKKwlpZiAo cmV0KSB7CisJCWRldl9lcnIobGFuZS0+ZGV2LCAiRmFpbGVkIHRvIGxvY2sgUExMIGZvciBTRVJE RVMgUEhZICVkXG4iLAorCQkJbGFuZS0+aWQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qCisJ ICogMTcuIFNldCBDT01QSFkgaW5wdXQgcG9ydCBQSU5fVFhfSURMRT0wCisJICovCisJY29tcGh5 X3BlcmlwaF9yZWdfc2V0KGxhbmUsIENPTVBIWV9QSFlfQ0ZHMSwgMHgwLCBQSU5fVFhfSURMRV9C SVQpOworCisJLyoKKwkgKiAxOC4gQWZ0ZXIgdmFsaWQgZGF0YSBhcHBlYXIgb24gUElOX1JYREFU QSBidXMsIHNldCBQSU5fUlhfSU5JVD0xLiBUbworCSAqIHN0YXJ0IFJYIGluaXRpYWxpemF0aW9u LiBQSU5fUlhfSU5JVF9ET05FIHdpbGwgYmUgY2xlYXJlZCB0byAwIGJ5IHRoZQorCSAqIFBIWSBB ZnRlciBSWCBpbml0aWFsaXphdGlvbiBpcyBkb25lLCBQSU5fUlhfSU5JVF9ET05FIHdpbGwgYmUg c2V0IHRvCisJICogMSBieSBDT01QSFkgU2V0IFBJTl9SWF9JTklUPTAgYWZ0ZXIgUElOX1JYX0lO SVRfRE9ORT0gMS4gUGxlYXNlCisJICogcmVmZXIgdG8gUlggaW5pdGlhbGl6YXRpb24gcGFydCBm b3IgZGV0YWlscy4KKwkgKi8KKwljb21waHlfcGVyaXBoX3JlZ19zZXQobGFuZSwgQ09NUEhZX1BI WV9DRkcxLAorCQkJICAgICAgUEhZX1JYX0lOSVRfQklULCBQSFlfUlhfSU5JVF9CSVQpOworCisJ cmV0ID0gY29tcGh5X3BlcmlwaF9yZWdfcG9sbChsYW5lLCBDT01QSFlfUEhZX1NUQVQxLAorCQkJ CSAgICAgUEhZX1BMTF9SRUFEWV9UWF9CSVQgfAorCQkJCSAgICAgUEhZX1BMTF9SRUFEWV9SWF9C SVQsCisJCQkJICAgICBDT01QSFlfUExMX1NMRUVQLCBDT01QSFlfUExMX1RJTUVPVVQpOworCWlm IChyZXQpIHsKKwkJZGV2X2VycihsYW5lLT5kZXYsICJGYWlsZWQgdG8gbG9jayBQTEwgZm9yIFNF UkRFUyBQSFkgJWRcbiIsCisJCQlsYW5lLT5pZCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0 ID0gY29tcGh5X3BlcmlwaF9yZWdfcG9sbChsYW5lLCBDT01QSFlfUEhZX1NUQVQxLAorCQkJCSAg ICAgUEhZX1JYX0lOSVRfRE9ORV9CSVQsCisJCQkJICAgICBDT01QSFlfUExMX1NMRUVQLCBDT01Q SFlfUExMX1RJTUVPVVQpOworCWlmIChyZXQpCisJCWRldl9lcnIobGFuZS0+ZGV2LCAiRmFpbGVk IHRvIGluaXQgUlggb2YgU0VSREVTIFBIWSAlZFxuIiwKKwkJCWxhbmUtPmlkKTsKKworCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK212ZWJ1X2EzNzAwX2NvbXBoeV91c2IzX3Bvd2VyX29u KHN0cnVjdCBtdmVidV9hMzcwMF9jb21waHlfbGFuZSAqbGFuZSkKK3sKKwl1MzIgbWFzaywgZGF0 YSwgY2ZnLCByZWZfY2xrOworCWludCByZXQ7CisKKwkvKiBTZXQgcGh5IHNlY2xlY3RvciAqLwor CXJldCA9IG12ZWJ1X2EzNzAwX2NvbXBoeV9zZXRfcGh5X3NlbGVjdG9yKGxhbmUpOworCWlmIChy ZXQpCisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIDAuIFNldCBQSFkgT1RHIENvbnRyb2woMHg1 ZDAzNCksIGJpdCA0LCBQb3dlciB1cCBPVEcgbW9kdWxlIFRoZQorCSAqIHJlZ2lzdGVyIGJlbG9u ZyB0byBVVE1JIG1vZHVsZSwgc28gaXQgaXMgc2V0IGluIFVUTUkgcGh5IGRyaXZlci4KKwkgKi8K KworCS8qCisJICogMS4gU2V0IFBSRF9UWERFRU1QSCAoMy41ZGIgZGUtZW1waCkKKwkgKi8KKwlk YXRhID0gUFJEX1RYREVFTVBIMF9NQVNLOworCW1hc2sgPSBQUkRfVFhERUVNUEgwX01BU0sgfCBQ UkRfVFhNQVJHSU5fTUFTSyB8IFBSRF9UWFNXSU5HX01BU0sgfAorCSAgICAgICBDRkdfVFhfQUxJ R05fUE9TX01BU0s7CisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01QSFlfUElQRV9MQU5F X0NGRzAsIGRhdGEsIG1hc2spOworCisJLyoKKwkgKiAyLiBTZXQgQklUMDogZW5hYmxlIHRyYW5z bWl0dGVyIGluIGhpZ2ggaW1wZWRhbmNlIG1vZGUKKwkgKiAgICBTZXQgQklUWzM6NF06IGRlbGF5 IDIgY2xvY2sgY3ljbGVzIGZvciBIaVogb2ZmIGxhdGVuY3kKKwkgKiAgICBTZXQgQklUNjogVHgg ZGV0ZWN0IFJ4IGF0IEhpWiBtb2RlCisJICogICAgVW5zZXQgQklUMTU6IHNldCB0byAwIHRvIHNl dCBVU0IzIERlLWVtcGhhc2l6ZSBsZXZlbCB0byAtMy41ZGIKKwkgKiAgICAgICAgICAgIHRvZ2V0 aGVyIHdpdGggYml0IDAgb2YgQ09NUEhZX1BJUEVfTEFORV9DRkcwIHJlZ2lzdGVyCisJICovCisJ ZGF0YSA9IFRYX0RFVF9SWF9NT0RFIHwgR0VOMl9UWF9EQVRBX0RMWV9ERUZUIHwgVFhfRUxFQ19J RExFX01PREVfRU47CisJbWFzayA9IFBSRF9UWERFRU1QSDFfTUFTSyB8IFRYX0RFVF9SWF9NT0RF IHwgR0VOMl9UWF9EQVRBX0RMWV9NQVNLIHwKKwkgICAgICAgVFhfRUxFQ19JRExFX01PREVfRU47 CisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01QSFlfUElQRV9MQU5FX0NGRzEsIGRhdGEs IG1hc2spOworCisJLyoKKwkgKiAzLiBTZXQgU3ByZWFkIFNwZWN0cnVtIENsb2NrIEVuYWJsZWQK KwkgKi8KKwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUsIENPTVBIWV9QSVBFX0xBTkVfQ0ZHNCwK KwkJCSAgICBTUFJFQURfU1BFQ1RSVU1fQ0xLX0VOLCBTUFJFQURfU1BFQ1RSVU1fQ0xLX0VOKTsK KworCS8qCisJICogNC4gU2V0IE92ZXJyaWRlIE1hcmdpbmluZyBDb250cm9scyBGcm9tIHRoZSBN QUM6CisJICogICAgVXNlIG1hcmdpbmluZyBzaWduYWxzIGZyb20gbGFuZSBjb25maWd1cmF0aW9u CisJICovCisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01QSFlfUElQRV9URVNUX01PREVf Q1RSTCwKKwkJCSAgICBNT0RFX01BUkdJTl9PVkVSUklERSwgMHhGRkZGKTsKKworCS8qCisJICog NS4gU2V0IExhbmUtdG8tTGFuZSBCdW5kbGUgQ2xvY2sgU2FtcGxpbmcgUGVyaW9kID0gcGVyIFBD TEsgY3ljbGVzCisJICogICAgc2V0IE1vZGUgQ2xvY2sgU291cmNlID0gUENMSyBpcyBnZW5lcmF0 ZWQgZnJvbSBSRUZDTEsKKwkgKi8KKwlkYXRhID0gMHgwOworCW1hc2sgPSBNT0RFX0NMS19TUkMg fCBCVU5ETEVfUEVSSU9EX1NFTCB8IEJVTkRMRV9QRVJJT0RfU0NBTEVfTUFTSyB8CisJICAgICAg IEJVTkRMRV9TQU1QTEVfQ1RSTCB8IFBMTF9SRUFEWV9ETFlfTUFTSzsKKwljb21waHlfbGFuZV9y ZWdfc2V0KGxhbmUsIENPTVBIWV9QSVBFX0NMS19TUkNfTE8sIGRhdGEsIG1hc2spOworCisJLyoK KwkgKiA2LiBTZXQgRzIgU3ByZWFkIFNwZWN0cnVtIENsb2NrIEFtcGxpdHVkZSBhdCA0SworCSAq LworCWNvbXBoeV9sYW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX0dFTjJfU0VUMiwKKwkJCSAgICBH UzJfVFhfU1NDX0FNUF80MTI4LCBHUzJfVFhfU1NDX0FNUF9NQVNLKTsKKworCS8qCisJICogNy4g VW5zZXQgRzMgU3ByZWFkIFNwZWN0cnVtIENsb2NrIEFtcGxpdHVkZQorCSAqICAgIHNldCBHMyBU WCBhbmQgUlggUmVnaXN0ZXIgTWFzdGVyIEN1cnJlbnQgU2VsZWN0CisJICovCisJZGF0YSA9IEdT Ml9WUkVHX1JYVFhfTUFTX0lTRVRfNjBVOworCW1hc2sgPSBHUzJfVFhfU1NDX0FNUF9NQVNLIHwg R1MyX1ZSRUdfUlhUWF9NQVNfSVNFVF9NQVNLIHwKKwkgICAgICAgR1MyX1JTVkRfNl8wX01BU0s7 CisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01QSFlfR0VOM19TRVQyLCBkYXRhLCBtYXNr KTsKKworCS8qCisJICogOC4gQ2hlY2sgY3J5c3RhbCBqdW1wZXIgc2V0dGluZyBhbmQgcHJvZ3Jh bSB0aGUgUG93ZXIgYW5kIFBMTCBDb250cm9sCisJICogYWNjb3JkaW5nbHkgQ2hhbmdlIFJYIHdh aXQKKwkgKi8KKwlpZiAobGFuZS0+cHJpdi0+eHRhbF9pc180MG0pIHsKKwkJcmVmX2NsayA9IFJF Rl9GUkVGX1NFTF9QQ0lFX1VTQjNfNDBNSFo7CisJCWNmZyA9IENGR19QTV9SWERMT1pfV0FJVF8x Ml9VTklUOworCX0gZWxzZSB7CisJCXJlZl9jbGsgPSBSRUZfRlJFRl9TRUxfUENJRV9VU0IzXzI1 TUhaOworCQljZmcgPSBDRkdfUE1fUlhETE9aX1dBSVRfN19VTklUOworCX0KKworCWRhdGEgPSBQ VV9JVlJFRl9CSVQgfCBQVV9QTExfQklUIHwgUFVfUlhfQklUIHwgUFVfVFhfQklUIHwKKwkgICAg ICAgUFVfVFhfSU5UUF9CSVQgfCBQVV9ERkVfQklUIHwgQ09NUEhZX01PREVfVVNCMyB8IHJlZl9j bGs7CisJbWFzayA9IFBVX0lWUkVGX0JJVCB8IFBVX1BMTF9CSVQgfCBQVV9SWF9CSVQgfCBQVV9U WF9CSVQgfAorCSAgICAgICBQVV9UWF9JTlRQX0JJVCB8IFBVX0RGRV9CSVQgfCBQTExfTE9DS19C SVQgfCBDT01QSFlfTU9ERV9NQVNLIHwKKwkgICAgICAgUkVGX0ZSRUZfU0VMX01BU0s7CisJY29t cGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01QSFlfUE9XRVJfUExMX0NUUkwsIGRhdGEsIG1hc2sp OworCisJZGF0YSA9IENGR19QTV9SWERFTl9XQUlUXzFfVU5JVCB8IGNmZzsKKwltYXNrID0gQ0ZH X1BNX09TQ0NMS19XQUlUX01BU0sgfCBDRkdfUE1fUlhERU5fV0FJVF9NQVNLIHwKKwkgICAgICAg Q0ZHX1BNX1JYRExPWl9XQUlUX01BU0s7CisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01Q SFlfUElQRV9QV1JfTUdNX1RJTTEsIGRhdGEsIG1hc2spOworCisJLyoKKwkgKiA5LiBFbmFibGUg aWRsZSBzeW5jCisJICovCisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01QSFlfSURMRV9T WU5DX0VOLAorCQkJICAgIElETEVfU1lOQ19FTiwgSURMRV9TWU5DX0VOKTsKKworCS8qCisJICog MTAuIEVuYWJsZSB0aGUgb3V0cHV0IG9mIDUwME0gY2xvY2sKKwkgKi8KKwljb21waHlfbGFuZV9y ZWdfc2V0KGxhbmUsIENPTVBIWV9NSVNDX0NUUkwwLCBDTEs1MDBNX0VOLCBDTEs1MDBNX0VOKTsK KworCS8qCisJICogMTEuIFNldCAyMC1iaXQgZGF0YSB3aWR0aAorCSAqLworCWNvbXBoeV9sYW5l X3JlZ19zZXQobGFuZSwgQ09NUEhZX0RJR19MT09QQkFDS19FTiwKKwkJCSAgICBEQVRBX1dJRFRI XzIwQklULCAweEZGRkYpOworCisJLyoKKwkgKiAxMi4gT3ZlcnJpZGUgU3BlZWRfUExMIHZhbHVl IGFuZCB1c2UgTUFDIFBMTAorCSAqLworCWRhdGEgPSBTUEVFRF9QTExfVkFMVUVfMTYgfCBVU0Vf TUFYX1BMTF9SQVRFX0JJVDsKKwltYXNrID0gMHhGRkZGOworCWNvbXBoeV9sYW5lX3JlZ19zZXQo bGFuZSwgQ09NUEhZX0tWQ09fQ0FMX0NUUkwsIGRhdGEsIG1hc2spOworCisJLyoKKwkgKiAxMy4g Q2hlY2sgdGhlIFBvbGFyaXR5IGludmVydCBiaXQKKwkgKi8KKwlkYXRhID0gMHgwOworCWlmIChs YW5lLT5pbnZlcnRfdHgpCisJCWRhdGEgfD0gVFhEX0lOVkVSVF9CSVQ7CisJaWYgKGxhbmUtPmlu dmVydF9yeCkKKwkJZGF0YSB8PSBSWERfSU5WRVJUX0JJVDsKKwltYXNrID0gVFhEX0lOVkVSVF9C SVQgfCBSWERfSU5WRVJUX0JJVDsKKwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUsIENPTVBIWV9T WU5DX1BBVFRFUk4sIGRhdGEsIG1hc2spOworCisJLyoKKwkgKiAxNC4gU2V0IG1heCBzcGVlZCBn ZW5lcmF0aW9uIHRvIFVTQjMuMCA1R2JwcworCSAqLworCWNvbXBoeV9sYW5lX3JlZ19zZXQobGFu ZSwgQ09NUEhZX1NZTkNfTUFTS19HRU4sCisJCQkgICAgUEhZX0dFTl9NQVhfVVNCM181RywgUEhZ X0dFTl9NQVhfTUFTSyk7CisKKwkvKgorCSAqIDE1LiBTZXQgY2FwYWNpdG9yIHZhbHVlIGZvciBG RkUgZ2FpbiBwZWFraW5nIHRvIDB4RgorCSAqLworCWNvbXBoeV9sYW5lX3JlZ19zZXQobGFuZSwg Q09NUEhZX0dFTjJfU0VUMywKKwkJCSAgICBHUzNfRkZFX0NBUF9TRUxfVkFMVUUsIEdTM19GRkVf Q0FQX1NFTF9NQVNLKTsKKworCS8qCisJICogMTYuIFJlbGVhc2UgU1cgcmVzZXQKKwkgKi8KKwlk YXRhID0gTU9ERV9DT1JFX0NMS19GUkVRX1NFTCB8IE1PREVfUElQRV9XSURUSF8zMiB8IE1PREVf UkVGRElWX0JZXzQ7CisJbWFzayA9IDB4RkZGRjsKKwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUs IENPTVBIWV9QSVBFX1JTVF9DTEtfQ1RSTCwgZGF0YSwgbWFzayk7CisKKwkvKiBXYWl0IGZvciA+ IDU1IHVzIHRvIGFsbG93IFBDTEsgYmUgZW5hYmxlZCAqLworCXVkZWxheShQTExfU0VUX0RFTEFZ X1VTKTsKKworCXJldCA9IGNvbXBoeV9sYW5lX3JlZ19wb2xsKGxhbmUsIENPTVBIWV9QSVBFX0xB TkVfU1RBVDEsIFRYRENMS19QQ0xLX0VOLAorCQkJCSAgIENPTVBIWV9QTExfU0xFRVAsIENPTVBI WV9QTExfVElNRU9VVCk7CisJaWYgKHJldCkKKwkJZGV2X2VycihsYW5lLT5kZXYsICJGYWlsZWQg dG8gbG9jayBVU0IzIFBMTFxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50Citt dmVidV9hMzcwMF9jb21waHlfcGNpZV9wb3dlcl9vbihzdHJ1Y3QgbXZlYnVfYTM3MDBfY29tcGh5 X2xhbmUgKmxhbmUpCit7CisJdTMyIG1hc2ssIGRhdGEsIHJlZl9jbGs7CisJaW50IHJldDsKKwor CS8qIENvbmZpZ3VyZSBwaHkgc2VsZWN0b3IgZm9yIFBDSWUgKi8KKwlyZXQgPSBtdmVidV9hMzcw MF9jb21waHlfc2V0X3BoeV9zZWxlY3RvcihsYW5lKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCisJLyogMS4gRW5hYmxlIG1heCBQTEwuICovCisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5l LCBDT01QSFlfUElQRV9MQU5FX0NGRzEsCisJCQkgICAgVVNFX01BWF9QTExfUkFURV9FTiwgVVNF X01BWF9QTExfUkFURV9FTik7CisKKwkvKiAyLiBTZWxlY3QgMjAgYml0IFNFUkRFUyBpbnRlcmZh Y2UuICovCisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01QSFlfUElQRV9DTEtfU1JDX0xP LAorCQkJICAgIENGR19TRUxfMjBCLCBDRkdfU0VMXzIwQik7CisKKwkvKiAzLiBGb3JjZSB0byB1 c2UgcmVnIHNldHRpbmcgZm9yIFBDSWUgbW9kZSAqLworCWNvbXBoeV9sYW5lX3JlZ19zZXQobGFu ZSwgQ09NUEhZX01JU0NfQ1RSTDEsCisJCQkgICAgU0VMX0JJVFNfUENJRV9GT1JDRSwgU0VMX0JJ VFNfUENJRV9GT1JDRSk7CisKKwkvKiA0LiBDaGFuZ2UgUlggd2FpdCAqLworCWRhdGEgPSBDRkdf UE1fUlhERU5fV0FJVF8xX1VOSVQgfCBDRkdfUE1fUlhETE9aX1dBSVRfMTJfVU5JVDsKKwltYXNr ID0gQ0ZHX1BNX09TQ0NMS19XQUlUX01BU0sgfCBDRkdfUE1fUlhERU5fV0FJVF9NQVNLIHwKKwkg ICAgICAgQ0ZHX1BNX1JYRExPWl9XQUlUX01BU0s7CisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5l LCBDT01QSFlfUElQRV9QV1JfTUdNX1RJTTEsIGRhdGEsIG1hc2spOworCisJLyogNS4gRW5hYmxl IGlkbGUgc3luYyAqLworCWNvbXBoeV9sYW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX0lETEVfU1lO Q19FTiwKKwkJCSAgICBJRExFX1NZTkNfRU4sIElETEVfU1lOQ19FTik7CisKKwkvKiA2LiBFbmFi bGUgdGhlIG91dHB1dCBvZiAxMDBNLzEyNU0vNTAwTSBjbG9jayAqLworCWRhdGEgPSBDTEs1MDBN X0VOIHwgVFhEQ0xLXzJYX1NFTCB8IENMSzEwME1fMTI1TV9FTjsKKwltYXNrID0gZGF0YTsKKwlj b21waHlfbGFuZV9yZWdfc2V0KGxhbmUsIENPTVBIWV9NSVNDX0NUUkwwLCBkYXRhLCBtYXNrKTsK KworCS8qCisJICogNy4gRW5hYmxlIFRYLCBQQ0lFIGdsb2JhbCByZWdpc3RlciwgMHhkMDA3NDgx NCwgaXQgaXMgZG9uZSBpbgorCSAqIFBDSS1FIGRyaXZlcgorCSAqLworCisJLyoKKwkgKiA4LiBD aGVjayBjcnlzdGFsIGp1bXBlciBzZXR0aW5nIGFuZCBwcm9ncmFtIHRoZSBQb3dlciBhbmQgUExM CisJICogQ29udHJvbCBhY2NvcmRpbmdseQorCSAqLworCisJaWYgKGxhbmUtPnByaXYtPnh0YWxf aXNfNDBtKQorCQlyZWZfY2xrID0gUkVGX0ZSRUZfU0VMX1BDSUVfVVNCM180ME1IWjsKKwllbHNl CisJCXJlZl9jbGsgPSBSRUZfRlJFRl9TRUxfUENJRV9VU0IzXzI1TUhaOworCisJZGF0YSA9IFBV X0lWUkVGX0JJVCB8IFBVX1BMTF9CSVQgfCBQVV9SWF9CSVQgfCBQVV9UWF9CSVQgfAorCSAgICAg ICBQVV9UWF9JTlRQX0JJVCB8IFBVX0RGRV9CSVQgfCBDT01QSFlfTU9ERV9QQ0lFIHwgcmVmX2Ns azsKKwltYXNrID0gMHhGRkZGOworCWNvbXBoeV9sYW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX1BP V0VSX1BMTF9DVFJMLCBkYXRhLCBtYXNrKTsKKworCS8qIDkuIE92ZXJyaWRlIFNwZWVkX1BMTCB2 YWx1ZSBhbmQgdXNlIE1BQyBQTEwgKi8KKwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUsIENPTVBI WV9LVkNPX0NBTF9DVFJMLAorCQkJICAgIFNQRUVEX1BMTF9WQUxVRV8xNiB8IFVTRV9NQVhfUExM X1JBVEVfQklULAorCQkJICAgIDB4RkZGRik7CisKKwkvKiAxMC4gQ2hlY2sgdGhlIFBvbGFyaXR5 IGludmVydCBiaXQgKi8KKwlkYXRhID0gMHgwOworCWlmIChsYW5lLT5pbnZlcnRfdHgpCisJCWRh dGEgfD0gVFhEX0lOVkVSVF9CSVQ7CisJaWYgKGxhbmUtPmludmVydF9yeCkKKwkJZGF0YSB8PSBS WERfSU5WRVJUX0JJVDsKKwltYXNrID0gVFhEX0lOVkVSVF9CSVQgfCBSWERfSU5WRVJUX0JJVDsK Kwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUsIENPTVBIWV9TWU5DX1BBVFRFUk4sIGRhdGEsIG1h c2spOworCisJLyogMTEuIFJlbGVhc2UgU1cgcmVzZXQgKi8KKwlkYXRhID0gTU9ERV9DT1JFX0NM S19GUkVRX1NFTCB8IE1PREVfUElQRV9XSURUSF8zMjsKKwltYXNrID0gZGF0YSB8IFBJUEVfU09G VF9SRVNFVCB8IE1PREVfUkVGRElWX01BU0s7CisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBD T01QSFlfUElQRV9SU1RfQ0xLX0NUUkwsIGRhdGEsIG1hc2spOworCisJLyogV2FpdCBmb3IgPiA1 NSB1cyB0byBhbGxvdyBQQ0xLIGJlIGVuYWJsZWQgKi8KKwl1ZGVsYXkoUExMX1NFVF9ERUxBWV9V Uyk7CisKKwlyZXQgPSBjb21waHlfbGFuZV9yZWdfcG9sbChsYW5lLCBDT01QSFlfUElQRV9MQU5F X1NUQVQxLCBUWERDTEtfUENMS19FTiwKKwkJCQkgICBDT01QSFlfUExMX1NMRUVQLCBDT01QSFlf UExMX1RJTUVPVVQpOworCWlmIChyZXQpCisJCWRldl9lcnIobGFuZS0+ZGV2LCAiRmFpbGVkIHRv IGxvY2sgUENJRSBQTExcbiIpOworCisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtdmVi dV9hMzcwMF9jb21waHlfZ2V0X2Z3X21vZGUoaW50IGxhbmUsCitzdGF0aWMgdm9pZAorbXZlYnVf YTM3MDBfY29tcGh5X3NhdGFfcG93ZXJfb2ZmKHN0cnVjdCBtdmVidV9hMzcwMF9jb21waHlfbGFu ZSAqbGFuZSkKK3sKKwkvKiBTZXQgcGh5IGlzb2xhdGlvbiBtb2RlICovCisJY29tcGh5X2xhbmVf cmVnX3NldChsYW5lLCBDT01QSFlfSVNPTEFUSU9OX0NUUkwsCisJCQkgICAgUEhZX0lTT0xBVEVf TU9ERSwgUEhZX0lTT0xBVEVfTU9ERSk7CisKKwkvKiBQb3dlciBvZmYgUExMLCBUeCwgUnggKi8K Kwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUsIENPTVBIWV9QT1dFUl9QTExfQ1RSTCwKKwkJCSAg ICAweDAsIFBVX1BMTF9CSVQgfCBQVV9SWF9CSVQgfCBQVV9UWF9CSVQpOworfQorCitzdGF0aWMg dm9pZAorbXZlYnVfYTM3MDBfY29tcGh5X2V0aGVybmV0X3Bvd2VyX29mZihzdHJ1Y3QgbXZlYnVf YTM3MDBfY29tcGh5X2xhbmUgKmxhbmUpCit7CisJdTMyIG1hc2ssIGRhdGE7CisKKwlkYXRhID0g UElOX1JFU0VUX0NPUkVfQklUIHwgUElOX1JFU0VUX0NPTVBIWV9CSVQgfCBQSU5fUFVfSVZSRUZf QklUIHwKKwkgICAgICAgUEhZX1JYX0lOSVRfQklUOworCW1hc2sgPSBkYXRhOworCWNvbXBoeV9w ZXJpcGhfcmVnX3NldChsYW5lLCBDT01QSFlfUEhZX0NGRzEsIGRhdGEsIG1hc2spOworfQorCitz dGF0aWMgdm9pZAorbXZlYnVfYTM3MDBfY29tcGh5X3BjaWVfcG93ZXJfb2ZmKHN0cnVjdCBtdmVi dV9hMzcwMF9jb21waHlfbGFuZSAqbGFuZSkKK3sKKwkvKiBQb3dlciBvZmYgUExMLCBUeCwgUngg Ki8KKwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUsIENPTVBIWV9QT1dFUl9QTExfQ1RSTCwKKwkJ CSAgICAweDAsIFBVX1BMTF9CSVQgfCBQVV9SWF9CSVQgfCBQVV9UWF9CSVQpOworfQorCitzdGF0 aWMgaW50IG12ZWJ1X2EzNzAwX2NvbXBoeV9yZXNldChzdHJ1Y3QgcGh5ICpwaHkpCit7CisJc3Ry dWN0IG12ZWJ1X2EzNzAwX2NvbXBoeV9sYW5lICpsYW5lID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7 CisJdTE2IG1hc2ssIGRhdGE7CisKKwlkZXZfZGJnKGxhbmUtPmRldiwgInJlc2V0dGluZyBsYW5l ICVkXG4iLCBsYW5lLT5pZCk7CisKKwkvKiBDT01QSFkgcmVzZXQgZm9yIGludGVybmFsIGxvZ2lj ICovCisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01QSFlfU0ZUX1JFU0VULAorCQkJICAg IFNGVF9SU1RfTk9fUkVHLCBTRlRfUlNUX05PX1JFRyk7CisKKwkvKiBDT01QSFkgcmVnaXN0ZXIg cmVzZXQgKGNsZWFyZWQgYXV0b21hdGljYWxseSkgKi8KKwljb21waHlfbGFuZV9yZWdfc2V0KGxh bmUsIENPTVBIWV9TRlRfUkVTRVQsIFNGVF9SU1QsIFNGVF9SU1QpOworCisJLyogUElQRSBzb2Z0 IGFuZCByZWdpc3RlciByZXNldCAqLworCWRhdGEgPSBQSVBFX1NPRlRfUkVTRVQgfCBQSVBFX1JF R19SRVNFVDsKKwltYXNrID0gZGF0YTsKKwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUsIENPTVBI WV9QSVBFX1JTVF9DTEtfQ1RSTCwgZGF0YSwgbWFzayk7CisKKwkvKiBSZWxlYXNlIFBJUEUgcmVn aXN0ZXIgcmVzZXQgKi8KKwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUsIENPTVBIWV9QSVBFX1JT VF9DTEtfQ1RSTCwKKwkJCSAgICAweDAsIFBJUEVfUkVHX1JFU0VUKTsKKworCS8qIFJlc2V0IFNC IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKG9ubHkgZm9yIGxhbmVzIDAgYW5kIDEpICovCisJaWYg KGxhbmUtPmlkID09IDAgfHwgbGFuZS0+aWQgPT0gMSkgeworCQl1MzIgbWFzaywgZGF0YTsKKwor CQlkYXRhID0gUElOX1JFU0VUX0NPUkVfQklUIHwgUElOX1JFU0VUX0NPTVBIWV9CSVQgfAorCQkg ICAgICAgUElOX1BVX1BMTF9CSVQgfCBQSU5fUFVfUlhfQklUIHwgUElOX1BVX1RYX0JJVDsKKwkJ bWFzayA9IGRhdGEgfCBQSU5fUFVfSVZSRUZfQklUIHwgUElOX1RYX0lETEVfQklUOworCQljb21w aHlfcGVyaXBoX3JlZ19zZXQobGFuZSwgQ09NUEhZX1BIWV9DRkcxLCBkYXRhLCBtYXNrKTsKKwl9 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgbXZlYnVfYTM3MDBfY29tcGh5X2NoZWNr X21vZGUoaW50IGxhbmUsCiAJCQkJCSAgZW51bSBwaHlfbW9kZSBtb2RlLAogCQkJCQkgIGludCBz dWJtb2RlKQogewpAQCAtMTIyLDcgKzExNDEsNyBAQCBzdGF0aWMgaW50IG12ZWJ1X2EzNzAwX2Nv bXBoeV9nZXRfZndfbW9kZShpbnQgbGFuZSwKIAogCS8qIFVudXNlZCBQSFkgbXV4IHZhbHVlIGlz IDB4MCAqLwogCWlmIChtb2RlID09IFBIWV9NT0RFX0lOVkFMSUQpCi0JCXJldHVybiAtRUlOVkFM OworCQlyZXR1cm4gZmFsc2U7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAJCWlmICht dmVidV9hMzcwMF9jb21waHlfbW9kZXNbaV0ubGFuZSA9PSBsYW5lICYmCkBAIC0xMzIsMjcgKzEx NTEsMzAgQEAgc3RhdGljIGludCBtdmVidV9hMzcwMF9jb21waHlfZ2V0X2Z3X21vZGUoaW50IGxh bmUsCiAJfQogCiAJaWYgKGkgPT0gbikKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBmYWxz ZTsKIAotCXJldHVybiBtdmVidV9hMzcwMF9jb21waHlfbW9kZXNbaV0uZndfbW9kZTsKKwlyZXR1 cm4gdHJ1ZTsKIH0KIAogc3RhdGljIGludCBtdmVidV9hMzcwMF9jb21waHlfc2V0X21vZGUoc3Ry dWN0IHBoeSAqcGh5LCBlbnVtIHBoeV9tb2RlIG1vZGUsCiAJCQkJICAgICAgIGludCBzdWJtb2Rl KQogewogCXN0cnVjdCBtdmVidV9hMzcwMF9jb21waHlfbGFuZSAqbGFuZSA9IHBoeV9nZXRfZHJ2 ZGF0YShwaHkpOwotCWludCBmd19tb2RlOwogCi0JaWYgKHN1Ym1vZGUgPT0gUEhZX0lOVEVSRkFD RV9NT0RFXzEwMDBCQVNFWCkKLQkJc3VibW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTsK LQotCWZ3X21vZGUgPSBtdmVidV9hMzcwMF9jb21waHlfZ2V0X2Z3X21vZGUobGFuZS0+aWQsIG1v ZGUsCi0JCQkJCQkgc3VibW9kZSk7Ci0JaWYgKGZ3X21vZGUgPCAwKSB7CisJaWYgKCFtdmVidV9h MzcwMF9jb21waHlfY2hlY2tfbW9kZShsYW5lLT5pZCwgbW9kZSwgc3VibW9kZSkpIHsKIAkJZGV2 X2VycihsYW5lLT5kZXYsICJpbnZhbGlkIENPTVBIWSBtb2RlXG4iKTsKLQkJcmV0dXJuIGZ3X21v ZGU7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCS8qIE1vZGUgY2Fubm90IGJlIGNoYW5nZWQg d2hpbGUgdGhlIFBIWSBpcyBwb3dlcmVkIG9uICovCisJaWYgKHBoeS0+cG93ZXJfY291bnQgJiYK KwkgICAgKGxhbmUtPm1vZGUgIT0gbW9kZSB8fCBsYW5lLT5zdWJtb2RlICE9IHN1Ym1vZGUpKQor CQlyZXR1cm4gLUVCVVNZOworCisJLyogSWYgY2hhbmdpbmcgbW9kZSwgZW5zdXJlIHJlc2V0IGlz IGNhbGxlZCAqLworCWlmIChsYW5lLT5tb2RlICE9IFBIWV9NT0RFX0lOVkFMSUQgJiYgbGFuZS0+ bW9kZSAhPSBtb2RlKQorCQlsYW5lLT5uZWVkc19yZXNldCA9IHRydWU7CisKIAkvKiBKdXN0IHJl bWVtYmVyIHRoZSBtb2RlLCAtPnBvd2VyX29uKCkgd2lsbCBkbyB0aGUgcmVhbCBzZXR1cCAqLwog CWxhbmUtPm1vZGUgPSBtb2RlOwogCWxhbmUtPnN1Ym1vZGUgPSBzdWJtb2RlOwpAQCAtMTYzLDc2 ICsxMTg1LDc3IEBAIHN0YXRpYyBpbnQgbXZlYnVfYTM3MDBfY29tcGh5X3NldF9tb2RlKHN0cnVj dCBwaHkgKnBoeSwgZW51bSBwaHlfbW9kZSBtb2RlLAogc3RhdGljIGludCBtdmVidV9hMzcwMF9j b21waHlfcG93ZXJfb24oc3RydWN0IHBoeSAqcGh5KQogewogCXN0cnVjdCBtdmVidV9hMzcwMF9j b21waHlfbGFuZSAqbGFuZSA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOwotCXUzMiBmd19wYXJhbTsK LQlpbnQgZndfbW9kZTsKLQlpbnQgZndfcG9ydDsKIAlpbnQgcmV0OwogCi0JZndfbW9kZSA9IG12 ZWJ1X2EzNzAwX2NvbXBoeV9nZXRfZndfbW9kZShsYW5lLT5pZCwKLQkJCQkJCSBsYW5lLT5tb2Rl LCBsYW5lLT5zdWJtb2RlKTsKLQlpZiAoZndfbW9kZSA8IDApIHsKKwlpZiAoIW12ZWJ1X2EzNzAw X2NvbXBoeV9jaGVja19tb2RlKGxhbmUtPmlkLCBsYW5lLT5tb2RlLAorCQkJCQkgICBsYW5lLT5z dWJtb2RlKSkgewogCQlkZXZfZXJyKGxhbmUtPmRldiwgImludmFsaWQgQ09NUEhZIG1vZGVcbiIp OwotCQlyZXR1cm4gZndfbW9kZTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGxhbmUt Pm5lZWRzX3Jlc2V0KSB7CisJCXJldCA9IG12ZWJ1X2EzNzAwX2NvbXBoeV9yZXNldChwaHkpOwor CQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlsYW5lLT5uZWVkc19yZXNldCA9IGZhbHNl OwogCX0KIAogCXN3aXRjaCAobGFuZS0+bW9kZSkgewogCWNhc2UgUEhZX01PREVfVVNCX0hPU1Rf U1M6CiAJCWRldl9kYmcobGFuZS0+ZGV2LCAic2V0IGxhbmUgJWQgdG8gVVNCMyBob3N0IG1vZGVc biIsIGxhbmUtPmlkKTsKLQkJZndfcGFyYW0gPSBDT01QSFlfRldfTU9ERShmd19tb2RlKTsKLQkJ YnJlYWs7CisJCXJldHVybiBtdmVidV9hMzcwMF9jb21waHlfdXNiM19wb3dlcl9vbihsYW5lKTsK IAljYXNlIFBIWV9NT0RFX1NBVEE6CiAJCWRldl9kYmcobGFuZS0+ZGV2LCAic2V0IGxhbmUgJWQg dG8gU0FUQSBtb2RlXG4iLCBsYW5lLT5pZCk7Ci0JCWZ3X3BhcmFtID0gQ09NUEhZX0ZXX01PREUo ZndfbW9kZSk7Ci0JCWJyZWFrOworCQlyZXR1cm4gbXZlYnVfYTM3MDBfY29tcGh5X3NhdGFfcG93 ZXJfb24obGFuZSk7CiAJY2FzZSBQSFlfTU9ERV9FVEhFUk5FVDoKLQkJZndfcG9ydCA9IChsYW5l LT5pZCA9PSAwKSA/IDEgOiAwOwotCQlzd2l0Y2ggKGxhbmUtPnN1Ym1vZGUpIHsKLQkJY2FzZSBQ SFlfSU5URVJGQUNFX01PREVfU0dNSUk6Ci0JCQlkZXZfZGJnKGxhbmUtPmRldiwgInNldCBsYW5l ICVkIHRvIFNHTUlJIG1vZGVcbiIsCi0JCQkJbGFuZS0+aWQpOwotCQkJZndfcGFyYW0gPSBDT01Q SFlfRldfTkVUKGZ3X21vZGUsIGZ3X3BvcnQsCi0JCQkJCQkgQ09NUEhZX0ZXX1NQRUVEXzFfMjVH KTsKLQkJCWJyZWFrOwotCQljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVg6Ci0JCQlk ZXZfZGJnKGxhbmUtPmRldiwgInNldCBsYW5lICVkIHRvIDI1MDBCQVNFWCBtb2RlXG4iLAotCQkJ CWxhbmUtPmlkKTsKLQkJCWZ3X3BhcmFtID0gQ09NUEhZX0ZXX05FVChmd19tb2RlLCBmd19wb3J0 LAotCQkJCQkJIENPTVBIWV9GV19TUEVFRF8zXzEyNUcpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6 Ci0JCQlkZXZfZXJyKGxhbmUtPmRldiwgInVuc3VwcG9ydGVkIFBIWSBzdWJtb2RlICglZClcbiIs Ci0JCQkJbGFuZS0+c3VibW9kZSk7Ci0JCQlyZXR1cm4gLUVOT1RTVVBQOwotCQl9Ci0JCWJyZWFr OworCQlkZXZfZGJnKGxhbmUtPmRldiwgInNldCBsYW5lICVkIHRvIEV0aGVybmV0IG1vZGVcbiIs IGxhbmUtPmlkKTsKKwkJcmV0dXJuIG12ZWJ1X2EzNzAwX2NvbXBoeV9ldGhlcm5ldF9wb3dlcl9v bihsYW5lKTsKIAljYXNlIFBIWV9NT0RFX1BDSUU6CiAJCWRldl9kYmcobGFuZS0+ZGV2LCAic2V0 IGxhbmUgJWQgdG8gUENJZSBtb2RlXG4iLCBsYW5lLT5pZCk7Ci0JCWZ3X3BhcmFtID0gQ09NUEhZ X0ZXX1BDSUUoZndfbW9kZSwgQ09NUEhZX0ZXX1NQRUVEXzVHLAotCQkJCQkgIHBoeS0+YXR0cnMu YnVzX3dpZHRoKTsKLQkJYnJlYWs7CisJCXJldHVybiBtdmVidV9hMzcwMF9jb21waHlfcGNpZV9w b3dlcl9vbihsYW5lKTsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKGxhbmUtPmRldiwgInVuc3VwcG9y dGVkIFBIWSBtb2RlICglZClcbiIsIGxhbmUtPm1vZGUpOwotCQlyZXR1cm4gLUVOT1RTVVBQOwor CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQotCi0JcmV0ID0gbXZlYnVfYTM3MDBfY29tcGh5X3Nt YyhDT01QSFlfU0lQX1BPV0VSX09OLCBsYW5lLT5pZCwgZndfcGFyYW0pOwotCWlmIChyZXQgPT0g LUVPUE5PVFNVUFApCi0JCWRldl9lcnIobGFuZS0+ZGV2LAotCQkJInVuc3VwcG9ydGVkIFNNQyBj YWxsLCB0cnkgdXBkYXRpbmcgeW91ciBmaXJtd2FyZVxuIik7Ci0KLQlyZXR1cm4gcmV0OwogfQog CiBzdGF0aWMgaW50IG12ZWJ1X2EzNzAwX2NvbXBoeV9wb3dlcl9vZmYoc3RydWN0IHBoeSAqcGh5 KQogewogCXN0cnVjdCBtdmVidV9hMzcwMF9jb21waHlfbGFuZSAqbGFuZSA9IHBoeV9nZXRfZHJ2 ZGF0YShwaHkpOwogCi0JcmV0dXJuIG12ZWJ1X2EzNzAwX2NvbXBoeV9zbWMoQ09NUEhZX1NJUF9Q T1dFUl9PRkYsIGxhbmUtPmlkLCAwKTsKKwlzd2l0Y2ggKGxhbmUtPm1vZGUpIHsKKwljYXNlIFBI WV9NT0RFX1VTQl9IT1NUX1NTOgorCQkvKgorCQkgKiBUaGUgVVNCMyBNQUMgc2V0cyB0aGUgVVNC MyBQSFkgdG8gbG93IHN0YXRlLCBzbyB3ZSBkbyBub3QKKwkJICogbmVlZCB0byBwb3dlciBvZmYg VVNCMyBQSFkgYWdhaW4uCisJCSAqLworCQlicmVhazsKKworCWNhc2UgUEhZX01PREVfU0FUQToK KwkJbXZlYnVfYTM3MDBfY29tcGh5X3NhdGFfcG93ZXJfb2ZmKGxhbmUpOworCQlicmVhazsKKwor CWNhc2UgUEhZX01PREVfRVRIRVJORVQ6CisJCW12ZWJ1X2EzNzAwX2NvbXBoeV9ldGhlcm5ldF9w b3dlcl9vZmYobGFuZSk7CisJCWJyZWFrOworCisJY2FzZSBQSFlfTU9ERV9QQ0lFOgorCQltdmVi dV9hMzcwMF9jb21waHlfcGNpZV9wb3dlcl9vZmYobGFuZSk7CisJCWJyZWFrOworCisJZGVmYXVs dDoKKwkJZGV2X2VycihsYW5lLT5kZXYsICJpbnZhbGlkIENPTVBIWSBtb2RlXG4iKTsKKwkJcmV0 dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg cGh5X29wcyBtdmVidV9hMzcwMF9jb21waHlfb3BzID0gewogCS5wb3dlcl9vbgk9IG12ZWJ1X2Ez NzAwX2NvbXBoeV9wb3dlcl9vbiwKIAkucG93ZXJfb2ZmCT0gbXZlYnVfYTM3MDBfY29tcGh5X3Bv d2VyX29mZiwKKwkucmVzZXQJCT0gbXZlYnVfYTM3MDBfY29tcGh5X3Jlc2V0LAogCS5zZXRfbW9k ZQk9IG12ZWJ1X2EzNzAwX2NvbXBoeV9zZXRfbW9kZSwKIAkub3duZXIJCT0gVEhJU19NT0RVTEUs CiB9OwpAQCAtMjU2LDEzICsxMjc5LDc1IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5ICptdmVidV9hMzcw MF9jb21waHlfeGxhdGUoc3RydWN0IGRldmljZSAqZGV2LAogCQlyZXR1cm4gRVJSX1BUUigtRUlO VkFMKTsKIAl9CiAKKwlsYW5lLT5pbnZlcnRfdHggPSBhcmdzLT5hcmdzWzFdICYgQklUKDApOwor CWxhbmUtPmludmVydF9yeCA9IGFyZ3MtPmFyZ3NbMV0gJiBCSVQoMSk7CisKIAlyZXR1cm4gcGh5 OwogfQogCiBzdGF0aWMgaW50IG12ZWJ1X2EzNzAwX2NvbXBoeV9wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQogeworCXN0cnVjdCBtdmVidV9hMzcwMF9jb21waHlfcHJpdiAqcHJp djsKIAlzdHJ1Y3QgcGh5X3Byb3ZpZGVyICpwcm92aWRlcjsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUg KmNoaWxkOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBjbGsgKmNsazsKKwlpbnQg cmV0OworCisJcHJpdiA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnByaXYpLCBH RlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2Nr X2luaXQoJnByaXYtPmxvY2spOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFt ZShwZGV2LCBJT1JFU09VUkNFX01FTSwgImNvbXBoeSIpOworCXByaXYtPmNvbXBoeV9yZWdzID0g ZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihwcml2 LT5jb21waHlfcmVncykpCisJCXJldHVybiBQVFJfRVJSKHByaXYtPmNvbXBoeV9yZWdzKTsKKwor CXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0s CisJCQkJCSAgICJsYW5lMV9wY2llX2diZSIpOworCXByaXYtPmxhbmUxX3BoeV9yZWdzID0gZGV2 bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihwcml2LT5s YW5lMV9waHlfcmVncykpCisJCXJldHVybiBQVFJfRVJSKHByaXYtPmxhbmUxX3BoeV9yZWdzKTsK KworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9N RU0sCisJCQkJCSAgICJsYW5lMF91c2IzX2diZSIpOworCXByaXYtPmxhbmUwX3BoeV9yZWdzID0g ZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihwcml2 LT5sYW5lMF9waHlfcmVncykpCisJCXJldHVybiBQVFJfRVJSKHByaXYtPmxhbmUwX3BoeV9yZWdz KTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJD RV9NRU0sCisJCQkJCSAgICJsYW5lMl9zYXRhX3VzYjMiKTsKKwlwcml2LT5sYW5lMl9waHlfaW5k aXJlY3QgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNf RVJSKHByaXYtPmxhbmUyX3BoeV9pbmRpcmVjdCkpCisJCXJldHVybiBQVFJfRVJSKHByaXYtPmxh bmUyX3BoeV9pbmRpcmVjdCk7CisKKwkvKgorCSAqIERyaXZlciBuZWVkcyB0byBrbm93IGlmIHJl ZmVyZW5jZSB4dGFsIGNsb2NrIGlzIDQwTUh6IG9yIDI1TUh6LgorCSAqIE9sZCBEVCBiaW5kaW5n cyBkbyBub3QgaGF2ZSB4dGFsIGNsayBwcmVzZW50LiBTbyBkbyBub3QgZmFpbCBoZXJlCisJICog YW5kIGV4cGVjdHMgdGhhdCBkZWZhdWx0IDI1TUh6IHJlZmVyZW5jZSBjbG9jayBpcyB1c2VkLgor CSAqLworCWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInh0YWwiKTsKKwlpZiAoSVNfRVJSKGNs aykpIHsKKwkJaWYgKFBUUl9FUlIoY2xrKSA9PSAtRVBST0JFX0RFRkVSKQorCQkJcmV0dXJuIC1F UFJPQkVfREVGRVI7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJtaXNzaW5nICd4dGFsJyBjbGsg KCVsZClcbiIsCisJCQkgUFRSX0VSUihjbGspKTsKKwl9IGVsc2UgeworCQlyZXQgPSBjbGtfcHJl cGFyZV9lbmFibGUoY2xrKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwg ImVuYWJsaW5nIHh0YWwgY2xrIGZhaWxlZCAoJWQpXG4iLAorCQkJCSByZXQpOworCQl9IGVsc2Ug eworCQkJaWYgKGNsa19nZXRfcmF0ZShjbGspID09IDQwMDAwMDAwKQorCQkJCXByaXYtPnh0YWxf aXNfNDBtID0gdHJ1ZTsKKwkJCWNsa19kaXNhYmxlX3VucHJlcGFyZShjbGspOworCQl9CisJCWNs a19wdXQoY2xrKTsKKwl9CisKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgcHJpdik7CiAK IAlmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZShwZGV2LT5kZXYub2Zfbm9kZSwgY2hp bGQpIHsKIAkJc3RydWN0IG12ZWJ1X2EzNzAwX2NvbXBoeV9sYW5lICpsYW5lOwpAQCAtMjc3LDcg KzEzNjIsNyBAQCBzdGF0aWMgaW50IG12ZWJ1X2EzNzAwX2NvbXBoeV9wcm9iZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAobGFuZV9pZCA+ PSBNVkVCVV9BMzcwMF9DT01QSFlfTEFORVMpIHsKKwkJaWYgKGxhbmVfaWQgPj0gMykgewogCQkJ ZGV2X2VycigmcGRldi0+ZGV2LCAiaW52YWxpZCAncmVnJyBwcm9wZXJ0eVxuIik7CiAJCQljb250 aW51ZTsKIAkJfQpAQCAtMjk1LDE1ICsxMzgwLDI2IEBAIHN0YXRpYyBpbnQgbXZlYnVfYTM3MDBf Y29tcGh5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCQlyZXR1cm4gUFRS X0VSUihwaHkpOwogCQl9CiAKKwkJbGFuZS0+cHJpdiA9IHByaXY7CiAJCWxhbmUtPmRldiA9ICZw ZGV2LT5kZXY7CiAJCWxhbmUtPm1vZGUgPSBQSFlfTU9ERV9JTlZBTElEOwogCQlsYW5lLT5zdWJt b2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX05BOwogCQlsYW5lLT5pZCA9IGxhbmVfaWQ7CisJCWxh bmUtPmludmVydF90eCA9IGZhbHNlOworCQlsYW5lLT5pbnZlcnRfcnggPSBmYWxzZTsKIAkJcGh5 X3NldF9kcnZkYXRhKHBoeSwgbGFuZSk7CisKKwkJLyoKKwkJICogVG8gYXZvaWQgcmVseWluZyBv biB0aGUgYm9vdGxvYWRlci9maXJtd2FyZSBjb25maWd1cmF0aW9uLAorCQkgKiBwb3dlciBvZmYg YWxsIGNvbXBoeXMuCisJCSAqLworCQltdmVidV9hMzcwMF9jb21waHlfcmVzZXQocGh5KTsKKwkJ bGFuZS0+bmVlZHNfcmVzZXQgPSBmYWxzZTsKIAl9CiAKIAlwcm92aWRlciA9IGRldm1fb2ZfcGh5 X3Byb3ZpZGVyX3JlZ2lzdGVyKCZwZGV2LT5kZXYsCiAJCQkJCQkgbXZlYnVfYTM3MDBfY29tcGh5 X3hsYXRlKTsKKwogCXJldHVybiBQVFJfRVJSX09SX1pFUk8ocHJvdmlkZXIpOwogfQogCkBAIC0z MjMsNSArMTQxOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG12ZWJ1X2EzNzAw X2NvbXBoeV9kcml2ZXIgPSB7CiBtb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG12ZWJ1X2EzNzAwX2Nv bXBoeV9kcml2ZXIpOwogCiBNT0RVTEVfQVVUSE9SKCJNaXF1w6hsIFJheW5hbCA8bWlxdWVsLnJh eW5hbEBib290bGluLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIlBhbGkgUm9ow6FyIDxwYWxpQGtl cm5lbC5vcmc+Iik7CitNT0RVTEVfQVVUSE9SKCJNYXJlayBCZWjDum4gPGthYmVsQGtlcm5lbC5v cmc+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkNvbW1vbiBQSFkgZHJpdmVyIGZvciBBMzcwMCIp OwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwotLSAKMi4zNC4xCgoKLS0gCmxpbnV4LXBoeSBt YWlsaW5nIGxpc3QKbGludXgtcGh5QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cHM6Ly9saXN0cy5p bmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcGh5Cg==