From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.7 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 60679C433E0 for ; Thu, 14 Jan 2021 09:05:41 +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 122E8221EF for ; Thu, 14 Jan 2021 09:05:41 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 122E8221EF 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 9B49B6E0A8; Thu, 14 Jan 2021 09:05:40 +0000 (UTC) Received: from us-smtp-delivery-44.mimecast.com (us-smtp-delivery-44.mimecast.com [205.139.111.44]) by gabe.freedesktop.org (Postfix) with ESMTPS id 25DD06E09F for ; Thu, 14 Jan 2021 09:05:39 +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-524-Smaz2aLwMkyViuQnd1Yw9w-1; Thu, 14 Jan 2021 04:05:33 -0500 X-MC-Unique: Smaz2aLwMkyViuQnd1Yw9w-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id DF3C71081B22; Thu, 14 Jan 2021 09:05:31 +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 2EFB810016FE; Thu, 14 Jan 2021 09:05:30 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Thu, 14 Jan 2021 19:05:13 +1000 Message-Id: <20210114090522.22750-3-airlied@gmail.com> In-Reply-To: <20210114090522.22750-1-airlied@gmail.com> References: <20210114090522.22750-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: gmail.com Subject: [Intel-gfx] [PATCH 02/11] drm/i915: refactor pll code out into intel_dpll.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: , Cc: Jani Nikula , Dave Airlie Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClRoaXMgcHVsbHMgYSBsYXJn ZSBjaHVuayBvZiB0aGUgcGxsIGNhbGN1bGF0aW9uIGNvZGUgb3V0IG9mCmludGVsX2Rpc3BsYXku YyB0byBhIG5ldyBmaWxlLgoKT25lIGZ1bmN0aW9uIG1ha2VzIHNlbnNlIHRvIGJlIGFuIGlubGlu ZSwgb3RoZXJ3aXNlIHRoaXMKaXMgcHJldHR5IG11Y2ggYSBzdHJhaWdodCBjb3B5IGNvdmVyLiBB bHNvIGFsbCB0aGUKcmVtYWluaW5nIGhvb2tzIGZvciBnNDUgYW5kIG9sZGVyIGVuZCB1cCB0aGUg c2FtZSBub3cuCgpTaWduZWQtb2ZmLWJ5OiBEYXZlIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29t PgpbSmFuaTogY2xlYW5lZCB1cCBpbnRlbF9kcGxsLmggYSBiaXQsIGRlLWR1cGVkIGludGVsX3Bh bmVsX3VzZV9zc2MoKS5dClNpZ25lZC1vZmYtYnk6IEphbmkgTmlrdWxhIDxqYW5pLm5pa3VsYUBp bnRlbC5jb20+ClJldmlld2VkLWJ5OiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGlu dXguaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAg ICAgICAgICB8ICAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNw bGF5LmMgIHwgMTQwMiArLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9kaXNwbGF5LmggIHwgICAgMyArCiAuLi4vZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9kaXNwbGF5X3R5cGVzLmggICAgfCAgIDEzICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3Bs YXkvaW50ZWxfZHBsbC5jICAgICB8IDEzNjMgKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcGxsLmggICAgIHwgICAyMyArCiA2IGZpbGVzIGNoYW5n ZWQsIDE0MTQgaW5zZXJ0aW9ucygrKSwgMTM5MSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwbGwuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBsbC5oCgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9NYWtlZmlsZQppbmRleCBjMGVkYjYxMGNhOTcuLjA0ODNkMmNjZjcxYiAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvTWFrZWZpbGUKQEAgLTIwMiw2ICsyMDIsNyBAQCBpOTE1LXkgKz0gXAogCWRpc3BsYXkvaW50 ZWxfZGlzcGxheS5vIFwKIAlkaXNwbGF5L2ludGVsX2Rpc3BsYXlfcG93ZXIubyBcCiAJZGlzcGxh eS9pbnRlbF9kcGlvX3BoeS5vIFwKKwlkaXNwbGF5L2ludGVsX2RwbGwubyBcCiAJZGlzcGxheS9p bnRlbF9kcGxsX21nci5vIFwKIAlkaXNwbGF5L2ludGVsX2RzYi5vIFwKIAlkaXNwbGF5L2ludGVs X2ZiYy5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf ZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMK aW5kZXggMzU2NWFiMTQ5MjlhLi45ODY3ZmQ3Zjk5MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSAi ZGlzcGxheS9pbnRlbF9kaXNwbGF5X2RlYnVnZnMuaCIKICNpbmNsdWRlICJkaXNwbGF5L2ludGVs X2RwLmgiCiAjaW5jbHVkZSAiZGlzcGxheS9pbnRlbF9kcF9tc3QuaCIKKyNpbmNsdWRlICJkaXNw bGF5L2ludGVsX2RwbGwuaCIKICNpbmNsdWRlICJkaXNwbGF5L2ludGVsX2RwbGxfbWdyLmgiCiAj aW5jbHVkZSAiZGlzcGxheS9pbnRlbF9kc2kuaCIKICNpbmNsdWRlICJkaXNwbGF5L2ludGVsX2R2 by5oIgpAQCAtMTE1LDE3ICsxMTYsNiBAQCBzdGF0aWMgdm9pZCBpbGtfcGZpdF9lbmFibGUoY29u c3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOwogc3RhdGljIHZvaWQgaW50 ZWxfbW9kZXNldF9zZXR1cF9od19zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCQkg c3RydWN0IGRybV9tb2Rlc2V0X2FjcXVpcmVfY3R4ICpjdHgpOwogCi1zdHJ1Y3QgaW50ZWxfbGlt aXQgewotCXN0cnVjdCB7Ci0JCWludCBtaW4sIG1heDsKLQl9IGRvdCwgdmNvLCBuLCBtLCBtMSwg bTIsIHAsIHAxOwotCi0Jc3RydWN0IHsKLQkJaW50IGRvdF9saW1pdDsKLQkJaW50IHAyX3Nsb3cs IHAyX2Zhc3Q7Ci0JfSBwMjsKLX07Ci0KIC8qIHJldHVybnMgSFBMTCBmcmVxdWVuY3kgaW4ga0h6 ICovCiBpbnQgdmx2X2dldF9ocGxsX3ZjbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCiB7CkBAIC0xOTMsMjcxICsxODMsNiBAQCBzdGF0aWMgdTMyIGludGVsX2ZkaV9saW5rX2Zy ZXEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQlyZXR1cm4gZGV2X3ByaXYt PmZkaV9wbGxfZnJlcTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbnRl bF9saW1pdHNfaTh4eF9kYWMgPSB7Ci0JLmRvdCA9IHsgLm1pbiA9IDI1MDAwLCAubWF4ID0gMzUw MDAwIH0sCi0JLnZjbyA9IHsgLm1pbiA9IDkwODAwMCwgLm1heCA9IDE1MTIwMDAgfSwKLQkubiA9 IHsgLm1pbiA9IDIsIC5tYXggPSAxNiB9LAotCS5tID0geyAubWluID0gOTYsIC5tYXggPSAxNDAg fSwKLQkubTEgPSB7IC5taW4gPSAxOCwgLm1heCA9IDI2IH0sCi0JLm0yID0geyAubWluID0gNiwg Lm1heCA9IDE2IH0sCi0JLnAgPSB7IC5taW4gPSA0LCAubWF4ID0gMTI4IH0sCi0JLnAxID0geyAu bWluID0gMiwgLm1heCA9IDMzIH0sCi0JLnAyID0geyAuZG90X2xpbWl0ID0gMTY1MDAwLAotCQku cDJfc2xvdyA9IDQsIC5wMl9mYXN0ID0gMiB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBp bnRlbF9saW1pdCBpbnRlbF9saW1pdHNfaTh4eF9kdm8gPSB7Ci0JLmRvdCA9IHsgLm1pbiA9IDI1 MDAwLCAubWF4ID0gMzUwMDAwIH0sCi0JLnZjbyA9IHsgLm1pbiA9IDkwODAwMCwgLm1heCA9IDE1 MTIwMDAgfSwKLQkubiA9IHsgLm1pbiA9IDIsIC5tYXggPSAxNiB9LAotCS5tID0geyAubWluID0g OTYsIC5tYXggPSAxNDAgfSwKLQkubTEgPSB7IC5taW4gPSAxOCwgLm1heCA9IDI2IH0sCi0JLm0y ID0geyAubWluID0gNiwgLm1heCA9IDE2IH0sCi0JLnAgPSB7IC5taW4gPSA0LCAubWF4ID0gMTI4 IH0sCi0JLnAxID0geyAubWluID0gMiwgLm1heCA9IDMzIH0sCi0JLnAyID0geyAuZG90X2xpbWl0 ID0gMTY1MDAwLAotCQkucDJfc2xvdyA9IDQsIC5wMl9mYXN0ID0gNCB9LAotfTsKLQotc3RhdGlj IGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbnRlbF9saW1pdHNfaTh4eF9sdmRzID0gewotCS5k b3QgPSB7IC5taW4gPSAyNTAwMCwgLm1heCA9IDM1MDAwMCB9LAotCS52Y28gPSB7IC5taW4gPSA5 MDgwMDAsIC5tYXggPSAxNTEyMDAwIH0sCi0JLm4gPSB7IC5taW4gPSAyLCAubWF4ID0gMTYgfSwK LQkubSA9IHsgLm1pbiA9IDk2LCAubWF4ID0gMTQwIH0sCi0JLm0xID0geyAubWluID0gMTgsIC5t YXggPSAyNiB9LAotCS5tMiA9IHsgLm1pbiA9IDYsIC5tYXggPSAxNiB9LAotCS5wID0geyAubWlu ID0gNCwgLm1heCA9IDEyOCB9LAotCS5wMSA9IHsgLm1pbiA9IDEsIC5tYXggPSA2IH0sCi0JLnAy ID0geyAuZG90X2xpbWl0ID0gMTY1MDAwLAotCQkucDJfc2xvdyA9IDE0LCAucDJfZmFzdCA9IDcg fSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaW50ZWxfbGltaXRzX2k5 eHhfc2R2byA9IHsKLQkuZG90ID0geyAubWluID0gMjAwMDAsIC5tYXggPSA0MDAwMDAgfSwKLQku dmNvID0geyAubWluID0gMTQwMDAwMCwgLm1heCA9IDI4MDAwMDAgfSwKLQkubiA9IHsgLm1pbiA9 IDEsIC5tYXggPSA2IH0sCi0JLm0gPSB7IC5taW4gPSA3MCwgLm1heCA9IDEyMCB9LAotCS5tMSA9 IHsgLm1pbiA9IDgsIC5tYXggPSAxOCB9LAotCS5tMiA9IHsgLm1pbiA9IDMsIC5tYXggPSA3IH0s Ci0JLnAgPSB7IC5taW4gPSA1LCAubWF4ID0gODAgfSwKLQkucDEgPSB7IC5taW4gPSAxLCAubWF4 ID0gOCB9LAotCS5wMiA9IHsgLmRvdF9saW1pdCA9IDIwMDAwMCwKLQkJLnAyX3Nsb3cgPSAxMCwg LnAyX2Zhc3QgPSA1IH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGlu dGVsX2xpbWl0c19pOXh4X2x2ZHMgPSB7Ci0JLmRvdCA9IHsgLm1pbiA9IDIwMDAwLCAubWF4ID0g NDAwMDAwIH0sCi0JLnZjbyA9IHsgLm1pbiA9IDE0MDAwMDAsIC5tYXggPSAyODAwMDAwIH0sCi0J Lm4gPSB7IC5taW4gPSAxLCAubWF4ID0gNiB9LAotCS5tID0geyAubWluID0gNzAsIC5tYXggPSAx MjAgfSwKLQkubTEgPSB7IC5taW4gPSA4LCAubWF4ID0gMTggfSwKLQkubTIgPSB7IC5taW4gPSAz LCAubWF4ID0gNyB9LAotCS5wID0geyAubWluID0gNywgLm1heCA9IDk4IH0sCi0JLnAxID0geyAu bWluID0gMSwgLm1heCA9IDggfSwKLQkucDIgPSB7IC5kb3RfbGltaXQgPSAxMTIwMDAsCi0JCS5w Ml9zbG93ID0gMTQsIC5wMl9mYXN0ID0gNyB9LAotfTsKLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0 IGludGVsX2xpbWl0IGludGVsX2xpbWl0c19nNHhfc2R2byA9IHsKLQkuZG90ID0geyAubWluID0g MjUwMDAsIC5tYXggPSAyNzAwMDAgfSwKLQkudmNvID0geyAubWluID0gMTc1MDAwMCwgLm1heCA9 IDM1MDAwMDB9LAotCS5uID0geyAubWluID0gMSwgLm1heCA9IDQgfSwKLQkubSA9IHsgLm1pbiA9 IDEwNCwgLm1heCA9IDEzOCB9LAotCS5tMSA9IHsgLm1pbiA9IDE3LCAubWF4ID0gMjMgfSwKLQku bTIgPSB7IC5taW4gPSA1LCAubWF4ID0gMTEgfSwKLQkucCA9IHsgLm1pbiA9IDEwLCAubWF4ID0g MzAgfSwKLQkucDEgPSB7IC5taW4gPSAxLCAubWF4ID0gM30sCi0JLnAyID0geyAuZG90X2xpbWl0 ID0gMjcwMDAwLAotCQkucDJfc2xvdyA9IDEwLAotCQkucDJfZmFzdCA9IDEwCi0JfSwKLX07Ci0K LXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaW50ZWxfbGltaXRzX2c0eF9oZG1pID0g ewotCS5kb3QgPSB7IC5taW4gPSAyMjAwMCwgLm1heCA9IDQwMDAwMCB9LAotCS52Y28gPSB7IC5t aW4gPSAxNzUwMDAwLCAubWF4ID0gMzUwMDAwMH0sCi0JLm4gPSB7IC5taW4gPSAxLCAubWF4ID0g NCB9LAotCS5tID0geyAubWluID0gMTA0LCAubWF4ID0gMTM4IH0sCi0JLm0xID0geyAubWluID0g MTYsIC5tYXggPSAyMyB9LAotCS5tMiA9IHsgLm1pbiA9IDUsIC5tYXggPSAxMSB9LAotCS5wID0g eyAubWluID0gNSwgLm1heCA9IDgwIH0sCi0JLnAxID0geyAubWluID0gMSwgLm1heCA9IDh9LAot CS5wMiA9IHsgLmRvdF9saW1pdCA9IDE2NTAwMCwKLQkJLnAyX3Nsb3cgPSAxMCwgLnAyX2Zhc3Qg PSA1IH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGludGVsX2xpbWl0 c19nNHhfc2luZ2xlX2NoYW5uZWxfbHZkcyA9IHsKLQkuZG90ID0geyAubWluID0gMjAwMDAsIC5t YXggPSAxMTUwMDAgfSwKLQkudmNvID0geyAubWluID0gMTc1MDAwMCwgLm1heCA9IDM1MDAwMDAg fSwKLQkubiA9IHsgLm1pbiA9IDEsIC5tYXggPSAzIH0sCi0JLm0gPSB7IC5taW4gPSAxMDQsIC5t YXggPSAxMzggfSwKLQkubTEgPSB7IC5taW4gPSAxNywgLm1heCA9IDIzIH0sCi0JLm0yID0geyAu bWluID0gNSwgLm1heCA9IDExIH0sCi0JLnAgPSB7IC5taW4gPSAyOCwgLm1heCA9IDExMiB9LAot CS5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSA4IH0sCi0JLnAyID0geyAuZG90X2xpbWl0ID0gMCwK LQkJLnAyX3Nsb3cgPSAxNCwgLnAyX2Zhc3QgPSAxNAotCX0sCi19OwotCi1zdGF0aWMgY29uc3Qg c3RydWN0IGludGVsX2xpbWl0IGludGVsX2xpbWl0c19nNHhfZHVhbF9jaGFubmVsX2x2ZHMgPSB7 Ci0JLmRvdCA9IHsgLm1pbiA9IDgwMDAwLCAubWF4ID0gMjI0MDAwIH0sCi0JLnZjbyA9IHsgLm1p biA9IDE3NTAwMDAsIC5tYXggPSAzNTAwMDAwIH0sCi0JLm4gPSB7IC5taW4gPSAxLCAubWF4ID0g MyB9LAotCS5tID0geyAubWluID0gMTA0LCAubWF4ID0gMTM4IH0sCi0JLm0xID0geyAubWluID0g MTcsIC5tYXggPSAyMyB9LAotCS5tMiA9IHsgLm1pbiA9IDUsIC5tYXggPSAxMSB9LAotCS5wID0g eyAubWluID0gMTQsIC5tYXggPSA0MiB9LAotCS5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSA2IH0s Ci0JLnAyID0geyAuZG90X2xpbWl0ID0gMCwKLQkJLnAyX3Nsb3cgPSA3LCAucDJfZmFzdCA9IDcK LQl9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBwbnZfbGltaXRzX3Nk dm8gPSB7Ci0JLmRvdCA9IHsgLm1pbiA9IDIwMDAwLCAubWF4ID0gNDAwMDAwfSwKLQkudmNvID0g eyAubWluID0gMTcwMDAwMCwgLm1heCA9IDM1MDAwMDAgfSwKLQkvKiBQaW5ldmlldydzIE5jb3Vu dGVyIGlzIGEgcmluZyBjb3VudGVyICovCi0JLm4gPSB7IC5taW4gPSAzLCAubWF4ID0gNiB9LAot CS5tID0geyAubWluID0gMiwgLm1heCA9IDI1NiB9LAotCS8qIFBpbmV2aWV3IG9ubHkgaGFzIG9u ZSBjb21iaW5lZCBtIGRpdmlkZXIsIHdoaWNoIHdlIHRyZWF0IGFzIG0yLiAqLwotCS5tMSA9IHsg Lm1pbiA9IDAsIC5tYXggPSAwIH0sCi0JLm0yID0geyAubWluID0gMCwgLm1heCA9IDI1NCB9LAot CS5wID0geyAubWluID0gNSwgLm1heCA9IDgwIH0sCi0JLnAxID0geyAubWluID0gMSwgLm1heCA9 IDggfSwKLQkucDIgPSB7IC5kb3RfbGltaXQgPSAyMDAwMDAsCi0JCS5wMl9zbG93ID0gMTAsIC5w Ml9mYXN0ID0gNSB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBwbnZf bGltaXRzX2x2ZHMgPSB7Ci0JLmRvdCA9IHsgLm1pbiA9IDIwMDAwLCAubWF4ID0gNDAwMDAwIH0s Ci0JLnZjbyA9IHsgLm1pbiA9IDE3MDAwMDAsIC5tYXggPSAzNTAwMDAwIH0sCi0JLm4gPSB7IC5t aW4gPSAzLCAubWF4ID0gNiB9LAotCS5tID0geyAubWluID0gMiwgLm1heCA9IDI1NiB9LAotCS5t MSA9IHsgLm1pbiA9IDAsIC5tYXggPSAwIH0sCi0JLm0yID0geyAubWluID0gMCwgLm1heCA9IDI1 NCB9LAotCS5wID0geyAubWluID0gNywgLm1heCA9IDExMiB9LAotCS5wMSA9IHsgLm1pbiA9IDEs IC5tYXggPSA4IH0sCi0JLnAyID0geyAuZG90X2xpbWl0ID0gMTEyMDAwLAotCQkucDJfc2xvdyA9 IDE0LCAucDJfZmFzdCA9IDE0IH0sCi19OwotCi0vKiBJcm9ubGFrZSAvIFNhbmR5YnJpZGdlCi0g KgotICogV2UgY2FsY3VsYXRlIGNsb2NrIHVzaW5nIChyZWdpc3Rlcl92YWx1ZSArIDIpIGZvciBO L00xL00yLCBzbyBoZXJlCi0gKiB0aGUgcmFuZ2UgdmFsdWUgZm9yIHRoZW0gaXMgKGFjdHVhbF92 YWx1ZSAtIDIpLgotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGlsa19saW1p dHNfZGFjID0gewotCS5kb3QgPSB7IC5taW4gPSAyNTAwMCwgLm1heCA9IDM1MDAwMCB9LAotCS52 Y28gPSB7IC5taW4gPSAxNzYwMDAwLCAubWF4ID0gMzUxMDAwMCB9LAotCS5uID0geyAubWluID0g MSwgLm1heCA9IDUgfSwKLQkubSA9IHsgLm1pbiA9IDc5LCAubWF4ID0gMTI3IH0sCi0JLm0xID0g eyAubWluID0gMTIsIC5tYXggPSAyMiB9LAotCS5tMiA9IHsgLm1pbiA9IDUsIC5tYXggPSA5IH0s Ci0JLnAgPSB7IC5taW4gPSA1LCAubWF4ID0gODAgfSwKLQkucDEgPSB7IC5taW4gPSAxLCAubWF4 ID0gOCB9LAotCS5wMiA9IHsgLmRvdF9saW1pdCA9IDIyNTAwMCwKLQkJLnAyX3Nsb3cgPSAxMCwg LnAyX2Zhc3QgPSA1IH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGls a19saW1pdHNfc2luZ2xlX2x2ZHMgPSB7Ci0JLmRvdCA9IHsgLm1pbiA9IDI1MDAwLCAubWF4ID0g MzUwMDAwIH0sCi0JLnZjbyA9IHsgLm1pbiA9IDE3NjAwMDAsIC5tYXggPSAzNTEwMDAwIH0sCi0J Lm4gPSB7IC5taW4gPSAxLCAubWF4ID0gMyB9LAotCS5tID0geyAubWluID0gNzksIC5tYXggPSAx MTggfSwKLQkubTEgPSB7IC5taW4gPSAxMiwgLm1heCA9IDIyIH0sCi0JLm0yID0geyAubWluID0g NSwgLm1heCA9IDkgfSwKLQkucCA9IHsgLm1pbiA9IDI4LCAubWF4ID0gMTEyIH0sCi0JLnAxID0g eyAubWluID0gMiwgLm1heCA9IDggfSwKLQkucDIgPSB7IC5kb3RfbGltaXQgPSAyMjUwMDAsCi0J CS5wMl9zbG93ID0gMTQsIC5wMl9mYXN0ID0gMTQgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1 Y3QgaW50ZWxfbGltaXQgaWxrX2xpbWl0c19kdWFsX2x2ZHMgPSB7Ci0JLmRvdCA9IHsgLm1pbiA9 IDI1MDAwLCAubWF4ID0gMzUwMDAwIH0sCi0JLnZjbyA9IHsgLm1pbiA9IDE3NjAwMDAsIC5tYXgg PSAzNTEwMDAwIH0sCi0JLm4gPSB7IC5taW4gPSAxLCAubWF4ID0gMyB9LAotCS5tID0geyAubWlu ID0gNzksIC5tYXggPSAxMjcgfSwKLQkubTEgPSB7IC5taW4gPSAxMiwgLm1heCA9IDIyIH0sCi0J Lm0yID0geyAubWluID0gNSwgLm1heCA9IDkgfSwKLQkucCA9IHsgLm1pbiA9IDE0LCAubWF4ID0g NTYgfSwKLQkucDEgPSB7IC5taW4gPSAyLCAubWF4ID0gOCB9LAotCS5wMiA9IHsgLmRvdF9saW1p dCA9IDIyNTAwMCwKLQkJLnAyX3Nsb3cgPSA3LCAucDJfZmFzdCA9IDcgfSwKLX07Ci0KLS8qIExW RFMgMTAwbWh6IHJlZmNsayBsaW1pdHMuICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xp bWl0IGlsa19saW1pdHNfc2luZ2xlX2x2ZHNfMTAwbSA9IHsKLQkuZG90ID0geyAubWluID0gMjUw MDAsIC5tYXggPSAzNTAwMDAgfSwKLQkudmNvID0geyAubWluID0gMTc2MDAwMCwgLm1heCA9IDM1 MTAwMDAgfSwKLQkubiA9IHsgLm1pbiA9IDEsIC5tYXggPSAyIH0sCi0JLm0gPSB7IC5taW4gPSA3 OSwgLm1heCA9IDEyNiB9LAotCS5tMSA9IHsgLm1pbiA9IDEyLCAubWF4ID0gMjIgfSwKLQkubTIg PSB7IC5taW4gPSA1LCAubWF4ID0gOSB9LAotCS5wID0geyAubWluID0gMjgsIC5tYXggPSAxMTIg fSwKLQkucDEgPSB7IC5taW4gPSAyLCAubWF4ID0gOCB9LAotCS5wMiA9IHsgLmRvdF9saW1pdCA9 IDIyNTAwMCwKLQkJLnAyX3Nsb3cgPSAxNCwgLnAyX2Zhc3QgPSAxNCB9LAotfTsKLQotc3RhdGlj IGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbGtfbGltaXRzX2R1YWxfbHZkc18xMDBtID0gewot CS5kb3QgPSB7IC5taW4gPSAyNTAwMCwgLm1heCA9IDM1MDAwMCB9LAotCS52Y28gPSB7IC5taW4g PSAxNzYwMDAwLCAubWF4ID0gMzUxMDAwMCB9LAotCS5uID0geyAubWluID0gMSwgLm1heCA9IDMg fSwKLQkubSA9IHsgLm1pbiA9IDc5LCAubWF4ID0gMTI2IH0sCi0JLm0xID0geyAubWluID0gMTIs IC5tYXggPSAyMiB9LAotCS5tMiA9IHsgLm1pbiA9IDUsIC5tYXggPSA5IH0sCi0JLnAgPSB7IC5t aW4gPSAxNCwgLm1heCA9IDQyIH0sCi0JLnAxID0geyAubWluID0gMiwgLm1heCA9IDYgfSwKLQku cDIgPSB7IC5kb3RfbGltaXQgPSAyMjUwMDAsCi0JCS5wMl9zbG93ID0gNywgLnAyX2Zhc3QgPSA3 IH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGludGVsX2xpbWl0c192 bHYgPSB7Ci0JIC8qCi0JICAqIFRoZXNlIGFyZSB0aGUgZGF0YSByYXRlIGxpbWl0cyAobWVhc3Vy ZWQgaW4gZmFzdCBjbG9ja3MpCi0JICAqIHNpbmNlIHRob3NlIGFyZSB0aGUgc3RyaWN0ZXN0IGxp bWl0cyB3ZSBoYXZlLiBUaGUgZmFzdAotCSAgKiBjbG9jayBhbmQgYWN0dWFsIHJhdGUgbGltaXRz IGFyZSBtb3JlIHJlbGF4ZWQsIHNvIGNoZWNraW5nCi0JICAqIHRoZW0gd291bGQgbWFrZSBubyBk aWZmZXJlbmNlLgotCSAgKi8KLQkuZG90ID0geyAubWluID0gMjUwMDAgKiA1LCAubWF4ID0gMjcw MDAwICogNSB9LAotCS52Y28gPSB7IC5taW4gPSA0MDAwMDAwLCAubWF4ID0gNjAwMDAwMCB9LAot CS5uID0geyAubWluID0gMSwgLm1heCA9IDcgfSwKLQkubTEgPSB7IC5taW4gPSAyLCAubWF4ID0g MyB9LAotCS5tMiA9IHsgLm1pbiA9IDExLCAubWF4ID0gMTU2IH0sCi0JLnAxID0geyAubWluID0g MiwgLm1heCA9IDMgfSwKLQkucDIgPSB7IC5wMl9zbG93ID0gMiwgLnAyX2Zhc3QgPSAyMCB9LCAv KiBzbG93PW1pbiwgZmFzdD1tYXggKi8KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxf bGltaXQgaW50ZWxfbGltaXRzX2NodiA9IHsKLQkvKgotCSAqIFRoZXNlIGFyZSB0aGUgZGF0YSBy YXRlIGxpbWl0cyAobWVhc3VyZWQgaW4gZmFzdCBjbG9ja3MpCi0JICogc2luY2UgdGhvc2UgYXJl IHRoZSBzdHJpY3Rlc3QgbGltaXRzIHdlIGhhdmUuICBUaGUgZmFzdAotCSAqIGNsb2NrIGFuZCBh Y3R1YWwgcmF0ZSBsaW1pdHMgYXJlIG1vcmUgcmVsYXhlZCwgc28gY2hlY2tpbmcKLQkgKiB0aGVt IHdvdWxkIG1ha2Ugbm8gZGlmZmVyZW5jZS4KLQkgKi8KLQkuZG90ID0geyAubWluID0gMjUwMDAg KiA1LCAubWF4ID0gNTQwMDAwICogNX0sCi0JLnZjbyA9IHsgLm1pbiA9IDQ4MDAwMDAsIC5tYXgg PSA2NDgwMDAwIH0sCi0JLm4gPSB7IC5taW4gPSAxLCAubWF4ID0gMSB9LAotCS5tMSA9IHsgLm1p biA9IDIsIC5tYXggPSAyIH0sCi0JLm0yID0geyAubWluID0gMjQgPDwgMjIsIC5tYXggPSAxNzUg PDwgMjIgfSwKLQkucDEgPSB7IC5taW4gPSAyLCAubWF4ID0gNCB9LAotCS5wMiA9IHsJLnAyX3Ns b3cgPSAxLCAucDJfZmFzdCA9IDE0IH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGludGVs X2xpbWl0IGludGVsX2xpbWl0c19ieHQgPSB7Ci0JLyogRklYTUU6IGZpbmQgcmVhbCBkb3QgbGlt aXRzICovCi0JLmRvdCA9IHsgLm1pbiA9IDAsIC5tYXggPSBJTlRfTUFYIH0sCi0JLnZjbyA9IHsg Lm1pbiA9IDQ4MDAwMDAsIC5tYXggPSA2NzAwMDAwIH0sCi0JLm4gPSB7IC5taW4gPSAxLCAubWF4 ID0gMSB9LAotCS5tMSA9IHsgLm1pbiA9IDIsIC5tYXggPSAyIH0sCi0JLyogRklYTUU6IGZpbmQg cmVhbCBtMiBsaW1pdHMgKi8KLQkubTIgPSB7IC5taW4gPSAyIDw8IDIyLCAubWF4ID0gMjU1IDw8 IDIyIH0sCi0JLnAxID0geyAubWluID0gMiwgLm1heCA9IDQgfSwKLQkucDIgPSB7IC5wMl9zbG93 ID0gMSwgLnAyX2Zhc3QgPSAyMCB9LAotfTsKLQogLyogV0EgRGlzcGxheSAjMDgyNzogR2VuOTph bGwgKi8KIHN0YXRpYyB2b2lkCiBza2xfd2FfODI3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUsIGJvb2wgZW5hYmxlKQpAQCAtNTAyLDQ4MyArMjI3LDYg QEAgaXNfdHJhbnNfcG9ydF9zeW5jX21vZGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUpCiAJCWlzX3RyYW5zX3BvcnRfc3luY19zbGF2ZShjcnRjX3N0YXRlKTsKIH0K IAotLyoKLSAqIFBsYXRmb3JtIHNwZWNpZmljIGhlbHBlcnMgdG8gY2FsY3VsYXRlIHRoZSBwb3J0 IFBMTCBsb29wYmFjay0gKGNsb2NrLm0pLAotICogYW5kIHBvc3QtZGl2aWRlciAoY2xvY2sucCkg dmFsdWVzLCBwcmUtIChjbG9jay52Y28pIGFuZCBwb3N0LWRpdmlkZWQgZmFzdAotICogKGNsb2Nr LmRvdCkgY2xvY2sgcmF0ZXMuIFRoaXMgZmFzdCBkb3QgY2xvY2sgaXMgZmVkIHRvIHRoZSBwb3J0 J3MgSU8gbG9naWMuCi0gKiBUaGUgaGVscGVycycgcmV0dXJuIHZhbHVlIGlzIHRoZSByYXRlIG9m IHRoZSBjbG9jayB0aGF0IGlzIGZlZCB0byB0aGUKLSAqIGRpc3BsYXkgZW5naW5lJ3MgcGlwZSB3 aGljaCBjYW4gYmUgdGhlIGFib3ZlIGZhc3QgZG90IGNsb2NrIHJhdGUgb3IgYQotICogZGl2aWRl ZC1kb3duIHZlcnNpb24gb2YgaXQuCi0gKi8KLS8qIG0xIGlzIHJlc2VydmVkIGFzIDAgaW4gUGlu ZXZpZXcsIG4gaXMgYSByaW5nIGNvdW50ZXIgKi8KLXN0YXRpYyBpbnQgcG52X2NhbGNfZHBsbF9w YXJhbXMoaW50IHJlZmNsaywgc3RydWN0IGRwbGwgKmNsb2NrKQotewotCWNsb2NrLT5tID0gY2xv Y2stPm0yICsgMjsKLQljbG9jay0+cCA9IGNsb2NrLT5wMSAqIGNsb2NrLT5wMjsKLQlpZiAoV0FS Tl9PTihjbG9jay0+biA9PSAwIHx8IGNsb2NrLT5wID09IDApKQotCQlyZXR1cm4gMDsKLQljbG9j ay0+dmNvID0gRElWX1JPVU5EX0NMT1NFU1QocmVmY2xrICogY2xvY2stPm0sIGNsb2NrLT5uKTsK LQljbG9jay0+ZG90ID0gRElWX1JPVU5EX0NMT1NFU1QoY2xvY2stPnZjbywgY2xvY2stPnApOwot Ci0JcmV0dXJuIGNsb2NrLT5kb3Q7Ci19Ci0KLXN0YXRpYyB1MzIgaTl4eF9kcGxsX2NvbXB1dGVf bShzdHJ1Y3QgZHBsbCAqZHBsbCkKLXsKLQlyZXR1cm4gNSAqIChkcGxsLT5tMSArIDIpICsgKGRw bGwtPm0yICsgMik7Ci19Ci0KLXN0YXRpYyBpbnQgaTl4eF9jYWxjX2RwbGxfcGFyYW1zKGludCBy ZWZjbGssIHN0cnVjdCBkcGxsICpjbG9jaykKLXsKLQljbG9jay0+bSA9IGk5eHhfZHBsbF9jb21w dXRlX20oY2xvY2spOwotCWNsb2NrLT5wID0gY2xvY2stPnAxICogY2xvY2stPnAyOwotCWlmIChX QVJOX09OKGNsb2NrLT5uICsgMiA9PSAwIHx8IGNsb2NrLT5wID09IDApKQotCQlyZXR1cm4gMDsK LQljbG9jay0+dmNvID0gRElWX1JPVU5EX0NMT1NFU1QocmVmY2xrICogY2xvY2stPm0sIGNsb2Nr LT5uICsgMik7Ci0JY2xvY2stPmRvdCA9IERJVl9ST1VORF9DTE9TRVNUKGNsb2NrLT52Y28sIGNs b2NrLT5wKTsKLQotCXJldHVybiBjbG9jay0+ZG90OwotfQotCi1zdGF0aWMgaW50IHZsdl9jYWxj X2RwbGxfcGFyYW1zKGludCByZWZjbGssIHN0cnVjdCBkcGxsICpjbG9jaykKLXsKLQljbG9jay0+ bSA9IGNsb2NrLT5tMSAqIGNsb2NrLT5tMjsKLQljbG9jay0+cCA9IGNsb2NrLT5wMSAqIGNsb2Nr LT5wMjsKLQlpZiAoV0FSTl9PTihjbG9jay0+biA9PSAwIHx8IGNsb2NrLT5wID09IDApKQotCQly ZXR1cm4gMDsKLQljbG9jay0+dmNvID0gRElWX1JPVU5EX0NMT1NFU1QocmVmY2xrICogY2xvY2st Pm0sIGNsb2NrLT5uKTsKLQljbG9jay0+ZG90ID0gRElWX1JPVU5EX0NMT1NFU1QoY2xvY2stPnZj bywgY2xvY2stPnApOwotCi0JcmV0dXJuIGNsb2NrLT5kb3QgLyA1OwotfQotCi1pbnQgY2h2X2Nh bGNfZHBsbF9wYXJhbXMoaW50IHJlZmNsaywgc3RydWN0IGRwbGwgKmNsb2NrKQotewotCWNsb2Nr LT5tID0gY2xvY2stPm0xICogY2xvY2stPm0yOwotCWNsb2NrLT5wID0gY2xvY2stPnAxICogY2xv Y2stPnAyOwotCWlmIChXQVJOX09OKGNsb2NrLT5uID09IDAgfHwgY2xvY2stPnAgPT0gMCkpCi0J CXJldHVybiAwOwotCWNsb2NrLT52Y28gPSBESVZfUk9VTkRfQ0xPU0VTVF9VTEwobXVsX3UzMl91 MzIocmVmY2xrLCBjbG9jay0+bSksCi0JCQkJCSAgIGNsb2NrLT5uIDw8IDIyKTsKLQljbG9jay0+ ZG90ID0gRElWX1JPVU5EX0NMT1NFU1QoY2xvY2stPnZjbywgY2xvY2stPnApOwotCi0JcmV0dXJu IGNsb2NrLT5kb3QgLyA1OwotfQotCi0vKgotICogUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBz ZXQgb2YgZGl2aXNvcnMgYXJlIHZhbGlkIGZvciBhIGdpdmVuIHJlZmNsayB3aXRoCi0gKiB0aGUg Z2l2ZW4gY29ubmVjdG9ycy4KLSAqLwotc3RhdGljIGJvb2wgaW50ZWxfcGxsX2lzX3ZhbGlkKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qg aW50ZWxfbGltaXQgKmxpbWl0LAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcGxsICpjbG9jaykK LXsKLQlpZiAoY2xvY2stPm4gPCBsaW1pdC0+bi5taW4gfHwgbGltaXQtPm4ubWF4IDwgY2xvY2st Pm4pCi0JCXJldHVybiBmYWxzZTsKLQlpZiAoY2xvY2stPnAxIDwgbGltaXQtPnAxLm1pbiB8fCBs aW1pdC0+cDEubWF4IDwgY2xvY2stPnAxKQotCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKGNsb2NrLT5t MiA8IGxpbWl0LT5tMi5taW4gfHwgbGltaXQtPm0yLm1heCA8IGNsb2NrLT5tMikKLQkJcmV0dXJu IGZhbHNlOwotCWlmIChjbG9jay0+bTEgPCBsaW1pdC0+bTEubWluIHx8IGxpbWl0LT5tMS5tYXgg PCBjbG9jay0+bTEpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmICghSVNfUElORVZJRVcoZGV2X3By aXYpICYmICFJU19WQUxMRVlWSUVXKGRldl9wcml2KSAmJgotCSAgICAhSVNfQ0hFUlJZVklFVyhk ZXZfcHJpdikgJiYgIUlTX0dFTjlfTFAoZGV2X3ByaXYpKQotCQlpZiAoY2xvY2stPm0xIDw9IGNs b2NrLT5tMikKLQkJCXJldHVybiBmYWxzZTsKLQotCWlmICghSVNfVkFMTEVZVklFVyhkZXZfcHJp dikgJiYgIUlTX0NIRVJSWVZJRVcoZGV2X3ByaXYpICYmCi0JICAgICFJU19HRU45X0xQKGRldl9w cml2KSkgewotCQlpZiAoY2xvY2stPnAgPCBsaW1pdC0+cC5taW4gfHwgbGltaXQtPnAubWF4IDwg Y2xvY2stPnApCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCWlmIChjbG9jay0+bSA8IGxpbWl0LT5tLm1p biB8fCBsaW1pdC0+bS5tYXggPCBjbG9jay0+bSkKLQkJCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlp ZiAoY2xvY2stPnZjbyA8IGxpbWl0LT52Y28ubWluIHx8IGxpbWl0LT52Y28ubWF4IDwgY2xvY2st PnZjbykKLQkJcmV0dXJuIGZhbHNlOwotCS8qIFhYWDogV2UgbWF5IG5lZWQgdG8gYmUgY2hlY2tp bmcgIkRvdCBjbG9jayIgZGVwZW5kaW5nIG9uIHRoZSBtdWx0aXBsaWVyLAotCSAqIGNvbm5lY3Rv ciwgZXRjLiwgcmF0aGVyIHRoYW4ganVzdCBhIHNpbmdsZSByYW5nZS4KLQkgKi8KLQlpZiAoY2xv Y2stPmRvdCA8IGxpbWl0LT5kb3QubWluIHx8IGxpbWl0LT5kb3QubWF4IDwgY2xvY2stPmRvdCkK LQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBpbnQKLWk5eHhf c2VsZWN0X3AyX2Rpdihjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgKmxpbWl0LAotCQkgICBjb25z dCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJICAgaW50IHRhcmdldCkK LXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGNfc3Rh dGUtPnVhcGkuY3J0Yy0+ZGV2KTsKLQotCWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3Rh dGUsIElOVEVMX09VVFBVVF9MVkRTKSkgewotCQkvKgotCQkgKiBGb3IgTFZEUyBqdXN0IHJlbHkg b24gaXRzIGN1cnJlbnQgc2V0dGluZ3MgZm9yIGR1YWwtY2hhbm5lbC4KLQkJICogV2UgaGF2ZW4n dCBmaWd1cmVkIG91dCBob3cgdG8gcmVsaWFibHkgc2V0IHVwIGRpZmZlcmVudAotCQkgKiBzaW5n bGUvZHVhbCBjaGFubmVsIHN0YXRlLCBpZiB3ZSBldmVuIGNhbi4KLQkJICovCi0JCWlmIChpbnRl bF9pc19kdWFsX2xpbmtfbHZkcyhkZXZfcHJpdikpCi0JCQlyZXR1cm4gbGltaXQtPnAyLnAyX2Zh c3Q7Ci0JCWVsc2UKLQkJCXJldHVybiBsaW1pdC0+cDIucDJfc2xvdzsKLQl9IGVsc2UgewotCQlp ZiAodGFyZ2V0IDwgbGltaXQtPnAyLmRvdF9saW1pdCkKLQkJCXJldHVybiBsaW1pdC0+cDIucDJf c2xvdzsKLQkJZWxzZQotCQkJcmV0dXJuIGxpbWl0LT5wMi5wMl9mYXN0OwotCX0KLX0KLQotLyoK LSAqIFJldHVybnMgYSBzZXQgb2YgZGl2aXNvcnMgZm9yIHRoZSBkZXNpcmVkIHRhcmdldCBjbG9j ayB3aXRoIHRoZSBnaXZlbgotICogcmVmY2xrLCBvciBGQUxTRS4gIFRoZSByZXR1cm5lZCB2YWx1 ZXMgcmVwcmVzZW50IHRoZSBjbG9jayBlcXVhdGlvbjoKLSAqIHJlZmxjayAqICg1ICogKG0xICsg MikgKyAobTIgKyAyKSkgLyAobiArIDIpIC8gcDEgLyBwMi4KLSAqCi0gKiBUYXJnZXQgYW5kIHJl ZmVyZW5jZSBjbG9ja3MgYXJlIHNwZWNpZmllZCBpbiBrSHouCi0gKgotICogSWYgbWF0Y2hfY2xv Y2sgaXMgcHJvdmlkZWQsIHRoZW4gYmVzdF9jbG9jayBQIGRpdmlkZXIgbXVzdCBtYXRjaCB0aGUg UAotICogZGl2aWRlciBmcm9tIEBtYXRjaF9jbG9jayB1c2VkIGZvciBMVkRTIGRvd25jbG9ja2lu Zy4KLSAqLwotc3RhdGljIGJvb2wKLWk5eHhfZmluZF9iZXN0X2RwbGwoY29uc3Qgc3RydWN0IGlu dGVsX2xpbWl0ICpsaW1pdCwKLQkJICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlLAotCQkgICAgaW50IHRhcmdldCwgaW50IHJlZmNsaywgc3RydWN0IGRwbGwgKm1hdGNoX2Ns b2NrLAotCQkgICAgc3RydWN0IGRwbGwgKmJlc3RfY2xvY2spCi17Ci0Jc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9IGNydGNfc3RhdGUtPnVhcGkuY3J0Yy0+ZGV2OwotCXN0cnVjdCBkcGxsIGNsb2Nr OwotCWludCBlcnIgPSB0YXJnZXQ7Ci0KLQltZW1zZXQoYmVzdF9jbG9jaywgMCwgc2l6ZW9mKCpi ZXN0X2Nsb2NrKSk7Ci0KLQljbG9jay5wMiA9IGk5eHhfc2VsZWN0X3AyX2RpdihsaW1pdCwgY3J0 Y19zdGF0ZSwgdGFyZ2V0KTsKLQotCWZvciAoY2xvY2subTEgPSBsaW1pdC0+bTEubWluOyBjbG9j ay5tMSA8PSBsaW1pdC0+bTEubWF4OwotCSAgICAgY2xvY2subTErKykgewotCQlmb3IgKGNsb2Nr Lm0yID0gbGltaXQtPm0yLm1pbjsKLQkJICAgICBjbG9jay5tMiA8PSBsaW1pdC0+bTIubWF4OyBj bG9jay5tMisrKSB7Ci0JCQlpZiAoY2xvY2subTIgPj0gY2xvY2subTEpCi0JCQkJYnJlYWs7Ci0J CQlmb3IgKGNsb2NrLm4gPSBsaW1pdC0+bi5taW47Ci0JCQkgICAgIGNsb2NrLm4gPD0gbGltaXQt Pm4ubWF4OyBjbG9jay5uKyspIHsKLQkJCQlmb3IgKGNsb2NrLnAxID0gbGltaXQtPnAxLm1pbjsK LQkJCQkJY2xvY2sucDEgPD0gbGltaXQtPnAxLm1heDsgY2xvY2sucDErKykgewotCQkJCQlpbnQg dGhpc19lcnI7Ci0KLQkJCQkJaTl4eF9jYWxjX2RwbGxfcGFyYW1zKHJlZmNsaywgJmNsb2NrKTsK LQkJCQkJaWYgKCFpbnRlbF9wbGxfaXNfdmFsaWQodG9faTkxNShkZXYpLAotCQkJCQkJCQlsaW1p dCwKLQkJCQkJCQkJJmNsb2NrKSkKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQlpZiAobWF0Y2hfY2xv Y2sgJiYKLQkJCQkJICAgIGNsb2NrLnAgIT0gbWF0Y2hfY2xvY2stPnApCi0JCQkJCQljb250aW51 ZTsKLQotCQkJCQl0aGlzX2VyciA9IGFicyhjbG9jay5kb3QgLSB0YXJnZXQpOwotCQkJCQlpZiAo dGhpc19lcnIgPCBlcnIpIHsKLQkJCQkJCSpiZXN0X2Nsb2NrID0gY2xvY2s7Ci0JCQkJCQllcnIg PSB0aGlzX2VycjsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCXJldHVybiAoZXJy ICE9IHRhcmdldCk7Ci19Ci0KLS8qCi0gKiBSZXR1cm5zIGEgc2V0IG9mIGRpdmlzb3JzIGZvciB0 aGUgZGVzaXJlZCB0YXJnZXQgY2xvY2sgd2l0aCB0aGUgZ2l2ZW4KLSAqIHJlZmNsaywgb3IgRkFM U0UuICBUaGUgcmV0dXJuZWQgdmFsdWVzIHJlcHJlc2VudCB0aGUgY2xvY2sgZXF1YXRpb246Ci0g KiByZWZsY2sgKiAoNSAqIChtMSArIDIpICsgKG0yICsgMikpIC8gKG4gKyAyKSAvIHAxIC8gcDIu Ci0gKgotICogVGFyZ2V0IGFuZCByZWZlcmVuY2UgY2xvY2tzIGFyZSBzcGVjaWZpZWQgaW4ga0h6 LgotICoKLSAqIElmIG1hdGNoX2Nsb2NrIGlzIHByb3ZpZGVkLCB0aGVuIGJlc3RfY2xvY2sgUCBk aXZpZGVyIG11c3QgbWF0Y2ggdGhlIFAKLSAqIGRpdmlkZXIgZnJvbSBAbWF0Y2hfY2xvY2sgdXNl ZCBmb3IgTFZEUyBkb3duY2xvY2tpbmcuCi0gKi8KLXN0YXRpYyBib29sCi1wbnZfZmluZF9iZXN0 X2RwbGwoY29uc3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1pdCwKLQkJICAgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCSAgIGludCB0YXJnZXQsIGludCByZWZjbGssIHN0 cnVjdCBkcGxsICptYXRjaF9jbG9jaywKLQkJICAgc3RydWN0IGRwbGwgKmJlc3RfY2xvY2spCi17 Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGNfc3RhdGUtPnVhcGkuY3J0Yy0+ZGV2Owot CXN0cnVjdCBkcGxsIGNsb2NrOwotCWludCBlcnIgPSB0YXJnZXQ7Ci0KLQltZW1zZXQoYmVzdF9j bG9jaywgMCwgc2l6ZW9mKCpiZXN0X2Nsb2NrKSk7Ci0KLQljbG9jay5wMiA9IGk5eHhfc2VsZWN0 X3AyX2RpdihsaW1pdCwgY3J0Y19zdGF0ZSwgdGFyZ2V0KTsKLQotCWZvciAoY2xvY2subTEgPSBs aW1pdC0+bTEubWluOyBjbG9jay5tMSA8PSBsaW1pdC0+bTEubWF4OwotCSAgICAgY2xvY2subTEr KykgewotCQlmb3IgKGNsb2NrLm0yID0gbGltaXQtPm0yLm1pbjsKLQkJICAgICBjbG9jay5tMiA8 PSBsaW1pdC0+bTIubWF4OyBjbG9jay5tMisrKSB7Ci0JCQlmb3IgKGNsb2NrLm4gPSBsaW1pdC0+ bi5taW47Ci0JCQkgICAgIGNsb2NrLm4gPD0gbGltaXQtPm4ubWF4OyBjbG9jay5uKyspIHsKLQkJ CQlmb3IgKGNsb2NrLnAxID0gbGltaXQtPnAxLm1pbjsKLQkJCQkJY2xvY2sucDEgPD0gbGltaXQt PnAxLm1heDsgY2xvY2sucDErKykgewotCQkJCQlpbnQgdGhpc19lcnI7Ci0KLQkJCQkJcG52X2Nh bGNfZHBsbF9wYXJhbXMocmVmY2xrLCAmY2xvY2spOwotCQkJCQlpZiAoIWludGVsX3BsbF9pc192 YWxpZCh0b19pOTE1KGRldiksCi0JCQkJCQkJCWxpbWl0LAotCQkJCQkJCQkmY2xvY2spKQotCQkJ CQkJY29udGludWU7Ci0JCQkJCWlmIChtYXRjaF9jbG9jayAmJgotCQkJCQkgICAgY2xvY2sucCAh PSBtYXRjaF9jbG9jay0+cCkKLQkJCQkJCWNvbnRpbnVlOwotCi0JCQkJCXRoaXNfZXJyID0gYWJz KGNsb2NrLmRvdCAtIHRhcmdldCk7Ci0JCQkJCWlmICh0aGlzX2VyciA8IGVycikgewotCQkJCQkJ KmJlc3RfY2xvY2sgPSBjbG9jazsKLQkJCQkJCWVyciA9IHRoaXNfZXJyOwotCQkJCQl9Ci0JCQkJ fQotCQkJfQotCQl9Ci0JfQotCi0JcmV0dXJuIChlcnIgIT0gdGFyZ2V0KTsKLX0KLQotLyoKLSAq IFJldHVybnMgYSBzZXQgb2YgZGl2aXNvcnMgZm9yIHRoZSBkZXNpcmVkIHRhcmdldCBjbG9jayB3 aXRoIHRoZSBnaXZlbgotICogcmVmY2xrLCBvciBGQUxTRS4gIFRoZSByZXR1cm5lZCB2YWx1ZXMg cmVwcmVzZW50IHRoZSBjbG9jayBlcXVhdGlvbjoKLSAqIHJlZmxjayAqICg1ICogKG0xICsgMikg KyAobTIgKyAyKSkgLyAobiArIDIpIC8gcDEgLyBwMi4KLSAqCi0gKiBUYXJnZXQgYW5kIHJlZmVy ZW5jZSBjbG9ja3MgYXJlIHNwZWNpZmllZCBpbiBrSHouCi0gKgotICogSWYgbWF0Y2hfY2xvY2sg aXMgcHJvdmlkZWQsIHRoZW4gYmVzdF9jbG9jayBQIGRpdmlkZXIgbXVzdCBtYXRjaCB0aGUgUAot ICogZGl2aWRlciBmcm9tIEBtYXRjaF9jbG9jayB1c2VkIGZvciBMVkRTIGRvd25jbG9ja2luZy4K LSAqLwotc3RhdGljIGJvb2wKLWc0eF9maW5kX2Jlc3RfZHBsbChjb25zdCBzdHJ1Y3QgaW50ZWxf bGltaXQgKmxpbWl0LAotCQkgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwK LQkJICAgaW50IHRhcmdldCwgaW50IHJlZmNsaywgc3RydWN0IGRwbGwgKm1hdGNoX2Nsb2NrLAot CQkgICBzdHJ1Y3QgZHBsbCAqYmVzdF9jbG9jaykKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gY3J0Y19zdGF0ZS0+dWFwaS5jcnRjLT5kZXY7Ci0Jc3RydWN0IGRwbGwgY2xvY2s7Ci0JaW50 IG1heF9uOwotCWJvb2wgZm91bmQgPSBmYWxzZTsKLQkvKiBhcHByb3hpbWF0ZWx5IGVxdWFscyB0 YXJnZXQgKiAwLjAwNTg1ICovCi0JaW50IGVycl9tb3N0ID0gKHRhcmdldCA+PiA4KSArICh0YXJn ZXQgPj4gOSk7Ci0KLQltZW1zZXQoYmVzdF9jbG9jaywgMCwgc2l6ZW9mKCpiZXN0X2Nsb2NrKSk7 Ci0KLQljbG9jay5wMiA9IGk5eHhfc2VsZWN0X3AyX2RpdihsaW1pdCwgY3J0Y19zdGF0ZSwgdGFy Z2V0KTsKLQotCW1heF9uID0gbGltaXQtPm4ubWF4OwotCS8qIGJhc2VkIG9uIGhhcmR3YXJlIHJl cXVpcmVtZW50LCBwcmVmZXIgc21hbGxlciBuIHRvIHByZWNpc2lvbiAqLwotCWZvciAoY2xvY2su biA9IGxpbWl0LT5uLm1pbjsgY2xvY2subiA8PSBtYXhfbjsgY2xvY2subisrKSB7Ci0JCS8qIGJh c2VkIG9uIGhhcmR3YXJlIHJlcXVpcmVtZW50LCBwcmVmZXJlIGxhcmdlciBtMSxtMiAqLwotCQlm b3IgKGNsb2NrLm0xID0gbGltaXQtPm0xLm1heDsKLQkJICAgICBjbG9jay5tMSA+PSBsaW1pdC0+ bTEubWluOyBjbG9jay5tMS0tKSB7Ci0JCQlmb3IgKGNsb2NrLm0yID0gbGltaXQtPm0yLm1heDsK LQkJCSAgICAgY2xvY2subTIgPj0gbGltaXQtPm0yLm1pbjsgY2xvY2subTItLSkgewotCQkJCWZv ciAoY2xvY2sucDEgPSBsaW1pdC0+cDEubWF4OwotCQkJCSAgICAgY2xvY2sucDEgPj0gbGltaXQt PnAxLm1pbjsgY2xvY2sucDEtLSkgewotCQkJCQlpbnQgdGhpc19lcnI7Ci0KLQkJCQkJaTl4eF9j YWxjX2RwbGxfcGFyYW1zKHJlZmNsaywgJmNsb2NrKTsKLQkJCQkJaWYgKCFpbnRlbF9wbGxfaXNf dmFsaWQodG9faTkxNShkZXYpLAotCQkJCQkJCQlsaW1pdCwKLQkJCQkJCQkJJmNsb2NrKSkKLQkJ CQkJCWNvbnRpbnVlOwotCi0JCQkJCXRoaXNfZXJyID0gYWJzKGNsb2NrLmRvdCAtIHRhcmdldCk7 Ci0JCQkJCWlmICh0aGlzX2VyciA8IGVycl9tb3N0KSB7Ci0JCQkJCQkqYmVzdF9jbG9jayA9IGNs b2NrOwotCQkJCQkJZXJyX21vc3QgPSB0aGlzX2VycjsKLQkJCQkJCW1heF9uID0gY2xvY2subjsK LQkJCQkJCWZvdW5kID0gdHJ1ZTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQlyZXR1 cm4gZm91bmQ7Ci19Ci0KLS8qCi0gKiBDaGVjayBpZiB0aGUgY2FsY3VsYXRlZCBQTEwgY29uZmln dXJhdGlvbiBpcyBtb3JlIG9wdGltYWwgY29tcGFyZWQgdG8gdGhlCi0gKiBiZXN0IGNvbmZpZ3Vy YXRpb24gYW5kIGVycm9yIGZvdW5kIHNvIGZhci4gUmV0dXJuIHRoZSBjYWxjdWxhdGVkIGVycm9y LgotICovCi1zdGF0aWMgYm9vbCB2bHZfUExMX2lzX29wdGltYWwoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgaW50IHRhcmdldF9mcmVxLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcGxsICpjYWxj dWxhdGVkX2Nsb2NrLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcGxsICpiZXN0X2Nsb2NrLAot CQkJICAgICAgIHVuc2lnbmVkIGludCBiZXN0X2Vycm9yX3BwbSwKLQkJCSAgICAgICB1bnNpZ25l ZCBpbnQgKmVycm9yX3BwbSkKLXsKLQkvKgotCSAqIEZvciBDSFYgaWdub3JlIHRoZSBlcnJvciBh bmQgY29uc2lkZXIgb25seSB0aGUgUCB2YWx1ZS4KLQkgKiBQcmVmZXIgYSBiaWdnZXIgUCB2YWx1 ZSBiYXNlZCBvbiBIVyByZXF1aXJlbWVudHMuCi0JICovCi0JaWYgKElTX0NIRVJSWVZJRVcodG9f aTkxNShkZXYpKSkgewotCQkqZXJyb3JfcHBtID0gMDsKLQotCQlyZXR1cm4gY2FsY3VsYXRlZF9j bG9jay0+cCA+IGJlc3RfY2xvY2stPnA7Ci0JfQotCi0JaWYgKGRybV9XQVJOX09OX09OQ0UoZGV2 LCAhdGFyZ2V0X2ZyZXEpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQkqZXJyb3JfcHBtID0gZGl2X3U2 NCgxMDAwMDAwVUxMICoKLQkJCQlhYnModGFyZ2V0X2ZyZXEgLSBjYWxjdWxhdGVkX2Nsb2NrLT5k b3QpLAotCQkJICAgICB0YXJnZXRfZnJlcSk7Ci0JLyoKLQkgKiBQcmVmZXIgYSBiZXR0ZXIgUCB2 YWx1ZSBvdmVyIGEgYmV0dGVyIChzbWFsbGVyKSBlcnJvciBpZiB0aGUgZXJyb3IKLQkgKiBpcyBz bWFsbC4gRW5zdXJlIHRoaXMgcHJlZmVyZW5jZSBmb3IgZnV0dXJlIGNvbmZpZ3VyYXRpb25zIHRv byBieQotCSAqIHNldHRpbmcgdGhlIGVycm9yIHRvIDAuCi0JICovCi0JaWYgKCplcnJvcl9wcG0g PCAxMDAgJiYgY2FsY3VsYXRlZF9jbG9jay0+cCA+IGJlc3RfY2xvY2stPnApIHsKLQkJKmVycm9y X3BwbSA9IDA7Ci0KLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcmV0dXJuICplcnJvcl9wcG0gKyAx MCA8IGJlc3RfZXJyb3JfcHBtOwotfQotCi0vKgotICogUmV0dXJucyBhIHNldCBvZiBkaXZpc29y cyBmb3IgdGhlIGRlc2lyZWQgdGFyZ2V0IGNsb2NrIHdpdGggdGhlIGdpdmVuCi0gKiByZWZjbGss IG9yIEZBTFNFLiAgVGhlIHJldHVybmVkIHZhbHVlcyByZXByZXNlbnQgdGhlIGNsb2NrIGVxdWF0 aW9uOgotICogcmVmbGNrICogKDUgKiAobTEgKyAyKSArIChtMiArIDIpKSAvIChuICsgMikgLyBw MSAvIHAyLgotICovCi1zdGF0aWMgYm9vbAotdmx2X2ZpbmRfYmVzdF9kcGxsKGNvbnN0IHN0cnVj dCBpbnRlbF9saW1pdCAqbGltaXQsCi0JCSAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRj X3N0YXRlLAotCQkgICBpbnQgdGFyZ2V0LCBpbnQgcmVmY2xrLCBzdHJ1Y3QgZHBsbCAqbWF0Y2hf Y2xvY2ssCi0JCSAgIHN0cnVjdCBkcGxsICpiZXN0X2Nsb2NrKQotewotCXN0cnVjdCBpbnRlbF9j cnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBpLmNydGMpOwotCXN0cnVj dCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKLQlzdHJ1Y3QgZHBsbCBjbG9jazsK LQl1bnNpZ25lZCBpbnQgYmVzdHBwbSA9IDEwMDAwMDA7Ci0JLyogbWluIHVwZGF0ZSAxOS4yIE1I eiAqLwotCWludCBtYXhfbiA9IG1pbihsaW1pdC0+bi5tYXgsIHJlZmNsayAvIDE5MjAwKTsKLQli b29sIGZvdW5kID0gZmFsc2U7Ci0KLQl0YXJnZXQgKj0gNTsgLyogZmFzdCBjbG9jayAqLwotCi0J bWVtc2V0KGJlc3RfY2xvY2ssIDAsIHNpemVvZigqYmVzdF9jbG9jaykpOwotCi0JLyogYmFzZWQg b24gaGFyZHdhcmUgcmVxdWlyZW1lbnQsIHByZWZlciBzbWFsbGVyIG4gdG8gcHJlY2lzaW9uICov Ci0JZm9yIChjbG9jay5uID0gbGltaXQtPm4ubWluOyBjbG9jay5uIDw9IG1heF9uOyBjbG9jay5u KyspIHsKLQkJZm9yIChjbG9jay5wMSA9IGxpbWl0LT5wMS5tYXg7IGNsb2NrLnAxID49IGxpbWl0 LT5wMS5taW47IGNsb2NrLnAxLS0pIHsKLQkJCWZvciAoY2xvY2sucDIgPSBsaW1pdC0+cDIucDJf ZmFzdDsgY2xvY2sucDIgPj0gbGltaXQtPnAyLnAyX3Nsb3c7Ci0JCQkgICAgIGNsb2NrLnAyIC09 IGNsb2NrLnAyID4gMTAgPyAyIDogMSkgewotCQkJCWNsb2NrLnAgPSBjbG9jay5wMSAqIGNsb2Nr LnAyOwotCQkJCS8qIGJhc2VkIG9uIGhhcmR3YXJlIHJlcXVpcmVtZW50LCBwcmVmZXIgYmlnZ2Vy IG0xLG0yIHZhbHVlcyAqLwotCQkJCWZvciAoY2xvY2subTEgPSBsaW1pdC0+bTEubWluOyBjbG9j ay5tMSA8PSBsaW1pdC0+bTEubWF4OyBjbG9jay5tMSsrKSB7Ci0JCQkJCXVuc2lnbmVkIGludCBw cG07Ci0KLQkJCQkJY2xvY2subTIgPSBESVZfUk9VTkRfQ0xPU0VTVCh0YXJnZXQgKiBjbG9jay5w ICogY2xvY2subiwKLQkJCQkJCQkJICAgICByZWZjbGsgKiBjbG9jay5tMSk7Ci0KLQkJCQkJdmx2 X2NhbGNfZHBsbF9wYXJhbXMocmVmY2xrLCAmY2xvY2spOwotCi0JCQkJCWlmICghaW50ZWxfcGxs X2lzX3ZhbGlkKHRvX2k5MTUoZGV2KSwKLQkJCQkJCQkJbGltaXQsCi0JCQkJCQkJCSZjbG9jaykp Ci0JCQkJCQljb250aW51ZTsKLQotCQkJCQlpZiAoIXZsdl9QTExfaXNfb3B0aW1hbChkZXYsIHRh cmdldCwKLQkJCQkJCQkJJmNsb2NrLAotCQkJCQkJCQliZXN0X2Nsb2NrLAotCQkJCQkJCQliZXN0 cHBtLCAmcHBtKSkKLQkJCQkJCWNvbnRpbnVlOwotCi0JCQkJCSpiZXN0X2Nsb2NrID0gY2xvY2s7 Ci0JCQkJCWJlc3RwcG0gPSBwcG07Ci0JCQkJCWZvdW5kID0gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0J CX0KLQl9Ci0KLQlyZXR1cm4gZm91bmQ7Ci19Ci0KLS8qCi0gKiBSZXR1cm5zIGEgc2V0IG9mIGRp dmlzb3JzIGZvciB0aGUgZGVzaXJlZCB0YXJnZXQgY2xvY2sgd2l0aCB0aGUgZ2l2ZW4KLSAqIHJl ZmNsaywgb3IgRkFMU0UuICBUaGUgcmV0dXJuZWQgdmFsdWVzIHJlcHJlc2VudCB0aGUgY2xvY2sg ZXF1YXRpb246Ci0gKiByZWZsY2sgKiAoNSAqIChtMSArIDIpICsgKG0yICsgMikpIC8gKG4gKyAy KSAvIHAxIC8gcDIuCi0gKi8KLXN0YXRpYyBib29sCi1jaHZfZmluZF9iZXN0X2RwbGwoY29uc3Qg c3RydWN0IGludGVsX2xpbWl0ICpsaW1pdCwKLQkJICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUsCi0JCSAgIGludCB0YXJnZXQsIGludCByZWZjbGssIHN0cnVjdCBkcGxsICpt YXRjaF9jbG9jaywKLQkJICAgc3RydWN0IGRwbGwgKmJlc3RfY2xvY2spCi17Ci0Jc3RydWN0IGlu dGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7Ci0J c3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmJhc2UuZGV2OwotCXVuc2lnbmVkIGludCBi ZXN0X2Vycm9yX3BwbTsKLQlzdHJ1Y3QgZHBsbCBjbG9jazsKLQl1NjQgbTI7Ci0JaW50IGZvdW5k ID0gZmFsc2U7Ci0KLQltZW1zZXQoYmVzdF9jbG9jaywgMCwgc2l6ZW9mKCpiZXN0X2Nsb2NrKSk7 Ci0JYmVzdF9lcnJvcl9wcG0gPSAxMDAwMDAwOwotCi0JLyoKLQkgKiBCYXNlZCBvbiBoYXJkd2Fy ZSBkb2MsIHRoZSBuIGFsd2F5cyBzZXQgdG8gMSwgYW5kIG0xIGFsd2F5cwotCSAqIHNldCB0byAy LiAgSWYgcmVxdWlyZXMgdG8gc3VwcG9ydCAyMDBNaHogcmVmY2xrLCB3ZSBuZWVkIHRvCi0JICog cmV2aXNpdCB0aGlzIGJlY2F1c2UgbiBtYXkgbm90IDEgYW55bW9yZS4KLQkgKi8KLQljbG9jay5u ID0gMTsKLQljbG9jay5tMSA9IDI7Ci0JdGFyZ2V0ICo9IDU7CS8qIGZhc3QgY2xvY2sgKi8KLQot CWZvciAoY2xvY2sucDEgPSBsaW1pdC0+cDEubWF4OyBjbG9jay5wMSA+PSBsaW1pdC0+cDEubWlu OyBjbG9jay5wMS0tKSB7Ci0JCWZvciAoY2xvY2sucDIgPSBsaW1pdC0+cDIucDJfZmFzdDsKLQkJ CQljbG9jay5wMiA+PSBsaW1pdC0+cDIucDJfc2xvdzsKLQkJCQljbG9jay5wMiAtPSBjbG9jay5w MiA+IDEwID8gMiA6IDEpIHsKLQkJCXVuc2lnbmVkIGludCBlcnJvcl9wcG07Ci0KLQkJCWNsb2Nr LnAgPSBjbG9jay5wMSAqIGNsb2NrLnAyOwotCi0JCQltMiA9IERJVl9ST1VORF9DTE9TRVNUX1VM TChtdWxfdTMyX3UzMih0YXJnZXQsIGNsb2NrLnAgKiBjbG9jay5uKSA8PCAyMiwKLQkJCQkJCSAg IHJlZmNsayAqIGNsb2NrLm0xKTsKLQotCQkJaWYgKG0yID4gSU5UX01BWC9jbG9jay5tMSkKLQkJ CQljb250aW51ZTsKLQotCQkJY2xvY2subTIgPSBtMjsKLQotCQkJY2h2X2NhbGNfZHBsbF9wYXJh bXMocmVmY2xrLCAmY2xvY2spOwotCi0JCQlpZiAoIWludGVsX3BsbF9pc192YWxpZCh0b19pOTE1 KGRldiksIGxpbWl0LCAmY2xvY2spKQotCQkJCWNvbnRpbnVlOwotCi0JCQlpZiAoIXZsdl9QTExf aXNfb3B0aW1hbChkZXYsIHRhcmdldCwgJmNsb2NrLCBiZXN0X2Nsb2NrLAotCQkJCQkJYmVzdF9l cnJvcl9wcG0sICZlcnJvcl9wcG0pKQotCQkJCWNvbnRpbnVlOwotCi0JCQkqYmVzdF9jbG9jayA9 IGNsb2NrOwotCQkJYmVzdF9lcnJvcl9wcG0gPSBlcnJvcl9wcG07Ci0JCQlmb3VuZCA9IHRydWU7 Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gZm91bmQ7Ci19Ci0KLWJvb2wgYnh0X2ZpbmRfYmVzdF9kcGxs KHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkJc3RydWN0IGRwbGwgKmJl c3RfY2xvY2spCi17Ci0JaW50IHJlZmNsayA9IDEwMDAwMDsKLQljb25zdCBzdHJ1Y3QgaW50ZWxf bGltaXQgKmxpbWl0ID0gJmludGVsX2xpbWl0c19ieHQ7Ci0KLQlyZXR1cm4gY2h2X2ZpbmRfYmVz dF9kcGxsKGxpbWl0LCBjcnRjX3N0YXRlLAotCQkJCSAgY3J0Y19zdGF0ZS0+cG9ydF9jbG9jaywg cmVmY2xrLAotCQkJCSAgTlVMTCwgYmVzdF9jbG9jayk7Ci19Ci0KIHN0YXRpYyBib29sIHBpcGVf c2NhbmxpbmVfaXNfbW92aW5nKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAkJ CQkgICAgZW51bSBwaXBlIHBpcGUpCiB7CkBAIC01MjM1LDcgKzQ0ODMsNyBAQCBzdGF0aWMgdm9p ZCBpdmJfdXBkYXRlX2ZkaV9iY19iaWZ1cmNhdGlvbihjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdAogICogRmluZHMgdGhlIGVuY29kZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBn aXZlbiBDUlRDLiBUaGlzIGNhbiBvbmx5IGJlCiAgKiB1c2VkIHdoZW4gd2Uga25vdyB0aGF0IHRo ZSBDUlRDIGlzbid0IGZlZWRpbmcgbXVsdGlwbGUgZW5jb2RlcnMhCiAgKi8KLXN0YXRpYyBzdHJ1 Y3QgaW50ZWxfZW5jb2RlciAqCitzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqCiBpbnRlbF9nZXRfY3J0 Y19uZXdfZW5jb2Rlcihjb25zdCBzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKIAkJ CSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQogewpAQCAtNzkw Myw1MSArNzE1MSw2IEBAIHN0YXRpYyB2b2lkIGludGVsX3BhbmVsX3Nhbml0aXplX3NzYyhzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJfQogfQogCi1zdGF0aWMgYm9vbCBpbnRl bF9wYW5lbF91c2Vfc3NjKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlp ZiAoZGV2X3ByaXYtPnBhcmFtcy5wYW5lbF91c2Vfc3NjID49IDApCi0JCXJldHVybiBkZXZfcHJp di0+cGFyYW1zLnBhbmVsX3VzZV9zc2MgIT0gMDsKLQlyZXR1cm4gZGV2X3ByaXYtPnZidC5sdmRz X3VzZV9zc2MKLQkJJiYgIShkZXZfcHJpdi0+cXVpcmtzICYgUVVJUktfTFZEU19TU0NfRElTQUJM RSk7Ci19Ci0KLXN0YXRpYyB1MzIgcG52X2RwbGxfY29tcHV0ZV9mcChzdHJ1Y3QgZHBsbCAqZHBs bCkKLXsKLQlyZXR1cm4gKDEgPDwgZHBsbC0+bikgPDwgMTYgfCBkcGxsLT5tMjsKLX0KLQotc3Rh dGljIHUzMiBpOXh4X2RwbGxfY29tcHV0ZV9mcChzdHJ1Y3QgZHBsbCAqZHBsbCkKLXsKLQlyZXR1 cm4gZHBsbC0+biA8PCAxNiB8IGRwbGwtPm0xIDw8IDggfCBkcGxsLT5tMjsKLX0KLQotc3RhdGlj IHZvaWQgaTl4eF91cGRhdGVfcGxsX2RpdmlkZXJzKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAot CQkJCSAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCQkJICAgICBz dHJ1Y3QgZHBsbCAqcmVkdWNlZF9jbG9jaykKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKLQl1MzIgZnAsIGZwMiA9IDA7Ci0K LQlpZiAoSVNfUElORVZJRVcoZGV2X3ByaXYpKSB7Ci0JCWZwID0gcG52X2RwbGxfY29tcHV0ZV9m cCgmY3J0Y19zdGF0ZS0+ZHBsbCk7Ci0JCWlmIChyZWR1Y2VkX2Nsb2NrKQotCQkJZnAyID0gcG52 X2RwbGxfY29tcHV0ZV9mcChyZWR1Y2VkX2Nsb2NrKTsKLQl9IGVsc2UgewotCQlmcCA9IGk5eHhf ZHBsbF9jb21wdXRlX2ZwKCZjcnRjX3N0YXRlLT5kcGxsKTsKLQkJaWYgKHJlZHVjZWRfY2xvY2sp Ci0JCQlmcDIgPSBpOXh4X2RwbGxfY29tcHV0ZV9mcChyZWR1Y2VkX2Nsb2NrKTsKLQl9Ci0KLQlj cnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLmZwMCA9IGZwOwotCi0JaWYgKGludGVsX2NydGNfaGFz X3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0xWRFMpICYmCi0JICAgIHJlZHVjZWRfY2xv Y2spIHsKLQkJY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZS5mcDEgPSBmcDI7Ci0JfSBlbHNlIHsK LQkJY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZS5mcDEgPSBmcDsKLQl9Ci19Ci0KIHN0YXRpYyB2 b2lkIHZsdl9wbGxiX3JlY2FsX29wYW1wKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwgZW51bSBwaXBlCiAJCXBpcGUpCiB7CkBAIC04MDcyLDM5ICs3Mjc1LDYgQEAgdm9pZCBpbnRl bF9kcF9zZXRfbV9uKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLCBl bnVtIGxpbmtfbV9uX3MKIAkJaW50ZWxfY3B1X3RyYW5zY29kZXJfc2V0X21fbihjcnRjX3N0YXRl LCBkcF9tX24sIGRwX20yX24yKTsKIH0KIAotc3RhdGljIHZvaWQgdmx2X2NvbXB1dGVfZHBsbChz dHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKLQkJCSAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KnBpcGVfY29uZmlnKQotewotCXBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRlLmRwbGwgPSBEUExM X0lOVEVHUkFURURfUkVGX0NMS19WTFYgfAotCQlEUExMX1JFRl9DTEtfRU5BQkxFX1ZMViB8IERQ TExfVkdBX01PREVfRElTOwotCWlmIChjcnRjLT5waXBlICE9IFBJUEVfQSkKLQkJcGlwZV9jb25m aWctPmRwbGxfaHdfc3RhdGUuZHBsbCB8PSBEUExMX0lOVEVHUkFURURfQ1JJX0NMS19WTFY7Ci0K LQkvKiBEUExMIG5vdCB1c2VkIHdpdGggRFNJLCBidXQgc3RpbGwgbmVlZCB0aGUgcmVzdCBzZXQg dXAgKi8KLQlpZiAoIWludGVsX2NydGNfaGFzX3R5cGUocGlwZV9jb25maWcsIElOVEVMX09VVFBV VF9EU0kpKQotCQlwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxsIHw9IERQTExfVkNPX0VO QUJMRSB8Ci0JCQlEUExMX0VYVF9CVUZGRVJfRU5BQkxFX1ZMVjsKLQotCXBpcGVfY29uZmlnLT5k cGxsX2h3X3N0YXRlLmRwbGxfbWQgPQotCQkocGlwZV9jb25maWctPnBpeGVsX211bHRpcGxpZXIg LSAxKSA8PCBEUExMX01EX1VESV9NVUxUSVBMSUVSX1NISUZUOwotfQotCi1zdGF0aWMgdm9pZCBj aHZfY29tcHV0ZV9kcGxsKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAotCQkJICAgICBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCi17Ci0JcGlwZV9jb25maWctPmRwbGxfaHdf c3RhdGUuZHBsbCA9IERQTExfU1NDX1JFRl9DTEtfQ0hWIHwKLQkJRFBMTF9SRUZfQ0xLX0VOQUJM RV9WTFYgfCBEUExMX1ZHQV9NT0RFX0RJUzsKLQlpZiAoY3J0Yy0+cGlwZSAhPSBQSVBFX0EpCi0J CXBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRlLmRwbGwgfD0gRFBMTF9JTlRFR1JBVEVEX0NSSV9D TEtfVkxWOwotCi0JLyogRFBMTCBub3QgdXNlZCB3aXRoIERTSSwgYnV0IHN0aWxsIG5lZWQgdGhl IHJlc3Qgc2V0IHVwICovCi0JaWYgKCFpbnRlbF9jcnRjX2hhc190eXBlKHBpcGVfY29uZmlnLCBJ TlRFTF9PVVRQVVRfRFNJKSkKLQkJcGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUuZHBsbCB8PSBE UExMX1ZDT19FTkFCTEU7Ci0KLQlwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxsX21kID0K LQkJKHBpcGVfY29uZmlnLT5waXhlbF9tdWx0aXBsaWVyIC0gMSkgPDwgRFBMTF9NRF9VRElfTVVM VElQTElFUl9TSElGVDsKLX0KLQogc3RhdGljIHZvaWQgdmx2X3ByZXBhcmVfcGxsKHN0cnVjdCBp bnRlbF9jcnRjICpjcnRjLAogCQkJICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpw aXBlX2NvbmZpZykKIHsKQEAgLTgzNjQsMTI4ICs3NTM0LDcgQEAgdm9pZCB2bHZfZm9yY2VfcGxs X29mZihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlKQog CQl2bHZfZGlzYWJsZV9wbGwoZGV2X3ByaXYsIHBpcGUpOwogfQogCi1zdGF0aWMgdm9pZCBpOXh4 X2NvbXB1dGVfZHBsbChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKLQkJCSAgICAgIHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkJICAgICAgc3RydWN0IGRwbGwgKnJlZHVj ZWRfY2xvY2spCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShjcnRjLT5iYXNlLmRldik7Ci0JdTMyIGRwbGw7Ci0Jc3RydWN0IGRwbGwgKmNsb2NrID0gJmNy dGNfc3RhdGUtPmRwbGw7Ci0KLQlpOXh4X3VwZGF0ZV9wbGxfZGl2aWRlcnMoY3J0YywgY3J0Y19z dGF0ZSwgcmVkdWNlZF9jbG9jayk7Ci0KLQlkcGxsID0gRFBMTF9WR0FfTU9ERV9ESVM7Ci0KLQlp ZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfTFZEUykpCi0J CWRwbGwgfD0gRFBMTEJfTU9ERV9MVkRTOwotCWVsc2UKLQkJZHBsbCB8PSBEUExMQl9NT0RFX0RB Q19TRVJJQUw7Ci0KLQlpZiAoSVNfSTk0NUcoZGV2X3ByaXYpIHx8IElTX0k5NDVHTShkZXZfcHJp dikgfHwKLQkgICAgSVNfRzMzKGRldl9wcml2KSB8fCBJU19QSU5FVklFVyhkZXZfcHJpdikpIHsK LQkJZHBsbCB8PSAoY3J0Y19zdGF0ZS0+cGl4ZWxfbXVsdGlwbGllciAtIDEpCi0JCQk8PCBTRFZP X01VTFRJUExJRVJfU0hJRlRfSElSRVM7Ci0JfQotCi0JaWYgKGludGVsX2NydGNfaGFzX3R5cGUo Y3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX1NEVk8pIHx8Ci0JICAgIGludGVsX2NydGNfaGFzX3R5 cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0hETUkpKQotCQlkcGxsIHw9IERQTExfU0RWT19I SUdIX1NQRUVEOwotCi0JaWYgKGludGVsX2NydGNfaGFzX2RwX2VuY29kZXIoY3J0Y19zdGF0ZSkp Ci0JCWRwbGwgfD0gRFBMTF9TRFZPX0hJR0hfU1BFRUQ7Ci0KLQkvKiBjb21wdXRlIGJpdG1hc2sg ZnJvbSBwMSB2YWx1ZSAqLwotCWlmIChJU19QSU5FVklFVyhkZXZfcHJpdikpCi0JCWRwbGwgfD0g KDEgPDwgKGNsb2NrLT5wMSAtIDEpKSA8PCBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX1NISUZUX1BJ TkVWSUVXOwotCWVsc2UgewotCQlkcGxsIHw9ICgxIDw8IChjbG9jay0+cDEgLSAxKSkgPDwgRFBM TF9GUEEwMV9QMV9QT1NUX0RJVl9TSElGVDsKLQkJaWYgKElTX0c0WChkZXZfcHJpdikgJiYgcmVk dWNlZF9jbG9jaykKLQkJCWRwbGwgfD0gKDEgPDwgKHJlZHVjZWRfY2xvY2stPnAxIC0gMSkpIDw8 IERQTExfRlBBMV9QMV9QT1NUX0RJVl9TSElGVDsKLQl9Ci0Jc3dpdGNoIChjbG9jay0+cDIpIHsK LQljYXNlIDU6Ci0JCWRwbGwgfD0gRFBMTF9EQUNfU0VSSUFMX1AyX0NMT0NLX0RJVl81OwotCQli cmVhazsKLQljYXNlIDc6Ci0JCWRwbGwgfD0gRFBMTEJfTFZEU19QMl9DTE9DS19ESVZfNzsKLQkJ YnJlYWs7Ci0JY2FzZSAxMDoKLQkJZHBsbCB8PSBEUExMX0RBQ19TRVJJQUxfUDJfQ0xPQ0tfRElW XzEwOwotCQlicmVhazsKLQljYXNlIDE0OgotCQlkcGxsIHw9IERQTExCX0xWRFNfUDJfQ0xPQ0tf RElWXzE0OwotCQlicmVhazsKLQl9Ci0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkKLQkJ ZHBsbCB8PSAoNiA8PCBQTExfTE9BRF9QVUxTRV9QSEFTRV9TSElGVCk7Ci0KLQlpZiAoY3J0Y19z dGF0ZS0+c2R2b190dl9jbG9jaykKLQkJZHBsbCB8PSBQTExfUkVGX0lOUFVUX1RWQ0xLSU5CQzsK LQllbHNlIGlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9M VkRTKSAmJgotCQkgaW50ZWxfcGFuZWxfdXNlX3NzYyhkZXZfcHJpdikpCi0JCWRwbGwgfD0gUExM Ql9SRUZfSU5QVVRfU1BSRUFEU1BFQ1RSVU1JTjsKLQllbHNlCi0JCWRwbGwgfD0gUExMX1JFRl9J TlBVVF9EUkVGQ0xLOwotCi0JZHBsbCB8PSBEUExMX1ZDT19FTkFCTEU7Ci0JY3J0Y19zdGF0ZS0+ ZHBsbF9od19zdGF0ZS5kcGxsID0gZHBsbDsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49 IDQpIHsKLQkJdTMyIGRwbGxfbWQgPSAoY3J0Y19zdGF0ZS0+cGl4ZWxfbXVsdGlwbGllciAtIDEp Ci0JCQk8PCBEUExMX01EX1VESV9NVUxUSVBMSUVSX1NISUZUOwotCQljcnRjX3N0YXRlLT5kcGxs X2h3X3N0YXRlLmRwbGxfbWQgPSBkcGxsX21kOwotCX0KLX0KLQotc3RhdGljIHZvaWQgaTh4eF9j b21wdXRlX2RwbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCi0JCQkgICAgICBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJCSAgICAgIHN0cnVjdCBkcGxsICpyZWR1Y2Vk X2Nsb2NrKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKLQlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Ci0JdTMyIGRw bGw7Ci0Jc3RydWN0IGRwbGwgKmNsb2NrID0gJmNydGNfc3RhdGUtPmRwbGw7Ci0KLQlpOXh4X3Vw ZGF0ZV9wbGxfZGl2aWRlcnMoY3J0YywgY3J0Y19zdGF0ZSwgcmVkdWNlZF9jbG9jayk7Ci0KLQlk cGxsID0gRFBMTF9WR0FfTU9ERV9ESVM7CiAKLQlpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRj X3N0YXRlLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsKLQkJZHBsbCB8PSAoMSA8PCAoY2xvY2stPnAx IC0gMSkpIDw8IERQTExfRlBBMDFfUDFfUE9TVF9ESVZfU0hJRlQ7Ci0JfSBlbHNlIHsKLQkJaWYg KGNsb2NrLT5wMSA9PSAyKQotCQkJZHBsbCB8PSBQTExfUDFfRElWSURFX0JZX1RXTzsKLQkJZWxz ZQotCQkJZHBsbCB8PSAoY2xvY2stPnAxIC0gMikgPDwgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9T SElGVDsKLQkJaWYgKGNsb2NrLT5wMiA9PSA0KQotCQkJZHBsbCB8PSBQTExfUDJfRElWSURFX0JZ XzQ7Ci0JfQotCi0JLyoKLQkgKiBCc3BlYzoKLQkgKiAiW0FsbWFkb3IgRXJyYXRhfTogRm9yIHRo ZSBjb3JyZWN0IG9wZXJhdGlvbiBvZiB0aGUgbXV4ZWQgRFZPIHBpbnMKLQkgKiAgKEdERVZTRUxC L0kyQ2RhdGEsIEdJUkRCWS9JMkNDbGspIGFuZCAoR0ZSQU1FQi9EVklfRGF0YSwKLQkgKiAgR1RS RFlCL0RWSV9DbGspOiBCaXQgMzEgKERQTEwgVkNPIEVuYWJsZSkgYW5kIEJpdCAzMCAoMlggQ2xv Y2sKLQkgKiAgRW5hYmxlKSBtdXN0IGJlIHNldCB0byDigJwx4oCdIGluIGJvdGggdGhlIERQTEwg QSBDb250cm9sIFJlZ2lzdGVyCi0JICogICgwNjAxNGgtMDYwMTdoKSBhbmQgRFBMTCBCIENvbnRy b2wgUmVnaXN0ZXIgKDA2MDE4aC0wNjAxQmgpLiIKLQkgKgotCSAqIEZvciBzaW1wbGljaXR5IFdl IHNpbXBseSBrZWVwIGJvdGggYml0cyBhbHdheXMgZW5hYmxlZCBpbgotCSAqIGJvdGggRFBMTFMu IFRoZSBzcGVjIHNheXMgd2Ugc2hvdWxkIGRpc2FibGUgdGhlIERWTyAyWCBjbG9jawotCSAqIHdo ZW4gbm90IG5lZWRlZCwgYnV0IHRoaXMgc2VlbXMgdG8gd29yayBmaW5lIGluIHByYWN0aWNlLgot CSAqLwotCWlmIChJU19JODMwKGRldl9wcml2KSB8fAotCSAgICBpbnRlbF9jcnRjX2hhc190eXBl KGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9EVk8pKQotCQlkcGxsIHw9IERQTExfRFZPXzJYX01P REU7Ci0KLQlpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRf TFZEUykgJiYKLQkgICAgaW50ZWxfcGFuZWxfdXNlX3NzYyhkZXZfcHJpdikpCi0JCWRwbGwgfD0g UExMQl9SRUZfSU5QVVRfU1BSRUFEU1BFQ1RSVU1JTjsKLQllbHNlCi0JCWRwbGwgfD0gUExMX1JF Rl9JTlBVVF9EUkVGQ0xLOwotCi0JZHBsbCB8PSBEUExMX1ZDT19FTkFCTEU7Ci0JY3J0Y19zdGF0 ZS0+ZHBsbF9od19zdGF0ZS5kcGxsID0gZHBsbDsKLX0KIAogc3RhdGljIHZvaWQgaW50ZWxfc2V0 X3RyYW5zY29kZXJfdGltaW5ncyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSkKIHsKQEAgLTg2OTEsMjA3ICs3NzQwLDYgQEAgc3RhdGljIHZvaWQgaTl4eF9zZXRfcGlw ZWNvbmYoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCiAJaW50ZWxf ZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBQSVBFQ09ORihjcnRjLT5waXBlKSk7CiB9CiAKLXN0 YXRpYyBpbnQgaTh4eF9jcnRjX2NvbXB1dGVfY2xvY2soc3RydWN0IGludGVsX2NydGMgKmNydGMs Ci0JCQkJICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCi17Ci0Jc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmJhc2UuZGV2OwotCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKLQljb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQg KmxpbWl0OwotCWludCByZWZjbGsgPSA0ODAwMDsKLQotCW1lbXNldCgmY3J0Y19zdGF0ZS0+ZHBs bF9od19zdGF0ZSwgMCwKLQkgICAgICAgc2l6ZW9mKGNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUp KTsKLQotCWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9M VkRTKSkgewotCQlpZiAoaW50ZWxfcGFuZWxfdXNlX3NzYyhkZXZfcHJpdikpIHsKLQkJCXJlZmNs ayA9IGRldl9wcml2LT52YnQubHZkc19zc2NfZnJlcTsKLQkJCWRybV9kYmdfa21zKCZkZXZfcHJp di0+ZHJtLAotCQkJCSAgICAidXNpbmcgU1NDIHJlZmVyZW5jZSBjbG9jayBvZiAlZCBrSHpcbiIs Ci0JCQkJICAgIHJlZmNsayk7Ci0JCX0KLQotCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfaTh4eF9s dmRzOwotCX0gZWxzZSBpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9P VVRQVVRfRFZPKSkgewotCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfaTh4eF9kdm87Ci0JfSBlbHNl IHsKLQkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2k4eHhfZGFjOwotCX0KLQotCWlmICghY3J0Y19z dGF0ZS0+Y2xvY2tfc2V0ICYmCi0JICAgICFpOXh4X2ZpbmRfYmVzdF9kcGxsKGxpbWl0LCBjcnRj X3N0YXRlLCBjcnRjX3N0YXRlLT5wb3J0X2Nsb2NrLAotCQkJCSByZWZjbGssIE5VTEwsICZjcnRj X3N0YXRlLT5kcGxsKSkgewotCQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLAotCQkJIkNvdWxkbid0 IGZpbmQgUExMIHNldHRpbmdzIGZvciBtb2RlIVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0K LQotCWk4eHhfY29tcHV0ZV9kcGxsKGNydGMsIGNydGNfc3RhdGUsIE5VTEwpOwotCi0JcmV0dXJu IDA7Ci19Ci0KLXN0YXRpYyBpbnQgZzR4X2NydGNfY29tcHV0ZV9jbG9jayhzdHJ1Y3QgaW50ZWxf Y3J0YyAqY3J0YywKLQkJCQkgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQot ewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFz ZS5kZXYpOwotCWNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQ7Ci0JaW50IHJlZmNsayA9 IDk2MDAwOwotCi0JbWVtc2V0KCZjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLCAwLAotCSAgICAg ICBzaXplb2YoY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSkpOwotCi0JaWYgKGludGVsX2NydGNf aGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0xWRFMpKSB7Ci0JCWlmIChpbnRlbF9w YW5lbF91c2Vfc3NjKGRldl9wcml2KSkgewotCQkJcmVmY2xrID0gZGV2X3ByaXYtPnZidC5sdmRz X3NzY19mcmVxOwotCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkJICAgICJ1c2lu ZyBTU0MgcmVmZXJlbmNlIGNsb2NrIG9mICVkIGtIelxuIiwKLQkJCQkgICAgcmVmY2xrKTsKLQkJ fQotCi0JCWlmIChpbnRlbF9pc19kdWFsX2xpbmtfbHZkcyhkZXZfcHJpdikpCi0JCQlsaW1pdCA9 ICZpbnRlbF9saW1pdHNfZzR4X2R1YWxfY2hhbm5lbF9sdmRzOwotCQllbHNlCi0JCQlsaW1pdCA9 ICZpbnRlbF9saW1pdHNfZzR4X3NpbmdsZV9jaGFubmVsX2x2ZHM7Ci0JfSBlbHNlIGlmIChpbnRl bF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9IRE1JKSB8fAotCQkgICBp bnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9BTkFMT0cpKSB7Ci0J CWxpbWl0ID0gJmludGVsX2xpbWl0c19nNHhfaGRtaTsKLQl9IGVsc2UgaWYgKGludGVsX2NydGNf aGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX1NEVk8pKSB7Ci0JCWxpbWl0ID0gJmlu dGVsX2xpbWl0c19nNHhfc2R2bzsKLQl9IGVsc2UgewotCQkvKiBUaGUgb3B0aW9uIGlzIGZvciBv dGhlciBvdXRwdXRzICovCi0JCWxpbWl0ID0gJmludGVsX2xpbWl0c19pOXh4X3Nkdm87Ci0JfQot Ci0JaWYgKCFjcnRjX3N0YXRlLT5jbG9ja19zZXQgJiYKLQkgICAgIWc0eF9maW5kX2Jlc3RfZHBs bChsaW1pdCwgY3J0Y19zdGF0ZSwgY3J0Y19zdGF0ZS0+cG9ydF9jbG9jaywKLQkJCQlyZWZjbGss IE5VTEwsICZjcnRjX3N0YXRlLT5kcGxsKSkgewotCQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLAot CQkJIkNvdWxkbid0IGZpbmQgUExMIHNldHRpbmdzIGZvciBtb2RlIVxuIik7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0KLQotCWk5eHhfY29tcHV0ZV9kcGxsKGNydGMsIGNydGNfc3RhdGUsIE5VTEwp OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcG52X2NydGNfY29tcHV0ZV9jbG9jayhz dHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKLQkJCQkgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsK LQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Ci0JY29u c3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1pdDsKLQlpbnQgcmVmY2xrID0gOTYwMDA7Ci0KLQlt ZW1zZXQoJmNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUsIDAsCi0JICAgICAgIHNpemVvZihjcnRj X3N0YXRlLT5kcGxsX2h3X3N0YXRlKSk7Ci0KLQlpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRj X3N0YXRlLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsKLQkJaWYgKGludGVsX3BhbmVsX3VzZV9zc2Mo ZGV2X3ByaXYpKSB7Ci0JCQlyZWZjbGsgPSBkZXZfcHJpdi0+dmJ0Lmx2ZHNfc3NjX2ZyZXE7Ci0J CQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCQkgICAgInVzaW5nIFNTQyByZWZlcmVu Y2UgY2xvY2sgb2YgJWQga0h6XG4iLAotCQkJCSAgICByZWZjbGspOwotCQl9Ci0KLQkJbGltaXQg PSAmcG52X2xpbWl0c19sdmRzOwotCX0gZWxzZSB7Ci0JCWxpbWl0ID0gJnBudl9saW1pdHNfc2R2 bzsKLQl9Ci0KLQlpZiAoIWNydGNfc3RhdGUtPmNsb2NrX3NldCAmJgotCSAgICAhcG52X2ZpbmRf YmVzdF9kcGxsKGxpbWl0LCBjcnRjX3N0YXRlLCBjcnRjX3N0YXRlLT5wb3J0X2Nsb2NrLAotCQkJ CXJlZmNsaywgTlVMTCwgJmNydGNfc3RhdGUtPmRwbGwpKSB7Ci0JCWRybV9lcnIoJmRldl9wcml2 LT5kcm0sCi0JCQkiQ291bGRuJ3QgZmluZCBQTEwgc2V0dGluZ3MgZm9yIG1vZGUhXG4iKTsKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaTl4eF9jb21wdXRlX2RwbGwoY3J0YywgY3J0Y19zdGF0 ZSwgTlVMTCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpOXh4X2NydGNfY29tcHV0 ZV9jbG9jayhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKLQkJCQkgICBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ YmFzZS5kZXY7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShk ZXYpOwotCWNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQ7Ci0JaW50IHJlZmNsayA9IDk2 MDAwOwotCi0JbWVtc2V0KCZjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLCAwLAotCSAgICAgICBz aXplb2YoY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSkpOwotCi0JaWYgKGludGVsX2NydGNfaGFz X3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0xWRFMpKSB7Ci0JCWlmIChpbnRlbF9wYW5l bF91c2Vfc3NjKGRldl9wcml2KSkgewotCQkJcmVmY2xrID0gZGV2X3ByaXYtPnZidC5sdmRzX3Nz Y19mcmVxOwotCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkJICAgICJ1c2luZyBT U0MgcmVmZXJlbmNlIGNsb2NrIG9mICVkIGtIelxuIiwKLQkJCQkgICAgcmVmY2xrKTsKLQkJfQot Ci0JCWxpbWl0ID0gJmludGVsX2xpbWl0c19pOXh4X2x2ZHM7Ci0JfSBlbHNlIHsKLQkJbGltaXQg PSAmaW50ZWxfbGltaXRzX2k5eHhfc2R2bzsKLQl9Ci0KLQlpZiAoIWNydGNfc3RhdGUtPmNsb2Nr X3NldCAmJgotCSAgICAhaTl4eF9maW5kX2Jlc3RfZHBsbChsaW1pdCwgY3J0Y19zdGF0ZSwgY3J0 Y19zdGF0ZS0+cG9ydF9jbG9jaywKLQkJCQkgcmVmY2xrLCBOVUxMLCAmY3J0Y19zdGF0ZS0+ZHBs bCkpIHsKLQkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwKLQkJCSJDb3VsZG4ndCBmaW5kIFBMTCBz ZXR0aW5ncyBmb3IgbW9kZSFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpOXh4X2Nv bXB1dGVfZHBsbChjcnRjLCBjcnRjX3N0YXRlLCBOVUxMKTsKLQotCXJldHVybiAwOwotfQotCi1z dGF0aWMgaW50IGNodl9jcnRjX2NvbXB1dGVfY2xvY2soc3RydWN0IGludGVsX2NydGMgKmNydGMs Ci0JCQkJICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlpbnQgcmVm Y2xrID0gMTAwMDAwOwotCWNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQgPSAmaW50ZWxf bGltaXRzX2NodjsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUoY3J0 Y19zdGF0ZS0+dWFwaS5jcnRjLT5kZXYpOwotCi0JbWVtc2V0KCZjcnRjX3N0YXRlLT5kcGxsX2h3 X3N0YXRlLCAwLAotCSAgICAgICBzaXplb2YoY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSkpOwot Ci0JaWYgKCFjcnRjX3N0YXRlLT5jbG9ja19zZXQgJiYKLQkgICAgIWNodl9maW5kX2Jlc3RfZHBs bChsaW1pdCwgY3J0Y19zdGF0ZSwgY3J0Y19zdGF0ZS0+cG9ydF9jbG9jaywKLQkJCQlyZWZjbGss IE5VTEwsICZjcnRjX3N0YXRlLT5kcGxsKSkgewotCQlkcm1fZXJyKCZpOTE1LT5kcm0sICJDb3Vs ZG4ndCBmaW5kIFBMTCBzZXR0aW5ncyBmb3IgbW9kZSFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsK LQl9Ci0KLQljaHZfY29tcHV0ZV9kcGxsKGNydGMsIGNydGNfc3RhdGUpOwotCi0JcmV0dXJuIDA7 Ci19Ci0KLXN0YXRpYyBpbnQgdmx2X2NydGNfY29tcHV0ZV9jbG9jayhzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0YywKLQkJCQkgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQotewot CWludCByZWZjbGsgPSAxMDAwMDA7Ci0JY29uc3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1pdCA9 ICZpbnRlbF9saW1pdHNfdmx2OwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9f aTkxNShjcnRjX3N0YXRlLT51YXBpLmNydGMtPmRldik7Ci0KLQltZW1zZXQoJmNydGNfc3RhdGUt PmRwbGxfaHdfc3RhdGUsIDAsCi0JICAgICAgIHNpemVvZihjcnRjX3N0YXRlLT5kcGxsX2h3X3N0 YXRlKSk7Ci0KLQlpZiAoIWNydGNfc3RhdGUtPmNsb2NrX3NldCAmJgotCSAgICAhdmx2X2ZpbmRf YmVzdF9kcGxsKGxpbWl0LCBjcnRjX3N0YXRlLCBjcnRjX3N0YXRlLT5wb3J0X2Nsb2NrLAotCQkJ CXJlZmNsaywgTlVMTCwgJmNydGNfc3RhdGUtPmRwbGwpKSB7Ci0JCWRybV9lcnIoJmk5MTUtPmRy bSwgICJDb3VsZG4ndCBmaW5kIFBMTCBzZXR0aW5ncyBmb3IgbW9kZSFcbiIpOwotCQlyZXR1cm4g LUVJTlZBTDsKLQl9Ci0KLQl2bHZfY29tcHV0ZV9kcGxsKGNydGMsIGNydGNfc3RhdGUpOwotCi0J cmV0dXJuIDA7Ci19CiAKIHN0YXRpYyBib29sIGk5eHhfaGFzX3BmaXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQogewpAQCAtOTkwMiwxNzIgKzg3NTAsNiBAQCBpbnQgaWxrX2dl dF9sYW5lc19yZXF1aXJlZChpbnQgdGFyZ2V0X2Nsb2NrLCBpbnQgbGlua19idywgaW50IGJwcCkK IAlyZXR1cm4gRElWX1JPVU5EX1VQKGJwcywgbGlua19idyAqIDgpOwogfQogCi1zdGF0aWMgYm9v bCBpbGtfbmVlZHNfZmJfY2JfdHVuZShzdHJ1Y3QgZHBsbCAqZHBsbCwgaW50IGZhY3RvcikKLXsK LQlyZXR1cm4gaTl4eF9kcGxsX2NvbXB1dGVfbShkcGxsKSA8IGZhY3RvciAqIGRwbGwtPm47Ci19 Ci0KLXN0YXRpYyB2b2lkIGlsa19jb21wdXRlX2RwbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMs Ci0JCQkgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkJICAgICBz dHJ1Y3QgZHBsbCAqcmVkdWNlZF9jbG9jaykKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKLQl1MzIgZHBsbCwgZnAsIGZwMjsK LQlpbnQgZmFjdG9yOwotCi0JLyogRW5hYmxlIGF1dG90dW5pbmcgb2YgdGhlIFBMTCBjbG9jayAo aWYgcGVybWlzc2libGUpICovCi0JZmFjdG9yID0gMjE7Ci0JaWYgKGludGVsX2NydGNfaGFzX3R5 cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0xWRFMpKSB7Ci0JCWlmICgoaW50ZWxfcGFuZWxf dXNlX3NzYyhkZXZfcHJpdikgJiYKLQkJICAgICBkZXZfcHJpdi0+dmJ0Lmx2ZHNfc3NjX2ZyZXEg PT0gMTAwMDAwKSB8fAotCQkgICAgKEhBU19QQ0hfSUJYKGRldl9wcml2KSAmJgotCQkgICAgIGlu dGVsX2lzX2R1YWxfbGlua19sdmRzKGRldl9wcml2KSkpCi0JCQlmYWN0b3IgPSAyNTsKLQl9IGVs c2UgaWYgKGNydGNfc3RhdGUtPnNkdm9fdHZfY2xvY2spIHsKLQkJZmFjdG9yID0gMjA7Ci0JfQot Ci0JZnAgPSBpOXh4X2RwbGxfY29tcHV0ZV9mcCgmY3J0Y19zdGF0ZS0+ZHBsbCk7Ci0KLQlpZiAo aWxrX25lZWRzX2ZiX2NiX3R1bmUoJmNydGNfc3RhdGUtPmRwbGwsIGZhY3RvcikpCi0JCWZwIHw9 IEZQX0NCX1RVTkU7Ci0KLQlpZiAocmVkdWNlZF9jbG9jaykgewotCQlmcDIgPSBpOXh4X2RwbGxf Y29tcHV0ZV9mcChyZWR1Y2VkX2Nsb2NrKTsKLQotCQlpZiAocmVkdWNlZF9jbG9jay0+bSA8IGZh Y3RvciAqIHJlZHVjZWRfY2xvY2stPm4pCi0JCQlmcDIgfD0gRlBfQ0JfVFVORTsKLQl9IGVsc2Ug ewotCQlmcDIgPSBmcDsKLQl9Ci0KLQlkcGxsID0gMDsKLQotCWlmIChpbnRlbF9jcnRjX2hhc190 eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9MVkRTKSkKLQkJZHBsbCB8PSBEUExMQl9NT0RF X0xWRFM7Ci0JZWxzZQotCQlkcGxsIHw9IERQTExCX01PREVfREFDX1NFUklBTDsKLQotCWRwbGwg fD0gKGNydGNfc3RhdGUtPnBpeGVsX211bHRpcGxpZXIgLSAxKQotCQk8PCBQTExfUkVGX1NEVk9f SERNSV9NVUxUSVBMSUVSX1NISUZUOwotCi0JaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19z dGF0ZSwgSU5URUxfT1VUUFVUX1NEVk8pIHx8Ci0JICAgIGludGVsX2NydGNfaGFzX3R5cGUoY3J0 Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0hETUkpKQotCQlkcGxsIHw9IERQTExfU0RWT19ISUdIX1NQ RUVEOwotCi0JaWYgKGludGVsX2NydGNfaGFzX2RwX2VuY29kZXIoY3J0Y19zdGF0ZSkpCi0JCWRw bGwgfD0gRFBMTF9TRFZPX0hJR0hfU1BFRUQ7Ci0KLQkvKgotCSAqIFRoZSBoaWdoIHNwZWVkIElP IGNsb2NrIGlzIG9ubHkgcmVhbGx5IHJlcXVpcmVkIGZvcgotCSAqIFNEVk8vSERNSS9EUCwgYnV0 IHdlIGFsc28gZW5hYmxlIGl0IGZvciBDUlQgdG8gbWFrZSBpdAotCSAqIHBvc3NpYmxlIHRvIHNo YXJlIHRoZSBEUExMIGJldHdlZW4gQ1JUIGFuZCBIRE1JLiBFbmFibGluZwotCSAqIHRoZSBjbG9j ayBuZWVkbGVzc2x5IGRvZXMgbm8gcmVhbCBoYXJtLCBleGNlcHQgdXNlIHVwIGEKLQkgKiBiaXQg b2YgcG93ZXIgcG90ZW50aWFsbHkuCi0JICoKLQkgKiBXZSdsbCBsaW1pdCB0aGlzIHRvIElWQiB3 aXRoIDMgcGlwZXMsIHNpbmNlIGl0IGhhcyBvbmx5IHR3bwotCSAqIERQTExzIGFuZCBzbyBEUExM IHNoYXJpbmcgaXMgdGhlIG9ubHkgd2F5IHRvIGdldCB0aHJlZSBwaXBlcwotCSAqIGRyaXZpbmcg UENIIHBvcnRzIGF0IHRoZSBzYW1lIHRpbWUuIE9uIFNOQiB3ZSBjb3VsZCBkbyB0aGlzLAotCSAq IGFuZCBwb3RlbnRpYWxseSBhdm9pZCBlbmFibGluZyB0aGUgc2Vjb25kIERQTEwsIGJ1dCBpdCdz IG5vdAotCSAqIGNsZWFyIGlmIGl0JydzIGEgd2luIG9yIGxvc3MgcG93ZXIgd2lzZS4gTm8gcG9p bnQgaW4gZG9pbmcKLQkgKiB0aGlzIG9uIElMSyBhdCBhbGwgc2luY2UgaXQgaGFzIGEgZml4ZWQg RFBMTDwtPnBpcGUgbWFwcGluZy4KLQkgKi8KLQlpZiAoSU5URUxfTlVNX1BJUEVTKGRldl9wcml2 KSA9PSAzICYmCi0JICAgIGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VU UFVUX0FOQUxPRykpCi0JCWRwbGwgfD0gRFBMTF9TRFZPX0hJR0hfU1BFRUQ7Ci0KLQkvKiBjb21w dXRlIGJpdG1hc2sgZnJvbSBwMSB2YWx1ZSAqLwotCWRwbGwgfD0gKDEgPDwgKGNydGNfc3RhdGUt PmRwbGwucDEgLSAxKSkgPDwgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9TSElGVDsKLQkvKiBhbHNv IEZQQTEgKi8KLQlkcGxsIHw9ICgxIDw8IChjcnRjX3N0YXRlLT5kcGxsLnAxIC0gMSkpIDw8IERQ TExfRlBBMV9QMV9QT1NUX0RJVl9TSElGVDsKLQotCXN3aXRjaCAoY3J0Y19zdGF0ZS0+ZHBsbC5w MikgewotCWNhc2UgNToKLQkJZHBsbCB8PSBEUExMX0RBQ19TRVJJQUxfUDJfQ0xPQ0tfRElWXzU7 Ci0JCWJyZWFrOwotCWNhc2UgNzoKLQkJZHBsbCB8PSBEUExMQl9MVkRTX1AyX0NMT0NLX0RJVl83 OwotCQlicmVhazsKLQljYXNlIDEwOgotCQlkcGxsIHw9IERQTExfREFDX1NFUklBTF9QMl9DTE9D S19ESVZfMTA7Ci0JCWJyZWFrOwotCWNhc2UgMTQ6Ci0JCWRwbGwgfD0gRFBMTEJfTFZEU19QMl9D TE9DS19ESVZfMTQ7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNy dGNfc3RhdGUsIElOVEVMX09VVFBVVF9MVkRTKSAmJgotCSAgICBpbnRlbF9wYW5lbF91c2Vfc3Nj KGRldl9wcml2KSkKLQkJZHBsbCB8PSBQTExCX1JFRl9JTlBVVF9TUFJFQURTUEVDVFJVTUlOOwot CWVsc2UKLQkJZHBsbCB8PSBQTExfUkVGX0lOUFVUX0RSRUZDTEs7Ci0KLQlkcGxsIHw9IERQTExf VkNPX0VOQUJMRTsKLQotCWNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUuZHBsbCA9IGRwbGw7Ci0J Y3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZS5mcDAgPSBmcDsKLQljcnRjX3N0YXRlLT5kcGxsX2h3 X3N0YXRlLmZwMSA9IGZwMjsKLX0KLQotc3RhdGljIGludCBpbGtfY3J0Y19jb21wdXRlX2Nsb2Nr KHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAotCQkJCSAgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShjcnRjLT5iYXNlLmRldik7Ci0Jc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUg PQotCQl0b19pbnRlbF9hdG9taWNfc3RhdGUoY3J0Y19zdGF0ZS0+dWFwaS5zdGF0ZSk7Ci0JY29u c3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1pdDsKLQlpbnQgcmVmY2xrID0gMTIwMDAwOwotCi0J bWVtc2V0KCZjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLCAwLAotCSAgICAgICBzaXplb2YoY3J0 Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSkpOwotCi0JLyogQ1BVIGVEUCBpcyB0aGUgb25seSBvdXRw dXQgdGhhdCBkb2Vzbid0IG5lZWQgYSBQQ0ggUExMIG9mIGl0cyBvd24uICovCi0JaWYgKCFjcnRj X3N0YXRlLT5oYXNfcGNoX2VuY29kZXIpCi0JCXJldHVybiAwOwotCi0JaWYgKGludGVsX2NydGNf aGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0xWRFMpKSB7Ci0JCWlmIChpbnRlbF9w YW5lbF91c2Vfc3NjKGRldl9wcml2KSkgewotCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0s Ci0JCQkJICAgICJ1c2luZyBTU0MgcmVmZXJlbmNlIGNsb2NrIG9mICVkIGtIelxuIiwKLQkJCQkg ICAgZGV2X3ByaXYtPnZidC5sdmRzX3NzY19mcmVxKTsKLQkJCXJlZmNsayA9IGRldl9wcml2LT52 YnQubHZkc19zc2NfZnJlcTsKLQkJfQotCi0JCWlmIChpbnRlbF9pc19kdWFsX2xpbmtfbHZkcyhk ZXZfcHJpdikpIHsKLQkJCWlmIChyZWZjbGsgPT0gMTAwMDAwKQotCQkJCWxpbWl0ID0gJmlsa19s aW1pdHNfZHVhbF9sdmRzXzEwMG07Ci0JCQllbHNlCi0JCQkJbGltaXQgPSAmaWxrX2xpbWl0c19k dWFsX2x2ZHM7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAocmVmY2xrID09IDEwMDAwMCkKLQkJCQlsaW1p dCA9ICZpbGtfbGltaXRzX3NpbmdsZV9sdmRzXzEwMG07Ci0JCQllbHNlCi0JCQkJbGltaXQgPSAm aWxrX2xpbWl0c19zaW5nbGVfbHZkczsKLQkJfQotCX0gZWxzZSB7Ci0JCWxpbWl0ID0gJmlsa19s aW1pdHNfZGFjOwotCX0KLQotCWlmICghY3J0Y19zdGF0ZS0+Y2xvY2tfc2V0ICYmCi0JICAgICFn NHhfZmluZF9iZXN0X2RwbGwobGltaXQsIGNydGNfc3RhdGUsIGNydGNfc3RhdGUtPnBvcnRfY2xv Y2ssCi0JCQkJcmVmY2xrLCBOVUxMLCAmY3J0Y19zdGF0ZS0+ZHBsbCkpIHsKLQkJZHJtX2Vycigm ZGV2X3ByaXYtPmRybSwKLQkJCSJDb3VsZG4ndCBmaW5kIFBMTCBzZXR0aW5ncyBmb3IgbW9kZSFc biIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpbGtfY29tcHV0ZV9kcGxsKGNydGMsIGNy dGNfc3RhdGUsIE5VTEwpOwotCi0JaWYgKCFpbnRlbF9yZXNlcnZlX3NoYXJlZF9kcGxscyhzdGF0 ZSwgY3J0YywgTlVMTCkpIHsKLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkgICAg ImZhaWxlZCB0byBmaW5kIFBMTCBmb3IgcGlwZSAlY1xuIiwKLQkJCSAgICBwaXBlX25hbWUoY3J0 Yy0+cGlwZSkpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3Rh dGljIHZvaWQgaW50ZWxfcGNoX3RyYW5zY29kZXJfZ2V0X21fbihzdHJ1Y3QgaW50ZWxfY3J0YyAq Y3J0YywKIAkJCQkJIHN0cnVjdCBpbnRlbF9saW5rX21fbiAqbV9uKQogewpAQCAtMTA0ODAsMjkg KzkxNjIsNiBAQCBzdGF0aWMgYm9vbCBpbGtfZ2V0X3BpcGVfY29uZmlnKHN0cnVjdCBpbnRlbF9j cnRjICpjcnRjLAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgaHN3X2NydGNfY29tcHV0 ZV9jbG9jayhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKLQkJCQkgIHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOwotCXN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUg KnN0YXRlID0KLQkJdG9faW50ZWxfYXRvbWljX3N0YXRlKGNydGNfc3RhdGUtPnVhcGkuc3RhdGUp OwotCi0JaWYgKCFpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9E U0kpIHx8Ci0JICAgIElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEpIHsKLQkJc3RydWN0IGludGVs X2VuY29kZXIgKmVuY29kZXIgPQotCQkJaW50ZWxfZ2V0X2NydGNfbmV3X2VuY29kZXIoc3RhdGUs IGNydGNfc3RhdGUpOwotCi0JCWlmICghaW50ZWxfcmVzZXJ2ZV9zaGFyZWRfZHBsbHMoc3RhdGUs IGNydGMsIGVuY29kZXIpKSB7Ci0JCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCQkg ICAgImZhaWxlZCB0byBmaW5kIFBMTCBmb3IgcGlwZSAlY1xuIiwKLQkJCQkgICAgcGlwZV9uYW1l KGNydGMtPnBpcGUpKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7 Ci19Ci0KIHN0YXRpYyB2b2lkIGRnMV9nZXRfZGRpX3BsbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsIGVudW0gcG9ydCBwb3J0LAogCQkJICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpwaXBlX2NvbmZpZykKIHsKQEAgLTE2NDM3LDY5ICsxNTA5NiwyNyBAQCB2b2lkIGludGVs X2luaXRfZGlzcGxheV9ob29rcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7 CiAJaW50ZWxfaW5pdF9jZGNsa19ob29rcyhkZXZfcHJpdik7CiAKKwlpbnRlbF9kcGxsX2luaXRf Y2xvY2tfaG9vayhkZXZfcHJpdik7CisKIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KSB7 CiAJCWRldl9wcml2LT5kaXNwbGF5LmdldF9waXBlX2NvbmZpZyA9IGhzd19nZXRfcGlwZV9jb25m aWc7Ci0JCWRldl9wcml2LT5kaXNwbGF5LmdldF9pbml0aWFsX3BsYW5lX2NvbmZpZyA9Ci0JCQlz a2xfZ2V0X2luaXRpYWxfcGxhbmVfY29uZmlnOwotCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2Nv bXB1dGVfY2xvY2sgPSBoc3dfY3J0Y19jb21wdXRlX2Nsb2NrOwogCQlkZXZfcHJpdi0+ZGlzcGxh eS5jcnRjX2VuYWJsZSA9IGhzd19jcnRjX2VuYWJsZTsKIAkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0 Y19kaXNhYmxlID0gaHN3X2NydGNfZGlzYWJsZTsKIAl9IGVsc2UgaWYgKEhBU19EREkoZGV2X3By aXYpKSB7CiAJCWRldl9wcml2LT5kaXNwbGF5LmdldF9waXBlX2NvbmZpZyA9IGhzd19nZXRfcGlw ZV9jb25maWc7Ci0JCWRldl9wcml2LT5kaXNwbGF5LmdldF9pbml0aWFsX3BsYW5lX2NvbmZpZyA9 Ci0JCQlpOXh4X2dldF9pbml0aWFsX3BsYW5lX2NvbmZpZzsKLQkJZGV2X3ByaXYtPmRpc3BsYXku Y3J0Y19jb21wdXRlX2Nsb2NrID0KLQkJCWhzd19jcnRjX2NvbXB1dGVfY2xvY2s7CiAJCWRldl9w cml2LT5kaXNwbGF5LmNydGNfZW5hYmxlID0gaHN3X2NydGNfZW5hYmxlOwogCQlkZXZfcHJpdi0+ ZGlzcGxheS5jcnRjX2Rpc2FibGUgPSBoc3dfY3J0Y19kaXNhYmxlOwogCX0gZWxzZSBpZiAoSEFT X1BDSF9TUExJVChkZXZfcHJpdikpIHsKIAkJZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X3BpcGVfY29u ZmlnID0gaWxrX2dldF9waXBlX2NvbmZpZzsKLQkJZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X2luaXRp YWxfcGxhbmVfY29uZmlnID0KLQkJCWk5eHhfZ2V0X2luaXRpYWxfcGxhbmVfY29uZmlnOwotCQlk ZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2NvbXB1dGVfY2xvY2sgPQotCQkJaWxrX2NydGNfY29tcHV0 ZV9jbG9jazsKIAkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19lbmFibGUgPSBpbGtfY3J0Y19lbmFi bGU7CiAJCWRldl9wcml2LT5kaXNwbGF5LmNydGNfZGlzYWJsZSA9IGlsa19jcnRjX2Rpc2FibGU7 Ci0JfSBlbHNlIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkgewotCQlkZXZfcHJpdi0+ZGlz cGxheS5nZXRfcGlwZV9jb25maWcgPSBpOXh4X2dldF9waXBlX2NvbmZpZzsKLQkJZGV2X3ByaXYt PmRpc3BsYXkuZ2V0X2luaXRpYWxfcGxhbmVfY29uZmlnID0KLQkJCWk5eHhfZ2V0X2luaXRpYWxf cGxhbmVfY29uZmlnOwotCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2NvbXB1dGVfY2xvY2sgPSBj aHZfY3J0Y19jb21wdXRlX2Nsb2NrOwotCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2VuYWJsZSA9 IHZhbGxleXZpZXdfY3J0Y19lbmFibGU7Ci0JCWRldl9wcml2LT5kaXNwbGF5LmNydGNfZGlzYWJs ZSA9IGk5eHhfY3J0Y19kaXNhYmxlOwotCX0gZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJp dikpIHsKKwl9IGVsc2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpIHx8CisJCSAgIElTX1ZB TExFWVZJRVcoZGV2X3ByaXYpKSB7CiAJCWRldl9wcml2LT5kaXNwbGF5LmdldF9waXBlX2NvbmZp ZyA9IGk5eHhfZ2V0X3BpcGVfY29uZmlnOwotCQlkZXZfcHJpdi0+ZGlzcGxheS5nZXRfaW5pdGlh bF9wbGFuZV9jb25maWcgPQotCQkJaTl4eF9nZXRfaW5pdGlhbF9wbGFuZV9jb25maWc7Ci0JCWRl dl9wcml2LT5kaXNwbGF5LmNydGNfY29tcHV0ZV9jbG9jayA9IHZsdl9jcnRjX2NvbXB1dGVfY2xv Y2s7CiAJCWRldl9wcml2LT5kaXNwbGF5LmNydGNfZW5hYmxlID0gdmFsbGV5dmlld19jcnRjX2Vu YWJsZTsKIAkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19kaXNhYmxlID0gaTl4eF9jcnRjX2Rpc2Fi bGU7Ci0JfSBlbHNlIGlmIChJU19HNFgoZGV2X3ByaXYpKSB7Ci0JCWRldl9wcml2LT5kaXNwbGF5 LmdldF9waXBlX2NvbmZpZyA9IGk5eHhfZ2V0X3BpcGVfY29uZmlnOwotCQlkZXZfcHJpdi0+ZGlz cGxheS5nZXRfaW5pdGlhbF9wbGFuZV9jb25maWcgPQotCQkJaTl4eF9nZXRfaW5pdGlhbF9wbGFu ZV9jb25maWc7Ci0JCWRldl9wcml2LT5kaXNwbGF5LmNydGNfY29tcHV0ZV9jbG9jayA9IGc0eF9j cnRjX2NvbXB1dGVfY2xvY2s7Ci0JCWRldl9wcml2LT5kaXNwbGF5LmNydGNfZW5hYmxlID0gaTl4 eF9jcnRjX2VuYWJsZTsKLQkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19kaXNhYmxlID0gaTl4eF9j cnRjX2Rpc2FibGU7Ci0JfSBlbHNlIGlmIChJU19QSU5FVklFVyhkZXZfcHJpdikpIHsKLQkJZGV2 X3ByaXYtPmRpc3BsYXkuZ2V0X3BpcGVfY29uZmlnID0gaTl4eF9nZXRfcGlwZV9jb25maWc7Ci0J CWRldl9wcml2LT5kaXNwbGF5LmdldF9pbml0aWFsX3BsYW5lX2NvbmZpZyA9Ci0JCQlpOXh4X2dl dF9pbml0aWFsX3BsYW5lX2NvbmZpZzsKLQkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19jb21wdXRl X2Nsb2NrID0gcG52X2NydGNfY29tcHV0ZV9jbG9jazsKLQkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0 Y19lbmFibGUgPSBpOXh4X2NydGNfZW5hYmxlOwotCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2Rp c2FibGUgPSBpOXh4X2NydGNfZGlzYWJsZTsKLQl9IGVsc2UgaWYgKCFJU19HRU4oZGV2X3ByaXYs IDIpKSB7Ci0JCWRldl9wcml2LT5kaXNwbGF5LmdldF9waXBlX2NvbmZpZyA9IGk5eHhfZ2V0X3Bp cGVfY29uZmlnOwotCQlkZXZfcHJpdi0+ZGlzcGxheS5nZXRfaW5pdGlhbF9wbGFuZV9jb25maWcg PQotCQkJaTl4eF9nZXRfaW5pdGlhbF9wbGFuZV9jb25maWc7Ci0JCWRldl9wcml2LT5kaXNwbGF5 LmNydGNfY29tcHV0ZV9jbG9jayA9IGk5eHhfY3J0Y19jb21wdXRlX2Nsb2NrOwotCQlkZXZfcHJp di0+ZGlzcGxheS5jcnRjX2VuYWJsZSA9IGk5eHhfY3J0Y19lbmFibGU7Ci0JCWRldl9wcml2LT5k aXNwbGF5LmNydGNfZGlzYWJsZSA9IGk5eHhfY3J0Y19kaXNhYmxlOwogCX0gZWxzZSB7CiAJCWRl dl9wcml2LT5kaXNwbGF5LmdldF9waXBlX2NvbmZpZyA9IGk5eHhfZ2V0X3BpcGVfY29uZmlnOwot CQlkZXZfcHJpdi0+ZGlzcGxheS5nZXRfaW5pdGlhbF9wbGFuZV9jb25maWcgPQotCQkJaTl4eF9n ZXRfaW5pdGlhbF9wbGFuZV9jb25maWc7Ci0JCWRldl9wcml2LT5kaXNwbGF5LmNydGNfY29tcHV0 ZV9jbG9jayA9IGk4eHhfY3J0Y19jb21wdXRlX2Nsb2NrOwogCQlkZXZfcHJpdi0+ZGlzcGxheS5j cnRjX2VuYWJsZSA9IGk5eHhfY3J0Y19lbmFibGU7CiAJCWRldl9wcml2LT5kaXNwbGF5LmNydGNf ZGlzYWJsZSA9IGk5eHhfY3J0Y19kaXNhYmxlOwogCX0KQEAgLTE2NTEzLDEwICsxNTEzMCwxMyBA QCB2b2lkIGludGVsX2luaXRfZGlzcGxheV9ob29rcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCiAJCWRldl9wcml2LT5kaXNwbGF5LmZkaV9saW5rX3RyYWluID0gaXZiX21hbnVh bF9mZGlfbGlua190cmFpbjsKIAl9CiAKLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KQor CWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDkpIHsKIAkJZGV2X3ByaXYtPmRpc3BsYXkuY29t bWl0X21vZGVzZXRfZW5hYmxlcyA9IHNrbF9jb21taXRfbW9kZXNldF9lbmFibGVzOwotCWVsc2UK KwkJZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X2luaXRpYWxfcGxhbmVfY29uZmlnID0gc2tsX2dldF9p bml0aWFsX3BsYW5lX2NvbmZpZzsKKwl9IGVsc2UgewogCQlkZXZfcHJpdi0+ZGlzcGxheS5jb21t aXRfbW9kZXNldF9lbmFibGVzID0gaW50ZWxfY29tbWl0X21vZGVzZXRfZW5hYmxlczsKKwkJZGV2 X3ByaXYtPmRpc3BsYXkuZ2V0X2luaXRpYWxfcGxhbmVfY29uZmlnID0gaTl4eF9nZXRfaW5pdGlh bF9wbGFuZV9jb25maWc7CisJfQogCiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9kaXNwbGF5LmgKaW5kZXggN2RkYmMwMGEwZjQxLi42MDRhMTgzZmVmN2QgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5oCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5oCkBAIC02NTEsNiAr NjUxLDkgQEAgdTMyIGludGVsX3BsYW5lX2NvbXB1dGVfYWxpZ25lZF9vZmZzZXQoaW50ICp4LCBp bnQgKnksCiAJCQkJICAgICAgIGludCBjb2xvcl9wbGFuZSk7CiBpbnQgaW50ZWxfcGxhbmVfcGlu X2ZiKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwogdm9pZCBpbnRlbF9w bGFuZV91bnBpbl9mYihzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKm9sZF9wbGFuZV9zdGF0ZSk7 CitzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqCitpbnRlbF9nZXRfY3J0Y19uZXdfZW5jb2Rlcihjb25z dCBzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKIAogLyogbW9kZXNldHRpbmcgKi8KIHZvaWQg aW50ZWxfbW9kZXNldF9pbml0X2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBl cy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmgK aW5kZXggMjQ3OTIxMDJiY2Y2Li44ZTE0NWY5YTMyZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oCkBAIC0xODM5LDQgKzE4Mzks MTcgQEAgdG9faW50ZWxfZnJvbnRidWZmZXIoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCiAJ cmV0dXJuIGZiID8gdG9faW50ZWxfZnJhbWVidWZmZXIoZmIpLT5mcm9udGJ1ZmZlciA6IE5VTEw7 CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBpbnRlbF9wYW5lbF91c2Vfc3NjKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlpZiAoZGV2X3ByaXYtPnBhcmFtcy5wYW5lbF91 c2Vfc3NjID49IDApCisJCXJldHVybiBkZXZfcHJpdi0+cGFyYW1zLnBhbmVsX3VzZV9zc2MgIT0g MDsKKwlyZXR1cm4gZGV2X3ByaXYtPnZidC5sdmRzX3VzZV9zc2MKKwkJJiYgIShkZXZfcHJpdi0+ cXVpcmtzICYgUVVJUktfTFZEU19TU0NfRElTQUJMRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMy IGk5eHhfZHBsbF9jb21wdXRlX2ZwKHN0cnVjdCBkcGxsICpkcGxsKQoreworCXJldHVybiBkcGxs LT5uIDw8IDE2IHwgZHBsbC0+bTEgPDwgOCB8IGRwbGwtPm0yOworfQorCiAjZW5kaWYgLyogIF9f SU5URUxfRElTUExBWV9UWVBFU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZHBsbC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9kcGxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43YmE3 ZjMxNWFhZWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5 L2ludGVsX2RwbGwuYwpAQCAtMCwwICsxLDEzNjMgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBNSVQKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgorICov CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSAiaW50ZWxfZGlzcGxheV90eXBl cy5oIgorI2luY2x1ZGUgImludGVsX2Rpc3BsYXkuaCIKKyNpbmNsdWRlICJpbnRlbF9kcGxsLmgi CisjaW5jbHVkZSAiaW50ZWxfbHZkcy5oIgorI2luY2x1ZGUgImludGVsX3BhbmVsLmgiCisKK3N0 cnVjdCBpbnRlbF9saW1pdCB7CisJc3RydWN0IHsKKwkJaW50IG1pbiwgbWF4OworCX0gZG90LCB2 Y28sIG4sIG0sIG0xLCBtMiwgcCwgcDE7CisKKwlzdHJ1Y3QgeworCQlpbnQgZG90X2xpbWl0Owor CQlpbnQgcDJfc2xvdywgcDJfZmFzdDsKKwl9IHAyOworfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg aW50ZWxfbGltaXQgaW50ZWxfbGltaXRzX2k4eHhfZGFjID0geworCS5kb3QgPSB7IC5taW4gPSAy NTAwMCwgLm1heCA9IDM1MDAwMCB9LAorCS52Y28gPSB7IC5taW4gPSA5MDgwMDAsIC5tYXggPSAx NTEyMDAwIH0sCisJLm4gPSB7IC5taW4gPSAyLCAubWF4ID0gMTYgfSwKKwkubSA9IHsgLm1pbiA9 IDk2LCAubWF4ID0gMTQwIH0sCisJLm0xID0geyAubWluID0gMTgsIC5tYXggPSAyNiB9LAorCS5t MiA9IHsgLm1pbiA9IDYsIC5tYXggPSAxNiB9LAorCS5wID0geyAubWluID0gNCwgLm1heCA9IDEy OCB9LAorCS5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSAzMyB9LAorCS5wMiA9IHsgLmRvdF9saW1p dCA9IDE2NTAwMCwKKwkJLnAyX3Nsb3cgPSA0LCAucDJfZmFzdCA9IDIgfSwKK307CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaW50ZWxfbGltaXRzX2k4eHhfZHZvID0geworCS5k b3QgPSB7IC5taW4gPSAyNTAwMCwgLm1heCA9IDM1MDAwMCB9LAorCS52Y28gPSB7IC5taW4gPSA5 MDgwMDAsIC5tYXggPSAxNTEyMDAwIH0sCisJLm4gPSB7IC5taW4gPSAyLCAubWF4ID0gMTYgfSwK KwkubSA9IHsgLm1pbiA9IDk2LCAubWF4ID0gMTQwIH0sCisJLm0xID0geyAubWluID0gMTgsIC5t YXggPSAyNiB9LAorCS5tMiA9IHsgLm1pbiA9IDYsIC5tYXggPSAxNiB9LAorCS5wID0geyAubWlu ID0gNCwgLm1heCA9IDEyOCB9LAorCS5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSAzMyB9LAorCS5w MiA9IHsgLmRvdF9saW1pdCA9IDE2NTAwMCwKKwkJLnAyX3Nsb3cgPSA0LCAucDJfZmFzdCA9IDQg fSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaW50ZWxfbGltaXRzX2k4 eHhfbHZkcyA9IHsKKwkuZG90ID0geyAubWluID0gMjUwMDAsIC5tYXggPSAzNTAwMDAgfSwKKwku dmNvID0geyAubWluID0gOTA4MDAwLCAubWF4ID0gMTUxMjAwMCB9LAorCS5uID0geyAubWluID0g MiwgLm1heCA9IDE2IH0sCisJLm0gPSB7IC5taW4gPSA5NiwgLm1heCA9IDE0MCB9LAorCS5tMSA9 IHsgLm1pbiA9IDE4LCAubWF4ID0gMjYgfSwKKwkubTIgPSB7IC5taW4gPSA2LCAubWF4ID0gMTYg fSwKKwkucCA9IHsgLm1pbiA9IDQsIC5tYXggPSAxMjggfSwKKwkucDEgPSB7IC5taW4gPSAxLCAu bWF4ID0gNiB9LAorCS5wMiA9IHsgLmRvdF9saW1pdCA9IDE2NTAwMCwKKwkJLnAyX3Nsb3cgPSAx NCwgLnAyX2Zhc3QgPSA3IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0 IGludGVsX2xpbWl0c19pOXh4X3Nkdm8gPSB7CisJLmRvdCA9IHsgLm1pbiA9IDIwMDAwLCAubWF4 ID0gNDAwMDAwIH0sCisJLnZjbyA9IHsgLm1pbiA9IDE0MDAwMDAsIC5tYXggPSAyODAwMDAwIH0s CisJLm4gPSB7IC5taW4gPSAxLCAubWF4ID0gNiB9LAorCS5tID0geyAubWluID0gNzAsIC5tYXgg PSAxMjAgfSwKKwkubTEgPSB7IC5taW4gPSA4LCAubWF4ID0gMTggfSwKKwkubTIgPSB7IC5taW4g PSAzLCAubWF4ID0gNyB9LAorCS5wID0geyAubWluID0gNSwgLm1heCA9IDgwIH0sCisJLnAxID0g eyAubWluID0gMSwgLm1heCA9IDggfSwKKwkucDIgPSB7IC5kb3RfbGltaXQgPSAyMDAwMDAsCisJ CS5wMl9zbG93ID0gMTAsIC5wMl9mYXN0ID0gNSB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVj dCBpbnRlbF9saW1pdCBpbnRlbF9saW1pdHNfaTl4eF9sdmRzID0geworCS5kb3QgPSB7IC5taW4g PSAyMDAwMCwgLm1heCA9IDQwMDAwMCB9LAorCS52Y28gPSB7IC5taW4gPSAxNDAwMDAwLCAubWF4 ID0gMjgwMDAwMCB9LAorCS5uID0geyAubWluID0gMSwgLm1heCA9IDYgfSwKKwkubSA9IHsgLm1p biA9IDcwLCAubWF4ID0gMTIwIH0sCisJLm0xID0geyAubWluID0gOCwgLm1heCA9IDE4IH0sCisJ Lm0yID0geyAubWluID0gMywgLm1heCA9IDcgfSwKKwkucCA9IHsgLm1pbiA9IDcsIC5tYXggPSA5 OCB9LAorCS5wMSA9IHsgLm1pbiA9IDEsIC5tYXggPSA4IH0sCisJLnAyID0geyAuZG90X2xpbWl0 ID0gMTEyMDAwLAorCQkucDJfc2xvdyA9IDE0LCAucDJfZmFzdCA9IDcgfSwKK307CisKKworc3Rh dGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbnRlbF9saW1pdHNfZzR4X3Nkdm8gPSB7CisJ LmRvdCA9IHsgLm1pbiA9IDI1MDAwLCAubWF4ID0gMjcwMDAwIH0sCisJLnZjbyA9IHsgLm1pbiA9 IDE3NTAwMDAsIC5tYXggPSAzNTAwMDAwfSwKKwkubiA9IHsgLm1pbiA9IDEsIC5tYXggPSA0IH0s CisJLm0gPSB7IC5taW4gPSAxMDQsIC5tYXggPSAxMzggfSwKKwkubTEgPSB7IC5taW4gPSAxNywg Lm1heCA9IDIzIH0sCisJLm0yID0geyAubWluID0gNSwgLm1heCA9IDExIH0sCisJLnAgPSB7IC5t aW4gPSAxMCwgLm1heCA9IDMwIH0sCisJLnAxID0geyAubWluID0gMSwgLm1heCA9IDN9LAorCS5w MiA9IHsgLmRvdF9saW1pdCA9IDI3MDAwMCwKKwkJLnAyX3Nsb3cgPSAxMCwKKwkJLnAyX2Zhc3Qg PSAxMAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGludGVsX2xp bWl0c19nNHhfaGRtaSA9IHsKKwkuZG90ID0geyAubWluID0gMjIwMDAsIC5tYXggPSA0MDAwMDAg fSwKKwkudmNvID0geyAubWluID0gMTc1MDAwMCwgLm1heCA9IDM1MDAwMDB9LAorCS5uID0geyAu bWluID0gMSwgLm1heCA9IDQgfSwKKwkubSA9IHsgLm1pbiA9IDEwNCwgLm1heCA9IDEzOCB9LAor CS5tMSA9IHsgLm1pbiA9IDE2LCAubWF4ID0gMjMgfSwKKwkubTIgPSB7IC5taW4gPSA1LCAubWF4 ID0gMTEgfSwKKwkucCA9IHsgLm1pbiA9IDUsIC5tYXggPSA4MCB9LAorCS5wMSA9IHsgLm1pbiA9 IDEsIC5tYXggPSA4fSwKKwkucDIgPSB7IC5kb3RfbGltaXQgPSAxNjUwMDAsCisJCS5wMl9zbG93 ID0gMTAsIC5wMl9mYXN0ID0gNSB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9s aW1pdCBpbnRlbF9saW1pdHNfZzR4X3NpbmdsZV9jaGFubmVsX2x2ZHMgPSB7CisJLmRvdCA9IHsg Lm1pbiA9IDIwMDAwLCAubWF4ID0gMTE1MDAwIH0sCisJLnZjbyA9IHsgLm1pbiA9IDE3NTAwMDAs IC5tYXggPSAzNTAwMDAwIH0sCisJLm4gPSB7IC5taW4gPSAxLCAubWF4ID0gMyB9LAorCS5tID0g eyAubWluID0gMTA0LCAubWF4ID0gMTM4IH0sCisJLm0xID0geyAubWluID0gMTcsIC5tYXggPSAy MyB9LAorCS5tMiA9IHsgLm1pbiA9IDUsIC5tYXggPSAxMSB9LAorCS5wID0geyAubWluID0gMjgs IC5tYXggPSAxMTIgfSwKKwkucDEgPSB7IC5taW4gPSAyLCAubWF4ID0gOCB9LAorCS5wMiA9IHsg LmRvdF9saW1pdCA9IDAsCisJCS5wMl9zbG93ID0gMTQsIC5wMl9mYXN0ID0gMTQKKwl9LAorfTsK Kworc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbnRlbF9saW1pdHNfZzR4X2R1YWxf Y2hhbm5lbF9sdmRzID0geworCS5kb3QgPSB7IC5taW4gPSA4MDAwMCwgLm1heCA9IDIyNDAwMCB9 LAorCS52Y28gPSB7IC5taW4gPSAxNzUwMDAwLCAubWF4ID0gMzUwMDAwMCB9LAorCS5uID0geyAu bWluID0gMSwgLm1heCA9IDMgfSwKKwkubSA9IHsgLm1pbiA9IDEwNCwgLm1heCA9IDEzOCB9LAor CS5tMSA9IHsgLm1pbiA9IDE3LCAubWF4ID0gMjMgfSwKKwkubTIgPSB7IC5taW4gPSA1LCAubWF4 ID0gMTEgfSwKKwkucCA9IHsgLm1pbiA9IDE0LCAubWF4ID0gNDIgfSwKKwkucDEgPSB7IC5taW4g PSAyLCAubWF4ID0gNiB9LAorCS5wMiA9IHsgLmRvdF9saW1pdCA9IDAsCisJCS5wMl9zbG93ID0g NywgLnAyX2Zhc3QgPSA3CisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGlt aXQgcG52X2xpbWl0c19zZHZvID0geworCS5kb3QgPSB7IC5taW4gPSAyMDAwMCwgLm1heCA9IDQw MDAwMH0sCisJLnZjbyA9IHsgLm1pbiA9IDE3MDAwMDAsIC5tYXggPSAzNTAwMDAwIH0sCisJLyog UGluZXZpZXcncyBOY291bnRlciBpcyBhIHJpbmcgY291bnRlciAqLworCS5uID0geyAubWluID0g MywgLm1heCA9IDYgfSwKKwkubSA9IHsgLm1pbiA9IDIsIC5tYXggPSAyNTYgfSwKKwkvKiBQaW5l dmlldyBvbmx5IGhhcyBvbmUgY29tYmluZWQgbSBkaXZpZGVyLCB3aGljaCB3ZSB0cmVhdCBhcyBt Mi4gKi8KKwkubTEgPSB7IC5taW4gPSAwLCAubWF4ID0gMCB9LAorCS5tMiA9IHsgLm1pbiA9IDAs IC5tYXggPSAyNTQgfSwKKwkucCA9IHsgLm1pbiA9IDUsIC5tYXggPSA4MCB9LAorCS5wMSA9IHsg Lm1pbiA9IDEsIC5tYXggPSA4IH0sCisJLnAyID0geyAuZG90X2xpbWl0ID0gMjAwMDAwLAorCQku cDJfc2xvdyA9IDEwLCAucDJfZmFzdCA9IDUgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg aW50ZWxfbGltaXQgcG52X2xpbWl0c19sdmRzID0geworCS5kb3QgPSB7IC5taW4gPSAyMDAwMCwg Lm1heCA9IDQwMDAwMCB9LAorCS52Y28gPSB7IC5taW4gPSAxNzAwMDAwLCAubWF4ID0gMzUwMDAw MCB9LAorCS5uID0geyAubWluID0gMywgLm1heCA9IDYgfSwKKwkubSA9IHsgLm1pbiA9IDIsIC5t YXggPSAyNTYgfSwKKwkubTEgPSB7IC5taW4gPSAwLCAubWF4ID0gMCB9LAorCS5tMiA9IHsgLm1p biA9IDAsIC5tYXggPSAyNTQgfSwKKwkucCA9IHsgLm1pbiA9IDcsIC5tYXggPSAxMTIgfSwKKwku cDEgPSB7IC5taW4gPSAxLCAubWF4ID0gOCB9LAorCS5wMiA9IHsgLmRvdF9saW1pdCA9IDExMjAw MCwKKwkJLnAyX3Nsb3cgPSAxNCwgLnAyX2Zhc3QgPSAxNCB9LAorfTsKKworLyogSXJvbmxha2Ug LyBTYW5keWJyaWRnZQorICoKKyAqIFdlIGNhbGN1bGF0ZSBjbG9jayB1c2luZyAocmVnaXN0ZXJf dmFsdWUgKyAyKSBmb3IgTi9NMS9NMiwgc28gaGVyZQorICogdGhlIHJhbmdlIHZhbHVlIGZvciB0 aGVtIGlzIChhY3R1YWxfdmFsdWUgLSAyKS4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRl bF9saW1pdCBpbGtfbGltaXRzX2RhYyA9IHsKKwkuZG90ID0geyAubWluID0gMjUwMDAsIC5tYXgg PSAzNTAwMDAgfSwKKwkudmNvID0geyAubWluID0gMTc2MDAwMCwgLm1heCA9IDM1MTAwMDAgfSwK KwkubiA9IHsgLm1pbiA9IDEsIC5tYXggPSA1IH0sCisJLm0gPSB7IC5taW4gPSA3OSwgLm1heCA9 IDEyNyB9LAorCS5tMSA9IHsgLm1pbiA9IDEyLCAubWF4ID0gMjIgfSwKKwkubTIgPSB7IC5taW4g PSA1LCAubWF4ID0gOSB9LAorCS5wID0geyAubWluID0gNSwgLm1heCA9IDgwIH0sCisJLnAxID0g eyAubWluID0gMSwgLm1heCA9IDggfSwKKwkucDIgPSB7IC5kb3RfbGltaXQgPSAyMjUwMDAsCisJ CS5wMl9zbG93ID0gMTAsIC5wMl9mYXN0ID0gNSB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVj dCBpbnRlbF9saW1pdCBpbGtfbGltaXRzX3NpbmdsZV9sdmRzID0geworCS5kb3QgPSB7IC5taW4g PSAyNTAwMCwgLm1heCA9IDM1MDAwMCB9LAorCS52Y28gPSB7IC5taW4gPSAxNzYwMDAwLCAubWF4 ID0gMzUxMDAwMCB9LAorCS5uID0geyAubWluID0gMSwgLm1heCA9IDMgfSwKKwkubSA9IHsgLm1p biA9IDc5LCAubWF4ID0gMTE4IH0sCisJLm0xID0geyAubWluID0gMTIsIC5tYXggPSAyMiB9LAor CS5tMiA9IHsgLm1pbiA9IDUsIC5tYXggPSA5IH0sCisJLnAgPSB7IC5taW4gPSAyOCwgLm1heCA9 IDExMiB9LAorCS5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSA4IH0sCisJLnAyID0geyAuZG90X2xp bWl0ID0gMjI1MDAwLAorCQkucDJfc2xvdyA9IDE0LCAucDJfZmFzdCA9IDE0IH0sCit9OworCitz dGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGlsa19saW1pdHNfZHVhbF9sdmRzID0gewor CS5kb3QgPSB7IC5taW4gPSAyNTAwMCwgLm1heCA9IDM1MDAwMCB9LAorCS52Y28gPSB7IC5taW4g PSAxNzYwMDAwLCAubWF4ID0gMzUxMDAwMCB9LAorCS5uID0geyAubWluID0gMSwgLm1heCA9IDMg fSwKKwkubSA9IHsgLm1pbiA9IDc5LCAubWF4ID0gMTI3IH0sCisJLm0xID0geyAubWluID0gMTIs IC5tYXggPSAyMiB9LAorCS5tMiA9IHsgLm1pbiA9IDUsIC5tYXggPSA5IH0sCisJLnAgPSB7IC5t aW4gPSAxNCwgLm1heCA9IDU2IH0sCisJLnAxID0geyAubWluID0gMiwgLm1heCA9IDggfSwKKwku cDIgPSB7IC5kb3RfbGltaXQgPSAyMjUwMDAsCisJCS5wMl9zbG93ID0gNywgLnAyX2Zhc3QgPSA3 IH0sCit9OworCisvKiBMVkRTIDEwMG1oeiByZWZjbGsgbGltaXRzLiAqLworc3RhdGljIGNvbnN0 IHN0cnVjdCBpbnRlbF9saW1pdCBpbGtfbGltaXRzX3NpbmdsZV9sdmRzXzEwMG0gPSB7CisJLmRv dCA9IHsgLm1pbiA9IDI1MDAwLCAubWF4ID0gMzUwMDAwIH0sCisJLnZjbyA9IHsgLm1pbiA9IDE3 NjAwMDAsIC5tYXggPSAzNTEwMDAwIH0sCisJLm4gPSB7IC5taW4gPSAxLCAubWF4ID0gMiB9LAor CS5tID0geyAubWluID0gNzksIC5tYXggPSAxMjYgfSwKKwkubTEgPSB7IC5taW4gPSAxMiwgLm1h eCA9IDIyIH0sCisJLm0yID0geyAubWluID0gNSwgLm1heCA9IDkgfSwKKwkucCA9IHsgLm1pbiA9 IDI4LCAubWF4ID0gMTEyIH0sCisJLnAxID0geyAubWluID0gMiwgLm1heCA9IDggfSwKKwkucDIg PSB7IC5kb3RfbGltaXQgPSAyMjUwMDAsCisJCS5wMl9zbG93ID0gMTQsIC5wMl9mYXN0ID0gMTQg fSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaWxrX2xpbWl0c19kdWFs X2x2ZHNfMTAwbSA9IHsKKwkuZG90ID0geyAubWluID0gMjUwMDAsIC5tYXggPSAzNTAwMDAgfSwK KwkudmNvID0geyAubWluID0gMTc2MDAwMCwgLm1heCA9IDM1MTAwMDAgfSwKKwkubiA9IHsgLm1p biA9IDEsIC5tYXggPSAzIH0sCisJLm0gPSB7IC5taW4gPSA3OSwgLm1heCA9IDEyNiB9LAorCS5t MSA9IHsgLm1pbiA9IDEyLCAubWF4ID0gMjIgfSwKKwkubTIgPSB7IC5taW4gPSA1LCAubWF4ID0g OSB9LAorCS5wID0geyAubWluID0gMTQsIC5tYXggPSA0MiB9LAorCS5wMSA9IHsgLm1pbiA9IDIs IC5tYXggPSA2IH0sCisJLnAyID0geyAuZG90X2xpbWl0ID0gMjI1MDAwLAorCQkucDJfc2xvdyA9 IDcsIC5wMl9mYXN0ID0gNyB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1p dCBpbnRlbF9saW1pdHNfdmx2ID0geworCSAvKgorCSAgKiBUaGVzZSBhcmUgdGhlIGRhdGEgcmF0 ZSBsaW1pdHMgKG1lYXN1cmVkIGluIGZhc3QgY2xvY2tzKQorCSAgKiBzaW5jZSB0aG9zZSBhcmUg dGhlIHN0cmljdGVzdCBsaW1pdHMgd2UgaGF2ZS4gVGhlIGZhc3QKKwkgICogY2xvY2sgYW5kIGFj dHVhbCByYXRlIGxpbWl0cyBhcmUgbW9yZSByZWxheGVkLCBzbyBjaGVja2luZworCSAgKiB0aGVt IHdvdWxkIG1ha2Ugbm8gZGlmZmVyZW5jZS4KKwkgICovCisJLmRvdCA9IHsgLm1pbiA9IDI1MDAw ICogNSwgLm1heCA9IDI3MDAwMCAqIDUgfSwKKwkudmNvID0geyAubWluID0gNDAwMDAwMCwgLm1h eCA9IDYwMDAwMDAgfSwKKwkubiA9IHsgLm1pbiA9IDEsIC5tYXggPSA3IH0sCisJLm0xID0geyAu bWluID0gMiwgLm1heCA9IDMgfSwKKwkubTIgPSB7IC5taW4gPSAxMSwgLm1heCA9IDE1NiB9LAor CS5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSAzIH0sCisJLnAyID0geyAucDJfc2xvdyA9IDIsIC5w Ml9mYXN0ID0gMjAgfSwgLyogc2xvdz1taW4sIGZhc3Q9bWF4ICovCit9OworCitzdGF0aWMgY29u c3Qgc3RydWN0IGludGVsX2xpbWl0IGludGVsX2xpbWl0c19jaHYgPSB7CisJLyoKKwkgKiBUaGVz ZSBhcmUgdGhlIGRhdGEgcmF0ZSBsaW1pdHMgKG1lYXN1cmVkIGluIGZhc3QgY2xvY2tzKQorCSAq IHNpbmNlIHRob3NlIGFyZSB0aGUgc3RyaWN0ZXN0IGxpbWl0cyB3ZSBoYXZlLiAgVGhlIGZhc3QK KwkgKiBjbG9jayBhbmQgYWN0dWFsIHJhdGUgbGltaXRzIGFyZSBtb3JlIHJlbGF4ZWQsIHNvIGNo ZWNraW5nCisJICogdGhlbSB3b3VsZCBtYWtlIG5vIGRpZmZlcmVuY2UuCisJICovCisJLmRvdCA9 IHsgLm1pbiA9IDI1MDAwICogNSwgLm1heCA9IDU0MDAwMCAqIDV9LAorCS52Y28gPSB7IC5taW4g PSA0ODAwMDAwLCAubWF4ID0gNjQ4MDAwMCB9LAorCS5uID0geyAubWluID0gMSwgLm1heCA9IDEg fSwKKwkubTEgPSB7IC5taW4gPSAyLCAubWF4ID0gMiB9LAorCS5tMiA9IHsgLm1pbiA9IDI0IDw8 IDIyLCAubWF4ID0gMTc1IDw8IDIyIH0sCisJLnAxID0geyAubWluID0gMiwgLm1heCA9IDQgfSwK KwkucDIgPSB7CS5wMl9zbG93ID0gMSwgLnAyX2Zhc3QgPSAxNCB9LAorfTsKKworc3RhdGljIGNv bnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbnRlbF9saW1pdHNfYnh0ID0geworCS8qIEZJWE1FOiBm aW5kIHJlYWwgZG90IGxpbWl0cyAqLworCS5kb3QgPSB7IC5taW4gPSAwLCAubWF4ID0gSU5UX01B WCB9LAorCS52Y28gPSB7IC5taW4gPSA0ODAwMDAwLCAubWF4ID0gNjcwMDAwMCB9LAorCS5uID0g eyAubWluID0gMSwgLm1heCA9IDEgfSwKKwkubTEgPSB7IC5taW4gPSAyLCAubWF4ID0gMiB9LAor CS8qIEZJWE1FOiBmaW5kIHJlYWwgbTIgbGltaXRzICovCisJLm0yID0geyAubWluID0gMiA8PCAy MiwgLm1heCA9IDI1NSA8PCAyMiB9LAorCS5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSA0IH0sCisJ LnAyID0geyAucDJfc2xvdyA9IDEsIC5wMl9mYXN0ID0gMjAgfSwKK307CisKKy8qCisgKiBQbGF0 Zm9ybSBzcGVjaWZpYyBoZWxwZXJzIHRvIGNhbGN1bGF0ZSB0aGUgcG9ydCBQTEwgbG9vcGJhY2st IChjbG9jay5tKSwKKyAqIGFuZCBwb3N0LWRpdmlkZXIgKGNsb2NrLnApIHZhbHVlcywgcHJlLSAo Y2xvY2sudmNvKSBhbmQgcG9zdC1kaXZpZGVkIGZhc3QKKyAqIChjbG9jay5kb3QpIGNsb2NrIHJh dGVzLiBUaGlzIGZhc3QgZG90IGNsb2NrIGlzIGZlZCB0byB0aGUgcG9ydCdzIElPIGxvZ2ljLgor ICogVGhlIGhlbHBlcnMnIHJldHVybiB2YWx1ZSBpcyB0aGUgcmF0ZSBvZiB0aGUgY2xvY2sgdGhh dCBpcyBmZWQgdG8gdGhlCisgKiBkaXNwbGF5IGVuZ2luZSdzIHBpcGUgd2hpY2ggY2FuIGJlIHRo ZSBhYm92ZSBmYXN0IGRvdCBjbG9jayByYXRlIG9yIGEKKyAqIGRpdmlkZWQtZG93biB2ZXJzaW9u IG9mIGl0LgorICovCisvKiBtMSBpcyByZXNlcnZlZCBhcyAwIGluIFBpbmV2aWV3LCBuIGlzIGEg cmluZyBjb3VudGVyICovCitpbnQgcG52X2NhbGNfZHBsbF9wYXJhbXMoaW50IHJlZmNsaywgc3Ry dWN0IGRwbGwgKmNsb2NrKQoreworCWNsb2NrLT5tID0gY2xvY2stPm0yICsgMjsKKwljbG9jay0+ cCA9IGNsb2NrLT5wMSAqIGNsb2NrLT5wMjsKKwlpZiAoV0FSTl9PTihjbG9jay0+biA9PSAwIHx8 IGNsb2NrLT5wID09IDApKQorCQlyZXR1cm4gMDsKKwljbG9jay0+dmNvID0gRElWX1JPVU5EX0NM T1NFU1QocmVmY2xrICogY2xvY2stPm0sIGNsb2NrLT5uKTsKKwljbG9jay0+ZG90ID0gRElWX1JP VU5EX0NMT1NFU1QoY2xvY2stPnZjbywgY2xvY2stPnApOworCisJcmV0dXJuIGNsb2NrLT5kb3Q7 Cit9CisKK3N0YXRpYyB1MzIgaTl4eF9kcGxsX2NvbXB1dGVfbShzdHJ1Y3QgZHBsbCAqZHBsbCkK K3sKKwlyZXR1cm4gNSAqIChkcGxsLT5tMSArIDIpICsgKGRwbGwtPm0yICsgMik7Cit9CisKK2lu dCBpOXh4X2NhbGNfZHBsbF9wYXJhbXMoaW50IHJlZmNsaywgc3RydWN0IGRwbGwgKmNsb2NrKQor eworCWNsb2NrLT5tID0gaTl4eF9kcGxsX2NvbXB1dGVfbShjbG9jayk7CisJY2xvY2stPnAgPSBj bG9jay0+cDEgKiBjbG9jay0+cDI7CisJaWYgKFdBUk5fT04oY2xvY2stPm4gKyAyID09IDAgfHwg Y2xvY2stPnAgPT0gMCkpCisJCXJldHVybiAwOworCWNsb2NrLT52Y28gPSBESVZfUk9VTkRfQ0xP U0VTVChyZWZjbGsgKiBjbG9jay0+bSwgY2xvY2stPm4gKyAyKTsKKwljbG9jay0+ZG90ID0gRElW X1JPVU5EX0NMT1NFU1QoY2xvY2stPnZjbywgY2xvY2stPnApOworCisJcmV0dXJuIGNsb2NrLT5k b3Q7Cit9CisKK2ludCB2bHZfY2FsY19kcGxsX3BhcmFtcyhpbnQgcmVmY2xrLCBzdHJ1Y3QgZHBs bCAqY2xvY2spCit7CisJY2xvY2stPm0gPSBjbG9jay0+bTEgKiBjbG9jay0+bTI7CisJY2xvY2st PnAgPSBjbG9jay0+cDEgKiBjbG9jay0+cDI7CisJaWYgKFdBUk5fT04oY2xvY2stPm4gPT0gMCB8 fCBjbG9jay0+cCA9PSAwKSkKKwkJcmV0dXJuIDA7CisJY2xvY2stPnZjbyA9IERJVl9ST1VORF9D TE9TRVNUKHJlZmNsayAqIGNsb2NrLT5tLCBjbG9jay0+bik7CisJY2xvY2stPmRvdCA9IERJVl9S T1VORF9DTE9TRVNUKGNsb2NrLT52Y28sIGNsb2NrLT5wKTsKKworCXJldHVybiBjbG9jay0+ZG90 IC8gNTsKK30KKworaW50IGNodl9jYWxjX2RwbGxfcGFyYW1zKGludCByZWZjbGssIHN0cnVjdCBk cGxsICpjbG9jaykKK3sKKwljbG9jay0+bSA9IGNsb2NrLT5tMSAqIGNsb2NrLT5tMjsKKwljbG9j ay0+cCA9IGNsb2NrLT5wMSAqIGNsb2NrLT5wMjsKKwlpZiAoV0FSTl9PTihjbG9jay0+biA9PSAw IHx8IGNsb2NrLT5wID09IDApKQorCQlyZXR1cm4gMDsKKwljbG9jay0+dmNvID0gRElWX1JPVU5E X0NMT1NFU1RfVUxMKG11bF91MzJfdTMyKHJlZmNsaywgY2xvY2stPm0pLAorCQkJCQkgICBjbG9j ay0+biA8PCAyMik7CisJY2xvY2stPmRvdCA9IERJVl9ST1VORF9DTE9TRVNUKGNsb2NrLT52Y28s IGNsb2NrLT5wKTsKKworCXJldHVybiBjbG9jay0+ZG90IC8gNTsKK30KKworLyoKKyAqIFJldHVy bnMgd2hldGhlciB0aGUgZ2l2ZW4gc2V0IG9mIGRpdmlzb3JzIGFyZSB2YWxpZCBmb3IgYSBnaXZl biByZWZjbGsgd2l0aAorICogdGhlIGdpdmVuIGNvbm5lY3RvcnMuCisgKi8KK3N0YXRpYyBib29s IGludGVsX3BsbF9pc192YWxpZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJ CQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1pdCwKKwkJCSAgICAgICBjb25z dCBzdHJ1Y3QgZHBsbCAqY2xvY2spCit7CisJaWYgKGNsb2NrLT5uIDwgbGltaXQtPm4ubWluIHx8 IGxpbWl0LT5uLm1heCA8IGNsb2NrLT5uKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKGNsb2NrLT5w MSA8IGxpbWl0LT5wMS5taW4gfHwgbGltaXQtPnAxLm1heCA8IGNsb2NrLT5wMSkKKwkJcmV0dXJu IGZhbHNlOworCWlmIChjbG9jay0+bTIgPCBsaW1pdC0+bTIubWluIHx8IGxpbWl0LT5tMi5tYXgg PCBjbG9jay0+bTIpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoY2xvY2stPm0xIDwgbGltaXQtPm0x Lm1pbiB8fCBsaW1pdC0+bTEubWF4IDwgY2xvY2stPm0xKQorCQlyZXR1cm4gZmFsc2U7CisKKwlp ZiAoIUlTX1BJTkVWSUVXKGRldl9wcml2KSAmJiAhSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgJiYK KwkgICAgIUlTX0NIRVJSWVZJRVcoZGV2X3ByaXYpICYmICFJU19HRU45X0xQKGRldl9wcml2KSkK KwkJaWYgKGNsb2NrLT5tMSA8PSBjbG9jay0+bTIpCisJCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAo IUlTX1ZBTExFWVZJRVcoZGV2X3ByaXYpICYmICFJU19DSEVSUllWSUVXKGRldl9wcml2KSAmJgor CSAgICAhSVNfR0VOOV9MUChkZXZfcHJpdikpIHsKKwkJaWYgKGNsb2NrLT5wIDwgbGltaXQtPnAu bWluIHx8IGxpbWl0LT5wLm1heCA8IGNsb2NrLT5wKQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAo Y2xvY2stPm0gPCBsaW1pdC0+bS5taW4gfHwgbGltaXQtPm0ubWF4IDwgY2xvY2stPm0pCisJCQly ZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKGNsb2NrLT52Y28gPCBsaW1pdC0+dmNvLm1pbiB8fCBs aW1pdC0+dmNvLm1heCA8IGNsb2NrLT52Y28pCisJCXJldHVybiBmYWxzZTsKKwkvKiBYWFg6IFdl IG1heSBuZWVkIHRvIGJlIGNoZWNraW5nICJEb3QgY2xvY2siIGRlcGVuZGluZyBvbiB0aGUgbXVs dGlwbGllciwKKwkgKiBjb25uZWN0b3IsIGV0Yy4sIHJhdGhlciB0aGFuIGp1c3QgYSBzaW5nbGUg cmFuZ2UuCisJICovCisJaWYgKGNsb2NrLT5kb3QgPCBsaW1pdC0+ZG90Lm1pbiB8fCBsaW1pdC0+ ZG90Lm1heCA8IGNsb2NrLT5kb3QpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOwor fQorCitzdGF0aWMgaW50CitpOXh4X3NlbGVjdF9wMl9kaXYoY29uc3Qgc3RydWN0IGludGVsX2xp bWl0ICpsaW1pdCwKKwkJICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUsCisJCSAgIGludCB0YXJnZXQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gdG9faTkxNShjcnRjX3N0YXRlLT51YXBpLmNydGMtPmRldik7CisKKwlpZiAoaW50ZWxf Y3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsKKwkJLyoKKwkJ ICogRm9yIExWRFMganVzdCByZWx5IG9uIGl0cyBjdXJyZW50IHNldHRpbmdzIGZvciBkdWFsLWNo YW5uZWwuCisJCSAqIFdlIGhhdmVuJ3QgZmlndXJlZCBvdXQgaG93IHRvIHJlbGlhYmx5IHNldCB1 cCBkaWZmZXJlbnQKKwkJICogc2luZ2xlL2R1YWwgY2hhbm5lbCBzdGF0ZSwgaWYgd2UgZXZlbiBj YW4uCisJCSAqLworCQlpZiAoaW50ZWxfaXNfZHVhbF9saW5rX2x2ZHMoZGV2X3ByaXYpKQorCQkJ cmV0dXJuIGxpbWl0LT5wMi5wMl9mYXN0OworCQllbHNlCisJCQlyZXR1cm4gbGltaXQtPnAyLnAy X3Nsb3c7CisJfSBlbHNlIHsKKwkJaWYgKHRhcmdldCA8IGxpbWl0LT5wMi5kb3RfbGltaXQpCisJ CQlyZXR1cm4gbGltaXQtPnAyLnAyX3Nsb3c7CisJCWVsc2UKKwkJCXJldHVybiBsaW1pdC0+cDIu cDJfZmFzdDsKKwl9Cit9CisKKy8qCisgKiBSZXR1cm5zIGEgc2V0IG9mIGRpdmlzb3JzIGZvciB0 aGUgZGVzaXJlZCB0YXJnZXQgY2xvY2sgd2l0aCB0aGUgZ2l2ZW4KKyAqIHJlZmNsaywgb3IgRkFM U0UuICBUaGUgcmV0dXJuZWQgdmFsdWVzIHJlcHJlc2VudCB0aGUgY2xvY2sgZXF1YXRpb246Cisg KiByZWZsY2sgKiAoNSAqIChtMSArIDIpICsgKG0yICsgMikpIC8gKG4gKyAyKSAvIHAxIC8gcDIu CisgKgorICogVGFyZ2V0IGFuZCByZWZlcmVuY2UgY2xvY2tzIGFyZSBzcGVjaWZpZWQgaW4ga0h6 LgorICoKKyAqIElmIG1hdGNoX2Nsb2NrIGlzIHByb3ZpZGVkLCB0aGVuIGJlc3RfY2xvY2sgUCBk aXZpZGVyIG11c3QgbWF0Y2ggdGhlIFAKKyAqIGRpdmlkZXIgZnJvbSBAbWF0Y2hfY2xvY2sgdXNl ZCBmb3IgTFZEUyBkb3duY2xvY2tpbmcuCisgKi8KK3N0YXRpYyBib29sCitpOXh4X2ZpbmRfYmVz dF9kcGxsKGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQsCisJCSAgICBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJICAgIGludCB0YXJnZXQsIGludCByZWZjbGss IHN0cnVjdCBkcGxsICptYXRjaF9jbG9jaywKKwkJICAgIHN0cnVjdCBkcGxsICpiZXN0X2Nsb2Nr KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjX3N0YXRlLT51YXBpLmNydGMtPmRl djsKKwlzdHJ1Y3QgZHBsbCBjbG9jazsKKwlpbnQgZXJyID0gdGFyZ2V0OworCisJbWVtc2V0KGJl c3RfY2xvY2ssIDAsIHNpemVvZigqYmVzdF9jbG9jaykpOworCisJY2xvY2sucDIgPSBpOXh4X3Nl bGVjdF9wMl9kaXYobGltaXQsIGNydGNfc3RhdGUsIHRhcmdldCk7CisKKwlmb3IgKGNsb2NrLm0x ID0gbGltaXQtPm0xLm1pbjsgY2xvY2subTEgPD0gbGltaXQtPm0xLm1heDsKKwkgICAgIGNsb2Nr Lm0xKyspIHsKKwkJZm9yIChjbG9jay5tMiA9IGxpbWl0LT5tMi5taW47CisJCSAgICAgY2xvY2su bTIgPD0gbGltaXQtPm0yLm1heDsgY2xvY2subTIrKykgeworCQkJaWYgKGNsb2NrLm0yID49IGNs b2NrLm0xKQorCQkJCWJyZWFrOworCQkJZm9yIChjbG9jay5uID0gbGltaXQtPm4ubWluOworCQkJ ICAgICBjbG9jay5uIDw9IGxpbWl0LT5uLm1heDsgY2xvY2subisrKSB7CisJCQkJZm9yIChjbG9j ay5wMSA9IGxpbWl0LT5wMS5taW47CisJCQkJCWNsb2NrLnAxIDw9IGxpbWl0LT5wMS5tYXg7IGNs b2NrLnAxKyspIHsKKwkJCQkJaW50IHRoaXNfZXJyOworCisJCQkJCWk5eHhfY2FsY19kcGxsX3Bh cmFtcyhyZWZjbGssICZjbG9jayk7CisJCQkJCWlmICghaW50ZWxfcGxsX2lzX3ZhbGlkKHRvX2k5 MTUoZGV2KSwKKwkJCQkJCQkJbGltaXQsCisJCQkJCQkJCSZjbG9jaykpCisJCQkJCQljb250aW51 ZTsKKwkJCQkJaWYgKG1hdGNoX2Nsb2NrICYmCisJCQkJCSAgICBjbG9jay5wICE9IG1hdGNoX2Ns b2NrLT5wKQorCQkJCQkJY29udGludWU7CisKKwkJCQkJdGhpc19lcnIgPSBhYnMoY2xvY2suZG90 IC0gdGFyZ2V0KTsKKwkJCQkJaWYgKHRoaXNfZXJyIDwgZXJyKSB7CisJCQkJCQkqYmVzdF9jbG9j ayA9IGNsb2NrOworCQkJCQkJZXJyID0gdGhpc19lcnI7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJ CX0KKwl9CisKKwlyZXR1cm4gKGVyciAhPSB0YXJnZXQpOworfQorCisvKgorICogUmV0dXJucyBh IHNldCBvZiBkaXZpc29ycyBmb3IgdGhlIGRlc2lyZWQgdGFyZ2V0IGNsb2NrIHdpdGggdGhlIGdp dmVuCisgKiByZWZjbGssIG9yIEZBTFNFLiAgVGhlIHJldHVybmVkIHZhbHVlcyByZXByZXNlbnQg dGhlIGNsb2NrIGVxdWF0aW9uOgorICogcmVmbGNrICogKDUgKiAobTEgKyAyKSArIChtMiArIDIp KSAvIChuICsgMikgLyBwMSAvIHAyLgorICoKKyAqIFRhcmdldCBhbmQgcmVmZXJlbmNlIGNsb2Nr cyBhcmUgc3BlY2lmaWVkIGluIGtIei4KKyAqCisgKiBJZiBtYXRjaF9jbG9jayBpcyBwcm92aWRl ZCwgdGhlbiBiZXN0X2Nsb2NrIFAgZGl2aWRlciBtdXN0IG1hdGNoIHRoZSBQCisgKiBkaXZpZGVy IGZyb20gQG1hdGNoX2Nsb2NrIHVzZWQgZm9yIExWRFMgZG93bmNsb2NraW5nLgorICovCitzdGF0 aWMgYm9vbAorcG52X2ZpbmRfYmVzdF9kcGxsKGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGlt aXQsCisJCSAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkgICBpbnQg dGFyZ2V0LCBpbnQgcmVmY2xrLCBzdHJ1Y3QgZHBsbCAqbWF0Y2hfY2xvY2ssCisJCSAgIHN0cnVj dCBkcGxsICpiZXN0X2Nsb2NrKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjX3N0 YXRlLT51YXBpLmNydGMtPmRldjsKKwlzdHJ1Y3QgZHBsbCBjbG9jazsKKwlpbnQgZXJyID0gdGFy Z2V0OworCisJbWVtc2V0KGJlc3RfY2xvY2ssIDAsIHNpemVvZigqYmVzdF9jbG9jaykpOworCisJ Y2xvY2sucDIgPSBpOXh4X3NlbGVjdF9wMl9kaXYobGltaXQsIGNydGNfc3RhdGUsIHRhcmdldCk7 CisKKwlmb3IgKGNsb2NrLm0xID0gbGltaXQtPm0xLm1pbjsgY2xvY2subTEgPD0gbGltaXQtPm0x Lm1heDsKKwkgICAgIGNsb2NrLm0xKyspIHsKKwkJZm9yIChjbG9jay5tMiA9IGxpbWl0LT5tMi5t aW47CisJCSAgICAgY2xvY2subTIgPD0gbGltaXQtPm0yLm1heDsgY2xvY2subTIrKykgeworCQkJ Zm9yIChjbG9jay5uID0gbGltaXQtPm4ubWluOworCQkJICAgICBjbG9jay5uIDw9IGxpbWl0LT5u Lm1heDsgY2xvY2subisrKSB7CisJCQkJZm9yIChjbG9jay5wMSA9IGxpbWl0LT5wMS5taW47CisJ CQkJCWNsb2NrLnAxIDw9IGxpbWl0LT5wMS5tYXg7IGNsb2NrLnAxKyspIHsKKwkJCQkJaW50IHRo aXNfZXJyOworCisJCQkJCXBudl9jYWxjX2RwbGxfcGFyYW1zKHJlZmNsaywgJmNsb2NrKTsKKwkJ CQkJaWYgKCFpbnRlbF9wbGxfaXNfdmFsaWQodG9faTkxNShkZXYpLAorCQkJCQkJCQlsaW1pdCwK KwkJCQkJCQkJJmNsb2NrKSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlpZiAobWF0Y2hfY2xvY2sg JiYKKwkJCQkJICAgIGNsb2NrLnAgIT0gbWF0Y2hfY2xvY2stPnApCisJCQkJCQljb250aW51ZTsK KworCQkJCQl0aGlzX2VyciA9IGFicyhjbG9jay5kb3QgLSB0YXJnZXQpOworCQkJCQlpZiAodGhp c19lcnIgPCBlcnIpIHsKKwkJCQkJCSpiZXN0X2Nsb2NrID0gY2xvY2s7CisJCQkJCQllcnIgPSB0 aGlzX2VycjsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAoZXJyICE9 IHRhcmdldCk7Cit9CisKKy8qCisgKiBSZXR1cm5zIGEgc2V0IG9mIGRpdmlzb3JzIGZvciB0aGUg ZGVzaXJlZCB0YXJnZXQgY2xvY2sgd2l0aCB0aGUgZ2l2ZW4KKyAqIHJlZmNsaywgb3IgRkFMU0Uu ICBUaGUgcmV0dXJuZWQgdmFsdWVzIHJlcHJlc2VudCB0aGUgY2xvY2sgZXF1YXRpb246CisgKiBy ZWZsY2sgKiAoNSAqIChtMSArIDIpICsgKG0yICsgMikpIC8gKG4gKyAyKSAvIHAxIC8gcDIuCisg KgorICogVGFyZ2V0IGFuZCByZWZlcmVuY2UgY2xvY2tzIGFyZSBzcGVjaWZpZWQgaW4ga0h6Lgor ICoKKyAqIElmIG1hdGNoX2Nsb2NrIGlzIHByb3ZpZGVkLCB0aGVuIGJlc3RfY2xvY2sgUCBkaXZp ZGVyIG11c3QgbWF0Y2ggdGhlIFAKKyAqIGRpdmlkZXIgZnJvbSBAbWF0Y2hfY2xvY2sgdXNlZCBm b3IgTFZEUyBkb3duY2xvY2tpbmcuCisgKi8KK3N0YXRpYyBib29sCitnNHhfZmluZF9iZXN0X2Rw bGwoY29uc3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1pdCwKKwkJICAgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCSAgIGludCB0YXJnZXQsIGludCByZWZjbGssIHN0cnVj dCBkcGxsICptYXRjaF9jbG9jaywKKwkJICAgc3RydWN0IGRwbGwgKmJlc3RfY2xvY2spCit7CisJ c3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGNfc3RhdGUtPnVhcGkuY3J0Yy0+ZGV2OworCXN0 cnVjdCBkcGxsIGNsb2NrOworCWludCBtYXhfbjsKKwlib29sIGZvdW5kID0gZmFsc2U7CisJLyog YXBwcm94aW1hdGVseSBlcXVhbHMgdGFyZ2V0ICogMC4wMDU4NSAqLworCWludCBlcnJfbW9zdCA9 ICh0YXJnZXQgPj4gOCkgKyAodGFyZ2V0ID4+IDkpOworCisJbWVtc2V0KGJlc3RfY2xvY2ssIDAs IHNpemVvZigqYmVzdF9jbG9jaykpOworCisJY2xvY2sucDIgPSBpOXh4X3NlbGVjdF9wMl9kaXYo bGltaXQsIGNydGNfc3RhdGUsIHRhcmdldCk7CisKKwltYXhfbiA9IGxpbWl0LT5uLm1heDsKKwkv KiBiYXNlZCBvbiBoYXJkd2FyZSByZXF1aXJlbWVudCwgcHJlZmVyIHNtYWxsZXIgbiB0byBwcmVj aXNpb24gKi8KKwlmb3IgKGNsb2NrLm4gPSBsaW1pdC0+bi5taW47IGNsb2NrLm4gPD0gbWF4X247 IGNsb2NrLm4rKykgeworCQkvKiBiYXNlZCBvbiBoYXJkd2FyZSByZXF1aXJlbWVudCwgcHJlZmVy ZSBsYXJnZXIgbTEsbTIgKi8KKwkJZm9yIChjbG9jay5tMSA9IGxpbWl0LT5tMS5tYXg7CisJCSAg ICAgY2xvY2subTEgPj0gbGltaXQtPm0xLm1pbjsgY2xvY2subTEtLSkgeworCQkJZm9yIChjbG9j ay5tMiA9IGxpbWl0LT5tMi5tYXg7CisJCQkgICAgIGNsb2NrLm0yID49IGxpbWl0LT5tMi5taW47 IGNsb2NrLm0yLS0pIHsKKwkJCQlmb3IgKGNsb2NrLnAxID0gbGltaXQtPnAxLm1heDsKKwkJCQkg ICAgIGNsb2NrLnAxID49IGxpbWl0LT5wMS5taW47IGNsb2NrLnAxLS0pIHsKKwkJCQkJaW50IHRo aXNfZXJyOworCisJCQkJCWk5eHhfY2FsY19kcGxsX3BhcmFtcyhyZWZjbGssICZjbG9jayk7CisJ CQkJCWlmICghaW50ZWxfcGxsX2lzX3ZhbGlkKHRvX2k5MTUoZGV2KSwKKwkJCQkJCQkJbGltaXQs CisJCQkJCQkJCSZjbG9jaykpCisJCQkJCQljb250aW51ZTsKKworCQkJCQl0aGlzX2VyciA9IGFi cyhjbG9jay5kb3QgLSB0YXJnZXQpOworCQkJCQlpZiAodGhpc19lcnIgPCBlcnJfbW9zdCkgewor CQkJCQkJKmJlc3RfY2xvY2sgPSBjbG9jazsKKwkJCQkJCWVycl9tb3N0ID0gdGhpc19lcnI7CisJ CQkJCQltYXhfbiA9IGNsb2NrLm47CisJCQkJCQlmb3VuZCA9IHRydWU7CisJCQkJCX0KKwkJCQl9 CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIGZvdW5kOworfQorCisvKgorICogQ2hlY2sgaWYgdGhl IGNhbGN1bGF0ZWQgUExMIGNvbmZpZ3VyYXRpb24gaXMgbW9yZSBvcHRpbWFsIGNvbXBhcmVkIHRv IHRoZQorICogYmVzdCBjb25maWd1cmF0aW9uIGFuZCBlcnJvciBmb3VuZCBzbyBmYXIuIFJldHVy biB0aGUgY2FsY3VsYXRlZCBlcnJvci4KKyAqLworc3RhdGljIGJvb2wgdmx2X1BMTF9pc19vcHRp bWFsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCB0YXJnZXRfZnJlcSwKKwkJCSAgICAgICBj b25zdCBzdHJ1Y3QgZHBsbCAqY2FsY3VsYXRlZF9jbG9jaywKKwkJCSAgICAgICBjb25zdCBzdHJ1 Y3QgZHBsbCAqYmVzdF9jbG9jaywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgYmVzdF9lcnJvcl9w cG0sCisJCQkgICAgICAgdW5zaWduZWQgaW50ICplcnJvcl9wcG0pCit7CisJLyoKKwkgKiBGb3Ig Q0hWIGlnbm9yZSB0aGUgZXJyb3IgYW5kIGNvbnNpZGVyIG9ubHkgdGhlIFAgdmFsdWUuCisJICog UHJlZmVyIGEgYmlnZ2VyIFAgdmFsdWUgYmFzZWQgb24gSFcgcmVxdWlyZW1lbnRzLgorCSAqLwor CWlmIChJU19DSEVSUllWSUVXKHRvX2k5MTUoZGV2KSkpIHsKKwkJKmVycm9yX3BwbSA9IDA7CisK KwkJcmV0dXJuIGNhbGN1bGF0ZWRfY2xvY2stPnAgPiBiZXN0X2Nsb2NrLT5wOworCX0KKworCWlm IChkcm1fV0FSTl9PTl9PTkNFKGRldiwgIXRhcmdldF9mcmVxKSkKKwkJcmV0dXJuIGZhbHNlOwor CisJKmVycm9yX3BwbSA9IGRpdl91NjQoMTAwMDAwMFVMTCAqCisJCQkJYWJzKHRhcmdldF9mcmVx IC0gY2FsY3VsYXRlZF9jbG9jay0+ZG90KSwKKwkJCSAgICAgdGFyZ2V0X2ZyZXEpOworCS8qCisJ ICogUHJlZmVyIGEgYmV0dGVyIFAgdmFsdWUgb3ZlciBhIGJldHRlciAoc21hbGxlcikgZXJyb3Ig aWYgdGhlIGVycm9yCisJICogaXMgc21hbGwuIEVuc3VyZSB0aGlzIHByZWZlcmVuY2UgZm9yIGZ1 dHVyZSBjb25maWd1cmF0aW9ucyB0b28gYnkKKwkgKiBzZXR0aW5nIHRoZSBlcnJvciB0byAwLgor CSAqLworCWlmICgqZXJyb3JfcHBtIDwgMTAwICYmIGNhbGN1bGF0ZWRfY2xvY2stPnAgPiBiZXN0 X2Nsb2NrLT5wKSB7CisJCSplcnJvcl9wcG0gPSAwOworCisJCXJldHVybiB0cnVlOworCX0KKwor CXJldHVybiAqZXJyb3JfcHBtICsgMTAgPCBiZXN0X2Vycm9yX3BwbTsKK30KKworLyoKKyAqIFJl dHVybnMgYSBzZXQgb2YgZGl2aXNvcnMgZm9yIHRoZSBkZXNpcmVkIHRhcmdldCBjbG9jayB3aXRo IHRoZSBnaXZlbgorICogcmVmY2xrLCBvciBGQUxTRS4gIFRoZSByZXR1cm5lZCB2YWx1ZXMgcmVw cmVzZW50IHRoZSBjbG9jayBlcXVhdGlvbjoKKyAqIHJlZmxjayAqICg1ICogKG0xICsgMikgKyAo bTIgKyAyKSkgLyAobiArIDIpIC8gcDEgLyBwMi4KKyAqLworc3RhdGljIGJvb2wKK3Zsdl9maW5k X2Jlc3RfZHBsbChjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgKmxpbWl0LAorCQkgICBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJICAgaW50IHRhcmdldCwgaW50IHJlZmNs aywgc3RydWN0IGRwbGwgKm1hdGNoX2Nsb2NrLAorCQkgICBzdHJ1Y3QgZHBsbCAqYmVzdF9jbG9j aykKK3sKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0 ZS0+dWFwaS5jcnRjKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7 CisJc3RydWN0IGRwbGwgY2xvY2s7CisJdW5zaWduZWQgaW50IGJlc3RwcG0gPSAxMDAwMDAwOwor CS8qIG1pbiB1cGRhdGUgMTkuMiBNSHogKi8KKwlpbnQgbWF4X24gPSBtaW4obGltaXQtPm4ubWF4 LCByZWZjbGsgLyAxOTIwMCk7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCisJdGFyZ2V0ICo9IDU7 IC8qIGZhc3QgY2xvY2sgKi8KKworCW1lbXNldChiZXN0X2Nsb2NrLCAwLCBzaXplb2YoKmJlc3Rf Y2xvY2spKTsKKworCS8qIGJhc2VkIG9uIGhhcmR3YXJlIHJlcXVpcmVtZW50LCBwcmVmZXIgc21h bGxlciBuIHRvIHByZWNpc2lvbiAqLworCWZvciAoY2xvY2subiA9IGxpbWl0LT5uLm1pbjsgY2xv Y2subiA8PSBtYXhfbjsgY2xvY2subisrKSB7CisJCWZvciAoY2xvY2sucDEgPSBsaW1pdC0+cDEu bWF4OyBjbG9jay5wMSA+PSBsaW1pdC0+cDEubWluOyBjbG9jay5wMS0tKSB7CisJCQlmb3IgKGNs b2NrLnAyID0gbGltaXQtPnAyLnAyX2Zhc3Q7IGNsb2NrLnAyID49IGxpbWl0LT5wMi5wMl9zbG93 OworCQkJICAgICBjbG9jay5wMiAtPSBjbG9jay5wMiA+IDEwID8gMiA6IDEpIHsKKwkJCQljbG9j ay5wID0gY2xvY2sucDEgKiBjbG9jay5wMjsKKwkJCQkvKiBiYXNlZCBvbiBoYXJkd2FyZSByZXF1 aXJlbWVudCwgcHJlZmVyIGJpZ2dlciBtMSxtMiB2YWx1ZXMgKi8KKwkJCQlmb3IgKGNsb2NrLm0x ID0gbGltaXQtPm0xLm1pbjsgY2xvY2subTEgPD0gbGltaXQtPm0xLm1heDsgY2xvY2subTErKykg eworCQkJCQl1bnNpZ25lZCBpbnQgcHBtOworCisJCQkJCWNsb2NrLm0yID0gRElWX1JPVU5EX0NM T1NFU1QodGFyZ2V0ICogY2xvY2sucCAqIGNsb2NrLm4sCisJCQkJCQkJCSAgICAgcmVmY2xrICog Y2xvY2subTEpOworCisJCQkJCXZsdl9jYWxjX2RwbGxfcGFyYW1zKHJlZmNsaywgJmNsb2NrKTsK KworCQkJCQlpZiAoIWludGVsX3BsbF9pc192YWxpZCh0b19pOTE1KGRldiksCisJCQkJCQkJCWxp bWl0LAorCQkJCQkJCQkmY2xvY2spKQorCQkJCQkJY29udGludWU7CisKKwkJCQkJaWYgKCF2bHZf UExMX2lzX29wdGltYWwoZGV2LCB0YXJnZXQsCisJCQkJCQkJCSZjbG9jaywKKwkJCQkJCQkJYmVz dF9jbG9jaywKKwkJCQkJCQkJYmVzdHBwbSwgJnBwbSkpCisJCQkJCQljb250aW51ZTsKKworCQkJ CQkqYmVzdF9jbG9jayA9IGNsb2NrOworCQkJCQliZXN0cHBtID0gcHBtOworCQkJCQlmb3VuZCA9 IHRydWU7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcmV0dXJuIGZvdW5kOworfQorCisvKgor ICogUmV0dXJucyBhIHNldCBvZiBkaXZpc29ycyBmb3IgdGhlIGRlc2lyZWQgdGFyZ2V0IGNsb2Nr IHdpdGggdGhlIGdpdmVuCisgKiByZWZjbGssIG9yIEZBTFNFLiAgVGhlIHJldHVybmVkIHZhbHVl cyByZXByZXNlbnQgdGhlIGNsb2NrIGVxdWF0aW9uOgorICogcmVmbGNrICogKDUgKiAobTEgKyAy KSArIChtMiArIDIpKSAvIChuICsgMikgLyBwMSAvIHAyLgorICovCitzdGF0aWMgYm9vbAorY2h2 X2ZpbmRfYmVzdF9kcGxsKGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQsCisJCSAgIHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkgICBpbnQgdGFyZ2V0LCBpbnQg cmVmY2xrLCBzdHJ1Y3QgZHBsbCAqbWF0Y2hfY2xvY2ssCisJCSAgIHN0cnVjdCBkcGxsICpiZXN0 X2Nsb2NrKQoreworCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRj X3N0YXRlLT51YXBpLmNydGMpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNl LmRldjsKKwl1bnNpZ25lZCBpbnQgYmVzdF9lcnJvcl9wcG07CisJc3RydWN0IGRwbGwgY2xvY2s7 CisJdTY0IG0yOworCWludCBmb3VuZCA9IGZhbHNlOworCisJbWVtc2V0KGJlc3RfY2xvY2ssIDAs IHNpemVvZigqYmVzdF9jbG9jaykpOworCWJlc3RfZXJyb3JfcHBtID0gMTAwMDAwMDsKKworCS8q CisJICogQmFzZWQgb24gaGFyZHdhcmUgZG9jLCB0aGUgbiBhbHdheXMgc2V0IHRvIDEsIGFuZCBt MSBhbHdheXMKKwkgKiBzZXQgdG8gMi4gIElmIHJlcXVpcmVzIHRvIHN1cHBvcnQgMjAwTWh6IHJl ZmNsaywgd2UgbmVlZCB0bworCSAqIHJldmlzaXQgdGhpcyBiZWNhdXNlIG4gbWF5IG5vdCAxIGFu eW1vcmUuCisJICovCisJY2xvY2subiA9IDE7CisJY2xvY2subTEgPSAyOworCXRhcmdldCAqPSA1 OwkvKiBmYXN0IGNsb2NrICovCisKKwlmb3IgKGNsb2NrLnAxID0gbGltaXQtPnAxLm1heDsgY2xv Y2sucDEgPj0gbGltaXQtPnAxLm1pbjsgY2xvY2sucDEtLSkgeworCQlmb3IgKGNsb2NrLnAyID0g bGltaXQtPnAyLnAyX2Zhc3Q7CisJCQkJY2xvY2sucDIgPj0gbGltaXQtPnAyLnAyX3Nsb3c7CisJ CQkJY2xvY2sucDIgLT0gY2xvY2sucDIgPiAxMCA/IDIgOiAxKSB7CisJCQl1bnNpZ25lZCBpbnQg ZXJyb3JfcHBtOworCisJCQljbG9jay5wID0gY2xvY2sucDEgKiBjbG9jay5wMjsKKworCQkJbTIg PSBESVZfUk9VTkRfQ0xPU0VTVF9VTEwobXVsX3UzMl91MzIodGFyZ2V0LCBjbG9jay5wICogY2xv Y2subikgPDwgMjIsCisJCQkJCQkgICByZWZjbGsgKiBjbG9jay5tMSk7CisKKwkJCWlmIChtMiA+ IElOVF9NQVgvY2xvY2subTEpCisJCQkJY29udGludWU7CisKKwkJCWNsb2NrLm0yID0gbTI7CisK KwkJCWNodl9jYWxjX2RwbGxfcGFyYW1zKHJlZmNsaywgJmNsb2NrKTsKKworCQkJaWYgKCFpbnRl bF9wbGxfaXNfdmFsaWQodG9faTkxNShkZXYpLCBsaW1pdCwgJmNsb2NrKSkKKwkJCQljb250aW51 ZTsKKworCQkJaWYgKCF2bHZfUExMX2lzX29wdGltYWwoZGV2LCB0YXJnZXQsICZjbG9jaywgYmVz dF9jbG9jaywKKwkJCQkJCWJlc3RfZXJyb3JfcHBtLCAmZXJyb3JfcHBtKSkKKwkJCQljb250aW51 ZTsKKworCQkJKmJlc3RfY2xvY2sgPSBjbG9jazsKKwkJCWJlc3RfZXJyb3JfcHBtID0gZXJyb3Jf cHBtOworCQkJZm91bmQgPSB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZvdW5kOworfQorCiti b29sIGJ4dF9maW5kX2Jlc3RfZHBsbChzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSwKKwkJCXN0cnVjdCBkcGxsICpiZXN0X2Nsb2NrKQoreworCWludCByZWZjbGsgPSAxMDAwMDA7 CisJY29uc3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1pdCA9ICZpbnRlbF9saW1pdHNfYnh0Owor CisJcmV0dXJuIGNodl9maW5kX2Jlc3RfZHBsbChsaW1pdCwgY3J0Y19zdGF0ZSwKKwkJCQkgIGNy dGNfc3RhdGUtPnBvcnRfY2xvY2ssIHJlZmNsaywKKwkJCQkgIE5VTEwsIGJlc3RfY2xvY2spOwor fQorCitzdGF0aWMgdTMyIHBudl9kcGxsX2NvbXB1dGVfZnAoc3RydWN0IGRwbGwgKmRwbGwpCit7 CisJcmV0dXJuICgxIDw8IGRwbGwtPm4pIDw8IDE2IHwgZHBsbC0+bTI7Cit9CisKK3N0YXRpYyB2 b2lkIGk5eHhfdXBkYXRlX3BsbF9kaXZpZGVycyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKKwkJ CQkgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJCSAgICAgc3Ry dWN0IGRwbGwgKnJlZHVjZWRfY2xvY2spCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7CisJdTMyIGZwLCBmcDIgPSAwOworCisJ aWYgKElTX1BJTkVWSUVXKGRldl9wcml2KSkgeworCQlmcCA9IHBudl9kcGxsX2NvbXB1dGVfZnAo JmNydGNfc3RhdGUtPmRwbGwpOworCQlpZiAocmVkdWNlZF9jbG9jaykKKwkJCWZwMiA9IHBudl9k cGxsX2NvbXB1dGVfZnAocmVkdWNlZF9jbG9jayk7CisJfSBlbHNlIHsKKwkJZnAgPSBpOXh4X2Rw bGxfY29tcHV0ZV9mcCgmY3J0Y19zdGF0ZS0+ZHBsbCk7CisJCWlmIChyZWR1Y2VkX2Nsb2NrKQor CQkJZnAyID0gaTl4eF9kcGxsX2NvbXB1dGVfZnAocmVkdWNlZF9jbG9jayk7CisJfQorCisJY3J0 Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZS5mcDAgPSBmcDsKKworCWlmIChpbnRlbF9jcnRjX2hhc190 eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9MVkRTKSAmJgorCSAgICByZWR1Y2VkX2Nsb2Nr KSB7CisJCWNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUuZnAxID0gZnAyOworCX0gZWxzZSB7CisJ CWNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUuZnAxID0gZnA7CisJfQorfQorCitzdGF0aWMgdm9p ZCBpOXh4X2NvbXB1dGVfZHBsbChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKKwkJCSAgICAgIHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJICAgICAgc3RydWN0IGRwbGwg KnJlZHVjZWRfY2xvY2spCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g dG9faTkxNShjcnRjLT5iYXNlLmRldik7CisJdTMyIGRwbGw7CisJc3RydWN0IGRwbGwgKmNsb2Nr ID0gJmNydGNfc3RhdGUtPmRwbGw7CisKKwlpOXh4X3VwZGF0ZV9wbGxfZGl2aWRlcnMoY3J0Yywg Y3J0Y19zdGF0ZSwgcmVkdWNlZF9jbG9jayk7CisKKwlkcGxsID0gRFBMTF9WR0FfTU9ERV9ESVM7 CisKKwlpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfTFZE UykpCisJCWRwbGwgfD0gRFBMTEJfTU9ERV9MVkRTOworCWVsc2UKKwkJZHBsbCB8PSBEUExMQl9N T0RFX0RBQ19TRVJJQUw7CisKKwlpZiAoSVNfSTk0NUcoZGV2X3ByaXYpIHx8IElTX0k5NDVHTShk ZXZfcHJpdikgfHwKKwkgICAgSVNfRzMzKGRldl9wcml2KSB8fCBJU19QSU5FVklFVyhkZXZfcHJp dikpIHsKKwkJZHBsbCB8PSAoY3J0Y19zdGF0ZS0+cGl4ZWxfbXVsdGlwbGllciAtIDEpCisJCQk8 PCBTRFZPX01VTFRJUExJRVJfU0hJRlRfSElSRVM7CisJfQorCisJaWYgKGludGVsX2NydGNfaGFz X3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX1NEVk8pIHx8CisJICAgIGludGVsX2NydGNf aGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0hETUkpKQorCQlkcGxsIHw9IERQTExf U0RWT19ISUdIX1NQRUVEOworCisJaWYgKGludGVsX2NydGNfaGFzX2RwX2VuY29kZXIoY3J0Y19z dGF0ZSkpCisJCWRwbGwgfD0gRFBMTF9TRFZPX0hJR0hfU1BFRUQ7CisKKwkvKiBjb21wdXRlIGJp dG1hc2sgZnJvbSBwMSB2YWx1ZSAqLworCWlmIChJU19QSU5FVklFVyhkZXZfcHJpdikpCisJCWRw bGwgfD0gKDEgPDwgKGNsb2NrLT5wMSAtIDEpKSA8PCBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX1NI SUZUX1BJTkVWSUVXOworCWVsc2UgeworCQlkcGxsIHw9ICgxIDw8IChjbG9jay0+cDEgLSAxKSkg PDwgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9TSElGVDsKKwkJaWYgKElTX0c0WChkZXZfcHJpdikg JiYgcmVkdWNlZF9jbG9jaykKKwkJCWRwbGwgfD0gKDEgPDwgKHJlZHVjZWRfY2xvY2stPnAxIC0g MSkpIDw8IERQTExfRlBBMV9QMV9QT1NUX0RJVl9TSElGVDsKKwl9CisJc3dpdGNoIChjbG9jay0+ cDIpIHsKKwljYXNlIDU6CisJCWRwbGwgfD0gRFBMTF9EQUNfU0VSSUFMX1AyX0NMT0NLX0RJVl81 OworCQlicmVhazsKKwljYXNlIDc6CisJCWRwbGwgfD0gRFBMTEJfTFZEU19QMl9DTE9DS19ESVZf NzsKKwkJYnJlYWs7CisJY2FzZSAxMDoKKwkJZHBsbCB8PSBEUExMX0RBQ19TRVJJQUxfUDJfQ0xP Q0tfRElWXzEwOworCQlicmVhazsKKwljYXNlIDE0OgorCQlkcGxsIHw9IERQTExCX0xWRFNfUDJf Q0xPQ0tfRElWXzE0OworCQlicmVhazsKKwl9CisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g NCkKKwkJZHBsbCB8PSAoNiA8PCBQTExfTE9BRF9QVUxTRV9QSEFTRV9TSElGVCk7CisKKwlpZiAo Y3J0Y19zdGF0ZS0+c2R2b190dl9jbG9jaykKKwkJZHBsbCB8PSBQTExfUkVGX0lOUFVUX1RWQ0xL SU5CQzsKKwllbHNlIGlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09V VFBVVF9MVkRTKSAmJgorCQkgaW50ZWxfcGFuZWxfdXNlX3NzYyhkZXZfcHJpdikpCisJCWRwbGwg fD0gUExMQl9SRUZfSU5QVVRfU1BSRUFEU1BFQ1RSVU1JTjsKKwllbHNlCisJCWRwbGwgfD0gUExM X1JFRl9JTlBVVF9EUkVGQ0xLOworCisJZHBsbCB8PSBEUExMX1ZDT19FTkFCTEU7CisJY3J0Y19z dGF0ZS0+ZHBsbF9od19zdGF0ZS5kcGxsID0gZHBsbDsKKworCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDQpIHsKKwkJdTMyIGRwbGxfbWQgPSAoY3J0Y19zdGF0ZS0+cGl4ZWxfbXVsdGlwbGll ciAtIDEpCisJCQk8PCBEUExMX01EX1VESV9NVUxUSVBMSUVSX1NISUZUOworCQljcnRjX3N0YXRl LT5kcGxsX2h3X3N0YXRlLmRwbGxfbWQgPSBkcGxsX21kOworCX0KK30KKworc3RhdGljIHZvaWQg aTh4eF9jb21wdXRlX2RwbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCisJCQkgICAgICBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCSAgICAgIHN0cnVjdCBkcGxsICpy ZWR1Y2VkX2Nsb2NrKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRl djsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7CisJ dTMyIGRwbGw7CisJc3RydWN0IGRwbGwgKmNsb2NrID0gJmNydGNfc3RhdGUtPmRwbGw7CisKKwlp OXh4X3VwZGF0ZV9wbGxfZGl2aWRlcnMoY3J0YywgY3J0Y19zdGF0ZSwgcmVkdWNlZF9jbG9jayk7 CisKKwlkcGxsID0gRFBMTF9WR0FfTU9ERV9ESVM7CisKKwlpZiAoaW50ZWxfY3J0Y19oYXNfdHlw ZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsKKwkJZHBsbCB8PSAoMSA8PCAoY2xv Y2stPnAxIC0gMSkpIDw8IERQTExfRlBBMDFfUDFfUE9TVF9ESVZfU0hJRlQ7CisJfSBlbHNlIHsK KwkJaWYgKGNsb2NrLT5wMSA9PSAyKQorCQkJZHBsbCB8PSBQTExfUDFfRElWSURFX0JZX1RXTzsK KwkJZWxzZQorCQkJZHBsbCB8PSAoY2xvY2stPnAxIC0gMikgPDwgRFBMTF9GUEEwMV9QMV9QT1NU X0RJVl9TSElGVDsKKwkJaWYgKGNsb2NrLT5wMiA9PSA0KQorCQkJZHBsbCB8PSBQTExfUDJfRElW SURFX0JZXzQ7CisJfQorCisJLyoKKwkgKiBCc3BlYzoKKwkgKiAiW0FsbWFkb3IgRXJyYXRhfTog Rm9yIHRoZSBjb3JyZWN0IG9wZXJhdGlvbiBvZiB0aGUgbXV4ZWQgRFZPIHBpbnMKKwkgKiAgKEdE RVZTRUxCL0kyQ2RhdGEsIEdJUkRCWS9JMkNDbGspIGFuZCAoR0ZSQU1FQi9EVklfRGF0YSwKKwkg KiAgR1RSRFlCL0RWSV9DbGspOiBCaXQgMzEgKERQTEwgVkNPIEVuYWJsZSkgYW5kIEJpdCAzMCAo MlggQ2xvY2sKKwkgKiAgRW5hYmxlKSBtdXN0IGJlIHNldCB0byDigJwx4oCdIGluIGJvdGggdGhl IERQTEwgQSBDb250cm9sIFJlZ2lzdGVyCisJICogICgwNjAxNGgtMDYwMTdoKSBhbmQgRFBMTCBC IENvbnRyb2wgUmVnaXN0ZXIgKDA2MDE4aC0wNjAxQmgpLiIKKwkgKgorCSAqIEZvciBzaW1wbGlj aXR5IFdlIHNpbXBseSBrZWVwIGJvdGggYml0cyBhbHdheXMgZW5hYmxlZCBpbgorCSAqIGJvdGgg RFBMTFMuIFRoZSBzcGVjIHNheXMgd2Ugc2hvdWxkIGRpc2FibGUgdGhlIERWTyAyWCBjbG9jawor CSAqIHdoZW4gbm90IG5lZWRlZCwgYnV0IHRoaXMgc2VlbXMgdG8gd29yayBmaW5lIGluIHByYWN0 aWNlLgorCSAqLworCWlmIChJU19JODMwKGRldl9wcml2KSB8fAorCSAgICBpbnRlbF9jcnRjX2hh c190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9EVk8pKQorCQlkcGxsIHw9IERQTExfRFZP XzJYX01PREU7CisKKwlpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9P VVRQVVRfTFZEUykgJiYKKwkgICAgaW50ZWxfcGFuZWxfdXNlX3NzYyhkZXZfcHJpdikpCisJCWRw bGwgfD0gUExMQl9SRUZfSU5QVVRfU1BSRUFEU1BFQ1RSVU1JTjsKKwllbHNlCisJCWRwbGwgfD0g UExMX1JFRl9JTlBVVF9EUkVGQ0xLOworCisJZHBsbCB8PSBEUExMX1ZDT19FTkFCTEU7CisJY3J0 Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZS5kcGxsID0gZHBsbDsKK30KKworc3RhdGljIGludCBoc3df Y3J0Y19jb21wdXRlX2Nsb2NrKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAorCQkJCSAgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7CisJc3RydWN0IGludGVsX2F0 b21pY19zdGF0ZSAqc3RhdGUgPQorCQl0b19pbnRlbF9hdG9taWNfc3RhdGUoY3J0Y19zdGF0ZS0+ dWFwaS5zdGF0ZSk7CisKKwlpZiAoIWludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5U RUxfT1VUUFVUX0RTSSkgfHwKKwkgICAgSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkgeworCQlz dHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciA9CisJCQlpbnRlbF9nZXRfY3J0Y19uZXdfZW5j b2RlcihzdGF0ZSwgY3J0Y19zdGF0ZSk7CisKKwkJaWYgKCFpbnRlbF9yZXNlcnZlX3NoYXJlZF9k cGxscyhzdGF0ZSwgY3J0YywgZW5jb2RlcikpIHsKKwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ ZHJtLAorCQkJCSAgICAiZmFpbGVkIHRvIGZpbmQgUExMIGZvciBwaXBlICVjXG4iLAorCQkJCSAg ICBwaXBlX25hbWUoY3J0Yy0+cGlwZSkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgaWxrX25lZWRzX2ZiX2NiX3R1bmUoc3RydWN0 IGRwbGwgKmRwbGwsIGludCBmYWN0b3IpCit7CisJcmV0dXJuIGk5eHhfZHBsbF9jb21wdXRlX20o ZHBsbCkgPCBmYWN0b3IgKiBkcGxsLT5uOworfQorCisKK3N0YXRpYyB2b2lkIGlsa19jb21wdXRl X2RwbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCisJCQkgICAgIHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlLAorCQkJICAgICBzdHJ1Y3QgZHBsbCAqcmVkdWNlZF9jbG9jaykK K3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJh c2UuZGV2KTsKKwl1MzIgZHBsbCwgZnAsIGZwMjsKKwlpbnQgZmFjdG9yOworCisJLyogRW5hYmxl IGF1dG90dW5pbmcgb2YgdGhlIFBMTCBjbG9jayAoaWYgcGVybWlzc2libGUpICovCisJZmFjdG9y ID0gMjE7CisJaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVU X0xWRFMpKSB7CisJCWlmICgoaW50ZWxfcGFuZWxfdXNlX3NzYyhkZXZfcHJpdikgJiYKKwkJICAg ICBkZXZfcHJpdi0+dmJ0Lmx2ZHNfc3NjX2ZyZXEgPT0gMTAwMDAwKSB8fAorCQkgICAgKEhBU19Q Q0hfSUJYKGRldl9wcml2KSAmJgorCQkgICAgIGludGVsX2lzX2R1YWxfbGlua19sdmRzKGRldl9w cml2KSkpCisJCQlmYWN0b3IgPSAyNTsKKwl9IGVsc2UgaWYgKGNydGNfc3RhdGUtPnNkdm9fdHZf Y2xvY2spIHsKKwkJZmFjdG9yID0gMjA7CisJfQorCisJZnAgPSBpOXh4X2RwbGxfY29tcHV0ZV9m cCgmY3J0Y19zdGF0ZS0+ZHBsbCk7CisKKwlpZiAoaWxrX25lZWRzX2ZiX2NiX3R1bmUoJmNydGNf c3RhdGUtPmRwbGwsIGZhY3RvcikpCisJCWZwIHw9IEZQX0NCX1RVTkU7CisKKwlpZiAocmVkdWNl ZF9jbG9jaykgeworCQlmcDIgPSBpOXh4X2RwbGxfY29tcHV0ZV9mcChyZWR1Y2VkX2Nsb2NrKTsK KworCQlpZiAocmVkdWNlZF9jbG9jay0+bSA8IGZhY3RvciAqIHJlZHVjZWRfY2xvY2stPm4pCisJ CQlmcDIgfD0gRlBfQ0JfVFVORTsKKwl9IGVsc2UgeworCQlmcDIgPSBmcDsKKwl9CisKKwlkcGxs ID0gMDsKKworCWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBV VF9MVkRTKSkKKwkJZHBsbCB8PSBEUExMQl9NT0RFX0xWRFM7CisJZWxzZQorCQlkcGxsIHw9IERQ TExCX01PREVfREFDX1NFUklBTDsKKworCWRwbGwgfD0gKGNydGNfc3RhdGUtPnBpeGVsX211bHRp cGxpZXIgLSAxKQorCQk8PCBQTExfUkVGX1NEVk9fSERNSV9NVUxUSVBMSUVSX1NISUZUOworCisJ aWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX1NEVk8pIHx8 CisJICAgIGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0hETUkp KQorCQlkcGxsIHw9IERQTExfU0RWT19ISUdIX1NQRUVEOworCisJaWYgKGludGVsX2NydGNfaGFz X2RwX2VuY29kZXIoY3J0Y19zdGF0ZSkpCisJCWRwbGwgfD0gRFBMTF9TRFZPX0hJR0hfU1BFRUQ7 CisKKwkvKgorCSAqIFRoZSBoaWdoIHNwZWVkIElPIGNsb2NrIGlzIG9ubHkgcmVhbGx5IHJlcXVp cmVkIGZvcgorCSAqIFNEVk8vSERNSS9EUCwgYnV0IHdlIGFsc28gZW5hYmxlIGl0IGZvciBDUlQg dG8gbWFrZSBpdAorCSAqIHBvc3NpYmxlIHRvIHNoYXJlIHRoZSBEUExMIGJldHdlZW4gQ1JUIGFu ZCBIRE1JLiBFbmFibGluZworCSAqIHRoZSBjbG9jayBuZWVkbGVzc2x5IGRvZXMgbm8gcmVhbCBo YXJtLCBleGNlcHQgdXNlIHVwIGEKKwkgKiBiaXQgb2YgcG93ZXIgcG90ZW50aWFsbHkuCisJICoK KwkgKiBXZSdsbCBsaW1pdCB0aGlzIHRvIElWQiB3aXRoIDMgcGlwZXMsIHNpbmNlIGl0IGhhcyBv bmx5IHR3bworCSAqIERQTExzIGFuZCBzbyBEUExMIHNoYXJpbmcgaXMgdGhlIG9ubHkgd2F5IHRv IGdldCB0aHJlZSBwaXBlcworCSAqIGRyaXZpbmcgUENIIHBvcnRzIGF0IHRoZSBzYW1lIHRpbWUu IE9uIFNOQiB3ZSBjb3VsZCBkbyB0aGlzLAorCSAqIGFuZCBwb3RlbnRpYWxseSBhdm9pZCBlbmFi bGluZyB0aGUgc2Vjb25kIERQTEwsIGJ1dCBpdCdzIG5vdAorCSAqIGNsZWFyIGlmIGl0JydzIGEg d2luIG9yIGxvc3MgcG93ZXIgd2lzZS4gTm8gcG9pbnQgaW4gZG9pbmcKKwkgKiB0aGlzIG9uIElM SyBhdCBhbGwgc2luY2UgaXQgaGFzIGEgZml4ZWQgRFBMTDwtPnBpcGUgbWFwcGluZy4KKwkgKi8K KwlpZiAoSU5URUxfTlVNX1BJUEVTKGRldl9wcml2KSA9PSAzICYmCisJICAgIGludGVsX2NydGNf aGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0FOQUxPRykpCisJCWRwbGwgfD0gRFBM TF9TRFZPX0hJR0hfU1BFRUQ7CisKKwkvKiBjb21wdXRlIGJpdG1hc2sgZnJvbSBwMSB2YWx1ZSAq LworCWRwbGwgfD0gKDEgPDwgKGNydGNfc3RhdGUtPmRwbGwucDEgLSAxKSkgPDwgRFBMTF9GUEEw MV9QMV9QT1NUX0RJVl9TSElGVDsKKwkvKiBhbHNvIEZQQTEgKi8KKwlkcGxsIHw9ICgxIDw8IChj cnRjX3N0YXRlLT5kcGxsLnAxIC0gMSkpIDw8IERQTExfRlBBMV9QMV9QT1NUX0RJVl9TSElGVDsK KworCXN3aXRjaCAoY3J0Y19zdGF0ZS0+ZHBsbC5wMikgeworCWNhc2UgNToKKwkJZHBsbCB8PSBE UExMX0RBQ19TRVJJQUxfUDJfQ0xPQ0tfRElWXzU7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJZHBs bCB8PSBEUExMQl9MVkRTX1AyX0NMT0NLX0RJVl83OworCQlicmVhazsKKwljYXNlIDEwOgorCQlk cGxsIHw9IERQTExfREFDX1NFUklBTF9QMl9DTE9DS19ESVZfMTA7CisJCWJyZWFrOworCWNhc2Ug MTQ6CisJCWRwbGwgfD0gRFBMTEJfTFZEU19QMl9DTE9DS19ESVZfMTQ7CisJCWJyZWFrOworCX0K KworCWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9MVkRT KSAmJgorCSAgICBpbnRlbF9wYW5lbF91c2Vfc3NjKGRldl9wcml2KSkKKwkJZHBsbCB8PSBQTExC X1JFRl9JTlBVVF9TUFJFQURTUEVDVFJVTUlOOworCWVsc2UKKwkJZHBsbCB8PSBQTExfUkVGX0lO UFVUX0RSRUZDTEs7CisKKwlkcGxsIHw9IERQTExfVkNPX0VOQUJMRTsKKworCWNydGNfc3RhdGUt PmRwbGxfaHdfc3RhdGUuZHBsbCA9IGRwbGw7CisJY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZS5m cDAgPSBmcDsKKwljcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLmZwMSA9IGZwMjsKK30KKworc3Rh dGljIGludCBpbGtfY3J0Y19jb21wdXRlX2Nsb2NrKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAor CQkJCSAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7CisJc3Ry dWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUgPQorCQl0b19pbnRlbF9hdG9taWNfc3RhdGUo Y3J0Y19zdGF0ZS0+dWFwaS5zdGF0ZSk7CisJY29uc3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1p dDsKKwlpbnQgcmVmY2xrID0gMTIwMDAwOworCisJbWVtc2V0KCZjcnRjX3N0YXRlLT5kcGxsX2h3 X3N0YXRlLCAwLAorCSAgICAgICBzaXplb2YoY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSkpOwor CisJLyogQ1BVIGVEUCBpcyB0aGUgb25seSBvdXRwdXQgdGhhdCBkb2Vzbid0IG5lZWQgYSBQQ0gg UExMIG9mIGl0cyBvd24uICovCisJaWYgKCFjcnRjX3N0YXRlLT5oYXNfcGNoX2VuY29kZXIpCisJ CXJldHVybiAwOworCisJaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxf T1VUUFVUX0xWRFMpKSB7CisJCWlmIChpbnRlbF9wYW5lbF91c2Vfc3NjKGRldl9wcml2KSkgewor CQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkJICAgICJ1c2luZyBTU0MgcmVmZXJl bmNlIGNsb2NrIG9mICVkIGtIelxuIiwKKwkJCQkgICAgZGV2X3ByaXYtPnZidC5sdmRzX3NzY19m cmVxKTsKKwkJCXJlZmNsayA9IGRldl9wcml2LT52YnQubHZkc19zc2NfZnJlcTsKKwkJfQorCisJ CWlmIChpbnRlbF9pc19kdWFsX2xpbmtfbHZkcyhkZXZfcHJpdikpIHsKKwkJCWlmIChyZWZjbGsg PT0gMTAwMDAwKQorCQkJCWxpbWl0ID0gJmlsa19saW1pdHNfZHVhbF9sdmRzXzEwMG07CisJCQll bHNlCisJCQkJbGltaXQgPSAmaWxrX2xpbWl0c19kdWFsX2x2ZHM7CisJCX0gZWxzZSB7CisJCQlp ZiAocmVmY2xrID09IDEwMDAwMCkKKwkJCQlsaW1pdCA9ICZpbGtfbGltaXRzX3NpbmdsZV9sdmRz XzEwMG07CisJCQllbHNlCisJCQkJbGltaXQgPSAmaWxrX2xpbWl0c19zaW5nbGVfbHZkczsKKwkJ fQorCX0gZWxzZSB7CisJCWxpbWl0ID0gJmlsa19saW1pdHNfZGFjOworCX0KKworCWlmICghY3J0 Y19zdGF0ZS0+Y2xvY2tfc2V0ICYmCisJICAgICFnNHhfZmluZF9iZXN0X2RwbGwobGltaXQsIGNy dGNfc3RhdGUsIGNydGNfc3RhdGUtPnBvcnRfY2xvY2ssCisJCQkJcmVmY2xrLCBOVUxMLCAmY3J0 Y19zdGF0ZS0+ZHBsbCkpIHsKKwkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwKKwkJCSJDb3VsZG4n dCBmaW5kIFBMTCBzZXR0aW5ncyBmb3IgbW9kZSFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwlpbGtfY29tcHV0ZV9kcGxsKGNydGMsIGNydGNfc3RhdGUsIE5VTEwpOworCisJaWYgKCFp bnRlbF9yZXNlcnZlX3NoYXJlZF9kcGxscyhzdGF0ZSwgY3J0YywgTlVMTCkpIHsKKwkJZHJtX2Ri Z19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkgICAgImZhaWxlZCB0byBmaW5kIFBMTCBmb3IgcGlw ZSAlY1xuIiwKKwkJCSAgICBwaXBlX25hbWUoY3J0Yy0+cGlwZSkpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCB2bHZfY29tcHV0ZV9kcGxsKHN0cnVjdCBp bnRlbF9jcnRjICpjcnRjLAorCQkgICAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9j b25maWcpCit7CisJcGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUuZHBsbCA9IERQTExfSU5URUdS QVRFRF9SRUZfQ0xLX1ZMViB8CisJCURQTExfUkVGX0NMS19FTkFCTEVfVkxWIHwgRFBMTF9WR0Ff TU9ERV9ESVM7CisJaWYgKGNydGMtPnBpcGUgIT0gUElQRV9BKQorCQlwaXBlX2NvbmZpZy0+ZHBs bF9od19zdGF0ZS5kcGxsIHw9IERQTExfSU5URUdSQVRFRF9DUklfQ0xLX1ZMVjsKKworCS8qIERQ TEwgbm90IHVzZWQgd2l0aCBEU0ksIGJ1dCBzdGlsbCBuZWVkIHRoZSByZXN0IHNldCB1cCAqLwor CWlmICghaW50ZWxfY3J0Y19oYXNfdHlwZShwaXBlX2NvbmZpZywgSU5URUxfT1VUUFVUX0RTSSkp CisJCXBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRlLmRwbGwgfD0gRFBMTF9WQ09fRU5BQkxFIHwK KwkJCURQTExfRVhUX0JVRkZFUl9FTkFCTEVfVkxWOworCisJcGlwZV9jb25maWctPmRwbGxfaHdf c3RhdGUuZHBsbF9tZCA9CisJCShwaXBlX2NvbmZpZy0+cGl4ZWxfbXVsdGlwbGllciAtIDEpIDw8 IERQTExfTURfVURJX01VTFRJUExJRVJfU0hJRlQ7Cit9CisKK3ZvaWQgY2h2X2NvbXB1dGVfZHBs bChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKKwkJICAgICAgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKnBpcGVfY29uZmlnKQoreworCXBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRlLmRwbGwgPSBE UExMX1NTQ19SRUZfQ0xLX0NIViB8CisJCURQTExfUkVGX0NMS19FTkFCTEVfVkxWIHwgRFBMTF9W R0FfTU9ERV9ESVM7CisJaWYgKGNydGMtPnBpcGUgIT0gUElQRV9BKQorCQlwaXBlX2NvbmZpZy0+ ZHBsbF9od19zdGF0ZS5kcGxsIHw9IERQTExfSU5URUdSQVRFRF9DUklfQ0xLX1ZMVjsKKworCS8q IERQTEwgbm90IHVzZWQgd2l0aCBEU0ksIGJ1dCBzdGlsbCBuZWVkIHRoZSByZXN0IHNldCB1cCAq LworCWlmICghaW50ZWxfY3J0Y19oYXNfdHlwZShwaXBlX2NvbmZpZywgSU5URUxfT1VUUFVUX0RT SSkpCisJCXBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRlLmRwbGwgfD0gRFBMTF9WQ09fRU5BQkxF OworCisJcGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUuZHBsbF9tZCA9CisJCShwaXBlX2NvbmZp Zy0+cGl4ZWxfbXVsdGlwbGllciAtIDEpIDw8IERQTExfTURfVURJX01VTFRJUExJRVJfU0hJRlQ7 Cit9CisKK3N0YXRpYyBpbnQgY2h2X2NydGNfY29tcHV0ZV9jbG9jayhzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0YywKKwkJCQkgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQorewor CWludCByZWZjbGsgPSAxMDAwMDA7CisJY29uc3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1pdCA9 ICZpbnRlbF9saW1pdHNfY2h2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9f aTkxNShjcnRjX3N0YXRlLT51YXBpLmNydGMtPmRldik7CisKKwltZW1zZXQoJmNydGNfc3RhdGUt PmRwbGxfaHdfc3RhdGUsIDAsCisJICAgICAgIHNpemVvZihjcnRjX3N0YXRlLT5kcGxsX2h3X3N0 YXRlKSk7CisKKwlpZiAoIWNydGNfc3RhdGUtPmNsb2NrX3NldCAmJgorCSAgICAhY2h2X2ZpbmRf YmVzdF9kcGxsKGxpbWl0LCBjcnRjX3N0YXRlLCBjcnRjX3N0YXRlLT5wb3J0X2Nsb2NrLAorCQkJ CXJlZmNsaywgTlVMTCwgJmNydGNfc3RhdGUtPmRwbGwpKSB7CisJCWRybV9lcnIoJmk5MTUtPmRy bSwgIkNvdWxkbid0IGZpbmQgUExMIHNldHRpbmdzIGZvciBtb2RlIVxuIik7CisJCXJldHVybiAt RUlOVkFMOworCX0KKworCWNodl9jb21wdXRlX2RwbGwoY3J0YywgY3J0Y19zdGF0ZSk7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2bHZfY3J0Y19jb21wdXRlX2Nsb2NrKHN0cnVjdCBp bnRlbF9jcnRjICpjcnRjLAorCQkJCSAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUpCit7CisJaW50IHJlZmNsayA9IDEwMDAwMDsKKwljb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQg KmxpbWl0ID0gJmludGVsX2xpbWl0c192bHY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUgPSB0b19pOTE1KGNydGNfc3RhdGUtPnVhcGkuY3J0Yy0+ZGV2KTsKKworCW1lbXNldCgmY3J0 Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSwgMCwKKwkgICAgICAgc2l6ZW9mKGNydGNfc3RhdGUtPmRw bGxfaHdfc3RhdGUpKTsKKworCWlmICghY3J0Y19zdGF0ZS0+Y2xvY2tfc2V0ICYmCisJICAgICF2 bHZfZmluZF9iZXN0X2RwbGwobGltaXQsIGNydGNfc3RhdGUsIGNydGNfc3RhdGUtPnBvcnRfY2xv Y2ssCisJCQkJcmVmY2xrLCBOVUxMLCAmY3J0Y19zdGF0ZS0+ZHBsbCkpIHsKKwkJZHJtX2Vycigm aTkxNS0+ZHJtLCAgIkNvdWxkbid0IGZpbmQgUExMIHNldHRpbmdzIGZvciBtb2RlIVxuIik7CisJ CXJldHVybiAtRUlOVkFMOworCX0KKworCXZsdl9jb21wdXRlX2RwbGwoY3J0YywgY3J0Y19zdGF0 ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnNHhfY3J0Y19jb21wdXRlX2Nsb2Nr KHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAorCQkJCSAgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShjcnRjLT5iYXNlLmRldik7CisJY29uc3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1pdDsK KwlpbnQgcmVmY2xrID0gOTYwMDA7CisKKwltZW1zZXQoJmNydGNfc3RhdGUtPmRwbGxfaHdfc3Rh dGUsIDAsCisJICAgICAgIHNpemVvZihjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlKSk7CisKKwlp ZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsK KwkJaWYgKGludGVsX3BhbmVsX3VzZV9zc2MoZGV2X3ByaXYpKSB7CisJCQlyZWZjbGsgPSBkZXZf cHJpdi0+dmJ0Lmx2ZHNfc3NjX2ZyZXE7CisJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwK KwkJCQkgICAgInVzaW5nIFNTQyByZWZlcmVuY2UgY2xvY2sgb2YgJWQga0h6XG4iLAorCQkJCSAg ICByZWZjbGspOworCQl9CisKKwkJaWYgKGludGVsX2lzX2R1YWxfbGlua19sdmRzKGRldl9wcml2 KSkKKwkJCWxpbWl0ID0gJmludGVsX2xpbWl0c19nNHhfZHVhbF9jaGFubmVsX2x2ZHM7CisJCWVs c2UKKwkJCWxpbWl0ID0gJmludGVsX2xpbWl0c19nNHhfc2luZ2xlX2NoYW5uZWxfbHZkczsKKwl9 IGVsc2UgaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0hE TUkpIHx8CisJCSAgIGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVU X0FOQUxPRykpIHsKKwkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2c0eF9oZG1pOworCX0gZWxzZSBp ZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfU0RWTykpIHsK KwkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2c0eF9zZHZvOworCX0gZWxzZSB7CisJCS8qIFRoZSBv cHRpb24gaXMgZm9yIG90aGVyIG91dHB1dHMgKi8KKwkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2k5 eHhfc2R2bzsKKwl9CisKKwlpZiAoIWNydGNfc3RhdGUtPmNsb2NrX3NldCAmJgorCSAgICAhZzR4 X2ZpbmRfYmVzdF9kcGxsKGxpbWl0LCBjcnRjX3N0YXRlLCBjcnRjX3N0YXRlLT5wb3J0X2Nsb2Nr LAorCQkJCXJlZmNsaywgTlVMTCwgJmNydGNfc3RhdGUtPmRwbGwpKSB7CisJCWRybV9lcnIoJmRl dl9wcml2LT5kcm0sCisJCQkiQ291bGRuJ3QgZmluZCBQTEwgc2V0dGluZ3MgZm9yIG1vZGUhXG4i KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaTl4eF9jb21wdXRlX2RwbGwoY3J0YywgY3J0 Y19zdGF0ZSwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwbnZfY3J0Y19j b21wdXRlX2Nsb2NrKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAorCQkJCSAgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNy dGMtPmJhc2UuZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUoZGV2KTsKKwljb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgKmxpbWl0OworCWludCByZWZjbGsg PSA5NjAwMDsKKworCW1lbXNldCgmY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSwgMCwKKwkgICAg ICAgc2l6ZW9mKGNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUpKTsKKworCWlmIChpbnRlbF9jcnRj X2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9MVkRTKSkgeworCQlpZiAoaW50ZWxf cGFuZWxfdXNlX3NzYyhkZXZfcHJpdikpIHsKKwkJCXJlZmNsayA9IGRldl9wcml2LT52YnQubHZk c19zc2NfZnJlcTsKKwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJCSAgICAidXNp bmcgU1NDIHJlZmVyZW5jZSBjbG9jayBvZiAlZCBrSHpcbiIsCisJCQkJICAgIHJlZmNsayk7CisJ CX0KKworCQlsaW1pdCA9ICZwbnZfbGltaXRzX2x2ZHM7CisJfSBlbHNlIHsKKwkJbGltaXQgPSAm cG52X2xpbWl0c19zZHZvOworCX0KKworCWlmICghY3J0Y19zdGF0ZS0+Y2xvY2tfc2V0ICYmCisJ ICAgICFwbnZfZmluZF9iZXN0X2RwbGwobGltaXQsIGNydGNfc3RhdGUsIGNydGNfc3RhdGUtPnBv cnRfY2xvY2ssCisJCQkJcmVmY2xrLCBOVUxMLCAmY3J0Y19zdGF0ZS0+ZHBsbCkpIHsKKwkJZHJt X2VycigmZGV2X3ByaXYtPmRybSwKKwkJCSJDb3VsZG4ndCBmaW5kIFBMTCBzZXR0aW5ncyBmb3Ig bW9kZSFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpOXh4X2NvbXB1dGVfZHBsbChj cnRjLCBjcnRjX3N0YXRlLCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGk5 eHhfY3J0Y19jb21wdXRlX2Nsb2NrKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAorCQkJCSAgIHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQoreworCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KGRldik7CisJY29uc3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1pdDsKKwlp bnQgcmVmY2xrID0gOTYwMDA7CisKKwltZW1zZXQoJmNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUs IDAsCisJICAgICAgIHNpemVvZihjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlKSk7CisKKwlpZiAo aW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsKKwkJ aWYgKGludGVsX3BhbmVsX3VzZV9zc2MoZGV2X3ByaXYpKSB7CisJCQlyZWZjbGsgPSBkZXZfcHJp di0+dmJ0Lmx2ZHNfc3NjX2ZyZXE7CisJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJ CQkgICAgInVzaW5nIFNTQyByZWZlcmVuY2UgY2xvY2sgb2YgJWQga0h6XG4iLAorCQkJCSAgICBy ZWZjbGspOworCQl9CisKKwkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2k5eHhfbHZkczsKKwl9IGVs c2UgeworCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfaTl4eF9zZHZvOworCX0KKworCWlmICghY3J0 Y19zdGF0ZS0+Y2xvY2tfc2V0ICYmCisJICAgICFpOXh4X2ZpbmRfYmVzdF9kcGxsKGxpbWl0LCBj cnRjX3N0YXRlLCBjcnRjX3N0YXRlLT5wb3J0X2Nsb2NrLAorCQkJCSByZWZjbGssIE5VTEwsICZj cnRjX3N0YXRlLT5kcGxsKSkgeworCQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLAorCQkJIkNvdWxk bid0IGZpbmQgUExMIHNldHRpbmdzIGZvciBtb2RlIVxuIik7CisJCXJldHVybiAtRUlOVkFMOwor CX0KKworCWk5eHhfY29tcHV0ZV9kcGxsKGNydGMsIGNydGNfc3RhdGUsIE5VTEwpOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaTh4eF9jcnRjX2NvbXB1dGVfY2xvY2soc3RydWN0IGlu dGVsX2NydGMgKmNydGMsCisJCQkJICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmJhc2UuZGV2OworCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKKwljb25zdCBzdHJ1 Y3QgaW50ZWxfbGltaXQgKmxpbWl0OworCWludCByZWZjbGsgPSA0ODAwMDsKKworCW1lbXNldCgm Y3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSwgMCwKKwkgICAgICAgc2l6ZW9mKGNydGNfc3RhdGUt PmRwbGxfaHdfc3RhdGUpKTsKKworCWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUs IElOVEVMX09VVFBVVF9MVkRTKSkgeworCQlpZiAoaW50ZWxfcGFuZWxfdXNlX3NzYyhkZXZfcHJp dikpIHsKKwkJCXJlZmNsayA9IGRldl9wcml2LT52YnQubHZkc19zc2NfZnJlcTsKKwkJCWRybV9k Ymdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJCSAgICAidXNpbmcgU1NDIHJlZmVyZW5jZSBjbG9j ayBvZiAlZCBrSHpcbiIsCisJCQkJICAgIHJlZmNsayk7CisJCX0KKworCQlsaW1pdCA9ICZpbnRl bF9saW1pdHNfaTh4eF9sdmRzOworCX0gZWxzZSBpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRj X3N0YXRlLCBJTlRFTF9PVVRQVVRfRFZPKSkgeworCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfaTh4 eF9kdm87CisJfSBlbHNlIHsKKwkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2k4eHhfZGFjOworCX0K KworCWlmICghY3J0Y19zdGF0ZS0+Y2xvY2tfc2V0ICYmCisJICAgICFpOXh4X2ZpbmRfYmVzdF9k cGxsKGxpbWl0LCBjcnRjX3N0YXRlLCBjcnRjX3N0YXRlLT5wb3J0X2Nsb2NrLAorCQkJCSByZWZj bGssIE5VTEwsICZjcnRjX3N0YXRlLT5kcGxsKSkgeworCQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJt LAorCQkJIkNvdWxkbid0IGZpbmQgUExMIHNldHRpbmdzIGZvciBtb2RlIVxuIik7CisJCXJldHVy biAtRUlOVkFMOworCX0KKworCWk4eHhfY29tcHV0ZV9kcGxsKGNydGMsIGNydGNfc3RhdGUsIE5V TEwpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQKK2ludGVsX2RwbGxfaW5pdF9jbG9ja19ob29r KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlpZiAoSU5URUxfR0VOKGRl dl9wcml2KSA+PSA5IHx8IEhBU19EREkoZGV2X3ByaXYpKQorCQlkZXZfcHJpdi0+ZGlzcGxheS5j cnRjX2NvbXB1dGVfY2xvY2sgPSBoc3dfY3J0Y19jb21wdXRlX2Nsb2NrOworCWVsc2UgaWYgKEhB U19QQ0hfU1BMSVQoZGV2X3ByaXYpKQorCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2NvbXB1dGVf Y2xvY2sgPSBpbGtfY3J0Y19jb21wdXRlX2Nsb2NrOworCWVsc2UgaWYgKElTX0NIRVJSWVZJRVco ZGV2X3ByaXYpKQorCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2NvbXB1dGVfY2xvY2sgPSBjaHZf Y3J0Y19jb21wdXRlX2Nsb2NrOworCWVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpKQor CQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2NvbXB1dGVfY2xvY2sgPSB2bHZfY3J0Y19jb21wdXRl X2Nsb2NrOworCWVsc2UgaWYgKElTX0c0WChkZXZfcHJpdikpCisJCWRldl9wcml2LT5kaXNwbGF5 LmNydGNfY29tcHV0ZV9jbG9jayA9IGc0eF9jcnRjX2NvbXB1dGVfY2xvY2s7CisJZWxzZSBpZiAo SVNfUElORVZJRVcoZGV2X3ByaXYpKQorCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2NvbXB1dGVf Y2xvY2sgPSBwbnZfY3J0Y19jb21wdXRlX2Nsb2NrOworCWVsc2UgaWYgKCFJU19HRU4oZGV2X3By aXYsIDIpKQorCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2NvbXB1dGVfY2xvY2sgPSBpOXh4X2Ny dGNfY29tcHV0ZV9jbG9jazsKKwllbHNlCisJCWRldl9wcml2LT5kaXNwbGF5LmNydGNfY29tcHV0 ZV9jbG9jayA9IGk4eHhfY3J0Y19jb21wdXRlX2Nsb2NrOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcGxsLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2RwbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAuLmNhZjQ2MTUwOTJlMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZHBsbC5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBNSVQgKi8KKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jw b3JhdGlvbgorICovCisKKyNpZm5kZWYgX0lOVEVMX0RQTExfSF8KKyNkZWZpbmUgX0lOVEVMX0RQ TExfSF8KKworc3RydWN0IGRwbGw7CitzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZTsKK3N0cnVjdCBp bnRlbF9jcnRjOworc3RydWN0IGludGVsX2NydGNfc3RhdGU7CisKK3ZvaWQgaW50ZWxfZHBsbF9p bml0X2Nsb2NrX2hvb2soc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKK2ludCB2 bHZfY2FsY19kcGxsX3BhcmFtcyhpbnQgcmVmY2xrLCBzdHJ1Y3QgZHBsbCAqY2xvY2spOworaW50 IHBudl9jYWxjX2RwbGxfcGFyYW1zKGludCByZWZjbGssIHN0cnVjdCBkcGxsICpjbG9jayk7Citp bnQgaTl4eF9jYWxjX2RwbGxfcGFyYW1zKGludCByZWZjbGssIHN0cnVjdCBkcGxsICpjbG9jayk7 Cit2b2lkIHZsdl9jb21wdXRlX2RwbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCisJCSAgICAg IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZyk7Cit2b2lkIGNodl9jb21wdXRl X2RwbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCisJCSAgICAgIHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpwaXBlX2NvbmZpZyk7CisKKyNlbmRpZgotLSAKMi4yNy4wCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0 CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK