From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp10.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id SKpMEaPc5WEoagEAgWs5BA (envelope-from ) for ; Mon, 17 Jan 2022 22:16:19 +0100 Received: from aspmx1.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp10.migadu.com with LMTPS id AJ/oCaPc5WFFewEAG6o9tA (envelope-from ) for ; Mon, 17 Jan 2022 22:16:19 +0100 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 aspmx1.migadu.com (Postfix) with ESMTPS id 50ADB15900 for ; Mon, 17 Jan 2022 22:16:18 +0100 (CET) Received: from localhost ([::1]:41794 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n9ZMP-0006rP-Co for larch@yhetil.org; Mon, 17 Jan 2022 16:16:17 -0500 Received: from eggs.gnu.org ([209.51.188.92]:37070) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n9ZKE-0005QS-DW for guix-patches@gnu.org; Mon, 17 Jan 2022 16:14:04 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:55383) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1n9ZKE-0003pn-35 for guix-patches@gnu.org; Mon, 17 Jan 2022 16:14:02 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1n9ZKD-0004Zq-Vr for guix-patches@gnu.org; Mon, 17 Jan 2022 16:14:01 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#48463] gnu: Add j. Resent-From: Liliana Marie Prikler Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Mon, 17 Jan 2022 21:14:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 48463 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: elaexuotee@wilsonb.com Cc: Maxime Devos , 48463@debbugs.gnu.org Received: via spool by 48463-submit@debbugs.gnu.org id=B48463.164245399517532 (code B ref 48463); Mon, 17 Jan 2022 21:14:01 +0000 Received: (at 48463) by debbugs.gnu.org; 17 Jan 2022 21:13:15 +0000 Received: from localhost ([127.0.0.1]:48286 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1n9ZJH-0004YT-Ju for submit@debbugs.gnu.org; Mon, 17 Jan 2022 16:13:15 -0500 Received: from mail-wm1-f66.google.com ([209.85.128.66]:41881) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1n9ZJF-0004Xx-49 for 48463@debbugs.gnu.org; Mon, 17 Jan 2022 16:13:02 -0500 Received: by mail-wm1-f66.google.com with SMTP id q141-20020a1ca793000000b00347b48dfb53so2444863wme.0 for <48463@debbugs.gnu.org>; Mon, 17 Jan 2022 13:13:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:subject:from:to:cc:date:in-reply-to:references :user-agent:mime-version; bh=VzGdXAIs28AZDVu8HKTY1nj6yUIe7RnLRGGTnW9OrE0=; b=INL6VsVMuzCJAxgQ99X6kJ5VoFG9Zq2DIwc66eaM5droezmV4rMpDJjfb14nJVZwpw ADdIXVQQqGl4fozRSHVG5G25/c7tVeAAyFUdi84QgmUH3h8DQtzngmi0f7tzlIyvbaE6 PA5tmXrfvkNNRL0PiO0XxszJMJ+1S9koQUuPFDvv4vgI+c6xILkXtAZThtHfd/qkno2H qUOY0wJxjgh6STeILauk80q4DL36B9/t5SNRF7OxOpwwMx1blzj3oF+57fLayNQ5v8L/ /6w4iJPLd61gysWaovX3Iy7lIgAyh1gu4eHtSF0S7X2ZaGszq0Kl4eDg+f9ilaztcp88 fOWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:user-agent:mime-version; bh=VzGdXAIs28AZDVu8HKTY1nj6yUIe7RnLRGGTnW9OrE0=; b=YJlxDwlOJ9/nuI3oL9rVps8NVuCsriXgJVBK6zjxoSAZPpAxTpkhMyXx5kiQ7CzrsI G/AetW2kZLMozXDbSie354WjtCiUF/PXQtKRgt5UlgD/j4Hqx5I0dfD6vohWFQoehrbB b9jEQdV1ZmglcMGg4C0wL5LXy3HH+anYfOyuOSy7+2XCdd66m4yPMs0NQfYvd5P0pFHb X0sPDV/KYO54ah1ba6Zoq8AUHfRLwPMr8p7AlgYq0lZoMt2XV1ORUodfCweQ2vPIjDYU 1CXQOgSM/s01LirfoAT64/Ds5NQMGlploxkiW4H4lGoZwYCh1IrZpZCCpIyCiSygJNn1 5W9w== X-Gm-Message-State: AOAM533hoKna0GPgR5WP5Ox4JIET432y9jbhMxS0/ZgP57kg1EuWrYzW 4GPt3KoAneaoVwErW49nyCk= X-Google-Smtp-Source: ABdhPJzEpE4x7EeP6Cyu5jQohhMFCKXHB/aTsb941ggA/acqd449ziguUaZkaLdBFELI+IwThV16YQ== X-Received: by 2002:a5d:64c4:: with SMTP id f4mr6146978wri.429.1642453975455; Mon, 17 Jan 2022 13:12:55 -0800 (PST) Received: from nijino.fritz.box (85-127-52-93.dsl.dynamic.surfer.at. [85.127.52.93]) by smtp.gmail.com with ESMTPSA id l8sm459951wme.5.2022.01.17.13.12.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Jan 2022 13:12:53 -0800 (PST) Message-ID: From: Liliana Marie Prikler Date: Mon, 17 Jan 2022 22:12:52 +0100 In-Reply-To: <2EZU214MJAIBY.3EXSPSUMS5WW5@wilsonb.com> References: <3LOAUDT0FLL4U.2SOD925YP915T@wilsonb.com> <8b853d0585505ce29c9afc638b644fa34805e6c0.camel@student.tugraz.at> <293L8YPQS4CLB.3VK1B1A36XNAY@wilsonb.com> <5d30160bd2a4592459cd407f99cbd3edadb1db1b.camel@student.tugraz.at> <27DCD25Y68ZWJ.2HRC4G65PWIA7@wilsonb.com> <94f4625dcb0479d873cf60449631527e841fd457.camel@gmail.com> <2JQJMV0O718S1.31FZE8GKCTLPF@wilsonb.com> <90704c2259f576a14fb1268219e8c0dc2b3bf289.camel@telenet.be> <2P322C327XW0Q.21O5A4IFGMNDI@wilsonb.com> <72aff035c93f9f91afa54ef5b51c7381b0b02ccb.camel@gmail.com> <3MMTDZQJQ8IR6.334ZWY8AD0487@wilsonb.com> <62d37956f16c08bc4ce26e44da16dce704ddd0f8.camel@gmail.com> <24ZUUMG4QYSHN.2OS7YAMCKREUA@wilsonb.com> <83aba994536bec60f79900d551d4801c967742bd.camel@gmail.com> <25Z6NGGGNJYD1.3S7A1QLFX7I9Y@wilsonb.com> <24FU0VP6N4ZZ7.3PE5LG30BSNUQ@wilsonb.com> <2EZU214MJAIBY.3EXSPSUMS5WW5@wilsonb.com> Content-Type: multipart/mixed; boundary="=-c3Qhk/j28Tbyho3MHPTw" User-Agent: Evolution 3.42.1 MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: "Guix-patches" X-Migadu-Flow: FLOW_IN X-Migadu-Country: US ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1642454178; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:resent-cc:resent-from:resent-sender: resent-message-id:in-reply-to:in-reply-to:references:references: list-id:list-help:list-unsubscribe:list-subscribe:list-post: dkim-signature; bh=VzGdXAIs28AZDVu8HKTY1nj6yUIe7RnLRGGTnW9OrE0=; b=rCk/6M9zwIzxrQRhCoCJgrfherl+bDG40u2VkrAwG/hITAQkYfgSy6T2XxvS0reYJ46zBK DQqu/Ju7HJj8AtCgHWQMyOgJ1ssxMlLRVPhkEEFcCe1dOTRgC3VxwiIQUmybfvgjnHoKg+ ONuQcjtBB5KxLVOXu2SYX1VrGkJbaUMmZv7nMH+T96mvUaLL84MW1AvPUGquq74R7fdntX QZpq1mJsA86yG029qV88AHvQtGb/rDyq5zFOl0UmcwBnWPvCpgvATBkUxxAlxiQVFzn7+i 4j7JJBw/GXNs1W9UnZ+9pYQD1qcMglyXuGw4CdTbYxrcjA/CUwLxBcohf8E2dg== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1642454178; a=rsa-sha256; cv=none; b=Zcwq38UfuIG8uWY5HFvNGFp+62G4BwUi6v0VeYrbO+0SxCioG5VU5E6M7H+WYb5qmLQ2Ww re2+MifS1171f01uKsa9cOTFUcrvpUQ4QCtFQXwK+hKlhkkmaSNJBWdxSz9aR68mlOD50W niXRZHmcw8zB0rSejDItOBcC5siAwWP/K/FKYblhVsnNrSZiEB71MuJP2soQKg+AFvs075 Do8hvLoJ3/Eots25dmmpt4yiDg13P21y3F28PK3cn4FR3P9rYb3oA64cYW9pYflr6sAaj4 s9eb3UswrjUJcIdSKddgR3IsF1kpB4Wl29f6uKeMxHHbR3UUokvbXpCkMnJxdQ== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=gmail.com header.s=20210112 header.b=INL6VsVM; dmarc=fail reason="SPF not aligned (relaxed)" header.from=gmail.com (policy=none); spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org" X-Migadu-Spam-Score: -2.92 Authentication-Results: aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=gmail.com header.s=20210112 header.b=INL6VsVM; dmarc=fail reason="SPF not aligned (relaxed)" header.from=gmail.com (policy=none); spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org" X-Migadu-Queue-Id: 50ADB15900 X-Spam-Score: -2.92 X-Migadu-Scanner: scn0.migadu.com X-TUID: ClucQ2UI1Wh4 --=-c3Qhk/j28Tbyho3MHPTw Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Hi, I tried to get J ready for packaging, but thanks to my CPU not supporting AVX2 and some helpful discussion in IRC, I was able to avoid an error here. The (guix cpu) code is not meant to be used at runtime as the comment to ijconsole implies it wants it to be used. Rather, you should use it at compile time to bake in the correct tuning parameters, and it should ideally also support "cross-tuning" (though in that case you probably need to disable the tests because your CPU won't make sense of the code). ijconsole not only fails that, but it also fails at an even more basic task in Guix' launcher scripts, which is actually knowing the thing you launch. (We hardcode everything, period.) Now I could just disable everything AVX-related in J and push something that works on x86 and amd64, but since you do claim that AVX is important to J, there are also other options one could take here. One is to implement tuning for this package the correct way, though since it reinvents build systems, that's probably going to be a hard one. The other would be to define package variants (e.g. jsoftware-j-with- avx) and use those -- there ought to be an old blog post on Guix HPC detailing the rationale behind doing that. WDYT? Is AVX worth the trouble? --=-c3Qhk/j28Tbyho3MHPTw Content-Disposition: attachment; filename="0001-gnu-Add-j.patch" Content-Type: text/x-patch; name="0001-gnu-Add-j.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA2YjE1ZGVkYTJlY2MwOWI3MzU0NWUzZmVjY2ZhYzdmM2Y2OTVjOWU4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiQi4gV2lsc29uIiA8ZWxhZXh1b3RlZUB3aWxzb25iLmNvbT4K RGF0ZTogV2VkLCAxMiBKYW4gMjAyMiAxODo0NDozNiArMDkwMApTdWJqZWN0OiBbUEFUQ0hdIGdu dTogQWRkIGouCgoqIGdudS9wYWNrYWdlcy9qc29mdHdhcmUuc2NtOiBOZXcgZmlsZS4KKiBnbnUv cGFja2FnZXMvcGF0Y2hlcy9qc29mdHdhcmUtajkwMS1mLWZpeGVzLnBhdGNoOiBOZXcgZmlsZS4K KiBnbnUvbG9jYWwubWsgW0dOVV9TWVNURU1fTU9EVUxFU106IEFkZCBqc29mdHdhcmUuc2NtLgpb ZGlzdF9wYXRjaF9EQVRBXTogQWRkIGpzb2Z0d2FyZS1qOTAxLWYtZml4ZXMucGF0Y2guCiogZ251 L3BhY2thZ2VzL2F1eC1maWxlcy9qc29mdHdhcmUvcHJvZmlsZXguaWpzOiBOZXcgZmlsZS4KKk1h a2VmaWxlLmFtIFtBVVhfRklMRVNdOiBBZGQgaXQgaGVyZS4KCi0tLQogTWFrZWZpbGUuYW0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGdudS9sb2NhbC5tayAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArCiBnbnUvcGFja2FnZXMvYXV4LWZp bGVzL2pzb2Z0d2FyZS9wcm9maWxleC5panMgfCAgMTQgKwogZ251L3BhY2thZ2VzL2pzb2Z0d2Fy ZS5zY20gICAgICAgICAgICAgICAgICAgIHwgNDIxICsrKysrKysrKysrKysrKysrKwogLi4uL3Bh dGNoZXMvanNvZnR3YXJlLWo5MDEtZi1maXhlcy5wYXRjaCAgICAgIHwgIDgwICsrKysKIDUgZmls ZXMgY2hhbmdlZCwgNTE4IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnbnUvcGFj a2FnZXMvYXV4LWZpbGVzL2pzb2Z0d2FyZS9wcm9maWxleC5panMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBnbnUvcGFja2FnZXMvanNvZnR3YXJlLnNjbQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdudS9wYWNr YWdlcy9wYXRjaGVzL2pzb2Z0d2FyZS1qOTAxLWYtZml4ZXMucGF0Y2gKCmRpZmYgLS1naXQgYS9N YWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCmluZGV4IGExMGFlYjgxN2IuLjFlZmQ4YTliMjYgMTAw NjQ0Ci0tLSBhL01ha2VmaWxlLmFtCisrKyBiL01ha2VmaWxlLmFtCkBAIC0zNzksNiArMzc5LDcg QEAgQVVYX0ZJTEVTID0JCQkJCQlcCiAgIGdudS9wYWNrYWdlcy9hdXgtZmlsZXMvY2hyb21pdW0v bWFzdGVyLXByZWZlcmVuY2VzLmpzb24JCVwKICAgZ251L3BhY2thZ2VzL2F1eC1maWxlcy9lbWFj cy9ndWl4LWVtYWNzLmVsCQlcCiAgIGdudS9wYWNrYWdlcy9hdXgtZmlsZXMvZ3VpeC52aW0JCQlc CisgIGdudS9wYWNrYWdlcy9hdXgtZmlsZXMvanNvZnR3YXJlL3Byb2ZpbGV4LmlqcwkJCVwKICAg Z251L3BhY2thZ2VzL2F1eC1maWxlcy9saW51eC1saWJyZS81LjE1LWFybS5jb25mCVwKICAgZ251 L3BhY2thZ2VzL2F1eC1maWxlcy9saW51eC1saWJyZS81LjE1LWFybTY0LmNvbmYJXAogICBnbnUv cGFja2FnZXMvYXV4LWZpbGVzL2xpbnV4LWxpYnJlLzUuMTUtaTY4Ni5jb25mCVwKZGlmZiAtLWdp dCBhL2dudS9sb2NhbC5tayBiL2dudS9sb2NhbC5tawppbmRleCA3ZTA0NGQ0YTJiLi5lYjEzMDlj OWQ3IDEwMDY0NAotLS0gYS9nbnUvbG9jYWwubWsKKysrIGIvZ251L2xvY2FsLm1rCkBAIC0zMjUs NiArMzI1LDcgQEAgR05VX1NZU1RFTV9NT0RVTEVTID0JCQkJXAogICAlRCUvcGFja2FnZXMvamVt YWxsb2Muc2NtCQkJXAogICAlRCUvcGFja2FnZXMvanJubC5zY20JCQkJXAogICAlRCUvcGFja2Fn ZXMvam9zZS5zY20JCQkJXAorICAlRCUvcGFja2FnZXMvanNvZnR3YXJlLnNjbQkJCQlcCiAgICVE JS9wYWNrYWdlcy9qdWxpYS5zY20JCQlcCiAgICVEJS9wYWNrYWdlcy9qdWxpYS1qbGwuc2NtCQkJ XAogICAlRCUvcGFja2FnZXMvanVsaWEteHl6LnNjbQkJCVwKQEAgLTEyOTUsNiArMTI5Niw3IEBA IGRpc3RfcGF0Y2hfREFUQSA9CQkJCQkJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9pcnJsaWNo dC11c2Utc3lzdGVtLWxpYnMucGF0Y2gJCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvaXNjLWRo Y3AtZ2NjLWNvbXBhdC5wYXRjaAkJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9pc2wtMC4xMS4x LWFhcmNoNjQtc3VwcG9ydC5wYXRjaAlcCisgICVEJS9wYWNrYWdlcy9wYXRjaGVzL2pzb2Z0d2Fy ZS1qOTAxLWYtZml4ZXMucGF0Y2gJCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvanNvbi1jLTAu MTMtQ1ZFLTIwMjAtMTI3NjIucGF0Y2gJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9qc29uLWMt MC4xMi1DVkUtMjAyMC0xMjc2Mi5wYXRjaAlcCiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL2pzb25j cHAtcGtnLWNvbmZpZy12ZXJzaW9uLnBhdGNoCQlcCmRpZmYgLS1naXQgYS9nbnUvcGFja2FnZXMv YXV4LWZpbGVzL2pzb2Z0d2FyZS9wcm9maWxleC5panMgYi9nbnUvcGFja2FnZXMvYXV4LWZpbGVz L2pzb2Z0d2FyZS9wcm9maWxleC5panMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMC4uMzBlMGQyMjllMgotLS0gL2Rldi9udWxsCisrKyBiL2dudS9wYWNrYWdlcy9hdXgtZmls ZXMvanNvZnR3YXJlL3Byb2ZpbGV4LmlqcwpAQCAtMCwwICsxLDE0IEBACisnanR5cGUganZlcnNp b24nPS4gKDMmeyx7LikgPDsuXzIgLCYnLycgOSE6MTQnJworYmFzZWRpcj0uICh7Ln4gXzIgeyBJ LkA6PSYnLycpIEJJTlBBVEgKKworc2hhcmU9LiAgYmFzZWRpciwnL3NoYXJlL2onCitzeXN0ZW09 LiBzaGFyZSwnL3N5c3RlbScKK3Rvb2xzPS4gIHNoYXJlLCcvdG9vbHMnCisKK3VzZXI9LiAgICBo b21lLCcvLmNvbmZpZy9qLycsanZlcnNpb24KK2FkZG9ucz0uICB1c2VyLCcvYWRkb25zJworYnJl YWs9LiAgIHVzZXIsJy9icmVhaycKK2NvbmZpZz0uICB1c2VyLCcvY29uZmlnJworaW5zdGFsbD0u IHVzZXIsJy9pbnN0YWxsJworc25hcD0uICAgIHVzZXIsJy9zbmFwJwordGVtcD0uICAgIHVzZXIs Jy90ZW1wJwpkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2VzL2pzb2Z0d2FyZS5zY20gYi9nbnUvcGFj a2FnZXMvanNvZnR3YXJlLnNjbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li5jN2Q1YzRkN2I1Ci0tLSAvZGV2L251bGwKKysrIGIvZ251L3BhY2thZ2VzL2pzb2Z0d2FyZS5z Y20KQEAgLTAsMCArMSw0MjEgQEAKKzs7OyBHTlUgR3VpeCAtLS0gRnVuY3Rpb25hbCBwYWNrYWdl IG1hbmFnZW1lbnQgZm9yIEdOVQorOzs7IENvcHlyaWdodCDCqSAyMDIyIEIuIFdpbHNvbiA8ZWxh ZXh1b3RlZUB3aWxzb25iLmNvbT4KKzs7OworOzs7IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBH dWl4LgorOzs7Cis7OzsgR05VIEd1aXggaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorOzs7IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cis7OzsgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0 Cis7OzsgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorOzs7Cis7OzsgR05VIEd1aXgg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Cis7 OzsgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorOzs7IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKzs7OyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorOzs7Cis7OzsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKzs7OyBhbG9uZyB3aXRoIEdOVSBHdWl4LiAgSWYg bm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisoZGVmaW5lLW1vZHVs ZSAoZ251IHBhY2thZ2VzIGpzb2Z0d2FyZSkKKyAgIzp1c2UtbW9kdWxlIChndWl4IGJ1aWxkIHV0 aWxzKQorICAjOnVzZS1tb2R1bGUgKGd1aXggYnVpbGQtc3lzdGVtIGdudSkKKyAgIzp1c2UtbW9k dWxlIChndWl4IGJ1aWxkLXN5c3RlbSB0cml2aWFsKQorICAjOnVzZS1tb2R1bGUgKGd1aXggZ2l0 LWRvd25sb2FkKQorICAjOnVzZS1tb2R1bGUgKChndWl4IGxpY2Vuc2VzKSAjOnByZWZpeCBsaWNl bnNlOikKKyAgIzp1c2UtbW9kdWxlIChndWl4IHBhY2thZ2VzKQorICAjOnVzZS1tb2R1bGUgKGd1 aXggdXRpbHMpCisgICM6dXNlLW1vZHVsZSAoZ251IHBhY2thZ2VzKQorICAjOnVzZS1tb2R1bGUg KGdudSBwYWNrYWdlcyBsaWJlZGl0KQorICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBsbHZt KQorICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBtYXRocykKKyAgIzp1c2UtbW9kdWxlIChn dWl4IGdleHApCisgICM6dXNlLW1vZHVsZSAoaWNlLTkgZnR3KQorICAjOnVzZS1tb2R1bGUgKGlj ZS05IG1hdGNoKQorICAjOnVzZS1tb2R1bGUgKGljZS05IHJlZ2V4KQorICAjOnVzZS1tb2R1bGUg KGljZS05IHJkZWxpbSkKKyAgIzp1c2UtbW9kdWxlIChzcmZpIHNyZmktMSkKKyAgIzp1c2UtbW9k dWxlIChzcmZpIHNyZmktMjYpCisgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTcxKSkKKworCis7 OzsgVE9ETzogTWFrZSBpbXBvcnRlciBhbmQgcGFja2FnZXMgZm9yIEogYWRkb25zOgorOzs7IGh0 dHA6Ly93d3cuanNvZnR3YXJlLmNvbS9qYWwvCisKKzs7OyBUT0RPOiBQYWNrYWdlIHVwIGo4MHgg c2VyaWVzCisKKworKGRlZmluZSAoam5hbWUgcHJlZml4IHJlbGVhc2UtdHlwZSkKKyAgIlJldHVy biBhIHBhY2thZ2UgbmFtZSBmb3IgSiwgaW5jbHVkaW5nIFJFTEVBU0UtVFlQRSBvbmx5IGlmIG5v dCAncmVsZWFzZS4iCisgIChtYXRjaCByZWxlYXNlLXR5cGUKKyAgICAoJ3JlbGVhc2UgcHJlZml4 KQorICAgIChfICAgICAgICAoc3RyaW5nLWFwcGVuZCBwcmVmaXggIi0iIChzeW1ib2wtPnN0cmlu ZyByZWxlYXNlLXR5cGUpKSkpKQorCisoZGVmaW5lICh2ZXJzaW9uLW1ham9yK21pbm9yKiB2ZXJz aW9uKQorICAiTGlrZSB2ZXJzaW9uLW1ham9yK21pbm9yLCBidXQgcmV0dXJuaW5nIHR3byBzdHJp bmcgdmFsdWVzLiIKKyAgKGxldCAoKHBhcnRzIChzdHJpbmctc3BsaXQgdmVyc2lvbiAjXC4pKSkK KyAgICAodmFsdWVzIChmaXJzdCBwYXJ0cykgKHNlY29uZCBwYXJ0cykpKSkKKworKGRlZmluZSog KGpyZWxlYXNlLXN0cmluZyByZWxlYXNlLXR5cGUgIzpvcHRpb25hbCB2ZXJzaW9uLW1pbm9yKQor ICAiQ29uc3RydWN0IEogcmVsZWFzZSBpZGVudGlmaWVyIHN0cmluZy4iCisgIChsZXQgKChyZWxl YXNlLXR5cGUgKHN5bWJvbC0+c3RyaW5nIHJlbGVhc2UtdHlwZSkpKQorICAgIChpZiB2ZXJzaW9u LW1pbm9yCisgICAgICAgIChzdHJpbmctYXBwZW5kIHJlbGVhc2UtdHlwZSAiLSIgdmVyc2lvbi1t aW5vcikKKyAgICAgICAgcmVsZWFzZS10eXBlKSkpCisKKyhkZWZpbmUqIChqaW5mby0+Z2l0LXRh ZyB2ZXJzaW9uIHJlbGVhc2UtdHlwZSkKKyAgIkdpdmVuIHZlcnNpb24gcGFyYW1ldGVycywgY29u c3RydWN0IGEgZ2l0IHRhZyBmb3IgdXBzdHJlYW0gcmVsZWFzZXMuIgorICAobGV0ICgobWFqb3Ig bWlub3IgKHZlcnNpb24tbWFqb3IrbWlub3IqIHZlcnNpb24pKSkKKyAgICAoc3RyaW5nLWFwcGVu ZCAiaiIgbWFqb3IgIi0iIChqcmVsZWFzZS1zdHJpbmcgcmVsZWFzZS10eXBlIG1pbm9yKSkpKQor Cis7OyBHLWV4cCBzY3JpcHQgdGhhdCBkZXRlY3RzIEFWWC9BVlgyIHN1cHBvcnQgYXQgcnVudGlt ZSBhbmQgZXhlY3V0ZXMgamNvbnNvbGUKKzs7IHdpdGggdGhlIGFwcHJvcHJpYXRlIGxpYmouc28g YW5kIHByb2ZpbGUuaWpzLiIKKzs7IE5PVEU6IFRoaXMgc2hvdWxkIGJlIGJha2VkIGluIGF0IGNv bXBpbGUgdGltZSBpbnRvIGBqc29mdHdhcmUtaicuCisoZGVmaW5lIGlqY29uc29sZQorICAod2l0 aC1pbXBvcnRlZC1tb2R1bGVzICcoKGd1aXggY3B1KQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGd1aXggbWVtb2l6YXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ3VpeCBw cm9maWxpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ3VpeCBzZXRzKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHNyZmkgc3JmaS0yNikpCisgICAgKHByb2dyYW0tZmlsZSAi aWpjb25zb2xlIgorICAgICAgI34oYmVnaW4KKyAgICAgICAgICAodXNlLW1vZHVsZXMgKChndWl4 IGNwdSkgICAgICM6c2VsZWN0IChjcHUtZmxhZ3MgY3VycmVudC1jcHUpKQorICAgICAgICAgICAg ICAgICAgICAgICAoKGd1aXggc2V0cykgICAgIzpzZWxlY3QgKHNldC1jb250YWlucz8pKQorICAg ICAgICAgICAgICAgICAgICAgICAoKHNyZmkgc3JmaS0yNikgIzpzZWxlY3QgKGN1dGUpKSkKKwor ICAgICAgICAgIDs7IEFzc3VtZSB0aGF0IHRoaXMgc2NyaXB0IHdpbGwgYmUgaW5zdGFsbGVkIHVu ZGVyIGJpbi8uCisgICAgICAgICAgKGRlZmluZSAlYmFzZWRpciAoZGlybmFtZSAoZGlybmFtZSAo Y3VycmVudC1maWxlbmFtZSkpKSkKKworICAgICAgICAgIChsZXQqICgoamNvbnNvbGUgKHN0cmlu Zy1hcHBlbmQgJWJhc2VkaXIgIi9saWJleGVjL2ovamNvbnNvbGUiKSkKKyAgICAgICAgICAgICAg ICAgKGNwdS1oYXMtZmxhZz8KKyAgICAgICAgICAgICAgICAgICAoY3V0ZSBzZXQtY29udGFpbnM/ IChjcHUtZmxhZ3MgKGN1cnJlbnQtY3B1KSkgPD4pKQorICAgICAgICAgICAgICAgICAobGliaiAo Zm9ybWF0ICNmICJ+YS9saWIvai9saWJqfmEuc28iICViYXNlZGlyCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIiIjOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25k ICgoY3B1LWhhcy1mbGFnPyAiYXZ4MiIpICItYXZ4MiIpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKChjcHUtaGFzLWZsYWc/ICJhdngiKSAiLWF2eCIpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVsc2UgIiIpKSkpCisgICAgICAgICAgICAgICAg IChqcHJvZmlsZSAoc3RyaW5nLWFwcGVuZCAlYmFzZWRpciAiL2V0Yy9qL3Byb2ZpbGUuaWpzIikp KQorICAgICAgICAgICAgKGFwcGx5IGV4ZWNsIGpjb25zb2xlICJpamNvbnNvbGUiICItbGliIiBs aWJqICItanByb2ZpbGUiIGpwcm9maWxlCisgICAgICAgICAgICAgICAgICAgKGNkciAoY29tbWFu ZC1saW5lKSkpKSkpKSkKKworKGRlZmluZSogKG1ha2UtaiBiYXNlLXZlcnNpb24gaGFzaAorICAg ICAgICAgICAgICAgICAjOmtleQorICAgICAgICAgICAgICAgICByZXZpc2lvbgorICAgICAgICAg ICAgICAgICBjb21taXQKKyAgICAgICAgICAgICAgICAgdGFnCisgICAgICAgICAgICAgICAgIChy ZWxlYXNlLXR5cGUgJ3JlbGVhc2UpCisgICAgICAgICAgICAgICAgIChwYXRjaGVzICcoKSkKKyAg ICAgICAgICAgICAgICAgKG1vZHVsZXMgJygpKQorICAgICAgICAgICAgICAgICAoc25pcHBldCAj ZikKKyAgICAgICAgICAgICAgICAgKGV4dHJhLWlucHV0cyAnKCkpCisgICAgICAgICAgICAgICAg IChleHRyYS1lbnZhcnMgJygpKQorICAgICAgICAgICAgICAgICAoYnVpbGRlciAiZ3VpeC5nbnUu b3JnIikpCisgIChsZXQgKChtYWpvciBtaW5vciAodmVyc2lvbi1tYWpvcittaW5vciogYmFzZS12 ZXJzaW9uKSkpCisgICAgKHBhY2thZ2UKKyAgICAgIChuYW1lIChqbmFtZSAianNvZnR3YXJlLWoi IHJlbGVhc2UtdHlwZSkpCisgICAgICAodmVyc2lvbgorICAgICAgIChpZiBjb21taXQgKGdpdC12 ZXJzaW9uIGJhc2UtdmVyc2lvbiByZXZpc2lvbiBjb21taXQpIGJhc2UtdmVyc2lvbikpCisgICAg ICAoc291cmNlCisgICAgICAgKG9yaWdpbgorICAgICAgICAgKG1ldGhvZCBnaXQtZmV0Y2gpCisg ICAgICAgICAodXJpIChnaXQtcmVmZXJlbmNlCisgICAgICAgICAgICAgICAodXJsICJodHRwczov L2dpdGh1Yi5jb20vanNvZnR3YXJlL2pzb3VyY2UiKQorICAgICAgICAgICAgICAgKGNvbW1pdCAo b3IgY29tbWl0IHRhZworICAgICAgICAgICAgICAgICAgICAgICAgICAgKGppbmZvLT5naXQtdGFn IGJhc2UtdmVyc2lvbiByZWxlYXNlLXR5cGUpKSkpKQorICAgICAgICAgKHNoYTI1NiAoYmFzZTMy IGhhc2gpKQorICAgICAgICAgKGZpbGUtbmFtZSAoZ2l0LWZpbGUtbmFtZSBuYW1lIHZlcnNpb24p KQorICAgICAgICAgKHBhdGNoZXMgcGF0Y2hlcykKKyAgICAgICAgIChtb2R1bGVzIG1vZHVsZXMp CisgICAgICAgICAoc25pcHBldCBzbmlwcGV0KSkpCisgICAgICAoYnVpbGQtc3lzdGVtIGdudS1i dWlsZC1zeXN0ZW0pCisgICAgICAobmF0aXZlLWlucHV0cyAobGlzdCBjbGFuZy10b29sY2hhaW4p KQorICAgICAgKGlucHV0cworICAgICAgIDs7IGlqY29uc29sZSBhbmQgcHJvZmlsZS5panMgc3Rp bGwgcmVxdWlyZSBsYWJlbHMKKyAgICAgICBgKCgiaWpjb25zb2xlIiAsaWpjb25zb2xlKQorICAg ICAgICAgKCJwcm9maWxleC5panMiICwoc2VhcmNoLWF1eGlsaWFyeS1maWxlICJqc29mdHdhcmUv cHJvZmlsZXguaWpzIikpCisgICAgICAgICAoImxpYmVkaXQiICxsaWJlZGl0KQorICAgICAgICAg KCJsaWJvbXAiICxsaWJvbXApCisgICAgICAgICAsQGV4dHJhLWlucHV0cykpCisgICAgICAoYXJn dW1lbnRzCisgICAgICAgYCgjOm1vZHVsZXMgKCgoaWNlLTkgZnR3KSAjOnNlbGVjdCAoc2NhbmRp cikpCisgICAgICAgICAgICAgICAgICAgICgoaWNlLTkgcG9wZW4pICM6c2VsZWN0IChvcGVuLXBp cGUqIGNsb3NlLXBpcGUpKQorICAgICAgICAgICAgICAgICAgICAoKGljZS05IHJlZ2V4KSAjOnNl bGVjdCAobWF0Y2g6c3Vic3RyaW5nIHN0cmluZy1tYXRjaCkpCisgICAgICAgICAgICAgICAgICAg ICgoaWNlLTkgdGhyZWFkcykgIzpzZWxlY3QgKHBhcmFsbGVsIHBhci1mb3ItZWFjaCkpCisgICAg ICAgICAgICAgICAgICAgICgoc3JmaSBzcmZpLTI2KSAjOnNlbGVjdCAoY3V0KSkKKyAgICAgICAg ICAgICAgICAgICAgKChzcmZpIHNyZmktMSkgIzpzZWxlY3QgKGZvbGQpKQorICAgICAgICAgICAg ICAgICAgICAsQCVnbnUtYnVpbGQtc3lzdGVtLW1vZHVsZXMpCisgICAgICAgICAjOnBoYXNlcwor ICAgICAgICAgOzsgVXBzdHJlYW0ncyBidWlsZCBzeXN0ZW0gY29uc2lzdHMgb2YgYWQtaG9jIHNj cmlwdHMgdGhhdCBidWlsZCB1cAorICAgICAgICAgOzsgKHZlcnkgY29tcGxpY2F0ZWQpIGVudmly b25tZW50IHZhcmlhYmxlcyB0byBwYXNzIHRvIG1ha2UuCisgICAgICAgICA7OyBUaGUgYmFzaWMg YnVpbGQgcHJvY2VzcyBsb29rcyBsaWtlIHRoaXM6CisgICAgICAgICA7OworICAgICAgICAgOzsg ICAxKSBDb3B5IGpzcmMvanZlcnNpb24teC5oIHRvIGpzcmMvanZlcnNpb24uaCBhbmQgZWRpdCB2 YWx1ZXM7CisgICAgICAgICA7OyAgIDIpIFNldCBqcGxhdGZvcm0gYW5kIGo2NHggZW52aXJvbm1l bnQgdmFyaWFibGVzOworICAgICAgICAgOzsgICAzKSBSdW4gbWFrZTIvYnVpbGRfamNvbnNvbGUu c2ggYW5kIG1ha2UyL2J1aWxkX2xpYmouc2g7CisgICAgICAgICA7OworICAgICAgICAgOzsgSG93 ZXZlciwgdXBzdHJlYW0gZXhwZWN0cyB1c2VycyB0byBydW4gSiBkaXJlY3RseSBmcm9tIHRoZSBz b3VyY2UKKyAgICAgICAgIDs7IGRpcmVjdG9yeTsgdGhleSBkbyBub3Qgc3VwcGx5IGEgbWFrZSBg aW5zdGFsbCcgdGFyZ2V0LiAgVGh1cyBpdAorICAgICAgICAgOzsgdGFrZXMgc29tZSBtYXNzYWdp bmcgdG8gaW5zdGFsbCBmaWxlcyBpbiBGSFMtc3R5bGUgZGlyZWN0b3JpZXMuCisgICAgICAgICAo bW9kaWZ5LXBoYXNlcyAlc3RhbmRhcmQtcGhhc2VzCisgICAgICAgICAgIDs7IEluIHBhcnRpY3Vs YXIsIHdlIGhhdmUgdG8gc2V0IHVwCisgICAgICAgICAgIDs7CisgICAgICAgICAgIDs7ICAgMSkg anNyYy9qdmVyc2lvbi5oIGFzIGluIGEgdHlwaWNhbCBidWlsZDsKKyAgICAgICAgICAgOzsgICAy KSBqbGlicmFyeS9iaW4vcHJvZmlsZXguaWpzIHRvIHBvaW50IHRvIHdyaXRhYmxlIGRpcmVjdG9y aWVzOworICAgICAgICAgICA7OyAgIDMpIG1ha2UyL2J1aWxkXyouc2ggdG8gcmVzcGVjdCBzdGFu ZGFyZCBidWlsZCBjb252ZW50aW9uczsKKyAgICAgICAgICAgOzsgICA0KSBqc3JjL2pjb25zb2xl LmMgdG8gZml4IGxpYmVkaXQgZGxvcGVuOyBhbmQKKyAgICAgICAgICAgOzsgICA1KSBIYXJkIGNv ZGVkIHJlZmVyZW5jZXMgdG8gYWRkb25zIGRpcmVjdG9yeS4KKyAgICAgICAgICAgKHJlcGxhY2Ug J2NvbmZpZ3VyZQorICAgICAgICAgICAgIChsYW1iZGEqICgjOmtleSB0YXJnZXQgaW5wdXRzIG91 dHB1dHMgIzphbGxvdy1vdGhlci1rZXlzKQorICAgICAgICAgICAgICAgKGxldCogKChjbGFuZy10 b29sY2hhaW4gKGFzc29jLXJlZiBpbnB1dHMgImNsYW5nLXRvb2xjaGFpbiIpKQorICAgICAgICAg ICAgICAgICAgICAgIChjbGFuZyAoc3RyaW5nLWFwcGVuZCBjbGFuZy10b29sY2hhaW4gIi9iaW4v Y2xhbmciKSkKKyAgICAgICAgICAgICAgICAgICAgICAobGliZWRpdCAoYXNzb2MtcmVmIGlucHV0 cyAibGliZWRpdCIpKQorICAgICAgICAgICAgICAgICAgICAgIChvdXQgKGFzc29jLXJlZiBvdXRw dXRzICJvdXQiKSkpCisgICAgICAgICAgICAgICAgIDs7IFNldCB1cCBidWlsZCBjb25zdGFudHMK KyAgICAgICAgICAgICAgICAgKGNvcHktZmlsZSAianNyYy9qdmVyc2lvbi14LmgiICJqc3JjL2p2 ZXJzaW9uLmgiKQorICAgICAgICAgICAgICAgICAoc3Vic3RpdHV0ZSogImpzcmMvanZlcnNpb24u aCIKKyAgICAgICAgICAgICAgICAgICAoKCJeI2RlZmluZSBqdmVyc2lvbi4qJCIpCisgICAgICAg ICAgICAgICAgICAgIChmb3JtYXQgI2YgIiNkZWZpbmUganZlcnNpb24gfnNcbiIgLG1ham9yKSkK KyAgICAgICAgICAgICAgICAgICAoKCJeI2RlZmluZSBqdHlwZS4qJCIpCisgICAgICAgICAgICAg ICAgICAgIChmb3JtYXQgI2YgIiNkZWZpbmUganR5cGUgfnNcbiIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAsKGpyZWxlYXNlLXN0cmluZyByZWxlYXNlLXR5cGUgbWlub3IpKSkKKyAgICAg ICAgICAgICAgICAgICAoKCJeI2RlZmluZSBqYnVpbGRlci4qJCIpCisgICAgICAgICAgICAgICAg ICAgIChmb3JtYXQgI2YgIiNkZWZpbmUgamJ1aWxkZXIgfnNcbiIgLGJ1aWxkZXIpKSkKKyAgICAg ICAgICAgICAgICAgOzsgTXVuZ2UgdGhlIGJ1aWxkIHNjcmlwdHMgaW50byByZWFzb246CisgICAg ICAgICAgICAgICAgIDs7IDEuIFNob3J0LWNpcmN1aXQgdGhlIGZyYWdpbGUgY29tcGlsZXIgZGV0 ZWN0aW9uOworICAgICAgICAgICAgICAgICA7OyAyLiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBvdXIg Q0ZMQUdTIGFuZCBMRkxBR1M7IGFuZAorICAgICAgICAgICAgICAgICA7OyAzLiBQcm9wYWdhdGUg c2NyaXB0IGVycm9ycyB0byB0b3AgbGV2ZWwuCisgICAgICAgICAgICAgICAgIChmb3ItZWFjaAor ICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgKHdp dGgtZGlyZWN0b3J5LWV4Y3Vyc2lvbiAibWFrZTIiCisgICAgICAgICAgICAgICAgICAgICAgKHN1 YnN0aXR1dGUqIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7IFRoZSBgY29tcGlsZXIn IHZhcmlhYmxlIGRvZXNuJ3QgcG9pbnQgdG8gdGhlIGFjdHVhbAorICAgICAgICAgICAgICAgICAg ICAgICAgOzsgY29tcGlsZXIuICBJdCBpcyBqdXN0IGEgc3dpdGNoIHRvIHRlbGwgdGhlIGJ1aWxk CisgICAgICAgICAgICAgICAgICAgICAgICA7OyBzY3JpcHRzIHdoZXRoZXIgdG8gdXNlIGdjYy0g b3IgY2xhbmctc3BlY2lmaWMgZmxhZ3MuCisgICAgICAgICAgICAgICAgICAgICAgICAoKCJeY29t cGlsZXI9LiokIikgImNvbXBpbGVyPWNsYW5nXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAg KCgiXkxERkxBR1M9XCIiIGRlZikgKHN0cmluZy1hcHBlbmQgZGVmICIkTERGTEFHUyAiKSkKKyAg ICAgICAgICAgICAgICAgICAgICAgICgoIl4oY29tbW9uPVwiKShcXCRVU0VUSFJFQUQuKikkIiBf IGRlZiByZXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIGRlZiAi JENGTEFHUyAiIHJlc3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgKCgiXiMhLioiIHNoZWJh bmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgc2hlYmFuZyAic2V0 IC1vIGVycmV4aXRcbiIpKSkpKQorICAgICAgICAgICAgICAgICAgJygiYnVpbGRfamNvbnNvbGUu c2giICJidWlsZF9saWJqLnNoIikpCisgICAgICAgICAgICAgICAgIDs7IFRoZSBqY29uc29sZSBt YW51YWxseSBsb2FkcyBsaWJlZGl0IHdpdGggZGxvcGVuLiAgVGhlIHBhdGgKKyAgICAgICAgICAg ICAgICAgOzsgbXVzdCBiZSBhYnNvbHV0ZSB0byBjb3JyZWN0bHkgcG9pbnQgdG8gb3VyIGlucHV0 LgorICAgICAgICAgICAgICAgICAoc3Vic3RpdHV0ZSogImpzcmMvamNvbnNvbGUuYyIKKyAgICAg ICAgICAgICAgICAgICAoKCJsaWJlZGl0XFwuc29cXC5bMC05XSIgc28tZmlsZSkKKyAgICAgICAg ICAgICAgICAgICAgKGZvcm1hdCAjZiAifmEvbGliL35hIiBsaWJlZGl0IHNvLWZpbGUpKSkKKyAg ICAgICAgICAgICAgICAgOzsgVGhlIH5hZGRvbnMvZGV2IGRpcmVjdG9yeSBzdXBwbGllcyB0ZW50 YXRpdmUgSi1zY3JpcHQKKyAgICAgICAgICAgICAgICAgOzsgZGVmaW5pdGlvbnMgb2YgbmV3IEog ZW5naW5lIGZ1bmN0aW9uYWxpdHkuICBTaW5jZSB3ZSBwb2ludAorICAgICAgICAgICAgICAgICA7 OyB+YWRkb25zIHVuZGVyIHRoZSB+dXNlciBkaXJlY3RvcnksIHdlIG1vdmUgaXQgdW5kZXIgfnN5 c3RlbQorICAgICAgICAgICAgICAgICA7OyBpbnN0ZWFkLCB3aGljaCBzaXRzIGFzLWlzIGluIHRo ZSBvdXRwdXQuCisgICAgICAgICAgICAgICAgICh3aXRoLWRpcmVjdG9yeS1leGN1cnNpb24gImpz cmMiCisgICAgICAgICAgICAgICAgICAgKGZvci1lYWNoCisgICAgICAgICAgICAgICAgICAgIChs YW1iZGEgKGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgKHN1YnN0aXR1dGUqIGZpbGUgKCgi fmFkZG9ucy9kZXYiKSAifnN5c3RlbS9kZXYiKSkpCisgICAgICAgICAgICAgICAgICAgIChzY2Fu ZGlyICIuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhIChmKSAoZXE/IChz dGF0OnR5cGUgKHN0YXQgZikpICdyZWd1bGFyKSkpKSkKKyAgICAgICAgICAgICAgICAgOzsgSW1w bGVtZW50YXRpb24gb2YgOSE6MTQgcmVjb3JkcyBidWlsZCB0aW1lIHdoaWNoIGJyZWFrcworICAg ICAgICAgICAgICAgICA7OyByZXByb2R1Y2liaWxpdHkuICBOb3RlIHRoYXQgdXBzdHJlYW0gY29k ZSBkZXBlbmRzIG9uIHRoZQorICAgICAgICAgICAgICAgICA7OyBleGFjdCBmb3JtYXQgb2YgdGhl c2Ugc3RyaW5ncywgc28gd2UgbmVlZCB0byBtaW1pYyB0aGUKKyAgICAgICAgICAgICAgICAgOzsg c3RhbmRhcmQuCisgICAgICAgICAgICAgICAgIChzdWJzdGl0dXRlKiAianNyYy9qLmMiCisgICAg ICAgICAgICAgICAgICAgKCgiX19EQVRFX18iKSAiXCJKYW4gMDEgMTk3MFwiIikKKyAgICAgICAg ICAgICAgICAgICAoKCJfX1RJTUVfXyIpICJcIjAwOjAwOjAwXCIiKSkKKyAgICAgICAgICAgICAg ICAgOzsgVXBzdHJlYW0gcmVjb21tZW5kcyB1c2luZyBjbGFuZywgd2l0aCBHQ0Mgc3VwcG9ydCBi ZWluZworICAgICAgICAgICAgICAgICA7OyBzZWNvbmQtY2xhc3MsIG9mdGVuIHJlc3VsdGluZyBp biBidWlsZCBmYWlsdXJlcy4KKyAgICAgICAgICAgICAgICAgKHNldGVudiAiQ0MiIGNsYW5nKSkp KQorCisgICAgICAgICAgIDs7IFRoZSBidWlsZCBvdXRwdXQgZGVwZW5kcyBwcmltYXJpbHkgb24g dGhlIHZhbHVlcyBvZiB0aGUKKyAgICAgICAgICAgOzsgYGpwbGF0Zm9ybScgYW5kIGBqNjR4JyBl bnZpcm9ubWVudCB2YXJpYWJsZXMuICBJZiB0aGUgdGFyZ2V0IGlzCisgICAgICAgICAgIDs7IEFS TSwgdGhlbiBganBsYXRmb3JtJyBpcyAicmFzcGJlcnJ5Iiwgb3RoZXJ3aXNlIGl0IGlzIGBsaW51 eCcuCisgICAgICAgICAgIDs7IEluIGFkZGl0aW9uIHRvIDMyLSBhbmQgNjQtIGJpdCB2ZXJzaW9u cywgYGo2NHgnIGNvbnRyb2xscworICAgICAgICAgICA7OyB3aGV0aGVyIEFWWCBvciBBVlgyIHZh cmlhbnRzIG9mIGxpYmogYXJlIGJ1aWx0LgorICAgICAgICAgICA7OworICAgICAgICAgICA7OyBI b3dldmVyLCBidWlsZCB0YXJnZXRzIGFyZSBub3QgZmluZS1ncmFpbmVkIGVub3VnaCB0byBkaXN0 aW5ndWlzaAorICAgICAgICAgICA7OyBiZXR3ZWVuIENQVSBmZWF0dXJlcy4gIFRodXMgd2UgYnVp bGQgYW5kIGluc3RhbGwgYWxsIHZhcmlhbnRzIG9mCisgICAgICAgICAgIDs7IGxpYmosIGV4cGVj dGluZyBqY29uc29sZSB0byBiZSBjYWxsZWQgd2l0aCBhIHdyYXBwZXIgc2NyaXB0IHRoYXQKKyAg ICAgICAgICAgOzsgZGV0ZWN0cyBBVlggZmVhdHVyZXMgYW5kIGxvYWRzIHRoZSBhcHByb3ByaWF0 ZSBsaWJqIGF0IHJ1bnRpbWUuCisgICAgICAgICAgIChyZXBsYWNlICdidWlsZAorICAgICAgICAg ICAgIChsYW1iZGEgXworICAgICAgICAgICAgICAgKHNldGVudiAiVVNFX09QRU5NUCIgIjEiKQor ICAgICAgICAgICAgICAgKHNldGVudiAiVVNFX1RIUkVBRCIgIjEiKQorICAgICAgICAgICAgICAg KGZvci1lYWNoIChsYW1iZGEgKHZhci12YWwpIChhcHBseSBzZXRlbnYgdmFyLXZhbCkpCisgICAg ICAgICAgICAgICAgICAgICAgICAgKHF1b3RlICxleHRyYS1lbnZhcnMpKQorICAgICAgICAgICAg ICAgOzsgVGhlIGJ1aWxkIHNjcmlwdHMgYXNzdW1lIHRoYXQgUFdEIGlzIG1ha2UyLgorICAgICAg ICAgICAgICAgKHdpdGgtZGlyZWN0b3J5LWV4Y3Vyc2lvbiAibWFrZTIiCisgICAgICAgICAgICAg ICAgIChsZXQqICgocGxhdGZvcm0gLChpZiAodGFyZ2V0LWFybT8pICJyYXNwYmVycnkiICJsaW51 eCIpKQorICAgICAgICAgICAgICAgICAgICAgICAgKHRhcmdldC1iaXQgLChpZiAodGFyZ2V0LTY0 Yml0PykgIjY0IiAiMzIiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIChydW4gKGxhbWJkYSog KHNjcmlwdCAjOmtleSAoYXZ4ICIiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo aW52b2tlICJlbnYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3Ry aW5nLWFwcGVuZCAianBsYXRmb3JtPSIgcGxhdGZvcm0pCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCAiajY0eD1qIiB0YXJnZXQtYml0IGF2eCkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdCkpKSkKKyAgICAg ICAgICAgICAgICAgICAocGFyYWxsZWwKKyAgICAgICAgICAgICAgICAgICAgOzsgU2luY2UgamNv bnNvbGUgZG9lc24ndCBkZXBlbmQgb24gQVZYIGZlYXR1cmVzLCB3ZSBqdXN0CisgICAgICAgICAg ICAgICAgICAgIDs7IGJ1aWxkIGl0IG9uY2UuCisgICAgICAgICAgICAgICAgICAgIChydW4gIi4v YnVpbGRfamNvbnNvbGUuc2giKQorICAgICAgICAgICAgICAgICAgICAocnVuICIuL2J1aWxkX2xp Ymouc2giKQorICAgICAgICAgICAgICAgICAgICAod2hlbiAjZmFsc2UgOzsgLCh0YXJnZXQtNjRi aXQ/KQorICAgICAgICAgICAgICAgICAgICAgIChydW4gIi4vYnVpbGRfbGliai5zaCIgIzphdngg ImF2eCIpCisgICAgICAgICAgICAgICAgICAgICAgKHJ1biAiLi9idWlsZF9saWJqLnNoIiAjOmF2 eCAiYXZ4MiIpKSkpKSkpCisgICAgICAgICAgIDs7IFRoZSB0ZXN0IHN1aXRlIGlzIGV4cGVjdGVk IHRvIGJlIHJ1biBhcyBmb2xsb3dzIGZvciBlYWNoIHZhcmlhbnQKKyAgICAgICAgICAgOzsgb2Yg bGliaiB0aGF0IHdlIGJ1aWxkOgorICAgICAgICAgICA7OworICAgICAgICAgICA7OyAgICAgJCBl Y2hvICdSVU4gZGRhbGwnIHwgamNvbnNvbGUgdGVzdC90c3UuaWpzCisgICAgICAgICAgIDs7Cisg ICAgICAgICAgIDs7IFRoaXMgcmVxdWlyZXMgYSB3b3JraW5nIGpjb25zb2xlIHdpdGggYWNjZXNz aWJsZSBqbGlicmFyeSBmaWxlcy4KKyAgICAgICAgICAgOzsgV2Ugc2ltcGx5IHBsYWNlIHRoZXNl IGFsbCB1bmRlciB0ZXN0L2Jpbi4KKyAgICAgICAgICAgKHJlcGxhY2UgJ2NoZWNrCisgICAgICAg ICAgICAgKGxhbWJkYSogKCM6a2V5IHRlc3RzPyAjOmFsbG93LW90aGVyLWtleXMpCisgICAgICAg ICAgICAgICAod2hlbiB0ZXN0cz8KKyAgICAgICAgICAgICAgICAgKGxldCAoKHBsYXRmb3JtICwo aWYgKHRhcmdldC1hcm0/KSAicmFzcGJlcnJ5IiAibGludXgiKSkpCisgICAgICAgICAgICAgICAg ICAgKG1rZGlyLXAgInRlc3QvYmluIikKKyAgICAgICAgICAgICAgICAgICAoZm9yLWVhY2gKKyAg ICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoZGlyKQorICAgICAgICAgICAgICAgICAgICAgIChs ZXQgKChzb3VyY2UgKHN0cmluZy1hcHBlbmQgImpsaWJyYXJ5LyIgZGlyKSkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoZGVzdCAoc3RyaW5nLWFwcGVuZCAidGVzdC9iaW4vIiBkaXIpKSkK KyAgICAgICAgICAgICAgICAgICAgICAgIChiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAg ICAobWtkaXItcCBkZXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAoY29weS1yZWN1cnNp dmVseSBzb3VyY2UgZGVzdCkpKSkKKyAgICAgICAgICAgICAgICAgICAgJygic3lzdGVtIiAidG9v bHMiICJhZGRvbnMiKSkKKyAgICAgICAgICAgICAgICAgICA7OyBUaGUgamxpYnJhcnkvZGV2IGRp cmVjdG9yeSBvbmx5IGV4aXN0cyBzb21ldGltZXMsIGJ1dAorICAgICAgICAgICAgICAgICAgIDs7 IHdoZW4gaXQgZG9lcywgaXQgbmVlZHMgdG8gYmUgaW4gfnN5c3RlbS4KKyAgICAgICAgICAgICAg ICAgICAoZm9yLWVhY2gKKyAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoZGV2LWRpcikKKyAg ICAgICAgICAgICAgICAgICAgICAoaWYgKGZpbGUtZXhpc3RzPyBkZXYtZGlyKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAoY29weS1yZWN1cnNpdmVseSBkZXYtZGlyICJ0ZXN0L2Jpbi9zeXN0 ZW0vZGV2IikpKQorICAgICAgICAgICAgICAgICAgICAnKCJqbGlicmFyeS9kZXYiICJqbGlicmFy eS9hZGRvbnMvZGV2IikpCisgICAgICAgICAgICAgICAgICAgKHBhci1mb3ItZWFjaAorICAgICAg ICAgICAgICAgICAgICAobGFtYmRhIChkaXIpCisgICAgICAgICAgICAgICAgICAgICAgKGxldCog KChiaW4gKHN0cmluZy1hcHBlbmQgImJpbi8iIHBsYXRmb3JtKSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGpiaXQgLChpZiAodGFyZ2V0LTY0Yml0PykgImo2NCIgImozMiIpKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoamNvbnNvbGUgKHN0cmluZy1hcHBlbmQgYmluICIv IiBqYml0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiL2pjb25zb2xlIikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzb3VyY2Ug KHN0cmluZy1hcHBlbmQgYmluICIvIiBkaXIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoZGVzdCAoc3RyaW5nLWFwcGVuZCAidGVzdC9iaW4vIiBkaXIpKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgIChiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAobWtkaXItcCBkZXN0 KQorICAgICAgICAgICAgICAgICAgICAgICAgICAoY29weS1yZWN1cnNpdmVseSBzb3VyY2UgZGVz dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGluc3RhbGwtZmlsZSAiamxpYnJhcnkvYmlu L3Byb2ZpbGUuaWpzIiBkZXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5zdGFsbC1m aWxlIGpjb25zb2xlIGRlc3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgIChsZXQqICgoamNv bnNvbGUgKHN0cmluZy1hcHBlbmQgZGVzdCAiL2pjb25zb2xlIikpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAodGVzdHMgInRlc3QvdHN1LmlqcyIpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAocG9ydCAob3Blbi1waXBlKiBPUEVOX1dSSVRFIGpjb25zb2xlIHRl c3RzKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpc3BsYXkgIlJVTiBkZGFsbFxu IiBwb3J0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bmxlc3MgKHplcm8/IChzdGF0 dXM6ZXhpdC12YWwgKGNsb3NlLXBpcGUgcG9ydCkpKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGVycm9yICJTb21lIEogYnVpbGQgdGVzdHMgZmFpbGVkLiIpKSkpKSkKKyAgICAgICAg ICAgICAgICAgICAgKHNjYW5kaXIgKHN0cmluZy1hcHBlbmQgImJpbi8iIHBsYXRmb3JtKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobmVnYXRlIChjdXQgbWVtYmVyIDw+ICcoIi4iICIu LiIpKSkpKQorICAgICAgICAgICAgICAgICAgICN0KSkpKQorICAgICAgICAgICA7OyBOb3cgdGhh dCBldmVyeXRoaW5nIGlzIGJ1aWx0LCBpbnN0YWxsYXRpb24gaXMgZmFpcmx5CisgICAgICAgICAg IDs7IHN0cmFpZ2h0Zm9yd2FyZCwgZm9sbG93aW5nIEZIUyBjb252ZW50aW9ucy4gIFRoZSBvbmx5 IHF1aXJrIGlzCisgICAgICAgICAgIDs7IHRoYXQgd2UgaW5zdGFsbCBqY29uc29sZSB1bmRlciAv bGliZXhlYyB0byBtYWtlIHJvb20gZm9yIHRoZQorICAgICAgICAgICA7OyB3cmFwcGVyIHJlcGxh Y2VtZW50IHVuZGVyIC9iaW4uCisgICAgICAgICAgIChyZXBsYWNlICdpbnN0YWxsCisgICAgICAg ICAgICAgKGxhbWJkYSogKCM6a2V5IG91dHB1dHMgaW5wdXRzICM6YWxsb3ctb3RoZXIta2V5cykK KyAgICAgICAgICAgICAgIChsZXQqICgocGxhdGZvcm0gLChpZiAodGFyZ2V0LWFybT8pICJyYXNw YmVycnkiICJsaW51eCIpKQorICAgICAgICAgICAgICAgICAgICAgIChqYml0ICwoaWYgKHRhcmdl dC02NGJpdD8pICJqNjQiICJqMzIiKSkKKyAgICAgICAgICAgICAgICAgICAgICAob3V0IChhc3Nv Yy1yZWYgb3V0cHV0cyAib3V0IikpCisgICAgICAgICAgICAgICAgICAgICAgKGJpbiAoc3RyaW5n LWFwcGVuZCBvdXQgIi9iaW4iKSkKKyAgICAgICAgICAgICAgICAgICAgICAoZXRjIChzdHJpbmct YXBwZW5kIG91dCAiL2V0Yy9qIikpCisgICAgICAgICAgICAgICAgICAgICAgKGxpYiAoc3RyaW5n LWFwcGVuZCBvdXQgIi9saWIvaiIpKQorICAgICAgICAgICAgICAgICAgICAgIChsaWJleGVjIChz dHJpbmctYXBwZW5kIG91dCAiL2xpYmV4ZWMvaiIpKQorICAgICAgICAgICAgICAgICAgICAgIChz aGFyZSAoc3RyaW5nLWFwcGVuZCBvdXQgIi9zaGFyZS9qIikpCisgICAgICAgICAgICAgICAgICAg ICAgKHN5c3RlbSAoc3RyaW5nLWFwcGVuZCBzaGFyZSAiL3N5c3RlbSIpKQorICAgICAgICAgICAg ICAgICAgICAgIChkZXYgKHN0cmluZy1hcHBlbmQgc3lzdGVtICIvZGV2IikpKQorICAgICAgICAg ICAgICAgICAobWtkaXItcCBiaW4pCisgICAgICAgICAgICAgICAgIChjb3B5LWZpbGUgKGFzc29j LXJlZiBpbnB1dHMgImlqY29uc29sZSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0 cmluZy1hcHBlbmQgYmluICIvaWpjb25zb2xlLSIgLG1ham9yKSkKKyAgICAgICAgICAgICAgICAg KG1rZGlyLXAgbGliKQorICAgICAgICAgICAgICAgICAoZm9yLWVhY2gKKyAgICAgICAgICAgICAg ICAgIChsYW1iZGEgKGphcmNoKQorICAgICAgICAgICAgICAgICAgICAobGV0KiAoKGpiaW4gKHN0 cmluZy1qb2luIGAoImJpbiIgLHBsYXRmb3JtICxqYXJjaCkgIi8iKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIChqYXZ4LW1hdGNoIChzdHJpbmctbWF0Y2ggImF2eC4qIiBqYXJjaCkpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAoamF2eCAoaWYgKG5vdCBqYXZ4LW1hdGNoKSAiIgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaDpzdWJzdHJpbmcgamF2 eC1tYXRjaCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlcCAoaWYgamF2eC1tYXRj aCAiLSIgIiIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvdXJjZSAoc3RyaW5nLWFw cGVuZCBqYmluICIvbGliai5zbyIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlc3Qg KGZvcm1hdCAjZiAifmEvbGlian5hfmEuc28iIGxpYiBzZXAgamF2eCkpKQorICAgICAgICAgICAg ICAgICAgICAgIChjb3B5LWZpbGUgc291cmNlIGRlc3QpKSkKKyAgICAgICAgICAgICAgICAgIChz Y2FuZGlyIChzdHJpbmctYXBwZW5kICJiaW4vIiBwbGF0Zm9ybSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIChuZWdhdGUgKGN1dCBtZW1iZXIgPD4gJygiLiIgIi4uIikpKSkpCisgICAgICAg ICAgICAgICAgIChpbnN0YWxsLWZpbGUKKyAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5k ICJiaW4vIiBwbGF0Zm9ybSAiLyIgamJpdCAiL2pjb25zb2xlIikKKyAgICAgICAgICAgICAgICAg IGxpYmV4ZWMpCisgICAgICAgICAgICAgICAgIChjb3B5LXJlY3Vyc2l2ZWx5ICJqbGlicmFyeS9z eXN0ZW0iIHN5c3RlbSkKKyAgICAgICAgICAgICAgICAgKGZvci1lYWNoCisgICAgICAgICAgICAg ICAgICAobGFtYmRhIChzb3VyY2UtZGV2KQorICAgICAgICAgICAgICAgICAgICAoaWYgKGFjY2Vz cz8gc291cmNlLWRldiBSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgKGNvcHktcmVjdXJz aXZlbHkgc291cmNlLWRldiBkZXYpKSkKKyAgICAgICAgICAgICAgICAgICcoImpsaWJyYXJ5L2Rl diIgImpsaWJyYXJ5L2FkZG9ucy9kZXYiKSkKKyAgICAgICAgICAgICAgICAgKGluc3RhbGwtZmls ZSAiamxpYnJhcnkvYmluL3Byb2ZpbGUuaWpzIiBldGMpCisgICAgICAgICAgICAgICAgIChjb3B5 LWZpbGUgKGFzc29jLXJlZiBpbnB1dHMgInByb2ZpbGV4LmlqcyIpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgZXRjICIvcHJvZmlsZXguaWpzIikpKSkpKSkpCisg ICAgICAoaG9tZS1wYWdlICJodHRwczovL3d3dy5qc29mdHdhcmUuY29tLyIpCisgICAgICAoc3lu b3BzaXMgIkFzY2lpLW9ubHksIGFycmF5IHByb2dyYW1taW5nIGxhbmd1YWdlIGluIHRoZSBBUEwg ZmFtaWx5IikKKyAgICAgIChkZXNjcmlwdGlvbgorICAgICAgICJKIGlzIGEgaGlnaC1sZXZlbCwg Z2VuZXJhbC1wdXJwb3NlIHByb2dyYW1taW5nIGxhbmd1YWdlIHRoYXQgaXMKK3BhcnRpY3VsYXJs eSBzdWl0ZWQgdG8gdGhlIG1hdGhlbWF0aWNhbCwgc3RhdGlzdGljYWwsIGFuZCBsb2dpY2FsIGFu YWx5c2lzIG9mCitkYXRhLiAgSXQgaXMgYSBwb3dlcmZ1bCB0b29sIGZvciBkZXZlbG9waW5nIGFs Z29yaXRobXMgYW5kIGV4cGxvcmluZyBwcm9ibGVtcwordGhhdCBhcmUgbm90IGFscmVhZHkgd2Vs bCB1bmRlcnN0b29kLiIpCisgICAgICAobGljZW5zZSBsaWNlbnNlOmdwbDMrKSkpKQorCisKKyhk ZWZpbmUtcHVibGljIGpzb2Z0d2FyZS1qLTkwMQorICAobWFrZS1qICI5MDEuZiIKKyAgICAgICAg ICAiMTc3NjAyMW0wajFhYW56d2c2MGJ5ODNuNTNwdzdpNmFmZDV3cGxmemN6d2s4Ynl3YXg0cCIK KyAgICAgICAgICAjOnBhdGNoZXMgKHNlYXJjaC1wYXRjaGVzICJqc29mdHdhcmUtajkwMS1mLWZp eGVzLnBhdGNoIikpKQorCisKKyhkZWZpbmUgai1idWlsZC1jb25maWd1cmF0aW9uLXdpdGgtc2xl ZWYKKyAgOzsgWFhYOiBsYWJlbCByZXF1aXJlZCBiZWNhdXNlIG9mIGlqY29uc29sZSBhbmQgcHJv ZmlsZS5panMgaW4gbWFrZS1qLgorICA7OyAgICAgIGlmIGxhYmVscyBhcmUgZHJvcHBlZCBpbiBt YWtlLWosIGRyb3AgdGhlbSBoZXJlIHRvby4KKyAgOzsgWFhYOiBzbGVlZiBpcyBzdGlsbCBiZWlu ZyBidW5kbGVkIGluIGogYW5kIHVuYnVuZGxpbmcgaXQgY2F1c2VzIGJ1aWxkCisgIDs7ICAgICAg ZXJyb3JzLi4uIGludmVzdGlnYXRlIHRoZW0gYW5kIHVuYnVuZGxlCisgIGAoIzpleHRyYS1pbnB1 dHMgKCgic2xlZWYiICxzbGVlZikpCisgICAgIzpleHRyYS1lbnZhcnMgKCgiVVNFX1NMRUVGX1NS QyIgIjAiKQorICAgICAgICAgICAgICAgICAgICAoIkxERkxBR1MiICItbHNsZWVmIikpKSkKKwor KGRlZmluZS1wdWJsaWMganNvZnR3YXJlLWotOTAyCisgIChhcHBseSBtYWtlLWogIjkwMi5iIgor ICAgICAgICAgIjBqNjd2Z2lrcWZsd2pxYWNzZGljYXN2eXYxazU0czJjOHZqZ3dtZjBpeDdsNDFw NHhxejAiCisgICAgICAgICBqLWJ1aWxkLWNvbmZpZ3VyYXRpb24td2l0aC1zbGVlZikpCisKKyhk ZWZpbmUtcHVibGljIGpzb2Z0d2FyZS1qLTkwMworICAoYXBwbHkgbWFrZS1qICI5MDMuYSIKKyAg ICAgICAgICIxZmNmbDdxN2Mydmo0Zm1ucXFjOGM2aHdnc2ptMjBmZjkzdjh4eGZuaWFzc3MxYjJm bWM0IgorICAgICAgICAgIzp0YWcgIjkwMy1yZWxlYXNlLWEiCisgICAgICAgICBqLWJ1aWxkLWNv bmZpZ3VyYXRpb24td2l0aC1zbGVlZikpCisKKyhkZWZpbmUtcHVibGljIChqc29mdHdhcmUtaWpj b25zb2xlLXN5bWxpbmsganBrZykKKyAgIlByb3ZpZGUgYmluL2lqY29uc29sZSBzeW1saW5rIHRo YXQgcG9pbnRzIHRvIHBrZydzCitiaW4vaWpjb25zb2xlLTxqdmVyc2lvbj4uIgorICAocGFja2Fn ZQorICAgIChuYW1lICJqc29mdHdhcmUtaWpjb25zb2xlIikKKyAgICAodmVyc2lvbiAocGFja2Fn ZS12ZXJzaW9uIGpwa2cpKQorICAgIChzb3VyY2UgI2YpCisgICAgKGJ1aWxkLXN5c3RlbSB0cml2 aWFsLWJ1aWxkLXN5c3RlbSkKKyAgICAocHJvcGFnYXRlZC1pbnB1dHMgYCgoImpwa2ciICxqcGtn KSkpCisgICAgKGFyZ3VtZW50cworICAgICAgYCgjOm1vZHVsZXMgKChndWl4IGJ1aWxkIHV0aWxz KQorICAgICAgICAgICAgICAgICAgIChzcmZpIHNyZmktMjYpKQorICAgICAgICAjOmJ1aWxkZXIK KyAgICAgICAgKGJlZ2luCisgICAgICAgICAgKHVzZS1tb2R1bGVzICgoZ3VpeCBidWlsZCB1dGls cykgIzpzZWxlY3QgKG1rZGlyLXApKQorICAgICAgICAgICAgICAgICAgICAgICAoKGljZS05IHJl Z2V4KSAjOnNlbGVjdCAoc3RyaW5nLW1hdGNoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgKChp Y2UtOSBmdHcpICM6c2VsZWN0IChzY2FuZGlyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgKChz cmZpIHNyZmktMjYpICM6c2VsZWN0IChjdXQpKSkKKyAgICAgICAgICAobGV0KiAoKG91dCAoYXNz b2MtcmVmICVvdXRwdXRzICJvdXQiKSkKKyAgICAgICAgICAgICAgICAgKGpwa2cgKGFzc29jLXJl ZiAlYnVpbGQtaW5wdXRzICJqcGtnIikpCisgICAgICAgICAgICAgICAgIChpamNvbnNvbGUgKGNh ciAoc2NhbmRpciAoc3RyaW5nLWFwcGVuZCBqcGtnICIvYmluIikKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChjdXQgc3RyaW5nLW1hdGNoICJpamNvbnNvbGUtLioiIDw+ KSkpKQorICAgICAgICAgICAgICAgICAoc291cmNlIChzdHJpbmctYXBwZW5kIGpwa2cgIi9iaW4v IiBpamNvbnNvbGUpKQorICAgICAgICAgICAgICAgICAoZGVzdCAoc3RyaW5nLWFwcGVuZCBvdXQg Ii9iaW4vaWpjb25zb2xlIikpKQorICAgICAgICAgICAgKG1rZGlyLXAgKGRpcm5hbWUgZGVzdCkp CisgICAgICAgICAgICAoc3ltbGluayBzb3VyY2UgZGVzdCkpKSkpCisgIChob21lLXBhZ2UgKHBh Y2thZ2UtaG9tZS1wYWdlIGpwa2cpKQorICAoc3lub3BzaXMgIlByb3ZpZGUgYGlqY29uc29sZScg c3ltbGluayB0byBkZWZhdWx0IGludGVycHJldGVyIHZlcnNpb24iKQorICAoZGVzY3JpcHRpb24K KyAgIlRoZSBpbnRlcnByZXRlciBwcm92aWRlZCBieSB0aGUgSiBwYWNrYWdlIGhhcyBhIGZpbGVu YW1lIGxpa2UKK2lqY29uc29sZS08dmVyc2lvbj4sIHdoaWNoIHByb3ZpZGVzIHN1cHBvcnQgZm9y IGhhdmluZyBtdWx0aXBsZSwgY29uY3VycmVudAordmVyc2lvbnMgaW5zdGFsbGVkLiAgVGhpcyBw YWNrYWdlIHByb3ZpZGVzIGEgdmVyc2lvbi1hZ25vc3RpYyBgaWpjb25zb2xlJworc3ltbGluayB0 byBpbnRlcnByZXRlciB2ZXJzaW9uIGluZGljYXRlZCBhbmQgYnVpbGQgdGltZS4iKQorICAobGlj ZW5zZSBsaWNlbnNlOmdwbDMrKSkpCmRpZmYgLS1naXQgYS9nbnUvcGFja2FnZXMvcGF0Y2hlcy9q c29mdHdhcmUtajkwMS1mLWZpeGVzLnBhdGNoIGIvZ251L3BhY2thZ2VzL3BhdGNoZXMvanNvZnR3 YXJlLWo5MDEtZi1maXhlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwLi4wYWM3ZTk0ZGU0Ci0tLSAvZGV2L251bGwKKysrIGIvZ251L3BhY2thZ2VzL3BhdGNoZXMv anNvZnR3YXJlLWo5MDEtZi1maXhlcy5wYXRjaApAQCAtMCwwICsxLDgwIEBACitUaGlzIHBhdGNo IGZpeGVzIHR3byBzZXBhcmF0ZSBpc3N1ZXMgd2l0aCB1c3RyZWFtIHNvdXJjZXM6CisKKyogTm9y bWFsaXplIGltcG9ydCBwYXRocyBpbiBqc3JjL2NpcC5jCisKK1Vwc3RyZWFtIGNsYWltcyB0byBo YXZlIHNvbWUgYnVpbGQgcmVxdWlyZW1lbnRzIHRoYXQgZm9yY2UgdGhlbSB0byB1c2Ugc3RyYW5n ZQoraW1wb3J0IHBhdGhzLiBIb3dldmVyLCB0aGVzZSBwYXRocyBkbyBub3QgZXhpc3QgaW5zaWRl IG91ciBidWlsZCBjaHJvb3QuCisKKyogRml4IHVuaXRpdGlhbGl6ZWQgdmFyaWFibGUgd2Fybmlu ZworCitDbGFuZyA5IGlzc3VlcyBzb21lIHdhcm5pbmdzIHdoaWNoIGNhdXNlIHRoZSBidWlsZCB0 byBmYWlsIHNpbmNlIHVwc3RyZWFtCitjb21waWxlcyB3aXRoIC1XZXJyb3IuCisKKworZGlmZiAt LWdpdCBhL2pzcmMvY2lwLmMgYi9qc3JjL2NpcC5jCitpbmRleCA2MWRhNDA4OC4uZmIzYzAzYjYg MTAwNjQ0CistLS0gYS9qc3JjL2NpcC5jCisrKysgYi9qc3JjL2NpcC5jCitAQCAtMyw5ICszLDkg QEAKKyAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqLworIC8qIENvbmp1bmN0aW9uczogSW5uZXIgUHJvZHVj dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgCistI2lu Y2x1ZGUgIi4uLy4uL2pzb3VyY2UvanNyYy9qLmgiCistI2luY2x1ZGUgIi4uLy4uL2pzb3VyY2Uv anNyYy92YXNtLmgiCistI2luY2x1ZGUgIi4uLy4uL2pzb3VyY2UvanNyYy9nZW1tLmgiCisrI2lu Y2x1ZGUgImouaCIKKysjaW5jbHVkZSAidmFzbS5oIgorKyNpbmNsdWRlICJnZW1tLmgiCisgCisg I2RlZmluZSBNQVhBUk9XUyAzODQgIC8vIG1heCByb3dzIG9mIGEgdGhhdCB3ZSBjYW4gcHJvY2Vz cyB0byBzdGF5IGluIEwyIGNhY2hlICAgYSBzdHJpcCBpcyBtKkNBQ0hFSEVJR0hULCB6IHN0cmlw IGlzIG0qQ0FDSEVXSURUSCAgIHRoaXMgaXMgd2lyZWQgdG8gMTI4KjMgLSBjaGVjayBpZiB5b3Ug Y2hhZ2UKKyAKK0BAIC0xMDU3LDE1ICsxMDU3LDE1IEBAIHN0YXRpYyBBIGp0aXBieChKIGp0LEEg YSxBIHcsQyBjLEMgZCl7QSBnPTAseDAseDEsejtCKmF2LCphdjAsYiwqdjAsKnYxLCp6djtDIGMw CisgIHN3aXRjaChjKXsKKyAgIGNhc2UgQ1BMVVNET1Q6CisgI2RlZmluZSBGIHw9CistI2luY2x1 ZGUgIi4uLy4uL2pzb3VyY2UvanNyYy9jaXBfdC5oIgorKyNpbmNsdWRlICJjaXBfdC5oIgorICAg IGJyZWFrOworICAgY2FzZSBDU1RBUkRPVDoKKyAjZGVmaW5lIEYgJj0KKy0jaW5jbHVkZSAiLi4v Li4vanNvdXJjZS9qc3JjL2NpcF90LmgiCisrI2luY2x1ZGUgImNpcF90LmgiCisgICAgYnJlYWs7 CisgICBjYXNlIENORToKKyAjZGVmaW5lIEYgXj0KKy0jaW5jbHVkZSAiLi4vLi4vanNvdXJjZS9q c3JjL2NpcF90LmgiCisrI2luY2x1ZGUgImNpcF90LmgiCisgICAgYnJlYWs7CisgIH0KKyAgUiB6 OworZGlmZiAtLWdpdCBhL2pzcmMvZ2VtbS5jIGIvanNyYy9nZW1tLmMKK2luZGV4IDUxZmUzMDZl Li5iMTA1ZGZjMSAxMDA2NDQKKy0tLSBhL2pzcmMvZ2VtbS5jCisrKysgYi9qc3JjL2dlbW0uYwor QEAgLTMxOCw3ICszMTgsNyBAQCBkZ2VtbV9ubiAgICAgICAgIChJICAgICAgICAgICAgICBtLAor ICAgICAgICAgICAgICAgICAgICBfQik7CisgCisgLy8gbG9vcCAzCistICAgICAgICAgICAgSSBp OworKyAgICAgICAgICAgIEkgaT0wOworICNwcmFnbWEgb21wIHBhcmFsbGVsIGZvciBkZWZhdWx0 KG5vbmUpLHByaXZhdGUoaSksc2hhcmVkKGosbCxBLEMsbWIsbmMsa2MsYWxwaGEsX2JldGEsX21j LF9CLHJzX2EsY3NfYSxyc19jLGNzX2MpCisgICAgICAgICAgICAgZm9yIChpPTA7IGk8bWI7ICsr aSkgeworICAgICAgICAgICAgICAgICBJIG1jOworQEAgLTUwMSw3ICs1MDEsNyBAQCBpZ2VtbV9u biAgICAgICAgIChJICAgICAgICAgICAgICBtLAorICAgICAgICAgICAgICAgICAgICBfQik7Cisg CisgLy8gbG9vcCAzCistICAgICAgICAgICAgSSBpOworKyAgICAgICAgICAgIEkgaT0wOworICNw cmFnbWEgb21wIHBhcmFsbGVsIGZvciBkZWZhdWx0KG5vbmUpLHByaXZhdGUoaSksc2hhcmVkKGos bCxBLEMsbWIsbmMsa2MsYWxwaGEsX2JldGEsX21jLF9CLHJzX2EsY3NfYSxyc19jLGNzX2MpCisg ICAgICAgICAgICAgZm9yIChpPTA7IGk8bWI7ICsraSkgeworICAgICAgICAgICAgICAgICBJIG1j OworQEAgLTgzMSw3ICs4MzEsNyBAQCB6Z2VtbV9ubiAgICAgICAgIChJICAgICAgICAgICAgICBt LAorICAgICAgICAgICAgICAgICAgICBfQik7CisgCisgLy8gbG9vcCAzCistICAgICAgICAgICAg SSBpOworKyAgICAgICAgICAgIEkgaT0wOworICNwcmFnbWEgb21wIHBhcmFsbGVsIGZvciBkZWZh dWx0KG5vbmUpLHByaXZhdGUoaSksc2hhcmVkKGosbCxBLEMsbWIsbmMsa2MsYWxwaGEsX2JldGEs X21jLF9CLHJzX2EsY3NfYSxyc19jLGNzX2MpCisgICAgICAgICAgICAgZm9yIChpPTA7IGk8bWI7 ICsraSkgeworICAgICAgICAgICAgICAgICBJIG1jOwotLSAKMi4zNC4wCgo= --=-c3Qhk/j28Tbyho3MHPTw--