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=-8.8 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,UPPERCASE_50_75,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 B6B5BC3F2CD for ; Fri, 28 Feb 2020 17:31:38 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (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 6431524699 for ; Fri, 28 Feb 2020 17:31:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="DA/+AbMl" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6431524699 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=quicinc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:51418 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j7jU9-00035U-GN for qemu-devel@archiver.kernel.org; Fri, 28 Feb 2020 12:31:37 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:58635) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j7imT-0005sQ-F0 for qemu-devel@nongnu.org; Fri, 28 Feb 2020 11:46:33 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j7imP-0007Ss-0Z for qemu-devel@nongnu.org; Fri, 28 Feb 2020 11:46:29 -0500 Received: from alexa-out-sd-02.qualcomm.com ([199.106.114.39]:27035) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j7imK-0005Ug-V7 for qemu-devel@nongnu.org; Fri, 28 Feb 2020 11:46:22 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1582908381; x=1614444381; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=raV0a5Ai84DQTSYp+zAGTgKUh+hIWVz9RLCOHFVyX5g=; b=DA/+AbMlYIF/kC0CE+370WghiEhSojyXd1xp1nqrgUiTNW19IGZyCOYN S0mUoRAfv4J/EQoz5Vs6qpXYRuiuE2rS2Qtnq1bbylT+gQyKVvooV8Ytc oO6e2wC3882ZFuz74Jr/89TL+BmCHMVrQAFcbT0JSUWCzn/KvO9HHzP2v I=; Received: from unknown (HELO ironmsg04-sd.qualcomm.com) ([10.53.140.144]) by alexa-out-sd-02.qualcomm.com with ESMTP; 28 Feb 2020 08:44:34 -0800 Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg04-sd.qualcomm.com with ESMTP; 28 Feb 2020 08:44:33 -0800 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 5B50E1163; Fri, 28 Feb 2020 10:44:33 -0600 (CST) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [RFC PATCH v2 58/67] Hexagon HVX import macro definitions Date: Fri, 28 Feb 2020 10:43:54 -0600 Message-Id: <1582908244-304-59-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1582908244-304-1-git-send-email-tsimpson@quicinc.com> References: <1582908244-304-1-git-send-email-tsimpson@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 199.106.114.39 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: riku.voipio@iki.fi, richard.henderson@linaro.org, laurent@vivier.eu, Taylor Simpson , philmd@redhat.com, aleksandar.m.mail@gmail.com Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" SW1wb3J0ZWQgZnJvbSB0aGUgSGV4YWdvbiBhcmNoaXRlY3R1cmUgbGlicmFyeQogICAgaW1wb3J0 ZWQvYWxsZXh0X21hY3Jvcy5kZWYgICAgICAgVG9wIGxldmVsIG1hY3JvIGluY2x1ZGUgZm9yIGFs bCBleHRlbnNpb25zCiAgICBpbXBvcnRlZC9tbXZlYy9tYWNyb3MuZGVmICAgICAgICBIVlggbWFj cm8gZGVmaW5pdGlvbnMKVGhlIG1hY3JvIGRlZmluaXRpb24gZmlsZXMgc3BlY2lmeSBpbnN0cnVj dGlvbiBhdHRyaWJ1dGVzIHRoYXQgYXJlIGFwcGxpZWQKdG8gZWFjaCBpbnN0cnVjdGlvbiB0aGF0 IHJldmVyZW5jZXMgdGhlIG1hY3JvLgoKU2lnbmVkLW9mZi1ieTogVGF5bG9yIFNpbXBzb24gPHRz aW1wc29uQHF1aWNpbmMuY29tPgotLS0KIHRhcmdldC9oZXhhZ29uL2ltcG9ydGVkL2FsbGV4dF9t YWNyb3MuZGVmIHwgICAyNSArCiB0YXJnZXQvaGV4YWdvbi9pbXBvcnRlZC9tbXZlYy9tYWNyb3Mu ZGVmICB8IDExMTAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdl ZCwgMTEzNSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGFyZ2V0L2hleGFnb24v aW1wb3J0ZWQvYWxsZXh0X21hY3Jvcy5kZWYKIGNyZWF0ZSBtb2RlIDEwMDc1NSB0YXJnZXQvaGV4 YWdvbi9pbXBvcnRlZC9tbXZlYy9tYWNyb3MuZGVmCgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFn b24vaW1wb3J0ZWQvYWxsZXh0X21hY3Jvcy5kZWYgYi90YXJnZXQvaGV4YWdvbi9pbXBvcnRlZC9h bGxleHRfbWFjcm9zLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWYx NmViCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24vaW1wb3J0ZWQvYWxsZXh0X21h Y3Jvcy5kZWYKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqICBDb3B5cmlnaHQoYykgMjAxOS0yMDIw IFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg KgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisvKgorICog VG9wIGxldmVsIGZpbGUgZm9yIGFsbCBpbnN0cnVjdGlvbiBzZXQgZXh0ZW5zaW9ucworICovCisj ZGVmaW5lIEVYVE5BTUUgbW12ZWMKKyNkZWZpbmUgRVhUU1RSICJtbXZlYyIKKyNpbmNsdWRlICJt bXZlYy9tYWNyb3MuZGVmIgorI3VuZGVmIEVYVE5BTUUKKyN1bmRlZiBFWFRTVFIKZGlmZiAtLWdp dCBhL3RhcmdldC9oZXhhZ29uL2ltcG9ydGVkL21tdmVjL21hY3Jvcy5kZWYgYi90YXJnZXQvaGV4 YWdvbi9pbXBvcnRlZC9tbXZlYy9tYWNyb3MuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4 IDAwMDAwMDAuLmZhMGJlYjEKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvaGV4YWdvbi9pbXBv cnRlZC9tbXZlYy9tYWNyb3MuZGVmCkBAIC0wLDAgKzEsMTExMCBAQAorLyoKKyAqICBDb3B5cmln aHQoYykgMjAxOS0yMDIwIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBSaWdo dHMgUmVzZXJ2ZWQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNl bnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K KyAqLworCitERUZfTUFDUk8oZkRVTVBRLChTVFIsUkVHKSwKKwkiZHVtcCBSRUciLAorCSJkdW1w IFJFRyIsCisJZG8geworCQlwcmludGYoU1RSICI6IiAjUkVHICI6IDB4JTAxNmxseFxuIixSRUcu dWRbMF0pOworCX0gd2hpbGUgKDApLAorCSgpCispCisKK0RFRl9NQUNSTyhmVVNFX0xPT0tVUF9B RERSRVNTX0JZX1JFViwoUFJPQyksCisJIiIsCisJIlVzZSBmdWxsIFZBIGFkZHJlc3MgZm9yIGxv b2t1cCBhbmQgZXhjZXB0aW9uIGJhc2VkIG9uIFJFViAiLAorCVBST0MtPmFyY2hfcHJvY19vcHRp b25zLT5tbXZlY191c2VfZnVsbF92YV9mb3JfbG9va3VwLAorCSgpCispCisKK0RFRl9NQUNSTyhm VVNFX0xPT0tVUF9BRERSRVNTLCgpLAorCSIiLAorCSJVc2UgZnVsbCBWQSBhZGRyZXNzIGZvciBs b29rdXAgYW5kIGV4Y2VwdGlvbiIsCisJMSwKKwkoKQorKQorCitERUZfTUFDUk8oZlJUOE5PVEUs ICgpLAorCSIiLAorCSIiLAorCSwKKwkoQV9OT1RFX1JUOCkKKykKKworREVGX01BQ1JPKGZOT1RR LChWQUwpLAorCSJ+VkFMIiwKKwkiflZBTCIsCisJLyogV2lsbCBicmVhayBWaXN1YWwgU3R1ZGlv PyAqLworCSh7bW1xcmVnX3QgX3JldCA9IHswfTsgaW50IF9pXzsgZm9yIChfaV8gPSAwOyBfaV8g PCBmVkVDU0laRSgpLzY0OyBfaV8rKykgX3JldC51ZFtfaV9dID0gflZBTC51ZFtfaV9dOyBfcmV0 O30pLAorCSgpCispCisKK0RFRl9NQUNSTyhmR0VUUUJJVFMsKFJFRyxXSURUSCxNQVNLLEJJVE5P KSwKKwkiUkVHW0JJVE5PK1dJRFRILTE6QklUTk9dIiwKKwkiR2V0IE1BU0sgYml0cyBhdCBCSVRO TyBmcm9tIFJFRyIsCisJKChNQVNLKSAmIChSRUcud1soQklUTk8pPj41XSA+PiAoKEJJVE5PKSAm IDB4MWYpKSksCisJKCkKKykKKworREVGX01BQ1JPKGZHRVRRQklULChSRUcsQklUTk8pLAorCSJS RUdbQklUTk9dIiwKKwkiR2V0IGJpdCBCSVROTyBmcm9tIFJFRyIsCisJZkdFVFFCSVRTKFJFRywx LDEsQklUTk8pLAorCSgpCispCisKK0RFRl9NQUNSTyhmR0VOTUFTS1csKFFSRUcsSURYKSwKKwki bWFza3coUVJFRyxJRFgpIiwKKwkiR2VuZXJhdGUgbWFzayBmcm9tIFFSRUcgZm9yIHdvcmQgSURY IiwKKwkoKChmR0VUUUJJVChRUkVHLChJRFgqNCswKSkgPyAweEZGIDogMHgwKSA8PCAwKQorCXwo KGZHRVRRQklUKFFSRUcsKElEWCo0KzEpKSA/IDB4RkYgOiAweDApIDw8IDgpCisJfCgoZkdFVFFC SVQoUVJFRywoSURYKjQrMikpID8gMHhGRiA6IDB4MCkgPDwgMTYpCisJfCgoZkdFVFFCSVQoUVJF RywoSURYKjQrMykpID8gMHhGRiA6IDB4MCkgPDwgMjQpKSwKKwkoKQorKQorREVGX01BQ1JPKGZH RVQxMEJJVCwoQ09FLFZBTCxQT1MpLAorCSJDT0U9KCgoKChmR0VUVUJZVEUoMyxWQUwpID4+ICgy ICogUE9TKSkgJiAzKSA8PCA4KSB8IGZHRVRVQllURShQT1MsVkFMKSkgPDwgNikgPj4gNjsiLAor CSJHZXQgMTAtYml0IGNvZWZmaWNpZW50IGZyb20gY3VycmVudCB3b3JkIHZhbHVlIGFuZCBieXRl IHBvc2l0aW9uIiwKKwl7CisJCUNPRSA9ICgoKCgoZkdFVFVCWVRFKDMsVkFMKSA+PiAoMiAqIFBP UykpICYgMykgPDwgOCkgfCBmR0VUVUJZVEUoUE9TLFZBTCkpIDw8IDYpOworCQlDT0UgPj49IDY7 CisJfSwKKwkoKQorKQorCitERUZfTUFDUk8oZlZNQVgsKFgsWSksCisJIm1heChYLFkpIiwKKwki IiwKKwkoWD5ZKSA/IFggOiBZLAorCSgpCispCisKKworREVGX01BQ1JPKGZSRUFEX1ZFQywKKyAg ICAoRFNULElEWCksCisgICAgIkRTVD1WUkVHW0lEWF0iLCAgIC8qIHNob3J0IGRlc2MgKi8KKyAg ICAiUmVhZCBWZWN0b3IgSURYIiwgLyogbG9uZyBkZXNjICovCisJKERTVCA9IFJFQURfVlJFRyhm TU9EQ0lSQ1UoKElEWCksNSkpKSwKKyAgICAoKQorKQorCitERUZfTUFDUk8oZkdFVE5JQkJMRSwo SURYLFNSQyksCisgICAgIlNSQy5zNFtJRFhdIiwKKyAgICAiR2V0IG5pYmJsZSIsCisgICAgKCBm U1hUTig0LDgsKFNSQyA+PiAoNCpJRFgpKSAmIDB4RikgKSwKKyAgICAoKQorKQorCitERUZfTUFD Uk8oZkdFVENSVU1CLChJRFgsU1JDKSwKKyAgICAiU1JDLnMyW0lEWF0iLAorICAgICJHZXQgMmJp dHMiLAorICAgICggZlNYVE4oMiw4LChTUkMgPj4gKDIqSURYKSkgJiAweDMpICksCisgICAgKCkK KykKKworREVGX01BQ1JPKGZHRVRDUlVNQl9TWU1NRVRSSUMsKElEWCxTUkMpLAorICAgICJTUkMu czJbSURYXSA+PSAwID8gKDItU1JDLnMyW0lEWF0pIDogU1JDLnMyW0lEWF0iLAorICAgICJHZXQg MmJpdHMiLAorICAgICggKGZHRVRDUlVNQihJRFgsU1JDKT49MCA/ICgyLWZHRVRDUlVNQihJRFgs U1JDKSkgOiBmR0VUQ1JVTUIoSURYLFNSQykgKSApLAorICAgICgpCispCisKKyNkZWZpbmUgWkVS T19PRkZTRVRfMkIgKworCitERUZfTUFDUk8oZldSSVRFX1ZFQywKKyAgICAoSURYLFZBUiksCisg ICAgIlZSRUdbSURYXT1WQVIiLCAgIC8qIHNob3J0IGRlc2MgKi8KKyAgICAiV3JpdGUgVmVjdG9y IElEWCIsIC8qIGxvbmcgZGVzYyAqLworCShXUklURV9WUkVHKGZNT0RDSVJDVSgoSURYKSw1KSxW QVIpKSwKKyAgICAoKQorKQorCitERUZfTUFDUk8oZkdFTk1BU0tILChRUkVHLElEWCksCisJIm1h c2toKFFSRUcsSURYKSIsCisJImdlbmVyYXRlIG1hc2sgZnJvbSBRUkVHIGZvciBoYWxmd29yZCBJ RFgiLAorCSgoKGZHRVRRQklUKFFSRUcsKElEWCoyKzApKSA/IDB4RkYgOiAweDApIDw8IDApCisJ fCgoZkdFVFFCSVQoUVJFRywoSURYKjIrMSkpID8gMHhGRiA6IDB4MCkgPDwgOCkpLAorCSgpCisp CisKK0RFRl9NQUNSTyhmR0VUTUFTS1csKFZSRUcsUVJFRyxJRFgpLAorCSJWUkVHLndbSURYXSAm IGZHRU5NQVNLVyhRUkVHLElEWCkiLAorCSJNYXNrIHdvcmQgSURYIGZyb20gVlJFRyB1c2luZyBR UkVHIiwKKwkoVlJFRy53W0lEWF0gJiBmR0VOTUFTS1coKFFSRUcpLElEWCkpLAorCSgpCispCisK K0RFRl9NQUNSTyhmR0VUTUFTS0gsKFZSRUcsUVJFRyxJRFgpLAorCSJWUkVHLmhbSURYXSAmIGZH RU5NQVNLSChRUkVHLElEWCkiLAorCSJNYXNrIHdvcmQgSURYIGZyb20gVlJFRyB1c2luZyBRUkVH IiwKKwkoVlJFRy5oW0lEWF0gJiBmR0VOTUFTS0goKFFSRUcpLElEWCkpLAorCSgpCispCisKK0RF Rl9NQUNSTyhmQ09ORE1BU0s4LChRUkVHLElEWCxZRVNWQUwsTk9WQUwpLAorCSJRUkVHLklEWCA/ IFlFU1ZBTCA6IE5PVkFMIiwKKwkiUVJFRy5JRFggPyBZRVNWQUwgOiBOT1ZBTCIsCisJKGZHRVRR QklUKFFSRUcsSURYKSA/IChZRVNWQUwpIDogKE5PVkFMKSksCisJKCkKKykKKworREVGX01BQ1JP KGZDT05ETUFTSzE2LChRUkVHLElEWCxZRVNWQUwsTk9WQUwpLAorCSJzZWxlY3RfYnl0ZXMoUVJF RyxJRFgsWUVTVkFMLE5PVkFMKSIsCisJInNlbGVjdF9ieXRlcyhRUkVHLElEWCxZRVNWQUwsTk9W QUwpIiwKKwkoKGZHRU5NQVNLSChRUkVHLElEWCkgJiAoWUVTVkFMKSkgfCAoZkdFTk1BU0tIKGZO T1RRKFFSRUcpLElEWCkgJiAoTk9WQUwpKSksCisJKCkKKykKKworREVGX01BQ1JPKGZDT05ETUFT SzMyLChRUkVHLElEWCxZRVNWQUwsTk9WQUwpLAorCSJzZWxlY3RfYnl0ZXMoUVJFRyxJRFgsWUVT VkFMLE5PVkFMKSIsCisJInNlbGVjdF9ieXRlcyhRUkVHLElEWCxZRVNWQUwsTk9WQUwpIiwKKwko KGZHRU5NQVNLVyhRUkVHLElEWCkgJiAoWUVTVkFMKSkgfCAoZkdFTk1BU0tXKGZOT1RRKFFSRUcp LElEWCkgJiAoTk9WQUwpKSksCisJKCkKKykKKworCitERUZfTUFDUk8oZlNFVFFCSVRTLChSRUcs V0lEVEgsTUFTSyxCSVROTyxWQUwpLAorCSJSRUdbQklUTk8rV0lEVEgtMTpCSVROT10gPSBWQUwi LAorCSJQdXQgYml0cyBpbnRvIFJFRyIsCisJZG8geworCQlzaXplNHVfdCBfX1RNUCA9IChWQUwp OworCQlSRUcud1soQklUTk8pPj41XSAmPSB+KChNQVNLKSA8PCAoKEJJVE5PKSAmIDB4MWYpKTsK KwkJUkVHLndbKEJJVE5PKT4+NV0gfD0gKCgoX19UTVApICYgKE1BU0spKSA8PCAoKEJJVE5PKSAm IDB4MWYpKTsKKwl9IHdoaWxlICgwKSwKKwkoKQorKQorCitERUZfTUFDUk8oZlNFVFFCSVQsKFJF RyxCSVROTyxWQUwpLAorCSJSRUdbQklUTk9dPVZBTCIsCisJIlB1dCBiaXQgaW50byBSRUciLAor CWZTRVRRQklUUyhSRUcsMSwxLEJJVE5PLFZBTCksCisJKCkKKykKKworREVGX01BQ1JPKGZWQllU RVMsKCksCisJIlZXSURUSCIsCisJIk51bWJlciBvZiBieXRlcyBpbiBhIHZlY3RvciIsCisJKGZW RUNTSVpFKCkpLAorCSgpCispCisKK0RFRl9NQUNSTyhmVkhBTFZFUywoKSwKKwkiVldJRFRILzIi LAorCSJOdW1iZXIgb2YgaGFsdmVzIGluIGEgdmVjdG9yIiwKKwkoZlZFQ1NJWkUoKS8yKSwKKwko KQorKQorCitERUZfTUFDUk8oZlZXT1JEUywoKSwKKwkiVldJRFRILzIiLAorCSJOdW1iZXIgb2Yg d29yZHMgaW4gYSB2ZWN0b3IiLAorCShmVkVDU0laRSgpLzQpLAorCSgpCispCisKK0RFRl9NQUNS TyhmVkRXT1JEUywoKSwKKwkiVldJRFRILzgiLAorCSJOdW1iZXIgb2YgZG91YmxlIHdvcmRzIGlu IGEgdmVjdG9yIiwKKwkoZlZFQ1NJWkUoKS84KSwKKwkoKQorKQorCitERUZfTUFDUk8oZlZBTElH TiwgKEFERFIsIExPRzJfQUxJR05NRU5UKSwKKyAgICAiQUREUiA9IEFERFIgJiB+KExPRzJfQUxJ R05NRU5ULTEpIiwKKyAgICAiQWxpZ24gdG8gRWxlbWVudCBTaXplIiwKKyAgICAoIEFERFIgPSBB RERSICYgfihMT0cyX0FMSUdOTUVOVC0xKSksCisgICAgKCkKKykKKworREVGX01BQ1JPKGZWTEFT VEJZVEUsIChBRERSLCBMT0cyX0FMSUdOTUVOVCksCisgICAgIkFERFIgPSBBRERSIHwgKExPRzJf QUxJR05NRU5ULTEpIiwKKyAgICAiU2V0IExTQiBvZiBsZW5ndGggdG8gbGFzdCBieXRlIiwKKyAg ICAoIEFERFIgPSBBRERSIHwgKExPRzJfQUxJR05NRU5ULTEpKSwKKyAgICAoKQorKQorCisKK0RF Rl9NQUNSTyhmVkVMRU0sIChXSURUSCksCisgICAgIlZCSVRTL1dJRFRIIiwKKyAgICAiTnVtYmVy IG9mIFdJRFRILWJpdCBlbGVtZW50cyBpbiBhIHZlY3RvciIsCisgICAgKChmVkVDU0laRSgpKjgp L1dJRFRIKSwKKyAgICAoKQorKQorCitERUZfTUFDUk8oZlZFQ0xPR1NJWkUsKCksCisgICAgImxv ZzIoVkVDVE9SX1NJWkUpIiwKKyAgICAiTG9nIGJhc2UgMiBvZiB0aGUgbnVtYmVyIG9mIGJ5dGVz IGluIGEgdmVjdG9yIiwKKyAgICAobW12ZWNfY3VycmVudF92ZWNsb2dzaXplKHRocmVhZCkpLAor ICAgICgpCispCisKK0RFRl9NQUNSTyhmVkJVRl9JRFgsKEVBKSwKKwkiKEVBID4+IGxvZzIoVkVD VE9SX1NJWkUpKSAmIDB4RkYiLAorCSIoRUEgPj4gbG9nMihWRUNUT1JfU0laRSkpICYgMHhGRiIs CisJKCgoRUEpID4+IGZWRUNMT0dTSVpFKCkpICYgMHhGRiksCisJKEFfRkFLRUlOU04pCispCisK K0RFRl9NQUNSTyhmUkVBRF9WQlVGLChJRFgsV0lEWCksCisJInZidWZbSURYXS53W1dJRFhdIiwK KwkidmJ1ZltJRFhdLndbV0lEWF0iLAorCVJFQURfVkJVRihJRFgsV0lEWCksCisJKEFfRkFLRUlO U04pCispCisKK0RFRl9NQUNSTyhmTE9HX1ZCVUYsKElEWCxWQUwsV0lEWCksCisJInZidWZbSURY XS53W1dJRFhdID0gVkFMIiwKKwkidmJ1ZltJRFhdLndbV0lEWF0gPSBWQUwiLAorCUxPR19WQlVG KElEWCxWQUwsV0lEWCksCisJKEFfRkFLRUlOU04pCispCisKK0RFRl9NQUNSTyhmVkVDU0laRSwo KSwKKyAgICAiVkJZVEVTIiwKKyAgICAiTnVtYmVyIG9mIGJ5dGVzIGluIGEgdmVjdG9yIGN1cnJl bnRseSIsCisgICAgKDE8PGZWRUNMT0dTSVpFKCkpLAorICAgICgpCispCisKK0RFRl9NQUNSTyhm U1dBUEIsKEEsIEIpLAorICAgICJTV0FQKEEsQikiLAorICAgICJTd2FwIGJ5dGVzIiwKKyAgICB7 CisJCXNpemUxdV90IHRtcCA9IEE7CisJCUEgPSBCOworCQlCID0gdG1wOworCX0sCisgICAgLyog Tk9USElORyAqLworKQorCitERUZfTUFDUk8oCisJZlZaRVJPLCgpLAorCSIwIiwKKwkiMCIsCisJ bW12ZWNfemVyb192ZWN0b3IoKSwKKwkoKQorKQorCitERUZfTUFDUk8oCisgICAgZk5FV1ZSRUcs KFZOVU0pLAorICAgICJWTlVNLm5ldyIsCisgICAgIlJlZ2lzdGVyIHZhbHVlIHByb2R1Y2VkIGlu IHRoaXMgcGFja2V0IiwKKyAgICAoKFRIUkVBRDJTVFJVQ1QtPlZSZWdzX3VwZGF0ZWQgJiAoKChW UmVnTWFzaykxKTw8Vk5VTSkpID8gVEhSRUFEMlNUUlVDVC0+ZnV0dXJlX1ZSZWdzW1ZOVU1dIDog bW12ZWNfemVyb192ZWN0b3IoKSksCisgICAgKEFfRE9UTkVXVkFMVUUsQV9SRVNUUklDVF9TTE9U ME9OTFkpCispCisKK0RFRl9NQUNSTygKKwlmVl9BTF9DSEVDSywKKwkoRUEsTUFTSyksCisJIiIs CisJIiIsCisJaWYgKChFQSkgJiAoTUFTSykpIHsKKwkJd2FybigiYWxpZ25pbmcgbWlzYWxpZ25l ZCB2ZWN0b3IuIFBDPSUwOHggRUE9JTA4eCIsdGhyZWFkLT5SZWdzW1JFR19QQ10sKEVBKSk7CisJ fSwKKwkoKQorKQorREVGX01BQ1JPKGZTQ0FUVEVSX0lOSVQsICggUkVHSU9OX1NUQVJULCBMRU5H VEgsIEVMRU1FTlRfU0laRSksCisgICAgIiIsCisgICAgIiIsCisgICAgeworICAgIG1lbV92ZWN0 b3Jfc2NhdHRlcl9pbml0KHRocmVhZCwgaW5zbiwgICBSRUdJT05fU1RBUlQsIExFTkdUSCwgRUxF TUVOVF9TSVpFKTsKKwlpZiAoRVhDRVBUSU9OX0RFVEVDVEVEKSByZXR1cm47CisgICAgfSwKKyAg ICAoQV9TVE9SRSxBX01FTUxJS0UsQV9SRVNUUklDVF9TSU5HTEVfTUVNX0ZJUlNULEFfUkVTVFJJ Q1RfU0xPVDBPTkxZKQorKQorCitERUZfTUFDUk8oZkdBVEhFUl9JTklULCAoIFJFR0lPTl9TVEFS VCwgTEVOR1RILCBFTEVNRU5UX1NJWkUpLAorICAgICIiLAorICAgICIiLAorICAgIHsKKyAgICBt ZW1fdmVjdG9yX2dhdGhlcl9pbml0KHRocmVhZCwgaW5zbiwgICBSRUdJT05fU1RBUlQsIExFTkdU SCwgRUxFTUVOVF9TSVpFKTsKKwlpZiAoRVhDRVBUSU9OX0RFVEVDVEVEKSByZXR1cm47CisgICAg fSwKKyAgICAoQV9MT0FELEFfTUVNTElLRSxBX1JFU1RSSUNUX1NJTkdMRV9NRU1fRklSU1QsQV9S RVNUUklDVF9TTE9UMU9OTFkpCispCisKK0RFRl9NQUNSTyhmU0NBVFRFUl9GSU5JU0gsIChPUCks CisgICAgIiIsCisgICAgIiIsCisgICAgeworCWlmIChFWENFUFRJT05fREVURUNURUQpIHJldHVy bjsKKyAgICBtZW1fdmVjdG9yX3NjYXR0ZXJfZmluaXNoKHRocmVhZCwgaW5zbiwgT1ApOworICAg IH0sCisgICAgKCkKKykKKworREVGX01BQ1JPKGZHQVRIRVJfRklOSVNILCAoKSwKKyAgICAiIiwK KyAgICAiIiwKKyAgICB7CisJaWYgKEVYQ0VQVElPTl9ERVRFQ1RFRCkgcmV0dXJuOworICAgIG1l bV92ZWN0b3JfZ2F0aGVyX2ZpbmlzaCh0aHJlYWQsIGluc24pOworICAgIH0sCisgICAgKCkKKykK KworCitERUZfTUFDUk8oQ0hFQ0tfVlRDTV9QQUdFLCAoRkxBRywgQkFTRSwgTEVOR1RILCBPRkZT RVQsIEFMSUdOTUVOVCksCisgICAgIkZMQUc9KChCQVNFK09GRlNFVCkgPCAoQkFTRStMRU5HVEgp KSIsCisgICAgIkZMQUc9KChCQVNFK09GRlNFVCkgPCAoQkFTRStMRU5HVEgpKSIsCisgICAgIHsK KyAgICAgICAgaW50IHNsb3QgPSBpbnNuLT5zbG90OworICAgICAgICBwYWRkcl90IHBhID0gdGhy ZWFkLT5tZW1fYWNjZXNzW3Nsb3RdLnBhZGRyK09GRlNFVDsKKyAgICAgICAgcGEgPSBwYSAmIH4o QUxJR05NRU5ULTEpOworICAgICAgICBGTEFHID0gKHBhIDwgKHRocmVhZC0+bWVtX2FjY2Vzc1tz bG90XS5wYWRkcitMRU5HVEgpKTsKKyAgICAgfSwKKyAgICAoKQorKQorREVGX01BQ1JPKENPVU5U X09VVF9PRl9CT1VORFMsIChGTEFHLCBTSVpFKSwKKyAgICAiICIsCisgICAgIiIsCisgICAgIHsK KyAgICAgICAgaWYgKCFGTEFHKQorICAgICAgICB7CisgICAgICAgICAgICAgICBUSFJFQUQyU1RS VUNULT52dGNtX2xvZy5vb2JfYWNjZXNzICs9IFNJWkU7CisgICAgICAgICAgICAgICB3YXJuKCJT Y2F0dGVyL0dhdGhlciBvdXQgb2YgYm91bmRzIG9mIHJlZ2lvbiIpOworICAgICAgICB9CisgICAg IH0sCisgICAgKCkKKykKKworREVGX01BQ1JPKGZMT0dfU0NBVFRFUl9PUCwgKFNJWkUpLAorICAg ICIgICIsCisgICAgIiAgIiwKKyAgICB7CisgICAgICAgIC8vIExvZyB0aGUgc2l6ZSBhbmQgaW5k aWNhdGUgdGhhdCB0aGUgZXh0ZW5zaW9uIGV4dC5jIGZpbGUgbmVlZHMgdG8gaW5jcmVtZW50IHJp Z2h0IGJlZm9yZSBtZW1vcnkgd3JpdGUKKyAgICAgICAgVEhSRUFEMlNUUlVDVC0+dnRjbV9sb2cu b3AgPSAxOworICAgICAgICBUSFJFQUQyU1RSVUNULT52dGNtX2xvZy5vcF9zaXplID0gU0laRTsK KyAgICB9LAorICAgICgpCispCisKKworCitERUZfTUFDUk8oZlZMT0dfVlRDTV9XT1JEX0lOQ1JF TUVOVCwgKEVBLE9GRlNFVCxJTkMsSURYLEFMSUdOTUVOVCxMRU4pLAorICAgICJpZiAoUnRWIDw9 IEVBIDw9IFJ0ViArIExFTikgKkVBICs9IElOQy51d1tJRFhdICIsCisgICAgImlmIChSdFYgPD0g RUEgPD0gUnRWICsgTEVOKSAqRUEgKz0gSU5DLnV3W0lEWF0gIiwKKyAgICB7CisgICAgICAgIGlu dCBzbG90ID0gaW5zbi0+c2xvdDsKKyAgICAgICAgaW50IGxvZ19iYW5rID0gMDsKKyAgICAgICAg aW50IGxvZ19ieXRlID0wOworICAgICAgICBwYWRkcl90IHBhID0gdGhyZWFkLT5tZW1fYWNjZXNz W3Nsb3RdLnBhZGRyKyhPRkZTRVQgJiB+KEFMSUdOTUVOVC0xKSk7CisgICAgICAgIHBhZGRyX3Qg cGFfaGlnaCA9IHRocmVhZC0+bWVtX2FjY2Vzc1tzbG90XS5wYWRkcitMRU47CisgICAgICAgIGZv cihpbnQgaTAgPSAwOyBpMCA8IDQ7IGkwKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvZ19i eXRlID0gICgoT0ZGU0VUPj0wKSYmKChwYStpMCk8PXBhX2hpZ2gpKTsKKyAgICAgICAgICAgIGxv Z19iYW5rIHw9IChsb2dfYnl0ZTw8aTApOworICAgICAgICAgICAgTE9HX1ZUQ01fQllURShwYStp MCxsb2dfYnl0ZSxJTkMudWJbNCpJRFgraTBdLDQqSURYK2kwKTsKKyAgICAgICAgfQorICAgICAg ICB7IExPR19WVENNX0JBTksocGEsIGxvZ19iYW5rLCBJRFgpOyB9CisgICAgfSwKKyAgICAoKQor KQorCitERUZfTUFDUk8oZlZMT0dfVlRDTV9IQUxGV09SRF9JTkNSRU1FTlQsIChFQSxPRkZTRVQs SU5DLElEWCxBTElHTk1FTlQsTEVOKSwKKyAgICAiaWYgKFJ0ViA8PSBFQSA8PSBSdFYgKyBMRU4p ICpFQSArPSBJTkMudWhbSURYXSAiLAorICAgICJpZiAoUnRWIDw9IEVBIDw9IFJ0ViArIExFTikg KkVBICs9IElOQy51aFtJRFhdICIsCisgICAgeworICAgICAgICBpbnQgc2xvdCA9IGluc24tPnNs b3Q7CisgICAgICAgIGludCBsb2dfYmFuayA9IDA7CisgICAgICAgIGludCBsb2dfYnl0ZSA9IDA7 CisgICAgICAgIHBhZGRyX3QgcGEgPSB0aHJlYWQtPm1lbV9hY2Nlc3Nbc2xvdF0ucGFkZHIrKE9G RlNFVCAmIH4oQUxJR05NRU5ULTEpKTsKKyAgICAgICAgcGFkZHJfdCBwYV9oaWdoID0gdGhyZWFk LT5tZW1fYWNjZXNzW3Nsb3RdLnBhZGRyK0xFTjsKKyAgICAgICAgZm9yKGludCBpMCA9IDA7IGkw IDwgMjsgaTArKykgeworICAgICAgICAgICAgbG9nX2J5dGUgPSAgKChPRkZTRVQ+PTApJiYoKHBh K2kwKTw9cGFfaGlnaCkpOworICAgICAgICAgICAgbG9nX2JhbmsgfD0gKGxvZ19ieXRlPDxpMCk7 CisgICAgICAgICAgICBMT0dfVlRDTV9CWVRFKHBhK2kwLGxvZ19ieXRlLElOQy51YlsyKklEWCtp MF0sMipJRFgraTApOworICAgICAgICB9CisgICAgICAgIHsgTE9HX1ZUQ01fQkFOSyhwYSwgbG9n X2JhbmssSURYKTsgfQorICAgIH0sCisgICAgKCkKKykKKworREVGX01BQ1JPKGZWTE9HX1ZUQ01f SEFMRldPUkRfSU5DUkVNRU5UX0RWLCAoRUEsT0ZGU0VULElOQyxJRFgsSURYMixJRFhfSCxBTElH Tk1FTlQsTEVOKSwKKyAgICAiaWYgKFJ0ViA8PSBFQSA8PSBSdFYgKyBMRU4pICpFQSArPSBJTi51 d1tJRFgyXS51aFtJRFhfSF0gIiwKKyAgICAiaWYgKFJ0ViA8PSBFQSA8PSBSdFYgKyBMRU4pICpF QSArPSBJTi51d1tJRFgyXS51aFtJRFhfSF0gIiwKKyAgICB7CisgICAgICAgIGludCBzbG90ID0g aW5zbi0+c2xvdDsKKyAgICAgICAgaW50IGxvZ19iYW5rID0gMDsKKyAgICAgICAgaW50IGxvZ19i eXRlID0gMDsKKyAgICAgICAgcGFkZHJfdCBwYSA9IHRocmVhZC0+bWVtX2FjY2Vzc1tzbG90XS5w YWRkcisoT0ZGU0VUICYgfihBTElHTk1FTlQtMSkpOworICAgICAgICBwYWRkcl90IHBhX2hpZ2gg PSB0aHJlYWQtPm1lbV9hY2Nlc3Nbc2xvdF0ucGFkZHIrTEVOOworICAgICAgICBmb3IoaW50IGkw ID0gMDsgaTAgPCAyOyBpMCsrKSB7CisgICAgICAgICAgICBsb2dfYnl0ZSA9ICAoKE9GRlNFVD49 MCkmJigocGEraTApPD1wYV9oaWdoKSk7CisgICAgICAgICAgICBsb2dfYmFuayB8PSAobG9nX2J5 dGU8PGkwKTsKKyAgICAgICAgICAgIExPR19WVENNX0JZVEUocGEraTAsbG9nX2J5dGUsSU5DLnVi WzIqSURYK2kwXSwyKklEWCtpMCk7CisgICAgICAgIH0KKyAgICAgICAgeyBMT0dfVlRDTV9CQU5L KHBhLCBsb2dfYmFuaywoMipJRFgyK0lEWF9IKSk7fQorICAgIH0sCisgICAgKCkKKykKKworCisK K0RFRl9NQUNSTyhHQVRIRVJfRlVOQ1RJT04sIChFQSxPRkZTRVQsSURYLCBMRU4sIEVMRU1FTlRf U0laRSwgQkFOS19JRFgsIFFWQUwpLAorIiIsCisiIiwKK3sKKyAgICAgICAgaW50IHNsb3QgPSBp bnNuLT5zbG90OworICAgICAgICBpbnQgaTA7CisgICAgICAgIHBhZGRyX3QgcGEgPSB0aHJlYWQt Pm1lbV9hY2Nlc3Nbc2xvdF0ucGFkZHIrT0ZGU0VUOworICAgICAgICBwYWRkcl90IHBhX2hpZ2gg PSB0aHJlYWQtPm1lbV9hY2Nlc3Nbc2xvdF0ucGFkZHIrTEVOOworICAgICAgICBpbnQgbG9nX2Jh bmsgPSAwOworICAgICAgICBpbnQgbG9nX2J5dGUgPSAwOworICAgICAgICBmb3IoaTAgPSAwOyBp MCA8IEVMRU1FTlRfU0laRTsgaTArKykKKyAgICAgICAgeworICAgICAgICAgICAgbG9nX2J5dGUg PSAgKChPRkZTRVQ+PTApJiYoKHBhK2kwKTw9cGFfaGlnaCkpICYmIFFWQUw7CisgICAgICAgICAg ICBsb2dfYmFuayB8PSAobG9nX2J5dGU8PGkwKTsKKyAgICAgICAgICAgIHNpemUxdV90IEIgID0g c2ltX21lbV9yZWFkMSh0aHJlYWQtPnN5c3RlbV9wdHIsIHRocmVhZC0+dGhyZWFkSWQsIHRocmVh ZC0+bWVtX2FjY2Vzc1tzbG90XS5wYWRkcitPRkZTRVQraTApOworICAgICAgICAgICAgVEhSRUFE MlNUUlVDVC0+dG1wX1ZSZWdzWzBdLnViW0VMRU1FTlRfU0laRSpJRFgraTBdID0gQjsKKyAgICAg ICAgICAgIExPR19WVENNX0JZVEUocGEraTAsbG9nX2J5dGUsQixFTEVNRU5UX1NJWkUqSURYK2kw KTsKKyAgICAgICAgfQorICAgICAgICBMT0dfVlRDTV9CQU5LKHBhLCBsb2dfYmFuayxCQU5LX0lE WCk7Cit9LAorKCkKKykKKworCisKK0RFRl9NQUNSTyhmVkxPR19WVENNX0dBVEhFUl9XT1JELCAo RUEsT0ZGU0VULElEWCwgTEVOKSwKKyAgICAiaWYgKFJ0ViA8PSBFQSA8PSBSdFYgKyBMRU4pIFRF TVAudXdbSURYXSA9ICpFQSAiLAorICAgICJpZiAoUnRWIDw9IEVBIDw9IFJ0ViArIExFTikgVEVN UC51d1tJRFhdID0gKkVBICIsCisgICAgeworCQlHQVRIRVJfRlVOQ1RJT04oRUEsT0ZGU0VULElE WCwgTEVOLCA0LCBJRFgsIDEpOworICAgIH0sCisgICAgKCkKKykKK0RFRl9NQUNSTyhmVkxPR19W VENNX0dBVEhFUl9IQUxGV09SRCwgKEVBLE9GRlNFVCxJRFgsIExFTiksCisgICAgIiBpZiAoUnRW IDw9IEVBIDw9IFJ0ViArIExFTikgVEVNUC51aFtJRFhdID0gKkVBICIsCisgICAgIiBpZiAoUnRW IDw9IEVBIDw9IFJ0ViArIExFTikgVEVNUC51aFtJRFhdID0gKkVBICIsCisgICAgeworCQlHQVRI RVJfRlVOQ1RJT04oRUEsT0ZGU0VULElEWCwgTEVOLCAyLCBJRFgsIDEpOworICAgIH0sCisgICAg KCkKKykKK0RFRl9NQUNSTyhmVkxPR19WVENNX0dBVEhFUl9IQUxGV09SRF9EViwgKEVBLE9GRlNF VCxJRFgsSURYMixJRFhfSCwgTEVOKSwKKyAgICAiaWYgKFJ0ViA8PSBFQSA8PSBSdFYgKyBMRU4p IFRFTVAudXdbSURYMl0udWhbSURYX0hdID0gKkVBICIsCisgICAgImlmIChSdFYgPD0gRUEgPD0g UnRWICsgTEVOKSBURU1QLnV3W0lEWDJdLnVoW0lEWF9IXSA9ICpFQSAiLAorICAgIHsKKwkJR0FU SEVSX0ZVTkNUSU9OKEVBLE9GRlNFVCxJRFgsIExFTiwgMiwgKDIqSURYMitJRFhfSCksIDEpOwor ICAgIH0sCisgICAgKCkKKykKK0RFRl9NQUNSTyhmVkxPR19WVENNX0dBVEhFUl9XT1JEUSwgKEVB LE9GRlNFVCxJRFgsIFEsIExFTiksCisgICAgIiBpZiAoIChSdFYgPD0gRUEgPD0gUnRWICsgTEVO KSAmIFEpIFRFTVAudXdbSURYXSA9ICpFQSAiLAorICAgICIgaWYgKCAoUnRWIDw9IEVBIDw9IFJ0 ViArIExFTikgJiBRKSBURU1QLnV3W0lEWF0gPSAqRUEgIiwKKyAgICB7CisJCUdBVEhFUl9GVU5D VElPTihFQSxPRkZTRVQsSURYLCBMRU4sIDQsIElEWCwgZkdFVFFCSVQoUXNWLDQqSURYK2kwKSk7 CisgICAgfSwKKyAgICAoKQorKQorREVGX01BQ1JPKGZWTE9HX1ZUQ01fR0FUSEVSX0hBTEZXT1JE USwgKEVBLE9GRlNFVCxJRFgsIFEsIExFTiksCisgICAgIiBpZiAoIChSdFYgPD0gRUEgPD0gUnRW ICsgTEVOKSAmIFEpIFRFTVAudWhbSURYXSA9ICpFQSAiLAorICAgICIgaWYgKCAoUnRWIDw9IEVB IDw9IFJ0ViArIExFTikgJiBRKSBURU1QLnVoW0lEWF0gPSAqRUEgIiwKKyAgICB7CisJCUdBVEhF Ul9GVU5DVElPTihFQSxPRkZTRVQsSURYLCBMRU4sIDIsIElEWCwgZkdFVFFCSVQoUXNWLDIqSURY K2kwKSk7CisgICAgfSwKKyAgICAoKQorKQorCitERUZfTUFDUk8oZlZMT0dfVlRDTV9HQVRIRVJf SEFMRldPUkRRX0RWLCAoRUEsT0ZGU0VULElEWCxJRFgyLElEWF9ILCBRLCBMRU4pLAorICAgICIg aWYgKCAoUnRWIDw9IEVBIDw9IFJ0ViArIExFTikgJiBRKSBURU1QLnV3W0lEWDJdLnVoW0lEWF9I XSA9ICpFQSAiLAorICAgICIgaWYgKCAoUnRWIDw9IEVBIDw9IFJ0ViArIExFTikgJiBRKSBURU1Q LnV3W0lEWDJdLnVoW0lEWF9IXSA9ICpFQSAiLAorICAgIHsKKwkJR0FUSEVSX0ZVTkNUSU9OKEVB LE9GRlNFVCxJRFgsIExFTiwgMiwgKDIqSURYMitJRFhfSCksIGZHRVRRQklUKFFzViwyKklEWCtp MCkpOworICAgIH0sCisgICAgKCkKKykKKworCitERUZfTUFDUk8oREVCVUdfTE9HX0FERFIsIChP RkZTRVQpLAorICAgICIgICIsCisgICAgIiAgIiwKKyAgICB7CisKKyAgICAgICAgaWYgKHRocmVh ZC0+cHJvY2Vzc29yX3B0ci0+YXJjaF9wcm9jX29wdGlvbnMtPm1tdmVjX25ldHdvcmtfYWRkcl9s b2cyKQorICAgICAgICB7CisKKyAgICAgICAgICAgIGludCBzbG90ID0gaW5zbi0+c2xvdDsKKyAg ICAgICAgICAgIHBhZGRyX3QgcGEgPSB0aHJlYWQtPm1lbV9hY2Nlc3Nbc2xvdF0ucGFkZHIrT0ZG U0VUOworICAgICAgICB9CisgICAgfSwKKyAgICAoKQorKQorCisKKworCisKKworCitERUZfTUFD Uk8oU0NBVFRFUl9PUF9XUklURV9UT19NRU0sIChUWVBFKSwKKyAgICAiIFJlYWQsIGFjY3VtdWxh dGUsIGFuZCB3cml0ZSB0byBWVENNIiwKKyAgICAiICAiLAorICAgIHsKKyAgICAgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBtbXZlY3gtPnZ0Y21fbG9nLnNpemU7IGkrPXNpemVvZihUWVBFKSkKKyAg ICAgICAgeworICAgICAgICAgICAgaWYgKCBtbXZlY3gtPnZ0Y21fbG9nLm1hc2sudWJbaV0gIT0g MCkgeworICAgICAgICAgICAgICAgIFRZUEUgZHN0ID0gMDsKKyAgICAgICAgICAgICAgICBUWVBF IGluYyA9IDA7CisgICAgICAgICAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IHNpemVvZihUWVBF KTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGRzdCB8PSAoc2ltX21lbV9yZWFkMSh0aHJl YWQtPnN5c3RlbV9wdHIsIHRocmVhZC0+dGhyZWFkSWQsIG1tdmVjeC0+dnRjbV9sb2cucGFbaStq XSkgPDwgKDgqaikpOworICAgICAgICAgICAgICAgICAgICBpbmMgfD0gbW12ZWN4LT52dGNtX2xv Zy5kYXRhLnViW2oraV0gPDwgKDgqaik7CisKKyAgICAgICAgICAgICAgICAgICAgbW12ZWN4LT52 dGNtX2xvZy5tYXNrLnViW2oraV0gPSAwOworICAgICAgICAgICAgICAgICAgICBtbXZlY3gtPnZ0 Y21fbG9nLmRhdGEudWJbaitpXSA9IDA7CisgICAgICAgICAgICAgICAgICAgIG1tdmVjeC0+dnRj bV9sb2cub2Zmc2V0cy51YltqK2ldID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgZHN0ICs9IGluYzsKKyAgICAgICAgICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgc2l6 ZW9mKFRZUEUpOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgc2ltX21lbV93cml0ZTEodGhy ZWFkLT5zeXN0ZW1fcHRyLHRocmVhZC0+dGhyZWFkSWQsIG1tdmVjeC0+dnRjbV9sb2cucGFbaStq XSwgKGRzdCA+PiAoOCpqKSkmIDB4RkYgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0K KworICAgIH0KKyAgICB9LAorICAgICgpCispCisKK0RFRl9NQUNSTyhTQ0FUVEVSX0ZVTkNUSU9O LCAoRUEsT0ZGU0VULElEWCwgTEVOLCBFTEVNRU5UX1NJWkUsIEJBTktfSURYLCBRVkFMLCBJTiks CisiIiwKKyIiLAoreworICAgICAgICBpbnQgc2xvdCA9IGluc24tPnNsb3Q7CisgICAgICAgIGlu dCBpMDsKKyAgICAgICAgcGFkZHJfdCBwYSA9IHRocmVhZC0+bWVtX2FjY2Vzc1tzbG90XS5wYWRk citPRkZTRVQ7CisgICAgICAgIHBhZGRyX3QgcGFfaGlnaCA9IHRocmVhZC0+bWVtX2FjY2Vzc1tz bG90XS5wYWRkcitMRU47CisgICAgICAgIGludCBsb2dfYmFuayA9IDA7CisgICAgICAgIGludCBs b2dfYnl0ZSA9IDA7CisgICAgICAgIGZvcihpMCA9IDA7IGkwIDwgRUxFTUVOVF9TSVpFOyBpMCsr KSB7CisgICAgICAgICAgICBsb2dfYnl0ZSA9ICgoT0ZGU0VUPj0wKSYmKChwYStpMCk8PXBhX2hp Z2gpKSAmJiBRVkFMOworICAgICAgICAgICAgbG9nX2JhbmsgfD0gKGxvZ19ieXRlPDxpMCk7Cisg ICAgICAgICAgICBMT0dfVlRDTV9CWVRFKHBhK2kwLGxvZ19ieXRlLElOLnViW0VMRU1FTlRfU0la RSpJRFgraTBdLEVMRU1FTlRfU0laRSpJRFgraTApOworICAgICAgICB9CisgICAgICAgIExPR19W VENNX0JBTksocGEsIGxvZ19iYW5rLEJBTktfSURYKTsKKworfSwKKygpCispCisKK0RFRl9NQUNS TyhmVkxPR19WVENNX0hBTEZXT1JELCAoRUEsT0ZGU0VULElOLElEWCwgTEVOKSwKKyAgICAiaWYg KFJ0ViA8PSBFQSA8PSBSdFYgKyBMRU4pICpFQSA9IElOLnVoW0lEWF0gIiwKKyAgICAiaWYgKFJ0 ViA8PSBFQSA8PSBSdFYgKyBMRU4pICpFQSA9IElOLnVoW0lEWF0gIiwKKyAgICB7CisJCVNDQVRU RVJfRlVOQ1RJT04gKEVBLE9GRlNFVCxJRFgsIExFTiwgMiwgSURYLCAxLCBJTik7CisgICAgfSwK KyAgICAoKQorKQorREVGX01BQ1JPKGZWTE9HX1ZUQ01fV09SRCwgKEVBLE9GRlNFVCxJTixJRFgs TEVOKSwKKyAgICAiaWYgKFJ0ViA8PSBFQSA8PSBSdFYgKyBMRU4pICpFQSA9IElOLnV3W0lEWF0g IiwKKyAgICAiaWYgKFJ0ViA8PSBFQSA8PSBSdFYgKyBMRU4pICpFQSA9IElOLnV3W0lEWF0gIiwK KyAgICB7CisJCVNDQVRURVJfRlVOQ1RJT04gKEVBLE9GRlNFVCxJRFgsIExFTiwgNCwgSURYLCAx LCBJTik7CisgICAgfSwKKyAgICAoKQorKQorCitERUZfTUFDUk8oZlZMT0dfVlRDTV9IQUxGV09S RFEsIChFQSxPRkZTRVQsSU4sSURYLFEsTEVOKSwKKyAgICAiIGlmICggKFJ0ViA8PSBFQSA8PSBS dFYgKyBMRU4pICYgUSkgKkVBID0gSU4udWhbSURYXSAiLAorICAgICIgaWYgKCAoUnRWIDw9IEVB IDw9IFJ0ViArIExFTikgJiBRKSAqRUEgPSBJTi51aFtJRFhdICIsCisgICAgeworCQlTQ0FUVEVS X0ZVTkNUSU9OIChFQSxPRkZTRVQsSURYLCBMRU4sIDIsIElEWCwgZkdFVFFCSVQoUXNWLDIqSURY K2kwKSwgSU4pOworICAgIH0sCisgICAgKCkKKykKK0RFRl9NQUNSTyhmVkxPR19WVENNX1dPUkRR LCAoRUEsT0ZGU0VULElOLElEWCxRLExFTiksCisgICAgIiBpZiAoIChSdFYgPD0gRUEgPD0gUnRW ICsgTEVOKSAmIFEpICpFQSA9IElOLnV3W0lEWF0gIiwKKyAgICAiIGlmICggKFJ0ViA8PSBFQSA8 PSBSdFYgKyBMRU4pICYgUSkgKkVBID0gSU4udXdbSURYXSAiLAorICAgIHsKKwkJU0NBVFRFUl9G VU5DVElPTiAoRUEsT0ZGU0VULElEWCwgTEVOLCA0LCBJRFgsIGZHRVRRQklUKFFzViw0KklEWCtp MCksIElOKTsKKyAgICB9LAorICAgICgpCispCisKKworCisKKworREVGX01BQ1JPKGZWTE9HX1ZU Q01fSEFMRldPUkRfRFYsIChFQSxPRkZTRVQsSU4sSURYLElEWDIsSURYX0gsIExFTiksCisgICAg ImlmIChSdFYgPD0gRUEgPD0gUnRWICsgTEVOKSAqRUEgPSBJTi5od1tJRFgyXS51aFtJRFhfSF0g IiwKKyAgICAiaWYgKFJ0ViA8PSBFQSA8PSBSdFYgKyBMRU4pICpFQSA9IElOLmh3W0lEWDJdLnVo W0lEWF9IXSAiLAorICAgIHsKKwkJU0NBVFRFUl9GVU5DVElPTiAoRUEsT0ZGU0VULElEWCwgTEVO LCAyLCAoMipJRFgyK0lEWF9IKSwgMSwgSU4pOworICAgIH0sCisgICAgKCkKKykKKworREVGX01B Q1JPKGZWTE9HX1ZUQ01fSEFMRldPUkRRX0RWLCAoRUEsT0ZGU0VULElOLElEWCxRLElEWDIsSURY X0gsIExFTiksCisgICAgIiBpZiAoIChSdFYgPD0gRUEgPD0gUnRWICsgTEVOKSAmIFEpICpFQSA9 IElOLmh3W0lEWDJdLnVoW0lEWF9IXSAiLAorICAgICIgaWYgKCAoUnRWIDw9IEVBIDw9IFJ0ViAr IExFTikgJiBRKSAqRUEgPSBJTi5od1tJRFgyXS51aFtJRFhfSF0gIiwKKyAgICB7CisJCVNDQVRU RVJfRlVOQ1RJT04gKEVBLE9GRlNFVCxJRFgsIExFTiwgMiwgKDIqSURYMitJRFhfSCksIGZHRVRR QklUKFFzViwyKklEWCtpMCksIElOKTsKKyAgICB9LAorICAgICgpCispCisKKworCisKKworCitE RUZfTUFDUk8oZlNUT1JFUkVMRUFTRSwgKEVBLFRZUEUpLAorCSJjaGFyKiBhZGRyID0gRUEmfihB TElHTk1FTlQtMSk7IFplcm8gQnl0ZSBTdG9yZSBSZWxlYXNlIChOb24tYmxvY2tpbmcgU3luYyki LAorCSJaZXJvIEJ5dGUgU3RvcmUgUmVsZWFzZSAoU3luYykiLAorICAgIHsKKyAgICAgICAgZlZf QUxfQ0hFQ0soRUEsZlZFQ1NJWkUoKS0xKTsKKworICAgICAgICBtZW1fc3RvcmVfcmVsZWFzZSh0 aHJlYWQsIGluc24sIGZWRUNTSVpFKCksIEVBJn4oZlZFQ1NJWkUoKS0xKSwgRUEsIFRZUEUsIGZV U0VfTE9PS1VQX0FERFJFU1NfQllfUkVWKHRocmVhZC0+cHJvY2Vzc29yX3B0cikpOworICAgIH0s CisJKEFfU1RPUkUsQV9NRU1MSUtFLEFfUkVTVFJJQ1RfU0lOR0xFX01FTV9GSVJTVCkKKykKKwor REVGX01BQ1JPKGZWRkVUQ0hfQUwsIChFQSksCisgICAgIlByZWZldGNoIHZlY3RvciBpbnRvIEwy IGNhY2hlIGF0IEVBIiwKKyAgICAiUHJlZmV0Y2ggdmVjdG9yIGludG8gTDIgY2FjaGUgYXQgRUEi LAorICAgIHsKKyAgICBmVl9BTF9DSEVDSyhFQSxmVkVDU0laRSgpLTEpOworICAgIG1lbV9mZXRj aF92ZWN0b3IodGhyZWFkLCBpbnNuLCBFQSZ+KGZWRUNTSVpFKCktMSksIGluc24tPnNsb3QsIGZW RUNTSVpFKCkpOworICAgIH0sCisgICAgKEFfTE9BRCxBX01FTUxJS0UsQV9SRVNUUklDVF9TSU5H TEVfTUVNX0ZJUlNULEFfUkVTVFJJQ1RfTk9TTE9UMV9TVE9SRSkKKykKKworCitERUZfTUFDUk8o ZkxPQURNTVZfQUwsIChFQSwgQUxJR05NRU5ULCBMRU4sIERTVCksCisgICAgImNoYXIqIGFkZHIg PSBFQSZ+KEFMSUdOTUVOVC0xKTsgZm9yIChpPTA7IGk8TEVOOyArK2kpIERTVFtpXSA9IGFkZHJb aV0iLAorICAgICJMb2FkIExFTiBieXRlcyBmcm9tIG1lbW9yeSBhdCBFQSAoZm9yY2VkIGFsaWdu bWVudCkgdG8gRFNULiIsCisgICAgeworICAgIGZWX0FMX0NIRUNLKEVBLEFMSUdOTUVOVC0xKTsK Kwl0aHJlYWQtPmxhc3RfcGt0LT5kb3VibGVfYWNjZXNzX3ZlYyA9IDA7CisgICAgbWVtX2xvYWRf dmVjdG9yX29kZHZhKHRocmVhZCwgaW5zbiwgRUEmfihBTElHTk1FTlQtMSksIEVBLCBpbnNuLT5z bG90LCBMRU4sICZEU1QudWJbMF0sIExFTiwgZlVTRV9MT09LVVBfQUREUkVTU19CWV9SRVYodGhy ZWFkLT5wcm9jZXNzb3JfcHRyKSk7CisgICAgfSwKKyAgICAoQV9MT0FELEFfTUVNTElLRSxBX1JF U1RSSUNUX1NJTkdMRV9NRU1fRklSU1QsQV9SRVNUUklDVF9OT1NMT1QxX1NUT1JFKQorKQorCitE RUZfTUFDUk8oZkxPQURNTVYsIChFQSwgRFNUKSwKKwkiRFNUID0gKihFQSZ+KEFMSUdOTUVOVC0x KSkiLAorCSJMb2FkIHZlY3RvciBmcm9tIG1lbW9yeSBhdCBFQSAoZm9yY2VkIGFsaWdubWVudCkg dG8gRFNULiIsCisJZkxPQURNTVZfQUwoRUEsZlZFQ1NJWkUoKSxmVkVDU0laRSgpLERTVCksCisJ KCkKKykKKworREVGX01BQ1JPKGZMT0FETU1WUSwgKEVBLERTVCxRVkFMKSwKKwkiRFNUID0gdm11 eChRVkFMLCooRUEmfihBTElHTk1FTlQtMSkpLDApIiwKKwkiTG9hZCB2ZWN0b3IgZnJvbSBtZW1v cnkgYXQgRUEgKGZvcmNlZCBhbGlnbm1lbnQpIHRvIERTVC4iLAorCWRvIHsKKwkJaW50IF9faTsK KwkJZkxPQURNTVZfQUwoRUEsZlZFQ1NJWkUoKSxmVkVDU0laRSgpLERTVCk7CisJCWZWRk9SRUFD SCg4LF9faSkgaWYgKCFmR0VUUUJJVChRVkFMLF9faSkpIERTVC5iW19faV0gPSAwOworCX0gd2hp bGUgKDApLAorCSgpCispCisKK0RFRl9NQUNSTyhmTE9BRE1NVk5RLCAoRUEsRFNULFFWQUwpLAor CSJEU1QgPSB2bXV4KFFWQUwsMCwqKEVBJn4oQUxJR05NRU5ULTEpKSkiLAorCSJMb2FkIHZlY3Rv ciBmcm9tIG1lbW9yeSBhdCBFQSAoZm9yY2VkIGFsaWdubWVudCkgdG8gRFNULiIsCisJZG8gewor CQlpbnQgX19pOworCQlmTE9BRE1NVl9BTChFQSxmVkVDU0laRSgpLGZWRUNTSVpFKCksRFNUKTsK KwkJZlZGT1JFQUNIKDgsX19pKSBpZiAoZkdFVFFCSVQoUVZBTCxfX2kpKSBEU1QuYltfX2ldID0g MDsKKwl9IHdoaWxlICgwKSwKKwkoKQorKQorCitERUZfTUFDUk8oZkxPQURNTVZVX0FMLCAoRUEs IEFMSUdOTUVOVCwgTEVOLCBEU1QpLAorICAgICJjaGFyKiBhZGRyID0gRUE7IGZvciAoaT0wOyBp PExFTjsgKytpKSBEU1RbaV0gPSBhZGRyW2ldIiwKKyAgICAiTG9hZCBMRU4gYnl0ZXMgZnJvbSBt ZW1vcnkgYXQgRUEgKHVuYWxpZ25lZCkgdG8gRFNULiIsCisgICAgeworICAgIHNpemU0dV90IHNp emUyID0gKEVBKSYoQUxJR05NRU5ULTEpOworICAgIHNpemU0dV90IHNpemUxID0gTEVOLXNpemUy OworCXRocmVhZC0+bGFzdF9wa3QtPmRvdWJsZV9hY2Nlc3NfdmVjID0gMTsKKyAgICBtZW1fbG9h ZF92ZWN0b3Jfb2RkdmEodGhyZWFkLCBpbnNuLCBFQStzaXplMSwgRUErZlZFQ1NJWkUoKSwgLyog c2xvdCAqLyAxLCBzaXplMiwgJkRTVC51YltzaXplMV0sIHNpemUyLCBmVVNFX0xPT0tVUF9BRERS RVNTKCkpOworICAgIG1lbV9sb2FkX3ZlY3Rvcl9vZGR2YSh0aHJlYWQsIGluc24sIEVBLCBFQSwv KiBzbG90ICovIDAsIHNpemUxLCAmRFNULnViWzBdLCBzaXplMSwgZlVTRV9MT09LVVBfQUREUkVT U19CWV9SRVYodGhyZWFkLT5wcm9jZXNzb3JfcHRyKSk7CisgICAgfSwKKyAgICAoQV9MT0FELEFf TUVNTElLRSxBX1JFU1RSSUNUX1NJTkdMRV9NRU1fRklSU1QsQV9SRVNUUklDVF9OT1NMT1QxX1NU T1JFKQorKQorCitERUZfTUFDUk8oZkxPQURNTVZVLCAoRUEsIERTVCksCisJIkRTVCA9ICpFQSIs CisJIkxvYWQgdmVjdG9yIGZyb20gbWVtb3J5IGF0IEVBICh1bmFsaWduZWQpIHRvIERTVC4iLAor CXsKKwkJLyogaWYgYWRkcmVzcyBoYXBwZW5zIHRvIGJlIGFsaWduZWQsIG9ubHkgZG8gYWxpZ25l ZCBsb2FkICovCisgICAgICAgIHRocmVhZC0+bGFzdF9wa3QtPnBrdF9oYXNfdnRjbV9hY2Nlc3Mg PSAwOworICAgICAgICB0aHJlYWQtPmxhc3RfcGt0LT5wa3RfYWNjZXNzX2NvdW50ID0gMDsKKwkJ aWYgKCAoRUEgJiAoZlZFQ1NJWkUoKS0xKSkgPT0gMCkgeworICAgICAgICAgICAgdGhyZWFkLT5s YXN0X3BrdC0+cGt0X2hhc192bWVtdV9hY2Nlc3MgPSAwOworCQkJdGhyZWFkLT5sYXN0X3BrdC0+ ZG91YmxlX2FjY2VzcyA9IDA7CisKKwkJCWZMT0FETU1WX0FMKEVBLGZWRUNTSVpFKCksZlZFQ1NJ WkUoKSxEU1QpOworCQl9IGVsc2UgeworICAgICAgICAgICAgdGhyZWFkLT5sYXN0X3BrdC0+cGt0 X2hhc192bWVtdV9hY2Nlc3MgPSAxOworCQkJdGhyZWFkLT5sYXN0X3BrdC0+ZG91YmxlX2FjY2Vz cyA9IDE7CisKKwkJCWZMT0FETU1WVV9BTChFQSxmVkVDU0laRSgpLGZWRUNTSVpFKCksRFNUKTsK KwkJfQorCX0sCisJKCkKKykKKworREVGX01BQ1JPKGZTVE9SRU1NVl9BTCwgKEVBLCBBTElHTk1F TlQsIExFTiwgU1JDKSwKKyAgICAiY2hhciogYWRkciA9IEVBJn4oQUxJR05NRU5ULTEpOyBmb3Ig KGk9MDsgaTxMRU47ICsraSkgYWRkcltpXSA9IFNSQ1tpXSIsCisgICAgIlN0b3JlIExFTiBieXRl cyBmcm9tIFNSQyBpbnRvIG1lbW9yeSBhdCBFQSAoZm9yY2VkIGFsaWdubWVudCkuIiwKKyAgICB7 CisgICAgZlZfQUxfQ0hFQ0soRUEsQUxJR05NRU5ULTEpOworICAgIG1lbV9zdG9yZV92ZWN0b3Jf b2RkdmEodGhyZWFkLCBpbnNuLCBFQSZ+KEFMSUdOTUVOVC0xKSwgRUEsIGluc24tPnNsb3QsIExF TiwgJlNSQy51YlswXSwgMCwgMCwgZlVTRV9MT09LVVBfQUREUkVTU19CWV9SRVYodGhyZWFkLT5w cm9jZXNzb3JfcHRyKSk7CisgICAgfSwKKyAgICAoQV9TVE9SRSxBX01FTUxJS0UsQV9SRVNUUklD VF9TSU5HTEVfTUVNX0ZJUlNUKQorKQorCitERUZfTUFDUk8oZlNUT1JFTU1WLCAoRUEsIFNSQyks CisJIiooRUEmfihBTElHTk1FTlQtMSkpID0gU1JDIiwKKwkiU3RvcmUgdmVjdG9yIFNSQyB0byBt ZW1vcnkgYXQgRUEgKHVuYWxpZ25lZCkuIiwKKwlmU1RPUkVNTVZfQUwoRUEsZlZFQ1NJWkUoKSxm VkVDU0laRSgpLFNSQyksCisJKCkKKykKKworREVGX01BQ1JPKGZTVE9SRU1NVlFfQUwsIChFQSwg QUxJR05NRU5ULCBMRU4sIFNSQywgTUFTSyksCisgICAgImNoYXIqIGFkZHIgPSBFQSZ+KEFMSUdO TUVOVC0xKTsgZm9yIChpPTA7IGk8TEVOOyArK2kpIGlmIChNQVNLW2ldKSBhZGRyW2ldID0gU1JD W2ldIiwKKyAgICAiU3RvcmUgTEVOIGJ5dGVzIGZyb20gU1JDIGludG8gbWVtb3J5IGF0IEVBIChm b3JjZWQgYWxpZ25tZW50KS4iLAorICAgIGRvIHsKKwltbXZlY3Rvcl90IG1hc2t2ZWM7CisJaW50 IGk7CisJZm9yIChpID0gMDsgaSA8IGZWRUNTSVpFKCk7IGkrKykgbWFza3ZlYy51YltpXSA9IGZH RVRRQklUKE1BU0ssaSk7CisJbWVtX3N0b3JlX3ZlY3Rvcl9vZGR2YSh0aHJlYWQsIGluc24sIEVB Jn4oQUxJR05NRU5ULTEpLCBFQSwgaW5zbi0+c2xvdCwgTEVOLCAmU1JDLnViWzBdLCAmbWFza3Zl Yy51YlswXSwgMCwgZlVTRV9MT09LVVBfQUREUkVTU19CWV9SRVYodGhyZWFkLT5wcm9jZXNzb3Jf cHRyKSk7CisgICAgfSB3aGlsZSAoMCksCisgICAgKEFfU1RPUkUsQV9NRU1MSUtFLEFfUkVTVFJJ Q1RfU0lOR0xFX01FTV9GSVJTVCkKKykKKworREVGX01BQ1JPKGZTVE9SRU1NVlEsIChFQSwgU1JD LCBNQVNLKSwKKwkiKihFQSZ+KEFMSUdOTUVOVC0xKSkgPSBTUkMiLAorCSJNYXNrZWQgc3RvcmUg dmVjdG9yIFNSQyB0byBtZW1vcnkgYXQgRUEgKGZvcmNlZCBhbGlnbm1lbnQpLiIsCisJZlNUT1JF TU1WUV9BTChFQSxmVkVDU0laRSgpLGZWRUNTSVpFKCksU1JDLE1BU0spLAorCSgpCispCisKK0RF Rl9NQUNSTyhmU1RPUkVNTVZOUV9BTCwgKEVBLCBBTElHTk1FTlQsIExFTiwgU1JDLCBNQVNLKSwK KyAgICAiY2hhciogYWRkciA9IEVBJn4oQUxJR05NRU5ULTEpOyBmb3IgKGk9MDsgaTxMRU47ICsr aSkgaWYgKCFNQVNLW2ldKSBhZGRyW2ldID0gU1JDW2ldIiwKKyAgICAiU3RvcmUgTEVOIGJ5dGVz IGZyb20gU1JDIGludG8gbWVtb3J5IGF0IEVBIChmb3JjZWQgYWxpZ25tZW50KS4iLAorICAgIHsK KwltbXZlY3Rvcl90IG1hc2t2ZWM7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGZWRUNTSVpF KCk7IGkrKykgbWFza3ZlYy51YltpXSA9IGZHRVRRQklUKE1BU0ssaSk7CisgICAgICAgIGZWX0FM X0NIRUNLKEVBLEFMSUdOTUVOVC0xKTsKKwltZW1fc3RvcmVfdmVjdG9yX29kZHZhKHRocmVhZCwg aW5zbiwgRUEmfihBTElHTk1FTlQtMSksIEVBLCBpbnNuLT5zbG90LCBMRU4sICZTUkMudWJbMF0s ICZtYXNrdmVjLnViWzBdLCAxLCBmVVNFX0xPT0tVUF9BRERSRVNTX0JZX1JFVih0aHJlYWQtPnBy b2Nlc3Nvcl9wdHIpKTsKKyAgICB9LAorICAgIChBX1NUT1JFLEFfTUVNTElLRSxBX1JFU1RSSUNU X1NJTkdMRV9NRU1fRklSU1QpCispCisKK0RFRl9NQUNSTyhmU1RPUkVNTVZOUSwgKEVBLCBTUkMs IE1BU0spLAorCSIqKEVBJn4oQUxJR05NRU5ULTEpKSA9IFNSQyIsCisJIk1hc2tlZCBuZWdhdGVk IHN0b3JlIHZlY3RvciBTUkMgdG8gbWVtb3J5IGF0IEVBIChmb3JjZWQgYWxpZ25tZW50KS4iLAor CWZTVE9SRU1NVk5RX0FMKEVBLGZWRUNTSVpFKCksZlZFQ1NJWkUoKSxTUkMsTUFTSyksCisJKCkK KykKKworREVGX01BQ1JPKGZTVE9SRU1NVlVfQUwsIChFQSwgQUxJR05NRU5ULCBMRU4sIFNSQyks CisgICAgImNoYXIqIGFkZHIgPSBFQTsgZm9yIChpPTA7IGk8TEVOOyArK2kpIGFkZHJbaV0gPSBT UkNbaV0iLAorICAgICJTdG9yZSBMRU4gYnl0ZXMgZnJvbSBTUkMgaW50byBtZW1vcnkgYXQgRUEg KHVuYWxpZ25lZCkuIiwKKyAgICB7CisgICAgc2l6ZTR1X3Qgc2l6ZTEgPSBBTElHTk1FTlQtKChF QSkmKEFMSUdOTUVOVC0xKSk7CisgICAgc2l6ZTR1X3Qgc2l6ZTI7CisgICAgaWYgKHNpemUxPkxF Tikgc2l6ZTEgPSBMRU47CisgICAgc2l6ZTIgPSBMRU4tc2l6ZTE7CisgICAgbWVtX3N0b3JlX3Zl Y3Rvcl9vZGR2YSh0aHJlYWQsIGluc24sIEVBK3NpemUxLCBFQStmVkVDU0laRSgpLCAvKiBzbG90 ICovIDEsIHNpemUyLCAmU1JDLnViW3NpemUxXSwgMCwgMCwgZlVTRV9MT09LVVBfQUREUkVTUygp KTsKKyAgICBtZW1fc3RvcmVfdmVjdG9yX29kZHZhKHRocmVhZCwgaW5zbiwgRUEsIEVBLCAvKiBz bG90ICovIDAsIHNpemUxLCAmU1JDLnViWzBdLCAwLCAwLCBmVVNFX0xPT0tVUF9BRERSRVNTX0JZ X1JFVih0aHJlYWQtPnByb2Nlc3Nvcl9wdHIpKTsKKyAgICB9LAorICAgIChBX1NUT1JFLEFfTUVN TElLRSxBX1JFU1RSSUNUX1NJTkdMRV9NRU1fRklSU1QpCispCisKK0RFRl9NQUNSTyhmU1RPUkVN TVZVLCAoRUEsIFNSQyksCisJIipFQSA9IFNSQyIsCisJIlN0b3JlIHZlY3RvciBTUkMgdG8gbWVt b3J5IGF0IEVBICh1bmFsaWduZWQpLiIsCisJeworICAgICAgICB0aHJlYWQtPmxhc3RfcGt0LT5w a3RfaGFzX3Z0Y21fYWNjZXNzID0gMDsKKyAgICAgICAgdGhyZWFkLT5sYXN0X3BrdC0+cGt0X2Fj Y2Vzc19jb3VudCA9IDA7CisJCWlmICggKEVBICYgKGZWRUNTSVpFKCktMSkpID09IDApIHsKKwkJ CXRocmVhZC0+bGFzdF9wa3QtPmRvdWJsZV9hY2Nlc3MgPSAwOworCQkJZlNUT1JFTU1WX0FMKEVB LGZWRUNTSVpFKCksZlZFQ1NJWkUoKSxTUkMpOworCQl9IGVsc2UgeworCQkJdGhyZWFkLT5sYXN0 X3BrdC0+ZG91YmxlX2FjY2VzcyA9IDE7CisgICAgICAgICAgICB0aHJlYWQtPmxhc3RfcGt0LT5w a3RfaGFzX3ZtZW11X2FjY2VzcyA9IDE7CisJCQlmU1RPUkVNTVZVX0FMKEVBLGZWRUNTSVpFKCks ZlZFQ1NJWkUoKSxTUkMpOworCQl9CisJfSwKKwkoKQorKQorCitERUZfTUFDUk8oZlNUT1JFTU1W UVVfQUwsIChFQSwgQUxJR05NRU5ULCBMRU4sIFNSQywgTUFTSyksCisgICAgImNoYXIqIGFkZHIg PSBFQTsgZm9yIChpPTA7IGk8TEVOOyArK2kpIGlmIChNQVNLW2ldKSBhZGRyW2ldID0gU1JDW2ld IiwKKyAgICAiU3RvcmUgTEVOIGJ5dGVzIGZyb20gU1JDIGludG8gbWVtb3J5IGF0IEVBICh1bmFs aWduZWQpLiIsCisgICAgeworCXNpemU0dV90IHNpemUxID0gQUxJR05NRU5ULSgoRUEpJihBTElH Tk1FTlQtMSkpOworCXNpemU0dV90IHNpemUyOworCW1tdmVjdG9yX3QgbWFza3ZlYzsKKwlpbnQg aTsKKwlmb3IgKGkgPSAwOyBpIDwgZlZFQ1NJWkUoKTsgaSsrKSBtYXNrdmVjLnViW2ldID0gZkdF VFFCSVQoTUFTSyxpKTsKKwlpZiAoc2l6ZTE+TEVOKSBzaXplMSA9IExFTjsKKwlzaXplMiA9IExF Ti1zaXplMTsKKwltZW1fc3RvcmVfdmVjdG9yX29kZHZhKHRocmVhZCwgaW5zbiwgRUErc2l6ZTEs IEVBK2ZWRUNTSVpFKCksLyogc2xvdCAqLyAxLCBzaXplMiwgJlNSQy51YltzaXplMV0sICZtYXNr dmVjLnViW3NpemUxXSwgMCwgZlVTRV9MT09LVVBfQUREUkVTUygpKTsKKwltZW1fc3RvcmVfdmVj dG9yX29kZHZhKHRocmVhZCwgaW5zbiwgRUEsIC8qIHNsb3QgKi8gMCwgc2l6ZTEsICZTUkMudWJb MF0sICZtYXNrdmVjLnViWzBdLCAwLCBmVVNFX0xPT0tVUF9BRERSRVNTX0JZX1JFVih0aHJlYWQt PnByb2Nlc3Nvcl9wdHIpKTsKKyAgICB9LAorICAgIChBX1NUT1JFLEFfTUVNTElLRSxBX1JFU1RS SUNUX1NJTkdMRV9NRU1fRklSU1QpCispCisKK0RFRl9NQUNSTyhmU1RPUkVNTVZRVSwgKEVBLCBT UkMsIE1BU0spLAorCSIqRUEgPSBTUkMiLAorCSJTdG9yZSB2ZWN0b3IgU1JDIHRvIG1lbW9yeSBh dCBFQSAodW5hbGlnbmVkKS4iLAorCXsKKyAgICAgICAgdGhyZWFkLT5sYXN0X3BrdC0+cGt0X2hh c192dGNtX2FjY2VzcyA9IDA7CisgICAgICAgIHRocmVhZC0+bGFzdF9wa3QtPnBrdF9hY2Nlc3Nf Y291bnQgPSAwOworCQlpZiAoIChFQSAmIChmVkVDU0laRSgpLTEpKSA9PSAwKSB7CisJCQl0aHJl YWQtPmxhc3RfcGt0LT5kb3VibGVfYWNjZXNzID0gMDsKKwkJCWZTVE9SRU1NVlFfQUwoRUEsZlZF Q1NJWkUoKSxmVkVDU0laRSgpLFNSQyxNQVNLKTsKKwkJfSBlbHNlIHsKKwkJCXRocmVhZC0+bGFz dF9wa3QtPmRvdWJsZV9hY2Nlc3MgPSAxOworICAgICAgICAgICAgdGhyZWFkLT5sYXN0X3BrdC0+ cGt0X2hhc192bWVtdV9hY2Nlc3MgPSAxOworCQkJZlNUT1JFTU1WUVVfQUwoRUEsZlZFQ1NJWkUo KSxmVkVDU0laRSgpLFNSQyxNQVNLKTsKKwkJfQorCX0sCisJKCkKKykKKworREVGX01BQ1JPKGZT VE9SRU1NVk5RVV9BTCwgKEVBLCBBTElHTk1FTlQsIExFTiwgU1JDLCBNQVNLKSwKKyAgICAiY2hh ciogYWRkciA9IEVBOyBmb3IgKGk9MDsgaTxMRU47ICsraSkgaWYgKCFNQVNLW2ldKSBhZGRyW2ld ID0gU1JDW2ldIiwKKyAgICAiU3RvcmUgTEVOIGJ5dGVzIGZyb20gU1JDIGludG8gbWVtb3J5IGF0 IEVBICh1bmFsaWduZWQpLiIsCisgICAgeworCXNpemU0dV90IHNpemUxID0gQUxJR05NRU5ULSgo RUEpJihBTElHTk1FTlQtMSkpOworCXNpemU0dV90IHNpemUyOworCW1tdmVjdG9yX3QgbWFza3Zl YzsKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgZlZFQ1NJWkUoKTsgaSsrKSBtYXNrdmVjLnVi W2ldID0gZkdFVFFCSVQoTUFTSyxpKTsKKwlpZiAoc2l6ZTE+TEVOKSBzaXplMSA9IExFTjsKKwlz aXplMiA9IExFTi1zaXplMTsKKwltZW1fc3RvcmVfdmVjdG9yX29kZHZhKHRocmVhZCwgaW5zbiwg RUErc2l6ZTEsIEVBK2ZWRUNTSVpFKCksIC8qIHNsb3QgKi8gMSwgc2l6ZTIsICZTUkMudWJbc2l6 ZTFdLCAmbWFza3ZlYy51YltzaXplMV0sIDEsIGZVU0VfTE9PS1VQX0FERFJFU1MoKSk7CisJbWVt X3N0b3JlX3ZlY3Rvcl9vZGR2YSh0aHJlYWQsIGluc24sIEVBLCBFQSwgLyogc2xvdCAqLyAwLCBz aXplMSwgJlNSQy51YlswXSwgJm1hc2t2ZWMudWJbMF0sIDEsIGZVU0VfTE9PS1VQX0FERFJFU1Nf QllfUkVWKHRocmVhZC0+cHJvY2Vzc29yX3B0cikpOworICAgIH0sCisgICAgKEFfU1RPUkUsQV9N RU1MSUtFLEFfUkVTVFJJQ1RfU0lOR0xFX01FTV9GSVJTVCkKKykKKworREVGX01BQ1JPKGZTVE9S RU1NVk5RVSwgKEVBLCBTUkMsIE1BU0spLAorCSIqRUEgPSBTUkMiLAorCSJTdG9yZSB2ZWN0b3Ig U1JDIHRvIG1lbW9yeSBhdCBFQSAodW5hbGlnbmVkKS4iLAorCXsKKyAgICAgICAgdGhyZWFkLT5s YXN0X3BrdC0+cGt0X2hhc192dGNtX2FjY2VzcyA9IDA7CisgICAgICAgIHRocmVhZC0+bGFzdF9w a3QtPnBrdF9hY2Nlc3NfY291bnQgPSAwOworCQlpZiAoIChFQSAmIChmVkVDU0laRSgpLTEpKSA9 PSAwKSB7CisJCQl0aHJlYWQtPmxhc3RfcGt0LT5kb3VibGVfYWNjZXNzID0gMDsKKwkJCWZTVE9S RU1NVk5RX0FMKEVBLGZWRUNTSVpFKCksZlZFQ1NJWkUoKSxTUkMsTUFTSyk7CisJCX0gZWxzZSB7 CisJCQl0aHJlYWQtPmxhc3RfcGt0LT5kb3VibGVfYWNjZXNzID0gMTsKKyAgICAgICAgICAgIHRo cmVhZC0+bGFzdF9wa3QtPnBrdF9oYXNfdm1lbXVfYWNjZXNzID0gMTsKKwkJCWZTVE9SRU1NVk5R VV9BTChFQSxmVkVDU0laRSgpLGZWRUNTSVpFKCksU1JDLE1BU0spOworCQl9CisJfSwKKwkoKQor KQorCisKKworCitERUZfTUFDUk8oZlZGT1JFQUNILChXSURUSCwgVkFSKSwKKyAgICAiZm9yIChW QVIgPSAwOyBWQVIgPCBWRUxFTShXSURUSCk7IFZBUisrKSIsCisgICAgIkZvciBWQVIgaW4gZWFj aCBXSURUSC1iaXQgdmVjdG9yIGluZGV4IiwKKyAgICBmb3IgKFZBUiA9IDA7IFZBUiA8IGZWRUxF TShXSURUSCk7IFZBUisrKSwKKyAgICAvKiBOT1RISU5HICovCispCisKK0RFRl9NQUNSTyhmVkFS UkFZX0VMRU1FTlRfQUNDRVNTLCAoQVJSQVksIFRZUEUsIElOREVYKSwKKyAgICAiQVJSQVkuVFlQ RVtJTkRFWF0iLAorICAgICJBY2Nlc3MgZWxlbWVudCBvZiB0eXBlIFRZUEUgYXQgcG9zaXRpb24g SU5ERVggb2YgZmxhdHRlbmVkIEFSUkFZIiwKKyAgICBBUlJBWS52WyhJTkRFWCkgLyAoZlZFQ1NJ WkUoKS8oc2l6ZW9mKEFSUkFZLlRZUEVbMF0pKSldLlRZUEVbKElOREVYKSAlIChmVkVDU0laRSgp LyhzaXplb2YoQVJSQVkuVFlQRVswXSkpKV0sCisgICAgKCkKKykKKworREVGX01BQ1JPKGZWTkVX Q0FOQ0VMLChSRUdOVU0pLAorCSJJZ25vcmUgY3VycmVudCB2YWx1ZSBmb3IgcmVnaXN0ZXIgUkVH TlVNIiwKKwkiSWdub3JlIGN1cnJlbnQgdmFsdWUgZm9yIHJlZ2lzdGVyIFJFR05VTSIsCisJZG8g eyBUSFJFQUQyU1RSVUNULT5WUmVnc19zZWxlY3QgJj0gfigxPDwoUkVHTlVNKSk7IH0gd2hpbGUg KDApLAorCSgpCispCisKK0RFRl9NQUNSTyhmVE1QVkRBVEEsKCksCisJIkRhdGEgZnJvbSAudG1w IGxvYWQiLAorCSJEYXRhIGZyb20gLnRtcCBsb2FkIGFuZCBjbGVhciB0bXAgc3RhdHVzIiwKKwlt bXZlY192dG1wX2RhdGEodGhyZWFkKSwKKwkoQV9DVkksQV9DVklfUkVRVUlSRVNfVE1QTE9BRCkK KykKKworREVGX01BQ1JPKGZWU0FURFcsIChVLFYpLAorICAgICJ1c2F0XzMyKFU6VikiLAorICAg ICJVc2UgMzItYml0cyBvZiBVIGFzIE1TVyBhbmQgMzItYml0cyBvZiBWIGFzIExTVyBhbmQgc2F0 dXJhdGUgdGhlIHJlc3VsdGFudCA2NC1iaXRzIHRvIDMyIGJpdHMiLAorICAgIGZWU0FUVyggKCAo ICgobG9uZyBsb25nKVUpPDwzMiApIHwgZlpYVE4oMzIsNjQsVikgKSApLAorICAgIC8qIGF0dHJp YnMgKi8KKykKKworREVGX01BQ1JPKGZWQVNMX1NBVEhJLCAoVSxWKSwKKyAgICAidWFzbF9zYXRo aShVOlYpIiwKKyAgICAiVXNlIDMyLWJpdHMgb2YgVSBhcyBNU1cgYW5kIDMyLWJpdHMgb2YgViBh cyBMU1csIGxlZnQgc2hpZnQgYnkgMSBhbmQgc2F0dXJhdGUgdGhlIHJlc3VsdCBhbmQgdGFrZSBo aWdoIHdvcmQiLAorICAgIGZWU0FUVygoKFUpPDwxKSB8ICgoVik+PjMxKSksCisgICAgLyogYXR0 cmlicyAqLworKQorCitERUZfTUFDUk8oZlZVQUREU0FULChXSURUSCxVLFYpLAorCSJ1c2F0XyMj V0lEVEgoVStWKSIsCisJIkFkZCBXSURUSC1iaXQgdmFsdWVzIFUgYW5kIFYgd2l0aCBzYXR1cmF0 aW9uIiwKKwlmVlNBVFVOKCBXSURUSCwgZlpYVE4oV0lEVEgsIDIqV0lEVEgsIFUpICArIGZaWFRO KFdJRFRILCAyKldJRFRILCBWKSksCisJLyogYXR0cmlicyAqLworKQorCitERUZfTUFDUk8oZlZT QUREU0FULChXSURUSCxVLFYpLAorCSJzYXRfIyNXSURUSChVK1YpIiwKKwkiQWRkIFdJRFRILWJp dCB2YWx1ZXMgVSBhbmQgViB3aXRoIHNhdHVyYXRpb24iLAorCWZWU0FUTiggIFdJRFRILCBmU1hU TihXSURUSCwgMipXSURUSCwgVSkgICsgZlNYVE4oV0lEVEgsIDIqV0lEVEgsIFYpKSwKKwkvKiBh dHRyaWJzICovCispCisKK0RFRl9NQUNSTyhmVlVTVUJTQVQsKFdJRFRILFUsViksCisJInVzYXRf IyNXSURUSChVLVYpIiwKKwkic3ViIFdJRFRILWJpdCB2YWx1ZXMgVSBhbmQgViB3aXRoIHNhdHVy YXRpb24iLAorCWZWU0FUVU4oIFdJRFRILCBmWlhUTihXSURUSCwgMipXSURUSCwgVSkgIC0gZlpY VE4oV0lEVEgsIDIqV0lEVEgsIFYpKSwKKwkvKiBhdHRyaWJzICovCispCisKK0RFRl9NQUNSTyhm VlNTVUJTQVQsKFdJRFRILFUsViksCisJInNhdF8jI1dJRFRIKFUtVikiLAorCSJzdWIgV0lEVEgt Yml0IHZhbHVlcyBVIGFuZCBWIHdpdGggc2F0dXJhdGlvbiIsCisJZlZTQVROKCAgV0lEVEgsIGZT WFROKFdJRFRILCAyKldJRFRILCBVKSAgLSBmU1hUTihXSURUSCwgMipXSURUSCwgVikpLAorCS8q IGF0dHJpYnMgKi8KKykKKworREVGX01BQ1JPKGZWQVZHVSwoV0lEVEgsVSxWKSwKKwkiKFUrVikv MiIsCisJImF2ZXJhZ2UgV0lEVEgtYml0IHZhbHVlcyBVIGFuZCBWIHdpdGggc2F0dXJhdGlvbiIs CisJKChmWlhUTihXSURUSCwgMipXSURUSCwgVSkgKyBmWlhUTihXSURUSCwgMipXSURUSCwgVikp Pj4xKSwKKwkvKiBhdHRyaWJzICovCispCisKK0RFRl9NQUNSTyhmVkFWR1VSTkQsKFdJRFRILFUs ViksCisJIihVK1YrMSkvMiIsCisJImF2ZXJhZ2UgV0lEVEgtYml0IHZhbHVlcyBVIGFuZCBWIHdp dGggc2F0dXJhdGlvbiIsCisJKChmWlhUTihXSURUSCwgMipXSURUSCwgVSkgKyBmWlhUTihXSURU SCwgMipXSURUSCwgVikrMSk+PjEpLAorCS8qIGF0dHJpYnMgKi8KKykKKworREVGX01BQ1JPKGZW TkFWR1UsKFdJRFRILFUsViksCisJIihVLVYpLzIiLAorCSJhdmVyYWdlIFdJRFRILWJpdCB2YWx1 ZXMgVSBhbmQgViB3aXRoIHNhdHVyYXRpb24iLAorCSgoZlpYVE4oV0lEVEgsIDIqV0lEVEgsIFUp IC0gZlpYVE4oV0lEVEgsIDIqV0lEVEgsIFYpKT4+MSksCisJLyogYXR0cmlicyAqLworKQorCitE RUZfTUFDUk8oZlZOQVZHVVJORFNBVCwoV0lEVEgsVSxWKSwKKwkiKFUtVisxKS8yIiwKKwkiYXZl cmFnZSBXSURUSC1iaXQgdmFsdWVzIFUgYW5kIFYgd2l0aCBzYXR1cmF0aW9uIiwKKwlmVlNBVFVO KFdJRFRILCgoZlpYVE4oV0lEVEgsIDIqV0lEVEgsIFUpIC0gZlpYVE4oV0lEVEgsIDIqV0lEVEgs IFYpKzEpPj4xKSksCisJLyogYXR0cmlicyAqLworKQorCitERUZfTUFDUk8oZlZBVkdTLChXSURU SCxVLFYpLAorCSIoVStWKS8yIiwKKwkiYXZlcmFnZSBXSURUSC1iaXQgdmFsdWVzIFUgYW5kIFYg d2l0aCBzYXR1cmF0aW9uIiwKKwkoKGZTWFROKFdJRFRILCAyKldJRFRILCBVKSArIGZTWFROKFdJ RFRILCAyKldJRFRILCBWKSk+PjEpLAorCS8qIGF0dHJpYnMgKi8KKykKKworREVGX01BQ1JPKGZW QVZHU1JORCwoV0lEVEgsVSxWKSwKKwkiKFUrVisxKS8yIiwKKwkiYXZlcmFnZSBXSURUSC1iaXQg dmFsdWVzIFUgYW5kIFYgd2l0aCBzYXR1cmF0aW9uIiwKKwkoKGZTWFROKFdJRFRILCAyKldJRFRI LCBVKSArIGZTWFROKFdJRFRILCAyKldJRFRILCBWKSsxKT4+MSksCisJLyogYXR0cmlicyAqLwor KQorCitERUZfTUFDUk8oZlZOQVZHUywoV0lEVEgsVSxWKSwKKwkiKFUtVikvMiIsCisJImF2ZXJh Z2UgV0lEVEgtYml0IHZhbHVlcyBVIGFuZCBWIHdpdGggc2F0dXJhdGlvbiIsCisJKChmU1hUTihX SURUSCwgMipXSURUSCwgVSkgLSBmU1hUTihXSURUSCwgMipXSURUSCwgVikpPj4xKSwKKwkvKiBh dHRyaWJzICovCispCisKK0RFRl9NQUNSTyhmVk5BVkdTUk5ELChXSURUSCxVLFYpLAorCSIoVS1W KzEpLzIiLAorCSJhdmVyYWdlIFdJRFRILWJpdCB2YWx1ZXMgVSBhbmQgbmVnYXRpdmUgViBmb2xs b3dlZCBieSByb3VuZGluZyIsCisJKChmU1hUTihXSURUSCwgMipXSURUSCwgVSkgLSBmU1hUTihX SURUSCwgMipXSURUSCwgVikrMSk+PjEpLAorCS8qIGF0dHJpYnMgKi8KKykKKworREVGX01BQ1JP KGZWTkFWR1NSTkRTQVQsKFdJRFRILFUsViksCisJIihVLVYrMSkvMiIsCisJImF2ZXJhZ2UgV0lE VEgtYml0IHZhbHVlcyBVIGFuZCBWIHdpdGggc2F0dXJhdGlvbiIsCisJZlZTQVROKFdJRFRILCgo ZlNYVE4oV0lEVEgsIDIqV0lEVEgsIFUpIC0gZlNYVE4oV0lEVEgsIDIqV0lEVEgsIFYpKzEpPj4x KSksCisJLyogYXR0cmlicyAqLworKQorCisKK0RFRl9NQUNSTyhmVk5PUk9VTkQsKFZBTCxTSEFN VCksCisJIlZBTCIsCisJIlZBTCIsCisJVkFMLAorCS8qIE5PVEhJTkcgKi8KKykKK0RFRl9NQUNS TyhmVk5PU0FULChWQUwpLAorCSJWQUwiLAorCSJWQUwiLAorCVZBTCwKKwkvKiBOT1RISU5HICov CispCisKK0RFRl9NQUNSTyhmVlJPVU5ELChWQUwsU0hBTVQpLAorCSJWQUwgKyAoMTw8KFNIQU1U LTEpKSIsCisJIlZBTCArIFJOREJJVCIsCisJKChWQUwpICsgKCgoU0hBTVQpPjApPygxTEw8PCgo U0hBTVQpLTEpKTowKSksCisJLyogTk9USElORyAqLworKQorCitERUZfTUFDUk8oZkNBUlJZX0ZS T01fQUREMzIsKEEsQixDKSwKKwkiY2FycnlfZnJvbShBLEIsQykiLAorCSJjYXJyeV9mcm9tKEEs QixDKSIsCisJKCgoZlpYVE4oMzIsNjQsQSkrZlpYVE4oMzIsNjQsQikrQykgPj4gMzIpICYgMSks CisJLyogTk9USElORyAqLworKQorCitERUZfTUFDUk8oZlVBUkNIX05PVEVfUFVNUF80WCwoKSwK KwkiIiwKKwkiIiwKKwksCisJKEFfQ1ZJX1BVTVBfNFgpCispCisKK0RFRl9NQUNSTyhmVUFSQ0hf Tk9URV9QVU1QXzJYLCgpLAorCSIiLAorCSIiLAorCSwKKwkoQV9DVklfUFVNUF8yWCkKKykKKwor REVGX01BQ1JPKGZWRE9DSEtQQUdFQ1JPU1MsKEJBU0UsU1VNKSwKKwkiIiwKKwkiIiwKKwlpZiAo VU5MSUtFTFkodGhyZWFkLT50aW1pbmdfb24pKSB7CisJCXRocmVhZC0+bWVtX2FjY2Vzc1tzbG90 XS5jaGVja19wYWdlX2Nyb3NzZXMgPSAxOworCQl0aHJlYWQtPm1lbV9hY2Nlc3Nbc2xvdF0ucGFn ZV9jcm9zc19iYXNlID0gQkFTRTsKKwkJdGhyZWFkLT5tZW1fYWNjZXNzW3Nsb3RdLnBhZ2VfY3Jv c3Nfc3VtID0gU1VNOworCX0sCisJKEFfRUFfUEFHRUNST1NTKQorKQorCisKKwotLSAKMi43LjQK Cg==