From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp2 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id kFsFN6pmuV5PTgAA0tVLHw (envelope-from ) for ; Mon, 11 May 2020 14:52:26 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp2 with LMTPS id 4HpWNbhmuV4iVQAAB5/wlQ (envelope-from ) for ; Mon, 11 May 2020 14:52:40 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 31F119400AB for ; Mon, 11 May 2020 14:52:28 +0000 (UTC) Received: from localhost ([::1]:38814 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jY9n9-0003Sx-Mm for larch@yhetil.org; Mon, 11 May 2020 10:52:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34120) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jY9mP-0002Ss-5L for help-guix@gnu.org; Mon, 11 May 2020 10:51:41 -0400 Received: from mail-qt1-x834.google.com ([2607:f8b0:4864:20::834]:45619) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jY9mN-0000Mu-Ao for help-guix@gnu.org; Mon, 11 May 2020 10:51:40 -0400 Received: by mail-qt1-x834.google.com with SMTP id j2so7823311qtr.12 for ; Mon, 11 May 2020 07:51:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=hNnDbHFyn+3s1delgnRhhOd1EqQgIf49Qr9eqaFBP5U=; b=oUmD1Ea296vrHCGCK4fTwqEE+l/STuagwfWvxqazKUL8+Ew2mJl6fMKj2qTwmmFmcA lIiAJMb96JorndbNBadKd61C+ERAwn6r6BXxdXAQVAbK1CrA7gRJzIYl/tZbLqP33Kjw cEIhgCo63otN6ZP4HDYbuCGxMW2wD18fsVa9HfKk04CwdcJRdzHxvxrVF9+Dtla0Gqu/ FGT2sYK8vbX25ubz9Itv6O4H6UbHZe3APfp4gPOlXuqsfTpVpZeRqqJv6LuuxKPFt020 FgURzO0jRXxpgR5OXPMIuMmR6pwucOI+ckHiK5DKF490BEiT1xAKPWQIejIsnmNuAa2q rYCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=hNnDbHFyn+3s1delgnRhhOd1EqQgIf49Qr9eqaFBP5U=; b=TU8DRF49MJ6TsldG397rYPw9Y9q3n/ShAq3KGj12vFmlA6JHNn71rGEAWVtSdOQIM6 K4m8H+Lu3YbdrynAamEq4IxkZmHIJ6MgGKaA+a5S+VI4u0j2Kzly8CI4cGnQMotslQIy v2wEiV7yZ2SPD4wDk0rl9KoUkFlp7+JnOKmikD1JFMCkTi1fo+z2gwg89KIspRjD3bGH mKPmkFIF2A9LHXS4JJlRp+cExamP4vvtavcIVg2jPIw96T8lmXL2spyYd6SyTgA1XrUF DE7CJnn4/fqPLmQL6IPbxn3J76pRcYt06hKGGXfPbVPpLO8/8Z2MgvLnHNduYvdCrQWM z4nA== X-Gm-Message-State: AOAM532gaYGSd6wKuFHnZUFIcWVl79KwZf26H5tWjTtpuLX2PjEygf6S 7/sVbandQMAUe4+4oUXdiT6xPcmgwvPwU5pLbbRSrg== X-Google-Smtp-Source: ABdhPJwK34VEJ5gIRAytx339CxnNuqedFghAZYCIbkjYsv7+tSTYDGlX2ncI3jpH2DHeh+D7CYUnoGvkK3ZA0dXSRSk= X-Received: by 2002:aed:2c64:: with SMTP id f91mr1849517qtd.217.1589208697861; Mon, 11 May 2020 07:51:37 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: zimoun Date: Mon, 11 May 2020 16:51:26 +0200 Message-ID: Subject: Re: Setting up a python environment To: Roy Lemmon Content-Type: multipart/mixed; boundary="000000000000e94c3005a5607bd2" Received-SPF: pass client-ip=2607:f8b0:4864:20::834; envelope-from=zimon.toutoune@gmail.com; helo=mail-qt1-x834.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: help-guix@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: help-guix Errors-To: help-guix-bounces+larch=yhetil.org@gnu.org Sender: "Help-Guix" X-Scanner: scn0 X-Spam-Score: -0.61 Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=gmail.com header.s=20161025 header.b=oUmD1Ea2; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (aspmx1.migadu.com: domain of help-guix-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=help-guix-bounces@gnu.org X-Scan-Result: default: False [-0.61 / 13.00]; GENERIC_REPUTATION(0.00)[-0.54014284666088]; DWL_DNSWL_FAIL(0.00)[gmail.com:server fail,209.51.188.17:server fail]; R_SPF_ALLOW(-0.20)[+ip4:209.51.188.0/24:c]; FREEMAIL_FROM(0.00)[gmail.com]; HAS_ATTACHMENT(0.00)[]; IP_REPUTATION_HAM(0.00)[asn: 22989(0.07), country: US(-0.00), ip: 209.51.188.17(-0.54)]; MIME_BASE64_TEXT_BOGUS(1.00)[]; TO_DN_ALL(0.00)[]; DKIM_TRACE(0.00)[gmail.com:+]; MIME_BASE64_TEXT(0.10)[]; RCPT_COUNT_TWO(0.00)[2]; MX_GOOD(-0.50)[cached: eggs.gnu.org]; MAILLIST(-0.20)[mailman]; DMARC_POLICY_ALLOW(-0.50)[gmail.com,none]; RCVD_IN_DNSWL_FAIL(0.00)[209.51.188.17:server fail]; MIME_TRACE(0.00)[0:+,1:+,2:+]; RCVD_TLS_LAST(0.00)[]; ASN(0.00)[asn:22989, ipnet:209.51.188.0/24, country:US]; TAGGED_FROM(0.00)[larch=yhetil.org]; FROM_NEQ_ENVFROM(0.00)[zimontoutoune@gmail.com,help-guix-bounces@gnu.org]; ARC_NA(0.00)[]; R_DKIM_ALLOW(-0.20)[gmail.com:s=20161025]; RCVD_COUNT_FIVE(0.00)[5]; FROM_HAS_DN(0.00)[]; URIBL_BLOCKED(0.00)[roylemmon.com:email]; FORGED_RECIPIENTS_MAILLIST(0.00)[]; MIME_GOOD(-0.10)[multipart/mixed,text/plain,text/x-scheme]; PREVIOUSLY_DELIVERED(0.00)[help-guix@gnu.org]; HAS_LIST_UNSUB(-0.01)[]; RWL_MAILSPIKE_POSSIBLE(0.00)[209.51.188.17:from]; FORGED_SENDER_MAILLIST(0.00)[] X-TUID: X8ILO63Ya0Ub --000000000000e94c3005a5607bd2 Content-Type: text/plain; charset="UTF-8" Hi Roy, On Mon, 11 May 2020 at 14:49, Roy Lemmon wrote: > I would like to ask about the general philosophy of setting up a python > environment under guix. Well, let me describe my workflow -- and I do not know if it the correct one. I use 'manifest', 'profile' and "guix environment". For each project I am working on, I have dedicated folder containing the code, doc and other files useful for the very project. In this folder, I add a manifest file [1] tracking the tools that the project needs. From this manifest, I instantiate a profile in the project folder. And I track the channel too to be able to reproduce elsewhere and elsetime. Time to time, I spawn an environment with the manifest to do some checks. Well, basically, the CLI looks like: cd /path/to/project edit manifest.scm guix package -m manifest.scm -p profile guix describe -f channels > channels.scm git add manifest.scm channels.scm git commit -am eval $(guix package --search-paths=prefix -p profile) ipython guix environment -m manifest --ad-hoc python-other-tools guix time-machine -C channels.scm -- environment -m manifest.scm Last, when a package is missing, I use "guix import pypi -r name". If the package is correctly packaged on the PyPI side, it is almost done. ;-) To be concrete, again in the project folder: guix import pypi -r astropy > pkgs.scm edit pkgs.scm # add define-module etc. guix show -L . python-astropy edit pkgs.scm # add missing import guix show -L . python-astropy # works! guix build -L . python-astropy Well, and then the "hard" packaging job starts. :-) Find attached 'pkgs.scm' still failing to build but maybe a starting point. Hope that helps, simon --000000000000e94c3005a5607bd2 Content-Type: text/x-scheme; charset="US-ASCII"; name="pkgs.scm" Content-Disposition: attachment; filename="pkgs.scm" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ka2lt4cv0 KGRlZmluZS1tb2R1bGUgKHBrZ3MpCiAgIzp1c2UtbW9kdWxlIChndWl4IHBhY2thZ2VzKQogICM6 dXNlLW1vZHVsZSAoZ3VpeCBkb3dubG9hZCkKICAjOnVzZS1tb2R1bGUgKGd1aXggYnVpbGQtc3lz dGVtIHB5dGhvbikKICAjOnVzZS1tb2R1bGUgKChndWl4IGxpY2Vuc2VzKSAjOnByZWZpeCBsaWNl bnNlOikKICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBweXRob24teHl6KQogICM6dXNlLW1v ZHVsZSAoZ251IHBhY2thZ2VzIGNoZWNrKQogICkKCihkZWZpbmUtcHVibGljIHB5dGhvbi1za3lm aWVsZAogIChwYWNrYWdlCiAgICAobmFtZSAicHl0aG9uLXNreWZpZWxkIikKICAgICh2ZXJzaW9u ICIxLjIwIikKICAgIChzb3VyY2UKICAgICAgKG9yaWdpbgogICAgICAgIChtZXRob2QgdXJsLWZl dGNoKQogICAgICAgICh1cmkgKHB5cGktdXJpICJza3lmaWVsZCIgdmVyc2lvbikpCiAgICAgICAg KHNoYTI1NgogICAgICAgICAgKGJhc2UzMgogICAgICAgICAgICAiMGxtNGo2emRhdnZ3MHdnZnY1 ZzJyZGs3N24zZGgyYjA5Nno0NGhhbGZjamNmNGs0ZGcyeCIpKSkpCiAgICAoYnVpbGQtc3lzdGVt IHB5dGhvbi1idWlsZC1zeXN0ZW0pCiAgICAoaG9tZS1wYWdlCiAgICAgICJodHRwOi8vZ2l0aHVi LmNvbS9icmFuZG9uLXJob2Rlcy9weXRob24tc2t5ZmllbGQvIikKICAgIChzeW5vcHNpcyAiRWxl Z2FudCBhc3Ryb25vbXkgZm9yIFB5dGhvbiIpCiAgICAoZGVzY3JpcHRpb24gIkVsZWdhbnQgYXN0 cm9ub215IGZvciBQeXRob24iKQogICAgKGxpY2Vuc2UgbGljZW5zZTpleHBhdCkpKQoKKGRlZmlu ZS1wdWJsaWMgcHl0aG9uLXB5dGVzdC1tcGwKICAocGFja2FnZQogICAgKG5hbWUgInB5dGhvbi1w eXRlc3QtbXBsIikKICAgICh2ZXJzaW9uICIwLjExIikKICAgIChzb3VyY2UKICAgICAgKG9yaWdp bgogICAgICAgIChtZXRob2QgdXJsLWZldGNoKQogICAgICAgICh1cmkgKHB5cGktdXJpICJweXRl c3QtbXBsIiB2ZXJzaW9uKSkKICAgICAgICAoc2hhMjU2CiAgICAgICAgICAoYmFzZTMyCiAgICAg ICAgICAgICIxa20yMDJjMXM1a2NuNTJmeDAyNjZwMDZxYjM0dmEzd2FyY2J5NTk0ZGg2dml4eGE5 aTk2IikpKSkKICAgIChidWlsZC1zeXN0ZW0gcHl0aG9uLWJ1aWxkLXN5c3RlbSkKICAgIChwcm9w YWdhdGVkLWlucHV0cwogICAgICBgKCgicHl0aG9uLW1hdHBsb3RsaWIiICxweXRob24tbWF0cGxv dGxpYikKICAgICAgICAoInB5dGhvbi1ub3NlIiAscHl0aG9uLW5vc2UpCiAgICAgICAgKCJweXRo b24tcGlsbG93IiAscHl0aG9uLXBpbGxvdykKICAgICAgICAoInB5dGhvbi1weXRlc3QiICxweXRo b24tcHl0ZXN0KSkpCiAgICAoaG9tZS1wYWdlCiAgICAgICJodHRwczovL2dpdGh1Yi5jb20vbWF0 cGxvdGxpYi9weXRlc3QtbXBsIikKICAgIChzeW5vcHNpcwogICAgICAicHl0ZXN0IHBsdWdpbiB0 byBoZWxwIHdpdGggdGVzdGluZyBmaWd1cmVzIG91dHB1dCBmcm9tIE1hdHBsb3RsaWIiKQogICAg KGRlc2NyaXB0aW9uCiAgICAgICJweXRlc3QgcGx1Z2luIHRvIGhlbHAgd2l0aCB0ZXN0aW5nIGZp Z3VyZXMgb3V0cHV0IGZyb20gTWF0cGxvdGxpYiIpCiAgICAobGljZW5zZSBsaWNlbnNlOmJzZC0z KSkpCgooZGVmaW5lLXB1YmxpYyBweXRob24tcHl0ZXN0LWZpbHRlci1zdWJwYWNrYWdlCiAgKHBh Y2thZ2UKICAgIChuYW1lICJweXRob24tcHl0ZXN0LWZpbHRlci1zdWJwYWNrYWdlIikKICAgICh2 ZXJzaW9uICIwLjEuMSIpCiAgICAoc291cmNlCiAgICAgIChvcmlnaW4KICAgICAgICAobWV0aG9k IHVybC1mZXRjaCkKICAgICAgICAodXJpIChweXBpLXVyaSAicHl0ZXN0LWZpbHRlci1zdWJwYWNr YWdlIiB2ZXJzaW9uKSkKICAgICAgICAoc2hhMjU2CiAgICAgICAgICAoYmFzZTMyCiAgICAgICAg ICAgICIxczRzMmtkMzF5YzY1cmZ2bDR4aHk4eHg4MDZ4aHk1OWtjNzY2OGg2YjZ3cTg4eGdybjVw IikpKSkKICAgIChidWlsZC1zeXN0ZW0gcHl0aG9uLWJ1aWxkLXN5c3RlbSkKICAgIChwcm9wYWdh dGVkLWlucHV0cwogICAgICBgKCgicHl0aG9uLXB5dGVzdCIgLHB5dGhvbi1weXRlc3QpKSkKICAg IChuYXRpdmUtaW5wdXRzCiAgICAgIGAoKCJweXRob24tcHl0ZXN0IiAscHl0aG9uLXB5dGVzdCkK ICAgICAgICAoInB5dGhvbi1weXRlc3QtY292IiAscHl0aG9uLXB5dGVzdC1jb3YpCiAgICAgICAg KCJweXRob24tcHl0ZXN0LWRvY3Rlc3RwbHVzIgogICAgICAgICAscHl0aG9uLXB5dGVzdC1kb2N0 ZXN0cGx1cykpKQogICAgKGhvbWUtcGFnZSAiaHR0cHM6Ly9hc3Ryb3B5Lm9yZyIpCiAgICAoc3lu b3BzaXMKICAgICAgIlB5dGVzdCBwbHVnaW4gZm9yIGZpbHRlcmluZyBiYXNlZCBvbiBzdWItcGFj a2FnZXMiKQogICAgKGRlc2NyaXB0aW9uCiAgICAgICJQeXRlc3QgcGx1Z2luIGZvciBmaWx0ZXJp bmcgYmFzZWQgb24gc3ViLXBhY2thZ2VzIikKICAgIChsaWNlbnNlIGxpY2Vuc2U6YnNkLTMpKSkK CihkZWZpbmUtcHVibGljIHB5dGhvbi1weXRlc3QtYXJyYXlkaWZmCiAgKHBhY2thZ2UKICAgIChu YW1lICJweXRob24tcHl0ZXN0LWFycmF5ZGlmZiIpCiAgICAodmVyc2lvbiAiMC4zIikKICAgIChz b3VyY2UKICAgICAgKG9yaWdpbgogICAgICAgIChtZXRob2QgdXJsLWZldGNoKQogICAgICAgICh1 cmkgKHB5cGktdXJpICJweXRlc3QtYXJyYXlkaWZmIiB2ZXJzaW9uKSkKICAgICAgICAoc2hhMjU2 CiAgICAgICAgICAoYmFzZTMyCiAgICAgICAgICAgICIwNWJjdmhoMnljeGEzNXpubDhiM2w5dmtj bXg3dndtNWMzZnBha2JwdzQ2Yzd2c240YmZ5IikpKSkKICAgIChidWlsZC1zeXN0ZW0gcHl0aG9u LWJ1aWxkLXN5c3RlbSkKICAgIChwcm9wYWdhdGVkLWlucHV0cwogICAgICBgKCgicHl0aG9uLW51 bXB5IiAscHl0aG9uLW51bXB5KQogICAgICAgICgicHl0aG9uLXB5dGVzdCIgLHB5dGhvbi1weXRl c3QpCiAgICAgICAgKCJweXRob24tc2l4IiAscHl0aG9uLXNpeCkpKQogICAgKGhvbWUtcGFnZQog ICAgICAiaHR0cHM6Ly9naXRodWIuY29tL2FzdHJvZnJvZy9weXRlc3QtYXJyYXlkaWZmIikKICAg IChzeW5vcHNpcwogICAgICAicHl0ZXN0IHBsdWdpbiB0byBoZWxwIHdpdGggY29tcGFyaW5nIGFy cmF5IG91dHB1dCBmcm9tIHRlc3RzIikKICAgIChkZXNjcmlwdGlvbgogICAgICAicHl0ZXN0IHBs dWdpbiB0byBoZWxwIHdpdGggY29tcGFyaW5nIGFycmF5IG91dHB1dCBmcm9tIHRlc3RzIikKICAg IChsaWNlbnNlIGxpY2Vuc2U6YnNkLTMpKSkKCihkZWZpbmUtcHVibGljIHB5dGhvbi1weXRlc3Qt YXN0cm9weS1oZWFkZXIKICAocGFja2FnZQogICAgKG5hbWUgInB5dGhvbi1weXRlc3QtYXN0cm9w eS1oZWFkZXIiKQogICAgKHZlcnNpb24gIjAuMS4yIikKICAgIChzb3VyY2UKICAgICAgKG9yaWdp bgogICAgICAgIChtZXRob2QgdXJsLWZldGNoKQogICAgICAgICh1cmkgKHB5cGktdXJpICJweXRl c3QtYXN0cm9weS1oZWFkZXIiIHZlcnNpb24pKQogICAgICAgIChzaGEyNTYKICAgICAgICAgIChi YXNlMzIKICAgICAgICAgICAgIjF5ODdhZ3IzMjRwNng1Z3Zoeml5bXhqbHc1NHB5bjRncW5kNDlw YXBibDk0MWRqcGtwNWciKSkpKQogICAgKGJ1aWxkLXN5c3RlbSBweXRob24tYnVpbGQtc3lzdGVt KQogICAgKHByb3BhZ2F0ZWQtaW5wdXRzCiAgICAgIGAoKCJweXRob24tcHl0ZXN0IiAscHl0aG9u LXB5dGVzdCkpKQogICAgKG5hdGl2ZS1pbnB1dHMKICAgICAgYCgoInB5dGhvbi1hc3Ryb3B5IiAs cHl0aG9uLWFzdHJvcHkpCiAgICAgICAgKCJweXRob24tY29kZWNvdiIgLHB5dGhvbi1jb2RlY292 KQogICAgICAgICgicHl0aG9uLWNvdmVyYWdlIiAscHl0aG9uLWNvdmVyYWdlKQogICAgICAgICgi cHl0aG9uLW51bXB5IiAscHl0aG9uLW51bXB5KQogICAgICAgICgicHl0aG9uLXB5dGVzdCIgLHB5 dGhvbi1weXRlc3QpCiAgICAgICAgKCJweXRob24tcHl0ZXN0LWNvdiIgLHB5dGhvbi1weXRlc3Qt Y292KSkpCiAgICAoaG9tZS1wYWdlICJodHRwOi8vYXN0cm9weS5vcmciKQogICAgKHN5bm9wc2lz CiAgICAgICJweXRlc3QgcGx1Z2luIHRvIGFkZCBkaWFnbm9zdGljIGluZm9ybWF0aW9uIHRvIHRo ZSBoZWFkZXIgb2YgdGhlIHRlc3Qgb3V0cHV0IikKICAgIChkZXNjcmlwdGlvbgogICAgICAicHl0 ZXN0IHBsdWdpbiB0byBhZGQgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiB0byB0aGUgaGVhZGVyIG9m IHRoZSB0ZXN0IG91dHB1dCIpCiAgICAobGljZW5zZSAjZikpKQoKKGRlZmluZS1wdWJsaWMgcHl0 aG9uLXB5dGVzdC1vcGVuZmlsZXMKICAocGFja2FnZQogICAgKG5hbWUgInB5dGhvbi1weXRlc3Qt b3BlbmZpbGVzIikKICAgICh2ZXJzaW9uICIwLjUuMCIpCiAgICAoc291cmNlCiAgICAgIChvcmln aW4KICAgICAgICAobWV0aG9kIHVybC1mZXRjaCkKICAgICAgICAodXJpIChweXBpLXVyaSAicHl0 ZXN0LW9wZW5maWxlcyIgdmVyc2lvbikpCiAgICAgICAgKHNoYTI1NgogICAgICAgICAgKGJhc2Uz MgogICAgICAgICAgICAiMG4wYTdmZGM5bTg2MzYweTk2bDIzZnZkbWQ2cncwNGJsNmg1eHFnbDlx eGZ2MDhqazcwcCIpKSkpCiAgICAoYnVpbGQtc3lzdGVtIHB5dGhvbi1idWlsZC1zeXN0ZW0pCiAg ICAocHJvcGFnYXRlZC1pbnB1dHMKICAgICAgYCgoInB5dGhvbi1wc3V0aWwiICxweXRob24tcHN1 dGlsKQogICAgICAgICgicHl0aG9uLXB5dGVzdCIgLHB5dGhvbi1weXRlc3QpKSkKICAgIChob21l LXBhZ2UKICAgICAgImh0dHBzOi8vZ2l0aHViLmNvbS9hc3Ryb3B5L3B5dGVzdC1vcGVuZmlsZXMi KQogICAgKHN5bm9wc2lzCiAgICAgICJQeXRlc3QgcGx1Z2luIGZvciBkZXRlY3RpbmcgaW5hZHZl cnRlbnQgb3BlbiBmaWxlIGhhbmRsZXMiKQogICAgKGRlc2NyaXB0aW9uCiAgICAgICJQeXRlc3Qg cGx1Z2luIGZvciBkZXRlY3RpbmcgaW5hZHZlcnRlbnQgb3BlbiBmaWxlIGhhbmRsZXMiKQogICAg KGxpY2Vuc2UgbGljZW5zZTpic2QtMykpKQoKKGRlZmluZS1wdWJsaWMgcHl0aG9uLXB5dGVzdC1y ZW1vdGVkYXRhCiAgKHBhY2thZ2UKICAgIChuYW1lICJweXRob24tcHl0ZXN0LXJlbW90ZWRhdGEi KQogICAgKHZlcnNpb24gIjAuMy4yIikKICAgIChzb3VyY2UKICAgICAgKG9yaWdpbgogICAgICAg IChtZXRob2QgdXJsLWZldGNoKQogICAgICAgICh1cmkgKHB5cGktdXJpICJweXRlc3QtcmVtb3Rl ZGF0YSIgdmVyc2lvbikpCiAgICAgICAgKHNoYTI1NgogICAgICAgICAgKGJhc2UzMgogICAgICAg ICAgICAiMWg2ZzZzaGliNnowN2F6ZjEycm5zYTA1MzQ3MGdnYmQ3aHkzYm5idzhuZjNuemE1aDM3 MiIpKSkpCiAgICAoYnVpbGQtc3lzdGVtIHB5dGhvbi1idWlsZC1zeXN0ZW0pCiAgICAocHJvcGFn YXRlZC1pbnB1dHMKICAgICAgYCgoInB5dGhvbi1weXRlc3QiICxweXRob24tcHl0ZXN0KQogICAg ICAgICgicHl0aG9uLXNpeCIgLHB5dGhvbi1zaXgpKSkKICAgIChob21lLXBhZ2UgImh0dHBzOi8v YXN0cm9weS5vcmciKQogICAgKHN5bm9wc2lzCiAgICAgICJQeXRlc3QgcGx1Z2luIGZvciBjb250 cm9sbGluZyByZW1vdGUgZGF0YSBhY2Nlc3MuIikKICAgIChkZXNjcmlwdGlvbgogICAgICAiUHl0 ZXN0IHBsdWdpbiBmb3IgY29udHJvbGxpbmcgcmVtb3RlIGRhdGEgYWNjZXNzLiIpCiAgICAobGlj ZW5zZSBsaWNlbnNlOmJzZC0zKSkpCgooZGVmaW5lLXB1YmxpYyBweXRob24tcHl0ZXN0LWRvY3Rl c3RwbHVzCiAgKHBhY2thZ2UKICAgIChuYW1lICJweXRob24tcHl0ZXN0LWRvY3Rlc3RwbHVzIikK ICAgICh2ZXJzaW9uICIwLjYuMSIpCiAgICAoc291cmNlCiAgICAgIChvcmlnaW4KICAgICAgICAo bWV0aG9kIHVybC1mZXRjaCkKICAgICAgICAodXJpIChweXBpLXVyaSAicHl0ZXN0LWRvY3Rlc3Rw bHVzIiB2ZXJzaW9uKSkKICAgICAgICAoc2hhMjU2CiAgICAgICAgICAoYmFzZTMyCiAgICAgICAg ICAgICIxMWYxZ2pqOTc1YWFwYW5ud2M3eGZxYzZpamNrZ3FuOXcycGJrMG40am44cWxqdjc3anZ2 IikpKSkKICAgIChidWlsZC1zeXN0ZW0gcHl0aG9uLWJ1aWxkLXN5c3RlbSkKICAgIChwcm9wYWdh dGVkLWlucHV0cwogICAgICBgKCgicHl0aG9uLXBpcCIgLHB5dGhvbi1waXApCiAgICAgICAgKCJw eXRob24tcHl0ZXN0IiAscHl0aG9uLXB5dGVzdCkpKQogICAgKGhvbWUtcGFnZSAiaHR0cHM6Ly9h c3Ryb3B5Lm9yZyIpCiAgICAoc3lub3BzaXMKICAgICAgIlB5dGVzdCBwbHVnaW4gd2l0aCBhZHZh bmNlZCBkb2N0ZXN0IGZlYXR1cmVzLiIpCiAgICAoZGVzY3JpcHRpb24KICAgICAgIlB5dGVzdCBw bHVnaW4gd2l0aCBhZHZhbmNlZCBkb2N0ZXN0IGZlYXR1cmVzLiIpCiAgICAobGljZW5zZSBsaWNl bnNlOmJzZC0zKSkpCgooZGVmaW5lLXB1YmxpYyBweXRob24tcHl0ZXN0LWFzdHJvcHkKICAocGFj a2FnZQogICAgKG5hbWUgInB5dGhvbi1weXRlc3QtYXN0cm9weSIpCiAgICAodmVyc2lvbiAiMC44 LjAiKQogICAgKHNvdXJjZQogICAgICAob3JpZ2luCiAgICAgICAgKG1ldGhvZCB1cmwtZmV0Y2gp CiAgICAgICAgKHVyaSAocHlwaS11cmkgInB5dGVzdC1hc3Ryb3B5IiB2ZXJzaW9uKSkKICAgICAg ICAoc2hhMjU2CiAgICAgICAgICAoYmFzZTMyCiAgICAgICAgICAgICIxOGo2ejZ5MmZ2eWttY3M1 ejBtbGRoaGF4eG42d3pwbmhsbTJwczdtOHI1ejVrbWgxNjMxIikpKSkKICAgIChidWlsZC1zeXN0 ZW0gcHl0aG9uLWJ1aWxkLXN5c3RlbSkKICAgIChwcm9wYWdhdGVkLWlucHV0cwogICAgICBgKCgi cHl0aG9uLWh5cG90aGVzaXMiICxweXRob24taHlwb3RoZXNpcykKICAgICAgICAoInB5dGhvbi1w eXRlc3QiICxweXRob24tcHl0ZXN0KQogICAgICAgICgicHl0aG9uLXB5dGVzdC1hcnJheWRpZmYi CiAgICAgICAgICxweXRob24tcHl0ZXN0LWFycmF5ZGlmZikKICAgICAgICAoInB5dGhvbi1weXRl c3QtYXN0cm9weS1oZWFkZXIiCiAgICAgICAgICxweXRob24tcHl0ZXN0LWFzdHJvcHktaGVhZGVy KQogICAgICAgICgicHl0aG9uLXB5dGVzdC1jb3YiICxweXRob24tcHl0ZXN0LWNvdikKICAgICAg ICAoInB5dGhvbi1weXRlc3QtZG9jdGVzdHBsdXMiCiAgICAgICAgICxweXRob24tcHl0ZXN0LWRv Y3Rlc3RwbHVzKQogICAgICAgICgicHl0aG9uLXB5dGVzdC1maWx0ZXItc3VicGFja2FnZSIKICAg ICAgICAgLHB5dGhvbi1weXRlc3QtZmlsdGVyLXN1YnBhY2thZ2UpCiAgICAgICAgKCJweXRob24t cHl0ZXN0LW9wZW5maWxlcyIKICAgICAgICAgLHB5dGhvbi1weXRlc3Qtb3BlbmZpbGVzKQogICAg ICAgICgicHl0aG9uLXB5dGVzdC1yZW1vdGVkYXRhIgogICAgICAgICAscHl0aG9uLXB5dGVzdC1y ZW1vdGVkYXRhKSkpCiAgICAoaG9tZS1wYWdlCiAgICAgICJodHRwczovL2dpdGh1Yi5jb20vYXN0 cm9weS9weXRlc3QtYXN0cm9weSIpCiAgICAoc3lub3BzaXMKICAgICAgIk1ldGEtcGFja2FnZSBj b250YWluaW5nIGRlcGVuZGVuY2llcyBmb3IgdGVzdGluZyIpCiAgICAoZGVzY3JpcHRpb24KICAg ICAgIk1ldGEtcGFja2FnZSBjb250YWluaW5nIGRlcGVuZGVuY2llcyBmb3IgdGVzdGluZyIpCiAg ICAobGljZW5zZSBsaWNlbnNlOmJzZC0zKSkpCgooZGVmaW5lLXB1YmxpYyBweXRob24tYXN0cm9w eQogIChwYWNrYWdlCiAgICAobmFtZSAicHl0aG9uLWFzdHJvcHkiKQogICAgKHZlcnNpb24gIjQu MC4xLnBvc3QxIikKICAgIChzb3VyY2UKICAgICAgKG9yaWdpbgogICAgICAgIChtZXRob2QgdXJs LWZldGNoKQogICAgICAgICh1cmkgKHB5cGktdXJpICJhc3Ryb3B5IiB2ZXJzaW9uKSkKICAgICAg ICAoc2hhMjU2CiAgICAgICAgICAoYmFzZTMyCiAgICAgICAgICAgICIxZGE0eGo3OTNsZGNrMjlh YWp5YjUxNHdwejMzMGNtbDI2ZjNnZHA0NWpqNTMxbjRsYzJ3IikpKSkKICAgIChidWlsZC1zeXN0 ZW0gcHl0aG9uLWJ1aWxkLXN5c3RlbSkKICAgIChwcm9wYWdhdGVkLWlucHV0cwogICAgICBgKCgi cHl0aG9uLW51bXB5IiAscHl0aG9uLW51bXB5KSkpCgogICAgKG5hdGl2ZS1pbnB1dHMKICAgICBg KAogICAgICAgKCJweXRob24tY292ZXJhZ2UiICxweXRob24tY292ZXJhZ2UpCiAgICAgICAgICAo InB5dGhvbi1pcHl0aG9uIiAscHl0aG9uLWlweXRob24pCiAgICAgICAgICAoInB5dGhvbi1vYmpn cmFwaCIgLHB5dGhvbi1vYmpncmFwaCkKICAgICA7OyAgICAgKCJweXRob24tcHl0ZXN0LWFzdHJv cHkiICxweXRob24tcHl0ZXN0LWFzdHJvcHkpCiAgICAgICAgICAoInB5dGhvbi1weXRlc3QtbXBs IiAscHl0aG9uLXB5dGVzdC1tcGwpCiAgICAgICAgICAoInB5dGhvbi1weXRlc3QteGRpc3QiICxw eXRob24tcHl0ZXN0LXhkaXN0KQogICAgICAgICAgKCJweXRob24tc2t5ZmllbGQiICxweXRob24t c2t5ZmllbGQpCiAgICAgKSkKICAgIChob21lLXBhZ2UgImh0dHA6Ly9hc3Ryb3B5Lm9yZyIpCiAg ICAoc3lub3BzaXMKICAgICAgIkNvbW11bml0eS1kZXZlbG9wZWQgcHl0aG9uIGFzdHJvbm9teSB0 b29scyIpCiAgICAoZGVzY3JpcHRpb24KICAgICAgIkNvbW11bml0eS1kZXZlbG9wZWQgcHl0aG9u IGFzdHJvbm9teSB0b29scyIpCiAgICAobGljZW5zZSAjZikpKQoK --000000000000e94c3005a5607bd2--