From e9eb6a553ce8ea33991fff73f7d755e34a80f1fb Mon Sep 17 00:00:00 2001 From: Chris Toph Date: Wed, 23 Apr 2025 20:00:11 -0400 Subject: [PATCH] Setup git-crypt for secrets.nix, enables gnupg in nix as well. --- .gitattributes | 3 +++ .vscode/settings.json | 25 +++++++++++++++++-------- hosts/common/core/default.nix | 3 +++ hosts/common/core/gnupg.nix | 9 +++++++++ secrets.nix | Bin 0 -> 12315 bytes shell.nix | 3 +++ 6 files changed, 35 insertions(+), 8 deletions(-) create mode 100644 hosts/common/core/gnupg.nix create mode 100644 secrets.nix diff --git a/.gitattributes b/.gitattributes index dfe0770..a69f8f1 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,5 @@ # Auto detect text files and perform LF normalization * text=auto + +# git-crypt +secrets.nix filter=git-crypt diff=git-crypt diff --git a/.vscode/settings.json b/.vscode/settings.json index 8ef3832..9dab74a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,16 +1,25 @@ { - "explorer.fileNesting.patterns": { - ".gitignore": ".gitattributes, .envrc, readme", - "flake.nix": "flake.lock, shell.nix, checks.nix" - }, "editor.formatOnSave": true, "editor.formatOnSaveMode": "file", + "explorer.fileNesting.patterns": { + ".gitignore": ".gitattributes, .envrc, readme", + "flake.nix": "flake.lock, shell.nix, secrets.nix" + }, + "files.exclude": { + ".git-crypt": true + }, "terminal.integrated.defaultProfile.linux": "fish-fhs", "terminal.integrated.profiles.linux": { - // ... "fish-fhs": { - "path": "systemd-run", - "args": ["--user", "--pty", "--quiet", "--same-dir", "--service-type=exec", "fish"] + "args": [ + "--user", + "--pty", + "--quiet", + "--same-dir", + "--service-type=exec", + "fish" + ], + "path": "systemd-run" } } -} +} \ No newline at end of file diff --git a/hosts/common/core/default.nix b/hosts/common/core/default.nix index daf9447..6c8045f 100644 --- a/hosts/common/core/default.nix +++ b/hosts/common/core/default.nix @@ -21,6 +21,9 @@ # System-wide packages, in case we log in as root environment.systemPackages = with pkgs; [ curl + git + git-crypt + gpg-tui micro openssh ranger diff --git a/hosts/common/core/gnupg.nix b/hosts/common/core/gnupg.nix new file mode 100644 index 0000000..230739a --- /dev/null +++ b/hosts/common/core/gnupg.nix @@ -0,0 +1,9 @@ +{ pkgs, ... }: +{ + # GnuPG + programs.gnupg.agent = { + enable = true; + pinentryPackage = pkgs.pinentry-gnome3; + }; + services.pcscd.enable = true; +} diff --git a/secrets.nix b/secrets.nix new file mode 100644 index 0000000000000000000000000000000000000000..9dbfd1b1bdacc146f620fab07060515e54d73a9e GIT binary patch literal 12315 zcmV+$FyzkwM@dveQdv+`0Pa~(F{8%*lE)r=pTT+iqqh$(@;Ka)H7BGCof|P{TvE+u z`Y~ec-X*BuGvnPaY-p}L8!tYBGqCs_0}^d`w}~?NbKQn+OsUvi*!tCq2J>|zjP6pO z#FMFc+T?qvkOXzlo1dC+_%D~cS+<@tPtF_NXb^2<^~b?+=u# zs6B0;C^zVod<7t<@M>?O=1&M0Up!fli0pQ~szWUs_4aD6<0%|K#a*D3GNRaj;+S3X zA5d^hiUV~?{D?kuURR>t0RA@^gqt1H!p_E8-}gMpMK2Vnoy_{C8)cYT<>sy)I0gnH zwvpWt^~zEE4xSR5LEIIq2Ro4_P%g~&UmGBb;1i)E1^-BZct0y44Dx<8>X*`%utnGC~%ea#DqrFCFCao!WRavfG^aDJ9k#GIbrgE3(q2%E*Ej{Gent! z;Na&oV(YH1_s`=eYCI-LsK4E%Mtm1SO-UzTrf#JCOJY~QJ!(Gfx6g>7P5+V@;SwYa zgj4bi|J9ZpLS8T4R8D~+_o3L%4x(&HT3`d!Fc;+1KhyEd?!>ODEqADv6Etg4Z1%0% ze@~mFN@B=O{{yVmm#5#3P7+w}7BFu+;;0VW~Bsn0dmGa2Xr?AuBrRlyyOdydk}ngS@d1UE#f4mL zmOKCL8bp*ta{}|Rn;@$XJz8=syHwx0F$fTH8Kx5=3@X9qfSGA}y{W;3!zd>ReKNaS z8sR8%A@ZQV!J^6*;db#XiGy!hGOaRDpE=Lw(p(PJaZ- zuC+MT4r$@f4ZGanYR`UNuz8hQsJdE=z(2ka!<~wT-dBy9Vk*fpB}NeOPQ<@uDz9!7 zm}D45w=X-?dtwXrsa5< zRqHxco^Zk;atmLg$BBn8FUr0^?iY}*nZWM?GT~y1E*i9j^n;@oQiF4aF->_3VCt7$ zcgMtsM^<&aYvaB$Q2`pp)v0MdI8l{#KM$8Hx zs9|5NuKt6#&birKSJL_)&o+hCyh|=5;IvLULEpGxgI9*pj+Sm4M7kUS9dQL#nBiAK zGsR;;$weQo;4wBzDv=u^8;!@xs?JTWr7GfUN%vqjZ|mcy>ml^6+M>~Jm zc$-d|J!95<70{2?(kQV14og*1czBNBHr##I?q+Ci)_oyk@jJl&)MsWAk7~M$6_*?E zLxc@2%{qw*&?D~=f7X8P^oD4foJbocmnK`fQ=8Vo@2IaY@9it z3xnfK{;pnLbxobdd@MZv-Ai3&99Vw&df~W@>X3!X!HItpuwQJEL`3S)g~=CoRQ~(a zkWXp}^iYk_Z}k^jZ)Tc;6VW}Zml!eagqY0KN|;-4oOcmv&|aee1!#9Q*+NdS0{kBZ zV*pZBI0}ANF(MyqC?@lbR}hfGen^--J(j}L`RuV)p^sh=`A%q&rkV=FK@0{GPV%Dy z*gRvyxyo#Bo4is5PW2O!5;=yB?z&Lo(O0B`r*OFc+r)(x{il^8wS#TOJk%bb>_SSF zuz$4SDlziu&pvq;us~SvNtnE^3SarwgI)#j6nt5Z-1!=FRX4!|Pb@9OOB3W>2xy@E zm74OjR2Qc!Cez@|X!MCf4_HB)~}!x#zNj z7>)6cXUdd~>Z0cY*RaBf8iu*Tue@E*qZ!1G;zU-pomB3E6@ZBmg7k9l36jTYH^*2; zr|4pZn1-i>n&w`2;5*>8z4!>e)diRwxObnaTH}Y}rdh`ytA zimYLXNeenXMYdd9#5Pr?TSS{3dp0z*8ExO5qdozGX>L6fLG0o=p{U173`+&BTo#qr zR8|+1%%sw(4HwtBe!obvstWq9>|G0R)t8FbvO+l*^ZxalJK@B-Vr`4jQV@RQ&7(B= z+5HlZyKFIMLj`Zo*3XhB2)Zeo^yv-6A-wUY9N^>}41Y{w!*{u+!qzGkktnAp9aD0<87dwn`%iH}hNlG{2ecYhp1lG;GM$eU~*!T@NQ z&-?pV7c@y%^a`+jrrVDYdL|gwRhAh&Xnh*dLmLYMIdbGLdcJyQU{9BgAaU=d5~99P zdimL(r6bv?J08OMYH9+0G`Lt!r`<*`8D*K-$xl_c!YVQKNLoAajX|Yx<&XOdQk#M7 z$iLQCg(y#Ww9{hwm;^cTzBsuSh*W2s?4T95;o^klqD^W&?BM5(_$104w73rg2Da8} zzVBG-Spy{>aFpPlqCVZl_9ir>-uM4kwU` ztU?2_Bk0Mt=N`=CrD6K3HTd;yae~QAUEO6U2*P>AC!Sy3{~#0zqPHK$L!zqrw!kT|7+i; z_}(g;4D_|m1%U1=fVNBx2#Z|0&y5u`GGYU!i3h<;A>H&|t5*V>c0l3{jNyM^&l{Up zRKW6607<%CsDOe`jEr6vCFdvzx;njaw>FIXzW_mxr~=Z z_H?>yDb{F_K?N!#-GQ@S4_f^2la4oC%{K$~12yblUTX))cpL1vm%$n4g0d~ip_~n> z_nIk6HSU@92gB|mu*uaQ05UJ*6ZxNU?8zp>7kUk`2(waIm+RSSqe7cG>PCNp`f0hsGO<8mI@h}O|E&blXgWd}G@QPpKFv=BTe>g=3F4eWeVoMO?szlsvJoE)%9IjL@)CFb8rn;btK_w_&!eqm8^ z-t_|^k+rpp1U!hF9;f`yI_WSPceX7OHH}lVk)O!Bln`cff~hD@E#MW$P@zkIp3Dc( z@(WkOI!Kt#K-Y(Ppr`Efb?p|i$i)3U@D|g+9tVZ8+Vbtb9#Q%w_^_VIv`Cl%j+_zi zxAnLhSzP~d+W8!W(d1HAv zFCOJ-TLrccc>AEz;L%ig9V2+;w7fZ58FFIeI|Za-<&YK<0M6#V-mH9GUX%0XYXwi1 z0sk5>M=2Q9=24wQnZolJ9(Bt~>rpN%<=@p~fI+f^wLOu^X;DXy8n7EhNv#^3a63*3 z@bj^@74IpRrxh2r4T9X4b+k2@Lu>=|NlO}-Oad@y)C}>QS;A!94ZETou?7FKWyZ0d|vgi)DOZ5F5=Byj~P3^}V@_S{p)@peJ zu4U<=faRSi%bgLssh{9(DEFc(@acfap7_5OO^D7o2Nb3kJqOzAmrXnb?lG08%{mE| z4?E}Qv`H5V9k7-@KUFzVj&_v2rypyy2Ps4R^w{%VmTnw2WKwYaoIqsOA7d!|m*e6_ zzUIWwT?kBDI#jZ+2MM2tL?Y4oNq~7YZRTR_fX0A+C=bYWU}*1dPsB*AbE!9VXZIv! zs#rw4Yv`zARms4S;Fw*OajaUZDOS{%!DjI>0qLe^XgZ5@As4jb=*NL4k;B)X;8wXx z^BKN)TlQxxl*T7QKb{>GrH9fL6?sVwe#^R35E3W3~WLQ=`oY9IX{eLx?0d3HfD#{8Qt+HBp@F2(=`8{G@O6 zUwEmR{{@}VZ0;P8$7p9fR!Zxd2{cz-keO^XAHSR=%Ss>=O1EWyv%`NZy31>Xo; zXonDAJhLcuTs%^uZPg6R3XS$szkjnI8jCMymBeHlv|m`e&W>`A_j_Y9#@p~#hO&d= z7)87oz7(wfy|Dts8=@h!ZTLT7pQSQ6@5l%(dH;Mah!aeSS%{EtncFYL?4C0tgT2NF zIwoOjqjg*6$44($7?l_OPiOp#Ah}b|mNfp$8!Jy(52ZjY4c(y$EdI$`B%_f22g+7b zjFzd5g+62ZTc*?rpB-J<_u)`_LINQr!4;j6)qEyJ)Mslw=xkFz#rP_SR@91)fz0e? z{;^0&z7qOWF?y$FW|@VVbH8`0#w_7d&J9q8pVHZdbjy{zwXDfbJgv>o5JN zU&R&-UxmJBJ(Ui1SLxX#KvzorgOJd|t_an~&Lagh?=u_(6MENtNI0AhinURar4`Rbm4&&!7^lEm zXVu)a4QkdvR~aa{AlnR+LKnCXGB$`xoNN@(Pg>(IKj&WbF(3JlFIju*cR!qnHltYl z%?ly~RP57+qUF@u>?X~W0x36iiSjnmUq1Az5Z1s#E5XEIP@(h@<9S$VeEk^BAY&&* ztcF;oO2aJH8=6o9)W`f7WHp98i*>4dlg}@a=AtpM?9r$z50`OuE>(&x>!MmQ_*a5q zx%Dpe!OB}qEk6CTKp8x>qI*`{@~GvSyH;zWn)|FMe191jFC^(48eMhpw`=Qs2?VIE z^q=4+BNMmFeQ0zt#;^xrJ@Jr@Ozx9&}^ zgx4t}gkbxVHMHm<2;dp27Cm4&%3NLUcLyH>;D|FzEfF&Fdo=mWj3FGQ-U%;5-Wy6v z=oyBFJ3m#I50eVsKUrzHw8$2XeH=GfEU$>PhuVYX_E#A#R!P=Rn7U#^uVlsf!at>> z+9QKm&*UTy{-#?)ob7%y22}DRHtur_pfqwbd9@JXl9KV;jm%e|*2cB(Oy6H?g4wqE z)rgB_$CEPMp?m_548_l$CgExf{DPyvH^ci=_Ozn@d;Y*J4{t#$1)}T9NOyq(8 z;Nez%d0C}-1>BBPfVFVC&G-VQBkle{b{H2&?z#5AXlY+yaVBe6>Uy$>R4J@LpdJkY z?BRSEsW3@4DAWMtm~BaFlXg{pBY!REEs3y6{>E{%gQ`(rA-A4{=H4{L&_6T8P#@5{ z5JJZW$qxna`1HJ`*qn444@vDkIU?w}9U&vON_mQouwcscTi1qX$?=ga5skPjpFHWe zDE->BIn%upJBQm6H;F6dP>@6{x{%CfJEVx=%`C1pTfR@GtEmpUTFs4$`@vnlQY#uL zfO@BtLnUiH6iEh;c&k8ed>>3=B3e7U*g-~qn-RKyYTH?W5`x16+`zZ462*hOC?Io% zdziQ^;*hKRzErLa(w_L$V`g-*AYH#~RXfckm;l76UNAL4Emyx#!RLHs_mz9128lUC z0E&QCv(Cm5G{&pi8fQH%EtCKM@R~S@mJ-b=Fc1gzt_b{Rwl?bbQ{`V!mc>|@u(r~WZv2T>xwFsYfp?VaX81_uZGzcV! zY)>9!Y5{AF4F5P*$P%MKz}7OH#5|KcTpCtq+1pyimDo4hfz#7uq9}KHA`$P1jqKdJ z@(+bK_c5*)MyUH%W}&CNcHL4eg^|Dz$CjPzLS;yfZh2W)m-bW0n(+pXCAZk@&)&%$YC%u?RwJ?(0hSm0*dS{EUNxx?FqL=rd+lA%Z<+FuZp2GBfyko;*q(S5+30 z0JPL?)xj0M#MK{)gffY4sd7Gvg1j3GE9hvAx$u$oCQ#k3)#Q48(`0vwhhqv)j+pLqoYhWQ2@xI`-M9ijfVw%A4l)$4_Vt!)@>!_E zF-FVu;c@B3$_hec*tk^u;Kb$A9SClk8{v-$y<5dm3P?0##hBZ30-dfPkH``2TfZ^W zkHe+>vUF+v3J?jv(9vkQ-+R_by3KV$sNI?9p+xUK47`12yQ*0bXhcW4^@8#>YDK%r zB*D=E)@O9y-++8fK=(+_o-)ws9(Y~tK-~ZpnzyGxkB-FE1O#2X9s{+>!zB(l`V%Uj zu>DwjmZ2ty`3RPN$)LE);c^D9_W8m3mYWfw#^rFum>ko@*YkuQR=H1d`;cW#&=rUo zC`rwM^?&gYCRSP}89Lf1XPiuj$0a3*G#EU@=;3y!vBtB5x2~~o&sP@#1{GOHZ`NML zzl21d$`fhG2(S;5CIZ|iINIDnBL2z8{_ol zu3E@?g@qRi{t0$7!2ys=OP+wIGuf5N#pmNf4gw3`&$gAKXg)yO%|R)uL#cZe|6b2&LWKLJV!MWK5j;)E+wH&w>iG9Z7Er1KLoI@@)(#P)WfEiyryWDjH7-PEcUZ4KprLnq_m4zS_j|HUtk!Y}=V8?26*+@Xa@A%R>%zGy_@N7X@+In>H)Y^#o!4H*?b{x{J}ws=gzCPxq6tt);o=Y4 zVt!-B^tI1!9XXE7pva`15U{5nBHqHtd>KL@&?&UJlimggIeqPa-;$ju(VjO!W6Q~m zBjP7vPQQELl6W*bq1BDjWY#8mgWzO_d5@wfF&MPl@~+3+N1I}_@h;zd2SC|g1KhN3wazC#SGM64xT0Ls4ddpy zqSPHQ?Cj|O+*X0)p@zM8Er|?KNOnDpoD8F?C{PsI>J%=+P8sbQLzJO&s-*+ zGqBg2spA{ZEz9w`z%*N4@Q@rZg)As*5tFaqNb-hrDbcZ3^8iN5ejLR8N%O!ZN0+oS zvlboA-^bXw&x(xXyTt*jLEx~#4TviNMFI5IF28OYF5B{A`6;Jj-sgAFmv zQ%)u_@+`q$m+A`=14+*YY&yO=YjUeNO0TCw*z>T*zOuuZ5aAdUgJdB;m5PHpn6|CL zy3_eoU!Cx!sP4@!{HyLVW#VschEkb~)i1}F zC^OzwEVV0|pVSHnJpj(QRqKPn&75f09Hv_`lzsBJ->!cF1@m^~u3QV_5iYWj$x@x| z_nEbiH$lpp1eC20G}o#yUXAa0F5dfpr>#-nUILJtaE|)sQZajCwW@oQ2Y#7svax6` zY5JCk#Zy#_J!~Wqgcq~iUPckpg;m&e_IcvgGZ715Vx)2_4%0PIUH8fWX+K>2h> zG>~5D$@NH=?pM=2$>v$My?>T2D0ui8od!4njA%iknh!mZqO;9$K9kqUkICTmg?h&r z{*k?oB5UNTGrO14cI!N=uXNkcA=saaoYOxWR|$C+s zGz~IOPsyTThYFPF%ZBNNmpZh?{ob`{I=n#L5oK1;Hc+$ti;N-CkM5%JLibbEyYkku zb^(h%hoW#7$X^+f(K~J%TpS=>D?7WAIDG`}7?S(#_H`I^_O??VDlNVM5gC@gf`~T( zG0?5B2=ij|7{+2X7xBs!c|LS7J%t7i5@sDMPBfcclWOgejzAiOx>ep)T1Qwmr_H~q zK6cd1>BapNLN@hw1e|7IuxU|+PuM)PH-Bf@U`3x*K?=i4GmDXHgby_3OA4xzuZQzV-*X%g*!C_1BUPVC2cPQeX>uIB_> zS)P7GpGY0eAM#dm9JyMd!|qM|fb5?@yL1axl!$k2-gV&hh2I777W=fKu+i7Ff;ZPV z21R{0%Rf0&*`>}$R{^GPVpEB?;EX0jLSWD7Ox!dwFOzx1{;l5tHY{?+&VxWCT#i)iTSjF4X;gQXjZ!g%1)lI%q;0Cl)l>x z@Y@Cpj1-&8eC6ltOSiQ}q?H4>W@uT}UC7%NE`z5a-S?=VFoI($y9}!><))E9qkOZH?S( zN-JEt4>OOef*-ZZ-MBVrv`n_97#Prk9Vy;;Ca%0Pg=SgG^=q&@mo|9%=N`qd6<*&8mlzkX`Hj>=u%C0Y zO6>fY&T$pIDA9KF9#navPJvjD5KW?CAZ#$f{IF!c?!4zhT-%TNKx0A_7}$aun- zccLmh*YHGg{Q}Zyo&jaczy~!nJx!8uj}@kvHFTk+#)_A^nKO=)XJFPuRAv z0_Xit$+SlF4Bisv`hxEE_gt+5ofp+;q#SegayXs;ku%$Y%_6(kp#SU-E^{P=wV8e(z^$l-9KYscpCK-G_@n#khXz5(G1=w!vl0@pLH~oQ zOu#9gkHf;9)#7qdeH3q{XDIbe1Oid#Lqdk_+#AgV8-5Uf=%6l@%J*9)yymwm_EU5; z@Hc@?WEN`nawb#L^~ZH&qO4huzSTO9xE2yvrT|{0kt@w7jKEl`8p94Vd$KNU@FUL< z7hdu?2L{qxG)BfzHq3*n!?@k85cun?^jL%T>_LqGozZif{Lqr7D#+o(<4(Z0b-BoW zLN<8w6MkGAC-!?!vzh)(<~X zkjtb9!Da<>fA_TBnIviB;z!52?>TrZN#%k`_!s5?Mtj&D!&9jc{Viqr~7A8`0AW0p-*(% zbnJk<_KXn$j!{WO3BrUR)upZ0mGhMs;KpUeSZ%BWuYuqQMqaTL<4gz*nl8frs9Q3s z9DXSJMPs8U9dSjLTHP6|T3d}5f=nyr@{@P zNg|tnMfIvSFTQp!p9UEG!WQqbMAdflM?%oUT~TvVtakS}Q|Y_88zFwsR)lUv_wF$7jVlBb`{)F1#HOh9n<=3*sOGj1fH#Z``0Ns$IV z(3{t+Lt;Tkk+6QWzfA$ptg5zCA{+9NqIqbbtYoBFf zcd_B+hUYic6=f$g$1`jv;>Ql-mCDuLLmbCaB+wQNy;f_ngD7kAo41BujAt?;Iqq$-BvGDzofcNLb1;2lFnZ#zqr8{@!__OzT89hLO-Y<&O2!Bi7_!$n~oA{ zFzlMtw-sQcR>Edn^DR4S98xc8)Fj78|2zgdq1o`$FvOwoP{L{MDBz=~Gzg}Bu21RP zZ$IKoIed&^eZ)KFj7W$Fl6_8Iy++A@JOc6~zlB;DlmJHaym747dn$IiC)9ZDg7NtB zglmf7u!_{R+$L_zBmM=nAc;51k*H6w^pl^p1eODLB?cH9jVEg1OR6}*RxJ{*)b8UC zFERYtq+k$lJz?P&lfJ~rT|#Uvf0)|V)OPP(Wo2Z$pID`VlS3FLQ;4q8M=qAJ8wlvf zh*+=TodCht6w_cfZ)(oNe<}f?gd-eUC-)wQgnoT!V`^jom=PU8=(*yGZc|q&RFtiZ z2VINYS3F4S-s-QmyaFF!gU3xZuFoEH9@De2SeZ`3k&;yb8g4({JejWPA%y@o``gBw z3y?Au8yoA81=XPtfK$TwPWh-QZ5eD-TEswXU5ohwc?}C)6;LnG+Dc0Ff@_L1VVN?# z2Hr)n>+J$A82HLd%{Q%1qKB4Q_1;qiUf}*!&|7_{^cQDuj;D)x4;*CC1bqqd0av~+ zJ*Z{-b!o6c;sqfi$lR>l+XfKm&WQ!Dv_RAlG|FTm?z0z|aDQ`D$}%yU9z=L35%?sk z<#}}(by_}DOy#{G(Ia@2%JIdAwy>x_wKqn7rPVGxb|OS#9+mpv_M4mtvv3gVC~8iS&@$HZMHkV}%F z!Epvb9MT?3=h_iG6=3;zfk_%(%Odu?2O#VDDQ+E|`-oVI$R7b8kW(>e!%$5GcMltm zJ8C9OoP`s^N&6F|hXC11BJ-K|udUKoOj`&w>P;$#Bp+X@1uZe?;R5$O(}W>e5GZY& zLC+~ra#2RVSqNke3nB-Q$@Bi0oRfQIsKWhhjKOKayFQX3`s6k%Q)=%h4a6}O#?;tK zEyvq8hZ|NGN2M?7G!6eH!79+VHNlIuRd{DE9 z+oQ;oMRrJ}eFpI|HoaXq(tOm<`qB#eA+~<~_r;B{26E6`-jHiMWavrvx!awXrPrg$ z3Web(@7tL73wl}bHD8RzcdIiQS5?W(Szk>y^_9|8TdGAUV%@v_#v%o9Qw5>Hs>OwJ z5wR>sPu~t}QMwRQ3kSG??{cgYF86ZIE_y)F(NobGvUP3W|3=Wz-64`xRepD4tqL4m z52>u;z^8Nx21NW4a?RbT+2(6-H(9*)@!hU0w?FKDqo9B-#Ex=7-vb8d@1&yvTa*U} zilIV`hi>XQ{nD_u0Qg6yHdNN$#v8DE?ZY%7vtd<~z{gNnDFH8f9iij&43O=Z_O!r) zKl16#9s<{I-4JPqFCH4U#a@Y~DXl>--Xt=BeKgSlP^qTXw{$Vi#*MVAaorc7%XKE( zQ-;m%O;u6Cb%lOZ39Q1tNZ>e-Ajw(Ys