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=-9.5 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,URIBL_BLOCKED,USER_AGENT_GIT,WEIRD_QUOTING 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 BCD55C3F2CD for ; Fri, 28 Feb 2020 17:09:16 +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 7BB2C24691 for ; Fri, 28 Feb 2020 17:09:16 +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="zb6pRbYR" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7BB2C24691 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]:50984 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j7j8V-0000KV-IU for qemu-devel@archiver.kernel.org; Fri, 28 Feb 2020 12:09:15 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:58221) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j7ilS-0004YS-Ux for qemu-devel@nongnu.org; Fri, 28 Feb 2020 11:45:30 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j7ilP-0006Wr-6O for qemu-devel@nongnu.org; Fri, 28 Feb 2020 11:45:26 -0500 Received: from alexa-out-sd-01.qualcomm.com ([199.106.114.38]:13301) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j7iks-0005cG-6t for qemu-devel@nongnu.org; Fri, 28 Feb 2020 11:45:23 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1582908290; x=1614444290; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=yGYxHfH+spxucmBWiu25yYVocsuwWLSqiw6dypnmJC4=; b=zb6pRbYRjlvtnUwHrByNFCxo26uwh4OIN4A2bNwhk6s9o17QPMnVD+ot tDoRGHogBCDNe80p+iPj2SC3AVB/fH8WOEWdQbmeFV1nLXAzwuNc4oDfP ZN2Q6JmNwtRABirqsdWlJUPJWL0ka6sLl3hdIr7tFRrlcAjFEnvpin+SZ I=; Received: from unknown (HELO ironmsg03-sd.qualcomm.com) ([10.53.140.143]) by alexa-out-sd-01.qualcomm.com with ESMTP; 28 Feb 2020 08:44:30 -0800 Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg03-sd.qualcomm.com with ESMTP; 28 Feb 2020 08:44:29 -0800 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id B55B7FCD; Fri, 28 Feb 2020 10:44:29 -0600 (CST) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [RFC PATCH v2 22/67] Hexagon generator phase 2 - qemu_def_generated.h Date: Fri, 28 Feb 2020 10:43:18 -0600 Message-Id: <1582908244-304-23-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.38 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" Rm9yIGVhY2ggaW5zdHJ1Y3Rpb24gd2UgY3JlYXRlCiAgICBERUZfSEVMUEVSIGZ1bmN0aW9uIHBy b3RvdHlwZQogICAgVENHIGNvZGUgdG8gZ2VuZXJhdGUgY2FsbCB0byBoZWxwZXIKICAgIEhlbHBl ciBkZWZpbml0aW9uCgpTaWduZWQtb2ZmLWJ5OiBUYXlsb3IgU2ltcHNvbiA8dHNpbXBzb25AcXVp Y2luYy5jb20+Ci0tLQogdGFyZ2V0L2hleGFnb24vZG9fcWVtdS5weSB8IDc2OSArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNzY5 IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDc1NSB0YXJnZXQvaGV4YWdvbi9kb19xZW11 LnB5CgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vZG9fcWVtdS5weSBiL3RhcmdldC9oZXhh Z29uL2RvX3FlbXUucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmYwZTM3 NgotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9oZXhhZ29uL2RvX3FlbXUucHkKQEAgLTAsMCAr MSw3NjkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKworIyMKKyMjICBDb3B5cmlnaHQoYykg MjAxOS0yMDIwIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBSaWdodHMgUmVz ZXJ2ZWQuCisjIworIyMgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMjICB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv cgorIyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjIworIyMgIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorIyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisjIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisjIworIyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyAgYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyMjCisK K2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworZnJvbSBpbyBpbXBvcnQgU3Ry aW5nSU8KKworCitpbXBvcnQgb3BlcmF0b3IKK2Zyb20gaXRlcnRvb2xzIGltcG9ydCBjaGFpbgor CisKKworYmVoZGljdCA9IHt9ICAgICAgICAgICMgdGFnIC0+YmVoYXZpb3IKK3NlbWRpY3QgPSB7 fSAgICAgICAgICAjIHRhZyAtPiBzZW1hbnRpY3MKK2V4dGRpY3QgPSB7fSAgICAgICAgICAjIHRh ZyAtPiBXaGF0IGV4dGVuc2lvbiBhbiBpbnN0cnVjdGlvbiBiZWxvbmdzIHRvIChvciAiIikKK2V4 dG5hbWVzID0ge30gICAgICAgICAjIGV4dCBuYW1lIC0+IFRydWUKK2F0dHJpYmRpY3QgPSB7fSAg ICAgICAjIHRhZyAtPiBhdHRyaWJ1dGVzCittYWNyb3MgPSB7fSAgICAgICAgICAgIyBtYWNybyAt PiBtYWNybyBpbmZvcm1hdGlvbi4uLgorYXR0cmliaW5mbyA9IHt9ICAgICAgICMgUmVnaXN0ZXIg aW5mb3JtYXRpb24gYW5kIG1pc2MKK3RhZ3MgPSBbXSAgICAgICAgICAgICAjIGxpc3Qgb2YgYWxs IHRhZ3MKKworZGVmIGdldF9tYWNybyhtYWNuYW1lLGV4dD0iIik6CisgICAgbWFja2V5ID0gbWFj bmFtZSArICI6IiArIGV4dAorICAgIGlmIGV4dCBhbmQgbWFja2V5IG5vdCBpbiBtYWNyb3M6Cisg ICAgICAgIHJldHVybiBnZXRfbWFjcm8obWFjbmFtZSwiIikKKyAgICByZXR1cm4gbWFjcm9zW21h Y2tleV0KKworIyBXZSBzaG91bGQgZG8gdGhpcyBhcyBhIGhhc2ggZm9yIHBlcmZvcm1hbmNlLAor IyBidXQgdG8ga2VlcCBvcmRlciBsZXQncyBrZWVwIGl0IGFzIGEgbGlzdC4KK2RlZiB1bmlxdWlm eShzZXEpOgorICAgIHNlZW4gPSBzZXQoKQorICAgIHNlZW5fYWRkID0gc2Vlbi5hZGQKKyAgICBy ZXR1cm4gW3ggZm9yIHggaW4gc2VxIGlmIHggbm90IGluIHNlZW4gYW5kIG5vdCBzZWVuX2FkZCh4 KV0KKworcmVncmUgPSByZS5jb21waWxlKAorICAgIHIiKCg/PCFEVVApW01OT1JDUFFYU0dWWkFd KShbc3R1dnd4eXpkZWZnXSspKFsuXT9bTGxIaF0/KShcZCtTPykiKQoraW1tcmUgPSByZS5jb21w aWxlKHIiWyNdKFtyUnNTdVVtXSkoXGQrKSg/Ols6XShcZCspKT8iKQorcmVnX29yX2ltbXJlID0g XAorICAgIHJlLmNvbXBpbGUociIoKCg/PCFEVVApW01OUkNPUFFYU0dWWkFdKShbc3R1dnd4eXpk ZWZnXSspIiArIFwKKyAgICAgICAgICAgICAgICAiKFsuXT9bTGxIaF0/KShcZCtTPykpfChbI10o W3JSc1N1VW1dKShcZCspWzpdPyhcZCspPykiKQorcmVsaW1tcmUgPSByZS5jb21waWxlKHIiWyNd KFtyUl0pKFxkKykoPzpbOl0oXGQrKSk/IikKK2Fic2ltbXJlID0gcmUuY29tcGlsZShyIlsjXShb c1N1VW1dKShcZCspKD86WzpdKFxkKykpPyIpCisKK2ZpbmlzaGVkX21hY3JvcyA9IHNldCgpCisK K2RlZiBleHBhbmRfbWFjcm9fYXR0cmlicyhtYWNybyxhbGxtYWNfcmUpOgorICAgIGlmIG1hY3Jv LmtleSBub3QgaW4gZmluaXNoZWRfbWFjcm9zOgorICAgICAgICAjIEdldCBhIGxpc3Qgb2YgYWxs IHRoaW5ncyB0aGF0IG1pZ2h0IGJlIG1hY3JvcworICAgICAgICBsID0gYWxsbWFjX3JlLmZpbmRh bGwobWFjcm8uYmVoKQorICAgICAgICBmb3Igc3VibWFjcm8gaW4gbDoKKyAgICAgICAgICAgIGlm IG5vdCBzdWJtYWNybzogY29udGludWUKKyAgICAgICAgICAgIGlmIG5vdCBnZXRfbWFjcm8oc3Vi bWFjcm8sbWFjcm8uZXh0KToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkNvdWxk bid0IGZpbmQgbWFjcm86IDwlcz4iICUgbCkKKyAgICAgICAgICAgIG1hY3JvLmF0dHJpYnMgfD0g ZXhwYW5kX21hY3JvX2F0dHJpYnMoCisgICAgICAgICAgICAgICAgZ2V0X21hY3JvKHN1Ym1hY3Jv LG1hY3JvLmV4dCksIGFsbG1hY19yZSkKKyAgICAgICAgICAgIGZpbmlzaGVkX21hY3Jvcy5hZGQo bWFjcm8ua2V5KQorICAgIHJldHVybiBtYWNyby5hdHRyaWJzCisKK2ltbWV4dHJlID0gcmUuY29t cGlsZShyJ2YoTVVTVF8pP0lNTUVYVFsoXShbVXVTc1JyXSknKQorZGVmIGNhbGN1bGF0ZV9hdHRy aWJzKCk6CisgICAgIyBSZWN1cnNlIGRvd24gbWFjcm9zLCBmaW5kIGF0dHJpYnV0ZXMgZnJvbSBz dWItbWFjcm9zCisgICAgbWFjcm9WYWx1ZXMgPSBsaXN0KG1hY3Jvcy52YWx1ZXMoKSkKKyAgICBh bGxtYWNyb3NfcmVzdHIgPSAifCIuam9pbihzZXQoWyBtLnJlLnBhdHRlcm4gZm9yIG0gaW4gbWFj cm9WYWx1ZXMgXSkpCisgICAgYWxsbWFjcm9zX3JlID0gcmUuY29tcGlsZShhbGxtYWNyb3NfcmVz dHIpCisgICAgZm9yIG1hY3JvIGluIG1hY3JvVmFsdWVzOgorICAgICAgICBleHBhbmRfbWFjcm9f YXR0cmlicyhtYWNybyxhbGxtYWNyb3NfcmUpCisgICAgIyBBcHBlbmQgYXR0cmlidXRlcyB0byBh bGwgaW5zdHJ1Y3Rpb25zCisgICAgZm9yIHRhZyBpbiB0YWdzOgorICAgICAgICBmb3IgbWFjbmFt ZSBpbiBhbGxtYWNyb3NfcmUuZmluZGFsbChzZW1kaWN0W3RhZ10pOgorICAgICAgICAgICAgaWYg bm90IG1hY25hbWU6IGNvbnRpbnVlCisgICAgICAgICAgICBtYWNybyA9IGdldF9tYWNybyhtYWNu YW1lLGV4dGRpY3RbdGFnXSkKKyAgICAgICAgICAgIGF0dHJpYmRpY3RbdGFnXSB8PSBzZXQobWFj cm8uYXR0cmlicykKKyAgICAgICAgbSA9IGltbWV4dHJlLnNlYXJjaChzZW1kaWN0W3RhZ10pCisg ICAgICAgIGlmIG06CisgICAgICAgICAgICBpZiBtLmdyb3VwKDIpLmlzdXBwZXIoKToKKyAgICAg ICAgICAgICAgICBhdHRyaWIgPSAnQV9FWFRfVVBQRVJfSU1NRUQnCisgICAgICAgICAgICBlbGlm IG0uZ3JvdXAoMikuaXNsb3dlcigpOgorICAgICAgICAgICAgICAgIGF0dHJpYiA9ICdBX0VYVF9M T1dFUl9JTU1FRCcKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgIk5v dCBhIGxldHRlcjogJXMgKCVzKSIgJSAobS5ncm91cCgxKSx0YWcpCisgICAgICAgICAgICBpZiBu b3QgYXR0cmliIGluIGF0dHJpYmRpY3RbdGFnXToKKyAgICAgICAgICAgICAgICBhdHRyaWJkaWN0 W3RhZ10uYWRkKGF0dHJpYikKKworZGVmIFNFTUFOVElDUyh0YWcsIGJlaCwgc2VtKToKKyAgICAj cHJpbnQgdGFnLGJlaCxzZW0KKyAgICBleHRkaWN0W3RhZ10gPSAiIgorICAgIGJlaGRpY3RbdGFn XSA9IGJlaAorICAgIHNlbWRpY3RbdGFnXSA9IHNlbQorICAgIGF0dHJpYmRpY3RbdGFnXSA9IHNl dCgpCisgICAgdGFncy5hcHBlbmQodGFnKSAgICAgICAgIyBkaWN0cyBoYXZlIG5vIG9yZGVyLCB0 aGlzIGlzIGZvciBvcmRlcgorCitkZWYgQVRUUklCVVRFUyh0YWcsIGF0dHJpYnN0cmluZyk6Cisg ICAgYXR0cmlic3RyaW5nID0gXAorICAgICAgICBhdHRyaWJzdHJpbmcucmVwbGFjZSgiQVRUUklC UyIsIiIpLnJlcGxhY2UoIigiLCIiKS5yZXBsYWNlKCIpIiwiIikKKyAgICBpZiBub3QgYXR0cmli c3RyaW5nOgorICAgICAgICByZXR1cm4KKyAgICBhdHRyaWJzID0gYXR0cmlic3RyaW5nLnNwbGl0 KCIsIikKKyAgICBmb3IgYXR0cmliIGluIGF0dHJpYnM6CisgICAgICAgIGF0dHJpYmRpY3RbdGFn XS5hZGQoYXR0cmliLnN0cmlwKCkpCisKK2NsYXNzIE1hY3JvKG9iamVjdCk6CisgICAgX19zbG90 c19fID0gWydrZXknLCduYW1lJywgJ2JlaCcsICdhdHRyaWJzJywgJ3JlJywnZXh0J10KKyAgICBk ZWYgX19pbml0X18oc2VsZixrZXksIG5hbWUsIGJlaCwgYXR0cmlicyxleHQpOgorICAgICAgICBz ZWxmLmtleSA9IGtleQorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuYmVo ID0gYmVoCisgICAgICAgIHNlbGYuYXR0cmlicyA9IHNldChhdHRyaWJzKQorICAgICAgICBzZWxm LmV4dCA9IGV4dAorICAgICAgICBzZWxmLnJlID0gcmUuY29tcGlsZSgiXFxiIiArIG5hbWUgKyAi XFxiIikKKworZGVmIE1BQ1JPQVRUUklCKG1hY25hbWUsYmVoLGF0dHJpYnN0cmluZyxleHQ9IiIp OgorICAgIGF0dHJpYnN0cmluZyA9IGF0dHJpYnN0cmluZy5yZXBsYWNlKCIoIiwiIikucmVwbGFj ZSgiKSIsIiIpCisgICAgbWFja2V5ID0gbWFjbmFtZSArICI6IiArIGV4dAorICAgIGlmIGF0dHJp YnN0cmluZzoKKyAgICAgICAgYXR0cmlicyA9IGF0dHJpYnN0cmluZy5zcGxpdCgiLCIpCisgICAg ZWxzZToKKyAgICAgICAgYXR0cmlicyA9IFtdCisgICAgbWFjcm9zW21hY2tleV0gPSBNYWNybyht YWNrZXksbWFjbmFtZSxiZWgsYXR0cmlicyxleHQpCisKKyMgcmVhZCBpbiBmaWxlLiAgRXZhbHVh dGUgZWFjaCBsaW5lOiBlYWNoIGxpbmUgY2FsbHMgYSBmdW5jdGlvbiBhYm92ZQorCitmb3IgbGlu ZSBpbiBvcGVuKHN5cy5hcmd2WzFdLCAncnQnKS5yZWFkbGluZXMoKToKKyAgICBpZiBub3QgbGlu ZS5zdGFydHN3aXRoKCIjIik6CisgICAgICAgIGV2YWwobGluZS5zdHJpcCgpKQorCisKK2NhbGN1 bGF0ZV9hdHRyaWJzKCkKKworCithdHRyaWJyZSA9IHJlLmNvbXBpbGUocidERUZfQVRUUklCXCgo W0EtWmEtejAtOV9dKyksIChbXixdKiksICcgKworICAgICAgICByJyIoW0EtWmEtejAtOV9cLl0q KSIsICIoW0EtWmEtejAtOV9cLl0qKSJcKScpCitmb3IgbGluZSBpbiBvcGVuKHN5cy5hcmd2WzJd LCAncnQnKS5yZWFkbGluZXMoKToKKyAgICBpZiBub3QgYXR0cmlicmUubWF0Y2gobGluZSk6Cisg ICAgICAgIGNvbnRpbnVlCisgICAgKGF0dHJpYl9iYXNlLGRlc2NyLHJyZWcsd3JlZykgPSBhdHRy aWJyZS5maW5kYWxsKGxpbmUpWzBdCisgICAgYXR0cmliX2Jhc2UgPSAnQV8nICsgYXR0cmliX2Jh c2UKKyAgICBhdHRyaWJpbmZvW2F0dHJpYl9iYXNlXSA9IHsncnJlZyc6cnJlZywgJ3dyZWcnOndy ZWcsICdkZXNjcic6ZGVzY3J9CisKK2RlZiBjb21wdXRlX3RhZ19yZWdzKHRhZyk6CisgICAgcmV0 dXJuIHVuaXF1aWZ5KHJlZ3JlLmZpbmRhbGwoYmVoZGljdFt0YWddKSkKKworZGVmIGNvbXB1dGVf dGFnX2ltbWVkaWF0ZXModGFnKToKKyAgICByZXR1cm4gdW5pcXVpZnkoaW1tcmUuZmluZGFsbChi ZWhkaWN0W3RhZ10pKQorCisjIworIyMgIHRhZ3JlZ3MgaXMgdGhlIG1haW4gZGF0YSBzdHJ1Y3R1 cmUgd2UnbGwgdXNlCisjIyAgdGFncmVnc1t0YWddIHdpbGwgY29udGFpbiB0aGUgcmVnaXN0ZXJz IHVzZWQgYnkgYW4gaW5zdHJ1Y3Rpb24KKyMjICBXaXRoaW4gZWFjaCBlbnRyeSwgd2UnbGwgdXNl IHRoZSByZWd0eXBlIGFuZCByZWdpZCBmaWVsZHMKKyMjICAgICAgcmVndHlwZSBjYW4gYmUgb25l IG9mIHRoZSBmb2xsb3dpbmcKKyMjICAgICAgICAgIEMgICAgICAgICAgICAgICAgY29udHJvbCBy ZWdpc3RlcgorIyMgICAgICAgICAgTiAgICAgICAgICAgICAgICBuZXcgcmVnaXN0ZXIgdmFsdWUK KyMjICAgICAgICAgIFAgICAgICAgICAgICAgICAgcHJlZGljYXRlIHJlZ2lzdGVyCisjIyAgICAg ICAgICBSICAgICAgICAgICAgICAgIEdQUiByZWdpc3RlcgorIyMgICAgICAgICAgTSAgICAgICAg ICAgICAgICBtb2RpZmllciByZWdpc3RlcgorIyMgICAgICByZWdpZCBjYW4gYmUgb25lIG9mIHRo ZSBmb2xsb3dpbmcKKyMjICAgICAgICAgIGQsIGUgICAgICAgICAgICAgZGVzdGluYXRpb24gcmVn aXN0ZXIKKyMjICAgICAgICAgIGRkICAgICAgICAgICAgICAgZGVzdGluYXRpb24gcmVnaXN0ZXIg cGFpcgorIyMgICAgICAgICAgcywgdCwgdSwgdiwgdyAgICBzb3VyY2UgcmVnaXN0ZXIKKyMjICAg ICAgICAgIHNzLCB0dCwgdXUsIHZ2ICAgc291cmNlIHJlZ2lzdGVyIHBhaXIKKyMjICAgICAgICAg IHgsIHkgICAgICAgICAgICAgcmVhZC13cml0ZSByZWdpc3RlcgorIyMgICAgICAgICAgeHgsIHl5 ICAgICAgICAgICByZWFkLXdyaXRlIHJlZ2lzdGVyIHBhaXIKKyMjCit0YWdyZWdzID0gZGljdCh6 aXAodGFncywgbGlzdChtYXAoY29tcHV0ZV90YWdfcmVncywgdGFncykpKSkKKworZGVmIGlzX3Bh aXIocmVnaWQpOgorICAgIHJldHVybiBsZW4ocmVnaWQpID09IDIKKworZGVmIGlzX3NpbmdsZShy ZWdpZCk6CisgICAgcmV0dXJuIGxlbihyZWdpZCkgPT0gMQorCitkZWYgaXNfd3JpdHRlbihyZWdp ZCk6CisgICAgcmV0dXJuIHJlZ2lkWzBdIGluICJkZXh5IgorCitkZWYgaXNfd3JpdGVvbmx5KHJl Z2lkKToKKyAgICByZXR1cm4gcmVnaWRbMF0gaW4gImRlIgorCitkZWYgaXNfcmVhZChyZWdpZCk6 CisgICAgcmV0dXJuIHJlZ2lkWzBdIGluICJzdHV2d3h5IgorCitkZWYgaXNfcmVhZHdyaXRlKHJl Z2lkKToKKyAgICByZXR1cm4gcmVnaWRbMF0gaW4gInh5IgorCitkZWYgaXNfc2NhbGFyX3JlZyhy ZWd0eXBlKToKKyAgICByZXR1cm4gcmVndHlwZSBpbiAiUlBDIgorCitkZWYgaXNfb2xkX3ZhbChy ZWd0eXBlLCByZWdpZCwgdGFnKToKKyAgICByZXR1cm4gcmVndHlwZStyZWdpZCsnVicgaW4gc2Vt ZGljdFt0YWddCisKK2RlZiBpc19uZXdfdmFsKHJlZ3R5cGUsIHJlZ2lkLCB0YWcpOgorICAgIHJl dHVybiByZWd0eXBlK3JlZ2lkKydOJyBpbiBzZW1kaWN0W3RhZ10KKwordGFnaW1tcyA9IGRpY3Qo emlwKHRhZ3MsIGxpc3QobWFwKGNvbXB1dGVfdGFnX2ltbWVkaWF0ZXMsIHRhZ3MpKSkpCisKK2Rl ZiBuZWVkX3Nsb3QodGFnKToKKyAgICBpZiAoJ0FfQ09OREVYRUMnIGluIGF0dHJpYmRpY3RbdGFn XSBvcgorICAgICAgICAnQV9TVE9SRScgaW4gYXR0cmliZGljdFt0YWddKToKKyAgICAgICAgcmV0 dXJuIDEKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gMAorCitkZWYgbmVlZF9wYXJ0MSh0YWcp OgorICAgIHJldHVybiByZS5jb21waWxlKHIiZlBBUlQxIikuc2VhcmNoKHNlbWRpY3RbdGFnXSkK KworZGVmIG5lZWRfZWEodGFnKToKKyAgICByZXR1cm4gcmUuY29tcGlsZShyIlxiRUFcYiIpLnNl YXJjaChzZW1kaWN0W3RhZ10pCisKK2RlZiBpbW1fbmFtZShpbW1sZXR0KToKKyAgICByZXR1cm4g IiVzaVYiICUgaW1tbGV0dAorCisjIworIyMgSGVscGVycyBmb3IgZ2VuX2hlbHBlcl9wcm90b3R5 cGUKKyMjCitkZWZfaGVscGVyX3R5cGVzID0geworICAgICdOJyA6ICdzMzInLAorICAgICdPJyA6 ICdzMzInLAorICAgICdQJyA6ICdzMzInLAorICAgICdNJyA6ICdzMzInLAorICAgICdDJyA6ICdz MzInLAorICAgICdSJyA6ICdzMzInLAorICAgICdWJyA6ICdwdHInLAorICAgICdRJyA6ICdwdHIn Cit9CisKK2RlZl9oZWxwZXJfdHlwZXNfcGFpciA9IHsKKyAgICAnUicgOiAnczY0JywKKyAgICAn QycgOiAnczY0JywKKyAgICAnUycgOiAnczY0JywKKyAgICAnRycgOiAnczY0JywKKyAgICAnVicg OiAncHRyJywKKyAgICAnUScgOiAncHRyJworfQorCitkZWYgZ2VuX2RlZl9oZWxwZXJfb3BuKGYs IHRhZywgcmVndHlwZSwgcmVnaWQsIHRvc3MsIG51bXJlZ3MsIGkpOgorICAgIGlmIChpc19wYWly KHJlZ2lkKSk6CisgICAgICAgIGYud3JpdGUoIiwgJXMiICUgKGRlZl9oZWxwZXJfdHlwZXNfcGFp cltyZWd0eXBlXSkpCisgICAgZWxpZiAoaXNfc2luZ2xlKHJlZ2lkKSk6CisgICAgICAgIGYud3Jp dGUoIiwgJXMiICUgKGRlZl9oZWxwZXJfdHlwZXNbcmVndHlwZV0pKQorICAgIGVsc2U6CisgICAg ICAgIHByaW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIscmVndHlwZSxyZWdpZCx0b3NzLG51bXJl Z3MpCisKKyMjCisjIyBHZW5lcmF0ZSB0aGUgREVGX0hFTFBFUiBwcm90b3R5cGUgZm9yIGFuIGlu c3RydWN0aW9uCisjIyAgICAgRm9yIEEyX2FkZDogUmQzMj1hZGQoUnMzMixSdDMyKQorIyMgICAg IFdlIHByb2R1Y2U6CisjIyAgICAgICAgICNpZm5kZWYgZldSQVBfQTJfYWRkCisjIyAgICAgICAg IERFRl9IRUxQRVJfMyhBMl9hZGQsIHMzMiwgZW52LCBzMzIsIHMzMikKKyMjICAgICAgICAgI2Vu ZGlmCisjIworZGVmIGdlbl9oZWxwZXJfcHJvdG90eXBlKGYsIHRhZywgcmVncywgaW1tcyk6Cisg ICAgZi53cml0ZSgnI2lmbmRlZiBmV1JBUF8lc1xuJyAlIHRhZykKKyAgICBudW1yZXN1bHRzID0g MAorICAgIG51bXNjYWxhcnJlc3VsdHMgPSAwCisgICAgbnVtc2NhbGFycmVhZHdyaXRlID0gMAor ICAgIGZvciByZWd0eXBlLHJlZ2lkLHRvc3MsbnVtcmVncyBpbiByZWdzOgorICAgICAgICBpZiAo aXNfd3JpdHRlbihyZWdpZCkpOgorICAgICAgICAgICAgbnVtcmVzdWx0cyArPSAxCisgICAgICAg ICAgICBpZiAoaXNfc2NhbGFyX3JlZyhyZWd0eXBlKSk6CisgICAgICAgICAgICAgICAgbnVtc2Nh bGFycmVzdWx0cyArPSAxCisgICAgICAgIGlmIChpc19yZWFkd3JpdGUocmVnaWQpKToKKyAgICAg ICAgICAgIGlmIChpc19zY2FsYXJfcmVnKHJlZ3R5cGUpKToKKyAgICAgICAgICAgICAgICBudW1z Y2FsYXJyZWFkd3JpdGUgKz0gMQorCisgICAgaWYgKG51bXNjYWxhcnJlc3VsdHMgPiAxKToKKyAg ICAgICAgIyMgVGhlIGhlbHBlciBpcyBib2d1cyB3aGVuIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUg cmVzdWx0CisgICAgICAgIGYud3JpdGUoJ0RFRl9IRUxQRVJfMSglcywgdm9pZCwgZW52KVxuJyAl IHRhZykKKyAgICBlbHNlOgorICAgICAgICAjIyBGaWd1cmUgb3V0IGhvdyBtYW55IGFyZ3VtZW50 cyB0aGUgaGVscGVyIHdpbGwgdGFrZQorICAgICAgICBpZiAobnVtc2NhbGFycmVzdWx0cyA9PSAw KToKKyAgICAgICAgICAgIGRlZl9oZWxwZXJfc2l6ZSA9IGxlbihyZWdzKStsZW4oaW1tcykrbnVt c2NhbGFycmVhZHdyaXRlKzEKKyAgICAgICAgICAgIGlmIG5lZWRfcGFydDEodGFnKTogZGVmX2hl bHBlcl9zaXplICs9IDEKKyAgICAgICAgICAgIGlmIG5lZWRfc2xvdCh0YWcpOiBkZWZfaGVscGVy X3NpemUgKz0gMQorICAgICAgICAgICAgZi53cml0ZSgnREVGX0hFTFBFUl8lcyglcycgJSAoZGVm X2hlbHBlcl9zaXplLCB0YWcpKQorICAgICAgICAgICAgIyMgVGhlIHJldHVybiB0eXBlIGlzIHZv aWQKKyAgICAgICAgICAgIGYud3JpdGUoJywgdm9pZCcgKQorICAgICAgICBlbHNlOgorICAgICAg ICAgICAgZGVmX2hlbHBlcl9zaXplID0gbGVuKHJlZ3MpK2xlbihpbW1zKStudW1zY2FsYXJyZWFk d3JpdGUKKyAgICAgICAgICAgIGlmIG5lZWRfcGFydDEodGFnKTogZGVmX2hlbHBlcl9zaXplICs9 IDEKKyAgICAgICAgICAgIGlmIG5lZWRfc2xvdCh0YWcpOiBkZWZfaGVscGVyX3NpemUgKz0gMQor ICAgICAgICAgICAgZi53cml0ZSgnREVGX0hFTFBFUl8lcyglcycgJSAoZGVmX2hlbHBlcl9zaXpl LCB0YWcpKQorCisgICAgICAgICMjIEdlbmVyYXRlIHRoZSBxZW11IERFRl9IRUxQRVIgdHlwZSBm b3IgZWFjaCByZXN1bHQKKyAgICAgICAgaT0wCisgICAgICAgIGZvciByZWd0eXBlLHJlZ2lkLHRv c3MsbnVtcmVncyBpbiByZWdzOgorICAgICAgICAgICAgaWYgKGlzX3dyaXR0ZW4ocmVnaWQpKToK KyAgICAgICAgICAgICAgICBnZW5fZGVmX2hlbHBlcl9vcG4oZiwgdGFnLCByZWd0eXBlLCByZWdp ZCwgdG9zcywgbnVtcmVncywgaSkKKyAgICAgICAgICAgICAgICBpICs9IDEKKworICAgICAgICAj IyBQdXQgdGhlIGVudiBiZXR3ZWVuIHRoZSBvdXRwdXRzIGFuZCBpbnB1dHMKKyAgICAgICAgZi53 cml0ZSgnLCBlbnYnICkKKyAgICAgICAgaSArPSAxCisKKyAgICAgICAgIyMgR2VuZXJhdGUgdGhl IHFlbXUgdHlwZSBmb3IgZWFjaCBpbnB1dCBvcGVyYW5kIChyZWdzIGFuZCBpbW1lZGlhdGVzKQor ICAgICAgICBmb3IgcmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MgaW4gcmVnczoKKyAgICAgICAg ICAgIGlmIChpc19yZWFkKHJlZ2lkKSk6CisgICAgICAgICAgICAgICAgZ2VuX2RlZl9oZWxwZXJf b3BuKGYsIHRhZywgcmVndHlwZSwgcmVnaWQsIHRvc3MsIG51bXJlZ3MsIGkpCisgICAgICAgICAg ICAgICAgaSArPSAxCisgICAgICAgIGZvciBpbW1sZXR0LGJpdHMsaW1tc2hpZnQgaW4gaW1tczoK KyAgICAgICAgICAgIGYud3JpdGUoIiwgczMyIikKKworICAgICAgICAjIyBBZGQgdGhlIGFyZ3Vt ZW50cyBmb3IgdGhlIGluc3RydWN0aW9uIHNsb3QgYW5kIHBhcnQxIChpZiBuZWVkZWQpCisgICAg ICAgIGlmIG5lZWRfc2xvdCh0YWcpOiBmLndyaXRlKCcsIGkzMicgKQorICAgICAgICBpZiBuZWVk X3BhcnQxKHRhZyk6IGYud3JpdGUoJyAsIGkzMicgKQorICAgICAgICBmLndyaXRlKCcpXG4nKQor ICAgIGYud3JpdGUoJyNlbmRpZlxuJykKKworIyMKKyMjIEhlbHBlcnMgZm9yIGdlbl90Y2dfZnVu YworIyMKK2RlZiBnZW5fZGVjbF9lYV90Y2coZik6CisgICAgZi53cml0ZSgiREVDTF9FQTtcbiIp CisKK2RlZiBnZW5fZnJlZV9lYV90Y2coZik6CisgICAgZi53cml0ZSgiRlJFRV9FQTtcbiIpCisK K2RlZiBnZW5wdHJfZGVjbChmLHJlZ3R5cGUscmVnaWQscmVnbm8pOgorICAgIHJlZ049IiVzJXNO IiAlIChyZWd0eXBlLHJlZ2lkKQorICAgIG1hY3JvID0gIkRFQ0xfJXNSRUdfJXMiICUgKHJlZ3R5 cGUsIHJlZ2lkKQorICAgIGYud3JpdGUoIiVzKCVzJXNWLCAlcywgJWQsIDApO1xuIiAlIFwKKyAg ICAgICAgKG1hY3JvLCByZWd0eXBlLCByZWdpZCwgcmVnTiwgcmVnbm8pKQorCitkZWYgZ2VucHRy X2RlY2xfbmV3KGYscmVndHlwZSxyZWdpZCxyZWdubyk6CisgICAgcmVnTj0iJXMlc1giICUgKHJl Z3R5cGUscmVnaWQpCisgICAgbWFjcm8gPSAiREVDTF9ORVdfJXNSRUdfJXMiICUgKHJlZ3R5cGUs IHJlZ2lkKQorICAgIGYud3JpdGUoIiVzKCVzJXNOLCAlcywgJWQsIDApO1xuIiAlIFwKKyAgICAg ICAgKG1hY3JvLCByZWd0eXBlLCByZWdpZCwgcmVnTiwgcmVnbm8pKQorCitkZWYgZ2VucHRyX2Rl Y2xfb3BuKGYsIHRhZywgcmVndHlwZSwgcmVnaWQsIHRvc3MsIG51bXJlZ3MsIGkpOgorICAgIGlm IChpc19wYWlyKHJlZ2lkKSk6CisgICAgICAgIGdlbnB0cl9kZWNsKGYscmVndHlwZSxyZWdpZCxp KQorICAgIGVsaWYgKGlzX3NpbmdsZShyZWdpZCkpOgorICAgICAgICBpZiBpc19vbGRfdmFsKHJl Z3R5cGUsIHJlZ2lkLCB0YWcpOgorICAgICAgICAgICAgZ2VucHRyX2RlY2woZixyZWd0eXBlLHJl Z2lkLGkpCisgICAgICAgIGVsaWYgaXNfbmV3X3ZhbChyZWd0eXBlLCByZWdpZCwgdGFnKToKKyAg ICAgICAgICAgIGdlbnB0cl9kZWNsX25ldyhmLHJlZ3R5cGUscmVnaWQsaSkKKyAgICAgICAgZWxz ZToKKyAgICAgICAgICAgIHByaW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIscmVndHlwZSxyZWdp ZCx0b3NzLG51bXJlZ3MpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBw YXJzZTogIixyZWd0eXBlLHJlZ2lkLHRvc3MsbnVtcmVncykKKworZGVmIGdlbnB0cl9kZWNsX2lt bShmLGltbWxldHQpOgorICAgIGlmIChpbW1sZXR0LmlzdXBwZXIoKSk6CisgICAgICAgIGkgPSAx CisgICAgZWxzZToKKyAgICAgICAgaSA9IDAKKyAgICBmLndyaXRlKCJERUNMX0lNTSglcywlZCk7 XG4iICUgKGltbV9uYW1lKGltbWxldHQpLGkpKQorCitkZWYgZ2VucHRyX2ZyZWUoZixyZWd0eXBl LHJlZ2lkLHJlZ25vKToKKyAgICBtYWNybyA9ICJGUkVFXyVzUkVHXyVzIiAlIChyZWd0eXBlLCBy ZWdpZCkKKyAgICBmLndyaXRlKCIlcyglcyVzVik7XG4iICUgKG1hY3JvLCByZWd0eXBlLCByZWdp ZCkpCisKK2RlZiBnZW5wdHJfZnJlZV9uZXcoZixyZWd0eXBlLHJlZ2lkLHJlZ25vKToKKyAgICBt YWNybyA9ICJGUkVFX05FV18lc1JFR18lcyIgJSAocmVndHlwZSwgcmVnaWQpCisgICAgZi53cml0 ZSgiJXMoJXMlc04pO1xuIiAlIChtYWNybywgcmVndHlwZSwgcmVnaWQpKQorCitkZWYgZ2VucHRy X2ZyZWVfb3BuKGYscmVndHlwZSxyZWdpZCxpKToKKyAgICBpZiAoaXNfcGFpcihyZWdpZCkpOgor ICAgICAgICBnZW5wdHJfZnJlZShmLHJlZ3R5cGUscmVnaWQsaSkKKyAgICBlbGlmIChpc19zaW5n bGUocmVnaWQpKToKKyAgICAgICAgaWYgaXNfb2xkX3ZhbChyZWd0eXBlLCByZWdpZCwgdGFnKToK KyAgICAgICAgICAgIGdlbnB0cl9mcmVlKGYscmVndHlwZSxyZWdpZCxpKQorICAgICAgICBlbGlm IGlzX25ld192YWwocmVndHlwZSwgcmVnaWQsIHRhZyk6CisgICAgICAgICAgICBnZW5wdHJfZnJl ZV9uZXcoZixyZWd0eXBlLHJlZ2lkLGkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmlu dCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzKQorICAg IGVsc2U6CisgICAgICAgIHByaW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIscmVndHlwZSxyZWdp ZCx0b3NzLG51bXJlZ3MpCisKK2RlZiBnZW5wdHJfZnJlZV9pbW0oZixpbW1sZXR0KToKKyAgICBm LndyaXRlKCJGUkVFX0lNTSglcyk7XG4iICUgKGltbV9uYW1lKGltbWxldHQpKSkKKworZGVmIGdl bnB0cl9zcmNfcmVhZChmLHJlZ3R5cGUscmVnaWQpOgorICAgIG1hY3JvID0gIlJFQURfJXNSRUdf JXMiICUgKHJlZ3R5cGUsIHJlZ2lkKQorICAgIGYud3JpdGUoIiVzKCVzJXNWLCAlcyVzTik7XG4i ICUgXAorICAgICAgICAobWFjcm8scmVndHlwZSxyZWdpZCxyZWd0eXBlLHJlZ2lkKSkKKworZGVm IGdlbnB0cl9zcmNfcmVhZF9uZXcoZixyZWd0eXBlLHJlZ2lkKToKKyAgICBtYWNybyA9ICJSRUFE X05FV18lc1JFR18lcyIgJSAocmVndHlwZSwgcmVnaWQpCisgICAgZi53cml0ZSgiJXMoJXMlc04s ICVzJXNYKTtcbiIgJSBcCisgICAgICAgIChtYWNybyxyZWd0eXBlLHJlZ2lkLHJlZ3R5cGUscmVn aWQpKQorCitkZWYgZ2VucHRyX3NyY19yZWFkX29wbihmLHJlZ3R5cGUscmVnaWQpOgorICAgIGlm IChpc19wYWlyKHJlZ2lkKSk6CisgICAgICAgIGdlbnB0cl9zcmNfcmVhZChmLHJlZ3R5cGUscmVn aWQpCisgICAgZWxpZiAoaXNfc2luZ2xlKHJlZ2lkKSk6CisgICAgICAgIGlmIGlzX29sZF92YWwo cmVndHlwZSwgcmVnaWQsIHRhZyk6CisgICAgICAgICAgICBnZW5wdHJfc3JjX3JlYWQoZixyZWd0 eXBlLHJlZ2lkKQorICAgICAgICBlbGlmIGlzX25ld192YWwocmVndHlwZSwgcmVnaWQsIHRhZyk6 CisgICAgICAgICAgICBnZW5wdHJfc3JjX3JlYWRfbmV3KGYscmVndHlwZSxyZWdpZCkKKyAgICAg ICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIscmVndHlw ZSxyZWdpZCx0b3NzLG51bXJlZ3MpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoIkJhZCByZWdp c3RlciBwYXJzZTogIixyZWd0eXBlLHJlZ2lkLHRvc3MsbnVtcmVncykKKworZGVmIGdlbl9oZWxw ZXJfY2FsbF9vcG4oZiwgdGFnLCByZWd0eXBlLCByZWdpZCwgdG9zcywgbnVtcmVncywgaSk6Cisg ICAgaWYgKGkgPiAwKTogZi53cml0ZSgiLCAiKQorICAgIGlmIChpc19wYWlyKHJlZ2lkKSk6Cisg ICAgICAgIGYud3JpdGUoIiVzJXNWIiAlIChyZWd0eXBlLHJlZ2lkKSkKKyAgICBlbGlmIChpc19z aW5nbGUocmVnaWQpKToKKyAgICAgICAgaWYgaXNfb2xkX3ZhbChyZWd0eXBlLCByZWdpZCwgdGFn KToKKyAgICAgICAgICAgIGYud3JpdGUoIiVzJXNWIiAlIChyZWd0eXBlLHJlZ2lkKSkKKyAgICAg ICAgZWxpZiBpc19uZXdfdmFsKHJlZ3R5cGUsIHJlZ2lkLCB0YWcpOgorICAgICAgICAgICAgZi53 cml0ZSgiJXMlc04iICUgKHJlZ3R5cGUscmVnaWQpKQorICAgICAgICBlbHNlOgorICAgICAgICAg ICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIixyZWd0eXBlLHJlZ2lkLHRvc3MsbnVtcmVn cykKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLHJlZ3R5 cGUscmVnaWQsdG9zcyxudW1yZWdzKQorCitkZWYgZ2VuX2hlbHBlcl9kZWNsX2ltbShmLGltbWxl dHQpOgorICAgIGYud3JpdGUoIkRFQ0xfVENHX0lNTSh0Y2d2XyVzLCAlcyk7XG4iICUgXAorICAg ICAgICAoaW1tX25hbWUoaW1tbGV0dCksIGltbV9uYW1lKGltbWxldHQpKSkKKworZGVmIGdlbl9o ZWxwZXJfY2FsbF9pbW0oZixpbW1sZXR0KToKKyAgICBmLndyaXRlKCIsIHRjZ3ZfJXMiICUgaW1t X25hbWUoaW1tbGV0dCkpCisKK2RlZiBnZW5faGVscGVyX2ZyZWVfaW1tKGYsaW1tbGV0dCk6Cisg ICAgZi53cml0ZSgiRlJFRV9UQ0dfSU1NKHRjZ3ZfJXMpO1xuIiAlIGltbV9uYW1lKGltbWxldHQp KQorCitkZWYgZ2VucHRyX2RzdF93cml0ZShmLHJlZ3R5cGUsIHJlZ2lkKToKKyAgICBtYWNybyA9 ICJXUklURV8lc1JFR18lcyIgJSAocmVndHlwZSwgcmVnaWQpCisgICAgZi53cml0ZSgiJXMoJXMl c04sICVzJXNWKTtcbiIgJSAobWFjcm8sIHJlZ3R5cGUsIHJlZ2lkLCByZWd0eXBlLCByZWdpZCkp CisKK2RlZiBnZW5wdHJfZHN0X3dyaXRlX29wbihmLHJlZ3R5cGUsIHJlZ2lkLCB0YWcpOgorICAg IGlmIChpc19wYWlyKHJlZ2lkKSk6CisgICAgICAgIGdlbnB0cl9kc3Rfd3JpdGUoZiwgcmVndHlw ZSwgcmVnaWQpCisgICAgZWxpZiAoaXNfc2luZ2xlKHJlZ2lkKSk6CisgICAgICAgIGdlbnB0cl9k c3Rfd3JpdGUoZiwgcmVndHlwZSwgcmVnaWQpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoIkJh ZCByZWdpc3RlciBwYXJzZTogIixyZWd0eXBlLHJlZ2lkLHRvc3MsbnVtcmVncykKKworIyMKKyMj IEdlbmVyYXRlIHRoZSBUQ0cgY29kZSB0byBjYWxsIHRoZSBoZWxwZXIKKyMjICAgICBGb3IgQTJf YWRkOiBSZDMyPWFkZChSczMyLFJ0MzIpLCB7IFJkVj1Sc1YrUnRWO30KKyMjICAgICBXZSBwcm9k dWNlOgorIyMgICAgICAgeworIyMgICAgICAgLyogQTJfYWRkICovCisjIyAgICAgICBERUNMX1JS RUdfZChSZFYsIFJkTiwgMCwgMCk7CisjIyAgICAgICBERUNMX1JSRUdfcyhSc1YsIFJzTiwgMSwg MCk7CisjIyAgICAgICBERUNMX1JSRUdfdChSdFYsIFJ0TiwgMiwgMCk7CisjIyAgICAgICBSRUFE X1JSRUdfcyhSc1YsIFJzTik7CisjIyAgICAgICBSRUFEX1JSRUdfdChSdFYsIFJ0Tik7CisjIyAg ICAgICBmV1JBUF9BMl9hZGQoCisjIyAgICAgICBkbyB7CisjIyAgICAgICBnZW5faGVscGVyX0Ey X2FkZChSZFYsIGNwdV9lbnYsIFJzViwgUnRWKTsKKyMjICAgICAgIHdoaWxlICgwKSwKKyMjICAg ICAgIHsgUmRWPVJzVitSdFY7fSk7CisjIyAgICAgICBXUklURV9SUkVHX2QoUmROLCBSZFYpOwor IyMgICAgICAgRlJFRV9SUkVHX2QoUmRWKTsKKyMjICAgICAgIEZSRUVfUlJFR19zKFJzVik7Cisj IyAgICAgICBGUkVFX1JSRUdfdChSdFYpOworIyMgICAgICAgLyogQTJfYWRkICovCisjIyAgICAg ICB9CisjIworZGVmIGdlbl90Y2dfZnVuYyhmLCB0YWcsIHJlZ3MsIGltbXMpOgorICAgIGYud3Jp dGUoJ3tcbicpCisgICAgZi53cml0ZSgnLyogJXMgKi9cbicgJSB0YWcpCisgICAgaWYgbmVlZF9l YSh0YWcpOiBnZW5fZGVjbF9lYV90Y2coZikKKyAgICBpPTAKKyAgICAjIyBEZWNsYXJlIGFsbCB0 aGUgb3BlcmFuZHMgKHJlZ3MgYW5kIGltbWVkaWF0ZXMpCisgICAgZm9yIHJlZ3R5cGUscmVnaWQs dG9zcyxudW1yZWdzIGluIHJlZ3M6CisgICAgICAgIGdlbnB0cl9kZWNsX29wbihmLCB0YWcsIHJl Z3R5cGUsIHJlZ2lkLCB0b3NzLCBudW1yZWdzLCBpKQorICAgICAgICBpICs9IDEKKyAgICBmb3Ig aW1tbGV0dCxiaXRzLGltbXNoaWZ0IGluIGltbXM6CisgICAgICAgIGdlbnB0cl9kZWNsX2ltbShm LGltbWxldHQpCisKKyAgICBpZiAnQV9QUklWJyBpbiBhdHRyaWJkaWN0W3RhZ106CisgICAgICAg IGYud3JpdGUoJ2ZDSEVDS0ZPUlBSSVYoKTtcbicpCisgICAgaWYgJ0FfR1VFU1QnIGluIGF0dHJp YmRpY3RbdGFnXToKKyAgICAgICAgZi53cml0ZSgnZkNIRUNLRk9SR1VFU1QoKTtcbicpCisgICAg aWYgJ0FfRlBPUCcgaW4gYXR0cmliZGljdFt0YWddOgorICAgICAgICBmLndyaXRlKCdmRlBPUF9T VEFSVCgpO1xuJyk7CisKKyAgICAjIyBSZWFkIGFsbCB0aGUgaW5wdXRzCisgICAgZm9yIHJlZ3R5 cGUscmVnaWQsdG9zcyxudW1yZWdzIGluIHJlZ3M6CisgICAgICAgIGlmIChpc19yZWFkKHJlZ2lk KSk6CisgICAgICAgICAgICBnZW5wdHJfc3JjX3JlYWRfb3BuKGYscmVndHlwZSxyZWdpZCkKKwor ICAgICMjIEdlbmVyYXRlIHRoZSBjYWxsIHRvIHRoZSBoZWxwZXIKKyAgICBmLndyaXRlKCJmV1JB UF8lcyhcbiIgJSB0YWcpCisgICAgZi53cml0ZSgiZG8ge1xuIikKKyAgICBmb3IgaW1tbGV0dCxi aXRzLGltbXNoaWZ0IGluIGltbXM6CisgICAgICAgIGdlbl9oZWxwZXJfZGVjbF9pbW0oZixpbW1s ZXR0KQorICAgIGlmIG5lZWRfcGFydDEodGFnKTogZi53cml0ZSgiUEFSVDFfV1JBUCgiKQorICAg IGlmIG5lZWRfc2xvdCh0YWcpOiBmLndyaXRlKCJTTE9UX1dSQVAoIikKKyAgICBmLndyaXRlKCJn ZW5faGVscGVyXyVzKCIgJSAodGFnKSkKKyAgICBpPTAKKyAgICAjIyBJZiB0aGVyZSBpcyBhIHNj YWxhciByZXN1bHQsIGl0IGlzIHRoZSByZXR1cm4gdHlwZQorICAgIGZvciByZWd0eXBlLHJlZ2lk LHRvc3MsbnVtcmVncyBpbiByZWdzOgorICAgICAgICBpZiAoaXNfd3JpdHRlbihyZWdpZCkpOgor ICAgICAgICAgICAgZ2VuX2hlbHBlcl9jYWxsX29wbihmLCB0YWcsIHJlZ3R5cGUsIHJlZ2lkLCB0 b3NzLCBudW1yZWdzLCBpKQorICAgICAgICAgICAgaSArPSAxCisgICAgaWYgKGkgPiAwKTogZi53 cml0ZSgiLCAiKQorICAgIGYud3JpdGUoImNwdV9lbnYiKQorICAgIGk9MQorICAgIGZvciByZWd0 eXBlLHJlZ2lkLHRvc3MsbnVtcmVncyBpbiByZWdzOgorICAgICAgICBpZiAoaXNfcmVhZChyZWdp ZCkpOgorICAgICAgICAgICAgZ2VuX2hlbHBlcl9jYWxsX29wbihmLCB0YWcsIHJlZ3R5cGUsIHJl Z2lkLCB0b3NzLCBudW1yZWdzLCBpKQorICAgICAgICAgICAgaSArPSAxCisgICAgZm9yIGltbWxl dHQsYml0cyxpbW1zaGlmdCBpbiBpbW1zOgorICAgICAgICBnZW5faGVscGVyX2NhbGxfaW1tKGYs aW1tbGV0dCkKKworICAgIGlmIG5lZWRfc2xvdCh0YWcpOiBmLndyaXRlKCIsIHNsb3QiKQorICAg IGlmIG5lZWRfcGFydDEodGFnKTogZi53cml0ZSgiLCBwYXJ0MSIgKQorICAgIGYud3JpdGUoIiki KQorICAgIGlmIG5lZWRfc2xvdCh0YWcpOiBmLndyaXRlKCIpIikKKyAgICBpZiBuZWVkX3BhcnQx KHRhZyk6IGYud3JpdGUoIikiKQorICAgIGYud3JpdGUoIjtcbiIpCisgICAgZm9yIGltbWxldHQs Yml0cyxpbW1zaGlmdCBpbiBpbW1zOgorICAgICAgICBnZW5faGVscGVyX2ZyZWVfaW1tKGYsaW1t bGV0dCkKKyAgICBmLndyaXRlKCJ9IHdoaWxlICgwKSIpCisgICAgZi53cml0ZSgiLFxuJXMpO1xu IiAlIHNlbWRpY3RbdGFnXSApCisKKyAgICAjIyBXcml0ZSBhbGwgdGhlIG91dHB1dHMKKyAgICBm b3IgcmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MgaW4gcmVnczoKKyAgICAgICAgaWYgKGlzX3dy aXR0ZW4ocmVnaWQpKToKKyAgICAgICAgICAgIGdlbnB0cl9kc3Rfd3JpdGVfb3BuKGYscmVndHlw ZSwgcmVnaWQsIHRhZykKKworICAgIGlmICdBX0ZQT1AnIGluIGF0dHJpYmRpY3RbdGFnXToKKyAg ICAgICAgZi53cml0ZSgnZkZQT1BfRU5EKCk7XG4nKTsKKworCisgICAgIyMgRnJlZSBhbGwgdGhl IG9wZXJhbmRzIChyZWdzIGFuZCBpbW1lZGlhdGVzKQorICAgIGlmIG5lZWRfZWEodGFnKTogZ2Vu X2ZyZWVfZWFfdGNnKGYpCisgICAgZm9yIHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzIGluIHJl Z3M6CisgICAgICAgIGdlbnB0cl9mcmVlX29wbihmLHJlZ3R5cGUscmVnaWQsaSkKKyAgICAgICAg aSArPSAxCisgICAgZm9yIGltbWxldHQsYml0cyxpbW1zaGlmdCBpbiBpbW1zOgorICAgICAgICBn ZW5wdHJfZnJlZV9pbW0oZixpbW1sZXR0KQorCisgICAgZi53cml0ZSgiLyogJXMgKi9cbiIgJSB0 YWcpCisgICAgZi53cml0ZSgifSIpCisKKyMjCisjIyBIZWxwZXJzIGZvciBnZW5faGVscGVyX2Rl ZmluaXRpb24KKyMjCitkZWYgZ2VuX2RlY2xfZWEoZik6CisgICAgZi53cml0ZSgic2l6ZTR1X3Qg RUE7XG4iKQorCitkZWYgZ2VuX2hlbHBlcl9yZXR1cm5fdHlwZShmLHJlZ3R5cGUscmVnaWQscmVn bm8pOgorICAgIGlmIHJlZ25vID4gMSA6IGYud3JpdGUoIiwgIikKKyAgICBmLndyaXRlKCJpbnQz Ml90IikKKworZGVmIGdlbl9oZWxwZXJfcmV0dXJuX3R5cGVfcGFpcihmLHJlZ3R5cGUscmVnaWQs cmVnbm8pOgorICAgIGlmIHJlZ25vID4gMSA6IGYud3JpdGUoIiwgIikKKyAgICBmLndyaXRlKCJp bnQ2NF90IikKKworZGVmIGdlbl9oZWxwZXJfYXJnKGYscmVndHlwZSxyZWdpZCxyZWdubyk6Cisg ICAgaWYgcmVnbm8gPiAwIDogZi53cml0ZSgiLCAiICkKKyAgICBmLndyaXRlKCJpbnQzMl90ICVz JXNWIiAlIChyZWd0eXBlLHJlZ2lkKSkKKworZGVmIGdlbl9oZWxwZXJfYXJnX25ldyhmLHJlZ3R5 cGUscmVnaWQscmVnbm8pOgorICAgIGlmIHJlZ25vID49IDAgOiBmLndyaXRlKCIsICIgKQorICAg IGYud3JpdGUoImludDMyX3QgJXMlc04iICUgKHJlZ3R5cGUscmVnaWQpKQorCitkZWYgZ2VuX2hl bHBlcl9hcmdfcGFpcihmLHJlZ3R5cGUscmVnaWQscmVnbm8pOgorICAgIGlmIHJlZ25vID49IDAg OiBmLndyaXRlKCIsICIpCisgICAgZi53cml0ZSgiaW50NjRfdCAlcyVzViIgJSAocmVndHlwZSxy ZWdpZCkpCisKK2RlZiBnZW5faGVscGVyX2FyZ19vcG4oZixyZWd0eXBlLHJlZ2lkLGkpOgorICAg IGlmIChpc19wYWlyKHJlZ2lkKSk6CisgICAgICAgIGdlbl9oZWxwZXJfYXJnX3BhaXIoZixyZWd0 eXBlLHJlZ2lkLGkpCisgICAgZWxpZiAoaXNfc2luZ2xlKHJlZ2lkKSk6CisgICAgICAgIGlmIGlz X29sZF92YWwocmVndHlwZSwgcmVnaWQsIHRhZyk6CisgICAgICAgICAgICBnZW5faGVscGVyX2Fy ZyhmLHJlZ3R5cGUscmVnaWQsaSkKKyAgICAgICAgZWxpZiBpc19uZXdfdmFsKHJlZ3R5cGUsIHJl Z2lkLCB0YWcpOgorICAgICAgICAgICAgZ2VuX2hlbHBlcl9hcmdfbmV3KGYscmVndHlwZSxyZWdp ZCxpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJz ZTogIixyZWd0eXBlLHJlZ2lkLHRvc3MsbnVtcmVncykKKyAgICBlbHNlOgorICAgICAgICBwcmlu dCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzKQorCitk ZWYgZ2VuX2hlbHBlcl9hcmdfaW1tKGYsaW1tbGV0dCk6CisgICAgZi53cml0ZSgiLCBpbnQzMl90 ICVzIiAlIChpbW1fbmFtZShpbW1sZXR0KSkpCisKK2RlZiBnZW5faGVscGVyX2Rlc3RfZGVjbChm LHJlZ3R5cGUscmVnaWQscmVnbm8sc3ViZmllbGQ9IiIpOgorICAgIGYud3JpdGUoImludDMyX3Qg JXMlc1YlcyA9IDA7XG4iICUgXAorICAgICAgICAocmVndHlwZSxyZWdpZCxzdWJmaWVsZCkpCisK K2RlZiBnZW5faGVscGVyX2Rlc3RfZGVjbF9wYWlyKGYscmVndHlwZSxyZWdpZCxyZWdubyxzdWJm aWVsZD0iIik6CisgICAgZi53cml0ZSgiaW50NjRfdCAlcyVzViVzID0gMDtcbiIgJSBcCisgICAg ICAgIChyZWd0eXBlLHJlZ2lkLHN1YmZpZWxkKSkKKworZGVmIGdlbl9oZWxwZXJfZGVzdF9kZWNs X29wbihmLHJlZ3R5cGUscmVnaWQsaSk6CisgICAgaWYgKGlzX3BhaXIocmVnaWQpKToKKyAgICAg ICAgZ2VuX2hlbHBlcl9kZXN0X2RlY2xfcGFpcihmLHJlZ3R5cGUscmVnaWQsaSkKKyAgICBlbGlm IChpc19zaW5nbGUocmVnaWQpKToKKyAgICAgICAgZ2VuX2hlbHBlcl9kZXN0X2RlY2woZixyZWd0 eXBlLHJlZ2lkLGkpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJz ZTogIixyZWd0eXBlLHJlZ2lkLHRvc3MsbnVtcmVncykKKworZGVmIGdlbl9oZWxwZXJfcmV0dXJu KGYscmVndHlwZSxyZWdpZCxyZWdubyk6CisgICAgZi53cml0ZSgicmV0dXJuICVzJXNWO1xuIiAl IChyZWd0eXBlLHJlZ2lkKSkKKworZGVmIGdlbl9oZWxwZXJfcmV0dXJuX3BhaXIoZixyZWd0eXBl LHJlZ2lkLHJlZ25vKToKKyAgICBmLndyaXRlKCJyZXR1cm4gJXMlc1Y7XG4iICUgKHJlZ3R5cGUs cmVnaWQpKQorCitkZWYgZ2VuX2hlbHBlcl9yZXR1cm5fb3BuKGYsIHJlZ3R5cGUsIHJlZ2lkLCBp KToKKyAgICBpZiAoaXNfcGFpcihyZWdpZCkpOgorICAgICAgICBnZW5faGVscGVyX3JldHVybl9w YWlyKGYscmVndHlwZSxyZWdpZCxpKQorICAgIGVsaWYgKGlzX3NpbmdsZShyZWdpZCkpOgorICAg ICAgICBnZW5faGVscGVyX3JldHVybihmLHJlZ3R5cGUscmVnaWQsaSkKKyAgICBlbHNlOgorICAg ICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLHJlZ3R5cGUscmVnaWQsdG9zcyxudW1y ZWdzKQorCisjIworIyMgR2VuZXJhdGUgdGhlIFRDRyBjb2RlIHRvIGNhbGwgdGhlIGhlbHBlcgor IyMgICAgIEZvciBBMl9hZGQ6IFJkMzI9YWRkKFJzMzIsUnQzMiksIHsgUmRWPVJzVitSdFY7fQor IyMgICAgIFdlIHByb2R1Y2U6CisjIyAgICAgICAjaWZuZGVmIGZXUkFQX0EyX2FkZAorIyMgICAg ICAgaW50MzJfdCBIRUxQRVIoQTJfYWRkKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgaW50MzJfdCBS c1YsIGludDMyX3QgUnRWKQorIyMgICAgICAgeworIyMgICAgICAgdWludDMyX3Qgc2xvdCA9IDQ7 IHNsb3QgPSBzbG90OworIyMgICAgICAgaW50MzJfdCBSZFYgPSAwOworIyMgICAgICAgeyBSZFY9 UnNWK1J0Vjt9CisjIyAgICAgICBDT1VOVF9IRUxQRVIoQTJfYWRkKTsKKyMjICAgICAgIHJldHVy biBSZFY7CisjIyAgICAgICB9CisjIyAgICAgICAjZW5kaWYKKyMjCitkZWYgZ2VuX2hlbHBlcl9k ZWZpbml0aW9uKGYsIHRhZywgcmVncywgaW1tcyk6CisgICAgZi53cml0ZSgnI2lmbmRlZiBmV1JB UF8lc1xuJyAlIHRhZykKKyAgICBudW1yZXN1bHRzID0gMAorICAgIG51bXNjYWxhcnJlc3VsdHMg PSAwCisgICAgbnVtc2NhbGFycmVhZHdyaXRlID0gMAorICAgIGZvciByZWd0eXBlLHJlZ2lkLHRv c3MsbnVtcmVncyBpbiByZWdzOgorICAgICAgICBpZiAoaXNfd3JpdHRlbihyZWdpZCkpOgorICAg ICAgICAgICAgbnVtcmVzdWx0cyArPSAxCisgICAgICAgICAgICBpZiAoaXNfc2NhbGFyX3JlZyhy ZWd0eXBlKSk6CisgICAgICAgICAgICAgICAgbnVtc2NhbGFycmVzdWx0cyArPSAxCisgICAgICAg IGlmIChpc19yZWFkd3JpdGUocmVnaWQpKToKKyAgICAgICAgICAgIGlmIChpc19zY2FsYXJfcmVn KHJlZ3R5cGUpKToKKyAgICAgICAgICAgICAgICBudW1zY2FsYXJyZWFkd3JpdGUgKz0gMQorCisg ICAgaWYgKG51bXNjYWxhcnJlc3VsdHMgPiAxKToKKyAgICAgICAgIyMgVGhlIGhlbHBlciBpcyBi b2d1cyB3aGVuIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcmVzdWx0CisgICAgICAgIGYud3JpdGUo InZvaWQgSEVMUEVSKCVzKShDUFVIZXhhZ29uU3RhdGUgKmVudikgeyBCT0dVU19IRUxQRVIoJXMp OyB9XG4iCisgICAgICAgICAgICAgICAgJSAodGFnLCB0YWcpKQorICAgIGVsc2U6CisgICAgICAg ICMjIFRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24gaXMgdGhlIHR5cGUgb2YgdGhlIGRl c3RpbmF0aW9uCisgICAgICAgICMjIHJlZ2lzdGVyCisgICAgICAgIGk9MAorICAgICAgICBmb3Ig cmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MgaW4gcmVnczoKKyAgICAgICAgICAgIGlmIChpc193 cml0dGVuKHJlZ2lkKSk6CisgICAgICAgICAgICAgICAgaWYgKGlzX3BhaXIocmVnaWQpKToKKyAg ICAgICAgICAgICAgICAgICAgZ2VuX2hlbHBlcl9yZXR1cm5fdHlwZV9wYWlyKGYscmVndHlwZSxy ZWdpZCxpKQorICAgICAgICAgICAgICAgIGVsaWYgKGlzX3NpbmdsZShyZWdpZCkpOgorICAgICAg ICAgICAgICAgICAgICBnZW5faGVscGVyX3JldHVybl90eXBlKGYscmVndHlwZSxyZWdpZCxpKQor ICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJCYWQgcmVn aXN0ZXIgcGFyc2U6ICIscmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MpCisgICAgICAgICAgICBp ICs9IDEKKworICAgICAgICBpZiAobnVtc2NhbGFycmVzdWx0cyA9PSAwKToKKyAgICAgICAgICAg IGYud3JpdGUoInZvaWQiKQorICAgICAgICBmLndyaXRlKCIgSEVMUEVSKCVzKShDUFVIZXhhZ29u U3RhdGUgKmVudiIgJSB0YWcpCisKKyAgICAgICAgaSA9IDEKKyAgICAgICAgIyMgQXJndW1lbnRz IHRvIHRoZSBoZWxwZXIgZnVuY3Rpb24gYXJlIHRoZSBzb3VyY2UgcmVncyBhbmQgaW1tZWRpYXRl cworICAgICAgICBmb3IgcmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MgaW4gcmVnczoKKyAgICAg ICAgICAgIGlmIChpc19yZWFkKHJlZ2lkKSk6CisgICAgICAgICAgICAgICAgZ2VuX2hlbHBlcl9h cmdfb3BuKGYscmVndHlwZSxyZWdpZCxpKQorICAgICAgICAgICAgICAgIGkgKz0gMQorICAgICAg ICBmb3IgaW1tbGV0dCxiaXRzLGltbXNoaWZ0IGluIGltbXM6CisgICAgICAgICAgICBnZW5faGVs cGVyX2FyZ19pbW0oZixpbW1sZXR0KQorICAgICAgICAgICAgaSArPSAxCisgICAgICAgIGlmIG5l ZWRfc2xvdCh0YWcpOgorICAgICAgICAgICAgaWYgaSA+IDA6IGYud3JpdGUoIiwgIikKKyAgICAg ICAgICAgIGYud3JpdGUoInVpbnQzMl90IHNsb3QiKQorICAgICAgICAgICAgaSArPSAxCisgICAg ICAgIGlmIG5lZWRfcGFydDEodGFnKToKKyAgICAgICAgICAgIGlmIGkgPiAwOiBmLndyaXRlKCIs ICIpCisgICAgICAgICAgICBmLndyaXRlKCJ1aW50MzJfdCBwYXJ0MSIpCisgICAgICAgIGYud3Jp dGUoIilcbntcbiIpCisgICAgICAgIGlmIChub3QgbmVlZF9zbG90KHRhZykpOiBmLndyaXRlKCJ1 aW50MzJfdCBzbG90ID0gNDsgc2xvdCA9IHNsb3Q7XG4iICkKKyAgICAgICAgaWYgbmVlZF9lYSh0 YWcpOiBnZW5fZGVjbF9lYShmKQorICAgICAgICAjIyBEZWNsYXJlIHRoZSByZXR1cm4gdmFyaWFi bGUKKyAgICAgICAgaT0wCisgICAgICAgIGZvciByZWd0eXBlLHJlZ2lkLHRvc3MsbnVtcmVncyBp biByZWdzOgorICAgICAgICAgICAgaWYgKGlzX3dyaXRlb25seShyZWdpZCkpOgorICAgICAgICAg ICAgICAgIGdlbl9oZWxwZXJfZGVzdF9kZWNsX29wbihmLHJlZ3R5cGUscmVnaWQsaSkKKyAgICAg ICAgICAgIGkgKz0gMQorCisgICAgICAgIGlmICdBX0ZQT1AnIGluIGF0dHJpYmRpY3RbdGFnXToK KyAgICAgICAgICAgIGYud3JpdGUoJ2ZGUE9QX1NUQVJUKCk7XG4nKTsKKworICAgICAgICBmLndy aXRlKHNlbWRpY3RbdGFnXSkKKyAgICAgICAgZi53cml0ZSgiXG4iKQorICAgICAgICBmLndyaXRl KCJDT1VOVF9IRUxQRVIoJXMpO1xuIiAlIHRhZyApCisKKyAgICAgICAgaWYgJ0FfRlBPUCcgaW4g YXR0cmliZGljdFt0YWddOgorICAgICAgICAgICAgZi53cml0ZSgnZkZQT1BfRU5EKCk7XG4nKTsK KworICAgICAgICAjIyBTYXZlL3JldHVybiB0aGUgcmV0dXJuIHZhcmlhYmxlCisgICAgICAgIGZv ciByZWd0eXBlLHJlZ2lkLHRvc3MsbnVtcmVncyBpbiByZWdzOgorICAgICAgICAgICAgaWYgKGlz X3dyaXR0ZW4ocmVnaWQpKToKKyAgICAgICAgICAgICAgICBnZW5faGVscGVyX3JldHVybl9vcG4o ZiwgcmVndHlwZSwgcmVnaWQsIGkpCisgICAgICAgIGYud3JpdGUoIn1cbiIpCisgICAgICAgICMj IEVuZCBvZiB0aGUgaGVscGVyIGRlZmluaXRpb24KKyAgICBmLndyaXRlKCcjZW5kaWZcbicpCisK KyMjCisjIyBCcmluZyBpdCBhbGwgdG9nZXRoZXIgaW4gdGhlIERFRl9RRU1VIG1hY3JvCisjIwor ZGVmIGdlbl9xZW11KGYsIHRhZyk6CisgICAgcmVncyA9IHRhZ3JlZ3NbdGFnXQorICAgIGltbXMg PSB0YWdpbW1zW3RhZ10KKworICAgIGYud3JpdGUoJ0RFRl9RRU1VKCVzLCVzLFxuJyAlICh0YWcs c2VtZGljdFt0YWddKSkKKyAgICBnZW5faGVscGVyX3Byb3RvdHlwZShmLCB0YWcsIHJlZ3MsIGlt bXMpCisgICAgZi53cml0ZSgiLFxuIiApCisgICAgZ2VuX3RjZ19mdW5jKGYsIHRhZywgcmVncywg aW1tcykKKyAgICBmLndyaXRlKCIsXG4iICkKKyAgICBnZW5faGVscGVyX2RlZmluaXRpb24oZiwg dGFnLCByZWdzLCBpbW1zKQorICAgIGYud3JpdGUoIilcbiIpCisKKyMjCisjIyBHZW5lcmF0ZSB0 aGUgcWVtdV9kZWZfZ2VuZXJhdGVkLmggZmlsZQorIyMKK2YgPSBTdHJpbmdJTygpCisKK2Yud3Jp dGUoIiNpZm5kZWYgREVGX1FFTVVcbiIpCitmLndyaXRlKCIjZGVmaW5lIERFRl9RRU1VKFRBRyxT SE9SVENPREUsSEVMUEVSLEdFTkZOLEhFTFBGTikgICAvKiBOb3RoaW5nICovXG4iKQorZi53cml0 ZSgiI2VuZGlmXG5cbiIpCisKKworZm9yIHRhZyBpbiB0YWdzOgorICAgICMjIFNraXAgYXNzZW1i bGVyIG1hcHBlZCBpbnN0cnVjdGlvbnMKKyAgICBpZiAiQV9NQVBQSU5HIiBpbiBhdHRyaWJkaWN0 W3RhZ106CisgICAgICAgIGNvbnRpbnVlCisgICAgIyMgU2tpcCB0aGUgZmFrZSBpbnN0cnVjdGlv bnMKKyAgICBpZiAoICJBX0ZBS0VJTlNOIiBpbiBhdHRyaWJkaWN0W3RhZ10gKSA6CisgICAgICAg IGNvbnRpbnVlCisgICAgIyMgU2tpcCB0aGUgcHJpdiBpbnN0cnVjdGlvbnMKKyAgICBpZiAoICJB X1BSSVYiIGluIGF0dHJpYmRpY3RbdGFnXSApIDoKKyAgICAgICAgY29udGludWUKKyAgICAjIyBT a2lwIHRoZSBndWVzdCBpbnN0cnVjdGlvbnMKKyAgICBpZiAoICJBX0dVRVNUIiBpbiBhdHRyaWJk aWN0W3RhZ10gKSA6CisgICAgICAgIGNvbnRpbnVlCisgICAgIyMgU2tpcCB0aGUgZGlhZyBpbnN0 cnVjdGlvbnMKKyAgICBpZiAoIHRhZyA9PSAiWTZfZGlhZyIgKSA6CisgICAgICAgIGNvbnRpbnVl CisgICAgaWYgKCB0YWcgPT0gIlk2X2RpYWcwIiApIDoKKyAgICAgICAgY29udGludWUKKyAgICBp ZiAoIHRhZyA9PSAiWTZfZGlhZzEiICkgOgorICAgICAgICBjb250aW51ZQorCisgICAgZ2VuX3Fl bXUoZiwgdGFnKQorCityZWFsZiA9IG9wZW4oJ3FlbXVfZGVmX2dlbmVyYXRlZC5oJywndycpCity ZWFsZi53cml0ZShmLmdldHZhbHVlKCkpCityZWFsZi5jbG9zZSgpCitmLmNsb3NlKCkKKwotLSAK Mi43LjQKCg==