From nobody Sun Feb 8 21:33:44 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 64275C001DE for ; Thu, 13 Jul 2023 22:19:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234072AbjGMWTz (ORCPT ); Thu, 13 Jul 2023 18:19:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54482 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233410AbjGMWTq (ORCPT ); Thu, 13 Jul 2023 18:19:46 -0400 Received: from mail-qv1-xf2a.google.com (mail-qv1-xf2a.google.com [IPv6:2607:f8b0:4864:20::f2a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EE70E30DE for ; Thu, 13 Jul 2023 15:19:27 -0700 (PDT) Received: by mail-qv1-xf2a.google.com with SMTP id 6a1803df08f44-635eb5b0320so7130016d6.3 for ; Thu, 13 Jul 2023 15:19:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1689286766; x=1691878766; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=9mKtxCkGroqGLBuGPuPS/20D6Yn4iTLngVeuaO387iE=; b=Ol5SnkyI7rIBW4e8OWmgyf3A7mgfqoOgDPDeGhz/UjUYIb4yxCrfqV9klApH7OZHMF WJ1bAoCdIM7Ytp4wZjsWJ1lca92JAbH9c/ar+mB9kbH0azu1UzhrF0g+TYGynQlBen1S Vtp4P2tRoFeZx9zEZpEcD9Qz40xffnyrQnMdU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689286766; x=1691878766; 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=9mKtxCkGroqGLBuGPuPS/20D6Yn4iTLngVeuaO387iE=; b=BHRYNKOqEeBX1s2EEoaPUlxS7WP+zXb9axNUx+ImQyFJFQ3SGv3RELWc1KDtH5bm5v /vClyU4w4BXLe8ursfiAn7oi1t1F90K3UmJH86N/yhr/lYMn6Ajjcd+Ly5aySbflHAVj lTJkLxJJiF+ba0062mOIqAgrdhSmfd6rd6A/17MXOlsq/EOsIBxgpiBzIf/9O5Iw75/v e6jMTeSSzBZG0FCIEHMN/j3x1tnnHylR0UsgqSxGeLLhS4ywafx2l7vh1RhEHl+8zpcy gxxQrS40KQQOcg48fD6jZD/fxN2QFOTYwFBvIKspDBZ+ud2fpfIP516qwtOCjwkC34i1 uRQw== X-Gm-Message-State: ABy/qLYauvyIdcGxEVduYRrVl4upwe0d66a0+fgAkMq8jaVOeSj++bKN KF8HIkW7lk1aLBoTTanQvcc3AA== X-Google-Smtp-Source: APBJJlGa5LQ6aDyr6izE/VVRpBp4fnOsWDNP+lr/YCjQ9+3mKujIL0Rg7M1xUk7aRNRL/qJlAzJTrw== X-Received: by 2002:a0c:8e81:0:b0:635:ef7b:c74e with SMTP id x1-20020a0c8e81000000b00635ef7bc74emr2554470qvb.62.1689286766300; Thu, 13 Jul 2023 15:19:26 -0700 (PDT) Received: from stbirv-lnx-2.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id i14-20020a0cf38e000000b006262de12a8csm427623qvk.65.2023.07.13.15.19.23 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 13 Jul 2023 15:19:25 -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, simon.horman@corigine.com, christian.koenig@amd.com, Justin Chen Subject: [net-next v9 05/11] net: bcmasp: Add support for wake on net filters Date: Thu, 13 Jul 2023 15:19:00 -0700 Message-Id: <1689286746-43609-6-git-send-email-justin.chen@broadcom.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1689286746-43609-1-git-send-email-justin.chen@broadcom.com> References: <1689286746-43609-1-git-send-email-justin.chen@broadcom.com> Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="000000000000a72096060065b9d7" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable --000000000000a72096060065b9d7 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 QWRkIHN1cHBvcnQgZm9yIHdha2Ugb24gbmV0d29yayBmaWx0ZXJzLiBUaGUgbWF4IG1hdGNoIGlz IDI1NiBieXRlcy4KClNpZ25lZC1vZmYtYnk6IEp1c3RpbiBDaGVuIDxqdXN0aW4uY2hlbkBicm9h ZGNvbS5jb20+Ci0tLQogZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3Au YyAgICAgICAgfCA1OTUgKysrKysrKysrKysrKysrKys9CisrKysKIGRyaXZlcnMvbmV0L2V0aGVy bmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmggICAgICAgIHwgIDQwICsrCiAuLi4vbmV0L2V0aGVy bmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2V0aHRvb2wuYyAgICB8IDEzMSArKysrLQogZHJpdmVy cy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zi5jICAgfCAgIDMgKwogNCBm aWxlcyBjaGFuZ2VkLCA3NjggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdp dCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmMgYi9kcml2ZXJz L25ldC9ldGhlPQpybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmMKaW5kZXggODk0YzE0ZGNhOTEx Li45MmRmZWE5NjFhZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29t L2FzcDIvYmNtYXNwLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9i Y21hc3AuYwpAQCAtMTI3LDYgKzEyNyw1OTcgQEAgdm9pZCBiY21hc3BfZmx1c2hfcnhfcG9ydChz dHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpCiAJcnhfY3RybF9jb3JlX3dsKHByaXYsIG1hc2ssIHBy aXYtPmh3X2luZm8tPnJ4X2N0cmxfZmx1c2gpOwogfQo9MjAKK3N0YXRpYyB2b2lkIGJjbWFzcF9u ZXRmaWx0X2h3X2VuX3dha2Uoc3RydWN0IGJjbWFzcF9wcml2ICpwcml2LAorCQkJCSAgICAgIHN0 cnVjdCBiY21hc3BfbmV0X2ZpbHRlciAqbmZpbHQpCit7CisJcnhfZmlsdGVyX2NvcmVfd2wocHJp diwgQVNQX1JYX0ZJTFRFUl9ORVRfT0ZGU0VUX0wzXzEoNjQpLAorCQkJICBBU1BfUlhfRklMVEVS X05FVF9PRkZTRVQobmZpbHQtPmh3X2luZGV4KSk7CisKKwlyeF9maWx0ZXJfY29yZV93bChwcml2 LCBBU1BfUlhfRklMVEVSX05FVF9PRkZTRVRfTDIoMzIpIHwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9O RVRfT0ZGU0VUX0wzXzAoMzIpIHwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9ORVRfT0ZGU0VUX0wzXzEo OTYpIHwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9ORVRfT0ZGU0VUX0w0KDMyKSwKKwkJCSAgQVNQX1JY X0ZJTFRFUl9ORVRfT0ZGU0VUKG5maWx0LT5od19pbmRleCArIDEpKTsKKworCXJ4X2ZpbHRlcl9j b3JlX3dsKHByaXYsIEFTUF9SWF9GSUxURVJfTkVUX0NGR19DSChuZmlsdC0+cG9ydCArIDgpIHwK KwkJCSAgQVNQX1JYX0ZJTFRFUl9ORVRfQ0ZHX0VOIHwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9ORVRf Q0ZHX0wyX0VOIHwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9ORVRfQ0ZHX0wzX0VOIHwKKwkJCSAgQVNQ X1JYX0ZJTFRFUl9ORVRfQ0ZHX0w0X0VOIHwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9ORVRfQ0ZHX0wz X0ZSTSgyKSB8CisJCQkgIEFTUF9SWF9GSUxURVJfTkVUX0NGR19MNF9GUk0oMikgfAorCQkJICBB U1BfUlhfRklMVEVSX05FVF9DRkdfVU1DKG5maWx0LT5wb3J0KSwKKwkJCSAgQVNQX1JYX0ZJTFRF Ul9ORVRfQ0ZHKG5maWx0LT5od19pbmRleCkpOworCisJcnhfZmlsdGVyX2NvcmVfd2wocHJpdiwg QVNQX1JYX0ZJTFRFUl9ORVRfQ0ZHX0NIKG5maWx0LT5wb3J0ICsgOCkgfAorCQkJICBBU1BfUlhf RklMVEVSX05FVF9DRkdfRU4gfAorCQkJICBBU1BfUlhfRklMVEVSX05FVF9DRkdfTDJfRU4gfAor CQkJICBBU1BfUlhfRklMVEVSX05FVF9DRkdfTDNfRU4gfAorCQkJICBBU1BfUlhfRklMVEVSX05F VF9DRkdfTDRfRU4gfAorCQkJICBBU1BfUlhfRklMVEVSX05FVF9DRkdfTDNfRlJNKDIpIHwKKwkJ CSAgQVNQX1JYX0ZJTFRFUl9ORVRfQ0ZHX0w0X0ZSTSgyKSB8CisJCQkgIEFTUF9SWF9GSUxURVJf TkVUX0NGR19VTUMobmZpbHQtPnBvcnQpLAorCQkJICBBU1BfUlhfRklMVEVSX05FVF9DRkcobmZp bHQtPmh3X2luZGV4ICsgMSkpOworfQorCisjZGVmaW5lIE1BWF9XQUtFX0ZJTFRFUl9TSVpFCQky NTYKK2VudW0gYXNwX25ldGZpbHRfcmVnX3R5cGUgeworCUFTUF9ORVRGSUxUX01BVENIID0zRCAw LAorCUFTUF9ORVRGSUxUX01BU0ssCisJQVNQX05FVEZJTFRfTUFYCit9OworCitzdGF0aWMgaW50 IGJjbWFzcF9uZXRmaWx0X2dldF9yZWdfb2Zmc2V0KHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiwK KwkJCQkJIHN0cnVjdCBiY21hc3BfbmV0X2ZpbHRlciAqbmZpbHQsCisJCQkJCSBlbnVtIGFzcF9u ZXRmaWx0X3JlZ190eXBlIHJlZ190eXBlLAorCQkJCQkgdTMyIG9mZnNldCkKK3sKKwl1MzIgYmxv Y2tfaW5kZXgsIGZpbHRlcl9zZWw7CisKKwlpZiAob2Zmc2V0IDwgMzIpIHsKKwkJYmxvY2tfaW5k ZXggPTNEIEFTUF9SWF9GSUxURVJfTkVUX0wyOworCQlmaWx0ZXJfc2VsID0zRCBuZmlsdC0+aHdf aW5kZXg7CisJfSBlbHNlIGlmIChvZmZzZXQgPCA2NCkgeworCQlibG9ja19pbmRleCA9M0QgQVNQ X1JYX0ZJTFRFUl9ORVRfTDI7CisJCWZpbHRlcl9zZWwgPTNEIG5maWx0LT5od19pbmRleCArIDE7 CisJfSBlbHNlIGlmIChvZmZzZXQgPCA5NikgeworCQlibG9ja19pbmRleCA9M0QgQVNQX1JYX0ZJ TFRFUl9ORVRfTDNfMDsKKwkJZmlsdGVyX3NlbCA9M0QgbmZpbHQtPmh3X2luZGV4OworCX0gZWxz ZSBpZiAob2Zmc2V0IDwgMTI4KSB7CisJCWJsb2NrX2luZGV4ID0zRCBBU1BfUlhfRklMVEVSX05F VF9MM18wOworCQlmaWx0ZXJfc2VsID0zRCBuZmlsdC0+aHdfaW5kZXggKyAxOworCX0gZWxzZSBp ZiAob2Zmc2V0IDwgMTYwKSB7CisJCWJsb2NrX2luZGV4ID0zRCBBU1BfUlhfRklMVEVSX05FVF9M M18xOworCQlmaWx0ZXJfc2VsID0zRCBuZmlsdC0+aHdfaW5kZXg7CisJfSBlbHNlIGlmIChvZmZz ZXQgPCAxOTIpIHsKKwkJYmxvY2tfaW5kZXggPTNEIEFTUF9SWF9GSUxURVJfTkVUX0wzXzE7CisJ CWZpbHRlcl9zZWwgPTNEIG5maWx0LT5od19pbmRleCArIDE7CisJfSBlbHNlIGlmIChvZmZzZXQg PCAyMjQpIHsKKwkJYmxvY2tfaW5kZXggPTNEIEFTUF9SWF9GSUxURVJfTkVUX0w0OworCQlmaWx0 ZXJfc2VsID0zRCBuZmlsdC0+aHdfaW5kZXg7CisJfSBlbHNlIGlmIChvZmZzZXQgPCAyNTYpIHsK KwkJYmxvY2tfaW5kZXggPTNEIEFTUF9SWF9GSUxURVJfTkVUX0w0OworCQlmaWx0ZXJfc2VsID0z RCBuZmlsdC0+aHdfaW5kZXggKyAxOworCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOworCX0K KworCXN3aXRjaCAocmVnX3R5cGUpIHsKKwljYXNlIEFTUF9ORVRGSUxUX01BVENIOgorCQlyZXR1 cm4gQVNQX1JYX0ZJTFRFUl9ORVRfUEFUKGZpbHRlcl9zZWwsIGJsb2NrX2luZGV4LAorCQkJCQkg ICAgIChvZmZzZXQgJSAzMikpOworCWNhc2UgQVNQX05FVEZJTFRfTUFTSzoKKwkJcmV0dXJuIEFT UF9SWF9GSUxURVJfTkVUX01BU0soZmlsdGVyX3NlbCwgYmxvY2tfaW5kZXgsCisJCQkJCSAgICAg IChvZmZzZXQgJSAzMikpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKwor c3RhdGljIHZvaWQgYmNtYXNwX25ldGZpbHRfd3Ioc3RydWN0IGJjbWFzcF9wcml2ICpwcml2LAor CQkJICAgICAgc3RydWN0IGJjbWFzcF9uZXRfZmlsdGVyICpuZmlsdCwKKwkJCSAgICAgIGVudW0g YXNwX25ldGZpbHRfcmVnX3R5cGUgcmVnX3R5cGUsCisJCQkgICAgICB1MzIgdmFsLCB1MzIgb2Zm c2V0KQoreworCWludCByZWdfb2Zmc2V0OworCisJLyogSFcgb25seSBhY2NlcHRzIDQgYnl0ZSBh bGlnbmVkIHdyaXRlcyAqLworCWlmICghSVNfQUxJR05FRChvZmZzZXQsIDQpIHx8IG9mZnNldCA+ IE1BWF9XQUtFX0ZJTFRFUl9TSVpFKQorCQlyZXR1cm47CisKKwlyZWdfb2Zmc2V0ID0zRCBiY21h c3BfbmV0ZmlsdF9nZXRfcmVnX29mZnNldChwcml2LCBuZmlsdCwgcmVnX3R5cGUsCisJCQkJCQkg ICBvZmZzZXQpOworCisJcnhfZmlsdGVyX2NvcmVfd2wocHJpdiwgdmFsLCByZWdfb2Zmc2V0KTsK K30KKworc3RhdGljIHUzMiBiY21hc3BfbmV0ZmlsdF9yZChzdHJ1Y3QgYmNtYXNwX3ByaXYgKnBy aXYsCisJCQkgICAgIHN0cnVjdCBiY21hc3BfbmV0X2ZpbHRlciAqbmZpbHQsCisJCQkgICAgIGVu dW0gYXNwX25ldGZpbHRfcmVnX3R5cGUgcmVnX3R5cGUsCisJCQkgICAgIHUzMiBvZmZzZXQpCit7 CisJaW50IHJlZ19vZmZzZXQ7CisKKwkvKiBIVyBvbmx5IGFjY2VwdHMgNCBieXRlIGFsaWduZWQg d3JpdGVzICovCisJaWYgKCFJU19BTElHTkVEKG9mZnNldCwgNCkgfHwgb2Zmc2V0ID4gTUFYX1dB S0VfRklMVEVSX1NJWkUpCisJCXJldHVybiAwOworCisJcmVnX29mZnNldCA9M0QgYmNtYXNwX25l dGZpbHRfZ2V0X3JlZ19vZmZzZXQocHJpdiwgbmZpbHQsIHJlZ190eXBlLAorCQkJCQkJICAgb2Zm c2V0KTsKKworCXJldHVybiByeF9maWx0ZXJfY29yZV9ybChwcml2LCByZWdfb2Zmc2V0KTsKK30K Kworc3RhdGljIGludCBiY21hc3BfbmV0ZmlsdF93cl9tX3dha2Uoc3RydWN0IGJjbWFzcF9wcml2 ICpwcml2LAorCQkJCSAgICBzdHJ1Y3QgYmNtYXNwX25ldF9maWx0ZXIgKm5maWx0LAorCQkJCSAg ICB1MzIgb2Zmc2V0LCB2b2lkICptYXRjaCwgdm9pZCAqbWFzaywKKwkJCQkgICAgc2l6ZV90IHNp emUpCit7CisJdTMyIHNoaWZ0LCBtYXNrX3ZhbCA9M0QgMCwgbWF0Y2hfdmFsID0zRCAwOworCWJv b2wgZmlyc3RfYnl0ZSA9M0QgdHJ1ZTsKKworCWlmICgob2Zmc2V0ICsgc2l6ZSkgPiBNQVhfV0FL RV9GSUxURVJfU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3aGlsZSAoc2l6ZS0tKSB7CisJ CS8qIFRoZSBIVyBvbmx5IGFjY2VwdHMgNCBieXRlIGFsaWduZWQgd3JpdGVzLCBzbyBpZiB3ZQor CQkgKiBiZWdpbiB1bmFsaWduZWQgb3IgaWYgcmVtYWluaW5nIGJ5dGVzIGxlc3MgdGhhbiA0LAor CQkgKiB3ZSBuZWVkIHRvIHJlYWQgdGhlbiB3cml0ZSB0byBhdm9pZCBsb3NpbmcgY3VycmVudAor CQkgKiByZWdpc3RlciBzdGF0ZQorCQkgKi8KKwkJaWYgKGZpcnN0X2J5dGUgJiYgKCFJU19BTElH TkVEKG9mZnNldCwgNCkgfHwgc2l6ZSA8IDMpKSB7CisJCQltYXRjaF92YWwgPTNEIGJjbWFzcF9u ZXRmaWx0X3JkKHByaXYsIG5maWx0LAorCQkJCQkJICAgICAgQVNQX05FVEZJTFRfTUFUQ0gsCisJ CQkJCQkgICAgICBBTElHTl9ET1dOKG9mZnNldCwgNCkpOworCQkJbWFza192YWwgPTNEIGJjbWFz cF9uZXRmaWx0X3JkKHByaXYsIG5maWx0LAorCQkJCQkJICAgICBBU1BfTkVURklMVF9NQVNLLAor CQkJCQkJICAgICBBTElHTl9ET1dOKG9mZnNldCwgNCkpOworCQl9CisKKwkJc2hpZnQgPTNEICgz IC0gKG9mZnNldCAlIDQpKSAqIDg7CisJCW1hdGNoX3ZhbCAmPTNEIH5HRU5NQVNLKHNoaWZ0ICsg Nywgc2hpZnQpOworCQltYXNrX3ZhbCAmPTNEIH5HRU5NQVNLKHNoaWZ0ICsgNywgc2hpZnQpOwor CQltYXRjaF92YWwgfD0zRCAodTMyKSgqKCh1OCAqKW1hdGNoKSA8PCBzaGlmdCk7CisJCW1hc2tf dmFsIHw9M0QgKHUzMikoKigodTggKiltYXNrKSA8PCBzaGlmdCk7CisKKwkJLyogSWYgbGFzdCBi eXRlIG9yIGxhc3QgYnl0ZSBvZiB3b3JkLCB3cml0ZSB0byByZWcgKi8KKwkJaWYgKCFzaXplIHx8 ICgob2Zmc2V0ICUgNCkgPTNEPTNEIDMpKSB7CisJCQliY21hc3BfbmV0ZmlsdF93cihwcml2LCBu ZmlsdCwgQVNQX05FVEZJTFRfTUFUQ0gsCisJCQkJCSAgbWF0Y2hfdmFsLCBBTElHTl9ET1dOKG9m ZnNldCwgNCkpOworCQkJYmNtYXNwX25ldGZpbHRfd3IocHJpdiwgbmZpbHQsIEFTUF9ORVRGSUxU X01BU0ssCisJCQkJCSAgbWFza192YWwsIEFMSUdOX0RPV04ob2Zmc2V0LCA0KSk7CisJCQlmaXJz dF9ieXRlID0zRCB0cnVlOworCQl9IGVsc2UgeworCQkJZmlyc3RfYnl0ZSA9M0QgZmFsc2U7CisJ CX0KKworCQlvZmZzZXQrKzsKKwkJbWF0Y2grKzsKKwkJbWFzaysrOworCX0KKworCXJldHVybiAw OworfQorCitzdGF0aWMgdm9pZCBiY21hc3BfbmV0ZmlsdF9yZXNldF9odyhzdHJ1Y3QgYmNtYXNw X3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBiY21hc3BfbmV0X2ZpbHRlciAqbmZpbHQpCit7 CisJaW50IGk7CisKKwlmb3IgKGkgPTNEIDA7IGkgPCBNQVhfV0FLRV9GSUxURVJfU0laRTsgaSAr PTNEIDQpIHsKKwkJYmNtYXNwX25ldGZpbHRfd3IocHJpdiwgbmZpbHQsIEFTUF9ORVRGSUxUX01B VENILCAwLCBpKTsKKwkJYmNtYXNwX25ldGZpbHRfd3IocHJpdiwgbmZpbHQsIEFTUF9ORVRGSUxU X01BU0ssIDAsIGkpOworCX0KK30KKworc3RhdGljIHZvaWQgYmNtYXNwX25ldGZpbHRfdGNwaXA0 X3dyKHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiwKKwkJCQkgICAgIHN0cnVjdCBiY21hc3BfbmV0 X2ZpbHRlciAqbmZpbHQsCisJCQkJICAgICBzdHJ1Y3QgZXRodG9vbF90Y3BpcDRfc3BlYyAqbWF0 Y2gsCisJCQkJICAgICBzdHJ1Y3QgZXRodG9vbF90Y3BpcDRfc3BlYyAqbWFzaywKKwkJCQkgICAg IHUzMiBvZmZzZXQpCit7CisJX19iZTE2IHZhbF8xNiwgbWFza18xNjsKKworCXZhbF8xNiA9M0Qg aHRvbnMoRVRIX1BfSVApOworCW1hc2tfMTYgPTNEIGh0b25zKDB4RkZGRik7CisJYmNtYXNwX25l dGZpbHRfd3JfbV93YWtlKHByaXYsIG5maWx0LCAoRVRIX0FMRU4gKiAyKSArIG9mZnNldCwKKwkJ CQkgJnZhbF8xNiwgJm1hc2tfMTYsIHNpemVvZih2YWxfMTYpKTsKKwliY21hc3BfbmV0ZmlsdF93 cl9tX3dha2UocHJpdiwgbmZpbHQsIEVUSF9ITEVOICsgb2Zmc2V0ICsgMSwKKwkJCQkgJm1hdGNo LT50b3MsICZtYXNrLT50b3MsCisJCQkJIHNpemVvZihtYXRjaC0+dG9zKSk7CisJYmNtYXNwX25l dGZpbHRfd3JfbV93YWtlKHByaXYsIG5maWx0LCBFVEhfSExFTiArIG9mZnNldCArIDEyLAorCQkJ CSAmbWF0Y2gtPmlwNHNyYywgJm1hc2stPmlwNHNyYywKKwkJCQkgc2l6ZW9mKG1hdGNoLT5pcDRz cmMpKTsKKwliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwgbmZpbHQsIEVUSF9ITEVOICsg b2Zmc2V0ICsgMTYsCisJCQkJICZtYXRjaC0+aXA0ZHN0LCAmbWFzay0+aXA0ZHN0LAorCQkJCSBz aXplb2YobWF0Y2gtPmlwNGRzdCkpOworCWJjbWFzcF9uZXRmaWx0X3dyX21fd2FrZShwcml2LCBu ZmlsdCwgRVRIX0hMRU4gKyBvZmZzZXQgKyAyMCwKKwkJCQkgJm1hdGNoLT5wc3JjLCAmbWFzay0+ cHNyYywKKwkJCQkgc2l6ZW9mKG1hdGNoLT5wc3JjKSk7CisJYmNtYXNwX25ldGZpbHRfd3JfbV93 YWtlKHByaXYsIG5maWx0LCBFVEhfSExFTiArIG9mZnNldCArIDIyLAorCQkJCSAmbWF0Y2gtPnBk c3QsICZtYXNrLT5wZHN0LAorCQkJCSBzaXplb2YobWF0Y2gtPnBkc3QpKTsKK30KKworc3RhdGlj IHZvaWQgYmNtYXNwX25ldGZpbHRfdGNwaXA2X3dyKHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiwK KwkJCQkgICAgIHN0cnVjdCBiY21hc3BfbmV0X2ZpbHRlciAqbmZpbHQsCisJCQkJICAgICBzdHJ1 Y3QgZXRodG9vbF90Y3BpcDZfc3BlYyAqbWF0Y2gsCisJCQkJICAgICBzdHJ1Y3QgZXRodG9vbF90 Y3BpcDZfc3BlYyAqbWFzaywKKwkJCQkgICAgIHUzMiBvZmZzZXQpCit7CisJX19iZTE2IHZhbF8x NiwgbWFza18xNjsKKworCXZhbF8xNiA9M0QgaHRvbnMoRVRIX1BfSVBWNik7CisJbWFza18xNiA9 M0QgaHRvbnMoMHhGRkZGKTsKKwliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwgbmZpbHQs IChFVEhfQUxFTiAqIDIpICsgb2Zmc2V0LAorCQkJCSAmdmFsXzE2LCAmbWFza18xNiwgc2l6ZW9m KHZhbF8xNikpOworCXZhbF8xNiA9M0QgaHRvbnMobWF0Y2gtPnRjbGFzcyA8PCA0KTsKKwltYXNr XzE2ID0zRCBodG9ucyhtYXNrLT50Y2xhc3MgPDwgNCk7CisJYmNtYXNwX25ldGZpbHRfd3JfbV93 YWtlKHByaXYsIG5maWx0LCBFVEhfSExFTiArIG9mZnNldCwKKwkJCQkgJnZhbF8xNiwgJm1hc2tf MTYsIHNpemVvZih2YWxfMTYpKTsKKwliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwgbmZp bHQsIEVUSF9ITEVOICsgb2Zmc2V0ICsgOCwKKwkJCQkgJm1hdGNoLT5pcDZzcmMsICZtYXNrLT5p cDZzcmMsCisJCQkJIHNpemVvZihtYXRjaC0+aXA2c3JjKSk7CisJYmNtYXNwX25ldGZpbHRfd3Jf bV93YWtlKHByaXYsIG5maWx0LCBFVEhfSExFTiArIG9mZnNldCArIDI0LAorCQkJCSAmbWF0Y2gt PmlwNmRzdCwgJm1hc2stPmlwNmRzdCwKKwkJCQkgc2l6ZW9mKG1hdGNoLT5pcDZkc3QpKTsKKwli Y21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwgbmZpbHQsIEVUSF9ITEVOICsgb2Zmc2V0ICsg NDAsCisJCQkJICZtYXRjaC0+cHNyYywgJm1hc2stPnBzcmMsCisJCQkJIHNpemVvZihtYXRjaC0+ cHNyYykpOworCWJjbWFzcF9uZXRmaWx0X3dyX21fd2FrZShwcml2LCBuZmlsdCwgRVRIX0hMRU4g KyBvZmZzZXQgKyA0MiwKKwkJCQkgJm1hdGNoLT5wZHN0LCAmbWFzay0+cGRzdCwKKwkJCQkgc2l6 ZW9mKG1hdGNoLT5wZHN0KSk7Cit9CisKK3N0YXRpYyBpbnQgYmNtYXNwX25ldGZpbHRfd3JfdG9f aHcoc3RydWN0IGJjbWFzcF9wcml2ICpwcml2LAorCQkJCSAgIHN0cnVjdCBiY21hc3BfbmV0X2Zp bHRlciAqbmZpbHQpCit7CisJc3RydWN0IGV0aHRvb2xfcnhfZmxvd19zcGVjICpmcyA9M0QgJm5m aWx0LT5mczsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0zRCAwOworCV9fYmUxNiB2YWxfMTYsIG1h c2tfMTY7CisJdTggdmFsXzgsIG1hc2tfODsKKworCS8qIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRz IHdha2UgZmlsdGVycyAqLworCWlmICghbmZpbHQtPndha2VfZmlsdGVyKQorCQlyZXR1cm4gLUVJ TlZBTDsKKworCWJjbWFzcF9uZXRmaWx0X3Jlc2V0X2h3KHByaXYsIG5maWx0KTsKKworCWlmIChm cy0+Zmxvd190eXBlICYgRkxPV19NQUNfRVhUKSB7CisJCWJjbWFzcF9uZXRmaWx0X3dyX21fd2Fr ZShwcml2LCBuZmlsdCwgMCwgJmZzLT5oX2V4dC5oX2Rlc3QsCisJCQkJCSAmZnMtPm1fZXh0Lmhf ZGVzdCwKKwkJCQkJIHNpemVvZihmcy0+aF9leHQuaF9kZXN0KSk7CisJfQorCisJaWYgKChmcy0+ Zmxvd190eXBlICYgRkxPV19FWFQpICYmCisJICAgIChmcy0+bV9leHQudmxhbl9ldHlwZSB8fCBm cy0+bV9leHQudmxhbl90Y2kpKSB7CisJCWJjbWFzcF9uZXRmaWx0X3dyX21fd2FrZShwcml2LCBu ZmlsdCwgKEVUSF9BTEVOICogMiksCisJCQkJCSAmZnMtPmhfZXh0LnZsYW5fZXR5cGUsCisJCQkJ CSAmZnMtPm1fZXh0LnZsYW5fZXR5cGUsCisJCQkJCSBzaXplb2YoZnMtPmhfZXh0LnZsYW5fZXR5 cGUpKTsKKwkJYmNtYXNwX25ldGZpbHRfd3JfbV93YWtlKHByaXYsIG5maWx0LCAoKEVUSF9BTEVO ICogMikgKyAyKSwKKwkJCQkJICZmcy0+aF9leHQudmxhbl90Y2ksCisJCQkJCSAmZnMtPm1fZXh0 LnZsYW5fdGNpLAorCQkJCQkgc2l6ZW9mKGZzLT5oX2V4dC52bGFuX3RjaSkpOworCQlvZmZzZXQg Kz0zRCBWTEFOX0hMRU47CisJfQorCisJc3dpdGNoIChmcy0+Zmxvd190eXBlICYgfihGTE9XX0VY VCB8IEZMT1dfTUFDX0VYVCkpIHsKKwljYXNlIEVUSEVSX0ZMT1c6CisJCWJjbWFzcF9uZXRmaWx0 X3dyX21fd2FrZShwcml2LCBuZmlsdCwgMCwKKwkJCQkJICZmcy0+aF91LmV0aGVyX3NwZWMuaF9k ZXN0LAorCQkJCQkgJmZzLT5tX3UuZXRoZXJfc3BlYy5oX2Rlc3QsCisJCQkJCSBzaXplb2YoZnMt PmhfdS5ldGhlcl9zcGVjLmhfZGVzdCkpOworCQliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJp diwgbmZpbHQsIEVUSF9BTEVOLAorCQkJCQkgJmZzLT5oX3UuZXRoZXJfc3BlYy5oX3NvdXJjZSwK KwkJCQkJICZmcy0+bV91LmV0aGVyX3NwZWMuaF9zb3VyY2UsCisJCQkJCSBzaXplb2YoZnMtPmhf dS5ldGhlcl9zcGVjLmhfc291cmNlKSk7CisJCWJjbWFzcF9uZXRmaWx0X3dyX21fd2FrZShwcml2 LCBuZmlsdCwgKEVUSF9BTEVOICogMikgKyBvZmZzZXQsCisJCQkJCSAmZnMtPmhfdS5ldGhlcl9z cGVjLmhfcHJvdG8sCisJCQkJCSAmZnMtPm1fdS5ldGhlcl9zcGVjLmhfcHJvdG8sCisJCQkJCSBz aXplb2YoZnMtPmhfdS5ldGhlcl9zcGVjLmhfcHJvdG8pKTsKKworCQlicmVhazsKKwljYXNlIElQ X1VTRVJfRkxPVzoKKwkJdmFsXzE2ID0zRCBodG9ucyhFVEhfUF9JUCk7CisJCW1hc2tfMTYgPTNE IGh0b25zKDB4RkZGRik7CisJCWJjbWFzcF9uZXRmaWx0X3dyX21fd2FrZShwcml2LCBuZmlsdCwg KEVUSF9BTEVOICogMikgKyBvZmZzZXQsCisJCQkJCSAmdmFsXzE2LCAmbWFza18xNiwgc2l6ZW9m KHZhbF8xNikpOworCQliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwgbmZpbHQsIEVUSF9I TEVOICsgb2Zmc2V0ICsgMSwKKwkJCQkJICZmcy0+aF91LnVzcl9pcDRfc3BlYy50b3MsCisJCQkJ CSAmZnMtPm1fdS51c3JfaXA0X3NwZWMudG9zLAorCQkJCQkgc2l6ZW9mKGZzLT5oX3UudXNyX2lw NF9zcGVjLnRvcykpOworCQliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwgbmZpbHQsIEVU SF9ITEVOICsgb2Zmc2V0ICsgOSwKKwkJCQkJICZmcy0+aF91LnVzcl9pcDRfc3BlYy5wcm90bywK KwkJCQkJICZmcy0+bV91LnVzcl9pcDRfc3BlYy5wcm90bywKKwkJCQkJIHNpemVvZihmcy0+aF91 LnVzcl9pcDRfc3BlYy5wcm90bykpOworCQliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwg bmZpbHQsIEVUSF9ITEVOICsgb2Zmc2V0ICsgMTIsCisJCQkJCSAmZnMtPmhfdS51c3JfaXA0X3Nw ZWMuaXA0c3JjLAorCQkJCQkgJmZzLT5tX3UudXNyX2lwNF9zcGVjLmlwNHNyYywKKwkJCQkJIHNp emVvZihmcy0+aF91LnVzcl9pcDRfc3BlYy5pcDRzcmMpKTsKKwkJYmNtYXNwX25ldGZpbHRfd3Jf bV93YWtlKHByaXYsIG5maWx0LCBFVEhfSExFTiArIG9mZnNldCArIDE2LAorCQkJCQkgJmZzLT5o X3UudXNyX2lwNF9zcGVjLmlwNGRzdCwKKwkJCQkJICZmcy0+bV91LnVzcl9pcDRfc3BlYy5pcDRk c3QsCisJCQkJCSBzaXplb2YoZnMtPmhfdS51c3JfaXA0X3NwZWMuaXA0ZHN0KSk7CisJCWlmICgh ZnMtPm1fdS51c3JfaXA0X3NwZWMubDRfNF9ieXRlcykKKwkJCWJyZWFrOworCisJCS8qIE9ubHkg c3VwcG9ydHMgMjAgYnl0ZSBJUHY0IGhlYWRlciAqLworCQl2YWxfOCA9M0QgMHg0NTsKKwkJbWFz a184ID0zRCAweEZGOworCQliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwgbmZpbHQsIEVU SF9ITEVOICsgb2Zmc2V0LAorCQkJCQkgJnZhbF84LCAmbWFza184LCBzaXplb2YodmFsXzgpKTsK KwkJYmNtYXNwX25ldGZpbHRfd3JfbV93YWtlKHByaXYsIG5maWx0LAorCQkJCQkgRVRIX0hMRU4g KyAyMCArIG9mZnNldCwKKwkJCQkJICZmcy0+aF91LnVzcl9pcDRfc3BlYy5sNF80X2J5dGVzLAor CQkJCQkgJmZzLT5tX3UudXNyX2lwNF9zcGVjLmw0XzRfYnl0ZXMsCisJCQkJCSBzaXplb2YoZnMt PmhfdS51c3JfaXA0X3NwZWMubDRfNF9ieXRlcykKKwkJCQkJICk7CisJCWJyZWFrOworCWNhc2Ug VENQX1Y0X0ZMT1c6CisJCXZhbF84ID0zRCBJUFBST1RPX1RDUDsKKwkJbWFza184ID0zRCAweEZG OworCQliY21hc3BfbmV0ZmlsdF90Y3BpcDRfd3IocHJpdiwgbmZpbHQsICZmcy0+aF91LnRjcF9p cDRfc3BlYywKKwkJCQkJICZmcy0+bV91LnRjcF9pcDRfc3BlYywgb2Zmc2V0KTsKKwkJYmNtYXNw X25ldGZpbHRfd3JfbV93YWtlKHByaXYsIG5maWx0LCBFVEhfSExFTiArIG9mZnNldCArIDksCisJ CQkJCSAmdmFsXzgsICZtYXNrXzgsIHNpemVvZih2YWxfOCkpOworCQlicmVhazsKKwljYXNlIFVE UF9WNF9GTE9XOgorCQl2YWxfOCA9M0QgSVBQUk9UT19VRFA7CisJCW1hc2tfOCA9M0QgMHhGRjsK KwkJYmNtYXNwX25ldGZpbHRfdGNwaXA0X3dyKHByaXYsIG5maWx0LCAmZnMtPmhfdS51ZHBfaXA0 X3NwZWMsCisJCQkJCSAmZnMtPm1fdS51ZHBfaXA0X3NwZWMsIG9mZnNldCk7CisKKwkJYmNtYXNw X25ldGZpbHRfd3JfbV93YWtlKHByaXYsIG5maWx0LCBFVEhfSExFTiArIG9mZnNldCArIDksCisJ CQkJCSAmdmFsXzgsICZtYXNrXzgsIHNpemVvZih2YWxfOCkpOworCQlicmVhazsKKwljYXNlIFRD UF9WNl9GTE9XOgorCQl2YWxfOCA9M0QgSVBQUk9UT19UQ1A7CisJCW1hc2tfOCA9M0QgMHhGRjsK KwkJYmNtYXNwX25ldGZpbHRfdGNwaXA2X3dyKHByaXYsIG5maWx0LCAmZnMtPmhfdS50Y3BfaXA2 X3NwZWMsCisJCQkJCSAmZnMtPm1fdS50Y3BfaXA2X3NwZWMsIG9mZnNldCk7CisJCWJjbWFzcF9u ZXRmaWx0X3dyX21fd2FrZShwcml2LCBuZmlsdCwgRVRIX0hMRU4gKyBvZmZzZXQgKyA2LAorCQkJ CQkgJnZhbF84LCAmbWFza184LCBzaXplb2YodmFsXzgpKTsKKwkJYnJlYWs7CisJY2FzZSBVRFBf VjZfRkxPVzoKKwkJdmFsXzggPTNEIElQUFJPVE9fVURQOworCQltYXNrXzggPTNEIDB4RkY7CisJ CWJjbWFzcF9uZXRmaWx0X3RjcGlwNl93cihwcml2LCBuZmlsdCwgJmZzLT5oX3UudWRwX2lwNl9z cGVjLAorCQkJCQkgJmZzLT5tX3UudWRwX2lwNl9zcGVjLCBvZmZzZXQpOworCQliY21hc3BfbmV0 ZmlsdF93cl9tX3dha2UocHJpdiwgbmZpbHQsIEVUSF9ITEVOICsgb2Zmc2V0ICsgNiwKKwkJCQkJ ICZ2YWxfOCwgJm1hc2tfOCwgc2l6ZW9mKHZhbF84KSk7CisJCWJyZWFrOworCX0KKworCWJjbWFz cF9uZXRmaWx0X2h3X2VuX3dha2UocHJpdiwgbmZpbHQpOworCisJcmV0dXJuIDA7Cit9CisKK3Zv aWQgYmNtYXNwX25ldGZpbHRfc3VzcGVuZChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpCit7CisJ c3RydWN0IGJjbWFzcF9wcml2ICpwcml2ID0zRCBpbnRmLT5wYXJlbnQ7CisJYm9vbCB3cml0ZSA9 M0QgZmFsc2U7CisJaW50IHJldCwgaTsKKworCS8qIFdyaXRlIGFsbCBmaWx0ZXJzIHRvIEhXICov CisJZm9yIChpID0zRCAwOyBpIDwgTlVNX05FVF9GSUxURVJTOyBpKyspIHsKKwkJLyogSWYgdGhl IGZpbHRlciBkb2VzIG5vdCBtYXRjaCB0aGUgcG9ydCwgc2tpcCBwcm9ncmFtbWluZy4gKi8KKwkJ aWYgKCFwcml2LT5uZXRfZmlsdGVyc1tpXS5jbGFpbWVkIHx8CisJCSAgICBwcml2LT5uZXRfZmls dGVyc1tpXS5wb3J0ICE9M0QgaW50Zi0+cG9ydCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChpID4g MCAmJiAoaSAlIDIpICYmCisJCSAgICBwcml2LT5uZXRfZmlsdGVyc1tpXS53YWtlX2ZpbHRlciAm JgorCQkgICAgcHJpdi0+bmV0X2ZpbHRlcnNbaSAtIDFdLndha2VfZmlsdGVyKQorCQkJY29udGlu dWU7CisKKwkJcmV0ID0zRCBiY21hc3BfbmV0ZmlsdF93cl90b19odyhwcml2LCAmcHJpdi0+bmV0 X2ZpbHRlcnNbaV0pOworCQlpZiAoIXJldCkKKwkJCXdyaXRlID0zRCB0cnVlOworCX0KKworCS8q IFN1Y2Nlc3NmdWxseSBwcm9ncmFtbWVkIGF0IGxlYXN0IG9uZSB3YWtlIGZpbHRlcgorCSAqIHNv IGVuYWJsZSB0b3AgbGV2ZWwgd2FrZSBjb25maWcKKwkgKi8KKwlpZiAod3JpdGUpCisJCXJ4X2Zp bHRlcl9jb3JlX3dsKHByaXYsIChBU1BfUlhfRklMVEVSX09QVVRfRU4gfAorCQkJCSAgQVNQX1JY X0ZJTFRFUl9MTlJfTUQgfAorCQkJCSAgQVNQX1JYX0ZJTFRFUl9HRU5fV0tfRU4gfAorCQkJCSAg QVNQX1JYX0ZJTFRFUl9OVF9GTFRfRU4pLAorCQkJCSAgQVNQX1JYX0ZJTFRFUl9CTEtfQ1RSTCk7 Cit9CisKK3ZvaWQgYmNtYXNwX25ldGZpbHRfZ2V0X2FsbF9hY3RpdmUoc3RydWN0IGJjbWFzcF9p bnRmICppbnRmLCB1MzIgKnJ1bGVfbG9jPQpzLAorCQkJCSAgIHUzMiAqcnVsZV9jbnQpCit7CisJ c3RydWN0IGJjbWFzcF9wcml2ICpwcml2ID0zRCBpbnRmLT5wYXJlbnQ7CisJaW50IGogPTNEIDAs IGk7CisKKwlmb3IgKGkgPTNEIDA7IGkgPCBOVU1fTkVUX0ZJTFRFUlM7IGkrKykgeworCQlpZiAo IXByaXYtPm5ldF9maWx0ZXJzW2ldLmNsYWltZWQgfHwKKwkJICAgIHByaXYtPm5ldF9maWx0ZXJz W2ldLnBvcnQgIT0zRCBpbnRmLT5wb3J0KQorCQkJY29udGludWU7CisKKwkJaWYgKGkgPiAwICYm IChpICUgMikgJiYKKwkJICAgIHByaXYtPm5ldF9maWx0ZXJzW2ldLndha2VfZmlsdGVyICYmCisJ CSAgICBwcml2LT5uZXRfZmlsdGVyc1tpIC0gMV0ud2FrZV9maWx0ZXIpCisJCQljb250aW51ZTsK KworCQlydWxlX2xvY3NbaisrXSA9M0QgcHJpdi0+bmV0X2ZpbHRlcnNbaV0uZnMubG9jYXRpb247 CisJfQorCisJKnJ1bGVfY250ID0zRCBqOworfQorCitpbnQgYmNtYXNwX25ldGZpbHRfZ2V0X2Fj dGl2ZShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpCit7CisJc3RydWN0IGJjbWFzcF9wcml2ICpw cml2ID0zRCBpbnRmLT5wYXJlbnQ7CisJaW50IGNudCA9M0QgMCwgaTsKKworCWZvciAoaSA9M0Qg MDsgaSA8IE5VTV9ORVRfRklMVEVSUzsgaSsrKSB7CisJCWlmICghcHJpdi0+bmV0X2ZpbHRlcnNb aV0uY2xhaW1lZCB8fAorCQkgICAgcHJpdi0+bmV0X2ZpbHRlcnNbaV0ucG9ydCAhPTNEIGludGYt PnBvcnQpCisJCQljb250aW51ZTsKKworCQkvKiBTa2lwIG92ZXIgYSB3YWtlIGZpbHRlciBwYWly ICovCisJCWlmIChpID4gMCAmJiAoaSAlIDIpICYmCisJCSAgICBwcml2LT5uZXRfZmlsdGVyc1tp XS53YWtlX2ZpbHRlciAmJgorCQkgICAgcHJpdi0+bmV0X2ZpbHRlcnNbaSAtIDFdLndha2VfZmls dGVyKQorCQkJY29udGludWU7CisKKwkJY250Kys7CisJfQorCisJcmV0dXJuIGNudDsKK30KKwor Ym9vbCBiY21hc3BfbmV0ZmlsdF9jaGVja19kdXAoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLAor CQkJICAgICAgc3RydWN0IGV0aHRvb2xfcnhfZmxvd19zcGVjICpmcykKK3sKKwlzdHJ1Y3QgYmNt YXNwX3ByaXYgKnByaXYgPTNEIGludGYtPnBhcmVudDsKKwlzdHJ1Y3QgZXRodG9vbF9yeF9mbG93 X3NwZWMgKmN1cjsKKwlzaXplX3QgZnNfc2l6ZSA9M0QgMDsKKwlpbnQgaTsKKworCWZvciAoaSA9 M0QgMDsgaSA8IE5VTV9ORVRfRklMVEVSUzsgaSsrKSB7CisJCWlmICghcHJpdi0+bmV0X2ZpbHRl cnNbaV0uY2xhaW1lZCB8fAorCQkgICAgcHJpdi0+bmV0X2ZpbHRlcnNbaV0ucG9ydCAhPTNEIGlu dGYtPnBvcnQpCisJCQljb250aW51ZTsKKworCQljdXIgPTNEICZwcml2LT5uZXRfZmlsdGVyc1tp XS5mczsKKworCQlpZiAoY3VyLT5mbG93X3R5cGUgIT0zRCBmcy0+Zmxvd190eXBlIHx8CisJCSAg ICBjdXItPnJpbmdfY29va2llICE9M0QgZnMtPnJpbmdfY29va2llKQorCQkJY29udGludWU7CisK KwkJc3dpdGNoIChmcy0+Zmxvd190eXBlICYgfihGTE9XX0VYVCB8IEZMT1dfTUFDX0VYVCkpIHsK KwkJY2FzZSBFVEhFUl9GTE9XOgorCQkJZnNfc2l6ZSA9M0Qgc2l6ZW9mKHN0cnVjdCBldGhoZHIp OworCQkJYnJlYWs7CisJCWNhc2UgSVBfVVNFUl9GTE9XOgorCQkJZnNfc2l6ZSA9M0Qgc2l6ZW9m KHN0cnVjdCBldGh0b29sX3VzcmlwNF9zcGVjKTsKKwkJCWJyZWFrOworCQljYXNlIFRDUF9WNl9G TE9XOgorCQljYXNlIFVEUF9WNl9GTE9XOgorCQkJZnNfc2l6ZSA9M0Qgc2l6ZW9mKHN0cnVjdCBl dGh0b29sX3RjcGlwNl9zcGVjKTsKKwkJCWJyZWFrOworCQljYXNlIFRDUF9WNF9GTE9XOgorCQlj YXNlIFVEUF9WNF9GTE9XOgorCQkJZnNfc2l6ZSA9M0Qgc2l6ZW9mKHN0cnVjdCBldGh0b29sX3Rj cGlwNF9zcGVjKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY29udGludWU7CisJCX0KKwor CQlpZiAobWVtY21wKCZjdXItPmhfdSwgJmZzLT5oX3UsIGZzX3NpemUpIHx8CisJCSAgICBtZW1j bXAoJmN1ci0+bV91LCAmZnMtPm1fdSwgZnNfc2l6ZSkpCisJCQljb250aW51ZTsKKworCQlpZiAo Y3VyLT5mbG93X3R5cGUgJiBGTE9XX0VYVCkgeworCQkJaWYgKGN1ci0+aF9leHQudmxhbl9ldHlw ZSAhPTNEIGZzLT5oX2V4dC52bGFuX2V0eXBlIHx8CisJCQkgICAgY3VyLT5tX2V4dC52bGFuX2V0 eXBlICE9M0QgZnMtPm1fZXh0LnZsYW5fZXR5cGUgfHwKKwkJCSAgICBjdXItPmhfZXh0LnZsYW5f dGNpICE9M0QgZnMtPmhfZXh0LnZsYW5fdGNpIHx8CisJCQkgICAgY3VyLT5tX2V4dC52bGFuX3Rj aSAhPTNEIGZzLT5tX2V4dC52bGFuX3RjaSB8fAorCQkJICAgIGN1ci0+aF9leHQuZGF0YVswXSAh PTNEIGZzLT5oX2V4dC5kYXRhWzBdKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjdXItPmZs b3dfdHlwZSAmIEZMT1dfTUFDX0VYVCkgeworCQkJaWYgKG1lbWNtcCgmY3VyLT5oX2V4dC5oX2Rl c3QsCisJCQkJICAgJmZzLT5oX2V4dC5oX2Rlc3QsIEVUSF9BTEVOKSB8fAorCQkJICAgIG1lbWNt cCgmY3VyLT5tX2V4dC5oX2Rlc3QsCisJCQkJICAgJmZzLT5tX2V4dC5oX2Rlc3QsIEVUSF9BTEVO KSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBm YWxzZTsKK30KKworLyogSWYgbm8gbmV0d29yayBmaWx0ZXIgZm91bmQsIHJldHVybiBvcGVuIGZp bHRlci4KKyAqIElmIG5vIG1vcmUgb3BlbiBmaWx0ZXJzIHJldHVybiBOVUxMCisgKi8KK3N0cnVj dCBiY21hc3BfbmV0X2ZpbHRlciAqYmNtYXNwX25ldGZpbHRfZ2V0X2luaXQoc3RydWN0IGJjbWFz cF9pbnRmICppbnRmLAorCQkJCQkJICBpbnQgbG9jLCBib29sIHdha2VfZmlsdGVyLAorCQkJCQkJ ICBib29sIGluaXQpCit7CisJc3RydWN0IGJjbWFzcF9uZXRfZmlsdGVyICpuZmlsdGVyID0zRCBO VUxMOworCXN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiA9M0QgaW50Zi0+cGFyZW50OworCWludCBp LCBvcGVuX2luZGV4ID0zRCAtMTsKKworCS8qIENoZWNrIHdoZXRoZXIgd2UgZXhjZWVkIHRoZSBm aWx0ZXIgdGFibGUgY2FwYWNpdHkgKi8KKwlpZiAobG9jICE9M0QgUlhfQ0xTX0xPQ19BTlkgJiYg bG9jID49M0QgTlVNX05FVF9GSUxURVJTKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwor CS8qIElmIHRoZSBmaWx0ZXIgbG9jYXRpb24gaXMgYnVzeSAoYWxyZWFkeSBjbGFpbWVkKSBhbmQg d2UgYXJlIGluaXRpYWxpemk9Cm5nCisJICogdGhlIGZpbHRlciAoaW5zZXJ0aW9uKSwgcmV0dXJu IGEgYnVzeSBlcnJvciBjb2RlLgorCSAqLworCWlmIChsb2MgIT0zRCBSWF9DTFNfTE9DX0FOWSAm JiBpbml0ICYmIHByaXYtPm5ldF9maWx0ZXJzW2xvY10uY2xhaW1lZCkKKwkJcmV0dXJuIEVSUl9Q VFIoLUVCVVNZKTsKKworCS8qIFdlIG5lZWQgdHdvIGZpbHRlcnMgZm9yIHdha2UtdXAsIHNvIHdl IGNhbm5vdCB1c2UgYW4gb2RkIGZpbHRlciAqLworCWlmICh3YWtlX2ZpbHRlciAmJiBsb2MgIT0z RCBSWF9DTFNfTE9DX0FOWSAmJiAobG9jICUgMikpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwp OworCisJLyogSW5pdGlhbGl6ZSB0aGUgbG9vcCBpbmRleCBiYXNlZCBvbiB0aGUgZGVzaXJlZCBs b2NhdGlvbiBvciBmcm9tIDAgKi8KKwlpID0zRCBsb2MgPTNEPTNEIFJYX0NMU19MT0NfQU5ZID8g MCA6IGxvYzsKKworCWZvciAoIDsgaSA8IE5VTV9ORVRfRklMVEVSUzsgaSsrKSB7CisJCS8qIEZv dW5kIG1hdGNoaW5nIG5ldHdvcmsgZmlsdGVyICovCisJCWlmICghaW5pdCAmJgorCQkgICAgcHJp di0+bmV0X2ZpbHRlcnNbaV0uY2xhaW1lZCAmJgorCQkgICAgcHJpdi0+bmV0X2ZpbHRlcnNbaV0u aHdfaW5kZXggPTNEPTNEIGkgJiYKKwkJICAgIHByaXYtPm5ldF9maWx0ZXJzW2ldLnBvcnQgPTNE PTNEIGludGYtPnBvcnQpCisJCQlyZXR1cm4gJnByaXYtPm5ldF9maWx0ZXJzW2ldOworCisJCS8q IElmIHdlIGRvbid0IG5lZWQgYSBuZXcgZmlsdGVyIG9yIG5ldyBmaWx0ZXIgYWxyZWFkeSBmb3Vu ZCAqLworCQlpZiAoIWluaXQgfHwgb3Blbl9pbmRleCA+PTNEIDApCisJCQljb250aW51ZTsKKwor CQkvKiBXYWtlIGZpbHRlciBjb25zbGlkYXRlcyB0d28gZmlsdGVycyB0byBjb3ZlciBtb3JlIGJ5 dGVzCisJCSAqIFdha2UgZmlsdGVyIGlzIG9wZW4gaWYuLi4KKwkJICogMS4gSXQgaXMgYW4gZXZl biBmaWx0ZXIKKwkJICogMi4gVGhlIGN1cnJlbnQgYW5kIG5leHQgZmlsdGVyIGlzIG5vdCBjbGFp bWVkCisJCSAqLworCQlpZiAod2FrZV9maWx0ZXIgJiYgIShpICUgMikgJiYgIXByaXYtPm5ldF9m aWx0ZXJzW2ldLmNsYWltZWQgJiYKKwkJICAgICFwcml2LT5uZXRfZmlsdGVyc1tpICsgMV0uY2xh aW1lZCkKKwkJCW9wZW5faW5kZXggPTNEIGk7CisJCWVsc2UgaWYgKCFwcml2LT5uZXRfZmlsdGVy c1tpXS5jbGFpbWVkKQorCQkJb3Blbl9pbmRleCA9M0QgaTsKKwl9CisKKwlpZiAob3Blbl9pbmRl eCA+PTNEIDApIHsKKwkJbmZpbHRlciA9M0QgJnByaXYtPm5ldF9maWx0ZXJzW29wZW5faW5kZXhd OworCQluZmlsdGVyLT5jbGFpbWVkID0zRCB0cnVlOworCQluZmlsdGVyLT5wb3J0ID0zRCBpbnRm LT5wb3J0OworCQluZmlsdGVyLT5od19pbmRleCA9M0Qgb3Blbl9pbmRleDsKKwl9CisKKwlpZiAo d2FrZV9maWx0ZXIgJiYgb3Blbl9pbmRleCA+PTNEIDApIHsKKwkJLyogQ2xhaW0gbmV4dCBmaWx0 ZXIgKi8KKwkJcHJpdi0+bmV0X2ZpbHRlcnNbb3Blbl9pbmRleCArIDFdLmNsYWltZWQgPTNEIHRy dWU7CisJCXByaXYtPm5ldF9maWx0ZXJzW29wZW5faW5kZXggKyAxXS53YWtlX2ZpbHRlciA9M0Qg dHJ1ZTsKKwkJbmZpbHRlci0+d2FrZV9maWx0ZXIgPTNEIHRydWU7CisJfQorCisJcmV0dXJuIG5m aWx0ZXIgPyBuZmlsdGVyIDogRVJSX1BUUigtRUlOVkFMKTsKK30KKwordm9pZCBiY21hc3BfbmV0 ZmlsdF9yZWxlYXNlKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwKKwkJCSAgICBzdHJ1Y3QgYmNt YXNwX25ldF9maWx0ZXIgKm5maWx0KQoreworCXN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiA9M0Qg aW50Zi0+cGFyZW50OworCisJaWYgKG5maWx0LT53YWtlX2ZpbHRlcikgeworCQltZW1zZXQoJnBy aXYtPm5ldF9maWx0ZXJzW25maWx0LT5od19pbmRleCArIDFdLCAwLAorCQkgICAgICAgc2l6ZW9m KHN0cnVjdCBiY21hc3BfbmV0X2ZpbHRlcikpOworCX0KKworCW1lbXNldChuZmlsdCwgMCwgc2l6 ZW9mKHN0cnVjdCBiY21hc3BfbmV0X2ZpbHRlcikpOworfQorCiBzdGF0aWMgdm9pZCBiY21hc3Bf YWRkcl90b191aW50KHVuc2lnbmVkIGNoYXIgKmFkZHIsIHUzMiAqaGlnaCwgdTMyICpsb3cpCiB7 CiAJKmhpZ2ggPTNEICh1MzIpKGFkZHJbMF0gPDwgOCB8IGFkZHJbMV0pOwpAQCAtMzM0LDYgKzky NSw5IEBAIHN0YXRpYyB2b2lkIGJjbWFzcF9jb3JlX2luaXRfZmlsdGVycyhzdHJ1Y3QgYmNtYXNw X3ByaXY9CiAqcHJpdikKIAkJcHJpdi0+bWRhX2ZpbHRlcnNbaV0uZW4gPTNEIDA7CiAJfQo9MjAK Kwlmb3IgKGkgPTNEIDA7IGkgPCBOVU1fTkVUX0ZJTFRFUlM7IGkrKykKKwkJcnhfZmlsdGVyX2Nv cmVfd2wocHJpdiwgMHgwLCBBU1BfUlhfRklMVEVSX05FVF9DRkcoaSkpOworCiAJLyogVG9wIGxl dmVsIGZpbHRlciBlbmFibGUgYml0IHNob3VsZCBiZSBlbmFibGVkIGF0IGFsbCB0aW1lcywgc2V0 CiAJICogR0VOX1dBS0VfQ0xFQVIgdG8gY2xlYXIgdGhlIG5ldHdvcmsgZmlsdGVyIHdha2UtdXAg d2hpY2ggd291bGQKIAkgKiBvdGhlcndpc2UgYmUgc3RpY2t5CkBAIC02NTcsNiArMTI1MSw3IEBA IHN0YXRpYyBpbnQgYmNtYXNwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJ c3Bpbl9sb2NrX2luaXQoJnByaXYtPm1kYV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+ Y2xrX2xvY2spOwogCW11dGV4X2luaXQoJnByaXYtPndvbF9sb2NrKTsKKwltdXRleF9pbml0KCZw cml2LT5uZXRfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmludGZzKTsKPTIwCiAJcGRh dGEgPTNEIGRldmljZV9nZXRfbWF0Y2hfZGF0YSgmcGRldi0+ZGV2KTsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmggYi9kcml2ZXJzL25ldC9l dGhlPQpybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmgKaW5kZXggMmNkZjIyNzMyZjRjLi5mYmJk ZTA0YTBlYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIv YmNtYXNwLmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3Au aApAQCAtMTA2LDYgKzEwNiwxNCBAQAogI2RlZmluZSAgIEFTUF9SWF9GSUxURVJfTkVUX09GRlNF VF9MM18xKHZhbCkJKCh2YWwpIDw8IDE2KQogI2RlZmluZSAgIEFTUF9SWF9GSUxURVJfTkVUX09G RlNFVF9MNCh2YWwpCSgodmFsKSA8PCAyNCkKPTIwCitlbnVtIGFzcF9yeF9uZXRfZmlsdGVyX2Js b2NrIHsKKwlBU1BfUlhfRklMVEVSX05FVF9MMiA9M0QgMCwKKwlBU1BfUlhfRklMVEVSX05FVF9M M18wLAorCUFTUF9SWF9GSUxURVJfTkVUX0wzXzEsCisJQVNQX1JYX0ZJTFRFUl9ORVRfTDQsCisJ QVNQX1JYX0ZJTFRFUl9ORVRfQkxPQ0tfTUFYCit9OworCiAjZGVmaW5lIEFTUF9FRFBLVF9PRkZT RVQJCQkweDljMDAwCiAjZGVmaW5lICBBU1BfRURQS1RfRU5BQkxFCQkJMHg0CiAjZGVmaW5lICAg QVNQX0VEUEtUX0VOQUJMRV9FTgkJCUJJVCgwKQpAQCAtMzA5LDYgKzMxNywxNyBAQCBzdHJ1Y3Qg YmNtYXNwX2ludGYgewogCXVuc2lnbmVkIGludAkJCXdvbF9pcnFfZW5hYmxlZDoxOwogfTsKPTIw CisjZGVmaW5lIE5VTV9ORVRfRklMVEVSUwkJCQkzMgorc3RydWN0IGJjbWFzcF9uZXRfZmlsdGVy IHsKKwlzdHJ1Y3QgZXRodG9vbF9yeF9mbG93X3NwZWMJZnM7CisKKwlib29sCQkJCWNsYWltZWQ7 CisJYm9vbAkJCQl3YWtlX2ZpbHRlcjsKKworCWludAkJCQlwb3J0OworCXVuc2lnbmVkIGludAkJ CWh3X2luZGV4OworfTsKKwogI2RlZmluZSBOVU1fTURBX0ZJTFRFUlMJCQkJMzIKIHN0cnVjdCBi Y21hc3BfbWRhX2ZpbHRlciB7CiAJLyogQ3VycmVudCBvd25lciBvZiB0aGlzIGZpbHRlciAqLwpA QCAtMzYxLDYgKzM4MCwxMSBAQCBzdHJ1Y3QgYmNtYXNwX3ByaXYgewo9MjAKIAkvKiBQcm90ZWN0 cyBhY2Nlc3NlcyB0byBBU1BfQ1RSTF9DTE9DS19DVFJMICovCiAJc3BpbmxvY2tfdAkJCWNsa19s b2NrOworCisJc3RydWN0IGJjbWFzcF9uZXRfZmlsdGVyCW5ldF9maWx0ZXJzW05VTV9ORVRfRklM VEVSU107CisKKwkvKiBOZXR3b3JrIGZpbHRlciBsb2NrICovCisJc3RydWN0IG11dGV4CQkJbmV0 X2xvY2s7CiB9Owo9MjAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBiY21hc3BfaW50Zl9y eF9kZXNjX3JlYWQoc3RydWN0IGJjbWFzcF9pbnRmICppPQpudGYpCkBAIC01MTgsNCArNTQyLDIw IEBAIHZvaWQgYmNtYXNwX2Rpc2FibGVfYWxsX2ZpbHRlcnMoc3RydWN0IGJjbWFzcF9pbnRmICpp bj0KdGYpOwo9MjAKIHZvaWQgYmNtYXNwX2NvcmVfY2xvY2tfc2V0X2ludGYoc3RydWN0IGJjbWFz cF9pbnRmICppbnRmLCBib29sIGVuKTsKPTIwCitzdHJ1Y3QgYmNtYXNwX25ldF9maWx0ZXIgKmJj bWFzcF9uZXRmaWx0X2dldF9pbml0KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwKKwkJCQkJCSAg aW50IGxvYywgYm9vbCB3YWtlX2ZpbHRlciwKKwkJCQkJCSAgYm9vbCBpbml0KTsKKworYm9vbCBi Y21hc3BfbmV0ZmlsdF9jaGVja19kdXAoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLAorCQkJICAg ICAgc3RydWN0IGV0aHRvb2xfcnhfZmxvd19zcGVjICpmcyk7CisKK3ZvaWQgYmNtYXNwX25ldGZp bHRfcmVsZWFzZShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsCisJCQkgICAgc3RydWN0IGJjbWFz cF9uZXRfZmlsdGVyICpuZmlsdCk7CisKK2ludCBiY21hc3BfbmV0ZmlsdF9nZXRfYWN0aXZlKHN0 cnVjdCBiY21hc3BfaW50ZiAqaW50Zik7CisKK3ZvaWQgYmNtYXNwX25ldGZpbHRfZ2V0X2FsbF9h Y3RpdmUoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCB1MzIgKnJ1bGVfbG9jPQpzLAorCQkJCSAg IHUzMiAqcnVsZV9jbnQpOworCit2b2lkIGJjbWFzcF9uZXRmaWx0X3N1c3BlbmQoc3RydWN0IGJj bWFzcF9pbnRmICppbnRmKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJu ZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfZXRodG9vbC5jIGIvZHJpdmVycy89Cm5ldC9ldGhlcm5l dC9icm9hZGNvbS9hc3AyL2JjbWFzcF9ldGh0b29sLmMKaW5kZXggYWUyNGExZjc0ZDQ5Li5lZGRk MWM0M2YwMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIv YmNtYXNwX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3Ay L2JjbWFzcF9ldGh0b29sLmMKQEAgLTMwLDcgKzMwLDcgQEAgc3RhdGljIHZvaWQgYmNtYXNwX3Nl dF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1PQozMiBsZXZlbCkKIAlpbnRmLT5t c2dfZW5hYmxlID0zRCBsZXZlbDsKIH0KPTIwCi0jZGVmaW5lIEJDTUFTUF9TVVBQT1JURURfV0FL RSAgIChXQUtFX01BR0lDIHwgV0FLRV9NQUdJQ1NFQ1VSRSkKKyNkZWZpbmUgQkNNQVNQX1NVUFBP UlRFRF9XQUtFICAgKFdBS0VfTUFHSUMgfCBXQUtFX01BR0lDU0VDVVJFIHwgV0FLRV9GSUxUPQpF UikKIHN0YXRpYyB2b2lkIGJjbWFzcF9nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0 cnVjdCBldGh0b29sX3dvbGluZm8gPQoqd29sKQogewogCXN0cnVjdCBiY21hc3BfaW50ZiAqaW50 ZiA9M0QgbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTY0LDYgKzY0LDEzMyBAQCBzdGF0aWMgaW50IGJj bWFzcF9zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjPQp0IGV0aHRvb2xfd29s aW5mbyAqd29sKQogCXJldHVybiAwOwogfQo9MjAKK3N0YXRpYyBpbnQgYmNtYXNwX2Zsb3dfaW5z ZXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3J4bmZjPQogKmNtZCkK K3sKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYgPTNEIG5ldGRldl9wcml2KGRldik7CisJc3Ry dWN0IGJjbWFzcF9uZXRfZmlsdGVyICpuZmlsdGVyOworCXUzMiBsb2MgPTNEIGNtZC0+ZnMubG9j YXRpb247CisJYm9vbCB3YWtlID0zRCBmYWxzZTsKKworCWlmIChjbWQtPmZzLnJpbmdfY29va2ll ID0zRD0zRCBSWF9DTFNfRkxPV19XQUtFKQorCQl3YWtlID0zRCB0cnVlOworCisJLyogQ3VycmVu dGx5IG9ubHkgc3VwcG9ydHMgV0FLRSBmaWx0ZXJzICovCisJaWYgKCF3YWtlKQorCQlyZXR1cm4g LUVPUE5PVFNVUFA7CisKKwlzd2l0Y2ggKGNtZC0+ZnMuZmxvd190eXBlICYgfihGTE9XX0VYVCB8 IEZMT1dfTUFDX0VYVCkpIHsKKwljYXNlIEVUSEVSX0ZMT1c6CisJY2FzZSBJUF9VU0VSX0ZMT1c6 CisJY2FzZSBUQ1BfVjRfRkxPVzoKKwljYXNlIFVEUF9WNF9GTE9XOgorCWNhc2UgVENQX1Y2X0ZM T1c6CisJY2FzZSBVRFBfVjZfRkxPVzoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1F T1BOT1RTVVBQOworCX0KKworCS8qIENoZWNrIGlmIGZpbHRlciBhbHJlYWR5IGV4aXN0cyAqLwor CWlmIChiY21hc3BfbmV0ZmlsdF9jaGVja19kdXAoaW50ZiwgJmNtZC0+ZnMpKQorCQlyZXR1cm4g LUVJTlZBTDsKKworCW5maWx0ZXIgPTNEIGJjbWFzcF9uZXRmaWx0X2dldF9pbml0KGludGYsIGxv Yywgd2FrZSwgdHJ1ZSk7CisJaWYgKElTX0VSUihuZmlsdGVyKSkKKwkJcmV0dXJuIFBUUl9FUlIo bmZpbHRlcik7CisKKwkvKiBSZXR1cm4gdGhlIGxvY2F0aW9uIHdoZXJlIHdlIGRpZCBpbnNlcnQg dGhlIGZpbHRlciAqLworCWNtZC0+ZnMubG9jYXRpb24gPTNEIG5maWx0ZXItPmh3X2luZGV4Owor CW1lbWNweSgmbmZpbHRlci0+ZnMsICZjbWQtPmZzLCBzaXplb2Yoc3RydWN0IGV0aHRvb2xfcnhf Zmxvd19zcGVjKSk7CisKKwkvKiBTaW5jZSB3ZSBvbmx5IHN1cHBvcnQgd2FrZSBmaWx0ZXJzLCBk ZWZlciByZWdpc3RlciBwcm9ncmFtbWluZyB0aWxsCisJICogc3VzcGVuZCB0aW1lLgorCSAqLwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJjbWFzcF9mbG93X2RlbGV0ZShzdHJ1Y3QgbmV0 X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYz0KICpjbWQpCit7CisJc3RydWN0IGJj bWFzcF9pbnRmICppbnRmID0zRCBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBiY21hc3BfbmV0 X2ZpbHRlciAqbmZpbHRlcjsKKworCW5maWx0ZXIgPTNEIGJjbWFzcF9uZXRmaWx0X2dldF9pbml0 KGludGYsIGNtZC0+ZnMubG9jYXRpb24sIGZhbHNlLCBmYWxzZSk7CisJaWYgKElTX0VSUihuZmls dGVyKSkKKwkJcmV0dXJuIFBUUl9FUlIobmZpbHRlcik7CisKKwliY21hc3BfbmV0ZmlsdF9yZWxl YXNlKGludGYsIG5maWx0ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmNtYXNw X2Zsb3dfZ2V0KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50Ziwgc3RydWN0IGV0aHRvb2xfcnhuZmMg PQoqY21kKQoreworCXN0cnVjdCBiY21hc3BfbmV0X2ZpbHRlciAqbmZpbHRlcjsKKworCW5maWx0 ZXIgPTNEIGJjbWFzcF9uZXRmaWx0X2dldF9pbml0KGludGYsIGNtZC0+ZnMubG9jYXRpb24sIGZh bHNlLCBmYWxzZSk7CisJaWYgKElTX0VSUihuZmlsdGVyKSkKKwkJcmV0dXJuIFBUUl9FUlIobmZp bHRlcik7CisKKwltZW1jcHkoJmNtZC0+ZnMsICZuZmlsdGVyLT5mcywgc2l6ZW9mKG5maWx0ZXIt PmZzKSk7CisKKwljbWQtPmRhdGEgPTNEIE5VTV9ORVRfRklMVEVSUzsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IGJjbWFzcF9zZXRfcnhuZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwg c3RydWN0IGV0aHRvb2xfcnhuZmMgKj0KY21kKQoreworCXN0cnVjdCBiY21hc3BfaW50ZiAqaW50 ZiA9M0QgbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgcmV0ID0zRCAtRU9QTk9UU1VQUDsKKworCW11 dGV4X2xvY2soJmludGYtPnBhcmVudC0+bmV0X2xvY2spOworCisJc3dpdGNoIChjbWQtPmNtZCkg eworCWNhc2UgRVRIVE9PTF9TUlhDTFNSTElOUzoKKwkJcmV0ID0zRCBiY21hc3BfZmxvd19pbnNl cnQoZGV2LCBjbWQpOworCQlicmVhazsKKwljYXNlIEVUSFRPT0xfU1JYQ0xTUkxERUw6CisJCXJl dCA9M0QgYmNtYXNwX2Zsb3dfZGVsZXRlKGRldiwgY21kKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoK KwkJYnJlYWs7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZpbnRmLT5wYXJlbnQtPm5ldF9sb2NrKTsK KworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYmNtYXNwX2dldF9yeG5mYyhzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqPQpjbWQsCisJCQkgICAgdTMy ICpydWxlX2xvY3MpCit7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmID0zRCBuZXRkZXZfcHJp dihkZXYpOworCWludCBlcnIgPTNEIDA7CisKKwltdXRleF9sb2NrKCZpbnRmLT5wYXJlbnQtPm5l dF9sb2NrKTsKKworCXN3aXRjaCAoY21kLT5jbWQpIHsKKwljYXNlIEVUSFRPT0xfR1JYQ0xTUkxD TlQ6CisJCWNtZC0+cnVsZV9jbnQgPTNEIGJjbWFzcF9uZXRmaWx0X2dldF9hY3RpdmUoaW50Zik7 CisJCS8qIFdlIHN1cHBvcnQgc3BlY2lmeWluZyBydWxlIGxvY2F0aW9ucyAqLworCQljbWQtPmRh dGEgfD0zRCBSWF9DTFNfTE9DX1NQRUNJQUw7CisJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9HUlhD TFNSVUxFOgorCQllcnIgPTNEIGJjbWFzcF9mbG93X2dldChpbnRmLCBjbWQpOworCQlicmVhazsK KwljYXNlIEVUSFRPT0xfR1JYQ0xTUkxBTEw6CisJCWJjbWFzcF9uZXRmaWx0X2dldF9hbGxfYWN0 aXZlKGludGYsIHJ1bGVfbG9jcywgJmNtZC0+cnVsZV9jbnQpOworCQljbWQtPmRhdGEgPTNEIE5V TV9ORVRfRklMVEVSUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyID0zRCAtRU9QTk9UU1VQ UDsKKwkJYnJlYWs7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZpbnRmLT5wYXJlbnQtPm5ldF9sb2Nr KTsKKworCXJldHVybiBlcnI7Cit9CisKIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBiY21hc3Bf ZXRodG9vbF9vcHMgPTNEIHsKIAkuZ2V0X2RydmluZm8JCT0zRCBiY21hc3BfZ2V0X2RydmluZm8s CiAJLmdldF9saW5rCQk9M0QgZXRodG9vbF9vcF9nZXRfbGluaywKQEAgLTczLDQgKzIwMCw2IEBA IGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBiY21hc3BfZXRodG9vbF9vcHMgPTNEIHsKIAkuc2V0 X21zZ2xldmVsCQk9M0QgYmNtYXNwX3NldF9tc2dsZXZlbCwKIAkuZ2V0X3dvbAkJPTNEIGJjbWFz cF9nZXRfd29sLAogCS5zZXRfd29sCQk9M0QgYmNtYXNwX3NldF93b2wsCisJLmdldF9yeG5mYwkJ PTNEIGJjbWFzcF9nZXRfcnhuZmMsCisJLnNldF9yeG5mYwkJPTNEIGJjbWFzcF9zZXRfcnhuZmMs CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21h c3BfaW50Zi5jIGIvZHJpdmVycy9uZXQ9Ci9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9p bnRmLmMKaW5kZXggMjFhOGQxNWE0N2Q4Li5hZDg0MjIzMzRmMzggMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2ludGYuYworKysgYi9kcml2ZXJz L25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmMKQEAgLTEzMDAsNiArMTMw MCw5IEBAIHN0YXRpYyB2b2lkIGJjbWFzcF9zdXNwZW5kX3RvX3dvbChzdHJ1Y3QgYmNtYXNwX2lu dGYgPQoqaW50ZikKIAl9CiAJdW1hY193bChpbnRmLCByZWcsIFVNQ19NUERfQ1RSTCk7Cj0yMAor CWlmIChpbnRmLT53b2xvcHRzICYgV0FLRV9GSUxURVIpCisJCWJjbWFzcF9uZXRmaWx0X3N1c3Bl bmQoaW50Zik7CisKIAkvKiBVbmlNQUMgcmVjZWl2ZSBuZWVkcyB0byBiZSB0dXJuZWQgb24gKi8K IAl1bWFjX2VuYWJsZV9zZXQoaW50ZiwgVU1DX0NNRF9SWF9FTiwgMSk7Cj0yMAotLT0yMAoyLjcu NAo= --000000000000a72096060065b9d7 Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature 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 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 YIZIAWUDBAIBBQCggdQwLwYJKoZIhvcNAQkEMSIEIGYqAw1JqwD9/K7srUo/ZCZ87HNi6gUgKOiy xRYSBbyWMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTIzMDcxMzIy MTkyNlowaQYJKoZIhvcNAQkPMVwwWjALBglghkgBZQMEASowCwYJYIZIAWUDBAEWMAsGCWCGSAFl AwQBAjAKBggqhkiG9w0DBzALBgkqhkiG9w0BAQowCwYJKoZIhvcNAQEHMAsGCWCGSAFlAwQCATAN BgkqhkiG9w0BAQEFAASCAQAyWj2Z5HJqggnnwNIJNc53iAJXrgWHxq1D+bdbH8k0fo6hqWs0mNr/ +Iu1lRsCZie8fkXqsnane4HxUCzsHoc8gnP+fumAoqt5jYtkNWHlENFV7N9bY+PkQBK65GgFECiw E42zyPK14kKxoBhE0J/ZV/f6Y3ZqBPULLJ2eZN9DOoT63kxvbI844LawcDuk/nnXMm/GuVlGDvd8 svL9+k5H1AHifpWMvfJTniggqF7/AYYr+rMDKIC62Ncmrn8YK1Vmoysl/jWRHllPgDFuyOyf0REJ gCm2YGzI6YlyM0aEGQIvFPhPP6rECoWwzWKw65Kj37qooyWqgd6QOxXu7VV6 --000000000000a72096060065b9d7--