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 1EC14C433DB for ; Mon, 8 Feb 2021 05:49:54 +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 8032164E27 for ; Mon, 8 Feb 2021 05:49:53 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8032164E27 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]:42194 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l8zQm-0002Hj-GV for qemu-devel@archiver.kernel.org; Mon, 08 Feb 2021 00:49:52 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:55782) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l8zNi-0007Xi-Gr for qemu-devel@nongnu.org; Mon, 08 Feb 2021 00:46:45 -0500 Received: from alexa-out-sd-01.qualcomm.com ([199.106.114.38]:14431) by eggs.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1l8zNZ-0006S5-O9 for qemu-devel@nongnu.org; Mon, 08 Feb 2021 00:46:42 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1612763193; x=1644299193; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=0+ww8LC5i3roeMJ0e67tdVmILgxJSOHYsmxqkTLjfcQ=; b=pUcCJkR3xZih5tZzlI2FihzSIf3Qe8PRLlRnWLS2HTFjg3rtsrF3XxNL n/HlZNrF3Eu/IGmgWY/JQS0Kab+glc9+HKWkbLhmjEBxjHMC+zvzDFDkZ zxjJwxbhCfNyJvNZ/XpVUgYeukiTMe8OGNik3p0MpMJe+RVOLktrRYsdb U=; Received: from unknown (HELO ironmsg03-sd.qualcomm.com) ([10.53.140.143]) by alexa-out-sd-01.qualcomm.com with ESMTP; 07 Feb 2021 21:46:30 -0800 X-QCInternal: smtphost Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg03-sd.qualcomm.com with ESMTP; 07 Feb 2021 21:46:29 -0800 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id CA9D829BD; Sun, 7 Feb 2021 23:46:28 -0600 (CST) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [PATCH v8 04/35] Hexagon (target/hexagon) scalar core definition Date: Sun, 7 Feb 2021 23:45:54 -0600 Message-Id: <1612763186-18161-5-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1612763186-18161-1-git-send-email-tsimpson@quicinc.com> References: <1612763186-18161-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, philmd@redhat.com, richard.henderson@linaro.org, laurent@vivier.eu, tsimpson@quicinc.com, alex.bennee@linaro.org Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" QWRkIHRhcmdldCBzdGF0ZSBoZWFkZXIsIHRhcmdldCBkZWZpbml0aW9ucyBhbmQgaW5pdGlhbGl6 YXRpb24gcm91dGluZXMKClNpZ25lZC1vZmYtYnk6IFRheWxvciBTaW1wc29uIDx0c2ltcHNvbkBx dWljaW5jLmNvbT4KLS0tCiB0YXJnZXQvaGV4YWdvbi9jcHUtcGFyYW0uaCB8ICAyOSArKysrKwog dGFyZ2V0L2hleGFnb24vY3B1LmggICAgICAgfCAxNTkgKysrKysrKysrKysrKysrKysrKysrKysK IHRhcmdldC9oZXhhZ29uL2NwdV9iaXRzLmggIHwgIDU4ICsrKysrKysrKwogdGFyZ2V0L2hleGFn b24vaW50ZXJuYWwuaCAgfCAgMzUgKysrKysKIHRhcmdldC9oZXhhZ29uL2NwdS5jICAgICAgIHwg MzE4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogNSBmaWxl cyBjaGFuZ2VkLCA1OTkgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRhcmdldC9o ZXhhZ29uL2NwdS1wYXJhbS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGFyZ2V0L2hleGFnb24vY3B1 LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0YXJnZXQvaGV4YWdvbi9jcHVfYml0cy5oCiBjcmVhdGUg bW9kZSAxMDA2NDQgdGFyZ2V0L2hleGFnb24vaW50ZXJuYWwuaAogY3JlYXRlIG1vZGUgMTAwNjQ0 IHRhcmdldC9oZXhhZ29uL2NwdS5jCgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vY3B1LXBh cmFtLmggYi90YXJnZXQvaGV4YWdvbi9jcHUtcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5lOGVkNTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24v Y3B1LXBhcmFtLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqICBDb3B5cmlnaHQoYykgMjAxOS0y MDIxIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICog IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07 IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZu ZGVmIEhFWEFHT05fQ1BVX1BBUkFNX0gKKyNkZWZpbmUgSEVYQUdPTl9DUFVfUEFSQU1fSAorCisj ZGVmaW5lIFRBUkdFVF9QQUdFX0JJVFMgMTYgICAgIC8qIDY0SyBwYWdlcyAqLworI2RlZmluZSBU QVJHRVRfTE9OR19CSVRTIDMyCisKKyNkZWZpbmUgVEFSR0VUX1BIWVNfQUREUl9TUEFDRV9CSVRT IDM2CisjZGVmaW5lIFRBUkdFVF9WSVJUX0FERFJfU1BBQ0VfQklUUyAzMgorCisjZGVmaW5lIE5C X01NVV9NT0RFUyAxCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vY3B1Lmgg Yi90YXJnZXQvaGV4YWdvbi9jcHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li5lMDRlYWM1Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24vY3B1LmgKQEAgLTAs MCArMSwxNTkgQEAKKy8qCisgKiAgQ29weXJpZ2h0KGMpIDIwMTktMjAyMSBRdWFsY29tbSBJbm5v dmF0aW9uIENlbnRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0 cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBIRVhBR09OX0NQVV9I CisjZGVmaW5lIEhFWEFHT05fQ1BVX0gKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBuZWVkZWQg Ynkgc29tZSBvZiB0aGUgaGVhZGVyIGZpbGVzICovCit0eXBlZGVmIHN0cnVjdCBDUFVIZXhhZ29u U3RhdGUgQ1BVSGV4YWdvblN0YXRlOworCisjaW5jbHVkZSAiZnB1L3NvZnRmbG9hdC10eXBlcy5o IgorCisjaW5jbHVkZSAicWVtdS1jb21tb24uaCIKKyNpbmNsdWRlICJleGVjL2NwdS1kZWZzLmgi CisjaW5jbHVkZSAiaGV4X3JlZ3MuaCIKKworI2RlZmluZSBOVU1fUFJFR1MgNAorI2RlZmluZSBU T1RBTF9QRVJfVEhSRUFEX1JFR1MgNjQKKworI2RlZmluZSBTTE9UU19NQVggNAorI2RlZmluZSBT VE9SRVNfTUFYIDIKKyNkZWZpbmUgUkVHX1dSSVRFU19NQVggMzIKKyNkZWZpbmUgUFJFRF9XUklU RVNfTUFYIDUgICAgICAgICAgICAgICAgICAgLyogNCBpbnNucyArIGVuZGxvb3AgKi8KKworI2Rl ZmluZSBUWVBFX0hFWEFHT05fQ1BVICJoZXhhZ29uLWNwdSIKKworI2RlZmluZSBIRVhBR09OX0NQ VV9UWVBFX1NVRkZJWCAiLSIgVFlQRV9IRVhBR09OX0NQVQorI2RlZmluZSBIRVhBR09OX0NQVV9U WVBFX05BTUUobmFtZSkgKG5hbWUgSEVYQUdPTl9DUFVfVFlQRV9TVUZGSVgpCisjZGVmaW5lIENQ VV9SRVNPTFZJTkdfVFlQRSBUWVBFX0hFWEFHT05fQ1BVCisKKyNkZWZpbmUgVFlQRV9IRVhBR09O X0NQVV9WNjcgSEVYQUdPTl9DUFVfVFlQRV9OQU1FKCJ2NjciKQorCisjZGVmaW5lIE1NVV9VU0VS X0lEWCAwCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB0YXJnZXRfdWxvbmcgdmE7CisgICAgdWlu dDhfdCB3aWR0aDsKKyAgICB1aW50MzJfdCBkYXRhMzI7CisgICAgdWludDY0X3QgZGF0YTY0Owor fSBNZW1Mb2c7CisKKyNkZWZpbmUgRVhFQ19TVEFUVVNfT0sgICAgICAgICAgMHgwMDAwCisjZGVm aW5lIEVYRUNfU1RBVFVTX1NUT1AgICAgICAgIDB4MDAwMgorI2RlZmluZSBFWEVDX1NUQVRVU19S RVBMQVkgICAgICAweDAwMTAKKyNkZWZpbmUgRVhFQ19TVEFUVVNfTE9DS0VEICAgICAgMHgwMDIw CisjZGVmaW5lIEVYRUNfU1RBVFVTX0VYQ0VQVElPTiAgIDB4MDEwMAorCisKKyNkZWZpbmUgRVhD RVBUSU9OX0RFVEVDVEVEICAgICAgKGVudi0+c3RhdHVzICYgRVhFQ19TVEFUVVNfRVhDRVBUSU9O KQorI2RlZmluZSBSRVBMQVlfREVURUNURUQgICAgICAgICAoZW52LT5zdGF0dXMgJiBFWEVDX1NU QVRVU19SRVBMQVkpCisjZGVmaW5lIENMRUFSX0VYQ0VQVElPTiAgICAgICAgIChlbnYtPnN0YXR1 cyAmPSAofkVYRUNfU1RBVFVTX0VYQ0VQVElPTikpCisjZGVmaW5lIFNFVF9FWENFUFRJT04gICAg ICAgICAgIChlbnYtPnN0YXR1cyB8PSBFWEVDX1NUQVRVU19FWENFUFRJT04pCisKK3N0cnVjdCBD UFVIZXhhZ29uU3RhdGUgeworICAgIHRhcmdldF91bG9uZyBncHJbVE9UQUxfUEVSX1RIUkVBRF9S RUdTXTsKKyAgICB0YXJnZXRfdWxvbmcgcHJlZFtOVU1fUFJFR1NdOworICAgIHRhcmdldF91bG9u ZyBicmFuY2hfdGFrZW47CisgICAgdGFyZ2V0X3Vsb25nIG5leHRfUEM7CisKKyAgICAvKiBGb3Ig Y29tcGFyaW5nIHdpdGggTExEQiBvbiB0YXJnZXQgLSBzZWUgYWRqdXN0X3N0YWNrX3B0cnMgZnVu Y3Rpb24gKi8KKyAgICB0YXJnZXRfdWxvbmcgbGFzdF9wY19kdW1wZWQ7CisgICAgdGFyZ2V0X3Vs b25nIHN0YWNrX3N0YXJ0OworCisgICAgdWludDhfdCBzbG90X2NhbmNlbGxlZDsKKyAgICB0YXJn ZXRfdWxvbmcgbmV3X3ZhbHVlW1RPVEFMX1BFUl9USFJFQURfUkVHU107CisKKyAgICAvKgorICAg ICAqIE9ubHkgdXNlZCB3aGVuIEhFWF9ERUJVRyBpcyBvbiwgYnV0IHVuY29uZGl0aW9uYWxseSBp bmNsdWRlZAorICAgICAqIHRvIHJlZHVjZSByZWNvbXBpbGUgdGltZSB3aGVuIHR1cm5pbmcgSEVY X0RFQlVHIG9uL29mZi4KKyAgICAgKi8KKyAgICB0YXJnZXRfdWxvbmcgdGhpc19QQzsKKyAgICB0 YXJnZXRfdWxvbmcgcmVnX3dyaXR0ZW5bVE9UQUxfUEVSX1RIUkVBRF9SRUdTXTsKKworICAgIHRh cmdldF91bG9uZyBuZXdfcHJlZF92YWx1ZVtOVU1fUFJFR1NdOworICAgIHRhcmdldF91bG9uZyBw cmVkX3dyaXR0ZW47CisKKyAgICBNZW1Mb2cgbWVtX2xvZ19zdG9yZXNbU1RPUkVTX01BWF07Cisg ICAgdGFyZ2V0X3Vsb25nIHBrdF9oYXNfc3RvcmVfczE7CisgICAgdGFyZ2V0X3Vsb25nIGRjemVy b19hZGRyOworCisgICAgZmxvYXRfc3RhdHVzIGZwX3N0YXR1czsKKworICAgIHRhcmdldF91bG9u ZyBsbHNjX2FkZHI7CisgICAgdGFyZ2V0X3Vsb25nIGxsc2NfdmFsOworICAgIHVpbnQ2NF90ICAg ICBsbHNjX3ZhbF9pNjQ7CisKKyAgICB0YXJnZXRfdWxvbmcgaXNfZ2F0aGVyX3N0b3JlX2luc247 CisgICAgdGFyZ2V0X3Vsb25nIGdhdGhlcl9pc3N1ZWQ7Cit9OworCisjZGVmaW5lIEhFWEFHT05f Q1BVX0NMQVNTKGtsYXNzKSBcCisgICAgT0JKRUNUX0NMQVNTX0NIRUNLKEhleGFnb25DUFVDbGFz cywgKGtsYXNzKSwgVFlQRV9IRVhBR09OX0NQVSkKKyNkZWZpbmUgSEVYQUdPTl9DUFUob2JqKSBc CisgICAgT0JKRUNUX0NIRUNLKEhleGFnb25DUFUsIChvYmopLCBUWVBFX0hFWEFHT05fQ1BVKQor I2RlZmluZSBIRVhBR09OX0NQVV9HRVRfQ0xBU1Mob2JqKSBcCisgICAgT0JKRUNUX0dFVF9DTEFT UyhIZXhhZ29uQ1BVQ2xhc3MsIChvYmopLCBUWVBFX0hFWEFHT05fQ1BVKQorCit0eXBlZGVmIHN0 cnVjdCBIZXhhZ29uQ1BVQ2xhc3MgeworICAgIC8qPCBwcml2YXRlID4qLworICAgIENQVUNsYXNz IHBhcmVudF9jbGFzczsKKyAgICAvKjwgcHVibGljID4qLworICAgIERldmljZVJlYWxpemUgcGFy ZW50X3JlYWxpemU7CisgICAgRGV2aWNlUmVzZXQgcGFyZW50X3Jlc2V0OworfSBIZXhhZ29uQ1BV Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IEhleGFnb25DUFUgeworICAgIC8qPCBwcml2YXRlID4q LworICAgIENQVVN0YXRlIHBhcmVudF9vYmo7CisgICAgLyo8IHB1YmxpYyA+Ki8KKyAgICBDUFVO ZWdhdGl2ZU9mZnNldFN0YXRlIG5lZzsKKyAgICBDUFVIZXhhZ29uU3RhdGUgZW52OworCisgICAg Ym9vbCBsbGRiX2NvbXBhdDsKKyAgICB0YXJnZXRfdWxvbmcgbGxkYl9zdGFja19hZGp1c3Q7Cit9 IEhleGFnb25DUFU7CisKK3N0YXRpYyBpbmxpbmUgSGV4YWdvbkNQVSAqaGV4YWdvbl9lbnZfZ2V0 X2NwdShDUFVIZXhhZ29uU3RhdGUgKmVudikKK3sKKyAgICByZXR1cm4gY29udGFpbmVyX29mKGVu diwgSGV4YWdvbkNQVSwgZW52KTsKK30KKworI2luY2x1ZGUgImNwdV9iaXRzLmgiCisKKyNkZWZp bmUgY3B1X3NpZ25hbF9oYW5kbGVyIGNwdV9oZXhhZ29uX3NpZ25hbF9oYW5kbGVyCitpbnQgY3B1 X2hleGFnb25fc2lnbmFsX2hhbmRsZXIoaW50IGhvc3Rfc2lnbnVtLCB2b2lkICpwaW5mbywgdm9p ZCAqcHVjKTsKKworc3RhdGljIGlubGluZSB2b2lkIGNwdV9nZXRfdGJfY3B1X3N0YXRlKENQVUhl eGFnb25TdGF0ZSAqZW52LCB0YXJnZXRfdWxvbmcgKnBjLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRhcmdldF91bG9uZyAqY3NfYmFzZSwgdWludDMyX3QgKmZsYWdz KQoreworICAgICpwYyA9IGVudi0+Z3ByW0hFWF9SRUdfUENdOworICAgICpjc19iYXNlID0gMDsK KyNpZmRlZiBDT05GSUdfVVNFUl9PTkxZCisgICAgKmZsYWdzID0gMDsKKyNlbHNlCisjZXJyb3Ig U3lzdGVtIG1vZGUgbm90IHN1cHBvcnRlZCBvbiBIZXhhZ29uIHlldAorI2VuZGlmCit9CisKK3R5 cGVkZWYgc3RydWN0IENQVUhleGFnb25TdGF0ZSBDUFVBcmNoU3RhdGU7Cit0eXBlZGVmIEhleGFn b25DUFUgQXJjaENQVTsKKwordm9pZCBoZXhhZ29uX3RyYW5zbGF0ZV9pbml0KHZvaWQpOworCisj aW5jbHVkZSAiZXhlYy9jcHUtYWxsLmgiCisKKyNlbmRpZiAvKiBIRVhBR09OX0NQVV9IICovCmRp ZmYgLS1naXQgYS90YXJnZXQvaGV4YWdvbi9jcHVfYml0cy5oIGIvdGFyZ2V0L2hleGFnb24vY3B1 X2JpdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmFmODM0Ci0tLSAv ZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24vY3B1X2JpdHMuaApAQCAtMCwwICsxLDU4IEBA CisvKgorICogIENvcHlyaWdodChjKSAyMDE5LTIwMjEgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50 ZXIsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK KyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgSEVYQUdPTl9DUFVfQklUU19ICisjZGVm aW5lIEhFWEFHT05fQ1BVX0JJVFNfSAorCisjaW5jbHVkZSAicWVtdS9iaXRvcHMuaCIKKworI2Rl ZmluZSBIRVhfRVhDUF9GRVRDSF9OT19VUEFHRSAgMHgwMTIKKyNkZWZpbmUgSEVYX0VYQ1BfSU5W QUxJRF9QQUNLRVQgIDB4MDE1CisjZGVmaW5lIEhFWF9FWENQX0lOVkFMSURfT1BDT0RFICAweDAx NQorI2RlZmluZSBIRVhfRVhDUF9QUklWX05PX1VSRUFEICAgMHgwMjQKKyNkZWZpbmUgSEVYX0VY Q1BfUFJJVl9OT19VV1JJVEUgIDB4MDI1CisKKyNkZWZpbmUgSEVYX0VYQ1BfVFJBUDAgICAgICAg ICAgIDB4MTcyCisKKyNkZWZpbmUgUEFDS0VUX1dPUkRTX01BWCAgICAgICAgIDQKKworc3RhdGlj IGlubGluZSB1aW50MzJfdCBwYXJzZV9iaXRzKHVpbnQzMl90IGVuY29kaW5nKQoreworICAgIC8q IFRoZSBwYXJzZSBiaXRzIGFyZSBbMTU6MTRdICovCisgICAgcmV0dXJuIGV4dHJhY3QzMihlbmNv ZGluZywgMTQsIDIpOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGljbGFzc19iaXRzKHVp bnQzMl90IGVuY29kaW5nKQoreworICAgIC8qIFRoZSBpbnN0cnVjdGlvbiBjbGFzcyBpcyBlbmNv ZGVkIGluIGJpdHMgWzMxOjI4XSAqLworICAgIHVpbnQzMl90IGljbGFzcyA9IGV4dHJhY3QzMihl bmNvZGluZywgMjgsIDQpOworICAgIC8qIElmIHBhcnNlIGJpdHMgYXJlIHplcm8sIHRoaXMgaXMg YSBkdXBsZXggKi8KKyAgICBpZiAocGFyc2VfYml0cyhlbmNvZGluZykgPT0gMCkgeworICAgICAg ICBpY2xhc3MgKz0gMTY7CisgICAgfQorICAgIHJldHVybiBpY2xhc3M7Cit9CisKK3N0YXRpYyBp bmxpbmUgaW50IGlzX3BhY2tldF9lbmQodWludDMyX3QgZW5kb2NpbmcpCit7CisgICAgdWludDMy X3QgYml0cyA9IHBhcnNlX2JpdHMoZW5kb2NpbmcpOworICAgIHJldHVybiAoKGJpdHMgPT0gMHgz KSB8fCAoYml0cyA9PSAweDApKTsKK30KKworaW50IGRpc2Fzc2VtYmxlX2hleGFnb24odWludDMy X3QgKndvcmRzLCBpbnQgbndvcmRzLCBiZmRfdm1hIHBjLCBHU3RyaW5nICpidWYpOworCisjZW5k aWYKZGlmZiAtLWdpdCBhL3RhcmdldC9oZXhhZ29uL2ludGVybmFsLmggYi90YXJnZXQvaGV4YWdv bi9pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4Mzk3OTYK LS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvaGV4YWdvbi9pbnRlcm5hbC5oCkBAIC0wLDAgKzEs MzUgQEAKKy8qCisgKiAgQ29weXJpZ2h0KGMpIDIwMTktMjAyMSBRdWFsY29tbSBJbm5vdmF0aW9u IENlbnRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor ICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBIRVhBR09OX0lOVEVSTkFMX0gK KyNkZWZpbmUgSEVYQUdPTl9JTlRFUk5BTF9ICisKKy8qCisgKiBDaGFuZ2UgSEVYX0RFQlVHIHRv IDEgdG8gdHVybiBvbiBkZWJ1Z2dpbmcgb3V0cHV0CisgKi8KKyNkZWZpbmUgSEVYX0RFQlVHIDAK KyNpZiBIRVhfREVCVUcKKyNkZWZpbmUgSEVYX0RFQlVHX0xPRyguLi4pIHFlbXVfbG9nKF9fVkFf QVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgSEVYX0RFQlVHX0xPRyguLi4pIGRvIHsgfSB3aGlsZSAo MCkKKyNlbmRpZgorCit2b2lkIGhleGFnb25fZGVidWcoQ1BVSGV4YWdvblN0YXRlICplbnYpOwor CitleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGhleGFnb25fcmVnbmFtZXNbVE9UQUxfUEVSX1RI UkVBRF9SRUdTXTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS90YXJnZXQvaGV4YWdvbi9jcHUuYyBi L3RhcmdldC9oZXhhZ29uL2NwdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmIwYjMwNDAKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvaGV4YWdvbi9jcHUuYwpAQCAtMCww ICsxLDMxOCBAQAorLyoKKyAqICBDb3B5cmlnaHQoYykgMjAxOS0yMDIxIFF1YWxjb21tIElubm92 YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSAicWVtdS9vc2RlcC5o IgorI2luY2x1ZGUgInFlbXUvbG9nLmgiCisjaW5jbHVkZSAicWVtdS9xZW11LXByaW50LmgiCisj aW5jbHVkZSAiY3B1LmgiCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJleGVjL2V4 ZWMtYWxsLmgiCisjaW5jbHVkZSAicWFwaS9lcnJvci5oIgorI2luY2x1ZGUgImh3L3FkZXYtcHJv cGVydGllcy5oIgorCitzdGF0aWMgdm9pZCBoZXhhZ29uX3Y2N19jcHVfaW5pdChPYmplY3QgKm9i aikKK3sKK30KKworc3RhdGljIE9iamVjdENsYXNzICpoZXhhZ29uX2NwdV9jbGFzc19ieV9uYW1l KGNvbnN0IGNoYXIgKmNwdV9tb2RlbCkKK3sKKyAgICBPYmplY3RDbGFzcyAqb2M7CisgICAgY2hh ciAqdHlwZW5hbWU7CisgICAgY2hhciAqKmNwdW5hbWU7CisKKyAgICBjcHVuYW1lID0gZ19zdHJz cGxpdChjcHVfbW9kZWwsICIsIiwgMSk7CisgICAgdHlwZW5hbWUgPSBnX3N0cmR1cF9wcmludGYo SEVYQUdPTl9DUFVfVFlQRV9OQU1FKCIlcyIpLCBjcHVuYW1lWzBdKTsKKyAgICBvYyA9IG9iamVj dF9jbGFzc19ieV9uYW1lKHR5cGVuYW1lKTsKKyAgICBnX3N0cmZyZWV2KGNwdW5hbWUpOworICAg IGdfZnJlZSh0eXBlbmFtZSk7CisgICAgaWYgKCFvYyB8fCAhb2JqZWN0X2NsYXNzX2R5bmFtaWNf Y2FzdChvYywgVFlQRV9IRVhBR09OX0NQVSkgfHwKKyAgICAgICAgb2JqZWN0X2NsYXNzX2lzX2Fi c3RyYWN0KG9jKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIG9j OworfQorCitzdGF0aWMgUHJvcGVydHkgaGV4YWdvbl9sbGRiX2NvbXBhdF9wcm9wZXJ0eSA9Cisg ICAgREVGSU5FX1BST1BfQk9PTCgibGxkYi1jb21wYXQiLCBIZXhhZ29uQ1BVLCBsbGRiX2NvbXBh dCwgZmFsc2UpOworc3RhdGljIFByb3BlcnR5IGhleGFnb25fbGxkYl9zdGFja19hZGp1c3RfcHJv cGVydHkgPQorICAgIERFRklORV9QUk9QX1VOU0lHTkVEKCJsbGRiLXN0YWNrLWFkanVzdCIsIEhl eGFnb25DUFUsIGxsZGJfc3RhY2tfYWRqdXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIDAs IHFkZXZfcHJvcF91aW50MzIsIHRhcmdldF91bG9uZyk7CisKK2NvbnN0IGNoYXIgKiBjb25zdCBo ZXhhZ29uX3JlZ25hbWVzW1RPVEFMX1BFUl9USFJFQURfUkVHU10gPSB7CisgICAicjAiLCAicjEi LCAgInIyIiwgICJyMyIsICAicjQiLCAgICJyNSIsICAicjYiLCAgInI3IiwKKyAgICJyOCIsICJy OSIsICAicjEwIiwgInIxMSIsICJyMTIiLCAgInIxMyIsICJyMTQiLCAicjE1IiwKKyAgInIxNiIs ICJyMTciLCAicjE4IiwgInIxOSIsICJyMjAiLCAgInIyMSIsICJyMjIiLCAicjIzIiwKKyAgInIy NCIsICJyMjUiLCAicjI2IiwgInIyNyIsICJyMjgiLCAgInIyOSIsICJyMzAiLCAicjMxIiwKKyAg InNhMCIsICJsYzAiLCAic2ExIiwgImxjMSIsICJwM18wIiwgImM1IiwgICJtMCIsICAibTEiLAor ICAidXNyIiwgInBjIiwgICJ1Z3AiLCAiZ3AiLCAgImNzMCIsICAiY3MxIiwgImMxNCIsICJjMTUi LAorICAiYzE2IiwgImMxNyIsICJjMTgiLCAiYzE5IiwgInBrdF9jbnQiLCAgImluc25fY250Iiwg ImMyMiIsICJjMjMiLAorICAiYzI0IiwgImMyNSIsICJjMjYiLCAiYzI3IiwgImMyOCIsICAiYzI5 IiwgImMzMCIsICJjMzEiLAorfTsKKworLyoKKyAqIE9uZSBvZiB0aGUgbWFpbiBkZWJ1Z2dpbmcg dGVjaG5pcXVlcyBpcyB0byB1c2UgIi1kIGNwdSIgYW5kIGNvbXBhcmUgYWdhaW5zdAorICogTExE QiBvdXRwdXQgd2hlbiBzaW5nbGUgc3RlcHBpbmcuICBIb3dldmVyLCB0aGUgdGFyZ2V0IGFuZCBx ZW11IHB1dCB0aGUKKyAqIHN0YWNrcyBhdCBkaWZmZXJlbnQgbG9jYXRpb25zLiAgVGhpcyBpcyB1 c2VkIHRvIGNvbXBlbnNhdGUgc28gdGhlIGRpZmYgaXMKKyAqIGNsZWFuZXIuCisgKi8KK3N0YXRp YyBpbmxpbmUgdGFyZ2V0X3Vsb25nIGFkanVzdF9zdGFja19wdHJzKENQVUhleGFnb25TdGF0ZSAq ZW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0 X3Vsb25nIGFkZHIpCit7CisgICAgSGV4YWdvbkNQVSAqY3B1ID0gY29udGFpbmVyX29mKGVudiwg SGV4YWdvbkNQVSwgZW52KTsKKyAgICB0YXJnZXRfdWxvbmcgc3RhY2tfYWRqdXN0ID0gY3B1LT5s bGRiX3N0YWNrX2FkanVzdDsKKyAgICB0YXJnZXRfdWxvbmcgc3RhY2tfc3RhcnQgPSBlbnYtPnN0 YWNrX3N0YXJ0OworICAgIHRhcmdldF91bG9uZyBzdGFja19zaXplID0gMHgxMDAwMDsKKworICAg IGlmIChzdGFja19hZGp1c3QgPT0gMCkgeworICAgICAgICByZXR1cm4gYWRkcjsKKyAgICB9CisK KyAgICBpZiAoc3RhY2tfc3RhcnQgKyAweDEwMDAgPj0gYWRkciAmJiBhZGRyID49IChzdGFja19z dGFydCAtIHN0YWNrX3NpemUpKSB7CisgICAgICAgIHJldHVybiBhZGRyIC0gc3RhY2tfYWRqdXN0 OworICAgIH0KKyAgICByZXR1cm4gYWRkcjsKK30KKworLyogSEVYX1JFR19QM18wIChha2EgQzQp IGlzIGFuIGFsaWFzIGZvciB0aGUgcHJlZGljYXRlIHJlZ2lzdGVycyAqLworc3RhdGljIGlubGlu ZSB0YXJnZXRfdWxvbmcgcmVhZF9wM18wKENQVUhleGFnb25TdGF0ZSAqZW52KQoreworICAgIGlu dDMyX3QgY29udHJvbF9yZWcgPSAwOworICAgIGludCBpOworICAgIGZvciAoaSA9IE5VTV9QUkVH UyAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgIGNvbnRyb2xfcmVnIDw8PSA4OworICAgICAg ICBjb250cm9sX3JlZyB8PSBlbnYtPnByZWRbaV0gJiAweGZmOworICAgIH0KKyAgICByZXR1cm4g Y29udHJvbF9yZWc7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3JlZyhGSUxFICpmLCBDUFVIZXhh Z29uU3RhdGUgKmVudiwgaW50IHJlZ251bSkKK3sKKyAgICB0YXJnZXRfdWxvbmcgdmFsdWU7CisK KyAgICBpZiAocmVnbnVtID09IEhFWF9SRUdfUDNfMCkgeworICAgICAgICB2YWx1ZSA9IHJlYWRf cDNfMChlbnYpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZhbHVlID0gcmVnbnVtIDwgMzIgPyBh ZGp1c3Rfc3RhY2tfcHRycyhlbnYsIGVudi0+Z3ByW3JlZ251bV0pCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOiBlbnYtPmdwcltyZWdudW1dOworICAgIH0KKworICAgIHFlbXVfZnByaW50 ZihmLCAiICAlcyA9IDB4IiBUQVJHRVRfRk1UX2x4ICJcbiIsCisgICAgICAgICAgICAgICAgIGhl eGFnb25fcmVnbmFtZXNbcmVnbnVtXSwgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZCBoZXhhZ29u X2R1bXAoQ1BVSGV4YWdvblN0YXRlICplbnYsIEZJTEUgKmYpCit7CisgICAgSGV4YWdvbkNQVSAq Y3B1ID0gY29udGFpbmVyX29mKGVudiwgSGV4YWdvbkNQVSwgZW52KTsKKworICAgIGlmIChjcHUt PmxsZGJfY29tcGF0KSB7CisgICAgICAgIC8qCisgICAgICAgICAqIFdoZW4gY29tcGFyaW5nIHdp dGggTExEQiwgaXQgZG9lc24ndCBzdGVwIHRocm91Z2ggc2luZ2xlLWN5Y2xlCisgICAgICAgICAq IGhhcmR3YXJlIGxvb3BzIHRoZSBzYW1lIHdheS4gIFNvLCB3ZSBqdXN0IHNraXAgdGhlbSBoZXJl CisgICAgICAgICAqLworICAgICAgICBpZiAoZW52LT5ncHJbSEVYX1JFR19QQ10gPT0gZW52LT5s YXN0X3BjX2R1bXBlZCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg IGVudi0+bGFzdF9wY19kdW1wZWQgPSBlbnYtPmdwcltIRVhfUkVHX1BDXTsKKyAgICB9CisKKyAg ICBxZW11X2ZwcmludGYoZiwgIkdlbmVyYWwgUHVycG9zZSBSZWdpc3RlcnMgPSB7XG4iKTsKKyAg ICBmb3IgKGludCBpID0gMDsgaSA8IDMyOyBpKyspIHsKKyAgICAgICAgcHJpbnRfcmVnKGYsIGVu diwgaSk7CisgICAgfQorICAgIHByaW50X3JlZyhmLCBlbnYsIEhFWF9SRUdfU0EwKTsKKyAgICBw cmludF9yZWcoZiwgZW52LCBIRVhfUkVHX0xDMCk7CisgICAgcHJpbnRfcmVnKGYsIGVudiwgSEVY X1JFR19TQTEpOworICAgIHByaW50X3JlZyhmLCBlbnYsIEhFWF9SRUdfTEMxKTsKKyAgICBwcmlu dF9yZWcoZiwgZW52LCBIRVhfUkVHX00wKTsKKyAgICBwcmludF9yZWcoZiwgZW52LCBIRVhfUkVH X00xKTsKKyAgICBwcmludF9yZWcoZiwgZW52LCBIRVhfUkVHX1VTUik7CisgICAgcHJpbnRfcmVn KGYsIGVudiwgSEVYX1JFR19QM18wKTsKKyAgICBwcmludF9yZWcoZiwgZW52LCBIRVhfUkVHX0dQ KTsKKyAgICBwcmludF9yZWcoZiwgZW52LCBIRVhfUkVHX1VHUCk7CisgICAgcHJpbnRfcmVnKGYs IGVudiwgSEVYX1JFR19QQyk7CisjaWZkZWYgQ09ORklHX1VTRVJfT05MWQorICAgIC8qCisgICAg ICogTm90IG1vZGVsbGVkIGluIHVzZXIgbW9kZSwgcHJpbnQganVuayB0byBtaW5pbWl6ZSB0aGUg ZGlmZidzCisgICAgICogd2l0aCBMTERCIG91dHB1dAorICAgICAqLworICAgIHFlbXVfZnByaW50 ZihmLCAiICBjYXVzZSA9IDB4MDAwMDAwZGJcbiIpOworICAgIHFlbXVfZnByaW50ZihmLCAiICBi YWR2YSA9IDB4MDAwMDAwMDBcbiIpOworICAgIHFlbXVfZnByaW50ZihmLCAiICBjczAgPSAweDAw MDAwMDAwXG4iKTsKKyAgICBxZW11X2ZwcmludGYoZiwgIiAgY3MxID0gMHgwMDAwMDAwMFxuIik7 CisjZWxzZQorICAgIHByaW50X3JlZyhmLCBlbnYsIEhFWF9SRUdfQ0FVU0UpOworICAgIHByaW50 X3JlZyhmLCBlbnYsIEhFWF9SRUdfQkFEVkEpOworICAgIHByaW50X3JlZyhmLCBlbnYsIEhFWF9S RUdfQ1MwKTsKKyAgICBwcmludF9yZWcoZiwgZW52LCBIRVhfUkVHX0NTMSk7CisjZW5kaWYKKyAg ICBxZW11X2ZwcmludGYoZiwgIn1cbiIpOworfQorCitzdGF0aWMgdm9pZCBoZXhhZ29uX2R1bXBf c3RhdGUoQ1BVU3RhdGUgKmNzLCBGSUxFICpmLCBpbnQgZmxhZ3MpCit7CisgICAgSGV4YWdvbkNQ VSAqY3B1ID0gSEVYQUdPTl9DUFUoY3MpOworICAgIENQVUhleGFnb25TdGF0ZSAqZW52ID0gJmNw dS0+ZW52OworCisgICAgaGV4YWdvbl9kdW1wKGVudiwgZik7Cit9CisKK3ZvaWQgaGV4YWdvbl9k ZWJ1ZyhDUFVIZXhhZ29uU3RhdGUgKmVudikKK3sKKyAgICBoZXhhZ29uX2R1bXAoZW52LCBzdGRv dXQpOworfQorCitzdGF0aWMgdm9pZCBoZXhhZ29uX2NwdV9zZXRfcGMoQ1BVU3RhdGUgKmNzLCB2 YWRkciB2YWx1ZSkKK3sKKyAgICBIZXhhZ29uQ1BVICpjcHUgPSBIRVhBR09OX0NQVShjcyk7Cisg ICAgQ1BVSGV4YWdvblN0YXRlICplbnYgPSAmY3B1LT5lbnY7CisgICAgZW52LT5ncHJbSEVYX1JF R19QQ10gPSB2YWx1ZTsKK30KKworc3RhdGljIHZvaWQgaGV4YWdvbl9jcHVfc3luY2hyb25pemVf ZnJvbV90YihDUFVTdGF0ZSAqY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IFRyYW5zbGF0aW9uQmxvY2sgKnRiKQoreworICAgIEhleGFnb25DUFUg KmNwdSA9IEhFWEFHT05fQ1BVKGNzKTsKKyAgICBDUFVIZXhhZ29uU3RhdGUgKmVudiA9ICZjcHUt PmVudjsKKyAgICBlbnYtPmdwcltIRVhfUkVHX1BDXSA9IHRiLT5wYzsKK30KKworc3RhdGljIGJv b2wgaGV4YWdvbl9jcHVfaGFzX3dvcmsoQ1BVU3RhdGUgKmNzKQoreworICAgIHJldHVybiB0cnVl OworfQorCit2b2lkIHJlc3RvcmVfc3RhdGVfdG9fb3BjKENQVUhleGFnb25TdGF0ZSAqZW52LCBU cmFuc2xhdGlvbkJsb2NrICp0YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X3Vs b25nICpkYXRhKQoreworICAgIGVudi0+Z3ByW0hFWF9SRUdfUENdID0gZGF0YVswXTsKK30KKwor c3RhdGljIHZvaWQgaGV4YWdvbl9jcHVfcmVzZXQoRGV2aWNlU3RhdGUgKmRldikKK3sKKyAgICBD UFVTdGF0ZSAqY3MgPSBDUFUoZGV2KTsKKyAgICBIZXhhZ29uQ1BVICpjcHUgPSBIRVhBR09OX0NQ VShjcyk7CisgICAgSGV4YWdvbkNQVUNsYXNzICptY2MgPSBIRVhBR09OX0NQVV9HRVRfQ0xBU1Mo Y3B1KTsKKworICAgIG1jYy0+cGFyZW50X3Jlc2V0KGRldik7Cit9CisKK3N0YXRpYyB2b2lkIGhl eGFnb25fY3B1X2Rpc2FzX3NldF9pbmZvKENQVVN0YXRlICpzLCBkaXNhc3NlbWJsZV9pbmZvICpp bmZvKQoreworICAgIGluZm8tPnByaW50X2luc24gPSBwcmludF9pbnNuX2hleGFnb247Cit9CisK K3N0YXRpYyB2b2lkIGhleGFnb25fY3B1X3JlYWxpemUoRGV2aWNlU3RhdGUgKmRldiwgRXJyb3Ig KiplcnJwKQoreworICAgIENQVVN0YXRlICpjcyA9IENQVShkZXYpOworICAgIEhleGFnb25DUFVD bGFzcyAqbWNjID0gSEVYQUdPTl9DUFVfR0VUX0NMQVNTKGRldik7CisgICAgRXJyb3IgKmxvY2Fs X2VyciA9IE5VTEw7CisKKyAgICBjcHVfZXhlY19yZWFsaXplZm4oY3MsICZsb2NhbF9lcnIpOwor ICAgIGlmIChsb2NhbF9lcnIgIT0gTlVMTCkgeworICAgICAgICBlcnJvcl9wcm9wYWdhdGUoZXJy cCwgbG9jYWxfZXJyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHFlbXVfaW5pdF92 Y3B1KGNzKTsKKyAgICBjcHVfcmVzZXQoY3MpOworCisgICAgbWNjLT5wYXJlbnRfcmVhbGl6ZShk ZXYsIGVycnApOworfQorCitzdGF0aWMgdm9pZCBoZXhhZ29uX2NwdV9pbml0KE9iamVjdCAqb2Jq KQoreworICAgIEhleGFnb25DUFUgKmNwdSA9IEhFWEFHT05fQ1BVKG9iaik7CisKKyAgICBjcHVf c2V0X2NwdXN0YXRlX3BvaW50ZXJzKGNwdSk7CisgICAgcWRldl9wcm9wZXJ0eV9hZGRfc3RhdGlj KERFVklDRShvYmopLCAmaGV4YWdvbl9sbGRiX2NvbXBhdF9wcm9wZXJ0eSk7CisgICAgcWRldl9w cm9wZXJ0eV9hZGRfc3RhdGljKERFVklDRShvYmopLCAmaGV4YWdvbl9sbGRiX3N0YWNrX2FkanVz dF9wcm9wZXJ0eSk7Cit9CisKK3N0YXRpYyBib29sIGhleGFnb25fdGxiX2ZpbGwoQ1BVU3RhdGUg KmNzLCB2YWRkciBhZGRyZXNzLCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTU1VQWNjZXNzVHlwZSBhY2Nlc3NfdHlwZSwgaW50IG1tdV9pZHgsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJvb2wgcHJvYmUsIHVpbnRwdHJfdCByZXRhZGRyKQoreworI2lmZGVm IENPTkZJR19VU0VSX09OTFkKKyAgICBzd2l0Y2ggKGFjY2Vzc190eXBlKSB7CisgICAgY2FzZSBN TVVfSU5TVF9GRVRDSDoKKyAgICAgICAgY3MtPmV4Y2VwdGlvbl9pbmRleCA9IEhFWF9FWENQX0ZF VENIX05PX1VQQUdFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1NVV9EQVRBX0xPQUQ6Cisg ICAgICAgIGNzLT5leGNlcHRpb25faW5kZXggPSBIRVhfRVhDUF9QUklWX05PX1VSRUFEOworICAg ICAgICBicmVhazsKKyAgICBjYXNlIE1NVV9EQVRBX1NUT1JFOgorICAgICAgICBjcy0+ZXhjZXB0 aW9uX2luZGV4ID0gSEVYX0VYQ1BfUFJJVl9OT19VV1JJVEU7CisgICAgICAgIGJyZWFrOworICAg IH0KKyAgICBjcHVfbG9vcF9leGl0X3Jlc3RvcmUoY3MsIHJldGFkZHIpOworI2Vsc2UKKyNlcnJv ciBTeXN0ZW0gbW9kZSBub3QgaW1wbGVtZW50ZWQgZm9yIEhleGFnb24KKyNlbmRpZgorfQorCisj aW5jbHVkZSAiaHcvY29yZS90Y2ctY3B1LW9wcy5oIgorCitzdGF0aWMgc3RydWN0IFRDR0NQVU9w cyBoZXhhZ29uX3RjZ19vcHMgPSB7CisgICAgLmluaXRpYWxpemUgPSBoZXhhZ29uX3RyYW5zbGF0 ZV9pbml0LAorICAgIC5zeW5jaHJvbml6ZV9mcm9tX3RiID0gaGV4YWdvbl9jcHVfc3luY2hyb25p emVfZnJvbV90YiwKKyAgICAudGxiX2ZpbGwgPSBoZXhhZ29uX3RsYl9maWxsLAorfTsKKworc3Rh dGljIHZvaWQgaGV4YWdvbl9jcHVfY2xhc3NfaW5pdChPYmplY3RDbGFzcyAqYywgdm9pZCAqZGF0 YSkKK3sKKyAgICBIZXhhZ29uQ1BVQ2xhc3MgKm1jYyA9IEhFWEFHT05fQ1BVX0NMQVNTKGMpOwor ICAgIENQVUNsYXNzICpjYyA9IENQVV9DTEFTUyhjKTsKKyAgICBEZXZpY2VDbGFzcyAqZGMgPSBE RVZJQ0VfQ0xBU1MoYyk7CisKKyAgICBkZXZpY2VfY2xhc3Nfc2V0X3BhcmVudF9yZWFsaXplKGRj LCBoZXhhZ29uX2NwdV9yZWFsaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJm1jYy0+cGFyZW50X3JlYWxpemUpOworCisgICAgZGV2aWNlX2NsYXNzX3NldF9wYXJlbnRf cmVzZXQoZGMsIGhleGFnb25fY3B1X3Jlc2V0LCAmbWNjLT5wYXJlbnRfcmVzZXQpOworCisgICAg Y2MtPmNsYXNzX2J5X25hbWUgPSBoZXhhZ29uX2NwdV9jbGFzc19ieV9uYW1lOworICAgIGNjLT5o YXNfd29yayA9IGhleGFnb25fY3B1X2hhc193b3JrOworICAgIGNjLT5kdW1wX3N0YXRlID0gaGV4 YWdvbl9kdW1wX3N0YXRlOworICAgIGNjLT5zZXRfcGMgPSBoZXhhZ29uX2NwdV9zZXRfcGM7Cisg ICAgY2MtPmdkYl9yZWFkX3JlZ2lzdGVyID0gaGV4YWdvbl9nZGJfcmVhZF9yZWdpc3RlcjsKKyAg ICBjYy0+Z2RiX3dyaXRlX3JlZ2lzdGVyID0gaGV4YWdvbl9nZGJfd3JpdGVfcmVnaXN0ZXI7Cisg ICAgY2MtPmdkYl9udW1fY29yZV9yZWdzID0gVE9UQUxfUEVSX1RIUkVBRF9SRUdTOworICAgIGNj LT5nZGJfc3RvcF9iZWZvcmVfd2F0Y2hwb2ludCA9IHRydWU7CisgICAgY2MtPmRpc2FzX3NldF9p bmZvID0gaGV4YWdvbl9jcHVfZGlzYXNfc2V0X2luZm87CisgICAgY2MtPnRjZ19vcHMgPSAmaGV4 YWdvbl90Y2dfb3BzOworfQorCisjZGVmaW5lIERFRklORV9DUFUodHlwZV9uYW1lLCBpbml0Zm4p ICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICAgICAgLm5hbWUgPSB0eXBlX25hbWUsICAgICAgICAgICAgICAgICBcCisgICAgICAgIC5wYXJl bnQgPSBUWVBFX0hFWEFHT05fQ1BVLCAgICAgICAgXAorICAgICAgICAuaW5zdGFuY2VfaW5pdCA9 IGluaXRmbiAgICAgICAgICAgIFwKKyAgICB9CisKK3N0YXRpYyBjb25zdCBUeXBlSW5mbyBoZXhh Z29uX2NwdV90eXBlX2luZm9zW10gPSB7CisgICAgeworICAgICAgICAubmFtZSA9IFRZUEVfSEVY QUdPTl9DUFUsCisgICAgICAgIC5wYXJlbnQgPSBUWVBFX0NQVSwKKyAgICAgICAgLmluc3RhbmNl X3NpemUgPSBzaXplb2YoSGV4YWdvbkNQVSksCisgICAgICAgIC5pbnN0YW5jZV9pbml0ID0gaGV4 YWdvbl9jcHVfaW5pdCwKKyAgICAgICAgLmFic3RyYWN0ID0gdHJ1ZSwKKyAgICAgICAgLmNsYXNz X3NpemUgPSBzaXplb2YoSGV4YWdvbkNQVUNsYXNzKSwKKyAgICAgICAgLmNsYXNzX2luaXQgPSBo ZXhhZ29uX2NwdV9jbGFzc19pbml0LAorICAgIH0sCisgICAgREVGSU5FX0NQVShUWVBFX0hFWEFH T05fQ1BVX1Y2NywgICAgICAgICAgICAgIGhleGFnb25fdjY3X2NwdV9pbml0KSwKK307CisKK0RF RklORV9UWVBFUyhoZXhhZ29uX2NwdV90eXBlX2luZm9zKQotLSAKMi43LjQKCg==