(address . guix-patches@gnu.org)(name . Ludovic Courtès)(address . ludo@gnu.org)
* website/apps/media/data.scm (publications): Add SWH paper.
* website/posts/swh-paper.md,
website/static/blog/img/swh-paper-coverage.png,
website/static/blog/img/swh-paper-disarchive.png: New files.
---
website/apps/media/data.scm | 7 ++
website/posts/swh-paper.md | 69 ++++++++++++++++++
.../static/blog/img/swh-paper-coverage.png | Bin 0 -> 65166 bytes
.../static/blog/img/swh-paper-disarchive.png | Bin 0 -> 55265 bytes
4 files changed, 76 insertions(+)
create mode 100644 website/posts/swh-paper.md
create mode 100644 website/static/blog/img/swh-paper-coverage.png
create mode 100644 website/static/blog/img/swh-paper-disarchive.png
Hello Guix!
I’d like to publish this blog post about our new academic paper
by the end of the week.
Thoughts?
Ludo’.
Toggle diff (313 lines)
diff --git a/website/apps/media/data.scm b/website/apps/media/data.scm
index e2a9385..43842fe 100644
--- a/website/apps/media/data.scm
+++ b/website/apps/media/data.scm
@@ -104,6 +104,13 @@ Steffen Möller, Geert Smant, Joep de Ligt, Pjotr Prins"
#:url "https://doi.org/10.1038/s41597-022-01720-9"
#:date (string->date "2022-09-04" "~Y-~m-~d")
#:type (C_ "publication type" "Journal article")
+ #:scientific? #true)
+ (publication
+ #:title "Source Code Archiving to the Rescue of Reproducible Deployment"
+ #:authors "Ludovic Courtès, Timothy Sample, Simon Tournier, Stefano Zacchiroli"
+ #:url "https://hal.science/hal-04586520v1"
+ #:date (string->date "2024-05-24" "~Y-~m-~d")
+ #:type (C_ "publication type" "Conference paper")
#:scientific? #true)))
diff --git a/website/posts/swh-paper.md b/website/posts/swh-paper.md
new file mode 100644
index 0000000..757db9e
--- /dev/null
+++ b/website/posts/swh-paper.md
@@ -0,0 +1,69 @@
+title: Source code archiving in Guix: new publication
+author: Ludovic Courtès, Timothy Sample, Simon Tournier, Stefano Zacchiroli
+tags: Research
+date: 2024-05-31 12:00:00
+---
+
+We are glad to announce the publication of a new research paper entitled
+[*Source Code Archiving to the Rescue of Reproducible
+Deployment*](https://hal.science/hal-04586520v1) for the [ACM Conference
+on Reproducibility and Replicability](https://acm-rep.github.io/2024/).
+The paper presents work that has been done since we started [connecting
+Guix with the Software Heritage (SWH)
+archive](https://guix.gnu.org/en/blog/2019/connecting-reproducible-deployment-to-a-long-term-source-code-archive/)
+five years ago:
+
+> The ability to *verify* research results and to *experiment* with
+> methodologies are core tenets of science. As research results are
+> increasingly the outcome of computational processes, software plays a
+> central role. GNU Guix is a software deployment tool that supports
+> *reproducible* software deployment, making it a foundation for
+> computational research workflows. To achieve reproducibility, we must
+> first ensure the source code of software packages Guix deploys remains
+> available.
+>
+> We describe our work connecting Guix with Software Heritage, the
+> universal source code archive, making Guix the first free software
+> distribution and tool backed by a stable archive. Our contribution is
+> twofold: we explain the rationale and present the design and
+> implementation we came up with; second, we report on the archival
+> coverage for package source code with data collected over five years and
+> discuss remaining challenges.
+
+The ability to retrieve package source code is important for researchers
+who need to be able to
+[replay](https://guix.gnu.org/en/blog/2024/adventures-on-the-quest-for-long-term-reproducible-deployment/)
+scientific workflows, but it’s just as important for engineers and
+developers alike, who may also have [good reasons to redeploy or to
+audit](https://guix.gnu.org/en/blog/2024/identifying-software/) past
+package sets.
+
+Support for source code archiving and recovery in Guix has improved a
+lot over the past five years, in particular with:
+
+ - Support for recovering source code tarballs (`tar.gz` and similar
+ files): this is made possible by
+ [Disarchive](https://ngyro.com/software/disarchive.html), written by
+ Timothy Sample.
+
+![Diagram taken from the paper showing Disarchive tarball “disassembly” and “assembly”.](/static/blog/img/swh-paper-disarchive.png)
+
+ - The ability to look up data [by nar
+ hash](https://archive.softwareheritage.org/api/1/extid/doc/) in the
+ SWH archive (“nar” is the *normalized archive* format used by Nix
+ and Guix), thanks to fellow SWH hackers. This, in turn, allows Guix
+ to look up *any* version control checkout [by content
+ hash](https://issues.guix.gnu.org/68741)—Git, Subversion, Mercurial,
+ you name it!
+ - The monitoring of archival coverage with Timothy’s [*Preservation of
+ Guix* reports](https://ngyro.com/pog-reports/latest/) has allowed us
+ to identify discrepancies in Guix, Disarchive, and/or SWH and to
+ increase archival coverage.
+
+![Graph taken from the paper showing package source code archival coverage over time.](/static/blog/img/swh-paper-coverage.png)
+
+94% of the packages in a January 2024 snapshot of Guix are known to have
+their source code archived!
+
+Check out [the paper](https://hal.science/hal-04586520v1) to learn more
+about the machinery at play and the current status.
diff --git a/website/static/blog/img/swh-paper-coverage.png b/website/static/blog/img/swh-paper-coverage.png
new file mode 100644
index 0000000000000000000000000000000000000000..23528f362402f121d3d337d413a06f8080e31415
GIT binary patch
literal 65166
zcmeFZg;UjE)Hf=qARt}RBGM_6(jXz--6?r!4h_;E-QC^Y-7QiFknS$&x?fO#&)m6p
z=6(Nw$6>}fvG;fF)obm~Iswv>!iey=@Xww-L;NE0S@zkp=VZ^GK_|b02HsJj-!TII
zdv3%3MgG;RS98l!OV6IYefH%upFCJ|ZypvbuW-$C^gCYvr!&a=hckLuhzHX&bdZN~
zSz}H2!ToKcso-=8^*4$gc;z;J*zIOG5eZMGpU%nR!w($w2X8(`>Yy2t*%-Arx`6wd
zH&dKPHovb8vv0OcSLf&V`)FaLJ$p&P3k5Ij0X>CbS!uXllnDLbd%WarVL_?SA3uD0
zPumX4S6z{O1M%+);7tKKH<<rkc}%{1W37@L$NE2;zOKK-`JY#c*xG#tcDf6H_XD2G
zu(o3KKd+QEJcwf_104V7k&gsCQTM+D{4WRoZ#nQ8-x?DGLp+7k@#<t<QF!Hl^tEjg
z4y-=EUenS5{L9LEPeP)1cYRi<SX@w0fcrt$yBM$iM&_SBdfLPLo5h%J|IEIacUYuv
zy|rEqW<`3#kd~ZmVD+C-{9uQEm$>d!aV3`KbhBT}(fi#Y`#+o7$3U5(QQ~m!U3sGY
z(a_rHUc9lM>1HTH{r47I4PZvSgj(kz|4gqD1+WwB&NiWcmbV0feqE36>@vgg@40*Y
zy!ui!n$7W|*#m=vjn_`f&;J>+lV@EWo0OE)w>T8bhA?V!@?6vD60*<Wz`xsjp2NQt
za}*U7buP6oIFZD*hReJ;Pt+3f?uEEzh2CDD{_y;0?yl9zVXrF&Htk$4J4fAQnlAig
zbTMOU`T&|NxR-n(EcWT*pquo{-QC(VxV;<9L5^78(UFmnv0}!f&Bw==Y^~Lq@_$-C
zOI93QE$GByk&3<DRzCBOAO2qeFAygbWd4tjyjj5MKYy|`WBGSPT{IM{zR8J+7sks{
zAHpk(|1D)p_3#%cSy|Ej9($B~iiqzl{?~bU#J%`@-n9}!z!5{QMHf3b{`2QZG6(E-
zwpc8nCX8fcLR8T$*E@yB$H%%WMrxFQTq1@g5>&X4I+ydg%U*deibj27V<U^Zjt;6;
zALSwh@&*lU1wXS#Q}(aMyk&g+cKEQ?yN`x8|83y}g?hMdeO*rSpH^g`YWI;Qr0WX&
z`wmJepaF>?8vN=+i3_FsiFN?vcWeB*RgIFy)l0XN=8Z~=&syd1&g|c@sZP{8fV{l@
z)DX66Qfs+4ek>Xp8rtvAo)u!w>1LqgH)QVN|6x-b7WCCi_S$(X4Iv>RQPDu!1M*pC
z%NVgLfnHy^e<TwEE`0@ux+dzM?u`LH8EyYZ`SL%W`U?Z%0QUsa{wI#AM{#i2nz8*8
z$I9b@Qp$D3{yR`HaG)_H0zAoo{09SCA7E4jk^QH@pQ+oz{+E>hFISd`XJab=F@F<N
znhNjY;6XD}!7Hu2Tr=NHnrdA_LbY0Gc@xiR95E;<wnx)>By3Pq*mpnUkAhVZOKWIc
zcQz=YnqFNwX8Om*3S0VPxL=%DUmP8A*;1I_<%H&HJ@Dcwomy_bVp!Y3cUXx2BmEyA
zJevlM=j>fjaCc6B+0^>_ynLhhvvLzO7z<)|av2Qci$okf5ix=TR?#>v#Qt5y?YR<>
zl-$@_R5-djMY|C|Zt?p#{7tjl?PZIjWA<E4@$d+{5445FK}t$Pgh@4j=2%rzR=;4O
zEDH;>aYBMTZZUlBuXzn-TpC4|`ns>>;xh$qO4B(HlS_dn^S?NyvubMEzkURlML(t+
z@BgM7?@%D+rUr^5BR_t4ysXvYaRDQ<vMQkmr|`I|>tz<?<%#CY7f!bNsh}B0hK5c|
zo=IW9Gdnqp?$<{HfdUc}57Iw<)>v53yhNCy=Hjxm`X-vKNX1MseiDK!5vg7hHW)oQ
zX~%P0H}_c&EDHGJZYk)$X0`Cr{y@`_(z$nUCev^Pe~QYGan{zsq4wq=QTKOLH?pB2
zmTHrvUr`uwtN;=<hv1V5Aia~;RI%NI^fcW*x7qj}|3NR$>-PX<V|&;jrC)M#&Xeq%
zF)3&oY$<nZS0aM!?7DHylU0kms-}SF;DBa!{p088eAPEZ%m3N86Z9G4<SvUF<VTp_
z{H`+A_YkD*aaI;e%6A_=aB_2tzdNp4C|0R7e+)Q1@eb*a&+r_<{$Wz>;}d`N5_?s*
zQBaUntf$EjL$c@x|08gPRrUH$vHqj!6|yN);etFp2gt1JA!=I14}x+^o#0XuIX
z*7JI@^CbtUE+&!s5D+e|NtkDIdU{PmPE}4$R!h2Qv7#{(e07dYp+ZAFGckmp>P4}l
zPixw3{zp1OFz)Eb_rw-$ZBUW=+-`;m??(BptR$P8B(uNv^>e6cT74<bw{f`mVRDp~
z>Q~eMQtG)$VpN@s4dcr!Ro)O7R%8bvZ0vkLKY91qjqk4q$f|O`cnZTGqbx(pT{njD
z<`frTKPL9-p3}624W<bDnP&pWUb=*a5V~Dit9~(-)X-275WuVuP9K$Mpx4OB%ONYO
zSQd^}v#FpcPAn``%@iZ@p{MP@_oAoizq+}BdD)*OE49XbbcT3*dU||3md)9wWLf6U
z&#(OXvos%{qw4IsTyBL_>Ow+HdG{!*&Op`;^sT^ydMX+9u8ZWtcEYT+PX=GMiF`iQ
zM1s=`5Px|a?;^3l>gtNq?rgzNDvVavp=l-DH~wm3<+%Qw2!evqj*jaF29tFt55x@}
z3p7~)vHeZ1uFcP%yZ!+5I?dmo*K6U(LjbTs>%3)sqep{)<hJFHH%cWhc-N<Hh$o6-
ze<q-lm?f(g@=6oMZhxyK4+d-NMx?g#ka^o`#U1k5Qy?R2<WRT}i;s;yTV~4%d5<<f
zvtcG1S8)<1+8o9<Fr<><?QMC>YW$P8>x*!RevxML%?(k?#l>!h{FG@`_1D}W1YJ&M
z-S_nLQdu4FXBYg#U%oWU$!6&4@}r0>+Z!$*Ao%cO)7%)zd>Ia3RT-0k;%X489*8rT
z!7FDG18A>^%8J|RA7D>(JifGB-6UR3j+-5>0b=P22HXAaRAg@J;XDU19i4pbz{avK
zC54g_>(KLl{hv$PJVVEEI4#Qf&(LKuh0gF<XzV(DNnnw(>;hhY4-Djk_yv3r4^3~6
zb73S$j_JmmQuH}P9LUwYKCb;9cr9db+K_!PI5<A9wz9l==j?%tO>nd@SX-s=Jk%lP
znLx=%#9`7+$=&v%!espL=_%bNz3uLptMX=**JEOrB=9WA*Jxy~zo}}!VHbu*nPH(s
zH#UaEL!}T8gzx#V=b{{v(&u(kEn!`)R$89ffrbuELK20Dc&0FUHpzUZpb%Vbry6WA
zINP#HuI1`*Y7?r$jk%M(_cQrse2{8~x?o2Kb7?cU>o+!iG^9Q;nJJVwHu<%8aDt3n
zqU(P3e6AGHbq}8D_($ZAYZc)fAOWaev^J#QvkmZOO33ivk4~;##lV6FI$w<GJ{3qa
z85*P(6^zIh;(5pZ9*+C4H>D=b5yMCRdn1u3^zNooK<C&BeRJgG_ySw??eXzB0;2I`
zLYu#THD2xO9XuXK7b!93s<gbF)Q1HZ&f?c%O|nFkik8)vXBrB@^L7&I3?HQ8iDMll
zk!0ZKcqVsxmOC5uNIKd)zi>Dhe)?PsfrFP$bA=8Lwp+&(gnaQCWKxyzY7+ADJJ>1Q
z*)7CfgRB%g7a?o$XG1=QxU(jx9~IX)UPPlcmj1q(dVU*exOmGcx)R@*I@MaDxNFFL
z<fEa2PG;L#7%L!fC%}JO9^2$9p>O;gY6#SPHj_^01&dg3b&W}m;QSp|CL!`-6xp75
zjljX26`j3VGG*k(?XJH9Uc*wI{=xMJ-VwHvQnqT)gZvKJZNN+MroyqgQ4oZd^*!?5
zVgZyvee6Za?Lt~V=MPm6VkJ{l*n2{?x-v0lI=a`cd*kHByHj%3j>)yPrOzGWH8MT)
zUQMu0=$`e7t(YH)5adMRj%cyDP~Pa9Yrqkn3b-HF=mpc!extLuwwX4E?p<U+A9Ima
zdVwJ2OLIv~6}?ka$l7`i5!|6|`UxT6DZab2b7U(QBj8vp?}y_^IwBX<Y*DYV-HsVI
zx;WovHW`n}E-4A@4mxb>p<#OFg9vITA;4;rylQQ2f};))xM$oCJdUx9U9PnFRil4p
z13I*Hb}%YyeNQHjwM5>oSlZyEp`I;kiXm#JQ{PmfxV#$LrQ=z0K$rqXX`e@Ik5LQr
zYs}4!ZA{FK?HUwbIS8m#a~9FBh&#x)7{Z!bma(<c>9fNG>ozj+@DMy8!MxnoElS~9
zJu2M+8J)kzV^lD^({`o=YNP6E%xHz~1=+>0FbXp$Y+TP7f-DcT`w%&JAN*a@$w`B_
zPy7t;W2afD!srX2(nA^>>7+dA<f2rA$@dZx!dkyv_@ufXSctf!{UDgo<>m{H#$ApQ
zDzq4hPD9Ng#W!1UrbA^EBMy`;w1QubqOKtP{sz^n5`2%ejLMQr5>A$)JN{Bi7OtgR
zlT^J#-Xu(bm<_`Ewhh)D_23)%;gN%x9(D`!gA`|@!?o@CSmxs80JPYEB%LyY<Yn;4
zEw1v<s%K;|_6K5%HWa6A{m>5ahk0`rcHOyMP4rR$(-Xo(U-R-QhesywlvES6sCr*#
z$HsO|c4}O}**L%*&YN#}w4@)G8~R#p%*SWXVrchGk_E3OQ<M$`g(72L`?%{zMv_!o
zO9Gy}$<r|O6Pbs|)@493Ha&q{{%#o&+||bqJnzL3m#5vjSg*~*haIDjs!Hh^4d*Vb
zF%5lh@0vSFni5ORKbxn3D~8m3Q!N|1k|bWGGsI*3NV4L^et&f>Y8ma<dl-sF;@zQ-
zHnJjh+v06m(9~2@QGvwHlK7FN?ww?ZyNLbL=H|S;SP^*Re2zSc^J<%(W3jiD9P$>_
z&A~1_>0cg_I>2T1>Cntc#?Zn}kbv7;b+OIE|A5OmlxTH*{-Ep)dIX%S^D58gQRRgu
z<66Z9YK8U<F5X~dM8t1Qq&H!|JCR#e%iI(NJx9>m&>X)QYbw~mvDi{$oWUJ8qpvu}
zjmND-GyyqeSLuD6{?9z>M0KY5#@_B8GME={`ABoV>36J23wUL)x93>!N#sv-b6K;K
zW&iSKW}}&UE7|b^jc~q0i^0<yL1HiEL#~c4<@2z{g9eNK2nl3POD-eP66=YA0zAX{
z2L;Dq=t3|Q>atGrjf0dwvRL5sVN~nDwWDJ$0uYmyP`-)|2JV<puLr6+3ecWs46IM0
zqV_+(mMB}|D#@V=&f#WJtPK~t?65C6Y?%usVn<!JQj()B&Gra>$v|Moy}#5g);cwT
z!NlC3xVUxFYZjTC+nZf<hp^Ec9JUpRIM;HDjy#$`$fZXb;nCH#KqB<}bDM2<VV%oV
z#MiYxLXlD*KkJgMDaw~&!%U@V6=iv%3wiSS)w!eCNo;b`%EX6gt30Mo?g-pJ9HN^A
znwW3eA6Obhb9ibP-ZFkW-c@j#-CUQ%wNB=)WF`BQt|t(o6{e!5R3c9?K#gE(I%r}N
z#JqzWTqE=Fi8fvJJxz~L;2=5D=0<YzhcnQ|?e1dvd7Ptyfk6O}dG2nVt(T*C{2C^g
zGDkoP>2Gu)d)G9W28Et2dyvB_7u8)v;W58rqM)atk=<0zcTvF^O{c=navl@AiH(&k
zM?qcg3D+3w8|p8ZAgT|840qf~Ciq!Q`2#&o5%{Ek)ZtKr%VJ1<T!Pd2fY+;OYo^zb
zL@;+dg40wrO{<kBXH+7V$rbAhckLm!J6W-`)@$LgRLx9dG#1z0&_PU5{S*hAJCcGP
zL(3tBcPcI#UO9Z}GE0bl65tToSl*U(iSm3}PD)~XX?;c2*-Fse$%(r?@*ZK0_EZ?(
z9nAwyTgpY?z;%O@kNgTDAr=b$7KwNQ{61f&WYP$iJ!5SJE|K+m__&WXcIg*nx~|4R
zaq8nD@XI8owNI%v%pb~4bzMr)$sMAUHuMgSczM}U=1*g;9qaVue25n8chcuv3U0Po
zOI6kkH<RksEfw==1ee}@XT?JL_U+c`{B=k`Ku{ojk1X`Uj?asMVfy?Z=9RqV&Ca8A
zYBlSvg(<<`CunWFU-Z7lwbaOUQLnI(TAj{;KzJ73`eLn+4<E0>o}6fqka&$V{-nzS
z{XTm28c|YG64zt6_3Gtz@JYgl%uOM0wR@sWNxmfsb21O(+<^hzTh(u6UpCN}s84%G
zvKtx-8m<FpX9s+JO&s-#f4qqnEm0f{_ex`jf@1Mn6(+Tp##tos(L#fHEkekkt(?kz
ztbF-#mf&_2e0S!>YCg+h+xHs%kV*(46#pT|{Q;v#O$dk94P}Ycz-~cy^qKpf+4x;^
zj-sZ#x`w)HVz@#=xPn`KRY`_oz@2%DX3DUG!x?|x%E89Lx=*nUI2Ac1Z@l^U=7lhV
zi+Y$70p8ltn{O7N<O67WEs$AAq~OgK<BYSjvk2!gz9%*z(b3sigp;G=?gl+qHaLq{
z$*FB(w?J&rM)KZ%Wm@Zk`$A5=Zm+wS9C6Eeozgx1ID5T%auU%QNrThAAuUVQGv@8H
zE(^|y@2|>bvd!Hp(ywsFc-)tXG?#O|j#>mcpKa|^cb206Y%BX>W1-VDIXhV1@~~*r
z88S(Y-rPSlv^QJ5Yco1L(oc!Ga2#?GFg3+Ofzb*p3-jQ-^u=_(_1?d|tUpt$wTqBz
z<>-dVzA~X+iG;fFGE$0VdU89b-Na-qlAJCuXx}iyNAXj&&Z(^9s!u3)L#e?XHl2D&
zarDIwW~h4_E?zXblwmTP)%H+)(tzkKn=K*&LR+f@7}HdncbYQtfc1EMP}JP8`kdZl
zJFjVQ6CR#UQGR1^9aGi3S@q(YbB~%e!k2d|B(%0`RI66F;EIoZUhTB39p4ew5-YLy
z_!PCZ;nm@DArBvkbqFEdZL4o61zD&Mky4I9+1SpQaIB+a*P_d6<YhD*5BT_b<0L7E
zeeux1%-NJ0!WEs)cpMgckj8Q?PXi<E#f313+T=EE<VzvJ7lOimq&>vQ-{kGrt2KhE
zM76#gXYXlEgGy*9_Tn+vEWiW5zchF9-+5PFUOcF)jvdRf=h9;st}8_=QSYvah@Csr
zkRHbf*-5n9Q@>{!e@OB0qYabdqZ(hI<BfQUOpmO;E6q$56)4n{Dm(+BnE1{>&A|DK
z^*sb?3MD*tx7xUpk&#hWR+ff?2}v<A(pP<R)crf;9XoplXz??#`*+do_HkZBM6gT~
z%$(kbA;{|>_qt>HmpP?jz4S~IQkRH1ovF`mdrmtLv^F<bXyR^i_NQ@_+)f{48y$JB
z)`B;xh#I}hsRC2|FJlcZ4#o==_rnJh$)v#V$;c*?232|r9&7Vhy1STJyRgr?yQ$(^
z*ly6-Mug2__Gt~Dq~^Te$2Tl0py26HOPQI8=<B1Pp}dmXxw`t2=*}MAw+<$SV@cf2
zpmr%KIe8%YXnwKB?!`6FufwUa<?~DSz8s>NFR!S5sAMzilVd#YJCw*eH3Y9x)CmpA
zww)uP7Taa&d~k}){Tv9!kCY{Rl^R~cdl7$B?k6vG$+?#FDYE84d&a;FWnv}TN0YE`
zepz<W-$#O$EC-t33l&3GsnPwbzm)XboRuFhQ+ekPvk79X;t+7G<JqHt&|;uZBPfLP
zF_=b~hNty5-bk^l`+Ji`$39lkR8oQB?M3<a_{~s)T`{|lT68<cd?Ki%*)|`1<WcW>
z!?vf!QBWv`5L6iyR7q7BScZj#6OK=`*vW9J-}o$gpl2t6aXFYmG&`fA;KicT%_YpG
z-%A+ZWx8S$0mu1<#3n4O=v11vxn5-Cc7^FEMMW%3Y^|aa${$}%Crsw4eC5$Tfkp<e
z_oVktCNU8*!&Ovr2dUv1418dp$!O+B70O>CzBm@;GAt_#HCbw-^DjS&-P%g4nYt_i
zlk8%)N&V34WjxX&I316x=CUDUrKKe@{&5_nC@x-BN>8Sk6%ep&IHI6dnjE6~v7-pH
z5c$r&C9ObFMK;^=I6|`S#=eXCd{L`fHsD!CONHtTMQ>!08*w`ns?NPm`Z)^rY%!q#
z-ABKiGyTT+*mC9G7Yyhg(>Wy?&S_P)F3ON-Rz%x9I$tFnL;g(Tul3=BW#0oxl-I9X
zA8vLl4Ad_6Z+5!!Q#(2u5OKiGv~!>ga{_LkKEvsS=;&xix)ON(+%7yx?{4T@{~l^l
z(ZTUbn+rnjjTY?#Xa2S*2loBgWTM6fUDr2P&`mA|aPy797$@WkO0lugS|x?FG6mij
z8Cwgn8P1V`Sgl063vU;uluk>K%+$v2V!n633Kp7~a>93uL_$EoXJVtG%x8su>2h<u
zYuci5I-8{OFs-=WVfEV8SjEji!BaGV-ciC_h4ws)Ri4U@zBN*>Idgse(vASAX=o^h
zG<3ef54xZQSQwFPklo%H1O&{ltaLOwgtli?Zr|8ntDqp_ob+bx^@U?OkE`c86p!P1
zG%wsB8EE#=G(@R=u#r84%WOoDxYj*uzw50yE_pNbT7%BK&FB;7hjwzZxAnPNJIn&E
z&~EPJ+PSrhw$B+HFykZ48eWgers)B_>rWd~$Av)W&S_2L`g%AhSITkLP)1Bghs^DF
zjf;ADGXbxeXA?)Kp96>W`_-+n#VPYocDsA5P1)z?3rrF+GMZn%7A^M>{Kn4j3<|QL
zDikYoXw3R8E3r>%)`$0jv6>y7mC*IaUBJ5Doi`$yB=<R_g6pOwnavG~ZqZp=;cMP>
z)|cmD{&{I>drR%Vz5IC4-=MND7eFqT+S+)#DB`&Jh9TbGdr=)VJQ$s`FQBnGW&I??
zlnn|CBlWNe?$KGUm{|&>;dB$)c;}tvrJuKz-_^9Vpt|yLT}q`=tJhIZ`D?k~-4IPT
zvwm%h`qlyT5-}luCGwOBqYYHiea@OWQ%qm0MbeIX2{oCJYyG9VNZgho-4xL^_t?*Z
zyS`c5+A=`f7G1r%SV={CE3K&Mw|Vsgl~cgsoFB@*2peNMDr$O~DKC1s)#5F2eQT&+
z=)`m6J7%gXNDN&x_!Y-yg3^@wtpS=={2ITapcScoj!8L<ze7io$Q-loS8TJu)-cWA
z%LA*P;o;m+#DsjB)88e6_h$&;eh_$sXry^$zo;wwO4)Be;gwneT)RoQxt*OwVhIYW
z-c9Gr<vKh#Sr-=utyGQ@nV;!35(HbwVC+BKEb`bn1SPnh+9(x4iOGW@a>cSb*Duh;
z6ehdR5Z7lPhVQ^mqDM_KCeu0sFdCo+Dzk4r_z}`DrDeUoUv-3KBqWIKck1dLiJPPg
zkA*a8bAmX3p{89f<@y}BQmT@ksMRF#cBrCd1XIevgb>W(q51~gxE*(&@6U}cavwHF
zMEp8S)N)-5-|qCiJKhpdz_gCqO({e<@lDL@70pE=<a}s{#bcoKDfS#jHgtUVk$ejO
zm|s_1nv~Q>SXgfvnZx$E_w<6@QZSvO34396(KGHiJ71xHSb+1==GwDZubDW8XzkE&
zHMz9X*iw`ajVzc^6R|qcMUFuQ_Xr4uZp3^QOK(B$?nArUs}Z<~Duo5n*6fNuIK$WR
zM?+Ys$_@*z9C^jNSSZ8x)A$H6&@tz^m@~v8YD?)A+ufZ`o0pqA7F@SCwrky~E{;0!
z42RrFf(=lW)yUy3b;iV9<aj_sMc=w-sXgo(ur=dOXH6H)A-4?{l){B)#~}%<n}YMy
zr6nr}qao{SDU>u#{%p@D-y%9_XvE7Z1Sqv368^FqNs_?|sFnUW>wefAx#)I7zHC>+
zCJVI2w}0k$WQcS21l!`h;tve`SZI1OnV@RM`SSu!2THNGA;<Ufa?9<aI};9)C$Ck?
zX6Ll;Q^hrnlscW4M^8CCwyx9R27fz8U;2|}a<>8|549YpA2-dp^j9C--fVl53@@*;
zsHnJ$%hxYo6zuJd?W!$c(K6_Ukki{QKXR(aw!um9$DQ^i{@BQug9XjmuRxAzRoHv2
z_J5?iJ2|C|voatOEs${Hhjuy>=T!`+{4Tr%pZw%`F+jb09Ea3$5&6Yr7xP32lQ5wq
z&xBXRi@7my0Hz77O0mDXkBPd2jYH_clyXT=N5)ny_L+J>Y$hAI^+?Yu`kld+HYbr^
zCB#liO+${jx0Ip*+)w@?2V`a@ZJTvOY-MwCgn;;yRK0G8{??uO(%1N=<>olusD-lV
zYt#KQ#~Y9aGZnR^KGcY{-Rzbw?e;{zSREJIx$8+k8OZpT7RYhI))W_SmriShf^N8{
zWuu`1ExG|~P$;goy$dGC{)hqR{u}ubsVx1iK#<>2cp3#2mF4BpfkuP!y^1F?x3a^U
zNQ^vMj(l{!d~ltf$gA@UCY=LV%6pW>tQ;Xya$%iS)O&$4gA7v~oR_I?4b1e&#vDg`
zcoEQGy$BdJ|99`8rI9Ptb^DPA9WNEs^Rm+U0#cPBFU-9N1P@zoPLEe(%lF}AHnzrG
zq~Zf~Y;WcKgRSY6-lo6S#dhH?m-k!BuYk7^2xhjkPJaM%R#pL#HK)8qMy<4MC>$$Q
zfu?hrM%T5eK<0FFD9P9404!a?-i+RIBnB4|T}|T^i$E;hNyb@(wj<{XBj_EP#6ita
zVaH^sT+bY0rgbi;v(de<+VeYAmmV}*Cd8_e3kNVVzU^xKq17-(??VuRHjYTEs87@9
zAZ+)C`PuGpRLZk6Oy+9LVEDCZi?42WB^+2G3F@|LO+L+#%S~>Yp;onvu&u4H;-}iB
ztU0A++pvQ|kYb-7T`LmIs>=ip;^JaAjEp~vL5t}?e`BS);o7g2!NI_(y+pxBqfw~!
ze0G0krh6-BcotM8=L-vTdtKH<RHf7C7ff`)F~az=&(KG)83W6gw`*;#dPky}R@MVd
zisAF46LNE2x0V%tN!6B%o%uPcgoU+De~M^2;^C2$q?{{ImfeFy*))aQ`kENjkeiD(
zXfGo4b}X5H=LK>W>CtZ{7f`u{z1V_B;tE=mNKrvqT}{(30_VG<G*~Ru<3s<?-}V=h
zFFEI#Yk!qp?1HYv@l7c@NifoQ#h~bDX1h0`u1bmAz&*}~cj`*+aL#!onYVhn8RZc^
ziy`G!@CZf_`{2zvtM`nIC>$00#OSYMcDQekqyiMqqV@x8y$czjJg`w_y0vfXQ7I|M
z^7F^QXM{=zdzQ8|b6GaVKB;c5OVbG1)h8SEq)JNhsUZDYi?MX#hWD~)`L(SFd@%Yo
z@&lL+Z26AQlXb%MXB5-j?r6)xu<^~WaCQsL%4jGof4U-+d!112F0W%)f`L2lbH*+R
zd6jOr9>FWcz3k^9b0O?DLV7+ERyUi{T%Dpsnm?zR**lV0YtuG+B@G{T=l6rD=J8Z_
zcB3nvJ!F{*y$}|@_VK;+fl<@%j1;)48N*?X3{9`HLPeHq+kU)o8w>lmP?6dGbqu3v
ztDhUMN0E4OW1w2tfnca0UrA@x-itrj!9i!&(Z5xHaQY(dG{i4<aZ$54y6a+hoix(7
zr_0;nONAe$eh3Y4eH8{|E%?^TGnDXbMb8Lr?{rrC?}RHDPYOf}aW&NEGmaw~F*H<d
zr1F(S)M=(}YVM7;{RSO)tVh|#;qhvcM`(@XTo#kc-nZ1vGhvPbcPv<s2otE!ihNM;
z%8JkMAVH!gfnp}7C)CymRH6er;W6l^Qt>keMim7|Wt!SxW#tR*{4W7x^RkGi=JrJF
zx@SF|ryv|GeEl8c2nQYxl(}N+RocN20#o3&Z5FM}uCH3JH-uCyCMr5w=Od%N&uIL|
z%@K}6v%{V>FIZ%^vq>eeF}o8c3W{YXBI{5pPwF6)dGLo&IbL;Wsn*|}H3E*;ER7_i
ziQ>LPNqrFqc=!;|KvvhiYj#V{f{RD)Cf(ijE{~?xLuz;B+|G>=^+oJ7m63Szgd!AS
zE^yzctpb(kt3JwkI`lJJOsQ0p%Q)g7wf^^STW|Ht^P9ug-bC4<?Ku8)@cq>$&&^&X
zeaq!aCo)f$X7ER&k)b4Zo8bgzAUGAr#^$d{ZA^?Z0-8<^uWh}%K(3hDm-mL##^g=R
zE7z<Aw|n16WhFCWS(eucZg-xCZgtBe>(fXfsSc-MTYZZUK4V`KSu8m2#$!I_(kt2$
zFiK<4tG4L6s{r^56d#X${t`@TMH<Z}@O*<Ef78q4iHQk`L>9a4pX=?gMC$d{+3cF5
z+&6n1hfS3xlLa^*4PUK0UmOH$n{NF`X9J3GP`n)6Ab=7&f9rvbj1fBp{KdpfV#UZC
ztt%$=Q&5&D1~<D}h+puKULW$BqQm~Sv2z&ZusLYd`q?_;LQJR5a*&WUjtxJmS<rDB
zKr9p9OfDgU!&vv6`4sIDsX>5VCUbt3kdTm-m6ewEwg{$16{@S_T}HY2T#ZB$+n6m8
zkN~k74!zOR(kc>rhoC*!0RXBvoX^cvRdJ!&#-sJ0z$wfmdd8ygL^rGw-IW++-+`7o
zBYkw17EMc(T#S-*bhMU&tj~+o;X~Q`MQqs;;Li2R&*wKj$0wThh){nM=7d`W9PCiS
zQK`XKuaPBiCwS69L@I9=qT1*IJQXAK5H~0%GuW`c%vM=O=7YfiMkj%ie+G)RD<EB^
z*YykmK6ZZLB*Ha;wLd0_1$=MM=RnGqF6+@sLwoE&0Ng7Ev+W_pFVu*LCpuP3T|r(}
zNg+2cx^Nv{A`^`sds<LQr0f72<IS7-Y_--`i(zjyRPEP{gbSpIQjv-X6K23!2BEu?
z1P{gvCOM&u=)v8<g{<i-2*uiLofU~H5gwi?1h%Of2A0(f;xYf*7fNOD<mTeAw>FOI
zW6^tdb{tq%(85sIAc~(bg|@k8Doe8J{cw4PD7$9q_VP9{!tdCZFpj-2T`w+mQaSDq
z@Gv~^*F_e!_haJnQjcTc@KXTXhuK^0%&^_A0Q4<!`Ka(}&Sh;oJ3B?i7!>yE$^C%=
z(WH*u5JZHfVHY<4;@_g#5s6!fu3&FyMKnk`>;9tH#al?=e#|F*^}`>Rbsl9X)bl};
zkDw-$YL8(4M>rLOqq8%f?$zaO3R`YkTAOX350~=hXsS}ayl?c9hBuo(7=W3<cE3hA
zdi7*{KKy6D#dr?66i{YJudW@@1$6aj)Oa491I3aybj_=J6y(Y2>E|PzoqhYiztop?
zFEG)a_mQj>6c;no#3UwC<9C_GFRKs&kOdlQ%az)uUM)>}rFx{+^`14pJ6bjNKU;-C
zTd-_JbBi!0oXETX_)0Tb;pp(o3buvIb}LLL(WhCL&8@p`_(=6}pIOqQs{yZzyH()U
zCl5!8vjbeHVM_zx!`Lc4!i~v;Y_yxD^3d_t5UHn$n4D@1uKFX%5%T3O_GUgh{r-BF
zf3`cldjZ1HXk=>Ih9ydZL!x8gTsY~A`yiv&yHj(18U!s#?eSd&HdM1gUEYTkPjQ+_
zQE?DK)P!zh+Kz}zcj+whh|D-QTBnzC={<CyP5i(qwuD1XOGbw+R0`$`GgRwsn@@R@
zCISvRcvvB;lU%+=Y6R_r-;Um1e|w35Vn_@}RdTl;tF_>K*bMw#fZT8J;QhSgs_ib8
z{hUA2Ph(cAw86bRdQg(oyviZiJSXh$p-x?gj~0szYV`9<Y)tIxom1POM)a?@SAX#4
zZcak+)5!5ahZk|mS>hQdP+HTpcYJUiHvnTj3h0QDsEF_#Cu75@29aMpx^?;x>#!E6
z=@{nRFFH0B8INVpkI1df+4~0$=TKZ&Seq4aH!l8ak2~ysf0W$CK$BZ`v_Mr*#@JjT
zxuHZRcuxhlTConLzUW;<q?4pLTu1;?NJz(xjktWD+!N4DJH&&QpH6>{Ux<!V%>Pw?
znS@9<6+Q-<Ee;j~=gIU&X-w}a0KcHsywPLw@zz1)<cA{1pr9yl+L$~uqEmR`?OWGi
ztPqGxpWj8##6rRSmX1MsXOsGPl8gI0dvO@#t3xPH^HMupJ;dPAuf<@N3HJG5Aro@G
zA&w2B%20q66%(_1u}zGIj?VF`76@L;vuYOg*`3Ts{P6yQ+NU9vAeW|_19pLp1<tiV
z^PWL_77$ORox`k;7^XorJdyjuhuUF5s&i`1zCWlaAOzw0sDq==5|~X<>~Lxbx9coX
z4xt%24Zv%WQrzuDkPN{f)eVmB@J>Hu61;*Vk<4WU;8f)Z+IY_PnvMW$qIOp@d9Wbr
zB}~i3Wcac`MC8icuO{&C&*!kI`x1kNGWkrNI>e~W*B5&cZ^mh(zd*Y0b+m5)Y)&{l
z;C&J}91eg7)$8>lnYBgq>(iFoA1(xgj7C%DPu?y(oNgq7R<62$V5sGe4=ToL*&oa7
z)w(~yzB@J;jG@E`bXas%>f@vT8LnMP`3!1LlgDyxrG^Wev69;RLThrOaKHp3IB=1O
z>lgtE-+A-4FDfhekk)bQs(QDjZf<@U6MKbr%tuf``4bIYVR4=rq=|#1v5bY{Q^n$0
zq@J_=1tR==`X@w{ZHdP&rrby60@uM<`qrC+MxNWFPCr5?5iKJpC#S_0SEJzsAYss|
z28wqR6Coj(oQkr$!RcuwHXlSa2s#!KQLF3Cc~sOQQ5u``IgR~~(IocM-O^T;yFj7z
zh@m0ztlZH)<pFXmTIPzPURmgP6;gy$bvbIKtIKO&vaW`P`bH*ZM<=mzPcDW}Kgr+n
z{#-d5o$MyXTYLa_EX7?y(iHGUCI=
This message was truncated. Download the full message here.