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 2C2C9C55162 for ; Sun, 2 Aug 2026 20:34:45 +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:Cc:To:In-Reply-To:References:Message-Id :MIME-Version:Subject:Date:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=m6ZJ7gZw7BJcritVvutPmEXxZHFyoP0BALaIVfWfP4Y=; b=3WeeVMJ2cixaYz /TGJHmr9NgIPnOZaZ70uDuEsz7lYrb6uXSOFCK6FlwDf9y4CzNQ3zx8fr8rEKts9rGgHkUvJGppZH hUck13GdLL3ILplwdJlO6LIRp60hIbs9IBz7IAGuc21Zifa9FPDG84Jit2R1TcybywoxkAJRJAxQx VYEKIOoYQvzrW+I+vCw1EujTJ05E1mKgdL4m5uIKqirqSfANNApqCSVmUztj/KBUOqGW0ZiyAJfug i0obtMcw0TKU0Jcq6BwUz/mtA/BHZRoJ48LxVo1w3SWnbxnxFj/owP3NuQdJe1Ux6xWij3n17F+FW nUit4+J0Vxiz3Ll69soQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wqctQ-0000000G1mp-3I7v; Sun, 02 Aug 2026 20:34:44 +0000 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wqctN-0000000G1jN-3MHH for linux-phy@lists.infradead.org; Sun, 02 Aug 2026 20:34:43 +0000 Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-4953de5be0aso8806795e9.0 for ; Sun, 02 Aug 2026 13:34:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785702880; x=1786307680; darn=lists.infradead.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=cq0l+WIUQ3dHFQYylacYFfNzUv1KLEoLLifLFBt5J8Y=; b=V7VtTy5RHrRbcykKp3ce8/pL1FE6n7NHjhpH8Hok+ln1oFcZqhc2ioYPcWGQ27/qcR 9g6rulklHpVkJGYG3wgtBmExsxuYSxtHRzFqRsjmDGwAo0EPJ+zhXUollxzNGBu2IPd9 LXrj32KWpkN3DHvingWOjLagONi2JC0zb/Bu2L1PdsJmIeKvU9Ng/BWRGxsLx5Bq+Rh3 b40UgRN96b8FcBog/Vw5NvgbMcX6GUeCijBeyd3oQds/vsON3Ba5bnNXZAhyZbq04kMT VV2yUYthDeuFB4oOfba9NVHPK+shu/W/ZDIbcaHyXLNUum+iSU/ZGGaGlH/6ENaMrjnX DeIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785702880; x=1786307680; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=cq0l+WIUQ3dHFQYylacYFfNzUv1KLEoLLifLFBt5J8Y=; b=fQB9/TEMPsSfFiO1vlsEzeSuScyhyytMv0F/I0ZUiRNY/Ml/uIa/ZNVrN61ojz4VrS LYzLwU3Vf+2qLDrgh59I/ELwlQFouv3fSsCCr6qnO8/+D0GWokI7aPBT3oAQlDgZo43o PpxR5tgeP4Zp/atG090vOoVRAQF5EWuovvHWynuBOf3PWjUwWwv657x/DuUQA3nXHycS RVhOqpd0s7mxDQdarTwmn4mA12P7vlKH7p1K/ESvKvmVOqJyWDJgPiI+eKdu5d2OQT8Q DlEqDteOUcqEI/w3BgyxrATnwXg/wqKxE3n6uaP3cAJqkuSXCf5yfTykWDVrrYYoAWie 7Y+Q== X-Forwarded-Encrypted: i=1; AHgh+RpnD7VCejO9woinoAgPG9U7L5gn7TGi5IIqvVOvZpJsgKqJtiXaKvsnJuZJ+4mjIqyWD1XzT+xaSIw=@lists.infradead.org X-Gm-Message-State: AOJu0YwICq/fhETkwtFZlyGEKMWPle8lx6e3rlfrQJBtufs24an5XT8f 4DVLI3XduYoHsgwjsdWxwC0KptMd5NDCVEU+tR2c4Cora75cmJC7+VcT X-Gm-Gg: AR+sD13ol7E9V+oeS7bURa+4tu3TPi/XftBe/asupxDFdrZjS+iqp867AUMlLajY/FE FjOUF/oigfVVqFIYz+BTN148sI7nelQHlE8bl++tQ8rtopEcUwku8DXbB1xrFdX9qPBShQDfWac YrScj4lTRT9EeBqKDYq7Je0/ldZnVyhmPifYeCgulAziNNgLeL+gei7znytwvDDlw8HvOzT1JEs zOkBR05GN9B0oXFzNWOu7zplsp6LX99wHegJ0ndtP2qYzpHsqa4dLHtWWJ2KnQ+FHULdM1+B248 cu6GFCW+YjZDDNZoHD7RG1YeSQ/CydD/F0JD1Iufk1qYNu2ww5RFCJfPzswKEemU/1CmT6hgKmR /m+2oaXnwE1F12GcLL70t22Xiw62wwafqMuvJNtLWlzYbQdmJRyc2ZzrUSkA1y7CgjSFL26aSHH E9uMKs6jQJI+OUwWpOYKr1kedDbjcPlmw4LmZhen9Pk02CjF5I4+ao+nM7a3hvGb70e/pqzgKd X-Received: by 2002:a05:600c:8b13:b0:498:8e6:d464 with SMTP id 5b1f17b1804b1-4980c65cd2fmr166733515e9.14.1785702879566; Sun, 02 Aug 2026 13:34:39 -0700 (PDT) Received: from [192.168.0.2] ([197.250.226.155]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49807bb45ebsm118499905e9.4.2026.08.02.13.34.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 02 Aug 2026 13:34:38 -0700 (PDT) From: =?utf-8?q?Stefan_D=C3=B6singer?= Date: Sun, 02 Aug 2026 23:33:39 +0300 Subject: [PATCH v9 07/12] clk: zte: Add zx PLL support infrastructure MIME-Version: 1.0 Message-Id: <20260802-zx29clk-v9-7-d05530d85d28@gmail.com> References: <20260802-zx29clk-v9-0-d05530d85d28@gmail.com> In-Reply-To: <20260802-zx29clk-v9-0-d05530d85d28@gmail.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Philipp Zabel , Brian Masney , Vinod Koul , Neil Armstrong , Russell King , Lee Jones Cc: linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-phy@lists.infradead.org, mfd@lists.linux.dev, =?utf-8?q?Stefan_D=C3=B6singer?= X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=23186; i=stefandoesinger@gmail.com; h=from:subject:message-id; bh=L0mRFzceHyyVEZjtgEBEN/2/jL1ecWAiS0Nz1YsJE+0=; b=owEBiQJ2/ZANAwAIAT0TvMhUTxoiAcsmYgBqb6mydClZTSFDkFcWtYpDTlA9rVKTqTu4kcA6O DR+VCUsYaqJAk8EAAEIADkWIQRDFvS2qgVbJ5UyXWw9E7zIVE8aIgUCam+pshsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDIACgkQPRO8yFRPGiI6vg//aBwXMLTH1q59DlZ6uOoDh70s+9tUPYF tNF8bYCHuy+JAuanh4c08doCptw9jcR585JtuWZOQNy/WLWvhSEYsa0iXcnYVUbKyC0UQfMSAfq eothjgFqwItP4IEVZpLDbNy6cDOImicSSQgOfIxTI2V9AALqDX3Tig0RGHTFLP0+f1u7lN1aBwK nOX20klUarsZ0ieFx+7M15lvoOfdUbA6ODqesMDeC6SNxxb02XBSzxPxoibywWQ3izIh+qUE3bL D2ZnhUA2s1GQSw45IxJg9Id+6BqsVX/N1nmZyShPtPe5WX7oUNMnby43C1rpS5kQCLgbsGj/qWF 7jiac9EkdANtVp1Og29FmRtosRpbufOSXcsuTLkLI+MCQzSds5j/nEVvWg/qvYyHeoWAoUa+TYG 2t+906mVdeCVJlOt22XgiQLVfdDy+rkAZe+IDw4VI8XUmQMMp6UmeLChHmkj3RzsB5CiUpawtqG S2yy4mSvhMwgVGWUwCFX5sqMqRiy9OBTHX+4fpEw5VDrcKZIAFo9YOJt43LkNBpOdr8kM2o8xlL h3dG9nFfQ3DPLVAj5YYepnbDcDYNsqx2utj75xye96YXunPvVOLhVtX7qH7Mx4EViz86d3IMgDx RhhGO6anM0nV03O9QZsPaP3PG8Jm/tsiJ2C66bGQq/svUb+9bd2Q= X-Developer-Key: i=stefandoesinger@gmail.com; a=openpgp; fpr=4F9C2C8728019633893EBBB98CB81F9A72BBA155 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260802_133442_015695_334424C0 X-CRM114-Status: GOOD ( 38.82 ) 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 SSBhbSBndWVzc2luZyBob3cgbXVjaCBvZiB0aGlzIGlzIHJldXNhYmxlIGFtb25nIG90aGVyIHp4 IGNoaXBzIG9yIGV2ZW4KZGlmZmVyZW50bHkgbmFtZWQgWlRFIHBsYXRmb3JtcyAoaWYgdGhlcmUg YXJlIGFueSkuIEZyb20gcmVhZGluZyB0aGUgb2xkCnp4Mjk2NyBjb2RlLCBJIHRoaW5rIHRoZSBQ TEwgY29kZSB3b3VsZCBiZSByZXVzYWJsZSB0aGVyZSwgbWF5YmUgd2l0aApwbGF0Zm9ybS1zcGVj aWZpYyBiaXRtYXNrcyBidXQgb3RoZXJ3aXNlIHRoZSBzYW1lIGxvZ2ljLgoKU2lnbmVkLW9mZi1i eTogU3RlZmFuIETDtnNpbmdlciA8c3RlZmFuZG9lc2luZ2VyQGdtYWlsLmNvbT4KCi0tLQoKVmVy c2lvbiA5OgoqKSBUYWtlIHJlcS0+bWluX3JhdGUgYW5kIHJlcS0+bWF4X3JhdGUgaW50byBhY2Nv dW50IHdoZW4gbG9va2luZyBmb3IKcG9zc2libGUgUExMIGNvbmZpZ3VyYXRpb25zIChzYXNoaWtv KS4gSW4gcHJhY3RpY2UgdGhlIGNvZGUgd2lsbCBzdGlsbApvbmx5IGV2ZXIgZW5jb3VudGVyIGEg Zml4ZWQgcmVxdWVzdCB0byBzZXQgZHBsbCB0byA0OTEuNTIgTUh6LgoKKikgVGhlIHNhbWUgY29k ZSBzdHlsZSBjaGFuZ2VzIEJyaWFuIHJlcXVlc3RlZCBvbiB0aGUgb3RoZXIgY2xrIHBhdGNoZXMu CgpWZXJzaW9uIDg6CiopIERvY3VtZW50IHRoZSBiZWhhdmlvciBvZiB1bmxvY2tlZCBQTExzIGJl dHRlcjogVGhleSBkb24ndCBwYXNzCnRocm91Z2ggdGhlaXIgcmVmZXJlbmNlL3BhcmVudCwgYnV0 IHBhc3MgdGhyb3VnaCB0aGUgZml4ZWQgY2xvY2stMjZtCm9zY2lsbGF0b3IsIGV2ZW4gaWYgdGhl aXIgcmVmZXJlbmNlIGNsb2NrIGlzIHNvbWV0aGluZyBlbHNlLgoqKSBkcGxsIGhhcyB3b3JraW5n IGZyYWN0aW9uYWxzLiBBZGQgdGhpcyBpbiB0aGUgY29tbWVudCwgYnV0IHRoZXJlIGlzCm5vIGFj dHVhbCBjb2RlIHN1cHBvcnQgZm9yIGl0IC0gdGhlIExURSBoYXJkd2FyZSBkb2Vzbid0IG5lZWQg aXQuCgpBcyBmb3IgU2FzaGlrbydzIGNvbW1lbnRzIG9uIHRoZSAuc2V0X3JhdGUgaW1wbGVtZW50 YXRpb246IEluIHByYWN0aWNlCi5zZXRfcmF0ZSB3aWxsIG9ubHkgZXZlciBzZXQgb25lIHJhdGUs IDQ5MS41MiBNSHogZm9yIGRwbGwuIEFsbCBvdGhlcgpQTExzIGFyZSBib290bG9hZGVyIGNvbmZp Z3VyZWQuIERwbGwgY291bGQgYmUgaGFuZGxlZCBieSB3cml0aW5nIGEgbWFnaWMKY29uc3RhbnQg aW50byBpdHMgY29uZmlnLgoKSSB3YW50IHRvIGhhdmUgdGhlIHJhdGUgZmluZGluZyBjb2RlIGFz IGRvY3VtZW50YXRpb24sIGFuZCBtYXliZSB0aGVyZQppcyBtb3JlIGVsYWJvcmF0ZSBmdXR1cmUg dXNlIGZvciBpdCAoZS5nLiBtb3JlIGZsZXhpYmxlIHVuZGVyY2xvY2tpbmcpLApidXQgYXR0ZW1w dHMgdG8gaGFuZGxlIGV2ZW50dWFsaXRpZXMgbGlrZSByYXRlIHNlYXJjaGVzIG9yIG1pc2NvbmZp Z3VyZWQKYm9vdGxvYWRlciB2YWx1ZXMgd291bGQgYmUgZGVhZCBjb2RlLgoKVmVyc2lvbiA3Ogoq KSBBbHdheXMga2VlcCB1bmtub3ducGxsIGVuYWJsZWQgd2hlbiBwcmVwYXJlZCBzbyBkcGxsIGNh biBhY3F1aXJlIGEKbG9jayBpbiBpdHMgcHJlcGFyZSgpIGZ1bmN0aW9uLgoqKSBDbGVhbiB1cCBl cnJvciByZXBvcnRpbmcgYSBiaXQgKFNhc2hpa28pCgpWZXJzaW9uIDY6CiopIFVzZSBhYnNfZGlm ZiB0byBjb21wYXJlIHRhcmdldCBhbmQgY2FuZGlkYXRlIFBMTCByYXRlIChTYXNoaWtvKS4KKikg VXNlIHJlcS0+YmVzdF9wYXJlbnRfcmF0ZSBpbiB6eDI5X3BsbF9kZXRlcm1pbmVfcmF0ZS4gQWRk IGEgVE9ETwpjb21tZW50IGFib3V0IHRoZSBwYXJlbnQgcmF0ZSBmbGV4aWJpbGl0eS4KClZlcnNp b24gNTogRml4IHNvbWUgaXNzdWVzIHBvaW50ZWQgb3V0IGJ5IFNhc2hpa286IE5VTEwgZGV2LAp6 eDI5X3BsbF9yZWNhbGNfcmF0ZSBlcnJvciBoYW5kbGluZywgZGlzYWJsZSBQTEwgYWdhaW4gb24g ZW5hYmxlIGVycm9yLgotLS0KIGRyaXZlcnMvY2xrL3p0ZS9wbGwtenguYyB8IDU2OCArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogMSBmaWxlIGNoYW5nZWQs IDU2NSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Y2xrL3p0ZS9wbGwtenguYyBiL2RyaXZlcnMvY2xrL3p0ZS9wbGwtenguYwppbmRleCBmYzc2YzY1 MjRhMTYuLmU2MWI0NjJlYzBiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvenRlL3BsbC16eC5j CisrKyBiL2RyaXZlcnMvY2xrL3p0ZS9wbGwtenguYwpAQCAtNCwxNSArNCw1NzcgQEAKICAqLwog CiAjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+ CisjaW5jbHVkZSA8bGludXgvY29udGFpbmVyX29mLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNl Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNp bmNsdWRlIDxsaW51eC9tYXRoLmg+CisjaW5jbHVkZSA8bGludXgvcmF0aW9uYWwuaD4KICNpbmNs dWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUg PGxpbnV4L3VuaXRzLmg+CiAKICNpbmNsdWRlICJjbGstenguaCIKIAorLyoKKyAqIFRoaXMgY29k ZSBoYXMgb25seSBiZWVuIHRlc3RlZCB3aXRoIHp4Mjk3NTIwdjMgUExMcywgYnV0IGZyb20gcmVh ZGluZyB0aGUgengyOTY3MTggY2xvY2sgY29kZSBpdAorICogbG9va3MgbGlrZSBQTEwgcmVnaXN0 ZXJzIGFyZSBzaW1pbGFyLiBaVEUncyBzb3VyY2VzIGV4cGxhaW4gdGhlIFBMTCByZWdpc3RlciBj b250ZW50cyBvbmx5IGluIGEKKyAqIC5jbW0gZmlsZSAoQSBMYXV0ZXJiYWNoIFRSQUNFMzIgc2Ny aXB0KSBhbmQgc29tZSB1bnVzZWQgaGVhZGVycyBpbiB0aGVpciBVLUJvb3QgY29kZSBkdW1wLCB3 aGljaAorICogbWF5IG5vdCBiZSBhY2N1cmF0ZS4gV2hlbiBjYWxjdWxhdGluZyB0aGUgZnJlcXVl bmNpZXMgZnJvbSB0aGUgZGVmYXVsdCBQTEwgY29uZmlndXJhdGlvbiB0aGUKKyAqIHJlc3VsdHMg bWF0Y2ggdGhlIGZpeGVkIHJhdGUgY2xvY2tzIGZyb20gdGhlaXIgY2xvY2sgZHJpdmVyLgorICoK KyAqIFRoZSAyNiBNSHogYW5kIDMyIGtIeiBjbG9ja3MgY2FuIGJlIGVhc2lseSBvYnNlcnZlZCB3 aXRoIHRoZSB0aW1lcnMuIFRoZSAxMDQgTUh6IG91dHB1dCBjYW4gYmUKKyAqIG9ic2VydmVkIHRo cm91Z2ggdGhlIFVBUlQuIE9uZSAxMjIuODggTUh6IGNsb2NrIGNhbiBiZSBvYnNlcnZlZCB0aHJv dWdoIHRoZSBURE0gZGV2aWNlLiBBbGwKKyAqIG90aGVycyBjYW4gb25seSBiZSBpbmRpcmVjdGx5 IGluZmVycmVkLCBlLmcuIGJ5IGNvbXBhcmluZyBDUFUgc3BlZWQgb3IgU0RJTyB0cmFuc2ZlciBy YXRlIGJldHdlZW4KKyAqIHRoZSBmaXhlZCAyNiBNSHogb3NjaWxsYXRvciBhbmQgdGhlIHByb3Zp ZGVkIFBMTCBmcmVxdWVuY3kuCisgKgorICogVGhlIGZvcm11bGEgdG8gY2FsY3VsYXRlIHRoZSBj bG9jayBpcyAoKHJlZiAvIHJlZmRpdikgKiBmYmRpdikgLyBwb3N0ZGl2MSAvIHBvc3RkaXYyLiBU aGUgbWFza3MKKyAqIGFyZSBnaXZlbiBiZWxvdy4gVGhlcmUgYXJlIGEgZmV3IGNvbnRyb2wgZmxh Z3M6CisgKgorICogQml0IDMxOiBEaXNhYmxlcyB0aGUgUExMLCBidXQgcGFzc2VzIGNsb2NrLTI2 bSB0aHJvdWdoIHVubW9kaWZpZWQuIFdoZXRoZXIgUE9TVERJVl9PVVRfRElTQUJMRQorICogICAg ICAgICBzdGlsbCBtYXR0ZXJzIGlzIGRpZmZlcmVudCBiZXR3ZWVuIFBMTHMuCisgKiBCaXQgMzA6 IFJldHVybnMgaWYgdGhlIFBMTCBpcyBsb2NrZWQKKyAqIEJpdCAyOTogTm90IG5hbWVkIGluIFpU RSdzIGNvZGUsIGJ1dCBjYW4gYmUgc2V0LiBUaGVyZSBpcyBubyBvYnZpb3VzIGltcGFjdC4gTG9j ayB0aW1lcyBhcmUKKyAqICAgICAgICAgdW5jaGFuZ2VkLCBzbyBpdCBkb2Vzbid0IGluZmx1ZW5j ZSBvciBieXBhc3MgbG9jayBkZXRlY3Rpb24uIEl0IGRvZXNuJ3QgcmFpc2UgYW55IElSUXMgb3IK KyAqICAgICAgICAgaW5mbHVlbmNlIEdQSU9zLgorICogQml0IDI3OiBHaXZlbiBpdHMgbmFtZSBp dCBsaWtlbHkgZGlzYWJsZXMgdGhlIERlbHRhLVNpZ21hIE1vZHVsYXRvciwgaWYgb25lIGV4aXN0 cyBhdCBhbGwuIFRoZQorICogICAgICAgICBib290IFJPTSBzZXRzIGl0IG9uIGV2ZXJ5IFBMTC4g VW5zZXR0aW5nIGl0IG1hcmdpbmFsbHkgZGVjcmVhc2VzIHRoZSB0aW1lIGl0IHRha2VzIHRvCisg KiAgICAgICAgIGxvY2sgdG8gdGhlIHJlZmVyZW5jZSBjbG9jayAoZnJvbSB+NDAwIHVzIHRvIH4z MDAgdXMpLgorICogQml0IDI0OiBCeXBhc3NlcyB0aGUgVkNPLCBidXQgc3RpbGwgYXBwbGllcyBy ZWZkaXYgYW5kIHBvc3RkaXYuIERvZXNuJ3QgbWF0dGVyIGlmIFBMTF9ESVNBQkxFPTEuCisgKgor ICogTkI6IFNvbWUgUExMcyBoYXZlIGFuIGF1dG9tYXRpYyBieXBhc3MgbG9naWMgdGhhdCBmb3J3 YXJkcyBjbG9jay0yNm0gKFJFR0FSRExFU1Mgb2YgcmVmZXJlbmNlKQorICogd2hlbiB0aGV5IGRv bid0IGhhdmUgYSBsb2NrLCByZWdhcmRsZXNzIG9mIHJlYXNvbi4gVGhpcyBjYW4gYmUgdHJpZ2dl cmVkIGJ5IGRpc2FibGluZyB0aGUgUExMLAorICogc2V0dGluZyBhbiBvdXQtb2Ytc3BlYyBWQ08g ZnJlcXVlbmN5IG9yIGRpc2FibGluZyB0aGUgcGFyZW50LiBUaGlzIHNob3VsZG4ndCBtYXR0ZXIg aW4gcmVndWxhcgorICogb3BlcmF0aW9uLCBidXQgY2F1c2VkIG1lIHNvbWUgY29uZnVzaW9uIHdo ZW4gcmV2ZXJzZSBlbmdpbmVlcmluZyB0aGUgY2xvY2sgdHJlZS4gRS5nLiBjbG9jay0yNm0tPgor ICogdW5rbm93bnBsbChkaXNhYmxlZCkgLT4gZHBsbChlbmFibGVkKSBjb3VudGVyaW50dWl0aXZl bHkgcmVzdWx0cyBpbiBhIDI2IE1IeiBvdXRwdXQgY2xvY2suCisgKi8KKworI2RlZmluZSBaWDI5 X1BMTF9ESVNBQkxFCQkJQklUKDMxKQorI2RlZmluZSBaWDI5X1BMTF9MT0NLRUQJCQkJQklUKDMw KQorI2RlZmluZSBaWDI5X1BMTF9MT0NLX0ZJTFRFUgkJCUJJVCgyOSkKKyNkZWZpbmUgWlgyOV9Q TExfRFNNX0RJU0FCTEUJCQlCSVQoMjcpCisjZGVmaW5lIFpYMjlfUExMX1BBUkVOVF9NQVNLCQkJ R0VOTUFTSygyNiwgMjUpCisjZGVmaW5lIFpYMjlfUExMX1BBUkVOVF9TSElGVAkJCTI1CisjZGVm aW5lIFpYMjlfUExMX0JZUEFTUwkJCQlCSVQoMjQpCisjZGVmaW5lIFpYMjlfUExMX1JFRkRJVl9N QVNLCQkJR0VOTUFTSygyMywgMTgpCisjZGVmaW5lIFpYMjlfUExMX1JFRkRJVl9TSElGVAkJCTE4 CisjZGVmaW5lIFpYMjlfUExMX0ZCRElWX01BU0sJCQlHRU5NQVNLKDE3LCA2KQorI2RlZmluZSBa WDI5X1BMTF9GQkRJVl9TSElGVAkJCTYKKyNkZWZpbmUgWlgyOV9QTExfUE9TVERJVjFfTUFTSwkJ CUdFTk1BU0soNSwgMykKKyNkZWZpbmUgWlgyOV9QTExfUE9TVERJVjFfU0hJRlQJCQkzCisjZGVm aW5lIFpYMjlfUExMX1BPU1RESVYyX01BU0sJCQlHRU5NQVNLKDIsIDApCisjZGVmaW5lIFpYMjlf UExMX1BPU1RESVYyX1NISUZUCQkJMAorCisvKgorICogVGhlIHNlY29uZCByZWdpc3RlciBoYXMg YSAyNCBiaXQgZnJhY3Rpb25hbCB2YWx1ZSwgd2hpY2ggb25seSBtYXR0ZXJzIHdoZW4gWlgyOV9Q TExfRFNNX0RJU0FCTEUKKyAqIGlzIG5vdCBzZXQsIGFuZCBvbmx5IHNlZW1zIHRvIG1hdHRlciBm b3IgZHBsbC4gWlRFJ3MgZmlybXdhcmUgZG9lcyBub3QgbWFrZSB1c2Ugb2YgdGhlIGZyYWN0aW9u YWwKKyAqIGFuZCBpdCBpcyB1bmltcGxlbWVudGVkIGluIHRoaXMgZHJpdmVyLiBFeHBlcmltZW50 YWwgdGVzdGluZyBjb25maXJtcyB0aGF0IGl0IGhhcyBhbiBpbXBhY3Qgb24KKyAqIGRwbGwuCisg KgorICogQml0cyAyNzoyNCBjb250YWluIG1vcmUgZmxhZ3M6CisgKgorICogQml0IDI3OiBTZXR0 aW5nIFpYMjlfUExMX0RBQ0FQIHNsb3dzIGRvd24gdGhlIGxvY2sgdGltZSBhbmQgb2J2aWF0ZXMg dGhlIHNwZWVkIGdhaW5lZCBmcm9tCisgKiAgICAgICAgICFEU01fRElTQUJMRS4gTm8gb3RoZXIg ZWZmZWN0IG9ic2VydmVkLgorICoKKyAqIEJpdCAyNjogWlgyOV9QTExfNFBIQVNFX09VVF9ESVNB QkxFIGlzIHNldCBvbiBzb21lIFBMTHMgb24gYm9vdCBidXQgbm90IG9uIG90aGVycy4gSXQgaXMg c2V0IG9uCisgKiAgICAgICAgIGJvb3Qgb24gbXBsbCBhbmQgdXBsbCwgYnV0IG5vdCBncGxsLCBk cGxsIG9yIHVua25vd25wbGwuIEkgYW0gbm90IHN1cmUgd2hhdCBpdCBkb2VzCisgKiAgICAgICAg IGVpdGhlci4gVGhlIFNESU8gZGV2aWNlcyBicmVhayBpZiB0aGV5IGFyZSBmZWQgZnJvbSBncGxs IHdpdGggdGhpcyBmbGFnIHNldCwgYnV0IHRoZXkKKyAqICAgICAgICAgd29yayBPSyBpZiB0aGV5 IGFyZSBmZWQgZnJvbSBtcGxsIHdpdGhvdXQgdGhpcyBmbGFnIHNldC4KKyAqCisgKiBCaXQgMjU6 IFpYMjlfUExMX1BPU1RESVZfT1VUX0RJU0FCTEUgc2VlbXMgdG8gZGlzYWJsZSB0aGUgUExMIG91 dHB1dCBlbnRpcmVseS4gV2hldGhlciBpdCBpcworICogICAgICAgICBieXBhc3NlZCBieSBQTExf RElTQUJMRSBkaWZmZXJzIGJldHdlZW4gUExMcy4gZ3BsbCBzdGlsbCBwcm9kdWNlcyBhbiBvdXRw dXQgY2xvY2sgaWYKKyAqICAgICAgICAgUExMX0RJU0FCTEUgPSAxIGFuZCBQT1NURElWX0RJU0FC TEUgPSAxLCBidXQgcHJvZHVjZXMgbm8gb3V0cHV0IGlmIFBMTF9ESVNBQkxFID0gMCBhbmQKKyAq ICAgICAgICAgUE9TVERJVl9ESVNBQkxFID0gMS4gVGhlIGRwbGwgZmVlZGVyICgidW5rbm93bnBs bCIpIGF0IDB4MTAwIHByb2R1Y2VzIG5vIG91dHB1dCBjbG9jayBpZgorICogICAgICAgICBib3Ro IFBMTF9ESVNBQkxFIGFuZCBQT1NURElWX0RJU0FCTEUgYXJlIHNldCB0byAxLgorICoKKyAqIEJp dCAyNDogWlgyOV9QTExfVkNPX09VVF9ESVNBQkxFIHByb2JhYmx5IGRpc2FibGVzIHRoZSBvdXRw dXQgb2YgdGhlIFZDTyBjbG9jayB3aXRob3V0CisgKiAgICAgICAgIHBvc3QtVkNPLWRpdmlkZXJz LCBidXQgdGhlIHJhdyBWQ08gb3V0cHV0IGlzIG5vdCBhIHBvc3NpYmxlIHBhcmVudCBvZiBhbnkg Y29uc3VtZXIgY2xvY2ssCisgKiAgICAgICAgIHNvIEkgY291bGQgbm90IGNvbmZpcm0gdGhpcy4g SXQgZG9lcyBub3QgZGlzYWJsZSB0aGUgVkNPIGVudGlyZWx5IC0gdGhhdCdzIHdoYXQKKyAqICAg ICAgICAgUExMX0RJU0FCTEUgZG9lcy4KKyAqCisgKiBBIHNwaW5sb2NrIHNob3VsZCBub3QgYmUg bmVlZGVkLiBQTExzIGRvbid0IHNoYXJlIHRoZWlyIHJlZ2lzdGVycyB3aXRoIGFueXRoaW5nIGVs c2UgYW5kIHRoZQorICogZ2xvYmFsIHByZXBhcmUgbXV0ZXggYW5kIGVuYWJsZSBzcGlubG9jayBz aG91bGQgYmUgZW5vdWdoLiBCZXdhcmUgb2YgY29uZmxpY3RzIGluIHJlZzIgYmV0d2VlbgorICog UE9TVERJVl9PVVRfRElTQUJMRSBhbmQgdGhlIGZyYWN0aW9uYWwgdmFsdWUgaW4gY2FzZSB5b3Ug ZmluZCBvdXQgaG93IGZyYWN0aW9uYWwgZGl2aWRlcnMgd29yaworICogYW5kIGFkZCBzdXBwb3J0 IGZvciB0aGVtLgorICovCisjZGVmaW5lIFpYMjlfUExMX1JFRzJfT0ZGU0VUCQkJNAorI2RlZmlu ZSBaWDI5X1BMTF9EQUNBUAkJCQlCSVQoMjcpCisjZGVmaW5lIFpYMjlfUExMXzRQSEFTRV9PVVRf RElTQUJMRQkJQklUKDI2KQorI2RlZmluZSBaWDI5X1BMTF9QT1NURElWX09VVF9ESVNBQkxFCQlC SVQoMjUpCisjZGVmaW5lIFpYMjlfUExMX1ZDT19PVVRfRElTQUJMRQkJQklUKDI0KQorI2RlZmlu ZSBaWDI5X1BMTF9GUkFDVAkJCQlHRU5NQVNLKDIzLCAwKQorCisvKgorICogVGhlIFZDTydzIGZy ZXF1ZW5jeSByYW5nZSBpcyBsaW1pdGVkLiBUaGUgc3RvY2sgc2V0dGluZ3MgcnVuIHRoZSBWQ08g YmV0d2VlbiA5NjAgYW5kIDEyNDggTUh6LgorICogQWQtaG9jIHRlc3Rpbmcgd2l0aCBncGxsIHN1 Z2dlc3RzIHRoYXQgYXQgbGVhc3QgdGhpcyBQTEwgcmVtYWlucyBzdGFibGUgZG93biB0byBhYm91 dCA3IE1IeiBhbmQKKyAqIHVwIHRvIDIgR0h6IGFuZCBwcm9kdWNlcyBhIGNsb2NrIHRoYXQgY2Fu IGJlIHVzZWQgYnkgdGhlIFNESU8gY29udHJvbGxlci4gQXR0ZW1wdGluZyB0byBydW4gdGhlCisg KiBtcGxsIFZDTyBhdCA2MjQgTUh6IGFuZCBzZXR0aW5nIHBvc3RkaXYxID0gcG9zdGRpdjIgPSAx IC0gd2hpY2ggc2hvdWxkIHJlc3VsdCBpbiB0aGUgc2FtZSBvdXRwdXQKKyAqIGZyZXF1ZW5jeSAt IG9yIHJ1bm5pbmcgaXQgYXQgMTg3MiBNSHogd2l0aCBhbiBlZmZlY3RpdmUgcG9zdCBkaXZpZGVy IG9mIDMgY3Jhc2hlcyB0aGUgQ1BVLiBNb3N0CisgKiBsaWtlbHkgdGhlIFBMTHMgYmVjb21lIHVu c3RhYmxlIG91dHNpZGUgdGhlaXIgY29yZSByYW5nZSBhbmQgdGhlIFNESU8gY29udHJvbGxlciBp cyBtdWNoIG1vcmUKKyAqIGZvcmdpdmluZyB0aGFuIENQVSBhbmQgRFJBTSBhcmUuCisgKi8KKyNk ZWZpbmUgWlgyOV9QTExfVkNPX01BWF9GUkVRCQkJKDEzMDAgKiBIWl9QRVJfTUhaKQorI2RlZmlu ZSBaWDI5X1BMTF9WQ09fTUlOX0ZSRVEJCQkoOTAwICogSFpfUEVSX01IWikKKworc3RydWN0IHp4 MjlfY2xrX3BsbCB7CisJc3RydWN0IGNsa19odwlodzsKKwlzdHJ1Y3QgZGV2aWNlCSpkZXY7CisJ c3RydWN0IHJlZ21hcAkqbWFwOworCXUxNgkJcmVnOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1 Y3QgengyOV9jbGtfcGxsICp0b196eDI5X2Nsa19wbGwoc3RydWN0IGNsa19odyAqaHcpCit7CisJ cmV0dXJuIGNvbnRhaW5lcl9vZihodywgc3RydWN0IHp4MjlfY2xrX3BsbCwgaHcpOworfQorCitz dGF0aWMgaW50IHp4MjlfcGxsX2lzX3ByZXBhcmVkKHN0cnVjdCBjbGtfaHcgKmh3KQoreworCXN0 cnVjdCB6eDI5X2Nsa19wbGwgKnBsbCA9IHRvX3p4MjlfY2xrX3BsbChodyk7CisJaW50IHJlczsK KworCXJlcyA9IHJlZ21hcF90ZXN0X2JpdHMocGxsLT5tYXAsIHBsbC0+cmVnLCBaWDI5X1BMTF9E SVNBQkxFKTsKKwlpZiAocmVzIDwgMCkKKwkJcmV0dXJuIHJlczsKKworCXJldHVybiAhcmVzOwor fQorCitzdGF0aWMgaW50IHp4MjlfcGxsX3ByZXBhcmUoc3RydWN0IGNsa19odyAqaHcpCit7CisJ c3RydWN0IHp4MjlfY2xrX3BsbCAqcGxsID0gdG9fengyOV9jbGtfcGxsKGh3KTsKKwl1MzIgdmFs ID0gMDsKKwlpbnQgcmVzOworCisJcmVzID0gcmVnbWFwX2NsZWFyX2JpdHMocGxsLT5tYXAsIHBs bC0+cmVnLCBaWDI5X1BMTF9ESVNBQkxFKTsKKwlpZiAocmVzIDwgMCkKKwkJcmV0dXJuIHJlczsK KworCS8qIExvY2sgZHVyYXRpb24gaXMgdXN1YWxseSBiZXR3ZWVuIDMwMCB1cyBhbmQgNTAwIHVz ICovCisJcmVzID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHBsbC0+bWFwLCBwbGwtPnJlZywg dmFsLCB2YWwgJiBaWDI5X1BMTF9MT0NLRUQsIDUwLCAyMDAwKTsKKwlpZiAocmVzKSB7CisJCXJl Z21hcF9zZXRfYml0cyhwbGwtPm1hcCwgcGxsLT5yZWcsIFpYMjlfUExMX0RJU0FCTEUpOworCQlk ZXZfZXJyKHBsbC0+ZGV2LCAiJXM6IFBMTCBwcmVwYXJlIGZhaWxlZDogJWQuIENvbmZpZyB2YWx1 ZSAweCUwOHhcbiIsCisJCQljbGtfaHdfZ2V0X25hbWUoJnBsbC0+aHcpLCByZXMsIHZhbCk7CisJ fQorCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIHp4MjlfcGxsX3VucHJlcGFyZShzdHJ1 Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgengyOV9jbGtfcGxsICpwbGwgPSB0b196eDI5X2Ns a19wbGwoaHcpOworCisJcmVnbWFwX3NldF9iaXRzKHBsbC0+bWFwLCBwbGwtPnJlZywgWlgyOV9Q TExfRElTQUJMRSk7Cit9CisKK3N0YXRpYyBpbnQgengyOV9wbGxfaXNfZW5hYmxlZChzdHJ1Y3Qg Y2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgengyOV9jbGtfcGxsICpwbGwgPSB0b196eDI5X2Nsa19w bGwoaHcpOworCWludCByZXM7CisKKwlyZXMgPSByZWdtYXBfdGVzdF9iaXRzKHBsbC0+bWFwLCBw bGwtPnJlZyArIFpYMjlfUExMX1JFRzJfT0ZGU0VULAorCQkJICAgICAgIFpYMjlfUExMX1BPU1RE SVZfT1VUX0RJU0FCTEUpOworCWlmIChyZXMgPCAwKQorCQlyZXR1cm4gcmVzOworCisJcmV0dXJu ICFyZXM7Cit9CisKK3N0YXRpYyBpbnQgengyOV9wbGxfZW5hYmxlKHN0cnVjdCBjbGtfaHcgKmh3 KQoreworCXN0cnVjdCB6eDI5X2Nsa19wbGwgKnBsbCA9IHRvX3p4MjlfY2xrX3BsbChodyk7CisK KwlyZXR1cm4gcmVnbWFwX2NsZWFyX2JpdHMocGxsLT5tYXAsIHBsbC0+cmVnICsgWlgyOV9QTExf UkVHMl9PRkZTRVQsCisJCQkJIFpYMjlfUExMX1BPU1RESVZfT1VUX0RJU0FCTEUpOworfQorCitz dGF0aWMgdm9pZCB6eDI5X3BsbF9kaXNhYmxlKHN0cnVjdCBjbGtfaHcgKmh3KQoreworCXN0cnVj dCB6eDI5X2Nsa19wbGwgKnBsbCA9IHRvX3p4MjlfY2xrX3BsbChodyk7CisKKwlyZWdtYXBfc2V0 X2JpdHMocGxsLT5tYXAsIHBsbC0+cmVnICsgWlgyOV9QTExfUkVHMl9PRkZTRVQsCisJCQlaWDI5 X1BMTF9QT1NURElWX09VVF9ESVNBQkxFKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgengy OV9wbGxfZ2V0X3JhdGUoY29uc3Qgc3RydWN0IHp4MjlfY2xrX3BsbCAqcGxsLCB1bnNpZ25lZCBs b25nIHBhcmVudF9yYXRlLAorCQkJCSAgICAgICB1MzIgc2V0dGluZykKK3sKKwl1bnNpZ25lZCBs b25nIHJlZmRpdiwgZmJkaXYsIHBvc3RkaXYxLCBwb3N0ZGl2MiwgZnJlcTsKKwljb25zdCBjaGFy ICpuYW1lID0gY2xrX2h3X2dldF9uYW1lKCZwbGwtPmh3KTsKKwl1NjQgdmNvOworCisJcmVmZGl2 ID0gKHNldHRpbmcgJiBaWDI5X1BMTF9SRUZESVZfTUFTSykgPj4gWlgyOV9QTExfUkVGRElWX1NI SUZUOworCWZiZGl2ID0gKHNldHRpbmcgJiBaWDI5X1BMTF9GQkRJVl9NQVNLKSA+PiBaWDI5X1BM TF9GQkRJVl9TSElGVDsKKwlwb3N0ZGl2MSA9IChzZXR0aW5nICYgWlgyOV9QTExfUE9TVERJVjFf TUFTSykgPj4gWlgyOV9QTExfUE9TVERJVjFfU0hJRlQ7CisJcG9zdGRpdjIgPSAoc2V0dGluZyAm IFpYMjlfUExMX1BPU1RESVYyX01BU0spID4+IFpYMjlfUExMX1BPU1RESVYyX1NISUZUOworCWRl dl9kYmcocGxsLT5kZXYsICIlczogcmVmZXJlbmNlIGNsb2NrICVsdSBIeiwgUExMIHNldHRpbmcg MHglMDh4XG4iLAorCQluYW1lLCBwYXJlbnRfcmF0ZSwgc2V0dGluZyk7CisKKwlpZiAoIXJlZmRp diB8fCAhcG9zdGRpdjEgfHwgIXBvc3RkaXYyKSB7CisJCWRldl9lcnIocGxsLT5kZXYsICIlczog ZGl2aWRlIGJ5IHplcm8gKCVsdSwgJWx1LCAlbHUpXG4iLCBuYW1lLCByZWZkaXYsIHBvc3RkaXYx LAorCQkJcG9zdGRpdjIpOworCQlyZXR1cm4gMDsKKwl9CisKKwl2Y28gPSBkaXZfdTY0KCh1NjQp cGFyZW50X3JhdGUgKiBmYmRpdiwgcmVmZGl2KTsKKwlmcmVxID0gZGl2X3U2NChkaXZfdTY0KHZj bywgcG9zdGRpdjEpLCBwb3N0ZGl2Mik7CisJZGV2X2RiZyhwbGwtPmRldiwgIiVzOiByZWZkaXYg JWx1IGZiZGl2ICVsdVxuIiwgbmFtZSwgcmVmZGl2LCBmYmRpdik7CisJZGV2X2RiZyhwbGwtPmRl diwgIiVzOiBwb3N0ZGl2MSAlbHUgcG9zdGRpdjIgJWx1XG4iLCBuYW1lLCBwb3N0ZGl2MSwgcG9z dGRpdjIpOworCisJZGV2X2RiZyhwbGwtPmRldiwgIiVzOiAlbHUgTUh6XG4iLCBuYW1lLCBmcmVx IC8gSFpfUEVSX01IWik7CisKKwlyZXR1cm4gZnJlcTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxv bmcgengyOV9wbGxfcmVjYWxjX3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcg cGFyZW50X3JhdGUpCit7CisJc3RydWN0IHp4MjlfY2xrX3BsbCAqcGxsID0gdG9fengyOV9jbGtf cGxsKGh3KTsKKwl1MzIgdmFsOworCWludCByZXM7CisKKwlyZXMgPSByZWdtYXBfcmVhZChwbGwt Pm1hcCwgcGxsLT5yZWcsICZ2YWwpOworCWlmIChyZXMgPCAwKSB7CisJCWRldl9lcnIocGxsLT5k ZXYsICIlczogRmFpbGVkIHRvIHJlYWQgUExMIHNldHRpbmdzXG4iLCBjbGtfaHdfZ2V0X25hbWUo JnBsbC0+aHcpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIHp4MjlfcGxsX2dldF9yYXRl KHBsbCwgcGFyZW50X3JhdGUsIHZhbCk7Cit9CisKK3N0YXRpYyB1MzIgengyOV9wbGxfY2FsY192 YWx1ZXMoY29uc3Qgc3RydWN0IHp4MjlfY2xrX3BsbCAqcGxsLCB1bnNpZ25lZCBsb25nIHBhcmVu dF9yYXRlLAorCQkJCXVuc2lnbmVkIGxvbmcgcmF0ZSwgdW5zaWduZWQgbG9uZyBtaW5fcmF0ZSwg dW5zaWduZWQgbG9uZyBtYXhfcmF0ZSkKK3sKKwljb25zdCB1bnNpZ25lZCBpbnQgcG9zdGRpdjFf bWF4ID0gKDEgPDwgaHdlaWdodDMyKFpYMjlfUExMX1BPU1RESVYxX01BU0spKSAtIDE7CisJY29u c3QgdW5zaWduZWQgaW50IHBvc3RkaXYyX21heCA9ICgxIDw8IGh3ZWlnaHQzMihaWDI5X1BMTF9Q T1NURElWMl9NQVNLKSkgLSAxOworCXVuc2lnbmVkIGxvbmcgZmJkaXYsIHJlZmRpdiwgYmVzdF9m YmRpdiA9IDAsIGJlc3RfcmVmZGl2ID0gMDsKKwl1MzIgcG9zdGRpdjEgPSAwLCBwb3N0ZGl2MiA9 IDAsIGksIGosIHNldHRpbmc7CisJY29uc3QgY2hhciAqbmFtZSA9IGNsa19od19nZXRfbmFtZSgm cGxsLT5odyk7CisJbG9uZyBiZXN0ID0gTE9OR19NQVg7CisKKwkvKgorCSAqIFRoaXMgY29kZSBw cm9kdWNlcyB0aGUgc2FtZSBWQ08gc2V0dGluZ3MgdGhhdCB0aGUgYm9vdCBsb2FkZXIgYW5kIHN0 b2NrIGZpcm13YXJlIHVzZSBmb3IKKwkgKiB0aGUgc3RhbmRhcmQgZnJlcXVlbmNpZXMuIEl0IGhh cyBzZWVuIG9ubHkgdmVyeSBsaXR0bGUgbWFudWFsIHRlc3RpbmcgYmV5b25kIHRoYXQuCisJICoK KwkgKiBUaGUgZ29hbCBpcyB0byBmaW5kIGEgVkNPIHNldHRpbmcgdGhhdCBnZXRzIHVzIGFzIGNs b3NlIGFzIHBvc3NpYmxlIHRvIHRoZSBkZXNpcmVkIG91dHB1dAorCSAqIHJhdGUsIHdoaWxlIGJl aW5nIHdpdGhpbiB0aGUgVkNPJ3Mgb3BlcmF0aW5nIGxpbWl0cyBhbmQgYWNoaWV2YWJsZSB3aXRo IHRoZSBpbnB1dCB2YWx1ZQorCSAqIHJhbmdlLiBJdCBpcyBpdGVyYXRpbmcgb3ZlciBwb3NzaWJs ZSBwb3N0LVZDTyBkaXZpZGVyIHZhbHVlcyAoMS03KSooMS03KSB0byBsb29rIGZvcgorCSAqIHZh bGlkIFZDTyB0YXJnZXQgZnJlcXVlbmNpZXMgYW5kIHRoZW4gbG9va3MgZm9yIHJlZmRpdiBhbmQg ZmJkaXYgdmFsdWVzIHRvIGFjaGlldmUgdGhlCisJICogVkNPIGZyZXF1ZW5jeSBmcm9tIHRoZSBy ZWZlcmVuY2UgZnJlcXVlbmN5LgorCSAqLworCWZvciAoaiA9IDE7IGogPD0gcG9zdGRpdjJfbWF4 OyBqKyspIHsKKwkJZm9yIChpID0gMTsgaSA8PSBwb3N0ZGl2MV9tYXg7IGkrKykgeworCQkJdTY0 IHZjbyA9ICh1NjQpcmF0ZSAqIGkgKiBqOworCQkJdW5zaWduZWQgbG9uZyBvdXQ7CisKKwkJCWlm ICh2Y28gPiBaWDI5X1BMTF9WQ09fTUFYX0ZSRVEgfHwgdmNvIDwgWlgyOV9QTExfVkNPX01JTl9G UkVRKQorCQkJCWNvbnRpbnVlOworCisJCQlyYXRpb25hbF9iZXN0X2FwcHJveGltYXRpb24odmNv LCBwYXJlbnRfcmF0ZSwKKwkJCQkJCSAgICAoMSA8PCBod2VpZ2h0MzIoWlgyOV9QTExfRkJESVZf TUFTSykpIC0gMSwKKwkJCQkJCSAgICAoMSA8PCBod2VpZ2h0MzIoWlgyOV9QTExfUkVGRElWX01B U0spKSAtIDEsCisJCQkJCQkgICAgJmZiZGl2LCAmcmVmZGl2KTsKKwkJCXNldHRpbmcgPSBmYmRp diA8PCBaWDI5X1BMTF9GQkRJVl9TSElGVDsKKwkJCXNldHRpbmcgfD0gcmVmZGl2IDw8IFpYMjlf UExMX1JFRkRJVl9TSElGVDsKKwkJCXNldHRpbmcgfD0gaSA8PCBaWDI5X1BMTF9QT1NURElWMV9T SElGVDsKKwkJCXNldHRpbmcgfD0gaiA8PCBaWDI5X1BMTF9QT1NURElWMl9TSElGVDsKKwkJCW91 dCA9IHp4MjlfcGxsX2dldF9yYXRlKHBsbCwgcGFyZW50X3JhdGUsIHNldHRpbmcpOworCisJCQlp ZiAob3V0IDwgbWluX3JhdGUgfHwgb3V0ID4gbWF4X3JhdGUpCisJCQkJY29udGludWU7CisKKwkJ CWlmIChhYnNfZGlmZihvdXQsIHJhdGUpID4gYmVzdCkKKwkJCQljb250aW51ZTsKKworCQkJaWYg KGFic19kaWZmKG91dCwgcmF0ZSkgPCBiZXN0KSB7CisJCQkJcG9zdGRpdjEgPSBpOworCQkJCXBv c3RkaXYyID0gajsKKwkJCQliZXN0X2ZiZGl2ID0gZmJkaXY7CisJCQkJYmVzdF9yZWZkaXYgPSBy ZWZkaXY7CisJCQkJYmVzdCA9IGFic19kaWZmKG91dCwgcmF0ZSk7CisKKwkJCQlpZiAoIWJlc3Qp CisJCQkJCWdvdG8gc2VhcmNoX2RvbmU7CisJCQl9CisJCX0KKwl9CitzZWFyY2hfZG9uZToKKwor CWlmICghcG9zdGRpdjEpIHsKKwkJZGV2X2VycihwbGwtPmRldiwgIkRpZCBub3QgZmluZCBhIHNl dHRpbmcgZm9yICVsdSBIeiwgcGFyZW50ICVsdSBIelxuIiwKKwkJCXJhdGUsIHBhcmVudF9yYXRl KTsKKwkJcmV0dXJuIDA7CisJfQorCisJZGV2X2RiZyhwbGwtPmRldiwgIiVzOiBwYXJlbnQgcmF0 ZSAlbHVcbiIsIG5hbWUsIHBhcmVudF9yYXRlKTsKKwlkZXZfZGJnKHBsbC0+ZGV2LCAiJXM6IGZv dW5kIFZDTyBkaXZpZGVycyAldSBhbmQgJXVcbiIsIG5hbWUsIHBvc3RkaXYxLCBwb3N0ZGl2Mik7 CisJZGV2X2RiZyhwbGwtPmRldiwgIiVzOiBWQ08gdGFyZ2V0IHJhdGUgJWx1XG4iLCBuYW1lLCBy YXRlICogcG9zdGRpdjEgKiBwb3N0ZGl2Mik7CisKKwlkZXZfZGJnKHBsbC0+ZGV2LCAiJXM6IEdv dCBmYmRpdiA9ICVsdSByZWZkaXYgPSAlbHVcbiIsIG5hbWUsIGJlc3RfZmJkaXYsIGJlc3RfcmVm ZGl2KTsKKworCXNldHRpbmcgPSBiZXN0X2ZiZGl2IDw8IFpYMjlfUExMX0ZCRElWX1NISUZUOwor CXNldHRpbmcgfD0gYmVzdF9yZWZkaXYgPDwgWlgyOV9QTExfUkVGRElWX1NISUZUOworCXNldHRp bmcgfD0gcG9zdGRpdjEgPDwgWlgyOV9QTExfUE9TVERJVjFfU0hJRlQ7CisJc2V0dGluZyB8PSBw b3N0ZGl2MiA8PCBaWDI5X1BMTF9QT1NURElWMl9TSElGVDsKKwlkZXZfZGJnKHBsbC0+ZGV2LCAi JXM6IEZpbmFsIHNldHRpbmcgMHglMDh4XG4iLCBuYW1lLCBzZXR0aW5nKTsKKworCXJldHVybiBz ZXR0aW5nOworfQorCitzdGF0aWMgaW50IHp4MjlfcGxsX2RldGVybWluZV9yYXRlKHN0cnVjdCBj bGtfaHcgKmh3LCBzdHJ1Y3QgY2xrX3JhdGVfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCB6eDI5 X2Nsa19wbGwgKnBsbCA9IHRvX3p4MjlfY2xrX3BsbChodyk7CisJdW5zaWduZWQgbG9uZyBuZXdf cmF0ZTsKKwl1MzIgc2V0dGluZzsKKworCS8qCisJICogVE9ETzogRFBMTCBjYW4gc3dpdGNoIGJl dHdlZW4gdHdvIHBhcmVudHMsIG9uZSBvZiB3aGljaCBpcyBhbm90aGVyIFBMTC4gVGFrZSB0aGlz IGludG8KKwkgKiBhY2NvdW50IHdoZW4gc2VhcmNoaW5nIHRoZSBjb25maWcgc3BhY2UgYW5kIHNl dCByZXEtPmJlc3RfcGFyZW50X3JhdGUuCisJICoKKwkgKiBJbiBwcmFjdGljZSBpdCBzaG91bGRu J3QgbWF0dGVyIHRob3VnaC4gRHBsbCBpcyBhbHdheXMgY29uZmlndXJlZCB0byBhIGZpeGVkIGZy ZXF1ZW5jeQorCSAqIGFuZCBpcyB0aGUgb25seSBjbG9jayB3aXRoIGEgc3dpdGNoYWJsZSBwYXJl bnQuCisJICovCisJaWYgKCFyZXEtPmJlc3RfcGFyZW50X3JhdGUpIHsKKwkJZGV2X2VycihwbGwt PmRldiwgIkRpZCBub3QgZXhwZWN0IGJlc3RfcGFyZW50X3JhdGU9MFxuIik7CisJCXJldHVybiAt RUlOVkFMOworCX0KKworCXNldHRpbmcgPSB6eDI5X3BsbF9jYWxjX3ZhbHVlcyhwbGwsIHJlcS0+ YmVzdF9wYXJlbnRfcmF0ZSwgcmVxLT5yYXRlLCByZXEtPm1pbl9yYXRlLAorCQkJCSAgICAgICBy ZXEtPm1heF9yYXRlKTsKKwlpZiAoIXNldHRpbmcpCisJCXJldHVybiAtRUlOVkFMOworCisJbmV3 X3JhdGUgPSB6eDI5X3BsbF9nZXRfcmF0ZShwbGwsIHJlcS0+YmVzdF9wYXJlbnRfcmF0ZSwgc2V0 dGluZyk7CisJaWYgKG5ld19yYXRlICE9IHJlcS0+cmF0ZSkgeworCQlkZXZfd2FybihwbGwtPmRl diwgIkRpZCBub3QgZmluZCBhbiBleGFjdCBtYXRjaC4gV2FudCAlbHUsIGdvdCAlbHVcbiIsCisJ CQkgcmVxLT5yYXRlLCBuZXdfcmF0ZSk7CisJCXJlcS0+cmF0ZSA9IG5ld19yYXRlOworCX0KKwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHp4MjlfcGxsX3NldF9yYXRlKHN0cnVjdCBjbGtf aHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50 X3JhdGUpCit7CisJc3RydWN0IHp4MjlfY2xrX3BsbCAqcGxsID0gdG9fengyOV9jbGtfcGxsKGh3 KTsKKwl1MzIgc2V0dGluZzsKKworCS8qCisJICogVE9ETzogSW1wbGVtZW50IGdyYWR1YWwgUExM IHJhdGUgY2hhbmdlLiBQTExzIGNhbiBiZSBjaGFuZ2VkIHdoaWxlIHRoZXkgYXJlIHJ1bm5pbmcg YW5kCisJICogZG93bnN0cmVhbSBoYXJkd2FyZSBpcyBnZW5lcmFsbHkgZmluZSB3aXRoIHRoYXQu IFRoZSBleGNlcHRpb24gaXMgRFJBTSwgd2hpY2ggcmVhZHMKKwkgKiBpbmNvcnJlY3QgdmFsdWVz IGlmIGNoYW5nZWQgdG9vIGZhc3QuCisJICoKKwkgKiBDaGFuZ2luZyB0aGUgbXBsbCByYXRlIGlz IHBvdGVudGlhbGx5IHVzZWZ1bCBmb3Igb3Zlci91bmRlcmNsb2NraW5nLiBHYXRpbmcgbXBsbCBp cworCSAqIHVucmVhbGlzdGljIGJlY2F1c2UgdG9vIG1hbnkgZGV2aWNlcyBkZXBlbmQgb24gaXQu CisJICovCisJc2V0dGluZyA9IHp4MjlfcGxsX2NhbGNfdmFsdWVzKHBsbCwgcGFyZW50X3JhdGUs IHJhdGUsIHJhdGUsIHJhdGUpOworCWlmICghc2V0dGluZykKKwkJcmV0dXJuIC1FSU5WQUw7CisK KwlkZXZfaW5mbyhwbGwtPmRldiwgIiVzOiBTZXR0aW5nIG5ldyBjb25maWd1cmF0aW9uOiAweCUw OHhcbiIsIGNsa19od19nZXRfbmFtZShodyksIHNldHRpbmcpOworCisJcmV0dXJuIHJlZ21hcF91 cGRhdGVfYml0cyhwbGwtPm1hcCwgcGxsLT5yZWcsIDB4MDBmZmZmZmYsIHNldHRpbmcpOworfQor CitzdGF0aWMgdTggengyOV9wbGxfZ2V0X3BhcmVudChzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlz dHJ1Y3QgengyOV9jbGtfcGxsICpwbGwgPSB0b196eDI5X2Nsa19wbGwoaHcpOworCXUzMiB2YWw7 CisJaW50IHJlczsKKworCXJlcyA9IHJlZ21hcF9yZWFkKHBsbC0+bWFwLCBwbGwtPnJlZywgJnZh bCk7CisJaWYgKHJlcyA8IDApCisJCXJldHVybiAweGZmOworCisJdmFsID0gKHZhbCAmIFpYMjlf UExMX1BBUkVOVF9NQVNLKSA+PiBaWDI5X1BMTF9QQVJFTlRfU0hJRlQ7CisJZGV2X2RiZyhwbGwt PmRldiwgIiVzOiBQYXJlbnQgMHgleFxuIiwgY2xrX2h3X2dldF9uYW1lKGh3KSwgdmFsKTsKKwor CXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbnQgengyOV9wbGxfc2V0X3BhcmVudChzdHJ1Y3Qg Y2xrX2h3ICpodywgdTggaW5kZXgpCit7CisJc3RydWN0IHp4MjlfY2xrX3BsbCAqcGxsID0gdG9f engyOV9jbGtfcGxsKGh3KTsKKwl1MzIgaWR4X3NoaWZ0ID0gaW5kZXggPDwgWlgyOV9QTExfUEFS RU5UX1NISUZUOworCWludCByZXM7CisJdTMyIHZhbDsKKworCXJlcyA9IHJlZ21hcF91cGRhdGVf Yml0cyhwbGwtPm1hcCwgcGxsLT5yZWcsIFpYMjlfUExMX1BBUkVOVF9NQVNLLCBpZHhfc2hpZnQp OworCWlmIChyZXMgPCAwKQorCQlyZXR1cm4gcmVzOworCisJcmVzID0gcmVnbWFwX3JlYWQocGxs LT5tYXAsIHBsbC0+cmVnLCAmdmFsKTsKKwlpZiAocmVzIDwgMCkKKwkJcmV0dXJuIHJlczsKKwor CWlmICgodmFsICYgWlgyOV9QTExfUEFSRU5UX01BU0spICE9IGlkeF9zaGlmdCkgeworCQlkZXZf ZXJyKHBsbC0+ZGV2LCAiSGFyZHdhcmUgcmVqZWN0ZWQgUExMIHBhcmVudCAldVxuIiwgaW5kZXgp OworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6 eDI5X3BsbF9pbml0KHN0cnVjdCBjbGtfaHcgKmh3KQoreworCXN0cnVjdCB6eDI5X2Nsa19wbGwg KnBsbCA9IHRvX3p4MjlfY2xrX3BsbChodyk7CisJY29uc3QgY2hhciAqbmFtZSA9IGNsa19od19n ZXRfbmFtZShodyk7CisJaW50IHJlczsKKwl1MzIgdmFsOworCisJZGV2X2RiZyhwbGwtPmRldiwg IiVzOiBpbml0aWFsaXppbmdcbiIsIG5hbWUpOworCisJLyoKKwkgKiBUaGUgZnJhY3Rpb25hbCB2 YWx1ZSBpcyBub3QgeWV0IGltcGxlbWVudGVkLiBJdCB3b3JrcyBhdCBsZWFzdCB3aXRoIGRwbGws IGJ1dCBJIGhhdmUKKwkgKiBuZXZlciBzZWVuIGl0IHVzZWQgb24gYWN0dWFsIGhhcmR3YXJlLgor CSAqLworCXJlcyA9IHJlZ21hcF9yZWFkKHBsbC0+bWFwLCBwbGwtPnJlZyArIFpYMjlfUExMX1JF RzJfT0ZGU0VULCAmdmFsKTsKKwlpZiAocmVzIDwgMCkKKwkJcmV0dXJuIHJlczsKKworCWlmICh2 YWwgJiBaWDI5X1BMTF9GUkFDVCkgeworCQlkZXZfd2FybihwbGwtPmRldiwgIiVzOiB1bnN1cHBv cnRlZCBub256ZXJvIGZyYWN0aW9uYWwgdmFsdWUgMHglMDhseFxuIiwKKwkJCSBuYW1lLCB2YWwg JiBaWDI5X1BMTF9GUkFDVCk7CisJfQorCisJLyoKKwkgKiBSZW1vdmUgdGhlIGJ5cGFzcyBmbGFn IHNvIHdlIGRvbid0IGhhdmUgdG8gYm90aGVyIHdpdGggaXQgaW4gZW5hYmxlL2Rpc2FibGUuIEkg aGF2ZSBuZXZlcgorCSAqIHNlZW4gaXQgc2V0IGJ5IHRoZSBlYXJsaWVyIGJvb3Qgc3RhZ2VzIGFu eWhvdy4KKwkgKi8KKwlyZXMgPSByZWdtYXBfY2xlYXJfYml0cyhwbGwtPm1hcCwgcGxsLT5yZWcs IFpYMjlfUExMX0JZUEFTUyk7CisJaWYgKHJlcyA8IDApCisJCXJldHVybiByZXM7CisKKwlyZXMg PSByZWdtYXBfdGVzdF9iaXRzKHBsbC0+bWFwLCBwbGwtPnJlZywgWlgyOV9QTExfRElTQUJMRSk7 CisJaWYgKHJlcyA+IDApIHsKKwkJLyoKKwkJICogU2V0IFpYMjlfUExMX1BPU1RESVZfT1VUX0RJ U0FCTEUgZm9yIFBMTHMgdGhhdCBoYXZlIFpYMjlfUExMX0RJU0FCTEUgZm9yCisJCSAqIGNvbnNp c3RlbmN5IHdpdGggLmVuYWJsZSBhbmQgLnByZXBhcmUuIFRoaXMgZW5zdXJlcyB0aGF0IC5wcmVw YXJlIGRvZXNuJ3QKKwkJICogaW5hZHZlcnRlbnRseSBlbmFibGUgUExMcyB3aXRob3V0IC5lbmFi bGUgYmVpbmcgY2FsbGVkLgorCQkgKi8KKwkJcmVzID0gcmVnbWFwX3NldF9iaXRzKHBsbC0+bWFw LCBwbGwtPnJlZyArIFpYMjlfUExMX1JFRzJfT0ZGU0VULAorCQkJCSAgICAgIFpYMjlfUExMX1BP U1RESVZfT1VUX0RJU0FCTEUpOworCX0KKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgY2xrX29wcyB6eDI5X3BsbF9vcHMgPSB7CisJLmluaXQJCT0gengyOV9wbGxfaW5p dCwKKwkuaXNfcHJlcGFyZWQJPSB6eDI5X3BsbF9pc19wcmVwYXJlZCwKKwkucHJlcGFyZQk9IHp4 MjlfcGxsX3ByZXBhcmUsCisJLnVucHJlcGFyZQk9IHp4MjlfcGxsX3VucHJlcGFyZSwKKwkuaXNf ZW5hYmxlZAk9IHp4MjlfcGxsX2lzX2VuYWJsZWQsCisJLmVuYWJsZQkJPSB6eDI5X3BsbF9lbmFi bGUsCisJLmRpc2FibGUJPSB6eDI5X3BsbF9kaXNhYmxlLAorCS5yZWNhbGNfcmF0ZQk9IHp4Mjlf cGxsX3JlY2FsY19yYXRlLAorCS5kZXRlcm1pbmVfcmF0ZSA9IHp4MjlfcGxsX2RldGVybWluZV9y YXRlLAorCS5nZXRfcGFyZW50CT0gengyOV9wbGxfZ2V0X3BhcmVudCwKKwkuc2V0X3BhcmVudAk9 IHp4MjlfcGxsX3NldF9wYXJlbnQsCisJLnNldF9yYXRlCT0gengyOV9wbGxfc2V0X3JhdGUsCit9 OworCisvKgorICogQSBQTEwgdGhhdCBjYW4gYmUgYSBwYXJlbnQgb2YgYW5vdGhlciBQTEwgbmVl ZHMgdG8gcHJvZHVjZSBhbiBvdXRwdXQgc2lnbmFsIHdoZW4gcHJlcGFyZWQsCisgKiBvdGhlcndp c2UgdGhlIGRvd25zdHJlYW0gUExMJ3MgcHJlcGFyZSgpIHdpbGwgZmFpbCB0byBhY3F1aXJlIGEg bG9jay4KKyAqLworc3RhdGljIGludCB6eDI5X3BsbF9ub2Rpc2FibGVfaW5pdChzdHJ1Y3QgY2xr X2h3ICpodykKK3sKKwlzdHJ1Y3QgengyOV9jbGtfcGxsICpwbGwgPSB0b196eDI5X2Nsa19wbGwo aHcpOworCWNvbnN0IGNoYXIgKm5hbWUgPSBjbGtfaHdfZ2V0X25hbWUoaHcpOworCWludCByZXM7 CisJdTMyIHZhbDsKKworCWRldl9kYmcocGxsLT5kZXYsICIlczogaW5pdGlhbGl6aW5nLCBwcmVw YXJlLWlzLWVuYWJsZWRcbiIsIG5hbWUpOworCisJcmVzID0gcmVnbWFwX3JlYWQocGxsLT5tYXAs IHBsbC0+cmVnICsgWlgyOV9QTExfUkVHMl9PRkZTRVQsICZ2YWwpOworCWlmIChyZXMgPCAwKQor CQlyZXR1cm4gcmVzOworCisJaWYgKHZhbCAmIFpYMjlfUExMX0ZSQUNUKSB7CisJCWRldl93YXJu KHBsbC0+ZGV2LCAiJXM6IHVuc3VwcG9ydGVkIG5vbnplcm8gZnJhY3Rpb25hbCB2YWx1ZSAweCUw OGx4XG4iLAorCQkJIG5hbWUsIHZhbCAmIFpYMjlfUExMX0ZSQUNUKTsKKwl9CisKKwlyZXMgPSBy ZWdtYXBfY2xlYXJfYml0cyhwbGwtPm1hcCwgcGxsLT5yZWcsIFpYMjlfUExMX0JZUEFTUyk7CisJ aWYgKHJlcyA8IDApCisJCXJldHVybiByZXM7CisKKwlyZXR1cm4gcmVnbWFwX2NsZWFyX2JpdHMo cGxsLT5tYXAsIHBsbC0+cmVnICsgWlgyOV9QTExfUkVHMl9PRkZTRVQsCisJCQkJIFpYMjlfUExM X1BPU1RESVZfT1VUX0RJU0FCTEUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMg engyOV9wbGxfbm9kaXNhYmxlX29wcyA9IHsKKwkuaW5pdAkJPSB6eDI5X3BsbF9ub2Rpc2FibGVf aW5pdCwKKwkuaXNfcHJlcGFyZWQJPSB6eDI5X3BsbF9pc19wcmVwYXJlZCwKKwkucHJlcGFyZQk9 IHp4MjlfcGxsX3ByZXBhcmUsCisJLnVucHJlcGFyZQk9IHp4MjlfcGxsX3VucHJlcGFyZSwKKwku cmVjYWxjX3JhdGUJPSB6eDI5X3BsbF9yZWNhbGNfcmF0ZSwKKwkuZGV0ZXJtaW5lX3JhdGUgPSB6 eDI5X3BsbF9kZXRlcm1pbmVfcmF0ZSwKKwkuZ2V0X3BhcmVudAk9IHp4MjlfcGxsX2dldF9wYXJl bnQsCisJLnNldF9wYXJlbnQJPSB6eDI5X3BsbF9zZXRfcGFyZW50LAorCS5zZXRfcmF0ZQk9IHp4 MjlfcGxsX3NldF9yYXRlLAorfTsKKwogc3RydWN0IGNsa19odyAqenhfY2xrX3JlZ2lzdGVyX3Bs bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCByZWdtYXAgKnJlZ21hcCwKLQkJCQkgICBjb25z dCBzdHJ1Y3QgenhfcGxsX2Rlc2MgKmRlc2MsCi0JCQkJICAgc3RydWN0IGNsa19odyAqIGNvbnN0 ICpjbG9ja3MpCisJCQkJICAgY29uc3Qgc3RydWN0IHp4X3BsbF9kZXNjICpkZXNjLCBzdHJ1Y3Qg Y2xrX2h3ICogY29uc3QgKmNsb2NrcykKIHsKLQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKwlz dHJ1Y3QgY2xrX3BhcmVudF9kYXRhIHBhcmVudHNbQ0xLX1pYX01BWF9QQVJFTlRTXTsKKwlzdHJ1 Y3QgY2xrX2luaXRfZGF0YSBpbml0ID0ge307CisJc3RydWN0IHp4MjlfY2xrX3BsbCAqcGxsOwor CXVuc2lnbmVkIGludCBpOworCWludCByZXM7CisKKwlwbGwgPSBkZXZtX2t6YWxsb2MoZGV2LCBz aXplb2YoKnBsbCksIEdGUF9LRVJORUwpOworCWlmICghcGxsKQorCQlyZXR1cm4gRVJSX1BUUigt RU5PTUVNKTsKKworCWlmIChkZXNjLT5mbGFncyAmIENMS19aWF9QTExfUFJFUEFSRV9JU19FTkFC TEUpCisJCWluaXQub3BzID0gJnp4MjlfcGxsX25vZGlzYWJsZV9vcHM7CisJZWxzZQorCQlpbml0 Lm9wcyA9ICZ6eDI5X3BsbF9vcHM7CisKKwlpZiAoV0FSTl9PTihkZXNjLT5udW1fcGFyZW50cyA+ IEFSUkFZX1NJWkUocGFyZW50cykpKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWZv ciAoaSA9IDA7IGkgPCBkZXNjLT5udW1fcGFyZW50czsgKytpKQorCQlwYXJlbnRzW2ldID0genhf Z2V0X3BhcmVudCgmZGVzYy0+cGFyZW50c1tpXSwgY2xvY2tzKTsKKworCWluaXQubmFtZSA9IGRl c2MtPm5hbWU7CisJaW5pdC5wYXJlbnRfZGF0YSA9IHBhcmVudHM7CisJaW5pdC5udW1fcGFyZW50 cyA9IGRlc2MtPm51bV9wYXJlbnRzOworCisJLyoKKwkgKiBEaXNhbGxvdyBsaXZlIHJlcGFyZW50 LCBidXQgYWxsb3cgcmF0ZSBjaGFuZ2VzLiBQTExzIGNhbiBoYW5kbGUgZ3JhZHVhbCBjaGFuZ2Vz IGZpbmUsIGJ1dAorCSAqIGxhcmdlIG9uZXMgY2F1c2UgYSB0ZW1wb3JhcnkgaW5jb3JyZWN0IG91 dHB1dCwgd2hpY2ggY2FuIGJyZWFrIGRvd25zdHJlYW0gZGV2aWNlcy4KKwkgKiBTZWUgengyOV9w bGxfc2V0X3JhdGUgZm9yIGNvbnNpZGVyYXRpb25zIG9uIHRoYXQuCisJICovCisJaW5pdC5mbGFn cyA9IENMS19TRVRfUEFSRU5UX0dBVEU7CisJcGxsLT5ody5pbml0ID0gJmluaXQ7CisJcGxsLT5k ZXYgPSBkZXY7CisJcGxsLT5tYXAgPSByZWdtYXA7CisJcGxsLT5yZWcgPSBkZXNjLT5yZWc7CisK KwlyZXMgPSBkZXZtX2Nsa19od19yZWdpc3RlcihkZXYsICZwbGwtPmh3KTsKKwlpZiAocmVzKQor CQlyZXR1cm4gRVJSX1BUUihyZXMpOworCisJLyoKKwkgKiBTZXQgdGhlIFBMTCByYXRlIG9ubHkg aWYgdGhlIGJvb3Rsb2FkZXIgbGVmdCBpdCBkaXNhYmxlZC4gS2VlcCB0aGUgYm9vdGxvYWRlciBz ZXR1cAorCSAqIG90aGVyd2lzZS4KKwkgKi8KKwlyZXMgPSByZWdtYXBfdGVzdF9iaXRzKHBsbC0+ bWFwLCBwbGwtPnJlZywgWlgyOV9QTExfRElTQUJMRSk7CisJaWYgKHJlcyA8IDApCisJCXJldHVy biBFUlJfUFRSKHJlcyk7CisKKwlpZiAocmVzID4gMCAmJiBkZXNjLT5yYXRlKSB7CisJCWRldl9k YmcocGxsLT5kZXYsICIlczogc2V0dGluZyB0byAlbHUgSHpcbiIsIGRlc2MtPm5hbWUsIGRlc2Mt PnJhdGUpOworCQlyZXMgPSBjbGtfc2V0X3JhdGUocGxsLT5ody5jbGssIGRlc2MtPnJhdGUpOwor CQlpZiAocmVzKQorCQkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIHJlcywgIiVz OiBmYWlsZWQgdG8gc2V0IHJhdGVcbiIsCisJCQkJCQkgICAgIGRlc2MtPm5hbWUpKTsKKwl9CisK KwlyZXR1cm4gJnBsbC0+aHc7CiB9CgotLSAKMi41NC4wCgoKLS0gCmxpbnV4LXBoeSBtYWlsaW5n IGxpc3QKbGludXgtcGh5QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cHM6Ly9saXN0cy5pbmZyYWRl YWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcGh5Cg==