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=-16.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,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 570FCC433DB for ; Fri, 8 Jan 2021 04:49:15 +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 BB2FA22BE8 for ; Fri, 8 Jan 2021 04:49:14 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BB2FA22BE8 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]:33320 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kxji5-00080J-P2 for qemu-devel@archiver.kernel.org; Thu, 07 Jan 2021 23:49:13 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:52274) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kxjPD-0007Qg-3j for qemu-devel@nongnu.org; Thu, 07 Jan 2021 23:29:44 -0500 Received: from alexa-out-sd-01.qualcomm.com ([199.106.114.38]:25178) by eggs.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kxjP5-00058F-BW for qemu-devel@nongnu.org; Thu, 07 Jan 2021 23:29:42 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1610080175; x=1641616175; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=3la8bAn7TIiuMhnv+gVE3RtUtu4VDnjF2nHXzBi9b5Q=; b=Crv7NluiQKmu6YKpYD5x29V9lgw6kTJbDv+cOvqdq6yfJJlKKXUqvI4V CMBH8+5bcnWb9POs7IfSLzp0WcNCCp1/1+S41l2im4H0/iYrZDmWfm964 7mnRdRRgE4aJlLDKJ6nege2B0Ev4rM0nlPv1hUQ/2e9o8EpauIqi6Rhck I=; Received: from unknown (HELO ironmsg01-sd.qualcomm.com) ([10.53.140.141]) by alexa-out-sd-01.qualcomm.com with ESMTP; 07 Jan 2021 20:29:13 -0800 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; 07 Jan 2021 20:29:13 -0800 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 2C8F4DDE; Thu, 7 Jan 2021 22:29:13 -0600 (CST) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [PATCH v6 15/35] Hexagon (target/hexagon/arch.[ch]) utility functions Date: Thu, 7 Jan 2021 22:28:46 -0600 Message-Id: <1610080146-14968-16-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1610080146-14968-1-git-send-email-tsimpson@quicinc.com> References: <1610080146-14968-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.38; envelope-from=tsimpson@qualcomm.com; helo=alexa-out-sd-01.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: ale@rev.ng, bcain@quicinc.com, richard.henderson@linaro.org, laurent@vivier.eu, tsimpson@quicinc.com, philmd@redhat.com Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" U2lnbmVkLW9mZi1ieTogVGF5bG9yIFNpbXBzb24gPHRzaW1wc29uQHF1aWNpbmMuY29tPgotLS0K IHRhcmdldC9oZXhhZ29uL2FyY2guaCB8ICAzNSArKysrKysKIHRhcmdldC9oZXhhZ29uL2FyY2gu YyB8IDI5NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogMiBmaWxlcyBjaGFuZ2VkLCAzMjkgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHRhcmdldC9oZXhhZ29uL2FyY2guaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHRhcmdldC9oZXhhZ29u L2FyY2guYwoKZGlmZiAtLWdpdCBhL3RhcmdldC9oZXhhZ29uL2FyY2guaCBiL3RhcmdldC9oZXhh Z29uL2FyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjE0NDgwCi0t LSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24vYXJjaC5oCkBAIC0wLDAgKzEsMzUgQEAK Ky8qCisgKiAgQ29weXJpZ2h0KGMpIDIwMTktMjAyMCBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRl ciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor ICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBIRVhBR09OX0FSQ0hfSAorI2RlZmluZSBI RVhBR09OX0FSQ0hfSAorCisjaW5jbHVkZSAicWVtdS9vc2RlcC5oIgorI2luY2x1ZGUgInFlbXUv aW50MTI4LmgiCisKK2V4dGVybiB1aW50NjRfdCBpbnRlcmxlYXZlKHVpbnQzMl90IG9kZCwgdWlu dDMyX3QgZXZlbik7CitleHRlcm4gdWludDY0X3QgZGVpbnRlcmxlYXZlKHVpbnQ2NF90IHNyYyk7 CitleHRlcm4gdWludDMyX3QgY2FycnlfZnJvbV9hZGQ2NCh1aW50NjRfdCBhLCB1aW50NjRfdCBi LCB1aW50MzJfdCBjKTsKK2V4dGVybiBpbnQzMl90IGNvbnZfcm91bmQoaW50MzJfdCBhLCBpbnQg bik7CitleHRlcm4gdm9pZCBhcmNoX2Zwb3Bfc3RhcnQoQ1BVSGV4YWdvblN0YXRlICplbnYpOwor ZXh0ZXJuIHZvaWQgYXJjaF9mcG9wX2VuZChDUFVIZXhhZ29uU3RhdGUgKmVudik7CitleHRlcm4g aW50IGFyY2hfc2ZfcmVjaXBfY29tbW9uKGZsb2F0MzIgKlJzLCBmbG9hdDMyICpSdCwgZmxvYXQz MiAqUmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqYWRqdXN0LCBmbG9h dF9zdGF0dXMgKmZwX3N0YXR1cyk7CitleHRlcm4gaW50IGFyY2hfc2ZfaW52c3FydF9jb21tb24o ZmxvYXQzMiAqUnMsIGZsb2F0MzIgKlJkLCBpbnQgKmFkanVzdCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmbG9hdF9zdGF0dXMgKmZwX3N0YXR1cyk7CisKKyNlbmRpZgpkaWZm IC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vYXJjaC5jIGIvdGFyZ2V0L2hleGFnb24vYXJjaC5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NmY2YTcKLS0tIC9kZXYvbnVsbAor KysgYi90YXJnZXQvaGV4YWdvbi9hcmNoLmMKQEAgLTAsMCArMSwyOTQgQEAKKy8qCisgKiAgQ29w eXJpZ2h0KGMpIDIwMTktMjAyMCBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBBbGwg UmlnaHRzIFJlc2VydmVkLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisg KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUg TGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK KyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uCisgKi8KKworI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKKyNpbmNsdWRlICJmcHUvc29mdGZs b2F0LmgiCisjaW5jbHVkZSAiY3B1LmgiCisjaW5jbHVkZSAiZm1hX2VtdS5oIgorI2luY2x1ZGUg ImFyY2guaCIKKyNpbmNsdWRlICJtYWNyb3MuaCIKKworI2RlZmluZSBTRl9CSUFTICAgICAgICAx MjcKKyNkZWZpbmUgU0ZfTUFYRVhQICAgICAgMjU0CisjZGVmaW5lIFNGX01BTlRCSVRTICAgIDIz CisjZGVmaW5lIGZsb2F0MzJfbmFuICAgIG1ha2VfZmxvYXQzMigweGZmZmZmZmZmKQorCisjZGVm aW5lIEJJVFNfTUFTS184IDB4NTU1NTU1NTU1NTU1NTU1NVVMTAorI2RlZmluZSBQQUlSX01BU0tf OCAweDMzMzMzMzMzMzMzMzMzMzNVTEwKKyNkZWZpbmUgTllCTF9NQVNLXzggMHgwZjBmMGYwZjBm MGYwZjBmVUxMCisjZGVmaW5lIEJZVEVfTUFTS184IDB4MDBmZjAwZmYwMGZmMDBmZlVMTAorI2Rl ZmluZSBIQUxGX01BU0tfOCAweDAwMDBmZmZmMDAwMGZmZmZVTEwKKyNkZWZpbmUgV09SRF9NQVNL XzggMHgwMDAwMDAwMGZmZmZmZmZmVUxMCisKK3VpbnQ2NF90IGludGVybGVhdmUodWludDMyX3Qg b2RkLCB1aW50MzJfdCBldmVuKQoreworICAgIC8qIENvbnZlcnQgdG8gbG9uZyBsb25nICovCisg ICAgdWludDY0X3QgbXlvZGQgPSBvZGQ7CisgICAgdWludDY0X3QgbXlldmVuID0gZXZlbjsKKyAg ICAvKiBGaXJzdCwgc3ByZWFkIGJpdHMgb3V0ICovCisgICAgbXlvZGQgPSAobXlvZGQgfCAobXlv ZGQgPDwgMTYpKSAmIEhBTEZfTUFTS184OworICAgIG15ZXZlbiA9IChteWV2ZW4gfCAobXlldmVu IDw8IDE2KSkgJiBIQUxGX01BU0tfODsKKyAgICBteW9kZCA9IChteW9kZCB8IChteW9kZCA8PCA4 KSkgJiBCWVRFX01BU0tfODsKKyAgICBteWV2ZW4gPSAobXlldmVuIHwgKG15ZXZlbiA8PCA4KSkg JiBCWVRFX01BU0tfODsKKyAgICBteW9kZCA9IChteW9kZCB8IChteW9kZCA8PCA0KSkgJiBOWUJM X01BU0tfODsKKyAgICBteWV2ZW4gPSAobXlldmVuIHwgKG15ZXZlbiA8PCA0KSkgJiBOWUJMX01B U0tfODsKKyAgICBteW9kZCA9IChteW9kZCB8IChteW9kZCA8PCAyKSkgJiBQQUlSX01BU0tfODsK KyAgICBteWV2ZW4gPSAobXlldmVuIHwgKG15ZXZlbiA8PCAyKSkgJiBQQUlSX01BU0tfODsKKyAg ICBteW9kZCA9IChteW9kZCB8IChteW9kZCA8PCAxKSkgJiBCSVRTX01BU0tfODsKKyAgICBteWV2 ZW4gPSAobXlldmVuIHwgKG15ZXZlbiA8PCAxKSkgJiBCSVRTX01BU0tfODsKKyAgICAvKiBOb3cg T1IgdG9nZXRoZXIgKi8KKyAgICByZXR1cm4gbXlldmVuIHwgKG15b2RkIDw8IDEpOworfQorCit1 aW50NjRfdCBkZWludGVybGVhdmUodWludDY0X3Qgc3JjKQoreworICAgIC8qIEdldCBvZGQgYW5k IGV2ZW4gYml0cyAqLworICAgIHVpbnQ2NF90IG15b2RkID0gKChzcmMgPj4gMSkgJiBCSVRTX01B U0tfOCk7CisgICAgdWludDY0X3QgbXlldmVuID0gKHNyYyAmIEJJVFNfTUFTS184KTsKKworICAg IC8qIFVuc3ByZWFkIGJpdHMgKi8KKyAgICBteWV2ZW4gPSAobXlldmVuIHwgKG15ZXZlbiA+PiAx KSkgJiBQQUlSX01BU0tfODsKKyAgICBteW9kZCA9IChteW9kZCB8IChteW9kZCA+PiAxKSkgJiBQ QUlSX01BU0tfODsKKyAgICBteWV2ZW4gPSAobXlldmVuIHwgKG15ZXZlbiA+PiAyKSkgJiBOWUJM X01BU0tfODsKKyAgICBteW9kZCA9IChteW9kZCB8IChteW9kZCA+PiAyKSkgJiBOWUJMX01BU0tf ODsKKyAgICBteWV2ZW4gPSAobXlldmVuIHwgKG15ZXZlbiA+PiA0KSkgJiBCWVRFX01BU0tfODsK KyAgICBteW9kZCA9IChteW9kZCB8IChteW9kZCA+PiA0KSkgJiBCWVRFX01BU0tfODsKKyAgICBt eWV2ZW4gPSAobXlldmVuIHwgKG15ZXZlbiA+PiA4KSkgJiBIQUxGX01BU0tfODsKKyAgICBteW9k ZCA9IChteW9kZCB8IChteW9kZCA+PiA4KSkgJiBIQUxGX01BU0tfODsKKyAgICBteWV2ZW4gPSAo bXlldmVuIHwgKG15ZXZlbiA+PiAxNikpICYgV09SRF9NQVNLXzg7CisgICAgbXlvZGQgPSAobXlv ZGQgfCAobXlvZGQgPj4gMTYpKSAmIFdPUkRfTUFTS184OworCisgICAgLyogUmV0dXJuIG9kZCBi aXRzIGluIHVwcGVyIGhhbGYgKi8KKyAgICByZXR1cm4gbXlldmVuIHwgKG15b2RkIDw8IDMyKTsK K30KKwordWludDMyX3QgY2FycnlfZnJvbV9hZGQ2NCh1aW50NjRfdCBhLCB1aW50NjRfdCBiLCB1 aW50MzJfdCBjKQoreworICAgIHVpbnQ2NF90IHRtcGEsIHRtcGIsIHRtcGM7CisgICAgdG1wYSA9 IGZHRVRVV09SRCgwLCBhKTsKKyAgICB0bXBiID0gZkdFVFVXT1JEKDAsIGIpOworICAgIHRtcGMg PSB0bXBhICsgdG1wYiArIGM7CisgICAgdG1wYSA9IGZHRVRVV09SRCgxLCBhKTsKKyAgICB0bXBi ID0gZkdFVFVXT1JEKDEsIGIpOworICAgIHRtcGMgPSB0bXBhICsgdG1wYiArIGZHRVRVV09SRCgx LCB0bXBjKTsKKyAgICB0bXBjID0gZkdFVFVXT1JEKDEsIHRtcGMpOworICAgIHJldHVybiB0bXBj OworfQorCitpbnQzMl90IGNvbnZfcm91bmQoaW50MzJfdCBhLCBpbnQgbikKK3sKKyAgICBpbnQ2 NF90IHZhbDsKKworICAgIGlmIChuID09IDApIHsKKyAgICAgICAgdmFsID0gYTsKKyAgICB9IGVs c2UgaWYgKChhICYgKCgxIDw8IChuIC0gMSkpIC0gMSkpID09IDApIHsgICAgLyogTi0xLi4wIGFs bCB6ZXJvPyAqLworICAgICAgICAvKiBBZGQgTFNCIGZyb20gaW50IHBhcnQgKi8KKyAgICAgICAg dmFsID0gKChmU0UzMl82NChhKSkgKyAoaW50NjRfdCkgKCgodWludDMyX3QpICgoMSA8PCBuKSAm IGEpKSA+PiAxKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFsID0gKChmU0UzMl82NChhKSkg KyAoMSA8PCAobiAtIDEpKSk7CisgICAgfQorCisgICAgdmFsID0gdmFsID4+IG47CisgICAgcmV0 dXJuIChpbnQzMl90KXZhbDsKK30KKworLyogRmxvYXRpbmcgUG9pbnQgU3R1ZmYgKi8KKworc3Rh dGljIGNvbnN0IGludCBzb2Z0ZmxvYXRfcm91bmRpbmdtb2Rlc1tdID0geworICAgIGZsb2F0X3Jv dW5kX25lYXJlc3RfZXZlbiwKKyAgICBmbG9hdF9yb3VuZF90b196ZXJvLAorICAgIGZsb2F0X3Jv dW5kX2Rvd24sCisgICAgZmxvYXRfcm91bmRfdXAsCit9OworCit2b2lkIGFyY2hfZnBvcF9zdGFy dChDUFVIZXhhZ29uU3RhdGUgKmVudikKK3sKKyAgICBzZXRfZmxvYXRfZXhjZXB0aW9uX2ZsYWdz KDAsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgc2V0X2Zsb2F0X3JvdW5kaW5nX21vZGUoCisgICAg ICAgIHNvZnRmbG9hdF9yb3VuZGluZ21vZGVzW2ZSRUFEX1JFR19GSUVMRChVU1IsIFVTUl9GUFJO RCldLAorICAgICAgICAmZW52LT5mcF9zdGF0dXMpOworfQorCisjZGVmaW5lIFJBSVNFX0ZQX0VY Q0VQVElPTiBcCisgICAgZG8ge30gd2hpbGUgKDApICAgICAgICAgICAgLyogTm90IG1vZGVsbGVk IGluIHFlbXUgdXNlciBtb2RlICovCisKKyNkZWZpbmUgU09GVEZMT0FUX1RFU1RfRkxBRyhGTEFH LCBNWUYsIE1ZRSkgXAorICAgIGRvIHsgXAorICAgICAgICBpZiAoZmxhZ3MgJiBGTEFHKSB7IFwK KyAgICAgICAgICAgIGlmIChHRVRfVVNSX0ZJRUxEKFVTUl8jI01ZRikgPT0gMCkgeyBcCisgICAg ICAgICAgICAgICAgU0VUX1VTUl9GSUVMRChVU1JfIyNNWUYsIDEpOyBcCisgICAgICAgICAgICAg ICAgaWYgKEdFVF9VU1JfRklFTEQoVVNSXyMjTVlFKSkgeyBcCisgICAgICAgICAgICAgICAgICAg IFJBSVNFX0ZQX0VYQ0VQVElPTjsgXAorICAgICAgICAgICAgICAgIH0gXAorICAgICAgICAgICAg fSBcCisgICAgICAgIH0gXAorICAgIH0gd2hpbGUgKDApCisKK3ZvaWQgYXJjaF9mcG9wX2VuZChD UFVIZXhhZ29uU3RhdGUgKmVudikKK3sKKyAgICBpbnQgZmxhZ3MgPSBnZXRfZmxvYXRfZXhjZXB0 aW9uX2ZsYWdzKCZlbnYtPmZwX3N0YXR1cyk7CisgICAgaWYgKGZsYWdzICE9IDApIHsKKyAgICAg ICAgU09GVEZMT0FUX1RFU1RfRkxBRyhmbG9hdF9mbGFnX2luZXhhY3QsIEZQSU5QRiwgRlBJTlBF KTsKKyAgICAgICAgU09GVEZMT0FUX1RFU1RfRkxBRyhmbG9hdF9mbGFnX2RpdmJ5emVybywgRlBE QlpGLCBGUERCWkUpOworICAgICAgICBTT0ZURkxPQVRfVEVTVF9GTEFHKGZsb2F0X2ZsYWdfaW52 YWxpZCwgRlBJTlZGLCBGUElOVkUpOworICAgICAgICBTT0ZURkxPQVRfVEVTVF9GTEFHKGZsb2F0 X2ZsYWdfb3ZlcmZsb3csIEZQT1ZGRiwgRlBPVkZFKTsKKyAgICAgICAgU09GVEZMT0FUX1RFU1Rf RkxBRyhmbG9hdF9mbGFnX3VuZGVyZmxvdywgRlBVTkZGLCBGUFVORkUpOworICAgIH0KK30KKwor c3RhdGljIGZsb2F0MzIgZmxvYXQzMl9tdWxfcG93MihmbG9hdDMyIGEsIHVpbnQzMl90IHAsIGZs b2F0X3N0YXR1cyAqZnBfc3RhdHVzKQoreworICAgIGZsb2F0MzIgYiA9IG1ha2VfZmxvYXQzMigo U0ZfQklBUyArIHApIDw8IFNGX01BTlRCSVRTKTsKKyAgICByZXR1cm4gZmxvYXQzMl9tdWwoYSwg YiwgZnBfc3RhdHVzKTsKK30KKworaW50IGFyY2hfc2ZfcmVjaXBfY29tbW9uKGZsb2F0MzIgKlJz LCBmbG9hdDMyICpSdCwgZmxvYXQzMiAqUmQsIGludCAqYWRqdXN0LAorICAgICAgICAgICAgICAg ICAgICAgICAgIGZsb2F0X3N0YXR1cyAqZnBfc3RhdHVzKQoreworICAgIGludCBuX2V4cDsKKyAg ICBpbnQgZF9leHA7CisgICAgaW50IHJldCA9IDA7CisgICAgZmxvYXQzMiBSc1YsIFJ0ViwgUmRW OworICAgIGludCBQZVYgPSAwOworICAgIFJzViA9ICpSczsKKyAgICBSdFYgPSAqUnQ7CisgICAg aWYgKGZsb2F0MzJfaXNfYW55X25hbihSc1YpICYmIGZsb2F0MzJfaXNfYW55X25hbihSdFYpKSB7 CisgICAgICAgIGlmIChleHRyYWN0MzIoUnNWICYgUnRWLCAyMiwgMSkgPT0gMCkgeworICAgICAg ICAgICAgZmxvYXRfcmFpc2UoZmxvYXRfZmxhZ19pbnZhbGlkLCBmcF9zdGF0dXMpOworICAgICAg ICB9CisgICAgICAgIFJkViA9IFJzViA9IFJ0ViA9IGZsb2F0MzJfbmFuOworICAgIH0gZWxzZSBp ZiAoZmxvYXQzMl9pc19hbnlfbmFuKFJzVikpIHsKKyAgICAgICAgaWYgKGV4dHJhY3QzMihSc1Ys IDIyLCAxKSA9PSAwKSB7CisgICAgICAgICAgICBmbG9hdF9yYWlzZShmbG9hdF9mbGFnX2ludmFs aWQsIGZwX3N0YXR1cyk7CisgICAgICAgIH0KKyAgICAgICAgUmRWID0gUnNWID0gUnRWID0gZmxv YXQzMl9uYW47CisgICAgfSBlbHNlIGlmIChmbG9hdDMyX2lzX2FueV9uYW4oUnRWKSkgeworICAg ICAgICAvKiBvciBwdXQgTmFOIGluIG51bS9kZW4gZml4dXA/ICovCisgICAgICAgIGlmIChleHRy YWN0MzIoUnRWLCAyMiwgMSkgPT0gMCkgeworICAgICAgICAgICAgZmxvYXRfcmFpc2UoZmxvYXRf ZmxhZ19pbnZhbGlkLCBmcF9zdGF0dXMpOworICAgICAgICB9CisgICAgICAgIFJkViA9IFJzViA9 IFJ0ViA9IGZsb2F0MzJfbmFuOworICAgIH0gZWxzZSBpZiAoZmxvYXQzMl9pc19pbmZpbml0eShS c1YpICYmIGZsb2F0MzJfaXNfaW5maW5pdHkoUnRWKSkgeworICAgICAgICAvKiBvciBwdXQgSW5m IGluIG51bSBmaXh1cD8gKi8KKyAgICAgICAgUmRWID0gUnNWID0gUnRWID0gZmxvYXQzMl9uYW47 CisgICAgICAgIGZsb2F0X3JhaXNlKGZsb2F0X2ZsYWdfaW52YWxpZCwgZnBfc3RhdHVzKTsKKyAg ICB9IGVsc2UgaWYgKGZsb2F0MzJfaXNfemVybyhSc1YpICYmIGZsb2F0MzJfaXNfemVybyhSdFYp KSB7CisgICAgICAgIC8qIG9yIHB1dCB6ZXJvIGluIG51bSBmaXh1cD8gKi8KKyAgICAgICAgUmRW ID0gUnNWID0gUnRWID0gZmxvYXQzMl9uYW47CisgICAgICAgIGZsb2F0X3JhaXNlKGZsb2F0X2Zs YWdfaW52YWxpZCwgZnBfc3RhdHVzKTsKKyAgICB9IGVsc2UgaWYgKGZsb2F0MzJfaXNfemVybyhS dFYpKSB7CisgICAgICAgIC8qIG9yIHB1dCBJbmYgaW4gbnVtIGZpeHVwPyAqLworICAgICAgICB1 aW50OF90IFJzVl9zaWduID0gZmxvYXQzMl9pc19uZWcoUnNWKTsKKyAgICAgICAgdWludDhfdCBS dFZfc2lnbiA9IGZsb2F0MzJfaXNfbmVnKFJ0Vik7CisgICAgICAgIFJzViA9IGluZmluaXRlX2Zs b2F0MzIoUnNWX3NpZ24gXiBSdFZfc2lnbik7CisgICAgICAgIFJ0ViA9IGZsb2F0MzJfb25lOwor ICAgICAgICBSZFYgPSBmbG9hdDMyX29uZTsKKyAgICAgICAgaWYgKGZsb2F0MzJfaXNfaW5maW5p dHkoUnNWKSkgeworICAgICAgICAgICAgZmxvYXRfcmFpc2UoZmxvYXRfZmxhZ19kaXZieXplcm8s IGZwX3N0YXR1cyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGZsb2F0MzJfaXNfaW5maW5p dHkoUnRWKSkgeworICAgICAgICBSc1YgPSBtYWtlX2Zsb2F0MzIoMHg4MDAwMDAwMCAmIChSc1Yg XiBSdFYpKTsKKyAgICAgICAgUnRWID0gZmxvYXQzMl9vbmU7CisgICAgICAgIFJkViA9IGZsb2F0 MzJfb25lOworICAgIH0gZWxzZSBpZiAoZmxvYXQzMl9pc196ZXJvKFJzVikpIHsKKyAgICAgICAg LyogRG9lcyB0aGlzIGp1c3Qgd29yayBpdHNlbGYgb3V0PyAqLworICAgICAgICAvKiBObywgMC9J bmYgY2F1c2VzIHByb2JsZW1zLiAqLworICAgICAgICBSc1YgPSBtYWtlX2Zsb2F0MzIoMHg4MDAw MDAwMCAmIChSc1YgXiBSdFYpKTsKKyAgICAgICAgUnRWID0gZmxvYXQzMl9vbmU7CisgICAgICAg IFJkViA9IGZsb2F0MzJfb25lOworICAgIH0gZWxzZSBpZiAoZmxvYXQzMl9pc19pbmZpbml0eShS c1YpKSB7CisgICAgICAgIHVpbnQ4X3QgUnNWX3NpZ24gPSBmbG9hdDMyX2lzX25lZyhSc1YpOwor ICAgICAgICB1aW50OF90IFJ0Vl9zaWduID0gZmxvYXQzMl9pc19uZWcoUnRWKTsKKyAgICAgICAg UnNWID0gaW5maW5pdGVfZmxvYXQzMihSc1Zfc2lnbiBeIFJ0Vl9zaWduKTsKKyAgICAgICAgUnRW ID0gZmxvYXQzMl9vbmU7CisgICAgICAgIFJkViA9IGZsb2F0MzJfb25lOworICAgIH0gZWxzZSB7 CisgICAgICAgIFBlViA9IDB4MDA7CisgICAgICAgIC8qIEJhc2ljIGNoZWNrcyBwYXNzZWQgKi8K KyAgICAgICAgbl9leHAgPSBmbG9hdDMyX2dldGV4cChSc1YpOworICAgICAgICBkX2V4cCA9IGZs b2F0MzJfZ2V0ZXhwKFJ0Vik7CisgICAgICAgIGlmICgobl9leHAgLSBkX2V4cCArIFNGX0JJQVMp IDw9IFNGX01BTlRCSVRTKSB7CisgICAgICAgICAgICAvKiBOZWFyIHF1b3RpZW50IHVuZGVyZmxv dyAvIGluZXhhY3QgUSAqLworICAgICAgICAgICAgUGVWID0gMHg4MDsKKyAgICAgICAgICAgIFJ0 ViA9IGZsb2F0MzJfbXVsX3BvdzIoUnRWLCAtNjQsIGZwX3N0YXR1cyk7CisgICAgICAgICAgICBS c1YgPSBmbG9hdDMyX211bF9wb3cyKFJzViwgNjQsIGZwX3N0YXR1cyk7CisgICAgICAgIH0gZWxz ZSBpZiAoKG5fZXhwIC0gZF9leHAgKyBTRl9CSUFTKSA+IChTRl9NQVhFWFAgLSAyNCkpIHsKKyAg ICAgICAgICAgIC8qIE5lYXIgcXVvdGllbnQgb3ZlcmZsb3cgKi8KKyAgICAgICAgICAgIFBlViA9 IDB4NDA7CisgICAgICAgICAgICBSdFYgPSBmbG9hdDMyX211bF9wb3cyKFJ0ViwgMzIsIGZwX3N0 YXR1cyk7CisgICAgICAgICAgICBSc1YgPSBmbG9hdDMyX211bF9wb3cyKFJzViwgLTMyLCBmcF9z dGF0dXMpOworICAgICAgICB9IGVsc2UgaWYgKG5fZXhwIDw9IFNGX01BTlRCSVRTICsgMikgewor ICAgICAgICAgICAgUnRWID0gZmxvYXQzMl9tdWxfcG93MihSdFYsIDY0LCBmcF9zdGF0dXMpOwor ICAgICAgICAgICAgUnNWID0gZmxvYXQzMl9tdWxfcG93MihSc1YsIDY0LCBmcF9zdGF0dXMpOwor ICAgICAgICB9IGVsc2UgaWYgKGRfZXhwIDw9IDEpIHsKKyAgICAgICAgICAgIFJ0ViA9IGZsb2F0 MzJfbXVsX3BvdzIoUnRWLCAzMiwgZnBfc3RhdHVzKTsKKyAgICAgICAgICAgIFJzViA9IGZsb2F0 MzJfbXVsX3BvdzIoUnNWLCAzMiwgZnBfc3RhdHVzKTsKKyAgICAgICAgfSBlbHNlIGlmIChkX2V4 cCA+IDI1MikgeworICAgICAgICAgICAgUnRWID0gZmxvYXQzMl9tdWxfcG93MihSdFYsIC0zMiwg ZnBfc3RhdHVzKTsKKyAgICAgICAgICAgIFJzViA9IGZsb2F0MzJfbXVsX3BvdzIoUnNWLCAtMzIs IGZwX3N0YXR1cyk7CisgICAgICAgIH0KKyAgICAgICAgUmRWID0gMDsKKyAgICAgICAgcmV0ID0g MTsKKyAgICB9CisgICAgKlJzID0gUnNWOworICAgICpSdCA9IFJ0VjsKKyAgICAqUmQgPSBSZFY7 CisgICAgKmFkanVzdCA9IFBlVjsKKyAgICByZXR1cm4gcmV0OworfQorCitpbnQgYXJjaF9zZl9p bnZzcXJ0X2NvbW1vbihmbG9hdDMyICpScywgZmxvYXQzMiAqUmQsIGludCAqYWRqdXN0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRfc3RhdHVzICpmcF9zdGF0dXMpCit7CisgICAg ZmxvYXQzMiBSc1YsIFJkVjsKKyAgICBpbnQgUGVWID0gMDsKKyAgICBpbnQgcl9leHA7CisgICAg aW50IHJldCA9IDA7CisgICAgUnNWID0gKlJzOworICAgIGlmIChmbG9hdDMyX2lzX2luZmluaXR5 KFJzVikpIHsKKyAgICAgICAgaWYgKGV4dHJhY3QzMihSc1YsIDIyLCAxKSA9PSAwKSB7CisgICAg ICAgICAgICBmbG9hdF9yYWlzZShmbG9hdF9mbGFnX2ludmFsaWQsIGZwX3N0YXR1cyk7CisgICAg ICAgIH0KKyAgICAgICAgUmRWID0gUnNWID0gZmxvYXQzMl9uYW47CisgICAgfSBlbHNlIGlmIChm bG9hdDMyX2x0KFJzViwgZmxvYXQzMl96ZXJvLCBmcF9zdGF0dXMpKSB7CisgICAgICAgIC8qIE5l Z2F0aXZlIG5vbnplcm8gdmFsdWVzIGFyZSBOYU4gKi8KKyAgICAgICAgZmxvYXRfcmFpc2UoZmxv YXRfZmxhZ19pbnZhbGlkLCBmcF9zdGF0dXMpOworICAgICAgICBSc1YgPSBmbG9hdDMyX25hbjsK KyAgICAgICAgUmRWID0gZmxvYXQzMl9uYW47CisgICAgfSBlbHNlIGlmIChmbG9hdDMyX2lzX2lu ZmluaXR5KFJzVikpIHsKKyAgICAgICAgLyogb3IgcHV0IEluZiBpbiBudW0gZml4dXA/ICovCisg ICAgICAgIFJzViA9IGluZmluaXRlX2Zsb2F0MzIoMSk7CisgICAgICAgIFJkViA9IGluZmluaXRl X2Zsb2F0MzIoMSk7CisgICAgfSBlbHNlIGlmIChmbG9hdDMyX2lzX3plcm8oUnNWKSkgeworICAg ICAgICAvKiBvciBwdXQgemVybyBpbiBudW0gZml4dXA/ICovCisgICAgICAgIFJkViA9IGZsb2F0 MzJfb25lOworICAgIH0gZWxzZSB7CisgICAgICAgIFBlViA9IDB4MDA7CisgICAgICAgIC8qIEJh c2ljIGNoZWNrcyBwYXNzZWQgKi8KKyAgICAgICAgcl9leHAgPSBmbG9hdDMyX2dldGV4cChSc1Yp OworICAgICAgICBpZiAocl9leHAgPD0gMjQpIHsKKyAgICAgICAgICAgIFJzViA9IGZsb2F0MzJf bXVsX3BvdzIoUnNWLCA2NCwgZnBfc3RhdHVzKTsKKyAgICAgICAgICAgIFBlViA9IDB4ZTA7Cisg ICAgICAgIH0KKyAgICAgICAgUmRWID0gMDsKKyAgICAgICAgcmV0ID0gMTsKKyAgICB9CisgICAg KlJzID0gUnNWOworICAgICpSZCA9IFJkVjsKKyAgICAqYWRqdXN0ID0gUGVWOworICAgIHJldHVy biByZXQ7Cit9Ci0tIAoyLjcuNAoK