From unknown Fri Jun 13 10:39:38 2025 X-Loop: help-debbugs@gnu.org Subject: [bug#46800] [PATCH] Allow defining multiple substituters Resent-From: Maxime Devos Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Fri, 26 Feb 2021 17:43:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 46800 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 46800@debbugs.gnu.org Cc: Ludovic =?UTF-8?Q?Court=C3=A8s?= X-Debbugs-Original-To: guix-patches@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.161436133519508 (code B ref -1); Fri, 26 Feb 2021 17:43:02 +0000 Received: (at submit) by debbugs.gnu.org; 26 Feb 2021 17:42:15 +0000 Received: from localhost ([127.0.0.1]:42317 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lFh83-00054a-7J for submit@debbugs.gnu.org; Fri, 26 Feb 2021 12:42:15 -0500 Received: from lists.gnu.org ([209.51.188.17]:43888) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lFh82-00054T-0x for submit@debbugs.gnu.org; Fri, 26 Feb 2021 12:42:14 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:54760) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lFh7z-00083Z-R7 for guix-patches@gnu.org; Fri, 26 Feb 2021 12:42:13 -0500 Received: from laurent.telenet-ops.be ([2a02:1800:110:4::f00:19]:44168) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lFh7q-0005ep-BO for guix-patches@gnu.org; Fri, 26 Feb 2021 12:42:08 -0500 Received: from ptr-bvsjgyjmffd7q9timvx.18120a2.ip6.access.telenet.be ([IPv6:2a02:1811:8c09:9d00:aaf1:9810:a0b8:a55d]) by laurent.telenet-ops.be with bizsmtp id Zthx2401A0mfAB401thxrb; Fri, 26 Feb 2021 18:41:58 +0100 Message-ID: From: Maxime Devos Date: Fri, 26 Feb 2021 18:41:51 +0100 Content-Type: multipart/signed; micalg="pgp-sha256"; protocol="application/pgp-signature"; boundary="=-F6UujglD09vm5rhp81Br" User-Agent: Evolution 3.34.2 MIME-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r21; t=1614361318; bh=qm8b9Wy9o9C63ipY0uw120DrapTCge+3/T8Nllawi/k=; h=Subject:From:To:Cc:Date; b=hw3PDvLsmOlkidjIuhTko49kplx+05lXC0kIf4BEyXcfD27rdJ7fJGzRNnm4H0mw7 kamFPodjWkDxpYT1O7V0ci8y+tTeBd2KYxhBeYHiIBY6cddHI7ZvirMcYotucv4yoZ 8jfXTRDPAx/OnYGKo8exeL4cNABWRvzJ3LzrxvtOmtFoh+pkFXVNUN16mL7lvBViN8 roy2nvcKRu/k41ZMcbNTHWhi8UJRjGpSJCR57G+usLLtrg5EsWr7Znl5l9WjpkK34U Q5kAOvBR1K7t1e6yZStUqG7nSZmlJMuIc4Z12kaEkacmomtXYaiiMQrzuR7mK7mZex JmkdwfTKuZXRQ== Received-SPF: pass client-ip=2a02:1800:110:4::f00:19; envelope-from=maximedevos@telenet.be; helo=laurent.telenet-ops.be X-Spam_score_int: -9 X-Spam_score: -1.0 X-Spam_bar: - X-Spam_report: (-1.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, PERCENT_RANDOM=1.838, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" --=-F6UujglD09vm5rhp81Br Content-Type: multipart/mixed; boundary="=-wY5YO5kcxIR3yh1ShwI4" --=-wY5YO5kcxIR3yh1ShwI4 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Guix, This patch series is my suggestion for allowing multiple "substitution methods" or "substituters" as I call them. Currently, only a method for HTTP/S is defined, though I hope it will be a good basis for a common framework for substitutes over GNUnet and IPFS. Extending "guix-service-type" to allow configuration of substitution method is left for later. Any questions, remarks? Greetings, Maxime --=-wY5YO5kcxIR3yh1ShwI4 Content-Disposition: attachment; filename*0=0001-substitute-implement-a-hook-mechanism-for-defining-s.pat; filename*1=ch Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0001-substitute-implement-a-hook-mechanism-for-defining-s.patch"; charset="UTF-8" RnJvbSAwMGY5YjAxMTlkM2UwNzFmOWRlYmJiZjEwMTk1MThmNTc0ODViNjIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+ CkRhdGU6IEZyaSwgMjYgRmViIDIwMjEgMTg6MTU6NTYgKzAxMDAKU3ViamVjdDogW1BBVENIIDEv NF0gc3Vic3RpdHV0ZTogaW1wbGVtZW50IGEgJ2hvb2snIG1lY2hhbmlzbSBmb3IgZGVmaW5pbmcK IHN1YnN0aXR1dGVycwoKQSBuZXcgc3Vic3RpdHV0ZXIgbmFtZWQgWCBjYW4gYmUgZGVmaW5lZCBp biAoZ3VpeCBzY3JpcHRzIHN1YnN0aXR1dGUgWCkuClRoaXMgc3Vic3RpdHV0ZXIgd2lsbCBiZSBx dWVyaWVkIGZvciBhZGRpdGlvbmFsIG5hcmluZm9zIGFuZCB3aWxsIGJlCnVzZWQgZm9yIGRvd25s b2FkaW5nIHRoZSBzdWJzdGl0dXRlLiAgU3Vic3RpdHV0ZXJzIGFyZSB0cmllZCBpbi1vcmRlciwK YWNjb3JkaW5nIHRvIHRoZSBzdWJzdGl0dXRlLW1ldGhvZHMgZGFlbW9uIG9wdGlvbi4KCiogZ3Vp eC9zY3JpcHRzL3N1YnN0aXR1dGUuc2NtCiAgKCVuYXJpbmZvLXRyYW5zaWVudC1lcnJvci10dGws IGNhY2hlLW5hcmluZm8hKTogZXhwb3J0CiAgZm9yIHVzZSBpbiB0aGUgSFRUUCBzdWJzdGl0dXRl ci4KICAobWFrZS1zdWJzdGl0dXRlciwgc3Vic3RpdHV0ZXI/KTogZGVmaW5lIGEgcmVjb3JkIHR5 cGUgZm9yCiAgc3Vic3RpdHV0ZXJzLgogIChkZWZhdWx0LXN1YnN0aXR1dGVycywgcmVzb2x2ZS1z dWJzdGl0dXRlcikKICAoJXN1YnN0aXR1dGVycywgc3Vic3RpdHV0ZXJzKTogYXV0b21hdGljYWxs eQogIGRldGVybWluZSB3aGljaCBzdWJzdGl0dXRlcnMgdG8gdXNlLgogIChmZXRjaC1uYXJpbmZv cyk6IHNwbGl0IG9mZiBIVFRQIGNvZGUgdG8KICBndWl4L3NjcmlwdHMvc3Vic3RpdHV0ZS9odHRw LnNjbSBhbmQgYXNrIGVhY2gKICBzdWJzdGl0dXRlciBmb3IgbmFyaW5mb3MuCiAgKHZlcmlmeS1o YXNoKTogc3BsaXQgb2ZmIHByb2NlZHVyZSBmcm9tIHByb2Nlc3Mtc3Vic3RpdGlvbi4KICAodmVy aWZpeS1oYXNoL3Vua25vd24pOiBzdHViIHByb2NlZHVyZS4KICAocHJvY2Vzcy1zdWJzdGl0dXRp b24pOiBzcGxpdCBvZmYgSFRUUCBjb2RlIHRvCiAgZ3VpeC9zY3JpcHRzL3N1YnN0aXR1dGUuc2Nt IGFuZCBhc2sgZWFjaCBzdWJzdGl0dXRlcgogIGZvciBhIHN1YnN0aXR1dGUuCiAgKCVmZXRjaC10 aW1lb3V0LCAlcmFuZG9tLXN0YXRlLCB3aXRoLXRpbWVvdXQpCiAgKGZldGNoLCBuYXJpbmZvLXJl cXVlc3QsIGF0LW1vc3QsIGh0dHAtbXVsdGlwbGUtZ2V0KQogIChyZWFkLXRvLWVvZiwgbmFyaW5m by1mcm9tLWZpbGUsICV1bnJlYWNoYWJsZS1ob3N0cykKICAoJW1heC1jYWNoZWQtY29ubmVjdGlv bnMpCiAgKG9wZW4tY29ubmVjdGlvbi1mb3ItdXJpL2NhY2hlZCwgY2FsbC13aXRoLWNhY2hlZC1j b25uZWN0aW9uKQogIChjYWxsLXdpdGgtY29ubmVjdGlvbi1lcnJvci1oYW5kbGluZyk6IG1vdmUg SFRUUCBjb2RlIHRvCiAgZ3VpeC9zY3JpcHRzL3N1YnN0aXR1dGUvaHR0cC5zY20uCiogZ3VpeC9z Y3JpcHRzL3N1YnN0aXR1dGUvaHR0cC5zY20KICAocHJvY2Vzcy1zdWJzdGl0dXRpb24vaHR0cCwg ZmV0Y2gtbmFyaW5mby9uYXJpbmZvKQogIChodHRwLXN1YnN0aXR1dGVyKTogZGVmaW5lIHRoZSBI VFRQIHN1YnN0aXR1dGVyLgotLS0KIE1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgIHwg ICAxICsKIGd1aXgvc2NyaXB0cy9zdWJzdGl0dXRlLnNjbSAgICAgIHwgNTIxICsrKysrKysrKysr LS0tLS0tLS0tLS0tLS0tLS0tLS0KIGd1aXgvc2NyaXB0cy9zdWJzdGl0dXRlL2h0dHAuc2NtIHwg NDYyICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogdGVzdHMvc3Vic3RpdHV0ZS5zY20gICAg ICAgICAgICAgfCAxNTQgKysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDc5NCBpbnNlcnRpb25z KCspLCAzNDQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ3VpeC9zY3JpcHRzL3N1 YnN0aXR1dGUvaHR0cC5zY20KCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFt CmluZGV4IDM5NGQyZWY3NWUuLjU0YmVlMzY1M2MgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLmFtCisr KyBiL01ha2VmaWxlLmFtCkBAIC0yNzksNiArMjc5LDcgQEAgTU9EVUxFUyA9CQkJCQlcCiAgIGd1 aXgvc2NyaXB0cy9wdWxsLnNjbQkJCQlcCiAgIGd1aXgvc2NyaXB0cy9wcm9jZXNzZXMuc2NtCQkJ XAogICBndWl4L3NjcmlwdHMvc3Vic3RpdHV0ZS5zY20JCQlcCisgIGd1aXgvc2NyaXB0cy9zdWJz dGl0dXRlL2h0dHAuc2NtCQlcCiAgIGd1aXgvc2NyaXB0cy9hdXRoZW50aWNhdGUuc2NtCQkJXAog ICBndWl4L3NjcmlwdHMvcmVmcmVzaC5zY20JCQlcCiAgIGd1aXgvc2NyaXB0cy9yZXBsLnNjbQkJ CQlcCmRpZmYgLS1naXQgYS9ndWl4L3NjcmlwdHMvc3Vic3RpdHV0ZS5zY20gYi9ndWl4L3Njcmlw dHMvc3Vic3RpdHV0ZS5zY20KaW5kZXggZmNiNDYyYjQ3Yi4uNzgzNDVkY2U4ZiAxMDA3NTUKLS0t IGEvZ3VpeC9zY3JpcHRzL3N1YnN0aXR1dGUuc2NtCisrKyBiL2d1aXgvc2NyaXB0cy9zdWJzdGl0 dXRlLnNjbQpAQCAtMyw2ICszLDcgQEAKIDs7OyBDb3B5cmlnaHQgwqkgMjAxNCBOaWtpdGEgS2Fy ZXRuaWtvdiA8bmlraXRhQGthcmV0bmlrb3Yub3JnPgogOzs7IENvcHlyaWdodCDCqSAyMDE4IEt5 bGUgTWV5ZXIgPGt5bGVAa3lsZWFtLmNvbT4KIDs7OyBDb3B5cmlnaHQgwqkgMjAyMCBDaHJpc3Rv cGhlciBCYWluZXMgPG1haWxAY2JhaW5lcy5uZXQ+Cis7OzsgQ29weXJpZ2h0IMKpIDIwMjEgTWF4 aW1lIERldm9zIDxtYXhpbWVkZXZvc0B0ZWxlbmV0LmJlPgogOzs7CiA7OzsgVGhpcyBmaWxlIGlz IHBhcnQgb2YgR05VIEd1aXguCiA7OzsKQEAgLTMzLDIwICszNCwxOCBAQAogICAjOnVzZS1tb2R1 bGUgKChndWl4IHNlcmlhbGl6YXRpb24pICM6c2VsZWN0IChyZXN0b3JlLWZpbGUgZHVtcC1maWxl KSkKICAgIzphdXRvbG9hZCAgIChndWl4IHN0b3JlIGRlZHVwbGljYXRpb24pIChkdW1wLWZpbGUv ZGVkdXBsaWNhdGUpCiAgICM6YXV0b2xvYWQgICAoZ3VpeCBzY3JpcHRzIGRpc2NvdmVyKSAocmVh ZC1zdWJzdGl0dXRlLXVybHMpCisgICM6YXV0b2xvYWQgICAoZ3VpeCBzY3JpcHRzIHN1YnN0aXR1 dGUgaHR0cCkgKG9wZW4tY29ubmVjdGlvbi1mb3ItdXJpL2NhY2hlZCkKICAgIzp1c2UtbW9kdWxl IChnY3J5cHQgaGFzaCkKICAgIzp1c2UtbW9kdWxlIChndWl4IGJhc2UzMikKICAgIzp1c2UtbW9k dWxlIChndWl4IGJhc2U2NCkKICAgIzp1c2UtbW9kdWxlIChndWl4IGNhY2hlKQorICAjOnVzZS1t b2R1bGUgKGd1aXggcHJvZ3Jlc3MpCiAgICM6dXNlLW1vZHVsZSAoZ2NyeXB0IHBrLWNyeXB0bykK ICAgIzp1c2UtbW9kdWxlIChndWl4IHBraSkKLSAgIzp1c2UtbW9kdWxlICgoZ3VpeCBidWlsZCB1 dGlscykgIzpzZWxlY3QgKG1rZGlyLXAgZHVtcC1wb3J0KSkKKyAgIzp1c2UtbW9kdWxlICgoZ3Vp eCBidWlsZCB1dGlscykgIzpzZWxlY3QgKG1rZGlyLXApKQogICAjOnVzZS1tb2R1bGUgKChndWl4 IGJ1aWxkIGRvd25sb2FkKQotICAgICAgICAgICAgICAgICM6c2VsZWN0ICh1cmktYWJicmV2aWF0 aW9uIG5hci11cmktYWJicmV2aWF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChvcGVu LWNvbm5lY3Rpb24tZm9yLXVyaQotICAgICAgICAgICAgICAgICAgICAgICAgICAgLiBndWl4Om9w ZW4tY29ubmVjdGlvbi1mb3ItdXJpKQotICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZS1w YXRoLWFiYnJldmlhdGlvbiBieXRlLWNvdW50LT5zdHJpbmcpKQotICAjOmF1dG9sb2FkICAgKGdu dXRscykgKGVycm9yL2ludmFsaWQtc2Vzc2lvbikKLSAgIzp1c2UtbW9kdWxlIChndWl4IHByb2dy ZXNzKQorICAgICAgICAgICAgICAgICM6c2VsZWN0ICgob3Blbi1jb25uZWN0aW9uLWZvci11cmkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gZ3VpeDpvcGVuLWNvbm5lY3Rpb24tZm9yLXVy aSkpKQogICAjOnVzZS1tb2R1bGUgKChndWl4IGJ1aWxkIHN5c2NhbGxzKQogICAgICAgICAgICAg ICAgICM6c2VsZWN0IChzZXQtdGhyZWFkLW5hbWUpKQogICAjOnVzZS1tb2R1bGUgKGljZS05IHJk ZWxpbSkKQEAgLTU3LDI2ICs1NiwzMSBAQAogICAjOnVzZS1tb2R1bGUgKGljZS05IGJpbmFyeS1w b3J0cykKICAgIzp1c2UtbW9kdWxlIChpY2UtOSB2bGlzdCkKICAgIzp1c2UtbW9kdWxlIChybnJz IGJ5dGV2ZWN0b3JzKQorICAjOnVzZS1tb2R1bGUgKHdlYiB1cmkpCiAgICM6dXNlLW1vZHVsZSAo c3JmaSBzcmZpLTEpCisgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTIpCiAgICM6dXNlLW1vZHVs ZSAoc3JmaSBzcmZpLTkpCiAgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTExKQogICAjOnVzZS1t b2R1bGUgKHNyZmkgc3JmaS0xOSkKICAgIzp1c2UtbW9kdWxlIChzcmZpIHNyZmktMjYpCiAgICM6 dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTM0KQogICAjOnVzZS1tb2R1bGUgKHNyZmkgc3JmaS0zNSkK LSAgIzp1c2UtbW9kdWxlICh3ZWIgdXJpKQotICAjOnVzZS1tb2R1bGUgKHdlYiBodHRwKQotICAj OnVzZS1tb2R1bGUgKHdlYiByZXF1ZXN0KQotICAjOnVzZS1tb2R1bGUgKHdlYiByZXNwb25zZSkK LSAgIzp1c2UtbW9kdWxlIChndWl4IGh0dHAtY2xpZW50KQogICAjOmV4cG9ydCAobG9va3VwLW5h cmluZm9zCiAgICAgICAgICAgICBsb29rdXAtbmFyaW5mb3MvZGl2ZXJzZQogCiAgICAgICAgICAg ICAlYWxsb3ctdW5hdXRoZW50aWNhdGVkLXN1YnN0aXR1dGVzPwogICAgICAgICAgICAgJWVycm9y LXRvLWZpbGUtZGVzY3JpcHRvci00PwogCisgICAgICAgICAgICAlbmFyaW5mby10cmFuc2llbnQt ZXJyb3ItdHRsCisgICAgICAgICAgICBjYWNoZS1uYXJpbmZvIQorCiAgICAgICAgICAgICBzdWJz dGl0dXRlLXVybHMKLSAgICAgICAgICAgIGd1aXgtc3Vic3RpdHV0ZSkpCisgICAgICAgICAgICBn dWl4LXN1YnN0aXR1dGUKKworICAgICAgICAgICAgbWFrZS1zdWJzdGl0dXRlciBzdWJzdGl0dXRl cj8KKyAgICAgICAgICAgIHN1YnN0aXR1dGVycworICAgICAgICAgICAgZGVmYXVsdC1zdWJzdGl0 dXRlcnMKKyAgICAgICAgICAgIHJlc29sdmUtc3Vic3RpdHV0ZXIpKQogCiA7OzsgQ29tbWVudDoK IDs7OwpAQCAtODcsOCArOTEsOTEgQEAKIDs7OyBJZiBwb3NzaWJsZSwgc3Vic3RpdHV0ZSBhIGJp bmFyeSBmb3IgdGhlIHJlcXVlc3RlZCBzdG9yZSBwYXRoLCB1c2luZyBhIE5peAogOzs7ICJiaW5h cnkgY2FjaGUiLiAgVGhpcyBwcm9ncmFtIGltcGxlbWVudHMgdGhlIE5peCAic3Vic3RpdHV0ZXIi IHByb3RvY29sLgogOzs7Cis7OzsgQ3VycmVudGx5LCBvbmx5IHN1YnN0aXR1dGVzIG92ZXIgSFRU UCwgSFRUUFMsIGFuZCBmcm9tIHRoZSBmaWxlIHN5c3RlbQorOzs7IGFyZSBzdXBwb3J0ZWQuICBB dCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUsIHN1YnN0aXR1dGVzIG92ZXIgSVBGUyBhbmQKKzs7 OyBHTlVuZXQgd2lsbCBiZSBpbXBsZW1lbnRlZCwgaG93ZXZlci4gIFRvIHByZXBhcmUgZm9yIHRo aXMgZnV0dXJlLAorOzs7IHRoZSBIVFRQLXNwZWNpZmljIGNvZGUgaGFzIGJlZW4gc3BsaXQtb2Zm IHRvIChndWl4IHNjcmlwdHMgc3Vic3RpdHV0ZSBodHRwKQorOzs7IGFuZCBhIOKAmGhvb2vigJkg bWVjaGFuaXNtIGhhcyBiZWVuIGRlZmluZWQuCis7OzsKIDs7OyBDb2RlOgogCisMCisKKzs7IERl ZmluaW5nIC8gdXNpbmcgaG9va3MKKzs7Cis7OyBBIHN1YnN0aXR1dGVyIG5hbWVkIE5BTUUgbXVz dCBiZSBkZWZpbmVkIGluIChndWl4IHNjcmlwdHMgc3Vic3RpdHV0ZSBOQU1FKSwKKzs7IGJvdW5k IHRvIGEgdmFyaWFibGUgTkFNRS1zdWJ0aXR1dGVyIHRvIGJlIGF1dG9tYXRpY2FsbHkgZm91bmQs Cis7OyBwcmVzdW1pbmcgaXQgaXMgaW4gdGhlIHByZXNlbnQgaW4gdGhlIHN1YnN0aXR1dGUtbWV0 aG9kcyBkYWVtb24gb3B0aW9uLgorCisoZGVmaW5lLXJlY29yZC10eXBlIDxzdWJzdGl0dXRlcj4K KyAgKG1ha2Utc3Vic3RpdHV0ZXIgbmFtZSBuYXItZG93bmxvYWRlciBmZXRjaC1uYXJpbmZvcyBy ZWNvZ25pc2VkLXVyaS1zY2hlbWVzKQorICBzdWJzdGl0dXRlcj8KKyAgOzsgVGhlIG5hbWUgb2Yg dGhpcyBzdWJzdGl0dXRlciBhcyBhIHN5bWJvbC4KKyAgKG5hbWUgc3Vic3RpdHV0ZXItbmFtZSkK KyAgOzsgSWYgbm90ICNmLCB0aGlzIGlzIGEgcHJvY2VkdXJlIHRoYXQgZG93bmxvYWRzIGEgbmFy LgorICA7OworICA7OyBBcmd1bWVudHM6IChERVNUSU5BVElPTiBOQVJJTkZPIElOLUtXQVJHIC4u LikuCisgIDs7IFJlc3VsdDogKFBPUlQgS1dBUkcgLi4uKS4KKyAgOzsKKyAgOzsgUE9SVCBjYW4g YmUgJ3VucGFja2VkIGlmIHRoZSBzdWJzdGl0dXRlciBoYXMgc3VjY2Vzc2Z1bGx5CisgIDs7IHVu cGFja2VkIHRoZSBuYXIgaW50byBERVNUSU5BVElPTi4gIEl0IGNhbiBiZSAjZiBpZiB0aGUKKyAg Ozsgc3Vic3RpdHV0ZXIgY2Fubm90IGJlIHVzZWQgZm9yIHRoaXMgbmFyaW5mby4gIEFsdGVybmF0 aXZlbHksCisgIDs7IGl0IGNhbiBiZSBhbiBpbnB1dCBwb3J0IGZyb20gd2hpY2ggYSBuYXIgY2Fu IGJlIHJlYWQuCisgIDs7CisgIDs7IEtXQVJHIC4uLiBhcmUga2V5d29yZCBhcmd1bWVudHMuICBD dXJyZW50bHksIHRoZSBmb2xsb3dpbmcKKyAgOzsgYXJlIHJlY29nbmlzZWQ6CisgIDs7ICAgIzph ZnRlci1pbnB1dC1jbG9zZSAod2hlbiBQT1JUIGlzIGEgcG9ydCk6IHRodW5rIHRvCisgIDs7ICAg IGNhbGwgYWZ0ZXIgUE9SVCBoYXMgYmVlbiBjbG9zZWQuICBUaGUgSFRUUCBzdWJzdGl0dXRlcgor ICA7OyAgICB1c2VzIHRoaXMgdG8gd2FpdCBmb3IgdGhlIHJlcG9ydGVyIHRvIGZpbmlzaC4KKyAg KG5hci1kb3dubG9hZGVyIHN1YnN0aXR1dGVyLW5hci1kb3dubG9hZGVyKQorICA7OyBJZiBub3Qg I2YsIHRoaXMgaXMgYSBwcm9kdWNlIHRoYXQgYXR0ZW1wdHMgdG8gZG93bmxvYWQgbmFyaW5mb3Mu CisgIDs7IFRoaXMgaXMgb25seSBjYWxsZWQgaWYgdGhlIFVSTCBoYXMgYW4gVVJJIHNjaGVtZQor ICA7OyBpbiByZWNvZ25pc2VkLXVyaS1zY2hlbWVzLgorICA7OworICA7OyBBcmd1bWVudHM6IChV UkwgUEFUSFMpLgorICA7OyBSZXN1bHQ6IGEgbGlzdCBvZiBuYXJpbmZvcy4KKyAgOzsKKyAgOzsg Q3VycmVudGx5LCB0aGlzIHByb2NlZHVyZSBtdXN0IGhhbmRsZSBjYWNoaW5nIGJ5IGl0c2VsZi4K KyAgKGZldGNoLW5hcmluZm9zIHN1YnN0aXR1dGVyLW5hcmluZm8tZmV0Y2hlcikKKyAgOzsgQSBs aXN0IG9mIHRoZSBVUkkgc2NoZW1lcyBzdXBwb3J0ZWQgYnkgdGhpcyBtZXRob2QuCisgIChyZWNv Z25pc2VkLXVyaS1zY2hlbWVzIHN1YnN0aXR1dGVyLXVyaS1zY2hlbWVzKSkKKworKGRlZmluZSAo cmVzb2x2ZS1zdWJzdGl0dXRlciBuYW1lKQorICAiRmluZCB0aGUgc3Vic3RpdHV0ZXIgbmFtZWQg TkFNRSBhbmQgcmV0dXJuIGl0LgorSWYgdGhlIHN1YnN0aXR1dGVyIGRvZXNuJ3QgZXhpdCwgcmV0 dXJuICNmIGluc3RlYWQuIgorICAoYW5kLWxldCogKChtb2R1bGUgKHJlc29sdmUtbW9kdWxlIGAo Z3VpeCBzY3JpcHRzIHN1YnN0aXR1dGUgLG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIzplbnN1cmUgI2YpKQorICAgICAgICAgICAgICh2YXJpYWJsZSAobW9kdWxl LXZhcmlhYmxlIG1vZHVsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChzeW1ib2wtYXBwZW5kIG5hbWUgJy1zdWJzdGl0dXRlcikpKQorICAgICAgICAgICAgIChzdWJz dGl0dXRlcgorICAgICAgICAgICAgICAoYW5kICh2YXJpYWJsZS1ib3VuZD8gdmFyaWFibGUpCisg ICAgICAgICAgICAgICAgICAgKHZhcmlhYmxlLXJlZiB2YXJpYWJsZSkpKSkKKyAgICAodW5sZXNz IChzdWJzdGl0dXRlcj8gc3Vic3RpdHV0ZXIpCisgICAgICAobGVhdmUgKEdfICInfmEtc3Vic3Rp dHV0ZXInIGlzIG5vdCBhIHN1YnN0aXR1dGVyfiUiKSBuYW1lKSkKKyAgICBzdWJzdGl0dXRlcikp CisKKyhkZWZpbmUgKGRlZmF1bHQtc3Vic3RpdHV0ZXJzKQorICAiTG9vayBpbiB0aGUgZGFlbW9u IG9wdGlvbnMgZm9yIHdoaWNoIHN1YnN0aXR1dGVycyBzaG91bGQgYmUgdXNlZCwKK2FuZCByZXR1 cm5zIHRoZXNlIHN1YnN0aXR1dGVycyBhcyBhIGxpc3QuICBJbiBjYXNlIG5vdCBhbGwgcmVxdWVz dGVkCitzdWJzdGl0dXRlcnMgY291bGQgYmUgZm91bmQsIGVtaXQgYSB3YXJuaW5nIGZvciBlYWNo IG1pc3NpbmcKK3N1YnN0aXR1dGVyLiIKKyAgKGRlZmluZSAocmVzb2x2ZS1zdWJzdGl0dXRlci93 YXJuaW5nIG5hbWUpCisgICAgKG9yIChyZXNvbHZlLXN1YnN0aXR1dGVyIG5hbWUpCisgICAgICAg IChiZWdpbgorICAgICAgICAgICh3YXJuaW5nIChHXyAifmE6IHVua25vd24gc3Vic3RpdHV0ZXJ+ JSIpIG5hbWUpCisgICAgICAgICAgI2YpKSkKKyAgKGZpbHRlci1tYXAgcmVzb2x2ZS1zdWJzdGl0 dXRlci93YXJuaW5nCisgICAgICAgICAgICAgIChvciAoYW5kPT4gKGZpbmQtZGFlbW9uLW9wdGlv biAic3Vic3RpdHV0ZS1tZXRob2RzIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAoY29tcG9z ZSAoY3V0IG1hcCBzdHJpbmctPnN5bWJvbCA8Pikgc3RyaW5nLXRva2VuaXplKSkKKyAgICAgICAg ICAgICAgICAgICcoaHR0cCkpKSkKKworOzsgVGhlIGNyZWF0aW9uIG9mIHRoZSBzdWJzdGl0dXRl cnMgaXMgZGVsYXllZAorOzsgdG8gYXZvaWQgY3ljbGljIGRlcGVuZGVuY2llcy4KKyhkZWZpbmUg JXN1YnN0aXR1dGVycyAoZGVsYXkgKG1ha2UtcGFyYW1ldGVyIChkZWZhdWx0LXN1YnN0aXR1dGVy cykpKSkKKyhkZWZpbmUtc3ludGF4IHN1YnN0aXR1dGVycyAoaWRlbnRpZmllci1zeW50YXggKGZv cmNlICVzdWJzdGl0dXRlcnMpKSkKKworDAorCiAoZGVmaW5lICVuYXJpbmZvLWNhY2hlLWRpcmVj dG9yeQogICA7OyBBIGxvY2FsIGNhY2hlIG9mIG5hcmluZm9zLCB0byBhdm9pZCBnb2luZyB0byB0 aGUgbmV0d29yay4gIE1vc3Qgb2YgdGhlCiAgIDs7IHRpbWUsICdndWl4IHN1YnN0aXR1dGUnIGlz IGNhbGxlZCBieSBndWl4LWRhZW1vbiBhcyByb290IGFuZCBzdG9yZXMgaXRzCkBAIC0xMzAsNDUg KzIxNyw2IEBAIGRpc2FibGVkIX4lIikpCiAgIDs7IEhvdyBvZnRlbiB3ZSB3YW50IHRvIHJlbW92 ZSBmaWxlcyBjb3JyZXNwb25kaW5nIHRvIGV4cGlyZWQgY2FjaGUgZW50cmllcy4KICAgKCogNyAy NCAzNjAwKSkKIAotKGRlZmluZSAlZmV0Y2gtdGltZW91dAotICA7OyBOdW1iZXIgb2Ygc2Vjb25k cyBhZnRlciB3aGljaCBuZXR3b3JraW5nIGlzIGNvbnNpZGVyZWQgInNsb3ciLgotICA1KQotCi0o ZGVmaW5lICVyYW5kb20tc3RhdGUKLSAgKHNlZWQtPnJhbmRvbS1zdGF0ZSAoKyAoYXNoIChjZHIg KGdldHRpbWVvZmRheSkpIDMyKSAoZ2V0cGlkKSkpKQotCi0oZGVmaW5lLXN5bnRheC1ydWxlICh3 aXRoLXRpbWVvdXQgZHVyYXRpb24gaGFuZGxlciBib2R5IC4uLikKLSAgIlJ1biBCT0RZOyB3aGVu IERVUkFUSU9OIHNlY29uZHMgaGF2ZSBleHBpcmVkLCBjYWxsIEhBTkRMRVIsIGFuZCBydW4gQk9E WQotYWdhaW4uIgotICAoYmVnaW4KLSAgICAoc2lnYWN0aW9uIFNJR0FMUk0KLSAgICAgIChsYW1i ZGEgKHNpZ251bSkKLSAgICAgICAgKHNpZ2FjdGlvbiBTSUdBTFJNIFNJR19ERkwpCi0gICAgICAg IGhhbmRsZXIpKQotICAgIChhbGFybSBkdXJhdGlvbikKLSAgICAoY2FsbC13aXRoLXZhbHVlcwot ICAgICAgICAobGFtYmRhICgpCi0gICAgICAgICAgKGxldCB0cnkgKCkKLSAgICAgICAgICAgIChj YXRjaCAnc3lzdGVtLWVycm9yCi0gICAgICAgICAgICAgIChsYW1iZGEgKCkKLSAgICAgICAgICAg ICAgICBib2R5IC4uLikKLSAgICAgICAgICAgICAgKGxhbWJkYSBhcmdzCi0gICAgICAgICAgICAg ICAgOzsgQmVmb3JlIEd1aWxlIHYyLjAuOS0zOS1nZmU1MWM3YiwgdGhlIFNJR0FMUk0gdHJpZ2dl cnMgRUlOVFIKLSAgICAgICAgICAgICAgICA7OyBiZWNhdXNlIG9mIHRoZSBidWcgYXQKLSAgICAg ICAgICAgICAgICA7OyA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2d1aWxlLWRl dmVsLzIwMTMtMDYvbXNnMDAwNTAuaHRtbD4uCi0gICAgICAgICAgICAgICAgOzsgV2hlbiB0aGF0 IGhhcHBlbnMsIHRyeSBhZ2Fpbi4gIE5vdGU6IFNBX1JFU1RBUlQgY2Fubm90IGJlCi0gICAgICAg ICAgICAgICAgOzsgdXNlZCBiZWNhdXNlIG9mIDxodHRwOi8vYnVncy5nbnUub3JnLzE0NjQwPi4K LSAgICAgICAgICAgICAgICAoaWYgKD0gRUlOVFIgKHN5c3RlbS1lcnJvci1lcnJubyBhcmdzKSkK LSAgICAgICAgICAgICAgICAgICAgKGJlZ2luCi0gICAgICAgICAgICAgICAgICAgICAgOzsgV2Fp dCBhIGxpdHRsZSB0byBhdm9pZCBidXJzdHMuCi0gICAgICAgICAgICAgICAgICAgICAgKHVzbGVl cCAocmFuZG9tIDMwMDAwMDAgJXJhbmRvbS1zdGF0ZSkpCi0gICAgICAgICAgICAgICAgICAgICAg KHRyeSkpCi0gICAgICAgICAgICAgICAgICAgIChhcHBseSB0aHJvdyBhcmdzKSkpKSkpCi0gICAg ICAobGFtYmRhIHJlc3VsdAotICAgICAgICAoYWxhcm0gMCkKLSAgICAgICAgKHNpZ2FjdGlvbiBT SUdBTFJNIFNJR19ERkwpCi0gICAgICAgIChhcHBseSB2YWx1ZXMgcmVzdWx0KSkpKSkKLQogKGRl ZmluZSAobmFyaW5mby1jYWNoZS1maWxlIGNhY2hlLXVybCBwYXRoKQogICAiUmV0dXJuIHRoZSBu YW1lIG9mIHRoZSBsb2NhbCBmaWxlIHRoYXQgY29udGFpbnMgYW4gZW50cnkgZm9yIFBBVEguICBU aGUKIGVudHJ5IGlzIHN0b3JlZCBpbiBhIHN1Yi1kaXJlY3Rvcnkgc3BlY2lmaWMgdG8gQ0FDSEUt VVJMLiIKQEAgLTI0MCwxNTUgKzI4OCwxOCBAQCBpbmRpY2F0ZXMgdGhhdCBQQVRIIGlzIHVuYXZh aWxhYmxlIGF0IENBQ0hFLVVSTC4iCiAKICAgbmFyaW5mbykKIAotKGRlZmluZSAobmFyaW5mby1y ZXF1ZXN0IGNhY2hlLXVybCBwYXRoKQotICAiUmV0dXJuIGFuIEhUVFAgcmVxdWVzdCBmb3IgdGhl IG5hcmluZm8gb2YgUEFUSCBhdCBDQUNIRS1VUkwuIgotICAobGV0ICgodXJsIChzdHJpbmctYXBw ZW5kIGNhY2hlLXVybCAiLyIgKHN0b3JlLXBhdGgtaGFzaC1wYXJ0IHBhdGgpCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIi5uYXJpbmZvIikpCi0gICAgICAgIChoZWFkZXJzICcoKFVzZXIt QWdlbnQgLiAiR05VIEd1aWxlIikpKSkKLSAgICAoYnVpbGQtcmVxdWVzdCAoc3RyaW5nLT51cmkg dXJsKSAjOm1ldGhvZCAnR0VUICM6aGVhZGVycyBoZWFkZXJzKSkpCi0KLShkZWZpbmUgKGF0LW1v c3QgbWF4LWxlbmd0aCBsc3QpCi0gICJJZiBMU1QgaXMgc2hvcnRlciB0aGFuIE1BWC1MRU5HVEgs IHJldHVybiBpdCBhbmQgdGhlIGVtcHR5IGxpc3Q7IG90aGVyd2lzZQotcmV0dXJuIGl0cyBNQVgt TEVOR1RIIGZpcnN0IGVsZW1lbnRzIGFuZCBpdHMgdGFpbC4iCi0gIChsZXQgbG9vcCAoKGxlbiAw KQotICAgICAgICAgICAgIChsc3QgbHN0KQotICAgICAgICAgICAgIChyZXN1bHQgJygpKSkKLSAg ICAobWF0Y2ggbHN0Ci0gICAgICAoKCkKLSAgICAgICAodmFsdWVzIChyZXZlcnNlIHJlc3VsdCkg JygpKSkKLSAgICAgICgoaGVhZCAuIHRhaWwpCi0gICAgICAgKGlmICg+PSBsZW4gbWF4LWxlbmd0 aCkKLSAgICAgICAgICAgKHZhbHVlcyAocmV2ZXJzZSByZXN1bHQpIGxzdCkKLSAgICAgICAgICAg KGxvb3AgKCsgMSBsZW4pIHRhaWwgKGNvbnMgaGVhZCByZXN1bHQpKSkpKSkpCi0KLShkZWZpbmUg KHJlYWQtdG8tZW9mIHBvcnQpCi0gICJSZWFkIGZyb20gUE9SVCB1bnRpbCBFT0YgaXMgcmVhY2hl ZC4gIFRoZSBkYXRhIGFyZSBkaXNjYXJkZWQuIgotICAoZHVtcC1wb3J0IHBvcnQgKCVtYWtlLXZv aWQtcG9ydCAidyIpKSkKLQotKGRlZmluZSAobmFyaW5mby1mcm9tLWZpbGUgZmlsZSB1cmwpCi0g ICJBdHRlbXB0IHRvIHJlYWQgYSBuYXJpbmZvIGZyb20gRklMRSwgdXNpbmcgVVJMIGFzIHRoZSBj YWNoZSBVUkwuICBSZXR1cm4gI2YKLWlmIGZpbGUgZG9lc24ndCBleGlzdCwgYW5kIHRoZSBuYXJp bmZvIG90aGVyd2lzZS4iCi0gIChjYXRjaCAnc3lzdGVtLWVycm9yCi0gICAgKGxhbWJkYSAoKQot ICAgICAgKGNhbGwtd2l0aC1pbnB1dC1maWxlIGZpbGUKLSAgICAgICAgKGN1dCByZWFkLW5hcmlu Zm8gPD4gdXJsKSkpCi0gICAgKGxhbWJkYSBhcmdzCi0gICAgICAoaWYgKD0gRU5PRU5UIChzeXN0 ZW0tZXJyb3ItZXJybm8gYXJncykpCi0gICAgICAgICAgI2YKLSAgICAgICAgICAoYXBwbHkgdGhy b3cgYXJncykpKSkpCi0KLShkZWZpbmUgJXVucmVhY2hhYmxlLWhvc3RzCi0gIDs7IFNldCBvZiBu YW1lcyBvZiB1bnJlYWNoYWJsZSBob3N0cy4KLSAgKG1ha2UtaGFzaC10YWJsZSkpCi0KLShkZWZp bmUqIChjYWxsLXdpdGgtY29ubmVjdGlvbi1lcnJvci1oYW5kbGluZyB1cmkgcHJvYykKLSAgIkNh bGwgUFJPQywgYW5kIGNhdGNoIGlmIGEgY29ubmVjdGlvbiBmYWlscywgcHJpbnQgYSB3YXJuaW5n IGFuZCByZXR1cm4gI2YuIgotICAoZGVmaW5lIGhvc3QKLSAgICAodXJpLWhvc3QgdXJpKSkKLQot ICAoY2F0Y2ggI3QKLSAgICBwcm9jCi0gICAgKG1hdGNoLWxhbWJkYSoKLSAgICAgICgoJ2dldGFk ZHJpbmZvLWVycm9yIGVycm9yKQotICAgICAgICh1bmxlc3MgKGhhc2gtcmVmICV1bnJlYWNoYWJs ZS1ob3N0cyBob3N0KQotICAgICAgICAgKGhhc2gtc2V0ISAldW5yZWFjaGFibGUtaG9zdHMgaG9z dCAjdCkgICA7d2FybiBvbmx5IG9uY2UKLSAgICAgICAgICh3YXJuaW5nIChHXyAifmE6IGhvc3Qg bm90IGZvdW5kOiB+YX4lIikKLSAgICAgICAgICAgICAgICAgIGhvc3QgKGdhaS1zdHJlcnJvciBl cnJvcikpKQotICAgICAgICNmKQotICAgICAgKCgnc3lzdGVtLWVycm9yIC4gYXJncykKLSAgICAg ICAodW5sZXNzIChoYXNoLXJlZiAldW5yZWFjaGFibGUtaG9zdHMgaG9zdCkKLSAgICAgICAgICho YXNoLXNldCEgJXVucmVhY2hhYmxlLWhvc3RzIGhvc3QgI3QpCi0gICAgICAgICAod2FybmluZyAo R18gIn5hOiBjb25uZWN0aW9uIGZhaWxlZDogfmF+JSIpIGhvc3QKLSAgICAgICAgICAgICAgICAg IChzdHJlcnJvcgotICAgICAgICAgICAgICAgICAgIChzeXN0ZW0tZXJyb3ItZXJybm8gYChzeXN0 ZW0tZXJyb3IgLEBhcmdzKSkpKSkKLSAgICAgICAjZikKLSAgICAgIChhcmdzCi0gICAgICAgKGFw cGx5IHRocm93IGFyZ3MpKSkpKQotCiAoZGVmaW5lKiAoZmV0Y2gtbmFyaW5mb3MgdXJsIHBhdGhz CiAgICAgICAgICAgICAgICAgICAgICAgICAgIzprZXkgKG9wZW4tY29ubmVjdGlvbiBndWl4Om9w ZW4tY29ubmVjdGlvbi1mb3ItdXJpKSkKICAgIlJldHJpZXZlIGFsbCB0aGUgbmFyaW5mb3MgZm9y IFBBVEhTIGZyb20gdGhlIGNhY2hlIGF0IFVSTCBhbmQgcmV0dXJuIHRoZW0uIgotICAoZGVmaW5l IHVwZGF0ZS1wcm9ncmVzcyEKLSAgICAobGV0ICgoZG9uZSAwKQotICAgICAgICAgICh0b3RhbCAo bGVuZ3RoIHBhdGhzKSkpCi0gICAgICAobGFtYmRhICgpCi0gICAgICAgIChkaXNwbGF5ICJcclx4 MWJbSyIgKGN1cnJlbnQtZXJyb3ItcG9ydCkpIDtlcmFzZSBjdXJyZW50IGxpbmUKLSAgICAgICAg KGZvcmNlLW91dHB1dCAoY3VycmVudC1lcnJvci1wb3J0KSkKLSAgICAgICAgKGZvcm1hdCAoY3Vy cmVudC1lcnJvci1wb3J0KQotICAgICAgICAgICAgICAgIChHXyAidXBkYXRpbmcgc3Vic3RpdHV0 ZXMgZnJvbSAnfmEnLi4uIH41LDFmJSIpCi0gICAgICAgICAgICAgICAgdXJsICgqIDEwMC4gKC8g ZG9uZSB0b3RhbCkpKQotICAgICAgICAoc2V0ISBkb25lICgrIDEgZG9uZSkpKSkpCi0KLSAgKGRl ZmluZSBoYXNoLXBhcnQtPnBhdGgKLSAgICAobGV0ICgobWFwcGluZyAoZm9sZCAobGFtYmRhIChw YXRoIHJlc3VsdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh2aGFzaC1jb25zIChzdG9y ZS1wYXRoLWhhc2gtcGFydCBwYXRoKSBwYXRoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZXN1bHQpKQotICAgICAgICAgICAgICAgICAgICAgICAgIHZsaXN0LW51bGwK LSAgICAgICAgICAgICAgICAgICAgICAgICBwYXRocykpKQotICAgICAgKGxhbWJkYSAoaGFzaCkK LSAgICAgICAgKG1hdGNoICh2aGFzaC1hc3NvYyBoYXNoIG1hcHBpbmcpCi0gICAgICAgICAgKCNm ICNmKQotICAgICAgICAgICgoXyAuIHBhdGgpIHBhdGgpKSkpKQotCi0gIChkZWZpbmUgKGhhbmRs ZS1uYXJpbmZvLXJlc3BvbnNlIHJlcXVlc3QgcmVzcG9uc2UgcG9ydCByZXN1bHQpCi0gICAgKGxl dCogKChjb2RlICAgKHJlc3BvbnNlLWNvZGUgcmVzcG9uc2UpKQotICAgICAgICAgICAobGVuICAg IChyZXNwb25zZS1jb250ZW50LWxlbmd0aCByZXNwb25zZSkpCi0gICAgICAgICAgIChjYWNoZSAg KHJlc3BvbnNlLWNhY2hlLWNvbnRyb2wgcmVzcG9uc2UpKQotICAgICAgICAgICAodHRsICAgIChh bmQgY2FjaGUgKGFzc29jLXJlZiBjYWNoZSAnbWF4LWFnZSkpKSkKLSAgICAgICh1cGRhdGUtcHJv Z3Jlc3MhKQotCi0gICAgICA7OyBNYWtlIHN1cmUgdG8gcmVhZCBubyBtb3JlIHRoYW4gTEVOIGJ5 dGVzIHNpbmNlIHN1YnNlcXVlbnQgYnl0ZXMgbWF5Ci0gICAgICA7OyBiZWxvbmcgdG8gdGhlIG5l eHQgcmVzcG9uc2UuCi0gICAgICAoaWYgKD0gY29kZSAyMDApICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsgaGl0Ci0gICAgICAgICAgKGxldCAoKG5hcmluZm8gKHJlYWQtbmFyaW5mbyBwb3J0 IHVybCAjOnNpemUgbGVuKSkpCi0gICAgICAgICAgICAoaWYgKHN0cmluZz0/IChkaXJuYW1lIChu YXJpbmZvLXBhdGggbmFyaW5mbykpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICglc3RvcmUt cHJlZml4KSkKLSAgICAgICAgICAgICAgICAoYmVnaW4KLSAgICAgICAgICAgICAgICAgIChjYWNo ZS1uYXJpbmZvISB1cmwgKG5hcmluZm8tcGF0aCBuYXJpbmZvKSBuYXJpbmZvIHR0bCkKLSAgICAg ICAgICAgICAgICAgIChjb25zIG5hcmluZm8gcmVzdWx0KSkKLSAgICAgICAgICAgICAgICByZXN1 bHQpKQotICAgICAgICAgIChsZXQqICgocGF0aCAgICAgICh1cmktcGF0aCAocmVxdWVzdC11cmkg cmVxdWVzdCkpKQotICAgICAgICAgICAgICAgICAoaGFzaC1wYXJ0IChiYXNlbmFtZQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWRyb3AtcmlnaHQgcGF0aCA4KSkpKSA7ZHJv cCAiLm5hcmluZm8iCi0gICAgICAgICAgICAoaWYgbGVuCi0gICAgICAgICAgICAgICAgKGdldC1i eXRldmVjdG9yLW4gcG9ydCBsZW4pCi0gICAgICAgICAgICAgICAgKHJlYWQtdG8tZW9mIHBvcnQp KQotICAgICAgICAgICAgKGNhY2hlLW5hcmluZm8hIHVybCAoaGFzaC1wYXJ0LT5wYXRoIGhhc2gt cGFydCkgI2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgKG9yICg9IDQwNCBjb2Rl KSAoPSAyMDIgY29kZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0bAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlbmFyaW5mby10cmFuc2llbnQtZXJyb3ItdHRs KSkKLSAgICAgICAgICAgIHJlc3VsdCkpKSkKLQotICAoZGVmaW5lIChkby1mZXRjaCB1cmkpCi0g ICAgKGNhc2UgKGFuZD0+IHVyaSB1cmktc2NoZW1lKQotICAgICAgKChodHRwIGh0dHBzKQotICAg ICAgIDs7IE5vdGU6IERvIG5vdCBjaGVjayBIVFRQUyBzZXJ2ZXIgY2VydGlmaWNhdGVzIHRvIGF2 b2lkIGRlcGVuZGluZwotICAgICAgIDs7IG9uIHRoZSBYLjUwOSBQS0kuICBXZSBjYW4gZG8gaXQg YmVjYXVzZSB3ZSBhdXRoZW50aWNhdGUKLSAgICAgICA7OyBuYXJpbmZvcywgd2hpY2ggcHJvdmlk ZXMgYSBtdWNoIHN0cm9uZ2VyIGd1YXJhbnRlZS4KLSAgICAgICAobGV0KiAoKHJlcXVlc3RzICht YXAgKGN1dCBuYXJpbmZvLXJlcXVlc3QgdXJsIDw+KSBwYXRocykpCi0gICAgICAgICAgICAgIChy ZXN1bHQgICAoYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHVwZGF0ZS1wcm9ncmVz cyEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChjYWxsLXdpdGgtY29ubmVjdGlvbi1lcnJv ci1oYW5kbGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAobGFtYmRhICgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICho dHRwLW11bHRpcGxlLWdldCB1cmkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGhhbmRsZS1uYXJpbmZvLXJlc3BvbnNlICcoKQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICM6b3Blbi1jb25uZWN0aW9uIG9wZW4t Y29ubmVjdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIzp2ZXJpZnktY2VydGlmaWNhdGU/ICNmKSkpKSkpCi0gICAgICAgICAobmV3bGluZSAoY3Vy cmVudC1lcnJvci1wb3J0KSkKLSAgICAgICAgIHJlc3VsdCkpCi0gICAgICAoKGZpbGUgI2YpCi0g ICAgICAgKGxldCogKChiYXNlICAoc3RyaW5nLWFwcGVuZCAodXJpLXBhdGggdXJpKSAiLyIpKQot ICAgICAgICAgICAgICAoZmlsZXMgKG1hcCAoY29tcG9zZSAoY3V0IHN0cmluZy1hcHBlbmQgYmFz ZSA8PiAiLm5hcmluZm8iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9y ZS1wYXRoLWhhc2gtcGFydCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHMpKSkKLSAg ICAgICAgIChmaWx0ZXItbWFwIChjdXQgbmFyaW5mby1mcm9tLWZpbGUgPD4gdXJsKSBmaWxlcykp KQotICAgICAgKGVsc2UKLSAgICAgICAobGVhdmUgKEdfICJ+czogdW5zdXBwb3J0ZWQgc2VydmVy IFVSSSBzY2hlbWV+JSIpCi0gICAgICAgICAgICAgIChpZiB1cmkgKHVyaS1zY2hlbWUgdXJpKSB1 cmwpKSkpKQotCi0gIChkby1mZXRjaCAoc3RyaW5nLT51cmkgdXJsKSkpCisgIChkZWZpbmUgc2No ZW1lICh1cmktc2NoZW1lIChzdHJpbmctPnVyaSB1cmwpKSkKKyAgKGRlZmluZSB1c2FibGUtc3Vi c3RpdHV0ZXI/CisgICAgKGNvbXBvc2UgKGN1dGUgbWVtcSBzY2hlbWUgPD4pIHN1YnN0aXR1dGVy LXVyaS1zY2hlbWVzKSkKKyAgKGRlZmluZSBmZXRjaC1uYXJpbmZvL3N1YnN0aXR1dGVyCisgICAg KGNvbXBvc2UgKGN1dGUgPD4gdXJsIHBhdGhzICM6b3Blbi1jb25uZWN0aW9uIG9wZW4tY29ubmVj dGlvbikKKyAgICAgICAgICAgICBzdWJzdGl0dXRlci1uYXJpbmZvLWZldGNoZXIpKQorICAoZGVm aW5lIGZvdW5kCisgICAgKG1hcCBmZXRjaC1uYXJpbmZvL3N1YnN0aXR1dGVyIChmaWx0ZXIgdXNh YmxlLXN1YnN0aXR1dGVyPyAoc3Vic3RpdHV0ZXJzKSkpKQorICAoY29uY2F0ZW5hdGUgZm91bmQp KQogCiAoZGVmaW5lKiAobG9va3VwLW5hcmluZm9zIGNhY2hlIHBhdGhzCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICM6a2V5IChvcGVuLWNvbm5lY3Rpb24gZ3VpeDpvcGVuLWNvbm5lY3Rpb24t Zm9yLXVyaSkpCkBAIC02MDYsNTUgKzUxNywyOSBAQCBhdXRob3JpemVkIHN1YnN0aXR1dGVzLiIK ICAgICAod3RmCiAgICAgIChlcnJvciAidW5rbm93biBgLS1xdWVyeScgY29tbWFuZCIgd3RmKSkp KQogCi0oZGVmaW5lICVtYXgtY2FjaGVkLWNvbm5lY3Rpb25zCi0gIDs7IE1heGltdW0gbnVtYmVy IG9mIGNvbm5lY3Rpb25zIGtlcHQgaW4gY2FjaGUgYnkKLSAgOzsgJ29wZW4tY29ubmVjdGlvbi1m b3ItdXJpL2NhY2hlZCcuCi0gIDE2KQotCi0oZGVmaW5lIG9wZW4tY29ubmVjdGlvbi1mb3ItdXJp L2NhY2hlZAotICAobGV0ICgoY2FjaGUgJygpKSkKLSAgICAobGFtYmRhKiAodXJpICM6a2V5IGZy ZXNoPyAodGltZW91dCAlZmV0Y2gtdGltZW91dCkgdmVyaWZ5LWNlcnRpZmljYXRlPykKLSAgICAg ICJSZXR1cm4gYSBjb25uZWN0aW9uIGZvciBVUkksIHBvc3NpYmx5IHJldXNpbmcgYSBjYWNoZWQg Y29ubmVjdGlvbi4KLVdoZW4gRlJFU0g/IGlzIHRydWUsIGRlbGV0ZSBhbnkgY2FjaGVkIGNvbm5l Y3Rpb25zIGZvciBVUkkgYW5kIG9wZW4gYSBuZXcgb25lLgotUmV0dXJuICNmIGlmIFVSSSdzIHNj aGVtZSBpcyAnZmlsZScgb3IgI2YuCi0KLVdoZW4gdHJ1ZSwgVElNRU9VVCBpcyB0aGUgbWF4aW11 bSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yCi1jb25uZWN0aW9uIGVzdGFibGlz aG1lbnQuICBXaGVuIFZFUklGWS1DRVJUSUZJQ0FURT8gaXMgdHJ1ZSwgdmVyaWZ5IEhUVFBTCi1z ZXJ2ZXIgY2VydGlmaWNhdGVzLiIKLSAgICAgIChkZWZpbmUgaG9zdCAodXJpLWhvc3QgdXJpKSkK LSAgICAgIChkZWZpbmUgc2NoZW1lICh1cmktc2NoZW1lIHVyaSkpCi0gICAgICAoZGVmaW5lIGtl eSAobGlzdCBob3N0IHNjaGVtZSAodXJpLXBvcnQgdXJpKSkpCi0KLSAgICAgIChhbmQgKG5vdCAo bWVtcSBzY2hlbWUgJyhmaWxlICNmKSkpCi0gICAgICAgICAgIChtYXRjaCAoYXNzb2MtcmVmIGNh Y2hlIGtleSkKLSAgICAgICAgICAgICAoI2YKLSAgICAgICAgICAgICAgOzsgT3BlbiBhIG5ldyBj b25uZWN0aW9uIHRvIFVSSSBhbmQgZXZpY3Qgb2xkIGVudHJpZXMgZnJvbQotICAgICAgICAgICAg ICA7OyBDQUNIRSwgaWYgYW55LgotICAgICAgICAgICAgICAobGV0LXZhbHVlcyAoKChzb2NrZXQp Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGd1aXg6b3Blbi1jb25uZWN0aW9uLWZvci11 cmkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICM6dmVyaWZ5LWNlcnRpZmljYXRlPyB2ZXJpZnktY2VydGlmaWNhdGU/Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICM6dGltZW91dCB0aW1lb3V0KSkKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICgobmV3LWNhY2hlIGV2aWN0ZWQpCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGF0LW1vc3QgKC0gJW1heC1jYWNoZWQtY29ubmVjdGlvbnMgMSkgY2FjaGUpKSkK LSAgICAgICAgICAgICAgICAoZm9yLWVhY2ggKG1hdGNoLWxhbWJkYQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgoXyAuIHBvcnQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChm YWxzZS1pZi1leGNlcHRpb24gKGNsb3NlLXBvcnQgcG9ydCkpKSkKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgZXZpY3RlZCkKLSAgICAgICAgICAgICAgICAoc2V0ISBjYWNoZSAoYWxpc3QtY29u cyBrZXkgc29ja2V0IG5ldy1jYWNoZSkpCi0gICAgICAgICAgICAgICAgc29ja2V0KSkKLSAgICAg ICAgICAgICAoc29ja2V0Ci0gICAgICAgICAgICAgIChpZiAob3IgZnJlc2g/IChwb3J0LWNsb3Nl ZD8gc29ja2V0KSkKLSAgICAgICAgICAgICAgICAgIChiZWdpbgotICAgICAgICAgICAgICAgICAg ICAoZmFsc2UtaWYtZXhjZXB0aW9uIChjbG9zZS1wb3J0IHNvY2tldCkpCi0gICAgICAgICAgICAg ICAgICAgIChzZXQhIGNhY2hlIChhbGlzdC1kZWxldGUga2V5IGNhY2hlKSkKLSAgICAgICAgICAg ICAgICAgICAgKG9wZW4tY29ubmVjdGlvbi1mb3ItdXJpL2NhY2hlZCB1cmkgIzp0aW1lb3V0IHRp bWVvdXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjOnZlcmlmeS1jZXJ0aWZpY2F0ZT8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2ZXJpZnktY2VydGlmaWNhdGU/KSkKLSAgICAgICAgICAgICAg ICAgIChiZWdpbgotICAgICAgICAgICAgICAgICAgICA7OyBEcmFpbiBpbnB1dCBsZWZ0IGZyb20g dGhlIHByZXZpb3VzIHVzZS4KLSAgICAgICAgICAgICAgICAgICAgKGRyYWluLWlucHV0IHNvY2tl dCkKLSAgICAgICAgICAgICAgICAgICAgc29ja2V0KSkpKSkpKSkKKyhkZWZpbmUgKHZlcmlmeS1o YXNoIGFjdHVhbCBleHBlY3RlZCBhbGdvcml0aG0gbmFyaW5mbykKKyAgIkNoZWNrIHdoZXRoZXIg d2UgZ290IHRoZSBkYXRhIGFubm91bmNlZCBpbiB0aGUgbmFyaW5mbyBOQVJJTkZPLgorQUNUVUFM IGlzIHRoZSBhY3R1YWwgaGFzaCwgYW5kIEVYUEVDVEVEIGlzIHRoZSBoYXNoIGFjY29yZGluZwor dG8gdGhlIG5hcmluZm8uIgorICAoaWYgKGJ5dGV2ZWN0b3I9PyBhY3R1YWwgZXhwZWN0ZWQpCisg ICAgICA7OyBUZWxsIHRoZSBkYWVtb24gdGhhdCB3ZSdyZSBkb25lLgorICAgICAgKGZvcm1hdCAo Y3VycmVudC1vdXRwdXQtcG9ydCkgInN1Y2Nlc3MgfmEgfmF+JSIKKyAgICAgICAgICAgICAgKG5h cmluZm8taGFzaCBuYXJpbmZvKSAobmFyaW5mby1zaXplIG5hcmluZm8pKQorICAgICAgOzsgVGhl IGFjdHVhbCBkYXRhIGhhcyBhIGRpZmZlcmVudCBoYXNoIHRoYW4gdGhhdCBpbiBOQVJJTkZPLgor ICAgICAgKGZvcm1hdCAoY3VycmVudC1vdXRwdXQtcG9ydCkgImhhc2gtbWlzbWF0Y2ggfmEgfmEg fmF+JSIKKyAgICAgICAgICAgICAgKGhhc2gtYWxnb3JpdGhtLW5hbWUgYWxnb3JpdGhtKQorICAg ICAgICAgICAgICAoYnl0ZXZlY3Rvci0+bml4LWJhc2UzMi1zdHJpbmcgZXhwZWN0ZWQpCisgICAg ICAgICAgICAgIChieXRldmVjdG9yLT5uaXgtYmFzZTMyLXN0cmluZyBhY3R1YWwpKSkpCisKKyhk ZWZpbmUgKHZlcmlmeS1oYXNoL3Vua25vd24gLiByZXN0KQorICA7OyBWYXJpYW50IG9mIHZlcmlm eS1oYXNoIHdoZXJlIHRoZSBoYXNoIGhhc24ndCB5ZXQgYmVlbiBjb21wdXRlZC4KKyAgOzsgVE9E TzogdGhpcyB3aWxsIGJlIGltcGxlbWVudGVkIGxhdGVyIGluIHRoZSBwYXRjaCBzZXJpZXMhCisg IDs7IChUbyBiZSB1c2VkIGJ5IHRoZSBJUEZTIGFuZCBHTlVuZXQgc3Vic3RpdHV0ZXIpCisgIChs ZWF2ZSAoR18gIlRPRE8gdmVyaWZ5LWhhc2gvdW5rbm93biBpcyB1bmltcGxlbWVudGVkfiUiKSkp CisKKyhkZWZpbmUtc3ludGF4LXJ1bGUgKHJlY2VpdmUqIGt3YXJncyBleHAgZXhwKiBleHAqKiAu Li4pCisgIChjYWxsLXdpdGgtdmFsdWVzIChsYW1iZGEgKCkgZXhwKQorICAgIChsYW1iZGEqIGt3 YXJncyBleHAqIGV4cCoqIC4uLikpKQogCiAoZGVmaW5lKiAocHJvY2Vzcy1zdWJzdGl0dXRpb24g c3RvcmUtaXRlbSBkZXN0aW5hdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICM6 a2V5IGNhY2hlLXVybHMgYWNsCkBAIC02ODAsMTA3ICs1NjUsNTQgQEAgdGhlIGN1cnJlbnQgb3V0 cHV0IHBvcnQuIgogICAgIChhcHBseSBkdW1wLWZpbGUvZGVkdXBsaWNhdGUKICAgICAgICAgICAg KGFwcGVuZCBhcmdzIChsaXN0ICM6c3RvcmUgKCVzdG9yZS1wcmVmaXgpKSkpKQogCi0gIChkZWZp bmUgKGZldGNoIHVyaSkKLSAgICAoY2FzZSAodXJpLXNjaGVtZSB1cmkpCi0gICAgICAoKGZpbGUp Ci0gICAgICAgKGxldCAoKHBvcnQgKG9wZW4tZmlsZSAodXJpLXBhdGggdXJpKSAicjBiIikpKQot ICAgICAgICAgKHZhbHVlcyBwb3J0IChzdGF0OnNpemUgKHN0YXQgcG9ydCkpKSkpCi0gICAgICAo KGh0dHAgaHR0cHMpCi0gICAgICAgKGd1YXJkIChjICgoaHR0cC1nZXQtZXJyb3I/IGMpCi0gICAg ICAgICAgICAgICAgICAobGVhdmUgKEdfICJkb3dubG9hZCBmcm9tICd+YScgZmFpbGVkOiB+YSwg fnN+JSIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHVyaS0+c3RyaW5nIChodHRwLWdldC1l cnJvci11cmkgYykpCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGh0dHAtZ2V0LWVycm9yLWNv ZGUgYykKLSAgICAgICAgICAgICAgICAgICAgICAgICAoaHR0cC1nZXQtZXJyb3ItcmVhc29uIGMp KSkpCi0gICAgICAgICA7OyBUZXN0IHRoaXMgd2l0aDoKLSAgICAgICAgIDs7ICAgc3VkbyB0YyBx ZGlzYyBhZGQgZGV2IGV0aDAgcm9vdCBuZXRlbSBkZWxheSAxNTAwbXMKLSAgICAgICAgIDs7IGFu ZCB0aGVuIGNhbmNlbCB3aXRoOgotICAgICAgICAgOzsgICBzdWRvIHRjIHFkaXNjIGRlbCBkZXYg ZXRoMCByb290Ci0gICAgICAgICAod2l0aC10aW1lb3V0ICVmZXRjaC10aW1lb3V0Ci0gICAgICAg ICAgIChiZWdpbgotICAgICAgICAgICAgICh3YXJuaW5nIChHXyAid2hpbGUgZmV0Y2hpbmcgfmE6 IHNlcnZlciBpcyBzb21ld2hhdCBzbG93fiUiKQotICAgICAgICAgICAgICAgICAgICAgICh1cmkt PnN0cmluZyB1cmkpKQotICAgICAgICAgICAgICh3YXJuaW5nIChHXyAidHJ5IGAtLW5vLXN1YnN0 aXR1dGVzJyBpZiB0aGUgcHJvYmxlbSBwZXJzaXN0c34lIikpKQotICAgICAgICAgICAoY2FsbC13 aXRoLWNvbm5lY3Rpb24tZXJyb3ItaGFuZGxpbmcKLSAgICAgICAgICAgIHVyaQotICAgICAgICAg ICAgKGxhbWJkYSAoKQotICAgICAgICAgICAgICAoaHR0cC1mZXRjaCB1cmkgIzp0ZXh0PyAjZgot ICAgICAgICAgICAgICAgICAgICAgICAgICAjOm9wZW4tY29ubmVjdGlvbiBvcGVuLWNvbm5lY3Rp b24tZm9yLXVyaS9jYWNoZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIzprZWVwLWFsaXZl PyAjdAotICAgICAgICAgICAgICAgICAgICAgICAgICAjOmJ1ZmZlcmVkPyAjZgotICAgICAgICAg ICAgICAgICAgICAgICAgICAjOnZlcmlmeS1jZXJ0aWZpY2F0ZT8gI2YpKSkpKSkKLSAgICAgIChl bHNlCi0gICAgICAgKGxlYXZlIChHXyAidW5zdXBwb3J0ZWQgc3Vic3RpdHV0ZSBVUkkgc2NoZW1l OiB+YX4lIikKLSAgICAgICAgICAgICAgKHVyaS0+c3RyaW5nIHVyaSkpKSkpCi0KICAgKHVubGVz cyBuYXJpbmZvCiAgICAgKGxlYXZlIChHXyAibm8gdmFsaWQgc3Vic3RpdHV0ZSBmb3IgJ35hJ34l IikKICAgICAgICAgICAgc3RvcmUtaXRlbSkpCiAKLSAgKGxldC12YWx1ZXMgKCgodXJpIGNvbXBy ZXNzaW9uIGZpbGUtc2l6ZSkKLSAgICAgICAgICAgICAgICAobmFyaW5mby1iZXN0LXVyaSBuYXJp bmZvKSkpCi0gICAgKHVubGVzcyBwcmludC1idWlsZC10cmFjZT8KLSAgICAgIChmb3JtYXQgKGN1 cnJlbnQtZXJyb3ItcG9ydCkKLSAgICAgICAgICAgICAgKEdfICJEb3dubG9hZGluZyB+YS4uLn4l IikgKHVyaS0+c3RyaW5nIHVyaSkpKQotCi0gICAgKGxldCotdmFsdWVzICgoKHJhdyBkb3dubG9h ZC1zaXplKQotICAgICAgICAgICAgICAgICAgIDs7ICdndWl4IHB1Ymxpc2gnIHdpdGhvdXQgJy0t Y2FjaGUnIGRvZXNuJ3Qgc3BlY2lmeSBhCi0gICAgICAgICAgICAgICAgICAgOzsgQ29udGVudC1M ZW5ndGgsIHNvIERPV05MT0FELVNJWkUgaXMgI2YgaW4gdGhpcyBjYXNlLgotICAgICAgICAgICAg ICAgICAgIChmZXRjaCB1cmkpKQotICAgICAgICAgICAgICAgICAgKChwcm9ncmVzcykKLSAgICAg ICAgICAgICAgICAgICAobGV0KiAoKGRsLXNpemUgIChvciBkb3dubG9hZC1zaXplCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCAoZXF1YWw/IGNvbXByZXNzaW9u ICJub25lIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChu YXJpbmZvLXNpemUgbmFyaW5mbykpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlcG9y dGVyIChpZiBwcmludC1idWlsZC10cmFjZT8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAocHJvZ3Jlc3MtcmVwb3J0ZXIvdHJhY2UKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHVyaS0+c3RyaW5nIHVyaSkgZGwtc2l6ZQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3VycmVudC1lcnJvci1wb3J0KSkKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvZ3Jlc3MtcmVwb3J0ZXIvZmls ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXJpLT5zdHJpbmcg dXJpKSBkbC1zaXplCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj dXJyZW50LWVycm9yLXBvcnQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICM6YWJicmV2aWF0aW9uIG5hci11cmktYWJicmV2aWF0aW9uKSkpKQotICAgICAgICAgICAg ICAgICAgICAgOzsgS2VlcCBSQVcgb3BlbiB1cG9uIGNvbXBsZXRpb24gc28gd2UgY2FuIGxhdGVy IHJldXNlCi0gICAgICAgICAgICAgICAgICAgICA7OyB0aGUgdW5kZXJseWluZyBjb25uZWN0aW9u LgotICAgICAgICAgICAgICAgICAgICAgKHByb2dyZXNzLXJlcG9ydC1wb3J0IHJlcG9ydGVyIHJh dyAjOmNsb3NlPyAjZikpKQotICAgICAgICAgICAgICAgICAgKChpbnB1dCBwaWRzKQotICAgICAg ICAgICAgICAgICAgIDs7IE5PVEU6IFRoaXMgJ3Byb2dyZXNzJyBwb3J0IG9mIGN1cnJlbnQgcHJv Y2VzcyB3aWxsIGJlCi0gICAgICAgICAgICAgICAgICAgOzsgY2xvc2VkIGhlcmUsIHdoaWxlIHRo ZSBjaGlsZCBwcm9jZXNzIGRvaW5nIHRoZQotICAgICAgICAgICAgICAgICAgIDs7IHJlcG9ydGlu ZyB3aWxsIGNsb3NlIGl0IHVwb24gZXhpdC4KLSAgICAgICAgICAgICAgICAgICAoZGVjb21wcmVz c2VkLXBvcnQgKHN0cmluZy0+c3ltYm9sIGNvbXByZXNzaW9uKQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcykpCi0KLSAgICAgICAgICAgICAgICAgIDs7IENv bXB1dGUgdGhlIGFjdHVhbCBuYXIgaGFzaCBhcyB3ZSByZWFkIGl0LgotICAgICAgICAgICAgICAg ICAgKChhbGdvcml0aG0gZXhwZWN0ZWQpCi0gICAgICAgICAgICAgICAgICAgKG5hcmluZm8taGFz aC1hbGdvcml0aG0rdmFsdWUgbmFyaW5mbykpCi0gICAgICAgICAgICAgICAgICAoKGhhc2hlZCBn ZXQtaGFzaCkKLSAgICAgICAgICAgICAgICAgICAob3Blbi1oYXNoLWlucHV0LXBvcnQgYWxnb3Jp dGhtIGlucHV0KSkpCi0gICAgICA7OyBVbnBhY2sgdGhlIE5hciBhdCBJTlBVVCBpbnRvIERFU1RJ TkFUSU9OLgotICAgICAgKHJlc3RvcmUtZmlsZSBoYXNoZWQgZGVzdGluYXRpb24KLSAgICAgICAg ICAgICAgICAgICAgIzpkdW1wLWZpbGUgKGlmIChhbmQgZGVzdGluYXRpb24taW4tc3RvcmU/Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZHVwbGljYXRlPykKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXAtZmlsZS9kZWR1cGxpY2F0ZSoK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXAtZmlsZSkpCi0gICAgICAo Y2xvc2UtcG9ydCBoYXNoZWQpCi0gICAgICAoY2xvc2UtcG9ydCBpbnB1dCkKLQotICAgICAgOzsg V2FpdCBmb3IgdGhlIHJlcG9ydGVyIHRvIGZpbmlzaC4KLSAgICAgIChldmVyeSAoY29tcG9zZSB6 ZXJvPyBjZHIgd2FpdHBpZCkgcGlkcykKLQotICAgICAgOzsgU2tpcCBhIGxpbmUgYWZ0ZXIgd2hh dCAncHJvZ3Jlc3MtcmVwb3J0ZXIvZmlsZScgcHJpbnRlZCwgYW5kIGFub3RoZXIKLSAgICAgIDs7 IG9uZSB0byB2aXN1YWxseSBzZXBhcmF0ZSBzdWJzdGl0dXRpb25zLgotICAgICAgKGRpc3BsYXkg IlxuXG4iIChjdXJyZW50LWVycm9yLXBvcnQpKQotCi0gICAgICA7OyBDaGVjayB3aGV0aGVyIHdl IGdvdCB0aGUgZGF0YSBhbm5vdW5jZWQgaW4gTkFSSU5GTy4KLSAgICAgIChsZXQgKChhY3R1YWwg KGdldC1oYXNoKSkpCi0gICAgICAgIChpZiAoYnl0ZXZlY3Rvcj0/IGFjdHVhbCBleHBlY3RlZCkK LSAgICAgICAgICAgIDs7IFRlbGwgdGhlIGRhZW1vbiB0aGF0IHdlJ3JlIGRvbmUuCi0gICAgICAg ICAgICAoZm9ybWF0IChjdXJyZW50LW91dHB1dC1wb3J0KSAic3VjY2VzcyB+YSB+YX4lIgotICAg ICAgICAgICAgICAgICAgICAobmFyaW5mby1oYXNoIG5hcmluZm8pIChuYXJpbmZvLXNpemUgbmFy aW5mbykpCi0gICAgICAgICAgICA7OyBUaGUgYWN0dWFsIGRhdGEgaGFzIGEgZGlmZmVyZW50IGhh c2ggdGhhbiB0aGF0IGluIE5BUklORk8uCi0gICAgICAgICAgICAoZm9ybWF0IChjdXJyZW50LW91 dHB1dC1wb3J0KSAiaGFzaC1taXNtYXRjaCB+YSB+YSB+YX4lIgotICAgICAgICAgICAgICAgICAg ICAoaGFzaC1hbGdvcml0aG0tbmFtZSBhbGdvcml0aG0pCi0gICAgICAgICAgICAgICAgICAgIChi eXRldmVjdG9yLT5uaXgtYmFzZTMyLXN0cmluZyBleHBlY3RlZCkKLSAgICAgICAgICAgICAgICAg ICAgKGJ5dGV2ZWN0b3ItPm5peC1iYXNlMzItc3RyaW5nIGFjdHVhbCkpKSkpKSkKKyAgOzsgVHJ5 IGVhY2ggaG9vayBpbi1vcmRlciwgdW50aWwgYSBob29rIGlzIHN1Y2Nlc3NmdWwuCisgIChsZXQg bG9vcCAoKGhvb2tzIChmaWx0ZXIgc3Vic3RpdHV0ZXItbmFyLWRvd25sb2FkZXIgKHN1YnN0aXR1 dGVycykpKSkKKyAgICAodW5sZXNzIChwYWlyPyBob29rcykKKyAgICAgIChsZWF2ZSAoR18gIm5v IHN1YnN0aXR1dGVyIGZvciAnYSd+JSIpCisgICAgICAgICAgICAgc3RvcmUtaXRlbSkpCisgICAg KHJlY2VpdmUqIChpbnB1dCAjOmtleSBhZnRlci1pbnB1dC1jbG9zZSkKKyAgICAgICAgKChzdWJz dGl0dXRlci1uYXItZG93bmxvYWRlciAoY2FyIGhvb2tzKSkgZGVzdGluYXRpb24gbmFyaW5mbwor ICAgICAgICAgIzpwcmludC1idWlsZC10cmFjZT8gcHJpbnQtYnVpbGQtdHJhY2U/KQorICAgICAg KGNvbmQgKChub3QgaW5wdXQpCisgICAgICAgICAgICAgKGZvcm1hdCAoY3VycmVudC1lcnJvci1w b3J0KQorICAgICAgICAgICAgICAgICAgICAgKEdfICJTdWJzdGl0dXRlciAnfmEnIG5vdCBhcHBs aWNhYmxlIGZvciAnfmEnLn4lIikKKyAgICAgICAgICAgICAgICAgICAgIChzdWJzdGl0dXRlci1u YW1lIChjYXIgaG9va3MpKQorICAgICAgICAgICAgICAgICAgICAgc3RvcmUtaXRlbSkKKyAgICAg ICAgICAgICA7OyBUaGlzIGhvb2sgd2FzIHVudXNhYmxlLCB0cnkgdGhlIG5leHQgaG9vay4KKyAg ICAgICAgICAgICAobG9vcCAoY2RyIGhvb2tzKSkpCisgICAgICAgICAgICAoKGlucHV0LXBvcnQ/ IGlucHV0KQorICAgICAgICAgICAgIDs7IENvbXB1dGUgdGhlIGFjdHVhbCBuYXIgaGFzaCBhcyB3 ZSByZWFkIGl0LgorICAgICAgICAgICAgIChsZXQqLXZhbHVlcyAoKChhbGdvcml0aG0gZXhwZWN0 ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hcmluZm8taGFzaC1hbGdvcml0aG0r dmFsdWUgbmFyaW5mbykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGhhc2hlZCBnZXQt aGFzaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3Blbi1oYXNoLWlucHV0LXBvcnQg YWxnb3JpdGhtIGlucHV0KSkpCisgICAgICAgICAgICAgICA7OyBVbnBhY2sgdGhlIE5hciBhdCBJ TlBVVCBpbnRvIERFU1RJTkFUSU9OLgorICAgICAgICAgICAgICAgKHJlc3RvcmUtZmlsZSBoYXNo ZWQgZGVzdGluYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzpkdW1wLWZpbGUg KGlmIChhbmQgZGVzdGluYXRpb24taW4tc3RvcmU/CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRlZHVwbGljYXRlPykKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXAtZmlsZS9kZWR1cGxpY2F0ZSoKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXAtZmlsZSkpCisgICAg ICAgICAgICAgICAoY2xvc2UtcG9ydCBoYXNoZWQpCisgICAgICAgICAgICAgICAoY2xvc2UtcG9y dCBpbnB1dCkKKyAgICAgICAgICAgICAgICh3aGVuIGFmdGVyLWlucHV0LWNsb3NlCisgICAgICAg ICAgICAgICAgIChhZnRlci1pbnB1dC1jbG9zZSkpCisgICAgICAgICAgICAgICA7OyBDaGVjayB3 aGV0aGVyIHdlIGdvdCB0aGUgZGF0YSBhbm5vdW5jZWQgaW4gTkFSSU5GTy4KKyAgICAgICAgICAg ICAgICh2ZXJpZnktaGFzaCAoZ2V0LWhhc2gpIGV4cGVjdGVkIGFsZ29yaXRobSBuYXJpbmZvKSkp CisgICAgICAgICAgICAoKGVxPyBpbnB1dCAndW5wYWNrZWQpCisgICAgICAgICAgICAgKHdoZW4g YWZ0ZXItaW5wdXQtY2xvc2UKKyAgICAgICAgICAgICAgIChhZnRlci1pbnB1dC1jbG9zZSkpCisg ICAgICAgICAgICAgOzsgQ2hlY2sgd2hldGhlciB3ZSBnb3QgdGhlIGRhdGEgYW5ub3VuY2VkIGlu IHRoZSBOQVJJTkZPLgorICAgICAgICAgICAgICh2ZXJpZnktaGFzaC91bmtub3duIGRlc3RpbmF0 aW9uIG5hcmluZm8pKQorICAgICAgICAgICAgKGVsc2UKKyAgICAgICAgICAgICAoZm9ybWF0IChj dXJyZW50LWVycm9yLXBvcnQpICJ+c34lIiBpbnB1dCkKKyAgICAgICAgICAgICAobGVhdmUKKyAg ICAgICAgICAgICAgKEdfICJTdWJzdGl0dXRlciAnfmEnIGRpZCBub3QgcHJvZHVjZSB1c2FibGUg b3V0cHV0IGZvciAnfmEnLiIpCisgICAgICAgICAgICAgIChzdWJzdGl0dXRlci1uYW1lIChjYXIg aG9va3MpKQorICAgICAgICAgICAgICBzdG9yZS1pdGVtKSkpKSkpCiAKIAwKIDs7OwpAQCAtOTky LDYgKzgyNCw3IEBAIGlmIG5lZWRlZCwgYXMgZXhwZWN0ZWQgYnkgdGhlIGRhZW1vbidzIGFnZW50 LiIKICAgICAgICAgICAobGVhdmUgKEdfICJ+YTogdW5yZWNvZ25pemVkIG9wdGlvbnN+JSIpIG9w dHMpKSkpKSkpCiAKIDs7OyBMb2NhbCBWYXJpYWJsZXM6Cis7OzsgZXZhbDogKHB1dCAncmVjZWl2 ZSogJ3NjaGVtZS1pbmRlbnQtZnVuY3Rpb24gMikKIDs7OyBldmFsOiAocHV0ICd3aXRoLXRpbWVv dXQgJ3NjaGVtZS1pbmRlbnQtZnVuY3Rpb24gMSkKIDs7OyBldmFsOiAocHV0ICd3aXRoLXJlZGly ZWN0ZWQtZXJyb3ItcG9ydCAnc2NoZW1lLWluZGVudC1mdW5jdGlvbiAwKQogOzs7IEVuZDoKZGlm ZiAtLWdpdCBhL2d1aXgvc2NyaXB0cy9zdWJzdGl0dXRlL2h0dHAuc2NtIGIvZ3VpeC9zY3JpcHRz L3N1YnN0aXR1dGUvaHR0cC5zY20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MC4uZDVkZDFlNGE4ZQotLS0gL2Rldi9udWxsCisrKyBiL2d1aXgvc2NyaXB0cy9zdWJzdGl0dXRl L2h0dHAuc2NtCkBAIC0wLDAgKzEsNDYyIEBACis7OzsgR05VIEd1aXggLS0tIEZ1bmN0aW9uYWwg cGFja2FnZSBtYW5hZ2VtZW50IGZvciBHTlUKKzs7OyBDb3B5cmlnaHQgwqkgMjAxMywgMjAxNCwg MjAxNSwgMjAxNiwgMjAxNywgMjAxOCwgMjAxOSwgMjAyMCBMdWRvdmljIENvdXJ0w6hzIDxsdWRv QGdudS5vcmc+Cis7OzsgQ29weXJpZ2h0IMKpIDIwMTQgTmlraXRhIEthcmV0bmlrb3YgPG5pa2l0 YUBrYXJldG5pa292Lm9yZz4KKzs7OyBDb3B5cmlnaHQgwqkgMjAxOCBLeWxlIE1leWVyIDxreWxl QGt5bGVhbS5jb20+Cis7OzsgQ29weXJpZ2h0IMKpIDIwMjAgQ2hyaXN0b3BoZXIgQmFpbmVzIDxt YWlsQGNiYWluZXMubmV0PgorOzs7IENvcHlyaWdodCDCqSAyMDIxIE1heGltZSBEZXZvcyA8bWF4 aW1lZGV2b3NAdGVsZW5ldC5iZT4KKzs7OworOzs7IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBH dWl4LgorOzs7Cis7OzsgR05VIEd1aXggaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorOzs7IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cis7OzsgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0 Cis7OzsgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorOzs7Cis7OzsgR05VIEd1aXgg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Cis7 OzsgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorOzs7IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKzs7OyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorOzs7Cis7OzsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKzs7OyBhbG9uZyB3aXRoIEdOVSBHdWl4LiAgSWYg bm90LCBzZWUgPGh0dHA6Ly8KKworOzs7IENvbW1lbnQ6Cis7OzsKKzs7OyBUaGlzIGlzIHRoZSBp bXBsZW1lbnRhdGlvbiBvZiB0aGUgYmluYXJ5IHN1YnN0aXR1dGVyIGZvcgorOzs7IHN1YnN0aXR1 dGVzIG92ZXIgSFRUUCBhbmQgSFRUUFMgKGFuZCBwZXJoYXBzIHRlY2huaWNhbCBzaW1pbGFyCis7 Ozsgc3lzdGVtcyBpbiB0aGUgZnV0dXJlKS4KKzs7OworOzs7IENvZGU6CisKKyhkZWZpbmUtbW9k dWxlIChndWl4IHNjcmlwdHMgc3Vic3RpdHV0ZSBodHRwKQorICAjOmV4cG9ydCAoaHR0cC1zdWJz dGl0dXRlciBvcGVuLWNvbm5lY3Rpb24tZm9yLXVyaS9jYWNoZWQpCisgICM6dXNlLW1vZHVsZSAo Z3VpeCB1aSkKKyAgIzp1c2UtbW9kdWxlIChndWl4IHV0aWxzKQorICAjOnVzZS1tb2R1bGUgKGd1 aXggc2NyaXB0cyBzdWJzdGl0dXRlKQorICAjOnVzZS1tb2R1bGUgKGd1aXggbmFyaW5mbykKKyAg Izp1c2UtbW9kdWxlIChndWl4IGkxOG4pCisgICM6dXNlLW1vZHVsZSAoKGd1aXggYnVpbGQgdXRp bHMpICM6c2VsZWN0IChkdW1wLXBvcnQpKQorICAjOnVzZS1tb2R1bGUgKHNyZmkgc3JmaS0xKQor ICAjOnVzZS1tb2R1bGUgKHNyZmkgc3JmaS0xMSkKKyAgIzp1c2UtbW9kdWxlIChzcmZpIHNyZmkt MjYpCisgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTM0KQorICAjOnVzZS1tb2R1bGUgKHdlYiB1 cmkpCisgICM6dXNlLW1vZHVsZSAod2ViIGh0dHApCisgICM6dXNlLW1vZHVsZSAod2ViIHJlcXVl c3QpCisgICM6dXNlLW1vZHVsZSAod2ViIHJlc3BvbnNlKQorICAjOnVzZS1tb2R1bGUgKGd1aXgg aHR0cC1jbGllbnQpCisgICM6dXNlLW1vZHVsZSAoKGd1aXggYnVpbGQgZG93bmxvYWQpCisgICAg ICAgICAgICAgICAgIzpzZWxlY3QgKHVyaS1hYmJyZXZpYXRpb24gbmFyLXVyaS1hYmJyZXZpYXRp b24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wZW4tY29ubmVjdGlvbi1mb3ItdXJpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAuIGd1aXg6b3Blbi1jb25uZWN0aW9uLWZvci11cmkp CisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlLXBhdGgtYWJicmV2aWF0aW9uIGJ5dGUt Y291bnQtPnN0cmluZykpCisgICM6dXNlLW1vZHVsZSAoZ3VpeCBwcm9ncmVzcykKKyAgIzp1c2Ut bW9kdWxlIChndWl4IHN0b3JlKQorICAjOnVzZS1tb2R1bGUgKGd1aXggc2NyaXB0cyBzdWJzdGl0 dXRlKQorICAjOmF1dG9sb2FkICAgKGdudXRscykgKGVycm9yL2ludmFsaWQtc2Vzc2lvbikKKyAg Izp1c2UtbW9kdWxlIChpY2UtOSBtYXRjaCkKKyAgIzp1c2UtbW9kdWxlIChpY2UtOSBiaW5hcnkt cG9ydHMpCisgICM6dXNlLW1vZHVsZSAoaWNlLTkgdmxpc3QpCisgICM6dXNlLW1vZHVsZSAoaWNl LTkgZm9ybWF0KSkKKworKGRlZmluZSAlZmV0Y2gtdGltZW91dAorICA7OyBOdW1iZXIgb2Ygc2Vj b25kcyBhZnRlciB3aGljaCBuZXR3b3JraW5nIGlzIGNvbnNpZGVyZWQgInNsb3ciLgorICA1KQor CisoZGVmaW5lICVyYW5kb20tc3RhdGUKKyAgKHNlZWQtPnJhbmRvbS1zdGF0ZSAoKyAoYXNoIChj ZHIgKGdldHRpbWVvZmRheSkpIDMyKSAoZ2V0cGlkKSkpKQorCisoZGVmaW5lLXN5bnRheC1ydWxl ICh3aXRoLXRpbWVvdXQgZHVyYXRpb24gaGFuZGxlciBib2R5IC4uLikKKyAgIlJ1biBCT0RZOyB3 aGVuIERVUkFUSU9OIHNlY29uZHMgaGF2ZSBleHBpcmVkLCBjYWxsIEhBTkRMRVIsIGFuZCBydW4g Qk9EWQorYWdhaW4uIgorICAoYmVnaW4KKyAgICAoc2lnYWN0aW9uIFNJR0FMUk0KKyAgICAgIChs YW1iZGEgKHNpZ251bSkKKyAgICAgICAgKHNpZ2FjdGlvbiBTSUdBTFJNIFNJR19ERkwpCisgICAg ICAgIGhhbmRsZXIpKQorICAgIChhbGFybSBkdXJhdGlvbikKKyAgICAoY2FsbC13aXRoLXZhbHVl cworICAgICAgICAobGFtYmRhICgpCisgICAgICAgICAgKGxldCB0cnkgKCkKKyAgICAgICAgICAg IChjYXRjaCAnc3lzdGVtLWVycm9yCisgICAgICAgICAgICAgIChsYW1iZGEgKCkKKyAgICAgICAg ICAgICAgICBib2R5IC4uLikKKyAgICAgICAgICAgICAgKGxhbWJkYSBhcmdzCisgICAgICAgICAg ICAgICAgOzsgQmVmb3JlIEd1aWxlIHYyLjAuOS0zOS1nZmU1MWM3YiwgdGhlIFNJR0FMUk0gdHJp Z2dlcnMgRUlOVFIKKyAgICAgICAgICAgICAgICA7OyBiZWNhdXNlIG9mIHRoZSBidWcgYXQKKyAg ICAgICAgICAgICAgICA7OyA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2d1aWxl LWRldmVsLzIwMTMtMDYvbXNnMDAwNTAuaHRtbD4uCisgICAgICAgICAgICAgICAgOzsgV2hlbiB0 aGF0IGhhcHBlbnMsIHRyeSBhZ2Fpbi4gIE5vdGU6IFNBX1JFU1RBUlQgY2Fubm90IGJlCisgICAg ICAgICAgICAgICAgOzsgdXNlZCBiZWNhdXNlIG9mIDxodHRwOi8vYnVncy5nbnUub3JnLzE0NjQw Pi4KKyAgICAgICAgICAgICAgICAoaWYgKD0gRUlOVFIgKHN5c3RlbS1lcnJvci1lcnJubyBhcmdz KSkKKyAgICAgICAgICAgICAgICAgICAgKGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgOzsg V2FpdCBhIGxpdHRsZSB0byBhdm9pZCBidXJzdHMuCisgICAgICAgICAgICAgICAgICAgICAgKHVz bGVlcCAocmFuZG9tIDMwMDAwMDAgJXJhbmRvbS1zdGF0ZSkpCisgICAgICAgICAgICAgICAgICAg ICAgKHRyeSkpCisgICAgICAgICAgICAgICAgICAgIChhcHBseSB0aHJvdyBhcmdzKSkpKSkpCisg ICAgICAobGFtYmRhIHJlc3VsdAorICAgICAgICAoYWxhcm0gMCkKKyAgICAgICAgKHNpZ2FjdGlv biBTSUdBTFJNIFNJR19ERkwpCisgICAgICAgIChhcHBseSB2YWx1ZXMgcmVzdWx0KSkpKSkKKwor KGRlZmluZSogKGZldGNoIHVyaSAjOmtleSAoYnVmZmVyZWQ/ICN0KSAodGltZW91dD8gI3QpCisg ICAgICAgICAgICAgICAgKGtlZXAtYWxpdmU/ICNmKSAocG9ydCAjZikpCisgICJSZXR1cm4gYSBi aW5hcnkgaW5wdXQgcG9ydCB0byBVUkkgYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMgaXQncyBleHBl Y3RlZCB0bworcHJvdmlkZS4KKworV2hlbiBQT1JUIGlzIHRydWUsIHVzZSBpdCBhcyB0aGUgdW5k ZXJseWluZyBJL08gcG9ydCBmb3IgSFRUUCB0cmFuc2ZlcnM7IHdoZW4KK1BPUlQgaXMgZmFsc2Us IG9wZW4gYSBuZXcgY29ubmVjdGlvbiBmb3IgVVJJLiAgV2hlbiBLRUVQLUFMSVZFPyBpcyB0cnVl LCB0aGUKK2Nvbm5lY3Rpb24gKHR5cGljYWxseSBQT1JUKSBpcyBrZXB0IG9wZW4gb25jZSBkYXRh IGhhcyBiZWVuIGZldGNoZWQgZnJvbSBVUkkuIgorICAoY2FzZSAodXJpLXNjaGVtZSB1cmkpCisg ICAgKChmaWxlKQorICAgICAobGV0ICgocG9ydCAob3Blbi1maWxlICh1cmktcGF0aCB1cmkpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIGJ1ZmZlcmVkPyAicmIiICJyMGIiKSkpKQor ICAgICAgICh2YWx1ZXMgcG9ydCAoc3RhdDpzaXplIChzdGF0IHBvcnQpKSkpKQorICAgICgoaHR0 cCBodHRwcykKKyAgICAgKGd1YXJkIChjICgoaHR0cC1nZXQtZXJyb3I/IGMpCisgICAgICAgICAg ICAgICAgKGxlYXZlIChHXyAiZG93bmxvYWQgZnJvbSAnfmEnIGZhaWxlZDogfmEsIH5zfiUiKQor ICAgICAgICAgICAgICAgICAgICAgICAodXJpLT5zdHJpbmcgKGh0dHAtZ2V0LWVycm9yLXVyaSBj KSkKKyAgICAgICAgICAgICAgICAgICAgICAgKGh0dHAtZ2V0LWVycm9yLWNvZGUgYykKKyAgICAg ICAgICAgICAgICAgICAgICAgKGh0dHAtZ2V0LWVycm9yLXJlYXNvbiBjKSkpKQorICAgICAgIDs7 IFRlc3QgdGhpcyB3aXRoOgorICAgICAgIDs7ICAgc3VkbyB0YyBxZGlzYyBhZGQgZGV2IGV0aDAg cm9vdCBuZXRlbSBkZWxheSAxNTAwbXMKKyAgICAgICA7OyBhbmQgdGhlbiBjYW5jZWwgd2l0aDoK KyAgICAgICA7OyAgIHN1ZG8gdGMgcWRpc2MgZGVsIGRldiBldGgwIHJvb3QKKyAgICAgICAobGV0 ICgocG9ydCBwb3J0KSkKKyAgICAgICAgICh3aXRoLXRpbWVvdXQgKGlmIHRpbWVvdXQ/CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAlZmV0Y2gtdGltZW91dAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgMCkKKyAgICAgICAgICAgKGJlZ2luCisgICAgICAgICAgICAgKHdhcm5pbmcgKEdf ICJ3aGlsZSBmZXRjaGluZyB+YTogc2VydmVyIGlzIHNvbWV3aGF0IHNsb3d+JSIpCisgICAgICAg ICAgICAgICAgICAgICAgKHVyaS0+c3RyaW5nIHVyaSkpCisgICAgICAgICAgICAgKHdhcm5pbmcg KEdfICJ0cnkgYC0tbm8tc3Vic3RpdHV0ZXMnIGlmIHRoZSBwcm9ibGVtIHBlcnNpc3RzfiUiKSkp CisgICAgICAgICAgIChjYWxsLXdpdGgtY29ubmVjdGlvbi1lcnJvci1oYW5kbGluZworICAgICAg ICAgICAgdXJpCisgICAgICAgICAgICAobGFtYmRhICgpCisgICAgICAgICAgICAgIChodHRwLWZl dGNoIHVyaSAjOnRleHQ/ICNmCisgICAgICAgICAgICAgICAgICAgICAgICAgICM6b3Blbi1jb25u ZWN0aW9uIG9wZW4tY29ubmVjdGlvbi1mb3ItdXJpL2NhY2hlZAorICAgICAgICAgICAgICAgICAg ICAgICAgICAjOmtlZXAtYWxpdmU/ICN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICM6YnVm ZmVyZWQ/ICNmCisgICAgICAgICAgICAgICAgICAgICAgICAgICM6dmVyaWZ5LWNlcnRpZmljYXRl PyAjZikpKSkpKSkKKyAgICAoZWxzZQorICAgICAobGVhdmUgKEdfICJ1bnN1cHBvcnRlZCBzdWJz dGl0dXRlIFVSSSBzY2hlbWU6IH5hfiUiKQorICAgICAgICAgICAgKHVyaS0+c3RyaW5nIHVyaSkp KSkpCisKKyhkZWZpbmUgKG5hcmluZm8tcmVxdWVzdCBjYWNoZS11cmwgcGF0aCkKKyAgIlJldHVy biBhbiBIVFRQIHJlcXVlc3QgZm9yIHRoZSBuYXJpbmZvIG9mIFBBVEggYXQgQ0FDSEUtVVJMLiIK KyAgKGxldCAoKHVybCAoc3RyaW5nLWFwcGVuZCBjYWNoZS11cmwgIi8iIChzdG9yZS1wYXRoLWhh c2gtcGFydCBwYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIubmFyaW5mbyIpKQor ICAgICAgICAoaGVhZGVycyAnKChVc2VyLUFnZW50IC4gIkdOVSBHdWlsZSIpKSkpCisgICAgKGJ1 aWxkLXJlcXVlc3QgKHN0cmluZy0+dXJpIHVybCkgIzptZXRob2QgJ0dFVCAjOmhlYWRlcnMgaGVh ZGVycykpKQorCisoZGVmaW5lIChhdC1tb3N0IG1heC1sZW5ndGggbHN0KQorICAiSWYgTFNUIGlz IHNob3J0ZXIgdGhhbiBNQVgtTEVOR1RILCByZXR1cm4gaXQgYW5kIHRoZSBlbXB0eSBsaXN0OyBv dGhlcndpc2UKK3JldHVybiBpdHMgTUFYLUxFTkdUSCBmaXJzdCBlbGVtZW50cyBhbmQgaXRzIHRh aWwuIgorICAobGV0IGxvb3AgKChsZW4gMCkKKyAgICAgICAgICAgICAobHN0IGxzdCkKKyAgICAg ICAgICAgICAocmVzdWx0ICcoKSkpCisgICAgKG1hdGNoIGxzdAorICAgICAgKCgpCisgICAgICAg KHZhbHVlcyAocmV2ZXJzZSByZXN1bHQpICcoKSkpCisgICAgICAoKGhlYWQgLiB0YWlsKQorICAg ICAgIChpZiAoPj0gbGVuIG1heC1sZW5ndGgpCisgICAgICAgICAgICh2YWx1ZXMgKHJldmVyc2Ug cmVzdWx0KSBsc3QpCisgICAgICAgICAgIChsb29wICgrIDEgbGVuKSB0YWlsIChjb25zIGhlYWQg cmVzdWx0KSkpKSkpKQorCisoZGVmaW5lKiAoaHR0cC1tdWx0aXBsZS1nZXQgYmFzZS11cmkgcHJv YyBzZWVkIHJlcXVlc3RzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzprZXkgcG9ydCAo dmVyaWZ5LWNlcnRpZmljYXRlPyAjdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3Bl bi1jb25uZWN0aW9uIGd1aXg6b3Blbi1jb25uZWN0aW9uLWZvci11cmkpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGtlZXAtYWxpdmU/ICN0KQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChiYXRjaC1zaXplIDEwMDApKQorICAiU2VuZCBhbGwgb2YgUkVRVUVTVFMgdG8gdGhlIHNl cnZlciBhdCBCQVNFLVVSSS4gIENhbGwgUFJPQyBmb3IgZWFjaAorcmVzcG9uc2UsIHBhc3Npbmcg aXQgdGhlIHJlcXVlc3Qgb2JqZWN0LCB0aGUgcmVzcG9uc2UsIGEgcG9ydCBmcm9tIHdoaWNoIHRv CityZWFkIHRoZSByZXNwb25zZSBib2R5LCBhbmQgdGhlIHByZXZpb3VzIHJlc3VsdCwgc3RhcnRp bmcgd2l0aCBTRUVELCDDoCBsYQorJ2ZvbGQnLiAgUmV0dXJuIHRoZSBmaW5hbCByZXN1bHQuCisK K1doZW4gUE9SVCBpcyBzcGVjaWZpZWQsIHVzZSBpdCBhcyB0aGUgaW5pdGlhbCBjb25uZWN0aW9u IG9uIHdoaWNoIEhUVFAKK3JlcXVlc3RzIGFyZSBzZW50OyBvdGhlcndpc2UgY2FsbCBPUEVOLUNP Tk5FQ1RJT04gdG8gb3BlbiBhIG5ldyBjb25uZWN0aW9uIGZvcgorYSBVUkkuICBXaGVuIEtFRVAt QUxJVkU/IGlzIGZhbHNlLCBjbG9zZSB0aGUgY29ubmVjdGlvbiBwb3J0IGJlZm9yZQorcmV0dXJu aW5nLiIKKyAgKGxldCBjb25uZWN0ICgocG9ydCAgICAgcG9ydCkKKyAgICAgICAgICAgICAgICAo cmVxdWVzdHMgcmVxdWVzdHMpCisgICAgICAgICAgICAgICAgKHJlc3VsdCAgIHNlZWQpKQorICAg IChkZWZpbmUgYmF0Y2gKKyAgICAgIChhdC1tb3N0IGJhdGNoLXNpemUgcmVxdWVzdHMpKQorCisg ICAgOzsgKGZvcm1hdCAoY3VycmVudC1lcnJvci1wb3J0KSAiY29ubmVjdGluZyAofmEgcmVxdWVz dHMgbGVmdCkuLi4iCisgICAgOzsgICAgICAgICAobGVuZ3RoIHJlcXVlc3RzKSkKKyAgICAobGV0 ICgocCAob3IgcG9ydCAob3Blbi1jb25uZWN0aW9uIGJhc2UtdXJpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAjOnZlcmlmeS1jZXJ0aWZpY2F0ZT8KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmlmeS1jZXJ0aWZpY2F0ZT8pKSkpCisgICAg ICA7OyBGb3IgSFRUUFMsIFAgaXMgbm90IGEgZmlsZSBwb3J0IGFuZCBkb2VzIG5vdCBzdXBwb3J0 ICdzZXR2YnVmJy4KKyAgICAgICh3aGVuIChmaWxlLXBvcnQ/IHApCisgICAgICAgIChzZXR2YnVm IHAgJ2Jsb2NrIChleHB0IDIgMTYpKSkKKworICAgICAgOzsgU2VuZCBCQVRDSCBpbiBhIHJvdy4K KyAgICAgIDs7IFhYWDogRG8gb3VyIG93biBjYWNoaW5nIHRvIHdvcmsgYXJvdW5kIGluZWZmaWNp ZW5jaWVzIHdoZW4KKyAgICAgIDs7IGNvbW11bmljYXRpbmcgb3ZlciBUTFM6IDxodHRwOi8vYnVn cy5nbnUub3JnLzIyOTY2Pi4KKyAgICAgIChsZXQtdmFsdWVzICgoKGJ1ZmZlciBnZXQpIChvcGVu LWJ5dGV2ZWN0b3Itb3V0cHV0LXBvcnQpKSkKKyAgICAgICAgOzsgSW5oZXJpdCB0aGUgSFRUUCBw cm94eWluZyBwcm9wZXJ0eSBmcm9tIFAuCisgICAgICAgIChzZXQtaHR0cC1wcm94eS1wb3J0PyEg YnVmZmVyIChodHRwLXByb3h5LXBvcnQ/IHApKQorCisgICAgICAgIChmb3ItZWFjaCAoY3V0IHdy aXRlLXJlcXVlc3QgPD4gYnVmZmVyKQorICAgICAgICAgICAgICAgICAgYmF0Y2gpCisgICAgICAg IChwdXQtYnl0ZXZlY3RvciBwIChnZXQpKQorICAgICAgICAoZm9yY2Utb3V0cHV0IHApKQorCisg ICAgICA7OyBOb3cgc3RhcnQgcHJvY2Vzc2luZyByZXNwb25zZXMuCisgICAgICAobGV0IGxvb3Ag KChzZW50ICAgICAgYmF0Y2gpCisgICAgICAgICAgICAgICAgIChwcm9jZXNzZWQgMCkKKyAgICAg ICAgICAgICAgICAgKHJlc3VsdCAgICByZXN1bHQpKQorICAgICAgICAobWF0Y2ggc2VudAorICAg ICAgICAgICgoKQorICAgICAgICAgICAobWF0Y2ggKGRyb3AgcmVxdWVzdHMgcHJvY2Vzc2VkKQor ICAgICAgICAgICAgICgoKQorICAgICAgICAgICAgICAodW5sZXNzIGtlZXAtYWxpdmU/CisgICAg ICAgICAgICAgICAgKGNsb3NlLXBvcnQgcCkpCisgICAgICAgICAgICAgIChyZXZlcnNlIHJlc3Vs dCkpCisgICAgICAgICAgICAgKHJlbWFpbmRlcgorICAgICAgICAgICAgICAoY29ubmVjdCBwIHJl bWFpbmRlciByZXN1bHQpKSkpCisgICAgICAgICAgKChoZWFkIHRhaWwgLi4uKQorICAgICAgICAg ICAobGV0KiAoKHJlc3AgICAocmVhZC1yZXNwb25zZSBwKSkKKyAgICAgICAgICAgICAgICAgIChi b2R5ICAgKHJlc3BvbnNlLWJvZHktcG9ydCByZXNwKSkKKyAgICAgICAgICAgICAgICAgIChyZXN1 bHQgKHByb2MgaGVhZCByZXNwIGJvZHkgcmVzdWx0KSkpCisgICAgICAgICAgICAgOzsgVGhlIHNl cnZlciBjYW4gY2hvb3NlIHRvIHN0b3AgcmVzcG9uZGluZyBhdCBhbnkgdGltZSwgaW4gd2hpY2gK KyAgICAgICAgICAgICA7OyBjYXNlIHdlIGhhdmUgdG8gdHJ5IGFnYWluLiAgQ2hlY2sgd2hldGhl ciB0aGF0IGlzIHRoZSBjYXNlLgorICAgICAgICAgICAgIDs7IE5vdGUgdGhhdCBldmVuIHVwb24g IkNvbm5lY3Rpb246IGNsb3NlIiwgd2UgY2FuIHJlYWQgZnJvbSBCT0RZLgorICAgICAgICAgICAg IChtYXRjaCAoYXNzcSAnY29ubmVjdGlvbiAocmVzcG9uc2UtaGVhZGVycyByZXNwKSkKKyAgICAg ICAgICAgICAgICgoJ2Nvbm5lY3Rpb24gJ2Nsb3NlKQorICAgICAgICAgICAgICAgIChjbG9zZS1w b3J0IHApCisgICAgICAgICAgICAgICAgKGNvbm5lY3QgI2YgICAgICAgICAgICAgICAgICAgICAg IDt0cnkgYWdhaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAoZHJvcCByZXF1ZXN0cyAoKyAx IHByb2Nlc3NlZCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KSkKKyAgICAgICAg ICAgICAgIChfCisgICAgICAgICAgICAgICAgKGxvb3AgdGFpbCAoKyAxIHByb2Nlc3NlZCkgcmVz dWx0KSkpKSkpKSkpKSA7a2VlcCBnb2luZworCisoZGVmaW5lIChyZWFkLXRvLWVvZiBwb3J0KQor ICAiUmVhZCBmcm9tIFBPUlQgdW50aWwgRU9GIGlzIHJlYWNoZWQuICBUaGUgZGF0YSBhcmUgZGlz Y2FyZGVkLiIKKyAgKGR1bXAtcG9ydCBwb3J0ICglbWFrZS12b2lkLXBvcnQgInciKSkpCisKKyhk ZWZpbmUgKG5hcmluZm8tZnJvbS1maWxlIGZpbGUgdXJsKQorICAiQXR0ZW1wdCB0byByZWFkIGEg bmFyaW5mbyBmcm9tIEZJTEUsIHVzaW5nIFVSTCBhcyB0aGUgY2FjaGUgVVJMLiAgUmV0dXJuICNm CitpZiBmaWxlIGRvZXNuJ3QgZXhpc3QsIGFuZCB0aGUgbmFyaW5mbyBvdGhlcndpc2UuIgorICAo Y2F0Y2ggJ3N5c3RlbS1lcnJvcgorICAgIChsYW1iZGEgKCkKKyAgICAgIChjYWxsLXdpdGgtaW5w dXQtZmlsZSBmaWxlCisgICAgICAgIChjdXQgcmVhZC1uYXJpbmZvIDw+IHVybCkpKQorICAgIChs YW1iZGEgYXJncworICAgICAgKGlmICg9IEVOT0VOVCAoc3lzdGVtLWVycm9yLWVycm5vIGFyZ3Mp KQorICAgICAgICAgICNmCisgICAgICAgICAgKGFwcGx5IHRocm93IGFyZ3MpKSkpKQorCisoZGVm aW5lICV1bnJlYWNoYWJsZS1ob3N0cworICA7OyBTZXQgb2YgbmFtZXMgb2YgdW5yZWFjaGFibGUg aG9zdHMuCisgIChtYWtlLWhhc2gtdGFibGUpKQorCisoZGVmaW5lICVtYXgtY2FjaGVkLWNvbm5l Y3Rpb25zCisgIDs7IE1heGltdW0gbnVtYmVyIG9mIGNvbm5lY3Rpb25zIGtlcHQgaW4gY2FjaGUg YnkKKyAgOzsgJ29wZW4tY29ubmVjdGlvbi1mb3ItdXJpL2NhY2hlZCcuCisgIDE2KQorCisoZGVm aW5lIG9wZW4tY29ubmVjdGlvbi1mb3ItdXJpL2NhY2hlZAorICAobGV0ICgoY2FjaGUgJygpKSkK KyAgICAobGFtYmRhKiAodXJpICM6a2V5IGZyZXNoPyAodGltZW91dCAlZmV0Y2gtdGltZW91dCkg dmVyaWZ5LWNlcnRpZmljYXRlPykKKyAgICAgICJSZXR1cm4gYSBjb25uZWN0aW9uIGZvciBVUkks IHBvc3NpYmx5IHJldXNpbmcgYSBjYWNoZWQgY29ubmVjdGlvbi4KK1doZW4gRlJFU0g/IGlzIHRy dWUsIGRlbGV0ZSBhbnkgY2FjaGVkIGNvbm5lY3Rpb25zIGZvciBVUkkgYW5kIG9wZW4gYSBuZXcg b25lLgorUmV0dXJuICNmIGlmIFVSSSdzIHNjaGVtZSBpcyAnZmlsZScgb3IgI2YuCisKK1doZW4g dHJ1ZSwgVElNRU9VVCBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdh aXQgZm9yCitjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQuICBXaGVuIFZFUklGWS1DRVJUSUZJQ0FU RT8gaXMgdHJ1ZSwgdmVyaWZ5IEhUVFBTCitzZXJ2ZXIgY2VydGlmaWNhdGVzLiIKKyAgICAgIChk ZWZpbmUgaG9zdCAodXJpLWhvc3QgdXJpKSkKKyAgICAgIChkZWZpbmUgc2NoZW1lICh1cmktc2No ZW1lIHVyaSkpCisgICAgICAoZGVmaW5lIGtleSAobGlzdCBob3N0IHNjaGVtZSAodXJpLXBvcnQg dXJpKSkpCisKKyAgICAgIChhbmQgKG5vdCAobWVtcSBzY2hlbWUgJyhmaWxlICNmKSkpCisgICAg ICAgICAgIChtYXRjaCAoYXNzb2MtcmVmIGNhY2hlIGtleSkKKyAgICAgICAgICAgICAoI2YKKyAg ICAgICAgICAgICAgOzsgT3BlbiBhIG5ldyBjb25uZWN0aW9uIHRvIFVSSSBhbmQgZXZpY3Qgb2xk IGVudHJpZXMgZnJvbQorICAgICAgICAgICAgICA7OyBDQUNIRSwgaWYgYW55LgorICAgICAgICAg ICAgICAobGV0LXZhbHVlcyAoKChzb2NrZXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGd1aXg6b3Blbi1jb25uZWN0aW9uLWZvci11cmkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdXJpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICM6dmVyaWZ5LWNlcnRpZmljYXRl PyB2ZXJpZnktY2VydGlmaWNhdGU/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICM6dGlt ZW91dCB0aW1lb3V0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgobmV3LWNhY2hlIGV2 aWN0ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGF0LW1vc3QgKC0gJW1heC1jYWNo ZWQtY29ubmVjdGlvbnMgMSkgY2FjaGUpKSkKKyAgICAgICAgICAgICAgICAoZm9yLWVhY2ggKG1h dGNoLWxhbWJkYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoXyAuIHBvcnQpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChmYWxzZS1pZi1leGNlcHRpb24gKGNsb3NlLXBvcnQg cG9ydCkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXZpY3RlZCkKKyAgICAgICAgICAg ICAgICAoc2V0ISBjYWNoZSAoYWxpc3QtY29ucyBrZXkgc29ja2V0IG5ldy1jYWNoZSkpCisgICAg ICAgICAgICAgICAgc29ja2V0KSkKKyAgICAgICAgICAgICAoc29ja2V0CisgICAgICAgICAgICAg IChpZiAob3IgZnJlc2g/IChwb3J0LWNsb3NlZD8gc29ja2V0KSkKKyAgICAgICAgICAgICAgICAg IChiZWdpbgorICAgICAgICAgICAgICAgICAgICAoZmFsc2UtaWYtZXhjZXB0aW9uIChjbG9zZS1w b3J0IHNvY2tldCkpCisgICAgICAgICAgICAgICAgICAgIChzZXQhIGNhY2hlIChhbGlzdC1kZWxl dGUga2V5IGNhY2hlKSkKKyAgICAgICAgICAgICAgICAgICAgKG9wZW4tY29ubmVjdGlvbi1mb3It dXJpL2NhY2hlZCB1cmkgIzp0aW1lb3V0IHRpbWVvdXQKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjOnZlcmlmeS1jZXJ0aWZpY2F0ZT8KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJpZnktY2Vy dGlmaWNhdGU/KSkKKyAgICAgICAgICAgICAgICAgIChiZWdpbgorICAgICAgICAgICAgICAgICAg ICA7OyBEcmFpbiBpbnB1dCBsZWZ0IGZyb20gdGhlIHByZXZpb3VzIHVzZS4KKyAgICAgICAgICAg ICAgICAgICAgKGRyYWluLWlucHV0IHNvY2tldCkKKyAgICAgICAgICAgICAgICAgICAgc29ja2V0 KSkpKSkpKSkKKworKGRlZmluZSogKHByb2Nlc3Mtc3Vic3RpdHV0aW9uL2h0dHAgZGVzdGluYXRp b24gbmFyaW5mbyAjOmtleSBwcmludC1idWlsZC10cmFjZT8pCisgIChsZXQtdmFsdWVzICgoKHVy aSBjb21wcmVzc2lvbiBmaWxlLXNpemUpCisgICAgICAgICAgICAgICAgKG5hcmluZm8tYmVzdC11 cmkgbmFyaW5mbykpKQorICAgICh1bmxlc3MgcHJpbnQtYnVpbGQtdHJhY2U/CisgICAgICAoZm9y bWF0IChjdXJyZW50LWVycm9yLXBvcnQpCisgICAgICAgICAgICAgIChHXyAiRG93bmxvYWRpbmcg fmEuLi5+JSIpICh1cmktPnN0cmluZyB1cmkpKSkKKworICAgIChsZXQqLXZhbHVlcyAoKChyYXcg ZG93bmxvYWQtc2l6ZSkKKyAgICAgICAgICAgICAgICAgICA7OyAnZ3VpeCBwdWJsaXNoJyB3aXRo b3V0ICctLWNhY2hlJyBkb2Vzbid0IHNwZWNpZnkgYQorICAgICAgICAgICAgICAgICAgIDs7IENv bnRlbnQtTGVuZ3RoLCBzbyBET1dOTE9BRC1TSVpFIGlzICNmIGluIHRoaXMgY2FzZS4KKyAgICAg ICAgICAgICAgICAgICAoZmV0Y2ggdXJpKSkKKyAgICAgICAgICAgICAgICAgICgocHJvZ3Jlc3Mp CisgICAgICAgICAgICAgICAgICAgKGxldCogKChkbC1zaXplICAob3IgZG93bmxvYWQtc2l6ZQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbmQgKGVxdWFsPyBjb21w cmVzc2lvbiAibm9uZSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAobmFyaW5mby1zaXplIG5hcmluZm8pKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAg IChyZXBvcnRlciAoaWYgcHJpbnQtYnVpbGQtdHJhY2U/CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHByb2dyZXNzLXJlcG9ydGVyL3RyYWNlCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICh1cmktPnN0cmluZyB1cmkpIGRsLXNpemUKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnQtZXJyb3ItcG9ydCkp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2dyZXNzLXJlcG9y dGVyL2ZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVyaS0+ c3RyaW5nIHVyaSkgZGwtc2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoY3VycmVudC1lcnJvci1wb3J0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAjOmFiYnJldmlhdGlvbiBuYXItdXJpLWFiYnJldmlhdGlvbikpKSkKKyAgICAg ICAgICAgICAgICAgICAgIDs7IEtlZXAgUkFXIG9wZW4gdXBvbiBjb21wbGV0aW9uIHNvIHdlIGNh biBsYXRlciByZXVzZQorICAgICAgICAgICAgICAgICAgICAgOzsgdGhlIHVuZGVybHlpbmcgY29u bmVjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgIChwcm9ncmVzcy1yZXBvcnQtcG9ydCByZXBv cnRlciByYXcgIzpjbG9zZT8gI2YpKSkKKyAgICAgICAgICAgICAgICAgICgoaW5wdXQgcGlkcykK KyAgICAgICAgICAgICAgICAgICA7OyBOT1RFOiBUaGlzICdwcm9ncmVzcycgcG9ydCBvZiBjdXJy ZW50IHByb2Nlc3Mgd2lsbCBiZQorICAgICAgICAgICAgICAgICAgIDs7IGNsb3NlZCBoZXJlLCB3 aGlsZSB0aGUgY2hpbGQgcHJvY2VzcyBkb2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICA7OyBy ZXBvcnRpbmcgd2lsbCBjbG9zZSBpdCB1cG9uIGV4aXQuCisgICAgICAgICAgICAgICAgICAgKGRl Y29tcHJlc3NlZC1wb3J0IChzdHJpbmctPnN5bWJvbCBjb21wcmVzc2lvbikKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MpKSkKKyAgICAgICh2YWx1ZXMgaW5w dXQKKyAgICAgICAgICAgICAgIzphZnRlci1pbnB1dC1jbG9zZQorICAgICAgICAgICAgICAobGFt YmRhICgpCisgICAgICAgICAgICAgICAgOzsgV2FpdCBmb3IgdGhlIHJlcG9ydGVyIHRvIGZpbmlz aC4KKyAgICAgICAgICAgICAgICAoZXZlcnkgKGNvbXBvc2UgemVybz8gY2RyIHdhaXRwaWQpIHBp ZHMpCisKKyAgICAgICAgICAgICAgICA7OyBTa2lwIGEgbGluZSBhZnRlciB3aGF0ICdwcm9ncmVz cy1yZXBvcnRlci9maWxlJyBwcmludGVkLAorICAgICAgICAgICAgICAgIDs7IGFuZCBhbm90aGVy IG9uZSB0byB2aXN1YWxseSBzZXBhcmF0ZSBzdWJzdGl0dXRpb25zLgorICAgICAgICAgICAgICAg IChkaXNwbGF5ICJcblxuIiAoY3VycmVudC1lcnJvci1wb3J0KSkpKSkpKQorCisoZGVmaW5lKiAo Y2FsbC13aXRoLWNvbm5lY3Rpb24tZXJyb3ItaGFuZGxpbmcgdXJpIHByb2MpCisgICJDYWxsIFBS T0MsIGFuZCBjYXRjaCBpZiBhIGNvbm5lY3Rpb24gZmFpbHMsIHByaW50IGEgd2FybmluZyBhbmQg cmV0dXJuICNmLiIKKyAgKGRlZmluZSBob3N0CisgICAgKHVyaS1ob3N0IHVyaSkpCisKKyAgKGNh dGNoICN0CisgICAgcHJvYworICAgIChtYXRjaC1sYW1iZGEqCisgICAgICAoKCdnZXRhZGRyaW5m by1lcnJvciBlcnJvcikKKyAgICAgICAodW5sZXNzIChoYXNoLXJlZiAldW5yZWFjaGFibGUtaG9z dHMgaG9zdCkKKyAgICAgICAgIChoYXNoLXNldCEgJXVucmVhY2hhYmxlLWhvc3RzIGhvc3QgI3Qp ICAgO3dhcm4gb25seSBvbmNlCisgICAgICAgICAod2FybmluZyAoR18gIn5hOiBob3N0IG5vdCBm b3VuZDogfmF+JSIpCisgICAgICAgICAgICAgICAgICBob3N0IChnYWktc3RyZXJyb3IgZXJyb3Ip KSkKKyAgICAgICAjZikKKyAgICAgICgoJ3N5c3RlbS1lcnJvciAuIGFyZ3MpCisgICAgICAgKHVu bGVzcyAoaGFzaC1yZWYgJXVucmVhY2hhYmxlLWhvc3RzIGhvc3QpCisgICAgICAgICAoaGFzaC1z ZXQhICV1bnJlYWNoYWJsZS1ob3N0cyBob3N0ICN0KQorICAgICAgICAgKHdhcm5pbmcgKEdfICJ+ YTogY29ubmVjdGlvbiBmYWlsZWQ6IH5hfiUiKSBob3N0CisgICAgICAgICAgICAgICAgICAoc3Ry ZXJyb3IKKyAgICAgICAgICAgICAgICAgICAoc3lzdGVtLWVycm9yLWVycm5vIGAoc3lzdGVtLWVy cm9yICxAYXJncykpKSkpCisgICAgICAgI2YpCisgICAgICAoYXJncworICAgICAgIChhcHBseSB0 aHJvdyBhcmdzKSkpKSkKKworKGRlZmluZSogKGZldGNoLW5hcmluZm9zL2h0dHAgdXJsIHBhdGhz CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjOmtleSAob3Blbi1jb25uZWN0aW9uCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpeDpvcGVuLWNvbm5lY3Rpb24t Zm9yLXVyaSkpCisgICJSZXRyaWV2ZSBhbGwgdGhlIG5hcmluZm9zIGZvciBQQVRIUyBmcm9tIHRo ZSBjYWNoZSBhdCBVUkwgYW5kIHJldHVybiB0aGVtLgorVGhlIFVSSSBzY2hlbWUgb2YgVVJMIG11 c3QgY3VycmVudGx5IGJlIGh0dHAsIGh0dHBzIG9yIGZpbGUuIgorICAoZGVmaW5lIHVwZGF0ZS1w cm9ncmVzcyEKKyAgICAobGV0ICgoZG9uZSAwKQorICAgICAgICAgICh0b3RhbCAobGVuZ3RoIHBh dGhzKSkpCisgICAgICAobGFtYmRhICgpCisgICAgICAgIChkaXNwbGF5ICJcclx4MWJbSyIgKGN1 cnJlbnQtZXJyb3ItcG9ydCkpIDtlcmFzZSBjdXJyZW50IGxpbmUKKyAgICAgICAgKGZvcmNlLW91 dHB1dCAoY3VycmVudC1lcnJvci1wb3J0KSkKKyAgICAgICAgKGZvcm1hdCAoY3VycmVudC1lcnJv ci1wb3J0KQorICAgICAgICAgICAgICAgIChHXyAidXBkYXRpbmcgc3Vic3RpdHV0ZXMgZnJvbSAn fmEnLi4uIH41LDFmJSIpCisgICAgICAgICAgICAgICAgdXJsICgqIDEwMC4gKC8gZG9uZSB0b3Rh bCkpKQorICAgICAgICAoc2V0ISBkb25lICgrIDEgZG9uZSkpKSkpCisKKyAgKGRlZmluZSBoYXNo LXBhcnQtPnBhdGgKKyAgICAobGV0ICgobWFwcGluZyAoZm9sZCAobGFtYmRhIChwYXRoIHJlc3Vs dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2aGFzaC1jb25zIChzdG9yZS1wYXRoLWhh c2gtcGFydCBwYXRoKSBwYXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICAgICAgIHZsaXN0LW51bGwKKyAgICAgICAg ICAgICAgICAgICAgICAgICBwYXRocykpKQorICAgICAgKGxhbWJkYSAoaGFzaCkKKyAgICAgICAg KG1hdGNoICh2aGFzaC1hc3NvYyBoYXNoIG1hcHBpbmcpCisgICAgICAgICAgKCNmICNmKQorICAg ICAgICAgICgoXyAuIHBhdGgpIHBhdGgpKSkpKQorCisgIChkZWZpbmUgKGhhbmRsZS1uYXJpbmZv LXJlc3BvbnNlIHJlcXVlc3QgcmVzcG9uc2UgcG9ydCByZXN1bHQpCisgICAgKGxldCogKChjb2Rl ICAgKHJlc3BvbnNlLWNvZGUgcmVzcG9uc2UpKQorICAgICAgICAgICAobGVuICAgIChyZXNwb25z ZS1jb250ZW50LWxlbmd0aCByZXNwb25zZSkpCisgICAgICAgICAgIChjYWNoZSAgKHJlc3BvbnNl LWNhY2hlLWNvbnRyb2wgcmVzcG9uc2UpKQorICAgICAgICAgICAodHRsICAgIChhbmQgY2FjaGUg KGFzc29jLXJlZiBjYWNoZSAnbWF4LWFnZSkpKSkKKyAgICAgICh1cGRhdGUtcHJvZ3Jlc3MhKQor CisgICAgICA7OyBNYWtlIHN1cmUgdG8gcmVhZCBubyBtb3JlIHRoYW4gTEVOIGJ5dGVzIHNpbmNl IHN1YnNlcXVlbnQgYnl0ZXMgbWF5CisgICAgICA7OyBiZWxvbmcgdG8gdGhlIG5leHQgcmVzcG9u c2UuCisgICAgICAoaWYgKD0gY29kZSAyMDApICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsg aGl0CisgICAgICAgICAgKGxldCAoKG5hcmluZm8gKHJlYWQtbmFyaW5mbyBwb3J0IHVybCAjOnNp emUgbGVuKSkpCisgICAgICAgICAgICAoaWYgKHN0cmluZz0/IChkaXJuYW1lIChuYXJpbmZvLXBh dGggbmFyaW5mbykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICglc3RvcmUtcHJlZml4KSkK KyAgICAgICAgICAgICAgICAoYmVnaW4KKyAgICAgICAgICAgICAgICAgIChjYWNoZS1uYXJpbmZv ISB1cmwgKG5hcmluZm8tcGF0aCBuYXJpbmZvKSBuYXJpbmZvIHR0bCkKKyAgICAgICAgICAgICAg ICAgIChjb25zIG5hcmluZm8gcmVzdWx0KSkKKyAgICAgICAgICAgICAgICByZXN1bHQpKQorICAg ICAgICAgIChsZXQqICgocGF0aCAgICAgICh1cmktcGF0aCAocmVxdWVzdC11cmkgcmVxdWVzdCkp KQorICAgICAgICAgICAgICAgICAoaGFzaC1wYXJ0IChiYXNlbmFtZQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoc3RyaW5nLWRyb3AtcmlnaHQgcGF0aCA4KSkpKSA7ZHJvcCAiLm5hcmlu Zm8iCisgICAgICAgICAgICAoaWYgbGVuCisgICAgICAgICAgICAgICAgKGdldC1ieXRldmVjdG9y LW4gcG9ydCBsZW4pCisgICAgICAgICAgICAgICAgKHJlYWQtdG8tZW9mIHBvcnQpKQorICAgICAg ICAgICAgKGNhY2hlLW5hcmluZm8hIHVybCAoaGFzaC1wYXJ0LT5wYXRoIGhhc2gtcGFydCkgI2YK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgKG9yICg9IDQwNCBjb2RlKSAoPSAyMDIg Y29kZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0bAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAlbmFyaW5mby10cmFuc2llbnQtZXJyb3ItdHRsKSkKKyAgICAg ICAgICAgIHJlc3VsdCkpKSkKKworICAoZGVmaW5lIChkby1mZXRjaCB1cmkpCisgICAgKGNhc2Ug KGFuZD0+IHVyaSB1cmktc2NoZW1lKQorICAgICAgKChodHRwIGh0dHBzKQorICAgICAgIDs7IE5v dGU6IERvIG5vdCBjaGVjayBIVFRQUyBzZXJ2ZXIgY2VydGlmaWNhdGVzIHRvIGF2b2lkIGRlcGVu ZGluZworICAgICAgIDs7IG9uIHRoZSBYLjUwOSBQS0kuICBXZSBjYW4gZG8gaXQgYmVjYXVzZSB3 ZSBhdXRoZW50aWNhdGUKKyAgICAgICA7OyBuYXJpbmZvcywgd2hpY2ggcHJvdmlkZXMgYSBtdWNo IHN0cm9uZ2VyIGd1YXJhbnRlZS4KKyAgICAgICAobGV0KiAoKHJlcXVlc3RzIChtYXAgKGN1dCBu YXJpbmZvLXJlcXVlc3QgdXJsIDw+KSBwYXRocykpCisgICAgICAgICAgICAgIChyZXN1bHQgICAo YmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHVwZGF0ZS1wcm9ncmVzcyEpCisgICAg ICAgICAgICAgICAgICAgICAgICAgIChjYWxsLXdpdGgtY29ubmVjdGlvbi1lcnJvci1oYW5kbGlu ZworICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAobGFtYmRhICgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChodHRwLW11bHRp cGxlLWdldCB1cmkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGhhbmRsZS1uYXJpbmZvLXJlc3BvbnNlICcoKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICM6b3Blbi1jb25uZWN0aW9uIG9wZW4tY29ubmVjdGlv bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzp2ZXJp ZnktY2VydGlmaWNhdGU/ICNmKSkpKSkpCisgICAgICAgICAobmV3bGluZSAoY3VycmVudC1lcnJv ci1wb3J0KSkKKyAgICAgICAgIHJlc3VsdCkpCisgICAgICAoKGZpbGUgI2YpCisgICAgICAgKGxl dCogKChiYXNlICAoc3RyaW5nLWFwcGVuZCAodXJpLXBhdGggdXJpKSAiLyIpKQorICAgICAgICAg ICAgICAoZmlsZXMgKG1hcCAoY29tcG9zZSAoY3V0IHN0cmluZy1hcHBlbmQgYmFzZSA8PiAiLm5h cmluZm8iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZS1wYXRoLWhh c2gtcGFydCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHMpKSkKKyAgICAgICAgIChm aWx0ZXItbWFwIChjdXQgbmFyaW5mby1mcm9tLWZpbGUgPD4gdXJsKSBmaWxlcykpKQorICAgICAg KGVsc2UKKyAgICAgICAobGVhdmUgKEdfICJ+czogdW5zdXBwb3J0ZWQgc2VydmVyIFVSSSBzY2hl bWV+JSIpCisgICAgICAgICAgICAgIChpZiB1cmkgKHVyaS1zY2hlbWUgdXJpKSB1cmwpKSkpKQor CisgIChkby1mZXRjaCAoc3RyaW5nLT51cmkgdXJsKSkpCisKKyhkZWZpbmUgaHR0cC1zdWJzdGl0 dXRlcgorICAobWFrZS1zdWJzdGl0dXRlciAnaHR0cAorICAgICAgICAgICAgICAgICAgICBwcm9j ZXNzLXN1YnN0aXR1dGlvbi9odHRwIGZldGNoLW5hcmluZm9zL2h0dHAKKyAgICAgICAgICAgICAg ICAgICAgJyhodHRwIGh0dHBzIGZpbGUpKSkKZGlmZiAtLWdpdCBhL3Rlc3RzL3N1YnN0aXR1dGUu c2NtIGIvdGVzdHMvc3Vic3RpdHV0ZS5zY20KaW5kZXggNjk3YWJjNDY4NC4uNmM3NTRmNzc0ZCAx MDA2NDQKLS0tIGEvdGVzdHMvc3Vic3RpdHV0ZS5zY20KKysrIGIvdGVzdHMvc3Vic3RpdHV0ZS5z Y20KQEAgLTEsNiArMSw3IEBACiA7OzsgR05VIEd1aXggLS0tIEZ1bmN0aW9uYWwgcGFja2FnZSBt YW5hZ2VtZW50IGZvciBHTlUKIDs7OyBDb3B5cmlnaHQgwqkgMjAxNCBOaWtpdGEgS2FyZXRuaWtv diA8bmlraXRhQGthcmV0bmlrb3Yub3JnPgogOzs7IENvcHlyaWdodCDCqSAyMDE0LCAyMDE1LCAy MDE3LCAyMDE4LCAyMDE5IEx1ZG92aWMgQ291cnTDqHMgPGx1ZG9AZ251Lm9yZz4KKzs7OyBDb3B5 cmlnaHQgwqkgMjAyMSBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+CiA7OzsK IDs7OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgR3VpeC4KIDs7OwpAQCAtMzgsNyArMzksOSBA QAogICAjOnVzZS1tb2R1bGUgKHJucnMgYnl0ZXZlY3RvcnMpCiAgICM6dXNlLW1vZHVsZSAocm5y cyBpbyBwb3J0cykKICAgIzp1c2UtbW9kdWxlICh3ZWIgdXJpKQorICAjOnVzZS1tb2R1bGUgKGlj ZS05IHJlY2VpdmUpCiAgICM6dXNlLW1vZHVsZSAoaWNlLTkgcmVnZXgpCisgICM6dXNlLW1vZHVs ZSAoc3JmaSBzcmZpLTEpCiAgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTExKQogICAjOnVzZS1t b2R1bGUgKHNyZmkgc3JmaS0yNikKICAgIzp1c2UtbW9kdWxlIChzcmZpIHNyZmktMzQpCkBAIC01 ODUsNiArNTg4LDE1NyBAQCBTeXN0ZW06IG1pcHM2NGVsLWxpbnV4XG4iKSkpCiAgICAgICAgIChs YW1iZGEgKCkKICAgICAgICAgICAoZmFsc2UtaWYtZXhjZXB0aW9uIChkZWxldGUtZmlsZSAic3Vi c3RpdHV0ZS1yZXRyaWV2ZWQiKSkpKSkpKQogCisMCisKKzs7IFRlc3Qgc3Vic3RpdHV0ZXIgaG9v a3MuCisKKyh0ZXN0LXF1aXQgIm5vIHN1YnN0aXR1dGVycywgbm8gc3Vic3RpdHV0ZXMiCisgICAg Im5vIHZhbGlkIHN1YnN0aXR1dGUiCisgIDs7IFRoaXMgc3Vic3RpdHV0ZSBzaG91bGQgYmUgaWdu b3JlZAorICAod2l0aC1uYXJpbmZvIChzdHJpbmctYXBwZW5kICVuYXJpbmZvICJTaWduYXR1cmU6 ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2lnbmF0dXJlLWZpZWxkICVuYXJp bmZvKSkKKyAgICAoZHluYW1pYy13aW5kCisgICAgICAoY29uc3QgI3QpCisgICAgICAobGFtYmRh ICgpCisgICAgICAgIChwYXJhbWV0ZXJpemUgKChzdWJzdGl0dXRlcnMgJygpKSkKKyAgICAgICAg ICAocmVxdWVzdC1zdWJzdGl0dXRpb24KKyAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgKCVzdG9y ZS1wcmVmaXgpICIvYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEtZm9vIikKKyAgICAg ICAgICAgInN1YnN0aXR1dGUtcmV0cmlldmVkIikpKQorICAgICAgKGxhbWJkYSAoKQorICAgICAg ICAoZmFsc2UtaWYtZXhjZXB0aW9uIChkZWxldGUtZmlsZSAic3Vic3RpdHV0ZS1yZXRyaWV2ZWQi KSkpKSkpCisKKyhkZWZpbmUgKGNhbGwtd2l0aC1vdXRwdXQtYnl0ZXZlY3RvciBwcm9jKQorICAo cmVjZWl2ZSAocG9ydCBnZXQtYnl0ZXZlY3RvcikKKyAgICAgIChvcGVuLWJ5dGV2ZWN0b3Itb3V0 cHV0LXBvcnQpCisgICAgKHByb2MgcG9ydCkKKyAgICAoZ2V0LWJ5dGV2ZWN0b3IpKSkKKworKGRl ZmluZSAoc3RyaW5nLT5uYXItcG9ydCBzdHJpbmcpCisgIChkZWZpbmUgbmFyaW5mby1kaXJlY3Rv cnkgJW1haW4tc3Vic3RpdHV0ZS1kaXJlY3RvcnkpCisgIDs7IFByZXBhcmUgdGhlIG5hci4KKyAg KGNhbGwtd2l0aC1vdXRwdXQtZmlsZQorICAgICAgKHN0cmluZy1hcHBlbmQgbmFyaW5mby1kaXJl Y3RvcnkgIi9leGFtcGxlLm91dCIpCisgICAgKGN1dCBkaXNwbGF5IHN0cmluZyA8PikpCisgIChv cGVuLWJ5dGV2ZWN0b3ItaW5wdXQtcG9ydAorICAgKGNhbGwtd2l0aC1vdXRwdXQtYnl0ZXZlY3Rv cgorICAgIChjdXQgd3JpdGUtZmlsZSAoc3RyaW5nLWFwcGVuZCBuYXJpbmZvLWRpcmVjdG9yeSAi L2V4YW1wbGUub3V0IikgPD4pKSkpCisKKzs7IE1ha2UgYSBzdWJzdGl0dXRlciBsb29raW5nIHVw IG5hcmluZm9zCis7OyBhbmQgbmFycyBpbiBhbiBhc3NvY2lhdGlvbiBsaXN0IG9mCis7OyAoVVJM IFBBVEgpIC0+IG5hcmluZm8KKzs7IE5BUklORk8tQ09OVEVOVFMgLT4gc3RyaW5nCisoZGVmaW5l IChhbGlzdC0+c3Vic3RpdHV0ZXIgbmFyaW5mb3MgbmFycykKKyAgKGRlZmluZSAoZmV0Y2gtbmFy aW5mb3MgdXJsIHBhdGhzIC4gcmVzdCkKKyAgICAoZGVmaW5lIChmZXRjaC1uYXJpbmZvIHBhdGgp CisgICAgICAoZmlsdGVyLW1hcCAobGFtYmRhIChlbnRyeSkKKyAgICAgICAgICAgICAgICAgICAg KGFuZCAoZXF1YWw/IChjYXIgZW50cnkpIChjb25zIHVybCBwYXRoKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgIChzdHJpbmctPm5hcmluZm8gKGNkciBlbnRyeSkgdXJsKSkpCisgICAgICAgICAg ICAgICAgICBuYXJpbmZvcykpCisgICAgKGNvbmNhdGVuYXRlIChtYXAgZmV0Y2gtbmFyaW5mbyBw YXRocykpKQorICAoZGVmaW5lIChuYXItZG93bmxvYWRlciBkZXN0aW5hdGlvbiBuYXJpbmZvIC4g cmVzdCkKKyAgICAoc3RyaW5nLT5uYXItcG9ydAorICAgICAoYXNzb2MtcmVmIG5hcnMgKG5hcmlu Zm8tY29udGVudHMgbmFyaW5mbykpKSkKKyAgKG1ha2Utc3Vic3RpdHV0ZXIgJ3Rlc3QgbmFyLWRv d25sb2FkZXIgZmV0Y2gtbmFyaW5mb3MgJyh0ZXN0KSkpCisKKyh0ZXN0LWVxdWFsICJxdWVyeSwg ZmV0Y2gtbmFyaW5mb3MgaXMgdXNlZCIKKyAgKHN0cmluZy1hcHBlbmQgKCVzdG9yZS1wcmVmaXgp ICIvYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEtZm9vIikKKyAgKHN0cmluZy10cmlt LWJvdGgKKyAgICh3aXRoLW91dHB1dC10by1zdHJpbmcKKyAgICAgKGxhbWJkYSAoKQorICAgICAg IChkZWZpbmUgaXRlbQorICAgICAgICAgKHN0cmluZy1hcHBlbmQgKCVzdG9yZS1wcmVmaXgpICIv YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEtZm9vIikpCisgICAgICAgKGRlZmluZSBz dWJzdGl0dXRlcgorICAgICAgICAgKGFsaXN0LT5zdWJzdGl0dXRlciBgKCgoInRlc3Q6Ly94L3ki IC4gLGl0ZW0pIC4gLCVuYXJpbmZvKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJygp KSkKKyAgICAgICAocGFyYW1ldGVyaXplICgoc3Vic3RpdHV0ZXJzIChsaXN0IHN1YnN0aXR1dGVy KSkKKyAgICAgICAgICAgICAgICAgICAgICAoc3Vic3RpdHV0ZS11cmxzICcoInRlc3Q6Ly94L3ki KSkKKyAgICAgICAgICAgICAgICAgICAgICAoJWFsbG93LXVuYXV0aGVudGljYXRlZC1zdWJzdGl0 dXRlcz8gI3QpKQorICAgICAgICAgKHdpdGgtaW5wdXQtZnJvbS1zdHJpbmcgKHN0cmluZy1hcHBl bmQgImhhdmUgIiBpdGVtKQorICAgICAgICAgICAobGFtYmRhICgpCisgICAgICAgICAgICAgKGd1 aXgtc3Vic3RpdHV0ZSAiLS1xdWVyeSIpKSkpKSkpKQorCis7OyBYWFggd2h5IGRvZXMgdGhpcyBy ZXN1bHQgaW4gImhhc2gtbWlzbWF0Y2ggc2hhMjU2IC4uLiAuLi4iPworKHRlc3QtZXF1YWwgInN1 YnN0aXR1dGUsIG5hci1kb3dubG9hZGVyIGlzIHVzZWQiCisgICJTdWJzdGl0dXRhYmxlIGRhdGEu IgorICAobGV0KiAoKHVybCAidGVzdDovL3gveSIpCisgICAgICAgICAoaXRlbSAoc3RyaW5nLWFw cGVuZCAoJXN0b3JlLXByZWZpeCkgIi9hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYS1m b28iKSkKKyAgICAgICAgIChuYXJpbmZvLWFsaXN0IGAoKCgsdXJsIC4gLGl0ZW0pIC4gLCVuYXJp bmZvKSkpCisgICAgICAgICAobmFyLWFsaXN0IGAoKCwlbmFyaW5mbyAuICJTdWJzdGl0dXRhYmxl IGRhdGEuIikpKQorICAgICAgICAgKHN1YnN0aXR1dGVyIChhbGlzdC0+c3Vic3RpdHV0ZXIgbmFy aW5mby1hbGlzdCBuYXItYWxpc3QpKSkKKyAgICAocGFyYW1ldGVyaXplICgoc3Vic3RpdHV0ZXJz CisgICAgICAgICAgICAgICAgICAgIChsaXN0IChhbGlzdC0+c3Vic3RpdHV0ZXIgbmFyaW5mby1h bGlzdCBuYXItYWxpc3QpKSkKKyAgICAgICAgICAgICAgICAgICAoc3Vic3RpdHV0ZS11cmxzICco InRlc3Q6Ly94L3kiKSkKKyAgICAgICAgICAgICAgICAgICAoJWFsbG93LXVuYXV0aGVudGljYXRl ZC1zdWJzdGl0dXRlcz8gI3QpKQorICAgICAgKGR5bmFtaWMtd2luZAorICAgICAgICAoY29uc3Qg I3QpCisgICAgICAgIChsYW1iZGEgKCkKKyAgICAgICAgICAocmVxdWVzdC1zdWJzdGl0dXRpb24g KHN0cmluZy1hcHBlbmQgKCVzdG9yZS1wcmVmaXgpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICIvYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEt Zm9vIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YnN0aXR1dGUtcmV0cmll dmVkIikKKyAgICAgICAgICAoY2FsbC13aXRoLWlucHV0LWZpbGUgInN1YnN0aXR1dGUtcmV0cmll dmVkIiBnZXQtc3RyaW5nLWFsbCkpCisgICAgICAgIChsYW1iZGEgKCkKKyAgICAgICAgICAoZmFs c2UtaWYtZXhjZXB0aW9uIChkZWxldGUtZmlsZSAic3Vic3RpdHV0ZS1yZXRyaWV2ZWQiKSkpKSkp KQorCisodGVzdC1lcXVhbCAic3Vic3RpdHV0ZSwgb25seSBzdXBwb3J0ZWQgVVJJIHNjaGVtZXMg YXJlIHBhc3NlZCB0byBmZXRjaC1uYXJpbmZvcyIKKyAgIlN1YnN0aXR1dGFibGUgZGF0YS4iCisg IChsZXQgKCkKKyAgICAoZGVmaW5lIChzdWJzdGl0dXRlci1leHBlY3RpbmcgcHJvdG9jb2wpCisg ICAgICAobWFrZS1zdWJzdGl0dXRlcgorICAgICAgIChzeW1ib2wtYXBwZW5kICd0ZXN0LyBwcm90 b2NvbCkKKyAgICAgICAobGFtYmRhIChkZXN0aW5hdGlvbiBuYXJpbmZvIC4gcmVzdCkKKyAgICAg ICAgIChhbmQgKGVxPyBwcm90b2NvbCAodXJpLXNjaGVtZSAoc3RyaW5nLT51cmkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hcmluZm8tdXJpLWJhc2UgbmFyaW5m bykpKSkKKyAgICAgICAgICAgICAgKHN0cmluZy0+bmFyLXBvcnQgIlN1YnN0aXR1dGFibGUgZGF0 YS4iKSkpCisgICAgICAgKGxhbWJkYSAodXJsIHBhdGhzIC4gcmVzdCkKKyAgICAgICAgICh1bmxl c3MgKGVxPyBwcm90b2NvbCAodXJpLXNjaGVtZSAoc3RyaW5nLT51cmkgdXJsKSkpCisgICAgICAg ICAgIChlcnJvciAid2hhdD8gSSBjYW4ndCB1c2UgdGhhdC4iKSkKKyAgICAgICAgIChsaXN0IChz dHJpbmctPm5hcmluZm8gJW5hcmluZm8gdXJsKSkpCisgICAgICAgKGxpc3QgcHJvdG9jb2wpKSkK KyAgICAocGFyYW1ldGVyaXplICgoc3Vic3RpdHV0ZXJzCisgICAgICAgICAgICAgICAgICAgIChs aXN0IChzdWJzdGl0dXRlci1leHBlY3RpbmcgJ3gpCisgICAgICAgICAgICAgICAgICAgICAgICAg IChzdWJzdGl0dXRlci1leHBlY3RpbmcgJ3kpKSkKKyAgICAgICAgICAgICAgICAgICAoc3Vic3Rp dHV0ZS11cmxzICcoIng6Ly8vIiAieTovLy8iKSkKKyAgICAgICAgICAgICAgICAgICAoJWFsbG93 LXVuYXV0aGVudGljYXRlZC1zdWJzdGl0dXRlcz8gI3QpKQorICAgICAgKGR5bmFtaWMtd2luZAor ICAgICAgICAoY29uc3QgI3QpCisgICAgICAgIChsYW1iZGEgKCkKKyAgICAgICAgICAocmVxdWVz dC1zdWJzdGl0dXRpb24gKHN0cmluZy1hcHBlbmQgKCVzdG9yZS1wcmVmaXgpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWEtZm9vIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1 YnN0aXR1dGUtcmV0cmlldmVkIikKKyAgICAgICAgICAoY2FsbC13aXRoLWlucHV0LWZpbGUgInN1 YnN0aXR1dGUtcmV0cmlldmVkIiBnZXQtc3RyaW5nLWFsbCkpCisgICAgICAgIChsYW1iZGEgKCkK KyAgICAgICAgICAoZmFsc2UtaWYtZXhjZXB0aW9uIChkZWxldGUtZmlsZSAic3Vic3RpdHV0ZS1y ZXRyaWV2ZWQiKSkpKSkpKQorCis7OyBEZWZpbmUgYSBmZXcgc3Vic3RpdHV0ZXJzIGZvciB0ZXN0 aW5nIHB1cnBvc2VzLgorKGRlZmluZS1tb2R1bGUgKGd1aXggc2NyaXB0cyBzdWJzdGl0dXRlIHRl c3QteCkKKyAgIzpleHBvcnQgKHRlc3QteC1zdWJzdGl0dXRlcikKKyAgIzp1c2UtbW9kdWxlIChn dWl4IHNjcmlwdHMgc3Vic3RpdHV0ZSkpCisKKyhkZWZpbmUgdGVzdC14LXN1YnN0aXR1dGVyICht YWtlLXN1YnN0aXR1dGVyICd4ICNmICNmICcoeCkpKQorCisoZGVmaW5lLW1vZHVsZSAoZ3VpeCBz Y3JpcHRzIHN1YnN0aXR1dGUgdGVzdC15KQorICAjOmV4cG9ydCAodGVzdC15LXN1YnN0aXR1dGVy KQorICAjOnVzZS1tb2R1bGUgKGd1aXggc2NyaXB0cyBzdWJzdGl0dXRlKSkKKworKGRlZmluZSB0 ZXN0LXktc3Vic3RpdHV0ZXIgKG1ha2Utc3Vic3RpdHV0ZXIgJ3kgI2YgI2YgJyh4KSkpCisKKzs7 IEFuZCB3ZSdyZSBiYWNrIQorKGRlZmluZS1tb2R1bGUgKHRlc3Qtc3Vic3RpdHV0ZSkpCisKKyh0 ZXN0LWVxdWFsICJzdWJzdGl0dXRlLCBzdWJzdGl0dXRlcnMgYXJlIGZvdW5kIGluLW9yZGVyIgor ICAobGlzdCAoQCAoZ3VpeCBzY3JpcHRzIHN1YnN0aXR1dGUgaHR0cCkgaHR0cC1zdWJzdGl0dXRl cikKKyAgICAgICAgKEAgKGd1aXggc2NyaXB0cyBzdWJzdGl0dXRlIHRlc3QteCkgdGVzdC14LXN1 YnN0aXR1dGVyKQorICAgICAgICAoQCAoZ3VpeCBzY3JpcHRzIHN1YnN0aXR1dGUgdGVzdC15KSB0 ZXN0LXktc3Vic3RpdHV0ZXIpKQorICAobGV0ICgob2xkLW9wdGlvbnMgI2YpKQorICAgIChkeW5h bWljLXdpbmQKKyAgICAgIChsYW1iZGEgKCkKKyAgICAgICAgKHNldCEgb2xkLW9wdGlvbnMgKGdl dGVudiAiX05JWF9PUFRJT05TIikpCisgICAgICAgIChzZXRlbnYgIl9OSVhfT1BUSU9OUyIgInN1 YnN0aXR1dGUtbWV0aG9kcz1odHRwIHRlc3QteCB0ZXN0LXkiKSkKKyAgICAgIChsYW1iZGEgKCkK KyAgICAgICAgKChAQCAoZ3VpeCBzY3JpcHRzIHN1YnN0aXR1dGUpIGRlZmF1bHQtc3Vic3RpdHV0 ZXJzKSkpCisgICAgICAobGFtYmRhICgpCisgICAgICAgIChzZXRlbnYgIl9OSVhfT1BUSU9OUyIg b2xkLW9wdGlvbnMpKSkpKQorCiAodGVzdC1lbmQgInN1YnN0aXR1dGUiKQogCiA7OzsgTG9jYWwg VmFyaWFibGVzOgotLSAKMi4zMC4wCgo= --=-wY5YO5kcxIR3yh1ShwI4 Content-Disposition: attachment; filename="0002-doc-Document-how-to-define-new-substituters.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0002-doc-Document-how-to-define-new-substituters.patch"; charset="UTF-8" RnJvbSBlNzRjYTU0M2IxYjc4MmQzNmY0MjgzNzE2ZDBlMjBiYjg3N2FhNjdkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+ CkRhdGU6IFRodSwgMjUgRmViIDIwMjEgMTg6MTU6MDYgKzAxMDAKU3ViamVjdDogW1BBVENIIDIv NF0gZG9jOiBEb2N1bWVudCBob3cgdG8gZGVmaW5lIG5ldyBzdWJzdGl0dXRlcnMuCk1JTUUtVmVy c2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50 LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgpUT0RPIHRoZSBtYWtlZmlsZSBzaG91bGQgcHJvYmFi bHkgYmUgYWRqdXN0ZWQsCnRvIGFsbG93IHRyYW5zbGF0aW9uIG9mIGRvYy9zdWJzdGl0dXRlcnMu dGV4aQphbmQgdG8gaW5jbHVkZSBpdCBpbiB0aGUgcmVsZWFzZSBhcmNoaXZlLgoKKiBkb2MvZ3Vp eC50ZXhpOiBJbmNsdWRlIHRoZSBuZXcgc2VjdGlvbiDigJhEZWZpbmluZyBTdWJzdGl0dXRlcnPi gJkKICBmcm9tIOKAmGRvYy9zdWJzdGl0dXRlcnMudGV4aeKAmS4KKiBkb2Mvc3Vic3RpdHV0ZXJz LnRleGk6IE5ldyBmaWxlLCBkb2N1bWVudGluZyBob3cgdG8gZGVmaW5lIG5ldwogIHN1YnN0aXR1 dGVycy4KLS0tCiBkb2MvZ3VpeC50ZXhpICAgICAgICAgfCAgNSArKysrCiBkb2Mvc3Vic3RpdHV0 ZXJzLnRleGkgfCA1NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr CiAyIGZpbGVzIGNoYW5nZWQsIDYxIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk b2Mvc3Vic3RpdHV0ZXJzLnRleGkKCmRpZmYgLS1naXQgYS9kb2MvZ3VpeC50ZXhpIGIvZG9jL2d1 aXgudGV4aQppbmRleCAyNzA4M2YxYWU2Li41OTFkYzMyMGQ4IDEwMDY0NAotLS0gYS9kb2MvZ3Vp eC50ZXhpCisrKyBiL2RvYy9ndWl4LnRleGkKQEAgLTg2LDYgKzg2LDcgQEAgQ29weXJpZ2h0IEBj b3B5cmlnaHR7fSAyMDIwIHJhaW5nbG9vbUAqCiBDb3B5cmlnaHQgQGNvcHlyaWdodHt9IDIwMjAg RGFuaWVsIEJyb29rc0AqCiBDb3B5cmlnaHQgQGNvcHlyaWdodHt9IDIwMjAgSm9obiBTb29AKgog Q29weXJpZ2h0IEBjb3B5cmlnaHR7fSAyMDIwIEpvbmF0aGFuIEJyaWVsbWFpZXJAKgorQ29weXJp Z2h0IEBjb3B5cmlnaHR7fSAyMDIxIE1heGltZSBEZXZvc0AqCiAKIFBlcm1pc3Npb24gaXMgZ3Jh bnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAogdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNp b24gMS4zIG9yCkBAIC0yNjcsNiArMjY4LDcgQEAgUHJvZ3JhbW1pbmcgSW50ZXJmYWNlCiAqIFRo ZSBTdG9yZSBNb25hZDo6ICAgICAgICAgICAgIFB1cmVseSBmdW5jdGlvbmFsIGludGVyZmFjZSB0 byB0aGUgc3RvcmUuCiAqIEctRXhwcmVzc2lvbnM6OiAgICAgICAgICAgICAgIE1hbmlwdWxhdGlu ZyBidWlsZCBleHByZXNzaW9ucy4KICogSW52b2tpbmcgZ3VpeCByZXBsOjogICAgICAgICAgUHJv Z3JhbW1pbmcgR3VpeCBpbiBHdWlsZS4KKyogRGVmaW5pbmcgU3Vic3RpdHV0ZXJzOjogICAgICAg RGVmaW5pbmcgbmV3IHN1YnN0aXR1dGlvbiBtZXRob2RzLgogCiBEZWZpbmluZyBQYWNrYWdlcwog CkBAIC02MzYxLDYgKzYzNjMsNyBAQCBwYWNrYWdlIGRlZmluaXRpb25zLgogKiBUaGUgU3RvcmUg TW9uYWQ6OiAgICAgICAgICAgICBQdXJlbHkgZnVuY3Rpb25hbCBpbnRlcmZhY2UgdG8gdGhlIHN0 b3JlLgogKiBHLUV4cHJlc3Npb25zOjogICAgICAgICAgICAgICBNYW5pcHVsYXRpbmcgYnVpbGQg ZXhwcmVzc2lvbnMuCiAqIEludm9raW5nIGd1aXggcmVwbDo6ICAgICAgICAgIFByb2dyYW1taW5n IEd1aXggaW4gR3VpbGUKKyogRGVmaW5pbmcgU3Vic3RpdHV0ZXJzOjogICAgICAgRGVmaW5pbmcg bmV3IHN1YnN0aXR1dGlvbiBtZXRob2RzLgogQGVuZCBtZW51CiAKIEBub2RlIFBhY2thZ2UgTW9k dWxlcwpAQCAtMTAwMjIsNiArMTAwMjUsOCBAQCBJbmhpYml0IGxvYWRpbmcgb2YgdGhlIEBmaWxl e34vLmd1aWxlfSBmaWxlLiAgQnkgZGVmYXVsdCwgdGhhdAogY29uZmlndXJhdGlvbiBmaWxlIGlz IGxvYWRlZCB3aGVuIHNwYXduaW5nIGEgQGNvZGV7Z3VpbGV9IFJFUEwuCiBAZW5kIHRhYmxlCiAK K0BpbmNsdWRlIHN1YnN0aXR1dGVycy50ZXhpCisKIEBjICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogQG5vZGUgVXRp bGl0aWVzCiBAY2hhcHRlciBVdGlsaXRpZXMKZGlmZiAtLWdpdCBhL2RvYy9zdWJzdGl0dXRlcnMu dGV4aSBiL2RvYy9zdWJzdGl0dXRlcnMudGV4aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwLi5mODZhMWNiMjZjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL3N1YnN0aXR1dGVy cy50ZXhpCkBAIC0wLDAgKzEsNTYgQEAKK0Bub2RlIERlZmluaW5nIFN1YnN0aXR1dGVycworQHNl Y3Rpb24gRGVmaW5pbmcgU3Vic3RpdHV0ZXJzCisKK0BjaW5kZXggc3Vic3RpdHV0ZXMsIGltcGxl bWVudGF0aW9uCitHdWl4IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIGRvd25sb2FkaW5nIHN1YnN0 aXR1dGVzIHZpYSB0aGUgSFRUUCBhbmQKK0hUVFBTIHByb3RvY29scywgYW5kIHN1YnN0aXR1dGVz IG92ZXIgSVBGUyBhbmQgR05VbmV0IGFyZSBwbGFubmVkLgorQW4gaW1wbGVtZW50YXRpb24gb2Yg c3Vic3RpdHV0ZXMgb3ZlciBzb21lIHByb3RvY29sIGlzIGNhbGxlZCBhCivigJhzdWJzdGl0dXRl cuKAmS4KKworVGhlIEFQSSBkZXNjcmliZWQgaGVyZSBpcyBpbXBsZW1lbnRlZCBieSB0aGUgQGNv ZGV7KGd1aXggc2NyaXB0cyBzdWJzdGl0dXRlKX0KK21vZHVsZS4gSW4gb3JkZXIgdG8gbGV0IHRo ZSBkYWVtb24gYWN0dWFsbHkgZmluZCB0aGUgc3Vic3RpdHV0ZXIsIHRoZQorc3Vic3RpdHV0ZXIg c2hvdWxkIGJlIGRlZmluZWQgaW4gYSBtb2R1bGUgQGNvZGV7KGd1aXggc2NyaXB0cyBzdWJzdGl0 dXRlIG5hbWUpfSwKK2FzIGEgdmFyaWFibGUgQHZhcntuYW1lfS1zdWJzdGl0dXRlci4KKworQGMg VE9ETyBjdXJyZW50bHkgdW5pbXBsZW1lbnRlZAorQGMKK0BjIFRoZSBAY29kZXtzdWJzdGl0dXRl LW1ldGhvZHN9IGRhZW1vbiBvcHRpb24gbXVzdCBhbHNvIGJlIHNldCB0byBhCitAYyBzcGFjZS1z ZXBhcmF0ZWQgbGlzdCBvZiB0aGUgbmFtZXMgb2YgdGhlIHN1YnN0aXR1dGVycyB0byB1c2UuICBU aGlzIGlzCitAYyBjdXJyZW50bHkgdW5pbXBsZW1lbnRlZC4KKworQGRlZmZuIHtTY2hlbWUgUHJv Y2VkdXJlfSBtYWtlLXN1YnN0aXR1dGVyIEB2YXJ7bmFtZX0gQHZhcntuYXItZG93bmxvYWRlcn0g QAorICBAdmFye2ZldGNoLW5hcmluZm9zfSBAdmFye3JlY29nbmlzZWQtdXJpLXNjaGVtZXN9CitS ZXR1cm4gYSBzdWJzdGl0dXRlciBmb3IgdGhlIHByb3RvY29scyBpbiBAdmFye3JlY29nbmlzZWQt dXJpLXNjaGVtZXN9LAorYSBsaXN0IG9mIFVSSSBzY2hlbWVzLiAgQHZhcntmZXRjaC1uYXJpbmZv c30gd2lsbCBiZSB1c2VkIGZpbmRpbmcgbmFyaW5mb3MKK2FuZCBAdmFye25hci1kb3dubG9hZGVy fSB0byBkb3dubG9hZCBhIHN1YnN0aXR1dGUuCisKK1RoZSBwcm9jZWR1cmUgQHZhcntuYXItZG93 bmxvYWRlcn0gbXVzdCBiZSBhIGtleXdvcmQgcHJvY2VkdXJlCisoQHB4cmVme09wdGlvbmFsIEFy Z3VtZW50cywga2V5d29yZCBhcmd1bWVudHMgaW4gR3VpbGUsLCBndWlsZSwgR05VCitHdWlsZSBS ZWZlcmVuY2UgTWFudWFsfSkuICBJdCBhY2NlcHRzIHR3byBwb3NpdGlvbmFsIGFyZ3VtZW50cwor QHZhcntkZXN0aW5hdGlvbn0gYW5kIEB2YXJ7bmFyaW5mb30uICBAdmFye2Rlc3RpbmF0aW9ufSBp cyB0aGUgbG9jYXRpb24KK2luIHRoZSBmaWxlIHN5c3RlbSB3aGVyZSB0aGUgc3RvcmUgaXRlbSBz aG91bGQgYmUgd3JpdHRlbiB0bywKK2FuZCBAdmFye25hcmluZm99IGlzIHRoZSBuYXJpbmZvIGRl c2NyaWJpbmcgdGhlIHN1YnN0aXR1dGUgdG8gZG93bmxvYWQuCisKK0l0IHNob3VsZCByZXR1cm4g QGNvZGV7I2Z9IGlmIHRoZSBzdWJzdGl0dXRlIGlzIG5vdCBhdmFpbGFibGUKK3ZpYSB0aGlzIG1l dGhvZC4gIElmIHRoZSBzdWJzdGl0dXRlIHdhcyBhdmFpbGFibGUsIGl0IHNob3VsZCBlaXRoZXIK K3JldHVybiBhbiBpbnB1dCBwb3J0IHRvIHJlYWQgdGhlIG5hciBmcm9tLgorCitAYyBUT0RPIGN1 cnJlbnRseSB1bmltcGxlbWVudGVkLCBidXQgd2lsbCBiZSB1c2VkIGJ5IHRoZSBJUEZTIHN1YnN0 aXR1dGVyOgorQGMgb3IgdGhlIHN5bWJvbCBAY29kZXt1bnBhY2tlZH0KK0BjIGlmIHRoZSBzdWJz dGl0dXRlciB3cm90ZSB0aGUgc3RvcmUgaXRlbSB0byBAdmFye2Rlc3RpbmF0aW9ufSBieSBpdHNl bGYuCisKK1RoZSBwcm9jZWR1cmUgQHZhcntmZXRjaC1uYXJpbmZvc30gbXVzdCBhY2NlcHQgdHdv IGFyZ3VtZW50cworQHZhcnt1cmx9IGFuZCBAdmFye3BhdGhzfSwgd2hlcmUgQHZhcnt1cmx9IGlz IHRoZSBVUkwgKGFzIGEgc3RyaW5nKQorb2YgYSBzdWJzdGl0dXRlIHNlcnZlciBhbmQgQHZhcntw YXRoc30gaXMgYSBsaXN0IG9mIHN0b3JlIGl0ZW0gbmFtZXMKK2ZvciB3aGljaCB0byBmaW5kIGEg bmFyaW5mby4KKworVGhpcyBwcm9jZWR1cmUgc2hvdWxkIHJldHVybiBhIGxpc3Qgb2YgbmFyaW5m b3MgcGVydGFpbmluZyB0bworQHZhcntwYXRoc30gKHBvc3NpYmx5IGVtcHR5KS4gIEl0IGNhbiBi ZSBhc3N1bWVkIEB2YXJ7dXJsfQoraGFzIGFuIFVSSSBzY2hlbWUgaW4gQHZhcntyZWNvZ25pc2Vk LXVyaS1zY2hlbWVzfS4KKworQSBzdWJzdGl0dXRlciBkb2VzIG5vdCBoYXZlIHRvIHZlcmlmeSB3 aGV0aGVyIHRoZSBuYXJpbmZvIGFuZCBuYXIKK2FyZSBjb3JyZWN0bHkgc2lnbmVkIGFuZCBoYXZl IGEgY29ycmVjdCBoYXNoOyB0aGlzIGlzIGhhbmRsZWQKK2J5IEBjb2RleyhndWl4IHNjcmlwdHMg c3Vic3RpdHV0ZSl9LiAgQHZhcntuYXItZG93bmxvYWRlcn0gYW5kCitAdmFye2ZldGNoLW5hcmlu Zm9zfSBjYW4gYmUgQGNvZGV7I2Z9IGlmIHVuaW1wbGVtZW50ZWQgYnkgdGhpcworc3Vic3RpdHV0 ZXIuCitAZW5kIGRlZmZuCi0tIAoyLjMwLjAKCg== --=-wY5YO5kcxIR3yh1ShwI4 Content-Disposition: attachment; filename="0003-daemon-Set-the-substitute-methods-option.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0003-daemon-Set-the-substitute-methods-option.patch"; charset="UTF-8" RnJvbSA2YjA5YmVmODNiZGYxODgyNDU3ZDRlYzkxYTc2MWEyNjAzZjJjMWQ0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+ CkRhdGU6IFRodSwgMjUgRmViIDIwMjEgMjE6MDM6MTkgKzAxMDAKU3ViamVjdDogW1BBVENIIDMv NF0gZGFlbW9uOiBTZXQgdGhlICdzdWJzdGl0dXRlLW1ldGhvZHMnIG9wdGlvbi4KClRoaXMgb3B0 aW9uIGlzIHVzZWQgYnkgJ2d1aXggc3Vic3RpdHV0ZScgdG8gZGV0ZXJtaW5lCndoaWNoIHN1YnN0 aXR1dGlvbiBtZXRob2RzIHRvIHVzZS4KCiogZG9jL2d1aXgudGV4aSAoSW52b2tpbmcgZ3VpeC1k YWVtb24pOiBEb2N1bWVudCB0aGUgbmV3IGRhZW1vbiBvcHRpb24KICAiLS1zdWJzdGl0dXRlLW1l dGhvZHMiLgogIChHZXR0aW5nIFN1YnN0aXR1dGVzIGZyb20gT3RoZXIgUHJvdG9jb2xzKTogRG9j dW1lbnQgaG93IHRvIHVzZQogIG5vbi1IVFRQIGFuZCBub24tSFRUUFMgc3Vic3RpdHV0ZXJzLgoq IGRvYy9zdWJzdGl0dXRlcnMudGV4aTogUmVtb3ZlIFRPRE8gZml4ZWQgYnkgdGhpcyBjb21taXQu Ciogbml4L25peC1kYWVtb24vZ3VpeC1kYWVtb24uY2MKICAoR1VJWF9PUFRfU1VCU1RJVFVURV9N RVRIT0RTLCBvcHRpb25zLCBwYXJzZV9vcHQpOiBEZWZpbmUgYSBuZXcKICBvcHRpb24gIi0tc3Vi c3RpdHV0ZS1tZXRob2RzIiBhbmQgaW5jbHVkZSBpdHMgdmFsdWUgaW4gdGhlCiAgInN1YnN0aXR1 dGUtbWV0aG9kcyIgZGFlbW9uIG9wdGlvbi4KLS0tCiBkb2MvZ3VpeC50ZXhpICAgICAgICAgICAg ICAgICB8IDQ4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkb2Mvc3Vic3Rp dHV0ZXJzLnRleGkgICAgICAgICB8ICA2IC0tLS0tCiBuaXgvbml4LWRhZW1vbi9ndWl4LWRhZW1v bi5jYyB8ICA3ICsrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDU1IGluc2VydGlvbnMoKyksIDYgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL2d1aXgudGV4aSBiL2RvYy9ndWl4LnRleGkKaW5k ZXggNTkxZGMzMjBkOC4uYzgxMWViMTAyNSAxMDA2NDQKLS0tIGEvZG9jL2d1aXgudGV4aQorKysg Yi9kb2MvZ3VpeC50ZXhpCkBAIC0yMjksNiArMjI5LDcgQEAgU3Vic3RpdHV0ZXMKICogT2ZmaWNp YWwgU3Vic3RpdHV0ZSBTZXJ2ZXI6OiAgT25lIHBhcnRpY3VsYXIgc291cmNlIG9mIHN1YnN0aXR1 dGVzLgogKiBTdWJzdGl0dXRlIFNlcnZlciBBdXRob3JpemF0aW9uOjogIEhvdyB0byBlbmFibGUg b3IgZGlzYWJsZSBzdWJzdGl0dXRlcy4KICogR2V0dGluZyBTdWJzdGl0dXRlcyBmcm9tIE90aGVy IFNlcnZlcnM6OiAgU3Vic3RpdHV0ZSBkaXZlcnNpdHkuCisqIEdldHRpbmcgU3Vic3RpdHV0ZXMg ZnJvbSBPdGhlciBQcm90b2NvbHM6OiBEaWZmZXJlbnQgc291cmNlcyBvZiBzdWJzdGl0dXRlcy4K ICogU3Vic3RpdHV0ZSBBdXRoZW50aWNhdGlvbjo6ICAgSG93IEd1aXggdmVyaWZpZXMgc3Vic3Rp dHV0ZXMuCiAqIFByb3h5IFNldHRpbmdzOjogICAgICAgICAgICAgIEhvdyB0byBnZXQgc3Vic3Rp dHV0ZXMgdmlhIHByb3h5LgogKiBTdWJzdGl0dXRpb24gRmFpbHVyZTo6ICAgICAgICBXaGF0IGhh cHBlbnMgd2hlbiBzdWJzdGl0dXRpb24gZmFpbHMuCkBAIC0xNTMxLDYgKzE1MzIsMTkgQEAgYXMg dGhleSBhcmUgc2lnbmVkIGJ5IGEgdHJ1c3RlZCBzaWduYXR1cmUgKEBweHJlZntTdWJzdGl0dXRl c30pLgogQHhyZWZ7R2V0dGluZyBTdWJzdGl0dXRlcyBmcm9tIE90aGVyIFNlcnZlcnN9LCBmb3Ig bW9yZSBpbmZvcm1hdGlvbiBvbgogaG93IHRvIGNvbmZpZ3VyZSB0aGUgZGFlbW9uIHRvIGdldCBz dWJzdGl0dXRlcyBmcm9tIG90aGVyIHNlcnZlcnMuCiAKK0BpdGVtIC0tc3Vic3RpdHV0ZS1tZXRo b2RzPUB2YXJ7bWV0aG9kc30KK0NvbnNpZGVyIEB2YXJ7bWV0aG9kc30gdGhlIHdoaXRlc3BhY2Ut c2VwYXJhdGVkIGxpc3Qgb2Ygc3Vic3RpdHV0aW9uCittZXRob2RzICjigJhzdWJzdGl0dXRlcnPi gJkpIHRvIHVzZS4gIFdoZW4gdGhpcyBvcHRpb24gaXMgb21pdHRlZCwgQGNvZGV7aHR0cH0KK2lz IHVzZWQuICBUaGUgQGNvZGV7aHR0cH0gc3Vic3RpdHV0ZXIgc3VwcG9ydHMgYm90aCB0aGUgSFRU UCBhbmQgSFRUUFMKK3Byb3RvY29sLgorCitAeHJlZntEZWZpbmluZyBTdWJzdGl0dXRlcnN9IGZv ciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZGVmaW5lIG5ldworc3Vic3RpdHV0ZXJzLCBhbmQgQHB4 cmVme0dldHRpbmcgU3Vic3RpdHV0ZXMgZnJvbSBPdGhlciBQcm90b2NvbHN9CitvbiBob3cgdG8g dXNlIG5vbi1IVFRQIGFuZCBub24tSFRUUFMgc3Vic3RpdHV0ZXJzLgorCitAYyBUT0RPOiBzZWUg PHNlY3Rpb24+IGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29uZmlndXJlIHRoZQorQGMgSVBG UyBhbmQgR05VbmV0IHN1YnN0aXR1dGVycworCiBAY2luZGV4IG9mZmxvYWRpbmcKIEBpdGVtIC0t bm8tb2ZmbG9hZAogRG8gbm90IHVzZSBvZmZsb2FkIGJ1aWxkcyB0byBvdGhlciBtYWNoaW5lcyAo QHB4cmVme0RhZW1vbiBPZmZsb2FkCkBAIC0zNjc5LDYgKzM2OTMsNyBAQCBhbHNvIHJlc3VsdCBm cm9tIGRlcml2YXRpb24gYnVpbGRzLCBjYW4gYmUgYXZhaWxhYmxlIGFzIHN1YnN0aXR1dGVzLgog KiBPZmZpY2lhbCBTdWJzdGl0dXRlIFNlcnZlcjo6ICBPbmUgcGFydGljdWxhciBzb3VyY2Ugb2Yg c3Vic3RpdHV0ZXMuCiAqIFN1YnN0aXR1dGUgU2VydmVyIEF1dGhvcml6YXRpb246OiAgSG93IHRv IGVuYWJsZSBvciBkaXNhYmxlIHN1YnN0aXR1dGVzLgogKiBHZXR0aW5nIFN1YnN0aXR1dGVzIGZy b20gT3RoZXIgU2VydmVyczo6ICBTdWJzdGl0dXRlIGRpdmVyc2l0eS4KKyogR2V0dGluZyBTdWJz dGl0dXRlcyBmcm9tIE90aGVyIFByb3RvY29sczo6IERpZmZlcmVudCBzb3VyY2VzIG9mIHN1YnN0 aXR1dGVzLgogKiBTdWJzdGl0dXRlIEF1dGhlbnRpY2F0aW9uOjogICBIb3cgR3VpeCB2ZXJpZmll cyBzdWJzdGl0dXRlcy4KICogUHJveHkgU2V0dGluZ3M6OiAgICAgICAgICAgICAgSG93IHRvIGdl dCBzdWJzdGl0dXRlcyB2aWEgcHJveHkuCiAqIFN1YnN0aXR1dGlvbiBGYWlsdXJlOjogICAgICAg IFdoYXQgaGFwcGVucyB3aGVuIHN1YnN0aXR1dGlvbiBmYWlscy4KQEAgLTM4ODUsNiArMzkwMCwz OSBAQCBOb3RlIHRoYXQgdGhlcmUgYXJlIGFsc28gc2l0dWF0aW9ucyB3aGVyZSBvbmUgbWF5IHdh bnQgdG8gYWRkIHRoZSBVUkwgb2YKIGEgc3Vic3RpdHV0ZSBzZXJ2ZXIgQGVtcGh7d2l0aG91dH0g YXV0aG9yaXppbmcgaXRzIGtleS4KIEB4cmVme1N1YnN0aXR1dGUgQXV0aGVudGljYXRpb259LCB0 byB1bmRlcnN0YW5kIHRoaXMgZmluZSBwb2ludC4KIAorQG5vZGUgR2V0dGluZyBTdWJzdGl0dXRl cyBmcm9tIE90aGVyIFByb3RvY29scworQHN1YnNlY3Rpb24gR2V0dGluZyBTdWJzdGl0dXRlcyBm cm9tIE90aGVyIFByb3RvY29scworCitAY2luZGV4IHN1YnN0aXR1dGUgc2VydmVycywgYWx0ZXJu YXRpdmUgcHJvdG9jb2xzCitUaGlzIHN1YnNlY3Rpb24gcHJvYmFibHkgd29uJ3QgbWFrZSBtdWNo IHNlbnNlIHlldCwKK2FzIGN1cnJlbnRseSBvbmx5IHRoZSBIVFRQIGFuZCBIVFRQUyBwcm90b2Nv bHMgYXJlIHN1cHBvcnRlZAorZm9yIHN1YnN0aXR1dGlvbi4gIENvbnNpZGVyIHdoYXQgZm9sbG93 cyBhcyBhIHBlZWsgaW50byB0aGUgZnV0dXJlIQorCitHdWl4IHdpbGwgc3VwcG9ydCBtdWx0aXBs ZSBzdWJzdGl0dXRpb24gbWV0aG9kcyAtLSBjdXJyZW50bHkgb25seQorYSBzdWJzdGl0dXRlciBm b3IgSFRUUCBhbmQgSFRUUFMgaXMgZGVmaW5lZCwgYnV0IGEgc3Vic3RpdHV0ZXIgZm9yCit0aGUg UDJQIG5ldHdvcmtzIElQRlMgYW5kIEdOVW5ldCB3aWxsIGJlIGRlZmluZWQgaW4gdGhlIGZ1dHVy ZS4KKworQGMgVGhlIElQRlMgc3Vic3RpdHV0ZXIgaGFzIGFjdHVhbGx5IGFscmVhZHkgYmVlbiBp bXBsZW1lbnRlZCwKK0BjIHNlZSBodHRwOi8vaXNzdWVzLmd1aXguZ251Lm9yZy8zMzg5OSwgYnV0 IGl0IHJlcXVpcmVzIHNvbWUgY2hhbmdlcworQGMgYW5kIGlzIG5vdCB5ZXQgYXZhaWxhYmxlIHRv IHRoZSBlbmQtdXNlci4KK0luIG9yZGVyIHRvIHVzZSBhIHN1YnN0aXRpb24gbWV0aG9kLCBpdCBt dXN0IGZpcnN0IGJlIGVuYWJsZWQgaW4gdGhlCitndWl4IGRhZW1vbgorKEBweHJlZntJbnZva2lu ZyBndWl4LWRhZW1vbiwgQG9wdGlvbnstLXN1YnN0aXR1dGUtbWV0aG9kc319KS4KK0ZvciBleGFt cGxlLCB0byBlbmFibGUgdGhlIEhUVFAvUyBhbmQgdGhlIHlldC10by1iZS13cml0dGVuIElQRlMK K3N1YnN0aXR1dGVyLCBwYXNzIEBjb2Rley0tc3Vic3RpdHV0ZS1tZXRob2RzPSdodHRwIGlwZnMn fS4KK1RoaXMgbXVzdCBiZSBzZXQgaW4gdGhlIGRhZW1vbiwgYW5kIGNhbm5vdCBiZSBkb25lIGZy b20gYSB1c2VyIHByb2Nlc3MuCitAYyBYWFggXiBpcyB0aGlzIHNlbnRlbmNlIGNsZWFyPyAgSSBt ZWFuIGBgZ3VpeCBidWlsZCAtLXN1YnN0aXR1dGUtbWV0aG9kc2BgCitAYyB3b24ndCB3b3JrLCBh cyBzdWJzdGl0dXRpb24gaGFwcGVucyBpbiB0aGUgZGFlbW9uICh3ZWxsLCBpbiBhIHByb2Nlc3MK K0BjIHN0YXJ0ZWQgYnkgdGhlIGRhZW1vbiB0byBiZSBwcmVjaXNlKS4KKworQWxzbyBpbmNsdWRl IGFuIFVSTCBzdXBwb3J0ZWQgYnkgdGhlIHN1YnN0aXR1dGVyIGluIHRoZSBsaXN0IG9mCitzdWJz dGl0dXRlIHNlcnZlciBVUkxzLiAgVGhhdCdzIGFsbCB0aGVyZSBpcyB0byBpdCEKKworQGMgVE9E TyBeIHdoZW4gdXNpbmcgdGhlIElQRlMgc3Vic3RpdHV0ZXIsIHRoZSBkYWVtb24gYWxzbyBuZWVk cyAtCitAYyB0byBrbm93IHRoZSBJUEZTIGdhdGV3YXksIGFuZCB3aGVuIHVzaW5nIHRoZSBHTlVu ZXQgc3Vic3RpdHV0ZXIsCitAYyBHTlVuZXQgbmVlZHMgdG8gYmUgcnVubmluZy4gIEJ1dCBsZXQn cyBmaXJzdCBhY3R1YWxseSBpbXBsZW1lbnQKK0BjICYgbWVyZ2UgdGhlc2Ugc3Vic3RpdHV0ZXJz IC4uLgorCiBAbm9kZSBTdWJzdGl0dXRlIEF1dGhlbnRpY2F0aW9uCiBAc3Vic2VjdGlvbiBTdWJz dGl0dXRlIEF1dGhlbnRpY2F0aW9uCiAKZGlmZiAtLWdpdCBhL2RvYy9zdWJzdGl0dXRlcnMudGV4 aSBiL2RvYy9zdWJzdGl0dXRlcnMudGV4aQppbmRleCBmODZhMWNiMjZjLi41MTZlMmMxZWVhIDEw MDY0NAotLS0gYS9kb2Mvc3Vic3RpdHV0ZXJzLnRleGkKKysrIGIvZG9jL3N1YnN0aXR1dGVycy50 ZXhpCkBAIC0xMiwxMiArMTIsNiBAQCBtb2R1bGUuIEluIG9yZGVyIHRvIGxldCB0aGUgZGFlbW9u IGFjdHVhbGx5IGZpbmQgdGhlIHN1YnN0aXR1dGVyLCB0aGUKIHN1YnN0aXR1dGVyIHNob3VsZCBi ZSBkZWZpbmVkIGluIGEgbW9kdWxlIEBjb2RleyhndWl4IHNjcmlwdHMgc3Vic3RpdHV0ZSBuYW1l KX0sCiBhcyBhIHZhcmlhYmxlIEB2YXJ7bmFtZX0tc3Vic3RpdHV0ZXIuCiAKLUBjIFRPRE8gY3Vy cmVudGx5IHVuaW1wbGVtZW50ZWQKLUBjCi1AYyBUaGUgQGNvZGV7c3Vic3RpdHV0ZS1tZXRob2Rz fSBkYWVtb24gb3B0aW9uIG11c3QgYWxzbyBiZSBzZXQgdG8gYQotQGMgc3BhY2Utc2VwYXJhdGVk IGxpc3Qgb2YgdGhlIG5hbWVzIG9mIHRoZSBzdWJzdGl0dXRlcnMgdG8gdXNlLiAgVGhpcyBpcwot QGMgY3VycmVudGx5IHVuaW1wbGVtZW50ZWQuCi0KIEBkZWZmbiB7U2NoZW1lIFByb2NlZHVyZX0g bWFrZS1zdWJzdGl0dXRlciBAdmFye25hbWV9IEB2YXJ7bmFyLWRvd25sb2FkZXJ9IEAKICAgQHZh cntmZXRjaC1uYXJpbmZvc30gQHZhcntyZWNvZ25pc2VkLXVyaS1zY2hlbWVzfQogUmV0dXJuIGEg c3Vic3RpdHV0ZXIgZm9yIHRoZSBwcm90b2NvbHMgaW4gQHZhcntyZWNvZ25pc2VkLXVyaS1zY2hl bWVzfSwKZGlmZiAtLWdpdCBhL25peC9uaXgtZGFlbW9uL2d1aXgtZGFlbW9uLmNjIGIvbml4L25p eC1kYWVtb24vZ3VpeC1kYWVtb24uY2MKaW5kZXggMzBkMGU1ZDExZC4uNTU0NTIyNmEyMCAxMDA2 NDQKLS0tIGEvbml4L25peC1kYWVtb24vZ3VpeC1kYWVtb24uY2MKKysrIGIvbml4L25peC1kYWVt b24vZ3VpeC1kYWVtb24uY2MKQEAgLTEsNiArMSw3IEBACiAvKiBHTlUgR3VpeCAtLS0gRnVuY3Rp b25hbCBwYWNrYWdlIG1hbmFnZW1lbnQgZm9yIEdOVQogICAgQ29weXJpZ2h0IChDKSAyMDEyLCAy MDEzLCAyMDE0LCAyMDE1LCAyMDE2LCAyMDE3LCAyMDE4LCAyMDE5IEx1ZG92aWMgQ291cnTDqHMg PGx1ZG9AZ251Lm9yZz4KICAgIENvcHlyaWdodCAoQykgMjAwNiwgMjAxMCwgMjAxMiwgMjAxNCBF ZWxjbyBEb2xzdHJhIDxlLmRvbHN0cmFAdHVkZWxmdC5ubD4KKyAgIENvcHlyaWdodCAoQykgMjAy MSBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+CiAKICAgIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIEdOVSBHdWl4LgogCkBAIC05MCw2ICs5MSw3IEBAIGJ1aWxkcyBkZXJpdmF0aW9u cyBvbiBiZWhhbGYgb2YgaXRzIGNsaWVudHMuIik7CiAjZGVmaW5lIEdVSVhfT1BUX01BWF9TSUxF TlRfVElNRSAxOQogI2RlZmluZSBHVUlYX09QVF9MT0dfQ09NUFJFU1NJT04gMjAKICNkZWZpbmUg R1VJWF9PUFRfRElTQ09WRVIgMjEKKyNkZWZpbmUgR1VJWF9PUFRfU1VCU1RJVFVURV9NRVRIT0RT IDIyCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0aW9uc1tdID0KICAgewpA QCAtMTE0LDYgKzExNiw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0aW9u c1tdID0KICAgICAgIG5fKCJkbyBub3QgdXNlIHN1YnN0aXR1dGVzIikgfSwKICAgICB7ICJzdWJz dGl0dXRlLXVybHMiLCBHVUlYX09QVF9TVUJTVElUVVRFX1VSTFMsIG5fKCJVUkxTIiksIDAsCiAg ICAgICBuXygidXNlIFVSTFMgYXMgdGhlIGRlZmF1bHQgbGlzdCBvZiBzdWJzdGl0dXRlIHByb3Zp ZGVycyIpIH0sCisgICAgeyAic3Vic3RpdHV0ZS1tZXRob2RzIiwgR1VJWF9PUFRfU1VCU1RJVFVU RV9NRVRIT0RTLCBuXygiTUVUSE9EUyIpLCAwLAorICAgICAgbl8oInVzZSBNRVRIT0RTIGFzIHRo ZSBsaXN0IG9mIHN1YnN0aXR1dGUgbWV0aG9kcyIpIH0sCiAgICAgeyAibm8tb2ZmbG9hZCIsIEdV SVhfT1BUX05PX0JVSUxEX0hPT0ssIDAsIDAsCiAgICAgICBuXygiZG8gbm90IGF0dGVtcHQgdG8g b2ZmbG9hZCBidWlsZHMiKSB9LAogICAgIHsgIm5vLWJ1aWxkLWhvb2siLCBHVUlYX09QVF9OT19C VUlMRF9IT09LLCAwLApAQCAtMjYzLDYgKzI2Nyw5IEBAIHBhcnNlX29wdCAoaW50IGtleSwgY2hh ciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCiAgICAgY2FzZSBHVUlYX09QVF9OT19T VUJTVElUVVRFUzoKICAgICAgIHNldHRpbmdzLnNldCAoImJ1aWxkLXVzZS1zdWJzdGl0dXRlcyIs ICJmYWxzZSIpOwogICAgICAgYnJlYWs7CisgICAgY2FzZSBHVUlYX09QVF9TVUJTVElUVVRFX01F VEhPRFM6CisgICAgICBzZXR0aW5ncy5zZXQgKCJzdWJzdGl0dXRlLW1ldGhvZHMiLCBhcmcpOwor ICAgICAgYnJlYWs7CiAgICAgY2FzZSBHVUlYX09QVF9OT19CVUlMRF9IT09LOgogICAgICAgc2V0 dGluZ3MudXNlQnVpbGRIb29rID0gZmFsc2U7CiAgICAgICBicmVhazsKLS0gCjIuMzAuMAoK --=-wY5YO5kcxIR3yh1ShwI4 Content-Disposition: attachment; filename="0004-substitute-Unstub-verify-hash-unknown.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0004-substitute-Unstub-verify-hash-unknown.patch"; charset="UTF-8" RnJvbSBiMGIzZjNlMzM5ZmY4MzRmZDk3M2YyZjBmMGJjN2FkOWJlNmZmZDA0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+ CkRhdGU6IEZyaSwgMjYgRmViIDIwMjEgMTU6MzA6MDQgKzAxMDAKU3ViamVjdDogW1BBVENIIDQv NF0gPT9VVEYtOD9xP3N1YnN0aXR1dGU6PTIwVW5zdHViPTIwPUUyPTgwPTk4dmVyaWZ5LWhhc2g/ PQogPT9VVEYtOD9xPy91bmtub3duPUUyPTgwPTk5Lj89Ck1JTUUtVmVyc2lvbjogMS4wCkNvbnRl bnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29k aW5nOiA4Yml0CgpUaGlzIHByb2NlZHVyZSBpcyBjYWxsZWQgaWYgYSBzdWJzdGl0dXRpb24gbWV0 aG9kCnJldHVybnMgJ3VucGFja2VkJy4gIFdoaWxlIG5vIG1ldGhvZCBkb2VzIHRoYXQgeWV0LApp dCBpcyBleHBlY3RlZCB0aGUgSVBGUyBhbmQgR05VbmV0IHN1YnN0aXR1dGVyIHdpbGwuCgoqIGd1 aXgvc2NyaXB0cy9zdWJzdGl0dXRlLnNjbQogICh2ZXJpZnktaGFzaC91bmtub3duKTogVW5zdHVi IHByb2NlZHVyZS4KICAocHJvY2Vzcy1zdWJzdGl0dXRpb24pOiBXaGVuIHRoZSBzdWJzdGl0dXRl cgogIHJldHVybnMg4oCYdW5wYWNrZWTigJksIHZlcmlmeSB3aGV0aGVyIHdlIGdvdCB0aGUgcmln aHQKICBzdWJzdGl0dXRlIGFuZCBjYW5vbmljYWxpemUgcGVybWlzc2lvbnMgYW5kIHRpbWVzdGFt cHMuCiogZG9jL3N1YnN0aXR1dGVycy50ZXhpIChEZWZpbmluZyBTdWJzdGl0dXRlcnMpOiBEb2N1 bWVudCB0aGUKICBhYnNlbmNlIG9mIGEgcmVxdWlyZW1lbnQgZm9yIHN1YnN0aXR1dGVycyB0byBu b3JtYWxpemUgdGltZXN0YW1wcwogIGFuZCBmaWxlIHBlcm1pc3Npb25zLgoqIHRlc3RzL3N1YnN0 aXR1dGUuc2NtICh3cml0ZS1zdHJpbmctYXMtbmFyKTogRGVmaW5lIHByb2NlZHVyZSwKICBhbmQg dXNlIGluIHRlc3QgY2FzZXMuICBBbHNvIHRlc3QgdGhhdCB0aGUgaGFzaCBpcyB2ZXJpZmllZAog IHdoZW4gYSBzdWJzdGl0dXRlciByZXR1cm5zICd1bnBhY2tlZCcuCi0tLQogZG9jL3N1YnN0aXR1 dGVycy50ZXhpICAgICAgIHwgIDQgKysrCiBndWl4L3NjcmlwdHMvc3Vic3RpdHV0ZS5zY20gfCA0 MyArKysrKysrKysrKysrKysrKysrLS0tLQogdGVzdHMvc3Vic3RpdHV0ZS5zY20gICAgICAgIHwg NzAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQogMyBmaWxlcyBjaGFuZ2Vk LCAxMDIgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3N1 YnN0aXR1dGVycy50ZXhpIGIvZG9jL3N1YnN0aXR1dGVycy50ZXhpCmluZGV4IDUxNmUyYzFlZWEu LjY1YjFhOTI5YjAgMTAwNjQ0Ci0tLSBhL2RvYy9zdWJzdGl0dXRlcnMudGV4aQorKysgYi9kb2Mv c3Vic3RpdHV0ZXJzLnRleGkKQEAgLTQ3LDQgKzQ3LDggQEAgYXJlIGNvcnJlY3RseSBzaWduZWQg YW5kIGhhdmUgYSBjb3JyZWN0IGhhc2g7IHRoaXMgaXMgaGFuZGxlZAogYnkgQGNvZGV7KGd1aXgg c2NyaXB0cyBzdWJzdGl0dXRlKX0uICBAdmFye25hci1kb3dubG9hZGVyfSBhbmQKIEB2YXJ7ZmV0 Y2gtbmFyaW5mb3N9IGNhbiBiZSBAY29kZXsjZn0gaWYgdW5pbXBsZW1lbnRlZCBieSB0aGlzCiBz dWJzdGl0dXRlci4KKworTGlrZXdpc2UsIHdoZW4gcmV0dXJuaW5nIEBjb2Rle3VucGFja2VkfSwg QHZhcntuYXItZG93bmxvYWRlcn0KK2RvZXMgbm90IG5lZWQgdG8gbm9ybWFsaXplIHRpbWVzdGFt cHMgYW5kIGZpbGUgcGVybWlzc2lvbnMuCisKIEBlbmQgZGVmZm4KZGlmZiAtLWdpdCBhL2d1aXgv c2NyaXB0cy9zdWJzdGl0dXRlLnNjbSBiL2d1aXgvc2NyaXB0cy9zdWJzdGl0dXRlLnNjbQppbmRl eCA3ODM0NWRjZThmLi45MGZkN2RkMDIxIDEwMDc1NQotLS0gYS9ndWl4L3NjcmlwdHMvc3Vic3Rp dHV0ZS5zY20KKysrIGIvZ3VpeC9zY3JpcHRzL3N1YnN0aXR1dGUuc2NtCkBAIC0zMSw4ICszMSwx MCBAQAogICAjOnVzZS1tb2R1bGUgKGd1aXggcmVjb3JkcykKICAgIzp1c2UtbW9kdWxlIChndWl4 IGRpYWdub3N0aWNzKQogICAjOnVzZS1tb2R1bGUgKGd1aXggaTE4bikKLSAgIzp1c2UtbW9kdWxl ICgoZ3VpeCBzZXJpYWxpemF0aW9uKSAjOnNlbGVjdCAocmVzdG9yZS1maWxlIGR1bXAtZmlsZSkp CisgICM6dXNlLW1vZHVsZSAoKGd1aXggc2VyaWFsaXphdGlvbikKKyAgICAgICAgICAgICAgICAj OnNlbGVjdCAocmVzdG9yZS1maWxlIHdyaXRlLWZpbGUgZHVtcC1maWxlKSkKICAgIzphdXRvbG9h ZCAgIChndWl4IHN0b3JlIGRlZHVwbGljYXRpb24pIChkdW1wLWZpbGUvZGVkdXBsaWNhdGUpCisg ICM6YXV0b2xvYWQgICAoZ3VpeCBzdG9yZSBkYXRhYmFzZSkgKHJlc2V0LXRpbWVzdGFtcHMpCiAg ICM6YXV0b2xvYWQgICAoZ3VpeCBzY3JpcHRzIGRpc2NvdmVyKSAocmVhZC1zdWJzdGl0dXRlLXVy bHMpCiAgICM6YXV0b2xvYWQgICAoZ3VpeCBzY3JpcHRzIHN1YnN0aXR1dGUgaHR0cCkgKG9wZW4t Y29ubmVjdGlvbi1mb3ItdXJpL2NhY2hlZCkKICAgIzp1c2UtbW9kdWxlIChnY3J5cHQgaGFzaCkK QEAgLTQ5LDYgKzUxLDcgQEAKICAgIzp1c2UtbW9kdWxlICgoZ3VpeCBidWlsZCBzeXNjYWxscykK ICAgICAgICAgICAgICAgICAjOnNlbGVjdCAoc2V0LXRocmVhZC1uYW1lKSkKICAgIzp1c2UtbW9k dWxlIChpY2UtOSByZGVsaW0pCisgICM6dXNlLW1vZHVsZSAoaWNlLTkgcmVjZWl2ZSkKICAgIzp1 c2UtbW9kdWxlIChpY2UtOSByZWdleCkKICAgIzp1c2UtbW9kdWxlIChpY2UtOSBtYXRjaCkKICAg Izp1c2UtbW9kdWxlIChpY2UtOSBmb3JtYXQpCkBAIC01MzEsMTEgKzUzNCwyMCBAQCB0byB0aGUg bmFyaW5mby4iCiAgICAgICAgICAgICAgIChieXRldmVjdG9yLT5uaXgtYmFzZTMyLXN0cmluZyBl eHBlY3RlZCkKICAgICAgICAgICAgICAgKGJ5dGV2ZWN0b3ItPm5peC1iYXNlMzItc3RyaW5nIGFj dHVhbCkpKSkKIAotKGRlZmluZSAodmVyaWZ5LWhhc2gvdW5rbm93biAuIHJlc3QpCi0gIDs7IFZh cmlhbnQgb2YgdmVyaWZ5LWhhc2ggd2hlcmUgdGhlIGhhc2ggaGFzbid0IHlldCBiZWVuIGNvbXB1 dGVkLgotICA7OyBUT0RPOiB0aGlzIHdpbGwgYmUgaW1wbGVtZW50ZWQgbGF0ZXIgaW4gdGhlIHBh dGNoIHNlcmllcyEKLSAgOzsgKFRvIGJlIHVzZWQgYnkgdGhlIElQRlMgYW5kIEdOVW5ldCBzdWJz dGl0dXRlcikKLSAgKGxlYXZlIChHXyAiVE9ETyB2ZXJpZnktaGFzaC91bmtub3duIGlzIHVuaW1w bGVtZW50ZWR+JSIpKSkKKyhkZWZpbmUqICh2ZXJpZnktaGFzaC91bmtub3duIGZpbGUgZXhwZWN0 ZWQgYWxnb3JpdGhtIG5hcmluZm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICM6a2V5 IHRodW5rKQorICAiQ2hlY2sgd2hldGhlciB3ZSBnb3QgdGhlIGRhdGEgYW5ub3VuY2VkIGluIHRo ZSBuYXJpbmZvIE5BUklORk8uCitGSUxFIGlzIHRoZSBhY3R1YWwgZmlsZSB3ZSBnb3QgYW5kIEVY UEVDVEVEIGlzIHRoZSBoYXNoIGFjY29yZGluZwordG8gdGhlIG5hcmluZm8uICBDYWxsIFRIVU5L IGFmdGVyIEZJTEUgd2FzIHJlYWQsIGJ1dCBiZWZvcmUKK3RoZSBkYWVtb24gaXMgaW5mb3JtZWQu IgorICA7OyBSZWNyZWF0ZSB0aGUgbmFyLCBoYXNoIGl0LCBhbmQgbGV0IHZlcmlmeS1oYXNoCisg IDs7IHByb2R1Y2UgdGhlICdzdWNjZXNzJyBvciAnaGFzaC1taXNtYXRjaCcgb3V0cHV0LgorICAo cmVjZWl2ZSAoaGFzaGVkIGdldC1oYXNoKQorICAgICAgKG9wZW4taGFzaC1wb3J0IGFsZ29yaXRo bSkKKyAgICAod3JpdGUtZmlsZSBmaWxlIGhhc2hlZCkKKyAgICAoY2xvc2UgaGFzaGVkKQorICAg ICh0aHVuaykKKyAgICAodmVyaWZ5LWhhc2ggKGdldC1oYXNoKSBleHBlY3RlZCBhbGdvcml0aG0g bmFyaW5mbykpKQogCiAoZGVmaW5lLXN5bnRheC1ydWxlIChyZWNlaXZlKiBrd2FyZ3MgZXhwIGV4 cCogZXhwKiogLi4uKQogICAoY2FsbC13aXRoLXZhbHVlcyAobGFtYmRhICgpIGV4cCkKQEAgLTYw Niw3ICs2MTgsMjQgQEAgdGhlIGN1cnJlbnQgb3V0cHV0IHBvcnQuIgogICAgICAgICAgICAgICh3 aGVuIGFmdGVyLWlucHV0LWNsb3NlCiAgICAgICAgICAgICAgICAoYWZ0ZXItaW5wdXQtY2xvc2Up KQogICAgICAgICAgICAgIDs7IENoZWNrIHdoZXRoZXIgd2UgZ290IHRoZSBkYXRhIGFubm91bmNl ZCBpbiB0aGUgTkFSSU5GTy4KLSAgICAgICAgICAgICAodmVyaWZ5LWhhc2gvdW5rbm93biBkZXN0 aW5hdGlvbiBuYXJpbmZvKSkKKyAgICAgICAgICAgICAocmVjZWl2ZSAoYWxnb3JpdGhtIGV4cGVj dGVkKQorICAgICAgICAgICAgICAgICAobmFyaW5mby1oYXNoLWFsZ29yaXRobSt2YWx1ZSBuYXJp bmZvKQorICAgICAgICAgICAgICAgKHZlcmlmeS1oYXNoL3Vua25vd24KKyAgICAgICAgICAgICAg ICBkZXN0aW5hdGlvbiBleHBlY3RlZCBhbGdvcml0aG0gbmFyaW5mbworICAgICAgICAgICAgICAg IDs7IE1ha2Ugc3VyZSB0aGUgcGVybWlzc2lvbnMgYW5kIHRpbWVzdGFtcHMgYXJlIGNhbm9uaWNh bC4KKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIDs7IFRoaXMgY291bGQgdGhl b3JldGljYWxseSBiZSBkb25lIHNvbWV3aGF0IG1vcmUKKyAgICAgICAgICAgICAgICA7OyBjYWNo ZS1mcmllbmRseSBpZiBkb25lIGluIHRoZSBzdWJzdGl0dXRpb24gbWV0aG9kLAorICAgICAgICAg ICAgICAgIDs7IGJ5IGNhbm9uaWNhbGlzaW5nIGEgZmlsZSByaWdodCBhZnRlciBpdCBoYXMgYmVl bgorICAgICAgICAgICAgICAgIDs7IGRvd25sb2FkZWQsIGJ1dCBsZXQncyB0cnkgZm9yIGNvcnJl Y3RuZXNzIGZpcnN0CisgICAgICAgICAgICAgICAgOzsgYmVmb3JlIGVmZmljaWVuY3kuCisgICAg ICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICA7OyBBbHNvLCB0aGlzIG11c3QgYmUgZG9u ZSAqYWZ0ZXIqIHZlcmlmeWluZyB0aGUgaGFzaCwKKyAgICAgICAgICAgICAgICA7OyBpbiBvcmRl ciB0byBtYWtlIHRoZSBhY2Nlc3MgdGltZSBpcyBzZXQgY29ycmVjdGx5LgorICAgICAgICAgICAg ICAgIDs7CisgICAgICAgICAgICAgICAgOzsgVE9ETyBpdCB3b3VsZCBiZSBuaWNlIHRvIGRlZHVw bGljYXRlIERFU1RJTkFUSU9OLgorICAgICAgICAgICAgICAgICM6dGh1bmsKKyAgICAgICAgICAg ICAgICAobGFtYmRhICgpIChyZXNldC10aW1lc3RhbXBzIGRlc3RpbmF0aW9uKSkpKSkKICAgICAg ICAgICAgIChlbHNlCiAgICAgICAgICAgICAgKGZvcm1hdCAoY3VycmVudC1lcnJvci1wb3J0KSAi fnN+JSIgaW5wdXQpCiAgICAgICAgICAgICAgKGxlYXZlCmRpZmYgLS1naXQgYS90ZXN0cy9zdWJz dGl0dXRlLnNjbSBiL3Rlc3RzL3N1YnN0aXR1dGUuc2NtCmluZGV4IDZjNzU0Zjc3NGQuLjFjYjFh MTA0MDIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N1YnN0aXR1dGUuc2NtCisrKyBiL3Rlc3RzL3N1YnN0 aXR1dGUuc2NtCkBAIC0zMjQsNiArMzI0LDE2IEBAIFN5c3RlbTogbWlwczY0ZWwtbGludXhcbiIp CiAgICAgICAobGFtYmRhICgpCiAgICAgICAgIChndWl4LXN1YnN0aXR1dGUgIi0tc3Vic3RpdHV0 ZSIpKSkpKQogCisoZGVmaW5lICh3cml0ZS1zdHJpbmctYXMtbmFyIHBvcnQgY29udGVudCkKKyAg KHdyaXRlLWZpbGUtdHJlZSAiZm9vIiBwb3J0CisgICAgICAgICAgICAgICAgICAgIzpmaWxlLXR5 cGUrc2l6ZQorICAgICAgICAgICAgICAgICAgIChsYW1iZGEgXworICAgICAgICAgICAgICAgICAg ICAgKHZhbHVlcyAncmVndWxhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5n LWxlbmd0aCBjb250ZW50KSkpCisgICAgICAgICAgICAgICAgICAgIzpmaWxlLXBvcnQKKyAgICAg ICAgICAgICAgICAgICAobGFtYmRhIF8KKyAgICAgICAgICAgICAgICAgICAgIChvcGVuLWlucHV0 LXN0cmluZyBjb250ZW50KSkpKQorCiAodGVzdC1lcXVhbCAic3Vic3RpdHV0ZSwgaW52YWxpZCBo YXNoIgogICAoc3RyaW5nLWFwcGVuZCAiaGFzaC1taXNtYXRjaCBzaGEyNTYgIgogICAgICAgICAg ICAgICAgICAoYnl0ZXZlY3Rvci0+bml4LWJhc2UzMi1zdHJpbmcgKHNoYTI1NiAjdnU4KCkpKSAi ICIKQEAgLTMzMSwxNCArMzQxLDcgQEAgU3lzdGVtOiBtaXBzNjRlbC1saW51eFxuIikKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAob3Blbi1oYXNoLXBvcnQgKGhhc2gtYWxnb3JpdGht IHNoYTI1NikpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjb250ZW50KQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdWJzdGl0dXRhYmxlIGRhdGEuIikpCi0gICAg ICAgICAgICAgICAgICAgKHdyaXRlLWZpbGUtdHJlZSAiZm9vIiBwb3J0Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAjOmZpbGUtdHlwZStzaXplCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAobGFtYmRhIF8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHZhbHVlcyAncmVndWxhcgotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChzdHJpbmctbGVuZ3RoIGNvbnRlbnQpKSkKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICM6ZmlsZS1wb3J0Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAobGFtYmRhIF8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKG9wZW4taW5wdXQtc3RyaW5nIGNvbnRlbnQpKSkKKyAgICAgICAgICAgICAgICAg ICAod3JpdGUtc3RyaW5nLWFzLW5hciBwb3J0IGNvbnRlbnQpCiAgICAgICAgICAgICAgICAgICAg KGNsb3NlLXBvcnQgcG9ydCkKICAgICAgICAgICAgICAgICAgICAoYnl0ZXZlY3Rvci0+bml4LWJh c2UzMi1zdHJpbmcgKGdldC1oYXNoKSkpCiAgICAgICAgICAgICAgICAgICJcbiIpCkBAIC0zNjcs NiArMzcwLDU3IEBAIFN5c3RlbTogbWlwczY0ZWwtbGludXhcbiIpKSkKICAgICAgICAgICAgICAg IChsYW1iZGEgKCkKICAgICAgICAgICAgICAgICAgKGd1aXgtc3Vic3RpdHV0ZSAiLS1zdWJzdGl0 dXRlIikpKSkpKSkpKSkKIAorKHRlc3QtZXF1YWwgInN1YnN0aXR1dGUgKHVucGFja2VkKSwgaW52 YWxpZCBoYXNoIgorICAoc3RyaW5nLWFwcGVuZCAiaGFzaC1taXNtYXRjaCBzaGEyNTYgIgorICAg ICAgICAgICAgICAgICAoYnl0ZXZlY3Rvci0+bml4LWJhc2UzMi1zdHJpbmcgKHNoYTI1NiAjdnU4 KCkpKSAiICIKKyAgICAgICAgICAgICAgICAgKGxldC12YWx1ZXMgKCgocG9ydCBnZXQtaGFzaCkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3Blbi1oYXNoLXBvcnQgKGhhc2gtYWxn b3JpdGhtIHNoYTI1NikpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjb250ZW50 KSAiV3JvbmcgZGF0YSEiKSkKKyAgICAgICAgICAgICAgICAgICAod3JpdGUtc3RyaW5nLWFzLW5h ciBwb3J0IGNvbnRlbnQpCisgICAgICAgICAgICAgICAgICAgKGNsb3NlLXBvcnQgcG9ydCkKKyAg ICAgICAgICAgICAgICAgICAoYnl0ZXZlY3Rvci0+bml4LWJhc2UzMi1zdHJpbmcgKGdldC1oYXNo KSkpCisgICAgICAgICAgICAgICAgICJcbiIpCisgICh3aXRoLW91dHB1dC10by1zdHJpbmcKKyAg ICAobGFtYmRhICgpCisgICAgICA7OyBBcnJhbmdlIHNvIHRoZSBhY3R1YWwgZGF0YSBoYXNoIGRv ZXMgbm90IG1hdGNoIHRoZSAnTmFySGFzaCcgZmllbGQgaW4gdGhlCisgICAgICA7OyBuYXJpbmZv LiAgVXNlIGEgc3Vic3RpdHV0ZXIgdGhhdCBkb2VzIG5vdCBwcm9kdWNlIGEgbmFyLCBidXQgcmF0 aGVyCisgICAgICA7OyB3cml0ZXMgdGhlIGl0ZW0gdG8gdGhlIHN0b3JlIGJ5IGl0c2VsZi4KKyAg ICAgIChkZWZpbmUgbmFyaW5mbworICAgICAgICA7OyBQcmV0ZW5kIHRoaXMgaGFzaCBhbmQgc2l6 ZSBhY3R1YWxseSBjb3JyZXNwb25kIHRvCisgICAgICAgIDs7IHNvbWUgbmFyLgorICAgICAgICAo c3RyaW5nLWFwcGVuZCAiU3RvcmVQYXRoOiAiICglc3RvcmUtcHJlZml4KQorICAgICAgICAgICAg ICAgICAgICAgICAiL2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhLXdyb25nLWhhc2gK K1VSTDogaXJyZWxldmFudAorQ29tcHJlc3Npb246IG5vbmUKK05hckhhc2g6IHNoYTI1NjoiIChi eXRldmVjdG9yLT5uaXgtYmFzZTMyLXN0cmluZyAoc2hhMjU2ICN2dTgoKSkpICIKK05hclNpemU6 IDEyMworUmVmZXJlbmNlczoKK0Rlcml2ZXI6ICIgKCVzdG9yZS1wcmVmaXgpICIvZm9vLmRydgor U3lzdGVtOiBtaXBzNjRlbC1saW51eFxuIikpCisgICAgICAocGFyYW1ldGVyaXplICgoc3Vic3Rp dHV0ZXJzCisgICAgICAgICAgICAgICAgICAgICAgKGxpc3QKKyAgICAgICAgICAgICAgICAgICAg ICAgKG1ha2Utc3Vic3RpdHV0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0CisgICAg ICAgICAgICAgICAgICAgICAgICAobGFtYmRhIChkZXN0aW5hdGlvbiAuIHJlc3QpCisgICAgICAg ICAgICAgICAgICAgICAgICAgIChjYWxsLXdpdGgtb3V0cHV0LWZpbGUgZGVzdGluYXRpb24KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoY3V0IGRpc3BsYXkgIldyb25nIGRhdGEhIiA8Pikp CisgICAgICAgICAgICAgICAgICAgICAgICAgICd1bnBhY2tlZCkKKyAgICAgICAgICAgICAgICAg ICAgICAgIChjb25zdAorICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0CisgICAgICAgICAg ICAgICAgICAgICAgICAgIChzdHJpbmctPm5hcmluZm8KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIChzdHJpbmctYXBwZW5kIG5hcmluZm8gIlNpZ25hdHVyZTogIgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpZ25hdHVyZS1maWVsZCBuYXJpbmZvKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIikKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICJ0ZXN0Oi8vIikpKQorICAgICAgICAgICAgICAgICAgICAgICAgJyh0 ZXN0KSkpKQorICAgICAgICAgICAgICAgICAgICAgKHN1YnN0aXR1dGUtdXJscyAnKCJ0ZXN0Oi8v IikpKQorICAgICAgICAoY2FsbC13aXRoLXRlbXBvcmFyeS1kaXJlY3RvcnkKKyAgICAgICAgIChs YW1iZGEgKGRpcmVjdG9yeSkKKyAgICAgICAgICAgKHJlcXVlc3Qtc3Vic3RpdHV0aW9uCisgICAg ICAgICAgICAoc3RyaW5nLWFwcGVuZCAoJXN0b3JlLXByZWZpeCkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICIvYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEtZm9vIikKKyAgICAg ICAgICAgIChzdHJpbmctYXBwZW5kIGRpcmVjdG9yeSAiL3dyb25nLWhhc2giKSkpKSkpKSkKKwog KHRlc3QtcXVpdCAic3Vic3RpdHV0ZSwgdW5hdXRob3JpemVkIGtleSIKICAgICAibm8gdmFsaWQg c3Vic3RpdHV0ZSIKICAgKHdpdGgtbmFyaW5mbyAoc3RyaW5nLWFwcGVuZCAlbmFyaW5mbyAiU2ln bmF0dXJlOiAiCi0tIAoyLjMwLjAKCg== --=-wY5YO5kcxIR3yh1ShwI4-- --=-F6UujglD09vm5rhp81Br Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- iI0EABYIADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYDky4BccbWF4aW1lZGV2 b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7g6wAQCNF3Ghq8OzJ8cZEwYsXAkCl6pC jHL5zHBsvbyMFvmprwEA3N/M6vVhe9E9O5Y8XqBPIdWO4AuoImfH2uq9tvlcNA0= =EgwA -----END PGP SIGNATURE----- --=-F6UujglD09vm5rhp81Br-- From unknown Fri Jun 13 10:39:38 2025 X-Loop: help-debbugs@gnu.org Subject: [bug#46800] [PATCH] Allow defining multiple substituters Resent-From: Ludovic =?UTF-8?Q?Court=C3=A8s?= Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Tue, 02 Mar 2021 20:38:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 46800 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: Maxime Devos Cc: 46800@debbugs.gnu.org Received: via spool by 46800-submit@debbugs.gnu.org id=B46800.161471746717847 (code B ref 46800); Tue, 02 Mar 2021 20:38:01 +0000 Received: (at 46800) by debbugs.gnu.org; 2 Mar 2021 20:37:47 +0000 Received: from localhost ([127.0.0.1]:54337 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lHBm7-0004dn-4R for submit@debbugs.gnu.org; Tue, 02 Mar 2021 15:37:47 -0500 Received: from eggs.gnu.org ([209.51.188.92]:53682) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lHBm5-0004da-03 for 46800@debbugs.gnu.org; Tue, 02 Mar 2021 15:37:46 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]:48047) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lHBly-0005uH-LJ; Tue, 02 Mar 2021 15:37:38 -0500 Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=59970 helo=ribbon) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1lHBly-0000ZD-8E; Tue, 02 Mar 2021 15:37:38 -0500 From: Ludovic =?UTF-8?Q?Court=C3=A8s?= References: Date: Tue, 02 Mar 2021 21:37:36 +0100 In-Reply-To: (Maxime Devos's message of "Fri, 26 Feb 2021 18:41:51 +0100") Message-ID: <87o8g1thpr.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) Hi Maxime, Maxime Devos skribis: > This patch series is my suggestion for allowing > multiple "substitution methods" or "substituters" > as I call them. Currently, only a method for HTTP/S > is defined, though I hope it will be a good basis > for a common framework for substitutes over GNUnet > and IPFS. Thanks for working on this! As discussed on IRC, the daemon used to have support for multiple substituters, but as a built-in C++ interface, which I removed in f6919ebdc6b0ce0286814cc6ab0564b1a4c67f5f. The Scheme interface you propose is of course nicer :-), but I=E2=80=99m st= ill not sure it=E2=80=99s necessary. For example, in the IPFS prototype at , IPFS support goes hand in hand with HTTP support: narinfos are retrieved over HTTP and nars can be retrieved over IPFS, or HTTP. Likewise with =E2=80=9Cdigests=E2=80=9D: . Another issue is that it may be that, instead of letting users choose one method and stick to it, we=E2=80=99d rather let them choose a policy th= at can automatically pick the =E2=80=9Cbest=E2=80=9D method, dynamically adjus= ting choices. All in all, I would prefer to wait until there=E2=80=99s a clear need for t= his abstraction. WDYT? Thanks, Ludo=E2=80=99. From unknown Fri Jun 13 10:39:38 2025 X-Loop: help-debbugs@gnu.org Subject: [bug#46800] [PATCH] Allow defining multiple substituters Resent-From: Maxime Devos Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Thu, 04 Mar 2021 07:49:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 46800 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: Ludovic =?UTF-8?Q?Court=C3=A8s?= Cc: 46800@debbugs.gnu.org Received: via spool by 46800-submit@debbugs.gnu.org id=B46800.16148441388095 (code B ref 46800); Thu, 04 Mar 2021 07:49:02 +0000 Received: (at 46800) by debbugs.gnu.org; 4 Mar 2021 07:48:58 +0000 Received: from localhost ([127.0.0.1]:57578 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lHijB-00026U-Tz for submit@debbugs.gnu.org; Thu, 04 Mar 2021 02:48:58 -0500 Received: from laurent.telenet-ops.be ([195.130.137.89]:55710) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lHij9-00026K-8m for 46800@debbugs.gnu.org; Thu, 04 Mar 2021 02:48:56 -0500 Received: from ptr-bvsjgyjmffd7q9timvx.18120a2.ip6.access.telenet.be ([IPv6:2a02:1811:8c09:9d00:aaf1:9810:a0b8:a55d]) by laurent.telenet-ops.be with bizsmtp id c7os2400u0mfAB4017othY; Thu, 04 Mar 2021 08:48:53 +0100 Message-ID: <865935bc92c080a9ab79044856b01654fcc4410b.camel@telenet.be> From: Maxime Devos Date: Thu, 04 Mar 2021 08:48:44 +0100 In-Reply-To: <87o8g1thpr.fsf@gnu.org> References: <87o8g1thpr.fsf@gnu.org> Content-Type: multipart/signed; micalg="pgp-sha256"; protocol="application/pgp-signature"; boundary="=-1Z9/wUDbSokEVoujQAn2" User-Agent: Evolution 3.34.2 MIME-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r21; t=1614844133; bh=BxYsOB5lmTBpI8n7MzigAuINkxbesZ6X4hiV4MfhxHo=; h=Subject:From:To:Cc:Date:In-Reply-To:References; b=jdGAWl8nEkGneqBpBeTsdTvRQVF7rldkESFhrvH3NuPrGK/wUx6d7MhtlmWuJ2IW6 8cqGDRVPsghTiJdD6Ja5YyqWbiBKyKEHe9GjFw3smaYzJ6DkRmvLFyu4ilXW3Jz+Um fsii2t7qkAYMRr49Tc4hsSqPpduWaWZQ56t/puXRo22UPar0szXK2zGc1LymYRzjOA 7C/tkhmD957W2pxKmukd1yEtBncsQhyNvLH4WrHEC6yUi5CIGVd903iBVDtvK40IxO DiV0rgN0Z2at1eRRUEPAGqsq3NmY9cnVUskYx5417hiu5fUJjCTO0wLEueCknhqL9c C0DOnIvSJtaLg== X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) --=-1Z9/wUDbSokEVoujQAn2 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, 2021-03-02 at 21:37 +0100, Ludovic Court=C3=A8s wrote: > Hi Maxime, >=20 > Maxime Devos skribis: >=20 > > This patch series is my suggestion for allowing > > multiple "substitution methods" or "substituters" > > as I call them. Currently, only a method for HTTP/S > > is defined, though I hope it will be a good basis > > for a common framework for substitutes over GNUnet > > and IPFS. >=20 > Thanks for working on this! >=20 > As discussed on IRC, the daemon used to have support for multiple > substituters, but as a built-in C++ interface, which I removed in > f6919ebdc6b0ce0286814cc6ab0564b1a4c67f5f. Was there any particular reason this support was removed, beyond moving from C++ to Scheme and the absence of any alternative substituters? > The Scheme interface you propose is of course nicer :-), but I=E2=80=99m = still > not sure it=E2=80=99s necessary. For example, in the IPFS prototype at > ;, IPFS support goes hand in hand with > HTTP support: narinfos are retrieved over HTTP and nars can be retrieved > over IPFS, or HTTP. About X going hand-in-hand with Y: Note that fetching narinfos, or fetching the nar itself are separated A method can support both procedures, or just one of them (or none, but that's rather useless.) Users (well, the system administrator) can choose multiple methods, which will be each fetch narinfos after each other & combine the results into one large list (or maybe some other data structure, I don't recall the details), and each substituter will be asked to produce a nar until a substituter succeeds or all have said "sorry, I don't have that nar". (That's different from C++ interface for multiple substituters I think, whe= re the methods are only tried sequentialy, they aren't combined.) In case of IPFS, the idea is that *both* the IPFS and HTTP substituter are enabled, in that order: "--substitute-methods=3Dipfs http". The IPFS subst= ituter won't be able to produce any narinfos by itself, but that's no problem as the HTTP substituter can find some. Then, the IPFS substituter will be ask= ed first to download a substitute, as it's first in the "--substitute-methods"= list. And what if the narinfo doesn't have a IPFS URI, as the substitute server d= oesn't support that? Then "guix substitute" automatically fall-backs to HTTP. Summary: some substitution methods can't do everything on their own, but th= at's ok, as "guix substitute" will just ask them to try what they can and will see i= f some combination of methods works. About =E2=80=98not sure it's necessary=E2=80=99: there presumably will be a= GNUnet substituter at some point. I suppose it would be possible to define all substitute met= hods in (guix scripts substitute), but then you would still end up with a proced= ure that tries all methods (e.g. in wip-ipfs-substitutes, process-substitution = has an "if" structures that tries downloading via IPFS with fall-back to HTTP; = this would become a (cond (ipfs? ipfs-code) (gnunet? gnunet-code) (#t http-code?= )) Note that there's (guix scripts import X) and (guix build-system X). > Likewise with =E2=80=9Cdigests=E2=80=9D: ;. I haven't taken a close look at this yet before (I haven't been around guix development for long). To me, this seems compatible with this patch actual= ly. The HTTP substituter's procedure for downloading the substitute itself (process-substitution/http in my patch) could be split in two, and look at the narinfo to see whether the 'digest' or the usual mechanism should be= used. Alternatively, one could define *two* substituters: the =E2=80=98standard= =E2=80=99 http substituter =E2=80=98http=E2=80=99, and the =E2=80=98http-digest=E2=80=99 substituter t= hat can't fetch narinfo's, but rather is an alternative method for downloading the substitute. The daemon can be= started with "--substitute-methods http-digest http" to prefer downloading via the = =E2=80=98http-digest=E2=80=99 method when possible, but uses =E2=80=98http=E2=80=99 for the narinfos and = as a fallback for when the narinfo does not have a digest. But what if a non-HTTP substituter wants to use digests? Well, I don't kno= w any such substituters (-:. But for the (hypothetical) GNUnet substituter & the wip = IPFS substituter, I don't think they will use the digests code. > Another issue is that it may be that, instead of letting users choose > one method and stick to it, They (at least the system administrator) can choose a list of substituters, see above. > we=E2=80=99d rather let them choose a policy that > can automatically pick the =E2=80=9Cbest=E2=80=9D method, dynamically adj= usting choices. Who's the user here? (a) the system administrator, who configuring the daemon to use a certain list of substituters and defines a default list of substitute uris. (b) the =E2=80=98user=E2=80=99, that doesn't directly have the capability t= o modify the system's guix daemon (or possibly an administrator that wants to to test some things out without the possibility of accidentally messing up the =E2=80=98real=E2=80=99 system). If (b), I think it would be ideal to give the (unprivileged) user the possibility of using their own substituter(s) (under their own capabilities= , not root), albeit at the cost of the guix daemon having to verify the narha= sh & narinfo signature. That could be implemented as a separate patch (though this patch would need to be rebased then). WDYT? Would be useful for developing new substituter= s and testing them, I think. About *automatically* dynamically adjusting choices: would be nice, but how= is this supposed to work? Any ideas? The only thing I could think of is a allowing the user to choose which narinfo to use (e.g. from the list of fou= nd narinfos try to choose a narinfo that has an IPFS URI). Also, for (a) the shepherd service could use a "set-substitute-methods" opt= ion, and perhaps the user (b) could be allowed to select a subset of these subst= itute methods to use when running "guix build PACKAGE" and the like (but only a s= ubset, as "guix substitute" when invoked by the daemon runs as root and therefore = the potential attack surface shouldn't be increased beyond what the administrat= or allows). > All in all, I would prefer to wait until there=E2=80=99s a clear need for= this > abstraction. See above responses. WDYT? Thanks, Maxime. --=-1Z9/wUDbSokEVoujQAn2 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- iI0EABYIADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYECQ3RccbWF4aW1lZGV2 b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7ltBAP9iYlOav2/YVN2Zt3CBeW0DASO2 PGooVzqFmZwePUzMqAD+PEzziVN7j7ToALv6bJWH74o61yFFk2WziDK1P/wx3w4= =poFh -----END PGP SIGNATURE----- --=-1Z9/wUDbSokEVoujQAn2-- From unknown Fri Jun 13 10:39:38 2025 X-Loop: help-debbugs@gnu.org Subject: [bug#46800] [PATCH] Allow defining multiple substituters Resent-From: Maxime Devos Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Fri, 05 Mar 2021 20:07:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 46800 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: Ludovic =?UTF-8?Q?Court=C3=A8s?= Cc: 46800@debbugs.gnu.org Received: via spool by 46800-submit@debbugs.gnu.org id=B46800.161497478711619 (code B ref 46800); Fri, 05 Mar 2021 20:07:02 +0000 Received: (at 46800) by debbugs.gnu.org; 5 Mar 2021 20:06:27 +0000 Received: from localhost ([127.0.0.1]:35515 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lIGiR-00031K-J9 for submit@debbugs.gnu.org; Fri, 05 Mar 2021 15:06:27 -0500 Received: from albert.telenet-ops.be ([195.130.137.90]:60356) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lIGiP-000319-0T for 46800@debbugs.gnu.org; Fri, 05 Mar 2021 15:06:26 -0500 Received: from ptr-bvsjgyjmffd7q9timvx.18120a2.ip6.access.telenet.be ([IPv6:2a02:1811:8c09:9d00:aaf1:9810:a0b8:a55d]) by albert.telenet-ops.be with bizsmtp id ck6P240050mfAB406k6PDc; Fri, 05 Mar 2021 21:06:23 +0100 Message-ID: <9585e4728cfa5cae4e4a16f3434220ac4dd0bd7d.camel@telenet.be> From: Maxime Devos Date: Fri, 05 Mar 2021 21:05:53 +0100 In-Reply-To: <87o8g1thpr.fsf@gnu.org> References: <87o8g1thpr.fsf@gnu.org> Content-Type: multipart/signed; micalg="pgp-sha256"; protocol="application/pgp-signature"; boundary="=-OjuK/KQDbJ/zHqRWpvF0" User-Agent: Evolution 3.34.2 MIME-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r21; t=1614974783; bh=C1m6H9zwVUB0VICDlLJnM8CRF9ia734r2oVQCS7Yrbg=; h=Subject:From:To:Cc:Date:In-Reply-To:References; b=XsVtQJ4KNZC40zpDPtoNc5K+ifitvz0U87slti1G/DbkPe6dsfDwgZyZoiYPFlb5W 2KuibiDd4+4fpYnOrgK7gCDnscaWmcyXfp6P6ZUg40a5igGM1DYPj6jF7vSIb5fH5b CKzCcDg9VjJyBqd8IvQZ8qH2QSVOUFhDP1NyMfsBzoKqxQGWmqWWfjvLowc5FIU0n7 SWgjHhMwsfjN2HWT2r15y/Z6y1Aod4HTMi6gFUrsDUgPUcGEsCLojaohC8whEwbjtC ZdJ2EKxF2eKvbsZsLNmvnJrE7aBU0t9e6afVhpLhohumUGH21SvIos8qA5vmghGLAA piBKnw/TiyQYg== X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) --=-OjuK/KQDbJ/zHqRWpvF0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, 2021-03-02 at 21:37 +0100, Ludovic Court=C3=A8s wrote: > Hi Maxime, >=20 > Maxime Devos skribis: >=20 > > This patch series is my suggestion for allowing > > multiple "substitution methods" or "substituters" > > as I call them. Currently, only a method for HTTP/S > > is defined, though I hope it will be a good basis > > for a common framework for substitutes over GNUnet > > and IPFS. >=20 > [Ludovic's reply] (See previous mail for my responses) FYI: I've implemented a GNUnet substituter using this patch series and the "publish hooks" patch (+ an unsubmitted patch that passes some extra information to the publish hook) here: https://notabug.org/mdevos/guix-gnunet/src/download-hooks3 (Warning: it does some questionable things with add-to-load-path. Will hopefully be fixed eventually. Also requires in a special location.) Also, there's a bug in fetch-narinfos that causes an error if the "fetch-narinfos" field of a subtituter is #f. Also, recognised-uri-scheme should be removed or reworked, as otherwise the IPFS and GNUnet substituter won't be used for downloading a substitute if http and https are not in the list. I've worked around that for now by setting the latter '(http https file), and setting the former to (const '()). Greetings, Maxime. --=-OjuK/KQDbJ/zHqRWpvF0 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- iI0EABYIADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYEKPIRccbWF4aW1lZGV2 b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7ggNAP9kAKdmueFuktbJwweo4z6igHkb Kn07Uc1HuE7mT3IJnQEAtkL8N9OTD+IC6+PEyo7qIoUogyflcM43nW/fUD94oAI= =QISs -----END PGP SIGNATURE----- --=-OjuK/KQDbJ/zHqRWpvF0-- From unknown Fri Jun 13 10:39:38 2025 X-Loop: help-debbugs@gnu.org Subject: [bug#46800] [PATCH] Allow defining multiple substituters Resent-From: Ludovic =?UTF-8?Q?Court=C3=A8s?= Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Fri, 12 Mar 2021 17:39:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 46800 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: Maxime Devos Cc: 46800@debbugs.gnu.org Received: via spool by 46800-submit@debbugs.gnu.org id=B46800.16155706896254 (code B ref 46800); Fri, 12 Mar 2021 17:39:02 +0000 Received: (at 46800) by debbugs.gnu.org; 12 Mar 2021 17:38:09 +0000 Received: from localhost ([127.0.0.1]:58274 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lKljl-0001co-Cp for submit@debbugs.gnu.org; Fri, 12 Mar 2021 12:38:09 -0500 Received: from eggs.gnu.org ([209.51.188.92]:44036) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lKlji-0001cI-GL for 46800@debbugs.gnu.org; Fri, 12 Mar 2021 12:38:08 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]:58077) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lKljY-0006CC-LB; Fri, 12 Mar 2021 12:38:00 -0500 Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=33926 helo=ribbon) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1lKljW-0000gs-Ri; Fri, 12 Mar 2021 12:37:56 -0500 From: Ludovic =?UTF-8?Q?Court=C3=A8s?= References: <87o8g1thpr.fsf@gnu.org> <865935bc92c080a9ab79044856b01654fcc4410b.camel@telenet.be> Date: Fri, 12 Mar 2021 18:37:53 +0100 In-Reply-To: <865935bc92c080a9ab79044856b01654fcc4410b.camel@telenet.be> (Maxime Devos's message of "Thu, 04 Mar 2021 08:48:44 +0100") Message-ID: <878s6sqnm6.fsf_-_@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) Hi Maxime, Maxime Devos skribis: > On Tue, 2021-03-02 at 21:37 +0100, Ludovic Court=C3=A8s wrote: [...] >> As discussed on IRC, the daemon used to have support for multiple >> substituters, but as a built-in C++ interface, which I removed in >> f6919ebdc6b0ce0286814cc6ab0564b1a4c67f5f. > > Was there any particular reason this support was removed, beyond > moving from C++ to Scheme and the absence of any alternative substituters? These were the main reasons, yes. >> The Scheme interface you propose is of course nicer :-), but I=E2=80=99m= still >> not sure it=E2=80=99s necessary. For example, in the IPFS prototype at >> ;, IPFS support goes hand in hand with >> HTTP support: narinfos are retrieved over HTTP and nars can be retrieved >> over IPFS, or HTTP. > > About X going hand-in-hand with Y: > > Note that fetching narinfos, or fetching the nar itself are separated > A method can support both procedures, or just one of them (or none, > but that's rather useless.) > > Users (well, the system administrator) can choose multiple methods, which > will be each fetch narinfos after each other & combine the > results into > one large list (or maybe some other data structure, I don't recall the > details), and each substituter will be asked to produce > a nar until a substituter > succeeds or all have said "sorry, I don't have that nar". OK. > (That's different from C++ interface for multiple substituters I think, w= here > the methods are only tried sequentialy, they aren't combined.) > > In case of IPFS, the idea is that *both* the IPFS and HTTP substituter are > enabled, in that order: "--substitute-methods=3Dipfs http". The IPFS sub= stituter > won't be able to produce any narinfos by itself, but that's no problem as > the HTTP substituter can find some. Then, the IPFS substituter will be a= sked > first to download a substitute, as it's first in the "--substitute-method= s" list. > > And what if the narinfo doesn't have a IPFS URI, as the substitute server= doesn't > support that? Then "guix substitute" automatically fall-backs to HTTP. > > Summary: some substitution methods can't do everything on their own, but = that's ok, > as "guix substitute" will just ask them to try what they can and will see= if some > combination of methods works. Alright. > About =E2=80=98not sure it's necessary=E2=80=99: there presumably will be= a GNUnet substituter > at some point. I suppose it would be possible to define all substitute m= ethods > in (guix scripts substitute), but then you would still end up with a proc= edure > that tries all methods (e.g. in wip-ipfs-substitutes, process-substitutio= n has > an "if" structures that tries downloading via IPFS with fall-back to HTTP= ; this > would become a (cond (ipfs? ipfs-code) (gnunet? gnunet-code) (#t http-cod= e?)) I guess considerations that are more important to me (and to users, I suppose) now than a few years back are maintainability and robustness. Concretely, I wouldn=E2=80=99t want Guix to offer out of the box 4 methods,= 3 of which perform poorly or are downright buggy. I think it would be more fruitful if, as a project, we would focus on one or two methods or method combinations that we have battle-tested, perform well, and a nice long-term maintenance story, and so on. [...] >> we=E2=80=99d rather let them choose a policy that >> can automatically pick the =E2=80=9Cbest=E2=80=9D method, dynamically ad= justing choices. > > Who's the user here? > (a) the system administrator, who configuring the daemon to use a certain > list of substituters and defines a default list of substitute uris. > (b) the =E2=80=98user=E2=80=99, that doesn't directly have the capability= to modify > the system's guix daemon (or possibly an administrator that wants to > to test some things out without the possibility of accidentally messi= ng > up the =E2=80=98real=E2=80=99 system). I think (b) should be possible, just like users can pass =E2=80=98--substitute-urls=E2=80=99. [...] > About *automatically* dynamically adjusting choices: would be nice, but h= ow is > this supposed to work? Any ideas? The only thing I could think of is a > allowing the user to choose which narinfo to use (e.g. from the list of f= ound > narinfos try to choose a narinfo that has an IPFS URI). I think it=E2=80=99ll have to be fine-tuned once we have several stable substitute methods. After all, we have yet to figure out how to choose between zstd and lzip for the current substitution mechanism; the tradeoffs when very different methods are in use may be more complex! >> All in all, I would prefer to wait until there=E2=80=99s a clear need fo= r this >> abstraction. > > See above responses. I don=E2=80=99t think my concerns are really addressed :-), but at the same= time I think we need a playground for these things so we can actually grow new substitute methods like those you=E2=80=99ve been looking at. Hmmm tri= cky! Ludo=E2=80=99. From unknown Fri Jun 13 10:39:38 2025 X-Loop: help-debbugs@gnu.org Subject: [bug#46800] [PATCH] Allow defining multiple substituters References: In-Reply-To: Resent-From: Tony Olagbaiye Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Sun, 06 Jun 2021 17:53:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 46800 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: "46800@debbugs.gnu.org" <46800@debbugs.gnu.org> Reply-To: Tony Olagbaiye Received: via spool by 46800-submit@debbugs.gnu.org id=B46800.16230019725093 (code B ref 46800); Sun, 06 Jun 2021 17:53:01 +0000 Received: (at 46800) by debbugs.gnu.org; 6 Jun 2021 17:52:52 +0000 Received: from localhost ([127.0.0.1]:53825 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lpwxA-0001K5-9H for submit@debbugs.gnu.org; Sun, 06 Jun 2021 13:52:52 -0400 Received: from mail-40133.protonmail.ch ([185.70.40.133]:44142) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lpwx6-0001Jp-JR for 46800@debbugs.gnu.org; Sun, 06 Jun 2021 13:52:51 -0400 Date: Sun, 06 Jun 2021 17:52:40 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fron.io; s=protonmail; t=1623001961; bh=4tOtsT67Nu1UAYHr25wsDJdJVrRZwhoP4DKvcHQH8vI=; h=Date:To:From:Reply-To:Subject:From; b=jLlNi+ZyU9vpJ3nGCSWHJnHi73lS2CPXsiLC9cyaQl9gAK0j7gf6MlR3l04fqgIFW 6UHEQGokmCQE6lWN+vPrEQSkiPfK3RWkNRfLKwpTSkwnnwFHP9pRIkemOZ2MhBZnD6 EldayRl47wF9PJZjGeEUwZhLg8lPt739VxAhZeJE= From: Tony Olagbaiye Message-ID: MIME-Version: 1.0 Content-Type: multipart/signed; protocol="application/pgp-signature"; micalg=pgp-sha512; boundary="---------------------a360bd802352390be1a5dc6a8afd4441"; charset=utf-8 X-Spam-Status: No, score=-1.2 required=10.0 tests=ALL_TRUSTED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,HTML_MESSAGE shortcircuit=no autolearn=disabled version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on mailout.protonmail.ch X-Spam-Score: -0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This is an OpenPGP/MIME signed message (RFC 4880 and 3156) -----------------------a360bd802352390be1a5dc6a8afd4441 Content-Type: multipart/mixed;boundary=---------------------8ac0a8c330039817b1d382317c5837a3 -----------------------8ac0a8c330039817b1d382317c5837a3 Content-Type: multipart/alternative;boundary=---------------------cf0fea19bf2336dfc165f2d3d894f9c2 -----------------------cf0fea19bf2336dfc165f2d3d894f9c2 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain;charset=utf-8 Hi, any news on this patch? Thanks, ix -----------------------cf0fea19bf2336dfc165f2d3d894f9c2 Content-Type: multipart/related;boundary=---------------------c256713619ce8e76a817c5ebf90386d4 -----------------------c256713619ce8e76a817c5ebf90386d4 Content-Type: text/html;charset=utf-8 Content-Transfer-Encoding: base64 PGRpdj5IaSwgYW55IG5ld3Mgb24gdGhpcyBwYXRjaD88YnI+PC9kaXY+PGRpdj48YnI+PC9kaXY+ PGRpdj5UaGFua3MsPGJyPjwvZGl2PjxkaXY+aXg8L2Rpdj4= -----------------------c256713619ce8e76a817c5ebf90386d4-- -----------------------cf0fea19bf2336dfc165f2d3d894f9c2-- -----------------------8ac0a8c330039817b1d382317c5837a3 Content-Type: application/pgp-keys; filename="publickey - me@fron.io - 0x3026807C.asc"; name="publickey - me@fron.io - 0x3026807C.asc" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="publickey - me@fron.io - 0x3026807C.asc"; name="publickey - me@fron.io - 0x3026807C.asc" LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tDQpWZXJzaW9uOiBPcGVuUEdQLmpz IHY0LjEwLjEwDQpDb21tZW50OiBodHRwczovL29wZW5wZ3Bqcy5vcmcNCg0KeGpNRVhjOHRaaFlK S3dZQkJBSGFSdzhCQVFkQWpwSnVLOW1EMmEzd2hFR3Z3K2NkcjM4SjZBVDNjSkRvDQpNNjVHeDRi dGZtL05GMjFsUUdaeWIyNHVhVzhnUEcxbFFHWnliMjR1YVc4K3duY0VFQllLQUI4RkFsM1ANCkxX WUdDd2tIQ0FNQ0JCVUlDZ0lERmdJQkFoa0JBaHNEQWg0QkFBb0pFTGN0V010U2Eyd3hCdGdBLzI1 aA0KVU1ldlMydGZBRGM4RWlMWnVoTjFsMExsKzlJbnpaVmJOOCsrZkhwWkFQc0ZodXcyWDRSR1Vp ME9tQ3FtDQphajhDVGdiNXB6dEFJaWlMeElaZi8zRkdETTQ0QkYzUExXWVNDaXNHQVFRQmwxVUJC UUVCQjBCUUJyTnQNCjAzcGRuelIwaWdxMnFweTV2WW0xYjVlYk9wNGcxYThGZGJQM1F3TUJDQWZD WVFRWUZnZ0FDUVVDWGM4dA0KWmdJYkRBQUtDUkMzTFZqTFVtdHNNWEZHQVFDYnhiWmdmckZQQXN2 dEJVVk4rcVlDajArT0RhZGs1dlAvDQpTajg0VnZZN29BRC9SeXliTExmYnNEeEpHbStmditjMG5u S21QbHlXa1hQVzh6aDZCWDhvSlFrPQ0KPTNWZ2UNCi0tLS0tRU5EIFBHUCBQVUJMSUMgS0VZIEJM T0NLLS0tLS0NCg== -----------------------8ac0a8c330039817b1d382317c5837a3-- -----------------------a360bd802352390be1a5dc6a8afd4441 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: ProtonMail wnUEARYKAAYFAmC9C1cAIQkQty1Yy1JrbDEWIQQwJoB8nbc1OBqstda3LVjL UmtsMcwMAPsHI9uwLuNNO61M4P5GHm0UOYajF/JXMqKowVs45GLy1QD5AMD+ Iohj8L9KZpU3u5KcV4XqhzHFx6CPj7lid2Gbrgo= =ev+X -----END PGP SIGNATURE----- -----------------------a360bd802352390be1a5dc6a8afd4441--