From nobody Sun Feb 8 21:27:04 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 58A2AEB64D8 for ; Wed, 14 Jun 2023 22:30:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236842AbjFNWav (ORCPT ); Wed, 14 Jun 2023 18:30:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:32936 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236798AbjFNWar (ORCPT ); Wed, 14 Jun 2023 18:30:47 -0400 Received: from mail-qt1-x830.google.com (mail-qt1-x830.google.com [IPv6:2607:f8b0:4864:20::830]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0FE1726A0 for ; Wed, 14 Jun 2023 15:30:37 -0700 (PDT) Received: by mail-qt1-x830.google.com with SMTP id d75a77b69052e-3f9dc03029eso22368641cf.3 for ; Wed, 14 Jun 2023 15:30:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1686781836; x=1689373836; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=hHSBs3FMpCBNVeNRkUCS7JYiiBPkON59xtbdhwEZH5s=; b=Ykrbq+5CGFKE0i6UgR3D5JAMwHbfX42T5f+OMgmymlctIfjoFZjeSJXG0pG60v8hK+ HWHA3Wz4PrLRQnxA1FBkl6LM8R1Kt0oW5XRqi3xkXwLJErlRODt66iP1bqvBIMrPppDr LyzqtdAx2fHNdcdCZxuQ2GZYMWXBJjiIat0E4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686781836; x=1689373836; h=references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=hHSBs3FMpCBNVeNRkUCS7JYiiBPkON59xtbdhwEZH5s=; b=Di+qaI1cizCtezHIAfLkURtxvVanaXXvJXUMT1tlv1t+EWBQe0GT0kXob0mOpqrguG SLlQ6BtoWwUUI4Ecpg1ybHwHK8/sUdxwoaIZ3COarChW8JMNOO3kcBNWZLVHHSujmB92 pNExH/o6cukGi4Q2GKtHR0z35HVfU19ABymLaSNEk1SQUYSeT7+oX1a76gK7O5nVdJzJ +M2eZAZMro2etvok9LbLJe9vInbjLnuZPDl653iUqjBPu7wd7vtRd3k7XzUY5QQD0DPA i80yHdEyaBvdjkpgN1tpFKRZUClHX2K1H5V0foaSc6VjobS4xDtWWU+vKgyNDskWPdXN tKyg== X-Gm-Message-State: AC+VfDxLedDx/rMpL5zMzhAVhq3Zi346k5cAOZU6UyX5VqLP0AaaTHvp HGPQAXEZN57MnlXvYMUe8Nbeow== X-Google-Smtp-Source: ACHHUZ50YUPEuYEEIjm3QKNLwO1JLJTSNslBoHcY8z5xi58wGZHSHplLwLE82k2p8rQkATZFYF7FRg== X-Received: by 2002:ac8:7f81:0:b0:3ec:47d5:ec65 with SMTP id z1-20020ac87f81000000b003ec47d5ec65mr3102082qtj.60.1686781835604; Wed, 14 Jun 2023 15:30:35 -0700 (PDT) Received: from stbirv-lnx-2.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id d3-20020ac85443000000b003ef2db16e72sm5419360qtq.94.2023.06.14.15.30.32 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 14 Jun 2023 15:30:35 -0700 (PDT) From: Justin Chen To: netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, bcm-kernel-feedback-list@broadcom.com Cc: florian.fainelli@broadcom.com, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, conor+dt@kernel.org, opendmb@gmail.com, andrew@lunn.ch, hkallweit1@gmail.com, linux@armlinux.org.uk, richardcochran@gmail.com, sumit.semwal@linaro.org, christian.koenig@amd.com, simon.horman@corigine.com, Justin Chen Subject: [PATCH net-next v7 03/11] net: bcmasp: Add support for ASP2.0 Ethernet controller Date: Wed, 14 Jun 2023 15:30:12 -0700 Message-Id: <1686781820-832-4-git-send-email-justin.chen@broadcom.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1686781820-832-1-git-send-email-justin.chen@broadcom.com> References: <1686781820-832-1-git-send-email-justin.chen@broadcom.com> Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="0000000000002c488705fe1e8038" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable --0000000000002c488705fe1e8038 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 QWRkIHN1cHBvcnQgZm9yIHRoZSBCcm9hZGNvbSBBU1AgMi4wIEV0aGVybmV0IGNvbnRyb2xsZXIg d2hpY2ggaXMgZmlyc3QKaW50cm9kdWNlZCB3aXRoIDcyMTY1LiBUaGlzIGNvbnRyb2xsZXIgZmVh dHVyZXMgdHdvIGRpc3RpbmN0IEV0aGVybmV0CnBvcnRzIHRoYXQgY2FuIGJlIGluZGVwZW5kZW50 bHkgb3BlcmF0ZWQuCgpSZXZpZXdlZC1ieTogU2ltb24gSG9ybWFuIDxzaW1vbi5ob3JtYW5AY29y aWdpbmUuY29tPgpTaWduZWQtb2ZmLWJ5OiBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuLmZhaW5l bGxpQGJyb2FkY29tLmNvbT4KU2lnbmVkLW9mZi1ieTogSnVzdGluIENoZW4gPGp1c3Rpbi5jaGVu QGJyb2FkY29tLmNvbT4KLS0tCnY3CgktIEZpeGVkIGxlYWtpbmcgcG9ydHNfbm9kZSBkZXZpY2Ug bm9kZS4KCS0gU3BsaXQgb3V0IHRvIHNtYWxsZXIgY29tbWl0cwoKdjYKCS0gRml4ZWQgYSByZXNl cnZlZCBtYWMgZmlsdGVyIGluZGV4aW5nIGVycm9yCgktIFJlbW92ZWQgdHhfbG9jawoJLSBTaW1w bGlmaWVkIHR4X3RpbWVvdXQgaG9vawoJLSBSZW1vdmVkIGdldF9zdGF0cwoJLSBGaXhlZCBwaHkg aW9jdGwKCS0gRml4ZWQgZGV2IC0+IG5kZXYgdHlwbwoJLSBGaXhlZCBzZXRfd29sIGRvdWJsZSBk aXNhYmxlCgp2NQoJLSBSZW1vdmUgdW5uZWNlc3NhcnkgcGFyZW50aGVzaXMKCS0gVXNlIGJvb2wg Zm9yIGJjbWFzcF9uZXRmaWx0X2NoZWNrX2R1cCgpCgp2NAogICAgICAgIC0gQWRkcmVzcyBzcGFy c2Ugd2FybmluZ3MKICAgICAgICAtIEZpeCBvbmUgbW9yZSByZXZlcnNlIHhtYXMgdHJlZSB2aW9s YXRpb24KICAgICAgICAtIEltcHJvdmUgZXJyb3IgbG9naWMgZm9yIGJjbWFzcF9uZXRmaWx0X2dl dF9yZWdfb2Zmc2V0KCkKCS0gUmVtb3ZlIGlubGluZXMKCnYzCiAgICAgICAgLSBGaXggbG9naWMg ZXJyb3Igd2l0aCBuZXQgc3RhdHMgd2hlcmUgc29tZSBzdGF0cyB3ZXJlIG1pc3NpbmcKICAgICAg ICAtIEdlbmVyYWwgY2xlYW4gdXAgYWRkcmVzc2luZyBmb3JtYXR0aW5nL3NwZWxsaW5nL2NvbnNp c3RlbmN5CiAgICAgICAgLSBVc2UgZGV2X2Vycl9wcm9iZSB0byBzYXZlIGEgZmV3IExvQ3MKICAg ICAgICAtIFVzZSBwdXRfdW5hbGlnbmVkIHdoZW4gdXBkYXRpbmcgbmV0IHN0YXRzCgp2MgogICAg ICAgIC0gUmVwbGFjZSBhIGNvdXBsZSBmdW5jdGlvbnMgd2l0aCBoZWxwZXIgZnVuY3Rpb25zCiAg ICAgICAgLSBGaXggYSBmZXcgV29MIGlzc3VlcwoKIGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2Fk Y29tL0tjb25maWcgICAgICAgICAgICAgIHwgICAxMSArCiBkcml2ZXJzL25ldC9ldGhlcm5ldC9i cm9hZGNvbS9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgIDEgKwogZHJpdmVycy9uZXQvZXRoZXJu ZXQvYnJvYWRjb20vYXNwMi9NYWtlZmlsZSAgICAgICAgfCAgICAyICsKIGRyaXZlcnMvbmV0L2V0 aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmMgICAgICAgIHwgIDcyNyArKysrKysrKysrKwog ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3AuaCAgICAgICAgfCAgNTA0 ICsrKysrKysrCiAuLi4vbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2V0aHRvb2wu YyAgICB8ICAgNDAgKwogZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3Bf aW50Zi5jICAgfCAxMzYzICsrKysrKysrKysrKysrKys9CisrKysKIC4uLi9uZXQvZXRoZXJuZXQv YnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zl9kZWZzLmggIHwgIDE5NiArKysKIDggZmlsZXMgY2hh bmdlZCwgMjg0NCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQv ZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcC5oCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfZXRodG9v bC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNw Mi9iY21hc3BfaW50Zi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQv YnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zl9kZWZzLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25l dC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYj0Kcm9h ZGNvbS9LY29uZmlnCmluZGV4IDk0ODU4NmJmMWI1Yi4uZDQxNjYxNDExNDVkIDEwMDY0NAotLS0g YS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0 L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWcKQEAgLTI1NSw0ICsyNTUsMTUgQEAgY29uZmlnIEJO WFRfSFdNT04KIAkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGV4cG9zZSB0aGUgdGhlcm1hbCBzZW5z b3IgZGF0YSBvbiBOZXRYdHJlbWUtQy9FCiAJICBkZXZpY2VzLCB2aWEgdGhlIGh3bW9uIHN5c2Zz IGludGVyZmFjZS4KPTIwCitjb25maWcgQkNNQVNQCisJdHJpc3RhdGUgIkJyb2FkY29tIEFTUCAy LjAgRXRoZXJuZXQgc3VwcG9ydCIKKwlkZWZhdWx0IEFSQ0hfQlJDTVNUQgorCWRlcGVuZHMgb24g T0YKKwlzZWxlY3QgTUlJCisJc2VsZWN0IFBIWUxJQgorCXNlbGVjdCBNRElPX0JDTV9VTklNQUMK KwloZWxwCisJICBUaGlzIGNvbmZpZ3VyYXRpb24gZW5hYmxlcyB0aGUgQnJvYWRjb20gQVNQIDIu MCBFdGhlcm5ldCBjb250cm9sbGVyCisJICBkcml2ZXIgd2hpY2ggaXMgcHJlc2VudCBpbiBCcm9h ZGNvbSBTVEIgU29DcyBzdWNoIGFzIDcyMTY1LgorCiBlbmRpZiAjIE5FVF9WRU5ET1JfQlJPQURD T00KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL01ha2VmaWxlIGIv ZHJpdmVycy9uZXQvZXRoZXJuZXQvPQpicm9hZGNvbS9NYWtlZmlsZQppbmRleCAwZGRmYjViNWQ1 M2MuLmJhYzVjYjZhZDBjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRj b20vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vTWFrZWZpbGUK QEAgLTE3LDMgKzE3LDQgQEAgb2JqLSQoQ09ORklHX0JHTUFDX0JDTUEpICs9M0QgYmdtYWMtYmNt YS5vIGJnbWFjLWJjbWEtbWRpPQpvLm8KIG9iai0kKENPTkZJR19CR01BQ19QTEFURk9STSkgKz0z RCBiZ21hYy1wbGF0Zm9ybS5vCiBvYmotJChDT05GSUdfU1lTVEVNUE9SVCkgKz0zRCBiY21zeXNw b3J0Lm8KIG9iai0kKENPTkZJR19CTlhUKSArPTNEIGJueHQvCitvYmotJChDT05GSUdfQkNNQVNQ KSArPTNEIGFzcDIvCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9h c3AyL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZT0Kcm5ldC9icm9hZGNvbS9hc3AyL01ha2Vm aWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZTA3NTUwMzE1Zjgz Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9N YWtlZmlsZQpAQCAtMCwwICsxLDIgQEAKK29iai0kKENPTkZJR19CQ01BU1ApICs9M0QgYmNtLWFz cC5vCitiY20tYXNwLW9ianMgOj0zRCBiY21hc3AubyBiY21hc3BfaW50Zi5vIGJjbWFzcF9ldGh0 b29sLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNt YXNwLmMgYi9kcml2ZXJzL25ldC9ldGhlPQpybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41ZGJkOWZjZGQyM2YKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcC5j CkBAIC0wLDAgKzEsNzI3IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAor LyoKKyAqIEJyb2FkY29tIFNUQiBBU1AgMi4wIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykg MjAyMyBCcm9hZGNvbQorICovCisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNs dWRlIDxsaW51eC9pZl92bGFuLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUg PGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUg PGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2lu Y2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1 ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKKyNpbmNs dWRlICJiY21hc3AuaCIKKyNpbmNsdWRlICJiY21hc3BfaW50Zl9kZWZzLmgiCisKK3N0YXRpYyB2 b2lkIF9pbnRyMl9tYXNrX2NsZWFyKHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiwgdTMyIG1hc2sp Cit7CisJaW50cjJfY29yZV93bChwcml2LCBtYXNrLCBBU1BfSU5UUjJfTUFTS19DTEVBUik7CisJ cHJpdi0+aXJxX21hc2sgJj0zRCB+bWFzazsKK30KKworc3RhdGljIHZvaWQgX2ludHIyX21hc2tf c2V0KHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiwgdTMyIG1hc2spCit7CisJaW50cjJfY29yZV93 bChwcml2LCBtYXNrLCBBU1BfSU5UUjJfTUFTS19TRVQpOworCXByaXYtPmlycV9tYXNrIHw9M0Qg bWFzazsKK30KKwordm9pZCBiY21hc3BfZW5hYmxlX3R4X2lycShzdHJ1Y3QgYmNtYXNwX2ludGYg KmludGYsIGludCBlbikKK3sKKwlzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYgPTNEIGludGYtPnBh cmVudDsKKworCWlmIChlbikKKwkJX2ludHIyX21hc2tfY2xlYXIocHJpdiwgQVNQX0lOVFIyX1RY X0RFU0MoaW50Zi0+Y2hhbm5lbCkpOworCWVsc2UKKwkJX2ludHIyX21hc2tfc2V0KHByaXYsIEFT UF9JTlRSMl9UWF9ERVNDKGludGYtPmNoYW5uZWwpKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJj bWFzcF9lbmFibGVfdHhfaXJxKTsKKwordm9pZCBiY21hc3BfZW5hYmxlX3J4X2lycShzdHJ1Y3Qg YmNtYXNwX2ludGYgKmludGYsIGludCBlbikKK3sKKwlzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYg PTNEIGludGYtPnBhcmVudDsKKworCWlmIChlbikKKwkJX2ludHIyX21hc2tfY2xlYXIocHJpdiwg QVNQX0lOVFIyX1JYX0VDSChpbnRmLT5jaGFubmVsKSk7CisJZWxzZQorCQlfaW50cjJfbWFza19z ZXQocHJpdiwgQVNQX0lOVFIyX1JYX0VDSChpbnRmLT5jaGFubmVsKSk7Cit9CitFWFBPUlRfU1lN Qk9MX0dQTChiY21hc3BfZW5hYmxlX3J4X2lycSk7CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9pbnRy Ml9tYXNrX3NldF9hbGwoc3RydWN0IGJjbWFzcF9wcml2ICpwcml2KQoreworCV9pbnRyMl9tYXNr X3NldChwcml2LCAweGZmZmZmZmZmKTsKKwlwcml2LT5pcnFfbWFzayA9M0QgMHhmZmZmZmZmZjsK K30KKworc3RhdGljIHZvaWQgYmNtYXNwX2ludHIyX2NsZWFyX2FsbChzdHJ1Y3QgYmNtYXNwX3By aXYgKnByaXYpCit7CisJaW50cjJfY29yZV93bChwcml2LCAweGZmZmZmZmZmLCBBU1BfSU5UUjJf Q0xFQVIpOworfQorCitzdGF0aWMgdm9pZCBiY21hc3BfaW50cjJfaGFuZGxpbmcoc3RydWN0IGJj bWFzcF9pbnRmICppbnRmLCB1MzIgc3RhdHVzKQoreworCWlmIChzdGF0dXMgJiBBU1BfSU5UUjJf UlhfRUNIKGludGYtPmNoYW5uZWwpKSB7CisJCWlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVw KCZpbnRmLT5yeF9uYXBpKSkpIHsKKwkJCWJjbWFzcF9lbmFibGVfcnhfaXJxKGludGYsIDApOwor CQkJX19uYXBpX3NjaGVkdWxlX2lycW9mZigmaW50Zi0+cnhfbmFwaSk7CisJCX0KKwl9CisKKwlp ZiAoc3RhdHVzICYgQVNQX0lOVFIyX1RYX0RFU0MoaW50Zi0+Y2hhbm5lbCkpIHsKKwkJaWYgKGxp a2VseShuYXBpX3NjaGVkdWxlX3ByZXAoJmludGYtPnR4X25hcGkpKSkgeworCQkJYmNtYXNwX2Vu YWJsZV90eF9pcnEoaW50ZiwgMCk7CisJCQlfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKCZpbnRmLT50 eF9uYXBpKTsKKwkJfQorCX0KK30KKworc3RhdGljIGlycXJldHVybl90IGJjbWFzcF9pc3IoaW50 IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYgPTNEIGRhdGE7 CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmOworCXUzMiBzdGF0dXM7CisJaW50IGk7CisKKwlz dGF0dXMgPTNEIGludHIyX2NvcmVfcmwocHJpdiwgQVNQX0lOVFIyX1NUQVRVUykgJgorCQl+aW50 cjJfY29yZV9ybChwcml2LCBBU1BfSU5UUjJfTUFTS19TVEFUVVMpOworCisJaW50cjJfY29yZV93 bChwcml2LCBzdGF0dXMsIEFTUF9JTlRSMl9DTEVBUik7CisKKwlpZiAodW5saWtlbHkoc3RhdHVz ID0zRD0zRCAwKSkgeworCQlkZXZfd2FybigmcHJpdi0+cGRldi0+ZGV2LCAibDIgc3B1cmlvdXMg aW50ZXJydXB0XG4iKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCS8qIEhhbmRsZSBpbnRm ZXJmYWNlcyAqLworCWZvciAoaSA9M0QgMDsgaSA8IHByaXYtPmludGZfY291bnQ7IGkrKykgewor CQlpbnRmID0zRCBwcml2LT5pbnRmc1tpXTsKKwkJYmNtYXNwX2ludHIyX2hhbmRsaW5nKGludGYs IHN0YXR1cyk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCit2b2lkIGJjbWFzcF9m bHVzaF9yeF9wb3J0KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZikKK3sKKwlzdHJ1Y3QgYmNtYXNw X3ByaXYgKnByaXYgPTNEIGludGYtPnBhcmVudDsKKwl1MzIgbWFzazsKKworCXN3aXRjaCAoaW50 Zi0+cG9ydCkgeworCWNhc2UgMDoKKwkJbWFzayA9M0QgQVNQX0NUUkxfVU1BQzBfRkxVU0hfTUFT SzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQltYXNrID0zRCBBU1BfQ1RSTF9VTUFDMV9GTFVTSF9N QVNLOworCQlicmVhazsKKwljYXNlIDI6CisJCW1hc2sgPTNEIEFTUF9DVFJMX1NQQl9GTFVTSF9N QVNLOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBOb3QgdmFsaWQgcG9ydCAqLworCQlyZXR1 cm47CisJfQorCisJcnhfY3RybF9jb3JlX3dsKHByaXYsIG1hc2ssIHByaXYtPmh3X2luZm8tPnJ4 X2N0cmxfZmx1c2gpOworfQorCitzdGF0aWMgdm9pZCBiY21hc3BfYWRkcl90b191aW50KHVuc2ln bmVkIGNoYXIgKmFkZHIsIHUzMiAqaGlnaCwgdTMyICpsb3cpCit7CisJKmhpZ2ggPTNEICh1MzIp KGFkZHJbMF0gPDwgOCB8IGFkZHJbMV0pOworCSpsb3cgPTNEICh1MzIpKGFkZHJbMl0gPDwgMjQg fCBhZGRyWzNdIDw8IDE2IHwgYWRkcls0XSA8PCA4IHwKKwkJICAgICBhZGRyWzVdKTsKK30KKwor c3RhdGljIHZvaWQgYmNtYXNwX3NldF9tZGFfZmlsdGVyKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50 ZiwKKwkJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsCisJCQkJICB1bnNpZ25lZCBjaGFy ICptYXNrLAorCQkJCSAgdW5zaWduZWQgaW50IGkpCit7CisJc3RydWN0IGJjbWFzcF9wcml2ICpw cml2ID0zRCBpbnRmLT5wYXJlbnQ7CisJdTMyIGFkZHJfaCwgYWRkcl9sLCBtYXNrX2gsIG1hc2tf bDsKKworCS8qIFNldCBsb2NhbCBjb3B5ICovCisJZXRoZXJfYWRkcl9jb3B5KHByaXYtPm1kYV9m aWx0ZXJzW2ldLm1hc2ssIG1hc2spOworCWV0aGVyX2FkZHJfY29weShwcml2LT5tZGFfZmlsdGVy c1tpXS5hZGRyLCBhZGRyKTsKKworCS8qIFdyaXRlIHRvIEhXICovCisJYmNtYXNwX2FkZHJfdG9f dWludChwcml2LT5tZGFfZmlsdGVyc1tpXS5tYXNrLCAmbWFza19oLCAmbWFza19sKTsKKwliY21h c3BfYWRkcl90b191aW50KHByaXYtPm1kYV9maWx0ZXJzW2ldLmFkZHIsICZhZGRyX2gsICZhZGRy X2wpOworCXJ4X2ZpbHRlcl9jb3JlX3dsKHByaXYsIGFkZHJfaCwgQVNQX1JYX0ZJTFRFUl9NREFf UEFUX0goaSkpOworCXJ4X2ZpbHRlcl9jb3JlX3dsKHByaXYsIGFkZHJfbCwgQVNQX1JYX0ZJTFRF Ul9NREFfUEFUX0woaSkpOworCXJ4X2ZpbHRlcl9jb3JlX3dsKHByaXYsIG1hc2tfaCwgQVNQX1JY X0ZJTFRFUl9NREFfTVNLX0goaSkpOworCXJ4X2ZpbHRlcl9jb3JlX3dsKHByaXYsIG1hc2tfbCwg QVNQX1JYX0ZJTFRFUl9NREFfTVNLX0woaSkpOworfQorCitzdGF0aWMgdm9pZCBiY21hc3BfZW5f bWRhX2ZpbHRlcihzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGJvb2wgZW4sCisJCQkJIHVuc2ln bmVkIGludCBpKQoreworCXN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiA9M0QgaW50Zi0+cGFyZW50 OworCisJaWYgKHByaXYtPm1kYV9maWx0ZXJzW2ldLmVuID0zRD0zRCBlbikKKwkJcmV0dXJuOwor CisJcHJpdi0+bWRhX2ZpbHRlcnNbaV0uZW4gPTNEIGVuOworCXByaXYtPm1kYV9maWx0ZXJzW2ld LnBvcnQgPTNEIGludGYtPnBvcnQ7CisKKwlyeF9maWx0ZXJfY29yZV93bChwcml2LCAoKGludGYt PmNoYW5uZWwgKyA4KSB8CisJCQkgIChlbiA8PCBBU1BfUlhfRklMVEVSX01EQV9DRkdfRU5fU0hJ RlQpIHwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9NREFfQ0ZHX1VNQ19TRUwoaW50Zi0+cG9ydCkpLAor CQkJICBBU1BfUlhfRklMVEVSX01EQV9DRkcoaSkpOworfQorCisvKiBUaGVyZSBhcmUgMzIgTURB IGZpbHRlcnMgc2hhcmVkIGJldHdlZW4gYWxsIHBvcnRzLCB3ZSByZXNlcnZlIDQgZmlsdGVycz0K IHBlcgorICogcG9ydCBmb3IgdGhlIGZvbGxvd2luZy4KKyAqIC0gUHJvbWlzYzogRmlsdGVyIHRv IGFsbG93IGFsbCBwYWNrZXRzIHdoZW4gcHJvbWlzYyBpcyBlbmFibGVkCisgKiAtIEFsbCBNdWx0 aWNhc3QKKyAqIC0gQnJvYWRjYXN0CisgKiAtIE93biBhZGRyZXNzCisgKgorICogVGhlIHJlc2Vy dmVkIGZpbHRlcnMgYXJlIGlkZW50aWZpZWQgYXMgc28uCisgKiAtIFByb21pc2M6IChpbmRleCAq IDQpICsgMAorICogLSBBbGwgTXVsdGljYXN0OiAoaW5kZXggKiA0KSArIDEKKyAqIC0gQnJvYWRj YXN0OiAoaW5kZXggKiA0KSArIDIKKyAqIC0gT3duIGFkZHJlc3M6IChpbmRleCAqIDQpICsgMwor ICovCitlbnVtIGFzcF9yeF9maWx0ZXJfaWQgeworCUFTUF9SWF9GSUxURVJfTURBX1BST01JU0Mg PTNEIDAsCisJQVNQX1JYX0ZJTFRFUl9NREFfQUxMTVVMVEksCisJQVNQX1JYX0ZJTFRFUl9NREFf QlJPQURDQVNULAorCUFTUF9SWF9GSUxURVJfTURBX09XTl9BRERSLAorCUFTUF9SWF9GSUxURVJf TURBX1JFU19DT1VOVCwKK307CisKKyNkZWZpbmUgQVNQX1JYX0ZJTFRfTURBX1JFU19DT1VOVChp bnRmKQkoKGludGYpLT5wYXJlbnQtPmludGZfY291bnQgXAorCQkJCQkgKiBBU1BfUlhfRklMVEVS X01EQV9SRVNfQ09VTlQpCisKKyNkZWZpbmUgQVNQX1JYX0ZJTFRfTURBKGludGYsIG5hbWUpCSgo KGludGYpLT5pbmRleCAqIFwKKwkJCQkJICBBU1BfUlhfRklMVEVSX01EQV9SRVNfQ09VTlQpIFwK KwkJCQkJICsgQVNQX1JYX0ZJTFRFUl9NREFfIyNuYW1lKQorCit2b2lkIGJjbWFzcF9zZXRfcHJv bWlzYyhzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGJvb2wgZW4pCit7CisJdW5zaWduZWQgaW50 IGkgPTNEIEFTUF9SWF9GSUxUX01EQShpbnRmLCBQUk9NSVNDKTsKKwl1bnNpZ25lZCBjaGFyIHBy b21pc2NbRVRIX0FMRU5dOworCisJZXRoX3plcm9fYWRkcihwcm9taXNjKTsKKwkvKiBTZXQgbWFz ayB0byAwMDowMDowMDowMDowMDowMCB0byBtYXRjaCBhbGwgcGFja2V0cyAqLworCWJjbWFzcF9z ZXRfbWRhX2ZpbHRlcihpbnRmLCBwcm9taXNjLCBwcm9taXNjLCBpKTsKKwliY21hc3BfZW5fbWRh X2ZpbHRlcihpbnRmLCBlbiwgaSk7Cit9CisKK3ZvaWQgYmNtYXNwX3NldF9hbGxtdWx0aShzdHJ1 Y3QgYmNtYXNwX2ludGYgKmludGYsIGJvb2wgZW4pCit7CisJdW5zaWduZWQgY2hhciBhbGxtdWx0 aVtdID0zRCB7MHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07CisJdW5zaWduZWQg aW50IGkgPTNEIEFTUF9SWF9GSUxUX01EQShpbnRmLCBBTExNVUxUSSk7CisKKwkvKiBTZXQgbWFz ayB0byAwMTowMDowMDowMDowMDowMCB0byBtYXRjaCBhbGwgbXVsdGljYXN0ICovCisJYmNtYXNw X3NldF9tZGFfZmlsdGVyKGludGYsIGFsbG11bHRpLCBhbGxtdWx0aSwgaSk7CisJYmNtYXNwX2Vu X21kYV9maWx0ZXIoaW50ZiwgZW4sIGkpOworfQorCit2b2lkIGJjbWFzcF9zZXRfYnJvYWQoc3Ry dWN0IGJjbWFzcF9pbnRmICppbnRmLCBib29sIGVuKQoreworCXVuc2lnbmVkIGludCBpID0zRCBB U1BfUlhfRklMVF9NREEoaW50ZiwgQlJPQURDQVNUKTsKKwl1bnNpZ25lZCBjaGFyIGFkZHJbRVRI X0FMRU5dOworCisJZXRoX2Jyb2FkY2FzdF9hZGRyKGFkZHIpOworCWJjbWFzcF9zZXRfbWRhX2Zp bHRlcihpbnRmLCBhZGRyLCBhZGRyLCBpKTsKKwliY21hc3BfZW5fbWRhX2ZpbHRlcihpbnRmLCBl biwgaSk7Cit9CisKK3ZvaWQgYmNtYXNwX3NldF9vYWRkcihzdHJ1Y3QgYmNtYXNwX2ludGYgKmlu dGYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsCisJCSAgICAgIGJvb2wgZW4pCit7CisJdW5z aWduZWQgY2hhciBtYXNrW10gPTNEIHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZm fTsKKwl1bnNpZ25lZCBpbnQgaSA9M0QgQVNQX1JYX0ZJTFRfTURBKGludGYsIE9XTl9BRERSKTsK KworCWJjbWFzcF9zZXRfbWRhX2ZpbHRlcihpbnRmLCBhZGRyLCBtYXNrLCBpKTsKKwliY21hc3Bf ZW5fbWRhX2ZpbHRlcihpbnRmLCBlbiwgaSk7Cit9CisKK3ZvaWQgYmNtYXNwX2Rpc2FibGVfYWxs X2ZpbHRlcnMoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmKQoreworCXN0cnVjdCBiY21hc3BfcHJp diAqcHJpdiA9M0QgaW50Zi0+cGFyZW50OworCXVuc2lnbmVkIGludCBpOworCisJLyogRGlzYWJs ZSBhbGwgZmlsdGVycyBoZWxkIGJ5IHRoaXMgcG9ydCAqLworCWZvciAoaSA9M0QgQVNQX1JYX0ZJ TFRfTURBX1JFU19DT1VOVChpbnRmKTsgaSA8IE5VTV9NREFfRklMVEVSUzsgaSsrKSB7CisJCWlm IChwcml2LT5tZGFfZmlsdGVyc1tpXS5lbiAmJgorCQkgICAgcHJpdi0+bWRhX2ZpbHRlcnNbaV0u cG9ydCA9M0Q9M0QgaW50Zi0+cG9ydCkKKwkJCWJjbWFzcF9lbl9tZGFfZmlsdGVyKGludGYsIDAs IGkpOworCX0KK30KKworc3RhdGljIGludCBiY21hc3BfY29tYmluZV9zZXRfZmlsdGVyKHN0cnVj dCBiY21hc3BfaW50ZiAqaW50ZiwKKwkJCQkgICAgIHVuc2lnbmVkIGNoYXIgKmFkZHIsIHVuc2ln bmVkIGNoYXIgKm1hc2ssCisJCQkJICAgICBpbnQgaSkKK3sKKwlzdHJ1Y3QgYmNtYXNwX3ByaXYg KnByaXYgPTNEIGludGYtPnBhcmVudDsKKwl1NjQgYWRkcjEsIGFkZHIyLCBtYXNrMSwgbWFzazIs IG1hc2szOworCisJLyogU3dpdGNoIHRvIHU2NCB0byBoZWxwIHdpdGggdGhlIGNhbGN1bGF0aW9u cyAqLworCWFkZHIxID0zRCBldGhlcl9hZGRyX3RvX3U2NChwcml2LT5tZGFfZmlsdGVyc1tpXS5h ZGRyKTsKKwltYXNrMSA9M0QgZXRoZXJfYWRkcl90b191NjQocHJpdi0+bWRhX2ZpbHRlcnNbaV0u bWFzayk7CisJYWRkcjIgPTNEIGV0aGVyX2FkZHJfdG9fdTY0KGFkZHIpOworCW1hc2syID0zRCBl dGhlcl9hZGRyX3RvX3U2NChtYXNrKTsKKworCS8qIENoZWNrIGlmIG9uZSBmaWx0ZXIgcmVzaWRl cyB3aXRoaW4gdGhlIG90aGVyICovCisJbWFzazMgPTNEIG1hc2sxICYgbWFzazI7CisJaWYgKG1h c2szID0zRD0zRCBtYXNrMSAmJiAoKGFkZHIxICYgbWFzazEpID0zRD0zRCAoYWRkcjIgJiBtYXNr MSkpKSB7CisJCS8qIEZpbHRlciAyIHJlc2lkZXMgd2l0aGluIGZpbHRlciAxLCBzbyBldmVyeXRo aW5nIGlzIGdvb2QgKi8KKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChtYXNrMyA9M0Q9M0QgbWFz azIgJiYgKChhZGRyMSAmIG1hc2syKSA9M0Q9M0QgKGFkZHIyICYgbWFzazIpKT0KKSB7CisJCS8q IEZpbHRlciAxIHJlc2lkZXMgd2l0aGluIGZpbHRlciAyLCBzbyBzd2FwIGZpbHRlcnMgKi8KKwkJ YmNtYXNwX3NldF9tZGFfZmlsdGVyKGludGYsIGFkZHIsIG1hc2ssIGkpOworCQlyZXR1cm4gMDsK Kwl9CisKKwkvKiBVbmFibGUgdG8gY29tYmluZSAqLworCXJldHVybiAtRUlOVkFMOworfQorCitp bnQgYmNtYXNwX3NldF9lbl9tZGFfZmlsdGVyKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgdW5z aWduZWQgY2hhciAqYWRkciwKKwkJCSAgICAgdW5zaWduZWQgY2hhciAqbWFzaykKK3sKKwlzdHJ1 Y3QgYmNtYXNwX3ByaXYgKnByaXYgPTNEIGludGYtPnBhcmVudDsKKwlpbnQgaSwgcmV0OworCisJ Zm9yIChpID0zRCBBU1BfUlhfRklMVF9NREFfUkVTX0NPVU5UKGludGYpOyBpIDwgTlVNX01EQV9G SUxURVJTOyBpKyspIHsKKwkJLyogSWYgZmlsdGVyIG5vdCBlbmFibGVkIG9yIGJlbG9uZ3MgdG8g YW5vdGhlciBwb3J0IHNraXAgKi8KKwkJaWYgKCFwcml2LT5tZGFfZmlsdGVyc1tpXS5lbiB8fAor CQkgICAgcHJpdi0+bWRhX2ZpbHRlcnNbaV0ucG9ydCAhPTNEIGludGYtPnBvcnQpCisJCQljb250 aW51ZTsKKworCQkvKiBBdHRlbXB0IHRvIGNvbWJpbmUgZmlsdGVycyAqLworCQlyZXQgPTNEIGJj bWFzcF9jb21iaW5lX3NldF9maWx0ZXIoaW50ZiwgYWRkciwgbWFzaywgaSk7CisJCWlmICghcmV0 KSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCS8qIENyZWF0ZSBuZXcgZmlsdGVyIGlmIHBv c3NpYmxlICovCisJZm9yIChpID0zRCBBU1BfUlhfRklMVF9NREFfUkVTX0NPVU5UKGludGYpOyBp IDwgTlVNX01EQV9GSUxURVJTOyBpKyspIHsKKwkJaWYgKHByaXYtPm1kYV9maWx0ZXJzW2ldLmVu KQorCQkJY29udGludWU7CisKKwkJYmNtYXNwX3NldF9tZGFfZmlsdGVyKGludGYsIGFkZHIsIG1h c2ssIGkpOworCQliY21hc3BfZW5fbWRhX2ZpbHRlcihpbnRmLCAxLCBpKTsKKwkJcmV0dXJuIDA7 CisJfQorCisJLyogTm8gcm9vbSBmb3IgbmV3IGZpbHRlciAqLworCXJldHVybiAtRUlOVkFMOwor fQorCitzdGF0aWMgdm9pZCBiY21hc3BfY29yZV9pbml0X2ZpbHRlcnMoc3RydWN0IGJjbWFzcF9w cml2ICpwcml2KQoreworCWludCBpOworCisJLyogRGlzYWJsZSBhbGwgZmlsdGVycyBhbmQgcmVz ZXQgc29mdHdhcmUgdmlldyBzaW5jZSB0aGUgSFcKKwkgKiBjYW4gbG9zZSBjb250ZXh0IHdoaWxl IGluIGRlZXAgc2xlZXAgc3VzcGVuZCBzdGF0ZXMKKwkgKi8KKwlmb3IgKGkgPTNEIDA7IGkgPCBO VU1fTURBX0ZJTFRFUlM7IGkrKykgeworCQlyeF9maWx0ZXJfY29yZV93bChwcml2LCAweDAsIEFT UF9SWF9GSUxURVJfTURBX0NGRyhpKSk7CisJCXByaXYtPm1kYV9maWx0ZXJzW2ldLmVuID0zRCAw OworCX0KKworCS8qIFRvcCBsZXZlbCBmaWx0ZXIgZW5hYmxlIGJpdCBzaG91bGQgYmUgZW5hYmxl ZCBhdCBhbGwgdGltZXMsIHNldAorCSAqIEdFTl9XQUtFX0NMRUFSIHRvIGNsZWFyIHRoZSBuZXR3 b3JrIGZpbHRlciB3YWtlLXVwIHdoaWNoIHdvdWxkCisJICogb3RoZXJ3aXNlIGJlIHN0aWNreQor CSAqLworCXJ4X2ZpbHRlcl9jb3JlX3dsKHByaXYsIChBU1BfUlhfRklMVEVSX09QVVRfRU4gfAor CQkJICBBU1BfUlhfRklMVEVSX01EQV9FTiB8CisJCQkgIEFTUF9SWF9GSUxURVJfR0VOX1dLX0NM UiB8CisJCQkgIEFTUF9SWF9GSUxURVJfTlRfRkxUX0VOKSwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9C TEtfQ1RSTCk7Cit9CisKKy8qIEFTUCBjb3JlIGluaXRpYWxpemF0aW9uICovCitzdGF0aWMgdm9p ZCBiY21hc3BfY29yZV9pbml0KHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdikKK3sKKwl0eF9hbmFs eXRpY3NfY29yZV93bChwcml2LCAweDAsIEFTUF9UWF9BTkFMWVRJQ1NfQ1RSTCk7CisJcnhfYW5h bHl0aWNzX2NvcmVfd2wocHJpdiwgMHg0LCBBU1BfUlhfQU5BTFlUSUNTX0NUUkwpOworCisJcnhf ZWRwa3RfY29yZV93bChwcml2LCAoQVNQX0VEUEtUX0hEUl9TWl8xMjggPDwgQVNQX0VEUEtUX0hE Ul9TWl9TSElGVCksCisJCQkgQVNQX0VEUEtUX0hEUl9DRkcpOworCXJ4X2VkcGt0X2NvcmVfd2wo cHJpdiwKKwkJCSAoQVNQX0VEUEtUX0VORElfQlRfU1dQX1dEIDw8IEFTUF9FRFBLVF9FTkRJX0RF U0NfU0hJRlQpLAorCQkJIEFTUF9FRFBLVF9FTkRJKTsKKworCXJ4X2VkcGt0X2NvcmVfd2wocHJp diwgMHgxYiwgQVNQX0VEUEtUX0JVUlNUX0JVRl9QU0NBTF9UT1VUKTsKKwlyeF9lZHBrdF9jb3Jl X3dsKHByaXYsIDB4M2U4LCBBU1BfRURQS1RfQlVSU1RfQlVGX1dSSVRFX1RPVVQpOworCXJ4X2Vk cGt0X2NvcmVfd2wocHJpdiwgMHgzZTgsIEFTUF9FRFBLVF9CVVJTVF9CVUZfUkVBRF9UT1VUKTsK KworCXJ4X2VkcGt0X2NvcmVfd2wocHJpdiwgQVNQX0VEUEtUX0VOQUJMRV9FTiwgQVNQX0VEUEtU X0VOQUJMRSk7CisKKwkvKiBEaXNhYmxlIGFuZCBjbGVhciBib3RoIFVuaU1BQydzIHdha2UtdXAg aW50ZXJydXB0cyB0byBhdm9pZAorCSAqIHN0aWNreSBpbnRlcnJ1cHRzLgorCSAqLworCV9pbnRy Ml9tYXNrX3NldChwcml2LCBBU1BfSU5UUjJfVU1DMF9XQUtFIHwgQVNQX0lOVFIyX1VNQzFfV0FL RSk7CisJaW50cjJfY29yZV93bChwcml2LCBBU1BfSU5UUjJfVU1DMF9XQUtFIHwgQVNQX0lOVFIy X1VNQzFfV0FLRSwKKwkJICAgICAgQVNQX0lOVFIyX0NMRUFSKTsKK30KKworc3RhdGljIHZvaWQg YmNtYXNwX2NvcmVfY2xvY2tfc2VsZWN0KHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiwgYm9vbCBz bG93KQoreworCXUzMiByZWc7CisKKwlyZWcgPTNEIGN0cmxfY29yZV9ybChwcml2LCBBU1BfQ1RS TF9DT1JFX0NMT0NLX1NFTEVDVCk7CisJaWYgKHNsb3cpCisJCXJlZyAmPTNEIH5BU1BfQ1RSTF9D T1JFX0NMT0NLX1NFTEVDVF9NQUlOOworCWVsc2UKKwkJcmVnIHw9M0QgQVNQX0NUUkxfQ09SRV9D TE9DS19TRUxFQ1RfTUFJTjsKKwljdHJsX2NvcmVfd2wocHJpdiwgcmVnLCBBU1BfQ1RSTF9DT1JF X0NMT0NLX1NFTEVDVCk7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9jb3JlX2Nsb2NrX3NldF9s bChzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYsIHUzMiBjbHIsIHUzPQoyIHNldCkKK3sKKwl1MzIg cmVnOworCisJcmVnID0zRCBjdHJsX2NvcmVfcmwocHJpdiwgQVNQX0NUUkxfQ0xPQ0tfQ1RSTCk7 CisJcmVnICY9M0QgfmNscjsKKwlyZWcgfD0zRCBzZXQ7CisJY3RybF9jb3JlX3dsKHByaXYsIHJl ZywgQVNQX0NUUkxfQ0xPQ0tfQ1RSTCk7CisKKwlyZWcgPTNEIGN0cmxfY29yZV9ybChwcml2LCBB U1BfQ1RSTF9TQ1JBVENIXzApOworCXJlZyAmPTNEIH5jbHI7CisJcmVnIHw9M0Qgc2V0OworCWN0 cmxfY29yZV93bChwcml2LCByZWcsIEFTUF9DVFJMX1NDUkFUQ0hfMCk7Cit9CisKK3N0YXRpYyB2 b2lkIGJjbWFzcF9jb3JlX2Nsb2NrX3NldChzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYsIHUzMiBj bHIsIHUzMiBzPQpldCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2ly cXNhdmUoJnByaXYtPmNsa19sb2NrLCBmbGFncyk7CisJYmNtYXNwX2NvcmVfY2xvY2tfc2V0X2xs KHByaXYsIGNsciwgc2V0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5jbGtfbG9j aywgZmxhZ3MpOworfQorCit2b2lkIGJjbWFzcF9jb3JlX2Nsb2NrX3NldF9pbnRmKHN0cnVjdCBi Y21hc3BfaW50ZiAqaW50ZiwgYm9vbCBlbikKK3sKKwl1MzIgaW50Zl9tYXNrID0zRCBBU1BfQ1RS TF9DTE9DS19DVFJMX0FTUF9SR01JSV9ESVMoaW50Zi0+cG9ydCk7CisJc3RydWN0IGJjbWFzcF9w cml2ICpwcml2ID0zRCBpbnRmLT5wYXJlbnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIg cmVnOworCisJLyogV2hlbiBlbmFibGluZyBhbiBpbnRlcmZhY2UsIGlmIHRoZSBSWCBvciBUWCBj bG9ja3Mgd2VyZSBub3QgZW5hYmxlZCwKKwkgKiBlbmFibGUgdGhlbS4gQ29udmVyc2VseSwgd2hp bGUgZGlzYWJsaW5nIGFuIGludGVyZmFjZSwgaWYgdGhpcyBpcworCSAqIHRoZSBsYXN0IG9uZSBl bmFibGVkLCB3ZSBjYW4gdHVybiBvZmYgdGhlIHNoYXJlZCBSWCBhbmQgVFggY2xvY2tzIGFzCisJ ICogd2VsbC4gV2UgY29udHJvbCBlbmFibGUgYml0cyB3aGljaCBpcyB3aHkgd2UgdGVzdCBmb3Ig ZXF1YWxpdHkgb24KKwkgKiB0aGUgUkdNSUkgY2xvY2sgYml0IG1hc2suCisJICovCisJc3Bpbl9s b2NrX2lycXNhdmUoJnByaXYtPmNsa19sb2NrLCBmbGFncyk7CisJaWYgKGVuKSB7CisJCWludGZf bWFzayB8PTNEIEFTUF9DVFJMX0NMT0NLX0NUUkxfQVNQX1RYX0RJU0FCTEUgfAorCQkJICAgICBB U1BfQ1RSTF9DTE9DS19DVFJMX0FTUF9SWF9ESVNBQkxFOworCQliY21hc3BfY29yZV9jbG9ja19z ZXRfbGwocHJpdiwgaW50Zl9tYXNrLCAwKTsKKwl9IGVsc2UgeworCQlyZWcgPTNEIGN0cmxfY29y ZV9ybChwcml2LCBBU1BfQ1RSTF9TQ1JBVENIXzApIHwgaW50Zl9tYXNrOworCQlpZiAoKHJlZyAm IEFTUF9DVFJMX0NMT0NLX0NUUkxfQVNQX1JHTUlJX01BU0spID0zRD0zRAorCQkgICAgQVNQX0NU UkxfQ0xPQ0tfQ1RSTF9BU1BfUkdNSUlfTUFTSykKKwkJCWludGZfbWFzayB8PTNEIEFTUF9DVFJM X0NMT0NLX0NUUkxfQVNQX1RYX0RJU0FCTEUgfAorCQkJCSAgICAgQVNQX0NUUkxfQ0xPQ0tfQ1RS TF9BU1BfUlhfRElTQUJMRTsKKwkJYmNtYXNwX2NvcmVfY2xvY2tfc2V0X2xsKHByaXYsIDAsIGlu dGZfbWFzayk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmNsa19sb2NrLCBm bGFncyk7Cit9CisKK3N0YXRpYyBpbnQgYmNtYXNwX2lzX3BvcnRfdmFsaWQoc3RydWN0IGJjbWFz cF9wcml2ICpwcml2LCBpbnQgcG9ydCkKK3sKKwkvKiBRdWljayBzYW5pdHkgY2hlY2sKKwkgKiAg IFBvcnRzIDAvMSByZXNlcnZlZCBmb3IgdW5pbWFjCisJICogICBNYXggc3VwcG9ydGVkIHBvcnRz IGlzIDIKKwkgKi8KKwlyZXR1cm4gcG9ydCA9M0Q9M0QgMCB8fCBwb3J0ID0zRD0zRCAxOworfQor CitzdGF0aWMgc3RydWN0IGJjbWFzcF9od19pbmZvIHYyMF9od19pbmZvID0zRCB7CisJLnJ4X2N0 cmxfZmx1c2ggPTNEIEFTUF9SWF9DVFJMX0ZMVVNILAorCS51bWFjMmZiID0zRCBVTUFDMkZCX09G RlNFVCwKKwkucnhfY3RybF9mYl9vdXRfZnJhbWVfY291bnQgPTNEIEFTUF9SWF9DVFJMX0ZCX09V VF9GUkFNRV9DT1VOVCwKKwkucnhfY3RybF9mYl9maWx0X291dF9mcmFtZV9jb3VudCA9M0QgQVNQ X1JYX0NUUkxfRkJfRklMVF9PVVRfRlJBTUVfQ09VTlQsCisJLnJ4X2N0cmxfZmJfcnhfZmlmb19k ZXB0aCA9M0QgQVNQX1JYX0NUUkxfRkJfUlhfRklGT19ERVBUSCwKK307CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgYmNtYXNwX3BsYXRfZGF0YSB2MjBfcGxhdF9kYXRhID0zRCB7CisJLmh3X2luZm8g PTNEICZ2MjBfaHdfaW5mbywKK307CisKK3N0YXRpYyBzdHJ1Y3QgYmNtYXNwX2h3X2luZm8gdjIx X2h3X2luZm8gPTNEIHsKKwkucnhfY3RybF9mbHVzaCA9M0QgQVNQX1JYX0NUUkxfRkxVU0hfMl8x LAorCS51bWFjMmZiID0zRCBVTUFDMkZCX09GRlNFVF8yXzEsCisJLnJ4X2N0cmxfZmJfb3V0X2Zy YW1lX2NvdW50ID0zRCBBU1BfUlhfQ1RSTF9GQl9PVVRfRlJBTUVfQ09VTlRfMl8xLAorCS5yeF9j dHJsX2ZiX2ZpbHRfb3V0X2ZyYW1lX2NvdW50ID0zRAorCQlBU1BfUlhfQ1RSTF9GQl9GSUxUX09V VF9GUkFNRV9DT1VOVF8yXzEsCisJLnJ4X2N0cmxfZmJfcnhfZmlmb19kZXB0aCA9M0QgQVNQX1JY X0NUUkxfRkJfUlhfRklGT19ERVBUSF8yXzEsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGJj bWFzcF9wbGF0X2RhdGEgdjIxX3BsYXRfZGF0YSA9M0QgeworCS5od19pbmZvID0zRCAmdjIxX2h3 X2luZm8sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBiY21hc3Bfb2Zf bWF0Y2hbXSA9M0QgeworCXsgLmNvbXBhdGlibGUgPTNEICJicmNtLGFzcC12Mi4wIiwgLmRhdGEg PTNEICZ2MjBfcGxhdF9kYXRhIH0sCisJeyAuY29tcGF0aWJsZSA9M0QgImJyY20sYXNwLXYyLjEi LCAuZGF0YSA9M0QgJnYyMV9wbGF0X2RhdGEgfSwKKwl7IC8qIHNlbnRpbmVsICovIH0sCit9Owor TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYmNtYXNwX29mX21hdGNoKTsKKworc3RhdGljIGNvbnN0 IHN0cnVjdCBvZl9kZXZpY2VfaWQgYmNtYXNwX21kaW9fb2ZfbWF0Y2hbXSA9M0QgeworCXsgLmNv bXBhdGlibGUgPTNEICJicmNtLGFzcC12Mi4xLW1kaW8iLCB9LAorCXsgLmNvbXBhdGlibGUgPTNE ICJicmNtLGFzcC12Mi4wLW1kaW8iLCB9LAorCXsgLyogc2VudGluZWwgKi8gfSwKK307CitNT0RV TEVfREVWSUNFX1RBQkxFKG9mLCBiY21hc3BfbWRpb19vZl9tYXRjaCk7CisKK3N0YXRpYyBpbnQg YmNtYXNwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRl dmljZV9ub2RlICpwb3J0c19ub2RlLCAqaW50Zl9ub2RlOworCWNvbnN0IHN0cnVjdCBiY21hc3Bf cGxhdF9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPTNEICZwZGV2LT5kZXY7CisJ aW50IHJldCA9M0QgMCwgaSwgY291bnQgPTNEIDAsIHBvcnQ7CisJc3RydWN0IGJjbWFzcF9wcml2 ICpwcml2OworCXN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZjsKKworCXByaXYgPTNEIGRldm1fa3ph bGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0 dXJuIC1FTk9NRU07CisKKwlwcml2LT5pcnEgPTNEIHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7 CisJaWYgKHByaXYtPmlycSA8PTNEIDApCisJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJ TlZBTCwgImludmFsaWQgaW50ZXJydXB0XG4iKTsKKworCXByaXYtPmNsayA9M0QgZGV2bV9jbGtf Z2V0X29wdGlvbmFsX2VuYWJsZWQoZGV2LCAic3dfYXNwIik7CisJaWYgKElTX0VSUihwcml2LT5j bGspKQorCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi0+Y2xrKSwKKwkJ CQkJCQkgImZhaWxlZCB0byByZXF1ZXN0IGNsb2NrXG4iKTsKKworCS8qIEJhc2UgZnJvbSBwYXJl bnQgbm9kZSAqLworCXByaXYtPmJhc2UgPTNEIGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJj ZShwZGV2LCAwKTsKKwlpZiAoSVNfRVJSKHByaXYtPmJhc2UpKQorCQlyZXR1cm4gZGV2X2Vycl9w cm9iZShkZXYsIFBUUl9FUlIocHJpdi0+YmFzZSksICJmYWlsZWQgdG8gaW9tYXBcbiIpOworCisJ cmV0ID0zRCBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KCZwZGV2LT5kZXYsIERNQV9CSVRfTUFT Syg0MCkpOworCWlmIChyZXQpCisJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAidW5h YmxlIHRvIHNldCBETUEgbWFzazogJWRcbiIsIHJldCk7CisKKwlkZXZfc2V0X2RydmRhdGEoJnBk ZXYtPmRldiwgcHJpdik7CisJcHJpdi0+cGRldiA9M0QgcGRldjsKKwlzcGluX2xvY2tfaW5pdCgm cHJpdi0+bWRhX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZwcml2LT5jbGtfbG9jayk7CisKKwlw ZGF0YSA9M0QgZGV2aWNlX2dldF9tYXRjaF9kYXRhKCZwZGV2LT5kZXYpOworCWlmICghcGRhdGEp CisJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwgInVuYWJsZSB0byBmaW5kIHBs YXRmb3JtIGRhdGFcbiIpOworCisJcHJpdi0+aHdfaW5mbyA9M0QgcGRhdGEtPmh3X2luZm87CisK KwkvKiBFbmFibGUgYWxsIGNsb2NrcyB0byBlbnN1cmUgc3VjY2Vzc2Z1bCBwcm9iaW5nICovCisJ YmNtYXNwX2NvcmVfY2xvY2tfc2V0KHByaXYsIEFTUF9DVFJMX0NMT0NLX0NUUkxfQVNQX0FMTF9E SVNBQkxFLCAwKTsKKworCS8qIFN3aXRjaCB0byB0aGUgbWFpbiBjbG9jayAqLworCWJjbWFzcF9j b3JlX2Nsb2NrX3NlbGVjdChwcml2LCBmYWxzZSk7CisKKwliY21hc3BfaW50cjJfbWFza19zZXRf YWxsKHByaXYpOworCWJjbWFzcF9pbnRyMl9jbGVhcl9hbGwocHJpdik7CisKKwlyZXQgPTNEIGRl dm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgcHJpdi0+aXJxLCBiY21hc3BfaXNyLCAwLAorCQkJ ICAgICAgIHBkZXYtPm5hbWUsIHByaXYpOworCWlmIChyZXQpCisJCXJldHVybiBkZXZfZXJyX3By b2JlKGRldiwgcmV0LCAiZmFpbGVkIHRvIHJlcXVlc3QgQVNQIGludGVycnVwdDogJWQiLCByZT0K dCk7CisKKwkvKiBSZWdpc3RlciBtZGlvIGNoaWxkIG5vZGVzICovCisJb2ZfcGxhdGZvcm1fcG9w dWxhdGUoZGV2LT5vZl9ub2RlLCBiY21hc3BfbWRpb19vZl9tYXRjaCwgTlVMTCwgZGV2KTsKKwor CS8qIEFTUCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiwgTmVlZHMgdG8gYmUgZG9uZSByZWdhcmRs ZXNzIG9mCisJICogaG93IG1hbnkgaW50ZXJmYWNlcyBjb21lIHVwLgorCSAqLworCWJjbWFzcF9j b3JlX2luaXQocHJpdik7CisJYmNtYXNwX2NvcmVfaW5pdF9maWx0ZXJzKHByaXYpOworCisJcG9y dHNfbm9kZSA9M0Qgb2ZfZmluZF9ub2RlX2J5X25hbWUoZGV2LT5vZl9ub2RlLCAiZXRoZXJuZXQt cG9ydHMiKTsKKwlpZiAoIXBvcnRzX25vZGUpIHsKKwkJZGV2X3dhcm4oZGV2LCAiTm8gcG9ydHMg Zm91bmRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRf b2Zfbm9kZShwb3J0c19ub2RlLCBpbnRmX25vZGUpIHsKKwkJb2ZfcHJvcGVydHlfcmVhZF91MzIo aW50Zl9ub2RlLCAicmVnIiwgJnBvcnQpOworCQlpZiAoIWJjbWFzcF9pc19wb3J0X3ZhbGlkKHBy aXYsIHBvcnQpKSB7CisJCQlkZXZfd2FybihkZXYsICIlcE9GOiAlZCBpcyBhbiBpbnZhbGlkIHBv cnRcbiIsCisJCQkJIGludGZfbm9kZSwgcG9ydCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXBy aXYtPmludGZfY291bnQrKzsKKwl9CisKKwlwcml2LT5pbnRmcyA9M0QgZGV2bV9rY2FsbG9jKGRl diwgcHJpdi0+aW50Zl9jb3VudCwKKwkJCQkgICBzaXplb2Yoc3RydWN0IGJjbWFzcF9pbnRmICop LAorCQkJCSAgIEdGUF9LRVJORUwpOworCWlmICghcHJpdi0+aW50ZnMpIHsKKwkJcmV0ID0zRCAt RU5PTUVNOworCQlnb3RvIG9mX3B1dF9leGl0OworCX0KKworCS8qIFByb2JlIGVhY2ggaW50ZXJm YWNlIChJbml0aWFsaXphdGlvbiBzaG91bGQgY29udGludWUgZXZlbiBpZgorCSAqIGludGVyZmFj ZXMgYXJlIHVuYWJsZSB0byBjb21lIHVwKQorCSAqLworCWkgPTNEIDA7CisJZm9yX2VhY2hfYXZh aWxhYmxlX2NoaWxkX29mX25vZGUocG9ydHNfbm9kZSwgaW50Zl9ub2RlKSB7CisJCXByaXYtPmlu dGZzW2ldID0zRCBiY21hc3BfaW50ZXJmYWNlX2NyZWF0ZShwcml2LCBpbnRmX25vZGUsIGkpOwor CQlpKys7CisJfQorCisJLyogRHJvcCB0aGUgY2xvY2sgcmVmZXJlbmNlIGNvdW50IG5vdyBhbmQg bGV0IG5kb19vcGVuKCkvbmRvX2Nsb3NlKCkKKwkgKiBtYW5hZ2UgaXQgZm9yIHVzIGZyb20gbm93 IG9uLgorCSAqLworCWJjbWFzcF9jb3JlX2Nsb2NrX3NldChwcml2LCAwLCBBU1BfQ1RSTF9DTE9D S19DVFJMX0FTUF9BTExfRElTQUJMRSk7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0+ Y2xrKTsKKworCS8qIE5vdyBkbyB0aGUgcmVnaXN0cmF0aW9uIG9mIHRoZSBuZXR3b3JrIHBvcnRz IHdoaWNoIHdpbGwgdGFrZSBjYXJlCisJICogb2YgbWFuYWdpbmcgdGhlIGNsb2NrIHByb3Blcmx5 LgorCSAqLworCWZvciAoaSA9M0QgMDsgaSA8IHByaXYtPmludGZfY291bnQ7IGkrKykgeworCQlp bnRmID0zRCBwcml2LT5pbnRmc1tpXTsKKwkJaWYgKCFpbnRmKQorCQkJY29udGludWU7CisKKwkJ cmV0ID0zRCByZWdpc3Rlcl9uZXRkZXYoaW50Zi0+bmRldik7CisJCWlmIChyZXQpIHsKKwkJCW5l dGRldl9lcnIoaW50Zi0+bmRldiwKKwkJCQkgICAiZmFpbGVkIHRvIHJlZ2lzdGVyIG5ldF9kZXZp Y2U6ICVkXG4iLCByZXQpOworCQkJYmNtYXNwX2ludGVyZmFjZV9kZXN0cm95KGludGYsIGZhbHNl KTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWNvdW50Kys7CisJfQorCisJZGV2X2luZm8oZGV2LCAi SW5pdGlhbGl6ZWQgJWQgcG9ydChzKVxuIiwgY291bnQpOworCitvZl9wdXRfZXhpdDoKKwlvZl9u b2RlX3B1dChwb3J0c19ub2RlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGJjbWFz cF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYmNtYXNw X3ByaXYgKnByaXYgPTNEIGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlzdHJ1Y3QgYmNt YXNwX2ludGYgKmludGY7CisJaW50IGk7CisKKwlmb3IgKGkgPTNEIDA7IGkgPCBwcml2LT5pbnRm X2NvdW50OyBpKyspIHsKKwkJaW50ZiA9M0QgcHJpdi0+aW50ZnNbaV07CisJCWlmICghaW50ZikK KwkJCWNvbnRpbnVlOworCisJCWJjbWFzcF9pbnRlcmZhY2VfZGVzdHJveShpbnRmLCB0cnVlKTsK Kwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYmNtYXNwX3NodXRkb3duKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldDsKKworCXJldCA9M0QgYmNtYXNw X3JlbW92ZShwZGV2KTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQg dG8gcmVtb3ZlOiAlZFxuIiwgcmV0KTsKK30KKworc3RhdGljIGludCBfX21heWJlX3VudXNlZCBi Y21hc3Bfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkKQoreworCXN0cnVjdCBiY21hc3BfcHJpdiAq cHJpdiA9M0QgZGV2X2dldF9kcnZkYXRhKGQpOworCXN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZjsK KwlpbnQgaSwgcmV0OworCisJZm9yIChpID0zRCAwOyBpIDwgcHJpdi0+aW50Zl9jb3VudDsgaSsr KSB7CisJCWludGYgPTNEIHByaXYtPmludGZzW2ldOworCQlpZiAoIWludGYpCisJCQljb250aW51 ZTsKKworCQlyZXQgPTNEIGJjbWFzcF9pbnRlcmZhY2Vfc3VzcGVuZChpbnRmKTsKKwkJaWYgKHJl dCkKKwkJCWJyZWFrOworCX0KKworCXJldCA9M0QgY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtPmNs ayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFdoZXRoZXIgV2FrZS1vbi1MQU4g aXMgZW5hYmxlZCBvciBub3QsIHdlIGNhbiBhbHdheXMgZGlzYWJsZQorCSAqIHRoZSBzaGFyZWQg VFggY2xvY2sKKwkgKi8KKwliY21hc3BfY29yZV9jbG9ja19zZXQocHJpdiwgMCwgQVNQX0NUUkxf Q0xPQ0tfQ1RSTF9BU1BfVFhfRElTQUJMRSk7CisKKwliY21hc3BfY29yZV9jbG9ja19zZWxlY3Qo cHJpdiwgdHJ1ZSk7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0+Y2xrKTsKKworCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgYmNtYXNwX3Jlc3VtZShz dHJ1Y3QgZGV2aWNlICpkKQoreworCXN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiA9M0QgZGV2X2dl dF9kcnZkYXRhKGQpOworCXN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZjsKKwlpbnQgaSwgcmV0Owor CisJcmV0ID0zRCBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi0+Y2xrKTsKKwlpZiAocmV0KQorCQly ZXR1cm4gcmV0OworCisJLyogU3dpdGNoIHRvIHRoZSBtYWluIGNsb2NrIGRvbWFpbiAqLworCWJj bWFzcF9jb3JlX2Nsb2NrX3NlbGVjdChwcml2LCBmYWxzZSk7CisKKwkvKiBSZS1lbmFibGUgYWxs IGNsb2NrcyBmb3IgcmUtaW5pdGlhbGl6YXRpb24gKi8KKwliY21hc3BfY29yZV9jbG9ja19zZXQo cHJpdiwgQVNQX0NUUkxfQ0xPQ0tfQ1RSTF9BU1BfQUxMX0RJU0FCTEUsIDApOworCisJYmNtYXNw X2NvcmVfaW5pdChwcml2KTsKKwliY21hc3BfY29yZV9pbml0X2ZpbHRlcnMocHJpdik7CisKKwkv KiBBbmQgZGlzYWJsZSB0aGVtIHRvIGxldCB0aGUgbmV0d29yayBkZXZpY2VzIHRha2UgY2FyZSBv ZiB0aGVtICovCisJYmNtYXNwX2NvcmVfY2xvY2tfc2V0KHByaXYsIDAsIEFTUF9DVFJMX0NMT0NL X0NUUkxfQVNQX0FMTF9ESVNBQkxFKTsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LT5j bGspOworCisJZm9yIChpID0zRCAwOyBpIDwgcHJpdi0+aW50Zl9jb3VudDsgaSsrKSB7CisJCWlu dGYgPTNEIHByaXYtPmludGZzW2ldOworCQlpZiAoIWludGYpCisJCQljb250aW51ZTsKKworCQly ZXQgPTNEIGJjbWFzcF9pbnRlcmZhY2VfcmVzdW1lKGludGYpOworCQlpZiAocmV0KQorCQkJYnJl YWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKGJj bWFzcF9wbV9vcHMsCisJCQkgYmNtYXNwX3N1c3BlbmQsIGJjbWFzcF9yZXN1bWUpOworCitzdGF0 aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBiY21hc3BfZHJpdmVyID0zRCB7CisJLnByb2JlID0z RCBiY21hc3BfcHJvYmUsCisJLnJlbW92ZSA9M0QgYmNtYXNwX3JlbW92ZSwKKwkuc2h1dGRvd24g PTNEIGJjbWFzcF9zaHV0ZG93biwKKwkuZHJpdmVyID0zRCB7CisJCS5uYW1lID0zRCAiYnJjbSxh c3AtdjIiLAorCQkub2ZfbWF0Y2hfdGFibGUgPTNEIGJjbWFzcF9vZl9tYXRjaCwKKwkJLnBtID0z RCAmYmNtYXNwX3BtX29wcywKKwl9LAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYmNtYXNw X2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIkJyb2FkY29tIik7CitNT0RVTEVfREVTQ1JJUFRJ T04oIkJyb2FkY29tIEFTUCAyLjAgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIiKTsKK01PRFVM RV9BTElBUygicGxhdGZvcm06YnJjbSxhc3AtdjIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmgg Yi9kcml2ZXJzL25ldC9ldGhlPQpybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yNmJjZjA5YTYzZGYKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcC5oCkBAIC0w LDAgKzEsNTA0IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworI2lm bmRlZiBfX0JDTUFTUF9ICisjZGVmaW5lIF9fQkNNQVNQX0gKKworI2luY2x1ZGUgPGxpbnV4L25l dGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLTY0 LW5vbmF0b21pYy1oaS1sby5oPgorI2luY2x1ZGUgPHVhcGkvbGludXgvZXRodG9vbC5oPgorCisj ZGVmaW5lIEFTUF9JTlRSMl9PRkZTRVQJCQkweDEwMDAKKyNkZWZpbmUgIEFTUF9JTlRSMl9TVEFU VVMJCQkweDAKKyNkZWZpbmUgIEFTUF9JTlRSMl9TRVQJCQkJMHg0CisjZGVmaW5lICBBU1BfSU5U UjJfQ0xFQVIJCQkweDgKKyNkZWZpbmUgIEFTUF9JTlRSMl9NQVNLX1NUQVRVUwkJCTB4YworI2Rl ZmluZSAgQVNQX0lOVFIyX01BU0tfU0VUCQkJMHgxMAorI2RlZmluZSAgQVNQX0lOVFIyX01BU0tf Q0xFQVIJCQkweDE0CisKKyNkZWZpbmUgQVNQX0lOVFIyX1JYX0VDSChpbnRyKQkJCUJJVChpbnRy KQorI2RlZmluZSBBU1BfSU5UUjJfVFhfREVTQyhpbnRyKQkJCUJJVCgoaW50cikgKyAxNCkKKyNk ZWZpbmUgQVNQX0lOVFIyX1VNQzBfV0FLRQkJCUJJVCgyMikKKyNkZWZpbmUgQVNQX0lOVFIyX1VN QzFfV0FLRQkJCUJJVCgyOCkKKworI2RlZmluZSBBU1BfV0FLRVVQX0lOVFIyX09GRlNFVAkJCTB4 MTIwMAorI2RlZmluZSAgQVNQX1dBS0VVUF9JTlRSMl9TVEFUVVMJCTB4MAorI2RlZmluZSAgQVNQ X1dBS0VVUF9JTlRSMl9TRVQJCQkweDQKKyNkZWZpbmUgIEFTUF9XQUtFVVBfSU5UUjJfQ0xFQVIJ CQkweDgKKyNkZWZpbmUgIEFTUF9XQUtFVVBfSU5UUjJfTUFTS19TVEFUVVMJCTB4YworI2RlZmlu ZSAgQVNQX1dBS0VVUF9JTlRSMl9NQVNLX1NFVAkJMHgxMAorI2RlZmluZSAgQVNQX1dBS0VVUF9J TlRSMl9NQVNLX0NMRUFSCQkweDE0CisjZGVmaW5lIEFTUF9XQUtFVVBfSU5UUjJfTVBEXzAJCQlC SVQoMCkKKyNkZWZpbmUgQVNQX1dBS0VVUF9JTlRSMl9NUERfMQkJCUJJVCgxKQorI2RlZmluZSBB U1BfV0FLRVVQX0lOVFIyX0ZJTFRfMAkJCUJJVCgyKQorI2RlZmluZSBBU1BfV0FLRVVQX0lOVFIy X0ZJTFRfMQkJCUJJVCgzKQorI2RlZmluZSBBU1BfV0FLRVVQX0lOVFIyX0ZXCQkJQklUKDQpCisK KyNkZWZpbmUgQVNQX1RYX0FOQUxZVElDU19PRkZTRVQJCQkweDRjMDAwCisjZGVmaW5lICBBU1Bf VFhfQU5BTFlUSUNTX0NUUkwJCQkweDAKKworI2RlZmluZSBBU1BfUlhfQU5BTFlUSUNTX09GRlNF VAkJCTB4OTgwMDAKKyNkZWZpbmUgIEFTUF9SWF9BTkFMWVRJQ1NfQ1RSTAkJCTB4MAorCisjZGVm aW5lIEFTUF9SWF9DVFJMX09GRlNFVAkJCTB4OWYwMDAKKyNkZWZpbmUgQVNQX1JYX0NUUkxfVU1B Q18wX0ZSQU1FX0NPVU5UCQkweDgKKyNkZWZpbmUgQVNQX1JYX0NUUkxfVU1BQ18xX0ZSQU1FX0NP VU5UCQkweGMKKyNkZWZpbmUgQVNQX1JYX0NUUkxfRkJfMF9GUkFNRV9DT1VOVAkJMHgxNAorI2Rl ZmluZSBBU1BfUlhfQ1RSTF9GQl8xX0ZSQU1FX0NPVU5UCQkweDE4CisjZGVmaW5lIEFTUF9SWF9D VFJMX0ZCXzhfRlJBTUVfQ09VTlQJCTB4MWMKKy8qIGFzcDIuMSBkaXZlcmdlcyBvZmZzZXRzIGhl cmUgKi8KKy8qIEFTUDIuMCAqLworI2RlZmluZSBBU1BfUlhfQ1RSTF9GQl9PVVRfRlJBTUVfQ09V TlQJCTB4MjAKKyNkZWZpbmUgQVNQX1JYX0NUUkxfRkJfRklMVF9PVVRfRlJBTUVfQ09VTlQJMHgy NAorI2RlZmluZSBBU1BfUlhfQ1RSTF9GTFVTSAkJCTB4MjgKKyNkZWZpbmUgIEFTUF9DVFJMX1VN QUMwX0ZMVVNIX01BU0sJCShCSVQoMCkgfCBCSVQoMTIpKQorI2RlZmluZSAgQVNQX0NUUkxfVU1B QzFfRkxVU0hfTUFTSwkJKEJJVCgxKSB8IEJJVCgxMykpCisjZGVmaW5lICBBU1BfQ1RSTF9TUEJf RkxVU0hfTUFTSwkJKEJJVCg4KSB8IEJJVCgyMCkpCisjZGVmaW5lIEFTUF9SWF9DVFJMX0ZCX1JY X0ZJRk9fREVQVEgJCTB4MzAKKy8qIEFTUDIuMSAqLworI2RlZmluZSBBU1BfUlhfQ1RSTF9GQl85 X0ZSQU1FX0NPVU5UXzJfMQkweDIwCisjZGVmaW5lIEFTUF9SWF9DVFJMX0ZCXzEwX0ZSQU1FX0NP VU5UXzJfMQkweDI0CisjZGVmaW5lIEFTUF9SWF9DVFJMX0ZCX09VVF9GUkFNRV9DT1VOVF8yXzEJ MHgyOAorI2RlZmluZSBBU1BfUlhfQ1RSTF9GQl9GSUxUX09VVF9GUkFNRV9DT1VOVF8yXzEJMHgy YworI2RlZmluZSBBU1BfUlhfQ1RSTF9GTFVTSF8yXzEJCQkweDMwCisjZGVmaW5lIEFTUF9SWF9D VFJMX0ZCX1JYX0ZJRk9fREVQVEhfMl8xCTB4MzgKKworI2RlZmluZSBBU1BfUlhfRklMVEVSX09G RlNFVAkJCTB4ODAwMDAKKyNkZWZpbmUgIEFTUF9SWF9GSUxURVJfQkxLX0NUUkwJCQkweDAKKyNk ZWZpbmUgICBBU1BfUlhfRklMVEVSX09QVVRfRU4JCQlCSVQoMCkKKyNkZWZpbmUgICBBU1BfUlhf RklMVEVSX01EQV9FTgkJCUJJVCgxKQorI2RlZmluZSAgIEFTUF9SWF9GSUxURVJfTE5SX01ECQkJ QklUKDIpCisjZGVmaW5lICAgQVNQX1JYX0ZJTFRFUl9HRU5fV0tfRU4JCUJJVCgzKQorI2RlZmlu ZSAgIEFTUF9SWF9GSUxURVJfR0VOX1dLX0NMUgkJQklUKDQpCisjZGVmaW5lICAgQVNQX1JYX0ZJ TFRFUl9OVF9GTFRfRU4JCUJJVCg1KQorI2RlZmluZSAgQVNQX1JYX0ZJTFRFUl9NREFfQ0ZHKHNl bCkJCSgoKHNlbCkgKiAweDE0KSArIDB4MTAwKQorI2RlZmluZSAgIEFTUF9SWF9GSUxURVJfTURB X0NGR19FTl9TSElGVAk4CisjZGVmaW5lICAgQVNQX1JYX0ZJTFRFUl9NREFfQ0ZHX1VNQ19TRUwo c2VsKQkoKHNlbCkgPiAxID8gQklUKDE3KSA6IFwKKwkJCQkJCSBCSVQoKHNlbCkgKyA5KSkKKyNk ZWZpbmUgIEFTUF9SWF9GSUxURVJfTURBX1BBVF9IKHNlbCkJCSgoKHNlbCkgKiAweDE0KSArIDB4 MTA0KQorI2RlZmluZSAgQVNQX1JYX0ZJTFRFUl9NREFfUEFUX0woc2VsKQkJKCgoc2VsKSAqIDB4 MTQpICsgMHgxMDgpCisjZGVmaW5lICBBU1BfUlhfRklMVEVSX01EQV9NU0tfSChzZWwpCQkoKChz ZWwpICogMHgxNCkgKyAweDEwYykKKyNkZWZpbmUgIEFTUF9SWF9GSUxURVJfTURBX01TS19MKHNl bCkJCSgoKHNlbCkgKiAweDE0KSArIDB4MTEwKQorI2RlZmluZSAgQVNQX1JYX0ZJTFRFUl9NREFf Q0ZHKHNlbCkJCSgoKHNlbCkgKiAweDE0KSArIDB4MTAwKQorI2RlZmluZSAgQVNQX1JYX0ZJTFRF Ul9NREFfUEFUX0goc2VsKQkJKCgoc2VsKSAqIDB4MTQpICsgMHgxMDQpCisjZGVmaW5lICBBU1Bf UlhfRklMVEVSX01EQV9QQVRfTChzZWwpCQkoKChzZWwpICogMHgxNCkgKyAweDEwOCkKKyNkZWZp bmUgIEFTUF9SWF9GSUxURVJfTURBX01TS19IKHNlbCkJCSgoKHNlbCkgKiAweDE0KSArIDB4MTBj KQorI2RlZmluZSAgQVNQX1JYX0ZJTFRFUl9NREFfTVNLX0woc2VsKQkJKCgoc2VsKSAqIDB4MTQp ICsgMHgxMTApCisjZGVmaW5lICBBU1BfUlhfRklMVEVSX05FVF9DRkcoc2VsKQkJKCgoc2VsKSAq IDB4YTA0KSArIDB4NDAwKQorI2RlZmluZSAgIEFTUF9SWF9GSUxURVJfTkVUX0NGR19DSChzZWwp CQkoKHNlbCkgPDwgMCkKKyNkZWZpbmUgICBBU1BfUlhfRklMVEVSX05FVF9DRkdfRU4JCUJJVCg5 KQorI2RlZmluZSAgIEFTUF9SWF9GSUxURVJfTkVUX0NGR19MMl9FTgkJQklUKDEwKQorI2RlZmlu ZSAgIEFTUF9SWF9GSUxURVJfTkVUX0NGR19MM19FTgkJQklUKDExKQorI2RlZmluZSAgIEFTUF9S WF9GSUxURVJfTkVUX0NGR19MNF9FTgkJQklUKDEyKQorI2RlZmluZSAgIEFTUF9SWF9GSUxURVJf TkVUX0NGR19MM19GUk0oc2VsKQkoKHNlbCkgPDwgMTMpCisjZGVmaW5lICAgQVNQX1JYX0ZJTFRF Ul9ORVRfQ0ZHX0w0X0ZSTShzZWwpCSgoc2VsKSA8PCAxNSkKKyNkZWZpbmUgICBBU1BfUlhfRklM VEVSX05FVF9DRkdfVU1DKHNlbCkJQklUKChzZWwpICsgMTkpCisjZGVmaW5lICAgQVNQX1JYX0ZJ TFRFUl9ORVRfQ0ZHX0RNQV9FTgkJQklUKDI3KQorCisjZGVmaW5lICBBU1BfUlhfRklMVEVSX05F VF9PRkZTRVRfTUFYCQkzMgorI2RlZmluZSAgQVNQX1JYX0ZJTFRFUl9ORVRfUEFUKHNlbCwgYmxv Y2ssIG9mZikgXAorCQkoKChzZWwpICogMHhhMDQpICsgKChibG9jaykgKiAweDIwMCkgKyAob2Zm KSArIDB4NjAwKQorI2RlZmluZSAgQVNQX1JYX0ZJTFRFUl9ORVRfTUFTSyhzZWwsIGJsb2NrLCBv ZmYpIFwKKwkJKCgoc2VsKSAqIDB4YTA0KSArICgoYmxvY2spICogMHgyMDApICsgKG9mZikgKyAw eDcwMCkKKworI2RlZmluZSAgQVNQX1JYX0ZJTFRFUl9ORVRfT0ZGU0VUKHNlbCkJCSgoKHNlbCkg KiAweGEwNCkgKyAweGUwMCkKKyNkZWZpbmUgICBBU1BfUlhfRklMVEVSX05FVF9PRkZTRVRfTDIo dmFsKQkoKHZhbCkgPDwgMCkKKyNkZWZpbmUgICBBU1BfUlhfRklMVEVSX05FVF9PRkZTRVRfTDNf MCh2YWwpCSgodmFsKSA8PCA4KQorI2RlZmluZSAgIEFTUF9SWF9GSUxURVJfTkVUX09GRlNFVF9M M18xKHZhbCkJKCh2YWwpIDw8IDE2KQorI2RlZmluZSAgIEFTUF9SWF9GSUxURVJfTkVUX09GRlNF VF9MNCh2YWwpCSgodmFsKSA8PCAyNCkKKworI2RlZmluZSBBU1BfRURQS1RfT0ZGU0VUCQkJMHg5 YzAwMAorI2RlZmluZSAgQVNQX0VEUEtUX0VOQUJMRQkJCTB4NAorI2RlZmluZSAgIEFTUF9FRFBL VF9FTkFCTEVfRU4JCQlCSVQoMCkKKyNkZWZpbmUgIEFTUF9FRFBLVF9IRFJfQ0ZHCQkJMHhjCisj ZGVmaW5lICAgQVNQX0VEUEtUX0hEUl9TWl9TSElGVAkJMgorI2RlZmluZSAgIEFTUF9FRFBLVF9I RFJfU1pfMzIJCQkwCisjZGVmaW5lICAgQVNQX0VEUEtUX0hEUl9TWl82NAkJCTEKKyNkZWZpbmUg ICBBU1BfRURQS1RfSERSX1NaXzk2CQkJMgorI2RlZmluZSAgIEFTUF9FRFBLVF9IRFJfU1pfMTI4 CQkJMworI2RlZmluZSBBU1BfRURQS1RfQlVSU1RfQlVGX1BTQ0FMX1RPVVQJCTB4MTAKKyNkZWZp bmUgQVNQX0VEUEtUX0JVUlNUX0JVRl9XUklURV9UT1VUCQkweDE0CisjZGVmaW5lIEFTUF9FRFBL VF9CVVJTVF9CVUZfUkVBRF9UT1VUCQkweDE4CisjZGVmaW5lIEFTUF9FRFBLVF9SWF9UU19DT1VO VEVSCQkJMHgzOAorI2RlZmluZSAgQVNQX0VEUEtUX0VOREkJCQkJMHg0OAorI2RlZmluZSAgIEFT UF9FRFBLVF9FTkRJX0RFU0NfU0hJRlQJCTgKKyNkZWZpbmUgICBBU1BfRURQS1RfRU5ESV9OT19C VF9TV1AJCTAKKyNkZWZpbmUgICBBU1BfRURQS1RfRU5ESV9CVF9TV1BfV0QJCTEKKyNkZWZpbmUg QVNQX0VEUEtUX1JYX1BLVF9DTlQJCQkweDEzOAorI2RlZmluZSBBU1BfRURQS1RfSERSX0VYVFJf Q05UCQkJMHgxM2MKKyNkZWZpbmUgQVNQX0VEUEtUX0hEUl9PVVRfQ05UCQkJMHgxNDAKKworI2Rl ZmluZSBBU1BfQ1RSTAkJCQkweDEwMTAwMAorI2RlZmluZSAgQVNQX0NUUkxfQVNQX1NXX0lOSVQJ CQkweDA0CisjZGVmaW5lICAgQVNQX0NUUkxfQVNQX1NXX0lOSVRfQUNQVVNTX0NPUkUJQklUKDAp CisjZGVmaW5lICAgQVNQX0NUUkxfQVNQX1NXX0lOSVRfQVNQX1RYCQlCSVQoMSkKKyNkZWZpbmUg ICBBU1BfQ1RSTF9BU1BfU1dfSU5JVF9BU19SWAkJQklUKDIpCisjZGVmaW5lICAgQVNQX0NUUkxf QVNQX1NXX0lOSVRfQVNQX1JHTUlJX1VNQUMwCUJJVCgzKQorI2RlZmluZSAgIEFTUF9DVFJMX0FT UF9TV19JTklUX0FTUF9SR01JSV9VTUFDMQlCSVQoNCkKKyNkZWZpbmUgICBBU1BfQ1RSTF9BU1Bf U1dfSU5JVF9BU1BfWE1FTUlGCUJJVCg1KQorI2RlZmluZSAgQVNQX0NUUkxfQ0xPQ0tfQ1RSTAkJ CTB4MDQKKyNkZWZpbmUgICBBU1BfQ1RSTF9DTE9DS19DVFJMX0FTUF9UWF9ESVNBQkxFCUJJVCgw KQorI2RlZmluZSAgIEFTUF9DVFJMX0NMT0NLX0NUUkxfQVNQX1JYX0RJU0FCTEUJQklUKDEpCisj ZGVmaW5lICAgQVNQX0NUUkxfQ0xPQ0tfQ1RSTF9BU1BfUkdNSUlfU0hJRlQJMgorI2RlZmluZSAg IEFTUF9DVFJMX0NMT0NLX0NUUkxfQVNQX1JHTUlJX01BU0sJKDB4NyA8PCBBU1BfQ1RSTF9DTE9D S19DVFJMX0E9ClNQX1JHTUlJX1NISUZUKQorI2RlZmluZSAgIEFTUF9DVFJMX0NMT0NLX0NUUkxf QVNQX1JHTUlJX0RJUyh4KQlCSVQoQVNQX0NUUkxfQ0xPQ0tfQ1RSTF9BU1A9Cl9SR01JSV9TSElG VCArICh4KSkKKyNkZWZpbmUgICBBU1BfQ1RSTF9DTE9DS19DVFJMX0FTUF9BTExfRElTQUJMRQlH RU5NQVNLKDQsIDApCisjZGVmaW5lICBBU1BfQ1RSTF9DT1JFX0NMT0NLX1NFTEVDVAkJMHgwOAor I2RlZmluZSAgIEFTUF9DVFJMX0NPUkVfQ0xPQ0tfU0VMRUNUX01BSU4JQklUKDApCisjZGVmaW5l ICBBU1BfQ1RSTF9TQ1JBVENIXzAJCQkweDBjCisKK3N0cnVjdCBiY21hc3BfdHhfY2IgeworCXN0 cnVjdCBza19idWZmCQkqc2tiOworCXVuc2lnbmVkIGludAkJYnl0ZXNfc2VudDsKKwlib29sCQkJ bGFzdDsKKworCURFRklORV9ETUFfVU5NQVBfQUREUihkbWFfYWRkcik7CisJREVGSU5FX0RNQV9V Tk1BUF9MRU4oZG1hX2xlbik7Cit9OworCitzdHJ1Y3QgYmNtYXNwX3JlcyB7CisJLyogUGVyIGlu dGVyZmFjZSByZXNvdXJjZXMgKi8KKwkvKiBQb3J0ICovCisJdm9pZCBfX2lvbWVtCQkqdW1hYzsK Kwl2b2lkIF9faW9tZW0JCSp1bWFjMmZiOworCXZvaWQgX19pb21lbQkJKnJnbWlpOworCisJLyog VFggc2xvd3BhdGgvY29uZmlndXJhdGlvbiAqLworCXZvaWQgX19pb21lbQkJKnR4X3NwYl9jdHJs OworCXZvaWQgX19pb21lbQkJKnR4X3NwYl90b3A7CisJdm9pZCBfX2lvbWVtCQkqdHhfZXBrdF9j b3JlOworCXZvaWQgX19pb21lbQkJKnR4X3BhdXNlX2N0cmw7Cit9OworCisjZGVmaW5lIERFU0Nf QUREUih4KQkJKCh4KSAmIEdFTk1BU0tfVUxMKDM5LCAwKSkKKyNkZWZpbmUgREVTQ19GTEFHUyh4 KQkJKCh4KSAmIEdFTk1BU0tfVUxMKDYzLCA0MCkpCisKK3N0cnVjdCBiY21hc3BfZGVzYyB7CisJ dTY0CQlidWY7CisJI2RlZmluZSBERVNDX0NIS1NVTQlCSVRfVUxMKDQwKQorCSNkZWZpbmUgREVT Q19DUkNfRVJSCUJJVF9VTEwoNDEpCisJI2RlZmluZSBERVNDX1JYX1NZTV9FUlIJQklUX1VMTCg0 MikKKwkjZGVmaW5lIERFU0NfTk9fT0NUX0FMTiBCSVRfVUxMKDQzKQorCSNkZWZpbmUgREVTQ19Q S1RfVFJVQwlCSVRfVUxMKDQ0KQorCS8qICAzOTowIChUWC9SWCkgYml0cyAwLTM5IG9mIGJ1ZiBh ZGRyCisJICogICAgNDAgKFJYKSBjaGVja3N1bQorCSAqICAgIDQxIChSWCkgY3JjX2Vycm9yCisJ ICogICAgNDIgKFJYKSByeF9zeW1ib2xfZXJyb3IKKwkgKiAgICA0MyAoUlgpIG5vbl9vY3RldF9h bGlnbmVkCisJICogICAgNDQgKFJYKSBwa3RfdHJ1bmNhdGVkCisJICogICAgNDUgUmVzZXJ2ZWQK KwkgKiA1Njo0NiAoUlgpIG1hY19maWx0ZXJfaWQKKwkgKiA2MDo1NyAoUlgpIHJ4X3BvcnRfbnVt ICgwLXVuaWNtYWMwLCAxLXVuaW1hYzEpCisJICogICAgNjEgUmVzZXJ2ZWQKKwkgKiA2Mzo2MiAo VFgpIGZvcndhcmQgQ1JDLCBvdmVyd3JpdGUgQ1JDCisJICovCisJdTMyCQlzaXplOworCXUzMgkJ ZmxhZ3M7CisJI2RlZmluZSBERVNDX0lOVF9FTiAgICAgQklUKDApCisJI2RlZmluZSBERVNDX1NP RglCSVQoMSkKKwkjZGVmaW5lIERFU0NfRU9GCUJJVCgyKQorCSNkZWZpbmUgREVTQ19FUEtUX0NN RCAgIEJJVCgzKQorCSNkZWZpbmUgREVTQ19TQ1JBTV9TVCAgIEJJVCg4KQorCSNkZWZpbmUgREVT Q19TQ1JBTV9FTkQgIEJJVCg5KQorCSNkZWZpbmUgREVTQ19QQ1BQICAgICAgIEJJVCgxMCkKKwkj ZGVmaW5lIERFU0NfUFBQUCAgICAgICBCSVQoMTEpCisJLyogICAgIDAgKFRYKSB0eF9pbnRfZW4K KwkgKiAgICAgMSAoVFgvUlgpIFNPRgorCSAqICAgICAyIChUWC9SWCkgRU9GCisJICogICAgIDMg KFRYKSBlcGt0X2NvbW1hbmQKKwkgKiAgIDY6NCAoVFgpIFBBCisJICogICAgIDcgKFRYKSBwYXVz ZSBhdCBkZXNjIGVuZAorCSAqICAgICA4IChUWCkgc2NyYW1fc3RhcnQKKwkgKiAgICAgOSAoVFgp IHNjcmFtX2VuZAorCSAqICAgIDEwIChUWCkgUENQUAorCSAqICAgIDExIChUWCkgUFBQUAorCSAq IDE0OjEyIFJlc2VydmVkCisJICogICAgMTUgKFRYKSBwaWQgY2ggVmFsaWQKKwkgKiAxOToxNiAo VFgpIGRhdGFfcGt0X3R5cGUKKwkgKiAzMjoyMCAoVFgpIHBpZF9jaGFubmVsIChSWCkgbndfZmls dGVyX2lkCisJICovCit9OworCitzdHJ1Y3QgYmNtYXNwX2ludGY7CisKK3N0cnVjdCBiY21hc3Bf aW50Zl9zdGF0czY0eworCS8qIFJ4IFN0YXRzICovCisJdTY0X3N0YXRzX3QJcnhfcGFja2V0czsK Kwl1NjRfc3RhdHNfdAlyeF9ieXRlczsKKwl1NjRfc3RhdHNfdAlyeF9lcnJvcnM7CisJdTY0X3N0 YXRzX3QJcnhfZHJvcHBlZDsKKwl1NjRfc3RhdHNfdAlyeF9jcmNfZXJyczsKKwl1NjRfc3RhdHNf dAlyeF9zeW1fZXJyczsKKworCS8qIFR4IFN0YXRzKi8KKwl1NjRfc3RhdHNfdAl0eF9wYWNrZXRz OworCXU2NF9zdGF0c190CXR4X2J5dGVzOworCXU2NF9zdGF0c190CXR4X2Vycm9yczsKKworCXN0 cnVjdCB1NjRfc3RhdHNfc3luYwkJc3luY3A7Cit9OworCitzdHJ1Y3QgYmNtYXNwX2ludGZfb3Bz IHsKKwl1bnNpZ25lZCBsb25nICgqcnhfZGVzY19yZWFkKShzdHJ1Y3QgYmNtYXNwX2ludGYgKmlu dGYpOworCXZvaWQgKCpyeF9idWZmZXJfd3JpdGUpKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50Ziwg ZG1hX2FkZHJfdCBhZGRyKTsKKwl2b2lkICgqcnhfZGVzY193cml0ZSkoc3RydWN0IGJjbWFzcF9p bnRmICppbnRmLCBkbWFfYWRkcl90IGFkZHIpOworCXVuc2lnbmVkIGxvbmcgKCp0eF9yZWFkKShz dHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpOworCXZvaWQgKCp0eF93cml0ZSkoc3RydWN0IGJjbWFz cF9pbnRmICppbnRmLCBkbWFfYWRkcl90IGFkZHIpOworfTsKKworc3RydWN0IGJjbWFzcF9pbnRm IHsKKwlzdHJ1Y3QgbmV0X2RldmljZQkJKm5kZXY7CisJc3RydWN0IGJjbWFzcF9wcml2CQkqcGFy ZW50OworCisJLyogQVNQIENoICovCisJaW50CQkJCWNoYW5uZWw7CisJaW50CQkJCXBvcnQ7CisJ Y29uc3Qgc3RydWN0IGJjbWFzcF9pbnRmX29wcwkqb3BzOworCisJLyogVXNlZCBmb3Igc3BsaXR0 aW5nIHNoYXJlZCByZXNvdXJjZXMgKi8KKwlpbnQJCQkJaW5kZXg7CisKKwlzdHJ1Y3QgbmFwaV9z dHJ1Y3QJdHhfbmFwaTsKKwkvKiBUWCByaW5nLCBzdGFydHMgb24gYSBuZXcgY2FjaGVsaW5lIGJv dW5kYXJ5ICovCisJdm9pZCBfX2lvbWVtCQkJKnR4X3NwYl9kbWE7CisJaW50CQkJCXR4X3NwYl9p bmRleDsKKwlpbnQJCQkJdHhfc3BiX2NsZWFuX2luZGV4OworCXN0cnVjdCBiY21hc3BfZGVzYwkJ KnR4X3NwYl9jcHU7CisJZG1hX2FkZHJfdAkJCXR4X3NwYl9kbWFfYWRkcjsKKwlkbWFfYWRkcl90 CQkJdHhfc3BiX2RtYV92YWxpZDsKKwlkbWFfYWRkcl90CQkJdHhfc3BiX2RtYV9yZWFkOworCXN0 cnVjdCBiY21hc3BfdHhfY2IJCSp0eF9jYnM7CisKKwkvKiBSWCByaW5nLCBzdGFydHMgb24gYSBu ZXcgY2FjaGVsaW5lIGJvdW5kYXJ5ICovCisJdm9pZCBfX2lvbWVtCQkJKnJ4X2VkcGt0X2NmZzsK Kwl2b2lkIF9faW9tZW0JCQkqcnhfZWRwa3RfZG1hOworCWludAkJCQlyeF9lZHBrdF9pbmRleDsK KwlpbnQJCQkJcnhfYnVmX29yZGVyOworCXN0cnVjdCBiY21hc3BfZGVzYwkJKnJ4X2VkcGt0X2Nw dTsKKwlkbWFfYWRkcl90CQkJcnhfZWRwa3RfZG1hX2FkZHI7CisJZG1hX2FkZHJfdAkJCXJ4X2Vk cGt0X2RtYV9yZWFkOworCisJLyogUlggYnVmZmVyIHByZWZldGNoZXIgcmluZyovCisJdm9pZAkJ CQkqcnhfcmluZ19jcHU7CisJZG1hX2FkZHJfdAkJCXJ4X3JpbmdfZG1hOworCWRtYV9hZGRyX3QJ CQlyeF9yaW5nX2RtYV92YWxpZDsKKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QJCXJ4X25hcGk7CisKKwlz dHJ1Y3QgYmNtYXNwX3JlcwkJcmVzOworCXVuc2lnbmVkIGludAkJCWNyY19md2Q7CisKKwkvKiBQ SFkgZGV2aWNlICovCisJc3RydWN0IGRldmljZV9ub2RlCQkqcGh5X2RuOworCXN0cnVjdCBkZXZp Y2Vfbm9kZQkJKm5kZXZfZG47CisJcGh5X2ludGVyZmFjZV90CQkJcGh5X2ludGVyZmFjZTsKKwli b29sCQkJCWludGVybmFsX3BoeTsKKwlpbnQJCQkJb2xkX3BhdXNlOworCWludAkJCQlvbGRfbGlu azsKKwlpbnQJCQkJb2xkX2R1cGxleDsKKworCXUzMgkJCQltc2dfZW5hYmxlOworCisJLyogU3Rh dGlzdGljcyAqLworCXN0cnVjdCBiY21hc3BfaW50Zl9zdGF0czY0CXN0YXRzNjQ7Cit9OworCisj ZGVmaW5lIE5VTV9NREFfRklMVEVSUwkJCQkzMgorc3RydWN0IGJjbWFzcF9tZGFfZmlsdGVyIHsK KwkvKiBDdXJyZW50IG93bmVyIG9mIHRoaXMgZmlsdGVyICovCisJaW50CQlwb3J0OworCWJvb2wJ CWVuOworCXU4CQlhZGRyW0VUSF9BTEVOXTsKKwl1OAkJbWFza1tFVEhfQUxFTl07Cit9OworCitz dHJ1Y3QgYmNtYXNwX3ByaXY7CisKK3N0cnVjdCBiY21hc3BfaHdfaW5mbyB7CisJdTMyCQlyeF9j dHJsX2ZsdXNoOworCXUzMgkJdW1hYzJmYjsKKwl1MzIJCXJ4X2N0cmxfZmJfb3V0X2ZyYW1lX2Nv dW50OworCXUzMgkJcnhfY3RybF9mYl9maWx0X291dF9mcmFtZV9jb3VudDsKKwl1MzIJCXJ4X2N0 cmxfZmJfcnhfZmlmb19kZXB0aDsKK307CisKK3N0cnVjdCBiY21hc3BfcGxhdF9kYXRhIHsKKwlz dHJ1Y3QgYmNtYXNwX2h3X2luZm8JCSpod19pbmZvOworfTsKKworc3RydWN0IGJjbWFzcF9wcml2 IHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqcGRldjsKKwlzdHJ1Y3QgY2xrCQkJKmNsazsK KworCWludAkJCQlpcnE7CisJdTMyCQkJCWlycV9tYXNrOworCisJdm9pZCBfX2lvbWVtCQkJKmJh c2U7CisJc3RydWN0CWJjbWFzcF9od19pbmZvCQkqaHdfaW5mbzsKKworCXVuc2lnbmVkIGludAkJ CWludGZfY291bnQ7CisJc3RydWN0IGJjbWFzcF9pbnRmCQkqKmludGZzOworCisJc3RydWN0IGJj bWFzcF9tZGFfZmlsdGVyCW1kYV9maWx0ZXJzW05VTV9NREFfRklMVEVSU107CisKKwkvKiBNQUMg ZGVzdGluYXRpb24gYWRkcmVzcyBmaWx0ZXJzIGxvY2sgKi8KKwlzcGlubG9ja190CQkJbWRhX2xv Y2s7CisKKwkvKiBQcm90ZWN0cyBhY2Nlc3NlcyB0byBBU1BfQ1RSTF9DTE9DS19DVFJMICovCisJ c3BpbmxvY2tfdAkJCWNsa19sb2NrOworfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25n IGJjbWFzcF9pbnRmX3J4X2Rlc2NfcmVhZChzdHJ1Y3QgYmNtYXNwX2ludGYgKmk9Cm50ZikKK3sK KwlyZXR1cm4gaW50Zi0+b3BzLT5yeF9kZXNjX3JlYWQoaW50Zik7Cit9CisKK3N0YXRpYyBpbmxp bmUgdm9pZCBiY21hc3BfaW50Zl9yeF9idWZmZXJfd3JpdGUoc3RydWN0IGJjbWFzcF9pbnRmICpp bnRmLAorCQkJCQkgICAgICAgZG1hX2FkZHJfdCBhZGRyKQoreworCWludGYtPm9wcy0+cnhfYnVm ZmVyX3dyaXRlKGludGYsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYmNtYXNwX2lu dGZfcnhfZGVzY193cml0ZShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsCisJCQkJCSAgICAgZG1h X2FkZHJfdCBhZGRyKQoreworCWludGYtPm9wcy0+cnhfZGVzY193cml0ZShpbnRmLCBhZGRyKTsK K30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGJjbWFzcF9pbnRmX3R4X3JlYWQoc3Ry dWN0IGJjbWFzcF9pbnRmICppbnRmKQoreworCXJldHVybiBpbnRmLT5vcHMtPnR4X3JlYWQoaW50 Zik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiY21hc3BfaW50Zl90eF93cml0ZShzdHJ1Y3Qg YmNtYXNwX2ludGYgKmludGYsCisJCQkJCWRtYV9hZGRyX3QgYWRkcikKK3sKKwlpbnRmLT5vcHMt PnR4X3dyaXRlKGludGYsIGFkZHIpOworfQorCisjZGVmaW5lIF9fQkNNQVNQX0lPX01BQ1JPKG5h bWUsIG0pCQkJCQlcCitzdGF0aWMgaW5saW5lIHUzMiBuYW1lIyNfcmwoc3RydWN0IGJjbWFzcF9p bnRmICppbnRmLCB1MzIgb2ZmKQkJXAorewkJCQkJCQkJCVwKKwl1MzIgcmVnID0zRCByZWFkbF9y ZWxheGVkKGludGYtPm0gKyBvZmYpOwkJCQlcCisJcmV0dXJuIHJlZzsJCQkJCQkJXAorfQkJCQkJ CQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYW1lIyNfd2woc3RydWN0IGJjbWFzcF9pbnRmICpp bnRmLCB1MzIgdmFsLCB1MzIgb2ZmKVwKK3sJCQkJCQkJCQlcCisJd3JpdGVsX3JlbGF4ZWQodmFs LCBpbnRmLT5tICsgb2ZmKTsJCQkJXAorfQorCisjZGVmaW5lIEJDTUFTUF9JT19NQUNSTyhuYW1l KQkJX19CQ01BU1BfSU9fTUFDUk8obmFtZSwgcmVzLm5hbWUpCisjZGVmaW5lIEJDTUFTUF9GUF9J T19NQUNSTyhuYW1lKQlfX0JDTUFTUF9JT19NQUNSTyhuYW1lLCBuYW1lKQorCitCQ01BU1BfSU9f TUFDUk8odW1hYyk7CitCQ01BU1BfSU9fTUFDUk8odW1hYzJmYik7CitCQ01BU1BfSU9fTUFDUk8o cmdtaWkpOworQkNNQVNQX0ZQX0lPX01BQ1JPKHR4X3NwYl9kbWEpOworQkNNQVNQX0lPX01BQ1JP KHR4X3NwYl9jdHJsKTsKK0JDTUFTUF9JT19NQUNSTyh0eF9zcGJfdG9wKTsKK0JDTUFTUF9JT19N QUNSTyh0eF9lcGt0X2NvcmUpOworQkNNQVNQX0lPX01BQ1JPKHR4X3BhdXNlX2N0cmwpOworQkNN QVNQX0ZQX0lPX01BQ1JPKHJ4X2VkcGt0X2RtYSk7CitCQ01BU1BfRlBfSU9fTUFDUk8ocnhfZWRw a3RfY2ZnKTsKKworI2RlZmluZSBfX0JDTUFTUF9GUF9JT19NQUNST19RKG5hbWUsIG0pCQkJCQlc CitzdGF0aWMgaW5saW5lIHU2NCBuYW1lIyNfcnEoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCB1 MzIgb2ZmKQkJXAorewkJCQkJCQkJCVwKKwl1NjQgcmVnID0zRCByZWFkcV9yZWxheGVkKGludGYt Pm0gKyBvZmYpOwkJCQlcCisJcmV0dXJuIHJlZzsJCQkJCQkJXAorfQkJCQkJCQkJCVwKK3N0YXRp YyBpbmxpbmUgdm9pZCBuYW1lIyNfd3Eoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCB1NjQgdmFs LCB1MzIgb2ZmKVwKK3sJCQkJCQkJCQlcCisJd3JpdGVxX3JlbGF4ZWQodmFsLCBpbnRmLT5tICsg b2ZmKTsJCQkJXAorfQorCisjZGVmaW5lIEJDTUFTUF9GUF9JT19NQUNST19RKG5hbWUpCV9fQkNN QVNQX0ZQX0lPX01BQ1JPX1EobmFtZSwgbmFtZSkKKworQkNNQVNQX0ZQX0lPX01BQ1JPX1EodHhf c3BiX2RtYSk7CitCQ01BU1BfRlBfSU9fTUFDUk9fUShyeF9lZHBrdF9kbWEpOworQkNNQVNQX0ZQ X0lPX01BQ1JPX1EocnhfZWRwa3RfY2ZnKTsKKworI2RlZmluZSBQS1RfT0ZGTE9BRF9OT1AJCQko MCA8PCAyOCkKKyNkZWZpbmUgUEtUX09GRkxPQURfSERSX09QCQkoMSA8PCAyOCkKKyNkZWZpbmUg IFBLVF9PRkZMT0FEX0hEUl9XUkJBQ0sJCUJJVCgxOSkKKyNkZWZpbmUgIFBLVF9PRkZMT0FEX0hE Ul9DT1VOVCh4KQkoKHgpIDw8IDE2KQorI2RlZmluZSAgUEtUX09GRkxPQURfSERSX1NJWkVfMSh4 KQkoKHgpIDw8IDQpCisjZGVmaW5lICBQS1RfT0ZGTE9BRF9IRFJfU0laRV8yKHgpCSh4KQorI2Rl ZmluZSAgUEtUX09GRkxPQURfSERSMl9TSVpFXzIoeCkJKCh4KSA8PCAyNCkKKyNkZWZpbmUgIFBL VF9PRkZMT0FEX0hEUjJfU0laRV8zKHgpCSgoeCkgPDwgMTIpCisjZGVmaW5lICBQS1RfT0ZGTE9B RF9IRFIyX1NJWkVfNCh4KQkoeCkKKyNkZWZpbmUgUEtUX09GRkxPQURfRVBLVF9PUAkJKDIgPDwg MjgpCisjZGVmaW5lICBQS1RfT0ZGTE9BRF9FUEtUX1dSQkFDSwlCSVQoMjMpCisjZGVmaW5lICBQ S1RfT0ZGTE9BRF9FUEtUX0lQKHgpCQkoKHgpIDw8IDIxKQorI2RlZmluZSAgUEtUX09GRkxPQURf RVBLVF9UUCh4KQkJKCh4KSA8PCAxOSkKKyNkZWZpbmUgIFBLVF9PRkZMT0FEX0VQS1RfTEVOKHgp CSgoeCkgPDwgMTYpCisjZGVmaW5lICBQS1RfT0ZGTE9BRF9FUEtUX0NTVU1fTDMJQklUKDE1KQor I2RlZmluZSAgUEtUX09GRkxPQURfRVBLVF9DU1VNX0wyCUJJVCgxNCkKKyNkZWZpbmUgIFBLVF9P RkZMT0FEX0VQS1RfSUQoeCkJCSgoeCkgPDwgMTIpCisjZGVmaW5lICBQS1RfT0ZGTE9BRF9FUEtU X1NFUSh4KQkoKHgpIDw8IDEwKQorI2RlZmluZSAgUEtUX09GRkxPQURfRVBLVF9UUyh4KQkJKCh4 KSA8PCA4KQorI2RlZmluZSAgUEtUX09GRkxPQURfRVBLVF9CTE9DKHgpCSh4KQorI2RlZmluZSBQ S1RfT0ZGTE9BRF9FTkRfT1AJCSg3IDw8IDI4KQorCitzdHJ1Y3QgYmNtYXNwX3BrdF9vZmZsb2Fk IHsKKwlfX2JlMzIJCW5vcDsKKwlfX2JlMzIJCWhlYWRlcjsKKwlfX2JlMzIJCWhlYWRlcjI7CisJ X19iZTMyCQllcGt0OworCV9fYmUzMgkJZW5kOworfTsKKworI2RlZmluZSBCQ01BU1BfQ09SRV9J T19NQUNSTyhuYW1lLCBvZmZzZXQpCQkJCVwKK3N0YXRpYyBpbmxpbmUgdTMyIG5hbWUjI19jb3Jl X3JsKHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiwJCVwKKwkJCQkgdTMyIG9mZikJCQkJXAorewkJ CQkJCQkJCVwKKwl1MzIgcmVnID0zRCByZWFkbF9yZWxheGVkKHByaXYtPmJhc2UgKyAob2Zmc2V0 KSArIG9mZik7CQlcCisJcmV0dXJuIHJlZzsJCQkJCQkJXAorfQkJCQkJCQkJCVwKK3N0YXRpYyBp bmxpbmUgdm9pZCBuYW1lIyNfY29yZV93bChzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYsCQlcCisJ CQkJICB1MzIgdmFsLCB1MzIgb2ZmKQkJCVwKK3sJCQkJCQkJCQlcCisJd3JpdGVsX3JlbGF4ZWQo dmFsLCBwcml2LT5iYXNlICsgKG9mZnNldCkgKyBvZmYpOwkJXAorfQorCitCQ01BU1BfQ09SRV9J T19NQUNSTyhpbnRyMiwgQVNQX0lOVFIyX09GRlNFVCk7CitCQ01BU1BfQ09SRV9JT19NQUNSTyh3 YWtldXBfaW50cjIsIEFTUF9XQUtFVVBfSU5UUjJfT0ZGU0VUKTsKK0JDTUFTUF9DT1JFX0lPX01B Q1JPKHR4X2FuYWx5dGljcywgQVNQX1RYX0FOQUxZVElDU19PRkZTRVQpOworQkNNQVNQX0NPUkVf SU9fTUFDUk8ocnhfYW5hbHl0aWNzLCBBU1BfUlhfQU5BTFlUSUNTX09GRlNFVCk7CitCQ01BU1Bf Q09SRV9JT19NQUNSTyhyeF9jdHJsLCBBU1BfUlhfQ1RSTF9PRkZTRVQpOworQkNNQVNQX0NPUkVf SU9fTUFDUk8ocnhfZmlsdGVyLCBBU1BfUlhfRklMVEVSX09GRlNFVCk7CitCQ01BU1BfQ09SRV9J T19NQUNSTyhyeF9lZHBrdCwgQVNQX0VEUEtUX09GRlNFVCk7CitCQ01BU1BfQ09SRV9JT19NQUNS TyhjdHJsLCBBU1BfQ1RSTCk7CisKK3N0cnVjdCBiY21hc3BfaW50ZiAqYmNtYXNwX2ludGVyZmFj ZV9jcmVhdGUoc3RydWN0IGJjbWFzcF9wcml2ICpwcml2LAorCQkJCQkgICAgc3RydWN0IGRldmlj ZV9ub2RlICpuZGV2X2RuLCBpbnQgaSk7CisKK3ZvaWQgYmNtYXNwX2ludGVyZmFjZV9kZXN0cm95 KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgYm9vbCB1bnJlZ2lzdGVyKTsKKwordm9pZCBiY21h c3BfZW5hYmxlX3R4X2lycShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGludCBlbik7CisKK3Zv aWQgYmNtYXNwX2VuYWJsZV9yeF9pcnEoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBpbnQgZW4p OworCit2b2lkIGJjbWFzcF9mbHVzaF9yeF9wb3J0KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50Zik7 CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYmNtYXNwX2V0aHRvb2xfb3BzOwor CitpbnQgYmNtYXNwX2ludGVyZmFjZV9zdXNwZW5kKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50Zik7 CisKK2ludCBiY21hc3BfaW50ZXJmYWNlX3Jlc3VtZShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYp OworCit2b2lkIGJjbWFzcF9zZXRfcHJvbWlzYyhzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGJv b2wgZW4pOworCit2b2lkIGJjbWFzcF9zZXRfYWxsbXVsdGkoc3RydWN0IGJjbWFzcF9pbnRmICpp bnRmLCBib29sIGVuKTsKKwordm9pZCBiY21hc3Bfc2V0X2Jyb2FkKHN0cnVjdCBiY21hc3BfaW50 ZiAqaW50ZiwgYm9vbCBlbik7CisKK3ZvaWQgYmNtYXNwX3NldF9vYWRkcihzdHJ1Y3QgYmNtYXNw X2ludGYgKmludGYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsCisJCSAgICAgIGJvb2wgZW4p OworCitpbnQgYmNtYXNwX3NldF9lbl9tZGFfZmlsdGVyKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50 ZiwgdW5zaWduZWQgY2hhciAqYWRkciwKKwkJCSAgICAgdW5zaWduZWQgY2hhciAqbWFzayk7CisK K3ZvaWQgYmNtYXNwX2Rpc2FibGVfYWxsX2ZpbHRlcnMoc3RydWN0IGJjbWFzcF9pbnRmICppbnRm KTsKKwordm9pZCBiY21hc3BfY29yZV9jbG9ja19zZXRfaW50ZihzdHJ1Y3QgYmNtYXNwX2ludGYg KmludGYsIGJvb2wgZW4pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVy bmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2V0aHRvb2wuYyBiL2RyaXZlcnMvPQpuZXQvZXRoZXJu ZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfZXRodG9vbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMC4uMzk0YzBlMWNiMDI2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfZXRodG9vbC5jCkBAIC0wLDAgKzEs NDAgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisjZGVmaW5lIHByX2Zt dChmbXQpCQkJCSJiY21hc3BfZXRodG9vbDogIiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L2V0aHRv b2wuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0 Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgImJjbWFzcC5oIgorI2luY2x1ZGUgImJjbWFzcF9p bnRmX2RlZnMuaCIKKworc3RhdGljIHZvaWQgYmNtYXNwX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRf ZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKK3sK KwlzdHJzY3B5KGluZm8tPmRyaXZlciwgImJjbWFzcCIsIHNpemVvZihpbmZvLT5kcml2ZXIpKTsK KwlzdHJzY3B5KGluZm8tPmJ1c19pbmZvLCBkZXZfbmFtZShkZXYtPmRldi5wYXJlbnQpLAorCQlz aXplb2YoaW5mby0+YnVzX2luZm8pKTsKK30KKworc3RhdGljIHUzMiBiY21hc3BfZ2V0X21zZ2xl dmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRm ID0zRCBuZXRkZXZfcHJpdihkZXYpOworCisJcmV0dXJuIGludGYtPm1zZ19lbmFibGU7Cit9CisK K3N0YXRpYyB2b2lkIGJjbWFzcF9zZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwg dTMyIGxldmVsKQoreworCXN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiA9M0QgbmV0ZGV2X3ByaXYo ZGV2KTsKKworCWludGYtPm1zZ19lbmFibGUgPTNEIGxldmVsOworfQorCitjb25zdCBzdHJ1Y3Qg ZXRodG9vbF9vcHMgYmNtYXNwX2V0aHRvb2xfb3BzID0zRCB7CisJLmdldF9kcnZpbmZvCQk9M0Qg YmNtYXNwX2dldF9kcnZpbmZvLAorCS5nZXRfbGluawkJPTNEIGV0aHRvb2xfb3BfZ2V0X2xpbmss CisJLmdldF9saW5rX2tzZXR0aW5ncwk9M0QgcGh5X2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdz LAorCS5zZXRfbGlua19rc2V0dGluZ3MJPTNEIHBoeV9ldGh0b29sX3NldF9saW5rX2tzZXR0aW5n cywKKwkuZ2V0X21zZ2xldmVsCQk9M0QgYmNtYXNwX2dldF9tc2dsZXZlbCwKKwkuc2V0X21zZ2xl dmVsCQk9M0QgYmNtYXNwX3NldF9tc2dsZXZlbCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL25l dC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmMgYi9kcml2ZXJzL25ldD0KL2V0 aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2ludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLjlkNTk5MDY2Mzc2OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZl cnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2ludGYuYwpAQCAtMCwwICsxLDEz NjMgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisjZGVmaW5lIHByX2Zt dChmbXQpCQkJImJjbWFzcF9pbnRmOiAiIGZtdAorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5o PgorI2luY2x1ZGUgPGxpbnV4L2JyY21waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNp bmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Cisj aW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfbmV0Lmg+Cisj aW5jbHVkZSA8bGludXgvb2ZfbWRpby5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorI2luY2x1 ZGUgPGxpbnV4L3BoeV9maXhlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cF9jbGFzc2lmeS5oPgor I2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPG5ldC9pcC5oPgor I2luY2x1ZGUgPG5ldC9pcHY2Lmg+CisKKyNpbmNsdWRlICJiY21hc3AuaCIKKyNpbmNsdWRlICJi Y21hc3BfaW50Zl9kZWZzLmgiCisKK3N0YXRpYyBpbnQgaW5jcl9yaW5nKGludCBpbmRleCwgaW50 IHJpbmdfY291bnQpCit7CisJaW5kZXgrKzsKKwlpZiAoaW5kZXggPTNEPTNEIHJpbmdfY291bnQp CisJCXJldHVybiAwOworCisJcmV0dXJuIGluZGV4OworfQorCisvKiBQb2ludHMgdG8gbGFzdCBi eXRlIG9mIGRlc2NyaXB0b3IgKi8KK3N0YXRpYyBkbWFfYWRkcl90IGluY3JfbGFzdF9ieXRlKGRt YV9hZGRyX3QgYWRkciwgZG1hX2FkZHJfdCBiZWcsCisJCQkJIGludCByaW5nX2NvdW50KQorewor CWRtYV9hZGRyX3QgZW5kID0zRCBiZWcgKyAocmluZ19jb3VudCAqIERFU0NfU0laRSk7CisKKwlh ZGRyICs9M0QgREVTQ19TSVpFOworCWlmIChhZGRyID4gZW5kKQorCQlyZXR1cm4gYmVnICsgREVT Q19TSVpFIC0gMTsKKworCXJldHVybiBhZGRyOworfQorCisvKiBQb2ludHMgdG8gZmlyc3QgYnl0 ZSBvZiBkZXNjcmlwdG9yICovCitzdGF0aWMgZG1hX2FkZHJfdCBpbmNyX2ZpcnN0X2J5dGUoZG1h X2FkZHJfdCBhZGRyLCBkbWFfYWRkcl90IGJlZywKKwkJCQkgIGludCByaW5nX2NvdW50KQorewor CWRtYV9hZGRyX3QgZW5kID0zRCBiZWcgKyAocmluZ19jb3VudCAqIERFU0NfU0laRSk7CisKKwlh ZGRyICs9M0QgREVTQ19TSVpFOworCWlmIChhZGRyID49M0QgZW5kKQorCQlyZXR1cm4gYmVnOwor CisJcmV0dXJuIGFkZHI7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9lbmFibGVfdHgoc3RydWN0 IGJjbWFzcF9pbnRmICppbnRmLCBpbnQgZW4pCit7CisJaWYgKGVuKSB7CisJCXR4X3NwYl9jdHJs X3dsKGludGYsIFRYX1NQQl9DVFJMX0VOQUJMRV9FTiwgVFhfU1BCX0NUUkxfRU5BQkxFKTsKKwkJ dHhfZXBrdF9jb3JlX3dsKGludGYsIChUWF9FUEtUX0NfQ0ZHX01JU0NfRU4gfAorCQkJCVRYX0VQ S1RfQ19DRkdfTUlTQ19QVCB8CisJCQkJKGludGYtPnBvcnQgPDwgVFhfRVBLVF9DX0NGR19NSVND X1BTX1NISUZUKSksCisJCQkJVFhfRVBLVF9DX0NGR19NSVNDKTsKKwl9IGVsc2UgeworCQl0eF9z cGJfY3RybF93bChpbnRmLCAweDAsIFRYX1NQQl9DVFJMX0VOQUJMRSk7CisJCXR4X2Vwa3RfY29y ZV93bChpbnRmLCAweDAsIFRYX0VQS1RfQ19DRkdfTUlTQyk7CisJfQorfQorCitzdGF0aWMgdm9p ZCBiY21hc3BfZW5hYmxlX3J4KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgaW50IGVuKQorewor CWlmIChlbikKKwkJcnhfZWRwa3RfY2ZnX3dsKGludGYsIFJYX0VEUEtUX0NGR19FTkFCTEVfRU4s CisJCQkJUlhfRURQS1RfQ0ZHX0VOQUJMRSk7CisJZWxzZQorCQlyeF9lZHBrdF9jZmdfd2woaW50 ZiwgMHgwLCBSWF9FRFBLVF9DRkdfRU5BQkxFKTsKK30KKworc3RhdGljIHZvaWQgYmNtYXNwX3Nl dF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgY2hhciBtYXNr W10gPTNEIHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTsKKwlzdHJ1Y3QgYmNt YXNwX2ludGYgKmludGYgPTNEIG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldGRldl9od19h ZGRyICpoYTsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrX2JoKCZpbnRmLT5wYXJlbnQtPm1kYV9s b2NrKTsKKworCWJjbWFzcF9kaXNhYmxlX2FsbF9maWx0ZXJzKGludGYpOworCisJaWYgKGRldi0+ ZmxhZ3MgJiBJRkZfUFJPTUlTQykKKwkJZ290byBzZXRfcHJvbWlzYzsKKworCWJjbWFzcF9zZXRf cHJvbWlzYyhpbnRmLCAwKTsKKworCWJjbWFzcF9zZXRfYnJvYWQoaW50ZiwgMSk7CisKKwliY21h c3Bfc2V0X29hZGRyKGludGYsIGRldi0+ZGV2X2FkZHIsIDEpOworCisJaWYgKGRldi0+ZmxhZ3Mg JiBJRkZfQUxMTVVMVEkpIHsKKwkJYmNtYXNwX3NldF9hbGxtdWx0aShpbnRmLCAxKTsKKwl9IGVs c2UgeworCQliY21hc3Bfc2V0X2FsbG11bHRpKGludGYsIDApOworCisJCW5ldGRldl9mb3JfZWFj aF9tY19hZGRyKGhhLCBkZXYpIHsKKwkJCXJldCA9M0QgYmNtYXNwX3NldF9lbl9tZGFfZmlsdGVy KGludGYsIGhhLT5hZGRyLCBtYXNrKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlnb3RvIHNldF9wcm9t aXNjOworCQkJfQorCQl9CisJfQorCisJbmV0ZGV2X2Zvcl9lYWNoX3VjX2FkZHIoaGEsIGRldikg eworCQlyZXQgPTNEIGJjbWFzcF9zZXRfZW5fbWRhX2ZpbHRlcihpbnRmLCBoYS0+YWRkciwgbWFz ayk7CisJCWlmIChyZXQpIHsKKwkJCWdvdG8gc2V0X3Byb21pc2M7CisJCX0KKwl9CisKKwlzcGlu X3VubG9ja19iaCgmaW50Zi0+cGFyZW50LT5tZGFfbG9jayk7CisJcmV0dXJuOworCitzZXRfcHJv bWlzYzoKKwliY21hc3Bfc2V0X3Byb21pc2MoaW50ZiwgMSk7CisKKwkvKiBkaXNhYmxlIGFsbCBm aWx0ZXJzIHVzZWQgYnkgdGhpcyBwb3J0ICovCisJYmNtYXNwX2Rpc2FibGVfYWxsX2ZpbHRlcnMo aW50Zik7CisKKwlzcGluX3VubG9ja19iaCgmaW50Zi0+cGFyZW50LT5tZGFfbG9jayk7Cit9CisK K3N0YXRpYyB2b2lkIGJjbWFzcF9jbGVhbl90eGNiKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50Ziwg aW50IGluZGV4KQoreworCXN0cnVjdCBiY21hc3BfdHhfY2IgKnR4Y2IgPTNEICZpbnRmLT50eF9j YnNbaW5kZXhdOworCisJdHhjYi0+c2tiID0zRCBOVUxMOworCWRtYV91bm1hcF9hZGRyX3NldCh0 eGNiLCBkbWFfYWRkciwgMCk7CisJZG1hX3VubWFwX2xlbl9zZXQodHhjYiwgZG1hX2xlbiwgMCk7 CisJdHhjYi0+bGFzdCA9M0QgZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgdHhfc3BiX3JpbmdfZnVs bChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGludCBjbnQpCit7CisJaW50IG5leHRfaW5kZXgs IGk7CisKKwkvKiBDaGVjayBpZiB3ZSBoYXZlIGVub3VnaCByb29tIGZvciBjbnQgZGVzY3JpcHRv cnMgKi8KKwlmb3IgKGkgPTNEIDA7IGkgPCBjbnQ7IGkrKykgeworCQluZXh0X2luZGV4ID0zRCBp bmNyX3JpbmcoaW50Zi0+dHhfc3BiX2luZGV4LCBERVNDX1JJTkdfQ09VTlQpOworCQlpZiAobmV4 dF9pbmRleCA9M0Q9M0QgaW50Zi0+dHhfc3BiX2NsZWFuX2luZGV4KQorCQkJcmV0dXJuIDE7CisJ fQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYmNtYXNwX2NzdW1f b2ZmbG9hZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAq c2tiLAorCQkJCQkgICBib29sICpjc3VtX2h3KQoreworCXUzMiBoZWFkZXIgPTNEIDAsIGhlYWRl cjIgPTNEIDAsIGVwa3QgPTNEIDA7CisJc3RydWN0IGJjbWFzcF9wa3Rfb2ZmbG9hZCAqb2ZmbG9h ZDsKKwl1bnNpZ25lZCBpbnQgaGVhZGVyX2NudCA9M0QgMDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbmV3 X3NrYjsKKwl1OCBpcF9wcm90bzsKKworCWlmIChza2ItPmlwX3N1bW1lZCAhPTNEIENIRUNLU1VN X1BBUlRJQUwpCisJCXJldHVybiBza2I7CisKKwlpZiAodW5saWtlbHkoc2tiX2hlYWRyb29tKHNr YikgPCBzaXplb2YoKm9mZmxvYWQpKSkgeworCQluZXdfc2tiID0zRCBza2JfcmVhbGxvY19oZWFk cm9vbShza2IsIHNpemVvZigqb2ZmbG9hZCkpOworCQlpZiAoIW5ld19za2IpIHsKKwkJCWdvdG8g aGVscDsKKwkJfQorCisJCWRldl9jb25zdW1lX3NrYl9hbnkoc2tiKTsKKwkJc2tiID0zRCBuZXdf c2tiOworCX0KKworCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgeworCWNhc2UgaHRvbnMoRVRIX1Bf SVApOgorCQloZWFkZXIgfD0zRCBQS1RfT0ZGTE9BRF9IRFJfU0laRV8yKChpcF9oZHJsZW4oc2ti KSA+PiA4KSAmIDB4Zik7CisJCWhlYWRlcjIgfD0zRCBQS1RfT0ZGTE9BRF9IRFIyX1NJWkVfMihp cF9oZHJsZW4oc2tiKSAmIDB4ZmYpOworCQllcGt0IHw9M0QgUEtUX09GRkxPQURfRVBLVF9JUCgw KSB8IFBLVF9PRkZMT0FEX0VQS1RfQ1NVTV9MMjsKKwkJaXBfcHJvdG8gPTNEIGlwX2hkcihza2Ip LT5wcm90b2NvbDsKKwkJaGVhZGVyX2NudCArPTNEIDI7CisJCWJyZWFrOworCWNhc2UgaHRvbnMo RVRIX1BfSVBWNik6CisJCWhlYWRlciB8PTNEIFBLVF9PRkZMT0FEX0hEUl9TSVpFXzIoKElQNl9I TEVOID4+IDgpICYgMHhmKTsKKwkJaGVhZGVyMiB8PTNEIFBLVF9PRkZMT0FEX0hEUjJfU0laRV8y KElQNl9ITEVOICYgMHhmZik7CisJCWVwa3QgfD0zRCBQS1RfT0ZGTE9BRF9FUEtUX0lQKDEpIHwg UEtUX09GRkxPQURfRVBLVF9DU1VNX0wyOworCQlpcF9wcm90byA9M0QgaXB2Nl9oZHIoc2tiKS0+ bmV4dGhkcjsKKwkJaGVhZGVyX2NudCArPTNEIDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWdv dG8gaGVscDsKKwl9CisKKwlzd2l0Y2ggKGlwX3Byb3RvKSB7CisJY2FzZSBJUFBST1RPX1RDUDoK KwkJaGVhZGVyMiB8PTNEIFBLVF9PRkZMT0FEX0hEUjJfU0laRV8zKHRjcF9oZHJsZW4oc2tiKSk7 CisJCWVwa3QgfD0zRCBQS1RfT0ZGTE9BRF9FUEtUX1RQKDApIHwgUEtUX09GRkxPQURfRVBLVF9D U1VNX0wzOworCQloZWFkZXJfY250Kys7CisJCWJyZWFrOworCWNhc2UgSVBQUk9UT19VRFA6CisJ CWhlYWRlcjIgfD0zRCBQS1RfT0ZGTE9BRF9IRFIyX1NJWkVfMyhVRFBfSExFTik7CisJCWVwa3Qg fD0zRCBQS1RfT0ZGTE9BRF9FUEtUX1RQKDEpIHwgUEtUX09GRkxPQURfRVBLVF9DU1VNX0wzOwor CQloZWFkZXJfY250Kys7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWdvdG8gaGVscDsKKwl9CisK KwlvZmZsb2FkID0zRCAoc3RydWN0IGJjbWFzcF9wa3Rfb2ZmbG9hZCAqKXNrYl9wdXNoKHNrYiwg c2l6ZW9mKCpvZmZsb2FkKSk7CisKKwloZWFkZXIgfD0zRCBQS1RfT0ZGTE9BRF9IRFJfT1AgfCBQ S1RfT0ZGTE9BRF9IRFJfQ09VTlQoaGVhZGVyX2NudCkgfAorCQkgIFBLVF9PRkZMT0FEX0hEUl9T SVpFXzEoRVRIX0hMRU4pOworCWVwa3QgfD0zRCBQS1RfT0ZGTE9BRF9FUEtUX09QOworCisJb2Zm bG9hZC0+bm9wID0zRCBodG9ubChQS1RfT0ZGTE9BRF9OT1ApOworCW9mZmxvYWQtPmhlYWRlciA9 M0QgaHRvbmwoaGVhZGVyKTsKKwlvZmZsb2FkLT5oZWFkZXIyID0zRCBodG9ubChoZWFkZXIyKTsK KwlvZmZsb2FkLT5lcGt0ID0zRCBodG9ubChlcGt0KTsKKwlvZmZsb2FkLT5lbmQgPTNEIGh0b25s KFBLVF9PRkZMT0FEX0VORF9PUCk7CisJKmNzdW1faHcgPTNEIHRydWU7CisKKwlyZXR1cm4gc2ti OworCitoZWxwOgorCXNrYl9jaGVja3N1bV9oZWxwKHNrYik7CisKKwlyZXR1cm4gc2tiOworfQor CitzdGF0aWMgdW5zaWduZWQgbG9uZyBiY21hc3BfcnhfZWRwa3RfZG1hX3JxKHN0cnVjdCBiY21h c3BfaW50ZiAqaW50ZikKK3sKKwlyZXR1cm4gcnhfZWRwa3RfZG1hX3JxKGludGYsIFJYX0VEUEtU X0RNQV9WQUxJRCk7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9yeF9lZHBrdF9jZmdfd3Eoc3Ry dWN0IGJjbWFzcF9pbnRmICppbnRmLCBkbWFfYWRkcl90IGFkPQpkcikKK3sKKwlyeF9lZHBrdF9j Zmdfd3EoaW50ZiwgYWRkciwgUlhfRURQS1RfUklOR19CVUZGRVJfUkVBRCk7Cit9CisKK3N0YXRp YyB2b2lkIGJjbWFzcF9yeF9lZHBrdF9kbWFfd3Eoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBk bWFfYWRkcl90IGFkPQpkcikKK3sKKwlyeF9lZHBrdF9kbWFfd3EoaW50ZiwgYWRkciwgUlhfRURQ S1RfRE1BX1JFQUQpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBiY21hc3BfdHhfc3BiX2Rt YV9ycShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpCit7CisJcmV0dXJuIHR4X3NwYl9kbWFfcnEo aW50ZiwgVFhfU1BCX0RNQV9SRUFEKTsKK30KKworc3RhdGljIHZvaWQgYmNtYXNwX3R4X3NwYl9k bWFfd3Eoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBkbWFfYWRkcl90IGFkZHIpCit7CisJdHhf c3BiX2RtYV93cShpbnRmLCBhZGRyLCBUWF9TUEJfRE1BX1ZBTElEKTsKK30KKworc3RhdGljIGNv bnN0IHN0cnVjdCBiY21hc3BfaW50Zl9vcHMgYmNtYXNwX2ludGZfb3BzID0zRCB7CisJLnJ4X2Rl c2NfcmVhZCA9M0QgYmNtYXNwX3J4X2VkcGt0X2RtYV9ycSwKKwkucnhfYnVmZmVyX3dyaXRlID0z RCBiY21hc3BfcnhfZWRwa3RfY2ZnX3dxLAorCS5yeF9kZXNjX3dyaXRlID0zRCBiY21hc3Bfcnhf ZWRwa3RfZG1hX3dxLAorCS50eF9yZWFkID0zRCBiY21hc3BfdHhfc3BiX2RtYV9ycSwKKwkudHhf d3JpdGUgPTNEIGJjbWFzcF90eF9zcGJfZG1hX3dxLAorfTsKKworc3RhdGljIG5ldGRldl90eF90 IGJjbWFzcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYp Cit7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmID0zRCBuZXRkZXZfcHJpdihkZXYpOworCXVu c2lnbmVkIGludCB0b3RhbF9ieXRlcywgc2l6ZTsKKwlpbnQgc3BiX2luZGV4LCBucl9mcmFncywg aSwgajsKKwlzdHJ1Y3QgYmNtYXNwX3R4X2NiICp0eGNiOworCWRtYV9hZGRyX3QgbWFwcGluZywg dmFsaWQ7CisJc3RydWN0IGJjbWFzcF9kZXNjICpkZXNjOworCWJvb2wgY3N1bV9odyA9M0QgZmFs c2U7CisJc3RydWN0IGRldmljZSAqa2RldjsKKwlza2JfZnJhZ190ICpmcmFnOworCisJa2RldiA9 M0QgJmludGYtPnBhcmVudC0+cGRldi0+ZGV2OworCisJbnJfZnJhZ3MgPTNEIHNrYl9zaGluZm8o c2tiKS0+bnJfZnJhZ3M7CisKKwlpZiAodHhfc3BiX3JpbmdfZnVsbChpbnRmLCBucl9mcmFncyAr IDEpKSB7CisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJbmV0ZGV2X2VycihkZXYsICJUeCBS aW5nIEZ1bGwhXG4iKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCX0KKworCS8qIFNhdmUg c2tiIGxlbiBiZWZvcmUgYWRkaW5nIGNzdW0gb2ZmbG9hZCBoZWFkZXIgKi8KKwl0b3RhbF9ieXRl cyA9M0Qgc2tiLT5sZW47CisJc2tiID0zRCBiY21hc3BfY3N1bV9vZmZsb2FkKGRldiwgc2tiLCAm Y3N1bV9odyk7CisJaWYgKCFza2IpCisJCXJldHVybiBORVRERVZfVFhfT0s7CisKKwlzcGJfaW5k ZXggPTNEIGludGYtPnR4X3NwYl9pbmRleDsKKwl2YWxpZCA9M0QgaW50Zi0+dHhfc3BiX2RtYV92 YWxpZDsKKwlmb3IgKGkgPTNEIDA7IGkgPD0zRCBucl9mcmFnczsgaSsrKSB7CisJCWlmICghaSkg eworCQkJc2l6ZSA9M0Qgc2tiX2hlYWRsZW4oc2tiKTsKKwkJCWlmICghbnJfZnJhZ3MgJiYgc2l6 ZSA8IChFVEhfWkxFTiArIEVUSF9GQ1NfTEVOKSkgeworCQkJCWlmIChza2JfcHV0X3BhZHRvKHNr YiwgRVRIX1pMRU4gKyBFVEhfRkNTX0xFTikpCisJCQkJCXJldHVybiBORVRERVZfVFhfT0s7CisJ CQkJc2l6ZSA9M0Qgc2tiLT5sZW47CisJCQl9CisJCQltYXBwaW5nID0zRCBkbWFfbWFwX3Npbmds ZShrZGV2LCBza2ItPmRhdGEsIHNpemUsCisJCQkJCQkgRE1BX1RPX0RFVklDRSk7CisJCX0gZWxz ZSB7CisJCQlmcmFnID0zRCAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpIC0gMV07CisJCQlzaXpl ID0zRCBza2JfZnJhZ19zaXplKGZyYWcpOworCQkJbWFwcGluZyA9M0Qgc2tiX2ZyYWdfZG1hX21h cChrZGV2LCBmcmFnLCAwLCBzaXplLAorCQkJCQkJICAgRE1BX1RPX0RFVklDRSk7CisJCX0KKwor CQlpZiAoZG1hX21hcHBpbmdfZXJyb3Ioa2RldiwgbWFwcGluZykpIHsKKwkJCXNwYl9pbmRleCA9 M0QgaW50Zi0+dHhfc3BiX2luZGV4OworCQkJZm9yIChqID0zRCAwOyBqIDwgaTsgaisrKSB7CisJ CQkJYmNtYXNwX2NsZWFuX3R4Y2IoaW50Ziwgc3BiX2luZGV4KTsKKwkJCQlzcGJfaW5kZXggPTNE IGluY3JfcmluZyhzcGJfaW5kZXgsCisJCQkJCQkgICAgICBERVNDX1JJTkdfQ09VTlQpOworCQkJ fQorCQkJLyogUmV3aW5kIHNvIHdlIGRvIG5vdCBoYXZlIGEgaG9sZSAqLworCQkJc3BiX2luZGV4 ID0zRCBpbnRmLT50eF9zcGJfaW5kZXg7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOworCQl9CisK KwkJdHhjYiA9M0QgJmludGYtPnR4X2Nic1tzcGJfaW5kZXhdOworCQlkZXNjID0zRCAmaW50Zi0+ dHhfc3BiX2NwdVtzcGJfaW5kZXhdOworCQltZW1zZXQoZGVzYywgMCwgc2l6ZW9mKCpkZXNjKSk7 CisJCXR4Y2ItPnNrYiA9M0Qgc2tiOworCQl0eGNiLT5ieXRlc19zZW50ID0zRCB0b3RhbF9ieXRl czsKKwkJZG1hX3VubWFwX2FkZHJfc2V0KHR4Y2IsIGRtYV9hZGRyLCBtYXBwaW5nKTsKKwkJZG1h X3VubWFwX2xlbl9zZXQodHhjYiwgZG1hX2xlbiwgc2l6ZSk7CisJCWlmICghaSkgeworCQkJZGVz Yy0+ZmxhZ3MgfD0zRCBERVNDX1NPRjsKKwkJCWlmIChjc3VtX2h3KQorCQkJCWRlc2MtPmZsYWdz IHw9M0QgREVTQ19FUEtUX0NNRDsKKwkJfQorCisJCWlmIChpID0zRD0zRCBucl9mcmFncykgewor CQkJZGVzYy0+ZmxhZ3MgfD0zRCBERVNDX0VPRjsKKwkJCXR4Y2ItPmxhc3QgPTNEIHRydWU7CisJ CX0KKworCQlkZXNjLT5idWYgPTNEIG1hcHBpbmc7CisJCWRlc2MtPnNpemUgPTNEIHNpemU7CisJ CWRlc2MtPmZsYWdzIHw9M0QgREVTQ19JTlRfRU47CisKKwkJbmV0aWZfZGJnKGludGYsIHR4X3F1 ZXVlZCwgZGV2LAorCQkJICAiJXMgZG1hX2J1Zj0zRCVwYWQgZG1hX2xlbj0zRDB4JXggZmxhZ3M9 M0QweCV4IGluZGV4PTNEMHgleFxuIiwKKwkJCSAgX19mdW5jX18sICZtYXBwaW5nLCBkZXNjLT5z aXplLCBkZXNjLT5mbGFncywKKwkJCSAgc3BiX2luZGV4KTsKKworCQlzcGJfaW5kZXggPTNEIGlu Y3JfcmluZyhzcGJfaW5kZXgsIERFU0NfUklOR19DT1VOVCk7CisJCXZhbGlkID0zRCBpbmNyX2xh c3RfYnl0ZSh2YWxpZCwgaW50Zi0+dHhfc3BiX2RtYV9hZGRyLAorCQkJCSAgICAgICBERVNDX1JJ TkdfQ09VTlQpOworCX0KKworCS8qIEVuc3VyZSBhbGwgZGVzY3JpcHRvcnMgaGF2ZSBiZWVuIHdy aXR0ZW4gdG8gRFJBTSBmb3IgdGhlCisJICogaGFyZHdhcmUgdG8gc2VlIHVwLXRvLWRhdGUgY29u dGVudHMuCisJICovCisJd21iKCk7CisKKwlpbnRmLT50eF9zcGJfaW5kZXggPTNEIHNwYl9pbmRl eDsKKwlpbnRmLT50eF9zcGJfZG1hX3ZhbGlkID0zRCB2YWxpZDsKKwliY21hc3BfaW50Zl90eF93 cml0ZShpbnRmLCBpbnRmLT50eF9zcGJfZG1hX3ZhbGlkKTsKKworCWlmICh0eF9zcGJfcmluZ19m dWxsKGludGYsIE1BWF9TS0JfRlJBR1MgKyAxKSkKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwor CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK30KKworc3RhdGljIHZvaWQgYmNtYXNwX25ldGlmX3N0 YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRm ID0zRCBuZXRkZXZfcHJpdihkZXYpOworCisJYmNtYXNwX3NldF9yeF9tb2RlKGRldik7CisJbmFw aV9lbmFibGUoJmludGYtPnR4X25hcGkpOworCW5hcGlfZW5hYmxlKCZpbnRmLT5yeF9uYXBpKTsK KworCWJjbWFzcF9lbmFibGVfcnhfaXJxKGludGYsIDEpOworCWJjbWFzcF9lbmFibGVfdHhfaXJx KGludGYsIDEpOworCisJcGh5X3N0YXJ0KGRldi0+cGh5ZGV2KTsKK30KKworc3RhdGljIHZvaWQg dW1hY19yZXNldChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpCit7CisJdW1hY193bChpbnRmLCAw eDAsIFVNQ19DTUQpOworCXVtYWNfd2woaW50ZiwgVU1DX0NNRF9TV19SRVNFVCwgVU1DX0NNRCk7 CisJdXNsZWVwX3JhbmdlKDEwLCAxMDApOworCXVtYWNfd2woaW50ZiwgMHgwLCBVTUNfQ01EKTsK K30KKworc3RhdGljIHZvaWQgdW1hY19zZXRfaHdfYWRkcihzdHJ1Y3QgYmNtYXNwX2ludGYgKmlu dGYsCisJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpCit7CisJdTMyIG1hYzAgPTNE IChhZGRyWzBdIDw8IDI0KSB8IChhZGRyWzFdIDw8IDE2KSB8IChhZGRyWzJdIDw8IDgpIHwKKwkJ ICAgIGFkZHJbM107CisJdTMyIG1hYzEgPTNEIChhZGRyWzRdIDw8IDgpIHwgYWRkcls1XTsKKwor CXVtYWNfd2woaW50ZiwgbWFjMCwgVU1DX01BQzApOworCXVtYWNfd2woaW50ZiwgbWFjMSwgVU1D X01BQzEpOworfQorCitzdGF0aWMgdm9pZCB1bWFjX2VuYWJsZV9zZXQoc3RydWN0IGJjbWFzcF9p bnRmICppbnRmLCB1MzIgbWFzaywKKwkJCSAgICB1bnNpZ25lZCBpbnQgZW5hYmxlKQoreworCXUz MiByZWc7CisKKwlyZWcgPTNEIHVtYWNfcmwoaW50ZiwgVU1DX0NNRCk7CisJaWYgKGVuYWJsZSkK KwkJcmVnIHw9M0QgbWFzazsKKwllbHNlCisJCXJlZyAmPTNEIH5tYXNrOworCXVtYWNfd2woaW50 ZiwgcmVnLCBVTUNfQ01EKTsKKworCS8qIFVuaU1BQyBzdG9wcyBvbiBhIHBhY2tldCBib3VuZGFy eSwgd2FpdCBmb3IgYSBmdWxsLXNpemVkIHBhY2tldAorCSAqIHRvIGJlIHByb2Nlc3NlZCAoMSBt c2VjKS4KKwkgKi8KKwlpZiAoZW5hYmxlID0zRD0zRCAwKQorCQl1c2xlZXBfcmFuZ2UoMTAwMCwg MjAwMCk7Cit9CisKK3N0YXRpYyB2b2lkIHVtYWNfaW5pdChzdHJ1Y3QgYmNtYXNwX2ludGYgKmlu dGYpCit7CisJdW1hY193bChpbnRmLCAweDgwMCwgVU1DX0ZSTV9MRU4pOworCXVtYWNfd2woaW50 ZiwgMHhmZmZmLCBVTUNfUEFVU0VfQ05UUkwpOworCXVtYWNfd2woaW50ZiwgMHg4MDAsIFVNQ19S WF9NQVhfUEtUX1NaKTsKKwl1bWFjX2VuYWJsZV9zZXQoaW50ZiwgVU1DX0NNRF9QUk9NSVNDLCAx KTsKK30KKworc3RhdGljIGludCBiY21hc3BfdHhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5h cGksIGludCBidWRnZXQpCit7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmID0zRAorCQljb250 YWluZXJfb2YobmFwaSwgc3RydWN0IGJjbWFzcF9pbnRmLCB0eF9uYXBpKTsKKwlzdHJ1Y3QgYmNt YXNwX2ludGZfc3RhdHM2NCAqc3RhdHMgPTNEICZpbnRmLT5zdGF0czY0OworCXN0cnVjdCBkZXZp Y2UgKmtkZXYgPTNEICZpbnRmLT5wYXJlbnQtPnBkZXYtPmRldjsKKwl1bnNpZ25lZCBsb25nIHJl YWQsIHJlbGVhc2VkID0zRCAwOworCXN0cnVjdCBiY21hc3BfdHhfY2IgKnR4Y2I7CisJc3RydWN0 IGJjbWFzcF9kZXNjICpkZXNjOworCWRtYV9hZGRyX3QgbWFwcGluZzsKKworCXJlYWQgPTNEIGJj bWFzcF9pbnRmX3R4X3JlYWQoaW50Zik7CisJd2hpbGUgKGludGYtPnR4X3NwYl9kbWFfcmVhZCAh PTNEIHJlYWQpIHsKKwkJdHhjYiA9M0QgJmludGYtPnR4X2Nic1tpbnRmLT50eF9zcGJfY2xlYW5f aW5kZXhdOworCQltYXBwaW5nID0zRCBkbWFfdW5tYXBfYWRkcih0eGNiLCBkbWFfYWRkcik7CisK KwkJZG1hX3VubWFwX3NpbmdsZShrZGV2LCBtYXBwaW5nLAorCQkJCSBkbWFfdW5tYXBfbGVuKHR4 Y2IsIGRtYV9sZW4pLAorCQkJCSBETUFfVE9fREVWSUNFKTsKKworCQlpZiAodHhjYi0+bGFzdCkg eworCQkJZGV2X2NvbnN1bWVfc2tiX2FueSh0eGNiLT5za2IpOworCisJCQl1NjRfc3RhdHNfdXBk YXRlX2JlZ2luKCZzdGF0cy0+c3luY3ApOworCQkJdTY0X3N0YXRzX2luYygmc3RhdHMtPnR4X3Bh Y2tldHMpOworCQkJdTY0X3N0YXRzX2FkZCgmc3RhdHMtPnR4X2J5dGVzLCB0eGNiLT5ieXRlc19z ZW50KTsKKwkJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZzdGF0cy0+c3luY3ApOworCQl9CisKKwkJ ZGVzYyA9M0QgJmludGYtPnR4X3NwYl9jcHVbaW50Zi0+dHhfc3BiX2NsZWFuX2luZGV4XTsKKwor CQluZXRpZl9kYmcoaW50ZiwgdHhfZG9uZSwgaW50Zi0+bmRldiwKKwkJCSAgIiVzIGRtYV9idWY9 M0QlcGFkIGRtYV9sZW49M0QweCV4IGZsYWdzPTNEMHgleCBjX2luZGV4PTNEMHgleFxuIiwKKwkJ CSAgX19mdW5jX18sICZtYXBwaW5nLCBkZXNjLT5zaXplLCBkZXNjLT5mbGFncywKKwkJCSAgaW50 Zi0+dHhfc3BiX2NsZWFuX2luZGV4KTsKKworCQliY21hc3BfY2xlYW5fdHhjYihpbnRmLCBpbnRm LT50eF9zcGJfY2xlYW5faW5kZXgpOworCQlyZWxlYXNlZCsrOworCisJCWludGYtPnR4X3NwYl9j bGVhbl9pbmRleCA9M0QgaW5jcl9yaW5nKGludGYtPnR4X3NwYl9jbGVhbl9pbmRleCwKKwkJCQkJ CSAgICAgREVTQ19SSU5HX0NPVU5UKTsKKwkJaW50Zi0+dHhfc3BiX2RtYV9yZWFkID0zRCBpbmNy X2ZpcnN0X2J5dGUoaW50Zi0+dHhfc3BiX2RtYV9yZWFkLAorCQkJCQkJCWludGYtPnR4X3NwYl9k bWFfYWRkciwKKwkJCQkJCQlERVNDX1JJTkdfQ09VTlQpOworCX0KKworCS8qIEVuc3VyZSBhbGwg ZGVzY3JpcHRvcnMgaGF2ZSBiZWVuIHdyaXR0ZW4gdG8gRFJBTSBmb3IgdGhlIGhhcmR3YXJlCisJ ICogdG8gc2VlIHVwZGF0ZWQgY29udGVudHMuCisJICovCisJd21iKCk7CisKKwluYXBpX2NvbXBs ZXRlKCZpbnRmLT50eF9uYXBpKTsKKworCWJjbWFzcF9lbmFibGVfdHhfaXJxKGludGYsIDEpOwor CisJaWYgKHJlbGVhc2VkKQorCQluZXRpZl93YWtlX3F1ZXVlKGludGYtPm5kZXYpOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmNtYXNwX3J4X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0 ICpuYXBpLCBpbnQgYnVkZ2V0KQoreworCXN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiA9M0QKKwkJ Y29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBiY21hc3BfaW50ZiwgcnhfbmFwaSk7CisJc3RydWN0 IGJjbWFzcF9pbnRmX3N0YXRzNjQgKnN0YXRzID0zRCAmaW50Zi0+c3RhdHM2NDsKKwlzdHJ1Y3Qg ZGV2aWNlICprZGV2ID0zRCAmaW50Zi0+cGFyZW50LT5wZGV2LT5kZXY7CisJdW5zaWduZWQgbG9u ZyBwcm9jZXNzZWQgPTNEIDA7CisJc3RydWN0IGJjbWFzcF9kZXNjICpkZXNjOworCXN0cnVjdCBz a19idWZmICpza2I7CisJZG1hX2FkZHJfdCB2YWxpZDsKKwl2b2lkICpkYXRhOworCXU2NCBmbGFn czsKKwl1MzIgbGVuOworCisJdmFsaWQgPTNEIGJjbWFzcF9pbnRmX3J4X2Rlc2NfcmVhZChpbnRm KSArIDE7CisJaWYgKHZhbGlkID0zRD0zRCBpbnRmLT5yeF9lZHBrdF9kbWFfYWRkciArIERFU0Nf UklOR19TSVpFKQorCQl2YWxpZCA9M0QgaW50Zi0+cnhfZWRwa3RfZG1hX2FkZHI7CisKKwl3aGls ZSAoKHByb2Nlc3NlZCA8IGJ1ZGdldCkgJiYgKHZhbGlkICE9M0QgaW50Zi0+cnhfZWRwa3RfZG1h X3JlYWQpKSB7CisJCWRlc2MgPTNEICZpbnRmLT5yeF9lZHBrdF9jcHVbaW50Zi0+cnhfZWRwa3Rf aW5kZXhdOworCisJCS8qIEVuc3VyZSB0aGF0IGRlc2NyaXB0b3IgaGFzIGJlZW4gZnVsbHkgd3Jp dHRlbiB0byBEUkFNIGJ5CisJCSAqIGhhcmR3YXJlIGJlZm9yZSByZWFkaW5nIGJ5IHRoZSBDUFUK KwkJICovCisJCXJtYigpOworCisJCS8qIENhbGN1bGF0ZSB2aXJ0IGFkZHIgYnkgb2Zmc2V0dGlu ZyBmcm9tIHBoeXNpY2FsIGFkZHIgKi8KKwkJZGF0YSA9M0QgaW50Zi0+cnhfcmluZ19jcHUgKwor CQkJKERFU0NfQUREUihkZXNjLT5idWYpIC0gaW50Zi0+cnhfcmluZ19kbWEpOworCisJCWZsYWdz ID0zRCBERVNDX0ZMQUdTKGRlc2MtPmJ1Zik7CisJCWlmICh1bmxpa2VseShmbGFncyAmIChERVND X0NSQ19FUlIgfCBERVNDX1JYX1NZTV9FUlIpKSkgeworCQkJbmV0aWZfZXJyKGludGYsIHJ4X3N0 YXR1cywgaW50Zi0+bmRldiwgImZsYWdzPTNEMHglbGx4XG4iLAorCQkJCSAgZmxhZ3MpOworCisJ CQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZzdGF0cy0+c3luY3ApOworCQkJaWYgKGZsYWdzICYg REVTQ19DUkNfRVJSKQorCQkJCXU2NF9zdGF0c19pbmMoJnN0YXRzLT5yeF9jcmNfZXJycyk7CisJ CQlpZiAoZmxhZ3MgJiBERVNDX1JYX1NZTV9FUlIpCisJCQkJdTY0X3N0YXRzX2luYygmc3RhdHMt PnJ4X3N5bV9lcnJzKTsKKwkJCXU2NF9zdGF0c19pbmMoJnN0YXRzLT5yeF9kcm9wcGVkKTsKKwkJ CXU2NF9zdGF0c191cGRhdGVfZW5kKCZzdGF0cy0+c3luY3ApOworCisJCQlnb3RvIG5leHQ7CisJ CX0KKworCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShrZGV2LCBERVNDX0FERFIoZGVzYy0+YnVm KSwgZGVzYy0+c2l6ZSwKKwkJCQkJRE1BX0ZST01fREVWSUNFKTsKKworCQlsZW4gPTNEIGRlc2Mt PnNpemU7CisKKwkJc2tiID0zRCBfX25ldGRldl9hbGxvY19za2IoaW50Zi0+bmRldiwgbGVuLAor CQkJCQkgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7CisJCWlmICghc2tiKSB7CisJCQl1NjRf c3RhdHNfdXBkYXRlX2JlZ2luKCZzdGF0cy0+c3luY3ApOworCQkJdTY0X3N0YXRzX2luYygmc3Rh dHMtPnJ4X2Vycm9ycyk7CisJCQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmc3RhdHMtPnN5bmNwKTsK KworCQkJbmV0aWZfd2FybihpbnRmLCByeF9lcnIsIGludGYtPm5kZXYsCisJCQkJICAgIlNLQiBh bGxvYyBmYWlsZWRcbiIpOworCQkJZ290byBuZXh0OworCQl9CisKKwkJc2tiX3B1dChza2IsIGxl bik7CisJCW1lbWNweShza2ItPmRhdGEsIGRhdGEsIGxlbik7CisKKwkJc2tiX3B1bGwoc2tiLCAy KTsKKwkJbGVuIC09M0QgMjsKKwkJaWYgKGxpa2VseShpbnRmLT5jcmNfZndkKSkgeworCQkJc2ti X3RyaW0oc2tiLCBsZW4gLSBFVEhfRkNTX0xFTik7CisJCQlsZW4gLT0zRCBFVEhfRkNTX0xFTjsK KwkJfQorCisJCWlmICgoaW50Zi0+bmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkgJiYK KwkJICAgIChkZXNjLT5idWYgJiBERVNDX0NIS1NVTSkpCisJCQlza2ItPmlwX3N1bW1lZCA9M0Qg Q0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisKKwkJc2tiLT5wcm90b2NvbCA9M0QgZXRoX3R5cGVfdHJh bnMoc2tiLCBpbnRmLT5uZGV2KTsKKworCQluYXBpX2dyb19yZWNlaXZlKG5hcGksIHNrYik7CisK KwkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmc3RhdHMtPnN5bmNwKTsKKwkJdTY0X3N0YXRzX2lu Yygmc3RhdHMtPnJ4X3BhY2tldHMpOworCQl1NjRfc3RhdHNfYWRkKCZzdGF0cy0+cnhfYnl0ZXMs IGxlbik7CisJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZzdGF0cy0+c3luY3ApOworCituZXh0Ogor CQliY21hc3BfaW50Zl9yeF9idWZmZXJfd3JpdGUoaW50ZiwgKERFU0NfQUREUihkZXNjLT5idWYp ICsKKwkJCQkJICAgIGRlc2MtPnNpemUpKTsKKworCQlwcm9jZXNzZWQrKzsKKwkJaW50Zi0+cnhf ZWRwa3RfZG1hX3JlYWQgPTNECisJCQlpbmNyX2ZpcnN0X2J5dGUoaW50Zi0+cnhfZWRwa3RfZG1h X3JlYWQsCisJCQkJCWludGYtPnJ4X2VkcGt0X2RtYV9hZGRyLAorCQkJCQlERVNDX1JJTkdfQ09V TlQpOworCQlpbnRmLT5yeF9lZHBrdF9pbmRleCA9M0QgaW5jcl9yaW5nKGludGYtPnJ4X2VkcGt0 X2luZGV4LAorCQkJCQkJIERFU0NfUklOR19DT1VOVCk7CisJfQorCisJYmNtYXNwX2ludGZfcnhf ZGVzY193cml0ZShpbnRmLCBpbnRmLT5yeF9lZHBrdF9kbWFfcmVhZCk7CisKKwlpZiAocHJvY2Vz c2VkIDwgYnVkZ2V0KSB7CisJCW5hcGlfY29tcGxldGVfZG9uZSgmaW50Zi0+cnhfbmFwaSwgcHJv Y2Vzc2VkKTsKKwkJYmNtYXNwX2VuYWJsZV9yeF9pcnEoaW50ZiwgMSk7CisJfQorCisJcmV0dXJu IHByb2Nlc3NlZDsKK30KKworc3RhdGljIHZvaWQgYmNtYXNwX2Fkal9saW5rKHN0cnVjdCBuZXRf ZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmID0zRCBuZXRkZXZfcHJp dihkZXYpOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPTNEIGRldi0+cGh5ZGV2OworCXUz MiBjbWRfYml0cyA9M0QgMCwgcmVnOworCWludCBjaGFuZ2VkID0zRCAwOworCisJaWYgKGludGYt Pm9sZF9saW5rICE9M0QgcGh5ZGV2LT5saW5rKSB7CisJCWNoYW5nZWQgPTNEIDE7CisJCWludGYt Pm9sZF9saW5rID0zRCBwaHlkZXYtPmxpbms7CisJfQorCisJaWYgKGludGYtPm9sZF9kdXBsZXgg IT0zRCBwaHlkZXYtPmR1cGxleCkgeworCQljaGFuZ2VkID0zRCAxOworCQlpbnRmLT5vbGRfZHVw bGV4ID0zRCBwaHlkZXYtPmR1cGxleDsKKwl9CisKKwlzd2l0Y2ggKHBoeWRldi0+c3BlZWQpIHsK KwljYXNlIFNQRUVEXzI1MDA6CisJCWNtZF9iaXRzID0zRCBVTUNfQ01EX1NQRUVEXzI1MDA7CisJ CWJyZWFrOworCWNhc2UgU1BFRURfMTAwMDoKKwkJY21kX2JpdHMgPTNEIFVNQ19DTURfU1BFRURf MTAwMDsKKwkJYnJlYWs7CisJY2FzZSBTUEVFRF8xMDA6CisJCWNtZF9iaXRzID0zRCBVTUNfQ01E X1NQRUVEXzEwMDsKKwkJYnJlYWs7CisJY2FzZSBTUEVFRF8xMDoKKwkJY21kX2JpdHMgPTNEIFVN Q19DTURfU1BFRURfMTA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwljbWRf Yml0cyA8PD0zRCBVTUNfQ01EX1NQRUVEX1NISUZUOworCisJaWYgKHBoeWRldi0+ZHVwbGV4ID0z RD0zRCBEVVBMRVhfSEFMRikKKwkJY21kX2JpdHMgfD0zRCBVTUNfQ01EX0hEX0VOOworCisJaWYg KGludGYtPm9sZF9wYXVzZSAhPTNEIHBoeWRldi0+cGF1c2UpIHsKKwkJY2hhbmdlZCA9M0QgMTsK KwkJaW50Zi0+b2xkX3BhdXNlID0zRCBwaHlkZXYtPnBhdXNlOworCX0KKworCWlmICghcGh5ZGV2 LT5wYXVzZSkKKwkJY21kX2JpdHMgfD0zRCBVTUNfQ01EX1JYX1BBVVNFX0lHTk9SRSB8IFVNQ19D TURfVFhfUEFVU0VfSUdOT1JFOworCisJaWYgKCFjaGFuZ2VkKQorCQlyZXR1cm47CisKKwlpZiAo cGh5ZGV2LT5saW5rKSB7CisJCXJlZyA9M0QgdW1hY19ybChpbnRmLCBVTUNfQ01EKTsKKwkJcmVn ICY9M0QgfigoVU1DX0NNRF9TUEVFRF9NQVNLIDw8IFVNQ19DTURfU1BFRURfU0hJRlQpIHwKKwkJ CVVNQ19DTURfSERfRU4gfCBVTUNfQ01EX1JYX1BBVVNFX0lHTk9SRSB8CisJCQlVTUNfQ01EX1RY X1BBVVNFX0lHTk9SRSk7CisJCXJlZyB8PTNEIGNtZF9iaXRzOworCQl1bWFjX3dsKGludGYsIHJl ZywgVU1DX0NNRCk7CisJfQorCisJcmVnID0zRCByZ21paV9ybChpbnRmLCBSR01JSV9PT0JfQ05U UkwpOworCWlmIChwaHlkZXYtPmxpbmspCisJCXJlZyB8PTNEIFJHTUlJX0xJTks7CisJZWxzZQor CQlyZWcgJj0zRCB+UkdNSUlfTElOSzsKKwlyZ21paV93bChpbnRmLCByZWcsIFJHTUlJX09PQl9D TlRSTCk7CisKKwlpZiAoY2hhbmdlZCkKKwkJcGh5X3ByaW50X3N0YXR1cyhwaHlkZXYpOworfQor CitzdGF0aWMgaW50IGJjbWFzcF9pbml0X3J4KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZikKK3sK KwlzdHJ1Y3QgZGV2aWNlICprZGV2ID0zRCAmaW50Zi0+cGFyZW50LT5wZGV2LT5kZXY7CisJc3Ry dWN0IHBhZ2UgKmJ1ZmZlcl9wZzsKKwlkbWFfYWRkcl90IGRtYTsKKwl2b2lkICpwOworCXUzMiBy ZWc7CisJaW50IHJldDsKKworCWludGYtPnJ4X2J1Zl9vcmRlciA9M0QgZ2V0X29yZGVyKFJJTkdf QlVGRkVSX1NJWkUpOworCWJ1ZmZlcl9wZyA9M0QgYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCwgaW50 Zi0+cnhfYnVmX29yZGVyKTsKKworCWRtYSA9M0QgZG1hX21hcF9wYWdlKGtkZXYsIGJ1ZmZlcl9w ZywgMCwgUklOR19CVUZGRVJfU0laRSwKKwkJCSAgIERNQV9GUk9NX0RFVklDRSk7CisJaWYgKGRt YV9tYXBwaW5nX2Vycm9yKGtkZXYsIGRtYSkpIHsKKwkJX19mcmVlX3BhZ2VzKGJ1ZmZlcl9wZywg aW50Zi0+cnhfYnVmX29yZGVyKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWludGYtPnJ4X3Jp bmdfY3B1ID0zRCBwYWdlX3RvX3ZpcnQoYnVmZmVyX3BnKTsKKwlpbnRmLT5yeF9yaW5nX2RtYSA9 M0QgZG1hOworCWludGYtPnJ4X3JpbmdfZG1hX3ZhbGlkID0zRCBpbnRmLT5yeF9yaW5nX2RtYSAr IFJJTkdfQlVGRkVSX1NJWkUgLSAxOworCisJcCA9M0QgZG1hX2FsbG9jX2NvaGVyZW50KGtkZXYs IERFU0NfUklOR19TSVpFLCAmaW50Zi0+cnhfZWRwa3RfZG1hX2FkZHIsCisJCQkgICAgICAgR0ZQ X0tFUk5FTCk7CisJaWYgKCFwKSB7CisJCXJldCA9M0QgLUVOT01FTTsKKwkJZ290byBmcmVlX3J4 X3Jpbmc7CisJfQorCWludGYtPnJ4X2VkcGt0X2NwdSA9M0QgcDsKKworCW5ldGlmX25hcGlfYWRk KGludGYtPm5kZXYsICZpbnRmLT5yeF9uYXBpLCBiY21hc3BfcnhfcG9sbCk7CisKKwlpbnRmLT5y eF9lZHBrdF9kbWFfcmVhZCA9M0QgaW50Zi0+cnhfZWRwa3RfZG1hX2FkZHI7CisJaW50Zi0+cnhf ZWRwa3RfaW5kZXggPTNEIDA7CisKKwkvKiBNYWtlIHN1cmUgY2hhbm5lbHMgYXJlIGRpc2FibGVk ICovCisJcnhfZWRwa3RfY2ZnX3dsKGludGYsIDB4MCwgUlhfRURQS1RfQ0ZHX0VOQUJMRSk7CisK KwkvKiBSeCBTUEIgKi8KKwlyeF9lZHBrdF9jZmdfd3EoaW50ZiwgaW50Zi0+cnhfcmluZ19kbWEs IFJYX0VEUEtUX1JJTkdfQlVGRkVSX1JFQUQpOworCXJ4X2VkcGt0X2NmZ193cShpbnRmLCBpbnRm LT5yeF9yaW5nX2RtYSwgUlhfRURQS1RfUklOR19CVUZGRVJfV1JJVEUpOworCXJ4X2VkcGt0X2Nm Z193cShpbnRmLCBpbnRmLT5yeF9yaW5nX2RtYSwgUlhfRURQS1RfUklOR19CVUZGRVJfQkFTRSk7 CisJcnhfZWRwa3RfY2ZnX3dxKGludGYsIGludGYtPnJ4X3JpbmdfZG1hX3ZhbGlkLAorCQkJUlhf RURQS1RfUklOR19CVUZGRVJfRU5EKTsKKwlyeF9lZHBrdF9jZmdfd3EoaW50ZiwgaW50Zi0+cnhf cmluZ19kbWFfdmFsaWQsCisJCQlSWF9FRFBLVF9SSU5HX0JVRkZFUl9WQUxJRCk7CisKKwkvKiBF RFBLVCAqLworCXJ4X2VkcGt0X2NmZ193bChpbnRmLCAoUlhfRURQS1RfQ0ZHX0NGRzBfUkJVRl80 SyA8PAorCQkJUlhfRURQS1RfQ0ZHX0NGRzBfREJVRl9TSElGVCkgfAorCQkgICAgICAgKFJYX0VE UEtUX0NGR19DRkcwXzY0X0FMTiA8PAorCQkJUlhfRURQS1RfQ0ZHX0NGRzBfQkFMTl9TSElGVCkg fAorCQkgICAgICAgKFJYX0VEUEtUX0NGR19DRkcwX0VGUk1fU1RVRiksCisJCQlSWF9FRFBLVF9D RkdfQ0ZHMCk7CisJcnhfZWRwa3RfZG1hX3dxKGludGYsIGludGYtPnJ4X2VkcGt0X2RtYV9hZGRy LCBSWF9FRFBLVF9ETUFfV1JJVEUpOworCXJ4X2VkcGt0X2RtYV93cShpbnRmLCBpbnRmLT5yeF9l ZHBrdF9kbWFfYWRkciwgUlhfRURQS1RfRE1BX1JFQUQpOworCXJ4X2VkcGt0X2RtYV93cShpbnRm LCBpbnRmLT5yeF9lZHBrdF9kbWFfYWRkciwgUlhfRURQS1RfRE1BX0JBU0UpOworCXJ4X2VkcGt0 X2RtYV93cShpbnRmLCBpbnRmLT5yeF9lZHBrdF9kbWFfYWRkciArIChERVNDX1JJTkdfU0laRSAt IDEpLAorCQkJUlhfRURQS1RfRE1BX0VORCk7CisJcnhfZWRwa3RfZG1hX3dxKGludGYsIGludGYt PnJ4X2VkcGt0X2RtYV9hZGRyICsgKERFU0NfUklOR19TSVpFIC0gMSksCisJCQlSWF9FRFBLVF9E TUFfVkFMSUQpOworCisJcmVnID0zRCBVTUFDMkZCX0NGR19ERUZBVUxUX0VOIHwKKwkgICAgICAo KGludGYtPmNoYW5uZWwgKyAxMSkgPDwgVU1BQzJGQl9DRkdfQ0hJRF9TSElGVCk7CisJcmVnIHw9 M0QgKDB4ZCA8PCBVTUFDMkZCX0NGR19PS19TRU5EX1NISUZUKTsKKwl1bWFjMmZiX3dsKGludGYs IHJlZywgVU1BQzJGQl9DRkcpOworCisJcmV0dXJuIDA7CisKK2ZyZWVfcnhfcmluZzoKKwlkbWFf dW5tYXBfcGFnZShrZGV2LCBpbnRmLT5yeF9yaW5nX2RtYSwgUklOR19CVUZGRVJfU0laRSwKKwkJ ICAgICAgIERNQV9GUk9NX0RFVklDRSk7CisJX19mcmVlX3BhZ2VzKHZpcnRfdG9fcGFnZShpbnRm LT5yeF9yaW5nX2NwdSksIGludGYtPnJ4X2J1Zl9vcmRlcik7CisKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgdm9pZCBiY21hc3BfcmVjbGFpbV9mcmVlX2FsbF9yeChzdHJ1Y3QgYmNtYXNwX2lu dGYgKmludGYpCit7CisJc3RydWN0IGRldmljZSAqa2RldiA9M0QgJmludGYtPnBhcmVudC0+cGRl di0+ZGV2OworCisJZG1hX2ZyZWVfY29oZXJlbnQoa2RldiwgREVTQ19SSU5HX1NJWkUsIGludGYt PnJ4X2VkcGt0X2NwdSwKKwkJCSAgaW50Zi0+cnhfZWRwa3RfZG1hX2FkZHIpOworCWRtYV91bm1h cF9wYWdlKGtkZXYsIGludGYtPnJ4X3JpbmdfZG1hLCBSSU5HX0JVRkZFUl9TSVpFLAorCQkgICAg ICAgRE1BX0ZST01fREVWSUNFKTsKKwlfX2ZyZWVfcGFnZXModmlydF90b19wYWdlKGludGYtPnJ4 X3JpbmdfY3B1KSwgaW50Zi0+cnhfYnVmX29yZGVyKTsKK30KKworc3RhdGljIGludCBiY21hc3Bf aW5pdF90eChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpCit7CisJc3RydWN0IGRldmljZSAqa2Rl diA9M0QgJmludGYtPnBhcmVudC0+cGRldi0+ZGV2OworCXZvaWQgKnA7CisJaW50IHJldDsKKwor CXAgPTNEIGRtYV9hbGxvY19jb2hlcmVudChrZGV2LCBERVNDX1JJTkdfU0laRSwgJmludGYtPnR4 X3NwYl9kbWFfYWRkciwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXApCisJCXJldHVy biAtRU5PTUVNOworCisJaW50Zi0+dHhfc3BiX2NwdSA9M0QgcDsKKwlpbnRmLT50eF9zcGJfZG1h X3ZhbGlkID0zRCBpbnRmLT50eF9zcGJfZG1hX2FkZHIgKyBERVNDX1JJTkdfU0laRSAtIDE7CisJ aW50Zi0+dHhfc3BiX2RtYV9yZWFkID0zRCBpbnRmLT50eF9zcGJfZG1hX2FkZHI7CisKKwlpbnRm LT50eF9jYnMgPTNEIGtjYWxsb2MoREVTQ19SSU5HX0NPVU5ULCBzaXplb2Yoc3RydWN0IGJjbWFz cF90eF9jYiksCisJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbnRmLT50eF9jYnMpIHsK KwkJcmV0ID0zRCAtRU5PTUVNOworCQlnb3RvIGZyZWVfdHhfc3BiOworCX0KKworCWludGYtPnR4 X3NwYl9pbmRleCA9M0QgMDsKKwlpbnRmLT50eF9zcGJfY2xlYW5faW5kZXggPTNEIDA7CisKKwlu ZXRpZl9uYXBpX2FkZF90eChpbnRmLT5uZGV2LCAmaW50Zi0+dHhfbmFwaSwgYmNtYXNwX3R4X3Bv bGwpOworCisJLyogTWFrZSBzdXJlIGNoYW5uZWxzIGFyZSBkaXNhYmxlZCAqLworCXR4X3NwYl9j dHJsX3dsKGludGYsIDB4MCwgVFhfU1BCX0NUUkxfRU5BQkxFKTsKKwl0eF9lcGt0X2NvcmVfd2wo aW50ZiwgMHgwLCBUWF9FUEtUX0NfQ0ZHX01JU0MpOworCisJLyogVHggU1BCICovCisJdHhfc3Bi X2N0cmxfd2woaW50ZiwgKChpbnRmLT5jaGFubmVsICsgOCkgPDwgVFhfU1BCX0NUUkxfWEZfQklE X1NISUZUKSwKKwkJICAgICAgIFRYX1NQQl9DVFJMX1hGX0NUUkwyKTsKKwl0eF9wYXVzZV9jdHJs X3dsKGludGYsICgxIDw8IChpbnRmLT5jaGFubmVsICsgOCkpLCBUWF9QQVVTRV9NQVBfVkVDVE9S KTsKKwl0eF9zcGJfdG9wX3dsKGludGYsIDB4MWUsIFRYX1NQQl9UT1BfQkxLT1VUKTsKKwl0eF9z cGJfdG9wX3dsKGludGYsIDB4MCwgVFhfU1BCX1RPUF9TUFJFX0JXX0NUUkwpOworCisJdHhfc3Bi X2RtYV93cShpbnRmLCBpbnRmLT50eF9zcGJfZG1hX2FkZHIsIFRYX1NQQl9ETUFfUkVBRCk7CisJ dHhfc3BiX2RtYV93cShpbnRmLCBpbnRmLT50eF9zcGJfZG1hX2FkZHIsIFRYX1NQQl9ETUFfQkFT RSk7CisJdHhfc3BiX2RtYV93cShpbnRmLCBpbnRmLT50eF9zcGJfZG1hX3ZhbGlkLCBUWF9TUEJf RE1BX0VORCk7CisJdHhfc3BiX2RtYV93cShpbnRmLCBpbnRmLT50eF9zcGJfZG1hX3ZhbGlkLCBU WF9TUEJfRE1BX1ZBTElEKTsKKworCXJldHVybiAwOworCitmcmVlX3R4X3NwYjoKKwlkbWFfZnJl ZV9jb2hlcmVudChrZGV2LCBERVNDX1JJTkdfU0laRSwgaW50Zi0+dHhfc3BiX2NwdSwKKwkJCSAg aW50Zi0+dHhfc3BiX2RtYV9hZGRyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lk IGJjbWFzcF9yZWNsYWltX2ZyZWVfYWxsX3R4KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZikKK3sK KwlzdHJ1Y3QgZGV2aWNlICprZGV2ID0zRCAmaW50Zi0+cGFyZW50LT5wZGV2LT5kZXY7CisKKwkv KiBGcmVlIGRlc2NyaXB0b3JzICovCisJZG1hX2ZyZWVfY29oZXJlbnQoa2RldiwgREVTQ19SSU5H X1NJWkUsIGludGYtPnR4X3NwYl9jcHUsCisJCQkgIGludGYtPnR4X3NwYl9kbWFfYWRkcik7CisK KwkvKiBGcmVlIGNicyAqLworCWtmcmVlKGludGYtPnR4X2Nicyk7Cit9CisKK3N0YXRpYyB2b2lk IGJjbWFzcF9lcGh5X2VuYWJsZV9zZXQoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBib29sIGVu YWJsZSkKK3sKKwl1MzIgbWFzayA9M0QgUkdNSUlfRVBIWV9DRkdfSUREUV9CSUFTIHwgUkdNSUlf RVBIWV9DRkdfRVhUX1BXUkRPV04gfAorCQkgICBSR01JSV9FUEhZX0NGR19JRERRX0dMT0JBTDsK Kwl1MzIgcmVnOworCisJcmVnID0zRCByZ21paV9ybChpbnRmLCBSR01JSV9FUEhZX0NOVFJMKTsK KwlpZiAoZW5hYmxlKSB7CisJCXJlZyAmPTNEIH5SR01JSV9FUEhZX0NLMjVfRElTOworCQlyZ21p aV93bChpbnRmLCByZWcsIFJHTUlJX0VQSFlfQ05UUkwpOworCQltZGVsYXkoMSk7CisKKwkJcmVn ICY9M0Qgfm1hc2s7CisJCXJlZyB8PTNEIFJHTUlJX0VQSFlfUkVTRVQ7CisJCXJnbWlpX3dsKGlu dGYsIHJlZywgUkdNSUlfRVBIWV9DTlRSTCk7CisJCW1kZWxheSgxKTsKKworCQlyZWcgJj0zRCB+ UkdNSUlfRVBIWV9SRVNFVDsKKwl9IGVsc2UgeworCQlyZWcgfD0zRCBtYXNrIHwgUkdNSUlfRVBI WV9SRVNFVDsKKwkJcmdtaWlfd2woaW50ZiwgcmVnLCBSR01JSV9FUEhZX0NOVFJMKTsKKwkJbWRl bGF5KDEpOworCQlyZWcgfD0zRCBSR01JSV9FUEhZX0NLMjVfRElTOworCX0KKwlyZ21paV93bChp bnRmLCByZWcsIFJHTUlJX0VQSFlfQ05UUkwpOworCW1kZWxheSgxKTsKKworCS8qIFNldCBvciBj bGVhciB0aGUgTEVEIGNvbnRyb2wgb3ZlcnJpZGUgdG8gYXZvaWQgbGlnaHRpbmcgdXAgTEVEcwor CSAqIHdoaWxlIHRoZSBFUEhZIGlzIHBvd2VyZWQgb2ZmIGFuZCBkcmF3aW5nIHVubmVjZXNzYXJ5 IGN1cnJlbnQuCisJICovCisJcmVnID0zRCByZ21paV9ybChpbnRmLCBSR01JSV9TWVNfTEVEX0NO VFJMKTsKKwlpZiAoZW5hYmxlKQorCQlyZWcgJj0zRCB+UkdNSUlfU1lTX0xFRF9DTlRSTF9MSU5L X09WUkQ7CisJZWxzZQorCQlyZWcgfD0zRCBSR01JSV9TWVNfTEVEX0NOVFJMX0xJTktfT1ZSRDsK KwlyZ21paV93bChpbnRmLCByZWcsIFJHTUlJX1NZU19MRURfQ05UUkwpOworfQorCitzdGF0aWMg dm9pZCBiY21hc3BfcmdtaWlfbW9kZV9lbl9zZXQoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBi b29sIGVuYWJsZSkKK3sKKwl1MzIgcmVnOworCisJcmVnID0zRCByZ21paV9ybChpbnRmLCBSR01J SV9PT0JfQ05UUkwpOworCXJlZyAmPTNEIH5SR01JSV9PT0JfRElTOworCWlmIChlbmFibGUpCisJ CXJlZyB8PTNEIFJHTUlJX01PREVfRU47CisJZWxzZQorCQlyZWcgJj0zRCB+UkdNSUlfTU9ERV9F TjsKKwlyZ21paV93bChpbnRmLCByZWcsIFJHTUlJX09PQl9DTlRSTCk7Cit9CisKK3N0YXRpYyB2 b2lkIGJjbWFzcF9uZXRpZl9kZWluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1 Y3QgYmNtYXNwX2ludGYgKmludGYgPTNEIG5ldGRldl9wcml2KGRldik7CisJdTMyIHJlZywgdGlt ZW91dCA9M0QgMTAwMDsKKworCW5hcGlfZGlzYWJsZSgmaW50Zi0+dHhfbmFwaSk7CisKKwliY21h c3BfZW5hYmxlX3R4KGludGYsIDApOworCisJLyogRmx1c2ggYW55IFRYIHBhY2tldHMgaW4gdGhl IHBpcGUgKi8KKwl0eF9zcGJfZG1hX3dsKGludGYsIFRYX1NQQl9ETUFfRklGT19GTFVTSCwgVFhf U1BCX0RNQV9GSUZPX0NUUkwpOworCWRvIHsKKwkJcmVnID0zRCB0eF9zcGJfZG1hX3JsKGludGYs IFRYX1NQQl9ETUFfRklGT19TVEFUVVMpOworCQlpZiAoIShyZWcgJiBUWF9TUEJfRE1BX0ZJRk9f RkxVU0gpKQorCQkJYnJlYWs7CisJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKKwl9IHdoaWxl ICh0aW1lb3V0LS0gPiAwKTsKKwl0eF9zcGJfZG1hX3dsKGludGYsIDB4MCwgVFhfU1BCX0RNQV9G SUZPX0NUUkwpOworCisJdW1hY19lbmFibGVfc2V0KGludGYsIFVNQ19DTURfVFhfRU4sIDApOwor CisJcGh5X3N0b3AoZGV2LT5waHlkZXYpOworCisJdW1hY19lbmFibGVfc2V0KGludGYsIFVNQ19D TURfUlhfRU4sIDApOworCisJYmNtYXNwX2ZsdXNoX3J4X3BvcnQoaW50Zik7CisJdXNsZWVwX3Jh bmdlKDEwMDAsIDIwMDApOworCWJjbWFzcF9lbmFibGVfcngoaW50ZiwgMCk7CisKKwluYXBpX2Rp c2FibGUoJmludGYtPnJ4X25hcGkpOworCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCisJYmNt YXNwX2VuYWJsZV90eF9pcnEoaW50ZiwgMCk7CisJYmNtYXNwX2VuYWJsZV9yeF9pcnEoaW50Ziwg MCk7CisKKwluZXRpZl9uYXBpX2RlbCgmaW50Zi0+dHhfbmFwaSk7CisJYmNtYXNwX3JlY2xhaW1f ZnJlZV9hbGxfdHgoaW50Zik7CisKKwluZXRpZl9uYXBpX2RlbCgmaW50Zi0+cnhfbmFwaSk7CisJ YmNtYXNwX3JlY2xhaW1fZnJlZV9hbGxfcngoaW50Zik7Cit9CisKK3N0YXRpYyBpbnQgYmNtYXNw X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmlu dGYgPTNEIG5ldGRldl9wcml2KGRldik7CisKKwluZXRpZl9kYmcoaW50ZiwgaWZkb3duLCBkZXYs ICJiY21hc3Agc3RvcFxuIik7CisKKwkvKiBTdG9wIHR4IGZyb20gdXBkYXRpbmcgSFcgKi8KKwlu ZXRpZl90eF9kaXNhYmxlKGRldik7CisKKwliY21hc3BfbmV0aWZfZGVpbml0KGRldik7CisKKwlw aHlfZGlzY29ubmVjdChkZXYtPnBoeWRldik7CisKKwkvKiBEaXNhYmxlIGludGVybmFsIEVQSFkg b3IgZXh0ZXJuYWwgUEhZICovCisJaWYgKGludGYtPmludGVybmFsX3BoeSkKKwkJYmNtYXNwX2Vw aHlfZW5hYmxlX3NldChpbnRmLCBmYWxzZSk7CisJZWxzZQorCQliY21hc3BfcmdtaWlfbW9kZV9l bl9zZXQoaW50ZiwgZmFsc2UpOworCisJLyogRGlzYWJsZSB0aGUgaW50ZXJmYWNlIGNsb2NrcyAq LworCWJjbWFzcF9jb3JlX2Nsb2NrX3NldF9pbnRmKGludGYsIGZhbHNlKTsKKworCWNsa19kaXNh YmxlX3VucHJlcGFyZShpbnRmLT5wYXJlbnQtPmNsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIHZvaWQgYmNtYXNwX2NvbmZpZ3VyZV9wb3J0KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZikK K3sKKwl1MzIgcmVnLCBpZF9tb2RlX2RpcyA9M0QgMDsKKworCXJlZyA9M0QgcmdtaWlfcmwoaW50 ZiwgUkdNSUlfUE9SVF9DTlRSTCk7CisJcmVnICY9M0QgflJHTUlJX1BPUlRfTU9ERV9NQVNLOwor CisJc3dpdGNoIChpbnRmLT5waHlfaW50ZXJmYWNlKSB7CisJY2FzZSBQSFlfSU5URVJGQUNFX01P REVfUkdNSUk6CisJCS8qIFJHTUlJX05PX0lEOiBUWEMgdHJhbnNpdGlvbnMgYXQgdGhlIHNhbWUg dGltZSBhcyBUWEQKKwkJICoJCShyZXF1aXJlcyBQQ0Igb3IgcmVjZWl2ZXItc2lkZSBkZWxheSkK KwkJICogUkdNSUk6CUFkZCAybnMgZGVsYXkgb24gVFhDICg5MCBkZWdyZWUgc2hpZnQpCisJCSAq CisJCSAqIElEIGlzIGltcGxpY2l0bHkgZGlzYWJsZWQgZm9yIDEwME1icHMgKFJHKU1JSSBvcGVy YXRpb24uCisJCSAqLworCQlpZF9tb2RlX2RpcyA9M0QgUkdNSUlfSURfTU9ERV9ESVM7CisJCWZh bGx0aHJvdWdoOworCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RYSUQ6CisJCXJlZyB8 PTNEIFJHTUlJX1BPUlRfTU9ERV9FWFRfR1BIWTsKKwkJYnJlYWs7CisJY2FzZSBQSFlfSU5URVJG QUNFX01PREVfTUlJOgorCQlyZWcgfD0zRCBSR01JSV9QT1JUX01PREVfRVhUX0VQSFk7CisJCWJy ZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChpbnRmLT5pbnRlcm5hbF9waHkp CisJCXJlZyB8PTNEIFJHTUlJX1BPUlRfTU9ERV9FUEhZOworCisJcmdtaWlfd2woaW50ZiwgcmVn LCBSR01JSV9QT1JUX0NOVFJMKTsKKworCXJlZyA9M0QgcmdtaWlfcmwoaW50ZiwgUkdNSUlfT09C X0NOVFJMKTsKKwlyZWcgJj0zRCB+UkdNSUlfSURfTU9ERV9ESVM7CisJcmVnIHw9M0QgaWRfbW9k ZV9kaXM7CisJcmdtaWlfd2woaW50ZiwgcmVnLCBSR01JSV9PT0JfQ05UUkwpOworfQorCitzdGF0 aWMgaW50IGJjbWFzcF9uZXRpZl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgcGh5 X2Nvbm5lY3QpCit7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmID0zRCBuZXRkZXZfcHJpdihk ZXYpOworCXBoeV9pbnRlcmZhY2VfdCBwaHlfaWZhY2UgPTNEIGludGYtPnBoeV9pbnRlcmZhY2U7 CisJdTMyIHBoeV9mbGFncyA9M0QgUEhZX0JSQ01fQVVUT19QV1JEV05fRU5BQkxFIHwKKwkJCVBI WV9CUkNNX0RJU19UWENSWENfTk9FTlJHWSB8CisJCQlQSFlfQlJDTV9JRERRX1NVU1BFTkQ7CisJ c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9M0QgTlVMTDsKKwlpbnQgcmV0OworCisJLyogQWx3 YXlzIGVuYWJsZSBpbnRlcmZhY2UgY2xvY2tzICovCisJYmNtYXNwX2NvcmVfY2xvY2tfc2V0X2lu dGYoaW50ZiwgdHJ1ZSk7CisKKwkvKiBFbmFibGUgaW50ZXJuYWwgUEhZIG9yIGV4dGVybmFsIFBI WSBiZWZvcmUgYW55IE1BQyBhY3Rpdml0eSAqLworCWlmIChpbnRmLT5pbnRlcm5hbF9waHkpCisJ CWJjbWFzcF9lcGh5X2VuYWJsZV9zZXQoaW50ZiwgdHJ1ZSk7CisJZWxzZQorCQliY21hc3Bfcmdt aWlfbW9kZV9lbl9zZXQoaW50ZiwgdHJ1ZSk7CisJYmNtYXNwX2NvbmZpZ3VyZV9wb3J0KGludGYp OworCisJLyogVGhpcyBpcyBhbiB1Z2x5IHF1aXJrIGJ1dCB3ZSBoYXZlIG5vdCBiZWVuIGNvcnJl Y3RseQorCSAqIGludGVycHJldGluZyB0aGUgcGh5X2ludGVyZmFjZSB2YWx1ZXMgYW5kIHdlIGhh dmUgZG9uZSB0aGF0CisJICogYWNyb3NzIGRpZmZlcmVudCBkcml2ZXJzLCBzbyBhdCBsZWFzdCB3 ZSBhcmUgY29uc2lzdGVudCBpbgorCSAqIG91ciBtaXN0YWtlcy4KKwkgKgorCSAqIFdoZW4gdGhl IEdlbmVyaWMgUEhZIGRyaXZlciBpcyBpbiB1c2UgZWl0aGVyIHRoZSBQSFkgaGFzCisJICogYmVl biBzdHJhcHBlZCBvciBwcm9ncmFtbWVkIGNvcnJlY3RseSBieSB0aGUgYm9vdCBsb2FkZXIgc28K KwkgKiB3ZSBzaG91bGQgc3RpY2sgdG8gb3VyIGluY29ycmVjdCBpbnRlcnByZXRhdGlvbiBzaW5j ZSB3ZQorCSAqIGhhdmUgdmFsaWRhdGVkIGl0LgorCSAqCisJICogTm93IHdoZW4gYSBkZWRpY2F0 ZWQgUEhZIGRyaXZlciBpcyBpbiB1c2UsIHdlIG5lZWQgdG8KKwkgKiByZXZlcnNlIHRoZSBtZWFu aW5nIG9mIHRoZSBwaHlfaW50ZXJmYWNlX21vZGUgdmFsdWVzIHRvCisJICogc29tZXRoaW5nIHRo YXQgdGhlIFBIWSBkcml2ZXIgd2lsbCBpbnRlcnByZXQgYW5kIGFjdCBvbiBzdWNoCisJICogdGhh dCB3ZSBoYXZlIHR3byBtaXN0YWtlcyBjYW5jZWxpbmcgdGhlbXNlbHZlcyBzbyB0byBzcGVhay4K KwkgKiBXZSBvbmx5IGRvIHRoaXMgZm9yIHRoZSB0d28gbW9kZXMgdGhhdCBHRU5FVCBkcml2ZXIK KwkgKiBvZmZpY2lhbGx5IHN1cHBvcnRzIG9uIEJyb2FkY29tIFNUQiBjaGlwczoKKwkgKiBQSFlf SU5URVJGQUNFX01PREVfUkdNSUkgYW5kIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9UWElELgor CSAqIE90aGVyIG1vZGVzIGFyZSBub3QgKm9mZmljaWFsbHkqIHN1cHBvcnRlZCB3aXRoIHRoZSBi b290CisJICogbG9hZGVyIGFuZCB0aGUgc2NyaXB0ZWQgZW52aXJvbm1lbnQgZ2VuZXJhdGluZyBE ZXZpY2UgVHJlZQorCSAqIGJsb2JzIGZvciB0aG9zZSBwbGF0Zm9ybXMuCisJICoKKwkgKiBOb3Rl IHRoYXQgaW50ZXJuYWwgUEhZIGFuZCBmaXhlZC1saW5rIGNvbmZpZ3VyYXRpb25zIGFyZSBub3QK KwkgKiBhZmZlY3RlZCBiZWNhdXNlIHRoZXkgdXNlIGRpZmZlcmVudCBwaHlfaW50ZXJmYWNlX3Qg dmFsdWVzCisJICogb3IgdGhlIEdlbmVyaWMgUEhZIGRyaXZlci4KKwkgKi8KKwlzd2l0Y2ggKHBo eV9pZmFjZSkgeworCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOgorCQlwaHlfaWZhY2Ug PTNEIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9JRDsKKwkJYnJlYWs7CisJY2FzZSBQSFlfSU5U RVJGQUNFX01PREVfUkdNSUlfVFhJRDoKKwkJcGh5X2lmYWNlID0zRCBQSFlfSU5URVJGQUNFX01P REVfUkdNSUlfUlhJRDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYg KHBoeV9jb25uZWN0KSB7CisJCXBoeWRldiA9M0Qgb2ZfcGh5X2Nvbm5lY3QoZGV2LCBpbnRmLT5w aHlfZG4sCisJCQkJCWJjbWFzcF9hZGpfbGluaywgcGh5X2ZsYWdzLAorCQkJCQlwaHlfaWZhY2Up OworCQlpZiAoIXBoeWRldikgeworCQkJcmV0ID0zRCAtRU5PREVWOworCQkJbmV0ZGV2X2Vycihk ZXYsICJjb3VsZCBub3QgYXR0YWNoIHRvIFBIWVxuIik7CisJCQlnb3RvIGVycl9waHlfZGlzYWJs ZTsKKwkJfQorCX0gZWxzZSB7CisJCXJldCA9M0QgcGh5X3Jlc3VtZShkZXYtPnBoeWRldik7CisJ CWlmIChyZXQpCisJCQlnb3RvIGVycl9waHlfZGlzYWJsZTsKKwl9CisKKwl1bWFjX3Jlc2V0KGlu dGYpOworCisJdW1hY19pbml0KGludGYpOworCisJLyogRGlzYWJsZSB0aGUgVW5pTUFDIFJYL1RY ICovCisJdW1hY19lbmFibGVfc2V0KGludGYsIChVTUNfQ01EX1JYX0VOIHwgVU1DX0NNRF9UWF9F TiksIDApOworCisJdW1hY19zZXRfaHdfYWRkcihpbnRmLCBkZXYtPmRldl9hZGRyKTsKKworCWlu dGYtPm9sZF9kdXBsZXggPTNEIC0xOworCWludGYtPm9sZF9saW5rID0zRCAtMTsKKwlpbnRmLT5v bGRfcGF1c2UgPTNEIC0xOworCisJcmV0ID0zRCBiY21hc3BfaW5pdF90eChpbnRmKTsKKwlpZiAo cmV0KQorCQlnb3RvIGVycl9waHlfZGlzY29ubmVjdDsKKworCS8qIFR1cm4gb24gYXNwICovCisJ YmNtYXNwX2VuYWJsZV90eChpbnRmLCAxKTsKKworCXJldCA9M0QgYmNtYXNwX2luaXRfcngoaW50 Zik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfcmVjbGFpbV90eDsKKworCWJjbWFzcF9lbmFibGVf cngoaW50ZiwgMSk7CisKKwkvKiBUdXJuIG9uIFVuaU1BQyBUWC9SWCAqLworCXVtYWNfZW5hYmxl X3NldChpbnRmLCAoVU1DX0NNRF9SWF9FTiB8IFVNQ19DTURfVFhfRU4pLCAxKTsKKworCWludGYt PmNyY19md2QgPTNEICEhKHVtYWNfcmwoaW50ZiwgVU1DX0NNRCkgJiBVTUNfQ01EX0NSQ19GV0Qp OworCisJYmNtYXNwX25ldGlmX3N0YXJ0KGRldik7CisKKwluZXRpZl9zdGFydF9xdWV1ZShkZXYp OworCisJcmV0dXJuIDA7CisKK2Vycl9yZWNsYWltX3R4OgorCWJjbWFzcF9yZWNsYWltX2ZyZWVf YWxsX3R4KGludGYpOworZXJyX3BoeV9kaXNjb25uZWN0OgorCWlmIChwaHlkZXYpCisJCXBoeV9k aXNjb25uZWN0KHBoeWRldik7CitlcnJfcGh5X2Rpc2FibGU6CisJaWYgKGludGYtPmludGVybmFs X3BoeSkKKwkJYmNtYXNwX2VwaHlfZW5hYmxlX3NldChpbnRmLCBmYWxzZSk7CisJZWxzZQorCQli Y21hc3BfcmdtaWlfbW9kZV9lbl9zZXQoaW50ZiwgZmFsc2UpOworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyBpbnQgYmNtYXNwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1 Y3QgYmNtYXNwX2ludGYgKmludGYgPTNEIG5ldGRldl9wcml2KGRldik7CisJaW50IHJldDsKKwor CW5ldGlmX2RiZyhpbnRmLCBpZnVwLCBkZXYsICJiY21hc3Agb3BlblxuIik7CisKKwlyZXQgPTNE IGNsa19wcmVwYXJlX2VuYWJsZShpbnRmLT5wYXJlbnQtPmNsayk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCXJldCA9M0QgYmNtYXNwX25ldGlmX2luaXQoZGV2LCB0cnVlKTsKKwlpZiAo cmV0KQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUoaW50Zi0+cGFyZW50LT5jbGspOworCisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYmNtYXNwX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9k ZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHR4cXVldWUpCit7CisJc3RydWN0IGJjbWFzcF9pbnRm ICppbnRmID0zRCBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBiY21hc3BfaW50Zl9zdGF0czY0 ICpzdGF0czsKKworCXN0YXRzID0zRCAmaW50Zi0+c3RhdHM2NDsKKworCW5ldGlmX2RiZyhpbnRm LCB0eF9lcnIsIGRldiwgInRyYW5zbWl0IHRpbWVvdXQhXG4iKTsKKworCXU2NF9zdGF0c191cGRh dGVfYmVnaW4oJnN0YXRzLT5zeW5jcCk7CisJdTY0X3N0YXRzX2luYygmc3RhdHMtPnJ4X2Vycm9y cyk7CisJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJnN0YXRzLT5zeW5jcCk7Cit9CisKK3N0YXRpYyBp bnQgYmNtYXNwX2dldF9waHlzX3BvcnRfbmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJ CSAgICAgY2hhciAqbmFtZSwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmlu dGYgPTNEIG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoc25wcmludGYobmFtZSwgbGVuLCAicCVk IiwgaW50Zi0+cG9ydCkgPj0zRCBsZW4pCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2LAorCQkJICAgICAgIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpCit7CisJc3Ry dWN0IGJjbWFzcF9pbnRmICppbnRmID0zRCBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBiY21h c3BfaW50Zl9zdGF0czY0ICpsc3RhdHM7CisJdW5zaWduZWQgaW50IHN0YXJ0OworCisJbHN0YXRz ID0zRCAmaW50Zi0+c3RhdHM2NDsKKworCWRvIHsKKwkJc3RhcnQgPTNEIHU2NF9zdGF0c19mZXRj aF9iZWdpbigmbHN0YXRzLT5zeW5jcCk7CisJCXN0YXRzLT5yeF9wYWNrZXRzID0zRCB1NjRfc3Rh dHNfcmVhZCgmbHN0YXRzLT5yeF9wYWNrZXRzKTsKKwkJc3RhdHMtPnJ4X2J5dGVzID0zRCB1NjRf c3RhdHNfcmVhZCgmbHN0YXRzLT5yeF9ieXRlcyk7CisJCXN0YXRzLT5yeF9kcm9wcGVkID0zRCB1 NjRfc3RhdHNfcmVhZCgmbHN0YXRzLT5yeF9kcm9wcGVkKTsKKwkJc3RhdHMtPnJ4X2NyY19lcnJv cnMgPTNEIHU2NF9zdGF0c19yZWFkKCZsc3RhdHMtPnJ4X2NyY19lcnJzKTsKKwkJc3RhdHMtPnJ4 X2ZyYW1lX2Vycm9ycyA9M0QgdTY0X3N0YXRzX3JlYWQoJmxzdGF0cy0+cnhfc3ltX2VycnMpOwor CQlzdGF0cy0+cnhfZXJyb3JzID0zRCB1NjRfc3RhdHNfcmVhZCgmbHN0YXRzLT5yeF9lcnJvcnMp ICsKKwkJCQkgICBzdGF0cy0+cnhfY3JjX2Vycm9ycyArIHN0YXRzLT5yeF9mcmFtZV9lcnJvcnM7 CisKKwkJc3RhdHMtPnR4X3BhY2tldHMgPTNEIHU2NF9zdGF0c19yZWFkKCZsc3RhdHMtPnR4X3Bh Y2tldHMpOworCQlzdGF0cy0+dHhfYnl0ZXMgPTNEIHU2NF9zdGF0c19yZWFkKCZsc3RhdHMtPnR4 X2J5dGVzKTsKKwkJc3RhdHMtPnR4X2Vycm9ycyA9M0QgdTY0X3N0YXRzX3JlYWQoJmxzdGF0cy0+ dHhfZXJyb3JzKTsKKwl9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoJmxzdGF0cy0+c3lu Y3AsIHN0YXJ0KSk7CisKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBi Y21hc3BfbmV0ZGV2X29wcyA9M0QgeworCS5uZG9fb3BlbgkJPTNEIGJjbWFzcF9vcGVuLAorCS5u ZG9fc3RvcAkJPTNEIGJjbWFzcF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPTNEIGJjbWFzcF94 bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPTNEIGJjbWFzcF90eF90aW1lb3V0LAorCS5uZG9fc2V0 X3J4X21vZGUJPTNEIGJjbWFzcF9zZXRfcnhfbW9kZSwKKwkubmRvX2dldF9waHlzX3BvcnRfbmFt ZQk9M0QgYmNtYXNwX2dldF9waHlzX3BvcnRfbmFtZSwKKwkubmRvX2V0aF9pb2N0bAkJPTNEIHBo eV9kb19pb2N0bF9ydW5uaW5nLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0zRCBldGhfbWFjX2Fk ZHIsCisJLm5kb19nZXRfc3RhdHM2NAk9M0QgYmNtYXNwX2dldF9zdGF0czY0LAorfTsKKworc3Rh dGljIHZvaWQgYmNtYXNwX21hcF9yZXMoc3RydWN0IGJjbWFzcF9wcml2ICpwcml2LCBzdHJ1Y3Qg YmNtYXNwX2ludGYgKmk9Cm50ZikKK3sKKwkvKiBQZXIgcG9ydCAqLworCWludGYtPnJlcy51bWFj ID0zRCBwcml2LT5iYXNlICsgVU1DX09GRlNFVChpbnRmKTsKKwlpbnRmLT5yZXMudW1hYzJmYiA9 M0QgcHJpdi0+YmFzZSArIChwcml2LT5od19pbmZvLT51bWFjMmZiICsKKwkJCQkJICAoaW50Zi0+ cG9ydCAqIDB4NCkpOworCWludGYtPnJlcy5yZ21paSA9M0QgcHJpdi0+YmFzZSArIFJHTUlJX09G RlNFVChpbnRmKTsKKworCS8qIFBlciBjaCAqLworCWludGYtPnR4X3NwYl9kbWEgPTNEIHByaXYt PmJhc2UgKyBUWF9TUEJfRE1BX09GRlNFVChpbnRmKTsKKwlpbnRmLT5yZXMudHhfc3BiX2N0cmwg PTNEIHByaXYtPmJhc2UgKyBUWF9TUEJfQ1RSTF9PRkZTRVQoaW50Zik7CisJaW50Zi0+cmVzLnR4 X3NwYl90b3AgPTNEIHByaXYtPmJhc2UgKyBUWF9TUEJfVE9QX09GRlNFVChpbnRmKTsKKwlpbnRm LT5yZXMudHhfZXBrdF9jb3JlID0zRCBwcml2LT5iYXNlICsgVFhfRVBLVF9DX09GRlNFVChpbnRm KTsKKwlpbnRmLT5yZXMudHhfcGF1c2VfY3RybCA9M0QgcHJpdi0+YmFzZSArIFRYX1BBVVNFX0NU UkxfT0ZGU0VUKGludGYpOworCisJaW50Zi0+cnhfZWRwa3RfZG1hID0zRCBwcml2LT5iYXNlICsg UlhfRURQS1RfRE1BX09GRlNFVChpbnRmKTsKKwlpbnRmLT5yeF9lZHBrdF9jZmcgPTNEIHByaXYt PmJhc2UgKyBSWF9FRFBLVF9DRkdfT0ZGU0VUKGludGYpOworfQorCisjZGVmaW5lIE1BWF9JUlFf U1RSX0xFTgkJNjQKK3N0cnVjdCBiY21hc3BfaW50ZiAqYmNtYXNwX2ludGVyZmFjZV9jcmVhdGUo c3RydWN0IGJjbWFzcF9wcml2ICpwcml2LAorCQkJCQkgICAgc3RydWN0IGRldmljZV9ub2RlICpu ZGV2X2RuLCBpbnQgaSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPTNEICZwcml2LT5wZGV2LT5k ZXY7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2 OworCWludCBjaCwgcG9ydCwgcmV0OworCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5kZXZf ZG4sICJyZWciLCAmcG9ydCkpIHsKKwkJZGV2X3dhcm4oZGV2LCAiJXM6IGludmFsaWQgY2ggbnVt YmVyXG4iLCBuZGV2X2RuLT5uYW1lKTsKKwkJZ290byBlcnI7CisJfQorCisJaWYgKG9mX3Byb3Bl cnR5X3JlYWRfdTMyKG5kZXZfZG4sICJicmNtLGNoYW5uZWwiLCAmY2gpKSB7CisJCWRldl93YXJu KGRldiwgIiVzOiBpbnZhbGlkIGNoIG51bWJlclxuIiwgbmRldl9kbi0+bmFtZSk7CisJCWdvdG8g ZXJyOworCX0KKworCW5kZXYgPTNEIGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgYmNtYXNw X2ludGYpKTsKKwlpZiAoIW5kZXYpIHsKKwkJZGV2X3dhcm4oZGV2LCAiJXM6IHVuYWJsZSB0byBh bGxvYyBuZGV2XG4iLCBuZGV2X2RuLT5uYW1lKTsKKwkJZ290byBlcnI7CisJfQorCWludGYgPTNE IG5ldGRldl9wcml2KG5kZXYpOworCisJaW50Zi0+cGFyZW50ID0zRCBwcml2OworCWludGYtPm5k ZXYgPTNEIG5kZXY7CisJaW50Zi0+Y2hhbm5lbCA9M0QgY2g7CisJaW50Zi0+cG9ydCA9M0QgcG9y dDsKKwlpbnRmLT5uZGV2X2RuID0zRCBuZGV2X2RuOworCWludGYtPmluZGV4ID0zRCBpOworCisJ cmV0ID0zRCBvZl9nZXRfcGh5X21vZGUobmRldl9kbiwgJmludGYtPnBoeV9pbnRlcmZhY2UpOwor CWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiaW52YWxpZCBQSFkgbW9kZSBwcm9wZXJ0 eVxuIik7CisJCWdvdG8gZXJyX2ZyZWVfbmV0ZGV2OworCX0KKworCWlmIChpbnRmLT5waHlfaW50 ZXJmYWNlID0zRD0zRCBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpCisJCWludGYtPmludGVy bmFsX3BoeSA9M0QgdHJ1ZTsKKworCWludGYtPnBoeV9kbiA9M0Qgb2ZfcGFyc2VfcGhhbmRsZShu ZGV2X2RuLCAicGh5LWhhbmRsZSIsIDApOworCWlmICghaW50Zi0+cGh5X2RuICYmIG9mX3BoeV9p c19maXhlZF9saW5rKG5kZXZfZG4pKSB7CisJCXJldCA9M0Qgb2ZfcGh5X3JlZ2lzdGVyX2ZpeGVk X2xpbmsobmRldl9kbik7CisJCWlmIChyZXQpIHsKKwkJCWRldl93YXJuKGRldiwgIiVzOiBmYWls ZWQgdG8gcmVnaXN0ZXIgZml4ZWQgUEhZXG4iLAorCQkJCSBuZGV2X2RuLT5uYW1lKTsKKwkJCWdv dG8gZXJyX2ZyZWVfbmV0ZGV2OworCQl9CisJCWludGYtPnBoeV9kbiA9M0QgbmRldl9kbjsKKwl9 CisKKwkvKiBNYXAgcmVzb3VyY2UgKi8KKwliY21hc3BfbWFwX3Jlcyhwcml2LCBpbnRmKTsKKwor CWlmICgoIXBoeV9pbnRlcmZhY2VfbW9kZV9pc19yZ21paShpbnRmLT5waHlfaW50ZXJmYWNlKSAm JgorCSAgICAgaW50Zi0+cGh5X2ludGVyZmFjZSAhPTNEIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkg JiYKKwkgICAgIGludGYtPnBoeV9pbnRlcmZhY2UgIT0zRCBQSFlfSU5URVJGQUNFX01PREVfSU5U RVJOQUwpIHx8CisJICAgIChpbnRmLT5wb3J0ICE9M0QgMSAmJiBpbnRmLT5pbnRlcm5hbF9waHkp KSB7CisJCW5ldGRldl9lcnIoaW50Zi0+bmRldiwgImludmFsaWQgUEhZIG1vZGU6ICVzIGZvciBw b3J0ICVkXG4iLAorCQkJICAgcGh5X21vZGVzKGludGYtPnBoeV9pbnRlcmZhY2UpLCBpbnRmLT5w b3J0KTsKKwkJcmV0ID0zRCAtRUlOVkFMOworCQlnb3RvIGVycl9mcmVlX25ldGRldjsKKwl9CisK KwlyZXQgPTNEIG9mX2dldF9ldGhkZXZfYWRkcmVzcyhuZGV2X2RuLCBuZGV2KTsKKwlpZiAocmV0 KSB7CisJCW5ldGRldl93YXJuKG5kZXYsICJ1c2luZyByYW5kb20gRXRoZXJuZXQgTUFDXG4iKTsK KwkJZXRoX2h3X2FkZHJfcmFuZG9tKG5kZXYpOworCX0KKworCVNFVF9ORVRERVZfREVWKG5kZXYs IGRldik7CisJaW50Zi0+b3BzID0zRCAmYmNtYXNwX2ludGZfb3BzOworCW5kZXYtPm5ldGRldl9v cHMgPTNEICZiY21hc3BfbmV0ZGV2X29wczsKKwluZGV2LT5ldGh0b29sX29wcyA9M0QgJmJjbWFz cF9ldGh0b29sX29wczsKKwlpbnRmLT5tc2dfZW5hYmxlID0zRCBuZXRpZl9tc2dfaW5pdCgtMSwg TkVUSUZfTVNHX0RSViB8CisJCQkJCSAgTkVUSUZfTVNHX1BST0JFIHwKKwkJCQkJICBORVRJRl9N U0dfTElOSyk7CisJbmRldi0+ZmVhdHVyZXMgfD0zRCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9G X0lQVjZfQ1NVTSB8IE5FVElGX0ZfU0cgfAorCQkJICBORVRJRl9GX1JYQ1NVTTsKKwluZGV2LT5o d19mZWF0dXJlcyB8PTNEIG5kZXYtPmZlYXR1cmVzOworCW5kZXYtPm5lZWRlZF9oZWFkcm9vbSAr PTNEIHNpemVvZihzdHJ1Y3QgYmNtYXNwX3BrdF9vZmZsb2FkKTsKKworCXJldHVybiBpbnRmOwor CitlcnJfZnJlZV9uZXRkZXY6CisJZnJlZV9uZXRkZXYobmRldik7CitlcnI6CisJcmV0dXJuIE5V TEw7Cit9CisKK3ZvaWQgYmNtYXNwX2ludGVyZmFjZV9kZXN0cm95KHN0cnVjdCBiY21hc3BfaW50 ZiAqaW50ZiwgYm9vbCB1bnJlZ2lzdGVyKQoreworCWlmICh1bnJlZ2lzdGVyKQorCQl1bnJlZ2lz dGVyX25ldGRldihpbnRmLT5uZGV2KTsKKwlpZiAob2ZfcGh5X2lzX2ZpeGVkX2xpbmsoaW50Zi0+ bmRldl9kbikpCisJCW9mX3BoeV9kZXJlZ2lzdGVyX2ZpeGVkX2xpbmsoaW50Zi0+bmRldl9kbik7 CisJZnJlZV9uZXRkZXYoaW50Zi0+bmRldik7Cit9CisKK2ludCBiY21hc3BfaW50ZXJmYWNlX3N1 c3BlbmQoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpk ZXYgPTNEIGludGYtPm5kZXY7CisJaW50IHJldCA9M0QgMDsKKworCWlmICghbmV0aWZfcnVubmlu ZyhkZXYpKQorCQlyZXR1cm4gMDsKKworCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKKworCWJj bWFzcF9uZXRpZl9kZWluaXQoZGV2KTsKKworCXJldCA9M0QgcGh5X3N1c3BlbmQoZGV2LT5waHlk ZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJaWYgKGludGYtPmludGVybmFsX3BoeSkK KwkJYmNtYXNwX2VwaHlfZW5hYmxlX3NldChpbnRmLCBmYWxzZSk7CisJZWxzZQorCQliY21hc3Bf cmdtaWlfbW9kZV9lbl9zZXQoaW50ZiwgZmFsc2UpOworCisJLyoKKwkgKiBJZiBXYWtlLW9uLUxB TiBpcyBkaXNhYmxlZCwgd2UgY2FuIHNhZmVseQorCSAqIGRpc2FibGUgdGhlIG5ldHdvcmsgaW50 ZXJmYWNlIGNsb2Nrcy4KKwkgKi8KKwliY21hc3BfY29yZV9jbG9ja19zZXRfaW50ZihpbnRmLCBm YWxzZSk7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaW50Zi0+cGFyZW50LT5jbGspOworCisJ cmV0dXJuIHJldDsKKworb3V0OgorCWJjbWFzcF9uZXRpZl9pbml0KGRldiwgZmFsc2UpOworCXJl dHVybiByZXQ7Cit9CisKK2ludCBiY21hc3BfaW50ZXJmYWNlX3Jlc3VtZShzdHJ1Y3QgYmNtYXNw X2ludGYgKmludGYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9M0QgaW50Zi0+bmRldjsK KwlpbnQgcmV0OworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAwOworCisJ cmV0ID0zRCBjbGtfcHJlcGFyZV9lbmFibGUoaW50Zi0+cGFyZW50LT5jbGspOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisKKwlyZXQgPTNEIGJjbWFzcF9uZXRpZl9pbml0KGRldiwgZmFsc2Up OworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwor CisJcmV0dXJuIDA7CisKK291dDoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaW50Zi0+cGFyZW50 LT5jbGspOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5l dC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmX2RlZnMuaCBiL2RyaXZlcj0Kcy9uZXQvZXRoZXJu ZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zl9kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwLi5iMjU5YTQ3NTIwN2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmX2RlZnMuaApAQCAtMCww ICsxLDE5NiBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKyNpZm5k ZWYgX19CQ01BU1BfSU5URl9ERUZTX0gKKyNkZWZpbmUgX19CQ01BU1BfSU5URl9ERUZTX0gKKwor I2RlZmluZSBVTUNfT0ZGU0VUKGludGYpCQlcCisJKCgoKGludGYpLT5wb3J0KSAqIDB4ODAwKSAr IDB4YzAwMCkKKyNkZWZpbmUgIFVNQ19DTUQJCQkweDAwOAorI2RlZmluZSAgIFVNQ19DTURfVFhf RU4JCQlCSVQoMCkKKyNkZWZpbmUgICBVTUNfQ01EX1JYX0VOCQkJQklUKDEpCisjZGVmaW5lICAg VU1DX0NNRF9TUEVFRF9TSElGVAkJMHgyCisjZGVmaW5lICAgIFVNQ19DTURfU1BFRURfTUFTSwkJ MHgzCisjZGVmaW5lICAgIFVNQ19DTURfU1BFRURfMTAJCTB4MAorI2RlZmluZSAgICBVTUNfQ01E X1NQRUVEXzEwMAkJMHgxCisjZGVmaW5lICAgIFVNQ19DTURfU1BFRURfMTAwMAkJMHgyCisjZGVm aW5lICAgIFVNQ19DTURfU1BFRURfMjUwMAkJMHgzCisjZGVmaW5lICAgVU1DX0NNRF9QUk9NSVND CQlCSVQoNCkKKyNkZWZpbmUgICBVTUNfQ01EX1BBRF9FTgkJQklUKDUpCisjZGVmaW5lICAgVU1D X0NNRF9DUkNfRldECQlCSVQoNikKKyNkZWZpbmUgICBVTUNfQ01EX1BBVVNFX0ZXRAkJQklUKDcp CisjZGVmaW5lICAgVU1DX0NNRF9SWF9QQVVTRV9JR05PUkUJQklUKDgpCisjZGVmaW5lICAgVU1D X0NNRF9UWF9BRERSX0lOUwkJQklUKDkpCisjZGVmaW5lICAgVU1DX0NNRF9IRF9FTgkJCUJJVCgx MCkKKyNkZWZpbmUgICBVTUNfQ01EX1NXX1JFU0VUCQlCSVQoMTMpCisjZGVmaW5lICAgVU1DX0NN RF9MQ0xfTE9PUF9FTgkJQklUKDE1KQorI2RlZmluZSAgIFVNQ19DTURfQVVUT19DT05GSUcJCUJJ VCgyMikKKyNkZWZpbmUgICBVTUNfQ01EX0NOVExfRlJNX0VOCQlCSVQoMjMpCisjZGVmaW5lICAg VU1DX0NNRF9OT19MRU5fQ0hLCQlCSVQoMjQpCisjZGVmaW5lICAgVU1DX0NNRF9STVRfTE9PUF9F TgkJQklUKDI1KQorI2RlZmluZSAgIFVNQ19DTURfUFJCTF9FTgkJQklUKDI3KQorI2RlZmluZSAg IFVNQ19DTURfVFhfUEFVU0VfSUdOT1JFCUJJVCgyOCkKKyNkZWZpbmUgICBVTUNfQ01EX1RYX1JY X0VOCQlCSVQoMjkpCisjZGVmaW5lICAgVU1DX0NNRF9SVU5UX0ZJTFRFUl9ESVMJQklUKDMwKQor I2RlZmluZSAgVU1DX01BQzAJCQkweDBjCisjZGVmaW5lICBVTUNfTUFDMQkJCTB4MTAKKyNkZWZp bmUgIFVNQ19GUk1fTEVOCQkJMHgxNAorI2RlZmluZSAgVU1DX0VFRV9DVFJMCQkJMHg2NAorI2Rl ZmluZSAgIEVOX0xQSV9SWF9QQVVTRQkJQklUKDApCisjZGVmaW5lICAgRU5fTFBJX1RYX1BGQwkJ CUJJVCgxKQorI2RlZmluZSAgIEVOX0xQSV9UWF9QQVVTRQkJQklUKDIpCisjZGVmaW5lICAgRUVF X0VOCQkJQklUKDMpCisjZGVmaW5lICAgUlhfRklGT19DSEVDSwkJCUJJVCg0KQorI2RlZmluZSAg IEVFRV9UWF9DTEtfRElTCQlCSVQoNSkKKyNkZWZpbmUgICBESVNfRUVFXzEwTQkJCUJJVCg2KQor I2RlZmluZSAgIExQX0lETEVfUFJFRElDVElPTl9NT0RFCUJJVCg3KQorI2RlZmluZSAgVU1DX0VF RV9MUElfVElNRVIJCTB4NjgKKyNkZWZpbmUgIFVNQ19QQVVTRV9DTlRSTAkJMHgzMzAKKyNkZWZp bmUgIFVNQ19UWF9GTFVTSAkJCTB4MzM0CisjZGVmaW5lICBVTUNfTUlCX1NUQVJUCQkJMHg0MDAK KyNkZWZpbmUgIFVNQ19NSUJfQ05UUkwJCQkweDU4MAorI2RlZmluZSAgIFVNQ19NSUJfQ05UUkxf UlhfQ05UX1JTVAlCSVQoMCkKKyNkZWZpbmUgICBVTUNfTUlCX0NOVFJMX1JVTlRfQ05UX1JTVAlC SVQoMSkKKyNkZWZpbmUgICBVTUNfTUlCX0NOVFJMX1RYX0NOVF9SU1QJQklUKDIpCisjZGVmaW5l ICBVTUNfUlhfTUFYX1BLVF9TWgkJMHg2MDgKKyNkZWZpbmUgIFVNQ19NUERfQ1RSTAkJCTB4NjIw CisjZGVmaW5lICAgVU1DX01QRF9DVFJMX01QRF9FTgkJQklUKDApCisjZGVmaW5lICAgVU1DX01Q RF9DVFJMX1BTV19FTgkJQklUKDI3KQorI2RlZmluZSAgVU1DX1BTV19NUwkJCTB4NjI0CisjZGVm aW5lICBVTUNfUFNXX0xTCQkJMHg2MjgKKworI2RlZmluZSBVTUFDMkZCX09GRlNFVF8yXzEJCTB4 OWYwNDQKKyNkZWZpbmUgVU1BQzJGQl9PRkZTRVQJCQkweDlmMDNjCisjZGVmaW5lICBVTUFDMkZC X0NGRwkJCTB4MAorI2RlZmluZSAgIFVNQUMyRkJfQ0ZHX09QVVRfRU4JCUJJVCgwKQorI2RlZmlu ZSAgIFVNQUMyRkJfQ0ZHX1ZMQU5fRU4JCUJJVCgxKQorI2RlZmluZSAgIFVNQUMyRkJfQ0ZHX1NO QVBfRU4JCUJJVCgyKQorI2RlZmluZSAgIFVNQUMyRkJfQ0ZHX0JDTV9UR19FTgkJQklUKDMpCisj ZGVmaW5lICAgVU1BQzJGQl9DRkdfSVBVVF9FTgkJQklUKDQpCisjZGVmaW5lICAgVU1BQzJGQl9D RkdfQ0hJRF9TSElGVAk4CisjZGVmaW5lICAgVU1BQzJGQl9DRkdfT0tfU0VORF9TSElGVAkyNAor I2RlZmluZSAgIFVNQUMyRkJfQ0ZHX0RFRkFVTFRfRU4JXAorCQkoVU1BQzJGQl9DRkdfT1BVVF9F TiB8IFVNQUMyRkJfQ0ZHX1ZMQU5fRU4gXAorCQl8IFVNQUMyRkJfQ0ZHX1NOQVBfRU4gfCBVTUFD MkZCX0NGR19JUFVUX0VOKQorCisjZGVmaW5lIFJHTUlJX09GRlNFVChpbnRmKQlcCisJKCgoKGlu dGYpLT5wb3J0KSAqIDB4MTAwKSArIDB4ZDAwMCkKKyNkZWZpbmUgIFJHTUlJX0VQSFlfQ05UUkwJ CTB4MDAKKyNkZWZpbmUgICAgUkdNSUlfRVBIWV9DRkdfSUREUV9CSUFTCUJJVCgwKQorI2RlZmlu ZSAgICBSR01JSV9FUEhZX0NGR19FWFRfUFdSRE9XTglCSVQoMSkKKyNkZWZpbmUgICAgUkdNSUlf RVBIWV9DRkdfRk9SQ0VfRExMX0VOCUJJVCgyKQorI2RlZmluZSAgICBSR01JSV9FUEhZX0NGR19J RERRX0dMT0JBTAlCSVQoMykKKyNkZWZpbmUgICAgUkdNSUlfRVBIWV9DSzI1X0RJUwkJQklUKDQp CisjZGVmaW5lICAgIFJHTUlJX0VQSFlfUkVTRVQJCUJJVCg3KQorI2RlZmluZSAgUkdNSUlfT09C X0NOVFJMCQkweDBjCisjZGVmaW5lICAgUkdNSUlfTElOSwkJCUJJVCg0KQorI2RlZmluZSAgIFJH TUlJX09PQl9ESVMJCQlCSVQoNSkKKyNkZWZpbmUgICBSR01JSV9NT0RFX0VOCQkJQklUKDYpCisj ZGVmaW5lICAgUkdNSUlfSURfTU9ERV9ESVMJCUJJVCgxNikKKworI2RlZmluZSBSR01JSV9QT1JU X0NOVFJMCQkweDYwCisjZGVmaW5lICAgUkdNSUlfUE9SVF9NT0RFX0VQSFkJCTAKKyNkZWZpbmUg ICBSR01JSV9QT1JUX01PREVfR1BIWQkJMQorI2RlZmluZSAgIFJHTUlJX1BPUlRfTU9ERV9FWFRf RVBIWQkyCisjZGVmaW5lICAgUkdNSUlfUE9SVF9NT0RFX0VYVF9HUEhZCTMKKyNkZWZpbmUgICBS R01JSV9QT1JUX01PREVfRVhUX1JWTUlJCTQKKyNkZWZpbmUgICBSR01JSV9QT1JUX01PREVfTUFT SwkJR0VOTUFTSygyLCAwKQorCisjZGVmaW5lIFJHTUlJX1NZU19MRURfQ05UUkwJCTB4NzQKKyNk ZWZpbmUgIFJHTUlJX1NZU19MRURfQ05UUkxfTElOS19PVlJECUJJVCgxNSkKKworI2RlZmluZSBU WF9TUEJfRE1BX09GRlNFVChpbnRmKSBcCisJKCgoKGludGYpLT5jaGFubmVsKSAqIDB4MzApICsg MHg0ODE4MCkKKyNkZWZpbmUgIFRYX1NQQl9ETUFfUkVBRAkJMHgwMAorI2RlZmluZSAgVFhfU1BC X0RNQV9CQVNFCQkweDA4CisjZGVmaW5lICBUWF9TUEJfRE1BX0VORAkJCTB4MTAKKyNkZWZpbmUg IFRYX1NQQl9ETUFfVkFMSUQJCTB4MTgKKyNkZWZpbmUgIFRYX1NQQl9ETUFfRklGT19DVFJMCQkw eDIwCisjZGVmaW5lICAgVFhfU1BCX0RNQV9GSUZPX0ZMVVNICQlCSVQoMCkKKyNkZWZpbmUgIFRY X1NQQl9ETUFfRklGT19TVEFUVVMJCTB4MjQKKworI2RlZmluZSBUWF9TUEJfQ1RSTF9PRkZTRVQo aW50ZikgXAorCSgoKChpbnRmKS0+Y2hhbm5lbCkgKiAweDY4KSArIDB4NDkzNDApCisjZGVmaW5l ICBUWF9TUEJfQ1RSTF9FTkFCTEUJCTB4MAorI2RlZmluZSAgIFRYX1NQQl9DVFJMX0VOQUJMRV9F TgkJQklUKDApCisjZGVmaW5lICBUWF9TUEJfQ1RSTF9YRl9DVFJMMgkJMHgyMAorI2RlZmluZSAg IFRYX1NQQl9DVFJMX1hGX0JJRF9TSElGVAkxNgorCisjZGVmaW5lIFRYX1NQQl9UT1BfT0ZGU0VU KGludGYpIFwKKwkoKCgoaW50ZiktPmNoYW5uZWwpICogMHgxYykgKyAweDRhMGUwKQorI2RlZmlu ZSBUWF9TUEJfVE9QX0JMS09VVAkJMHgwCisjZGVmaW5lIFRYX1NQQl9UT1BfU1BSRV9CV19DVFJM CQkweDQKKworI2RlZmluZSBUWF9FUEtUX0NfT0ZGU0VUKGludGYpIFwKKwkoKCgoaW50ZiktPmNo YW5uZWwpICogMHgxMjApICsgMHg0MDkwMCkKKyNkZWZpbmUgIFRYX0VQS1RfQ19DRkdfTUlTQwkJ MHgwCisjZGVmaW5lICAgVFhfRVBLVF9DX0NGR19NSVNDX0VOCQlCSVQoMCkKKyNkZWZpbmUgICBU WF9FUEtUX0NfQ0ZHX01JU0NfUFQJCUJJVCgxKQorI2RlZmluZSAgIFRYX0VQS1RfQ19DRkdfTUlT Q19QU19TSElGVAkxNAorI2RlZmluZSAgIFRYX0VQS1RfQ19DRkdfTUlTQ19GRF9TSElGVAkyMAor CisjZGVmaW5lIFRYX1BBVVNFX0NUUkxfT0ZGU0VUKGludGYpIFwKKwkoKCgoaW50ZiktPmNoYW5u ZWwgKiAweGMpICsgMHg0OWEyMCkpCisjZGVmaW5lICBUWF9QQVVTRV9NQVBfVkVDVE9SCQkweDgK KworI2RlZmluZSBSWF9FRFBLVF9ETUFfT0ZGU0VUKGludGYpIFwKKwkoKCgoaW50ZiktPmNoYW5u ZWwpICogMHgzOCkgKyAweDljYTAwKQorI2RlZmluZSAgUlhfRURQS1RfRE1BX1dSSVRFCQkweDAw CisjZGVmaW5lICBSWF9FRFBLVF9ETUFfUkVBRAkJMHgwOAorI2RlZmluZSAgUlhfRURQS1RfRE1B X0JBU0UJCTB4MTAKKyNkZWZpbmUgIFJYX0VEUEtUX0RNQV9FTkQJCTB4MTgKKyNkZWZpbmUgIFJY X0VEUEtUX0RNQV9WQUxJRAkJMHgyMAorI2RlZmluZSAgUlhfRURQS1RfRE1BX0ZVTExORVNTCQkw eDI4CisjZGVmaW5lICBSWF9FRFBLVF9ETUFfTUlOX1RIUkVTCQkweDJjCisjZGVmaW5lICBSWF9F RFBLVF9ETUFfQ0hfWE9OT0ZGCQkweDMwCisKKyNkZWZpbmUgUlhfRURQS1RfQ0ZHX09GRlNFVChp bnRmKSBcCisJKCgoKGludGYpLT5jaGFubmVsKSAqIDB4NzApICsgMHg5YzYwMCkKKyNkZWZpbmUg IFJYX0VEUEtUX0NGR19DRkcwCQkweDAKKyNkZWZpbmUgICBSWF9FRFBLVF9DRkdfQ0ZHMF9EQlVG X1NISUZUCTkKKyNkZWZpbmUgICAgUlhfRURQS1RfQ0ZHX0NGRzBfUkJVRgkweDAKKyNkZWZpbmUg ICAgUlhfRURQS1RfQ0ZHX0NGRzBfUkJVRl80SwkweDEKKyNkZWZpbmUgICAgUlhfRURQS1RfQ0ZH X0NGRzBfQlVGXzRLCTB4MgorLyogRUZSTSBTVFVGRiwgMCA9M0Qgbm8gYnl0ZSBzdHVmZiwgMSA9 M0QgdHdvIGJ5dGUgc3R1ZmYgKi8KKyNkZWZpbmUgICBSWF9FRFBLVF9DRkdfQ0ZHMF9FRlJNX1NU VUYJQklUKDExKQorI2RlZmluZSAgIFJYX0VEUEtUX0NGR19DRkcwX0JBTE5fU0hJRlQJMTIKKyNk ZWZpbmUgICAgUlhfRURQS1RfQ0ZHX0NGRzBfTk9fQUxOCTAKKyNkZWZpbmUgICAgUlhfRURQS1Rf Q0ZHX0NGRzBfNF9BTE4JMgorI2RlZmluZSAgICBSWF9FRFBLVF9DRkdfQ0ZHMF82NF9BTE4JNgor I2RlZmluZSAgUlhfRURQS1RfUklOR19CVUZGRVJfV1JJVEUJMHgzOAorI2RlZmluZSAgUlhfRURQ S1RfUklOR19CVUZGRVJfUkVBRAkweDQwCisjZGVmaW5lICBSWF9FRFBLVF9SSU5HX0JVRkZFUl9C QVNFCTB4NDgKKyNkZWZpbmUgIFJYX0VEUEtUX1JJTkdfQlVGRkVSX0VORAkweDUwCisjZGVmaW5l ICBSWF9FRFBLVF9SSU5HX0JVRkZFUl9WQUxJRAkweDU4CisjZGVmaW5lICBSWF9FRFBLVF9DRkdf RU5BQkxFCQkweDZjCisjZGVmaW5lICAgUlhfRURQS1RfQ0ZHX0VOQUJMRV9FTglCSVQoMCkKKwor I2RlZmluZSBSWF9TUEJfRE1BX09GRlNFVChpbnRmKSBcCisJKCgoKGludGYpLT5jaGFubmVsKSAq IDB4MzApICsgMHhhMDAwMCkKKyNkZWZpbmUgIFJYX1NQQl9ETUFfUkVBRAkJMHgwMAorI2RlZmlu ZSAgUlhfU1BCX0RNQV9CQVNFCQkweDA4CisjZGVmaW5lICBSWF9TUEJfRE1BX0VORAkJCTB4MTAK KyNkZWZpbmUgIFJYX1NQQl9ETUFfVkFMSUQJCTB4MTgKKyNkZWZpbmUgIFJYX1NQQl9ETUFfRklG T19DVFJMCQkweDIwCisjZGVmaW5lICAgUlhfU1BCX0RNQV9GSUZPX0ZMVVNICQlCSVQoMCkKKyNk ZWZpbmUgIFJYX1NQQl9ETUFfRklGT19TVEFUVVMJCTB4MjQKKworI2RlZmluZSBSWF9TUEJfQ1RS TF9PRkZTRVQoaW50ZikgXAorCSgoKChpbnRmKS0+Y2hhbm5lbCAtIDYpICogMHg2OCkgKyAweGEx MDAwKQorI2RlZmluZSAgUlhfU1BCX0NUUkxfRU5BQkxFCQkweDAwCisjZGVmaW5lICAgUlhfU1BC X0NUUkxfRU5BQkxFX0VOCQlCSVQoMCkKKworI2RlZmluZSBSWF9QQVVTRV9DVFJMX09GRlNFVChp bnRmKSBcCisJKCgoKGludGYpLT5jaGFubmVsIC0gNikgKiAweDQpICsgMHhhMTEzOCkKKyNkZWZp bmUgIFJYX1BBVVNFX01BUF9WRUNUT1IJCTB4MDAKKworI2RlZmluZSBSWF9TUEJfVE9QX0NUUkxf T0ZGU0VUKGludGYpIFwKKwkoKCgoaW50ZiktPmNoYW5uZWwgLSA2KSAqIDB4MTQpICsgMHhhMjAw MCkKKyNkZWZpbmUgIFJYX1NQQl9UT1BfQkxLT1VUCQkweDAwCisKKyNkZWZpbmUgTlVNXzRLX0JV RkZFUlMJCQkzMgorI2RlZmluZSBSSU5HX0JVRkZFUl9TSVpFCQkoUEFHRV9TSVpFICogTlVNXzRL X0JVRkZFUlMpCisKKyNkZWZpbmUgREVTQ19SSU5HX0NPVU5UCQkJKDY0ICogTlVNXzRLX0JVRkZF UlMpCisjZGVmaW5lIERFU0NfU0laRQkJCTE2CisjZGVmaW5lIERFU0NfUklOR19TSVpFCQkJKERF U0NfUklOR19DT1VOVCAqIERFU0NfU0laRSkKKworI2VuZGlmCi0tPTIwCjIuNy40Cg== --0000000000002c488705fe1e8038 Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature MIIQagYJKoZIhvcNAQcCoIIQWzCCEFcCAQExDzANBglghkgBZQMEAgEFADALBgkqhkiG9w0BBwGg gg3BMIIFDTCCA/WgAwIBAgIQeEqpED+lv77edQixNJMdADANBgkqhkiG9w0BAQsFADBMMSAwHgYD VQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UE AxMKR2xvYmFsU2lnbjAeFw0yMDA5MTYwMDAwMDBaFw0yODA5MTYwMDAwMDBaMFsxCzAJBgNVBAYT AkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTEwLwYDVQQDEyhHbG9iYWxTaWduIEdDQyBS MyBQZXJzb25hbFNpZ24gMiBDQSAyMDIwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA vbCmXCcsbZ/a0fRIQMBxp4gJnnyeneFYpEtNydrZZ+GeKSMdHiDgXD1UnRSIudKo+moQ6YlCOu4t rVWO/EiXfYnK7zeop26ry1RpKtogB7/O115zultAz64ydQYLe+a1e/czkALg3sgTcOOcFZTXk38e aqsXsipoX1vsNurqPtnC27TWsA7pk4uKXscFjkeUE8JZu9BDKaswZygxBOPBQBwrA5+20Wxlk6k1 e6EKaaNaNZUy30q3ArEf30ZDpXyfCtiXnupjSK8WU2cK4qsEtj09JS4+mhi0CTCrCnXAzum3tgcH cHRg0prcSzzEUDQWoFxyuqwiwhHu3sPQNmFOMwIDAQABo4IB2jCCAdYwDgYDVR0PAQH/BAQDAgGG MGAGA1UdJQRZMFcGCCsGAQUFBwMCBggrBgEFBQcDBAYKKwYBBAGCNxQCAgYKKwYBBAGCNwoDBAYJ KwYBBAGCNxUGBgorBgEEAYI3CgMMBggrBgEFBQcDBwYIKwYBBQUHAxEwEgYDVR0TAQH/BAgwBgEB /wIBADAdBgNVHQ4EFgQUljPR5lgXWzR1ioFWZNW+SN6hj88wHwYDVR0jBBgwFoAUj/BLf6guRSSu TVD6Y5qL3uLdG7wwegYIKwYBBQUHAQEEbjBsMC0GCCsGAQUFBzABhiFodHRwOi8vb2NzcC5nbG9i YWxzaWduLmNvbS9yb290cjMwOwYIKwYBBQUHMAKGL2h0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5j b20vY2FjZXJ0L3Jvb3QtcjMuY3J0MDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwuZ2xvYmFs c2lnbi5jb20vcm9vdC1yMy5jcmwwWgYDVR0gBFMwUTALBgkrBgEEAaAyASgwQgYKKwYBBAGgMgEo CjA0MDIGCCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5LzAN BgkqhkiG9w0BAQsFAAOCAQEAdAXk/XCnDeAOd9nNEUvWPxblOQ/5o/q6OIeTYvoEvUUi2qHUOtbf jBGdTptFsXXe4RgjVF9b6DuizgYfy+cILmvi5hfk3Iq8MAZsgtW+A/otQsJvK2wRatLE61RbzkX8 9/OXEZ1zT7t/q2RiJqzpvV8NChxIj+P7WTtepPm9AIj0Keue+gS2qvzAZAY34ZZeRHgA7g5O4TPJ /oTd+4rgiU++wLDlcZYd/slFkaT3xg4qWDepEMjT4T1qFOQIL+ijUArYS4owpPg9NISTKa1qqKWJ jFoyms0d0GwOniIIbBvhI2MJ7BSY9MYtWVT5jJO3tsVHwj4cp92CSFuGwunFMzCCA18wggJHoAMC AQICCwQAAAAAASFYUwiiMA0GCSqGSIb3DQEBCwUAMEwxIDAeBgNVBAsTF0dsb2JhbFNpZ24gUm9v dCBDQSAtIFIzMRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTA5 MDMxODEwMDAwMFoXDTI5MDMxODEwMDAwMFowTDEgMB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENB IC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDMJXaQeQZ4Ihb1wIO2hMoonv0FdhHFrYhy/EYCQ8eyip0E XyTLLkvhYIJG4VKrDIFHcGzdZNHr9SyjD4I9DCuul9e2FIYQebs7E4B3jAjhSdJqYi8fXvqWaN+J J5U4nwbXPsnLJlkNc96wyOkmDoMVxu9bi9IEYMpJpij2aTv2y8gokeWdimFXN6x0FNx04Druci8u nPvQu7/1PQDhBjPogiuuU6Y6FnOM3UEOIDrAtKeh6bJPkC4yYOlXy7kEkmho5TgmYHWyn3f/kRTv riBJ/K1AFUjRAjFhGV64l++td7dkmnq/X8ET75ti+w1s4FRpFqkD2m7pg5NxdsZphYIXAgMBAAGj QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSP8Et/qC5FJK5N UPpjmove4t0bvDANBgkqhkiG9w0BAQsFAAOCAQEAS0DbwFCq/sgM7/eWVEVJu5YACUGssxOGhigH M8pr5nS5ugAtrqQK0/Xx8Q+Kv3NnSoPHRHt44K9ubG8DKY4zOUXDjuS5V2yq/BKW7FPGLeQkbLmU Y/vcU2hnVj6DuM81IcPJaP7O2sJTqsyQiunwXUaMld16WCgaLx3ezQA3QY/tRG3XUyiXfvNnBB4V 14qWtNPeTCekTBtzc3b0F5nCH3oO4y0IrQocLP88q1UOD5F+NuvDV0m+4S4tfGCLw0FREyOdzvcy a5QBqJnnLDMfOjsl0oZAzjsshnjJYS8Uuu7bVW/fhO4FCU29KNhyztNiUGUe65KXgzHZs7XKR1g/ XzCCBUkwggQxoAMCAQICDCPwEotc2kAt96Z1EDANBgkqhkiG9w0BAQsFADBbMQswCQYDVQQGEwJC RTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTExMC8GA1UEAxMoR2xvYmFsU2lnbiBHQ0MgUjMg UGVyc29uYWxTaWduIDIgQ0EgMjAyMDAeFw0yMjA5MTAxMjM5NTBaFw0yNTA5MTAxMjM5NTBaMIGM MQswCQYDVQQGEwJJTjESMBAGA1UECBMJS2FybmF0YWthMRIwEAYDVQQHEwlCYW5nYWxvcmUxFjAU BgNVBAoTDUJyb2FkY29tIEluYy4xFDASBgNVBAMTC0p1c3RpbiBDaGVuMScwJQYJKoZIhvcNAQkB FhhqdXN0aW4uY2hlbkBicm9hZGNvbS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB AQDKX7oyRqaeT81UCy+OTzAUHJeHABD6GDVZu7IJxt8GWSGx+ebFexFz/gnRO/sgwnPzzrC2DwM1 kaDgYe+pI1lMzUZvAB5DfS1qXKNGoeeNv7FoNFlv3iD4bvOykX/K/voKtjS3QNs0EDnwkvETUWWu yiXtMiGENBBJcbGirKuFTT3U/2iPoSL5OeMSEqKLdkNTT9O79KN+Rf7Zi4Duz0LUqqpz9hZl4zGc NhTY3E+cXCB11wty89QStajwXdhGJTYEvUgvsq1h8CwJj9w/38ldAQf5WjhPmApYeJR2ewFrBMCM 4lHkdRJ6TDc9nXoEkypUfjJkJHe7Eal06tosh6JpAgMBAAGjggHZMIIB1TAOBgNVHQ8BAf8EBAMC BaAwgaMGCCsGAQUFBwEBBIGWMIGTME4GCCsGAQUFBzAChkJodHRwOi8vc2VjdXJlLmdsb2JhbHNp Z24uY29tL2NhY2VydC9nc2djY3IzcGVyc29uYWxzaWduMmNhMjAyMC5jcnQwQQYIKwYBBQUHMAGG NWh0dHA6Ly9vY3NwLmdsb2JhbHNpZ24uY29tL2dzZ2NjcjNwZXJzb25hbHNpZ24yY2EyMDIwME0G A1UdIARGMEQwQgYKKwYBBAGgMgEoCjA0MDIGCCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxz aWduLmNvbS9yZXBvc2l0b3J5LzAJBgNVHRMEAjAAMEkGA1UdHwRCMEAwPqA8oDqGOGh0dHA6Ly9j cmwuZ2xvYmFsc2lnbi5jb20vZ3NnY2NyM3BlcnNvbmFsc2lnbjJjYTIwMjAuY3JsMCMGA1UdEQQc MBqBGGp1c3Rpbi5jaGVuQGJyb2FkY29tLmNvbTATBgNVHSUEDDAKBggrBgEFBQcDBDAfBgNVHSME GDAWgBSWM9HmWBdbNHWKgVZk1b5I3qGPzzAdBgNVHQ4EFgQUIWGeYuaTsnIada5Xx8TR3cheUbgw DQYJKoZIhvcNAQELBQADggEBAHNQlMqQOFYPYFO71A+8t+qWMmtOdd2iGswSOvpSZ/pmGlfw8ZvY dRTkl27m37la84AxRkiVMes14JyOZJoMh/g7fbgPlU14eBc6WQWkIA6AmNkduFWTr1pRezkjpeo6 xVmdBLM4VY1TFDYj7S8H2adPuypd62uHMY/MZi+BIUys4uAFA+N3NuUBNjcVZXYPplYxxKEuIFq6 sDL+OV16G+F9CkNMN3txsym8Nnx5WAYZb6+rBUIhMGz70V05xsHQfzvo2s7f0J1tJ5BoRlPPhL0h VOnWA3h71u9TfSsv+PXVm3P21TfOS2uc1hbzEqyENCP4i5XQ0rv0TmPW42GZ0o4xggJtMIICaQIB ATBrMFsxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTEwLwYDVQQDEyhH bG9iYWxTaWduIEdDQyBSMyBQZXJzb25hbFNpZ24gMiBDQSAyMDIwAgwj8BKLXNpALfemdRAwDQYJ YIZIAWUDBAIBBQCggdQwLwYJKoZIhvcNAQkEMSIEINCWMliSfyA1oDMD5uEbDAR7l0ggirtJSvN3 FWh1CC9SMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTIzMDYxNDIy MzAzNlowaQYJKoZIhvcNAQkPMVwwWjALBglghkgBZQMEASowCwYJYIZIAWUDBAEWMAsGCWCGSAFl AwQBAjAKBggqhkiG9w0DBzALBgkqhkiG9w0BAQowCwYJKoZIhvcNAQEHMAsGCWCGSAFlAwQCATAN BgkqhkiG9w0BAQEFAASCAQC6QjCrHBza+ZPjKK9UsiGZ1XHJw0xd3T3MVl+qmoRdIx/mpSAjUWnm KWtPWDraIjtJxrBIXv34FVOwFkildnWhtuunN9F9NCSYcH0LdQpyc4WHSTkM64wU93JW/bIsarU2 FJ/JlwkI11jMDMDtesdCKyDabv6qP+/q1OJIk3eRMT0fVSJVg2h9ypwsejDwlbtfKuhaJF3Dm8GH B9/ZTnm0xql6Ev8raSc06R3dm/3hqreDKhaWsXTZo+LullOk8LSKyJiHYk3KMIC5uPbFpa+ckq62 g+FTAfCSN9GybAv4541BgA7QZc9Ue1Blt51w9Z4M/OO4p775O0FPmvoFkjLR --0000000000002c488705fe1e8038--