From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.7 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EBE33C433DB for ; Thu, 21 Jan 2021 21:59:49 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id B520D23A5C for ; Thu, 21 Jan 2021 21:59:49 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B520D23A5C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id D96B76E963; Thu, 21 Jan 2021 21:59:48 +0000 (UTC) Received: from us-smtp-delivery-44.mimecast.com (us-smtp-delivery-44.mimecast.com [207.211.30.44]) by gabe.freedesktop.org (Postfix) with ESMTPS id B1ABE6E963 for ; Thu, 21 Jan 2021 21:59:44 +0000 (UTC) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-517-EgYYRbMQN8aNsdUYhC_2Dw-1; Thu, 21 Jan 2021 16:59:38 -0500 X-MC-Unique: EgYYRbMQN8aNsdUYhC_2Dw-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 506CA80DDEC; Thu, 21 Jan 2021 21:59:34 +0000 (UTC) Received: from dreadlord-bne-redhat-com.bne.redhat.com (unknown [10.64.32.209]) by smtp.corp.redhat.com (Postfix) with ESMTP id 93F7F19CB1; Thu, 21 Jan 2021 21:59:32 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Fri, 22 Jan 2021 07:59:16 +1000 Message-Id: <20210121215924.18964-4-airlied@gmail.com> In-Reply-To: <20210121215924.18964-1-airlied@gmail.com> References: <20210121215924.18964-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: gmail.com Subject: [Intel-gfx] [PATCH 03/10] drm/i915: migrate skl planes code new file (v4) X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jani Nikula , Dave Airlie , Dan Carpenter Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClJld29yayB0aGUgcGxhbmUg aW5pdCBjYWxscyB0byBkbyB0aGUgZ2VuIHRlc3Qgb25lIGxldmVsIGhpZ2hlci4KClJld29yayBz b21lIG9mIHRoZSBwbGFuZSBoZWxwZXJzIHNvIHRoZXkgY2FuIGxpdmUgaW4gbmV3IGZpbGUsCnRo ZXJlIGlzIHN0aWxsIHNvbWUgc2NvcGUgdG8gY2xlYW4gdXAgdGhlIHBsYW5lL2ZiIGludGVyYWN0 aW9ucwpsYXRlci4KCnYyOiBkcm9wIGF0b21pYyBjb2RlIGJhY2ssIHJlbmFtZSBmaWxlIHRvIFZp bGxlIHN1Z2dlc3Rpb25zLAphZGQgaGVhZGVyIGZpbGUuCnYzOiBtb3ZlIHNjYWxlciBiaXRzIGJh Y2sKdjQ6IGRyb3Agd3JvbmcgbmV3IGluY2x1ZGVzIChWaWxsZSkKClNpZ25lZC1vZmYtYnk6IERh dmUgQWlybGllIDxhaXJsaWVkQHJlZGhhdC5jb20+CltKYW5pOiBmaXhlZCB1cCBzcGFyc2Ugd2Fy bmluZ3MuXQpTaWduZWQtb2ZmLWJ5OiBKYW5pIE5pa3VsYSA8amFuaS5uaWt1bGFAaW50ZWwuY29t PgpSZXBvcnRlZC1ieToga2VybmVsIHRlc3Qgcm9ib3QgPGxrcEBpbnRlbC5jb20+ClJlcG9ydGVk LWJ5OiBEYW4gQ2FycGVudGVyIDxkYW4uY2FycGVudGVyQG9yYWNsZS5jb20+Ci0tLQogZHJpdmVy cy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgICAgICAgIHwgICAgMyArLQogZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pOXh4X3BsYW5lLmMgICAgIHwgICAgNCAtCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ljbF9kc2kuYyAgICAgICAgfCAgICAxICsKIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3J0Yy5jICAgICB8ICAgMTMgKy0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGRpLmMgICAgICB8ICAgIDEgKwogZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMgIHwgIDk1MyArLS0tLS0tCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaCAgfCAgIDI3ICstCiAuLi4v ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmggICAgfCAgIDIxICsKIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHNyLmMgICAgICB8ICAgIDEgKwogZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUuYyAgIHwgMTM2NyArLS0tLS0tLS0t CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5oICAgfCAgICA2ICst CiAuLi4vZHJtL2k5MTUvZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5lLmMgICAgfCAyMjkyICsr KysrKysrKysrKysrKysrCiAuLi4vZHJtL2k5MTUvZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5l LmggICAgfCAgIDMzICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgICAgICAgICAg ICAgICB8ICAgIDEgKwogMTQgZmlsZXMgY2hhbmdlZCwgMjQwNiBpbnNlcnRpb25zKCspLCAyMzE3 IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvc2tsX3VuaXZlcnNhbF9wbGFuZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5lLmgKCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2Vm aWxlCmluZGV4IDllMTkzOTVjOGM4ZS4uYzExOGZkNTE2Y2RjIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZQpAQCAtMjIzLDcgKzIyMyw4IEBAIGk5MTUteSArPSBcCiAJZGlzcGxheS9pbnRlbF9zcHJpdGUu byBcCiAJZGlzcGxheS9pbnRlbF90Yy5vIFwKIAlkaXNwbGF5L2ludGVsX3ZnYS5vIFwKLQlkaXNw bGF5L2k5eHhfcGxhbmUubworCWRpc3BsYXkvaTl4eF9wbGFuZS5vIFwKKwlkaXNwbGF5L3NrbF91 bml2ZXJzYWxfcGxhbmUubwogaTkxNS0kKENPTkZJR19BQ1BJKSArPSBcCiAJZGlzcGxheS9pbnRl bF9hY3BpLm8gXAogCWRpc3BsYXkvaW50ZWxfb3ByZWdpb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pOXh4X3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2k5eHhfcGxhbmUuYwppbmRleCBiNzg5ODVjODU1YTUuLjZjNTY4MDc5ZjQ5MiAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pOXh4X3BsYW5lLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pOXh4X3BsYW5lLmMKQEAgLTU3OCwxMCAr NTc4LDYgQEAgaW50ZWxfcHJpbWFyeV9wbGFuZV9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LCBlbnVtIHBpcGUgcGlwZSkKIAlpbnQgbnVtX2Zvcm1hdHM7CiAJaW50IHJl dCwgenBvczsKIAotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDkpCi0JCXJldHVybiBza2xf dW5pdmVyc2FsX3BsYW5lX2NyZWF0ZShkZXZfcHJpdiwgcGlwZSwKLQkJCQkJCSAgUExBTkVfUFJJ TUFSWSk7Ci0KIAlwbGFuZSA9IGludGVsX3BsYW5lX2FsbG9jKCk7CiAJaWYgKElTX0VSUihwbGFu ZSkpCiAJCXJldHVybiBwbGFuZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaWNsX2RzaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pY2xfZHNpLmMK aW5kZXggOWQyNDVhNjg5MzIzLi45ZWVlYzZmYWRlYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaWNsX2RzaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaWNsX2RzaS5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiaW50ZWxfZHNpLmgi CiAjaW5jbHVkZSAiaW50ZWxfcGFuZWwuaCIKICNpbmNsdWRlICJpbnRlbF92ZHNjLmgiCisjaW5j bHVkZSAic2tsX3VuaXZlcnNhbF9wbGFuZS5oIgogCiBzdGF0aWMgaW50IGhlYWRlcl9jcmVkaXRz X2F2YWlsYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkJICAgIGVu dW0gdHJhbnNjb2RlciBkc2lfdHJhbnMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50 ZWxfY3J0Yy5jCmluZGV4IDU3YjBhM2ViZTkwOC4uZWI0Nzg3MTJjMzgxIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2NydGMuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2NydGMuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1 ZGUgImludGVsX3BpcGVfY3JjLmgiCiAjaW5jbHVkZSAiaW50ZWxfc3ByaXRlLmgiCiAjaW5jbHVk ZSAiaTl4eF9wbGFuZS5oIgorI2luY2x1ZGUgInNrbF91bml2ZXJzYWxfcGxhbmUuaCIKIAogc3Rh dGljIHZvaWQgYXNzZXJ0X3ZibGFua19kaXNhYmxlZChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7 CkBAIC0yNDMsNyArMjQ0LDExIEBAIGludCBpbnRlbF9jcnRjX2luaXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBpcGUgcGlwZSkKIAljcnRjLT5waXBlID0gcGlwZTsK IAljcnRjLT5udW1fc2NhbGVycyA9IFJVTlRJTUVfSU5GTyhkZXZfcHJpdiktPm51bV9zY2FsZXJz W3BpcGVdOwogCi0JcHJpbWFyeSA9IGludGVsX3ByaW1hcnlfcGxhbmVfY3JlYXRlKGRldl9wcml2 LCBwaXBlKTsKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KQorCQlwcmltYXJ5ID0gc2ts X3VuaXZlcnNhbF9wbGFuZV9jcmVhdGUoZGV2X3ByaXYsIHBpcGUsCisJCQkJCQkgICAgIFBMQU5F X1BSSU1BUlkpOworCWVsc2UKKwkJcHJpbWFyeSA9IGludGVsX3ByaW1hcnlfcGxhbmVfY3JlYXRl KGRldl9wcml2LCBwaXBlKTsKIAlpZiAoSVNfRVJSKHByaW1hcnkpKSB7CiAJCXJldCA9IFBUUl9F UlIocHJpbWFyeSk7CiAJCWdvdG8gZmFpbDsKQEAgLTI1Myw3ICsyNTgsMTEgQEAgaW50IGludGVs X2NydGNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBw aXBlKQogCWZvcl9lYWNoX3Nwcml0ZShkZXZfcHJpdiwgcGlwZSwgc3ByaXRlKSB7CiAJCXN0cnVj dCBpbnRlbF9wbGFuZSAqcGxhbmU7CiAKLQkJcGxhbmUgPSBpbnRlbF9zcHJpdGVfcGxhbmVfY3Jl YXRlKGRldl9wcml2LCBwaXBlLCBzcHJpdGUpOworCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+ PSA5KQorCQkJcGxhbmUgPSBza2xfdW5pdmVyc2FsX3BsYW5lX2NyZWF0ZShkZXZfcHJpdiwgcGlw ZSwKKwkJCQkJCQkgICBQTEFORV9TUFJJVEUwICsgc3ByaXRlKTsKKwkJZWxzZQorCQkJcGxhbmUg PSBpbnRlbF9zcHJpdGVfcGxhbmVfY3JlYXRlKGRldl9wcml2LCBwaXBlLCBzcHJpdGUpOwogCQlp ZiAoSVNfRVJSKHBsYW5lKSkgewogCQkJcmV0ID0gUFRSX0VSUihwbGFuZSk7CiAJCQlnb3RvIGZh aWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RkaS5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kZGkuYwppbmRleCA1YmVkNmZh MWZmNTcuLmZhZTdjY2M1Zjk1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9kZGkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2RkaS5jCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAiaW50ZWxfc3ByaXRlLmgiCiAjaW5j bHVkZSAiaW50ZWxfdGMuaCIKICNpbmNsdWRlICJpbnRlbF92ZHNjLmgiCisjaW5jbHVkZSAic2ts X3VuaXZlcnNhbF9wbGFuZS5oIgogCiBzdGF0aWMgY29uc3QgdTggaW5kZXhfdG9fZHBfc2lnbmFs X2xldmVsc1tdID0gewogCVswXSA9IERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMCB8IERQ X1RSQUlOX1BSRV9FTVBIX0xFVkVMXzAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfZGlzcGxheS5jCmluZGV4IDMyZmY5ZDIwMWFlYi4uNmQyOTc4MTc5YWMwIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwpAQCAtOTAsNiArOTAs NyBAQAogI2luY2x1ZGUgImludGVsX3RjLmgiCiAjaW5jbHVkZSAiaW50ZWxfdmdhLmgiCiAjaW5j bHVkZSAiaTl4eF9wbGFuZS5oIgorI2luY2x1ZGUgInNrbF91bml2ZXJzYWxfcGxhbmUuaCIKIAog c3RhdGljIHZvaWQgaTl4eF9jcnRjX2Nsb2NrX2dldChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywK IAkJCQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpOwpAQCAtMTEyLDcgKzEx Myw2IEBAIHN0YXRpYyB2b2lkIHZsdl9wcmVwYXJlX3BsbChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0 YywKIAkJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpOwog c3RhdGljIHZvaWQgY2h2X3ByZXBhcmVfcGxsKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAogCQkJ ICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZyk7Ci1zdGF0aWMg dm9pZCBza2xfcGZpdF9lbmFibGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNf c3RhdGUpOwogc3RhdGljIHZvaWQgaWxrX3BmaXRfZW5hYmxlKGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKIHN0YXRpYyB2b2lkIGludGVsX21vZGVzZXRfc2V0dXBf aHdfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkJIHN0cnVjdCBkcm1fbW9kZXNl dF9hY3F1aXJlX2N0eCAqY3R4KTsKQEAgLTEwNzgsMjYgKzEwNzgsNiBAQCBzdGF0aWMgdW5zaWdu ZWQgaW50IGludGVsX3RpbGVfc2l6ZShjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCiAJcmV0dXJuIElTX0dFTihkZXZfcHJpdiwgMikgPyAyMDQ4IDogNDA5NjsKIH0KIAot c3RhdGljIGJvb2wgaXNfY2NzX3BsYW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi LCBpbnQgcGxhbmUpCi17Ci0JaWYgKCFpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSkKLQkJ cmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIHBsYW5lID49IGZiLT5mb3JtYXQtPm51bV9wbGFuZXMg LyAyOwotfQotCi1zdGF0aWMgYm9vbCBpc19nZW4xMl9jY3NfbW9kaWZpZXIodTY0IG1vZGlmaWVy KQotewotCXJldHVybiBtb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9S Q19DQ1MgfHwKLQkgICAgICAgbW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VO MTJfTUNfQ0NTOwotCi19Ci0KLXN0YXRpYyBib29sIGlzX2dlbjEyX2Njc19wbGFuZShjb25zdCBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHBsYW5lKQotewotCXJldHVybiBpc19nZW4x Ml9jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSAmJiBpc19jY3NfcGxhbmUoZmIsIHBsYW5lKTsK LX0KLQogc3RhdGljIGJvb2wgaXNfYXV4X3BsYW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLCBpbnQgcGxhbmUpCiB7CiAJaWYgKGlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIp KQpAQCAtMTEwNiwzNSArMTA4Niw2IEBAIHN0YXRpYyBib29sIGlzX2F1eF9wbGFuZShjb25zdCBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHBsYW5lKQogCXJldHVybiBwbGFuZSA9PSAx OwogfQogCi1zdGF0aWMgaW50IG1haW5fdG9fY2NzX3BsYW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiLCBpbnQgbWFpbl9wbGFuZSkKLXsKLQlkcm1fV0FSTl9PTihmYi0+ZGV2LCAh aXNfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikgfHwKLQkJICAgIChtYWluX3BsYW5lICYmIG1h aW5fcGxhbmUgPj0gZmItPmZvcm1hdC0+bnVtX3BsYW5lcyAvIDIpKTsKLQotCXJldHVybiBmYi0+ Zm9ybWF0LT5udW1fcGxhbmVzIC8gMiArIG1haW5fcGxhbmU7Ci19Ci0KLXN0YXRpYyBpbnQgY2Nz X3RvX21haW5fcGxhbmUoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjY3Nf cGxhbmUpCi17Ci0JZHJtX1dBUk5fT04oZmItPmRldiwgIWlzX2Njc19tb2RpZmllcihmYi0+bW9k aWZpZXIpIHx8Ci0JCSAgICBjY3NfcGxhbmUgPCBmYi0+Zm9ybWF0LT5udW1fcGxhbmVzIC8gMik7 Ci0KLQlyZXR1cm4gY2NzX3BsYW5lIC0gZmItPmZvcm1hdC0+bnVtX3BsYW5lcyAvIDI7Ci19Ci0K LWludCBpbnRlbF9tYWluX3RvX2F1eF9wbGFuZShjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiwgaW50IG1haW5fcGxhbmUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUg PSB0b19pOTE1KGZiLT5kZXYpOwotCi0JaWYgKGlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIp KQotCQlyZXR1cm4gbWFpbl90b19jY3NfcGxhbmUoZmIsIG1haW5fcGxhbmUpOwotCWVsc2UgaWYg KElOVEVMX0dFTihpOTE1KSA8IDExICYmCi0JCSBpbnRlbF9mb3JtYXRfaW5mb19pc195dXZfc2Vt aXBsYW5hcihmYi0+Zm9ybWF0LCBmYi0+bW9kaWZpZXIpKQotCQlyZXR1cm4gMTsKLQllbHNlCi0J CXJldHVybiAwOwotfQotCiBib29sCiBpbnRlbF9mb3JtYXRfaW5mb19pc195dXZfc2VtaXBsYW5h cihjb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICppbmZvLAogCQkJCSAgICB1NjQgbW9kaWZp ZXIpCkBAIC0xMTUwLDcgKzExMDEsNyBAQCBzdGF0aWMgYm9vbCBpc19zZW1pcGxhbmFyX3V2X3Bs YW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAogCSAgICAgICBjb2xvcl9wbGFu ZSA9PSAxOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50Cit1bnNpZ25lZCBpbnQKIGludGVsX3Rp bGVfd2lkdGhfYnl0ZXMoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjb2xv cl9wbGFuZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KGZiLT5kZXYpOwpAQCAtMTIwMyw3ICsxMTU0LDcgQEAgaW50ZWxfdGlsZV93aWR0aF9ieXRlcyhj b25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNvbG9yX3BsYW5lKQogCX0KIH0K IAotc3RhdGljIHVuc2lnbmVkIGludAordW5zaWduZWQgaW50CiBpbnRlbF90aWxlX2hlaWdodChj b25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNvbG9yX3BsYW5lKQogewogCWlm IChpc19nZW4xMl9jY3NfcGxhbmUoZmIsIGNvbG9yX3BsYW5lKSkKQEAgLTEzMDMsOCArMTI1NCw4 IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfbGluZWFyX2FsaWdubWVudChjb25zdCBzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByCiAJCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5z aWduZWQgaW50IGludGVsX3N1cmZfYWxpZ25tZW50KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLAotCQkJCQkgaW50IGNvbG9yX3BsYW5lKQordW5zaWduZWQgaW50IGludGVsX3N1cmZf YWxpZ25tZW50KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJCSAgaW50IGNv bG9yX3BsYW5lKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUoZmItPmRldik7CiAKQEAgLTE1NzMsMTAgKzE1MjQsMTAgQEAgc3RhdGljIHUzMiBpbnRlbF9h ZGp1c3RfYWxpZ25lZF9vZmZzZXQoaW50ICp4LCBpbnQgKnksCiAgKiBBZGp1c3QgdGhlIHRpbGUg b2Zmc2V0IGJ5IG1vdmluZyB0aGUgZGlmZmVyZW5jZSBpbnRvCiAgKiB0aGUgeC95IG9mZnNldHMu CiAgKi8KLXN0YXRpYyB1MzIgaW50ZWxfcGxhbmVfYWRqdXN0X2FsaWduZWRfb2Zmc2V0KGludCAq eCwgaW50ICp5LAotCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqc3Rh dGUsCi0JCQkJCSAgICAgaW50IGNvbG9yX3BsYW5lLAotCQkJCQkgICAgIHUzMiBvbGRfb2Zmc2V0 LCB1MzIgbmV3X29mZnNldCkKK3UzMiBpbnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQo aW50ICp4LCBpbnQgKnksCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRl ICpzdGF0ZSwKKwkJCQkgICAgICBpbnQgY29sb3JfcGxhbmUsCisJCQkJICAgICAgdTMyIG9sZF9v ZmZzZXQsIHUzMiBuZXdfb2Zmc2V0KQogewogCXJldHVybiBpbnRlbF9hZGp1c3RfYWxpZ25lZF9v ZmZzZXQoeCwgeSwgc3RhdGUtPmh3LmZiLCBjb2xvcl9wbGFuZSwKIAkJCQkJICAgc3RhdGUtPmh3 LnJvdGF0aW9uLApAQCAtMTg1MCw3ICsxODAxLDcgQEAgYm9vbCBpc19jY3NfbW9kaWZpZXIodTY0 IG1vZGlmaWVyKQogCiBzdGF0aWMgaW50IGdlbjEyX2Njc19hdXhfc3RyaWRlKHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiLCBpbnQgY2NzX3BsYW5lKQogewotCXJldHVybiBESVZfUk9VTkRfVVAo ZmItPnBpdGNoZXNbY2NzX3RvX21haW5fcGxhbmUoZmIsIGNjc19wbGFuZSldLAorCXJldHVybiBE SVZfUk9VTkRfVVAoZmItPnBpdGNoZXNbc2tsX2Njc190b19tYWluX3BsYW5lKGZiLCBjY3NfcGxh bmUpXSwKIAkJCSAgICA1MTIpICogNjQ7CiB9CiAKQEAgLTIwMDgsNyArMTk1OSw3IEBAIHN0YXRp YyBib29sIGludGVsX3BsYW5lX25lZWRzX3JlbWFwKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9z dGF0ZSAqcGxhbmVfc3RhdGUpCiAJcmV0dXJuIHN0cmlkZSA+IG1heF9zdHJpZGU7CiB9CiAKLXN0 YXRpYyB2b2lkCit2b2lkCiBpbnRlbF9mYl9wbGFuZV9nZXRfc3Vic2FtcGxpbmcoaW50ICpoc3Vi LCBpbnQgKnZzdWIsCiAJCQkgICAgICAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIs CiAJCQkgICAgICAgaW50IGNvbG9yX3BsYW5lKQpAQCAtMjAzMyw3ICsxOTg0LDcgQEAgaW50ZWxf ZmJfcGxhbmVfZ2V0X3N1YnNhbXBsaW5nKGludCAqaHN1YiwgaW50ICp2c3ViLAogCQlyZXR1cm47 CiAJfQogCi0JbWFpbl9wbGFuZSA9IGNjc190b19tYWluX3BsYW5lKGZiLCBjb2xvcl9wbGFuZSk7 CisJbWFpbl9wbGFuZSA9IHNrbF9jY3NfdG9fbWFpbl9wbGFuZShmYiwgY29sb3JfcGxhbmUpOwog CSpoc3ViID0gZHJtX2Zvcm1hdF9pbmZvX2Jsb2NrX3dpZHRoKGZiLT5mb3JtYXQsIGNvbG9yX3Bs YW5lKSAvCiAJCWRybV9mb3JtYXRfaW5mb19ibG9ja193aWR0aChmYi0+Zm9ybWF0LCBtYWluX3Bs YW5lKTsKIApAQCAtMjA3Myw3ICsyMDI0LDcgQEAgaW50ZWxfZmJfY2hlY2tfY2NzX3h5KHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY2NzX3BsYW5lLCBpbnQgeCwgaW50IHkpCiAJY2Nz X3ggPSAoeCAqIGhzdWIpICUgdGlsZV93aWR0aDsKIAljY3NfeSA9ICh5ICogdnN1YikgJSB0aWxl X2hlaWdodDsKIAotCW1haW5fcGxhbmUgPSBjY3NfdG9fbWFpbl9wbGFuZShmYiwgY2NzX3BsYW5l KTsKKwltYWluX3BsYW5lID0gc2tsX2Njc190b19tYWluX3BsYW5lKGZiLCBjY3NfcGxhbmUpOwog CW1haW5feCA9IGludGVsX2ZiLT5ub3JtYWxbbWFpbl9wbGFuZV0ueCAlIHRpbGVfd2lkdGg7CiAJ bWFpbl95ID0gaW50ZWxfZmItPm5vcm1hbFttYWluX3BsYW5lXS55ICUgdGlsZV9oZWlnaHQ7CiAK QEAgLTIwOTksNyArMjA1MCw3IEBAIHN0YXRpYyB2b2lkCiBpbnRlbF9mYl9wbGFuZV9kaW1zKGlu dCAqdywgaW50ICpoLCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNvbG9yX3BsYW5l KQogewogCWludCBtYWluX3BsYW5lID0gaXNfY2NzX3BsYW5lKGZiLCBjb2xvcl9wbGFuZSkgPwot CQkJIGNjc190b19tYWluX3BsYW5lKGZiLCBjb2xvcl9wbGFuZSkgOiAwOworCQkJIHNrbF9jY3Nf dG9fbWFpbl9wbGFuZShmYiwgY29sb3JfcGxhbmUpIDogMDsKIAlpbnQgbWFpbl9oc3ViLCBtYWlu X3ZzdWI7CiAJaW50IGhzdWIsIHZzdWI7CiAKQEAgLTI0NzQsNzMgKzI0MjUsNiBAQCBzdGF0aWMg aW50IGk5eHhfZm9ybWF0X3RvX2ZvdXJjYyhpbnQgZm9ybWF0KQogCX0KIH0KIAotaW50IHNrbF9m b3JtYXRfdG9fZm91cmNjKGludCBmb3JtYXQsIGJvb2wgcmdiX29yZGVyLCBib29sIGFscGhhKQot ewotCXN3aXRjaCAoZm9ybWF0KSB7Ci0JY2FzZSBQTEFORV9DVExfRk9STUFUX1JHQl81NjU6Ci0J CXJldHVybiBEUk1fRk9STUFUX1JHQjU2NTsKLQljYXNlIFBMQU5FX0NUTF9GT1JNQVRfTlYxMjoK LQkJcmV0dXJuIERSTV9GT1JNQVRfTlYxMjsKLQljYXNlIFBMQU5FX0NUTF9GT1JNQVRfWFlVVjoK LQkJcmV0dXJuIERSTV9GT1JNQVRfWFlVVjg4ODg7Ci0JY2FzZSBQTEFORV9DVExfRk9STUFUX1Aw MTA6Ci0JCXJldHVybiBEUk1fRk9STUFUX1AwMTA7Ci0JY2FzZSBQTEFORV9DVExfRk9STUFUX1Aw MTI6Ci0JCXJldHVybiBEUk1fRk9STUFUX1AwMTI7Ci0JY2FzZSBQTEFORV9DVExfRk9STUFUX1Aw MTY6Ci0JCXJldHVybiBEUk1fRk9STUFUX1AwMTY7Ci0JY2FzZSBQTEFORV9DVExfRk9STUFUX1ky MTA6Ci0JCXJldHVybiBEUk1fRk9STUFUX1kyMTA7Ci0JY2FzZSBQTEFORV9DVExfRk9STUFUX1ky MTI6Ci0JCXJldHVybiBEUk1fRk9STUFUX1kyMTI7Ci0JY2FzZSBQTEFORV9DVExfRk9STUFUX1ky MTY6Ci0JCXJldHVybiBEUk1fRk9STUFUX1kyMTY7Ci0JY2FzZSBQTEFORV9DVExfRk9STUFUX1k0 MTA6Ci0JCXJldHVybiBEUk1fRk9STUFUX1hWWVUyMTAxMDEwOwotCWNhc2UgUExBTkVfQ1RMX0ZP Uk1BVF9ZNDEyOgotCQlyZXR1cm4gRFJNX0ZPUk1BVF9YVllVMTJfMTYxNjE2MTY7Ci0JY2FzZSBQ TEFORV9DVExfRk9STUFUX1k0MTY6Ci0JCXJldHVybiBEUk1fRk9STUFUX1hWWVUxNjE2MTYxNjsK LQlkZWZhdWx0OgotCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzg4ODg6Ci0JCWlmIChyZ2Jf b3JkZXIpIHsKLQkJCWlmIChhbHBoYSkKLQkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9BQkdSODg4ODsK LQkJCWVsc2UKLQkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9YQkdSODg4ODsKLQkJfSBlbHNlIHsKLQkJ CWlmIChhbHBoYSkKLQkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9BUkdCODg4ODsKLQkJCWVsc2UKLQkJ CQlyZXR1cm4gRFJNX0ZPUk1BVF9YUkdCODg4ODsKLQkJfQotCWNhc2UgUExBTkVfQ1RMX0ZPUk1B VF9YUkdCXzIxMDEwMTA6Ci0JCWlmIChyZ2Jfb3JkZXIpIHsKLQkJCWlmIChhbHBoYSkKLQkJCQly ZXR1cm4gRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMDsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gRFJNX0ZP Uk1BVF9YQkdSMjEwMTAxMDsKLQkJfSBlbHNlIHsKLQkJCWlmIChhbHBoYSkKLQkJCQlyZXR1cm4g RFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9Y UkdCMjEwMTAxMDsKLQkJfQotCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzE2MTYxNjE2RjoK LQkJaWYgKHJnYl9vcmRlcikgewotCQkJaWYgKGFscGhhKQotCQkJCXJldHVybiBEUk1fRk9STUFU X0FCR1IxNjE2MTYxNkY7Ci0JCQllbHNlCi0JCQkJcmV0dXJuIERSTV9GT1JNQVRfWEJHUjE2MTYx NjE2RjsKLQkJfSBlbHNlIHsKLQkJCWlmIChhbHBoYSkKLQkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9B UkdCMTYxNjE2MTZGOwotCQkJZWxzZQotCQkJCXJldHVybiBEUk1fRk9STUFUX1hSR0IxNjE2MTYx NkY7Ci0JCX0KLQl9Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgaTkxNV92bWEgKgogaW5pdGlhbF9wbGFu ZV92bWEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCiAJCSAgc3RydWN0IGludGVsX2lu aXRpYWxfcGxhbmVfY29uZmlnICpwbGFuZV9jb25maWcpCkBAIC0yODQ1LDM2MiArMjcyOSw2IEBA IGludGVsX2ZpbmRfaW5pdGlhbF9wbGFuZV9vYmooc3RydWN0IGludGVsX2NydGMgKmludGVsX2Ny dGMsCiAJCSAgJnRvX2ludGVsX2Zyb250YnVmZmVyKGZiKS0+Yml0cyk7CiB9CiAKLQotc3RhdGlj IGJvb2wKLXNrbF9jaGVja19tYWluX2Njc19jb29yZGluYXRlcyhzdHJ1Y3QgaW50ZWxfcGxhbmVf c3RhdGUgKnBsYW5lX3N0YXRlLAotCQkJICAgICAgIGludCBtYWluX3gsIGludCBtYWluX3ksIHUz MiBtYWluX29mZnNldCwKLQkJCSAgICAgICBpbnQgY2NzX3BsYW5lKQotewotCWNvbnN0IHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCWludCBhdXhfeCA9 IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLng7Ci0JaW50IGF1eF95ID0gcGxh bmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFuZV0ueTsKLQl1MzIgYXV4X29mZnNldCA9IHBs YW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLm9mZnNldDsKLQl1MzIgYWxpZ25tZW50 ID0gaW50ZWxfc3VyZl9hbGlnbm1lbnQoZmIsIGNjc19wbGFuZSk7Ci0JaW50IGhzdWI7Ci0JaW50 IHZzdWI7Ci0KLQlpbnRlbF9mYl9wbGFuZV9nZXRfc3Vic2FtcGxpbmcoJmhzdWIsICZ2c3ViLCBm YiwgY2NzX3BsYW5lKTsKLQl3aGlsZSAoYXV4X29mZnNldCA+PSBtYWluX29mZnNldCAmJiBhdXhf eSA8PSBtYWluX3kpIHsKLQkJaW50IHgsIHk7Ci0KLQkJaWYgKGF1eF94ID09IG1haW5feCAmJiBh dXhfeSA9PSBtYWluX3kpCi0JCQlicmVhazsKLQotCQlpZiAoYXV4X29mZnNldCA9PSAwKQotCQkJ YnJlYWs7Ci0KLQkJeCA9IGF1eF94IC8gaHN1YjsKLQkJeSA9IGF1eF95IC8gdnN1YjsKLQkJYXV4 X29mZnNldCA9IGludGVsX3BsYW5lX2FkanVzdF9hbGlnbmVkX29mZnNldCgmeCwgJnksCi0JCQkJ CQkJICAgICAgIHBsYW5lX3N0YXRlLAotCQkJCQkJCSAgICAgICBjY3NfcGxhbmUsCi0JCQkJCQkJ ICAgICAgIGF1eF9vZmZzZXQsCi0JCQkJCQkJICAgICAgIGF1eF9vZmZzZXQgLQotCQkJCQkJCQlh bGlnbm1lbnQpOwotCQlhdXhfeCA9IHggKiBoc3ViICsgYXV4X3ggJSBoc3ViOwotCQlhdXhfeSA9 IHkgKiB2c3ViICsgYXV4X3kgJSB2c3ViOwotCX0KLQotCWlmIChhdXhfeCAhPSBtYWluX3ggfHwg YXV4X3kgIT0gbWFpbl95KQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlwbGFuZV9zdGF0ZS0+Y29sb3Jf cGxhbmVbY2NzX3BsYW5lXS5vZmZzZXQgPSBhdXhfb2Zmc2V0OwotCXBsYW5lX3N0YXRlLT5jb2xv cl9wbGFuZVtjY3NfcGxhbmVdLnggPSBhdXhfeDsKLQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVb Y2NzX3BsYW5lXS55ID0gYXV4X3k7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotdW5zaWduZWQgaW50 Ci1pbnRlbF9wbGFuZV9mZW5jZV95X29mZnNldChjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlKQotewotCWludCB4ID0gMCwgeSA9IDA7Ci0KLQlpbnRlbF9wbGFuZV9h ZGp1c3RfYWxpZ25lZF9vZmZzZXQoJngsICZ5LCBwbGFuZV9zdGF0ZSwgMCwKLQkJCQkJICBwbGFu ZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ub2Zmc2V0LCAwKTsKLQotCXJldHVybiB5OwotfQotCi1z dGF0aWMgaW50IGludGVsX3BsYW5lX21pbl93aWR0aChzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5l LAotCQkJCSBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKLQkJCQkgaW50IGNvbG9y X3BsYW5lLAotCQkJCSB1bnNpZ25lZCBpbnQgcm90YXRpb24pCi17Ci0JaWYgKHBsYW5lLT5taW5f d2lkdGgpCi0JCXJldHVybiBwbGFuZS0+bWluX3dpZHRoKGZiLCBjb2xvcl9wbGFuZSwgcm90YXRp b24pOwotCWVsc2UKLQkJcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgaW50ZWxfcGxhbmVfbWF4 X3dpZHRoKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCi0JCQkJIGNvbnN0IHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiLAotCQkJCSBpbnQgY29sb3JfcGxhbmUsCi0JCQkJIHVuc2lnbmVkIGlu dCByb3RhdGlvbikKLXsKLQlpZiAocGxhbmUtPm1heF93aWR0aCkKLQkJcmV0dXJuIHBsYW5lLT5t YXhfd2lkdGgoZmIsIGNvbG9yX3BsYW5lLCByb3RhdGlvbik7Ci0JZWxzZQotCQlyZXR1cm4gSU5U X01BWDsKLX0KLQotc3RhdGljIGludCBpbnRlbF9wbGFuZV9tYXhfaGVpZ2h0KHN0cnVjdCBpbnRl bF9wbGFuZSAqcGxhbmUsCi0JCQkJICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwK LQkJCQkgIGludCBjb2xvcl9wbGFuZSwKLQkJCQkgIHVuc2lnbmVkIGludCByb3RhdGlvbikKLXsK LQlpZiAocGxhbmUtPm1heF9oZWlnaHQpCi0JCXJldHVybiBwbGFuZS0+bWF4X2hlaWdodChmYiwg Y29sb3JfcGxhbmUsIHJvdGF0aW9uKTsKLQllbHNlCi0JCXJldHVybiBJTlRfTUFYOwotfQotCi1p bnQgc2tsX2NhbGNfbWFpbl9zdXJmYWNlX29mZnNldChjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVf c3RhdGUgKnBsYW5lX3N0YXRlLAotCQkJCSBpbnQgKngsIGludCAqeSwgdTMyICpvZmZzZXQpCi17 Ci0Jc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRl LT51YXBpLnBsYW5lKTsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KHBsYW5lLT5iYXNlLmRldik7Ci0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIg PSBwbGFuZV9zdGF0ZS0+aHcuZmI7Ci0JY29uc3QgaW50IGF1eF9wbGFuZSA9IGludGVsX21haW5f dG9fYXV4X3BsYW5lKGZiLCAwKTsKLQljb25zdCB1MzIgYXV4X29mZnNldCA9IHBsYW5lX3N0YXRl LT5jb2xvcl9wbGFuZVthdXhfcGxhbmVdLm9mZnNldDsKLQljb25zdCB1MzIgYWxpZ25tZW50ID0g aW50ZWxfc3VyZl9hbGlnbm1lbnQoZmIsIDApOwotCWNvbnN0IGludCB3ID0gZHJtX3JlY3Rfd2lk dGgoJnBsYW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTY7Ci0KLQlpbnRlbF9hZGRfZmJfb2Zmc2V0 cyh4LCB5LCBwbGFuZV9zdGF0ZSwgMCk7Ci0JKm9mZnNldCA9IGludGVsX3BsYW5lX2NvbXB1dGVf YWxpZ25lZF9vZmZzZXQoeCwgeSwgcGxhbmVfc3RhdGUsIDApOwotCWlmIChkcm1fV0FSTl9PTigm ZGV2X3ByaXYtPmRybSwgYWxpZ25tZW50ICYmICFpc19wb3dlcl9vZl8yKGFsaWdubWVudCkpKQot CQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qCi0JICogQVVYIHN1cmZhY2Ugb2Zmc2V0IGlzIHNwZWNp ZmllZCBhcyB0aGUgZGlzdGFuY2UgZnJvbSB0aGUKLQkgKiBtYWluIHN1cmZhY2Ugb2Zmc2V0LCBh bmQgaXQgbXVzdCBiZSBub24tbmVnYXRpdmUuIE1ha2UKLQkgKiBzdXJlIHRoYXQgaXMgd2hhdCB3 ZSB3aWxsIGdldC4KLQkgKi8KLQlpZiAoYXV4X3BsYW5lICYmICpvZmZzZXQgPiBhdXhfb2Zmc2V0 KQotCQkqb2Zmc2V0ID0gaW50ZWxfcGxhbmVfYWRqdXN0X2FsaWduZWRfb2Zmc2V0KHgsIHksIHBs YW5lX3N0YXRlLCAwLAotCQkJCQkJCSAgICAqb2Zmc2V0LAotCQkJCQkJCSAgICBhdXhfb2Zmc2V0 ICYgfihhbGlnbm1lbnQgLSAxKSk7Ci0KLQkvKgotCSAqIFdoZW4gdXNpbmcgYW4gWC10aWxlZCBz dXJmYWNlLCB0aGUgcGxhbmUgYmxvd3MgdXAKLQkgKiBpZiB0aGUgeCBvZmZzZXQgKyB3aWR0aCBl eGNlZWQgdGhlIHN0cmlkZS4KLQkgKgotCSAqIFRPRE86IGxpbmVhciBhbmQgWS10aWxlZCBzZWVt IGZpbmUsIFlmIHVudGVzdGVkLAotCSAqLwotCWlmIChmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JN QVRfTU9EX1hfVElMRUQpIHsKLQkJaW50IGNwcCA9IGZiLT5mb3JtYXQtPmNwcFswXTsKLQotCQl3 aGlsZSAoKCp4ICsgdykgKiBjcHAgPiBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0uc3RyaWRl KSB7Ci0JCQlpZiAoKm9mZnNldCA9PSAwKSB7Ci0JCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5k cm0sCi0JCQkJCSAgICAiVW5hYmxlIHRvIGZpbmQgc3VpdGFibGUgZGlzcGxheSBzdXJmYWNlIG9m ZnNldCBkdWUgdG8gWC10aWxpbmdcbiIpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCi0J CQkqb2Zmc2V0ID0gaW50ZWxfcGxhbmVfYWRqdXN0X2FsaWduZWRfb2Zmc2V0KHgsIHksIHBsYW5l X3N0YXRlLCAwLAotCQkJCQkJCQkgICAgKm9mZnNldCwKLQkJCQkJCQkJICAgICpvZmZzZXQgLSBh bGlnbm1lbnQpOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2tsX2No ZWNrX21haW5fc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQot ewotCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZV9zdGF0 ZS0+dWFwaS5wbGFuZSk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShwbGFuZS0+YmFzZS5kZXYpOwotCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi ID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCWNvbnN0IHVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBs YW5lX3N0YXRlLT5ody5yb3RhdGlvbjsKLQlpbnQgeCA9IHBsYW5lX3N0YXRlLT51YXBpLnNyYy54 MSA+PiAxNjsKLQlpbnQgeSA9IHBsYW5lX3N0YXRlLT51YXBpLnNyYy55MSA+PiAxNjsKLQljb25z dCBpbnQgdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMpID4+IDE2Owot CWNvbnN0IGludCBoID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMpID4+ IDE2OwotCWNvbnN0IGludCBtaW5fd2lkdGggPSBpbnRlbF9wbGFuZV9taW5fd2lkdGgocGxhbmUs IGZiLCAwLCByb3RhdGlvbik7Ci0JY29uc3QgaW50IG1heF93aWR0aCA9IGludGVsX3BsYW5lX21h eF93aWR0aChwbGFuZSwgZmIsIDAsIHJvdGF0aW9uKTsKLQljb25zdCBpbnQgbWF4X2hlaWdodCA9 IGludGVsX3BsYW5lX21heF9oZWlnaHQocGxhbmUsIGZiLCAwLCByb3RhdGlvbik7Ci0JY29uc3Qg aW50IGF1eF9wbGFuZSA9IGludGVsX21haW5fdG9fYXV4X3BsYW5lKGZiLCAwKTsKLQljb25zdCB1 MzIgYWxpZ25tZW50ID0gaW50ZWxfc3VyZl9hbGlnbm1lbnQoZmIsIDApOwotCXUzMiBvZmZzZXQ7 Ci0JaW50IHJldDsKLQotCWlmICh3ID4gbWF4X3dpZHRoIHx8IHcgPCBtaW5fd2lkdGggfHwgaCA+ IG1heF9oZWlnaHQpIHsKLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkgICAgInJl cXVlc3RlZCBZL1JHQiBzb3VyY2Ugc2l6ZSAlZHglZCBvdXRzaWRlIGxpbWl0cyAobWluOiAlZHgx IG1heDogJWR4JWQpXG4iLAotCQkJICAgIHcsIGgsIG1pbl93aWR0aCwgbWF4X3dpZHRoLCBtYXhf aGVpZ2h0KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0ID0gc2tsX2NhbGNfbWFpbl9z dXJmYWNlX29mZnNldChwbGFuZV9zdGF0ZSwgJngsICZ5LCAmb2Zmc2V0KTsKLQlpZiAocmV0KQot CQlyZXR1cm4gcmV0OwotCi0JLyoKLQkgKiBDQ1MgQVVYIHN1cmZhY2UgZG9lc24ndCBoYXZlIGl0 cyBvd24geC95IG9mZnNldHMsIHdlIG11c3QgbWFrZSBzdXJlCi0JICogdGhleSBtYXRjaCB3aXRo IHRoZSBtYWluIHN1cmZhY2UgeC95IG9mZnNldHMuCi0JICovCi0JaWYgKGlzX2Njc19tb2RpZmll cihmYi0+bW9kaWZpZXIpKSB7Ci0JCXdoaWxlICghc2tsX2NoZWNrX21haW5fY2NzX2Nvb3JkaW5h dGVzKHBsYW5lX3N0YXRlLCB4LCB5LAotCQkJCQkJICAgICAgIG9mZnNldCwgYXV4X3BsYW5lKSkg ewotCQkJaWYgKG9mZnNldCA9PSAwKQotCQkJCWJyZWFrOwotCi0JCQlvZmZzZXQgPSBpbnRlbF9w bGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoJngsICZ5LCBwbGFuZV9zdGF0ZSwgMCwKLQkJCQkJ CQkJICAgb2Zmc2V0LCBvZmZzZXQgLSBhbGlnbm1lbnQpOwotCQl9Ci0KLQkJaWYgKHggIT0gcGxh bmVfc3RhdGUtPmNvbG9yX3BsYW5lW2F1eF9wbGFuZV0ueCB8fAotCQkgICAgeSAhPSBwbGFuZV9z dGF0ZS0+Y29sb3JfcGxhbmVbYXV4X3BsYW5lXS55KSB7Ci0JCQlkcm1fZGJnX2ttcygmZGV2X3By aXYtPmRybSwKLQkJCQkgICAgIlVuYWJsZSB0byBmaW5kIHN1aXRhYmxlIGRpc3BsYXkgc3VyZmFj ZSBvZmZzZXQgZHVlIHRvIENDU1xuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQot CXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5vZmZzZXQgPSBvZmZzZXQ7Ci0JcGxhbmVfc3Rh dGUtPmNvbG9yX3BsYW5lWzBdLnggPSB4OwotCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS55 ID0geTsKLQotCS8qCi0JICogUHV0IHRoZSBmaW5hbCBjb29yZGluYXRlcyBiYWNrIHNvIHRoYXQg dGhlIHNyYwotCSAqIGNvb3JkaW5hdGUgY2hlY2tzIHdpbGwgc2VlIHRoZSByaWdodCB2YWx1ZXMu Ci0JICovCi0JZHJtX3JlY3RfdHJhbnNsYXRlX3RvKCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMsCi0J CQkgICAgICB4IDw8IDE2LCB5IDw8IDE2KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50 IHNrbF9jaGVja19udjEyX2F1eF9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxh bmVfc3RhdGUpCi17Ci0Jc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5l KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKLQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKLQl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBw bGFuZV9zdGF0ZS0+aHcucm90YXRpb247Ci0JaW50IHV2X3BsYW5lID0gMTsKLQlpbnQgbWF4X3dp ZHRoID0gaW50ZWxfcGxhbmVfbWF4X3dpZHRoKHBsYW5lLCBmYiwgdXZfcGxhbmUsIHJvdGF0aW9u KTsKLQlpbnQgbWF4X2hlaWdodCA9IGludGVsX3BsYW5lX21heF9oZWlnaHQocGxhbmUsIGZiLCB1 dl9wbGFuZSwgcm90YXRpb24pOwotCWludCB4ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3JjLngxID4+ IDE3OwotCWludCB5ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3JjLnkxID4+IDE3OwotCWludCB3ID0g ZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTc7Ci0JaW50IGggPSBk cm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTc7Ci0JdTMyIG9mZnNl dDsKLQotCS8qIEZJWE1FIG5vdCBxdWl0ZSBzdXJlIGhvdy9pZiB0aGVzZSBhcHBseSB0byB0aGUg Y2hyb21hIHBsYW5lICovCi0JaWYgKHcgPiBtYXhfd2lkdGggfHwgaCA+IG1heF9oZWlnaHQpIHsK LQkJZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwKLQkJCSAgICAiQ2JDciBzb3VyY2Ugc2l6ZSAlZHgl ZCB0b28gYmlnIChsaW1pdCAlZHglZClcbiIsCi0JCQkgICAgdywgaCwgbWF4X3dpZHRoLCBtYXhf aGVpZ2h0KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaW50ZWxfYWRkX2ZiX29mZnNldHMo JngsICZ5LCBwbGFuZV9zdGF0ZSwgdXZfcGxhbmUpOwotCW9mZnNldCA9IGludGVsX3BsYW5lX2Nv bXB1dGVfYWxpZ25lZF9vZmZzZXQoJngsICZ5LAotCQkJCQkJICAgIHBsYW5lX3N0YXRlLCB1dl9w bGFuZSk7Ci0KLQlpZiAoaXNfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikpIHsKLQkJaW50IGNj c19wbGFuZSA9IG1haW5fdG9fY2NzX3BsYW5lKGZiLCB1dl9wbGFuZSk7Ci0JCXUzMiBhdXhfb2Zm c2V0ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFuZV0ub2Zmc2V0OwotCQl1MzIg YWxpZ25tZW50ID0gaW50ZWxfc3VyZl9hbGlnbm1lbnQoZmIsIHV2X3BsYW5lKTsKLQotCQlpZiAo b2Zmc2V0ID4gYXV4X29mZnNldCkKLQkJCW9mZnNldCA9IGludGVsX3BsYW5lX2FkanVzdF9hbGln bmVkX29mZnNldCgmeCwgJnksCi0JCQkJCQkJCSAgIHBsYW5lX3N0YXRlLAotCQkJCQkJCQkgICB1 dl9wbGFuZSwKLQkJCQkJCQkJICAgb2Zmc2V0LAotCQkJCQkJCQkgICBhdXhfb2Zmc2V0ICYgfihh bGlnbm1lbnQgLSAxKSk7Ci0KLQkJd2hpbGUgKCFza2xfY2hlY2tfbWFpbl9jY3NfY29vcmRpbmF0 ZXMocGxhbmVfc3RhdGUsIHgsIHksCi0JCQkJCQkgICAgICAgb2Zmc2V0LCBjY3NfcGxhbmUpKSB7 Ci0JCQlpZiAob2Zmc2V0ID09IDApCi0JCQkJYnJlYWs7Ci0KLQkJCW9mZnNldCA9IGludGVsX3Bs YW5lX2FkanVzdF9hbGlnbmVkX29mZnNldCgmeCwgJnksCi0JCQkJCQkJCSAgIHBsYW5lX3N0YXRl LAotCQkJCQkJCQkgICB1dl9wbGFuZSwKLQkJCQkJCQkJICAgb2Zmc2V0LCBvZmZzZXQgLSBhbGln bm1lbnQpOwotCQl9Ci0KLQkJaWYgKHggIT0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19w bGFuZV0ueCB8fAotCQkgICAgeSAhPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5l XS55KSB7Ci0JCQlkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLAotCQkJCSAgICAiVW5hYmxlIHRvIGZp bmQgc3VpdGFibGUgZGlzcGxheSBzdXJmYWNlIG9mZnNldCBkdWUgdG8gQ0NTXG4iKTsKLQkJCXJl dHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCi0JcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW3V2X3Bs YW5lXS5vZmZzZXQgPSBvZmZzZXQ7Ci0JcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW3V2X3BsYW5l XS54ID0geDsKLQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbdXZfcGxhbmVdLnkgPSB5OwotCi0J cmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2tsX2NoZWNrX2Njc19hdXhfc3VyZmFjZShzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCWNvbnN0IHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCWludCBzcmNfeCA9IHBsYW5l X3N0YXRlLT51YXBpLnNyYy54MSA+PiAxNjsKLQlpbnQgc3JjX3kgPSBwbGFuZV9zdGF0ZS0+dWFw aS5zcmMueTEgPj4gMTY7Ci0JdTMyIG9mZnNldDsKLQlpbnQgY2NzX3BsYW5lOwotCi0JZm9yIChj Y3NfcGxhbmUgPSAwOyBjY3NfcGxhbmUgPCBmYi0+Zm9ybWF0LT5udW1fcGxhbmVzOyBjY3NfcGxh bmUrKykgewotCQlpbnQgbWFpbl9oc3ViLCBtYWluX3ZzdWI7Ci0JCWludCBoc3ViLCB2c3ViOwot CQlpbnQgeCwgeTsKLQotCQlpZiAoIWlzX2Njc19wbGFuZShmYiwgY2NzX3BsYW5lKSkKLQkJCWNv bnRpbnVlOwotCi0JCWludGVsX2ZiX3BsYW5lX2dldF9zdWJzYW1wbGluZygmbWFpbl9oc3ViLCAm bWFpbl92c3ViLCBmYiwKLQkJCQkJICAgICAgIGNjc190b19tYWluX3BsYW5lKGZiLCBjY3NfcGxh bmUpKTsKLQkJaW50ZWxfZmJfcGxhbmVfZ2V0X3N1YnNhbXBsaW5nKCZoc3ViLCAmdnN1YiwgZmIs IGNjc19wbGFuZSk7Ci0KLQkJaHN1YiAqPSBtYWluX2hzdWI7Ci0JCXZzdWIgKj0gbWFpbl92c3Vi OwotCQl4ID0gc3JjX3ggLyBoc3ViOwotCQl5ID0gc3JjX3kgLyB2c3ViOwotCi0JCWludGVsX2Fk ZF9mYl9vZmZzZXRzKCZ4LCAmeSwgcGxhbmVfc3RhdGUsIGNjc19wbGFuZSk7Ci0KLQkJb2Zmc2V0 ID0gaW50ZWxfcGxhbmVfY29tcHV0ZV9hbGlnbmVkX29mZnNldCgmeCwgJnksCi0JCQkJCQkJICAg IHBsYW5lX3N0YXRlLAotCQkJCQkJCSAgICBjY3NfcGxhbmUpOwotCi0JCXBsYW5lX3N0YXRlLT5j b2xvcl9wbGFuZVtjY3NfcGxhbmVdLm9mZnNldCA9IG9mZnNldDsKLQkJcGxhbmVfc3RhdGUtPmNv bG9yX3BsYW5lW2Njc19wbGFuZV0ueCA9ICh4ICogaHN1YiArCi0JCQkJCQkJIHNyY194ICUgaHN1 YikgLwotCQkJCQkJCW1haW5faHN1YjsKLQkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19w bGFuZV0ueSA9ICh5ICogdnN1YiArCi0JCQkJCQkJIHNyY195ICUgdnN1YikgLwotCQkJCQkJCW1h aW5fdnN1YjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHNrbF9jaGVja19wbGFuZV9zdXJm YWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0JY29uc3Qgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Ci0JaW50IHJldCwg aTsKLQotCXJldCA9IGludGVsX3BsYW5lX2NvbXB1dGVfZ3R0KHBsYW5lX3N0YXRlKTsKLQlpZiAo cmV0KQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKCFwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlKQot CQlyZXR1cm4gMDsKLQotCS8qCi0JICogSGFuZGxlIHRoZSBBVVggc3VyZmFjZSBmaXJzdCBzaW5j ZSB0aGUgbWFpbiBzdXJmYWNlIHNldHVwIGRlcGVuZHMgb24KLQkgKiBpdC4KLQkgKi8KLQlpZiAo aXNfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikpIHsKLQkJcmV0ID0gc2tsX2NoZWNrX2Njc19h dXhfc3VyZmFjZShwbGFuZV9zdGF0ZSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0K LQotCWlmIChpbnRlbF9mb3JtYXRfaW5mb19pc195dXZfc2VtaXBsYW5hcihmYi0+Zm9ybWF0LAot CQkJCQkJZmItPm1vZGlmaWVyKSkgewotCQlyZXQgPSBza2xfY2hlY2tfbnYxMl9hdXhfc3VyZmFj ZShwbGFuZV9zdGF0ZSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCWZvciAo aSA9IGZiLT5mb3JtYXQtPm51bV9wbGFuZXM7IGkgPCBBUlJBWV9TSVpFKHBsYW5lX3N0YXRlLT5j b2xvcl9wbGFuZSk7IGkrKykgewotCQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbaV0ub2Zmc2V0 ID0gMDsKLQkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2ldLnggPSAwOwotCQlwbGFuZV9zdGF0 ZS0+Y29sb3JfcGxhbmVbaV0ueSA9IDA7Ci0JfQotCi0JcmV0ID0gc2tsX2NoZWNrX21haW5fc3Vy ZmFjZShwbGFuZV9zdGF0ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAw OwotfQotCiBzdGF0aWMgdm9pZCBza2xfZGV0YWNoX3NjYWxlcihzdHJ1Y3QgaW50ZWxfY3J0YyAq aW50ZWxfY3J0YywgaW50IGlkKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9j cnRjLT5iYXNlLmRldjsKQEAgLTMyMzMsMzAyICsyNzYxLDI0IEBAIHN0YXRpYyB2b2lkIHNrbF9k ZXRhY2hfc2NhbGVycyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkK IAl9CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgc2tsX3BsYW5lX3N0cmlkZV9tdWx0KGNvbnN0 IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkJCQkgIGludCBjb2xvcl9wbGFuZSwgdW5z aWduZWQgaW50IHJvdGF0aW9uKQordm9pZCBza2xfc2NhbGVyX2Rpc2FibGUoY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQogewotCS8qCi0JICogVGhlIHN0cmlk ZSBpcyBlaXRoZXIgZXhwcmVzc2VkIGFzIGEgbXVsdGlwbGUgb2YgNjQgYnl0ZXMgY2h1bmtzIGZv cgotCSAqIGxpbmVhciBidWZmZXJzIG9yIGluIG51bWJlciBvZiB0aWxlcyBmb3IgdGlsZWQgYnVm ZmVycy4KLQkgKi8KLQlpZiAoaXNfc3VyZmFjZV9saW5lYXIoZmIsIGNvbG9yX3BsYW5lKSkKLQkJ cmV0dXJuIDY0OwotCWVsc2UgaWYgKGRybV9yb3RhdGlvbl85MF9vcl8yNzAocm90YXRpb24pKQot CQlyZXR1cm4gaW50ZWxfdGlsZV9oZWlnaHQoZmIsIGNvbG9yX3BsYW5lKTsKLQllbHNlCi0JCXJl dHVybiBpbnRlbF90aWxlX3dpZHRoX2J5dGVzKGZiLCBjb2xvcl9wbGFuZSk7Ci19Ci0KLXUzMiBz a2xfcGxhbmVfc3RyaWRlKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3Rh dGUsCi0JCSAgICAgaW50IGNvbG9yX3BsYW5lKQotewotCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCXVuc2lnbmVkIGludCByb3RhdGlvbiA9 IHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbjsKLQl1MzIgc3RyaWRlID0gcGxhbmVfc3RhdGUtPmNv bG9yX3BsYW5lW2NvbG9yX3BsYW5lXS5zdHJpZGU7Ci0KLQlpZiAoY29sb3JfcGxhbmUgPj0gZmIt PmZvcm1hdC0+bnVtX3BsYW5lcykKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gc3RyaWRlIC8gc2ts X3BsYW5lX3N0cmlkZV9tdWx0KGZiLCBjb2xvcl9wbGFuZSwgcm90YXRpb24pOwotfQotCi1zdGF0 aWMgdTMyIHNrbF9wbGFuZV9jdGxfZm9ybWF0KHUzMiBwaXhlbF9mb3JtYXQpCi17Ci0Jc3dpdGNo IChwaXhlbF9mb3JtYXQpIHsKLQljYXNlIERSTV9GT1JNQVRfQzg6Ci0JCXJldHVybiBQTEFORV9D VExfRk9STUFUX0lOREVYRUQ7Ci0JY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKLQkJcmV0dXJuIFBM QU5FX0NUTF9GT1JNQVRfUkdCXzU2NTsKLQljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6Ci0JY2Fz ZSBEUk1fRk9STUFUX0FCR1I4ODg4OgotCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzg4 ODggfCBQTEFORV9DVExfT1JERVJfUkdCWDsKLQljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Ci0J Y2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4OgotCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9YUkdC Xzg4ODg7Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9B QkdSMjEwMTAxMDoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWFJHQl8yMTAxMDEwIHwgUExB TkVfQ1RMX09SREVSX1JHQlg7Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgotCWNhc2Ug RFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWFJHQl8y MTAxMDEwOwotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1B VF9BQkdSMTYxNjE2MTZGOgotCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzE2MTYxNjE2 RiB8IFBMQU5FX0NUTF9PUkRFUl9SR0JYOwotCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZG OgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTYxNjE2MTZGOgotCQlyZXR1cm4gUExBTkVfQ1RMX0ZP Uk1BVF9YUkdCXzE2MTYxNjE2RjsKLQljYXNlIERSTV9GT1JNQVRfWFlVVjg4ODg6Ci0JCXJldHVy biBQTEFORV9DVExfRk9STUFUX1hZVVY7Ci0JY2FzZSBEUk1fRk9STUFUX1lVWVY6Ci0JCXJldHVy biBQTEFORV9DVExfRk9STUFUX1lVVjQyMiB8IFBMQU5FX0NUTF9ZVVY0MjJfWVVZVjsKLQljYXNl IERSTV9GT1JNQVRfWVZZVToKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWVVWNDIyIHwgUExB TkVfQ1RMX1lVVjQyMl9ZVllVOwotCWNhc2UgRFJNX0ZPUk1BVF9VWVZZOgotCQlyZXR1cm4gUExB TkVfQ1RMX0ZPUk1BVF9ZVVY0MjIgfCBQTEFORV9DVExfWVVWNDIyX1VZVlk7Ci0JY2FzZSBEUk1f Rk9STUFUX1ZZVVk6Ci0JCXJldHVybiBQTEFORV9DVExfRk9STUFUX1lVVjQyMiB8IFBMQU5FX0NU TF9ZVVY0MjJfVllVWTsKLQljYXNlIERSTV9GT1JNQVRfTlYxMjoKLQkJcmV0dXJuIFBMQU5FX0NU TF9GT1JNQVRfTlYxMjsKLQljYXNlIERSTV9GT1JNQVRfUDAxMDoKLQkJcmV0dXJuIFBMQU5FX0NU TF9GT1JNQVRfUDAxMDsKLQljYXNlIERSTV9GT1JNQVRfUDAxMjoKLQkJcmV0dXJuIFBMQU5FX0NU TF9GT1JNQVRfUDAxMjsKLQljYXNlIERSTV9GT1JNQVRfUDAxNjoKLQkJcmV0dXJuIFBMQU5FX0NU TF9GT1JNQVRfUDAxNjsKLQljYXNlIERSTV9GT1JNQVRfWTIxMDoKLQkJcmV0dXJuIFBMQU5FX0NU TF9GT1JNQVRfWTIxMDsKLQljYXNlIERSTV9GT1JNQVRfWTIxMjoKLQkJcmV0dXJuIFBMQU5FX0NU TF9GT1JNQVRfWTIxMjsKLQljYXNlIERSTV9GT1JNQVRfWTIxNjoKLQkJcmV0dXJuIFBMQU5FX0NU TF9GT1JNQVRfWTIxNjsKLQljYXNlIERSTV9GT1JNQVRfWFZZVTIxMDEwMTA6Ci0JCXJldHVybiBQ TEFORV9DVExfRk9STUFUX1k0MTA7Ci0JY2FzZSBEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNjoK LQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWTQxMjsKLQljYXNlIERSTV9GT1JNQVRfWFZZVTE2 MTYxNjE2OgotCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9ZNDE2OwotCWRlZmF1bHQ6Ci0JCU1J U1NJTkdfQ0FTRShwaXhlbF9mb3JtYXQpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMg dTMyIHNrbF9wbGFuZV9jdGxfYWxwaGEoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpw bGFuZV9zdGF0ZSkKLXsKLQlpZiAoIXBsYW5lX3N0YXRlLT5ody5mYi0+Zm9ybWF0LT5oYXNfYWxw aGEpCi0JCXJldHVybiBQTEFORV9DVExfQUxQSEFfRElTQUJMRTsKLQotCXN3aXRjaCAocGxhbmVf c3RhdGUtPmh3LnBpeGVsX2JsZW5kX21vZGUpIHsKLQljYXNlIERSTV9NT0RFX0JMRU5EX1BJWEVM X05PTkU6Ci0JCXJldHVybiBQTEFORV9DVExfQUxQSEFfRElTQUJMRTsKLQljYXNlIERSTV9NT0RF X0JMRU5EX1BSRU1VTFRJOgotCQlyZXR1cm4gUExBTkVfQ1RMX0FMUEhBX1NXX1BSRU1VTFRJUExZ OwotCWNhc2UgRFJNX01PREVfQkxFTkRfQ09WRVJBR0U6Ci0JCXJldHVybiBQTEFORV9DVExfQUxQ SEFfSFdfUFJFTVVMVElQTFk7Ci0JZGVmYXVsdDoKLQkJTUlTU0lOR19DQVNFKHBsYW5lX3N0YXRl LT5ody5waXhlbF9ibGVuZF9tb2RlKTsKLQkJcmV0dXJuIFBMQU5FX0NUTF9BTFBIQV9ESVNBQkxF OwotCX0KLX0KLQotc3RhdGljIHUzMiBnbGtfcGxhbmVfY29sb3JfY3RsX2FscGhhKGNvbnN0IHN0 cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0JaWYgKCFwbGFuZV9zdGF0 ZS0+aHcuZmItPmZvcm1hdC0+aGFzX2FscGhhKQotCQlyZXR1cm4gUExBTkVfQ09MT1JfQUxQSEFf RElTQUJMRTsKLQotCXN3aXRjaCAocGxhbmVfc3RhdGUtPmh3LnBpeGVsX2JsZW5kX21vZGUpIHsK LQljYXNlIERSTV9NT0RFX0JMRU5EX1BJWEVMX05PTkU6Ci0JCXJldHVybiBQTEFORV9DT0xPUl9B TFBIQV9ESVNBQkxFOwotCWNhc2UgRFJNX01PREVfQkxFTkRfUFJFTVVMVEk6Ci0JCXJldHVybiBQ TEFORV9DT0xPUl9BTFBIQV9TV19QUkVNVUxUSVBMWTsKLQljYXNlIERSTV9NT0RFX0JMRU5EX0NP VkVSQUdFOgotCQlyZXR1cm4gUExBTkVfQ09MT1JfQUxQSEFfSFdfUFJFTVVMVElQTFk7Ci0JZGVm YXVsdDoKLQkJTUlTU0lOR19DQVNFKHBsYW5lX3N0YXRlLT5ody5waXhlbF9ibGVuZF9tb2RlKTsK LQkJcmV0dXJuIFBMQU5FX0NPTE9SX0FMUEhBX0RJU0FCTEU7Ci0JfQotfQotCi1zdGF0aWMgdTMy IHNrbF9wbGFuZV9jdGxfdGlsaW5nKHU2NCBmYl9tb2RpZmllcikKLXsKLQlzd2l0Y2ggKGZiX21v ZGlmaWVyKSB7Ci0JY2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6Ci0JCWJyZWFrOwotCWNhc2Ug STkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6Ci0JCXJldHVybiBQTEFORV9DVExfVElMRURfWDsKLQlj YXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgotCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1k7 Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6Ci0JCXJldHVybiBQTEFORV9DVExf VElMRURfWSB8IFBMQU5FX0NUTF9SRU5ERVJfREVDT01QUkVTU0lPTl9FTkFCTEU7Ci0JY2FzZSBJ OTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19DQ1M6Ci0JCXJldHVybiBQTEFORV9DVExf VElMRURfWSB8Ci0JCSAgICAgICBQTEFORV9DVExfUkVOREVSX0RFQ09NUFJFU1NJT05fRU5BQkxF IHwKLQkJICAgICAgIFBMQU5FX0NUTF9DTEVBUl9DT0xPUl9ESVNBQkxFOwotCWNhc2UgSTkxNV9G T1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNfQ0NTOgotCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVE X1kgfCBQTEFORV9DVExfTUVESUFfREVDT01QUkVTU0lPTl9FTkFCTEU7Ci0JY2FzZSBJOTE1X0ZP Uk1BVF9NT0RfWWZfVElMRUQ6Ci0JCXJldHVybiBQTEFORV9DVExfVElMRURfWUY7Ci0JY2FzZSBJ OTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOgotCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1lG IHwgUExBTkVfQ1RMX1JFTkRFUl9ERUNPTVBSRVNTSU9OX0VOQUJMRTsKLQlkZWZhdWx0OgotCQlN SVNTSU5HX0NBU0UoZmJfbW9kaWZpZXIpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMg dTMyIHNrbF9wbGFuZV9jdGxfcm90YXRlKHVuc2lnbmVkIGludCByb3RhdGUpCi17Ci0Jc3dpdGNo IChyb3RhdGUpIHsKLQljYXNlIERSTV9NT0RFX1JPVEFURV8wOgotCQlicmVhazsKLQkvKgotCSAq IERSTV9NT0RFX1JPVEFURV8gaXMgY291bnRlciBjbG9ja3dpc2UgdG8gc3RheSBjb21wYXRpYmxl IHdpdGggWHJhbmRyCi0JICogd2hpbGUgaTkxNSBIVyByb3RhdGlvbiBpcyBjbG9ja3dpc2UsIHRo YXRzIHdoeSB0aGlzIHN3YXBwaW5nLgotCSAqLwotCWNhc2UgRFJNX01PREVfUk9UQVRFXzkwOgot CQlyZXR1cm4gUExBTkVfQ1RMX1JPVEFURV8yNzA7Ci0JY2FzZSBEUk1fTU9ERV9ST1RBVEVfMTgw OgotCQlyZXR1cm4gUExBTkVfQ1RMX1JPVEFURV8xODA7Ci0JY2FzZSBEUk1fTU9ERV9ST1RBVEVf MjcwOgotCQlyZXR1cm4gUExBTkVfQ1RMX1JPVEFURV85MDsKLQlkZWZhdWx0OgotCQlNSVNTSU5H X0NBU0Uocm90YXRlKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHUzMiBjbmxfcGxh bmVfY3RsX2ZsaXAodW5zaWduZWQgaW50IHJlZmxlY3QpCi17Ci0Jc3dpdGNoIChyZWZsZWN0KSB7 Ci0JY2FzZSAwOgotCQlicmVhazsKLQljYXNlIERSTV9NT0RFX1JFRkxFQ1RfWDoKLQkJcmV0dXJu IFBMQU5FX0NUTF9GTElQX0hPUklaT05UQUw7Ci0JY2FzZSBEUk1fTU9ERV9SRUZMRUNUX1k6Ci0J ZGVmYXVsdDoKLQkJTUlTU0lOR19DQVNFKHJlZmxlY3QpOwotCX0KLQotCXJldHVybiAwOwotfQot Ci11MzIgc2tsX3BsYW5lX2N0bF9jcnRjKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjLT5kZXYpOwotCXUzMiBwbGFuZV9jdGwgPSAwOwotCi0J aWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikp Ci0JCXJldHVybiBwbGFuZV9jdGw7Ci0KLQlpZiAoY3J0Y19zdGF0ZS0+Z2FtbWFfZW5hYmxlKQot CQlwbGFuZV9jdGwgfD0gUExBTkVfQ1RMX1BJUEVfR0FNTUFfRU5BQkxFOworCXN0cnVjdCBpbnRl bF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhvbGRfY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsK KwlpbnQgaTsKIAotCWlmIChjcnRjX3N0YXRlLT5jc2NfZW5hYmxlKQotCQlwbGFuZV9jdGwgfD0g UExBTkVfQ1RMX1BJUEVfQ1NDX0VOQUJMRTsKLQotCXJldHVybiBwbGFuZV9jdGw7CisJZm9yIChp ID0gMDsgaSA8IGNydGMtPm51bV9zY2FsZXJzOyBpKyspCisJCXNrbF9kZXRhY2hfc2NhbGVyKGNy dGMsIGkpOwogfQogCi11MzIgc2tsX3BsYW5lX2N0bChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSwKLQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBs YW5lX3N0YXRlKQordW5zaWduZWQgaW50CitpbnRlbF9wbGFuZV9mZW5jZV95X29mZnNldChjb25z dCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQogewotCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9Ci0JCXRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxh bmUtPmRldik7Ci0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0 ZS0+aHcuZmI7Ci0JdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmh3LnJvdGF0 aW9uOwotCWNvbnN0IHN0cnVjdCBkcm1faW50ZWxfc3ByaXRlX2NvbG9ya2V5ICprZXkgPSAmcGxh bmVfc3RhdGUtPmNrZXk7Ci0JdTMyIHBsYW5lX2N0bDsKLQotCXBsYW5lX2N0bCA9IFBMQU5FX0NU TF9FTkFCTEU7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDEwICYmICFJU19HRU1JTklM QUtFKGRldl9wcml2KSkgewotCQlwbGFuZV9jdGwgfD0gc2tsX3BsYW5lX2N0bF9hbHBoYShwbGFu ZV9zdGF0ZSk7Ci0JCXBsYW5lX2N0bCB8PSBQTEFORV9DVExfUExBTkVfR0FNTUFfRElTQUJMRTsK LQotCQlpZiAocGxhbmVfc3RhdGUtPmh3LmNvbG9yX2VuY29kaW5nID09IERSTV9DT0xPUl9ZQ0JD Ul9CVDcwOSkKLQkJCXBsYW5lX2N0bCB8PSBQTEFORV9DVExfWVVWX1RPX1JHQl9DU0NfRk9STUFU X0JUNzA5OwotCi0JCWlmIChwbGFuZV9zdGF0ZS0+aHcuY29sb3JfcmFuZ2UgPT0gRFJNX0NPTE9S X1lDQkNSX0ZVTExfUkFOR0UpCi0JCQlwbGFuZV9jdGwgfD0gUExBTkVfQ1RMX1lVVl9SQU5HRV9D T1JSRUNUSU9OX0RJU0FCTEU7Ci0JfQotCi0JcGxhbmVfY3RsIHw9IHNrbF9wbGFuZV9jdGxfZm9y bWF0KGZiLT5mb3JtYXQtPmZvcm1hdCk7Ci0JcGxhbmVfY3RsIHw9IHNrbF9wbGFuZV9jdGxfdGls aW5nKGZiLT5tb2RpZmllcik7Ci0JcGxhbmVfY3RsIHw9IHNrbF9wbGFuZV9jdGxfcm90YXRlKHJv dGF0aW9uICYgRFJNX01PREVfUk9UQVRFX01BU0spOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJp dikgPj0gMTApCi0JCXBsYW5lX2N0bCB8PSBjbmxfcGxhbmVfY3RsX2ZsaXAocm90YXRpb24gJgot CQkJCQkJRFJNX01PREVfUkVGTEVDVF9NQVNLKTsKLQotCWlmIChrZXktPmZsYWdzICYgSTkxNV9T RVRfQ09MT1JLRVlfREVTVElOQVRJT04pCi0JCXBsYW5lX2N0bCB8PSBQTEFORV9DVExfS0VZX0VO QUJMRV9ERVNUSU5BVElPTjsKLQllbHNlIGlmIChrZXktPmZsYWdzICYgSTkxNV9TRVRfQ09MT1JL RVlfU09VUkNFKQotCQlwbGFuZV9jdGwgfD0gUExBTkVfQ1RMX0tFWV9FTkFCTEVfU09VUkNFOwot Ci0JcmV0dXJuIHBsYW5lX2N0bDsKLX0KLQotdTMyIGdsa19wbGFuZV9jb2xvcl9jdGxfY3J0Yyhj b25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGNfc3RhdGUtPnVhcGkuY3J0Yy0+ ZGV2KTsKLQl1MzIgcGxhbmVfY29sb3JfY3RsID0gMDsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDExKQotCQlyZXR1cm4gcGxhbmVfY29sb3JfY3RsOwotCi0JaWYgKGNydGNfc3RhdGUt PmdhbW1hX2VuYWJsZSkKLQkJcGxhbmVfY29sb3JfY3RsIHw9IFBMQU5FX0NPTE9SX1BJUEVfR0FN TUFfRU5BQkxFOwotCi0JaWYgKGNydGNfc3RhdGUtPmNzY19lbmFibGUpCi0JCXBsYW5lX2NvbG9y X2N0bCB8PSBQTEFORV9DT0xPUl9QSVBFX0NTQ19FTkFCTEU7Ci0KLQlyZXR1cm4gcGxhbmVfY29s b3JfY3RsOwotfQotCi11MzIgZ2xrX3BsYW5lX2NvbG9yX2N0bChjb25zdCBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJCWNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZSAqcGxhbmVfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0K LQkJdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKLQljb25zdCBzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKLQlzdHJ1Y3QgaW50ZWxf cGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUpOwot CXUzMiBwbGFuZV9jb2xvcl9jdGwgPSAwOwotCi0JcGxhbmVfY29sb3JfY3RsIHw9IFBMQU5FX0NP TE9SX1BMQU5FX0dBTU1BX0RJU0FCTEU7Ci0JcGxhbmVfY29sb3JfY3RsIHw9IGdsa19wbGFuZV9j b2xvcl9jdGxfYWxwaGEocGxhbmVfc3RhdGUpOworCWludCB4ID0gMCwgeSA9IDA7CiAKLQlpZiAo ZmItPmZvcm1hdC0+aXNfeXV2ICYmICFpY2xfaXNfaGRyX3BsYW5lKGRldl9wcml2LCBwbGFuZS0+ aWQpKSB7Ci0JCXN3aXRjaCAocGxhbmVfc3RhdGUtPmh3LmNvbG9yX2VuY29kaW5nKSB7Ci0JCWNh c2UgRFJNX0NPTE9SX1lDQkNSX0JUNzA5OgotCQkJcGxhbmVfY29sb3JfY3RsIHw9IFBMQU5FX0NP TE9SX0NTQ19NT0RFX1lVVjcwOV9UT19SR0I3MDk7Ci0JCQlicmVhazsKLQkJY2FzZSBEUk1fQ09M T1JfWUNCQ1JfQlQyMDIwOgotCQkJcGxhbmVfY29sb3JfY3RsIHw9Ci0JCQkJUExBTkVfQ09MT1Jf Q1NDX01PREVfWVVWMjAyMF9UT19SR0IyMDIwOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlw bGFuZV9jb2xvcl9jdGwgfD0KLQkJCQlQTEFORV9DT0xPUl9DU0NfTU9ERV9ZVVY2MDFfVE9fUkdC NjAxOwotCQl9Ci0JCWlmIChwbGFuZV9zdGF0ZS0+aHcuY29sb3JfcmFuZ2UgPT0gRFJNX0NPTE9S X1lDQkNSX0ZVTExfUkFOR0UpCi0JCQlwbGFuZV9jb2xvcl9jdGwgfD0gUExBTkVfQ09MT1JfWVVW X1JBTkdFX0NPUlJFQ1RJT05fRElTQUJMRTsKLQl9IGVsc2UgaWYgKGZiLT5mb3JtYXQtPmlzX3l1 dikgewotCQlwbGFuZV9jb2xvcl9jdGwgfD0gUExBTkVfQ09MT1JfSU5QVVRfQ1NDX0VOQUJMRTsK LQl9CisJaW50ZWxfcGxhbmVfYWRqdXN0X2FsaWduZWRfb2Zmc2V0KCZ4LCAmeSwgcGxhbmVfc3Rh dGUsIDAsCisJCQkJCSAgcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLm9mZnNldCwgMCk7CiAK LQlyZXR1cm4gcGxhbmVfY29sb3JfY3RsOworCXJldHVybiB5OwogfQogCiBzdGF0aWMgaW50CkBA IC00MzgzLDE1ICszNjMzLDYgQEAgc3RhdGljIGludCBza2xfdXBkYXRlX3NjYWxlcl9wbGFuZShz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKIAlyZXR1cm4gMDsKIH0KIAotdm9p ZCBza2xfc2NhbGVyX2Rpc2FibGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm9sZF9j cnRjX3N0YXRlKQotewotCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0Yyhv bGRfY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBj cnRjLT5udW1fc2NhbGVyczsgaSsrKQotCQlza2xfZGV0YWNoX3NjYWxlcihjcnRjLCBpKTsKLX0K LQogc3RhdGljIGludCBjbmxfY29lZl90YXAoaW50IGkpCiB7CiAJcmV0dXJuIGkgJSA3OwpAQCAt ODIxMywxNTAgKzc0NTQsNiBAQCBzdGF0aWMgdm9pZCBza2xfZ2V0X3BmaXRfY29uZmlnKHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQogCQlzY2FsZXJfc3RhdGUtPnNjYWxlcl91 c2VycyAmPSB+KDEgPDwgU0tMX0NSVENfSU5ERVgpOwogfQogCi1zdGF0aWMgdm9pZAotc2tsX2dl dF9pbml0aWFsX3BsYW5lX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKLQkJCSAgICAg c3RydWN0IGludGVsX2luaXRpYWxfcGxhbmVfY29uZmlnICpwbGFuZV9jb25maWcpCi17Ci0Jc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUgPSB0b19pbnRlbF9jcnRjX3N0YXRlKGNy dGMtPmJhc2Uuc3RhdGUpOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRl djsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Ci0J c3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKGNydGMtPmJhc2UucHJp bWFyeSk7Ci0JZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHBsYW5lLT5pZDsKLQllbnVtIHBpcGUg cGlwZTsKLQl1MzIgdmFsLCBiYXNlLCBvZmZzZXQsIHN0cmlkZV9tdWx0LCB0aWxpbmcsIGFscGhh OwotCWludCBmb3VyY2MsIHBpeGVsX2Zvcm1hdDsKLQl1bnNpZ25lZCBpbnQgYWxpZ25lZF9oZWln aHQ7Ci0Jc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7Ci0Jc3RydWN0IGludGVsX2ZyYW1lYnVm ZmVyICppbnRlbF9mYjsKLQotCWlmICghcGxhbmUtPmdldF9od19zdGF0ZShwbGFuZSwgJnBpcGUp KQotCQlyZXR1cm47Ci0KLQlkcm1fV0FSTl9PTihkZXYsIHBpcGUgIT0gY3J0Yy0+cGlwZSk7Ci0K LQlpZiAoY3J0Y19zdGF0ZS0+Ymlnam9pbmVyKSB7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ ZHJtLAotCQkJICAgICJVbnN1cHBvcnRlZCBiaWdqb2luZXIgY29uZmlndXJhdGlvbiBmb3IgaW5p dGlhbCBGQlxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpbnRlbF9mYiA9IGt6YWxsb2Moc2l6ZW9m KCppbnRlbF9mYiksIEdGUF9LRVJORUwpOwotCWlmICghaW50ZWxfZmIpIHsKLQkJZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sICJmYWlsZWQgdG8gYWxsb2MgZmJcbiIpOwotCQlyZXR1cm47Ci0J fQotCi0JZmIgPSAmaW50ZWxfZmItPmJhc2U7Ci0KLQlmYi0+ZGV2ID0gZGV2OwotCi0JdmFsID0g aW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgUExBTkVfQ1RMKHBpcGUsIHBsYW5lX2lkKSk7Ci0KLQlp ZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkKLQkJcGl4ZWxfZm9ybWF0ID0gdmFsICYgSUNM X1BMQU5FX0NUTF9GT1JNQVRfTUFTSzsKLQllbHNlCi0JCXBpeGVsX2Zvcm1hdCA9IHZhbCAmIFBM QU5FX0NUTF9GT1JNQVRfTUFTSzsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8 IElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKSB7Ci0JCWFscGhhID0gaW50ZWxfZGVfcmVhZChkZXZf cHJpdiwKLQkJCQkgICAgICBQTEFORV9DT0xPUl9DVEwocGlwZSwgcGxhbmVfaWQpKTsKLQkJYWxw aGEgJj0gUExBTkVfQ09MT1JfQUxQSEFfTUFTSzsKLQl9IGVsc2UgewotCQlhbHBoYSA9IHZhbCAm IFBMQU5FX0NUTF9BTFBIQV9NQVNLOwotCX0KLQotCWZvdXJjYyA9IHNrbF9mb3JtYXRfdG9fZm91 cmNjKHBpeGVsX2Zvcm1hdCwKLQkJCQkgICAgICB2YWwgJiBQTEFORV9DVExfT1JERVJfUkdCWCwg YWxwaGEpOwotCWZiLT5mb3JtYXQgPSBkcm1fZm9ybWF0X2luZm8oZm91cmNjKTsKLQotCXRpbGlu ZyA9IHZhbCAmIFBMQU5FX0NUTF9USUxFRF9NQVNLOwotCXN3aXRjaCAodGlsaW5nKSB7Ci0JY2Fz ZSBQTEFORV9DVExfVElMRURfTElORUFSOgotCQlmYi0+bW9kaWZpZXIgPSBEUk1fRk9STUFUX01P RF9MSU5FQVI7Ci0JCWJyZWFrOwotCWNhc2UgUExBTkVfQ1RMX1RJTEVEX1g6Ci0JCXBsYW5lX2Nv bmZpZy0+dGlsaW5nID0gSTkxNV9USUxJTkdfWDsKLQkJZmItPm1vZGlmaWVyID0gSTkxNV9GT1JN QVRfTU9EX1hfVElMRUQ7Ci0JCWJyZWFrOwotCWNhc2UgUExBTkVfQ1RMX1RJTEVEX1k6Ci0JCXBs YW5lX2NvbmZpZy0+dGlsaW5nID0gSTkxNV9USUxJTkdfWTsKLQkJaWYgKHZhbCAmIFBMQU5FX0NU TF9SRU5ERVJfREVDT01QUkVTU0lPTl9FTkFCTEUpCi0JCQlmYi0+bW9kaWZpZXIgPSBJTlRFTF9H RU4oZGV2X3ByaXYpID49IDEyID8KLQkJCQlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9S Q19DQ1MgOgotCQkJCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzsKLQkJZWxzZSBpZiAodmFs ICYgUExBTkVfQ1RMX01FRElBX0RFQ09NUFJFU1NJT05fRU5BQkxFKQotCQkJZmItPm1vZGlmaWVy ID0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNfQ0NTOwotCQllbHNlCi0JCQlmYi0+ bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDsKLQkJYnJlYWs7Ci0JY2FzZSBQTEFO RV9DVExfVElMRURfWUY6Ci0JCWlmICh2YWwgJiBQTEFORV9DVExfUkVOREVSX0RFQ09NUFJFU1NJ T05fRU5BQkxFKQotCQkJZmItPm1vZGlmaWVyID0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0ND UzsKLQkJZWxzZQotCQkJZmItPm1vZGlmaWVyID0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOwot CQlicmVhazsKLQlkZWZhdWx0OgotCQlNSVNTSU5HX0NBU0UodGlsaW5nKTsKLQkJZ290byBlcnJv cjsKLQl9Ci0KLQkvKgotCSAqIERSTV9NT0RFX1JPVEFURV8gaXMgY291bnRlciBjbG9ja3dpc2Ug dG8gc3RheSBjb21wYXRpYmxlIHdpdGggWHJhbmRyCi0JICogd2hpbGUgaTkxNSBIVyByb3RhdGlv biBpcyBjbG9ja3dpc2UsIHRoYXRzIHdoeSB0aGlzIHN3YXBwaW5nLgotCSAqLwotCXN3aXRjaCAo dmFsICYgUExBTkVfQ1RMX1JPVEFURV9NQVNLKSB7Ci0JY2FzZSBQTEFORV9DVExfUk9UQVRFXzA6 Ci0JCXBsYW5lX2NvbmZpZy0+cm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfMDsKLQkJYnJlYWs7 Ci0JY2FzZSBQTEFORV9DVExfUk9UQVRFXzkwOgotCQlwbGFuZV9jb25maWctPnJvdGF0aW9uID0g RFJNX01PREVfUk9UQVRFXzI3MDsKLQkJYnJlYWs7Ci0JY2FzZSBQTEFORV9DVExfUk9UQVRFXzE4 MDoKLQkJcGxhbmVfY29uZmlnLT5yb3RhdGlvbiA9IERSTV9NT0RFX1JPVEFURV8xODA7Ci0JCWJy ZWFrOwotCWNhc2UgUExBTkVfQ1RMX1JPVEFURV8yNzA6Ci0JCXBsYW5lX2NvbmZpZy0+cm90YXRp b24gPSBEUk1fTU9ERV9ST1RBVEVfOTA7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChJTlRFTF9HRU4o ZGV2X3ByaXYpID49IDEwICYmCi0JICAgIHZhbCAmIFBMQU5FX0NUTF9GTElQX0hPUklaT05UQUwp Ci0JCXBsYW5lX2NvbmZpZy0+cm90YXRpb24gfD0gRFJNX01PREVfUkVGTEVDVF9YOwotCi0JLyog OTAvMjcwIGRlZ3JlZSByb3RhdGlvbiB3b3VsZCByZXF1aXJlIGV4dHJhIHdvcmsgKi8KLQlpZiAo ZHJtX3JvdGF0aW9uXzkwX29yXzI3MChwbGFuZV9jb25maWctPnJvdGF0aW9uKSkKLQkJZ290byBl cnJvcjsKLQotCWJhc2UgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQTEFORV9TVVJGKHBpcGUs IHBsYW5lX2lkKSkgJiAweGZmZmZmMDAwOwotCXBsYW5lX2NvbmZpZy0+YmFzZSA9IGJhc2U7Ci0K LQlvZmZzZXQgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQTEFORV9PRkZTRVQocGlwZSwgcGxh bmVfaWQpKTsKLQotCXZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIFBMQU5FX1NJWkUocGlw ZSwgcGxhbmVfaWQpKTsKLQlmYi0+aGVpZ2h0ID0gKCh2YWwgPj4gMTYpICYgMHhmZmZmKSArIDE7 Ci0JZmItPndpZHRoID0gKCh2YWwgPj4gMCkgJiAweGZmZmYpICsgMTsKLQotCXZhbCA9IGludGVs X2RlX3JlYWQoZGV2X3ByaXYsIFBMQU5FX1NUUklERShwaXBlLCBwbGFuZV9pZCkpOwotCXN0cmlk ZV9tdWx0ID0gc2tsX3BsYW5lX3N0cmlkZV9tdWx0KGZiLCAwLCBEUk1fTU9ERV9ST1RBVEVfMCk7 Ci0JZmItPnBpdGNoZXNbMF0gPSAodmFsICYgMHgzZmYpICogc3RyaWRlX211bHQ7Ci0KLQlhbGln bmVkX2hlaWdodCA9IGludGVsX2ZiX2FsaWduX2hlaWdodChmYiwgMCwgZmItPmhlaWdodCk7Ci0K LQlwbGFuZV9jb25maWctPnNpemUgPSBmYi0+cGl0Y2hlc1swXSAqIGFsaWduZWRfaGVpZ2h0Owot Ci0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCSAgICAiJXMvJXMgd2l0aCBmYjogc2l6 ZT0lZHglZEAlZCwgb2Zmc2V0PSV4LCBwaXRjaCAlZCwgc2l6ZSAweCV4XG4iLAotCQkgICAgY3J0 Yy0+YmFzZS5uYW1lLCBwbGFuZS0+YmFzZS5uYW1lLCBmYi0+d2lkdGgsIGZiLT5oZWlnaHQsCi0J CSAgICBmYi0+Zm9ybWF0LT5jcHBbMF0gKiA4LCBiYXNlLCBmYi0+cGl0Y2hlc1swXSwKLQkJICAg IHBsYW5lX2NvbmZpZy0+c2l6ZSk7Ci0KLQlwbGFuZV9jb25maWctPmZiID0gaW50ZWxfZmI7Ci0J cmV0dXJuOwotCi1lcnJvcjoKLQlrZnJlZShpbnRlbF9mYik7Ci19Ci0KIHN0YXRpYyB2b2lkIGls a19nZXRfcGZpdF9jb25maWcoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCiB7 CiAJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVh cGkuY3J0Yyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2Rpc3BsYXkuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5o CmluZGV4IGJiNzJkZTE1Mjk0OS4uMGIyZmVkNThiYWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaApAQCAtNTIsNiArNTIsNyBAQCBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZTsKIHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQ7CiBzdHJ1Y3QgaW50ZWxf ZHA7CiBzdHJ1Y3QgaW50ZWxfZW5jb2RlcjsKK3N0cnVjdCBpbnRlbF9pbml0aWFsX3BsYW5lX2Nv bmZpZzsKIHN0cnVjdCBpbnRlbF9sb2FkX2RldGVjdF9waXBlOwogc3RydWN0IGludGVsX3BsYW5l Owogc3RydWN0IGludGVsX3BsYW5lX3N0YXRlOwpAQCAtNTA4LDcgKzUwOSw2IEBAIHZvaWQgaW50 ZWxfbGlua19jb21wdXRlX21fbih1MTYgYnBwLCBpbnQgbmxhbmVzLAogCQkJICAgIHN0cnVjdCBp bnRlbF9saW5rX21fbiAqbV9uLAogCQkJICAgIGJvb2wgY29uc3RhbnRfbiwgYm9vbCBmZWNfZW5h YmxlKTsKIGJvb2wgaXNfY2NzX21vZGlmaWVyKHU2NCBtb2RpZmllcik7Ci1pbnQgaW50ZWxfbWFp bl90b19hdXhfcGxhbmUoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBtYWlu X3BsYW5lKTsKIHZvaWQgbHB0X2Rpc2FibGVfY2xrb3V0X2RwKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdik7CiB1MzIgaW50ZWxfcGxhbmVfZmJfbWF4X3N0cmlkZShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkgICAgICB1MzIgcGl4ZWxfZm9ybWF0LCB1NjQg bW9kaWZpZXIpOwpAQCAtNjIxLDE4ICs2MjEsNyBAQCB1MzIgc2tsX3NjYWxlcl9nZXRfZmlsdGVy X3NlbGVjdChlbnVtIGRybV9zY2FsaW5nX2ZpbHRlciBmaWx0ZXIsIGludCBzZXQpOwogdm9pZCBz a2xfc2NhbGVyX3NldHVwX2ZpbHRlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs IGVudW0gcGlwZSBwaXBlLAogCQkJICAgICBpbnQgaWQsIGludCBzZXQsIGVudW0gZHJtX3NjYWxp bmdfZmlsdGVyIGZpbHRlcik7CiB2b2lkIGlsa19wZml0X2Rpc2FibGUoY29uc3Qgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKTsKLXUzMiBnbGtfcGxhbmVfY29sb3JfY3Rs KGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkJY29uc3Qgc3Ry dWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSk7Ci11MzIgZ2xrX3BsYW5lX2NvbG9y X2N0bF9jcnRjKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKLXUz MiBza2xfcGxhbmVfY3RsKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRl LAotCQkgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwotdTMy IHNrbF9wbGFuZV9jdGxfY3J0Yyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSk7Ci11MzIgc2tsX3BsYW5lX3N0cmlkZShjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlLAotCQkgICAgIGludCBwbGFuZSk7Ci1pbnQgc2tsX2NoZWNrX3BsYW5l X3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSk7Ci1pbnQgc2ts X2NhbGNfbWFpbl9zdXJmYWNlX29mZnNldChjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlLAotCQkJCSBpbnQgKngsIGludCAqeSwgdTMyICpvZmZzZXQpOwotaW50IHNr bF9mb3JtYXRfdG9fZm91cmNjKGludCBmb3JtYXQsIGJvb2wgcmdiX29yZGVyLCBib29sIGFscGhh KTsKKwogaW50IGJkd19nZXRfcGlwZW1pc2NfYnBwKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKTsK IHVuc2lnbmVkIGludCBpbnRlbF9wbGFuZV9mZW5jZV95X29mZnNldChjb25zdCBzdHJ1Y3QgaW50 ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsKIApAQCAtNjU1LDYgKzY0NCwxOCBAQCBzdHJ1 Y3QgaW50ZWxfZW5jb2RlciAqCiBpbnRlbF9nZXRfY3J0Y19uZXdfZW5jb2Rlcihjb25zdCBzdHJ1 Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKIAkJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKIAordW5zaWduZWQgaW50IGludGVsX3N1cmZfYWxpZ25t ZW50KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJCSAgaW50IGNvbG9yX3Bs YW5lKTsKK3ZvaWQgaW50ZWxfZmJfcGxhbmVfZ2V0X3N1YnNhbXBsaW5nKGludCAqaHN1YiwgaW50 ICp2c3ViLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCQkg ICAgaW50IGNvbG9yX3BsYW5lKTsKK3UzMiBpbnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZz ZXQoaW50ICp4LCBpbnQgKnksCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0 YXRlICpzdGF0ZSwKKwkJCQkgICAgICBpbnQgY29sb3JfcGxhbmUsCisJCQkJICAgICAgdTMyIG9s ZF9vZmZzZXQsIHUzMiBuZXdfb2Zmc2V0KTsKK3Vuc2lnbmVkIGludCBpbnRlbF90aWxlX3dpZHRo X2J5dGVzKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUp OwordW5zaWduZWQgaW50IGludGVsX3RpbGVfaGVpZ2h0KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUpOworCiAvKiBtb2Rlc2V0dGluZyAqLwogdm9pZCBp bnRlbF9tb2Rlc2V0X2luaXRfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwogaW50 IGludGVsX21vZGVzZXRfaW5pdF9ub2lycShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlf dHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBl cy5oCmluZGV4IGI2MDFlODA0Zjg1NC4uNThjZWM1OWZkNGY3IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaAorKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaApAQCAtMzcsNiArMzcs NyBAQAogI2luY2x1ZGUgPGRybS9kcm1fZHBfbXN0X2hlbHBlci5oPgogI2luY2x1ZGUgPGRybS9k cm1fZW5jb2Rlci5oPgogI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9mb3VyY2MuaD4KICNpbmNsdWRlIDxkcm0vZHJtX3Byb2JlX2hlbHBlci5oPgogI2lu Y2x1ZGUgPGRybS9kcm1fcmVjdC5oPgogI2luY2x1ZGUgPGRybS9kcm1fdmJsYW5rLmg+CkBAIC0x ODc1LDQgKzE4NzYsMjQgQEAgc3RhdGljIGlubGluZSB1MzIgaW50ZWxfZmRpX2xpbmtfZnJlcShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCXJldHVybiBkZXZfcHJpdi0+ZmRp X3BsbF9mcmVxOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfY2NzX3BsYW5lKGNvbnN0IHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUpCit7CisJaWYgKCFpc19jY3NfbW9k aWZpZXIoZmItPm1vZGlmaWVyKSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHBsYW5lID49 IGZiLT5mb3JtYXQtPm51bV9wbGFuZXMgLyAyOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNf Z2VuMTJfY2NzX21vZGlmaWVyKHU2NCBtb2RpZmllcikKK3sKKwlyZXR1cm4gbW9kaWZpZXIgPT0g STkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTIHx8CisJICAgICAgIG1vZGlmaWVy ID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUzsKKworfQorCitzdGF0aWMg aW5saW5lIGJvb2wgaXNfZ2VuMTJfY2NzX3BsYW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLCBpbnQgcGxhbmUpCit7CisJcmV0dXJuIGlzX2dlbjEyX2Njc19tb2RpZmllcihmYi0+ bW9kaWZpZXIpICYmIGlzX2Njc19wbGFuZShmYiwgcGxhbmUpOworfQorCiAjZW5kaWYgLyogIF9f SU5URUxfRElTUExBWV9UWVBFU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfcHNyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX3Bzci5jCmluZGV4IDFlNmMxZmE1OWQ0YS4uNTY4OGVkZDRkZDY0IDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bzci5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHNyLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl ICJpbnRlbF9wc3IuaCIKICNpbmNsdWRlICJpbnRlbF9zcHJpdGUuaCIKICNpbmNsdWRlICJpbnRl bF9oZG1pLmgiCisjaW5jbHVkZSAic2tsX3VuaXZlcnNhbF9wbGFuZS5oIgogCiAvKioKICAqIERP QzogUGFuZWwgU2VsZiBSZWZyZXNoIChQU1IvU1JEKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfc3ByaXRlLmMKaW5kZXggYWRjNWYwODhkNDU4Li44M2U3MzMxZjc5ZDUgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUuYwpAQCAtMzY1LDIx MiArMzY1LDcgQEAgaW50IGludGVsX3BsYW5lX2NoZWNrX3NyY19jb29yZGluYXRlcyhzdHJ1Y3Qg aW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMg dTggaWNsX252MTJfeV9wbGFuZV9tYXNrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQot ewotCWlmIChJU19ST0NLRVRMQUtFKGk5MTUpKQotCQlyZXR1cm4gQklUKFBMQU5FX1NQUklURTIp IHwgQklUKFBMQU5FX1NQUklURTMpOwotCWVsc2UKLQkJcmV0dXJuIEJJVChQTEFORV9TUFJJVEU0 KSB8IEJJVChQTEFORV9TUFJJVEU1KTsKLX0KLQotYm9vbCBpY2xfaXNfbnYxMl95X3BsYW5lKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCSBlbnVtIHBsYW5lX2lkIHBsYW5l X2lkKQotewotCXJldHVybiBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExICYmCi0JCWljbF9udjEy X3lfcGxhbmVfbWFzayhkZXZfcHJpdikgJiBCSVQocGxhbmVfaWQpOwotfQotCi1ib29sIGljbF9p c19oZHJfcGxhbmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBsYW5l X2lkIHBsYW5lX2lkKQotewotCXJldHVybiBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExICYmCi0J CWljbF9oZHJfcGxhbmVfbWFzaygpICYgQklUKHBsYW5lX2lkKTsKLX0KLQotc3RhdGljIHZvaWQK LXNrbF9wbGFuZV9yYXRpbyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSwKLQkJY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKLQkJdW5z aWduZWQgaW50ICpudW0sIHVuc2lnbmVkIGludCAqZGVuKQotewotCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7 Ci0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7 Ci0KLQlpZiAoZmItPmZvcm1hdC0+Y3BwWzBdID09IDgpIHsKLQkJaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpIHsKLQkJCSpudW0gPSAxMDsK LQkJCSpkZW4gPSA4OwotCQl9IGVsc2UgewotCQkJKm51bSA9IDk7Ci0JCQkqZGVuID0gODsKLQkJ fQotCX0gZWxzZSB7Ci0JCSpudW0gPSAxOwotCQkqZGVuID0gMTsKLQl9Ci19Ci0KLXN0YXRpYyBp bnQgc2tsX3BsYW5lX21pbl9jZGNsayhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUo cGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7Ci0JdW5zaWduZWQgaW50IG51bSwgZGVuOwot CXVuc2lnbmVkIGludCBwaXhlbF9yYXRlID0gaW50ZWxfcGxhbmVfcGl4ZWxfcmF0ZShjcnRjX3N0 YXRlLCBwbGFuZV9zdGF0ZSk7Ci0KLQlza2xfcGxhbmVfcmF0aW8oY3J0Y19zdGF0ZSwgcGxhbmVf c3RhdGUsICZudW0sICZkZW4pOwotCi0JLyogdHdvIHBpeGVscyBwZXIgY2xvY2sgb24gZ2xrKyAq LwotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlOSUxBS0UoZGV2X3By aXYpKQotCQlkZW4gKj0gMjsKLQotCXJldHVybiBESVZfUk9VTkRfVVAocGl4ZWxfcmF0ZSAqIG51 bSwgZGVuKTsKLX0KLQotc3RhdGljIGludCBza2xfcGxhbmVfbWF4X3dpZHRoKGNvbnN0IHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkJICAgICAgIGludCBjb2xvcl9wbGFuZSwKLQkJCSAg ICAgICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCi17Ci0JaW50IGNwcCA9IGZiLT5mb3JtYXQtPmNw cFtjb2xvcl9wbGFuZV07Ci0KLQlzd2l0Y2ggKGZiLT5tb2RpZmllcikgewotCWNhc2UgRFJNX0ZP Uk1BVF9NT0RfTElORUFSOgotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6Ci0JCS8qCi0J CSAqIFZhbGlkYXRlZCBsaW1pdCBpcyA0aywgYnV0IGhhcyA1ayBzaG91bGQKLQkJICogd29yayBh cGFydCBmcm9tIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXM6Ci0JCSAqIC0gWXRpbGUgKGFscmVhZHkg bGltaXRlZCB0byA0aykKLQkJICogLSBGUDE2IChhbHJlYWR5IGxpbWl0ZWQgdG8gNGspCi0JCSAq IC0gcmVuZGVyIGNvbXByZXNzaW9uIChhbHJlYWR5IGxpbWl0ZWQgdG8gNGspCi0JCSAqIC0gS1ZN UiBzcHJpdGUgYW5kIGN1cnNvciAoZG9uJ3QgY2FyZSkKLQkJICogLSBob3Jpem9udGFsIHBhbm5p bmcgKFRPRE8gdmVyaWZ5IHRoaXMpCi0JCSAqIC0gcGlwZSBhbmQgcGxhbmUgc2NhbGluZyAoVE9E TyB2ZXJpZnkgdGhpcykKLQkJICovCi0JCWlmIChjcHAgPT0gOCkKLQkJCXJldHVybiA0MDk2Owot CQllbHNlCi0JCQlyZXR1cm4gNTEyMDsKLQljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0ND UzoKLQljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M6Ci0JY2FzZSBJOTE1X0ZPUk1B VF9NT0RfWV9USUxFRF9HRU4xMl9NQ19DQ1M6Ci0JCS8qIEZJWE1FIEFVWCBwbGFuZT8gKi8KLQlj YXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJ TEVEOgotCQlpZiAoY3BwID09IDgpCi0JCQlyZXR1cm4gMjA0ODsKLQkJZWxzZQotCQkJcmV0dXJu IDQwOTY7Ci0JZGVmYXVsdDoKLQkJTUlTU0lOR19DQVNFKGZiLT5tb2RpZmllcik7Ci0JCXJldHVy biAyMDQ4OwotCX0KLX0KLQotc3RhdGljIGludCBnbGtfcGxhbmVfbWF4X3dpZHRoKGNvbnN0IHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkJICAgICAgIGludCBjb2xvcl9wbGFuZSwKLQkJ CSAgICAgICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCi17Ci0JaW50IGNwcCA9IGZiLT5mb3JtYXQt PmNwcFtjb2xvcl9wbGFuZV07Ci0KLQlzd2l0Y2ggKGZiLT5tb2RpZmllcikgewotCWNhc2UgRFJN X0ZPUk1BVF9NT0RfTElORUFSOgotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6Ci0JCWlm IChjcHAgPT0gOCkKLQkJCXJldHVybiA0MDk2OwotCQllbHNlCi0JCQlyZXR1cm4gNTEyMDsKLQlj YXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKLQljYXNlIEk5MTVfRk9STUFUX01PRF9Z Zl9USUxFRF9DQ1M6Ci0JCS8qIEZJWE1FIEFVWCBwbGFuZT8gKi8KLQljYXNlIEk5MTVfRk9STUFU X01PRF9ZX1RJTEVEOgotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgotCQlpZiAoY3Bw ID09IDgpCi0JCQlyZXR1cm4gMjA0ODsKLQkJZWxzZQotCQkJcmV0dXJuIDUxMjA7Ci0JZGVmYXVs dDoKLQkJTUlTU0lOR19DQVNFKGZiLT5tb2RpZmllcik7Ci0JCXJldHVybiAyMDQ4OwotCX0KLX0K LQotc3RhdGljIGludCBpY2xfcGxhbmVfbWluX3dpZHRoKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiLAotCQkJICAgICAgIGludCBjb2xvcl9wbGFuZSwKLQkJCSAgICAgICB1bnNpZ25l ZCBpbnQgcm90YXRpb24pCi17Ci0JLyogV2FfMTQwMTEyNjQ2NTcsIFdhXzE0MDExMDUwNTYzOiBn ZW4xMSsgKi8KLQlzd2l0Y2ggKGZiLT5mb3JtYXQtPmZvcm1hdCkgewotCWNhc2UgRFJNX0ZPUk1B VF9DODoKLQkJcmV0dXJuIDE4OwotCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6Ci0JCXJldHVybiAx MDsKLQljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4 OgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKLQljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6 Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEw MTAxMDoKLQljYXNlIERSTV9GT1JNQVRfQVJHQjIxMDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX0FC R1IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9YVllVMjEwMTAxMDoKLQljYXNlIERSTV9GT1JN QVRfWTIxMjoKLQljYXNlIERSTV9GT1JNQVRfWTIxNjoKLQkJcmV0dXJuIDY7Ci0JY2FzZSBEUk1f Rk9STUFUX05WMTI6Ci0JCXJldHVybiAyMDsKLQljYXNlIERSTV9GT1JNQVRfUDAxMDoKLQljYXNl IERSTV9GT1JNQVRfUDAxMjoKLQljYXNlIERSTV9GT1JNQVRfUDAxNjoKLQkJcmV0dXJuIDEyOwot CWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTYx NjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1B VF9BQkdSMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTJfMTYxNjE2MTY6Ci0JY2Fz ZSBEUk1fRk9STUFUX1hWWVUxNjE2MTYxNjoKLQkJcmV0dXJuIDQ7Ci0JZGVmYXVsdDoKLQkJcmV0 dXJuIDE7Ci0JfQotfQotCi1zdGF0aWMgaW50IGljbF9wbGFuZV9tYXhfd2lkdGgoY29uc3Qgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCi0JCQkgICAgICAgaW50IGNvbG9yX3BsYW5lLAotCQkJ ICAgICAgIHVuc2lnbmVkIGludCByb3RhdGlvbikKLXsKLQlyZXR1cm4gNTEyMDsKLX0KLQotc3Rh dGljIGludCBza2xfcGxhbmVfbWF4X2hlaWdodChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiwKLQkJCQlpbnQgY29sb3JfcGxhbmUsCi0JCQkJdW5zaWduZWQgaW50IHJvdGF0aW9uKQot ewotCXJldHVybiA0MDk2OwotfQotCi1zdGF0aWMgaW50IGljbF9wbGFuZV9tYXhfaGVpZ2h0KGNv bnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkJCWludCBjb2xvcl9wbGFuZSwKLQkJ CQl1bnNpZ25lZCBpbnQgcm90YXRpb24pCi17Ci0JcmV0dXJuIDQzMjA7Ci19Ci0KLXN0YXRpYyB1 bnNpZ25lZCBpbnQKLXNrbF9wbGFuZV9tYXhfc3RyaWRlKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxh bmUsCi0JCSAgICAgdTMyIHBpeGVsX2Zvcm1hdCwgdTY0IG1vZGlmaWVyLAotCQkgICAgIHVuc2ln bmVkIGludCByb3RhdGlvbikKLXsKLQljb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICppbmZv ID0gZHJtX2Zvcm1hdF9pbmZvKHBpeGVsX2Zvcm1hdCk7Ci0JaW50IGNwcCA9IGluZm8tPmNwcFsw XTsKLQotCS8qCi0JICogIlRoZSBzdHJpZGUgaW4gYnl0ZXMgbXVzdCBub3QgZXhjZWVkIHRoZQot CSAqIG9mIHRoZSBzaXplIG9mIDhLIHBpeGVscyBhbmQgMzJLIGJ5dGVzLiIKLQkgKi8KLQlpZiAo ZHJtX3JvdGF0aW9uXzkwX29yXzI3MChyb3RhdGlvbikpCi0JCXJldHVybiBtaW4oODE5MiwgMzI3 NjggLyBjcHApOwotCWVsc2UKLQkJcmV0dXJuIG1pbig4MTkyICogY3BwLCAzMjc2OCk7Ci19Ci0K LXN0YXRpYyB2b2lkCit2b2lkCiBza2xfcHJvZ3JhbV9zY2FsZXIoc3RydWN0IGludGVsX3BsYW5l ICpwbGFuZSwKIAkJICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUs CiAJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCkBAIC02 MzIsMzU4ICs0MjcsNiBAQCBza2xfcHJvZ3JhbV9zY2FsZXIoc3RydWN0IGludGVsX3BsYW5lICpw bGFuZSwKIAkJCSAgKGNydGNfdyA8PCAxNikgfCBjcnRjX2gpOwogfQogCi0vKiBQcmVvZmZzZXQg dmFsdWVzIGZvciBZVVYgdG8gUkdCIENvbnZlcnNpb24gKi8KLSNkZWZpbmUgUFJFT0ZGX1lVVl9U T19SR0JfSEkJCTB4MTgwMAotI2RlZmluZSBQUkVPRkZfWVVWX1RPX1JHQl9NRQkJMHgxRjAwCi0j ZGVmaW5lIFBSRU9GRl9ZVVZfVE9fUkdCX0xPCQkweDE4MDAKLQotI2RlZmluZSAgUk9GRih4KSAg ICAgICAgICAoKCh4KSAmIDB4ZmZmZikgPDwgMTYpCi0jZGVmaW5lICBHT0ZGKHgpICAgICAgICAg ICgoKHgpICYgMHhmZmZmKSA8PCAwKQotI2RlZmluZSAgQk9GRih4KSAgICAgICAgICAoKCh4KSAm IDB4ZmZmZikgPDwgMTYpCi0KLXN0YXRpYyB2b2lkCi1pY2xfcHJvZ3JhbV9pbnB1dF9jc2Moc3Ry dWN0IGludGVsX3BsYW5lICpwbGFuZSwKLQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUsCi0JCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZSAqcGxhbmVfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g dG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwotCWVudW0gcGlwZSBwaXBlID0gcGxhbmUtPnBpcGU7 Ci0JZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHBsYW5lLT5pZDsKLQotCXN0YXRpYyBjb25zdCB1 MTYgaW5wdXRfY3NjX21hdHJpeFtdWzldID0gewotCQkvKgotCQkgKiBCVC42MDEgZnVsbCByYW5n ZSBZQ2JDciAtPiBmdWxsIHJhbmdlIFJHQgotCQkgKiBUaGUgbWF0cml4IHJlcXVpcmVkIGlzIDoK LQkJICogWzEuMDAwLCAwLjAwMCwgMS4zNzEsCi0JCSAqICAxLjAwMCwgLTAuMzM2LCAtMC42OTgs Ci0JCSAqICAxLjAwMCwgMS43MzIsIDAuMDAwMF0KLQkJICovCi0JCVtEUk1fQ09MT1JfWUNCQ1Jf QlQ2MDFdID0gewotCQkJMHg3QUY4LCAweDc4MDAsIDB4MCwKLQkJCTB4OEIyOCwgMHg3ODAwLCAw eDlBQzAsCi0JCQkweDAsIDB4NzgwMCwgMHg3REQ4LAotCQl9LAotCQkvKgotCQkgKiBCVC43MDkg ZnVsbCByYW5nZSBZQ2JDciAtPiBmdWxsIHJhbmdlIFJHQgotCQkgKiBUaGUgbWF0cml4IHJlcXVp cmVkIGlzIDoKLQkJICogWzEuMDAwLCAwLjAwMCwgMS41NzQsCi0JCSAqICAxLjAwMCwgLTAuMTg3 LCAtMC40NjgsCi0JCSAqICAxLjAwMCwgMS44NTUsIDAuMDAwMF0KLQkJICovCi0JCVtEUk1fQ09M T1JfWUNCQ1JfQlQ3MDldID0gewotCQkJMHg3Qzk4LCAweDc4MDAsIDB4MCwKLQkJCTB4OUVGOCwg MHg3ODAwLCAweEFDMDAsCi0JCQkweDAsIDB4NzgwMCwgIDB4N0VEOCwKLQkJfSwKLQkJLyoKLQkJ ICogQlQuMjAyMCBmdWxsIHJhbmdlIFlDYkNyIC0+IGZ1bGwgcmFuZ2UgUkdCCi0JCSAqIFRoZSBt YXRyaXggcmVxdWlyZWQgaXMgOgotCQkgKiBbMS4wMDAsIDAuMDAwLCAxLjQ3NCwKLQkJICogIDEu MDAwLCAtMC4xNjQ1LCAtMC41NzEzLAotCQkgKiAgMS4wMDAsIDEuODgxNCwgMC4wMDAwXQotCQkg Ki8KLQkJW0RSTV9DT0xPUl9ZQ0JDUl9CVDIwMjBdID0gewotCQkJMHg3QkM4LCAweDc4MDAsIDB4 MCwKLQkJCTB4ODkyOCwgMHg3ODAwLCAweEFBODgsCi0JCQkweDAsIDB4NzgwMCwgMHg3RjEwLAot CQl9LAotCX07Ci0KLQkvKiBNYXRyaXggZm9yIExpbWl0ZWQgUmFuZ2UgdG8gRnVsbCBSYW5nZSBD b252ZXJzaW9uICovCi0Jc3RhdGljIGNvbnN0IHUxNiBpbnB1dF9jc2NfbWF0cml4X2xyW11bOV0g PSB7Ci0JCS8qCi0JCSAqIEJULjYwMSBMaW10ZWQgcmFuZ2UgWUNiQ3IgLT4gZnVsbCByYW5nZSBS R0IKLQkJICogVGhlIG1hdHJpeCByZXF1aXJlZCBpcyA6Ci0JCSAqIFsxLjE2NDM4NCwgMC4wMDAs IDEuNTk2MDI3LAotCQkgKiAgMS4xNjQzODQsIC0wLjM5MTc1LCAtMC44MTI4MTMsCi0JCSAqICAx LjE2NDM4NCwgMi4wMTcyMzIsIDAuMDAwMF0KLQkJICovCi0JCVtEUk1fQ09MT1JfWUNCQ1JfQlQ2 MDFdID0gewotCQkJMHg3Q0M4LCAweDc5NTAsIDB4MCwKLQkJCTB4OEQwMCwgMHg3OTUwLCAweDlD ODgsCi0JCQkweDAsIDB4Nzk1MCwgMHg2ODEwLAotCQl9LAotCQkvKgotCQkgKiBCVC43MDkgTGlt aXRlZCByYW5nZSBZQ2JDciAtPiBmdWxsIHJhbmdlIFJHQgotCQkgKiBUaGUgbWF0cml4IHJlcXVp cmVkIGlzIDoKLQkJICogWzEuMTY0Mzg0LCAwLjAwMCwgMS43OTI3NDEsCi0JCSAqICAxLjE2NDM4 NCwgLTAuMjEzMjQ5LCAtMC41MzI5MDksCi0JCSAqICAxLjE2NDM4NCwgMi4xMTI0MDIsIDAuMDAw MF0KLQkJICovCi0JCVtEUk1fQ09MT1JfWUNCQ1JfQlQ3MDldID0gewotCQkJMHg3RTU4LCAweDc5 NTAsIDB4MCwKLQkJCTB4ODg4OCwgMHg3OTUwLCAweEFEQTgsCi0JCQkweDAsIDB4Nzk1MCwgIDB4 Njg3MCwKLQkJfSwKLQkJLyoKLQkJICogQlQuMjAyMCBMaW1pdGVkIHJhbmdlIFlDYkNyIC0+IGZ1 bGwgcmFuZ2UgUkdCCi0JCSAqIFRoZSBtYXRyaXggcmVxdWlyZWQgaXMgOgotCQkgKiBbMS4xNjQs IDAuMDAwLCAxLjY3OCwKLQkJICogIDEuMTY0LCAtMC4xODczLCAtMC42NTA0LAotCQkgKiAgMS4x NjQsIDIuMTQxNywgMC4wMDAwXQotCQkgKi8KLQkJW0RSTV9DT0xPUl9ZQ0JDUl9CVDIwMjBdID0g ewotCQkJMHg3RDcwLCAweDc5NTAsIDB4MCwKLQkJCTB4OEE2OCwgMHg3OTUwLCAweEFDMDAsCi0J CQkweDAsIDB4Nzk1MCwgMHg2ODkwLAotCQl9LAotCX07Ci0JY29uc3QgdTE2ICpjc2M7Ci0KLQlp ZiAocGxhbmVfc3RhdGUtPmh3LmNvbG9yX3JhbmdlID09IERSTV9DT0xPUl9ZQ0JDUl9GVUxMX1JB TkdFKQotCQljc2MgPSBpbnB1dF9jc2NfbWF0cml4W3BsYW5lX3N0YXRlLT5ody5jb2xvcl9lbmNv ZGluZ107Ci0JZWxzZQotCQljc2MgPSBpbnB1dF9jc2NfbWF0cml4X2xyW3BsYW5lX3N0YXRlLT5o dy5jb2xvcl9lbmNvZGluZ107Ci0KLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVf SU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCAwKSwKLQkJCSAgUk9GRihjc2NbMF0pIHwg R09GRihjc2NbMV0pKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRf Q1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCAxKSwKLQkJCSAgQk9GRihjc2NbMl0pKTsKLQlpbnRl bF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5l X2lkLCAyKSwKLQkJCSAgUk9GRihjc2NbM10pIHwgR09GRihjc2NbNF0pKTsKLQlpbnRlbF9kZV93 cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCAz KSwKLQkJCSAgQk9GRihjc2NbNV0pKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExB TkVfSU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCA0KSwKLQkJCSAgUk9GRihjc2NbNl0p IHwgR09GRihjc2NbN10pKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5Q VVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCA1KSwKLQkJCSAgQk9GRihjc2NbOF0pKTsKLQot CWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9JTlBVVF9DU0NfUFJFT0ZGKHBpcGUs IHBsYW5lX2lkLCAwKSwKLQkJCSAgUFJFT0ZGX1lVVl9UT19SR0JfSEkpOwotCWlmIChwbGFuZV9z dGF0ZS0+aHcuY29sb3JfcmFuZ2UgPT0gRFJNX0NPTE9SX1lDQkNSX0ZVTExfUkFOR0UpCi0JCWlu dGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LAotCQkJCSAgUExBTkVfSU5QVVRfQ1NDX1BSRU9GRihw aXBlLCBwbGFuZV9pZCwgMSksCi0JCQkJICAwKTsKLQllbHNlCi0JCWludGVsX2RlX3dyaXRlX2Z3 KGRldl9wcml2LAotCQkJCSAgUExBTkVfSU5QVVRfQ1NDX1BSRU9GRihwaXBlLCBwbGFuZV9pZCwg MSksCi0JCQkJICBQUkVPRkZfWVVWX1RPX1JHQl9NRSk7Ci0JaW50ZWxfZGVfd3JpdGVfZncoZGV2 X3ByaXYsIFBMQU5FX0lOUFVUX0NTQ19QUkVPRkYocGlwZSwgcGxhbmVfaWQsIDIpLAotCQkJICBQ UkVPRkZfWVVWX1RPX1JHQl9MTyk7Ci0JaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsCi0JCQkg IFBMQU5FX0lOUFVUX0NTQ19QT1NUT0ZGKHBpcGUsIHBsYW5lX2lkLCAwKSwgMHgwKTsKLQlpbnRl bF9kZV93cml0ZV9mdyhkZXZfcHJpdiwKLQkJCSAgUExBTkVfSU5QVVRfQ1NDX1BPU1RPRkYocGlw ZSwgcGxhbmVfaWQsIDEpLCAweDApOwotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LAotCQkJ ICBQTEFORV9JTlBVVF9DU0NfUE9TVE9GRihwaXBlLCBwbGFuZV9pZCwgMiksIDB4MCk7Ci19Ci0K LXN0YXRpYyB2b2lkCi1za2xfcGxhbmVfYXN5bmNfZmxpcChzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBs YW5lLAotCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAot CQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCi0JCSAg ICAgYm9vbCBhc3luY19mbGlwKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKLQl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwot CWVudW0gcGxhbmVfaWQgcGxhbmVfaWQgPSBwbGFuZS0+aWQ7Ci0JZW51bSBwaXBlIHBpcGUgPSBw bGFuZS0+cGlwZTsKLQl1MzIgc3VyZl9hZGRyID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBd Lm9mZnNldDsKLQl1MzIgcGxhbmVfY3RsID0gcGxhbmVfc3RhdGUtPmN0bDsKLQotCXBsYW5lX2N0 bCB8PSBza2xfcGxhbmVfY3RsX2NydGMoY3J0Y19zdGF0ZSk7Ci0KLQlpZiAoYXN5bmNfZmxpcCkK LQkJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9BU1lOQ19GTElQOwotCi0Jc3Bpbl9sb2NrX2lycXNh dmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwotCi0JaW50ZWxfZGVfd3JpdGVf ZncoZGV2X3ByaXYsIFBMQU5FX0NUTChwaXBlLCBwbGFuZV9pZCksIHBsYW5lX2N0bCk7Ci0JaW50 ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX1NVUkYocGlwZSwgcGxhbmVfaWQpLAotCQkJ ICBpbnRlbF9wbGFuZV9nZ3R0X29mZnNldChwbGFuZV9zdGF0ZSkgKyBzdXJmX2FkZHIpOwotCi0J c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7 Ci19Ci0KLXN0YXRpYyB2b2lkCi1za2xfcHJvZ3JhbV9wbGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUg KnBsYW5lLAotCQkgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAot CQkgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCi0JCSAgaW50 IGNvbG9yX3BsYW5lKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRv X2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKLQllbnVtIHBsYW5lX2lkIHBsYW5lX2lkID0gcGxhbmUt PmlkOwotCWVudW0gcGlwZSBwaXBlID0gcGxhbmUtPnBpcGU7Ci0JY29uc3Qgc3RydWN0IGRybV9p bnRlbF9zcHJpdGVfY29sb3JrZXkgKmtleSA9ICZwbGFuZV9zdGF0ZS0+Y2tleTsKLQl1MzIgc3Vy Zl9hZGRyID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2NvbG9yX3BsYW5lXS5vZmZzZXQ7Ci0J dTMyIHN0cmlkZSA9IHNrbF9wbGFuZV9zdHJpZGUocGxhbmVfc3RhdGUsIGNvbG9yX3BsYW5lKTsK LQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsK LQlpbnQgYXV4X3BsYW5lID0gaW50ZWxfbWFpbl90b19hdXhfcGxhbmUoZmIsIGNvbG9yX3BsYW5l KTsKLQlpbnQgY3J0Y194ID0gcGxhbmVfc3RhdGUtPnVhcGkuZHN0LngxOwotCWludCBjcnRjX3kg PSBwbGFuZV9zdGF0ZS0+dWFwaS5kc3QueTE7Ci0JdTMyIHggPSBwbGFuZV9zdGF0ZS0+Y29sb3Jf cGxhbmVbY29sb3JfcGxhbmVdLng7Ci0JdTMyIHkgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVb Y29sb3JfcGxhbmVdLnk7Ci0JdTMyIHNyY193ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRl LT51YXBpLnNyYykgPj4gMTY7Ci0JdTMyIHNyY19oID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9z dGF0ZS0+dWFwaS5zcmMpID4+IDE2OwotCXU4IGFscGhhID0gcGxhbmVfc3RhdGUtPmh3LmFscGhh ID4+IDg7Ci0JdTMyIHBsYW5lX2NvbG9yX2N0bCA9IDAsIGF1eF9kaXN0ID0gMDsKLQl1bnNpZ25l ZCBsb25nIGlycWZsYWdzOwotCXUzMiBrZXltc2ssIGtleW1heDsKLQl1MzIgcGxhbmVfY3RsID0g cGxhbmVfc3RhdGUtPmN0bDsKLQotCXBsYW5lX2N0bCB8PSBza2xfcGxhbmVfY3RsX2NydGMoY3J0 Y19zdGF0ZSk7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklM QUtFKGRldl9wcml2KSkKLQkJcGxhbmVfY29sb3JfY3RsID0gcGxhbmVfc3RhdGUtPmNvbG9yX2N0 bCB8Ci0JCQlnbGtfcGxhbmVfY29sb3JfY3RsX2NydGMoY3J0Y19zdGF0ZSk7Ci0KLQkvKiBTaXpl cyBhcmUgMCBiYXNlZCAqLwotCXNyY193LS07Ci0Jc3JjX2gtLTsKLQotCWtleW1heCA9IChrZXkt Pm1heF92YWx1ZSAmIDB4ZmZmZmZmKSB8IFBMQU5FX0tFWU1BWF9BTFBIQShhbHBoYSk7Ci0KLQlr ZXltc2sgPSBrZXktPmNoYW5uZWxfbWFzayAmIDB4N2ZmZmZmZjsKLQlpZiAoYWxwaGEgPCAweGZm KQotCQlrZXltc2sgfD0gUExBTkVfS0VZTVNLX0FMUEhBX0VOQUJMRTsKLQotCS8qIFRoZSBzY2Fs ZXIgd2lsbCBoYW5kbGUgdGhlIG91dHB1dCBwb3NpdGlvbiAqLwotCWlmIChwbGFuZV9zdGF0ZS0+ c2NhbGVyX2lkID49IDApIHsKLQkJY3J0Y194ID0gMDsKLQkJY3J0Y195ID0gMDsKLQl9Ci0KLQlp ZiAoYXV4X3BsYW5lKSB7Ci0JCWF1eF9kaXN0ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2F1 eF9wbGFuZV0ub2Zmc2V0IC0gc3VyZl9hZGRyOwotCi0JCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYp IDwgMTIpCi0JCQlhdXhfZGlzdCB8PSBza2xfcGxhbmVfc3RyaWRlKHBsYW5lX3N0YXRlLCBhdXhf cGxhbmUpOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ss IGlycWZsYWdzKTsKLQotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9TVFJJREUo cGlwZSwgcGxhbmVfaWQpLCBzdHJpZGUpOwotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQ TEFORV9QT1MocGlwZSwgcGxhbmVfaWQpLAotCQkJICAoY3J0Y195IDw8IDE2KSB8IGNydGNfeCk7 Ci0JaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX1NJWkUocGlwZSwgcGxhbmVfaWQp LAotCQkJICAoc3JjX2ggPDwgMTYpIHwgc3JjX3cpOwotCi0JaW50ZWxfZGVfd3JpdGVfZncoZGV2 X3ByaXYsIFBMQU5FX0FVWF9ESVNUKHBpcGUsIHBsYW5lX2lkKSwgYXV4X2Rpc3QpOwotCi0JaWYg KGljbF9pc19oZHJfcGxhbmUoZGV2X3ByaXYsIHBsYW5lX2lkKSkKLQkJaW50ZWxfZGVfd3JpdGVf ZncoZGV2X3ByaXYsIFBMQU5FX0NVU19DVEwocGlwZSwgcGxhbmVfaWQpLAotCQkJCSAgcGxhbmVf c3RhdGUtPmN1c19jdGwpOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNf R0VNSU5JTEFLRShkZXZfcHJpdikpCi0JCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFO RV9DT0xPUl9DVEwocGlwZSwgcGxhbmVfaWQpLAotCQkJCSAgcGxhbmVfY29sb3JfY3RsKTsKLQot CWlmIChmYi0+Zm9ybWF0LT5pc195dXYgJiYgaWNsX2lzX2hkcl9wbGFuZShkZXZfcHJpdiwgcGxh bmVfaWQpKQotCQlpY2xfcHJvZ3JhbV9pbnB1dF9jc2MocGxhbmUsIGNydGNfc3RhdGUsIHBsYW5l X3N0YXRlKTsKLQotCXNrbF93cml0ZV9wbGFuZV93bShwbGFuZSwgY3J0Y19zdGF0ZSk7Ci0KLQlp bnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfS0VZVkFMKHBpcGUsIHBsYW5lX2lkKSwK LQkJCSAga2V5LT5taW5fdmFsdWUpOwotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFO RV9LRVlNU0socGlwZSwgcGxhbmVfaWQpLCBrZXltc2spOwotCWludGVsX2RlX3dyaXRlX2Z3KGRl dl9wcml2LCBQTEFORV9LRVlNQVgocGlwZSwgcGxhbmVfaWQpLCBrZXltYXgpOwotCi0JaW50ZWxf ZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX09GRlNFVChwaXBlLCBwbGFuZV9pZCksCi0JCQkg ICh5IDw8IDE2KSB8IHgpOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCAxMSkKLQkJaW50 ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX0FVWF9PRkZTRVQocGlwZSwgcGxhbmVfaWQp LAotCQkJCSAgKHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsxXS55IDw8IDE2KSB8IHBsYW5lX3N0 YXRlLT5jb2xvcl9wbGFuZVsxXS54KTsKLQotCWlmICghZHJtX2F0b21pY19jcnRjX25lZWRzX21v ZGVzZXQoJmNydGNfc3RhdGUtPnVhcGkpKQotCQlpbnRlbF9wc3IyX3Byb2dyYW1fcGxhbmVfc2Vs X2ZldGNoKHBsYW5lLCBjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSwgY29sb3JfcGxhbmUpOwotCi0J LyoKLQkgKiBUaGUgY29udHJvbCByZWdpc3RlciBzZWxmLWFybXMgaWYgdGhlIHBsYW5lIHdhcyBw cmV2aW91c2x5Ci0JICogZGlzYWJsZWQuIFRyeSB0byBtYWtlIHRoZSBwbGFuZSBlbmFibGUgYXRv bWljIGJ5IHdyaXRpbmcKLQkgKiB0aGUgY29udHJvbCByZWdpc3RlciBqdXN0IGJlZm9yZSB0aGUg c3VyZmFjZSByZWdpc3Rlci4KLQkgKi8KLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExB TkVfQ1RMKHBpcGUsIHBsYW5lX2lkKSwgcGxhbmVfY3RsKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhk ZXZfcHJpdiwgUExBTkVfU1VSRihwaXBlLCBwbGFuZV9pZCksCi0JCQkgIGludGVsX3BsYW5lX2dn dHRfb2Zmc2V0KHBsYW5lX3N0YXRlKSArIHN1cmZfYWRkcik7Ci0KLQlpZiAocGxhbmVfc3RhdGUt PnNjYWxlcl9pZCA+PSAwKQotCQlza2xfcHJvZ3JhbV9zY2FsZXIocGxhbmUsIGNydGNfc3RhdGUs IHBsYW5lX3N0YXRlKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51bmNv cmUubG9jaywgaXJxZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZAotc2tsX3VwZGF0ZV9wbGFuZShz dHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAotCQkgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNydGNfc3RhdGUsCi0JCSBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlKQotewotCWludCBjb2xvcl9wbGFuZSA9IDA7Ci0KLQlpZiAocGxhbmVfc3RhdGUtPnBs YW5hcl9saW5rZWRfcGxhbmUgJiYgIXBsYW5lX3N0YXRlLT5wbGFuYXJfc2xhdmUpCi0JCS8qIFBy b2dyYW0gdGhlIFVWIHBsYW5lIG9uIHBsYW5hciBtYXN0ZXIgKi8KLQkJY29sb3JfcGxhbmUgPSAx OwotCi0Jc2tsX3Byb2dyYW1fcGxhbmUocGxhbmUsIGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlLCBj b2xvcl9wbGFuZSk7Ci19Ci1zdGF0aWMgdm9pZAotc2tsX2Rpc2FibGVfcGxhbmUoc3RydWN0IGlu dGVsX3BsYW5lICpwbGFuZSwKLQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KHBsYW5lLT5iYXNlLmRldik7Ci0JZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHBsYW5lLT5pZDsK LQllbnVtIHBpcGUgcGlwZSA9IHBsYW5lLT5waXBlOwotCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7 Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7 Ci0KLQlpZiAoaWNsX2lzX2hkcl9wbGFuZShkZXZfcHJpdiwgcGxhbmVfaWQpKQotCQlpbnRlbF9k ZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfQ1VTX0NUTChwaXBlLCBwbGFuZV9pZCksIDApOwot Ci0Jc2tsX3dyaXRlX3BsYW5lX3dtKHBsYW5lLCBjcnRjX3N0YXRlKTsKLQotCWludGVsX2RlX3dy aXRlX2Z3KGRldl9wcml2LCBQTEFORV9DVEwocGlwZSwgcGxhbmVfaWQpLCAwKTsKLQlpbnRlbF9k ZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfU1VSRihwaXBlLCBwbGFuZV9pZCksIDApOwotCi0J c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7 Ci19Ci0KLXN0YXRpYyBib29sCi1za2xfcGxhbmVfZ2V0X2h3X3N0YXRlKHN0cnVjdCBpbnRlbF9w bGFuZSAqcGxhbmUsCi0JCSAgICAgICBlbnVtIHBpcGUgKnBpcGUpCi17Ci0Jc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwotCWVudW0g aW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gcG93ZXJfZG9tYWluOwotCWVudW0gcGxhbmVfaWQg cGxhbmVfaWQgPSBwbGFuZS0+aWQ7Ci0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Ci0JYm9vbCBy ZXQ7Ci0KLQlwb3dlcl9kb21haW4gPSBQT1dFUl9ET01BSU5fUElQRShwbGFuZS0+cGlwZSk7Ci0J d2FrZXJlZiA9IGludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0X2lmX2VuYWJsZWQoZGV2X3ByaXYsIHBv d2VyX2RvbWFpbik7Ci0JaWYgKCF3YWtlcmVmKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXQgPSBp bnRlbF9kZV9yZWFkKGRldl9wcml2LCBQTEFORV9DVEwocGxhbmUtPnBpcGUsIHBsYW5lX2lkKSkg JiBQTEFORV9DVExfRU5BQkxFOwotCi0JKnBpcGUgPSBwbGFuZS0+cGlwZTsKLQotCWludGVsX2Rp c3BsYXlfcG93ZXJfcHV0KGRldl9wcml2LCBwb3dlcl9kb21haW4sIHdha2VyZWYpOwotCi0JcmV0 dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLXNrbF9wbGFuZV9lbmFibGVfZmxpcF9kb25lKHN0 cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Ci0JZW51bSBwaXBlIHBpcGUgPSBwbGFuZS0+ cGlwZTsKLQotCXNwaW5fbG9ja19pcnEoJmk5MTUtPmlycV9sb2NrKTsKLQliZHdfZW5hYmxlX3Bp cGVfaXJxKGk5MTUsIHBpcGUsIEdFTjlfUElQRV9QTEFORV9GTElQX0RPTkUocGxhbmUtPmlkKSk7 Ci0Jc3Bpbl91bmxvY2tfaXJxKCZpOTE1LT5pcnFfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1z a2xfcGxhbmVfZGlzYWJsZV9mbGlwX2RvbmUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSkKLXsK LQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2 KTsKLQllbnVtIHBpcGUgcGlwZSA9IHBsYW5lLT5waXBlOwotCi0Jc3Bpbl9sb2NrX2lycSgmaTkx NS0+aXJxX2xvY2spOwotCWJkd19kaXNhYmxlX3BpcGVfaXJxKGk5MTUsIHBpcGUsIEdFTjlfUElQ RV9QTEFORV9GTElQX0RPTkUocGxhbmUtPmlkKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZpOTE1LT5p cnFfbG9jayk7Ci19Ci0KIHN0YXRpYyB2b2lkIGk5eHhfcGxhbmVfbGluZWFyX2dhbW1hKHUxNiBn YW1tYVs4XSkKIHsKIAkvKiBUaGUgcG9pbnRzIGFyZSBub3QgZXZlbmx5IHNwYWNlZC4gKi8KQEAg LTIzMDgsMjM5ICsxNzUxLDYgQEAgdmx2X3Nwcml0ZV9jaGVjayhzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGJvb2wgaW50ZWxfZm9y bWF0X2lzX3AwMXgodTMyIGZvcm1hdCkKLXsKLQlzd2l0Y2ggKGZvcm1hdCkgewotCWNhc2UgRFJN X0ZPUk1BVF9QMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9QMDEyOgotCWNhc2UgRFJNX0ZPUk1BVF9Q MDE2OgotCQlyZXR1cm4gdHJ1ZTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gZmFsc2U7Ci0JfQotfQot Ci1zdGF0aWMgaW50IHNrbF9wbGFuZV9jaGVja19mYihjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZSAqcGxhbmVfc3RhdGUpCi17Ci0Jc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVs X3BsYW5lKHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Ci0JY29uc3Qgc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Ci0JdW5zaWduZWQgaW50IHJv dGF0aW9uID0gcGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9uOwotCXN0cnVjdCBkcm1fZm9ybWF0X25h bWVfYnVmIGZvcm1hdF9uYW1lOwotCi0JaWYgKCFmYikKLQkJcmV0dXJuIDA7Ci0KLQlpZiAocm90 YXRpb24gJiB+KERSTV9NT0RFX1JPVEFURV8wIHwgRFJNX01PREVfUk9UQVRFXzE4MCkgJiYKLQkg ICAgaXNfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikpIHsKLQkJZHJtX2RiZ19rbXMoJmRldl9w cml2LT5kcm0sCi0JCQkgICAgIlJDIHN1cHBvcnQgb25seSB3aXRoIDAvMTgwIGRlZ3JlZSByb3Rh dGlvbiAoJXgpXG4iLAotCQkJICAgIHJvdGF0aW9uKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JaWYgKHJvdGF0aW9uICYgRFJNX01PREVfUkVGTEVDVF9YICYmCi0JICAgIGZiLT5tb2RpZmll ciA9PSBEUk1fRk9STUFUX01PRF9MSU5FQVIpIHsKLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5k cm0sCi0JCQkgICAgImhvcml6b250YWwgZmxpcCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggbGluZWFy IHN1cmZhY2UgZm9ybWF0c1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChkcm1f cm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSkgewotCQlpZiAoZmItPm1vZGlmaWVyICE9IEk5 MTVfRk9STUFUX01PRF9ZX1RJTEVEICYmCi0JCSAgICBmYi0+bW9kaWZpZXIgIT0gSTkxNV9GT1JN QVRfTU9EX1lmX1RJTEVEKSB7Ci0JCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCQkg ICAgIlkvWWYgdGlsaW5nIHJlcXVpcmVkIGZvciA5MC8yNzAhXG4iKTsKLQkJCXJldHVybiAtRUlO VkFMOwotCQl9Ci0KLQkJLyoKLQkJICogOTAvMjcwIGlzIG5vdCBhbGxvd2VkIHdpdGggUkdCNjQg MTY6MTY6MTY6MTYgYW5kCi0JCSAqIEluZGV4ZWQgOC1iaXQuIFJHQiAxNi1iaXQgNTo2OjUgaXMg YWxsb3dlZCBnZW4xMSBvbndhcmRzLgotCQkgKi8KLQkJc3dpdGNoIChmYi0+Zm9ybWF0LT5mb3Jt YXQpIHsKLQkJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKLQkJCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDExKQotCQkJCWJyZWFrOwotCQkJZmFsbHRocm91Z2g7Ci0JCWNhc2UgRFJNX0ZPUk1B VF9DODoKLQkJY2FzZSBEUk1fRk9STUFUX1hSR0IxNjE2MTYxNkY6Ci0JCWNhc2UgRFJNX0ZPUk1B VF9YQkdSMTYxNjE2MTZGOgotCQljYXNlIERSTV9GT1JNQVRfQVJHQjE2MTYxNjE2RjoKLQkJY2Fz ZSBEUk1fRk9STUFUX0FCR1IxNjE2MTYxNkY6Ci0JCWNhc2UgRFJNX0ZPUk1BVF9ZMjEwOgotCQlj YXNlIERSTV9GT1JNQVRfWTIxMjoKLQkJY2FzZSBEUk1fRk9STUFUX1kyMTY6Ci0JCWNhc2UgRFJN X0ZPUk1BVF9YVllVMTJfMTYxNjE2MTY6Ci0JCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTYxNjE2MTY6 Ci0JCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCQkgICAgIlVuc3VwcG9ydGVkIHBp eGVsIGZvcm1hdCAlcyBmb3IgOTAvMjcwIVxuIiwKLQkJCQkgICAgZHJtX2dldF9mb3JtYXRfbmFt ZShmYi0+Zm9ybWF0LT5mb3JtYXQsCi0JCQkJCQkJJmZvcm1hdF9uYW1lKSk7Ci0JCQlyZXR1cm4g LUVJTlZBTDsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JLyogWS10aWxpbmcg aXMgbm90IHN1cHBvcnRlZCBpbiBJRi1JRCBJbnRlcmxhY2UgbW9kZSAqLwotCWlmIChjcnRjX3N0 YXRlLT5ody5lbmFibGUgJiYKLQkgICAgY3J0Y19zdGF0ZS0+aHcuYWRqdXN0ZWRfbW9kZS5mbGFn cyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFICYmCi0JICAgIChmYi0+bW9kaWZpZXIgPT0gSTkx NV9GT1JNQVRfTU9EX1lfVElMRUQgfHwKLQkgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1B VF9NT0RfWWZfVElMRUQgfHwKLQkgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0Rf WV9USUxFRF9DQ1MgfHwKLQkgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZf VElMRURfQ0NTIHx8Ci0JICAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElM RURfR0VOMTJfUkNfQ0NTIHx8Ci0JICAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9E X1lfVElMRURfR0VOMTJfTUNfQ0NTKSkgewotCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwK LQkJCSAgICAiWS9ZZiB0aWxpbmcgbm90IHN1cHBvcnRlZCBpbiBJRi1JRCBtb2RlXG4iKTsKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogV2FfMTYwNjA1NDE4ODp0Z2wgKi8KLQlpZiAoSVNf VElHRVJMQUtFKGRldl9wcml2KSAmJgotCSAgICBwbGFuZV9zdGF0ZS0+Y2tleS5mbGFncyAmIEk5 MTVfU0VUX0NPTE9SS0VZX1NPVVJDRSAmJgotCSAgICBpbnRlbF9mb3JtYXRfaXNfcDAxeChmYi0+ Zm9ybWF0LT5mb3JtYXQpKSB7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJICAg ICJTb3VyY2UgY29sb3Iga2V5aW5nIG5vdCBzdXBwb3J0ZWQgd2l0aCBQMDF4IGZvcm1hdHNcbiIp OwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBz a2xfcGxhbmVfY2hlY2tfZHN0X2Nvb3JkaW5hdGVzKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlLAotCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9Ci0J CXRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7Ci0JaW50IGNydGNfeCA9IHBs YW5lX3N0YXRlLT51YXBpLmRzdC54MTsKLQlpbnQgY3J0Y193ID0gZHJtX3JlY3Rfd2lkdGgoJnBs YW5lX3N0YXRlLT51YXBpLmRzdCk7Ci0JaW50IHBpcGVfc3JjX3cgPSBjcnRjX3N0YXRlLT5waXBl X3NyY193OwotCi0JLyoKLQkgKiBEaXNwbGF5IFdBICMxMTc1OiBjbmwsZ2xrCi0JICogUGxhbmVz IG90aGVyIHRoYW4gdGhlIGN1cnNvciBtYXkgY2F1c2UgRklGTyB1bmRlcmZsb3cgYW5kIGRpc3Bs YXkKLQkgKiBjb3JydXB0aW9uIGlmIHN0YXJ0aW5nIGxlc3MgdGhhbiA0IHBpeGVscyBmcm9tIHRo ZSByaWdodCBlZGdlIG9mCi0JICogdGhlIHNjcmVlbi4KLQkgKiBCZXNpZGVzIHRoZSBhYm92ZSBX QSBmaXggdGhlIHNpbWlsYXIgcHJvYmxlbSwgd2hlcmUgcGxhbmVzIG90aGVyCi0JICogdGhhbiB0 aGUgY3Vyc29yIGVuZGluZyBsZXNzIHRoYW4gNCBwaXhlbHMgZnJvbSB0aGUgbGVmdCBlZGdlIG9m IHRoZQotCSAqIHNjcmVlbiBtYXkgY2F1c2UgRklGTyB1bmRlcmZsb3cgYW5kIGRpc3BsYXkgY29y cnVwdGlvbi4KLQkgKi8KLQlpZiAoKElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpIHx8IElTX0NBTk5P TkxBS0UoZGV2X3ByaXYpKSAmJgotCSAgICAoY3J0Y194ICsgY3J0Y193IDwgNCB8fCBjcnRjX3gg PiBwaXBlX3NyY193IC0gNCkpIHsKLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkg ICAgInJlcXVlc3RlZCBwbGFuZSBYICVzIHBvc2l0aW9uICVkIGludmFsaWQgKHZhbGlkIHJhbmdl ICVkLSVkKVxuIiwKLQkJCSAgICBjcnRjX3ggKyBjcnRjX3cgPCA0ID8gImVuZCIgOiAic3RhcnQi LAotCQkJICAgIGNydGNfeCArIGNydGNfdyA8IDQgPyBjcnRjX3ggKyBjcnRjX3cgOiBjcnRjX3gs Ci0JCQkgICAgNCwgcGlwZV9zcmNfdyAtIDQpOwotCQlyZXR1cm4gLUVSQU5HRTsKLQl9Ci0KLQly ZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBza2xfcGxhbmVfY2hlY2tfbnYxMl9yb3RhdGlvbihj b25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCWNvbnN0IHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCXVuc2lnbmVk IGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbjsKLQlpbnQgc3JjX3cgPSBk cm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjKSA+PiAxNjsKLQotCS8qIERpc3Bs YXkgV0EgIzExMDYgKi8KLQlpZiAoaW50ZWxfZm9ybWF0X2luZm9faXNfeXV2X3NlbWlwbGFuYXIo ZmItPmZvcm1hdCwgZmItPm1vZGlmaWVyKSAmJgotCSAgICBzcmNfdyAmIDMgJiYKLQkgICAgKHJv dGF0aW9uID09IERSTV9NT0RFX1JPVEFURV8yNzAgfHwKLQkgICAgIHJvdGF0aW9uID09IChEUk1f TU9ERV9SRUZMRUNUX1ggfCBEUk1fTU9ERV9ST1RBVEVfOTApKSkgewotCQlEUk1fREVCVUdfS01T KCJzcmMgd2lkdGggbXVzdCBiZSBtdWx0aXBsZSBvZiA0IGZvciByb3RhdGVkIHBsYW5hciBZVVZc biIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlu dCBza2xfcGxhbmVfbWF4X3NjYWxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK LQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKLXsKLQkvKgotCSAq IFdlIGRvbid0IHlldCBrbm93IHRoZSBmaW5hbCBzb3VyY2Ugd2lkdGggbm9yCi0JICogd2hldGhl ciB3ZSBjYW4gdXNlIHRoZSBIUSBzY2FsZXIgbW9kZS4gQXNzdW1lCi0JICogdGhlIGJlc3QgY2Fz ZS4KLQkgKiBGSVhNRSBuZWVkIHRvIHByb3Blcmx5IGNoZWNrIHRoaXMgbGF0ZXIuCi0JICovCi0J aWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikg fHwKLQkgICAgIWludGVsX2Zvcm1hdF9pbmZvX2lzX3l1dl9zZW1pcGxhbmFyKGZiLT5mb3JtYXQs IGZiLT5tb2RpZmllcikpCi0JCXJldHVybiAweDMwMDAwIC0gMTsKLQllbHNlCi0JCXJldHVybiAw eDIwMDAwIC0gMTsKLX0KLQotc3RhdGljIGludCBza2xfcGxhbmVfY2hlY2soc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCQkgICBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlKQotewotCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9w bGFuZShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwotCWNvbnN0IHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCWludCBtaW5fc2NhbGUgPSBE Uk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkc7Ci0JaW50IG1heF9zY2FsZSA9IERSTV9QTEFORV9I RUxQRVJfTk9fU0NBTElORzsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc2tsX3BsYW5lX2NoZWNrX2Zi KGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0J LyogdXNlIHNjYWxlciB3aGVuIGNvbG9ya2V5IGlzIG5vdCByZXF1aXJlZCAqLwotCWlmICghcGxh bmVfc3RhdGUtPmNrZXkuZmxhZ3MgJiYgaW50ZWxfZmJfc2NhbGFibGUoZmIpKSB7Ci0JCW1pbl9z Y2FsZSA9IDE7Ci0JCW1heF9zY2FsZSA9IHNrbF9wbGFuZV9tYXhfc2NhbGUoZGV2X3ByaXYsIGZi KTsKLQl9Ci0KLQlyZXQgPSBpbnRlbF9hdG9taWNfcGxhbmVfY2hlY2tfY2xpcHBpbmcocGxhbmVf c3RhdGUsIGNydGNfc3RhdGUsCi0JCQkJCQltaW5fc2NhbGUsIG1heF9zY2FsZSwgdHJ1ZSk7Ci0J aWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHNrbF9jaGVja19wbGFuZV9zdXJmYWNl KHBsYW5lX3N0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKCFwbGFuZV9z dGF0ZS0+dWFwaS52aXNpYmxlKQotCQlyZXR1cm4gMDsKLQotCXJldCA9IHNrbF9wbGFuZV9jaGVj a19kc3RfY29vcmRpbmF0ZXMoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOwotCWlmIChyZXQpCi0J CXJldHVybiByZXQ7Ci0KLQlyZXQgPSBpbnRlbF9wbGFuZV9jaGVja19zcmNfY29vcmRpbmF0ZXMo cGxhbmVfc3RhdGUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBza2xfcGxh bmVfY2hlY2tfbnYxMl9yb3RhdGlvbihwbGFuZV9zdGF0ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJu IHJldDsKLQotCS8qIEhXIG9ubHkgaGFzIDggYml0cyBwaXhlbCBwcmVjaXNpb24sIGRpc2FibGUg cGxhbmUgaWYgaW52aXNpYmxlICovCi0JaWYgKCEocGxhbmVfc3RhdGUtPmh3LmFscGhhID4+IDgp KQotCQlwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlID0gZmFsc2U7Ci0KLQlwbGFuZV9zdGF0ZS0+ Y3RsID0gc2tsX3BsYW5lX2N0bChjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7Ci0KLQlpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklMQUtFKGRldl9wcml2KSkKLQkJcGxh bmVfc3RhdGUtPmNvbG9yX2N0bCA9IGdsa19wbGFuZV9jb2xvcl9jdGwoY3J0Y19zdGF0ZSwKLQkJ CQkJCQkgICAgIHBsYW5lX3N0YXRlKTsKLQotCWlmIChpbnRlbF9mb3JtYXRfaW5mb19pc195dXZf c2VtaXBsYW5hcihmYi0+Zm9ybWF0LCBmYi0+bW9kaWZpZXIpICYmCi0JICAgIGljbF9pc19oZHJf cGxhbmUoZGV2X3ByaXYsIHBsYW5lLT5pZCkpCi0JCS8qIEVuYWJsZSBhbmQgdXNlIE1QRUctMiBj aHJvbWEgc2l0aW5nICovCi0JCXBsYW5lX3N0YXRlLT5jdXNfY3RsID0gUExBTkVfQ1VTX0VOQUJM RSB8Ci0JCQlQTEFORV9DVVNfSFBIQVNFXzAgfAotCQkJUExBTkVfQ1VTX1ZQSEFTRV9TSUdOX05F R0FUSVZFIHwgUExBTkVfQ1VTX1ZQSEFTRV8wXzI1OwotCWVsc2UKLQkJcGxhbmVfc3RhdGUtPmN1 c19jdGwgPSAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBib29sIGhhc19kc3Rfa2V5X2lu X3ByaW1hcnlfcGxhbmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewogCXJl dHVybiBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDk7CkBAIC0yNzE4LDE4NCArMTkyOCw2IEBAIHN0 YXRpYyBjb25zdCB1MzIgY2h2X3BpcGVfYl9zcHJpdGVfZm9ybWF0c1tdID0gewogCURSTV9GT1JN QVRfVllVWSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgc2tsX3BsYW5lX2Zvcm1hdHNbXSA9IHsK LQlEUk1fRk9STUFUX0M4LAotCURSTV9GT1JNQVRfUkdCNTY1LAotCURSTV9GT1JNQVRfWFJHQjg4 ODgsCi0JRFJNX0ZPUk1BVF9YQkdSODg4OCwKLQlEUk1fRk9STUFUX0FSR0I4ODg4LAotCURSTV9G T1JNQVRfQUJHUjg4ODgsCi0JRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMCwKLQlEUk1fRk9STUFUX1hC R1IyMTAxMDEwLAotCURSTV9GT1JNQVRfWFJHQjE2MTYxNjE2RiwKLQlEUk1fRk9STUFUX1hCR1Ix NjE2MTYxNkYsCi0JRFJNX0ZPUk1BVF9ZVVlWLAotCURSTV9GT1JNQVRfWVZZVSwKLQlEUk1fRk9S TUFUX1VZVlksCi0JRFJNX0ZPUk1BVF9WWVVZLAotCURSTV9GT1JNQVRfWFlVVjg4ODgsCi19Owot Ci1zdGF0aWMgY29uc3QgdTMyIHNrbF9wbGFuYXJfZm9ybWF0c1tdID0gewotCURSTV9GT1JNQVRf QzgsCi0JRFJNX0ZPUk1BVF9SR0I1NjUsCi0JRFJNX0ZPUk1BVF9YUkdCODg4OCwKLQlEUk1fRk9S TUFUX1hCR1I4ODg4LAotCURSTV9GT1JNQVRfQVJHQjg4ODgsCi0JRFJNX0ZPUk1BVF9BQkdSODg4 OCwKLQlEUk1fRk9STUFUX1hSR0IyMTAxMDEwLAotCURSTV9GT1JNQVRfWEJHUjIxMDEwMTAsCi0J RFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGLAotCURSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RiwKLQlE Uk1fRk9STUFUX1lVWVYsCi0JRFJNX0ZPUk1BVF9ZVllVLAotCURSTV9GT1JNQVRfVVlWWSwKLQlE Uk1fRk9STUFUX1ZZVVksCi0JRFJNX0ZPUk1BVF9OVjEyLAotCURSTV9GT1JNQVRfWFlVVjg4ODgs Ci19OwotCi1zdGF0aWMgY29uc3QgdTMyIGdsa19wbGFuYXJfZm9ybWF0c1tdID0gewotCURSTV9G T1JNQVRfQzgsCi0JRFJNX0ZPUk1BVF9SR0I1NjUsCi0JRFJNX0ZPUk1BVF9YUkdCODg4OCwKLQlE Uk1fRk9STUFUX1hCR1I4ODg4LAotCURSTV9GT1JNQVRfQVJHQjg4ODgsCi0JRFJNX0ZPUk1BVF9B QkdSODg4OCwKLQlEUk1fRk9STUFUX1hSR0IyMTAxMDEwLAotCURSTV9GT1JNQVRfWEJHUjIxMDEw MTAsCi0JRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGLAotCURSTV9GT1JNQVRfWEJHUjE2MTYxNjE2 RiwKLQlEUk1fRk9STUFUX1lVWVYsCi0JRFJNX0ZPUk1BVF9ZVllVLAotCURSTV9GT1JNQVRfVVlW WSwKLQlEUk1fRk9STUFUX1ZZVVksCi0JRFJNX0ZPUk1BVF9OVjEyLAotCURSTV9GT1JNQVRfWFlV Vjg4ODgsCi0JRFJNX0ZPUk1BVF9QMDEwLAotCURSTV9GT1JNQVRfUDAxMiwKLQlEUk1fRk9STUFU X1AwMTYsCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIGljbF9zZHJfeV9wbGFuZV9mb3JtYXRzW10g PSB7Ci0JRFJNX0ZPUk1BVF9DOCwKLQlEUk1fRk9STUFUX1JHQjU2NSwKLQlEUk1fRk9STUFUX1hS R0I4ODg4LAotCURSTV9GT1JNQVRfWEJHUjg4ODgsCi0JRFJNX0ZPUk1BVF9BUkdCODg4OCwKLQlE Uk1fRk9STUFUX0FCR1I4ODg4LAotCURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCi0JRFJNX0ZPUk1B VF9YQkdSMjEwMTAxMCwKLQlEUk1fRk9STUFUX0FSR0IyMTAxMDEwLAotCURSTV9GT1JNQVRfQUJH UjIxMDEwMTAsCi0JRFJNX0ZPUk1BVF9ZVVlWLAotCURSTV9GT1JNQVRfWVZZVSwKLQlEUk1fRk9S TUFUX1VZVlksCi0JRFJNX0ZPUk1BVF9WWVVZLAotCURSTV9GT1JNQVRfWTIxMCwKLQlEUk1fRk9S TUFUX1kyMTIsCi0JRFJNX0ZPUk1BVF9ZMjE2LAotCURSTV9GT1JNQVRfWFlVVjg4ODgsCi0JRFJN X0ZPUk1BVF9YVllVMjEwMTAxMCwKLQlEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNiwKLQlEUk1f Rk9STUFUX1hWWVUxNjE2MTYxNiwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgaWNsX3Nkcl91dl9w bGFuZV9mb3JtYXRzW10gPSB7Ci0JRFJNX0ZPUk1BVF9DOCwKLQlEUk1fRk9STUFUX1JHQjU2NSwK LQlEUk1fRk9STUFUX1hSR0I4ODg4LAotCURSTV9GT1JNQVRfWEJHUjg4ODgsCi0JRFJNX0ZPUk1B VF9BUkdCODg4OCwKLQlEUk1fRk9STUFUX0FCR1I4ODg4LAotCURSTV9GT1JNQVRfWFJHQjIxMDEw MTAsCi0JRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwKLQlEUk1fRk9STUFUX0FSR0IyMTAxMDEwLAot CURSTV9GT1JNQVRfQUJHUjIxMDEwMTAsCi0JRFJNX0ZPUk1BVF9ZVVlWLAotCURSTV9GT1JNQVRf WVZZVSwKLQlEUk1fRk9STUFUX1VZVlksCi0JRFJNX0ZPUk1BVF9WWVVZLAotCURSTV9GT1JNQVRf TlYxMiwKLQlEUk1fRk9STUFUX1AwMTAsCi0JRFJNX0ZPUk1BVF9QMDEyLAotCURSTV9GT1JNQVRf UDAxNiwKLQlEUk1fRk9STUFUX1kyMTAsCi0JRFJNX0ZPUk1BVF9ZMjEyLAotCURSTV9GT1JNQVRf WTIxNiwKLQlEUk1fRk9STUFUX1hZVVY4ODg4LAotCURSTV9GT1JNQVRfWFZZVTIxMDEwMTAsCi0J RFJNX0ZPUk1BVF9YVllVMTJfMTYxNjE2MTYsCi0JRFJNX0ZPUk1BVF9YVllVMTYxNjE2MTYsCi19 OwotCi1zdGF0aWMgY29uc3QgdTMyIGljbF9oZHJfcGxhbmVfZm9ybWF0c1tdID0gewotCURSTV9G T1JNQVRfQzgsCi0JRFJNX0ZPUk1BVF9SR0I1NjUsCi0JRFJNX0ZPUk1BVF9YUkdCODg4OCwKLQlE Uk1fRk9STUFUX1hCR1I4ODg4LAotCURSTV9GT1JNQVRfQVJHQjg4ODgsCi0JRFJNX0ZPUk1BVF9B QkdSODg4OCwKLQlEUk1fRk9STUFUX1hSR0IyMTAxMDEwLAotCURSTV9GT1JNQVRfWEJHUjIxMDEw MTAsCi0JRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMCwKLQlEUk1fRk9STUFUX0FCR1IyMTAxMDEwLAot CURSTV9GT1JNQVRfWFJHQjE2MTYxNjE2RiwKLQlEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkYsCi0J RFJNX0ZPUk1BVF9BUkdCMTYxNjE2MTZGLAotCURSTV9GT1JNQVRfQUJHUjE2MTYxNjE2RiwKLQlE Uk1fRk9STUFUX1lVWVYsCi0JRFJNX0ZPUk1BVF9ZVllVLAotCURSTV9GT1JNQVRfVVlWWSwKLQlE Uk1fRk9STUFUX1ZZVVksCi0JRFJNX0ZPUk1BVF9OVjEyLAotCURSTV9GT1JNQVRfUDAxMCwKLQlE Uk1fRk9STUFUX1AwMTIsCi0JRFJNX0ZPUk1BVF9QMDE2LAotCURSTV9GT1JNQVRfWTIxMCwKLQlE Uk1fRk9STUFUX1kyMTIsCi0JRFJNX0ZPUk1BVF9ZMjE2LAotCURSTV9GT1JNQVRfWFlVVjg4ODgs Ci0JRFJNX0ZPUk1BVF9YVllVMjEwMTAxMCwKLQlEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNiwK LQlEUk1fRk9STUFUX1hWWVUxNjE2MTYxNiwKLX07Ci0KLXN0YXRpYyBjb25zdCB1NjQgc2tsX3Bs YW5lX2Zvcm1hdF9tb2RpZmllcnNfbm9jY3NbXSA9IHsKLQlJOTE1X0ZPUk1BVF9NT0RfWWZfVElM RUQsCi0JSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQsCi0JSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQs Ci0JRFJNX0ZPUk1BVF9NT0RfTElORUFSLAotCURSTV9GT1JNQVRfTU9EX0lOVkFMSUQKLX07Ci0K LXN0YXRpYyBjb25zdCB1NjQgc2tsX3BsYW5lX2Zvcm1hdF9tb2RpZmllcnNfY2NzW10gPSB7Ci0J STkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUywKLQlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9D Q1MsCi0JSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVELAotCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVE LAotCUk5MTVfRk9STUFUX01PRF9YX1RJTEVELAotCURSTV9GT1JNQVRfTU9EX0xJTkVBUiwKLQlE Uk1fRk9STUFUX01PRF9JTlZBTElECi19OwotCi1zdGF0aWMgY29uc3QgdTY0IGdlbjEyX3BsYW5l X2Zvcm1hdF9tb2RpZmllcnNfbWNfY2NzW10gPSB7Ci0JSTkxNV9GT1JNQVRfTU9EX1lfVElMRURf R0VOMTJfTUNfQ0NTLAotCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX1JDX0NDUywKLQlJ OTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwKLQlJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwKLQlEUk1f Rk9STUFUX01PRF9MSU5FQVIsCi0JRFJNX0ZPUk1BVF9NT0RfSU5WQUxJRAotfTsKLQotc3RhdGlj IGNvbnN0IHU2NCBnZW4xMl9wbGFuZV9mb3JtYXRfbW9kaWZpZXJzX3JjX2Njc1tdID0gewotCUk5 MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX1JDX0NDUywKLQlJOTE1X0ZPUk1BVF9NT0RfWV9U SUxFRCwKLQlJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwKLQlEUk1fRk9STUFUX01PRF9MSU5FQVIs Ci0JRFJNX0ZPUk1BVF9NT0RfSU5WQUxJRAotfTsKLQogc3RhdGljIGJvb2wgZzR4X3Nwcml0ZV9m b3JtYXRfbW9kX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUsCiAJCQkJCSAgICB1 MzIgZm9ybWF0LCB1NjQgbW9kaWZpZXIpCiB7CkBAIC0yOTg4LDE0OCArMjAyMCw2IEBAIHN0YXRp YyBib29sIHZsdl9zcHJpdGVfZm9ybWF0X21vZF9zdXBwb3J0ZWQoc3RydWN0IGRybV9wbGFuZSAq X3BsYW5lLAogCX0KIH0KIAotc3RhdGljIGJvb2wgc2tsX3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9y dGVkKHN0cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwKLQkJCQkJICAgdTMyIGZvcm1hdCwgdTY0IG1v ZGlmaWVyKQotewotCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShf cGxhbmUpOwotCi0Jc3dpdGNoIChtb2RpZmllcikgewotCWNhc2UgRFJNX0ZPUk1BVF9NT0RfTElO RUFSOgotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6Ci0JY2FzZSBJOTE1X0ZPUk1BVF9N T0RfWV9USUxFRDoKLQljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDoKLQkJYnJlYWs7Ci0J Y2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0Rf WWZfVElMRURfQ0NTOgotCQlpZiAoIXBsYW5lLT5oYXNfY2NzKQotCQkJcmV0dXJuIGZhbHNlOwot CQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0Jc3dpdGNoIChmb3Jt YXQpIHsKLQljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1I4 ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKLQljYXNlIERSTV9GT1JNQVRfQUJHUjg4 ODg6Ci0JCWlmIChpc19jY3NfbW9kaWZpZXIobW9kaWZpZXIpKQotCQkJcmV0dXJuIHRydWU7Ci0J CWZhbGx0aHJvdWdoOwotCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6Ci0JY2FzZSBEUk1fRk9STUFU X1hSR0IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoKLQljYXNlIERSTV9G T1JNQVRfQVJHQjIxMDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1IyMTAxMDEwOgotCWNhc2Ug RFJNX0ZPUk1BVF9ZVVlWOgotCWNhc2UgRFJNX0ZPUk1BVF9ZVllVOgotCWNhc2UgRFJNX0ZPUk1B VF9VWVZZOgotCWNhc2UgRFJNX0ZPUk1BVF9WWVVZOgotCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgot CWNhc2UgRFJNX0ZPUk1BVF9YWVVWODg4ODoKLQljYXNlIERSTV9GT1JNQVRfUDAxMDoKLQljYXNl IERSTV9GT1JNQVRfUDAxMjoKLQljYXNlIERSTV9GT1JNQVRfUDAxNjoKLQljYXNlIERSTV9GT1JN QVRfWFZZVTIxMDEwMTA6Ci0JCWlmIChtb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElM RUQpCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJZmFsbHRocm91Z2g7Ci0JY2FzZSBEUk1fRk9STUFUX0M4 OgotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdS MTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZP Uk1BVF9BUkdCMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9ZMjEwOgotCWNhc2UgRFJNX0ZP Uk1BVF9ZMjEyOgotCWNhc2UgRFJNX0ZPUk1BVF9ZMjE2OgotCWNhc2UgRFJNX0ZPUk1BVF9YVllV MTJfMTYxNjE2MTY6Ci0JY2FzZSBEUk1fRk9STUFUX1hWWVUxNjE2MTYxNjoKLQkJaWYgKG1vZGlm aWVyID09IERSTV9GT1JNQVRfTU9EX0xJTkVBUiB8fAotCQkgICAgbW9kaWZpZXIgPT0gSTkxNV9G T1JNQVRfTU9EX1hfVElMRUQgfHwKLQkJICAgIG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9Z X1RJTEVEKQotCQkJcmV0dXJuIHRydWU7Ci0JCWZhbGx0aHJvdWdoOwotCWRlZmF1bHQ6Ci0JCXJl dHVybiBmYWxzZTsKLQl9Ci19Ci0KLXN0YXRpYyBib29sIGdlbjEyX3BsYW5lX3N1cHBvcnRzX21j X2NjcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkJCWVudW0gcGxhbmVf aWQgcGxhbmVfaWQpCi17Ci0JLyogV2FfMTQwMTA0NzcwMDg6dGdsW2EwLi5jMF0scmtsW2FsbF0s ZGcxW2FsbF0gKi8KLQlpZiAoSVNfREcxKGRldl9wcml2KSB8fCBJU19ST0NLRVRMQUtFKGRldl9w cml2KSB8fAotCSAgICBJU19UR0xfRElTUF9SRVZJRChkZXZfcHJpdiwgVEdMX1JFVklEX0EwLCBU R0xfUkVWSURfQzApKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXR1cm4gcGxhbmVfaWQgPCBQTEFO RV9TUFJJVEU0OwotfQotCi1zdGF0aWMgYm9vbCBnZW4xMl9wbGFuZV9mb3JtYXRfbW9kX3N1cHBv cnRlZChzdHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUsCi0JCQkJCSAgICAgdTMyIGZvcm1hdCwgdTY0 IG1vZGlmaWVyKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUoX3BsYW5lLT5kZXYpOwotCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9w bGFuZShfcGxhbmUpOwotCi0Jc3dpdGNoIChtb2RpZmllcikgewotCWNhc2UgSTkxNV9GT1JNQVRf TU9EX1lfVElMRURfR0VOMTJfTUNfQ0NTOgotCQlpZiAoIWdlbjEyX3BsYW5lX3N1cHBvcnRzX21j X2NjcyhkZXZfcHJpdiwgcGxhbmUtPmlkKSkKLQkJCXJldHVybiBmYWxzZTsKLQkJZmFsbHRocm91 Z2g7Ci0JY2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0Rf WF9USUxFRDoKLQljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgotCWNhc2UgSTkxNV9GT1JN QVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1 cm4gZmFsc2U7Ci0JfQotCi0Jc3dpdGNoIChmb3JtYXQpIHsKLQljYXNlIERSTV9GT1JNQVRfWFJH Qjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdC ODg4ODoKLQljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6Ci0JCWlmIChpc19jY3NfbW9kaWZpZXIo bW9kaWZpZXIpKQotCQkJcmV0dXJuIHRydWU7Ci0JCWZhbGx0aHJvdWdoOwotCWNhc2UgRFJNX0ZP Uk1BVF9ZVVlWOgotCWNhc2UgRFJNX0ZPUk1BVF9ZVllVOgotCWNhc2UgRFJNX0ZPUk1BVF9VWVZZ OgotCWNhc2UgRFJNX0ZPUk1BVF9WWVVZOgotCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgotCWNhc2Ug RFJNX0ZPUk1BVF9YWVVWODg4ODoKLQljYXNlIERSTV9GT1JNQVRfUDAxMDoKLQljYXNlIERSTV9G T1JNQVRfUDAxMjoKLQljYXNlIERSTV9GT1JNQVRfUDAxNjoKLQkJaWYgKG1vZGlmaWVyID09IEk5 MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUykKLQkJCXJldHVybiB0cnVlOwotCQlm YWxsdGhyb3VnaDsKLQljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgotCWNhc2UgRFJNX0ZPUk1BVF9Y UkdCMjEwMTAxMDoKLQljYXNlIERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6Ci0JY2FzZSBEUk1fRk9S TUFUX0FSR0IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMDoKLQljYXNlIERS TV9GT1JNQVRfWFZZVTIxMDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX0M4OgotCWNhc2UgRFJNX0ZP Uk1BVF9YQkdSMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMTYxNjE2MTZGOgotCWNh c2UgRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTYxNjE2 MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9ZMjEwOgotCWNhc2UgRFJNX0ZPUk1BVF9ZMjEyOgotCWNh c2UgRFJNX0ZPUk1BVF9ZMjE2OgotCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTJfMTYxNjE2MTY6Ci0J Y2FzZSBEUk1fRk9STUFUX1hWWVUxNjE2MTYxNjoKLQkJaWYgKG1vZGlmaWVyID09IERSTV9GT1JN QVRfTU9EX0xJTkVBUiB8fAotCQkgICAgbW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1hfVElM RUQgfHwKLQkJICAgIG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEKQotCQkJcmV0 dXJuIHRydWU7Ci0JCWZhbGx0aHJvdWdoOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBmYWxzZTsKLQl9 Ci19CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGc0eF9zcHJpdGVfZnVu Y3MgPSB7CiAJLnVwZGF0ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwK QEAgLTMxNTgsMjU3ICsyMDQ4LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVu Y3Mgdmx2X3Nwcml0ZV9mdW5jcyA9IHsKIAkuZm9ybWF0X21vZF9zdXBwb3J0ZWQgPSB2bHZfc3By aXRlX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f cGxhbmVfZnVuY3Mgc2tsX3BsYW5lX2Z1bmNzID0gewotCS51cGRhdGVfcGxhbmUgPSBkcm1fYXRv bWljX2hlbHBlcl91cGRhdGVfcGxhbmUsCi0JLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hl bHBlcl9kaXNhYmxlX3BsYW5lLAotCS5kZXN0cm95ID0gaW50ZWxfcGxhbmVfZGVzdHJveSwKLQku YXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGludGVsX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwKLQku YXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRlLAotCS5mb3Jt YXRfbW9kX3N1cHBvcnRlZCA9IHNrbF9wbGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZCwKLX07Ci0K LXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGdlbjEyX3BsYW5lX2Z1bmNzID0g ewotCS51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUsCi0JLmRp c2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAotCS5kZXN0cm95 ID0gaW50ZWxfcGxhbmVfZGVzdHJveSwKLQkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGludGVs X3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwKLQkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBpbnRlbF9w bGFuZV9kZXN0cm95X3N0YXRlLAotCS5mb3JtYXRfbW9kX3N1cHBvcnRlZCA9IGdlbjEyX3BsYW5l X2Zvcm1hdF9tb2Rfc3VwcG9ydGVkLAotfTsKLQotc3RhdGljIGJvb2wgc2tsX3BsYW5lX2hhc19m YmMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJICAgICAgZW51bSBwaXBl IHBpcGUsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCi17Ci0JaWYgKCFIQVNfRkJDKGRldl9wcml2 KSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIHBpcGUgPT0gUElQRV9BICYmIHBsYW5lX2lk ID09IFBMQU5FX1BSSU1BUlk7Ci19Ci0KLXN0YXRpYyBib29sIHNrbF9wbGFuZV9oYXNfcGxhbmFy KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCQkgZW51bSBwaXBlIHBpcGUs IGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCi17Ci0JLyogRGlzcGxheSBXQSAjMDg3MDogc2tsLCBi eHQgKi8KLQlpZiAoSVNfU0tZTEFLRShkZXZfcHJpdikgfHwgSVNfQlJPWFRPTihkZXZfcHJpdikp Ci0JCXJldHVybiBmYWxzZTsKLQotCWlmIChJU19HRU4oZGV2X3ByaXYsIDkpICYmICFJU19HRU1J TklMQUtFKGRldl9wcml2KSAmJiBwaXBlID09IFBJUEVfQykKLQkJcmV0dXJuIGZhbHNlOwotCi0J aWYgKHBsYW5lX2lkICE9IFBMQU5FX1BSSU1BUlkgJiYgcGxhbmVfaWQgIT0gUExBTkVfU1BSSVRF MCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBjb25zdCB1 MzIgKnNrbF9nZXRfcGxhbmVfZm9ybWF0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsCi0JCQkJCWVudW0gcGlwZSBwaXBlLCBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkLAotCQkJCQlp bnQgKm51bV9mb3JtYXRzKQotewotCWlmIChza2xfcGxhbmVfaGFzX3BsYW5hcihkZXZfcHJpdiwg cGlwZSwgcGxhbmVfaWQpKSB7Ci0JCSpudW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoc2tsX3BsYW5h cl9mb3JtYXRzKTsKLQkJcmV0dXJuIHNrbF9wbGFuYXJfZm9ybWF0czsKLQl9IGVsc2UgewotCQkq bnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKHNrbF9wbGFuZV9mb3JtYXRzKTsKLQkJcmV0dXJuIHNr bF9wbGFuZV9mb3JtYXRzOwotCX0KLX0KLQotc3RhdGljIGNvbnN0IHUzMiAqZ2xrX2dldF9wbGFu ZV9mb3JtYXRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCQkJZW51bSBw aXBlIHBpcGUsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQsCi0JCQkJCWludCAqbnVtX2Zvcm1hdHMp Ci17Ci0JaWYgKHNrbF9wbGFuZV9oYXNfcGxhbmFyKGRldl9wcml2LCBwaXBlLCBwbGFuZV9pZCkp IHsKLQkJKm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShnbGtfcGxhbmFyX2Zvcm1hdHMpOwotCQly ZXR1cm4gZ2xrX3BsYW5hcl9mb3JtYXRzOwotCX0gZWxzZSB7Ci0JCSpudW1fZm9ybWF0cyA9IEFS UkFZX1NJWkUoc2tsX3BsYW5lX2Zvcm1hdHMpOwotCQlyZXR1cm4gc2tsX3BsYW5lX2Zvcm1hdHM7 Ci0JfQotfQotCi1zdGF0aWMgY29uc3QgdTMyICppY2xfZ2V0X3BsYW5lX2Zvcm1hdHMoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJCQllbnVtIHBpcGUgcGlwZSwgZW51bSBw bGFuZV9pZCBwbGFuZV9pZCwKLQkJCQkJaW50ICpudW1fZm9ybWF0cykKLXsKLQlpZiAoaWNsX2lz X2hkcl9wbGFuZShkZXZfcHJpdiwgcGxhbmVfaWQpKSB7Ci0JCSpudW1fZm9ybWF0cyA9IEFSUkFZ X1NJWkUoaWNsX2hkcl9wbGFuZV9mb3JtYXRzKTsKLQkJcmV0dXJuIGljbF9oZHJfcGxhbmVfZm9y bWF0czsKLQl9IGVsc2UgaWYgKGljbF9pc19udjEyX3lfcGxhbmUoZGV2X3ByaXYsIHBsYW5lX2lk KSkgewotCQkqbnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKGljbF9zZHJfeV9wbGFuZV9mb3JtYXRz KTsKLQkJcmV0dXJuIGljbF9zZHJfeV9wbGFuZV9mb3JtYXRzOwotCX0gZWxzZSB7Ci0JCSpudW1f Zm9ybWF0cyA9IEFSUkFZX1NJWkUoaWNsX3Nkcl91dl9wbGFuZV9mb3JtYXRzKTsKLQkJcmV0dXJu IGljbF9zZHJfdXZfcGxhbmVfZm9ybWF0czsKLQl9Ci19Ci0KLXN0YXRpYyBjb25zdCB1NjQgKmdl bjEyX2dldF9wbGFuZV9tb2RpZmllcnMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAotCQkJCQkgICAgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCkKLXsKLQlpZiAoZ2VuMTJfcGxhbmVf c3VwcG9ydHNfbWNfY2NzKGRldl9wcml2LCBwbGFuZV9pZCkpCi0JCXJldHVybiBnZW4xMl9wbGFu ZV9mb3JtYXRfbW9kaWZpZXJzX21jX2NjczsKLQllbHNlCi0JCXJldHVybiBnZW4xMl9wbGFuZV9m b3JtYXRfbW9kaWZpZXJzX3JjX2NjczsKLX0KLQotc3RhdGljIGJvb2wgc2tsX3BsYW5lX2hhc19j Y3Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJICAgICAgZW51bSBwaXBl IHBpcGUsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCi17Ci0JaWYgKHBsYW5lX2lkID09IFBMQU5F X0NVUlNPUikKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g MTApCi0JCXJldHVybiB0cnVlOwotCi0JaWYgKElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQotCQly ZXR1cm4gcGlwZSAhPSBQSVBFX0M7Ci0KLQlyZXR1cm4gcGlwZSAhPSBQSVBFX0MgJiYKLQkJKHBs YW5lX2lkID09IFBMQU5FX1BSSU1BUlkgfHwKLQkJIHBsYW5lX2lkID09IFBMQU5FX1NQUklURTAp OwotfQotCi1zdHJ1Y3QgaW50ZWxfcGxhbmUgKgotc2tsX3VuaXZlcnNhbF9wbGFuZV9jcmVhdGUo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJICAgZW51bSBwaXBlIHBpcGUs IGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCi17Ci0JY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5j cyAqcGxhbmVfZnVuY3M7Ci0Jc3RydWN0IGludGVsX3BsYW5lICpwbGFuZTsKLQllbnVtIGRybV9w bGFuZV90eXBlIHBsYW5lX3R5cGU7Ci0JdW5zaWduZWQgaW50IHN1cHBvcnRlZF9yb3RhdGlvbnM7 Ci0JdW5zaWduZWQgaW50IHN1cHBvcnRlZF9jc2M7Ci0JY29uc3QgdTY0ICptb2RpZmllcnM7Ci0J Y29uc3QgdTMyICpmb3JtYXRzOwotCWludCBudW1fZm9ybWF0czsKLQlpbnQgcmV0OwotCi0JcGxh bmUgPSBpbnRlbF9wbGFuZV9hbGxvYygpOwotCWlmIChJU19FUlIocGxhbmUpKQotCQlyZXR1cm4g cGxhbmU7Ci0KLQlwbGFuZS0+cGlwZSA9IHBpcGU7Ci0JcGxhbmUtPmlkID0gcGxhbmVfaWQ7Ci0J cGxhbmUtPmZyb250YnVmZmVyX2JpdCA9IElOVEVMX0ZST05UQlVGRkVSKHBpcGUsIHBsYW5lX2lk KTsKLQotCXBsYW5lLT5oYXNfZmJjID0gc2tsX3BsYW5lX2hhc19mYmMoZGV2X3ByaXYsIHBpcGUs IHBsYW5lX2lkKTsKLQlpZiAocGxhbmUtPmhhc19mYmMpIHsKLQkJc3RydWN0IGludGVsX2ZiYyAq ZmJjID0gJmRldl9wcml2LT5mYmM7Ci0KLQkJZmJjLT5wb3NzaWJsZV9mcmFtZWJ1ZmZlcl9iaXRz IHw9IHBsYW5lLT5mcm9udGJ1ZmZlcl9iaXQ7Ci0JfQotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJp dikgPj0gMTEpIHsKLQkJcGxhbmUtPm1pbl93aWR0aCA9IGljbF9wbGFuZV9taW5fd2lkdGg7Ci0J CXBsYW5lLT5tYXhfd2lkdGggPSBpY2xfcGxhbmVfbWF4X3dpZHRoOwotCQlwbGFuZS0+bWF4X2hl aWdodCA9IGljbF9wbGFuZV9tYXhfaGVpZ2h0OwotCX0gZWxzZSBpZiAoSU5URUxfR0VOKGRldl9w cml2KSA+PSAxMCB8fCBJU19HRU1JTklMQUtFKGRldl9wcml2KSkgewotCQlwbGFuZS0+bWF4X3dp ZHRoID0gZ2xrX3BsYW5lX21heF93aWR0aDsKLQkJcGxhbmUtPm1heF9oZWlnaHQgPSBza2xfcGxh bmVfbWF4X2hlaWdodDsKLQl9IGVsc2UgewotCQlwbGFuZS0+bWF4X3dpZHRoID0gc2tsX3BsYW5l X21heF93aWR0aDsKLQkJcGxhbmUtPm1heF9oZWlnaHQgPSBza2xfcGxhbmVfbWF4X2hlaWdodDsK LQl9Ci0KLQlwbGFuZS0+bWF4X3N0cmlkZSA9IHNrbF9wbGFuZV9tYXhfc3RyaWRlOwotCXBsYW5l LT51cGRhdGVfcGxhbmUgPSBza2xfdXBkYXRlX3BsYW5lOwotCXBsYW5lLT5kaXNhYmxlX3BsYW5l ID0gc2tsX2Rpc2FibGVfcGxhbmU7Ci0JcGxhbmUtPmdldF9od19zdGF0ZSA9IHNrbF9wbGFuZV9n ZXRfaHdfc3RhdGU7Ci0JcGxhbmUtPmNoZWNrX3BsYW5lID0gc2tsX3BsYW5lX2NoZWNrOwotCXBs YW5lLT5taW5fY2RjbGsgPSBza2xfcGxhbmVfbWluX2NkY2xrOwotCi0JaWYgKHBsYW5lX2lkID09 IFBMQU5FX1BSSU1BUlkpIHsKLQkJcGxhbmUtPm5lZWRfYXN5bmNfZmxpcF9kaXNhYmxlX3dhID0g SVNfR0VOX1JBTkdFKGRldl9wcml2LCA5LCAxMCk7Ci0JCXBsYW5lLT5hc3luY19mbGlwID0gc2ts X3BsYW5lX2FzeW5jX2ZsaXA7Ci0JCXBsYW5lLT5lbmFibGVfZmxpcF9kb25lID0gc2tsX3BsYW5l X2VuYWJsZV9mbGlwX2RvbmU7Ci0JCXBsYW5lLT5kaXNhYmxlX2ZsaXBfZG9uZSA9IHNrbF9wbGFu ZV9kaXNhYmxlX2ZsaXBfZG9uZTsKLQl9Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAx MSkKLQkJZm9ybWF0cyA9IGljbF9nZXRfcGxhbmVfZm9ybWF0cyhkZXZfcHJpdiwgcGlwZSwKLQkJ CQkJCXBsYW5lX2lkLCAmbnVtX2Zvcm1hdHMpOwotCWVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJp dikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpCi0JCWZvcm1hdHMgPSBnbGtfZ2V0 X3BsYW5lX2Zvcm1hdHMoZGV2X3ByaXYsIHBpcGUsCi0JCQkJCQlwbGFuZV9pZCwgJm51bV9mb3Jt YXRzKTsKLQllbHNlCi0JCWZvcm1hdHMgPSBza2xfZ2V0X3BsYW5lX2Zvcm1hdHMoZGV2X3ByaXYs IHBpcGUsCi0JCQkJCQlwbGFuZV9pZCwgJm51bV9mb3JtYXRzKTsKLQotCXBsYW5lLT5oYXNfY2Nz ID0gc2tsX3BsYW5lX2hhc19jY3MoZGV2X3ByaXYsIHBpcGUsIHBsYW5lX2lkKTsKLQlpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA+PSAxMikgewotCQltb2RpZmllcnMgPSBnZW4xMl9nZXRfcGxhbmVf bW9kaWZpZXJzKGRldl9wcml2LCBwbGFuZV9pZCk7Ci0JCXBsYW5lX2Z1bmNzID0gJmdlbjEyX3Bs YW5lX2Z1bmNzOwotCX0gZWxzZSB7Ci0JCWlmIChwbGFuZS0+aGFzX2NjcykKLQkJCW1vZGlmaWVy cyA9IHNrbF9wbGFuZV9mb3JtYXRfbW9kaWZpZXJzX2NjczsKLQkJZWxzZQotCQkJbW9kaWZpZXJz ID0gc2tsX3BsYW5lX2Zvcm1hdF9tb2RpZmllcnNfbm9jY3M7Ci0JCXBsYW5lX2Z1bmNzID0gJnNr bF9wbGFuZV9mdW5jczsKLQl9Ci0KLQlpZiAocGxhbmVfaWQgPT0gUExBTkVfUFJJTUFSWSkKLQkJ cGxhbmVfdHlwZSA9IERSTV9QTEFORV9UWVBFX1BSSU1BUlk7Ci0JZWxzZQotCQlwbGFuZV90eXBl ID0gRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWTsKLQotCXJldCA9IGRybV91bml2ZXJzYWxfcGxhbmVf aW5pdCgmZGV2X3ByaXYtPmRybSwgJnBsYW5lLT5iYXNlLAotCQkJCSAgICAgICAwLCBwbGFuZV9m dW5jcywKLQkJCQkgICAgICAgZm9ybWF0cywgbnVtX2Zvcm1hdHMsIG1vZGlmaWVycywKLQkJCQkg ICAgICAgcGxhbmVfdHlwZSwKLQkJCQkgICAgICAgInBsYW5lICVkJWMiLCBwbGFuZV9pZCArIDEs Ci0JCQkJICAgICAgIHBpcGVfbmFtZShwaXBlKSk7Ci0JaWYgKHJldCkKLQkJZ290byBmYWlsOwot Ci0Jc3VwcG9ydGVkX3JvdGF0aW9ucyA9Ci0JCURSTV9NT0RFX1JPVEFURV8wIHwgRFJNX01PREVf Uk9UQVRFXzkwIHwKLQkJRFJNX01PREVfUk9UQVRFXzE4MCB8IERSTV9NT0RFX1JPVEFURV8yNzA7 Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCkKLQkJc3VwcG9ydGVkX3JvdGF0aW9u cyB8PSBEUk1fTU9ERV9SRUZMRUNUX1g7Ci0KLQlkcm1fcGxhbmVfY3JlYXRlX3JvdGF0aW9uX3By b3BlcnR5KCZwbGFuZS0+YmFzZSwKLQkJCQkJICAgRFJNX01PREVfUk9UQVRFXzAsCi0JCQkJCSAg IHN1cHBvcnRlZF9yb3RhdGlvbnMpOwotCi0Jc3VwcG9ydGVkX2NzYyA9IEJJVChEUk1fQ09MT1Jf WUNCQ1JfQlQ2MDEpIHwgQklUKERSTV9DT0xPUl9ZQ0JDUl9CVDcwOSk7Ci0KLQlpZiAoSU5URUxf R0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklMQUtFKGRldl9wcml2KSkKLQkJc3VwcG9y dGVkX2NzYyB8PSBCSVQoRFJNX0NPTE9SX1lDQkNSX0JUMjAyMCk7Ci0KLQlkcm1fcGxhbmVfY3Jl YXRlX2NvbG9yX3Byb3BlcnRpZXMoJnBsYW5lLT5iYXNlLAotCQkJCQkgIHN1cHBvcnRlZF9jc2Ms Ci0JCQkJCSAgQklUKERSTV9DT0xPUl9ZQ0JDUl9MSU1JVEVEX1JBTkdFKSB8Ci0JCQkJCSAgQklU KERSTV9DT0xPUl9ZQ0JDUl9GVUxMX1JBTkdFKSwKLQkJCQkJICBEUk1fQ09MT1JfWUNCQ1JfQlQ3 MDksCi0JCQkJCSAgRFJNX0NPTE9SX1lDQkNSX0xJTUlURURfUkFOR0UpOwotCi0JZHJtX3BsYW5l X2NyZWF0ZV9hbHBoYV9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UpOwotCWRybV9wbGFuZV9jcmVhdGVf YmxlbmRfbW9kZV9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UsCi0JCQkJCSAgICAgQklUKERSTV9NT0RF X0JMRU5EX1BJWEVMX05PTkUpIHwKLQkJCQkJICAgICBCSVQoRFJNX01PREVfQkxFTkRfUFJFTVVM VEkpIHwKLQkJCQkJICAgICBCSVQoRFJNX01PREVfQkxFTkRfQ09WRVJBR0UpKTsKLQotCWRybV9w bGFuZV9jcmVhdGVfenBvc19pbW11dGFibGVfcHJvcGVydHkoJnBsYW5lLT5iYXNlLCBwbGFuZV9p ZCk7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMikKLQkJZHJtX3BsYW5lX2VuYWJs ZV9mYl9kYW1hZ2VfY2xpcHMoJnBsYW5lLT5iYXNlKTsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDEwKQotCQlkcm1fcGxhbmVfY3JlYXRlX3NjYWxpbmdfZmlsdGVyX3Byb3BlcnR5KCZw bGFuZS0+YmFzZSwKLQkJCQkJCUJJVChEUk1fU0NBTElOR19GSUxURVJfREVGQVVMVCkgfAotCQkJ CQkJQklUKERSTV9TQ0FMSU5HX0ZJTFRFUl9ORUFSRVNUX05FSUdIQk9SKSk7Ci0KLQlkcm1fcGxh bmVfaGVscGVyX2FkZCgmcGxhbmUtPmJhc2UsICZpbnRlbF9wbGFuZV9oZWxwZXJfZnVuY3MpOwot Ci0JcmV0dXJuIHBsYW5lOwotCi1mYWlsOgotCWludGVsX3BsYW5lX2ZyZWUocGxhbmUpOwotCi0J cmV0dXJuIEVSUl9QVFIocmV0KTsKLX0KLQogc3RydWN0IGludGVsX3BsYW5lICoKIGludGVsX3Nw cml0ZV9wbGFuZV9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQkJ ICBlbnVtIHBpcGUgcGlwZSwgaW50IHNwcml0ZSkKQEAgLTM0MjEsMTAgKzIwNjAsNiBAQCBpbnRl bF9zcHJpdGVfcGxhbmVfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK IAlpbnQgbnVtX2Zvcm1hdHM7CiAJaW50IHJldCwgenBvczsKIAotCWlmIChJTlRFTF9HRU4oZGV2 X3ByaXYpID49IDkpCi0JCXJldHVybiBza2xfdW5pdmVyc2FsX3BsYW5lX2NyZWF0ZShkZXZfcHJp diwgcGlwZSwKLQkJCQkJCSAgUExBTkVfU1BSSVRFMCArIHNwcml0ZSk7Ci0KIAlwbGFuZSA9IGlu dGVsX3BsYW5lX2FsbG9jKCk7CiAJaWYgKElTX0VSUihwbGFuZSkpCiAJCXJldHVybiBwbGFuZTsK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5oCmluZGV4IDc2MTI2 ZGQ4ZDU4NC4uNDE4ODk3Zjk1M2ZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX3Nwcml0ZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfc3ByaXRlLmgKQEAgLTM4LDkgKzM4LDYgQEAgdm9pZCBpbnRlbF9waXBlX3VwZGF0ZV9l bmQoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0YXRlKTsKIGludCBpbnRlbF9w bGFuZV9jaGVja19zdHJpZGUoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSk7CiBpbnQgaW50ZWxfcGxhbmVfY2hlY2tfc3JjX2Nvb3JkaW5hdGVzKHN0cnVjdCBpbnRl bF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwogaW50IGNodl9wbGFuZV9jaGVja19yb3RhdGlv bihjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsKLXN0cnVjdCBp bnRlbF9wbGFuZSAqCi1za2xfdW5pdmVyc2FsX3BsYW5lX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkgICBlbnVtIHBpcGUgcGlwZSwgZW51bSBwbGFuZV9pZCBw bGFuZV9pZCk7CiAKIHN0YXRpYyBpbmxpbmUgdTggaWNsX2hkcl9wbGFuZV9tYXNrKHZvaWQpCiB7 CkBAIC01OSw0ICs1Niw3IEBAIGludCBoc3dfcGxhbmVfbWluX2NkY2xrKGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAogaW50IHZsdl9wbGFuZV9taW5fY2RjbGsoY29u c3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCiAJCQljb25zdCBzdHJ1Y3Qg aW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsKIAordm9pZCBza2xfcHJvZ3JhbV9zY2Fs ZXIoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKKwkJCWNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlLAorCQkJY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpw bGFuZV9zdGF0ZSk7CiAjZW5kaWYgLyogX19JTlRFTF9TUFJJVEVfSF9fICovCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L3NrbF91bml2ZXJzYWxfcGxhbmUuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvc2tsX3VuaXZlcnNhbF9wbGFuZS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOThkMzFiZGM5M2JhCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5l LmMKQEAgLTAsMCArMSwyMjkyIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCisv KgorICogQ29weXJpZ2h0IMKpIDIwMjAgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaW5jbHVk ZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9kYW1hZ2VfaGVs cGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3Bs YW5lX2hlbHBlci5oPgorCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKyNpbmNsdWRlICJpbnRlbF9h dG9taWNfcGxhbmUuaCIKKyNpbmNsdWRlICJpbnRlbF9kaXNwbGF5X3R5cGVzLmgiCisjaW5jbHVk ZSAiaW50ZWxfcG0uaCIKKyNpbmNsdWRlICJpbnRlbF9wc3IuaCIKKyNpbmNsdWRlICJpbnRlbF9z cHJpdGUuaCIKKyNpbmNsdWRlICJza2xfdW5pdmVyc2FsX3BsYW5lLmgiCisKK3N0YXRpYyBjb25z dCB1MzIgc2tsX3BsYW5lX2Zvcm1hdHNbXSA9IHsKKwlEUk1fRk9STUFUX0M4LAorCURSTV9GT1JN QVRfUkdCNTY1LAorCURSTV9GT1JNQVRfWFJHQjg4ODgsCisJRFJNX0ZPUk1BVF9YQkdSODg4OCwK KwlEUk1fRk9STUFUX0FSR0I4ODg4LAorCURSTV9GT1JNQVRfQUJHUjg4ODgsCisJRFJNX0ZPUk1B VF9YUkdCMjEwMTAxMCwKKwlEUk1fRk9STUFUX1hCR1IyMTAxMDEwLAorCURSTV9GT1JNQVRfWFJH QjE2MTYxNjE2RiwKKwlEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkYsCisJRFJNX0ZPUk1BVF9ZVVlW LAorCURSTV9GT1JNQVRfWVZZVSwKKwlEUk1fRk9STUFUX1VZVlksCisJRFJNX0ZPUk1BVF9WWVVZ LAorCURSTV9GT1JNQVRfWFlVVjg4ODgsCit9OworCitzdGF0aWMgY29uc3QgdTMyIHNrbF9wbGFu YXJfZm9ybWF0c1tdID0geworCURSTV9GT1JNQVRfQzgsCisJRFJNX0ZPUk1BVF9SR0I1NjUsCisJ RFJNX0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFUX1hCR1I4ODg4LAorCURSTV9GT1JNQVRf QVJHQjg4ODgsCisJRFJNX0ZPUk1BVF9BQkdSODg4OCwKKwlEUk1fRk9STUFUX1hSR0IyMTAxMDEw LAorCURSTV9GT1JNQVRfWEJHUjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGLAor CURSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RiwKKwlEUk1fRk9STUFUX1lVWVYsCisJRFJNX0ZPUk1B VF9ZVllVLAorCURSTV9GT1JNQVRfVVlWWSwKKwlEUk1fRk9STUFUX1ZZVVksCisJRFJNX0ZPUk1B VF9OVjEyLAorCURSTV9GT1JNQVRfWFlVVjg4ODgsCit9OworCitzdGF0aWMgY29uc3QgdTMyIGds a19wbGFuYXJfZm9ybWF0c1tdID0geworCURSTV9GT1JNQVRfQzgsCisJRFJNX0ZPUk1BVF9SR0I1 NjUsCisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFUX1hCR1I4ODg4LAorCURSTV9G T1JNQVRfQVJHQjg4ODgsCisJRFJNX0ZPUk1BVF9BQkdSODg4OCwKKwlEUk1fRk9STUFUX1hSR0Iy MTAxMDEwLAorCURSTV9GT1JNQVRfWEJHUjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9YUkdCMTYxNjE2 MTZGLAorCURSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RiwKKwlEUk1fRk9STUFUX1lVWVYsCisJRFJN X0ZPUk1BVF9ZVllVLAorCURSTV9GT1JNQVRfVVlWWSwKKwlEUk1fRk9STUFUX1ZZVVksCisJRFJN X0ZPUk1BVF9OVjEyLAorCURSTV9GT1JNQVRfWFlVVjg4ODgsCisJRFJNX0ZPUk1BVF9QMDEwLAor CURSTV9GT1JNQVRfUDAxMiwKKwlEUk1fRk9STUFUX1AwMTYsCit9OworCitzdGF0aWMgY29uc3Qg dTMyIGljbF9zZHJfeV9wbGFuZV9mb3JtYXRzW10gPSB7CisJRFJNX0ZPUk1BVF9DOCwKKwlEUk1f Rk9STUFUX1JHQjU2NSwKKwlEUk1fRk9STUFUX1hSR0I4ODg4LAorCURSTV9GT1JNQVRfWEJHUjg4 ODgsCisJRFJNX0ZPUk1BVF9BUkdCODg4OCwKKwlEUk1fRk9STUFUX0FCR1I4ODg4LAorCURSTV9G T1JNQVRfWFJHQjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwKKwlEUk1fRk9STUFU X0FSR0IyMTAxMDEwLAorCURSTV9GT1JNQVRfQUJHUjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9ZVVlW LAorCURSTV9GT1JNQVRfWVZZVSwKKwlEUk1fRk9STUFUX1VZVlksCisJRFJNX0ZPUk1BVF9WWVVZ LAorCURSTV9GT1JNQVRfWTIxMCwKKwlEUk1fRk9STUFUX1kyMTIsCisJRFJNX0ZPUk1BVF9ZMjE2 LAorCURSTV9GT1JNQVRfWFlVVjg4ODgsCisJRFJNX0ZPUk1BVF9YVllVMjEwMTAxMCwKKwlEUk1f Rk9STUFUX1hWWVUxMl8xNjE2MTYxNiwKKwlEUk1fRk9STUFUX1hWWVUxNjE2MTYxNiwKK307CisK K3N0YXRpYyBjb25zdCB1MzIgaWNsX3Nkcl91dl9wbGFuZV9mb3JtYXRzW10gPSB7CisJRFJNX0ZP Uk1BVF9DOCwKKwlEUk1fRk9STUFUX1JHQjU2NSwKKwlEUk1fRk9STUFUX1hSR0I4ODg4LAorCURS TV9GT1JNQVRfWEJHUjg4ODgsCisJRFJNX0ZPUk1BVF9BUkdCODg4OCwKKwlEUk1fRk9STUFUX0FC R1I4ODg4LAorCURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9YQkdSMjEwMTAx MCwKKwlEUk1fRk9STUFUX0FSR0IyMTAxMDEwLAorCURSTV9GT1JNQVRfQUJHUjIxMDEwMTAsCisJ RFJNX0ZPUk1BVF9ZVVlWLAorCURSTV9GT1JNQVRfWVZZVSwKKwlEUk1fRk9STUFUX1VZVlksCisJ RFJNX0ZPUk1BVF9WWVVZLAorCURSTV9GT1JNQVRfTlYxMiwKKwlEUk1fRk9STUFUX1AwMTAsCisJ RFJNX0ZPUk1BVF9QMDEyLAorCURSTV9GT1JNQVRfUDAxNiwKKwlEUk1fRk9STUFUX1kyMTAsCisJ RFJNX0ZPUk1BVF9ZMjEyLAorCURSTV9GT1JNQVRfWTIxNiwKKwlEUk1fRk9STUFUX1hZVVY4ODg4 LAorCURSTV9GT1JNQVRfWFZZVTIxMDEwMTAsCisJRFJNX0ZPUk1BVF9YVllVMTJfMTYxNjE2MTYs CisJRFJNX0ZPUk1BVF9YVllVMTYxNjE2MTYsCit9OworCitzdGF0aWMgY29uc3QgdTMyIGljbF9o ZHJfcGxhbmVfZm9ybWF0c1tdID0geworCURSTV9GT1JNQVRfQzgsCisJRFJNX0ZPUk1BVF9SR0I1 NjUsCisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFUX1hCR1I4ODg4LAorCURSTV9G T1JNQVRfQVJHQjg4ODgsCisJRFJNX0ZPUk1BVF9BQkdSODg4OCwKKwlEUk1fRk9STUFUX1hSR0Iy MTAxMDEwLAorCURSTV9GT1JNQVRfWEJHUjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9BUkdCMjEwMTAx MCwKKwlEUk1fRk9STUFUX0FCR1IyMTAxMDEwLAorCURSTV9GT1JNQVRfWFJHQjE2MTYxNjE2RiwK KwlEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkYsCisJRFJNX0ZPUk1BVF9BUkdCMTYxNjE2MTZGLAor CURSTV9GT1JNQVRfQUJHUjE2MTYxNjE2RiwKKwlEUk1fRk9STUFUX1lVWVYsCisJRFJNX0ZPUk1B VF9ZVllVLAorCURSTV9GT1JNQVRfVVlWWSwKKwlEUk1fRk9STUFUX1ZZVVksCisJRFJNX0ZPUk1B VF9OVjEyLAorCURSTV9GT1JNQVRfUDAxMCwKKwlEUk1fRk9STUFUX1AwMTIsCisJRFJNX0ZPUk1B VF9QMDE2LAorCURSTV9GT1JNQVRfWTIxMCwKKwlEUk1fRk9STUFUX1kyMTIsCisJRFJNX0ZPUk1B VF9ZMjE2LAorCURSTV9GT1JNQVRfWFlVVjg4ODgsCisJRFJNX0ZPUk1BVF9YVllVMjEwMTAxMCwK KwlEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNiwKKwlEUk1fRk9STUFUX1hWWVUxNjE2MTYxNiwK K307CisKK3N0YXRpYyBjb25zdCB1NjQgc2tsX3BsYW5lX2Zvcm1hdF9tb2RpZmllcnNfbm9jY3Nb XSA9IHsKKwlJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQsCisJSTkxNV9GT1JNQVRfTU9EX1lfVElM RUQsCisJSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQsCisJRFJNX0ZPUk1BVF9NT0RfTElORUFSLAor CURSTV9GT1JNQVRfTU9EX0lOVkFMSUQKK307CisKK3N0YXRpYyBjb25zdCB1NjQgc2tsX3BsYW5l X2Zvcm1hdF9tb2RpZmllcnNfY2NzW10gPSB7CisJSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0ND UywKKwlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1MsCisJSTkxNV9GT1JNQVRfTU9EX1lmX1RJ TEVELAorCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVELAorCUk5MTVfRk9STUFUX01PRF9YX1RJTEVE LAorCURSTV9GT1JNQVRfTU9EX0xJTkVBUiwKKwlEUk1fRk9STUFUX01PRF9JTlZBTElECit9Owor CitzdGF0aWMgY29uc3QgdTY0IGdlbjEyX3BsYW5lX2Zvcm1hdF9tb2RpZmllcnNfbWNfY2NzW10g PSB7CisJSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNfQ0NTLAorCUk5MTVfRk9STUFU X01PRF9ZX1RJTEVEX0dFTjEyX1JDX0NDUywKKwlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwKKwlJ OTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwKKwlEUk1fRk9STUFUX01PRF9MSU5FQVIsCisJRFJNX0ZP Uk1BVF9NT0RfSU5WQUxJRAorfTsKKworc3RhdGljIGNvbnN0IHU2NCBnZW4xMl9wbGFuZV9mb3Jt YXRfbW9kaWZpZXJzX3JjX2Njc1tdID0geworCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEy X1JDX0NDUywKKwlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwKKwlJOTE1X0ZPUk1BVF9NT0RfWF9U SUxFRCwKKwlEUk1fRk9STUFUX01PRF9MSU5FQVIsCisJRFJNX0ZPUk1BVF9NT0RfSU5WQUxJRAor fTsKKworaW50IHNrbF9mb3JtYXRfdG9fZm91cmNjKGludCBmb3JtYXQsIGJvb2wgcmdiX29yZGVy LCBib29sIGFscGhhKQoreworCXN3aXRjaCAoZm9ybWF0KSB7CisJY2FzZSBQTEFORV9DVExfRk9S TUFUX1JHQl81NjU6CisJCXJldHVybiBEUk1fRk9STUFUX1JHQjU2NTsKKwljYXNlIFBMQU5FX0NU TF9GT1JNQVRfTlYxMjoKKwkJcmV0dXJuIERSTV9GT1JNQVRfTlYxMjsKKwljYXNlIFBMQU5FX0NU TF9GT1JNQVRfWFlVVjoKKwkJcmV0dXJuIERSTV9GT1JNQVRfWFlVVjg4ODg7CisJY2FzZSBQTEFO RV9DVExfRk9STUFUX1AwMTA6CisJCXJldHVybiBEUk1fRk9STUFUX1AwMTA7CisJY2FzZSBQTEFO RV9DVExfRk9STUFUX1AwMTI6CisJCXJldHVybiBEUk1fRk9STUFUX1AwMTI7CisJY2FzZSBQTEFO RV9DVExfRk9STUFUX1AwMTY6CisJCXJldHVybiBEUk1fRk9STUFUX1AwMTY7CisJY2FzZSBQTEFO RV9DVExfRk9STUFUX1kyMTA6CisJCXJldHVybiBEUk1fRk9STUFUX1kyMTA7CisJY2FzZSBQTEFO RV9DVExfRk9STUFUX1kyMTI6CisJCXJldHVybiBEUk1fRk9STUFUX1kyMTI7CisJY2FzZSBQTEFO RV9DVExfRk9STUFUX1kyMTY6CisJCXJldHVybiBEUk1fRk9STUFUX1kyMTY7CisJY2FzZSBQTEFO RV9DVExfRk9STUFUX1k0MTA6CisJCXJldHVybiBEUk1fRk9STUFUX1hWWVUyMTAxMDEwOworCWNh c2UgUExBTkVfQ1RMX0ZPUk1BVF9ZNDEyOgorCQlyZXR1cm4gRFJNX0ZPUk1BVF9YVllVMTJfMTYx NjE2MTY7CisJY2FzZSBQTEFORV9DVExfRk9STUFUX1k0MTY6CisJCXJldHVybiBEUk1fRk9STUFU X1hWWVUxNjE2MTYxNjsKKwlkZWZhdWx0OgorCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzg4 ODg6CisJCWlmIChyZ2Jfb3JkZXIpIHsKKwkJCWlmIChhbHBoYSkKKwkJCQlyZXR1cm4gRFJNX0ZP Uk1BVF9BQkdSODg4ODsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9YQkdSODg4ODsK KwkJfSBlbHNlIHsKKwkJCWlmIChhbHBoYSkKKwkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9BUkdCODg4 ODsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9YUkdCODg4ODsKKwkJfQorCWNhc2Ug UExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzIxMDEwMTA6CisJCWlmIChyZ2Jfb3JkZXIpIHsKKwkJCWlm IChhbHBoYSkKKwkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMDsKKwkJCWVsc2UKKwkJ CQlyZXR1cm4gRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDsKKwkJfSBlbHNlIHsKKwkJCWlmIChhbHBo YSkKKwkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDsKKwkJCWVsc2UKKwkJCQlyZXR1 cm4gRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMDsKKwkJfQorCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9Y UkdCXzE2MTYxNjE2RjoKKwkJaWYgKHJnYl9vcmRlcikgeworCQkJaWYgKGFscGhhKQorCQkJCXJl dHVybiBEUk1fRk9STUFUX0FCR1IxNjE2MTYxNkY7CisJCQllbHNlCisJCQkJcmV0dXJuIERSTV9G T1JNQVRfWEJHUjE2MTYxNjE2RjsKKwkJfSBlbHNlIHsKKwkJCWlmIChhbHBoYSkKKwkJCQlyZXR1 cm4gRFJNX0ZPUk1BVF9BUkdCMTYxNjE2MTZGOworCQkJZWxzZQorCQkJCXJldHVybiBEUk1fRk9S TUFUX1hSR0IxNjE2MTYxNkY7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB1OCBpY2xfbnYxMl95X3Bs YW5lX21hc2soc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCit7CisJaWYgKElTX1JPQ0tF VExBS0UoaTkxNSkpCisJCXJldHVybiBCSVQoUExBTkVfU1BSSVRFMikgfCBCSVQoUExBTkVfU1BS SVRFMyk7CisJZWxzZQorCQlyZXR1cm4gQklUKFBMQU5FX1NQUklURTQpIHwgQklUKFBMQU5FX1NQ UklURTUpOworfQorCitib29sIGljbF9pc19udjEyX3lfcGxhbmUoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAorCQkJIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCit7CisJcmV0dXJu IElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEgJiYKKwkJaWNsX252MTJfeV9wbGFuZV9tYXNrKGRl dl9wcml2KSAmIEJJVChwbGFuZV9pZCk7Cit9CisKK2Jvb2wgaWNsX2lzX2hkcl9wbGFuZShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCit7 CisJcmV0dXJuIElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEgJiYKKwkJaWNsX2hkcl9wbGFuZV9t YXNrKCkgJiBCSVQocGxhbmVfaWQpOworfQorCitzdGF0aWMgdm9pZAorc2tsX3BsYW5lX3JhdGlv KGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQljb25zdCBzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAorCQl1bnNpZ25lZCBpbnQgKm51bSwg dW5zaWduZWQgaW50ICpkZW4pCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKKwljb25zdCBzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKKworCWlmIChmYi0+Zm9y bWF0LT5jcHBbMF0gPT0gOCkgeworCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJ U19HRU1JTklMQUtFKGRldl9wcml2KSkgeworCQkJKm51bSA9IDEwOworCQkJKmRlbiA9IDg7CisJ CX0gZWxzZSB7CisJCQkqbnVtID0gOTsKKwkJCSpkZW4gPSA4OworCQl9CisJfSBlbHNlIHsKKwkJ Km51bSA9IDE7CisJCSpkZW4gPSAxOworCX0KK30KKworc3RhdGljIGludCBza2xfcGxhbmVfbWlu X2NkY2xrKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJICAg ICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFw aS5wbGFuZS0+ZGV2KTsKKwl1bnNpZ25lZCBpbnQgbnVtLCBkZW47CisJdW5zaWduZWQgaW50IHBp eGVsX3JhdGUgPSBpbnRlbF9wbGFuZV9waXhlbF9yYXRlKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRl KTsKKworCXNrbF9wbGFuZV9yYXRpbyhjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSwgJm51bSwgJmRl bik7CisKKwkvKiB0d28gcGl4ZWxzIHBlciBjbG9jayBvbiBnbGsrICovCisJaWYgKElOVEVMX0dF TihkZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpCisJCWRlbiAqPSAy OworCisJcmV0dXJuIERJVl9ST1VORF9VUChwaXhlbF9yYXRlICogbnVtLCBkZW4pOworfQorCitz dGF0aWMgaW50IHNrbF9wbGFuZV9tYXhfd2lkdGgoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIsCisJCQkgICAgICAgaW50IGNvbG9yX3BsYW5lLAorCQkJICAgICAgIHVuc2lnbmVkIGlu dCByb3RhdGlvbikKK3sKKwlpbnQgY3BwID0gZmItPmZvcm1hdC0+Y3BwW2NvbG9yX3BsYW5lXTsK KworCXN3aXRjaCAoZmItPm1vZGlmaWVyKSB7CisJY2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6 CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDoKKwkJLyoKKwkJICogVmFsaWRhdGVkIGxp bWl0IGlzIDRrLCBidXQgaGFzIDVrIHNob3VsZAorCQkgKiB3b3JrIGFwYXJ0IGZyb20gdGhlIGZv bGxvd2luZyBmZWF0dXJlczoKKwkJICogLSBZdGlsZSAoYWxyZWFkeSBsaW1pdGVkIHRvIDRrKQor CQkgKiAtIEZQMTYgKGFscmVhZHkgbGltaXRlZCB0byA0aykKKwkJICogLSByZW5kZXIgY29tcHJl c3Npb24gKGFscmVhZHkgbGltaXRlZCB0byA0aykKKwkJICogLSBLVk1SIHNwcml0ZSBhbmQgY3Vy c29yIChkb24ndCBjYXJlKQorCQkgKiAtIGhvcml6b250YWwgcGFubmluZyAoVE9ETyB2ZXJpZnkg dGhpcykKKwkJICogLSBwaXBlIGFuZCBwbGFuZSBzY2FsaW5nIChUT0RPIHZlcmlmeSB0aGlzKQor CQkgKi8KKwkJaWYgKGNwcCA9PSA4KQorCQkJcmV0dXJuIDQwOTY7CisJCWVsc2UKKwkJCXJldHVy biA1MTIwOworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTOgorCWNhc2UgSTkxNV9G T1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dF TjEyX01DX0NDUzoKKwkJLyogRklYTUUgQVVYIHBsYW5lPyAqLworCWNhc2UgSTkxNV9GT1JNQVRf TU9EX1lfVElMRUQ6CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ6CisJCWlmIChjcHAg PT0gOCkKKwkJCXJldHVybiAyMDQ4OworCQllbHNlCisJCQlyZXR1cm4gNDA5NjsKKwlkZWZhdWx0 OgorCQlNSVNTSU5HX0NBU0UoZmItPm1vZGlmaWVyKTsKKwkJcmV0dXJuIDIwNDg7CisJfQorfQor CitzdGF0aWMgaW50IGdsa19wbGFuZV9tYXhfd2lkdGgoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIsCisJCQkgICAgICAgaW50IGNvbG9yX3BsYW5lLAorCQkJICAgICAgIHVuc2lnbmVk IGludCByb3RhdGlvbikKK3sKKwlpbnQgY3BwID0gZmItPmZvcm1hdC0+Y3BwW2NvbG9yX3BsYW5l XTsKKworCXN3aXRjaCAoZmItPm1vZGlmaWVyKSB7CisJY2FzZSBEUk1fRk9STUFUX01PRF9MSU5F QVI6CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDoKKwkJaWYgKGNwcCA9PSA4KQorCQkJ cmV0dXJuIDQwOTY7CisJCWVsc2UKKwkJCXJldHVybiA1MTIwOworCWNhc2UgSTkxNV9GT1JNQVRf TU9EX1lfVElMRURfQ0NTOgorCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoKKwkJ LyogRklYTUUgQVVYIHBsYW5lPyAqLworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6CisJ Y2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ6CisJCWlmIChjcHAgPT0gOCkKKwkJCXJldHVy biAyMDQ4OworCQllbHNlCisJCQlyZXR1cm4gNTEyMDsKKwlkZWZhdWx0OgorCQlNSVNTSU5HX0NB U0UoZmItPm1vZGlmaWVyKTsKKwkJcmV0dXJuIDIwNDg7CisJfQorfQorCitzdGF0aWMgaW50IGlj bF9wbGFuZV9taW5fd2lkdGgoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkg ICAgICAgaW50IGNvbG9yX3BsYW5lLAorCQkJICAgICAgIHVuc2lnbmVkIGludCByb3RhdGlvbikK K3sKKwkvKiBXYV8xNDAxMTI2NDY1NywgV2FfMTQwMTEwNTA1NjM6IGdlbjExKyAqLworCXN3aXRj aCAoZmItPmZvcm1hdC0+Zm9ybWF0KSB7CisJY2FzZSBEUk1fRk9STUFUX0M4OgorCQlyZXR1cm4g MTg7CisJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKKwkJcmV0dXJuIDEwOworCWNhc2UgRFJNX0ZP Uk1BVF9YUkdCODg4ODoKKwljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6CisJY2FzZSBEUk1fRk9S TUFUX0FSR0I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKKwljYXNlIERSTV9GT1JN QVRfWFJHQjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX1hCR1IyMTAxMDEwOgorCWNhc2UgRFJN X0ZPUk1BVF9BUkdCMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfQUJHUjIxMDEwMTA6CisJY2Fz ZSBEUk1fRk9STUFUX1hWWVUyMTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9ZMjEyOgorCWNhc2Ug RFJNX0ZPUk1BVF9ZMjE2OgorCQlyZXR1cm4gNjsKKwljYXNlIERSTV9GT1JNQVRfTlYxMjoKKwkJ cmV0dXJuIDIwOworCWNhc2UgRFJNX0ZPUk1BVF9QMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9QMDEy OgorCWNhc2UgRFJNX0ZPUk1BVF9QMDE2OgorCQlyZXR1cm4gMTI7CisJY2FzZSBEUk1fRk9STUFU X1hSR0IxNjE2MTYxNkY6CisJY2FzZSBEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkY6CisJY2FzZSBE Uk1fRk9STUFUX0FSR0IxNjE2MTYxNkY6CisJY2FzZSBEUk1fRk9STUFUX0FCR1IxNjE2MTYxNkY6 CisJY2FzZSBEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNjoKKwljYXNlIERSTV9GT1JNQVRfWFZZ VTE2MTYxNjE2OgorCQlyZXR1cm4gNDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTsKKwl9Cit9CisK K3N0YXRpYyBpbnQgaWNsX3BsYW5lX21heF93aWR0aChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiwKKwkJCSAgICAgICBpbnQgY29sb3JfcGxhbmUsCisJCQkgICAgICAgdW5zaWduZWQg aW50IHJvdGF0aW9uKQoreworCXJldHVybiA1MTIwOworfQorCitzdGF0aWMgaW50IHNrbF9wbGFu ZV9tYXhfaGVpZ2h0KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJCWludCBj b2xvcl9wbGFuZSwKKwkJCQl1bnNpZ25lZCBpbnQgcm90YXRpb24pCit7CisJcmV0dXJuIDQwOTY7 Cit9CisKK3N0YXRpYyBpbnQgaWNsX3BsYW5lX21heF9oZWlnaHQoY29uc3Qgc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmIsCisJCQkJaW50IGNvbG9yX3BsYW5lLAorCQkJCXVuc2lnbmVkIGludCBy b3RhdGlvbikKK3sKKwlyZXR1cm4gNDMyMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorc2ts X3BsYW5lX21heF9zdHJpZGUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKKwkJICAgICB1MzIg cGl4ZWxfZm9ybWF0LCB1NjQgbW9kaWZpZXIsCisJCSAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9u KQoreworCWNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmluZm8gPSBkcm1fZm9ybWF0X2lu Zm8ocGl4ZWxfZm9ybWF0KTsKKwlpbnQgY3BwID0gaW5mby0+Y3BwWzBdOworCisJLyoKKwkgKiAi VGhlIHN0cmlkZSBpbiBieXRlcyBtdXN0IG5vdCBleGNlZWQgdGhlCisJICogb2YgdGhlIHNpemUg b2YgOEsgcGl4ZWxzIGFuZCAzMksgYnl0ZXMuIgorCSAqLworCWlmIChkcm1fcm90YXRpb25fOTBf b3JfMjcwKHJvdGF0aW9uKSkKKwkJcmV0dXJuIG1pbig4MTkyLCAzMjc2OCAvIGNwcCk7CisJZWxz ZQorCQlyZXR1cm4gbWluKDgxOTIgKiBjcHAsIDMyNzY4KTsKK30KKworCisvKiBQcmVvZmZzZXQg dmFsdWVzIGZvciBZVVYgdG8gUkdCIENvbnZlcnNpb24gKi8KKyNkZWZpbmUgUFJFT0ZGX1lVVl9U T19SR0JfSEkJCTB4MTgwMAorI2RlZmluZSBQUkVPRkZfWVVWX1RPX1JHQl9NRQkJMHgxRjAwCisj ZGVmaW5lIFBSRU9GRl9ZVVZfVE9fUkdCX0xPCQkweDE4MDAKKworI2RlZmluZSAgUk9GRih4KSAg ICAgICAgICAoKCh4KSAmIDB4ZmZmZikgPDwgMTYpCisjZGVmaW5lICBHT0ZGKHgpICAgICAgICAg ICgoKHgpICYgMHhmZmZmKSA8PCAwKQorI2RlZmluZSAgQk9GRih4KSAgICAgICAgICAoKCh4KSAm IDB4ZmZmZikgPDwgMTYpCisKK3N0YXRpYyB2b2lkCitpY2xfcHJvZ3JhbV9pbnB1dF9jc2Moc3Ry dWN0IGludGVsX3BsYW5lICpwbGFuZSwKKwkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g dG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOworCWVudW0gcGlwZSBwaXBlID0gcGxhbmUtPnBpcGU7 CisJZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHBsYW5lLT5pZDsKKworCXN0YXRpYyBjb25zdCB1 MTYgaW5wdXRfY3NjX21hdHJpeFtdWzldID0geworCQkvKgorCQkgKiBCVC42MDEgZnVsbCByYW5n ZSBZQ2JDciAtPiBmdWxsIHJhbmdlIFJHQgorCQkgKiBUaGUgbWF0cml4IHJlcXVpcmVkIGlzIDoK KwkJICogWzEuMDAwLCAwLjAwMCwgMS4zNzEsCisJCSAqICAxLjAwMCwgLTAuMzM2LCAtMC42OTgs CisJCSAqICAxLjAwMCwgMS43MzIsIDAuMDAwMF0KKwkJICovCisJCVtEUk1fQ09MT1JfWUNCQ1Jf QlQ2MDFdID0geworCQkJMHg3QUY4LCAweDc4MDAsIDB4MCwKKwkJCTB4OEIyOCwgMHg3ODAwLCAw eDlBQzAsCisJCQkweDAsIDB4NzgwMCwgMHg3REQ4LAorCQl9LAorCQkvKgorCQkgKiBCVC43MDkg ZnVsbCByYW5nZSBZQ2JDciAtPiBmdWxsIHJhbmdlIFJHQgorCQkgKiBUaGUgbWF0cml4IHJlcXVp cmVkIGlzIDoKKwkJICogWzEuMDAwLCAwLjAwMCwgMS41NzQsCisJCSAqICAxLjAwMCwgLTAuMTg3 LCAtMC40NjgsCisJCSAqICAxLjAwMCwgMS44NTUsIDAuMDAwMF0KKwkJICovCisJCVtEUk1fQ09M T1JfWUNCQ1JfQlQ3MDldID0geworCQkJMHg3Qzk4LCAweDc4MDAsIDB4MCwKKwkJCTB4OUVGOCwg MHg3ODAwLCAweEFDMDAsCisJCQkweDAsIDB4NzgwMCwgIDB4N0VEOCwKKwkJfSwKKwkJLyoKKwkJ ICogQlQuMjAyMCBmdWxsIHJhbmdlIFlDYkNyIC0+IGZ1bGwgcmFuZ2UgUkdCCisJCSAqIFRoZSBt YXRyaXggcmVxdWlyZWQgaXMgOgorCQkgKiBbMS4wMDAsIDAuMDAwLCAxLjQ3NCwKKwkJICogIDEu MDAwLCAtMC4xNjQ1LCAtMC41NzEzLAorCQkgKiAgMS4wMDAsIDEuODgxNCwgMC4wMDAwXQorCQkg Ki8KKwkJW0RSTV9DT0xPUl9ZQ0JDUl9CVDIwMjBdID0geworCQkJMHg3QkM4LCAweDc4MDAsIDB4 MCwKKwkJCTB4ODkyOCwgMHg3ODAwLCAweEFBODgsCisJCQkweDAsIDB4NzgwMCwgMHg3RjEwLAor CQl9LAorCX07CisKKwkvKiBNYXRyaXggZm9yIExpbWl0ZWQgUmFuZ2UgdG8gRnVsbCBSYW5nZSBD b252ZXJzaW9uICovCisJc3RhdGljIGNvbnN0IHUxNiBpbnB1dF9jc2NfbWF0cml4X2xyW11bOV0g PSB7CisJCS8qCisJCSAqIEJULjYwMSBMaW10ZWQgcmFuZ2UgWUNiQ3IgLT4gZnVsbCByYW5nZSBS R0IKKwkJICogVGhlIG1hdHJpeCByZXF1aXJlZCBpcyA6CisJCSAqIFsxLjE2NDM4NCwgMC4wMDAs IDEuNTk2MDI3LAorCQkgKiAgMS4xNjQzODQsIC0wLjM5MTc1LCAtMC44MTI4MTMsCisJCSAqICAx LjE2NDM4NCwgMi4wMTcyMzIsIDAuMDAwMF0KKwkJICovCisJCVtEUk1fQ09MT1JfWUNCQ1JfQlQ2 MDFdID0geworCQkJMHg3Q0M4LCAweDc5NTAsIDB4MCwKKwkJCTB4OEQwMCwgMHg3OTUwLCAweDlD ODgsCisJCQkweDAsIDB4Nzk1MCwgMHg2ODEwLAorCQl9LAorCQkvKgorCQkgKiBCVC43MDkgTGlt aXRlZCByYW5nZSBZQ2JDciAtPiBmdWxsIHJhbmdlIFJHQgorCQkgKiBUaGUgbWF0cml4IHJlcXVp cmVkIGlzIDoKKwkJICogWzEuMTY0Mzg0LCAwLjAwMCwgMS43OTI3NDEsCisJCSAqICAxLjE2NDM4 NCwgLTAuMjEzMjQ5LCAtMC41MzI5MDksCisJCSAqICAxLjE2NDM4NCwgMi4xMTI0MDIsIDAuMDAw MF0KKwkJICovCisJCVtEUk1fQ09MT1JfWUNCQ1JfQlQ3MDldID0geworCQkJMHg3RTU4LCAweDc5 NTAsIDB4MCwKKwkJCTB4ODg4OCwgMHg3OTUwLCAweEFEQTgsCisJCQkweDAsIDB4Nzk1MCwgIDB4 Njg3MCwKKwkJfSwKKwkJLyoKKwkJICogQlQuMjAyMCBMaW1pdGVkIHJhbmdlIFlDYkNyIC0+IGZ1 bGwgcmFuZ2UgUkdCCisJCSAqIFRoZSBtYXRyaXggcmVxdWlyZWQgaXMgOgorCQkgKiBbMS4xNjQs IDAuMDAwLCAxLjY3OCwKKwkJICogIDEuMTY0LCAtMC4xODczLCAtMC42NTA0LAorCQkgKiAgMS4x NjQsIDIuMTQxNywgMC4wMDAwXQorCQkgKi8KKwkJW0RSTV9DT0xPUl9ZQ0JDUl9CVDIwMjBdID0g eworCQkJMHg3RDcwLCAweDc5NTAsIDB4MCwKKwkJCTB4OEE2OCwgMHg3OTUwLCAweEFDMDAsCisJ CQkweDAsIDB4Nzk1MCwgMHg2ODkwLAorCQl9LAorCX07CisJY29uc3QgdTE2ICpjc2M7CisKKwlp ZiAocGxhbmVfc3RhdGUtPmh3LmNvbG9yX3JhbmdlID09IERSTV9DT0xPUl9ZQ0JDUl9GVUxMX1JB TkdFKQorCQljc2MgPSBpbnB1dF9jc2NfbWF0cml4W3BsYW5lX3N0YXRlLT5ody5jb2xvcl9lbmNv ZGluZ107CisJZWxzZQorCQljc2MgPSBpbnB1dF9jc2NfbWF0cml4X2xyW3BsYW5lX3N0YXRlLT5o dy5jb2xvcl9lbmNvZGluZ107CisKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVf SU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCAwKSwKKwkJCSAgUk9GRihjc2NbMF0pIHwg R09GRihjc2NbMV0pKTsKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRf Q1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCAxKSwKKwkJCSAgQk9GRihjc2NbMl0pKTsKKwlpbnRl bF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5l X2lkLCAyKSwKKwkJCSAgUk9GRihjc2NbM10pIHwgR09GRihjc2NbNF0pKTsKKwlpbnRlbF9kZV93 cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCAz KSwKKwkJCSAgQk9GRihjc2NbNV0pKTsKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExB TkVfSU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCA0KSwKKwkJCSAgUk9GRihjc2NbNl0p IHwgR09GRihjc2NbN10pKTsKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5Q VVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCA1KSwKKwkJCSAgQk9GRihjc2NbOF0pKTsKKwor CWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9JTlBVVF9DU0NfUFJFT0ZGKHBpcGUs IHBsYW5lX2lkLCAwKSwKKwkJCSAgUFJFT0ZGX1lVVl9UT19SR0JfSEkpOworCWlmIChwbGFuZV9z dGF0ZS0+aHcuY29sb3JfcmFuZ2UgPT0gRFJNX0NPTE9SX1lDQkNSX0ZVTExfUkFOR0UpCisJCWlu dGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LAorCQkJCSAgUExBTkVfSU5QVVRfQ1NDX1BSRU9GRihw aXBlLCBwbGFuZV9pZCwgMSksCisJCQkJICAwKTsKKwllbHNlCisJCWludGVsX2RlX3dyaXRlX2Z3 KGRldl9wcml2LAorCQkJCSAgUExBTkVfSU5QVVRfQ1NDX1BSRU9GRihwaXBlLCBwbGFuZV9pZCwg MSksCisJCQkJICBQUkVPRkZfWVVWX1RPX1JHQl9NRSk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2 X3ByaXYsIFBMQU5FX0lOUFVUX0NTQ19QUkVPRkYocGlwZSwgcGxhbmVfaWQsIDIpLAorCQkJICBQ UkVPRkZfWVVWX1RPX1JHQl9MTyk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsCisJCQkg IFBMQU5FX0lOUFVUX0NTQ19QT1NUT0ZGKHBpcGUsIHBsYW5lX2lkLCAwKSwgMHgwKTsKKwlpbnRl bF9kZV93cml0ZV9mdyhkZXZfcHJpdiwKKwkJCSAgUExBTkVfSU5QVVRfQ1NDX1BPU1RPRkYocGlw ZSwgcGxhbmVfaWQsIDEpLCAweDApOworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LAorCQkJ ICBQTEFORV9JTlBVVF9DU0NfUE9TVE9GRihwaXBlLCBwbGFuZV9pZCwgMiksIDB4MCk7Cit9CisK K3N0YXRpYyBib29sIGlzX3N1cmZhY2VfbGluZWFyKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUpCit7CisJcmV0dXJuIGZiLT5tb2RpZmllciA9PSBEUk1f Rk9STUFUX01PRF9MSU5FQVIgfHwKKwkgICAgICAgaXNfZ2VuMTJfY2NzX3BsYW5lKGZiLCBjb2xv cl9wbGFuZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2tsX3BsYW5lX3N0cmlkZV9tdWx0 KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJCQkgIGludCBjb2xvcl9wbGFu ZSwgdW5zaWduZWQgaW50IHJvdGF0aW9uKQoreworCS8qCisJICogVGhlIHN0cmlkZSBpcyBlaXRo ZXIgZXhwcmVzc2VkIGFzIGEgbXVsdGlwbGUgb2YgNjQgYnl0ZXMgY2h1bmtzIGZvcgorCSAqIGxp bmVhciBidWZmZXJzIG9yIGluIG51bWJlciBvZiB0aWxlcyBmb3IgdGlsZWQgYnVmZmVycy4KKwkg Ki8KKwlpZiAoaXNfc3VyZmFjZV9saW5lYXIoZmIsIGNvbG9yX3BsYW5lKSkKKwkJcmV0dXJuIDY0 OworCWVsc2UgaWYgKGRybV9yb3RhdGlvbl85MF9vcl8yNzAocm90YXRpb24pKQorCQlyZXR1cm4g aW50ZWxfdGlsZV9oZWlnaHQoZmIsIGNvbG9yX3BsYW5lKTsKKwllbHNlCisJCXJldHVybiBpbnRl bF90aWxlX3dpZHRoX2J5dGVzKGZiLCBjb2xvcl9wbGFuZSk7Cit9CisKK3N0YXRpYyB1MzIgc2ts X3BsYW5lX3N0cmlkZShjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRl LAorCQkJICAgIGludCBjb2xvcl9wbGFuZSkKK3sKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKKwl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBw bGFuZV9zdGF0ZS0+aHcucm90YXRpb247CisJdTMyIHN0cmlkZSA9IHBsYW5lX3N0YXRlLT5jb2xv cl9wbGFuZVtjb2xvcl9wbGFuZV0uc3RyaWRlOworCisJaWYgKGNvbG9yX3BsYW5lID49IGZiLT5m b3JtYXQtPm51bV9wbGFuZXMpCisJCXJldHVybiAwOworCisJcmV0dXJuIHN0cmlkZSAvIHNrbF9w bGFuZV9zdHJpZGVfbXVsdChmYiwgY29sb3JfcGxhbmUsIHJvdGF0aW9uKTsKK30KKworc3RhdGlj IHZvaWQKK3NrbF9kaXNhYmxlX3BsYW5lKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCisJCSAg Y29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOworCWVu dW0gcGxhbmVfaWQgcGxhbmVfaWQgPSBwbGFuZS0+aWQ7CisJZW51bSBwaXBlIHBpcGUgPSBwbGFu ZS0+cGlwZTsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUo JmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOworCisJaWYgKGljbF9pc19oZHJfcGxh bmUoZGV2X3ByaXYsIHBsYW5lX2lkKSkKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBM QU5FX0NVU19DVEwocGlwZSwgcGxhbmVfaWQpLCAwKTsKKworCXNrbF93cml0ZV9wbGFuZV93bShw bGFuZSwgY3J0Y19zdGF0ZSk7CisKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVf Q1RMKHBpcGUsIHBsYW5lX2lkKSwgMCk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBM QU5FX1NVUkYocGlwZSwgcGxhbmVfaWQpLCAwKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOworfQorCitzdGF0aWMgYm9vbAorc2ts X3BsYW5lX2dldF9od19zdGF0ZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAorCQkgICAgICAg ZW51bSBwaXBlICpwaXBlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKKwllbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9t YWluIHBvd2VyX2RvbWFpbjsKKwllbnVtIHBsYW5lX2lkIHBsYW5lX2lkID0gcGxhbmUtPmlkOwor CWludGVsX3dha2VyZWZfdCB3YWtlcmVmOworCWJvb2wgcmV0OworCisJcG93ZXJfZG9tYWluID0g UE9XRVJfRE9NQUlOX1BJUEUocGxhbmUtPnBpcGUpOworCXdha2VyZWYgPSBpbnRlbF9kaXNwbGF5 X3Bvd2VyX2dldF9pZl9lbmFibGVkKGRldl9wcml2LCBwb3dlcl9kb21haW4pOworCWlmICghd2Fr ZXJlZikKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0ID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwg UExBTkVfQ1RMKHBsYW5lLT5waXBlLCBwbGFuZV9pZCkpICYgUExBTkVfQ1RMX0VOQUJMRTsKKwor CSpwaXBlID0gcGxhbmUtPnBpcGU7CisKKwlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJp diwgcG93ZXJfZG9tYWluLCB3YWtlcmVmKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1 MzIgc2tsX3BsYW5lX2N0bF9mb3JtYXQodTMyIHBpeGVsX2Zvcm1hdCkKK3sKKwlzd2l0Y2ggKHBp eGVsX2Zvcm1hdCkgeworCWNhc2UgRFJNX0ZPUk1BVF9DODoKKwkJcmV0dXJuIFBMQU5FX0NUTF9G T1JNQVRfSU5ERVhFRDsKKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgorCQlyZXR1cm4gUExBTkVf Q1RMX0ZPUk1BVF9SR0JfNTY1OworCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKKwljYXNlIERS TV9GT1JNQVRfQUJHUjg4ODg6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1hSR0JfODg4OCB8 IFBMQU5FX0NUTF9PUkRFUl9SR0JYOworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKKwljYXNl IERSTV9GT1JNQVRfQVJHQjg4ODg6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1hSR0JfODg4 ODsKKwljYXNlIERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX0FCR1Iy MTAxMDEwOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzIxMDEwMTAgfCBQTEFORV9D VExfT1JERVJfUkdCWDsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6CisJY2FzZSBEUk1f Rk9STUFUX0FSR0IyMTAxMDEwOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzIxMDEw MTA7CisJY2FzZSBEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkY6CisJY2FzZSBEUk1fRk9STUFUX0FC R1IxNjE2MTYxNkY6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1hSR0JfMTYxNjE2MTZGIHwg UExBTkVfQ1RMX09SREVSX1JHQlg7CisJY2FzZSBEUk1fRk9STUFUX1hSR0IxNjE2MTYxNkY6CisJ Y2FzZSBEUk1fRk9STUFUX0FSR0IxNjE2MTYxNkY6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFU X1hSR0JfMTYxNjE2MTZGOworCWNhc2UgRFJNX0ZPUk1BVF9YWVVWODg4ODoKKwkJcmV0dXJuIFBM QU5FX0NUTF9GT1JNQVRfWFlVVjsKKwljYXNlIERSTV9GT1JNQVRfWVVZVjoKKwkJcmV0dXJuIFBM QU5FX0NUTF9GT1JNQVRfWVVWNDIyIHwgUExBTkVfQ1RMX1lVVjQyMl9ZVVlWOworCWNhc2UgRFJN X0ZPUk1BVF9ZVllVOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9ZVVY0MjIgfCBQTEFORV9D VExfWVVWNDIyX1lWWVU7CisJY2FzZSBEUk1fRk9STUFUX1VZVlk6CisJCXJldHVybiBQTEFORV9D VExfRk9STUFUX1lVVjQyMiB8IFBMQU5FX0NUTF9ZVVY0MjJfVVlWWTsKKwljYXNlIERSTV9GT1JN QVRfVllVWToKKwkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWVVWNDIyIHwgUExBTkVfQ1RMX1lV VjQyMl9WWVVZOworCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZP Uk1BVF9OVjEyOworCWNhc2UgRFJNX0ZPUk1BVF9QMDEwOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZP Uk1BVF9QMDEwOworCWNhc2UgRFJNX0ZPUk1BVF9QMDEyOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZP Uk1BVF9QMDEyOworCWNhc2UgRFJNX0ZPUk1BVF9QMDE2OgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZP Uk1BVF9QMDE2OworCWNhc2UgRFJNX0ZPUk1BVF9ZMjEwOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZP Uk1BVF9ZMjEwOworCWNhc2UgRFJNX0ZPUk1BVF9ZMjEyOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZP Uk1BVF9ZMjEyOworCWNhc2UgRFJNX0ZPUk1BVF9ZMjE2OgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZP Uk1BVF9ZMjE2OworCWNhc2UgRFJNX0ZPUk1BVF9YVllVMjEwMTAxMDoKKwkJcmV0dXJuIFBMQU5F X0NUTF9GT1JNQVRfWTQxMDsKKwljYXNlIERSTV9GT1JNQVRfWFZZVTEyXzE2MTYxNjE2OgorCQly ZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9ZNDEyOworCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTYxNjE2 MTY6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1k0MTY7CisJZGVmYXVsdDoKKwkJTUlTU0lO R19DQVNFKHBpeGVsX2Zvcm1hdCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIg c2tsX3BsYW5lX2N0bF9hbHBoYShjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlKQoreworCWlmICghcGxhbmVfc3RhdGUtPmh3LmZiLT5mb3JtYXQtPmhhc19hbHBoYSkK KwkJcmV0dXJuIFBMQU5FX0NUTF9BTFBIQV9ESVNBQkxFOworCisJc3dpdGNoIChwbGFuZV9zdGF0 ZS0+aHcucGl4ZWxfYmxlbmRfbW9kZSkgeworCWNhc2UgRFJNX01PREVfQkxFTkRfUElYRUxfTk9O RToKKwkJcmV0dXJuIFBMQU5FX0NUTF9BTFBIQV9ESVNBQkxFOworCWNhc2UgRFJNX01PREVfQkxF TkRfUFJFTVVMVEk6CisJCXJldHVybiBQTEFORV9DVExfQUxQSEFfU1dfUFJFTVVMVElQTFk7CisJ Y2FzZSBEUk1fTU9ERV9CTEVORF9DT1ZFUkFHRToKKwkJcmV0dXJuIFBMQU5FX0NUTF9BTFBIQV9I V19QUkVNVUxUSVBMWTsKKwlkZWZhdWx0OgorCQlNSVNTSU5HX0NBU0UocGxhbmVfc3RhdGUtPmh3 LnBpeGVsX2JsZW5kX21vZGUpOworCQlyZXR1cm4gUExBTkVfQ1RMX0FMUEhBX0RJU0FCTEU7CisJ fQorfQorCitzdGF0aWMgdTMyIGdsa19wbGFuZV9jb2xvcl9jdGxfYWxwaGEoY29uc3Qgc3RydWN0 IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlpZiAoIXBsYW5lX3N0YXRlLT5o dy5mYi0+Zm9ybWF0LT5oYXNfYWxwaGEpCisJCXJldHVybiBQTEFORV9DT0xPUl9BTFBIQV9ESVNB QkxFOworCisJc3dpdGNoIChwbGFuZV9zdGF0ZS0+aHcucGl4ZWxfYmxlbmRfbW9kZSkgeworCWNh c2UgRFJNX01PREVfQkxFTkRfUElYRUxfTk9ORToKKwkJcmV0dXJuIFBMQU5FX0NPTE9SX0FMUEhB X0RJU0FCTEU7CisJY2FzZSBEUk1fTU9ERV9CTEVORF9QUkVNVUxUSToKKwkJcmV0dXJuIFBMQU5F X0NPTE9SX0FMUEhBX1NXX1BSRU1VTFRJUExZOworCWNhc2UgRFJNX01PREVfQkxFTkRfQ09WRVJB R0U6CisJCXJldHVybiBQTEFORV9DT0xPUl9BTFBIQV9IV19QUkVNVUxUSVBMWTsKKwlkZWZhdWx0 OgorCQlNSVNTSU5HX0NBU0UocGxhbmVfc3RhdGUtPmh3LnBpeGVsX2JsZW5kX21vZGUpOworCQly ZXR1cm4gUExBTkVfQ09MT1JfQUxQSEFfRElTQUJMRTsKKwl9Cit9CisKK3N0YXRpYyB1MzIgc2ts X3BsYW5lX2N0bF90aWxpbmcodTY0IGZiX21vZGlmaWVyKQoreworCXN3aXRjaCAoZmJfbW9kaWZp ZXIpIHsKKwljYXNlIERSTV9GT1JNQVRfTU9EX0xJTkVBUjoKKwkJYnJlYWs7CisJY2FzZSBJOTE1 X0ZPUk1BVF9NT0RfWF9USUxFRDoKKwkJcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9YOworCWNhc2Ug STkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6CisJCXJldHVybiBQTEFORV9DVExfVElMRURfWTsKKwlj YXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKKwkJcmV0dXJuIFBMQU5FX0NUTF9USUxF RF9ZIHwgUExBTkVfQ1RMX1JFTkRFUl9ERUNPTVBSRVNTSU9OX0VOQUJMRTsKKwljYXNlIEk5MTVf Rk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX1JDX0NDUzoKKwkJcmV0dXJuIFBMQU5FX0NUTF9USUxF RF9ZIHwKKwkJICAgICAgIFBMQU5FX0NUTF9SRU5ERVJfREVDT01QUkVTU0lPTl9FTkFCTEUgfAor CQkgICAgICAgUExBTkVfQ1RMX0NMRUFSX0NPTE9SX0RJU0FCTEU7CisJY2FzZSBJOTE1X0ZPUk1B VF9NT0RfWV9USUxFRF9HRU4xMl9NQ19DQ1M6CisJCXJldHVybiBQTEFORV9DVExfVElMRURfWSB8 IFBMQU5FX0NUTF9NRURJQV9ERUNPTVBSRVNTSU9OX0VOQUJMRTsKKwljYXNlIEk5MTVfRk9STUFU X01PRF9ZZl9USUxFRDoKKwkJcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9ZRjsKKwljYXNlIEk5MTVf Rk9STUFUX01PRF9ZZl9USUxFRF9DQ1M6CisJCXJldHVybiBQTEFORV9DVExfVElMRURfWUYgfCBQ TEFORV9DVExfUkVOREVSX0RFQ09NUFJFU1NJT05fRU5BQkxFOworCWRlZmF1bHQ6CisJCU1JU1NJ TkdfQ0FTRShmYl9tb2RpZmllcik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIg c2tsX3BsYW5lX2N0bF9yb3RhdGUodW5zaWduZWQgaW50IHJvdGF0ZSkKK3sKKwlzd2l0Y2ggKHJv dGF0ZSkgeworCWNhc2UgRFJNX01PREVfUk9UQVRFXzA6CisJCWJyZWFrOworCS8qCisJICogRFJN X01PREVfUk9UQVRFXyBpcyBjb3VudGVyIGNsb2Nrd2lzZSB0byBzdGF5IGNvbXBhdGlibGUgd2l0 aCBYcmFuZHIKKwkgKiB3aGlsZSBpOTE1IEhXIHJvdGF0aW9uIGlzIGNsb2Nrd2lzZSwgdGhhdHMg d2h5IHRoaXMgc3dhcHBpbmcuCisJICovCisJY2FzZSBEUk1fTU9ERV9ST1RBVEVfOTA6CisJCXJl dHVybiBQTEFORV9DVExfUk9UQVRFXzI3MDsKKwljYXNlIERSTV9NT0RFX1JPVEFURV8xODA6CisJ CXJldHVybiBQTEFORV9DVExfUk9UQVRFXzE4MDsKKwljYXNlIERSTV9NT0RFX1JPVEFURV8yNzA6 CisJCXJldHVybiBQTEFORV9DVExfUk9UQVRFXzkwOworCWRlZmF1bHQ6CisJCU1JU1NJTkdfQ0FT RShyb3RhdGUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGNubF9wbGFuZV9j dGxfZmxpcCh1bnNpZ25lZCBpbnQgcmVmbGVjdCkKK3sKKwlzd2l0Y2ggKHJlZmxlY3QpIHsKKwlj YXNlIDA6CisJCWJyZWFrOworCWNhc2UgRFJNX01PREVfUkVGTEVDVF9YOgorCQlyZXR1cm4gUExB TkVfQ1RMX0ZMSVBfSE9SSVpPTlRBTDsKKwljYXNlIERSTV9NT0RFX1JFRkxFQ1RfWToKKwlkZWZh dWx0OgorCQlNSVNTSU5HX0NBU0UocmVmbGVjdCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyB1MzIgc2tsX3BsYW5lX2N0bF9jcnRjKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRv X2k5MTUoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjLT5kZXYpOworCXUzMiBwbGFuZV9jdGwgPSAwOwor CisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJp dikpCisJCXJldHVybiBwbGFuZV9jdGw7CisKKwlpZiAoY3J0Y19zdGF0ZS0+Z2FtbWFfZW5hYmxl KQorCQlwbGFuZV9jdGwgfD0gUExBTkVfQ1RMX1BJUEVfR0FNTUFfRU5BQkxFOworCisJaWYgKGNy dGNfc3RhdGUtPmNzY19lbmFibGUpCisJCXBsYW5lX2N0bCB8PSBQTEFORV9DVExfUElQRV9DU0Nf RU5BQkxFOworCisJcmV0dXJuIHBsYW5lX2N0bDsKK30KKworc3RhdGljIHUzMiBza2xfcGxhbmVf Y3RsKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJIGNvbnN0 IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0KKwkJdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFu ZS0+ZGV2KTsKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRl LT5ody5mYjsKKwl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+aHcucm90YXRp b247CisJY29uc3Qgc3RydWN0IGRybV9pbnRlbF9zcHJpdGVfY29sb3JrZXkgKmtleSA9ICZwbGFu ZV9zdGF0ZS0+Y2tleTsKKwl1MzIgcGxhbmVfY3RsOworCisJcGxhbmVfY3RsID0gUExBTkVfQ1RM X0VOQUJMRTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgMTAgJiYgIUlTX0dFTUlOSUxB S0UoZGV2X3ByaXYpKSB7CisJCXBsYW5lX2N0bCB8PSBza2xfcGxhbmVfY3RsX2FscGhhKHBsYW5l X3N0YXRlKTsKKwkJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9QTEFORV9HQU1NQV9ESVNBQkxFOwor CisJCWlmIChwbGFuZV9zdGF0ZS0+aHcuY29sb3JfZW5jb2RpbmcgPT0gRFJNX0NPTE9SX1lDQkNS X0JUNzA5KQorCQkJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9ZVVZfVE9fUkdCX0NTQ19GT1JNQVRf QlQ3MDk7CisKKwkJaWYgKHBsYW5lX3N0YXRlLT5ody5jb2xvcl9yYW5nZSA9PSBEUk1fQ09MT1Jf WUNCQ1JfRlVMTF9SQU5HRSkKKwkJCXBsYW5lX2N0bCB8PSBQTEFORV9DVExfWVVWX1JBTkdFX0NP UlJFQ1RJT05fRElTQUJMRTsKKwl9CisKKwlwbGFuZV9jdGwgfD0gc2tsX3BsYW5lX2N0bF9mb3Jt YXQoZmItPmZvcm1hdC0+Zm9ybWF0KTsKKwlwbGFuZV9jdGwgfD0gc2tsX3BsYW5lX2N0bF90aWxp bmcoZmItPm1vZGlmaWVyKTsKKwlwbGFuZV9jdGwgfD0gc2tsX3BsYW5lX2N0bF9yb3RhdGUocm90 YXRpb24gJiBEUk1fTU9ERV9ST1RBVEVfTUFTSyk7CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA+PSAxMCkKKwkJcGxhbmVfY3RsIHw9IGNubF9wbGFuZV9jdGxfZmxpcChyb3RhdGlvbiAmCisJ CQkJCQlEUk1fTU9ERV9SRUZMRUNUX01BU0spOworCisJaWYgKGtleS0+ZmxhZ3MgJiBJOTE1X1NF VF9DT0xPUktFWV9ERVNUSU5BVElPTikKKwkJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9LRVlfRU5B QkxFX0RFU1RJTkFUSU9OOworCWVsc2UgaWYgKGtleS0+ZmxhZ3MgJiBJOTE1X1NFVF9DT0xPUktF WV9TT1VSQ0UpCisJCXBsYW5lX2N0bCB8PSBQTEFORV9DVExfS0VZX0VOQUJMRV9TT1VSQ0U7CisK KwlyZXR1cm4gcGxhbmVfY3RsOworfQorCitzdGF0aWMgdTMyIGdsa19wbGFuZV9jb2xvcl9jdGxf Y3J0Yyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGNfc3RhdGUtPnVhcGku Y3J0Yy0+ZGV2KTsKKwl1MzIgcGxhbmVfY29sb3JfY3RsID0gMDsKKworCWlmIChJTlRFTF9HRU4o ZGV2X3ByaXYpID49IDExKQorCQlyZXR1cm4gcGxhbmVfY29sb3JfY3RsOworCisJaWYgKGNydGNf c3RhdGUtPmdhbW1hX2VuYWJsZSkKKwkJcGxhbmVfY29sb3JfY3RsIHw9IFBMQU5FX0NPTE9SX1BJ UEVfR0FNTUFfRU5BQkxFOworCisJaWYgKGNydGNfc3RhdGUtPmNzY19lbmFibGUpCisJCXBsYW5l X2NvbG9yX2N0bCB8PSBQTEFORV9DT0xPUl9QSVBFX0NTQ19FTkFCTEU7CisKKwlyZXR1cm4gcGxh bmVfY29sb3JfY3RsOworfQorCitzdGF0aWMgdTMyIGdsa19wbGFuZV9jb2xvcl9jdGwoY29uc3Qg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkgICAgICAgY29uc3Qgc3Ry dWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPQorCQl0b19pOTE1KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lLT5k ZXYpOworCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3 LmZiOworCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZV9z dGF0ZS0+dWFwaS5wbGFuZSk7CisJdTMyIHBsYW5lX2NvbG9yX2N0bCA9IDA7CisKKwlwbGFuZV9j b2xvcl9jdGwgfD0gUExBTkVfQ09MT1JfUExBTkVfR0FNTUFfRElTQUJMRTsKKwlwbGFuZV9jb2xv cl9jdGwgfD0gZ2xrX3BsYW5lX2NvbG9yX2N0bF9hbHBoYShwbGFuZV9zdGF0ZSk7CisKKwlpZiAo ZmItPmZvcm1hdC0+aXNfeXV2ICYmICFpY2xfaXNfaGRyX3BsYW5lKGRldl9wcml2LCBwbGFuZS0+ aWQpKSB7CisJCXN3aXRjaCAocGxhbmVfc3RhdGUtPmh3LmNvbG9yX2VuY29kaW5nKSB7CisJCWNh c2UgRFJNX0NPTE9SX1lDQkNSX0JUNzA5OgorCQkJcGxhbmVfY29sb3JfY3RsIHw9IFBMQU5FX0NP TE9SX0NTQ19NT0RFX1lVVjcwOV9UT19SR0I3MDk7CisJCQlicmVhazsKKwkJY2FzZSBEUk1fQ09M T1JfWUNCQ1JfQlQyMDIwOgorCQkJcGxhbmVfY29sb3JfY3RsIHw9CisJCQkJUExBTkVfQ09MT1Jf Q1NDX01PREVfWVVWMjAyMF9UT19SR0IyMDIwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlw bGFuZV9jb2xvcl9jdGwgfD0KKwkJCQlQTEFORV9DT0xPUl9DU0NfTU9ERV9ZVVY2MDFfVE9fUkdC NjAxOworCQl9CisJCWlmIChwbGFuZV9zdGF0ZS0+aHcuY29sb3JfcmFuZ2UgPT0gRFJNX0NPTE9S X1lDQkNSX0ZVTExfUkFOR0UpCisJCQlwbGFuZV9jb2xvcl9jdGwgfD0gUExBTkVfQ09MT1JfWVVW X1JBTkdFX0NPUlJFQ1RJT05fRElTQUJMRTsKKwl9IGVsc2UgaWYgKGZiLT5mb3JtYXQtPmlzX3l1 dikgeworCQlwbGFuZV9jb2xvcl9jdGwgfD0gUExBTkVfQ09MT1JfSU5QVVRfQ1NDX0VOQUJMRTsK Kwl9CisKKwlyZXR1cm4gcGxhbmVfY29sb3JfY3RsOworfQorCitzdGF0aWMgaW50CittYWluX3Rv X2Njc19wbGFuZShjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IG1haW5fcGxh bmUpCit7CisJZHJtX1dBUk5fT04oZmItPmRldiwgIWlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZp ZXIpIHx8CisJCSAgICAobWFpbl9wbGFuZSAmJiBtYWluX3BsYW5lID49IGZiLT5mb3JtYXQtPm51 bV9wbGFuZXMgLyAyKSk7CisKKwlyZXR1cm4gZmItPmZvcm1hdC0+bnVtX3BsYW5lcyAvIDIgKyBt YWluX3BsYW5lOworfQorCitpbnQgc2tsX2Njc190b19tYWluX3BsYW5lKGNvbnN0IHN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY2NzX3BsYW5lKQoreworCWRybV9XQVJOX09OKGZiLT5k ZXYsICFpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSB8fAorCQkgICAgY2NzX3BsYW5lIDwg ZmItPmZvcm1hdC0+bnVtX3BsYW5lcyAvIDIpOworCisJcmV0dXJuIGNjc19wbGFuZSAtIGZiLT5m b3JtYXQtPm51bV9wbGFuZXMgLyAyOworfQorCisKK3N0YXRpYyBpbnQKK3NrbF9tYWluX3RvX2F1 eF9wbGFuZShjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IG1haW5fcGxhbmUp Cit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGZiLT5kZXYpOwor CisJaWYgKGlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIpKQorCQlyZXR1cm4gbWFpbl90b19j Y3NfcGxhbmUoZmIsIG1haW5fcGxhbmUpOworCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA8IDEx ICYmCisJCSBpbnRlbF9mb3JtYXRfaW5mb19pc195dXZfc2VtaXBsYW5hcihmYi0+Zm9ybWF0LCBm Yi0+bW9kaWZpZXIpKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0 aWMgdm9pZAorc2tsX3Byb2dyYW1fcGxhbmUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKKwkJ ICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJICBjb25zdCBz dHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAorCQkgIGludCBjb2xvcl9wbGFu ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5l LT5iYXNlLmRldik7CisJZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHBsYW5lLT5pZDsKKwllbnVt IHBpcGUgcGlwZSA9IHBsYW5lLT5waXBlOworCWNvbnN0IHN0cnVjdCBkcm1faW50ZWxfc3ByaXRl X2NvbG9ya2V5ICprZXkgPSAmcGxhbmVfc3RhdGUtPmNrZXk7CisJdTMyIHN1cmZfYWRkciA9IHBs YW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjb2xvcl9wbGFuZV0ub2Zmc2V0OworCXUzMiBzdHJpZGUg PSBza2xfcGxhbmVfc3RyaWRlKHBsYW5lX3N0YXRlLCBjb2xvcl9wbGFuZSk7CisJY29uc3Qgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7CisJaW50IGF1eF9w bGFuZSA9IHNrbF9tYWluX3RvX2F1eF9wbGFuZShmYiwgY29sb3JfcGxhbmUpOworCWludCBjcnRj X3ggPSBwbGFuZV9zdGF0ZS0+dWFwaS5kc3QueDE7CisJaW50IGNydGNfeSA9IHBsYW5lX3N0YXRl LT51YXBpLmRzdC55MTsKKwl1MzIgeCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjb2xvcl9w bGFuZV0ueDsKKwl1MzIgeSA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjb2xvcl9wbGFuZV0u eTsKKwl1MzIgc3JjX3cgPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjKSA+ PiAxNjsKKwl1MzIgc3JjX2ggPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLnNy YykgPj4gMTY7CisJdTggYWxwaGEgPSBwbGFuZV9zdGF0ZS0+aHcuYWxwaGEgPj4gODsKKwl1MzIg cGxhbmVfY29sb3JfY3RsID0gMCwgYXV4X2Rpc3QgPSAwOworCXVuc2lnbmVkIGxvbmcgaXJxZmxh Z3M7CisJdTMyIGtleW1zaywga2V5bWF4OworCXUzMiBwbGFuZV9jdGwgPSBwbGFuZV9zdGF0ZS0+ Y3RsOworCisJcGxhbmVfY3RsIHw9IHNrbF9wbGFuZV9jdGxfY3J0YyhjcnRjX3N0YXRlKTsKKwor CWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlOSUxBS0UoZGV2X3ByaXYp KQorCQlwbGFuZV9jb2xvcl9jdGwgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfY3RsIHwKKwkJCWdsa19w bGFuZV9jb2xvcl9jdGxfY3J0YyhjcnRjX3N0YXRlKTsKKworCS8qIFNpemVzIGFyZSAwIGJhc2Vk ICovCisJc3JjX3ctLTsKKwlzcmNfaC0tOworCisJa2V5bWF4ID0gKGtleS0+bWF4X3ZhbHVlICYg MHhmZmZmZmYpIHwgUExBTkVfS0VZTUFYX0FMUEhBKGFscGhhKTsKKworCWtleW1zayA9IGtleS0+ Y2hhbm5lbF9tYXNrICYgMHg3ZmZmZmZmOworCWlmIChhbHBoYSA8IDB4ZmYpCisJCWtleW1zayB8 PSBQTEFORV9LRVlNU0tfQUxQSEFfRU5BQkxFOworCisJLyogVGhlIHNjYWxlciB3aWxsIGhhbmRs ZSB0aGUgb3V0cHV0IHBvc2l0aW9uICovCisJaWYgKHBsYW5lX3N0YXRlLT5zY2FsZXJfaWQgPj0g MCkgeworCQljcnRjX3ggPSAwOworCQljcnRjX3kgPSAwOworCX0KKworCWlmIChhdXhfcGxhbmUp IHsKKwkJYXV4X2Rpc3QgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbYXV4X3BsYW5lXS5vZmZz ZXQgLSBzdXJmX2FkZHI7CisKKwkJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCAxMikKKwkJCWF1 eF9kaXN0IHw9IHNrbF9wbGFuZV9zdHJpZGUocGxhbmVfc3RhdGUsIGF1eF9wbGFuZSk7CisJfQor CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwor CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX1NUUklERShwaXBlLCBwbGFuZV9p ZCksIHN0cmlkZSk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX1BPUyhwaXBl LCBwbGFuZV9pZCksCisJCQkgIChjcnRjX3kgPDwgMTYpIHwgY3J0Y194KTsKKwlpbnRlbF9kZV93 cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfU0laRShwaXBlLCBwbGFuZV9pZCksCisJCQkgIChzcmNf aCA8PCAxNikgfCBzcmNfdyk7CisKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVf QVVYX0RJU1QocGlwZSwgcGxhbmVfaWQpLCBhdXhfZGlzdCk7CisKKwlpZiAoaWNsX2lzX2hkcl9w bGFuZShkZXZfcHJpdiwgcGxhbmVfaWQpKQorCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwg UExBTkVfQ1VTX0NUTChwaXBlLCBwbGFuZV9pZCksCisJCQkJICBwbGFuZV9zdGF0ZS0+Y3VzX2N0 bCk7CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklMQUtFKGRl dl9wcml2KSkKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX0NPTE9SX0NUTChw aXBlLCBwbGFuZV9pZCksCisJCQkJICBwbGFuZV9jb2xvcl9jdGwpOworCisJaWYgKGZiLT5mb3Jt YXQtPmlzX3l1diAmJiBpY2xfaXNfaGRyX3BsYW5lKGRldl9wcml2LCBwbGFuZV9pZCkpCisJCWlj bF9wcm9ncmFtX2lucHV0X2NzYyhwbGFuZSwgY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOworCisJ c2tsX3dyaXRlX3BsYW5lX3dtKHBsYW5lLCBjcnRjX3N0YXRlKTsKKworCWludGVsX2RlX3dyaXRl X2Z3KGRldl9wcml2LCBQTEFORV9LRVlWQUwocGlwZSwgcGxhbmVfaWQpLAorCQkJICBrZXktPm1p bl92YWx1ZSk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX0tFWU1TSyhwaXBl LCBwbGFuZV9pZCksIGtleW1zayk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5F X0tFWU1BWChwaXBlLCBwbGFuZV9pZCksIGtleW1heCk7CisKKwlpbnRlbF9kZV93cml0ZV9mdyhk ZXZfcHJpdiwgUExBTkVfT0ZGU0VUKHBpcGUsIHBsYW5lX2lkKSwKKwkJCSAgKHkgPDwgMTYpIHwg eCk7CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDExKQorCQlpbnRlbF9kZV93cml0ZV9m dyhkZXZfcHJpdiwgUExBTkVfQVVYX09GRlNFVChwaXBlLCBwbGFuZV9pZCksCisJCQkJICAocGxh bmVfc3RhdGUtPmNvbG9yX3BsYW5lWzFdLnkgPDwgMTYpIHwgcGxhbmVfc3RhdGUtPmNvbG9yX3Bs YW5lWzFdLngpOworCisJaWYgKCFkcm1fYXRvbWljX2NydGNfbmVlZHNfbW9kZXNldCgmY3J0Y19z dGF0ZS0+dWFwaSkpCisJCWludGVsX3BzcjJfcHJvZ3JhbV9wbGFuZV9zZWxfZmV0Y2gocGxhbmUs IGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlLCBjb2xvcl9wbGFuZSk7CisKKwkvKgorCSAqIFRoZSBj b250cm9sIHJlZ2lzdGVyIHNlbGYtYXJtcyBpZiB0aGUgcGxhbmUgd2FzIHByZXZpb3VzbHkKKwkg KiBkaXNhYmxlZC4gVHJ5IHRvIG1ha2UgdGhlIHBsYW5lIGVuYWJsZSBhdG9taWMgYnkgd3JpdGlu ZworCSAqIHRoZSBjb250cm9sIHJlZ2lzdGVyIGp1c3QgYmVmb3JlIHRoZSBzdXJmYWNlIHJlZ2lz dGVyLgorCSAqLworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9DVEwocGlwZSwg cGxhbmVfaWQpLCBwbGFuZV9jdGwpOworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFO RV9TVVJGKHBpcGUsIHBsYW5lX2lkKSwKKwkJCSAgaW50ZWxfcGxhbmVfZ2d0dF9vZmZzZXQocGxh bmVfc3RhdGUpICsgc3VyZl9hZGRyKTsKKworCWlmIChwbGFuZV9zdGF0ZS0+c2NhbGVyX2lkID49 IDApCisJCXNrbF9wcm9ncmFtX3NjYWxlcihwbGFuZSwgY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUp OworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFm bGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCitza2xfcGxhbmVfYXN5bmNfZmxpcChzdHJ1Y3QgaW50 ZWxfcGxhbmUgKnBsYW5lLAorCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlLAorCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVf c3RhdGUsCisJCSAgICAgYm9vbCBhc3luY19mbGlwKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKKwl1bnNpZ25lZCBsb25n IGlycWZsYWdzOworCWVudW0gcGxhbmVfaWQgcGxhbmVfaWQgPSBwbGFuZS0+aWQ7CisJZW51bSBw aXBlIHBpcGUgPSBwbGFuZS0+cGlwZTsKKwl1MzIgc3VyZl9hZGRyID0gcGxhbmVfc3RhdGUtPmNv bG9yX3BsYW5lWzBdLm9mZnNldDsKKwl1MzIgcGxhbmVfY3RsID0gcGxhbmVfc3RhdGUtPmN0bDsK KworCXBsYW5lX2N0bCB8PSBza2xfcGxhbmVfY3RsX2NydGMoY3J0Y19zdGF0ZSk7CisKKwlpZiAo YXN5bmNfZmxpcCkKKwkJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9BU1lOQ19GTElQOworCisJc3Bp bl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOworCisJaW50 ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX0NUTChwaXBlLCBwbGFuZV9pZCksIHBsYW5l X2N0bCk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX1NVUkYocGlwZSwgcGxh bmVfaWQpLAorCQkJICBpbnRlbF9wbGFuZV9nZ3R0X29mZnNldChwbGFuZV9zdGF0ZSkgKyBzdXJm X2FkZHIpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2Nr LCBpcnFmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCitza2xfdXBkYXRlX3BsYW5lKHN0cnVjdCBp bnRlbF9wbGFuZSAqcGxhbmUsCisJCSBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSwKKwkJIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUp Cit7CisJaW50IGNvbG9yX3BsYW5lID0gMDsKKworCWlmIChwbGFuZV9zdGF0ZS0+cGxhbmFyX2xp bmtlZF9wbGFuZSAmJiAhcGxhbmVfc3RhdGUtPnBsYW5hcl9zbGF2ZSkKKwkJLyogUHJvZ3JhbSB0 aGUgVVYgcGxhbmUgb24gcGxhbmFyIG1hc3RlciAqLworCQljb2xvcl9wbGFuZSA9IDE7CisKKwlz a2xfcHJvZ3JhbV9wbGFuZShwbGFuZSwgY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUsIGNvbG9yX3Bs YW5lKTsKK30KKworc3RhdGljIGJvb2wgaW50ZWxfZm9ybWF0X2lzX3AwMXgodTMyIGZvcm1hdCkK K3sKKwlzd2l0Y2ggKGZvcm1hdCkgeworCWNhc2UgRFJNX0ZPUk1BVF9QMDEwOgorCWNhc2UgRFJN X0ZPUk1BVF9QMDEyOgorCWNhc2UgRFJNX0ZPUk1BVF9QMDE2OgorCQlyZXR1cm4gdHJ1ZTsKKwlk ZWZhdWx0OgorCQlyZXR1cm4gZmFsc2U7CisJfQorfQorCitzdGF0aWMgaW50IHNrbF9wbGFuZV9j aGVja19mYihjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCSAg ICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3Ry dWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLT51YXBp LnBsYW5lKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBs YW5lLT5iYXNlLmRldik7CisJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFu ZV9zdGF0ZS0+aHcuZmI7CisJdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmh3 LnJvdGF0aW9uOworCXN0cnVjdCBkcm1fZm9ybWF0X25hbWVfYnVmIGZvcm1hdF9uYW1lOworCisJ aWYgKCFmYikKKwkJcmV0dXJuIDA7CisKKwlpZiAocm90YXRpb24gJiB+KERSTV9NT0RFX1JPVEFU RV8wIHwgRFJNX01PREVfUk9UQVRFXzE4MCkgJiYKKwkgICAgaXNfY2NzX21vZGlmaWVyKGZiLT5t b2RpZmllcikpIHsKKwkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkgICAgIlJDIHN1 cHBvcnQgb25seSB3aXRoIDAvMTgwIGRlZ3JlZSByb3RhdGlvbiAoJXgpXG4iLAorCQkJICAgIHJv dGF0aW9uKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHJvdGF0aW9uICYgRFJNX01P REVfUkVGTEVDVF9YICYmCisJICAgIGZiLT5tb2RpZmllciA9PSBEUk1fRk9STUFUX01PRF9MSU5F QVIpIHsKKwkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkgICAgImhvcml6b250YWwg ZmxpcCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggbGluZWFyIHN1cmZhY2UgZm9ybWF0c1xuIik7CisJ CXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChkcm1fcm90YXRpb25fOTBfb3JfMjcwKHJvdGF0 aW9uKSkgeworCQlpZiAoZmItPm1vZGlmaWVyICE9IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEICYm CisJCSAgICBmYi0+bW9kaWZpZXIgIT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEKSB7CisJCQlk cm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCQkgICAgIlkvWWYgdGlsaW5nIHJlcXVpcmVk IGZvciA5MC8yNzAhXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJLyoKKwkJICog OTAvMjcwIGlzIG5vdCBhbGxvd2VkIHdpdGggUkdCNjQgMTY6MTY6MTY6MTYgYW5kCisJCSAqIElu ZGV4ZWQgOC1iaXQuIFJHQiAxNi1iaXQgNTo2OjUgaXMgYWxsb3dlZCBnZW4xMSBvbndhcmRzLgor CQkgKi8KKwkJc3dpdGNoIChmYi0+Zm9ybWF0LT5mb3JtYXQpIHsKKwkJY2FzZSBEUk1fRk9STUFU X1JHQjU2NToKKwkJCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExKQorCQkJCWJyZWFrOwor CQkJZmFsbHRocm91Z2g7CisJCWNhc2UgRFJNX0ZPUk1BVF9DODoKKwkJY2FzZSBEUk1fRk9STUFU X1hSR0IxNjE2MTYxNkY6CisJCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGOgorCQljYXNl IERSTV9GT1JNQVRfQVJHQjE2MTYxNjE2RjoKKwkJY2FzZSBEUk1fRk9STUFUX0FCR1IxNjE2MTYx NkY6CisJCWNhc2UgRFJNX0ZPUk1BVF9ZMjEwOgorCQljYXNlIERSTV9GT1JNQVRfWTIxMjoKKwkJ Y2FzZSBEUk1fRk9STUFUX1kyMTY6CisJCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTJfMTYxNjE2MTY6 CisJCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTYxNjE2MTY6CisJCQlkcm1fZGJnX2ttcygmZGV2X3By aXYtPmRybSwKKwkJCQkgICAgIlVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdCAlcyBmb3IgOTAvMjcw IVxuIiwKKwkJCQkgICAgZHJtX2dldF9mb3JtYXRfbmFtZShmYi0+Zm9ybWF0LT5mb3JtYXQsCisJ CQkJCQkJJmZvcm1hdF9uYW1lKSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZGVmYXVsdDoKKwkJ CWJyZWFrOworCQl9CisJfQorCisJLyogWS10aWxpbmcgaXMgbm90IHN1cHBvcnRlZCBpbiBJRi1J RCBJbnRlcmxhY2UgbW9kZSAqLworCWlmIChjcnRjX3N0YXRlLT5ody5lbmFibGUgJiYKKwkgICAg Y3J0Y19zdGF0ZS0+aHcuYWRqdXN0ZWRfbW9kZS5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJM QUNFICYmCisJICAgIChmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQgfHwK KwkgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQgfHwKKwkgICAg IGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1MgfHwKKwkgICAgIGZi LT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTIHx8CisJICAgICBmYi0+ bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTIHx8CisJICAg ICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNfQ0NTKSkg eworCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCSAgICAiWS9ZZiB0aWxpbmcgbm90 IHN1cHBvcnRlZCBpbiBJRi1JRCBtb2RlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJ LyogV2FfMTYwNjA1NDE4ODp0Z2wgKi8KKwlpZiAoSVNfVElHRVJMQUtFKGRldl9wcml2KSAmJgor CSAgICBwbGFuZV9zdGF0ZS0+Y2tleS5mbGFncyAmIEk5MTVfU0VUX0NPTE9SS0VZX1NPVVJDRSAm JgorCSAgICBpbnRlbF9mb3JtYXRfaXNfcDAxeChmYi0+Zm9ybWF0LT5mb3JtYXQpKSB7CisJCWRy bV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJICAgICJTb3VyY2UgY29sb3Iga2V5aW5nIG5v dCBzdXBwb3J0ZWQgd2l0aCBQMDF4IGZvcm1hdHNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBza2xfcGxhbmVfY2hlY2tfZHN0X2Nvb3Jk aW5hdGVzKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJCQkg ICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9CisJCXRvX2k5MTUocGxhbmVfc3RhdGUtPnVh cGkucGxhbmUtPmRldik7CisJaW50IGNydGNfeCA9IHBsYW5lX3N0YXRlLT51YXBpLmRzdC54MTsK KwlpbnQgY3J0Y193ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7CisJ aW50IHBpcGVfc3JjX3cgPSBjcnRjX3N0YXRlLT5waXBlX3NyY193OworCisJLyoKKwkgKiBEaXNw bGF5IFdBICMxMTc1OiBjbmwsZ2xrCisJICogUGxhbmVzIG90aGVyIHRoYW4gdGhlIGN1cnNvciBt YXkgY2F1c2UgRklGTyB1bmRlcmZsb3cgYW5kIGRpc3BsYXkKKwkgKiBjb3JydXB0aW9uIGlmIHN0 YXJ0aW5nIGxlc3MgdGhhbiA0IHBpeGVscyBmcm9tIHRoZSByaWdodCBlZGdlIG9mCisJICogdGhl IHNjcmVlbi4KKwkgKiBCZXNpZGVzIHRoZSBhYm92ZSBXQSBmaXggdGhlIHNpbWlsYXIgcHJvYmxl bSwgd2hlcmUgcGxhbmVzIG90aGVyCisJICogdGhhbiB0aGUgY3Vyc29yIGVuZGluZyBsZXNzIHRo YW4gNCBwaXhlbHMgZnJvbSB0aGUgbGVmdCBlZGdlIG9mIHRoZQorCSAqIHNjcmVlbiBtYXkgY2F1 c2UgRklGTyB1bmRlcmZsb3cgYW5kIGRpc3BsYXkgY29ycnVwdGlvbi4KKwkgKi8KKwlpZiAoKElT X0dFTUlOSUxBS0UoZGV2X3ByaXYpIHx8IElTX0NBTk5PTkxBS0UoZGV2X3ByaXYpKSAmJgorCSAg ICAoY3J0Y194ICsgY3J0Y193IDwgNCB8fCBjcnRjX3ggPiBwaXBlX3NyY193IC0gNCkpIHsKKwkJ ZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkgICAgInJlcXVlc3RlZCBwbGFuZSBYICVz IHBvc2l0aW9uICVkIGludmFsaWQgKHZhbGlkIHJhbmdlICVkLSVkKVxuIiwKKwkJCSAgICBjcnRj X3ggKyBjcnRjX3cgPCA0ID8gImVuZCIgOiAic3RhcnQiLAorCQkJICAgIGNydGNfeCArIGNydGNf dyA8IDQgPyBjcnRjX3ggKyBjcnRjX3cgOiBjcnRjX3gsCisJCQkgICAgNCwgcGlwZV9zcmNfdyAt IDQpOworCQlyZXR1cm4gLUVSQU5HRTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBza2xfcGxhbmVfY2hlY2tfbnYxMl9yb3RhdGlvbihjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVf c3RhdGUgKnBsYW5lX3N0YXRlKQoreworCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi ID0gcGxhbmVfc3RhdGUtPmh3LmZiOworCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0 YXRlLT5ody5yb3RhdGlvbjsKKwlpbnQgc3JjX3cgPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3Rh dGUtPnVhcGkuc3JjKSA+PiAxNjsKKworCS8qIERpc3BsYXkgV0EgIzExMDYgKi8KKwlpZiAoaW50 ZWxfZm9ybWF0X2luZm9faXNfeXV2X3NlbWlwbGFuYXIoZmItPmZvcm1hdCwgZmItPm1vZGlmaWVy KSAmJgorCSAgICBzcmNfdyAmIDMgJiYKKwkgICAgKHJvdGF0aW9uID09IERSTV9NT0RFX1JPVEFU RV8yNzAgfHwKKwkgICAgIHJvdGF0aW9uID09IChEUk1fTU9ERV9SRUZMRUNUX1ggfCBEUk1fTU9E RV9ST1RBVEVfOTApKSkgeworCQlEUk1fREVCVUdfS01TKCJzcmMgd2lkdGggbXVzdCBiZSBtdWx0 aXBsZSBvZiA0IGZvciByb3RhdGVkIHBsYW5hciBZVVZcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsK Kwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBza2xfcGxhbmVfbWF4X3NjYWxlKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYikKK3sKKwkvKgorCSAqIFdlIGRvbid0IHlldCBrbm93IHRoZSBm aW5hbCBzb3VyY2Ugd2lkdGggbm9yCisJICogd2hldGhlciB3ZSBjYW4gdXNlIHRoZSBIUSBzY2Fs ZXIgbW9kZS4gQXNzdW1lCisJICogdGhlIGJlc3QgY2FzZS4KKwkgKiBGSVhNRSBuZWVkIHRvIHBy b3Blcmx5IGNoZWNrIHRoaXMgbGF0ZXIuCisJICovCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikg Pj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikgfHwKKwkgICAgIWludGVsX2Zvcm1hdF9p bmZvX2lzX3l1dl9zZW1pcGxhbmFyKGZiLT5mb3JtYXQsIGZiLT5tb2RpZmllcikpCisJCXJldHVy biAweDMwMDAwIC0gMTsKKwllbHNlCisJCXJldHVybiAweDIwMDAwIC0gMTsKK30KKworc3RhdGlj IGludCBpbnRlbF9wbGFuZV9taW5fd2lkdGgoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKKwkJ CQkgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJIGludCBjb2xvcl9wbGFu ZSwKKwkJCQkgdW5zaWduZWQgaW50IHJvdGF0aW9uKQoreworCWlmIChwbGFuZS0+bWluX3dpZHRo KQorCQlyZXR1cm4gcGxhbmUtPm1pbl93aWR0aChmYiwgY29sb3JfcGxhbmUsIHJvdGF0aW9uKTsK KwllbHNlCisJCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGludGVsX3BsYW5lX21heF93aWR0 aChzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAorCQkJCSBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICpmYiwKKwkJCQkgaW50IGNvbG9yX3BsYW5lLAorCQkJCSB1bnNpZ25lZCBpbnQgcm90 YXRpb24pCit7CisJaWYgKHBsYW5lLT5tYXhfd2lkdGgpCisJCXJldHVybiBwbGFuZS0+bWF4X3dp ZHRoKGZiLCBjb2xvcl9wbGFuZSwgcm90YXRpb24pOworCWVsc2UKKwkJcmV0dXJuIElOVF9NQVg7 Cit9CisKK3N0YXRpYyBpbnQgaW50ZWxfcGxhbmVfbWF4X2hlaWdodChzdHJ1Y3QgaW50ZWxfcGxh bmUgKnBsYW5lLAorCQkJCSAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJ ICBpbnQgY29sb3JfcGxhbmUsCisJCQkJICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCit7CisJaWYg KHBsYW5lLT5tYXhfaGVpZ2h0KQorCQlyZXR1cm4gcGxhbmUtPm1heF9oZWlnaHQoZmIsIGNvbG9y X3BsYW5lLCByb3RhdGlvbik7CisJZWxzZQorCQlyZXR1cm4gSU5UX01BWDsKK30KKworc3RhdGlj IGJvb2wKK3NrbF9jaGVja19tYWluX2Njc19jb29yZGluYXRlcyhzdHJ1Y3QgaW50ZWxfcGxhbmVf c3RhdGUgKnBsYW5lX3N0YXRlLAorCQkJICAgICAgIGludCBtYWluX3gsIGludCBtYWluX3ksIHUz MiBtYWluX29mZnNldCwKKwkJCSAgICAgICBpbnQgY2NzX3BsYW5lKQoreworCWNvbnN0IHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOworCWludCBhdXhfeCA9 IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLng7CisJaW50IGF1eF95ID0gcGxh bmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFuZV0ueTsKKwl1MzIgYXV4X29mZnNldCA9IHBs YW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLm9mZnNldDsKKwl1MzIgYWxpZ25tZW50 ID0gaW50ZWxfc3VyZl9hbGlnbm1lbnQoZmIsIGNjc19wbGFuZSk7CisJaW50IGhzdWI7CisJaW50 IHZzdWI7CisKKwlpbnRlbF9mYl9wbGFuZV9nZXRfc3Vic2FtcGxpbmcoJmhzdWIsICZ2c3ViLCBm YiwgY2NzX3BsYW5lKTsKKwl3aGlsZSAoYXV4X29mZnNldCA+PSBtYWluX29mZnNldCAmJiBhdXhf eSA8PSBtYWluX3kpIHsKKwkJaW50IHgsIHk7CisKKwkJaWYgKGF1eF94ID09IG1haW5feCAmJiBh dXhfeSA9PSBtYWluX3kpCisJCQlicmVhazsKKworCQlpZiAoYXV4X29mZnNldCA9PSAwKQorCQkJ YnJlYWs7CisKKwkJeCA9IGF1eF94IC8gaHN1YjsKKwkJeSA9IGF1eF95IC8gdnN1YjsKKwkJYXV4 X29mZnNldCA9IGludGVsX3BsYW5lX2FkanVzdF9hbGlnbmVkX29mZnNldCgmeCwgJnksCisJCQkJ CQkJICAgICAgIHBsYW5lX3N0YXRlLAorCQkJCQkJCSAgICAgICBjY3NfcGxhbmUsCisJCQkJCQkJ ICAgICAgIGF1eF9vZmZzZXQsCisJCQkJCQkJICAgICAgIGF1eF9vZmZzZXQgLQorCQkJCQkJCQlh bGlnbm1lbnQpOworCQlhdXhfeCA9IHggKiBoc3ViICsgYXV4X3ggJSBoc3ViOworCQlhdXhfeSA9 IHkgKiB2c3ViICsgYXV4X3kgJSB2c3ViOworCX0KKworCWlmIChhdXhfeCAhPSBtYWluX3ggfHwg YXV4X3kgIT0gbWFpbl95KQorCQlyZXR1cm4gZmFsc2U7CisKKwlwbGFuZV9zdGF0ZS0+Y29sb3Jf cGxhbmVbY2NzX3BsYW5lXS5vZmZzZXQgPSBhdXhfb2Zmc2V0OworCXBsYW5lX3N0YXRlLT5jb2xv cl9wbGFuZVtjY3NfcGxhbmVdLnggPSBhdXhfeDsKKwlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVb Y2NzX3BsYW5lXS55ID0gYXV4X3k7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworCitpbnQgc2tsX2Nh bGNfbWFpbl9zdXJmYWNlX29mZnNldChjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBs YW5lX3N0YXRlLAorCQkJCSBpbnQgKngsIGludCAqeSwgdTMyICpvZmZzZXQpCit7CisJc3RydWN0 IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLT51YXBpLnBs YW5lKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5l LT5iYXNlLmRldik7CisJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9z dGF0ZS0+aHcuZmI7CisJY29uc3QgaW50IGF1eF9wbGFuZSA9IHNrbF9tYWluX3RvX2F1eF9wbGFu ZShmYiwgMCk7CisJY29uc3QgdTMyIGF1eF9vZmZzZXQgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxh bmVbYXV4X3BsYW5lXS5vZmZzZXQ7CisJY29uc3QgdTMyIGFsaWdubWVudCA9IGludGVsX3N1cmZf YWxpZ25tZW50KGZiLCAwKTsKKwljb25zdCBpbnQgdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9z dGF0ZS0+dWFwaS5zcmMpID4+IDE2OworCisJaW50ZWxfYWRkX2ZiX29mZnNldHMoeCwgeSwgcGxh bmVfc3RhdGUsIDApOworCSpvZmZzZXQgPSBpbnRlbF9wbGFuZV9jb21wdXRlX2FsaWduZWRfb2Zm c2V0KHgsIHksIHBsYW5lX3N0YXRlLCAwKTsKKwlpZiAoZHJtX1dBUk5fT04oJmRldl9wcml2LT5k cm0sIGFsaWdubWVudCAmJiAhaXNfcG93ZXJfb2ZfMihhbGlnbm1lbnQpKSkKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwkvKgorCSAqIEFVWCBzdXJmYWNlIG9mZnNldCBpcyBzcGVjaWZpZWQgYXMgdGhl IGRpc3RhbmNlIGZyb20gdGhlCisJICogbWFpbiBzdXJmYWNlIG9mZnNldCwgYW5kIGl0IG11c3Qg YmUgbm9uLW5lZ2F0aXZlLiBNYWtlCisJICogc3VyZSB0aGF0IGlzIHdoYXQgd2Ugd2lsbCBnZXQu CisJICovCisJaWYgKGF1eF9wbGFuZSAmJiAqb2Zmc2V0ID4gYXV4X29mZnNldCkKKwkJKm9mZnNl dCA9IGludGVsX3BsYW5lX2FkanVzdF9hbGlnbmVkX29mZnNldCh4LCB5LCBwbGFuZV9zdGF0ZSwg MCwKKwkJCQkJCQkgICAgKm9mZnNldCwKKwkJCQkJCQkgICAgYXV4X29mZnNldCAmIH4oYWxpZ25t ZW50IC0gMSkpOworCisJLyoKKwkgKiBXaGVuIHVzaW5nIGFuIFgtdGlsZWQgc3VyZmFjZSwgdGhl IHBsYW5lIGJsb3dzIHVwCisJICogaWYgdGhlIHggb2Zmc2V0ICsgd2lkdGggZXhjZWVkIHRoZSBz dHJpZGUuCisJICoKKwkgKiBUT0RPOiBsaW5lYXIgYW5kIFktdGlsZWQgc2VlbSBmaW5lLCBZZiB1 bnRlc3RlZCwKKwkgKi8KKwlpZiAoZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9YX1RJ TEVEKSB7CisJCWludCBjcHAgPSBmYi0+Zm9ybWF0LT5jcHBbMF07CisKKwkJd2hpbGUgKCgqeCAr IHcpICogY3BwID4gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnN0cmlkZSkgeworCQkJaWYg KCpvZmZzZXQgPT0gMCkgeworCQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJCQkg ICAgIlVuYWJsZSB0byBmaW5kIHN1aXRhYmxlIGRpc3BsYXkgc3VyZmFjZSBvZmZzZXQgZHVlIHRv IFgtdGlsaW5nXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKworCQkJKm9mZnNldCA9 IGludGVsX3BsYW5lX2FkanVzdF9hbGlnbmVkX29mZnNldCh4LCB5LCBwbGFuZV9zdGF0ZSwgMCwK KwkJCQkJCQkJICAgICpvZmZzZXQsCisJCQkJCQkJCSAgICAqb2Zmc2V0IC0gYWxpZ25tZW50KTsK KwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNrbF9jaGVja19tYWluX3N1 cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlzdHJ1Y3Qg aW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPnVhcGkucGxh bmUpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUt PmJhc2UuZGV2KTsKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0 YXRlLT5ody5mYjsKKwljb25zdCB1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+ aHcucm90YXRpb247CisJaW50IHggPSBwbGFuZV9zdGF0ZS0+dWFwaS5zcmMueDEgPj4gMTY7CisJ aW50IHkgPSBwbGFuZV9zdGF0ZS0+dWFwaS5zcmMueTEgPj4gMTY7CisJY29uc3QgaW50IHcgPSBk cm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjKSA+PiAxNjsKKwljb25zdCBpbnQg aCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjKSA+PiAxNjsKKwljb25z dCBpbnQgbWluX3dpZHRoID0gaW50ZWxfcGxhbmVfbWluX3dpZHRoKHBsYW5lLCBmYiwgMCwgcm90 YXRpb24pOworCWNvbnN0IGludCBtYXhfd2lkdGggPSBpbnRlbF9wbGFuZV9tYXhfd2lkdGgocGxh bmUsIGZiLCAwLCByb3RhdGlvbik7CisJY29uc3QgaW50IG1heF9oZWlnaHQgPSBpbnRlbF9wbGFu ZV9tYXhfaGVpZ2h0KHBsYW5lLCBmYiwgMCwgcm90YXRpb24pOworCWNvbnN0IGludCBhdXhfcGxh bmUgPSBza2xfbWFpbl90b19hdXhfcGxhbmUoZmIsIDApOworCWNvbnN0IHUzMiBhbGlnbm1lbnQg PSBpbnRlbF9zdXJmX2FsaWdubWVudChmYiwgMCk7CisJdTMyIG9mZnNldDsKKwlpbnQgcmV0Owor CisJaWYgKHcgPiBtYXhfd2lkdGggfHwgdyA8IG1pbl93aWR0aCB8fCBoID4gbWF4X2hlaWdodCkg eworCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCSAgICAicmVxdWVzdGVkIFkvUkdC IHNvdXJjZSBzaXplICVkeCVkIG91dHNpZGUgbGltaXRzIChtaW46ICVkeDEgbWF4OiAlZHglZClc biIsCisJCQkgICAgdywgaCwgbWluX3dpZHRoLCBtYXhfd2lkdGgsIG1heF9oZWlnaHQpOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBza2xfY2FsY19tYWluX3N1cmZhY2Vfb2Zmc2V0 KHBsYW5lX3N0YXRlLCAmeCwgJnksICZvZmZzZXQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7 CisKKwkvKgorCSAqIENDUyBBVVggc3VyZmFjZSBkb2Vzbid0IGhhdmUgaXRzIG93biB4L3kgb2Zm c2V0cywgd2UgbXVzdCBtYWtlIHN1cmUKKwkgKiB0aGV5IG1hdGNoIHdpdGggdGhlIG1haW4gc3Vy ZmFjZSB4L3kgb2Zmc2V0cy4KKwkgKi8KKwlpZiAoaXNfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmll cikpIHsKKwkJd2hpbGUgKCFza2xfY2hlY2tfbWFpbl9jY3NfY29vcmRpbmF0ZXMocGxhbmVfc3Rh dGUsIHgsIHksCisJCQkJCQkgICAgICAgb2Zmc2V0LCBhdXhfcGxhbmUpKSB7CisJCQlpZiAob2Zm c2V0ID09IDApCisJCQkJYnJlYWs7CisKKwkJCW9mZnNldCA9IGludGVsX3BsYW5lX2FkanVzdF9h bGlnbmVkX29mZnNldCgmeCwgJnksIHBsYW5lX3N0YXRlLCAwLAorCQkJCQkJCQkgICBvZmZzZXQs IG9mZnNldCAtIGFsaWdubWVudCk7CisJCX0KKworCQlpZiAoeCAhPSBwbGFuZV9zdGF0ZS0+Y29s b3JfcGxhbmVbYXV4X3BsYW5lXS54IHx8CisJCSAgICB5ICE9IHBsYW5lX3N0YXRlLT5jb2xvcl9w bGFuZVthdXhfcGxhbmVdLnkpIHsKKwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJ CSAgICAiVW5hYmxlIHRvIGZpbmQgc3VpdGFibGUgZGlzcGxheSBzdXJmYWNlIG9mZnNldCBkdWUg dG8gQ0NTXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJcGxhbmVfc3RhdGUt PmNvbG9yX3BsYW5lWzBdLm9mZnNldCA9IG9mZnNldDsKKwlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxh bmVbMF0ueCA9IHg7CisJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnkgPSB5OworCisJLyoK KwkgKiBQdXQgdGhlIGZpbmFsIGNvb3JkaW5hdGVzIGJhY2sgc28gdGhhdCB0aGUgc3JjCisJICog Y29vcmRpbmF0ZSBjaGVja3Mgd2lsbCBzZWUgdGhlIHJpZ2h0IHZhbHVlcy4KKwkgKi8KKwlkcm1f cmVjdF90cmFuc2xhdGVfdG8oJnBsYW5lX3N0YXRlLT51YXBpLnNyYywKKwkJCSAgICAgIHggPDwg MTYsIHkgPDwgMTYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2tsX2NoZWNrX252 MTJfYXV4X3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sK KwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUt PnVhcGkucGxhbmUpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShw bGFuZS0+YmFzZS5kZXYpOworCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxh bmVfc3RhdGUtPmh3LmZiOworCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5o dy5yb3RhdGlvbjsKKwlpbnQgdXZfcGxhbmUgPSAxOworCWludCBtYXhfd2lkdGggPSBpbnRlbF9w bGFuZV9tYXhfd2lkdGgocGxhbmUsIGZiLCB1dl9wbGFuZSwgcm90YXRpb24pOworCWludCBtYXhf aGVpZ2h0ID0gaW50ZWxfcGxhbmVfbWF4X2hlaWdodChwbGFuZSwgZmIsIHV2X3BsYW5lLCByb3Rh dGlvbik7CisJaW50IHggPSBwbGFuZV9zdGF0ZS0+dWFwaS5zcmMueDEgPj4gMTc7CisJaW50IHkg PSBwbGFuZV9zdGF0ZS0+dWFwaS5zcmMueTEgPj4gMTc7CisJaW50IHcgPSBkcm1fcmVjdF93aWR0 aCgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjKSA+PiAxNzsKKwlpbnQgaCA9IGRybV9yZWN0X2hlaWdo dCgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjKSA+PiAxNzsKKwl1MzIgb2Zmc2V0OworCisJLyogRklY TUUgbm90IHF1aXRlIHN1cmUgaG93L2lmIHRoZXNlIGFwcGx5IHRvIHRoZSBjaHJvbWEgcGxhbmUg Ki8KKwlpZiAodyA+IG1heF93aWR0aCB8fCBoID4gbWF4X2hlaWdodCkgeworCQlkcm1fZGJnX2tt cygmaTkxNS0+ZHJtLAorCQkJICAgICJDYkNyIHNvdXJjZSBzaXplICVkeCVkIHRvbyBiaWcgKGxp bWl0ICVkeCVkKVxuIiwKKwkJCSAgICB3LCBoLCBtYXhfd2lkdGgsIG1heF9oZWlnaHQpOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpbnRlbF9hZGRfZmJfb2Zmc2V0cygmeCwgJnksIHBsYW5l X3N0YXRlLCB1dl9wbGFuZSk7CisJb2Zmc2V0ID0gaW50ZWxfcGxhbmVfY29tcHV0ZV9hbGlnbmVk X29mZnNldCgmeCwgJnksCisJCQkJCQkgICAgcGxhbmVfc3RhdGUsIHV2X3BsYW5lKTsKKworCWlm IChpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSkgeworCQlpbnQgY2NzX3BsYW5lID0gbWFp bl90b19jY3NfcGxhbmUoZmIsIHV2X3BsYW5lKTsKKwkJdTMyIGF1eF9vZmZzZXQgPSBwbGFuZV9z dGF0ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5lXS5vZmZzZXQ7CisJCXUzMiBhbGlnbm1lbnQgPSBp bnRlbF9zdXJmX2FsaWdubWVudChmYiwgdXZfcGxhbmUpOworCisJCWlmIChvZmZzZXQgPiBhdXhf b2Zmc2V0KQorCQkJb2Zmc2V0ID0gaW50ZWxfcGxhbmVfYWRqdXN0X2FsaWduZWRfb2Zmc2V0KCZ4 LCAmeSwKKwkJCQkJCQkJICAgcGxhbmVfc3RhdGUsCisJCQkJCQkJCSAgIHV2X3BsYW5lLAorCQkJ CQkJCQkgICBvZmZzZXQsCisJCQkJCQkJCSAgIGF1eF9vZmZzZXQgJiB+KGFsaWdubWVudCAtIDEp KTsKKworCQl3aGlsZSAoIXNrbF9jaGVja19tYWluX2Njc19jb29yZGluYXRlcyhwbGFuZV9zdGF0 ZSwgeCwgeSwKKwkJCQkJCSAgICAgICBvZmZzZXQsIGNjc19wbGFuZSkpIHsKKwkJCWlmIChvZmZz ZXQgPT0gMCkKKwkJCQlicmVhazsKKworCQkJb2Zmc2V0ID0gaW50ZWxfcGxhbmVfYWRqdXN0X2Fs aWduZWRfb2Zmc2V0KCZ4LCAmeSwKKwkJCQkJCQkJICAgcGxhbmVfc3RhdGUsCisJCQkJCQkJCSAg IHV2X3BsYW5lLAorCQkJCQkJCQkgICBvZmZzZXQsIG9mZnNldCAtIGFsaWdubWVudCk7CisJCX0K KworCQlpZiAoeCAhPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5lXS54IHx8CisJ CSAgICB5ICE9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLnkpIHsKKwkJCWRy bV9kYmdfa21zKCZpOTE1LT5kcm0sCisJCQkJICAgICJVbmFibGUgdG8gZmluZCBzdWl0YWJsZSBk aXNwbGF5IHN1cmZhY2Ugb2Zmc2V0IGR1ZSB0byBDQ1NcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7 CisJCX0KKwl9CisKKwlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbdXZfcGxhbmVdLm9mZnNldCA9 IG9mZnNldDsKKwlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbdXZfcGxhbmVdLnggPSB4OworCXBs YW5lX3N0YXRlLT5jb2xvcl9wbGFuZVt1dl9wbGFuZV0ueSA9IHk7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBza2xfY2hlY2tfY2NzX2F1eF9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFu ZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7CisJaW50IHNyY194ID0gcGxhbmVfc3RhdGUtPnVhcGku c3JjLngxID4+IDE2OworCWludCBzcmNfeSA9IHBsYW5lX3N0YXRlLT51YXBpLnNyYy55MSA+PiAx NjsKKwl1MzIgb2Zmc2V0OworCWludCBjY3NfcGxhbmU7CisKKwlmb3IgKGNjc19wbGFuZSA9IDA7 IGNjc19wbGFuZSA8IGZiLT5mb3JtYXQtPm51bV9wbGFuZXM7IGNjc19wbGFuZSsrKSB7CisJCWlu dCBtYWluX2hzdWIsIG1haW5fdnN1YjsKKwkJaW50IGhzdWIsIHZzdWI7CisJCWludCB4LCB5Owor CisJCWlmICghaXNfY2NzX3BsYW5lKGZiLCBjY3NfcGxhbmUpKQorCQkJY29udGludWU7CisKKwkJ aW50ZWxfZmJfcGxhbmVfZ2V0X3N1YnNhbXBsaW5nKCZtYWluX2hzdWIsICZtYWluX3ZzdWIsIGZi LAorCQkJCQkgICAgICAgc2tsX2Njc190b19tYWluX3BsYW5lKGZiLCBjY3NfcGxhbmUpKTsKKwkJ aW50ZWxfZmJfcGxhbmVfZ2V0X3N1YnNhbXBsaW5nKCZoc3ViLCAmdnN1YiwgZmIsIGNjc19wbGFu ZSk7CisKKwkJaHN1YiAqPSBtYWluX2hzdWI7CisJCXZzdWIgKj0gbWFpbl92c3ViOworCQl4ID0g c3JjX3ggLyBoc3ViOworCQl5ID0gc3JjX3kgLyB2c3ViOworCisJCWludGVsX2FkZF9mYl9vZmZz ZXRzKCZ4LCAmeSwgcGxhbmVfc3RhdGUsIGNjc19wbGFuZSk7CisKKwkJb2Zmc2V0ID0gaW50ZWxf cGxhbmVfY29tcHV0ZV9hbGlnbmVkX29mZnNldCgmeCwgJnksCisJCQkJCQkJICAgIHBsYW5lX3N0 YXRlLAorCQkJCQkJCSAgICBjY3NfcGxhbmUpOworCisJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFu ZVtjY3NfcGxhbmVdLm9mZnNldCA9IG9mZnNldDsKKwkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5l W2Njc19wbGFuZV0ueCA9ICh4ICogaHN1YiArCisJCQkJCQkJIHNyY194ICUgaHN1YikgLworCQkJ CQkJCW1haW5faHN1YjsKKwkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFuZV0ueSA9 ICh5ICogdnN1YiArCisJCQkJCQkJIHNyY195ICUgdnN1YikgLworCQkJCQkJCW1haW5fdnN1YjsK Kwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBza2xfY2hlY2tfcGxhbmVfc3VyZmFj ZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCWNvbnN0IHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOworCWludCByZXQsIGk7 CisKKwlyZXQgPSBpbnRlbF9wbGFuZV9jb21wdXRlX2d0dChwbGFuZV9zdGF0ZSk7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCWlmICghcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSkKKwkJ cmV0dXJuIDA7CisKKwkvKgorCSAqIEhhbmRsZSB0aGUgQVVYIHN1cmZhY2UgZmlyc3Qgc2luY2Ug dGhlIG1haW4gc3VyZmFjZSBzZXR1cCBkZXBlbmRzIG9uCisJICogaXQuCisJICovCisJaWYgKGlz X2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIpKSB7CisJCXJldCA9IHNrbF9jaGVja19jY3NfYXV4 X3N1cmZhY2UocGxhbmVfc3RhdGUpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisK KwlpZiAoaW50ZWxfZm9ybWF0X2luZm9faXNfeXV2X3NlbWlwbGFuYXIoZmItPmZvcm1hdCwKKwkJ CQkJCWZiLT5tb2RpZmllcikpIHsKKwkJcmV0ID0gc2tsX2NoZWNrX252MTJfYXV4X3N1cmZhY2Uo cGxhbmVfc3RhdGUpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlmb3IgKGkg PSBmYi0+Zm9ybWF0LT5udW1fcGxhbmVzOyBpIDwgQVJSQVlfU0laRShwbGFuZV9zdGF0ZS0+Y29s b3JfcGxhbmUpOyBpKyspIHsKKwkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2ldLm9mZnNldCA9 IDA7CisJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtpXS54ID0gMDsKKwkJcGxhbmVfc3RhdGUt PmNvbG9yX3BsYW5lW2ldLnkgPSAwOworCX0KKworCXJldCA9IHNrbF9jaGVja19tYWluX3N1cmZh Y2UocGxhbmVfc3RhdGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGJvb2wgaW50ZWxfZmJfc2NhbGFibGUoY29uc3Qgc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZmIpCit7CisJaWYgKCFmYikKKwkJcmV0dXJuIGZhbHNlOworCisJc3dpdGNoIChm Yi0+Zm9ybWF0LT5mb3JtYXQpIHsKKwljYXNlIERSTV9GT1JNQVRfQzg6CisJCXJldHVybiBmYWxz ZTsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjE2MTYxNjE2RjoKKwljYXNlIERSTV9GT1JNQVRfQVJH QjE2MTYxNjE2RjoKKwljYXNlIERSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RjoKKwljYXNlIERSTV9G T1JNQVRfQUJHUjE2MTYxNjE2RjoKKwkJcmV0dXJuIElOVEVMX0dFTih0b19pOTE1KGZiLT5kZXYp KSA+PSAxMTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gdHJ1ZTsKKwl9Cit9CisKK3N0YXRpYyBpbnQg c2tsX3BsYW5lX2NoZWNrKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJ ICAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgaW50 ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUp OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJh c2UuZGV2KTsKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRl LT5ody5mYjsKKwlpbnQgbWluX3NjYWxlID0gRFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HOwor CWludCBtYXhfc2NhbGUgPSBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkc7CisJaW50IHJldDsK KworCXJldCA9IHNrbF9wbGFuZV9jaGVja19mYihjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHVzZSBzY2FsZXIgd2hlbiBjb2xvcmtleSBp cyBub3QgcmVxdWlyZWQgKi8KKwlpZiAoIXBsYW5lX3N0YXRlLT5ja2V5LmZsYWdzICYmIGludGVs X2ZiX3NjYWxhYmxlKGZiKSkgeworCQltaW5fc2NhbGUgPSAxOworCQltYXhfc2NhbGUgPSBza2xf cGxhbmVfbWF4X3NjYWxlKGRldl9wcml2LCBmYik7CisJfQorCisJcmV0ID0gaW50ZWxfYXRvbWlj X3BsYW5lX2NoZWNrX2NsaXBwaW5nKHBsYW5lX3N0YXRlLCBjcnRjX3N0YXRlLAorCQkJCQkJbWlu X3NjYWxlLCBtYXhfc2NhbGUsIHRydWUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwly ZXQgPSBza2xfY2hlY2tfcGxhbmVfc3VyZmFjZShwbGFuZV9zdGF0ZSk7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCWlmICghcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSkKKwkJcmV0dXJu IDA7CisKKwlyZXQgPSBza2xfcGxhbmVfY2hlY2tfZHN0X2Nvb3JkaW5hdGVzKGNydGNfc3RhdGUs IHBsYW5lX3N0YXRlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gaW50ZWxf cGxhbmVfY2hlY2tfc3JjX2Nvb3JkaW5hdGVzKHBsYW5lX3N0YXRlKTsKKwlpZiAocmV0KQorCQly ZXR1cm4gcmV0OworCisJcmV0ID0gc2tsX3BsYW5lX2NoZWNrX252MTJfcm90YXRpb24ocGxhbmVf c3RhdGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBIVyBvbmx5IGhhcyA4IGJp dHMgcGl4ZWwgcHJlY2lzaW9uLCBkaXNhYmxlIHBsYW5lIGlmIGludmlzaWJsZSAqLworCWlmICgh KHBsYW5lX3N0YXRlLT5ody5hbHBoYSA+PiA4KSkKKwkJcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJs ZSA9IGZhbHNlOworCisJcGxhbmVfc3RhdGUtPmN0bCA9IHNrbF9wbGFuZV9jdGwoY3J0Y19zdGF0 ZSwgcGxhbmVfc3RhdGUpOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNf R0VNSU5JTEFLRShkZXZfcHJpdikpCisJCXBsYW5lX3N0YXRlLT5jb2xvcl9jdGwgPSBnbGtfcGxh bmVfY29sb3JfY3RsKGNydGNfc3RhdGUsCisJCQkJCQkJICAgICBwbGFuZV9zdGF0ZSk7CisKKwlp ZiAoaW50ZWxfZm9ybWF0X2luZm9faXNfeXV2X3NlbWlwbGFuYXIoZmItPmZvcm1hdCwgZmItPm1v ZGlmaWVyKSAmJgorCSAgICBpY2xfaXNfaGRyX3BsYW5lKGRldl9wcml2LCBwbGFuZS0+aWQpKQor CQkvKiBFbmFibGUgYW5kIHVzZSBNUEVHLTIgY2hyb21hIHNpdGluZyAqLworCQlwbGFuZV9zdGF0 ZS0+Y3VzX2N0bCA9IFBMQU5FX0NVU19FTkFCTEUgfAorCQkJUExBTkVfQ1VTX0hQSEFTRV8wIHwK KwkJCVBMQU5FX0NVU19WUEhBU0VfU0lHTl9ORUdBVElWRSB8IFBMQU5FX0NVU19WUEhBU0VfMF8y NTsKKwllbHNlCisJCXBsYW5lX3N0YXRlLT5jdXNfY3RsID0gMDsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgYm9vbCBza2xfcGxhbmVfaGFzX2ZiYyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCisJCQkgICAgICBlbnVtIHBpcGUgcGlwZSwgZW51bSBwbGFuZV9pZCBwbGFuZV9p ZCkKK3sKKwlpZiAoIUhBU19GQkMoZGV2X3ByaXYpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1 cm4gcGlwZSA9PSBQSVBFX0EgJiYgcGxhbmVfaWQgPT0gUExBTkVfUFJJTUFSWTsKK30KKworc3Rh dGljIGJvb2wgc2tsX3BsYW5lX2hhc19wbGFuYXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LAorCQkJCSBlbnVtIHBpcGUgcGlwZSwgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCkKK3sK KwkvKiBEaXNwbGF5IFdBICMwODcwOiBza2wsIGJ4dCAqLworCWlmIChJU19TS1lMQUtFKGRldl9w cml2KSB8fCBJU19CUk9YVE9OKGRldl9wcml2KSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKElT X0dFTihkZXZfcHJpdiwgOSkgJiYgIUlTX0dFTUlOSUxBS0UoZGV2X3ByaXYpICYmIHBpcGUgPT0g UElQRV9DKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAocGxhbmVfaWQgIT0gUExBTkVfUFJJTUFS WSAmJiBwbGFuZV9pZCAhPSBQTEFORV9TUFJJVEUwKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1 cm4gdHJ1ZTsKK30KKworc3RhdGljIGNvbnN0IHUzMiAqc2tsX2dldF9wbGFuZV9mb3JtYXRzKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkJZW51bSBwaXBlIHBpcGUsIGVu dW0gcGxhbmVfaWQgcGxhbmVfaWQsCisJCQkJCWludCAqbnVtX2Zvcm1hdHMpCit7CisJaWYgKHNr bF9wbGFuZV9oYXNfcGxhbmFyKGRldl9wcml2LCBwaXBlLCBwbGFuZV9pZCkpIHsKKwkJKm51bV9m b3JtYXRzID0gQVJSQVlfU0laRShza2xfcGxhbmFyX2Zvcm1hdHMpOworCQlyZXR1cm4gc2tsX3Bs YW5hcl9mb3JtYXRzOworCX0gZWxzZSB7CisJCSpudW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoc2ts X3BsYW5lX2Zvcm1hdHMpOworCQlyZXR1cm4gc2tsX3BsYW5lX2Zvcm1hdHM7CisJfQorfQorCitz dGF0aWMgY29uc3QgdTMyICpnbGtfZ2V0X3BsYW5lX2Zvcm1hdHMoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAorCQkJCQllbnVtIHBpcGUgcGlwZSwgZW51bSBwbGFuZV9pZCBwbGFu ZV9pZCwKKwkJCQkJaW50ICpudW1fZm9ybWF0cykKK3sKKwlpZiAoc2tsX3BsYW5lX2hhc19wbGFu YXIoZGV2X3ByaXYsIHBpcGUsIHBsYW5lX2lkKSkgeworCQkqbnVtX2Zvcm1hdHMgPSBBUlJBWV9T SVpFKGdsa19wbGFuYXJfZm9ybWF0cyk7CisJCXJldHVybiBnbGtfcGxhbmFyX2Zvcm1hdHM7CisJ fSBlbHNlIHsKKwkJKm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShza2xfcGxhbmVfZm9ybWF0cyk7 CisJCXJldHVybiBza2xfcGxhbmVfZm9ybWF0czsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCB1MzIg KmljbF9nZXRfcGxhbmVfZm9ybWF0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs CisJCQkJCWVudW0gcGlwZSBwaXBlLCBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkLAorCQkJCQlpbnQg Km51bV9mb3JtYXRzKQoreworCWlmIChpY2xfaXNfaGRyX3BsYW5lKGRldl9wcml2LCBwbGFuZV9p ZCkpIHsKKwkJKm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShpY2xfaGRyX3BsYW5lX2Zvcm1hdHMp OworCQlyZXR1cm4gaWNsX2hkcl9wbGFuZV9mb3JtYXRzOworCX0gZWxzZSBpZiAoaWNsX2lzX252 MTJfeV9wbGFuZShkZXZfcHJpdiwgcGxhbmVfaWQpKSB7CisJCSpudW1fZm9ybWF0cyA9IEFSUkFZ X1NJWkUoaWNsX3Nkcl95X3BsYW5lX2Zvcm1hdHMpOworCQlyZXR1cm4gaWNsX3Nkcl95X3BsYW5l X2Zvcm1hdHM7CisJfSBlbHNlIHsKKwkJKm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShpY2xfc2Ry X3V2X3BsYW5lX2Zvcm1hdHMpOworCQlyZXR1cm4gaWNsX3Nkcl91dl9wbGFuZV9mb3JtYXRzOwor CX0KK30KKworc3RhdGljIGJvb2wgc2tsX3BsYW5lX2hhc19jY3Moc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAorCQkJICAgICAgZW51bSBwaXBlIHBpcGUsIGVudW0gcGxhbmVfaWQg cGxhbmVfaWQpCit7CisJaWYgKHBsYW5lX2lkID09IFBMQU5FX0NVUlNPUikKKwkJcmV0dXJuIGZh bHNlOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTApCisJCXJldHVybiB0cnVlOwor CisJaWYgKElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQorCQlyZXR1cm4gcGlwZSAhPSBQSVBFX0M7 CisKKwlyZXR1cm4gcGlwZSAhPSBQSVBFX0MgJiYKKwkJKHBsYW5lX2lkID09IFBMQU5FX1BSSU1B UlkgfHwKKwkJIHBsYW5lX2lkID09IFBMQU5FX1NQUklURTApOworfQorCitzdGF0aWMgYm9vbCBz a2xfcGxhbmVfZm9ybWF0X21vZF9zdXBwb3J0ZWQoc3RydWN0IGRybV9wbGFuZSAqX3BsYW5lLAor CQkJCQkgICB1MzIgZm9ybWF0LCB1NjQgbW9kaWZpZXIpCit7CisJc3RydWN0IGludGVsX3BsYW5l ICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKF9wbGFuZSk7CisKKwlzd2l0Y2ggKG1vZGlmaWVyKSB7 CisJY2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWF9U SUxFRDoKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgorCWNhc2UgSTkxNV9GT1JNQVRf TU9EX1lmX1RJTEVEOgorCQlicmVhazsKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0ND UzoKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M6CisJCWlmICghcGxhbmUtPmhh c19jY3MpCisJCQlyZXR1cm4gZmFsc2U7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBm YWxzZTsKKwl9CisKKwlzd2l0Y2ggKGZvcm1hdCkgeworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4 ODoKKwljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4 OgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKKwkJaWYgKGlzX2Njc19tb2RpZmllcihtb2Rp ZmllcikpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJZmFsbHRocm91Z2g7CisJY2FzZSBEUk1fRk9STUFU X1JHQjU2NToKKwljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFU X1hCR1IyMTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDoKKwljYXNlIERSTV9G T1JNQVRfQUJHUjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX1lVWVY6CisJY2FzZSBEUk1fRk9S TUFUX1lWWVU6CisJY2FzZSBEUk1fRk9STUFUX1VZVlk6CisJY2FzZSBEUk1fRk9STUFUX1ZZVVk6 CisJY2FzZSBEUk1fRk9STUFUX05WMTI6CisJY2FzZSBEUk1fRk9STUFUX1hZVVY4ODg4OgorCWNh c2UgRFJNX0ZPUk1BVF9QMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9QMDEyOgorCWNhc2UgRFJNX0ZP Uk1BVF9QMDE2OgorCWNhc2UgRFJNX0ZPUk1BVF9YVllVMjEwMTAxMDoKKwkJaWYgKG1vZGlmaWVy ID09IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRCkKKwkJCXJldHVybiB0cnVlOworCQlmYWxsdGhy b3VnaDsKKwljYXNlIERSTV9GT1JNQVRfQzg6CisJY2FzZSBEUk1fRk9STUFUX1hCR1IxNjE2MTYx NkY6CisJY2FzZSBEUk1fRk9STUFUX0FCR1IxNjE2MTYxNkY6CisJY2FzZSBEUk1fRk9STUFUX1hS R0IxNjE2MTYxNkY6CisJY2FzZSBEUk1fRk9STUFUX0FSR0IxNjE2MTYxNkY6CisJY2FzZSBEUk1f Rk9STUFUX1kyMTA6CisJY2FzZSBEUk1fRk9STUFUX1kyMTI6CisJY2FzZSBEUk1fRk9STUFUX1ky MTY6CisJY2FzZSBEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNjoKKwljYXNlIERSTV9GT1JNQVRf WFZZVTE2MTYxNjE2OgorCQlpZiAobW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfTElORUFSIHx8 CisJCSAgICBtb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCB8fAorCQkgICAgbW9k aWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJZmFs bHRocm91Z2g7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworc3RhdGljIGJv b2wgZ2VuMTJfcGxhbmVfc3VwcG9ydHNfbWNfY2NzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKKwkJCQkJZW51bSBwbGFuZV9pZCBwbGFuZV9pZCkKK3sKKwkvKiBXYV8xNDAxMDQ3 NzAwODp0Z2xbYTAuLmMwXSxya2xbYWxsXSxkZzFbYWxsXSAqLworCWlmIChJU19ERzEoZGV2X3By aXYpIHx8IElTX1JPQ0tFVExBS0UoZGV2X3ByaXYpIHx8CisJICAgIElTX1RHTF9ESVNQX1JFVklE KGRldl9wcml2LCBUR0xfUkVWSURfQTAsIFRHTF9SRVZJRF9DMCkpCisJCXJldHVybiBmYWxzZTsK KworCXJldHVybiBwbGFuZV9pZCA8IFBMQU5FX1NQUklURTQ7Cit9CisKK3N0YXRpYyBib29sIGdl bjEyX3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkKHN0cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwK KwkJCQkJICAgICB1MzIgZm9ybWF0LCB1NjQgbW9kaWZpZXIpCit7CisJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShfcGxhbmUtPmRldik7CisJc3RydWN0IGludGVs X3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKF9wbGFuZSk7CisKKwlzd2l0Y2ggKG1vZGlm aWVyKSB7CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9NQ19DQ1M6CisJCWlm ICghZ2VuMTJfcGxhbmVfc3VwcG9ydHNfbWNfY2NzKGRldl9wcml2LCBwbGFuZS0+aWQpKQorCQkJ cmV0dXJuIGZhbHNlOworCQlmYWxsdGhyb3VnaDsKKwljYXNlIERSTV9GT1JNQVRfTU9EX0xJTkVB UjoKKwljYXNlIEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOgorCWNhc2UgSTkxNV9GT1JNQVRfTU9E X1lfVElMRUQ6CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19DQ1M6CisJ CWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlzd2l0Y2ggKGZvcm1h dCkgeworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKKwljYXNlIERSTV9GT1JNQVRfWEJHUjg4 ODg6CisJY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4 ODoKKwkJaWYgKGlzX2Njc19tb2RpZmllcihtb2RpZmllcikpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJ ZmFsbHRocm91Z2g7CisJY2FzZSBEUk1fRk9STUFUX1lVWVY6CisJY2FzZSBEUk1fRk9STUFUX1lW WVU6CisJY2FzZSBEUk1fRk9STUFUX1VZVlk6CisJY2FzZSBEUk1fRk9STUFUX1ZZVVk6CisJY2Fz ZSBEUk1fRk9STUFUX05WMTI6CisJY2FzZSBEUk1fRk9STUFUX1hZVVY4ODg4OgorCWNhc2UgRFJN X0ZPUk1BVF9QMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9QMDEyOgorCWNhc2UgRFJNX0ZPUk1BVF9Q MDE2OgorCQlpZiAobW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNf Q0NTKQorCQkJcmV0dXJuIHRydWU7CisJCWZhbGx0aHJvdWdoOworCWNhc2UgRFJNX0ZPUk1BVF9S R0I1NjU6CisJY2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9Y QkdSMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfQVJHQjIxMDEwMTA6CisJY2FzZSBEUk1fRk9S TUFUX0FCR1IyMTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9YVllVMjEwMTAxMDoKKwljYXNlIERS TV9GT1JNQVRfQzg6CisJY2FzZSBEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkY6CisJY2FzZSBEUk1f Rk9STUFUX0FCR1IxNjE2MTYxNkY6CisJY2FzZSBEUk1fRk9STUFUX1hSR0IxNjE2MTYxNkY6CisJ Y2FzZSBEUk1fRk9STUFUX0FSR0IxNjE2MTYxNkY6CisJY2FzZSBEUk1fRk9STUFUX1kyMTA6CisJ Y2FzZSBEUk1fRk9STUFUX1kyMTI6CisJY2FzZSBEUk1fRk9STUFUX1kyMTY6CisJY2FzZSBEUk1f Rk9STUFUX1hWWVUxMl8xNjE2MTYxNjoKKwljYXNlIERSTV9GT1JNQVRfWFZZVTE2MTYxNjE2Ogor CQlpZiAobW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfTElORUFSIHx8CisJCSAgICBtb2RpZmll ciA9PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCB8fAorCQkgICAgbW9kaWZpZXIgPT0gSTkxNV9G T1JNQVRfTU9EX1lfVElMRUQpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJZmFsbHRocm91Z2g7CisJZGVm YXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworc3RhdGljIGNvbnN0IHU2NCAqZ2VuMTJf Z2V0X3BsYW5lX21vZGlmaWVycyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJ CQkJCSAgICBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkKQoreworCWlmIChnZW4xMl9wbGFuZV9zdXBw b3J0c19tY19jY3MoZGV2X3ByaXYsIHBsYW5lX2lkKSkKKwkJcmV0dXJuIGdlbjEyX3BsYW5lX2Zv cm1hdF9tb2RpZmllcnNfbWNfY2NzOworCWVsc2UKKwkJcmV0dXJuIGdlbjEyX3BsYW5lX2Zvcm1h dF9tb2RpZmllcnNfcmNfY2NzOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9m dW5jcyBza2xfcGxhbmVfZnVuY3MgPSB7CisJLnVwZGF0ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVs cGVyX3VwZGF0ZV9wbGFuZSwKKwkuZGlzYWJsZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX2Rp c2FibGVfcGxhbmUsCisJLmRlc3Ryb3kgPSBpbnRlbF9wbGFuZV9kZXN0cm95LAorCS5hdG9taWNf ZHVwbGljYXRlX3N0YXRlID0gaW50ZWxfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNf ZGVzdHJveV9zdGF0ZSA9IGludGVsX3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCisJLmZvcm1hdF9tb2Rf c3VwcG9ydGVkID0gc2tsX3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkLAorfTsKKworc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgZ2VuMTJfcGxhbmVfZnVuY3MgPSB7CisJLnVw ZGF0ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwKKwkuZGlzYWJsZV9w bGFuZSA9IGRybV9hdG9taWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCisJLmRlc3Ryb3kgPSBpbnRl bF9wbGFuZV9kZXN0cm95LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gaW50ZWxfcGxhbmVf ZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGludGVsX3BsYW5lX2Rl c3Ryb3lfc3RhdGUsCisJLmZvcm1hdF9tb2Rfc3VwcG9ydGVkID0gZ2VuMTJfcGxhbmVfZm9ybWF0 X21vZF9zdXBwb3J0ZWQsCit9OworCitzdGF0aWMgdm9pZAorc2tsX3BsYW5lX2VuYWJsZV9mbGlw X2RvbmUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKKwllbnVtIHBpcGUgcGlwZSA9 IHBsYW5lLT5waXBlOworCisJc3Bpbl9sb2NrX2lycSgmaTkxNS0+aXJxX2xvY2spOworCWJkd19l bmFibGVfcGlwZV9pcnEoaTkxNSwgcGlwZSwgR0VOOV9QSVBFX1BMQU5FX0ZMSVBfRE9ORShwbGFu ZS0+aWQpKTsKKwlzcGluX3VubG9ja19pcnEoJmk5MTUtPmlycV9sb2NrKTsKK30KKworc3RhdGlj IHZvaWQKK3NrbF9wbGFuZV9kaXNhYmxlX2ZsaXBfZG9uZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBs YW5lKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShwbGFuZS0+ YmFzZS5kZXYpOworCWVudW0gcGlwZSBwaXBlID0gcGxhbmUtPnBpcGU7CisKKwlzcGluX2xvY2tf aXJxKCZpOTE1LT5pcnFfbG9jayk7CisJYmR3X2Rpc2FibGVfcGlwZV9pcnEoaTkxNSwgcGlwZSwg R0VOOV9QSVBFX1BMQU5FX0ZMSVBfRE9ORShwbGFuZS0+aWQpKTsKKwlzcGluX3VubG9ja19pcnEo Jmk5MTUtPmlycV9sb2NrKTsKK30KKworc3RydWN0IGludGVsX3BsYW5lICoKK3NrbF91bml2ZXJz YWxfcGxhbmVfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAg IGVudW0gcGlwZSBwaXBlLCBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkKQoreworCWNvbnN0IHN0cnVj dCBkcm1fcGxhbmVfZnVuY3MgKnBsYW5lX2Z1bmNzOworCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxh bmU7CisJZW51bSBkcm1fcGxhbmVfdHlwZSBwbGFuZV90eXBlOworCXVuc2lnbmVkIGludCBzdXBw b3J0ZWRfcm90YXRpb25zOworCXVuc2lnbmVkIGludCBzdXBwb3J0ZWRfY3NjOworCWNvbnN0IHU2 NCAqbW9kaWZpZXJzOworCWNvbnN0IHUzMiAqZm9ybWF0czsKKwlpbnQgbnVtX2Zvcm1hdHM7CisJ aW50IHJldDsKKworCXBsYW5lID0gaW50ZWxfcGxhbmVfYWxsb2MoKTsKKwlpZiAoSVNfRVJSKHBs YW5lKSkKKwkJcmV0dXJuIHBsYW5lOworCisJcGxhbmUtPnBpcGUgPSBwaXBlOworCXBsYW5lLT5p ZCA9IHBsYW5lX2lkOworCXBsYW5lLT5mcm9udGJ1ZmZlcl9iaXQgPSBJTlRFTF9GUk9OVEJVRkZF UihwaXBlLCBwbGFuZV9pZCk7CisKKwlwbGFuZS0+aGFzX2ZiYyA9IHNrbF9wbGFuZV9oYXNfZmJj KGRldl9wcml2LCBwaXBlLCBwbGFuZV9pZCk7CisJaWYgKHBsYW5lLT5oYXNfZmJjKSB7CisJCXN0 cnVjdCBpbnRlbF9mYmMgKmZiYyA9ICZkZXZfcHJpdi0+ZmJjOworCisJCWZiYy0+cG9zc2libGVf ZnJhbWVidWZmZXJfYml0cyB8PSBwbGFuZS0+ZnJvbnRidWZmZXJfYml0OworCX0KKworCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDExKSB7CisJCXBsYW5lLT5taW5fd2lkdGggPSBpY2xfcGxh bmVfbWluX3dpZHRoOworCQlwbGFuZS0+bWF4X3dpZHRoID0gaWNsX3BsYW5lX21heF93aWR0aDsK KwkJcGxhbmUtPm1heF9oZWlnaHQgPSBpY2xfcGxhbmVfbWF4X2hlaWdodDsKKwl9IGVsc2UgaWYg KElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpIHsK KwkJcGxhbmUtPm1heF93aWR0aCA9IGdsa19wbGFuZV9tYXhfd2lkdGg7CisJCXBsYW5lLT5tYXhf aGVpZ2h0ID0gc2tsX3BsYW5lX21heF9oZWlnaHQ7CisJfSBlbHNlIHsKKwkJcGxhbmUtPm1heF93 aWR0aCA9IHNrbF9wbGFuZV9tYXhfd2lkdGg7CisJCXBsYW5lLT5tYXhfaGVpZ2h0ID0gc2tsX3Bs YW5lX21heF9oZWlnaHQ7CisJfQorCisJcGxhbmUtPm1heF9zdHJpZGUgPSBza2xfcGxhbmVfbWF4 X3N0cmlkZTsKKwlwbGFuZS0+dXBkYXRlX3BsYW5lID0gc2tsX3VwZGF0ZV9wbGFuZTsKKwlwbGFu ZS0+ZGlzYWJsZV9wbGFuZSA9IHNrbF9kaXNhYmxlX3BsYW5lOworCXBsYW5lLT5nZXRfaHdfc3Rh dGUgPSBza2xfcGxhbmVfZ2V0X2h3X3N0YXRlOworCXBsYW5lLT5jaGVja19wbGFuZSA9IHNrbF9w bGFuZV9jaGVjazsKKwlwbGFuZS0+bWluX2NkY2xrID0gc2tsX3BsYW5lX21pbl9jZGNsazsKKwor CWlmIChwbGFuZV9pZCA9PSBQTEFORV9QUklNQVJZKSB7CisJCXBsYW5lLT5uZWVkX2FzeW5jX2Zs aXBfZGlzYWJsZV93YSA9IElTX0dFTl9SQU5HRShkZXZfcHJpdiwgOSwgMTApOworCQlwbGFuZS0+ YXN5bmNfZmxpcCA9IHNrbF9wbGFuZV9hc3luY19mbGlwOworCQlwbGFuZS0+ZW5hYmxlX2ZsaXBf ZG9uZSA9IHNrbF9wbGFuZV9lbmFibGVfZmxpcF9kb25lOworCQlwbGFuZS0+ZGlzYWJsZV9mbGlw X2RvbmUgPSBza2xfcGxhbmVfZGlzYWJsZV9mbGlwX2RvbmU7CisJfQorCisJaWYgKElOVEVMX0dF TihkZXZfcHJpdikgPj0gMTEpCisJCWZvcm1hdHMgPSBpY2xfZ2V0X3BsYW5lX2Zvcm1hdHMoZGV2 X3ByaXYsIHBpcGUsCisJCQkJCQlwbGFuZV9pZCwgJm51bV9mb3JtYXRzKTsKKwllbHNlIGlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQorCQlm b3JtYXRzID0gZ2xrX2dldF9wbGFuZV9mb3JtYXRzKGRldl9wcml2LCBwaXBlLAorCQkJCQkJcGxh bmVfaWQsICZudW1fZm9ybWF0cyk7CisJZWxzZQorCQlmb3JtYXRzID0gc2tsX2dldF9wbGFuZV9m b3JtYXRzKGRldl9wcml2LCBwaXBlLAorCQkJCQkJcGxhbmVfaWQsICZudW1fZm9ybWF0cyk7CisK KwlwbGFuZS0+aGFzX2NjcyA9IHNrbF9wbGFuZV9oYXNfY2NzKGRldl9wcml2LCBwaXBlLCBwbGFu ZV9pZCk7CisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTIpIHsKKwkJbW9kaWZpZXJzID0g Z2VuMTJfZ2V0X3BsYW5lX21vZGlmaWVycyhkZXZfcHJpdiwgcGxhbmVfaWQpOworCQlwbGFuZV9m dW5jcyA9ICZnZW4xMl9wbGFuZV9mdW5jczsKKwl9IGVsc2UgeworCQlpZiAocGxhbmUtPmhhc19j Y3MpCisJCQltb2RpZmllcnMgPSBza2xfcGxhbmVfZm9ybWF0X21vZGlmaWVyc19jY3M7CisJCWVs c2UKKwkJCW1vZGlmaWVycyA9IHNrbF9wbGFuZV9mb3JtYXRfbW9kaWZpZXJzX25vY2NzOworCQlw bGFuZV9mdW5jcyA9ICZza2xfcGxhbmVfZnVuY3M7CisJfQorCisJaWYgKHBsYW5lX2lkID09IFBM QU5FX1BSSU1BUlkpCisJCXBsYW5lX3R5cGUgPSBEUk1fUExBTkVfVFlQRV9QUklNQVJZOworCWVs c2UKKwkJcGxhbmVfdHlwZSA9IERSTV9QTEFORV9UWVBFX09WRVJMQVk7CisKKwlyZXQgPSBkcm1f dW5pdmVyc2FsX3BsYW5lX2luaXQoJmRldl9wcml2LT5kcm0sICZwbGFuZS0+YmFzZSwKKwkJCQkg ICAgICAgMCwgcGxhbmVfZnVuY3MsCisJCQkJICAgICAgIGZvcm1hdHMsIG51bV9mb3JtYXRzLCBt b2RpZmllcnMsCisJCQkJICAgICAgIHBsYW5lX3R5cGUsCisJCQkJICAgICAgICJwbGFuZSAlZCVj IiwgcGxhbmVfaWQgKyAxLAorCQkJCSAgICAgICBwaXBlX25hbWUocGlwZSkpOworCWlmIChyZXQp CisJCWdvdG8gZmFpbDsKKworCXN1cHBvcnRlZF9yb3RhdGlvbnMgPQorCQlEUk1fTU9ERV9ST1RB VEVfMCB8IERSTV9NT0RFX1JPVEFURV85MCB8CisJCURSTV9NT0RFX1JPVEFURV8xODAgfCBEUk1f TU9ERV9ST1RBVEVfMjcwOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTApCisJCXN1 cHBvcnRlZF9yb3RhdGlvbnMgfD0gRFJNX01PREVfUkVGTEVDVF9YOworCisJZHJtX3BsYW5lX2Ny ZWF0ZV9yb3RhdGlvbl9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UsCisJCQkJCSAgIERSTV9NT0RFX1JP VEFURV8wLAorCQkJCQkgICBzdXBwb3J0ZWRfcm90YXRpb25zKTsKKworCXN1cHBvcnRlZF9jc2Mg PSBCSVQoRFJNX0NPTE9SX1lDQkNSX0JUNjAxKSB8IEJJVChEUk1fQ09MT1JfWUNCQ1JfQlQ3MDkp OworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZf cHJpdikpCisJCXN1cHBvcnRlZF9jc2MgfD0gQklUKERSTV9DT0xPUl9ZQ0JDUl9CVDIwMjApOwor CisJZHJtX3BsYW5lX2NyZWF0ZV9jb2xvcl9wcm9wZXJ0aWVzKCZwbGFuZS0+YmFzZSwKKwkJCQkJ ICBzdXBwb3J0ZWRfY3NjLAorCQkJCQkgIEJJVChEUk1fQ09MT1JfWUNCQ1JfTElNSVRFRF9SQU5H RSkgfAorCQkJCQkgIEJJVChEUk1fQ09MT1JfWUNCQ1JfRlVMTF9SQU5HRSksCisJCQkJCSAgRFJN X0NPTE9SX1lDQkNSX0JUNzA5LAorCQkJCQkgIERSTV9DT0xPUl9ZQ0JDUl9MSU1JVEVEX1JBTkdF KTsKKworCWRybV9wbGFuZV9jcmVhdGVfYWxwaGFfcHJvcGVydHkoJnBsYW5lLT5iYXNlKTsKKwlk cm1fcGxhbmVfY3JlYXRlX2JsZW5kX21vZGVfcHJvcGVydHkoJnBsYW5lLT5iYXNlLAorCQkJCQkg ICAgIEJJVChEUk1fTU9ERV9CTEVORF9QSVhFTF9OT05FKSB8CisJCQkJCSAgICAgQklUKERSTV9N T0RFX0JMRU5EX1BSRU1VTFRJKSB8CisJCQkJCSAgICAgQklUKERSTV9NT0RFX0JMRU5EX0NPVkVS QUdFKSk7CisKKwlkcm1fcGxhbmVfY3JlYXRlX3pwb3NfaW1tdXRhYmxlX3Byb3BlcnR5KCZwbGFu ZS0+YmFzZSwgcGxhbmVfaWQpOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTIpCisJ CWRybV9wbGFuZV9lbmFibGVfZmJfZGFtYWdlX2NsaXBzKCZwbGFuZS0+YmFzZSk7CisKKwlpZiAo SU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCkKKwkJZHJtX3BsYW5lX2NyZWF0ZV9zY2FsaW5nX2Zp bHRlcl9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UsCisJCQkJCQlCSVQoRFJNX1NDQUxJTkdfRklMVEVS X0RFRkFVTFQpIHwKKwkJCQkJCUJJVChEUk1fU0NBTElOR19GSUxURVJfTkVBUkVTVF9ORUlHSEJP UikpOworCisJZHJtX3BsYW5lX2hlbHBlcl9hZGQoJnBsYW5lLT5iYXNlLCAmaW50ZWxfcGxhbmVf aGVscGVyX2Z1bmNzKTsKKworCXJldHVybiBwbGFuZTsKKworZmFpbDoKKwlpbnRlbF9wbGFuZV9m cmVlKHBsYW5lKTsKKworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKK3ZvaWQKK3NrbF9nZXRf aW5pdGlhbF9wbGFuZV9jb25maWcoc3RydWN0IGludGVsX2NydGMgKmNydGMsCisJCQkgICAgIHN0 cnVjdCBpbnRlbF9pbml0aWFsX3BsYW5lX2NvbmZpZyAqcGxhbmVfY29uZmlnKQoreworCXN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlID0gdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRj LT5iYXNlLnN0YXRlKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7 CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOworCXN0 cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShjcnRjLT5iYXNlLnByaW1h cnkpOworCWVudW0gcGxhbmVfaWQgcGxhbmVfaWQgPSBwbGFuZS0+aWQ7CisJZW51bSBwaXBlIHBp cGU7CisJdTMyIHZhbCwgYmFzZSwgb2Zmc2V0LCBzdHJpZGVfbXVsdCwgdGlsaW5nLCBhbHBoYTsK KwlpbnQgZm91cmNjLCBwaXhlbF9mb3JtYXQ7CisJdW5zaWduZWQgaW50IGFsaWduZWRfaGVpZ2h0 OworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOworCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZl ciAqaW50ZWxfZmI7CisKKwlpZiAoIXBsYW5lLT5nZXRfaHdfc3RhdGUocGxhbmUsICZwaXBlKSkK KwkJcmV0dXJuOworCisJZHJtX1dBUk5fT04oZGV2LCBwaXBlICE9IGNydGMtPnBpcGUpOworCisJ aWYgKGNydGNfc3RhdGUtPmJpZ2pvaW5lcikgeworCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRy bSwKKwkJCSAgICAiVW5zdXBwb3J0ZWQgYmlnam9pbmVyIGNvbmZpZ3VyYXRpb24gZm9yIGluaXRp YWwgRkJcbiIpOworCQlyZXR1cm47CisJfQorCisJaW50ZWxfZmIgPSBremFsbG9jKHNpemVvZigq aW50ZWxfZmIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWludGVsX2ZiKSB7CisJCWRybV9kYmdfa21z KCZkZXZfcHJpdi0+ZHJtLCAiZmFpbGVkIHRvIGFsbG9jIGZiXG4iKTsKKwkJcmV0dXJuOworCX0K KworCWZiID0gJmludGVsX2ZiLT5iYXNlOworCisJZmItPmRldiA9IGRldjsKKworCXZhbCA9IGlu dGVsX2RlX3JlYWQoZGV2X3ByaXYsIFBMQU5FX0NUTChwaXBlLCBwbGFuZV9pZCkpOworCisJaWYg KElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEpCisJCXBpeGVsX2Zvcm1hdCA9IHZhbCAmIElDTF9Q TEFORV9DVExfRk9STUFUX01BU0s7CisJZWxzZQorCQlwaXhlbF9mb3JtYXQgPSB2YWwgJiBQTEFO RV9DVExfRk9STUFUX01BU0s7CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJ U19HRU1JTklMQUtFKGRldl9wcml2KSkgeworCQlhbHBoYSA9IGludGVsX2RlX3JlYWQoZGV2X3By aXYsCisJCQkJICAgICAgUExBTkVfQ09MT1JfQ1RMKHBpcGUsIHBsYW5lX2lkKSk7CisJCWFscGhh ICY9IFBMQU5FX0NPTE9SX0FMUEhBX01BU0s7CisJfSBlbHNlIHsKKwkJYWxwaGEgPSB2YWwgJiBQ TEFORV9DVExfQUxQSEFfTUFTSzsKKwl9CisKKwlmb3VyY2MgPSBza2xfZm9ybWF0X3RvX2ZvdXJj YyhwaXhlbF9mb3JtYXQsCisJCQkJICAgICAgdmFsICYgUExBTkVfQ1RMX09SREVSX1JHQlgsIGFs cGhhKTsKKwlmYi0+Zm9ybWF0ID0gZHJtX2Zvcm1hdF9pbmZvKGZvdXJjYyk7CisKKwl0aWxpbmcg PSB2YWwgJiBQTEFORV9DVExfVElMRURfTUFTSzsKKwlzd2l0Y2ggKHRpbGluZykgeworCWNhc2Ug UExBTkVfQ1RMX1RJTEVEX0xJTkVBUjoKKwkJZmItPm1vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0Rf TElORUFSOworCQlicmVhazsKKwljYXNlIFBMQU5FX0NUTF9USUxFRF9YOgorCQlwbGFuZV9jb25m aWctPnRpbGluZyA9IEk5MTVfVElMSU5HX1g7CisJCWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFU X01PRF9YX1RJTEVEOworCQlicmVhazsKKwljYXNlIFBMQU5FX0NUTF9USUxFRF9ZOgorCQlwbGFu ZV9jb25maWctPnRpbGluZyA9IEk5MTVfVElMSU5HX1k7CisJCWlmICh2YWwgJiBQTEFORV9DVExf UkVOREVSX0RFQ09NUFJFU1NJT05fRU5BQkxFKQorCQkJZmItPm1vZGlmaWVyID0gSU5URUxfR0VO KGRldl9wcml2KSA+PSAxMiA/CisJCQkJSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNf Q0NTIDoKKwkJCQlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M7CisJCWVsc2UgaWYgKHZhbCAm IFBMQU5FX0NUTF9NRURJQV9ERUNPTVBSRVNTSU9OX0VOQUJMRSkKKwkJCWZiLT5tb2RpZmllciA9 IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUzsKKwkJZWxzZQorCQkJZmItPm1v ZGlmaWVyID0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ7CisJCWJyZWFrOworCWNhc2UgUExBTkVf Q1RMX1RJTEVEX1lGOgorCQlpZiAodmFsICYgUExBTkVfQ1RMX1JFTkRFUl9ERUNPTVBSRVNTSU9O X0VOQUJMRSkKKwkJCWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M7 CisJCWVsc2UKKwkJCWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDsKKwkJ YnJlYWs7CisJZGVmYXVsdDoKKwkJTUlTU0lOR19DQVNFKHRpbGluZyk7CisJCWdvdG8gZXJyb3I7 CisJfQorCisJLyoKKwkgKiBEUk1fTU9ERV9ST1RBVEVfIGlzIGNvdW50ZXIgY2xvY2t3aXNlIHRv IHN0YXkgY29tcGF0aWJsZSB3aXRoIFhyYW5kcgorCSAqIHdoaWxlIGk5MTUgSFcgcm90YXRpb24g aXMgY2xvY2t3aXNlLCB0aGF0cyB3aHkgdGhpcyBzd2FwcGluZy4KKwkgKi8KKwlzd2l0Y2ggKHZh bCAmIFBMQU5FX0NUTF9ST1RBVEVfTUFTSykgeworCWNhc2UgUExBTkVfQ1RMX1JPVEFURV8wOgor CQlwbGFuZV9jb25maWctPnJvdGF0aW9uID0gRFJNX01PREVfUk9UQVRFXzA7CisJCWJyZWFrOwor CWNhc2UgUExBTkVfQ1RMX1JPVEFURV85MDoKKwkJcGxhbmVfY29uZmlnLT5yb3RhdGlvbiA9IERS TV9NT0RFX1JPVEFURV8yNzA7CisJCWJyZWFrOworCWNhc2UgUExBTkVfQ1RMX1JPVEFURV8xODA6 CisJCXBsYW5lX2NvbmZpZy0+cm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfMTgwOworCQlicmVh azsKKwljYXNlIFBMQU5FX0NUTF9ST1RBVEVfMjcwOgorCQlwbGFuZV9jb25maWctPnJvdGF0aW9u ID0gRFJNX01PREVfUk9UQVRFXzkwOworCQlicmVhazsKKwl9CisKKwlpZiAoSU5URUxfR0VOKGRl dl9wcml2KSA+PSAxMCAmJgorCSAgICB2YWwgJiBQTEFORV9DVExfRkxJUF9IT1JJWk9OVEFMKQor CQlwbGFuZV9jb25maWctPnJvdGF0aW9uIHw9IERSTV9NT0RFX1JFRkxFQ1RfWDsKKworCS8qIDkw LzI3MCBkZWdyZWUgcm90YXRpb24gd291bGQgcmVxdWlyZSBleHRyYSB3b3JrICovCisJaWYgKGRy bV9yb3RhdGlvbl85MF9vcl8yNzAocGxhbmVfY29uZmlnLT5yb3RhdGlvbikpCisJCWdvdG8gZXJy b3I7CisKKwliYXNlID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgUExBTkVfU1VSRihwaXBlLCBw bGFuZV9pZCkpICYgMHhmZmZmZjAwMDsKKwlwbGFuZV9jb25maWctPmJhc2UgPSBiYXNlOworCisJ b2Zmc2V0ID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgUExBTkVfT0ZGU0VUKHBpcGUsIHBsYW5l X2lkKSk7CisKKwl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQTEFORV9TSVpFKHBpcGUs IHBsYW5lX2lkKSk7CisJZmItPmhlaWdodCA9ICgodmFsID4+IDE2KSAmIDB4ZmZmZikgKyAxOwor CWZiLT53aWR0aCA9ICgodmFsID4+IDApICYgMHhmZmZmKSArIDE7CisKKwl2YWwgPSBpbnRlbF9k ZV9yZWFkKGRldl9wcml2LCBQTEFORV9TVFJJREUocGlwZSwgcGxhbmVfaWQpKTsKKwlzdHJpZGVf bXVsdCA9IHNrbF9wbGFuZV9zdHJpZGVfbXVsdChmYiwgMCwgRFJNX01PREVfUk9UQVRFXzApOwor CWZiLT5waXRjaGVzWzBdID0gKHZhbCAmIDB4M2ZmKSAqIHN0cmlkZV9tdWx0OworCisJYWxpZ25l ZF9oZWlnaHQgPSBpbnRlbF9mYl9hbGlnbl9oZWlnaHQoZmIsIDAsIGZiLT5oZWlnaHQpOworCisJ cGxhbmVfY29uZmlnLT5zaXplID0gZmItPnBpdGNoZXNbMF0gKiBhbGlnbmVkX2hlaWdodDsKKwor CWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkgICAgIiVzLyVzIHdpdGggZmI6IHNpemU9 JWR4JWRAJWQsIG9mZnNldD0leCwgcGl0Y2ggJWQsIHNpemUgMHgleFxuIiwKKwkJICAgIGNydGMt PmJhc2UubmFtZSwgcGxhbmUtPmJhc2UubmFtZSwgZmItPndpZHRoLCBmYi0+aGVpZ2h0LAorCQkg ICAgZmItPmZvcm1hdC0+Y3BwWzBdICogOCwgYmFzZSwgZmItPnBpdGNoZXNbMF0sCisJCSAgICBw bGFuZV9jb25maWctPnNpemUpOworCisJcGxhbmVfY29uZmlnLT5mYiA9IGludGVsX2ZiOworCXJl dHVybjsKKworZXJyb3I6CisJa2ZyZWUoaW50ZWxfZmIpOworfQorCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L3NrbF91bml2ZXJzYWxfcGxhbmUuaCBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvc2tsX3VuaXZlcnNhbF9wbGFuZS5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNzBlYjUwMTBjZDI4Ci0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5lLmgKQEAg LTAsMCArMSwzMyBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVCAqLworLyoKKyAq IENvcHlyaWdodCDCqSAyMDIwIEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBfU0tM X1VOSVZFUlNBTF9QTEFORV9IXworI2RlZmluZSBfU0tMX1VOSVZFUlNBTF9QTEFORV9IXworCisj aW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGRybV9mcmFtZWJ1ZmZlcjsKK3N0cnVj dCBkcm1faTkxNV9wcml2YXRlOworc3RydWN0IGludGVsX2NydGM7CitzdHJ1Y3QgaW50ZWxfaW5p dGlhbF9wbGFuZV9jb25maWc7CitzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGU7CisKK2VudW0gcGlw ZTsKK2VudW0gcGxhbmVfaWQ7CisKK3N0cnVjdCBpbnRlbF9wbGFuZSAqCitza2xfdW5pdmVyc2Fs X3BsYW5lX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgICBl bnVtIHBpcGUgcGlwZSwgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCk7CisKK3ZvaWQgc2tsX2dldF9p bml0aWFsX3BsYW5lX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKKwkJCQkgIHN0cnVj dCBpbnRlbF9pbml0aWFsX3BsYW5lX2NvbmZpZyAqcGxhbmVfY29uZmlnKTsKKworaW50IHNrbF9m b3JtYXRfdG9fZm91cmNjKGludCBmb3JtYXQsIGJvb2wgcmdiX29yZGVyLCBib29sIGFscGhhKTsK KworaW50IHNrbF9jY3NfdG9fbWFpbl9wbGFuZShjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiwgaW50IGNjc19wbGFuZSk7CitpbnQgc2tsX2NhbGNfbWFpbl9zdXJmYWNlX29mZnNldChj b25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAorCQkJCSBpbnQgKngs IGludCAqeSwgdTMyICpvZmZzZXQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCmlu ZGV4IDk5MmZjZThiOGQxMy4uZGE4ZjU4N2YyOTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMK QEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJkaXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMu aCIKICNpbmNsdWRlICJkaXNwbGF5L2ludGVsX2ZiYy5oIgogI2luY2x1ZGUgImRpc3BsYXkvaW50 ZWxfc3ByaXRlLmgiCisjaW5jbHVkZSAiZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5lLmgiCiAK ICNpbmNsdWRlICJndC9pbnRlbF9sbGMuaCIKIAotLSAKMi4yNy4wCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK