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 A5B0FC1B0E3 for ; Fri, 11 Dec 2020 07:29:45 +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 4CFC923B26 for ; Fri, 11 Dec 2020 07:29:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4CFC923B26 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 7FDBD6EC6B; Fri, 11 Dec 2020 07:29:40 +0000 (UTC) Received: from us-smtp-delivery-44.mimecast.com (us-smtp-delivery-44.mimecast.com [205.139.111.44]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7A44F6EC69 for ; Fri, 11 Dec 2020 07:29:34 +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-168-02JDhjKFOyuF_Q1MUUtlqg-1; Fri, 11 Dec 2020 02:29:31 -0500 X-MC-Unique: 02JDhjKFOyuF_Q1MUUtlqg-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id C1292107ACE4 for ; Fri, 11 Dec 2020 07:29:30 +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 06AFA60862 for ; Fri, 11 Dec 2020 07:29:29 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Fri, 11 Dec 2020 17:29:16 +1000 Message-Id: <20201211072922.19101-6-airlied@gmail.com> In-Reply-To: <20201211072922.19101-1-airlied@gmail.com> References: <20201211072922.19101-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: gmail.com Subject: [Intel-gfx] [PATCH 05/11] drm/i915: refactor some crtc code out of intel display. 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" RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClRoZXJlIG1heSBiZSBtb3Jl IGNydGMgY29kZSB0aGF0IGNhbiBiZSBwdWxsZWQgb3V0LCBidXQgdGhpcwppcyBhIGdvb2Qgc3Rh cnQuCgpSRkM6IG1heWJlIGNhbGwgdGhlIG5ldyBmaWxlIHNvbWV0aGluZyBkaWZmZXJlbnQKClNp Z25lZC1vZmYtYnk6IERhdmUgQWlybGllIDxhaXJsaWVkQHJlZGhhdC5jb20+Ci0tLQogZHJpdmVy cy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jcnRjLmMgICAgfCA5NTMgKysrKysrKysrKysrKysr KysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jcnRjLmggICAgfCAgMjAg KwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMgfCA5MzQgKy0t LS0tLS0tLS0tLS0tLS0tCiA0IGZpbGVzIGNoYW5nZWQsIDk3NSBpbnNlcnRpb25zKCspLCA5MzMg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9jcnRjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2NydGMuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggOThhMzViOTM5 MDUyLi5mZmVjMjU3NzAyYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2Vm aWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCkBAIC0xOTYsNiArMTk2LDcg QEAgaTkxNS15ICs9IFwKIAlkaXNwbGF5L2ludGVsX2NvbG9yLm8gXAogCWRpc3BsYXkvaW50ZWxf Y29tYm9fcGh5Lm8gXAogCWRpc3BsYXkvaW50ZWxfY29ubmVjdG9yLm8gXAorCWRpc3BsYXkvaW50 ZWxfY3J0Yy5vIFwKIAlkaXNwbGF5L2ludGVsX2Nzci5vIFwKIAlkaXNwbGF5L2ludGVsX2N1cnNv ci5vIFwKIAlkaXNwbGF5L2ludGVsX2Rpc3BsYXkubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfY3J0Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MC4uZDI2YmViOGFkOWVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9jcnRjLmMKQEAgLTAsMCArMSw5NTMgQEAKKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBNSVQKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jwb3JhdGlv bgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5o PgorCisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bV9mb3VyY2MuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bV9wbGFuZV9oZWxwZXIuaD4KKworI2luY2x1ZGUgImludGVsX2F0b21pYy5oIgorI2luY2x1ZGUg ImludGVsX2F0b21pY19wbGFuZS5oIgorI2luY2x1ZGUgImludGVsX2NvbG9yLmgiCisjaW5jbHVk ZSAiaW50ZWxfY3J0Yy5oIgorI2luY2x1ZGUgImludGVsX2N1cnNvci5oIgorI2luY2x1ZGUgImlu dGVsX2Rpc3BsYXlfZGVidWdmcy5oIgorI2luY2x1ZGUgImludGVsX2Rpc3BsYXlfdHlwZXMuaCIK KyNpbmNsdWRlICJpbnRlbF9waXBlX2NyYy5oIgorI2luY2x1ZGUgImludGVsX3Nwcml0ZS5oIgor CisvKiBQcmltYXJ5IHBsYW5lIGZvcm1hdHMgZm9yIGdlbiA8PSAzICovCitzdGF0aWMgY29uc3Qg dTMyIGk4eHhfcHJpbWFyeV9mb3JtYXRzW10gPSB7CisJRFJNX0ZPUk1BVF9DOCwKKwlEUk1fRk9S TUFUX1hSR0IxNTU1LAorCURSTV9GT1JNQVRfUkdCNTY1LAorCURSTV9GT1JNQVRfWFJHQjg4ODgs Cit9OworCisvKiBQcmltYXJ5IHBsYW5lIGZvcm1hdHMgZm9yIGl2YiAobm8gZnAxNiBkdWUgdG8g aHcgaXNzdWUpICovCitzdGF0aWMgY29uc3QgdTMyIGl2Yl9wcmltYXJ5X2Zvcm1hdHNbXSA9IHsK KwlEUk1fRk9STUFUX0M4LAorCURSTV9GT1JNQVRfUkdCNTY1LAorCURSTV9GT1JNQVRfWFJHQjg4 ODgsCisJRFJNX0ZPUk1BVF9YQkdSODg4OCwKKwlEUk1fRk9STUFUX1hSR0IyMTAxMDEwLAorCURS TV9GT1JNQVRfWEJHUjIxMDEwMTAsCit9OworCisvKiBQcmltYXJ5IHBsYW5lIGZvcm1hdHMgZm9y IGdlbiA+PSA0LCBleGNlcHQgaXZiICovCitzdGF0aWMgY29uc3QgdTMyIGk5NjVfcHJpbWFyeV9m b3JtYXRzW10gPSB7CisJRFJNX0ZPUk1BVF9DOCwKKwlEUk1fRk9STUFUX1JHQjU2NSwKKwlEUk1f Rk9STUFUX1hSR0I4ODg4LAorCURSTV9GT1JNQVRfWEJHUjg4ODgsCisJRFJNX0ZPUk1BVF9YUkdC MjEwMTAxMCwKKwlEUk1fRk9STUFUX1hCR1IyMTAxMDEwLAorCURSTV9GT1JNQVRfWEJHUjE2MTYx NjE2RiwKK307CisKKy8qIFByaW1hcnkgcGxhbmUgZm9ybWF0cyBmb3Igdmx2L2NodiAqLworc3Rh dGljIGNvbnN0IHUzMiB2bHZfcHJpbWFyeV9mb3JtYXRzW10gPSB7CisJRFJNX0ZPUk1BVF9DOCwK KwlEUk1fRk9STUFUX1JHQjU2NSwKKwlEUk1fRk9STUFUX1hSR0I4ODg4LAorCURSTV9GT1JNQVRf WEJHUjg4ODgsCisJRFJNX0ZPUk1BVF9BUkdCODg4OCwKKwlEUk1fRk9STUFUX0FCR1I4ODg4LAor CURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwKKwlEUk1f Rk9STUFUX0FSR0IyMTAxMDEwLAorCURSTV9GT1JNQVRfQUJHUjIxMDEwMTAsCisJRFJNX0ZPUk1B VF9YQkdSMTYxNjE2MTZGLAorfTsKKworc3RhdGljIGNvbnN0IHU2NCBpOXh4X2Zvcm1hdF9tb2Rp ZmllcnNbXSA9IHsKKwlJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwKKwlEUk1fRk9STUFUX01PRF9M SU5FQVIsCisJRFJNX0ZPUk1BVF9NT0RfSU5WQUxJRAorfTsKKworc3RhdGljIGJvb2wgaTh4eF9w bGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUsCisJCQkJ CSAgICB1MzIgZm9ybWF0LCB1NjQgbW9kaWZpZXIpCit7CisJc3dpdGNoIChtb2RpZmllcikgewor CWNhc2UgRFJNX0ZPUk1BVF9NT0RfTElORUFSOgorCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElM RUQ6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlzd2l0Y2gg KGZvcm1hdCkgeworCWNhc2UgRFJNX0ZPUk1BVF9DODoKKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1 OgorCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTU1NToKKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6 CisJCXJldHVybiBtb2RpZmllciA9PSBEUk1fRk9STUFUX01PRF9MSU5FQVIgfHwKKwkJCW1vZGlm aWVyID09IEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxz ZTsKKwl9Cit9CisKK3N0YXRpYyBib29sIGk5NjVfcGxhbmVfZm9ybWF0X21vZF9zdXBwb3J0ZWQo c3RydWN0IGRybV9wbGFuZSAqX3BsYW5lLAorCQkJCQkgICAgdTMyIGZvcm1hdCwgdTY0IG1vZGlm aWVyKQoreworCXN3aXRjaCAobW9kaWZpZXIpIHsKKwljYXNlIERSTV9GT1JNQVRfTU9EX0xJTkVB UjoKKwljYXNlIEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOgorCQlicmVhazsKKwlkZWZhdWx0Ogor CQlyZXR1cm4gZmFsc2U7CisJfQorCisJc3dpdGNoIChmb3JtYXQpIHsKKwljYXNlIERSTV9GT1JN QVRfQzg6CisJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4 ODg6CisJY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4 ODoKKwljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX1hSR0IyMTAx MDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfQVJH QjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX0FCR1IyMTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1B VF9YQkdSMTYxNjE2MTZGOgorCQlyZXR1cm4gbW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfTElO RUFSIHx8CisJCQltb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDsKKwlkZWZhdWx0 OgorCQlyZXR1cm4gZmFsc2U7CisJfQorfQorCitzdGF0aWMgYm9vbCBpOXh4X3BsYW5lX2hhc19m YmMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJICAgICAgIGVudW0gaTl4 eF9wbGFuZV9pZCBpOXh4X3BsYW5lKQoreworCWlmICghSEFTX0ZCQyhkZXZfcHJpdikpCisJCXJl dHVybiBmYWxzZTsKKworCWlmIChJU19CUk9BRFdFTEwoZGV2X3ByaXYpIHx8IElTX0hBU1dFTEwo ZGV2X3ByaXYpKQorCQlyZXR1cm4gaTl4eF9wbGFuZSA9PSBQTEFORV9BOyAvKiB0aWVkIHRvIHBp cGUgQSAqLworCWVsc2UgaWYgKElTX0lWWUJSSURHRShkZXZfcHJpdikpCisJCXJldHVybiBpOXh4 X3BsYW5lID09IFBMQU5FX0EgfHwgaTl4eF9wbGFuZSA9PSBQTEFORV9CIHx8CisJCQlpOXh4X3Bs YW5lID09IFBMQU5FX0M7CisJZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0KQorCQly ZXR1cm4gaTl4eF9wbGFuZSA9PSBQTEFORV9BIHx8IGk5eHhfcGxhbmUgPT0gUExBTkVfQjsKKwll bHNlCisJCXJldHVybiBpOXh4X3BsYW5lID09IFBMQU5FX0E7Cit9CisKK3N0YXRpYyB2b2lkIGFz c2VydF92YmxhbmtfZGlzYWJsZWQoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCWlmIChJOTE1 X1NUQVRFX1dBUk5fT04oZHJtX2NydGNfdmJsYW5rX2dldChjcnRjKSA9PSAwKSkKKwkJZHJtX2Ny dGNfdmJsYW5rX3B1dChjcnRjKTsKK30KKwordTMyIGludGVsX2NydGNfZ2V0X3ZibGFua19jb3Vu dGVyKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBjcnRjLT5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX3ZibGFua19jcnRjICp2YmxhbmsgPSAmZGV2 LT52YmxhbmtbZHJtX2NydGNfaW5kZXgoJmNydGMtPmJhc2UpXTsKKworCWlmICghdmJsYW5rLT5t YXhfdmJsYW5rX2NvdW50KQorCQlyZXR1cm4gKHUzMilkcm1fY3J0Y19hY2N1cmF0ZV92Ymxhbmtf Y291bnQoJmNydGMtPmJhc2UpOworCisJcmV0dXJuIGNydGMtPmJhc2UuZnVuY3MtPmdldF92Ymxh bmtfY291bnRlcigmY3J0Yy0+YmFzZSk7Cit9CisKK3UzMiBpbnRlbF9jcnRjX21heF92Ymxhbmtf Y291bnQoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjX3N0YXRlLT51YXBp LmNydGMtPmRldik7CisJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNy dGNfc3RhdGUtPnVhcGkuY3J0Yyk7CisJdTMyIG1vZGVfZmxhZ3MgPSBjcnRjLT5tb2RlX2ZsYWdz OworCisJLyoKKwkgKiBGcm9tIEdlbiAxMSwgSW4gY2FzZSBvZiBkc2kgY21kIG1vZGUsIGZyYW1l IGNvdW50ZXIgd291bGRudAorCSAqIGhhdmUgdXBkYXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIFRF LCBpZiB3ZSB3YW50IHRvIHVzZQorCSAqIHRoZSBodyBjb3VudGVyLCB0aGVuIHdlIHdvdWxkIGZp bmQgaXQgdXBkYXRlZCBpbiBvbmx5CisJICogdGhlIG5leHQgVEUsIGhlbmNlIHN3aXRjaGluZyB0 byBzdyBjb3VudGVyLgorCSAqLworCWlmIChtb2RlX2ZsYWdzICYgKEk5MTVfTU9ERV9GTEFHX0RT SV9VU0VfVEUwIHwgSTkxNV9NT0RFX0ZMQUdfRFNJX1VTRV9URTEpKQorCQlyZXR1cm4gMDsKKwor CS8qCisJICogT24gaTk2NWdtIHRoZSBoYXJkd2FyZSBmcmFtZSBjb3VudGVyIHJlYWRzCisJICog emVybyB3aGVuIHRoZSBUViBlbmNvZGVyIGlzIGVuYWJsZWQgOigKKwkgKi8KKwlpZiAoSVNfSTk2 NUdNKGRldl9wcml2KSAmJgorCSAgICAoY3J0Y19zdGF0ZS0+b3V0cHV0X3R5cGVzICYgQklUKElO VEVMX09VVFBVVF9UVk9VVCkpKQorCQlyZXR1cm4gMDsKKworCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDUgfHwgSVNfRzRYKGRldl9wcml2KSkKKwkJcmV0dXJuIDB4ZmZmZmZmZmY7IC8qIGZ1 bGwgMzIgYml0IGNvdW50ZXIgKi8KKwllbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDMp CisJCXJldHVybiAweGZmZmZmZjsgLyogb25seSAyNCBiaXRzIG9mIGZyYW1lIGNvdW50ICovCisJ ZWxzZQorCQlyZXR1cm4gMDsgLyogR2VuMiBkb2Vzbid0IGhhdmUgYSBoYXJkd2FyZSBmcmFtZSBj b3VudGVyICovCit9CisKK3ZvaWQgaW50ZWxfY3J0Y192Ymxhbmtfb24oY29uc3Qgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJc3RydWN0IGludGVsX2NydGMgKmNydGMg PSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7CisKKwlhc3NlcnRfdmJsYW5r X2Rpc2FibGVkKCZjcnRjLT5iYXNlKTsKKwlkcm1fY3J0Y19zZXRfbWF4X3ZibGFua19jb3VudCgm Y3J0Yy0+YmFzZSwKKwkJCQkgICAgICBpbnRlbF9jcnRjX21heF92YmxhbmtfY291bnQoY3J0Y19z dGF0ZSkpOworCWRybV9jcnRjX3ZibGFua19vbigmY3J0Yy0+YmFzZSk7Cit9CisKK3ZvaWQgaW50 ZWxfY3J0Y192Ymxhbmtfb2ZmKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlKQoreworCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0 YXRlLT51YXBpLmNydGMpOworCisJZHJtX2NydGNfdmJsYW5rX29mZigmY3J0Yy0+YmFzZSk7CisJ YXNzZXJ0X3ZibGFua19kaXNhYmxlZCgmY3J0Yy0+YmFzZSk7Cit9CisKK3N0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICppbnRlbF9jcnRjX3N0YXRlX2FsbG9jKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRj KQoreworCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOworCisJY3J0Y19zdGF0 ZSA9IGttYWxsb2Moc2l6ZW9mKCpjcnRjX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoY3J0 Y19zdGF0ZSkKKwkJaW50ZWxfY3J0Y19zdGF0ZV9yZXNldChjcnRjX3N0YXRlLCBjcnRjKTsKKwor CXJldHVybiBjcnRjX3N0YXRlOworfQorCit2b2lkIGludGVsX2NydGNfc3RhdGVfcmVzZXQoc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkgICAgc3RydWN0IGludGVsX2Ny dGMgKmNydGMpCit7CisJbWVtc2V0KGNydGNfc3RhdGUsIDAsIHNpemVvZigqY3J0Y19zdGF0ZSkp OworCisJX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX3N0YXRlX3Jlc2V0KCZjcnRjX3N0YXRlLT51 YXBpLCAmY3J0Yy0+YmFzZSk7CisKKwljcnRjX3N0YXRlLT5jcHVfdHJhbnNjb2RlciA9IElOVkFM SURfVFJBTlNDT0RFUjsKKwljcnRjX3N0YXRlLT5tYXN0ZXJfdHJhbnNjb2RlciA9IElOVkFMSURf VFJBTlNDT0RFUjsKKwljcnRjX3N0YXRlLT5oc3dfd29ya2Fyb3VuZF9waXBlID0gSU5WQUxJRF9Q SVBFOworCWNydGNfc3RhdGUtPm91dHB1dF9mb3JtYXQgPSBJTlRFTF9PVVRQVVRfRk9STUFUX0lO VkFMSUQ7CisJY3J0Y19zdGF0ZS0+c2NhbGVyX3N0YXRlLnNjYWxlcl9pZCA9IC0xOworCWNydGNf c3RhdGUtPm1zdF9tYXN0ZXJfdHJhbnNjb2RlciA9IElOVkFMSURfVFJBTlNDT0RFUjsKK30KKwor c3RhdGljIGJvb2wgaTl4eF9wbGFuZV9oYXNfd2luZG93aW5nKHN0cnVjdCBpbnRlbF9wbGFuZSAq cGxhbmUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShw bGFuZS0+YmFzZS5kZXYpOworCWVudW0gaTl4eF9wbGFuZV9pZCBpOXh4X3BsYW5lID0gcGxhbmUt Pmk5eHhfcGxhbmU7CisKKwlpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCisJCXJldHVybiBp OXh4X3BsYW5lID09IFBMQU5FX0I7CisJZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA1 IHx8IElTX0c0WChkZXZfcHJpdikpCisJCXJldHVybiBmYWxzZTsKKwllbHNlIGlmIChJU19HRU4o ZGV2X3ByaXYsIDQpKQorCQlyZXR1cm4gaTl4eF9wbGFuZSA9PSBQTEFORV9DOworCWVsc2UKKwkJ cmV0dXJuIGk5eHhfcGxhbmUgPT0gUExBTkVfQiB8fAorCQkJaTl4eF9wbGFuZSA9PSBQTEFORV9D OworfQorCitzdGF0aWMgdTMyIGk5eHhfcGxhbmVfY3RsKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlLAorCQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9CisJ CXRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7CisJY29uc3Qgc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7CisJdW5zaWduZWQgaW50IHJv dGF0aW9uID0gcGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9uOworCXUzMiBkc3BjbnRyOworCisJZHNw Y250ciA9IERJU1BMQVlfUExBTkVfRU5BQkxFOworCisJaWYgKElTX0c0WChkZXZfcHJpdikgfHwg SVNfR0VOKGRldl9wcml2LCA1KSB8fAorCSAgICBJU19HRU4oZGV2X3ByaXYsIDYpIHx8IElTX0lW WUJSSURHRShkZXZfcHJpdikpCisJCWRzcGNudHIgfD0gRElTUFBMQU5FX1RSSUNLTEVfRkVFRF9E SVNBQkxFOworCisJc3dpdGNoIChmYi0+Zm9ybWF0LT5mb3JtYXQpIHsKKwljYXNlIERSTV9GT1JN QVRfQzg6CisJCWRzcGNudHIgfD0gRElTUFBMQU5FXzhCUFA7CisJCWJyZWFrOworCWNhc2UgRFJN X0ZPUk1BVF9YUkdCMTU1NToKKwkJZHNwY250ciB8PSBESVNQUExBTkVfQkdSWDU1NTsKKwkJYnJl YWs7CisJY2FzZSBEUk1fRk9STUFUX0FSR0IxNTU1OgorCQlkc3BjbnRyIHw9IERJU1BQTEFORV9C R1JBNTU1OworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgorCQlkc3BjbnRyIHw9 IERJU1BQTEFORV9CR1JYNTY1OworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6 CisJCWRzcGNudHIgfD0gRElTUFBMQU5FX0JHUlg4ODg7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZP Uk1BVF9YQkdSODg4ODoKKwkJZHNwY250ciB8PSBESVNQUExBTkVfUkdCWDg4ODsKKwkJYnJlYWs7 CisJY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4OgorCQlkc3BjbnRyIHw9IERJU1BQTEFORV9CR1JB ODg4OworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6CisJCWRzcGNudHIgfD0g RElTUFBMQU5FX1JHQkE4ODg7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMjEwMTAx MDoKKwkJZHNwY250ciB8PSBESVNQUExBTkVfQkdSWDEwMTAxMDsKKwkJYnJlYWs7CisJY2FzZSBE Uk1fRk9STUFUX1hCR1IyMTAxMDEwOgorCQlkc3BjbnRyIHw9IERJU1BQTEFORV9SR0JYMTAxMDEw OworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfQVJHQjIxMDEwMTA6CisJCWRzcGNudHIgfD0g RElTUFBMQU5FX0JHUkExMDEwMTA7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMjEw MTAxMDoKKwkJZHNwY250ciB8PSBESVNQUExBTkVfUkdCQTEwMTAxMDsKKwkJYnJlYWs7CisJY2Fz ZSBEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkY6CisJCWRzcGNudHIgfD0gRElTUFBMQU5FX1JHQlgx NjE2MTY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCU1JU1NJTkdfQ0FTRShmYi0+Zm9ybWF0LT5m b3JtYXQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0 ICYmCisJICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCkKKwkJZHNw Y250ciB8PSBESVNQUExBTkVfVElMRUQ7CisKKwlpZiAocm90YXRpb24gJiBEUk1fTU9ERV9ST1RB VEVfMTgwKQorCQlkc3BjbnRyIHw9IERJU1BQTEFORV9ST1RBVEVfMTgwOworCisJaWYgKHJvdGF0 aW9uICYgRFJNX01PREVfUkVGTEVDVF9YKQorCQlkc3BjbnRyIHw9IERJU1BQTEFORV9NSVJST1I7 CisKKwlyZXR1cm4gZHNwY250cjsKK30KKworc3RhdGljIGludAoraTl4eF9wbGFuZV9jaGVjayhz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJIHN0cnVjdCBpbnRlbF9wbGFu ZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRv X2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsKKwlpbnQgcmV0OworCisJcmV0 ID0gY2h2X3BsYW5lX2NoZWNrX3JvdGF0aW9uKHBsYW5lX3N0YXRlKTsKKwlpZiAocmV0KQorCQly ZXR1cm4gcmV0OworCisJcmV0ID0gaW50ZWxfYXRvbWljX3BsYW5lX2NoZWNrX2NsaXBwaW5nKHBs YW5lX3N0YXRlLCBjcnRjX3N0YXRlLAorCQkJCQkJRFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5H LAorCQkJCQkJRFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HLAorCQkJCQkJaTl4eF9wbGFuZV9o YXNfd2luZG93aW5nKHBsYW5lKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9 IGk5eHhfY2hlY2tfcGxhbmVfc3VyZmFjZShwbGFuZV9zdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCWlmICghcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSkKKwkJcmV0dXJuIDA7 CisKKwlyZXQgPSBpbnRlbF9wbGFuZV9jaGVja19zcmNfY29vcmRpbmF0ZXMocGxhbmVfc3RhdGUp OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlwbGFuZV9zdGF0ZS0+Y3RsID0gaTl4eF9w bGFuZV9jdGwoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyB1MzIgaTl4eF9wbGFuZV9jdGxfY3J0Yyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2Ny dGMoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKKwl1MzIgZHNwY250ciA9IDA7CisKKwlp ZiAoY3J0Y19zdGF0ZS0+Z2FtbWFfZW5hYmxlKQorCQlkc3BjbnRyIHw9IERJU1BQTEFORV9HQU1N QV9FTkFCTEU7CisKKwlpZiAoY3J0Y19zdGF0ZS0+Y3NjX2VuYWJsZSkKKwkJZHNwY250ciB8PSBE SVNQUExBTkVfUElQRV9DU0NfRU5BQkxFOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCA1 KQorCQlkc3BjbnRyIHw9IERJU1BQTEFORV9TRUxfUElQRShjcnRjLT5waXBlKTsKKworCXJldHVy biBkc3BjbnRyOworfQorCitzdGF0aWMgdm9pZCBpOXh4X3BsYW5lX3JhdGlvKGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgaW50 ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAorCQkJICAgICB1bnNpZ25lZCBpbnQgKm51bSwg dW5zaWduZWQgaW50ICpkZW4pCit7CisJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIg PSBwbGFuZV9zdGF0ZS0+aHcuZmI7CisJdW5zaWduZWQgaW50IGNwcCA9IGZiLT5mb3JtYXQtPmNw cFswXTsKKworCS8qCisJICogZzR4IGJzcGVjIHNheXMgNjRicHAgcGl4ZWwgcmF0ZSBjYW4ndCBl eGNlZWQgODAlCisJICogb2YgY2RjbGsgd2hlbiB0aGUgc3ByaXRlIHBsYW5lIGlzIGVuYWJsZWQg b24gdGhlCisJICogc2FtZSBwaXBlLiBpbGsvc25iIGJzcGVjIHNheXMgNjRicHAgcGl4ZWwgcmF0 ZSBpcworCSAqIG5ldmVyIGFsbG93ZWQgdG8gZXhjZWVkIDgwJSBvZiBjZGNsay4gTGV0J3MganVz dCBnbworCSAqIHdpdGggdGhlIGlsay9zbmIgbGltaXQgYWx3YXlzLgorCSAqLworCWlmIChjcHAg PT0gOCkgeworCQkqbnVtID0gMTA7CisJCSpkZW4gPSA4OworCX0gZWxzZSB7CisJCSpudW0gPSAx OworCQkqZGVuID0gMTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaTl4eF9wbGFuZV9taW5fY2RjbGso Y29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkJY29uc3Qgc3Ry dWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwl1bnNpZ25lZCBpbnQgcGl4 ZWxfcmF0ZTsKKwl1bnNpZ25lZCBpbnQgbnVtLCBkZW47CisKKwkvKgorCSAqIE5vdGUgdGhhdCBj cnRjX3N0YXRlLT5waXhlbF9yYXRlIGFjY291bnRzIGZvciBib3RoCisJICogaG9yaXpvbnRhbCBh bmQgdmVydGljYWwgcGFuZWwgZml0dGVyIGRvd25zY2FsaW5nIGZhY3RvcnMuCisJICogUHJlLUhT VyBic3BlYyB0ZWxscyB1cyB0byBvbmx5IGNvbnNpZGVyIHRoZSBob3Jpem9udGFsCisJICogZG93 bnNjYWxpbmcgZmFjdG9yIGhlcmUuIFdlIGlnbm9yZSB0aGF0IGFuZCBqdXN0IGNvbnNpZGVyCisJ ICogYm90aCBmb3Igc2ltcGxpY2l0eS4KKwkgKi8KKwlwaXhlbF9yYXRlID0gY3J0Y19zdGF0ZS0+ cGl4ZWxfcmF0ZTsKKworCWk5eHhfcGxhbmVfcmF0aW8oY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUs ICZudW0sICZkZW4pOworCisJLyogdHdvIHBpeGVscyBwZXIgY2xvY2sgd2l0aCBkb3VibGUgd2lk ZSBwaXBlICovCisJaWYgKGNydGNfc3RhdGUtPmRvdWJsZV93aWRlKQorCQlkZW4gKj0gMjsKKwor CXJldHVybiBESVZfUk9VTkRfVVAocGl4ZWxfcmF0ZSAqIG51bSwgZGVuKTsKK30KKworc3RhdGlj IHZvaWQgaTl4eF91cGRhdGVfcGxhbmUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKKwkJCSAg ICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJICAgICAg Y29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7CisJ ZW51bSBpOXh4X3BsYW5lX2lkIGk5eHhfcGxhbmUgPSBwbGFuZS0+aTl4eF9wbGFuZTsKKwl1MzIg bGluZWFyX29mZnNldDsKKwlpbnQgeCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS54Owor CWludCB5ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnk7CisJaW50IGNydGNfeCA9IHBs YW5lX3N0YXRlLT51YXBpLmRzdC54MTsKKwlpbnQgY3J0Y195ID0gcGxhbmVfc3RhdGUtPnVhcGku ZHN0LnkxOworCWludCBjcnRjX3cgPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGku ZHN0KTsKKwlpbnQgY3J0Y19oID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5k c3QpOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJdTMyIGRzcGFkZHJfb2Zmc2V0OworCXUz MiBkc3BjbnRyOworCisJZHNwY250ciA9IHBsYW5lX3N0YXRlLT5jdGwgfCBpOXh4X3BsYW5lX2N0 bF9jcnRjKGNydGNfc3RhdGUpOworCisJbGluZWFyX29mZnNldCA9IGludGVsX2ZiX3h5X3RvX2xp bmVhcih4LCB5LCBwbGFuZV9zdGF0ZSwgMCk7CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+ PSA0KQorCQlkc3BhZGRyX29mZnNldCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5vZmZz ZXQ7CisJZWxzZQorCQlkc3BhZGRyX29mZnNldCA9IGxpbmVhcl9vZmZzZXQ7CisKKwlzcGluX2xv Y2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7CisKKwlpbnRlbF9k ZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQU1RSSURFKGk5eHhfcGxhbmUpLAorCQkJICBwbGFuZV9z dGF0ZS0+Y29sb3JfcGxhbmVbMF0uc3RyaWRlKTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYp IDwgNCkgeworCQkvKgorCQkgKiBQTEFORV9BIGRvZXNuJ3QgYWN0dWFsbHkgaGF2ZSBhIGZ1bGwg d2luZG93CisJCSAqIGdlbmVyYXRvciBidXQgbGV0J3MgYXNzdW1lIHdlIHN0aWxsIG5lZWQgdG8K KwkJICogcHJvZ3JhbSB3aGF0ZXZlciBpcyB0aGVyZS4KKwkJICovCisJCWludGVsX2RlX3dyaXRl X2Z3KGRldl9wcml2LCBEU1BQT1MoaTl4eF9wbGFuZSksCisJCQkJICAoY3J0Y195IDw8IDE2KSB8 IGNydGNfeCk7CisJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BTSVpFKGk5eHhfcGxh bmUpLAorCQkJCSAgKChjcnRjX2ggLSAxKSA8PCAxNikgfCAoY3J0Y193IC0gMSkpOworCX0gZWxz ZSBpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikgJiYgaTl4eF9wbGFuZSA9PSBQTEFORV9CKSB7 CisJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQUklNUE9TKGk5eHhfcGxhbmUpLAorCQkJ CSAgKGNydGNfeSA8PCAxNikgfCBjcnRjX3gpOworCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJp diwgUFJJTVNJWkUoaTl4eF9wbGFuZSksCisJCQkJICAoKGNydGNfaCAtIDEpIDw8IDE2KSB8IChj cnRjX3cgLSAxKSk7CisJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQUklNQ05TVEFMUEhB KGk5eHhfcGxhbmUpLCAwKTsKKwl9CisKKwlpZiAoSVNfSEFTV0VMTChkZXZfcHJpdikgfHwgSVNf QlJPQURXRUxMKGRldl9wcml2KSkgeworCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQ T0ZGU0VUKGk5eHhfcGxhbmUpLAorCQkJCSAgKHkgPDwgMTYpIHwgeCk7CisJfSBlbHNlIGlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDQpIHsKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYs IERTUExJTk9GRihpOXh4X3BsYW5lKSwKKwkJCQkgIGxpbmVhcl9vZmZzZXQpOworCQlpbnRlbF9k ZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQVElMRU9GRihpOXh4X3BsYW5lKSwKKwkJCQkgICh5IDw8 IDE2KSB8IHgpOworCX0KKworCS8qCisJICogVGhlIGNvbnRyb2wgcmVnaXN0ZXIgc2VsZi1hcm1z IGlmIHRoZSBwbGFuZSB3YXMgcHJldmlvdXNseQorCSAqIGRpc2FibGVkLiBUcnkgdG8gbWFrZSB0 aGUgcGxhbmUgZW5hYmxlIGF0b21pYyBieSB3cml0aW5nCisJICogdGhlIGNvbnRyb2wgcmVnaXN0 ZXIganVzdCBiZWZvcmUgdGhlIHN1cmZhY2UgcmVnaXN0ZXIuCisJICovCisJaW50ZWxfZGVfd3Jp dGVfZncoZGV2X3ByaXYsIERTUENOVFIoaTl4eF9wbGFuZSksIGRzcGNudHIpOworCWlmIChJTlRF TF9HRU4oZGV2X3ByaXYpID49IDQpCisJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BT VVJGKGk5eHhfcGxhbmUpLAorCQkJCSAgaW50ZWxfcGxhbmVfZ2d0dF9vZmZzZXQocGxhbmVfc3Rh dGUpICsgZHNwYWRkcl9vZmZzZXQpOworCWVsc2UKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3By aXYsIERTUEFERFIoaTl4eF9wbGFuZSksCisJCQkJICBpbnRlbF9wbGFuZV9nZ3R0X29mZnNldChw bGFuZV9zdGF0ZSkgKyBkc3BhZGRyX29mZnNldCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgaTl4 eF9kaXNhYmxlX3BsYW5lKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCisJCQkgICAgICAgY29u c3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOworCWVudW0g aTl4eF9wbGFuZV9pZCBpOXh4X3BsYW5lID0gcGxhbmUtPmk5eHhfcGxhbmU7CisJdW5zaWduZWQg bG9uZyBpcnFmbGFnczsKKwl1MzIgZHNwY250cjsKKworCS8qCisJICogRFNQQ05UUiBwaXBlIGdh bW1hIGVuYWJsZSBvbiBnNHgrIGFuZCBwaXBlIGNzYworCSAqIGVuYWJsZSBvbiBpbGsrIGFmZmVj dCB0aGUgcGlwZSBib3R0b20gY29sb3IgYXMKKwkgKiB3ZWxsLCBzbyB3ZSBtdXN0IGNvbmZpZ3Vy ZSB0aGVtIGV2ZW4gaWYgdGhlIHBsYW5lCisJICogaXMgZGlzYWJsZWQuCisJICoKKwkgKiBPbiBw cmUtZzR4IHRoZXJlIGlzIG5vIHdheSB0byBnYW1tYSBjb3JyZWN0IHRoZQorCSAqIHBpcGUgYm90 dG9tIGNvbG9yIGJ1dCB3ZSdsbCBrZWVwIG9uIGRvaW5nIHRoaXMKKwkgKiBhbnl3YXkgc28gdGhh dCB0aGUgY3J0YyBzdGF0ZSByZWFkb3V0IHdvcmtzIGNvcnJlY3RseS4KKwkgKi8KKwlkc3BjbnRy ID0gaTl4eF9wbGFuZV9jdGxfY3J0YyhjcnRjX3N0YXRlKTsKKworCXNwaW5fbG9ja19pcnFzYXZl KCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKKworCWludGVsX2RlX3dyaXRlX2Z3 KGRldl9wcml2LCBEU1BDTlRSKGk5eHhfcGxhbmUpLCBkc3BjbnRyKTsKKwlpZiAoSU5URUxfR0VO KGRldl9wcml2KSA+PSA0KQorCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQU1VSRihp OXh4X3BsYW5lKSwgMCk7CisJZWxzZQorCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQ QUREUihpOXh4X3BsYW5lKSwgMCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJp di0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKK30KKworc3RhdGljIGJvb2wgaTl4eF9wbGFuZV9n ZXRfaHdfc3RhdGUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKKwkJCQkgICAgZW51bSBwaXBl ICpwaXBlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUo cGxhbmUtPmJhc2UuZGV2KTsKKwllbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIHBvd2Vy X2RvbWFpbjsKKwllbnVtIGk5eHhfcGxhbmVfaWQgaTl4eF9wbGFuZSA9IHBsYW5lLT5pOXh4X3Bs YW5lOworCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOworCWJvb2wgcmV0OworCXUzMiB2YWw7CisK KwkvKgorCSAqIE5vdCAxMDAlIGNvcnJlY3QgZm9yIHBsYW5lcyB0aGF0IGNhbiBtb3ZlIGJldHdl ZW4gcGlwZXMsCisJICogYnV0IHRoYXQncyBvbmx5IHRoZSBjYXNlIGZvciBnZW4yLTQgd2hpY2gg ZG9uJ3QgaGF2ZSBhbnkKKwkgKiBkaXNwbGF5IHBvd2VyIHdlbGxzLgorCSAqLworCXBvd2VyX2Rv bWFpbiA9IFBPV0VSX0RPTUFJTl9QSVBFKHBsYW5lLT5waXBlKTsKKwl3YWtlcmVmID0gaW50ZWxf ZGlzcGxheV9wb3dlcl9nZXRfaWZfZW5hYmxlZChkZXZfcHJpdiwgcG93ZXJfZG9tYWluKTsKKwlp ZiAoIXdha2VyZWYpCisJCXJldHVybiBmYWxzZTsKKworCXZhbCA9IGludGVsX2RlX3JlYWQoZGV2 X3ByaXYsIERTUENOVFIoaTl4eF9wbGFuZSkpOworCisJcmV0ID0gdmFsICYgRElTUExBWV9QTEFO RV9FTkFCTEU7CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA1KQorCQkqcGlwZSA9IHBs YW5lLT5waXBlOworCWVsc2UKKwkJKnBpcGUgPSAodmFsICYgRElTUFBMQU5FX1NFTF9QSVBFX01B U0spID4+CisJCQlESVNQUExBTkVfU0VMX1BJUEVfU0hJRlQ7CisKKwlpbnRlbF9kaXNwbGF5X3Bv d2VyX3B1dChkZXZfcHJpdiwgcG93ZXJfZG9tYWluLCB3YWtlcmVmKTsKKworCXJldHVybiByZXQ7 Cit9CisKK3Vuc2lnbmVkIGludAoraTl4eF9wbGFuZV9tYXhfc3RyaWRlKHN0cnVjdCBpbnRlbF9w bGFuZSAqcGxhbmUsCisJCSAgICAgIHUzMiBwaXhlbF9mb3JtYXQsIHU2NCBtb2RpZmllciwKKwkJ ICAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9uKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKKworCWlmICghSEFTX0dNQ0go ZGV2X3ByaXYpKSB7CisJCXJldHVybiAzMioxMDI0OworCX0gZWxzZSBpZiAoSU5URUxfR0VOKGRl dl9wcml2KSA+PSA0KSB7CisJCWlmIChtb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxF RCkKKwkJCXJldHVybiAxNioxMDI0OworCQllbHNlCisJCQlyZXR1cm4gMzIqMTAyNDsKKwl9IGVs c2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMykgeworCQlpZiAobW9kaWZpZXIgPT0gSTkx NV9GT1JNQVRfTU9EX1hfVElMRUQpCisJCQlyZXR1cm4gOCoxMDI0OworCQllbHNlCisJCQlyZXR1 cm4gMTYqMTAyNDsKKwl9IGVsc2UgeworCQlpZiAocGxhbmUtPmk5eHhfcGxhbmUgPT0gUExBTkVf QykKKwkJCXJldHVybiA0KjEwMjQ7CisJCWVsc2UKKwkJCXJldHVybiA4KjEwMjQ7CisJfQorfQor CitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBpOTY1X3BsYW5lX2Z1bmNzID0g eworCS51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUsCisJLmRp c2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAorCS5kZXN0cm95 ID0gaW50ZWxfcGxhbmVfZGVzdHJveSwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGludGVs X3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBpbnRlbF9w bGFuZV9kZXN0cm95X3N0YXRlLAorCS5mb3JtYXRfbW9kX3N1cHBvcnRlZCA9IGk5NjVfcGxhbmVf Zm9ybWF0X21vZF9zdXBwb3J0ZWQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFu ZV9mdW5jcyBpOHh4X3BsYW5lX2Z1bmNzID0geworCS51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWlj X2hlbHBlcl91cGRhdGVfcGxhbmUsCisJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBl cl9kaXNhYmxlX3BsYW5lLAorCS5kZXN0cm95ID0gaW50ZWxfcGxhbmVfZGVzdHJveSwKKwkuYXRv bWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGludGVsX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRv bWljX2Rlc3Ryb3lfc3RhdGUgPSBpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRlLAorCS5mb3JtYXRf bW9kX3N1cHBvcnRlZCA9IGk4eHhfcGxhbmVfZm9ybWF0X21vZF9zdXBwb3J0ZWQsCit9OworCitz dGF0aWMgc3RydWN0IGludGVsX3BsYW5lICoKK2ludGVsX3ByaW1hcnlfcGxhbmVfY3JlYXRlKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUpCit7CisJc3Ry dWN0IGludGVsX3BsYW5lICpwbGFuZTsKKwljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzICpw bGFuZV9mdW5jczsKKwl1bnNpZ25lZCBpbnQgc3VwcG9ydGVkX3JvdGF0aW9uczsKKwljb25zdCB1 MzIgKmZvcm1hdHM7CisJaW50IG51bV9mb3JtYXRzOworCWludCByZXQsIHpwb3M7CisKKwlpZiAo SU5URUxfR0VOKGRldl9wcml2KSA+PSA5KQorCQlyZXR1cm4gc2tsX3VuaXZlcnNhbF9wbGFuZV9j cmVhdGUoZGV2X3ByaXYsIHBpcGUsCisJCQkJCQkgIFBMQU5FX1BSSU1BUlkpOworCisJcGxhbmUg PSBpbnRlbF9wbGFuZV9hbGxvYygpOworCWlmIChJU19FUlIocGxhbmUpKQorCQlyZXR1cm4gcGxh bmU7CisKKwlwbGFuZS0+cGlwZSA9IHBpcGU7CisJLyoKKwkgKiBPbiBnZW4yLzMgb25seSBwbGFu ZSBBIGNhbiBkbyBGQkMsIGJ1dCB0aGUgcGFuZWwgZml0dGVyIGFuZCBMVkRTCisJICogcG9ydCBp cyBob29rZWQgdG8gcGlwZSBCLiBIZW5jZSB3ZSB3YW50IHBsYW5lIEEgZmVlZGluZyBwaXBlIEIu CisJICovCisJaWYgKEhBU19GQkMoZGV2X3ByaXYpICYmIElOVEVMX0dFTihkZXZfcHJpdikgPCA0 ICYmCisJICAgIElOVEVMX05VTV9QSVBFUyhkZXZfcHJpdikgPT0gMikKKwkJcGxhbmUtPmk5eHhf cGxhbmUgPSAoZW51bSBpOXh4X3BsYW5lX2lkKSAhcGlwZTsKKwllbHNlCisJCXBsYW5lLT5pOXh4 X3BsYW5lID0gKGVudW0gaTl4eF9wbGFuZV9pZCkgcGlwZTsKKwlwbGFuZS0+aWQgPSBQTEFORV9Q UklNQVJZOworCXBsYW5lLT5mcm9udGJ1ZmZlcl9iaXQgPSBJTlRFTF9GUk9OVEJVRkZFUihwaXBl LCBwbGFuZS0+aWQpOworCisJcGxhbmUtPmhhc19mYmMgPSBpOXh4X3BsYW5lX2hhc19mYmMoZGV2 X3ByaXYsIHBsYW5lLT5pOXh4X3BsYW5lKTsKKwlpZiAocGxhbmUtPmhhc19mYmMpIHsKKwkJc3Ry dWN0IGludGVsX2ZiYyAqZmJjID0gJmRldl9wcml2LT5mYmM7CisKKwkJZmJjLT5wb3NzaWJsZV9m cmFtZWJ1ZmZlcl9iaXRzIHw9IHBsYW5lLT5mcm9udGJ1ZmZlcl9iaXQ7CisJfQorCisJaWYgKElT X1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7CisJCWZv cm1hdHMgPSB2bHZfcHJpbWFyeV9mb3JtYXRzOworCQludW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUo dmx2X3ByaW1hcnlfZm9ybWF0cyk7CisJfSBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49 IDQpIHsKKwkJLyoKKwkJICogV2FGUDE2R2FtbWFFbmFibGluZzppdmIKKwkJICogIldvcmthcm91 bmQgOiBXaGVuIHVzaW5nIHRoZSA2NC1iaXQgZm9ybWF0LCB0aGUgcGxhbmUKKwkJICogIG91dHB1 dCBvbiBlYWNoIGNvbG9yIGNoYW5uZWwgaGFzIG9uZSBxdWFydGVyIGFtcGxpdHVkZS4KKwkJICog IEl0IGNhbiBiZSBicm91Z2h0IHVwIHRvIGZ1bGwgYW1wbGl0dWRlIGJ5IHVzaW5nIHBpcGUKKwkJ ICogIGdhbW1hIGNvcnJlY3Rpb24gb3IgcGlwZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uIHRvCisJ CSAqICBtdWx0aXBseSB0aGUgcGxhbmUgb3V0cHV0IGJ5IGZvdXIuIgorCQkgKgorCQkgKiBUaGVy ZSBpcyBubyBkZWRpY2F0ZWQgcGxhbmUgZ2FtbWEgZm9yIHRoZSBwcmltYXJ5IHBsYW5lLAorCQkg KiBhbmQgdXNpbmcgdGhlIHBpcGUgZ2FtbWEvY3NjIGNvdWxkIGNvbmZsaWN0IHdpdGggb3RoZXIK KwkJICogcGxhbmVzLCBzbyB3ZSBjaG9vc2Ugbm90IHRvIGV4cG9zZSBmcDE2IG9uIElWQiBwcmlt YXJ5CisJCSAqIHBsYW5lcy4gSFNXIHByaW1hcnkgcGxhbmVzIG5vIGxvbmdlciBoYXZlIHRoaXMg cHJvYmxlbS4KKwkJICovCisJCWlmIChJU19JVllCUklER0UoZGV2X3ByaXYpKSB7CisJCQlmb3Jt YXRzID0gaXZiX3ByaW1hcnlfZm9ybWF0czsKKwkJCW51bV9mb3JtYXRzID0gQVJSQVlfU0laRShp dmJfcHJpbWFyeV9mb3JtYXRzKTsKKwkJfSBlbHNlIHsKKwkJCWZvcm1hdHMgPSBpOTY1X3ByaW1h cnlfZm9ybWF0czsKKwkJCW51bV9mb3JtYXRzID0gQVJSQVlfU0laRShpOTY1X3ByaW1hcnlfZm9y bWF0cyk7CisJCX0KKwl9IGVsc2UgeworCQlmb3JtYXRzID0gaTh4eF9wcmltYXJ5X2Zvcm1hdHM7 CisJCW51bV9mb3JtYXRzID0gQVJSQVlfU0laRShpOHh4X3ByaW1hcnlfZm9ybWF0cyk7CisJfQor CisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkKKwkJcGxhbmVfZnVuY3MgPSAmaTk2NV9w bGFuZV9mdW5jczsKKwllbHNlCisJCXBsYW5lX2Z1bmNzID0gJmk4eHhfcGxhbmVfZnVuY3M7CisK KwlpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikp CisJCXBsYW5lLT5taW5fY2RjbGsgPSB2bHZfcGxhbmVfbWluX2NkY2xrOworCWVsc2UgaWYgKElT X0JST0FEV0VMTChkZXZfcHJpdikgfHwgSVNfSEFTV0VMTChkZXZfcHJpdikpCisJCXBsYW5lLT5t aW5fY2RjbGsgPSBoc3dfcGxhbmVfbWluX2NkY2xrOworCWVsc2UgaWYgKElTX0lWWUJSSURHRShk ZXZfcHJpdikpCisJCXBsYW5lLT5taW5fY2RjbGsgPSBpdmJfcGxhbmVfbWluX2NkY2xrOworCWVs c2UKKwkJcGxhbmUtPm1pbl9jZGNsayA9IGk5eHhfcGxhbmVfbWluX2NkY2xrOworCisJcGxhbmUt Pm1heF9zdHJpZGUgPSBpOXh4X3BsYW5lX21heF9zdHJpZGU7CisJcGxhbmUtPnVwZGF0ZV9wbGFu ZSA9IGk5eHhfdXBkYXRlX3BsYW5lOworCXBsYW5lLT5kaXNhYmxlX3BsYW5lID0gaTl4eF9kaXNh YmxlX3BsYW5lOworCXBsYW5lLT5nZXRfaHdfc3RhdGUgPSBpOXh4X3BsYW5lX2dldF9od19zdGF0 ZTsKKwlwbGFuZS0+Y2hlY2tfcGxhbmUgPSBpOXh4X3BsYW5lX2NoZWNrOworCisJaWYgKElOVEVM X0dFTihkZXZfcHJpdikgPj0gNSB8fCBJU19HNFgoZGV2X3ByaXYpKQorCQlyZXQgPSBkcm1fdW5p dmVyc2FsX3BsYW5lX2luaXQoJmRldl9wcml2LT5kcm0sICZwbGFuZS0+YmFzZSwKKwkJCQkJICAg ICAgIDAsIHBsYW5lX2Z1bmNzLAorCQkJCQkgICAgICAgZm9ybWF0cywgbnVtX2Zvcm1hdHMsCisJ CQkJCSAgICAgICBpOXh4X2Zvcm1hdF9tb2RpZmllcnMsCisJCQkJCSAgICAgICBEUk1fUExBTkVf VFlQRV9QUklNQVJZLAorCQkJCQkgICAgICAgInByaW1hcnkgJWMiLCBwaXBlX25hbWUocGlwZSkp OworCWVsc2UKKwkJcmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KCZkZXZfcHJpdi0+ZHJt LCAmcGxhbmUtPmJhc2UsCisJCQkJCSAgICAgICAwLCBwbGFuZV9mdW5jcywKKwkJCQkJICAgICAg IGZvcm1hdHMsIG51bV9mb3JtYXRzLAorCQkJCQkgICAgICAgaTl4eF9mb3JtYXRfbW9kaWZpZXJz LAorCQkJCQkgICAgICAgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSwKKwkJCQkJICAgICAgICJwbGFu ZSAlYyIsCisJCQkJCSAgICAgICBwbGFuZV9uYW1lKHBsYW5lLT5pOXh4X3BsYW5lKSk7CisJaWYg KHJldCkKKwkJZ290byBmYWlsOworCisJaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpICYmIHBp cGUgPT0gUElQRV9CKSB7CisJCXN1cHBvcnRlZF9yb3RhdGlvbnMgPQorCQkJRFJNX01PREVfUk9U QVRFXzAgfCBEUk1fTU9ERV9ST1RBVEVfMTgwIHwKKwkJCURSTV9NT0RFX1JFRkxFQ1RfWDsKKwl9 IGVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkgeworCQlzdXBwb3J0ZWRfcm90YXRp b25zID0KKwkJCURSTV9NT0RFX1JPVEFURV8wIHwgRFJNX01PREVfUk9UQVRFXzE4MDsKKwl9IGVs c2UgeworCQlzdXBwb3J0ZWRfcm90YXRpb25zID0gRFJNX01PREVfUk9UQVRFXzA7CisJfQorCisJ aWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkKKwkJZHJtX3BsYW5lX2NyZWF0ZV9yb3RhdGlv bl9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UsCisJCQkJCQkgICBEUk1fTU9ERV9ST1RBVEVfMCwKKwkJ CQkJCSAgIHN1cHBvcnRlZF9yb3RhdGlvbnMpOworCisJenBvcyA9IDA7CisJZHJtX3BsYW5lX2Ny ZWF0ZV96cG9zX2ltbXV0YWJsZV9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UsIHpwb3MpOworCisJZHJt X3BsYW5lX2hlbHBlcl9hZGQoJnBsYW5lLT5iYXNlLCAmaW50ZWxfcGxhbmVfaGVscGVyX2Z1bmNz KTsKKworCXJldHVybiBwbGFuZTsKKworZmFpbDoKKwlpbnRlbF9wbGFuZV9mcmVlKHBsYW5lKTsK KworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW50ZWxfY3J0YyAq aW50ZWxfY3J0Y19hbGxvYyh2b2lkKQoreworCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRj X3N0YXRlOworCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjOworCisJY3J0YyA9IGt6YWxsb2Moc2l6 ZW9mKCpjcnRjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjcnRjKQorCQlyZXR1cm4gRVJSX1BUUigt RU5PTUVNKTsKKworCWNydGNfc3RhdGUgPSBpbnRlbF9jcnRjX3N0YXRlX2FsbG9jKGNydGMpOwor CWlmICghY3J0Y19zdGF0ZSkgeworCQlrZnJlZShjcnRjKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVO T01FTSk7CisJfQorCisJY3J0Yy0+YmFzZS5zdGF0ZSA9ICZjcnRjX3N0YXRlLT51YXBpOworCWNy dGMtPmNvbmZpZyA9IGNydGNfc3RhdGU7CisKKwlyZXR1cm4gY3J0YzsKK30KKworc3RhdGljIHZv aWQgaW50ZWxfY3J0Y19mcmVlKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQoreworCWludGVsX2Ny dGNfZGVzdHJveV9zdGF0ZSgmY3J0Yy0+YmFzZSwgY3J0Yy0+YmFzZS5zdGF0ZSk7CisJa2ZyZWUo Y3J0Yyk7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2NydGNfZGVzdHJveShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCit7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9j cnRjKGNydGMpOworCisJZHJtX2NydGNfY2xlYW51cChjcnRjKTsKKwlrZnJlZShpbnRlbF9jcnRj KTsKK30KKworc3RhdGljIGludCBpbnRlbF9jcnRjX2xhdGVfcmVnaXN0ZXIoc3RydWN0IGRybV9j cnRjICpjcnRjKQoreworCWludGVsX2NydGNfZGVidWdmc19hZGQoY3J0Yyk7CisJcmV0dXJuIDA7 Cit9CisKKyNkZWZpbmUgSU5URUxfQ1JUQ19GVU5DUyBcCisJLmdhbW1hX3NldCA9IGRybV9hdG9t aWNfaGVscGVyX2xlZ2FjeV9nYW1tYV9zZXQsIFwKKwkuc2V0X2NvbmZpZyA9IGRybV9hdG9taWNf aGVscGVyX3NldF9jb25maWcsIFwKKwkuZGVzdHJveSA9IGludGVsX2NydGNfZGVzdHJveSwgXAor CS5wYWdlX2ZsaXAgPSBkcm1fYXRvbWljX2hlbHBlcl9wYWdlX2ZsaXAsIFwKKwkuYXRvbWljX2R1 cGxpY2F0ZV9zdGF0ZSA9IGludGVsX2NydGNfZHVwbGljYXRlX3N0YXRlLCBcCisJLmF0b21pY19k ZXN0cm95X3N0YXRlID0gaW50ZWxfY3J0Y19kZXN0cm95X3N0YXRlLCBcCisJLnNldF9jcmNfc291 cmNlID0gaW50ZWxfY3J0Y19zZXRfY3JjX3NvdXJjZSwgXAorCS52ZXJpZnlfY3JjX3NvdXJjZSA9 IGludGVsX2NydGNfdmVyaWZ5X2NyY19zb3VyY2UsIFwKKwkuZ2V0X2NyY19zb3VyY2VzID0gaW50 ZWxfY3J0Y19nZXRfY3JjX3NvdXJjZXMsIFwKKwkubGF0ZV9yZWdpc3RlciA9IGludGVsX2NydGNf bGF0ZV9yZWdpc3RlcgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGJkd19j cnRjX2Z1bmNzID0geworCUlOVEVMX0NSVENfRlVOQ1MsCisKKwkuZ2V0X3ZibGFua19jb3VudGVy ID0gZzR4X2dldF92YmxhbmtfY291bnRlciwKKwkuZW5hYmxlX3ZibGFuayA9IGJkd19lbmFibGVf dmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayA9IGJkd19kaXNhYmxlX3ZibGFuaywKKwkuZ2V0X3Zi bGFua190aW1lc3RhbXAgPSBpbnRlbF9jcnRjX2dldF92YmxhbmtfdGltZXN0YW1wLAorfTsKKwor c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBpbGtfY3J0Y19mdW5jcyA9IHsKKwlJ TlRFTF9DUlRDX0ZVTkNTLAorCisJLmdldF92YmxhbmtfY291bnRlciA9IGc0eF9nZXRfdmJsYW5r X2NvdW50ZXIsCisJLmVuYWJsZV92YmxhbmsgPSBpbGtfZW5hYmxlX3ZibGFuaywKKwkuZGlzYWJs ZV92YmxhbmsgPSBpbGtfZGlzYWJsZV92YmxhbmssCisJLmdldF92YmxhbmtfdGltZXN0YW1wID0g aW50ZWxfY3J0Y19nZXRfdmJsYW5rX3RpbWVzdGFtcCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2NydGNfZnVuY3MgZzR4X2NydGNfZnVuY3MgPSB7CisJSU5URUxfQ1JUQ19GVU5DUywK KworCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSBnNHhfZ2V0X3ZibGFua19jb3VudGVyLAorCS5lbmFi bGVfdmJsYW5rID0gaTk2NV9lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayA9IGk5NjVf ZGlzYWJsZV92YmxhbmssCisJLmdldF92YmxhbmtfdGltZXN0YW1wID0gaW50ZWxfY3J0Y19nZXRf dmJsYW5rX3RpbWVzdGFtcCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVu Y3MgaTk2NV9jcnRjX2Z1bmNzID0geworCUlOVEVMX0NSVENfRlVOQ1MsCisKKwkuZ2V0X3ZibGFu a19jb3VudGVyID0gaTkxNV9nZXRfdmJsYW5rX2NvdW50ZXIsCisJLmVuYWJsZV92YmxhbmsgPSBp OTY1X2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gaTk2NV9kaXNhYmxlX3ZibGFu aywKKwkuZ2V0X3ZibGFua190aW1lc3RhbXAgPSBpbnRlbF9jcnRjX2dldF92YmxhbmtfdGltZXN0 YW1wLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBpOTE1Z21fY3J0 Y19mdW5jcyA9IHsKKwlJTlRFTF9DUlRDX0ZVTkNTLAorCisJLmdldF92YmxhbmtfY291bnRlciA9 IGk5MTVfZ2V0X3ZibGFua19jb3VudGVyLAorCS5lbmFibGVfdmJsYW5rID0gaTkxNWdtX2VuYWJs ZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gaTkxNWdtX2Rpc2FibGVfdmJsYW5rLAorCS5n ZXRfdmJsYW5rX3RpbWVzdGFtcCA9IGludGVsX2NydGNfZ2V0X3ZibGFua190aW1lc3RhbXAsCit9 OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGk5MTVfY3J0Y19mdW5jcyA9 IHsKKwlJTlRFTF9DUlRDX0ZVTkNTLAorCisJLmdldF92YmxhbmtfY291bnRlciA9IGk5MTVfZ2V0 X3ZibGFua19jb3VudGVyLAorCS5lbmFibGVfdmJsYW5rID0gaTh4eF9lbmFibGVfdmJsYW5rLAor CS5kaXNhYmxlX3ZibGFuayA9IGk4eHhfZGlzYWJsZV92YmxhbmssCisJLmdldF92YmxhbmtfdGlt ZXN0YW1wID0gaW50ZWxfY3J0Y19nZXRfdmJsYW5rX3RpbWVzdGFtcCwKK307CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgaTh4eF9jcnRjX2Z1bmNzID0geworCUlOVEVMX0NS VENfRlVOQ1MsCisKKwkvKiBubyBodyB2YmxhbmsgY291bnRlciAqLworCS5lbmFibGVfdmJsYW5r ID0gaTh4eF9lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayA9IGk4eHhfZGlzYWJsZV92 YmxhbmssCisJLmdldF92YmxhbmtfdGltZXN0YW1wID0gaW50ZWxfY3J0Y19nZXRfdmJsYW5rX3Rp bWVzdGFtcCwKK307CisKK2ludCBpbnRlbF9jcnRjX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LCBlbnVtIHBpcGUgcGlwZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBy aW1hcnksICpjdXJzb3I7CisJY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzICpmdW5jczsKKwlz dHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YzsKKwlpbnQgc3ByaXRlLCByZXQ7CisKKwljcnRjID0gaW50 ZWxfY3J0Y19hbGxvYygpOworCWlmIChJU19FUlIoY3J0YykpCisJCXJldHVybiBQVFJfRVJSKGNy dGMpOworCisJY3J0Yy0+cGlwZSA9IHBpcGU7CisJY3J0Yy0+bnVtX3NjYWxlcnMgPSBSVU5USU1F X0lORk8oZGV2X3ByaXYpLT5udW1fc2NhbGVyc1twaXBlXTsKKworCXByaW1hcnkgPSBpbnRlbF9w cmltYXJ5X3BsYW5lX2NyZWF0ZShkZXZfcHJpdiwgcGlwZSk7CisJaWYgKElTX0VSUihwcmltYXJ5 KSkgeworCQlyZXQgPSBQVFJfRVJSKHByaW1hcnkpOworCQlnb3RvIGZhaWw7CisJfQorCWNydGMt PnBsYW5lX2lkc19tYXNrIHw9IEJJVChwcmltYXJ5LT5pZCk7CisKKwlmb3JfZWFjaF9zcHJpdGUo ZGV2X3ByaXYsIHBpcGUsIHNwcml0ZSkgeworCQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lOwor CisJCXBsYW5lID0gaW50ZWxfc3ByaXRlX3BsYW5lX2NyZWF0ZShkZXZfcHJpdiwgcGlwZSwgc3By aXRlKTsKKwkJaWYgKElTX0VSUihwbGFuZSkpIHsKKwkJCXJldCA9IFBUUl9FUlIocGxhbmUpOwor CQkJZ290byBmYWlsOworCQl9CisJCWNydGMtPnBsYW5lX2lkc19tYXNrIHw9IEJJVChwbGFuZS0+ aWQpOworCX0KKworCWN1cnNvciA9IGludGVsX2N1cnNvcl9wbGFuZV9jcmVhdGUoZGV2X3ByaXYs IHBpcGUpOworCWlmIChJU19FUlIoY3Vyc29yKSkgeworCQlyZXQgPSBQVFJfRVJSKGN1cnNvcik7 CisJCWdvdG8gZmFpbDsKKwl9CisJY3J0Yy0+cGxhbmVfaWRzX21hc2sgfD0gQklUKGN1cnNvci0+ aWQpOworCisJaWYgKEhBU19HTUNIKGRldl9wcml2KSkgeworCQlpZiAoSVNfQ0hFUlJZVklFVyhk ZXZfcHJpdikgfHwKKwkJICAgIElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0c0WChkZXZf cHJpdikpCisJCQlmdW5jcyA9ICZnNHhfY3J0Y19mdW5jczsKKwkJZWxzZSBpZiAoSVNfR0VOKGRl dl9wcml2LCA0KSkKKwkJCWZ1bmNzID0gJmk5NjVfY3J0Y19mdW5jczsKKwkJZWxzZSBpZiAoSVNf STk0NUdNKGRldl9wcml2KSB8fCBJU19JOTE1R00oZGV2X3ByaXYpKQorCQkJZnVuY3MgPSAmaTkx NWdtX2NydGNfZnVuY3M7CisJCWVsc2UgaWYgKElTX0dFTihkZXZfcHJpdiwgMykpCisJCQlmdW5j cyA9ICZpOTE1X2NydGNfZnVuY3M7CisJCWVsc2UKKwkJCWZ1bmNzID0gJmk4eHhfY3J0Y19mdW5j czsKKwl9IGVsc2UgeworCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA4KQorCQkJZnVuY3Mg PSAmYmR3X2NydGNfZnVuY3M7CisJCWVsc2UKKwkJCWZ1bmNzID0gJmlsa19jcnRjX2Z1bmNzOwor CX0KKworCXJldCA9IGRybV9jcnRjX2luaXRfd2l0aF9wbGFuZXMoJmRldl9wcml2LT5kcm0sICZj cnRjLT5iYXNlLAorCQkJCQkmcHJpbWFyeS0+YmFzZSwgJmN1cnNvci0+YmFzZSwKKwkJCQkJZnVu Y3MsICJwaXBlICVjIiwgcGlwZV9uYW1lKHBpcGUpKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7 CisKKwlCVUdfT04ocGlwZSA+PSBBUlJBWV9TSVpFKGRldl9wcml2LT5waXBlX3RvX2NydGNfbWFw cGluZykgfHwKKwkgICAgICAgZGV2X3ByaXYtPnBpcGVfdG9fY3J0Y19tYXBwaW5nW3BpcGVdICE9 IE5VTEwpOworCWRldl9wcml2LT5waXBlX3RvX2NydGNfbWFwcGluZ1twaXBlXSA9IGNydGM7CisK KwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDkpIHsKKwkJZW51bSBpOXh4X3BsYW5lX2lkIGk5 eHhfcGxhbmUgPSBwcmltYXJ5LT5pOXh4X3BsYW5lOworCisJCUJVR19PTihpOXh4X3BsYW5lID49 IEFSUkFZX1NJWkUoZGV2X3ByaXYtPnBsYW5lX3RvX2NydGNfbWFwcGluZykgfHwKKwkJICAgICAg IGRldl9wcml2LT5wbGFuZV90b19jcnRjX21hcHBpbmdbaTl4eF9wbGFuZV0gIT0gTlVMTCk7CisJ CWRldl9wcml2LT5wbGFuZV90b19jcnRjX21hcHBpbmdbaTl4eF9wbGFuZV0gPSBjcnRjOworCX0K KworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwKQorCQlkcm1fY3J0Y19jcmVhdGVfc2Nh bGluZ19maWx0ZXJfcHJvcGVydHkoJmNydGMtPmJhc2UsCisJCQkJCQlCSVQoRFJNX1NDQUxJTkdf RklMVEVSX0RFRkFVTFQpIHwKKwkJCQkJCUJJVChEUk1fU0NBTElOR19GSUxURVJfTkVBUkVTVF9O RUlHSEJPUikpOworCisJaW50ZWxfY29sb3JfaW5pdChjcnRjKTsKKworCWludGVsX2NydGNfY3Jj X2luaXQoY3J0Yyk7CisKKwlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgZHJtX2NydGNfaW5k ZXgoJmNydGMtPmJhc2UpICE9IGNydGMtPnBpcGUpOworCisJcmV0dXJuIDA7CisKK2ZhaWw6CisJ aW50ZWxfY3J0Y19mcmVlKGNydGMpOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3J0Yy5oIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9jcnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwLi5kYTI4YWY3NWFlMjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX2NydGMuaApAQCAtMCwwICsxLDIwIEBACisvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogTUlUICovCisvKgorICogQ29weXJpZ2h0IMKpIDIwMjAgSW50ZWwg Q29ycG9yYXRpb24KKyAqLworCisjaWZuZGVmIF9JTlRFTF9DUlRDX0hfCisjZGVmaW5lIF9JTlRF TF9DUlRDX0hfCisKKyNpbmNsdWRlICJpbnRlbF9kaXNwbGF5LmgiCisKK3N0cnVjdCBpbnRlbF9j cnRjX3N0YXRlOworCit1MzIgaW50ZWxfY3J0Y19tYXhfdmJsYW5rX2NvdW50KGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKK2ludCBpbnRlbF9jcnRjX2luaXQoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBpcGUgcGlwZSk7CitzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqaW50ZWxfY3J0Y19zdGF0ZV9hbGxvYyhzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0Yyk7Cit2b2lkIGludGVsX2NydGNfc3RhdGVfcmVzZXQoc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUsCisJCQkgICAgc3RydWN0IGludGVsX2NydGMgKmNydGMpOworCisK KyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9k aXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwpp bmRleCAyODg1NTg0NGY4ZGUuLjVkZmVjOTUwYzE0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKQEAgLTY4LDggKzY4LDggQEAKICNpbmNsdWRlICJp bnRlbF9idy5oIgogI2luY2x1ZGUgImludGVsX2NkY2xrLmgiCiAjaW5jbHVkZSAiaW50ZWxfY29s b3IuaCIKKyNpbmNsdWRlICJpbnRlbF9jcnRjLmgiCiAjaW5jbHVkZSAiaW50ZWxfY3NyLmgiCi0j aW5jbHVkZSAiaW50ZWxfY3Vyc29yLmgiCiAjaW5jbHVkZSAiaW50ZWxfZGlzcGxheV90eXBlcy5o IgogI2luY2x1ZGUgImludGVsX2RwX2xpbmtfdHJhaW5pbmcuaCIKICNpbmNsdWRlICJpbnRlbF9m YmMuaCIKQEAgLTg4LDU2ICs4OCw2IEBACiAjaW5jbHVkZSAiaW50ZWxfdGMuaCIKICNpbmNsdWRl ICJpbnRlbF92Z2EuaCIKIAotLyogUHJpbWFyeSBwbGFuZSBmb3JtYXRzIGZvciBnZW4gPD0gMyAq Lwotc3RhdGljIGNvbnN0IHUzMiBpOHh4X3ByaW1hcnlfZm9ybWF0c1tdID0gewotCURSTV9GT1JN QVRfQzgsCi0JRFJNX0ZPUk1BVF9YUkdCMTU1NSwKLQlEUk1fRk9STUFUX1JHQjU2NSwKLQlEUk1f Rk9STUFUX1hSR0I4ODg4LAotfTsKLQotLyogUHJpbWFyeSBwbGFuZSBmb3JtYXRzIGZvciBpdmIg KG5vIGZwMTYgZHVlIHRvIGh3IGlzc3VlKSAqLwotc3RhdGljIGNvbnN0IHUzMiBpdmJfcHJpbWFy eV9mb3JtYXRzW10gPSB7Ci0JRFJNX0ZPUk1BVF9DOCwKLQlEUk1fRk9STUFUX1JHQjU2NSwKLQlE Uk1fRk9STUFUX1hSR0I4ODg4LAotCURSTV9GT1JNQVRfWEJHUjg4ODgsCi0JRFJNX0ZPUk1BVF9Y UkdCMjEwMTAxMCwKLQlEUk1fRk9STUFUX1hCR1IyMTAxMDEwLAotfTsKLQotLyogUHJpbWFyeSBw bGFuZSBmb3JtYXRzIGZvciBnZW4gPj0gNCwgZXhjZXB0IGl2YiAqLwotc3RhdGljIGNvbnN0IHUz MiBpOTY1X3ByaW1hcnlfZm9ybWF0c1tdID0gewotCURSTV9GT1JNQVRfQzgsCi0JRFJNX0ZPUk1B VF9SR0I1NjUsCi0JRFJNX0ZPUk1BVF9YUkdCODg4OCwKLQlEUk1fRk9STUFUX1hCR1I4ODg4LAot CURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCi0JRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwKLQlEUk1f Rk9STUFUX1hCR1IxNjE2MTYxNkYsCi19OwotCi0vKiBQcmltYXJ5IHBsYW5lIGZvcm1hdHMgZm9y IHZsdi9jaHYgKi8KLXN0YXRpYyBjb25zdCB1MzIgdmx2X3ByaW1hcnlfZm9ybWF0c1tdID0gewot CURSTV9GT1JNQVRfQzgsCi0JRFJNX0ZPUk1BVF9SR0I1NjUsCi0JRFJNX0ZPUk1BVF9YUkdCODg4 OCwKLQlEUk1fRk9STUFUX1hCR1I4ODg4LAotCURSTV9GT1JNQVRfQVJHQjg4ODgsCi0JRFJNX0ZP Uk1BVF9BQkdSODg4OCwKLQlEUk1fRk9STUFUX1hSR0IyMTAxMDEwLAotCURSTV9GT1JNQVRfWEJH UjIxMDEwMTAsCi0JRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMCwKLQlEUk1fRk9STUFUX0FCR1IyMTAx MDEwLAotCURSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RiwKLX07Ci0KLXN0YXRpYyBjb25zdCB1NjQg aTl4eF9mb3JtYXRfbW9kaWZpZXJzW10gPSB7Ci0JSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQsCi0J RFJNX0ZPUk1BVF9NT0RfTElORUFSLAotCURSTV9GT1JNQVRfTU9EX0lOVkFMSUQKLX07Ci0KIHN0 YXRpYyB2b2lkIGk5eHhfY3J0Y19jbG9ja19nZXQoc3RydWN0IGludGVsX2NydGMgKmNydGMsCiAJ CQkJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKTsKIHN0YXRpYyB2b2lkIGls a19wY2hfY2xvY2tfZ2V0KHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLApAQCAtMTYzLDcgKzExMyw2 IEBAIHN0YXRpYyB2b2lkIHNrbF9wZml0X2VuYWJsZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSk7CiBzdGF0aWMgdm9pZCBpbGtfcGZpdF9lbmFibGUoY29uc3Qgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOwogc3RhdGljIHZvaWQgaW50ZWxfbW9k ZXNldF9zZXR1cF9od19zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCQkgc3RydWN0 IGRybV9tb2Rlc2V0X2FjcXVpcmVfY3R4ICpjdHgpOwotc3RhdGljIHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICppbnRlbF9jcnRjX3N0YXRlX2FsbG9jKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKTsK IAogc3RydWN0IGludGVsX2xpbWl0IHsKIAlzdHJ1Y3QgewpAQCAtMTMwMiwxMiArMTI1MSw2IEBA IHN0YXRpYyB2b2lkIGFzc2VydF9wbGFuZXNfZGlzYWJsZWQoc3RydWN0IGludGVsX2NydGMgKmNy dGMpCiAJCWFzc2VydF9wbGFuZV9kaXNhYmxlZChwbGFuZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFz c2VydF92YmxhbmtfZGlzYWJsZWQoc3RydWN0IGRybV9jcnRjICpjcnRjKQotewotCWlmIChJOTE1 X1NUQVRFX1dBUk5fT04oZHJtX2NydGNfdmJsYW5rX2dldChjcnRjKSA9PSAwKSkKLQkJZHJtX2Ny dGNfdmJsYW5rX3B1dChjcnRjKTsKLX0KLQogdm9pZCBhc3NlcnRfcGNoX3RyYW5zY29kZXJfZGlz YWJsZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQkJCSAgICBlbnVtIHBp cGUgcGlwZSkKIHsKQEAgLTE3OTIsNTUgKzE3MzUsNiBAQCBlbnVtIHBpcGUgaW50ZWxfY3J0Y19w Y2hfdHJhbnNjb2RlcihzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKIAkJcmV0dXJuIGNydGMtPnBp cGU7CiB9CiAKLXN0YXRpYyB1MzIgaW50ZWxfY3J0Y19tYXhfdmJsYW5rX2NvdW50KGNvbnN0IHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQotewotCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjLT5kZXYpOwot CXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBp LmNydGMpOwotCXUzMiBtb2RlX2ZsYWdzID0gY3J0Yy0+bW9kZV9mbGFnczsKLQotCS8qCi0JICog RnJvbSBHZW4gMTEsIEluIGNhc2Ugb2YgZHNpIGNtZCBtb2RlLCBmcmFtZSBjb3VudGVyIHdvdWxk bnQKLQkgKiBoYXZlIHVwZGF0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBURSwgaWYgd2Ugd2FudCB0 byB1c2UKLQkgKiB0aGUgaHcgY291bnRlciwgdGhlbiB3ZSB3b3VsZCBmaW5kIGl0IHVwZGF0ZWQg aW4gb25seQotCSAqIHRoZSBuZXh0IFRFLCBoZW5jZSBzd2l0Y2hpbmcgdG8gc3cgY291bnRlci4K LQkgKi8KLQlpZiAobW9kZV9mbGFncyAmIChJOTE1X01PREVfRkxBR19EU0lfVVNFX1RFMCB8IEk5 MTVfTU9ERV9GTEFHX0RTSV9VU0VfVEUxKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIE9uIGk5 NjVnbSB0aGUgaGFyZHdhcmUgZnJhbWUgY291bnRlciByZWFkcwotCSAqIHplcm8gd2hlbiB0aGUg VFYgZW5jb2RlciBpcyBlbmFibGVkIDooCi0JICovCi0JaWYgKElTX0k5NjVHTShkZXZfcHJpdikg JiYKLQkgICAgKGNydGNfc3RhdGUtPm91dHB1dF90eXBlcyAmIEJJVChJTlRFTF9PVVRQVVRfVFZP VVQpKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA1IHx8IElT X0c0WChkZXZfcHJpdikpCi0JCXJldHVybiAweGZmZmZmZmZmOyAvKiBmdWxsIDMyIGJpdCBjb3Vu dGVyICovCi0JZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAzKQotCQlyZXR1cm4gMHhm ZmZmZmY7IC8qIG9ubHkgMjQgYml0cyBvZiBmcmFtZSBjb3VudCAqLwotCWVsc2UKLQkJcmV0dXJu IDA7IC8qIEdlbjIgZG9lc24ndCBoYXZlIGEgaGFyZHdhcmUgZnJhbWUgY291bnRlciAqLwotfQot Ci12b2lkIGludGVsX2NydGNfdmJsYW5rX29uKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlKQotewotCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0 YyhjcnRjX3N0YXRlLT51YXBpLmNydGMpOwotCi0JYXNzZXJ0X3ZibGFua19kaXNhYmxlZCgmY3J0 Yy0+YmFzZSk7Ci0JZHJtX2NydGNfc2V0X21heF92YmxhbmtfY291bnQoJmNydGMtPmJhc2UsCi0J CQkJICAgICAgaW50ZWxfY3J0Y19tYXhfdmJsYW5rX2NvdW50KGNydGNfc3RhdGUpKTsKLQlkcm1f Y3J0Y192Ymxhbmtfb24oJmNydGMtPmJhc2UpOwotfQotCi12b2lkIGludGVsX2NydGNfdmJsYW5r X29mZihjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlzdHJ1 Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+dWFwaS5jcnRj KTsKLQotCWRybV9jcnRjX3ZibGFua19vZmYoJmNydGMtPmJhc2UpOwotCWFzc2VydF92Ymxhbmtf ZGlzYWJsZWQoJmNydGMtPmJhc2UpOwotfQotCiB2b2lkIGludGVsX2VuYWJsZV9waXBlKGNvbnN0 IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpuZXdfY3J0Y19zdGF0ZSkKIHsKIAlzdHJ1Y3QgaW50 ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMobmV3X2NydGNfc3RhdGUtPnVhcGkuY3J0Yyk7 CkBAIC00MDQ3LDE3MSArMzk0MSw2IEBAIGludCBza2xfY2hlY2tfcGxhbmVfc3VyZmFjZShzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQogCXJldHVybiAwOwogfQogCi1zdGF0 aWMgdm9pZCBpOXh4X3BsYW5lX3JhdGlvKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlLAotCQkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlLAotCQkJICAgICB1bnNpZ25lZCBpbnQgKm51bSwgdW5zaWduZWQgaW50ICpkZW4pCi17 Ci0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7 Ci0JdW5zaWduZWQgaW50IGNwcCA9IGZiLT5mb3JtYXQtPmNwcFswXTsKLQotCS8qCi0JICogZzR4 IGJzcGVjIHNheXMgNjRicHAgcGl4ZWwgcmF0ZSBjYW4ndCBleGNlZWQgODAlCi0JICogb2YgY2Rj bGsgd2hlbiB0aGUgc3ByaXRlIHBsYW5lIGlzIGVuYWJsZWQgb24gdGhlCi0JICogc2FtZSBwaXBl LiBpbGsvc25iIGJzcGVjIHNheXMgNjRicHAgcGl4ZWwgcmF0ZSBpcwotCSAqIG5ldmVyIGFsbG93 ZWQgdG8gZXhjZWVkIDgwJSBvZiBjZGNsay4gTGV0J3MganVzdCBnbwotCSAqIHdpdGggdGhlIGls ay9zbmIgbGltaXQgYWx3YXlzLgotCSAqLwotCWlmIChjcHAgPT0gOCkgewotCQkqbnVtID0gMTA7 Ci0JCSpkZW4gPSA4OwotCX0gZWxzZSB7Ci0JCSpudW0gPSAxOwotCQkqZGVuID0gMTsKLQl9Ci19 Ci0KLXN0YXRpYyBpbnQgaTl4eF9wbGFuZV9taW5fY2RjbGsoY29uc3Qgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCQkJY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRl ICpwbGFuZV9zdGF0ZSkKLXsKLQl1bnNpZ25lZCBpbnQgcGl4ZWxfcmF0ZTsKLQl1bnNpZ25lZCBp bnQgbnVtLCBkZW47Ci0KLQkvKgotCSAqIE5vdGUgdGhhdCBjcnRjX3N0YXRlLT5waXhlbF9yYXRl IGFjY291bnRzIGZvciBib3RoCi0JICogaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgcGFuZWwgZml0 dGVyIGRvd25zY2FsaW5nIGZhY3RvcnMuCi0JICogUHJlLUhTVyBic3BlYyB0ZWxscyB1cyB0byBv bmx5IGNvbnNpZGVyIHRoZSBob3Jpem9udGFsCi0JICogZG93bnNjYWxpbmcgZmFjdG9yIGhlcmUu IFdlIGlnbm9yZSB0aGF0IGFuZCBqdXN0IGNvbnNpZGVyCi0JICogYm90aCBmb3Igc2ltcGxpY2l0 eS4KLQkgKi8KLQlwaXhlbF9yYXRlID0gY3J0Y19zdGF0ZS0+cGl4ZWxfcmF0ZTsKLQotCWk5eHhf cGxhbmVfcmF0aW8oY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUsICZudW0sICZkZW4pOwotCi0JLyog dHdvIHBpeGVscyBwZXIgY2xvY2sgd2l0aCBkb3VibGUgd2lkZSBwaXBlICovCi0JaWYgKGNydGNf c3RhdGUtPmRvdWJsZV93aWRlKQotCQlkZW4gKj0gMjsKLQotCXJldHVybiBESVZfUk9VTkRfVVAo cGl4ZWxfcmF0ZSAqIG51bSwgZGVuKTsKLX0KLQotdW5zaWduZWQgaW50Ci1pOXh4X3BsYW5lX21h eF9zdHJpZGUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKLQkJICAgICAgdTMyIHBpeGVsX2Zv cm1hdCwgdTY0IG1vZGlmaWVyLAotCQkgICAgICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCi17Ci0J c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5k ZXYpOwotCi0JaWYgKCFIQVNfR01DSChkZXZfcHJpdikpIHsKLQkJcmV0dXJuIDMyKjEwMjQ7Ci0J fSBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpIHsKLQkJaWYgKG1vZGlmaWVyID09 IEk5MTVfRk9STUFUX01PRF9YX1RJTEVEKQotCQkJcmV0dXJuIDE2KjEwMjQ7Ci0JCWVsc2UKLQkJ CXJldHVybiAzMioxMDI0OwotCX0gZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAzKSB7 Ci0JCWlmIChtb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCkKLQkJCXJldHVybiA4 KjEwMjQ7Ci0JCWVsc2UKLQkJCXJldHVybiAxNioxMDI0OwotCX0gZWxzZSB7Ci0JCWlmIChwbGFu ZS0+aTl4eF9wbGFuZSA9PSBQTEFORV9DKQotCQkJcmV0dXJuIDQqMTAyNDsKLQkJZWxzZQotCQkJ cmV0dXJuIDgqMTAyNDsKLQl9Ci19Ci0KLXN0YXRpYyB1MzIgaTl4eF9wbGFuZV9jdGxfY3J0Yyhj b25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgaW50 ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKLQlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2 KTsKLQl1MzIgZHNwY250ciA9IDA7Ci0KLQlpZiAoY3J0Y19zdGF0ZS0+Z2FtbWFfZW5hYmxlKQot CQlkc3BjbnRyIHw9IERJU1BQTEFORV9HQU1NQV9FTkFCTEU7Ci0KLQlpZiAoY3J0Y19zdGF0ZS0+ Y3NjX2VuYWJsZSkKLQkJZHNwY250ciB8PSBESVNQUExBTkVfUElQRV9DU0NfRU5BQkxFOwotCi0J aWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCA1KQotCQlkc3BjbnRyIHw9IERJU1BQTEFORV9TRUxf UElQRShjcnRjLT5waXBlKTsKLQotCXJldHVybiBkc3BjbnRyOwotfQotCi1zdGF0aWMgdTMyIGk5 eHhfcGxhbmVfY3RsKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAot CQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9Ci0JCXRvX2k5MTUocGxhbmVfc3RhdGUt PnVhcGkucGxhbmUtPmRldik7Ci0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBw bGFuZV9zdGF0ZS0+aHcuZmI7Ci0JdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUt Pmh3LnJvdGF0aW9uOwotCXUzMiBkc3BjbnRyOwotCi0JZHNwY250ciA9IERJU1BMQVlfUExBTkVf RU5BQkxFOwotCi0JaWYgKElTX0c0WChkZXZfcHJpdikgfHwgSVNfR0VOKGRldl9wcml2LCA1KSB8 fAotCSAgICBJU19HRU4oZGV2X3ByaXYsIDYpIHx8IElTX0lWWUJSSURHRShkZXZfcHJpdikpCi0J CWRzcGNudHIgfD0gRElTUFBMQU5FX1RSSUNLTEVfRkVFRF9ESVNBQkxFOwotCi0Jc3dpdGNoIChm Yi0+Zm9ybWF0LT5mb3JtYXQpIHsKLQljYXNlIERSTV9GT1JNQVRfQzg6Ci0JCWRzcGNudHIgfD0g RElTUFBMQU5FXzhCUFA7Ci0JCWJyZWFrOwotCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTU1NToKLQkJ ZHNwY250ciB8PSBESVNQUExBTkVfQkdSWDU1NTsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFU X0FSR0IxNTU1OgotCQlkc3BjbnRyIHw9IERJU1BQTEFORV9CR1JBNTU1OwotCQlicmVhazsKLQlj YXNlIERSTV9GT1JNQVRfUkdCNTY1OgotCQlkc3BjbnRyIHw9IERJU1BQTEFORV9CR1JYNTY1Owot CQlicmVhazsKLQljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Ci0JCWRzcGNudHIgfD0gRElTUFBM QU5FX0JHUlg4ODg7Ci0JCWJyZWFrOwotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKLQkJZHNw Y250ciB8PSBESVNQUExBTkVfUkdCWDg4ODsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFUX0FS R0I4ODg4OgotCQlkc3BjbnRyIHw9IERJU1BQTEFORV9CR1JBODg4OwotCQlicmVhazsKLQljYXNl IERSTV9GT1JNQVRfQUJHUjg4ODg6Ci0JCWRzcGNudHIgfD0gRElTUFBMQU5FX1JHQkE4ODg7Ci0J CWJyZWFrOwotCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMDoKLQkJZHNwY250ciB8PSBESVNQ UExBTkVfQkdSWDEwMTAxMDsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1IyMTAxMDEw OgotCQlkc3BjbnRyIHw9IERJU1BQTEFORV9SR0JYMTAxMDEwOwotCQlicmVhazsKLQljYXNlIERS TV9GT1JNQVRfQVJHQjIxMDEwMTA6Ci0JCWRzcGNudHIgfD0gRElTUFBMQU5FX0JHUkExMDEwMTA7 Ci0JCWJyZWFrOwotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMDoKLQkJZHNwY250ciB8PSBE SVNQUExBTkVfUkdCQTEwMTAxMDsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1IxNjE2 MTYxNkY6Ci0JCWRzcGNudHIgfD0gRElTUFBMQU5FX1JHQlgxNjE2MTY7Ci0JCWJyZWFrOwotCWRl ZmF1bHQ6Ci0JCU1JU1NJTkdfQ0FTRShmYi0+Zm9ybWF0LT5mb3JtYXQpOwotCQlyZXR1cm4gMDsK LQl9Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0ICYmCi0JICAgIGZiLT5tb2RpZmll ciA9PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCkKLQkJZHNwY250ciB8PSBESVNQUExBTkVfVElM RUQ7Ci0KLQlpZiAocm90YXRpb24gJiBEUk1fTU9ERV9ST1RBVEVfMTgwKQotCQlkc3BjbnRyIHw9 IERJU1BQTEFORV9ST1RBVEVfMTgwOwotCi0JaWYgKHJvdGF0aW9uICYgRFJNX01PREVfUkVGTEVD VF9YKQotCQlkc3BjbnRyIHw9IERJU1BQTEFORV9NSVJST1I7Ci0KLQlyZXR1cm4gZHNwY250cjsK LX0KLQogaW50IGk5eHhfY2hlY2tfcGxhbmVfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 CkBAIC00MjcyLDE5NyArNDAwMSw2IEBAIGludCBpOXh4X2NoZWNrX3BsYW5lX3N1cmZhY2Uoc3Ry dWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKIAlyZXR1cm4gMDsKIH0KIAotc3Rh dGljIGJvb2wgaTl4eF9wbGFuZV9oYXNfd2luZG93aW5nKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxh bmUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFu ZS0+YmFzZS5kZXYpOwotCWVudW0gaTl4eF9wbGFuZV9pZCBpOXh4X3BsYW5lID0gcGxhbmUtPmk5 eHhfcGxhbmU7Ci0KLQlpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCi0JCXJldHVybiBpOXh4 X3BsYW5lID09IFBMQU5FX0I7Ci0JZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA1IHx8 IElTX0c0WChkZXZfcHJpdikpCi0JCXJldHVybiBmYWxzZTsKLQllbHNlIGlmIChJU19HRU4oZGV2 X3ByaXYsIDQpKQotCQlyZXR1cm4gaTl4eF9wbGFuZSA9PSBQTEFORV9DOwotCWVsc2UKLQkJcmV0 dXJuIGk5eHhfcGxhbmUgPT0gUExBTkVfQiB8fAotCQkJaTl4eF9wbGFuZSA9PSBQTEFORV9DOwot fQotCi1zdGF0aWMgaW50Ci1pOXh4X3BsYW5lX2NoZWNrKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlLAotCQkgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkK LXsKLQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3Rh dGUtPnVhcGkucGxhbmUpOwotCWludCByZXQ7Ci0KLQlyZXQgPSBjaHZfcGxhbmVfY2hlY2tfcm90 YXRpb24ocGxhbmVfc3RhdGUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBp bnRlbF9hdG9taWNfcGxhbmVfY2hlY2tfY2xpcHBpbmcocGxhbmVfc3RhdGUsIGNydGNfc3RhdGUs Ci0JCQkJCQlEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCi0JCQkJCQlEUk1fUExBTkVfSEVM UEVSX05PX1NDQUxJTkcsCi0JCQkJCQlpOXh4X3BsYW5lX2hhc193aW5kb3dpbmcocGxhbmUpKTsK LQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gaTl4eF9jaGVja19wbGFuZV9zdXJm YWNlKHBsYW5lX3N0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKCFwbGFu ZV9zdGF0ZS0+dWFwaS52aXNpYmxlKQotCQlyZXR1cm4gMDsKLQotCXJldCA9IGludGVsX3BsYW5l X2NoZWNrX3NyY19jb29yZGluYXRlcyhwbGFuZV9zdGF0ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJu IHJldDsKLQotCXBsYW5lX3N0YXRlLT5jdGwgPSBpOXh4X3BsYW5lX2N0bChjcnRjX3N0YXRlLCBw bGFuZV9zdGF0ZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgaTl4eF91cGRhdGVf cGxhbmUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVs X3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Ci0JZW51bSBpOXh4X3BsYW5lX2lk IGk5eHhfcGxhbmUgPSBwbGFuZS0+aTl4eF9wbGFuZTsKLQl1MzIgbGluZWFyX29mZnNldDsKLQlp bnQgeCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS54OwotCWludCB5ID0gcGxhbmVfc3Rh dGUtPmNvbG9yX3BsYW5lWzBdLnk7Ci0JaW50IGNydGNfeCA9IHBsYW5lX3N0YXRlLT51YXBpLmRz dC54MTsKLQlpbnQgY3J0Y195ID0gcGxhbmVfc3RhdGUtPnVhcGkuZHN0LnkxOwotCWludCBjcnRj X3cgPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsKLQlpbnQgY3J0Y19o ID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOwotCXVuc2lnbmVkIGxv bmcgaXJxZmxhZ3M7Ci0JdTMyIGRzcGFkZHJfb2Zmc2V0OwotCXUzMiBkc3BjbnRyOwotCi0JZHNw Y250ciA9IHBsYW5lX3N0YXRlLT5jdGwgfCBpOXh4X3BsYW5lX2N0bF9jcnRjKGNydGNfc3RhdGUp OwotCi0JbGluZWFyX29mZnNldCA9IGludGVsX2ZiX3h5X3RvX2xpbmVhcih4LCB5LCBwbGFuZV9z dGF0ZSwgMCk7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0KQotCQlkc3BhZGRyX29m ZnNldCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5vZmZzZXQ7Ci0JZWxzZQotCQlkc3Bh ZGRyX29mZnNldCA9IGxpbmVhcl9vZmZzZXQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3By aXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Ci0KLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJp diwgRFNQU1RSSURFKGk5eHhfcGxhbmUpLAotCQkJICBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVb MF0uc3RyaWRlKTsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgNCkgewotCQkvKgotCQkg KiBQTEFORV9BIGRvZXNuJ3QgYWN0dWFsbHkgaGF2ZSBhIGZ1bGwgd2luZG93Ci0JCSAqIGdlbmVy YXRvciBidXQgbGV0J3MgYXNzdW1lIHdlIHN0aWxsIG5lZWQgdG8KLQkJICogcHJvZ3JhbSB3aGF0 ZXZlciBpcyB0aGVyZS4KLQkJICovCi0JCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BQ T1MoaTl4eF9wbGFuZSksCi0JCQkJICAoY3J0Y195IDw8IDE2KSB8IGNydGNfeCk7Ci0JCWludGVs X2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BTSVpFKGk5eHhfcGxhbmUpLAotCQkJCSAgKChjcnRj X2ggLSAxKSA8PCAxNikgfCAoY3J0Y193IC0gMSkpOwotCX0gZWxzZSBpZiAoSVNfQ0hFUlJZVklF VyhkZXZfcHJpdikgJiYgaTl4eF9wbGFuZSA9PSBQTEFORV9CKSB7Ci0JCWludGVsX2RlX3dyaXRl X2Z3KGRldl9wcml2LCBQUklNUE9TKGk5eHhfcGxhbmUpLAotCQkJCSAgKGNydGNfeSA8PCAxNikg fCBjcnRjX3gpOwotCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUFJJTVNJWkUoaTl4eF9w bGFuZSksCi0JCQkJICAoKGNydGNfaCAtIDEpIDw8IDE2KSB8IChjcnRjX3cgLSAxKSk7Ci0JCWlu dGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQUklNQ05TVEFMUEhBKGk5eHhfcGxhbmUpLCAwKTsK LQl9Ci0KLQlpZiAoSVNfSEFTV0VMTChkZXZfcHJpdikgfHwgSVNfQlJPQURXRUxMKGRldl9wcml2 KSkgewotCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQT0ZGU0VUKGk5eHhfcGxhbmUp LAotCQkJCSAgKHkgPDwgMTYpIHwgeCk7Ci0JfSBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYp ID49IDQpIHsKLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUExJTk9GRihpOXh4X3Bs YW5lKSwKLQkJCQkgIGxpbmVhcl9vZmZzZXQpOwotCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJp diwgRFNQVElMRU9GRihpOXh4X3BsYW5lKSwKLQkJCQkgICh5IDw8IDE2KSB8IHgpOwotCX0KLQot CS8qCi0JICogVGhlIGNvbnRyb2wgcmVnaXN0ZXIgc2VsZi1hcm1zIGlmIHRoZSBwbGFuZSB3YXMg cHJldmlvdXNseQotCSAqIGRpc2FibGVkLiBUcnkgdG8gbWFrZSB0aGUgcGxhbmUgZW5hYmxlIGF0 b21pYyBieSB3cml0aW5nCi0JICogdGhlIGNvbnRyb2wgcmVnaXN0ZXIganVzdCBiZWZvcmUgdGhl IHN1cmZhY2UgcmVnaXN0ZXIuCi0JICovCi0JaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERT UENOVFIoaTl4eF9wbGFuZSksIGRzcGNudHIpOwotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49 IDQpCi0JCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BTVVJGKGk5eHhfcGxhbmUpLAot CQkJCSAgaW50ZWxfcGxhbmVfZ2d0dF9vZmZzZXQocGxhbmVfc3RhdGUpICsgZHNwYWRkcl9vZmZz ZXQpOwotCWVsc2UKLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUEFERFIoaTl4eF9w bGFuZSksCi0JCQkJICBpbnRlbF9wbGFuZV9nZ3R0X29mZnNldChwbGFuZV9zdGF0ZSkgKyBkc3Bh ZGRyX29mZnNldCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+dW5jb3Jl LmxvY2ssIGlycWZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgaTl4eF9kaXNhYmxlX3BsYW5lKHN0 cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwotCWVudW0gaTl4eF9wbGFuZV9pZCBpOXh4 X3BsYW5lID0gcGxhbmUtPmk5eHhfcGxhbmU7Ci0JdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKLQl1 MzIgZHNwY250cjsKLQotCS8qCi0JICogRFNQQ05UUiBwaXBlIGdhbW1hIGVuYWJsZSBvbiBnNHgr IGFuZCBwaXBlIGNzYwotCSAqIGVuYWJsZSBvbiBpbGsrIGFmZmVjdCB0aGUgcGlwZSBib3R0b20g Y29sb3IgYXMKLQkgKiB3ZWxsLCBzbyB3ZSBtdXN0IGNvbmZpZ3VyZSB0aGVtIGV2ZW4gaWYgdGhl IHBsYW5lCi0JICogaXMgZGlzYWJsZWQuCi0JICoKLQkgKiBPbiBwcmUtZzR4IHRoZXJlIGlzIG5v IHdheSB0byBnYW1tYSBjb3JyZWN0IHRoZQotCSAqIHBpcGUgYm90dG9tIGNvbG9yIGJ1dCB3ZSds bCBrZWVwIG9uIGRvaW5nIHRoaXMKLQkgKiBhbnl3YXkgc28gdGhhdCB0aGUgY3J0YyBzdGF0ZSBy ZWFkb3V0IHdvcmtzIGNvcnJlY3RseS4KLQkgKi8KLQlkc3BjbnRyID0gaTl4eF9wbGFuZV9jdGxf Y3J0YyhjcnRjX3N0YXRlKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dW5jb3Jl LmxvY2ssIGlycWZsYWdzKTsKLQotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BDTlRS KGk5eHhfcGxhbmUpLCBkc3BjbnRyKTsKLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0KQot CQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQU1VSRihpOXh4X3BsYW5lKSwgMCk7Ci0J ZWxzZQotCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQQUREUihpOXh4X3BsYW5lKSwg MCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGly cWZsYWdzKTsKLX0KLQotc3RhdGljIGJvb2wgaTl4eF9wbGFuZV9nZXRfaHdfc3RhdGUoc3RydWN0 IGludGVsX3BsYW5lICpwbGFuZSwKLQkJCQkgICAgZW51bSBwaXBlICpwaXBlKQotewotCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsK LQllbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIHBvd2VyX2RvbWFpbjsKLQllbnVtIGk5 eHhfcGxhbmVfaWQgaTl4eF9wbGFuZSA9IHBsYW5lLT5pOXh4X3BsYW5lOwotCWludGVsX3dha2Vy ZWZfdCB3YWtlcmVmOwotCWJvb2wgcmV0OwotCXUzMiB2YWw7Ci0KLQkvKgotCSAqIE5vdCAxMDAl IGNvcnJlY3QgZm9yIHBsYW5lcyB0aGF0IGNhbiBtb3ZlIGJldHdlZW4gcGlwZXMsCi0JICogYnV0 IHRoYXQncyBvbmx5IHRoZSBjYXNlIGZvciBnZW4yLTQgd2hpY2ggZG9uJ3QgaGF2ZSBhbnkKLQkg KiBkaXNwbGF5IHBvd2VyIHdlbGxzLgotCSAqLwotCXBvd2VyX2RvbWFpbiA9IFBPV0VSX0RPTUFJ Tl9QSVBFKHBsYW5lLT5waXBlKTsKLQl3YWtlcmVmID0gaW50ZWxfZGlzcGxheV9wb3dlcl9nZXRf aWZfZW5hYmxlZChkZXZfcHJpdiwgcG93ZXJfZG9tYWluKTsKLQlpZiAoIXdha2VyZWYpCi0JCXJl dHVybiBmYWxzZTsKLQotCXZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIERTUENOVFIoaTl4 eF9wbGFuZSkpOwotCi0JcmV0ID0gdmFsICYgRElTUExBWV9QTEFORV9FTkFCTEU7Ci0KLQlpZiAo SU5URUxfR0VOKGRldl9wcml2KSA+PSA1KQotCQkqcGlwZSA9IHBsYW5lLT5waXBlOwotCWVsc2UK LQkJKnBpcGUgPSAodmFsICYgRElTUFBMQU5FX1NFTF9QSVBFX01BU0spID4+Ci0JCQlESVNQUExB TkVfU0VMX1BJUEVfU0hJRlQ7Ci0KLQlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwg cG93ZXJfZG9tYWluLCB3YWtlcmVmKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyB2b2lk IHNrbF9kZXRhY2hfc2NhbGVyKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLCBpbnQgaWQp CiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2NydGMtPmJhc2UuZGV2OwpAQCAt MTE5MDksMzMgKzExNDQ3LDYgQEAgc3RhdGljIHZvaWQgaWxrX3BjaF9jbG9ja19nZXQoc3RydWN0 IGludGVsX2NydGMgKmNydGMsCiAJCQkJCSAmcGlwZV9jb25maWctPmZkaV9tX24pOwogfQogCi1z dGF0aWMgdm9pZCBpbnRlbF9jcnRjX3N0YXRlX3Jlc2V0KHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlLAotCQkJCSAgIHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQotewotCW1lbXNl dChjcnRjX3N0YXRlLCAwLCBzaXplb2YoKmNydGNfc3RhdGUpKTsKLQotCV9fZHJtX2F0b21pY19o ZWxwZXJfY3J0Y19zdGF0ZV9yZXNldCgmY3J0Y19zdGF0ZS0+dWFwaSwgJmNydGMtPmJhc2UpOwot Ci0JY3J0Y19zdGF0ZS0+Y3B1X3RyYW5zY29kZXIgPSBJTlZBTElEX1RSQU5TQ09ERVI7Ci0JY3J0 Y19zdGF0ZS0+bWFzdGVyX3RyYW5zY29kZXIgPSBJTlZBTElEX1RSQU5TQ09ERVI7Ci0JY3J0Y19z dGF0ZS0+aHN3X3dvcmthcm91bmRfcGlwZSA9IElOVkFMSURfUElQRTsKLQljcnRjX3N0YXRlLT5v dXRwdXRfZm9ybWF0ID0gSU5URUxfT1VUUFVUX0ZPUk1BVF9JTlZBTElEOwotCWNydGNfc3RhdGUt PnNjYWxlcl9zdGF0ZS5zY2FsZXJfaWQgPSAtMTsKLQljcnRjX3N0YXRlLT5tc3RfbWFzdGVyX3Ry YW5zY29kZXIgPSBJTlZBTElEX1RSQU5TQ09ERVI7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqaW50ZWxfY3J0Y19zdGF0ZV9hbGxvYyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0 YykKLXsKLQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKLQotCWNydGNfc3Rh dGUgPSBrbWFsbG9jKHNpemVvZigqY3J0Y19zdGF0ZSksIEdGUF9LRVJORUwpOwotCi0JaWYgKGNy dGNfc3RhdGUpCi0JCWludGVsX2NydGNfc3RhdGVfcmVzZXQoY3J0Y19zdGF0ZSwgY3J0Yyk7Ci0K LQlyZXR1cm4gY3J0Y19zdGF0ZTsKLX0KLQogLyogUmV0dXJucyB0aGUgY3VycmVudGx5IHByb2dy YW1tZWQgbW9kZSBvZiB0aGUgZ2l2ZW4gZW5jb2Rlci4gKi8KIHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICoKIGludGVsX2VuY29kZXJfY3VycmVudF9tb2RlKHN0cnVjdCBpbnRlbF9lbmNvZGVyICpl bmNvZGVyKQpAQCAtMTE5NzYsMTQgKzExNDg3LDYgQEAgaW50ZWxfZW5jb2Rlcl9jdXJyZW50X21v ZGUoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpCiAJcmV0dXJuIG1vZGU7CiB9CiAKLXN0 YXRpYyB2b2lkIGludGVsX2NydGNfZGVzdHJveShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCi17Ci0J c3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwotCi0J ZHJtX2NydGNfY2xlYW51cChjcnRjKTsKLQlrZnJlZShpbnRlbF9jcnRjKTsKLX0KLQogLyoqCiAg KiBpbnRlbF93bV9uZWVkX3VwZGF0ZSAtIENoZWNrIHdoZXRoZXIgd2F0ZXJtYXJrcyBuZWVkIHVw ZGF0aW5nCiAgKiBAY3VyOiBjdXJyZW50IHBsYW5lIHN0YXRlCkBAIC0xNTE4NywxNyArMTQ2OTAs NiBAQCBzdGF0aWMgaW50IGludGVsX2F0b21pY19wcmVwYXJlX2NvbW1pdChzdHJ1Y3QgaW50ZWxf YXRvbWljX3N0YXRlICpzdGF0ZSkKIAlyZXR1cm4gMDsKIH0KIAotdTMyIGludGVsX2NydGNfZ2V0 X3ZibGFua19jb3VudGVyKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQotewotCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKLQlzdHJ1Y3QgZHJtX3ZibGFua19jcnRjICp2 YmxhbmsgPSAmZGV2LT52YmxhbmtbZHJtX2NydGNfaW5kZXgoJmNydGMtPmJhc2UpXTsKLQotCWlm ICghdmJsYW5rLT5tYXhfdmJsYW5rX2NvdW50KQotCQlyZXR1cm4gKHUzMilkcm1fY3J0Y19hY2N1 cmF0ZV92YmxhbmtfY291bnQoJmNydGMtPmJhc2UpOwotCi0JcmV0dXJuIGNydGMtPmJhc2UuZnVu Y3MtPmdldF92YmxhbmtfY291bnRlcigmY3J0Yy0+YmFzZSk7Ci19Ci0KIHZvaWQgaW50ZWxfY3J0 Y19hcm1fZmlmb191bmRlcnJ1bihzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKIAkJCQkgIHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQogewpAQCAtMTYyNTAsMzM2ICsxNTc0Miw2 IEBAIHZvaWQgaW50ZWxfcGxhbmVfZGVzdHJveShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKIAlr ZnJlZSh0b19pbnRlbF9wbGFuZShwbGFuZSkpOwogfQogCi1zdGF0aWMgYm9vbCBpOHh4X3BsYW5l X2Zvcm1hdF9tb2Rfc3VwcG9ydGVkKHN0cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwKLQkJCQkJICAg IHUzMiBmb3JtYXQsIHU2NCBtb2RpZmllcikKLXsKLQlzd2l0Y2ggKG1vZGlmaWVyKSB7Ci0JY2Fz ZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDoK LQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXN3aXRjaCAoZm9y bWF0KSB7Ci0JY2FzZSBEUk1fRk9STUFUX0M4OgotCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6Ci0J Y2FzZSBEUk1fRk9STUFUX1hSR0IxNTU1OgotCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKLQkJ cmV0dXJuIG1vZGlmaWVyID09IERSTV9GT1JNQVRfTU9EX0xJTkVBUiB8fAotCQkJbW9kaWZpZXIg PT0gSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIGZhbHNlOwot CX0KLX0KLQotc3RhdGljIGJvb2wgaTk2NV9wbGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZChzdHJ1 Y3QgZHJtX3BsYW5lICpfcGxhbmUsCi0JCQkJCSAgICB1MzIgZm9ybWF0LCB1NjQgbW9kaWZpZXIp Ci17Ci0Jc3dpdGNoIChtb2RpZmllcikgewotCWNhc2UgRFJNX0ZPUk1BVF9NT0RfTElORUFSOgot CWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJl dHVybiBmYWxzZTsKLQl9Ci0KLQlzd2l0Y2ggKGZvcm1hdCkgewotCWNhc2UgRFJNX0ZPUk1BVF9D ODoKLQljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgotCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoK LQljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4Ogot CWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKLQljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6 Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMjEw MTAxMDoKLQljYXNlIERSTV9GT1JNQVRfQUJHUjIxMDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX1hC R1IxNjE2MTYxNkY6Ci0JCXJldHVybiBtb2RpZmllciA9PSBEUk1fRk9STUFUX01PRF9MSU5FQVIg fHwKLQkJCW1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOwotCWRlZmF1bHQ6Ci0J CXJldHVybiBmYWxzZTsKLQl9Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1 bmNzIGk5NjVfcGxhbmVfZnVuY3MgPSB7Ci0JLnVwZGF0ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVs cGVyX3VwZGF0ZV9wbGFuZSwKLQkuZGlzYWJsZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX2Rp c2FibGVfcGxhbmUsCi0JLmRlc3Ryb3kgPSBpbnRlbF9wbGFuZV9kZXN0cm95LAotCS5hdG9taWNf ZHVwbGljYXRlX3N0YXRlID0gaW50ZWxfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAotCS5hdG9taWNf ZGVzdHJveV9zdGF0ZSA9IGludGVsX3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCi0JLmZvcm1hdF9tb2Rf c3VwcG9ydGVkID0gaTk2NV9wbGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZCwKLX07Ci0KLXN0YXRp YyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGk4eHhfcGxhbmVfZnVuY3MgPSB7Ci0JLnVw ZGF0ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwKLQkuZGlzYWJsZV9w bGFuZSA9IGRybV9hdG9taWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCi0JLmRlc3Ryb3kgPSBpbnRl bF9wbGFuZV9kZXN0cm95LAotCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gaW50ZWxfcGxhbmVf ZHVwbGljYXRlX3N0YXRlLAotCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGludGVsX3BsYW5lX2Rl c3Ryb3lfc3RhdGUsCi0JLmZvcm1hdF9tb2Rfc3VwcG9ydGVkID0gaTh4eF9wbGFuZV9mb3JtYXRf bW9kX3N1cHBvcnRlZCwKLX07Ci0KLXN0YXRpYyBib29sIGk5eHhfcGxhbmVfaGFzX2ZiYyhzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkgICAgICAgZW51bSBpOXh4X3BsYW5l X2lkIGk5eHhfcGxhbmUpCi17Ci0JaWYgKCFIQVNfRkJDKGRldl9wcml2KSkKLQkJcmV0dXJuIGZh bHNlOwotCi0JaWYgKElTX0JST0FEV0VMTChkZXZfcHJpdikgfHwgSVNfSEFTV0VMTChkZXZfcHJp dikpCi0JCXJldHVybiBpOXh4X3BsYW5lID09IFBMQU5FX0E7IC8qIHRpZWQgdG8gcGlwZSBBICov Ci0JZWxzZSBpZiAoSVNfSVZZQlJJREdFKGRldl9wcml2KSkKLQkJcmV0dXJuIGk5eHhfcGxhbmUg PT0gUExBTkVfQSB8fCBpOXh4X3BsYW5lID09IFBMQU5FX0IgfHwKLQkJCWk5eHhfcGxhbmUgPT0g UExBTkVfQzsKLQllbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpCi0JCXJldHVybiBp OXh4X3BsYW5lID09IFBMQU5FX0EgfHwgaTl4eF9wbGFuZSA9PSBQTEFORV9COwotCWVsc2UKLQkJ cmV0dXJuIGk5eHhfcGxhbmUgPT0gUExBTkVfQTsKLX0KLQotc3RhdGljIHN0cnVjdCBpbnRlbF9w bGFuZSAqCi1pbnRlbF9wcmltYXJ5X3BsYW5lX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlKQotewotCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxh bmU7Ci0JY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyAqcGxhbmVfZnVuY3M7Ci0JdW5zaWdu ZWQgaW50IHN1cHBvcnRlZF9yb3RhdGlvbnM7Ci0JY29uc3QgdTMyICpmb3JtYXRzOwotCWludCBu dW1fZm9ybWF0czsKLQlpbnQgcmV0LCB6cG9zOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikg Pj0gOSkKLQkJcmV0dXJuIHNrbF91bml2ZXJzYWxfcGxhbmVfY3JlYXRlKGRldl9wcml2LCBwaXBl LAotCQkJCQkJICBQTEFORV9QUklNQVJZKTsKLQotCXBsYW5lID0gaW50ZWxfcGxhbmVfYWxsb2Mo KTsKLQlpZiAoSVNfRVJSKHBsYW5lKSkKLQkJcmV0dXJuIHBsYW5lOwotCi0JcGxhbmUtPnBpcGUg PSBwaXBlOwotCS8qCi0JICogT24gZ2VuMi8zIG9ubHkgcGxhbmUgQSBjYW4gZG8gRkJDLCBidXQg dGhlIHBhbmVsIGZpdHRlciBhbmQgTFZEUwotCSAqIHBvcnQgaXMgaG9va2VkIHRvIHBpcGUgQi4g SGVuY2Ugd2Ugd2FudCBwbGFuZSBBIGZlZWRpbmcgcGlwZSBCLgotCSAqLwotCWlmIChIQVNfRkJD KGRldl9wcml2KSAmJiBJTlRFTF9HRU4oZGV2X3ByaXYpIDwgNCAmJgotCSAgICBJTlRFTF9OVU1f UElQRVMoZGV2X3ByaXYpID09IDIpCi0JCXBsYW5lLT5pOXh4X3BsYW5lID0gKGVudW0gaTl4eF9w bGFuZV9pZCkgIXBpcGU7Ci0JZWxzZQotCQlwbGFuZS0+aTl4eF9wbGFuZSA9IChlbnVtIGk5eHhf cGxhbmVfaWQpIHBpcGU7Ci0JcGxhbmUtPmlkID0gUExBTkVfUFJJTUFSWTsKLQlwbGFuZS0+ZnJv bnRidWZmZXJfYml0ID0gSU5URUxfRlJPTlRCVUZGRVIocGlwZSwgcGxhbmUtPmlkKTsKLQotCXBs YW5lLT5oYXNfZmJjID0gaTl4eF9wbGFuZV9oYXNfZmJjKGRldl9wcml2LCBwbGFuZS0+aTl4eF9w bGFuZSk7Ci0JaWYgKHBsYW5lLT5oYXNfZmJjKSB7Ci0JCXN0cnVjdCBpbnRlbF9mYmMgKmZiYyA9 ICZkZXZfcHJpdi0+ZmJjOwotCi0JCWZiYy0+cG9zc2libGVfZnJhbWVidWZmZXJfYml0cyB8PSBw bGFuZS0+ZnJvbnRidWZmZXJfYml0OwotCX0KLQotCWlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2 KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSkgewotCQlmb3JtYXRzID0gdmx2X3ByaW1hcnlf Zm9ybWF0czsKLQkJbnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKHZsdl9wcmltYXJ5X2Zvcm1hdHMp OwotCX0gZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0KSB7Ci0JCS8qCi0JCSAqIFdh RlAxNkdhbW1hRW5hYmxpbmc6aXZiCi0JCSAqICJXb3JrYXJvdW5kIDogV2hlbiB1c2luZyB0aGUg NjQtYml0IGZvcm1hdCwgdGhlIHBsYW5lCi0JCSAqICBvdXRwdXQgb24gZWFjaCBjb2xvciBjaGFu bmVsIGhhcyBvbmUgcXVhcnRlciBhbXBsaXR1ZGUuCi0JCSAqICBJdCBjYW4gYmUgYnJvdWdodCB1 cCB0byBmdWxsIGFtcGxpdHVkZSBieSB1c2luZyBwaXBlCi0JCSAqICBnYW1tYSBjb3JyZWN0aW9u IG9yIHBpcGUgY29sb3Igc3BhY2UgY29udmVyc2lvbiB0bwotCQkgKiAgbXVsdGlwbHkgdGhlIHBs YW5lIG91dHB1dCBieSBmb3VyLiIKLQkJICoKLQkJICogVGhlcmUgaXMgbm8gZGVkaWNhdGVkIHBs YW5lIGdhbW1hIGZvciB0aGUgcHJpbWFyeSBwbGFuZSwKLQkJICogYW5kIHVzaW5nIHRoZSBwaXBl IGdhbW1hL2NzYyBjb3VsZCBjb25mbGljdCB3aXRoIG90aGVyCi0JCSAqIHBsYW5lcywgc28gd2Ug Y2hvb3NlIG5vdCB0byBleHBvc2UgZnAxNiBvbiBJVkIgcHJpbWFyeQotCQkgKiBwbGFuZXMuIEhT VyBwcmltYXJ5IHBsYW5lcyBubyBsb25nZXIgaGF2ZSB0aGlzIHByb2JsZW0uCi0JCSAqLwotCQlp ZiAoSVNfSVZZQlJJREdFKGRldl9wcml2KSkgewotCQkJZm9ybWF0cyA9IGl2Yl9wcmltYXJ5X2Zv cm1hdHM7Ci0JCQludW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoaXZiX3ByaW1hcnlfZm9ybWF0cyk7 Ci0JCX0gZWxzZSB7Ci0JCQlmb3JtYXRzID0gaTk2NV9wcmltYXJ5X2Zvcm1hdHM7Ci0JCQludW1f Zm9ybWF0cyA9IEFSUkFZX1NJWkUoaTk2NV9wcmltYXJ5X2Zvcm1hdHMpOwotCQl9Ci0JfSBlbHNl IHsKLQkJZm9ybWF0cyA9IGk4eHhfcHJpbWFyeV9mb3JtYXRzOwotCQludW1fZm9ybWF0cyA9IEFS UkFZX1NJWkUoaTh4eF9wcmltYXJ5X2Zvcm1hdHMpOwotCX0KLQotCWlmIChJTlRFTF9HRU4oZGV2 X3ByaXYpID49IDQpCi0JCXBsYW5lX2Z1bmNzID0gJmk5NjVfcGxhbmVfZnVuY3M7Ci0JZWxzZQot CQlwbGFuZV9mdW5jcyA9ICZpOHh4X3BsYW5lX2Z1bmNzOwotCi0JaWYgKElTX1ZBTExFWVZJRVco ZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQotCQlwbGFuZS0+bWluX2NkY2xr ID0gdmx2X3BsYW5lX21pbl9jZGNsazsKLQllbHNlIGlmIChJU19CUk9BRFdFTEwoZGV2X3ByaXYp IHx8IElTX0hBU1dFTEwoZGV2X3ByaXYpKQotCQlwbGFuZS0+bWluX2NkY2xrID0gaHN3X3BsYW5l X21pbl9jZGNsazsKLQllbHNlIGlmIChJU19JVllCUklER0UoZGV2X3ByaXYpKQotCQlwbGFuZS0+ bWluX2NkY2xrID0gaXZiX3BsYW5lX21pbl9jZGNsazsKLQllbHNlCi0JCXBsYW5lLT5taW5fY2Rj bGsgPSBpOXh4X3BsYW5lX21pbl9jZGNsazsKLQotCXBsYW5lLT5tYXhfc3RyaWRlID0gaTl4eF9w bGFuZV9tYXhfc3RyaWRlOwotCXBsYW5lLT51cGRhdGVfcGxhbmUgPSBpOXh4X3VwZGF0ZV9wbGFu ZTsKLQlwbGFuZS0+ZGlzYWJsZV9wbGFuZSA9IGk5eHhfZGlzYWJsZV9wbGFuZTsKLQlwbGFuZS0+ Z2V0X2h3X3N0YXRlID0gaTl4eF9wbGFuZV9nZXRfaHdfc3RhdGU7Ci0JcGxhbmUtPmNoZWNrX3Bs YW5lID0gaTl4eF9wbGFuZV9jaGVjazsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDUg fHwgSVNfRzRYKGRldl9wcml2KSkKLQkJcmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KCZk ZXZfcHJpdi0+ZHJtLCAmcGxhbmUtPmJhc2UsCi0JCQkJCSAgICAgICAwLCBwbGFuZV9mdW5jcywK LQkJCQkJICAgICAgIGZvcm1hdHMsIG51bV9mb3JtYXRzLAotCQkJCQkgICAgICAgaTl4eF9mb3Jt YXRfbW9kaWZpZXJzLAotCQkJCQkgICAgICAgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSwKLQkJCQkJ ICAgICAgICJwcmltYXJ5ICVjIiwgcGlwZV9uYW1lKHBpcGUpKTsKLQllbHNlCi0JCXJldCA9IGRy bV91bml2ZXJzYWxfcGxhbmVfaW5pdCgmZGV2X3ByaXYtPmRybSwgJnBsYW5lLT5iYXNlLAotCQkJ CQkgICAgICAgMCwgcGxhbmVfZnVuY3MsCi0JCQkJCSAgICAgICBmb3JtYXRzLCBudW1fZm9ybWF0 cywKLQkJCQkJICAgICAgIGk5eHhfZm9ybWF0X21vZGlmaWVycywKLQkJCQkJICAgICAgIERSTV9Q TEFORV9UWVBFX1BSSU1BUlksCi0JCQkJCSAgICAgICAicGxhbmUgJWMiLAotCQkJCQkgICAgICAg cGxhbmVfbmFtZShwbGFuZS0+aTl4eF9wbGFuZSkpOwotCWlmIChyZXQpCi0JCWdvdG8gZmFpbDsK LQotCWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSAmJiBwaXBlID09IFBJUEVfQikgewotCQlz dXBwb3J0ZWRfcm90YXRpb25zID0KLQkJCURSTV9NT0RFX1JPVEFURV8wIHwgRFJNX01PREVfUk9U QVRFXzE4MCB8Ci0JCQlEUk1fTU9ERV9SRUZMRUNUX1g7Ci0JfSBlbHNlIGlmIChJTlRFTF9HRU4o ZGV2X3ByaXYpID49IDQpIHsKLQkJc3VwcG9ydGVkX3JvdGF0aW9ucyA9Ci0JCQlEUk1fTU9ERV9S T1RBVEVfMCB8IERSTV9NT0RFX1JPVEFURV8xODA7Ci0JfSBlbHNlIHsKLQkJc3VwcG9ydGVkX3Jv dGF0aW9ucyA9IERSTV9NT0RFX1JPVEFURV8wOwotCX0KLQotCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDQpCi0JCWRybV9wbGFuZV9jcmVhdGVfcm90YXRpb25fcHJvcGVydHkoJnBsYW5lLT5i YXNlLAotCQkJCQkJICAgRFJNX01PREVfUk9UQVRFXzAsCi0JCQkJCQkgICBzdXBwb3J0ZWRfcm90 YXRpb25zKTsKLQotCXpwb3MgPSAwOwotCWRybV9wbGFuZV9jcmVhdGVfenBvc19pbW11dGFibGVf cHJvcGVydHkoJnBsYW5lLT5iYXNlLCB6cG9zKTsKLQotCWRybV9wbGFuZV9oZWxwZXJfYWRkKCZw bGFuZS0+YmFzZSwgJmludGVsX3BsYW5lX2hlbHBlcl9mdW5jcyk7Ci0KLQlyZXR1cm4gcGxhbmU7 Ci0KLWZhaWw6Ci0JaW50ZWxfcGxhbmVfZnJlZShwbGFuZSk7Ci0KLQlyZXR1cm4gRVJSX1BUUihy ZXQpOwotfQotCi1zdGF0aWMgaW50IGludGVsX2NydGNfbGF0ZV9yZWdpc3RlcihzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCi17Ci0JaW50ZWxfY3J0Y19kZWJ1Z2ZzX2FkZChjcnRjKTsKLQlyZXR1cm4g MDsKLX0KLQotI2RlZmluZSBJTlRFTF9DUlRDX0ZVTkNTIFwKLQkuZ2FtbWFfc2V0ID0gZHJtX2F0 b21pY19oZWxwZXJfbGVnYWN5X2dhbW1hX3NldCwgXAotCS5zZXRfY29uZmlnID0gZHJtX2F0b21p Y19oZWxwZXJfc2V0X2NvbmZpZywgXAotCS5kZXN0cm95ID0gaW50ZWxfY3J0Y19kZXN0cm95LCBc Ci0JLnBhZ2VfZmxpcCA9IGRybV9hdG9taWNfaGVscGVyX3BhZ2VfZmxpcCwgXAotCS5hdG9taWNf ZHVwbGljYXRlX3N0YXRlID0gaW50ZWxfY3J0Y19kdXBsaWNhdGVfc3RhdGUsIFwKLQkuYXRvbWlj X2Rlc3Ryb3lfc3RhdGUgPSBpbnRlbF9jcnRjX2Rlc3Ryb3lfc3RhdGUsIFwKLQkuc2V0X2NyY19z b3VyY2UgPSBpbnRlbF9jcnRjX3NldF9jcmNfc291cmNlLCBcCi0JLnZlcmlmeV9jcmNfc291cmNl ID0gaW50ZWxfY3J0Y192ZXJpZnlfY3JjX3NvdXJjZSwgXAotCS5nZXRfY3JjX3NvdXJjZXMgPSBp bnRlbF9jcnRjX2dldF9jcmNfc291cmNlcywgXAotCS5sYXRlX3JlZ2lzdGVyID0gaW50ZWxfY3J0 Y19sYXRlX3JlZ2lzdGVyCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgYmR3 X2NydGNfZnVuY3MgPSB7Ci0JSU5URUxfQ1JUQ19GVU5DUywKLQotCS5nZXRfdmJsYW5rX2NvdW50 ZXIgPSBnNHhfZ2V0X3ZibGFua19jb3VudGVyLAotCS5lbmFibGVfdmJsYW5rID0gYmR3X2VuYWJs ZV92YmxhbmssCi0JLmRpc2FibGVfdmJsYW5rID0gYmR3X2Rpc2FibGVfdmJsYW5rLAotCS5nZXRf dmJsYW5rX3RpbWVzdGFtcCA9IGludGVsX2NydGNfZ2V0X3ZibGFua190aW1lc3RhbXAsCi19Owot Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGlsa19jcnRjX2Z1bmNzID0gewot CUlOVEVMX0NSVENfRlVOQ1MsCi0KLQkuZ2V0X3ZibGFua19jb3VudGVyID0gZzR4X2dldF92Ymxh bmtfY291bnRlciwKLQkuZW5hYmxlX3ZibGFuayA9IGlsa19lbmFibGVfdmJsYW5rLAotCS5kaXNh YmxlX3ZibGFuayA9IGlsa19kaXNhYmxlX3ZibGFuaywKLQkuZ2V0X3ZibGFua190aW1lc3RhbXAg PSBpbnRlbF9jcnRjX2dldF92YmxhbmtfdGltZXN0YW1wLAotfTsKLQotc3RhdGljIGNvbnN0IHN0 cnVjdCBkcm1fY3J0Y19mdW5jcyBnNHhfY3J0Y19mdW5jcyA9IHsKLQlJTlRFTF9DUlRDX0ZVTkNT LAotCi0JLmdldF92YmxhbmtfY291bnRlciA9IGc0eF9nZXRfdmJsYW5rX2NvdW50ZXIsCi0JLmVu YWJsZV92YmxhbmsgPSBpOTY1X2VuYWJsZV92YmxhbmssCi0JLmRpc2FibGVfdmJsYW5rID0gaTk2 NV9kaXNhYmxlX3ZibGFuaywKLQkuZ2V0X3ZibGFua190aW1lc3RhbXAgPSBpbnRlbF9jcnRjX2dl dF92YmxhbmtfdGltZXN0YW1wLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19m dW5jcyBpOTY1X2NydGNfZnVuY3MgPSB7Ci0JSU5URUxfQ1JUQ19GVU5DUywKLQotCS5nZXRfdmJs YW5rX2NvdW50ZXIgPSBpOTE1X2dldF92YmxhbmtfY291bnRlciwKLQkuZW5hYmxlX3ZibGFuayA9 IGk5NjVfZW5hYmxlX3ZibGFuaywKLQkuZGlzYWJsZV92YmxhbmsgPSBpOTY1X2Rpc2FibGVfdmJs YW5rLAotCS5nZXRfdmJsYW5rX3RpbWVzdGFtcCA9IGludGVsX2NydGNfZ2V0X3ZibGFua190aW1l c3RhbXAsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGk5MTVnbV9j cnRjX2Z1bmNzID0gewotCUlOVEVMX0NSVENfRlVOQ1MsCi0KLQkuZ2V0X3ZibGFua19jb3VudGVy ID0gaTkxNV9nZXRfdmJsYW5rX2NvdW50ZXIsCi0JLmVuYWJsZV92YmxhbmsgPSBpOTE1Z21fZW5h YmxlX3ZibGFuaywKLQkuZGlzYWJsZV92YmxhbmsgPSBpOTE1Z21fZGlzYWJsZV92YmxhbmssCi0J LmdldF92YmxhbmtfdGltZXN0YW1wID0gaW50ZWxfY3J0Y19nZXRfdmJsYW5rX3RpbWVzdGFtcCwK LX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgaTkxNV9jcnRjX2Z1bmNz ID0gewotCUlOVEVMX0NSVENfRlVOQ1MsCi0KLQkuZ2V0X3ZibGFua19jb3VudGVyID0gaTkxNV9n ZXRfdmJsYW5rX2NvdW50ZXIsCi0JLmVuYWJsZV92YmxhbmsgPSBpOHh4X2VuYWJsZV92Ymxhbmss Ci0JLmRpc2FibGVfdmJsYW5rID0gaTh4eF9kaXNhYmxlX3ZibGFuaywKLQkuZ2V0X3ZibGFua190 aW1lc3RhbXAgPSBpbnRlbF9jcnRjX2dldF92YmxhbmtfdGltZXN0YW1wLAotfTsKLQotc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBpOHh4X2NydGNfZnVuY3MgPSB7Ci0JSU5URUxf Q1JUQ19GVU5DUywKLQotCS8qIG5vIGh3IHZibGFuayBjb3VudGVyICovCi0JLmVuYWJsZV92Ymxh bmsgPSBpOHh4X2VuYWJsZV92YmxhbmssCi0JLmRpc2FibGVfdmJsYW5rID0gaTh4eF9kaXNhYmxl X3ZibGFuaywKLQkuZ2V0X3ZibGFua190aW1lc3RhbXAgPSBpbnRlbF9jcnRjX2dldF92Ymxhbmtf dGltZXN0YW1wLAotfTsKLQotc3RhdGljIHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjX2Fs bG9jKHZvaWQpCi17Ci0Jc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Ci0Jc3Ry dWN0IGludGVsX2NydGMgKmNydGM7Ci0KLQljcnRjID0ga3phbGxvYyhzaXplb2YoKmNydGMpLCBH RlBfS0VSTkVMKTsKLQlpZiAoIWNydGMpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0J Y3J0Y19zdGF0ZSA9IGludGVsX2NydGNfc3RhdGVfYWxsb2MoY3J0Yyk7Ci0JaWYgKCFjcnRjX3N0 YXRlKSB7Ci0JCWtmcmVlKGNydGMpOwotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci0K LQljcnRjLT5iYXNlLnN0YXRlID0gJmNydGNfc3RhdGUtPnVhcGk7Ci0JY3J0Yy0+Y29uZmlnID0g Y3J0Y19zdGF0ZTsKLQotCXJldHVybiBjcnRjOwotfQotCi1zdGF0aWMgdm9pZCBpbnRlbF9jcnRj X2ZyZWUoc3RydWN0IGludGVsX2NydGMgKmNydGMpCi17Ci0JaW50ZWxfY3J0Y19kZXN0cm95X3N0 YXRlKCZjcnRjLT5iYXNlLCBjcnRjLT5iYXNlLnN0YXRlKTsKLQlrZnJlZShjcnRjKTsKLX0KLQog c3RhdGljIHZvaWQgaW50ZWxfcGxhbmVfcG9zc2libGVfY3J0Y3NfaW5pdChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZTsKQEAg LTE2NTkyLDEwMCArMTU3NTQsNiBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wbGFuZV9wb3NzaWJsZV9j cnRjc19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAl9CiB9CiAKLXN0 YXRpYyBpbnQgaW50ZWxfY3J0Y19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwgZW51bSBwaXBlIHBpcGUpCi17Ci0Jc3RydWN0IGludGVsX3BsYW5lICpwcmltYXJ5LCAqY3Vy c29yOwotCWNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyAqZnVuY3M7Ci0Jc3RydWN0IGludGVs X2NydGMgKmNydGM7Ci0JaW50IHNwcml0ZSwgcmV0OwotCi0JY3J0YyA9IGludGVsX2NydGNfYWxs b2MoKTsKLQlpZiAoSVNfRVJSKGNydGMpKQotCQlyZXR1cm4gUFRSX0VSUihjcnRjKTsKLQotCWNy dGMtPnBpcGUgPSBwaXBlOwotCWNydGMtPm51bV9zY2FsZXJzID0gUlVOVElNRV9JTkZPKGRldl9w cml2KS0+bnVtX3NjYWxlcnNbcGlwZV07Ci0KLQlwcmltYXJ5ID0gaW50ZWxfcHJpbWFyeV9wbGFu ZV9jcmVhdGUoZGV2X3ByaXYsIHBpcGUpOwotCWlmIChJU19FUlIocHJpbWFyeSkpIHsKLQkJcmV0 ID0gUFRSX0VSUihwcmltYXJ5KTsKLQkJZ290byBmYWlsOwotCX0KLQljcnRjLT5wbGFuZV9pZHNf bWFzayB8PSBCSVQocHJpbWFyeS0+aWQpOwotCi0JZm9yX2VhY2hfc3ByaXRlKGRldl9wcml2LCBw aXBlLCBzcHJpdGUpIHsKLQkJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZTsKLQotCQlwbGFuZSA9 IGludGVsX3Nwcml0ZV9wbGFuZV9jcmVhdGUoZGV2X3ByaXYsIHBpcGUsIHNwcml0ZSk7Ci0JCWlm IChJU19FUlIocGxhbmUpKSB7Ci0JCQlyZXQgPSBQVFJfRVJSKHBsYW5lKTsKLQkJCWdvdG8gZmFp bDsKLQkJfQotCQljcnRjLT5wbGFuZV9pZHNfbWFzayB8PSBCSVQocGxhbmUtPmlkKTsKLQl9Ci0K LQljdXJzb3IgPSBpbnRlbF9jdXJzb3JfcGxhbmVfY3JlYXRlKGRldl9wcml2LCBwaXBlKTsKLQlp ZiAoSVNfRVJSKGN1cnNvcikpIHsKLQkJcmV0ID0gUFRSX0VSUihjdXJzb3IpOwotCQlnb3RvIGZh aWw7Ci0JfQotCWNydGMtPnBsYW5lX2lkc19tYXNrIHw9IEJJVChjdXJzb3ItPmlkKTsKLQotCWlm IChIQVNfR01DSChkZXZfcHJpdikpIHsKLQkJaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpIHx8 Ci0JCSAgICBJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19HNFgoZGV2X3ByaXYpKQotCQkJ ZnVuY3MgPSAmZzR4X2NydGNfZnVuY3M7Ci0JCWVsc2UgaWYgKElTX0dFTihkZXZfcHJpdiwgNCkp Ci0JCQlmdW5jcyA9ICZpOTY1X2NydGNfZnVuY3M7Ci0JCWVsc2UgaWYgKElTX0k5NDVHTShkZXZf cHJpdikgfHwgSVNfSTkxNUdNKGRldl9wcml2KSkKLQkJCWZ1bmNzID0gJmk5MTVnbV9jcnRjX2Z1 bmNzOwotCQllbHNlIGlmIChJU19HRU4oZGV2X3ByaXYsIDMpKQotCQkJZnVuY3MgPSAmaTkxNV9j cnRjX2Z1bmNzOwotCQllbHNlCi0JCQlmdW5jcyA9ICZpOHh4X2NydGNfZnVuY3M7Ci0JfSBlbHNl IHsKLQkJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOCkKLQkJCWZ1bmNzID0gJmJkd19jcnRj X2Z1bmNzOwotCQllbHNlCi0JCQlmdW5jcyA9ICZpbGtfY3J0Y19mdW5jczsKLQl9Ci0KLQlyZXQg PSBkcm1fY3J0Y19pbml0X3dpdGhfcGxhbmVzKCZkZXZfcHJpdi0+ZHJtLCAmY3J0Yy0+YmFzZSwK LQkJCQkJJnByaW1hcnktPmJhc2UsICZjdXJzb3ItPmJhc2UsCi0JCQkJCWZ1bmNzLCAicGlwZSAl YyIsIHBpcGVfbmFtZShwaXBlKSk7Ci0JaWYgKHJldCkKLQkJZ290byBmYWlsOwotCi0JQlVHX09O KHBpcGUgPj0gQVJSQVlfU0laRShkZXZfcHJpdi0+cGlwZV90b19jcnRjX21hcHBpbmcpIHx8Ci0J ICAgICAgIGRldl9wcml2LT5waXBlX3RvX2NydGNfbWFwcGluZ1twaXBlXSAhPSBOVUxMKTsKLQlk ZXZfcHJpdi0+cGlwZV90b19jcnRjX21hcHBpbmdbcGlwZV0gPSBjcnRjOwotCi0JaWYgKElOVEVM X0dFTihkZXZfcHJpdikgPCA5KSB7Ci0JCWVudW0gaTl4eF9wbGFuZV9pZCBpOXh4X3BsYW5lID0g cHJpbWFyeS0+aTl4eF9wbGFuZTsKLQotCQlCVUdfT04oaTl4eF9wbGFuZSA+PSBBUlJBWV9TSVpF KGRldl9wcml2LT5wbGFuZV90b19jcnRjX21hcHBpbmcpIHx8Ci0JCSAgICAgICBkZXZfcHJpdi0+ cGxhbmVfdG9fY3J0Y19tYXBwaW5nW2k5eHhfcGxhbmVdICE9IE5VTEwpOwotCQlkZXZfcHJpdi0+ cGxhbmVfdG9fY3J0Y19tYXBwaW5nW2k5eHhfcGxhbmVdID0gY3J0YzsKLQl9Ci0KLQlpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA+PSAxMCkKLQkJZHJtX2NydGNfY3JlYXRlX3NjYWxpbmdfZmlsdGVy X3Byb3BlcnR5KCZjcnRjLT5iYXNlLAotCQkJCQkJQklUKERSTV9TQ0FMSU5HX0ZJTFRFUl9ERUZB VUxUKSB8Ci0JCQkJCQlCSVQoRFJNX1NDQUxJTkdfRklMVEVSX05FQVJFU1RfTkVJR0hCT1IpKTsK LQotCWludGVsX2NvbG9yX2luaXQoY3J0Yyk7Ci0KLQlpbnRlbF9jcnRjX2NyY19pbml0KGNydGMp OwotCi0JZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sIGRybV9jcnRjX2luZGV4KCZjcnRjLT5i YXNlKSAhPSBjcnRjLT5waXBlKTsKLQotCXJldHVybiAwOwotCi1mYWlsOgotCWludGVsX2NydGNf ZnJlZShjcnRjKTsKLQotCXJldHVybiByZXQ7Ci19CiAKIGludCBpbnRlbF9nZXRfcGlwZV9mcm9t X2NydGNfaWRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCQkg ICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCi0tIAoyLjI3LjAKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50 ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=