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 87DC9C4361B for ; Thu, 10 Dec 2020 04:18:16 +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 4E27223A02 for ; Thu, 10 Dec 2020 04:18:16 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4E27223A02 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 A51196E878; Thu, 10 Dec 2020 04:18:13 +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 666806E870 for ; Thu, 10 Dec 2020 04:18:09 +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-58-KqdU72YPP0q0tzKNkFO_LA-1; Wed, 09 Dec 2020 23:18:06 -0500 X-MC-Unique: KqdU72YPP0q0tzKNkFO_LA-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 2A06D107ACE4 for ; Thu, 10 Dec 2020 04:18:05 +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 61DFB5D6A1 for ; Thu, 10 Dec 2020 04:18:04 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Thu, 10 Dec 2020 14:17:52 +1000 Message-Id: <20201210041755.29088-7-airlied@gmail.com> In-Reply-To: <20201210041755.29088-1-airlied@gmail.com> References: <20201210041755.29088-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=airlied@gmail.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: gmail.com Subject: [Intel-gfx] [PATCH 6/9] drm/i915: refactor pll code out into intel_dpll_legacy.c 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" RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClRoaXMgcHVsbHMgYSBsYXJn ZSBjaHVuayBvZiB0aGUgcGxsIGNhbGN1bGF0aW9uIGNvZGUgb3V0IG9mCmludGVsX2Rpc3BsYXku YyB0byBhIG5ldyBmaWxlLgoKT25lIGZ1bmN0aW9uIG1ha3NlIHNlbnNlIHRvIGJlIGFuIGlubGlu ZSwgb3RoZXJ3aXNlIHRoaXMKaXMgcHJldHR5IG11Y2ggYSBzdHJhaWdodCBjb3B5IGNvdmVyLiBh bHNvIGFsbCB0aGUKcmVtYWluaW5nIGhvb2tzIGZvciBnNDUgYW5kIG9sZGVyIGVuZCB1cCB0aGUg c2FtZSBub3cuCgpTaWduZWQtb2ZmLWJ5OiBEYXZlIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29t PgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAg IDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMgIHwgMTM5 MyArLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9k aXNwbGF5LmggIHwgICAxMyArLQogLi4uL2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90 eXBlcy5oICAgIHwgICAgNSArCiAuLi4vZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBsbF9s ZWdhY3kuYyAgfCAxMzcwICsrKysrKysrKysrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwgMTM5OCBp bnNlcnRpb25zKCspLCAxMzg0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBsbF9sZWdhY3kuYwoKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFr ZWZpbGUKaW5kZXggZmZlYzI1NzcwMmFmLi5hY2NlZmQ3YjM4MGUgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2Vm aWxlCkBAIC0yMDIsNiArMjAyLDcgQEAgaTkxNS15ICs9IFwKIAlkaXNwbGF5L2ludGVsX2Rpc3Bs YXkubyBcCiAJZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLm8gXAogCWRpc3BsYXkvaW50ZWxf ZHBpb19waHkubyBcCisJZGlzcGxheS9pbnRlbF9kcGxsX2xlZ2FjeS5vIFwKIAlkaXNwbGF5L2lu dGVsX2RwbGxfbWdyLm8gXAogCWRpc3BsYXkvaW50ZWxfZHNiLm8gXAogCWRpc3BsYXkvaW50ZWxf ZmJjLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9k aXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwpp bmRleCAyNTA3YTcyZWUyNDkuLmZmNWI1MWRlYTY2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKQEAgLTExMywxNyArMTEzLDYgQEAgc3RhdGljIHZv aWQgaWxrX3BmaXRfZW5hYmxlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlKTsKIHN0YXRpYyB2b2lkIGludGVsX21vZGVzZXRfc2V0dXBfaHdfc3RhdGUoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKIAkJCQkJIHN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCAqY3R4 KTsKIAotc3RydWN0IGludGVsX2xpbWl0IHsKLQlzdHJ1Y3QgewotCQlpbnQgbWluLCBtYXg7Ci0J fSBkb3QsIHZjbywgbiwgbSwgbTEsIG0yLCBwLCBwMTsKLQotCXN0cnVjdCB7Ci0JCWludCBkb3Rf bGltaXQ7Ci0JCWludCBwMl9zbG93LCBwMl9mYXN0OwotCX0gcDI7Ci19OwotCiAvKiByZXR1cm5z IEhQTEwgZnJlcXVlbmN5IGluIGtIeiAqLwogaW50IHZsdl9nZXRfaHBsbF92Y28oc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewpAQCAtMTkxLDI3MSArMTgwLDYgQEAgc3RhdGlj IHUzMiBpbnRlbF9mZGlfbGlua19mcmVxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKIAkJcmV0dXJuIGRldl9wcml2LT5mZGlfcGxsX2ZyZXE7CiB9CiAKLXN0YXRpYyBjb25zdCBz dHJ1Y3QgaW50ZWxfbGltaXQgaW50ZWxfbGltaXRzX2k4eHhfZGFjID0gewotCS5kb3QgPSB7IC5t aW4gPSAyNTAwMCwgLm1heCA9IDM1MDAwMCB9LAotCS52Y28gPSB7IC5taW4gPSA5MDgwMDAsIC5t YXggPSAxNTEyMDAwIH0sCi0JLm4gPSB7IC5taW4gPSAyLCAubWF4ID0gMTYgfSwKLQkubSA9IHsg Lm1pbiA9IDk2LCAubWF4ID0gMTQwIH0sCi0JLm0xID0geyAubWluID0gMTgsIC5tYXggPSAyNiB9 LAotCS5tMiA9IHsgLm1pbiA9IDYsIC5tYXggPSAxNiB9LAotCS5wID0geyAubWluID0gNCwgLm1h eCA9IDEyOCB9LAotCS5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSAzMyB9LAotCS5wMiA9IHsgLmRv dF9saW1pdCA9IDE2NTAwMCwKLQkJLnAyX3Nsb3cgPSA0LCAucDJfZmFzdCA9IDIgfSwKLX07Ci0K LXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaW50ZWxfbGltaXRzX2k4eHhfZHZvID0g ewotCS5kb3QgPSB7IC5taW4gPSAyNTAwMCwgLm1heCA9IDM1MDAwMCB9LAotCS52Y28gPSB7IC5t aW4gPSA5MDgwMDAsIC5tYXggPSAxNTEyMDAwIH0sCi0JLm4gPSB7IC5taW4gPSAyLCAubWF4ID0g MTYgfSwKLQkubSA9IHsgLm1pbiA9IDk2LCAubWF4ID0gMTQwIH0sCi0JLm0xID0geyAubWluID0g MTgsIC5tYXggPSAyNiB9LAotCS5tMiA9IHsgLm1pbiA9IDYsIC5tYXggPSAxNiB9LAotCS5wID0g eyAubWluID0gNCwgLm1heCA9IDEyOCB9LAotCS5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSAzMyB9 LAotCS5wMiA9IHsgLmRvdF9saW1pdCA9IDE2NTAwMCwKLQkJLnAyX3Nsb3cgPSA0LCAucDJfZmFz dCA9IDQgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaW50ZWxfbGlt aXRzX2k4eHhfbHZkcyA9IHsKLQkuZG90ID0geyAubWluID0gMjUwMDAsIC5tYXggPSAzNTAwMDAg fSwKLQkudmNvID0geyAubWluID0gOTA4MDAwLCAubWF4ID0gMTUxMjAwMCB9LAotCS5uID0geyAu bWluID0gMiwgLm1heCA9IDE2IH0sCi0JLm0gPSB7IC5taW4gPSA5NiwgLm1heCA9IDE0MCB9LAot CS5tMSA9IHsgLm1pbiA9IDE4LCAubWF4ID0gMjYgfSwKLQkubTIgPSB7IC5taW4gPSA2LCAubWF4 ID0gMTYgfSwKLQkucCA9IHsgLm1pbiA9IDQsIC5tYXggPSAxMjggfSwKLQkucDEgPSB7IC5taW4g PSAxLCAubWF4ID0gNiB9LAotCS5wMiA9IHsgLmRvdF9saW1pdCA9IDE2NTAwMCwKLQkJLnAyX3Ns b3cgPSAxNCwgLnAyX2Zhc3QgPSA3IH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGludGVs X2xpbWl0IGludGVsX2xpbWl0c19pOXh4X3Nkdm8gPSB7Ci0JLmRvdCA9IHsgLm1pbiA9IDIwMDAw LCAubWF4ID0gNDAwMDAwIH0sCi0JLnZjbyA9IHsgLm1pbiA9IDE0MDAwMDAsIC5tYXggPSAyODAw MDAwIH0sCi0JLm4gPSB7IC5taW4gPSAxLCAubWF4ID0gNiB9LAotCS5tID0geyAubWluID0gNzAs IC5tYXggPSAxMjAgfSwKLQkubTEgPSB7IC5taW4gPSA4LCAubWF4ID0gMTggfSwKLQkubTIgPSB7 IC5taW4gPSAzLCAubWF4ID0gNyB9LAotCS5wID0geyAubWluID0gNSwgLm1heCA9IDgwIH0sCi0J LnAxID0geyAubWluID0gMSwgLm1heCA9IDggfSwKLQkucDIgPSB7IC5kb3RfbGltaXQgPSAyMDAw MDAsCi0JCS5wMl9zbG93ID0gMTAsIC5wMl9mYXN0ID0gNSB9LAotfTsKLQotc3RhdGljIGNvbnN0 IHN0cnVjdCBpbnRlbF9saW1pdCBpbnRlbF9saW1pdHNfaTl4eF9sdmRzID0gewotCS5kb3QgPSB7 IC5taW4gPSAyMDAwMCwgLm1heCA9IDQwMDAwMCB9LAotCS52Y28gPSB7IC5taW4gPSAxNDAwMDAw LCAubWF4ID0gMjgwMDAwMCB9LAotCS5uID0geyAubWluID0gMSwgLm1heCA9IDYgfSwKLQkubSA9 IHsgLm1pbiA9IDcwLCAubWF4ID0gMTIwIH0sCi0JLm0xID0geyAubWluID0gOCwgLm1heCA9IDE4 IH0sCi0JLm0yID0geyAubWluID0gMywgLm1heCA9IDcgfSwKLQkucCA9IHsgLm1pbiA9IDcsIC5t YXggPSA5OCB9LAotCS5wMSA9IHsgLm1pbiA9IDEsIC5tYXggPSA4IH0sCi0JLnAyID0geyAuZG90 X2xpbWl0ID0gMTEyMDAwLAotCQkucDJfc2xvdyA9IDE0LCAucDJfZmFzdCA9IDcgfSwKLX07Ci0K LQotc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbnRlbF9saW1pdHNfZzR4X3Nkdm8g PSB7Ci0JLmRvdCA9IHsgLm1pbiA9IDI1MDAwLCAubWF4ID0gMjcwMDAwIH0sCi0JLnZjbyA9IHsg Lm1pbiA9IDE3NTAwMDAsIC5tYXggPSAzNTAwMDAwfSwKLQkubiA9IHsgLm1pbiA9IDEsIC5tYXgg PSA0IH0sCi0JLm0gPSB7IC5taW4gPSAxMDQsIC5tYXggPSAxMzggfSwKLQkubTEgPSB7IC5taW4g PSAxNywgLm1heCA9IDIzIH0sCi0JLm0yID0geyAubWluID0gNSwgLm1heCA9IDExIH0sCi0JLnAg PSB7IC5taW4gPSAxMCwgLm1heCA9IDMwIH0sCi0JLnAxID0geyAubWluID0gMSwgLm1heCA9IDN9 LAotCS5wMiA9IHsgLmRvdF9saW1pdCA9IDI3MDAwMCwKLQkJLnAyX3Nsb3cgPSAxMCwKLQkJLnAy X2Zhc3QgPSAxMAotCX0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGlu dGVsX2xpbWl0c19nNHhfaGRtaSA9IHsKLQkuZG90ID0geyAubWluID0gMjIwMDAsIC5tYXggPSA0 MDAwMDAgfSwKLQkudmNvID0geyAubWluID0gMTc1MDAwMCwgLm1heCA9IDM1MDAwMDB9LAotCS5u ID0geyAubWluID0gMSwgLm1heCA9IDQgfSwKLQkubSA9IHsgLm1pbiA9IDEwNCwgLm1heCA9IDEz OCB9LAotCS5tMSA9IHsgLm1pbiA9IDE2LCAubWF4ID0gMjMgfSwKLQkubTIgPSB7IC5taW4gPSA1 LCAubWF4ID0gMTEgfSwKLQkucCA9IHsgLm1pbiA9IDUsIC5tYXggPSA4MCB9LAotCS5wMSA9IHsg Lm1pbiA9IDEsIC5tYXggPSA4fSwKLQkucDIgPSB7IC5kb3RfbGltaXQgPSAxNjUwMDAsCi0JCS5w Ml9zbG93ID0gMTAsIC5wMl9mYXN0ID0gNSB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBp bnRlbF9saW1pdCBpbnRlbF9saW1pdHNfZzR4X3NpbmdsZV9jaGFubmVsX2x2ZHMgPSB7Ci0JLmRv dCA9IHsgLm1pbiA9IDIwMDAwLCAubWF4ID0gMTE1MDAwIH0sCi0JLnZjbyA9IHsgLm1pbiA9IDE3 NTAwMDAsIC5tYXggPSAzNTAwMDAwIH0sCi0JLm4gPSB7IC5taW4gPSAxLCAubWF4ID0gMyB9LAot CS5tID0geyAubWluID0gMTA0LCAubWF4ID0gMTM4IH0sCi0JLm0xID0geyAubWluID0gMTcsIC5t YXggPSAyMyB9LAotCS5tMiA9IHsgLm1pbiA9IDUsIC5tYXggPSAxMSB9LAotCS5wID0geyAubWlu ID0gMjgsIC5tYXggPSAxMTIgfSwKLQkucDEgPSB7IC5taW4gPSAyLCAubWF4ID0gOCB9LAotCS5w MiA9IHsgLmRvdF9saW1pdCA9IDAsCi0JCS5wMl9zbG93ID0gMTQsIC5wMl9mYXN0ID0gMTQKLQl9 LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbnRlbF9saW1pdHNfZzR4 X2R1YWxfY2hhbm5lbF9sdmRzID0gewotCS5kb3QgPSB7IC5taW4gPSA4MDAwMCwgLm1heCA9IDIy NDAwMCB9LAotCS52Y28gPSB7IC5taW4gPSAxNzUwMDAwLCAubWF4ID0gMzUwMDAwMCB9LAotCS5u ID0geyAubWluID0gMSwgLm1heCA9IDMgfSwKLQkubSA9IHsgLm1pbiA9IDEwNCwgLm1heCA9IDEz OCB9LAotCS5tMSA9IHsgLm1pbiA9IDE3LCAubWF4ID0gMjMgfSwKLQkubTIgPSB7IC5taW4gPSA1 LCAubWF4ID0gMTEgfSwKLQkucCA9IHsgLm1pbiA9IDE0LCAubWF4ID0gNDIgfSwKLQkucDEgPSB7 IC5taW4gPSAyLCAubWF4ID0gNiB9LAotCS5wMiA9IHsgLmRvdF9saW1pdCA9IDAsCi0JCS5wMl9z bG93ID0gNywgLnAyX2Zhc3QgPSA3Ci0JfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50 ZWxfbGltaXQgcG52X2xpbWl0c19zZHZvID0gewotCS5kb3QgPSB7IC5taW4gPSAyMDAwMCwgLm1h eCA9IDQwMDAwMH0sCi0JLnZjbyA9IHsgLm1pbiA9IDE3MDAwMDAsIC5tYXggPSAzNTAwMDAwIH0s Ci0JLyogUGluZXZpZXcncyBOY291bnRlciBpcyBhIHJpbmcgY291bnRlciAqLwotCS5uID0geyAu bWluID0gMywgLm1heCA9IDYgfSwKLQkubSA9IHsgLm1pbiA9IDIsIC5tYXggPSAyNTYgfSwKLQkv KiBQaW5ldmlldyBvbmx5IGhhcyBvbmUgY29tYmluZWQgbSBkaXZpZGVyLCB3aGljaCB3ZSB0cmVh dCBhcyBtMi4gKi8KLQkubTEgPSB7IC5taW4gPSAwLCAubWF4ID0gMCB9LAotCS5tMiA9IHsgLm1p biA9IDAsIC5tYXggPSAyNTQgfSwKLQkucCA9IHsgLm1pbiA9IDUsIC5tYXggPSA4MCB9LAotCS5w MSA9IHsgLm1pbiA9IDEsIC5tYXggPSA4IH0sCi0JLnAyID0geyAuZG90X2xpbWl0ID0gMjAwMDAw LAotCQkucDJfc2xvdyA9IDEwLCAucDJfZmFzdCA9IDUgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBz dHJ1Y3QgaW50ZWxfbGltaXQgcG52X2xpbWl0c19sdmRzID0gewotCS5kb3QgPSB7IC5taW4gPSAy MDAwMCwgLm1heCA9IDQwMDAwMCB9LAotCS52Y28gPSB7IC5taW4gPSAxNzAwMDAwLCAubWF4ID0g MzUwMDAwMCB9LAotCS5uID0geyAubWluID0gMywgLm1heCA9IDYgfSwKLQkubSA9IHsgLm1pbiA9 IDIsIC5tYXggPSAyNTYgfSwKLQkubTEgPSB7IC5taW4gPSAwLCAubWF4ID0gMCB9LAotCS5tMiA9 IHsgLm1pbiA9IDAsIC5tYXggPSAyNTQgfSwKLQkucCA9IHsgLm1pbiA9IDcsIC5tYXggPSAxMTIg fSwKLQkucDEgPSB7IC5taW4gPSAxLCAubWF4ID0gOCB9LAotCS5wMiA9IHsgLmRvdF9saW1pdCA9 IDExMjAwMCwKLQkJLnAyX3Nsb3cgPSAxNCwgLnAyX2Zhc3QgPSAxNCB9LAotfTsKLQotLyogSXJv bmxha2UgLyBTYW5keWJyaWRnZQotICoKLSAqIFdlIGNhbGN1bGF0ZSBjbG9jayB1c2luZyAocmVn aXN0ZXJfdmFsdWUgKyAyKSBmb3IgTi9NMS9NMiwgc28gaGVyZQotICogdGhlIHJhbmdlIHZhbHVl IGZvciB0aGVtIGlzIChhY3R1YWxfdmFsdWUgLSAyKS4KLSAqLwotc3RhdGljIGNvbnN0IHN0cnVj dCBpbnRlbF9saW1pdCBpbGtfbGltaXRzX2RhYyA9IHsKLQkuZG90ID0geyAubWluID0gMjUwMDAs IC5tYXggPSAzNTAwMDAgfSwKLQkudmNvID0geyAubWluID0gMTc2MDAwMCwgLm1heCA9IDM1MTAw MDAgfSwKLQkubiA9IHsgLm1pbiA9IDEsIC5tYXggPSA1IH0sCi0JLm0gPSB7IC5taW4gPSA3OSwg Lm1heCA9IDEyNyB9LAotCS5tMSA9IHsgLm1pbiA9IDEyLCAubWF4ID0gMjIgfSwKLQkubTIgPSB7 IC5taW4gPSA1LCAubWF4ID0gOSB9LAotCS5wID0geyAubWluID0gNSwgLm1heCA9IDgwIH0sCi0J LnAxID0geyAubWluID0gMSwgLm1heCA9IDggfSwKLQkucDIgPSB7IC5kb3RfbGltaXQgPSAyMjUw MDAsCi0JCS5wMl9zbG93ID0gMTAsIC5wMl9mYXN0ID0gNSB9LAotfTsKLQotc3RhdGljIGNvbnN0 IHN0cnVjdCBpbnRlbF9saW1pdCBpbGtfbGltaXRzX3NpbmdsZV9sdmRzID0gewotCS5kb3QgPSB7 IC5taW4gPSAyNTAwMCwgLm1heCA9IDM1MDAwMCB9LAotCS52Y28gPSB7IC5taW4gPSAxNzYwMDAw LCAubWF4ID0gMzUxMDAwMCB9LAotCS5uID0geyAubWluID0gMSwgLm1heCA9IDMgfSwKLQkubSA9 IHsgLm1pbiA9IDc5LCAubWF4ID0gMTE4IH0sCi0JLm0xID0geyAubWluID0gMTIsIC5tYXggPSAy MiB9LAotCS5tMiA9IHsgLm1pbiA9IDUsIC5tYXggPSA5IH0sCi0JLnAgPSB7IC5taW4gPSAyOCwg Lm1heCA9IDExMiB9LAotCS5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSA4IH0sCi0JLnAyID0geyAu ZG90X2xpbWl0ID0gMjI1MDAwLAotCQkucDJfc2xvdyA9IDE0LCAucDJfZmFzdCA9IDE0IH0sCi19 OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGlsa19saW1pdHNfZHVhbF9sdmRz ID0gewotCS5kb3QgPSB7IC5taW4gPSAyNTAwMCwgLm1heCA9IDM1MDAwMCB9LAotCS52Y28gPSB7 IC5taW4gPSAxNzYwMDAwLCAubWF4ID0gMzUxMDAwMCB9LAotCS5uID0geyAubWluID0gMSwgLm1h eCA9IDMgfSwKLQkubSA9IHsgLm1pbiA9IDc5LCAubWF4ID0gMTI3IH0sCi0JLm0xID0geyAubWlu ID0gMTIsIC5tYXggPSAyMiB9LAotCS5tMiA9IHsgLm1pbiA9IDUsIC5tYXggPSA5IH0sCi0JLnAg PSB7IC5taW4gPSAxNCwgLm1heCA9IDU2IH0sCi0JLnAxID0geyAubWluID0gMiwgLm1heCA9IDgg fSwKLQkucDIgPSB7IC5kb3RfbGltaXQgPSAyMjUwMDAsCi0JCS5wMl9zbG93ID0gNywgLnAyX2Zh c3QgPSA3IH0sCi19OwotCi0vKiBMVkRTIDEwMG1oeiByZWZjbGsgbGltaXRzLiAqLwotc3RhdGlj IGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbGtfbGltaXRzX3NpbmdsZV9sdmRzXzEwMG0gPSB7 Ci0JLmRvdCA9IHsgLm1pbiA9IDI1MDAwLCAubWF4ID0gMzUwMDAwIH0sCi0JLnZjbyA9IHsgLm1p biA9IDE3NjAwMDAsIC5tYXggPSAzNTEwMDAwIH0sCi0JLm4gPSB7IC5taW4gPSAxLCAubWF4ID0g MiB9LAotCS5tID0geyAubWluID0gNzksIC5tYXggPSAxMjYgfSwKLQkubTEgPSB7IC5taW4gPSAx MiwgLm1heCA9IDIyIH0sCi0JLm0yID0geyAubWluID0gNSwgLm1heCA9IDkgfSwKLQkucCA9IHsg Lm1pbiA9IDI4LCAubWF4ID0gMTEyIH0sCi0JLnAxID0geyAubWluID0gMiwgLm1heCA9IDggfSwK LQkucDIgPSB7IC5kb3RfbGltaXQgPSAyMjUwMDAsCi0JCS5wMl9zbG93ID0gMTQsIC5wMl9mYXN0 ID0gMTQgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaWxrX2xpbWl0 c19kdWFsX2x2ZHNfMTAwbSA9IHsKLQkuZG90ID0geyAubWluID0gMjUwMDAsIC5tYXggPSAzNTAw MDAgfSwKLQkudmNvID0geyAubWluID0gMTc2MDAwMCwgLm1heCA9IDM1MTAwMDAgfSwKLQkubiA9 IHsgLm1pbiA9IDEsIC5tYXggPSAzIH0sCi0JLm0gPSB7IC5taW4gPSA3OSwgLm1heCA9IDEyNiB9 LAotCS5tMSA9IHsgLm1pbiA9IDEyLCAubWF4ID0gMjIgfSwKLQkubTIgPSB7IC5taW4gPSA1LCAu bWF4ID0gOSB9LAotCS5wID0geyAubWluID0gMTQsIC5tYXggPSA0MiB9LAotCS5wMSA9IHsgLm1p biA9IDIsIC5tYXggPSA2IH0sCi0JLnAyID0geyAuZG90X2xpbWl0ID0gMjI1MDAwLAotCQkucDJf c2xvdyA9IDcsIC5wMl9mYXN0ID0gNyB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRl bF9saW1pdCBpbnRlbF9saW1pdHNfdmx2ID0gewotCSAvKgotCSAgKiBUaGVzZSBhcmUgdGhlIGRh dGEgcmF0ZSBsaW1pdHMgKG1lYXN1cmVkIGluIGZhc3QgY2xvY2tzKQotCSAgKiBzaW5jZSB0aG9z ZSBhcmUgdGhlIHN0cmljdGVzdCBsaW1pdHMgd2UgaGF2ZS4gVGhlIGZhc3QKLQkgICogY2xvY2sg YW5kIGFjdHVhbCByYXRlIGxpbWl0cyBhcmUgbW9yZSByZWxheGVkLCBzbyBjaGVja2luZwotCSAg KiB0aGVtIHdvdWxkIG1ha2Ugbm8gZGlmZmVyZW5jZS4KLQkgICovCi0JLmRvdCA9IHsgLm1pbiA9 IDI1MDAwICogNSwgLm1heCA9IDI3MDAwMCAqIDUgfSwKLQkudmNvID0geyAubWluID0gNDAwMDAw MCwgLm1heCA9IDYwMDAwMDAgfSwKLQkubiA9IHsgLm1pbiA9IDEsIC5tYXggPSA3IH0sCi0JLm0x ID0geyAubWluID0gMiwgLm1heCA9IDMgfSwKLQkubTIgPSB7IC5taW4gPSAxMSwgLm1heCA9IDE1 NiB9LAotCS5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSAzIH0sCi0JLnAyID0geyAucDJfc2xvdyA9 IDIsIC5wMl9mYXN0ID0gMjAgfSwgLyogc2xvdz1taW4sIGZhc3Q9bWF4ICovCi19OwotCi1zdGF0 aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGludGVsX2xpbWl0c19jaHYgPSB7Ci0JLyoKLQkg KiBUaGVzZSBhcmUgdGhlIGRhdGEgcmF0ZSBsaW1pdHMgKG1lYXN1cmVkIGluIGZhc3QgY2xvY2tz KQotCSAqIHNpbmNlIHRob3NlIGFyZSB0aGUgc3RyaWN0ZXN0IGxpbWl0cyB3ZSBoYXZlLiAgVGhl IGZhc3QKLQkgKiBjbG9jayBhbmQgYWN0dWFsIHJhdGUgbGltaXRzIGFyZSBtb3JlIHJlbGF4ZWQs IHNvIGNoZWNraW5nCi0JICogdGhlbSB3b3VsZCBtYWtlIG5vIGRpZmZlcmVuY2UuCi0JICovCi0J LmRvdCA9IHsgLm1pbiA9IDI1MDAwICogNSwgLm1heCA9IDU0MDAwMCAqIDV9LAotCS52Y28gPSB7 IC5taW4gPSA0ODAwMDAwLCAubWF4ID0gNjQ4MDAwMCB9LAotCS5uID0geyAubWluID0gMSwgLm1h eCA9IDEgfSwKLQkubTEgPSB7IC5taW4gPSAyLCAubWF4ID0gMiB9LAotCS5tMiA9IHsgLm1pbiA9 IDI0IDw8IDIyLCAubWF4ID0gMTc1IDw8IDIyIH0sCi0JLnAxID0geyAubWluID0gMiwgLm1heCA9 IDQgfSwKLQkucDIgPSB7CS5wMl9zbG93ID0gMSwgLnAyX2Zhc3QgPSAxNCB9LAotfTsKLQotc3Rh dGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbnRlbF9saW1pdHNfYnh0ID0gewotCS8qIEZJ WE1FOiBmaW5kIHJlYWwgZG90IGxpbWl0cyAqLwotCS5kb3QgPSB7IC5taW4gPSAwLCAubWF4ID0g SU5UX01BWCB9LAotCS52Y28gPSB7IC5taW4gPSA0ODAwMDAwLCAubWF4ID0gNjcwMDAwMCB9LAot CS5uID0geyAubWluID0gMSwgLm1heCA9IDEgfSwKLQkubTEgPSB7IC5taW4gPSAyLCAubWF4ID0g MiB9LAotCS8qIEZJWE1FOiBmaW5kIHJlYWwgbTIgbGltaXRzICovCi0JLm0yID0geyAubWluID0g MiA8PCAyMiwgLm1heCA9IDI1NSA8PCAyMiB9LAotCS5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSA0 IH0sCi0JLnAyID0geyAucDJfc2xvdyA9IDEsIC5wMl9mYXN0ID0gMjAgfSwKLX07Ci0KIC8qIFdB IERpc3BsYXkgIzA4Mjc6IEdlbjk6YWxsICovCiBzdGF0aWMgdm9pZAogc2tsX3dhXzgyNyhzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlLCBib29sIGVuYWJs ZSkKQEAgLTUwMCw0ODMgKzIyNCw2IEBAIGlzX3RyYW5zX3BvcnRfc3luY19tb2RlKGNvbnN0IHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQogCQlpc190cmFuc19wb3J0X3N5bmNf c2xhdmUoY3J0Y19zdGF0ZSk7CiB9CiAKLS8qCi0gKiBQbGF0Zm9ybSBzcGVjaWZpYyBoZWxwZXJz IHRvIGNhbGN1bGF0ZSB0aGUgcG9ydCBQTEwgbG9vcGJhY2stIChjbG9jay5tKSwKLSAqIGFuZCBw b3N0LWRpdmlkZXIgKGNsb2NrLnApIHZhbHVlcywgcHJlLSAoY2xvY2sudmNvKSBhbmQgcG9zdC1k aXZpZGVkIGZhc3QKLSAqIChjbG9jay5kb3QpIGNsb2NrIHJhdGVzLiBUaGlzIGZhc3QgZG90IGNs b2NrIGlzIGZlZCB0byB0aGUgcG9ydCdzIElPIGxvZ2ljLgotICogVGhlIGhlbHBlcnMnIHJldHVy biB2YWx1ZSBpcyB0aGUgcmF0ZSBvZiB0aGUgY2xvY2sgdGhhdCBpcyBmZWQgdG8gdGhlCi0gKiBk aXNwbGF5IGVuZ2luZSdzIHBpcGUgd2hpY2ggY2FuIGJlIHRoZSBhYm92ZSBmYXN0IGRvdCBjbG9j ayByYXRlIG9yIGEKLSAqIGRpdmlkZWQtZG93biB2ZXJzaW9uIG9mIGl0LgotICovCi0vKiBtMSBp cyByZXNlcnZlZCBhcyAwIGluIFBpbmV2aWV3LCBuIGlzIGEgcmluZyBjb3VudGVyICovCi1zdGF0 aWMgaW50IHBudl9jYWxjX2RwbGxfcGFyYW1zKGludCByZWZjbGssIHN0cnVjdCBkcGxsICpjbG9j aykKLXsKLQljbG9jay0+bSA9IGNsb2NrLT5tMiArIDI7Ci0JY2xvY2stPnAgPSBjbG9jay0+cDEg KiBjbG9jay0+cDI7Ci0JaWYgKFdBUk5fT04oY2xvY2stPm4gPT0gMCB8fCBjbG9jay0+cCA9PSAw KSkKLQkJcmV0dXJuIDA7Ci0JY2xvY2stPnZjbyA9IERJVl9ST1VORF9DTE9TRVNUKHJlZmNsayAq IGNsb2NrLT5tLCBjbG9jay0+bik7Ci0JY2xvY2stPmRvdCA9IERJVl9ST1VORF9DTE9TRVNUKGNs b2NrLT52Y28sIGNsb2NrLT5wKTsKLQotCXJldHVybiBjbG9jay0+ZG90OwotfQotCi1zdGF0aWMg dTMyIGk5eHhfZHBsbF9jb21wdXRlX20oc3RydWN0IGRwbGwgKmRwbGwpCi17Ci0JcmV0dXJuIDUg KiAoZHBsbC0+bTEgKyAyKSArIChkcGxsLT5tMiArIDIpOwotfQotCi1zdGF0aWMgaW50IGk5eHhf Y2FsY19kcGxsX3BhcmFtcyhpbnQgcmVmY2xrLCBzdHJ1Y3QgZHBsbCAqY2xvY2spCi17Ci0JY2xv Y2stPm0gPSBpOXh4X2RwbGxfY29tcHV0ZV9tKGNsb2NrKTsKLQljbG9jay0+cCA9IGNsb2NrLT5w MSAqIGNsb2NrLT5wMjsKLQlpZiAoV0FSTl9PTihjbG9jay0+biArIDIgPT0gMCB8fCBjbG9jay0+ cCA9PSAwKSkKLQkJcmV0dXJuIDA7Ci0JY2xvY2stPnZjbyA9IERJVl9ST1VORF9DTE9TRVNUKHJl ZmNsayAqIGNsb2NrLT5tLCBjbG9jay0+biArIDIpOwotCWNsb2NrLT5kb3QgPSBESVZfUk9VTkRf Q0xPU0VTVChjbG9jay0+dmNvLCBjbG9jay0+cCk7Ci0KLQlyZXR1cm4gY2xvY2stPmRvdDsKLX0K LQotc3RhdGljIGludCB2bHZfY2FsY19kcGxsX3BhcmFtcyhpbnQgcmVmY2xrLCBzdHJ1Y3QgZHBs bCAqY2xvY2spCi17Ci0JY2xvY2stPm0gPSBjbG9jay0+bTEgKiBjbG9jay0+bTI7Ci0JY2xvY2st PnAgPSBjbG9jay0+cDEgKiBjbG9jay0+cDI7Ci0JaWYgKFdBUk5fT04oY2xvY2stPm4gPT0gMCB8 fCBjbG9jay0+cCA9PSAwKSkKLQkJcmV0dXJuIDA7Ci0JY2xvY2stPnZjbyA9IERJVl9ST1VORF9D TE9TRVNUKHJlZmNsayAqIGNsb2NrLT5tLCBjbG9jay0+bik7Ci0JY2xvY2stPmRvdCA9IERJVl9S T1VORF9DTE9TRVNUKGNsb2NrLT52Y28sIGNsb2NrLT5wKTsKLQotCXJldHVybiBjbG9jay0+ZG90 IC8gNTsKLX0KLQotaW50IGNodl9jYWxjX2RwbGxfcGFyYW1zKGludCByZWZjbGssIHN0cnVjdCBk cGxsICpjbG9jaykKLXsKLQljbG9jay0+bSA9IGNsb2NrLT5tMSAqIGNsb2NrLT5tMjsKLQljbG9j ay0+cCA9IGNsb2NrLT5wMSAqIGNsb2NrLT5wMjsKLQlpZiAoV0FSTl9PTihjbG9jay0+biA9PSAw IHx8IGNsb2NrLT5wID09IDApKQotCQlyZXR1cm4gMDsKLQljbG9jay0+dmNvID0gRElWX1JPVU5E X0NMT1NFU1RfVUxMKG11bF91MzJfdTMyKHJlZmNsaywgY2xvY2stPm0pLAotCQkJCQkgICBjbG9j ay0+biA8PCAyMik7Ci0JY2xvY2stPmRvdCA9IERJVl9ST1VORF9DTE9TRVNUKGNsb2NrLT52Y28s IGNsb2NrLT5wKTsKLQotCXJldHVybiBjbG9jay0+ZG90IC8gNTsKLX0KLQotLyoKLSAqIFJldHVy bnMgd2hldGhlciB0aGUgZ2l2ZW4gc2V0IG9mIGRpdmlzb3JzIGFyZSB2YWxpZCBmb3IgYSBnaXZl biByZWZjbGsgd2l0aAotICogdGhlIGdpdmVuIGNvbm5lY3RvcnMuCi0gKi8KLXN0YXRpYyBib29s IGludGVsX3BsbF9pc192YWxpZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0J CQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1pdCwKLQkJCSAgICAgICBjb25z dCBzdHJ1Y3QgZHBsbCAqY2xvY2spCi17Ci0JaWYgKGNsb2NrLT5uIDwgbGltaXQtPm4ubWluIHx8 IGxpbWl0LT5uLm1heCA8IGNsb2NrLT5uKQotCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKGNsb2NrLT5w MSA8IGxpbWl0LT5wMS5taW4gfHwgbGltaXQtPnAxLm1heCA8IGNsb2NrLT5wMSkKLQkJcmV0dXJu IGZhbHNlOwotCWlmIChjbG9jay0+bTIgPCBsaW1pdC0+bTIubWluIHx8IGxpbWl0LT5tMi5tYXgg PCBjbG9jay0+bTIpCi0JCXJldHVybiBmYWxzZTsKLQlpZiAoY2xvY2stPm0xIDwgbGltaXQtPm0x Lm1pbiB8fCBsaW1pdC0+bTEubWF4IDwgY2xvY2stPm0xKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlp ZiAoIUlTX1BJTkVWSUVXKGRldl9wcml2KSAmJiAhSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgJiYK LQkgICAgIUlTX0NIRVJSWVZJRVcoZGV2X3ByaXYpICYmICFJU19HRU45X0xQKGRldl9wcml2KSkK LQkJaWYgKGNsb2NrLT5tMSA8PSBjbG9jay0+bTIpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAo IUlTX1ZBTExFWVZJRVcoZGV2X3ByaXYpICYmICFJU19DSEVSUllWSUVXKGRldl9wcml2KSAmJgot CSAgICAhSVNfR0VOOV9MUChkZXZfcHJpdikpIHsKLQkJaWYgKGNsb2NrLT5wIDwgbGltaXQtPnAu bWluIHx8IGxpbWl0LT5wLm1heCA8IGNsb2NrLT5wKQotCQkJcmV0dXJuIGZhbHNlOwotCQlpZiAo Y2xvY2stPm0gPCBsaW1pdC0+bS5taW4gfHwgbGltaXQtPm0ubWF4IDwgY2xvY2stPm0pCi0JCQly ZXR1cm4gZmFsc2U7Ci0JfQotCi0JaWYgKGNsb2NrLT52Y28gPCBsaW1pdC0+dmNvLm1pbiB8fCBs aW1pdC0+dmNvLm1heCA8IGNsb2NrLT52Y28pCi0JCXJldHVybiBmYWxzZTsKLQkvKiBYWFg6IFdl IG1heSBuZWVkIHRvIGJlIGNoZWNraW5nICJEb3QgY2xvY2siIGRlcGVuZGluZyBvbiB0aGUgbXVs dGlwbGllciwKLQkgKiBjb25uZWN0b3IsIGV0Yy4sIHJhdGhlciB0aGFuIGp1c3QgYSBzaW5nbGUg cmFuZ2UuCi0JICovCi0JaWYgKGNsb2NrLT5kb3QgPCBsaW1pdC0+ZG90Lm1pbiB8fCBsaW1pdC0+ ZG90Lm1heCA8IGNsb2NrLT5kb3QpCi0JCXJldHVybiBmYWxzZTsKLQotCXJldHVybiB0cnVlOwot fQotCi1zdGF0aWMgaW50Ci1pOXh4X3NlbGVjdF9wMl9kaXYoY29uc3Qgc3RydWN0IGludGVsX2xp bWl0ICpsaW1pdCwKLQkJICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUsCi0JCSAgIGludCB0YXJnZXQpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gdG9faTkxNShjcnRjX3N0YXRlLT51YXBpLmNydGMtPmRldik7Ci0KLQlpZiAoaW50ZWxf Y3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsKLQkJLyoKLQkJ ICogRm9yIExWRFMganVzdCByZWx5IG9uIGl0cyBjdXJyZW50IHNldHRpbmdzIGZvciBkdWFsLWNo YW5uZWwuCi0JCSAqIFdlIGhhdmVuJ3QgZmlndXJlZCBvdXQgaG93IHRvIHJlbGlhYmx5IHNldCB1 cCBkaWZmZXJlbnQKLQkJICogc2luZ2xlL2R1YWwgY2hhbm5lbCBzdGF0ZSwgaWYgd2UgZXZlbiBj YW4uCi0JCSAqLwotCQlpZiAoaW50ZWxfaXNfZHVhbF9saW5rX2x2ZHMoZGV2X3ByaXYpKQotCQkJ cmV0dXJuIGxpbWl0LT5wMi5wMl9mYXN0OwotCQllbHNlCi0JCQlyZXR1cm4gbGltaXQtPnAyLnAy X3Nsb3c7Ci0JfSBlbHNlIHsKLQkJaWYgKHRhcmdldCA8IGxpbWl0LT5wMi5kb3RfbGltaXQpCi0J CQlyZXR1cm4gbGltaXQtPnAyLnAyX3Nsb3c7Ci0JCWVsc2UKLQkJCXJldHVybiBsaW1pdC0+cDIu cDJfZmFzdDsKLQl9Ci19Ci0KLS8qCi0gKiBSZXR1cm5zIGEgc2V0IG9mIGRpdmlzb3JzIGZvciB0 aGUgZGVzaXJlZCB0YXJnZXQgY2xvY2sgd2l0aCB0aGUgZ2l2ZW4KLSAqIHJlZmNsaywgb3IgRkFM U0UuICBUaGUgcmV0dXJuZWQgdmFsdWVzIHJlcHJlc2VudCB0aGUgY2xvY2sgZXF1YXRpb246Ci0g KiByZWZsY2sgKiAoNSAqIChtMSArIDIpICsgKG0yICsgMikpIC8gKG4gKyAyKSAvIHAxIC8gcDIu Ci0gKgotICogVGFyZ2V0IGFuZCByZWZlcmVuY2UgY2xvY2tzIGFyZSBzcGVjaWZpZWQgaW4ga0h6 LgotICoKLSAqIElmIG1hdGNoX2Nsb2NrIGlzIHByb3ZpZGVkLCB0aGVuIGJlc3RfY2xvY2sgUCBk aXZpZGVyIG11c3QgbWF0Y2ggdGhlIFAKLSAqIGRpdmlkZXIgZnJvbSBAbWF0Y2hfY2xvY2sgdXNl ZCBmb3IgTFZEUyBkb3duY2xvY2tpbmcuCi0gKi8KLXN0YXRpYyBib29sCi1pOXh4X2ZpbmRfYmVz dF9kcGxsKGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQsCi0JCSAgICBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJICAgIGludCB0YXJnZXQsIGludCByZWZjbGss IHN0cnVjdCBkcGxsICptYXRjaF9jbG9jaywKLQkJICAgIHN0cnVjdCBkcGxsICpiZXN0X2Nsb2Nr KQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjX3N0YXRlLT51YXBpLmNydGMtPmRl djsKLQlzdHJ1Y3QgZHBsbCBjbG9jazsKLQlpbnQgZXJyID0gdGFyZ2V0OwotCi0JbWVtc2V0KGJl c3RfY2xvY2ssIDAsIHNpemVvZigqYmVzdF9jbG9jaykpOwotCi0JY2xvY2sucDIgPSBpOXh4X3Nl bGVjdF9wMl9kaXYobGltaXQsIGNydGNfc3RhdGUsIHRhcmdldCk7Ci0KLQlmb3IgKGNsb2NrLm0x ID0gbGltaXQtPm0xLm1pbjsgY2xvY2subTEgPD0gbGltaXQtPm0xLm1heDsKLQkgICAgIGNsb2Nr Lm0xKyspIHsKLQkJZm9yIChjbG9jay5tMiA9IGxpbWl0LT5tMi5taW47Ci0JCSAgICAgY2xvY2su bTIgPD0gbGltaXQtPm0yLm1heDsgY2xvY2subTIrKykgewotCQkJaWYgKGNsb2NrLm0yID49IGNs b2NrLm0xKQotCQkJCWJyZWFrOwotCQkJZm9yIChjbG9jay5uID0gbGltaXQtPm4ubWluOwotCQkJ ICAgICBjbG9jay5uIDw9IGxpbWl0LT5uLm1heDsgY2xvY2subisrKSB7Ci0JCQkJZm9yIChjbG9j ay5wMSA9IGxpbWl0LT5wMS5taW47Ci0JCQkJCWNsb2NrLnAxIDw9IGxpbWl0LT5wMS5tYXg7IGNs b2NrLnAxKyspIHsKLQkJCQkJaW50IHRoaXNfZXJyOwotCi0JCQkJCWk5eHhfY2FsY19kcGxsX3Bh cmFtcyhyZWZjbGssICZjbG9jayk7Ci0JCQkJCWlmICghaW50ZWxfcGxsX2lzX3ZhbGlkKHRvX2k5 MTUoZGV2KSwKLQkJCQkJCQkJbGltaXQsCi0JCQkJCQkJCSZjbG9jaykpCi0JCQkJCQljb250aW51 ZTsKLQkJCQkJaWYgKG1hdGNoX2Nsb2NrICYmCi0JCQkJCSAgICBjbG9jay5wICE9IG1hdGNoX2Ns b2NrLT5wKQotCQkJCQkJY29udGludWU7Ci0KLQkJCQkJdGhpc19lcnIgPSBhYnMoY2xvY2suZG90 IC0gdGFyZ2V0KTsKLQkJCQkJaWYgKHRoaXNfZXJyIDwgZXJyKSB7Ci0JCQkJCQkqYmVzdF9jbG9j ayA9IGNsb2NrOwotCQkJCQkJZXJyID0gdGhpc19lcnI7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0J CX0KLQl9Ci0KLQlyZXR1cm4gKGVyciAhPSB0YXJnZXQpOwotfQotCi0vKgotICogUmV0dXJucyBh IHNldCBvZiBkaXZpc29ycyBmb3IgdGhlIGRlc2lyZWQgdGFyZ2V0IGNsb2NrIHdpdGggdGhlIGdp dmVuCi0gKiByZWZjbGssIG9yIEZBTFNFLiAgVGhlIHJldHVybmVkIHZhbHVlcyByZXByZXNlbnQg dGhlIGNsb2NrIGVxdWF0aW9uOgotICogcmVmbGNrICogKDUgKiAobTEgKyAyKSArIChtMiArIDIp KSAvIChuICsgMikgLyBwMSAvIHAyLgotICoKLSAqIFRhcmdldCBhbmQgcmVmZXJlbmNlIGNsb2Nr cyBhcmUgc3BlY2lmaWVkIGluIGtIei4KLSAqCi0gKiBJZiBtYXRjaF9jbG9jayBpcyBwcm92aWRl ZCwgdGhlbiBiZXN0X2Nsb2NrIFAgZGl2aWRlciBtdXN0IG1hdGNoIHRoZSBQCi0gKiBkaXZpZGVy IGZyb20gQG1hdGNoX2Nsb2NrIHVzZWQgZm9yIExWRFMgZG93bmNsb2NraW5nLgotICovCi1zdGF0 aWMgYm9vbAotcG52X2ZpbmRfYmVzdF9kcGxsKGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGlt aXQsCi0JCSAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkgICBpbnQg dGFyZ2V0LCBpbnQgcmVmY2xrLCBzdHJ1Y3QgZHBsbCAqbWF0Y2hfY2xvY2ssCi0JCSAgIHN0cnVj dCBkcGxsICpiZXN0X2Nsb2NrKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjX3N0 YXRlLT51YXBpLmNydGMtPmRldjsKLQlzdHJ1Y3QgZHBsbCBjbG9jazsKLQlpbnQgZXJyID0gdGFy Z2V0OwotCi0JbWVtc2V0KGJlc3RfY2xvY2ssIDAsIHNpemVvZigqYmVzdF9jbG9jaykpOwotCi0J Y2xvY2sucDIgPSBpOXh4X3NlbGVjdF9wMl9kaXYobGltaXQsIGNydGNfc3RhdGUsIHRhcmdldCk7 Ci0KLQlmb3IgKGNsb2NrLm0xID0gbGltaXQtPm0xLm1pbjsgY2xvY2subTEgPD0gbGltaXQtPm0x Lm1heDsKLQkgICAgIGNsb2NrLm0xKyspIHsKLQkJZm9yIChjbG9jay5tMiA9IGxpbWl0LT5tMi5t aW47Ci0JCSAgICAgY2xvY2subTIgPD0gbGltaXQtPm0yLm1heDsgY2xvY2subTIrKykgewotCQkJ Zm9yIChjbG9jay5uID0gbGltaXQtPm4ubWluOwotCQkJICAgICBjbG9jay5uIDw9IGxpbWl0LT5u Lm1heDsgY2xvY2subisrKSB7Ci0JCQkJZm9yIChjbG9jay5wMSA9IGxpbWl0LT5wMS5taW47Ci0J CQkJCWNsb2NrLnAxIDw9IGxpbWl0LT5wMS5tYXg7IGNsb2NrLnAxKyspIHsKLQkJCQkJaW50IHRo aXNfZXJyOwotCi0JCQkJCXBudl9jYWxjX2RwbGxfcGFyYW1zKHJlZmNsaywgJmNsb2NrKTsKLQkJ CQkJaWYgKCFpbnRlbF9wbGxfaXNfdmFsaWQodG9faTkxNShkZXYpLAotCQkJCQkJCQlsaW1pdCwK LQkJCQkJCQkJJmNsb2NrKSkKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQlpZiAobWF0Y2hfY2xvY2sg JiYKLQkJCQkJICAgIGNsb2NrLnAgIT0gbWF0Y2hfY2xvY2stPnApCi0JCQkJCQljb250aW51ZTsK LQotCQkJCQl0aGlzX2VyciA9IGFicyhjbG9jay5kb3QgLSB0YXJnZXQpOwotCQkJCQlpZiAodGhp c19lcnIgPCBlcnIpIHsKLQkJCQkJCSpiZXN0X2Nsb2NrID0gY2xvY2s7Ci0JCQkJCQllcnIgPSB0 aGlzX2VycjsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCXJldHVybiAoZXJyICE9 IHRhcmdldCk7Ci19Ci0KLS8qCi0gKiBSZXR1cm5zIGEgc2V0IG9mIGRpdmlzb3JzIGZvciB0aGUg ZGVzaXJlZCB0YXJnZXQgY2xvY2sgd2l0aCB0aGUgZ2l2ZW4KLSAqIHJlZmNsaywgb3IgRkFMU0Uu ICBUaGUgcmV0dXJuZWQgdmFsdWVzIHJlcHJlc2VudCB0aGUgY2xvY2sgZXF1YXRpb246Ci0gKiBy ZWZsY2sgKiAoNSAqIChtMSArIDIpICsgKG0yICsgMikpIC8gKG4gKyAyKSAvIHAxIC8gcDIuCi0g KgotICogVGFyZ2V0IGFuZCByZWZlcmVuY2UgY2xvY2tzIGFyZSBzcGVjaWZpZWQgaW4ga0h6Lgot ICoKLSAqIElmIG1hdGNoX2Nsb2NrIGlzIHByb3ZpZGVkLCB0aGVuIGJlc3RfY2xvY2sgUCBkaXZp ZGVyIG11c3QgbWF0Y2ggdGhlIFAKLSAqIGRpdmlkZXIgZnJvbSBAbWF0Y2hfY2xvY2sgdXNlZCBm b3IgTFZEUyBkb3duY2xvY2tpbmcuCi0gKi8KLXN0YXRpYyBib29sCi1nNHhfZmluZF9iZXN0X2Rw bGwoY29uc3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1pdCwKLQkJICAgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCSAgIGludCB0YXJnZXQsIGludCByZWZjbGssIHN0cnVj dCBkcGxsICptYXRjaF9jbG9jaywKLQkJICAgc3RydWN0IGRwbGwgKmJlc3RfY2xvY2spCi17Ci0J c3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGNfc3RhdGUtPnVhcGkuY3J0Yy0+ZGV2OwotCXN0 cnVjdCBkcGxsIGNsb2NrOwotCWludCBtYXhfbjsKLQlib29sIGZvdW5kID0gZmFsc2U7Ci0JLyog YXBwcm94aW1hdGVseSBlcXVhbHMgdGFyZ2V0ICogMC4wMDU4NSAqLwotCWludCBlcnJfbW9zdCA9 ICh0YXJnZXQgPj4gOCkgKyAodGFyZ2V0ID4+IDkpOwotCi0JbWVtc2V0KGJlc3RfY2xvY2ssIDAs IHNpemVvZigqYmVzdF9jbG9jaykpOwotCi0JY2xvY2sucDIgPSBpOXh4X3NlbGVjdF9wMl9kaXYo bGltaXQsIGNydGNfc3RhdGUsIHRhcmdldCk7Ci0KLQltYXhfbiA9IGxpbWl0LT5uLm1heDsKLQkv KiBiYXNlZCBvbiBoYXJkd2FyZSByZXF1aXJlbWVudCwgcHJlZmVyIHNtYWxsZXIgbiB0byBwcmVj aXNpb24gKi8KLQlmb3IgKGNsb2NrLm4gPSBsaW1pdC0+bi5taW47IGNsb2NrLm4gPD0gbWF4X247 IGNsb2NrLm4rKykgewotCQkvKiBiYXNlZCBvbiBoYXJkd2FyZSByZXF1aXJlbWVudCwgcHJlZmVy ZSBsYXJnZXIgbTEsbTIgKi8KLQkJZm9yIChjbG9jay5tMSA9IGxpbWl0LT5tMS5tYXg7Ci0JCSAg ICAgY2xvY2subTEgPj0gbGltaXQtPm0xLm1pbjsgY2xvY2subTEtLSkgewotCQkJZm9yIChjbG9j ay5tMiA9IGxpbWl0LT5tMi5tYXg7Ci0JCQkgICAgIGNsb2NrLm0yID49IGxpbWl0LT5tMi5taW47 IGNsb2NrLm0yLS0pIHsKLQkJCQlmb3IgKGNsb2NrLnAxID0gbGltaXQtPnAxLm1heDsKLQkJCQkg ICAgIGNsb2NrLnAxID49IGxpbWl0LT5wMS5taW47IGNsb2NrLnAxLS0pIHsKLQkJCQkJaW50IHRo aXNfZXJyOwotCi0JCQkJCWk5eHhfY2FsY19kcGxsX3BhcmFtcyhyZWZjbGssICZjbG9jayk7Ci0J CQkJCWlmICghaW50ZWxfcGxsX2lzX3ZhbGlkKHRvX2k5MTUoZGV2KSwKLQkJCQkJCQkJbGltaXQs Ci0JCQkJCQkJCSZjbG9jaykpCi0JCQkJCQljb250aW51ZTsKLQotCQkJCQl0aGlzX2VyciA9IGFi cyhjbG9jay5kb3QgLSB0YXJnZXQpOwotCQkJCQlpZiAodGhpc19lcnIgPCBlcnJfbW9zdCkgewot CQkJCQkJKmJlc3RfY2xvY2sgPSBjbG9jazsKLQkJCQkJCWVycl9tb3N0ID0gdGhpc19lcnI7Ci0J CQkJCQltYXhfbiA9IGNsb2NrLm47Ci0JCQkJCQlmb3VuZCA9IHRydWU7Ci0JCQkJCX0KLQkJCQl9 Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIGZvdW5kOwotfQotCi0vKgotICogQ2hlY2sgaWYgdGhl IGNhbGN1bGF0ZWQgUExMIGNvbmZpZ3VyYXRpb24gaXMgbW9yZSBvcHRpbWFsIGNvbXBhcmVkIHRv IHRoZQotICogYmVzdCBjb25maWd1cmF0aW9uIGFuZCBlcnJvciBmb3VuZCBzbyBmYXIuIFJldHVy biB0aGUgY2FsY3VsYXRlZCBlcnJvci4KLSAqLwotc3RhdGljIGJvb2wgdmx2X1BMTF9pc19vcHRp bWFsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCB0YXJnZXRfZnJlcSwKLQkJCSAgICAgICBj b25zdCBzdHJ1Y3QgZHBsbCAqY2FsY3VsYXRlZF9jbG9jaywKLQkJCSAgICAgICBjb25zdCBzdHJ1 Y3QgZHBsbCAqYmVzdF9jbG9jaywKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgYmVzdF9lcnJvcl9w cG0sCi0JCQkgICAgICAgdW5zaWduZWQgaW50ICplcnJvcl9wcG0pCi17Ci0JLyoKLQkgKiBGb3Ig Q0hWIGlnbm9yZSB0aGUgZXJyb3IgYW5kIGNvbnNpZGVyIG9ubHkgdGhlIFAgdmFsdWUuCi0JICog UHJlZmVyIGEgYmlnZ2VyIFAgdmFsdWUgYmFzZWQgb24gSFcgcmVxdWlyZW1lbnRzLgotCSAqLwot CWlmIChJU19DSEVSUllWSUVXKHRvX2k5MTUoZGV2KSkpIHsKLQkJKmVycm9yX3BwbSA9IDA7Ci0K LQkJcmV0dXJuIGNhbGN1bGF0ZWRfY2xvY2stPnAgPiBiZXN0X2Nsb2NrLT5wOwotCX0KLQotCWlm IChkcm1fV0FSTl9PTl9PTkNFKGRldiwgIXRhcmdldF9mcmVxKSkKLQkJcmV0dXJuIGZhbHNlOwot Ci0JKmVycm9yX3BwbSA9IGRpdl91NjQoMTAwMDAwMFVMTCAqCi0JCQkJYWJzKHRhcmdldF9mcmVx IC0gY2FsY3VsYXRlZF9jbG9jay0+ZG90KSwKLQkJCSAgICAgdGFyZ2V0X2ZyZXEpOwotCS8qCi0J ICogUHJlZmVyIGEgYmV0dGVyIFAgdmFsdWUgb3ZlciBhIGJldHRlciAoc21hbGxlcikgZXJyb3Ig aWYgdGhlIGVycm9yCi0JICogaXMgc21hbGwuIEVuc3VyZSB0aGlzIHByZWZlcmVuY2UgZm9yIGZ1 dHVyZSBjb25maWd1cmF0aW9ucyB0b28gYnkKLQkgKiBzZXR0aW5nIHRoZSBlcnJvciB0byAwLgot CSAqLwotCWlmICgqZXJyb3JfcHBtIDwgMTAwICYmIGNhbGN1bGF0ZWRfY2xvY2stPnAgPiBiZXN0 X2Nsb2NrLT5wKSB7Ci0JCSplcnJvcl9wcG0gPSAwOwotCi0JCXJldHVybiB0cnVlOwotCX0KLQot CXJldHVybiAqZXJyb3JfcHBtICsgMTAgPCBiZXN0X2Vycm9yX3BwbTsKLX0KLQotLyoKLSAqIFJl dHVybnMgYSBzZXQgb2YgZGl2aXNvcnMgZm9yIHRoZSBkZXNpcmVkIHRhcmdldCBjbG9jayB3aXRo IHRoZSBnaXZlbgotICogcmVmY2xrLCBvciBGQUxTRS4gIFRoZSByZXR1cm5lZCB2YWx1ZXMgcmVw cmVzZW50IHRoZSBjbG9jayBlcXVhdGlvbjoKLSAqIHJlZmxjayAqICg1ICogKG0xICsgMikgKyAo bTIgKyAyKSkgLyAobiArIDIpIC8gcDEgLyBwMi4KLSAqLwotc3RhdGljIGJvb2wKLXZsdl9maW5k X2Jlc3RfZHBsbChjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgKmxpbWl0LAotCQkgICBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJICAgaW50IHRhcmdldCwgaW50IHJlZmNs aywgc3RydWN0IGRwbGwgKm1hdGNoX2Nsb2NrLAotCQkgICBzdHJ1Y3QgZHBsbCAqYmVzdF9jbG9j aykKLXsKLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0 ZS0+dWFwaS5jcnRjKTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7 Ci0Jc3RydWN0IGRwbGwgY2xvY2s7Ci0JdW5zaWduZWQgaW50IGJlc3RwcG0gPSAxMDAwMDAwOwot CS8qIG1pbiB1cGRhdGUgMTkuMiBNSHogKi8KLQlpbnQgbWF4X24gPSBtaW4obGltaXQtPm4ubWF4 LCByZWZjbGsgLyAxOTIwMCk7Ci0JYm9vbCBmb3VuZCA9IGZhbHNlOwotCi0JdGFyZ2V0ICo9IDU7 IC8qIGZhc3QgY2xvY2sgKi8KLQotCW1lbXNldChiZXN0X2Nsb2NrLCAwLCBzaXplb2YoKmJlc3Rf Y2xvY2spKTsKLQotCS8qIGJhc2VkIG9uIGhhcmR3YXJlIHJlcXVpcmVtZW50LCBwcmVmZXIgc21h bGxlciBuIHRvIHByZWNpc2lvbiAqLwotCWZvciAoY2xvY2subiA9IGxpbWl0LT5uLm1pbjsgY2xv Y2subiA8PSBtYXhfbjsgY2xvY2subisrKSB7Ci0JCWZvciAoY2xvY2sucDEgPSBsaW1pdC0+cDEu bWF4OyBjbG9jay5wMSA+PSBsaW1pdC0+cDEubWluOyBjbG9jay5wMS0tKSB7Ci0JCQlmb3IgKGNs b2NrLnAyID0gbGltaXQtPnAyLnAyX2Zhc3Q7IGNsb2NrLnAyID49IGxpbWl0LT5wMi5wMl9zbG93 OwotCQkJICAgICBjbG9jay5wMiAtPSBjbG9jay5wMiA+IDEwID8gMiA6IDEpIHsKLQkJCQljbG9j ay5wID0gY2xvY2sucDEgKiBjbG9jay5wMjsKLQkJCQkvKiBiYXNlZCBvbiBoYXJkd2FyZSByZXF1 aXJlbWVudCwgcHJlZmVyIGJpZ2dlciBtMSxtMiB2YWx1ZXMgKi8KLQkJCQlmb3IgKGNsb2NrLm0x ID0gbGltaXQtPm0xLm1pbjsgY2xvY2subTEgPD0gbGltaXQtPm0xLm1heDsgY2xvY2subTErKykg ewotCQkJCQl1bnNpZ25lZCBpbnQgcHBtOwotCi0JCQkJCWNsb2NrLm0yID0gRElWX1JPVU5EX0NM T1NFU1QodGFyZ2V0ICogY2xvY2sucCAqIGNsb2NrLm4sCi0JCQkJCQkJCSAgICAgcmVmY2xrICog Y2xvY2subTEpOwotCi0JCQkJCXZsdl9jYWxjX2RwbGxfcGFyYW1zKHJlZmNsaywgJmNsb2NrKTsK LQotCQkJCQlpZiAoIWludGVsX3BsbF9pc192YWxpZCh0b19pOTE1KGRldiksCi0JCQkJCQkJCWxp bWl0LAotCQkJCQkJCQkmY2xvY2spKQotCQkJCQkJY29udGludWU7Ci0KLQkJCQkJaWYgKCF2bHZf UExMX2lzX29wdGltYWwoZGV2LCB0YXJnZXQsCi0JCQkJCQkJCSZjbG9jaywKLQkJCQkJCQkJYmVz dF9jbG9jaywKLQkJCQkJCQkJYmVzdHBwbSwgJnBwbSkpCi0JCQkJCQljb250aW51ZTsKLQotCQkJ CQkqYmVzdF9jbG9jayA9IGNsb2NrOwotCQkJCQliZXN0cHBtID0gcHBtOwotCQkJCQlmb3VuZCA9 IHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JcmV0dXJuIGZvdW5kOwotfQotCi0vKgot ICogUmV0dXJucyBhIHNldCBvZiBkaXZpc29ycyBmb3IgdGhlIGRlc2lyZWQgdGFyZ2V0IGNsb2Nr IHdpdGggdGhlIGdpdmVuCi0gKiByZWZjbGssIG9yIEZBTFNFLiAgVGhlIHJldHVybmVkIHZhbHVl cyByZXByZXNlbnQgdGhlIGNsb2NrIGVxdWF0aW9uOgotICogcmVmbGNrICogKDUgKiAobTEgKyAy KSArIChtMiArIDIpKSAvIChuICsgMikgLyBwMSAvIHAyLgotICovCi1zdGF0aWMgYm9vbAotY2h2 X2ZpbmRfYmVzdF9kcGxsKGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQsCi0JCSAgIHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkgICBpbnQgdGFyZ2V0LCBpbnQg cmVmY2xrLCBzdHJ1Y3QgZHBsbCAqbWF0Y2hfY2xvY2ssCi0JCSAgIHN0cnVjdCBkcGxsICpiZXN0 X2Nsb2NrKQotewotCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRj X3N0YXRlLT51YXBpLmNydGMpOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNl LmRldjsKLQl1bnNpZ25lZCBpbnQgYmVzdF9lcnJvcl9wcG07Ci0Jc3RydWN0IGRwbGwgY2xvY2s7 Ci0JdTY0IG0yOwotCWludCBmb3VuZCA9IGZhbHNlOwotCi0JbWVtc2V0KGJlc3RfY2xvY2ssIDAs IHNpemVvZigqYmVzdF9jbG9jaykpOwotCWJlc3RfZXJyb3JfcHBtID0gMTAwMDAwMDsKLQotCS8q Ci0JICogQmFzZWQgb24gaGFyZHdhcmUgZG9jLCB0aGUgbiBhbHdheXMgc2V0IHRvIDEsIGFuZCBt MSBhbHdheXMKLQkgKiBzZXQgdG8gMi4gIElmIHJlcXVpcmVzIHRvIHN1cHBvcnQgMjAwTWh6IHJl ZmNsaywgd2UgbmVlZCB0bwotCSAqIHJldmlzaXQgdGhpcyBiZWNhdXNlIG4gbWF5IG5vdCAxIGFu eW1vcmUuCi0JICovCi0JY2xvY2subiA9IDE7Ci0JY2xvY2subTEgPSAyOwotCXRhcmdldCAqPSA1 OwkvKiBmYXN0IGNsb2NrICovCi0KLQlmb3IgKGNsb2NrLnAxID0gbGltaXQtPnAxLm1heDsgY2xv Y2sucDEgPj0gbGltaXQtPnAxLm1pbjsgY2xvY2sucDEtLSkgewotCQlmb3IgKGNsb2NrLnAyID0g bGltaXQtPnAyLnAyX2Zhc3Q7Ci0JCQkJY2xvY2sucDIgPj0gbGltaXQtPnAyLnAyX3Nsb3c7Ci0J CQkJY2xvY2sucDIgLT0gY2xvY2sucDIgPiAxMCA/IDIgOiAxKSB7Ci0JCQl1bnNpZ25lZCBpbnQg ZXJyb3JfcHBtOwotCi0JCQljbG9jay5wID0gY2xvY2sucDEgKiBjbG9jay5wMjsKLQotCQkJbTIg PSBESVZfUk9VTkRfQ0xPU0VTVF9VTEwobXVsX3UzMl91MzIodGFyZ2V0LCBjbG9jay5wICogY2xv Y2subikgPDwgMjIsCi0JCQkJCQkgICByZWZjbGsgKiBjbG9jay5tMSk7Ci0KLQkJCWlmIChtMiA+ IElOVF9NQVgvY2xvY2subTEpCi0JCQkJY29udGludWU7Ci0KLQkJCWNsb2NrLm0yID0gbTI7Ci0K LQkJCWNodl9jYWxjX2RwbGxfcGFyYW1zKHJlZmNsaywgJmNsb2NrKTsKLQotCQkJaWYgKCFpbnRl bF9wbGxfaXNfdmFsaWQodG9faTkxNShkZXYpLCBsaW1pdCwgJmNsb2NrKSkKLQkJCQljb250aW51 ZTsKLQotCQkJaWYgKCF2bHZfUExMX2lzX29wdGltYWwoZGV2LCB0YXJnZXQsICZjbG9jaywgYmVz dF9jbG9jaywKLQkJCQkJCWJlc3RfZXJyb3JfcHBtLCAmZXJyb3JfcHBtKSkKLQkJCQljb250aW51 ZTsKLQotCQkJKmJlc3RfY2xvY2sgPSBjbG9jazsKLQkJCWJlc3RfZXJyb3JfcHBtID0gZXJyb3Jf cHBtOwotCQkJZm91bmQgPSB0cnVlOwotCQl9Ci0JfQotCi0JcmV0dXJuIGZvdW5kOwotfQotCi1i b29sIGJ4dF9maW5kX2Jlc3RfZHBsbChzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSwKLQkJCXN0cnVjdCBkcGxsICpiZXN0X2Nsb2NrKQotewotCWludCByZWZjbGsgPSAxMDAwMDA7 Ci0JY29uc3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1pdCA9ICZpbnRlbF9saW1pdHNfYnh0Owot Ci0JcmV0dXJuIGNodl9maW5kX2Jlc3RfZHBsbChsaW1pdCwgY3J0Y19zdGF0ZSwKLQkJCQkgIGNy dGNfc3RhdGUtPnBvcnRfY2xvY2ssIHJlZmNsaywKLQkJCQkgIE5VTEwsIGJlc3RfY2xvY2spOwot fQotCiBzdGF0aWMgYm9vbCBwaXBlX3NjYW5saW5lX2lzX21vdmluZyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkJICAgIGVudW0gcGlwZSBwaXBlKQogewpAQCAtNTI3Myw3 ICs0NTIwLDcgQEAgc3RhdGljIHZvaWQgaXZiX3VwZGF0ZV9mZGlfYmNfYmlmdXJjYXRpb24oY29u c3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3QKICAqIEZpbmRzIHRoZSBlbmNvZGVy IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gQ1JUQy4gVGhpcyBjYW4gb25seSBiZQogICogdXNl ZCB3aGVuIHdlIGtub3cgdGhhdCB0aGUgQ1JUQyBpc24ndCBmZWVkaW5nIG11bHRpcGxlIGVuY29k ZXJzIQogICovCi1zdGF0aWMgc3RydWN0IGludGVsX2VuY29kZXIgKgorc3RydWN0IGludGVsX2Vu Y29kZXIgKgogaW50ZWxfZ2V0X2NydGNfbmV3X2VuY29kZXIoY29uc3Qgc3RydWN0IGludGVsX2F0 b21pY19zdGF0ZSAqc3RhdGUsCiAJCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZSkKIHsKQEAgLTc5NDksNDMgKzcxOTYsNiBAQCBzdGF0aWMgYm9vbCBpbnRlbF9w YW5lbF91c2Vfc3NjKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAkJJiYgIShk ZXZfcHJpdi0+cXVpcmtzICYgUVVJUktfTFZEU19TU0NfRElTQUJMRSk7CiB9CiAKLXN0YXRpYyB1 MzIgcG52X2RwbGxfY29tcHV0ZV9mcChzdHJ1Y3QgZHBsbCAqZHBsbCkKLXsKLQlyZXR1cm4gKDEg PDwgZHBsbC0+bikgPDwgMTYgfCBkcGxsLT5tMjsKLX0KLQotc3RhdGljIHUzMiBpOXh4X2RwbGxf Y29tcHV0ZV9mcChzdHJ1Y3QgZHBsbCAqZHBsbCkKLXsKLQlyZXR1cm4gZHBsbC0+biA8PCAxNiB8 IGRwbGwtPm0xIDw8IDggfCBkcGxsLT5tMjsKLX0KLQotc3RhdGljIHZvaWQgaTl4eF91cGRhdGVf cGxsX2RpdmlkZXJzKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAotCQkJCSAgICAgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCQkJICAgICBzdHJ1Y3QgZHBsbCAqcmVkdWNl ZF9jbG9jaykKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KGNydGMtPmJhc2UuZGV2KTsKLQl1MzIgZnAsIGZwMiA9IDA7Ci0KLQlpZiAoSVNfUElORVZJRVco ZGV2X3ByaXYpKSB7Ci0JCWZwID0gcG52X2RwbGxfY29tcHV0ZV9mcCgmY3J0Y19zdGF0ZS0+ZHBs bCk7Ci0JCWlmIChyZWR1Y2VkX2Nsb2NrKQotCQkJZnAyID0gcG52X2RwbGxfY29tcHV0ZV9mcChy ZWR1Y2VkX2Nsb2NrKTsKLQl9IGVsc2UgewotCQlmcCA9IGk5eHhfZHBsbF9jb21wdXRlX2ZwKCZj cnRjX3N0YXRlLT5kcGxsKTsKLQkJaWYgKHJlZHVjZWRfY2xvY2spCi0JCQlmcDIgPSBpOXh4X2Rw bGxfY29tcHV0ZV9mcChyZWR1Y2VkX2Nsb2NrKTsKLQl9Ci0KLQljcnRjX3N0YXRlLT5kcGxsX2h3 X3N0YXRlLmZwMCA9IGZwOwotCi0JaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwg SU5URUxfT1VUUFVUX0xWRFMpICYmCi0JICAgIHJlZHVjZWRfY2xvY2spIHsKLQkJY3J0Y19zdGF0 ZS0+ZHBsbF9od19zdGF0ZS5mcDEgPSBmcDI7Ci0JfSBlbHNlIHsKLQkJY3J0Y19zdGF0ZS0+ZHBs bF9od19zdGF0ZS5mcDEgPSBmcDsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIHZsdl9wbGxiX3JlY2Fs X29wYW1wKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlCiAJCXBp cGUpCiB7CkBAIC04MTEwLDM5ICs3MzIwLDYgQEAgdm9pZCBpbnRlbF9kcF9zZXRfbV9uKGNvbnN0 IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLCBlbnVtIGxpbmtfbV9uX3MKIAkJ aW50ZWxfY3B1X3RyYW5zY29kZXJfc2V0X21fbihjcnRjX3N0YXRlLCBkcF9tX24sIGRwX20yX24y KTsKIH0KIAotc3RhdGljIHZvaWQgdmx2X2NvbXB1dGVfZHBsbChzdHJ1Y3QgaW50ZWxfY3J0YyAq Y3J0YywKLQkJCSAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQotewot CXBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRlLmRwbGwgPSBEUExMX0lOVEVHUkFURURfUkVGX0NM S19WTFYgfAotCQlEUExMX1JFRl9DTEtfRU5BQkxFX1ZMViB8IERQTExfVkdBX01PREVfRElTOwot CWlmIChjcnRjLT5waXBlICE9IFBJUEVfQSkKLQkJcGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUu ZHBsbCB8PSBEUExMX0lOVEVHUkFURURfQ1JJX0NMS19WTFY7Ci0KLQkvKiBEUExMIG5vdCB1c2Vk IHdpdGggRFNJLCBidXQgc3RpbGwgbmVlZCB0aGUgcmVzdCBzZXQgdXAgKi8KLQlpZiAoIWludGVs X2NydGNfaGFzX3R5cGUocGlwZV9jb25maWcsIElOVEVMX09VVFBVVF9EU0kpKQotCQlwaXBlX2Nv bmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxsIHw9IERQTExfVkNPX0VOQUJMRSB8Ci0JCQlEUExMX0VY VF9CVUZGRVJfRU5BQkxFX1ZMVjsKLQotCXBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRlLmRwbGxf bWQgPQotCQkocGlwZV9jb25maWctPnBpeGVsX211bHRpcGxpZXIgLSAxKSA8PCBEUExMX01EX1VE SV9NVUxUSVBMSUVSX1NISUZUOwotfQotCi1zdGF0aWMgdm9pZCBjaHZfY29tcHV0ZV9kcGxsKHN0 cnVjdCBpbnRlbF9jcnRjICpjcnRjLAotCQkJICAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq cGlwZV9jb25maWcpCi17Ci0JcGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUuZHBsbCA9IERQTExf U1NDX1JFRl9DTEtfQ0hWIHwKLQkJRFBMTF9SRUZfQ0xLX0VOQUJMRV9WTFYgfCBEUExMX1ZHQV9N T0RFX0RJUzsKLQlpZiAoY3J0Yy0+cGlwZSAhPSBQSVBFX0EpCi0JCXBpcGVfY29uZmlnLT5kcGxs X2h3X3N0YXRlLmRwbGwgfD0gRFBMTF9JTlRFR1JBVEVEX0NSSV9DTEtfVkxWOwotCi0JLyogRFBM TCBub3QgdXNlZCB3aXRoIERTSSwgYnV0IHN0aWxsIG5lZWQgdGhlIHJlc3Qgc2V0IHVwICovCi0J aWYgKCFpbnRlbF9jcnRjX2hhc190eXBlKHBpcGVfY29uZmlnLCBJTlRFTF9PVVRQVVRfRFNJKSkK LQkJcGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUuZHBsbCB8PSBEUExMX1ZDT19FTkFCTEU7Ci0K LQlwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxsX21kID0KLQkJKHBpcGVfY29uZmlnLT5w aXhlbF9tdWx0aXBsaWVyIC0gMSkgPDwgRFBMTF9NRF9VRElfTVVMVElQTElFUl9TSElGVDsKLX0K LQogc3RhdGljIHZvaWQgdmx2X3ByZXBhcmVfcGxsKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAog CQkJICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKIHsKQEAg LTg0MDIsMTI4ICs3NTc5LDcgQEAgdm9pZCB2bHZfZm9yY2VfcGxsX29mZihzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlKQogCQl2bHZfZGlzYWJsZV9wbGwo ZGV2X3ByaXYsIHBpcGUpOwogfQogCi1zdGF0aWMgdm9pZCBpOXh4X2NvbXB1dGVfZHBsbChzdHJ1 Y3QgaW50ZWxfY3J0YyAqY3J0YywKLQkJCSAgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlLAotCQkJICAgICAgc3RydWN0IGRwbGwgKnJlZHVjZWRfY2xvY2spCi17Ci0Jc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7 Ci0JdTMyIGRwbGw7Ci0Jc3RydWN0IGRwbGwgKmNsb2NrID0gJmNydGNfc3RhdGUtPmRwbGw7Ci0K LQlpOXh4X3VwZGF0ZV9wbGxfZGl2aWRlcnMoY3J0YywgY3J0Y19zdGF0ZSwgcmVkdWNlZF9jbG9j ayk7Ci0KLQlkcGxsID0gRFBMTF9WR0FfTU9ERV9ESVM7Ci0KLQlpZiAoaW50ZWxfY3J0Y19oYXNf dHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfTFZEUykpCi0JCWRwbGwgfD0gRFBMTEJfTU9E RV9MVkRTOwotCWVsc2UKLQkJZHBsbCB8PSBEUExMQl9NT0RFX0RBQ19TRVJJQUw7Ci0KLQlpZiAo SVNfSTk0NUcoZGV2X3ByaXYpIHx8IElTX0k5NDVHTShkZXZfcHJpdikgfHwKLQkgICAgSVNfRzMz KGRldl9wcml2KSB8fCBJU19QSU5FVklFVyhkZXZfcHJpdikpIHsKLQkJZHBsbCB8PSAoY3J0Y19z dGF0ZS0+cGl4ZWxfbXVsdGlwbGllciAtIDEpCi0JCQk8PCBTRFZPX01VTFRJUExJRVJfU0hJRlRf SElSRVM7Ci0JfQotCi0JaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxf T1VUUFVUX1NEVk8pIHx8Ci0JICAgIGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5U RUxfT1VUUFVUX0hETUkpKQotCQlkcGxsIHw9IERQTExfU0RWT19ISUdIX1NQRUVEOwotCi0JaWYg KGludGVsX2NydGNfaGFzX2RwX2VuY29kZXIoY3J0Y19zdGF0ZSkpCi0JCWRwbGwgfD0gRFBMTF9T RFZPX0hJR0hfU1BFRUQ7Ci0KLQkvKiBjb21wdXRlIGJpdG1hc2sgZnJvbSBwMSB2YWx1ZSAqLwot CWlmIChJU19QSU5FVklFVyhkZXZfcHJpdikpCi0JCWRwbGwgfD0gKDEgPDwgKGNsb2NrLT5wMSAt IDEpKSA8PCBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX1NISUZUX1BJTkVWSUVXOwotCWVsc2Ugewot CQlkcGxsIHw9ICgxIDw8IChjbG9jay0+cDEgLSAxKSkgPDwgRFBMTF9GUEEwMV9QMV9QT1NUX0RJ Vl9TSElGVDsKLQkJaWYgKElTX0c0WChkZXZfcHJpdikgJiYgcmVkdWNlZF9jbG9jaykKLQkJCWRw bGwgfD0gKDEgPDwgKHJlZHVjZWRfY2xvY2stPnAxIC0gMSkpIDw8IERQTExfRlBBMV9QMV9QT1NU X0RJVl9TSElGVDsKLQl9Ci0Jc3dpdGNoIChjbG9jay0+cDIpIHsKLQljYXNlIDU6Ci0JCWRwbGwg fD0gRFBMTF9EQUNfU0VSSUFMX1AyX0NMT0NLX0RJVl81OwotCQlicmVhazsKLQljYXNlIDc6Ci0J CWRwbGwgfD0gRFBMTEJfTFZEU19QMl9DTE9DS19ESVZfNzsKLQkJYnJlYWs7Ci0JY2FzZSAxMDoK LQkJZHBsbCB8PSBEUExMX0RBQ19TRVJJQUxfUDJfQ0xPQ0tfRElWXzEwOwotCQlicmVhazsKLQlj YXNlIDE0OgotCQlkcGxsIHw9IERQTExCX0xWRFNfUDJfQ0xPQ0tfRElWXzE0OwotCQlicmVhazsK LQl9Ci0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkKLQkJZHBsbCB8PSAoNiA8PCBQTExf TE9BRF9QVUxTRV9QSEFTRV9TSElGVCk7Ci0KLQlpZiAoY3J0Y19zdGF0ZS0+c2R2b190dl9jbG9j aykKLQkJZHBsbCB8PSBQTExfUkVGX0lOUFVUX1RWQ0xLSU5CQzsKLQllbHNlIGlmIChpbnRlbF9j cnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9MVkRTKSAmJgotCQkgaW50ZWxf cGFuZWxfdXNlX3NzYyhkZXZfcHJpdikpCi0JCWRwbGwgfD0gUExMQl9SRUZfSU5QVVRfU1BSRUFE U1BFQ1RSVU1JTjsKLQllbHNlCi0JCWRwbGwgfD0gUExMX1JFRl9JTlBVVF9EUkVGQ0xLOwotCi0J ZHBsbCB8PSBEUExMX1ZDT19FTkFCTEU7Ci0JY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZS5kcGxs ID0gZHBsbDsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpIHsKLQkJdTMyIGRwbGxf bWQgPSAoY3J0Y19zdGF0ZS0+cGl4ZWxfbXVsdGlwbGllciAtIDEpCi0JCQk8PCBEUExMX01EX1VE SV9NVUxUSVBMSUVSX1NISUZUOwotCQljcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLmRwbGxfbWQg PSBkcGxsX21kOwotCX0KLX0KLQotc3RhdGljIHZvaWQgaTh4eF9jb21wdXRlX2RwbGwoc3RydWN0 IGludGVsX2NydGMgKmNydGMsCi0JCQkgICAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSwKLQkJCSAgICAgIHN0cnVjdCBkcGxsICpyZWR1Y2VkX2Nsb2NrKQotewotCXN0cnVj dCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Ci0JdTMyIGRwbGw7Ci0Jc3RydWN0IGRwbGwg KmNsb2NrID0gJmNydGNfc3RhdGUtPmRwbGw7Ci0KLQlpOXh4X3VwZGF0ZV9wbGxfZGl2aWRlcnMo Y3J0YywgY3J0Y19zdGF0ZSwgcmVkdWNlZF9jbG9jayk7Ci0KLQlkcGxsID0gRFBMTF9WR0FfTU9E RV9ESVM7Ci0KLQlpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQ VVRfTFZEUykpIHsKLQkJZHBsbCB8PSAoMSA8PCAoY2xvY2stPnAxIC0gMSkpIDw8IERQTExfRlBB MDFfUDFfUE9TVF9ESVZfU0hJRlQ7Ci0JfSBlbHNlIHsKLQkJaWYgKGNsb2NrLT5wMSA9PSAyKQot CQkJZHBsbCB8PSBQTExfUDFfRElWSURFX0JZX1RXTzsKLQkJZWxzZQotCQkJZHBsbCB8PSAoY2xv Y2stPnAxIC0gMikgPDwgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9TSElGVDsKLQkJaWYgKGNsb2Nr LT5wMiA9PSA0KQotCQkJZHBsbCB8PSBQTExfUDJfRElWSURFX0JZXzQ7Ci0JfQotCi0JLyoKLQkg KiBCc3BlYzoKLQkgKiAiW0FsbWFkb3IgRXJyYXRhfTogRm9yIHRoZSBjb3JyZWN0IG9wZXJhdGlv biBvZiB0aGUgbXV4ZWQgRFZPIHBpbnMKLQkgKiAgKEdERVZTRUxCL0kyQ2RhdGEsIEdJUkRCWS9J MkNDbGspIGFuZCAoR0ZSQU1FQi9EVklfRGF0YSwKLQkgKiAgR1RSRFlCL0RWSV9DbGspOiBCaXQg MzEgKERQTEwgVkNPIEVuYWJsZSkgYW5kIEJpdCAzMCAoMlggQ2xvY2sKLQkgKiAgRW5hYmxlKSBt dXN0IGJlIHNldCB0byDigJwx4oCdIGluIGJvdGggdGhlIERQTEwgQSBDb250cm9sIFJlZ2lzdGVy Ci0JICogICgwNjAxNGgtMDYwMTdoKSBhbmQgRFBMTCBCIENvbnRyb2wgUmVnaXN0ZXIgKDA2MDE4 aC0wNjAxQmgpLiIKLQkgKgotCSAqIEZvciBzaW1wbGljaXR5IFdlIHNpbXBseSBrZWVwIGJvdGgg Yml0cyBhbHdheXMgZW5hYmxlZCBpbgotCSAqIGJvdGggRFBMTFMuIFRoZSBzcGVjIHNheXMgd2Ug c2hvdWxkIGRpc2FibGUgdGhlIERWTyAyWCBjbG9jawotCSAqIHdoZW4gbm90IG5lZWRlZCwgYnV0 IHRoaXMgc2VlbXMgdG8gd29yayBmaW5lIGluIHByYWN0aWNlLgotCSAqLwotCWlmIChJU19JODMw KGRldl9wcml2KSB8fAotCSAgICBpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVM X09VVFBVVF9EVk8pKQotCQlkcGxsIHw9IERQTExfRFZPXzJYX01PREU7Ci0KLQlpZiAoaW50ZWxf Y3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfTFZEUykgJiYKLQkgICAgaW50 ZWxfcGFuZWxfdXNlX3NzYyhkZXZfcHJpdikpCi0JCWRwbGwgfD0gUExMQl9SRUZfSU5QVVRfU1BS RUFEU1BFQ1RSVU1JTjsKLQllbHNlCi0JCWRwbGwgfD0gUExMX1JFRl9JTlBVVF9EUkVGQ0xLOwog Ci0JZHBsbCB8PSBEUExMX1ZDT19FTkFCTEU7Ci0JY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZS5k cGxsID0gZHBsbDsKLX0KIAogc3RhdGljIHZvaWQgaW50ZWxfc2V0X3RyYW5zY29kZXJfdGltaW5n cyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKIHsKQEAgLTg3Mjks MjA3ICs3Nzg1LDYgQEAgc3RhdGljIHZvaWQgaTl4eF9zZXRfcGlwZWNvbmYoY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCiAJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRl dl9wcml2LCBQSVBFQ09ORihjcnRjLT5waXBlKSk7CiB9CiAKLXN0YXRpYyBpbnQgaTh4eF9jcnRj X2NvbXB1dGVfY2xvY2soc3RydWN0IGludGVsX2NydGMgKmNydGMsCi0JCQkJICAgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IGNydGMtPmJhc2UuZGV2OwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRv X2k5MTUoZGV2KTsKLQljb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgKmxpbWl0OwotCWludCByZWZj bGsgPSA0ODAwMDsKLQotCW1lbXNldCgmY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSwgMCwKLQkg ICAgICAgc2l6ZW9mKGNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUpKTsKLQotCWlmIChpbnRlbF9j cnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9MVkRTKSkgewotCQlpZiAoaW50 ZWxfcGFuZWxfdXNlX3NzYyhkZXZfcHJpdikpIHsKLQkJCXJlZmNsayA9IGRldl9wcml2LT52YnQu bHZkc19zc2NfZnJlcTsKLQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJCSAgICAi dXNpbmcgU1NDIHJlZmVyZW5jZSBjbG9jayBvZiAlZCBrSHpcbiIsCi0JCQkJICAgIHJlZmNsayk7 Ci0JCX0KLQotCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfaTh4eF9sdmRzOwotCX0gZWxzZSBpZiAo aW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfRFZPKSkgewotCQls aW1pdCA9ICZpbnRlbF9saW1pdHNfaTh4eF9kdm87Ci0JfSBlbHNlIHsKLQkJbGltaXQgPSAmaW50 ZWxfbGltaXRzX2k4eHhfZGFjOwotCX0KLQotCWlmICghY3J0Y19zdGF0ZS0+Y2xvY2tfc2V0ICYm Ci0JICAgICFpOXh4X2ZpbmRfYmVzdF9kcGxsKGxpbWl0LCBjcnRjX3N0YXRlLCBjcnRjX3N0YXRl LT5wb3J0X2Nsb2NrLAotCQkJCSByZWZjbGssIE5VTEwsICZjcnRjX3N0YXRlLT5kcGxsKSkgewot CQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLAotCQkJIkNvdWxkbid0IGZpbmQgUExMIHNldHRpbmdz IGZvciBtb2RlIVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWk4eHhfY29tcHV0ZV9k cGxsKGNydGMsIGNydGNfc3RhdGUsIE5VTEwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBp bnQgZzR4X2NydGNfY29tcHV0ZV9jbG9jayhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKLQkJCQkg IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQotewotCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOwotCWNvbnN0IHN0 cnVjdCBpbnRlbF9saW1pdCAqbGltaXQ7Ci0JaW50IHJlZmNsayA9IDk2MDAwOwotCi0JbWVtc2V0 KCZjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLCAwLAotCSAgICAgICBzaXplb2YoY3J0Y19zdGF0 ZS0+ZHBsbF9od19zdGF0ZSkpOwotCi0JaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0 ZSwgSU5URUxfT1VUUFVUX0xWRFMpKSB7Ci0JCWlmIChpbnRlbF9wYW5lbF91c2Vfc3NjKGRldl9w cml2KSkgewotCQkJcmVmY2xrID0gZGV2X3ByaXYtPnZidC5sdmRzX3NzY19mcmVxOwotCQkJZHJt X2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkJICAgICJ1c2luZyBTU0MgcmVmZXJlbmNlIGNs b2NrIG9mICVkIGtIelxuIiwKLQkJCQkgICAgcmVmY2xrKTsKLQkJfQotCi0JCWlmIChpbnRlbF9p c19kdWFsX2xpbmtfbHZkcyhkZXZfcHJpdikpCi0JCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfZzR4 X2R1YWxfY2hhbm5lbF9sdmRzOwotCQllbHNlCi0JCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfZzR4 X3NpbmdsZV9jaGFubmVsX2x2ZHM7Ci0JfSBlbHNlIGlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNy dGNfc3RhdGUsIElOVEVMX09VVFBVVF9IRE1JKSB8fAotCQkgICBpbnRlbF9jcnRjX2hhc190eXBl KGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9BTkFMT0cpKSB7Ci0JCWxpbWl0ID0gJmludGVsX2xp bWl0c19nNHhfaGRtaTsKLQl9IGVsc2UgaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0 ZSwgSU5URUxfT1VUUFVUX1NEVk8pKSB7Ci0JCWxpbWl0ID0gJmludGVsX2xpbWl0c19nNHhfc2R2 bzsKLQl9IGVsc2UgewotCQkvKiBUaGUgb3B0aW9uIGlzIGZvciBvdGhlciBvdXRwdXRzICovCi0J CWxpbWl0ID0gJmludGVsX2xpbWl0c19pOXh4X3Nkdm87Ci0JfQotCi0JaWYgKCFjcnRjX3N0YXRl LT5jbG9ja19zZXQgJiYKLQkgICAgIWc0eF9maW5kX2Jlc3RfZHBsbChsaW1pdCwgY3J0Y19zdGF0 ZSwgY3J0Y19zdGF0ZS0+cG9ydF9jbG9jaywKLQkJCQlyZWZjbGssIE5VTEwsICZjcnRjX3N0YXRl LT5kcGxsKSkgewotCQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLAotCQkJIkNvdWxkbid0IGZpbmQg UExMIHNldHRpbmdzIGZvciBtb2RlIVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWk5 eHhfY29tcHV0ZV9kcGxsKGNydGMsIGNydGNfc3RhdGUsIE5VTEwpOwotCi0JcmV0dXJuIDA7Ci19 Ci0KLXN0YXRpYyBpbnQgcG52X2NydGNfY29tcHV0ZV9jbG9jayhzdHJ1Y3QgaW50ZWxfY3J0YyAq Y3J0YywKLQkJCQkgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQotewotCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Ci0JY29uc3Qgc3RydWN0IGludGVsX2xp bWl0ICpsaW1pdDsKLQlpbnQgcmVmY2xrID0gOTYwMDA7Ci0KLQltZW1zZXQoJmNydGNfc3RhdGUt PmRwbGxfaHdfc3RhdGUsIDAsCi0JICAgICAgIHNpemVvZihjcnRjX3N0YXRlLT5kcGxsX2h3X3N0 YXRlKSk7Ci0KLQlpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQ VVRfTFZEUykpIHsKLQkJaWYgKGludGVsX3BhbmVsX3VzZV9zc2MoZGV2X3ByaXYpKSB7Ci0JCQly ZWZjbGsgPSBkZXZfcHJpdi0+dmJ0Lmx2ZHNfc3NjX2ZyZXE7Ci0JCQlkcm1fZGJnX2ttcygmZGV2 X3ByaXYtPmRybSwKLQkJCQkgICAgInVzaW5nIFNTQyByZWZlcmVuY2UgY2xvY2sgb2YgJWQga0h6 XG4iLAotCQkJCSAgICByZWZjbGspOwotCQl9Ci0KLQkJbGltaXQgPSAmcG52X2xpbWl0c19sdmRz OwotCX0gZWxzZSB7Ci0JCWxpbWl0ID0gJnBudl9saW1pdHNfc2R2bzsKLQl9Ci0KLQlpZiAoIWNy dGNfc3RhdGUtPmNsb2NrX3NldCAmJgotCSAgICAhcG52X2ZpbmRfYmVzdF9kcGxsKGxpbWl0LCBj cnRjX3N0YXRlLCBjcnRjX3N0YXRlLT5wb3J0X2Nsb2NrLAotCQkJCXJlZmNsaywgTlVMTCwgJmNy dGNfc3RhdGUtPmRwbGwpKSB7Ci0JCWRybV9lcnIoJmRldl9wcml2LT5kcm0sCi0JCQkiQ291bGRu J3QgZmluZCBQTEwgc2V0dGluZ3MgZm9yIG1vZGUhXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J fQotCi0JaTl4eF9jb21wdXRlX2RwbGwoY3J0YywgY3J0Y19zdGF0ZSwgTlVMTCk7Ci0KLQlyZXR1 cm4gMDsKLX0KLQotc3RhdGljIGludCBpOXh4X2NydGNfY29tcHV0ZV9jbG9jayhzdHJ1Y3QgaW50 ZWxfY3J0YyAqY3J0YywKLQkJCQkgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSkKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7Ci0Jc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwotCWNvbnN0IHN0cnVj dCBpbnRlbF9saW1pdCAqbGltaXQ7Ci0JaW50IHJlZmNsayA9IDk2MDAwOwotCi0JbWVtc2V0KCZj cnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLCAwLAotCSAgICAgICBzaXplb2YoY3J0Y19zdGF0ZS0+ ZHBsbF9od19zdGF0ZSkpOwotCi0JaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwg SU5URUxfT1VUUFVUX0xWRFMpKSB7Ci0JCWlmIChpbnRlbF9wYW5lbF91c2Vfc3NjKGRldl9wcml2 KSkgewotCQkJcmVmY2xrID0gZGV2X3ByaXYtPnZidC5sdmRzX3NzY19mcmVxOwotCQkJZHJtX2Ri Z19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkJICAgICJ1c2luZyBTU0MgcmVmZXJlbmNlIGNsb2Nr IG9mICVkIGtIelxuIiwKLQkJCQkgICAgcmVmY2xrKTsKLQkJfQotCi0JCWxpbWl0ID0gJmludGVs X2xpbWl0c19pOXh4X2x2ZHM7Ci0JfSBlbHNlIHsKLQkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2k5 eHhfc2R2bzsKLQl9Ci0KLQlpZiAoIWNydGNfc3RhdGUtPmNsb2NrX3NldCAmJgotCSAgICAhaTl4 eF9maW5kX2Jlc3RfZHBsbChsaW1pdCwgY3J0Y19zdGF0ZSwgY3J0Y19zdGF0ZS0+cG9ydF9jbG9j aywKLQkJCQkgcmVmY2xrLCBOVUxMLCAmY3J0Y19zdGF0ZS0+ZHBsbCkpIHsKLQkJZHJtX2Vycigm ZGV2X3ByaXYtPmRybSwKLQkJCSJDb3VsZG4ndCBmaW5kIFBMTCBzZXR0aW5ncyBmb3IgbW9kZSFc biIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpOXh4X2NvbXB1dGVfZHBsbChjcnRjLCBj cnRjX3N0YXRlLCBOVUxMKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGNodl9jcnRj X2NvbXB1dGVfY2xvY2soc3RydWN0IGludGVsX2NydGMgKmNydGMsCi0JCQkJICBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlpbnQgcmVmY2xrID0gMTAwMDAwOwotCWNv bnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQgPSAmaW50ZWxfbGltaXRzX2NodjsKLQlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUoY3J0Y19zdGF0ZS0+dWFwaS5jcnRj LT5kZXYpOwotCi0JbWVtc2V0KCZjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLCAwLAotCSAgICAg ICBzaXplb2YoY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSkpOwotCi0JaWYgKCFjcnRjX3N0YXRl LT5jbG9ja19zZXQgJiYKLQkgICAgIWNodl9maW5kX2Jlc3RfZHBsbChsaW1pdCwgY3J0Y19zdGF0 ZSwgY3J0Y19zdGF0ZS0+cG9ydF9jbG9jaywKLQkJCQlyZWZjbGssIE5VTEwsICZjcnRjX3N0YXRl LT5kcGxsKSkgewotCQlkcm1fZXJyKCZpOTE1LT5kcm0sICJDb3VsZG4ndCBmaW5kIFBMTCBzZXR0 aW5ncyBmb3IgbW9kZSFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQljaHZfY29tcHV0 ZV9kcGxsKGNydGMsIGNydGNfc3RhdGUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQg dmx2X2NydGNfY29tcHV0ZV9jbG9jayhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKLQkJCQkgIHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQotewotCWludCByZWZjbGsgPSAxMDAw MDA7Ci0JY29uc3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1pdCA9ICZpbnRlbF9saW1pdHNfdmx2 OwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShjcnRjX3N0YXRlLT51 YXBpLmNydGMtPmRldik7Ci0KLQltZW1zZXQoJmNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUsIDAs Ci0JICAgICAgIHNpemVvZihjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlKSk7Ci0KLQlpZiAoIWNy dGNfc3RhdGUtPmNsb2NrX3NldCAmJgotCSAgICAhdmx2X2ZpbmRfYmVzdF9kcGxsKGxpbWl0LCBj cnRjX3N0YXRlLCBjcnRjX3N0YXRlLT5wb3J0X2Nsb2NrLAotCQkJCXJlZmNsaywgTlVMTCwgJmNy dGNfc3RhdGUtPmRwbGwpKSB7Ci0JCWRybV9lcnIoJmk5MTUtPmRybSwgICJDb3VsZG4ndCBmaW5k IFBMTCBzZXR0aW5ncyBmb3IgbW9kZSFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQl2 bHZfY29tcHV0ZV9kcGxsKGNydGMsIGNydGNfc3RhdGUpOwotCi0JcmV0dXJuIDA7Ci19CiAKIHN0 YXRpYyBib29sIGk5eHhfaGFzX3BmaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQogewpAQCAtOTk0MCwxNzIgKzg3OTUsNiBAQCBpbnQgaWxrX2dldF9sYW5lc19yZXF1aXJlZChp bnQgdGFyZ2V0X2Nsb2NrLCBpbnQgbGlua19idywgaW50IGJwcCkKIAlyZXR1cm4gRElWX1JPVU5E X1VQKGJwcywgbGlua19idyAqIDgpOwogfQogCi1zdGF0aWMgYm9vbCBpbGtfbmVlZHNfZmJfY2Jf dHVuZShzdHJ1Y3QgZHBsbCAqZHBsbCwgaW50IGZhY3RvcikKLXsKLQlyZXR1cm4gaTl4eF9kcGxs X2NvbXB1dGVfbShkcGxsKSA8IGZhY3RvciAqIGRwbGwtPm47Ci19Ci0KLXN0YXRpYyB2b2lkIGls a19jb21wdXRlX2RwbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCi0JCQkgICAgIHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkJICAgICBzdHJ1Y3QgZHBsbCAqcmVkdWNl ZF9jbG9jaykKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KGNydGMtPmJhc2UuZGV2KTsKLQl1MzIgZHBsbCwgZnAsIGZwMjsKLQlpbnQgZmFjdG9yOwotCi0J LyogRW5hYmxlIGF1dG90dW5pbmcgb2YgdGhlIFBMTCBjbG9jayAoaWYgcGVybWlzc2libGUpICov Ci0JZmFjdG9yID0gMjE7Ci0JaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5U RUxfT1VUUFVUX0xWRFMpKSB7Ci0JCWlmICgoaW50ZWxfcGFuZWxfdXNlX3NzYyhkZXZfcHJpdikg JiYKLQkJICAgICBkZXZfcHJpdi0+dmJ0Lmx2ZHNfc3NjX2ZyZXEgPT0gMTAwMDAwKSB8fAotCQkg ICAgKEhBU19QQ0hfSUJYKGRldl9wcml2KSAmJgotCQkgICAgIGludGVsX2lzX2R1YWxfbGlua19s dmRzKGRldl9wcml2KSkpCi0JCQlmYWN0b3IgPSAyNTsKLQl9IGVsc2UgaWYgKGNydGNfc3RhdGUt PnNkdm9fdHZfY2xvY2spIHsKLQkJZmFjdG9yID0gMjA7Ci0JfQotCi0JZnAgPSBpOXh4X2RwbGxf Y29tcHV0ZV9mcCgmY3J0Y19zdGF0ZS0+ZHBsbCk7Ci0KLQlpZiAoaWxrX25lZWRzX2ZiX2NiX3R1 bmUoJmNydGNfc3RhdGUtPmRwbGwsIGZhY3RvcikpCi0JCWZwIHw9IEZQX0NCX1RVTkU7Ci0KLQlp ZiAocmVkdWNlZF9jbG9jaykgewotCQlmcDIgPSBpOXh4X2RwbGxfY29tcHV0ZV9mcChyZWR1Y2Vk X2Nsb2NrKTsKLQotCQlpZiAocmVkdWNlZF9jbG9jay0+bSA8IGZhY3RvciAqIHJlZHVjZWRfY2xv Y2stPm4pCi0JCQlmcDIgfD0gRlBfQ0JfVFVORTsKLQl9IGVsc2UgewotCQlmcDIgPSBmcDsKLQl9 Ci0KLQlkcGxsID0gMDsKLQotCWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElO VEVMX09VVFBVVF9MVkRTKSkKLQkJZHBsbCB8PSBEUExMQl9NT0RFX0xWRFM7Ci0JZWxzZQotCQlk cGxsIHw9IERQTExCX01PREVfREFDX1NFUklBTDsKLQotCWRwbGwgfD0gKGNydGNfc3RhdGUtPnBp eGVsX211bHRpcGxpZXIgLSAxKQotCQk8PCBQTExfUkVGX1NEVk9fSERNSV9NVUxUSVBMSUVSX1NI SUZUOwotCi0JaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVU X1NEVk8pIHx8Ci0JICAgIGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VU UFVUX0hETUkpKQotCQlkcGxsIHw9IERQTExfU0RWT19ISUdIX1NQRUVEOwotCi0JaWYgKGludGVs X2NydGNfaGFzX2RwX2VuY29kZXIoY3J0Y19zdGF0ZSkpCi0JCWRwbGwgfD0gRFBMTF9TRFZPX0hJ R0hfU1BFRUQ7Ci0KLQkvKgotCSAqIFRoZSBoaWdoIHNwZWVkIElPIGNsb2NrIGlzIG9ubHkgcmVh bGx5IHJlcXVpcmVkIGZvcgotCSAqIFNEVk8vSERNSS9EUCwgYnV0IHdlIGFsc28gZW5hYmxlIGl0 IGZvciBDUlQgdG8gbWFrZSBpdAotCSAqIHBvc3NpYmxlIHRvIHNoYXJlIHRoZSBEUExMIGJldHdl ZW4gQ1JUIGFuZCBIRE1JLiBFbmFibGluZwotCSAqIHRoZSBjbG9jayBuZWVkbGVzc2x5IGRvZXMg bm8gcmVhbCBoYXJtLCBleGNlcHQgdXNlIHVwIGEKLQkgKiBiaXQgb2YgcG93ZXIgcG90ZW50aWFs bHkuCi0JICoKLQkgKiBXZSdsbCBsaW1pdCB0aGlzIHRvIElWQiB3aXRoIDMgcGlwZXMsIHNpbmNl IGl0IGhhcyBvbmx5IHR3bwotCSAqIERQTExzIGFuZCBzbyBEUExMIHNoYXJpbmcgaXMgdGhlIG9u bHkgd2F5IHRvIGdldCB0aHJlZSBwaXBlcwotCSAqIGRyaXZpbmcgUENIIHBvcnRzIGF0IHRoZSBz YW1lIHRpbWUuIE9uIFNOQiB3ZSBjb3VsZCBkbyB0aGlzLAotCSAqIGFuZCBwb3RlbnRpYWxseSBh dm9pZCBlbmFibGluZyB0aGUgc2Vjb25kIERQTEwsIGJ1dCBpdCdzIG5vdAotCSAqIGNsZWFyIGlm IGl0JydzIGEgd2luIG9yIGxvc3MgcG93ZXIgd2lzZS4gTm8gcG9pbnQgaW4gZG9pbmcKLQkgKiB0 aGlzIG9uIElMSyBhdCBhbGwgc2luY2UgaXQgaGFzIGEgZml4ZWQgRFBMTDwtPnBpcGUgbWFwcGlu Zy4KLQkgKi8KLQlpZiAoSU5URUxfTlVNX1BJUEVTKGRldl9wcml2KSA9PSAzICYmCi0JICAgIGlu dGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0FOQUxPRykpCi0JCWRw bGwgfD0gRFBMTF9TRFZPX0hJR0hfU1BFRUQ7Ci0KLQkvKiBjb21wdXRlIGJpdG1hc2sgZnJvbSBw MSB2YWx1ZSAqLwotCWRwbGwgfD0gKDEgPDwgKGNydGNfc3RhdGUtPmRwbGwucDEgLSAxKSkgPDwg RFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9TSElGVDsKLQkvKiBhbHNvIEZQQTEgKi8KLQlkcGxsIHw9 ICgxIDw8IChjcnRjX3N0YXRlLT5kcGxsLnAxIC0gMSkpIDw8IERQTExfRlBBMV9QMV9QT1NUX0RJ Vl9TSElGVDsKLQotCXN3aXRjaCAoY3J0Y19zdGF0ZS0+ZHBsbC5wMikgewotCWNhc2UgNToKLQkJ ZHBsbCB8PSBEUExMX0RBQ19TRVJJQUxfUDJfQ0xPQ0tfRElWXzU7Ci0JCWJyZWFrOwotCWNhc2Ug NzoKLQkJZHBsbCB8PSBEUExMQl9MVkRTX1AyX0NMT0NLX0RJVl83OwotCQlicmVhazsKLQljYXNl IDEwOgotCQlkcGxsIHw9IERQTExfREFDX1NFUklBTF9QMl9DTE9DS19ESVZfMTA7Ci0JCWJyZWFr OwotCWNhc2UgMTQ6Ci0JCWRwbGwgfD0gRFBMTEJfTFZEU19QMl9DTE9DS19ESVZfMTQ7Ci0JCWJy ZWFrOwotCX0KLQotCWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09V VFBVVF9MVkRTKSAmJgotCSAgICBpbnRlbF9wYW5lbF91c2Vfc3NjKGRldl9wcml2KSkKLQkJZHBs bCB8PSBQTExCX1JFRl9JTlBVVF9TUFJFQURTUEVDVFJVTUlOOwotCWVsc2UKLQkJZHBsbCB8PSBQ TExfUkVGX0lOUFVUX0RSRUZDTEs7Ci0KLQlkcGxsIHw9IERQTExfVkNPX0VOQUJMRTsKLQotCWNy dGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUuZHBsbCA9IGRwbGw7Ci0JY3J0Y19zdGF0ZS0+ZHBsbF9o d19zdGF0ZS5mcDAgPSBmcDsKLQljcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLmZwMSA9IGZwMjsK LX0KLQotc3RhdGljIGludCBpbGtfY3J0Y19jb21wdXRlX2Nsb2NrKHN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjLAotCQkJCSAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCi17Ci0J c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRl dik7Ci0Jc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUgPQotCQl0b19pbnRlbF9hdG9t aWNfc3RhdGUoY3J0Y19zdGF0ZS0+dWFwaS5zdGF0ZSk7Ci0JY29uc3Qgc3RydWN0IGludGVsX2xp bWl0ICpsaW1pdDsKLQlpbnQgcmVmY2xrID0gMTIwMDAwOwotCi0JbWVtc2V0KCZjcnRjX3N0YXRl LT5kcGxsX2h3X3N0YXRlLCAwLAotCSAgICAgICBzaXplb2YoY3J0Y19zdGF0ZS0+ZHBsbF9od19z dGF0ZSkpOwotCi0JLyogQ1BVIGVEUCBpcyB0aGUgb25seSBvdXRwdXQgdGhhdCBkb2Vzbid0IG5l ZWQgYSBQQ0ggUExMIG9mIGl0cyBvd24uICovCi0JaWYgKCFjcnRjX3N0YXRlLT5oYXNfcGNoX2Vu Y29kZXIpCi0JCXJldHVybiAwOwotCi0JaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0 ZSwgSU5URUxfT1VUUFVUX0xWRFMpKSB7Ci0JCWlmIChpbnRlbF9wYW5lbF91c2Vfc3NjKGRldl9w cml2KSkgewotCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkJICAgICJ1c2luZyBT U0MgcmVmZXJlbmNlIGNsb2NrIG9mICVkIGtIelxuIiwKLQkJCQkgICAgZGV2X3ByaXYtPnZidC5s dmRzX3NzY19mcmVxKTsKLQkJCXJlZmNsayA9IGRldl9wcml2LT52YnQubHZkc19zc2NfZnJlcTsK LQkJfQotCi0JCWlmIChpbnRlbF9pc19kdWFsX2xpbmtfbHZkcyhkZXZfcHJpdikpIHsKLQkJCWlm IChyZWZjbGsgPT0gMTAwMDAwKQotCQkJCWxpbWl0ID0gJmlsa19saW1pdHNfZHVhbF9sdmRzXzEw MG07Ci0JCQllbHNlCi0JCQkJbGltaXQgPSAmaWxrX2xpbWl0c19kdWFsX2x2ZHM7Ci0JCX0gZWxz ZSB7Ci0JCQlpZiAocmVmY2xrID09IDEwMDAwMCkKLQkJCQlsaW1pdCA9ICZpbGtfbGltaXRzX3Np bmdsZV9sdmRzXzEwMG07Ci0JCQllbHNlCi0JCQkJbGltaXQgPSAmaWxrX2xpbWl0c19zaW5nbGVf bHZkczsKLQkJfQotCX0gZWxzZSB7Ci0JCWxpbWl0ID0gJmlsa19saW1pdHNfZGFjOwotCX0KLQot CWlmICghY3J0Y19zdGF0ZS0+Y2xvY2tfc2V0ICYmCi0JICAgICFnNHhfZmluZF9iZXN0X2RwbGwo bGltaXQsIGNydGNfc3RhdGUsIGNydGNfc3RhdGUtPnBvcnRfY2xvY2ssCi0JCQkJcmVmY2xrLCBO VUxMLCAmY3J0Y19zdGF0ZS0+ZHBsbCkpIHsKLQkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwKLQkJ CSJDb3VsZG4ndCBmaW5kIFBMTCBzZXR0aW5ncyBmb3IgbW9kZSFcbiIpOwotCQlyZXR1cm4gLUVJ TlZBTDsKLQl9Ci0KLQlpbGtfY29tcHV0ZV9kcGxsKGNydGMsIGNydGNfc3RhdGUsIE5VTEwpOwot Ci0JaWYgKCFpbnRlbF9yZXNlcnZlX3NoYXJlZF9kcGxscyhzdGF0ZSwgY3J0YywgTlVMTCkpIHsK LQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkgICAgImZhaWxlZCB0byBmaW5kIFBM TCBmb3IgcGlwZSAlY1xuIiwKLQkJCSAgICBwaXBlX25hbWUoY3J0Yy0+cGlwZSkpOwotCQlyZXR1 cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgaW50ZWxfcGNo X3RyYW5zY29kZXJfZ2V0X21fbihzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKIAkJCQkJIHN0cnVj dCBpbnRlbF9saW5rX21fbiAqbV9uKQogewpAQCAtMTA1MTgsMjkgKzkyMDcsNiBAQCBzdGF0aWMg Ym9vbCBpbGtfZ2V0X3BpcGVfY29uZmlnKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAogCXJldHVy biByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgaHN3X2NydGNfY29tcHV0ZV9jbG9jayhzdHJ1Y3QgaW50 ZWxfY3J0YyAqY3J0YywKLQkJCQkgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRl KQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+ YmFzZS5kZXYpOwotCXN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlID0KLQkJdG9faW50 ZWxfYXRvbWljX3N0YXRlKGNydGNfc3RhdGUtPnVhcGkuc3RhdGUpOwotCi0JaWYgKCFpbnRlbF9j cnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9EU0kpIHx8Ci0JICAgIElOVEVM X0dFTihkZXZfcHJpdikgPj0gMTEpIHsKLQkJc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIg PQotCQkJaW50ZWxfZ2V0X2NydGNfbmV3X2VuY29kZXIoc3RhdGUsIGNydGNfc3RhdGUpOwotCi0J CWlmICghaW50ZWxfcmVzZXJ2ZV9zaGFyZWRfZHBsbHMoc3RhdGUsIGNydGMsIGVuY29kZXIpKSB7 Ci0JCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCQkgICAgImZhaWxlZCB0byBmaW5k IFBMTCBmb3IgcGlwZSAlY1xuIiwKLQkJCQkgICAgcGlwZV9uYW1lKGNydGMtPnBpcGUpKTsKLQkJ CXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lk IGRnMV9nZXRfZGRpX3BsbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0g cG9ydCBwb3J0LAogCQkJICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykK IHsKQEAgLTE2NDc1LDY5ICsxNTE0MSwyNyBAQCB2b2lkIGludGVsX2luaXRfZGlzcGxheV9ob29r cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJaW50ZWxfaW5pdF9jZGNs a19ob29rcyhkZXZfcHJpdik7CiAKKwlpbnRlbF9pbml0X2Nsb2NrX2hvb2soZGV2X3ByaXYpOwor CiAJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkgewogCQlkZXZfcHJpdi0+ZGlzcGxheS5n ZXRfcGlwZV9jb25maWcgPSBoc3dfZ2V0X3BpcGVfY29uZmlnOwotCQlkZXZfcHJpdi0+ZGlzcGxh eS5nZXRfaW5pdGlhbF9wbGFuZV9jb25maWcgPQotCQkJc2tsX2dldF9pbml0aWFsX3BsYW5lX2Nv bmZpZzsKLQkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19jb21wdXRlX2Nsb2NrID0gaHN3X2NydGNf Y29tcHV0ZV9jbG9jazsKIAkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19lbmFibGUgPSBoc3dfY3J0 Y19lbmFibGU7CiAJCWRldl9wcml2LT5kaXNwbGF5LmNydGNfZGlzYWJsZSA9IGhzd19jcnRjX2Rp c2FibGU7CiAJfSBlbHNlIGlmIChIQVNfRERJKGRldl9wcml2KSkgewogCQlkZXZfcHJpdi0+ZGlz cGxheS5nZXRfcGlwZV9jb25maWcgPSBoc3dfZ2V0X3BpcGVfY29uZmlnOwotCQlkZXZfcHJpdi0+ ZGlzcGxheS5nZXRfaW5pdGlhbF9wbGFuZV9jb25maWcgPQotCQkJaTl4eF9nZXRfaW5pdGlhbF9w bGFuZV9jb25maWc7Ci0JCWRldl9wcml2LT5kaXNwbGF5LmNydGNfY29tcHV0ZV9jbG9jayA9Ci0J CQloc3dfY3J0Y19jb21wdXRlX2Nsb2NrOwogCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2VuYWJs ZSA9IGhzd19jcnRjX2VuYWJsZTsKIAkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19kaXNhYmxlID0g aHN3X2NydGNfZGlzYWJsZTsKIAl9IGVsc2UgaWYgKEhBU19QQ0hfU1BMSVQoZGV2X3ByaXYpKSB7 CiAJCWRldl9wcml2LT5kaXNwbGF5LmdldF9waXBlX2NvbmZpZyA9IGlsa19nZXRfcGlwZV9jb25m aWc7Ci0JCWRldl9wcml2LT5kaXNwbGF5LmdldF9pbml0aWFsX3BsYW5lX2NvbmZpZyA9Ci0JCQlp OXh4X2dldF9pbml0aWFsX3BsYW5lX2NvbmZpZzsKLQkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19j b21wdXRlX2Nsb2NrID0KLQkJCWlsa19jcnRjX2NvbXB1dGVfY2xvY2s7CiAJCWRldl9wcml2LT5k aXNwbGF5LmNydGNfZW5hYmxlID0gaWxrX2NydGNfZW5hYmxlOwogCQlkZXZfcHJpdi0+ZGlzcGxh eS5jcnRjX2Rpc2FibGUgPSBpbGtfY3J0Y19kaXNhYmxlOwotCX0gZWxzZSBpZiAoSVNfQ0hFUlJZ VklFVyhkZXZfcHJpdikpIHsKLQkJZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X3BpcGVfY29uZmlnID0g aTl4eF9nZXRfcGlwZV9jb25maWc7Ci0JCWRldl9wcml2LT5kaXNwbGF5LmdldF9pbml0aWFsX3Bs YW5lX2NvbmZpZyA9Ci0JCQlpOXh4X2dldF9pbml0aWFsX3BsYW5lX2NvbmZpZzsKLQkJZGV2X3By aXYtPmRpc3BsYXkuY3J0Y19jb21wdXRlX2Nsb2NrID0gY2h2X2NydGNfY29tcHV0ZV9jbG9jazsK LQkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19lbmFibGUgPSB2YWxsZXl2aWV3X2NydGNfZW5hYmxl OwotCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2Rpc2FibGUgPSBpOXh4X2NydGNfZGlzYWJsZTsK LQl9IGVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpKSB7CisJfSBlbHNlIGlmIChJU19D SEVSUllWSUVXKGRldl9wcml2KSB8fAorCQkgICBJU19WQUxMRVlWSUVXKGRldl9wcml2KSkgewog CQlkZXZfcHJpdi0+ZGlzcGxheS5nZXRfcGlwZV9jb25maWcgPSBpOXh4X2dldF9waXBlX2NvbmZp ZzsKLQkJZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X2luaXRpYWxfcGxhbmVfY29uZmlnID0KLQkJCWk5 eHhfZ2V0X2luaXRpYWxfcGxhbmVfY29uZmlnOwotCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2Nv bXB1dGVfY2xvY2sgPSB2bHZfY3J0Y19jb21wdXRlX2Nsb2NrOwogCQlkZXZfcHJpdi0+ZGlzcGxh eS5jcnRjX2VuYWJsZSA9IHZhbGxleXZpZXdfY3J0Y19lbmFibGU7CiAJCWRldl9wcml2LT5kaXNw bGF5LmNydGNfZGlzYWJsZSA9IGk5eHhfY3J0Y19kaXNhYmxlOwotCX0gZWxzZSBpZiAoSVNfRzRY KGRldl9wcml2KSkgewotCQlkZXZfcHJpdi0+ZGlzcGxheS5nZXRfcGlwZV9jb25maWcgPSBpOXh4 X2dldF9waXBlX2NvbmZpZzsKLQkJZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X2luaXRpYWxfcGxhbmVf Y29uZmlnID0KLQkJCWk5eHhfZ2V0X2luaXRpYWxfcGxhbmVfY29uZmlnOwotCQlkZXZfcHJpdi0+ ZGlzcGxheS5jcnRjX2NvbXB1dGVfY2xvY2sgPSBnNHhfY3J0Y19jb21wdXRlX2Nsb2NrOwotCQlk ZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2VuYWJsZSA9IGk5eHhfY3J0Y19lbmFibGU7Ci0JCWRldl9w cml2LT5kaXNwbGF5LmNydGNfZGlzYWJsZSA9IGk5eHhfY3J0Y19kaXNhYmxlOwotCX0gZWxzZSBp ZiAoSVNfUElORVZJRVcoZGV2X3ByaXYpKSB7Ci0JCWRldl9wcml2LT5kaXNwbGF5LmdldF9waXBl X2NvbmZpZyA9IGk5eHhfZ2V0X3BpcGVfY29uZmlnOwotCQlkZXZfcHJpdi0+ZGlzcGxheS5nZXRf aW5pdGlhbF9wbGFuZV9jb25maWcgPQotCQkJaTl4eF9nZXRfaW5pdGlhbF9wbGFuZV9jb25maWc7 Ci0JCWRldl9wcml2LT5kaXNwbGF5LmNydGNfY29tcHV0ZV9jbG9jayA9IHBudl9jcnRjX2NvbXB1 dGVfY2xvY2s7Ci0JCWRldl9wcml2LT5kaXNwbGF5LmNydGNfZW5hYmxlID0gaTl4eF9jcnRjX2Vu YWJsZTsKLQkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19kaXNhYmxlID0gaTl4eF9jcnRjX2Rpc2Fi bGU7Ci0JfSBlbHNlIGlmICghSVNfR0VOKGRldl9wcml2LCAyKSkgewotCQlkZXZfcHJpdi0+ZGlz cGxheS5nZXRfcGlwZV9jb25maWcgPSBpOXh4X2dldF9waXBlX2NvbmZpZzsKLQkJZGV2X3ByaXYt PmRpc3BsYXkuZ2V0X2luaXRpYWxfcGxhbmVfY29uZmlnID0KLQkJCWk5eHhfZ2V0X2luaXRpYWxf cGxhbmVfY29uZmlnOwotCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2NvbXB1dGVfY2xvY2sgPSBp OXh4X2NydGNfY29tcHV0ZV9jbG9jazsKLQkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19lbmFibGUg PSBpOXh4X2NydGNfZW5hYmxlOwotCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2Rpc2FibGUgPSBp OXh4X2NydGNfZGlzYWJsZTsKIAl9IGVsc2UgewogCQlkZXZfcHJpdi0+ZGlzcGxheS5nZXRfcGlw ZV9jb25maWcgPSBpOXh4X2dldF9waXBlX2NvbmZpZzsKLQkJZGV2X3ByaXYtPmRpc3BsYXkuZ2V0 X2luaXRpYWxfcGxhbmVfY29uZmlnID0KLQkJCWk5eHhfZ2V0X2luaXRpYWxfcGxhbmVfY29uZmln OwotCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2NvbXB1dGVfY2xvY2sgPSBpOHh4X2NydGNfY29t cHV0ZV9jbG9jazsKIAkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19lbmFibGUgPSBpOXh4X2NydGNf ZW5hYmxlOwogCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2Rpc2FibGUgPSBpOXh4X2NydGNfZGlz YWJsZTsKIAl9CkBAIC0xNjU1MSwxMCArMTUxNzUsMTMgQEAgdm9pZCBpbnRlbF9pbml0X2Rpc3Bs YXlfaG9va3Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCQlkZXZfcHJpdi0+ ZGlzcGxheS5mZGlfbGlua190cmFpbiA9IGl2Yl9tYW51YWxfZmRpX2xpbmtfdHJhaW47CiAJfQog Ci0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA+PSA5KSB7CiAJCWRldl9wcml2LT5kaXNwbGF5LmNvbW1pdF9tb2Rlc2V0X2VuYWJsZXMgPSBz a2xfY29tbWl0X21vZGVzZXRfZW5hYmxlczsKLQllbHNlCisJCWRldl9wcml2LT5kaXNwbGF5Lmdl dF9pbml0aWFsX3BsYW5lX2NvbmZpZyA9IHNrbF9nZXRfaW5pdGlhbF9wbGFuZV9jb25maWc7CisJ fSBlbHNlIHsKIAkJZGV2X3ByaXYtPmRpc3BsYXkuY29tbWl0X21vZGVzZXRfZW5hYmxlcyA9IGlu dGVsX2NvbW1pdF9tb2Rlc2V0X2VuYWJsZXM7CisJCWRldl9wcml2LT5kaXNwbGF5LmdldF9pbml0 aWFsX3BsYW5lX2NvbmZpZyA9IGk5eHhfZ2V0X2luaXRpYWxfcGxhbmVfY29uZmlnOworCX0KIAog fQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3Bs YXkuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5oCmluZGV4 IDBlYmE5MWQxOGU5Ni4uZjFlMzZjY2E4NmMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2Rpc3BsYXkuaApAQCAtNjUzLDcgKzY1Myw5IEBAIHUzMiBpbnRlbF9wbGFu ZV9jb21wdXRlX2FsaWduZWRfb2Zmc2V0KGludCAqeCwgaW50ICp5LAogCQkJCSAgICAgICBpbnQg Y29sb3JfcGxhbmUpOwogaW50IGludGVsX3BsYW5lX3Bpbl9mYihzdHJ1Y3QgaW50ZWxfcGxhbmVf c3RhdGUgKnBsYW5lX3N0YXRlKTsKIHZvaWQgaW50ZWxfcGxhbmVfdW5waW5fZmIoc3RydWN0IGlu dGVsX3BsYW5lX3N0YXRlICpvbGRfcGxhbmVfc3RhdGUpOwotCitzdHJ1Y3QgaW50ZWxfZW5jb2Rl ciAqCitpbnRlbF9nZXRfY3J0Y19uZXdfZW5jb2Rlcihjb25zdCBzdHJ1Y3QgaW50ZWxfYXRvbWlj X3N0YXRlICpzdGF0ZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRj X3N0YXRlKTsKIC8qIGN1cnNvciAqLwogc3RydWN0IGludGVsX3BsYW5lICoKIGludGVsX2N1cnNv cl9wbGFuZV9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LApAQCAtNjY1 LDYgKzY2NywxNSBAQCBpbnQgaW50ZWxfY3J0Y19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUpOwogc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmlu dGVsX2NydGNfc3RhdGVfYWxsb2Moc3RydWN0IGludGVsX2NydGMgKmNydGMpOwogdm9pZCBpbnRl bF9jcnRjX3N0YXRlX3Jlc2V0KHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAog CQkJICAgIHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKTsKKy8qIGNsb2NrICovCit2b2lkIGludGVs X2luaXRfY2xvY2tfaG9vayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOworaW50 IHZsdl9jYWxjX2RwbGxfcGFyYW1zKGludCByZWZjbGssIHN0cnVjdCBkcGxsICpjbG9jayk7Citp bnQgcG52X2NhbGNfZHBsbF9wYXJhbXMoaW50IHJlZmNsaywgc3RydWN0IGRwbGwgKmNsb2NrKTsK K2ludCBpOXh4X2NhbGNfZHBsbF9wYXJhbXMoaW50IHJlZmNsaywgc3RydWN0IGRwbGwgKmNsb2Nr KTsKK3ZvaWQgdmx2X2NvbXB1dGVfZHBsbChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKKwkJICAg ICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKTsKK3ZvaWQgY2h2X2NvbXB1 dGVfZHBsbChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKKwkJICAgICAgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKnBpcGVfY29uZmlnKTsKIAogLyogbW9kZXNldHRpbmcgKi8KIHZvaWQgaW50ZWxf bW9kZXNldF9pbml0X2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmgKaW5kZXgg ZGZlNTczYzhiNWFlLi41ZDAxNWIwNzEwZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oCkBAIC0xODExLDQgKzE4MTEsOSBAQCB0 b19pbnRlbF9mcm9udGJ1ZmZlcihzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKIAlyZXR1cm4g ZmIgPyB0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYiktPmZyb250YnVmZmVyIDogTlVMTDsKIH0KIAor c3RhdGljIGlubGluZSB1MzIgaTl4eF9kcGxsX2NvbXB1dGVfZnAoc3RydWN0IGRwbGwgKmRwbGwp Cit7CisJcmV0dXJuIGRwbGwtPm4gPDwgMTYgfCBkcGxsLT5tMSA8PCA4IHwgZHBsbC0+bTI7Cit9 CisKICNlbmRpZiAvKiAgX19JTlRFTF9ESVNQTEFZX1RZUEVTX0hfXyAqLwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcGxsX2xlZ2FjeS5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcGxsX2xlZ2FjeS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNzU4MTljMWRhMDM5Ci0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcGxsX2xlZ2FjeS5jCkBAIC0w LDAgKzEsMTM3MCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAorLyoKKyAqIENv cHlyaWdodCDCqSAyMDIwIEludGVsIENvcnBvcmF0aW9uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9r ZXJuZWwuaD4KKyNpbmNsdWRlICJpbnRlbF9kaXNwbGF5X3R5cGVzLmgiCisjaW5jbHVkZSAiaW50 ZWxfZGlzcGxheS5oIgorI2luY2x1ZGUgImludGVsX2x2ZHMuaCIKKyNpbmNsdWRlICJpbnRlbF9w YW5lbC5oIgorCitzdGF0aWMgYm9vbCBpbnRlbF9wYW5lbF91c2Vfc3NjKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlpZiAoZGV2X3ByaXYtPnBhcmFtcy5wYW5lbF91c2Vf c3NjID49IDApCisJCXJldHVybiBkZXZfcHJpdi0+cGFyYW1zLnBhbmVsX3VzZV9zc2MgIT0gMDsK KwlyZXR1cm4gZGV2X3ByaXYtPnZidC5sdmRzX3VzZV9zc2MKKwkJJiYgIShkZXZfcHJpdi0+cXVp cmtzICYgUVVJUktfTFZEU19TU0NfRElTQUJMRSk7Cit9CisKK3N0cnVjdCBpbnRlbF9saW1pdCB7 CisJc3RydWN0IHsKKwkJaW50IG1pbiwgbWF4OworCX0gZG90LCB2Y28sIG4sIG0sIG0xLCBtMiwg cCwgcDE7CisKKwlzdHJ1Y3QgeworCQlpbnQgZG90X2xpbWl0OworCQlpbnQgcDJfc2xvdywgcDJf ZmFzdDsKKwl9IHAyOworfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaW50ZWxf bGltaXRzX2k4eHhfZGFjID0geworCS5kb3QgPSB7IC5taW4gPSAyNTAwMCwgLm1heCA9IDM1MDAw MCB9LAorCS52Y28gPSB7IC5taW4gPSA5MDgwMDAsIC5tYXggPSAxNTEyMDAwIH0sCisJLm4gPSB7 IC5taW4gPSAyLCAubWF4ID0gMTYgfSwKKwkubSA9IHsgLm1pbiA9IDk2LCAubWF4ID0gMTQwIH0s CisJLm0xID0geyAubWluID0gMTgsIC5tYXggPSAyNiB9LAorCS5tMiA9IHsgLm1pbiA9IDYsIC5t YXggPSAxNiB9LAorCS5wID0geyAubWluID0gNCwgLm1heCA9IDEyOCB9LAorCS5wMSA9IHsgLm1p biA9IDIsIC5tYXggPSAzMyB9LAorCS5wMiA9IHsgLmRvdF9saW1pdCA9IDE2NTAwMCwKKwkJLnAy X3Nsb3cgPSA0LCAucDJfZmFzdCA9IDIgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50 ZWxfbGltaXQgaW50ZWxfbGltaXRzX2k4eHhfZHZvID0geworCS5kb3QgPSB7IC5taW4gPSAyNTAw MCwgLm1heCA9IDM1MDAwMCB9LAorCS52Y28gPSB7IC5taW4gPSA5MDgwMDAsIC5tYXggPSAxNTEy MDAwIH0sCisJLm4gPSB7IC5taW4gPSAyLCAubWF4ID0gMTYgfSwKKwkubSA9IHsgLm1pbiA9IDk2 LCAubWF4ID0gMTQwIH0sCisJLm0xID0geyAubWluID0gMTgsIC5tYXggPSAyNiB9LAorCS5tMiA9 IHsgLm1pbiA9IDYsIC5tYXggPSAxNiB9LAorCS5wID0geyAubWluID0gNCwgLm1heCA9IDEyOCB9 LAorCS5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSAzMyB9LAorCS5wMiA9IHsgLmRvdF9saW1pdCA9 IDE2NTAwMCwKKwkJLnAyX3Nsb3cgPSA0LCAucDJfZmFzdCA9IDQgfSwKK307CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaW50ZWxfbGltaXRzX2k4eHhfbHZkcyA9IHsKKwkuZG90 ID0geyAubWluID0gMjUwMDAsIC5tYXggPSAzNTAwMDAgfSwKKwkudmNvID0geyAubWluID0gOTA4 MDAwLCAubWF4ID0gMTUxMjAwMCB9LAorCS5uID0geyAubWluID0gMiwgLm1heCA9IDE2IH0sCisJ Lm0gPSB7IC5taW4gPSA5NiwgLm1heCA9IDE0MCB9LAorCS5tMSA9IHsgLm1pbiA9IDE4LCAubWF4 ID0gMjYgfSwKKwkubTIgPSB7IC5taW4gPSA2LCAubWF4ID0gMTYgfSwKKwkucCA9IHsgLm1pbiA9 IDQsIC5tYXggPSAxMjggfSwKKwkucDEgPSB7IC5taW4gPSAxLCAubWF4ID0gNiB9LAorCS5wMiA9 IHsgLmRvdF9saW1pdCA9IDE2NTAwMCwKKwkJLnAyX3Nsb3cgPSAxNCwgLnAyX2Zhc3QgPSA3IH0s Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGludGVsX2xpbWl0c19pOXh4 X3Nkdm8gPSB7CisJLmRvdCA9IHsgLm1pbiA9IDIwMDAwLCAubWF4ID0gNDAwMDAwIH0sCisJLnZj byA9IHsgLm1pbiA9IDE0MDAwMDAsIC5tYXggPSAyODAwMDAwIH0sCisJLm4gPSB7IC5taW4gPSAx LCAubWF4ID0gNiB9LAorCS5tID0geyAubWluID0gNzAsIC5tYXggPSAxMjAgfSwKKwkubTEgPSB7 IC5taW4gPSA4LCAubWF4ID0gMTggfSwKKwkubTIgPSB7IC5taW4gPSAzLCAubWF4ID0gNyB9LAor CS5wID0geyAubWluID0gNSwgLm1heCA9IDgwIH0sCisJLnAxID0geyAubWluID0gMSwgLm1heCA9 IDggfSwKKwkucDIgPSB7IC5kb3RfbGltaXQgPSAyMDAwMDAsCisJCS5wMl9zbG93ID0gMTAsIC5w Ml9mYXN0ID0gNSB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbnRl bF9saW1pdHNfaTl4eF9sdmRzID0geworCS5kb3QgPSB7IC5taW4gPSAyMDAwMCwgLm1heCA9IDQw MDAwMCB9LAorCS52Y28gPSB7IC5taW4gPSAxNDAwMDAwLCAubWF4ID0gMjgwMDAwMCB9LAorCS5u ID0geyAubWluID0gMSwgLm1heCA9IDYgfSwKKwkubSA9IHsgLm1pbiA9IDcwLCAubWF4ID0gMTIw IH0sCisJLm0xID0geyAubWluID0gOCwgLm1heCA9IDE4IH0sCisJLm0yID0geyAubWluID0gMywg Lm1heCA9IDcgfSwKKwkucCA9IHsgLm1pbiA9IDcsIC5tYXggPSA5OCB9LAorCS5wMSA9IHsgLm1p biA9IDEsIC5tYXggPSA4IH0sCisJLnAyID0geyAuZG90X2xpbWl0ID0gMTEyMDAwLAorCQkucDJf c2xvdyA9IDE0LCAucDJfZmFzdCA9IDcgfSwKK307CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBp bnRlbF9saW1pdCBpbnRlbF9saW1pdHNfZzR4X3Nkdm8gPSB7CisJLmRvdCA9IHsgLm1pbiA9IDI1 MDAwLCAubWF4ID0gMjcwMDAwIH0sCisJLnZjbyA9IHsgLm1pbiA9IDE3NTAwMDAsIC5tYXggPSAz NTAwMDAwfSwKKwkubiA9IHsgLm1pbiA9IDEsIC5tYXggPSA0IH0sCisJLm0gPSB7IC5taW4gPSAx MDQsIC5tYXggPSAxMzggfSwKKwkubTEgPSB7IC5taW4gPSAxNywgLm1heCA9IDIzIH0sCisJLm0y ID0geyAubWluID0gNSwgLm1heCA9IDExIH0sCisJLnAgPSB7IC5taW4gPSAxMCwgLm1heCA9IDMw IH0sCisJLnAxID0geyAubWluID0gMSwgLm1heCA9IDN9LAorCS5wMiA9IHsgLmRvdF9saW1pdCA9 IDI3MDAwMCwKKwkJLnAyX3Nsb3cgPSAxMCwKKwkJLnAyX2Zhc3QgPSAxMAorCX0sCit9OworCitz dGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGludGVsX2xpbWl0c19nNHhfaGRtaSA9IHsK KwkuZG90ID0geyAubWluID0gMjIwMDAsIC5tYXggPSA0MDAwMDAgfSwKKwkudmNvID0geyAubWlu ID0gMTc1MDAwMCwgLm1heCA9IDM1MDAwMDB9LAorCS5uID0geyAubWluID0gMSwgLm1heCA9IDQg fSwKKwkubSA9IHsgLm1pbiA9IDEwNCwgLm1heCA9IDEzOCB9LAorCS5tMSA9IHsgLm1pbiA9IDE2 LCAubWF4ID0gMjMgfSwKKwkubTIgPSB7IC5taW4gPSA1LCAubWF4ID0gMTEgfSwKKwkucCA9IHsg Lm1pbiA9IDUsIC5tYXggPSA4MCB9LAorCS5wMSA9IHsgLm1pbiA9IDEsIC5tYXggPSA4fSwKKwku cDIgPSB7IC5kb3RfbGltaXQgPSAxNjUwMDAsCisJCS5wMl9zbG93ID0gMTAsIC5wMl9mYXN0ID0g NSB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbnRlbF9saW1pdHNf ZzR4X3NpbmdsZV9jaGFubmVsX2x2ZHMgPSB7CisJLmRvdCA9IHsgLm1pbiA9IDIwMDAwLCAubWF4 ID0gMTE1MDAwIH0sCisJLnZjbyA9IHsgLm1pbiA9IDE3NTAwMDAsIC5tYXggPSAzNTAwMDAwIH0s CisJLm4gPSB7IC5taW4gPSAxLCAubWF4ID0gMyB9LAorCS5tID0geyAubWluID0gMTA0LCAubWF4 ID0gMTM4IH0sCisJLm0xID0geyAubWluID0gMTcsIC5tYXggPSAyMyB9LAorCS5tMiA9IHsgLm1p biA9IDUsIC5tYXggPSAxMSB9LAorCS5wID0geyAubWluID0gMjgsIC5tYXggPSAxMTIgfSwKKwku cDEgPSB7IC5taW4gPSAyLCAubWF4ID0gOCB9LAorCS5wMiA9IHsgLmRvdF9saW1pdCA9IDAsCisJ CS5wMl9zbG93ID0gMTQsIC5wMl9mYXN0ID0gMTQKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0 cnVjdCBpbnRlbF9saW1pdCBpbnRlbF9saW1pdHNfZzR4X2R1YWxfY2hhbm5lbF9sdmRzID0gewor CS5kb3QgPSB7IC5taW4gPSA4MDAwMCwgLm1heCA9IDIyNDAwMCB9LAorCS52Y28gPSB7IC5taW4g PSAxNzUwMDAwLCAubWF4ID0gMzUwMDAwMCB9LAorCS5uID0geyAubWluID0gMSwgLm1heCA9IDMg fSwKKwkubSA9IHsgLm1pbiA9IDEwNCwgLm1heCA9IDEzOCB9LAorCS5tMSA9IHsgLm1pbiA9IDE3 LCAubWF4ID0gMjMgfSwKKwkubTIgPSB7IC5taW4gPSA1LCAubWF4ID0gMTEgfSwKKwkucCA9IHsg Lm1pbiA9IDE0LCAubWF4ID0gNDIgfSwKKwkucDEgPSB7IC5taW4gPSAyLCAubWF4ID0gNiB9LAor CS5wMiA9IHsgLmRvdF9saW1pdCA9IDAsCisJCS5wMl9zbG93ID0gNywgLnAyX2Zhc3QgPSA3CisJ fSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgcG52X2xpbWl0c19zZHZv ID0geworCS5kb3QgPSB7IC5taW4gPSAyMDAwMCwgLm1heCA9IDQwMDAwMH0sCisJLnZjbyA9IHsg Lm1pbiA9IDE3MDAwMDAsIC5tYXggPSAzNTAwMDAwIH0sCisJLyogUGluZXZpZXcncyBOY291bnRl ciBpcyBhIHJpbmcgY291bnRlciAqLworCS5uID0geyAubWluID0gMywgLm1heCA9IDYgfSwKKwku bSA9IHsgLm1pbiA9IDIsIC5tYXggPSAyNTYgfSwKKwkvKiBQaW5ldmlldyBvbmx5IGhhcyBvbmUg Y29tYmluZWQgbSBkaXZpZGVyLCB3aGljaCB3ZSB0cmVhdCBhcyBtMi4gKi8KKwkubTEgPSB7IC5t aW4gPSAwLCAubWF4ID0gMCB9LAorCS5tMiA9IHsgLm1pbiA9IDAsIC5tYXggPSAyNTQgfSwKKwku cCA9IHsgLm1pbiA9IDUsIC5tYXggPSA4MCB9LAorCS5wMSA9IHsgLm1pbiA9IDEsIC5tYXggPSA4 IH0sCisJLnAyID0geyAuZG90X2xpbWl0ID0gMjAwMDAwLAorCQkucDJfc2xvdyA9IDEwLCAucDJf ZmFzdCA9IDUgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgcG52X2xp bWl0c19sdmRzID0geworCS5kb3QgPSB7IC5taW4gPSAyMDAwMCwgLm1heCA9IDQwMDAwMCB9LAor CS52Y28gPSB7IC5taW4gPSAxNzAwMDAwLCAubWF4ID0gMzUwMDAwMCB9LAorCS5uID0geyAubWlu ID0gMywgLm1heCA9IDYgfSwKKwkubSA9IHsgLm1pbiA9IDIsIC5tYXggPSAyNTYgfSwKKwkubTEg PSB7IC5taW4gPSAwLCAubWF4ID0gMCB9LAorCS5tMiA9IHsgLm1pbiA9IDAsIC5tYXggPSAyNTQg fSwKKwkucCA9IHsgLm1pbiA9IDcsIC5tYXggPSAxMTIgfSwKKwkucDEgPSB7IC5taW4gPSAxLCAu bWF4ID0gOCB9LAorCS5wMiA9IHsgLmRvdF9saW1pdCA9IDExMjAwMCwKKwkJLnAyX3Nsb3cgPSAx NCwgLnAyX2Zhc3QgPSAxNCB9LAorfTsKKworLyogSXJvbmxha2UgLyBTYW5keWJyaWRnZQorICoK KyAqIFdlIGNhbGN1bGF0ZSBjbG9jayB1c2luZyAocmVnaXN0ZXJfdmFsdWUgKyAyKSBmb3IgTi9N MS9NMiwgc28gaGVyZQorICogdGhlIHJhbmdlIHZhbHVlIGZvciB0aGVtIGlzIChhY3R1YWxfdmFs dWUgLSAyKS4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbGtfbGltaXRz X2RhYyA9IHsKKwkuZG90ID0geyAubWluID0gMjUwMDAsIC5tYXggPSAzNTAwMDAgfSwKKwkudmNv ID0geyAubWluID0gMTc2MDAwMCwgLm1heCA9IDM1MTAwMDAgfSwKKwkubiA9IHsgLm1pbiA9IDEs IC5tYXggPSA1IH0sCisJLm0gPSB7IC5taW4gPSA3OSwgLm1heCA9IDEyNyB9LAorCS5tMSA9IHsg Lm1pbiA9IDEyLCAubWF4ID0gMjIgfSwKKwkubTIgPSB7IC5taW4gPSA1LCAubWF4ID0gOSB9LAor CS5wID0geyAubWluID0gNSwgLm1heCA9IDgwIH0sCisJLnAxID0geyAubWluID0gMSwgLm1heCA9 IDggfSwKKwkucDIgPSB7IC5kb3RfbGltaXQgPSAyMjUwMDAsCisJCS5wMl9zbG93ID0gMTAsIC5w Ml9mYXN0ID0gNSB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbGtf bGltaXRzX3NpbmdsZV9sdmRzID0geworCS5kb3QgPSB7IC5taW4gPSAyNTAwMCwgLm1heCA9IDM1 MDAwMCB9LAorCS52Y28gPSB7IC5taW4gPSAxNzYwMDAwLCAubWF4ID0gMzUxMDAwMCB9LAorCS5u ID0geyAubWluID0gMSwgLm1heCA9IDMgfSwKKwkubSA9IHsgLm1pbiA9IDc5LCAubWF4ID0gMTE4 IH0sCisJLm0xID0geyAubWluID0gMTIsIC5tYXggPSAyMiB9LAorCS5tMiA9IHsgLm1pbiA9IDUs IC5tYXggPSA5IH0sCisJLnAgPSB7IC5taW4gPSAyOCwgLm1heCA9IDExMiB9LAorCS5wMSA9IHsg Lm1pbiA9IDIsIC5tYXggPSA4IH0sCisJLnAyID0geyAuZG90X2xpbWl0ID0gMjI1MDAwLAorCQku cDJfc2xvdyA9IDE0LCAucDJfZmFzdCA9IDE0IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0 IGludGVsX2xpbWl0IGlsa19saW1pdHNfZHVhbF9sdmRzID0geworCS5kb3QgPSB7IC5taW4gPSAy NTAwMCwgLm1heCA9IDM1MDAwMCB9LAorCS52Y28gPSB7IC5taW4gPSAxNzYwMDAwLCAubWF4ID0g MzUxMDAwMCB9LAorCS5uID0geyAubWluID0gMSwgLm1heCA9IDMgfSwKKwkubSA9IHsgLm1pbiA9 IDc5LCAubWF4ID0gMTI3IH0sCisJLm0xID0geyAubWluID0gMTIsIC5tYXggPSAyMiB9LAorCS5t MiA9IHsgLm1pbiA9IDUsIC5tYXggPSA5IH0sCisJLnAgPSB7IC5taW4gPSAxNCwgLm1heCA9IDU2 IH0sCisJLnAxID0geyAubWluID0gMiwgLm1heCA9IDggfSwKKwkucDIgPSB7IC5kb3RfbGltaXQg PSAyMjUwMDAsCisJCS5wMl9zbG93ID0gNywgLnAyX2Zhc3QgPSA3IH0sCit9OworCisvKiBMVkRT IDEwMG1oeiByZWZjbGsgbGltaXRzLiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1p dCBpbGtfbGltaXRzX3NpbmdsZV9sdmRzXzEwMG0gPSB7CisJLmRvdCA9IHsgLm1pbiA9IDI1MDAw LCAubWF4ID0gMzUwMDAwIH0sCisJLnZjbyA9IHsgLm1pbiA9IDE3NjAwMDAsIC5tYXggPSAzNTEw MDAwIH0sCisJLm4gPSB7IC5taW4gPSAxLCAubWF4ID0gMiB9LAorCS5tID0geyAubWluID0gNzks IC5tYXggPSAxMjYgfSwKKwkubTEgPSB7IC5taW4gPSAxMiwgLm1heCA9IDIyIH0sCisJLm0yID0g eyAubWluID0gNSwgLm1heCA9IDkgfSwKKwkucCA9IHsgLm1pbiA9IDI4LCAubWF4ID0gMTEyIH0s CisJLnAxID0geyAubWluID0gMiwgLm1heCA9IDggfSwKKwkucDIgPSB7IC5kb3RfbGltaXQgPSAy MjUwMDAsCisJCS5wMl9zbG93ID0gMTQsIC5wMl9mYXN0ID0gMTQgfSwKK307CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaWxrX2xpbWl0c19kdWFsX2x2ZHNfMTAwbSA9IHsKKwku ZG90ID0geyAubWluID0gMjUwMDAsIC5tYXggPSAzNTAwMDAgfSwKKwkudmNvID0geyAubWluID0g MTc2MDAwMCwgLm1heCA9IDM1MTAwMDAgfSwKKwkubiA9IHsgLm1pbiA9IDEsIC5tYXggPSAzIH0s CisJLm0gPSB7IC5taW4gPSA3OSwgLm1heCA9IDEyNiB9LAorCS5tMSA9IHsgLm1pbiA9IDEyLCAu bWF4ID0gMjIgfSwKKwkubTIgPSB7IC5taW4gPSA1LCAubWF4ID0gOSB9LAorCS5wID0geyAubWlu ID0gMTQsIC5tYXggPSA0MiB9LAorCS5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSA2IH0sCisJLnAy ID0geyAuZG90X2xpbWl0ID0gMjI1MDAwLAorCQkucDJfc2xvdyA9IDcsIC5wMl9mYXN0ID0gNyB9 LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbnRlbF9saW1pdHNfdmx2 ID0geworCSAvKgorCSAgKiBUaGVzZSBhcmUgdGhlIGRhdGEgcmF0ZSBsaW1pdHMgKG1lYXN1cmVk IGluIGZhc3QgY2xvY2tzKQorCSAgKiBzaW5jZSB0aG9zZSBhcmUgdGhlIHN0cmljdGVzdCBsaW1p dHMgd2UgaGF2ZS4gVGhlIGZhc3QKKwkgICogY2xvY2sgYW5kIGFjdHVhbCByYXRlIGxpbWl0cyBh cmUgbW9yZSByZWxheGVkLCBzbyBjaGVja2luZworCSAgKiB0aGVtIHdvdWxkIG1ha2Ugbm8gZGlm ZmVyZW5jZS4KKwkgICovCisJLmRvdCA9IHsgLm1pbiA9IDI1MDAwICogNSwgLm1heCA9IDI3MDAw MCAqIDUgfSwKKwkudmNvID0geyAubWluID0gNDAwMDAwMCwgLm1heCA9IDYwMDAwMDAgfSwKKwku biA9IHsgLm1pbiA9IDEsIC5tYXggPSA3IH0sCisJLm0xID0geyAubWluID0gMiwgLm1heCA9IDMg fSwKKwkubTIgPSB7IC5taW4gPSAxMSwgLm1heCA9IDE1NiB9LAorCS5wMSA9IHsgLm1pbiA9IDIs IC5tYXggPSAzIH0sCisJLnAyID0geyAucDJfc2xvdyA9IDIsIC5wMl9mYXN0ID0gMjAgfSwgLyog c2xvdz1taW4sIGZhc3Q9bWF4ICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xp bWl0IGludGVsX2xpbWl0c19jaHYgPSB7CisJLyoKKwkgKiBUaGVzZSBhcmUgdGhlIGRhdGEgcmF0 ZSBsaW1pdHMgKG1lYXN1cmVkIGluIGZhc3QgY2xvY2tzKQorCSAqIHNpbmNlIHRob3NlIGFyZSB0 aGUgc3RyaWN0ZXN0IGxpbWl0cyB3ZSBoYXZlLiAgVGhlIGZhc3QKKwkgKiBjbG9jayBhbmQgYWN0 dWFsIHJhdGUgbGltaXRzIGFyZSBtb3JlIHJlbGF4ZWQsIHNvIGNoZWNraW5nCisJICogdGhlbSB3 b3VsZCBtYWtlIG5vIGRpZmZlcmVuY2UuCisJICovCisJLmRvdCA9IHsgLm1pbiA9IDI1MDAwICog NSwgLm1heCA9IDU0MDAwMCAqIDV9LAorCS52Y28gPSB7IC5taW4gPSA0ODAwMDAwLCAubWF4ID0g NjQ4MDAwMCB9LAorCS5uID0geyAubWluID0gMSwgLm1heCA9IDEgfSwKKwkubTEgPSB7IC5taW4g PSAyLCAubWF4ID0gMiB9LAorCS5tMiA9IHsgLm1pbiA9IDI0IDw8IDIyLCAubWF4ID0gMTc1IDw8 IDIyIH0sCisJLnAxID0geyAubWluID0gMiwgLm1heCA9IDQgfSwKKwkucDIgPSB7CS5wMl9zbG93 ID0gMSwgLnAyX2Zhc3QgPSAxNCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9s aW1pdCBpbnRlbF9saW1pdHNfYnh0ID0geworCS8qIEZJWE1FOiBmaW5kIHJlYWwgZG90IGxpbWl0 cyAqLworCS5kb3QgPSB7IC5taW4gPSAwLCAubWF4ID0gSU5UX01BWCB9LAorCS52Y28gPSB7IC5t aW4gPSA0ODAwMDAwLCAubWF4ID0gNjcwMDAwMCB9LAorCS5uID0geyAubWluID0gMSwgLm1heCA9 IDEgfSwKKwkubTEgPSB7IC5taW4gPSAyLCAubWF4ID0gMiB9LAorCS8qIEZJWE1FOiBmaW5kIHJl YWwgbTIgbGltaXRzICovCisJLm0yID0geyAubWluID0gMiA8PCAyMiwgLm1heCA9IDI1NSA8PCAy MiB9LAorCS5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSA0IH0sCisJLnAyID0geyAucDJfc2xvdyA9 IDEsIC5wMl9mYXN0ID0gMjAgfSwKK307CisKKy8qCisgKiBQbGF0Zm9ybSBzcGVjaWZpYyBoZWxw ZXJzIHRvIGNhbGN1bGF0ZSB0aGUgcG9ydCBQTEwgbG9vcGJhY2stIChjbG9jay5tKSwKKyAqIGFu ZCBwb3N0LWRpdmlkZXIgKGNsb2NrLnApIHZhbHVlcywgcHJlLSAoY2xvY2sudmNvKSBhbmQgcG9z dC1kaXZpZGVkIGZhc3QKKyAqIChjbG9jay5kb3QpIGNsb2NrIHJhdGVzLiBUaGlzIGZhc3QgZG90 IGNsb2NrIGlzIGZlZCB0byB0aGUgcG9ydCdzIElPIGxvZ2ljLgorICogVGhlIGhlbHBlcnMnIHJl dHVybiB2YWx1ZSBpcyB0aGUgcmF0ZSBvZiB0aGUgY2xvY2sgdGhhdCBpcyBmZWQgdG8gdGhlCisg KiBkaXNwbGF5IGVuZ2luZSdzIHBpcGUgd2hpY2ggY2FuIGJlIHRoZSBhYm92ZSBmYXN0IGRvdCBj bG9jayByYXRlIG9yIGEKKyAqIGRpdmlkZWQtZG93biB2ZXJzaW9uIG9mIGl0LgorICovCisvKiBt MSBpcyByZXNlcnZlZCBhcyAwIGluIFBpbmV2aWV3LCBuIGlzIGEgcmluZyBjb3VudGVyICovCitp bnQgcG52X2NhbGNfZHBsbF9wYXJhbXMoaW50IHJlZmNsaywgc3RydWN0IGRwbGwgKmNsb2NrKQor eworCWNsb2NrLT5tID0gY2xvY2stPm0yICsgMjsKKwljbG9jay0+cCA9IGNsb2NrLT5wMSAqIGNs b2NrLT5wMjsKKwlpZiAoV0FSTl9PTihjbG9jay0+biA9PSAwIHx8IGNsb2NrLT5wID09IDApKQor CQlyZXR1cm4gMDsKKwljbG9jay0+dmNvID0gRElWX1JPVU5EX0NMT1NFU1QocmVmY2xrICogY2xv Y2stPm0sIGNsb2NrLT5uKTsKKwljbG9jay0+ZG90ID0gRElWX1JPVU5EX0NMT1NFU1QoY2xvY2st PnZjbywgY2xvY2stPnApOworCisJcmV0dXJuIGNsb2NrLT5kb3Q7Cit9CisKK3N0YXRpYyB1MzIg aTl4eF9kcGxsX2NvbXB1dGVfbShzdHJ1Y3QgZHBsbCAqZHBsbCkKK3sKKwlyZXR1cm4gNSAqIChk cGxsLT5tMSArIDIpICsgKGRwbGwtPm0yICsgMik7Cit9CisKK2ludCBpOXh4X2NhbGNfZHBsbF9w YXJhbXMoaW50IHJlZmNsaywgc3RydWN0IGRwbGwgKmNsb2NrKQoreworCWNsb2NrLT5tID0gaTl4 eF9kcGxsX2NvbXB1dGVfbShjbG9jayk7CisJY2xvY2stPnAgPSBjbG9jay0+cDEgKiBjbG9jay0+ cDI7CisJaWYgKFdBUk5fT04oY2xvY2stPm4gKyAyID09IDAgfHwgY2xvY2stPnAgPT0gMCkpCisJ CXJldHVybiAwOworCWNsb2NrLT52Y28gPSBESVZfUk9VTkRfQ0xPU0VTVChyZWZjbGsgKiBjbG9j ay0+bSwgY2xvY2stPm4gKyAyKTsKKwljbG9jay0+ZG90ID0gRElWX1JPVU5EX0NMT1NFU1QoY2xv Y2stPnZjbywgY2xvY2stPnApOworCisJcmV0dXJuIGNsb2NrLT5kb3Q7Cit9CisKK2ludCB2bHZf Y2FsY19kcGxsX3BhcmFtcyhpbnQgcmVmY2xrLCBzdHJ1Y3QgZHBsbCAqY2xvY2spCit7CisJY2xv Y2stPm0gPSBjbG9jay0+bTEgKiBjbG9jay0+bTI7CisJY2xvY2stPnAgPSBjbG9jay0+cDEgKiBj bG9jay0+cDI7CisJaWYgKFdBUk5fT04oY2xvY2stPm4gPT0gMCB8fCBjbG9jay0+cCA9PSAwKSkK KwkJcmV0dXJuIDA7CisJY2xvY2stPnZjbyA9IERJVl9ST1VORF9DTE9TRVNUKHJlZmNsayAqIGNs b2NrLT5tLCBjbG9jay0+bik7CisJY2xvY2stPmRvdCA9IERJVl9ST1VORF9DTE9TRVNUKGNsb2Nr LT52Y28sIGNsb2NrLT5wKTsKKworCXJldHVybiBjbG9jay0+ZG90IC8gNTsKK30KKworaW50IGNo dl9jYWxjX2RwbGxfcGFyYW1zKGludCByZWZjbGssIHN0cnVjdCBkcGxsICpjbG9jaykKK3sKKwlj bG9jay0+bSA9IGNsb2NrLT5tMSAqIGNsb2NrLT5tMjsKKwljbG9jay0+cCA9IGNsb2NrLT5wMSAq IGNsb2NrLT5wMjsKKwlpZiAoV0FSTl9PTihjbG9jay0+biA9PSAwIHx8IGNsb2NrLT5wID09IDAp KQorCQlyZXR1cm4gMDsKKwljbG9jay0+dmNvID0gRElWX1JPVU5EX0NMT1NFU1RfVUxMKG11bF91 MzJfdTMyKHJlZmNsaywgY2xvY2stPm0pLAorCQkJCQkgICBjbG9jay0+biA8PCAyMik7CisJY2xv Y2stPmRvdCA9IERJVl9ST1VORF9DTE9TRVNUKGNsb2NrLT52Y28sIGNsb2NrLT5wKTsKKworCXJl dHVybiBjbG9jay0+ZG90IC8gNTsKK30KKworLyoKKyAqIFJldHVybnMgd2hldGhlciB0aGUgZ2l2 ZW4gc2V0IG9mIGRpdmlzb3JzIGFyZSB2YWxpZCBmb3IgYSBnaXZlbiByZWZjbGsgd2l0aAorICog dGhlIGdpdmVuIGNvbm5lY3RvcnMuCisgKi8KK3N0YXRpYyBib29sIGludGVsX3BsbF9pc192YWxp ZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgICAgICAgY29uc3Qgc3Ry dWN0IGludGVsX2xpbWl0ICpsaW1pdCwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZHBsbCAqY2xv Y2spCit7CisJaWYgKGNsb2NrLT5uIDwgbGltaXQtPm4ubWluIHx8IGxpbWl0LT5uLm1heCA8IGNs b2NrLT5uKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKGNsb2NrLT5wMSA8IGxpbWl0LT5wMS5taW4g fHwgbGltaXQtPnAxLm1heCA8IGNsb2NrLT5wMSkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChjbG9j ay0+bTIgPCBsaW1pdC0+bTIubWluIHx8IGxpbWl0LT5tMi5tYXggPCBjbG9jay0+bTIpCisJCXJl dHVybiBmYWxzZTsKKwlpZiAoY2xvY2stPm0xIDwgbGltaXQtPm0xLm1pbiB8fCBsaW1pdC0+bTEu bWF4IDwgY2xvY2stPm0xKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIUlTX1BJTkVWSUVXKGRl dl9wcml2KSAmJiAhSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgJiYKKwkgICAgIUlTX0NIRVJSWVZJ RVcoZGV2X3ByaXYpICYmICFJU19HRU45X0xQKGRldl9wcml2KSkKKwkJaWYgKGNsb2NrLT5tMSA8 PSBjbG9jay0+bTIpCisJCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIUlTX1ZBTExFWVZJRVcoZGV2 X3ByaXYpICYmICFJU19DSEVSUllWSUVXKGRldl9wcml2KSAmJgorCSAgICAhSVNfR0VOOV9MUChk ZXZfcHJpdikpIHsKKwkJaWYgKGNsb2NrLT5wIDwgbGltaXQtPnAubWluIHx8IGxpbWl0LT5wLm1h eCA8IGNsb2NrLT5wKQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAoY2xvY2stPm0gPCBsaW1pdC0+ bS5taW4gfHwgbGltaXQtPm0ubWF4IDwgY2xvY2stPm0pCisJCQlyZXR1cm4gZmFsc2U7CisJfQor CisJaWYgKGNsb2NrLT52Y28gPCBsaW1pdC0+dmNvLm1pbiB8fCBsaW1pdC0+dmNvLm1heCA8IGNs b2NrLT52Y28pCisJCXJldHVybiBmYWxzZTsKKwkvKiBYWFg6IFdlIG1heSBuZWVkIHRvIGJlIGNo ZWNraW5nICJEb3QgY2xvY2siIGRlcGVuZGluZyBvbiB0aGUgbXVsdGlwbGllciwKKwkgKiBjb25u ZWN0b3IsIGV0Yy4sIHJhdGhlciB0aGFuIGp1c3QgYSBzaW5nbGUgcmFuZ2UuCisJICovCisJaWYg KGNsb2NrLT5kb3QgPCBsaW1pdC0+ZG90Lm1pbiB8fCBsaW1pdC0+ZG90Lm1heCA8IGNsb2NrLT5k b3QpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50Citp OXh4X3NlbGVjdF9wMl9kaXYoY29uc3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1pdCwKKwkJICAg Y29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCSAgIGludCB0YXJn ZXQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRj X3N0YXRlLT51YXBpLmNydGMtPmRldik7CisKKwlpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRj X3N0YXRlLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsKKwkJLyoKKwkJICogRm9yIExWRFMganVzdCBy ZWx5IG9uIGl0cyBjdXJyZW50IHNldHRpbmdzIGZvciBkdWFsLWNoYW5uZWwuCisJCSAqIFdlIGhh dmVuJ3QgZmlndXJlZCBvdXQgaG93IHRvIHJlbGlhYmx5IHNldCB1cCBkaWZmZXJlbnQKKwkJICog c2luZ2xlL2R1YWwgY2hhbm5lbCBzdGF0ZSwgaWYgd2UgZXZlbiBjYW4uCisJCSAqLworCQlpZiAo aW50ZWxfaXNfZHVhbF9saW5rX2x2ZHMoZGV2X3ByaXYpKQorCQkJcmV0dXJuIGxpbWl0LT5wMi5w Ml9mYXN0OworCQllbHNlCisJCQlyZXR1cm4gbGltaXQtPnAyLnAyX3Nsb3c7CisJfSBlbHNlIHsK KwkJaWYgKHRhcmdldCA8IGxpbWl0LT5wMi5kb3RfbGltaXQpCisJCQlyZXR1cm4gbGltaXQtPnAy LnAyX3Nsb3c7CisJCWVsc2UKKwkJCXJldHVybiBsaW1pdC0+cDIucDJfZmFzdDsKKwl9Cit9CisK Ky8qCisgKiBSZXR1cm5zIGEgc2V0IG9mIGRpdmlzb3JzIGZvciB0aGUgZGVzaXJlZCB0YXJnZXQg Y2xvY2sgd2l0aCB0aGUgZ2l2ZW4KKyAqIHJlZmNsaywgb3IgRkFMU0UuICBUaGUgcmV0dXJuZWQg dmFsdWVzIHJlcHJlc2VudCB0aGUgY2xvY2sgZXF1YXRpb246CisgKiByZWZsY2sgKiAoNSAqICht MSArIDIpICsgKG0yICsgMikpIC8gKG4gKyAyKSAvIHAxIC8gcDIuCisgKgorICogVGFyZ2V0IGFu ZCByZWZlcmVuY2UgY2xvY2tzIGFyZSBzcGVjaWZpZWQgaW4ga0h6LgorICoKKyAqIElmIG1hdGNo X2Nsb2NrIGlzIHByb3ZpZGVkLCB0aGVuIGJlc3RfY2xvY2sgUCBkaXZpZGVyIG11c3QgbWF0Y2gg dGhlIFAKKyAqIGRpdmlkZXIgZnJvbSBAbWF0Y2hfY2xvY2sgdXNlZCBmb3IgTFZEUyBkb3duY2xv Y2tpbmcuCisgKi8KK3N0YXRpYyBib29sCitpOXh4X2ZpbmRfYmVzdF9kcGxsKGNvbnN0IHN0cnVj dCBpbnRlbF9saW1pdCAqbGltaXQsCisJCSAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSwKKwkJICAgIGludCB0YXJnZXQsIGludCByZWZjbGssIHN0cnVjdCBkcGxsICptYXRj aF9jbG9jaywKKwkJICAgIHN0cnVjdCBkcGxsICpiZXN0X2Nsb2NrKQoreworCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBjcnRjX3N0YXRlLT51YXBpLmNydGMtPmRldjsKKwlzdHJ1Y3QgZHBsbCBj bG9jazsKKwlpbnQgZXJyID0gdGFyZ2V0OworCisJbWVtc2V0KGJlc3RfY2xvY2ssIDAsIHNpemVv ZigqYmVzdF9jbG9jaykpOworCisJY2xvY2sucDIgPSBpOXh4X3NlbGVjdF9wMl9kaXYobGltaXQs IGNydGNfc3RhdGUsIHRhcmdldCk7CisKKwlmb3IgKGNsb2NrLm0xID0gbGltaXQtPm0xLm1pbjsg Y2xvY2subTEgPD0gbGltaXQtPm0xLm1heDsKKwkgICAgIGNsb2NrLm0xKyspIHsKKwkJZm9yIChj bG9jay5tMiA9IGxpbWl0LT5tMi5taW47CisJCSAgICAgY2xvY2subTIgPD0gbGltaXQtPm0yLm1h eDsgY2xvY2subTIrKykgeworCQkJaWYgKGNsb2NrLm0yID49IGNsb2NrLm0xKQorCQkJCWJyZWFr OworCQkJZm9yIChjbG9jay5uID0gbGltaXQtPm4ubWluOworCQkJICAgICBjbG9jay5uIDw9IGxp bWl0LT5uLm1heDsgY2xvY2subisrKSB7CisJCQkJZm9yIChjbG9jay5wMSA9IGxpbWl0LT5wMS5t aW47CisJCQkJCWNsb2NrLnAxIDw9IGxpbWl0LT5wMS5tYXg7IGNsb2NrLnAxKyspIHsKKwkJCQkJ aW50IHRoaXNfZXJyOworCisJCQkJCWk5eHhfY2FsY19kcGxsX3BhcmFtcyhyZWZjbGssICZjbG9j ayk7CisJCQkJCWlmICghaW50ZWxfcGxsX2lzX3ZhbGlkKHRvX2k5MTUoZGV2KSwKKwkJCQkJCQkJ bGltaXQsCisJCQkJCQkJCSZjbG9jaykpCisJCQkJCQljb250aW51ZTsKKwkJCQkJaWYgKG1hdGNo X2Nsb2NrICYmCisJCQkJCSAgICBjbG9jay5wICE9IG1hdGNoX2Nsb2NrLT5wKQorCQkJCQkJY29u dGludWU7CisKKwkJCQkJdGhpc19lcnIgPSBhYnMoY2xvY2suZG90IC0gdGFyZ2V0KTsKKwkJCQkJ aWYgKHRoaXNfZXJyIDwgZXJyKSB7CisJCQkJCQkqYmVzdF9jbG9jayA9IGNsb2NrOworCQkJCQkJ ZXJyID0gdGhpc19lcnI7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4g KGVyciAhPSB0YXJnZXQpOworfQorCisvKgorICogUmV0dXJucyBhIHNldCBvZiBkaXZpc29ycyBm b3IgdGhlIGRlc2lyZWQgdGFyZ2V0IGNsb2NrIHdpdGggdGhlIGdpdmVuCisgKiByZWZjbGssIG9y IEZBTFNFLiAgVGhlIHJldHVybmVkIHZhbHVlcyByZXByZXNlbnQgdGhlIGNsb2NrIGVxdWF0aW9u OgorICogcmVmbGNrICogKDUgKiAobTEgKyAyKSArIChtMiArIDIpKSAvIChuICsgMikgLyBwMSAv IHAyLgorICoKKyAqIFRhcmdldCBhbmQgcmVmZXJlbmNlIGNsb2NrcyBhcmUgc3BlY2lmaWVkIGlu IGtIei4KKyAqCisgKiBJZiBtYXRjaF9jbG9jayBpcyBwcm92aWRlZCwgdGhlbiBiZXN0X2Nsb2Nr IFAgZGl2aWRlciBtdXN0IG1hdGNoIHRoZSBQCisgKiBkaXZpZGVyIGZyb20gQG1hdGNoX2Nsb2Nr IHVzZWQgZm9yIExWRFMgZG93bmNsb2NraW5nLgorICovCitzdGF0aWMgYm9vbAorcG52X2ZpbmRf YmVzdF9kcGxsKGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQsCisJCSAgIHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkgICBpbnQgdGFyZ2V0LCBpbnQgcmVmY2xr LCBzdHJ1Y3QgZHBsbCAqbWF0Y2hfY2xvY2ssCisJCSAgIHN0cnVjdCBkcGxsICpiZXN0X2Nsb2Nr KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjX3N0YXRlLT51YXBpLmNydGMtPmRl djsKKwlzdHJ1Y3QgZHBsbCBjbG9jazsKKwlpbnQgZXJyID0gdGFyZ2V0OworCisJbWVtc2V0KGJl c3RfY2xvY2ssIDAsIHNpemVvZigqYmVzdF9jbG9jaykpOworCisJY2xvY2sucDIgPSBpOXh4X3Nl bGVjdF9wMl9kaXYobGltaXQsIGNydGNfc3RhdGUsIHRhcmdldCk7CisKKwlmb3IgKGNsb2NrLm0x ID0gbGltaXQtPm0xLm1pbjsgY2xvY2subTEgPD0gbGltaXQtPm0xLm1heDsKKwkgICAgIGNsb2Nr Lm0xKyspIHsKKwkJZm9yIChjbG9jay5tMiA9IGxpbWl0LT5tMi5taW47CisJCSAgICAgY2xvY2su bTIgPD0gbGltaXQtPm0yLm1heDsgY2xvY2subTIrKykgeworCQkJZm9yIChjbG9jay5uID0gbGlt aXQtPm4ubWluOworCQkJICAgICBjbG9jay5uIDw9IGxpbWl0LT5uLm1heDsgY2xvY2subisrKSB7 CisJCQkJZm9yIChjbG9jay5wMSA9IGxpbWl0LT5wMS5taW47CisJCQkJCWNsb2NrLnAxIDw9IGxp bWl0LT5wMS5tYXg7IGNsb2NrLnAxKyspIHsKKwkJCQkJaW50IHRoaXNfZXJyOworCisJCQkJCXBu dl9jYWxjX2RwbGxfcGFyYW1zKHJlZmNsaywgJmNsb2NrKTsKKwkJCQkJaWYgKCFpbnRlbF9wbGxf aXNfdmFsaWQodG9faTkxNShkZXYpLAorCQkJCQkJCQlsaW1pdCwKKwkJCQkJCQkJJmNsb2NrKSkK KwkJCQkJCWNvbnRpbnVlOworCQkJCQlpZiAobWF0Y2hfY2xvY2sgJiYKKwkJCQkJICAgIGNsb2Nr LnAgIT0gbWF0Y2hfY2xvY2stPnApCisJCQkJCQljb250aW51ZTsKKworCQkJCQl0aGlzX2VyciA9 IGFicyhjbG9jay5kb3QgLSB0YXJnZXQpOworCQkJCQlpZiAodGhpc19lcnIgPCBlcnIpIHsKKwkJ CQkJCSpiZXN0X2Nsb2NrID0gY2xvY2s7CisJCQkJCQllcnIgPSB0aGlzX2VycjsKKwkJCQkJfQor CQkJCX0KKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAoZXJyICE9IHRhcmdldCk7Cit9CisKKy8q CisgKiBSZXR1cm5zIGEgc2V0IG9mIGRpdmlzb3JzIGZvciB0aGUgZGVzaXJlZCB0YXJnZXQgY2xv Y2sgd2l0aCB0aGUgZ2l2ZW4KKyAqIHJlZmNsaywgb3IgRkFMU0UuICBUaGUgcmV0dXJuZWQgdmFs dWVzIHJlcHJlc2VudCB0aGUgY2xvY2sgZXF1YXRpb246CisgKiByZWZsY2sgKiAoNSAqIChtMSAr IDIpICsgKG0yICsgMikpIC8gKG4gKyAyKSAvIHAxIC8gcDIuCisgKgorICogVGFyZ2V0IGFuZCBy ZWZlcmVuY2UgY2xvY2tzIGFyZSBzcGVjaWZpZWQgaW4ga0h6LgorICoKKyAqIElmIG1hdGNoX2Ns b2NrIGlzIHByb3ZpZGVkLCB0aGVuIGJlc3RfY2xvY2sgUCBkaXZpZGVyIG11c3QgbWF0Y2ggdGhl IFAKKyAqIGRpdmlkZXIgZnJvbSBAbWF0Y2hfY2xvY2sgdXNlZCBmb3IgTFZEUyBkb3duY2xvY2tp bmcuCisgKi8KK3N0YXRpYyBib29sCitnNHhfZmluZF9iZXN0X2RwbGwoY29uc3Qgc3RydWN0IGlu dGVsX2xpbWl0ICpsaW1pdCwKKwkJICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUsCisJCSAgIGludCB0YXJnZXQsIGludCByZWZjbGssIHN0cnVjdCBkcGxsICptYXRjaF9jbG9j aywKKwkJICAgc3RydWN0IGRwbGwgKmJlc3RfY2xvY2spCit7CisJc3RydWN0IGRybV9kZXZpY2Ug KmRldiA9IGNydGNfc3RhdGUtPnVhcGkuY3J0Yy0+ZGV2OworCXN0cnVjdCBkcGxsIGNsb2NrOwor CWludCBtYXhfbjsKKwlib29sIGZvdW5kID0gZmFsc2U7CisJLyogYXBwcm94aW1hdGVseSBlcXVh bHMgdGFyZ2V0ICogMC4wMDU4NSAqLworCWludCBlcnJfbW9zdCA9ICh0YXJnZXQgPj4gOCkgKyAo dGFyZ2V0ID4+IDkpOworCisJbWVtc2V0KGJlc3RfY2xvY2ssIDAsIHNpemVvZigqYmVzdF9jbG9j aykpOworCisJY2xvY2sucDIgPSBpOXh4X3NlbGVjdF9wMl9kaXYobGltaXQsIGNydGNfc3RhdGUs IHRhcmdldCk7CisKKwltYXhfbiA9IGxpbWl0LT5uLm1heDsKKwkvKiBiYXNlZCBvbiBoYXJkd2Fy ZSByZXF1aXJlbWVudCwgcHJlZmVyIHNtYWxsZXIgbiB0byBwcmVjaXNpb24gKi8KKwlmb3IgKGNs b2NrLm4gPSBsaW1pdC0+bi5taW47IGNsb2NrLm4gPD0gbWF4X247IGNsb2NrLm4rKykgeworCQkv KiBiYXNlZCBvbiBoYXJkd2FyZSByZXF1aXJlbWVudCwgcHJlZmVyZSBsYXJnZXIgbTEsbTIgKi8K KwkJZm9yIChjbG9jay5tMSA9IGxpbWl0LT5tMS5tYXg7CisJCSAgICAgY2xvY2subTEgPj0gbGlt aXQtPm0xLm1pbjsgY2xvY2subTEtLSkgeworCQkJZm9yIChjbG9jay5tMiA9IGxpbWl0LT5tMi5t YXg7CisJCQkgICAgIGNsb2NrLm0yID49IGxpbWl0LT5tMi5taW47IGNsb2NrLm0yLS0pIHsKKwkJ CQlmb3IgKGNsb2NrLnAxID0gbGltaXQtPnAxLm1heDsKKwkJCQkgICAgIGNsb2NrLnAxID49IGxp bWl0LT5wMS5taW47IGNsb2NrLnAxLS0pIHsKKwkJCQkJaW50IHRoaXNfZXJyOworCisJCQkJCWk5 eHhfY2FsY19kcGxsX3BhcmFtcyhyZWZjbGssICZjbG9jayk7CisJCQkJCWlmICghaW50ZWxfcGxs X2lzX3ZhbGlkKHRvX2k5MTUoZGV2KSwKKwkJCQkJCQkJbGltaXQsCisJCQkJCQkJCSZjbG9jaykp CisJCQkJCQljb250aW51ZTsKKworCQkJCQl0aGlzX2VyciA9IGFicyhjbG9jay5kb3QgLSB0YXJn ZXQpOworCQkJCQlpZiAodGhpc19lcnIgPCBlcnJfbW9zdCkgeworCQkJCQkJKmJlc3RfY2xvY2sg PSBjbG9jazsKKwkJCQkJCWVycl9tb3N0ID0gdGhpc19lcnI7CisJCQkJCQltYXhfbiA9IGNsb2Nr Lm47CisJCQkJCQlmb3VuZCA9IHRydWU7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisJ cmV0dXJuIGZvdW5kOworfQorCisvKgorICogQ2hlY2sgaWYgdGhlIGNhbGN1bGF0ZWQgUExMIGNv bmZpZ3VyYXRpb24gaXMgbW9yZSBvcHRpbWFsIGNvbXBhcmVkIHRvIHRoZQorICogYmVzdCBjb25m aWd1cmF0aW9uIGFuZCBlcnJvciBmb3VuZCBzbyBmYXIuIFJldHVybiB0aGUgY2FsY3VsYXRlZCBl cnJvci4KKyAqLworc3RhdGljIGJvb2wgdmx2X1BMTF9pc19vcHRpbWFsKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIGludCB0YXJnZXRfZnJlcSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZHBsbCAq Y2FsY3VsYXRlZF9jbG9jaywKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZHBsbCAqYmVzdF9jbG9j aywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgYmVzdF9lcnJvcl9wcG0sCisJCQkgICAgICAgdW5z aWduZWQgaW50ICplcnJvcl9wcG0pCit7CisJLyoKKwkgKiBGb3IgQ0hWIGlnbm9yZSB0aGUgZXJy b3IgYW5kIGNvbnNpZGVyIG9ubHkgdGhlIFAgdmFsdWUuCisJICogUHJlZmVyIGEgYmlnZ2VyIFAg dmFsdWUgYmFzZWQgb24gSFcgcmVxdWlyZW1lbnRzLgorCSAqLworCWlmIChJU19DSEVSUllWSUVX KHRvX2k5MTUoZGV2KSkpIHsKKwkJKmVycm9yX3BwbSA9IDA7CisKKwkJcmV0dXJuIGNhbGN1bGF0 ZWRfY2xvY2stPnAgPiBiZXN0X2Nsb2NrLT5wOworCX0KKworCWlmIChkcm1fV0FSTl9PTl9PTkNF KGRldiwgIXRhcmdldF9mcmVxKSkKKwkJcmV0dXJuIGZhbHNlOworCisJKmVycm9yX3BwbSA9IGRp dl91NjQoMTAwMDAwMFVMTCAqCisJCQkJYWJzKHRhcmdldF9mcmVxIC0gY2FsY3VsYXRlZF9jbG9j ay0+ZG90KSwKKwkJCSAgICAgdGFyZ2V0X2ZyZXEpOworCS8qCisJICogUHJlZmVyIGEgYmV0dGVy IFAgdmFsdWUgb3ZlciBhIGJldHRlciAoc21hbGxlcikgZXJyb3IgaWYgdGhlIGVycm9yCisJICog aXMgc21hbGwuIEVuc3VyZSB0aGlzIHByZWZlcmVuY2UgZm9yIGZ1dHVyZSBjb25maWd1cmF0aW9u cyB0b28gYnkKKwkgKiBzZXR0aW5nIHRoZSBlcnJvciB0byAwLgorCSAqLworCWlmICgqZXJyb3Jf cHBtIDwgMTAwICYmIGNhbGN1bGF0ZWRfY2xvY2stPnAgPiBiZXN0X2Nsb2NrLT5wKSB7CisJCSpl cnJvcl9wcG0gPSAwOworCisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiAqZXJyb3JfcHBt ICsgMTAgPCBiZXN0X2Vycm9yX3BwbTsKK30KKworLyoKKyAqIFJldHVybnMgYSBzZXQgb2YgZGl2 aXNvcnMgZm9yIHRoZSBkZXNpcmVkIHRhcmdldCBjbG9jayB3aXRoIHRoZSBnaXZlbgorICogcmVm Y2xrLCBvciBGQUxTRS4gIFRoZSByZXR1cm5lZCB2YWx1ZXMgcmVwcmVzZW50IHRoZSBjbG9jayBl cXVhdGlvbjoKKyAqIHJlZmxjayAqICg1ICogKG0xICsgMikgKyAobTIgKyAyKSkgLyAobiArIDIp IC8gcDEgLyBwMi4KKyAqLworc3RhdGljIGJvb2wKK3Zsdl9maW5kX2Jlc3RfZHBsbChjb25zdCBz dHJ1Y3QgaW50ZWxfbGltaXQgKmxpbWl0LAorCQkgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZSwKKwkJICAgaW50IHRhcmdldCwgaW50IHJlZmNsaywgc3RydWN0IGRwbGwgKm1h dGNoX2Nsb2NrLAorCQkgICBzdHJ1Y3QgZHBsbCAqYmVzdF9jbG9jaykKK3sKKwlzdHJ1Y3QgaW50 ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKKwlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7CisJc3RydWN0IGRwbGwgY2xv Y2s7CisJdW5zaWduZWQgaW50IGJlc3RwcG0gPSAxMDAwMDAwOworCS8qIG1pbiB1cGRhdGUgMTku MiBNSHogKi8KKwlpbnQgbWF4X24gPSBtaW4obGltaXQtPm4ubWF4LCByZWZjbGsgLyAxOTIwMCk7 CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCisJdGFyZ2V0ICo9IDU7IC8qIGZhc3QgY2xvY2sgKi8K KworCW1lbXNldChiZXN0X2Nsb2NrLCAwLCBzaXplb2YoKmJlc3RfY2xvY2spKTsKKworCS8qIGJh c2VkIG9uIGhhcmR3YXJlIHJlcXVpcmVtZW50LCBwcmVmZXIgc21hbGxlciBuIHRvIHByZWNpc2lv biAqLworCWZvciAoY2xvY2subiA9IGxpbWl0LT5uLm1pbjsgY2xvY2subiA8PSBtYXhfbjsgY2xv Y2subisrKSB7CisJCWZvciAoY2xvY2sucDEgPSBsaW1pdC0+cDEubWF4OyBjbG9jay5wMSA+PSBs aW1pdC0+cDEubWluOyBjbG9jay5wMS0tKSB7CisJCQlmb3IgKGNsb2NrLnAyID0gbGltaXQtPnAy LnAyX2Zhc3Q7IGNsb2NrLnAyID49IGxpbWl0LT5wMi5wMl9zbG93OworCQkJICAgICBjbG9jay5w MiAtPSBjbG9jay5wMiA+IDEwID8gMiA6IDEpIHsKKwkJCQljbG9jay5wID0gY2xvY2sucDEgKiBj bG9jay5wMjsKKwkJCQkvKiBiYXNlZCBvbiBoYXJkd2FyZSByZXF1aXJlbWVudCwgcHJlZmVyIGJp Z2dlciBtMSxtMiB2YWx1ZXMgKi8KKwkJCQlmb3IgKGNsb2NrLm0xID0gbGltaXQtPm0xLm1pbjsg Y2xvY2subTEgPD0gbGltaXQtPm0xLm1heDsgY2xvY2subTErKykgeworCQkJCQl1bnNpZ25lZCBp bnQgcHBtOworCisJCQkJCWNsb2NrLm0yID0gRElWX1JPVU5EX0NMT1NFU1QodGFyZ2V0ICogY2xv Y2sucCAqIGNsb2NrLm4sCisJCQkJCQkJCSAgICAgcmVmY2xrICogY2xvY2subTEpOworCisJCQkJ CXZsdl9jYWxjX2RwbGxfcGFyYW1zKHJlZmNsaywgJmNsb2NrKTsKKworCQkJCQlpZiAoIWludGVs X3BsbF9pc192YWxpZCh0b19pOTE1KGRldiksCisJCQkJCQkJCWxpbWl0LAorCQkJCQkJCQkmY2xv Y2spKQorCQkJCQkJY29udGludWU7CisKKwkJCQkJaWYgKCF2bHZfUExMX2lzX29wdGltYWwoZGV2 LCB0YXJnZXQsCisJCQkJCQkJCSZjbG9jaywKKwkJCQkJCQkJYmVzdF9jbG9jaywKKwkJCQkJCQkJ YmVzdHBwbSwgJnBwbSkpCisJCQkJCQljb250aW51ZTsKKworCQkJCQkqYmVzdF9jbG9jayA9IGNs b2NrOworCQkJCQliZXN0cHBtID0gcHBtOworCQkJCQlmb3VuZCA9IHRydWU7CisJCQkJfQorCQkJ fQorCQl9CisJfQorCisJcmV0dXJuIGZvdW5kOworfQorCisvKgorICogUmV0dXJucyBhIHNldCBv ZiBkaXZpc29ycyBmb3IgdGhlIGRlc2lyZWQgdGFyZ2V0IGNsb2NrIHdpdGggdGhlIGdpdmVuCisg KiByZWZjbGssIG9yIEZBTFNFLiAgVGhlIHJldHVybmVkIHZhbHVlcyByZXByZXNlbnQgdGhlIGNs b2NrIGVxdWF0aW9uOgorICogcmVmbGNrICogKDUgKiAobTEgKyAyKSArIChtMiArIDIpKSAvIChu ICsgMikgLyBwMSAvIHAyLgorICovCitzdGF0aWMgYm9vbAorY2h2X2ZpbmRfYmVzdF9kcGxsKGNv bnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQsCisJCSAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlLAorCQkgICBpbnQgdGFyZ2V0LCBpbnQgcmVmY2xrLCBzdHJ1Y3QgZHBs bCAqbWF0Y2hfY2xvY2ssCisJCSAgIHN0cnVjdCBkcGxsICpiZXN0X2Nsb2NrKQoreworCXN0cnVj dCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBpLmNydGMp OworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKKwl1bnNpZ25lZCBp bnQgYmVzdF9lcnJvcl9wcG07CisJc3RydWN0IGRwbGwgY2xvY2s7CisJdTY0IG0yOworCWludCBm b3VuZCA9IGZhbHNlOworCisJbWVtc2V0KGJlc3RfY2xvY2ssIDAsIHNpemVvZigqYmVzdF9jbG9j aykpOworCWJlc3RfZXJyb3JfcHBtID0gMTAwMDAwMDsKKworCS8qCisJICogQmFzZWQgb24gaGFy ZHdhcmUgZG9jLCB0aGUgbiBhbHdheXMgc2V0IHRvIDEsIGFuZCBtMSBhbHdheXMKKwkgKiBzZXQg dG8gMi4gIElmIHJlcXVpcmVzIHRvIHN1cHBvcnQgMjAwTWh6IHJlZmNsaywgd2UgbmVlZCB0bwor CSAqIHJldmlzaXQgdGhpcyBiZWNhdXNlIG4gbWF5IG5vdCAxIGFueW1vcmUuCisJICovCisJY2xv Y2subiA9IDE7CisJY2xvY2subTEgPSAyOworCXRhcmdldCAqPSA1OwkvKiBmYXN0IGNsb2NrICov CisKKwlmb3IgKGNsb2NrLnAxID0gbGltaXQtPnAxLm1heDsgY2xvY2sucDEgPj0gbGltaXQtPnAx Lm1pbjsgY2xvY2sucDEtLSkgeworCQlmb3IgKGNsb2NrLnAyID0gbGltaXQtPnAyLnAyX2Zhc3Q7 CisJCQkJY2xvY2sucDIgPj0gbGltaXQtPnAyLnAyX3Nsb3c7CisJCQkJY2xvY2sucDIgLT0gY2xv Y2sucDIgPiAxMCA/IDIgOiAxKSB7CisJCQl1bnNpZ25lZCBpbnQgZXJyb3JfcHBtOworCisJCQlj bG9jay5wID0gY2xvY2sucDEgKiBjbG9jay5wMjsKKworCQkJbTIgPSBESVZfUk9VTkRfQ0xPU0VT VF9VTEwobXVsX3UzMl91MzIodGFyZ2V0LCBjbG9jay5wICogY2xvY2subikgPDwgMjIsCisJCQkJ CQkgICByZWZjbGsgKiBjbG9jay5tMSk7CisKKwkJCWlmIChtMiA+IElOVF9NQVgvY2xvY2subTEp CisJCQkJY29udGludWU7CisKKwkJCWNsb2NrLm0yID0gbTI7CisKKwkJCWNodl9jYWxjX2RwbGxf cGFyYW1zKHJlZmNsaywgJmNsb2NrKTsKKworCQkJaWYgKCFpbnRlbF9wbGxfaXNfdmFsaWQodG9f aTkxNShkZXYpLCBsaW1pdCwgJmNsb2NrKSkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKCF2bHZf UExMX2lzX29wdGltYWwoZGV2LCB0YXJnZXQsICZjbG9jaywgYmVzdF9jbG9jaywKKwkJCQkJCWJl c3RfZXJyb3JfcHBtLCAmZXJyb3JfcHBtKSkKKwkJCQljb250aW51ZTsKKworCQkJKmJlc3RfY2xv Y2sgPSBjbG9jazsKKwkJCWJlc3RfZXJyb3JfcHBtID0gZXJyb3JfcHBtOworCQkJZm91bmQgPSB0 cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZvdW5kOworfQorCitib29sIGJ4dF9maW5kX2Jlc3Rf ZHBsbChzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCXN0cnVjdCBkcGxs ICpiZXN0X2Nsb2NrKQoreworCWludCByZWZjbGsgPSAxMDAwMDA7CisJY29uc3Qgc3RydWN0IGlu dGVsX2xpbWl0ICpsaW1pdCA9ICZpbnRlbF9saW1pdHNfYnh0OworCisJcmV0dXJuIGNodl9maW5k X2Jlc3RfZHBsbChsaW1pdCwgY3J0Y19zdGF0ZSwKKwkJCQkgIGNydGNfc3RhdGUtPnBvcnRfY2xv Y2ssIHJlZmNsaywKKwkJCQkgIE5VTEwsIGJlc3RfY2xvY2spOworfQorCitzdGF0aWMgdTMyIHBu dl9kcGxsX2NvbXB1dGVfZnAoc3RydWN0IGRwbGwgKmRwbGwpCit7CisJcmV0dXJuICgxIDw8IGRw bGwtPm4pIDw8IDE2IHwgZHBsbC0+bTI7Cit9CisKK3N0YXRpYyB2b2lkIGk5eHhfdXBkYXRlX3Bs bF9kaXZpZGVycyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKKwkJCQkgICAgIHN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJCSAgICAgc3RydWN0IGRwbGwgKnJlZHVjZWRf Y2xvY2spCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShj cnRjLT5iYXNlLmRldik7CisJdTMyIGZwLCBmcDIgPSAwOworCisJaWYgKElTX1BJTkVWSUVXKGRl dl9wcml2KSkgeworCQlmcCA9IHBudl9kcGxsX2NvbXB1dGVfZnAoJmNydGNfc3RhdGUtPmRwbGwp OworCQlpZiAocmVkdWNlZF9jbG9jaykKKwkJCWZwMiA9IHBudl9kcGxsX2NvbXB1dGVfZnAocmVk dWNlZF9jbG9jayk7CisJfSBlbHNlIHsKKwkJZnAgPSBpOXh4X2RwbGxfY29tcHV0ZV9mcCgmY3J0 Y19zdGF0ZS0+ZHBsbCk7CisJCWlmIChyZWR1Y2VkX2Nsb2NrKQorCQkJZnAyID0gaTl4eF9kcGxs X2NvbXB1dGVfZnAocmVkdWNlZF9jbG9jayk7CisJfQorCisJY3J0Y19zdGF0ZS0+ZHBsbF9od19z dGF0ZS5mcDAgPSBmcDsKKworCWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElO VEVMX09VVFBVVF9MVkRTKSAmJgorCSAgICByZWR1Y2VkX2Nsb2NrKSB7CisJCWNydGNfc3RhdGUt PmRwbGxfaHdfc3RhdGUuZnAxID0gZnAyOworCX0gZWxzZSB7CisJCWNydGNfc3RhdGUtPmRwbGxf aHdfc3RhdGUuZnAxID0gZnA7CisJfQorfQorCitzdGF0aWMgdm9pZCBpOXh4X2NvbXB1dGVfZHBs bChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKKwkJCSAgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlLAorCQkJICAgICAgc3RydWN0IGRwbGwgKnJlZHVjZWRfY2xvY2spCit7 CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNl LmRldik7CisJdTMyIGRwbGw7CisJc3RydWN0IGRwbGwgKmNsb2NrID0gJmNydGNfc3RhdGUtPmRw bGw7CisKKwlpOXh4X3VwZGF0ZV9wbGxfZGl2aWRlcnMoY3J0YywgY3J0Y19zdGF0ZSwgcmVkdWNl ZF9jbG9jayk7CisKKwlkcGxsID0gRFBMTF9WR0FfTU9ERV9ESVM7CisKKwlpZiAoaW50ZWxfY3J0 Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfTFZEUykpCisJCWRwbGwgfD0gRFBM TEJfTU9ERV9MVkRTOworCWVsc2UKKwkJZHBsbCB8PSBEUExMQl9NT0RFX0RBQ19TRVJJQUw7CisK KwlpZiAoSVNfSTk0NUcoZGV2X3ByaXYpIHx8IElTX0k5NDVHTShkZXZfcHJpdikgfHwKKwkgICAg SVNfRzMzKGRldl9wcml2KSB8fCBJU19QSU5FVklFVyhkZXZfcHJpdikpIHsKKwkJZHBsbCB8PSAo Y3J0Y19zdGF0ZS0+cGl4ZWxfbXVsdGlwbGllciAtIDEpCisJCQk8PCBTRFZPX01VTFRJUExJRVJf U0hJRlRfSElSRVM7CisJfQorCisJaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwg SU5URUxfT1VUUFVUX1NEVk8pIHx8CisJICAgIGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0 ZSwgSU5URUxfT1VUUFVUX0hETUkpKQorCQlkcGxsIHw9IERQTExfU0RWT19ISUdIX1NQRUVEOwor CisJaWYgKGludGVsX2NydGNfaGFzX2RwX2VuY29kZXIoY3J0Y19zdGF0ZSkpCisJCWRwbGwgfD0g RFBMTF9TRFZPX0hJR0hfU1BFRUQ7CisKKwkvKiBjb21wdXRlIGJpdG1hc2sgZnJvbSBwMSB2YWx1 ZSAqLworCWlmIChJU19QSU5FVklFVyhkZXZfcHJpdikpCisJCWRwbGwgfD0gKDEgPDwgKGNsb2Nr LT5wMSAtIDEpKSA8PCBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX1NISUZUX1BJTkVWSUVXOworCWVs c2UgeworCQlkcGxsIHw9ICgxIDw8IChjbG9jay0+cDEgLSAxKSkgPDwgRFBMTF9GUEEwMV9QMV9Q T1NUX0RJVl9TSElGVDsKKwkJaWYgKElTX0c0WChkZXZfcHJpdikgJiYgcmVkdWNlZF9jbG9jaykK KwkJCWRwbGwgfD0gKDEgPDwgKHJlZHVjZWRfY2xvY2stPnAxIC0gMSkpIDw8IERQTExfRlBBMV9Q MV9QT1NUX0RJVl9TSElGVDsKKwl9CisJc3dpdGNoIChjbG9jay0+cDIpIHsKKwljYXNlIDU6CisJ CWRwbGwgfD0gRFBMTF9EQUNfU0VSSUFMX1AyX0NMT0NLX0RJVl81OworCQlicmVhazsKKwljYXNl IDc6CisJCWRwbGwgfD0gRFBMTEJfTFZEU19QMl9DTE9DS19ESVZfNzsKKwkJYnJlYWs7CisJY2Fz ZSAxMDoKKwkJZHBsbCB8PSBEUExMX0RBQ19TRVJJQUxfUDJfQ0xPQ0tfRElWXzEwOworCQlicmVh azsKKwljYXNlIDE0OgorCQlkcGxsIHw9IERQTExCX0xWRFNfUDJfQ0xPQ0tfRElWXzE0OworCQli cmVhazsKKwl9CisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkKKwkJZHBsbCB8PSAoNiA8 PCBQTExfTE9BRF9QVUxTRV9QSEFTRV9TSElGVCk7CisKKwlpZiAoY3J0Y19zdGF0ZS0+c2R2b190 dl9jbG9jaykKKwkJZHBsbCB8PSBQTExfUkVGX0lOUFVUX1RWQ0xLSU5CQzsKKwllbHNlIGlmIChp bnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9MVkRTKSAmJgorCQkg aW50ZWxfcGFuZWxfdXNlX3NzYyhkZXZfcHJpdikpCisJCWRwbGwgfD0gUExMQl9SRUZfSU5QVVRf U1BSRUFEU1BFQ1RSVU1JTjsKKwllbHNlCisJCWRwbGwgfD0gUExMX1JFRl9JTlBVVF9EUkVGQ0xL OworCisJZHBsbCB8PSBEUExMX1ZDT19FTkFCTEU7CisJY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0 ZS5kcGxsID0gZHBsbDsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpIHsKKwkJdTMy IGRwbGxfbWQgPSAoY3J0Y19zdGF0ZS0+cGl4ZWxfbXVsdGlwbGllciAtIDEpCisJCQk8PCBEUExM X01EX1VESV9NVUxUSVBMSUVSX1NISUZUOworCQljcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLmRw bGxfbWQgPSBkcGxsX21kOworCX0KK30KKworc3RhdGljIHZvaWQgaTh4eF9jb21wdXRlX2RwbGwo c3RydWN0IGludGVsX2NydGMgKmNydGMsCisJCQkgICAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSwKKwkJCSAgICAgIHN0cnVjdCBkcGxsICpyZWR1Y2VkX2Nsb2NrKQorewor CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7CisJdTMyIGRwbGw7CisJc3RydWN0 IGRwbGwgKmNsb2NrID0gJmNydGNfc3RhdGUtPmRwbGw7CisKKwlpOXh4X3VwZGF0ZV9wbGxfZGl2 aWRlcnMoY3J0YywgY3J0Y19zdGF0ZSwgcmVkdWNlZF9jbG9jayk7CisKKwlkcGxsID0gRFBMTF9W R0FfTU9ERV9ESVM7CisKKwlpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRF TF9PVVRQVVRfTFZEUykpIHsKKwkJZHBsbCB8PSAoMSA8PCAoY2xvY2stPnAxIC0gMSkpIDw8IERQ TExfRlBBMDFfUDFfUE9TVF9ESVZfU0hJRlQ7CisJfSBlbHNlIHsKKwkJaWYgKGNsb2NrLT5wMSA9 PSAyKQorCQkJZHBsbCB8PSBQTExfUDFfRElWSURFX0JZX1RXTzsKKwkJZWxzZQorCQkJZHBsbCB8 PSAoY2xvY2stPnAxIC0gMikgPDwgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9TSElGVDsKKwkJaWYg KGNsb2NrLT5wMiA9PSA0KQorCQkJZHBsbCB8PSBQTExfUDJfRElWSURFX0JZXzQ7CisJfQorCisJ LyoKKwkgKiBCc3BlYzoKKwkgKiAiW0FsbWFkb3IgRXJyYXRhfTogRm9yIHRoZSBjb3JyZWN0IG9w ZXJhdGlvbiBvZiB0aGUgbXV4ZWQgRFZPIHBpbnMKKwkgKiAgKEdERVZTRUxCL0kyQ2RhdGEsIEdJ UkRCWS9JMkNDbGspIGFuZCAoR0ZSQU1FQi9EVklfRGF0YSwKKwkgKiAgR1RSRFlCL0RWSV9DbGsp OiBCaXQgMzEgKERQTEwgVkNPIEVuYWJsZSkgYW5kIEJpdCAzMCAoMlggQ2xvY2sKKwkgKiAgRW5h YmxlKSBtdXN0IGJlIHNldCB0byDigJwx4oCdIGluIGJvdGggdGhlIERQTEwgQSBDb250cm9sIFJl Z2lzdGVyCisJICogICgwNjAxNGgtMDYwMTdoKSBhbmQgRFBMTCBCIENvbnRyb2wgUmVnaXN0ZXIg KDA2MDE4aC0wNjAxQmgpLiIKKwkgKgorCSAqIEZvciBzaW1wbGljaXR5IFdlIHNpbXBseSBrZWVw IGJvdGggYml0cyBhbHdheXMgZW5hYmxlZCBpbgorCSAqIGJvdGggRFBMTFMuIFRoZSBzcGVjIHNh eXMgd2Ugc2hvdWxkIGRpc2FibGUgdGhlIERWTyAyWCBjbG9jaworCSAqIHdoZW4gbm90IG5lZWRl ZCwgYnV0IHRoaXMgc2VlbXMgdG8gd29yayBmaW5lIGluIHByYWN0aWNlLgorCSAqLworCWlmIChJ U19JODMwKGRldl9wcml2KSB8fAorCSAgICBpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUs IElOVEVMX09VVFBVVF9EVk8pKQorCQlkcGxsIHw9IERQTExfRFZPXzJYX01PREU7CisKKwlpZiAo aW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfTFZEUykgJiYKKwkg ICAgaW50ZWxfcGFuZWxfdXNlX3NzYyhkZXZfcHJpdikpCisJCWRwbGwgfD0gUExMQl9SRUZfSU5Q VVRfU1BSRUFEU1BFQ1RSVU1JTjsKKwllbHNlCisJCWRwbGwgfD0gUExMX1JFRl9JTlBVVF9EUkVG Q0xLOworCisJZHBsbCB8PSBEUExMX1ZDT19FTkFCTEU7CisJY3J0Y19zdGF0ZS0+ZHBsbF9od19z dGF0ZS5kcGxsID0gZHBsbDsKK30KKworc3RhdGljIGludCBoc3dfY3J0Y19jb21wdXRlX2Nsb2Nr KHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAorCQkJCSAgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShjcnRjLT5iYXNlLmRldik7CisJc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUg PQorCQl0b19pbnRlbF9hdG9taWNfc3RhdGUoY3J0Y19zdGF0ZS0+dWFwaS5zdGF0ZSk7CisKKwlp ZiAoIWludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0RTSSkgfHwK KwkgICAgSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkgeworCQlzdHJ1Y3QgaW50ZWxfZW5jb2Rl ciAqZW5jb2RlciA9CisJCQlpbnRlbF9nZXRfY3J0Y19uZXdfZW5jb2RlcihzdGF0ZSwgY3J0Y19z dGF0ZSk7CisKKwkJaWYgKCFpbnRlbF9yZXNlcnZlX3NoYXJlZF9kcGxscyhzdGF0ZSwgY3J0Yywg ZW5jb2RlcikpIHsKKwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJCSAgICAiZmFp bGVkIHRvIGZpbmQgUExMIGZvciBwaXBlICVjXG4iLAorCQkJCSAgICBwaXBlX25hbWUoY3J0Yy0+ cGlwZSkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGJvb2wgaWxrX25lZWRzX2ZiX2NiX3R1bmUoc3RydWN0IGRwbGwgKmRwbGwsIGludCBm YWN0b3IpCit7CisJcmV0dXJuIGk5eHhfZHBsbF9jb21wdXRlX20oZHBsbCkgPCBmYWN0b3IgKiBk cGxsLT5uOworfQorCisKK3N0YXRpYyB2b2lkIGlsa19jb21wdXRlX2RwbGwoc3RydWN0IGludGVs X2NydGMgKmNydGMsCisJCQkgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRl LAorCQkJICAgICBzdHJ1Y3QgZHBsbCAqcmVkdWNlZF9jbG9jaykKK3sKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKKwl1MzIgZHBs bCwgZnAsIGZwMjsKKwlpbnQgZmFjdG9yOworCisJLyogRW5hYmxlIGF1dG90dW5pbmcgb2YgdGhl IFBMTCBjbG9jayAoaWYgcGVybWlzc2libGUpICovCisJZmFjdG9yID0gMjE7CisJaWYgKGludGVs X2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0xWRFMpKSB7CisJCWlmICgo aW50ZWxfcGFuZWxfdXNlX3NzYyhkZXZfcHJpdikgJiYKKwkJICAgICBkZXZfcHJpdi0+dmJ0Lmx2 ZHNfc3NjX2ZyZXEgPT0gMTAwMDAwKSB8fAorCQkgICAgKEhBU19QQ0hfSUJYKGRldl9wcml2KSAm JgorCQkgICAgIGludGVsX2lzX2R1YWxfbGlua19sdmRzKGRldl9wcml2KSkpCisJCQlmYWN0b3Ig PSAyNTsKKwl9IGVsc2UgaWYgKGNydGNfc3RhdGUtPnNkdm9fdHZfY2xvY2spIHsKKwkJZmFjdG9y ID0gMjA7CisJfQorCisJZnAgPSBpOXh4X2RwbGxfY29tcHV0ZV9mcCgmY3J0Y19zdGF0ZS0+ZHBs bCk7CisKKwlpZiAoaWxrX25lZWRzX2ZiX2NiX3R1bmUoJmNydGNfc3RhdGUtPmRwbGwsIGZhY3Rv cikpCisJCWZwIHw9IEZQX0NCX1RVTkU7CisKKwlpZiAocmVkdWNlZF9jbG9jaykgeworCQlmcDIg PSBpOXh4X2RwbGxfY29tcHV0ZV9mcChyZWR1Y2VkX2Nsb2NrKTsKKworCQlpZiAocmVkdWNlZF9j bG9jay0+bSA8IGZhY3RvciAqIHJlZHVjZWRfY2xvY2stPm4pCisJCQlmcDIgfD0gRlBfQ0JfVFVO RTsKKwl9IGVsc2UgeworCQlmcDIgPSBmcDsKKwl9CisKKwlkcGxsID0gMDsKKworCWlmIChpbnRl bF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9MVkRTKSkKKwkJZHBsbCB8 PSBEUExMQl9NT0RFX0xWRFM7CisJZWxzZQorCQlkcGxsIHw9IERQTExCX01PREVfREFDX1NFUklB TDsKKworCWRwbGwgfD0gKGNydGNfc3RhdGUtPnBpeGVsX211bHRpcGxpZXIgLSAxKQorCQk8PCBQ TExfUkVGX1NEVk9fSERNSV9NVUxUSVBMSUVSX1NISUZUOworCisJaWYgKGludGVsX2NydGNfaGFz X3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX1NEVk8pIHx8CisJICAgIGludGVsX2NydGNf aGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0hETUkpKQorCQlkcGxsIHw9IERQTExf U0RWT19ISUdIX1NQRUVEOworCisJaWYgKGludGVsX2NydGNfaGFzX2RwX2VuY29kZXIoY3J0Y19z dGF0ZSkpCisJCWRwbGwgfD0gRFBMTF9TRFZPX0hJR0hfU1BFRUQ7CisKKwkvKgorCSAqIFRoZSBo aWdoIHNwZWVkIElPIGNsb2NrIGlzIG9ubHkgcmVhbGx5IHJlcXVpcmVkIGZvcgorCSAqIFNEVk8v SERNSS9EUCwgYnV0IHdlIGFsc28gZW5hYmxlIGl0IGZvciBDUlQgdG8gbWFrZSBpdAorCSAqIHBv c3NpYmxlIHRvIHNoYXJlIHRoZSBEUExMIGJldHdlZW4gQ1JUIGFuZCBIRE1JLiBFbmFibGluZwor CSAqIHRoZSBjbG9jayBuZWVkbGVzc2x5IGRvZXMgbm8gcmVhbCBoYXJtLCBleGNlcHQgdXNlIHVw IGEKKwkgKiBiaXQgb2YgcG93ZXIgcG90ZW50aWFsbHkuCisJICoKKwkgKiBXZSdsbCBsaW1pdCB0 aGlzIHRvIElWQiB3aXRoIDMgcGlwZXMsIHNpbmNlIGl0IGhhcyBvbmx5IHR3bworCSAqIERQTExz IGFuZCBzbyBEUExMIHNoYXJpbmcgaXMgdGhlIG9ubHkgd2F5IHRvIGdldCB0aHJlZSBwaXBlcwor CSAqIGRyaXZpbmcgUENIIHBvcnRzIGF0IHRoZSBzYW1lIHRpbWUuIE9uIFNOQiB3ZSBjb3VsZCBk byB0aGlzLAorCSAqIGFuZCBwb3RlbnRpYWxseSBhdm9pZCBlbmFibGluZyB0aGUgc2Vjb25kIERQ TEwsIGJ1dCBpdCdzIG5vdAorCSAqIGNsZWFyIGlmIGl0JydzIGEgd2luIG9yIGxvc3MgcG93ZXIg d2lzZS4gTm8gcG9pbnQgaW4gZG9pbmcKKwkgKiB0aGlzIG9uIElMSyBhdCBhbGwgc2luY2UgaXQg aGFzIGEgZml4ZWQgRFBMTDwtPnBpcGUgbWFwcGluZy4KKwkgKi8KKwlpZiAoSU5URUxfTlVNX1BJ UEVTKGRldl9wcml2KSA9PSAzICYmCisJICAgIGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0 ZSwgSU5URUxfT1VUUFVUX0FOQUxPRykpCisJCWRwbGwgfD0gRFBMTF9TRFZPX0hJR0hfU1BFRUQ7 CisKKwkvKiBjb21wdXRlIGJpdG1hc2sgZnJvbSBwMSB2YWx1ZSAqLworCWRwbGwgfD0gKDEgPDwg KGNydGNfc3RhdGUtPmRwbGwucDEgLSAxKSkgPDwgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9TSElG VDsKKwkvKiBhbHNvIEZQQTEgKi8KKwlkcGxsIHw9ICgxIDw8IChjcnRjX3N0YXRlLT5kcGxsLnAx IC0gMSkpIDw8IERQTExfRlBBMV9QMV9QT1NUX0RJVl9TSElGVDsKKworCXN3aXRjaCAoY3J0Y19z dGF0ZS0+ZHBsbC5wMikgeworCWNhc2UgNToKKwkJZHBsbCB8PSBEUExMX0RBQ19TRVJJQUxfUDJf Q0xPQ0tfRElWXzU7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJZHBsbCB8PSBEUExMQl9MVkRTX1Ay X0NMT0NLX0RJVl83OworCQlicmVhazsKKwljYXNlIDEwOgorCQlkcGxsIHw9IERQTExfREFDX1NF UklBTF9QMl9DTE9DS19ESVZfMTA7CisJCWJyZWFrOworCWNhc2UgMTQ6CisJCWRwbGwgfD0gRFBM TEJfTFZEU19QMl9DTE9DS19ESVZfMTQ7CisJCWJyZWFrOworCX0KKworCWlmIChpbnRlbF9jcnRj X2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9MVkRTKSAmJgorCSAgICBpbnRlbF9w YW5lbF91c2Vfc3NjKGRldl9wcml2KSkKKwkJZHBsbCB8PSBQTExCX1JFRl9JTlBVVF9TUFJFQURT UEVDVFJVTUlOOworCWVsc2UKKwkJZHBsbCB8PSBQTExfUkVGX0lOUFVUX0RSRUZDTEs7CisKKwlk cGxsIHw9IERQTExfVkNPX0VOQUJMRTsKKworCWNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUuZHBs bCA9IGRwbGw7CisJY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZS5mcDAgPSBmcDsKKwljcnRjX3N0 YXRlLT5kcGxsX2h3X3N0YXRlLmZwMSA9IGZwMjsKK30KKworc3RhdGljIGludCBpbGtfY3J0Y19j b21wdXRlX2Nsb2NrKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAorCQkJCSAgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7CisJc3RydWN0IGludGVsX2F0b21pY19z dGF0ZSAqc3RhdGUgPQorCQl0b19pbnRlbF9hdG9taWNfc3RhdGUoY3J0Y19zdGF0ZS0+dWFwaS5z dGF0ZSk7CisJY29uc3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1pdDsKKwlpbnQgcmVmY2xrID0g MTIwMDAwOworCisJbWVtc2V0KCZjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLCAwLAorCSAgICAg ICBzaXplb2YoY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSkpOworCisJLyogQ1BVIGVEUCBpcyB0 aGUgb25seSBvdXRwdXQgdGhhdCBkb2Vzbid0IG5lZWQgYSBQQ0ggUExMIG9mIGl0cyBvd24uICov CisJaWYgKCFjcnRjX3N0YXRlLT5oYXNfcGNoX2VuY29kZXIpCisJCXJldHVybiAwOworCisJaWYg KGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0xWRFMpKSB7CisJ CWlmIChpbnRlbF9wYW5lbF91c2Vfc3NjKGRldl9wcml2KSkgeworCQkJZHJtX2RiZ19rbXMoJmRl dl9wcml2LT5kcm0sCisJCQkJICAgICJ1c2luZyBTU0MgcmVmZXJlbmNlIGNsb2NrIG9mICVkIGtI elxuIiwKKwkJCQkgICAgZGV2X3ByaXYtPnZidC5sdmRzX3NzY19mcmVxKTsKKwkJCXJlZmNsayA9 IGRldl9wcml2LT52YnQubHZkc19zc2NfZnJlcTsKKwkJfQorCisJCWlmIChpbnRlbF9pc19kdWFs X2xpbmtfbHZkcyhkZXZfcHJpdikpIHsKKwkJCWlmIChyZWZjbGsgPT0gMTAwMDAwKQorCQkJCWxp bWl0ID0gJmlsa19saW1pdHNfZHVhbF9sdmRzXzEwMG07CisJCQllbHNlCisJCQkJbGltaXQgPSAm aWxrX2xpbWl0c19kdWFsX2x2ZHM7CisJCX0gZWxzZSB7CisJCQlpZiAocmVmY2xrID09IDEwMDAw MCkKKwkJCQlsaW1pdCA9ICZpbGtfbGltaXRzX3NpbmdsZV9sdmRzXzEwMG07CisJCQllbHNlCisJ CQkJbGltaXQgPSAmaWxrX2xpbWl0c19zaW5nbGVfbHZkczsKKwkJfQorCX0gZWxzZSB7CisJCWxp bWl0ID0gJmlsa19saW1pdHNfZGFjOworCX0KKworCWlmICghY3J0Y19zdGF0ZS0+Y2xvY2tfc2V0 ICYmCisJICAgICFnNHhfZmluZF9iZXN0X2RwbGwobGltaXQsIGNydGNfc3RhdGUsIGNydGNfc3Rh dGUtPnBvcnRfY2xvY2ssCisJCQkJcmVmY2xrLCBOVUxMLCAmY3J0Y19zdGF0ZS0+ZHBsbCkpIHsK KwkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwKKwkJCSJDb3VsZG4ndCBmaW5kIFBMTCBzZXR0aW5n cyBmb3IgbW9kZSFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpbGtfY29tcHV0ZV9k cGxsKGNydGMsIGNydGNfc3RhdGUsIE5VTEwpOworCisJaWYgKCFpbnRlbF9yZXNlcnZlX3NoYXJl ZF9kcGxscyhzdGF0ZSwgY3J0YywgTlVMTCkpIHsKKwkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5k cm0sCisJCQkgICAgImZhaWxlZCB0byBmaW5kIFBMTCBmb3IgcGlwZSAlY1xuIiwKKwkJCSAgICBw aXBlX25hbWUoY3J0Yy0+cGlwZSkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4g MDsKK30KKwordm9pZCB2bHZfY29tcHV0ZV9kcGxsKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAor CQkgICAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCit7CisJcGlwZV9j b25maWctPmRwbGxfaHdfc3RhdGUuZHBsbCA9IERQTExfSU5URUdSQVRFRF9SRUZfQ0xLX1ZMViB8 CisJCURQTExfUkVGX0NMS19FTkFCTEVfVkxWIHwgRFBMTF9WR0FfTU9ERV9ESVM7CisJaWYgKGNy dGMtPnBpcGUgIT0gUElQRV9BKQorCQlwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxsIHw9 IERQTExfSU5URUdSQVRFRF9DUklfQ0xLX1ZMVjsKKworCS8qIERQTEwgbm90IHVzZWQgd2l0aCBE U0ksIGJ1dCBzdGlsbCBuZWVkIHRoZSByZXN0IHNldCB1cCAqLworCWlmICghaW50ZWxfY3J0Y19o YXNfdHlwZShwaXBlX2NvbmZpZywgSU5URUxfT1VUUFVUX0RTSSkpCisJCXBpcGVfY29uZmlnLT5k cGxsX2h3X3N0YXRlLmRwbGwgfD0gRFBMTF9WQ09fRU5BQkxFIHwKKwkJCURQTExfRVhUX0JVRkZF Ul9FTkFCTEVfVkxWOworCisJcGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUuZHBsbF9tZCA9CisJ CShwaXBlX2NvbmZpZy0+cGl4ZWxfbXVsdGlwbGllciAtIDEpIDw8IERQTExfTURfVURJX01VTFRJ UExJRVJfU0hJRlQ7Cit9CisKK3ZvaWQgY2h2X2NvbXB1dGVfZHBsbChzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0YywKKwkJICAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQor eworCXBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRlLmRwbGwgPSBEUExMX1NTQ19SRUZfQ0xLX0NI ViB8CisJCURQTExfUkVGX0NMS19FTkFCTEVfVkxWIHwgRFBMTF9WR0FfTU9ERV9ESVM7CisJaWYg KGNydGMtPnBpcGUgIT0gUElQRV9BKQorCQlwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxs IHw9IERQTExfSU5URUdSQVRFRF9DUklfQ0xLX1ZMVjsKKworCS8qIERQTEwgbm90IHVzZWQgd2l0 aCBEU0ksIGJ1dCBzdGlsbCBuZWVkIHRoZSByZXN0IHNldCB1cCAqLworCWlmICghaW50ZWxfY3J0 Y19oYXNfdHlwZShwaXBlX2NvbmZpZywgSU5URUxfT1VUUFVUX0RTSSkpCisJCXBpcGVfY29uZmln LT5kcGxsX2h3X3N0YXRlLmRwbGwgfD0gRFBMTF9WQ09fRU5BQkxFOworCisJcGlwZV9jb25maWct PmRwbGxfaHdfc3RhdGUuZHBsbF9tZCA9CisJCShwaXBlX2NvbmZpZy0+cGl4ZWxfbXVsdGlwbGll ciAtIDEpIDw8IERQTExfTURfVURJX01VTFRJUExJRVJfU0hJRlQ7Cit9CisKK3N0YXRpYyBpbnQg Y2h2X2NydGNfY29tcHV0ZV9jbG9jayhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKKwkJCQkgIHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQoreworCWludCByZWZjbGsgPSAxMDAw MDA7CisJY29uc3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1pdCA9ICZpbnRlbF9saW1pdHNfY2h2 OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShjcnRjX3N0YXRlLT51 YXBpLmNydGMtPmRldik7CisKKwltZW1zZXQoJmNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUsIDAs CisJICAgICAgIHNpemVvZihjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlKSk7CisKKwlpZiAoIWNy dGNfc3RhdGUtPmNsb2NrX3NldCAmJgorCSAgICAhY2h2X2ZpbmRfYmVzdF9kcGxsKGxpbWl0LCBj cnRjX3N0YXRlLCBjcnRjX3N0YXRlLT5wb3J0X2Nsb2NrLAorCQkJCXJlZmNsaywgTlVMTCwgJmNy dGNfc3RhdGUtPmRwbGwpKSB7CisJCWRybV9lcnIoJmk5MTUtPmRybSwgIkNvdWxkbid0IGZpbmQg UExMIHNldHRpbmdzIGZvciBtb2RlIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNo dl9jb21wdXRlX2RwbGwoY3J0YywgY3J0Y19zdGF0ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCB2bHZfY3J0Y19jb21wdXRlX2Nsb2NrKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAor CQkJCSAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJaW50IHJlZmNs ayA9IDEwMDAwMDsKKwljb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgKmxpbWl0ID0gJmludGVsX2xp bWl0c192bHY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGNydGNf c3RhdGUtPnVhcGkuY3J0Yy0+ZGV2KTsKKworCW1lbXNldCgmY3J0Y19zdGF0ZS0+ZHBsbF9od19z dGF0ZSwgMCwKKwkgICAgICAgc2l6ZW9mKGNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUpKTsKKwor CWlmICghY3J0Y19zdGF0ZS0+Y2xvY2tfc2V0ICYmCisJICAgICF2bHZfZmluZF9iZXN0X2RwbGwo bGltaXQsIGNydGNfc3RhdGUsIGNydGNfc3RhdGUtPnBvcnRfY2xvY2ssCisJCQkJcmVmY2xrLCBO VUxMLCAmY3J0Y19zdGF0ZS0+ZHBsbCkpIHsKKwkJZHJtX2VycigmaTkxNS0+ZHJtLCAgIkNvdWxk bid0IGZpbmQgUExMIHNldHRpbmdzIGZvciBtb2RlIVxuIik7CisJCXJldHVybiAtRUlOVkFMOwor CX0KKworCXZsdl9jb21wdXRlX2RwbGwoY3J0YywgY3J0Y19zdGF0ZSk7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBnNHhfY3J0Y19jb21wdXRlX2Nsb2NrKHN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjLAorCQkJCSAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRl dik7CisJY29uc3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1pdDsKKwlpbnQgcmVmY2xrID0gOTYw MDA7CisKKwltZW1zZXQoJmNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUsIDAsCisJICAgICAgIHNp emVvZihjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlKSk7CisKKwlpZiAoaW50ZWxfY3J0Y19oYXNf dHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsKKwkJaWYgKGludGVsX3BhbmVs X3VzZV9zc2MoZGV2X3ByaXYpKSB7CisJCQlyZWZjbGsgPSBkZXZfcHJpdi0+dmJ0Lmx2ZHNfc3Nj X2ZyZXE7CisJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCQkgICAgInVzaW5nIFNT QyByZWZlcmVuY2UgY2xvY2sgb2YgJWQga0h6XG4iLAorCQkJCSAgICByZWZjbGspOworCQl9CisK KwkJaWYgKGludGVsX2lzX2R1YWxfbGlua19sdmRzKGRldl9wcml2KSkKKwkJCWxpbWl0ID0gJmlu dGVsX2xpbWl0c19nNHhfZHVhbF9jaGFubmVsX2x2ZHM7CisJCWVsc2UKKwkJCWxpbWl0ID0gJmlu dGVsX2xpbWl0c19nNHhfc2luZ2xlX2NoYW5uZWxfbHZkczsKKwl9IGVsc2UgaWYgKGludGVsX2Ny dGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0hETUkpIHx8CisJCSAgIGludGVs X2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0FOQUxPRykpIHsKKwkJbGlt aXQgPSAmaW50ZWxfbGltaXRzX2c0eF9oZG1pOworCX0gZWxzZSBpZiAoaW50ZWxfY3J0Y19oYXNf dHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfU0RWTykpIHsKKwkJbGltaXQgPSAmaW50ZWxf bGltaXRzX2c0eF9zZHZvOworCX0gZWxzZSB7CisJCS8qIFRoZSBvcHRpb24gaXMgZm9yIG90aGVy IG91dHB1dHMgKi8KKwkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2k5eHhfc2R2bzsKKwl9CisKKwlp ZiAoIWNydGNfc3RhdGUtPmNsb2NrX3NldCAmJgorCSAgICAhZzR4X2ZpbmRfYmVzdF9kcGxsKGxp bWl0LCBjcnRjX3N0YXRlLCBjcnRjX3N0YXRlLT5wb3J0X2Nsb2NrLAorCQkJCXJlZmNsaywgTlVM TCwgJmNydGNfc3RhdGUtPmRwbGwpKSB7CisJCWRybV9lcnIoJmRldl9wcml2LT5kcm0sCisJCQki Q291bGRuJ3QgZmluZCBQTEwgc2V0dGluZ3MgZm9yIG1vZGUhXG4iKTsKKwkJcmV0dXJuIC1FSU5W QUw7CisJfQorCisJaTl4eF9jb21wdXRlX2RwbGwoY3J0YywgY3J0Y19zdGF0ZSwgTlVMTCk7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwbnZfY3J0Y19jb21wdXRlX2Nsb2NrKHN0cnVj dCBpbnRlbF9jcnRjICpjcnRjLAorCQkJCSAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNf c3RhdGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmJhc2UuZGV2OworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKKwljb25zdCBz dHJ1Y3QgaW50ZWxfbGltaXQgKmxpbWl0OworCWludCByZWZjbGsgPSA5NjAwMDsKKworCW1lbXNl dCgmY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSwgMCwKKwkgICAgICAgc2l6ZW9mKGNydGNfc3Rh dGUtPmRwbGxfaHdfc3RhdGUpKTsKKworCWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3Rh dGUsIElOVEVMX09VVFBVVF9MVkRTKSkgeworCQlpZiAoaW50ZWxfcGFuZWxfdXNlX3NzYyhkZXZf cHJpdikpIHsKKwkJCXJlZmNsayA9IGRldl9wcml2LT52YnQubHZkc19zc2NfZnJlcTsKKwkJCWRy bV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJCSAgICAidXNpbmcgU1NDIHJlZmVyZW5jZSBj bG9jayBvZiAlZCBrSHpcbiIsCisJCQkJICAgIHJlZmNsayk7CisJCX0KKworCQlsaW1pdCA9ICZw bnZfbGltaXRzX2x2ZHM7CisJfSBlbHNlIHsKKwkJbGltaXQgPSAmcG52X2xpbWl0c19zZHZvOwor CX0KKworCWlmICghY3J0Y19zdGF0ZS0+Y2xvY2tfc2V0ICYmCisJICAgICFwbnZfZmluZF9iZXN0 X2RwbGwobGltaXQsIGNydGNfc3RhdGUsIGNydGNfc3RhdGUtPnBvcnRfY2xvY2ssCisJCQkJcmVm Y2xrLCBOVUxMLCAmY3J0Y19zdGF0ZS0+ZHBsbCkpIHsKKwkJZHJtX2VycigmZGV2X3ByaXYtPmRy bSwKKwkJCSJDb3VsZG4ndCBmaW5kIFBMTCBzZXR0aW5ncyBmb3IgbW9kZSFcbiIpOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKKwlpOXh4X2NvbXB1dGVfZHBsbChjcnRjLCBjcnRjX3N0YXRlLCBO VUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGk5eHhfY3J0Y19jb21wdXRlX2Ns b2NrKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAorCQkJCSAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNl LmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7 CisJY29uc3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1pdDsKKwlpbnQgcmVmY2xrID0gOTYwMDA7 CisKKwltZW1zZXQoJmNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUsIDAsCisJICAgICAgIHNpemVv ZihjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlKSk7CisKKwlpZiAoaW50ZWxfY3J0Y19oYXNfdHlw ZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsKKwkJaWYgKGludGVsX3BhbmVsX3Vz ZV9zc2MoZGV2X3ByaXYpKSB7CisJCQlyZWZjbGsgPSBkZXZfcHJpdi0+dmJ0Lmx2ZHNfc3NjX2Zy ZXE7CisJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCQkgICAgInVzaW5nIFNTQyBy ZWZlcmVuY2UgY2xvY2sgb2YgJWQga0h6XG4iLAorCQkJCSAgICByZWZjbGspOworCQl9CisKKwkJ bGltaXQgPSAmaW50ZWxfbGltaXRzX2k5eHhfbHZkczsKKwl9IGVsc2UgeworCQlsaW1pdCA9ICZp bnRlbF9saW1pdHNfaTl4eF9zZHZvOworCX0KKworCWlmICghY3J0Y19zdGF0ZS0+Y2xvY2tfc2V0 ICYmCisJICAgICFpOXh4X2ZpbmRfYmVzdF9kcGxsKGxpbWl0LCBjcnRjX3N0YXRlLCBjcnRjX3N0 YXRlLT5wb3J0X2Nsb2NrLAorCQkJCSByZWZjbGssIE5VTEwsICZjcnRjX3N0YXRlLT5kcGxsKSkg eworCQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLAorCQkJIkNvdWxkbid0IGZpbmQgUExMIHNldHRp bmdzIGZvciBtb2RlIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWk5eHhfY29tcHV0 ZV9kcGxsKGNydGMsIGNydGNfc3RhdGUsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgaTh4eF9jcnRjX2NvbXB1dGVfY2xvY2soc3RydWN0IGludGVsX2NydGMgKmNydGMsCisJ CQkJICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGNydGMtPmJhc2UuZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKKwljb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgKmxp bWl0OworCWludCByZWZjbGsgPSA0ODAwMDsKKworCW1lbXNldCgmY3J0Y19zdGF0ZS0+ZHBsbF9o d19zdGF0ZSwgMCwKKwkgICAgICAgc2l6ZW9mKGNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUpKTsK KworCWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9MVkRT KSkgeworCQlpZiAoaW50ZWxfcGFuZWxfdXNlX3NzYyhkZXZfcHJpdikpIHsKKwkJCXJlZmNsayA9 IGRldl9wcml2LT52YnQubHZkc19zc2NfZnJlcTsKKwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ ZHJtLAorCQkJCSAgICAidXNpbmcgU1NDIHJlZmVyZW5jZSBjbG9jayBvZiAlZCBrSHpcbiIsCisJ CQkJICAgIHJlZmNsayk7CisJCX0KKworCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfaTh4eF9sdmRz OworCX0gZWxzZSBpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQ VVRfRFZPKSkgeworCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfaTh4eF9kdm87CisJfSBlbHNlIHsK KwkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2k4eHhfZGFjOworCX0KKworCWlmICghY3J0Y19zdGF0 ZS0+Y2xvY2tfc2V0ICYmCisJICAgICFpOXh4X2ZpbmRfYmVzdF9kcGxsKGxpbWl0LCBjcnRjX3N0 YXRlLCBjcnRjX3N0YXRlLT5wb3J0X2Nsb2NrLAorCQkJCSByZWZjbGssIE5VTEwsICZjcnRjX3N0 YXRlLT5kcGxsKSkgeworCQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLAorCQkJIkNvdWxkbid0IGZp bmQgUExMIHNldHRpbmdzIGZvciBtb2RlIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwor CWk4eHhfY29tcHV0ZV9kcGxsKGNydGMsIGNydGNfc3RhdGUsIE5VTEwpOworCisJcmV0dXJuIDA7 Cit9CisKK3ZvaWQKK2ludGVsX2luaXRfY2xvY2tfaG9vayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpCit7CisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSB8fCBIQVNfRERJ KGRldl9wcml2KSkKKwkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19jb21wdXRlX2Nsb2NrID0gaHN3 X2NydGNfY29tcHV0ZV9jbG9jazsKKwllbHNlIGlmIChIQVNfUENIX1NQTElUKGRldl9wcml2KSkK KwkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19jb21wdXRlX2Nsb2NrID0gaWxrX2NydGNfY29tcHV0 ZV9jbG9jazsKKwllbHNlIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkKKwkJZGV2X3ByaXYt PmRpc3BsYXkuY3J0Y19jb21wdXRlX2Nsb2NrID0gY2h2X2NydGNfY29tcHV0ZV9jbG9jazsKKwll bHNlIGlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSkKKwkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0 Y19jb21wdXRlX2Nsb2NrID0gdmx2X2NydGNfY29tcHV0ZV9jbG9jazsKKwllbHNlIGlmIChJU19H NFgoZGV2X3ByaXYpKQorCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2NvbXB1dGVfY2xvY2sgPSBn NHhfY3J0Y19jb21wdXRlX2Nsb2NrOworCWVsc2UgaWYgKElTX1BJTkVWSUVXKGRldl9wcml2KSkK KwkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19jb21wdXRlX2Nsb2NrID0gcG52X2NydGNfY29tcHV0 ZV9jbG9jazsKKwllbHNlIGlmICghSVNfR0VOKGRldl9wcml2LCAyKSkKKwkJZGV2X3ByaXYtPmRp c3BsYXkuY3J0Y19jb21wdXRlX2Nsb2NrID0gaTl4eF9jcnRjX2NvbXB1dGVfY2xvY2s7CisJZWxz ZQorCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2NvbXB1dGVfY2xvY2sgPSBpOHh4X2NydGNfY29t cHV0ZV9jbG9jazsKK30KLS0gCjIuMjcuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaW50ZWwtZ2Z4Cg==