From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1.migadu.com ([2001:41d0:403:4876::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms8.migadu.com with LMTPS id UCc2JSpdwWVZfgEA62LTzQ:P1 (envelope-from ) for ; Mon, 05 Feb 2024 23:11:54 +0100 Received: from aspmx1.migadu.com ([2001:41d0:403:4876::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1.migadu.com with LMTPS id UCc2JSpdwWVZfgEA62LTzQ (envelope-from ) for ; Mon, 05 Feb 2024 23:11:54 +0100 X-Envelope-To: larch@yhetil.org Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=troyfigiel.com header.s=MBO0001 header.b=HKALrXrz; dmarc=pass (policy=none) header.from=troyfigiel.com; spf=pass (aspmx1.migadu.com: domain of "guix-devel-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-devel-bounces+larch=yhetil.org@gnu.org" ARC-Seal: i=1; s=key1; d=yhetil.org; t=1707171114; a=rsa-sha256; cv=none; b=unDDBhDa48lt1tLrwts1kLu4P8+7PchyLFMWJtl/7wM+n2KnTYvAuraUokhDgUn/4VxGXq j19b0yMHo+lY6Pw4YfKACHrGmKJv6PdyhMohHwIOsqNON6OhDIM18CGCzysIsfeikAuNU7 7onhHfhCD9d1uEPYEMpMS0p8tCdXLvLX/zZYtytl20GIiPFa5NgMivdePfEbrV0EkfhPxK AbE8LctnFY5a/3AkgYWNhB1+JGBvZmaoZaZFam+AEXftnPiIKcYZqspfrh0IYT52cQiK5S /47wf1v/inDurny5LK4+e9cweFc+H2k1+2Mj9VE4epxU40H0PFcIG9FcFf2/XA== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=pass header.d=troyfigiel.com header.s=MBO0001 header.b=HKALrXrz; dmarc=pass (policy=none) header.from=troyfigiel.com; spf=pass (aspmx1.migadu.com: domain of "guix-devel-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-devel-bounces+larch=yhetil.org@gnu.org" ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1707171114; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type:in-reply-to:in-reply-to: references:references:list-id:list-help:list-unsubscribe: list-subscribe:list-post:dkim-signature:autocrypt:autocrypt; bh=Zxm6C9f34E/NdU4+CWb3Oh0L1Ugp7QpMJzsvTiC2SRE=; b=MF3h1v0k8Ab2yWnoxhg8xhTjwsoSkE0dfAplgWwU14G3TWRrk8F12IdPmcThFqUxeAlg5l aZffty15Y1KaZ/Hl5C+PDTOpbSN7hCzBTTs6RboCxJULp/fJPyUVlvUBzWUVbuq703xrMy QnuJv7RcCRLqgwlaPemI2ofUCNF/C6oqOCwsuML8zZ/xyn+SIX08+Q+Bnaei46HvA3YZvd wSE3vY9kjERH6UBB8oLu0hyNAsBq9My5KULEG+M6nYua0FJ3CnaluyptJU7kctP1Efxc5p Hj82bs8X5KTUUxqf9sjH8ftd4eraCUMO1fH7CN+zMosozzk40CX/WSF6dMB+LA== 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 3843B6D79A for ; Mon, 5 Feb 2024 23:11:54 +0100 (CET) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rX7Bh-0006lJ-LD; Mon, 05 Feb 2024 17:11:37 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rX7Bg-0006k4-C5 for guix-devel@gnu.org; Mon, 05 Feb 2024 17:11:36 -0500 Received: from mout-p-201.mailbox.org ([2001:67c:2050:0:465::201]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_CHACHA20_POLY1305:256) (Exim 4.90_1) (envelope-from ) id 1rX7Bd-00076K-LK for guix-devel@gnu.org; Mon, 05 Feb 2024 17:11:36 -0500 Received: from smtp2.mailbox.org (smtp2.mailbox.org [IPv6:2001:67c:2050:b231:465::2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-201.mailbox.org (Postfix) with ESMTPS id 4TTLFF4k2wz9smg for ; Mon, 5 Feb 2024 23:11:29 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=troyfigiel.com; s=MBO0001; t=1707171089; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references:autocrypt:autocrypt; bh=Zxm6C9f34E/NdU4+CWb3Oh0L1Ugp7QpMJzsvTiC2SRE=; b=HKALrXrzzs83VHgeQR+TdLg7NDrn7bDL2oEMDwa0AeT+fuW64l1+5ZZAoZ6Ysu9GL28FE2 pO/zgsmR1U/twxrVIUHAlOiKp35JAVZbDYsrCtUfyXw2SvmyyEzRLC4E0cPb9iHL8MXgAG AvRpblWzU1b/qU8w+Wdcndrv4KfiuptHfdE4C83Gj+YuHbvUN4U5iDNfkdrf3xvM8sKXBc 6Zqn1Ygr+w3Aagz2/f2e6HsC77P9tK6ls2BRJUYr3qLPkcwZcyEN18WmEFwsxgVhBVoHEm oPbVkax7XksDxf+CtV+YbI+Lcz2D1Q50EWVKHei+qt6AMVPj96b3r0xF5+CzXA== Message-ID: Date: Mon, 5 Feb 2024 23:11:16 +0100 MIME-Version: 1.0 From: Troy Figiel Subject: Re: Golang check phase skipping some tests? To: guix-devel@gnu.org References: <65b75d58-e27b-4d02-80be-d87b86bf0342@troyfigiel.com> <87r0igt0r9.fsf@gmail.com> <7b1e5ca5-9088-4522-adc0-2330d2b7bb94@troyfigiel.com> <1675cf89-52d0-4f1c-972e-0b39cc4220e0@troyfigiel.com> Content-Language: en-US, de-DE Autocrypt: addr=troy@troyfigiel.com; keydata= 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 In-Reply-To: <1675cf89-52d0-4f1c-972e-0b39cc4220e0@troyfigiel.com> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------cCOXn6TAIfMP00aHWuBpjC0g" X-Rspamd-Queue-Id: 4TTLFF4k2wz9smg Received-SPF: pass client-ip=2001:67c:2050:0:465::201; envelope-from=troy@troyfigiel.com; helo=mout-p-201.mailbox.org X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: guix-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+larch=yhetil.org@gnu.org Sender: guix-devel-bounces+larch=yhetil.org@gnu.org X-Migadu-Flow: FLOW_IN X-Migadu-Country: US X-Migadu-Scanner: mx10.migadu.com X-Spam-Score: -11.48 X-Migadu-Queue-Id: 3843B6D79A X-Migadu-Spam-Score: -11.48 X-TUID: iZrGHJht0RHS This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------cCOXn6TAIfMP00aHWuBpjC0g Content-Type: multipart/mixed; boundary="------------kDPAPABtY0Bl0AwRaBOSMWY2"; protected-headers="v1" From: Troy Figiel To: guix-devel@gnu.org Message-ID: Subject: Re: Golang check phase skipping some tests? References: <65b75d58-e27b-4d02-80be-d87b86bf0342@troyfigiel.com> <87r0igt0r9.fsf@gmail.com> <7b1e5ca5-9088-4522-adc0-2330d2b7bb94@troyfigiel.com> <1675cf89-52d0-4f1c-972e-0b39cc4220e0@troyfigiel.com> In-Reply-To: <1675cf89-52d0-4f1c-972e-0b39cc4220e0@troyfigiel.com> --------------kDPAPABtY0Bl0AwRaBOSMWY2 Content-Type: multipart/mixed; boundary="------------EhR1PvuSwroYGljSKoJmhKzG" --------------EhR1PvuSwroYGljSKoJmhKzG Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Oleg (and the go-team), As I have spent some time with the go-build-system, I have a couple of extra suggestions/ideas. Obviously, as the person suggesting these changes, I would be more than happy to help implement them. This will unfortunately be a rather lengthy and very information-dense email due to the specifics of the build system, so here goes: It seems originally the intention of the Go build system was to have Guix packages per module. For example, to package "golang.org/x/net/ipv4" as a separate Guix package `go-golang-org-x-net-ipv4`, we would set `unpack-path` to "golang.org/x/net/ipv4" and `import-path` to the base of the Git repository, i.e. to "golang.org/x/net". See for example the comments in "guix/build/go-build-system.scm": --8<---------------cut here---------------start------------->8--- ;; In general, Go software is built using a standardized build mechanism ;; that does not require any build scripts like Makefiles. This means ;; that all modules of modular libraries cannot be built with a single ;; command. Each module must be built individually. This complicates ;; certain cases, and these issues are currently resolved by creating a ;; file system union of the required modules of such libraries. I think ;; this could be improved in future revisions of the go-build-system. --8<---------------cut here---------------end--------------->8--- There is also a note in the TODOs: --8<---------------cut here---------------start------------->8--- ;; * Remove module packages, only offering the full Git repos? This is ;; more idiomatic, I think, because Go downloads Git repos, not modules. ;; What are the trade-offs? --8<---------------cut here---------------end--------------->8--- I agree with the statement that this split is not idiomatic. To answer the question, I see at least several downsides of our current situation: - Cross-module dependencies for the same overarching Go package/tree are only specified in the files they are used in, not in "go.mod". To clarify my use of "Go tree", "golang.org/x/net/ipv4" and "golang.org/x/net/ipv6" would belong to the same "golang.org/x/net" tree. There would be no feasible, systematic way to figure out all dependencies for a large enough package, besides failing to build and adding missing dependencies on the fly. - Since there is no internal versioning inside a single Go tree, all modules of a single Go tree would need to be upgraded together or you might face an unexpected breakage. - The module-based naming scheme has not been followed consistently. I think this is mainly due to Go importer not working in this way. This led to some annoyances when I was packaging some Go package, since I assumed a module was included when in actuality it was not (for example `go-github-com-kylelemons-godebug`). I have also noticed some duplicate packages, such as `go-etcd-io-bbolt` and `go-go-etcd-io-bbolt`. =46rom what I can tell, the idiomatic way would be to append "/..." to th= e import path, both for `go install` and for `go test`. This would recursively install any binaries and test all packages. Unfortunately though, neither change can easily be done incrementally. Quite a few Go package builds are missing inputs and this is not caught by the current build system. I have started adding some missing inputs here and there, but from my point of view, we cannot reasonably proceed without a dedicated go-team branch. Some additional and miscellaneous suggestions in no particular order: - With Python I can run something like `guix shell python python-pandas` and immediately start development. With Go this is not as simple and at least some environmental variables need to be set beforehand. I had to figure out how this works from go-build-system.scm, so I think it would be good to explicitly document how to use Guix for local Go development for anyone who wants to give it a try. - I find the build phase hard to debug with the current `go install` flags. The combination "-v -x" that is set by default gives way too much information in my opinion. - Some builds fail due to the default `go test` timeout of 10 minutes. For example, I was not able to build go-etcd-io-bbolt locally at all. I would suggest we turn off the timeout to ensure local reproducibility. - As far as I can tell, there is no way to skip single tests with the current build system. This is easy to implement, because `go test` comes with a "-skip" flag. There is no equivalent of `build-flags` for the check phase yet, so I think it would make a lot of sense to add a `test-flags` parameter. Best wishes, Troy --------------EhR1PvuSwroYGljSKoJmhKzG Content-Type: application/pgp-keys; name="OpenPGP_0xC67C9181B3893FB0.asc" Content-Disposition: attachment; filename="OpenPGP_0xC67C9181B3893FB0.asc" Content-Description: OpenPGP public key Content-Transfer-Encoding: quoted-printable -----BEGIN PGP PUBLIC KEY BLOCK----- xsFNBGKp71YBEADDmh9HMTg0Z8/xxf4yT6UX2wO8u0Q2nbOAhzROSabUVyBp8Gz6 jLcoFN8xrg8XxxBWTCENBWqKkYG6Z/GgPmeKuacAeZIW7dGYaGu4bZHgLsTqk04J /dM63aVveJJY4M4rKNx0Mew+SYTGrh3NnoSF0+ZIskGGh4NJpXOGUSUihjdddn8o uFDDy01GJ9N2ZWprfWo3ynMAxEHhD6CWniQMkmd+TVKjQt+BC8d+nHlOt6vFoDGH 9PehXmmBLyOJAVMAlPMyrN8ZjmbRp91s4Sz2rqjD2GXFGvKClhyxcr2qEUJmCg/V p8PiZWOwxA/6BCWuNmrl1d1FhXjMMIzz2y92MOlD5kQm7/261cuXTJvKZOLmHelY 0m7gReWnc9peGPmGeukkdblmjwJTnetzvF/AUXNpS29Nmyie4PgsAbkmL0PwKCbf +6WRWywRidR1narANINGJHL8MDIgdUwuJsYhD5s10bIsg2dOOxFioOnmkgpWiVLm ZSq9bkX+SRyWNL+hDhEbGLnZ5WUOszPXgo9Lo2dCGBr4YkCaxVCCCfgAn8TpgcLQ VW37N75MjEX3kVBGBiiifbQUedKHqMddlUEYLSjpBCNxqF1X5fTuurFrfq8EYcYc QGW5TelhfX1I6md7xt0FDBRAVx8jAvy7Rkt6CeKP7oPNMVfoQ62oMT85JQARAQAB zSJUcm95IEZpZ2llbCA8dHJveWZpZ2llbEBwb3N0ZW8uZGU+wsGMBBMBCgA2FiEE 5HwNzSdo36E4/NzWxnyRgbOJP7AFAmVCwDoCGwMECwkIBwQVCgkIBRYCAwEAAh4F AheAAAoJEMZ8kYGziT+wXq8QAI0N2BmmCRqr/pJf4fWwXKNJG70QRhEIQtY30pHn DvKTgtwx+Ce0+iHj+lC/lD02Fb+JdD+yzDlkzvVEWOYET1/46MQhHNlqpj5qBpX4 DoVCWwSpuvb8X6+nfoOzY2Blcc+Y+IqMUmSKy7VH+IpBfknVei+CUCcY9xJQmMeN BwXgfo9Zf0csBO2k9wZGbOFw/nG36+G55i00uljw/w1+yOhM2btviWxd99oNTqVy vdviiZXPMF2uP5KUWOva0Lheed14vtT7UEchqgPyijLGGpyxr0RXEgYuYIAs+EW7 iOLYar3zfNoArj43WFnp1ov/kUW0gV7DCg3yZawCzHec5G9o6mcsWtmuFyLirMs8 UnSWj5hCG+MD3c3blj1vLhKfz6rWIQImhPVw7KjN83uINTy8CH6JqOe1ZllN1dzL 8TOfYSWLuWV9ehSABoYkUVZslPt6nNn0bfevK3sJ48yvPdbZobYZ0L7cDPJRuxaO D847AcwUeRBU6YZ1nXWhk+E8742XZrXuHjrWu33QvK45BYJGlQjiDjBU/uO3CBOh aJG8LLDcQs+MR6JN/FnKTMVT5tflFQSmmm7bog3XjjHcHjxaXD88gMOk85DyES7r GuZLpQJWEBUxHlcmoy093Ldnn1GXadeT2RcVcZd/6mZCZ4S5ohsOxfnuwEibHdkc iwqjzSFUcm95IEZpZ2llbCA8dHJveUB0cm95ZmlnaWVsLmNvbT7CwY8EEwEKADkC GwMECwkIBwQVCgkIBRYCAwEAAh4FAheAFiEE5HwNzSdo36E4/NzWxnyRgbOJP7AF AmVCwP8CGQEACgkQxnyRgbOJP7DK/A/+L6IYxHhr4ZCz5Mk8s0OHAQTP3ZlAtmjM B+Lg0nwg8hVRzF1O/mCQKaFeKwKgh0I0zZIYucnylG6KKtVoa1ZNrpOCO2Qau7C/ j6u7lmZGoEyEf9ePvhpVPcqFXSeehNl/nmaAFuLXTTTvkUubuU2mOEQe1oua/9HQ Pbd2mlKNjUnj9YmYs9qqF9bcJmT0U2WUg4Jz3DmHQiK175QqJv7fXtIdHzAkBRlJ drslLPOrIDb7WAnXpUQs1bcirKuSFOsyeGn0plh3t0uSm8d3BValRArPMw/h9Fld GRXrKycSCIuU/vL94mncXSwIy8ifY4XkcBVvuZ8CbAh3G3iuZ6LLoMsjGmCXkm6R u9OieC8xmAae69RYw/zXHoIkW+/nLygEv7+7tMrYTFcUR0RmMvHjiZafnGwHkBCF MojUapcG/EAsSYQzssGPqYLuqIaq2weCYpfNUMDye3rivOKFcO6Aa63lCb1TLy/O VoK0al04WdO+teDJVj88WNyMZu1cSdBYd3lJ9VLSmsBJ0FFksuDyXQqmrN+Uckka +JdKHiADGGaztMHmbJkZ1DZ2jfEh0kJTcCr8PAXIvTMcgi/BLP3R6u+iHnycypID 8pwLIDg3Gg3cLcfeBmCBEAft/Gk5RF0POIL8QAx7IVwuAD4kpM6fkXc6Dq9sl6us 38ekm6M7fprCwYwEEwEKADYWIQTkfA3NJ2jfoTj83NbGfJGBs4k/sAUCZSxaEAIb AwQLCQgHBBUKCQgFFgIDAQACHgUCF4AACgkQxnyRgbOJP7Ag6A//Zm9pknQvFDAA icbRWmq3BA4lEfdeXZqpaIHjw8wdBrP/dQfIVk44TEoYcVjanRPNN1HFAYp03kEy KLYzahN+mvaEuumIMSOCYi8VCwFMyqblp+3MKk3vW0EuM5OqgwOwexTrVX4LYDHh 3XG6id2zpja7wjxIQaKtW8W/5zviQYNz0Q9SIgi9fyxCWomP5EbK1Fz746FeSIYQ iFETpoQdRRwHQx+ZC6ReBGSqc1EEiCrg5Y8s+11jPYOL/zE3qlUClkk3PlvG12gp q2jPeByyby/FuZCT5d03uqCwRMo94gmiU4Ds7nCRTct+N830HKOld7cXEvNLhyuz VIYStWErJwmDQWfaEKjeUBL68MuCrhtn/XNraO83/Se6FdPs8OttC9P+qmBOrl+h EUaPz1R6DyNji2cdD5Wicy4DIcxRudDaZDhNeIQFIr1MtY9lVjYWI9SFgg+F68cI QcScfgfnxtVPt9XKnjrRUDWOf8/gpHaDaSUYymdqNkoRMjDGG3hAzrXEZo391hY0 /LnRuKSxy+FREJQwegvO0jk9OrzjgpDwAbESwqb3kWC4f8aPXweNMIEBI1x71Em4 Kx5HRJJQi9YmFSvvpXvTDbTGQG0wyy66X8ZyyzfUO2VFfMlcZpvN15utnGIzRqL/ RTt7ihriRUpHyWf5NC/CDdknhMOOmQXOwU0EYqnvVgEQANU4cn+tMmYLMMJA3yeE 7JIlY5E+xZ5qrvNA+UwqTuZGcQH3Th81fsF1qYYiT38fq6GAEImJ19VqVs9f/YGS dkUk1ZA46AwzPuijpFGUm3yL71kCzPblF1zUCzOllc1N7pi3YD+XQr7ggqX/s/MS 1uxR9Sgs5coYUT0ygXVOGkSkOQjdQ99B2+BUTos28C2sDfJfCd5ekLCp02EUle52 7sX8QjyTiTUlu5pvFnCtzO6MWf3loiJbVi9vA0hQFOnu4jM0TjzIc4vWJpX1oExf FwEsoSVLDQh3CFIoe8wHsRgpIvtWiiRIuaaJawhxac6mj4yaB2UR/MW8KFpUmqzT gVn8FLt0S0yo1PpleTFT8IsGY8luoyWIaUyNCrjXxrps8yFjHoE54Abb0S6Z15Ko 2csG2DR1u4ZtELVsHcF3gZT5q1Nt9BnV8TYi0+vNjVjQ7OODQMOBSIB8bBEQogtb TxBYvIs57ClYAd0fHssz7fJHaKDbcsZXGWKdiSEQrrfc78tOgmYml997og7SyLg+ YI9X8G4RJiIF9EThRtAKK92i9xktWLLBCl5q5nwRPcObVgy7AiwQBPX1WVR3+Uy6 BaeyylPYYIAyM6dHwl4/e5HczR5Nt6pzmnOza8F2JT4blqJd+QVeL+xDtBvzKWLB VZkPJMbwqYS/1MOu4UdmuNIpABEBAAHCwXYEGAEKACAWIQTkfA3NJ2jfoTj83NbG fJGBs4k/sAUCYqnvVgIbDAAKCRDGfJGBs4k/sAQUD/4xIZxwGDsBc3mf4qnahCEA N3NjyhI/9q2oFGzyN0t9ifh7u7HD5R0F5WdI2JnOnW3Bjl3YnsMfLg9wHnsT3R1x resf59wXuKQ7UIpqPfMXLZnHtaUP5bmpETvkvybNf0zkekbU27chbmiAOyDB3Aps FQ7lqwvOO0K3+sx94ROsJwb+MDpjGAOewVPk7V0br0twFo2R5/vtp8cNCg/lKlqW DmJ0fWipxazSzVAMDxn+ci0DB5o5UyHhxc8WgXXLl7t22m7b6kVZ0EKNoEPa7/Tv Ij1wVDFUFrEMEuJFBMDqZDLdBMZzEsq7O0sHaGifiy0zHRE7Eyfo+9sV0ccSWdeE f5GjoKLtR7MlJ+I9IfHuCl++Gxa+MM8yXfn/tk7vcsGJhewrqqTlvnpMuITCmdTJ ymgnKS/BjSDDKjgRsZLLzhkE+dVTBZRkHFOGf9rV8+JQRYwqZVIjIEln6EZdfOQI KPll4EY19f9stj7hptM9jXDTBm4MBxdCdWIRsU19w4TqvitioADjMSZ1MYqQlS6p WQI9tDMJ/mLqKcWrHhar6rwvv/gTpsbePtVR2GkWMjEHE1VS1LKmr+UcWFu3MJIH Md4DFnypp1n1cY+u0emp93JUMDMqa79FG+6Sbeaw5G+/fx8S4hpw63SiA1x8c5PM jKGwx5G4ZZfNwT+mAi6dHM7BTQRiqe/lARAAr2+Gwop3aV336fshBeI8NnxbymA+ 1vnRAEgBWO2QmCF/ImjB3N7ZfIKy3xaPEY9k4nf6CiVjytAgW4qOhss8OPzSBUBI er74uS5MVFPZpBalhTrbNLSs3SNvYAcA2nu8iDOakq3C3myHsSHVPHEbz271gLRK lhNaErqJu83TYvCZVjSnyjpdLK9kbfT5BhbG+nin+xqx8HdRKF7z/NiU+u1XSZQy nKeUJENzYTfMdPiE+ttyS6OFFxXzSHlT4X4A0eumSObqU6mME8t7qpC9moBpn7Bf 38C70CGpqh+p1izA8ZAnK44M1SLLpJDU2hcX1PNCQe7sNc17SX+or/Hsj2wcmEZn +CqP8FgUZr6CmsJ7jNvBqeyweeX3V2zrqt72jPlm7xfrx2OZ9GZ1BzwZTKyt6VWw l6PIPDP0kOGbPXoXc1QWomGEI8XEERhqnZmHmqgmhbHlZXnEjy0DT4N1GIfdrHRc 2MihqzIBQdlHBgmRDCdkL1V1ujpmIcZnZ4pKy8dEiSU7Wc1pLL0UvY6PVwJ+T6+m fONbG67GP6MNs7qo7+zD6I8xpgMq9ztbCuZKNc0/Axk0CchgSGiaOA4VF16sCvIP 73tMiwXJvBprurAZQw2KgZVX8I2oL7lF+YPQIuZhfkAIx7rZWmIq/NJoXGRFk2TM 4Ft7CPJTamjrIVEAEQEAAcLBdgQYAQoAIBYhBOR8Dc0naN+hOPzc1sZ8kYGziT+w BQJiqe/lAhsgAAoJEMZ8kYGziT+w+HkP/3eMSA4opQh1WKwB57Se1QHFOZsEpXcx r2RLv4ecJgeQhlU7gs5Ub4X+KrRxM8rMbYdTicBWPBJZfYpmeuG6UpwOViXMo5h6 adovexE+IzL+2QgcmF8MLDsoK5wLekq4n3GZy6BNPbT6r/xs45ggyJXpgeZ5/vpy zPu81AffLpnWtJPTLWWCzni2QH25PmYXMShlJezX8Eh6pUTApsCitSXzLGfjAjPW l53sTVHKBs2Eq60+CTiwTDWnEkWI1i786WvRikV/jqCAeEqsYqGBhhOv9xDBm677 Srm06SioJg0M2/SFGBtDSFjPr1EfCUKilIaouyt/XwQJLvy3boG6NLJhaF+tXCN2 Nrbi9MDqQIPcTiwQWE5cgbx2woBdDR9oTlwJnqEynDzr5853o8DJM54xZF7z4/DH FuhSmdvF31ikP5Ui+4d9hqJUkNr4E4Q0wnj/tft09nou2lFXVVNpuuhtx9Sjm0k0 NXRaZ8MHEsE/utD2LouA2jUGTcKYeWYP+1mtGUSqYQysIa+/3A5lyXVb4jG3Ov9P jmKy2nAVj4kDFsaPAi+58ETeMcUj5od50UYNFytXYJ8gimeJHHilNrfA9dM8pE7e WRGX5GgO+n7EqhAxyObcX4msZnHqr7gU5V2CKnBAHHQEBXKeE9SWUZlou6UXJYDE XMzIG1uBMRmk =3DzpVU -----END PGP PUBLIC KEY BLOCK----- --------------EhR1PvuSwroYGljSKoJmhKzG-- --------------kDPAPABtY0Bl0AwRaBOSMWY2-- --------------cCOXn6TAIfMP00aHWuBpjC0g Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEE5HwNzSdo36E4/NzWxnyRgbOJP7AFAmXBXQUACgkQxnyRgbOJ P7Bb9hAAtmm43zTOfHTPxDD5sZNSFzGM9/AovNlPBgWfBahHxEky9gsjHqInTd9e N6tyWEPu6mir8mNNUXYTC5UHLJzYjYp92JP1/8yFKMqvJN5IlYyE0hPTmSeZWFEW O4ig+XeabBSHoxg3n+2wwz6DN6xGgrrWNxWxj3zeZg80XNSRj4b/k3Hjb6cW/znB ZnMR8z9+rtJKvjcvsENmUO42Hx5OLzG4lNTKm1kYR8/dDh5M17FjE8mFeHr1aoFa xPPtbaUyv48TK9ruznXJbfLDKoXI2i5H+KizKAByoYGw6vfwxkQwcwAiSAxdlL4z Pn6QCGJd58qa7Xome8zpj+Keb1i58oG22nlhegoFNVVIhYiD+DexBszB1BbhKoHm Nwle6E134yvi5RTQf91iZB46w6B8PwyVcdsT9nDB/1pJ/WzUHmJQQGjT4inBNqq3 3J6dHJZwFZlhqMMAFCEa/ZHYixMQ4efpDCAvnFk4U6YxoSPnkQoC00CqA/40mbNr 46IepKjKADLY22UTE6YbLj/Kpy4L/AjLQXbZvZMLbQTYpZ7iUHfOiOq1L1BcZigz kzB9KIm+adwRambgWy05Ve6GUwc3D3Oe5kYV9Z9Hqxjc+KuWJ3owwp2PcWIrnN7q vMXIEOPfWAvnmGTYDkyhvkMKPRxKVAWGcdg1ovZLUinf5qreTPM= =KTNp -----END PGP SIGNATURE----- --------------cCOXn6TAIfMP00aHWuBpjC0g--