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=-14.7 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT 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 7BF9EC3B190 for ; Thu, 13 Feb 2020 23:24:11 +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 5B93320848 for ; Thu, 13 Feb 2020 23:24:11 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5B93320848 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=chris-wilson.co.uk 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 E5A496E437; Thu, 13 Feb 2020 23:24:10 +0000 (UTC) Received: from fireflyinternet.com (unknown [77.68.26.236]) by gabe.freedesktop.org (Postfix) with ESMTPS id CF0426E42D for ; Thu, 13 Feb 2020 23:24:08 +0000 (UTC) X-Default-Received-SPF: pass (skip=forwardok (res=PASS)) x-ip-name=78.156.65.138; Received: from haswell.alporthouse.com (unverified [78.156.65.138]) by fireflyinternet.com (Firefly Internet (M1)) with ESMTP id 20217696-1500050 for multiple; Thu, 13 Feb 2020 23:23:40 +0000 From: Chris Wilson To: intel-gfx@lists.freedesktop.org Date: Thu, 13 Feb 2020 23:23:38 +0000 Message-Id: <20200213232338.3746869-1-chris@chris-wilson.co.uk> X-Mailer: git-send-email 2.25.0 MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH] lib: Add a YAML emitter 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 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" UHJvdmlkZSBhIGxpYnJhcnkgdG8gZ2VuZXJhdGUgY29ycmVjdCBZQU1MIGZvciB1c2UgaW4gc3Ry dWN0dXJlZCBkZWJ1Z2ZzCm9yIHNpbWlsYXIgaW5mb3JtYXRpb24gZHVtcHMuIFRoaXMgd2lsbCBi ZSB1c2VmdWwgdG8gcHVsbCBvdXIgbGFyZ2UKaW5mb3JtYXRpb24gZHVtcHMgaW50byBhIGZvcndh cmRzIGNvbXBhdGlibGUsIHBhcnNlLWFibGUgZmlsZS1mb3JtYXQgYnkKZm9yY2luZyBzb21lIHN0 cnVjdHVyZSB1cG9uIG91cnNlbHZlcyEKCk9yaWdpbmFsbHkgZnJvbSBodHRwczovL2dpdGh1Yi5j b20veWFtbC9saWJ5YW1sL2Jsb2IvbWFzdGVyL3NyYy9lbWl0dGVyLmMKdW5kZXIgYSBwZXJtaXNz aXZlIE1JVCBsaWNlbmNlLgoKU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJp cy13aWxzb24uY28udWs+CkNjOiBKYW5pIE5pa3VsYSA8amFuaS5uaWt1bGFAaW50ZWwuY29tPgpD YzogSm9vbmFzIExhaHRpbmVuIDxqb29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29tPgoKLS0t CkNvbnZlcnRpbmcgdG8ga2VybmVsZG9jIGlzIGFib3V0IHRoZSBsYXN0IG1ham9yIHRhc2suIEl0 IHVzZXMgYW4Kb3BlbmNvZGVkIHN0YWNrIHN0cnVjdCB3aGljaCBtaWdodCBiZSBuaWNlIHRvIGNv bnZlcnQgdG8gYSBsaWJyYXJ5LAptYXliZSBqdXN0IHVzZSBYQXJyYXk/CgpJdCBoYXMgYmVlbiBk b2dmb29kZWQgdG8gY29udmVydCBpOTE1X2VuZ2luZV9pbmZvIChhbmQgZnJpZW5kcykKaHR0cHM6 Ly9wYXRjaHdvcmsuZnJlZWRlc2t0b3Aub3JnL3BhdGNoLzM1MzIwOS8/c2VyaWVzPTczNDAzJnJl dj0xCi0tLQogaW5jbHVkZS9saW51eC95YW1sLWV2ZW50cy5oIHwgIDI1OSArKysrCiBpbmNsdWRl L2xpbnV4L3lhbWwuaCAgICAgICAgfCAgMTg4ICsrKwogbGliL0tjb25maWcgICAgICAgICAgICAg ICAgIHwgICAxMSArCiBsaWIvTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgICAyICsKIGxpYi95 YW1sL01ha2VmaWxlICAgICAgICAgICB8ICAgIDggKwogbGliL3lhbWwvdGVzdC15YW1sLmMgICAg ICAgIHwgIDEyMyArKwogbGliL3lhbWwveWFtbC1lbWl0dGVyLmMgICAgIHwgMjUzOSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGliL3lhbWwveWFtbC1lbWl0dGVyLmggICAg IHwgIDE0MCArKwogbGliL3lhbWwveWFtbC1ldmVudHMuYyAgICAgIHwgIDQyNCArKysrKysKIGxp Yi95YW1sL3lhbWwtc2ltcGxlLmMgICAgICB8ICAyMjcgKysrKwogMTAgZmlsZXMgY2hhbmdlZCwg MzkyMSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC95YW1s LWV2ZW50cy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC95YW1sLmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBsaWIveWFtbC9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi95 YW1sL3Rlc3QteWFtbC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3lhbWwveWFtbC1lbWl0dGVy LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIveWFtbC95YW1sLWVtaXR0ZXIuaAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGxpYi95YW1sL3lhbWwtZXZlbnRzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIv eWFtbC95YW1sLXNpbXBsZS5jCgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC95YW1sLWV2ZW50 cy5oIGIvaW5jbHVkZS9saW51eC95YW1sLWV2ZW50cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMC4uMzNkMWJiMjI3ZTY1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVk ZS9saW51eC95YW1sLWV2ZW50cy5oCkBAIC0wLDAgKzEsMjU5IEBACisvKiBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogTUlUICovCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTYgS2lyaWxs IFNpbW9ub3YKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE5IEluZ3kgZMO2dCBOZXQKKyAqIENv cHlyaWdodCAoYykgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpZm5kZWYgX19MSU5V WF9ZQU1MX0VWRU5UU19IX18KKyNkZWZpbmUgX19MSU5VWF9ZQU1MX0VWRU5UU19IX18KKworI2lu Y2x1ZGUgPGxpbnV4L2dmcC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8 bGludXgvbGlzdC5oPgorCisvKiogVGhlIHZlcnNpb24gZGlyZWN0aXZlIGRhdGEuICovCitzdHJ1 Y3QgeWFtbF92ZXJzaW9uX2RpcmVjdGl2ZSB7CisJaW50IG1ham9yOworCWludCBtaW5vcjsKK307 CisKKy8qKiBUaGUgdGFnIGRpcmVjdGl2ZSBkYXRhLiAqLworc3RydWN0IHlhbWxfdGFnX2RpcmVj dGl2ZSB7CisJY2hhciAqaGFuZGxlOworCWNoYXIgKnByZWZpeDsKK307CisKKy8qKiBUaGUgcG9p bnRlciBwb3NpdGlvbi4gKi8KK3N0cnVjdCB5YW1sX21hcmsgeworCXNpemVfdCBpbmRleDsKKwlz aXplX3QgbGluZTsKKwlzaXplX3QgY29sdW1uOworfTsKKworZW51bSB5YW1sX2V2ZW50X3R5cGUg eworCVlBTUxfTk9fRVZFTlQgPSAwLAorCisJWUFNTF9TVFJFQU1fU1RBUlRfRVZFTlQsCisJWUFN TF9TVFJFQU1fRU5EX0VWRU5ULAorCisJWUFNTF9ET0NVTUVOVF9TVEFSVF9FVkVOVCwKKwlZQU1M X0RPQ1VNRU5UX0VORF9FVkVOVCwKKworCVlBTUxfQUxJQVNfRVZFTlQsCisJWUFNTF9TQ0FMQVJf RVZFTlQsCisKKwlZQU1MX1NFUVVFTkNFX1NUQVJUX0VWRU5ULAorCVlBTUxfU0VRVUVOQ0VfRU5E X0VWRU5ULAorCisJWUFNTF9NQVBQSU5HX1NUQVJUX0VWRU5ULAorCVlBTUxfTUFQUElOR19FTkRf RVZFTlQKK307CisKK3N0cnVjdCB5YW1sX2V2ZW50IHsKKwllbnVtIHlhbWxfZXZlbnRfdHlwZSB0 eXBlOworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKKworCXVuaW9uIHsKKwkJLyoqIFRoZSBzdHJl YW0gcGFyYW1ldGVycyAoZm9yIFlBTUxfU1RSRUFNX1NUQVJUX0VWRU5UKS4gKi8KKwkJc3RydWN0 IHsKKwkJfSBzdHJlYW1fc3RhcnQ7CisKKwkJLyoqIFRoZSBkb2N1bWVudCBwYXJhbWV0ZXJzIChm b3IgWUFNTF9ET0NVTUVOVF9TVEFSVF9FVkVOVCkuICovCisJCXN0cnVjdCB7CisJCQlzdHJ1Y3Qg eWFtbF92ZXJzaW9uX2RpcmVjdGl2ZSAqdmVyc2lvbjsKKworCQkJc3RydWN0IHsKKwkJCQlzdHJ1 Y3QgeWFtbF90YWdfZGlyZWN0aXZlICpzdGFydDsKKwkJCQlzdHJ1Y3QgeWFtbF90YWdfZGlyZWN0 aXZlICplbmQ7CisJCQl9IHRhZ3M7CisKKwkJCWludCBpbXBsaWNpdDsKKwkJfSBkb2N1bWVudF9z dGFydDsKKworCQkvKiogVGhlIGRvY3VtZW50IGVuZCBwYXJhbWV0ZXJzIChmb3IgWUFNTF9ET0NV TUVOVF9FTkRfRVZFTlQpLiAqLworCQlzdHJ1Y3QgeworCQkJaW50IGltcGxpY2l0OworCQl9IGRv Y3VtZW50X2VuZDsKKworCQkvKiogVGhlIGFsaWFzIHBhcmFtZXRlcnMgKGZvciBZQU1MX0FMSUFT X0VWRU5UKS4gKi8KKwkJc3RydWN0IHsKKwkJCWNoYXIgKmFuY2hvcjsKKwkJfSBhbGlhczsKKwor CQkvKiogVGhlIHNjYWxhciBwYXJhbWV0ZXJzIChmb3IgWUFNTF9TQ0FMQVJfRVZFTlQpLiAqLwor CQlzdHJ1Y3QgeworCQkJY2hhciAqYW5jaG9yOworCQkJY2hhciAqdGFnOworCQkJY2hhciAqdmFs dWU7CisJCQlzaXplX3QgbGVuZ3RoOworCQkJaW50IHBsYWluX2ltcGxpY2l0OworCQkJaW50IHF1 b3RlZF9pbXBsaWNpdDsKKwkJCWVudW0geWFtbF9zY2FsYXJfc3R5bGUgc3R5bGU7CisJCX0gc2Nh bGFyOworCisJCS8qKiBUaGUgc2VxdWVuY2UgcGFyYW1ldGVycyAoZm9yIFlBTUxfU0VRVUVOQ0Vf U1RBUlRfRVZFTlQpLiAqLworCQlzdHJ1Y3QgeworCQkJY2hhciAqYW5jaG9yOworCQkJY2hhciAq dGFnOworCQkJaW50IGltcGxpY2l0OworCQkJZW51bSB5YW1sX3NlcXVlbmNlX3N0eWxlIHN0eWxl OworCQl9IHNlcXVlbmNlX3N0YXJ0OworCisJCS8qKiBUaGUgbWFwcGluZyBwYXJhbWV0ZXJzIChm b3IgWUFNTF9NQVBQSU5HX1NUQVJUX0VWRU5UKS4gKi8KKwkJc3RydWN0IHsKKwkJCWNoYXIgKmFu Y2hvcjsKKwkJCWNoYXIgKnRhZzsKKwkJCWludCBpbXBsaWNpdDsKKwkJCWVudW0geWFtbF9tYXBw aW5nX3N0eWxlIHN0eWxlOworCQl9IG1hcHBpbmdfc3RhcnQ7CisJfTsKKworCXN0cnVjdCB5YW1s X21hcmsgc3RhcnRfbWFyazsKKwlzdHJ1Y3QgeWFtbF9tYXJrIGVuZF9tYXJrOworfTsKKworc3Ry dWN0IHlhbWxfZXZlbnQgKnlhbWxfc3RyZWFtX3N0YXJ0X2V2ZW50X2NyZWF0ZShnZnBfdCBnZnAp Oworc3RydWN0IHlhbWxfZXZlbnQgKnlhbWxfc3RyZWFtX2VuZF9ldmVudF9jcmVhdGUoZ2ZwX3Qg Z2ZwKTsKKworLyoqCisgKiBDcmVhdGUgdGhlIERPQ1VNRU5ULVNUQVJUIGV2ZW50LgorICoKKyAq IFRoZSBAYSBpbXBsaWNpdCBhcmd1bWVudCBpcyBjb25zaWRlcmVkIGFzIGEgc3R5bGlzdGljIHBh cmFtZXRlciBhbmQgbWF5IGJlCisgKiBpZ25vcmVkIGJ5IHRoZSBlbWl0dGVyLgorICoKKyAqIEBw YXJhbVtpbl0gICAgICAgdmVyc2lvbl9kaXJlY3RpdmUgICAgICAgVGhlICVZQU1MIGRpcmVjdGl2 ZSB2YWx1ZSBvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBA YyBOVUxMLgorICogQHBhcmFtW2luXSAgICAgICB0YWdfZGlyZWN0aXZlc19zdGFydCAgICBUaGUg YmVnaW5uaW5nIG9mIHRoZSAlVEFHCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRpcmVjdGl2ZXMgbGlzdC4KKyAqIEBwYXJhbVtpbl0gICAgICAgdGFnX2RpcmVj dGl2ZXNfZW5kICAgICAgVGhlIGVuZCBvZiB0aGUgJVRBRyBkaXJlY3RpdmVzCisgKiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QuCisgKiBAcGFyYW1baW5dICAg ICAgIGltcGxpY2l0ICAgICAgICAgICAgICAgIElmIHRoZSBkb2N1bWVudCBzdGFydCBpbmRpY2F0 b3IgaXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGlj aXQuCisgKgorICogQHJldHVybnMgQGMgMSBpZiB0aGUgZnVuY3Rpb24gc3VjY2VlZGVkLCBAYyAw IG9uIGVycm9yLgorICovCitzdHJ1Y3QgeWFtbF9ldmVudCAqCit5YW1sX2RvY3VtZW50X3N0YXJ0 X2V2ZW50X2NyZWF0ZShzdHJ1Y3QgeWFtbF92ZXJzaW9uX2RpcmVjdGl2ZSAqdmVyc2lvbiwKKwkJ CQkgc3RydWN0IHlhbWxfdGFnX2RpcmVjdGl2ZSAqc3RhcnQsCisJCQkJIHN0cnVjdCB5YW1sX3Rh Z19kaXJlY3RpdmUgKmVuZCwKKwkJCQkgaW50IGltcGxpY2l0LAorCQkJCSBnZnBfdCBnZnApOwor CisvKioKKyAqIENyZWF0ZSB0aGUgRE9DVU1FTlQtRU5EIGV2ZW50LgorICoKKyAqIFRoZSBAYSBp bXBsaWNpdCBhcmd1bWVudCBpcyBjb25zaWRlcmVkIGFzIGEgc3R5bGlzdGljIHBhcmFtZXRlciBh bmQgbWF5IGJlCisgKiBpZ25vcmVkIGJ5IHRoZSBlbWl0dGVyLgorICoKKyAqIEBwYXJhbVtpbl0g ICAgICAgaW1wbGljaXQgICAgSWYgdGhlIGRvY3VtZW50IGVuZCBpbmRpY2F0b3IgaXMgaW1wbGlj aXQuCisgKgorICogQHJldHVybnMgQGMgMSBpZiB0aGUgZnVuY3Rpb24gc3VjY2VlZGVkLCBAYyAw IG9uIGVycm9yLgorICovCitzdHJ1Y3QgeWFtbF9ldmVudCAqCit5YW1sX2RvY3VtZW50X2VuZF9l dmVudF9jcmVhdGUoaW50IGltcGxpY2l0LCBnZnBfdCBnZnApOworCisvKioKKyAqIENyZWF0ZSBh biBBTElBUyBldmVudC4KKyAqCisgKiBAcGFyYW1baW5dICAgICAgIGFuY2hvciAgICAgIFRoZSBh bmNob3IgdmFsdWUuCisgKgorICogQHJldHVybnMgQGMgMSBpZiB0aGUgZnVuY3Rpb24gc3VjY2Vl ZGVkLCBAYyAwIG9uIGVycm9yLgorICovCitzdHJ1Y3QgeWFtbF9ldmVudCAqCit5YW1sX2FsaWFz X2V2ZW50X2NyZWF0ZShjb25zdCBjaGFyICphbmNob3IsIGdmcF90IGdmcCk7CisKKy8qKgorICog Q3JlYXRlIGEgU0NBTEFSIGV2ZW50LgorICoKKyAqIFRoZSBAYSBzdHlsZSBhcmd1bWVudCBtYXkg YmUgaWdub3JlZCBieSB0aGUgZW1pdHRlci4KKyAqCisgKiBFaXRoZXIgdGhlIEBhIHRhZyBhdHRy aWJ1dGUgb3Igb25lIG9mIHRoZSBAYSBwbGFpbl9pbXBsaWNpdCBhbmQKKyAqIEBhIHF1b3RlZF9p bXBsaWNpdCBmbGFncyBtdXN0IGJlIHNldC4KKyAqCisgKiBAcGFyYW1baW5dICAgICAgIGFuY2hv ciAgICAgICAgICBUaGUgc2NhbGFyIGFuY2hvciBvciBAYyBOVUxMLgorICogQHBhcmFtW2luXSAg ICAgICB0YWcgICAgICAgICAgICAgVGhlIHNjYWxhciB0YWcgb3IgQGMgTlVMTC4KKyAqIEBwYXJh bVtpbl0gICAgICAgdmFsdWUgICAgICAgICAgIFRoZSBzY2FsYXIgdmFsdWUuCisgKiBAcGFyYW1b aW5dICAgICAgIGxlbmd0aCAgICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBzY2FsYXIgdmFsdWUu CisgKiBAcGFyYW1baW5dICAgICAgIHBsYWluX2ltcGxpY2l0ICBJZiB0aGUgdGFnIG1heSBiZSBv bWl0dGVkIGZvciB0aGUgcGxhaW4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0eWxlLgorICogQHBhcmFtW2luXSAgICAgICBxdW90ZWRfaW1wbGljaXQgSWYgdGhlIHRhZyBt YXkgYmUgb21pdHRlZCBmb3IgYW55CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBub24tcGxhaW4gc3R5bGUuCisgKiBAcGFyYW1baW5dICAgICAgIHN0eWxlICAgICAgICAgICBU aGUgc2NhbGFyIHN0eWxlLgorICoKKyAqIEByZXR1cm5zIEBjIDEgaWYgdGhlIGZ1bmN0aW9uIHN1 Y2NlZWRlZCwgQGMgMCBvbiBlcnJvci4KKyAqLworc3RydWN0IHlhbWxfZXZlbnQgKgoreWFtbF9z Y2FsYXJfZXZlbnRfY3JlYXRlKGNvbnN0IGNoYXIgKmFuY2hvciwgY29uc3QgY2hhciAqdGFnLAor CQkJIGNvbnN0IGNoYXIgKnZhbHVlLCBzc2l6ZV90IGxlbmd0aCwgYm9vbCBzdGVhbCwKKwkJCSBp bnQgcGxhaW5faW1wbGljaXQsIGludCBxdW90ZWRfaW1wbGljaXQsCisJCQkgZW51bSB5YW1sX3Nj YWxhcl9zdHlsZSBzdHlsZSwKKwkJCSBnZnBfdCBnZnApOworCisvKioKKyAqIENyZWF0ZSBhIFNF UVVFTkNFLVNUQVJUIGV2ZW50LgorICoKKyAqIFRoZSBAYSBzdHlsZSBhcmd1bWVudCBtYXkgYmUg aWdub3JlZCBieSB0aGUgZW1pdHRlci4KKyAqCisgKiBFaXRoZXIgdGhlIEBhIHRhZyBhdHRyaWJ1 dGUgb3IgdGhlIEBhIGltcGxpY2l0IGZsYWcgbXVzdCBiZSBzZXQuCisgKgorICogQHBhcmFtW2lu XSAgICAgICBhbmNob3IgICAgICBUaGUgc2VxdWVuY2UgYW5jaG9yIG9yIEBjIE5VTEwuCisgKiBA cGFyYW1baW5dICAgICAgIHRhZyAgICAgICAgIFRoZSBzZXF1ZW5jZSB0YWcgb3IgQGMgTlVMTC4K KyAqIEBwYXJhbVtpbl0gICAgICAgaW1wbGljaXQgICAgSWYgdGhlIHRhZyBtYXkgYmUgb21pdHRl ZC4KKyAqIEBwYXJhbVtpbl0gICAgICAgc3R5bGUgICAgICAgVGhlIHNlcXVlbmNlIHN0eWxlLgor ICoKKyAqIEByZXR1cm5zIEBjIDEgaWYgdGhlIGZ1bmN0aW9uIHN1Y2NlZWRlZCwgQGMgMCBvbiBl cnJvci4KKyAqLworc3RydWN0IHlhbWxfZXZlbnQgKgoreWFtbF9zZXF1ZW5jZV9zdGFydF9ldmVu dF9jcmVhdGUoY29uc3QgY2hhciAqYW5jaG9yLAorCQkJCSBjb25zdCBjaGFyICp0YWcsCisJCQkJ IGludCBpbXBsaWNpdCwKKwkJCQkgZW51bSB5YW1sX3NlcXVlbmNlX3N0eWxlIHN0eWxlLAorCQkJ CSBnZnBfdCBnZnApOworCisvKioKKyAqIENyZWF0ZSBhIFNFUVVFTkNFLUVORCBldmVudC4KKyAq CisgKiBAcmV0dXJucyBAYyAxIGlmIHRoZSBmdW5jdGlvbiBzdWNjZWVkZWQsIEBjIDAgb24gZXJy b3IuCisgKi8KK3N0cnVjdCB5YW1sX2V2ZW50ICoKK3lhbWxfc2VxdWVuY2VfZW5kX2V2ZW50X2Ny ZWF0ZShnZnBfdCBnZnApOworCisvKioKKyAqIENyZWF0ZSBhIE1BUFBJTkctU1RBUlQgZXZlbnQu CisgKgorICogVGhlIEBhIHN0eWxlIGFyZ3VtZW50IG1heSBiZSBpZ25vcmVkIGJ5IHRoZSBlbWl0 dGVyLgorICoKKyAqIEVpdGhlciB0aGUgQGEgdGFnIGF0dHJpYnV0ZSBvciB0aGUgQGEgaW1wbGlj aXQgZmxhZyBtdXN0IGJlIHNldC4KKyAqCisgKiBAcGFyYW1baW5dICAgICAgIGFuY2hvciAgICAg IFRoZSBtYXBwaW5nIGFuY2hvciBvciBAYyBOVUxMLgorICogQHBhcmFtW2luXSAgICAgICB0YWcg ICAgICAgICBUaGUgbWFwcGluZyB0YWcgb3IgQGMgTlVMTC4KKyAqIEBwYXJhbVtpbl0gICAgICAg aW1wbGljaXQgICAgSWYgdGhlIHRhZyBtYXkgYmUgb21pdHRlZC4KKyAqIEBwYXJhbVtpbl0gICAg ICAgc3R5bGUgICAgICAgVGhlIG1hcHBpbmcgc3R5bGUuCisgKgorICogQHJldHVybnMgQGMgMSBp ZiB0aGUgZnVuY3Rpb24gc3VjY2VlZGVkLCBAYyAwIG9uIGVycm9yLgorICovCitzdHJ1Y3QgeWFt bF9ldmVudCAqCit5YW1sX21hcHBpbmdfc3RhcnRfZXZlbnRfY3JlYXRlKGNvbnN0IGNoYXIgKmFu Y2hvciwKKwkJCQljb25zdCBjaGFyICp0YWcsCisJCQkJaW50IGltcGxpY2l0LAorCQkJCWVudW0g eWFtbF9tYXBwaW5nX3N0eWxlIHN0eWxlLAorCQkJCWdmcF90IGdmcCk7CisKKy8qKgorICogQ3Jl YXRlIGEgTUFQUElORy1FTkQgZXZlbnQuCisgKgorICogQHJldHVybnMgQGMgMSBpZiB0aGUgZnVu Y3Rpb24gc3VjY2VlZGVkLCBAYyAwIG9uIGVycm9yLgorICovCitzdHJ1Y3QgeWFtbF9ldmVudCAq Cit5YW1sX21hcHBpbmdfZW5kX2V2ZW50X2NyZWF0ZShnZnBfdCBnZnApOworCisvKioKKyAqIEZy ZWUgYW55IG1lbW9yeSBhbGxvY2F0ZWQgZm9yIGFuIGV2ZW50IG9iamVjdC4KKyAqCisgKiBAcGFy YW1baW4sb3V0XSAgIGV2ZW50ICAgQW4gZXZlbnQgb2JqZWN0LgorICovCisKK3ZvaWQgeWFtbF9l dmVudF9kZWxldGUoc3RydWN0IHlhbWxfZXZlbnQgKmV2ZW50KTsKKworI2VuZGlmIC8qIF9fTElO VVhfWUFNTF9FVkVOVFNfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3lhbWwuaCBi L2luY2x1ZGUvbGludXgveWFtbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uYTI2MmY0YTc5M2U5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC95YW1s LmgKQEAgLTAsMCArMSwxODggQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQgKi8K Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxNiBLaXJpbGwgU2ltb25vdgorICogQ29weXJp Z2h0IChjKSAyMDE3LTIwMTkgSW5neSBkw7Z0IE5ldAorICogQ29weXJpZ2h0IChjKSAyMDIwIElu dGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1lBTUxfSF9fCisjZGVmaW5l IF9fTElOVVhfWUFNTF9IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8 bGludXgvbGlzdC5oPgorCitzdHJ1Y3Qgc2VxX2ZpbGU7CisKK3N0cnVjdCB5YW1sX2VtaXR0ZXI7 CitzdHJ1Y3QgeWFtbF9ldmVudDsKKworLyoqIFNjYWxhciBzdHlsZXMuICovCitlbnVtIHlhbWxf c2NhbGFyX3N0eWxlIHsKKwlZQU1MX0FOWV9TQ0FMQVJfU1RZTEUgPSAwLCAvKiogTGV0IHRoZSBl bWl0dGVyIGNob29zZSB0aGUgc3R5bGUuICovCisKKwlZQU1MX1BMQUlOX1NDQUxBUl9TVFlMRSwK KworCVlBTUxfU0lOR0xFX1FVT1RFRF9TQ0FMQVJfU1RZTEUsCisJWUFNTF9ET1VCTEVfUVVPVEVE X1NDQUxBUl9TVFlMRSwKKworCVlBTUxfTElURVJBTF9TQ0FMQVJfU1RZTEUsCisJWUFNTF9GT0xE RURfU0NBTEFSX1NUWUxFLAorfTsKKworLyoqIFNlcXVlbmNlIHN0eWxlcy4gKi8KK2VudW0geWFt bF9zZXF1ZW5jZV9zdHlsZSB7CisJWUFNTF9BTllfU0VRVUVOQ0VfU1RZTEUgPSAwLCAvKiogTGV0 IHRoZSBlbWl0dGVyIGNob29zZSB0aGUgc3R5bGUuICovCisKKwlZQU1MX0JMT0NLX1NFUVVFTkNF X1NUWUxFLAorCVlBTUxfRkxPV19TRVFVRU5DRV9TVFlMRSwKK307CisKKy8qKiBNYXBwaW5nIHN0 eWxlcy4gKi8KK2VudW0geWFtbF9tYXBwaW5nX3N0eWxlIHsKKwlZQU1MX0FOWV9NQVBQSU5HX1NU WUxFID0gMCwgLyoqIExldCB0aGUgZW1pdHRlciBjaG9vc2UgdGhlIHN0eWxlLiAqLworCisJWUFN TF9CTE9DS19NQVBQSU5HX1NUWUxFLAorCVlBTUxfRkxPV19NQVBQSU5HX1NUWUxFCit9OworCit0 eXBlZGVmIGludCAoKnlhbWxfd3JpdGVfdCkodm9pZCAqZGF0YSwgY29uc3QgdTggKmJ1ZmZlciwg c2l6ZV90IHNpemUpOworCisvKioKKyAqIEluaXRpYWxpemUgYW4gZW1pdHRlci4KKyAqCisgKiBU aGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBuZXcgZW1pdHRlciBvYmplY3QuICBBbiBhcHBsaWNhdGlv biBpcyByZXNwb25zaWJsZQorICogZm9yIGRlc3Ryb3lpbmcgdGhlIG9iamVjdCB1c2luZyB0aGUg eWFtbF9lbWl0dGVyX2RlbGV0ZSgpIGZ1bmN0aW9uLgorICoKKyAqIEBwYXJhbVtvdXRdICAgICAg ZW1pdHRlciAgICAgQW4gZW1wdHkgcGFyc2VyIG9iamVjdC4KKyAqCisgKiBAcmV0dXJucyBAYyAx IGlmIHRoZSBmdW5jdGlvbiBzdWNjZWVkZWQsIEBjIDAgb24gZXJyb3IuCisgKi8KK3N0cnVjdCB5 YW1sX2VtaXR0ZXIgKnlhbWxfZW1pdHRlcl9jcmVhdGUoZ2ZwX3QgZ2ZwKTsKKworLyoqCisgKiBE ZXN0cm95IGFuIGVtaXR0ZXIuCisgKgorICogQHBhcmFtW2luLG91dF0gICBlbWl0dGVyICAgICBB biBlbWl0dGVyIG9iamVjdC4KKyAqLwordm9pZCB5YW1sX2VtaXR0ZXJfZGVzdHJveShzdHJ1Y3Qg eWFtbF9lbWl0dGVyICplbWl0dGVyKTsKKworLyoqCisgKiBTZXQgYSBzdHJpbmcgb3V0cHV0Lgor ICoKKyAqIFRoZSBlbWl0dGVyIHdpbGwgd3JpdGUgdGhlIG91dHB1dCBjaGFyYWN0ZXJzIHRvIHRo ZSBAYSBvdXRwdXQgYnVmZmVyIG9mIHRoZQorICogc2l6ZSBAYSBzaXplLiAgVGhlIGVtaXR0ZXIg d2lsbCBzZXQgQGEgc2l6ZV93cml0dGVuIHRvIHRoZSBudW1iZXIgb2Ygd3JpdHRlbgorICogYnl0 ZXMuICBJZiB0aGUgYnVmZmVyIGlzIHNtYWxsZXIgdGhhbiByZXF1aXJlZCwgdGhlIGVtaXR0ZXIg cHJvZHVjZXMgdGhlCisgKiBZQU1MX1dSSVRFX0VSUk9SIGVycm9yLgorICoKKyAqIEBwYXJhbVtp bixvdXRdICAgZW1pdHRlciAgICAgICAgIEFuIGVtaXR0ZXIgb2JqZWN0LgorICogQHBhcmFtW2lu XSAgICAgICBvdXRwdXQgICAgICAgICAgQW4gb3V0cHV0IGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0g ICAgICAgc2l6ZSAgICAgICAgICAgIFRoZSBidWZmZXIgc2l6ZS4KKyAqIEBwYXJhbVtpbl0gICAg ICAgc2l6ZV93cml0dGVuICAgIFRoZSBwb2ludGVyIHRvIHNhdmUgdGhlIG51bWJlciBvZiB3cml0 dGVuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlcy4KKyAqLwordm9p ZCB5YW1sX2VtaXR0ZXJfc2V0X3N0cmluZyhzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAor CQkJICAgICB1OCAqb3V0cHV0LCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgc2l6ZV90ICpzaXplX3dy aXR0ZW4pOworCit2b2lkIHlhbWxfZW1pdHRlcl9zZXRfc2VxX2ZpbGUoc3RydWN0IHlhbWxfZW1p dHRlciAqZW1pdHRlciwKKwkJCSAgICAgICBzdHJ1Y3Qgc2VxX2ZpbGUgKmZpbGUpOworCit2b2lk IHlhbWxfZW1pdHRlcl9zZXRfb3V0cHV0KHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIsCisJ CQkgICAgIHlhbWxfd3JpdGVfdCBoYW5kbGVyLAorCQkJICAgICB2b2lkICpkYXRhKTsKKworLyoq CisgKiBTZXQgaWYgdGhlIG91dHB1dCBzaG91bGQgYmUgaW4gdGhlICJjYW5vbmljYWwiIGZvcm1h dCBhcyBpbiB0aGUgWUFNTAorICogc3BlY2lmaWNhdGlvbi4KKyAqCisgKiBAcGFyYW1baW4sb3V0 XSAgIGVtaXR0ZXIgICAgIEFuIGVtaXR0ZXIgb2JqZWN0LgorICogQHBhcmFtW2luXSAgICAgICBj YW5vbmljYWwgICBJZiB0aGUgb3V0cHV0IGlzIGNhbm9uaWNhbC4KKyAqLwordm9pZCB5YW1sX2Vt aXR0ZXJfc2V0X2Nhbm9uaWNhbChzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLCBib29sIGNh bm9uaWNhbCk7CisKKy8qKgorICogU2V0IHRoZSBpbmRlbnRhdGlvbiBpbmNyZW1lbnQuCisgKgor ICogQHBhcmFtW2luLG91dF0gICBlbWl0dGVyICAgICBBbiBlbWl0dGVyIG9iamVjdC4KKyAqIEBw YXJhbVtpbl0gICAgICAgaW5kZW50ICAgICAgVGhlIGluZGVudGF0aW9uIGluY3JlbWVudCAoMSA8 IC4gPCAxMCkuCisgKi8KK3ZvaWQgeWFtbF9lbWl0dGVyX3NldF9pbmRlbnQoc3RydWN0IHlhbWxf ZW1pdHRlciAqZW1pdHRlciwgaW50IGluZGVudCk7CisKKy8qKgorICogU2V0IHRoZSBwcmVmZXJy ZWQgbGluZSB3aWR0aC4gQGMgLTEgbWVhbnMgdW5saW1pdGVkLgorICoKKyAqIEBwYXJhbVtpbixv dXRdICAgZW1pdHRlciAgICAgQW4gZW1pdHRlciBvYmplY3QuCisgKiBAcGFyYW1baW5dICAgICAg IHdpZHRoICAgICAgIFRoZSBwcmVmZXJyZWQgbGluZSB3aWR0aC4KKyAqLwordm9pZCB5YW1sX2Vt aXR0ZXJfc2V0X3dpZHRoKHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIsIGludCB3aWR0aCk7 CisKKy8qKgorICogU2V0IGlmIHVuZXNjYXBlZCBub24tQVNDSUkgY2hhcmFjdGVycyBhcmUgYWxs b3dlZC4KKyAqCisgKiBAcGFyYW1baW4sb3V0XSAgIGVtaXR0ZXIgICAgIEFuIGVtaXR0ZXIgb2Jq ZWN0LgorICogQHBhcmFtW2luXSAgICAgICB1bmljb2RlICAgICBJZiB1bmVzY2FwZWQgVW5pY29k ZSBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkLgorICovCit2b2lkIHlhbWxfZW1pdHRlcl9zZXRfdW5p Y29kZShzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLCBib29sIHVuaWNvZGUpOworCisvKioK KyAqIEVtaXQgYW4gZXZlbnQuCisgKgorICogVGhlIGV2ZW50IG9iamVjdCBtYXkgYmUgZ2VuZXJh dGVkIHVzaW5nIHRoZSB5YW1sX3BhcnNlcl9wYXJzZSgpIGZ1bmN0aW9uLgorICogVGhlIGVtaXR0 ZXIgdGFrZXMgdGhlIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgZXZlbnQgb2JqZWN0IGFuZCBkZXN0 cm95cyBpdHMKKyAqIGNvbnRlbnQgYWZ0ZXIgaXQgaXMgZW1pdHRlZC4gVGhlIGV2ZW50IG9iamVj dCBpcyBkZXN0cm95ZWQgZXZlbiBpZiB0aGUKKyAqIGZ1bmN0aW9uIGZhaWxzLgorICoKKyAqIEBw YXJhbVtpbixvdXRdICAgZW1pdHRlciAgICAgQW4gZW1pdHRlciBvYmplY3QuCisgKiBAcGFyYW1b aW4sb3V0XSAgIGV2ZW50ICAgICAgIEFuIGV2ZW50IG9iamVjdC4KKyAqCisgKiBAcmV0dXJucyBA YyAxIGlmIHRoZSBmdW5jdGlvbiBzdWNjZWVkZWQsIEBjIDAgb24gZXJyb3IuCisgKi8KK3ZvaWQg eWFtbF9lbWl0dGVyX2VtaXQoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwgc3RydWN0IHlh bWxfZXZlbnQgKmV2ZW50KTsKKworLyoqCisgKiBGbHVzaCB0aGUgYWNjdW11bGF0ZWQgY2hhcmFj dGVycyB0byB0aGUgb3V0cHV0LgorICoKKyAqIEBwYXJhbVtpbixvdXRdICAgZW1pdHRlciAgICAg QW4gZW1pdHRlciBvYmplY3QuCisgKgorICogQHJldHVybnMgQGMgMSBpZiB0aGUgZnVuY3Rpb24g c3VjY2VlZGVkLCBAYyAwIG9uIGVycm9yLgorICovCitpbnQgeWFtbF9lbWl0dGVyX2ZsdXNoKHN0 cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIsIGNvbnN0IGNoYXIgKipwcm9ibGVtKTsKKworZ2Zw X3QgeWFtbF9lbWl0dGVyX3NldF9nZnAoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwgZ2Zw X3QgZ2ZwKTsKKworc3RydWN0IHlhbWxfZW1pdHRlciAqeWFtbF9vcGVuKHlhbWxfd3JpdGVfdCBo YW5kbGVyLCB2b2lkICpkYXRhKTsKK3N0cnVjdCB5YW1sX2VtaXR0ZXIgKnlhbWxfb3Blbl9maWxl KHN0cnVjdCBzZXFfZmlsZSAqbSk7CitzdHJ1Y3QgeWFtbF9lbWl0dGVyICp5YW1sX29wZW5fc3Ry aW5nKGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgc2l6ZV90ICp3cml0dGVuKTsKKwordm9pZCBfX3lh bWxfbWFwcGluZ19zdGFydChzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkJICBlbnVt IHlhbWxfbWFwcGluZ19zdHlsZSBzdHlsZSk7CitzdGF0aWMgaW5saW5lIHZvaWQgeWFtbF9tYXBw aW5nX3N0YXJ0KHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIpCit7CisJX195YW1sX21hcHBp bmdfc3RhcnQoZW1pdHRlciwgWUFNTF9BTllfTUFQUElOR19TVFlMRSk7Cit9Cit2b2lkIHlhbWxf bWFwcGluZ19lbmQoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlcik7CisKK3ZvaWQgX195YW1s X3NlcXVlbmNlX3N0YXJ0KHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIsCisJCQkgICBlbnVt IHlhbWxfc2VxdWVuY2Vfc3R5bGUgc3R5bGUpOworc3RhdGljIGlubGluZSB2b2lkIHlhbWxfc2Vx dWVuY2Vfc3RhcnQoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlcikKK3sKKwlfX3lhbWxfc2Vx dWVuY2Vfc3RhcnQoZW1pdHRlciwgWUFNTF9BTllfU0VRVUVOQ0VfU1RZTEUpOworfQordm9pZCB5 YW1sX3NlcXVlbmNlX2VuZChzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyKTsKKworX19wcmlu dGYoMiwgMykKK3ZvaWQgeWFtbF9hbGlhc19wcmludGYoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1p dHRlciwgY29uc3QgY2hhciAqZm10LCAuLi4pOworCitfX3ByaW50ZigyLCAzKQordm9pZCB5YW1s X3NjYWxhcl9wcmludGYoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwgY29uc3QgY2hhciAq Zm10LCAuLi4pOworCitfX3ByaW50ZigzLCA0KQordm9pZCB5YW1sX3BhaXJfcHJpbnRmKHN0cnVj dCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIsCisJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0 IGNoYXIgKmZtdCwgLi4uKTsKKwordm9pZCB5YW1sX2FzY2lpODVfZW5jb2RlKHN0cnVjdCB5YW1s X2VtaXR0ZXIgKmVtaXR0ZXIsCisJCQkgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbiwgYm9v bCBjb21wcmVzc2VkKTsKKworaW50IHlhbWxfY2xvc2Uoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1p dHRlciwgY29uc3QgY2hhciAqKnByb2JsZW0pOworCisjZW5kaWYgLyogX19MSU5VWF9ZQU1MX0hf XyAqLwpkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcgYi9saWIvS2NvbmZpZwppbmRleCAwY2Y4NzVm ZDYyN2MuLmRhMTUwNjhkNjBiNSAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcKKysrIGIvbGliL0tj b25maWcKQEAgLTY0OCw2ICs2NDgsMTcgQEAgY29uZmlnIE9CSkFHRwogY29uZmlnIFNUUklOR19T RUxGVEVTVAogCXRyaXN0YXRlICJUZXN0IHN0cmluZyBmdW5jdGlvbnMiCiAKK2NvbmZpZyBZQU1M CisJdHJpc3RhdGUKKworY29uZmlnIFlBTUxfRU1JVFRFUgorCXRyaXN0YXRlCisJc2VsZWN0IFlB TUwKKworY29uZmlnIFRFU1RfWUFNTAorCXRyaXN0YXRlICJTbWFsbCB0ZXN0IG1vZHVsZSBmb3Ig bGlieWFtbCIKKwlkZXBlbmRzIG9uIFlBTUwKKwogZW5kbWVudQogCiBjb25maWcgR0VORVJJQ19J T1JFTUFQCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUgYi9saWIvTWFrZWZpbGUKaW5kZXggNWQ2 NDg5MGQ2YjZhLi42ODA1ZTU2ZDJkYjggMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZQorKysgYi9s aWIvTWFrZWZpbGUKQEAgLTI0MSw2ICsyNDEsOCBAQCBvYmotJChDT05GSUdfQVNOMSkgKz0gYXNu MV9kZWNvZGVyLm8KIAogb2JqLSQoQ09ORklHX0ZPTlRfU1VQUE9SVCkgKz0gZm9udHMvCiAKK29i ai0kKENPTkZJR19ZQU1MKSArPSB5YW1sLworCiBob3N0cHJvZ3MJOj0gZ2VuX2NyYzMydGFibGUK IGhvc3Rwcm9ncwkrPSBnZW5fY3JjNjR0YWJsZQogY2xlYW4tZmlsZXMJOj0gY3JjMzJ0YWJsZS5o CmRpZmYgLS1naXQgYS9saWIveWFtbC9NYWtlZmlsZSBiL2xpYi95YW1sL01ha2VmaWxlCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZjVlOGMxNzk1OTE0Ci0tLSAvZGV2 L251bGwKKysrIGIvbGliL3lhbWwvTWFrZWZpbGUKQEAgLTAsMCArMSw4IEBACisjIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisKK3lhbWwtb2JqcyA9IHlhbWwtZXZlbnRzLm8KK3lh bWwtb2Jqcy0kKENPTkZJR19ZQU1MX0VNSVRURVIpICs9IHlhbWwtZW1pdHRlci5vIHlhbWwtc2lt cGxlLm8KK3lhbWwtb2JqcyArPSAkKHlhbWwtb2Jqcy1tKQorCitvYmotJChDT05GSUdfWUFNTCkg Kz0geWFtbC5vCitvYmotJChDT05GSUdfVEVTVF9ZQU1MKSArPSB0ZXN0LXlhbWwubwpkaWZmIC0t Z2l0IGEvbGliL3lhbWwvdGVzdC15YW1sLmMgYi9saWIveWFtbC90ZXN0LXlhbWwuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjVjM2M3YTkyODg1OQotLS0gL2Rldi9u dWxsCisrKyBiL2xpYi95YW1sL3Rlc3QteWFtbC5jCkBAIC0wLDAgKzEsMTIzIEBACisvLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMCisvKgorICogQ29weXJpZ2h0IChjKSAyMDIwIEludGVs IENvcnBvcmF0aW9uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8 bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgveWFtbC5oPgorI2luY2x1ZGUgPGxpbnV4 L3lhbWwtZXZlbnRzLmg+CisKK3N0cnVjdCBkZW50cnkgKnJvb3Q7CisKKyNpZiBJU19FTkFCTEVE KENPTkZJR19ZQU1MX0VNSVRURVIpCitzdGF0aWMgaW50IHlfZXZlbnRzX3Nob3coc3RydWN0IHNl cV9maWxlICptLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXI7 CisJc3RydWN0IHlhbWxfZXZlbnQgKmV2ZW50OworCWNvbnN0IGNoYXIgKnByb2JsZW07CisKKwll bWl0dGVyID0geWFtbF9lbWl0dGVyX2NyZWF0ZShHRlBfS0VSTkVMKTsKKwlpZiAoIWVtaXR0ZXIp CisJCXJldHVybiAtRU5PTUVNOworCisJeWFtbF9lbWl0dGVyX3NldF9zZXFfZmlsZShlbWl0dGVy LCBtKTsKKworCWV2ZW50ID0geWFtbF9zdHJlYW1fc3RhcnRfZXZlbnRfY3JlYXRlKEdGUF9LRVJO RUwpOworCXlhbWxfZW1pdHRlcl9lbWl0KGVtaXR0ZXIsIGV2ZW50KTsKKworCWV2ZW50ID0geWFt bF9kb2N1bWVudF9zdGFydF9ldmVudF9jcmVhdGUoTlVMTCwgTlVMTCwgTlVMTCwgdHJ1ZSwKKwkJ CQkJCSBHRlBfS0VSTkVMKTsKKwl5YW1sX2VtaXR0ZXJfZW1pdChlbWl0dGVyLCBldmVudCk7CisK KwlldmVudCA9IHlhbWxfbWFwcGluZ19zdGFydF9ldmVudF9jcmVhdGUoTlVMTCwgTlVMTCwgdHJ1 ZSwKKwkJCQkJCVlBTUxfRkxPV19NQVBQSU5HX1NUWUxFLAorCQkJCQkJR0ZQX0tFUk5FTCk7CisJ eWFtbF9lbWl0dGVyX2VtaXQoZW1pdHRlciwgZXZlbnQpOworCisJZXZlbnQgPSB5YW1sX3NjYWxh cl9ldmVudF9jcmVhdGUoTlVMTCwgTlVMTCwKKwkJCQkJICJHZW5lcmFsIiwgLTEsIGZhbHNlLAor CQkJCQkgdHJ1ZSwgdHJ1ZSwgWUFNTF9QTEFJTl9TQ0FMQVJfU1RZTEUsCisJCQkJCSBHRlBfS0VS TkVMKTsKKwl5YW1sX2VtaXR0ZXJfZW1pdChlbWl0dGVyLCBldmVudCk7CisKKwlldmVudCA9IHlh bWxfc2NhbGFyX2V2ZW50X2NyZWF0ZShOVUxMLCBOVUxMLAorCQkJCQkgIktlbm9iaSIsIC0xLCBm YWxzZSwKKwkJCQkJIHRydWUsIHRydWUsIFlBTUxfUExBSU5fU0NBTEFSX1NUWUxFLAorCQkJCQkg R0ZQX0tFUk5FTCk7CisJeWFtbF9lbWl0dGVyX2VtaXQoZW1pdHRlciwgZXZlbnQpOworCisJZXZl bnQgPSB5YW1sX21hcHBpbmdfZW5kX2V2ZW50X2NyZWF0ZShHRlBfS0VSTkVMKTsKKwl5YW1sX2Vt aXR0ZXJfZW1pdChlbWl0dGVyLCBldmVudCk7CisKKwlldmVudCA9IHlhbWxfZG9jdW1lbnRfZW5k X2V2ZW50X2NyZWF0ZSh0cnVlLCBHRlBfS0VSTkVMKTsKKwl5YW1sX2VtaXR0ZXJfZW1pdChlbWl0 dGVyLCBldmVudCk7CisKKwlldmVudCA9IHlhbWxfc3RyZWFtX2VuZF9ldmVudF9jcmVhdGUoR0ZQ X0tFUk5FTCk7CisJeWFtbF9lbWl0dGVyX2VtaXQoZW1pdHRlciwgZXZlbnQpOworCisJaWYgKHlh bWxfZW1pdHRlcl9mbHVzaChlbWl0dGVyLCAmcHJvYmxlbSkpCisJCXByX2VycigidGVzdC15YW1s IGV2ZW50cyBmYWlsZWQ6ICVzXG4iLCBwcm9ibGVtKTsKKworCXlhbWxfZW1pdHRlcl9kZXN0cm95 KGVtaXR0ZXIpOworCXJldHVybiAwOworfQorREVGSU5FX1NIT1dfQVRUUklCVVRFKHlfZXZlbnRz KTsKKworc3RhdGljIGludCB5X3NpbXBsZV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAq ZGF0YSkKK3sKKwlzdHJ1Y3QgeWFtbF9lbWl0dGVyICp5YW1sOworCWNvbnN0IGNoYXIgKnByb2Js ZW07CisKKwl5YW1sID0geWFtbF9vcGVuX2ZpbGUobSk7CisJaWYgKCF5YW1sKQorCQlyZXR1cm4g LUVOT01FTTsKKworCXlhbWxfbWFwcGluZ19zdGFydCh5YW1sKTsgeworCQl5YW1sX3NjYWxhcl9w cmludGYoeWFtbCwgIm1hcCIpOworCQl5YW1sX21hcHBpbmdfc3RhcnQoeWFtbCk7IHsKKwkJCXlh bWxfc2NhbGFyX3ByaW50Zih5YW1sLCAiSGVsbG8iKTsKKwkJCXlhbWxfbWFwcGluZ19zdGFydCh5 YW1sKTsgeworCQkJCXlhbWxfcGFpcl9wcmludGYoeWFtbCwKKwkJCQkJCSAiR2VuZXJhbCIsICIl cyIsICJLZW5vYmkiKTsKKwkJCX0geWFtbF9tYXBwaW5nX2VuZCh5YW1sKTsKKwkJfSB5YW1sX21h cHBpbmdfZW5kKHlhbWwpOworCisJCXlhbWxfc2NhbGFyX3ByaW50Zih5YW1sLCAic2VxdWVuY2Ui KTsKKwkJeWFtbF9zZXF1ZW5jZV9zdGFydCh5YW1sKTsgeworCQkJeWFtbF9zY2FsYXJfcHJpbnRm KHlhbWwsICIxIik7CisJCQl5YW1sX3NjYWxhcl9wcmludGYoeWFtbCwgIjIiKTsKKwkJCXlhbWxf c2NhbGFyX3ByaW50Zih5YW1sLCAiMyIpOworCQkJeWFtbF9hc2NpaTg1X2VuY29kZSh5YW1sLCAi NCIsIDIsIGZhbHNlKTsKKwkJfSB5YW1sX3NlcXVlbmNlX2VuZCh5YW1sKTsKKwl9IHlhbWxfbWFw cGluZ19lbmQoeWFtbCk7CisKKwlpZiAoeWFtbF9jbG9zZSh5YW1sLCAmcHJvYmxlbSkpCisJCXBy X2VycigidGVzdC15YW1sIHNpbXBsZSBmYWlsZWQ6ICVzXG4iLCBwcm9ibGVtKTsKKworCXJldHVy biAwOworfQorREVGSU5FX1NIT1dfQVRUUklCVVRFKHlfc2ltcGxlKTsKKyNlbmRpZgorCitzdGF0 aWMgaW50IF9faW5pdCB0ZXN0X3lhbWxfaW5pdCh2b2lkKQoreworCXJvb3QgPSBkZWJ1Z2ZzX2Ny ZWF0ZV9kaXIoImxpYnlhbWwiLCBOVUxMKTsKKwlpZiAoIXJvb3QpCisJCXJldHVybiAtRU5PTUVN OworCisjaWYgSVNfRU5BQkxFRChDT05GSUdfWUFNTF9FTUlUVEVSKQorCWRlYnVnZnNfY3JlYXRl X2ZpbGUoImVtaXQtZXZlbnRzIiwgMDQ0NCwgcm9vdCwgTlVMTCwgJnlfZXZlbnRzX2ZvcHMpOwor CWRlYnVnZnNfY3JlYXRlX2ZpbGUoImVtaXQtc2ltcGxlIiwgMDQ0NCwgcm9vdCwgTlVMTCwgJnlf c2ltcGxlX2ZvcHMpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19l eGl0IHRlc3RfeWFtbF9leGl0KHZvaWQpCit7CisJZGVidWdmc19yZW1vdmUocm9vdCk7Cit9CisK K21vZHVsZV9pbml0KHRlc3RfeWFtbF9pbml0KTsKK21vZHVsZV9leGl0KHRlc3RfeWFtbF9leGl0 KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2xpYi95YW1sL3lhbWwtZW1p dHRlci5jIGIvbGliL3lhbWwveWFtbC1lbWl0dGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi5hNTgxMTYwNDU2MjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIveWFt bC95YW1sLWVtaXR0ZXIuYwpAQCAtMCwwICsxLDI1MzkgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBNSVQKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxNiBLaXJpbGwgU2ltb25v dgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTkgSW5neSBkw7Z0IE5ldAorICogQ29weXJpZ2h0 IChjKSAyMDIwIEludGVsIENvcnBvcmF0aW9uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5o PgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNp bmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVk ZSA8bGludXgveWFtbC5oPgorI2luY2x1ZGUgPGxpbnV4L3lhbWwtZXZlbnRzLmg+CisKKyNpbmNs dWRlICJ5YW1sLWVtaXR0ZXIuaCIKKworI2RlZmluZSBJTklUSUFMX1NUQUNLX1NJWkUgIDE2CisK K3N0cnVjdCB5YW1sX3N0cmluZyB7CisJY29uc3QgY2hhciAqc3RhcnQ7CisJY29uc3QgY2hhciAq ZW5kOworCWNvbnN0IGNoYXIgKnBvczsKK307CisKKyNkZWZpbmUgU1RSSU5HX0lOSVQoc3RyLCBs ZW4pIHsgKHN0ciksIChzdHIpICsgKGxlbiksIChzdHIpIH0KKworI2RlZmluZSBZQU1MX1NUUklO RyhuYW1lLCBzdHIpIFwKKwlzdHJ1Y3QgeWFtbF9zdHJpbmcgbmFtZSA9IFNUUklOR19JTklUKHN0 ciwgc3RybGVuKHN0cikpCisKKyNkZWZpbmUgQ0hFQ0tfQVQocywgb2N0ZXQsIG9mZnNldCkJCQkJ CVwKKwkoKHMpLnBvc1tvZmZzZXRdID09IChjaGFyKShvY3RldCkpCisjZGVmaW5lIENIRUNLKHMs IG9jdGV0KSAoQ0hFQ0tfQVQoKHMpLCAob2N0ZXQpLCAwKSkKKworI2RlZmluZSBJU19BTFBIQV9B VChzLCBvZmZzZXQpCQkJCQkJXAorCShpc2FsbnVtKChzKS5wb3Nbb2Zmc2V0XSkgfHwJCQkJCVwK KwkgKHMpLnBvc1tvZmZzZXRdID09ICdfJyB8fAkJCQkJXAorCSAocykucG9zW29mZnNldF0gPT0g Jy0nKQorI2RlZmluZSBJU19BTFBIQShzKQlJU19BTFBIQV9BVCgocyksIDApCisKKyNkZWZpbmUg SVNfQVNDSUlfQVQocywgb2Zmc2V0KSAoKHMpLnBvc1tvZmZzZXRdIDw9ICdceDdGJykKKyNkZWZp bmUgSVNfQVNDSUkocykgICAgSVNfQVNDSUlfQVQoKHMpLCAwKQorCisjZGVmaW5lIElTX1BSSU5U QUJMRV9BVChzLCBvZmZzZXQpIGlzcHJpbnQoKHMpLnBvc1tvZmZzZXRdKQorI2RlZmluZSBJU19Q UklOVEFCTEUocykgICAgSVNfUFJJTlRBQkxFX0FUKChzKSwgMCkKKworI2RlZmluZSBJU19aX0FU KHMsIG9mZnNldCkgICAgQ0hFQ0tfQVQoKHMpLCAnXDAnLCAob2Zmc2V0KSkKKyNkZWZpbmUgSVNf WihzKSAgICBJU19aX0FUKChzKSwgMCkKKworI2RlZmluZSBJU19CT01fQVQocywgb2Zmc2V0KQkJ CQkJCVwKKwkoQ0hFQ0tfQVQoKHMpLCAnXHhFRicsIChvZmZzZXQpICsgMCkgJiYJCQkJXAorCSBD SEVDS19BVCgocyksICdceEJCJywgKG9mZnNldCkgKyAxKSAmJgkJCQlcCisJIENIRUNLX0FUKChz KSwgJ1x4QkYnLCAob2Zmc2V0KSArIDIpKSAgLyogQk9NICgjeEZFRkYpICovCisjZGVmaW5lIElT X0JPTShzKSAgSVNfQk9NX0FUKHMsIDApCisKKyNkZWZpbmUgSVNfU1BBQ0VfQVQocywgb2Zmc2V0 KSAgQ0hFQ0tfQVQoKHMpLCAnICcsIChvZmZzZXQpKQorI2RlZmluZSBJU19TUEFDRShzKQlJU19T UEFDRV9BVCgocyksIDApCisKKyNkZWZpbmUgSVNfVEFCX0FUKHMsIG9mZnNldCkgICAgQ0hFQ0tf QVQoKHMpLCAnXHQnLCAob2Zmc2V0KSkKKyNkZWZpbmUgSVNfVEFCKHMpCUlTX1RBQl9BVCgocyks IDApCisKKyNkZWZpbmUgSVNfQkxBTktfQVQocywgb2Zmc2V0KQkJCQkJCVwKKwkoSVNfU1BBQ0Vf QVQoKHMpLCAob2Zmc2V0KSkgfHwgSVNfVEFCX0FUKChzKSwgKG9mZnNldCkpKQorI2RlZmluZSBJ U19CTEFOSyhzKQlJU19CTEFOS19BVCgocyksIDApCisKKyNkZWZpbmUgSVNfQlJFQUtfQVQocywg b2Zmc2V0KQkJCQkJCVwKKwkoQ0hFQ0tfQVQoKHMpLCAnXHInLCAob2Zmc2V0KSkgfHwgLyogQ1Ig KCN4RCkqLwkJCVwKKwkgQ0hFQ0tfQVQoKHMpLCAnXG4nLCAob2Zmc2V0KSkgfHwgLyogTEYgKCN4 QSkgKi8JCVwKKwkgKENIRUNLX0FUKChzKSwgJ1x4QzInLCAob2Zmc2V0KSkgJiYJCQkJXAorCSAg Q0hFQ0tfQVQoKHMpLCAnXHg4NScsIChvZmZzZXQpICsgMSkpIHx8IC8qIE5FTCAoI3g4NSkgKi8J XAorCSAoQ0hFQ0tfQVQoKHMpLCAnXHhFMicsIChvZmZzZXQpKSAmJgkJCQlcCisJICBDSEVDS19B VCgocyksICdceDgwJywgKG9mZnNldCkgKyAxKSAmJgkJCVwKKwkgIENIRUNLX0FUKChzKSwgJ1x4 QTgnLCAob2Zmc2V0KSArIDIpKSB8fCAgIC8qIExTICgjeDIwMjgpICovCVwKKwkgKENIRUNLX0FU KChzKSwgJ1x4RTInLCAob2Zmc2V0KSkgJiYJCQkJXAorCSAgQ0hFQ0tfQVQoKHMpLCAnXHg4MCcs IChvZmZzZXQpICsgMSkgJiYJCQlcCisJICAgIENIRUNLX0FUKChzKSwgJ1x4QTknLCAob2Zmc2V0 KSArIDIpKSkgIC8qIFBTICgjeDIwMjkpICovCisjZGVmaW5lIElTX0JSRUFLKHMpCUlTX0JSRUFL X0FUKChzKSwgMCkKKworI2RlZmluZSBJU19DUkxGX0FUKHMsIG9mZnNldCkJCQkJCQlcCisJKENI RUNLX0FUKChzKSwgJ1xyJywgKG9mZnNldCkpICYmIENIRUNLX0FUKChzKSwgJ1xuJywgKG9mZnNl dCkgKyAxKSkKKyNkZWZpbmUgSVNfQ1JMRihzKQlJU19DUkxGX0FUKChzKSwgMCkKKworI2RlZmlu ZSBJU19CUkVBS1pfQVQocywgb2Zmc2V0KQkJCQkJCVwKKwkoSVNfQlJFQUtfQVQoKHMpLCAob2Zm c2V0KSkgfHwgSVNfWl9BVCgocyksIChvZmZzZXQpKSkKKyNkZWZpbmUgSVNfQlJFQUtaKHMpCUlT X0JSRUFLWl9BVCgocyksIDApCisKKyNkZWZpbmUgSVNfU1BBQ0VaX0FUKHMsIG9mZnNldCkJCQkJ CQlcCisJKElTX1NQQUNFX0FUKChzKSwgKG9mZnNldCkpIHx8IElTX0JSRUFLWl9BVCgocyksIChv ZmZzZXQpKSkKKyNkZWZpbmUgSVNfU1BBQ0VaKHMpCUlTX1NQQUNFWl9BVCgocyksIDApCisKKyNk ZWZpbmUgSVNfQkxBTktaX0FUKHMsIG9mZnNldCkJCQkJCQlcCisJKElTX0JMQU5LX0FUKChzKSwg KG9mZnNldCkpIHx8IElTX0JSRUFLWl9BVCgocyksIChvZmZzZXQpKSkKKyNkZWZpbmUgSVNfQkxB TktaKHMpCUlTX0JMQU5LWl9BVCgocyksIDApCisKK3N0YXRpYyBpbmxpbmUgaW50IF9fdXRmOF93 aWR0aChjb25zdCBzdHJ1Y3QgeWFtbF9zdHJpbmcgKnMsIGludCBpZHgpCit7CisJcmV0dXJuICgo cy0+cG9zW2lkeF0gJiAweDgwKSA9PSAweDAwID8gMSA6CisJCShzLT5wb3NbaWR4XSAmIDB4RTAp ID09IDB4QzAgPyAyIDoKKwkJKHMtPnBvc1tpZHhdICYgMHhGMCkgPT0gMHhFMCA/IDMgOgorCQko cy0+cG9zW2lkeF0gJiAweEY4KSA9PSAweEYwID8gNCA6CisJCTApOworfQorCitzdGF0aWMgaW5s aW5lIGludCB1dGY4X3dpZHRoKGNvbnN0IHN0cnVjdCB5YW1sX3N0cmluZyAqcykKK3sKKwlyZXR1 cm4gX191dGY4X3dpZHRoKHMsIDApOworfQorCisjZGVmaW5lIEFEVkFOQ0UocykJKChzKS5wb3Mg Kz0gdXRmOF93aWR0aCgoJnMpKSkKKworc3RhdGljIGJvb2wgeWFtbF9zdGFja19leHRlbmQodm9p ZCAqKnN0YXJ0LCB2b2lkICoqdG9wLCB2b2lkICoqZW5kKTsKKworI2RlZmluZSBFTVBUWShjb250 ZXh0LCBzdGFjaykgKChzdGFjaykuc3RhcnQgPT0gKHN0YWNrKS50b3ApCisKKyNkZWZpbmUgUFVT SChjb250ZXh0LCBzdGFjaywgdmFsdWUpCQkJCQlcCisJKCgoc3RhY2spLnRvcCAhPSAoc3RhY2sp LmVuZCB8fAkJCQkJXAorCSAgIXlhbWxfc3RhY2tfZXh0ZW5kKCh2b2lkICoqKSYoc3RhY2spLnN0 YXJ0LAkJCVwKKwkJCSAgICAgKHZvaWQgKiopJihzdGFjaykudG9wLCAodm9pZCAqKikmKHN0YWNr KS5lbmQpKSA/IFwKKwkgKCooKHN0YWNrKS50b3ArKykgPSB2YWx1ZSwgMCkgOgkJCQlcCisJICgo Y29udGV4dCktPmVycm5vID0gLUVOT01FTSkpCisKKyNkZWZpbmUgUE9QKGNvbnRleHQsIHN0YWNr KSAoKigtLShzdGFjaykudG9wKSkKKworc3RhdGljIGludAorX19zZXRfZXJyb3Ioc3RydWN0IHlh bWxfZW1pdHRlciAqZW1pdHRlciwgY29uc3QgY2hhciAqcHJvYmxlbSwgaW50IGVycikKK3sKKwlX QVJOX09OKGVtaXR0ZXItPmVycm5vKTsKKworCWVtaXR0ZXItPmVycm5vID0gZXJyOworCWVtaXR0 ZXItPnByb2JsZW0gPSBwcm9ibGVtOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBz ZXRfZXJyb3Ioc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwgY29uc3QgY2hhciAqcHJvYmxl bSkKK3sKKwlyZXR1cm4gX19zZXRfZXJyb3IoZW1pdHRlciwgcHJvYmxlbSwgRUlOVkFMKTsKK30K Kworc3RhdGljIGludCBmbHVzaChzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyKQoreworCWlu dCBlcnI7CisKKwlpZiAodW5saWtlbHkoZW1pdHRlci0+ZXJybm8pKQorCQlyZXR1cm4gZW1pdHRl ci0+ZXJybm87CisKKwllbWl0dGVyLT5idWYubGFzdCA9IGVtaXR0ZXItPmJ1Zi5wb3M7CisJZW1p dHRlci0+YnVmLnBvcyA9IGVtaXR0ZXItPmJ1Zi5zdGFydDsKKworCWlmIChlbWl0dGVyLT5idWYu c3RhcnQgPT0gZW1pdHRlci0+YnVmLmxhc3QpCisJCXJldHVybiAwOworCisJZXJyID0gZW1pdHRl ci0+d3JpdGVfaGFuZGxlcihlbWl0dGVyLT53cml0ZV9kYXRhLAorCQkJCSAgICAgZW1pdHRlci0+ YnVmLnN0YXJ0LAorCQkJCSAgICAgZW1pdHRlci0+YnVmLmxhc3QgLSBlbWl0dGVyLT5idWYuc3Rh cnQpOworCWlmICh1bmxpa2VseShlcnIgPCAwKSkKKwkJcmV0dXJuIF9fc2V0X2Vycm9yKGVtaXR0 ZXIsICJ3cml0ZSBlcnJvciIsIGVycik7CisKKwllbWl0dGVyLT5idWYubGFzdCA9IGVtaXR0ZXIt PmJ1Zi5zdGFydDsKKwllbWl0dGVyLT5idWYucG9zID0gZW1pdHRlci0+YnVmLnN0YXJ0OworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50IG1heWJlX2ZsdXNoKHN0cnVjdCB5YW1sX2VtaXR0ZXIg KmVtaXR0ZXIsIGludCBsZW4pCit7CisJaWYgKGVtaXR0ZXItPmJ1Zi5wb3MgKyBsZW4gPCBlbWl0 dGVyLT5idWYuZW5kKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBmbHVzaChlbWl0dGVyKTsKK30K Kworc3RhdGljIGludCBwdXQoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwgY29uc3QgY2hh ciB2YWx1ZSkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gbWF5YmVfZmx1c2goZW1pdHRlciwgNSk7 CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCSplbWl0dGVyLT5idWYucG9zKysgPSB2YWx1 ZTsKKwllbWl0dGVyLT5jb2x1bW4rKzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwdXRf YnJlYWsoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlcikKK3sKKwlpbnQgZXJyOworCisJZXJy ID0gIHB1dChlbWl0dGVyLCAnXG4nKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZW1p dHRlci0+Y29sdW1uID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwdXRfY2hhcihz dHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLCBzdHJ1Y3QgeWFtbF9zdHJpbmcgKnN0cikKK3sK Kwljb25zdCBpbnQgd2lkdGggPSB1dGY4X3dpZHRoKHN0cik7CisJaW50IGVycjsKKworCWVyciA9 IG1heWJlX2ZsdXNoKGVtaXR0ZXIsIHdpZHRoKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwor CisJbWVtY3B5KGVtaXR0ZXItPmJ1Zi5wb3MsIHN0ci0+cG9zLCB3aWR0aCk7CisJZW1pdHRlci0+ YnVmLnBvcyArPSB3aWR0aDsKKwlzdHItPnBvcyArPSB3aWR0aDsKKworCWVtaXR0ZXItPmNvbHVt bisrOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB1dF9jaGFyX2JyZWFrKHN0cnVjdCB5 YW1sX2VtaXR0ZXIgKmVtaXR0ZXIsIHN0cnVjdCB5YW1sX3N0cmluZyAqc3RyKQoreworCWNvbnN0 IGludCB3aWR0aCA9IHV0Zjhfd2lkdGgoc3RyKTsKKwlpbnQgZXJyOworCisJZXJyID0gbWF5YmVf Zmx1c2goZW1pdHRlciwgd2lkdGgpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwltZW1j cHkoZW1pdHRlci0+YnVmLnBvcywgc3RyLT5wb3MsIHdpZHRoKTsKKwllbWl0dGVyLT5idWYucG9z ICs9IHdpZHRoOworCXN0ci0+cG9zICs9IHdpZHRoOworCisJZW1pdHRlci0+Y29sdW1uID0gMDsK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB5YW1sX2V2ZW50ICpuZXh0X2V2ZW50KGNv bnN0IHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIpCit7CisJcmV0dXJuIGxpc3RfZmlyc3Rf ZW50cnkoJmVtaXR0ZXItPmV2ZW50cywgc3RydWN0IHlhbWxfZXZlbnQsIGxpbmspOworfQorCitz dGF0aWMgYm9vbCBuZWVkX21vcmVfZXZlbnRzKHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIp Cit7CisJc3RydWN0IHlhbWxfZXZlbnQgKmV2ZW50OworCWludCBhY2M7CisKKwlpZiAobGlzdF9l bXB0eSgmZW1pdHRlci0+ZXZlbnRzKSkKKwkJcmV0dXJuIHRydWU7CisKKwlhY2MgPSAwOworCXN3 aXRjaCAobmV4dF9ldmVudChlbWl0dGVyKS0+dHlwZSkgeworCWNhc2UgWUFNTF9ET0NVTUVOVF9T VEFSVF9FVkVOVDoKKwkJYWNjID0gMTsKKwkJYnJlYWs7CisJY2FzZSBZQU1MX1NFUVVFTkNFX1NU QVJUX0VWRU5UOgorCQlhY2MgPSAyOworCQlicmVhazsKKwljYXNlIFlBTUxfTUFQUElOR19TVEFS VF9FVkVOVDoKKwkJYWNjID0gMzsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gZmFs c2U7CisJfQorCisJaWYgKGVtaXR0ZXItPm51bV9ldmVudHMgPiBhY2MpCisJCXJldHVybiBmYWxz ZTsKKworCWFjYyA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmVtaXR0ZXItPmV2 ZW50cywgbGluaykgeworCQlzd2l0Y2ggKGV2ZW50LT50eXBlKSB7CisJCWNhc2UgWUFNTF9TVFJF QU1fU1RBUlRfRVZFTlQ6CisJCWNhc2UgWUFNTF9ET0NVTUVOVF9TVEFSVF9FVkVOVDoKKwkJY2Fz ZSBZQU1MX1NFUVVFTkNFX1NUQVJUX0VWRU5UOgorCQljYXNlIFlBTUxfTUFQUElOR19TVEFSVF9F VkVOVDoKKwkJCWFjYysrOworCQkJYnJlYWs7CisKKwkJY2FzZSBZQU1MX1NUUkVBTV9FTkRfRVZF TlQ6CisJCWNhc2UgWUFNTF9ET0NVTUVOVF9FTkRfRVZFTlQ6CisJCWNhc2UgWUFNTF9TRVFVRU5D RV9FTkRfRVZFTlQ6CisJCWNhc2UgWUFNTF9NQVBQSU5HX0VORF9FVkVOVDoKKwkJCWFjYy0tOwor CQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKCFhY2MpCisJ CQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQKK2Fu YWx5emVfdmVyc2lvbl9kaXJlY3RpdmUoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwKKwkJ CSAgc3RydWN0IHlhbWxfdmVyc2lvbl9kaXJlY3RpdmUgdmVyc2lvbikKK3sKKwlpZiAodmVyc2lv bi5tYWpvciAhPSAxIHx8IHZlcnNpb24ubWlub3IgIT0gMSkKKwkJcmV0dXJuIHNldF9lcnJvcihl bWl0dGVyLCAiaW5jb21wYXRpYmxlICVZQU1MIGRpcmVjdGl2ZSIpOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQKK2FuYWx5emVfdGFnX2RpcmVjdGl2ZShzdHJ1Y3QgeWFtbF9lbWl0dGVy ICplbWl0dGVyLAorCQkgICAgICBzdHJ1Y3QgeWFtbF90YWdfZGlyZWN0aXZlIHRhZykKK3sKKwlZ QU1MX1NUUklORyhoYW5kbGUsIHRhZy5oYW5kbGUpOworCVlBTUxfU1RSSU5HKHByZWZpeCwgdGFn LnByZWZpeCk7CisKKwlpZiAoaGFuZGxlLnN0YXJ0ID09IGhhbmRsZS5lbmQpCisJCXJldHVybiBz ZXRfZXJyb3IoZW1pdHRlciwgInRhZyBoYW5kbGUgbXVzdCBub3QgYmUgZW1wdHkiKTsKKworCWlm IChoYW5kbGUuc3RhcnRbMF0gIT0gJyEnKQorCQlyZXR1cm4gc2V0X2Vycm9yKGVtaXR0ZXIsICJ0 YWcgaGFuZGxlIG11c3Qgc3RhcnQgd2l0aCAnISciKTsKKworCWlmIChoYW5kbGUuZW5kWy0xXSAh PSAnIScpCisJCXJldHVybiBzZXRfZXJyb3IoZW1pdHRlciwgInRhZyBoYW5kbGUgbXVzdCBlbmQg d2l0aCAnISciKTsKKworCWhhbmRsZS5wb3MrKzsKKworCXdoaWxlIChoYW5kbGUucG9zIDwgaGFu ZGxlLmVuZCAtIDEpIHsKKwkJaWYgKCFJU19BTFBIQShoYW5kbGUpKQorCQkJcmV0dXJuIHNldF9l cnJvcihlbWl0dGVyLAorCQkJCQkgInRhZyBoYW5kbGUgbXVzdCBjb250YWluIGFscGhhbnVtZXJp Y2FsIGNoYXJhY3RlcnMgb25seSIpOworCisJCUFEVkFOQ0UoaGFuZGxlKTsKKwl9CisKKwlpZiAo cHJlZml4LnN0YXJ0ID09IHByZWZpeC5lbmQpCisJCXJldHVybiBzZXRfZXJyb3IoZW1pdHRlciwg InRhZyBwcmVmaXggbXVzdCBub3QgYmUgZW1wdHkiKTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50CithbmFseXplX2FuY2hvcihzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLCBjb25z dCBjaGFyICphbmNob3IsIGludCBhbGlhcykKK3sKKwlZQU1MX1NUUklORyhzdHJpbmcsIGFuY2hv cik7CisKKwlpZiAoc3RyaW5nLnN0YXJ0ID09IHN0cmluZy5lbmQpIHsKKwkJcmV0dXJuIHNldF9l cnJvcihlbWl0dGVyLCBhbGlhcyA/CisJCQkJICJhbGlhcyB2YWx1ZSBtdXN0IG5vdCBiZSBlbXB0 eSIgOgorCQkJCSAiYW5jaG9yIHZhbHVlIG11c3Qgbm90IGJlIGVtcHR5Iik7CisJfQorCisJd2hp bGUgKHN0cmluZy5wb3MgIT0gc3RyaW5nLmVuZCkgeworCQlpZiAoIUlTX0FMUEhBKHN0cmluZykp IHsKKwkJCXJldHVybiBzZXRfZXJyb3IoZW1pdHRlciwgYWxpYXMgPworCQkJCQkgImFsaWFzIHZh bHVlIG11c3QgY29udGFpbiBhbHBoYW51bWVyaWNhbCBjaGFyYWN0ZXJzIG9ubHkiIDoKKwkJCQkJ ICJhbmNob3IgdmFsdWUgbXVzdCBjb250YWluIGFscGhhbnVtZXJpY2FsIGNoYXJhY3RlcnMgb25s eSIpOworCQl9CisJCUFEVkFOQ0Uoc3RyaW5nKTsKKwl9CisKKwllbWl0dGVyLT5hbmNob3JfZGF0 YS5hbmNob3IgPSBzdHJpbmcuc3RhcnQ7CisJZW1pdHRlci0+YW5jaG9yX2RhdGEuYW5jaG9yX2xl bmd0aCA9IHN0cmluZy5lbmQgLSBzdHJpbmcuc3RhcnQ7CisJZW1pdHRlci0+YW5jaG9yX2RhdGEu YWxpYXMgPSBhbGlhczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbmFseXplX3RhZyhz dHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLCBjb25zdCBjaGFyICpzdHIpCit7CisJWUFNTF9T VFJJTkcoc3RyaW5nLCBzdHIpOworCXN0cnVjdCB5YW1sX3RhZ19kaXJlY3RpdmUgKnRhZzsKKwor CWlmIChzdHJpbmcuc3RhcnQgPT0gc3RyaW5nLmVuZCkKKwkJcmV0dXJuIHNldF9lcnJvcihlbWl0 dGVyLCAidGFnIHZhbHVlIG11c3Qgbm90IGJlIGVtcHR5Iik7CisKKwlmb3IgKHRhZyA9IGVtaXR0 ZXItPnRhZ3Muc3RhcnQ7IHRhZyAhPSBlbWl0dGVyLT50YWdzLnRvcDsgdGFnKyspIHsKKwkJc2l6 ZV90IHByZWZpeF9sZW5ndGggPSBzdHJsZW4odGFnLT5wcmVmaXgpOworCisJCWlmIChwcmVmaXhf bGVuZ3RoIDwgc3RyaW5nLmVuZCAtIHN0cmluZy5zdGFydCAmJgorCQkgICAgc3RybmNtcCh0YWct PnByZWZpeCwgc3RyaW5nLnN0YXJ0LCBwcmVmaXhfbGVuZ3RoKSA9PSAwKSB7CisJCQllbWl0dGVy LT50YWdfZGF0YS5oYW5kbGUgPSB0YWctPmhhbmRsZTsKKwkJCWVtaXR0ZXItPnRhZ19kYXRhLmhh bmRsZV9sZW5ndGggPSBzdHJsZW4odGFnLT5oYW5kbGUpOworCQkJZW1pdHRlci0+dGFnX2RhdGEu c3VmZml4ID0gc3RyaW5nLnN0YXJ0ICsgcHJlZml4X2xlbmd0aDsKKwkJCWVtaXR0ZXItPnRhZ19k YXRhLnN1ZmZpeF9sZW5ndGggPQorCQkJCShzdHJpbmcuZW5kIC0gc3RyaW5nLnN0YXJ0KSAtIHBy ZWZpeF9sZW5ndGg7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWVtaXR0ZXItPnRhZ19kYXRh LnN1ZmZpeCA9IHN0cmluZy5zdGFydDsKKwllbWl0dGVyLT50YWdfZGF0YS5zdWZmaXhfbGVuZ3Ro ID0gc3RyaW5nLmVuZCAtIHN0cmluZy5zdGFydDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dAorYW5hbHl6ZV9zY2FsYXIoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwgY29uc3QgY2hh ciAqdmFsdWUsIHNpemVfdCBsZW5ndGgpCit7CisJc3RydWN0IHlhbWxfc3RyaW5nIHN0cmluZyA9 IFNUUklOR19JTklUKHZhbHVlLCBsZW5ndGgpOworCisJaW50IGJsb2NrX2luZGljYXRvcnMgPSAw OworCWludCBmbG93X2luZGljYXRvcnMgPSAwOworCWludCBsaW5lX2JyZWFrcyA9IDA7CisJaW50 IHNwZWNpYWxfY2hhcmFjdGVycyA9IDA7CisKKwlpbnQgbGVhZGluZ19zcGFjZSA9IDA7CisJaW50 IGxlYWRpbmdfYnJlYWsgPSAwOworCWludCB0cmFpbGluZ19zcGFjZSA9IDA7CisJaW50IHRyYWls aW5nX2JyZWFrID0gMDsKKwlpbnQgYnJlYWtfc3BhY2UgPSAwOworCWludCBzcGFjZV9icmVhayA9 IDA7CisKKwlpbnQgcHJlY2VkZWRfYnlfd2hpdGVzcGFjZSA9IDA7CisJaW50IGZvbGxvd2VkX2J5 X3doaXRlc3BhY2UgPSAwOworCWludCBwcmV2aW91c19zcGFjZSA9IDA7CisJaW50IHByZXZpb3Vz X2JyZWFrID0gMDsKKworCWVtaXR0ZXItPnNjYWxhcl9kYXRhLnZhbHVlID0gdmFsdWU7CisJZW1p dHRlci0+c2NhbGFyX2RhdGEubGVuZ3RoID0gbGVuZ3RoOworCisJaWYgKHN0cmluZy5zdGFydCA9 PSBzdHJpbmcuZW5kKSB7CisJCWVtaXR0ZXItPnNjYWxhcl9kYXRhLm11bHRpbGluZSA9IDA7CisJ CWVtaXR0ZXItPnNjYWxhcl9kYXRhLmZsb3dfcGxhaW5fYWxsb3dlZCA9IDA7CisJCWVtaXR0ZXIt PnNjYWxhcl9kYXRhLmJsb2NrX3BsYWluX2FsbG93ZWQgPSAxOworCQllbWl0dGVyLT5zY2FsYXJf ZGF0YS5zaW5nbGVfcXVvdGVkX2FsbG93ZWQgPSAxOworCQllbWl0dGVyLT5zY2FsYXJfZGF0YS5i bG9ja19hbGxvd2VkID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKChDSEVDS19BVChzdHJp bmcsICctJywgMCkgJiYKKwkgICAgIENIRUNLX0FUKHN0cmluZywgJy0nLCAxKSAmJgorCSAgICAg Q0hFQ0tfQVQoc3RyaW5nLCAnLScsIDIpKSB8fAorCSAgICAoQ0hFQ0tfQVQoc3RyaW5nLCAnLics IDApICYmCisJICAgICBDSEVDS19BVChzdHJpbmcsICcuJywgMSkgJiYKKwkgICAgIENIRUNLX0FU KHN0cmluZywgJy4nLCAyKSkpIHsKKwkJYmxvY2tfaW5kaWNhdG9ycyA9IDE7CisJCWZsb3dfaW5k aWNhdG9ycyA9IDE7CisJfQorCisJcHJlY2VkZWRfYnlfd2hpdGVzcGFjZSA9IDE7CisJZm9sbG93 ZWRfYnlfd2hpdGVzcGFjZSA9IElTX0JMQU5LWl9BVChzdHJpbmcsIHV0Zjhfd2lkdGgoJnN0cmlu ZykpOworCisJd2hpbGUgKHN0cmluZy5wb3MgIT0gc3RyaW5nLmVuZCkgeworCQlpZiAoc3RyaW5n LnN0YXJ0ID09IHN0cmluZy5wb3MpIHsKKwkJCWlmIChDSEVDSyhzdHJpbmcsICcjJykgfHwgQ0hF Q0soc3RyaW5nLCAnLCcpIHx8CisJCQkgICAgQ0hFQ0soc3RyaW5nLCAnWycpIHx8IENIRUNLKHN0 cmluZywgJ10nKSB8fAorCQkJICAgIENIRUNLKHN0cmluZywgJ3snKSB8fCBDSEVDSyhzdHJpbmcs ICd9JykgfHwKKwkJCSAgICBDSEVDSyhzdHJpbmcsICcmJykgfHwgQ0hFQ0soc3RyaW5nLCAnKicp IHx8CisJCQkgICAgQ0hFQ0soc3RyaW5nLCAnIScpIHx8IENIRUNLKHN0cmluZywgJ3wnKSB8fAor CQkJICAgIENIRUNLKHN0cmluZywgJz4nKSB8fCBDSEVDSyhzdHJpbmcsICdcJycpIHx8CisJCQkg ICAgQ0hFQ0soc3RyaW5nLCAnIicpIHx8IENIRUNLKHN0cmluZywgJyUnKSB8fAorCQkJICAgIENI RUNLKHN0cmluZywgJ0AnKSB8fCBDSEVDSyhzdHJpbmcsICdgJykpIHsKKwkJCQlmbG93X2luZGlj YXRvcnMgPSAxOworCQkJCWJsb2NrX2luZGljYXRvcnMgPSAxOworCQkJfQorCisJCQlpZiAoQ0hF Q0soc3RyaW5nLCAnPycpIHx8IENIRUNLKHN0cmluZywgJzonKSkgeworCQkJCWZsb3dfaW5kaWNh dG9ycyA9IDE7CisJCQkJaWYgKGZvbGxvd2VkX2J5X3doaXRlc3BhY2UpCisJCQkJCWJsb2NrX2lu ZGljYXRvcnMgPSAxOworCQkJfQorCisJCQlpZiAoQ0hFQ0soc3RyaW5nLCAnLScpICYmIGZvbGxv d2VkX2J5X3doaXRlc3BhY2UpIHsKKwkJCQlmbG93X2luZGljYXRvcnMgPSAxOworCQkJCWJsb2Nr X2luZGljYXRvcnMgPSAxOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKENIRUNLKHN0cmluZywg JywnKSB8fCBDSEVDSyhzdHJpbmcsICc/JykgfHwKKwkJCSAgICBDSEVDSyhzdHJpbmcsICdbJykg fHwgQ0hFQ0soc3RyaW5nLCAnXScpIHx8CisJCQkgICAgQ0hFQ0soc3RyaW5nLCAneycpIHx8IENI RUNLKHN0cmluZywgJ30nKSkKKwkJCQlmbG93X2luZGljYXRvcnMgPSAxOworCisJCQlpZiAoQ0hF Q0soc3RyaW5nLCAnOicpKSB7CisJCQkJZmxvd19pbmRpY2F0b3JzID0gMTsKKwkJCQlpZiAoZm9s bG93ZWRfYnlfd2hpdGVzcGFjZSkKKwkJCQkJYmxvY2tfaW5kaWNhdG9ycyA9IDE7CisJCQl9CisK KwkJCWlmIChDSEVDSyhzdHJpbmcsICcjJykgJiYgcHJlY2VkZWRfYnlfd2hpdGVzcGFjZSkgewor CQkJCWZsb3dfaW5kaWNhdG9ycyA9IDE7CisJCQkJYmxvY2tfaW5kaWNhdG9ycyA9IDE7CisJCQl9 CisJCX0KKworCQlpZiAoIUlTX1BSSU5UQUJMRShzdHJpbmcpIHx8CisJCSAgICAoIUlTX0FTQ0lJ KHN0cmluZykgJiYgIWVtaXR0ZXItPnVuaWNvZGUpKSB7CisJCQlzcGVjaWFsX2NoYXJhY3RlcnMg PSAxOworCQl9CisKKwkJaWYgKElTX0JSRUFLKHN0cmluZykpCisJCQlsaW5lX2JyZWFrcyA9IDE7 CisKKwkJaWYgKElTX1NQQUNFKHN0cmluZykpIHsKKwkJCWlmIChzdHJpbmcuc3RhcnQgPT0gc3Ry aW5nLnBvcykKKwkJCQlsZWFkaW5nX3NwYWNlID0gMTsKKworCQkJaWYgKHN0cmluZy5wb3MgKyB1 dGY4X3dpZHRoKCZzdHJpbmcpID09IHN0cmluZy5lbmQpCisJCQkJdHJhaWxpbmdfc3BhY2UgPSAx OworCisJCQlpZiAocHJldmlvdXNfYnJlYWspCisJCQkJYnJlYWtfc3BhY2UgPSAxOworCisJCQlw cmV2aW91c19zcGFjZSA9IDE7CisJCQlwcmV2aW91c19icmVhayA9IDA7CisJCX0gZWxzZSBpZiAo SVNfQlJFQUsoc3RyaW5nKSkgeworCQkJaWYgKHN0cmluZy5zdGFydCA9PSBzdHJpbmcucG9zKQor CQkJCWxlYWRpbmdfYnJlYWsgPSAxOworCisJCQlpZiAoc3RyaW5nLnBvcyArIHV0Zjhfd2lkdGgo JnN0cmluZykgPT0gc3RyaW5nLmVuZCkKKwkJCQl0cmFpbGluZ19icmVhayA9IDE7CisKKwkJCWlm IChwcmV2aW91c19zcGFjZSkKKwkJCQlzcGFjZV9icmVhayA9IDE7CisKKwkJCXByZXZpb3VzX3Nw YWNlID0gMDsKKwkJCXByZXZpb3VzX2JyZWFrID0gMTsKKwkJfSBlbHNlIHsKKwkJCXByZXZpb3Vz X3NwYWNlID0gMDsKKwkJCXByZXZpb3VzX2JyZWFrID0gMDsKKwkJfQorCisJCXByZWNlZGVkX2J5 X3doaXRlc3BhY2UgPSBJU19CTEFOS1ooc3RyaW5nKTsKKwkJQURWQU5DRShzdHJpbmcpOworCQlp ZiAoc3RyaW5nLnBvcyAhPSBzdHJpbmcuZW5kKQorCQkJZm9sbG93ZWRfYnlfd2hpdGVzcGFjZSA9 CisJCQkJSVNfQkxBTktaX0FUKHN0cmluZywgdXRmOF93aWR0aCgmc3RyaW5nKSk7CisJfQorCisJ ZW1pdHRlci0+c2NhbGFyX2RhdGEubXVsdGlsaW5lID0gbGluZV9icmVha3M7CisKKwllbWl0dGVy LT5zY2FsYXJfZGF0YS5mbG93X3BsYWluX2FsbG93ZWQgPSAxOworCWVtaXR0ZXItPnNjYWxhcl9k YXRhLmJsb2NrX3BsYWluX2FsbG93ZWQgPSAxOworCWVtaXR0ZXItPnNjYWxhcl9kYXRhLnNpbmds ZV9xdW90ZWRfYWxsb3dlZCA9IDE7CisJZW1pdHRlci0+c2NhbGFyX2RhdGEuYmxvY2tfYWxsb3dl ZCA9IDE7CisKKwlpZiAobGVhZGluZ19zcGFjZSB8fAorCSAgICBsZWFkaW5nX2JyZWFrIHx8CisJ ICAgIHRyYWlsaW5nX3NwYWNlIHx8CisJICAgIHRyYWlsaW5nX2JyZWFrKSB7CisJCWVtaXR0ZXIt PnNjYWxhcl9kYXRhLmZsb3dfcGxhaW5fYWxsb3dlZCA9IDA7CisJCWVtaXR0ZXItPnNjYWxhcl9k YXRhLmJsb2NrX3BsYWluX2FsbG93ZWQgPSAwOworCX0KKworCWlmICh0cmFpbGluZ19zcGFjZSkK KwkJZW1pdHRlci0+c2NhbGFyX2RhdGEuYmxvY2tfYWxsb3dlZCA9IDA7CisKKwlpZiAoYnJlYWtf c3BhY2UpIHsKKwkJZW1pdHRlci0+c2NhbGFyX2RhdGEuZmxvd19wbGFpbl9hbGxvd2VkID0gMDsK KwkJZW1pdHRlci0+c2NhbGFyX2RhdGEuYmxvY2tfcGxhaW5fYWxsb3dlZCA9IDA7CisJCWVtaXR0 ZXItPnNjYWxhcl9kYXRhLnNpbmdsZV9xdW90ZWRfYWxsb3dlZCA9IDA7CisJfQorCisJaWYgKHNw YWNlX2JyZWFrIHx8IHNwZWNpYWxfY2hhcmFjdGVycykgeworCQllbWl0dGVyLT5zY2FsYXJfZGF0 YS5mbG93X3BsYWluX2FsbG93ZWQgPSAwOworCQllbWl0dGVyLT5zY2FsYXJfZGF0YS5ibG9ja19w bGFpbl9hbGxvd2VkID0gMDsKKwkJZW1pdHRlci0+c2NhbGFyX2RhdGEuc2luZ2xlX3F1b3RlZF9h bGxvd2VkID0gMDsKKwkJZW1pdHRlci0+c2NhbGFyX2RhdGEuYmxvY2tfYWxsb3dlZCA9IDA7CisJ fQorCisJaWYgKGxpbmVfYnJlYWtzKSB7CisJCWVtaXR0ZXItPnNjYWxhcl9kYXRhLmZsb3dfcGxh aW5fYWxsb3dlZCA9IDA7CisJCWVtaXR0ZXItPnNjYWxhcl9kYXRhLmJsb2NrX3BsYWluX2FsbG93 ZWQgPSAwOworCX0KKworCWlmIChmbG93X2luZGljYXRvcnMpCisJCWVtaXR0ZXItPnNjYWxhcl9k YXRhLmZsb3dfcGxhaW5fYWxsb3dlZCA9IDA7CisKKwlpZiAoYmxvY2tfaW5kaWNhdG9ycykKKwkJ ZW1pdHRlci0+c2NhbGFyX2RhdGEuYmxvY2tfcGxhaW5fYWxsb3dlZCA9IDA7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludAorYW5hbHl6ZV9ldmVudChzdHJ1Y3QgeWFtbF9lbWl0dGVyICpl bWl0dGVyLCBjb25zdCBzdHJ1Y3QgeWFtbF9ldmVudCAqZXZlbnQpCit7CisJaW50IGVycjsKKwor CWVtaXR0ZXItPmFuY2hvcl9kYXRhLmFuY2hvciA9IE5VTEw7CisJZW1pdHRlci0+YW5jaG9yX2Rh dGEuYW5jaG9yX2xlbmd0aCA9IDA7CisJZW1pdHRlci0+dGFnX2RhdGEuaGFuZGxlID0gTlVMTDsK KwllbWl0dGVyLT50YWdfZGF0YS5oYW5kbGVfbGVuZ3RoID0gMDsKKwllbWl0dGVyLT50YWdfZGF0 YS5zdWZmaXggPSBOVUxMOworCWVtaXR0ZXItPnRhZ19kYXRhLnN1ZmZpeF9sZW5ndGggPSAwOwor CWVtaXR0ZXItPnNjYWxhcl9kYXRhLnZhbHVlID0gTlVMTDsKKwllbWl0dGVyLT5zY2FsYXJfZGF0 YS5sZW5ndGggPSAwOworCisJc3dpdGNoIChldmVudC0+dHlwZSkgeworCWNhc2UgWUFNTF9BTElB U19FVkVOVDoKKwkJcmV0dXJuIGFuYWx5emVfYW5jaG9yKGVtaXR0ZXIsIGV2ZW50LT5hbGlhcy5h bmNob3IsIDEpOworCisJY2FzZSBZQU1MX1NDQUxBUl9FVkVOVDoKKwkJaWYgKGV2ZW50LT5zY2Fs YXIuYW5jaG9yKSB7CisJCQllcnIgPSBhbmFseXplX2FuY2hvcihlbWl0dGVyLCBldmVudC0+c2Nh bGFyLmFuY2hvciwgMCk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCX0KKworCQlp ZiAoZXZlbnQtPnNjYWxhci50YWcgJiYKKwkJICAgIChlbWl0dGVyLT5jYW5vbmljYWwgfHwKKwkJ ICAgICAoIWV2ZW50LT5zY2FsYXIucGxhaW5faW1wbGljaXQgJiYKKwkJICAgICAgIWV2ZW50LT5z Y2FsYXIucXVvdGVkX2ltcGxpY2l0KSkpIHsKKwkJCWVyciA9IGFuYWx5emVfdGFnKGVtaXR0ZXIs IGV2ZW50LT5zY2FsYXIudGFnKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQor CisJCXJldHVybiBhbmFseXplX3NjYWxhcihlbWl0dGVyLAorCQkJCSAgICAgIGV2ZW50LT5zY2Fs YXIudmFsdWUsCisJCQkJICAgICAgZXZlbnQtPnNjYWxhci5sZW5ndGgpOworCisJY2FzZSBZQU1M X1NFUVVFTkNFX1NUQVJUX0VWRU5UOgorCQlpZiAoZXZlbnQtPnNlcXVlbmNlX3N0YXJ0LmFuY2hv cikgeworCQkJZXJyID0gYW5hbHl6ZV9hbmNob3IoZW1pdHRlciwKKwkJCQkJICAgICBldmVudC0+ c2VxdWVuY2Vfc3RhcnQuYW5jaG9yLCAwKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsK KwkJfQorCisJCWlmIChldmVudC0+c2VxdWVuY2Vfc3RhcnQudGFnICYmCisJCSAgICAoZW1pdHRl ci0+Y2Fub25pY2FsIHx8ICFldmVudC0+c2VxdWVuY2Vfc3RhcnQuaW1wbGljaXQpKSB7CisJCQll cnIgPSBhbmFseXplX3RhZyhlbWl0dGVyLAorCQkJCQkgIGV2ZW50LT5zZXF1ZW5jZV9zdGFydC50 YWcpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJcmV0dXJuIDA7CisK KwljYXNlIFlBTUxfTUFQUElOR19TVEFSVF9FVkVOVDoKKwkJaWYgKGV2ZW50LT5tYXBwaW5nX3N0 YXJ0LmFuY2hvcikgeworCQkJZXJyID0gYW5hbHl6ZV9hbmNob3IoZW1pdHRlciwKKwkJCQkJICAg ICBldmVudC0+bWFwcGluZ19zdGFydC5hbmNob3IsIDApOworCQkJaWYgKGVycikKKwkJCQlyZXR1 cm4gZXJyOworCQl9CisKKwkJaWYgKGV2ZW50LT5tYXBwaW5nX3N0YXJ0LnRhZyAmJgorCQkgICAg KGVtaXR0ZXItPmNhbm9uaWNhbCB8fCAhZXZlbnQtPm1hcHBpbmdfc3RhcnQuaW1wbGljaXQpKSB7 CisJCQllcnIgPSBhbmFseXplX3RhZyhlbWl0dGVyLCBldmVudC0+bWFwcGluZ19zdGFydC50YWcp OworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJcmV0dXJuIDA7CisKKwlk ZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBib29sIGNoZWNrX2VtcHR5X2Rv Y3VtZW50KGNvbnN0IHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIpCit7CisJcmV0dXJuIGZh bHNlOworfQorCitzdGF0aWMgYm9vbCBjaGVja19lbXB0eV9zZXF1ZW5jZShjb25zdCBzdHJ1Y3Qg eWFtbF9lbWl0dGVyICplbWl0dGVyKQoreworCWNvbnN0IHN0cnVjdCB5YW1sX2V2ZW50ICpldmVu dDsKKworCWlmIChlbWl0dGVyLT5udW1fZXZlbnRzIDwgMikKKwkJcmV0dXJuIGZhbHNlOworCisJ ZXZlbnQgPSBuZXh0X2V2ZW50KGVtaXR0ZXIpOworCXJldHVybiAoZXZlbnQtPnR5cGUgPT0gWUFN TF9TRVFVRU5DRV9TVEFSVF9FVkVOVCAmJgorCQlsaXN0X25leHRfZW50cnkoZXZlbnQsIGxpbmsp LT50eXBlID09IFlBTUxfU0VRVUVOQ0VfRU5EX0VWRU5UKTsKK30KKworc3RhdGljIGJvb2wgY2hl Y2tfZW1wdHlfbWFwcGluZyhjb25zdCBzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyKQorewor CWNvbnN0IHN0cnVjdCB5YW1sX2V2ZW50ICpldmVudDsKKworCWlmIChlbWl0dGVyLT5udW1fZXZl bnRzIDwgMikKKwkJcmV0dXJuIGZhbHNlOworCisJZXZlbnQgPSBuZXh0X2V2ZW50KGVtaXR0ZXIp OworCXJldHVybiAoZXZlbnQtPnR5cGUgPT0gWUFNTF9NQVBQSU5HX1NUQVJUX0VWRU5UICYmCisJ CWxpc3RfbmV4dF9lbnRyeShldmVudCwgbGluayktPnR5cGUgPT0gWUFNTF9NQVBQSU5HX0VORF9F VkVOVCk7Cit9CisKK3N0YXRpYyBib29sIGNoZWNrX3NpbXBsZV9rZXkoY29uc3Qgc3RydWN0IHlh bWxfZW1pdHRlciAqZW1pdHRlcikKK3sKKwljb25zdCBzdHJ1Y3QgeWFtbF9ldmVudCAqZXZlbnQg PSBuZXh0X2V2ZW50KGVtaXR0ZXIpOworCXNpemVfdCBsZW5ndGggPSAwOworCisJc3dpdGNoIChl dmVudC0+dHlwZSkgeworCWNhc2UgWUFNTF9BTElBU19FVkVOVDoKKwkJbGVuZ3RoICs9IGVtaXR0 ZXItPmFuY2hvcl9kYXRhLmFuY2hvcl9sZW5ndGg7CisJCWJyZWFrOworCisJY2FzZSBZQU1MX1ND QUxBUl9FVkVOVDoKKwkJaWYgKGVtaXR0ZXItPnNjYWxhcl9kYXRhLm11bHRpbGluZSkKKwkJCXJl dHVybiBmYWxzZTsKKworCQlsZW5ndGggKz0KKwkJCWVtaXR0ZXItPmFuY2hvcl9kYXRhLmFuY2hv cl9sZW5ndGggKworCQkJZW1pdHRlci0+dGFnX2RhdGEuaGFuZGxlX2xlbmd0aCArCisJCQllbWl0 dGVyLT50YWdfZGF0YS5zdWZmaXhfbGVuZ3RoICsKKwkJCWVtaXR0ZXItPnNjYWxhcl9kYXRhLmxl bmd0aDsKKwkJYnJlYWs7CisKKwljYXNlIFlBTUxfU0VRVUVOQ0VfU1RBUlRfRVZFTlQ6CisJCWlm ICghY2hlY2tfZW1wdHlfc2VxdWVuY2UoZW1pdHRlcikpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJ bGVuZ3RoICs9CisJCQllbWl0dGVyLT5hbmNob3JfZGF0YS5hbmNob3JfbGVuZ3RoICsKKwkJCWVt aXR0ZXItPnRhZ19kYXRhLmhhbmRsZV9sZW5ndGggKworCQkJZW1pdHRlci0+dGFnX2RhdGEuc3Vm Zml4X2xlbmd0aDsKKwkJYnJlYWs7CisKKwljYXNlIFlBTUxfTUFQUElOR19TVEFSVF9FVkVOVDoK KwkJaWYgKCFjaGVja19lbXB0eV9tYXBwaW5nKGVtaXR0ZXIpKQorCQkJcmV0dXJuIGZhbHNlOwor CisJCWxlbmd0aCArPQorCQkJZW1pdHRlci0+YW5jaG9yX2RhdGEuYW5jaG9yX2xlbmd0aCArCisJ CQllbWl0dGVyLT50YWdfZGF0YS5oYW5kbGVfbGVuZ3RoICsKKwkJCWVtaXR0ZXItPnRhZ19kYXRh LnN1ZmZpeF9sZW5ndGg7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOwor CX0KKworCXJldHVybiBsZW5ndGggPD0gMTI4OworfQorCitzdGF0aWMgaW50IGluY3JlYXNlX2lu ZGVudChzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkJICAgYm9vbCBmbG93LCBib29s IGluZGVudGxlc3MpCit7CisJaW50IGVycjsKKworCWVyciA9IFBVU0goZW1pdHRlciwgZW1pdHRl ci0+aW5kZW50cywgZW1pdHRlci0+aW5kZW50KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwor CisJaWYgKGVtaXR0ZXItPmluZGVudCA8IDApCisJCWVtaXR0ZXItPmluZGVudCA9IGZsb3cgPyBl bWl0dGVyLT5iZXN0X2luZGVudCA6IDA7CisJZWxzZSBpZiAoIWluZGVudGxlc3MpCisJCWVtaXR0 ZXItPmluZGVudCArPSBlbWl0dGVyLT5iZXN0X2luZGVudDsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IHdyaXRlX2luZGVudChzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyKQorewor CWludCBpbmRlbnQgPSAoZW1pdHRlci0+aW5kZW50ID49IDApID8gZW1pdHRlci0+aW5kZW50IDog MDsKKwlpbnQgZXJyOworCisJaWYgKCFlbWl0dGVyLT5pbmRlbnRpb24gfHwKKwkgICAgZW1pdHRl ci0+Y29sdW1uID4gaW5kZW50IHx8CisJICAgIChlbWl0dGVyLT5jb2x1bW4gPT0gaW5kZW50ICYm ICFlbWl0dGVyLT53aGl0ZXNwYWNlKSkgeworCQllcnIgPSBwdXRfYnJlYWsoZW1pdHRlcik7CisJ CWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXdoaWxlIChlbWl0dGVyLT5jb2x1bW4g PCBpbmRlbnQpIHsKKwkJZXJyID0gcHV0KGVtaXR0ZXIsICcgJyk7CisJCWlmIChlcnIpCisJCQly ZXR1cm4gZXJyOworCX0KKworCWVtaXR0ZXItPndoaXRlc3BhY2UgPSAxOworCWVtaXR0ZXItPmlu ZGVudGlvbiA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfaW5kaWNhdG9y KHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIsCisJCQkgICBjb25zdCBjaGFyICppbmRpY2F0 b3IsIGludCBuZWVkX3doaXRlc3BhY2UsCisJCQkgICBpbnQgaXNfd2hpdGVzcGFjZSwgaW50IGlz X2luZGVudGlvbikKK3sKKwlZQU1MX1NUUklORyhzdHJpbmcsIGluZGljYXRvcik7CisJaW50IGVy cjsKKworCWlmIChuZWVkX3doaXRlc3BhY2UgJiYgIWVtaXR0ZXItPndoaXRlc3BhY2UpIHsKKwkJ ZXJyID0gcHV0KGVtaXR0ZXIsICcgJyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0K KworCXdoaWxlIChzdHJpbmcucG9zICE9IHN0cmluZy5lbmQpIHsKKwkJZXJyID0gcHV0X2NoYXIo ZW1pdHRlciwgJnN0cmluZyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWVt aXR0ZXItPndoaXRlc3BhY2UgPSBpc193aGl0ZXNwYWNlOworCWVtaXR0ZXItPmluZGVudGlvbiA9 IChlbWl0dGVyLT5pbmRlbnRpb24gJiYgaXNfaW5kZW50aW9uKTsKKwllbWl0dGVyLT5vcGVuX2Vu ZGVkID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3cml0ZV9hbmNob3Ioc3RydWN0 IHlhbWxfZW1pdHRlciAqZW1pdHRlciwKKwkJCWNvbnN0IGNoYXIgKnZhbHVlLCBzaXplX3QgbGVu Z3RoKQoreworCXN0cnVjdCB5YW1sX3N0cmluZyBzdHJpbmcgPSBTVFJJTkdfSU5JVCh2YWx1ZSwg bGVuZ3RoKTsKKwlpbnQgZXJyOworCisJd2hpbGUgKHN0cmluZy5wb3MgIT0gc3RyaW5nLmVuZCkg eworCQllcnIgPSBwdXRfY2hhcihlbWl0dGVyLCAmc3RyaW5nKTsKKwkJaWYgKGVycikKKwkJCXJl dHVybiBlcnI7CisJfQorCisJZW1pdHRlci0+d2hpdGVzcGFjZSA9IDA7CisJZW1pdHRlci0+aW5k ZW50aW9uID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3cml0ZV90YWdfaGFuZGxl KHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIsCisJCQkgICAgY29uc3QgY2hhciAqdmFsdWUs IHNpemVfdCBsZW5ndGgpCit7CisJc3RydWN0IHlhbWxfc3RyaW5nIHN0cmluZyA9IFNUUklOR19J TklUKHZhbHVlLCBsZW5ndGgpOworCWludCBlcnI7CisKKwlpZiAoIWVtaXR0ZXItPndoaXRlc3Bh Y2UpIHsKKwkJZXJyID0gcHV0KGVtaXR0ZXIsICcgJyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4g ZXJyOworCX0KKworCXdoaWxlIChzdHJpbmcucG9zICE9IHN0cmluZy5lbmQpIHsKKwkJZXJyID0g cHV0X2NoYXIoZW1pdHRlciwgJnN0cmluZyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOwor CX0KKworCWVtaXR0ZXItPndoaXRlc3BhY2UgPSAwOworCWVtaXR0ZXItPmluZGVudGlvbiA9IDA7 CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfdGFnX2NvbnRlbnQoc3RydWN0IHlh bWxfZW1pdHRlciAqZW1pdHRlciwKKwkJCSAgICAgY29uc3QgY2hhciAqdmFsdWUsIHNpemVfdCBs ZW5ndGgsCisJCQkgICAgIGludCBuZWVkX3doaXRlc3BhY2UpCit7CisJc3RydWN0IHlhbWxfc3Ry aW5nIHN0cmluZyA9IFNUUklOR19JTklUKHZhbHVlLCBsZW5ndGgpOworCWludCBlcnI7CisKKwlp ZiAobmVlZF93aGl0ZXNwYWNlICYmICFlbWl0dGVyLT53aGl0ZXNwYWNlKSB7CisJCWVyciA9IHB1 dChlbWl0dGVyLCAnICcpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwl3aGls ZSAoc3RyaW5nLnBvcyAhPSBzdHJpbmcuZW5kKSB7CisJCWlmIChJU19BTFBIQShzdHJpbmcpIHx8 CisJCSAgICBDSEVDSyhzdHJpbmcsICc7JykgfHwKKwkJICAgIENIRUNLKHN0cmluZywgJy8nKSB8 fAorCQkgICAgQ0hFQ0soc3RyaW5nLCAnPycpIHx8CisJCSAgICBDSEVDSyhzdHJpbmcsICc6Jykg fHwKKwkJICAgIENIRUNLKHN0cmluZywgJ0AnKSB8fAorCQkgICAgQ0hFQ0soc3RyaW5nLCAnJicp IHx8CisJCSAgICBDSEVDSyhzdHJpbmcsICc9JykgfHwKKwkJICAgIENIRUNLKHN0cmluZywgJysn KSB8fAorCQkgICAgQ0hFQ0soc3RyaW5nLCAnJCcpIHx8CisJCSAgICBDSEVDSyhzdHJpbmcsICcs JykgfHwKKwkJICAgIENIRUNLKHN0cmluZywgJ18nKSB8fAorCQkgICAgQ0hFQ0soc3RyaW5nLCAn LicpIHx8CisJCSAgICBDSEVDSyhzdHJpbmcsICd+JykgfHwKKwkJICAgIENIRUNLKHN0cmluZywg JyonKSB8fAorCQkgICAgQ0hFQ0soc3RyaW5nLCAnXCcnKSB8fAorCQkgICAgQ0hFQ0soc3RyaW5n LCAnKCcpIHx8CisJCSAgICBDSEVDSyhzdHJpbmcsICcpJykgfHwKKwkJICAgIENIRUNLKHN0cmlu ZywgJ1snKSB8fAorCQkgICAgQ0hFQ0soc3RyaW5nLCAnXScpKSB7CisJCQllcnIgPSBwdXRfY2hh cihlbWl0dGVyLCAmc3RyaW5nKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfSBl bHNlIHsKKwkJCWludCB3aWR0aCA9IHV0Zjhfd2lkdGgoJnN0cmluZyk7CisKKwkJCXdoaWxlICh3 aWR0aC0tKSB7CisJCQkJdW5zaWduZWQgaW50IHZhbHVlID0gKnN0cmluZy5wb3MrKzsKKwkJCQlp bnQgYzsKKworCQkJCWVyciA9IHB1dChlbWl0dGVyLCAnJScpOworCQkJCWlmIChlcnIpCisJCQkJ CXJldHVybiBlcnI7CisKKwkJCQljID0gdmFsdWUgPj4gNDsKKwkJCQljICs9IGMgPCAxMCA/ICcw JyA6ICdBJyAtIDEwOworCQkJCWVyciA9IHB1dChlbWl0dGVyLCBjKTsKKwkJCQlpZiAoZXJyKQor CQkJCQlyZXR1cm4gZXJyOworCisJCQkJYyA9IHZhbHVlICYgMHgwZjsKKwkJCQljICs9IGMgPCAx MCA/ICcwJyA6ICdBJyAtIDEwOworCQkJCWVyciA9IHB1dChlbWl0dGVyLCBjKTsKKwkJCQlpZiAo ZXJyKQorCQkJCQlyZXR1cm4gZXJyOworCQkJfQorCQl9CisJfQorCisJZW1pdHRlci0+d2hpdGVz cGFjZSA9IDA7CisJZW1pdHRlci0+aW5kZW50aW9uID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCB3cml0ZV90YWcoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlcikKK3sKKwlpbnQg ZXJyOworCisJaWYgKCFlbWl0dGVyLT50YWdfZGF0YS5oYW5kbGUgJiYgIWVtaXR0ZXItPnRhZ19k YXRhLnN1ZmZpeCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZW1pdHRlci0+dGFnX2RhdGEuaGFuZGxl KSB7CisJCWVyciA9IHdyaXRlX3RhZ19oYW5kbGUoZW1pdHRlciwKKwkJCQkgICAgICAgZW1pdHRl ci0+dGFnX2RhdGEuaGFuZGxlLAorCQkJCSAgICAgICBlbWl0dGVyLT50YWdfZGF0YS5oYW5kbGVf bGVuZ3RoKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJaWYgKGVtaXR0ZXItPnRh Z19kYXRhLnN1ZmZpeCkgeworCQkJZXJyID0gd3JpdGVfdGFnX2NvbnRlbnQoZW1pdHRlciwKKwkJ CQkJCWVtaXR0ZXItPnRhZ19kYXRhLnN1ZmZpeCwKKwkJCQkJCWVtaXR0ZXItPnRhZ19kYXRhLnN1 ZmZpeF9sZW5ndGgsCisJCQkJCQkwKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJ fQorCX0gZWxzZSB7CisJCWVyciA9IHdyaXRlX2luZGljYXRvcihlbWl0dGVyLCAiITwiLCAxLCAw LCAwKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJZXJyID0gd3JpdGVfdGFnX2Nv bnRlbnQoZW1pdHRlciwKKwkJCQkJZW1pdHRlci0+dGFnX2RhdGEuc3VmZml4LAorCQkJCQllbWl0 dGVyLT50YWdfZGF0YS5zdWZmaXhfbGVuZ3RoLAorCQkJCQkwKTsKKwkJaWYgKGVycikKKwkJCXJl dHVybiBlcnI7CisKKwkJZXJyID0gd3JpdGVfaW5kaWNhdG9yKGVtaXR0ZXIsICI+IiwgMCwgMCwg MCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IHdyaXRlX3BsYWluX3NjYWxhcihzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVy LAorCQkJICAgICAgY29uc3QgY2hhciAqdmFsdWUsCisJCQkgICAgICBzaXplX3QgbGVuZ3RoLAor CQkJICAgICAgaW50IGFsbG93X2JyZWFrcykKK3sKKwlzdHJ1Y3QgeWFtbF9zdHJpbmcgc3RyaW5n ID0gU1RSSU5HX0lOSVQodmFsdWUsIGxlbmd0aCk7CisJaW50IHNwYWNlcyA9IDA7CisJaW50IGJy ZWFrcyA9IDA7CisJaW50IGVycjsKKworCWlmICghZW1pdHRlci0+d2hpdGVzcGFjZSkgeworCQll cnIgPSBwdXQoZW1pdHRlciwgJyAnKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQor CisJd2hpbGUgKHN0cmluZy5wb3MgIT0gc3RyaW5nLmVuZCkgeworCQlpZiAoSVNfU1BBQ0Uoc3Ry aW5nKSkgeworCQkJaWYgKGFsbG93X2JyZWFrcyAmJiAhc3BhY2VzICYmCisJCQkgICAgZW1pdHRl ci0+Y29sdW1uID4gZW1pdHRlci0+YmVzdF93aWR0aCAmJgorCQkJICAgICFJU19TUEFDRV9BVChz dHJpbmcsIDEpKSB7CisJCQkJZXJyID0gd3JpdGVfaW5kZW50KGVtaXR0ZXIpOworCQkJCWlmIChl cnIpCisJCQkJCXJldHVybiBlcnI7CisJCQkJQURWQU5DRShzdHJpbmcpOworCQkJfSBlbHNlIHsK KwkJCQllcnIgPSBwdXRfY2hhcihlbWl0dGVyLCAmc3RyaW5nKTsKKwkJCQlpZiAoZXJyKQorCQkJ CQlyZXR1cm4gZXJyOworCQkJfQorCQkJc3BhY2VzID0gMTsKKwkJfSBlbHNlIGlmIChJU19CUkVB SyhzdHJpbmcpKSB7CisJCQlpZiAoIWJyZWFrcyAmJiBDSEVDSyhzdHJpbmcsICdcbicpKSB7CisJ CQkJZXJyID0gcHV0X2JyZWFrKGVtaXR0ZXIpOworCQkJCWlmIChlcnIpCisJCQkJCXJldHVybiBl cnI7CisJCQl9CisKKwkJCWVyciA9IHB1dF9jaGFyX2JyZWFrKGVtaXR0ZXIsICZzdHJpbmcpOwor CQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCisJCQllbWl0dGVyLT5pbmRlbnRpb24gPSAx OworCQkJYnJlYWtzID0gMTsKKwkJfSBlbHNlIHsKKwkJCWlmIChicmVha3MpIHsKKwkJCQllcnIg PSB3cml0ZV9pbmRlbnQoZW1pdHRlcik7CisJCQkJaWYgKGVycikKKwkJCQkJcmV0dXJuIGVycjsK KwkJCX0KKworCQkJZXJyID0gcHV0X2NoYXIoZW1pdHRlciwgJnN0cmluZyk7CisJCQlpZiAoZXJy KQorCQkJCXJldHVybiBlcnI7CisKKwkJCWVtaXR0ZXItPmluZGVudGlvbiA9IDA7CisJCQlzcGFj ZXMgPSAwOworCQkJYnJlYWtzID0gMDsKKwkJfQorCX0KKworCWVtaXR0ZXItPndoaXRlc3BhY2Ug PSAwOworCWVtaXR0ZXItPmluZGVudGlvbiA9IDA7CisJaWYgKGVtaXR0ZXItPnJvb3RfY29udGV4 dCkKKwkJZW1pdHRlci0+b3Blbl9lbmRlZCA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQKK3dyaXRlX3NpbmdsZV9xdW90ZWRfc2NhbGFyKHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0 ZXIsCisJCQkgICBjb25zdCBjaGFyICp2YWx1ZSwKKwkJCSAgIHNpemVfdCBsZW5ndGgsCisJCQkg ICBpbnQgYWxsb3dfYnJlYWtzKQoreworCXN0cnVjdCB5YW1sX3N0cmluZyBzdHJpbmcgPSBTVFJJ TkdfSU5JVCh2YWx1ZSwgbGVuZ3RoKTsKKwlpbnQgc3BhY2VzID0gMDsKKwlpbnQgYnJlYWtzID0g MDsKKwlpbnQgZXJyOworCisJZXJyID0gd3JpdGVfaW5kaWNhdG9yKGVtaXR0ZXIsICInIiwgMSwg MCwgMCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXdoaWxlIChzdHJpbmcucG9zICE9 IHN0cmluZy5lbmQpIHsKKwkJaWYgKElTX1NQQUNFKHN0cmluZykpIHsKKwkJCWlmIChhbGxvd19i cmVha3MgJiYgIXNwYWNlcyAmJgorCQkJICAgIGVtaXR0ZXItPmNvbHVtbiA+IGVtaXR0ZXItPmJl c3Rfd2lkdGggJiYKKwkJCSAgICBzdHJpbmcucG9zICE9IHN0cmluZy5zdGFydCAmJgorCQkJICAg IHN0cmluZy5wb3MgIT0gc3RyaW5nLmVuZCAtIDEgJiYKKwkJCSAgICAhSVNfU1BBQ0VfQVQoc3Ry aW5nLCAxKSkgeworCQkJCWVyciA9IHdyaXRlX2luZGVudChlbWl0dGVyKTsKKwkJCQlpZiAoZXJy KQorCQkJCQlyZXR1cm4gZXJyOworCQkJCUFEVkFOQ0Uoc3RyaW5nKTsKKwkJCX0gZWxzZSB7CisJ CQkJZXJyID0gcHV0X2NoYXIoZW1pdHRlciwgJnN0cmluZyk7CisJCQkJaWYgKGVycikKKwkJCQkJ cmV0dXJuIGVycjsKKwkJCX0KKwkJCXNwYWNlcyA9IDE7CisJCX0gZWxzZSBpZiAoSVNfQlJFQUso c3RyaW5nKSkgeworCQkJaWYgKCFicmVha3MgJiYgQ0hFQ0soc3RyaW5nLCAnXG4nKSkgeworCQkJ CWVyciA9IHB1dF9icmVhayhlbWl0dGVyKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1cm4gZXJy OworCQkJfQorCisJCQllcnIgPSBwdXRfY2hhcl9icmVha3MoZW1pdHRlciwgJnN0cmluZyk7CisJ CQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisKKwkJCWVtaXR0ZXItPmluZGVudGlvbiA9IDE7 CisJCQlicmVha3MgPSAxOworCQl9IGVsc2UgeworCQkJaWYgKGJyZWFrcykgeworCQkJCWVyciA9 IHdyaXRlX2luZGVudChlbWl0dGVyKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1cm4gZXJyOwor CQkJfQorCisJCQlpZiAoQ0hFQ0soc3RyaW5nLCAnXCcnKSkgeworCQkJCWVyciA9IHB1dChlbWl0 dGVyLCAnXCcnKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1cm4gZXJyOworCQkJfQorCisJCQll cnIgPSBwdXRfY2hhcihlbWl0dGVyLCAmc3RyaW5nKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJu IGVycjsKKworCQkJZW1pdHRlci0+aW5kZW50aW9uID0gMDsKKwkJCXNwYWNlcyA9IDA7CisJCQli cmVha3MgPSAwOworCQl9CisJfQorCisJaWYgKGJyZWFrcykgeworCQllcnIgPSB3cml0ZV9pbmRl bnQoZW1pdHRlcik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IHdy aXRlX2luZGljYXRvcihlbWl0dGVyLCAiJyIsIDAsIDAsIDApOworCWlmIChlcnIpCisJCXJldHVy biBlcnI7CisKKwllbWl0dGVyLT53aGl0ZXNwYWNlID0gMDsKKwllbWl0dGVyLT5pbmRlbnRpb24g PSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit3cml0ZV9kb3VibGVfcXVvdGVkX3Nj YWxhcihzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkJICAgY29uc3QgY2hhciAqdmFs dWUsIHNpemVfdCBsZW5ndGgsIGludCBhbGxvd19icmVha3MpCit7CisJc3RydWN0IHlhbWxfc3Ry aW5nIHN0cmluZyA9IFNUUklOR19JTklUKHZhbHVlLCBsZW5ndGgpOworCWludCBzcGFjZXMgPSAw OworCWludCBlcnI7CisKKwllcnIgPSB3cml0ZV9pbmRpY2F0b3IoZW1pdHRlciwgIlwiIiwgMSwg MCwgMCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXdoaWxlIChzdHJpbmcucG9zICE9 IHN0cmluZy5lbmQpIHsKKwkJaWYgKCFJU19QUklOVEFCTEUoc3RyaW5nKSB8fAorCQkgICAgKCFl bWl0dGVyLT51bmljb2RlICYmICFJU19BU0NJSShzdHJpbmcpKSB8fAorCQkgICAgSVNfQk9NKHN0 cmluZykgfHwKKwkJICAgIElTX0JSRUFLKHN0cmluZykgfHwKKwkJICAgIENIRUNLKHN0cmluZywg JyInKSB8fAorCQkgICAgQ0hFQ0soc3RyaW5nLCAnXFwnKSkgeworCQkJdTggb2N0ZXQgPSBzdHJp bmcucG9zWzBdOworCQkJdW5zaWduZWQgaW50IHdpZHRoOworCQkJdW5zaWduZWQgaW50IHZhbHVl OworCQkJaW50IGs7CisKKwkJCXdpZHRoID0gKG9jdGV0ICYgMHg4MCkgPT0gMHgwMCA/IDEgOgor CQkJCShvY3RldCAmIDB4RTApID09IDB4QzAgPyAyIDoKKwkJCQkob2N0ZXQgJiAweEYwKSA9PSAw eEUwID8gMyA6CisJCQkJKG9jdGV0ICYgMHhGOCkgPT0gMHhGMCA/IDQgOiAwOworCQkJdmFsdWUg PSAob2N0ZXQgJiAweDgwKSA9PSAweDAwID8gb2N0ZXQgJiAweDdGIDoKKwkJCQkob2N0ZXQgJiAw eEUwKSA9PSAweEMwID8gb2N0ZXQgJiAweDFGIDoKKwkJCQkob2N0ZXQgJiAweEYwKSA9PSAweEUw ID8gb2N0ZXQgJiAweDBGIDoKKwkJCQkob2N0ZXQgJiAweEY4KSA9PSAweEYwID8gb2N0ZXQgJiAw eDA3IDogMDsKKwkJCWZvciAoayA9IDE7IGsgPCAoaW50KXdpZHRoOyBrKyspIHsKKwkJCQlvY3Rl dCA9IHN0cmluZy5wb3Nba107CisJCQkJdmFsdWUgPSAodmFsdWUgPDwgNikgKyAob2N0ZXQgJiAw eDNGKTsKKwkJCX0KKwkJCXN0cmluZy5wb3MgKz0gd2lkdGg7CisKKwkJCWVyciA9IHB1dChlbWl0 dGVyLCAnXFwnKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKworCQkJc3dpdGNoICh2 YWx1ZSkgeworCQkJY2FzZSAweDAwOgorCQkJCWVyciA9IHB1dChlbWl0dGVyLCAnMCcpOworCQkJ CWlmIChlcnIpCisJCQkJCXJldHVybiBlcnI7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMHgwNzoK KwkJCQllcnIgPSBwdXQoZW1pdHRlciwgJ2EnKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1cm4g ZXJyOworCQkJCWJyZWFrOworCisJCQljYXNlIDB4MDg6CisJCQkJZXJyID0gcHV0KGVtaXR0ZXIs ICdiJyk7CisJCQkJaWYgKGVycikKKwkJCQkJcmV0dXJuIGVycjsKKwkJCQlicmVhazsKKworCQkJ Y2FzZSAweDA5OgorCQkJCWVyciA9IHB1dChlbWl0dGVyLCAndCcpOworCQkJCWlmIChlcnIpCisJ CQkJCXJldHVybiBlcnI7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMHgwQToKKwkJCQllcnIgPSBw dXQoZW1pdHRlciwgJ24nKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1cm4gZXJyOworCQkJCWJy ZWFrOworCisJCQljYXNlIDB4MEI6CisJCQkJZXJyID0gcHV0KGVtaXR0ZXIsICd2Jyk7CisJCQkJ aWYgKGVycikKKwkJCQkJcmV0dXJuIGVycjsKKwkJCQlicmVhazsKKworCQkJY2FzZSAweDBDOgor CQkJCWVyciA9IHB1dChlbWl0dGVyLCAnZicpOworCQkJCWlmIChlcnIpCisJCQkJCXJldHVybiBl cnI7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMHgwRDoKKwkJCQllcnIgPSBwdXQoZW1pdHRlciwg J3InKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1cm4gZXJyOworCQkJCWJyZWFrOworCisJCQlj YXNlIDB4MUI6CisJCQkJZXJyID0gcHV0KGVtaXR0ZXIsICdlJyk7CisJCQkJaWYgKGVycikKKwkJ CQkJcmV0dXJuIGVycjsKKwkJCQlicmVhazsKKworCQkJY2FzZSAweDIyOgorCQkJCWVyciA9IHB1 dChlbWl0dGVyLCAnXCInKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1cm4gZXJyOworCQkJCWJy ZWFrOworCisJCQljYXNlIDB4NUM6CisJCQkJZXJyID0gcHV0KGVtaXR0ZXIsICdcXCcpOworCQkJ CWlmIChlcnIpCisJCQkJCXJldHVybiBlcnI7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMHg4NToK KwkJCQllcnIgPSBwdXQoZW1pdHRlciwgJ04nKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1cm4g ZXJyOworCQkJCWJyZWFrOworCisJCQljYXNlIDB4QTA6CisJCQkJZXJyID0gcHV0KGVtaXR0ZXIs ICdfJyk7CisJCQkJaWYgKGVycikKKwkJCQkJcmV0dXJuIGVycjsKKwkJCQlicmVhazsKKworCQkJ Y2FzZSAweDIwMjg6CisJCQkJZXJyID0gcHV0KGVtaXR0ZXIsICdMJyk7CisJCQkJaWYgKGVycikK KwkJCQkJcmV0dXJuIGVycjsKKwkJCQlicmVhazsKKworCQkJY2FzZSAweDIwMjk6CisJCQkJZXJy ID0gcHV0KGVtaXR0ZXIsICdQJyk7CisJCQkJaWYgKGVycikKKwkJCQkJcmV0dXJuIGVycjsKKwkJ CQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlpZiAodmFsdWUgPD0gMHhGRikgeworCQkJCQll cnIgPSBwdXQoZW1pdHRlciwgJ3gnKTsKKwkJCQkJaWYgKGVycikKKwkJCQkJCXJldHVybiBlcnI7 CisJCQkJCXdpZHRoID0gMjsKKwkJCQl9IGVsc2UgaWYgKHZhbHVlIDw9IDB4RkZGRikgeworCQkJ CQllcnIgPSBwdXQoZW1pdHRlciwgJ3UnKTsKKwkJCQkJaWYgKGVycikKKwkJCQkJCXJldHVybiBl cnI7CisJCQkJCXdpZHRoID0gNDsKKwkJCQl9IGVsc2UgeworCQkJCQllcnIgPSBwdXQoZW1pdHRl ciwgJ1UnKTsKKwkJCQkJaWYgKGVycikKKwkJCQkJCXJldHVybiBlcnI7CisJCQkJCXdpZHRoID0g ODsKKwkJCQl9CisKKwkJCQlmb3IgKGsgPSAod2lkdGggLSAxKSAqIDQ7IGsgPj0gMDsgayAtPSA0 KSB7CisJCQkJCWludCBkaWdpdDsKKworCQkJCQlkaWdpdCA9ICh2YWx1ZSA+PiBrKSAmIDB4MEY7 CisJCQkJCWRpZ2l0ICs9IGRpZ2l0IDwgMTAgPyAnMCcgOiAnQScgLSAxMDsKKwkJCQkJZXJyID0g cHV0KGVtaXR0ZXIsIGRpZ2l0KTsKKwkJCQkJaWYgKGVycikKKwkJCQkJCXJldHVybiBlcnI7CisJ CQkJfQorCQkJfQorCQkJc3BhY2VzID0gMDsKKwkJfSBlbHNlIGlmIChJU19TUEFDRShzdHJpbmcp KSB7CisJCQlpZiAoYWxsb3dfYnJlYWtzICYmCisJCQkgICAgIXNwYWNlcyAmJgorCQkJICAgIGVt aXR0ZXItPmNvbHVtbiA+IGVtaXR0ZXItPmJlc3Rfd2lkdGggJiYKKwkJCSAgICBzdHJpbmcucG9z ICE9IHN0cmluZy5zdGFydCAmJgorCQkJICAgIHN0cmluZy5wb3MgIT0gc3RyaW5nLmVuZCAtIDEp IHsKKwkJCQllcnIgPSB3cml0ZV9pbmRlbnQoZW1pdHRlcik7CisJCQkJaWYgKGVycikKKwkJCQkJ cmV0dXJuIGVycjsKKworCQkJCWlmIChJU19TUEFDRV9BVChzdHJpbmcsIDEpKSB7CisJCQkJCWVy ciA9IHB1dChlbWl0dGVyLCAnXFwnKTsKKwkJCQkJaWYgKGVycikKKwkJCQkJCXJldHVybiBlcnI7 CisJCQkJfQorCQkJCUFEVkFOQ0Uoc3RyaW5nKTsKKwkJCX0gZWxzZSB7CisJCQkJZXJyID0gcHV0 X2NoYXIoZW1pdHRlciwgJnN0cmluZyk7CisJCQkJaWYgKGVycikKKwkJCQkJcmV0dXJuIGVycjsK KwkJCX0KKwkJCXNwYWNlcyA9IDE7CisJCX0gZWxzZSB7CisJCQllcnIgPSBwdXRfY2hhcihlbWl0 dGVyLCAmc3RyaW5nKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJCXNwYWNlcyA9 IDA7CisJCX0KKwl9CisKKwllcnIgPSB3cml0ZV9pbmRpY2F0b3IoZW1pdHRlciwgIlwiIiwgMCwg MCwgMCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVtaXR0ZXItPndoaXRlc3BhY2Ug PSAwOworCWVtaXR0ZXItPmluZGVudGlvbiA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQKK3dyaXRlX2Jsb2NrX3NjYWxhcl9oaW50cyhzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVy LAorCQkJIHN0cnVjdCB5YW1sX3N0cmluZyBzdHJpbmcpCit7CisJY2hhciBpbmRlbnRfaGludFsy XTsKKwljb25zdCBjaGFyICpjaG9tcF9oaW50ID0gTlVMTDsKKwlpbnQgZXJyOworCisJaWYgKElT X1NQQUNFKHN0cmluZykgfHwgSVNfQlJFQUsoc3RyaW5nKSkgeworCQlpbmRlbnRfaGludFswXSA9 ICcwJyArIChjaGFyKWVtaXR0ZXItPmJlc3RfaW5kZW50OworCQlpbmRlbnRfaGludFsxXSA9ICdc MCc7CisJCWVyciA9IHdyaXRlX2luZGljYXRvcihlbWl0dGVyLCBpbmRlbnRfaGludCwgMCwgMCwg MCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWVtaXR0ZXItPm9wZW5fZW5k ZWQgPSAwOworCisJc3RyaW5nLnBvcyA9IHN0cmluZy5lbmQ7CisJaWYgKHN0cmluZy5zdGFydCA9 PSBzdHJpbmcucG9zKSB7CisJCWNob21wX2hpbnQgPSAiLSI7CisJfSBlbHNlIHsKKwkJZG8gewor CQkJc3RyaW5nLnBvcy0tOworCQl9IHdoaWxlICgoKnN0cmluZy5wb3MgJiAweEMwKSA9PSAweDgw KTsKKworCQlpZiAoIUlTX0JSRUFLKHN0cmluZykpIHsKKwkJCWNob21wX2hpbnQgPSAiLSI7CisJ CX0gZWxzZSBpZiAoc3RyaW5nLnN0YXJ0ID09IHN0cmluZy5wb3MpIHsKKwkJCWNob21wX2hpbnQg PSAiKyI7CisJCQllbWl0dGVyLT5vcGVuX2VuZGVkID0gMTsKKwkJfSBlbHNlIHsKKwkJCWRvIHsK KwkJCQlzdHJpbmcucG9zLS07CisJCQl9IHdoaWxlICgoKnN0cmluZy5wb3MgJiAweEMwKSA9PSAw eDgwKTsKKworCQkJaWYgKElTX0JSRUFLKHN0cmluZykpIHsKKwkJCQljaG9tcF9oaW50ID0gIisi OworCQkJCWVtaXR0ZXItPm9wZW5fZW5kZWQgPSAxOworCQkJfQorCQl9CisJfQorCisJaWYgKGNo b21wX2hpbnQpIHsKKwkJZXJyID0gd3JpdGVfaW5kaWNhdG9yKGVtaXR0ZXIsIGNob21wX2hpbnQs IDAsIDAsIDApOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludAord3JpdGVfbGl0ZXJhbF9zY2FsYXIoc3RydWN0IHlhbWxfZW1pdHRl ciAqZW1pdHRlciwKKwkJICAgICBjb25zdCBjaGFyICp2YWx1ZSwgc2l6ZV90IGxlbmd0aCkKK3sK KwlzdHJ1Y3QgeWFtbF9zdHJpbmcgc3RyaW5nID0gU1RSSU5HX0lOSVQodmFsdWUsIGxlbmd0aCk7 CisJaW50IGJyZWFrcyA9IDE7CisJaW50IGVycjsKKworCWVyciA9IHdyaXRlX2luZGljYXRvcihl bWl0dGVyLCAifCIsIDEsIDAsIDApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIg PSB3cml0ZV9ibG9ja19zY2FsYXJfaGludHMoZW1pdHRlciwgc3RyaW5nKTsKKwlpZiAoZXJyKQor CQlyZXR1cm4gZXJyOworCisJZXJyID0gcHV0X2JyZWFrKGVtaXR0ZXIpOworCWlmIChlcnIpCisJ CXJldHVybiBlcnI7CisKKwllbWl0dGVyLT5pbmRlbnRpb24gPSAxOworCWVtaXR0ZXItPndoaXRl c3BhY2UgPSAxOworCisJd2hpbGUgKHN0cmluZy5wb3MgIT0gc3RyaW5nLmVuZCkgeworCQlpZiAo SVNfQlJFQUsoc3RyaW5nKSkgeworCQkJZXJyID0gcHV0X2NoYXJfYnJlYWsoZW1pdHRlciwgJnN0 cmluZyk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisKKwkJCWVtaXR0ZXItPmluZGVu dGlvbiA9IDE7CisJCQlicmVha3MgPSAxOworCQl9IGVsc2UgeworCQkJaWYgKGJyZWFrcykgewor CQkJCWVyciA9IHdyaXRlX2luZGVudChlbWl0dGVyKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1 cm4gZXJyOworCQkJfQorCisJCQllcnIgPSBwdXRfY2hhcihlbWl0dGVyLCAmc3RyaW5nKTsKKwkJ CWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKworCQkJZW1pdHRlci0+aW5kZW50aW9uID0gMDsK KwkJCWJyZWFrcyA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAor d3JpdGVfZm9sZGVkX3NjYWxhcihzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkgICAg Y29uc3QgY2hhciAqdmFsdWUsIHNpemVfdCBsZW5ndGgpCit7CisJc3RydWN0IHlhbWxfc3RyaW5n IHN0cmluZyA9IFNUUklOR19JTklUKHZhbHVlLCBsZW5ndGgpOworCWludCBicmVha3MgPSAxOwor CWludCBsZWFkaW5nX3NwYWNlcyA9IDE7CisJaW50IGVycjsKKworCWVyciA9IHdyaXRlX2luZGlj YXRvcihlbWl0dGVyLCAiPiIsIDEsIDAsIDApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisK KwllcnIgPSB3cml0ZV9ibG9ja19zY2FsYXJfaGludHMoZW1pdHRlciwgc3RyaW5nKTsKKwlpZiAo ZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gcHV0X2JyZWFrKGVtaXR0ZXIpOworCWlmIChl cnIpCisJCXJldHVybiBlcnI7CisKKwllbWl0dGVyLT5pbmRlbnRpb24gPSAxOworCWVtaXR0ZXIt PndoaXRlc3BhY2UgPSAxOworCisJd2hpbGUgKHN0cmluZy5wb3MgIT0gc3RyaW5nLmVuZCkgewor CQlpZiAoSVNfQlJFQUsoc3RyaW5nKSkgeworCQkJaWYgKCFicmVha3MgJiYgIWxlYWRpbmdfc3Bh Y2VzICYmIENIRUNLKHN0cmluZywgJ1xuJykpIHsKKwkJCQlpbnQgazsKKworCQkJCWsgPSAwOwor CQkJCXdoaWxlIChJU19CUkVBS19BVChzdHJpbmcsIGspKQorCQkJCQlrICs9IF9fdXRmOF93aWR0 aCgmc3RyaW5nLCBrKTsKKworCQkJCWlmICghSVNfQkxBTktaX0FUKHN0cmluZywgaykpIHsKKwkJ CQkJZXJyID0gcHV0X2JyZWFrKGVtaXR0ZXIpOworCQkJCQlpZiAoZXJyKQorCQkJCQkJcmV0dXJu IGVycjsKKwkJCQl9CisJCQl9CisKKwkJCWVyciA9IHB1dF9jaGFyX2JyZWFrKGVtaXR0ZXIsICZz dHJpbmcpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCisJCQllbWl0dGVyLT5pbmRl bnRpb24gPSAxOworCQkJYnJlYWtzID0gMTsKKwkJfSBlbHNlIHsKKwkJCWlmIChicmVha3MpIHsK KwkJCQllcnIgPSB3cml0ZV9pbmRlbnQoZW1pdHRlcik7CisJCQkJaWYgKGVycikKKwkJCQkJcmV0 dXJuIGVycjsKKworCQkJCWxlYWRpbmdfc3BhY2VzID0gSVNfQkxBTksoc3RyaW5nKTsKKwkJCX0K KworCQkJaWYgKCFicmVha3MgJiYKKwkJCSAgICBJU19TUEFDRShzdHJpbmcpICYmCisJCQkgICAg IUlTX1NQQUNFX0FUKHN0cmluZywgMSkgJiYKKwkJCSAgICBlbWl0dGVyLT5jb2x1bW4gPiBlbWl0 dGVyLT5iZXN0X3dpZHRoKSB7CisJCQkJZXJyID0gd3JpdGVfaW5kZW50KGVtaXR0ZXIpOworCQkJ CWlmIChlcnIpCisJCQkJCXJldHVybiBlcnI7CisKKwkJCQlBRFZBTkNFKHN0cmluZyk7CisJCQl9 IGVsc2UgeworCQkJCWVyciA9IHB1dF9jaGFyKGVtaXR0ZXIsICZzdHJpbmcpOworCQkJCWlmIChl cnIpCisJCQkJCXJldHVybiBlcnI7CisJCQl9CisJCQllbWl0dGVyLT5pbmRlbnRpb24gPSAwOwor CQkJYnJlYWtzID0gMDsKKwkJfQorCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQK K3dyaXRlX3NjYWxhcihzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyKQoreworCXN3aXRjaCAo ZW1pdHRlci0+c2NhbGFyX2RhdGEuc3R5bGUpIHsKKwljYXNlIFlBTUxfUExBSU5fU0NBTEFSX1NU WUxFOgorCQlyZXR1cm4gd3JpdGVfcGxhaW5fc2NhbGFyKGVtaXR0ZXIsCisJCQkJCSAgZW1pdHRl ci0+c2NhbGFyX2RhdGEudmFsdWUsCisJCQkJCSAgZW1pdHRlci0+c2NhbGFyX2RhdGEubGVuZ3Ro LAorCQkJCQkgICFlbWl0dGVyLT5zaW1wbGVfa2V5X2NvbnRleHQpOworCisJY2FzZSBZQU1MX1NJ TkdMRV9RVU9URURfU0NBTEFSX1NUWUxFOgorCQlyZXR1cm4gd3JpdGVfc2luZ2xlX3F1b3RlZF9z Y2FsYXIoZW1pdHRlciwKKwkJCQkJCSAgZW1pdHRlci0+c2NhbGFyX2RhdGEudmFsdWUsCisJCQkJ CQkgIGVtaXR0ZXItPnNjYWxhcl9kYXRhLmxlbmd0aCwKKwkJCQkJCSAgIWVtaXR0ZXItPnNpbXBs ZV9rZXlfY29udGV4dCk7CisKKwljYXNlIFlBTUxfRE9VQkxFX1FVT1RFRF9TQ0FMQVJfU1RZTEU6 CisJCXJldHVybiB3cml0ZV9kb3VibGVfcXVvdGVkX3NjYWxhcihlbWl0dGVyLAorCQkJCQkJICBl bWl0dGVyLT5zY2FsYXJfZGF0YS52YWx1ZSwKKwkJCQkJCSAgZW1pdHRlci0+c2NhbGFyX2RhdGEu bGVuZ3RoLAorCQkJCQkJICAhZW1pdHRlci0+c2ltcGxlX2tleV9jb250ZXh0KTsKKworCWNhc2Ug WUFNTF9MSVRFUkFMX1NDQUxBUl9TVFlMRToKKwkJcmV0dXJuIHdyaXRlX2xpdGVyYWxfc2NhbGFy KGVtaXR0ZXIsCisJCQkJCSAgICBlbWl0dGVyLT5zY2FsYXJfZGF0YS52YWx1ZSwKKwkJCQkJICAg IGVtaXR0ZXItPnNjYWxhcl9kYXRhLmxlbmd0aCk7CisKKwljYXNlIFlBTUxfRk9MREVEX1NDQUxB Ul9TVFlMRToKKwkJcmV0dXJuIHdyaXRlX2ZvbGRlZF9zY2FsYXIoZW1pdHRlciwKKwkJCQkJICAg ZW1pdHRlci0+c2NhbGFyX2RhdGEudmFsdWUsCisJCQkJCSAgIGVtaXR0ZXItPnNjYWxhcl9kYXRh Lmxlbmd0aCk7CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCitz dGF0aWMgaW50IGVtaXRfYW5jaG9yKHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIpCit7CisJ aW50IGVycjsKKworCWlmICghZW1pdHRlci0+YW5jaG9yX2RhdGEuYW5jaG9yKQorCQlyZXR1cm4g MDsKKworCWVyciA9IHdyaXRlX2luZGljYXRvcihlbWl0dGVyLAorCQkJICAgICAgZW1pdHRlci0+ YW5jaG9yX2RhdGEuYWxpYXMgPyAiKiIgOiAiJiIsCisJCQkgICAgICAxLCAwLCAwKTsKKwlpZiAo ZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIHdyaXRlX2FuY2hvcihlbWl0dGVyLAorCQkJ ICAgIGVtaXR0ZXItPmFuY2hvcl9kYXRhLmFuY2hvciwKKwkJCSAgICBlbWl0dGVyLT5hbmNob3Jf ZGF0YS5hbmNob3JfbGVuZ3RoKTsKK30KKworc3RhdGljIGludCBlbWl0X3N0cmVhbV9zdGFydChz dHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgeWFtbF9l dmVudCAqZXZlbnQpCit7CisJaWYgKGV2ZW50LT50eXBlID09IFlBTUxfU1RSRUFNX1NUQVJUX0VW RU5UKSB7CisJCWlmIChlbWl0dGVyLT5iZXN0X2luZGVudCA8IDIgfHwgZW1pdHRlci0+YmVzdF9p bmRlbnQgPiA5KQorCQkJZW1pdHRlci0+YmVzdF9pbmRlbnQgID0gMjsKKworCQlpZiAoZW1pdHRl ci0+YmVzdF93aWR0aCA+PSAwICYmCisJCSAgICBlbWl0dGVyLT5iZXN0X3dpZHRoIDw9IGVtaXR0 ZXItPmJlc3RfaW5kZW50ICogMikKKwkJCWVtaXR0ZXItPmJlc3Rfd2lkdGggPSA4MDsKKworCQlp ZiAoZW1pdHRlci0+YmVzdF93aWR0aCA8IDApCisJCQllbWl0dGVyLT5iZXN0X3dpZHRoID0gSU5U X01BWDsKKworCQllbWl0dGVyLT5pbmRlbnQgPSAtMTsKKworCQllbWl0dGVyLT5jb2x1bW4gPSAw OworCQllbWl0dGVyLT53aGl0ZXNwYWNlID0gMTsKKwkJZW1pdHRlci0+aW5kZW50aW9uID0gMTsK KworCQllbWl0dGVyLT5zdGF0ZSA9IEVNSVRfRklSU1RfRE9DVU1FTlRfU1RBUlRfU1RBVEU7CisJ CXJldHVybiAwOworCX0KKworCXJldHVybiBzZXRfZXJyb3IoZW1pdHRlciwgImV4cGVjdGVkIFNU UkVBTS1TVEFSVCIpOworfQorCitzdGF0aWMgaW50CithcHBlbmRfdGFnX2RpcmVjdGl2ZShzdHJ1 Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkgICAgIHN0cnVjdCB5YW1sX3RhZ19kaXJlY3Rp dmUgdmFsdWUsCisJCSAgICAgaW50IGFsbG93X2R1cGxpY2F0ZXMpCit7CisJc3RydWN0IHlhbWxf dGFnX2RpcmVjdGl2ZSAqdGFnOworCXN0cnVjdCB5YW1sX3RhZ19kaXJlY3RpdmUgY29weSA9IHt9 OworCWludCBlcnI7CisKKwlmb3IgKHRhZyA9IGVtaXR0ZXItPnRhZ3Muc3RhcnQ7IHRhZyAhPSBl bWl0dGVyLT50YWdzLnRvcDsgdGFnKyspIHsKKwkJaWYgKHN0cmNtcCh2YWx1ZS5oYW5kbGUsIHRh Zy0+aGFuZGxlKSA9PSAwKSB7CisJCQlpZiAoYWxsb3dfZHVwbGljYXRlcykKKwkJCQlyZXR1cm4g MDsKKworCQkJcmV0dXJuIHNldF9lcnJvcihlbWl0dGVyLCAiZHVwbGljYXRlICVUQUcgZGlyZWN0 aXZlIik7CisJCX0KKwl9CisKKwljb3B5LmhhbmRsZSA9IGtzdHJkdXAodmFsdWUuaGFuZGxlLCBH RlBfS0VSTkVMKTsKKwljb3B5LnByZWZpeCA9IGtzdHJkdXAodmFsdWUucHJlZml4LCBHRlBfS0VS TkVMKTsKKwlpZiAoIWNvcHkuaGFuZGxlIHx8ICFjb3B5LnByZWZpeCkgeworCQllbWl0dGVyLT5l cnJubyA9IC1FTk9NRU07CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCisJ ZXJyID0gUFVTSChlbWl0dGVyLCBlbWl0dGVyLT50YWdzLCBjb3B5KTsKKwlpZiAoZXJyKQorCQln b3RvIGVycm9yOworCisJcmV0dXJuIDA7CisKK2Vycm9yOgorCWtmcmVlKGNvcHkuaGFuZGxlKTsK KwlrZnJlZShjb3B5LnByZWZpeCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludAorZW1p dF9kb2N1bWVudF9zdGFydChzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkgICAgY29u c3Qgc3RydWN0IHlhbWxfZXZlbnQgKmV2ZW50LAorCQkgICAgaW50IGZpcnN0KQoreworCWludCBl cnI7CisKKwlpZiAoZXZlbnQtPnR5cGUgPT0gWUFNTF9ET0NVTUVOVF9TVEFSVF9FVkVOVCkgewor CQlzdHJ1Y3QgeWFtbF90YWdfZGlyZWN0aXZlIGRlZmF1bHRfdGFnX2RpcmVjdGl2ZXNbXSA9IHsK KwkJCXsgIiEiLCAiISIgfSwKKwkJCXsgIiEhIiwgInRhZzp5YW1sLm9yZywyMDAyOiIgfSwKKwkJ CXsgTlVMTCwgTlVMTCB9CisJCX07CisJCXN0cnVjdCB5YW1sX3RhZ19kaXJlY3RpdmUgKnRhZzsK KwkJaW50IGltcGxpY2l0OworCisJCWlmIChldmVudC0+ZG9jdW1lbnRfc3RhcnQudmVyc2lvbikg eworCQkJZXJyID0gYW5hbHl6ZV92ZXJzaW9uX2RpcmVjdGl2ZShlbWl0dGVyLAorCQkJCQkJCSpl dmVudC0+ZG9jdW1lbnRfc3RhcnQudmVyc2lvbik7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBl cnI7CisJCX0KKworCQlmb3IgKHRhZyA9IGV2ZW50LT5kb2N1bWVudF9zdGFydC50YWdzLnN0YXJ0 OworCQkgICAgIHRhZyAhPSBldmVudC0+ZG9jdW1lbnRfc3RhcnQudGFncy5lbmQ7CisJCSAgICAg dGFnKyspIHsKKwkJCWVyciA9IGFuYWx5emVfdGFnX2RpcmVjdGl2ZShlbWl0dGVyLCAqdGFnKTsK KwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKworCQkJZXJyID0gYXBwZW5kX3RhZ19kaXJl Y3RpdmUoZW1pdHRlciwgKnRhZywgMCk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJ CX0KKworCQlmb3IgKHRhZyA9IGRlZmF1bHRfdGFnX2RpcmVjdGl2ZXM7CisJCSAgICAgdGFnLT5o YW5kbGU7IHRhZysrKSB7CisJCQllcnIgPSBhcHBlbmRfdGFnX2RpcmVjdGl2ZShlbWl0dGVyLCAq dGFnLCAxKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCWltcGxpY2l0 ID0gZXZlbnQtPmRvY3VtZW50X3N0YXJ0LmltcGxpY2l0OworCQlpZiAoIWZpcnN0IHx8IGVtaXR0 ZXItPmNhbm9uaWNhbCkKKwkJCWltcGxpY2l0ID0gMDsKKworCQlpZiAoKGV2ZW50LT5kb2N1bWVu dF9zdGFydC52ZXJzaW9uIHx8CisJCSAgICAgZXZlbnQtPmRvY3VtZW50X3N0YXJ0LnRhZ3Muc3Rh cnQKKwkJICAgICAhPSBldmVudC0+ZG9jdW1lbnRfc3RhcnQudGFncy5lbmQpICYmCisJCSAgICBl bWl0dGVyLT5vcGVuX2VuZGVkKSB7CisJCQllcnIgPSB3cml0ZV9pbmRpY2F0b3IoZW1pdHRlciwg Ii4uLiIsIDEsIDAsIDApOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCisJCQllcnIg PSB3cml0ZV9pbmRlbnQoZW1pdHRlcik7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJ CX0KKworCQlpZiAoZXZlbnQtPmRvY3VtZW50X3N0YXJ0LnZlcnNpb24pIHsKKwkJCWltcGxpY2l0 ID0gMDsKKwkJCWVyciA9IHdyaXRlX2luZGljYXRvcihlbWl0dGVyLCAiJVlBTUwiLCAxLCAwLCAw KTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKworCQkJZXJyID0gd3JpdGVfaW5kaWNh dG9yKGVtaXR0ZXIsICIxLjEiLCAxLCAwLCAwKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVy cjsKKworCQkJZXJyID0gd3JpdGVfaW5kZW50KGVtaXR0ZXIpOworCQkJaWYgKGVycikKKwkJCQly ZXR1cm4gZXJyOworCQl9CisKKwkJaWYgKGV2ZW50LT5kb2N1bWVudF9zdGFydC50YWdzLnN0YXJ0 ICE9CisJCSAgICBldmVudC0+ZG9jdW1lbnRfc3RhcnQudGFncy5lbmQpIHsKKwkJCWltcGxpY2l0 ID0gMDsKKwkJCWZvciAodGFnID0gZXZlbnQtPmRvY3VtZW50X3N0YXJ0LnRhZ3Muc3RhcnQ7CisJ CQkgICAgIHRhZyAhPSBldmVudC0+ZG9jdW1lbnRfc3RhcnQudGFncy5lbmQ7CisJCQkgICAgIHRh ZysrKSB7CisJCQkJZXJyID0gd3JpdGVfaW5kaWNhdG9yKGVtaXR0ZXIsICIlVEFHIiwgMSwgMCwg MCk7CisJCQkJaWYgKGVycikKKwkJCQkJcmV0dXJuIGVycjsKKworCQkJCWVyciA9IHdyaXRlX3Rh Z19oYW5kbGUoZW1pdHRlciwKKwkJCQkJCSAgICAgICB0YWctPmhhbmRsZSwKKwkJCQkJCSAgICAg ICBzdHJsZW4odGFnLT5oYW5kbGUpKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1cm4gZXJyOwor CisJCQkJZXJyID0gd3JpdGVfdGFnX2NvbnRlbnQoZW1pdHRlciwKKwkJCQkJCQl0YWctPnByZWZp eCwKKwkJCQkJCQlzdHJsZW4odGFnLT5wcmVmaXgpLAorCQkJCQkJCTEpOworCQkJCWlmIChlcnIp CisJCQkJCXJldHVybiBlcnI7CisKKwkJCQllcnIgPSB3cml0ZV9pbmRlbnQoZW1pdHRlcik7CisJ CQkJaWYgKGVycikKKwkJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJfQorCisJCWlmIChjaGVja19l bXB0eV9kb2N1bWVudChlbWl0dGVyKSkKKwkJCWltcGxpY2l0ID0gMDsKKworCQlpZiAoIWltcGxp Y2l0KSB7CisJCQllcnIgPSB3cml0ZV9pbmRlbnQoZW1pdHRlcik7CisJCQlpZiAoZXJyKQorCQkJ CXJldHVybiBlcnI7CisKKwkJCWVyciA9IHdyaXRlX2luZGljYXRvcihlbWl0dGVyLCAiLS0tIiwg MSwgMCwgMCk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisKKwkJCWlmIChlbWl0dGVy LT5jYW5vbmljYWwpIHsKKwkJCQllcnIgPSB3cml0ZV9pbmRlbnQoZW1pdHRlcik7CisJCQkJaWYg KGVycikKKwkJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJfQorCisJCWVtaXR0ZXItPnN0YXRlID0g RU1JVF9ET0NVTUVOVF9DT05URU5UX1NUQVRFOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZXZl bnQtPnR5cGUgPT0gWUFNTF9TVFJFQU1fRU5EX0VWRU5UKSB7CisJCWVyciA9IGZsdXNoKGVtaXR0 ZXIpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQllbWl0dGVyLT5zdGF0ZSA9IEVN SVRfRU5EX1NUQVRFOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gc2V0X2Vycm9yKGVtaXR0 ZXIsICJleHBlY3RlZCBET0NVTUVOVC1TVEFSVCBvciBTVFJFQU0tRU5EIik7Cit9CisKK3N0YXRp YyBpbnQKK2VtaXRfZG9jdW1lbnRfZW5kKHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIsIGNv bnN0IHN0cnVjdCB5YW1sX2V2ZW50ICpldmVudCkKK3sKKwlpbnQgZXJyOworCisJaWYgKGV2ZW50 LT50eXBlID09IFlBTUxfRE9DVU1FTlRfRU5EX0VWRU5UKSB7CisJCWVyciA9IHdyaXRlX2luZGVu dChlbWl0dGVyKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJaWYgKCFldmVudC0+ ZG9jdW1lbnRfZW5kLmltcGxpY2l0KSB7CisJCQllcnIgPSB3cml0ZV9pbmRpY2F0b3IoZW1pdHRl ciwgIi4uLiIsIDEsIDAsIDApOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCisJCQll cnIgPSB3cml0ZV9pbmRlbnQoZW1pdHRlcik7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7 CisJCX0KKworCQllcnIgPSBmbHVzaChlbWl0dGVyKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBl cnI7CisKKwkJZW1pdHRlci0+c3RhdGUgPSBFTUlUX0RPQ1VNRU5UX1NUQVJUX1NUQVRFOworCisJ CXdoaWxlICghRU1QVFkoZW1pdHRlciwgZW1pdHRlci0+dGFncykpIHsKKwkJCXN0cnVjdCB5YW1s X3RhZ19kaXJlY3RpdmUgdGFnID0KKwkJCQlQT1AoZW1pdHRlciwgZW1pdHRlci0+dGFncyk7CisK KwkJCWtmcmVlKHRhZy5oYW5kbGUpOworCQkJa2ZyZWUodGFnLnByZWZpeCk7CisJCX0KKworCQly ZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gc2V0X2Vycm9yKGVtaXR0ZXIsICJleHBlY3RlZCBET0NV TUVOVC1FTkQiKTsKK30KKworc3RhdGljIGludAorZW1pdF9hbGlhcyhzdHJ1Y3QgeWFtbF9lbWl0 dGVyICplbWl0dGVyLCBjb25zdCBzdHJ1Y3QgeWFtbF9ldmVudCAqZXZlbnQpCit7CisJaW50IGVy cjsKKworCWVyciA9IGVtaXRfYW5jaG9yKGVtaXR0ZXIpOworCWlmIChlcnIpCisJCXJldHVybiBl cnI7CisKKwllbWl0dGVyLT5zdGF0ZSA9IFBPUChlbWl0dGVyLCBlbWl0dGVyLT5zdGF0ZXMpOwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzZWxlY3Rfc2NhbGFyX3N0eWxlKHN0cnVjdCB5 YW1sX2VtaXR0ZXIgKmVtaXR0ZXIsIGNvbnN0IHN0cnVjdCB5YW1sX2V2ZW50ICpldmVudCkKK3sK KwllbnVtIHlhbWxfc2NhbGFyX3N0eWxlIHN0eWxlID0gZXZlbnQtPnNjYWxhci5zdHlsZTsKKwli b29sIG5vX3RhZyA9ICFlbWl0dGVyLT50YWdfZGF0YS5oYW5kbGUgJiYgIWVtaXR0ZXItPnRhZ19k YXRhLnN1ZmZpeDsKKworCWlmIChub190YWcgJiYKKwkgICAgIWV2ZW50LT5zY2FsYXIucGxhaW5f aW1wbGljaXQgJiYKKwkgICAgIWV2ZW50LT5zY2FsYXIucXVvdGVkX2ltcGxpY2l0KQorCQlyZXR1 cm4gc2V0X2Vycm9yKGVtaXR0ZXIsCisJCQkJICJuZWl0aGVyIHRhZyBub3IgaW1wbGljaXQgZmxh Z3MgYXJlIHNwZWNpZmllZCIpOworCisJaWYgKHN0eWxlID09IFlBTUxfQU5ZX1NDQUxBUl9TVFlM RSkKKwkJc3R5bGUgPSBZQU1MX1BMQUlOX1NDQUxBUl9TVFlMRTsKKworCWlmIChlbWl0dGVyLT5j YW5vbmljYWwpCisJCXN0eWxlID0gWUFNTF9ET1VCTEVfUVVPVEVEX1NDQUxBUl9TVFlMRTsKKwor CWlmIChlbWl0dGVyLT5zaW1wbGVfa2V5X2NvbnRleHQgJiYgZW1pdHRlci0+c2NhbGFyX2RhdGEu bXVsdGlsaW5lKQorCQlzdHlsZSA9IFlBTUxfRE9VQkxFX1FVT1RFRF9TQ0FMQVJfU1RZTEU7CisK KwlpZiAoc3R5bGUgPT0gWUFNTF9QTEFJTl9TQ0FMQVJfU1RZTEUpIHsKKwkJaWYgKChlbWl0dGVy LT5mbG93X2xldmVsICYmICFlbWl0dGVyLT5zY2FsYXJfZGF0YS5mbG93X3BsYWluX2FsbG93ZWQp IHx8CisJCSAgICAoIWVtaXR0ZXItPmZsb3dfbGV2ZWwgJiYgIWVtaXR0ZXItPnNjYWxhcl9kYXRh LmJsb2NrX3BsYWluX2FsbG93ZWQpKQorCQkJc3R5bGUgPSBZQU1MX1NJTkdMRV9RVU9URURfU0NB TEFSX1NUWUxFOworCisJCWlmICghZW1pdHRlci0+c2NhbGFyX2RhdGEubGVuZ3RoICYmCisJCSAg ICAoZW1pdHRlci0+Zmxvd19sZXZlbCB8fCBlbWl0dGVyLT5zaW1wbGVfa2V5X2NvbnRleHQpKQor CQkJc3R5bGUgPSBZQU1MX1NJTkdMRV9RVU9URURfU0NBTEFSX1NUWUxFOworCisJCWlmIChub190 YWcgJiYgIWV2ZW50LT5zY2FsYXIucGxhaW5faW1wbGljaXQpCisJCQlzdHlsZSA9IFlBTUxfU0lO R0xFX1FVT1RFRF9TQ0FMQVJfU1RZTEU7CisJfQorCisJaWYgKHN0eWxlID09IFlBTUxfU0lOR0xF X1FVT1RFRF9TQ0FMQVJfU1RZTEUpIHsKKwkJaWYgKCFlbWl0dGVyLT5zY2FsYXJfZGF0YS5zaW5n bGVfcXVvdGVkX2FsbG93ZWQpCisJCQlzdHlsZSA9IFlBTUxfRE9VQkxFX1FVT1RFRF9TQ0FMQVJf U1RZTEU7CisJfQorCisJaWYgKHN0eWxlID09IFlBTUxfTElURVJBTF9TQ0FMQVJfU1RZTEUgfHwK KwkgICAgc3R5bGUgPT0gWUFNTF9GT0xERURfU0NBTEFSX1NUWUxFKSB7CisJCWlmICghZW1pdHRl ci0+c2NhbGFyX2RhdGEuYmxvY2tfYWxsb3dlZCB8fAorCQkgICAgZW1pdHRlci0+Zmxvd19sZXZl bCB8fAorCQkgICAgZW1pdHRlci0+c2ltcGxlX2tleV9jb250ZXh0KQorCQkJc3R5bGUgPSBZQU1M X0RPVUJMRV9RVU9URURfU0NBTEFSX1NUWUxFOworCX0KKworCWlmIChub190YWcgJiYgIWV2ZW50 LT5zY2FsYXIucXVvdGVkX2ltcGxpY2l0ICYmCisJICAgIHN0eWxlICE9IFlBTUxfUExBSU5fU0NB TEFSX1NUWUxFKSB7CisJCWVtaXR0ZXItPnRhZ19kYXRhLmhhbmRsZSA9ICIhIjsKKwkJZW1pdHRl ci0+dGFnX2RhdGEuaGFuZGxlX2xlbmd0aCA9IDE7CisJfQorCisJZW1pdHRlci0+c2NhbGFyX2Rh dGEuc3R5bGUgPSBzdHlsZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZW1pdF9zY2Fs YXIoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwgY29uc3Qgc3RydWN0IHlhbWxfZXZlbnQg KmV2ZW50KQoreworCWludCBlcnI7CisKKwllcnIgPSBzZWxlY3Rfc2NhbGFyX3N0eWxlKGVtaXR0 ZXIsIGV2ZW50KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gZW1pdF9hbmNo b3IoZW1pdHRlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHdyaXRlX3Rh ZyhlbWl0dGVyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gaW5jcmVhc2Vf aW5kZW50KGVtaXR0ZXIsIDEsIDApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIg PSB3cml0ZV9zY2FsYXIoZW1pdHRlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVt aXR0ZXItPmluZGVudCA9IFBPUChlbWl0dGVyLCBlbWl0dGVyLT5pbmRlbnRzKTsKKwllbWl0dGVy LT5zdGF0ZSA9IFBPUChlbWl0dGVyLCBlbWl0dGVyLT5zdGF0ZXMpOworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50CitlbWl0X3NlcXVlbmNlX3N0YXJ0KHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVt aXR0ZXIsIGNvbnN0IHN0cnVjdCB5YW1sX2V2ZW50ICpldmVudCkKK3sKKwlpbnQgZXJyOworCisJ ZXJyID0gZW1pdF9hbmNob3IoZW1pdHRlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwor CWVyciA9IHdyaXRlX3RhZyhlbWl0dGVyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJ aWYgKGVtaXR0ZXItPmZsb3dfbGV2ZWwgfHwgZW1pdHRlci0+Y2Fub25pY2FsIHx8CisJICAgIGV2 ZW50LT5zZXF1ZW5jZV9zdGFydC5zdHlsZSA9PSBZQU1MX0ZMT1dfU0VRVUVOQ0VfU1RZTEUgfHwK KwkgICAgY2hlY2tfZW1wdHlfc2VxdWVuY2UoZW1pdHRlcikpIHsKKwkJZW1pdHRlci0+c3RhdGUg PSBFTUlUX0ZMT1dfU0VRVUVOQ0VfRklSU1RfSVRFTV9TVEFURTsKKwl9IGVsc2UgeworCQllbWl0 dGVyLT5zdGF0ZSA9IEVNSVRfQkxPQ0tfU0VRVUVOQ0VfRklSU1RfSVRFTV9TVEFURTsKKwl9CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZW1pdF9tYXBwaW5nX3N0YXJ0KHN0cnVjdCB5 YW1sX2VtaXR0ZXIgKmVtaXR0ZXIsIGNvbnN0IHN0cnVjdCB5YW1sX2V2ZW50ICpldmVudCkKK3sK KwlpbnQgZXJyOworCisJZXJyID0gZW1pdF9hbmNob3IoZW1pdHRlcik7CisJaWYgKGVycikKKwkJ cmV0dXJuIGVycjsKKworCWVyciA9IHdyaXRlX3RhZyhlbWl0dGVyKTsKKwlpZiAoZXJyKQorCQly ZXR1cm4gZXJyOworCisJaWYgKGVtaXR0ZXItPmZsb3dfbGV2ZWwgfHwKKwkgICAgZW1pdHRlci0+ Y2Fub25pY2FsIHx8CisJICAgIGV2ZW50LT5tYXBwaW5nX3N0YXJ0LnN0eWxlID09IFlBTUxfRkxP V19NQVBQSU5HX1NUWUxFIHx8CisJICAgIGNoZWNrX2VtcHR5X21hcHBpbmcoZW1pdHRlcikpIHsK KwkJZW1pdHRlci0+c3RhdGUgPSBFTUlUX0ZMT1dfTUFQUElOR19GSVJTVF9LRVlfU1RBVEU7CisJ fSBlbHNlIHsKKwkJZW1pdHRlci0+c3RhdGUgPSBFTUlUX0JMT0NLX01BUFBJTkdfRklSU1RfS0VZ X1NUQVRFOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitlbWl0X25vZGUoc3Ry dWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwgY29uc3Qgc3RydWN0IHlhbWxfZXZlbnQgKmV2ZW50 LAorCSAgaW50IHJvb3QsIGludCBzZXF1ZW5jZSwgaW50IG1hcHBpbmcsIGludCBzaW1wbGVfa2V5 KQoreworCWVtaXR0ZXItPnJvb3RfY29udGV4dCA9IHJvb3Q7CisJZW1pdHRlci0+c2VxdWVuY2Vf Y29udGV4dCA9IHNlcXVlbmNlOworCWVtaXR0ZXItPm1hcHBpbmdfY29udGV4dCA9IG1hcHBpbmc7 CisJZW1pdHRlci0+c2ltcGxlX2tleV9jb250ZXh0ID0gc2ltcGxlX2tleTsKKworCXN3aXRjaCAo ZXZlbnQtPnR5cGUpIHsKKwljYXNlIFlBTUxfQUxJQVNfRVZFTlQ6CisJCXJldHVybiBlbWl0X2Fs aWFzKGVtaXR0ZXIsIGV2ZW50KTsKKworCWNhc2UgWUFNTF9TQ0FMQVJfRVZFTlQ6CisJCXJldHVy biBlbWl0X3NjYWxhcihlbWl0dGVyLCBldmVudCk7CisKKwljYXNlIFlBTUxfU0VRVUVOQ0VfU1RB UlRfRVZFTlQ6CisJCXJldHVybiBlbWl0X3NlcXVlbmNlX3N0YXJ0KGVtaXR0ZXIsIGV2ZW50KTsK KworCWNhc2UgWUFNTF9NQVBQSU5HX1NUQVJUX0VWRU5UOgorCQlyZXR1cm4gZW1pdF9tYXBwaW5n X3N0YXJ0KGVtaXR0ZXIsIGV2ZW50KTsKKworCWRlZmF1bHQ6CisJCXJldHVybiBzZXRfZXJyb3Io ZW1pdHRlciwKKwkJCQkgImV4cGVjdGVkIFNDQUxBUiwgU0VRVUVOQ0UtU1RBUlQsIE1BUFBJTkct U1RBUlQsIG9yIEFMSUFTIik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2Vt aXRfZG9jdW1lbnRfY29udGVudChzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLCBjb25zdCBz dHJ1Y3QgeWFtbF9ldmVudCAqZXZlbnQpCit7CisJaW50IGVycjsKKworCWVyciA9IFBVU0goZW1p dHRlciwgZW1pdHRlci0+c3RhdGVzLCBFTUlUX0RPQ1VNRU5UX0VORF9TVEFURSk7CisJaWYgKGVy cikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBlbWl0X25vZGUoZW1pdHRlciwgZXZlbnQsIDEs IDAsIDAsIDApOworfQorCitzdGF0aWMgaW50CitlbWl0X2Zsb3dfc2VxdWVuY2VfaXRlbShzdHJ1 Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkJY29uc3Qgc3RydWN0IHlhbWxfZXZlbnQgKmV2 ZW50LAorCQkJYm9vbCBmaXJzdCkKK3sKKwlpbnQgZXJyOworCisJaWYgKGZpcnN0KSB7CisJCWVy ciA9IHdyaXRlX2luZGljYXRvcihlbWl0dGVyLCAiWyIsIDEsIDEsIDApOworCQlpZiAoZXJyKQor CQkJcmV0dXJuIGVycjsKKworCQllcnIgPSBpbmNyZWFzZV9pbmRlbnQoZW1pdHRlciwgMSwgMCk7 CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWVtaXR0ZXItPmZsb3dfbGV2ZWwrKzsK Kwl9CisKKwlpZiAoZXZlbnQtPnR5cGUgPT0gWUFNTF9TRVFVRU5DRV9FTkRfRVZFTlQpIHsKKwkJ ZW1pdHRlci0+Zmxvd19sZXZlbC0tOworCQllbWl0dGVyLT5pbmRlbnQgPSBQT1AoZW1pdHRlciwg ZW1pdHRlci0+aW5kZW50cyk7CisKKwkJaWYgKGVtaXR0ZXItPmNhbm9uaWNhbCAmJiAhZmlyc3Qp IHsKKwkJCWVyciA9IHdyaXRlX2luZGljYXRvcihlbWl0dGVyLCAiLCIsIDAsIDAsIDApOworCQkJ aWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCisJCQllcnIgPSB3cml0ZV9pbmRlbnQoZW1pdHRl cik7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCX0KKworCQllcnIgPSB3cml0ZV9p bmRpY2F0b3IoZW1pdHRlciwgIl0iLCAwLCAwLCAwKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBl cnI7CisKKwkJZW1pdHRlci0+c3RhdGUgPSBQT1AoZW1pdHRlciwgZW1pdHRlci0+c3RhdGVzKTsK KwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFmaXJzdCkgeworCQllcnIgPSB3cml0ZV9pbmRpY2F0 b3IoZW1pdHRlciwgIiwiLCAwLCAwLCAwKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJ fQorCisJaWYgKGVtaXR0ZXItPmNhbm9uaWNhbCB8fCBlbWl0dGVyLT5jb2x1bW4gPiBlbWl0dGVy LT5iZXN0X3dpZHRoKSB7CisJCWVyciA9IHdyaXRlX2luZGVudChlbWl0dGVyKTsKKwkJaWYgKGVy cikKKwkJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gUFVTSChlbWl0dGVyLCBlbWl0dGVyLT5z dGF0ZXMsIEVNSVRfRkxPV19TRVFVRU5DRV9JVEVNX1NUQVRFKTsKKwlpZiAoZXJyKQorCQlyZXR1 cm4gZXJyOworCisJcmV0dXJuIGVtaXRfbm9kZShlbWl0dGVyLCBldmVudCwgMCwgMSwgMCwgMCk7 Cit9CisKK3N0YXRpYyBpbnQKK2VtaXRfZmxvd19tYXBwaW5nX2tleShzdHJ1Y3QgeWFtbF9lbWl0 dGVyICplbWl0dGVyLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgeWFtbF9ldmVudCAqZXZlbnQsIGlu dCBmaXJzdCkKK3sKKwlpbnQgZXJyOworCisJaWYgKGZpcnN0KSB7CisJCWVyciA9IHdyaXRlX2lu ZGljYXRvcihlbWl0dGVyLCAieyIsIDEsIDEsIDApOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVy cjsKKworCQllcnIgPSBpbmNyZWFzZV9pbmRlbnQoZW1pdHRlciwgMSwgMCk7CisJCWlmIChlcnIp CisJCQlyZXR1cm4gZXJyOworCisJCWVtaXR0ZXItPmZsb3dfbGV2ZWwrKzsKKwl9CisKKwlpZiAo ZXZlbnQtPnR5cGUgPT0gWUFNTF9NQVBQSU5HX0VORF9FVkVOVCkgeworCQllbWl0dGVyLT5mbG93 X2xldmVsLS07CisJCWVtaXR0ZXItPmluZGVudCA9IFBPUChlbWl0dGVyLCBlbWl0dGVyLT5pbmRl bnRzKTsKKworCQlpZiAoZW1pdHRlci0+Y2Fub25pY2FsICYmICFmaXJzdCkgeworCQkJZXJyID0g d3JpdGVfaW5kaWNhdG9yKGVtaXR0ZXIsICIsIiwgMCwgMCwgMCk7CisJCQlpZiAoZXJyKQorCQkJ CXJldHVybiBlcnI7CisKKwkJCWVyciA9IHdyaXRlX2luZGVudChlbWl0dGVyKTsKKwkJCWlmIChl cnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCWVyciA9IHdyaXRlX2luZGljYXRvcihlbWl0 dGVyLCAifSIsIDAsIDAsIDApOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQllbWl0 dGVyLT5zdGF0ZSA9IFBPUChlbWl0dGVyLCBlbWl0dGVyLT5zdGF0ZXMpOworCQlyZXR1cm4gMDsK Kwl9CisKKwlpZiAoIWZpcnN0KSB7CisJCWVyciA9IHdyaXRlX2luZGljYXRvcihlbWl0dGVyLCAi LCIsIDAsIDAsIDApOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoZW1p dHRlci0+Y2Fub25pY2FsIHx8IGVtaXR0ZXItPmNvbHVtbiA+IGVtaXR0ZXItPmJlc3Rfd2lkdGgp IHsKKwkJZXJyID0gd3JpdGVfaW5kZW50KGVtaXR0ZXIpOworCQlpZiAoZXJyKQorCQkJcmV0dXJu IGVycjsKKwl9CisKKwlpZiAoIWVtaXR0ZXItPmNhbm9uaWNhbCAmJiBjaGVja19zaW1wbGVfa2V5 KGVtaXR0ZXIpKSB7CisJCWVyciA9IFBVU0goZW1pdHRlciwgZW1pdHRlci0+c3RhdGVzLAorCQkJ ICAgRU1JVF9GTE9XX01BUFBJTkdfU0lNUExFX1ZBTFVFX1NUQVRFKTsKKwkJaWYgKGVycikKKwkJ CXJldHVybiBlcnI7CisKKwkJcmV0dXJuIGVtaXRfbm9kZShlbWl0dGVyLCBldmVudCwgMCwgMCwg MSwgMSk7CisJfQorCisJZXJyID0gd3JpdGVfaW5kaWNhdG9yKGVtaXR0ZXIsICI/IiwgMSwgMCwg MCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IFBVU0goZW1pdHRlciwgZW1p dHRlci0+c3RhdGVzLCBFTUlUX0ZMT1dfTUFQUElOR19WQUxVRV9TVEFURSk7CisJaWYgKGVycikK KwkJcmV0dXJuIGVycjsKKworCXJldHVybiBlbWl0X25vZGUoZW1pdHRlciwgZXZlbnQsIDAsIDAs IDEsIDApOworfQorCitzdGF0aWMgaW50CitlbWl0X2Zsb3dfbWFwcGluZ192YWx1ZShzdHJ1Y3Qg eWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkJY29uc3Qgc3RydWN0IHlhbWxfZXZlbnQgKmV2ZW50 LCBpbnQgc2ltcGxlKQoreworCWludCBlcnI7CisKKwlpZiAoc2ltcGxlKSB7CisJCWVyciA9IHdy aXRlX2luZGljYXRvcihlbWl0dGVyLCAiOiIsIDAsIDAsIDApOworCQlpZiAoZXJyKQorCQkJcmV0 dXJuIGVycjsKKwl9IGVsc2UgeworCQlpZiAoZW1pdHRlci0+Y2Fub25pY2FsIHx8CisJCSAgICBl bWl0dGVyLT5jb2x1bW4gPiBlbWl0dGVyLT5iZXN0X3dpZHRoKSB7CisJCQllcnIgPSB3cml0ZV9p bmRlbnQoZW1pdHRlcik7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCX0KKworCQll cnIgPSB3cml0ZV9pbmRpY2F0b3IoZW1pdHRlciwgIjoiLCAxLCAwLCAwKTsKKwkJaWYgKGVycikK KwkJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gUFVTSChlbWl0dGVyLCBlbWl0dGVyLT5zdGF0 ZXMsIEVNSVRfRkxPV19NQVBQSU5HX0tFWV9TVEFURSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVy cjsKKworCXJldHVybiBlbWl0X25vZGUoZW1pdHRlciwgZXZlbnQsIDAsIDAsIDEsIDApOworfQor CitzdGF0aWMgaW50CitlbWl0X2Jsb2NrX3NlcXVlbmNlX2l0ZW0oc3RydWN0IHlhbWxfZW1pdHRl ciAqZW1pdHRlciwKKwkJCSBjb25zdCBzdHJ1Y3QgeWFtbF9ldmVudCAqZXZlbnQsIGludCBmaXJz dCkKK3sKKwlpbnQgZXJyOworCisJaWYgKGZpcnN0KSB7CisJCWVyciA9IGluY3JlYXNlX2luZGVu dChlbWl0dGVyLCAwLAorCQkJCSAgICAgIGVtaXR0ZXItPm1hcHBpbmdfY29udGV4dCAmJgorCQkJ CSAgICAgICFlbWl0dGVyLT5pbmRlbnRpb24pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsK Kwl9CisKKwlpZiAoZXZlbnQtPnR5cGUgPT0gWUFNTF9TRVFVRU5DRV9FTkRfRVZFTlQpIHsKKwkJ ZW1pdHRlci0+aW5kZW50ID0gUE9QKGVtaXR0ZXIsIGVtaXR0ZXItPmluZGVudHMpOworCQllbWl0 dGVyLT5zdGF0ZSA9IFBPUChlbWl0dGVyLCBlbWl0dGVyLT5zdGF0ZXMpOworCQlyZXR1cm4gMDsK Kwl9CisKKwllcnIgPSB3cml0ZV9pbmRlbnQoZW1pdHRlcik7CisJaWYgKGVycikKKwkJcmV0dXJu IGVycjsKKworCWVyciA9IHdyaXRlX2luZGljYXRvcihlbWl0dGVyLCAiLSIsIDEsIDAsIDEpOwor CWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBQVVNIKGVtaXR0ZXIsIGVtaXR0ZXIt PnN0YXRlcywgRU1JVF9CTE9DS19TRVFVRU5DRV9JVEVNX1NUQVRFKTsKKwlpZiAoZXJyKQorCQly ZXR1cm4gZXJyOworCisJcmV0dXJuIGVtaXRfbm9kZShlbWl0dGVyLCBldmVudCwgMCwgMSwgMCwg MCk7Cit9CisKK3N0YXRpYyBpbnQKK2VtaXRfYmxvY2tfbWFwcGluZ19rZXkoc3RydWN0IHlhbWxf ZW1pdHRlciAqZW1pdHRlciwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCB5YW1sX2V2ZW50ICpldmVu dCwgaW50IGZpcnN0KQoreworCWludCBlcnI7CisKKwlpZiAoZmlyc3QpIHsKKwkJZXJyID0gaW5j cmVhc2VfaW5kZW50KGVtaXR0ZXIsIDAsIDApOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsK Kwl9CisKKwlpZiAoZXZlbnQtPnR5cGUgPT0gWUFNTF9NQVBQSU5HX0VORF9FVkVOVCkgeworCQll bWl0dGVyLT5pbmRlbnQgPSBQT1AoZW1pdHRlciwgZW1pdHRlci0+aW5kZW50cyk7CisJCWVtaXR0 ZXItPnN0YXRlID0gUE9QKGVtaXR0ZXIsIGVtaXR0ZXItPnN0YXRlcyk7CisJCXJldHVybiAwOwor CX0KKworCWVyciA9IHdyaXRlX2luZGVudChlbWl0dGVyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4g ZXJyOworCisJaWYgKGNoZWNrX3NpbXBsZV9rZXkoZW1pdHRlcikpIHsKKwkJZXJyID0gUFVTSChl bWl0dGVyLCBlbWl0dGVyLT5zdGF0ZXMsCisJCQkgICBFTUlUX0JMT0NLX01BUFBJTkdfU0lNUExF X1ZBTFVFX1NUQVRFKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJcmV0dXJuIGVt aXRfbm9kZShlbWl0dGVyLCBldmVudCwgMCwgMCwgMSwgMSk7CisJfSBlbHNlIHsKKwkJZXJyID0g d3JpdGVfaW5kaWNhdG9yKGVtaXR0ZXIsICI/IiwgMSwgMCwgMSk7CisJCWlmIChlcnIpCisJCQly ZXR1cm4gZXJyOworCisJCWVyciA9IFBVU0goZW1pdHRlciwgZW1pdHRlci0+c3RhdGVzLAorCQkJ ICAgRU1JVF9CTE9DS19NQVBQSU5HX1ZBTFVFX1NUQVRFKTsKKwkJaWYgKGVycikKKwkJCXJldHVy biBlcnI7CisKKwkJcmV0dXJuIGVtaXRfbm9kZShlbWl0dGVyLCBldmVudCwgMCwgMCwgMSwgMCk7 CisJfQorfQorCitzdGF0aWMgaW50CitlbWl0X2Jsb2NrX21hcHBpbmdfdmFsdWUoc3RydWN0IHlh bWxfZW1pdHRlciAqZW1pdHRlciwKKwkJCSBjb25zdCBzdHJ1Y3QgeWFtbF9ldmVudCAqZXZlbnQs IGludCBzaW1wbGUpCit7CisJaW50IGVycjsKKworCWlmIChzaW1wbGUpIHsKKwkJZXJyID0gd3Jp dGVfaW5kaWNhdG9yKGVtaXR0ZXIsICI6IiwgMCwgMCwgMCk7CisJCWlmIChlcnIpCisJCQlyZXR1 cm4gZXJyOworCX0gZWxzZSB7CisJCWVyciA9IHdyaXRlX2luZGVudChlbWl0dGVyKTsKKwkJaWYg KGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJZXJyID0gd3JpdGVfaW5kaWNhdG9yKGVtaXR0ZXIs ICI6IiwgMSwgMCwgMSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9 IFBVU0goZW1pdHRlciwgZW1pdHRlci0+c3RhdGVzLCBFTUlUX0JMT0NLX01BUFBJTkdfS0VZX1NU QVRFKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIGVtaXRfbm9kZShlbWl0 dGVyLCBldmVudCwgMCwgMCwgMSwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK2VtaXR0ZXJfc3RhdGVf bWFjaGluZShzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkgICAgICBjb25zdCBzdHJ1 Y3QgeWFtbF9ldmVudCAqZXZlbnQpCit7CisJc3dpdGNoIChlbWl0dGVyLT5zdGF0ZSkgeworCWNh c2UgRU1JVF9TVFJFQU1fU1RBUlRfU1RBVEU6CisJCXJldHVybiBlbWl0X3N0cmVhbV9zdGFydChl bWl0dGVyLCBldmVudCk7CisKKwljYXNlIEVNSVRfRklSU1RfRE9DVU1FTlRfU1RBUlRfU1RBVEU6 CisJCXJldHVybiBlbWl0X2RvY3VtZW50X3N0YXJ0KGVtaXR0ZXIsIGV2ZW50LCB0cnVlKTsKKwor CWNhc2UgRU1JVF9ET0NVTUVOVF9TVEFSVF9TVEFURToKKwkJcmV0dXJuIGVtaXRfZG9jdW1lbnRf c3RhcnQoZW1pdHRlciwgZXZlbnQsIGZhbHNlKTsKKworCWNhc2UgRU1JVF9ET0NVTUVOVF9DT05U RU5UX1NUQVRFOgorCQlyZXR1cm4gZW1pdF9kb2N1bWVudF9jb250ZW50KGVtaXR0ZXIsIGV2ZW50 KTsKKworCWNhc2UgRU1JVF9ET0NVTUVOVF9FTkRfU1RBVEU6CisJCXJldHVybiBlbWl0X2RvY3Vt ZW50X2VuZChlbWl0dGVyLCBldmVudCk7CisKKwljYXNlIEVNSVRfRkxPV19TRVFVRU5DRV9GSVJT VF9JVEVNX1NUQVRFOgorCQlyZXR1cm4gZW1pdF9mbG93X3NlcXVlbmNlX2l0ZW0oZW1pdHRlciwg ZXZlbnQsIHRydWUpOworCisJY2FzZSBFTUlUX0ZMT1dfU0VRVUVOQ0VfSVRFTV9TVEFURToKKwkJ cmV0dXJuIGVtaXRfZmxvd19zZXF1ZW5jZV9pdGVtKGVtaXR0ZXIsIGV2ZW50LCBmYWxzZSk7CisK KwljYXNlIEVNSVRfRkxPV19NQVBQSU5HX0ZJUlNUX0tFWV9TVEFURToKKwkJcmV0dXJuIGVtaXRf Zmxvd19tYXBwaW5nX2tleShlbWl0dGVyLCBldmVudCwgdHJ1ZSk7CisKKwljYXNlIEVNSVRfRkxP V19NQVBQSU5HX0tFWV9TVEFURToKKwkJcmV0dXJuIGVtaXRfZmxvd19tYXBwaW5nX2tleShlbWl0 dGVyLCBldmVudCwgZmFsc2UpOworCisJY2FzZSBFTUlUX0ZMT1dfTUFQUElOR19TSU1QTEVfVkFM VUVfU1RBVEU6CisJCXJldHVybiBlbWl0X2Zsb3dfbWFwcGluZ192YWx1ZShlbWl0dGVyLCBldmVu dCwgdHJ1ZSk7CisKKwljYXNlIEVNSVRfRkxPV19NQVBQSU5HX1ZBTFVFX1NUQVRFOgorCQlyZXR1 cm4gZW1pdF9mbG93X21hcHBpbmdfdmFsdWUoZW1pdHRlciwgZXZlbnQsIGZhbHNlKTsKKworCWNh c2UgRU1JVF9CTE9DS19TRVFVRU5DRV9GSVJTVF9JVEVNX1NUQVRFOgorCQlyZXR1cm4gZW1pdF9i bG9ja19zZXF1ZW5jZV9pdGVtKGVtaXR0ZXIsIGV2ZW50LCB0cnVlKTsKKworCWNhc2UgRU1JVF9C TE9DS19TRVFVRU5DRV9JVEVNX1NUQVRFOgorCQlyZXR1cm4gZW1pdF9ibG9ja19zZXF1ZW5jZV9p dGVtKGVtaXR0ZXIsIGV2ZW50LCBmYWxzZSk7CisKKwljYXNlIEVNSVRfQkxPQ0tfTUFQUElOR19G SVJTVF9LRVlfU1RBVEU6CisJCXJldHVybiBlbWl0X2Jsb2NrX21hcHBpbmdfa2V5KGVtaXR0ZXIs IGV2ZW50LCB0cnVlKTsKKworCWNhc2UgRU1JVF9CTE9DS19NQVBQSU5HX0tFWV9TVEFURToKKwkJ cmV0dXJuIGVtaXRfYmxvY2tfbWFwcGluZ19rZXkoZW1pdHRlciwgZXZlbnQsIGZhbHNlKTsKKwor CWNhc2UgRU1JVF9CTE9DS19NQVBQSU5HX1NJTVBMRV9WQUxVRV9TVEFURToKKwkJcmV0dXJuIGVt aXRfYmxvY2tfbWFwcGluZ192YWx1ZShlbWl0dGVyLCBldmVudCwgdHJ1ZSk7CisKKwljYXNlIEVN SVRfQkxPQ0tfTUFQUElOR19WQUxVRV9TVEFURToKKwkJcmV0dXJuIGVtaXRfYmxvY2tfbWFwcGlu Z192YWx1ZShlbWl0dGVyLCBldmVudCwgZmFsc2UpOworCisJY2FzZSBFTUlUX0VORF9TVEFURToK KwkJcmV0dXJuIHNldF9lcnJvcihlbWl0dGVyLCAiZXhwZWN0ZWQgbm90aGluZyBhZnRlciBTVFJF QU0tRU5EIik7CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwor dm9pZCB5YW1sX2VtaXR0ZXJfZW1pdChzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLCBzdHJ1 Y3QgeWFtbF9ldmVudCAqZXZlbnQpCit7CisJaWYgKCFldmVudCB8fCAhZW1pdHRlciB8fCBlbWl0 dGVyLT5lcnJubykgeworCQl5YW1sX2V2ZW50X2RlbGV0ZShldmVudCk7CisJCXJldHVybjsKKwl9 CisKKwlsaXN0X2FkZF90YWlsKCZldmVudC0+bGluaywgJmVtaXR0ZXItPmV2ZW50cyk7CisJZW1p dHRlci0+bnVtX2V2ZW50cysrOworCisJd2hpbGUgKCFuZWVkX21vcmVfZXZlbnRzKGVtaXR0ZXIp KSB7CisJCWV2ZW50ID0gbmV4dF9ldmVudChlbWl0dGVyKTsKKworCQlpZiAoYW5hbHl6ZV9ldmVu dChlbWl0dGVyLCBldmVudCkpCisJCQlyZXR1cm47CisKKwkJaWYgKGVtaXR0ZXJfc3RhdGVfbWFj aGluZShlbWl0dGVyLCBldmVudCkpCisJCQlyZXR1cm47CisKKwkJZW1pdHRlci0+bnVtX2V2ZW50 cy0tOworCQlsaXN0X2RlbCgmZXZlbnQtPmxpbmspOworCQl5YW1sX2V2ZW50X2RlbGV0ZShldmVu dCk7CisJfQorfQorRVhQT1JUX1NZTUJPTCh5YW1sX2VtaXR0ZXJfZW1pdCk7CisKK2ludCB5YW1s X2VtaXR0ZXJfZmx1c2goc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwgY29uc3QgY2hhciAq KnByb2JsZW0pCit7CisJaW50IGVycjsKKworCWlmICghZW1pdHRlcikgeworCQlpZiAocHJvYmxl bSkKKwkJCSpwcm9ibGVtID0gImFsbG9jYXRpb24gZXJyb3IiOworCQlyZXR1cm4gLUVOT01FTTsK Kwl9CisKKwlpZiAoZW1pdHRlci0+ZXJybm8pCisJCWVyciA9IGVtaXR0ZXItPmVycm5vOworCWVs c2UKKwkJZXJyID0gZmx1c2goZW1pdHRlcik7CisJaWYgKCFlcnIpCisJCXJldHVybiAwOworCisJ aWYgKHByb2JsZW0pCisJCSpwcm9ibGVtID0gZW1pdHRlci0+cHJvYmxlbTsKKwlyZXR1cm4gZXJy OworfQorRVhQT1JUX1NZTUJPTCh5YW1sX2VtaXR0ZXJfZmx1c2gpOworCitzdGF0aWMgYm9vbCB5 YW1sX3N0YWNrX2V4dGVuZCh2b2lkICoqc3RhcnQsIHZvaWQgKip0b3AsIHZvaWQgKiplbmQpCit7 CisJdm9pZCAqbmV3X3N0YXJ0OworCisJaWYgKCplbmQgLSAqc3RhcnQgPj0gSU5UX01BWCAvIDIp CisJCXJldHVybiBmYWxzZTsKKworCW5ld19zdGFydCA9IGtyZWFsbG9jKCpzdGFydCwgKCplbmQg LSAqc3RhcnQpICogMiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXdfc3RhcnQpCisJCXJldHVybiBm YWxzZTsKKworCSp0b3AgPSBuZXdfc3RhcnQgKyAoKnRvcCAtICpzdGFydCk7CisJKmVuZCA9IG5l d19zdGFydCArICgqZW5kIC0gKnN0YXJ0KSAqIDI7CisJKnN0YXJ0ID0gbmV3X3N0YXJ0OworCisJ cmV0dXJuIHRydWU7Cit9CisKKyNkZWZpbmUgU1RBQ0tfSU5JVChjb250ZXh0LCBzdGFjaykgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSgoKHN0YWNrKS5zdGFydCA9IGtt YWxsb2MoSU5JVElBTF9TVEFDS19TSVpFICogc2l6ZW9mKCooc3RhY2spLiBzdGFydCksXAorCQkJ CSAgZ2ZwKSkgPwkJCVwKKwkoKHN0YWNrKS50b3AgPSAoc3RhY2spLnN0YXJ0LAkJCQkJXAorCShz dGFjaykuZW5kID0gKHN0YWNrKS5zdGFydCArIElOSVRJQUxfU1RBQ0tfU0laRSwJCVwKKwkxKSA6 IDApCisjZGVmaW5lIFNUQUNLX0RFTChjb250ZXh0LCBzdGFjaykga2ZyZWUoKHN0YWNrKS5zdGFy dCkKKworc3RydWN0IHlhbWxfZW1pdHRlciAqeWFtbF9lbWl0dGVyX2NyZWF0ZShnZnBfdCBnZnAp Cit7CisJc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlcjsKKworCWVtaXR0ZXIgPSBremFsbG9j KHNpemVvZigqZW1pdHRlciksIGdmcCk7CisJaWYgKCFlbWl0dGVyKQorCQlyZXR1cm4gTlVMTDsK KworCWVtaXR0ZXItPmdmcCA9IGdmcDsKKwlJTklUX0xJU1RfSEVBRCgmZW1pdHRlci0+ZXZlbnRz KTsKKworCWVtaXR0ZXItPmJ1Zi5zdGFydCA9IGttYWxsb2MoUEFHRV9TSVpFLCBnZnApOworCWlm ICghZW1pdHRlci0+YnVmLnN0YXJ0KQorCQlnb3RvIGVycm9yOworCisJZW1pdHRlci0+YnVmLnBv cyA9IGVtaXR0ZXItPmJ1Zi5zdGFydDsKKwllbWl0dGVyLT5idWYubGFzdCA9IGVtaXR0ZXItPmJ1 Zi5wb3M7CisJZW1pdHRlci0+YnVmLmVuZCA9IGVtaXR0ZXItPmJ1Zi5zdGFydCArIFBBR0VfU0la RTsKKworCWlmICghU1RBQ0tfSU5JVChlbWl0dGVyLCBlbWl0dGVyLT5zdGF0ZXMpKQorCQlnb3Rv IGVycm9yOworCisJaWYgKCFTVEFDS19JTklUKGVtaXR0ZXIsIGVtaXR0ZXItPmluZGVudHMpKQor CQlnb3RvIGVycm9yOworCisJaWYgKCFTVEFDS19JTklUKGVtaXR0ZXIsIGVtaXR0ZXItPnRhZ3Mp KQorCQlnb3RvIGVycm9yOworCisJcmV0dXJuIGVtaXR0ZXI7CisKK2Vycm9yOgorCXlhbWxfZW1p dHRlcl9kZXN0cm95KGVtaXR0ZXIpOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTCh5 YW1sX2VtaXR0ZXJfY3JlYXRlKTsKKworZ2ZwX3QgeWFtbF9lbWl0dGVyX3NldF9nZnAoc3RydWN0 IHlhbWxfZW1pdHRlciAqZW1pdHRlciwgZ2ZwX3QgZ2ZwKQoreworCWdmcF90IG9sZCA9IDA7CisK KwlpZiAoZW1pdHRlcikgeworCQlvbGQgPSBlbWl0dGVyLT5nZnA7CisJCWVtaXR0ZXItPmdmcCA9 IGdmcDsKKwl9CisKKwlyZXR1cm4gb2xkOworfQorRVhQT1JUX1NZTUJPTCh5YW1sX2VtaXR0ZXJf c2V0X2dmcCk7CisKK3N0YXRpYyB2b2lkIGRlbGV0ZV9ldmVudHMoc3RydWN0IHlhbWxfZW1pdHRl ciAqZW1pdHRlcikKK3sKKwlzdHJ1Y3QgeWFtbF9ldmVudCAqZXZlbnQsICpuZXh0OworCisJbGlz dF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2ZW50LCBuZXh0LCAmZW1pdHRlci0+ZXZlbnRzLCBsaW5r KQorCQl5YW1sX2V2ZW50X2RlbGV0ZShldmVudCk7Cit9CisKK3ZvaWQgeWFtbF9lbWl0dGVyX2Rl c3Ryb3koc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlcikKK3sKKwlpZiAoIWVtaXR0ZXIpCisJ CXJldHVybjsKKworCWRlbGV0ZV9ldmVudHMoZW1pdHRlcik7CisKKwlrZnJlZShlbWl0dGVyLT5i dWYuc3RhcnQpOworCVNUQUNLX0RFTChlbWl0dGVyLCBlbWl0dGVyLT5zdGF0ZXMpOworCVNUQUNL X0RFTChlbWl0dGVyLCBlbWl0dGVyLT5pbmRlbnRzKTsKKwl3aGlsZSAoIUVNUFRZKGVtcHR5LCBl bWl0dGVyLT50YWdzKSkgeworCQlzdHJ1Y3QgeWFtbF90YWdfZGlyZWN0aXZlIHRhZyA9CisJCQlQ T1AoZW1pdHRlciwgZW1pdHRlci0+dGFncyk7CisKKwkJa2ZyZWUodGFnLmhhbmRsZSk7CisJCWtm cmVlKHRhZy5wcmVmaXgpOworCX0KKwlTVEFDS19ERUwoZW1pdHRlciwgZW1pdHRlci0+dGFncyk7 CisJa2ZyZWUoZW1pdHRlci0+YW5jaG9ycyk7CisKKwlrZnJlZShlbWl0dGVyKTsKK30KK0VYUE9S VF9TWU1CT0woeWFtbF9lbWl0dGVyX2Rlc3Ryb3kpOworCitzdGF0aWMgaW50IHN0cmluZ193cml0 ZV9oYW5kbGVyKHZvaWQgKmRhdGEsIGNvbnN0IHU4ICpidWZmZXIsIHNpemVfdCBzaXplKQorewor CXN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIgPSBkYXRhOworCXR5cGVvZihlbWl0dGVyLT5v dXRwdXQuc3RyaW5nKSAqb3V0ID0gJmVtaXR0ZXItPm91dHB1dC5zdHJpbmc7CisKKwlpZiAob3V0 LT5zaXplIC0gKm91dC0+c2l6ZV93cml0dGVuIDwgc2l6ZSkKKwkJc2l6ZSA9IG91dC0+c2l6ZSAt ICpvdXQtPnNpemVfd3JpdHRlbjsKKworCW1lbWNweShvdXQtPmJ1ZmZlciArICpvdXQtPnNpemVf d3JpdHRlbiwgYnVmZmVyLCBzaXplKTsKKwkqb3V0LT5zaXplX3dyaXR0ZW4gKz0gc2l6ZTsKKwly ZXR1cm4gMDsKK30KKwordm9pZCB5YW1sX2VtaXR0ZXJfc2V0X3N0cmluZyhzdHJ1Y3QgeWFtbF9l bWl0dGVyICplbWl0dGVyLAorCQkJICAgICB1OCAqb3V0cHV0LAorCQkJICAgICBzaXplX3Qgc2l6 ZSwKKwkJCSAgICAgc2l6ZV90ICpzaXplX3dyaXR0ZW4pCit7CisJaWYgKCFlbWl0dGVyKQorCQly ZXR1cm47CisKKwllbWl0dGVyLT53cml0ZV9oYW5kbGVyID0gc3RyaW5nX3dyaXRlX2hhbmRsZXI7 CisJZW1pdHRlci0+d3JpdGVfZGF0YSA9IGVtaXR0ZXI7CisKKwllbWl0dGVyLT5vdXRwdXQuc3Ry aW5nLmJ1ZmZlciA9IG91dHB1dDsKKwllbWl0dGVyLT5vdXRwdXQuc3RyaW5nLnNpemUgPSBzaXpl OworCWVtaXR0ZXItPm91dHB1dC5zdHJpbmcuc2l6ZV93cml0dGVuID0gc2l6ZV93cml0dGVuOwor CSpzaXplX3dyaXR0ZW4gPSAwOworfQorRVhQT1JUX1NZTUJPTCh5YW1sX2VtaXR0ZXJfc2V0X3N0 cmluZyk7CisKK3N0YXRpYyBpbnQgc2VxX2ZpbGVfd3JpdGVfaGFuZGxlcih2b2lkICpkYXRhLCBj b25zdCB1OCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKwkvKiBJZ25vcmUgdGhlIG92ZXJmbG93 IGVycm9yOyBzZXEgd2lsbCByZXN0YXJ0IHdpdGggYSBsYXJnZXIgYnVmZmVyICovCisJc2VxX3dy aXRlKGRhdGEsIGJ1ZmZlciwgc2l6ZSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgeWFtbF9lbWl0 dGVyX3NldF9zZXFfZmlsZShzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkJICAgICAg IHN0cnVjdCBzZXFfZmlsZSAqZmlsZSkKK3sKKwlpZiAoIWVtaXR0ZXIpCisJCXJldHVybjsKKwor CWVtaXR0ZXItPndyaXRlX2hhbmRsZXIgPSBzZXFfZmlsZV93cml0ZV9oYW5kbGVyOworCWVtaXR0 ZXItPndyaXRlX2RhdGEgPSBmaWxlOworfQorRVhQT1JUX1NZTUJPTCh5YW1sX2VtaXR0ZXJfc2V0 X3NlcV9maWxlKTsKKwordm9pZCB5YW1sX2VtaXR0ZXJfc2V0X3dpZHRoKHN0cnVjdCB5YW1sX2Vt aXR0ZXIgKmVtaXR0ZXIsIGludCB3aWR0aCkKK3sKKwlpZiAoIWVtaXR0ZXIpCisJCXJldHVybjsK KworCWVtaXR0ZXItPmJlc3Rfd2lkdGggPSAod2lkdGggPj0gMCkgPyB3aWR0aCA6IC0xOworfQor RVhQT1JUX1NZTUJPTCh5YW1sX2VtaXR0ZXJfc2V0X3dpZHRoKTsKKwordm9pZCB5YW1sX2VtaXR0 ZXJfc2V0X3VuaWNvZGUoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwgYm9vbCB1bmljb2Rl KQoreworCWlmICghZW1pdHRlcikKKwkJcmV0dXJuOworCisJZW1pdHRlci0+dW5pY29kZSA9IHVu aWNvZGU7Cit9CitFWFBPUlRfU1lNQk9MKHlhbWxfZW1pdHRlcl9zZXRfdW5pY29kZSk7CisKK3Zv aWQgeWFtbF9lbWl0dGVyX3NldF9pbmRlbnQoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwg aW50IGluZGVudCkKK3sKKwlpZiAoIWVtaXR0ZXIpCisJCXJldHVybjsKKworCWVtaXR0ZXItPmJl c3RfaW5kZW50ID0gKDEgPCBpbmRlbnQgJiYgaW5kZW50IDwgMTApID8gaW5kZW50IDogMjsKK30K K0VYUE9SVF9TWU1CT0woeWFtbF9lbWl0dGVyX3NldF9pbmRlbnQpOworCit2b2lkIHlhbWxfZW1p dHRlcl9zZXRfY2Fub25pY2FsKHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIsIGJvb2wgY2Fu b25pY2FsKQoreworCWlmICghZW1pdHRlcikKKwkJcmV0dXJuOworCisJZW1pdHRlci0+Y2Fub25p Y2FsID0gY2Fub25pY2FsOworfQorRVhQT1JUX1NZTUJPTCh5YW1sX2VtaXR0ZXJfc2V0X2Nhbm9u aWNhbCk7CisKK3ZvaWQgeWFtbF9lbWl0dGVyX3NldF9vdXRwdXQoc3RydWN0IHlhbWxfZW1pdHRl ciAqZW1pdHRlciwKKwkJCSAgICAgeWFtbF93cml0ZV90IGhhbmRsZXIsCisJCQkgICAgIHZvaWQg KmRhdGEpCit7CisJaWYgKCFlbWl0dGVyKQorCQlyZXR1cm47CisKKwllbWl0dGVyLT53cml0ZV9o YW5kbGVyID0gaGFuZGxlcjsKKwllbWl0dGVyLT53cml0ZV9kYXRhID0gZGF0YTsKK30KK0VYUE9S VF9TWU1CT0woeWFtbF9lbWl0dGVyX3NldF9vdXRwdXQpOwpkaWZmIC0tZ2l0IGEvbGliL3lhbWwv eWFtbC1lbWl0dGVyLmggYi9saWIveWFtbC95YW1sLWVtaXR0ZXIuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmM0ZWQ1OTBmNzNjZgotLS0gL2Rldi9udWxsCisrKyBi L2xpYi95YW1sL3lhbWwtZW1pdHRlci5oCkBAIC0wLDAgKzEsMTQwIEBACisvLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogTUlUCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTYgS2lyaWxs IFNpbW9ub3YKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE5IEluZ3kgZMO2dCBOZXQKKyAqIENv cHlyaWdodCAoYykgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpZm5kZWYgWUFNTF9F TUlUVEVSX0gKKyNkZWZpbmUgWUFNTF9FTUlUVEVSX0gKKworI2luY2x1ZGUgPGxpbnV4L2dmcC5o PgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC95YW1sLmg+CisKK2Vu dW0geWFtbF9lbWl0dGVyX3N0YXRlIHsKKwlFTUlUX1NUUkVBTV9TVEFSVF9TVEFURSwKKwlFTUlU X0ZJUlNUX0RPQ1VNRU5UX1NUQVJUX1NUQVRFLAorCUVNSVRfRE9DVU1FTlRfU1RBUlRfU1RBVEUs CisJRU1JVF9ET0NVTUVOVF9DT05URU5UX1NUQVRFLAorCUVNSVRfRE9DVU1FTlRfRU5EX1NUQVRF LAorCUVNSVRfRkxPV19TRVFVRU5DRV9GSVJTVF9JVEVNX1NUQVRFLAorCUVNSVRfRkxPV19TRVFV RU5DRV9JVEVNX1NUQVRFLAorCUVNSVRfRkxPV19NQVBQSU5HX0ZJUlNUX0tFWV9TVEFURSwKKwlF TUlUX0ZMT1dfTUFQUElOR19LRVlfU1RBVEUsCisJRU1JVF9GTE9XX01BUFBJTkdfU0lNUExFX1ZB TFVFX1NUQVRFLAorCUVNSVRfRkxPV19NQVBQSU5HX1ZBTFVFX1NUQVRFLAorCUVNSVRfQkxPQ0tf U0VRVUVOQ0VfRklSU1RfSVRFTV9TVEFURSwKKwlFTUlUX0JMT0NLX1NFUVVFTkNFX0lURU1fU1RB VEUsCisJRU1JVF9CTE9DS19NQVBQSU5HX0ZJUlNUX0tFWV9TVEFURSwKKwlFTUlUX0JMT0NLX01B UFBJTkdfS0VZX1NUQVRFLAorCUVNSVRfQkxPQ0tfTUFQUElOR19TSU1QTEVfVkFMVUVfU1RBVEUs CisJRU1JVF9CTE9DS19NQVBQSU5HX1ZBTFVFX1NUQVRFLAorCUVNSVRfRU5EX1NUQVRFCit9Owor CitzdHJ1Y3QgeWFtbF9hbmNob3JzIHsKKwlpbnQgcmVmZXJlbmNlczsKKwlpbnQgYW5jaG9yOwor CWludCBzZXJpYWxpemVkOworfTsKKworc3RydWN0IHlhbWxfZW1pdHRlciB7CisJaW50IGVycm5v OworCWNvbnN0IGNoYXIgKnByb2JsZW07CisJZ2ZwX3QgZ2ZwOworCisJeWFtbF93cml0ZV90IHdy aXRlX2hhbmRsZXI7CisJdm9pZCAqd3JpdGVfZGF0YTsKKworCXVuaW9uIHsKKwkJc3RydWN0IHsK KwkJCXU4ICpidWZmZXI7CisJCQlzaXplX3Qgc2l6ZTsKKwkJCXNpemVfdCAqc2l6ZV93cml0dGVu OworCQl9IHN0cmluZzsKKwl9IG91dHB1dDsKKworCXN0cnVjdCB7CisJCWNoYXIgKnN0YXJ0Owor CQljaGFyICplbmQ7CisJCWNoYXIgKnBvczsKKwkJY2hhciAqbGFzdDsKKwl9IGJ1ZjsKKworCWlu dCBjYW5vbmljYWw7CisJaW50IGJlc3RfaW5kZW50OworCWludCBiZXN0X3dpZHRoOworCWludCB1 bmljb2RlOworCisJc3RydWN0IHsKKwkJZW51bSB5YW1sX2VtaXR0ZXJfc3RhdGUgKnN0YXJ0Owor CQllbnVtIHlhbWxfZW1pdHRlcl9zdGF0ZSAqZW5kOworCQllbnVtIHlhbWxfZW1pdHRlcl9zdGF0 ZSAqdG9wOworCX0gc3RhdGVzOworCisJZW51bSB5YW1sX2VtaXR0ZXJfc3RhdGUgc3RhdGU7CisK KwlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50czsKKwlpbnQgbnVtX2V2ZW50czsKKworCXN0cnVjdCB7 CisJCWludCAqc3RhcnQ7CisJCWludCAqZW5kOworCQlpbnQgKnRvcDsKKwl9IGluZGVudHM7CisK KwlzdHJ1Y3QgeworCQlzdHJ1Y3QgeWFtbF90YWdfZGlyZWN0aXZlICpzdGFydDsKKwkJc3RydWN0 IHlhbWxfdGFnX2RpcmVjdGl2ZSAqZW5kOworCQlzdHJ1Y3QgeWFtbF90YWdfZGlyZWN0aXZlICp0 b3A7CisJfSB0YWdzOworCisJaW50IGluZGVudDsKKwlpbnQgZmxvd19sZXZlbDsKKworCWludCBy b290X2NvbnRleHQ7CisJaW50IHNlcXVlbmNlX2NvbnRleHQ7CisJaW50IG1hcHBpbmdfY29udGV4 dDsKKwlpbnQgc2ltcGxlX2tleV9jb250ZXh0OworCisJaW50IGNvbHVtbjsKKwlpbnQgd2hpdGVz cGFjZTsKKwlpbnQgaW5kZW50aW9uOworCWludCBvcGVuX2VuZGVkOworCisJLyoqIEFuY2hvciBh bmFseXNpcy4gKi8KKwlzdHJ1Y3QgeworCQljb25zdCBjaGFyICphbmNob3I7CisJCXNpemVfdCBh bmNob3JfbGVuZ3RoOworCQlpbnQgYWxpYXM7CisJfSBhbmNob3JfZGF0YTsKKworCS8qKiBUYWcg YW5hbHlzaXMuICovCisJc3RydWN0IHsKKwkJY29uc3QgY2hhciAqaGFuZGxlOworCQlzaXplX3Qg aGFuZGxlX2xlbmd0aDsKKwkJY29uc3QgY2hhciAqc3VmZml4OworCQlzaXplX3Qgc3VmZml4X2xl bmd0aDsKKwl9IHRhZ19kYXRhOworCisJLyoqIFNjYWxhciBhbmFseXNpcy4gKi8KKwlzdHJ1Y3Qg eworCQljb25zdCBjaGFyICp2YWx1ZTsKKwkJc2l6ZV90IGxlbmd0aDsKKwkJaW50IG11bHRpbGlu ZTsKKwkJaW50IGZsb3dfcGxhaW5fYWxsb3dlZDsKKwkJaW50IGJsb2NrX3BsYWluX2FsbG93ZWQ7 CisJCWludCBzaW5nbGVfcXVvdGVkX2FsbG93ZWQ7CisJCWludCBibG9ja19hbGxvd2VkOworCQll bnVtIHlhbWxfc2NhbGFyX3N0eWxlIHN0eWxlOworCX0gc2NhbGFyX2RhdGE7CisKKwlpbnQgb3Bl bmVkOworCWludCBjbG9zZWQ7CisKKwlzdHJ1Y3QgeWFtbF9hbmNob3JzICphbmNob3JzOworCWlu dCBsYXN0X2FuY2hvcl9pZDsKK307CisKKyNlbmRpZiAvKiBZQU1MX0VNSVRURVJfSCAqLwpkaWZm IC0tZ2l0IGEvbGliL3lhbWwveWFtbC1ldmVudHMuYyBiL2xpYi95YW1sL3lhbWwtZXZlbnRzLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hZGM3ZWQ4ODdkNmEKLS0t IC9kZXYvbnVsbAorKysgYi9saWIveWFtbC95YW1sLWV2ZW50cy5jCkBAIC0wLDAgKzEsNDI0IEBA CisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCisvKgorICogQ29weXJpZ2h0IChjKSAy MDA2LTIwMTYgS2lyaWxsIFNpbW9ub3YKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE5IEluZ3kg ZMO2dCBOZXQKKyAqIENvcHlyaWdodCAoYykgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisK KyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5j bHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC95YW1sLmg+CisjaW5jbHVkZSA8 bGludXgveWFtbC1ldmVudHMuaD4KKworc3RhdGljIGJvb2wgY2hlY2tfdXRmOChjb25zdCBjaGFy ICpwb3MsIHNpemVfdCBsZW5ndGgpCit7CisJY29uc3QgY2hhciAqZW5kID0gcG9zICsgbGVuZ3Ro OworCisJd2hpbGUgKHBvcyA8IGVuZCkgeworCQl1OCBvY3RldCA9IHBvc1swXTsKKwkJdW5zaWdu ZWQgaW50IHdpZHRoOworCQl1bnNpZ25lZCBpbnQgdmFsdWU7CisJCXNpemVfdCBrOworCisJCXdp ZHRoID0gKG9jdGV0ICYgMHg4MCkgPT0gMHgwMCA/IDEgOgorCQkJKG9jdGV0ICYgMHhFMCkgPT0g MHhDMCA/IDIgOgorCQkJKG9jdGV0ICYgMHhGMCkgPT0gMHhFMCA/IDMgOgorCQkJKG9jdGV0ICYg MHhGOCkgPT0gMHhGMCA/IDQgOiAwOworCQl2YWx1ZSA9IChvY3RldCAmIDB4ODApID09IDB4MDAg PyBvY3RldCAmIDB4N0YgOgorCQkJKG9jdGV0ICYgMHhFMCkgPT0gMHhDMCA/IG9jdGV0ICYgMHgx RiA6CisJCQkob2N0ZXQgJiAweEYwKSA9PSAweEUwID8gb2N0ZXQgJiAweDBGIDoKKwkJCShvY3Rl dCAmIDB4RjgpID09IDB4RjAgPyBvY3RldCAmIDB4MDcgOiAwOworCQlpZiAoIXdpZHRoKQorCQkJ cmV0dXJuIGZhbHNlOworCisJCWlmIChwb3MgKyB3aWR0aCA+IGVuZCkKKwkJCXJldHVybiBmYWxz ZTsKKworCQlmb3IgKGsgPSAxOyBrIDwgd2lkdGg7IGsrKykgeworCQkJb2N0ZXQgPSBwb3Nba107 CisJCQlpZiAoKG9jdGV0ICYgMHhDMCkgIT0gMHg4MCkKKwkJCQlyZXR1cm4gZmFsc2U7CisKKwkJ CXZhbHVlID0gKHZhbHVlIDw8IDYpICsgKG9jdGV0ICYgMHgzRik7CisJCX0KKworCQlpZiAoISh3 aWR0aCA9PSAxIHx8CisJCSAgICAgICh3aWR0aCA9PSAyICYmIHZhbHVlID49IDB4ODApIHx8CisJ CSAgICAgICh3aWR0aCA9PSAzICYmIHZhbHVlID49IDB4ODAwKSB8fAorCQkgICAgICAod2lkdGgg PT0gNCAmJiB2YWx1ZSA+PSAweDEwMDAwKSkpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJcG9zICs9 IHdpZHRoOworCX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgc3RydWN0IHlhbWxfZXZl bnQgKnlhbWxfZXZlbnRfY3JlYXRlKGludCB0eXBlLCBnZnBfdCBnZnApCit7CisJc3RydWN0IHlh bWxfZXZlbnQgKmV2OworCisJZXYgPSBremFsbG9jKHNpemVvZigqZXYpLCBnZnApOworCWlmIChl dikKKwkJZXYtPnR5cGUgPSB0eXBlOworCisJcmV0dXJuIGV2OworfQorCitzdGF0aWMgdm9pZCB5 YW1sX2V2ZW50X2ZyZWUoc3RydWN0IHlhbWxfZXZlbnQgKmV2ZW50KQoreworCWtmcmVlKGV2ZW50 KTsKK30KKworc3RydWN0IHlhbWxfZXZlbnQgKnlhbWxfc3RyZWFtX3N0YXJ0X2V2ZW50X2NyZWF0 ZShnZnBfdCBnZnApCit7CisJcmV0dXJuIHlhbWxfZXZlbnRfY3JlYXRlKFlBTUxfU1RSRUFNX1NU QVJUX0VWRU5ULCBnZnApOworfQorRVhQT1JUX1NZTUJPTCh5YW1sX3N0cmVhbV9zdGFydF9ldmVu dF9jcmVhdGUpOworCitzdHJ1Y3QgeWFtbF9ldmVudCAqeWFtbF9zdHJlYW1fZW5kX2V2ZW50X2Ny ZWF0ZShnZnBfdCBnZnApCit7CisJcmV0dXJuIHlhbWxfZXZlbnRfY3JlYXRlKFlBTUxfU1RSRUFN X0VORF9FVkVOVCwgZ2ZwKTsKK30KK0VYUE9SVF9TWU1CT0woeWFtbF9zdHJlYW1fZW5kX2V2ZW50 X2NyZWF0ZSk7CisKK3N0cnVjdCB5YW1sX2V2ZW50ICoKK3lhbWxfZG9jdW1lbnRfc3RhcnRfZXZl bnRfY3JlYXRlKHN0cnVjdCB5YW1sX3ZlcnNpb25fZGlyZWN0aXZlICp2ZXJzaW9uLAorCQkJCSBz dHJ1Y3QgeWFtbF90YWdfZGlyZWN0aXZlICpzdGFydCwKKwkJCQkgc3RydWN0IHlhbWxfdGFnX2Rp cmVjdGl2ZSAqZW5kLAorCQkJCSBpbnQgaW1wbGljaXQsCisJCQkJIGdmcF90IGdmcCkKK3sKKwlz dHJ1Y3QgeWFtbF92ZXJzaW9uX2RpcmVjdGl2ZSAqdmVyc2lvbl9jb3B5ID0gTlVMTDsKKwlzdHJ1 Y3QgeworCQlzdHJ1Y3QgeWFtbF90YWdfZGlyZWN0aXZlICpzdGFydDsKKwkJc3RydWN0IHlhbWxf dGFnX2RpcmVjdGl2ZSAqZW5kOworCQlzdHJ1Y3QgeWFtbF90YWdfZGlyZWN0aXZlICp0b3A7CisJ fSBjb3B5ID0ge307CisJc3RydWN0IHlhbWxfdGFnX2RpcmVjdGl2ZSB2YWx1ZSA9IHt9OworCXN0 cnVjdCB5YW1sX2V2ZW50ICpldmVudDsKKworCWlmICghKChzdGFydCAmJiBlbmQpIHx8IHN0YXJ0 ID09IGVuZCkpCisJCXJldHVybiBOVUxMOworCisJZXZlbnQgPSB5YW1sX2V2ZW50X2NyZWF0ZShZ QU1MX0RPQ1VNRU5UX1NUQVJUX0VWRU5ULCBnZnApOworCWlmICghZXZlbnQpCisJCXJldHVybiBO VUxMOworCisJaWYgKHZlcnNpb24pIHsKKwkJdmVyc2lvbl9jb3B5ID0ga21lbWR1cCh2ZXJzaW9u LCBzaXplb2YoKnZlcnNpb24pLCBnZnApOworCQlpZiAoIXZlcnNpb25fY29weSkKKwkJCWdvdG8g ZXJyb3I7CisJfQorCisjaWYgMAorCWlmIChzdGFydCAhPSBlbmQpIHsKKwkJc3RydWN0IHlhbWxf dGFnX2RpcmVjdGl2ZSAqdGFnOworCQlzdHJ1Y3QgeworCQkJZW51bSB5YW1sX2Vycm9yIGVycm9y OworCQl9IGNvbnRleHQ7CisKKwkJaWYgKCFTVEFDS19JTklUKCZjb250ZXh0LCBjb3B5LCBzdHJ1 Y3QgeWFtbF90YWdfZGlyZWN0aXZlKikpCisJCQlnb3RvIGVycm9yOworCisJCWZvciAodGFnID0g c3RhcnQ7IHRhZyAhPSBlbmQ7IHRhZysrKSB7CisJCQlpZiAoIWNoZWNrX3V0ZjgodGFnLT5oYW5k bGUsIHN0cmxlbih0YWctPmhhbmRsZSkpKQorCQkJCWdvdG8gZXJyb3I7CisKKwkJCWlmICghY2hl Y2tfdXRmOCh0YWctPnByZWZpeCwgc3RybGVuKHRhZy0+cHJlZml4KSkpCisJCQkJZ290byBlcnJv cjsKKworCQkJdmFsdWUuaGFuZGxlID0ga3N0cmR1cCh0YWctPmhhbmRsZSwgZ2ZwKTsKKwkJCXZh bHVlLnByZWZpeCA9IGtzdHJkdXAodGFnLT5wcmVmaXgsIGdmcCk7CisJCQlpZiAoIXZhbHVlLmhh bmRsZSB8fCAhdmFsdWUucHJlZml4KQorCQkJCWdvdG8gZXJyb3I7CisKKwkJCWlmICghUFVTSCgm Y29udGV4dCwgY29weSwgdmFsdWUpKQorCQkJCWdvdG8gZXJyb3I7CisKKwkJCXZhbHVlLmhhbmRs ZSA9IE5VTEw7CisJCQl2YWx1ZS5wcmVmaXggPSBOVUxMOworCQl9CisJfQorI2VuZGlmCisKKwll dmVudC0+dHlwZSA9IFlBTUxfRE9DVU1FTlRfU1RBUlRfRVZFTlQ7CisJZXZlbnQtPmRvY3VtZW50 X3N0YXJ0LnZlcnNpb24gPSB2ZXJzaW9uX2NvcHk7CisJZXZlbnQtPmRvY3VtZW50X3N0YXJ0LnRh Z3Muc3RhcnQgPSBjb3B5LnN0YXJ0OworCWV2ZW50LT5kb2N1bWVudF9zdGFydC50YWdzLmVuZCA9 IGNvcHkudG9wOworCWV2ZW50LT5kb2N1bWVudF9zdGFydC5pbXBsaWNpdCA9IGltcGxpY2l0Owor CisJcmV0dXJuIGV2ZW50OworCitlcnJvcjoKKwlrZnJlZSh2ZXJzaW9uX2NvcHkpOworI2lmIDAK Kwl3aGlsZSAoIVNUQUNLX0VNUFRZKGNvbnRleHQsIGNvcHkpKSB7CisJCXN0cnVjdCB5YW1sX3Rh Z19kaXJlY3RpdmUgdmFsdWUgPSBQT1AoY29udGV4dCwgY29weSk7CisKKwkJa2ZyZWUodmFsdWUu aGFuZGxlKTsKKwkJa2ZyZWUodmFsdWUucHJlZml4KTsKKwl9CisJU1RBQ0tfREVMKGNvbnRleHQs IGNvcHkpOworI2VuZGlmCisJa2ZyZWUodmFsdWUuaGFuZGxlKTsKKwlrZnJlZSh2YWx1ZS5wcmVm aXgpOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTCh5YW1sX2RvY3VtZW50X3N0YXJ0 X2V2ZW50X2NyZWF0ZSk7CisKK3N0cnVjdCB5YW1sX2V2ZW50ICoKK3lhbWxfZG9jdW1lbnRfZW5k X2V2ZW50X2NyZWF0ZShpbnQgaW1wbGljaXQsIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgeWFtbF9l dmVudCAqZXZlbnQ7CisKKwlldmVudCA9IHlhbWxfZXZlbnRfY3JlYXRlKFlBTUxfRE9DVU1FTlRf RU5EX0VWRU5ULCBnZnApOworCWlmIChldmVudCkKKwkJZXZlbnQtPmRvY3VtZW50X2VuZC5pbXBs aWNpdCA9IGltcGxpY2l0OworCisJcmV0dXJuIGV2ZW50OworfQorRVhQT1JUX1NZTUJPTCh5YW1s X2RvY3VtZW50X2VuZF9ldmVudF9jcmVhdGUpOworCitzdHJ1Y3QgeWFtbF9ldmVudCAqCit5YW1s X2FsaWFzX2V2ZW50X2NyZWF0ZShjb25zdCBjaGFyICphbmNob3IsIGdmcF90IGdmcCkKK3sKKwlz dHJ1Y3QgeWFtbF9ldmVudCAqZXZlbnQ7CisKKwlpZiAoIWFuY2hvciB8fCAhY2hlY2tfdXRmOChh bmNob3IsIHN0cmxlbihhbmNob3IpKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlldmVudCA9IHlhbWxf ZXZlbnRfY3JlYXRlKFlBTUxfQUxJQVNfRVZFTlQsIGdmcCk7CisJaWYgKCFldmVudCkKKwkJcmV0 dXJuIE5VTEw7CisKKwlldmVudC0+YWxpYXMuYW5jaG9yID0ga3N0cmR1cChhbmNob3IsIGdmcCk7 CisJaWYgKCFldmVudC0+YWxpYXMuYW5jaG9yKSB7CisJCXlhbWxfZXZlbnRfZnJlZShldmVudCk7 CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBldmVudDsKK30KK0VYUE9SVF9TWU1CT0wo eWFtbF9hbGlhc19ldmVudF9jcmVhdGUpOworCitzdHJ1Y3QgeWFtbF9ldmVudCAqCit5YW1sX3Nj YWxhcl9ldmVudF9jcmVhdGUoY29uc3QgY2hhciAqYW5jaG9yLCBjb25zdCBjaGFyICp0YWcsCisJ CQkgY29uc3QgY2hhciAqdmFsdWUsIHNzaXplX3QgbGVuZ3RoLCBib29sIHN0ZWFsLAorCQkJIGlu dCBwbGFpbl9pbXBsaWNpdCwgaW50IHF1b3RlZF9pbXBsaWNpdCwKKwkJCSBlbnVtIHlhbWxfc2Nh bGFyX3N0eWxlIHN0eWxlLAorCQkJIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgeWFtbF9ldmVudCAq ZXZlbnQ7CisJY2hhciAqYW5jaG9yX2NvcHkgPSBOVUxMOworCWNoYXIgKnRhZ19jb3B5ID0gTlVM TDsKKworCWlmICghdmFsdWUpCisJCXJldHVybiBOVUxMOworCisJaWYgKGFuY2hvcikgeworCQlp ZiAoIWNoZWNrX3V0ZjgoYW5jaG9yLCBzdHJsZW4oYW5jaG9yKSkpCisJCQlnb3RvIGVycm9yOwor CisJCWFuY2hvcl9jb3B5ID0ga3N0cmR1cChhbmNob3IsIGdmcCk7CisJCWlmICghYW5jaG9yX2Nv cHkpCisJCQlnb3RvIGVycm9yOworCX0KKworCWlmICh0YWcpIHsKKwkJaWYgKCFjaGVja191dGY4 KHRhZywgc3RybGVuKHRhZykpKQorCQkJZ290byBlcnJvcjsKKworCQl0YWdfY29weSA9IGtzdHJk dXAodGFnLCBnZnApOworCQlpZiAoIXRhZ19jb3B5KQorCQkJZ290byBlcnJvcjsKKwl9CisKKwlp ZiAobGVuZ3RoIDwgMCkKKwkJbGVuZ3RoID0gc3RybGVuKHZhbHVlKTsKKworCWlmICghY2hlY2tf dXRmOCh2YWx1ZSwgbGVuZ3RoKSkKKwkJZ290byBlcnJvcjsKKworCWV2ZW50ID0geWFtbF9ldmVu dF9jcmVhdGUoWUFNTF9TQ0FMQVJfRVZFTlQsIGdmcCk7CisJaWYgKCFldmVudCkKKwkJZ290byBl cnJvcjsKKworCWlmIChzdGVhbCkgeworCQlldmVudC0+c2NhbGFyLnZhbHVlID0gKGNoYXIgKil2 YWx1ZTsKKwl9IGVsc2UgeworCQlldmVudC0+c2NhbGFyLnZhbHVlID0ga21lbWR1cCh2YWx1ZSwg bGVuZ3RoLCBnZnApOworCQlpZiAoIWV2ZW50LT5zY2FsYXIudmFsdWUpIHsKKwkJCXlhbWxfZXZl bnRfZnJlZShldmVudCk7CisJCQlnb3RvIGVycm9yOworCQl9CisJfQorCWV2ZW50LT5zY2FsYXIu bGVuZ3RoID0gbGVuZ3RoOworCisJZXZlbnQtPnNjYWxhci5hbmNob3IgPSBhbmNob3JfY29weTsK KwlldmVudC0+c2NhbGFyLnRhZyA9IHRhZ19jb3B5OworCWV2ZW50LT5zY2FsYXIucGxhaW5faW1w bGljaXQgPSBwbGFpbl9pbXBsaWNpdDsKKwlldmVudC0+c2NhbGFyLnF1b3RlZF9pbXBsaWNpdCA9 IHF1b3RlZF9pbXBsaWNpdDsKKwlldmVudC0+c2NhbGFyLnN0eWxlID0gc3R5bGU7CisJcmV0dXJu IGV2ZW50OworCitlcnJvcjoKKwlrZnJlZShhbmNob3JfY29weSk7CisJa2ZyZWUodGFnX2NvcHkp OworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTCh5YW1sX3NjYWxhcl9ldmVudF9jcmVh dGUpOworCitzdHJ1Y3QgeWFtbF9ldmVudCAqCit5YW1sX3NlcXVlbmNlX3N0YXJ0X2V2ZW50X2Ny ZWF0ZShjb25zdCBjaGFyICphbmNob3IsCisJCQkJIGNvbnN0IGNoYXIgKnRhZywKKwkJCQkgaW50 IGltcGxpY2l0LAorCQkJCSBlbnVtIHlhbWxfc2VxdWVuY2Vfc3R5bGUgc3R5bGUsCisJCQkJIGdm cF90IGdmcCkKK3sKKwljaGFyICphbmNob3JfY29weSA9IE5VTEw7CisJY2hhciAqdGFnX2NvcHkg PSBOVUxMOworCXN0cnVjdCB5YW1sX2V2ZW50ICpldmVudDsKKworCWlmIChhbmNob3IpIHsKKwkJ aWYgKCFjaGVja191dGY4KGFuY2hvciwgc3RybGVuKGFuY2hvcikpKQorCQkJZ290byBlcnJvcjsK KworCQlhbmNob3JfY29weSA9IGtzdHJkdXAoYW5jaG9yLCBnZnApOworCQlpZiAoIWFuY2hvcl9j b3B5KQorCQkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAodGFnKSB7CisJCWlmICghY2hlY2tfdXRm OCh0YWcsIHN0cmxlbih0YWcpKSkKKwkJCWdvdG8gZXJyb3I7CisKKwkJdGFnX2NvcHkgPSBrc3Ry ZHVwKHRhZywgZ2ZwKTsKKwkJaWYgKCF0YWdfY29weSkKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJ ZXZlbnQgPSB5YW1sX2V2ZW50X2NyZWF0ZShZQU1MX1NFUVVFTkNFX1NUQVJUX0VWRU5ULCBnZnAp OworCWlmICghZXZlbnQpCisJCWdvdG8gZXJyb3I7CisKKwlldmVudC0+c2VxdWVuY2Vfc3RhcnQu YW5jaG9yID0gYW5jaG9yX2NvcHk7CisJZXZlbnQtPnNlcXVlbmNlX3N0YXJ0LnRhZyA9IHRhZ19j b3B5OworCWV2ZW50LT5zZXF1ZW5jZV9zdGFydC5pbXBsaWNpdCA9IGltcGxpY2l0OworCWV2ZW50 LT5zZXF1ZW5jZV9zdGFydC5zdHlsZSA9IHN0eWxlOworCXJldHVybiBldmVudDsKKworZXJyb3I6 CisJa2ZyZWUoYW5jaG9yX2NvcHkpOworCWtmcmVlKHRhZ19jb3B5KTsKKwlyZXR1cm4gTlVMTDsK K30KK0VYUE9SVF9TWU1CT0woeWFtbF9zZXF1ZW5jZV9zdGFydF9ldmVudF9jcmVhdGUpOworCitz dHJ1Y3QgeWFtbF9ldmVudCAqeWFtbF9zZXF1ZW5jZV9lbmRfZXZlbnRfY3JlYXRlKGdmcF90IGdm cCkKK3sKKwlyZXR1cm4geWFtbF9ldmVudF9jcmVhdGUoWUFNTF9TRVFVRU5DRV9FTkRfRVZFTlQs IGdmcCk7Cit9CitFWFBPUlRfU1lNQk9MKHlhbWxfc2VxdWVuY2VfZW5kX2V2ZW50X2NyZWF0ZSk7 CisKK3N0cnVjdCB5YW1sX2V2ZW50ICoKK3lhbWxfbWFwcGluZ19zdGFydF9ldmVudF9jcmVhdGUo Y29uc3QgY2hhciAqYW5jaG9yLAorCQkJCWNvbnN0IGNoYXIgKnRhZywKKwkJCQlpbnQgaW1wbGlj aXQsCisJCQkJZW51bSB5YW1sX21hcHBpbmdfc3R5bGUgc3R5bGUsCisJCQkJZ2ZwX3QgZ2ZwKQor eworCWNoYXIgKmFuY2hvcl9jb3B5ID0gTlVMTDsKKwljaGFyICp0YWdfY29weSA9IE5VTEw7CisJ c3RydWN0IHlhbWxfZXZlbnQgKmV2ZW50OworCisJaWYgKGFuY2hvcikgeworCQlpZiAoIWNoZWNr X3V0ZjgoYW5jaG9yLCBzdHJsZW4oYW5jaG9yKSkpCisJCQlnb3RvIGVycm9yOworCisJCWFuY2hv cl9jb3B5ID0ga3N0cmR1cChhbmNob3IsIGdmcCk7CisJCWlmICghYW5jaG9yX2NvcHkpCisJCQln b3RvIGVycm9yOworCX0KKworCWlmICh0YWcpIHsKKwkJaWYgKCFjaGVja191dGY4KHRhZywgc3Ry bGVuKHRhZykpKQorCQkJZ290byBlcnJvcjsKKworCQl0YWdfY29weSA9IGtzdHJkdXAodGFnLCBn ZnApOworCQlpZiAoIXRhZ19jb3B5KQorCQkJZ290byBlcnJvcjsKKwl9CisKKwlldmVudCA9IHlh bWxfZXZlbnRfY3JlYXRlKFlBTUxfTUFQUElOR19TVEFSVF9FVkVOVCwgZ2ZwKTsKKwlpZiAoIWV2 ZW50KQorCQlnb3RvIGVycm9yOworCisJZXZlbnQtPm1hcHBpbmdfc3RhcnQuYW5jaG9yID0gYW5j aG9yX2NvcHk7CisJZXZlbnQtPm1hcHBpbmdfc3RhcnQudGFnID0gdGFnX2NvcHk7CisJZXZlbnQt Pm1hcHBpbmdfc3RhcnQuaW1wbGljaXQgPSBpbXBsaWNpdDsKKwlldmVudC0+bWFwcGluZ19zdGFy dC5zdHlsZSA9IHN0eWxlOworCXJldHVybiBldmVudDsKKworZXJyb3I6CisJa2ZyZWUoYW5jaG9y X2NvcHkpOworCWtmcmVlKHRhZ19jb3B5KTsKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1C T0woeWFtbF9tYXBwaW5nX3N0YXJ0X2V2ZW50X2NyZWF0ZSk7CisKK3N0cnVjdCB5YW1sX2V2ZW50 ICp5YW1sX21hcHBpbmdfZW5kX2V2ZW50X2NyZWF0ZShnZnBfdCBnZnApCit7CisJcmV0dXJuIHlh bWxfZXZlbnRfY3JlYXRlKFlBTUxfTUFQUElOR19FTkRfRVZFTlQsIGdmcCk7Cit9CitFWFBPUlRf U1lNQk9MKHlhbWxfbWFwcGluZ19lbmRfZXZlbnRfY3JlYXRlKTsKKwordm9pZCB5YW1sX2V2ZW50 X2RlbGV0ZShzdHJ1Y3QgeWFtbF9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IHlhbWxfdGFnX2Rp cmVjdGl2ZSAqdGFnOworCisJaWYgKCFldmVudCkKKwkJcmV0dXJuOworCisJc3dpdGNoIChldmVu dC0+dHlwZSkgeworCWNhc2UgWUFNTF9ET0NVTUVOVF9TVEFSVF9FVkVOVDoKKwkJa2ZyZWUoZXZl bnQtPmRvY3VtZW50X3N0YXJ0LnZlcnNpb24pOworCQlmb3IgKHRhZyA9IGV2ZW50LT5kb2N1bWVu dF9zdGFydC50YWdzLnN0YXJ0OworCQkgICAgIHRhZyAhPSBldmVudC0+ZG9jdW1lbnRfc3RhcnQu dGFncy5lbmQ7CisJCSAgICAgdGFnKyspIHsKKwkJCWtmcmVlKHRhZy0+aGFuZGxlKTsKKwkJCWtm cmVlKHRhZy0+cHJlZml4KTsKKwkJfQorCQlrZnJlZShldmVudC0+ZG9jdW1lbnRfc3RhcnQudGFn cy5zdGFydCk7CisJCWJyZWFrOworCisJY2FzZSBZQU1MX0FMSUFTX0VWRU5UOgorCQlrZnJlZShl dmVudC0+YWxpYXMuYW5jaG9yKTsKKwkJYnJlYWs7CisKKwljYXNlIFlBTUxfU0NBTEFSX0VWRU5U OgorCQlrZnJlZShldmVudC0+c2NhbGFyLmFuY2hvcik7CisJCWtmcmVlKGV2ZW50LT5zY2FsYXIu dGFnKTsKKwkJa2ZyZWUoZXZlbnQtPnNjYWxhci52YWx1ZSk7CisJCWJyZWFrOworCisJY2FzZSBZ QU1MX1NFUVVFTkNFX1NUQVJUX0VWRU5UOgorCQlrZnJlZShldmVudC0+c2VxdWVuY2Vfc3RhcnQu YW5jaG9yKTsKKwkJa2ZyZWUoZXZlbnQtPnNlcXVlbmNlX3N0YXJ0LnRhZyk7CisJCWJyZWFrOwor CisJY2FzZSBZQU1MX01BUFBJTkdfU1RBUlRfRVZFTlQ6CisJCWtmcmVlKGV2ZW50LT5tYXBwaW5n X3N0YXJ0LmFuY2hvcik7CisJCWtmcmVlKGV2ZW50LT5tYXBwaW5nX3N0YXJ0LnRhZyk7CisJCWJy ZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJeWFtbF9ldmVudF9mcmVlKGV2ZW50 KTsKK30KK0VYUE9SVF9TWU1CT0woeWFtbF9ldmVudF9kZWxldGUpOworCitNT0RVTEVfTElDRU5T RSgiRHVhbCBNSVQvR1BMIik7CmRpZmYgLS1naXQgYS9saWIveWFtbC95YW1sLXNpbXBsZS5jIGIv bGliL3lhbWwveWFtbC1zaW1wbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAuLmVkOGVhNzYzN2I1OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi95YW1sL3lhbWwtc2lt cGxlLmMKQEAgLTAsMCArMSwyMjcgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQK Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaW5j bHVkZSA8bGludXgvYXNjaWk4NS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1 ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC95YW1sLmg+CisjaW5jbHVkZSA8bGlu dXgveWFtbC1ldmVudHMuaD4KKworI2luY2x1ZGUgInlhbWwtZW1pdHRlci5oIgorCitzdHJ1Y3Qg eWFtbF9lbWl0dGVyICpfX3lhbWxfb3BlbihzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyKQor eworCXN0cnVjdCB5YW1sX2V2ZW50ICpldmVudDsKKworCWV2ZW50ID0geWFtbF9zdHJlYW1fc3Rh cnRfZXZlbnRfY3JlYXRlKGVtaXR0ZXItPmdmcCk7CisJeWFtbF9lbWl0dGVyX2VtaXQoZW1pdHRl ciwgZXZlbnQpOworCisJZXZlbnQgPSB5YW1sX2RvY3VtZW50X3N0YXJ0X2V2ZW50X2NyZWF0ZShO VUxMLCBOVUxMLCBOVUxMLCB0cnVlLAorCQkJCQkJIGVtaXR0ZXItPmdmcCk7CisJeWFtbF9lbWl0 dGVyX2VtaXQoZW1pdHRlciwgZXZlbnQpOworCisJcmV0dXJuIGVtaXR0ZXI7Cit9CisKK3N0cnVj dCB5YW1sX2VtaXR0ZXIgKnlhbWxfb3Blbih5YW1sX3dyaXRlX3QgaGFuZGxlciwgdm9pZCAqZGF0 YSkKK3sKKwlzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyOworCisJZW1pdHRlciA9IHlhbWxf ZW1pdHRlcl9jcmVhdGUoR0ZQX0tFUk5FTCk7CisJaWYgKCFlbWl0dGVyKQorCQlyZXR1cm4gTlVM TDsKKworCXlhbWxfZW1pdHRlcl9zZXRfb3V0cHV0KGVtaXR0ZXIsIGhhbmRsZXIsIGRhdGEpOwor CXJldHVybiBfX3lhbWxfb3BlbihlbWl0dGVyKTsKK30KK0VYUE9SVF9TWU1CT0woeWFtbF9vcGVu KTsKKworc3RydWN0IHlhbWxfZW1pdHRlciAqeWFtbF9vcGVuX2ZpbGUoc3RydWN0IHNlcV9maWxl ICptKQoreworCXN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXI7CisKKwllbWl0dGVyID0geWFt bF9lbWl0dGVyX2NyZWF0ZShHRlBfS0VSTkVMKTsKKwlpZiAoIWVtaXR0ZXIpCisJCXJldHVybiBO VUxMOworCisJeWFtbF9lbWl0dGVyX3NldF9zZXFfZmlsZShlbWl0dGVyLCBtKTsKKwlyZXR1cm4g X195YW1sX29wZW4oZW1pdHRlcik7Cit9CitFWFBPUlRfU1lNQk9MKHlhbWxfb3Blbl9maWxlKTsK Kworc3RydWN0IHlhbWxfZW1pdHRlciAqeWFtbF9vcGVuX3N0cmluZyhjaGFyICpidWYsIHNpemVf dCBsZW4sIHNpemVfdCAqb3V0KQoreworCXN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXI7CisK KwllbWl0dGVyID0geWFtbF9lbWl0dGVyX2NyZWF0ZShHRlBfS0VSTkVMKTsKKwlpZiAoIWVtaXR0 ZXIpCisJCXJldHVybiBOVUxMOworCisJeWFtbF9lbWl0dGVyX3NldF9zdHJpbmcoZW1pdHRlciwg YnVmLCBsZW4sIG91dCk7CisJcmV0dXJuIF9feWFtbF9vcGVuKGVtaXR0ZXIpOworfQorRVhQT1JU X1NZTUJPTCh5YW1sX29wZW5fc3RyaW5nKTsKKwordm9pZCBfX3lhbWxfbWFwcGluZ19zdGFydChz dHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkJICBlbnVtIHlhbWxfbWFwcGluZ19zdHls ZSBzdHlsZSkKK3sKKwlzdHJ1Y3QgeWFtbF9ldmVudCAqZXZlbnQ7CisKKwlldmVudCA9IHlhbWxf bWFwcGluZ19zdGFydF9ldmVudF9jcmVhdGUoTlVMTCwgTlVMTCwgdHJ1ZSwgc3R5bGUsCisJCQkJ CQllbWl0dGVyLT5nZnApOworCXlhbWxfZW1pdHRlcl9lbWl0KGVtaXR0ZXIsIGV2ZW50KTsKK30K K0VYUE9SVF9TWU1CT0woX195YW1sX21hcHBpbmdfc3RhcnQpOworCit2b2lkIHlhbWxfbWFwcGlu Z19lbmQoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlcikKK3sKKwl5YW1sX2VtaXR0ZXJfZW1p dChlbWl0dGVyLCB5YW1sX21hcHBpbmdfZW5kX2V2ZW50X2NyZWF0ZShlbWl0dGVyLT5nZnApKTsK K30KK0VYUE9SVF9TWU1CT0woeWFtbF9tYXBwaW5nX2VuZCk7CisKK3ZvaWQgX195YW1sX3NlcXVl bmNlX3N0YXJ0KHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIsCisJCQkgICBlbnVtIHlhbWxf c2VxdWVuY2Vfc3R5bGUgc3R5bGUpCit7CisJc3RydWN0IHlhbWxfZXZlbnQgKmV2ZW50OworCisJ ZXZlbnQgPSB5YW1sX3NlcXVlbmNlX3N0YXJ0X2V2ZW50X2NyZWF0ZShOVUxMLCBOVUxMLCB0cnVl LCBzdHlsZSwKKwkJCQkJCSBlbWl0dGVyLT5nZnApOworCXlhbWxfZW1pdHRlcl9lbWl0KGVtaXR0 ZXIsIGV2ZW50KTsKK30KK0VYUE9SVF9TWU1CT0woX195YW1sX3NlcXVlbmNlX3N0YXJ0KTsKKwor dm9pZCB5YW1sX3NlcXVlbmNlX2VuZChzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyKQorewor CXlhbWxfZW1pdHRlcl9lbWl0KGVtaXR0ZXIsCisJCQkgIHlhbWxfc2VxdWVuY2VfZW5kX2V2ZW50 X2NyZWF0ZShlbWl0dGVyLT5nZnApKTsKK30KK0VYUE9SVF9TWU1CT0woeWFtbF9zZXF1ZW5jZV9l bmQpOworCit2b2lkIHlhbWxfYWxpYXNfcHJpbnRmKHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0 ZXIsCisJCSAgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWNo YXIgKnN0cjsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXN0ciA9IGt2YXNwcmludGYoZW1pdHRl ci0+Z2ZwLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJeWFtbF9lbWl0dGVyX2VtaXQoZW1p dHRlciwgeWFtbF9hbGlhc19ldmVudF9jcmVhdGUoc3RyLCBlbWl0dGVyLT5nZnApKTsKKworCWtm cmVlKHN0cik7Cit9CitFWFBPUlRfU1lNQk9MKHlhbWxfYWxpYXNfcHJpbnRmKTsKKwordm9pZCB5 YW1sX3NjYWxhcl9wcmludGYoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwKKwkJCWNvbnN0 IGNoYXIgKmZtdCwgLi4uKQoreworCXN0cnVjdCB5YW1sX2V2ZW50ICpldmVudDsKKwl2YV9saXN0 IGFwOworCWNoYXIgKnN0cjsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXN0ciA9IGt2YXNwcmlu dGYoZW1pdHRlci0+Z2ZwLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJZXZlbnQgPSB5YW1s X3NjYWxhcl9ldmVudF9jcmVhdGUoTlVMTCwgTlVMTCwgc3RyLCAtMSwgdHJ1ZSwKKwkJCQkJIHRy dWUsIHRydWUsIDAsIGVtaXR0ZXItPmdmcCk7CisJeWFtbF9lbWl0dGVyX2VtaXQoZW1pdHRlciwg ZXZlbnQpOworfQorRVhQT1JUX1NZTUJPTCh5YW1sX3NjYWxhcl9wcmludGYpOworCit2b2lkIHlh bWxfcGFpcl9wcmludGYoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwKKwkJICAgICAgY29u c3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJc3RydWN0IHlhbWxfZXZl bnQgKmV2ZW50OworCXZhX2xpc3QgYXA7CisJY2hhciAqc3RyOworCisJZXZlbnQgPSB5YW1sX3Nj YWxhcl9ldmVudF9jcmVhdGUoTlVMTCwgTlVMTCwgbmFtZSwgLTEsIGZhbHNlLAorCQkJCQkgdHJ1 ZSwgdHJ1ZSwgMCwgZW1pdHRlci0+Z2ZwKTsKKwl5YW1sX2VtaXR0ZXJfZW1pdChlbWl0dGVyLCBl dmVudCk7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlzdHIgPSBrdmFzcHJpbnRmKGVtaXR0ZXIt PmdmcCwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCWV2ZW50ID0geWFtbF9zY2FsYXJfZXZl bnRfY3JlYXRlKE5VTEwsIE5VTEwsIHN0ciwgLTEsIHRydWUsCisJCQkJCSB0cnVlLCB0cnVlLCAw LCBlbWl0dGVyLT5nZnApOworCXlhbWxfZW1pdHRlcl9lbWl0KGVtaXR0ZXIsIGV2ZW50KTsKK30K K0VYUE9SVF9TWU1CT0woeWFtbF9wYWlyX3ByaW50Zik7CisKK3ZvaWQgeWFtbF9hc2NpaTg1X2Vu Y29kZShzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkJIGNvbnN0IHZvaWQgKmRhdGEs IHNpemVfdCBsZW4sIGJvb2wgY29tcHJlc3NlZCkKK3sKKwlzdHJ1Y3QgeWFtbF9ldmVudCAqZXZl bnQ7CisJY29uc3QgdTMyICpzcmMgPSBkYXRhOworCWNoYXIgKmJ1ZiwgKmRzdDsKKwlpbnQgaTsK KworCWlmICghZGF0YSB8fCAhbGVuKQorCQlyZXR1cm47CisKKwlidWYgPSBrbWFsbG9jKGFzY2lp ODVfZW5jb2RlX2xlbihsZW4pICogNSwgZW1pdHRlci0+Z2ZwKTsKKwlpZiAoIWJ1ZikKKwkJcmV0 dXJuOworCisJZHN0ID0gYnVmOworCXdoaWxlIChsZW4gPiA0KSB7CisJCXUzMiBpbiA9ICpzcmMr KzsKKworCQlpZiAoaW4gPT0gMCkgeworCQkJKmRzdCsrID0gJ3onOworCQl9IGVsc2UgeworCQkJ Zm9yIChpID0gNTsgaS0tOyApIHsKKwkJCQlkc3RbaV0gPSAnIScgKyBpbiAlIDg1OworCQkJCWlu IC89IDg1OworCQkJfQorCQkJZHN0ICs9IDU7CisJCX0KKwkJbGVuIC09IDQ7CisJfQorCisJaWYg KGxlbikgeworCQl1MzIgaW4gPSAwOworCisJCW1lbWNweSgmaW4sIHNyYywgbGVuKTsKKworCQlp ZiAoaW4gPT0gMCkgeworCQkJKmRzdCsrID0gJ3onOworCQl9IGVsc2UgeworCQkJZm9yIChpID0g NTsgaS0tOyApIHsKKwkJCQlkc3RbaV0gPSAnIScgKyBpbiAlIDg1OworCQkJCWluIC89IDg1Owor CQkJfQorCQkJZHN0ICs9IDU7CisJCX0KKwl9CisKKwlldmVudCA9IHlhbWxfc2NhbGFyX2V2ZW50 X2NyZWF0ZShOVUxMLAorCQkJCQkgY29tcHJlc3NlZCA/ICJhc2NpaTg1Lmd6IiA6ICJhc2NpaTg1 IiwKKwkJCQkJIGJ1ZiwgZHN0IC0gYnVmLCB0cnVlLAorCQkJCQkgZmFsc2UsIGZhbHNlLAorCQkJ CQkgWUFNTF9GT0xERURfU0NBTEFSX1NUWUxFLAorCQkJCQkgZW1pdHRlci0+Z2ZwKTsKKwl5YW1s X2VtaXR0ZXJfZW1pdChlbWl0dGVyLCBldmVudCk7Cit9CitFWFBPUlRfU1lNQk9MKHlhbWxfYXNj aWk4NV9lbmNvZGUpOworCitpbnQgeWFtbF9jbG9zZShzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0 dGVyLCBjb25zdCBjaGFyICoqcHJvYmxlbSkKK3sKKwlpbnQgZXJyOworCisJeWFtbF9lbWl0dGVy X2VtaXQoZW1pdHRlciwKKwkJCSAgeWFtbF9kb2N1bWVudF9lbmRfZXZlbnRfY3JlYXRlKHRydWUs IEdGUF9LRVJORUwpKTsKKwl5YW1sX2VtaXR0ZXJfZW1pdChlbWl0dGVyLAorCQkJICB5YW1sX3N0 cmVhbV9lbmRfZXZlbnRfY3JlYXRlKEdGUF9LRVJORUwpKTsKKworCWVyciA9IHlhbWxfZW1pdHRl cl9mbHVzaChlbWl0dGVyLCBwcm9ibGVtKTsKKwl5YW1sX2VtaXR0ZXJfZGVzdHJveShlbWl0dGVy KTsKKworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKHlhbWxfY2xvc2UpOwotLSAKMi4y NS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRl bC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK