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 C8A44C433E6 for ; Wed, 27 Jan 2021 03:06:05 +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 81D3E205F4 for ; Wed, 27 Jan 2021 03:06:05 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 81D3E205F4 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 B9E6B6E301; Wed, 27 Jan 2021 03:06:04 +0000 (UTC) Received: from us-smtp-delivery-44.mimecast.com (us-smtp-delivery-44.mimecast.com [205.139.111.44]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4EB786E301 for ; Wed, 27 Jan 2021 03:06:03 +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-246-wuYgfCxXMn6y-NxAV3BYJg-1; Tue, 26 Jan 2021 22:05:58 -0500 X-MC-Unique: wuYgfCxXMn6y-NxAV3BYJg-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id A60A8425CD; Wed, 27 Jan 2021 03:05:57 +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 C129B60C62; Wed, 27 Jan 2021 03:05:55 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Wed, 27 Jan 2021 13:05:41 +1000 Message-Id: <20210127030548.29296-4-airlied@gmail.com> In-Reply-To: <20210127030548.29296-1-airlied@gmail.com> References: <20210127030548.29296-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=airlied@gmail.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: gmail.com Subject: [Intel-gfx] [PATCH 03/10] drm/i915: migrate skl planes code new file (v5) 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 Y2sKdjQ6IGRyb3Agd3JvbmcgbmV3IGluY2x1ZGVzIChWaWxsZSkKdjU6IGludGVncmF0ZSB0aGUg Y2NzIGdlbjEyIGNoYW5nZXMKClNpZ25lZC1vZmYtYnk6IERhdmUgQWlybGllIDxhaXJsaWVkQHJl ZGhhdC5jb20+CltKYW5pOiBmaXhlZCB1cCBzcGFyc2Ugd2FybmluZ3MuXQpTaWduZWQtb2ZmLWJ5 OiBKYW5pIE5pa3VsYSA8amFuaS5uaWt1bGFAaW50ZWwuY29tPgpSZXBvcnRlZC1ieToga2VybmVs IHRlc3Qgcm9ib3QgPGxrcEBpbnRlbC5jb20+ClJlcG9ydGVkLWJ5OiBEYW4gQ2FycGVudGVyIDxk YW4uY2FycGVudGVyQG9yYWNsZS5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZp bGUgICAgICAgICAgICAgICAgIHwgICAgMyArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pOXh4X3BsYW5lLmMgICAgIHwgICAgNCAtCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5 L2ljbF9kc2kuYyAgICAgICAgfCAgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfY3J0Yy5jICAgICB8ICAgMTMgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfZGRpLmMgICAgICB8ICAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9kaXNwbGF5LmMgIHwgIDk2NCArLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNw bGF5L2ludGVsX2Rpc3BsYXkuaCAgfCAgIDI3ICstCiAuLi4vZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9kaXNwbGF5X3R5cGVzLmggICAgfCAgIDI3ICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3Bs YXkvaW50ZWxfcHNyLmMgICAgICB8ICAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9zcHJpdGUuYyAgIHwgMTM3NiArLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5oICAgfCAgICA2ICstCiAuLi4vZHJtL2k5MTUvZGlzcGxh eS9za2xfdW5pdmVyc2FsX3BsYW5lLmMgICAgfCAyMzA0ICsrKysrKysrKysrKysrKysrCiAuLi4v ZHJtL2k5MTUvZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5lLmggICAgfCAgIDMzICsKIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgICAgICAgICAgICAgICB8ICAgIDEgKwogMTQgZmls ZXMgY2hhbmdlZCwgMjQyNCBpbnNlcnRpb25zKCspLCAyMzM3IGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvc2tsX3VuaXZlcnNhbF9w bGFuZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9z a2xfdW5pdmVyc2FsX3BsYW5lLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9N YWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IDBlOThjZjJlZWMz MC4uNDBjYmE2ZjA3OTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtMjIzLDcgKzIyMyw4IEBA IGk5MTUteSArPSBcCiAJZGlzcGxheS9pbnRlbF9zcHJpdGUubyBcCiAJZGlzcGxheS9pbnRlbF90 Yy5vIFwKIAlkaXNwbGF5L2ludGVsX3ZnYS5vIFwKLQlkaXNwbGF5L2k5eHhfcGxhbmUubworCWRp c3BsYXkvaTl4eF9wbGFuZS5vIFwKKwlkaXNwbGF5L3NrbF91bml2ZXJzYWxfcGxhbmUubwogaTkx NS0kKENPTkZJR19BQ1BJKSArPSBcCiAJZGlzcGxheS9pbnRlbF9hY3BpLm8gXAogCWRpc3BsYXkv aW50ZWxfb3ByZWdpb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pOXh4X3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2k5eHhfcGxhbmUu YwppbmRleCBiNzg5ODVjODU1YTUuLjZjNTY4MDc5ZjQ5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pOXh4X3BsYW5lLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9pOXh4X3BsYW5lLmMKQEAgLTU3OCwxMCArNTc4LDYgQEAgaW50ZWxfcHJpbWFy eV9wbGFuZV9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBp cGUgcGlwZSkKIAlpbnQgbnVtX2Zvcm1hdHM7CiAJaW50IHJldCwgenBvczsKIAotCWlmIChJTlRF TF9HRU4oZGV2X3ByaXYpID49IDkpCi0JCXJldHVybiBza2xfdW5pdmVyc2FsX3BsYW5lX2NyZWF0 ZShkZXZfcHJpdiwgcGlwZSwKLQkJCQkJCSAgUExBTkVfUFJJTUFSWSk7Ci0KIAlwbGFuZSA9IGlu dGVsX3BsYW5lX2FsbG9jKCk7CiAJaWYgKElTX0VSUihwbGFuZSkpCiAJCXJldHVybiBwbGFuZTsK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaWNsX2RzaS5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pY2xfZHNpLmMKaW5kZXggOWQyNDVhNjg5MzIzLi45 ZWVlYzZmYWRlYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaWNs X2RzaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaWNsX2RzaS5jCkBAIC0z NSw2ICszNSw3IEBACiAjaW5jbHVkZSAiaW50ZWxfZHNpLmgiCiAjaW5jbHVkZSAiaW50ZWxfcGFu ZWwuaCIKICNpbmNsdWRlICJpbnRlbF92ZHNjLmgiCisjaW5jbHVkZSAic2tsX3VuaXZlcnNhbF9w bGFuZS5oIgogCiBzdGF0aWMgaW50IGhlYWRlcl9jcmVkaXRzX2F2YWlsYWJsZShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkJICAgIGVudW0gdHJhbnNjb2RlciBkc2lfdHJh bnMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2NydGMu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3J0Yy5jCmluZGV4IDU3YjBh M2ViZTkwOC4uZWI0Nzg3MTJjMzgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2NydGMuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImludGVsX3BpcGVfY3JjLmgi CiAjaW5jbHVkZSAiaW50ZWxfc3ByaXRlLmgiCiAjaW5jbHVkZSAiaTl4eF9wbGFuZS5oIgorI2lu Y2x1ZGUgInNrbF91bml2ZXJzYWxfcGxhbmUuaCIKIAogc3RhdGljIHZvaWQgYXNzZXJ0X3ZibGFu a19kaXNhYmxlZChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CkBAIC0yNDMsNyArMjQ0LDExIEBA IGludCBpbnRlbF9jcnRjX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBl bnVtIHBpcGUgcGlwZSkKIAljcnRjLT5waXBlID0gcGlwZTsKIAljcnRjLT5udW1fc2NhbGVycyA9 IFJVTlRJTUVfSU5GTyhkZXZfcHJpdiktPm51bV9zY2FsZXJzW3BpcGVdOwogCi0JcHJpbWFyeSA9 IGludGVsX3ByaW1hcnlfcGxhbmVfY3JlYXRlKGRldl9wcml2LCBwaXBlKTsKKwlpZiAoSU5URUxf R0VOKGRldl9wcml2KSA+PSA5KQorCQlwcmltYXJ5ID0gc2tsX3VuaXZlcnNhbF9wbGFuZV9jcmVh dGUoZGV2X3ByaXYsIHBpcGUsCisJCQkJCQkgICAgIFBMQU5FX1BSSU1BUlkpOworCWVsc2UKKwkJ cHJpbWFyeSA9IGludGVsX3ByaW1hcnlfcGxhbmVfY3JlYXRlKGRldl9wcml2LCBwaXBlKTsKIAlp ZiAoSVNfRVJSKHByaW1hcnkpKSB7CiAJCXJldCA9IFBUUl9FUlIocHJpbWFyeSk7CiAJCWdvdG8g ZmFpbDsKQEAgLTI1Myw3ICsyNTgsMTEgQEAgaW50IGludGVsX2NydGNfaW5pdChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlKQogCWZvcl9lYWNoX3Nwcml0 ZShkZXZfcHJpdiwgcGlwZSwgc3ByaXRlKSB7CiAJCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmU7 CiAKLQkJcGxhbmUgPSBpbnRlbF9zcHJpdGVfcGxhbmVfY3JlYXRlKGRldl9wcml2LCBwaXBlLCBz cHJpdGUpOworCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KQorCQkJcGxhbmUgPSBza2xf dW5pdmVyc2FsX3BsYW5lX2NyZWF0ZShkZXZfcHJpdiwgcGlwZSwKKwkJCQkJCQkgICBQTEFORV9T UFJJVEUwICsgc3ByaXRlKTsKKwkJZWxzZQorCQkJcGxhbmUgPSBpbnRlbF9zcHJpdGVfcGxhbmVf Y3JlYXRlKGRldl9wcml2LCBwaXBlLCBzcHJpdGUpOwogCQlpZiAoSVNfRVJSKHBsYW5lKSkgewog CQkJcmV0ID0gUFRSX0VSUihwbGFuZSk7CiAJCQlnb3RvIGZhaWw7CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RkaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9pbnRlbF9kZGkuYwppbmRleCBiNmNkZTY0NjM3MWYuLjRjMDQ1YjEyMzFkMyAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kZGkuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RkaS5jCkBAIC01NCw2ICs1NCw3 IEBACiAjaW5jbHVkZSAiaW50ZWxfdGMuaCIKICNpbmNsdWRlICJpbnRlbF92ZHNjLmgiCiAjaW5j bHVkZSAiaW50ZWxfdnJyLmgiCisjaW5jbHVkZSAic2tsX3VuaXZlcnNhbF9wbGFuZS5oIgogCiBz dGF0aWMgY29uc3QgdTggaW5kZXhfdG9fZHBfc2lnbmFsX2xldmVsc1tdID0gewogCVswXSA9IERQ X1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMCB8IERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzAs CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXku YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCmluZGV4IGIy YjY4NmY2ZjQxOS4uYjczOGM4ZDU4ZmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNw bGF5L2ludGVsX2Rpc3BsYXkuYwpAQCAtOTQsNiArOTQsNyBAQAogI2luY2x1ZGUgImludGVsX3Rj LmgiCiAjaW5jbHVkZSAiaW50ZWxfdmdhLmgiCiAjaW5jbHVkZSAiaTl4eF9wbGFuZS5oIgorI2lu Y2x1ZGUgInNrbF91bml2ZXJzYWxfcGxhbmUuaCIKIAogc3RhdGljIHZvaWQgaTl4eF9jcnRjX2Ns b2NrX2dldChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKIAkJCQlzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqcGlwZV9jb25maWcpOwpAQCAtMTE2LDcgKzExNyw2IEBAIHN0YXRpYyB2b2lkIHZsdl9w cmVwYXJlX3BsbChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKIAkJCSAgICBjb25zdCBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpOwogc3RhdGljIHZvaWQgY2h2X3ByZXBhcmVf cGxsKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAogCQkJICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpwaXBlX2NvbmZpZyk7Ci1zdGF0aWMgdm9pZCBza2xfcGZpdF9lbmFibGUoY29u c3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOwogc3RhdGljIHZvaWQgaWxr X3BmaXRfZW5hYmxlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsK IHN0YXRpYyB2b2lkIGludGVsX21vZGVzZXRfc2V0dXBfaHdfc3RhdGUoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKIAkJCQkJIHN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCAqY3R4KTsKQEAg LTEwODIsMzIgKzEwODIsNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGludGVsX3RpbGVfc2l6ZShj b25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJcmV0dXJuIElTX0dFTihk ZXZfcHJpdiwgMikgPyAyMDQ4IDogNDA5NjsKIH0KIAotc3RhdGljIGJvb2wgaXNfY2NzX3BsYW5l KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUpCi17Ci0JaWYgKCFp c19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJu IHBsYW5lID49IGZiLT5mb3JtYXQtPm51bV9wbGFuZXMgLyAyOwotfQotCi1zdGF0aWMgYm9vbCBp c19nZW4xMl9jY3NfbW9kaWZpZXIodTY0IG1vZGlmaWVyKQotewotCXJldHVybiBtb2RpZmllciA9 PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19DQ1MgfHwKLQkgICAgICAgbW9kaWZp ZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTX0NDIHx8Ci0JICAgICAg IG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUzsKLX0KLQot c3RhdGljIGJvb2wgaXNfZ2VuMTJfY2NzX3BsYW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLCBpbnQgcGxhbmUpCi17Ci0JcmV0dXJuIGlzX2dlbjEyX2Njc19tb2RpZmllcihmYi0+ bW9kaWZpZXIpICYmIGlzX2Njc19wbGFuZShmYiwgcGxhbmUpOwotfQotCi1zdGF0aWMgYm9vbCBp c19nZW4xMl9jY3NfY2NfcGxhbmUoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGlu dCBwbGFuZSkKLXsKLQlyZXR1cm4gZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJ TEVEX0dFTjEyX1JDX0NDU19DQyAmJgotCSAgICAgICBwbGFuZSA9PSAyOwotfQotCiBzdGF0aWMg Ym9vbCBpc19hdXhfcGxhbmUoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBw bGFuZSkKIHsKIAlpZiAoaXNfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikpCkBAIC0xMTE2LDM4 ICsxMDkwLDYgQEAgc3RhdGljIGJvb2wgaXNfYXV4X3BsYW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiLCBpbnQgcGxhbmUpCiAJcmV0dXJuIHBsYW5lID09IDE7CiB9CiAKLXN0YXRp YyBpbnQgbWFpbl90b19jY3NfcGxhbmUoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIs IGludCBtYWluX3BsYW5lKQotewotCWRybV9XQVJOX09OKGZiLT5kZXYsICFpc19jY3NfbW9kaWZp ZXIoZmItPm1vZGlmaWVyKSB8fAotCQkgICAgKG1haW5fcGxhbmUgJiYgbWFpbl9wbGFuZSA+PSBm Yi0+Zm9ybWF0LT5udW1fcGxhbmVzIC8gMikpOwotCi0JcmV0dXJuIGZiLT5mb3JtYXQtPm51bV9w bGFuZXMgLyAyICsgbWFpbl9wbGFuZTsKLX0KLQotc3RhdGljIGludCBjY3NfdG9fbWFpbl9wbGFu ZShjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNjc19wbGFuZSkKLXsKLQlk cm1fV0FSTl9PTihmYi0+ZGV2LCAhaXNfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikgfHwKLQkJ ICAgIGNjc19wbGFuZSA8IGZiLT5mb3JtYXQtPm51bV9wbGFuZXMgLyAyKTsKLQotCWlmIChpc19n ZW4xMl9jY3NfY2NfcGxhbmUoZmIsIGNjc19wbGFuZSkpCi0JCXJldHVybiAwOwotCi0JcmV0dXJu IGNjc19wbGFuZSAtIGZiLT5mb3JtYXQtPm51bV9wbGFuZXMgLyAyOwotfQotCi1pbnQgaW50ZWxf bWFpbl90b19hdXhfcGxhbmUoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBt YWluX3BsYW5lKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShm Yi0+ZGV2KTsKLQotCWlmIChpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSkKLQkJcmV0dXJu IG1haW5fdG9fY2NzX3BsYW5lKGZiLCBtYWluX3BsYW5lKTsKLQllbHNlIGlmIChJTlRFTF9HRU4o aTkxNSkgPCAxMSAmJgotCQkgaW50ZWxfZm9ybWF0X2luZm9faXNfeXV2X3NlbWlwbGFuYXIoZmIt PmZvcm1hdCwgZmItPm1vZGlmaWVyKSkKLQkJcmV0dXJuIDE7Ci0JZWxzZQotCQlyZXR1cm4gMDsK LX0KLQogYm9vbAogaW50ZWxfZm9ybWF0X2luZm9faXNfeXV2X3NlbWlwbGFuYXIoY29uc3Qgc3Ry dWN0IGRybV9mb3JtYXRfaW5mbyAqaW5mbywKIAkJCQkgICAgdTY0IG1vZGlmaWVyKQpAQCAtMTE2 Myw3ICsxMTA1LDcgQEAgc3RhdGljIGJvb2wgaXNfc2VtaXBsYW5hcl91dl9wbGFuZShjb25zdCBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKIAkgICAgICAgY29sb3JfcGxhbmUgPT0gMTsKIH0K IAotc3RhdGljIHVuc2lnbmVkIGludAordW5zaWduZWQgaW50CiBpbnRlbF90aWxlX3dpZHRoX2J5 dGVzKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUpCiB7 CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShmYi0+ZGV2KTsK QEAgLTEyMTcsNyArMTE1OSw3IEBAIGludGVsX3RpbGVfd2lkdGhfYnl0ZXMoY29uc3Qgc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjb2xvcl9wbGFuZSkKIAl9CiB9CiAKLXN0YXRpYyB1 bnNpZ25lZCBpbnQKK3Vuc2lnbmVkIGludAogaW50ZWxfdGlsZV9oZWlnaHQoY29uc3Qgc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjb2xvcl9wbGFuZSkKIHsKIAlpZiAoaXNfZ2VuMTJf Y2NzX3BsYW5lKGZiLCBjb2xvcl9wbGFuZSkpCkBAIC0xMzE3LDggKzEyNTksOCBAQCBzdGF0aWMg dW5zaWduZWQgaW50IGludGVsX2xpbmVhcl9hbGlnbm1lbnQoY29uc3Qgc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcgogCQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBp bnRlbF9zdXJmX2FsaWdubWVudChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKLQkJ CQkJIGludCBjb2xvcl9wbGFuZSkKK3Vuc2lnbmVkIGludCBpbnRlbF9zdXJmX2FsaWdubWVudChj b25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCQkgIGludCBjb2xvcl9wbGFuZSkK IHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGZiLT5kZXYp OwogCkBAIC0xNTg4LDEwICsxNTMwLDEwIEBAIHN0YXRpYyB1MzIgaW50ZWxfYWRqdXN0X2FsaWdu ZWRfb2Zmc2V0KGludCAqeCwgaW50ICp5LAogICogQWRqdXN0IHRoZSB0aWxlIG9mZnNldCBieSBt b3ZpbmcgdGhlIGRpZmZlcmVuY2UgaW50bwogICogdGhlIHgveSBvZmZzZXRzLgogICovCi1zdGF0 aWMgdTMyIGludGVsX3BsYW5lX2FkanVzdF9hbGlnbmVkX29mZnNldChpbnQgKngsIGludCAqeSwK LQkJCQkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnN0YXRlLAotCQkJCQkg ICAgIGludCBjb2xvcl9wbGFuZSwKLQkJCQkJICAgICB1MzIgb2xkX29mZnNldCwgdTMyIG5ld19v ZmZzZXQpCit1MzIgaW50ZWxfcGxhbmVfYWRqdXN0X2FsaWduZWRfb2Zmc2V0KGludCAqeCwgaW50 ICp5LAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqc3RhdGUsCisJ CQkJICAgICAgaW50IGNvbG9yX3BsYW5lLAorCQkJCSAgICAgIHUzMiBvbGRfb2Zmc2V0LCB1MzIg bmV3X29mZnNldCkKIHsKIAlyZXR1cm4gaW50ZWxfYWRqdXN0X2FsaWduZWRfb2Zmc2V0KHgsIHks IHN0YXRlLT5ody5mYiwgY29sb3JfcGxhbmUsCiAJCQkJCSAgIHN0YXRlLT5ody5yb3RhdGlvbiwK QEAgLTE4OTAsNyArMTgzMiw3IEBAIGJvb2wgaXNfY2NzX21vZGlmaWVyKHU2NCBtb2RpZmllcikK IAogc3RhdGljIGludCBnZW4xMl9jY3NfYXV4X3N0cmlkZShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiwgaW50IGNjc19wbGFuZSkKIHsKLQlyZXR1cm4gRElWX1JPVU5EX1VQKGZiLT5waXRjaGVz W2Njc190b19tYWluX3BsYW5lKGZiLCBjY3NfcGxhbmUpXSwKKwlyZXR1cm4gRElWX1JPVU5EX1VQ KGZiLT5waXRjaGVzW3NrbF9jY3NfdG9fbWFpbl9wbGFuZShmYiwgY2NzX3BsYW5lKV0sCiAJCQkg ICAgNTEyKSAqIDY0OwogfQogCkBAIC0yMDQ4LDcgKzE5OTAsNyBAQCBzdGF0aWMgYm9vbCBpbnRl bF9wbGFuZV9uZWVkc19yZW1hcChjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlKQogCXJldHVybiBzdHJpZGUgPiBtYXhfc3RyaWRlOwogfQogCi1zdGF0aWMgdm9pZAor dm9pZAogaW50ZWxfZmJfcGxhbmVfZ2V0X3N1YnNhbXBsaW5nKGludCAqaHN1YiwgaW50ICp2c3Vi LAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAogCQkJICAgICAg IGludCBjb2xvcl9wbGFuZSkKQEAgLTIwNzMsNyArMjAxNSw3IEBAIGludGVsX2ZiX3BsYW5lX2dl dF9zdWJzYW1wbGluZyhpbnQgKmhzdWIsIGludCAqdnN1YiwKIAkJcmV0dXJuOwogCX0KIAotCW1h aW5fcGxhbmUgPSBjY3NfdG9fbWFpbl9wbGFuZShmYiwgY29sb3JfcGxhbmUpOworCW1haW5fcGxh bmUgPSBza2xfY2NzX3RvX21haW5fcGxhbmUoZmIsIGNvbG9yX3BsYW5lKTsKIAkqaHN1YiA9IGRy bV9mb3JtYXRfaW5mb19ibG9ja193aWR0aChmYi0+Zm9ybWF0LCBjb2xvcl9wbGFuZSkgLwogCQlk cm1fZm9ybWF0X2luZm9fYmxvY2tfd2lkdGgoZmItPmZvcm1hdCwgbWFpbl9wbGFuZSk7CiAKQEAg LTIxMTMsNyArMjA1NSw3IEBAIGludGVsX2ZiX2NoZWNrX2Njc194eShzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICpmYiwgaW50IGNjc19wbGFuZSwgaW50IHgsIGludCB5KQogCWNjc194ID0gKHggKiBo c3ViKSAlIHRpbGVfd2lkdGg7CiAJY2NzX3kgPSAoeSAqIHZzdWIpICUgdGlsZV9oZWlnaHQ7CiAK LQltYWluX3BsYW5lID0gY2NzX3RvX21haW5fcGxhbmUoZmIsIGNjc19wbGFuZSk7CisJbWFpbl9w bGFuZSA9IHNrbF9jY3NfdG9fbWFpbl9wbGFuZShmYiwgY2NzX3BsYW5lKTsKIAltYWluX3ggPSBp bnRlbF9mYi0+bm9ybWFsW21haW5fcGxhbmVdLnggJSB0aWxlX3dpZHRoOwogCW1haW5feSA9IGlu dGVsX2ZiLT5ub3JtYWxbbWFpbl9wbGFuZV0ueSAlIHRpbGVfaGVpZ2h0OwogCkBAIC0yMTM5LDcg KzIwODEsNyBAQCBzdGF0aWMgdm9pZAogaW50ZWxfZmJfcGxhbmVfZGltcyhpbnQgKncsIGludCAq aCwgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjb2xvcl9wbGFuZSkKIHsKIAlpbnQg bWFpbl9wbGFuZSA9IGlzX2Njc19wbGFuZShmYiwgY29sb3JfcGxhbmUpID8KLQkJCSBjY3NfdG9f bWFpbl9wbGFuZShmYiwgY29sb3JfcGxhbmUpIDogMDsKKwkJCSBza2xfY2NzX3RvX21haW5fcGxh bmUoZmIsIGNvbG9yX3BsYW5lKSA6IDA7CiAJaW50IG1haW5faHN1YiwgbWFpbl92c3ViOwogCWlu dCBoc3ViLCB2c3ViOwogCkBAIC0yNTI2LDczICsyNDY4LDYgQEAgc3RhdGljIGludCBpOXh4X2Zv cm1hdF90b19mb3VyY2MoaW50IGZvcm1hdCkKIAl9CiB9CiAKLWludCBza2xfZm9ybWF0X3RvX2Zv dXJjYyhpbnQgZm9ybWF0LCBib29sIHJnYl9vcmRlciwgYm9vbCBhbHBoYSkKLXsKLQlzd2l0Y2gg KGZvcm1hdCkgewotCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9SR0JfNTY1OgotCQlyZXR1cm4gRFJN X0ZPUk1BVF9SR0I1NjU7Ci0JY2FzZSBQTEFORV9DVExfRk9STUFUX05WMTI6Ci0JCXJldHVybiBE Uk1fRk9STUFUX05WMTI7Ci0JY2FzZSBQTEFORV9DVExfRk9STUFUX1hZVVY6Ci0JCXJldHVybiBE Uk1fRk9STUFUX1hZVVY4ODg4OwotCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9QMDEwOgotCQlyZXR1 cm4gRFJNX0ZPUk1BVF9QMDEwOwotCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9QMDEyOgotCQlyZXR1 cm4gRFJNX0ZPUk1BVF9QMDEyOwotCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9QMDE2OgotCQlyZXR1 cm4gRFJNX0ZPUk1BVF9QMDE2OwotCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9ZMjEwOgotCQlyZXR1 cm4gRFJNX0ZPUk1BVF9ZMjEwOwotCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9ZMjEyOgotCQlyZXR1 cm4gRFJNX0ZPUk1BVF9ZMjEyOwotCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9ZMjE2OgotCQlyZXR1 cm4gRFJNX0ZPUk1BVF9ZMjE2OwotCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9ZNDEwOgotCQlyZXR1 cm4gRFJNX0ZPUk1BVF9YVllVMjEwMTAxMDsKLQljYXNlIFBMQU5FX0NUTF9GT1JNQVRfWTQxMjoK LQkJcmV0dXJuIERSTV9GT1JNQVRfWFZZVTEyXzE2MTYxNjE2OwotCWNhc2UgUExBTkVfQ1RMX0ZP Uk1BVF9ZNDE2OgotCQlyZXR1cm4gRFJNX0ZPUk1BVF9YVllVMTYxNjE2MTY7Ci0JZGVmYXVsdDoK LQljYXNlIFBMQU5FX0NUTF9GT1JNQVRfWFJHQl84ODg4OgotCQlpZiAocmdiX29yZGVyKSB7Ci0J CQlpZiAoYWxwaGEpCi0JCQkJcmV0dXJuIERSTV9GT1JNQVRfQUJHUjg4ODg7Ci0JCQllbHNlCi0J CQkJcmV0dXJuIERSTV9GT1JNQVRfWEJHUjg4ODg7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoYWxwaGEp Ci0JCQkJcmV0dXJuIERSTV9GT1JNQVRfQVJHQjg4ODg7Ci0JCQllbHNlCi0JCQkJcmV0dXJuIERS TV9GT1JNQVRfWFJHQjg4ODg7Ci0JCX0KLQljYXNlIFBMQU5FX0NUTF9GT1JNQVRfWFJHQl8yMTAx MDEwOgotCQlpZiAocmdiX29yZGVyKSB7Ci0JCQlpZiAoYWxwaGEpCi0JCQkJcmV0dXJuIERSTV9G T1JNQVRfQUJHUjIxMDEwMTA7Ci0JCQllbHNlCi0JCQkJcmV0dXJuIERSTV9GT1JNQVRfWEJHUjIx MDEwMTA7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoYWxwaGEpCi0JCQkJcmV0dXJuIERSTV9GT1JNQVRf QVJHQjIxMDEwMTA7Ci0JCQllbHNlCi0JCQkJcmV0dXJuIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA7 Ci0JCX0KLQljYXNlIFBMQU5FX0NUTF9GT1JNQVRfWFJHQl8xNjE2MTYxNkY6Ci0JCWlmIChyZ2Jf b3JkZXIpIHsKLQkJCWlmIChhbHBoYSkKLQkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9BQkdSMTYxNjE2 MTZGOwotCQkJZWxzZQotCQkJCXJldHVybiBEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkY7Ci0JCX0g ZWxzZSB7Ci0JCQlpZiAoYWxwaGEpCi0JCQkJcmV0dXJuIERSTV9GT1JNQVRfQVJHQjE2MTYxNjE2 RjsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGOwotCQl9Ci0J fQotfQotCiBzdGF0aWMgc3RydWN0IGk5MTVfdm1hICoKIGluaXRpYWxfcGxhbmVfdm1hKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1LAogCQkgIHN0cnVjdCBpbnRlbF9pbml0aWFsX3BsYW5l X2NvbmZpZyAqcGxhbmVfY29uZmlnKQpAQCAtMjg5NywzNjMgKzI3NzIsNiBAQCBpbnRlbF9maW5k X2luaXRpYWxfcGxhbmVfb2JqKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLAogCQkgICZ0 b19pbnRlbF9mcm9udGJ1ZmZlcihmYiktPmJpdHMpOwogfQogCi0KLXN0YXRpYyBib29sCi1za2xf Y2hlY2tfbWFpbl9jY3NfY29vcmRpbmF0ZXMoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFu ZV9zdGF0ZSwKLQkJCSAgICAgICBpbnQgbWFpbl94LCBpbnQgbWFpbl95LCB1MzIgbWFpbl9vZmZz ZXQsCi0JCQkgICAgICAgaW50IGNjc19wbGFuZSkKLXsKLQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKLQlpbnQgYXV4X3ggPSBwbGFuZV9zdGF0 ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5lXS54OwotCWludCBhdXhfeSA9IHBsYW5lX3N0YXRlLT5j b2xvcl9wbGFuZVtjY3NfcGxhbmVdLnk7Ci0JdTMyIGF1eF9vZmZzZXQgPSBwbGFuZV9zdGF0ZS0+ Y29sb3JfcGxhbmVbY2NzX3BsYW5lXS5vZmZzZXQ7Ci0JdTMyIGFsaWdubWVudCA9IGludGVsX3N1 cmZfYWxpZ25tZW50KGZiLCBjY3NfcGxhbmUpOwotCWludCBoc3ViOwotCWludCB2c3ViOwotCi0J aW50ZWxfZmJfcGxhbmVfZ2V0X3N1YnNhbXBsaW5nKCZoc3ViLCAmdnN1YiwgZmIsIGNjc19wbGFu ZSk7Ci0Jd2hpbGUgKGF1eF9vZmZzZXQgPj0gbWFpbl9vZmZzZXQgJiYgYXV4X3kgPD0gbWFpbl95 KSB7Ci0JCWludCB4LCB5OwotCi0JCWlmIChhdXhfeCA9PSBtYWluX3ggJiYgYXV4X3kgPT0gbWFp bl95KQotCQkJYnJlYWs7Ci0KLQkJaWYgKGF1eF9vZmZzZXQgPT0gMCkKLQkJCWJyZWFrOwotCi0J CXggPSBhdXhfeCAvIGhzdWI7Ci0JCXkgPSBhdXhfeSAvIHZzdWI7Ci0JCWF1eF9vZmZzZXQgPSBp bnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoJngsICZ5LAotCQkJCQkJCSAgICAgICBw bGFuZV9zdGF0ZSwKLQkJCQkJCQkgICAgICAgY2NzX3BsYW5lLAotCQkJCQkJCSAgICAgICBhdXhf b2Zmc2V0LAotCQkJCQkJCSAgICAgICBhdXhfb2Zmc2V0IC0KLQkJCQkJCQkJYWxpZ25tZW50KTsK LQkJYXV4X3ggPSB4ICogaHN1YiArIGF1eF94ICUgaHN1YjsKLQkJYXV4X3kgPSB5ICogdnN1YiAr IGF1eF95ICUgdnN1YjsKLQl9Ci0KLQlpZiAoYXV4X3ggIT0gbWFpbl94IHx8IGF1eF95ICE9IG1h aW5feSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19w bGFuZV0ub2Zmc2V0ID0gYXV4X29mZnNldDsKLQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY2Nz X3BsYW5lXS54ID0gYXV4X3g7Ci0JcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFuZV0u eSA9IGF1eF95OwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLXVuc2lnbmVkIGludAotaW50ZWxfcGxh bmVfZmVuY2VfeV9vZmZzZXQoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSkKLXsKLQlpbnQgeCA9IDAsIHkgPSAwOwotCi0JaW50ZWxfcGxhbmVfYWRqdXN0X2FsaWdu ZWRfb2Zmc2V0KCZ4LCAmeSwgcGxhbmVfc3RhdGUsIDAsCi0JCQkJCSAgcGxhbmVfc3RhdGUtPmNv bG9yX3BsYW5lWzBdLm9mZnNldCwgMCk7Ci0KLQlyZXR1cm4geTsKLX0KLQotc3RhdGljIGludCBp bnRlbF9wbGFuZV9taW5fd2lkdGgoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKLQkJCQkgY29u c3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCi0JCQkJIGludCBjb2xvcl9wbGFuZSwKLQkJ CQkgdW5zaWduZWQgaW50IHJvdGF0aW9uKQotewotCWlmIChwbGFuZS0+bWluX3dpZHRoKQotCQly ZXR1cm4gcGxhbmUtPm1pbl93aWR0aChmYiwgY29sb3JfcGxhbmUsIHJvdGF0aW9uKTsKLQllbHNl Ci0JCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IGludGVsX3BsYW5lX21heF93aWR0aChzdHJ1 Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAotCQkJCSBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiwKLQkJCQkgaW50IGNvbG9yX3BsYW5lLAotCQkJCSB1bnNpZ25lZCBpbnQgcm90YXRpb24p Ci17Ci0JaWYgKHBsYW5lLT5tYXhfd2lkdGgpCi0JCXJldHVybiBwbGFuZS0+bWF4X3dpZHRoKGZi LCBjb2xvcl9wbGFuZSwgcm90YXRpb24pOwotCWVsc2UKLQkJcmV0dXJuIElOVF9NQVg7Ci19Ci0K LXN0YXRpYyBpbnQgaW50ZWxfcGxhbmVfbWF4X2hlaWdodChzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBs YW5lLAotCQkJCSAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCi0JCQkJICBpbnQg Y29sb3JfcGxhbmUsCi0JCQkJICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCi17Ci0JaWYgKHBsYW5l LT5tYXhfaGVpZ2h0KQotCQlyZXR1cm4gcGxhbmUtPm1heF9oZWlnaHQoZmIsIGNvbG9yX3BsYW5l LCByb3RhdGlvbik7Ci0JZWxzZQotCQlyZXR1cm4gSU5UX01BWDsKLX0KLQotaW50IHNrbF9jYWxj X21haW5fc3VyZmFjZV9vZmZzZXQoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFu ZV9zdGF0ZSwKLQkJCQkgaW50ICp4LCBpbnQgKnksIHUzMiAqb2Zmc2V0KQotewotCXN0cnVjdCBp bnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFu ZSk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+ YmFzZS5kZXYpOwotCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3Rh dGUtPmh3LmZiOwotCWNvbnN0IGludCBhdXhfcGxhbmUgPSBpbnRlbF9tYWluX3RvX2F1eF9wbGFu ZShmYiwgMCk7Ci0JY29uc3QgdTMyIGF1eF9vZmZzZXQgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxh bmVbYXV4X3BsYW5lXS5vZmZzZXQ7Ci0JY29uc3QgdTMyIGFsaWdubWVudCA9IGludGVsX3N1cmZf YWxpZ25tZW50KGZiLCAwKTsKLQljb25zdCBpbnQgdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9z dGF0ZS0+dWFwaS5zcmMpID4+IDE2OwotCi0JaW50ZWxfYWRkX2ZiX29mZnNldHMoeCwgeSwgcGxh bmVfc3RhdGUsIDApOwotCSpvZmZzZXQgPSBpbnRlbF9wbGFuZV9jb21wdXRlX2FsaWduZWRfb2Zm c2V0KHgsIHksIHBsYW5lX3N0YXRlLCAwKTsKLQlpZiAoZHJtX1dBUk5fT04oJmRldl9wcml2LT5k cm0sIGFsaWdubWVudCAmJiAhaXNfcG93ZXJfb2ZfMihhbGlnbm1lbnQpKSkKLQkJcmV0dXJuIC1F SU5WQUw7Ci0KLQkvKgotCSAqIEFVWCBzdXJmYWNlIG9mZnNldCBpcyBzcGVjaWZpZWQgYXMgdGhl IGRpc3RhbmNlIGZyb20gdGhlCi0JICogbWFpbiBzdXJmYWNlIG9mZnNldCwgYW5kIGl0IG11c3Qg YmUgbm9uLW5lZ2F0aXZlLiBNYWtlCi0JICogc3VyZSB0aGF0IGlzIHdoYXQgd2Ugd2lsbCBnZXQu Ci0JICovCi0JaWYgKGF1eF9wbGFuZSAmJiAqb2Zmc2V0ID4gYXV4X29mZnNldCkKLQkJKm9mZnNl dCA9IGludGVsX3BsYW5lX2FkanVzdF9hbGlnbmVkX29mZnNldCh4LCB5LCBwbGFuZV9zdGF0ZSwg MCwKLQkJCQkJCQkgICAgKm9mZnNldCwKLQkJCQkJCQkgICAgYXV4X29mZnNldCAmIH4oYWxpZ25t ZW50IC0gMSkpOwotCi0JLyoKLQkgKiBXaGVuIHVzaW5nIGFuIFgtdGlsZWQgc3VyZmFjZSwgdGhl IHBsYW5lIGJsb3dzIHVwCi0JICogaWYgdGhlIHggb2Zmc2V0ICsgd2lkdGggZXhjZWVkIHRoZSBz dHJpZGUuCi0JICoKLQkgKiBUT0RPOiBsaW5lYXIgYW5kIFktdGlsZWQgc2VlbSBmaW5lLCBZZiB1 bnRlc3RlZCwKLQkgKi8KLQlpZiAoZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9YX1RJ TEVEKSB7Ci0JCWludCBjcHAgPSBmYi0+Zm9ybWF0LT5jcHBbMF07Ci0KLQkJd2hpbGUgKCgqeCAr IHcpICogY3BwID4gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnN0cmlkZSkgewotCQkJaWYg KCpvZmZzZXQgPT0gMCkgewotCQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJCQkg ICAgIlVuYWJsZSB0byBmaW5kIHN1aXRhYmxlIGRpc3BsYXkgc3VyZmFjZSBvZmZzZXQgZHVlIHRv IFgtdGlsaW5nXG4iKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJKm9mZnNldCA9 IGludGVsX3BsYW5lX2FkanVzdF9hbGlnbmVkX29mZnNldCh4LCB5LCBwbGFuZV9zdGF0ZSwgMCwK LQkJCQkJCQkJICAgICpvZmZzZXQsCi0JCQkJCQkJCSAgICAqb2Zmc2V0IC0gYWxpZ25tZW50KTsK LQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNrbF9jaGVja19tYWluX3N1 cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQlzdHJ1Y3Qg aW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPnVhcGkucGxh bmUpOwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUt PmJhc2UuZGV2KTsKLQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0 YXRlLT5ody5mYjsKLQljb25zdCB1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+ aHcucm90YXRpb247Ci0JaW50IHggPSBwbGFuZV9zdGF0ZS0+dWFwaS5zcmMueDEgPj4gMTY7Ci0J aW50IHkgPSBwbGFuZV9zdGF0ZS0+dWFwaS5zcmMueTEgPj4gMTY7Ci0JY29uc3QgaW50IHcgPSBk cm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjKSA+PiAxNjsKLQljb25zdCBpbnQg aCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjKSA+PiAxNjsKLQljb25z dCBpbnQgbWluX3dpZHRoID0gaW50ZWxfcGxhbmVfbWluX3dpZHRoKHBsYW5lLCBmYiwgMCwgcm90 YXRpb24pOwotCWNvbnN0IGludCBtYXhfd2lkdGggPSBpbnRlbF9wbGFuZV9tYXhfd2lkdGgocGxh bmUsIGZiLCAwLCByb3RhdGlvbik7Ci0JY29uc3QgaW50IG1heF9oZWlnaHQgPSBpbnRlbF9wbGFu ZV9tYXhfaGVpZ2h0KHBsYW5lLCBmYiwgMCwgcm90YXRpb24pOwotCWNvbnN0IGludCBhdXhfcGxh bmUgPSBpbnRlbF9tYWluX3RvX2F1eF9wbGFuZShmYiwgMCk7Ci0JY29uc3QgdTMyIGFsaWdubWVu dCA9IGludGVsX3N1cmZfYWxpZ25tZW50KGZiLCAwKTsKLQl1MzIgb2Zmc2V0OwotCWludCByZXQ7 Ci0KLQlpZiAodyA+IG1heF93aWR0aCB8fCB3IDwgbWluX3dpZHRoIHx8IGggPiBtYXhfaGVpZ2h0 KSB7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJICAgICJyZXF1ZXN0ZWQgWS9S R0Igc291cmNlIHNpemUgJWR4JWQgb3V0c2lkZSBsaW1pdHMgKG1pbjogJWR4MSBtYXg6ICVkeCVk KVxuIiwKLQkJCSAgICB3LCBoLCBtaW5fd2lkdGgsIG1heF93aWR0aCwgbWF4X2hlaWdodCk7Ci0J CXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldCA9IHNrbF9jYWxjX21haW5fc3VyZmFjZV9vZmZz ZXQocGxhbmVfc3RhdGUsICZ4LCAmeSwgJm9mZnNldCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJl dDsKLQotCS8qCi0JICogQ0NTIEFVWCBzdXJmYWNlIGRvZXNuJ3QgaGF2ZSBpdHMgb3duIHgveSBv ZmZzZXRzLCB3ZSBtdXN0IG1ha2Ugc3VyZQotCSAqIHRoZXkgbWF0Y2ggd2l0aCB0aGUgbWFpbiBz dXJmYWNlIHgveSBvZmZzZXRzLgotCSAqLwotCWlmIChpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlm aWVyKSkgewotCQl3aGlsZSAoIXNrbF9jaGVja19tYWluX2Njc19jb29yZGluYXRlcyhwbGFuZV9z dGF0ZSwgeCwgeSwKLQkJCQkJCSAgICAgICBvZmZzZXQsIGF1eF9wbGFuZSkpIHsKLQkJCWlmIChv ZmZzZXQgPT0gMCkKLQkJCQlicmVhazsKLQotCQkJb2Zmc2V0ID0gaW50ZWxfcGxhbmVfYWRqdXN0 X2FsaWduZWRfb2Zmc2V0KCZ4LCAmeSwgcGxhbmVfc3RhdGUsIDAsCi0JCQkJCQkJCSAgIG9mZnNl dCwgb2Zmc2V0IC0gYWxpZ25tZW50KTsKLQkJfQotCi0JCWlmICh4ICE9IHBsYW5lX3N0YXRlLT5j b2xvcl9wbGFuZVthdXhfcGxhbmVdLnggfHwKLQkJICAgIHkgIT0gcGxhbmVfc3RhdGUtPmNvbG9y X3BsYW5lW2F1eF9wbGFuZV0ueSkgewotCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0J CQkJICAgICJVbmFibGUgdG8gZmluZCBzdWl0YWJsZSBkaXNwbGF5IHN1cmZhY2Ugb2Zmc2V0IGR1 ZSB0byBDQ1NcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0KLQlwbGFuZV9zdGF0 ZS0+Y29sb3JfcGxhbmVbMF0ub2Zmc2V0ID0gb2Zmc2V0OwotCXBsYW5lX3N0YXRlLT5jb2xvcl9w bGFuZVswXS54ID0geDsKLQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ueSA9IHk7Ci0KLQkv KgotCSAqIFB1dCB0aGUgZmluYWwgY29vcmRpbmF0ZXMgYmFjayBzbyB0aGF0IHRoZSBzcmMKLQkg KiBjb29yZGluYXRlIGNoZWNrcyB3aWxsIHNlZSB0aGUgcmlnaHQgdmFsdWVzLgotCSAqLwotCWRy bV9yZWN0X3RyYW5zbGF0ZV90bygmcGxhbmVfc3RhdGUtPnVhcGkuc3JjLAotCQkJICAgICAgeCA8 PCAxNiwgeSA8PCAxNik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBza2xfY2hlY2tf bnYxMl9hdXhfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQot ewotCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZV9zdGF0 ZS0+dWFwaS5wbGFuZSk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1 KHBsYW5lLT5iYXNlLmRldik7Ci0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBw bGFuZV9zdGF0ZS0+aHcuZmI7Ci0JdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUt Pmh3LnJvdGF0aW9uOwotCWludCB1dl9wbGFuZSA9IDE7Ci0JaW50IG1heF93aWR0aCA9IGludGVs X3BsYW5lX21heF93aWR0aChwbGFuZSwgZmIsIHV2X3BsYW5lLCByb3RhdGlvbik7Ci0JaW50IG1h eF9oZWlnaHQgPSBpbnRlbF9wbGFuZV9tYXhfaGVpZ2h0KHBsYW5lLCBmYiwgdXZfcGxhbmUsIHJv dGF0aW9uKTsKLQlpbnQgeCA9IHBsYW5lX3N0YXRlLT51YXBpLnNyYy54MSA+PiAxNzsKLQlpbnQg eSA9IHBsYW5lX3N0YXRlLT51YXBpLnNyYy55MSA+PiAxNzsKLQlpbnQgdyA9IGRybV9yZWN0X3dp ZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMpID4+IDE3OwotCWludCBoID0gZHJtX3JlY3RfaGVp Z2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMpID4+IDE3OwotCXUzMiBvZmZzZXQ7Ci0KLQkvKiBG SVhNRSBub3QgcXVpdGUgc3VyZSBob3cvaWYgdGhlc2UgYXBwbHkgdG8gdGhlIGNocm9tYSBwbGFu ZSAqLwotCWlmICh3ID4gbWF4X3dpZHRoIHx8IGggPiBtYXhfaGVpZ2h0KSB7Ci0JCWRybV9kYmdf a21zKCZpOTE1LT5kcm0sCi0JCQkgICAgIkNiQ3Igc291cmNlIHNpemUgJWR4JWQgdG9vIGJpZyAo bGltaXQgJWR4JWQpXG4iLAotCQkJICAgIHcsIGgsIG1heF93aWR0aCwgbWF4X2hlaWdodCk7Ci0J CXJldHVybiAtRUlOVkFMOwotCX0KLQotCWludGVsX2FkZF9mYl9vZmZzZXRzKCZ4LCAmeSwgcGxh bmVfc3RhdGUsIHV2X3BsYW5lKTsKLQlvZmZzZXQgPSBpbnRlbF9wbGFuZV9jb21wdXRlX2FsaWdu ZWRfb2Zmc2V0KCZ4LCAmeSwKLQkJCQkJCSAgICBwbGFuZV9zdGF0ZSwgdXZfcGxhbmUpOwotCi0J aWYgKGlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIpKSB7Ci0JCWludCBjY3NfcGxhbmUgPSBt YWluX3RvX2Njc19wbGFuZShmYiwgdXZfcGxhbmUpOwotCQl1MzIgYXV4X29mZnNldCA9IHBsYW5l X3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLm9mZnNldDsKLQkJdTMyIGFsaWdubWVudCA9 IGludGVsX3N1cmZfYWxpZ25tZW50KGZiLCB1dl9wbGFuZSk7Ci0KLQkJaWYgKG9mZnNldCA+IGF1 eF9vZmZzZXQpCi0JCQlvZmZzZXQgPSBpbnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQo JngsICZ5LAotCQkJCQkJCQkgICBwbGFuZV9zdGF0ZSwKLQkJCQkJCQkJICAgdXZfcGxhbmUsCi0J CQkJCQkJCSAgIG9mZnNldCwKLQkJCQkJCQkJICAgYXV4X29mZnNldCAmIH4oYWxpZ25tZW50IC0g MSkpOwotCi0JCXdoaWxlICghc2tsX2NoZWNrX21haW5fY2NzX2Nvb3JkaW5hdGVzKHBsYW5lX3N0 YXRlLCB4LCB5LAotCQkJCQkJICAgICAgIG9mZnNldCwgY2NzX3BsYW5lKSkgewotCQkJaWYgKG9m ZnNldCA9PSAwKQotCQkJCWJyZWFrOwotCi0JCQlvZmZzZXQgPSBpbnRlbF9wbGFuZV9hZGp1c3Rf YWxpZ25lZF9vZmZzZXQoJngsICZ5LAotCQkJCQkJCQkgICBwbGFuZV9zdGF0ZSwKLQkJCQkJCQkJ ICAgdXZfcGxhbmUsCi0JCQkJCQkJCSAgIG9mZnNldCwgb2Zmc2V0IC0gYWxpZ25tZW50KTsKLQkJ fQotCi0JCWlmICh4ICE9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLnggfHwK LQkJICAgIHkgIT0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFuZV0ueSkgewotCQkJ ZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwKLQkJCQkgICAgIlVuYWJsZSB0byBmaW5kIHN1aXRhYmxl IGRpc3BsYXkgc3VyZmFjZSBvZmZzZXQgZHVlIHRvIENDU1xuIik7Ci0JCQlyZXR1cm4gLUVJTlZB TDsKLQkJfQotCX0KLQotCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVt1dl9wbGFuZV0ub2Zmc2V0 ID0gb2Zmc2V0OwotCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVt1dl9wbGFuZV0ueCA9IHg7Ci0J cGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW3V2X3BsYW5lXS55ID0geTsKLQotCXJldHVybiAwOwot fQotCi1zdGF0aWMgaW50IHNrbF9jaGVja19jY3NfYXV4X3N1cmZhY2Uoc3RydWN0IGludGVsX3Bs YW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKLQlpbnQgc3JjX3ggPSBwbGFuZV9zdGF0ZS0+dWFw aS5zcmMueDEgPj4gMTY7Ci0JaW50IHNyY195ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3JjLnkxID4+ IDE2OwotCXUzMiBvZmZzZXQ7Ci0JaW50IGNjc19wbGFuZTsKLQotCWZvciAoY2NzX3BsYW5lID0g MDsgY2NzX3BsYW5lIDwgZmItPmZvcm1hdC0+bnVtX3BsYW5lczsgY2NzX3BsYW5lKyspIHsKLQkJ aW50IG1haW5faHN1YiwgbWFpbl92c3ViOwotCQlpbnQgaHN1YiwgdnN1YjsKLQkJaW50IHgsIHk7 Ci0KLQkJaWYgKCFpc19jY3NfcGxhbmUoZmIsIGNjc19wbGFuZSkgfHwKLQkJICAgIGlzX2dlbjEy X2Njc19jY19wbGFuZShmYiwgY2NzX3BsYW5lKSkKLQkJCWNvbnRpbnVlOwotCi0JCWludGVsX2Zi X3BsYW5lX2dldF9zdWJzYW1wbGluZygmbWFpbl9oc3ViLCAmbWFpbl92c3ViLCBmYiwKLQkJCQkJ ICAgICAgIGNjc190b19tYWluX3BsYW5lKGZiLCBjY3NfcGxhbmUpKTsKLQkJaW50ZWxfZmJfcGxh bmVfZ2V0X3N1YnNhbXBsaW5nKCZoc3ViLCAmdnN1YiwgZmIsIGNjc19wbGFuZSk7Ci0KLQkJaHN1 YiAqPSBtYWluX2hzdWI7Ci0JCXZzdWIgKj0gbWFpbl92c3ViOwotCQl4ID0gc3JjX3ggLyBoc3Vi OwotCQl5ID0gc3JjX3kgLyB2c3ViOwotCi0JCWludGVsX2FkZF9mYl9vZmZzZXRzKCZ4LCAmeSwg cGxhbmVfc3RhdGUsIGNjc19wbGFuZSk7Ci0KLQkJb2Zmc2V0ID0gaW50ZWxfcGxhbmVfY29tcHV0 ZV9hbGlnbmVkX29mZnNldCgmeCwgJnksCi0JCQkJCQkJICAgIHBsYW5lX3N0YXRlLAotCQkJCQkJ CSAgICBjY3NfcGxhbmUpOwotCi0JCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVd Lm9mZnNldCA9IG9mZnNldDsKLQkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFuZV0u eCA9ICh4ICogaHN1YiArCi0JCQkJCQkJIHNyY194ICUgaHN1YikgLwotCQkJCQkJCW1haW5faHN1 YjsKLQkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFuZV0ueSA9ICh5ICogdnN1YiAr Ci0JCQkJCQkJIHNyY195ICUgdnN1YikgLwotCQkJCQkJCW1haW5fdnN1YjsKLQl9Ci0KLQlyZXR1 cm4gMDsKLX0KLQotaW50IHNrbF9jaGVja19wbGFuZV9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFu ZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Ci0JaW50IHJldCwgaTsKLQotCXJldCA9IGludGVsX3Bs YW5lX2NvbXB1dGVfZ3R0KHBsYW5lX3N0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0Owot Ci0JaWYgKCFwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlKQotCQlyZXR1cm4gMDsKLQotCS8qCi0J ICogSGFuZGxlIHRoZSBBVVggc3VyZmFjZSBmaXJzdCBzaW5jZSB0aGUgbWFpbiBzdXJmYWNlIHNl dHVwIGRlcGVuZHMgb24KLQkgKiBpdC4KLQkgKi8KLQlpZiAoaXNfY2NzX21vZGlmaWVyKGZiLT5t b2RpZmllcikpIHsKLQkJcmV0ID0gc2tsX2NoZWNrX2Njc19hdXhfc3VyZmFjZShwbGFuZV9zdGF0 ZSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCWlmIChpbnRlbF9mb3JtYXRf aW5mb19pc195dXZfc2VtaXBsYW5hcihmYi0+Zm9ybWF0LAotCQkJCQkJZmItPm1vZGlmaWVyKSkg ewotCQlyZXQgPSBza2xfY2hlY2tfbnYxMl9hdXhfc3VyZmFjZShwbGFuZV9zdGF0ZSk7Ci0JCWlm IChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCWZvciAoaSA9IGZiLT5mb3JtYXQtPm51bV9w bGFuZXM7IGkgPCBBUlJBWV9TSVpFKHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZSk7IGkrKykgewot CQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbaV0ub2Zmc2V0ID0gMDsKLQkJcGxhbmVfc3RhdGUt PmNvbG9yX3BsYW5lW2ldLnggPSAwOwotCQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbaV0ueSA9 IDA7Ci0JfQotCi0JcmV0ID0gc2tsX2NoZWNrX21haW5fc3VyZmFjZShwbGFuZV9zdGF0ZSk7Ci0J aWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBz a2xfZGV0YWNoX3NjYWxlcihzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YywgaW50IGlkKQog ewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9jcnRjLT5iYXNlLmRldjsKQEAgLTMy ODYsMzAzICsyODA0LDI0IEBAIHN0YXRpYyB2b2lkIHNrbF9kZXRhY2hfc2NhbGVycyhjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKIAl9CiB9CiAKLXN0YXRpYyB1bnNp Z25lZCBpbnQgc2tsX3BsYW5lX3N0cmlkZV9tdWx0KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLAotCQkJCQkgIGludCBjb2xvcl9wbGFuZSwgdW5zaWduZWQgaW50IHJvdGF0aW9uKQor dm9pZCBza2xfc2NhbGVyX2Rpc2FibGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm9s ZF9jcnRjX3N0YXRlKQogewotCS8qCi0JICogVGhlIHN0cmlkZSBpcyBlaXRoZXIgZXhwcmVzc2Vk IGFzIGEgbXVsdGlwbGUgb2YgNjQgYnl0ZXMgY2h1bmtzIGZvcgotCSAqIGxpbmVhciBidWZmZXJz IG9yIGluIG51bWJlciBvZiB0aWxlcyBmb3IgdGlsZWQgYnVmZmVycy4KLQkgKi8KLQlpZiAoaXNf c3VyZmFjZV9saW5lYXIoZmIsIGNvbG9yX3BsYW5lKSkKLQkJcmV0dXJuIDY0OwotCWVsc2UgaWYg KGRybV9yb3RhdGlvbl85MF9vcl8yNzAocm90YXRpb24pKQotCQlyZXR1cm4gaW50ZWxfdGlsZV9o ZWlnaHQoZmIsIGNvbG9yX3BsYW5lKTsKLQllbHNlCi0JCXJldHVybiBpbnRlbF90aWxlX3dpZHRo X2J5dGVzKGZiLCBjb2xvcl9wbGFuZSk7Ci19Ci0KLXUzMiBza2xfcGxhbmVfc3RyaWRlKGNvbnN0 IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCi0JCSAgICAgaW50IGNvbG9y X3BsYW5lKQotewotCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3Rh dGUtPmh3LmZiOwotCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5ody5yb3Rh dGlvbjsKLQl1MzIgc3RyaWRlID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2NvbG9yX3BsYW5l XS5zdHJpZGU7Ci0KLQlpZiAoY29sb3JfcGxhbmUgPj0gZmItPmZvcm1hdC0+bnVtX3BsYW5lcykK LQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gc3RyaWRlIC8gc2tsX3BsYW5lX3N0cmlkZV9tdWx0KGZi LCBjb2xvcl9wbGFuZSwgcm90YXRpb24pOwotfQotCi1zdGF0aWMgdTMyIHNrbF9wbGFuZV9jdGxf Zm9ybWF0KHUzMiBwaXhlbF9mb3JtYXQpCi17Ci0Jc3dpdGNoIChwaXhlbF9mb3JtYXQpIHsKLQlj YXNlIERSTV9GT1JNQVRfQzg6Ci0JCXJldHVybiBQTEFORV9DVExfRk9STUFUX0lOREVYRUQ7Ci0J Y2FzZSBEUk1fRk9STUFUX1JHQjU2NToKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfUkdCXzU2 NTsKLQljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4 OgotCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzg4ODggfCBQTEFORV9DVExfT1JERVJf UkdCWDsKLQljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX0FSR0I4 ODg4OgotCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzg4ODg7Ci0JY2FzZSBEUk1fRk9S TUFUX1hCR1IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMDoKLQkJcmV0dXJu IFBMQU5FX0NUTF9GT1JNQVRfWFJHQl8yMTAxMDEwIHwgUExBTkVfQ1RMX09SREVSX1JHQlg7Ci0J Y2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMjEwMTAx MDoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWFJHQl8yMTAxMDEwOwotCWNhc2UgRFJNX0ZP Uk1BVF9YQkdSMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMTYxNjE2MTZGOgotCQly ZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzE2MTYxNjE2RiB8IFBMQU5FX0NUTF9PUkRFUl9S R0JYOwotCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9B UkdCMTYxNjE2MTZGOgotCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzE2MTYxNjE2RjsK LQljYXNlIERSTV9GT1JNQVRfWFlVVjg4ODg6Ci0JCXJldHVybiBQTEFORV9DVExfRk9STUFUX1hZ VVY7Ci0JY2FzZSBEUk1fRk9STUFUX1lVWVY6Ci0JCXJldHVybiBQTEFORV9DVExfRk9STUFUX1lV VjQyMiB8IFBMQU5FX0NUTF9ZVVY0MjJfWVVZVjsKLQljYXNlIERSTV9GT1JNQVRfWVZZVToKLQkJ cmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWVVWNDIyIHwgUExBTkVfQ1RMX1lVVjQyMl9ZVllVOwot CWNhc2UgRFJNX0ZPUk1BVF9VWVZZOgotCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9ZVVY0MjIg fCBQTEFORV9DVExfWVVWNDIyX1VZVlk7Ci0JY2FzZSBEUk1fRk9STUFUX1ZZVVk6Ci0JCXJldHVy biBQTEFORV9DVExfRk9STUFUX1lVVjQyMiB8IFBMQU5FX0NUTF9ZVVY0MjJfVllVWTsKLQljYXNl IERSTV9GT1JNQVRfTlYxMjoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfTlYxMjsKLQljYXNl IERSTV9GT1JNQVRfUDAxMDoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfUDAxMDsKLQljYXNl IERSTV9GT1JNQVRfUDAxMjoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfUDAxMjsKLQljYXNl IERSTV9GT1JNQVRfUDAxNjoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfUDAxNjsKLQljYXNl IERSTV9GT1JNQVRfWTIxMDoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWTIxMDsKLQljYXNl IERSTV9GT1JNQVRfWTIxMjoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWTIxMjsKLQljYXNl IERSTV9GT1JNQVRfWTIxNjoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWTIxNjsKLQljYXNl IERSTV9GT1JNQVRfWFZZVTIxMDEwMTA6Ci0JCXJldHVybiBQTEFORV9DVExfRk9STUFUX1k0MTA7 Ci0JY2FzZSBEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNjoKLQkJcmV0dXJuIFBMQU5FX0NUTF9G T1JNQVRfWTQxMjsKLQljYXNlIERSTV9GT1JNQVRfWFZZVTE2MTYxNjE2OgotCQlyZXR1cm4gUExB TkVfQ1RMX0ZPUk1BVF9ZNDE2OwotCWRlZmF1bHQ6Ci0JCU1JU1NJTkdfQ0FTRShwaXhlbF9mb3Jt YXQpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTMyIHNrbF9wbGFuZV9jdGxfYWxw aGEoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQlpZiAo IXBsYW5lX3N0YXRlLT5ody5mYi0+Zm9ybWF0LT5oYXNfYWxwaGEpCi0JCXJldHVybiBQTEFORV9D VExfQUxQSEFfRElTQUJMRTsKLQotCXN3aXRjaCAocGxhbmVfc3RhdGUtPmh3LnBpeGVsX2JsZW5k X21vZGUpIHsKLQljYXNlIERSTV9NT0RFX0JMRU5EX1BJWEVMX05PTkU6Ci0JCXJldHVybiBQTEFO RV9DVExfQUxQSEFfRElTQUJMRTsKLQljYXNlIERSTV9NT0RFX0JMRU5EX1BSRU1VTFRJOgotCQly ZXR1cm4gUExBTkVfQ1RMX0FMUEhBX1NXX1BSRU1VTFRJUExZOwotCWNhc2UgRFJNX01PREVfQkxF TkRfQ09WRVJBR0U6Ci0JCXJldHVybiBQTEFORV9DVExfQUxQSEFfSFdfUFJFTVVMVElQTFk7Ci0J ZGVmYXVsdDoKLQkJTUlTU0lOR19DQVNFKHBsYW5lX3N0YXRlLT5ody5waXhlbF9ibGVuZF9tb2Rl KTsKLQkJcmV0dXJuIFBMQU5FX0NUTF9BTFBIQV9ESVNBQkxFOwotCX0KLX0KLQotc3RhdGljIHUz MiBnbGtfcGxhbmVfY29sb3JfY3RsX2FscGhhKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZSAqcGxhbmVfc3RhdGUpCi17Ci0JaWYgKCFwbGFuZV9zdGF0ZS0+aHcuZmItPmZvcm1hdC0+aGFz X2FscGhhKQotCQlyZXR1cm4gUExBTkVfQ09MT1JfQUxQSEFfRElTQUJMRTsKLQotCXN3aXRjaCAo cGxhbmVfc3RhdGUtPmh3LnBpeGVsX2JsZW5kX21vZGUpIHsKLQljYXNlIERSTV9NT0RFX0JMRU5E X1BJWEVMX05PTkU6Ci0JCXJldHVybiBQTEFORV9DT0xPUl9BTFBIQV9ESVNBQkxFOwotCWNhc2Ug RFJNX01PREVfQkxFTkRfUFJFTVVMVEk6Ci0JCXJldHVybiBQTEFORV9DT0xPUl9BTFBIQV9TV19Q UkVNVUxUSVBMWTsKLQljYXNlIERSTV9NT0RFX0JMRU5EX0NPVkVSQUdFOgotCQlyZXR1cm4gUExB TkVfQ09MT1JfQUxQSEFfSFdfUFJFTVVMVElQTFk7Ci0JZGVmYXVsdDoKLQkJTUlTU0lOR19DQVNF KHBsYW5lX3N0YXRlLT5ody5waXhlbF9ibGVuZF9tb2RlKTsKLQkJcmV0dXJuIFBMQU5FX0NPTE9S X0FMUEhBX0RJU0FCTEU7Ci0JfQotfQotCi1zdGF0aWMgdTMyIHNrbF9wbGFuZV9jdGxfdGlsaW5n KHU2NCBmYl9tb2RpZmllcikKLXsKLQlzd2l0Y2ggKGZiX21vZGlmaWVyKSB7Ci0JY2FzZSBEUk1f Rk9STUFUX01PRF9MSU5FQVI6Ci0JCWJyZWFrOwotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElM RUQ6Ci0JCXJldHVybiBQTEFORV9DVExfVElMRURfWDsKLQljYXNlIEk5MTVfRk9STUFUX01PRF9Z X1RJTEVEOgotCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1k7Ci0JY2FzZSBJOTE1X0ZPUk1BVF9N T0RfWV9USUxFRF9DQ1M6Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19D Q1NfQ0M6Ci0JCXJldHVybiBQTEFORV9DVExfVElMRURfWSB8IFBMQU5FX0NUTF9SRU5ERVJfREVD T01QUkVTU0lPTl9FTkFCTEU7Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9S Q19DQ1M6Ci0JCXJldHVybiBQTEFORV9DVExfVElMRURfWSB8Ci0JCSAgICAgICBQTEFORV9DVExf UkVOREVSX0RFQ09NUFJFU1NJT05fRU5BQkxFIHwKLQkJICAgICAgIFBMQU5FX0NUTF9DTEVBUl9D T0xPUl9ESVNBQkxFOwotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNfQ0NT OgotCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1kgfCBQTEFORV9DVExfTUVESUFfREVDT01QUkVT U0lPTl9FTkFCTEU7Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ6Ci0JCXJldHVybiBQ TEFORV9DVExfVElMRURfWUY7Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOgot CQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1lGIHwgUExBTkVfQ1RMX1JFTkRFUl9ERUNPTVBSRVNT SU9OX0VOQUJMRTsKLQlkZWZhdWx0OgotCQlNSVNTSU5HX0NBU0UoZmJfbW9kaWZpZXIpOwotCX0K LQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTMyIHNrbF9wbGFuZV9jdGxfcm90YXRlKHVuc2ln bmVkIGludCByb3RhdGUpCi17Ci0Jc3dpdGNoIChyb3RhdGUpIHsKLQljYXNlIERSTV9NT0RFX1JP VEFURV8wOgotCQlicmVhazsKLQkvKgotCSAqIERSTV9NT0RFX1JPVEFURV8gaXMgY291bnRlciBj bG9ja3dpc2UgdG8gc3RheSBjb21wYXRpYmxlIHdpdGggWHJhbmRyCi0JICogd2hpbGUgaTkxNSBI VyByb3RhdGlvbiBpcyBjbG9ja3dpc2UsIHRoYXRzIHdoeSB0aGlzIHN3YXBwaW5nLgotCSAqLwot CWNhc2UgRFJNX01PREVfUk9UQVRFXzkwOgotCQlyZXR1cm4gUExBTkVfQ1RMX1JPVEFURV8yNzA7 Ci0JY2FzZSBEUk1fTU9ERV9ST1RBVEVfMTgwOgotCQlyZXR1cm4gUExBTkVfQ1RMX1JPVEFURV8x ODA7Ci0JY2FzZSBEUk1fTU9ERV9ST1RBVEVfMjcwOgotCQlyZXR1cm4gUExBTkVfQ1RMX1JPVEFU RV85MDsKLQlkZWZhdWx0OgotCQlNSVNTSU5HX0NBU0Uocm90YXRlKTsKLQl9Ci0KLQlyZXR1cm4g MDsKLX0KLQotc3RhdGljIHUzMiBjbmxfcGxhbmVfY3RsX2ZsaXAodW5zaWduZWQgaW50IHJlZmxl Y3QpCi17Ci0Jc3dpdGNoIChyZWZsZWN0KSB7Ci0JY2FzZSAwOgotCQlicmVhazsKLQljYXNlIERS TV9NT0RFX1JFRkxFQ1RfWDoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GTElQX0hPUklaT05UQUw7Ci0J Y2FzZSBEUk1fTU9ERV9SRUZMRUNUX1k6Ci0JZGVmYXVsdDoKLQkJTUlTU0lOR19DQVNFKHJlZmxl Y3QpOwotCX0KLQotCXJldHVybiAwOwotfQotCi11MzIgc2tsX3BsYW5lX2N0bF9jcnRjKGNvbnN0 IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQotewotCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjLT5kZXYp OwotCXUzMiBwbGFuZV9jdGwgPSAwOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAg fHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpCi0JCXJldHVybiBwbGFuZV9jdGw7Ci0KLQlpZiAo Y3J0Y19zdGF0ZS0+Z2FtbWFfZW5hYmxlKQotCQlwbGFuZV9jdGwgfD0gUExBTkVfQ1RMX1BJUEVf R0FNTUFfRU5BQkxFOworCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0Yyhv bGRfY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKKwlpbnQgaTsKIAotCWlmIChjcnRjX3N0YXRlLT5j c2NfZW5hYmxlKQotCQlwbGFuZV9jdGwgfD0gUExBTkVfQ1RMX1BJUEVfQ1NDX0VOQUJMRTsKLQot CXJldHVybiBwbGFuZV9jdGw7CisJZm9yIChpID0gMDsgaSA8IGNydGMtPm51bV9zY2FsZXJzOyBp KyspCisJCXNrbF9kZXRhY2hfc2NhbGVyKGNydGMsIGkpOwogfQogCi11MzIgc2tsX3BsYW5lX2N0 bChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJICBjb25zdCBz dHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQordW5zaWduZWQgaW50CitpbnRl bF9wbGFuZV9mZW5jZV95X29mZnNldChjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBs YW5lX3N0YXRlKQogewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9Ci0JCXRv X2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7Ci0JY29uc3Qgc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Ci0JdW5zaWduZWQgaW50IHJvdGF0 aW9uID0gcGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9uOwotCWNvbnN0IHN0cnVjdCBkcm1faW50ZWxf c3ByaXRlX2NvbG9ya2V5ICprZXkgPSAmcGxhbmVfc3RhdGUtPmNrZXk7Ci0JdTMyIHBsYW5lX2N0 bDsKLQotCXBsYW5lX2N0bCA9IFBMQU5FX0NUTF9FTkFCTEU7Ci0KLQlpZiAoSU5URUxfR0VOKGRl dl9wcml2KSA8IDEwICYmICFJU19HRU1JTklMQUtFKGRldl9wcml2KSkgewotCQlwbGFuZV9jdGwg fD0gc2tsX3BsYW5lX2N0bF9hbHBoYShwbGFuZV9zdGF0ZSk7Ci0JCXBsYW5lX2N0bCB8PSBQTEFO RV9DVExfUExBTkVfR0FNTUFfRElTQUJMRTsKLQotCQlpZiAocGxhbmVfc3RhdGUtPmh3LmNvbG9y X2VuY29kaW5nID09IERSTV9DT0xPUl9ZQ0JDUl9CVDcwOSkKLQkJCXBsYW5lX2N0bCB8PSBQTEFO RV9DVExfWVVWX1RPX1JHQl9DU0NfRk9STUFUX0JUNzA5OwotCi0JCWlmIChwbGFuZV9zdGF0ZS0+ aHcuY29sb3JfcmFuZ2UgPT0gRFJNX0NPTE9SX1lDQkNSX0ZVTExfUkFOR0UpCi0JCQlwbGFuZV9j dGwgfD0gUExBTkVfQ1RMX1lVVl9SQU5HRV9DT1JSRUNUSU9OX0RJU0FCTEU7Ci0JfQotCi0JcGxh bmVfY3RsIHw9IHNrbF9wbGFuZV9jdGxfZm9ybWF0KGZiLT5mb3JtYXQtPmZvcm1hdCk7Ci0JcGxh bmVfY3RsIHw9IHNrbF9wbGFuZV9jdGxfdGlsaW5nKGZiLT5tb2RpZmllcik7Ci0JcGxhbmVfY3Rs IHw9IHNrbF9wbGFuZV9jdGxfcm90YXRlKHJvdGF0aW9uICYgRFJNX01PREVfUk9UQVRFX01BU0sp OwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTApCi0JCXBsYW5lX2N0bCB8PSBjbmxf cGxhbmVfY3RsX2ZsaXAocm90YXRpb24gJgotCQkJCQkJRFJNX01PREVfUkVGTEVDVF9NQVNLKTsK LQotCWlmIChrZXktPmZsYWdzICYgSTkxNV9TRVRfQ09MT1JLRVlfREVTVElOQVRJT04pCi0JCXBs YW5lX2N0bCB8PSBQTEFORV9DVExfS0VZX0VOQUJMRV9ERVNUSU5BVElPTjsKLQllbHNlIGlmIChr ZXktPmZsYWdzICYgSTkxNV9TRVRfQ09MT1JLRVlfU09VUkNFKQotCQlwbGFuZV9jdGwgfD0gUExB TkVfQ1RMX0tFWV9FTkFCTEVfU09VUkNFOwotCi0JcmV0dXJuIHBsYW5lX2N0bDsKLX0KLQotdTMy IGdsa19wbGFuZV9jb2xvcl9jdGxfY3J0Yyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KGNydGNfc3RhdGUtPnVhcGkuY3J0Yy0+ZGV2KTsKLQl1MzIgcGxhbmVfY29sb3JfY3RsID0g MDsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExKQotCQlyZXR1cm4gcGxhbmVfY29s b3JfY3RsOwotCi0JaWYgKGNydGNfc3RhdGUtPmdhbW1hX2VuYWJsZSkKLQkJcGxhbmVfY29sb3Jf Y3RsIHw9IFBMQU5FX0NPTE9SX1BJUEVfR0FNTUFfRU5BQkxFOwotCi0JaWYgKGNydGNfc3RhdGUt PmNzY19lbmFibGUpCi0JCXBsYW5lX2NvbG9yX2N0bCB8PSBQTEFORV9DT0xPUl9QSVBFX0NTQ19F TkFCTEU7Ci0KLQlyZXR1cm4gcGxhbmVfY29sb3JfY3RsOwotfQotCi11MzIgZ2xrX3BsYW5lX2Nv bG9yX2N0bChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJCWNv bnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0Jc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KLQkJdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5w bGFuZS0+ZGV2KTsKLQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0 YXRlLT5ody5mYjsKLQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUo cGxhbmVfc3RhdGUtPnVhcGkucGxhbmUpOwotCXUzMiBwbGFuZV9jb2xvcl9jdGwgPSAwOwotCi0J cGxhbmVfY29sb3JfY3RsIHw9IFBMQU5FX0NPTE9SX1BMQU5FX0dBTU1BX0RJU0FCTEU7Ci0JcGxh bmVfY29sb3JfY3RsIHw9IGdsa19wbGFuZV9jb2xvcl9jdGxfYWxwaGEocGxhbmVfc3RhdGUpOwor CWludCB4ID0gMCwgeSA9IDA7CiAKLQlpZiAoZmItPmZvcm1hdC0+aXNfeXV2ICYmICFpY2xfaXNf aGRyX3BsYW5lKGRldl9wcml2LCBwbGFuZS0+aWQpKSB7Ci0JCXN3aXRjaCAocGxhbmVfc3RhdGUt Pmh3LmNvbG9yX2VuY29kaW5nKSB7Ci0JCWNhc2UgRFJNX0NPTE9SX1lDQkNSX0JUNzA5OgotCQkJ cGxhbmVfY29sb3JfY3RsIHw9IFBMQU5FX0NPTE9SX0NTQ19NT0RFX1lVVjcwOV9UT19SR0I3MDk7 Ci0JCQlicmVhazsKLQkJY2FzZSBEUk1fQ09MT1JfWUNCQ1JfQlQyMDIwOgotCQkJcGxhbmVfY29s b3JfY3RsIHw9Ci0JCQkJUExBTkVfQ09MT1JfQ1NDX01PREVfWVVWMjAyMF9UT19SR0IyMDIwOwot CQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwbGFuZV9jb2xvcl9jdGwgfD0KLQkJCQlQTEFORV9D T0xPUl9DU0NfTU9ERV9ZVVY2MDFfVE9fUkdCNjAxOwotCQl9Ci0JCWlmIChwbGFuZV9zdGF0ZS0+ aHcuY29sb3JfcmFuZ2UgPT0gRFJNX0NPTE9SX1lDQkNSX0ZVTExfUkFOR0UpCi0JCQlwbGFuZV9j b2xvcl9jdGwgfD0gUExBTkVfQ09MT1JfWVVWX1JBTkdFX0NPUlJFQ1RJT05fRElTQUJMRTsKLQl9 IGVsc2UgaWYgKGZiLT5mb3JtYXQtPmlzX3l1dikgewotCQlwbGFuZV9jb2xvcl9jdGwgfD0gUExB TkVfQ09MT1JfSU5QVVRfQ1NDX0VOQUJMRTsKLQl9CisJaW50ZWxfcGxhbmVfYWRqdXN0X2FsaWdu ZWRfb2Zmc2V0KCZ4LCAmeSwgcGxhbmVfc3RhdGUsIDAsCisJCQkJCSAgcGxhbmVfc3RhdGUtPmNv bG9yX3BsYW5lWzBdLm9mZnNldCwgMCk7CiAKLQlyZXR1cm4gcGxhbmVfY29sb3JfY3RsOworCXJl dHVybiB5OwogfQogCiBzdGF0aWMgaW50CkBAIC00NDM3LDE1ICszNjc2LDYgQEAgc3RhdGljIGlu dCBza2xfdXBkYXRlX3NjYWxlcl9wbGFuZShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSwKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBza2xfc2NhbGVyX2Rpc2FibGUoY29uc3Qgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQotewotCXN0cnVjdCBpbnRlbF9j cnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhvbGRfY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKLQlp bnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBjcnRjLT5udW1fc2NhbGVyczsgaSsrKQotCQlza2xf ZGV0YWNoX3NjYWxlcihjcnRjLCBpKTsKLX0KLQogc3RhdGljIGludCBjbmxfY29lZl90YXAoaW50 IGkpCiB7CiAJcmV0dXJuIGkgJSA3OwpAQCAtODI2NiwxNTAgKzc0OTYsNiBAQCBzdGF0aWMgdm9p ZCBza2xfZ2V0X3BmaXRfY29uZmlnKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRl KQogCQlzY2FsZXJfc3RhdGUtPnNjYWxlcl91c2VycyAmPSB+KDEgPDwgU0tMX0NSVENfSU5ERVgp OwogfQogCi1zdGF0aWMgdm9pZAotc2tsX2dldF9pbml0aWFsX3BsYW5lX2NvbmZpZyhzdHJ1Y3Qg aW50ZWxfY3J0YyAqY3J0YywKLQkJCSAgICAgc3RydWN0IGludGVsX2luaXRpYWxfcGxhbmVfY29u ZmlnICpwbGFuZV9jb25maWcpCi17Ci0Jc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUgPSB0b19pbnRlbF9jcnRjX3N0YXRlKGNydGMtPmJhc2Uuc3RhdGUpOwotCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Ci0Jc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRv X2ludGVsX3BsYW5lKGNydGMtPmJhc2UucHJpbWFyeSk7Ci0JZW51bSBwbGFuZV9pZCBwbGFuZV9p ZCA9IHBsYW5lLT5pZDsKLQllbnVtIHBpcGUgcGlwZTsKLQl1MzIgdmFsLCBiYXNlLCBvZmZzZXQs IHN0cmlkZV9tdWx0LCB0aWxpbmcsIGFscGhhOwotCWludCBmb3VyY2MsIHBpeGVsX2Zvcm1hdDsK LQl1bnNpZ25lZCBpbnQgYWxpZ25lZF9oZWlnaHQ7Ci0Jc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmI7Ci0Jc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYjsKLQotCWlmICghcGxhbmUt PmdldF9od19zdGF0ZShwbGFuZSwgJnBpcGUpKQotCQlyZXR1cm47Ci0KLQlkcm1fV0FSTl9PTihk ZXYsIHBpcGUgIT0gY3J0Yy0+cGlwZSk7Ci0KLQlpZiAoY3J0Y19zdGF0ZS0+Ymlnam9pbmVyKSB7 Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJICAgICJVbnN1cHBvcnRlZCBiaWdq b2luZXIgY29uZmlndXJhdGlvbiBmb3IgaW5pdGlhbCBGQlxuIik7Ci0JCXJldHVybjsKLQl9Ci0K LQlpbnRlbF9mYiA9IGt6YWxsb2Moc2l6ZW9mKCppbnRlbF9mYiksIEdGUF9LRVJORUwpOwotCWlm ICghaW50ZWxfZmIpIHsKLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJmYWlsZWQgdG8g YWxsb2MgZmJcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZmIgPSAmaW50ZWxfZmItPmJhc2U7Ci0K LQlmYi0+ZGV2ID0gZGV2OwotCi0JdmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgUExBTkVf Q1RMKHBpcGUsIHBsYW5lX2lkKSk7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkK LQkJcGl4ZWxfZm9ybWF0ID0gdmFsICYgSUNMX1BMQU5FX0NUTF9GT1JNQVRfTUFTSzsKLQllbHNl Ci0JCXBpeGVsX2Zvcm1hdCA9IHZhbCAmIFBMQU5FX0NUTF9GT1JNQVRfTUFTSzsKLQotCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKSB7Ci0J CWFscGhhID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwKLQkJCQkgICAgICBQTEFORV9DT0xPUl9D VEwocGlwZSwgcGxhbmVfaWQpKTsKLQkJYWxwaGEgJj0gUExBTkVfQ09MT1JfQUxQSEFfTUFTSzsK LQl9IGVsc2UgewotCQlhbHBoYSA9IHZhbCAmIFBMQU5FX0NUTF9BTFBIQV9NQVNLOwotCX0KLQot CWZvdXJjYyA9IHNrbF9mb3JtYXRfdG9fZm91cmNjKHBpeGVsX2Zvcm1hdCwKLQkJCQkgICAgICB2 YWwgJiBQTEFORV9DVExfT1JERVJfUkdCWCwgYWxwaGEpOwotCWZiLT5mb3JtYXQgPSBkcm1fZm9y bWF0X2luZm8oZm91cmNjKTsKLQotCXRpbGluZyA9IHZhbCAmIFBMQU5FX0NUTF9USUxFRF9NQVNL OwotCXN3aXRjaCAodGlsaW5nKSB7Ci0JY2FzZSBQTEFORV9DVExfVElMRURfTElORUFSOgotCQlm Yi0+bW9kaWZpZXIgPSBEUk1fRk9STUFUX01PRF9MSU5FQVI7Ci0JCWJyZWFrOwotCWNhc2UgUExB TkVfQ1RMX1RJTEVEX1g6Ci0JCXBsYW5lX2NvbmZpZy0+dGlsaW5nID0gSTkxNV9USUxJTkdfWDsK LQkJZmItPm1vZGlmaWVyID0gSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ7Ci0JCWJyZWFrOwotCWNh c2UgUExBTkVfQ1RMX1RJTEVEX1k6Ci0JCXBsYW5lX2NvbmZpZy0+dGlsaW5nID0gSTkxNV9USUxJ TkdfWTsKLQkJaWYgKHZhbCAmIFBMQU5FX0NUTF9SRU5ERVJfREVDT01QUkVTU0lPTl9FTkFCTEUp Ci0JCQlmYi0+bW9kaWZpZXIgPSBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEyID8KLQkJCQlJOTE1 X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19DQ1MgOgotCQkJCUk5MTVfRk9STUFUX01PRF9Z X1RJTEVEX0NDUzsKLQkJZWxzZSBpZiAodmFsICYgUExBTkVfQ1RMX01FRElBX0RFQ09NUFJFU1NJ T05fRU5BQkxFKQotCQkJZmItPm1vZGlmaWVyID0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VO MTJfTUNfQ0NTOwotCQllbHNlCi0JCQlmYi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0RfWV9U SUxFRDsKLQkJYnJlYWs7Ci0JY2FzZSBQTEFORV9DVExfVElMRURfWUY6Ci0JCWlmICh2YWwgJiBQ TEFORV9DVExfUkVOREVSX0RFQ09NUFJFU1NJT05fRU5BQkxFKQotCQkJZmItPm1vZGlmaWVyID0g STkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzsKLQkJZWxzZQotCQkJZmItPm1vZGlmaWVyID0g STkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlNSVNTSU5H X0NBU0UodGlsaW5nKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQkvKgotCSAqIERSTV9NT0RFX1JP VEFURV8gaXMgY291bnRlciBjbG9ja3dpc2UgdG8gc3RheSBjb21wYXRpYmxlIHdpdGggWHJhbmRy Ci0JICogd2hpbGUgaTkxNSBIVyByb3RhdGlvbiBpcyBjbG9ja3dpc2UsIHRoYXRzIHdoeSB0aGlz IHN3YXBwaW5nLgotCSAqLwotCXN3aXRjaCAodmFsICYgUExBTkVfQ1RMX1JPVEFURV9NQVNLKSB7 Ci0JY2FzZSBQTEFORV9DVExfUk9UQVRFXzA6Ci0JCXBsYW5lX2NvbmZpZy0+cm90YXRpb24gPSBE Uk1fTU9ERV9ST1RBVEVfMDsKLQkJYnJlYWs7Ci0JY2FzZSBQTEFORV9DVExfUk9UQVRFXzkwOgot CQlwbGFuZV9jb25maWctPnJvdGF0aW9uID0gRFJNX01PREVfUk9UQVRFXzI3MDsKLQkJYnJlYWs7 Ci0JY2FzZSBQTEFORV9DVExfUk9UQVRFXzE4MDoKLQkJcGxhbmVfY29uZmlnLT5yb3RhdGlvbiA9 IERSTV9NT0RFX1JPVEFURV8xODA7Ci0JCWJyZWFrOwotCWNhc2UgUExBTkVfQ1RMX1JPVEFURV8y NzA6Ci0JCXBsYW5lX2NvbmZpZy0+cm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfOTA7Ci0JCWJy ZWFrOwotCX0KLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwICYmCi0JICAgIHZhbCAm IFBMQU5FX0NUTF9GTElQX0hPUklaT05UQUwpCi0JCXBsYW5lX2NvbmZpZy0+cm90YXRpb24gfD0g RFJNX01PREVfUkVGTEVDVF9YOwotCi0JLyogOTAvMjcwIGRlZ3JlZSByb3RhdGlvbiB3b3VsZCBy ZXF1aXJlIGV4dHJhIHdvcmsgKi8KLQlpZiAoZHJtX3JvdGF0aW9uXzkwX29yXzI3MChwbGFuZV9j b25maWctPnJvdGF0aW9uKSkKLQkJZ290byBlcnJvcjsKLQotCWJhc2UgPSBpbnRlbF9kZV9yZWFk KGRldl9wcml2LCBQTEFORV9TVVJGKHBpcGUsIHBsYW5lX2lkKSkgJiAweGZmZmZmMDAwOwotCXBs YW5lX2NvbmZpZy0+YmFzZSA9IGJhc2U7Ci0KLQlvZmZzZXQgPSBpbnRlbF9kZV9yZWFkKGRldl9w cml2LCBQTEFORV9PRkZTRVQocGlwZSwgcGxhbmVfaWQpKTsKLQotCXZhbCA9IGludGVsX2RlX3Jl YWQoZGV2X3ByaXYsIFBMQU5FX1NJWkUocGlwZSwgcGxhbmVfaWQpKTsKLQlmYi0+aGVpZ2h0ID0g KCh2YWwgPj4gMTYpICYgMHhmZmZmKSArIDE7Ci0JZmItPndpZHRoID0gKCh2YWwgPj4gMCkgJiAw eGZmZmYpICsgMTsKLQotCXZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIFBMQU5FX1NUUklE RShwaXBlLCBwbGFuZV9pZCkpOwotCXN0cmlkZV9tdWx0ID0gc2tsX3BsYW5lX3N0cmlkZV9tdWx0 KGZiLCAwLCBEUk1fTU9ERV9ST1RBVEVfMCk7Ci0JZmItPnBpdGNoZXNbMF0gPSAodmFsICYgMHgz ZmYpICogc3RyaWRlX211bHQ7Ci0KLQlhbGlnbmVkX2hlaWdodCA9IGludGVsX2ZiX2FsaWduX2hl aWdodChmYiwgMCwgZmItPmhlaWdodCk7Ci0KLQlwbGFuZV9jb25maWctPnNpemUgPSBmYi0+cGl0 Y2hlc1swXSAqIGFsaWduZWRfaGVpZ2h0OwotCi0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0s Ci0JCSAgICAiJXMvJXMgd2l0aCBmYjogc2l6ZT0lZHglZEAlZCwgb2Zmc2V0PSV4LCBwaXRjaCAl ZCwgc2l6ZSAweCV4XG4iLAotCQkgICAgY3J0Yy0+YmFzZS5uYW1lLCBwbGFuZS0+YmFzZS5uYW1l LCBmYi0+d2lkdGgsIGZiLT5oZWlnaHQsCi0JCSAgICBmYi0+Zm9ybWF0LT5jcHBbMF0gKiA4LCBi YXNlLCBmYi0+cGl0Y2hlc1swXSwKLQkJICAgIHBsYW5lX2NvbmZpZy0+c2l6ZSk7Ci0KLQlwbGFu ZV9jb25maWctPmZiID0gaW50ZWxfZmI7Ci0JcmV0dXJuOwotCi1lcnJvcjoKLQlrZnJlZShpbnRl bF9mYik7Ci19Ci0KIHN0YXRpYyB2b2lkIGlsa19nZXRfcGZpdF9jb25maWcoc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCiB7CiAJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0 b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaCBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5oCmluZGV4IDY0ZmZhMzQ1NDRhNy4uMjUxMzk4MTI4 MzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3Bs YXkuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaApA QCAtNTIsNiArNTIsNyBAQCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZTsKIHN0cnVjdCBpbnRlbF9k aWdpdGFsX3BvcnQ7CiBzdHJ1Y3QgaW50ZWxfZHA7CiBzdHJ1Y3QgaW50ZWxfZW5jb2RlcjsKK3N0 cnVjdCBpbnRlbF9pbml0aWFsX3BsYW5lX2NvbmZpZzsKIHN0cnVjdCBpbnRlbF9sb2FkX2RldGVj dF9waXBlOwogc3RydWN0IGludGVsX3BsYW5lOwogc3RydWN0IGludGVsX3BsYW5lX3N0YXRlOwpA QCAtNTA4LDcgKzUwOSw2IEBAIHZvaWQgaW50ZWxfbGlua19jb21wdXRlX21fbih1MTYgYnBwLCBp bnQgbmxhbmVzLAogCQkJICAgIHN0cnVjdCBpbnRlbF9saW5rX21fbiAqbV9uLAogCQkJICAgIGJv b2wgY29uc3RhbnRfbiwgYm9vbCBmZWNfZW5hYmxlKTsKIGJvb2wgaXNfY2NzX21vZGlmaWVyKHU2 NCBtb2RpZmllcik7Ci1pbnQgaW50ZWxfbWFpbl90b19hdXhfcGxhbmUoY29uc3Qgc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIsIGludCBtYWluX3BsYW5lKTsKIHZvaWQgbHB0X2Rpc2FibGVfY2xr b3V0X2RwKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiB1MzIgaW50ZWxfcGxh bmVfZmJfbWF4X3N0cmlkZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkg ICAgICB1MzIgcGl4ZWxfZm9ybWF0LCB1NjQgbW9kaWZpZXIpOwpAQCAtNjIwLDE4ICs2MjAsNyBA QCB1MzIgc2tsX3NjYWxlcl9nZXRfZmlsdGVyX3NlbGVjdChlbnVtIGRybV9zY2FsaW5nX2ZpbHRl ciBmaWx0ZXIsIGludCBzZXQpOwogdm9pZCBza2xfc2NhbGVyX3NldHVwX2ZpbHRlcihzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlLAogCQkJICAgICBpbnQg aWQsIGludCBzZXQsIGVudW0gZHJtX3NjYWxpbmdfZmlsdGVyIGZpbHRlcik7CiB2b2lkIGlsa19w Zml0X2Rpc2FibGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRl KTsKLXUzMiBnbGtfcGxhbmVfY29sb3JfY3RsKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlLAotCQkJY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSk7Ci11MzIgZ2xrX3BsYW5lX2NvbG9yX2N0bF9jcnRjKGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKLXUzMiBza2xfcGxhbmVfY3RsKGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFu ZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwotdTMyIHNrbF9wbGFuZV9jdGxfY3J0Yyhjb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7Ci11MzIgc2tsX3BsYW5lX3N0cmlkZShj b25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAotCQkgICAgIGludCBw bGFuZSk7Ci1pbnQgc2tsX2NoZWNrX3BsYW5lX3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0 YXRlICpwbGFuZV9zdGF0ZSk7Ci1pbnQgc2tsX2NhbGNfbWFpbl9zdXJmYWNlX29mZnNldChjb25z dCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAotCQkJCSBpbnQgKngsIGlu dCAqeSwgdTMyICpvZmZzZXQpOwotaW50IHNrbF9mb3JtYXRfdG9fZm91cmNjKGludCBmb3JtYXQs IGJvb2wgcmdiX29yZGVyLCBib29sIGFscGhhKTsKKwogaW50IGJkd19nZXRfcGlwZW1pc2NfYnBw KHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKTsKIHVuc2lnbmVkIGludCBpbnRlbF9wbGFuZV9mZW5j ZV95X29mZnNldChjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsK IApAQCAtNjU0LDYgKzY0MywxOCBAQCBzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqCiBpbnRlbF9nZXRf Y3J0Y19uZXdfZW5jb2Rlcihjb25zdCBzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwK IAkJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKIAordW5z aWduZWQgaW50IGludGVsX3N1cmZfYWxpZ25tZW50KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLAorCQkJCSAgaW50IGNvbG9yX3BsYW5lKTsKK3ZvaWQgaW50ZWxfZmJfcGxhbmVfZ2V0 X3N1YnNhbXBsaW5nKGludCAqaHN1YiwgaW50ICp2c3ViLAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCQkgICAgaW50IGNvbG9yX3BsYW5lKTsKK3UzMiBpbnRl bF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoaW50ICp4LCBpbnQgKnksCisJCQkJICAgICAg Y29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpzdGF0ZSwKKwkJCQkgICAgICBpbnQgY29s b3JfcGxhbmUsCisJCQkJICAgICAgdTMyIG9sZF9vZmZzZXQsIHUzMiBuZXdfb2Zmc2V0KTsKK3Vu c2lnbmVkIGludCBpbnRlbF90aWxlX3dpZHRoX2J5dGVzKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUpOwordW5zaWduZWQgaW50IGludGVsX3RpbGVfaGVp Z2h0KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUpOwor CiAvKiBtb2Rlc2V0dGluZyAqLwogdm9pZCBpbnRlbF9tb2Rlc2V0X2luaXRfaHcoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUpOwogaW50IGludGVsX21vZGVzZXRfaW5pdF9ub2lycShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oCmluZGV4IDM5Mzk3NzQ4YjRiMC4uMjNhNzQ0 OTZjMTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rp c3BsYXlfdHlwZXMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rp c3BsYXlfdHlwZXMuaApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGRybS9kcm1fZHBfbXN0 X2hlbHBlci5oPgogI2luY2x1ZGUgPGRybS9kcm1fZW5jb2Rlci5oPgogI2luY2x1ZGUgPGRybS9k cm1fZmJfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4KICNpbmNsdWRlIDxk cm0vZHJtX3Byb2JlX2hlbHBlci5oPgogI2luY2x1ZGUgPGRybS9kcm1fcmVjdC5oPgogI2luY2x1 ZGUgPGRybS9kcm1fdmJsYW5rLmg+CkBAIC0xODk0LDQgKzE4OTUsMzAgQEAgc3RhdGljIGlubGlu ZSB1MzIgaW50ZWxfZmRpX2xpbmtfZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsCiAJCXJldHVybiBkZXZfcHJpdi0+ZmRpX3BsbF9mcmVxOwogfQogCitzdGF0aWMgaW5saW5l IGJvb2wgaXNfY2NzX3BsYW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQg cGxhbmUpCit7CisJaWYgKCFpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSkKKwkJcmV0dXJu IGZhbHNlOworCisJcmV0dXJuIHBsYW5lID49IGZiLT5mb3JtYXQtPm51bV9wbGFuZXMgLyAyOwor fQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfZ2VuMTJfY2NzX21vZGlmaWVyKHU2NCBtb2RpZmll cikKK3sKKwlyZXR1cm4gbW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJf UkNfQ0NTIHx8CisJICAgICAgIG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dF TjEyX1JDX0NDU19DQyB8fAorCSAgICAgICBtb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9U SUxFRF9HRU4xMl9NQ19DQ1M7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19nZW4xMl9jY3Nf cGxhbmUoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSkKK3sKKwly ZXR1cm4gaXNfZ2VuMTJfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikgJiYgaXNfY2NzX3BsYW5l KGZiLCBwbGFuZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19nZW4xMl9jY3NfY2NfcGxh bmUoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSkKK3sKKwlyZXR1 cm4gZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX1JDX0NDU19D QyAmJgorCSAgICAgICBwbGFuZSA9PSAyOworfQorCiAjZW5kaWYgLyogIF9fSU5URUxfRElTUExB WV9UWVBFU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfcHNyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bzci5jCmlu ZGV4IDg1MGNiN2Y1YjMzMi4uZjc2MzZmMGU1NTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bzci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfcHNyLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJpbnRlbF9oZG1p LmgiCiAjaW5jbHVkZSAiaW50ZWxfcHNyLmgiCiAjaW5jbHVkZSAiaW50ZWxfc3ByaXRlLmgiCisj aW5jbHVkZSAic2tsX3VuaXZlcnNhbF9wbGFuZS5oIgogCiAvKioKICAqIERPQzogUGFuZWwgU2Vs ZiBSZWZyZXNoIChQU1IvU1JEKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9zcHJpdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf c3ByaXRlLmMKaW5kZXggOTYzOWQ4ZmUzMmQ3Li4yOWUyMGM1M2EzM2MgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUuYwpAQCAtMzgwLDIxMiArMzgwLDcgQEAg aW50IGludGVsX3BsYW5lX2NoZWNrX3NyY19jb29yZGluYXRlcyhzdHJ1Y3QgaW50ZWxfcGxhbmVf c3RhdGUgKnBsYW5lX3N0YXRlKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTggaWNsX252MTJf eV9wbGFuZV9tYXNrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQotewotCWlmIChJU19S T0NLRVRMQUtFKGk5MTUpKQotCQlyZXR1cm4gQklUKFBMQU5FX1NQUklURTIpIHwgQklUKFBMQU5F X1NQUklURTMpOwotCWVsc2UKLQkJcmV0dXJuIEJJVChQTEFORV9TUFJJVEU0KSB8IEJJVChQTEFO RV9TUFJJVEU1KTsKLX0KLQotYm9vbCBpY2xfaXNfbnYxMl95X3BsYW5lKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCSBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkKQotewotCXJl dHVybiBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExICYmCi0JCWljbF9udjEyX3lfcGxhbmVfbWFz ayhkZXZfcHJpdikgJiBCSVQocGxhbmVfaWQpOwotfQotCi1ib29sIGljbF9pc19oZHJfcGxhbmUo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBsYW5lX2lkIHBsYW5lX2lk KQotewotCXJldHVybiBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExICYmCi0JCWljbF9oZHJfcGxh bmVfbWFzaygpICYgQklUKHBsYW5lX2lkKTsKLX0KLQotc3RhdGljIHZvaWQKLXNrbF9wbGFuZV9y YXRpbyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJY29uc3Qg c3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKLQkJdW5zaWduZWQgaW50ICpu dW0sIHVuc2lnbmVkIGludCAqZGVuKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7Ci0JY29uc3Qgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Ci0KLQlpZiAoZmIt PmZvcm1hdC0+Y3BwWzBdID09IDgpIHsKLQkJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAg fHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpIHsKLQkJCSpudW0gPSAxMDsKLQkJCSpkZW4gPSA4 OwotCQl9IGVsc2UgewotCQkJKm51bSA9IDk7Ci0JCQkqZGVuID0gODsKLQkJfQotCX0gZWxzZSB7 Ci0JCSpudW0gPSAxOwotCQkqZGVuID0gMTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgc2tsX3BsYW5l X21pbl9jZGNsayhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJ CSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewot CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmVfc3RhdGUt PnVhcGkucGxhbmUtPmRldik7Ci0JdW5zaWduZWQgaW50IG51bSwgZGVuOwotCXVuc2lnbmVkIGlu dCBwaXhlbF9yYXRlID0gaW50ZWxfcGxhbmVfcGl4ZWxfcmF0ZShjcnRjX3N0YXRlLCBwbGFuZV9z dGF0ZSk7Ci0KLQlza2xfcGxhbmVfcmF0aW8oY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUsICZudW0s ICZkZW4pOwotCi0JLyogdHdvIHBpeGVscyBwZXIgY2xvY2sgb24gZ2xrKyAqLwotCWlmIChJTlRF TF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQotCQlkZW4g Kj0gMjsKLQotCXJldHVybiBESVZfUk9VTkRfVVAocGl4ZWxfcmF0ZSAqIG51bSwgZGVuKTsKLX0K LQotc3RhdGljIGludCBza2xfcGxhbmVfbWF4X3dpZHRoKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiLAotCQkJICAgICAgIGludCBjb2xvcl9wbGFuZSwKLQkJCSAgICAgICB1bnNpZ25l ZCBpbnQgcm90YXRpb24pCi17Ci0JaW50IGNwcCA9IGZiLT5mb3JtYXQtPmNwcFtjb2xvcl9wbGFu ZV07Ci0KLQlzd2l0Y2ggKGZiLT5tb2RpZmllcikgewotCWNhc2UgRFJNX0ZPUk1BVF9NT0RfTElO RUFSOgotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6Ci0JCS8qCi0JCSAqIFZhbGlkYXRl ZCBsaW1pdCBpcyA0aywgYnV0IGhhcyA1ayBzaG91bGQKLQkJICogd29yayBhcGFydCBmcm9tIHRo ZSBmb2xsb3dpbmcgZmVhdHVyZXM6Ci0JCSAqIC0gWXRpbGUgKGFscmVhZHkgbGltaXRlZCB0byA0 aykKLQkJICogLSBGUDE2IChhbHJlYWR5IGxpbWl0ZWQgdG8gNGspCi0JCSAqIC0gcmVuZGVyIGNv bXByZXNzaW9uIChhbHJlYWR5IGxpbWl0ZWQgdG8gNGspCi0JCSAqIC0gS1ZNUiBzcHJpdGUgYW5k IGN1cnNvciAoZG9uJ3QgY2FyZSkKLQkJICogLSBob3Jpem9udGFsIHBhbm5pbmcgKFRPRE8gdmVy aWZ5IHRoaXMpCi0JCSAqIC0gcGlwZSBhbmQgcGxhbmUgc2NhbGluZyAoVE9ETyB2ZXJpZnkgdGhp cykKLQkJICovCi0JCWlmIChjcHAgPT0gOCkKLQkJCXJldHVybiA0MDk2OwotCQllbHNlCi0JCQly ZXR1cm4gNTEyMDsKLQljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKLQljYXNlIEk5 MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M6Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxF RF9HRU4xMl9NQ19DQ1M6Ci0JCS8qIEZJWE1FIEFVWCBwbGFuZT8gKi8KLQljYXNlIEk5MTVfRk9S TUFUX01PRF9ZX1RJTEVEOgotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgotCQlpZiAo Y3BwID09IDgpCi0JCQlyZXR1cm4gMjA0ODsKLQkJZWxzZQotCQkJcmV0dXJuIDQwOTY7Ci0JZGVm YXVsdDoKLQkJTUlTU0lOR19DQVNFKGZiLT5tb2RpZmllcik7Ci0JCXJldHVybiAyMDQ4OwotCX0K LX0KLQotc3RhdGljIGludCBnbGtfcGxhbmVfbWF4X3dpZHRoKGNvbnN0IHN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiLAotCQkJICAgICAgIGludCBjb2xvcl9wbGFuZSwKLQkJCSAgICAgICB1bnNp Z25lZCBpbnQgcm90YXRpb24pCi17Ci0JaW50IGNwcCA9IGZiLT5mb3JtYXQtPmNwcFtjb2xvcl9w bGFuZV07Ci0KLQlzd2l0Y2ggKGZiLT5tb2RpZmllcikgewotCWNhc2UgRFJNX0ZPUk1BVF9NT0Rf TElORUFSOgotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6Ci0JCWlmIChjcHAgPT0gOCkK LQkJCXJldHVybiA0MDk2OwotCQllbHNlCi0JCQlyZXR1cm4gNTEyMDsKLQljYXNlIEk5MTVfRk9S TUFUX01PRF9ZX1RJTEVEX0NDUzoKLQljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M6 Ci0JCS8qIEZJWE1FIEFVWCBwbGFuZT8gKi8KLQljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVE OgotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgotCQlpZiAoY3BwID09IDgpCi0JCQly ZXR1cm4gMjA0ODsKLQkJZWxzZQotCQkJcmV0dXJuIDUxMjA7Ci0JZGVmYXVsdDoKLQkJTUlTU0lO R19DQVNFKGZiLT5tb2RpZmllcik7Ci0JCXJldHVybiAyMDQ4OwotCX0KLX0KLQotc3RhdGljIGlu dCBpY2xfcGxhbmVfbWluX3dpZHRoKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAot CQkJICAgICAgIGludCBjb2xvcl9wbGFuZSwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcm90YXRp b24pCi17Ci0JLyogV2FfMTQwMTEyNjQ2NTcsIFdhXzE0MDExMDUwNTYzOiBnZW4xMSsgKi8KLQlz d2l0Y2ggKGZiLT5mb3JtYXQtPmZvcm1hdCkgewotCWNhc2UgRFJNX0ZPUk1BVF9DODoKLQkJcmV0 dXJuIDE4OwotCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6Ci0JCXJldHVybiAxMDsKLQljYXNlIERS TV9GT1JNQVRfWFJHQjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4OgotCWNhc2UgRFJN X0ZPUk1BVF9BUkdCODg4ODoKLQljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6Ci0JY2FzZSBEUk1f Rk9STUFUX1hSR0IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoKLQljYXNl IERSTV9GT1JNQVRfQVJHQjIxMDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1IyMTAxMDEwOgot CWNhc2UgRFJNX0ZPUk1BVF9YVllVMjEwMTAxMDoKLQljYXNlIERSTV9GT1JNQVRfWTIxMjoKLQlj YXNlIERSTV9GT1JNQVRfWTIxNjoKLQkJcmV0dXJuIDY7Ci0JY2FzZSBEUk1fRk9STUFUX05WMTI6 Ci0JCXJldHVybiAyMDsKLQljYXNlIERSTV9GT1JNQVRfUDAxMDoKLQljYXNlIERSTV9GT1JNQVRf UDAxMjoKLQljYXNlIERSTV9GT1JNQVRfUDAxNjoKLQkJcmV0dXJuIDEyOwotCWNhc2UgRFJNX0ZP Uk1BVF9YUkdCMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGOgotCWNh c2UgRFJNX0ZPUk1BVF9BUkdCMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMTYxNjE2 MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTJfMTYxNjE2MTY6Ci0JY2FzZSBEUk1fRk9STUFU X1hWWVUxNjE2MTYxNjoKLQkJcmV0dXJuIDQ7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDE7Ci0JfQot fQotCi1zdGF0aWMgaW50IGljbF9wbGFuZV9tYXhfd2lkdGgoY29uc3Qgc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZmIsCi0JCQkgICAgICAgaW50IGNvbG9yX3BsYW5lLAotCQkJICAgICAgIHVuc2ln bmVkIGludCByb3RhdGlvbikKLXsKLQlyZXR1cm4gNTEyMDsKLX0KLQotc3RhdGljIGludCBza2xf cGxhbmVfbWF4X2hlaWdodChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKLQkJCQlp bnQgY29sb3JfcGxhbmUsCi0JCQkJdW5zaWduZWQgaW50IHJvdGF0aW9uKQotewotCXJldHVybiA0 MDk2OwotfQotCi1zdGF0aWMgaW50IGljbF9wbGFuZV9tYXhfaGVpZ2h0KGNvbnN0IHN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiLAotCQkJCWludCBjb2xvcl9wbGFuZSwKLQkJCQl1bnNpZ25lZCBp bnQgcm90YXRpb24pCi17Ci0JcmV0dXJuIDQzMjA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQK LXNrbF9wbGFuZV9tYXhfc3RyaWRlKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCi0JCSAgICAg dTMyIHBpeGVsX2Zvcm1hdCwgdTY0IG1vZGlmaWVyLAotCQkgICAgIHVuc2lnbmVkIGludCByb3Rh dGlvbikKLXsKLQljb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICppbmZvID0gZHJtX2Zvcm1h dF9pbmZvKHBpeGVsX2Zvcm1hdCk7Ci0JaW50IGNwcCA9IGluZm8tPmNwcFswXTsKLQotCS8qCi0J ICogIlRoZSBzdHJpZGUgaW4gYnl0ZXMgbXVzdCBub3QgZXhjZWVkIHRoZQotCSAqIG9mIHRoZSBz aXplIG9mIDhLIHBpeGVscyBhbmQgMzJLIGJ5dGVzLiIKLQkgKi8KLQlpZiAoZHJtX3JvdGF0aW9u XzkwX29yXzI3MChyb3RhdGlvbikpCi0JCXJldHVybiBtaW4oODE5MiwgMzI3NjggLyBjcHApOwot CWVsc2UKLQkJcmV0dXJuIG1pbig4MTkyICogY3BwLCAzMjc2OCk7Ci19Ci0KLXN0YXRpYyB2b2lk Cit2b2lkCiBza2xfcHJvZ3JhbV9zY2FsZXIoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKIAkJ ICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCiAJCSAgIGNvbnN0 IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCkBAIC02NDcsMzYyICs0NDIs NiBAQCBza2xfcHJvZ3JhbV9zY2FsZXIoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKIAkJCSAg KGNydGNfdyA8PCAxNikgfCBjcnRjX2gpOwogfQogCi0vKiBQcmVvZmZzZXQgdmFsdWVzIGZvciBZ VVYgdG8gUkdCIENvbnZlcnNpb24gKi8KLSNkZWZpbmUgUFJFT0ZGX1lVVl9UT19SR0JfSEkJCTB4 MTgwMAotI2RlZmluZSBQUkVPRkZfWVVWX1RPX1JHQl9NRQkJMHgxRjAwCi0jZGVmaW5lIFBSRU9G Rl9ZVVZfVE9fUkdCX0xPCQkweDE4MDAKLQotI2RlZmluZSAgUk9GRih4KSAgICAgICAgICAoKCh4 KSAmIDB4ZmZmZikgPDwgMTYpCi0jZGVmaW5lICBHT0ZGKHgpICAgICAgICAgICgoKHgpICYgMHhm ZmZmKSA8PCAwKQotI2RlZmluZSAgQk9GRih4KSAgICAgICAgICAoKCh4KSAmIDB4ZmZmZikgPDwg MTYpCi0KLXN0YXRpYyB2b2lkCi1pY2xfcHJvZ3JhbV9pbnB1dF9jc2Moc3RydWN0IGludGVsX3Bs YW5lICpwbGFuZSwKLQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNf c3RhdGUsCi0JCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3Rh dGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFu ZS0+YmFzZS5kZXYpOwotCWVudW0gcGlwZSBwaXBlID0gcGxhbmUtPnBpcGU7Ci0JZW51bSBwbGFu ZV9pZCBwbGFuZV9pZCA9IHBsYW5lLT5pZDsKLQotCXN0YXRpYyBjb25zdCB1MTYgaW5wdXRfY3Nj X21hdHJpeFtdWzldID0gewotCQkvKgotCQkgKiBCVC42MDEgZnVsbCByYW5nZSBZQ2JDciAtPiBm dWxsIHJhbmdlIFJHQgotCQkgKiBUaGUgbWF0cml4IHJlcXVpcmVkIGlzIDoKLQkJICogWzEuMDAw LCAwLjAwMCwgMS4zNzEsCi0JCSAqICAxLjAwMCwgLTAuMzM2LCAtMC42OTgsCi0JCSAqICAxLjAw MCwgMS43MzIsIDAuMDAwMF0KLQkJICovCi0JCVtEUk1fQ09MT1JfWUNCQ1JfQlQ2MDFdID0gewot CQkJMHg3QUY4LCAweDc4MDAsIDB4MCwKLQkJCTB4OEIyOCwgMHg3ODAwLCAweDlBQzAsCi0JCQkw eDAsIDB4NzgwMCwgMHg3REQ4LAotCQl9LAotCQkvKgotCQkgKiBCVC43MDkgZnVsbCByYW5nZSBZ Q2JDciAtPiBmdWxsIHJhbmdlIFJHQgotCQkgKiBUaGUgbWF0cml4IHJlcXVpcmVkIGlzIDoKLQkJ ICogWzEuMDAwLCAwLjAwMCwgMS41NzQsCi0JCSAqICAxLjAwMCwgLTAuMTg3LCAtMC40NjgsCi0J CSAqICAxLjAwMCwgMS44NTUsIDAuMDAwMF0KLQkJICovCi0JCVtEUk1fQ09MT1JfWUNCQ1JfQlQ3 MDldID0gewotCQkJMHg3Qzk4LCAweDc4MDAsIDB4MCwKLQkJCTB4OUVGOCwgMHg3ODAwLCAweEFD MDAsCi0JCQkweDAsIDB4NzgwMCwgIDB4N0VEOCwKLQkJfSwKLQkJLyoKLQkJICogQlQuMjAyMCBm dWxsIHJhbmdlIFlDYkNyIC0+IGZ1bGwgcmFuZ2UgUkdCCi0JCSAqIFRoZSBtYXRyaXggcmVxdWly ZWQgaXMgOgotCQkgKiBbMS4wMDAsIDAuMDAwLCAxLjQ3NCwKLQkJICogIDEuMDAwLCAtMC4xNjQ1 LCAtMC41NzEzLAotCQkgKiAgMS4wMDAsIDEuODgxNCwgMC4wMDAwXQotCQkgKi8KLQkJW0RSTV9D T0xPUl9ZQ0JDUl9CVDIwMjBdID0gewotCQkJMHg3QkM4LCAweDc4MDAsIDB4MCwKLQkJCTB4ODky OCwgMHg3ODAwLCAweEFBODgsCi0JCQkweDAsIDB4NzgwMCwgMHg3RjEwLAotCQl9LAotCX07Ci0K LQkvKiBNYXRyaXggZm9yIExpbWl0ZWQgUmFuZ2UgdG8gRnVsbCBSYW5nZSBDb252ZXJzaW9uICov Ci0Jc3RhdGljIGNvbnN0IHUxNiBpbnB1dF9jc2NfbWF0cml4X2xyW11bOV0gPSB7Ci0JCS8qCi0J CSAqIEJULjYwMSBMaW10ZWQgcmFuZ2UgWUNiQ3IgLT4gZnVsbCByYW5nZSBSR0IKLQkJICogVGhl IG1hdHJpeCByZXF1aXJlZCBpcyA6Ci0JCSAqIFsxLjE2NDM4NCwgMC4wMDAsIDEuNTk2MDI3LAot CQkgKiAgMS4xNjQzODQsIC0wLjM5MTc1LCAtMC44MTI4MTMsCi0JCSAqICAxLjE2NDM4NCwgMi4w MTcyMzIsIDAuMDAwMF0KLQkJICovCi0JCVtEUk1fQ09MT1JfWUNCQ1JfQlQ2MDFdID0gewotCQkJ MHg3Q0M4LCAweDc5NTAsIDB4MCwKLQkJCTB4OEQwMCwgMHg3OTUwLCAweDlDODgsCi0JCQkweDAs IDB4Nzk1MCwgMHg2ODEwLAotCQl9LAotCQkvKgotCQkgKiBCVC43MDkgTGltaXRlZCByYW5nZSBZ Q2JDciAtPiBmdWxsIHJhbmdlIFJHQgotCQkgKiBUaGUgbWF0cml4IHJlcXVpcmVkIGlzIDoKLQkJ ICogWzEuMTY0Mzg0LCAwLjAwMCwgMS43OTI3NDEsCi0JCSAqICAxLjE2NDM4NCwgLTAuMjEzMjQ5 LCAtMC41MzI5MDksCi0JCSAqICAxLjE2NDM4NCwgMi4xMTI0MDIsIDAuMDAwMF0KLQkJICovCi0J CVtEUk1fQ09MT1JfWUNCQ1JfQlQ3MDldID0gewotCQkJMHg3RTU4LCAweDc5NTAsIDB4MCwKLQkJ CTB4ODg4OCwgMHg3OTUwLCAweEFEQTgsCi0JCQkweDAsIDB4Nzk1MCwgIDB4Njg3MCwKLQkJfSwK LQkJLyoKLQkJICogQlQuMjAyMCBMaW1pdGVkIHJhbmdlIFlDYkNyIC0+IGZ1bGwgcmFuZ2UgUkdC Ci0JCSAqIFRoZSBtYXRyaXggcmVxdWlyZWQgaXMgOgotCQkgKiBbMS4xNjQsIDAuMDAwLCAxLjY3 OCwKLQkJICogIDEuMTY0LCAtMC4xODczLCAtMC42NTA0LAotCQkgKiAgMS4xNjQsIDIuMTQxNywg MC4wMDAwXQotCQkgKi8KLQkJW0RSTV9DT0xPUl9ZQ0JDUl9CVDIwMjBdID0gewotCQkJMHg3RDcw LCAweDc5NTAsIDB4MCwKLQkJCTB4OEE2OCwgMHg3OTUwLCAweEFDMDAsCi0JCQkweDAsIDB4Nzk1 MCwgMHg2ODkwLAotCQl9LAotCX07Ci0JY29uc3QgdTE2ICpjc2M7Ci0KLQlpZiAocGxhbmVfc3Rh dGUtPmh3LmNvbG9yX3JhbmdlID09IERSTV9DT0xPUl9ZQ0JDUl9GVUxMX1JBTkdFKQotCQljc2Mg PSBpbnB1dF9jc2NfbWF0cml4W3BsYW5lX3N0YXRlLT5ody5jb2xvcl9lbmNvZGluZ107Ci0JZWxz ZQotCQljc2MgPSBpbnB1dF9jc2NfbWF0cml4X2xyW3BsYW5lX3N0YXRlLT5ody5jb2xvcl9lbmNv ZGluZ107Ci0KLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1NDX0NP RUZGKHBpcGUsIHBsYW5lX2lkLCAwKSwKLQkJCSAgUk9GRihjc2NbMF0pIHwgR09GRihjc2NbMV0p KTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1NDX0NPRUZGKHBp cGUsIHBsYW5lX2lkLCAxKSwKLQkJCSAgQk9GRihjc2NbMl0pKTsKLQlpbnRlbF9kZV93cml0ZV9m dyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCAyKSwKLQkJ CSAgUk9GRihjc2NbM10pIHwgR09GRihjc2NbNF0pKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZf cHJpdiwgUExBTkVfSU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCAzKSwKLQkJCSAgQk9G Rihjc2NbNV0pKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1ND X0NPRUZGKHBpcGUsIHBsYW5lX2lkLCA0KSwKLQkJCSAgUk9GRihjc2NbNl0pIHwgR09GRihjc2Nb N10pKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1NDX0NPRUZG KHBpcGUsIHBsYW5lX2lkLCA1KSwKLQkJCSAgQk9GRihjc2NbOF0pKTsKLQotCWludGVsX2RlX3dy aXRlX2Z3KGRldl9wcml2LCBQTEFORV9JTlBVVF9DU0NfUFJFT0ZGKHBpcGUsIHBsYW5lX2lkLCAw KSwKLQkJCSAgUFJFT0ZGX1lVVl9UT19SR0JfSEkpOwotCWlmIChwbGFuZV9zdGF0ZS0+aHcuY29s b3JfcmFuZ2UgPT0gRFJNX0NPTE9SX1lDQkNSX0ZVTExfUkFOR0UpCi0JCWludGVsX2RlX3dyaXRl X2Z3KGRldl9wcml2LAotCQkJCSAgUExBTkVfSU5QVVRfQ1NDX1BSRU9GRihwaXBlLCBwbGFuZV9p ZCwgMSksCi0JCQkJICAwKTsKLQllbHNlCi0JCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LAot CQkJCSAgUExBTkVfSU5QVVRfQ1NDX1BSRU9GRihwaXBlLCBwbGFuZV9pZCwgMSksCi0JCQkJICBQ UkVPRkZfWVVWX1RPX1JHQl9NRSk7Ci0JaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5F X0lOUFVUX0NTQ19QUkVPRkYocGlwZSwgcGxhbmVfaWQsIDIpLAotCQkJICBQUkVPRkZfWVVWX1RP X1JHQl9MTyk7Ci0JaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsCi0JCQkgIFBMQU5FX0lOUFVU X0NTQ19QT1NUT0ZGKHBpcGUsIHBsYW5lX2lkLCAwKSwgMHgwKTsKLQlpbnRlbF9kZV93cml0ZV9m dyhkZXZfcHJpdiwKLQkJCSAgUExBTkVfSU5QVVRfQ1NDX1BPU1RPRkYocGlwZSwgcGxhbmVfaWQs IDEpLCAweDApOwotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LAotCQkJICBQTEFORV9JTlBV VF9DU0NfUE9TVE9GRihwaXBlLCBwbGFuZV9pZCwgMiksIDB4MCk7Ci19Ci0KLXN0YXRpYyB2b2lk Ci1za2xfcGxhbmVfYXN5bmNfZmxpcChzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAotCQkgICAg IGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkgICAgIGNvbnN0 IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCi0JCSAgICAgYm9vbCBhc3lu Y19mbGlwKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUo cGxhbmUtPmJhc2UuZGV2KTsKLQl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwotCWVudW0gcGxhbmVf aWQgcGxhbmVfaWQgPSBwbGFuZS0+aWQ7Ci0JZW51bSBwaXBlIHBpcGUgPSBwbGFuZS0+cGlwZTsK LQl1MzIgc3VyZl9hZGRyID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLm9mZnNldDsKLQl1 MzIgcGxhbmVfY3RsID0gcGxhbmVfc3RhdGUtPmN0bDsKLQotCXBsYW5lX2N0bCB8PSBza2xfcGxh bmVfY3RsX2NydGMoY3J0Y19zdGF0ZSk7Ci0KLQlpZiAoYXN5bmNfZmxpcCkKLQkJcGxhbmVfY3Rs IHw9IFBMQU5FX0NUTF9BU1lOQ19GTElQOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2 LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwotCi0JaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYs IFBMQU5FX0NUTChwaXBlLCBwbGFuZV9pZCksIHBsYW5lX2N0bCk7Ci0JaW50ZWxfZGVfd3JpdGVf ZncoZGV2X3ByaXYsIFBMQU5FX1NVUkYocGlwZSwgcGxhbmVfaWQpLAotCQkJICBpbnRlbF9wbGFu ZV9nZ3R0X29mZnNldChwbGFuZV9zdGF0ZSkgKyBzdXJmX2FkZHIpOwotCi0Jc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Ci19Ci0KLXN0YXRp YyB2b2lkCi1za2xfcHJvZ3JhbV9wbGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAotCQkg IGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkgIGNvbnN0IHN0 cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCi0JCSAgaW50IGNvbG9yX3BsYW5l KQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUt PmJhc2UuZGV2KTsKLQllbnVtIHBsYW5lX2lkIHBsYW5lX2lkID0gcGxhbmUtPmlkOwotCWVudW0g cGlwZSBwaXBlID0gcGxhbmUtPnBpcGU7Ci0JY29uc3Qgc3RydWN0IGRybV9pbnRlbF9zcHJpdGVf Y29sb3JrZXkgKmtleSA9ICZwbGFuZV9zdGF0ZS0+Y2tleTsKLQl1MzIgc3VyZl9hZGRyID0gcGxh bmVfc3RhdGUtPmNvbG9yX3BsYW5lW2NvbG9yX3BsYW5lXS5vZmZzZXQ7Ci0JdTMyIHN0cmlkZSA9 IHNrbF9wbGFuZV9zdHJpZGUocGxhbmVfc3RhdGUsIGNvbG9yX3BsYW5lKTsKLQljb25zdCBzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKLQlpbnQgYXV4X3Bs YW5lID0gaW50ZWxfbWFpbl90b19hdXhfcGxhbmUoZmIsIGNvbG9yX3BsYW5lKTsKLQlpbnQgY3J0 Y194ID0gcGxhbmVfc3RhdGUtPnVhcGkuZHN0LngxOwotCWludCBjcnRjX3kgPSBwbGFuZV9zdGF0 ZS0+dWFwaS5kc3QueTE7Ci0JdTMyIHggPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY29sb3Jf cGxhbmVdLng7Ci0JdTMyIHkgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY29sb3JfcGxhbmVd Lnk7Ci0JdTMyIHNyY193ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLnNyYykg Pj4gMTY7Ci0JdTMyIHNyY19oID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5z cmMpID4+IDE2OwotCXU4IGFscGhhID0gcGxhbmVfc3RhdGUtPmh3LmFscGhhID4+IDg7Ci0JdTMy IHBsYW5lX2NvbG9yX2N0bCA9IDAsIGF1eF9kaXN0ID0gMDsKLQl1bnNpZ25lZCBsb25nIGlycWZs YWdzOwotCXUzMiBrZXltc2ssIGtleW1heDsKLQl1MzIgcGxhbmVfY3RsID0gcGxhbmVfc3RhdGUt PmN0bDsKLQotCXBsYW5lX2N0bCB8PSBza2xfcGxhbmVfY3RsX2NydGMoY3J0Y19zdGF0ZSk7Ci0K LQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklMQUtFKGRldl9wcml2 KSkKLQkJcGxhbmVfY29sb3JfY3RsID0gcGxhbmVfc3RhdGUtPmNvbG9yX2N0bCB8Ci0JCQlnbGtf cGxhbmVfY29sb3JfY3RsX2NydGMoY3J0Y19zdGF0ZSk7Ci0KLQkvKiBTaXplcyBhcmUgMCBiYXNl ZCAqLwotCXNyY193LS07Ci0Jc3JjX2gtLTsKLQotCWtleW1heCA9IChrZXktPm1heF92YWx1ZSAm IDB4ZmZmZmZmKSB8IFBMQU5FX0tFWU1BWF9BTFBIQShhbHBoYSk7Ci0KLQlrZXltc2sgPSBrZXkt PmNoYW5uZWxfbWFzayAmIDB4N2ZmZmZmZjsKLQlpZiAoYWxwaGEgPCAweGZmKQotCQlrZXltc2sg fD0gUExBTkVfS0VZTVNLX0FMUEhBX0VOQUJMRTsKLQotCS8qIFRoZSBzY2FsZXIgd2lsbCBoYW5k bGUgdGhlIG91dHB1dCBwb3NpdGlvbiAqLwotCWlmIChwbGFuZV9zdGF0ZS0+c2NhbGVyX2lkID49 IDApIHsKLQkJY3J0Y194ID0gMDsKLQkJY3J0Y195ID0gMDsKLQl9Ci0KLQlpZiAoYXV4X3BsYW5l KSB7Ci0JCWF1eF9kaXN0ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2F1eF9wbGFuZV0ub2Zm c2V0IC0gc3VyZl9hZGRyOwotCi0JCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgMTIpCi0JCQlh dXhfZGlzdCB8PSBza2xfcGxhbmVfc3RyaWRlKHBsYW5lX3N0YXRlLCBhdXhfcGxhbmUpOwotCX0K LQotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsK LQotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9TVFJJREUocGlwZSwgcGxhbmVf aWQpLCBzdHJpZGUpOwotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9QT1MocGlw ZSwgcGxhbmVfaWQpLAotCQkJICAoY3J0Y195IDw8IDE2KSB8IGNydGNfeCk7Ci0JaW50ZWxfZGVf d3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX1NJWkUocGlwZSwgcGxhbmVfaWQpLAotCQkJICAoc3Jj X2ggPDwgMTYpIHwgc3JjX3cpOwotCi0JaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5F X0FVWF9ESVNUKHBpcGUsIHBsYW5lX2lkKSwgYXV4X2Rpc3QpOwotCi0JaWYgKGljbF9pc19oZHJf cGxhbmUoZGV2X3ByaXYsIHBsYW5lX2lkKSkKLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYs IFBMQU5FX0NVU19DVEwocGlwZSwgcGxhbmVfaWQpLAotCQkJCSAgcGxhbmVfc3RhdGUtPmN1c19j dGwpOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShk ZXZfcHJpdikpCi0JCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9DT0xPUl9DVEwo cGlwZSwgcGxhbmVfaWQpLAotCQkJCSAgcGxhbmVfY29sb3JfY3RsKTsKLQotCWlmIChmYi0+Zm9y bWF0LT5pc195dXYgJiYgaWNsX2lzX2hkcl9wbGFuZShkZXZfcHJpdiwgcGxhbmVfaWQpKQotCQlp Y2xfcHJvZ3JhbV9pbnB1dF9jc2MocGxhbmUsIGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKLQot CWlmIChmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NT X0NDKQotCQlpbnRlbF91bmNvcmVfd3JpdGU2NF9mdygmZGV2X3ByaXYtPnVuY29yZSwKLQkJCQkJ UExBTkVfQ0NfVkFMKHBpcGUsIHBsYW5lX2lkKSwgcGxhbmVfc3RhdGUtPmNjdmFsKTsKLQotCXNr bF93cml0ZV9wbGFuZV93bShwbGFuZSwgY3J0Y19zdGF0ZSk7Ci0KLQlpbnRlbF9kZV93cml0ZV9m dyhkZXZfcHJpdiwgUExBTkVfS0VZVkFMKHBpcGUsIHBsYW5lX2lkKSwKLQkJCSAga2V5LT5taW5f dmFsdWUpOwotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9LRVlNU0socGlwZSwg cGxhbmVfaWQpLCBrZXltc2spOwotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9L RVlNQVgocGlwZSwgcGxhbmVfaWQpLCBrZXltYXgpOwotCi0JaW50ZWxfZGVfd3JpdGVfZncoZGV2 X3ByaXYsIFBMQU5FX09GRlNFVChwaXBlLCBwbGFuZV9pZCksCi0JCQkgICh5IDw8IDE2KSB8IHgp OwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCAxMSkKLQkJaW50ZWxfZGVfd3JpdGVfZnco ZGV2X3ByaXYsIFBMQU5FX0FVWF9PRkZTRVQocGlwZSwgcGxhbmVfaWQpLAotCQkJCSAgKHBsYW5l X3N0YXRlLT5jb2xvcl9wbGFuZVsxXS55IDw8IDE2KSB8IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFu ZVsxXS54KTsKLQotCWlmICghZHJtX2F0b21pY19jcnRjX25lZWRzX21vZGVzZXQoJmNydGNfc3Rh dGUtPnVhcGkpKQotCQlpbnRlbF9wc3IyX3Byb2dyYW1fcGxhbmVfc2VsX2ZldGNoKHBsYW5lLCBj cnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSwgY29sb3JfcGxhbmUpOwotCi0JLyoKLQkgKiBUaGUgY29u dHJvbCByZWdpc3RlciBzZWxmLWFybXMgaWYgdGhlIHBsYW5lIHdhcyBwcmV2aW91c2x5Ci0JICog ZGlzYWJsZWQuIFRyeSB0byBtYWtlIHRoZSBwbGFuZSBlbmFibGUgYXRvbWljIGJ5IHdyaXRpbmcK LQkgKiB0aGUgY29udHJvbCByZWdpc3RlciBqdXN0IGJlZm9yZSB0aGUgc3VyZmFjZSByZWdpc3Rl ci4KLQkgKi8KLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfQ1RMKHBpcGUsIHBs YW5lX2lkKSwgcGxhbmVfY3RsKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVf U1VSRihwaXBlLCBwbGFuZV9pZCksCi0JCQkgIGludGVsX3BsYW5lX2dndHRfb2Zmc2V0KHBsYW5l X3N0YXRlKSArIHN1cmZfYWRkcik7Ci0KLQlpZiAocGxhbmVfc3RhdGUtPnNjYWxlcl9pZCA+PSAw KQotCQlza2xfcHJvZ3JhbV9zY2FsZXIocGxhbmUsIGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsK LQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxh Z3MpOwotfQotCi1zdGF0aWMgdm9pZAotc2tsX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgaW50ZWxfcGxh bmUgKnBsYW5lLAotCQkgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUs Ci0JCSBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCWlu dCBjb2xvcl9wbGFuZSA9IDA7Ci0KLQlpZiAocGxhbmVfc3RhdGUtPnBsYW5hcl9saW5rZWRfcGxh bmUgJiYgIXBsYW5lX3N0YXRlLT5wbGFuYXJfc2xhdmUpCi0JCS8qIFByb2dyYW0gdGhlIFVWIHBs YW5lIG9uIHBsYW5hciBtYXN0ZXIgKi8KLQkJY29sb3JfcGxhbmUgPSAxOwotCi0Jc2tsX3Byb2dy YW1fcGxhbmUocGxhbmUsIGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlLCBjb2xvcl9wbGFuZSk7Ci19 Ci1zdGF0aWMgdm9pZAotc2tsX2Rpc2FibGVfcGxhbmUoc3RydWN0IGludGVsX3BsYW5lICpwbGFu ZSwKLQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRl dik7Ci0JZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHBsYW5lLT5pZDsKLQllbnVtIHBpcGUgcGlw ZSA9IHBsYW5lLT5waXBlOwotCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7Ci0KLQlzcGluX2xvY2tf aXJxc2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Ci0KLQlpZiAoaWNsX2lz X2hkcl9wbGFuZShkZXZfcHJpdiwgcGxhbmVfaWQpKQotCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZf cHJpdiwgUExBTkVfQ1VTX0NUTChwaXBlLCBwbGFuZV9pZCksIDApOwotCi0Jc2tsX3dyaXRlX3Bs YW5lX3dtKHBsYW5lLCBjcnRjX3N0YXRlKTsKLQotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2 LCBQTEFORV9DVEwocGlwZSwgcGxhbmVfaWQpLCAwKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZf cHJpdiwgUExBTkVfU1VSRihwaXBlLCBwbGFuZV9pZCksIDApOwotCi0Jc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Ci19Ci0KLXN0YXRpYyBi b29sCi1za2xfcGxhbmVfZ2V0X2h3X3N0YXRlKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCi0J CSAgICAgICBlbnVtIHBpcGUgKnBpcGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwotCWVudW0gaW50ZWxfZGlzcGxheV9w b3dlcl9kb21haW4gcG93ZXJfZG9tYWluOwotCWVudW0gcGxhbmVfaWQgcGxhbmVfaWQgPSBwbGFu ZS0+aWQ7Ci0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Ci0JYm9vbCByZXQ7Ci0KLQlwb3dlcl9k b21haW4gPSBQT1dFUl9ET01BSU5fUElQRShwbGFuZS0+cGlwZSk7Ci0Jd2FrZXJlZiA9IGludGVs X2Rpc3BsYXlfcG93ZXJfZ2V0X2lmX2VuYWJsZWQoZGV2X3ByaXYsIHBvd2VyX2RvbWFpbik7Ci0J aWYgKCF3YWtlcmVmKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXQgPSBpbnRlbF9kZV9yZWFkKGRl dl9wcml2LCBQTEFORV9DVEwocGxhbmUtPnBpcGUsIHBsYW5lX2lkKSkgJiBQTEFORV9DVExfRU5B QkxFOwotCi0JKnBpcGUgPSBwbGFuZS0+cGlwZTsKLQotCWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0 KGRldl9wcml2LCBwb3dlcl9kb21haW4sIHdha2VyZWYpOwotCi0JcmV0dXJuIHJldDsKLX0KLQot c3RhdGljIHZvaWQKLXNrbF9wbGFuZV9lbmFibGVfZmxpcF9kb25lKHN0cnVjdCBpbnRlbF9wbGFu ZSAqcGxhbmUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KHBs YW5lLT5iYXNlLmRldik7Ci0JZW51bSBwaXBlIHBpcGUgPSBwbGFuZS0+cGlwZTsKLQotCXNwaW5f bG9ja19pcnEoJmk5MTUtPmlycV9sb2NrKTsKLQliZHdfZW5hYmxlX3BpcGVfaXJxKGk5MTUsIHBp cGUsIEdFTjlfUElQRV9QTEFORV9GTElQX0RPTkUocGxhbmUtPmlkKSk7Ci0Jc3Bpbl91bmxvY2tf aXJxKCZpOTE1LT5pcnFfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1za2xfcGxhbmVfZGlzYWJs ZV9mbGlwX2RvbmUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKLQllbnVtIHBpcGUg cGlwZSA9IHBsYW5lLT5waXBlOwotCi0Jc3Bpbl9sb2NrX2lycSgmaTkxNS0+aXJxX2xvY2spOwot CWJkd19kaXNhYmxlX3BpcGVfaXJxKGk5MTUsIHBpcGUsIEdFTjlfUElQRV9QTEFORV9GTElQX0RP TkUocGxhbmUtPmlkKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZpOTE1LT5pcnFfbG9jayk7Ci19Ci0K IHN0YXRpYyB2b2lkIGk5eHhfcGxhbmVfbGluZWFyX2dhbW1hKHUxNiBnYW1tYVs4XSkKIHsKIAkv KiBUaGUgcG9pbnRzIGFyZSBub3QgZXZlbmx5IHNwYWNlZC4gKi8KQEAgLTIzMjcsMjQwICsxNzY2 LDYgQEAgdmx2X3Nwcml0ZV9jaGVjayhzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGJvb2wgaW50ZWxfZm9ybWF0X2lzX3AwMXgodTMy IGZvcm1hdCkKLXsKLQlzd2l0Y2ggKGZvcm1hdCkgewotCWNhc2UgRFJNX0ZPUk1BVF9QMDEwOgot CWNhc2UgRFJNX0ZPUk1BVF9QMDEyOgotCWNhc2UgRFJNX0ZPUk1BVF9QMDE2OgotCQlyZXR1cm4g dHJ1ZTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gZmFsc2U7Ci0JfQotfQotCi1zdGF0aWMgaW50IHNr bF9wbGFuZV9jaGVja19mYihjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUp Ci17Ci0Jc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0 YXRlLT51YXBpLnBsYW5lKTsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0 b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Ci0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Ci0JdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVf c3RhdGUtPmh3LnJvdGF0aW9uOwotCXN0cnVjdCBkcm1fZm9ybWF0X25hbWVfYnVmIGZvcm1hdF9u YW1lOwotCi0JaWYgKCFmYikKLQkJcmV0dXJuIDA7Ci0KLQlpZiAocm90YXRpb24gJiB+KERSTV9N T0RFX1JPVEFURV8wIHwgRFJNX01PREVfUk9UQVRFXzE4MCkgJiYKLQkgICAgaXNfY2NzX21vZGlm aWVyKGZiLT5tb2RpZmllcikpIHsKLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkg ICAgIlJDIHN1cHBvcnQgb25seSB3aXRoIDAvMTgwIGRlZ3JlZSByb3RhdGlvbiAoJXgpXG4iLAot CQkJICAgIHJvdGF0aW9uKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHJvdGF0aW9u ICYgRFJNX01PREVfUkVGTEVDVF9YICYmCi0JICAgIGZiLT5tb2RpZmllciA9PSBEUk1fRk9STUFU X01PRF9MSU5FQVIpIHsKLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkgICAgImhv cml6b250YWwgZmxpcCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggbGluZWFyIHN1cmZhY2UgZm9ybWF0 c1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChkcm1fcm90YXRpb25fOTBfb3Jf MjcwKHJvdGF0aW9uKSkgewotCQlpZiAoZmItPm1vZGlmaWVyICE9IEk5MTVfRk9STUFUX01PRF9Z X1RJTEVEICYmCi0JCSAgICBmYi0+bW9kaWZpZXIgIT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVE KSB7Ci0JCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCQkgICAgIlkvWWYgdGlsaW5n IHJlcXVpcmVkIGZvciA5MC8yNzAhXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJ LyoKLQkJICogOTAvMjcwIGlzIG5vdCBhbGxvd2VkIHdpdGggUkdCNjQgMTY6MTY6MTY6MTYgYW5k Ci0JCSAqIEluZGV4ZWQgOC1iaXQuIFJHQiAxNi1iaXQgNTo2OjUgaXMgYWxsb3dlZCBnZW4xMSBv bndhcmRzLgotCQkgKi8KLQkJc3dpdGNoIChmYi0+Zm9ybWF0LT5mb3JtYXQpIHsKLQkJY2FzZSBE Uk1fRk9STUFUX1JHQjU2NToKLQkJCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExKQotCQkJ CWJyZWFrOwotCQkJZmFsbHRocm91Z2g7Ci0JCWNhc2UgRFJNX0ZPUk1BVF9DODoKLQkJY2FzZSBE Uk1fRk9STUFUX1hSR0IxNjE2MTYxNkY6Ci0JCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZG OgotCQljYXNlIERSTV9GT1JNQVRfQVJHQjE2MTYxNjE2RjoKLQkJY2FzZSBEUk1fRk9STUFUX0FC R1IxNjE2MTYxNkY6Ci0JCWNhc2UgRFJNX0ZPUk1BVF9ZMjEwOgotCQljYXNlIERSTV9GT1JNQVRf WTIxMjoKLQkJY2FzZSBEUk1fRk9STUFUX1kyMTY6Ci0JCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTJf MTYxNjE2MTY6Ci0JCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTYxNjE2MTY6Ci0JCQlkcm1fZGJnX2tt cygmZGV2X3ByaXYtPmRybSwKLQkJCQkgICAgIlVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdCAlcyBm b3IgOTAvMjcwIVxuIiwKLQkJCQkgICAgZHJtX2dldF9mb3JtYXRfbmFtZShmYi0+Zm9ybWF0LT5m b3JtYXQsCi0JCQkJCQkJJmZvcm1hdF9uYW1lKSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJZGVm YXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JLyogWS10aWxpbmcgaXMgbm90IHN1cHBvcnRl ZCBpbiBJRi1JRCBJbnRlcmxhY2UgbW9kZSAqLwotCWlmIChjcnRjX3N0YXRlLT5ody5lbmFibGUg JiYKLQkgICAgY3J0Y19zdGF0ZS0+aHcuYWRqdXN0ZWRfbW9kZS5mbGFncyAmIERSTV9NT0RFX0ZM QUdfSU5URVJMQUNFICYmCi0JICAgIChmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lf VElMRUQgfHwKLQkgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQg fHwKLQkgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1MgfHwK LQkgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTIHx8Ci0J ICAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NT IHx8Ci0JICAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJf TUNfQ0NTIHx8Ci0JICAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURf R0VOMTJfUkNfQ0NTX0NDKSkgewotCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCSAg ICAiWS9ZZiB0aWxpbmcgbm90IHN1cHBvcnRlZCBpbiBJRi1JRCBtb2RlXG4iKTsKLQkJcmV0dXJu IC1FSU5WQUw7Ci0JfQotCi0JLyogV2FfMTYwNjA1NDE4ODp0Z2wgKi8KLQlpZiAoSVNfVElHRVJM QUtFKGRldl9wcml2KSAmJgotCSAgICBwbGFuZV9zdGF0ZS0+Y2tleS5mbGFncyAmIEk5MTVfU0VU X0NPTE9SS0VZX1NPVVJDRSAmJgotCSAgICBpbnRlbF9mb3JtYXRfaXNfcDAxeChmYi0+Zm9ybWF0 LT5mb3JtYXQpKSB7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJICAgICJTb3Vy Y2UgY29sb3Iga2V5aW5nIG5vdCBzdXBwb3J0ZWQgd2l0aCBQMDF4IGZvcm1hdHNcbiIpOwotCQly ZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBza2xfcGxh bmVfY2hlY2tfZHN0X2Nvb3JkaW5hdGVzKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlLAotCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9Ci0JCXRvX2k5 MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7Ci0JaW50IGNydGNfeCA9IHBsYW5lX3N0 YXRlLT51YXBpLmRzdC54MTsKLQlpbnQgY3J0Y193ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0 YXRlLT51YXBpLmRzdCk7Ci0JaW50IHBpcGVfc3JjX3cgPSBjcnRjX3N0YXRlLT5waXBlX3NyY193 OwotCi0JLyoKLQkgKiBEaXNwbGF5IFdBICMxMTc1OiBjbmwsZ2xrCi0JICogUGxhbmVzIG90aGVy IHRoYW4gdGhlIGN1cnNvciBtYXkgY2F1c2UgRklGTyB1bmRlcmZsb3cgYW5kIGRpc3BsYXkKLQkg KiBjb3JydXB0aW9uIGlmIHN0YXJ0aW5nIGxlc3MgdGhhbiA0IHBpeGVscyBmcm9tIHRoZSByaWdo dCBlZGdlIG9mCi0JICogdGhlIHNjcmVlbi4KLQkgKiBCZXNpZGVzIHRoZSBhYm92ZSBXQSBmaXgg dGhlIHNpbWlsYXIgcHJvYmxlbSwgd2hlcmUgcGxhbmVzIG90aGVyCi0JICogdGhhbiB0aGUgY3Vy c29yIGVuZGluZyBsZXNzIHRoYW4gNCBwaXhlbHMgZnJvbSB0aGUgbGVmdCBlZGdlIG9mIHRoZQot CSAqIHNjcmVlbiBtYXkgY2F1c2UgRklGTyB1bmRlcmZsb3cgYW5kIGRpc3BsYXkgY29ycnVwdGlv bi4KLQkgKi8KLQlpZiAoKElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpIHx8IElTX0NBTk5PTkxBS0Uo ZGV2X3ByaXYpKSAmJgotCSAgICAoY3J0Y194ICsgY3J0Y193IDwgNCB8fCBjcnRjX3ggPiBwaXBl X3NyY193IC0gNCkpIHsKLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkgICAgInJl cXVlc3RlZCBwbGFuZSBYICVzIHBvc2l0aW9uICVkIGludmFsaWQgKHZhbGlkIHJhbmdlICVkLSVk KVxuIiwKLQkJCSAgICBjcnRjX3ggKyBjcnRjX3cgPCA0ID8gImVuZCIgOiAic3RhcnQiLAotCQkJ ICAgIGNydGNfeCArIGNydGNfdyA8IDQgPyBjcnRjX3ggKyBjcnRjX3cgOiBjcnRjX3gsCi0JCQkg ICAgNCwgcGlwZV9zcmNfdyAtIDQpOwotCQlyZXR1cm4gLUVSQU5HRTsKLQl9Ci0KLQlyZXR1cm4g MDsKLX0KLQotc3RhdGljIGludCBza2xfcGxhbmVfY2hlY2tfbnYxMl9yb3RhdGlvbihjb25zdCBz dHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCWNvbnN0IHN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCXVuc2lnbmVkIGludCBy b3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbjsKLQlpbnQgc3JjX3cgPSBkcm1fcmVj dF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjKSA+PiAxNjsKLQotCS8qIERpc3BsYXkgV0Eg IzExMDYgKi8KLQlpZiAoaW50ZWxfZm9ybWF0X2luZm9faXNfeXV2X3NlbWlwbGFuYXIoZmItPmZv cm1hdCwgZmItPm1vZGlmaWVyKSAmJgotCSAgICBzcmNfdyAmIDMgJiYKLQkgICAgKHJvdGF0aW9u ID09IERSTV9NT0RFX1JPVEFURV8yNzAgfHwKLQkgICAgIHJvdGF0aW9uID09IChEUk1fTU9ERV9S RUZMRUNUX1ggfCBEUk1fTU9ERV9ST1RBVEVfOTApKSkgewotCQlEUk1fREVCVUdfS01TKCJzcmMg d2lkdGggbXVzdCBiZSBtdWx0aXBsZSBvZiA0IGZvciByb3RhdGVkIHBsYW5hciBZVVZcbiIpOwot CQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBza2xf cGxhbmVfbWF4X3NjYWxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCSAg ICAgICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKLXsKLQkvKgotCSAqIFdlIGRv bid0IHlldCBrbm93IHRoZSBmaW5hbCBzb3VyY2Ugd2lkdGggbm9yCi0JICogd2hldGhlciB3ZSBj YW4gdXNlIHRoZSBIUSBzY2FsZXIgbW9kZS4gQXNzdW1lCi0JICogdGhlIGJlc3QgY2FzZS4KLQkg KiBGSVhNRSBuZWVkIHRvIHByb3Blcmx5IGNoZWNrIHRoaXMgbGF0ZXIuCi0JICovCi0JaWYgKElO VEVMX0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikgfHwKLQkg ICAgIWludGVsX2Zvcm1hdF9pbmZvX2lzX3l1dl9zZW1pcGxhbmFyKGZiLT5mb3JtYXQsIGZiLT5t b2RpZmllcikpCi0JCXJldHVybiAweDMwMDAwIC0gMTsKLQllbHNlCi0JCXJldHVybiAweDIwMDAw IC0gMTsKLX0KLQotc3RhdGljIGludCBza2xfcGxhbmVfY2hlY2soc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUsCi0JCQkgICBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlKQotewotCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShw bGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwotCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCWludCBtaW5fc2NhbGUgPSBEUk1fUExB TkVfSEVMUEVSX05PX1NDQUxJTkc7Ci0JaW50IG1heF9zY2FsZSA9IERSTV9QTEFORV9IRUxQRVJf Tk9fU0NBTElORzsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc2tsX3BsYW5lX2NoZWNrX2ZiKGNydGNf c3RhdGUsIHBsYW5lX3N0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogdXNl IHNjYWxlciB3aGVuIGNvbG9ya2V5IGlzIG5vdCByZXF1aXJlZCAqLwotCWlmICghcGxhbmVfc3Rh dGUtPmNrZXkuZmxhZ3MgJiYgaW50ZWxfZmJfc2NhbGFibGUoZmIpKSB7Ci0JCW1pbl9zY2FsZSA9 IDE7Ci0JCW1heF9zY2FsZSA9IHNrbF9wbGFuZV9tYXhfc2NhbGUoZGV2X3ByaXYsIGZiKTsKLQl9 Ci0KLQlyZXQgPSBpbnRlbF9hdG9taWNfcGxhbmVfY2hlY2tfY2xpcHBpbmcocGxhbmVfc3RhdGUs IGNydGNfc3RhdGUsCi0JCQkJCQltaW5fc2NhbGUsIG1heF9zY2FsZSwgdHJ1ZSk7Ci0JaWYgKHJl dCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHNrbF9jaGVja19wbGFuZV9zdXJmYWNlKHBsYW5l X3N0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKCFwbGFuZV9zdGF0ZS0+ dWFwaS52aXNpYmxlKQotCQlyZXR1cm4gMDsKLQotCXJldCA9IHNrbF9wbGFuZV9jaGVja19kc3Rf Y29vcmRpbmF0ZXMoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOwotCWlmIChyZXQpCi0JCXJldHVy biByZXQ7Ci0KLQlyZXQgPSBpbnRlbF9wbGFuZV9jaGVja19zcmNfY29vcmRpbmF0ZXMocGxhbmVf c3RhdGUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBza2xfcGxhbmVfY2hl Y2tfbnYxMl9yb3RhdGlvbihwbGFuZV9zdGF0ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsK LQotCS8qIEhXIG9ubHkgaGFzIDggYml0cyBwaXhlbCBwcmVjaXNpb24sIGRpc2FibGUgcGxhbmUg aWYgaW52aXNpYmxlICovCi0JaWYgKCEocGxhbmVfc3RhdGUtPmh3LmFscGhhID4+IDgpKQotCQlw bGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlID0gZmFsc2U7Ci0KLQlwbGFuZV9zdGF0ZS0+Y3RsID0g c2tsX3BsYW5lX2N0bChjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7Ci0KLQlpZiAoSU5URUxfR0VO KGRldl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklMQUtFKGRldl9wcml2KSkKLQkJcGxhbmVfc3Rh dGUtPmNvbG9yX2N0bCA9IGdsa19wbGFuZV9jb2xvcl9jdGwoY3J0Y19zdGF0ZSwKLQkJCQkJCQkg ICAgIHBsYW5lX3N0YXRlKTsKLQotCWlmIChpbnRlbF9mb3JtYXRfaW5mb19pc195dXZfc2VtaXBs YW5hcihmYi0+Zm9ybWF0LCBmYi0+bW9kaWZpZXIpICYmCi0JICAgIGljbF9pc19oZHJfcGxhbmUo ZGV2X3ByaXYsIHBsYW5lLT5pZCkpCi0JCS8qIEVuYWJsZSBhbmQgdXNlIE1QRUctMiBjaHJvbWEg c2l0aW5nICovCi0JCXBsYW5lX3N0YXRlLT5jdXNfY3RsID0gUExBTkVfQ1VTX0VOQUJMRSB8Ci0J CQlQTEFORV9DVVNfSFBIQVNFXzAgfAotCQkJUExBTkVfQ1VTX1ZQSEFTRV9TSUdOX05FR0FUSVZF IHwgUExBTkVfQ1VTX1ZQSEFTRV8wXzI1OwotCWVsc2UKLQkJcGxhbmVfc3RhdGUtPmN1c19jdGwg PSAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBib29sIGhhc19kc3Rfa2V5X2luX3ByaW1h cnlfcGxhbmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewogCXJldHVybiBJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDk7CkBAIC0yNzM4LDE4NiArMTk0Myw2IEBAIHN0YXRpYyBj b25zdCB1MzIgY2h2X3BpcGVfYl9zcHJpdGVfZm9ybWF0c1tdID0gewogCURSTV9GT1JNQVRfVllV WSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgc2tsX3BsYW5lX2Zvcm1hdHNbXSA9IHsKLQlEUk1f Rk9STUFUX0M4LAotCURSTV9GT1JNQVRfUkdCNTY1LAotCURSTV9GT1JNQVRfWFJHQjg4ODgsCi0J RFJNX0ZPUk1BVF9YQkdSODg4OCwKLQlEUk1fRk9STUFUX0FSR0I4ODg4LAotCURSTV9GT1JNQVRf QUJHUjg4ODgsCi0JRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMCwKLQlEUk1fRk9STUFUX1hCR1IyMTAx MDEwLAotCURSTV9GT1JNQVRfWFJHQjE2MTYxNjE2RiwKLQlEUk1fRk9STUFUX1hCR1IxNjE2MTYx NkYsCi0JRFJNX0ZPUk1BVF9ZVVlWLAotCURSTV9GT1JNQVRfWVZZVSwKLQlEUk1fRk9STUFUX1VZ VlksCi0JRFJNX0ZPUk1BVF9WWVVZLAotCURSTV9GT1JNQVRfWFlVVjg4ODgsCi19OwotCi1zdGF0 aWMgY29uc3QgdTMyIHNrbF9wbGFuYXJfZm9ybWF0c1tdID0gewotCURSTV9GT1JNQVRfQzgsCi0J RFJNX0ZPUk1BVF9SR0I1NjUsCi0JRFJNX0ZPUk1BVF9YUkdCODg4OCwKLQlEUk1fRk9STUFUX1hC R1I4ODg4LAotCURSTV9GT1JNQVRfQVJHQjg4ODgsCi0JRFJNX0ZPUk1BVF9BQkdSODg4OCwKLQlE Uk1fRk9STUFUX1hSR0IyMTAxMDEwLAotCURSTV9GT1JNQVRfWEJHUjIxMDEwMTAsCi0JRFJNX0ZP Uk1BVF9YUkdCMTYxNjE2MTZGLAotCURSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RiwKLQlEUk1fRk9S TUFUX1lVWVYsCi0JRFJNX0ZPUk1BVF9ZVllVLAotCURSTV9GT1JNQVRfVVlWWSwKLQlEUk1fRk9S TUFUX1ZZVVksCi0JRFJNX0ZPUk1BVF9OVjEyLAotCURSTV9GT1JNQVRfWFlVVjg4ODgsCi19Owot Ci1zdGF0aWMgY29uc3QgdTMyIGdsa19wbGFuYXJfZm9ybWF0c1tdID0gewotCURSTV9GT1JNQVRf QzgsCi0JRFJNX0ZPUk1BVF9SR0I1NjUsCi0JRFJNX0ZPUk1BVF9YUkdCODg4OCwKLQlEUk1fRk9S TUFUX1hCR1I4ODg4LAotCURSTV9GT1JNQVRfQVJHQjg4ODgsCi0JRFJNX0ZPUk1BVF9BQkdSODg4 OCwKLQlEUk1fRk9STUFUX1hSR0IyMTAxMDEwLAotCURSTV9GT1JNQVRfWEJHUjIxMDEwMTAsCi0J RFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGLAotCURSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RiwKLQlE Uk1fRk9STUFUX1lVWVYsCi0JRFJNX0ZPUk1BVF9ZVllVLAotCURSTV9GT1JNQVRfVVlWWSwKLQlE Uk1fRk9STUFUX1ZZVVksCi0JRFJNX0ZPUk1BVF9OVjEyLAotCURSTV9GT1JNQVRfWFlVVjg4ODgs Ci0JRFJNX0ZPUk1BVF9QMDEwLAotCURSTV9GT1JNQVRfUDAxMiwKLQlEUk1fRk9STUFUX1AwMTYs Ci19OwotCi1zdGF0aWMgY29uc3QgdTMyIGljbF9zZHJfeV9wbGFuZV9mb3JtYXRzW10gPSB7Ci0J RFJNX0ZPUk1BVF9DOCwKLQlEUk1fRk9STUFUX1JHQjU2NSwKLQlEUk1fRk9STUFUX1hSR0I4ODg4 LAotCURSTV9GT1JNQVRfWEJHUjg4ODgsCi0JRFJNX0ZPUk1BVF9BUkdCODg4OCwKLQlEUk1fRk9S TUFUX0FCR1I4ODg4LAotCURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCi0JRFJNX0ZPUk1BVF9YQkdS MjEwMTAxMCwKLQlEUk1fRk9STUFUX0FSR0IyMTAxMDEwLAotCURSTV9GT1JNQVRfQUJHUjIxMDEw MTAsCi0JRFJNX0ZPUk1BVF9ZVVlWLAotCURSTV9GT1JNQVRfWVZZVSwKLQlEUk1fRk9STUFUX1VZ VlksCi0JRFJNX0ZPUk1BVF9WWVVZLAotCURSTV9GT1JNQVRfWTIxMCwKLQlEUk1fRk9STUFUX1ky MTIsCi0JRFJNX0ZPUk1BVF9ZMjE2LAotCURSTV9GT1JNQVRfWFlVVjg4ODgsCi0JRFJNX0ZPUk1B VF9YVllVMjEwMTAxMCwKLQlEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNiwKLQlEUk1fRk9STUFU X1hWWVUxNjE2MTYxNiwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgaWNsX3Nkcl91dl9wbGFuZV9m b3JtYXRzW10gPSB7Ci0JRFJNX0ZPUk1BVF9DOCwKLQlEUk1fRk9STUFUX1JHQjU2NSwKLQlEUk1f Rk9STUFUX1hSR0I4ODg4LAotCURSTV9GT1JNQVRfWEJHUjg4ODgsCi0JRFJNX0ZPUk1BVF9BUkdC ODg4OCwKLQlEUk1fRk9STUFUX0FCR1I4ODg4LAotCURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCi0J RFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwKLQlEUk1fRk9STUFUX0FSR0IyMTAxMDEwLAotCURSTV9G T1JNQVRfQUJHUjIxMDEwMTAsCi0JRFJNX0ZPUk1BVF9ZVVlWLAotCURSTV9GT1JNQVRfWVZZVSwK LQlEUk1fRk9STUFUX1VZVlksCi0JRFJNX0ZPUk1BVF9WWVVZLAotCURSTV9GT1JNQVRfTlYxMiwK LQlEUk1fRk9STUFUX1AwMTAsCi0JRFJNX0ZPUk1BVF9QMDEyLAotCURSTV9GT1JNQVRfUDAxNiwK LQlEUk1fRk9STUFUX1kyMTAsCi0JRFJNX0ZPUk1BVF9ZMjEyLAotCURSTV9GT1JNQVRfWTIxNiwK LQlEUk1fRk9STUFUX1hZVVY4ODg4LAotCURSTV9GT1JNQVRfWFZZVTIxMDEwMTAsCi0JRFJNX0ZP Uk1BVF9YVllVMTJfMTYxNjE2MTYsCi0JRFJNX0ZPUk1BVF9YVllVMTYxNjE2MTYsCi19OwotCi1z dGF0aWMgY29uc3QgdTMyIGljbF9oZHJfcGxhbmVfZm9ybWF0c1tdID0gewotCURSTV9GT1JNQVRf QzgsCi0JRFJNX0ZPUk1BVF9SR0I1NjUsCi0JRFJNX0ZPUk1BVF9YUkdCODg4OCwKLQlEUk1fRk9S TUFUX1hCR1I4ODg4LAotCURSTV9GT1JNQVRfQVJHQjg4ODgsCi0JRFJNX0ZPUk1BVF9BQkdSODg4 OCwKLQlEUk1fRk9STUFUX1hSR0IyMTAxMDEwLAotCURSTV9GT1JNQVRfWEJHUjIxMDEwMTAsCi0J RFJNX0ZPUk1BVF9BUkdCMjEwMTAxMCwKLQlEUk1fRk9STUFUX0FCR1IyMTAxMDEwLAotCURSTV9G T1JNQVRfWFJHQjE2MTYxNjE2RiwKLQlEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkYsCi0JRFJNX0ZP Uk1BVF9BUkdCMTYxNjE2MTZGLAotCURSTV9GT1JNQVRfQUJHUjE2MTYxNjE2RiwKLQlEUk1fRk9S TUFUX1lVWVYsCi0JRFJNX0ZPUk1BVF9ZVllVLAotCURSTV9GT1JNQVRfVVlWWSwKLQlEUk1fRk9S TUFUX1ZZVVksCi0JRFJNX0ZPUk1BVF9OVjEyLAotCURSTV9GT1JNQVRfUDAxMCwKLQlEUk1fRk9S TUFUX1AwMTIsCi0JRFJNX0ZPUk1BVF9QMDE2LAotCURSTV9GT1JNQVRfWTIxMCwKLQlEUk1fRk9S TUFUX1kyMTIsCi0JRFJNX0ZPUk1BVF9ZMjE2LAotCURSTV9GT1JNQVRfWFlVVjg4ODgsCi0JRFJN X0ZPUk1BVF9YVllVMjEwMTAxMCwKLQlEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNiwKLQlEUk1f Rk9STUFUX1hWWVUxNjE2MTYxNiwKLX07Ci0KLXN0YXRpYyBjb25zdCB1NjQgc2tsX3BsYW5lX2Zv cm1hdF9tb2RpZmllcnNfbm9jY3NbXSA9IHsKLQlJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQsCi0J STkxNV9GT1JNQVRfTU9EX1lfVElMRUQsCi0JSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQsCi0JRFJN X0ZPUk1BVF9NT0RfTElORUFSLAotCURSTV9GT1JNQVRfTU9EX0lOVkFMSUQKLX07Ci0KLXN0YXRp YyBjb25zdCB1NjQgc2tsX3BsYW5lX2Zvcm1hdF9tb2RpZmllcnNfY2NzW10gPSB7Ci0JSTkxNV9G T1JNQVRfTU9EX1lmX1RJTEVEX0NDUywKLQlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1MsCi0J STkxNV9GT1JNQVRfTU9EX1lmX1RJTEVELAotCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVELAotCUk5 MTVfRk9STUFUX01PRF9YX1RJTEVELAotCURSTV9GT1JNQVRfTU9EX0xJTkVBUiwKLQlEUk1fRk9S TUFUX01PRF9JTlZBTElECi19OwotCi1zdGF0aWMgY29uc3QgdTY0IGdlbjEyX3BsYW5lX2Zvcm1h dF9tb2RpZmllcnNfbWNfY2NzW10gPSB7Ci0JSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJf TUNfQ0NTLAotCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX1JDX0NDUywKLQlJOTE1X0ZP Uk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19DQ1NfQ0MsCi0JSTkxNV9GT1JNQVRfTU9EX1lfVElM RUQsCi0JSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQsCi0JRFJNX0ZPUk1BVF9NT0RfTElORUFSLAot CURSTV9GT1JNQVRfTU9EX0lOVkFMSUQKLX07Ci0KLXN0YXRpYyBjb25zdCB1NjQgZ2VuMTJfcGxh bmVfZm9ybWF0X21vZGlmaWVyc19yY19jY3NbXSA9IHsKLQlJOTE1X0ZPUk1BVF9NT0RfWV9USUxF RF9HRU4xMl9SQ19DQ1MsCi0JSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTX0ND LAotCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVELAotCUk5MTVfRk9STUFUX01PRF9YX1RJTEVELAot CURSTV9GT1JNQVRfTU9EX0xJTkVBUiwKLQlEUk1fRk9STUFUX01PRF9JTlZBTElECi19OwotCiBz dGF0aWMgYm9vbCBnNHhfc3ByaXRlX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkKHN0cnVjdCBkcm1fcGxh bmUgKl9wbGFuZSwKIAkJCQkJICAgIHUzMiBmb3JtYXQsIHU2NCBtb2RpZmllcikKIHsKQEAgLTMw MTAsMTUwICsyMDM1LDYgQEAgc3RhdGljIGJvb2wgdmx2X3Nwcml0ZV9mb3JtYXRfbW9kX3N1cHBv cnRlZChzdHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUsCiAJfQogfQogCi1zdGF0aWMgYm9vbCBza2xf cGxhbmVfZm9ybWF0X21vZF9zdXBwb3J0ZWQoc3RydWN0IGRybV9wbGFuZSAqX3BsYW5lLAotCQkJ CQkgICB1MzIgZm9ybWF0LCB1NjQgbW9kaWZpZXIpCi17Ci0Jc3RydWN0IGludGVsX3BsYW5lICpw bGFuZSA9IHRvX2ludGVsX3BsYW5lKF9wbGFuZSk7Ci0KLQlzd2l0Y2ggKG1vZGlmaWVyKSB7Ci0J Y2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxF RDoKLQljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgotCWNhc2UgSTkxNV9GT1JNQVRfTU9E X1lmX1RJTEVEOgotCQlicmVhazsKLQljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzoK LQljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M6Ci0JCWlmICghcGxhbmUtPmhhc19j Y3MpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBmYWxz ZTsKLQl9Ci0KLQlzd2l0Y2ggKGZvcm1hdCkgewotCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoK LQljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4Ogot CWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKLQkJaWYgKGlzX2Njc19tb2RpZmllcihtb2RpZmll cikpCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJZmFsbHRocm91Z2g7Ci0JY2FzZSBEUk1fRk9STUFUX1JH QjU2NToKLQljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX1hC R1IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDoKLQljYXNlIERSTV9GT1JN QVRfQUJHUjIxMDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX1lVWVY6Ci0JY2FzZSBEUk1fRk9STUFU X1lWWVU6Ci0JY2FzZSBEUk1fRk9STUFUX1VZVlk6Ci0JY2FzZSBEUk1fRk9STUFUX1ZZVVk6Ci0J Y2FzZSBEUk1fRk9STUFUX05WMTI6Ci0JY2FzZSBEUk1fRk9STUFUX1hZVVY4ODg4OgotCWNhc2Ug RFJNX0ZPUk1BVF9QMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9QMDEyOgotCWNhc2UgRFJNX0ZPUk1B VF9QMDE2OgotCWNhc2UgRFJNX0ZPUk1BVF9YVllVMjEwMTAxMDoKLQkJaWYgKG1vZGlmaWVyID09 IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRCkKLQkJCXJldHVybiB0cnVlOwotCQlmYWxsdGhyb3Vn aDsKLQljYXNlIERSTV9GT1JNQVRfQzg6Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkY6 Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1IxNjE2MTYxNkY6Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0Ix NjE2MTYxNkY6Ci0JY2FzZSBEUk1fRk9STUFUX0FSR0IxNjE2MTYxNkY6Ci0JY2FzZSBEUk1fRk9S TUFUX1kyMTA6Ci0JY2FzZSBEUk1fRk9STUFUX1kyMTI6Ci0JY2FzZSBEUk1fRk9STUFUX1kyMTY6 Ci0JY2FzZSBEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNjoKLQljYXNlIERSTV9GT1JNQVRfWFZZ VTE2MTYxNjE2OgotCQlpZiAobW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfTElORUFSIHx8Ci0J CSAgICBtb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCB8fAotCQkgICAgbW9kaWZp ZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQpCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJZmFsbHRo cm91Z2g7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIGZhbHNlOwotCX0KLX0KLQotc3RhdGljIGJvb2wg Z2VuMTJfcGxhbmVfc3VwcG9ydHNfbWNfY2NzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKLQkJCQkJZW51bSBwbGFuZV9pZCBwbGFuZV9pZCkKLXsKLQkvKiBXYV8xNDAxMDQ3NzAw ODp0Z2xbYTAuLmMwXSxya2xbYWxsXSxkZzFbYWxsXSAqLwotCWlmIChJU19ERzEoZGV2X3ByaXYp IHx8IElTX1JPQ0tFVExBS0UoZGV2X3ByaXYpIHx8Ci0JICAgIElTX1RHTF9ESVNQX1JFVklEKGRl dl9wcml2LCBUR0xfUkVWSURfQTAsIFRHTF9SRVZJRF9DMCkpCi0JCXJldHVybiBmYWxzZTsKLQot CXJldHVybiBwbGFuZV9pZCA8IFBMQU5FX1NQUklURTQ7Ci19Ci0KLXN0YXRpYyBib29sIGdlbjEy X3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkKHN0cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwKLQkJ CQkJICAgICB1MzIgZm9ybWF0LCB1NjQgbW9kaWZpZXIpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShfcGxhbmUtPmRldik7Ci0Jc3RydWN0IGludGVsX3Bs YW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKF9wbGFuZSk7Ci0KLQlzd2l0Y2ggKG1vZGlmaWVy KSB7Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9NQ19DQ1M6Ci0JCWlmICgh Z2VuMTJfcGxhbmVfc3VwcG9ydHNfbWNfY2NzKGRldl9wcml2LCBwbGFuZS0+aWQpKQotCQkJcmV0 dXJuIGZhbHNlOwotCQlmYWxsdGhyb3VnaDsKLQljYXNlIERSTV9GT1JNQVRfTU9EX0xJTkVBUjoK LQljYXNlIEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOgotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lf VElMRUQ6Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19DQ1M6Ci0JY2Fz ZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19DQ1NfQ0M6Ci0JCWJyZWFrOwotCWRl ZmF1bHQ6Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlzd2l0Y2ggKGZvcm1hdCkgewotCWNhc2Ug RFJNX0ZPUk1BVF9YUkdCODg4ODoKLQljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6Ci0JY2FzZSBE Uk1fRk9STUFUX0FSR0I4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKLQkJaWYgKGlz X2Njc19tb2RpZmllcihtb2RpZmllcikpCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJZmFsbHRocm91Z2g7 Ci0JY2FzZSBEUk1fRk9STUFUX1lVWVY6Ci0JY2FzZSBEUk1fRk9STUFUX1lWWVU6Ci0JY2FzZSBE Uk1fRk9STUFUX1VZVlk6Ci0JY2FzZSBEUk1fRk9STUFUX1ZZVVk6Ci0JY2FzZSBEUk1fRk9STUFU X05WMTI6Ci0JY2FzZSBEUk1fRk9STUFUX1hZVVY4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9QMDEw OgotCWNhc2UgRFJNX0ZPUk1BVF9QMDEyOgotCWNhc2UgRFJNX0ZPUk1BVF9QMDE2OgotCQlpZiAo bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNfQ0NTKQotCQkJcmV0 dXJuIHRydWU7Ci0JCWZhbGx0aHJvdWdoOwotCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6Ci0JY2Fz ZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoK LQljYXNlIERSTV9GT1JNQVRfQVJHQjIxMDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1IyMTAx MDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9YVllVMjEwMTAxMDoKLQljYXNlIERSTV9GT1JNQVRfQzg6 Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkY6Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1Ix NjE2MTYxNkY6Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0IxNjE2MTYxNkY6Ci0JY2FzZSBEUk1fRk9S TUFUX0FSR0IxNjE2MTYxNkY6Ci0JY2FzZSBEUk1fRk9STUFUX1kyMTA6Ci0JY2FzZSBEUk1fRk9S TUFUX1kyMTI6Ci0JY2FzZSBEUk1fRk9STUFUX1kyMTY6Ci0JY2FzZSBEUk1fRk9STUFUX1hWWVUx Ml8xNjE2MTYxNjoKLQljYXNlIERSTV9GT1JNQVRfWFZZVTE2MTYxNjE2OgotCQlpZiAobW9kaWZp ZXIgPT0gRFJNX0ZPUk1BVF9NT0RfTElORUFSIHx8Ci0JCSAgICBtb2RpZmllciA9PSBJOTE1X0ZP Uk1BVF9NT0RfWF9USUxFRCB8fAotCQkgICAgbW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lf VElMRUQpCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJZmFsbHRocm91Z2g7Ci0JZGVmYXVsdDoKLQkJcmV0 dXJuIGZhbHNlOwotCX0KLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3Mg ZzR4X3Nwcml0ZV9mdW5jcyA9IHsKIAkudXBkYXRlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJf dXBkYXRlX3BsYW5lLAogCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJs ZV9wbGFuZSwKQEAgLTMxODEsMjU3ICsyMDYyLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f cGxhbmVfZnVuY3Mgdmx2X3Nwcml0ZV9mdW5jcyA9IHsKIAkuZm9ybWF0X21vZF9zdXBwb3J0ZWQg PSB2bHZfc3ByaXRlX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkLAogfTsKIAotc3RhdGljIGNvbnN0IHN0 cnVjdCBkcm1fcGxhbmVfZnVuY3Mgc2tsX3BsYW5lX2Z1bmNzID0gewotCS51cGRhdGVfcGxhbmUg PSBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUsCi0JLmRpc2FibGVfcGxhbmUgPSBkcm1f YXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAotCS5kZXN0cm95ID0gaW50ZWxfcGxhbmVfZGVz dHJveSwKLQkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGludGVsX3BsYW5lX2R1cGxpY2F0ZV9z dGF0ZSwKLQkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRl LAotCS5mb3JtYXRfbW9kX3N1cHBvcnRlZCA9IHNrbF9wbGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRl ZCwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGdlbjEyX3BsYW5l X2Z1bmNzID0gewotCS51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxh bmUsCi0JLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAot CS5kZXN0cm95ID0gaW50ZWxfcGxhbmVfZGVzdHJveSwKLQkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0 ZSA9IGludGVsX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwKLQkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUg PSBpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRlLAotCS5mb3JtYXRfbW9kX3N1cHBvcnRlZCA9IGdl bjEyX3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkLAotfTsKLQotc3RhdGljIGJvb2wgc2tsX3Bs YW5lX2hhc19mYmMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJICAgICAg ZW51bSBwaXBlIHBpcGUsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCi17Ci0JaWYgKCFIQVNfRkJD KGRldl9wcml2KSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIHBpcGUgPT0gUElQRV9BICYm IHBsYW5lX2lkID09IFBMQU5FX1BSSU1BUlk7Ci19Ci0KLXN0YXRpYyBib29sIHNrbF9wbGFuZV9o YXNfcGxhbmFyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCQkgZW51bSBw aXBlIHBpcGUsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCi17Ci0JLyogRGlzcGxheSBXQSAjMDg3 MDogc2tsLCBieHQgKi8KLQlpZiAoSVNfU0tZTEFLRShkZXZfcHJpdikgfHwgSVNfQlJPWFRPTihk ZXZfcHJpdikpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmIChJU19HRU4oZGV2X3ByaXYsIDkpICYm ICFJU19HRU1JTklMQUtFKGRldl9wcml2KSAmJiBwaXBlID09IFBJUEVfQykKLQkJcmV0dXJuIGZh bHNlOwotCi0JaWYgKHBsYW5lX2lkICE9IFBMQU5FX1BSSU1BUlkgJiYgcGxhbmVfaWQgIT0gUExB TkVfU1BSSVRFMCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRp YyBjb25zdCB1MzIgKnNrbF9nZXRfcGxhbmVfZm9ybWF0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsCi0JCQkJCWVudW0gcGlwZSBwaXBlLCBlbnVtIHBsYW5lX2lkIHBsYW5lX2lk LAotCQkJCQlpbnQgKm51bV9mb3JtYXRzKQotewotCWlmIChza2xfcGxhbmVfaGFzX3BsYW5hcihk ZXZfcHJpdiwgcGlwZSwgcGxhbmVfaWQpKSB7Ci0JCSpudW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUo c2tsX3BsYW5hcl9mb3JtYXRzKTsKLQkJcmV0dXJuIHNrbF9wbGFuYXJfZm9ybWF0czsKLQl9IGVs c2UgewotCQkqbnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKHNrbF9wbGFuZV9mb3JtYXRzKTsKLQkJ cmV0dXJuIHNrbF9wbGFuZV9mb3JtYXRzOwotCX0KLX0KLQotc3RhdGljIGNvbnN0IHUzMiAqZ2xr X2dldF9wbGFuZV9mb3JtYXRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJ CQkJZW51bSBwaXBlIHBpcGUsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQsCi0JCQkJCWludCAqbnVt X2Zvcm1hdHMpCi17Ci0JaWYgKHNrbF9wbGFuZV9oYXNfcGxhbmFyKGRldl9wcml2LCBwaXBlLCBw bGFuZV9pZCkpIHsKLQkJKm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShnbGtfcGxhbmFyX2Zvcm1h dHMpOwotCQlyZXR1cm4gZ2xrX3BsYW5hcl9mb3JtYXRzOwotCX0gZWxzZSB7Ci0JCSpudW1fZm9y bWF0cyA9IEFSUkFZX1NJWkUoc2tsX3BsYW5lX2Zvcm1hdHMpOwotCQlyZXR1cm4gc2tsX3BsYW5l X2Zvcm1hdHM7Ci0JfQotfQotCi1zdGF0aWMgY29uc3QgdTMyICppY2xfZ2V0X3BsYW5lX2Zvcm1h dHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJCQllbnVtIHBpcGUgcGlw ZSwgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCwKLQkJCQkJaW50ICpudW1fZm9ybWF0cykKLXsKLQlp ZiAoaWNsX2lzX2hkcl9wbGFuZShkZXZfcHJpdiwgcGxhbmVfaWQpKSB7Ci0JCSpudW1fZm9ybWF0 cyA9IEFSUkFZX1NJWkUoaWNsX2hkcl9wbGFuZV9mb3JtYXRzKTsKLQkJcmV0dXJuIGljbF9oZHJf cGxhbmVfZm9ybWF0czsKLQl9IGVsc2UgaWYgKGljbF9pc19udjEyX3lfcGxhbmUoZGV2X3ByaXYs IHBsYW5lX2lkKSkgewotCQkqbnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKGljbF9zZHJfeV9wbGFu ZV9mb3JtYXRzKTsKLQkJcmV0dXJuIGljbF9zZHJfeV9wbGFuZV9mb3JtYXRzOwotCX0gZWxzZSB7 Ci0JCSpudW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoaWNsX3Nkcl91dl9wbGFuZV9mb3JtYXRzKTsK LQkJcmV0dXJuIGljbF9zZHJfdXZfcGxhbmVfZm9ybWF0czsKLQl9Ci19Ci0KLXN0YXRpYyBjb25z dCB1NjQgKmdlbjEyX2dldF9wbGFuZV9tb2RpZmllcnMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAotCQkJCQkgICAgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCkKLXsKLQlpZiAoZ2Vu MTJfcGxhbmVfc3VwcG9ydHNfbWNfY2NzKGRldl9wcml2LCBwbGFuZV9pZCkpCi0JCXJldHVybiBn ZW4xMl9wbGFuZV9mb3JtYXRfbW9kaWZpZXJzX21jX2NjczsKLQllbHNlCi0JCXJldHVybiBnZW4x Ml9wbGFuZV9mb3JtYXRfbW9kaWZpZXJzX3JjX2NjczsKLX0KLQotc3RhdGljIGJvb2wgc2tsX3Bs YW5lX2hhc19jY3Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJICAgICAg ZW51bSBwaXBlIHBpcGUsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCi17Ci0JaWYgKHBsYW5lX2lk ID09IFBMQU5FX0NVUlNPUikKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gMTApCi0JCXJldHVybiB0cnVlOwotCi0JaWYgKElTX0dFTUlOSUxBS0UoZGV2X3By aXYpKQotCQlyZXR1cm4gcGlwZSAhPSBQSVBFX0M7Ci0KLQlyZXR1cm4gcGlwZSAhPSBQSVBFX0Mg JiYKLQkJKHBsYW5lX2lkID09IFBMQU5FX1BSSU1BUlkgfHwKLQkJIHBsYW5lX2lkID09IFBMQU5F X1NQUklURTApOwotfQotCi1zdHJ1Y3QgaW50ZWxfcGxhbmUgKgotc2tsX3VuaXZlcnNhbF9wbGFu ZV9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJICAgZW51bSBw aXBlIHBpcGUsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCi17Ci0JY29uc3Qgc3RydWN0IGRybV9w bGFuZV9mdW5jcyAqcGxhbmVfZnVuY3M7Ci0Jc3RydWN0IGludGVsX3BsYW5lICpwbGFuZTsKLQll bnVtIGRybV9wbGFuZV90eXBlIHBsYW5lX3R5cGU7Ci0JdW5zaWduZWQgaW50IHN1cHBvcnRlZF9y b3RhdGlvbnM7Ci0JdW5zaWduZWQgaW50IHN1cHBvcnRlZF9jc2M7Ci0JY29uc3QgdTY0ICptb2Rp ZmllcnM7Ci0JY29uc3QgdTMyICpmb3JtYXRzOwotCWludCBudW1fZm9ybWF0czsKLQlpbnQgcmV0 OwotCi0JcGxhbmUgPSBpbnRlbF9wbGFuZV9hbGxvYygpOwotCWlmIChJU19FUlIocGxhbmUpKQot CQlyZXR1cm4gcGxhbmU7Ci0KLQlwbGFuZS0+cGlwZSA9IHBpcGU7Ci0JcGxhbmUtPmlkID0gcGxh bmVfaWQ7Ci0JcGxhbmUtPmZyb250YnVmZmVyX2JpdCA9IElOVEVMX0ZST05UQlVGRkVSKHBpcGUs IHBsYW5lX2lkKTsKLQotCXBsYW5lLT5oYXNfZmJjID0gc2tsX3BsYW5lX2hhc19mYmMoZGV2X3By aXYsIHBpcGUsIHBsYW5lX2lkKTsKLQlpZiAocGxhbmUtPmhhc19mYmMpIHsKLQkJc3RydWN0IGlu dGVsX2ZiYyAqZmJjID0gJmRldl9wcml2LT5mYmM7Ci0KLQkJZmJjLT5wb3NzaWJsZV9mcmFtZWJ1 ZmZlcl9iaXRzIHw9IHBsYW5lLT5mcm9udGJ1ZmZlcl9iaXQ7Ci0JfQotCi0JaWYgKElOVEVMX0dF TihkZXZfcHJpdikgPj0gMTEpIHsKLQkJcGxhbmUtPm1pbl93aWR0aCA9IGljbF9wbGFuZV9taW5f d2lkdGg7Ci0JCXBsYW5lLT5tYXhfd2lkdGggPSBpY2xfcGxhbmVfbWF4X3dpZHRoOwotCQlwbGFu ZS0+bWF4X2hlaWdodCA9IGljbF9wbGFuZV9tYXhfaGVpZ2h0OwotCX0gZWxzZSBpZiAoSU5URUxf R0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklMQUtFKGRldl9wcml2KSkgewotCQlwbGFu ZS0+bWF4X3dpZHRoID0gZ2xrX3BsYW5lX21heF93aWR0aDsKLQkJcGxhbmUtPm1heF9oZWlnaHQg PSBza2xfcGxhbmVfbWF4X2hlaWdodDsKLQl9IGVsc2UgewotCQlwbGFuZS0+bWF4X3dpZHRoID0g c2tsX3BsYW5lX21heF93aWR0aDsKLQkJcGxhbmUtPm1heF9oZWlnaHQgPSBza2xfcGxhbmVfbWF4 X2hlaWdodDsKLQl9Ci0KLQlwbGFuZS0+bWF4X3N0cmlkZSA9IHNrbF9wbGFuZV9tYXhfc3RyaWRl OwotCXBsYW5lLT51cGRhdGVfcGxhbmUgPSBza2xfdXBkYXRlX3BsYW5lOwotCXBsYW5lLT5kaXNh YmxlX3BsYW5lID0gc2tsX2Rpc2FibGVfcGxhbmU7Ci0JcGxhbmUtPmdldF9od19zdGF0ZSA9IHNr bF9wbGFuZV9nZXRfaHdfc3RhdGU7Ci0JcGxhbmUtPmNoZWNrX3BsYW5lID0gc2tsX3BsYW5lX2No ZWNrOwotCXBsYW5lLT5taW5fY2RjbGsgPSBza2xfcGxhbmVfbWluX2NkY2xrOwotCi0JaWYgKHBs YW5lX2lkID09IFBMQU5FX1BSSU1BUlkpIHsKLQkJcGxhbmUtPm5lZWRfYXN5bmNfZmxpcF9kaXNh YmxlX3dhID0gSVNfR0VOX1JBTkdFKGRldl9wcml2LCA5LCAxMCk7Ci0JCXBsYW5lLT5hc3luY19m bGlwID0gc2tsX3BsYW5lX2FzeW5jX2ZsaXA7Ci0JCXBsYW5lLT5lbmFibGVfZmxpcF9kb25lID0g c2tsX3BsYW5lX2VuYWJsZV9mbGlwX2RvbmU7Ci0JCXBsYW5lLT5kaXNhYmxlX2ZsaXBfZG9uZSA9 IHNrbF9wbGFuZV9kaXNhYmxlX2ZsaXBfZG9uZTsKLQl9Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9w cml2KSA+PSAxMSkKLQkJZm9ybWF0cyA9IGljbF9nZXRfcGxhbmVfZm9ybWF0cyhkZXZfcHJpdiwg cGlwZSwKLQkJCQkJCXBsYW5lX2lkLCAmbnVtX2Zvcm1hdHMpOwotCWVsc2UgaWYgKElOVEVMX0dF TihkZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpCi0JCWZvcm1hdHMg PSBnbGtfZ2V0X3BsYW5lX2Zvcm1hdHMoZGV2X3ByaXYsIHBpcGUsCi0JCQkJCQlwbGFuZV9pZCwg Jm51bV9mb3JtYXRzKTsKLQllbHNlCi0JCWZvcm1hdHMgPSBza2xfZ2V0X3BsYW5lX2Zvcm1hdHMo ZGV2X3ByaXYsIHBpcGUsCi0JCQkJCQlwbGFuZV9pZCwgJm51bV9mb3JtYXRzKTsKLQotCXBsYW5l LT5oYXNfY2NzID0gc2tsX3BsYW5lX2hhc19jY3MoZGV2X3ByaXYsIHBpcGUsIHBsYW5lX2lkKTsK LQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMikgewotCQltb2RpZmllcnMgPSBnZW4xMl9n ZXRfcGxhbmVfbW9kaWZpZXJzKGRldl9wcml2LCBwbGFuZV9pZCk7Ci0JCXBsYW5lX2Z1bmNzID0g JmdlbjEyX3BsYW5lX2Z1bmNzOwotCX0gZWxzZSB7Ci0JCWlmIChwbGFuZS0+aGFzX2NjcykKLQkJ CW1vZGlmaWVycyA9IHNrbF9wbGFuZV9mb3JtYXRfbW9kaWZpZXJzX2NjczsKLQkJZWxzZQotCQkJ bW9kaWZpZXJzID0gc2tsX3BsYW5lX2Zvcm1hdF9tb2RpZmllcnNfbm9jY3M7Ci0JCXBsYW5lX2Z1 bmNzID0gJnNrbF9wbGFuZV9mdW5jczsKLQl9Ci0KLQlpZiAocGxhbmVfaWQgPT0gUExBTkVfUFJJ TUFSWSkKLQkJcGxhbmVfdHlwZSA9IERSTV9QTEFORV9UWVBFX1BSSU1BUlk7Ci0JZWxzZQotCQlw bGFuZV90eXBlID0gRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWTsKLQotCXJldCA9IGRybV91bml2ZXJz YWxfcGxhbmVfaW5pdCgmZGV2X3ByaXYtPmRybSwgJnBsYW5lLT5iYXNlLAotCQkJCSAgICAgICAw LCBwbGFuZV9mdW5jcywKLQkJCQkgICAgICAgZm9ybWF0cywgbnVtX2Zvcm1hdHMsIG1vZGlmaWVy cywKLQkJCQkgICAgICAgcGxhbmVfdHlwZSwKLQkJCQkgICAgICAgInBsYW5lICVkJWMiLCBwbGFu ZV9pZCArIDEsCi0JCQkJICAgICAgIHBpcGVfbmFtZShwaXBlKSk7Ci0JaWYgKHJldCkKLQkJZ290 byBmYWlsOwotCi0Jc3VwcG9ydGVkX3JvdGF0aW9ucyA9Ci0JCURSTV9NT0RFX1JPVEFURV8wIHwg RFJNX01PREVfUk9UQVRFXzkwIHwKLQkJRFJNX01PREVfUk9UQVRFXzE4MCB8IERSTV9NT0RFX1JP VEFURV8yNzA7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCkKLQkJc3VwcG9ydGVk X3JvdGF0aW9ucyB8PSBEUk1fTU9ERV9SRUZMRUNUX1g7Ci0KLQlkcm1fcGxhbmVfY3JlYXRlX3Jv dGF0aW9uX3Byb3BlcnR5KCZwbGFuZS0+YmFzZSwKLQkJCQkJICAgRFJNX01PREVfUk9UQVRFXzAs Ci0JCQkJCSAgIHN1cHBvcnRlZF9yb3RhdGlvbnMpOwotCi0Jc3VwcG9ydGVkX2NzYyA9IEJJVChE Uk1fQ09MT1JfWUNCQ1JfQlQ2MDEpIHwgQklUKERSTV9DT0xPUl9ZQ0JDUl9CVDcwOSk7Ci0KLQlp ZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklMQUtFKGRldl9wcml2KSkK LQkJc3VwcG9ydGVkX2NzYyB8PSBCSVQoRFJNX0NPTE9SX1lDQkNSX0JUMjAyMCk7Ci0KLQlkcm1f cGxhbmVfY3JlYXRlX2NvbG9yX3Byb3BlcnRpZXMoJnBsYW5lLT5iYXNlLAotCQkJCQkgIHN1cHBv cnRlZF9jc2MsCi0JCQkJCSAgQklUKERSTV9DT0xPUl9ZQ0JDUl9MSU1JVEVEX1JBTkdFKSB8Ci0J CQkJCSAgQklUKERSTV9DT0xPUl9ZQ0JDUl9GVUxMX1JBTkdFKSwKLQkJCQkJICBEUk1fQ09MT1Jf WUNCQ1JfQlQ3MDksCi0JCQkJCSAgRFJNX0NPTE9SX1lDQkNSX0xJTUlURURfUkFOR0UpOwotCi0J ZHJtX3BsYW5lX2NyZWF0ZV9hbHBoYV9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UpOwotCWRybV9wbGFu ZV9jcmVhdGVfYmxlbmRfbW9kZV9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UsCi0JCQkJCSAgICAgQklU KERSTV9NT0RFX0JMRU5EX1BJWEVMX05PTkUpIHwKLQkJCQkJICAgICBCSVQoRFJNX01PREVfQkxF TkRfUFJFTVVMVEkpIHwKLQkJCQkJICAgICBCSVQoRFJNX01PREVfQkxFTkRfQ09WRVJBR0UpKTsK LQotCWRybV9wbGFuZV9jcmVhdGVfenBvc19pbW11dGFibGVfcHJvcGVydHkoJnBsYW5lLT5iYXNl LCBwbGFuZV9pZCk7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMikKLQkJZHJtX3Bs YW5lX2VuYWJsZV9mYl9kYW1hZ2VfY2xpcHMoJnBsYW5lLT5iYXNlKTsKLQotCWlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID49IDEwKQotCQlkcm1fcGxhbmVfY3JlYXRlX3NjYWxpbmdfZmlsdGVyX3By b3BlcnR5KCZwbGFuZS0+YmFzZSwKLQkJCQkJCUJJVChEUk1fU0NBTElOR19GSUxURVJfREVGQVVM VCkgfAotCQkJCQkJQklUKERSTV9TQ0FMSU5HX0ZJTFRFUl9ORUFSRVNUX05FSUdIQk9SKSk7Ci0K LQlkcm1fcGxhbmVfaGVscGVyX2FkZCgmcGxhbmUtPmJhc2UsICZpbnRlbF9wbGFuZV9oZWxwZXJf ZnVuY3MpOwotCi0JcmV0dXJuIHBsYW5lOwotCi1mYWlsOgotCWludGVsX3BsYW5lX2ZyZWUocGxh bmUpOwotCi0JcmV0dXJuIEVSUl9QVFIocmV0KTsKLX0KLQogc3RydWN0IGludGVsX3BsYW5lICoK IGludGVsX3Nwcml0ZV9wbGFuZV9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAogCQkJICBlbnVtIHBpcGUgcGlwZSwgaW50IHNwcml0ZSkKQEAgLTM0NDQsMTAgKzIwNzQs NiBAQCBpbnRlbF9zcHJpdGVfcGxhbmVfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKIAlpbnQgbnVtX2Zvcm1hdHM7CiAJaW50IHJldCwgenBvczsKIAotCWlmIChJTlRF TF9HRU4oZGV2X3ByaXYpID49IDkpCi0JCXJldHVybiBza2xfdW5pdmVyc2FsX3BsYW5lX2NyZWF0 ZShkZXZfcHJpdiwgcGlwZSwKLQkJCQkJCSAgUExBTkVfU1BSSVRFMCArIHNwcml0ZSk7Ci0KIAlw bGFuZSA9IGludGVsX3BsYW5lX2FsbG9jKCk7CiAJaWYgKElTX0VSUihwbGFuZSkpCiAJCXJldHVy biBwbGFuZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf c3ByaXRlLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5oCmlu ZGV4IDc2MTI2ZGQ4ZDU4NC4uNDE4ODk3Zjk1M2ZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmgKQEAgLTM4LDkgKzM4LDYgQEAgdm9pZCBpbnRlbF9waXBl X3VwZGF0ZV9lbmQoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0YXRlKTsKIGlu dCBpbnRlbF9wbGFuZV9jaGVja19zdHJpZGUoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRl ICpwbGFuZV9zdGF0ZSk7CiBpbnQgaW50ZWxfcGxhbmVfY2hlY2tfc3JjX2Nvb3JkaW5hdGVzKHN0 cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwogaW50IGNodl9wbGFuZV9jaGVj a19yb3RhdGlvbihjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsK LXN0cnVjdCBpbnRlbF9wbGFuZSAqCi1za2xfdW5pdmVyc2FsX3BsYW5lX2NyZWF0ZShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkgICBlbnVtIHBpcGUgcGlwZSwgZW51bSBw bGFuZV9pZCBwbGFuZV9pZCk7CiAKIHN0YXRpYyBpbmxpbmUgdTggaWNsX2hkcl9wbGFuZV9tYXNr KHZvaWQpCiB7CkBAIC01OSw0ICs1Niw3IEBAIGludCBoc3dfcGxhbmVfbWluX2NkY2xrKGNvbnN0 IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAogaW50IHZsdl9wbGFuZV9taW5f Y2RjbGsoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCiAJCQljb25z dCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsKIAordm9pZCBza2xfcHJv Z3JhbV9zY2FsZXIoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKKwkJCWNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJY29uc3Qgc3RydWN0IGludGVsX3BsYW5l X3N0YXRlICpwbGFuZV9zdGF0ZSk7CiAjZW5kaWYgLyogX19JTlRFTF9TUFJJVEVfSF9fICovCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L3NrbF91bml2ZXJzYWxfcGxh bmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvc2tsX3VuaXZlcnNhbF9wbGFuZS5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTViNmFlNzZlZjg3Ci0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9za2xfdW5pdmVy c2FsX3BsYW5lLmMKQEAgLTAsMCArMSwyMzA0IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogTUlUCisvKgorICogQ29weXJpZ2h0IMKpIDIwMjAgSW50ZWwgQ29ycG9yYXRpb24KKyAqLwor CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9k YW1hZ2VfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4KKyNpbmNsdWRlIDxk cm0vZHJtX3BsYW5lX2hlbHBlci5oPgorCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKyNpbmNsdWRl ICJpbnRlbF9hdG9taWNfcGxhbmUuaCIKKyNpbmNsdWRlICJpbnRlbF9kaXNwbGF5X3R5cGVzLmgi CisjaW5jbHVkZSAiaW50ZWxfcG0uaCIKKyNpbmNsdWRlICJpbnRlbF9wc3IuaCIKKyNpbmNsdWRl ICJpbnRlbF9zcHJpdGUuaCIKKyNpbmNsdWRlICJza2xfdW5pdmVyc2FsX3BsYW5lLmgiCisKK3N0 YXRpYyBjb25zdCB1MzIgc2tsX3BsYW5lX2Zvcm1hdHNbXSA9IHsKKwlEUk1fRk9STUFUX0M4LAor CURSTV9GT1JNQVRfUkdCNTY1LAorCURSTV9GT1JNQVRfWFJHQjg4ODgsCisJRFJNX0ZPUk1BVF9Y QkdSODg4OCwKKwlEUk1fRk9STUFUX0FSR0I4ODg4LAorCURSTV9GT1JNQVRfQUJHUjg4ODgsCisJ RFJNX0ZPUk1BVF9YUkdCMjEwMTAxMCwKKwlEUk1fRk9STUFUX1hCR1IyMTAxMDEwLAorCURSTV9G T1JNQVRfWFJHQjE2MTYxNjE2RiwKKwlEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkYsCisJRFJNX0ZP Uk1BVF9ZVVlWLAorCURSTV9GT1JNQVRfWVZZVSwKKwlEUk1fRk9STUFUX1VZVlksCisJRFJNX0ZP Uk1BVF9WWVVZLAorCURSTV9GT1JNQVRfWFlVVjg4ODgsCit9OworCitzdGF0aWMgY29uc3QgdTMy IHNrbF9wbGFuYXJfZm9ybWF0c1tdID0geworCURSTV9GT1JNQVRfQzgsCisJRFJNX0ZPUk1BVF9S R0I1NjUsCisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFUX1hCR1I4ODg4LAorCURS TV9GT1JNQVRfQVJHQjg4ODgsCisJRFJNX0ZPUk1BVF9BQkdSODg4OCwKKwlEUk1fRk9STUFUX1hS R0IyMTAxMDEwLAorCURSTV9GT1JNQVRfWEJHUjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9YUkdCMTYx NjE2MTZGLAorCURSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RiwKKwlEUk1fRk9STUFUX1lVWVYsCisJ RFJNX0ZPUk1BVF9ZVllVLAorCURSTV9GT1JNQVRfVVlWWSwKKwlEUk1fRk9STUFUX1ZZVVksCisJ RFJNX0ZPUk1BVF9OVjEyLAorCURSTV9GT1JNQVRfWFlVVjg4ODgsCit9OworCitzdGF0aWMgY29u c3QgdTMyIGdsa19wbGFuYXJfZm9ybWF0c1tdID0geworCURSTV9GT1JNQVRfQzgsCisJRFJNX0ZP Uk1BVF9SR0I1NjUsCisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFUX1hCR1I4ODg4 LAorCURSTV9GT1JNQVRfQVJHQjg4ODgsCisJRFJNX0ZPUk1BVF9BQkdSODg4OCwKKwlEUk1fRk9S TUFUX1hSR0IyMTAxMDEwLAorCURSTV9GT1JNQVRfWEJHUjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9Y UkdCMTYxNjE2MTZGLAorCURSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RiwKKwlEUk1fRk9STUFUX1lV WVYsCisJRFJNX0ZPUk1BVF9ZVllVLAorCURSTV9GT1JNQVRfVVlWWSwKKwlEUk1fRk9STUFUX1ZZ VVksCisJRFJNX0ZPUk1BVF9OVjEyLAorCURSTV9GT1JNQVRfWFlVVjg4ODgsCisJRFJNX0ZPUk1B VF9QMDEwLAorCURSTV9GT1JNQVRfUDAxMiwKKwlEUk1fRk9STUFUX1AwMTYsCit9OworCitzdGF0 aWMgY29uc3QgdTMyIGljbF9zZHJfeV9wbGFuZV9mb3JtYXRzW10gPSB7CisJRFJNX0ZPUk1BVF9D OCwKKwlEUk1fRk9STUFUX1JHQjU2NSwKKwlEUk1fRk9STUFUX1hSR0I4ODg4LAorCURSTV9GT1JN QVRfWEJHUjg4ODgsCisJRFJNX0ZPUk1BVF9BUkdCODg4OCwKKwlEUk1fRk9STUFUX0FCR1I4ODg4 LAorCURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwKKwlE Uk1fRk9STUFUX0FSR0IyMTAxMDEwLAorCURSTV9GT1JNQVRfQUJHUjIxMDEwMTAsCisJRFJNX0ZP Uk1BVF9ZVVlWLAorCURSTV9GT1JNQVRfWVZZVSwKKwlEUk1fRk9STUFUX1VZVlksCisJRFJNX0ZP Uk1BVF9WWVVZLAorCURSTV9GT1JNQVRfWTIxMCwKKwlEUk1fRk9STUFUX1kyMTIsCisJRFJNX0ZP Uk1BVF9ZMjE2LAorCURSTV9GT1JNQVRfWFlVVjg4ODgsCisJRFJNX0ZPUk1BVF9YVllVMjEwMTAx MCwKKwlEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNiwKKwlEUk1fRk9STUFUX1hWWVUxNjE2MTYx NiwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgaWNsX3Nkcl91dl9wbGFuZV9mb3JtYXRzW10gPSB7 CisJRFJNX0ZPUk1BVF9DOCwKKwlEUk1fRk9STUFUX1JHQjU2NSwKKwlEUk1fRk9STUFUX1hSR0I4 ODg4LAorCURSTV9GT1JNQVRfWEJHUjg4ODgsCisJRFJNX0ZPUk1BVF9BUkdCODg4OCwKKwlEUk1f Rk9STUFUX0FCR1I4ODg4LAorCURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9Y QkdSMjEwMTAxMCwKKwlEUk1fRk9STUFUX0FSR0IyMTAxMDEwLAorCURSTV9GT1JNQVRfQUJHUjIx MDEwMTAsCisJRFJNX0ZPUk1BVF9ZVVlWLAorCURSTV9GT1JNQVRfWVZZVSwKKwlEUk1fRk9STUFU X1VZVlksCisJRFJNX0ZPUk1BVF9WWVVZLAorCURSTV9GT1JNQVRfTlYxMiwKKwlEUk1fRk9STUFU X1AwMTAsCisJRFJNX0ZPUk1BVF9QMDEyLAorCURSTV9GT1JNQVRfUDAxNiwKKwlEUk1fRk9STUFU X1kyMTAsCisJRFJNX0ZPUk1BVF9ZMjEyLAorCURSTV9GT1JNQVRfWTIxNiwKKwlEUk1fRk9STUFU X1hZVVY4ODg4LAorCURSTV9GT1JNQVRfWFZZVTIxMDEwMTAsCisJRFJNX0ZPUk1BVF9YVllVMTJf MTYxNjE2MTYsCisJRFJNX0ZPUk1BVF9YVllVMTYxNjE2MTYsCit9OworCitzdGF0aWMgY29uc3Qg dTMyIGljbF9oZHJfcGxhbmVfZm9ybWF0c1tdID0geworCURSTV9GT1JNQVRfQzgsCisJRFJNX0ZP Uk1BVF9SR0I1NjUsCisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFUX1hCR1I4ODg4 LAorCURSTV9GT1JNQVRfQVJHQjg4ODgsCisJRFJNX0ZPUk1BVF9BQkdSODg4OCwKKwlEUk1fRk9S TUFUX1hSR0IyMTAxMDEwLAorCURSTV9GT1JNQVRfWEJHUjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9B UkdCMjEwMTAxMCwKKwlEUk1fRk9STUFUX0FCR1IyMTAxMDEwLAorCURSTV9GT1JNQVRfWFJHQjE2 MTYxNjE2RiwKKwlEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkYsCisJRFJNX0ZPUk1BVF9BUkdCMTYx NjE2MTZGLAorCURSTV9GT1JNQVRfQUJHUjE2MTYxNjE2RiwKKwlEUk1fRk9STUFUX1lVWVYsCisJ RFJNX0ZPUk1BVF9ZVllVLAorCURSTV9GT1JNQVRfVVlWWSwKKwlEUk1fRk9STUFUX1ZZVVksCisJ RFJNX0ZPUk1BVF9OVjEyLAorCURSTV9GT1JNQVRfUDAxMCwKKwlEUk1fRk9STUFUX1AwMTIsCisJ RFJNX0ZPUk1BVF9QMDE2LAorCURSTV9GT1JNQVRfWTIxMCwKKwlEUk1fRk9STUFUX1kyMTIsCisJ RFJNX0ZPUk1BVF9ZMjE2LAorCURSTV9GT1JNQVRfWFlVVjg4ODgsCisJRFJNX0ZPUk1BVF9YVllV MjEwMTAxMCwKKwlEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNiwKKwlEUk1fRk9STUFUX1hWWVUx NjE2MTYxNiwKK307CisKK3N0YXRpYyBjb25zdCB1NjQgc2tsX3BsYW5lX2Zvcm1hdF9tb2RpZmll cnNfbm9jY3NbXSA9IHsKKwlJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQsCisJSTkxNV9GT1JNQVRf TU9EX1lfVElMRUQsCisJSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQsCisJRFJNX0ZPUk1BVF9NT0Rf TElORUFSLAorCURSTV9GT1JNQVRfTU9EX0lOVkFMSUQKK307CisKK3N0YXRpYyBjb25zdCB1NjQg c2tsX3BsYW5lX2Zvcm1hdF9tb2RpZmllcnNfY2NzW10gPSB7CisJSTkxNV9GT1JNQVRfTU9EX1lm X1RJTEVEX0NDUywKKwlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1MsCisJSTkxNV9GT1JNQVRf TU9EX1lmX1RJTEVELAorCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVELAorCUk5MTVfRk9STUFUX01P RF9YX1RJTEVELAorCURSTV9GT1JNQVRfTU9EX0xJTkVBUiwKKwlEUk1fRk9STUFUX01PRF9JTlZB TElECit9OworCitzdGF0aWMgY29uc3QgdTY0IGdlbjEyX3BsYW5lX2Zvcm1hdF9tb2RpZmllcnNf bWNfY2NzW10gPSB7CisJSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNfQ0NTLAorCUk5 MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX1JDX0NDUywKKwlJOTE1X0ZPUk1BVF9NT0RfWV9U SUxFRF9HRU4xMl9SQ19DQ1NfQ0MsCisJSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQsCisJSTkxNV9G T1JNQVRfTU9EX1hfVElMRUQsCisJRFJNX0ZPUk1BVF9NT0RfTElORUFSLAorCURSTV9GT1JNQVRf TU9EX0lOVkFMSUQKK307CisKK3N0YXRpYyBjb25zdCB1NjQgZ2VuMTJfcGxhbmVfZm9ybWF0X21v ZGlmaWVyc19yY19jY3NbXSA9IHsKKwlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19D Q1MsCisJSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTX0NDLAorCUk5MTVfRk9S TUFUX01PRF9ZX1RJTEVELAorCUk5MTVfRk9STUFUX01PRF9YX1RJTEVELAorCURSTV9GT1JNQVRf TU9EX0xJTkVBUiwKKwlEUk1fRk9STUFUX01PRF9JTlZBTElECit9OworCitpbnQgc2tsX2Zvcm1h dF90b19mb3VyY2MoaW50IGZvcm1hdCwgYm9vbCByZ2Jfb3JkZXIsIGJvb2wgYWxwaGEpCit7CisJ c3dpdGNoIChmb3JtYXQpIHsKKwljYXNlIFBMQU5FX0NUTF9GT1JNQVRfUkdCXzU2NToKKwkJcmV0 dXJuIERSTV9GT1JNQVRfUkdCNTY1OworCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9OVjEyOgorCQly ZXR1cm4gRFJNX0ZPUk1BVF9OVjEyOworCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9YWVVWOgorCQly ZXR1cm4gRFJNX0ZPUk1BVF9YWVVWODg4ODsKKwljYXNlIFBMQU5FX0NUTF9GT1JNQVRfUDAxMDoK KwkJcmV0dXJuIERSTV9GT1JNQVRfUDAxMDsKKwljYXNlIFBMQU5FX0NUTF9GT1JNQVRfUDAxMjoK KwkJcmV0dXJuIERSTV9GT1JNQVRfUDAxMjsKKwljYXNlIFBMQU5FX0NUTF9GT1JNQVRfUDAxNjoK KwkJcmV0dXJuIERSTV9GT1JNQVRfUDAxNjsKKwljYXNlIFBMQU5FX0NUTF9GT1JNQVRfWTIxMDoK KwkJcmV0dXJuIERSTV9GT1JNQVRfWTIxMDsKKwljYXNlIFBMQU5FX0NUTF9GT1JNQVRfWTIxMjoK KwkJcmV0dXJuIERSTV9GT1JNQVRfWTIxMjsKKwljYXNlIFBMQU5FX0NUTF9GT1JNQVRfWTIxNjoK KwkJcmV0dXJuIERSTV9GT1JNQVRfWTIxNjsKKwljYXNlIFBMQU5FX0NUTF9GT1JNQVRfWTQxMDoK KwkJcmV0dXJuIERSTV9GT1JNQVRfWFZZVTIxMDEwMTA7CisJY2FzZSBQTEFORV9DVExfRk9STUFU X1k0MTI6CisJCXJldHVybiBEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNjsKKwljYXNlIFBMQU5F X0NUTF9GT1JNQVRfWTQxNjoKKwkJcmV0dXJuIERSTV9GT1JNQVRfWFZZVTE2MTYxNjE2OworCWRl ZmF1bHQ6CisJY2FzZSBQTEFORV9DVExfRk9STUFUX1hSR0JfODg4ODoKKwkJaWYgKHJnYl9vcmRl cikgeworCQkJaWYgKGFscGhhKQorCQkJCXJldHVybiBEUk1fRk9STUFUX0FCR1I4ODg4OworCQkJ ZWxzZQorCQkJCXJldHVybiBEUk1fRk9STUFUX1hCR1I4ODg4OworCQl9IGVsc2UgeworCQkJaWYg KGFscGhhKQorCQkJCXJldHVybiBEUk1fRk9STUFUX0FSR0I4ODg4OworCQkJZWxzZQorCQkJCXJl dHVybiBEUk1fRk9STUFUX1hSR0I4ODg4OworCQl9CisJY2FzZSBQTEFORV9DVExfRk9STUFUX1hS R0JfMjEwMTAxMDoKKwkJaWYgKHJnYl9vcmRlcikgeworCQkJaWYgKGFscGhhKQorCQkJCXJldHVy biBEUk1fRk9STUFUX0FCR1IyMTAxMDEwOworCQkJZWxzZQorCQkJCXJldHVybiBEUk1fRk9STUFU X1hCR1IyMTAxMDEwOworCQl9IGVsc2UgeworCQkJaWYgKGFscGhhKQorCQkJCXJldHVybiBEUk1f Rk9STUFUX0FSR0IyMTAxMDEwOworCQkJZWxzZQorCQkJCXJldHVybiBEUk1fRk9STUFUX1hSR0Iy MTAxMDEwOworCQl9CisJY2FzZSBQTEFORV9DVExfRk9STUFUX1hSR0JfMTYxNjE2MTZGOgorCQlp ZiAocmdiX29yZGVyKSB7CisJCQlpZiAoYWxwaGEpCisJCQkJcmV0dXJuIERSTV9GT1JNQVRfQUJH UjE2MTYxNjE2RjsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZG OworCQl9IGVsc2UgeworCQkJaWYgKGFscGhhKQorCQkJCXJldHVybiBEUk1fRk9STUFUX0FSR0Ix NjE2MTYxNkY7CisJCQllbHNlCisJCQkJcmV0dXJuIERSTV9GT1JNQVRfWFJHQjE2MTYxNjE2RjsK KwkJfQorCX0KK30KKworc3RhdGljIHU4IGljbF9udjEyX3lfcGxhbmVfbWFzayhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSkKK3sKKwlpZiAoSVNfUk9DS0VUTEFLRShpOTE1KSkKKwkJcmV0 dXJuIEJJVChQTEFORV9TUFJJVEUyKSB8IEJJVChQTEFORV9TUFJJVEUzKTsKKwllbHNlCisJCXJl dHVybiBCSVQoUExBTkVfU1BSSVRFNCkgfCBCSVQoUExBTkVfU1BSSVRFNSk7Cit9CisKK2Jvb2wg aWNsX2lzX252MTJfeV9wbGFuZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJ CQkgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCkKK3sKKwlyZXR1cm4gSU5URUxfR0VOKGRldl9wcml2 KSA+PSAxMSAmJgorCQlpY2xfbnYxMl95X3BsYW5lX21hc2soZGV2X3ByaXYpICYgQklUKHBsYW5l X2lkKTsKK30KKworYm9vbCBpY2xfaXNfaGRyX3BsYW5lKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCkKK3sKKwlyZXR1cm4gSU5URUxfR0VO KGRldl9wcml2KSA+PSAxMSAmJgorCQlpY2xfaGRyX3BsYW5lX21hc2soKSAmIEJJVChwbGFuZV9p ZCk7Cit9CisKK3N0YXRpYyB2b2lkCitza2xfcGxhbmVfcmF0aW8oY29uc3Qgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCWNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZSAqcGxhbmVfc3RhdGUsCisJCXVuc2lnbmVkIGludCAqbnVtLCB1bnNpZ25lZCBpbnQgKmRlbikK K3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lX3N0 YXRlLT51YXBpLnBsYW5lLT5kZXYpOworCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi ID0gcGxhbmVfc3RhdGUtPmh3LmZiOworCisJaWYgKGZiLT5mb3JtYXQtPmNwcFswXSA9PSA4KSB7 CisJCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlOSUxBS0UoZGV2X3By aXYpKSB7CisJCQkqbnVtID0gMTA7CisJCQkqZGVuID0gODsKKwkJfSBlbHNlIHsKKwkJCSpudW0g PSA5OworCQkJKmRlbiA9IDg7CisJCX0KKwl9IGVsc2UgeworCQkqbnVtID0gMTsKKwkJKmRlbiA9 IDE7CisJfQorfQorCitzdGF0aWMgaW50IHNrbF9wbGFuZV9taW5fY2RjbGsoY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGlu dGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOworCXVu c2lnbmVkIGludCBudW0sIGRlbjsKKwl1bnNpZ25lZCBpbnQgcGl4ZWxfcmF0ZSA9IGludGVsX3Bs YW5lX3BpeGVsX3JhdGUoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOworCisJc2tsX3BsYW5lX3Jh dGlvKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlLCAmbnVtLCAmZGVuKTsKKworCS8qIHR3byBwaXhl bHMgcGVyIGNsb2NrIG9uIGdsaysgKi8KKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCB8 fCBJU19HRU1JTklMQUtFKGRldl9wcml2KSkKKwkJZGVuICo9IDI7CisKKwlyZXR1cm4gRElWX1JP VU5EX1VQKHBpeGVsX3JhdGUgKiBudW0sIGRlbik7Cit9CisKK3N0YXRpYyBpbnQgc2tsX3BsYW5l X21heF93aWR0aChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCSAgICAgICBp bnQgY29sb3JfcGxhbmUsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9uKQoreworCWlu dCBjcHAgPSBmYi0+Zm9ybWF0LT5jcHBbY29sb3JfcGxhbmVdOworCisJc3dpdGNoIChmYi0+bW9k aWZpZXIpIHsKKwljYXNlIERSTV9GT1JNQVRfTU9EX0xJTkVBUjoKKwljYXNlIEk5MTVfRk9STUFU X01PRF9YX1RJTEVEOgorCQkvKgorCQkgKiBWYWxpZGF0ZWQgbGltaXQgaXMgNGssIGJ1dCBoYXMg NWsgc2hvdWxkCisJCSAqIHdvcmsgYXBhcnQgZnJvbSB0aGUgZm9sbG93aW5nIGZlYXR1cmVzOgor CQkgKiAtIFl0aWxlIChhbHJlYWR5IGxpbWl0ZWQgdG8gNGspCisJCSAqIC0gRlAxNiAoYWxyZWFk eSBsaW1pdGVkIHRvIDRrKQorCQkgKiAtIHJlbmRlciBjb21wcmVzc2lvbiAoYWxyZWFkeSBsaW1p dGVkIHRvIDRrKQorCQkgKiAtIEtWTVIgc3ByaXRlIGFuZCBjdXJzb3IgKGRvbid0IGNhcmUpCisJ CSAqIC0gaG9yaXpvbnRhbCBwYW5uaW5nIChUT0RPIHZlcmlmeSB0aGlzKQorCQkgKiAtIHBpcGUg YW5kIHBsYW5lIHNjYWxpbmcgKFRPRE8gdmVyaWZ5IHRoaXMpCisJCSAqLworCQlpZiAoY3BwID09 IDgpCisJCQlyZXR1cm4gNDA5NjsKKwkJZWxzZQorCQkJcmV0dXJuIDUxMjA7CisJY2FzZSBJOTE1 X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURf Q0NTOgorCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNfQ0NTOgorCQkvKiBG SVhNRSBBVVggcGxhbmU/ICovCisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoKKwljYXNl IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDoKKwkJaWYgKGNwcCA9PSA4KQorCQkJcmV0dXJuIDIw NDg7CisJCWVsc2UKKwkJCXJldHVybiA0MDk2OworCWRlZmF1bHQ6CisJCU1JU1NJTkdfQ0FTRShm Yi0+bW9kaWZpZXIpOworCQlyZXR1cm4gMjA0ODsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ2xrX3Bs YW5lX21heF93aWR0aChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCSAgICAg ICBpbnQgY29sb3JfcGxhbmUsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9uKQorewor CWludCBjcHAgPSBmYi0+Zm9ybWF0LT5jcHBbY29sb3JfcGxhbmVdOworCisJc3dpdGNoIChmYi0+ bW9kaWZpZXIpIHsKKwljYXNlIERSTV9GT1JNQVRfTU9EX0xJTkVBUjoKKwljYXNlIEk5MTVfRk9S TUFUX01PRF9YX1RJTEVEOgorCQlpZiAoY3BwID09IDgpCisJCQlyZXR1cm4gNDA5NjsKKwkJZWxz ZQorCQkJcmV0dXJuIDUxMjA7CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6CisJ Y2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOgorCQkvKiBGSVhNRSBBVVggcGxhbmU/ ICovCisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoKKwljYXNlIEk5MTVfRk9STUFUX01P RF9ZZl9USUxFRDoKKwkJaWYgKGNwcCA9PSA4KQorCQkJcmV0dXJuIDIwNDg7CisJCWVsc2UKKwkJ CXJldHVybiA1MTIwOworCWRlZmF1bHQ6CisJCU1JU1NJTkdfQ0FTRShmYi0+bW9kaWZpZXIpOwor CQlyZXR1cm4gMjA0ODsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaWNsX3BsYW5lX21pbl93aWR0aChj b25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCSAgICAgICBpbnQgY29sb3JfcGxh bmUsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9uKQoreworCS8qIFdhXzE0MDExMjY0 NjU3LCBXYV8xNDAxMTA1MDU2MzogZ2VuMTErICovCisJc3dpdGNoIChmYi0+Zm9ybWF0LT5mb3Jt YXQpIHsKKwljYXNlIERSTV9GT1JNQVRfQzg6CisJCXJldHVybiAxODsKKwljYXNlIERSTV9GT1JN QVRfUkdCNTY1OgorCQlyZXR1cm4gMTA7CisJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgorCWNh c2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6CisJY2Fz ZSBEUk1fRk9STUFUX0FCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMDoKKwlj YXNlIERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX0FSR0IyMTAxMDEw OgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfWFZZVTIx MDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX1kyMTI6CisJY2FzZSBEUk1fRk9STUFUX1kyMTY6CisJ CXJldHVybiA2OworCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgorCQlyZXR1cm4gMjA7CisJY2FzZSBE Uk1fRk9STUFUX1AwMTA6CisJY2FzZSBEUk1fRk9STUFUX1AwMTI6CisJY2FzZSBEUk1fRk9STUFU X1AwMTY6CisJCXJldHVybiAxMjsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjE2MTYxNjE2RjoKKwlj YXNlIERSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RjoKKwljYXNlIERSTV9GT1JNQVRfQVJHQjE2MTYx NjE2RjoKKwljYXNlIERSTV9GT1JNQVRfQUJHUjE2MTYxNjE2RjoKKwljYXNlIERSTV9GT1JNQVRf WFZZVTEyXzE2MTYxNjE2OgorCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTYxNjE2MTY6CisJCXJldHVy biA0OworCWRlZmF1bHQ6CisJCXJldHVybiAxOworCX0KK30KKworc3RhdGljIGludCBpY2xfcGxh bmVfbWF4X3dpZHRoKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJICAgICAg IGludCBjb2xvcl9wbGFuZSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCit7CisJ cmV0dXJuIDUxMjA7Cit9CisKK3N0YXRpYyBpbnQgc2tsX3BsYW5lX21heF9oZWlnaHQoY29uc3Qg c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJaW50IGNvbG9yX3BsYW5lLAorCQkJCXVu c2lnbmVkIGludCByb3RhdGlvbikKK3sKKwlyZXR1cm4gNDA5NjsKK30KKworc3RhdGljIGludCBp Y2xfcGxhbmVfbWF4X2hlaWdodChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJ CQlpbnQgY29sb3JfcGxhbmUsCisJCQkJdW5zaWduZWQgaW50IHJvdGF0aW9uKQoreworCXJldHVy biA0MzIwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50Citza2xfcGxhbmVfbWF4X3N0cmlkZShz dHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAorCQkgICAgIHUzMiBwaXhlbF9mb3JtYXQsIHU2NCBt b2RpZmllciwKKwkJICAgICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCit7CisJY29uc3Qgc3RydWN0 IGRybV9mb3JtYXRfaW5mbyAqaW5mbyA9IGRybV9mb3JtYXRfaW5mbyhwaXhlbF9mb3JtYXQpOwor CWludCBjcHAgPSBpbmZvLT5jcHBbMF07CisKKwkvKgorCSAqICJUaGUgc3RyaWRlIGluIGJ5dGVz IG11c3Qgbm90IGV4Y2VlZCB0aGUKKwkgKiBvZiB0aGUgc2l6ZSBvZiA4SyBwaXhlbHMgYW5kIDMy SyBieXRlcy4iCisJICovCisJaWYgKGRybV9yb3RhdGlvbl85MF9vcl8yNzAocm90YXRpb24pKQor CQlyZXR1cm4gbWluKDgxOTIsIDMyNzY4IC8gY3BwKTsKKwllbHNlCisJCXJldHVybiBtaW4oODE5 MiAqIGNwcCwgMzI3NjgpOworfQorCisKKy8qIFByZW9mZnNldCB2YWx1ZXMgZm9yIFlVViB0byBS R0IgQ29udmVyc2lvbiAqLworI2RlZmluZSBQUkVPRkZfWVVWX1RPX1JHQl9ISQkJMHgxODAwCisj ZGVmaW5lIFBSRU9GRl9ZVVZfVE9fUkdCX01FCQkweDFGMDAKKyNkZWZpbmUgUFJFT0ZGX1lVVl9U T19SR0JfTE8JCTB4MTgwMAorCisjZGVmaW5lICBST0ZGKHgpICAgICAgICAgICgoKHgpICYgMHhm ZmZmKSA8PCAxNikKKyNkZWZpbmUgIEdPRkYoeCkgICAgICAgICAgKCgoeCkgJiAweGZmZmYpIDw8 IDApCisjZGVmaW5lICBCT0ZGKHgpICAgICAgICAgICgoKHgpICYgMHhmZmZmKSA8PCAxNikKKwor c3RhdGljIHZvaWQKK2ljbF9wcm9ncmFtX2lucHV0X2NzYyhzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBs YW5lLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwK KwkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNl LmRldik7CisJZW51bSBwaXBlIHBpcGUgPSBwbGFuZS0+cGlwZTsKKwllbnVtIHBsYW5lX2lkIHBs YW5lX2lkID0gcGxhbmUtPmlkOworCisJc3RhdGljIGNvbnN0IHUxNiBpbnB1dF9jc2NfbWF0cml4 W11bOV0gPSB7CisJCS8qCisJCSAqIEJULjYwMSBmdWxsIHJhbmdlIFlDYkNyIC0+IGZ1bGwgcmFu Z2UgUkdCCisJCSAqIFRoZSBtYXRyaXggcmVxdWlyZWQgaXMgOgorCQkgKiBbMS4wMDAsIDAuMDAw LCAxLjM3MSwKKwkJICogIDEuMDAwLCAtMC4zMzYsIC0wLjY5OCwKKwkJICogIDEuMDAwLCAxLjcz MiwgMC4wMDAwXQorCQkgKi8KKwkJW0RSTV9DT0xPUl9ZQ0JDUl9CVDYwMV0gPSB7CisJCQkweDdB RjgsIDB4NzgwMCwgMHgwLAorCQkJMHg4QjI4LCAweDc4MDAsIDB4OUFDMCwKKwkJCTB4MCwgMHg3 ODAwLCAweDdERDgsCisJCX0sCisJCS8qCisJCSAqIEJULjcwOSBmdWxsIHJhbmdlIFlDYkNyIC0+ IGZ1bGwgcmFuZ2UgUkdCCisJCSAqIFRoZSBtYXRyaXggcmVxdWlyZWQgaXMgOgorCQkgKiBbMS4w MDAsIDAuMDAwLCAxLjU3NCwKKwkJICogIDEuMDAwLCAtMC4xODcsIC0wLjQ2OCwKKwkJICogIDEu MDAwLCAxLjg1NSwgMC4wMDAwXQorCQkgKi8KKwkJW0RSTV9DT0xPUl9ZQ0JDUl9CVDcwOV0gPSB7 CisJCQkweDdDOTgsIDB4NzgwMCwgMHgwLAorCQkJMHg5RUY4LCAweDc4MDAsIDB4QUMwMCwKKwkJ CTB4MCwgMHg3ODAwLCAgMHg3RUQ4LAorCQl9LAorCQkvKgorCQkgKiBCVC4yMDIwIGZ1bGwgcmFu Z2UgWUNiQ3IgLT4gZnVsbCByYW5nZSBSR0IKKwkJICogVGhlIG1hdHJpeCByZXF1aXJlZCBpcyA6 CisJCSAqIFsxLjAwMCwgMC4wMDAsIDEuNDc0LAorCQkgKiAgMS4wMDAsIC0wLjE2NDUsIC0wLjU3 MTMsCisJCSAqICAxLjAwMCwgMS44ODE0LCAwLjAwMDBdCisJCSAqLworCQlbRFJNX0NPTE9SX1lD QkNSX0JUMjAyMF0gPSB7CisJCQkweDdCQzgsIDB4NzgwMCwgMHgwLAorCQkJMHg4OTI4LCAweDc4 MDAsIDB4QUE4OCwKKwkJCTB4MCwgMHg3ODAwLCAweDdGMTAsCisJCX0sCisJfTsKKworCS8qIE1h dHJpeCBmb3IgTGltaXRlZCBSYW5nZSB0byBGdWxsIFJhbmdlIENvbnZlcnNpb24gKi8KKwlzdGF0 aWMgY29uc3QgdTE2IGlucHV0X2NzY19tYXRyaXhfbHJbXVs5XSA9IHsKKwkJLyoKKwkJICogQlQu NjAxIExpbXRlZCByYW5nZSBZQ2JDciAtPiBmdWxsIHJhbmdlIFJHQgorCQkgKiBUaGUgbWF0cml4 IHJlcXVpcmVkIGlzIDoKKwkJICogWzEuMTY0Mzg0LCAwLjAwMCwgMS41OTYwMjcsCisJCSAqICAx LjE2NDM4NCwgLTAuMzkxNzUsIC0wLjgxMjgxMywKKwkJICogIDEuMTY0Mzg0LCAyLjAxNzIzMiwg MC4wMDAwXQorCQkgKi8KKwkJW0RSTV9DT0xPUl9ZQ0JDUl9CVDYwMV0gPSB7CisJCQkweDdDQzgs IDB4Nzk1MCwgMHgwLAorCQkJMHg4RDAwLCAweDc5NTAsIDB4OUM4OCwKKwkJCTB4MCwgMHg3OTUw LCAweDY4MTAsCisJCX0sCisJCS8qCisJCSAqIEJULjcwOSBMaW1pdGVkIHJhbmdlIFlDYkNyIC0+ IGZ1bGwgcmFuZ2UgUkdCCisJCSAqIFRoZSBtYXRyaXggcmVxdWlyZWQgaXMgOgorCQkgKiBbMS4x NjQzODQsIDAuMDAwLCAxLjc5Mjc0MSwKKwkJICogIDEuMTY0Mzg0LCAtMC4yMTMyNDksIC0wLjUz MjkwOSwKKwkJICogIDEuMTY0Mzg0LCAyLjExMjQwMiwgMC4wMDAwXQorCQkgKi8KKwkJW0RSTV9D T0xPUl9ZQ0JDUl9CVDcwOV0gPSB7CisJCQkweDdFNTgsIDB4Nzk1MCwgMHgwLAorCQkJMHg4ODg4 LCAweDc5NTAsIDB4QURBOCwKKwkJCTB4MCwgMHg3OTUwLCAgMHg2ODcwLAorCQl9LAorCQkvKgor CQkgKiBCVC4yMDIwIExpbWl0ZWQgcmFuZ2UgWUNiQ3IgLT4gZnVsbCByYW5nZSBSR0IKKwkJICog VGhlIG1hdHJpeCByZXF1aXJlZCBpcyA6CisJCSAqIFsxLjE2NCwgMC4wMDAsIDEuNjc4LAorCQkg KiAgMS4xNjQsIC0wLjE4NzMsIC0wLjY1MDQsCisJCSAqICAxLjE2NCwgMi4xNDE3LCAwLjAwMDBd CisJCSAqLworCQlbRFJNX0NPTE9SX1lDQkNSX0JUMjAyMF0gPSB7CisJCQkweDdENzAsIDB4Nzk1 MCwgMHgwLAorCQkJMHg4QTY4LCAweDc5NTAsIDB4QUMwMCwKKwkJCTB4MCwgMHg3OTUwLCAweDY4 OTAsCisJCX0sCisJfTsKKwljb25zdCB1MTYgKmNzYzsKKworCWlmIChwbGFuZV9zdGF0ZS0+aHcu Y29sb3JfcmFuZ2UgPT0gRFJNX0NPTE9SX1lDQkNSX0ZVTExfUkFOR0UpCisJCWNzYyA9IGlucHV0 X2NzY19tYXRyaXhbcGxhbmVfc3RhdGUtPmh3LmNvbG9yX2VuY29kaW5nXTsKKwllbHNlCisJCWNz YyA9IGlucHV0X2NzY19tYXRyaXhfbHJbcGxhbmVfc3RhdGUtPmh3LmNvbG9yX2VuY29kaW5nXTsK KworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9JTlBVVF9DU0NfQ09FRkYocGlw ZSwgcGxhbmVfaWQsIDApLAorCQkJICBST0ZGKGNzY1swXSkgfCBHT0ZGKGNzY1sxXSkpOworCWlu dGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9JTlBVVF9DU0NfQ09FRkYocGlwZSwgcGxh bmVfaWQsIDEpLAorCQkJICBCT0ZGKGNzY1syXSkpOworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9w cml2LCBQTEFORV9JTlBVVF9DU0NfQ09FRkYocGlwZSwgcGxhbmVfaWQsIDIpLAorCQkJICBST0ZG KGNzY1szXSkgfCBHT0ZGKGNzY1s0XSkpOworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQ TEFORV9JTlBVVF9DU0NfQ09FRkYocGlwZSwgcGxhbmVfaWQsIDMpLAorCQkJICBCT0ZGKGNzY1s1 XSkpOworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9JTlBVVF9DU0NfQ09FRkYo cGlwZSwgcGxhbmVfaWQsIDQpLAorCQkJICBST0ZGKGNzY1s2XSkgfCBHT0ZGKGNzY1s3XSkpOwor CWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9JTlBVVF9DU0NfQ09FRkYocGlwZSwg cGxhbmVfaWQsIDUpLAorCQkJICBCT0ZGKGNzY1s4XSkpOworCisJaW50ZWxfZGVfd3JpdGVfZnco ZGV2X3ByaXYsIFBMQU5FX0lOUFVUX0NTQ19QUkVPRkYocGlwZSwgcGxhbmVfaWQsIDApLAorCQkJ ICBQUkVPRkZfWVVWX1RPX1JHQl9ISSk7CisJaWYgKHBsYW5lX3N0YXRlLT5ody5jb2xvcl9yYW5n ZSA9PSBEUk1fQ09MT1JfWUNCQ1JfRlVMTF9SQU5HRSkKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2 X3ByaXYsCisJCQkJICBQTEFORV9JTlBVVF9DU0NfUFJFT0ZGKHBpcGUsIHBsYW5lX2lkLCAxKSwK KwkJCQkgIDApOworCWVsc2UKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsCisJCQkJICBQ TEFORV9JTlBVVF9DU0NfUFJFT0ZGKHBpcGUsIHBsYW5lX2lkLCAxKSwKKwkJCQkgIFBSRU9GRl9Z VVZfVE9fUkdCX01FKTsKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRf Q1NDX1BSRU9GRihwaXBlLCBwbGFuZV9pZCwgMiksCisJCQkgIFBSRU9GRl9ZVVZfVE9fUkdCX0xP KTsKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwKKwkJCSAgUExBTkVfSU5QVVRfQ1NDX1BP U1RPRkYocGlwZSwgcGxhbmVfaWQsIDApLCAweDApOworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9w cml2LAorCQkJICBQTEFORV9JTlBVVF9DU0NfUE9TVE9GRihwaXBlLCBwbGFuZV9pZCwgMSksIDB4 MCk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsCisJCQkgIFBMQU5FX0lOUFVUX0NTQ19Q T1NUT0ZGKHBpcGUsIHBsYW5lX2lkLCAyKSwgMHgwKTsKK30KKworc3RhdGljIGJvb2wgaXNfc3Vy ZmFjZV9saW5lYXIoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjb2xvcl9w bGFuZSkKK3sKKwlyZXR1cm4gZmItPm1vZGlmaWVyID09IERSTV9GT1JNQVRfTU9EX0xJTkVBUiB8 fAorCSAgICAgICBpc19nZW4xMl9jY3NfcGxhbmUoZmIsIGNvbG9yX3BsYW5lKTsKK30KKworc3Rh dGljIHVuc2lnbmVkIGludCBza2xfcGxhbmVfc3RyaWRlX211bHQoY29uc3Qgc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmIsCisJCQkJCSAgaW50IGNvbG9yX3BsYW5lLCB1bnNpZ25lZCBpbnQgcm90 YXRpb24pCit7CisJLyoKKwkgKiBUaGUgc3RyaWRlIGlzIGVpdGhlciBleHByZXNzZWQgYXMgYSBt dWx0aXBsZSBvZiA2NCBieXRlcyBjaHVua3MgZm9yCisJICogbGluZWFyIGJ1ZmZlcnMgb3IgaW4g bnVtYmVyIG9mIHRpbGVzIGZvciB0aWxlZCBidWZmZXJzLgorCSAqLworCWlmIChpc19zdXJmYWNl X2xpbmVhcihmYiwgY29sb3JfcGxhbmUpKQorCQlyZXR1cm4gNjQ7CisJZWxzZSBpZiAoZHJtX3Jv dGF0aW9uXzkwX29yXzI3MChyb3RhdGlvbikpCisJCXJldHVybiBpbnRlbF90aWxlX2hlaWdodChm YiwgY29sb3JfcGxhbmUpOworCWVsc2UKKwkJcmV0dXJuIGludGVsX3RpbGVfd2lkdGhfYnl0ZXMo ZmIsIGNvbG9yX3BsYW5lKTsKK30KKworc3RhdGljIHUzMiBza2xfcGxhbmVfc3RyaWRlKGNvbnN0 IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCisJCQkgICAgaW50IGNvbG9y X3BsYW5lKQoreworCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3Rh dGUtPmh3LmZiOworCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5ody5yb3Rh dGlvbjsKKwl1MzIgc3RyaWRlID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2NvbG9yX3BsYW5l XS5zdHJpZGU7CisKKwlpZiAoY29sb3JfcGxhbmUgPj0gZmItPmZvcm1hdC0+bnVtX3BsYW5lcykK KwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc3RyaWRlIC8gc2tsX3BsYW5lX3N0cmlkZV9tdWx0KGZi LCBjb2xvcl9wbGFuZSwgcm90YXRpb24pOworfQorCitzdGF0aWMgdm9pZAorc2tsX2Rpc2FibGVf cGxhbmUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKKwkJICBjb25zdCBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7CisJZW51bSBwbGFuZV9pZCBwbGFuZV9p ZCA9IHBsYW5lLT5pZDsKKwllbnVtIHBpcGUgcGlwZSA9IHBsYW5lLT5waXBlOworCXVuc2lnbmVk IGxvbmcgaXJxZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5s b2NrLCBpcnFmbGFncyk7CisKKwlpZiAoaWNsX2lzX2hkcl9wbGFuZShkZXZfcHJpdiwgcGxhbmVf aWQpKQorCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfQ1VTX0NUTChwaXBlLCBw bGFuZV9pZCksIDApOworCisJc2tsX3dyaXRlX3BsYW5lX3dtKHBsYW5lLCBjcnRjX3N0YXRlKTsK KworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9DVEwocGlwZSwgcGxhbmVfaWQp LCAwKTsKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfU1VSRihwaXBlLCBwbGFu ZV9pZCksIDApOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5s b2NrLCBpcnFmbGFncyk7Cit9CisKK3N0YXRpYyBib29sCitza2xfcGxhbmVfZ2V0X2h3X3N0YXRl KHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCisJCSAgICAgICBlbnVtIHBpcGUgKnBpcGUpCit7 CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFz ZS5kZXYpOworCWVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gcG93ZXJfZG9tYWluOwor CWVudW0gcGxhbmVfaWQgcGxhbmVfaWQgPSBwbGFuZS0+aWQ7CisJaW50ZWxfd2FrZXJlZl90IHdh a2VyZWY7CisJYm9vbCByZXQ7CisKKwlwb3dlcl9kb21haW4gPSBQT1dFUl9ET01BSU5fUElQRShw bGFuZS0+cGlwZSk7CisJd2FrZXJlZiA9IGludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0X2lmX2VuYWJs ZWQoZGV2X3ByaXYsIHBvd2VyX2RvbWFpbik7CisJaWYgKCF3YWtlcmVmKQorCQlyZXR1cm4gZmFs c2U7CisKKwlyZXQgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQTEFORV9DVEwocGxhbmUtPnBp cGUsIHBsYW5lX2lkKSkgJiBQTEFORV9DVExfRU5BQkxFOworCisJKnBpcGUgPSBwbGFuZS0+cGlw ZTsKKworCWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRldl9wcml2LCBwb3dlcl9kb21haW4sIHdh a2VyZWYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHUzMiBza2xfcGxhbmVfY3RsX2Zv cm1hdCh1MzIgcGl4ZWxfZm9ybWF0KQoreworCXN3aXRjaCAocGl4ZWxfZm9ybWF0KSB7CisJY2Fz ZSBEUk1fRk9STUFUX0M4OgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9JTkRFWEVEOworCWNh c2UgRFJNX0ZPUk1BVF9SR0I1NjU6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1JHQl81NjU7 CisJY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoK KwkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWFJHQl84ODg4IHwgUExBTkVfQ1RMX09SREVSX1JH Qlg7CisJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4 ODoKKwkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWFJHQl84ODg4OworCWNhc2UgRFJNX0ZPUk1B VF9YQkdSMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfQUJHUjIxMDEwMTA6CisJCXJldHVybiBQ TEFORV9DVExfRk9STUFUX1hSR0JfMjEwMTAxMCB8IFBMQU5FX0NUTF9PUkRFUl9SR0JYOworCWNh c2UgRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfQVJHQjIxMDEwMTA6 CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1hSR0JfMjEwMTAxMDsKKwljYXNlIERSTV9GT1JN QVRfWEJHUjE2MTYxNjE2RjoKKwljYXNlIERSTV9GT1JNQVRfQUJHUjE2MTYxNjE2RjoKKwkJcmV0 dXJuIFBMQU5FX0NUTF9GT1JNQVRfWFJHQl8xNjE2MTYxNkYgfCBQTEFORV9DVExfT1JERVJfUkdC WDsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjE2MTYxNjE2RjoKKwljYXNlIERSTV9GT1JNQVRfQVJH QjE2MTYxNjE2RjoKKwkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWFJHQl8xNjE2MTYxNkY7CisJ Y2FzZSBEUk1fRk9STUFUX1hZVVY4ODg4OgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9YWVVW OworCWNhc2UgRFJNX0ZPUk1BVF9ZVVlWOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9ZVVY0 MjIgfCBQTEFORV9DVExfWVVWNDIyX1lVWVY7CisJY2FzZSBEUk1fRk9STUFUX1lWWVU6CisJCXJl dHVybiBQTEFORV9DVExfRk9STUFUX1lVVjQyMiB8IFBMQU5FX0NUTF9ZVVY0MjJfWVZZVTsKKwlj YXNlIERSTV9GT1JNQVRfVVlWWToKKwkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWVVWNDIyIHwg UExBTkVfQ1RMX1lVVjQyMl9VWVZZOworCWNhc2UgRFJNX0ZPUk1BVF9WWVVZOgorCQlyZXR1cm4g UExBTkVfQ1RMX0ZPUk1BVF9ZVVY0MjIgfCBQTEFORV9DVExfWVVWNDIyX1ZZVVk7CisJY2FzZSBE Uk1fRk9STUFUX05WMTI6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX05WMTI7CisJY2FzZSBE Uk1fRk9STUFUX1AwMTA6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1AwMTA7CisJY2FzZSBE Uk1fRk9STUFUX1AwMTI6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1AwMTI7CisJY2FzZSBE Uk1fRk9STUFUX1AwMTY6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1AwMTY7CisJY2FzZSBE Uk1fRk9STUFUX1kyMTA6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1kyMTA7CisJY2FzZSBE Uk1fRk9STUFUX1kyMTI6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1kyMTI7CisJY2FzZSBE Uk1fRk9STUFUX1kyMTY6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1kyMTY7CisJY2FzZSBE Uk1fRk9STUFUX1hWWVUyMTAxMDEwOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9ZNDEwOwor CWNhc2UgRFJNX0ZPUk1BVF9YVllVMTJfMTYxNjE2MTY6CisJCXJldHVybiBQTEFORV9DVExfRk9S TUFUX1k0MTI7CisJY2FzZSBEUk1fRk9STUFUX1hWWVUxNjE2MTYxNjoKKwkJcmV0dXJuIFBMQU5F X0NUTF9GT1JNQVRfWTQxNjsKKwlkZWZhdWx0OgorCQlNSVNTSU5HX0NBU0UocGl4ZWxfZm9ybWF0 KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBza2xfcGxhbmVfY3RsX2FscGhh KGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJaWYgKCFw bGFuZV9zdGF0ZS0+aHcuZmItPmZvcm1hdC0+aGFzX2FscGhhKQorCQlyZXR1cm4gUExBTkVfQ1RM X0FMUEhBX0RJU0FCTEU7CisKKwlzd2l0Y2ggKHBsYW5lX3N0YXRlLT5ody5waXhlbF9ibGVuZF9t b2RlKSB7CisJY2FzZSBEUk1fTU9ERV9CTEVORF9QSVhFTF9OT05FOgorCQlyZXR1cm4gUExBTkVf Q1RMX0FMUEhBX0RJU0FCTEU7CisJY2FzZSBEUk1fTU9ERV9CTEVORF9QUkVNVUxUSToKKwkJcmV0 dXJuIFBMQU5FX0NUTF9BTFBIQV9TV19QUkVNVUxUSVBMWTsKKwljYXNlIERSTV9NT0RFX0JMRU5E X0NPVkVSQUdFOgorCQlyZXR1cm4gUExBTkVfQ1RMX0FMUEhBX0hXX1BSRU1VTFRJUExZOworCWRl ZmF1bHQ6CisJCU1JU1NJTkdfQ0FTRShwbGFuZV9zdGF0ZS0+aHcucGl4ZWxfYmxlbmRfbW9kZSk7 CisJCXJldHVybiBQTEFORV9DVExfQUxQSEFfRElTQUJMRTsKKwl9Cit9CisKK3N0YXRpYyB1MzIg Z2xrX3BsYW5lX2NvbG9yX2N0bF9hbHBoYShjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlKQoreworCWlmICghcGxhbmVfc3RhdGUtPmh3LmZiLT5mb3JtYXQtPmhhc19h bHBoYSkKKwkJcmV0dXJuIFBMQU5FX0NPTE9SX0FMUEhBX0RJU0FCTEU7CisKKwlzd2l0Y2ggKHBs YW5lX3N0YXRlLT5ody5waXhlbF9ibGVuZF9tb2RlKSB7CisJY2FzZSBEUk1fTU9ERV9CTEVORF9Q SVhFTF9OT05FOgorCQlyZXR1cm4gUExBTkVfQ09MT1JfQUxQSEFfRElTQUJMRTsKKwljYXNlIERS TV9NT0RFX0JMRU5EX1BSRU1VTFRJOgorCQlyZXR1cm4gUExBTkVfQ09MT1JfQUxQSEFfU1dfUFJF TVVMVElQTFk7CisJY2FzZSBEUk1fTU9ERV9CTEVORF9DT1ZFUkFHRToKKwkJcmV0dXJuIFBMQU5F X0NPTE9SX0FMUEhBX0hXX1BSRU1VTFRJUExZOworCWRlZmF1bHQ6CisJCU1JU1NJTkdfQ0FTRShw bGFuZV9zdGF0ZS0+aHcucGl4ZWxfYmxlbmRfbW9kZSk7CisJCXJldHVybiBQTEFORV9DT0xPUl9B TFBIQV9ESVNBQkxFOworCX0KK30KKworc3RhdGljIHUzMiBza2xfcGxhbmVfY3RsX3RpbGluZyh1 NjQgZmJfbW9kaWZpZXIpCit7CisJc3dpdGNoIChmYl9tb2RpZmllcikgeworCWNhc2UgRFJNX0ZP Uk1BVF9NT0RfTElORUFSOgorCQlicmVhazsKKwljYXNlIEk5MTVfRk9STUFUX01PRF9YX1RJTEVE OgorCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1g7CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9U SUxFRDoKKwkJcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9ZOworCWNhc2UgSTkxNV9GT1JNQVRfTU9E X1lfVElMRURfQ0NTOgorCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NT X0NDOgorCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1kgfCBQTEFORV9DVExfUkVOREVSX0RFQ09N UFJFU1NJT05fRU5BQkxFOworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNf Q0NTOgorCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1kgfAorCQkgICAgICAgUExBTkVfQ1RMX1JF TkRFUl9ERUNPTVBSRVNTSU9OX0VOQUJMRSB8CisJCSAgICAgICBQTEFORV9DVExfQ0xFQVJfQ09M T1JfRElTQUJMRTsKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUzoK KwkJcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9ZIHwgUExBTkVfQ1RMX01FRElBX0RFQ09NUFJFU1NJ T05fRU5BQkxFOworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgorCQlyZXR1cm4gUExB TkVfQ1RMX1RJTEVEX1lGOworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoKKwkJ cmV0dXJuIFBMQU5FX0NUTF9USUxFRF9ZRiB8IFBMQU5FX0NUTF9SRU5ERVJfREVDT01QUkVTU0lP Tl9FTkFCTEU7CisJZGVmYXVsdDoKKwkJTUlTU0lOR19DQVNFKGZiX21vZGlmaWVyKTsKKwl9CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBza2xfcGxhbmVfY3RsX3JvdGF0ZSh1bnNpZ25l ZCBpbnQgcm90YXRlKQoreworCXN3aXRjaCAocm90YXRlKSB7CisJY2FzZSBEUk1fTU9ERV9ST1RB VEVfMDoKKwkJYnJlYWs7CisJLyoKKwkgKiBEUk1fTU9ERV9ST1RBVEVfIGlzIGNvdW50ZXIgY2xv Y2t3aXNlIHRvIHN0YXkgY29tcGF0aWJsZSB3aXRoIFhyYW5kcgorCSAqIHdoaWxlIGk5MTUgSFcg cm90YXRpb24gaXMgY2xvY2t3aXNlLCB0aGF0cyB3aHkgdGhpcyBzd2FwcGluZy4KKwkgKi8KKwlj YXNlIERSTV9NT0RFX1JPVEFURV85MDoKKwkJcmV0dXJuIFBMQU5FX0NUTF9ST1RBVEVfMjcwOwor CWNhc2UgRFJNX01PREVfUk9UQVRFXzE4MDoKKwkJcmV0dXJuIFBMQU5FX0NUTF9ST1RBVEVfMTgw OworCWNhc2UgRFJNX01PREVfUk9UQVRFXzI3MDoKKwkJcmV0dXJuIFBMQU5FX0NUTF9ST1RBVEVf OTA7CisJZGVmYXVsdDoKKwkJTUlTU0lOR19DQVNFKHJvdGF0ZSk7CisJfQorCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyB1MzIgY25sX3BsYW5lX2N0bF9mbGlwKHVuc2lnbmVkIGludCByZWZsZWN0 KQoreworCXN3aXRjaCAocmVmbGVjdCkgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSBEUk1f TU9ERV9SRUZMRUNUX1g6CisJCXJldHVybiBQTEFORV9DVExfRkxJUF9IT1JJWk9OVEFMOworCWNh c2UgRFJNX01PREVfUkVGTEVDVF9ZOgorCWRlZmF1bHQ6CisJCU1JU1NJTkdfQ0FTRShyZWZsZWN0 KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBza2xfcGxhbmVfY3RsX2NydGMo Y29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjX3N0YXRlLT51YXBpLmNydGMt PmRldik7CisJdTMyIHBsYW5lX2N0bCA9IDA7CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+ PSAxMCB8fCBJU19HRU1JTklMQUtFKGRldl9wcml2KSkKKwkJcmV0dXJuIHBsYW5lX2N0bDsKKwor CWlmIChjcnRjX3N0YXRlLT5nYW1tYV9lbmFibGUpCisJCXBsYW5lX2N0bCB8PSBQTEFORV9DVExf UElQRV9HQU1NQV9FTkFCTEU7CisKKwlpZiAoY3J0Y19zdGF0ZS0+Y3NjX2VuYWJsZSkKKwkJcGxh bmVfY3RsIHw9IFBMQU5FX0NUTF9QSVBFX0NTQ19FTkFCTEU7CisKKwlyZXR1cm4gcGxhbmVfY3Rs OworfQorCitzdGF0aWMgdTMyIHNrbF9wbGFuZV9jdGwoY29uc3Qgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUsCisJCQkgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpw bGFuZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQorCQl0 b19pOTE1KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOworCWNvbnN0IHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOworCXVuc2lnbmVkIGludCByb3Rh dGlvbiA9IHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbjsKKwljb25zdCBzdHJ1Y3QgZHJtX2ludGVs X3Nwcml0ZV9jb2xvcmtleSAqa2V5ID0gJnBsYW5lX3N0YXRlLT5ja2V5OworCXUzMiBwbGFuZV9j dGw7CisKKwlwbGFuZV9jdGwgPSBQTEFORV9DVExfRU5BQkxFOworCisJaWYgKElOVEVMX0dFTihk ZXZfcHJpdikgPCAxMCAmJiAhSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpIHsKKwkJcGxhbmVfY3Rs IHw9IHNrbF9wbGFuZV9jdGxfYWxwaGEocGxhbmVfc3RhdGUpOworCQlwbGFuZV9jdGwgfD0gUExB TkVfQ1RMX1BMQU5FX0dBTU1BX0RJU0FCTEU7CisKKwkJaWYgKHBsYW5lX3N0YXRlLT5ody5jb2xv cl9lbmNvZGluZyA9PSBEUk1fQ09MT1JfWUNCQ1JfQlQ3MDkpCisJCQlwbGFuZV9jdGwgfD0gUExB TkVfQ1RMX1lVVl9UT19SR0JfQ1NDX0ZPUk1BVF9CVDcwOTsKKworCQlpZiAocGxhbmVfc3RhdGUt Pmh3LmNvbG9yX3JhbmdlID09IERSTV9DT0xPUl9ZQ0JDUl9GVUxMX1JBTkdFKQorCQkJcGxhbmVf Y3RsIHw9IFBMQU5FX0NUTF9ZVVZfUkFOR0VfQ09SUkVDVElPTl9ESVNBQkxFOworCX0KKworCXBs YW5lX2N0bCB8PSBza2xfcGxhbmVfY3RsX2Zvcm1hdChmYi0+Zm9ybWF0LT5mb3JtYXQpOworCXBs YW5lX2N0bCB8PSBza2xfcGxhbmVfY3RsX3RpbGluZyhmYi0+bW9kaWZpZXIpOworCXBsYW5lX2N0 bCB8PSBza2xfcGxhbmVfY3RsX3JvdGF0ZShyb3RhdGlvbiAmIERSTV9NT0RFX1JPVEFURV9NQVNL KTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwKQorCQlwbGFuZV9jdGwgfD0gY25s X3BsYW5lX2N0bF9mbGlwKHJvdGF0aW9uICYKKwkJCQkJCURSTV9NT0RFX1JFRkxFQ1RfTUFTSyk7 CisKKwlpZiAoa2V5LT5mbGFncyAmIEk5MTVfU0VUX0NPTE9SS0VZX0RFU1RJTkFUSU9OKQorCQlw bGFuZV9jdGwgfD0gUExBTkVfQ1RMX0tFWV9FTkFCTEVfREVTVElOQVRJT047CisJZWxzZSBpZiAo a2V5LT5mbGFncyAmIEk5MTVfU0VUX0NPTE9SS0VZX1NPVVJDRSkKKwkJcGxhbmVfY3RsIHw9IFBM QU5FX0NUTF9LRVlfRU5BQkxFX1NPVVJDRTsKKworCXJldHVybiBwbGFuZV9jdGw7Cit9CisKK3N0 YXRpYyB1MzIgZ2xrX3BsYW5lX2NvbG9yX2N0bF9jcnRjKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHRvX2k5MTUoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjLT5kZXYpOworCXUzMiBwbGFuZV9jb2xv cl9jdGwgPSAwOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEpCisJCXJldHVybiBw bGFuZV9jb2xvcl9jdGw7CisKKwlpZiAoY3J0Y19zdGF0ZS0+Z2FtbWFfZW5hYmxlKQorCQlwbGFu ZV9jb2xvcl9jdGwgfD0gUExBTkVfQ09MT1JfUElQRV9HQU1NQV9FTkFCTEU7CisKKwlpZiAoY3J0 Y19zdGF0ZS0+Y3NjX2VuYWJsZSkKKwkJcGxhbmVfY29sb3JfY3RsIHw9IFBMQU5FX0NPTE9SX1BJ UEVfQ1NDX0VOQUJMRTsKKworCXJldHVybiBwbGFuZV9jb2xvcl9jdGw7Cit9CisKK3N0YXRpYyB1 MzIgZ2xrX3BsYW5lX2NvbG9yX2N0bChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9CisJCXRvX2k5 MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7CisJY29uc3Qgc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7CisJc3RydWN0IGludGVsX3BsYW5lICpw bGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsKKwl1MzIgcGxh bmVfY29sb3JfY3RsID0gMDsKKworCXBsYW5lX2NvbG9yX2N0bCB8PSBQTEFORV9DT0xPUl9QTEFO RV9HQU1NQV9ESVNBQkxFOworCXBsYW5lX2NvbG9yX2N0bCB8PSBnbGtfcGxhbmVfY29sb3JfY3Rs X2FscGhhKHBsYW5lX3N0YXRlKTsKKworCWlmIChmYi0+Zm9ybWF0LT5pc195dXYgJiYgIWljbF9p c19oZHJfcGxhbmUoZGV2X3ByaXYsIHBsYW5lLT5pZCkpIHsKKwkJc3dpdGNoIChwbGFuZV9zdGF0 ZS0+aHcuY29sb3JfZW5jb2RpbmcpIHsKKwkJY2FzZSBEUk1fQ09MT1JfWUNCQ1JfQlQ3MDk6CisJ CQlwbGFuZV9jb2xvcl9jdGwgfD0gUExBTkVfQ09MT1JfQ1NDX01PREVfWVVWNzA5X1RPX1JHQjcw OTsKKwkJCWJyZWFrOworCQljYXNlIERSTV9DT0xPUl9ZQ0JDUl9CVDIwMjA6CisJCQlwbGFuZV9j b2xvcl9jdGwgfD0KKwkJCQlQTEFORV9DT0xPUl9DU0NfTU9ERV9ZVVYyMDIwX1RPX1JHQjIwMjA7 CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXBsYW5lX2NvbG9yX2N0bCB8PQorCQkJCVBMQU5F X0NPTE9SX0NTQ19NT0RFX1lVVjYwMV9UT19SR0I2MDE7CisJCX0KKwkJaWYgKHBsYW5lX3N0YXRl LT5ody5jb2xvcl9yYW5nZSA9PSBEUk1fQ09MT1JfWUNCQ1JfRlVMTF9SQU5HRSkKKwkJCXBsYW5l X2NvbG9yX2N0bCB8PSBQTEFORV9DT0xPUl9ZVVZfUkFOR0VfQ09SUkVDVElPTl9ESVNBQkxFOwor CX0gZWxzZSBpZiAoZmItPmZvcm1hdC0+aXNfeXV2KSB7CisJCXBsYW5lX2NvbG9yX2N0bCB8PSBQ TEFORV9DT0xPUl9JTlBVVF9DU0NfRU5BQkxFOworCX0KKworCXJldHVybiBwbGFuZV9jb2xvcl9j dGw7Cit9CisKK3N0YXRpYyBpbnQKK21haW5fdG9fY2NzX3BsYW5lKGNvbnN0IHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiLCBpbnQgbWFpbl9wbGFuZSkKK3sKKwlkcm1fV0FSTl9PTihmYi0+ZGV2 LCAhaXNfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikgfHwKKwkJICAgIChtYWluX3BsYW5lICYm IG1haW5fcGxhbmUgPj0gZmItPmZvcm1hdC0+bnVtX3BsYW5lcyAvIDIpKTsKKworCXJldHVybiBm Yi0+Zm9ybWF0LT5udW1fcGxhbmVzIC8gMiArIG1haW5fcGxhbmU7Cit9CisKK2ludCBza2xfY2Nz X3RvX21haW5fcGxhbmUoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjY3Nf cGxhbmUpCit7CisJZHJtX1dBUk5fT04oZmItPmRldiwgIWlzX2Njc19tb2RpZmllcihmYi0+bW9k aWZpZXIpIHx8CisJCSAgICBjY3NfcGxhbmUgPCBmYi0+Zm9ybWF0LT5udW1fcGxhbmVzIC8gMik7 CisKKwlpZiAoaXNfZ2VuMTJfY2NzX2NjX3BsYW5lKGZiLCBjY3NfcGxhbmUpKQorCQlyZXR1cm4g MDsKKworCXJldHVybiBjY3NfcGxhbmUgLSBmYi0+Zm9ybWF0LT5udW1fcGxhbmVzIC8gMjsKK30K Kworc3RhdGljIGludAorc2tsX21haW5fdG9fYXV4X3BsYW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiLCBpbnQgbWFpbl9wbGFuZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSA9IHRvX2k5MTUoZmItPmRldik7CisKKwlpZiAoaXNfY2NzX21vZGlmaWVyKGZiLT5t b2RpZmllcikpCisJCXJldHVybiBtYWluX3RvX2Njc19wbGFuZShmYiwgbWFpbl9wbGFuZSk7CisJ ZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpIDwgMTEgJiYKKwkJIGludGVsX2Zvcm1hdF9pbmZvX2lz X3l1dl9zZW1pcGxhbmFyKGZiLT5mb3JtYXQsIGZiLT5tb2RpZmllcikpCisJCXJldHVybiAxOwor CWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitza2xfcHJvZ3JhbV9wbGFuZShz dHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAorCQkgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlLAorCQkgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxh bmVfc3RhdGUsCisJCSAgaW50IGNvbG9yX3BsYW5lKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKKwllbnVtIHBsYW5lX2lk IHBsYW5lX2lkID0gcGxhbmUtPmlkOworCWVudW0gcGlwZSBwaXBlID0gcGxhbmUtPnBpcGU7CisJ Y29uc3Qgc3RydWN0IGRybV9pbnRlbF9zcHJpdGVfY29sb3JrZXkgKmtleSA9ICZwbGFuZV9zdGF0 ZS0+Y2tleTsKKwl1MzIgc3VyZl9hZGRyID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2NvbG9y X3BsYW5lXS5vZmZzZXQ7CisJdTMyIHN0cmlkZSA9IHNrbF9wbGFuZV9zdHJpZGUocGxhbmVfc3Rh dGUsIGNvbG9yX3BsYW5lKTsKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBs YW5lX3N0YXRlLT5ody5mYjsKKwlpbnQgYXV4X3BsYW5lID0gc2tsX21haW5fdG9fYXV4X3BsYW5l KGZiLCBjb2xvcl9wbGFuZSk7CisJaW50IGNydGNfeCA9IHBsYW5lX3N0YXRlLT51YXBpLmRzdC54 MTsKKwlpbnQgY3J0Y195ID0gcGxhbmVfc3RhdGUtPnVhcGkuZHN0LnkxOworCXUzMiB4ID0gcGxh bmVfc3RhdGUtPmNvbG9yX3BsYW5lW2NvbG9yX3BsYW5lXS54OworCXUzMiB5ID0gcGxhbmVfc3Rh dGUtPmNvbG9yX3BsYW5lW2NvbG9yX3BsYW5lXS55OworCXUzMiBzcmNfdyA9IGRybV9yZWN0X3dp ZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMpID4+IDE2OworCXUzMiBzcmNfaCA9IGRybV9yZWN0 X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjKSA+PiAxNjsKKwl1OCBhbHBoYSA9IHBsYW5l X3N0YXRlLT5ody5hbHBoYSA+PiA4OworCXUzMiBwbGFuZV9jb2xvcl9jdGwgPSAwLCBhdXhfZGlz dCA9IDA7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwl1MzIga2V5bXNrLCBrZXltYXg7CisJ dTMyIHBsYW5lX2N0bCA9IHBsYW5lX3N0YXRlLT5jdGw7CisKKwlwbGFuZV9jdGwgfD0gc2tsX3Bs YW5lX2N0bF9jcnRjKGNydGNfc3RhdGUpOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g MTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpCisJCXBsYW5lX2NvbG9yX2N0bCA9IHBsYW5l X3N0YXRlLT5jb2xvcl9jdGwgfAorCQkJZ2xrX3BsYW5lX2NvbG9yX2N0bF9jcnRjKGNydGNfc3Rh dGUpOworCisJLyogU2l6ZXMgYXJlIDAgYmFzZWQgKi8KKwlzcmNfdy0tOworCXNyY19oLS07CisK KwlrZXltYXggPSAoa2V5LT5tYXhfdmFsdWUgJiAweGZmZmZmZikgfCBQTEFORV9LRVlNQVhfQUxQ SEEoYWxwaGEpOworCisJa2V5bXNrID0ga2V5LT5jaGFubmVsX21hc2sgJiAweDdmZmZmZmY7CisJ aWYgKGFscGhhIDwgMHhmZikKKwkJa2V5bXNrIHw9IFBMQU5FX0tFWU1TS19BTFBIQV9FTkFCTEU7 CisKKwkvKiBUaGUgc2NhbGVyIHdpbGwgaGFuZGxlIHRoZSBvdXRwdXQgcG9zaXRpb24gKi8KKwlp ZiAocGxhbmVfc3RhdGUtPnNjYWxlcl9pZCA+PSAwKSB7CisJCWNydGNfeCA9IDA7CisJCWNydGNf eSA9IDA7CisJfQorCisJaWYgKGF1eF9wbGFuZSkgeworCQlhdXhfZGlzdCA9IHBsYW5lX3N0YXRl LT5jb2xvcl9wbGFuZVthdXhfcGxhbmVdLm9mZnNldCAtIHN1cmZfYWRkcjsKKworCQlpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA8IDEyKQorCQkJYXV4X2Rpc3QgfD0gc2tsX3BsYW5lX3N0cmlkZShw bGFuZV9zdGF0ZSwgYXV4X3BsYW5lKTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3By aXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7CisKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJp diwgUExBTkVfU1RSSURFKHBpcGUsIHBsYW5lX2lkKSwgc3RyaWRlKTsKKwlpbnRlbF9kZV93cml0 ZV9mdyhkZXZfcHJpdiwgUExBTkVfUE9TKHBpcGUsIHBsYW5lX2lkKSwKKwkJCSAgKGNydGNfeSA8 PCAxNikgfCBjcnRjX3gpOworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9TSVpF KHBpcGUsIHBsYW5lX2lkKSwKKwkJCSAgKHNyY19oIDw8IDE2KSB8IHNyY193KTsKKworCWludGVs X2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9BVVhfRElTVChwaXBlLCBwbGFuZV9pZCksIGF1 eF9kaXN0KTsKKworCWlmIChpY2xfaXNfaGRyX3BsYW5lKGRldl9wcml2LCBwbGFuZV9pZCkpCisJ CWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9DVVNfQ1RMKHBpcGUsIHBsYW5lX2lk KSwKKwkJCQkgIHBsYW5lX3N0YXRlLT5jdXNfY3RsKTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDEwIHx8IElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQorCQlpbnRlbF9kZV93cml0ZV9m dyhkZXZfcHJpdiwgUExBTkVfQ09MT1JfQ1RMKHBpcGUsIHBsYW5lX2lkKSwKKwkJCQkgIHBsYW5l X2NvbG9yX2N0bCk7CisKKwlpZiAoZmItPmZvcm1hdC0+aXNfeXV2ICYmIGljbF9pc19oZHJfcGxh bmUoZGV2X3ByaXYsIHBsYW5lX2lkKSkKKwkJaWNsX3Byb2dyYW1faW5wdXRfY3NjKHBsYW5lLCBj cnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7CisKKwlpZiAoZmItPm1vZGlmaWVyID09IEk5MTVfRk9S TUFUX01PRF9ZX1RJTEVEX0dFTjEyX1JDX0NDU19DQykKKwkJaW50ZWxfdW5jb3JlX3dyaXRlNjRf ZncoJmRldl9wcml2LT51bmNvcmUsCisJCQkJCVBMQU5FX0NDX1ZBTChwaXBlLCBwbGFuZV9pZCks IHBsYW5lX3N0YXRlLT5jY3ZhbCk7CisKKwlza2xfd3JpdGVfcGxhbmVfd20ocGxhbmUsIGNydGNf c3RhdGUpOworCisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX0tFWVZBTChwaXBl LCBwbGFuZV9pZCksCisJCQkgIGtleS0+bWluX3ZhbHVlKTsKKwlpbnRlbF9kZV93cml0ZV9mdyhk ZXZfcHJpdiwgUExBTkVfS0VZTVNLKHBpcGUsIHBsYW5lX2lkKSwga2V5bXNrKTsKKwlpbnRlbF9k ZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfS0VZTUFYKHBpcGUsIHBsYW5lX2lkKSwga2V5bWF4 KTsKKworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9PRkZTRVQocGlwZSwgcGxh bmVfaWQpLAorCQkJICAoeSA8PCAxNikgfCB4KTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYp IDwgMTEpCisJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9BVVhfT0ZGU0VUKHBp cGUsIHBsYW5lX2lkKSwKKwkJCQkgIChwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMV0ueSA8PCAx NikgfCBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMV0ueCk7CisKKwlpZiAoIWRybV9hdG9taWNf Y3J0Y19uZWVkc19tb2Rlc2V0KCZjcnRjX3N0YXRlLT51YXBpKSkKKwkJaW50ZWxfcHNyMl9wcm9n cmFtX3BsYW5lX3NlbF9mZXRjaChwbGFuZSwgY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUsIGNvbG9y X3BsYW5lKTsKKworCS8qCisJICogVGhlIGNvbnRyb2wgcmVnaXN0ZXIgc2VsZi1hcm1zIGlmIHRo ZSBwbGFuZSB3YXMgcHJldmlvdXNseQorCSAqIGRpc2FibGVkLiBUcnkgdG8gbWFrZSB0aGUgcGxh bmUgZW5hYmxlIGF0b21pYyBieSB3cml0aW5nCisJICogdGhlIGNvbnRyb2wgcmVnaXN0ZXIganVz dCBiZWZvcmUgdGhlIHN1cmZhY2UgcmVnaXN0ZXIuCisJICovCisJaW50ZWxfZGVfd3JpdGVfZnco ZGV2X3ByaXYsIFBMQU5FX0NUTChwaXBlLCBwbGFuZV9pZCksIHBsYW5lX2N0bCk7CisJaW50ZWxf ZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX1NVUkYocGlwZSwgcGxhbmVfaWQpLAorCQkJICBp bnRlbF9wbGFuZV9nZ3R0X29mZnNldChwbGFuZV9zdGF0ZSkgKyBzdXJmX2FkZHIpOworCisJaWYg KHBsYW5lX3N0YXRlLT5zY2FsZXJfaWQgPj0gMCkKKwkJc2tsX3Byb2dyYW1fc2NhbGVyKHBsYW5l LCBjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZk ZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKK30KKworc3RhdGljIHZvaWQKK3NrbF9w bGFuZV9hc3luY19mbGlwKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCisJCSAgICAgY29uc3Qg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCSAgICAgY29uc3Qgc3RydWN0 IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKKwkJICAgICBib29sIGFzeW5jX2ZsaXAp Cit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+ YmFzZS5kZXYpOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJZW51bSBwbGFuZV9pZCBwbGFu ZV9pZCA9IHBsYW5lLT5pZDsKKwllbnVtIHBpcGUgcGlwZSA9IHBsYW5lLT5waXBlOworCXUzMiBz dXJmX2FkZHIgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ub2Zmc2V0OworCXUzMiBwbGFu ZV9jdGwgPSBwbGFuZV9zdGF0ZS0+Y3RsOworCisJcGxhbmVfY3RsIHw9IHNrbF9wbGFuZV9jdGxf Y3J0YyhjcnRjX3N0YXRlKTsKKworCWlmIChhc3luY19mbGlwKQorCQlwbGFuZV9jdGwgfD0gUExB TkVfQ1RMX0FTWU5DX0ZMSVA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVuY29y ZS5sb2NrLCBpcnFmbGFncyk7CisKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVf Q1RMKHBpcGUsIHBsYW5lX2lkKSwgcGxhbmVfY3RsKTsKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZf cHJpdiwgUExBTkVfU1VSRihwaXBlLCBwbGFuZV9pZCksCisJCQkgIGludGVsX3BsYW5lX2dndHRf b2Zmc2V0KHBsYW5lX3N0YXRlKSArIHN1cmZfYWRkcik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKK30KKworc3RhdGljIHZvaWQK K3NrbF91cGRhdGVfcGxhbmUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKKwkJIGNvbnN0IHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkgY29uc3Qgc3RydWN0IGludGVs X3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlpbnQgY29sb3JfcGxhbmUgPSAwOworCisJ aWYgKHBsYW5lX3N0YXRlLT5wbGFuYXJfbGlua2VkX3BsYW5lICYmICFwbGFuZV9zdGF0ZS0+cGxh bmFyX3NsYXZlKQorCQkvKiBQcm9ncmFtIHRoZSBVViBwbGFuZSBvbiBwbGFuYXIgbWFzdGVyICov CisJCWNvbG9yX3BsYW5lID0gMTsKKworCXNrbF9wcm9ncmFtX3BsYW5lKHBsYW5lLCBjcnRjX3N0 YXRlLCBwbGFuZV9zdGF0ZSwgY29sb3JfcGxhbmUpOworfQorCitzdGF0aWMgYm9vbCBpbnRlbF9m b3JtYXRfaXNfcDAxeCh1MzIgZm9ybWF0KQoreworCXN3aXRjaCAoZm9ybWF0KSB7CisJY2FzZSBE Uk1fRk9STUFUX1AwMTA6CisJY2FzZSBEUk1fRk9STUFUX1AwMTI6CisJY2FzZSBEUk1fRk9STUFU X1AwMTY6CisJCXJldHVybiB0cnVlOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9 CisKK3N0YXRpYyBpbnQgc2tsX3BsYW5lX2NoZWNrX2ZiKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0 YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50 ZWxfcGxhbmUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUpOworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKKwljb25zdCBzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKKwl1bnNpZ25lZCBpbnQg cm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+aHcucm90YXRpb247CisJc3RydWN0IGRybV9mb3JtYXRf bmFtZV9idWYgZm9ybWF0X25hbWU7CisKKwlpZiAoIWZiKQorCQlyZXR1cm4gMDsKKworCWlmIChy b3RhdGlvbiAmIH4oRFJNX01PREVfUk9UQVRFXzAgfCBEUk1fTU9ERV9ST1RBVEVfMTgwKSAmJgor CSAgICBpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSkgeworCQlkcm1fZGJnX2ttcygmZGV2 X3ByaXYtPmRybSwKKwkJCSAgICAiUkMgc3VwcG9ydCBvbmx5IHdpdGggMC8xODAgZGVncmVlIHJv dGF0aW9uICgleClcbiIsCisJCQkgICAgcm90YXRpb24pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwlpZiAocm90YXRpb24gJiBEUk1fTU9ERV9SRUZMRUNUX1ggJiYKKwkgICAgZmItPm1vZGlm aWVyID09IERSTV9GT1JNQVRfTU9EX0xJTkVBUikgeworCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYt PmRybSwKKwkJCSAgICAiaG9yaXpvbnRhbCBmbGlwIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBsaW5l YXIgc3VyZmFjZSBmb3JtYXRzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGRy bV9yb3RhdGlvbl85MF9vcl8yNzAocm90YXRpb24pKSB7CisJCWlmIChmYi0+bW9kaWZpZXIgIT0g STkxNV9GT1JNQVRfTU9EX1lfVElMRUQgJiYKKwkJICAgIGZiLT5tb2RpZmllciAhPSBJOTE1X0ZP Uk1BVF9NT0RfWWZfVElMRUQpIHsKKwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJ CSAgICAiWS9ZZiB0aWxpbmcgcmVxdWlyZWQgZm9yIDkwLzI3MCFcbiIpOworCQkJcmV0dXJuIC1F SU5WQUw7CisJCX0KKworCQkvKgorCQkgKiA5MC8yNzAgaXMgbm90IGFsbG93ZWQgd2l0aCBSR0I2 NCAxNjoxNjoxNjoxNiBhbmQKKwkJICogSW5kZXhlZCA4LWJpdC4gUkdCIDE2LWJpdCA1OjY6NSBp cyBhbGxvd2VkIGdlbjExIG9ud2FyZHMuCisJCSAqLworCQlzd2l0Y2ggKGZiLT5mb3JtYXQtPmZv cm1hdCkgeworCQljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgorCQkJaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gMTEpCisJCQkJYnJlYWs7CisJCQlmYWxsdGhyb3VnaDsKKwkJY2FzZSBEUk1fRk9S TUFUX0M4OgorCQljYXNlIERSTV9GT1JNQVRfWFJHQjE2MTYxNjE2RjoKKwkJY2FzZSBEUk1fRk9S TUFUX1hCR1IxNjE2MTYxNkY6CisJCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTYxNjE2MTZGOgorCQlj YXNlIERSTV9GT1JNQVRfQUJHUjE2MTYxNjE2RjoKKwkJY2FzZSBEUk1fRk9STUFUX1kyMTA6CisJ CWNhc2UgRFJNX0ZPUk1BVF9ZMjEyOgorCQljYXNlIERSTV9GT1JNQVRfWTIxNjoKKwkJY2FzZSBE Uk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNjoKKwkJY2FzZSBEUk1fRk9STUFUX1hWWVUxNjE2MTYx NjoKKwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJCSAgICAiVW5zdXBwb3J0ZWQg cGl4ZWwgZm9ybWF0ICVzIGZvciA5MC8yNzAhXG4iLAorCQkJCSAgICBkcm1fZ2V0X2Zvcm1hdF9u YW1lKGZiLT5mb3JtYXQtPmZvcm1hdCwKKwkJCQkJCQkmZm9ybWF0X25hbWUpKTsKKwkJCXJldHVy biAtRUlOVkFMOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBZLXRpbGlu ZyBpcyBub3Qgc3VwcG9ydGVkIGluIElGLUlEIEludGVybGFjZSBtb2RlICovCisJaWYgKGNydGNf c3RhdGUtPmh3LmVuYWJsZSAmJgorCSAgICBjcnRjX3N0YXRlLT5ody5hZGp1c3RlZF9tb2RlLmZs YWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UgJiYKKwkgICAgKGZiLT5tb2RpZmllciA9PSBJ OTE1X0ZPUk1BVF9NT0RfWV9USUxFRCB8fAorCSAgICAgZmItPm1vZGlmaWVyID09IEk5MTVfRk9S TUFUX01PRF9ZZl9USUxFRCB8fAorCSAgICAgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01P RF9ZX1RJTEVEX0NDUyB8fAorCSAgICAgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9Z Zl9USUxFRF9DQ1MgfHwKKwkgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9U SUxFRF9HRU4xMl9SQ19DQ1MgfHwKKwkgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9N T0RfWV9USUxFRF9HRU4xMl9NQ19DQ1MgfHwKKwkgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZP Uk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19DQ1NfQ0MpKSB7CisJCWRybV9kYmdfa21zKCZkZXZf cHJpdi0+ZHJtLAorCQkJICAgICJZL1lmIHRpbGluZyBub3Qgc3VwcG9ydGVkIGluIElGLUlEIG1v ZGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBXYV8xNjA2MDU0MTg4OnRnbCAq LworCWlmIChJU19USUdFUkxBS0UoZGV2X3ByaXYpICYmCisJICAgIHBsYW5lX3N0YXRlLT5ja2V5 LmZsYWdzICYgSTkxNV9TRVRfQ09MT1JLRVlfU09VUkNFICYmCisJICAgIGludGVsX2Zvcm1hdF9p c19wMDF4KGZiLT5mb3JtYXQtPmZvcm1hdCkpIHsKKwkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5k cm0sCisJCQkgICAgIlNvdXJjZSBjb2xvciBrZXlpbmcgbm90IHN1cHBvcnRlZCB3aXRoIFAwMXgg Zm9ybWF0c1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IHNrbF9wbGFuZV9jaGVja19kc3RfY29vcmRpbmF0ZXMoY29uc3Qgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9w bGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0KKwkJdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKKwlpbnQg Y3J0Y194ID0gcGxhbmVfc3RhdGUtPnVhcGkuZHN0LngxOworCWludCBjcnRjX3cgPSBkcm1fcmVj dF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsKKwlpbnQgcGlwZV9zcmNfdyA9IGNydGNf c3RhdGUtPnBpcGVfc3JjX3c7CisKKwkvKgorCSAqIERpc3BsYXkgV0EgIzExNzU6IGNubCxnbGsK KwkgKiBQbGFuZXMgb3RoZXIgdGhhbiB0aGUgY3Vyc29yIG1heSBjYXVzZSBGSUZPIHVuZGVyZmxv dyBhbmQgZGlzcGxheQorCSAqIGNvcnJ1cHRpb24gaWYgc3RhcnRpbmcgbGVzcyB0aGFuIDQgcGl4 ZWxzIGZyb20gdGhlIHJpZ2h0IGVkZ2Ugb2YKKwkgKiB0aGUgc2NyZWVuLgorCSAqIEJlc2lkZXMg dGhlIGFib3ZlIFdBIGZpeCB0aGUgc2ltaWxhciBwcm9ibGVtLCB3aGVyZSBwbGFuZXMgb3RoZXIK KwkgKiB0aGFuIHRoZSBjdXJzb3IgZW5kaW5nIGxlc3MgdGhhbiA0IHBpeGVscyBmcm9tIHRoZSBs ZWZ0IGVkZ2Ugb2YgdGhlCisJICogc2NyZWVuIG1heSBjYXVzZSBGSUZPIHVuZGVyZmxvdyBhbmQg ZGlzcGxheSBjb3JydXB0aW9uLgorCSAqLworCWlmICgoSVNfR0VNSU5JTEFLRShkZXZfcHJpdikg fHwgSVNfQ0FOTk9OTEFLRShkZXZfcHJpdikpICYmCisJICAgIChjcnRjX3ggKyBjcnRjX3cgPCA0 IHx8IGNydGNfeCA+IHBpcGVfc3JjX3cgLSA0KSkgeworCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYt PmRybSwKKwkJCSAgICAicmVxdWVzdGVkIHBsYW5lIFggJXMgcG9zaXRpb24gJWQgaW52YWxpZCAo dmFsaWQgcmFuZ2UgJWQtJWQpXG4iLAorCQkJICAgIGNydGNfeCArIGNydGNfdyA8IDQgPyAiZW5k IiA6ICJzdGFydCIsCisJCQkgICAgY3J0Y194ICsgY3J0Y193IDwgNCA/IGNydGNfeCArIGNydGNf dyA6IGNydGNfeCwKKwkJCSAgICA0LCBwaXBlX3NyY193IC0gNCk7CisJCXJldHVybiAtRVJBTkdF OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNrbF9wbGFuZV9jaGVja19udjEy X3JvdGF0aW9uKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7 CisJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7 CisJdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9uOworCWlu dCBzcmNfdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMpID4+IDE2Owor CisJLyogRGlzcGxheSBXQSAjMTEwNiAqLworCWlmIChpbnRlbF9mb3JtYXRfaW5mb19pc195dXZf c2VtaXBsYW5hcihmYi0+Zm9ybWF0LCBmYi0+bW9kaWZpZXIpICYmCisJICAgIHNyY193ICYgMyAm JgorCSAgICAocm90YXRpb24gPT0gRFJNX01PREVfUk9UQVRFXzI3MCB8fAorCSAgICAgcm90YXRp b24gPT0gKERSTV9NT0RFX1JFRkxFQ1RfWCB8IERSTV9NT0RFX1JPVEFURV85MCkpKSB7CisJCURS TV9ERUJVR19LTVMoInNyYyB3aWR0aCBtdXN0IGJlIG11bHRpcGxlIG9mIDQgZm9yIHJvdGF0ZWQg cGxhbmFyIFlVVlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IHNrbF9wbGFuZV9tYXhfc2NhbGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQor eworCS8qCisJICogV2UgZG9uJ3QgeWV0IGtub3cgdGhlIGZpbmFsIHNvdXJjZSB3aWR0aCBub3IK KwkgKiB3aGV0aGVyIHdlIGNhbiB1c2UgdGhlIEhRIHNjYWxlciBtb2RlLiBBc3N1bWUKKwkgKiB0 aGUgYmVzdCBjYXNlLgorCSAqIEZJWE1FIG5lZWQgdG8gcHJvcGVybHkgY2hlY2sgdGhpcyBsYXRl ci4KKwkgKi8KKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklMQUtF KGRldl9wcml2KSB8fAorCSAgICAhaW50ZWxfZm9ybWF0X2luZm9faXNfeXV2X3NlbWlwbGFuYXIo ZmItPmZvcm1hdCwgZmItPm1vZGlmaWVyKSkKKwkJcmV0dXJuIDB4MzAwMDAgLSAxOworCWVsc2UK KwkJcmV0dXJuIDB4MjAwMDAgLSAxOworfQorCitzdGF0aWMgaW50IGludGVsX3BsYW5lX21pbl93 aWR0aChzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAorCQkJCSBjb25zdCBzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYiwKKwkJCQkgaW50IGNvbG9yX3BsYW5lLAorCQkJCSB1bnNpZ25lZCBpbnQg cm90YXRpb24pCit7CisJaWYgKHBsYW5lLT5taW5fd2lkdGgpCisJCXJldHVybiBwbGFuZS0+bWlu X3dpZHRoKGZiLCBjb2xvcl9wbGFuZSwgcm90YXRpb24pOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9 CisKK3N0YXRpYyBpbnQgaW50ZWxfcGxhbmVfbWF4X3dpZHRoKHN0cnVjdCBpbnRlbF9wbGFuZSAq cGxhbmUsCisJCQkJIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJCSBpbnQg Y29sb3JfcGxhbmUsCisJCQkJIHVuc2lnbmVkIGludCByb3RhdGlvbikKK3sKKwlpZiAocGxhbmUt Pm1heF93aWR0aCkKKwkJcmV0dXJuIHBsYW5lLT5tYXhfd2lkdGgoZmIsIGNvbG9yX3BsYW5lLCBy b3RhdGlvbik7CisJZWxzZQorCQlyZXR1cm4gSU5UX01BWDsKK30KKworc3RhdGljIGludCBpbnRl bF9wbGFuZV9tYXhfaGVpZ2h0KHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCisJCQkJICBjb25z dCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCQkgIGludCBjb2xvcl9wbGFuZSwKKwkJ CQkgIHVuc2lnbmVkIGludCByb3RhdGlvbikKK3sKKwlpZiAocGxhbmUtPm1heF9oZWlnaHQpCisJ CXJldHVybiBwbGFuZS0+bWF4X2hlaWdodChmYiwgY29sb3JfcGxhbmUsIHJvdGF0aW9uKTsKKwll bHNlCisJCXJldHVybiBJTlRfTUFYOworfQorCitzdGF0aWMgYm9vbAorc2tsX2NoZWNrX21haW5f Y2NzX2Nvb3JkaW5hdGVzKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCisJ CQkgICAgICAgaW50IG1haW5feCwgaW50IG1haW5feSwgdTMyIG1haW5fb2Zmc2V0LAorCQkJICAg ICAgIGludCBjY3NfcGxhbmUpCit7CisJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIg PSBwbGFuZV9zdGF0ZS0+aHcuZmI7CisJaW50IGF1eF94ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3Bs YW5lW2Njc19wbGFuZV0ueDsKKwlpbnQgYXV4X3kgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVb Y2NzX3BsYW5lXS55OworCXUzMiBhdXhfb2Zmc2V0ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5l W2Njc19wbGFuZV0ub2Zmc2V0OworCXUzMiBhbGlnbm1lbnQgPSBpbnRlbF9zdXJmX2FsaWdubWVu dChmYiwgY2NzX3BsYW5lKTsKKwlpbnQgaHN1YjsKKwlpbnQgdnN1YjsKKworCWludGVsX2ZiX3Bs YW5lX2dldF9zdWJzYW1wbGluZygmaHN1YiwgJnZzdWIsIGZiLCBjY3NfcGxhbmUpOworCXdoaWxl IChhdXhfb2Zmc2V0ID49IG1haW5fb2Zmc2V0ICYmIGF1eF95IDw9IG1haW5feSkgeworCQlpbnQg eCwgeTsKKworCQlpZiAoYXV4X3ggPT0gbWFpbl94ICYmIGF1eF95ID09IG1haW5feSkKKwkJCWJy ZWFrOworCisJCWlmIChhdXhfb2Zmc2V0ID09IDApCisJCQlicmVhazsKKworCQl4ID0gYXV4X3gg LyBoc3ViOworCQl5ID0gYXV4X3kgLyB2c3ViOworCQlhdXhfb2Zmc2V0ID0gaW50ZWxfcGxhbmVf YWRqdXN0X2FsaWduZWRfb2Zmc2V0KCZ4LCAmeSwKKwkJCQkJCQkgICAgICAgcGxhbmVfc3RhdGUs CisJCQkJCQkJICAgICAgIGNjc19wbGFuZSwKKwkJCQkJCQkgICAgICAgYXV4X29mZnNldCwKKwkJ CQkJCQkgICAgICAgYXV4X29mZnNldCAtCisJCQkJCQkJCWFsaWdubWVudCk7CisJCWF1eF94ID0g eCAqIGhzdWIgKyBhdXhfeCAlIGhzdWI7CisJCWF1eF95ID0geSAqIHZzdWIgKyBhdXhfeSAlIHZz dWI7CisJfQorCisJaWYgKGF1eF94ICE9IG1haW5feCB8fCBhdXhfeSAhPSBtYWluX3kpCisJCXJl dHVybiBmYWxzZTsKKworCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLm9mZnNl dCA9IGF1eF9vZmZzZXQ7CisJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFuZV0ueCA9 IGF1eF94OworCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLnkgPSBhdXhfeTsK KworCXJldHVybiB0cnVlOworfQorCisKK2ludCBza2xfY2FsY19tYWluX3N1cmZhY2Vfb2Zmc2V0 KGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCisJCQkJIGludCAq eCwgaW50ICp5LCB1MzIgKm9mZnNldCkKK3sKKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0g dG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUpOworCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKKwljb25zdCBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKKwljb25zdCBp bnQgYXV4X3BsYW5lID0gc2tsX21haW5fdG9fYXV4X3BsYW5lKGZiLCAwKTsKKwljb25zdCB1MzIg YXV4X29mZnNldCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVthdXhfcGxhbmVdLm9mZnNldDsK Kwljb25zdCB1MzIgYWxpZ25tZW50ID0gaW50ZWxfc3VyZl9hbGlnbm1lbnQoZmIsIDApOworCWNv bnN0IGludCB3ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTY7 CisKKwlpbnRlbF9hZGRfZmJfb2Zmc2V0cyh4LCB5LCBwbGFuZV9zdGF0ZSwgMCk7CisJKm9mZnNl dCA9IGludGVsX3BsYW5lX2NvbXB1dGVfYWxpZ25lZF9vZmZzZXQoeCwgeSwgcGxhbmVfc3RhdGUs IDApOworCWlmIChkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgYWxpZ25tZW50ICYmICFpc19w b3dlcl9vZl8yKGFsaWdubWVudCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogQVVY IHN1cmZhY2Ugb2Zmc2V0IGlzIHNwZWNpZmllZCBhcyB0aGUgZGlzdGFuY2UgZnJvbSB0aGUKKwkg KiBtYWluIHN1cmZhY2Ugb2Zmc2V0LCBhbmQgaXQgbXVzdCBiZSBub24tbmVnYXRpdmUuIE1ha2UK KwkgKiBzdXJlIHRoYXQgaXMgd2hhdCB3ZSB3aWxsIGdldC4KKwkgKi8KKwlpZiAoYXV4X3BsYW5l ICYmICpvZmZzZXQgPiBhdXhfb2Zmc2V0KQorCQkqb2Zmc2V0ID0gaW50ZWxfcGxhbmVfYWRqdXN0 X2FsaWduZWRfb2Zmc2V0KHgsIHksIHBsYW5lX3N0YXRlLCAwLAorCQkJCQkJCSAgICAqb2Zmc2V0 LAorCQkJCQkJCSAgICBhdXhfb2Zmc2V0ICYgfihhbGlnbm1lbnQgLSAxKSk7CisKKwkvKgorCSAq IFdoZW4gdXNpbmcgYW4gWC10aWxlZCBzdXJmYWNlLCB0aGUgcGxhbmUgYmxvd3MgdXAKKwkgKiBp ZiB0aGUgeCBvZmZzZXQgKyB3aWR0aCBleGNlZWQgdGhlIHN0cmlkZS4KKwkgKgorCSAqIFRPRE86 IGxpbmVhciBhbmQgWS10aWxlZCBzZWVtIGZpbmUsIFlmIHVudGVzdGVkLAorCSAqLworCWlmIChm Yi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQpIHsKKwkJaW50IGNwcCA9IGZi LT5mb3JtYXQtPmNwcFswXTsKKworCQl3aGlsZSAoKCp4ICsgdykgKiBjcHAgPiBwbGFuZV9zdGF0 ZS0+Y29sb3JfcGxhbmVbMF0uc3RyaWRlKSB7CisJCQlpZiAoKm9mZnNldCA9PSAwKSB7CisJCQkJ ZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkJCSAgICAiVW5hYmxlIHRvIGZpbmQgc3Vp dGFibGUgZGlzcGxheSBzdXJmYWNlIG9mZnNldCBkdWUgdG8gWC10aWxpbmdcbiIpOworCQkJCXJl dHVybiAtRUlOVkFMOworCQkJfQorCisJCQkqb2Zmc2V0ID0gaW50ZWxfcGxhbmVfYWRqdXN0X2Fs aWduZWRfb2Zmc2V0KHgsIHksIHBsYW5lX3N0YXRlLCAwLAorCQkJCQkJCQkgICAgKm9mZnNldCwK KwkJCQkJCQkJICAgICpvZmZzZXQgLSBhbGlnbm1lbnQpOworCQl9CisJfQorCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgc2tsX2NoZWNrX21haW5fc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxh bmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0 b19pbnRlbF9wbGFuZShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7CisJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOworCWNvbnN0IHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOworCWNvbnN0IHVu c2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbjsKKwlpbnQgeCA9 IHBsYW5lX3N0YXRlLT51YXBpLnNyYy54MSA+PiAxNjsKKwlpbnQgeSA9IHBsYW5lX3N0YXRlLT51 YXBpLnNyYy55MSA+PiAxNjsKKwljb25zdCBpbnQgdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9z dGF0ZS0+dWFwaS5zcmMpID4+IDE2OworCWNvbnN0IGludCBoID0gZHJtX3JlY3RfaGVpZ2h0KCZw bGFuZV9zdGF0ZS0+dWFwaS5zcmMpID4+IDE2OworCWNvbnN0IGludCBtaW5fd2lkdGggPSBpbnRl bF9wbGFuZV9taW5fd2lkdGgocGxhbmUsIGZiLCAwLCByb3RhdGlvbik7CisJY29uc3QgaW50IG1h eF93aWR0aCA9IGludGVsX3BsYW5lX21heF93aWR0aChwbGFuZSwgZmIsIDAsIHJvdGF0aW9uKTsK Kwljb25zdCBpbnQgbWF4X2hlaWdodCA9IGludGVsX3BsYW5lX21heF9oZWlnaHQocGxhbmUsIGZi LCAwLCByb3RhdGlvbik7CisJY29uc3QgaW50IGF1eF9wbGFuZSA9IHNrbF9tYWluX3RvX2F1eF9w bGFuZShmYiwgMCk7CisJY29uc3QgdTMyIGFsaWdubWVudCA9IGludGVsX3N1cmZfYWxpZ25tZW50 KGZiLCAwKTsKKwl1MzIgb2Zmc2V0OworCWludCByZXQ7CisKKwlpZiAodyA+IG1heF93aWR0aCB8 fCB3IDwgbWluX3dpZHRoIHx8IGggPiBtYXhfaGVpZ2h0KSB7CisJCWRybV9kYmdfa21zKCZkZXZf cHJpdi0+ZHJtLAorCQkJICAgICJyZXF1ZXN0ZWQgWS9SR0Igc291cmNlIHNpemUgJWR4JWQgb3V0 c2lkZSBsaW1pdHMgKG1pbjogJWR4MSBtYXg6ICVkeCVkKVxuIiwKKwkJCSAgICB3LCBoLCBtaW5f d2lkdGgsIG1heF93aWR0aCwgbWF4X2hlaWdodCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwor CXJldCA9IHNrbF9jYWxjX21haW5fc3VyZmFjZV9vZmZzZXQocGxhbmVfc3RhdGUsICZ4LCAmeSwg Jm9mZnNldCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogQ0NTIEFVWCBz dXJmYWNlIGRvZXNuJ3QgaGF2ZSBpdHMgb3duIHgveSBvZmZzZXRzLCB3ZSBtdXN0IG1ha2Ugc3Vy ZQorCSAqIHRoZXkgbWF0Y2ggd2l0aCB0aGUgbWFpbiBzdXJmYWNlIHgveSBvZmZzZXRzLgorCSAq LworCWlmIChpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSkgeworCQl3aGlsZSAoIXNrbF9j aGVja19tYWluX2Njc19jb29yZGluYXRlcyhwbGFuZV9zdGF0ZSwgeCwgeSwKKwkJCQkJCSAgICAg ICBvZmZzZXQsIGF1eF9wbGFuZSkpIHsKKwkJCWlmIChvZmZzZXQgPT0gMCkKKwkJCQlicmVhazsK KworCQkJb2Zmc2V0ID0gaW50ZWxfcGxhbmVfYWRqdXN0X2FsaWduZWRfb2Zmc2V0KCZ4LCAmeSwg cGxhbmVfc3RhdGUsIDAsCisJCQkJCQkJCSAgIG9mZnNldCwgb2Zmc2V0IC0gYWxpZ25tZW50KTsK KwkJfQorCisJCWlmICh4ICE9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVthdXhfcGxhbmVdLngg fHwKKwkJICAgIHkgIT0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2F1eF9wbGFuZV0ueSkgewor CQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkJICAgICJVbmFibGUgdG8gZmluZCBz dWl0YWJsZSBkaXNwbGF5IHN1cmZhY2Ugb2Zmc2V0IGR1ZSB0byBDQ1NcbiIpOworCQkJcmV0dXJu IC1FSU5WQUw7CisJCX0KKwl9CisKKwlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ub2Zmc2V0 ID0gb2Zmc2V0OworCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS54ID0geDsKKwlwbGFuZV9z dGF0ZS0+Y29sb3JfcGxhbmVbMF0ueSA9IHk7CisKKwkvKgorCSAqIFB1dCB0aGUgZmluYWwgY29v cmRpbmF0ZXMgYmFjayBzbyB0aGF0IHRoZSBzcmMKKwkgKiBjb29yZGluYXRlIGNoZWNrcyB3aWxs IHNlZSB0aGUgcmlnaHQgdmFsdWVzLgorCSAqLworCWRybV9yZWN0X3RyYW5zbGF0ZV90bygmcGxh bmVfc3RhdGUtPnVhcGkuc3JjLAorCQkJICAgICAgeCA8PCAxNiwgeSA8PCAxNik7CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBza2xfY2hlY2tfbnYxMl9hdXhfc3VyZmFjZShzdHJ1Y3Qg aW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCXN0cnVjdCBpbnRlbF9wbGFuZSAq cGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7CisJY29u c3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7CisJdW5z aWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9uOworCWludCB1dl9w bGFuZSA9IDE7CisJaW50IG1heF93aWR0aCA9IGludGVsX3BsYW5lX21heF93aWR0aChwbGFuZSwg ZmIsIHV2X3BsYW5lLCByb3RhdGlvbik7CisJaW50IG1heF9oZWlnaHQgPSBpbnRlbF9wbGFuZV9t YXhfaGVpZ2h0KHBsYW5lLCBmYiwgdXZfcGxhbmUsIHJvdGF0aW9uKTsKKwlpbnQgeCA9IHBsYW5l X3N0YXRlLT51YXBpLnNyYy54MSA+PiAxNzsKKwlpbnQgeSA9IHBsYW5lX3N0YXRlLT51YXBpLnNy Yy55MSA+PiAxNzsKKwlpbnQgdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5z cmMpID4+IDE3OworCWludCBoID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5z cmMpID4+IDE3OworCXUzMiBvZmZzZXQ7CisKKwkvKiBGSVhNRSBub3QgcXVpdGUgc3VyZSBob3cv aWYgdGhlc2UgYXBwbHkgdG8gdGhlIGNocm9tYSBwbGFuZSAqLworCWlmICh3ID4gbWF4X3dpZHRo IHx8IGggPiBtYXhfaGVpZ2h0KSB7CisJCWRybV9kYmdfa21zKCZpOTE1LT5kcm0sCisJCQkgICAg IkNiQ3Igc291cmNlIHNpemUgJWR4JWQgdG9vIGJpZyAobGltaXQgJWR4JWQpXG4iLAorCQkJICAg IHcsIGgsIG1heF93aWR0aCwgbWF4X2hlaWdodCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwor CWludGVsX2FkZF9mYl9vZmZzZXRzKCZ4LCAmeSwgcGxhbmVfc3RhdGUsIHV2X3BsYW5lKTsKKwlv ZmZzZXQgPSBpbnRlbF9wbGFuZV9jb21wdXRlX2FsaWduZWRfb2Zmc2V0KCZ4LCAmeSwKKwkJCQkJ CSAgICBwbGFuZV9zdGF0ZSwgdXZfcGxhbmUpOworCisJaWYgKGlzX2Njc19tb2RpZmllcihmYi0+ bW9kaWZpZXIpKSB7CisJCWludCBjY3NfcGxhbmUgPSBtYWluX3RvX2Njc19wbGFuZShmYiwgdXZf cGxhbmUpOworCQl1MzIgYXV4X29mZnNldCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3Nf cGxhbmVdLm9mZnNldDsKKwkJdTMyIGFsaWdubWVudCA9IGludGVsX3N1cmZfYWxpZ25tZW50KGZi LCB1dl9wbGFuZSk7CisKKwkJaWYgKG9mZnNldCA+IGF1eF9vZmZzZXQpCisJCQlvZmZzZXQgPSBp bnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoJngsICZ5LAorCQkJCQkJCQkgICBwbGFu ZV9zdGF0ZSwKKwkJCQkJCQkJICAgdXZfcGxhbmUsCisJCQkJCQkJCSAgIG9mZnNldCwKKwkJCQkJ CQkJICAgYXV4X29mZnNldCAmIH4oYWxpZ25tZW50IC0gMSkpOworCisJCXdoaWxlICghc2tsX2No ZWNrX21haW5fY2NzX2Nvb3JkaW5hdGVzKHBsYW5lX3N0YXRlLCB4LCB5LAorCQkJCQkJICAgICAg IG9mZnNldCwgY2NzX3BsYW5lKSkgeworCQkJaWYgKG9mZnNldCA9PSAwKQorCQkJCWJyZWFrOwor CisJCQlvZmZzZXQgPSBpbnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoJngsICZ5LAor CQkJCQkJCQkgICBwbGFuZV9zdGF0ZSwKKwkJCQkJCQkJICAgdXZfcGxhbmUsCisJCQkJCQkJCSAg IG9mZnNldCwgb2Zmc2V0IC0gYWxpZ25tZW50KTsKKwkJfQorCisJCWlmICh4ICE9IHBsYW5lX3N0 YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLnggfHwKKwkJICAgIHkgIT0gcGxhbmVfc3RhdGUt PmNvbG9yX3BsYW5lW2Njc19wbGFuZV0ueSkgeworCQkJZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwK KwkJCQkgICAgIlVuYWJsZSB0byBmaW5kIHN1aXRhYmxlIGRpc3BsYXkgc3VyZmFjZSBvZmZzZXQg ZHVlIHRvIENDU1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXBsYW5lX3N0 YXRlLT5jb2xvcl9wbGFuZVt1dl9wbGFuZV0ub2Zmc2V0ID0gb2Zmc2V0OworCXBsYW5lX3N0YXRl LT5jb2xvcl9wbGFuZVt1dl9wbGFuZV0ueCA9IHg7CisJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5l W3V2X3BsYW5lXS55ID0geTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNrbF9jaGVj a19jY3NfYXV4X3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkK K3sKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5m YjsKKwlpbnQgc3JjX3ggPSBwbGFuZV9zdGF0ZS0+dWFwaS5zcmMueDEgPj4gMTY7CisJaW50IHNy Y195ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3JjLnkxID4+IDE2OworCXUzMiBvZmZzZXQ7CisJaW50 IGNjc19wbGFuZTsKKworCWZvciAoY2NzX3BsYW5lID0gMDsgY2NzX3BsYW5lIDwgZmItPmZvcm1h dC0+bnVtX3BsYW5lczsgY2NzX3BsYW5lKyspIHsKKwkJaW50IG1haW5faHN1YiwgbWFpbl92c3Vi OworCQlpbnQgaHN1YiwgdnN1YjsKKwkJaW50IHgsIHk7CisKKwkJaWYgKCFpc19jY3NfcGxhbmUo ZmIsIGNjc19wbGFuZSkgfHwKKwkJICAgIGlzX2dlbjEyX2Njc19jY19wbGFuZShmYiwgY2NzX3Bs YW5lKSkKKwkJCWNvbnRpbnVlOworCisJCWludGVsX2ZiX3BsYW5lX2dldF9zdWJzYW1wbGluZygm bWFpbl9oc3ViLCAmbWFpbl92c3ViLCBmYiwKKwkJCQkJICAgICAgIHNrbF9jY3NfdG9fbWFpbl9w bGFuZShmYiwgY2NzX3BsYW5lKSk7CisJCWludGVsX2ZiX3BsYW5lX2dldF9zdWJzYW1wbGluZygm aHN1YiwgJnZzdWIsIGZiLCBjY3NfcGxhbmUpOworCisJCWhzdWIgKj0gbWFpbl9oc3ViOworCQl2 c3ViICo9IG1haW5fdnN1YjsKKwkJeCA9IHNyY194IC8gaHN1YjsKKwkJeSA9IHNyY195IC8gdnN1 YjsKKworCQlpbnRlbF9hZGRfZmJfb2Zmc2V0cygmeCwgJnksIHBsYW5lX3N0YXRlLCBjY3NfcGxh bmUpOworCisJCW9mZnNldCA9IGludGVsX3BsYW5lX2NvbXB1dGVfYWxpZ25lZF9vZmZzZXQoJngs ICZ5LAorCQkJCQkJCSAgICBwbGFuZV9zdGF0ZSwKKwkJCQkJCQkgICAgY2NzX3BsYW5lKTsKKwor CQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5lXS5vZmZzZXQgPSBvZmZzZXQ7CisJ CXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLnggPSAoeCAqIGhzdWIgKworCQkJ CQkJCSBzcmNfeCAlIGhzdWIpIC8KKwkJCQkJCQltYWluX2hzdWI7CisJCXBsYW5lX3N0YXRlLT5j b2xvcl9wbGFuZVtjY3NfcGxhbmVdLnkgPSAoeSAqIHZzdWIgKworCQkJCQkJCSBzcmNfeSAlIHZz dWIpIC8KKwkJCQkJCQltYWluX3ZzdWI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgc2tsX2NoZWNrX3BsYW5lX3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFu ZV9zdGF0ZSkKK3sKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0 YXRlLT5ody5mYjsKKwlpbnQgcmV0LCBpOworCisJcmV0ID0gaW50ZWxfcGxhbmVfY29tcHV0ZV9n dHQocGxhbmVfc3RhdGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoIXBsYW5l X3N0YXRlLT51YXBpLnZpc2libGUpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBIYW5kbGUgdGhl IEFVWCBzdXJmYWNlIGZpcnN0IHNpbmNlIHRoZSBtYWluIHN1cmZhY2Ugc2V0dXAgZGVwZW5kcyBv bgorCSAqIGl0LgorCSAqLworCWlmIChpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSkgewor CQlyZXQgPSBza2xfY2hlY2tfY2NzX2F1eF9zdXJmYWNlKHBsYW5lX3N0YXRlKTsKKwkJaWYgKHJl dCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGludGVsX2Zvcm1hdF9pbmZvX2lzX3l1dl9z ZW1pcGxhbmFyKGZiLT5mb3JtYXQsCisJCQkJCQlmYi0+bW9kaWZpZXIpKSB7CisJCXJldCA9IHNr bF9jaGVja19udjEyX2F1eF9zdXJmYWNlKHBsYW5lX3N0YXRlKTsKKwkJaWYgKHJldCkKKwkJCXJl dHVybiByZXQ7CisJfQorCisJZm9yIChpID0gZmItPmZvcm1hdC0+bnVtX3BsYW5lczsgaSA8IEFS UkFZX1NJWkUocGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lKTsgaSsrKSB7CisJCXBsYW5lX3N0YXRl LT5jb2xvcl9wbGFuZVtpXS5vZmZzZXQgPSAwOworCQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVb aV0ueCA9IDA7CisJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtpXS55ID0gMDsKKwl9CisKKwly ZXQgPSBza2xfY2hlY2tfbWFpbl9zdXJmYWNlKHBsYW5lX3N0YXRlKTsKKwlpZiAocmV0KQorCQly ZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIGludGVsX2ZiX3NjYWxh YmxlKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQoreworCWlmICghZmIpCisJCXJl dHVybiBmYWxzZTsKKworCXN3aXRjaCAoZmItPmZvcm1hdC0+Zm9ybWF0KSB7CisJY2FzZSBEUk1f Rk9STUFUX0M4OgorCQlyZXR1cm4gZmFsc2U7CisJY2FzZSBEUk1fRk9STUFUX1hSR0IxNjE2MTYx NkY6CisJY2FzZSBEUk1fRk9STUFUX0FSR0IxNjE2MTYxNkY6CisJY2FzZSBEUk1fRk9STUFUX1hC R1IxNjE2MTYxNkY6CisJY2FzZSBEUk1fRk9STUFUX0FCR1IxNjE2MTYxNkY6CisJCXJldHVybiBJ TlRFTF9HRU4odG9faTkxNShmYi0+ZGV2KSkgPj0gMTE7CisJZGVmYXVsdDoKKwkJcmV0dXJuIHRy dWU7CisJfQorfQorCitzdGF0aWMgaW50IHNrbF9wbGFuZV9jaGVjayhzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCSAgIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxh bmVfc3RhdGUpCit7CisJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5l KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7CisJY29uc3Qgc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7CisJaW50IG1pbl9zY2FsZSA9IERSTV9Q TEFORV9IRUxQRVJfTk9fU0NBTElORzsKKwlpbnQgbWF4X3NjYWxlID0gRFJNX1BMQU5FX0hFTFBF Ul9OT19TQ0FMSU5HOworCWludCByZXQ7CisKKwlyZXQgPSBza2xfcGxhbmVfY2hlY2tfZmIoY3J0 Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiB1 c2Ugc2NhbGVyIHdoZW4gY29sb3JrZXkgaXMgbm90IHJlcXVpcmVkICovCisJaWYgKCFwbGFuZV9z dGF0ZS0+Y2tleS5mbGFncyAmJiBpbnRlbF9mYl9zY2FsYWJsZShmYikpIHsKKwkJbWluX3NjYWxl ID0gMTsKKwkJbWF4X3NjYWxlID0gc2tsX3BsYW5lX21heF9zY2FsZShkZXZfcHJpdiwgZmIpOwor CX0KKworCXJldCA9IGludGVsX2F0b21pY19wbGFuZV9jaGVja19jbGlwcGluZyhwbGFuZV9zdGF0 ZSwgY3J0Y19zdGF0ZSwKKwkJCQkJCW1pbl9zY2FsZSwgbWF4X3NjYWxlLCB0cnVlKTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc2tsX2NoZWNrX3BsYW5lX3N1cmZhY2UocGxh bmVfc3RhdGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoIXBsYW5lX3N0YXRl LT51YXBpLnZpc2libGUpCisJCXJldHVybiAwOworCisJcmV0ID0gc2tsX3BsYW5lX2NoZWNrX2Rz dF9jb29yZGluYXRlcyhjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCXJldCA9IGludGVsX3BsYW5lX2NoZWNrX3NyY19jb29yZGluYXRlcyhwbGFu ZV9zdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNrbF9wbGFuZV9j aGVja19udjEyX3JvdGF0aW9uKHBsYW5lX3N0YXRlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCisJLyogSFcgb25seSBoYXMgOCBiaXRzIHBpeGVsIHByZWNpc2lvbiwgZGlzYWJsZSBwbGFu ZSBpZiBpbnZpc2libGUgKi8KKwlpZiAoIShwbGFuZV9zdGF0ZS0+aHcuYWxwaGEgPj4gOCkpCisJ CXBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUgPSBmYWxzZTsKKworCXBsYW5lX3N0YXRlLT5jdGwg PSBza2xfcGxhbmVfY3RsKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKKworCWlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQorCQlwbGFuZV9z dGF0ZS0+Y29sb3JfY3RsID0gZ2xrX3BsYW5lX2NvbG9yX2N0bChjcnRjX3N0YXRlLAorCQkJCQkJ CSAgICAgcGxhbmVfc3RhdGUpOworCisJaWYgKGludGVsX2Zvcm1hdF9pbmZvX2lzX3l1dl9zZW1p cGxhbmFyKGZiLT5mb3JtYXQsIGZiLT5tb2RpZmllcikgJiYKKwkgICAgaWNsX2lzX2hkcl9wbGFu ZShkZXZfcHJpdiwgcGxhbmUtPmlkKSkKKwkJLyogRW5hYmxlIGFuZCB1c2UgTVBFRy0yIGNocm9t YSBzaXRpbmcgKi8KKwkJcGxhbmVfc3RhdGUtPmN1c19jdGwgPSBQTEFORV9DVVNfRU5BQkxFIHwK KwkJCVBMQU5FX0NVU19IUEhBU0VfMCB8CisJCQlQTEFORV9DVVNfVlBIQVNFX1NJR05fTkVHQVRJ VkUgfCBQTEFORV9DVVNfVlBIQVNFXzBfMjU7CisJZWxzZQorCQlwbGFuZV9zdGF0ZS0+Y3VzX2N0 bCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgc2tsX3BsYW5lX2hhc19mYmMo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJICAgICAgZW51bSBwaXBlIHBp cGUsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCit7CisJaWYgKCFIQVNfRkJDKGRldl9wcml2KSkK KwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHBpcGUgPT0gUElQRV9BICYmIHBsYW5lX2lkID09 IFBMQU5FX1BSSU1BUlk7Cit9CisKK3N0YXRpYyBib29sIHNrbF9wbGFuZV9oYXNfcGxhbmFyKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkgZW51bSBwaXBlIHBpcGUsIGVu dW0gcGxhbmVfaWQgcGxhbmVfaWQpCit7CisJLyogRGlzcGxheSBXQSAjMDg3MDogc2tsLCBieHQg Ki8KKwlpZiAoSVNfU0tZTEFLRShkZXZfcHJpdikgfHwgSVNfQlJPWFRPTihkZXZfcHJpdikpCisJ CXJldHVybiBmYWxzZTsKKworCWlmIChJU19HRU4oZGV2X3ByaXYsIDkpICYmICFJU19HRU1JTklM QUtFKGRldl9wcml2KSAmJiBwaXBlID09IFBJUEVfQykKKwkJcmV0dXJuIGZhbHNlOworCisJaWYg KHBsYW5lX2lkICE9IFBMQU5FX1BSSU1BUlkgJiYgcGxhbmVfaWQgIT0gUExBTkVfU1BSSVRFMCkK KwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBjb25zdCB1MzIg KnNrbF9nZXRfcGxhbmVfZm9ybWF0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs CisJCQkJCWVudW0gcGlwZSBwaXBlLCBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkLAorCQkJCQlpbnQg Km51bV9mb3JtYXRzKQoreworCWlmIChza2xfcGxhbmVfaGFzX3BsYW5hcihkZXZfcHJpdiwgcGlw ZSwgcGxhbmVfaWQpKSB7CisJCSpudW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoc2tsX3BsYW5hcl9m b3JtYXRzKTsKKwkJcmV0dXJuIHNrbF9wbGFuYXJfZm9ybWF0czsKKwl9IGVsc2UgeworCQkqbnVt X2Zvcm1hdHMgPSBBUlJBWV9TSVpFKHNrbF9wbGFuZV9mb3JtYXRzKTsKKwkJcmV0dXJuIHNrbF9w bGFuZV9mb3JtYXRzOworCX0KK30KKworc3RhdGljIGNvbnN0IHUzMiAqZ2xrX2dldF9wbGFuZV9m b3JtYXRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkJZW51bSBwaXBl IHBpcGUsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQsCisJCQkJCWludCAqbnVtX2Zvcm1hdHMpCit7 CisJaWYgKHNrbF9wbGFuZV9oYXNfcGxhbmFyKGRldl9wcml2LCBwaXBlLCBwbGFuZV9pZCkpIHsK KwkJKm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShnbGtfcGxhbmFyX2Zvcm1hdHMpOworCQlyZXR1 cm4gZ2xrX3BsYW5hcl9mb3JtYXRzOworCX0gZWxzZSB7CisJCSpudW1fZm9ybWF0cyA9IEFSUkFZ X1NJWkUoc2tsX3BsYW5lX2Zvcm1hdHMpOworCQlyZXR1cm4gc2tsX3BsYW5lX2Zvcm1hdHM7CisJ fQorfQorCitzdGF0aWMgY29uc3QgdTMyICppY2xfZ2V0X3BsYW5lX2Zvcm1hdHMoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCQllbnVtIHBpcGUgcGlwZSwgZW51bSBwbGFu ZV9pZCBwbGFuZV9pZCwKKwkJCQkJaW50ICpudW1fZm9ybWF0cykKK3sKKwlpZiAoaWNsX2lzX2hk cl9wbGFuZShkZXZfcHJpdiwgcGxhbmVfaWQpKSB7CisJCSpudW1fZm9ybWF0cyA9IEFSUkFZX1NJ WkUoaWNsX2hkcl9wbGFuZV9mb3JtYXRzKTsKKwkJcmV0dXJuIGljbF9oZHJfcGxhbmVfZm9ybWF0 czsKKwl9IGVsc2UgaWYgKGljbF9pc19udjEyX3lfcGxhbmUoZGV2X3ByaXYsIHBsYW5lX2lkKSkg eworCQkqbnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKGljbF9zZHJfeV9wbGFuZV9mb3JtYXRzKTsK KwkJcmV0dXJuIGljbF9zZHJfeV9wbGFuZV9mb3JtYXRzOworCX0gZWxzZSB7CisJCSpudW1fZm9y bWF0cyA9IEFSUkFZX1NJWkUoaWNsX3Nkcl91dl9wbGFuZV9mb3JtYXRzKTsKKwkJcmV0dXJuIGlj bF9zZHJfdXZfcGxhbmVfZm9ybWF0czsKKwl9Cit9CisKK3N0YXRpYyBib29sIHNrbF9wbGFuZV9o YXNfY2NzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgICAgIGVudW0g cGlwZSBwaXBlLCBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkKQoreworCWlmIChwbGFuZV9pZCA9PSBQ TEFORV9DVVJTT1IpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYp ID49IDEwKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmIChJU19HRU1JTklMQUtFKGRldl9wcml2KSkK KwkJcmV0dXJuIHBpcGUgIT0gUElQRV9DOworCisJcmV0dXJuIHBpcGUgIT0gUElQRV9DICYmCisJ CShwbGFuZV9pZCA9PSBQTEFORV9QUklNQVJZIHx8CisJCSBwbGFuZV9pZCA9PSBQTEFORV9TUFJJ VEUwKTsKK30KKworc3RhdGljIGJvb2wgc2tsX3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkKHN0 cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwKKwkJCQkJICAgdTMyIGZvcm1hdCwgdTY0IG1vZGlmaWVy KQoreworCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShfcGxhbmUp OworCisJc3dpdGNoIChtb2RpZmllcikgeworCWNhc2UgRFJNX0ZPUk1BVF9NT0RfTElORUFSOgor CWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9U SUxFRDoKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDoKKwkJYnJlYWs7CisJY2FzZSBJ OTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElM RURfQ0NTOgorCQlpZiAoIXBsYW5lLT5oYXNfY2NzKQorCQkJcmV0dXJuIGZhbHNlOworCQlicmVh azsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJc3dpdGNoIChmb3JtYXQpIHsK KwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4Ogor CWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6CisJ CWlmIChpc19jY3NfbW9kaWZpZXIobW9kaWZpZXIpKQorCQkJcmV0dXJuIHRydWU7CisJCWZhbGx0 aHJvdWdoOworCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6CisJY2FzZSBEUk1fRk9STUFUX1hSR0Iy MTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRf QVJHQjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX0FCR1IyMTAxMDEwOgorCWNhc2UgRFJNX0ZP Uk1BVF9ZVVlWOgorCWNhc2UgRFJNX0ZPUk1BVF9ZVllVOgorCWNhc2UgRFJNX0ZPUk1BVF9VWVZZ OgorCWNhc2UgRFJNX0ZPUk1BVF9WWVVZOgorCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgorCWNhc2Ug RFJNX0ZPUk1BVF9YWVVWODg4ODoKKwljYXNlIERSTV9GT1JNQVRfUDAxMDoKKwljYXNlIERSTV9G T1JNQVRfUDAxMjoKKwljYXNlIERSTV9GT1JNQVRfUDAxNjoKKwljYXNlIERSTV9GT1JNQVRfWFZZ VTIxMDEwMTA6CisJCWlmIChtb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQpCisJ CQlyZXR1cm4gdHJ1ZTsKKwkJZmFsbHRocm91Z2g7CisJY2FzZSBEUk1fRk9STUFUX0M4OgorCWNh c2UgRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMTYxNjE2 MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9B UkdCMTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9ZMjEwOgorCWNhc2UgRFJNX0ZPUk1BVF9Z MjEyOgorCWNhc2UgRFJNX0ZPUk1BVF9ZMjE2OgorCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTJfMTYx NjE2MTY6CisJY2FzZSBEUk1fRk9STUFUX1hWWVUxNjE2MTYxNjoKKwkJaWYgKG1vZGlmaWVyID09 IERSTV9GT1JNQVRfTU9EX0xJTkVBUiB8fAorCQkgICAgbW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRf TU9EX1hfVElMRUQgfHwKKwkJICAgIG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVE KQorCQkJcmV0dXJuIHRydWU7CisJCWZhbGx0aHJvdWdoOworCWRlZmF1bHQ6CisJCXJldHVybiBm YWxzZTsKKwl9Cit9CisKK3N0YXRpYyBib29sIGdlbjEyX3BsYW5lX3N1cHBvcnRzX21jX2Njcyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJCWVudW0gcGxhbmVfaWQgcGxh bmVfaWQpCit7CisJLyogV2FfMTQwMTA0NzcwMDg6dGdsW2EwLi5jMF0scmtsW2FsbF0sZGcxW2Fs bF0gKi8KKwlpZiAoSVNfREcxKGRldl9wcml2KSB8fCBJU19ST0NLRVRMQUtFKGRldl9wcml2KSB8 fAorCSAgICBJU19UR0xfRElTUF9SRVZJRChkZXZfcHJpdiwgVEdMX1JFVklEX0EwLCBUR0xfUkVW SURfQzApKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gcGxhbmVfaWQgPCBQTEFORV9TUFJJ VEU0OworfQorCitzdGF0aWMgYm9vbCBnZW4xMl9wbGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZChz dHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUsCisJCQkJCSAgICAgdTMyIGZvcm1hdCwgdTY0IG1vZGlm aWVyKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoX3Bs YW5lLT5kZXYpOworCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShf cGxhbmUpOworCisJc3dpdGNoIChtb2RpZmllcikgeworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lf VElMRURfR0VOMTJfTUNfQ0NTOgorCQlpZiAoIWdlbjEyX3BsYW5lX3N1cHBvcnRzX21jX2Njcyhk ZXZfcHJpdiwgcGxhbmUtPmlkKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJZmFsbHRocm91Z2g7CisJ Y2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxF RDoKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgorCWNhc2UgSTkxNV9GT1JNQVRfTU9E X1lfVElMRURfR0VOMTJfUkNfQ0NTOgorCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VO MTJfUkNfQ0NTX0NDOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZmFsc2U7CisJfQor CisJc3dpdGNoIChmb3JtYXQpIHsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6CisJY2FzZSBE Uk1fRk9STUFUX1hCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKKwljYXNlIERS TV9GT1JNQVRfQUJHUjg4ODg6CisJCWlmIChpc19jY3NfbW9kaWZpZXIobW9kaWZpZXIpKQorCQkJ cmV0dXJuIHRydWU7CisJCWZhbGx0aHJvdWdoOworCWNhc2UgRFJNX0ZPUk1BVF9ZVVlWOgorCWNh c2UgRFJNX0ZPUk1BVF9ZVllVOgorCWNhc2UgRFJNX0ZPUk1BVF9VWVZZOgorCWNhc2UgRFJNX0ZP Uk1BVF9WWVVZOgorCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgorCWNhc2UgRFJNX0ZPUk1BVF9YWVVW ODg4ODoKKwljYXNlIERSTV9GT1JNQVRfUDAxMDoKKwljYXNlIERSTV9GT1JNQVRfUDAxMjoKKwlj YXNlIERSTV9GT1JNQVRfUDAxNjoKKwkJaWYgKG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9Z X1RJTEVEX0dFTjEyX01DX0NDUykKKwkJCXJldHVybiB0cnVlOworCQlmYWxsdGhyb3VnaDsKKwlj YXNlIERSTV9GT1JNQVRfUkdCNTY1OgorCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMDoKKwlj YXNlIERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX0FSR0IyMTAxMDEw OgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfWFZZVTIx MDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX0M4OgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTYxNjE2 MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9Y UkdCMTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTYxNjE2MTZGOgorCWNhc2UgRFJN X0ZPUk1BVF9ZMjEwOgorCWNhc2UgRFJNX0ZPUk1BVF9ZMjEyOgorCWNhc2UgRFJNX0ZPUk1BVF9Z MjE2OgorCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTJfMTYxNjE2MTY6CisJY2FzZSBEUk1fRk9STUFU X1hWWVUxNjE2MTYxNjoKKwkJaWYgKG1vZGlmaWVyID09IERSTV9GT1JNQVRfTU9EX0xJTkVBUiB8 fAorCQkgICAgbW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQgfHwKKwkJICAgIG1v ZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEKQorCQkJcmV0dXJuIHRydWU7CisJCWZh bGx0aHJvdWdoOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyBj b25zdCB1NjQgKmdlbjEyX2dldF9wbGFuZV9tb2RpZmllcnMoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAorCQkJCQkgICAgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCkKK3sKKwlpZiAo Z2VuMTJfcGxhbmVfc3VwcG9ydHNfbWNfY2NzKGRldl9wcml2LCBwbGFuZV9pZCkpCisJCXJldHVy biBnZW4xMl9wbGFuZV9mb3JtYXRfbW9kaWZpZXJzX21jX2NjczsKKwllbHNlCisJCXJldHVybiBn ZW4xMl9wbGFuZV9mb3JtYXRfbW9kaWZpZXJzX3JjX2NjczsKK30KKworc3RhdGljIGNvbnN0IHN0 cnVjdCBkcm1fcGxhbmVfZnVuY3Mgc2tsX3BsYW5lX2Z1bmNzID0geworCS51cGRhdGVfcGxhbmUg PSBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUsCisJLmRpc2FibGVfcGxhbmUgPSBkcm1f YXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAorCS5kZXN0cm95ID0gaW50ZWxfcGxhbmVfZGVz dHJveSwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGludGVsX3BsYW5lX2R1cGxpY2F0ZV9z dGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRl LAorCS5mb3JtYXRfbW9kX3N1cHBvcnRlZCA9IHNrbF9wbGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRl ZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGdlbjEyX3BsYW5l X2Z1bmNzID0geworCS51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxh bmUsCisJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAor CS5kZXN0cm95ID0gaW50ZWxfcGxhbmVfZGVzdHJveSwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0 ZSA9IGludGVsX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUg PSBpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRlLAorCS5mb3JtYXRfbW9kX3N1cHBvcnRlZCA9IGdl bjEyX3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkLAorfTsKKworc3RhdGljIHZvaWQKK3NrbF9w bGFuZV9lbmFibGVfZmxpcF9kb25lKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUpCit7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7CisJ ZW51bSBwaXBlIHBpcGUgPSBwbGFuZS0+cGlwZTsKKworCXNwaW5fbG9ja19pcnEoJmk5MTUtPmly cV9sb2NrKTsKKwliZHdfZW5hYmxlX3BpcGVfaXJxKGk5MTUsIHBpcGUsIEdFTjlfUElQRV9QTEFO RV9GTElQX0RPTkUocGxhbmUtPmlkKSk7CisJc3Bpbl91bmxvY2tfaXJxKCZpOTE1LT5pcnFfbG9j ayk7Cit9CisKK3N0YXRpYyB2b2lkCitza2xfcGxhbmVfZGlzYWJsZV9mbGlwX2RvbmUoc3RydWN0 IGludGVsX3BsYW5lICpwbGFuZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9 IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKKwllbnVtIHBpcGUgcGlwZSA9IHBsYW5lLT5waXBl OworCisJc3Bpbl9sb2NrX2lycSgmaTkxNS0+aXJxX2xvY2spOworCWJkd19kaXNhYmxlX3BpcGVf aXJxKGk5MTUsIHBpcGUsIEdFTjlfUElQRV9QTEFORV9GTElQX0RPTkUocGxhbmUtPmlkKSk7CisJ c3Bpbl91bmxvY2tfaXJxKCZpOTE1LT5pcnFfbG9jayk7Cit9CisKK3N0cnVjdCBpbnRlbF9wbGFu ZSAqCitza2xfdW5pdmVyc2FsX3BsYW5lX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCisJCQkgICBlbnVtIHBpcGUgcGlwZSwgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCkK K3sKKwljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzICpwbGFuZV9mdW5jczsKKwlzdHJ1Y3Qg aW50ZWxfcGxhbmUgKnBsYW5lOworCWVudW0gZHJtX3BsYW5lX3R5cGUgcGxhbmVfdHlwZTsKKwl1 bnNpZ25lZCBpbnQgc3VwcG9ydGVkX3JvdGF0aW9uczsKKwl1bnNpZ25lZCBpbnQgc3VwcG9ydGVk X2NzYzsKKwljb25zdCB1NjQgKm1vZGlmaWVyczsKKwljb25zdCB1MzIgKmZvcm1hdHM7CisJaW50 IG51bV9mb3JtYXRzOworCWludCByZXQ7CisKKwlwbGFuZSA9IGludGVsX3BsYW5lX2FsbG9jKCk7 CisJaWYgKElTX0VSUihwbGFuZSkpCisJCXJldHVybiBwbGFuZTsKKworCXBsYW5lLT5waXBlID0g cGlwZTsKKwlwbGFuZS0+aWQgPSBwbGFuZV9pZDsKKwlwbGFuZS0+ZnJvbnRidWZmZXJfYml0ID0g SU5URUxfRlJPTlRCVUZGRVIocGlwZSwgcGxhbmVfaWQpOworCisJcGxhbmUtPmhhc19mYmMgPSBz a2xfcGxhbmVfaGFzX2ZiYyhkZXZfcHJpdiwgcGlwZSwgcGxhbmVfaWQpOworCWlmIChwbGFuZS0+ aGFzX2ZiYykgeworCQlzdHJ1Y3QgaW50ZWxfZmJjICpmYmMgPSAmZGV2X3ByaXYtPmZiYzsKKwor CQlmYmMtPnBvc3NpYmxlX2ZyYW1lYnVmZmVyX2JpdHMgfD0gcGxhbmUtPmZyb250YnVmZmVyX2Jp dDsKKwl9CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkgeworCQlwbGFuZS0+bWlu X3dpZHRoID0gaWNsX3BsYW5lX21pbl93aWR0aDsKKwkJcGxhbmUtPm1heF93aWR0aCA9IGljbF9w bGFuZV9tYXhfd2lkdGg7CisJCXBsYW5lLT5tYXhfaGVpZ2h0ID0gaWNsX3BsYW5lX21heF9oZWln aHQ7CisJfSBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlOSUxB S0UoZGV2X3ByaXYpKSB7CisJCXBsYW5lLT5tYXhfd2lkdGggPSBnbGtfcGxhbmVfbWF4X3dpZHRo OworCQlwbGFuZS0+bWF4X2hlaWdodCA9IHNrbF9wbGFuZV9tYXhfaGVpZ2h0OworCX0gZWxzZSB7 CisJCXBsYW5lLT5tYXhfd2lkdGggPSBza2xfcGxhbmVfbWF4X3dpZHRoOworCQlwbGFuZS0+bWF4 X2hlaWdodCA9IHNrbF9wbGFuZV9tYXhfaGVpZ2h0OworCX0KKworCXBsYW5lLT5tYXhfc3RyaWRl ID0gc2tsX3BsYW5lX21heF9zdHJpZGU7CisJcGxhbmUtPnVwZGF0ZV9wbGFuZSA9IHNrbF91cGRh dGVfcGxhbmU7CisJcGxhbmUtPmRpc2FibGVfcGxhbmUgPSBza2xfZGlzYWJsZV9wbGFuZTsKKwlw bGFuZS0+Z2V0X2h3X3N0YXRlID0gc2tsX3BsYW5lX2dldF9od19zdGF0ZTsKKwlwbGFuZS0+Y2hl Y2tfcGxhbmUgPSBza2xfcGxhbmVfY2hlY2s7CisJcGxhbmUtPm1pbl9jZGNsayA9IHNrbF9wbGFu ZV9taW5fY2RjbGs7CisKKwlpZiAocGxhbmVfaWQgPT0gUExBTkVfUFJJTUFSWSkgeworCQlwbGFu ZS0+bmVlZF9hc3luY19mbGlwX2Rpc2FibGVfd2EgPSBJU19HRU5fUkFOR0UoZGV2X3ByaXYsIDks IDEwKTsKKwkJcGxhbmUtPmFzeW5jX2ZsaXAgPSBza2xfcGxhbmVfYXN5bmNfZmxpcDsKKwkJcGxh bmUtPmVuYWJsZV9mbGlwX2RvbmUgPSBza2xfcGxhbmVfZW5hYmxlX2ZsaXBfZG9uZTsKKwkJcGxh bmUtPmRpc2FibGVfZmxpcF9kb25lID0gc2tsX3BsYW5lX2Rpc2FibGVfZmxpcF9kb25lOworCX0K KworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExKQorCQlmb3JtYXRzID0gaWNsX2dldF9w bGFuZV9mb3JtYXRzKGRldl9wcml2LCBwaXBlLAorCQkJCQkJcGxhbmVfaWQsICZudW1fZm9ybWF0 cyk7CisJZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklMQUtF KGRldl9wcml2KSkKKwkJZm9ybWF0cyA9IGdsa19nZXRfcGxhbmVfZm9ybWF0cyhkZXZfcHJpdiwg cGlwZSwKKwkJCQkJCXBsYW5lX2lkLCAmbnVtX2Zvcm1hdHMpOworCWVsc2UKKwkJZm9ybWF0cyA9 IHNrbF9nZXRfcGxhbmVfZm9ybWF0cyhkZXZfcHJpdiwgcGlwZSwKKwkJCQkJCXBsYW5lX2lkLCAm bnVtX2Zvcm1hdHMpOworCisJcGxhbmUtPmhhc19jY3MgPSBza2xfcGxhbmVfaGFzX2NjcyhkZXZf cHJpdiwgcGlwZSwgcGxhbmVfaWQpOworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEyKSB7 CisJCW1vZGlmaWVycyA9IGdlbjEyX2dldF9wbGFuZV9tb2RpZmllcnMoZGV2X3ByaXYsIHBsYW5l X2lkKTsKKwkJcGxhbmVfZnVuY3MgPSAmZ2VuMTJfcGxhbmVfZnVuY3M7CisJfSBlbHNlIHsKKwkJ aWYgKHBsYW5lLT5oYXNfY2NzKQorCQkJbW9kaWZpZXJzID0gc2tsX3BsYW5lX2Zvcm1hdF9tb2Rp ZmllcnNfY2NzOworCQllbHNlCisJCQltb2RpZmllcnMgPSBza2xfcGxhbmVfZm9ybWF0X21vZGlm aWVyc19ub2NjczsKKwkJcGxhbmVfZnVuY3MgPSAmc2tsX3BsYW5lX2Z1bmNzOworCX0KKworCWlm IChwbGFuZV9pZCA9PSBQTEFORV9QUklNQVJZKQorCQlwbGFuZV90eXBlID0gRFJNX1BMQU5FX1RZ UEVfUFJJTUFSWTsKKwllbHNlCisJCXBsYW5lX3R5cGUgPSBEUk1fUExBTkVfVFlQRV9PVkVSTEFZ OworCisJcmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KCZkZXZfcHJpdi0+ZHJtLCAmcGxh bmUtPmJhc2UsCisJCQkJICAgICAgIDAsIHBsYW5lX2Z1bmNzLAorCQkJCSAgICAgICBmb3JtYXRz LCBudW1fZm9ybWF0cywgbW9kaWZpZXJzLAorCQkJCSAgICAgICBwbGFuZV90eXBlLAorCQkJCSAg ICAgICAicGxhbmUgJWQlYyIsIHBsYW5lX2lkICsgMSwKKwkJCQkgICAgICAgcGlwZV9uYW1lKHBp cGUpKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwlzdXBwb3J0ZWRfcm90YXRpb25zID0K KwkJRFJNX01PREVfUk9UQVRFXzAgfCBEUk1fTU9ERV9ST1RBVEVfOTAgfAorCQlEUk1fTU9ERV9S T1RBVEVfMTgwIHwgRFJNX01PREVfUk9UQVRFXzI3MDsKKworCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDEwKQorCQlzdXBwb3J0ZWRfcm90YXRpb25zIHw9IERSTV9NT0RFX1JFRkxFQ1RfWDsK KworCWRybV9wbGFuZV9jcmVhdGVfcm90YXRpb25fcHJvcGVydHkoJnBsYW5lLT5iYXNlLAorCQkJ CQkgICBEUk1fTU9ERV9ST1RBVEVfMCwKKwkJCQkJICAgc3VwcG9ydGVkX3JvdGF0aW9ucyk7CisK KwlzdXBwb3J0ZWRfY3NjID0gQklUKERSTV9DT0xPUl9ZQ0JDUl9CVDYwMSkgfCBCSVQoRFJNX0NP TE9SX1lDQkNSX0JUNzA5KTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElT X0dFTUlOSUxBS0UoZGV2X3ByaXYpKQorCQlzdXBwb3J0ZWRfY3NjIHw9IEJJVChEUk1fQ09MT1Jf WUNCQ1JfQlQyMDIwKTsKKworCWRybV9wbGFuZV9jcmVhdGVfY29sb3JfcHJvcGVydGllcygmcGxh bmUtPmJhc2UsCisJCQkJCSAgc3VwcG9ydGVkX2NzYywKKwkJCQkJICBCSVQoRFJNX0NPTE9SX1lD QkNSX0xJTUlURURfUkFOR0UpIHwKKwkJCQkJICBCSVQoRFJNX0NPTE9SX1lDQkNSX0ZVTExfUkFO R0UpLAorCQkJCQkgIERSTV9DT0xPUl9ZQ0JDUl9CVDcwOSwKKwkJCQkJICBEUk1fQ09MT1JfWUNC Q1JfTElNSVRFRF9SQU5HRSk7CisKKwlkcm1fcGxhbmVfY3JlYXRlX2FscGhhX3Byb3BlcnR5KCZw bGFuZS0+YmFzZSk7CisJZHJtX3BsYW5lX2NyZWF0ZV9ibGVuZF9tb2RlX3Byb3BlcnR5KCZwbGFu ZS0+YmFzZSwKKwkJCQkJICAgICBCSVQoRFJNX01PREVfQkxFTkRfUElYRUxfTk9ORSkgfAorCQkJ CQkgICAgIEJJVChEUk1fTU9ERV9CTEVORF9QUkVNVUxUSSkgfAorCQkJCQkgICAgIEJJVChEUk1f TU9ERV9CTEVORF9DT1ZFUkFHRSkpOworCisJZHJtX3BsYW5lX2NyZWF0ZV96cG9zX2ltbXV0YWJs ZV9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UsIHBsYW5lX2lkKTsKKworCWlmIChJTlRFTF9HRU4oZGV2 X3ByaXYpID49IDEyKQorCQlkcm1fcGxhbmVfZW5hYmxlX2ZiX2RhbWFnZV9jbGlwcygmcGxhbmUt PmJhc2UpOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTApCisJCWRybV9wbGFuZV9j cmVhdGVfc2NhbGluZ19maWx0ZXJfcHJvcGVydHkoJnBsYW5lLT5iYXNlLAorCQkJCQkJQklUKERS TV9TQ0FMSU5HX0ZJTFRFUl9ERUZBVUxUKSB8CisJCQkJCQlCSVQoRFJNX1NDQUxJTkdfRklMVEVS X05FQVJFU1RfTkVJR0hCT1IpKTsKKworCWRybV9wbGFuZV9oZWxwZXJfYWRkKCZwbGFuZS0+YmFz ZSwgJmludGVsX3BsYW5lX2hlbHBlcl9mdW5jcyk7CisKKwlyZXR1cm4gcGxhbmU7CisKK2ZhaWw6 CisJaW50ZWxfcGxhbmVfZnJlZShwbGFuZSk7CisKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQor Cit2b2lkCitza2xfZ2V0X2luaXRpYWxfcGxhbmVfY29uZmlnKHN0cnVjdCBpbnRlbF9jcnRjICpj cnRjLAorCQkJICAgICBzdHJ1Y3QgaW50ZWxfaW5pdGlhbF9wbGFuZV9jb25maWcgKnBsYW5lX2Nv bmZpZykKK3sKKwlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSA9IHRvX2ludGVs X2NydGNfc3RhdGUoY3J0Yy0+YmFzZS5zdGF0ZSk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IGNydGMtPmJhc2UuZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRv X2k5MTUoZGV2KTsKKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUo Y3J0Yy0+YmFzZS5wcmltYXJ5KTsKKwllbnVtIHBsYW5lX2lkIHBsYW5lX2lkID0gcGxhbmUtPmlk OworCWVudW0gcGlwZSBwaXBlOworCXUzMiB2YWwsIGJhc2UsIG9mZnNldCwgc3RyaWRlX211bHQs IHRpbGluZywgYWxwaGE7CisJaW50IGZvdXJjYywgcGl4ZWxfZm9ybWF0OworCXVuc2lnbmVkIGlu dCBhbGlnbmVkX2hlaWdodDsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKKwlzdHJ1Y3Qg aW50ZWxfZnJhbWVidWZmZXIgKmludGVsX2ZiOworCisJaWYgKCFwbGFuZS0+Z2V0X2h3X3N0YXRl KHBsYW5lLCAmcGlwZSkpCisJCXJldHVybjsKKworCWRybV9XQVJOX09OKGRldiwgcGlwZSAhPSBj cnRjLT5waXBlKTsKKworCWlmIChjcnRjX3N0YXRlLT5iaWdqb2luZXIpIHsKKwkJZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sCisJCQkgICAgIlVuc3VwcG9ydGVkIGJpZ2pvaW5lciBjb25maWd1 cmF0aW9uIGZvciBpbml0aWFsIEZCXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWludGVsX2ZiID0g a3phbGxvYyhzaXplb2YoKmludGVsX2ZiKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbnRlbF9mYikg eworCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgImZhaWxlZCB0byBhbGxvYyBmYlxuIik7 CisJCXJldHVybjsKKwl9CisKKwlmYiA9ICZpbnRlbF9mYi0+YmFzZTsKKworCWZiLT5kZXYgPSBk ZXY7CisKKwl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQTEFORV9DVEwocGlwZSwgcGxh bmVfaWQpKTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExKQorCQlwaXhlbF9mb3Jt YXQgPSB2YWwgJiBJQ0xfUExBTkVfQ1RMX0ZPUk1BVF9NQVNLOworCWVsc2UKKwkJcGl4ZWxfZm9y bWF0ID0gdmFsICYgUExBTkVfQ1RMX0ZPUk1BVF9NQVNLOworCisJaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpIHsKKwkJYWxwaGEgPSBpbnRl bF9kZV9yZWFkKGRldl9wcml2LAorCQkJCSAgICAgIFBMQU5FX0NPTE9SX0NUTChwaXBlLCBwbGFu ZV9pZCkpOworCQlhbHBoYSAmPSBQTEFORV9DT0xPUl9BTFBIQV9NQVNLOworCX0gZWxzZSB7CisJ CWFscGhhID0gdmFsICYgUExBTkVfQ1RMX0FMUEhBX01BU0s7CisJfQorCisJZm91cmNjID0gc2ts X2Zvcm1hdF90b19mb3VyY2MocGl4ZWxfZm9ybWF0LAorCQkJCSAgICAgIHZhbCAmIFBMQU5FX0NU TF9PUkRFUl9SR0JYLCBhbHBoYSk7CisJZmItPmZvcm1hdCA9IGRybV9mb3JtYXRfaW5mbyhmb3Vy Y2MpOworCisJdGlsaW5nID0gdmFsICYgUExBTkVfQ1RMX1RJTEVEX01BU0s7CisJc3dpdGNoICh0 aWxpbmcpIHsKKwljYXNlIFBMQU5FX0NUTF9USUxFRF9MSU5FQVI6CisJCWZiLT5tb2RpZmllciA9 IERSTV9GT1JNQVRfTU9EX0xJTkVBUjsKKwkJYnJlYWs7CisJY2FzZSBQTEFORV9DVExfVElMRURf WDoKKwkJcGxhbmVfY29uZmlnLT50aWxpbmcgPSBJOTE1X1RJTElOR19YOworCQlmYi0+bW9kaWZp ZXIgPSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDsKKwkJYnJlYWs7CisJY2FzZSBQTEFORV9DVExf VElMRURfWToKKwkJcGxhbmVfY29uZmlnLT50aWxpbmcgPSBJOTE1X1RJTElOR19ZOworCQlpZiAo dmFsICYgUExBTkVfQ1RMX1JFTkRFUl9ERUNPTVBSRVNTSU9OX0VOQUJMRSkKKwkJCWZiLT5tb2Rp ZmllciA9IElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTIgPworCQkJCUk5MTVfRk9STUFUX01PRF9Z X1RJTEVEX0dFTjEyX1JDX0NDUyA6CisJCQkJSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTOwor CQllbHNlIGlmICh2YWwgJiBQTEFORV9DVExfTUVESUFfREVDT01QUkVTU0lPTl9FTkFCTEUpCisJ CQlmYi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9NQ19DQ1M7CisJ CWVsc2UKKwkJCWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOworCQlicmVh azsKKwljYXNlIFBMQU5FX0NUTF9USUxFRF9ZRjoKKwkJaWYgKHZhbCAmIFBMQU5FX0NUTF9SRU5E RVJfREVDT01QUkVTU0lPTl9FTkFCTEUpCisJCQlmYi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9N T0RfWWZfVElMRURfQ0NTOworCQllbHNlCisJCQlmYi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9N T0RfWWZfVElMRUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCU1JU1NJTkdfQ0FTRSh0aWxpbmcp OworCQlnb3RvIGVycm9yOworCX0KKworCS8qCisJICogRFJNX01PREVfUk9UQVRFXyBpcyBjb3Vu dGVyIGNsb2Nrd2lzZSB0byBzdGF5IGNvbXBhdGlibGUgd2l0aCBYcmFuZHIKKwkgKiB3aGlsZSBp OTE1IEhXIHJvdGF0aW9uIGlzIGNsb2Nrd2lzZSwgdGhhdHMgd2h5IHRoaXMgc3dhcHBpbmcuCisJ ICovCisJc3dpdGNoICh2YWwgJiBQTEFORV9DVExfUk9UQVRFX01BU0spIHsKKwljYXNlIFBMQU5F X0NUTF9ST1RBVEVfMDoKKwkJcGxhbmVfY29uZmlnLT5yb3RhdGlvbiA9IERSTV9NT0RFX1JPVEFU RV8wOworCQlicmVhazsKKwljYXNlIFBMQU5FX0NUTF9ST1RBVEVfOTA6CisJCXBsYW5lX2NvbmZp Zy0+cm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfMjcwOworCQlicmVhazsKKwljYXNlIFBMQU5F X0NUTF9ST1RBVEVfMTgwOgorCQlwbGFuZV9jb25maWctPnJvdGF0aW9uID0gRFJNX01PREVfUk9U QVRFXzE4MDsKKwkJYnJlYWs7CisJY2FzZSBQTEFORV9DVExfUk9UQVRFXzI3MDoKKwkJcGxhbmVf Y29uZmlnLT5yb3RhdGlvbiA9IERSTV9NT0RFX1JPVEFURV85MDsKKwkJYnJlYWs7CisJfQorCisJ aWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgJiYKKwkgICAgdmFsICYgUExBTkVfQ1RMX0ZM SVBfSE9SSVpPTlRBTCkKKwkJcGxhbmVfY29uZmlnLT5yb3RhdGlvbiB8PSBEUk1fTU9ERV9SRUZM RUNUX1g7CisKKwkvKiA5MC8yNzAgZGVncmVlIHJvdGF0aW9uIHdvdWxkIHJlcXVpcmUgZXh0cmEg d29yayAqLworCWlmIChkcm1fcm90YXRpb25fOTBfb3JfMjcwKHBsYW5lX2NvbmZpZy0+cm90YXRp b24pKQorCQlnb3RvIGVycm9yOworCisJYmFzZSA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIFBM QU5FX1NVUkYocGlwZSwgcGxhbmVfaWQpKSAmIDB4ZmZmZmYwMDA7CisJcGxhbmVfY29uZmlnLT5i YXNlID0gYmFzZTsKKworCW9mZnNldCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIFBMQU5FX09G RlNFVChwaXBlLCBwbGFuZV9pZCkpOworCisJdmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwg UExBTkVfU0laRShwaXBlLCBwbGFuZV9pZCkpOworCWZiLT5oZWlnaHQgPSAoKHZhbCA+PiAxNikg JiAweGZmZmYpICsgMTsKKwlmYi0+d2lkdGggPSAoKHZhbCA+PiAwKSAmIDB4ZmZmZikgKyAxOwor CisJdmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgUExBTkVfU1RSSURFKHBpcGUsIHBsYW5l X2lkKSk7CisJc3RyaWRlX211bHQgPSBza2xfcGxhbmVfc3RyaWRlX211bHQoZmIsIDAsIERSTV9N T0RFX1JPVEFURV8wKTsKKwlmYi0+cGl0Y2hlc1swXSA9ICh2YWwgJiAweDNmZikgKiBzdHJpZGVf bXVsdDsKKworCWFsaWduZWRfaGVpZ2h0ID0gaW50ZWxfZmJfYWxpZ25faGVpZ2h0KGZiLCAwLCBm Yi0+aGVpZ2h0KTsKKworCXBsYW5lX2NvbmZpZy0+c2l6ZSA9IGZiLT5waXRjaGVzWzBdICogYWxp Z25lZF9oZWlnaHQ7CisKKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJICAgICIlcy8l cyB3aXRoIGZiOiBzaXplPSVkeCVkQCVkLCBvZmZzZXQ9JXgsIHBpdGNoICVkLCBzaXplIDB4JXhc biIsCisJCSAgICBjcnRjLT5iYXNlLm5hbWUsIHBsYW5lLT5iYXNlLm5hbWUsIGZiLT53aWR0aCwg ZmItPmhlaWdodCwKKwkJICAgIGZiLT5mb3JtYXQtPmNwcFswXSAqIDgsIGJhc2UsIGZiLT5waXRj aGVzWzBdLAorCQkgICAgcGxhbmVfY29uZmlnLT5zaXplKTsKKworCXBsYW5lX2NvbmZpZy0+ZmIg PSBpbnRlbF9mYjsKKwlyZXR1cm47CisKK2Vycm9yOgorCWtmcmVlKGludGVsX2ZiKTsKK30KKwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9za2xfdW5pdmVyc2FsX3Bs YW5lLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L3NrbF91bml2ZXJzYWxfcGxhbmUu aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjcwZWI1MDEwY2QyOAot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvc2tsX3VuaXZl cnNhbF9wbGFuZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBNSVQgKi8KKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgorICov CisKKyNpZm5kZWYgX1NLTF9VTklWRVJTQUxfUExBTkVfSF8KKyNkZWZpbmUgX1NLTF9VTklWRVJT QUxfUExBTkVfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBkcm1fZnJh bWVidWZmZXI7CitzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZTsKK3N0cnVjdCBpbnRlbF9jcnRjOwor c3RydWN0IGludGVsX2luaXRpYWxfcGxhbmVfY29uZmlnOworc3RydWN0IGludGVsX3BsYW5lX3N0 YXRlOworCitlbnVtIHBpcGU7CitlbnVtIHBsYW5lX2lkOworCitzdHJ1Y3QgaW50ZWxfcGxhbmUg Kgorc2tsX3VuaXZlcnNhbF9wbGFuZV9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LAorCQkJICAgZW51bSBwaXBlIHBpcGUsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpOwor Cit2b2lkIHNrbF9nZXRfaW5pdGlhbF9wbGFuZV9jb25maWcoc3RydWN0IGludGVsX2NydGMgKmNy dGMsCisJCQkJICBzdHJ1Y3QgaW50ZWxfaW5pdGlhbF9wbGFuZV9jb25maWcgKnBsYW5lX2NvbmZp Zyk7CisKK2ludCBza2xfZm9ybWF0X3RvX2ZvdXJjYyhpbnQgZm9ybWF0LCBib29sIHJnYl9vcmRl ciwgYm9vbCBhbHBoYSk7CisKK2ludCBza2xfY2NzX3RvX21haW5fcGxhbmUoY29uc3Qgc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjY3NfcGxhbmUpOworaW50IHNrbF9jYWxjX21haW5f c3VyZmFjZV9vZmZzZXQoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0 ZSwKKwkJCQkgaW50ICp4LCBpbnQgKnksIHUzMiAqb2Zmc2V0KTsKKworI2VuZGlmCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfcG0uYwppbmRleCAxZGI3MDU5YWY4N2YuLjU1M2VhOWQwY2NjMiAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9wbS5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiZGlzcGxheS9pbnRl bF9kaXNwbGF5X3R5cGVzLmgiCiAjaW5jbHVkZSAiZGlzcGxheS9pbnRlbF9mYmMuaCIKICNpbmNs dWRlICJkaXNwbGF5L2ludGVsX3Nwcml0ZS5oIgorI2luY2x1ZGUgImRpc3BsYXkvc2tsX3VuaXZl cnNhbF9wbGFuZS5oIgogCiAjaW5jbHVkZSAiZ3QvaW50ZWxfbGxjLmgiCiAKLS0gCjIuMjcuMAoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4 IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==