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 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 154E7C433F5 for ; Sun, 31 Oct 2021 16:53:44 +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 BE1C960F45 for ; Sun, 31 Oct 2021 16:53:43 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org BE1C960F45 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=quicinc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=nongnu.org Received: from localhost ([::1]:43268 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mhE5W-0003Xw-Mi for qemu-devel@archiver.kernel.org; Sun, 31 Oct 2021 12:53:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35696) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mhDvp-0001gH-O3 for qemu-devel@nongnu.org; Sun, 31 Oct 2021 12:43:41 -0400 Received: from alexa-out-sd-02.qualcomm.com ([199.106.114.39]:31506) by eggs.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1mhDvl-0008Ap-Ly for qemu-devel@nongnu.org; Sun, 31 Oct 2021 12:43:41 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1635698617; x=1667234617; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=fd+VuoQRBI3tIYQAM2UnprTR7ca4vFJcp8Ye5N2CzwE=; b=uzaQP2gJzB3gyENde0guiSacC5Tvgm0QId5/VWj1K4vimzGqZMTFb3vx KNXZWAs6z9oHPTH+tCLTD7Vxm4LljKsfv+1Zm7GevU9vMBTXnNOtEzC1I Z8+Ggsll8wE4Ou28dq9ejFAYE+N4plkGAbqEXJokwqqvUaC66GWSbdOkb E=; Received: from unknown (HELO ironmsg01-sd.qualcomm.com) ([10.53.140.141]) by alexa-out-sd-02.qualcomm.com with ESMTP; 31 Oct 2021 09:43:30 -0700 X-QCInternal: smtphost Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg01-sd.qualcomm.com with ESMTP; 31 Oct 2021 09:43:30 -0700 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 5A15B2834; Sun, 31 Oct 2021 11:43:29 -0500 (CDT) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [PULL 06/30] Hexagon HVX (target/hexagon) import macro definitions Date: Sun, 31 Oct 2021 11:42:45 -0500 Message-Id: <1635698589-31849-7-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1635698589-31849-1-git-send-email-tsimpson@quicinc.com> References: <1635698589-31849-1-git-send-email-tsimpson@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Received-SPF: pass client-ip=199.106.114.39; envelope-from=tsimpson@qualcomm.com; helo=alexa-out-sd-02.qualcomm.com X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.248, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: peter.maydell@linaro.org, tsimpson@quicinc.com, richard.henderson@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" SW1wb3J0ZWQgZnJvbSB0aGUgSGV4YWdvbiBhcmNoaXRlY3R1cmUgbGlicmFyeQogICAgaW1wb3J0 ZWQvYWxsZXh0X21hY3Jvcy5kZWYgICAgICAgVG9wIGxldmVsIG1hY3JvIGluY2x1ZGUgZm9yIGFs bCBleHRlbnNpb25zCiAgICBpbXBvcnRlZC9tYWNyb3MuZGVmICAgICAgICAgICAgICBTY2FsYXIg Y29yZSBtYWNyb3MgKHNvbWUgSFZYIGhlcmUpCiAgICBpbXBvcnRlZC9tbXZlYy9tYWNyb3MuZGVm ICAgICAgICBIVlggbWFjcm8gZGVmaW5pdGlvbnMKVGhlIG1hY3JvIGRlZmluaXRpb24gZmlsZXMg c3BlY2lmeSBpbnN0cnVjdGlvbiBhdHRyaWJ1dGVzIHRoYXQgYXJlIGFwcGxpZWQKdG8gZWFjaCBp bnN0cnVjdGlvbiB0aGF0IHJldmVyZW5jZXMgdGhlIG1hY3JvLgoKQWNrZWQtYnk6IFJpY2hhcmQg SGVuZGVyc29uIDxyaWNoYXJkLmhlbmRlcnNvbkBsaW5hcm8ub3JnPgpTaWduZWQtb2ZmLWJ5OiBU YXlsb3IgU2ltcHNvbiA8dHNpbXBzb25AcXVpY2luYy5jb20+Ci0tLQogdGFyZ2V0L2hleGFnb24v aW1wb3J0ZWQvYWxsZXh0X21hY3Jvcy5kZWYgfCAgMjUgKwogdGFyZ2V0L2hleGFnb24vaW1wb3J0 ZWQvbWFjcm9zLmRlZiAgICAgICAgfCAgODggKysrKwogdGFyZ2V0L2hleGFnb24vaW1wb3J0ZWQv bW12ZWMvbWFjcm9zLmRlZiAgfCA4NDIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAz IGZpbGVzIGNoYW5nZWQsIDk1NSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGFy Z2V0L2hleGFnb24vaW1wb3J0ZWQvYWxsZXh0X21hY3Jvcy5kZWYKIGNyZWF0ZSBtb2RlIDEwMDc1 NSB0YXJnZXQvaGV4YWdvbi9pbXBvcnRlZC9tbXZlYy9tYWNyb3MuZGVmCgpkaWZmIC0tZ2l0IGEv dGFyZ2V0L2hleGFnb24vaW1wb3J0ZWQvYWxsZXh0X21hY3Jvcy5kZWYgYi90YXJnZXQvaGV4YWdv bi9pbXBvcnRlZC9hbGxleHRfbWFjcm9zLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi45YzkxMTk5Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24vaW1wb3J0 ZWQvYWxsZXh0X21hY3Jvcy5kZWYKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqICBDb3B5cmlnaHQo YykgMjAxOS0yMDIxIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBSaWdodHMg UmVzZXJ2ZWQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl LCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz IHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAq LworCisvKgorICogVG9wIGxldmVsIGZpbGUgZm9yIGFsbCBpbnN0cnVjdGlvbiBzZXQgZXh0ZW5z aW9ucworICovCisjZGVmaW5lIEVYVE5BTUUgbW12ZWMKKyNkZWZpbmUgRVhUU1RSICJtbXZlYyIK KyNpbmNsdWRlICJtbXZlYy9tYWNyb3MuZGVmIgorI3VuZGVmIEVYVE5BTUUKKyN1bmRlZiBFWFRT VFIKZGlmZiAtLWdpdCBhL3RhcmdldC9oZXhhZ29uL2ltcG9ydGVkL21hY3Jvcy5kZWYgYi90YXJn ZXQvaGV4YWdvbi9pbXBvcnRlZC9tYWNyb3MuZGVmCmluZGV4IDMyZWQzYmYuLmUyM2Y5MTUgMTAw NzU1Ci0tLSBhL3RhcmdldC9oZXhhZ29uL2ltcG9ydGVkL21hY3Jvcy5kZWYKKysrIGIvdGFyZ2V0 L2hleGFnb24vaW1wb3J0ZWQvbWFjcm9zLmRlZgpAQCAtMTc3LDYgKzE3NywxMiBAQCBERUZfTUFD Uk8oCiApCiAKIERFRl9NQUNSTygKKyAgICBmVlNBVFVWQUxOLAorICAgICh7ICgoVkFMKSA8IDAp ID8gMCA6ICgoMUxMPDwoTikpLTEpO30pLAorICAgICgpCispCisKK0RFRl9NQUNSTygKICAgICBm U0FUVVZBTE4sCiAgICAgKHtmU0VUX09WRVJGTE9XKCk7ICgoVkFMKSA8IDApID8gMCA6ICgoMUxM PDwoTikpLTEpO30pLAogICAgICgpCkBAIC0xODksNiArMTk1LDEyIEBAIERFRl9NQUNSTygKICkK IAogREVGX01BQ1JPKAorICAgIGZWU0FUVkFMTiwKKyAgICAoeygoVkFMKSA8IDApID8gKC0oMUxM PDwoKE4pLTEpKSkgOiAoKDFMTDw8KChOKS0xKSktMSk7fSksCisgICAgKCkKKykKKworREVGX01B Q1JPKAogICAgIGZaWFROLCAvKiBtYWNybyBuYW1lICovCiAgICAgKChWQUwpICYgKCgxTEw8PChO KSktMSkpLAogICAgIC8qIGF0dHJpYnMgKi8KQEAgLTIwNSw2ICsyMTcsMTEgQEAgREVGX01BQ1JP KAogICAgICgoZlNYVE4oTiw2NCxWQUwpID09IChWQUwpKSA/IChWQUwpIDogZlNBVFZBTE4oTixW QUwpKSwKICAgICAoKQogKQorREVGX01BQ1JPKAorICAgIGZWU0FUTiwKKyAgICAoKGZTWFROKE4s NjQsVkFMKSA9PSAoVkFMKSkgPyAoVkFMKSA6IGZWU0FUVkFMTihOLFZBTCkpLAorICAgICgpCisp CiAKIERFRl9NQUNSTygKICAgICBmQUREU0FUNjQsCkBAIC0yMzUsNiArMjUyLDEyIEBAIERFRl9N QUNSTygKICkKIAogREVGX01BQ1JPKAorICAgIGZWU0FUVU4sCisgICAgKChmWlhUTihOLDY0LFZB TCkgPT0gKFZBTCkpID8gKFZBTCkgOiBmVlNBVFVWQUxOKE4sVkFMKSksCisgICAgKCkKKykKKwor REVGX01BQ1JPKAogICAgIGZTQVRVTiwKICAgICAoKGZaWFROKE4sNjQsVkFMKSA9PSAoVkFMKSkg PyAoVkFMKSA6IGZTQVRVVkFMTihOLFZBTCkpLAogICAgICgpCkBAIC0yNTQsNiArMjc3LDE5IEBA IERFRl9NQUNSTygKICkKIAogREVGX01BQ1JPKAorICAgIGZWU0FUSCwKKyAgICAoZlZTQVROKDE2 LFZBTCkpLAorICAgICgpCispCisKK0RFRl9NQUNSTygKKyAgICBmVlNBVFVILAorICAgIChmVlNB VFVOKDE2LFZBTCkpLAorICAgICgpCispCisKKworREVGX01BQ1JPKAogICAgIGZTQVRVQiwKICAg ICAoZlNBVFVOKDgsVkFMKSksCiAgICAgKCkKQEAgLTI2NSw2ICszMDEsMjAgQEAgREVGX01BQ1JP KAogKQogCiAKK0RFRl9NQUNSTygKKyAgICBmVlNBVFVCLAorICAgIChmVlNBVFVOKDgsVkFMKSks CisgICAgKCkKKykKK0RFRl9NQUNSTygKKyAgICBmVlNBVEIsCisgICAgKGZWU0FUTig4LFZBTCkp LAorICAgICgpCispCisKKworCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwogLyogaW1tZWRpYXRlIGV4dGVuc2lvbiAgICAgICAgICAgICAgICovCiAvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTU1Nyw2ICs2MDcsMTggQEAgREVGX01B Q1JPKAogKQogCiBERUZfTUFDUk8oCisgICAgZkNBU1QyXzJzLCAvKiBtYWNybyBuYW1lICovCisg ICAgKChzaXplMnNfdCkoQSkpLAorICAgIC8qIG9wdGlvbmFsIGF0dHJpYnV0ZXMgKi8KKykKKwor REVGX01BQ1JPKAorICAgIGZDQVNUMl8ydSwgLyogbWFjcm8gbmFtZSAqLworICAgICgoc2l6ZTJ1 X3QpKEEpKSwKKyAgICAvKiBvcHRpb25hbCBhdHRyaWJ1dGVzICovCispCisKK0RFRl9NQUNSTygK ICAgICBmQ0FTVDRfNHMsIC8qIG1hY3JvIG5hbWUgKi8KICAgICAoKHNpemU0c190KShBKSksCiAg ICAgLyogb3B0aW9uYWwgYXR0cmlidXRlcyAqLwpAQCAtODc2LDYgKzkzOCwxMSBAQCBERUZfTUFD Uk8oCiAgICAgKCgoc2l6ZThzX3QpKEEpKTw8TiksCiAgICAgLyogb3B0aW9uYWwgYXR0cmlidXRl cyAqLwogKQorREVGX01BQ1JPKAorICAgIGZWU0FUVywgLyogc2F0dXJhdGluZyB0byAzMi1iaXRz Ki8KKyAgICBmVlNBVE4oMzIsKChsb25nIGxvbmcpQSkpLAorICAgICgpCispCiAKIERFRl9NQUNS TygKICAgICBmU0FUVywgLyogc2F0dXJhdGluZyB0byAzMi1iaXRzKi8KQEAgLTg4NCw2ICs5NTEs MTIgQEAgREVGX01BQ1JPKAogKQogCiBERUZfTUFDUk8oCisgICAgZlZTQVQsIC8qIHNhdHVyYXRp bmcgdG8gMzItYml0cyovCisgICAgZlZTQVROKDMyLChBKSksCisgICAgKCkKKykKKworREVGX01B Q1JPKAogICAgIGZTQVQsIC8qIHNhdHVyYXRpbmcgdG8gMzItYml0cyovCiAgICAgZlNBVE4oMzIs KEEpKSwKICAgICAoKQpAQCAtMTM4OSw2ICsxNDYyLDExIEBAIERFRl9NQUNSTyhmU0VUQklUUywK IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogVXNlZCBmb3IgcGFy aXR5LCBldGMuLi4uLi4uLiAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KK0RFRl9NQUNSTyhmQ09VTlRPTkVTXzIsCisgICAgY291bnRfb25lc18yKFZBTCks CisgICAgLyogbm90aGluZyAqLworKQorCiBERUZfTUFDUk8oZkNPVU5UT05FU180LAogICAgIGNv dW50X29uZXNfNChWQUwpLAogICAgIC8qIG5vdGhpbmcgKi8KQEAgLTE0MTksNiArMTQ5NywxMSBA QCBERUZfTUFDUk8oZkNMMV80LAogICAgIC8qIG5vdGhpbmcgKi8KICkKIAorREVGX01BQ1JPKGZD TDFfMiwKKyAgICBjb3VudF9sZWFkaW5nX29uZXNfMihWQUwpLAorICAgIC8qIG5vdGhpbmcgKi8K KykKKwogREVGX01BQ1JPKGZJTlRFUkxFQVZFLAogICAgIGludGVybGVhdmUoT0RELEVWRU4pLAog ICAgIC8qIG5vdGhpbmcgKi8KQEAgLTE1NzYsMyArMTY1OSw4IEBAIERFRl9NQUNSTyhmQlJBTkNI X1NQRUNVTEFURV9TVEFMTCwKICAgICB9LAogICAgICgpCiApCisKK0RFRl9NQUNSTyhJVjFERUFE LAorICAgICwKKyAgICAoKQorKQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vaW1wb3J0ZWQv bW12ZWMvbWFjcm9zLmRlZiBiL3RhcmdldC9oZXhhZ29uL2ltcG9ydGVkL21tdmVjL21hY3Jvcy5k ZWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2U1NDM4YQotLS0gL2Rldi9u dWxsCisrKyBiL3RhcmdldC9oZXhhZ29uL2ltcG9ydGVkL21tdmVjL21hY3Jvcy5kZWYKQEAgLTAs MCArMSw4NDIgQEAKKy8qCisgKiAgQ29weXJpZ2h0KGMpIDIwMTktMjAyMSBRdWFsY29tbSBJbm5v dmF0aW9uIENlbnRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0 cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworREVGX01BQ1JPKGZEVU1QUSwKKwlk byB7CisJCXByaW50ZihTVFIgIjoiICNSRUcgIjogMHglMDE2bGx4XG4iLFJFRy51ZFswXSk7CisJ fSB3aGlsZSAoMCksCisJKCkKKykKKworREVGX01BQ1JPKGZVU0VfTE9PS1VQX0FERFJFU1NfQllf UkVWLAorCVBST0MtPmFyY2hfcHJvY19vcHRpb25zLT5tbXZlY191c2VfZnVsbF92YV9mb3JfbG9v a3VwLAorCSgpCispCisKK0RFRl9NQUNSTyhmVVNFX0xPT0tVUF9BRERSRVNTLAorCTEsCisJKCkK KykKKworREVGX01BQ1JPKGZOT1RRLAorCSh7bW1xcmVnX3QgX3JldCA9IHswfTsgaW50IF9pXzsg Zm9yIChfaV8gPSAwOyBfaV8gPCBmVkVDU0laRSgpLzY0OyBfaV8rKykgX3JldC51ZFtfaV9dID0g flZBTC51ZFtfaV9dOyBfcmV0O30pLAorCSgpCispCisKK0RFRl9NQUNSTyhmR0VUUUJJVFMsCisJ KChNQVNLKSAmIChSRUcud1soQklUTk8pPj41XSA+PiAoKEJJVE5PKSAmIDB4MWYpKSksCisJKCkK KykKKworREVGX01BQ1JPKGZHRVRRQklULAorCWZHRVRRQklUUyhSRUcsMSwxLEJJVE5PKSwKKwko KQorKQorCitERUZfTUFDUk8oZkdFTk1BU0tXLAorCSgoKGZHRVRRQklUKFFSRUcsKElEWCo0KzAp KSA/IDB4RkYgOiAweDApIDw8IDApCisJfCgoZkdFVFFCSVQoUVJFRywoSURYKjQrMSkpID8gMHhG RiA6IDB4MCkgPDwgOCkKKwl8KChmR0VUUUJJVChRUkVHLChJRFgqNCsyKSkgPyAweEZGIDogMHgw KSA8PCAxNikKKwl8KChmR0VUUUJJVChRUkVHLChJRFgqNCszKSkgPyAweEZGIDogMHgwKSA8PCAy NCkpLAorCSgpCispCitERUZfTUFDUk8oZkdFVDEwQklULAorCXsKKwkJQ09FID0gKCgoKChmR0VU VUJZVEUoMyxWQUwpID4+ICgyICogUE9TKSkgJiAzKSA8PCA4KSB8IGZHRVRVQllURShQT1MsVkFM KSkgPDwgNik7CisJCUNPRSA+Pj0gNjsKKwl9LAorCSgpCispCisKK0RFRl9NQUNSTyhmVk1BWCwK KwkoWD5ZKSA/IFggOiBZLAorCSgpCispCisKKworREVGX01BQ1JPKGZHRVROSUJCTEUsCisgICAg KCBmU1hUTig0LDgsKFNSQyA+PiAoNCpJRFgpKSAmIDB4RikgKSwKKyAgICAoKQorKQorCitERUZf TUFDUk8oZkdFVENSVU1CLAorICAgICggZlNYVE4oMiw4LChTUkMgPj4gKDIqSURYKSkgJiAweDMp ICksCisgICAgKCkKKykKKworREVGX01BQ1JPKGZHRVRDUlVNQl9TWU1NRVRSSUMsCisgICAgKCAo ZkdFVENSVU1CKElEWCxTUkMpPj0wID8gKDItZkdFVENSVU1CKElEWCxTUkMpKSA6IGZHRVRDUlVN QihJRFgsU1JDKSApICksCisgICAgKCkKKykKKworI2RlZmluZSBaRVJPX09GRlNFVF8yQiArCisK K0RFRl9NQUNSTyhmR0VOTUFTS0gsCisJKCgoZkdFVFFCSVQoUVJFRywoSURYKjIrMCkpID8gMHhG RiA6IDB4MCkgPDwgMCkKKwl8KChmR0VUUUJJVChRUkVHLChJRFgqMisxKSkgPyAweEZGIDogMHgw KSA8PCA4KSksCisJKCkKKykKKworREVGX01BQ1JPKGZHRVRNQVNLVywKKwkoVlJFRy53W0lEWF0g JiBmR0VOTUFTS1coKFFSRUcpLElEWCkpLAorCSgpCispCisKK0RFRl9NQUNSTyhmR0VUTUFTS0gs CisJKFZSRUcuaFtJRFhdICYgZkdFTk1BU0tIKChRUkVHKSxJRFgpKSwKKwkoKQorKQorCitERUZf TUFDUk8oZkNPTkRNQVNLOCwKKwkoZkdFVFFCSVQoUVJFRyxJRFgpID8gKFlFU1ZBTCkgOiAoTk9W QUwpKSwKKwkoKQorKQorCitERUZfTUFDUk8oZkNPTkRNQVNLMTYsCisJKChmR0VOTUFTS0goUVJF RyxJRFgpICYgKFlFU1ZBTCkpIHwgKGZHRU5NQVNLSChmTk9UUShRUkVHKSxJRFgpICYgKE5PVkFM KSkpLAorCSgpCispCisKK0RFRl9NQUNSTyhmQ09ORE1BU0szMiwKKwkoKGZHRU5NQVNLVyhRUkVH LElEWCkgJiAoWUVTVkFMKSkgfCAoZkdFTk1BU0tXKGZOT1RRKFFSRUcpLElEWCkgJiAoTk9WQUwp KSksCisJKCkKKykKKworCitERUZfTUFDUk8oZlNFVFFCSVRTLAorCWRvIHsKKwkJc2l6ZTR1X3Qg X19UTVAgPSAoVkFMKTsKKwkJUkVHLndbKEJJVE5PKT4+NV0gJj0gfigoTUFTSykgPDwgKChCSVRO TykgJiAweDFmKSk7CisJCVJFRy53WyhCSVROTyk+PjVdIHw9ICgoKF9fVE1QKSAmIChNQVNLKSkg PDwgKChCSVROTykgJiAweDFmKSk7CisJfSB3aGlsZSAoMCksCisJKCkKKykKKworREVGX01BQ1JP KGZTRVRRQklULAorCWZTRVRRQklUUyhSRUcsMSwxLEJJVE5PLFZBTCksCisJKCkKKykKKworREVG X01BQ1JPKGZWQllURVMsCisJKGZWRUNTSVpFKCkpLAorCSgpCispCisKK0RFRl9NQUNSTyhmVkhB TFZFUywKKwkoZlZFQ1NJWkUoKS8yKSwKKwkoKQorKQorCitERUZfTUFDUk8oZlZXT1JEUywKKwko ZlZFQ1NJWkUoKS80KSwKKwkoKQorKQorCitERUZfTUFDUk8oZlZEV09SRFMsCisJKGZWRUNTSVpF KCkvOCksCisJKCkKKykKKworREVGX01BQ1JPKGZWQUxJR04sCisgICAgKCBBRERSID0gQUREUiAm IH4oTE9HMl9BTElHTk1FTlQtMSkpLAorICAgICgpCispCisKK0RFRl9NQUNSTyhmVkxBU1RCWVRF LAorICAgICggQUREUiA9IEFERFIgfCAoTE9HMl9BTElHTk1FTlQtMSkpLAorICAgICgpCispCisK KworREVGX01BQ1JPKGZWRUxFTSwKKyAgICAoKGZWRUNTSVpFKCkqOCkvV0lEVEgpLAorICAgICgp CispCisKK0RFRl9NQUNSTyhmVkVDTE9HU0laRSwKKyAgICAobW12ZWNfY3VycmVudF92ZWNsb2dz aXplKHRocmVhZCkpLAorICAgICgpCispCisKK0RFRl9NQUNSTyhmVkVDU0laRSwKKyAgICAoMTw8 ZlZFQ0xPR1NJWkUoKSksCisgICAgKCkKKykKKworREVGX01BQ1JPKGZTV0FQQiwKKyAgICB7CisJ CXNpemUxdV90IHRtcCA9IEE7CisJCUEgPSBCOworCQlCID0gdG1wOworCX0sCisgICAgLyogTk9U SElORyAqLworKQorCitERUZfTUFDUk8oCisJZlZaRVJPLAorCW1tdmVjX3plcm9fdmVjdG9yKCks CisJKCkKKykKKworREVGX01BQ1JPKAorICAgIGZORVdWUkVHLAorICAgICgoVEhSRUFEMlNUUlVD VC0+VlJlZ3NfdXBkYXRlZCAmICgoKFZSZWdNYXNrKTEpPDxWTlVNKSkgPyBUSFJFQUQyU1RSVUNU LT5mdXR1cmVfVlJlZ3NbVk5VTV0gOiBtbXZlY196ZXJvX3ZlY3RvcigpKSwKKyAgICAoQV9ET1RO RVdWQUxVRSxBX1JFU1RSSUNUX1NMT1QwT05MWSkKKykKKworREVGX01BQ1JPKAorCWZWX0FMX0NI RUNLLAorCWlmICgoRUEpICYgKE1BU0spKSB7CisJCXdhcm4oImFsaWduaW5nIG1pc2FsaWduZWQg dmVjdG9yLiBQQz0lMDh4IEVBPSUwOHgiLHRocmVhZC0+UmVnc1tSRUdfUENdLChFQSkpOworCX0s CisJKCkKKykKK0RFRl9NQUNSTyhmU0NBVFRFUl9JTklULAorICAgIHsKKyAgICBtZW1fdmVjdG9y X3NjYXR0ZXJfaW5pdCh0aHJlYWQsIGluc24sICAgUkVHSU9OX1NUQVJULCBMRU5HVEgsIEVMRU1F TlRfU0laRSk7CisJaWYgKEVYQ0VQVElPTl9ERVRFQ1RFRCkgcmV0dXJuOworICAgIH0sCisgICAg KEFfU1RPUkUsQV9NRU1MSUtFLEFfUkVTVFJJQ1RfU0xPVDBPTkxZKQorKQorCitERUZfTUFDUk8o ZkdBVEhFUl9JTklULAorICAgIHsKKyAgICBtZW1fdmVjdG9yX2dhdGhlcl9pbml0KHRocmVhZCwg aW5zbiwgICBSRUdJT05fU1RBUlQsIExFTkdUSCwgRUxFTUVOVF9TSVpFKTsKKwlpZiAoRVhDRVBU SU9OX0RFVEVDVEVEKSByZXR1cm47CisgICAgfSwKKyAgICAoQV9MT0FELEFfTUVNTElLRSxBX1JF U1RSSUNUX1NMT1QxT05MWSkKKykKKworREVGX01BQ1JPKGZTQ0FUVEVSX0ZJTklTSCwKKyAgICB7 CisJaWYgKEVYQ0VQVElPTl9ERVRFQ1RFRCkgcmV0dXJuOworICAgIG1lbV92ZWN0b3Jfc2NhdHRl cl9maW5pc2godGhyZWFkLCBpbnNuLCBPUCk7CisgICAgfSwKKyAgICAoKQorKQorCitERUZfTUFD Uk8oZkdBVEhFUl9GSU5JU0gsCisgICAgeworCWlmIChFWENFUFRJT05fREVURUNURUQpIHJldHVy bjsKKyAgICBtZW1fdmVjdG9yX2dhdGhlcl9maW5pc2godGhyZWFkLCBpbnNuKTsKKyAgICB9LAor ICAgICgpCispCisKKworREVGX01BQ1JPKENIRUNLX1ZUQ01fUEFHRSwKKyAgICAgeworICAgICAg ICBpbnQgc2xvdCA9IGluc24tPnNsb3Q7CisgICAgICAgIHBhZGRyX3QgcGEgPSB0aHJlYWQtPm1l bV9hY2Nlc3Nbc2xvdF0ucGFkZHIrT0ZGU0VUOworICAgICAgICBwYSA9IHBhICYgfihBTElHTk1F TlQtMSk7CisgICAgICAgIEZMQUcgPSAocGEgPCAodGhyZWFkLT5tZW1fYWNjZXNzW3Nsb3RdLnBh ZGRyK0xFTkdUSCkpOworICAgICB9LAorICAgICgpCispCitERUZfTUFDUk8oQ09VTlRfT1VUX09G X0JPVU5EUywKKyAgICAgeworICAgICAgICBpZiAoIUZMQUcpCisgICAgICAgIHsKKyAgICAgICAg ICAgICAgIFRIUkVBRDJTVFJVQ1QtPnZ0Y21fbG9nLm9vYl9hY2Nlc3MgKz0gU0laRTsKKyAgICAg ICAgICAgICAgIHdhcm4oIlNjYXR0ZXIvR2F0aGVyIG91dCBvZiBib3VuZHMgb2YgcmVnaW9uIik7 CisgICAgICAgIH0KKyAgICAgfSwKKyAgICAoKQorKQorCitERUZfTUFDUk8oZkxPR19TQ0FUVEVS X09QLAorICAgIHsKKyAgICAgICAgLy8gTG9nIHRoZSBzaXplIGFuZCBpbmRpY2F0ZSB0aGF0IHRo ZSBleHRlbnNpb24gZXh0LmMgZmlsZSBuZWVkcyB0byBpbmNyZW1lbnQgcmlnaHQgYmVmb3JlIG1l bW9yeSB3cml0ZQorICAgICAgICBUSFJFQUQyU1RSVUNULT52dGNtX2xvZy5vcCA9IDE7CisgICAg ICAgIFRIUkVBRDJTVFJVQ1QtPnZ0Y21fbG9nLm9wX3NpemUgPSBTSVpFOworICAgIH0sCisgICAg KCkKKykKKworCisKK0RFRl9NQUNSTyhmVkxPR19WVENNX1dPUkRfSU5DUkVNRU5ULAorICAgIHsK KyAgICAgICAgaW50IHNsb3QgPSBpbnNuLT5zbG90OworICAgICAgICBpbnQgbG9nX2JhbmsgPSAw OworICAgICAgICBpbnQgbG9nX2J5dGUgPTA7CisgICAgICAgIHBhZGRyX3QgcGEgPSB0aHJlYWQt Pm1lbV9hY2Nlc3Nbc2xvdF0ucGFkZHIrKE9GRlNFVCAmIH4oQUxJR05NRU5ULTEpKTsKKyAgICAg ICAgcGFkZHJfdCBwYV9oaWdoID0gdGhyZWFkLT5tZW1fYWNjZXNzW3Nsb3RdLnBhZGRyK0xFTjsK KyAgICAgICAgZm9yKGludCBpMCA9IDA7IGkwIDwgNDsgaTArKykKKyAgICAgICAgeworICAgICAg ICAgICAgbG9nX2J5dGUgPSAgKChPRkZTRVQ+PTApJiYoKHBhK2kwKTw9cGFfaGlnaCkpOworICAg ICAgICAgICAgbG9nX2JhbmsgfD0gKGxvZ19ieXRlPDxpMCk7CisgICAgICAgICAgICBMT0dfVlRD TV9CWVRFKHBhK2kwLGxvZ19ieXRlLElOQy51Yls0KklEWCtpMF0sNCpJRFgraTApOworICAgICAg ICB9CisgICAgICAgIHsgTE9HX1ZUQ01fQkFOSyhwYSwgbG9nX2JhbmssIElEWCk7IH0KKyAgICB9 LAorICAgICgpCispCisKK0RFRl9NQUNSTyhmVkxPR19WVENNX0hBTEZXT1JEX0lOQ1JFTUVOVCwK KyAgICB7CisgICAgICAgIGludCBzbG90ID0gaW5zbi0+c2xvdDsKKyAgICAgICAgaW50IGxvZ19i YW5rID0gMDsKKyAgICAgICAgaW50IGxvZ19ieXRlID0gMDsKKyAgICAgICAgcGFkZHJfdCBwYSA9 IHRocmVhZC0+bWVtX2FjY2Vzc1tzbG90XS5wYWRkcisoT0ZGU0VUICYgfihBTElHTk1FTlQtMSkp OworICAgICAgICBwYWRkcl90IHBhX2hpZ2ggPSB0aHJlYWQtPm1lbV9hY2Nlc3Nbc2xvdF0ucGFk ZHIrTEVOOworICAgICAgICBmb3IoaW50IGkwID0gMDsgaTAgPCAyOyBpMCsrKSB7CisgICAgICAg ICAgICBsb2dfYnl0ZSA9ICAoKE9GRlNFVD49MCkmJigocGEraTApPD1wYV9oaWdoKSk7CisgICAg ICAgICAgICBsb2dfYmFuayB8PSAobG9nX2J5dGU8PGkwKTsKKyAgICAgICAgICAgIExPR19WVENN X0JZVEUocGEraTAsbG9nX2J5dGUsSU5DLnViWzIqSURYK2kwXSwyKklEWCtpMCk7CisgICAgICAg IH0KKyAgICAgICAgeyBMT0dfVlRDTV9CQU5LKHBhLCBsb2dfYmFuayxJRFgpOyB9CisgICAgfSwK KyAgICAoKQorKQorCitERUZfTUFDUk8oZlZMT0dfVlRDTV9IQUxGV09SRF9JTkNSRU1FTlRfRFYs CisgICAgeworICAgICAgICBpbnQgc2xvdCA9IGluc24tPnNsb3Q7CisgICAgICAgIGludCBsb2df YmFuayA9IDA7CisgICAgICAgIGludCBsb2dfYnl0ZSA9IDA7CisgICAgICAgIHBhZGRyX3QgcGEg PSB0aHJlYWQtPm1lbV9hY2Nlc3Nbc2xvdF0ucGFkZHIrKE9GRlNFVCAmIH4oQUxJR05NRU5ULTEp KTsKKyAgICAgICAgcGFkZHJfdCBwYV9oaWdoID0gdGhyZWFkLT5tZW1fYWNjZXNzW3Nsb3RdLnBh ZGRyK0xFTjsKKyAgICAgICAgZm9yKGludCBpMCA9IDA7IGkwIDwgMjsgaTArKykgeworICAgICAg ICAgICAgbG9nX2J5dGUgPSAgKChPRkZTRVQ+PTApJiYoKHBhK2kwKTw9cGFfaGlnaCkpOworICAg ICAgICAgICAgbG9nX2JhbmsgfD0gKGxvZ19ieXRlPDxpMCk7CisgICAgICAgICAgICBMT0dfVlRD TV9CWVRFKHBhK2kwLGxvZ19ieXRlLElOQy51YlsyKklEWCtpMF0sMipJRFgraTApOworICAgICAg ICB9CisgICAgICAgIHsgTE9HX1ZUQ01fQkFOSyhwYSwgbG9nX2JhbmssKDIqSURYMitJRFhfSCkp O30KKyAgICB9LAorICAgICgpCispCisKKworCitERUZfTUFDUk8oR0FUSEVSX0ZVTkNUSU9OLAor eworICAgICAgICBpbnQgc2xvdCA9IGluc24tPnNsb3Q7CisgICAgICAgIGludCBpMDsKKyAgICAg ICAgcGFkZHJfdCBwYSA9IHRocmVhZC0+bWVtX2FjY2Vzc1tzbG90XS5wYWRkcitPRkZTRVQ7Cisg ICAgICAgIHBhZGRyX3QgcGFfaGlnaCA9IHRocmVhZC0+bWVtX2FjY2Vzc1tzbG90XS5wYWRkcitM RU47CisgICAgICAgIGludCBsb2dfYmFuayA9IDA7CisgICAgICAgIGludCBsb2dfYnl0ZSA9IDA7 CisgICAgICAgIGZvcihpMCA9IDA7IGkwIDwgRUxFTUVOVF9TSVpFOyBpMCsrKQorICAgICAgICB7 CisgICAgICAgICAgICBsb2dfYnl0ZSA9ICAoKE9GRlNFVD49MCkmJigocGEraTApPD1wYV9oaWdo KSkgJiYgUVZBTDsKKyAgICAgICAgICAgIGxvZ19iYW5rIHw9IChsb2dfYnl0ZTw8aTApOworICAg ICAgICAgICAgc2l6ZTF1X3QgQiAgPSBzaW1fbWVtX3JlYWQxKHRocmVhZC0+c3lzdGVtX3B0ciwg dGhyZWFkLT50aHJlYWRJZCwgdGhyZWFkLT5tZW1fYWNjZXNzW3Nsb3RdLnBhZGRyK09GRlNFVCtp MCk7CisgICAgICAgICAgICBUSFJFQUQyU1RSVUNULT50bXBfVlJlZ3NbMF0udWJbRUxFTUVOVF9T SVpFKklEWCtpMF0gPSBCOworICAgICAgICAgICAgTE9HX1ZUQ01fQllURShwYStpMCxsb2dfYnl0 ZSxCLEVMRU1FTlRfU0laRSpJRFgraTApOworICAgICAgICB9CisgICAgICAgIExPR19WVENNX0JB TksocGEsIGxvZ19iYW5rLEJBTktfSURYKTsKK30sCisoKQorKQorCisKKworREVGX01BQ1JPKGZW TE9HX1ZUQ01fR0FUSEVSX1dPUkQsCisgICAgeworCQlHQVRIRVJfRlVOQ1RJT04oRUEsT0ZGU0VU LElEWCwgTEVOLCA0LCBJRFgsIDEpOworICAgIH0sCisgICAgKCkKKykKK0RFRl9NQUNSTyhmVkxP R19WVENNX0dBVEhFUl9IQUxGV09SRCwKKyAgICB7CisJCUdBVEhFUl9GVU5DVElPTihFQSxPRkZT RVQsSURYLCBMRU4sIDIsIElEWCwgMSk7CisgICAgfSwKKyAgICAoKQorKQorREVGX01BQ1JPKGZW TE9HX1ZUQ01fR0FUSEVSX0hBTEZXT1JEX0RWLAorICAgIHsKKwkJR0FUSEVSX0ZVTkNUSU9OKEVB LE9GRlNFVCxJRFgsIExFTiwgMiwgKDIqSURYMitJRFhfSCksIDEpOworICAgIH0sCisgICAgKCkK KykKK0RFRl9NQUNSTyhmVkxPR19WVENNX0dBVEhFUl9XT1JEUSwKKyAgICB7CisJCUdBVEhFUl9G VU5DVElPTihFQSxPRkZTRVQsSURYLCBMRU4sIDQsIElEWCwgZkdFVFFCSVQoUXNWLDQqSURYK2kw KSk7CisgICAgfSwKKyAgICAoKQorKQorREVGX01BQ1JPKGZWTE9HX1ZUQ01fR0FUSEVSX0hBTEZX T1JEUSwKKyAgICB7CisJCUdBVEhFUl9GVU5DVElPTihFQSxPRkZTRVQsSURYLCBMRU4sIDIsIElE WCwgZkdFVFFCSVQoUXNWLDIqSURYK2kwKSk7CisgICAgfSwKKyAgICAoKQorKQorCitERUZfTUFD Uk8oZlZMT0dfVlRDTV9HQVRIRVJfSEFMRldPUkRRX0RWLAorICAgIHsKKwkJR0FUSEVSX0ZVTkNU SU9OKEVBLE9GRlNFVCxJRFgsIExFTiwgMiwgKDIqSURYMitJRFhfSCksIGZHRVRRQklUKFFzViwy KklEWCtpMCkpOworICAgIH0sCisgICAgKCkKKykKKworCitERUZfTUFDUk8oREVCVUdfTE9HX0FE RFIsCisgICAgeworCisgICAgICAgIGlmICh0aHJlYWQtPnByb2Nlc3Nvcl9wdHItPmFyY2hfcHJv Y19vcHRpb25zLT5tbXZlY19uZXR3b3JrX2FkZHJfbG9nMikKKyAgICAgICAgeworCisgICAgICAg ICAgICBpbnQgc2xvdCA9IGluc24tPnNsb3Q7CisgICAgICAgICAgICBwYWRkcl90IHBhID0gdGhy ZWFkLT5tZW1fYWNjZXNzW3Nsb3RdLnBhZGRyK09GRlNFVDsKKyAgICAgICAgfQorICAgIH0sCisg ICAgKCkKKykKKworCisKKworCisKKworREVGX01BQ1JPKFNDQVRURVJfT1BfV1JJVEVfVE9fTUVN LAorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtbXZlY3gtPnZ0Y21fbG9nLnNp emU7IGkrPXNpemVvZihUWVBFKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCBtbXZlY3gt PnZ0Y21fbG9nLm1hc2sudWJbaV0gIT0gMCkgeworICAgICAgICAgICAgICAgIFRZUEUgZHN0ID0g MDsKKyAgICAgICAgICAgICAgICBUWVBFIGluYyA9IDA7CisgICAgICAgICAgICAgICAgZm9yKGlu dCBqID0gMDsgaiA8IHNpemVvZihUWVBFKTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGRz dCB8PSAoc2ltX21lbV9yZWFkMSh0aHJlYWQtPnN5c3RlbV9wdHIsIHRocmVhZC0+dGhyZWFkSWQs IG1tdmVjeC0+dnRjbV9sb2cucGFbaStqXSkgPDwgKDgqaikpOworICAgICAgICAgICAgICAgICAg ICBpbmMgfD0gbW12ZWN4LT52dGNtX2xvZy5kYXRhLnViW2oraV0gPDwgKDgqaik7CisKKyAgICAg ICAgICAgICAgICAgICAgbW12ZWN4LT52dGNtX2xvZy5tYXNrLnViW2oraV0gPSAwOworICAgICAg ICAgICAgICAgICAgICBtbXZlY3gtPnZ0Y21fbG9nLmRhdGEudWJbaitpXSA9IDA7CisgICAgICAg ICAgICAgICAgICAgIG1tdmVjeC0+dnRjbV9sb2cub2Zmc2V0cy51YltqK2ldID0gMDsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZHN0ICs9IGluYzsKKyAgICAgICAgICAgICAg ICBmb3IoaW50IGogPSAwOyBqIDwgc2l6ZW9mKFRZUEUpOyBqKyspIHsKKyAgICAgICAgICAgICAg ICAgICAgc2ltX21lbV93cml0ZTEodGhyZWFkLT5zeXN0ZW1fcHRyLHRocmVhZC0+dGhyZWFkSWQs IG1tdmVjeC0+dnRjbV9sb2cucGFbaStqXSwgKGRzdCA+PiAoOCpqKSkmIDB4RkYgKTsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH0KKyAgICB9LAorICAgICgpCispCisKK0RF Rl9NQUNSTyhTQ0FUVEVSX0ZVTkNUSU9OLAoreworICAgICAgICBpbnQgc2xvdCA9IGluc24tPnNs b3Q7CisgICAgICAgIGludCBpMDsKKyAgICAgICAgcGFkZHJfdCBwYSA9IHRocmVhZC0+bWVtX2Fj Y2Vzc1tzbG90XS5wYWRkcitPRkZTRVQ7CisgICAgICAgIHBhZGRyX3QgcGFfaGlnaCA9IHRocmVh ZC0+bWVtX2FjY2Vzc1tzbG90XS5wYWRkcitMRU47CisgICAgICAgIGludCBsb2dfYmFuayA9IDA7 CisgICAgICAgIGludCBsb2dfYnl0ZSA9IDA7CisgICAgICAgIGZvcihpMCA9IDA7IGkwIDwgRUxF TUVOVF9TSVpFOyBpMCsrKSB7CisgICAgICAgICAgICBsb2dfYnl0ZSA9ICgoT0ZGU0VUPj0wKSYm KChwYStpMCk8PXBhX2hpZ2gpKSAmJiBRVkFMOworICAgICAgICAgICAgbG9nX2JhbmsgfD0gKGxv Z19ieXRlPDxpMCk7CisgICAgICAgICAgICBMT0dfVlRDTV9CWVRFKHBhK2kwLGxvZ19ieXRlLElO LnViW0VMRU1FTlRfU0laRSpJRFgraTBdLEVMRU1FTlRfU0laRSpJRFgraTApOworICAgICAgICB9 CisgICAgICAgIExPR19WVENNX0JBTksocGEsIGxvZ19iYW5rLEJBTktfSURYKTsKKworfSwKKygp CispCisKK0RFRl9NQUNSTyhmVkxPR19WVENNX0hBTEZXT1JELAorICAgIHsKKwkJU0NBVFRFUl9G VU5DVElPTiAoRUEsT0ZGU0VULElEWCwgTEVOLCAyLCBJRFgsIDEsIElOKTsKKyAgICB9LAorICAg ICgpCispCitERUZfTUFDUk8oZlZMT0dfVlRDTV9XT1JELAorICAgIHsKKwkJU0NBVFRFUl9GVU5D VElPTiAoRUEsT0ZGU0VULElEWCwgTEVOLCA0LCBJRFgsIDEsIElOKTsKKyAgICB9LAorICAgICgp CispCisKK0RFRl9NQUNSTyhmVkxPR19WVENNX0hBTEZXT1JEUSwKKyAgICB7CisJCVNDQVRURVJf RlVOQ1RJT04gKEVBLE9GRlNFVCxJRFgsIExFTiwgMiwgSURYLCBmR0VUUUJJVChRc1YsMipJRFgr aTApLCBJTik7CisgICAgfSwKKyAgICAoKQorKQorREVGX01BQ1JPKGZWTE9HX1ZUQ01fV09SRFEs CisgICAgeworCQlTQ0FUVEVSX0ZVTkNUSU9OIChFQSxPRkZTRVQsSURYLCBMRU4sIDQsIElEWCwg ZkdFVFFCSVQoUXNWLDQqSURYK2kwKSwgSU4pOworICAgIH0sCisgICAgKCkKKykKKworCisKKwor CitERUZfTUFDUk8oZlZMT0dfVlRDTV9IQUxGV09SRF9EViwKKyAgICB7CisJCVNDQVRURVJfRlVO Q1RJT04gKEVBLE9GRlNFVCxJRFgsIExFTiwgMiwgKDIqSURYMitJRFhfSCksIDEsIElOKTsKKyAg ICB9LAorICAgICgpCispCisKK0RFRl9NQUNSTyhmVkxPR19WVENNX0hBTEZXT1JEUV9EViwKKyAg ICB7CisJCVNDQVRURVJfRlVOQ1RJT04gKEVBLE9GRlNFVCxJRFgsIExFTiwgMiwgKDIqSURYMitJ RFhfSCksIGZHRVRRQklUKFFzViwyKklEWCtpMCksIElOKTsKKyAgICB9LAorICAgICgpCispCisK KworCisKKworCitERUZfTUFDUk8oZlNUT1JFUkVMRUFTRSwKKyAgICB7CisgICAgICAgIGZWX0FM X0NIRUNLKEVBLGZWRUNTSVpFKCktMSk7CisKKyAgICAgICAgbWVtX3N0b3JlX3JlbGVhc2UodGhy ZWFkLCBpbnNuLCBmVkVDU0laRSgpLCBFQSZ+KGZWRUNTSVpFKCktMSksIEVBLCBUWVBFLCBmVVNF X0xPT0tVUF9BRERSRVNTX0JZX1JFVih0aHJlYWQtPnByb2Nlc3Nvcl9wdHIpKTsKKyAgICB9LAor CShBX1NUT1JFLEFfTUVNTElLRSkKKykKKworREVGX01BQ1JPKGZWRkVUQ0hfQUwsCisgICAgewor ICAgIGZWX0FMX0NIRUNLKEVBLGZWRUNTSVpFKCktMSk7CisgICAgbWVtX2ZldGNoX3ZlY3Rvcih0 aHJlYWQsIGluc24sIEVBJn4oZlZFQ1NJWkUoKS0xKSwgaW5zbi0+c2xvdCwgZlZFQ1NJWkUoKSk7 CisgICAgfSwKKyAgICAoQV9MT0FELEFfTUVNTElLRSkKKykKKworCitERUZfTUFDUk8oZkxPQURN TVZfQUwsCisgICAgeworICAgIGZWX0FMX0NIRUNLKEVBLEFMSUdOTUVOVC0xKTsKKwl0aHJlYWQt Pmxhc3RfcGt0LT5kb3VibGVfYWNjZXNzX3ZlYyA9IDA7CisgICAgbWVtX2xvYWRfdmVjdG9yX29k ZHZhKHRocmVhZCwgaW5zbiwgRUEmfihBTElHTk1FTlQtMSksIEVBLCBpbnNuLT5zbG90LCBMRU4s ICZEU1QudWJbMF0sIExFTiwgZlVTRV9MT09LVVBfQUREUkVTU19CWV9SRVYodGhyZWFkLT5wcm9j ZXNzb3JfcHRyKSk7CisgICAgfSwKKyAgICAoQV9MT0FELEFfTUVNTElLRSkKKykKKworREVGX01B Q1JPKGZMT0FETU1WLAorCWZMT0FETU1WX0FMKEVBLGZWRUNTSVpFKCksZlZFQ1NJWkUoKSxEU1Qp LAorCSgpCispCisKK0RFRl9NQUNSTyhmTE9BRE1NVlEsCisJZG8geworCQlpbnQgX19pOworCQlm TE9BRE1NVl9BTChFQSxmVkVDU0laRSgpLGZWRUNTSVpFKCksRFNUKTsKKwkJZlZGT1JFQUNIKDgs X19pKSBpZiAoIWZHRVRRQklUKFFWQUwsX19pKSkgRFNULmJbX19pXSA9IDA7CisJfSB3aGlsZSAo MCksCisJKCkKKykKKworREVGX01BQ1JPKGZMT0FETU1WTlEsCisJZG8geworCQlpbnQgX19pOwor CQlmTE9BRE1NVl9BTChFQSxmVkVDU0laRSgpLGZWRUNTSVpFKCksRFNUKTsKKwkJZlZGT1JFQUNI KDgsX19pKSBpZiAoZkdFVFFCSVQoUVZBTCxfX2kpKSBEU1QuYltfX2ldID0gMDsKKwl9IHdoaWxl ICgwKSwKKwkoKQorKQorCitERUZfTUFDUk8oZkxPQURNTVZVX0FMLAorICAgIHsKKyAgICBzaXpl NHVfdCBzaXplMiA9IChFQSkmKEFMSUdOTUVOVC0xKTsKKyAgICBzaXplNHVfdCBzaXplMSA9IExF Ti1zaXplMjsKKwl0aHJlYWQtPmxhc3RfcGt0LT5kb3VibGVfYWNjZXNzX3ZlYyA9IDE7CisgICAg bWVtX2xvYWRfdmVjdG9yX29kZHZhKHRocmVhZCwgaW5zbiwgRUErc2l6ZTEsIEVBK2ZWRUNTSVpF KCksIC8qIHNsb3QgKi8gMSwgc2l6ZTIsICZEU1QudWJbc2l6ZTFdLCBzaXplMiwgZlVTRV9MT09L VVBfQUREUkVTUygpKTsKKyAgICBtZW1fbG9hZF92ZWN0b3Jfb2RkdmEodGhyZWFkLCBpbnNuLCBF QSwgRUEsLyogc2xvdCAqLyAwLCBzaXplMSwgJkRTVC51YlswXSwgc2l6ZTEsIGZVU0VfTE9PS1VQ X0FERFJFU1NfQllfUkVWKHRocmVhZC0+cHJvY2Vzc29yX3B0cikpOworICAgIH0sCisgICAgKEFf TE9BRCxBX01FTUxJS0UpCispCisKK0RFRl9NQUNSTyhmTE9BRE1NVlUsCisJeworCQkvKiBpZiBh ZGRyZXNzIGhhcHBlbnMgdG8gYmUgYWxpZ25lZCwgb25seSBkbyBhbGlnbmVkIGxvYWQgKi8KKyAg ICAgICAgdGhyZWFkLT5sYXN0X3BrdC0+cGt0X2hhc192dGNtX2FjY2VzcyA9IDA7CisgICAgICAg IHRocmVhZC0+bGFzdF9wa3QtPnBrdF9hY2Nlc3NfY291bnQgPSAwOworCQlpZiAoIChFQSAmIChm VkVDU0laRSgpLTEpKSA9PSAwKSB7CisgICAgICAgICAgICB0aHJlYWQtPmxhc3RfcGt0LT5wa3Rf aGFzX3ZtZW11X2FjY2VzcyA9IDA7CisJCQl0aHJlYWQtPmxhc3RfcGt0LT5kb3VibGVfYWNjZXNz ID0gMDsKKworCQkJZkxPQURNTVZfQUwoRUEsZlZFQ1NJWkUoKSxmVkVDU0laRSgpLERTVCk7CisJ CX0gZWxzZSB7CisgICAgICAgICAgICB0aHJlYWQtPmxhc3RfcGt0LT5wa3RfaGFzX3ZtZW11X2Fj Y2VzcyA9IDE7CisJCQl0aHJlYWQtPmxhc3RfcGt0LT5kb3VibGVfYWNjZXNzID0gMTsKKworCQkJ ZkxPQURNTVZVX0FMKEVBLGZWRUNTSVpFKCksZlZFQ1NJWkUoKSxEU1QpOworCQl9CisJfSwKKwko KQorKQorCitERUZfTUFDUk8oZlNUT1JFTU1WX0FMLAorICAgIHsKKyAgICBmVl9BTF9DSEVDSyhF QSxBTElHTk1FTlQtMSk7CisgICAgbWVtX3N0b3JlX3ZlY3Rvcl9vZGR2YSh0aHJlYWQsIGluc24s IEVBJn4oQUxJR05NRU5ULTEpLCBFQSwgaW5zbi0+c2xvdCwgTEVOLCAmU1JDLnViWzBdLCAwLCAw LCBmVVNFX0xPT0tVUF9BRERSRVNTX0JZX1JFVih0aHJlYWQtPnByb2Nlc3Nvcl9wdHIpKTsKKyAg ICB9LAorICAgIChBX1NUT1JFLEFfTUVNTElLRSkKKykKKworREVGX01BQ1JPKGZTVE9SRU1NViwK KwlmU1RPUkVNTVZfQUwoRUEsZlZFQ1NJWkUoKSxmVkVDU0laRSgpLFNSQyksCisJKCkKKykKKwor REVGX01BQ1JPKGZTVE9SRU1NVlFfQUwsCisgICAgZG8geworCW1tdmVjdG9yX3QgbWFza3ZlYzsK KwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgZlZFQ1NJWkUoKTsgaSsrKSBtYXNrdmVjLnViW2ld ID0gZkdFVFFCSVQoTUFTSyxpKTsKKwltZW1fc3RvcmVfdmVjdG9yX29kZHZhKHRocmVhZCwgaW5z biwgRUEmfihBTElHTk1FTlQtMSksIEVBLCBpbnNuLT5zbG90LCBMRU4sICZTUkMudWJbMF0sICZt YXNrdmVjLnViWzBdLCAwLCBmVVNFX0xPT0tVUF9BRERSRVNTX0JZX1JFVih0aHJlYWQtPnByb2Nl c3Nvcl9wdHIpKTsKKyAgICB9IHdoaWxlICgwKSwKKyAgICAoQV9TVE9SRSxBX01FTUxJS0UpCisp CisKK0RFRl9NQUNSTyhmU1RPUkVNTVZRLAorCWZTVE9SRU1NVlFfQUwoRUEsZlZFQ1NJWkUoKSxm VkVDU0laRSgpLFNSQyxNQVNLKSwKKwkoKQorKQorCitERUZfTUFDUk8oZlNUT1JFTU1WTlFfQUws CisgICAgeworCW1tdmVjdG9yX3QgbWFza3ZlYzsKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwg ZlZFQ1NJWkUoKTsgaSsrKSBtYXNrdmVjLnViW2ldID0gZkdFVFFCSVQoTUFTSyxpKTsKKyAgICAg ICAgZlZfQUxfQ0hFQ0soRUEsQUxJR05NRU5ULTEpOworCW1lbV9zdG9yZV92ZWN0b3Jfb2RkdmEo dGhyZWFkLCBpbnNuLCBFQSZ+KEFMSUdOTUVOVC0xKSwgRUEsIGluc24tPnNsb3QsIExFTiwgJlNS Qy51YlswXSwgJm1hc2t2ZWMudWJbMF0sIDEsIGZVU0VfTE9PS1VQX0FERFJFU1NfQllfUkVWKHRo cmVhZC0+cHJvY2Vzc29yX3B0cikpOworICAgIH0sCisgICAgKEFfU1RPUkUsQV9NRU1MSUtFKQor KQorCitERUZfTUFDUk8oZlNUT1JFTU1WTlEsCisJZlNUT1JFTU1WTlFfQUwoRUEsZlZFQ1NJWkUo KSxmVkVDU0laRSgpLFNSQyxNQVNLKSwKKwkoKQorKQorCitERUZfTUFDUk8oZlNUT1JFTU1WVV9B TCwKKyAgICB7CisgICAgc2l6ZTR1X3Qgc2l6ZTEgPSBBTElHTk1FTlQtKChFQSkmKEFMSUdOTUVO VC0xKSk7CisgICAgc2l6ZTR1X3Qgc2l6ZTI7CisgICAgaWYgKHNpemUxPkxFTikgc2l6ZTEgPSBM RU47CisgICAgc2l6ZTIgPSBMRU4tc2l6ZTE7CisgICAgbWVtX3N0b3JlX3ZlY3Rvcl9vZGR2YSh0 aHJlYWQsIGluc24sIEVBK3NpemUxLCBFQStmVkVDU0laRSgpLCAvKiBzbG90ICovIDEsIHNpemUy LCAmU1JDLnViW3NpemUxXSwgMCwgMCwgZlVTRV9MT09LVVBfQUREUkVTUygpKTsKKyAgICBtZW1f c3RvcmVfdmVjdG9yX29kZHZhKHRocmVhZCwgaW5zbiwgRUEsIEVBLCAvKiBzbG90ICovIDAsIHNp emUxLCAmU1JDLnViWzBdLCAwLCAwLCBmVVNFX0xPT0tVUF9BRERSRVNTX0JZX1JFVih0aHJlYWQt PnByb2Nlc3Nvcl9wdHIpKTsKKyAgICB9LAorICAgIChBX1NUT1JFLEFfTUVNTElLRSkKKykKKwor REVGX01BQ1JPKGZTVE9SRU1NVlUsCisJeworICAgICAgICB0aHJlYWQtPmxhc3RfcGt0LT5wa3Rf aGFzX3Z0Y21fYWNjZXNzID0gMDsKKyAgICAgICAgdGhyZWFkLT5sYXN0X3BrdC0+cGt0X2FjY2Vz c19jb3VudCA9IDA7CisJCWlmICggKEVBICYgKGZWRUNTSVpFKCktMSkpID09IDApIHsKKwkJCXRo cmVhZC0+bGFzdF9wa3QtPmRvdWJsZV9hY2Nlc3MgPSAwOworCQkJZlNUT1JFTU1WX0FMKEVBLGZW RUNTSVpFKCksZlZFQ1NJWkUoKSxTUkMpOworCQl9IGVsc2UgeworCQkJdGhyZWFkLT5sYXN0X3Br dC0+ZG91YmxlX2FjY2VzcyA9IDE7CisgICAgICAgICAgICB0aHJlYWQtPmxhc3RfcGt0LT5wa3Rf aGFzX3ZtZW11X2FjY2VzcyA9IDE7CisJCQlmU1RPUkVNTVZVX0FMKEVBLGZWRUNTSVpFKCksZlZF Q1NJWkUoKSxTUkMpOworCQl9CisJfSwKKwkoKQorKQorCitERUZfTUFDUk8oZlNUT1JFTU1WUVVf QUwsCisgICAgeworCXNpemU0dV90IHNpemUxID0gQUxJR05NRU5ULSgoRUEpJihBTElHTk1FTlQt MSkpOworCXNpemU0dV90IHNpemUyOworCW1tdmVjdG9yX3QgbWFza3ZlYzsKKwlpbnQgaTsKKwlm b3IgKGkgPSAwOyBpIDwgZlZFQ1NJWkUoKTsgaSsrKSBtYXNrdmVjLnViW2ldID0gZkdFVFFCSVQo TUFTSyxpKTsKKwlpZiAoc2l6ZTE+TEVOKSBzaXplMSA9IExFTjsKKwlzaXplMiA9IExFTi1zaXpl MTsKKwltZW1fc3RvcmVfdmVjdG9yX29kZHZhKHRocmVhZCwgaW5zbiwgRUErc2l6ZTEsIEVBK2ZW RUNTSVpFKCksLyogc2xvdCAqLyAxLCBzaXplMiwgJlNSQy51YltzaXplMV0sICZtYXNrdmVjLnVi W3NpemUxXSwgMCwgZlVTRV9MT09LVVBfQUREUkVTUygpKTsKKwltZW1fc3RvcmVfdmVjdG9yX29k ZHZhKHRocmVhZCwgaW5zbiwgRUEsIC8qIHNsb3QgKi8gMCwgc2l6ZTEsICZTUkMudWJbMF0sICZt YXNrdmVjLnViWzBdLCAwLCBmVVNFX0xPT0tVUF9BRERSRVNTX0JZX1JFVih0aHJlYWQtPnByb2Nl c3Nvcl9wdHIpKTsKKyAgICB9LAorICAgIChBX1NUT1JFLEFfTUVNTElLRSkKKykKKworREVGX01B Q1JPKGZTVE9SRU1NVlFVLAorCXsKKyAgICAgICAgdGhyZWFkLT5sYXN0X3BrdC0+cGt0X2hhc192 dGNtX2FjY2VzcyA9IDA7CisgICAgICAgIHRocmVhZC0+bGFzdF9wa3QtPnBrdF9hY2Nlc3NfY291 bnQgPSAwOworCQlpZiAoIChFQSAmIChmVkVDU0laRSgpLTEpKSA9PSAwKSB7CisJCQl0aHJlYWQt Pmxhc3RfcGt0LT5kb3VibGVfYWNjZXNzID0gMDsKKwkJCWZTVE9SRU1NVlFfQUwoRUEsZlZFQ1NJ WkUoKSxmVkVDU0laRSgpLFNSQyxNQVNLKTsKKwkJfSBlbHNlIHsKKwkJCXRocmVhZC0+bGFzdF9w a3QtPmRvdWJsZV9hY2Nlc3MgPSAxOworICAgICAgICAgICAgdGhyZWFkLT5sYXN0X3BrdC0+cGt0 X2hhc192bWVtdV9hY2Nlc3MgPSAxOworCQkJZlNUT1JFTU1WUVVfQUwoRUEsZlZFQ1NJWkUoKSxm VkVDU0laRSgpLFNSQyxNQVNLKTsKKwkJfQorCX0sCisJKCkKKykKKworREVGX01BQ1JPKGZTVE9S RU1NVk5RVV9BTCwKKyAgICB7CisJc2l6ZTR1X3Qgc2l6ZTEgPSBBTElHTk1FTlQtKChFQSkmKEFM SUdOTUVOVC0xKSk7CisJc2l6ZTR1X3Qgc2l6ZTI7CisJbW12ZWN0b3JfdCBtYXNrdmVjOworCWlu dCBpOworCWZvciAoaSA9IDA7IGkgPCBmVkVDU0laRSgpOyBpKyspIG1hc2t2ZWMudWJbaV0gPSBm R0VUUUJJVChNQVNLLGkpOworCWlmIChzaXplMT5MRU4pIHNpemUxID0gTEVOOworCXNpemUyID0g TEVOLXNpemUxOworCW1lbV9zdG9yZV92ZWN0b3Jfb2RkdmEodGhyZWFkLCBpbnNuLCBFQStzaXpl MSwgRUErZlZFQ1NJWkUoKSwgLyogc2xvdCAqLyAxLCBzaXplMiwgJlNSQy51YltzaXplMV0sICZt YXNrdmVjLnViW3NpemUxXSwgMSwgZlVTRV9MT09LVVBfQUREUkVTUygpKTsKKwltZW1fc3RvcmVf dmVjdG9yX29kZHZhKHRocmVhZCwgaW5zbiwgRUEsIEVBLCAvKiBzbG90ICovIDAsIHNpemUxLCAm U1JDLnViWzBdLCAmbWFza3ZlYy51YlswXSwgMSwgZlVTRV9MT09LVVBfQUREUkVTU19CWV9SRVYo dGhyZWFkLT5wcm9jZXNzb3JfcHRyKSk7CisgICAgfSwKKyAgICAoQV9TVE9SRSxBX01FTUxJS0Up CispCisKK0RFRl9NQUNSTyhmU1RPUkVNTVZOUVUsCisJeworICAgICAgICB0aHJlYWQtPmxhc3Rf cGt0LT5wa3RfaGFzX3Z0Y21fYWNjZXNzID0gMDsKKyAgICAgICAgdGhyZWFkLT5sYXN0X3BrdC0+ cGt0X2FjY2Vzc19jb3VudCA9IDA7CisJCWlmICggKEVBICYgKGZWRUNTSVpFKCktMSkpID09IDAp IHsKKwkJCXRocmVhZC0+bGFzdF9wa3QtPmRvdWJsZV9hY2Nlc3MgPSAwOworCQkJZlNUT1JFTU1W TlFfQUwoRUEsZlZFQ1NJWkUoKSxmVkVDU0laRSgpLFNSQyxNQVNLKTsKKwkJfSBlbHNlIHsKKwkJ CXRocmVhZC0+bGFzdF9wa3QtPmRvdWJsZV9hY2Nlc3MgPSAxOworICAgICAgICAgICAgdGhyZWFk LT5sYXN0X3BrdC0+cGt0X2hhc192bWVtdV9hY2Nlc3MgPSAxOworCQkJZlNUT1JFTU1WTlFVX0FM KEVBLGZWRUNTSVpFKCksZlZFQ1NJWkUoKSxTUkMsTUFTSyk7CisJCX0KKwl9LAorCSgpCispCisK KworCisKK0RFRl9NQUNSTyhmVkZPUkVBQ0gsCisgICAgZm9yIChWQVIgPSAwOyBWQVIgPCBmVkVM RU0oV0lEVEgpOyBWQVIrKyksCisgICAgLyogTk9USElORyAqLworKQorCitERUZfTUFDUk8oZlZB UlJBWV9FTEVNRU5UX0FDQ0VTUywKKyAgICBBUlJBWS52WyhJTkRFWCkgLyAoZlZFQ1NJWkUoKS8o c2l6ZW9mKEFSUkFZLlRZUEVbMF0pKSldLlRZUEVbKElOREVYKSAlIChmVkVDU0laRSgpLyhzaXpl b2YoQVJSQVkuVFlQRVswXSkpKV0sCisgICAgKCkKKykKKworREVGX01BQ1JPKGZWTkVXQ0FOQ0VM LAorCWRvIHsgVEhSRUFEMlNUUlVDVC0+VlJlZ3Nfc2VsZWN0ICY9IH4oMTw8KFJFR05VTSkpOyB9 IHdoaWxlICgwKSwKKwkoKQorKQorCitERUZfTUFDUk8oZlRNUFZEQVRBLAorCW1tdmVjX3Z0bXBf ZGF0YSh0aHJlYWQpLAorCShBX0NWSSkKKykKKworREVGX01BQ1JPKGZWU0FURFcsCisgICAgZlZT QVRXKCAoICggKChsb25nIGxvbmcpVSk8PDMyICkgfCBmWlhUTigzMiw2NCxWKSApICksCisgICAg LyogYXR0cmlicyAqLworKQorCitERUZfTUFDUk8oZlZBU0xfU0FUSEksCisgICAgZlZTQVRXKCgo VSk8PDEpIHwgKChWKT4+MzEpKSwKKyAgICAvKiBhdHRyaWJzICovCispCisKK0RFRl9NQUNSTyhm VlVBRERTQVQsCisJZlZTQVRVTiggV0lEVEgsIGZaWFROKFdJRFRILCAyKldJRFRILCBVKSAgKyBm WlhUTihXSURUSCwgMipXSURUSCwgVikpLAorCS8qIGF0dHJpYnMgKi8KKykKKworREVGX01BQ1JP KGZWU0FERFNBVCwKKwlmVlNBVE4oICBXSURUSCwgZlNYVE4oV0lEVEgsIDIqV0lEVEgsIFUpICAr IGZTWFROKFdJRFRILCAyKldJRFRILCBWKSksCisJLyogYXR0cmlicyAqLworKQorCitERUZfTUFD Uk8oZlZVU1VCU0FULAorCWZWU0FUVU4oIFdJRFRILCBmWlhUTihXSURUSCwgMipXSURUSCwgVSkg IC0gZlpYVE4oV0lEVEgsIDIqV0lEVEgsIFYpKSwKKwkvKiBhdHRyaWJzICovCispCisKK0RFRl9N QUNSTyhmVlNTVUJTQVQsCisJZlZTQVROKCAgV0lEVEgsIGZTWFROKFdJRFRILCAyKldJRFRILCBV KSAgLSBmU1hUTihXSURUSCwgMipXSURUSCwgVikpLAorCS8qIGF0dHJpYnMgKi8KKykKKworREVG X01BQ1JPKGZWQVZHVSwKKwkoKGZaWFROKFdJRFRILCAyKldJRFRILCBVKSArIGZaWFROKFdJRFRI LCAyKldJRFRILCBWKSk+PjEpLAorCS8qIGF0dHJpYnMgKi8KKykKKworREVGX01BQ1JPKGZWQVZH VVJORCwKKwkoKGZaWFROKFdJRFRILCAyKldJRFRILCBVKSArIGZaWFROKFdJRFRILCAyKldJRFRI LCBWKSsxKT4+MSksCisJLyogYXR0cmlicyAqLworKQorCitERUZfTUFDUk8oZlZOQVZHVSwKKwko KGZaWFROKFdJRFRILCAyKldJRFRILCBVKSAtIGZaWFROKFdJRFRILCAyKldJRFRILCBWKSk+PjEp LAorCS8qIGF0dHJpYnMgKi8KKykKKworREVGX01BQ1JPKGZWTkFWR1VSTkRTQVQsCisJZlZTQVRV TihXSURUSCwoKGZaWFROKFdJRFRILCAyKldJRFRILCBVKSAtIGZaWFROKFdJRFRILCAyKldJRFRI LCBWKSsxKT4+MSkpLAorCS8qIGF0dHJpYnMgKi8KKykKKworREVGX01BQ1JPKGZWQVZHUywKKwko KGZTWFROKFdJRFRILCAyKldJRFRILCBVKSArIGZTWFROKFdJRFRILCAyKldJRFRILCBWKSk+PjEp LAorCS8qIGF0dHJpYnMgKi8KKykKKworREVGX01BQ1JPKGZWQVZHU1JORCwKKwkoKGZTWFROKFdJ RFRILCAyKldJRFRILCBVKSArIGZTWFROKFdJRFRILCAyKldJRFRILCBWKSsxKT4+MSksCisJLyog YXR0cmlicyAqLworKQorCitERUZfTUFDUk8oZlZOQVZHUywKKwkoKGZTWFROKFdJRFRILCAyKldJ RFRILCBVKSAtIGZTWFROKFdJRFRILCAyKldJRFRILCBWKSk+PjEpLAorCS8qIGF0dHJpYnMgKi8K KykKKworREVGX01BQ1JPKGZWTkFWR1NSTkQsCisJKChmU1hUTihXSURUSCwgMipXSURUSCwgVSkg LSBmU1hUTihXSURUSCwgMipXSURUSCwgVikrMSk+PjEpLAorCS8qIGF0dHJpYnMgKi8KKykKKwor REVGX01BQ1JPKGZWTkFWR1NSTkRTQVQsCisJZlZTQVROKFdJRFRILCgoZlNYVE4oV0lEVEgsIDIq V0lEVEgsIFUpIC0gZlNYVE4oV0lEVEgsIDIqV0lEVEgsIFYpKzEpPj4xKSksCisJLyogYXR0cmli cyAqLworKQorCisKK0RFRl9NQUNSTyhmVk5PUk9VTkQsCisJVkFMLAorCS8qIE5PVEhJTkcgKi8K KykKK0RFRl9NQUNSTyhmVk5PU0FULAorCVZBTCwKKwkvKiBOT1RISU5HICovCispCisKK0RFRl9N QUNSTyhmVlJPVU5ELAorCSgoVkFMKSArICgoKFNIQU1UKT4wKT8oMUxMPDwoKFNIQU1UKS0xKSk6 MCkpLAorCS8qIE5PVEhJTkcgKi8KKykKKworREVGX01BQ1JPKGZDQVJSWV9GUk9NX0FERDMyLAor CSgoKGZaWFROKDMyLDY0LEEpK2ZaWFROKDMyLDY0LEIpK0MpID4+IDMyKSAmIDEpLAorCS8qIE5P VEhJTkcgKi8KKykKKworREVGX01BQ1JPKGZVQVJDSF9OT1RFX1BVTVBfNFgsCisJLAorCSgpCisp CisKK0RFRl9NQUNSTyhmVUFSQ0hfTk9URV9QVU1QXzJYLAorCSwKKwkoKQorKQotLSAKMi43LjQK Cg==