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 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 C2695C2BBCF for ; Fri, 18 Dec 2020 06:04:39 +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 6404023A5B for ; Fri, 18 Dec 2020 06:04:39 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6404023A5B 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 A2E9B89A6D; Fri, 18 Dec 2020 06:04:38 +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 7B01789A6D for ; Fri, 18 Dec 2020 06:04:33 +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-539-SxeG1eHlOo6khsoRGThOcg-1; Fri, 18 Dec 2020 01:04:30 -0500 X-MC-Unique: SxeG1eHlOo6khsoRGThOcg-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 72B87107ACE3 for ; Fri, 18 Dec 2020 06:04:29 +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 9D15960BE5 for ; Fri, 18 Dec 2020 06:04:28 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Fri, 18 Dec 2020 16:04:12 +1000 Message-Id: <20201218060420.3203-6-airlied@gmail.com> In-Reply-To: <20201218060420.3203-1-airlied@gmail.com> References: <20201218060420.3203-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: gmail.com Subject: [Intel-gfx] [PATCH 05/13] 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: , 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 LS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAgMyAr LQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pOXh4X3BsYW5lLmMgICAgfCA3MDQgKysr KysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pOXh4X3BsYW5l LmggICAgfCAgMjEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5 LmMgfCA2ODkgKy0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5 L2ludGVsX2Rpc3BsYXkuaCB8ICAgNCAtCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX3Nwcml0ZS5jICB8ICAgMSArCiA2IGZpbGVzIGNoYW5nZWQsIDcyOSBpbnNlcnRpb25zKCsp LCA2OTMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9pOXh4X3BsYW5lLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2k5eHhfcGxhbmUuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggOThh MzViOTM5MDUyLi5jMWZhNWE5MzEwZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCkBAIC0yMTUsNyAr MjE1LDggQEAgaTkxNS15ICs9IFwKIAlkaXNwbGF5L2ludGVsX3F1aXJrcy5vIFwKIAlkaXNwbGF5 L2ludGVsX3Nwcml0ZS5vIFwKIAlkaXNwbGF5L2ludGVsX3RjLm8gXAotCWRpc3BsYXkvaW50ZWxf dmdhLm8KKwlkaXNwbGF5L2ludGVsX3ZnYS5vIFwKKwlkaXNwbGF5L2k5eHhfcGxhbmUubwogaTkx NS0kKENPTkZJR19BQ1BJKSArPSBcCiAJZGlzcGxheS9pbnRlbF9hY3BpLm8gXAogCWRpc3BsYXkv aW50ZWxfb3ByZWdpb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pOXh4X3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2k5eHhfcGxhbmUu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmI3ODk4NWM4NTVhNQot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaTl4eF9wbGFu ZS5jCkBAIC0wLDAgKzEsNzA0IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCisv KgorICogQ29weXJpZ2h0IMKpIDIwMjAgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworI2luY2x1ZGUg PGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lX2hlbHBl ci5oPgorCisjaW5jbHVkZSAiaW50ZWxfYXRvbWljLmgiCisjaW5jbHVkZSAiaW50ZWxfYXRvbWlj X3BsYW5lLmgiCisjaW5jbHVkZSAiaW50ZWxfZGlzcGxheV90eXBlcy5oIgorI2luY2x1ZGUgImlu dGVsX3Nwcml0ZS5oIgorI2luY2x1ZGUgImk5eHhfcGxhbmUuaCIKKworLyogUHJpbWFyeSBwbGFu ZSBmb3JtYXRzIGZvciBnZW4gPD0gMyAqLworc3RhdGljIGNvbnN0IHUzMiBpOHh4X3ByaW1hcnlf Zm9ybWF0c1tdID0geworCURSTV9GT1JNQVRfQzgsCisJRFJNX0ZPUk1BVF9YUkdCMTU1NSwKKwlE Uk1fRk9STUFUX1JHQjU2NSwKKwlEUk1fRk9STUFUX1hSR0I4ODg4LAorfTsKKworLyogUHJpbWFy eSBwbGFuZSBmb3JtYXRzIGZvciBpdmIgKG5vIGZwMTYgZHVlIHRvIGh3IGlzc3VlKSAqLworc3Rh dGljIGNvbnN0IHUzMiBpdmJfcHJpbWFyeV9mb3JtYXRzW10gPSB7CisJRFJNX0ZPUk1BVF9DOCwK KwlEUk1fRk9STUFUX1JHQjU2NSwKKwlEUk1fRk9STUFUX1hSR0I4ODg4LAorCURSTV9GT1JNQVRf WEJHUjg4ODgsCisJRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMCwKKwlEUk1fRk9STUFUX1hCR1IyMTAx MDEwLAorfTsKKworLyogUHJpbWFyeSBwbGFuZSBmb3JtYXRzIGZvciBnZW4gPj0gNCwgZXhjZXB0 IGl2YiAqLworc3RhdGljIGNvbnN0IHUzMiBpOTY1X3ByaW1hcnlfZm9ybWF0c1tdID0geworCURS TV9GT1JNQVRfQzgsCisJRFJNX0ZPUk1BVF9SR0I1NjUsCisJRFJNX0ZPUk1BVF9YUkdCODg4OCwK KwlEUk1fRk9STUFUX1hCR1I4ODg4LAorCURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCisJRFJNX0ZP Uk1BVF9YQkdSMjEwMTAxMCwKKwlEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkYsCit9OworCisvKiBQ cmltYXJ5IHBsYW5lIGZvcm1hdHMgZm9yIHZsdi9jaHYgKi8KK3N0YXRpYyBjb25zdCB1MzIgdmx2 X3ByaW1hcnlfZm9ybWF0c1tdID0geworCURSTV9GT1JNQVRfQzgsCisJRFJNX0ZPUk1BVF9SR0I1 NjUsCisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFUX1hCR1I4ODg4LAorCURSTV9G T1JNQVRfQVJHQjg4ODgsCisJRFJNX0ZPUk1BVF9BQkdSODg4OCwKKwlEUk1fRk9STUFUX1hSR0Iy MTAxMDEwLAorCURSTV9GT1JNQVRfWEJHUjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9BUkdCMjEwMTAx MCwKKwlEUk1fRk9STUFUX0FCR1IyMTAxMDEwLAorCURSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RiwK K307CisKK3N0YXRpYyBjb25zdCB1NjQgaTl4eF9mb3JtYXRfbW9kaWZpZXJzW10gPSB7CisJSTkx NV9GT1JNQVRfTU9EX1hfVElMRUQsCisJRFJNX0ZPUk1BVF9NT0RfTElORUFSLAorCURSTV9GT1JN QVRfTU9EX0lOVkFMSUQKK307CisKK3N0YXRpYyBib29sIGk4eHhfcGxhbmVfZm9ybWF0X21vZF9z dXBwb3J0ZWQoc3RydWN0IGRybV9wbGFuZSAqX3BsYW5lLAorCQkJCQkgICAgdTMyIGZvcm1hdCwg dTY0IG1vZGlmaWVyKQoreworCXN3aXRjaCAobW9kaWZpZXIpIHsKKwljYXNlIERSTV9GT1JNQVRf TU9EX0xJTkVBUjoKKwljYXNlIEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOgorCQlicmVhazsKKwlk ZWZhdWx0OgorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJc3dpdGNoIChmb3JtYXQpIHsKKwljYXNl IERSTV9GT1JNQVRfQzg6CisJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKKwljYXNlIERSTV9GT1JN QVRfWFJHQjE1NTU6CisJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgorCQlyZXR1cm4gbW9kaWZp ZXIgPT0gRFJNX0ZPUk1BVF9NT0RfTElORUFSIHx8CisJCQltb2RpZmllciA9PSBJOTE1X0ZPUk1B VF9NT0RfWF9USUxFRDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZmFsc2U7CisJfQorfQorCitzdGF0 aWMgYm9vbCBpOTY1X3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkKHN0cnVjdCBkcm1fcGxhbmUg Kl9wbGFuZSwKKwkJCQkJICAgIHUzMiBmb3JtYXQsIHU2NCBtb2RpZmllcikKK3sKKwlzd2l0Y2gg KG1vZGlmaWVyKSB7CisJY2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6CisJY2FzZSBJOTE1X0ZP Uk1BVF9NT0RfWF9USUxFRDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOwor CX0KKworCXN3aXRjaCAoZm9ybWF0KSB7CisJY2FzZSBEUk1fRk9STUFUX0M4OgorCWNhc2UgRFJN X0ZPUk1BVF9SR0I1NjU6CisJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgorCWNhc2UgRFJNX0ZP Uk1BVF9YQkdSODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6CisJY2FzZSBEUk1fRk9S TUFUX0FCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMDoKKwljYXNlIERSTV9G T1JNQVRfWEJHUjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX0FSR0IyMTAxMDEwOgorCWNhc2Ug RFJNX0ZPUk1BVF9BQkdSMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RjoK KwkJcmV0dXJuIG1vZGlmaWVyID09IERSTV9GT1JNQVRfTU9EX0xJTkVBUiB8fAorCQkJbW9kaWZp ZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNl OworCX0KK30KKworc3RhdGljIGJvb2wgaTl4eF9wbGFuZV9oYXNfZmJjKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgICAgICBlbnVtIGk5eHhfcGxhbmVfaWQgaTl4eF9w bGFuZSkKK3sKKwlpZiAoIUhBU19GQkMoZGV2X3ByaXYpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlp ZiAoSVNfQlJPQURXRUxMKGRldl9wcml2KSB8fCBJU19IQVNXRUxMKGRldl9wcml2KSkKKwkJcmV0 dXJuIGk5eHhfcGxhbmUgPT0gUExBTkVfQTsgLyogdGllZCB0byBwaXBlIEEgKi8KKwllbHNlIGlm IChJU19JVllCUklER0UoZGV2X3ByaXYpKQorCQlyZXR1cm4gaTl4eF9wbGFuZSA9PSBQTEFORV9B IHx8IGk5eHhfcGxhbmUgPT0gUExBTkVfQiB8fAorCQkJaTl4eF9wbGFuZSA9PSBQTEFORV9DOwor CWVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkKKwkJcmV0dXJuIGk5eHhfcGxhbmUg PT0gUExBTkVfQSB8fCBpOXh4X3BsYW5lID09IFBMQU5FX0I7CisJZWxzZQorCQlyZXR1cm4gaTl4 eF9wbGFuZSA9PSBQTEFORV9BOworfQorCitzdGF0aWMgYm9vbCBpOXh4X3BsYW5lX2hhc193aW5k b3dpbmcoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7CisJZW51bSBpOXh4X3Bs YW5lX2lkIGk5eHhfcGxhbmUgPSBwbGFuZS0+aTl4eF9wbGFuZTsKKworCWlmIChJU19DSEVSUllW SUVXKGRldl9wcml2KSkKKwkJcmV0dXJuIGk5eHhfcGxhbmUgPT0gUExBTkVfQjsKKwllbHNlIGlm IChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDUgfHwgSVNfRzRYKGRldl9wcml2KSkKKwkJcmV0dXJu IGZhbHNlOworCWVsc2UgaWYgKElTX0dFTihkZXZfcHJpdiwgNCkpCisJCXJldHVybiBpOXh4X3Bs YW5lID09IFBMQU5FX0M7CisJZWxzZQorCQlyZXR1cm4gaTl4eF9wbGFuZSA9PSBQTEFORV9CIHx8 CisJCQlpOXh4X3BsYW5lID09IFBMQU5FX0M7Cit9CisKK3N0YXRpYyB1MzIgaTl4eF9wbGFuZV9j dGwoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkgIGNvbnN0 IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0KKwkJdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFu ZS0+ZGV2KTsKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRl LT5ody5mYjsKKwl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+aHcucm90YXRp b247CisJdTMyIGRzcGNudHI7CisKKwlkc3BjbnRyID0gRElTUExBWV9QTEFORV9FTkFCTEU7CisK KwlpZiAoSVNfRzRYKGRldl9wcml2KSB8fCBJU19HRU4oZGV2X3ByaXYsIDUpIHx8CisJICAgIElT X0dFTihkZXZfcHJpdiwgNikgfHwgSVNfSVZZQlJJREdFKGRldl9wcml2KSkKKwkJZHNwY250ciB8 PSBESVNQUExBTkVfVFJJQ0tMRV9GRUVEX0RJU0FCTEU7CisKKwlzd2l0Y2ggKGZiLT5mb3JtYXQt PmZvcm1hdCkgeworCWNhc2UgRFJNX0ZPUk1BVF9DODoKKwkJZHNwY250ciB8PSBESVNQUExBTkVf OEJQUDsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX1hSR0IxNTU1OgorCQlkc3BjbnRyIHw9 IERJU1BQTEFORV9CR1JYNTU1OworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfQVJHQjE1NTU6 CisJCWRzcGNudHIgfD0gRElTUFBMQU5FX0JHUkE1NTU7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZP Uk1BVF9SR0I1NjU6CisJCWRzcGNudHIgfD0gRElTUFBMQU5FX0JHUlg1NjU7CisJCWJyZWFrOwor CWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKKwkJZHNwY250ciB8PSBESVNQUExBTkVfQkdSWDg4 ODsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4OgorCQlkc3BjbnRyIHw9IERJ U1BQTEFORV9SR0JYODg4OworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6CisJ CWRzcGNudHIgfD0gRElTUFBMQU5FX0JHUkE4ODg7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1B VF9BQkdSODg4ODoKKwkJZHNwY250ciB8PSBESVNQUExBTkVfUkdCQTg4ODsKKwkJYnJlYWs7CisJ Y2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgorCQlkc3BjbnRyIHw9IERJU1BQTEFORV9CR1JY MTAxMDEwOworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6CisJCWRzcGNu dHIgfD0gRElTUFBMQU5FX1JHQlgxMDEwMTA7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9B UkdCMjEwMTAxMDoKKwkJZHNwY250ciB8PSBESVNQUExBTkVfQkdSQTEwMTAxMDsKKwkJYnJlYWs7 CisJY2FzZSBEUk1fRk9STUFUX0FCR1IyMTAxMDEwOgorCQlkc3BjbnRyIHw9IERJU1BQTEFORV9S R0JBMTAxMDEwOworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RjoKKwkJ ZHNwY250ciB8PSBESVNQUExBTkVfUkdCWDE2MTYxNjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJ TUlTU0lOR19DQVNFKGZiLT5mb3JtYXQtPmZvcm1hdCk7CisJCXJldHVybiAwOworCX0KKworCWlm IChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQgJiYKKwkgICAgZmItPm1vZGlmaWVyID09IEk5MTVf Rk9STUFUX01PRF9YX1RJTEVEKQorCQlkc3BjbnRyIHw9IERJU1BQTEFORV9USUxFRDsKKworCWlm IChyb3RhdGlvbiAmIERSTV9NT0RFX1JPVEFURV8xODApCisJCWRzcGNudHIgfD0gRElTUFBMQU5F X1JPVEFURV8xODA7CisKKwlpZiAocm90YXRpb24gJiBEUk1fTU9ERV9SRUZMRUNUX1gpCisJCWRz cGNudHIgfD0gRElTUFBMQU5FX01JUlJPUjsKKworCXJldHVybiBkc3BjbnRyOworfQorCitpbnQg aTl4eF9jaGVja19wbGFuZV9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVf c3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KKwkJdG9faTkx NShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKKwlpbnQgc3JjX3gsIHNyY195LCBzcmNf dzsKKwl1MzIgb2Zmc2V0OworCWludCByZXQ7CisKKwlyZXQgPSBpbnRlbF9wbGFuZV9jb21wdXRl X2d0dChwbGFuZV9zdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmICghcGxh bmVfc3RhdGUtPnVhcGkudmlzaWJsZSkKKwkJcmV0dXJuIDA7CisKKwlzcmNfdyA9IGRybV9yZWN0 X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMpID4+IDE2OworCXNyY194ID0gcGxhbmVfc3Rh dGUtPnVhcGkuc3JjLngxID4+IDE2OworCXNyY195ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3JjLnkx ID4+IDE2OworCisJLyogVW5kb2N1bWVudGVkIGhhcmR3YXJlIGxpbWl0IG9uIGk5NjUvZzR4L3Zs di9jaHYgKi8KKwlpZiAoSEFTX0dNQ0goZGV2X3ByaXYpICYmIGZiLT5mb3JtYXQtPmNwcFswXSA9 PSA4ICYmIHNyY193ID4gMjA0OCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbnRlbF9hZGRfZmJf b2Zmc2V0cygmc3JjX3gsICZzcmNfeSwgcGxhbmVfc3RhdGUsIDApOworCisJaWYgKElOVEVMX0dF TihkZXZfcHJpdikgPj0gNCkKKwkJb2Zmc2V0ID0gaW50ZWxfcGxhbmVfY29tcHV0ZV9hbGlnbmVk X29mZnNldCgmc3JjX3gsICZzcmNfeSwKKwkJCQkJCQkgICAgcGxhbmVfc3RhdGUsIDApOworCWVs c2UKKwkJb2Zmc2V0ID0gMDsKKworCS8qCisJICogUHV0IHRoZSBmaW5hbCBjb29yZGluYXRlcyBi YWNrIHNvIHRoYXQgdGhlIHNyYworCSAqIGNvb3JkaW5hdGUgY2hlY2tzIHdpbGwgc2VlIHRoZSBy aWdodCB2YWx1ZXMuCisJICovCisJZHJtX3JlY3RfdHJhbnNsYXRlX3RvKCZwbGFuZV9zdGF0ZS0+ dWFwaS5zcmMsCisJCQkgICAgICBzcmNfeCA8PCAxNiwgc3JjX3kgPDwgMTYpOworCisJLyogSFNX L0JEVyBkbyB0aGlzIGF1dG9tYWdpY2FsbHkgaW4gaGFyZHdhcmUgKi8KKwlpZiAoIUlTX0hBU1dF TEwoZGV2X3ByaXYpICYmICFJU19CUk9BRFdFTEwoZGV2X3ByaXYpKSB7CisJCXVuc2lnbmVkIGlu dCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbjsKKwkJaW50IHNyY193ID0gZHJt X3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTY7CisJCWludCBzcmNfaCA9 IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjKSA+PiAxNjsKKworCQlpZiAo cm90YXRpb24gJiBEUk1fTU9ERV9ST1RBVEVfMTgwKSB7CisJCQlzcmNfeCArPSBzcmNfdyAtIDE7 CisJCQlzcmNfeSArPSBzcmNfaCAtIDE7CisJCX0gZWxzZSBpZiAocm90YXRpb24gJiBEUk1fTU9E RV9SRUZMRUNUX1gpIHsKKwkJCXNyY194ICs9IHNyY193IC0gMTsKKwkJfQorCX0KKworCXBsYW5l X3N0YXRlLT5jb2xvcl9wbGFuZVswXS5vZmZzZXQgPSBvZmZzZXQ7CisJcGxhbmVfc3RhdGUtPmNv bG9yX3BsYW5lWzBdLnggPSBzcmNfeDsKKwlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ueSA9 IHNyY195OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2k5eHhfcGxhbmVfY2hlY2so c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCSBzdHJ1Y3QgaW50ZWxfcGxh bmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0 b19pbnRlbF9wbGFuZShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7CisJaW50IHJldDsKKworCXJl dCA9IGNodl9wbGFuZV9jaGVja19yb3RhdGlvbihwbGFuZV9zdGF0ZSk7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCXJldCA9IGludGVsX2F0b21pY19wbGFuZV9jaGVja19jbGlwcGluZyhw bGFuZV9zdGF0ZSwgY3J0Y19zdGF0ZSwKKwkJCQkJCURSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElO RywKKwkJCQkJCURSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORywKKwkJCQkJCWk5eHhfcGxhbmVf aGFzX3dpbmRvd2luZyhwbGFuZSkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQg PSBpOXh4X2NoZWNrX3BsYW5lX3N1cmZhY2UocGxhbmVfc3RhdGUpOworCWlmIChyZXQpCisJCXJl dHVybiByZXQ7CisKKwlpZiAoIXBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUpCisJCXJldHVybiAw OworCisJcmV0ID0gaW50ZWxfcGxhbmVfY2hlY2tfc3JjX2Nvb3JkaW5hdGVzKHBsYW5lX3N0YXRl KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcGxhbmVfc3RhdGUtPmN0bCA9IGk5eHhf cGxhbmVfY3RsKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgdTMyIGk5eHhfcGxhbmVfY3RsX2NydGMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNydGNfc3RhdGUpCit7CisJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9j cnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7CisJdTMyIGRzcGNudHIgPSAwOworCisJ aWYgKGNydGNfc3RhdGUtPmdhbW1hX2VuYWJsZSkKKwkJZHNwY250ciB8PSBESVNQUExBTkVfR0FN TUFfRU5BQkxFOworCisJaWYgKGNydGNfc3RhdGUtPmNzY19lbmFibGUpCisJCWRzcGNudHIgfD0g RElTUFBMQU5FX1BJUEVfQ1NDX0VOQUJMRTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwg NSkKKwkJZHNwY250ciB8PSBESVNQUExBTkVfU0VMX1BJUEUoY3J0Yy0+cGlwZSk7CisKKwlyZXR1 cm4gZHNwY250cjsKK30KKworc3RhdGljIHZvaWQgaTl4eF9wbGFuZV9yYXRpbyhjb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGlu dGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKKwkJCSAgICAgdW5zaWduZWQgaW50ICpudW0s IHVuc2lnbmVkIGludCAqZGVuKQoreworCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi ID0gcGxhbmVfc3RhdGUtPmh3LmZiOworCXVuc2lnbmVkIGludCBjcHAgPSBmYi0+Zm9ybWF0LT5j cHBbMF07CisKKwkvKgorCSAqIGc0eCBic3BlYyBzYXlzIDY0YnBwIHBpeGVsIHJhdGUgY2FuJ3Qg ZXhjZWVkIDgwJQorCSAqIG9mIGNkY2xrIHdoZW4gdGhlIHNwcml0ZSBwbGFuZSBpcyBlbmFibGVk IG9uIHRoZQorCSAqIHNhbWUgcGlwZS4gaWxrL3NuYiBic3BlYyBzYXlzIDY0YnBwIHBpeGVsIHJh dGUgaXMKKwkgKiBuZXZlciBhbGxvd2VkIHRvIGV4Y2VlZCA4MCUgb2YgY2RjbGsuIExldCdzIGp1 c3QgZ28KKwkgKiB3aXRoIHRoZSBpbGsvc25iIGxpbWl0IGFsd2F5cy4KKwkgKi8KKwlpZiAoY3Bw ID09IDgpIHsKKwkJKm51bSA9IDEwOworCQkqZGVuID0gODsKKwl9IGVsc2UgeworCQkqbnVtID0g MTsKKwkJKmRlbiA9IDE7CisJfQorfQorCitzdGF0aWMgaW50IGk5eHhfcGxhbmVfbWluX2NkY2xr KGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJCWNvbnN0IHN0 cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJdW5zaWduZWQgaW50IHBp eGVsX3JhdGU7CisJdW5zaWduZWQgaW50IG51bSwgZGVuOworCisJLyoKKwkgKiBOb3RlIHRoYXQg Y3J0Y19zdGF0ZS0+cGl4ZWxfcmF0ZSBhY2NvdW50cyBmb3IgYm90aAorCSAqIGhvcml6b250YWwg YW5kIHZlcnRpY2FsIHBhbmVsIGZpdHRlciBkb3duc2NhbGluZyBmYWN0b3JzLgorCSAqIFByZS1I U1cgYnNwZWMgdGVsbHMgdXMgdG8gb25seSBjb25zaWRlciB0aGUgaG9yaXpvbnRhbAorCSAqIGRv d25zY2FsaW5nIGZhY3RvciBoZXJlLiBXZSBpZ25vcmUgdGhhdCBhbmQganVzdCBjb25zaWRlcgor CSAqIGJvdGggZm9yIHNpbXBsaWNpdHkuCisJICovCisJcGl4ZWxfcmF0ZSA9IGNydGNfc3RhdGUt PnBpeGVsX3JhdGU7CisKKwlpOXh4X3BsYW5lX3JhdGlvKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRl LCAmbnVtLCAmZGVuKTsKKworCS8qIHR3byBwaXhlbHMgcGVyIGNsb2NrIHdpdGggZG91YmxlIHdp ZGUgcGlwZSAqLworCWlmIChjcnRjX3N0YXRlLT5kb3VibGVfd2lkZSkKKwkJZGVuICo9IDI7CisK KwlyZXR1cm4gRElWX1JPVU5EX1VQKHBpeGVsX3JhdGUgKiBudW0sIGRlbik7Cit9CisKK3N0YXRp YyB2b2lkIGk5eHhfdXBkYXRlX3BsYW5lKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCisJCQkg ICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCSAgICAg IGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwor CWVudW0gaTl4eF9wbGFuZV9pZCBpOXh4X3BsYW5lID0gcGxhbmUtPmk5eHhfcGxhbmU7CisJdTMy IGxpbmVhcl9vZmZzZXQ7CisJaW50IHggPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ueDsK KwlpbnQgeSA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS55OworCWludCBjcnRjX3ggPSBw bGFuZV9zdGF0ZS0+dWFwaS5kc3QueDE7CisJaW50IGNydGNfeSA9IHBsYW5lX3N0YXRlLT51YXBp LmRzdC55MTsKKwlpbnQgY3J0Y193ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBp LmRzdCk7CisJaW50IGNydGNfaCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVhcGku ZHN0KTsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCXUzMiBkc3BhZGRyX29mZnNldDsKKwl1 MzIgZHNwY250cjsKKworCWRzcGNudHIgPSBwbGFuZV9zdGF0ZS0+Y3RsIHwgaTl4eF9wbGFuZV9j dGxfY3J0YyhjcnRjX3N0YXRlKTsKKworCWxpbmVhcl9vZmZzZXQgPSBpbnRlbF9mYl94eV90b19s aW5lYXIoeCwgeSwgcGxhbmVfc3RhdGUsIDApOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikg Pj0gNCkKKwkJZHNwYWRkcl9vZmZzZXQgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ub2Zm c2V0OworCWVsc2UKKwkJZHNwYWRkcl9vZmZzZXQgPSBsaW5lYXJfb2Zmc2V0OworCisJc3Bpbl9s b2NrX2lycXNhdmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOworCisJaW50ZWxf ZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUFNUUklERShpOXh4X3BsYW5lKSwKKwkJCSAgcGxhbmVf c3RhdGUtPmNvbG9yX3BsYW5lWzBdLnN0cmlkZSk7CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA8IDQpIHsKKwkJLyoKKwkJICogUExBTkVfQSBkb2Vzbid0IGFjdHVhbGx5IGhhdmUgYSBmdWxs IHdpbmRvdworCQkgKiBnZW5lcmF0b3IgYnV0IGxldCdzIGFzc3VtZSB3ZSBzdGlsbCBuZWVkIHRv CisJCSAqIHByb2dyYW0gd2hhdGV2ZXIgaXMgdGhlcmUuCisJCSAqLworCQlpbnRlbF9kZV93cml0 ZV9mdyhkZXZfcHJpdiwgRFNQUE9TKGk5eHhfcGxhbmUpLAorCQkJCSAgKGNydGNfeSA8PCAxNikg fCBjcnRjX3gpOworCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQU0laRShpOXh4X3Bs YW5lKSwKKwkJCQkgICgoY3J0Y19oIC0gMSkgPDwgMTYpIHwgKGNydGNfdyAtIDEpKTsKKwl9IGVs c2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpICYmIGk5eHhfcGxhbmUgPT0gUExBTkVfQikg eworCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUFJJTVBPUyhpOXh4X3BsYW5lKSwKKwkJ CQkgIChjcnRjX3kgPDwgMTYpIHwgY3J0Y194KTsKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3By aXYsIFBSSU1TSVpFKGk5eHhfcGxhbmUpLAorCQkJCSAgKChjcnRjX2ggLSAxKSA8PCAxNikgfCAo Y3J0Y193IC0gMSkpOworCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUFJJTUNOU1RBTFBI QShpOXh4X3BsYW5lKSwgMCk7CisJfQorCisJaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpIHx8IElT X0JST0FEV0VMTChkZXZfcHJpdikpIHsKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERT UE9GRlNFVChpOXh4X3BsYW5lKSwKKwkJCQkgICh5IDw8IDE2KSB8IHgpOworCX0gZWxzZSBpZiAo SU5URUxfR0VOKGRldl9wcml2KSA+PSA0KSB7CisJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2 LCBEU1BMSU5PRkYoaTl4eF9wbGFuZSksCisJCQkJICBsaW5lYXJfb2Zmc2V0KTsKKwkJaW50ZWxf ZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUFRJTEVPRkYoaTl4eF9wbGFuZSksCisJCQkJICAoeSA8 PCAxNikgfCB4KTsKKwl9CisKKwkvKgorCSAqIFRoZSBjb250cm9sIHJlZ2lzdGVyIHNlbGYtYXJt cyBpZiB0aGUgcGxhbmUgd2FzIHByZXZpb3VzbHkKKwkgKiBkaXNhYmxlZC4gVHJ5IHRvIG1ha2Ug dGhlIHBsYW5lIGVuYWJsZSBhdG9taWMgYnkgd3JpdGluZworCSAqIHRoZSBjb250cm9sIHJlZ2lz dGVyIGp1c3QgYmVmb3JlIHRoZSBzdXJmYWNlIHJlZ2lzdGVyLgorCSAqLworCWludGVsX2RlX3dy aXRlX2Z3KGRldl9wcml2LCBEU1BDTlRSKGk5eHhfcGxhbmUpLCBkc3BjbnRyKTsKKwlpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA+PSA0KQorCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQ U1VSRihpOXh4X3BsYW5lKSwKKwkJCQkgIGludGVsX3BsYW5lX2dndHRfb2Zmc2V0KHBsYW5lX3N0 YXRlKSArIGRzcGFkZHJfb2Zmc2V0KTsKKwllbHNlCisJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9w cml2LCBEU1BBRERSKGk5eHhfcGxhbmUpLAorCQkJCSAgaW50ZWxfcGxhbmVfZ2d0dF9vZmZzZXQo cGxhbmVfc3RhdGUpICsgZHNwYWRkcl9vZmZzZXQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGk5 eHhfZGlzYWJsZV9wbGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAorCQkJICAgICAgIGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQoreworCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKKwllbnVt IGk5eHhfcGxhbmVfaWQgaTl4eF9wbGFuZSA9IHBsYW5lLT5pOXh4X3BsYW5lOworCXVuc2lnbmVk IGxvbmcgaXJxZmxhZ3M7CisJdTMyIGRzcGNudHI7CisKKwkvKgorCSAqIERTUENOVFIgcGlwZSBn YW1tYSBlbmFibGUgb24gZzR4KyBhbmQgcGlwZSBjc2MKKwkgKiBlbmFibGUgb24gaWxrKyBhZmZl Y3QgdGhlIHBpcGUgYm90dG9tIGNvbG9yIGFzCisJICogd2VsbCwgc28gd2UgbXVzdCBjb25maWd1 cmUgdGhlbSBldmVuIGlmIHRoZSBwbGFuZQorCSAqIGlzIGRpc2FibGVkLgorCSAqCisJICogT24g cHJlLWc0eCB0aGVyZSBpcyBubyB3YXkgdG8gZ2FtbWEgY29ycmVjdCB0aGUKKwkgKiBwaXBlIGJv dHRvbSBjb2xvciBidXQgd2UnbGwga2VlcCBvbiBkb2luZyB0aGlzCisJICogYW55d2F5IHNvIHRo YXQgdGhlIGNydGMgc3RhdGUgcmVhZG91dCB3b3JrcyBjb3JyZWN0bHkuCisJICovCisJZHNwY250 ciA9IGk5eHhfcGxhbmVfY3RsX2NydGMoY3J0Y19zdGF0ZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2 ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7CisKKwlpbnRlbF9kZV93cml0ZV9m dyhkZXZfcHJpdiwgRFNQQ05UUihpOXh4X3BsYW5lKSwgZHNwY250cik7CisJaWYgKElOVEVMX0dF TihkZXZfcHJpdikgPj0gNCkKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUFNVUkYo aTl4eF9wbGFuZSksIDApOworCWVsc2UKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERT UEFERFIoaTl4eF9wbGFuZSksIDApOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3By aXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cit9CisKK3N0YXRpYyBib29sIGk5eHhfcGxhbmVf Z2V0X2h3X3N0YXRlKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCisJCQkJICAgIGVudW0gcGlw ZSAqcGlwZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KHBsYW5lLT5iYXNlLmRldik7CisJZW51bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBwb3dl cl9kb21haW47CisJZW51bSBpOXh4X3BsYW5lX2lkIGk5eHhfcGxhbmUgPSBwbGFuZS0+aTl4eF9w bGFuZTsKKwlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKKwlib29sIHJldDsKKwl1MzIgdmFsOwor CisJLyoKKwkgKiBOb3QgMTAwJSBjb3JyZWN0IGZvciBwbGFuZXMgdGhhdCBjYW4gbW92ZSBiZXR3 ZWVuIHBpcGVzLAorCSAqIGJ1dCB0aGF0J3Mgb25seSB0aGUgY2FzZSBmb3IgZ2VuMi00IHdoaWNo IGRvbid0IGhhdmUgYW55CisJICogZGlzcGxheSBwb3dlciB3ZWxscy4KKwkgKi8KKwlwb3dlcl9k b21haW4gPSBQT1dFUl9ET01BSU5fUElQRShwbGFuZS0+cGlwZSk7CisJd2FrZXJlZiA9IGludGVs X2Rpc3BsYXlfcG93ZXJfZ2V0X2lmX2VuYWJsZWQoZGV2X3ByaXYsIHBvd2VyX2RvbWFpbik7CisJ aWYgKCF3YWtlcmVmKQorCQlyZXR1cm4gZmFsc2U7CisKKwl2YWwgPSBpbnRlbF9kZV9yZWFkKGRl dl9wcml2LCBEU1BDTlRSKGk5eHhfcGxhbmUpKTsKKworCXJldCA9IHZhbCAmIERJU1BMQVlfUExB TkVfRU5BQkxFOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNSkKKwkJKnBpcGUgPSBw bGFuZS0+cGlwZTsKKwllbHNlCisJCSpwaXBlID0gKHZhbCAmIERJU1BQTEFORV9TRUxfUElQRV9N QVNLKSA+PgorCQkJRElTUFBMQU5FX1NFTF9QSVBFX1NISUZUOworCisJaW50ZWxfZGlzcGxheV9w b3dlcl9wdXQoZGV2X3ByaXYsIHBvd2VyX2RvbWFpbiwgd2FrZXJlZik7CisKKwlyZXR1cm4gcmV0 OworfQorCit1bnNpZ25lZCBpbnQKK2k5eHhfcGxhbmVfbWF4X3N0cmlkZShzdHJ1Y3QgaW50ZWxf cGxhbmUgKnBsYW5lLAorCQkgICAgICB1MzIgcGl4ZWxfZm9ybWF0LCB1NjQgbW9kaWZpZXIsCisJ CSAgICAgIHVuc2lnbmVkIGludCByb3RhdGlvbikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7CisKKwlpZiAoIUhBU19HTUNI KGRldl9wcml2KSkgeworCQlyZXR1cm4gMzIqMTAyNDsKKwl9IGVsc2UgaWYgKElOVEVMX0dFTihk ZXZfcHJpdikgPj0gNCkgeworCQlpZiAobW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1hfVElM RUQpCisJCQlyZXR1cm4gMTYqMTAyNDsKKwkJZWxzZQorCQkJcmV0dXJuIDMyKjEwMjQ7CisJfSBl bHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDMpIHsKKwkJaWYgKG1vZGlmaWVyID09IEk5 MTVfRk9STUFUX01PRF9YX1RJTEVEKQorCQkJcmV0dXJuIDgqMTAyNDsKKwkJZWxzZQorCQkJcmV0 dXJuIDE2KjEwMjQ7CisJfSBlbHNlIHsKKwkJaWYgKHBsYW5lLT5pOXh4X3BsYW5lID09IFBMQU5F X0MpCisJCQlyZXR1cm4gNCoxMDI0OworCQllbHNlCisJCQlyZXR1cm4gOCoxMDI0OworCX0KK30K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgaTk2NV9wbGFuZV9mdW5jcyA9 IHsKKwkudXBkYXRlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lLAorCS5k aXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKKwkuZGVzdHJv eSA9IGludGVsX3BsYW5lX2Rlc3Ryb3ksCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBpbnRl bF9wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gaW50ZWxf cGxhbmVfZGVzdHJveV9zdGF0ZSwKKwkuZm9ybWF0X21vZF9zdXBwb3J0ZWQgPSBpOTY1X3BsYW5l X2Zvcm1hdF9tb2Rfc3VwcG9ydGVkLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxh bmVfZnVuY3MgaTh4eF9wbGFuZV9mdW5jcyA9IHsKKwkudXBkYXRlX3BsYW5lID0gZHJtX2F0b21p Y19oZWxwZXJfdXBkYXRlX3BsYW5lLAorCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxw ZXJfZGlzYWJsZV9wbGFuZSwKKwkuZGVzdHJveSA9IGludGVsX3BsYW5lX2Rlc3Ryb3ksCisJLmF0 b21pY19kdXBsaWNhdGVfc3RhdGUgPSBpbnRlbF9wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCisJLmF0 b21pY19kZXN0cm95X3N0YXRlID0gaW50ZWxfcGxhbmVfZGVzdHJveV9zdGF0ZSwKKwkuZm9ybWF0 X21vZF9zdXBwb3J0ZWQgPSBpOHh4X3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkLAorfTsKKwor c3RydWN0IGludGVsX3BsYW5lICoKK2ludGVsX3ByaW1hcnlfcGxhbmVfY3JlYXRlKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUpCit7CisJc3RydWN0IGlu dGVsX3BsYW5lICpwbGFuZTsKKwljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzICpwbGFuZV9m dW5jczsKKwl1bnNpZ25lZCBpbnQgc3VwcG9ydGVkX3JvdGF0aW9uczsKKwljb25zdCB1MzIgKmZv cm1hdHM7CisJaW50IG51bV9mb3JtYXRzOworCWludCByZXQsIHpwb3M7CisKKwlpZiAoSU5URUxf R0VOKGRldl9wcml2KSA+PSA5KQorCQlyZXR1cm4gc2tsX3VuaXZlcnNhbF9wbGFuZV9jcmVhdGUo ZGV2X3ByaXYsIHBpcGUsCisJCQkJCQkgIFBMQU5FX1BSSU1BUlkpOworCisJcGxhbmUgPSBpbnRl bF9wbGFuZV9hbGxvYygpOworCWlmIChJU19FUlIocGxhbmUpKQorCQlyZXR1cm4gcGxhbmU7CisK KwlwbGFuZS0+cGlwZSA9IHBpcGU7CisJLyoKKwkgKiBPbiBnZW4yLzMgb25seSBwbGFuZSBBIGNh biBkbyBGQkMsIGJ1dCB0aGUgcGFuZWwgZml0dGVyIGFuZCBMVkRTCisJICogcG9ydCBpcyBob29r ZWQgdG8gcGlwZSBCLiBIZW5jZSB3ZSB3YW50IHBsYW5lIEEgZmVlZGluZyBwaXBlIEIuCisJICov CisJaWYgKEhBU19GQkMoZGV2X3ByaXYpICYmIElOVEVMX0dFTihkZXZfcHJpdikgPCA0ICYmCisJ ICAgIElOVEVMX05VTV9QSVBFUyhkZXZfcHJpdikgPT0gMikKKwkJcGxhbmUtPmk5eHhfcGxhbmUg PSAoZW51bSBpOXh4X3BsYW5lX2lkKSAhcGlwZTsKKwllbHNlCisJCXBsYW5lLT5pOXh4X3BsYW5l ID0gKGVudW0gaTl4eF9wbGFuZV9pZCkgcGlwZTsKKwlwbGFuZS0+aWQgPSBQTEFORV9QUklNQVJZ OworCXBsYW5lLT5mcm9udGJ1ZmZlcl9iaXQgPSBJTlRFTF9GUk9OVEJVRkZFUihwaXBlLCBwbGFu ZS0+aWQpOworCisJcGxhbmUtPmhhc19mYmMgPSBpOXh4X3BsYW5lX2hhc19mYmMoZGV2X3ByaXYs IHBsYW5lLT5pOXh4X3BsYW5lKTsKKwlpZiAocGxhbmUtPmhhc19mYmMpIHsKKwkJc3RydWN0IGlu dGVsX2ZiYyAqZmJjID0gJmRldl9wcml2LT5mYmM7CisKKwkJZmJjLT5wb3NzaWJsZV9mcmFtZWJ1 ZmZlcl9iaXRzIHw9IHBsYW5lLT5mcm9udGJ1ZmZlcl9iaXQ7CisJfQorCisJaWYgKElTX1ZBTExF WVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7CisJCWZvcm1hdHMg PSB2bHZfcHJpbWFyeV9mb3JtYXRzOworCQludW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUodmx2X3By aW1hcnlfZm9ybWF0cyk7CisJfSBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpIHsK KwkJLyoKKwkJICogV2FGUDE2R2FtbWFFbmFibGluZzppdmIKKwkJICogIldvcmthcm91bmQgOiBX aGVuIHVzaW5nIHRoZSA2NC1iaXQgZm9ybWF0LCB0aGUgcGxhbmUKKwkJICogIG91dHB1dCBvbiBl YWNoIGNvbG9yIGNoYW5uZWwgaGFzIG9uZSBxdWFydGVyIGFtcGxpdHVkZS4KKwkJICogIEl0IGNh biBiZSBicm91Z2h0IHVwIHRvIGZ1bGwgYW1wbGl0dWRlIGJ5IHVzaW5nIHBpcGUKKwkJICogIGdh bW1hIGNvcnJlY3Rpb24gb3IgcGlwZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uIHRvCisJCSAqICBt dWx0aXBseSB0aGUgcGxhbmUgb3V0cHV0IGJ5IGZvdXIuIgorCQkgKgorCQkgKiBUaGVyZSBpcyBu byBkZWRpY2F0ZWQgcGxhbmUgZ2FtbWEgZm9yIHRoZSBwcmltYXJ5IHBsYW5lLAorCQkgKiBhbmQg dXNpbmcgdGhlIHBpcGUgZ2FtbWEvY3NjIGNvdWxkIGNvbmZsaWN0IHdpdGggb3RoZXIKKwkJICog cGxhbmVzLCBzbyB3ZSBjaG9vc2Ugbm90IHRvIGV4cG9zZSBmcDE2IG9uIElWQiBwcmltYXJ5CisJ CSAqIHBsYW5lcy4gSFNXIHByaW1hcnkgcGxhbmVzIG5vIGxvbmdlciBoYXZlIHRoaXMgcHJvYmxl bS4KKwkJICovCisJCWlmIChJU19JVllCUklER0UoZGV2X3ByaXYpKSB7CisJCQlmb3JtYXRzID0g aXZiX3ByaW1hcnlfZm9ybWF0czsKKwkJCW51bV9mb3JtYXRzID0gQVJSQVlfU0laRShpdmJfcHJp bWFyeV9mb3JtYXRzKTsKKwkJfSBlbHNlIHsKKwkJCWZvcm1hdHMgPSBpOTY1X3ByaW1hcnlfZm9y bWF0czsKKwkJCW51bV9mb3JtYXRzID0gQVJSQVlfU0laRShpOTY1X3ByaW1hcnlfZm9ybWF0cyk7 CisJCX0KKwl9IGVsc2UgeworCQlmb3JtYXRzID0gaTh4eF9wcmltYXJ5X2Zvcm1hdHM7CisJCW51 bV9mb3JtYXRzID0gQVJSQVlfU0laRShpOHh4X3ByaW1hcnlfZm9ybWF0cyk7CisJfQorCisJaWYg KElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkKKwkJcGxhbmVfZnVuY3MgPSAmaTk2NV9wbGFuZV9m dW5jczsKKwllbHNlCisJCXBsYW5lX2Z1bmNzID0gJmk4eHhfcGxhbmVfZnVuY3M7CisKKwlpZiAo SVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCisJCXBs YW5lLT5taW5fY2RjbGsgPSB2bHZfcGxhbmVfbWluX2NkY2xrOworCWVsc2UgaWYgKElTX0JST0FE V0VMTChkZXZfcHJpdikgfHwgSVNfSEFTV0VMTChkZXZfcHJpdikpCisJCXBsYW5lLT5taW5fY2Rj bGsgPSBoc3dfcGxhbmVfbWluX2NkY2xrOworCWVsc2UgaWYgKElTX0lWWUJSSURHRShkZXZfcHJp dikpCisJCXBsYW5lLT5taW5fY2RjbGsgPSBpdmJfcGxhbmVfbWluX2NkY2xrOworCWVsc2UKKwkJ cGxhbmUtPm1pbl9jZGNsayA9IGk5eHhfcGxhbmVfbWluX2NkY2xrOworCisJcGxhbmUtPm1heF9z dHJpZGUgPSBpOXh4X3BsYW5lX21heF9zdHJpZGU7CisJcGxhbmUtPnVwZGF0ZV9wbGFuZSA9IGk5 eHhfdXBkYXRlX3BsYW5lOworCXBsYW5lLT5kaXNhYmxlX3BsYW5lID0gaTl4eF9kaXNhYmxlX3Bs YW5lOworCXBsYW5lLT5nZXRfaHdfc3RhdGUgPSBpOXh4X3BsYW5lX2dldF9od19zdGF0ZTsKKwlw bGFuZS0+Y2hlY2tfcGxhbmUgPSBpOXh4X3BsYW5lX2NoZWNrOworCisJaWYgKElOVEVMX0dFTihk ZXZfcHJpdikgPj0gNSB8fCBJU19HNFgoZGV2X3ByaXYpKQorCQlyZXQgPSBkcm1fdW5pdmVyc2Fs X3BsYW5lX2luaXQoJmRldl9wcml2LT5kcm0sICZwbGFuZS0+YmFzZSwKKwkJCQkJICAgICAgIDAs IHBsYW5lX2Z1bmNzLAorCQkJCQkgICAgICAgZm9ybWF0cywgbnVtX2Zvcm1hdHMsCisJCQkJCSAg ICAgICBpOXh4X2Zvcm1hdF9tb2RpZmllcnMsCisJCQkJCSAgICAgICBEUk1fUExBTkVfVFlQRV9Q UklNQVJZLAorCQkJCQkgICAgICAgInByaW1hcnkgJWMiLCBwaXBlX25hbWUocGlwZSkpOworCWVs c2UKKwkJcmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KCZkZXZfcHJpdi0+ZHJtLCAmcGxh bmUtPmJhc2UsCisJCQkJCSAgICAgICAwLCBwbGFuZV9mdW5jcywKKwkJCQkJICAgICAgIGZvcm1h dHMsIG51bV9mb3JtYXRzLAorCQkJCQkgICAgICAgaTl4eF9mb3JtYXRfbW9kaWZpZXJzLAorCQkJ CQkgICAgICAgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSwKKwkJCQkJICAgICAgICJwbGFuZSAlYyIs CisJCQkJCSAgICAgICBwbGFuZV9uYW1lKHBsYW5lLT5pOXh4X3BsYW5lKSk7CisJaWYgKHJldCkK KwkJZ290byBmYWlsOworCisJaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpICYmIHBpcGUgPT0g UElQRV9CKSB7CisJCXN1cHBvcnRlZF9yb3RhdGlvbnMgPQorCQkJRFJNX01PREVfUk9UQVRFXzAg fCBEUk1fTU9ERV9ST1RBVEVfMTgwIHwKKwkJCURSTV9NT0RFX1JFRkxFQ1RfWDsKKwl9IGVsc2Ug aWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkgeworCQlzdXBwb3J0ZWRfcm90YXRpb25zID0K KwkJCURSTV9NT0RFX1JPVEFURV8wIHwgRFJNX01PREVfUk9UQVRFXzE4MDsKKwl9IGVsc2Ugewor CQlzdXBwb3J0ZWRfcm90YXRpb25zID0gRFJNX01PREVfUk9UQVRFXzA7CisJfQorCisJaWYgKElO VEVMX0dFTihkZXZfcHJpdikgPj0gNCkKKwkJZHJtX3BsYW5lX2NyZWF0ZV9yb3RhdGlvbl9wcm9w ZXJ0eSgmcGxhbmUtPmJhc2UsCisJCQkJCQkgICBEUk1fTU9ERV9ST1RBVEVfMCwKKwkJCQkJCSAg IHN1cHBvcnRlZF9yb3RhdGlvbnMpOworCisJenBvcyA9IDA7CisJZHJtX3BsYW5lX2NyZWF0ZV96 cG9zX2ltbXV0YWJsZV9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UsIHpwb3MpOworCisJZHJtX3BsYW5l X2hlbHBlcl9hZGQoJnBsYW5lLT5iYXNlLCAmaW50ZWxfcGxhbmVfaGVscGVyX2Z1bmNzKTsKKwor CXJldHVybiBwbGFuZTsKKworZmFpbDoKKwlpbnRlbF9wbGFuZV9mcmVlKHBsYW5lKTsKKworCXJl dHVybiBFUlJfUFRSKHJldCk7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaTl4eF9wbGFuZS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pOXh4 X3BsYW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hM2EwZTM2 MGRhNGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2k5 eHhfcGxhbmUuaApAQCAtMCwwICsxLDIxIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog TUlUICovCisvKgorICogQ29weXJpZ2h0IMKpIDIwMjAgSW50ZWwgQ29ycG9yYXRpb24KKyAqLwor CisjaWZuZGVmIF9JOVhYX1BMQU5FX0hfCisjZGVmaW5lIF9JOVhYX1BMQU5FX0hfCisKK2VudW0g cGlwZTsKK3N0cnVjdCBkcm1faTkxNV9wcml2YXRlOworc3RydWN0IGludGVsX3BsYW5lOworCit1 bnNpZ25lZCBpbnQgaTl4eF9wbGFuZV9tYXhfc3RyaWRlKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxh bmUsCisJCQkJICAgdTMyIHBpeGVsX2Zvcm1hdCwgdTY0IG1vZGlmaWVyLAorCQkJCSAgIHVuc2ln bmVkIGludCByb3RhdGlvbik7CitpbnQgaTl4eF9jaGVja19wbGFuZV9zdXJmYWNlKHN0cnVjdCBp bnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOworCitzdHJ1Y3QgaW50ZWxfcGxhbmUgKgor aW50ZWxfcHJpbWFyeV9wbGFuZV9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LCBlbnVtIHBpcGUgcGlwZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2Rpc3BsYXkuYwppbmRleCAyODg1NTg0NGY4ZGUuLjE0ZTcxNGZiM2I0OSAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKQEAgLTg3 LDU2ICs4Nyw3IEBACiAjaW5jbHVkZSAiaW50ZWxfc3ByaXRlLmgiCiAjaW5jbHVkZSAiaW50ZWxf dGMuaCIKICNpbmNsdWRlICJpbnRlbF92Z2EuaCIKLQotLyogUHJpbWFyeSBwbGFuZSBmb3JtYXRz IGZvciBnZW4gPD0gMyAqLwotc3RhdGljIGNvbnN0IHUzMiBpOHh4X3ByaW1hcnlfZm9ybWF0c1td ID0gewotCURSTV9GT1JNQVRfQzgsCi0JRFJNX0ZPUk1BVF9YUkdCMTU1NSwKLQlEUk1fRk9STUFU X1JHQjU2NSwKLQlEUk1fRk9STUFUX1hSR0I4ODg4LAotfTsKLQotLyogUHJpbWFyeSBwbGFuZSBm b3JtYXRzIGZvciBpdmIgKG5vIGZwMTYgZHVlIHRvIGh3IGlzc3VlKSAqLwotc3RhdGljIGNvbnN0 IHUzMiBpdmJfcHJpbWFyeV9mb3JtYXRzW10gPSB7Ci0JRFJNX0ZPUk1BVF9DOCwKLQlEUk1fRk9S TUFUX1JHQjU2NSwKLQlEUk1fRk9STUFUX1hSR0I4ODg4LAotCURSTV9GT1JNQVRfWEJHUjg4ODgs Ci0JRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMCwKLQlEUk1fRk9STUFUX1hCR1IyMTAxMDEwLAotfTsK LQotLyogUHJpbWFyeSBwbGFuZSBmb3JtYXRzIGZvciBnZW4gPj0gNCwgZXhjZXB0IGl2YiAqLwot c3RhdGljIGNvbnN0IHUzMiBpOTY1X3ByaW1hcnlfZm9ybWF0c1tdID0gewotCURSTV9GT1JNQVRf QzgsCi0JRFJNX0ZPUk1BVF9SR0I1NjUsCi0JRFJNX0ZPUk1BVF9YUkdCODg4OCwKLQlEUk1fRk9S TUFUX1hCR1I4ODg4LAotCURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCi0JRFJNX0ZPUk1BVF9YQkdS MjEwMTAxMCwKLQlEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkYsCi19OwotCi0vKiBQcmltYXJ5IHBs YW5lIGZvcm1hdHMgZm9yIHZsdi9jaHYgKi8KLXN0YXRpYyBjb25zdCB1MzIgdmx2X3ByaW1hcnlf Zm9ybWF0c1tdID0gewotCURSTV9GT1JNQVRfQzgsCi0JRFJNX0ZPUk1BVF9SR0I1NjUsCi0JRFJN X0ZPUk1BVF9YUkdCODg4OCwKLQlEUk1fRk9STUFUX1hCR1I4ODg4LAotCURSTV9GT1JNQVRfQVJH Qjg4ODgsCi0JRFJNX0ZPUk1BVF9BQkdSODg4OCwKLQlEUk1fRk9STUFUX1hSR0IyMTAxMDEwLAot CURSTV9GT1JNQVRfWEJHUjIxMDEwMTAsCi0JRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMCwKLQlEUk1f Rk9STUFUX0FCR1IyMTAxMDEwLAotCURSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RiwKLX07Ci0KLXN0 YXRpYyBjb25zdCB1NjQgaTl4eF9mb3JtYXRfbW9kaWZpZXJzW10gPSB7Ci0JSTkxNV9GT1JNQVRf TU9EX1hfVElMRUQsCi0JRFJNX0ZPUk1BVF9NT0RfTElORUFSLAotCURSTV9GT1JNQVRfTU9EX0lO VkFMSUQKLX07CisjaW5jbHVkZSAiaTl4eF9wbGFuZS5oIgogCiBzdGF0aWMgdm9pZCBpOXh4X2Ny dGNfY2xvY2tfZ2V0KHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAogCQkJCXN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpwaXBlX2NvbmZpZyk7CkBAIC00MDQ3LDQyMiArMzk5OCw2IEBAIGludCBza2xf Y2hlY2tfcGxhbmVfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRl KQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpOXh4X3BsYW5lX3JhdGlvKGNvbnN0IHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkJICAgICBjb25zdCBzdHJ1Y3Qg aW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAotCQkJICAgICB1bnNpZ25lZCBpbnQgKm51 bSwgdW5zaWduZWQgaW50ICpkZW4pCi17Ci0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Ci0JdW5zaWduZWQgaW50IGNwcCA9IGZiLT5mb3JtYXQt PmNwcFswXTsKLQotCS8qCi0JICogZzR4IGJzcGVjIHNheXMgNjRicHAgcGl4ZWwgcmF0ZSBjYW4n dCBleGNlZWQgODAlCi0JICogb2YgY2RjbGsgd2hlbiB0aGUgc3ByaXRlIHBsYW5lIGlzIGVuYWJs ZWQgb24gdGhlCi0JICogc2FtZSBwaXBlLiBpbGsvc25iIGJzcGVjIHNheXMgNjRicHAgcGl4ZWwg cmF0ZSBpcwotCSAqIG5ldmVyIGFsbG93ZWQgdG8gZXhjZWVkIDgwJSBvZiBjZGNsay4gTGV0J3Mg anVzdCBnbwotCSAqIHdpdGggdGhlIGlsay9zbmIgbGltaXQgYWx3YXlzLgotCSAqLwotCWlmIChj cHAgPT0gOCkgewotCQkqbnVtID0gMTA7Ci0JCSpkZW4gPSA4OwotCX0gZWxzZSB7Ci0JCSpudW0g PSAxOwotCQkqZGVuID0gMTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgaTl4eF9wbGFuZV9taW5fY2Rj bGsoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCQkJY29uc3Qg c3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQl1bnNpZ25lZCBpbnQg cGl4ZWxfcmF0ZTsKLQl1bnNpZ25lZCBpbnQgbnVtLCBkZW47Ci0KLQkvKgotCSAqIE5vdGUgdGhh dCBjcnRjX3N0YXRlLT5waXhlbF9yYXRlIGFjY291bnRzIGZvciBib3RoCi0JICogaG9yaXpvbnRh bCBhbmQgdmVydGljYWwgcGFuZWwgZml0dGVyIGRvd25zY2FsaW5nIGZhY3RvcnMuCi0JICogUHJl LUhTVyBic3BlYyB0ZWxscyB1cyB0byBvbmx5IGNvbnNpZGVyIHRoZSBob3Jpem9udGFsCi0JICog ZG93bnNjYWxpbmcgZmFjdG9yIGhlcmUuIFdlIGlnbm9yZSB0aGF0IGFuZCBqdXN0IGNvbnNpZGVy Ci0JICogYm90aCBmb3Igc2ltcGxpY2l0eS4KLQkgKi8KLQlwaXhlbF9yYXRlID0gY3J0Y19zdGF0 ZS0+cGl4ZWxfcmF0ZTsKLQotCWk5eHhfcGxhbmVfcmF0aW8oY3J0Y19zdGF0ZSwgcGxhbmVfc3Rh dGUsICZudW0sICZkZW4pOwotCi0JLyogdHdvIHBpeGVscyBwZXIgY2xvY2sgd2l0aCBkb3VibGUg d2lkZSBwaXBlICovCi0JaWYgKGNydGNfc3RhdGUtPmRvdWJsZV93aWRlKQotCQlkZW4gKj0gMjsK LQotCXJldHVybiBESVZfUk9VTkRfVVAocGl4ZWxfcmF0ZSAqIG51bSwgZGVuKTsKLX0KLQotdW5z aWduZWQgaW50Ci1pOXh4X3BsYW5lX21heF9zdHJpZGUoc3RydWN0IGludGVsX3BsYW5lICpwbGFu ZSwKLQkJICAgICAgdTMyIHBpeGVsX2Zvcm1hdCwgdTY0IG1vZGlmaWVyLAotCQkgICAgICB1bnNp Z25lZCBpbnQgcm90YXRpb24pCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwotCi0JaWYgKCFIQVNfR01DSChkZXZfcHJpdikp IHsKLQkJcmV0dXJuIDMyKjEwMjQ7Ci0JfSBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49 IDQpIHsKLQkJaWYgKG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9YX1RJTEVEKQotCQkJcmV0 dXJuIDE2KjEwMjQ7Ci0JCWVsc2UKLQkJCXJldHVybiAzMioxMDI0OwotCX0gZWxzZSBpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA+PSAzKSB7Ci0JCWlmIChtb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9N T0RfWF9USUxFRCkKLQkJCXJldHVybiA4KjEwMjQ7Ci0JCWVsc2UKLQkJCXJldHVybiAxNioxMDI0 OwotCX0gZWxzZSB7Ci0JCWlmIChwbGFuZS0+aTl4eF9wbGFuZSA9PSBQTEFORV9DKQotCQkJcmV0 dXJuIDQqMTAyNDsKLQkJZWxzZQotCQkJcmV0dXJuIDgqMTAyNDsKLQl9Ci19Ci0KLXN0YXRpYyB1 MzIgaTl4eF9wbGFuZV9jdGxfY3J0Yyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0 Y19zdGF0ZS0+dWFwaS5jcnRjKTsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKLQl1MzIgZHNwY250ciA9IDA7Ci0KLQlpZiAoY3J0 Y19zdGF0ZS0+Z2FtbWFfZW5hYmxlKQotCQlkc3BjbnRyIHw9IERJU1BQTEFORV9HQU1NQV9FTkFC TEU7Ci0KLQlpZiAoY3J0Y19zdGF0ZS0+Y3NjX2VuYWJsZSkKLQkJZHNwY250ciB8PSBESVNQUExB TkVfUElQRV9DU0NfRU5BQkxFOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCA1KQotCQlk c3BjbnRyIHw9IERJU1BQTEFORV9TRUxfUElQRShjcnRjLT5waXBlKTsKLQotCXJldHVybiBkc3Bj bnRyOwotfQotCi1zdGF0aWMgdTMyIGk5eHhfcGxhbmVfY3RsKGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 Ci0JCXRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7Ci0JY29uc3Qgc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Ci0JdW5zaWduZWQgaW50 IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9uOwotCXUzMiBkc3BjbnRyOwotCi0J ZHNwY250ciA9IERJU1BMQVlfUExBTkVfRU5BQkxFOwotCi0JaWYgKElTX0c0WChkZXZfcHJpdikg fHwgSVNfR0VOKGRldl9wcml2LCA1KSB8fAotCSAgICBJU19HRU4oZGV2X3ByaXYsIDYpIHx8IElT X0lWWUJSSURHRShkZXZfcHJpdikpCi0JCWRzcGNudHIgfD0gRElTUFBMQU5FX1RSSUNLTEVfRkVF RF9ESVNBQkxFOwotCi0Jc3dpdGNoIChmYi0+Zm9ybWF0LT5mb3JtYXQpIHsKLQljYXNlIERSTV9G T1JNQVRfQzg6Ci0JCWRzcGNudHIgfD0gRElTUFBMQU5FXzhCUFA7Ci0JCWJyZWFrOwotCWNhc2Ug RFJNX0ZPUk1BVF9YUkdCMTU1NToKLQkJZHNwY250ciB8PSBESVNQUExBTkVfQkdSWDU1NTsKLQkJ YnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFUX0FSR0IxNTU1OgotCQlkc3BjbnRyIHw9IERJU1BQTEFO RV9CR1JBNTU1OwotCQlicmVhazsKLQljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgotCQlkc3BjbnRy IHw9IERJU1BQTEFORV9CR1JYNTY1OwotCQlicmVhazsKLQljYXNlIERSTV9GT1JNQVRfWFJHQjg4 ODg6Ci0JCWRzcGNudHIgfD0gRElTUFBMQU5FX0JHUlg4ODg7Ci0JCWJyZWFrOwotCWNhc2UgRFJN X0ZPUk1BVF9YQkdSODg4ODoKLQkJZHNwY250ciB8PSBESVNQUExBTkVfUkdCWDg4ODsKLQkJYnJl YWs7Ci0JY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4OgotCQlkc3BjbnRyIHw9IERJU1BQTEFORV9C R1JBODg4OwotCQlicmVhazsKLQljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6Ci0JCWRzcGNudHIg fD0gRElTUFBMQU5FX1JHQkE4ODg7Ci0JCWJyZWFrOwotCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMjEw MTAxMDoKLQkJZHNwY250ciB8PSBESVNQUExBTkVfQkdSWDEwMTAxMDsKLQkJYnJlYWs7Ci0JY2Fz ZSBEUk1fRk9STUFUX1hCR1IyMTAxMDEwOgotCQlkc3BjbnRyIHw9IERJU1BQTEFORV9SR0JYMTAx MDEwOwotCQlicmVhazsKLQljYXNlIERSTV9GT1JNQVRfQVJHQjIxMDEwMTA6Ci0JCWRzcGNudHIg fD0gRElTUFBMQU5FX0JHUkExMDEwMTA7Ci0JCWJyZWFrOwotCWNhc2UgRFJNX0ZPUk1BVF9BQkdS MjEwMTAxMDoKLQkJZHNwY250ciB8PSBESVNQUExBTkVfUkdCQTEwMTAxMDsKLQkJYnJlYWs7Ci0J Y2FzZSBEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkY6Ci0JCWRzcGNudHIgfD0gRElTUFBMQU5FX1JH QlgxNjE2MTY7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCU1JU1NJTkdfQ0FTRShmYi0+Zm9ybWF0 LT5mb3JtYXQpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+ PSA0ICYmCi0JICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCkKLQkJ ZHNwY250ciB8PSBESVNQUExBTkVfVElMRUQ7Ci0KLQlpZiAocm90YXRpb24gJiBEUk1fTU9ERV9S T1RBVEVfMTgwKQotCQlkc3BjbnRyIHw9IERJU1BQTEFORV9ST1RBVEVfMTgwOwotCi0JaWYgKHJv dGF0aW9uICYgRFJNX01PREVfUkVGTEVDVF9YKQotCQlkc3BjbnRyIHw9IERJU1BQTEFORV9NSVJS T1I7Ci0KLQlyZXR1cm4gZHNwY250cjsKLX0KLQotaW50IGk5eHhfY2hlY2tfcGxhbmVfc3VyZmFj ZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9Ci0JCXRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxh bmUtPmRldik7Ci0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0 ZS0+aHcuZmI7Ci0JaW50IHNyY194LCBzcmNfeSwgc3JjX3c7Ci0JdTMyIG9mZnNldDsKLQlpbnQg cmV0OwotCi0JcmV0ID0gaW50ZWxfcGxhbmVfY29tcHV0ZV9ndHQocGxhbmVfc3RhdGUpOwotCWlm IChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAoIXBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUp Ci0JCXJldHVybiAwOwotCi0Jc3JjX3cgPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVh cGkuc3JjKSA+PiAxNjsKLQlzcmNfeCA9IHBsYW5lX3N0YXRlLT51YXBpLnNyYy54MSA+PiAxNjsK LQlzcmNfeSA9IHBsYW5lX3N0YXRlLT51YXBpLnNyYy55MSA+PiAxNjsKLQotCS8qIFVuZG9jdW1l bnRlZCBoYXJkd2FyZSBsaW1pdCBvbiBpOTY1L2c0eC92bHYvY2h2ICovCi0JaWYgKEhBU19HTUNI KGRldl9wcml2KSAmJiBmYi0+Zm9ybWF0LT5jcHBbMF0gPT0gOCAmJiBzcmNfdyA+IDIwNDgpCi0J CXJldHVybiAtRUlOVkFMOwotCi0JaW50ZWxfYWRkX2ZiX29mZnNldHMoJnNyY194LCAmc3JjX3ks IHBsYW5lX3N0YXRlLCAwKTsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpCi0JCW9m ZnNldCA9IGludGVsX3BsYW5lX2NvbXB1dGVfYWxpZ25lZF9vZmZzZXQoJnNyY194LCAmc3JjX3ks Ci0JCQkJCQkJICAgIHBsYW5lX3N0YXRlLCAwKTsKLQllbHNlCi0JCW9mZnNldCA9IDA7Ci0KLQkv KgotCSAqIFB1dCB0aGUgZmluYWwgY29vcmRpbmF0ZXMgYmFjayBzbyB0aGF0IHRoZSBzcmMKLQkg KiBjb29yZGluYXRlIGNoZWNrcyB3aWxsIHNlZSB0aGUgcmlnaHQgdmFsdWVzLgotCSAqLwotCWRy bV9yZWN0X3RyYW5zbGF0ZV90bygmcGxhbmVfc3RhdGUtPnVhcGkuc3JjLAotCQkJICAgICAgc3Jj X3ggPDwgMTYsIHNyY195IDw8IDE2KTsKLQotCS8qIEhTVy9CRFcgZG8gdGhpcyBhdXRvbWFnaWNh bGx5IGluIGhhcmR3YXJlICovCi0JaWYgKCFJU19IQVNXRUxMKGRldl9wcml2KSAmJiAhSVNfQlJP QURXRUxMKGRldl9wcml2KSkgewotCQl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0 ZS0+aHcucm90YXRpb247Ci0JCWludCBzcmNfdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0 ZS0+dWFwaS5zcmMpID4+IDE2OwotCQlpbnQgc3JjX2ggPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5l X3N0YXRlLT51YXBpLnNyYykgPj4gMTY7Ci0KLQkJaWYgKHJvdGF0aW9uICYgRFJNX01PREVfUk9U QVRFXzE4MCkgewotCQkJc3JjX3ggKz0gc3JjX3cgLSAxOwotCQkJc3JjX3kgKz0gc3JjX2ggLSAx OwotCQl9IGVsc2UgaWYgKHJvdGF0aW9uICYgRFJNX01PREVfUkVGTEVDVF9YKSB7Ci0JCQlzcmNf eCArPSBzcmNfdyAtIDE7Ci0JCX0KLQl9Ci0KLQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0u b2Zmc2V0ID0gb2Zmc2V0OwotCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS54ID0gc3JjX3g7 Ci0JcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnkgPSBzcmNfeTsKLQotCXJldHVybiAwOwot fQotCi1zdGF0aWMgYm9vbCBpOXh4X3BsYW5lX2hhc193aW5kb3dpbmcoc3RydWN0IGludGVsX3Bs YW5lICpwbGFuZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KHBsYW5lLT5iYXNlLmRldik7Ci0JZW51bSBpOXh4X3BsYW5lX2lkIGk5eHhfcGxhbmUgPSBw bGFuZS0+aTl4eF9wbGFuZTsKLQotCWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkKLQkJcmV0 dXJuIGk5eHhfcGxhbmUgPT0gUExBTkVfQjsKLQllbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYp ID49IDUgfHwgSVNfRzRYKGRldl9wcml2KSkKLQkJcmV0dXJuIGZhbHNlOwotCWVsc2UgaWYgKElT X0dFTihkZXZfcHJpdiwgNCkpCi0JCXJldHVybiBpOXh4X3BsYW5lID09IFBMQU5FX0M7Ci0JZWxz ZQotCQlyZXR1cm4gaTl4eF9wbGFuZSA9PSBQTEFORV9CIHx8Ci0JCQlpOXh4X3BsYW5lID09IFBM QU5FX0M7Ci19Ci0KLXN0YXRpYyBpbnQKLWk5eHhfcGxhbmVfY2hlY2soc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCSBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlKQotewotCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShw bGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7Ci0JaW50IHJldDsKLQotCXJldCA9IGNodl9wbGFuZV9j aGVja19yb3RhdGlvbihwbGFuZV9zdGF0ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQot CXJldCA9IGludGVsX2F0b21pY19wbGFuZV9jaGVja19jbGlwcGluZyhwbGFuZV9zdGF0ZSwgY3J0 Y19zdGF0ZSwKLQkJCQkJCURSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORywKLQkJCQkJCURSTV9Q TEFORV9IRUxQRVJfTk9fU0NBTElORywKLQkJCQkJCWk5eHhfcGxhbmVfaGFzX3dpbmRvd2luZyhw bGFuZSkpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBpOXh4X2NoZWNrX3Bs YW5lX3N1cmZhY2UocGxhbmVfc3RhdGUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlp ZiAoIXBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUpCi0JCXJldHVybiAwOwotCi0JcmV0ID0gaW50 ZWxfcGxhbmVfY2hlY2tfc3JjX2Nvb3JkaW5hdGVzKHBsYW5lX3N0YXRlKTsKLQlpZiAocmV0KQot CQlyZXR1cm4gcmV0OwotCi0JcGxhbmVfc3RhdGUtPmN0bCA9IGk5eHhfcGxhbmVfY3RsKGNydGNf c3RhdGUsIHBsYW5lX3N0YXRlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBpOXh4 X3VwZGF0ZV9wbGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAotCQkJICAgICAgY29uc3Qg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCQkgICAgICBjb25zdCBzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKLQllbnVtIGk5eHhf cGxhbmVfaWQgaTl4eF9wbGFuZSA9IHBsYW5lLT5pOXh4X3BsYW5lOwotCXUzMiBsaW5lYXJfb2Zm c2V0OwotCWludCB4ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLng7Ci0JaW50IHkgPSBw bGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ueTsKLQlpbnQgY3J0Y194ID0gcGxhbmVfc3RhdGUt PnVhcGkuZHN0LngxOwotCWludCBjcnRjX3kgPSBwbGFuZV9zdGF0ZS0+dWFwaS5kc3QueTE7Ci0J aW50IGNydGNfdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOwotCWlu dCBjcnRjX2ggPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7Ci0JdW5z aWduZWQgbG9uZyBpcnFmbGFnczsKLQl1MzIgZHNwYWRkcl9vZmZzZXQ7Ci0JdTMyIGRzcGNudHI7 Ci0KLQlkc3BjbnRyID0gcGxhbmVfc3RhdGUtPmN0bCB8IGk5eHhfcGxhbmVfY3RsX2NydGMoY3J0 Y19zdGF0ZSk7Ci0KLQlsaW5lYXJfb2Zmc2V0ID0gaW50ZWxfZmJfeHlfdG9fbGluZWFyKHgsIHks IHBsYW5lX3N0YXRlLCAwKTsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpCi0JCWRz cGFkZHJfb2Zmc2V0ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLm9mZnNldDsKLQllbHNl Ci0JCWRzcGFkZHJfb2Zmc2V0ID0gbGluZWFyX29mZnNldDsKLQotCXNwaW5fbG9ja19pcnFzYXZl KCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKLQotCWludGVsX2RlX3dyaXRlX2Z3 KGRldl9wcml2LCBEU1BTVFJJREUoaTl4eF9wbGFuZSksCi0JCQkgIHBsYW5lX3N0YXRlLT5jb2xv cl9wbGFuZVswXS5zdHJpZGUpOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCA0KSB7Ci0J CS8qCi0JCSAqIFBMQU5FX0EgZG9lc24ndCBhY3R1YWxseSBoYXZlIGEgZnVsbCB3aW5kb3cKLQkJ ICogZ2VuZXJhdG9yIGJ1dCBsZXQncyBhc3N1bWUgd2Ugc3RpbGwgbmVlZCB0bwotCQkgKiBwcm9n cmFtIHdoYXRldmVyIGlzIHRoZXJlLgotCQkgKi8KLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3By aXYsIERTUFBPUyhpOXh4X3BsYW5lKSwKLQkJCQkgIChjcnRjX3kgPDwgMTYpIHwgY3J0Y194KTsK LQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUFNJWkUoaTl4eF9wbGFuZSksCi0JCQkJ ICAoKGNydGNfaCAtIDEpIDw8IDE2KSB8IChjcnRjX3cgLSAxKSk7Ci0JfSBlbHNlIGlmIChJU19D SEVSUllWSUVXKGRldl9wcml2KSAmJiBpOXh4X3BsYW5lID09IFBMQU5FX0IpIHsKLQkJaW50ZWxf ZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBSSU1QT1MoaTl4eF9wbGFuZSksCi0JCQkJICAoY3J0Y195 IDw8IDE2KSB8IGNydGNfeCk7Ci0JCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQUklNU0la RShpOXh4X3BsYW5lKSwKLQkJCQkgICgoY3J0Y19oIC0gMSkgPDwgMTYpIHwgKGNydGNfdyAtIDEp KTsKLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBSSU1DTlNUQUxQSEEoaTl4eF9wbGFu ZSksIDApOwotCX0KLQotCWlmIChJU19IQVNXRUxMKGRldl9wcml2KSB8fCBJU19CUk9BRFdFTEwo ZGV2X3ByaXYpKSB7Ci0JCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BPRkZTRVQoaTl4 eF9wbGFuZSksCi0JCQkJICAoeSA8PCAxNikgfCB4KTsKLQl9IGVsc2UgaWYgKElOVEVMX0dFTihk ZXZfcHJpdikgPj0gNCkgewotCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQTElOT0ZG KGk5eHhfcGxhbmUpLAotCQkJCSAgbGluZWFyX29mZnNldCk7Ci0JCWludGVsX2RlX3dyaXRlX2Z3 KGRldl9wcml2LCBEU1BUSUxFT0ZGKGk5eHhfcGxhbmUpLAotCQkJCSAgKHkgPDwgMTYpIHwgeCk7 Ci0JfQotCi0JLyoKLQkgKiBUaGUgY29udHJvbCByZWdpc3RlciBzZWxmLWFybXMgaWYgdGhlIHBs YW5lIHdhcyBwcmV2aW91c2x5Ci0JICogZGlzYWJsZWQuIFRyeSB0byBtYWtlIHRoZSBwbGFuZSBl bmFibGUgYXRvbWljIGJ5IHdyaXRpbmcKLQkgKiB0aGUgY29udHJvbCByZWdpc3RlciBqdXN0IGJl Zm9yZSB0aGUgc3VyZmFjZSByZWdpc3Rlci4KLQkgKi8KLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZf cHJpdiwgRFNQQ05UUihpOXh4X3BsYW5lKSwgZHNwY250cik7Ci0JaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gNCkKLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUFNVUkYoaTl4eF9w bGFuZSksCi0JCQkJICBpbnRlbF9wbGFuZV9nZ3R0X29mZnNldChwbGFuZV9zdGF0ZSkgKyBkc3Bh ZGRyX29mZnNldCk7Ci0JZWxzZQotCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQQURE UihpOXh4X3BsYW5lKSwKLQkJCQkgIGludGVsX3BsYW5lX2dndHRfb2Zmc2V0KHBsYW5lX3N0YXRl KSArIGRzcGFkZHJfb2Zmc2V0KTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2 LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBpOXh4X2Rpc2FibGVf cGxhbmUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Ci0JZW51bSBpOXh4X3BsYW5l X2lkIGk5eHhfcGxhbmUgPSBwbGFuZS0+aTl4eF9wbGFuZTsKLQl1bnNpZ25lZCBsb25nIGlycWZs YWdzOwotCXUzMiBkc3BjbnRyOwotCi0JLyoKLQkgKiBEU1BDTlRSIHBpcGUgZ2FtbWEgZW5hYmxl IG9uIGc0eCsgYW5kIHBpcGUgY3NjCi0JICogZW5hYmxlIG9uIGlsaysgYWZmZWN0IHRoZSBwaXBl IGJvdHRvbSBjb2xvciBhcwotCSAqIHdlbGwsIHNvIHdlIG11c3QgY29uZmlndXJlIHRoZW0gZXZl biBpZiB0aGUgcGxhbmUKLQkgKiBpcyBkaXNhYmxlZC4KLQkgKgotCSAqIE9uIHByZS1nNHggdGhl cmUgaXMgbm8gd2F5IHRvIGdhbW1hIGNvcnJlY3QgdGhlCi0JICogcGlwZSBib3R0b20gY29sb3Ig YnV0IHdlJ2xsIGtlZXAgb24gZG9pbmcgdGhpcwotCSAqIGFueXdheSBzbyB0aGF0IHRoZSBjcnRj IHN0YXRlIHJlYWRvdXQgd29ya3MgY29ycmVjdGx5LgotCSAqLwotCWRzcGNudHIgPSBpOXh4X3Bs YW5lX2N0bF9jcnRjKGNydGNfc3RhdGUpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2 LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwotCi0JaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYs IERTUENOVFIoaTl4eF9wbGFuZSksIGRzcGNudHIpOwotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYp ID49IDQpCi0JCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BTVVJGKGk5eHhfcGxhbmUp LCAwKTsKLQllbHNlCi0JCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BBRERSKGk5eHhf cGxhbmUpLCAwKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51bmNvcmUu bG9jaywgaXJxZmxhZ3MpOwotfQotCi1zdGF0aWMgYm9vbCBpOXh4X3BsYW5lX2dldF9od19zdGF0 ZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAotCQkJCSAgICBlbnVtIHBpcGUgKnBpcGUpCi17 Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFz ZS5kZXYpOwotCWVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gcG93ZXJfZG9tYWluOwot CWVudW0gaTl4eF9wbGFuZV9pZCBpOXh4X3BsYW5lID0gcGxhbmUtPmk5eHhfcGxhbmU7Ci0JaW50 ZWxfd2FrZXJlZl90IHdha2VyZWY7Ci0JYm9vbCByZXQ7Ci0JdTMyIHZhbDsKLQotCS8qCi0JICog Tm90IDEwMCUgY29ycmVjdCBmb3IgcGxhbmVzIHRoYXQgY2FuIG1vdmUgYmV0d2VlbiBwaXBlcywK LQkgKiBidXQgdGhhdCdzIG9ubHkgdGhlIGNhc2UgZm9yIGdlbjItNCB3aGljaCBkb24ndCBoYXZl IGFueQotCSAqIGRpc3BsYXkgcG93ZXIgd2VsbHMuCi0JICovCi0JcG93ZXJfZG9tYWluID0gUE9X RVJfRE9NQUlOX1BJUEUocGxhbmUtPnBpcGUpOwotCXdha2VyZWYgPSBpbnRlbF9kaXNwbGF5X3Bv d2VyX2dldF9pZl9lbmFibGVkKGRldl9wcml2LCBwb3dlcl9kb21haW4pOwotCWlmICghd2FrZXJl ZikKLQkJcmV0dXJuIGZhbHNlOwotCi0JdmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgRFNQ Q05UUihpOXh4X3BsYW5lKSk7Ci0KLQlyZXQgPSB2YWwgJiBESVNQTEFZX1BMQU5FX0VOQUJMRTsK LQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDUpCi0JCSpwaXBlID0gcGxhbmUtPnBpcGU7 Ci0JZWxzZQotCQkqcGlwZSA9ICh2YWwgJiBESVNQUExBTkVfU0VMX1BJUEVfTUFTSykgPj4KLQkJ CURJU1BQTEFORV9TRUxfUElQRV9TSElGVDsKLQotCWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRl dl9wcml2LCBwb3dlcl9kb21haW4sIHdha2VyZWYpOwotCi0JcmV0dXJuIHJldDsKLX0KLQogc3Rh dGljIHZvaWQgc2tsX2RldGFjaF9zY2FsZXIoc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMs IGludCBpZCkKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfY3J0Yy0+YmFzZS5k ZXY7CkBAIC0xNjI1MCwyMjggKzE1Nzg1LDYgQEAgdm9pZCBpbnRlbF9wbGFuZV9kZXN0cm95KHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQogCWtmcmVlKHRvX2ludGVsX3BsYW5lKHBsYW5lKSk7CiB9 CiAKLXN0YXRpYyBib29sIGk4eHhfcGxhbmVfZm9ybWF0X21vZF9zdXBwb3J0ZWQoc3RydWN0IGRy bV9wbGFuZSAqX3BsYW5lLAotCQkJCQkgICAgdTMyIGZvcm1hdCwgdTY0IG1vZGlmaWVyKQotewot CXN3aXRjaCAobW9kaWZpZXIpIHsKLQljYXNlIERSTV9GT1JNQVRfTU9EX0xJTkVBUjoKLQljYXNl IEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4g ZmFsc2U7Ci0JfQotCi0Jc3dpdGNoIChmb3JtYXQpIHsKLQljYXNlIERSTV9GT1JNQVRfQzg6Ci0J Y2FzZSBEUk1fRk9STUFUX1JHQjU2NToKLQljYXNlIERSTV9GT1JNQVRfWFJHQjE1NTU6Ci0JY2Fz ZSBEUk1fRk9STUFUX1hSR0I4ODg4OgotCQlyZXR1cm4gbW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9N T0RfTElORUFSIHx8Ci0JCQltb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDsKLQlk ZWZhdWx0OgotCQlyZXR1cm4gZmFsc2U7Ci0JfQotfQotCi1zdGF0aWMgYm9vbCBpOTY1X3BsYW5l X2Zvcm1hdF9tb2Rfc3VwcG9ydGVkKHN0cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwKLQkJCQkJICAg IHUzMiBmb3JtYXQsIHU2NCBtb2RpZmllcikKLXsKLQlzd2l0Y2ggKG1vZGlmaWVyKSB7Ci0JY2Fz ZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDoK LQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXN3aXRjaCAoZm9y bWF0KSB7Ci0JY2FzZSBEUk1fRk9STUFUX0M4OgotCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6Ci0J Y2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKLQlj YXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4OgotCWNh c2UgRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMDoKLQljYXNlIERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6 Ci0JY2FzZSBEUk1fRk9STUFUX0FSR0IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMjEw MTAxMDoKLQljYXNlIERSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RjoKLQkJcmV0dXJuIG1vZGlmaWVy ID09IERSTV9GT1JNQVRfTU9EX0xJTkVBUiB8fAotCQkJbW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRf TU9EX1hfVElMRUQ7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIGZhbHNlOwotCX0KLX0KLQotc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgaTk2NV9wbGFuZV9mdW5jcyA9IHsKLQkudXBk YXRlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lLAotCS5kaXNhYmxlX3Bs YW5lID0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKLQkuZGVzdHJveSA9IGludGVs X3BsYW5lX2Rlc3Ryb3ksCi0JLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBpbnRlbF9wbGFuZV9k dXBsaWNhdGVfc3RhdGUsCi0JLmF0b21pY19kZXN0cm95X3N0YXRlID0gaW50ZWxfcGxhbmVfZGVz dHJveV9zdGF0ZSwKLQkuZm9ybWF0X21vZF9zdXBwb3J0ZWQgPSBpOTY1X3BsYW5lX2Zvcm1hdF9t b2Rfc3VwcG9ydGVkLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3Mg aTh4eF9wbGFuZV9mdW5jcyA9IHsKLQkudXBkYXRlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJf dXBkYXRlX3BsYW5lLAotCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJs ZV9wbGFuZSwKLQkuZGVzdHJveSA9IGludGVsX3BsYW5lX2Rlc3Ryb3ksCi0JLmF0b21pY19kdXBs aWNhdGVfc3RhdGUgPSBpbnRlbF9wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCi0JLmF0b21pY19kZXN0 cm95X3N0YXRlID0gaW50ZWxfcGxhbmVfZGVzdHJveV9zdGF0ZSwKLQkuZm9ybWF0X21vZF9zdXBw b3J0ZWQgPSBpOHh4X3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkLAotfTsKLQotc3RhdGljIGJv b2wgaTl4eF9wbGFuZV9oYXNfZmJjKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK LQkJCSAgICAgICBlbnVtIGk5eHhfcGxhbmVfaWQgaTl4eF9wbGFuZSkKLXsKLQlpZiAoIUhBU19G QkMoZGV2X3ByaXYpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoSVNfQlJPQURXRUxMKGRldl9w cml2KSB8fCBJU19IQVNXRUxMKGRldl9wcml2KSkKLQkJcmV0dXJuIGk5eHhfcGxhbmUgPT0gUExB TkVfQTsgLyogdGllZCB0byBwaXBlIEEgKi8KLQllbHNlIGlmIChJU19JVllCUklER0UoZGV2X3By aXYpKQotCQlyZXR1cm4gaTl4eF9wbGFuZSA9PSBQTEFORV9BIHx8IGk5eHhfcGxhbmUgPT0gUExB TkVfQiB8fAotCQkJaTl4eF9wbGFuZSA9PSBQTEFORV9DOwotCWVsc2UgaWYgKElOVEVMX0dFTihk ZXZfcHJpdikgPj0gNCkKLQkJcmV0dXJuIGk5eHhfcGxhbmUgPT0gUExBTkVfQSB8fCBpOXh4X3Bs YW5lID09IFBMQU5FX0I7Ci0JZWxzZQotCQlyZXR1cm4gaTl4eF9wbGFuZSA9PSBQTEFORV9BOwot fQotCi1zdGF0aWMgc3RydWN0IGludGVsX3BsYW5lICoKLWludGVsX3ByaW1hcnlfcGxhbmVfY3Jl YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUpCi17 Ci0Jc3RydWN0IGludGVsX3BsYW5lICpwbGFuZTsKLQljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1 bmNzICpwbGFuZV9mdW5jczsKLQl1bnNpZ25lZCBpbnQgc3VwcG9ydGVkX3JvdGF0aW9uczsKLQlj b25zdCB1MzIgKmZvcm1hdHM7Ci0JaW50IG51bV9mb3JtYXRzOwotCWludCByZXQsIHpwb3M7Ci0K LQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KQotCQlyZXR1cm4gc2tsX3VuaXZlcnNhbF9w bGFuZV9jcmVhdGUoZGV2X3ByaXYsIHBpcGUsCi0JCQkJCQkgIFBMQU5FX1BSSU1BUlkpOwotCi0J cGxhbmUgPSBpbnRlbF9wbGFuZV9hbGxvYygpOwotCWlmIChJU19FUlIocGxhbmUpKQotCQlyZXR1 cm4gcGxhbmU7Ci0KLQlwbGFuZS0+cGlwZSA9IHBpcGU7Ci0JLyoKLQkgKiBPbiBnZW4yLzMgb25s eSBwbGFuZSBBIGNhbiBkbyBGQkMsIGJ1dCB0aGUgcGFuZWwgZml0dGVyIGFuZCBMVkRTCi0JICog cG9ydCBpcyBob29rZWQgdG8gcGlwZSBCLiBIZW5jZSB3ZSB3YW50IHBsYW5lIEEgZmVlZGluZyBw aXBlIEIuCi0JICovCi0JaWYgKEhBU19GQkMoZGV2X3ByaXYpICYmIElOVEVMX0dFTihkZXZfcHJp dikgPCA0ICYmCi0JICAgIElOVEVMX05VTV9QSVBFUyhkZXZfcHJpdikgPT0gMikKLQkJcGxhbmUt Pmk5eHhfcGxhbmUgPSAoZW51bSBpOXh4X3BsYW5lX2lkKSAhcGlwZTsKLQllbHNlCi0JCXBsYW5l LT5pOXh4X3BsYW5lID0gKGVudW0gaTl4eF9wbGFuZV9pZCkgcGlwZTsKLQlwbGFuZS0+aWQgPSBQ TEFORV9QUklNQVJZOwotCXBsYW5lLT5mcm9udGJ1ZmZlcl9iaXQgPSBJTlRFTF9GUk9OVEJVRkZF UihwaXBlLCBwbGFuZS0+aWQpOwotCi0JcGxhbmUtPmhhc19mYmMgPSBpOXh4X3BsYW5lX2hhc19m YmMoZGV2X3ByaXYsIHBsYW5lLT5pOXh4X3BsYW5lKTsKLQlpZiAocGxhbmUtPmhhc19mYmMpIHsK LQkJc3RydWN0IGludGVsX2ZiYyAqZmJjID0gJmRldl9wcml2LT5mYmM7Ci0KLQkJZmJjLT5wb3Nz aWJsZV9mcmFtZWJ1ZmZlcl9iaXRzIHw9IHBsYW5lLT5mcm9udGJ1ZmZlcl9iaXQ7Ci0JfQotCi0J aWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7 Ci0JCWZvcm1hdHMgPSB2bHZfcHJpbWFyeV9mb3JtYXRzOwotCQludW1fZm9ybWF0cyA9IEFSUkFZ X1NJWkUodmx2X3ByaW1hcnlfZm9ybWF0cyk7Ci0JfSBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDQpIHsKLQkJLyoKLQkJICogV2FGUDE2R2FtbWFFbmFibGluZzppdmIKLQkJICogIldv cmthcm91bmQgOiBXaGVuIHVzaW5nIHRoZSA2NC1iaXQgZm9ybWF0LCB0aGUgcGxhbmUKLQkJICog IG91dHB1dCBvbiBlYWNoIGNvbG9yIGNoYW5uZWwgaGFzIG9uZSBxdWFydGVyIGFtcGxpdHVkZS4K LQkJICogIEl0IGNhbiBiZSBicm91Z2h0IHVwIHRvIGZ1bGwgYW1wbGl0dWRlIGJ5IHVzaW5nIHBp cGUKLQkJICogIGdhbW1hIGNvcnJlY3Rpb24gb3IgcGlwZSBjb2xvciBzcGFjZSBjb252ZXJzaW9u IHRvCi0JCSAqICBtdWx0aXBseSB0aGUgcGxhbmUgb3V0cHV0IGJ5IGZvdXIuIgotCQkgKgotCQkg KiBUaGVyZSBpcyBubyBkZWRpY2F0ZWQgcGxhbmUgZ2FtbWEgZm9yIHRoZSBwcmltYXJ5IHBsYW5l LAotCQkgKiBhbmQgdXNpbmcgdGhlIHBpcGUgZ2FtbWEvY3NjIGNvdWxkIGNvbmZsaWN0IHdpdGgg b3RoZXIKLQkJICogcGxhbmVzLCBzbyB3ZSBjaG9vc2Ugbm90IHRvIGV4cG9zZSBmcDE2IG9uIElW QiBwcmltYXJ5Ci0JCSAqIHBsYW5lcy4gSFNXIHByaW1hcnkgcGxhbmVzIG5vIGxvbmdlciBoYXZl IHRoaXMgcHJvYmxlbS4KLQkJICovCi0JCWlmIChJU19JVllCUklER0UoZGV2X3ByaXYpKSB7Ci0J CQlmb3JtYXRzID0gaXZiX3ByaW1hcnlfZm9ybWF0czsKLQkJCW51bV9mb3JtYXRzID0gQVJSQVlf U0laRShpdmJfcHJpbWFyeV9mb3JtYXRzKTsKLQkJfSBlbHNlIHsKLQkJCWZvcm1hdHMgPSBpOTY1 X3ByaW1hcnlfZm9ybWF0czsKLQkJCW51bV9mb3JtYXRzID0gQVJSQVlfU0laRShpOTY1X3ByaW1h cnlfZm9ybWF0cyk7Ci0JCX0KLQl9IGVsc2UgewotCQlmb3JtYXRzID0gaTh4eF9wcmltYXJ5X2Zv cm1hdHM7Ci0JCW51bV9mb3JtYXRzID0gQVJSQVlfU0laRShpOHh4X3ByaW1hcnlfZm9ybWF0cyk7 Ci0JfQotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkKLQkJcGxhbmVfZnVuY3MgPSAm aTk2NV9wbGFuZV9mdW5jczsKLQllbHNlCi0JCXBsYW5lX2Z1bmNzID0gJmk4eHhfcGxhbmVfZnVu Y3M7Ci0KLQlpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZf cHJpdikpCi0JCXBsYW5lLT5taW5fY2RjbGsgPSB2bHZfcGxhbmVfbWluX2NkY2xrOwotCWVsc2Ug aWYgKElTX0JST0FEV0VMTChkZXZfcHJpdikgfHwgSVNfSEFTV0VMTChkZXZfcHJpdikpCi0JCXBs YW5lLT5taW5fY2RjbGsgPSBoc3dfcGxhbmVfbWluX2NkY2xrOwotCWVsc2UgaWYgKElTX0lWWUJS SURHRShkZXZfcHJpdikpCi0JCXBsYW5lLT5taW5fY2RjbGsgPSBpdmJfcGxhbmVfbWluX2NkY2xr OwotCWVsc2UKLQkJcGxhbmUtPm1pbl9jZGNsayA9IGk5eHhfcGxhbmVfbWluX2NkY2xrOwotCi0J cGxhbmUtPm1heF9zdHJpZGUgPSBpOXh4X3BsYW5lX21heF9zdHJpZGU7Ci0JcGxhbmUtPnVwZGF0 ZV9wbGFuZSA9IGk5eHhfdXBkYXRlX3BsYW5lOwotCXBsYW5lLT5kaXNhYmxlX3BsYW5lID0gaTl4 eF9kaXNhYmxlX3BsYW5lOwotCXBsYW5lLT5nZXRfaHdfc3RhdGUgPSBpOXh4X3BsYW5lX2dldF9o d19zdGF0ZTsKLQlwbGFuZS0+Y2hlY2tfcGxhbmUgPSBpOXh4X3BsYW5lX2NoZWNrOwotCi0JaWYg KElOVEVMX0dFTihkZXZfcHJpdikgPj0gNSB8fCBJU19HNFgoZGV2X3ByaXYpKQotCQlyZXQgPSBk cm1fdW5pdmVyc2FsX3BsYW5lX2luaXQoJmRldl9wcml2LT5kcm0sICZwbGFuZS0+YmFzZSwKLQkJ CQkJICAgICAgIDAsIHBsYW5lX2Z1bmNzLAotCQkJCQkgICAgICAgZm9ybWF0cywgbnVtX2Zvcm1h dHMsCi0JCQkJCSAgICAgICBpOXh4X2Zvcm1hdF9tb2RpZmllcnMsCi0JCQkJCSAgICAgICBEUk1f UExBTkVfVFlQRV9QUklNQVJZLAotCQkJCQkgICAgICAgInByaW1hcnkgJWMiLCBwaXBlX25hbWUo cGlwZSkpOwotCWVsc2UKLQkJcmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KCZkZXZfcHJp di0+ZHJtLCAmcGxhbmUtPmJhc2UsCi0JCQkJCSAgICAgICAwLCBwbGFuZV9mdW5jcywKLQkJCQkJ ICAgICAgIGZvcm1hdHMsIG51bV9mb3JtYXRzLAotCQkJCQkgICAgICAgaTl4eF9mb3JtYXRfbW9k aWZpZXJzLAotCQkJCQkgICAgICAgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSwKLQkJCQkJICAgICAg ICJwbGFuZSAlYyIsCi0JCQkJCSAgICAgICBwbGFuZV9uYW1lKHBsYW5lLT5pOXh4X3BsYW5lKSk7 Ci0JaWYgKHJldCkKLQkJZ290byBmYWlsOwotCi0JaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYp ICYmIHBpcGUgPT0gUElQRV9CKSB7Ci0JCXN1cHBvcnRlZF9yb3RhdGlvbnMgPQotCQkJRFJNX01P REVfUk9UQVRFXzAgfCBEUk1fTU9ERV9ST1RBVEVfMTgwIHwKLQkJCURSTV9NT0RFX1JFRkxFQ1Rf WDsKLQl9IGVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkgewotCQlzdXBwb3J0ZWRf cm90YXRpb25zID0KLQkJCURSTV9NT0RFX1JPVEFURV8wIHwgRFJNX01PREVfUk9UQVRFXzE4MDsK LQl9IGVsc2UgewotCQlzdXBwb3J0ZWRfcm90YXRpb25zID0gRFJNX01PREVfUk9UQVRFXzA7Ci0J fQotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkKLQkJZHJtX3BsYW5lX2NyZWF0ZV9y b3RhdGlvbl9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UsCi0JCQkJCQkgICBEUk1fTU9ERV9ST1RBVEVf MCwKLQkJCQkJCSAgIHN1cHBvcnRlZF9yb3RhdGlvbnMpOwotCi0JenBvcyA9IDA7Ci0JZHJtX3Bs YW5lX2NyZWF0ZV96cG9zX2ltbXV0YWJsZV9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UsIHpwb3MpOwot Ci0JZHJtX3BsYW5lX2hlbHBlcl9hZGQoJnBsYW5lLT5iYXNlLCAmaW50ZWxfcGxhbmVfaGVscGVy X2Z1bmNzKTsKLQotCXJldHVybiBwbGFuZTsKLQotZmFpbDoKLQlpbnRlbF9wbGFuZV9mcmVlKHBs YW5lKTsKLQotCXJldHVybiBFUlJfUFRSKHJldCk7Ci19Ci0KIHN0YXRpYyBpbnQgaW50ZWxfY3J0 Y19sYXRlX3JlZ2lzdGVyKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIHsKIAlpbnRlbF9jcnRjX2Rl YnVnZnNfYWRkKGNydGMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9kaXNwbGF5LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rp c3BsYXkuaAppbmRleCA3MTdiMGU0MTYwZTkuLmY3ZTQ5YTM5YmQ5MiAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmgKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmgKQEAgLTYzMCwxMSArNjMwLDcgQEAg dTMyIHNrbF9wbGFuZV9jdGxfY3J0Yyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSk7CiB1MzIgc2tsX3BsYW5lX3N0cmlkZShjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVf c3RhdGUgKnBsYW5lX3N0YXRlLAogCQkgICAgIGludCBwbGFuZSk7CiBpbnQgc2tsX2NoZWNrX3Bs YW5lX3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSk7Ci1pbnQg aTl4eF9jaGVja19wbGFuZV9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVf c3RhdGUpOwogaW50IHNrbF9mb3JtYXRfdG9fZm91cmNjKGludCBmb3JtYXQsIGJvb2wgcmdiX29y ZGVyLCBib29sIGFscGhhKTsKLXVuc2lnbmVkIGludCBpOXh4X3BsYW5lX21heF9zdHJpZGUoc3Ry dWN0IGludGVsX3BsYW5lICpwbGFuZSwKLQkJCQkgICB1MzIgcGl4ZWxfZm9ybWF0LCB1NjQgbW9k aWZpZXIsCi0JCQkJICAgdW5zaWduZWQgaW50IHJvdGF0aW9uKTsKIGludCBiZHdfZ2V0X3BpcGVt aXNjX2JwcChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0Yyk7CiB1bnNpZ25lZCBpbnQgaW50ZWxfcGxh bmVfZmVuY2VfeV9vZmZzZXQoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf c3ByaXRlLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5jCmlu ZGV4IGI3ZTIwODgxNjA3NC4uY2YzNTg5ZmQwZGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJpbnRl bF9wc3IuaCIKICNpbmNsdWRlICJpbnRlbF9kc2kuaCIKICNpbmNsdWRlICJpbnRlbF9zcHJpdGUu aCIKKyNpbmNsdWRlICJpOXh4X3BsYW5lLmgiCiAKIGludCBpbnRlbF91c2Vjc190b19zY2FubGlu ZXMoY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUsCiAJCQkgICAg IGludCB1c2VjcykKLS0gCjIuMjcuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vaW50ZWwtZ2Z4Cg==