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 89C60C433E0 for ; Mon, 21 Dec 2020 04:04:22 +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 35A4022BF3 for ; Mon, 21 Dec 2020 04:04:22 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 35A4022BF3 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 5DE866E45C; Mon, 21 Dec 2020 04:04:21 +0000 (UTC) Received: from us-smtp-delivery-44.mimecast.com (us-smtp-delivery-44.mimecast.com [207.211.30.44]) by gabe.freedesktop.org (Postfix) with ESMTPS id 864426E455 for ; Mon, 21 Dec 2020 04:04:17 +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-201-eZUFet2LPumD31Y822poQw-1; Sun, 20 Dec 2020 23:04:14 -0500 X-MC-Unique: eZUFet2LPumD31Y822poQw-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 45AE4107ACE6; Mon, 21 Dec 2020 04:04:13 +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 326BF5D9CA; Mon, 21 Dec 2020 04:04:12 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Mon, 21 Dec 2020 14:03:46 +1000 Message-Id: <20201221040357.4928-6-airlied@gmail.com> In-Reply-To: <20201221040357.4928-1-airlied@gmail.com> References: <20201221040357.4928-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: gmail.com Subject: [Intel-gfx] [PATCH 05/16] drm/i915: refactor i915 plane code into separate file. 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: Dave Airlie Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClZpbGxlIHN1Z2dlc3RlZCB0 aGlzIGFzIGEgZ29vZCBpZGVhLCBsZXQncyBtb3ZlIHRoaXMgYmVmb3JlIG1vdmluZwp0aGUgY3J0 YyBjb2RlLgoKU2lnbmVkLW9mZi1ieTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4K UmV2aWV3ZWQtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5j b20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAg IDMgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaTl4eF9wbGFuZS5jICAgIHwgNzA0 ICsrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaTl4eF9w bGFuZS5oICAgIHwgIDIxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlz cGxheS5jIHwgNjg5ICstLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9kaXNwbGF5LmggfCAgIDQgLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9zcHJpdGUuYyAgfCAgIDEgKwogNiBmaWxlcyBjaGFuZ2VkLCA3MjkgaW5zZXJ0aW9u cygrKSwgNjkzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvaTl4eF9wbGFuZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pOXh4X3BsYW5lLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4 IDk4YTM1YjkzOTA1Mi4uYzFmYTVhOTMxMGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtMjE1 LDcgKzIxNSw4IEBAIGk5MTUteSArPSBcCiAJZGlzcGxheS9pbnRlbF9xdWlya3MubyBcCiAJZGlz cGxheS9pbnRlbF9zcHJpdGUubyBcCiAJZGlzcGxheS9pbnRlbF90Yy5vIFwKLQlkaXNwbGF5L2lu dGVsX3ZnYS5vCisJZGlzcGxheS9pbnRlbF92Z2EubyBcCisJZGlzcGxheS9pOXh4X3BsYW5lLm8K IGk5MTUtJChDT05GSUdfQUNQSSkgKz0gXAogCWRpc3BsYXkvaW50ZWxfYWNwaS5vIFwKIAlkaXNw bGF5L2ludGVsX29wcmVnaW9uLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaTl4eF9wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pOXh4X3Bs YW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iNzg5ODVjODU1 YTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2k5eHhf cGxhbmUuYwpAQCAtMCwwICsxLDcwNCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1J VAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDIwIEludGVsIENvcnBvcmF0aW9uCisgKi8KKyNpbmNs dWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5o PgorI2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9o ZWxwZXIuaD4KKworI2luY2x1ZGUgImludGVsX2F0b21pYy5oIgorI2luY2x1ZGUgImludGVsX2F0 b21pY19wbGFuZS5oIgorI2luY2x1ZGUgImludGVsX2Rpc3BsYXlfdHlwZXMuaCIKKyNpbmNsdWRl ICJpbnRlbF9zcHJpdGUuaCIKKyNpbmNsdWRlICJpOXh4X3BsYW5lLmgiCisKKy8qIFByaW1hcnkg cGxhbmUgZm9ybWF0cyBmb3IgZ2VuIDw9IDMgKi8KK3N0YXRpYyBjb25zdCB1MzIgaTh4eF9wcmlt YXJ5X2Zvcm1hdHNbXSA9IHsKKwlEUk1fRk9STUFUX0M4LAorCURSTV9GT1JNQVRfWFJHQjE1NTUs CisJRFJNX0ZPUk1BVF9SR0I1NjUsCisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKK307CisKKy8qIFBy aW1hcnkgcGxhbmUgZm9ybWF0cyBmb3IgaXZiIChubyBmcDE2IGR1ZSB0byBodyBpc3N1ZSkgKi8K K3N0YXRpYyBjb25zdCB1MzIgaXZiX3ByaW1hcnlfZm9ybWF0c1tdID0geworCURSTV9GT1JNQVRf QzgsCisJRFJNX0ZPUk1BVF9SR0I1NjUsCisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9S TUFUX1hCR1I4ODg4LAorCURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9YQkdS MjEwMTAxMCwKK307CisKKy8qIFByaW1hcnkgcGxhbmUgZm9ybWF0cyBmb3IgZ2VuID49IDQsIGV4 Y2VwdCBpdmIgKi8KK3N0YXRpYyBjb25zdCB1MzIgaTk2NV9wcmltYXJ5X2Zvcm1hdHNbXSA9IHsK KwlEUk1fRk9STUFUX0M4LAorCURSTV9GT1JNQVRfUkdCNTY1LAorCURSTV9GT1JNQVRfWFJHQjg4 ODgsCisJRFJNX0ZPUk1BVF9YQkdSODg4OCwKKwlEUk1fRk9STUFUX1hSR0IyMTAxMDEwLAorCURS TV9GT1JNQVRfWEJHUjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGLAorfTsKKwor LyogUHJpbWFyeSBwbGFuZSBmb3JtYXRzIGZvciB2bHYvY2h2ICovCitzdGF0aWMgY29uc3QgdTMy IHZsdl9wcmltYXJ5X2Zvcm1hdHNbXSA9IHsKKwlEUk1fRk9STUFUX0M4LAorCURSTV9GT1JNQVRf UkdCNTY1LAorCURSTV9GT1JNQVRfWFJHQjg4ODgsCisJRFJNX0ZPUk1BVF9YQkdSODg4OCwKKwlE Uk1fRk9STUFUX0FSR0I4ODg4LAorCURSTV9GT1JNQVRfQUJHUjg4ODgsCisJRFJNX0ZPUk1BVF9Y UkdCMjEwMTAxMCwKKwlEUk1fRk9STUFUX1hCR1IyMTAxMDEwLAorCURSTV9GT1JNQVRfQVJHQjIx MDEwMTAsCisJRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMCwKKwlEUk1fRk9STUFUX1hCR1IxNjE2MTYx NkYsCit9OworCitzdGF0aWMgY29uc3QgdTY0IGk5eHhfZm9ybWF0X21vZGlmaWVyc1tdID0gewor CUk5MTVfRk9STUFUX01PRF9YX1RJTEVELAorCURSTV9GT1JNQVRfTU9EX0xJTkVBUiwKKwlEUk1f Rk9STUFUX01PRF9JTlZBTElECit9OworCitzdGF0aWMgYm9vbCBpOHh4X3BsYW5lX2Zvcm1hdF9t b2Rfc3VwcG9ydGVkKHN0cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwKKwkJCQkJICAgIHUzMiBmb3Jt YXQsIHU2NCBtb2RpZmllcikKK3sKKwlzd2l0Y2ggKG1vZGlmaWVyKSB7CisJY2FzZSBEUk1fRk9S TUFUX01PRF9MSU5FQVI6CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDoKKwkJYnJlYWs7 CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXN3aXRjaCAoZm9ybWF0KSB7CisJ Y2FzZSBEUk1fRk9STUFUX0M4OgorCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6CisJY2FzZSBEUk1f Rk9STUFUX1hSR0IxNTU1OgorCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKKwkJcmV0dXJuIG1v ZGlmaWVyID09IERSTV9GT1JNQVRfTU9EX0xJTkVBUiB8fAorCQkJbW9kaWZpZXIgPT0gSTkxNV9G T1JNQVRfTU9EX1hfVElMRUQ7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKwor c3RhdGljIGJvb2wgaTk2NV9wbGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX3Bs YW5lICpfcGxhbmUsCisJCQkJCSAgICB1MzIgZm9ybWF0LCB1NjQgbW9kaWZpZXIpCit7CisJc3dp dGNoIChtb2RpZmllcikgeworCWNhc2UgRFJNX0ZPUk1BVF9NT0RfTElORUFSOgorCWNhc2UgSTkx NV9GT1JNQVRfTU9EX1hfVElMRUQ6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxz ZTsKKwl9CisKKwlzd2l0Y2ggKGZvcm1hdCkgeworCWNhc2UgRFJNX0ZPUk1BVF9DODoKKwljYXNl IERSTV9GT1JNQVRfUkdCNTY1OgorCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKKwljYXNlIERS TV9GT1JNQVRfWEJHUjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4OgorCWNhc2UgRFJN X0ZPUk1BVF9BQkdSODg4ODoKKwljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6CisJY2FzZSBE Uk1fRk9STUFUX1hCR1IyMTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDoKKwlj YXNlIERSTV9GT1JNQVRfQUJHUjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX1hCR1IxNjE2MTYx NkY6CisJCXJldHVybiBtb2RpZmllciA9PSBEUk1fRk9STUFUX01PRF9MSU5FQVIgfHwKKwkJCW1v ZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOworCWRlZmF1bHQ6CisJCXJldHVybiBm YWxzZTsKKwl9Cit9CisKK3N0YXRpYyBib29sIGk5eHhfcGxhbmVfaGFzX2ZiYyhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgICAgICAgZW51bSBpOXh4X3BsYW5lX2lkIGk5 eHhfcGxhbmUpCit7CisJaWYgKCFIQVNfRkJDKGRldl9wcml2KSkKKwkJcmV0dXJuIGZhbHNlOwor CisJaWYgKElTX0JST0FEV0VMTChkZXZfcHJpdikgfHwgSVNfSEFTV0VMTChkZXZfcHJpdikpCisJ CXJldHVybiBpOXh4X3BsYW5lID09IFBMQU5FX0E7IC8qIHRpZWQgdG8gcGlwZSBBICovCisJZWxz ZSBpZiAoSVNfSVZZQlJJREdFKGRldl9wcml2KSkKKwkJcmV0dXJuIGk5eHhfcGxhbmUgPT0gUExB TkVfQSB8fCBpOXh4X3BsYW5lID09IFBMQU5FX0IgfHwKKwkJCWk5eHhfcGxhbmUgPT0gUExBTkVf QzsKKwllbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpCisJCXJldHVybiBpOXh4X3Bs YW5lID09IFBMQU5FX0EgfHwgaTl4eF9wbGFuZSA9PSBQTEFORV9COworCWVsc2UKKwkJcmV0dXJu IGk5eHhfcGxhbmUgPT0gUExBTkVfQTsKK30KKworc3RhdGljIGJvb2wgaTl4eF9wbGFuZV9oYXNf d2luZG93aW5nKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUpCit7CisJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOworCWVudW0gaTl4 eF9wbGFuZV9pZCBpOXh4X3BsYW5lID0gcGxhbmUtPmk5eHhfcGxhbmU7CisKKwlpZiAoSVNfQ0hF UlJZVklFVyhkZXZfcHJpdikpCisJCXJldHVybiBpOXh4X3BsYW5lID09IFBMQU5FX0I7CisJZWxz ZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA1IHx8IElTX0c0WChkZXZfcHJpdikpCisJCXJl dHVybiBmYWxzZTsKKwllbHNlIGlmIChJU19HRU4oZGV2X3ByaXYsIDQpKQorCQlyZXR1cm4gaTl4 eF9wbGFuZSA9PSBQTEFORV9DOworCWVsc2UKKwkJcmV0dXJuIGk5eHhfcGxhbmUgPT0gUExBTkVf QiB8fAorCQkJaTl4eF9wbGFuZSA9PSBQTEFORV9DOworfQorCitzdGF0aWMgdTMyIGk5eHhfcGxh bmVfY3RsKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJICBj b25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9CisJCXRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGku cGxhbmUtPmRldik7CisJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9z dGF0ZS0+aHcuZmI7CisJdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmh3LnJv dGF0aW9uOworCXUzMiBkc3BjbnRyOworCisJZHNwY250ciA9IERJU1BMQVlfUExBTkVfRU5BQkxF OworCisJaWYgKElTX0c0WChkZXZfcHJpdikgfHwgSVNfR0VOKGRldl9wcml2LCA1KSB8fAorCSAg ICBJU19HRU4oZGV2X3ByaXYsIDYpIHx8IElTX0lWWUJSSURHRShkZXZfcHJpdikpCisJCWRzcGNu dHIgfD0gRElTUFBMQU5FX1RSSUNLTEVfRkVFRF9ESVNBQkxFOworCisJc3dpdGNoIChmYi0+Zm9y bWF0LT5mb3JtYXQpIHsKKwljYXNlIERSTV9GT1JNQVRfQzg6CisJCWRzcGNudHIgfD0gRElTUFBM QU5FXzhCUFA7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTU1NToKKwkJZHNwY250 ciB8PSBESVNQUExBTkVfQkdSWDU1NTsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX0FSR0Ix NTU1OgorCQlkc3BjbnRyIHw9IERJU1BQTEFORV9CR1JBNTU1OworCQlicmVhazsKKwljYXNlIERS TV9GT1JNQVRfUkdCNTY1OgorCQlkc3BjbnRyIHw9IERJU1BQTEFORV9CR1JYNTY1OworCQlicmVh azsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6CisJCWRzcGNudHIgfD0gRElTUFBMQU5FX0JH Ulg4ODg7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKKwkJZHNwY250ciB8 PSBESVNQUExBTkVfUkdCWDg4ODsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4 OgorCQlkc3BjbnRyIHw9IERJU1BQTEFORV9CR1JBODg4OworCQlicmVhazsKKwljYXNlIERSTV9G T1JNQVRfQUJHUjg4ODg6CisJCWRzcGNudHIgfD0gRElTUFBMQU5FX1JHQkE4ODg7CisJCWJyZWFr OworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMDoKKwkJZHNwY250ciB8PSBESVNQUExBTkVf QkdSWDEwMTAxMDsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX1hCR1IyMTAxMDEwOgorCQlk c3BjbnRyIHw9IERJU1BQTEFORV9SR0JYMTAxMDEwOworCQlicmVhazsKKwljYXNlIERSTV9GT1JN QVRfQVJHQjIxMDEwMTA6CisJCWRzcGNudHIgfD0gRElTUFBMQU5FX0JHUkExMDEwMTA7CisJCWJy ZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMDoKKwkJZHNwY250ciB8PSBESVNQUExB TkVfUkdCQTEwMTAxMDsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkY6 CisJCWRzcGNudHIgfD0gRElTUFBMQU5FX1JHQlgxNjE2MTY7CisJCWJyZWFrOworCWRlZmF1bHQ6 CisJCU1JU1NJTkdfQ0FTRShmYi0+Zm9ybWF0LT5mb3JtYXQpOworCQlyZXR1cm4gMDsKKwl9CisK KwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0ICYmCisJICAgIGZiLT5tb2RpZmllciA9PSBJ OTE1X0ZPUk1BVF9NT0RfWF9USUxFRCkKKwkJZHNwY250ciB8PSBESVNQUExBTkVfVElMRUQ7CisK KwlpZiAocm90YXRpb24gJiBEUk1fTU9ERV9ST1RBVEVfMTgwKQorCQlkc3BjbnRyIHw9IERJU1BQ TEFORV9ST1RBVEVfMTgwOworCisJaWYgKHJvdGF0aW9uICYgRFJNX01PREVfUkVGTEVDVF9YKQor CQlkc3BjbnRyIHw9IERJU1BQTEFORV9NSVJST1I7CisKKwlyZXR1cm4gZHNwY250cjsKK30KKwor aW50IGk5eHhfY2hlY2tfcGxhbmVfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBs YW5lX3N0YXRlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9CisJCXRv X2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7CisJY29uc3Qgc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7CisJaW50IHNyY194LCBzcmNfeSwg c3JjX3c7CisJdTMyIG9mZnNldDsKKwlpbnQgcmV0OworCisJcmV0ID0gaW50ZWxfcGxhbmVfY29t cHV0ZV9ndHQocGxhbmVfc3RhdGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAo IXBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUpCisJCXJldHVybiAwOworCisJc3JjX3cgPSBkcm1f cmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjKSA+PiAxNjsKKwlzcmNfeCA9IHBsYW5l X3N0YXRlLT51YXBpLnNyYy54MSA+PiAxNjsKKwlzcmNfeSA9IHBsYW5lX3N0YXRlLT51YXBpLnNy Yy55MSA+PiAxNjsKKworCS8qIFVuZG9jdW1lbnRlZCBoYXJkd2FyZSBsaW1pdCBvbiBpOTY1L2c0 eC92bHYvY2h2ICovCisJaWYgKEhBU19HTUNIKGRldl9wcml2KSAmJiBmYi0+Zm9ybWF0LT5jcHBb MF0gPT0gOCAmJiBzcmNfdyA+IDIwNDgpCisJCXJldHVybiAtRUlOVkFMOworCisJaW50ZWxfYWRk X2ZiX29mZnNldHMoJnNyY194LCAmc3JjX3ksIHBsYW5lX3N0YXRlLCAwKTsKKworCWlmIChJTlRF TF9HRU4oZGV2X3ByaXYpID49IDQpCisJCW9mZnNldCA9IGludGVsX3BsYW5lX2NvbXB1dGVfYWxp Z25lZF9vZmZzZXQoJnNyY194LCAmc3JjX3ksCisJCQkJCQkJICAgIHBsYW5lX3N0YXRlLCAwKTsK KwllbHNlCisJCW9mZnNldCA9IDA7CisKKwkvKgorCSAqIFB1dCB0aGUgZmluYWwgY29vcmRpbmF0 ZXMgYmFjayBzbyB0aGF0IHRoZSBzcmMKKwkgKiBjb29yZGluYXRlIGNoZWNrcyB3aWxsIHNlZSB0 aGUgcmlnaHQgdmFsdWVzLgorCSAqLworCWRybV9yZWN0X3RyYW5zbGF0ZV90bygmcGxhbmVfc3Rh dGUtPnVhcGkuc3JjLAorCQkJICAgICAgc3JjX3ggPDwgMTYsIHNyY195IDw8IDE2KTsKKworCS8q IEhTVy9CRFcgZG8gdGhpcyBhdXRvbWFnaWNhbGx5IGluIGhhcmR3YXJlICovCisJaWYgKCFJU19I QVNXRUxMKGRldl9wcml2KSAmJiAhSVNfQlJPQURXRUxMKGRldl9wcml2KSkgeworCQl1bnNpZ25l ZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+aHcucm90YXRpb247CisJCWludCBzcmNfdyA9 IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMpID4+IDE2OworCQlpbnQgc3Jj X2ggPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTY7CisKKwkJ aWYgKHJvdGF0aW9uICYgRFJNX01PREVfUk9UQVRFXzE4MCkgeworCQkJc3JjX3ggKz0gc3JjX3cg LSAxOworCQkJc3JjX3kgKz0gc3JjX2ggLSAxOworCQl9IGVsc2UgaWYgKHJvdGF0aW9uICYgRFJN X01PREVfUkVGTEVDVF9YKSB7CisJCQlzcmNfeCArPSBzcmNfdyAtIDE7CisJCX0KKwl9CisKKwlw bGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ub2Zmc2V0ID0gb2Zmc2V0OworCXBsYW5lX3N0YXRl LT5jb2xvcl9wbGFuZVswXS54ID0gc3JjX3g7CisJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBd LnkgPSBzcmNfeTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitpOXh4X3BsYW5lX2No ZWNrKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkgc3RydWN0IGludGVs X3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5l ID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUpOworCWludCByZXQ7CisK KwlyZXQgPSBjaHZfcGxhbmVfY2hlY2tfcm90YXRpb24ocGxhbmVfc3RhdGUpOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBpbnRlbF9hdG9taWNfcGxhbmVfY2hlY2tfY2xpcHBp bmcocGxhbmVfc3RhdGUsIGNydGNfc3RhdGUsCisJCQkJCQlEUk1fUExBTkVfSEVMUEVSX05PX1ND QUxJTkcsCisJCQkJCQlEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCisJCQkJCQlpOXh4X3Bs YW5lX2hhc193aW5kb3dpbmcocGxhbmUpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJ cmV0ID0gaTl4eF9jaGVja19wbGFuZV9zdXJmYWNlKHBsYW5lX3N0YXRlKTsKKwlpZiAocmV0KQor CQlyZXR1cm4gcmV0OworCisJaWYgKCFwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlKQorCQlyZXR1 cm4gMDsKKworCXJldCA9IGludGVsX3BsYW5lX2NoZWNrX3NyY19jb29yZGluYXRlcyhwbGFuZV9z dGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXBsYW5lX3N0YXRlLT5jdGwgPSBp OXh4X3BsYW5lX2N0bChjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIHUzMiBpOXh4X3BsYW5lX2N0bF9jcnRjKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlKQoreworCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50 ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBpLmNydGMpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOworCXUzMiBkc3BjbnRyID0gMDsK KworCWlmIChjcnRjX3N0YXRlLT5nYW1tYV9lbmFibGUpCisJCWRzcGNudHIgfD0gRElTUFBMQU5F X0dBTU1BX0VOQUJMRTsKKworCWlmIChjcnRjX3N0YXRlLT5jc2NfZW5hYmxlKQorCQlkc3BjbnRy IHw9IERJU1BQTEFORV9QSVBFX0NTQ19FTkFCTEU7CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA8IDUpCisJCWRzcGNudHIgfD0gRElTUFBMQU5FX1NFTF9QSVBFKGNydGMtPnBpcGUpOworCisJ cmV0dXJuIGRzcGNudHI7Cit9CisKK3N0YXRpYyB2b2lkIGk5eHhfcGxhbmVfcmF0aW8oY29uc3Qg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkgICAgIGNvbnN0IHN0cnVj dCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCisJCQkgICAgIHVuc2lnbmVkIGludCAq bnVtLCB1bnNpZ25lZCBpbnQgKmRlbikKK3sKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKKwl1bnNpZ25lZCBpbnQgY3BwID0gZmItPmZvcm1h dC0+Y3BwWzBdOworCisJLyoKKwkgKiBnNHggYnNwZWMgc2F5cyA2NGJwcCBwaXhlbCByYXRlIGNh bid0IGV4Y2VlZCA4MCUKKwkgKiBvZiBjZGNsayB3aGVuIHRoZSBzcHJpdGUgcGxhbmUgaXMgZW5h YmxlZCBvbiB0aGUKKwkgKiBzYW1lIHBpcGUuIGlsay9zbmIgYnNwZWMgc2F5cyA2NGJwcCBwaXhl bCByYXRlIGlzCisJICogbmV2ZXIgYWxsb3dlZCB0byBleGNlZWQgODAlIG9mIGNkY2xrLiBMZXQn cyBqdXN0IGdvCisJICogd2l0aCB0aGUgaWxrL3NuYiBsaW1pdCBhbHdheXMuCisJICovCisJaWYg KGNwcCA9PSA4KSB7CisJCSpudW0gPSAxMDsKKwkJKmRlbiA9IDg7CisJfSBlbHNlIHsKKwkJKm51 bSA9IDE7CisJCSpkZW4gPSAxOworCX0KK30KKworc3RhdGljIGludCBpOXh4X3BsYW5lX21pbl9j ZGNsayhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCQljb25z dCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCXVuc2lnbmVkIGlu dCBwaXhlbF9yYXRlOworCXVuc2lnbmVkIGludCBudW0sIGRlbjsKKworCS8qCisJICogTm90ZSB0 aGF0IGNydGNfc3RhdGUtPnBpeGVsX3JhdGUgYWNjb3VudHMgZm9yIGJvdGgKKwkgKiBob3Jpem9u dGFsIGFuZCB2ZXJ0aWNhbCBwYW5lbCBmaXR0ZXIgZG93bnNjYWxpbmcgZmFjdG9ycy4KKwkgKiBQ cmUtSFNXIGJzcGVjIHRlbGxzIHVzIHRvIG9ubHkgY29uc2lkZXIgdGhlIGhvcml6b250YWwKKwkg KiBkb3duc2NhbGluZyBmYWN0b3IgaGVyZS4gV2UgaWdub3JlIHRoYXQgYW5kIGp1c3QgY29uc2lk ZXIKKwkgKiBib3RoIGZvciBzaW1wbGljaXR5LgorCSAqLworCXBpeGVsX3JhdGUgPSBjcnRjX3N0 YXRlLT5waXhlbF9yYXRlOworCisJaTl4eF9wbGFuZV9yYXRpbyhjcnRjX3N0YXRlLCBwbGFuZV9z dGF0ZSwgJm51bSwgJmRlbik7CisKKwkvKiB0d28gcGl4ZWxzIHBlciBjbG9jayB3aXRoIGRvdWJs ZSB3aWRlIHBpcGUgKi8KKwlpZiAoY3J0Y19zdGF0ZS0+ZG91YmxlX3dpZGUpCisJCWRlbiAqPSAy OworCisJcmV0dXJuIERJVl9ST1VORF9VUChwaXhlbF9yYXRlICogbnVtLCBkZW4pOworfQorCitz dGF0aWMgdm9pZCBpOXh4X3VwZGF0ZV9wbGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAor CQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkg ICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2 KTsKKwllbnVtIGk5eHhfcGxhbmVfaWQgaTl4eF9wbGFuZSA9IHBsYW5lLT5pOXh4X3BsYW5lOwor CXUzMiBsaW5lYXJfb2Zmc2V0OworCWludCB4ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBd Lng7CisJaW50IHkgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ueTsKKwlpbnQgY3J0Y194 ID0gcGxhbmVfc3RhdGUtPnVhcGkuZHN0LngxOworCWludCBjcnRjX3kgPSBwbGFuZV9zdGF0ZS0+ dWFwaS5kc3QueTE7CisJaW50IGNydGNfdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+ dWFwaS5kc3QpOworCWludCBjcnRjX2ggPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51 YXBpLmRzdCk7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwl1MzIgZHNwYWRkcl9vZmZzZXQ7 CisJdTMyIGRzcGNudHI7CisKKwlkc3BjbnRyID0gcGxhbmVfc3RhdGUtPmN0bCB8IGk5eHhfcGxh bmVfY3RsX2NydGMoY3J0Y19zdGF0ZSk7CisKKwlsaW5lYXJfb2Zmc2V0ID0gaW50ZWxfZmJfeHlf dG9fbGluZWFyKHgsIHksIHBsYW5lX3N0YXRlLCAwKTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDQpCisJCWRzcGFkZHJfb2Zmc2V0ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBd Lm9mZnNldDsKKwllbHNlCisJCWRzcGFkZHJfb2Zmc2V0ID0gbGluZWFyX29mZnNldDsKKworCXNw aW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKKworCWlu dGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BTVFJJREUoaTl4eF9wbGFuZSksCisJCQkgIHBs YW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5zdHJpZGUpOworCisJaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPCA0KSB7CisJCS8qCisJCSAqIFBMQU5FX0EgZG9lc24ndCBhY3R1YWxseSBoYXZlIGEg ZnVsbCB3aW5kb3cKKwkJICogZ2VuZXJhdG9yIGJ1dCBsZXQncyBhc3N1bWUgd2Ugc3RpbGwgbmVl ZCB0bworCQkgKiBwcm9ncmFtIHdoYXRldmVyIGlzIHRoZXJlLgorCQkgKi8KKwkJaW50ZWxfZGVf d3JpdGVfZncoZGV2X3ByaXYsIERTUFBPUyhpOXh4X3BsYW5lKSwKKwkJCQkgIChjcnRjX3kgPDwg MTYpIHwgY3J0Y194KTsKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUFNJWkUoaTl4 eF9wbGFuZSksCisJCQkJICAoKGNydGNfaCAtIDEpIDw8IDE2KSB8IChjcnRjX3cgLSAxKSk7CisJ fSBlbHNlIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSAmJiBpOXh4X3BsYW5lID09IFBMQU5F X0IpIHsKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBSSU1QT1MoaTl4eF9wbGFuZSks CisJCQkJICAoY3J0Y195IDw8IDE2KSB8IGNydGNfeCk7CisJCWludGVsX2RlX3dyaXRlX2Z3KGRl dl9wcml2LCBQUklNU0laRShpOXh4X3BsYW5lKSwKKwkJCQkgICgoY3J0Y19oIC0gMSkgPDwgMTYp IHwgKGNydGNfdyAtIDEpKTsKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBSSU1DTlNU QUxQSEEoaTl4eF9wbGFuZSksIDApOworCX0KKworCWlmIChJU19IQVNXRUxMKGRldl9wcml2KSB8 fCBJU19CUk9BRFdFTEwoZGV2X3ByaXYpKSB7CisJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2 LCBEU1BPRkZTRVQoaTl4eF9wbGFuZSksCisJCQkJICAoeSA8PCAxNikgfCB4KTsKKwl9IGVsc2Ug aWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkgeworCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZf cHJpdiwgRFNQTElOT0ZGKGk5eHhfcGxhbmUpLAorCQkJCSAgbGluZWFyX29mZnNldCk7CisJCWlu dGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BUSUxFT0ZGKGk5eHhfcGxhbmUpLAorCQkJCSAg KHkgPDwgMTYpIHwgeCk7CisJfQorCisJLyoKKwkgKiBUaGUgY29udHJvbCByZWdpc3RlciBzZWxm LWFybXMgaWYgdGhlIHBsYW5lIHdhcyBwcmV2aW91c2x5CisJICogZGlzYWJsZWQuIFRyeSB0byBt YWtlIHRoZSBwbGFuZSBlbmFibGUgYXRvbWljIGJ5IHdyaXRpbmcKKwkgKiB0aGUgY29udHJvbCBy ZWdpc3RlciBqdXN0IGJlZm9yZSB0aGUgc3VyZmFjZSByZWdpc3Rlci4KKwkgKi8KKwlpbnRlbF9k ZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQQ05UUihpOXh4X3BsYW5lKSwgZHNwY250cik7CisJaWYg KElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYs IERTUFNVUkYoaTl4eF9wbGFuZSksCisJCQkJICBpbnRlbF9wbGFuZV9nZ3R0X29mZnNldChwbGFu ZV9zdGF0ZSkgKyBkc3BhZGRyX29mZnNldCk7CisJZWxzZQorCQlpbnRlbF9kZV93cml0ZV9mdyhk ZXZfcHJpdiwgRFNQQUREUihpOXh4X3BsYW5lKSwKKwkJCQkgIGludGVsX3BsYW5lX2dndHRfb2Zm c2V0KHBsYW5lX3N0YXRlKSArIGRzcGFkZHJfb2Zmc2V0KTsKKworCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOworfQorCitzdGF0aWMgdm9p ZCBpOXh4X2Rpc2FibGVfcGxhbmUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKKwkJCSAgICAg ICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7CisJ ZW51bSBpOXh4X3BsYW5lX2lkIGk5eHhfcGxhbmUgPSBwbGFuZS0+aTl4eF9wbGFuZTsKKwl1bnNp Z25lZCBsb25nIGlycWZsYWdzOworCXUzMiBkc3BjbnRyOworCisJLyoKKwkgKiBEU1BDTlRSIHBp cGUgZ2FtbWEgZW5hYmxlIG9uIGc0eCsgYW5kIHBpcGUgY3NjCisJICogZW5hYmxlIG9uIGlsaysg YWZmZWN0IHRoZSBwaXBlIGJvdHRvbSBjb2xvciBhcworCSAqIHdlbGwsIHNvIHdlIG11c3QgY29u ZmlndXJlIHRoZW0gZXZlbiBpZiB0aGUgcGxhbmUKKwkgKiBpcyBkaXNhYmxlZC4KKwkgKgorCSAq IE9uIHByZS1nNHggdGhlcmUgaXMgbm8gd2F5IHRvIGdhbW1hIGNvcnJlY3QgdGhlCisJICogcGlw ZSBib3R0b20gY29sb3IgYnV0IHdlJ2xsIGtlZXAgb24gZG9pbmcgdGhpcworCSAqIGFueXdheSBz byB0aGF0IHRoZSBjcnRjIHN0YXRlIHJlYWRvdXQgd29ya3MgY29ycmVjdGx5LgorCSAqLworCWRz cGNudHIgPSBpOXh4X3BsYW5lX2N0bF9jcnRjKGNydGNfc3RhdGUpOworCisJc3Bpbl9sb2NrX2ly cXNhdmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOworCisJaW50ZWxfZGVfd3Jp dGVfZncoZGV2X3ByaXYsIERTUENOVFIoaTl4eF9wbGFuZSksIGRzcGNudHIpOworCWlmIChJTlRF TF9HRU4oZGV2X3ByaXYpID49IDQpCisJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BT VVJGKGk5eHhfcGxhbmUpLCAwKTsKKwllbHNlCisJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2 LCBEU1BBRERSKGk5eHhfcGxhbmUpLCAwKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRl dl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOworfQorCitzdGF0aWMgYm9vbCBpOXh4X3Bs YW5lX2dldF9od19zdGF0ZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAorCQkJCSAgICBlbnVt IHBpcGUgKnBpcGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShwbGFuZS0+YmFzZS5kZXYpOworCWVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4g cG93ZXJfZG9tYWluOworCWVudW0gaTl4eF9wbGFuZV9pZCBpOXh4X3BsYW5lID0gcGxhbmUtPmk5 eHhfcGxhbmU7CisJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7CisJYm9vbCByZXQ7CisJdTMyIHZh bDsKKworCS8qCisJICogTm90IDEwMCUgY29ycmVjdCBmb3IgcGxhbmVzIHRoYXQgY2FuIG1vdmUg YmV0d2VlbiBwaXBlcywKKwkgKiBidXQgdGhhdCdzIG9ubHkgdGhlIGNhc2UgZm9yIGdlbjItNCB3 aGljaCBkb24ndCBoYXZlIGFueQorCSAqIGRpc3BsYXkgcG93ZXIgd2VsbHMuCisJICovCisJcG93 ZXJfZG9tYWluID0gUE9XRVJfRE9NQUlOX1BJUEUocGxhbmUtPnBpcGUpOworCXdha2VyZWYgPSBp bnRlbF9kaXNwbGF5X3Bvd2VyX2dldF9pZl9lbmFibGVkKGRldl9wcml2LCBwb3dlcl9kb21haW4p OworCWlmICghd2FrZXJlZikKKwkJcmV0dXJuIGZhbHNlOworCisJdmFsID0gaW50ZWxfZGVfcmVh ZChkZXZfcHJpdiwgRFNQQ05UUihpOXh4X3BsYW5lKSk7CisKKwlyZXQgPSB2YWwgJiBESVNQTEFZ X1BMQU5FX0VOQUJMRTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDUpCisJCSpwaXBl ID0gcGxhbmUtPnBpcGU7CisJZWxzZQorCQkqcGlwZSA9ICh2YWwgJiBESVNQUExBTkVfU0VMX1BJ UEVfTUFTSykgPj4KKwkJCURJU1BQTEFORV9TRUxfUElQRV9TSElGVDsKKworCWludGVsX2Rpc3Bs YXlfcG93ZXJfcHV0KGRldl9wcml2LCBwb3dlcl9kb21haW4sIHdha2VyZWYpOworCisJcmV0dXJu IHJldDsKK30KKwordW5zaWduZWQgaW50CitpOXh4X3BsYW5lX21heF9zdHJpZGUoc3RydWN0IGlu dGVsX3BsYW5lICpwbGFuZSwKKwkJICAgICAgdTMyIHBpeGVsX2Zvcm1hdCwgdTY0IG1vZGlmaWVy LAorCQkgICAgICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCit7CisJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOworCisJaWYgKCFIQVNf R01DSChkZXZfcHJpdikpIHsKKwkJcmV0dXJuIDMyKjEwMjQ7CisJfSBlbHNlIGlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID49IDQpIHsKKwkJaWYgKG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9Y X1RJTEVEKQorCQkJcmV0dXJuIDE2KjEwMjQ7CisJCWVsc2UKKwkJCXJldHVybiAzMioxMDI0Owor CX0gZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAzKSB7CisJCWlmIChtb2RpZmllciA9 PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCkKKwkJCXJldHVybiA4KjEwMjQ7CisJCWVsc2UKKwkJ CXJldHVybiAxNioxMDI0OworCX0gZWxzZSB7CisJCWlmIChwbGFuZS0+aTl4eF9wbGFuZSA9PSBQ TEFORV9DKQorCQkJcmV0dXJuIDQqMTAyNDsKKwkJZWxzZQorCQkJcmV0dXJuIDgqMTAyNDsKKwl9 Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGk5NjVfcGxhbmVfZnVu Y3MgPSB7CisJLnVwZGF0ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwK KwkuZGlzYWJsZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCisJLmRl c3Ryb3kgPSBpbnRlbF9wbGFuZV9kZXN0cm95LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0g aW50ZWxfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGlu dGVsX3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCisJLmZvcm1hdF9tb2Rfc3VwcG9ydGVkID0gaTk2NV9w bGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt X3BsYW5lX2Z1bmNzIGk4eHhfcGxhbmVfZnVuY3MgPSB7CisJLnVwZGF0ZV9wbGFuZSA9IGRybV9h dG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwKKwkuZGlzYWJsZV9wbGFuZSA9IGRybV9hdG9taWNf aGVscGVyX2Rpc2FibGVfcGxhbmUsCisJLmRlc3Ryb3kgPSBpbnRlbF9wbGFuZV9kZXN0cm95LAor CS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gaW50ZWxfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAor CS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGludGVsX3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCisJLmZv cm1hdF9tb2Rfc3VwcG9ydGVkID0gaTh4eF9wbGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZCwKK307 CisKK3N0cnVjdCBpbnRlbF9wbGFuZSAqCitpbnRlbF9wcmltYXJ5X3BsYW5lX2NyZWF0ZShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlKQoreworCXN0cnVj dCBpbnRlbF9wbGFuZSAqcGxhbmU7CisJY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyAqcGxh bmVfZnVuY3M7CisJdW5zaWduZWQgaW50IHN1cHBvcnRlZF9yb3RhdGlvbnM7CisJY29uc3QgdTMy ICpmb3JtYXRzOworCWludCBudW1fZm9ybWF0czsKKwlpbnQgcmV0LCB6cG9zOworCisJaWYgKElO VEVMX0dFTihkZXZfcHJpdikgPj0gOSkKKwkJcmV0dXJuIHNrbF91bml2ZXJzYWxfcGxhbmVfY3Jl YXRlKGRldl9wcml2LCBwaXBlLAorCQkJCQkJICBQTEFORV9QUklNQVJZKTsKKworCXBsYW5lID0g aW50ZWxfcGxhbmVfYWxsb2MoKTsKKwlpZiAoSVNfRVJSKHBsYW5lKSkKKwkJcmV0dXJuIHBsYW5l OworCisJcGxhbmUtPnBpcGUgPSBwaXBlOworCS8qCisJICogT24gZ2VuMi8zIG9ubHkgcGxhbmUg QSBjYW4gZG8gRkJDLCBidXQgdGhlIHBhbmVsIGZpdHRlciBhbmQgTFZEUworCSAqIHBvcnQgaXMg aG9va2VkIHRvIHBpcGUgQi4gSGVuY2Ugd2Ugd2FudCBwbGFuZSBBIGZlZWRpbmcgcGlwZSBCLgor CSAqLworCWlmIChIQVNfRkJDKGRldl9wcml2KSAmJiBJTlRFTF9HRU4oZGV2X3ByaXYpIDwgNCAm JgorCSAgICBJTlRFTF9OVU1fUElQRVMoZGV2X3ByaXYpID09IDIpCisJCXBsYW5lLT5pOXh4X3Bs YW5lID0gKGVudW0gaTl4eF9wbGFuZV9pZCkgIXBpcGU7CisJZWxzZQorCQlwbGFuZS0+aTl4eF9w bGFuZSA9IChlbnVtIGk5eHhfcGxhbmVfaWQpIHBpcGU7CisJcGxhbmUtPmlkID0gUExBTkVfUFJJ TUFSWTsKKwlwbGFuZS0+ZnJvbnRidWZmZXJfYml0ID0gSU5URUxfRlJPTlRCVUZGRVIocGlwZSwg cGxhbmUtPmlkKTsKKworCXBsYW5lLT5oYXNfZmJjID0gaTl4eF9wbGFuZV9oYXNfZmJjKGRldl9w cml2LCBwbGFuZS0+aTl4eF9wbGFuZSk7CisJaWYgKHBsYW5lLT5oYXNfZmJjKSB7CisJCXN0cnVj dCBpbnRlbF9mYmMgKmZiYyA9ICZkZXZfcHJpdi0+ZmJjOworCisJCWZiYy0+cG9zc2libGVfZnJh bWVidWZmZXJfYml0cyB8PSBwbGFuZS0+ZnJvbnRidWZmZXJfYml0OworCX0KKworCWlmIChJU19W QUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSkgeworCQlmb3Jt YXRzID0gdmx2X3ByaW1hcnlfZm9ybWF0czsKKwkJbnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKHZs dl9wcmltYXJ5X2Zvcm1hdHMpOworCX0gZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0 KSB7CisJCS8qCisJCSAqIFdhRlAxNkdhbW1hRW5hYmxpbmc6aXZiCisJCSAqICJXb3JrYXJvdW5k IDogV2hlbiB1c2luZyB0aGUgNjQtYml0IGZvcm1hdCwgdGhlIHBsYW5lCisJCSAqICBvdXRwdXQg b24gZWFjaCBjb2xvciBjaGFubmVsIGhhcyBvbmUgcXVhcnRlciBhbXBsaXR1ZGUuCisJCSAqICBJ dCBjYW4gYmUgYnJvdWdodCB1cCB0byBmdWxsIGFtcGxpdHVkZSBieSB1c2luZyBwaXBlCisJCSAq ICBnYW1tYSBjb3JyZWN0aW9uIG9yIHBpcGUgY29sb3Igc3BhY2UgY29udmVyc2lvbiB0bworCQkg KiAgbXVsdGlwbHkgdGhlIHBsYW5lIG91dHB1dCBieSBmb3VyLiIKKwkJICoKKwkJICogVGhlcmUg aXMgbm8gZGVkaWNhdGVkIHBsYW5lIGdhbW1hIGZvciB0aGUgcHJpbWFyeSBwbGFuZSwKKwkJICog YW5kIHVzaW5nIHRoZSBwaXBlIGdhbW1hL2NzYyBjb3VsZCBjb25mbGljdCB3aXRoIG90aGVyCisJ CSAqIHBsYW5lcywgc28gd2UgY2hvb3NlIG5vdCB0byBleHBvc2UgZnAxNiBvbiBJVkIgcHJpbWFy eQorCQkgKiBwbGFuZXMuIEhTVyBwcmltYXJ5IHBsYW5lcyBubyBsb25nZXIgaGF2ZSB0aGlzIHBy b2JsZW0uCisJCSAqLworCQlpZiAoSVNfSVZZQlJJREdFKGRldl9wcml2KSkgeworCQkJZm9ybWF0 cyA9IGl2Yl9wcmltYXJ5X2Zvcm1hdHM7CisJCQludW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoaXZi X3ByaW1hcnlfZm9ybWF0cyk7CisJCX0gZWxzZSB7CisJCQlmb3JtYXRzID0gaTk2NV9wcmltYXJ5 X2Zvcm1hdHM7CisJCQludW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoaTk2NV9wcmltYXJ5X2Zvcm1h dHMpOworCQl9CisJfSBlbHNlIHsKKwkJZm9ybWF0cyA9IGk4eHhfcHJpbWFyeV9mb3JtYXRzOwor CQludW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoaTh4eF9wcmltYXJ5X2Zvcm1hdHMpOworCX0KKwor CWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpCisJCXBsYW5lX2Z1bmNzID0gJmk5NjVfcGxh bmVfZnVuY3M7CisJZWxzZQorCQlwbGFuZV9mdW5jcyA9ICZpOHh4X3BsYW5lX2Z1bmNzOworCisJ aWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQor CQlwbGFuZS0+bWluX2NkY2xrID0gdmx2X3BsYW5lX21pbl9jZGNsazsKKwllbHNlIGlmIChJU19C Uk9BRFdFTEwoZGV2X3ByaXYpIHx8IElTX0hBU1dFTEwoZGV2X3ByaXYpKQorCQlwbGFuZS0+bWlu X2NkY2xrID0gaHN3X3BsYW5lX21pbl9jZGNsazsKKwllbHNlIGlmIChJU19JVllCUklER0UoZGV2 X3ByaXYpKQorCQlwbGFuZS0+bWluX2NkY2xrID0gaXZiX3BsYW5lX21pbl9jZGNsazsKKwllbHNl CisJCXBsYW5lLT5taW5fY2RjbGsgPSBpOXh4X3BsYW5lX21pbl9jZGNsazsKKworCXBsYW5lLT5t YXhfc3RyaWRlID0gaTl4eF9wbGFuZV9tYXhfc3RyaWRlOworCXBsYW5lLT51cGRhdGVfcGxhbmUg PSBpOXh4X3VwZGF0ZV9wbGFuZTsKKwlwbGFuZS0+ZGlzYWJsZV9wbGFuZSA9IGk5eHhfZGlzYWJs ZV9wbGFuZTsKKwlwbGFuZS0+Z2V0X2h3X3N0YXRlID0gaTl4eF9wbGFuZV9nZXRfaHdfc3RhdGU7 CisJcGxhbmUtPmNoZWNrX3BsYW5lID0gaTl4eF9wbGFuZV9jaGVjazsKKworCWlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID49IDUgfHwgSVNfRzRYKGRldl9wcml2KSkKKwkJcmV0ID0gZHJtX3VuaXZl cnNhbF9wbGFuZV9pbml0KCZkZXZfcHJpdi0+ZHJtLCAmcGxhbmUtPmJhc2UsCisJCQkJCSAgICAg ICAwLCBwbGFuZV9mdW5jcywKKwkJCQkJICAgICAgIGZvcm1hdHMsIG51bV9mb3JtYXRzLAorCQkJ CQkgICAgICAgaTl4eF9mb3JtYXRfbW9kaWZpZXJzLAorCQkJCQkgICAgICAgRFJNX1BMQU5FX1RZ UEVfUFJJTUFSWSwKKwkJCQkJICAgICAgICJwcmltYXJ5ICVjIiwgcGlwZV9uYW1lKHBpcGUpKTsK KwllbHNlCisJCXJldCA9IGRybV91bml2ZXJzYWxfcGxhbmVfaW5pdCgmZGV2X3ByaXYtPmRybSwg JnBsYW5lLT5iYXNlLAorCQkJCQkgICAgICAgMCwgcGxhbmVfZnVuY3MsCisJCQkJCSAgICAgICBm b3JtYXRzLCBudW1fZm9ybWF0cywKKwkJCQkJICAgICAgIGk5eHhfZm9ybWF0X21vZGlmaWVycywK KwkJCQkJICAgICAgIERSTV9QTEFORV9UWVBFX1BSSU1BUlksCisJCQkJCSAgICAgICAicGxhbmUg JWMiLAorCQkJCQkgICAgICAgcGxhbmVfbmFtZShwbGFuZS0+aTl4eF9wbGFuZSkpOworCWlmIChy ZXQpCisJCWdvdG8gZmFpbDsKKworCWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSAmJiBwaXBl ID09IFBJUEVfQikgeworCQlzdXBwb3J0ZWRfcm90YXRpb25zID0KKwkJCURSTV9NT0RFX1JPVEFU RV8wIHwgRFJNX01PREVfUk9UQVRFXzE4MCB8CisJCQlEUk1fTU9ERV9SRUZMRUNUX1g7CisJfSBl bHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpIHsKKwkJc3VwcG9ydGVkX3JvdGF0aW9u cyA9CisJCQlEUk1fTU9ERV9ST1RBVEVfMCB8IERSTV9NT0RFX1JPVEFURV8xODA7CisJfSBlbHNl IHsKKwkJc3VwcG9ydGVkX3JvdGF0aW9ucyA9IERSTV9NT0RFX1JPVEFURV8wOworCX0KKworCWlm IChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpCisJCWRybV9wbGFuZV9jcmVhdGVfcm90YXRpb25f cHJvcGVydHkoJnBsYW5lLT5iYXNlLAorCQkJCQkJICAgRFJNX01PREVfUk9UQVRFXzAsCisJCQkJ CQkgICBzdXBwb3J0ZWRfcm90YXRpb25zKTsKKworCXpwb3MgPSAwOworCWRybV9wbGFuZV9jcmVh dGVfenBvc19pbW11dGFibGVfcHJvcGVydHkoJnBsYW5lLT5iYXNlLCB6cG9zKTsKKworCWRybV9w bGFuZV9oZWxwZXJfYWRkKCZwbGFuZS0+YmFzZSwgJmludGVsX3BsYW5lX2hlbHBlcl9mdW5jcyk7 CisKKwlyZXR1cm4gcGxhbmU7CisKK2ZhaWw6CisJaW50ZWxfcGxhbmVfZnJlZShwbGFuZSk7CisK KwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2k5eHhfcGxhbmUuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aTl4eF9wbGFuZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYTNh MGUzNjBkYTRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pOXh4X3BsYW5lLmgKQEAgLTAsMCArMSwyMSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IE1JVCAqLworLyoKKyAqIENvcHlyaWdodCDCqSAyMDIwIEludGVsIENvcnBvcmF0aW9uCisg Ki8KKworI2lmbmRlZiBfSTlYWF9QTEFORV9IXworI2RlZmluZSBfSTlYWF9QTEFORV9IXworCitl bnVtIHBpcGU7CitzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZTsKK3N0cnVjdCBpbnRlbF9wbGFuZTsK KwordW5zaWduZWQgaW50IGk5eHhfcGxhbmVfbWF4X3N0cmlkZShzdHJ1Y3QgaW50ZWxfcGxhbmUg KnBsYW5lLAorCQkJCSAgIHUzMiBwaXhlbF9mb3JtYXQsIHU2NCBtb2RpZmllciwKKwkJCQkgICB1 bnNpZ25lZCBpbnQgcm90YXRpb24pOworaW50IGk5eHhfY2hlY2tfcGxhbmVfc3VyZmFjZShzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsKKworc3RydWN0IGludGVsX3BsYW5l ICoKK2ludGVsX3ByaW1hcnlfcGxhbmVfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggMjg4NTU4NDRmOGRlLi4xNGU3MTRmYjNi NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxh eS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCkBA IC04Nyw1NiArODcsNyBAQAogI2luY2x1ZGUgImludGVsX3Nwcml0ZS5oIgogI2luY2x1ZGUgImlu dGVsX3RjLmgiCiAjaW5jbHVkZSAiaW50ZWxfdmdhLmgiCi0KLS8qIFByaW1hcnkgcGxhbmUgZm9y bWF0cyBmb3IgZ2VuIDw9IDMgKi8KLXN0YXRpYyBjb25zdCB1MzIgaTh4eF9wcmltYXJ5X2Zvcm1h dHNbXSA9IHsKLQlEUk1fRk9STUFUX0M4LAotCURSTV9GT1JNQVRfWFJHQjE1NTUsCi0JRFJNX0ZP Uk1BVF9SR0I1NjUsCi0JRFJNX0ZPUk1BVF9YUkdCODg4OCwKLX07Ci0KLS8qIFByaW1hcnkgcGxh bmUgZm9ybWF0cyBmb3IgaXZiIChubyBmcDE2IGR1ZSB0byBodyBpc3N1ZSkgKi8KLXN0YXRpYyBj b25zdCB1MzIgaXZiX3ByaW1hcnlfZm9ybWF0c1tdID0gewotCURSTV9GT1JNQVRfQzgsCi0JRFJN X0ZPUk1BVF9SR0I1NjUsCi0JRFJNX0ZPUk1BVF9YUkdCODg4OCwKLQlEUk1fRk9STUFUX1hCR1I4 ODg4LAotCURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCi0JRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwK LX07Ci0KLS8qIFByaW1hcnkgcGxhbmUgZm9ybWF0cyBmb3IgZ2VuID49IDQsIGV4Y2VwdCBpdmIg Ki8KLXN0YXRpYyBjb25zdCB1MzIgaTk2NV9wcmltYXJ5X2Zvcm1hdHNbXSA9IHsKLQlEUk1fRk9S TUFUX0M4LAotCURSTV9GT1JNQVRfUkdCNTY1LAotCURSTV9GT1JNQVRfWFJHQjg4ODgsCi0JRFJN X0ZPUk1BVF9YQkdSODg4OCwKLQlEUk1fRk9STUFUX1hSR0IyMTAxMDEwLAotCURSTV9GT1JNQVRf WEJHUjIxMDEwMTAsCi0JRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGLAotfTsKLQotLyogUHJpbWFy eSBwbGFuZSBmb3JtYXRzIGZvciB2bHYvY2h2ICovCi1zdGF0aWMgY29uc3QgdTMyIHZsdl9wcmlt YXJ5X2Zvcm1hdHNbXSA9IHsKLQlEUk1fRk9STUFUX0M4LAotCURSTV9GT1JNQVRfUkdCNTY1LAot CURSTV9GT1JNQVRfWFJHQjg4ODgsCi0JRFJNX0ZPUk1BVF9YQkdSODg4OCwKLQlEUk1fRk9STUFU X0FSR0I4ODg4LAotCURSTV9GT1JNQVRfQUJHUjg4ODgsCi0JRFJNX0ZPUk1BVF9YUkdCMjEwMTAx MCwKLQlEUk1fRk9STUFUX1hCR1IyMTAxMDEwLAotCURSTV9GT1JNQVRfQVJHQjIxMDEwMTAsCi0J RFJNX0ZPUk1BVF9BQkdSMjEwMTAxMCwKLQlEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkYsCi19Owot Ci1zdGF0aWMgY29uc3QgdTY0IGk5eHhfZm9ybWF0X21vZGlmaWVyc1tdID0gewotCUk5MTVfRk9S TUFUX01PRF9YX1RJTEVELAotCURSTV9GT1JNQVRfTU9EX0xJTkVBUiwKLQlEUk1fRk9STUFUX01P RF9JTlZBTElECi19OworI2luY2x1ZGUgImk5eHhfcGxhbmUuaCIKIAogc3RhdGljIHZvaWQgaTl4 eF9jcnRjX2Nsb2NrX2dldChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKIAkJCQlzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpOwpAQCAtNDA0Nyw0MjIgKzM5OTgsNiBAQCBpbnQg c2tsX2NoZWNrX3BsYW5lX3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaTl4eF9wbGFuZV9yYXRpbyhjb25z dCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJCSAgICAgY29uc3Qgc3Ry dWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKLQkJCSAgICAgdW5zaWduZWQgaW50 ICpudW0sIHVuc2lnbmVkIGludCAqZGVuKQotewotCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCXVuc2lnbmVkIGludCBjcHAgPSBmYi0+Zm9y bWF0LT5jcHBbMF07Ci0KLQkvKgotCSAqIGc0eCBic3BlYyBzYXlzIDY0YnBwIHBpeGVsIHJhdGUg Y2FuJ3QgZXhjZWVkIDgwJQotCSAqIG9mIGNkY2xrIHdoZW4gdGhlIHNwcml0ZSBwbGFuZSBpcyBl bmFibGVkIG9uIHRoZQotCSAqIHNhbWUgcGlwZS4gaWxrL3NuYiBic3BlYyBzYXlzIDY0YnBwIHBp eGVsIHJhdGUgaXMKLQkgKiBuZXZlciBhbGxvd2VkIHRvIGV4Y2VlZCA4MCUgb2YgY2RjbGsuIExl dCdzIGp1c3QgZ28KLQkgKiB3aXRoIHRoZSBpbGsvc25iIGxpbWl0IGFsd2F5cy4KLQkgKi8KLQlp ZiAoY3BwID09IDgpIHsKLQkJKm51bSA9IDEwOwotCQkqZGVuID0gODsKLQl9IGVsc2UgewotCQkq bnVtID0gMTsKLQkJKmRlbiA9IDE7Ci0JfQotfQotCi1zdGF0aWMgaW50IGk5eHhfcGxhbmVfbWlu X2NkY2xrKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkJCWNv bnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0JdW5zaWduZWQg aW50IHBpeGVsX3JhdGU7Ci0JdW5zaWduZWQgaW50IG51bSwgZGVuOwotCi0JLyoKLQkgKiBOb3Rl IHRoYXQgY3J0Y19zdGF0ZS0+cGl4ZWxfcmF0ZSBhY2NvdW50cyBmb3IgYm90aAotCSAqIGhvcml6 b250YWwgYW5kIHZlcnRpY2FsIHBhbmVsIGZpdHRlciBkb3duc2NhbGluZyBmYWN0b3JzLgotCSAq IFByZS1IU1cgYnNwZWMgdGVsbHMgdXMgdG8gb25seSBjb25zaWRlciB0aGUgaG9yaXpvbnRhbAot CSAqIGRvd25zY2FsaW5nIGZhY3RvciBoZXJlLiBXZSBpZ25vcmUgdGhhdCBhbmQganVzdCBjb25z aWRlcgotCSAqIGJvdGggZm9yIHNpbXBsaWNpdHkuCi0JICovCi0JcGl4ZWxfcmF0ZSA9IGNydGNf c3RhdGUtPnBpeGVsX3JhdGU7Ci0KLQlpOXh4X3BsYW5lX3JhdGlvKGNydGNfc3RhdGUsIHBsYW5l X3N0YXRlLCAmbnVtLCAmZGVuKTsKLQotCS8qIHR3byBwaXhlbHMgcGVyIGNsb2NrIHdpdGggZG91 YmxlIHdpZGUgcGlwZSAqLwotCWlmIChjcnRjX3N0YXRlLT5kb3VibGVfd2lkZSkKLQkJZGVuICo9 IDI7Ci0KLQlyZXR1cm4gRElWX1JPVU5EX1VQKHBpeGVsX3JhdGUgKiBudW0sIGRlbik7Ci19Ci0K LXVuc2lnbmVkIGludAotaTl4eF9wbGFuZV9tYXhfc3RyaWRlKHN0cnVjdCBpbnRlbF9wbGFuZSAq cGxhbmUsCi0JCSAgICAgIHUzMiBwaXhlbF9mb3JtYXQsIHU2NCBtb2RpZmllciwKLQkJICAgICAg dW5zaWduZWQgaW50IHJvdGF0aW9uKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKLQotCWlmICghSEFTX0dNQ0goZGV2X3By aXYpKSB7Ci0JCXJldHVybiAzMioxMDI0OwotCX0gZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA+PSA0KSB7Ci0JCWlmIChtb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCkKLQkJ CXJldHVybiAxNioxMDI0OwotCQllbHNlCi0JCQlyZXR1cm4gMzIqMTAyNDsKLQl9IGVsc2UgaWYg KElOVEVMX0dFTihkZXZfcHJpdikgPj0gMykgewotCQlpZiAobW9kaWZpZXIgPT0gSTkxNV9GT1JN QVRfTU9EX1hfVElMRUQpCi0JCQlyZXR1cm4gOCoxMDI0OwotCQllbHNlCi0JCQlyZXR1cm4gMTYq MTAyNDsKLQl9IGVsc2UgewotCQlpZiAocGxhbmUtPmk5eHhfcGxhbmUgPT0gUExBTkVfQykKLQkJ CXJldHVybiA0KjEwMjQ7Ci0JCWVsc2UKLQkJCXJldHVybiA4KjEwMjQ7Ci0JfQotfQotCi1zdGF0 aWMgdTMyIGk5eHhfcGxhbmVfY3RsX2NydGMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUpCi17Ci0Jc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRj KGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7Ci0JdTMyIGRzcGNudHIgPSAwOwotCi0JaWYg KGNydGNfc3RhdGUtPmdhbW1hX2VuYWJsZSkKLQkJZHNwY250ciB8PSBESVNQUExBTkVfR0FNTUFf RU5BQkxFOwotCi0JaWYgKGNydGNfc3RhdGUtPmNzY19lbmFibGUpCi0JCWRzcGNudHIgfD0gRElT UFBMQU5FX1BJUEVfQ1NDX0VOQUJMRTsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgNSkK LQkJZHNwY250ciB8PSBESVNQUExBTkVfU0VMX1BJUEUoY3J0Yy0+cGlwZSk7Ci0KLQlyZXR1cm4g ZHNwY250cjsKLX0KLQotc3RhdGljIHUzMiBpOXh4X3BsYW5lX2N0bChjb25zdCBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJCSAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5l X3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPQotCQl0b19pOTE1KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOwotCWNvbnN0IHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCXVuc2lnbmVk IGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbjsKLQl1MzIgZHNwY250cjsK LQotCWRzcGNudHIgPSBESVNQTEFZX1BMQU5FX0VOQUJMRTsKLQotCWlmIChJU19HNFgoZGV2X3By aXYpIHx8IElTX0dFTihkZXZfcHJpdiwgNSkgfHwKLQkgICAgSVNfR0VOKGRldl9wcml2LCA2KSB8 fCBJU19JVllCUklER0UoZGV2X3ByaXYpKQotCQlkc3BjbnRyIHw9IERJU1BQTEFORV9UUklDS0xF X0ZFRURfRElTQUJMRTsKLQotCXN3aXRjaCAoZmItPmZvcm1hdC0+Zm9ybWF0KSB7Ci0JY2FzZSBE Uk1fRk9STUFUX0M4OgotCQlkc3BjbnRyIHw9IERJU1BQTEFORV84QlBQOwotCQlicmVhazsKLQlj YXNlIERSTV9GT1JNQVRfWFJHQjE1NTU6Ci0JCWRzcGNudHIgfD0gRElTUFBMQU5FX0JHUlg1NTU7 Ci0JCWJyZWFrOwotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTU1NToKLQkJZHNwY250ciB8PSBESVNQ UExBTkVfQkdSQTU1NTsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKLQkJZHNw Y250ciB8PSBESVNQUExBTkVfQkdSWDU2NTsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFUX1hS R0I4ODg4OgotCQlkc3BjbnRyIHw9IERJU1BQTEFORV9CR1JYODg4OwotCQlicmVhazsKLQljYXNl IERSTV9GT1JNQVRfWEJHUjg4ODg6Ci0JCWRzcGNudHIgfD0gRElTUFBMQU5FX1JHQlg4ODg7Ci0J CWJyZWFrOwotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKLQkJZHNwY250ciB8PSBESVNQUExB TkVfQkdSQTg4ODsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4OgotCQlkc3Bj bnRyIHw9IERJU1BQTEFORV9SR0JBODg4OwotCQlicmVhazsKLQljYXNlIERSTV9GT1JNQVRfWFJH QjIxMDEwMTA6Ci0JCWRzcGNudHIgfD0gRElTUFBMQU5FX0JHUlgxMDEwMTA7Ci0JCWJyZWFrOwot CWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoKLQkJZHNwY250ciB8PSBESVNQUExBTkVfUkdC WDEwMTAxMDsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFUX0FSR0IyMTAxMDEwOgotCQlkc3Bj bnRyIHw9IERJU1BQTEFORV9CR1JBMTAxMDEwOwotCQlicmVhazsKLQljYXNlIERSTV9GT1JNQVRf QUJHUjIxMDEwMTA6Ci0JCWRzcGNudHIgfD0gRElTUFBMQU5FX1JHQkExMDEwMTA7Ci0JCWJyZWFr OwotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGOgotCQlkc3BjbnRyIHw9IERJU1BQTEFO RV9SR0JYMTYxNjE2OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlNSVNTSU5HX0NBU0UoZmItPmZv cm1hdC0+Zm9ybWF0KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJp dikgPj0gNCAmJgotCSAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQp Ci0JCWRzcGNudHIgfD0gRElTUFBMQU5FX1RJTEVEOwotCi0JaWYgKHJvdGF0aW9uICYgRFJNX01P REVfUk9UQVRFXzE4MCkKLQkJZHNwY250ciB8PSBESVNQUExBTkVfUk9UQVRFXzE4MDsKLQotCWlm IChyb3RhdGlvbiAmIERSTV9NT0RFX1JFRkxFQ1RfWCkKLQkJZHNwY250ciB8PSBESVNQUExBTkVf TUlSUk9SOwotCi0JcmV0dXJuIGRzcGNudHI7Ci19Ci0KLWludCBpOXh4X2NoZWNrX3BsYW5lX3N1 cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQotCQl0b19pOTE1KHBsYW5lX3N0YXRlLT51YXBp LnBsYW5lLT5kZXYpOwotCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVf c3RhdGUtPmh3LmZiOwotCWludCBzcmNfeCwgc3JjX3ksIHNyY193OwotCXUzMiBvZmZzZXQ7Ci0J aW50IHJldDsKLQotCXJldCA9IGludGVsX3BsYW5lX2NvbXB1dGVfZ3R0KHBsYW5lX3N0YXRlKTsK LQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKCFwbGFuZV9zdGF0ZS0+dWFwaS52aXNp YmxlKQotCQlyZXR1cm4gMDsKLQotCXNyY193ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRl LT51YXBpLnNyYykgPj4gMTY7Ci0Jc3JjX3ggPSBwbGFuZV9zdGF0ZS0+dWFwaS5zcmMueDEgPj4g MTY7Ci0Jc3JjX3kgPSBwbGFuZV9zdGF0ZS0+dWFwaS5zcmMueTEgPj4gMTY7Ci0KLQkvKiBVbmRv Y3VtZW50ZWQgaGFyZHdhcmUgbGltaXQgb24gaTk2NS9nNHgvdmx2L2NodiAqLwotCWlmIChIQVNf R01DSChkZXZfcHJpdikgJiYgZmItPmZvcm1hdC0+Y3BwWzBdID09IDggJiYgc3JjX3cgPiAyMDQ4 KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWludGVsX2FkZF9mYl9vZmZzZXRzKCZzcmNfeCwgJnNy Y195LCBwbGFuZV9zdGF0ZSwgMCk7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0KQot CQlvZmZzZXQgPSBpbnRlbF9wbGFuZV9jb21wdXRlX2FsaWduZWRfb2Zmc2V0KCZzcmNfeCwgJnNy Y195LAotCQkJCQkJCSAgICBwbGFuZV9zdGF0ZSwgMCk7Ci0JZWxzZQotCQlvZmZzZXQgPSAwOwot Ci0JLyoKLQkgKiBQdXQgdGhlIGZpbmFsIGNvb3JkaW5hdGVzIGJhY2sgc28gdGhhdCB0aGUgc3Jj Ci0JICogY29vcmRpbmF0ZSBjaGVja3Mgd2lsbCBzZWUgdGhlIHJpZ2h0IHZhbHVlcy4KLQkgKi8K LQlkcm1fcmVjdF90cmFuc2xhdGVfdG8oJnBsYW5lX3N0YXRlLT51YXBpLnNyYywKLQkJCSAgICAg IHNyY194IDw8IDE2LCBzcmNfeSA8PCAxNik7Ci0KLQkvKiBIU1cvQkRXIGRvIHRoaXMgYXV0b21h Z2ljYWxseSBpbiBoYXJkd2FyZSAqLwotCWlmICghSVNfSEFTV0VMTChkZXZfcHJpdikgJiYgIUlT X0JST0FEV0VMTChkZXZfcHJpdikpIHsKLQkJdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVf c3RhdGUtPmh3LnJvdGF0aW9uOwotCQlpbnQgc3JjX3cgPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVf c3RhdGUtPnVhcGkuc3JjKSA+PiAxNjsKLQkJaW50IHNyY19oID0gZHJtX3JlY3RfaGVpZ2h0KCZw bGFuZV9zdGF0ZS0+dWFwaS5zcmMpID4+IDE2OwotCi0JCWlmIChyb3RhdGlvbiAmIERSTV9NT0RF X1JPVEFURV8xODApIHsKLQkJCXNyY194ICs9IHNyY193IC0gMTsKLQkJCXNyY195ICs9IHNyY19o IC0gMTsKLQkJfSBlbHNlIGlmIChyb3RhdGlvbiAmIERSTV9NT0RFX1JFRkxFQ1RfWCkgewotCQkJ c3JjX3ggKz0gc3JjX3cgLSAxOwotCQl9Ci0JfQotCi0JcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5l WzBdLm9mZnNldCA9IG9mZnNldDsKLQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ueCA9IHNy Y194OwotCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS55ID0gc3JjX3k7Ci0KLQlyZXR1cm4g MDsKLX0KLQotc3RhdGljIGJvb2wgaTl4eF9wbGFuZV9oYXNfd2luZG93aW5nKHN0cnVjdCBpbnRl bF9wbGFuZSAqcGxhbmUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g dG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwotCWVudW0gaTl4eF9wbGFuZV9pZCBpOXh4X3BsYW5l ID0gcGxhbmUtPmk5eHhfcGxhbmU7Ci0KLQlpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCi0J CXJldHVybiBpOXh4X3BsYW5lID09IFBMQU5FX0I7Ci0JZWxzZSBpZiAoSU5URUxfR0VOKGRldl9w cml2KSA+PSA1IHx8IElTX0c0WChkZXZfcHJpdikpCi0JCXJldHVybiBmYWxzZTsKLQllbHNlIGlm IChJU19HRU4oZGV2X3ByaXYsIDQpKQotCQlyZXR1cm4gaTl4eF9wbGFuZSA9PSBQTEFORV9DOwot CWVsc2UKLQkJcmV0dXJuIGk5eHhfcGxhbmUgPT0gUExBTkVfQiB8fAotCQkJaTl4eF9wbGFuZSA9 PSBQTEFORV9DOwotfQotCi1zdGF0aWMgaW50Ci1pOXh4X3BsYW5lX2NoZWNrKHN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpw bGFuZV9zdGF0ZSkKLXsKLQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxh bmUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUpOwotCWludCByZXQ7Ci0KLQlyZXQgPSBjaHZfcGxh bmVfY2hlY2tfcm90YXRpb24ocGxhbmVfc3RhdGUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7 Ci0KLQlyZXQgPSBpbnRlbF9hdG9taWNfcGxhbmVfY2hlY2tfY2xpcHBpbmcocGxhbmVfc3RhdGUs IGNydGNfc3RhdGUsCi0JCQkJCQlEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCi0JCQkJCQlE Uk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCi0JCQkJCQlpOXh4X3BsYW5lX2hhc193aW5kb3dp bmcocGxhbmUpKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gaTl4eF9jaGVj a19wbGFuZV9zdXJmYWNlKHBsYW5lX3N0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0Owot Ci0JaWYgKCFwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlKQotCQlyZXR1cm4gMDsKLQotCXJldCA9 IGludGVsX3BsYW5lX2NoZWNrX3NyY19jb29yZGluYXRlcyhwbGFuZV9zdGF0ZSk7Ci0JaWYgKHJl dCkKLQkJcmV0dXJuIHJldDsKLQotCXBsYW5lX3N0YXRlLT5jdGwgPSBpOXh4X3BsYW5lX2N0bChj cnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQg aTl4eF91cGRhdGVfcGxhbmUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKLQkJCSAgICAgIGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkJICAgICAgY29uc3Qg c3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Ci0JZW51bSBp OXh4X3BsYW5lX2lkIGk5eHhfcGxhbmUgPSBwbGFuZS0+aTl4eF9wbGFuZTsKLQl1MzIgbGluZWFy X29mZnNldDsKLQlpbnQgeCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS54OwotCWludCB5 ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnk7Ci0JaW50IGNydGNfeCA9IHBsYW5lX3N0 YXRlLT51YXBpLmRzdC54MTsKLQlpbnQgY3J0Y195ID0gcGxhbmVfc3RhdGUtPnVhcGkuZHN0Lnkx OwotCWludCBjcnRjX3cgPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsK LQlpbnQgY3J0Y19oID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOwot CXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7Ci0JdTMyIGRzcGFkZHJfb2Zmc2V0OwotCXUzMiBkc3Bj bnRyOwotCi0JZHNwY250ciA9IHBsYW5lX3N0YXRlLT5jdGwgfCBpOXh4X3BsYW5lX2N0bF9jcnRj KGNydGNfc3RhdGUpOwotCi0JbGluZWFyX29mZnNldCA9IGludGVsX2ZiX3h5X3RvX2xpbmVhcih4 LCB5LCBwbGFuZV9zdGF0ZSwgMCk7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0KQot CQlkc3BhZGRyX29mZnNldCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5vZmZzZXQ7Ci0J ZWxzZQotCQlkc3BhZGRyX29mZnNldCA9IGxpbmVhcl9vZmZzZXQ7Ci0KLQlzcGluX2xvY2tfaXJx c2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Ci0KLQlpbnRlbF9kZV93cml0 ZV9mdyhkZXZfcHJpdiwgRFNQU1RSSURFKGk5eHhfcGxhbmUpLAotCQkJICBwbGFuZV9zdGF0ZS0+ Y29sb3JfcGxhbmVbMF0uc3RyaWRlKTsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgNCkg ewotCQkvKgotCQkgKiBQTEFORV9BIGRvZXNuJ3QgYWN0dWFsbHkgaGF2ZSBhIGZ1bGwgd2luZG93 Ci0JCSAqIGdlbmVyYXRvciBidXQgbGV0J3MgYXNzdW1lIHdlIHN0aWxsIG5lZWQgdG8KLQkJICog cHJvZ3JhbSB3aGF0ZXZlciBpcyB0aGVyZS4KLQkJICovCi0JCWludGVsX2RlX3dyaXRlX2Z3KGRl dl9wcml2LCBEU1BQT1MoaTl4eF9wbGFuZSksCi0JCQkJICAoY3J0Y195IDw8IDE2KSB8IGNydGNf eCk7Ci0JCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BTSVpFKGk5eHhfcGxhbmUpLAot CQkJCSAgKChjcnRjX2ggLSAxKSA8PCAxNikgfCAoY3J0Y193IC0gMSkpOwotCX0gZWxzZSBpZiAo SVNfQ0hFUlJZVklFVyhkZXZfcHJpdikgJiYgaTl4eF9wbGFuZSA9PSBQTEFORV9CKSB7Ci0JCWlu dGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQUklNUE9TKGk5eHhfcGxhbmUpLAotCQkJCSAgKGNy dGNfeSA8PCAxNikgfCBjcnRjX3gpOwotCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUFJJ TVNJWkUoaTl4eF9wbGFuZSksCi0JCQkJICAoKGNydGNfaCAtIDEpIDw8IDE2KSB8IChjcnRjX3cg LSAxKSk7Ci0JCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQUklNQ05TVEFMUEhBKGk5eHhf cGxhbmUpLCAwKTsKLQl9Ci0KLQlpZiAoSVNfSEFTV0VMTChkZXZfcHJpdikgfHwgSVNfQlJPQURX RUxMKGRldl9wcml2KSkgewotCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQT0ZGU0VU KGk5eHhfcGxhbmUpLAotCQkJCSAgKHkgPDwgMTYpIHwgeCk7Ci0JfSBlbHNlIGlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID49IDQpIHsKLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUExJ Tk9GRihpOXh4X3BsYW5lKSwKLQkJCQkgIGxpbmVhcl9vZmZzZXQpOwotCQlpbnRlbF9kZV93cml0 ZV9mdyhkZXZfcHJpdiwgRFNQVElMRU9GRihpOXh4X3BsYW5lKSwKLQkJCQkgICh5IDw8IDE2KSB8 IHgpOwotCX0KLQotCS8qCi0JICogVGhlIGNvbnRyb2wgcmVnaXN0ZXIgc2VsZi1hcm1zIGlmIHRo ZSBwbGFuZSB3YXMgcHJldmlvdXNseQotCSAqIGRpc2FibGVkLiBUcnkgdG8gbWFrZSB0aGUgcGxh bmUgZW5hYmxlIGF0b21pYyBieSB3cml0aW5nCi0JICogdGhlIGNvbnRyb2wgcmVnaXN0ZXIganVz dCBiZWZvcmUgdGhlIHN1cmZhY2UgcmVnaXN0ZXIuCi0JICovCi0JaW50ZWxfZGVfd3JpdGVfZnco ZGV2X3ByaXYsIERTUENOVFIoaTl4eF9wbGFuZSksIGRzcGNudHIpOwotCWlmIChJTlRFTF9HRU4o ZGV2X3ByaXYpID49IDQpCi0JCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BTVVJGKGk5 eHhfcGxhbmUpLAotCQkJCSAgaW50ZWxfcGxhbmVfZ2d0dF9vZmZzZXQocGxhbmVfc3RhdGUpICsg ZHNwYWRkcl9vZmZzZXQpOwotCWVsc2UKLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERT UEFERFIoaTl4eF9wbGFuZSksCi0JCQkJICBpbnRlbF9wbGFuZV9nZ3R0X29mZnNldChwbGFuZV9z dGF0ZSkgKyBkc3BhZGRyX29mZnNldCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZf cHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgaTl4eF9kaXNh YmxlX3BsYW5lKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCi0JCQkgICAgICAgY29uc3Qgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwotCWVudW0gaTl4eF9w bGFuZV9pZCBpOXh4X3BsYW5lID0gcGxhbmUtPmk5eHhfcGxhbmU7Ci0JdW5zaWduZWQgbG9uZyBp cnFmbGFnczsKLQl1MzIgZHNwY250cjsKLQotCS8qCi0JICogRFNQQ05UUiBwaXBlIGdhbW1hIGVu YWJsZSBvbiBnNHgrIGFuZCBwaXBlIGNzYwotCSAqIGVuYWJsZSBvbiBpbGsrIGFmZmVjdCB0aGUg cGlwZSBib3R0b20gY29sb3IgYXMKLQkgKiB3ZWxsLCBzbyB3ZSBtdXN0IGNvbmZpZ3VyZSB0aGVt IGV2ZW4gaWYgdGhlIHBsYW5lCi0JICogaXMgZGlzYWJsZWQuCi0JICoKLQkgKiBPbiBwcmUtZzR4 IHRoZXJlIGlzIG5vIHdheSB0byBnYW1tYSBjb3JyZWN0IHRoZQotCSAqIHBpcGUgYm90dG9tIGNv bG9yIGJ1dCB3ZSdsbCBrZWVwIG9uIGRvaW5nIHRoaXMKLQkgKiBhbnl3YXkgc28gdGhhdCB0aGUg Y3J0YyBzdGF0ZSByZWFkb3V0IHdvcmtzIGNvcnJlY3RseS4KLQkgKi8KLQlkc3BjbnRyID0gaTl4 eF9wbGFuZV9jdGxfY3J0YyhjcnRjX3N0YXRlKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZf cHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKLQotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9w cml2LCBEU1BDTlRSKGk5eHhfcGxhbmUpLCBkc3BjbnRyKTsKLQlpZiAoSU5URUxfR0VOKGRldl9w cml2KSA+PSA0KQotCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQU1VSRihpOXh4X3Bs YW5lKSwgMCk7Ci0JZWxzZQotCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQQUREUihp OXh4X3BsYW5lKSwgMCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+dW5j b3JlLmxvY2ssIGlycWZsYWdzKTsKLX0KLQotc3RhdGljIGJvb2wgaTl4eF9wbGFuZV9nZXRfaHdf c3RhdGUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKLQkJCQkgICAgZW51bSBwaXBlICpwaXBl KQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUt PmJhc2UuZGV2KTsKLQllbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIHBvd2VyX2RvbWFp bjsKLQllbnVtIGk5eHhfcGxhbmVfaWQgaTl4eF9wbGFuZSA9IHBsYW5lLT5pOXh4X3BsYW5lOwot CWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwotCWJvb2wgcmV0OwotCXUzMiB2YWw7Ci0KLQkvKgot CSAqIE5vdCAxMDAlIGNvcnJlY3QgZm9yIHBsYW5lcyB0aGF0IGNhbiBtb3ZlIGJldHdlZW4gcGlw ZXMsCi0JICogYnV0IHRoYXQncyBvbmx5IHRoZSBjYXNlIGZvciBnZW4yLTQgd2hpY2ggZG9uJ3Qg aGF2ZSBhbnkKLQkgKiBkaXNwbGF5IHBvd2VyIHdlbGxzLgotCSAqLwotCXBvd2VyX2RvbWFpbiA9 IFBPV0VSX0RPTUFJTl9QSVBFKHBsYW5lLT5waXBlKTsKLQl3YWtlcmVmID0gaW50ZWxfZGlzcGxh eV9wb3dlcl9nZXRfaWZfZW5hYmxlZChkZXZfcHJpdiwgcG93ZXJfZG9tYWluKTsKLQlpZiAoIXdh a2VyZWYpCi0JCXJldHVybiBmYWxzZTsKLQotCXZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYs IERTUENOVFIoaTl4eF9wbGFuZSkpOwotCi0JcmV0ID0gdmFsICYgRElTUExBWV9QTEFORV9FTkFC TEU7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA1KQotCQkqcGlwZSA9IHBsYW5lLT5w aXBlOwotCWVsc2UKLQkJKnBpcGUgPSAodmFsICYgRElTUFBMQU5FX1NFTF9QSVBFX01BU0spID4+ Ci0JCQlESVNQUExBTkVfU0VMX1BJUEVfU0hJRlQ7Ci0KLQlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1 dChkZXZfcHJpdiwgcG93ZXJfZG9tYWluLCB3YWtlcmVmKTsKLQotCXJldHVybiByZXQ7Ci19Ci0K IHN0YXRpYyB2b2lkIHNrbF9kZXRhY2hfc2NhbGVyKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9j cnRjLCBpbnQgaWQpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2NydGMtPmJh c2UuZGV2OwpAQCAtMTYyNTAsMjI4ICsxNTc4NSw2IEBAIHZvaWQgaW50ZWxfcGxhbmVfZGVzdHJv eShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKIAlrZnJlZSh0b19pbnRlbF9wbGFuZShwbGFuZSkp OwogfQogCi1zdGF0aWMgYm9vbCBpOHh4X3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkKHN0cnVj dCBkcm1fcGxhbmUgKl9wbGFuZSwKLQkJCQkJICAgIHUzMiBmb3JtYXQsIHU2NCBtb2RpZmllcikK LXsKLQlzd2l0Y2ggKG1vZGlmaWVyKSB7Ci0JY2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6Ci0J Y2FzZSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0 dXJuIGZhbHNlOwotCX0KLQotCXN3aXRjaCAoZm9ybWF0KSB7Ci0JY2FzZSBEUk1fRk9STUFUX0M4 OgotCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0IxNTU1Ogot CWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKLQkJcmV0dXJuIG1vZGlmaWVyID09IERSTV9GT1JN QVRfTU9EX0xJTkVBUiB8fAotCQkJbW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ7 Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIGZhbHNlOwotCX0KLX0KLQotc3RhdGljIGJvb2wgaTk2NV9w bGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUsCi0JCQkJ CSAgICB1MzIgZm9ybWF0LCB1NjQgbW9kaWZpZXIpCi17Ci0Jc3dpdGNoIChtb2RpZmllcikgewot CWNhc2UgRFJNX0ZPUk1BVF9NT0RfTElORUFSOgotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElM RUQ6Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlzd2l0Y2gg KGZvcm1hdCkgewotCWNhc2UgRFJNX0ZPUk1BVF9DODoKLQljYXNlIERSTV9GT1JNQVRfUkdCNTY1 OgotCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKLQljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6 Ci0JY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoK LQljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1IyMTAx MDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDoKLQljYXNlIERSTV9GT1JNQVRfQUJH UjIxMDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkY6Ci0JCXJldHVybiBtb2Rp ZmllciA9PSBEUk1fRk9STUFUX01PRF9MSU5FQVIgfHwKLQkJCW1vZGlmaWVyID09IEk5MTVfRk9S TUFUX01PRF9YX1RJTEVEOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci19Ci0KLXN0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGk5NjVfcGxhbmVfZnVuY3MgPSB7Ci0J LnVwZGF0ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwKLQkuZGlzYWJs ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCi0JLmRlc3Ryb3kgPSBp bnRlbF9wbGFuZV9kZXN0cm95LAotCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gaW50ZWxfcGxh bmVfZHVwbGljYXRlX3N0YXRlLAotCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGludGVsX3BsYW5l X2Rlc3Ryb3lfc3RhdGUsCi0JLmZvcm1hdF9tb2Rfc3VwcG9ydGVkID0gaTk2NV9wbGFuZV9mb3Jt YXRfbW9kX3N1cHBvcnRlZCwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1 bmNzIGk4eHhfcGxhbmVfZnVuY3MgPSB7Ci0JLnVwZGF0ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVs cGVyX3VwZGF0ZV9wbGFuZSwKLQkuZGlzYWJsZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX2Rp c2FibGVfcGxhbmUsCi0JLmRlc3Ryb3kgPSBpbnRlbF9wbGFuZV9kZXN0cm95LAotCS5hdG9taWNf ZHVwbGljYXRlX3N0YXRlID0gaW50ZWxfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAotCS5hdG9taWNf ZGVzdHJveV9zdGF0ZSA9IGludGVsX3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCi0JLmZvcm1hdF9tb2Rf c3VwcG9ydGVkID0gaTh4eF9wbGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZCwKLX07Ci0KLXN0YXRp YyBib29sIGk5eHhfcGxhbmVfaGFzX2ZiYyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsCi0JCQkgICAgICAgZW51bSBpOXh4X3BsYW5lX2lkIGk5eHhfcGxhbmUpCi17Ci0JaWYgKCFI QVNfRkJDKGRldl9wcml2KSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKElTX0JST0FEV0VMTChk ZXZfcHJpdikgfHwgSVNfSEFTV0VMTChkZXZfcHJpdikpCi0JCXJldHVybiBpOXh4X3BsYW5lID09 IFBMQU5FX0E7IC8qIHRpZWQgdG8gcGlwZSBBICovCi0JZWxzZSBpZiAoSVNfSVZZQlJJREdFKGRl dl9wcml2KSkKLQkJcmV0dXJuIGk5eHhfcGxhbmUgPT0gUExBTkVfQSB8fCBpOXh4X3BsYW5lID09 IFBMQU5FX0IgfHwKLQkJCWk5eHhfcGxhbmUgPT0gUExBTkVfQzsKLQllbHNlIGlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID49IDQpCi0JCXJldHVybiBpOXh4X3BsYW5lID09IFBMQU5FX0EgfHwgaTl4 eF9wbGFuZSA9PSBQTEFORV9COwotCWVsc2UKLQkJcmV0dXJuIGk5eHhfcGxhbmUgPT0gUExBTkVf QTsKLX0KLQotc3RhdGljIHN0cnVjdCBpbnRlbF9wbGFuZSAqCi1pbnRlbF9wcmltYXJ5X3BsYW5l X2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBl KQotewotCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmU7Ci0JY29uc3Qgc3RydWN0IGRybV9wbGFu ZV9mdW5jcyAqcGxhbmVfZnVuY3M7Ci0JdW5zaWduZWQgaW50IHN1cHBvcnRlZF9yb3RhdGlvbnM7 Ci0JY29uc3QgdTMyICpmb3JtYXRzOwotCWludCBudW1fZm9ybWF0czsKLQlpbnQgcmV0LCB6cG9z OwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkKLQkJcmV0dXJuIHNrbF91bml2ZXJz YWxfcGxhbmVfY3JlYXRlKGRldl9wcml2LCBwaXBlLAotCQkJCQkJICBQTEFORV9QUklNQVJZKTsK LQotCXBsYW5lID0gaW50ZWxfcGxhbmVfYWxsb2MoKTsKLQlpZiAoSVNfRVJSKHBsYW5lKSkKLQkJ cmV0dXJuIHBsYW5lOwotCi0JcGxhbmUtPnBpcGUgPSBwaXBlOwotCS8qCi0JICogT24gZ2VuMi8z IG9ubHkgcGxhbmUgQSBjYW4gZG8gRkJDLCBidXQgdGhlIHBhbmVsIGZpdHRlciBhbmQgTFZEUwot CSAqIHBvcnQgaXMgaG9va2VkIHRvIHBpcGUgQi4gSGVuY2Ugd2Ugd2FudCBwbGFuZSBBIGZlZWRp bmcgcGlwZSBCLgotCSAqLwotCWlmIChIQVNfRkJDKGRldl9wcml2KSAmJiBJTlRFTF9HRU4oZGV2 X3ByaXYpIDwgNCAmJgotCSAgICBJTlRFTF9OVU1fUElQRVMoZGV2X3ByaXYpID09IDIpCi0JCXBs YW5lLT5pOXh4X3BsYW5lID0gKGVudW0gaTl4eF9wbGFuZV9pZCkgIXBpcGU7Ci0JZWxzZQotCQlw bGFuZS0+aTl4eF9wbGFuZSA9IChlbnVtIGk5eHhfcGxhbmVfaWQpIHBpcGU7Ci0JcGxhbmUtPmlk ID0gUExBTkVfUFJJTUFSWTsKLQlwbGFuZS0+ZnJvbnRidWZmZXJfYml0ID0gSU5URUxfRlJPTlRC VUZGRVIocGlwZSwgcGxhbmUtPmlkKTsKLQotCXBsYW5lLT5oYXNfZmJjID0gaTl4eF9wbGFuZV9o YXNfZmJjKGRldl9wcml2LCBwbGFuZS0+aTl4eF9wbGFuZSk7Ci0JaWYgKHBsYW5lLT5oYXNfZmJj KSB7Ci0JCXN0cnVjdCBpbnRlbF9mYmMgKmZiYyA9ICZkZXZfcHJpdi0+ZmJjOwotCi0JCWZiYy0+ cG9zc2libGVfZnJhbWVidWZmZXJfYml0cyB8PSBwbGFuZS0+ZnJvbnRidWZmZXJfYml0OwotCX0K LQotCWlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2 KSkgewotCQlmb3JtYXRzID0gdmx2X3ByaW1hcnlfZm9ybWF0czsKLQkJbnVtX2Zvcm1hdHMgPSBB UlJBWV9TSVpFKHZsdl9wcmltYXJ5X2Zvcm1hdHMpOwotCX0gZWxzZSBpZiAoSU5URUxfR0VOKGRl dl9wcml2KSA+PSA0KSB7Ci0JCS8qCi0JCSAqIFdhRlAxNkdhbW1hRW5hYmxpbmc6aXZiCi0JCSAq ICJXb3JrYXJvdW5kIDogV2hlbiB1c2luZyB0aGUgNjQtYml0IGZvcm1hdCwgdGhlIHBsYW5lCi0J CSAqICBvdXRwdXQgb24gZWFjaCBjb2xvciBjaGFubmVsIGhhcyBvbmUgcXVhcnRlciBhbXBsaXR1 ZGUuCi0JCSAqICBJdCBjYW4gYmUgYnJvdWdodCB1cCB0byBmdWxsIGFtcGxpdHVkZSBieSB1c2lu ZyBwaXBlCi0JCSAqICBnYW1tYSBjb3JyZWN0aW9uIG9yIHBpcGUgY29sb3Igc3BhY2UgY29udmVy c2lvbiB0bwotCQkgKiAgbXVsdGlwbHkgdGhlIHBsYW5lIG91dHB1dCBieSBmb3VyLiIKLQkJICoK LQkJICogVGhlcmUgaXMgbm8gZGVkaWNhdGVkIHBsYW5lIGdhbW1hIGZvciB0aGUgcHJpbWFyeSBw bGFuZSwKLQkJICogYW5kIHVzaW5nIHRoZSBwaXBlIGdhbW1hL2NzYyBjb3VsZCBjb25mbGljdCB3 aXRoIG90aGVyCi0JCSAqIHBsYW5lcywgc28gd2UgY2hvb3NlIG5vdCB0byBleHBvc2UgZnAxNiBv biBJVkIgcHJpbWFyeQotCQkgKiBwbGFuZXMuIEhTVyBwcmltYXJ5IHBsYW5lcyBubyBsb25nZXIg aGF2ZSB0aGlzIHByb2JsZW0uCi0JCSAqLwotCQlpZiAoSVNfSVZZQlJJREdFKGRldl9wcml2KSkg ewotCQkJZm9ybWF0cyA9IGl2Yl9wcmltYXJ5X2Zvcm1hdHM7Ci0JCQludW1fZm9ybWF0cyA9IEFS UkFZX1NJWkUoaXZiX3ByaW1hcnlfZm9ybWF0cyk7Ci0JCX0gZWxzZSB7Ci0JCQlmb3JtYXRzID0g aTk2NV9wcmltYXJ5X2Zvcm1hdHM7Ci0JCQludW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoaTk2NV9w cmltYXJ5X2Zvcm1hdHMpOwotCQl9Ci0JfSBlbHNlIHsKLQkJZm9ybWF0cyA9IGk4eHhfcHJpbWFy eV9mb3JtYXRzOwotCQludW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoaTh4eF9wcmltYXJ5X2Zvcm1h dHMpOwotCX0KLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpCi0JCXBsYW5lX2Z1bmNz ID0gJmk5NjVfcGxhbmVfZnVuY3M7Ci0JZWxzZQotCQlwbGFuZV9mdW5jcyA9ICZpOHh4X3BsYW5l X2Z1bmNzOwotCi0JaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVco ZGV2X3ByaXYpKQotCQlwbGFuZS0+bWluX2NkY2xrID0gdmx2X3BsYW5lX21pbl9jZGNsazsKLQll bHNlIGlmIChJU19CUk9BRFdFTEwoZGV2X3ByaXYpIHx8IElTX0hBU1dFTEwoZGV2X3ByaXYpKQot CQlwbGFuZS0+bWluX2NkY2xrID0gaHN3X3BsYW5lX21pbl9jZGNsazsKLQllbHNlIGlmIChJU19J VllCUklER0UoZGV2X3ByaXYpKQotCQlwbGFuZS0+bWluX2NkY2xrID0gaXZiX3BsYW5lX21pbl9j ZGNsazsKLQllbHNlCi0JCXBsYW5lLT5taW5fY2RjbGsgPSBpOXh4X3BsYW5lX21pbl9jZGNsazsK LQotCXBsYW5lLT5tYXhfc3RyaWRlID0gaTl4eF9wbGFuZV9tYXhfc3RyaWRlOwotCXBsYW5lLT51 cGRhdGVfcGxhbmUgPSBpOXh4X3VwZGF0ZV9wbGFuZTsKLQlwbGFuZS0+ZGlzYWJsZV9wbGFuZSA9 IGk5eHhfZGlzYWJsZV9wbGFuZTsKLQlwbGFuZS0+Z2V0X2h3X3N0YXRlID0gaTl4eF9wbGFuZV9n ZXRfaHdfc3RhdGU7Ci0JcGxhbmUtPmNoZWNrX3BsYW5lID0gaTl4eF9wbGFuZV9jaGVjazsKLQot CWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDUgfHwgSVNfRzRYKGRldl9wcml2KSkKLQkJcmV0 ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KCZkZXZfcHJpdi0+ZHJtLCAmcGxhbmUtPmJhc2Us Ci0JCQkJCSAgICAgICAwLCBwbGFuZV9mdW5jcywKLQkJCQkJICAgICAgIGZvcm1hdHMsIG51bV9m b3JtYXRzLAotCQkJCQkgICAgICAgaTl4eF9mb3JtYXRfbW9kaWZpZXJzLAotCQkJCQkgICAgICAg RFJNX1BMQU5FX1RZUEVfUFJJTUFSWSwKLQkJCQkJICAgICAgICJwcmltYXJ5ICVjIiwgcGlwZV9u YW1lKHBpcGUpKTsKLQllbHNlCi0JCXJldCA9IGRybV91bml2ZXJzYWxfcGxhbmVfaW5pdCgmZGV2 X3ByaXYtPmRybSwgJnBsYW5lLT5iYXNlLAotCQkJCQkgICAgICAgMCwgcGxhbmVfZnVuY3MsCi0J CQkJCSAgICAgICBmb3JtYXRzLCBudW1fZm9ybWF0cywKLQkJCQkJICAgICAgIGk5eHhfZm9ybWF0 X21vZGlmaWVycywKLQkJCQkJICAgICAgIERSTV9QTEFORV9UWVBFX1BSSU1BUlksCi0JCQkJCSAg ICAgICAicGxhbmUgJWMiLAotCQkJCQkgICAgICAgcGxhbmVfbmFtZShwbGFuZS0+aTl4eF9wbGFu ZSkpOwotCWlmIChyZXQpCi0JCWdvdG8gZmFpbDsKLQotCWlmIChJU19DSEVSUllWSUVXKGRldl9w cml2KSAmJiBwaXBlID09IFBJUEVfQikgewotCQlzdXBwb3J0ZWRfcm90YXRpb25zID0KLQkJCURS TV9NT0RFX1JPVEFURV8wIHwgRFJNX01PREVfUk9UQVRFXzE4MCB8Ci0JCQlEUk1fTU9ERV9SRUZM RUNUX1g7Ci0JfSBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpIHsKLQkJc3VwcG9y dGVkX3JvdGF0aW9ucyA9Ci0JCQlEUk1fTU9ERV9ST1RBVEVfMCB8IERSTV9NT0RFX1JPVEFURV8x ODA7Ci0JfSBlbHNlIHsKLQkJc3VwcG9ydGVkX3JvdGF0aW9ucyA9IERSTV9NT0RFX1JPVEFURV8w OwotCX0KLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpCi0JCWRybV9wbGFuZV9jcmVh dGVfcm90YXRpb25fcHJvcGVydHkoJnBsYW5lLT5iYXNlLAotCQkJCQkJICAgRFJNX01PREVfUk9U QVRFXzAsCi0JCQkJCQkgICBzdXBwb3J0ZWRfcm90YXRpb25zKTsKLQotCXpwb3MgPSAwOwotCWRy bV9wbGFuZV9jcmVhdGVfenBvc19pbW11dGFibGVfcHJvcGVydHkoJnBsYW5lLT5iYXNlLCB6cG9z KTsKLQotCWRybV9wbGFuZV9oZWxwZXJfYWRkKCZwbGFuZS0+YmFzZSwgJmludGVsX3BsYW5lX2hl bHBlcl9mdW5jcyk7Ci0KLQlyZXR1cm4gcGxhbmU7Ci0KLWZhaWw6Ci0JaW50ZWxfcGxhbmVfZnJl ZShwbGFuZSk7Ci0KLQlyZXR1cm4gRVJSX1BUUihyZXQpOwotfQotCiBzdGF0aWMgaW50IGludGVs X2NydGNfbGF0ZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CiAJaW50ZWxfY3J0 Y19kZWJ1Z2ZzX2FkZChjcnRjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfZGlzcGxheS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9kaXNwbGF5LmgKaW5kZXggNzE3YjBlNDE2MGU5Li5mN2U0OWEzOWJkOTIgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5oCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5oCkBAIC02MzAsMTEgKzYzMCw3 IEBAIHUzMiBza2xfcGxhbmVfY3RsX2NydGMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUpOwogdTMyIHNrbF9wbGFuZV9zdHJpZGUoY29uc3Qgc3RydWN0IGludGVsX3Bs YW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKIAkJICAgICBpbnQgcGxhbmUpOwogaW50IHNrbF9jaGVj a19wbGFuZV9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwot aW50IGk5eHhfY2hlY2tfcGxhbmVfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBs YW5lX3N0YXRlKTsKIGludCBza2xfZm9ybWF0X3RvX2ZvdXJjYyhpbnQgZm9ybWF0LCBib29sIHJn Yl9vcmRlciwgYm9vbCBhbHBoYSk7Ci11bnNpZ25lZCBpbnQgaTl4eF9wbGFuZV9tYXhfc3RyaWRl KHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCi0JCQkJICAgdTMyIHBpeGVsX2Zvcm1hdCwgdTY0 IG1vZGlmaWVyLAotCQkJCSAgIHVuc2lnbmVkIGludCByb3RhdGlvbik7CiBpbnQgYmR3X2dldF9w aXBlbWlzY19icHAoc3RydWN0IGludGVsX2NydGMgKmNydGMpOwogdW5zaWduZWQgaW50IGludGVs X3BsYW5lX2ZlbmNlX3lfb2Zmc2V0KGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxh bmVfc3RhdGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX3Nwcml0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUu YwppbmRleCBiN2UyMDg4MTYwNzQuLmNmMzU4OWZkMGRkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5jCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAi aW50ZWxfcHNyLmgiCiAjaW5jbHVkZSAiaW50ZWxfZHNpLmgiCiAjaW5jbHVkZSAiaW50ZWxfc3By aXRlLmgiCisjaW5jbHVkZSAiaTl4eF9wbGFuZS5oIgogCiBpbnQgaW50ZWxfdXNlY3NfdG9fc2Nh bmxpbmVzKGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlLAogCQkJ ICAgICBpbnQgdXNlY3MpCi0tIAoyLjI3LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeAo=