From 688caf33fc7613631bb904ea88d280575ac9764f Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Sat, 26 Oct 2024 10:59:58 -0700 Subject: [PATCH 01/29] remove keys for switch --- provision/modules/gaming/emulation.nix | 12 ------------ provision/secrets/emu/switch/prod.keys.age | Bin 16074 -> 0 bytes provision/secrets/emu/switch/title.keys.age | Bin 67606 -> 0 bytes provision/secrets/secrets.nix | 2 -- 4 files changed, 14 deletions(-) delete mode 100644 provision/secrets/emu/switch/prod.keys.age delete mode 100644 provision/secrets/emu/switch/title.keys.age diff --git a/provision/modules/gaming/emulation.nix b/provision/modules/gaming/emulation.nix index 0090a655..8e9dd597 100644 --- a/provision/modules/gaming/emulation.nix +++ b/provision/modules/gaming/emulation.nix @@ -21,17 +21,5 @@ in { ]; }) ]; - - # Provide dumped keys for switch emulation - age.secrets."emu/switch/prod.keys" = { - file = ../../secrets/emu/switch/prod.keys.age; - owner = "${user}"; - group = "users"; - }; - age.secrets."emu/switch/title.keys" = { - file = ../../secrets/emu/switch/title.keys.age; - owner = "${user}"; - group = "users"; - }; }; } diff --git a/provision/secrets/emu/switch/prod.keys.age b/provision/secrets/emu/switch/prod.keys.age deleted file mode 100644 index db2c952bc8717e03234dff27fa20c6e6f0246a8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16074 zcmZ9S!;&Zp5=7g!yKmdJZQHhO+qP}nwr$(CId45*a4I4rH$0;NJGs=L{43j-A#r?&d8BNUX#PX*p10b zN=ZmY!_>(|!pc`s!Jt}Yge($SLXz|%PL_1GW-RvZMyjGV4(1Lb zR^leic1HhCb2E})vsJ)1x6u@~<&afjQ&rZa_mos|7PS-*=Fnt!ah7(MGE#Jx(U3P6 zwAT=^VvvCn5HV5{q<523P!=i@3F!qMVDlC!+$C zxsf}a5S5&pDU}<$rX@S0lev{7m5Us^nIngXlbW=o1Ur?Cn31(Cvyu!H4Gj&xiJ_Z? zp@5^Hvn3s?y`iOtx)YPVgP;&Qy@QCnqA|Ox1goi-r~sq6xUdsc)X%&F_59^{x$DDB zATuF`A3NV0m2pgMl8d6vxSukY{JsrULj<;?7d-FQlqAlEHMpnSadpZrcrqq4Tc|rA z+V|xs`h(Nyri}_uQE947#VR)hfHQ&UNc_1^nj_e`=9FK;L-oTPY?X{GeyI199Um^2 zPX9RXZkS|*$8W&VN6@($uOo+)#G8i8hYvwQ`(ddytOMf4`d8RmBWXifurfDfv8w#N zT@5;<-&p6-QBhGi&BhRMz((5Y!d9IpvpOGNT{b)AG9M5Hy`8iEzzh7@1nt*bgi5{s zP)7R7It4kwF)_i!;}e|gnxy!x@B-~+fI_XEn3NLqoF}%n-9{&v);(ow$v(V3==1d! zz_uRP=QKWFGKvqr;<8VG{GO>&pA(8L=qdWh2xAIJK5^+$Pf7G;CA?7NnDNg(tUOz{ zl0&AR$aSxlB+(Bi=<6b_w)_hCu;(VhH^o@RveSuK*GVpRL(1Tdw$IHEXu*2^qg zXT!bF=0f)+Ekm(=er0Zr^?|l2AL$sbtf6ZNV zt7#nDT;V1X~ZB0Nd;N}^w2|IX|C0TW2<=h>L_dsv1OQQOsxiU8SSOBD@a zTgJ16%faUrJl)aA;&$0afCKGOtBNQtBPm05LrYN`_w+Vz7@pbSRuV2 zH^i4sBcehB1|>M$+wSG9et;ILf{!zkIL!fT0NaBu50}YoF*}D;c@Fv=*zJjm_0%;X zMJ^P^W?~&>xwjCdGkPUkM(D^I9Em*Ojn2lZwVtcibHk9MGo>^-;6nt6IQt^VE1@dn zYIQ?rO@$<(HqG7W?|J(s&{|2mYG?fJixh17A7jY~)8(WVEkf?g^25x{qHt`S+&}TJ zo#9`CU`{g1%51Ja(s)0OhRbnVGMPfXQ8v^`E2w3|63an1r>(x8WC2g^w=rT7BQ`ZLvB&@Q{TV{&)O%DPvjg<~SOk#lHQ=Sw9 zpq$2TnGr#+6;FgdWzMnIiTSNj7&kD|J9taC>9Vb-7^NC}2@Fa{_IEQec5K$^Teob( zXf^6HCo&#vxmqNx)d}%9Iq28~SzzuAVK>(6zBsjgzO^N%_o_A`+kf7%)AdjWY7^5i zG^0k=h0uZJkx5;IF2jOCgnPWt`n}_=TJ_9K@;|76*p|iWNs4v}Y?TfI_V@ZTt19Pj z1KVmGOneU`*H@toiD^WvM+{YP#lS#mZ_4e#jnzjsoKek>r{C7<^=7YPN4I zs5--t!jc7`QOi0{)4-4{6Xfn-Nv=7=XmeW5CMoK7Q7d4aDqCspbbw@$xJC5N2@Qv! z*+Wpx&g4MN7orO^y4h+@#L;GbsbBSW0GLctfT(xggtT7*!@~wfH+gB2XtG2RkiHVQ zU}5NM>Bryb9&ev>-A|l?8VlJ&T46P-dXc3P&eI!RMBdHm^b6kuGcDPTKM4{m?;sjO`DQ4Nk~C8mlt&ss6<4L zt2^5T(U#3hYoN?{wvr9U>={&fx?| zmWd(BqIQXP&@vk1JCmiSIAcewR=HVnvh$4;b@F*0xN{gwDbQAlc!9_RY-7gGKB*mW z2ws|42EE|uN=K!&AGTXG1e^Q^s~}xt-h~#3tVz0nRv*eiCBj!RlZmzJB3ngZMQU(o zC?QI!lE1?7ZePZyV-fcc1=&=r<@0J*q9Z2x*vC@^sP;3(iW*5|jk z9)}0|7WBz0JGjr#F_oiRVCwkG6|59O+WEh5sb*I9?f{P>DnLY#5nw>cb*ulq&c3t3d5*$IH3c&Z7o7SYG?#o z66k`ZUy*!4l4cq3Hu}Wt-dbU6=uYQZ3uEP*gWId$rKa>h0TZ}sZ1`rihe(u5Z$l9{ zMv4Bez|dG>Hz!Y%hjBvm^lRQan8eM7!;n)}t<^d?YMTT=6GQ2j8qAqXp-KGs^g50V z{F=31&7wki|K?w$+7^KH6O3+)AVVUuJ(u#b7x>oE7HYew#>Pn!N1N13^A9lG_8!cQ zZ_F$?Y*+2eJ}txJ^sWls*xEa0G31=R6Pe!MFH_v{o5__yzbSe(mR?7|5nXua;_@b5<1bcdbHHVs)fkgRI!oq74+ zc5Z(bXc{0Vgw@xEY)1J?N_ag~TW2vwp;grX{#dvhEo*bOuI_h%YLfFn_79Wjg8sTu zsC$dYk8l6#XId#{iefb?{sZM=fM}TYGXxdL21` z-7TPG;iRgFYA}3ECYb6~BMVbrU5Ip7LW>!KBN#6OOEQlp zy7wf8G=IbKWUBIMhQO9anYfBv9w$czz*rvVKTO)5;@mk(2$CXTSbh2GfA&mgM~opx zm|-&2kj?I)Wp_60pLIDP4J+=>rY9m71ZXS6sCNM*31c_AUdtr=SY;(L33A=Zn+8w3 zg#nh=KFh^}-m0RU&IPbM1^pzd4+%9l88)9``#6sOTB;X8X_JA;5sF4>G7;%v!{S~u3g!rmxj*-LoTvA>rlZ2b5DdBb05Z#@hdN9q- zJ!izw@$1EB;#OU_uRQorKp#RW7UQ@kq?W{f09>B~VulGs?k{?ofilY3RWKhc`CWMC zvTL?+*C&LOR0aPfoYd#rLSH?l)Zgylz-V3r)QM`^)BY6Og0vV?Gm6CST*dZT5-fMc z^IehmJ|o@>>k7gA9YkxLUpYzx_s5cXnAseshV1_A#h~}u@~|7ioCoD6DH@EQ&^^Ac z%!oDQ+*b$J3(|N+P7}Xq-+&9Vq_Gb;s2vdTh7d^by3JxZHz2u(UVxKxU`yi4>6Z8C zi0#3MkM2Hh5p$9FCoOa&#OG?tkwVgT;74@ba_fX{32n(&py!W4$w>11n`q6&Xo?#4b|5l~!J9ggaVxcL7Z0>R2kHQp`;ssYG53GCkUT+-Xm#XMdT3%0YP3zC&Ziys=K68 zLZZGPA|J@e2Gdcb6w?I7i*&EVyMgW9O*Q6kEfrHgcJweUB2u0nJNma-wZ3|STYVaM zL06?a{vTc#iy8jg`QkQXEF5wcS9K*W2DkwMW~cyL4!vZq&SV%uf3tKH{T!o|Zt`Y2 z1mrmWH2f{DFrjZ|v4H>7(?5#`ZFzY}gt6g^yS)uIlP*%DmI-Rm^^8Z%h3QVPHK+|_ z32l3YAx?F^4oqox?14hLd5bNYE5$n5x9qP5pZF+Em#CHI+fJY3{71_wpn{SvK7cq) zyhCJ5R?0(K9*M-R7e0nl>~0fk4<{x~CIEU=FqwdZusJAOVuMnC?xa@?tchwOob>QA z6bnY4z4IfJ4}kOBLNhl`gr?7j8lAag=#L?qGR0VDaNsPY)*VUna|2+Q~o5dFcFYi3B>4m^Nlae0{E=K{qbk%m?0cq zI-BE8RHcrg%efAvq)YsEmk1`1MC0Q-CRz}^KL85#I?>J8*dsLTot2&jJ6d!&*@3#% zdl5{qZmSD!l%gX1zkXeE?73Dq4$FGMYt;FUE32XLGe+iS!Z8B`m0eFKFE z9wxO;Ah}q_)2Cs3qJ)Sk@pPhqIy9tKnNc0Fn{6<;`<86_cS`0_Rbx}DeP5LpRgdzm zZ5H-Y6IYsD5;>733&%75!G`y61Tn2a*LzJxHYUzPlsi;ax~j+mrTON)RTw*toh+DJ zHttmsCjs6__64jqplF(Y!)?lmOW6I2O94Zcf=+Cw%>XpbmkxKa9+hXl@Z=DgCUx=yxhGhq($gOFT z>C%(LMb3+QjEQ+zHtdpn;CZe)$ zG)5hvS<+*AwmZgT!wk&|fBzj)cAfPzm6f+9?=B0)I6@cW?1SfBrXrmv;U&Xl0 z7%l=%bQ6?em@pk7y(tZ1x@5RWs&6n3`LY)TBK@isnn>*DuL1*9Aa@yXZ=kuJ2&n2Ys7FQucs2gB zm)8gH8_ht&Xx=n%mqB&B>8|i;oO9mM3rA0a!iWJN@nUXL!gc)KY zV~56kwA(?-RK-lpN)A7Jm8XevT_!ueUCJC)BemvB~~1Y57PS(9k`lMmG+PxsY? z`jIlQQXVI~U-#0HVszz@J@3YDC{+Su~FIa ziLk;jtj!`TXK}QU&~r7X*mrg!=}FU_?Pz2QY_KES06>S=K5H%a?Lgkox3>UJ4wz??lAP>HR>{w^a>9cueOe&d+Z{~}*i**bw zlluY=52b=UvBav1-EU$97=A0KiSZ#f#{5?T`8BF~(yc+?Ux|gxM#%-<07AYq@1)FV z_=cooDscoUsCZzaio|YP3!6*IV)s`!+mc=dxdCe}^Gugt@UwqK%{xwf=>GGcs(oYb6g2?UXFc zAs=$_Yh|!)Ed@jko|^NMXi2SOomeX5F_Qzt+=Y-A3S+xuc{Ojj@w1_?iPVPm`i64X z{NH!TjS;0ob&oN4bHL8qU7s+yUDOUwI{(aJ%KZ{S|O@pO>=C%2geW_pUtqObjA8K}icF z&)FeK!02<#?BhQhmDEj^s-cwuT0naZ6He_7LBYqU20IXg9X$>a036Di$kRM&t~qdR z#KIL5pU9{TakDU;Q<#iqe96e=r_H(5H7Lv<_jvOH>*XEHe4!|&LUS=i&yAcsS9SUQ z!qdLz_eoB`l^?~pGx!D-q1c4^Em_|rQb|2=M3Xr@)`!e4|C+O&;>SQXJ0 zZ|=8%|MmC{Sf9#u*1V@WlG)GJouM^sE`vIQGHyl4haQ8W9*#`=<`D%(_pe4Od5%9; zcb(pKM^a7)3>Z2nHrP^@HfFM?oIWf-*`?JX5!D9Ou0INxGiy*c-_&5U1xrXu zNts{71D!X)d1zyX&*^Y>94-pD>0!cYeV|^;#1M=#ey+T*-;y`Vl z+H=GL#44Wmz{(*SQZQwCgcJQ%&0h7vK*`R9@NRY5O{DJ0#R<8cJb3LW-~hXh;`Ie$ zbIGY>e1Jla!>t0NU%3+!)(;q*v;D4`OCz%Ny_6xz9P$3rqGlN^rAbqf0FIT>$E%b2 zPuZ#Ia8p>^_*TonWNL8E$Mc03@-%$&mfEhXgiUZ@=8tMo#wR=;OsUZjx-!ZQYd+ce zA06zScldvyvB-oF*|hD=w(o;D2s7+h!}8v!zJI;hQh^ufn>L~YQoq(|;b8w%6HICp zB(#yzEmqS{xKJC2Qi(LPyAXv}`d+EUTc?Bv&%8P5jU=o|%H41ZdjGSWL;!efVSws~ z7V_G0(uWF)Q-M=8Twgy+tAHx2T(G~7%jaNvu#jRg{Y&VJX0)v%b`{sp-pC1FUXDw!fEuni1zNi4 z$JfNeW?7qKctv;aEP=;xY6#5zex&>+=x)u5ZX@LJQZh?Wr3uN?#8e}jf9B}@RrRgB z4J!upG*L~BAvN*Wxh@FR!W&Hbo%WNp{z_hMi?efCB9dC!r5+QUAt*^g0?H-jiC=ZD({EaP4^p5Ha3IsR)6I;&jic zXN8`*(Hz%Lj|?BAn{U(k0^-5R)Abffi%U_MGDpL;{HmQMkpjGb6mqW8;}x#65D=Xd zS<-@$Z)J+Su4&07rHqG* zb`0Vx^aj(1=&ZUMpP5ASwAqmq>=V*;R%`jXCSvP?bCzP~5$^o}}ZkIcXd2 z9*0ex@32(46^3b0%`<=ZBxFZO`RD3}2X;yLirFk7$~Q|%_yWP@doYiV3+aMTFU?t3 z+}Wdl`;v&2kc9kX({djWbzV!Guetb1c_&BBp(b9unv**qpwk-kT5;Y2=9p5U$+tn*Yhrqgi#HF;)ee*c89D=Ip@bT+`o(>b=vG!yd_nM%8uXmdkw-U=v6 z0`el>gUUU%_xKjQa5w$&02%fBq%fH(SRI&2q~1@~Xw`-u7rza#;}(--TJyt`7gzdh zL)gA=2fAP-quhw<#A!e-tUkR~=RxV%(Mf$}1AZ6+v-$P}D$xsE#LKA>mh zt=Zz|GW^~m7>KX(%rb*-_Jh;W{+eoA4YZ1;NZ#z0xZF}<@)>_iE0qc^Ohqx{1Ah0F{x+7lW}(E z7M9cP&1PRODCss7-x=7Wjl6nT&#w_kJ zzzP;GfC8TCpnFlaPWJWNhBb--3z+iSn_WL1GEQd`7kyLt4PjVRo)2uH^OM#?X_T`p z_~S>F_kiNE0HQKS28Wm`C-FMS9f9bwIYPX=Y3rU<8{2*8G!S5ou^~s>9uHef|A%S$& zbUY3u(uzKPvFpkw+R$6ViPYnZEiVpgSQ<~^^PH48?XeGcvG*8sXNo|zc;S|p^_PCX zo=a5QHJK*CWSa6#UNqVfLlsG@ppCn4nFD;Adj)=9&3wy7Y&BfY{1G0?;Cf?mO52X# zt2UtM4~k(&(3|KH_f9;>O)Y*7UsiM=&&;|v=DK}c%YWe&_ZXe&CShr}=cc!??zF-VgA_GU7UD$P}enzUy?# zS(H9Z&AIcoW*MQpi094xF&Gj%A@w66^awpT$Qfv$wq-tgPc7C#Uu}e! zD|++#nt9M}*?gN<=9{NFy%3rOg`tZdBTq!+`-r-3K+0ZBxH3R4#~C;R=hNPl{3kC@ zRJ|nwd14|=)>dIg{apij(5}_8MNVyO{2g~)mAglE=q*(dAsI}DUIuPvUvQKnG{=0D z>{8@{ixVMfD=SBM75sPZMFxM88|R46EW!DgVvgaA-p;-bN;j*^6n}>0g}16Ko`VsEk}P*6YjAmtYYQ9jI(Jol=T-6vak+Akv!d>7bJwUNRZ9PNnwzs1>@ zw?>-R9HGy*WSP7{Zc@x9J*qroCs{Ko!8Gyc^><15)4NN!2qtS@XrzK_<0O8FKptFFO9FQ?q6kl_^yPERLB4P~1c`CXUwUSQWkjac;fGX9BM9+w}?V7^9if$MkX|)Zb{2=%9gEuAN z-|Eg`{0I9B4%^b-21t6;ks*b;$QxYVvwtrHyNK6Mw~;>eyx zF8kwA_NhHU&{_T4KgTiM%lSFw%=GV358L`9FS>ldh{6l4NlaQ9^4(FJd7fDf9Ygom z2JSWGpVP-~5&q&Y_7PBsNTt-;2{hd&=S1zV=$V#GexJVX$8WMzq*FfcnrP3i`ypWm z#CQZ)iDxhht)vBtj(dm%4e_ZT}Xk5=1T*OuO+y>PyEZkqz2eyBftk) z!o#P{k}eQecO9miYu?@gvA)`P>|QdIao_?MAtrSo)`fBDa?SFwj6{Z;mY$3DX)nsU zlBW>!qHNH(r63fEDFu-YqkhN5w%>y3t8$zlhT98y$Oc3J^3GrMLrIZE`CmK(oDFE^ z!AN3ggrpztP&haIzH-*1#8YTD3P^(XKnn%K?@b-El8;*YG0*cU35VYj#2Ko_Bg%EF z8jqv@$_O#>g#qK!uV^DA~c`Yy*LRIcARwSor3RyT~xKMpu7i)tl%H5TXz<~8;q za>J`s@FgPOGpmM&HkQZw8Q_#R<>nUb{S!NlUJa#{6rWXb2at%G#l9K1xNYIVNa((A zYDo-mdvhUKPArf=3td|3%uabE3Ljva@nJy>wE7KW_8OmUv`{F%K(zw^+%RE<@dDX~ z1_|Ey)GRK#RBM?;7h1P`$hqHyY^$^~!76!g{hyK#z?eAxpvU0)KKY)B!r&Z+Q;G-5fizM%IWmzDl~WNbXgF$$-deiarGg6#!7 zJMqSN2AnY4R)1sKoH&`QgDwrbW_Y;G_M6w)pt=3s^_r3tAbnaD{a10h^*CAWkttA4 zRP3#fy8JmqKrjCZ(45vj%LE)0-$g7N#%dEc+$&TD8m(kD68Fih*p^Y=jqBA)hiDbZ z7q!!HFc3jAZ}IwZxKRd}9V=0Q@lj^*1~e?BkE+%gx}*7mF5oMN1MUx%(Ok6*EFp?^ z+3MUlnN^uY9sH#&PP=fNN+poS7$?MDrr^(U$dHGlE3j*fn4z?aC@}EIYu#J=-FQAJ zwM2}gub&@3M#&md-jR_zRlvCr7Mu2EawBZ+U%ly!%k%OSCDy5xWKc@jJnDdqJ zrv3#K$^3b$J3DyV?4L|4`9&c*Os`{W~2q1xdJnB1Q)@8&#f` z>!>}~TVlb{Ij?gj>)J^8HXIniB~xQsDv`GjwB`DBY#ebb8oUmO{`BG#AD3~%o(1#O z;+czV-(Lf6Ut#)fl)_+fkmL=j7&K->Fm6SwLP)nR13gQA?1$pP@IX2@AlFY z`l8=QUN3lyPYElag+57$#%lpb-zjhZhp zjsW{T?*>oou#Z!Uvh@pBTzB+{xl4;GMYw9};+S_^lX?7?4!ccoX$Ymxdi!mpiFDh zkI&oYr8e;(Crfbz#k`gMJUn6eeQE*9>H-IxE65=@3Q7ZZLRZyXUUo zA`?kggIAvL<+HBB(6YLhC(38wl)HC>{K?XkWpUi!g_8N0QnKtrK=G5gH?+G)*qvC( z%j_=#xfZ3!Au&a6;Gbm!mssi5ems}cZ)wiI7YP@B`hhRrQ#Swi52K&&@zH*iEu`&B zb2r~hU#Kfh@D&1`lh5hpwVRzngUO}`Ou8jg|MN)}+Hm1YGbB0atK1H7XGz}&LG2*J`f8$bY- z8xdgXiHawmcbThaVUg)nbHmOkhBum}75SG;E~N*%ut$_-``S$3gAl0bhrfgj8l>wR zTCn`lmG;ju_l=%|y^3kgNs(Gc9t5VLYe*$2G@35_p{wG9oK`^`OoISK6eMIn<&yKx zC|3?u4GNvk`W64^yQu!h7-wouN9wu_8X?OQ{zfd&i|JCSWVOvr=YtL0pTo%lsQm_q z_Fo zKdPN5&@;4+?$xaQOY9w;Nws6#p`XNXgi%KQkhoK)b2p4{98<}EGYwl$K(FsF-WX`t z`TmPv6-m6z!H!tiIk)yEJX(I*FKJCk{B{hcI4Wz!ff0%EmX9BzA;f$_229*N$@cJO z1;@5H4h}Z&mpY?mMgoU$wR-&0>O0s40w<#}2?tB?0eL;UghUE>WcYjZv{UXNHSzdDPQy{_JTyF@N0bip57w@Lb>Ao_FfFZ3jB6m|%6e4{?L_J&cl<}h)< zuk~7%=d#shlZ_JHMlI^7X*_!VT`Qf6059Bk`JsVd63rf*w98nYrqE55;M<6s(NuA5 z;Z&e~+<0F0>fao3JD57e5Nq>vxr-+_J=0tMn6;lmI@lJJqg2dzLo^rO zhFy2ZDfU#QpjYdV%QT4F9~ccRC}*x_Jz(CWzI2kpq0pzD%75yMygD`U9!nvlHnSK&V#9O@w?n+1X6F@F-y+0)XStiz~Z+#%PB99@cpQ_NB^cPZ?+dC?gsk zkceppZ+ua#H3NcJv64%^p#GrM^)J&JI1y;eFvTS8{;;hD1wwHcA5((vV7JXxm5%jU z`EzBud*sCE@=LZlJK0TbXLw}&Ihr4^n_AQh@iKvf?9pfSG{9Mu8lx?Oxg7adp2_Cb zSv2i`Tnf~(*~HO)bZO|ToZUBoeIQNb0IQ1Db!_aK*Nv6EHtPfbNIf{0hwODjaI;ER zwlXfl-L1H{(Ah0ruQhjocdFB!Zd~7cE`PU_QAUi(s^oeUBGQ|pXj3z7(wfNON3tm6 z^pF`)>V>@bT>B@0_~z#lHoy=VIIsx6p+G^*RWp;$BYk>twbLSWH<}I>x zvEXM6GN9v-1M=8*N8tLjCw;`dM*Uvr1=2l1(i8j-=&gK%O~ex8kdxuU5qdA>5X43r z<0x6x4ed-6!a{a)m;W&Xi$ic-Ag>GnEv1eMATH?%$A~u}f7<{QM1Z&E_oyvE{fmn4 z+~j>^tfP=hz{@QI(xrR4XR>d$lx9dCvAfk(hC@}OK4f3y6RPG*xP}O+^mXX8oPx8E zBZzjWX>YSKd#+kUIiOhl6%dHL8gOUtQi>N)dffyK7z@yXUMg~ZRXy=+ zlmFsk^xw-6P~L1cQK%>vW$|G~Oak$j!zl;(dSG@BtE+96##3fpdWdc3r4jJHNq_MC z8oUKz_WjqyUDcPw2ytE=43c)s7IE%eFso^2vf4;uPwh@Um_9}6CK$Qd=LpYEPA@s; zh0aP3iSexm=Lwp^)}5q#ekdBpQvkmGHxN5zG`pU-Er1aq0@ z^4*%iGQLnukcww9hItH=^P{Vo07<(Ynlz-E+?@kFn@cKH=r6R_yyst7q&A7qQrS9f zNOx)J{L1!MajwJH#BVea+I-YCUlW&l(wS~YuAkm_z}KUL3de2vs=q%0PTJ!tv|DoY zvS~r{$VygqGE6Y9hfXo}b>vqmAQrR0Q@!RBGOl#ETO-16^c#`;+nmlW8!pckQ#LgEO+5X-$C98`8pTV{ zPg&J_bKNk6d{zmNO2M&+fTbw@1Duly=W$l*jX0MogQov>X_g&QMy>5lZ_B(IJxvA>iXE42N?$+R&oRs1kKn}we#_Ex! z;DTKBB1rfbbYh6bjpXw1e|`ITHy{i}znDmxIoUlP8S9B*fINOnzS;|GgY ztnM))9HeI-a4o&z^wAscsHc`jC>MwiV8LP_Wg1@`L*Z0&_s>>cth8u^AubJ)D+F;FsMxDT{Z=vbR&6~CL!$O7TYyOe5lmX?snruw zjmP!Nk}$DoZdlhtgF{PMgIzHFs}K`}r0brq%<-7aK}{&;XkuPI1V`D)sk*c<=+>|t zP2VzdkyLD38m}(pia0iC#;2cpj)ijh(e4YV84om~o``-{3#4qWdccf$Q%@USA7b>Y zk(8YIp^qYg*-UW=|GP0XffmE&j)Jz5(Cs2^5=-Wt!HD?i?0J}Y;48&)z$Erd%xbjG z?IT!7?eapRm1qu3$}h0~iB`kbdck3i{)2u{5}#bd23zpKHq6%}KCQ|%l1s3#f4&>0 zbcsJOW3JzjKD}>8dSeN$U`U$vA);D-vT1Z=Nv|tdKcHXQ$=}j^XgRwW2jB)-XxB>M zv)tY^NFw?|X?Jk~ZeO=MagP^goEck$EhJinG~_^2_`QDpM~}`%d%$*hk3N8RbTK=- zx>ap2UYX9s4wdkYXdq@@rx=1Vw?2eEY>uHj?<3Len_@N)h{g|(Aiqyp4$s74fCAMB z_h-btnhq(=EI(xDi7Cj`r__ra4NZLF1lO&gm0qP)3I?!;naxiDJYsy8Yh`?~FPdKpL zNq9iY>(Kx|K-unLUXv}FXs(x=u)xAvu))b7t2~=e68y?Zn@*-6l@BjfDHDJ9Z%rwPr(lF`U0jU58=Mgu(DswC_*Z4ft zL+{*X&9FbNvBakefL0ASE=BJ^+7aQ9loQjGDnRi@PmC>cs@T$Lc?wAUFv~=6X4#dS zaRWpow;2I6Jjwz)2?>QzZD(G{(I!Hd8n+3nR9}m=9@io+$1Gbvk;_=DTMxyKlo%oy zq*t9WwW@&>UB~8(I)7aZvTL=HOau2$fNAh<>rl$8%WAC~YUS~#Xc0u~A044|2Ek2Q zUEVteW74l5Rb)=iazaR ztRNopu_x_q>VB4d;}xR_!E<4b>Q3MVWTM&Zo(gJ=TL&Fl0&yea5`8TLKeiH=;)M<5F1U1LvbD5XmdK>n9dKihQguWKSZJom0W@b;Gpfage zu?+F5P*98F`;EPd`#WFcAR07X&wLDjBG86$@V%zxSpuK0q>2Gu^+`FnQv~!0TgL&8 z)&qE@BU>D{jt8c;dz+223K({^4^EMUIkenN$`TeQ!Zjza*z^;8cuuUfqY9M6&fzSE z)neY3UhSv5OT7=UV2SEmFf|Kp9Nlt2!RdJznZCPJ29(}P>k_1fxZy3xLq`DBoL+EP z>1WapAMgp;%F`~bk4?B1Un&a3r|G>3`Br*EWd9_}H*0cigB#`&FvOa19Qf}0c#Sl@@Rq0BSDH))W`HVU+f)&m*D$M73BAbNqiN?pCw430||imh}1(7_dhf zx}gpo0^ucy7`f{h{N%c8STPV6vgV9Nvrf?JA~waS#JhG|NhEOx*;T`Y!|9+a5exZP z2-Zj1HsCikgk=oYEHoVQ$N!nqUsLa&C<8=Z$P0y4nY9Aji_8YS9aqG<%i)YoA;;X$ zHVjjbSo;}u{8f$~xJ@z7QYlbaG8CdcKozxpn#W{9`D|TOTylhG>Z`;&c0oF$s9MOO M==$_s3h&(f5A1m=4*&oF diff --git a/provision/secrets/emu/switch/title.keys.age b/provision/secrets/emu/switch/title.keys.age deleted file mode 100644 index 1e4aed745642548bbf2e765d4a2322fa2474cead..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67606 zcmZ73vtlR;0szt2wr$(CZQHhO+jeej+qP}n-mTvkoMxIaG&iL+wKI0|ba1h>x1+On zGN*TAgremmaCWw!H8o*kWo6_f5c8sUR&*y|k`?l@a4>R^Q5UqLr+2osviH=Gvl6oK z@?;TWVKuZ?6mj;lF>+@!7k7p-$n#@vzqt(o#1R*I@T_b79jG zHDtG7vo%!lvSInJ#=XBdcsGYGI;rXvAb8 ztz;^!VdW^pEMX00%i>~bZEJ2S#jdU-sc3Iw!=$F9&L;1oS^TEkvmT1ncA!&6I>-Gxz0+E`ZH!q81h!%5CokzLC} zMa&t>)xuWZSXszcm{ZQ$k=5Fi-q^*7$yLqRfl=H^)82wp(a^(4SW%17)WiP2nxd77 zvamUUx}mxngP1Uzv4n?&f`f{r3#XHtqp*mkoS2#dyP1NAo4d7&iwvt6HKQt&qKzku zoP)flmxzOwBs;qrhnBUYJ)@b6rkfm-tcDV!x}B4!g^HV@n!Py`EiEm9qz9XfhqyDl zxw3>3t1!EoE43R7tF^7EptZfGyQ{j4k}SQb5F3+~5hDXsu$|~(XwmeQ2@)n2LTQ^& z`Hp?TBj|KCDVSAhA}PYzb)XMH_zBb$UStA|UV_mDb!s@ zRw_bvudt#RAHKXGVaFbLl|SaQ(fyR!R3ZA`T93c;iN3n5{jNzKDCEF=VMOCVBH8rS z$0wflBRi3xl}S(SOd#H1YL7j|sa$R~T)HB5L_%-v-MsM{Fg_jr_BsH>G4qA-5A$tk z3{wCfnKs9^A9acswPk24emSCk!4o!qemB(!lzL_mp!S>byn*G=g~SmBCQWKZk^^)p zpfR1&pYbs8C&E9*_klNQE9k#plO3T6vssT=O09UYs|aa;uR^V51=B8i`sNv$!$$R7 zmZ_l~#YH~@+^Ha;9;d7`^yH7B;qFM!AVeVvLy7 z>65`8`2WPvuL*#H#c5@_^dC7-(VyZ2xdL|kM4ggFsiJmnzYkm4{U8twcLJJz zx!pOfdW%-P&Ih+shhpotsM0QHUni;aQQu&$RA8-SW7E1c9blUH=*;n_qgqtR*0p6j zH&8eUqfi^Xn8iMFkBO&1yDgsx%1_=3H8S?Tq%2sm0qpnxvkN1&>y4^IEs)A$HC(@maRHxsfBpe z6dNk-$3Z`{!}bIGWB^uTNXuE{`AxWKT5*<2_Xbj^7qGgp7jw(H*`eMR{Iif6$yKII zRdtTs5}5=}0J8S2AnCqlKNff{wCtT8>_D(TViw3Tqdxa@rCQHc0YZaVC9JFlZ$HakRfK^tG&ohE$;!*Z>kI#P?`65tS0j{qq!r zq%t!Ef$oo8ti$CU3t$LmXyyxk+q1BPx&!yLtcnkf{2FxRtrM!Kt^oqD#+Qfy9?AWE zmec>SPg60=FTfgrGh<=5$osOvDbe&I=MtQt#9F3kT#jMCMKhkJU7R?{!5bx`uLdGs z*f(?|71E&K<1enJLs8*U?i|XG?iPyE0g|V~AfB`ZG&y!A5)4?Ew_Q|9Jsr49u4-f~ z1|^Fh=`Zn(Tf!T``Z-Ix%ms!kAf;Q9T{Z&Hbd=w1lZ5Q+K)O zi|%d|QP!b@r+BdT(-7WI8yP5Tqiy@x_LXL-IUHfDPh-PnepgAD6K3LZJMw>ioR z>Z1#K6u6IIQmxAg_w%wTZK>#|lp}P&Eb-1d`_TmUOQr9{pS70ggM8FbR5sH6lc>W+ z&HG%k(rXH%NP1)2q4V<~(qfipKarhkSe!Td+N@BuM2#*6FnkkwcPCw`*MJklEJ>vP2*2M1i74JAijxB0r}GwN%o;>POqikVx< zOO@{501Rwdp2C?C(Eze*m*5ohZtgh54cEdawB+Nn_g^I}XJV=@vX+I$GIhv*IsH|O zMyZYW=l9)secUwks~1D}q~1|#7*>WQ3Yg1lBdRf&hYZ-1g10i8z;8>`iTPSkGa30B zDex+YtN{g(mN~`8EoGC(gUkP!ry(u+JALBTm46d}7havM(9lWAC;A5`xDdfqIF?{< z%`(a_a6c!5<;={v9oRf4lf4UzfZ;?0=0PERL0NX?GYv;8ze62!Cbn6j!o;i?OwU46 ze1;>E^gnIIu2Ax)^BOSby63x=? zu};pl@JE!9EuZ|6hF`M(jOIptmYj3mGcQaeiT7hN(xGk1X5smT-u9Uv>L?|m>4N7E zP)8g%Rboa(J2F8XoUKK)j&zBqI7Cc7l|r4faKKguJzwHS6Jy&*#&v|p^c<;4l<=hA z5tYt6L-R$4FSs$%FqZB`wUN-n&cV!nNs*))?HP~?JeyepORlPl!-%T6mFnjl=Ey6Y zqJ@*_STUer_f6$X4C;~xleX7jwbNHK@! zn`7n(#L_$`-qn+|KzT-)3t}|_7ZTFW_gYmRHS(xh zsA}-Usp=YWu+oiaQ){4?PMCP`fHg{vZ%^hK_F7-o!+_dU3FxDYuNQZUX$2UdqYdHB_-`fOXS-0cp#qAXeZBLay&h?U8{@1ox)sc;2$kQc-4GkCkBbbc0323rZ76Z@2rj)moVxMScZLH)T{bV=X=X_@(JefG zSekxPE@_VpB;{=TXEi7W_emXLaK?wT!ki4SefjV1)Kcm$G(#s(hWOQk###+G)gEMj zwaK~Hj7IBWH~ls;m#u(~?Y*8xL$S{#dXeXJIbz>WZ=qGdkm=dCv<^G(gTx=4ct7=? z6)ztUo5B|dGRN)u^(}lAJm^VB`=X9ez}O_urt*UZb zfxwnFMuc9{o3P0B3ZGMD_hdLHp{25o48jz2N3Q0#rbKE;II}{ojmwLCd|PS)psPIB z-p&@JlEq*31m#TT-bk}bf9F)vuBlW(vv--(aM9E8Zfly%klsTAocns|MUoCUGE=FJ zaF70+!+?rksW318Z9;1;>%ceiAh=GY0)#s=Yf`Is2dqBs>s8xycFo>>(+gN~c`y%} z5VuXLVBj3jhK5R+BiJAJMXdw8mQQ-cI9ajA;&rHi8z$FnwB6sPGfsHQF=`Uh`(GVY z$>+xn1mC`!JJ*5nj6V?>OOtPie9J_mO>;{dIPOT!&THKeOP(RVKKwwO)Cx2$y`H2J z?Y9^}#r3Ioc(aOz<u+>69FT!rmY>@7#zH33a5Bu|aseTGZyIvSaPe zjO#Q~xCCU(z0>K=^d+EC(avbC6dMX!alvNxAGNuUbvxA_vBk%9^qOIQqUlp4DYI&T zf5+Myx`~KA+WS+VCo2=nHezah?WRpZ>uJM4B%NhIfkEwjoRAOIvt@e|O6}}5l%zfr z$t8_Gl^w=*BM6W}RIJ6GUhAd4_OLemNIm-^ym$AG3K%9`+MPPi8Obo~vJA+g}M)sPhFvNg>wYu<{C<9S4wXQn1wZaA6T?-`~R7bP~=NE>23DiD=M8P{f@%u%uwm zV*Nzc;T=0ZbYbJ}LVW zf+Q2#zQhbrW}*=OqU+okMIIS%r$NwInZP!-s{wt~>LXkGU%;H-&o+6Gzc}O35u}68 ze~k>WWx?k-@oVNXO97Adt@$Mx0k0zlAiGx0$u~(okZq$BZ*INTnHMc+h<-gfx3X?( zpykl^DZbsI^Yp1Tfm@In<;B*$-J3UfR09v}K)^Oq_$aXvtg|<+U_Si+0?Fb6q?Cuq zGJ(K4Trc`r`2$i)Nyaqs$m`Nb{SmxwkHO;L6nR+R?Q~oVe;}6}v zM=Ni>zalJM$zJN_4$8YI7=v4|=}@@J0K|NONTPqy159X}mdYipC4m*Z?UgEZ>QNLi z*A@L?{U;%s2?pux&S|h$?iO5agi56s4Y$DL`hBEeWR-mI75{aT<(Yy4HFT49YL_nL z8cJ6h!}5+0tjUDuWCWep>4bE}QW@IvKxAq|bOs^cnR&}l`AbR_4WjX4E_ti-CSkGt z8Q8(tZ$fEcy9LJ^G+olJ1+n|H-^j1AG42H*D{LtT6wA6?9eDZ1>1qKHa#3%ml1?U> zC@OGArS1!?s$6U(7_tjc@v9-yRdq|L%hAV0!8m7P@7mbOqG;_7qJa^tN6*O-TrQ*h zay70K(0dfY=&q%FzrNpPHhIeL;ZZ1P=uWv13GEa?NZ+|T{A#tUM^jFm`4+^cV~f2W z7DG@m{$Oe;B|GrvHMUF5#}B90)JbJDFVrc-0@^{L`KhXBlnn5j95dYZUhscF-6Ayh z8e?>=U3;RJu5zYrl)$g7QvYVEE0G17$-yY5RuN~LCt}Snx%LnJMlb}iC5xo_9&7UApcM5V z9&|w5?=%rF`SAf3ne0=s;y9^v#6A@LNp`W~M5jn}J}%}@T>?(3MqCOvOsAhsisHH^ z;jj!rZ$TM$EFV}J0*!ea-a(F{PY1wqk4_RnP^aagC`{x6(x1)7Kzp8TpS7_y4zKNm zq!i{rPrc%y+Djl9ur{wGm95svQtM`L6oVFM1T9!=tPN>!ho!ACH9+qR(@12M%d{=x zXWiwtIjt<$y$+ls0Gv+Q2@*t3+=mqVL>hqhWOaz4c`RdzE?X3UV-?A>6!Nxrpz-Nq zXM4yhjXBvON#Z9st|gU(f^r1AeF$7eynm7l-}a?>B1u@_#law9&qjwBjGKLnx|=z2 z9zJpv?4|@^L9;$Wv&6@KwbIW?*~roZFNc^lO(wh?E3qqqSlD=a*k0&qla3^+&$@+f zxxM0e_qa77*W0x(=DC?TQAGS8@QxOPo~ZW(DO)MV;N&n zSDV>_Se|>cHJ!fas?~15(9{QS%afE<88MWGx&(3^Pjw$HPjH{IYk3k!*RDo4&a)3N z$>}M35xip8JK_DE1Voi#w+VJeO^{iR;3n78;F}GC`}D@UzZP6SK?XM53LJs_kzwHE zL4LILR5M|Uyh)WjQ(nLAEfv}@DO?; z8dt3m1wMTg6||_eB0e-l)T|&E;PP%=`*GlJ@AiH%Hu$@b)nAM_XMgXw$}!&lqi(|f z8*&3aq4GmVLIp|xmX{yzgE!%y#o_{TYerUbJqw>=>EeOoFmhCMZd8?01P$c6Sx!qf zsec5#`0@x?P=WF#$(_(Fg4_Z3^05g<^Cf&<8>_&uK z2tl_A#`6eF`Au0RPb7ryYhHVOC+3t1YXEa8dDw%;0$*6tbiAnB_NA%Fc< zJ+gT47fWw}^4i6KBtAi`c;cX`C}L^ndfSJDjX|x<9O&31E~HR(@&A|-#=<0Y*+vx= zw!5pWydzPCB6sd!DTSU(LJB6?@K5>0LryeY(11)`oW>t+@Zch?lwvmq;zSS3CE@Qz z>AG!uKF%*eoWxYAWwOrfzE%H#U|;x*gbd30LQfvXXL3=y zFoJ#H=N(IRS0yz$T*GfIy1XLdGZO@Ez!6LgYDK)0Dyhhkv-Efi=aCV|dp*wVH7t?7 zK(R55JB4n@rUK%;vJm*zRiYzrV28@xp5RC1A(e?Ft5ORJSMczw*MAo3hy#EAXDmB? z0b5aTTQFL_N4m4FD8WbMYY!;vT2%`PWt0lKnQETc-9kHJ zn^|{_wq8$UljMh*+%?kfOUH92Uv4lZNdrjz#}^p7(-&1p6lqy@fGOkM{!gdF6cKz8 zYR*z;D38v_faB)_$*3m)U?obRkyISPp3PJ`8M-(A-Df6`8`2m^&WhIypE)`~^hW^! zqg0T}>@?)Npx}%>{Epr~6D zKVyWxU!($&f~#Xw2g4XXYPddimWEUTz#mVMyHrsDz#Y|qD!2XQ1gBFDt&>pbc^t*Z ztJ29Op{B1#sg`UZfxgELx#E7a`|V;`uQYLWF0@3JkIL}!MzWDUIwl_|fL$2_zBR3Z zfQr^-+C1?`5&TaO~~h? zDMjNf{OIm}!l3|ub8sjAkT;)C?2-R&FBRgV!x-O<+sP}6Ew%6c}u)SxF698EKH0iESDbg=f9r~v91-n?$+A2CBd z2?as;V*m!N&y}oUP!=a}{yxtllU1F8(*Y^dqiYdT^kRKDZf$2|S`*?5gsTtKcN?bV zj_oC>MPF;iuzczcyn0Zi1!rRCWmOIv!on!9U}n9xJJ-+m13h@LZui3)UDdX@#r&+a z$wW`1qL*QUH4;Tl6;m2MT5_uZ2b*WyjBtF#z@7inCB-_-4#H{gzu-r zLy6c7l;lc6dMX&uG(_C*LX^U-(+%QZg)@%hUv^c}1V5j7%lm^pyd<(<)u6seM8j1{ z^ak|`$qMrt#57k??61*$GUQ&%#9&fZZvDyk*w-3+I*shjl_WFRxvyH60tqU?r@&>4 zN45y&WwpSSPlFp*b3Ka=j2)Z_l84k-U*CUGQWdL|)$Wrmf5y`<(1JkI z>_V23AM9tz{BsZh6~Qwe$->xm6T;F2SHUo!gJk2=uqC%$dHK|{ljuzRMKE?6AIJ2? zh70yt$wQ2G>E90lzEO`p>-E(O5|&7aRT}Z3OY~aCX4d@FU(fCug-2ciMkxDY zNNXR}pYFqCWGw!1(jK{p;gYf9IzOM?ye^jM9Ns%9B^WWL&F!O0K4O3oH5X|#I83)n zJ;-M-6s?#C3}} z!5YodCbX2iA%Vp+roX5$&J@k0*FhP|xwHVeHyk9V70$lxe(IuVm$yNdxs}X zi6xo$z)#Z5Hs6>IMWq3k-3la4l=w*` z;k9HY;|exzV_s#43ynFK{YcC6cIFG#;=TE1&j%%CHh&i)bsRWKqMPJ_*ko?pv{INT z`wBeg!WZrQzeV49o3BPybOKNgJbJOSHZwpv=`=?o19<=0w(qp1Cb0r=B39-h@|FN`OOi&eb>%q(#*1F&^afQ*M94?ki>aHI

kx?VJ5K40V2+GV~Z({2h!t`sa5w^l&(-?t1=w&LM@vsMt_p z(b$ED83KVsEo$B2tIzQ(4 zXqeA%*?pi?u`yM%F9M_Z*)NnvQ*J+`CMKk-;j2RV$6RaSFfj*zu9ER)Nh&8=qx3d* zOOF^Bt`*Uz;R+V<-q3nYN$Hz<7~j!;wcASXYpw&9cAeV4@yj}`B#wzr=_n6NqaO0j z5@lxebj})qMkR95BUIeKTED6H-p4Y*@jqaChQ(&58R7xXoB>)OFe7e2k$3LTX8H1V zaPrmrfC~{v7cWB;^54DujJm_RoPUhLcwivW+5ML`OvE*M${n;I^V2^Q{36tejhi(9 zbIlAh?Sng2JLhmR~pz8>ARB(tNx@_%deg-z3*UlLXo0oT}x*oZ#@>ckBBbiy<*w%fQS6!Zp9@ z22$cD*psIm+E|PNgNWQZxp?gG`!RhMUFZH}#VqA|FSC5h9~=j%xlkLn=6yJsq(@jl zr38UNOd@B6eCA2Kn6=)IzKoBJ+A@>#a9Jv zHAky4wRwJ@rczXr3IzVUOo%x%K0(FWnou=(tsxLf2%kSGtszTr_i>l>=!uaEvg;vW z%Qo06?*23qbZq23!|bkqcBB*Z$H-$YLM;%iBia{H(h^qzrZ26%LHz}2Q@*lbS%sCI z>FL)%m8ya%`_1fn?9C*C75fXAoNB$^`cOm#QBzk|6XLctG2M+t)LP*=-^k(oN^7k= z=Q!M81#+f@ubXk0?_D$RnpW0*AX&Ivik**9Y%SK?A+a1OAR7>A{XND_n_|OUPwmBW zO<@AHrB-rNmOdoD(t)ZkFkXU4N5$GuyV)CBbEWCVvP)-f$q;*#$Rro}lA{TFrtE;Q z8Un^YfG54I0%-SZED`z|I+w3rI(LG)<2fFKn(C@s#t_Y)C?JH?lO4XSBjP+_la+d7Hq)Y?qG9kN&cG*f`G{6-#4fj}urCYQ6|-B7imCj~2O?kw z_0AStisz%o^SDO-5Vx9B)|YN$KnGL!`Tzu~LI|S7{-hRVw=ni4G%t{4)Xos7(Io}= z(9Nx7fUL{fx=5Bxr#cxWiQDCDUvZ%vXqy)nk=i$Li8ORVtdmZ5-hW%=rlpU(<}9u~ zp-UAI6`_F5g8KamNSFHbzr|$&GJgjZ@9Q#LqC>`6YbQlrNF&WJ0QtD6i(7uKG3T38 zT?>cS1Gm9D)UhZr-N3C~#4m{dlo&AcV-TC%!p1@r$2=GGE`89t+}&oeDP#!hrLu!c z7d!ssDP)Z$PEDyEbn)J?m;;S@j^zxmOvrBiWluhB)Rn(AE+JHBIeh`@26KdA;U5Qk zzIx0`?WP(&o3P2PpHxxQ9Tw$@02KmpC@++#XR*Hl(UclPD+62;7_I@>l8*Epa0_vf zz`cwf@sO3ZWbHGwb@-0OkbzpNK7%}tCKDCi2a>i)>hL()y0J6 zCM43}YdVPna#$sHtFX@$lHylB^o~~MssRm$h$$RT(U!AWS;_uOl;lT+wS%UbV`h2A z7dc3G@fIW++R~zGBF`N2ii*F1$siRhEv5=yTh25JZ zq?vvP!{Ajh@A_A?aoN!?<{QJQ6Ck>#w}@Tb+44vp3sy)?sLm;T2{CppXkP{sZ(i$| zZNh)p^R>1O3ts1bsS)3Vh;2uWgDwml@M0PJb=f~hcK7EY*@sx~y%O@a@3*C15e z6l!-9un~6WjVmWiEi%H3RfmbP=iMrhxdFJRAKt%+U{!&&h55qWiGTsqt-Bou*HUoG zlgr$t>`OHY(i-WCP^=5Hlwga5-8BgPlH?yQkhC2&)yA|_20F(x0*opQ+}y+K&LYP~ zcuQe=^7-KfOq}_(BtNKF(#YKjXK?z?`$8utb^VflhJ&aOTWNS0m|%m#aZ<#B|H|kt zGfChrzb#wm^+X9cgPP?V+-}O5uhyn>txvvmg3;J_!F`@w?;KfIvA{E_5C`p9Ytd`* z)`Cf4ypCC%KaEf8NYxlwi_^dajNmZTZV3amnnuhwF=|lkQX>I_Xv5KYviDi`(cw5a z>ygUseOtDfmkWMU>+P;OuUMJt{k6eejR@Wnn8L#d{Bz&|0nq)Jt}&e2>NniilBsXB zMnj2f7@=yI(`%5jyw$;>DFg#xGWccEDZ^iOECg9($4|yhylYX*Z|$J;GNXsfF0l##5T$?gF%IG3MTooYGUZfNo!$ zP8kBUJt|m-ixP6s%aiiB2LkN3ML+TPb?r}`u@+~SK<^e>T!w}_iGrj}_WgEa!O@K$ zW`vihIYdalM+_|9;m3eqYWMQamHo2cd6!r|wszkyw-8M+xnfh>*wxpgqR*OnJlC$I z%E7uh&Lw~I*JvWoU|9MjHzc(=j~N{rDmJemK`^dxx>dj4AjBR>kJPd^P_`_coi+2G z0qP!FB)ldIJR+Ck*SQA0g&#Uk%!DN@!7?t!K)E&xqaAFyHhD>oIGkgBPm0zjq`-y^ zeE=tb4*(OS)P`TXAK1RTr3P)UI6%$_Z7a5Hg-|X)dJJuw1y;okon&xDN8 zljt`6qn=dno*1yvZ%|~QT{Ficm9(E*TcQaC`YZ>RDs2JFW5m9sfdN6R8~kSfR+<-| z?6vQ;@Xp&otT;H&u{_JCFU>Q=O^L^{_?5G&EF5&i(=?;l}8;DX&Ik%kIeg9Nx=j;5UWZ3<8 zR52(TfgFFqMkUXy`MpT2MEon)rRaCgCcmSv=atUmZc(Kl5PLwo!r(w*cd59gPz{DT zq5VMx;0U|a-2ZPUP2DtOpQo0hcCTKR zQ>>Bvu$@yvGv?ZWxkEv;hom^0T5{F@O{fFaDXtpNA0GtqDw=`1%}U1|?9IgTXgf7W zmL@X0G_P@Yg^GHcR#-%p60_596R>TuzUb zQ`(BMIGuyk`;TMzPZP=>dC;VjK_ft&R!I)5z0`$FL>})z1mKD;6$#G==L3H@dchJs z@L;*@?-|-PDyY5NrGbyq+gIW)Bjp}k+|^TCl$vfiz<(0ASwiA-VX^45y&?&H%pyeV zG3HP7ROEWMc>EhCVV`ZsSDju@aCZWVmHY}4W?o<^Wy&)L7y?x;cNNXzYA+p9s&!$vTcRPVY1L;tAs;CMbu0`rugWlqs(uQs*fk z8CiyB&ILIs<0VK-1aJw>E~&EYv=^yVTq~$G4M$$IC)i@I0)$<1#XAOY{rf;HTcWdjg!E*C@MXkLjt|>y(P7 zDMebdGDzqikd&R6&NsA8Ju-iGfm-#siG*8J{pJOxe9pEkMlf2< z6Eh*)a2^nqZ9p(oRcD;WOH6JHa)54uGG6MR5q`nr&>kuwJMj3g$9OTyDt5o*A`!t@ z3oyeOLse6R$W;m@X2O&*A;D7k+>xOL1QcFwnlv1ne zl-PBkN@GvjE1|2*N8cDH(W?EJr^`>@)o?9Qef{bcl~Y1T#PSbX%*Lkmm#FT(gf;?RTO1iw<=KL@O~yf6rSzfH1i7+A1*}S-c*$j`46en^ zmV{w2s)?XDZ(ZF6`oq%kA)np9bvId~M#DHUVM4tiWoZ$l;yq_6VyrpU_<)zSu|&^s zEjK1ltvp9lhI@bQ#G?EbVOdg4{eE*Vb5W9LrI5Sjcge5>$iP@D0*C(h%) z_yP<$Ue)`Vo8O!e_xGBUt%!(L;&NBk2$9PpwrTSumvLZX@Jy7M z5xYxKHALb>(!>pW+-dZcvBivXR9qkT9{WP$zwg^Ba0Y<3>!mfuh8;t41v6f1BzBr0 z8SopN!)6i8PUj>h3QD~Lea3)IQ}XO-vPHA2Ivqq+qZshI>R18tj6Tv8kc-J{?#9%U ztp3?nhir{7j#`+^}R==EoT$4N2}dZi1rjuKWv=eM97iolO!U`vtbI zgxumQ14Hk4-TUn9b(&|4UWE;PGCi-6KEH{J7;@Jy;2CKpBPq>aK3FDh80Mp5c>q%4 zB?eUT-lB@*e4n0uZjA_+n%~1R-&fS<1RshOTXcdr4C_~^qFGIVWO?L^%P)80GBUke z(30%hkx(sv1G<)8GXy&10!wDpAGI__$xq{`hycK~Q$5(Zjt%`WveyD&kzxMJR-K7w zjIaC%Fn-$)iOf=qg7~E%q<2tf|;70XQ;Szrn zEQ^z^a|!H{>}aXo;mcmzSPhZ?OmU_b3vV9b5~RiKlw30yV+Nf!ok*kqGA9`N(ovdkdj)I3qlP7$vg1J$(7&(PJ0k^EWHvwHkA;W?n2DALiHu88(#`UgWMZS)0SXynn> zir)!a$NlXTuCc9nNwX#Ua%3!%rFb9ZeRKSSeAF)dro+I5{Wx@ZA^}*DBpiXTSQwFL zD(!QYP-P@RfPwE79=4ttld}Za$DtOz$emPKWaHCZuB4j6P~5PJ9_?J)HPgA^lay&R zX{uza(MIeN%+%`RzR>bLe>m4hE+9TRQfD|r+ld?c^TyZmMRg;L4`aa zLs>zD^lvh1y8fWr+uNJ+{*hlxsKF|GF#|%bbGOlr?-1z&FRO|ciSNp{qXK$WSyM>IzZNqENkOG!9`7 z9gCgNIpL3Ei>Y3X?*i6DbxWf;uAW`e_oX* zg>wPPHr#D^!H5-^js3*0knw6pQ+<$htDV`Q<8^ejX#qxPeFoVQ?l1R>Urpn}Qd8|x zU624I6R%y#TLs3a{3l~s11mpB1uT372hy$b;r2IW6YI;+oY+fmV7lV3jO%xR32~MM zIO0736`Xq`iqfOVoU;t-!1ERJ7-}AV6v*r`lj9U8rlgZ)=C<7Ow`u9|pI3vQb^Tgs z$!WrmH+N2+C-wg3>4S0_QUQ3Z1?=HfHlFZc%`te=UbaTJ+(*@z_tNiK%Z1@KS!Q7) zRgj~qUj-;u?xyEt!mdk){6Sj24XErr5h2%nq->iArva{EeOu^;)V(0)(Nvp{OPQnj zr?050!JV+-8|USqQ9#1U9?(|mh>jDTFqMCs@<4v3s~~(j9YVgoqPA)&d#vgHt}2C7 zFPp5;_LAeF)t%+`QQpFaI5m5e#8Y5t-C?5t`vVRh=B);cRdBnQy1%LTTv@|@IfeCeg zV(z)Za*!t)LPfEp=oTQ0c|GZgRgK47a}opcgi^Nepe?x5^3~Cay1OdZGN*zUwx<09 z*sW7IOA?ja`RAK^7ERNJh3&SO&y7hww!vx%iuiF8b{RG(SXV_D4dk%npdC4+*9$7 z_m$nYp(tV*GGgKlD_%Ri?XCTg$)*q!SxrS-bCF?qc10fFpg0skNOtd zxBiCN#g zd9F`@0iX7_m!UhV(tlGX^Z5j+qT%*YaaHR>4>(8O!Rp#kTDi*1m&Jg8r zUEk~nJ$E2rr%jbhEh}dUv=4Bu)$=r5LO;@pmbebovzF*ADT>k!wzrN|Lui#8J)JZT zF;3*SQO|uBlc%1SO#vF&TuNqtUB_R^%*c4?pP#GuaV!?unG;MUVuO`H^m44%GOy?? zW3KCeFJXrRD3EMD*8%PY_m_x-JAwO&T{e=~Vih8`N4GIk9S1bm~o|k=8uyeUU=;lbDCFnUun#%z4 z6`Ea_C2C|*GtUYEAl%s4YaCEwfQDlV+@1rX`isk*EIam`=1h6J$-WDKnK=RM@5s)3 zIJ={vJ6j5+qvZwxQbK0332-DqbBp3xsR=P@(ZuX=VT$dTGIA6Ry?qrt5#0YM5Z0lz zS(xKE-;B>s~FY#Ltfa;U?ghi z+|Q8qw*vA8O8GC{z2$sgfjkF{15#V&MZ8vYk2%L(JG+l?^zhhSKCT0rWLLev#FP1i zCa5=VWSl9q1r((RYvk_zJJ3|0*+2tU3)p)<8<-ax%qsyZv*h}%t@js5QhxXf_kHsx z=${SEq~LP1p*#T;*tx2OdQxn~S+%T)(2Ha{Y{f29vgr48{*g-y)B(kGv>|_mV}m8= z|MUlDH<(^q3X(s6wopnR++*?o(|0_4d!R_QmSr<*0u^Frp%Q|zYi?K{LZ9OcPvkBa_#M*ntEf) zRbMv0w)mZTs|8LGrPC+2;n!5QwxK@+xH&mbk0+yjtxvVw=?rf3JM-WV)6rL;-dQf}~ynyU2NWh7GTtk3eXK?SagH!o5qTlDbG=<%u&Wyj*(!h^TSBwz+ zDY{MuE?s<6Nh(;f%5V2sAk2xFPvs)3(>Wsz)Z7Htmhv*#-}ON=Ab{K)%!Gb*NS3`_ zk`ShS{*a{I>U;0Sg_L|sYYW0|1w(Gm7!tNFV5Y13Y*G_*Faq7cHG`{b3*Mgx6iRO> zX87X0WZub_F)muI9}*-1EfKnB1&W};4VN-JbxBKf-A>R#1qNeJ+X%HZ?P5y)RIF7Y zPqTW5pZObxn6*FAp>+% z>NboFK(aqBvXetwpxKHe?X(CxeZM3MgE3fMDG3-`LB%Ymk^q-e&S>SX!Gw%#J6c6n zDr=w9s*d%lf(M{Y2T%S(s)}i+%#+*mn$}-4{$=X9T!XwVj-JaT~6|!8Yz<5e<=Hp2XsBjIJttbic3d z7YNDhCAZS}SFBI{%sdvU#CbH*W(of+4+vOBv-zaVtO{@hvwbxGDcc%p&hE1e7=UTs z<(x6P2ak8g-$#LKlquLxyap4Q-5j(zwllpH;7%v+r^k$cZLAN-3HL8b zXS4?$Wls4y^8 zeT=K-@d+K`V3n;RNB-XCYoN$-0Kk0-#@zH**m*lKi^LB2`JSMSix99KA~Tl85UQ+1 zCpojNy=ucOQ8#UJI9q;{kb3CuP9ts*aPMeV*` zyrbo+mRoHtu9|>kC_k?&b~(-w*aT&0862e+VDz@U3hXi}*dzk6Kjlqg>TnTCVhvg% zybtW9U(5`ISE+1`DQYzWjY6UQcRyS1#MOexD*Az4j#AsYoaM7inxAG(2fb z_0~KU_YPKI)fevn7Z!!J{Y8!_F0}C%--}QGynkSF^%P6Azm%m&ws-yp?vs*cO66qN zs2%1K7&~{iUXjd#jA<>Sk7er?-`jj;Do%qG;6zRLRl*8mJ~?uo#Y+`(e1*h0lqCB< z03<-$zfQ70(idoS8V&(0j^Y-#Jq3hGgic8JA#RUy;sE(t2q{?Mc_U9xz_^Z zo-=P(7AyS%ybB>&p%Nl0U|p;_XgK;hzAS{8drgp~`0*Ts1 zD&=TxW}}zKVCqFEZtI`f&53BtT)6fpN|@5}%1$`2|INw$v~3`H({6$(Bl|#eC9RoO zeet)g=)KM47bXdQx?H76xlneeF`Yt_fz}3tA@FLv&k=8%)cAqQEszm4DT|H!Qk(z1 z8n z3Z25sCMBqi8^kAU`{I*0PFKZLtpiC;ozZL7M!X>UF(kM`QHZ*4vY4>&B6_Fmk{1tl zN$^goa2|TlgNZ~8!3BT%WKZrZwy8%`Xl94*eEb_7h%}y49c9V-V=VZ?pZ3wtk6@DT zI_KrZ=w3zD8NSF=`W+SuGV9ez&8`@LUv1=@WSCj5)lalUi>0Q5OIR!XHjBFY0G!%o z@z#j8x=J|60@>EM_c}h}+LjIo5fXFnPnnvm6HO8I!6a!!zyS;p_U^t8i@ru~=l4_9 z-Cz(8dt4}mrIa(pwZ6;rPiuk3iE45ZILn$I=p6v{UYpaFpYe=Pw$Y~Pc-u^Zy%7!F zbrf>2UaFCmKNw)TJ~ARkwED9?n!~@_H+#?f6Eo6Gz&Aa7no4oZ9lDI5&H7Hy_83gT z(cSZavj$(B#-(vMp5?IDox$SuSeNH~1n-~-9AB9zmCbqMS7!B4rK(}u4*s%89H zRv^KWRl+Z*B^!ueiq@|r1hXaS)pwV6&d}_d$s@tf+XPN9daJD=H z0iEB(ue<=ZFztxa8?1xSTv7Jm#xPu@?PK0;O3F_ct!aG?>nyb;;O%I&F47$+-;I2W1!?%6PC}!Y+QTg2ch3Ecf1k;YMucrN<@FIdN z$jrbLSp<1!yv-5hCoWvUt*eRHvH$i>pO$sSf|F9L^dTpqwUL^+*B9YY^No({yIqg` z1Q~22S`@3o9kQV4Yhk3^%QgUJ=yYH5V(=kK-}LtX&UV!=H!4#16)xMz(*oV689h`c z_Ey`B2_ZgdhwyrqW3|0HW1aos=-zufOq!0x2j9JBRNPz%6>5gp^jm zn|q4!vMT4G>O@l&aoFWiDf>1OwGe@cE%E6q%CE3U&H13qM`C=AZ0b6l*=jh+2S$*Qw_UPPW{{K zq$hoKdo1Fa51+OSOX)mpIZ@JEf+cWPG!oLV7*HN6RE8|5NnwVpQi7Yx&6Ew3xI7%m z)a&kp#&k^bz2k(2w_+`UGKLB}UhtGeY5+qC6~;HSrb#H9-TN`p7X>kYgq3mC(~cT& z;P938%XmgplXFA6*KvECLPfa|9Ms%(UI@y6u5(oK_6QVLF7XGy`oX%|#5gt|JZ#sK zLNM8anTOirQqIRhZ?zJqP3XgvkpIPXX0vKrA!?z-Fq!k^ST73VF4!A7@Bsg?u+nPD zQYb2VwMnl6J)n=gt!Xgh?g~TLiokI2qz5$)xB85!qdgR&MjOK^K()bhpgp>zjvA#j z-U8rZ=+=Ywb-{A3vZmCRaOfA6CVa2!{`@os>(mAMt2!c<7ytun z{*8m95d&2h?*Njm#i5Ncc(pjmGGvf+4F+r?OGt^rKN48~5f|KdsZO}-^6EPYr?L#A zPn?V&VEY?Ai7J59)@Vu};BOAc*lZ`;-q8=DL2Zj0Lp!Qfd=SolA7?hkNQ(-BbiJ9j zjFFbfue%2RRx&i`_XRuvQ#1N3YhB5ADCwzHRfyIaqBg2r&1r;@CxGbO$XPcb1i%HG z5QuV^dIwI^3a`tT(4=(D9XNQSRP<6QDk)KdFf`ZOTX2lk4zk~o!o7-zjv{emQ})ew z)G`W#1o<=bfYbaKQ+6asK|o81ZaU)iO<5PGC9z(E3Z!3$cE+=FrMo@lT(B;lLob&t z9#3QRhXM327O`Y2WbA~WIiS3yM*tw|NW0shR3rKFTmKKU{2X=|0{+ag(Z*~kWTxvrWn;Bh!Dt|3b4@^^R^xsX!r!GD zNHzd{4NIbq406%%%FL=#`Pi1x+k{xEBYV(phT7mS!**o3H&AO9^z~G-d=%Bc-ph15 zLT!`C5@$#|T7`5%Zu?Tel}8HC9C7tD=t{K; zvV@wx2Py{CVCuSZ+b|oFfwDj#4<(oVMfV*YJQ)g&cS>8TX}W;h$1`o%Okv$*e|3TE zD~;mD^6tKorybw9Cnd_w7T>>q)n{W%SzJSZpL<|F9j_tL z$;~o;;;Tu^pI_l@*m7OWuxYiapL>D(G7%lof0BzX%m<=Mbza^dUPi=nv>(!De#mx{ z1T11>j)hs5eyB8%o`<+52N%q58S#hMm>p^rtQFbDx%zypGy@6rVu=Bf7vOhaWQ%l; z5yoYJw^=(ZeHD#`x#H6<&OK(0*RuHet5diBwvzju` z{mEIVHNq3UMAGy?h&Uw{ay?f0o?GmUT$*ibx^!Dz>zTgrJr$z$sHMIN+mSLq9Q67I zc_4-r8ySBT-UC}$ljTpxD-!IYsDqyseUW2C%cb`a9*!SWsIaV~5*2yfWe2)vue6={ z4WB{Lsfep9QTT-FRz$eo2|`z$w$!c7ui#_PHIX401NxM$?;FKXn`Ld2amSz8BO z^I60FtYax)a(js0axd_J0&SbB2TjSD+(3 zWQ80{%#T^)Rd|;u8R>@-AEIq5P!n5N@OX@?(EX^*ch7=pCRBcPJk0gYYO%nWqIWF_ zZF{s7AH1N|rWklQj$H5y$kJGsAa|yhewkR%k2oua(6ciSF;ZJgtrm;t3py!^&ih^X z$8{nzpm`#D^~=;kwjE!*E^-pq8(?$Lsh=Ic`7=^oul~CY$;D#&NI2U%@9%>B3;XB; z$9;T~QWVn;i8)Qm&QQJLwTvxr=SMCrE0C=+=vpvxI<&2=WA1Ev!WC8Ff_*00yQ)O)(D<>x|=U4@L>GW^q zpMc_tv__8fjWVXf^Dt#)>FIsnNuLvQ+!z4P@!Tu}e-SxZGXDilI%Yq(F%Ub-;6%a^ zIgkZ`PqeQNx`cL) z;>8q|=_V!o+3N4mE-HkW3rLF+VIEtNA&63>72u;v7KDAKBG1!?jBL*kwGfUe@m<`+ z^a)ca@llg=5?zmi)6_iJ4{hCuBU`UOn8y}dlp^xK3|pk^I_s%qLXSMbDf1*k%=lMe zSUGlEO^Kl0*JHQp4?A(DBB4JZVa4F1uc8&vD=Pc8!pN9fI#6jMK4W-H>;Qi}$y<1J;gTcYp zhb|k1h2)AO(0oa+&4ei#b}K50TPO2s9ZDF=1T|ov4U6uQol<1OdE&h=TN|*ivW%s2 zpA$p>t7J2Fcj%cEKgu>hLI!ijfd9^>mPP+MRwA@>wr~6gTYg|xk-$><@qkgkmUrn_ z)pKmg&4a;Hx(VEFRvkz#c{G5UWS$W_K>!1osrM^|+(VL?uveLx3Yxp` zy->ZD}a>r&)KLZcj}BQE|K%EQ!fgjMTeK6#VoZGT=4? z591KvM2mW%QaPtacP7=qQj;#Q_no>k(OLyL_rZ#a8eUdpw)*=UVSJnT4xp?1)6Ql7 zQRg0va)uVyoDE=-x|2qnURKJ!ySEM1YVS>D0Ei{f8ZgltWE?qC%X6xr#i1j$J&Qzi z=5Wr4Ok}b2FI*Ba;YOuuU-qBGIEcZEXB{kMw<(Rk;Xg-%1!6s=EFC4>U6$MowfjY} zJocBd9sI?({c_{jS8z(8Hxf~|d%5^L*ZieUGOuU={X#m}g&V}y(Rs`ny)#kho5i8f zE_pGms6|=vKk!3of3#DqpyS5eqj@WQPkJl0pn&Ky#@i?<0KPgSoz zg82s7cjQDunw5;01(_4h9m@bd$(|IOlyJr-3wnfnM`2N$mZ~X&GIvB&_xRuUSq~Sn z?X?75^Jxzq**m{76v~lLDh8{UC;fJGZzN;i1K@VmGeZgi2a@wtL8_N+@1GG-<5r^06{O`WV0<3^tu4bd<))w>K06po zPN;tJN9*OU3m@+e%+Qf_TqV}LD1K+)CToNrHO+j2W*m8q)ySZ4_%&wV5K1| z7XnAAp|tB%K+K(u)O|uy*b$0k4~);M2ER1D3tuhH=G4N3kU2v5(nWINeLcE*7vl3! ztAgL?2GTyY2`c0AnG1B#3+vNxB<85-K=a+XzVckIRaw9QPw(X}eC9KgCPwWZi7~+Nj*V&%C>vY2GVh5$?bffAz2}8P_OLfbcdo#&3 zTd*tiS2$R~&tl(^V8q|4P=hnZFYadE4`3AgiAD2b6LoCX*(vFy5(E8iAv#D(=^>#6 z;xA5P-ZM?Y-7_M?6`5b7leH9hS`+{gumZinfF$1L{dfLBLwYpCy%~mv5 zhlDiB98VZx3fjh8f$uR#tkQTAG8yqpOH2eig%_=%tuscX{!KfnkUyj3lF#nc>6EC} zJkEk8e?CC|DKhoWUEXO3JwCNl-$opCm=;igxGC`kyzLwaS)hUkGiWF$2jjR3?-<_= zP3*b@N*{hMqZ1?|0~u|JS5+z)2kY4_y3)m`K=5_56g_ln|5zVR;qiXbW4*6PSA(0B zyRl)ZOTCF<8JU79Rmx3ujJq`*+T2+fnVh{&E#q~H3x1m(i zI$;Vt(Ts8)Ul?EszH6=jft`|DcwnBC-VTEv;nV|VzU(d}|$d~cFE zmQFuDvy>FXAR8Q0Rn(r#Orupj5=%uw$>ZvQWJ`qFTF%O&o)l*zE>Qr{W9H7Vhevj% zrv7qjo}3?mZowGXu5uuRXBp+B8#6(!yF|ymmHjtGArVHmH973pf06nmUS!BEgY6lU z!O70&ZOzbSx*}QwUNn<>f$D)ba%HK273CEVtRxB`6_y1;2oSLY?vMbIiiWc|f+EF5 z$SNv8SyDd(qBj1U`^~*Wnl{OC*ujVI)GAs?Kjptr0-ohwN5U_K@y1F~#bx+TE)N6b zd-}&TR}Y;OHn$b={bvEyPaDzs_6x_y5QS9jS=)o#1luJyRkZTfHdjJOQePa%tDEtdBco8jUdfc)F+fqD{P(D zW&0`hyW48n#rrw4F_G=Z3P&s9zE?hTGT$aejEwFvrqI?9&AFjPXxHRL0KHaR!B<>n zztU^1v)a@jNgeyTe4Z7&x+)dFk;23*1zrlfQ`E9~J4WX%Z;fEgFFBH0gY_?ai0=8^ zXmAY=+|2gj#XkZEO7|R|HCAi1_P?>OU6(ud6FD;&=Ku_@rLGv2NL!eJS1_Pj)0`|x z<1pX<)!)?%Mny{!0CgkK2VkfL<6V9u3Zh~xMR-2lO0K~v`kL8-u<$zhahlS#n(cNa z@J*$kjq{@p@|mc8U#;?YSHkX8Dk5d*l+#)LTlPN9;{E0K+M&9nc*^$l&&EEusolv@ zBJu1q<(rZNSffzt2-WRk8(6VNT-yQhLa>wF$E7k$|KpQ_y4iQF6@I8MompsjhW1;V zwgpbSWJZ9p^E5+j8ajm;!=?nLw4FFIAlPB6GDuXw#14ErKWZmUvb+88{`K+(HuEpm z)zEdGIXjfb=azQv4bawOus3lKdgiL^vO3LMMzQwECu551RieIUAtdtVYE*b?ZIBH_T}5XX3hq72^VxjRro(E@df ztyi=OFJ@KQzu~&Rg)L)x;9MUeo>pU`;*^5DqLUvZD8Og~WLI04e~lWwgKKLuNQveL zYdD@v-Pdn_Syogq_Uy6mG<>G-8tC1?5u?aTk%H1k3lroMAX2>vi7|9cas-gt^xMK>^2c690{7NGqSkzjF~DxV5Ht1FaAW{{BJsC_OF`m{NZty9(! zgPWjitXv-6+fi^wP-t+|df3p&_q9hCHL z*07mN5V{}Y0HTh9`~+(ckObcTfRR&emZH(-%dDXIU~*@B@u+Fga+Y+aj3!JMAEfv1 z^1s3k{reTr%Pf0m8XU;xGP?7(5x5B@5S9%$%%hjLuJZAL2ATA>lChWj$E~;9vmwU= zpZ(kJWmA;Ia*VCx3oHQgHsB6XE>^XoayHcY?mo-le`I8E;? zTdI&JK}CE2MLTH`{QpI!n@l0<$+kS|=fD=D(tTBQ;=2woJ-*N9eg*%;eb{Wi%UdH` zpk9982W6>X`G;k|IV~Md(S8_usMjV@`aHjp zN%+8YyDUo0l5#RC#y0Hh7G`w=*_^i z`T(t+-XRNCvULo(Odx4W~1epAyNsaB_?kh|1&bkH6No&cknf)b@DQR z@n;_((=;tGc52(Dkp1v$(Azp>V6Ddi7lZwLHPicyyuQF^uat{I8QV~7QP@Tk!}&)9 zr3?=n-(N#d4uByGCmMbnmBY!5twd#HRUOmH4c@rX;AmphoZzQ^kA_G+39#iYbPW_UN%y2OK(l`07JwZOt_eo6^LcMi|GhI7yD+Fq1nl$OX$ z0OAHqGnW*O7v8cW(W@CnqnjdE5st-C?(>A<$}|eKN?4KFbrUplzdjj#dTuOPBJL$1-D3H9h^$K6bamB?P5PMSI z*^fUhDKxf1m-J0edBa5DJP4@qNe@L{>C`jY8!-0S%51*mg2G2f{{tL|JHJ7BS8Hd1 z(Jt5Uhe(K64tCf2F}?kVP}xMAV=&I88T=ND8%Xw;*XRp2nftkzc3CmgHg$`%-N{ci zeJApee^)lzof*+YW2CQ;Ww`@tVMuTr{VYMWZQ5B#zwvT(9fFZ~l|llW9s#BJmUMg_ zIxONh7AczLQ8f2bt@ayQLeA-uuA=ZB-0!uG!UExUm<6AZ7qW}i9S?%zY1xjRS5GML zmy%(8FaLvq2q`i7md)W|ieBAZ*u=5)Nj@fE$;J|mjZDN-efIkWi$gv2#oMYfIO53Y zIxU7R?z_V2)9lD7jQDl@12((hq=Yw(s_cU#OX?f<@ zZJ1_-Y^C#oQsS8{nsp_j)9D6EIAkq?0J6cY!<}b{iYsXOkn|};nKQ`t)^9^48XEc3 zLN_k}jO^h5wX4(##W?_k{!WvF)%*POzBR6)%}TU*?dA;gNbJs;6?dX(6YxlFnrzOS zUKN7QvSS`KGGO#G!*qUZ1UVZX(RV5)fiZbUe+vI9#0Vv9^bDdEYHLj0b-xx6%~&=S$t^d&d9? zu-vLi%D3$@tIA%IIWk+)M&psM?0S6?Vdcmwklhv1NJYY6$sLU|D#{BNQ$rpEA#Vd8 z?k$nzE3^kcWE-`wR|~84=i|~(6iO&-w{p~HVRfsG8c5-5gk9Os#W(@QoZl^}Cm~<` z)|kH3!|)M{ONUK5p>_(VGFTjge5UhjE>`*xQ5y1h zfV(7a!!e7UZB*Z28^~b7jantP7L?=Rl)7xm-mIV-lgCRP1A%23@4Fcn;F_`h1zE(J z42g$qD~m=xuCJUe`SIS1nKh{`cO9b+=X}DO3kAvhQ#v+oG8Uj!B2a*fOe;hTlqRy_ z>&1N0EZ%vN0dpi`raf>9orXSv$A74T{KGPoDS40mUv_HlO?j3eJp;l=-`W9$sbPvi zbFWrs_v)0B=eMH&bopW{N*#T;k6_>y&ELqW!sLVPIXnP3_29R5RYDxt-I&4 zY1J}0LZXcuUF#Ib*EFG8e=~hK)1x^fh?{x==_7B3lAB;YNlAiyBxuLtFry>f%JlZt z5lScxRC9P4;mF`LxjnNc1(FzD1Z@>@aQb$jRY`<0U)RB}+nSMW zGJ3j-t^#~{QNlM{b)Q7Qfz>eKPrV1NNV4uP6jBjEH8;>DJ)M6E7Je@<7YsPF&SVn= z1*^;%(XI^s4pGZ|9o$eQk;PkmI4pl9uh@f7N#X<-96j-{HnXtJq_Xs)jw4Ce;u9jj zQK1-Buv3i^DQeJv6XWS%bV&3|w9QIs%E<5B_}hbr^bLa_-K59H65N3yv}8FjPfexW zWaMj=4d$b-^{{XOx216sPy+&5-H|sZW=j+e&Q$?8VRjCat(RVTeig^$0UHLzHG99u zhe4mQ;>JK-+IHkIIruzHLhtTyO#dqVx*BPA^li1dohiZF+}T7MC;83`Z*}ijuW^``JJ4v5lA94{p*=XyZ#YNSz9ByT`Q+!e6e*2eHE5ayHs_us83Fev2! zylzUs+-wZn>(KO}J?;dzt?t3Ds#^h?z6#Zo^^w#-cG|A5z4<{?kdJ<&l%ndS74Z3i zdtUJn3LDZA-@5H>ol$gffsw{U?SoeBE!E2a74<_Tr_upR@c_qMkOHhO@$l0j%Y^7V zeISxC(OdJ->K;)%dAk7w&xNt&fk?FTHvlA|=eMJPQ2lb%A_?)X=M%4<%$D|yvFN>rW(3DhmZhfbVkiAkbz702f!~oWomQ}dT|D&n##o6^`~d6 z`8&1E z1jTZO$>!OoBc2u0d33M&2z+Of50=Ss&eoq%U|(bE!%ok`ke3>BzO`Rll>qA7`ovH} zU+t$d8*)cyzp#oFKq<+zJ(({|9`JqRE-};gd5|K~q3O32-CtY$A9;U|%wQC*M zx3g{sSF&&wzMNzM4alW?#;050Efl_nD(++wL%emM{%&<*MfjXQES+P6`t6fQdp?sYX5BeS6F*INcbo(Vy+%IBM0B z%e#6rI5IPq1=a~ulwRO8*bcLR!RY=7HW0}o%l-KX9VHT;FSaK1C{#Og02RjNArzXy zMI8#|gzJ|y+$Ycm8=A2YN5tL8DweVQyInPaS1hRrymUudKY?rz*g!?;7;MA?wfG?R zp1eXuLG(76pi^`}C|XkB-W`UQJl~=dKo-BtV>I~YH}szjR&)UncB?C(st0U_e12k( zD7)V%*goY;8b~KUY_YUNlxOGKs6(DSO2EJdq?O!D`y_8FuUs|pxnI`o?TxhP30l_t7n~Qf9IgfXB&{Yd#^^(obw_*9 ziLl?uD!^FmM(S%D?maz8RAJ<;^LEgG`Tu0@Af^gWhnYC0Z>3LO|6x!(Ltvn%+w0?i z)oj&@1vn6vx!ZhJ4@{g(5P{T!FXEan$nBp~T0I%T3hVO0^;#7V9FXqH>#V@X#7D9U z#@i(EPEoq&0#m(&xlh#o92K60JPA{c_a?9Ru^EizptrW1(KxGu$r9AUQaXA! z$p zYMz13kTjT*J>Pq<;}6rJK5gDM#HwpD^UvYQ!x2CMgG>G3#$pAeO6!KsBpeYJ?vZIJW3|N&Z>c^8QI1Vd#uSYk0y2ArW-ecua>^85}J4l8n0 zAul)T2k4W?N@n=q_X|DTwi-7e2Q3_6!@C*KN;nGig`lQMv8}i&!*DMJ#Z?Ag>v4Yo zJKy8Sk|&MUCKO}BNPqtL8XfPNRd&M1RQ`yV;xn!@JOu!&DBA@d=OnG+v3#T8zyY~s zyoJkZ#}*9^l*<>Ik9VHU_Z#uThWdx3Rj;F04JWrsZ-t2qKL(kkJ9(OdSGLv5%-yEH zhgaa2&-NxbgP|Z1?-vglKEpp64iTeS?Y)#-iut&9D5ua9RU3Wsm0rOmva%(to}c>T zX^m5)@*12w2l;HlJ`9W4@@Pu5tr#}%)T(s~9eQEC+#Z+V+H1n#F?sjQ3 zP&4qZZ31@LB`hJ$I>E7Y} zrNL_(jf`|=H5;Jl3L0V$rupOTJ`98qZ1a*^wkO--_78RU14Av=A>G|$${qU8p|jT& z3$!KZ->>s^^cP<_s+u%l!U<+KbSMzt{yTy zQ-!#$FHc57nRmy)hMm#Mbjz==nPLI1$G*IHLg3Z_83aJIr!~*J&6r4R=P*cI99YK~ zK(iYH3K_l)?fNcyoq`L$L){2MX=VSlXgMn8U1XMSNpkImTbBjQlFRIlESaH(NRC{T zgs`Pt97Ec40P5tXYb3Qqw*PD-wV;BmwhjfJu>IV(HZ&5Du35=q&6$$;ZPw=%{13VoW+{eAhmI1%5Zwxmt*Z+Ug;vKV(88}acfI_6n~kL>!4y5D zM}ct16lN-K4-^?VN2SM)_%kWajQ5y!HeNTS{mKp$T)LYz8?m>^pU5?|IRb~*WZiE) ziA#!JB$Mh|jGP`dGaEn5uTo6JIRA=Jc5u^yo}EU90M*dq&2+=h3wj`StGPHgo)djGra z8h+f$XV5F=|5yvgH?`b%!@AHoF_#Tf1-4P)ZaYAPIB<}F9T9;GT`vwXzx0X0)R|aK zxi4jv*5T}{I!UptG$)8rk`#RquJ^-?Unlyl??b}!;}`t9$eqsuy&bqG3H_xm93rWU zN_5T)hni?9c40|EGmVd6WYbgPp7&RO61N@&=v5{D3$EV#m5ZdT9Ns`b%OX=MSudCI ze}7>yPyl&YxNkWg?b^1L+^RyYv>NqgPO>VQDksHNuS&5EseuUK(-a3=GoEIklmK2b zZQ?d9(?@FymII`K&h$nMg*lC!$gR%)=%$QY z)WuDwgCkp9nyfj0MShIBfAvBGU51_mg@Z`ecK`2q8gIF`90QaCRopI=9W^N#uA3r~ zGxHWza2)UsNls+Jb#6N~c7_zqexwn}j=nDlB@LKQXrcE2eh{Bs`$LM+wW=N>sKt%D zysM|erX+yIa)hHcgCltLtx2?Hm9VcR&fp$yJwM97&^yog8=+)HlAS{{}rS z!tm$?T#2_r8;}QubM*h=Vm+Xu+Vh(W50cE4{RucB&eH(pt6mX ztEkjQtmxzZQ_V^H96m6w#Q}sP@v{Xx=T4VU-n|G$(Go0UK#6=IxNzd_1w#j5J(a3T zCPN}$PbTT7J4);#t`WFqZy2rB))#RC8Y^>F_uzW~k~Na}q=x4;r1dNy?UD)4PMg2-zS^>9E(4^0YEqas$m;O39yg!-T}>5F1ySXSpOx(P&H9XyJ!lgAlB-3jrddK4lLBXby$q2 z;$cS0FXn-$aOs=b+U{4Zws_=Se#sm41)=59!^`~Wy96g6EI~)SZB^`tVGPS`9zA{O z)F1-A8_{IL9yP26NmUsUHXnt{F0DIwt{~Ec&}jo+Zu)9caHMRd50cxkBXUEm>NclX57FH$}lT+Bu(MyUf=^|32{?;@b2GF${Hkv01kv zZCHEy3iF=`Sq8F~N8tC%01x)O=||Cb9c^#x>sEIl6#5H9yh&If^a63-OtJ9T11MoR zb@YSn7QEV--ry6rN^+x6=u5N3v=VxTq!A1f<3(qedSqhWS;;<33gg#ftjt%c^zjCp zvBE?td)e;@sFpP7f#vvXdwdlIx_)CLO%$+y5K|LuO3PP^Ae!eC-92i4txd#$D6|=x z%U21F==%Uu+OTg0Rwm0o<|fLJ!xRL_z%MEyOtFYGQvV}~&r1Zwp=SgL1eank_>7WK zZ1i8A{$*>M7O2%WY z$MQ9}qJoj}`Ane{y8nC5k% z!N>QGQedJW;xTho9iudSO~d6;)Ho;vNj zzZ4bC1}bWVv1=C;jcB6Avnpxkwh5tY?HmA6<#VmlAT1?`o?>`U*8)PuV_M%rF?b_0 zBpFQ6k^A=2ZJ^Bh5OUetVm77lr&_GLZMOLnKab;yHG>wm2>Huxn<*#B=>&Y1`Vd)c z097j2NHgTebVyjAg7P0eg-y213fd4BW!csx<#;A`b@aRiL$tglPb{4S6)B**oRMe( z!CSctu}9$h(vRw;pHWfoL&)ERvG~;F7G`PZ8T6WiVuaXem*1}n)77{(Ph)aW$z^Qzc%y6IkQN@DuxxFsLpofY0| zd7sNGQ&7M#ZJE8I$xz}V)GXlYlciy8!5<@_s0{i!d20((VX7B5(JVwQHJ2w%wm60h zw_@%Sl)M3}RV7caHc;2UFl}Y3T9!%Jmw!(J@)D1a2Nx#;B#n#OLo)yws@L^OFp%rD zA`8jX{J{`C0K=o_5H~~@5Xv#JJf!uHgnrCB+3~n(J-50s#-gjK49Yu16BpBzSIt4F5hT$IVJuqr6LcLiTujk(okAfE8gWTPN9(r0KHkv&CBTsa zW~4|f{^0mULpY(`wGTr=ln0635%Eet{)?ZiJA3;PaVgC`wj()1yLT$7ZM_}2JOJu~ zdRE7vzfl(0;ZP74;+eHsLH&TWjGqdi875UD(6W}fvql2A<%$YWcI&zs-qNrNpIbwT%mz!dJS~tx@;z(WM5m&5Oe^XG?Uceu7 zu6>3#8*a(;Y|doVBvPjKZvu2tOM4g<<7u_bbbc7!)R81i=(c{$2PgD{{ioJE?}e1m z({$%z4I!as>EH&k{<6?b67A-nX#^!I&9#O4Ohn?LAXj)Lk16F*hdepV%qIg_r6^TG z8;P)3G1yA&2|^?|;DXejMy9z;rsMYhwW*|hI+_D2BVCQ}f^Bo)-$?3E6h3|D=ZB^| zDsqP<5~uU&*;ak#FT7jj8;QxH%{B*wJlBvSx)Ur5g9Hl1LIkl&!%Zk7PQJ~bBvv(t zgm(sw<$41rx-l0k4uzo3j+5HrM$Pm!b{q41Q$<$NkLea`sS+2owQDymKvPQK;T@Y# z_Y~*+%qlSCgeITC%g-!mDC&!%!I|d={5>DcD7y!7fZ zB;r8I-1%zTtBjC9+o+o!QSF>^+_OiUU$Lb(Db;VX&f4;U*O%Hj6Gg+U zy!7#eR{`?nqM^pp+>4KtKp)fG*KjC=<^d3jXHWA&e*8d3gff)Zo8Tc?CNBK%Rz=VlL+ z&NA9=Gb88YCEP?OL`XTN@T}VD<|XxQ8|_XAUDuw`O&D~S;ZQpWqD(ya(979s3A=K< zD<6D4cD#iy`n)Jy0YhaGxlf<2#mUOIORKLCSY^(YCU(7qKk4?3GI@GX8XNB}HTIbe|@_6{Hzp*av@w$oQAIm^p#Et|>!`b~npk6TKN9?OxO^a<>? zD6M}MqX%ua{Q%iPo~2OK6C3EbtoSpS2Yv0cw^d%wJ6qamIG8JXfrgELT?TD{dAt~* zcMjW0Mn81SZGa1MQ928*b50A1S0r6-T&8Z}K;h~u`V?BAiR@PiBVs5$f@(1dYH=`E zk|o@2T5xhkxpM~=pZ?M=99S`xjte~prP^29aTC%7EYO<88^3}yHgLa_7VMwVq6CWa zSe?wy58|apd7j4@WJt$?BWh4$7rN0T6`C&nhZw2SJ&om~YdE4`#pEN4%WDA8Mnz;> z7>^~fLw!d!pb}ijxGoH6($WCB0-XJU-R(R*p=ZtWiM6_&E)44pk4Svn8;|;LD6qPj z#|jhka9?=(cun=%2wsAxw|&K~ugWmnkaqa@_eoX)dkNJB_RAVsg593Sc(w<`x*H;0 zgp$HZAmiX;*#Ey#fz*VwYH$_g2Hd;Fcw*kRz4@1@qxN|$^6S%|1(bpQ2Y78JfyF5k z%o{mKa+?N+Djb)@^azH+q+abd=iW~#AWKCCWeO8&RIz5xl8~`j?i7T4C>J?fEU%GX>}-!iWYQ*JsNNK zV#0CmF0+!_31-#Ld!+J+joXlY6BX{l?CU$$Nx1zDW!^btOtccDrU>y8i@{f~x)+Be z)I?L59Zm(WG)HbRHpQpnBq_78J=suD#L!-_7oJFNMhuym z&j%12p~v8xm;K^$>Riq9s8gAWYpe%A-JTU0;$|wfj{k!Yvd1--sqX6n=$wkbhx{8R z^%^tl<@)1H)$>F!-WaVR#}(PvdM}wMUkRJk zXPd2v${BPeN>{Y<@p}d)YP9}$fuQ@=I{})nUgIdq1Vdz(&EmaWI`y9YWaQ8 zWa7P0&SuHZXDtgrPh{D4zP&=_3eQ-0z=C%j%alOP8&phTc%wl)1Ywl_(r%72vx_y*Qm{BSk zQ;;?+-(ec#elH!E()7V$TqE>)GIZ?51Q5!j$(jD!^r&Yn8M3{cP|(-?{Z)27PU9p7FrEER*Y>f`Dm&_XF{WnVu$`L>xy3-gTs5CPuIpG}Gr?`%xEf-N^uZbgG{u=<|`+ z+0poUS&Sld(7pL^ZTONNYe>JVM?B_Vd*~Ou3rBW3_-ZbZ8!6p1UH=X5^2kT5%CXB8*EW4UuysoRNGNTy9GtnrmVl@Kqv)R02`{w03W22 zPRoG}Qe{^3U_8Cuo9uDy#4R^2AfpZX`%;J=M+~B`dpkoe$gTL`HcND@DmIn#VRYF= z?mnnCxHauuaP?3|lrzd$eWimVV{uweo;(;z$=pq-_lM62%#T9?xll;brR`CuhUU9s zZSipl-~9zx+xk*Ek6fVd*m}QBc^lAnN)mhZLR_Ohr@Lh;rD`Q>?Y}JA2X@uAEq!=;`=UV-Q4*}TQ;W4_ZFqPlUvCidg+MS3el8@A~0 z&Ie4kW<7-(4CbX_;~jh=pP6LQ$hx1`h|!{9&|NTK=?2~TM<~El0Vm8@?iTLcOu&G% zT+bSM=)+6I!~~xKOQ6ijO#+Z?#02iGFZZ^>oHLU~NRa%2i;1JD7cg)&qq-*l6;cw; z7e)tgyUnjC^31&Zsu|QHp~IFmpOqW9o@X3%taE-UaIspJ0+XP`aU3{jE93v%Kp_O$ z7nRKk2e%d9>~Vvq2qvr}r>q4M)>%U60XWgPLe)z>-UY&8X1J3DY2)AwJF0^SFr*{5 z7Ibo-iN|a_89ZvYghZWdM~&Q@ZbodR1=#p}XmBxq@-szmN%*GM5Q!OZ_+k$?54s>fQ8BX)f=ZKqB@ZDP3#Dh2_K=5oZU>?~p9W2OfRHk8C z$H_UhtrpEX1-}VTjEyy9?m*+W6h9G;+r5h?VL9@W7uS}7PB_UBFSk6z7BOmA%Wvp) zs(bhOF4*G7X5*`VdbULXOSjZoWZnr)V6Xh9%!1YY7|xF&N^LaW@zPoLd$Yczr*oWd zcteOzf#CKHscGW zWuuNk4PTpJBq2gpu+aRV+&1B%WGtOtw9u;PwkO-LsU2F`YQ_X(^j#8hyK&^~k2NTB z@+^#2PcF?{=o#Xx@)+z^JJ{?p4HV&!Cwaa-d0Yr#yK9XPq#dD8bhdb88g0=Aio2MZ zudR93lNPZtBfPnvOI;R9^Z?FO4Y@qQaXZrdxK>O*=~Okz`YQvsqG9+Td}L5#tst@$ z5)xb*Sk5V;XNt1A1Zw}i`A3Cf2JYX1vNbS5b21*um%26KX4jyf?C!jySC(yYj9t$w zceUWQH3OX`M(7D?Knq%(oP4n(S&IN#J|f; zSg>pt$w8k)`|pS?kQk5|wi&#a4i^%^R(S_SOKT+Z$vH5I3P=;{qDKQ|mKf|#enR+f z-^kGa$ctkYH?Eq2q}Igg--}XC)L}MmT+A`FX>u`TvuWbnuIxe zgIekYWw3;@Ya&V}P5gA)!srq={;mGM7XEjzO_5iUl@6Bs9+oZ8!#%j~UJ#3drlkf-#@-S!cJ$`q4NeCKxJXm!GN{qKHrJM9>^ z(RwR0<_@Jivl6%DvSCz=ozb}Wo_@2u<<5I?lROAFne-?;2>l6iHxZ^*B6PQ^8f|oj zi(@%PMG2kJsm=uA+Sx$emwes9rT=aeRi~M~9X;?4sQnx#ga!>$+5CLSzu6g%KaE&m z{y}3%I$@+mYTf34l$u;%E^BvS2k?k*j!2=L1w;+t@H0qvkFNMp{=#XAp4W`jo0dR# zFI$Gs4L0#t*{MJlA_7?_&&-v;AxugkM1iNFKJQjOg@{l66cd;sBw#~CJR#Bo!>5%K z4uD#6Ycu48)wL{Qr1|t#h%?sUPaY69H<2b$e3N| zG5X<@m)idv)mfP(`Cenbq4!O*Hf+o$Q3M{g$oX5)3G#3YP`-$FKun}H0WIC+`GMLz zY^@NI8f8uVlU}Rl)!S(`j z$pUY5RTP7$M#oyd5-~3n>P<+8O4TDk7c$2{lz-v=1lH*_xFp4`RKI5G07LzBYg#eT z`{m@;nsU%FsMq#>ns2^x?M#oNMe$^7Y7Tg=e_|B~yd zfGC28gg5-+U@IYRZS6FnYeWt3U+V*JdSBZCu}z576k3KxULXAaHr%?y4&@k=*WSfD zQp(pz!NWXd~K(ZOL zEiIqz83)p}ER+L%9wl;Ig1nJbl!kv_gkyDgd+6S$9}FQaPqWb*G{v+UXP8BropXLl zPq@0G;1y5XkDt2xpFx1O!OJNZ1&lw7lc2TqEXg0VR$*(QrqQ0;fCUet^fDO3OwI{euQ8TGzd z2*uOisRe67s%60-dN*}2PmXb!*(VH(O&E~#pD)FSe4_jKX8Avh+4_9Rn-IY%dnBup z`9p9*78aW!dSpKe>qh?s%B_NBL-G+PCI|Je3@ZHibXlIYtx%mzU=~=7DUU1U=psbs zKDKLWqe7EO&$P=Oh#?J~LrBr_`Yjf?Y>}J9tz29WJy^BxUYle!R${J|9QKQ#<8TEL zwjMCtr`G2Rg*k%XeKkVU)M~kR8f%cGD|$Y_&6Q4iAAjcBX8<0BW>bZk`!>08HfC zE;l1e?J##NfyFxoZy>zaV?d@31qfS1uj%8`EXkC>xsYj0r1uuTpinZm=7cQp!Y3$D zi>W!UBy!(L-+}c)l7CcpHe$sgI|J~Fz%d^cdKtkHoFZQN=|VpP-EgU4NPsKRVZARP za%LUr$4Pj1_BGbDCvuGtj5DG)T6q?6#{s4lz|r@tJm4zO{=u3t|3oALC+=?G5cw$2 ztlRSMLJe?xq*d}-D@HhZ$6lB0AONZ`4F2yXrimSEyQn0j1o@pyv6XH+)^lX4F<<&K ziL62>rA^ekV`2$gt<1B%zs%qq+rY>s3@&Dgrh6pFU^ug8_$^hOuD-jt`ztaXb59mO z=S%#MSQ+2NQn{G_eV`%kJ8|&KOot-lyeHIISArs}cu;ILgxxJC+oIk)z~)I;TbVA* z>92aISJ@KVP&Oqf&}967kiJ3^4de>2w*@&^SmEb~Zf?lA!{z{@uAmp?QXzry>1moandM&y`l(SjCf z8K~VJzLLp4EcOEppZJy_S^}nQZ$VW*Og_=Uvg`(()P3?kLHCk|55*qMmMPOs`_vyRhjEap1mkKMUn_YZ;uo6gw?Cnln?oDv_i@a|%HY>;Tp z^0KL6KNRh$nJJFTP~Y%iBdIzGQxI0TB|Y1tI>@RyFwR}lDe%}8J=|}qE1=aFfIy=w zj`DY7Kw?mwQ^qZ)FrhCsC5i8F`|K|YBXB%X?cND-*m6#Qk0+nOtR&P7ML~G;1PcqG z1O-zbTZ4QdU`4}Id1WvbqfnOtjB~!{ZZ0lH*Y9$V_lcl0UM>aLM_#y#Mbwud)BQIb zQK!D9o~Ga~?4psq8*{@uV>TC@Y>UHRM0bPx874clJwCRZT4szV$PERHC6;`oK3Vf! z%vH3Y(#byB@|{I^)Ryu&3EgJqi@<@PFr~_M3O`SjQ0U+@<9GaM;GEz-R`WK@%GaX8 zkX_r?_5);!>>N|xcsU+3Wbha>hPKe9Uf?}ex$Ppg>N3b}sd172+%UV_qGz@fjV}C~ zOCLQ2Md=Yg6zfVI@-dxoNfG^w6B2czGWW)HbP&r^Td_E?-fO`dE?do|6zWg0MGG|H)BW&1^RUcO z4P3I{x4z&N8r-3rNGVc8OyH1a-5<tK%kiCN;TQ1J&EcJB`j*h3Dlt?8n=whMfooQNAZ>;NuF#7%D^&_I4 zap5&6B5P4)9 zsA}4N4qid`(G@Gp#VPQ|%@F)l0>QAi@z$GXG~&u_K&SG5S2elBY?ln(=WlV`DHJz| z;8Bg&9OxYk;09BhjKtO>IV3hv;uk88nH^q>$!;XRxA31aLP6P1(OD*H+0jMb!P~6k z!U){^MI{uXX_#bxPpKTLn!WI}2~})XtPyLWJE;3~NS;%6 zo)#GM=kW^l2$v04-Hv3URO^$>^jkQ19z)O*%zJPed~-H}JU%aS5;`nZ@3uh@yydbws%RM*ewm z-(kQ}ryneSAfw4@De2f-a`Y8B@~od58IJsr?uGh7Ad_E6D->7aaYW+KD;IGxXSTgK zW^G~{6H}^rA2bUuV4LMLysa$@vAK|<8IE2LX99?9FNb;?XBc?N#E8%Q)ZAM=)xuJy z8)fQ&lgyGv&(_QM6-wIcEtKbX0oyQ;&MM4ab01%ykojL|m)XM#5qN>_nXffkq6M_c z$&T()gw%xEDTs5)Yn+!+s?wRQ-*-;saATks^y)w}z}&96)?Ytq%~fhP>GS{Xixq&3sum&%{7K(l4Ci6we)(qc7RK3k{PQ*c`gf8ib)uV_m-Y`q1hoz-N{}`i zZRAu2pQjpvGC^!%9ki-uH29U7TEq0Vi>_Z{+y9z;#XNZ?-s&Q2;e_3S>25B1eY~X* zi^;R{^GK}M8O2wnnKvjs{w^ag(Mr?PNn{bvDK!cWotG7NhNsBc)mzEsgOqpO8s#jr zbL3cIvkJ{dR+;?lbR`DI0NHyx4z|C{c3N?kzxkL^!Ao|1b=G3i=%N;|UbXg)22eT`IfB2r`2qP7luTJ9v zq@T2Zs#(w}r>Wd5N>&Xmyd@`u;hdj7Xt{^Gs+lafYj!d2)xoSa!r4DM8m-Z^0D_w0 zLgp?x6*@98o3~DrRkFd?h&YB|I|Fvp)oedJ02`D`JfuKI9>QDgmMRqOb+9M}S$fQ9 z35h(I@hv_^JFUPA1Cv_?ajc94POVuScrqZ5!xJ(6Fg8!EqwnQB{DvniSq4@whlm^x z3>8T#v@X3efo{T({)W=du%7@xS3kYFdG9P=oM^RHOdO- zw%;m0x)VbExFH!za<7uOlyBS2tY>+g0AdL|_+l%MwqBs2vx_Sp`S$&(jE3VGgigRp>NRPU(HbE0Rb-+S*x4J1aB zu;wK#oq40)H`SR;C|}##**)Oj{-055E4`JF5R7*c!J3NcZMCb)Zc=8I+2or^hY3e5 zb(L=1LSr2gQ~~ll-r#vL<$m+HGqq?#dK)rOm4v_GSaTI3O_?8>pgyLw1_&4|dtP_5 zv?zX9RGReffUxn)4h3W*oKV?|(QMSG!*d7;cv~`{N|HiCV;a4IfS`LGqSvbQOxzkA zF*IuL`Oz*}OI`0vlsBnzIVF=f| zIU#qkiPd%wQWjby@lQ2_`l-ho& z`ju<+9n4QY!%&NBZThd_tU^57TV9S>gbxx~Scj@!2AQ5<>>>?XuQeSw zfk?JY9S>=p8j;T^zFS3VZ=(smrn`gDp@i`PUlcZUEC_QCMG&Z1@umC{W|E?CTn+M1 zdWuZao~PV=dOl>j?>=7hPZ3aG==Mm%pM~Srk1V-W5z~M_gw~jV=)E#?m~XQx8zzS{ zsoFnjeN$U2{41fR|-hIu0x~3cz$RR77!yNj>L?%gVx!J84RoBJN(YWcTR)Hn% z)T=!Jq+gmhGh9eE{dLB%y34~}Y!WH7c>ChQpmnW2k;@Ydne99Kn#V@@cxb^>Aa@uQ zTt+OY^?c=z3#r8|;A{!9!d2vlq+7*{7OrQvS1!7#OxJ6D?u!pMw_d7{ zVu0G7%2x1_1Sl?SfGRpbgt}U5W$K4un8|)b00UjNiC*op8AtqgAYAZAVp>WN30_uT zhh+1@piD(}YS_hcMWA`z(s*JECCC={y)rg= z61%|39kD*0qiS^T_OacJmsRzDGZ;+467`(vZCEw*;mRm6w<~r4CcluMPZ8lDudgw4 zzYKtrCO0vX!HIXopI1zKcfJ?}Sf&ecaEOoEX4P}hj=m?UyDi2#jlhPQYF7oM9wLDc zRhoYpDClB*kF?%@91Y_O&5wY&*_-7{bGceswWqb%$F8keP{&pWFGaP-C#(d_h=|H ztbe&BqR;U7?Jf95@ykJS-4nM6PjQ^_U^~S`5fw^t5jl0V8lZe8VIkD>Fgr^|Iw5PR zjyY5g@VGNWlsz==;*M6o3xPI+Rfv>eN4w|kjk$&ku>7(8lNHbwnk?vcLLOZjet&Mb4QPAd5MmqE}ZdyB^6N+gn@Rw?0;a!>zCGNFCY<@niNLcw&}r za4&Ul<4akBzr}2J8MMuT5r`>|O+*gKuMlR8!$UBEu1d0mLyRm7#=xS6YUr94S!(uc zQp^d4JkNT#U@aYXtXIFoG9-J%9)oR?Q|dTD_ZgBBcyi6y zS6AD8t>rkHC6QF zfJ;1O%^wu_ryCw)?$<0=;h1gALiGV=z1XME{QW_!lV#u|zqAnw^Z^3ta9nyXDRptY z5BbAXJs#-LS3kFWhmLUW$SjHzc=_F)wXyqVcNlA;u21VS594{sl-N=v3v7W;*N!f7 zD{HKhCND#OeIoSQrGv->N`2Kj#7Uu{G`jTcw z1vn+KE>}1%)>9IvL%T9+AO(EbGyvR`Ti=`@#?VyHLx@UKw_1MI&@|3)jmaK)M-JsS zr&%zak?wTKJk5Qvi1~{6&Uq9keFcjxsl}Z31oDL#BKV)z=Y5vcrG}HC+D@3o)_?9L zOmduM_0cKi#v8ce!jDG6IvS9pz7vlJ10U&)k!JDqJuvXU=#oapZh7r5ly9Wya%=fm z!kOLF{v0@?iGNB#Bm#;#D=vLlkRe%!IS!0bmBk@G7r72?TFhOax;ZJ72w;;7l{?t` z&g-N18F->xQSEA-9_;x{Y=5><}nhq zc|hMGoUlm7!?`E35Ox}jozM4;9RI<7g7~rJpCseN-ke+n*+41ri|in!|z zD2851X!Wl5Pg`Nm9!j!sT19480#nu)keSm;g-QMPXsVsXMfDm&p6VQLb2{2ga=&XS zg%6&JgRRTO*%PzyF?u`8-0-DZ{1>}%!sXr*QtEXIz)%g>vbt>tRHAS%TRIsn{!TL( zXcq@WkSDCZ&ekCK!sd(q(~G%~B(RM)(9Ao(cn$h5Z+Ho|?2R11DH4~W@c)7A?#y3i zO02*ZbPRn>ZLCijSq)s9xNmV>9I3o&5O=6R4_S5!&Rsw6cx}LBPR%@)y#jCQ+H);! zF1$vOf1qMvR({Af(SiC7HedvMom*B$34y~_vOYkT3rulh0l;vR?It3vK!LH@2E|mO z#^>n#_k5f++n!kxfEt_$hVy_OglRYyKG|c{5j_}S0A-vwZj)^AhgiMSkRL6m4wArW z00;%WqS#uTVnE4Gj6WM16*O%kBeA8u)uDakhxQtkamLA6U;4|Hy8>tUL#1*+&5UrG zM{w%QW9ckpgR-)WK~lXZ+luP_{LA5=<94oil_QI0!5WD4Vg9)nN;!)d6qM_}IsQ*R z#WkKMyN}8aawSIYFJ3$;GgKGm4IKy>i~eOhQ(C0naqVp5^XKYtgkxY|rDF$Y8wzRH zgq^ILaQD96@i%Ma&FeRwuaBA4j*T=>02Ay_s|sP|s|2z)$%Z71ZM38p4-x*vk)sgH z)^i5Qgc8c87lqJ7pIZv{g?BHJ8f@%9X+FHwV0DfxIAyl6*j+gaIMHlV@MA_N)=7zr zLRHSHP4*E_3>5&?-PbGE6cF1zelqLGnFgxG&W`;+pw+Ncgaw8M3oqUUaE#0~+Xpm+ z;);HR5Z3T!?<6jroSDzJI4P0C3|utX>)gxNF_nYh`;*ktV$IMMG@_N`gvXP+!eC1opi;i zkAumX%DIf@Q(UQ8*?+)ezTp4iK$$6mvuD(xD?=eYf-dG0%Vd!8IZ-Gt@}Q>7xb3I% zlh6)Ssemi=;nuM&7;EIS!KDCps(k6H=xGBL)avWnBzojM*fynhfuIJhcj}opm}6UG zaipA-2HFG_aEb)KBas9v>c9i_WLOJMq15Moq8Nafk zX$Hv{IHK?&Q`9%Yamwh%o@%txl_N^-NW+C!6_-KVQ{Z;j$T2~htmS}ZD}a9LkPXRk znT8$TqeuHpztsdLiNf9&*w0^(ELQ>@JU7*81IhMxN;_9}73DcPL@Sc5o{u33>*H)2)q-nW0GQRHi1RZ+XfJp%jCi~Ne2 zfA7#>+wY6&NUM=;Z%Yiy>;7cc6Wu9n!^)Hd-R67MbUT>Wybu}EWj6x~%{hIKX(ZSmR{iU0fs|tIPT%?2{-bh@bVXA@DS0HYa4R{!xOLF1uTPSn|W_Op@u7 zuUA6i$ucalc{lRa(w>jFPr?KCtB%!Ge^{cHjW?r*ATMU=*9mO4)XS4)bH8|WW`BW2 z72QaN_r5St6rwu1HY$S2BgmWXvgEOR|JiGlsjiN~FK30f{q5%G!FUyG_!Yi!E%ZTP ziE?X_&0J~(A z6(7JkaX1@RftUU+#FN{L9BA7n9eUD$?@~QF%F~5*43dIkR2xvF*U;OUbGoli z9r?!w@#>BHjhMa2MP%c+Bo}wR%;gyo9U!1H8V?EK8f9NtFi{OhGblw?td`tzEL}Qq zJKBWBt3?$7xK-c0<>A#IBH|ldC7TJ|eDU70M$l2`NM+#v)Zvm+bu&o!Bh_@B2ZGrx zjf!m-LIfxBojehxUCQGbDTS;5|9b2XO9MdyRIg{R+6ytuQ3rFWRG~I%8i0yc7*b=l z3UM|Govm^Th0@*|mzVC@*Op+m1|4(P?VGTCoB>i>@WG~}D$wj^0KizFXsbFRZk zXKz2}N++71LC9HDQy^0jIR|4QYt9`Rg{1rPqeepfk%We_%j5D)Ne})qG+KOjXw&?4 z`J$pmUDQ|i)66)2aSLo&;w%{*pjGif|R{B?OvFOb`Y zc3dk&u+N&FsjGkL4Vf9anPPM!q0)JFb;^{9GP6jm{8Vux^oStWXcf6bfClp<9>>0u z@}6nH0!c_I^vftpblL?_x+qL<9eE7^=QOB476uG0auBWVoy~%U7)_-f}hJOo+Eo=%f$h_S$ zQh3FvqcEO^Eu+D4rkFyXbN4Lx9{Epyz6YUuPP6X zQfL3jlHX+j*Rt;y|7JDREgHmjXOxP`aiD3%k)+{A>e%Wfpqsf~M9yJx7K=$mIqg^c z-`F~HbsxRvHaf{5xQ-yU;ygLpua%-F28dK`rMU*sp+v-nuJ(wEh|SeP~*Lr=08lzsEj*p+k|<9;~+ zS*)1FD*;%X`c*Mb3CKHNWeXLCmqRy8_F{=DZyb5woFv@A^vX3}`&+hFrn*&B(-=;| zqNvYoz?(wYU?2Ag?qWnfO~|bSSvMjY1Dib%lB=NeQQu7Z31nYF6plWh3n-G_+xQc> zv@CnA68ZS(0iPY0{GY6SyWe%gAj)1s$5uRM@pzy<3?Ij>;>#HZrn)*2(@Mdr*T-mM zzcvvDz4(+1evHJJO2$W@)DCcAbJPc$TrL|{Js#_(nZ<$&#M$JcsXHf8fl&_lSfLqd z?7jO(RHE2m(B<*&R74p2j~rRVi{cX{?2d(fMY+yoqQVhVFC$iw z=D*|4EgYo;!|sXIj68}Qy9Jc3wb$A`D3=lGALB<1cqUF-bublhk-X}z^5uwfA7^S( zJPy=DJT!o@A#HA#Iqi(koTv4CH}WEs`k%_D;mj4M&v;k}xtk}ndKGMCgjP7N>`Zz3 z18CDp_wa9SYf<+OeVy`)N-YyjO*-^-Fey`t@*`G)#ly*&t~QwBl<7VQrreT`Vjcfa z$RPPz9N1cIOi_sn;2nK6VUjAg_JGGYhB5k?mBFq(1!Z9r$j zsmZW4q{_p2dPH1HtC?i-O?w)gkNt+VkiVkVw z5npo4{(!=&{+mvFI3!48_leZBw)9Jn4;FQQjj9Jwy;=FwW=yy*3Z3D{N%D z#CT!$pwz+;fwZ`P%K2;{#NL>gL@bi<_>U7gPKp1w5ck16hV4kL|7+*0hwt!SEP1YD zZtD={XE(or%zI;6eWYY>1@Lv9G;3M>WmdReLIE;vCC6nrB>8O9)QVzlGX8~aguMw9 zwUcnRV6{Y>dA zVmtwgUurd22M=8+wi*V$3_oM<%gT@ zU8tb0FlSwKq%lcV!e>SN2^dhon1aV%QL-2XAXJJgys%nL1ZlUX5u#^3fg{=%n6~9A zZh7yNGWeSiHfimd&vG~JVurdUQ#~I?5YiO6A+k7jsM5H=qJx$AB zib@89(dmZ2bA8nh%X%zs9eM7?UXT33w((WJ#3OaJKto%2jL{ZNdC+2?yXNa?%gQ2I zG$lS%rf$9>9pCWdOQQa?vqs7G@||tybqP+__xHj z+Wo_77SVEgcMIbqmbc`c{0+KQ{!Qe4MYMkg+JFYO^r!o^el9v@*3jvS(6}71MIMcV z+AOz77-3;fh3nX^^LwBa>!b}gFr$|LNE!xUE$3qw;tJ?OIP&xn1L2u2~#EuE% z32^)aMZizxNAe4b6ATs2&bV7cq`G$8+Im)u$Z6#Kc~| z7|M$;mXCsNVXc}A+Xe6GD02nTyr8Ps*BHmB4_L~ppwxk_dha9X*Xg`W&T+&AMZU!g z$-5{o^sl0t6BpOA@sDA+h_l<7Q@WbL>?m-lT|AZui|`%o~@@>_kL(uO6S2A8gZk}n~qDTA6`n78vjXPdCE zB>}zMBoQmMhyappDw)6WrR#P8l-C4vIq2if*A`-5SSp|+4>xZxi;oKe%gZLp$v#{) zMc!&NLt_Z%2YSm%ZALI2E^uB8h=R!cG2}3{b&lmRFZTeu{#~D8$Zz;D&UL1DHQ$Ap zfTn264wc*ShoFa9Gdo72R&S-j#DGXijEm-DUA+t&V8(%vp`JFSx!|AQ#V1!^nf~&n zL|7iTCdeo7Ub%CN17Ovw@iZWf&Lq^UH(q1xiz?3t-f-X2i@k@munTWS+y5wCJ)6$y zzW9zPvr@exBgnZJV=)PtP8;`gmb+JN7XsrnVL`TlgwWj*Gs45rTUm7xSB%w6Ky&L_ zx$LK53wGySj^^4sM#}yosf$;^{WEu$N`7y*cct#&xnNI9_s;U=N_i`dK-4-dRdf7Fyj zW*6#VV>l{+{hk?}Ee}Vh%LLJ9s(eYVQ8jy%JzWJZhz@&Ih97B-Lb{OC-!SX*C!~Cw zXH9s*qmpo;1iZnBHM66w*<>A6O(WKHbuXPR{Wr(`@MgyVE?e#ANwUY6w09wNbl7nTs#TqpeKfC&p{-C=D^3xQbNX$@deMV=jM#9DE7$-5jxx3%JN?dbt@y7n&FH7*r^~;;8i4D@slTN->%Vz{tycVu(#y zHOA+HSyY?hZYo)}5i0EE-t*F{B*%$&8Slv8vD^v+eW;fZV=A-*fWK?@_Gp$T()Z2pi5TY6Fs~a* zj4%uKa~x7iCJZJc4(vidP%kC0piNGjAjZCvP^w(goR_w{)2Wt&Zz*mGf9(;gH98e2fV^7XKu@djrUK zZY-VTG9TxZ)ke2>nWHlG_+r#kK+((@QF$VL=0w6P&(033BC<;X*5-_6m3t`WUW;LB z#u?-J7C^e_+Kfo*vCpy*3NVtBXI=oQ-T zS>v&rqE1Mi3+Q6)xmggglrIcFJ<|c2VVnWLJT-s+7EE*LSvGi5mz~P{2JQGe!-b9O zf9XZaIhBvSTq+C<3W4e;Zeqkru^tbzL4Rn`j`_u5QlrK{5FpNgb*QP2n_?6Qu|8-h z)HPVhgrScUb$G_EQuR*o4%qphkUacy;PpMvAaaL?Erv9-CjAIDm=bmV+OS@bIXz|6 zD#+a}->@?3Pf)*KGlQoW%?Ps;k|o$PxXJ-0O2sNe9+ukDzWb#8888A~?Tp-^FUOc| z11r7lU~uSqQQbpI1SaD0LGegWdl%~Gd)m^+!aV-%$lqQ%A;9C^P1L?&Y3Im<}X?WbFKy+RO(*>1e;) zV6)dfTwIOxh>$5kL#-VJwkQ(C=kac-5@m+1v)q$AScmKy(4?Dny5d*>x%z4u=5*2g`a^K}#OmKS6GsIlnh-r-$qisB$aCH`ZM4=wNewmy! zT=uz&B6_(~q^&gNdxf!xWTL?m{iUndHCP|~XR=K@Xln7nl`|)h=O+h_{EX%Z3oI1& zg#rG4iw5mKIl~)+P?*-}ZVsvQ=RKt^p?yIWc#g9Btlk!(jx~NcXqld?91E_WIX2uh zcp1?AzCX(A9o)fTGsqjA_@gPpyC}d*+5;%K?Z7<`|o-r zY5yP9TMq+MWRsuN%5+s)r$LV+XT=~1u;@^NQwPU6xnh_$2hk->=KH3G(&{uYe3~ z7pl>LuW+~0tYZ#NKY-fU^)uQGcKHd?E#Ooa9%4@D5uL`et)-@0eX_29b=z1TBzjTC)9h=0IWiD}X4f9I4CeBUz;!9+mF>wmteBgHafQjyQto(qI4OQf;7T+qeuG&oa_ zIYC_D)seglnQM5cvvQPVU~AOK)dX$}HrUV~k)?;P`t`RcoHEjTWPT_h6U@0hW9W@)ZUx|&Pqg= zb5tL(ZM(4JpSPtf!*I|)llNAg)b7SqNCb9m-ykpZ@L^1fxgB##gs(3N$WdQ)7@BJ) ze$IJMGo7RgzB*SjXGL53_uo!hdB|T?JH>rcC%K=Sx;i>Jcd<#d;Kx;20NtmJD1%D7(p`T-~#j_Yzqc)#f zq>rznt@&ZJ^zS(6e;-(En ze{me2@c7Ea+T~2V3S1d)0BRhMK%K0Uv<$2bUNjbB+k9THE`YlM{03zOnQQjiDtz@2 z6$GRjBb!H=7CE5I{hQZ3Ft{347nBIMC3hko+!!NzNF09nmvDa1sa4^Ieb5%!#p9%i5$(1 zKLHKvcyD{Z=oS9p7e9@Z`rviP&_KCCM{LITNb4_|uli(~6CX7l&N2Jc&~q?t_J`Hl z8d*+25O9dI`K+3$6~DO9-td1vx9Xhq9X12r!htO0K-%$+lWbwl;?CN*G|%SjhHvwD`5 zb^keI&ZJ|AqD3RS4%%|Ll4NdE(AsOb-4h{?+Y04k89&sQ|3Abf5Kd-$C-qdX#6{ev zqRBcP*YEY>vAE1_``%jybkmQCU*<(k#EunATy83o%$UuY7WST%-GF7~D8~23(uUDu zYs~cD-CSAZFvj^ug9Ol9;1vtcgzY>q)N_(nBzlxv`Ph61MDVs zQ^UtNkKCeVoJRhsW3;xqJ22$c5c{^sgDhd>oPjs+;{@S1QEKp;k!s_qz^ods9-#Hy z6zg`gGBnYzsq0VlgM_{r#-3Hb`x^?*gfKfq&5Fd*`%{X7+V-8LS9%z|%RFOc{+3(5 zG>(Hw`H80VVv9R;Z7dEo&^9RKZELpsR=rv;$1o<-oNzxh8qUomHShF$PGydlG>7u# zWzOi~=H3#-nzv@2MJ>PNiMemn`xj|@VW5)aPmZjSGdbh=2Ssq7SUg~$X)t7&NH-5W zB}$4gA!6ULE%7{pjF2B8D8vy<^-ymJxc?&XR4p|w)|d0h^|?!n6NzhBuc{wz8txTE z5oE`Xy-Vx1++#Wg{1t(z)^KOgmvJ7dj?Digogm!bzUESS<3)Lf=Wd0bsx; z6V7zbCIrIVQSht?C04eR^F`-e9u}+dYek0qR8ho-<m8HtpS?R9Zy80jK*qRO&12_ub@EFjfVu{=I9r3K&z? zsNc$oV;Ay7GW`$EB-$d_&>jX{vu6Z3f;+;QEsN^CXEJ3sEe#&9Y!j}! zd^xNXG6D6UbwLCtAlwsGEv_IKH(C*wWK}o<{t`eX);1LtKaHZUcm`-G$oDSWxY8i7 zMFN0d%cXh|n!BL_0(pML9D;G*!kpiX8z8;C@8AM>Vz^#bJTSM{|NG@G{wnEY=wfWH}1wxkHie80k5U8EX=+6rpfJFMz<IHYS;arQpJ|I3N*Nuhk zxefw0mn{)!_RdTfZp_JE)%xYm4_C~XjxNQo#A%%mxrli!NKR|CJ*CG^0%JgsvPb|A zOm)PDGhcT4umW&O7cs8gz9bx^enbnP!JPtsfxS0ro1&p0f0I<+hn$QfMoJ1#hMvwm z_71ZbjTrQzQW&Ec@V{zyf{JdDmn-*Hjs1!1;d_c0=-8leT5R`4;j&8-p#loJn1T)U z=j~7|QgG9gTq3=AEQ}Px>6+M4LilW46FlK`_^l6RxG-MH+UXd zHPeU0SfKY_?-76Y>N1M*qJ9WBhdwiJpQ_4OopqY!oY~pi8t?^g%!_KW=No0L^(Cax zfmOo`Zq`tEM4D3Qv3a-b~eQeCE8eq zNW=}obB;v$B;^M$<7t*l-og(4NNjZ@<)|Gfu`vV5UdNAI;Q{Eon~y;CfPE-hs*XT2 zM@pBGjT>VMkoka7rmmoShX5WE1u3+c>uW!o#)@od`CmF#Bot7Cy@lz}G8Jb6t{Ukr60csb^mhD+#F z@#7?!V4-f_24T05fS5&PW^iLxYDopP)*&qM<#U#xl7K$_DrB1Y-_dsL@Y7z_cyb zv&mcM&34(pECLjkkS$(@hxM9>FL$zAz_t~Fx{`9wjnKvgQO8WnslbgNLtzqEfF zE9B`B9vy;$n zApG$z@euGeb*YKmpR3niC=1}mMx)gw!(!x{PGeA81Nlnq?Y2#|Zy>My{wn8pA|*%X zP}d1yvpD9ew3Hk2m*pvYJyJEfcy!IwuR@QN29RT$X0-x4Av-Ilp7ZwmM!A12Y6|3L1&dtfud6|C?N zAw+Dv;T|)t!yx@oR_*gunMc+}W2mQQ{S~pinBMY|g46itPU5&7k*o_7k-G(Zd_32wtV~(nX1=reE5?p_$7`3;g3IEavWDMi0|VTpYl)#MuquNW`J0B zBn2hi&(l2IVP+hnPySfpkVdvxdB6gwz0A$h zp3esF45`I4DP^T;Y@UUBYBgKI@2B(+y?9ajWpEcO8ve--vU zq)Gu}GK?@B&6CW0hPhxnk)^I%fGCb^#ZH1pYKKQ$gzoGQ_oGSFV?axg?;nmAjdM8a zf60lg3;&%Mnn&UNfw-c^Od?nJ*7<;*=)uOzur@4HSpPcjUqt&_9n5W(IV|p3>Zau< zpPn#HbuN!pf9N5A`Vw4n8ga1%vy6Tey-P3(FCV;auveF177ZN7SEuwL%a{u%Y_o1f zi*!-49b-k+ZRv z@e9^J>aXN3++J`CO@W%>DAt!d&^^@J!3rTAI3yB+7WE57a1eocO#+OC4Zpt*WNZADI zR?*}l?66_h$5KWjfz?9S+0E=_Y=F6+3iykn1)eIm8D@|RHJu>Ak@RL_f1-P2-;|y$ zxMhm9YBLpS?o6eAgX|lgDTuLu_R2oGa;e-0oqqGdeyI9yypmq#F#8?yni`t|e!^2y{ zKZq>Tuvbi?qcRz4&qgxfFM;@Q5>=`#<%C&~?n4hrEMY^rhNSY{1q+_MfhMe~Swu8e zUtjAPv*RdTcKAYmx7s0@TQj@9n z6yrR&kyERKSw-Idbw8m+JZ$@HAAAH-4n^vl_|?yKRbQMC$&{7gy%h)_n=L*_PLynfnlsQE4A1UpA2N{0285zv zDZ{@hD?D^lysMpxtP{|VUn5J^w?YgIe!5c%wXxVMH>w_8yr084&KY$mT{u4?OR}%q z%sAx<7vhJsO@!{hj6%V?Pra}5_7x|1?gTL%oBZi8+U|y7`y^h{X3jzHJFD%N{_Q%S zW52lcWtUFK{54{y(cdvOV8K{rqy3xjoT8HAMsbHlV`59zUN#UFsoSZX<#C_h3{H${ zgooY#vItV@zTu8}Ae%_&eLWn$kXcO9V??!Sl2&fU3~=H5ZMqe%!!3se5lO6N*`<|6 zPkH!t2>Ob>{ymB>)tD1%1_HN3;W(kZy$oJDrAPpv_L$IVn@@WEbXjSXylc+);}{E` zZ&oeVa&o?qVTc;PeZfNog)5)y?Rbd2zob4zfVP`d_F3v8p22-<+ibL3O{foy^pGbgWNw^}^w`QznW)y(VgnV?g9zdeD2me= zgX%IB;Em?IGwrL^o1@=gklCX`;ji}5^(SB<8_5W}UY?QOdV)NI+ zT@=T^)*e%gpViUaCNm<&8p4lMp$?v&X3RLp$wWJ%I{KBJu}j}t?#@rpM$z?f>B-Po zhzpLVj`JhyoX}L@>}1luoaW>7N{3P-g{&1ab%=uVIsn=>@PO-Z36?BSFzYMyfN=iz zPJowKK)hI1x8~Xv!yI$l-szyJv2gtO-H5^h1-)!!bKxeY)?UG=Ra(Arv}8hOF$3kn z5i@mv_TIJ?>NPz}deZ#hX;IGlU)zf#(=uFOX5VYy?!NHNNthYYWKgFH5}Te#>t-Wz zY$!Epnw6kEs|WK!(!=1IS9l+X4~OWMw1rbN4wH3cl*6P<;_3GFJN5Y1+qE_^4hc4! zZU@wz2>u9FSLAQVR~lUmjGu_2kfVM+MJAaNK61AN^&GGj?v7gj0X$Bcvn`*eKN@v% z&3^zif^(UB2p=00)sZ-q(ePxM=tt*p9zLZ|U0BCiisDxBM9euOQ84d!2o@B^<=zAj zO#CZyXu~u%_@YTb$J~Z(27Y#1jeFE1yrHptYUP{_u_Y;jPSO8Gi1@PvFUT%1?jTWO z6p2jN;(fs=&3|qIk9>RROPaNim6wdmZ6^7k4Y8H}TarlJ?3B!=gS%o?U6XI_44qm7 z$q<8&@?z$^BuKJ%tYZq$(Ni4;IrZ3@4ou)DguKD5C(sf~;T68d)7Q_(YDFDSg-za6 z8@S&BNeVH>N7&W@5gUWAtr5ViV2Y%olgb;JpI<&yLqYNa{*H=aUw$@T+TLaIuyw`4 z|DC#dVOzDj=&jYNU@~mQ8S+oSieq9%mA}7BZCrC}gB`hHV%3?x67b02>&dg$phZqE zcNg}Eoe0rrLd83KALk7YDf!9<(iXi-Fx=fqwph zZw^l4di1R^K`jyzrK!reU6`Dv`%B!39uA}G5wmP2V@wF~nOeN>JY}yN{3`L7m7e?YUuedmx9KEF zy+Pj)qtEOQYE$DEAILhk1+sRk2CAZU$-J%W$`6)S*iq38aME~3auHEZPmPQbDEqUd zE8|Zeq+5v`04r=*8URwjJn@%yfet@CV|8lr?6prdI29T*;bA_vU7w4`>T1elLJq85 zK03SDuD2z( z+aRNdk(o1D&U{29e6Wi{fR1@xHiWnKBNzSS2~?f`1=4fN8cMIL^@e;xpZUa-pX)75 zvURhVpG8UGr>@FduIyTNMbKw!O*0(ysr+}eH6g$BM+^r6BQWk!HRpII4-L@$>N_<= z^qqSjZY=Ad=k74RB+JAu_Y7pOFq_51v?f^(rCNLu>~e}=rs%>&Bv7WKac63v#N(Qy zDPE)Tb}_n`RX;WnJX#-e@DpKu*#V|7sz}%Cp3~~P>EKbvYfb+Fq1_%WH|e0d@zDCjhu1}2q!2QRoKc8X6DcyD_{Ndw3`v0DF}rz-KxO59^C8z!FBBrB9!H}TAas8_{y;0MqJ%Dfn)69 zXfWpgff|H3_8^0Dv<_A*p0F}b)bAD)VXhOdFvSsuN+5YB8EU8qysP$2>dG`bIe6S_ zN1J|hx}691sKP!0hAc|?7mf`oNb*oD~YRGnN{CbE86nCDL4v0eIvFrnM}HK-QG zz!kEA*Sxfr6a}N}k?F(tz8*U#h=h}Tj4=&D zfa^jcWW|(hQ9@Bt3e@ZcGX|HgRZgOgG0gC|ipk(+2v1(LC&w;tD4V}ze#0k~aE+hY z_qIG(G7W{#WfjW4^#C%#IB1q?dxlKXJM5txqZtig^Zdfg*D2;j#& z!Hf+o6C5*e6u=~y8l{E!xz<1N=hn!4i1X1<7=dd`i~x?}^dfPh-dxsD5b@8HY|GHr zebA1omLtnGU9n7HvTUaDx$O9!^5{^%SUW5m5}#`3L{T||GAh*4nPFm1J-$&x9{j#< zSxbVxxzY<{e@;EG++;x%oFl|5lC@iHLS%9%U@NYn7q;=CAR2-Pa?HOXou$e}#W~Z} z`$?msM>cns@#0GTV8#R*>?p!ZNp{TZ1Ux8kZ5F|d4+(7uFs2I;eH%$2DB%VZC9i2l zY|%=vrvqIpp{#*KDN= zH7Bt9rR#~T6tA-xBi!;~#q5q~J4Zmwn?lFLLPbBMORKZulhh=rS+~NA)X|U$kgelLa$B*I_7x#0Yd-O}gX%M2|~T^~FN>64+4`uULNGUfL;`+!+hY zC*>!yuJL{7X*H8AhQ+Q|o2j%M3DsKeo4v^$JH`k9cTaj2gQO-oc0KsI8B7Lyk2%v| zueB=jNl_$LM3Z)=Z6}8&R#vwKE;rryGtnP2#pnAuyiogZc1(>h?5GY*Bo31BD`jV< z8R!ioiExCJndQ2v{4~PlQVyrni*+RqomBgX$5N_8>i@~p1do}ikN&MMnmIcVE=j!+ z3e+@sEf9w!SoBzPDhw#8M#S;G6MbMvft&hlw6zWSs_lXT(2Y|OWop-P8-5-RBJFj1j@wWf{y(L)YwSsv7fa-S(l=+HxvL$0K5X#h*cG<$eX>S z^vbm@k;jIJ%62|oP!@-Vn!&(Lism<>-jaDZ;e^PW{A8SX*n5M=-9~J5;3L3Z04LzA z&kwTTLj62U_7b}&Vms^Er%4l(WAlfcBxWs_TJ^se0|rxoR(8Z6Jga=qwU#7Qgu*|X zj~$fijQVl)qKlAJO2)gu-z$`ohs;Ip(8UwV-E7io?Z`Y@P)D}41LaT9FkX?WcYr)F}k8L$pC z-FD~T0YBY*BX_)U^Z^63^9W7pB8E;Y;eaq4c!UQYcFsT+PtK&nsFlmaBPY_0}WumZqT*wm_ovqX=B$motoStD9YEwTtW$ zkRg=F;=$?g`sE?5QzJ7kdiI}Y8>cAW^?W?Kq@W9 znvLm5OLMVHfgPPIP9z$Nd<6hJi^q^vsXErC_X+`}89CUU$#AbUEd;x14{)p&Nc^Yp z-OlQ=mfZ>x5=nHN$zNnWnyC@3BjCy>Ph@w=AVBh#h}dA|09@Owa8J?`y$QyUwxV-m zmAm-l>Er-#wM}@AXLI)eh=`*uI8;~xl!zwA4QzQreZ1}I3I0$mQ)V~rIia0JTl+;rX2Q-*K-LL{2bz?f zqKOJDh1?lr2)ZfiU=?iIIsh(P2LY%{%PIm_Rj-9Y<~BJ=+MClvc`!dKy4{vn9ZUjd z_nrEj_zJ$o*@}P;?Catbwh8-&Y8MIji2j$M@$SQ<>W(S)MiX6<-Gw6}6XJ{xrmM$r zftd-&i=?}+$d&yNv16pYwl(T?7)auV?iw0+NZ;g@*aq)r226ACW6yfjmT?ER4*k<$ zkD$8k1zCD>0CZkqX_fF4hXWtVjQ?+G@nK1rLN}0>m}}%N<>mY3kL=C@urKokh`^YR z=&B|U)ijfOxTqaKwb7PVzffhX7(m*-zJvuEgx6=Lx5RoPX&jeI%xns4Za^(J!S(|1#krluzPesS9u5vrju%>{D%-njI69tMQw-e*y+ zri_6urRgvhxR z5AH)J90VO-L``hHpO979A^q!aSz`&3M!sr(XtEvT!=<^BQ4GuB(YG`b>`_q4_kmQh z`-{ca_X9t3gmmN=L^12<{Gv#|9YZdOP_Y7?djFL< zJBPv>6OOiboSv*c#EbFx7oN?V^;|W&7Ruwm2u|!jjl>;%H%w22dbrjr!njV%!=k0X zOf-b|qvCC<6G#H5^vadgXHC&Hw&`_$o~?OqAat6hmcr^<;zw4#RIJ?&;pV_CDJ*V} z^4|WOzVju*$p#woy|nCa@<=R>>OOSMy|vjY(G=K-Q!Ax1e}BD?k~9b|w7;SlkO0gt zNB*&Gabb>aR`?*8a}*@yH?5s!C@ix{yeX z#yUs=EV>y+l(Byhww`tyE2Se|##fC>535GGr^kli?ncv;z2sdA3`RPhKw795zpe5Q z4S-Y#p2jJR9L-63w}L0&n4Fnu1r3FPO2FTqxy;EPyMEcoF)fEfNc~TG`_7~kmkdd zB@3CEtdQ4w(Xd8MCOr9FYziC_aH-MsMAj28+tOhBOVT}|omRV%@j$U1wSsy!*BG3A zv|Az&fhQ!(;-06MoNYehV9$;i%C7OJ@wGNwnxI*%$8N9`vJ(FC1Z(s6}NR#Zd^W*X3T z>?tVpLK+pu$AZeFVDD#Kd2g-W%f*pZAC_IBaEq1k|( zq1+On8tR#mA<$q+6!4BSxUgWRA%yJda_n!~X3tduypp%wkQ9eajZ+$8z>Dtx>^okQ zObPw+R=}v$0Y=*g2VXIdrW-YFb#p<8vrup(Z`z|)r6SQBPc9MxT2nI0bcX< z*X+XIn=O98WB~WI8NR>*S0cPF*g- zHE%0g&S^8|W@Del=wJdSr7pxUZUbWLH7ExMx#wHE9mb4s?k;}8iD_mBNdzK60EE;^ zL9j-)F)XfUs28M2PLwyDImBk}*YdXW2jmp}p7VH__}_*M<^kU{ZGpah4e*88owo-rlSh*kLaHB%e%A!#I zUQrbOk~@JB=ThA5yQF?!x1_9^?uVSHS=*9JwXx0$ua_lbT@P2PAMf0z2JPvacIbj^2Ddrs3}qNl;V>t5!8KA!l;kmRN>FP{B5Sei1+i|Jt16*6 z1N5lncIPROiA)bCekMth6}pef?M0F%LhVTT=ww0=Q9Fafi4Hd}#|`J_?d(zr zK7Kr&OvvoOk7he9g0ROx@G>H74wMs{$oWpN1XBaW9!=Obf|a#4D?X1B`#15zba)LP zDP!wDJr00+%bD5&3esicn4(Gl?}6oD#Qu^OnYKK*yLc7;y@Tznx9i-?XNyOsrZ4B` zmIEsNg^c^C=ob(xCVfi_(xE!}%M#((D4Cwhdm%E}j`SA-64}?08V){_VDscz-W07! ztMUl3G*CP|w&?(i+2*RCrQQK7JJ^_U9$AXPVwzoUNhxxVL@&IBm6jt7-lEVcEjY># znweT(obd-`y$lE3;-LhK&KTECO%CfU=)7i>w2~mqHF|1)1M8o~$dyOjrgr7xWUx|C z1ZvdT#I0n5QoNP)?vsLKiY1eykVx@h0j^F#EL_?-aEsv_I0T#`*3^Hni~#lmq)H@F z7F778n-Q4F6u&J`N~FC392Oj-e`2F(_nbihj+2jQGq(p(426=Oa~xtJWo{4@;t#3@ zfui~>0D_k%xX?M$gn%*0do<1ypBz#gLt8Wu=i?U>*H>sp?@BnJuE3s!kOh=GH4)WS zW16{EcddlfY&CSMvoJf7+zqYj$$dCM{B0#cmr!p_BuCnKPw+kAV|?dTdcqet>VTm6 z`MVPJZk<7WGi0~HKh!swS;bKMJ5(2l^|Nuh8R3n7Bmv=B;clUS)UsSwYNL7?ijnQl zlFV|&cwzcn#PAjxs!=qKmcxNNs{1Dc?K?ckNM6Txa!0(4YLw526@hhM@Qx`y=a7-W zbK_QQcNIIxv_KCd1UwZiSDt$8>C&dkX_7i4^}x>sSodP--Vg6!ifQ|+-O~V(X#E;x zySQaXAa*kh$m}fBT$$dock8j@;yfsT>+SFU4rLV60}+gK517< z$>Fbr3B-f+BcCKj9H~gA*bHChhTO3mcRF9nS6og*T?2H>39QS`J0fU$T(5bzszDAX z3G!~M4H)z=hy@tPKQ_zK^B(5*%AGS6V$EPBH_y{tw99X2(^j9q3wWsk#39wIem;9? z%0*L+WPTC`g(Hvc{r83I-RkR4ksIChXm_vKXdP~%$JP>^gS4$5C{usroGqx;^tB3< zj?K!2*SaPcl{!15MjuC?J9UMbj2{nG>kDWcY>a3=9^8Upk%;}JDcFQ)J^H*mq?Mj% z0WQkcxnaHa9q<1ld!F(r6~0)At60+WH-KrBcOYBZkxFDi*2Ts)Oem%KhJj9~Ikit# ze(I92xJMGQ}a}nG+eZYA;R=)vL=+#CA}^^kgE_p_S|m znxWqf<52Lk^MM&EB61`riIK%|f0Rnx>u#aps9vXmem6$bAwJKJSQ4pixl=58UyadT z?)b0{-~yhr)(`Z!&e>f(b_j<@LR4)FjKj9rU?lBZXU0kQz3Jr>;>&CK+Q6)Hbd4Hn zwQc=Xas${0L?EjLpBNI7WFFcz=;T9H6kVmx0Ghf71(%j}*oL@z92Senjphq5_*+#m zxcfI_mteQBedIXw_$FTGMi15vsrgPJ^qWb4@Zg&-cXKz;XBpiP=HE_sP#Lj6v44nA zQHzgDtXC;EfY>Bl|!A3%SavTcTV$+oxWbg%JDtU&*1yCp}lUW-a!YIx`n} zthNYD$VyTa72`4T`DcTQas364N=hKlp^n~xE-9Vx|zVap~D@N<(EQQse` zJ+C;}21%LRvaB|*sF1Wf9r2+!n-39J!CCc*N0A`eAI6x&`0AdPHc+cFU%-iOt@%>= z472Q?a7z+h5Vqe#6LEIejsiE$R)t+8#lz|&-hW*Apn{&pFBW-dcH-c*FfDfAE;z&+ zsGdBtny+*F?8nAm1FPvaHUd96Mryx^ql)55z-c2c9{x>1Q+Vgy#DhJZcj`y?0YL+S z!5VaMJFjF${%=>0kFNgC*mS+}H6LL&*kD|2NNiwbf3Dm3N0le{S~NpC^_rv*zlo-8~OwM;SqA!E;nk_ow0$wBl%z z5msoiuaK1YFDE9T)cXpD>y5%#0mYfY`{Qeon8{UX3ksNxJ5pGxN92E#PcCKZ)cySO-JtN|7IzSSdK>TiOzyMC8 z@MqXs!kM3x%iSo3YwaK0Ji1{GFMDBA!mh`qm(b#GUbng+T^RRdseF*Th*jtevg>(+ z)xo%U?3I>8wZTv7J?QK_)ZaW_Po&W^4o=l67U0S&Nm-L+L*k+e6q1wA-R4dk*F_R! zbd-)_+-}@zK&S~!KQz|rVT%R^cDiI_eLodXS*3^0Xiga||l3~ zkQh+-7^=oXs!0Z?%j@}}Q=I^Bf14HnR-mPk-$pc(aZBaKec8vEp7 zqC4-`i3%@2!!RY^dX#YgUxTl5>Q|QC`g;{rh6_ZL!Oc5UYRrK$Cea}tw168eaTg*n znH5FP|8UIsU|hQPOWc6=6$n$cfVzE~l7p3xt9|LNuHO6WaKP(BAcicwhniO>W`imT zQmX9mwyiOwnvE$=mVl(4rqDT#0OqE_HdjxX`)X;+o|alM`&u>gwe+H$=#ho;;?7d| zd`{e!kQYc$uA4x>5keFQdsRz!Yguv&fGmPUgB00~-0WxL`#u@VmjcyvB~u1D&T9W< zbLemp-;yEL-Y+Lhe}v!8*A*57ph|&1&uQX3)chpFlWmps;%4Ns;@4D1q<5uQ(@Vw= zA}smDvNgp_#sf1V&P|o7Eq5)Gd8iHirw^@wO`!aBS@s+D@`*#L5Hff2Ut;a^ z1Hr6OU4qE0MtT z?S6UOl`^T_lI|dO#~S4=4+(x{gUlX~)zUb~;JygH@eYtxk9Q#&7JcFxonW%J`&%Zb zeI=+Al>3<(S6QAHx89mcZw<-?!i3`Ff*TX78CHA$?(0RD2v+l(mx z;k`LPXG|PZ0JL3MD+$o*Pr6miWv4O=0&I?QLdh3xk?5CcAORrnNi2uSh|h=CNSglt5D{vAdlyU3T;x0IrKYb&C(;o z#*GyIe`2tV|8Xj?q<%dD2^dKoQt?(pU!~wgc>!|bwwr>6co><@oyX^$z- zZ0_isuYao=Xdo3-F*jT8R*TD{p8{p|UvqG&eeCz3;If!Vt5Y=g|AWv|>h564xa0vxMO)MZ%W) zUr~2aLTO6YiBj9E5>LIN%U;k0kD?*3tTKuGyRsCF{*Vewx}bO4y~X=bwLtte6l=0j z)4t8`!)v6Mc1m5a;MGQHu;C}Vi>WAQd}-EoH<-uDVZ?~wq98o){4mYCqvXm!Lx@7< z?6!fm_}ut#dSFT0_DEv+4=ni`K0=z z487}H+Y~a3n2XNlr3-ef^m@HeJB@uY?AsR)MAKI0^y69Y{$_ROB%bZq=C3U0TaZ%v z;&g1i-RI6AyIP)Tc8VaG1S=BkZPVTsv)eV>-onQJQ7W0Mdrua~iVX=X+L(!79mCrX z*_&wHRNMgeC%NzWNm|s5%+4S?X@Qm+ADQ1|rNSbuBrTMKhziHpj$d75Fq6*3hyu%;j`ItrsFQO8+}# zggS-%4X;#?>$-!mIqN?1pw5ky=1^^ zeo`2&-CfU(%cojg@=Ka#75DwStcHX$Ba~BAL{|Mfoh|z^y7$q)UaHxob~v&T3{Lu0 z1YQm&h#b=e1cSZ3m%`TWXz?!Xkuuo@Cs~o0P~GF2Adsg=h{mw<_E2q0&6Is<+7$Ec zNXF!z)H4Hk6T5G6*t<_6#vrw|J+y;Jx|uVyo_!rgfeDw2#Ze%+{EfH@u$9THu1Dn@2p*L6j3i`O>Do%>wu`&s{B*A9 ziAXuPlQ$&Nq-228Eh?f|l{Z_|#hKH}xXXg(iUAf;JOUc5npzYa>tKeo?Q;#yA9!r| zdix3BgbkuSQ{!p_F@p~#@9`Bf4z^EJS9KkgpB=9?4OkJLe{tv45#~AW#0?;G^39Et zo|9lM+N1jZ1BDQH1M$uYo7R;RC1>(T8XS;t8)OEO0@(r~9jkd6>MkveK0Eop)a{%X z86%dqq4z+_vl3S<2mXv{NkRQzSesN9L+?3(=CH&K^8gDkluCsX*5ma=r`JZTL_WKA zlo`f!rci3^8WkjK$@7o~x(5!laVf!Lj*i2LJluj z%{5402PWqUOa)vgYzLcz@10*CzdcR_>OSSU5JT~Gf*Z(C=*2pO#4i${j!5bGV?xl- zpbPX!e|Q}^`oYHxO{UgIjPy#h*~@ zlu>>?W2#=?Hb8L9rZk|F!CG(5iecR@wYx>PiK^{LC;KbeTLk{xSh=L2D{IX19Ko`8 zg;jw7Mts^VM_*?MIhOSSRtKs0xNxATEwYAC?#OQ66$VrK-^K0uU+TCSTFH@o#*3-I z67oC<-aJr1Jv1F-#+%(NePUTH9@X}Y2#58{$%PgebYD(HJ%;>kbhqbR=U zq1^dCCd_wg5I_QYL)A4&m~kJm_Q;tv+4d_<>zdO%$y%oAm2o@(shW|HwM?)fVp5mA zuUx_N`SOMmU&baCsLAA})M9$%A}tQ6pHDW2N`r@_H)`N|m35regG0v{4ACneX0`~& zGJ513daj0CiU`C42_6M45hMl z%rxYL;Ca#;xH=3A4ohv{!+fL)=F{}QG$&fceFO`c2HqwFh7e2n$_Ir;9c7t#@qNA&W|MjHBR8W1vkn#yld$ZcW}7L;HJe zT`i6E^@gwmR}O;Pz#$$GB;6y!&{| zZS1fBD2#n3CXJGU3uS3!JxwJHFFPT8Gp=rf3})Sg_`C{r0q?l3zX;prA@EB?1yGZt zwSr_Cgr8T|7C^Z`IO7VyML}dcpde~8gmK=L8#1T2SuYuyxvw~z6)kfHMT1A$a64^G zm84goNQRMik#8Sosm#1_>8T>1Hz#LoyT(S`@MysQGw1P#`+!sR{r`&W>?G=3y6r@G zb-t10xG|D95!5*#0NI@A@O9>AO?rW(&D{n`uK3i&wM8i)N((^bLINv zeg|TMadW{v0*_nl1e3k}(P}I>SEF2r;*N!pMJm7A+S5nw6&d1`s^(bn%*ZyyVIipu zwA(eMyJZ}|6ZJTL`BCBRMCEJbiL5F_#rvjB!HWuEl55#;xqR(Z` z8$uPII2K7Kk7?I^%XgODh@Ul$+xTB^1^t=Zzh z{pjN<=cjO~yBRDfW5I5M;aeql5f}f0JsBwj8li;&s)$hnJqww-pJoA9b1@0(D=w-R z<{zFdkeEuMJwAFQmBX9Kx=qUCt?_P6?ty;JtM*g4nJt{8J_m-xt-P!eJ(Ue50?FQk z@l8hT$tM9ffY2!JGm|B*Mpp#R)|6 zxB;qUjn;0)5?{!Y86P|w6tn?$E;5JZgW0x}itUF}>MvT1Wu%$>F6Sdh(ic+M($I)@|sQj)U2+ z0IAY$ub~Q&r7!@38mr9e!v;y`(r=oYgtY*!i(xCICSmx;KvGrf(E8$%Oe8NDi#vgI zeP3G=qk6{Nqv~_J^h(no-TE#ghI}M0HM2yEk_>Y!7ZekXO1UwvLH-_|bPf-#eN=p~ zVmcY6w&A1MFb}H>(3^MYYQ|#PaDqzR&$aRNr`{nd0LO)7YhEp7zHuLBCyKU`VS6>J d<<2Ef_wRF=eE=>BUw=CGNk(guQQNN(W6i}DN5lXC diff --git a/provision/secrets/secrets.nix b/provision/secrets/secrets.nix index bfd27cf6..02f7999e 100644 --- a/provision/secrets/secrets.nix +++ b/provision/secrets/secrets.nix @@ -8,8 +8,6 @@ in { "git/github_personal.age".publicKeys = systems; "git/gitea-runner-1.age".publicKeys = systems; - "emu/switch/prod.keys.age".publicKeys = systems; - "emu/switch/title.keys.age".publicKeys = systems; "wireguard/kestrel.age".publicKeys = systems; "wireguard/torus.age".publicKeys = systems; "wireguard/bulwark.age".publicKeys = systems; From 6dd15d6c7c95f5331050dc38ac623cae58b38b05 Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Sat, 26 Oct 2024 18:54:53 -0700 Subject: [PATCH 02/29] clean up gaming folder --- provision/modules/gaming/steam.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/provision/modules/gaming/steam.nix b/provision/modules/gaming/steam.nix index ab1ea49a..43a0bc67 100644 --- a/provision/modules/gaming/steam.nix +++ b/provision/modules/gaming/steam.nix @@ -5,9 +5,9 @@ in { options.modules.gaming.steam.enable = lib.mkEnableOption "steam"; config = lib.mkIf cfg.enable { environment.systemPackages = with pkgs; [ - steamtinkerlaunch # Launcher and optimization tool for Steam games. gamescope # Utility for running games using Valve's Steam Play compatibility layer with improved performance and compatibility. mangohud # Vulkan and OpenGL overlay for monitoring FPS, temperatures, CPU/GPU load and more. + steamtinkerlaunch # Launcher and optimization tool for Steam games. ]; hardware.graphics.enable = true; # this fixes the "glXChooseVisual failed" bug, context: https://github.com/NixOS/nixpkgs/issues/47932 From 663b5cad5612ba5cd5b8e793dbd9a998d0a07a09 Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Sat, 26 Oct 2024 19:05:14 -0700 Subject: [PATCH 03/29] clean up services module folder --- provision/hosts/kestrel/configuration.nix | 4 +-- provision/hosts/osprey/configuration.nix | 4 +-- provision/hosts/shivan/configuration.nix | 4 +-- provision/modules/desktop/default.nix | 1 + provision/modules/desktop/peripherals.nix | 14 ++++++++++ provision/modules/programs/default.nix | 1 + .../{services => programs}/virt-manager.nix | 8 +++--- provision/modules/services/default.nix | 4 ++- provision/modules/services/peripherals.nix | 26 ------------------- provision/modules/services/samba-client.nix | 9 +++---- 10 files changed, 32 insertions(+), 43 deletions(-) create mode 100644 provision/modules/desktop/peripherals.nix rename provision/modules/{services => programs}/virt-manager.nix (73%) delete mode 100644 provision/modules/services/peripherals.nix diff --git a/provision/hosts/kestrel/configuration.nix b/provision/hosts/kestrel/configuration.nix index 24db4373..560e5cd4 100644 --- a/provision/hosts/kestrel/configuration.nix +++ b/provision/hosts/kestrel/configuration.nix @@ -36,6 +36,7 @@ desktop = { enable = true; gnome.enable = true; + peripherals.enable = true; }; devel = { engineering.enable = true; @@ -50,6 +51,7 @@ beancount.enable = true; chezmoi.apply = true; kitty.enable = true; + virt-manager.enable = true; syncthing = { enable = true; keyPath = ../../secrets/syncthing/kestrel/key.pem.age; @@ -60,9 +62,7 @@ }; }; services = { - peripherals.enable = true; samba-client.enable = true; - virt-manager.enable = true; }; system = { backup.enable = true; diff --git a/provision/hosts/osprey/configuration.nix b/provision/hosts/osprey/configuration.nix index ca05f9eb..f2de722d 100644 --- a/provision/hosts/osprey/configuration.nix +++ b/provision/hosts/osprey/configuration.nix @@ -33,15 +33,15 @@ desktop = { enable = true; gnome.enable = true; + peripherals.enable = true; }; programs = { chezmoi.apply = true; kitty.enable = true; + virt-manager.enable = true; }; services = { - peripherals.enable = true; samba-client.enable = true; - virt-manager.enable = true; }; system = { ssh.enable = true; diff --git a/provision/hosts/shivan/configuration.nix b/provision/hosts/shivan/configuration.nix index e982e3f2..f7a317e6 100644 --- a/provision/hosts/shivan/configuration.nix +++ b/provision/hosts/shivan/configuration.nix @@ -23,6 +23,7 @@ desktop = { enable = true; gnome.enable = true; + peripherals.enable = true; }; devel = { engineering.enable = true; @@ -31,11 +32,10 @@ programs = { kitty.enable = true; chezmoi.apply = true; + virt-manager.enable = false; }; services = { - peripherals.enable = true; samba-client.enable = true; - virt-manager.enable = false; }; system = { ssh.enable = true; diff --git a/provision/modules/desktop/default.nix b/provision/modules/desktop/default.nix index c08eb9cf..bf8ebb12 100644 --- a/provision/modules/desktop/default.nix +++ b/provision/modules/desktop/default.nix @@ -6,6 +6,7 @@ in { ./kde-connect.nix ./keyd.nix ./gnome.nix + ./peripherals.nix ]; options.modules.desktop.enable = lib.mkEnableOption "desktop"; diff --git a/provision/modules/desktop/peripherals.nix b/provision/modules/desktop/peripherals.nix new file mode 100644 index 00000000..b13f0ae1 --- /dev/null +++ b/provision/modules/desktop/peripherals.nix @@ -0,0 +1,14 @@ +{ config, lib, pkgs, user, ... }: + +let cfg = config.modules.desktop.peripherals; +in { + options.modules.desktop.peripherals.enable = lib.mkEnableOption "peripherals"; + config = lib.mkIf cfg.enable { + services.usbmuxd.enable = true; # for iOS mounting as storage + environment.systemPackages = with pkgs; [ + libimobiledevice # Library to support iPhone, iPod Touch and iPad devices on Linux + ifuse # fuse filesystem implementation to access the contents of iOS devices + pySVS # control SVS subwoofers from the command-line + ]; + }; +} diff --git a/provision/modules/programs/default.nix b/provision/modules/programs/default.nix index b44a6d09..a9bebcef 100644 --- a/provision/modules/programs/default.nix +++ b/provision/modules/programs/default.nix @@ -9,6 +9,7 @@ ./kitty.nix ./nvim.nix ./syncthing.nix + ./virt-manager.nix ./yt-dlp.nix ]; } diff --git a/provision/modules/services/virt-manager.nix b/provision/modules/programs/virt-manager.nix similarity index 73% rename from provision/modules/services/virt-manager.nix rename to provision/modules/programs/virt-manager.nix index b1c53d4f..845ac710 100644 --- a/provision/modules/services/virt-manager.nix +++ b/provision/modules/programs/virt-manager.nix @@ -1,13 +1,13 @@ { config, lib, pkgs, ... }: -let cfg = config.modules.services.virt-manager; +let cfg = config.modules.programs.virt-manager; in { - options.modules.services.virt-manager.enable = lib.mkEnableOption "virt-manager"; + options.modules.programs.virt-manager.enable = lib.mkEnableOption "virt-manager"; config = lib.mkIf cfg.enable { - virtualisation.libvirtd.enable = true; - programs.dconf.enable = true; environment.systemPackages = with pkgs; [ virt-manager # Desktop application for managing virtual machines through libvirt. ]; + virtualisation.libvirtd.enable = true; + programs.dconf.enable = true; }; } diff --git a/provision/modules/services/default.nix b/provision/modules/services/default.nix index 95f8f298..6dcc5867 100644 --- a/provision/modules/services/default.nix +++ b/provision/modules/services/default.nix @@ -1,4 +1,6 @@ { ... }: { - imports = [ ./peripherals.nix ./samba-client.nix ./virt-manager.nix ]; + imports = [ + ./samba-client.nix + ]; } diff --git a/provision/modules/services/peripherals.nix b/provision/modules/services/peripherals.nix deleted file mode 100644 index 96a3abc7..00000000 --- a/provision/modules/services/peripherals.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ config, lib, pkgs, user, ... }: - -let cfg = config.modules.services.peripherals; -in { - options.modules.services.peripherals.enable = lib.mkEnableOption "peripherals"; - config = lib.mkIf cfg.enable { - - services.usbmuxd.enable = true; # for iOS mounting as storage - environment.systemPackages = with pkgs; [ - pulseaudio # Sound server for Linux and other Unix-like operating systems. - pavucontrol # Simple GTK based mixer for the PulseAudio sound server - libimobiledevice # Library to support iPhone, iPod Touch and iPad devices on Linux - ifuse # fuse filesystem implementation to access the contents of iOS devices - usbtop - pySVS # control SVS subwoofers from the command-line - ]; - - security.rtkit.enable = true; - services.pipewire = { - enable = true; - alsa.enable = true; - alsa.support32Bit = true; - pulse.enable = true; - }; - }; -} diff --git a/provision/modules/services/samba-client.nix b/provision/modules/services/samba-client.nix index e4249c61..a75f4b57 100644 --- a/provision/modules/services/samba-client.nix +++ b/provision/modules/services/samba-client.nix @@ -4,14 +4,11 @@ let cfg = config.modules.services.samba-client; in { options.modules.services.samba-client.enable = lib.mkEnableOption "samba-client"; config = lib.mkIf cfg.enable { - - # the needed ports in the firewall. - networking.firewall.allowedTCPPorts = [ 445 139 ]; - networking.firewall.allowedUDPPorts = [ 137 138 ]; - - # To make SMB mounting easier on the command line environment.systemPackages = with pkgs; [ cifs-utils # Utilities for mounting and managing CIFS (Common Internet File System) shares. ]; + + networking.firewall.allowedTCPPorts = [ 445 139 ]; + networking.firewall.allowedUDPPorts = [ 137 138 ]; }; } From 6fa1f92b1bb90f807c6616627f7b74140cdcc4e5 Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Sat, 26 Oct 2024 19:26:44 -0700 Subject: [PATCH 04/29] remove system folder and relocate modules --- provision/hosts/bulwark/configuration.nix | 3 --- provision/hosts/kestrel/configuration.nix | 5 +---- provision/modules/default.nix | 8 +++++++- .../{system => programs/base}/terminal.nix | 11 ++++++++--- .../{system/backup.nix => programs/borg.nix} | 6 +++--- provision/modules/programs/default.nix | 2 ++ provision/modules/services/default.nix | 1 + provision/modules/services/ssh.nix | 15 +++++++++++++++ provision/modules/system/default.nix | 4 ---- provision/modules/system/ssh.nix | 16 ---------------- 10 files changed, 37 insertions(+), 34 deletions(-) rename provision/modules/{system => programs/base}/terminal.nix (89%) rename provision/modules/{system/backup.nix => programs/borg.nix} (86%) create mode 100644 provision/modules/services/ssh.nix delete mode 100644 provision/modules/system/default.nix delete mode 100644 provision/modules/system/ssh.nix diff --git a/provision/hosts/bulwark/configuration.nix b/provision/hosts/bulwark/configuration.nix index 2cab8aae..851091a9 100644 --- a/provision/hosts/bulwark/configuration.nix +++ b/provision/hosts/bulwark/configuration.nix @@ -42,10 +42,7 @@ }; services = { samba-client.enable = true; - }; - system = { ssh.enable = true; - terminal.enable = true; }; }; } diff --git a/provision/hosts/kestrel/configuration.nix b/provision/hosts/kestrel/configuration.nix index 560e5cd4..1aba0f1f 100644 --- a/provision/hosts/kestrel/configuration.nix +++ b/provision/hosts/kestrel/configuration.nix @@ -49,6 +49,7 @@ }; programs = { beancount.enable = true; + borg.enable = true; chezmoi.apply = true; kitty.enable = true; virt-manager.enable = true; @@ -63,11 +64,7 @@ }; services = { samba-client.enable = true; - }; - system = { - backup.enable = true; ssh.enable = true; - terminal.enable = true; }; }; } diff --git a/provision/modules/default.nix b/provision/modules/default.nix index 8fa5036a..0490f1a8 100644 --- a/provision/modules/default.nix +++ b/provision/modules/default.nix @@ -1,4 +1,10 @@ { ... }: { - imports = [ ./desktop ./devel ./gaming ./programs ./system ./services ]; + imports = [ + ./desktop + ./devel + ./gaming + ./programs + ./services + ]; } diff --git a/provision/modules/system/terminal.nix b/provision/modules/programs/base/terminal.nix similarity index 89% rename from provision/modules/system/terminal.nix rename to provision/modules/programs/base/terminal.nix index d9dadade..5213ac15 100644 --- a/provision/modules/system/terminal.nix +++ b/provision/modules/programs/base/terminal.nix @@ -1,10 +1,15 @@ { config, lib, pkgs, user, ... }: -let cfg = config.modules.system.terminal; +let cfg = config.modules.programs.base.terminal; in { - options.modules.system.terminal.enable = lib.mkEnableOption "terminal"; - config = lib.mkIf cfg.enable { + options.modules.programs.base.terminal = with lib; { + enable = lib.mkOption { + type = with types; bool; + default = true; + }; + }; + config = lib.mkIf cfg.enable { environment.systemPackages = with pkgs; [ killall # Command-line utility to terminate processes by name. pciutils # Utilities for inspecting and manipulating devices connected to the PCI bus. diff --git a/provision/modules/system/backup.nix b/provision/modules/programs/borg.nix similarity index 86% rename from provision/modules/system/backup.nix rename to provision/modules/programs/borg.nix index 0a813ca6..3b01cd5d 100644 --- a/provision/modules/system/backup.nix +++ b/provision/modules/programs/borg.nix @@ -1,10 +1,9 @@ { config, pkgs, user, lib, ... }: -let cfg = config.modules.system.backup; +let cfg = config.modules.programs.borg; in { - options.modules.system.backup.enable = lib.mkEnableOption "backup"; + options.modules.programs.borg.enable = lib.mkEnableOption "borg"; config = lib.mkIf cfg.enable { - services.borgmatic.enable = true; environment.systemPackages = with pkgs; [ borgbackup # Deduplicating backup program tree @@ -22,5 +21,6 @@ in { rm /tmp/docker_images '') ]; + services.borgmatic.enable = true; }; } diff --git a/provision/modules/programs/default.nix b/provision/modules/programs/default.nix index a9bebcef..e075c027 100644 --- a/provision/modules/programs/default.nix +++ b/provision/modules/programs/default.nix @@ -1,7 +1,9 @@ { ... }: { imports = [ + ./base/terminal.nix ./beancount.nix + ./borg.nix ./chrome ./firefox ./git.nix diff --git a/provision/modules/services/default.nix b/provision/modules/services/default.nix index 6dcc5867..35c9a3d4 100644 --- a/provision/modules/services/default.nix +++ b/provision/modules/services/default.nix @@ -2,5 +2,6 @@ { imports = [ ./samba-client.nix + ./ssh.nix ]; } diff --git a/provision/modules/services/ssh.nix b/provision/modules/services/ssh.nix new file mode 100644 index 00000000..79dd1a69 --- /dev/null +++ b/provision/modules/services/ssh.nix @@ -0,0 +1,15 @@ +{ config, lib, pkgs, user, ... }: + +let cfg = config.modules.services.ssh; +in { + options.modules.services.ssh.enable = lib.mkEnableOption "ssh"; + config = lib.mkIf cfg.enable { + services.openssh.enable = true; + services.pcscd.enable = true; + programs.gnupg.agent = { + enable = true; + pinentryPackage = pkgs.pinentry-curses; + enableSSHSupport = true; + }; + }; +} diff --git a/provision/modules/system/default.nix b/provision/modules/system/default.nix deleted file mode 100644 index b2e001a1..00000000 --- a/provision/modules/system/default.nix +++ /dev/null @@ -1,4 +0,0 @@ -{ ... }: -{ - imports = [ ./backup.nix ./ssh.nix ./terminal.nix ]; -} diff --git a/provision/modules/system/ssh.nix b/provision/modules/system/ssh.nix deleted file mode 100644 index a0fbce5f..00000000 --- a/provision/modules/system/ssh.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ config, lib, pkgs, user, ... }: - -let cfg = config.modules.system.ssh; -in { - options.modules.system.ssh.enable = lib.mkEnableOption "ssh"; - config = lib.mkIf cfg.enable { - # Enable the OpenSSH daemon. - services.openssh.enable = true; - services.pcscd.enable = true; - programs.gnupg.agent = { - enable = true; - pinentryPackage = pkgs.pinentry-curses; - enableSSHSupport = true; - }; - }; -} From 593268d6ba7f5ce1d92524f316414b2320ef0c6a Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Sat, 26 Oct 2024 19:30:30 -0700 Subject: [PATCH 05/29] remove base folder --- .../modules/programs/{base/terminal.nix => base-terminal.nix} | 4 ++-- provision/modules/programs/default.nix | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename provision/modules/programs/{base/terminal.nix => base-terminal.nix} (94%) diff --git a/provision/modules/programs/base/terminal.nix b/provision/modules/programs/base-terminal.nix similarity index 94% rename from provision/modules/programs/base/terminal.nix rename to provision/modules/programs/base-terminal.nix index 5213ac15..c741b579 100644 --- a/provision/modules/programs/base/terminal.nix +++ b/provision/modules/programs/base-terminal.nix @@ -1,8 +1,8 @@ { config, lib, pkgs, user, ... }: -let cfg = config.modules.programs.base.terminal; +let cfg = config.modules.programs.base-terminal; in { - options.modules.programs.base.terminal = with lib; { + options.modules.programs.base-terminal = with lib; { enable = lib.mkOption { type = with types; bool; default = true; diff --git a/provision/modules/programs/default.nix b/provision/modules/programs/default.nix index e075c027..ac750cbf 100644 --- a/provision/modules/programs/default.nix +++ b/provision/modules/programs/default.nix @@ -1,7 +1,7 @@ { ... }: { imports = [ - ./base/terminal.nix + ./base-terminal.nix ./beancount.nix ./borg.nix ./chrome From 5e10a2c3c9033f6b743dfd2764cbf2492f2d47a3 Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Sat, 26 Oct 2024 19:35:43 -0700 Subject: [PATCH 06/29] move syncthing to services --- provision/hosts/bulwark/configuration.nix | 8 ++++---- provision/hosts/kestrel/configuration.nix | 8 ++++---- provision/modules/programs/default.nix | 1 - provision/modules/services/default.nix | 1 + provision/modules/{programs => services}/syncthing.nix | 4 ++-- 5 files changed, 11 insertions(+), 11 deletions(-) rename provision/modules/{programs => services}/syncthing.nix (93%) diff --git a/provision/hosts/bulwark/configuration.nix b/provision/hosts/bulwark/configuration.nix index 851091a9..fc86d154 100644 --- a/provision/hosts/bulwark/configuration.nix +++ b/provision/hosts/bulwark/configuration.nix @@ -31,6 +31,10 @@ programs = { chezmoi.apply = true; kitty.enable = true; + }; + services = { + samba-client.enable = true; + ssh.enable = true; syncthing = { enable = true; keyPath = ../../secrets/syncthing/bulwark/key.pem.age; @@ -40,9 +44,5 @@ }; }; }; - services = { - samba-client.enable = true; - ssh.enable = true; - }; }; } diff --git a/provision/hosts/kestrel/configuration.nix b/provision/hosts/kestrel/configuration.nix index 1aba0f1f..9c78745f 100644 --- a/provision/hosts/kestrel/configuration.nix +++ b/provision/hosts/kestrel/configuration.nix @@ -53,6 +53,10 @@ chezmoi.apply = true; kitty.enable = true; virt-manager.enable = true; + }; + services = { + samba-client.enable = true; + ssh.enable = true; syncthing = { enable = true; keyPath = ../../secrets/syncthing/kestrel/key.pem.age; @@ -62,9 +66,5 @@ }; }; }; - services = { - samba-client.enable = true; - ssh.enable = true; - }; }; } diff --git a/provision/modules/programs/default.nix b/provision/modules/programs/default.nix index ac750cbf..3604682d 100644 --- a/provision/modules/programs/default.nix +++ b/provision/modules/programs/default.nix @@ -10,7 +10,6 @@ ./chezmoi.nix ./kitty.nix ./nvim.nix - ./syncthing.nix ./virt-manager.nix ./yt-dlp.nix ]; diff --git a/provision/modules/services/default.nix b/provision/modules/services/default.nix index 35c9a3d4..76ebed28 100644 --- a/provision/modules/services/default.nix +++ b/provision/modules/services/default.nix @@ -3,5 +3,6 @@ imports = [ ./samba-client.nix ./ssh.nix + ./syncthing.nix ]; } diff --git a/provision/modules/programs/syncthing.nix b/provision/modules/services/syncthing.nix similarity index 93% rename from provision/modules/programs/syncthing.nix rename to provision/modules/services/syncthing.nix index 068c3ed4..f13a7a8b 100644 --- a/provision/modules/programs/syncthing.nix +++ b/provision/modules/services/syncthing.nix @@ -1,8 +1,8 @@ { config, lib, pkgs, user, ... }: -let cfg = config.modules.programs.syncthing; +let cfg = config.modules.services.syncthing; in { - options.modules.programs.syncthing = with lib; { + options.modules.services.syncthing = with lib; { enable = lib.mkOption { type = types.bool; default = false; From b2a6bcd8edee3059518b17dee5bae8a66dc9ba8d Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Sat, 26 Oct 2024 19:41:01 -0700 Subject: [PATCH 07/29] move CAC tools to peripherals --- provision/modules/desktop/peripherals.nix | 5 ++++- provision/modules/programs/firefox/default.nix | 7 ------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/provision/modules/desktop/peripherals.nix b/provision/modules/desktop/peripherals.nix index b13f0ae1..72c83d3a 100644 --- a/provision/modules/desktop/peripherals.nix +++ b/provision/modules/desktop/peripherals.nix @@ -4,11 +4,14 @@ let cfg = config.modules.desktop.peripherals; in { options.modules.desktop.peripherals.enable = lib.mkEnableOption "peripherals"; config = lib.mkIf cfg.enable { - services.usbmuxd.enable = true; # for iOS mounting as storage environment.systemPackages = with pkgs; [ libimobiledevice # Library to support iPhone, iPod Touch and iPad devices on Linux ifuse # fuse filesystem implementation to access the contents of iOS devices pySVS # control SVS subwoofers from the command-line + opensc # Open source smart card tools and middleware + pcsc-tools # Tools are used to test a PC/SC drivers + pkcs11helper # Library that simplifies the interaction with PKCS#11 ]; + services.usbmuxd.enable = true; # for iOS mounting as storage }; } diff --git a/provision/modules/programs/firefox/default.nix b/provision/modules/programs/firefox/default.nix index f175dff0..c0540ca2 100644 --- a/provision/modules/programs/firefox/default.nix +++ b/provision/modules/programs/firefox/default.nix @@ -11,13 +11,6 @@ in { }; config = lib.mkIf (cfg1.enable && cfg2.enable) { - # Applications for CAC usage - environment.systemPackages = with pkgs; [ - opensc - pcsc-tools - pkcs11helper - ]; - home-manager.users.${user} = { programs.firefox = { enable = true; From 1a94ee951a6ee1901274b7b50f5cba9190e7b7d3 Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Sat, 26 Oct 2024 19:42:33 -0700 Subject: [PATCH 08/29] remove some comments --- provision/modules/programs/chrome/bookmarks.nix | 2 -- provision/modules/programs/firefox/bookmarks.nix | 2 -- 2 files changed, 4 deletions(-) diff --git a/provision/modules/programs/chrome/bookmarks.nix b/provision/modules/programs/chrome/bookmarks.nix index fd597957..bce6dd17 100644 --- a/provision/modules/programs/chrome/bookmarks.nix +++ b/provision/modules/programs/chrome/bookmarks.nix @@ -1,5 +1,3 @@ -# Chrome bookmarks - [ { "toplevel_name" = "Bookmarks"; } { "name" = "Daily"; "children" = [ diff --git a/provision/modules/programs/firefox/bookmarks.nix b/provision/modules/programs/firefox/bookmarks.nix index 75c3820f..d93b3804 100644 --- a/provision/modules/programs/firefox/bookmarks.nix +++ b/provision/modules/programs/firefox/bookmarks.nix @@ -1,5 +1,3 @@ -# Firefox bookmarks - [ { name = "Managed Bookmarks"; toolbar = true; bookmarks = [ { name = "Bookmarks"; bookmarks = [ From 8fe6dfe8ea079e3a6e925457f699e1dfe5c66b08 Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Sat, 26 Oct 2024 19:46:24 -0700 Subject: [PATCH 09/29] reorder overlays --- provision/overlays/default.nix | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/provision/overlays/default.nix b/provision/overlays/default.nix index 410613a0..1abcece9 100644 --- a/provision/overlays/default.nix +++ b/provision/overlays/default.nix @@ -1,14 +1,11 @@ -/* This contains various packages we want to overlay. Note that the - * other ".nix" files in this directory are automatically loaded. - */ final: prev: { advcpmv = final.callPackage ../pkgs/advcpmv.nix {}; + ftw = final.callPackage ../pkgs/ftw.nix {}; + gnome-fullscreen-to-empty-workspace = final.callPackage ../pkgs/gnome-fullscreen-to-empty-workspace.nix {}; + gnome-set-panel-monitor = final.callPackage ../pkgs/gnome-set-panel-monitor.nix {}; nx_tzdb = final.callPackage ../pkgs/nx_tzdb.nix {}; + pySVS = final.callPackage ../pkgs/pySVS.nix {}; + ryujinx = final.callPackage ../pkgs/ryujinx/default.nix {}; sudachi = final.qt6.callPackage ../pkgs/sudachi/default.nix {}; yuzu = final.libsForQt5.callPackage ../pkgs/yuzu.nix {}; - gnome-set-panel-monitor = final.callPackage ../pkgs/gnome-set-panel-monitor.nix {}; - gnome-fullscreen-to-empty-workspace = final.callPackage ../pkgs/gnome-fullscreen-to-empty-workspace.nix {}; - ryujinx = final.callPackage ../pkgs/ryujinx/default.nix {}; - pySVS = final.callPackage ../pkgs/pySVS.nix {}; - ftw = final.callPackage ../pkgs/ftw.nix {}; } From c594dc25448e81da4bcf13ed753283967f1197c3 Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Sun, 27 Oct 2024 00:30:24 -0700 Subject: [PATCH 10/29] switch to ryujinx being updated --- provision/pkgs/ryujinx/default.nix | 15 ++++---- provision/pkgs/ryujinx/deps.nix | 57 +++++++++++++++++++++++++++++- 2 files changed, 63 insertions(+), 9 deletions(-) diff --git a/provision/pkgs/ryujinx/default.nix b/provision/pkgs/ryujinx/default.nix index 7ad2659d..1fd69e83 100644 --- a/provision/pkgs/ryujinx/default.nix +++ b/provision/pkgs/ryujinx/default.nix @@ -1,7 +1,7 @@ { lib , buildDotnetModule , dotnetCorePackages -, fetchFromGitea +, fetchFromGitHub , libX11 , libgdiplus , ffmpeg @@ -26,14 +26,13 @@ buildDotnetModule rec { pname = "ryujinx"; - version = "1.1.1401"; + version = "3513"; # commit number - src = fetchFromGitea { - domain = "git.tstarr.us"; - owner = "tstarr"; - repo = "ryujinx"; - rev = "5dbba07e33e83c9047dcbb701c9655edbbe89086"; - hash = "sha256-UeJ3KE5e5H9crqroAxjmxYTf/Z4cbj41a6/1HW2nLcA="; + src = fetchFromGitHub { + owner = "GreemDev"; + repo = "Ryujinx"; + rev = "6be88380433e04ea8898645ffc0111e1a31eafb1"; + hash = "sha256-t0qqshf2x+wogHtoxj9bthU03h29wvhrFCTUw8C2DDo="; }; enableParallelBuilding = false; diff --git a/provision/pkgs/ryujinx/deps.nix b/provision/pkgs/ryujinx/deps.nix index 6a1c37ce..54ef82b4 100644 --- a/provision/pkgs/ryujinx/deps.nix +++ b/provision/pkgs/ryujinx/deps.nix @@ -12,6 +12,9 @@ (fetchNuGet { pname = "Avalonia.Desktop"; version = "11.0.10"; hash = "sha256-fIty7TfiTC+OX9gCH4tA8Fs9dF4+G7Mhs9XnZadUR2g="; }) (fetchNuGet { pname = "Avalonia.Diagnostics"; version = "11.0.10"; hash = "sha256-itnN+LIZ2S+1CjD0ZS/woKtpgWbC/srMYzbYfX3a8LA="; }) (fetchNuGet { pname = "Avalonia.FreeDesktop"; version = "11.0.10"; hash = "sha256-uVNOOVTQIqQ2pDgSsz5saI7+fMvps40vJlMp1/XdyaE="; }) + (fetchNuGet { pname = "Projektanker.Icons.Avalonia"; version = "9.4.0"; hash = "sha256-SVzkayPUk/7WXQW2Wn3ri4ia92WvJoXTrPmcT8C+J8U="; }) + (fetchNuGet { pname = "Projektanker.Icons.Avalonia.FontAwesome"; version = "9.4.0"; hash = "sha256-NscqtIdfn4vWrZbPeJuBq+w6ysAIOLXm3FI8TYUJv4M="; }) + (fetchNuGet { pname = "Projektanker.Icons.Avalonia.MaterialDesign"; version = "9.4.0"; hash = "sha256-OTXZAbTsIWjJ7CduyuW57RoExC0eHYIwk9yq3TEGEXE="; }) (fetchNuGet { pname = "Avalonia.Markup.Xaml.Loader"; version = "11.0.10"; hash = "sha256-Xv6L8U34QEiH6r3SQWLwuVFk9N9REmCUHa9hEbv2m24="; }) (fetchNuGet { pname = "Avalonia.Native"; version = "11.0.10"; hash = "sha256-P9j01FDXDpixo8wBVH3XK0Am6UBhG52HDrzt1ZqD8Ro="; }) (fetchNuGet { pname = "Avalonia.Remote.Protocol"; version = "11.0.10"; hash = "sha256-qtvlczTg2yUZWyyqXkkboB8lK9aYv+STbfDvSKb55Vw="; }) @@ -31,6 +34,7 @@ (fetchNuGet { pname = "ExCSS"; version = "4.2.3"; hash = "sha256-M/H6P5p7qqdFz/fgAI2MMBWQ7neN/GIieYSSxxjsM9I="; }) (fetchNuGet { pname = "FluentAvaloniaUI"; version = "2.0.5"; hash = "sha256-EaJ6qR2yn+7p8lf62yx2vL3sGhnPOfbP5jBjR+pGY7o="; }) (fetchNuGet { pname = "FSharp.Core"; version = "7.0.200"; hash = "sha256-680VgvYbZbztPQosO17r5y8vxg/Y/4Vmr5K3iLIJKMo="; }) + (fetchNuGet { pname = "Gommon"; version = "2.6.5"; hash = "sha256-JpQs3FLEt3MThpmKmCkyCc/pXPwRPPGei92ONsOhzHo="; }) (fetchNuGet { pname = "GtkSharp.Dependencies"; version = "1.1.1"; hash = "sha256-/IpSj5JnUTREfQsdA3XW+eqNhqApTds65DQoNpjl3jk="; }) (fetchNuGet { pname = "HarfBuzzSharp"; version = "2.8.2.3"; hash = "sha256-4tbdgUabPjlkBm3aUFeocj4Fdslmms2olDFpzOLyqoQ="; }) (fetchNuGet { pname = "HarfBuzzSharp"; version = "7.3.0"; hash = "sha256-LlPQO/NYgIMWicvLOtWsQzCp512QpIImYDP9/n2rDOc="; }) @@ -42,6 +46,57 @@ (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.WebAssembly"; version = "7.3.0"; hash = "sha256-9VI0xCavuuIIStuQ7ipBfWu5HrAt+Kk/F2j57C1llTU="; }) (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.Win32"; version = "2.8.2.3"; hash = "sha256-5GSzM5IUoOwK+zJg0d74WlT3n1VZly8pKlyjiqVocCI="; }) (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.Win32"; version = "7.3.0"; hash = "sha256-WnB7l73hneU9Kpbm8S9zEYbZHjFre24vWz0vl8+v28M="; }) + (fetchNuGet { pname = "Humanizer"; version = "2.14.1"; hash = "sha256-1wGwf5KAmDeiH0Dz8KcTdZw+UMkiNsjKOIOt/VJnnqE="; }) + (fetchNuGet { pname = "Humanizer.Core"; version = "2.14.1"; hash = "sha256-EXvojddPu+9JKgOG9NSQgUTfWq1RpOYw7adxDPKDJ6o="; }) + (fetchNuGet { pname = "Humanizer.Core.af"; version = "2.14.1"; hash = "sha256-8CCgI7OweSa53cZWZBXQ8a7VVt/NPP16zHVBZvzU9KQ="; }) + (fetchNuGet { pname = "Humanizer.Core.ar"; version = "2.14.1"; hash = "sha256-JRoP+brQgYBZI8OccH/jaM1Z482ZWBiqU2XL3KsIPw8="; }) + (fetchNuGet { pname = "Humanizer.Core.az"; version = "2.14.1"; hash = "sha256-ubwkbes9zrrisuXTcT4ZgOAiFsUieC6OLd4pgzxsE40="; }) + (fetchNuGet { pname = "Humanizer.Core.bg"; version = "2.14.1"; hash = "sha256-Xv6DP1xxxGVUfP44TZasWpxgQ/DkriljvmIMtHf+nGk="; }) + (fetchNuGet { pname = "Humanizer.Core.bn-BD"; version = "2.14.1"; hash = "sha256-6JpReIc3fkExvJIXzk6fUw56wJ78aTEg1dWQ6o+dQow="; }) + (fetchNuGet { pname = "Humanizer.Core.cs"; version = "2.14.1"; hash = "sha256-MGL86KxSbz0PkDo9+NRj6h1fDjPZXlxAtYNf0Zreg/4="; }) + (fetchNuGet { pname = "Humanizer.Core.da"; version = "2.14.1"; hash = "sha256-Gpw8kJbgz0KQS2mGY5tmrHqpgUO4abD7dSKIy//ONYM="; }) + (fetchNuGet { pname = "Humanizer.Core.de"; version = "2.14.1"; hash = "sha256-Eswv8aEQoxI9MZr2CvWtBUn5X9JRZTWQjRzHJkGj80g="; }) + (fetchNuGet { pname = "Humanizer.Core.el"; version = "2.14.1"; hash = "sha256-wCK2Uy/AV6FxPUSUM0NMbV14pAP+ss25AaVAHMQIeJA="; }) + (fetchNuGet { pname = "Humanizer.Core.es"; version = "2.14.1"; hash = "sha256-iEHiQXKwg0ABDxh//HSrzwaVOlilQBFI96+GYzzTMwQ="; }) + (fetchNuGet { pname = "Humanizer.Core.fa"; version = "2.14.1"; hash = "sha256-2Js7k3nvwJvxAjq3yoLn7PUY2S8+vXfgESwU4SbvjaA="; }) + (fetchNuGet { pname = "Humanizer.Core.fi-FI"; version = "2.14.1"; hash = "sha256-jOWo43r3dhiBsV9cCoDfqK/YqWj5LejZsnfkG6mlkpA="; }) + (fetchNuGet { pname = "Humanizer.Core.fr"; version = "2.14.1"; hash = "sha256-WCbA+f4B3g/ml7KrkHkzpU2Fj38HtWc/ujoVY5F3lk4="; }) + (fetchNuGet { pname = "Humanizer.Core.fr-BE"; version = "2.14.1"; hash = "sha256-GydVmoEy+lwEQ1nM39QXSRhYNchqM47p7qhUEimN4Cw="; }) + (fetchNuGet { pname = "Humanizer.Core.he"; version = "2.14.1"; hash = "sha256-MMf3qjJ+yzxjMxOR7wMWf+eErxWLqpsdWKFhjNCOsyM="; }) + (fetchNuGet { pname = "Humanizer.Core.hr"; version = "2.14.1"; hash = "sha256-kBv2I9ns6L6D4XfXfyZS1VM6+YwF4yUkCmCA5zqvsok="; }) + (fetchNuGet { pname = "Humanizer.Core.hu"; version = "2.14.1"; hash = "sha256-vRje+kxqOsl1JCXAE0yDKvauUumzuEhNcnhNsdIdgVM="; }) + (fetchNuGet { pname = "Humanizer.Core.hy"; version = "2.14.1"; hash = "sha256-UL7PsK4msT5c96lk70/bVAxN63B71l8VOFtvuJQH9a0="; }) + (fetchNuGet { pname = "Humanizer.Core.id"; version = "2.14.1"; hash = "sha256-nIl64gCuZh4D527qI2hfQRvzt1mTJUCDGMIZwpS3C/A="; }) + (fetchNuGet { pname = "Humanizer.Core.is"; version = "2.14.1"; hash = "sha256-38vUQ1aVtlhK15kP9ZlDO0Nl0DcOA5iHx6F2SPN1gYM="; }) + (fetchNuGet { pname = "Humanizer.Core.it"; version = "2.14.1"; hash = "sha256-4ne0VRNi9OAj3bGCQgCy1BNYKMizoHykJ/lchmCsWdc="; }) + (fetchNuGet { pname = "Humanizer.Core.ja"; version = "2.14.1"; hash = "sha256-oAilMM8J6LumV6qv3gSIBNTm7u2L4vV38cQXtME3PhM="; }) + (fetchNuGet { pname = "Humanizer.Core.ko-KR"; version = "2.14.1"; hash = "sha256-b70HQl2IWVPATtaYGDyJ+Z6ioPtrM53vXzfTCHYgxpQ="; }) + (fetchNuGet { pname = "Humanizer.Core.ku"; version = "2.14.1"; hash = "sha256-8LiEH7MaapMtkHFMj7Y3pG+g0QYuIa5gD3VR9nYQn+k="; }) + (fetchNuGet { pname = "Humanizer.Core.lv"; version = "2.14.1"; hash = "sha256-zyCsE5cD++u5shNIqCQUd+66FkUWOl+NfFrs2JduCaQ="; }) + (fetchNuGet { pname = "Humanizer.Core.ms-MY"; version = "2.14.1"; hash = "sha256-pSdZLUi9oWo78nBh2DJunPhDR7THdZSZP0msCVbPsrY="; }) + (fetchNuGet { pname = "Humanizer.Core.mt"; version = "2.14.1"; hash = "sha256-mkX2reEvNpx9w6gtZw+6bkrnj3Di1qgVDMr9q0IeKCw="; }) + (fetchNuGet { pname = "Humanizer.Core.nb"; version = "2.14.1"; hash = "sha256-QvYJHqjO/SrelWYgtm8Sc7axs7J8wbJE+GbTgVw5LYs="; }) + (fetchNuGet { pname = "Humanizer.Core.nb-NO"; version = "2.14.1"; hash = "sha256-YW8y2XkmHjwqf2fztNB3rsn3+CgslF1TclITwp0fA9g="; }) + (fetchNuGet { pname = "Humanizer.Core.nl"; version = "2.14.1"; hash = "sha256-bQM7aXNQMBY+65NfMVQz/xYz9Ad2JC+ryXoB4lcYgmA="; }) + (fetchNuGet { pname = "Humanizer.Core.pl"; version = "2.14.1"; hash = "sha256-IrPxHI4uQvBeMM9/8PaNueKwVkbN+1zFQlNWRjNfXEA="; }) + (fetchNuGet { pname = "Humanizer.Core.pt"; version = "2.14.1"; hash = "sha256-XrlC15HNJFmDwLpHIUHb3Bec9A79msQCRB9Dvz8w4l0="; }) + (fetchNuGet { pname = "Humanizer.Core.ro"; version = "2.14.1"; hash = "sha256-llXtfq4Tr5V2Q4dVD7J0IKITtpiWrFs50DAtJhcSuRI="; }) + (fetchNuGet { pname = "Humanizer.Core.ru"; version = "2.14.1"; hash = "sha256-lD0dB3mkbFfGExwVWZk6fv24MyQQ8Cdv5OrleuZeChg="; }) + (fetchNuGet { pname = "Humanizer.Core.sk"; version = "2.14.1"; hash = "sha256-EmyE+wssZwY6tAuEiFXGn5/yzVMZe7QEuTjOcByOXaA="; }) + (fetchNuGet { pname = "Humanizer.Core.sl"; version = "2.14.1"; hash = "sha256-sWWxh7KZ8Y3Ps6GbBOHbU2GMsNZfkM+BOnUChf3fz4s="; }) + (fetchNuGet { pname = "Humanizer.Core.sr"; version = "2.14.1"; hash = "sha256-/bA3LULRFn5WYmCscr5R5vaFRjeHC0xjNiF7PXEJ8r0="; }) + (fetchNuGet { pname = "Humanizer.Core.sr-Latn"; version = "2.14.1"; hash = "sha256-43+o6oj0UNRJKiFoh57MGPSzlsWAq0eRtzlCrewDmVM="; }) + (fetchNuGet { pname = "Humanizer.Core.sv"; version = "2.14.1"; hash = "sha256-9lXrHveKDs1y/W3Qxd+MVcohhKEU7zNPx21GBVPp/rA="; }) + (fetchNuGet { pname = "Humanizer.Core.th-TH"; version = "2.14.1"; hash = "sha256-ldCsXINSvL2xom0SCtVQy+qX1IN5//EUoyIOwXiJ3k8="; }) + (fetchNuGet { pname = "Humanizer.Core.tr"; version = "2.14.1"; hash = "sha256-VZnO1vMXiR7egKEKJ6lBsj7eNgxhFzakFWsYYRW4u2U="; }) + (fetchNuGet { pname = "Humanizer.Core.uk"; version = "2.14.1"; hash = "sha256-rdvleUrKbj3c06A0O2MkgAZLtXLro9SPB1YqAGE1Vyg="; }) + (fetchNuGet { pname = "Humanizer.Core.uz-Cyrl-UZ"; version = "2.14.1"; hash = "sha256-Qso1Iz9MTLs63x4F00kK31TZAN4AoFaFsuVzM+1z38k="; }) + (fetchNuGet { pname = "Humanizer.Core.uz-Latn-UZ"; version = "2.14.1"; hash = "sha256-sVnkZTuEaHfMJIAZmSCqsspnKkYxK9eVBQZnAAqHNW4="; }) + (fetchNuGet { pname = "Humanizer.Core.vi"; version = "2.14.1"; hash = "sha256-5wDt72+HdNN3mt/iJkxV9LaH13Jc1qr1vB4Lz8ahIPs="; }) + (fetchNuGet { pname = "Humanizer.Core.zh-CN"; version = "2.14.1"; hash = "sha256-Z3qfFWyovcVT4Hqy51lgW2xGwyfI//Yfv90E0Liy1sw="; }) + (fetchNuGet { pname = "Humanizer.Core.zh-Hans"; version = "2.14.1"; hash = "sha256-BTGkMEkQYJKRp858EU7hwNOdsHRT+w6vAMa6H8JIyX4="; }) + (fetchNuGet { pname = "Humanizer.Core.zh-Hant"; version = "2.14.1"; hash = "sha256-N3D1z5aoGwAZ6+ZxrWMtXgacvQcgDG+aLrQQI9uysmM="; }) + (fetchNuGet { pname = "JetBrains.Annotations"; version = "2023.2.0"; hash = "sha256-Um10fSmO+21I7f+lbzzVq5e8GBijJ9amTvOlt362p1s="; }) (fetchNuGet { pname = "LibHac"; version = "0.19.0"; hash = "sha256-FDEmeGHbX/aCFjFbFk8QwO2rTfFizt9UKb+KFDt23hk="; }) (fetchNuGet { pname = "MicroCom.CodeGenerator.MSBuild"; version = "0.11.0"; hash = "sha256-TsxziX9V8T3qRrEA3o9wY84ocDcUUUBzvARi5QZW23o="; }) (fetchNuGet { pname = "MicroCom.Runtime"; version = "0.11.0"; hash = "sha256-VdwpP5fsclvNqJuppaOvwEwv2ofnAI5ZSz2V+UEdLF0="; }) @@ -197,7 +252,7 @@ (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "4.5.1"; hash = "sha256-PIhkv59IXjyiuefdhKxS9hQfEwO9YWRuNudpo53HQfw="; }) (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "8.0.0"; hash = "sha256-fjCLQc1PRW0Ix5IZldg0XKv+J1DqPSfu9pjMyNBp7dE="; }) (fetchNuGet { pname = "System.Text.Encodings.Web"; version = "8.0.0"; hash = "sha256-IUQkQkV9po1LC0QsqrilqwNzPvnc+4eVvq+hCvq8fvE="; }) - (fetchNuGet { pname = "System.Text.Json"; version = "8.0.0"; hash = "sha256-XFcCHMW1u2/WujlWNHaIWkbW1wn8W4kI0QdrwPtWmow="; }) + (fetchNuGet { pname = "System.Text.Json"; version = "8.0.4"; hash = "sha256-g5oT7fbXxQ9Iah1nMCr4UUX/a2l+EVjJyTrw3FTbIaI="; }) (fetchNuGet { pname = "System.Threading"; version = "4.3.0"; hash = "sha256-ZDQ3dR4pzVwmaqBg4hacZaVenQ/3yAF/uV7BXZXjiWc="; }) (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; hash = "sha256-Z5rXfJ1EXp3G32IKZGiZ6koMjRu0n8C1NGrwpdIen4w="; }) (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.4"; hash = "sha256-owSpY8wHlsUXn5xrfYAiu847L6fAKethlvYx97Ri1ng="; }) From 50ac0f697d2e4984838052d7a66dd8ba96c87484 Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Sun, 27 Oct 2024 00:45:34 -0700 Subject: [PATCH 11/29] update TODO --- TODO.md | 1 - 1 file changed, 1 deletion(-) diff --git a/TODO.md b/TODO.md index 2ee047b8..5be3426a 100644 --- a/TODO.md +++ b/TODO.md @@ -1,2 +1 @@ - Add Nix formatting and linting that works with neovim. -- Change system to configs and migrate files to programs, desktop, or services as appropriate. configs will include optional system configuration that don't require additional programs installed (aliases for example) From 258b0081f0d13fb7f02fc9c211a110af71329250 Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Sun, 27 Oct 2024 10:05:17 -0700 Subject: [PATCH 12/29] fix torus modules in configuration.nix --- provision/hosts/torus/configuration.nix | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/provision/hosts/torus/configuration.nix b/provision/hosts/torus/configuration.nix index 504384f2..f3422f2d 100644 --- a/provision/hosts/torus/configuration.nix +++ b/provision/hosts/torus/configuration.nix @@ -98,10 +98,9 @@ modules = { programs = { chezmoi.apply = true; + borg.enable = true; }; - system = { - backup.enable = true; - terminal.enable = true; + services = { ssh.enable = true; }; }; From 27138332c41a5904cb7957e4f399e41126e9d427 Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Sun, 27 Oct 2024 10:12:59 -0700 Subject: [PATCH 13/29] add fzf to base-terminal --- provision/modules/desktop/default.nix | 1 - provision/modules/programs/base-terminal.nix | 7 ++++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/provision/modules/desktop/default.nix b/provision/modules/desktop/default.nix index bf8ebb12..2c6593ca 100644 --- a/provision/modules/desktop/default.nix +++ b/provision/modules/desktop/default.nix @@ -13,7 +13,6 @@ in { config = lib.mkIf cfg.enable { environment.systemPackages = with pkgs; [ bc # Arbitrary-precision arithmetic language. - fzf # Command-line fuzzy finder for Unix-like operating systems. gamemode # Optimizes system performance for gaming by adjusting system settings. vesktop # Voice, video, and text communication platform for communities and friends. inkscape # Vector graphics editor for creating illustrations, icons, logos, diagrams, and more. diff --git a/provision/modules/programs/base-terminal.nix b/provision/modules/programs/base-terminal.nix index c741b579..d30ccc23 100644 --- a/provision/modules/programs/base-terminal.nix +++ b/provision/modules/programs/base-terminal.nix @@ -29,9 +29,10 @@ in { nodejs # JavaScript runtime built on Chrome's V8 JavaScript engine. ripgrep # Line-oriented search tool that recursively searches directories for a regex pattern. cargo # Package manager and build system for Rust. - docker-compose - sesh - zoxide + docker-compose # Docker CLI plugin to define and run multi-container applications with Docker. + sesh # Smart session manager for the terminal. + zoxide # Fast cd command that learns your habits. + fzf # Command-line fuzzy finder for Unix-like operating systems. ]; }; } From 145678ae78e81cc2241c24f62d10e162c5f0d65f Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Tue, 29 Oct 2024 19:58:15 -0700 Subject: [PATCH 14/29] enable peripherals for all desktop configs --- provision/modules/desktop/peripherals.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/provision/modules/desktop/peripherals.nix b/provision/modules/desktop/peripherals.nix index 72c83d3a..8754ad9c 100644 --- a/provision/modules/desktop/peripherals.nix +++ b/provision/modules/desktop/peripherals.nix @@ -1,8 +1,7 @@ { config, lib, pkgs, user, ... }: -let cfg = config.modules.desktop.peripherals; +let cfg = config.modules.desktop; in { - options.modules.desktop.peripherals.enable = lib.mkEnableOption "peripherals"; config = lib.mkIf cfg.enable { environment.systemPackages = with pkgs; [ libimobiledevice # Library to support iPhone, iPod Touch and iPad devices on Linux From e6ccd7869076c5678b1aa86e66df99023221a251 Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Fri, 1 Nov 2024 21:23:33 -0700 Subject: [PATCH 15/29] backup nextcloud on torus --- home/dot_config/borgmatic.d/torus_bulk.yaml | 10 +++++++-- provision/hosts/torus/gitea.nix | 2 +- provision/hosts/torus/nextcloud.nix | 23 ++++++++++++++++++--- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/home/dot_config/borgmatic.d/torus_bulk.yaml b/home/dot_config/borgmatic.d/torus_bulk.yaml index 983446e6..af700602 100644 --- a/home/dot_config/borgmatic.d/torus_bulk.yaml +++ b/home/dot_config/borgmatic.d/torus_bulk.yaml @@ -1,10 +1,16 @@ source_directories: - /engi/backup # Static files and service dumps - #- /home/tstarr/Sync # Syncthing files + - /var/lib/nextcloud # nextcloud files (besides sql dump) before_backup: - "tree /engi > /engi/backup/tree.txt" - - sudo -u gitea backup-dump-gitea + - sudo -u gitea dump-gitea + - sudo -u nextcloud dump-nextcloud + - nextcloud-occ maintenance:mode --on + +after_backup: + - restore-docker-containers + - nextcloud-occ maintenance:mode --off archive_name_format: 'torus_bulk.borg-{now}' diff --git a/provision/hosts/torus/gitea.nix b/provision/hosts/torus/gitea.nix index 91b854c3..d6ace446 100644 --- a/provision/hosts/torus/gitea.nix +++ b/provision/hosts/torus/gitea.nix @@ -11,7 +11,7 @@ in { ]; environment.systemPackages = [ - (pkgs.writeScriptBin "backup-dump-gitea" '' + (pkgs.writeScriptBin "dump-gitea" '' #!/bin/sh cd ${dumpFolder} [ -e gitea-dump.zip ] && rm gitea-dump.zip diff --git a/provision/hosts/torus/nextcloud.nix b/provision/hosts/torus/nextcloud.nix index 1d0c55a4..74e7d2b4 100644 --- a/provision/hosts/torus/nextcloud.nix +++ b/provision/hosts/torus/nextcloud.nix @@ -1,7 +1,24 @@ { config, lib, pkgs, user, ... }: -{ +let + dumpFolder = "/engi/backup/dumps/nextcloud"; + domain = "cloud.tstarr.us"; +in { environment.systemPackages = with pkgs; [ cron + zip + rsync + (pkgs.writeScriptBin "dump-nextcloud" '' + #!/bin/sh + cd ${dumpFolder} + [ -e nextcloud-sql ] && rm nextcloud-sql + nextcloud-occ maintenance:mode --on + mysqldump --single-transaction nextcloud > ${dumpFolder}/nextcloud-sql + nextcloud-occ maintenance:mode --off + '') + ]; + + systemd.tmpfiles.rules = [ + "d ${dumpFolder} 0775 nextcloud nextcloud -" ]; # nextcloud secrets @@ -13,7 +30,7 @@ services = { nginx.virtualHosts = { - "cloud.tstarr.us" = { + "${domain}" = { forceSSL = true; enableACME = true; }; @@ -21,7 +38,7 @@ nextcloud = { enable = true; - hostName = "cloud.tstarr.us"; + hostName = "${domain}"; # Need to manually increment with every major upgrade. package = pkgs.nextcloud29; From 78230b35a1580f4d2d5a7021b957c54435eb923c Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Fri, 1 Nov 2024 21:51:17 -0700 Subject: [PATCH 16/29] back up rss database with borg --- home/dot_config/borgmatic.d/torus_bulk.yaml | 1 + provision/hosts/torus/rss.nix | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/home/dot_config/borgmatic.d/torus_bulk.yaml b/home/dot_config/borgmatic.d/torus_bulk.yaml index af700602..21af3e32 100644 --- a/home/dot_config/borgmatic.d/torus_bulk.yaml +++ b/home/dot_config/borgmatic.d/torus_bulk.yaml @@ -6,6 +6,7 @@ before_backup: - "tree /engi > /engi/backup/tree.txt" - sudo -u gitea dump-gitea - sudo -u nextcloud dump-nextcloud + - sudo -u miniflux dump-miniflux - nextcloud-occ maintenance:mode --on after_backup: diff --git a/provision/hosts/torus/rss.nix b/provision/hosts/torus/rss.nix index 23e5a169..c6076c2e 100644 --- a/provision/hosts/torus/rss.nix +++ b/provision/hosts/torus/rss.nix @@ -1,8 +1,22 @@ { config, lib, pkgs, user, ... }: let domain = "rssbridge.tstarr.us"; + dumpFolder = "/engi/backup/dumps/miniflux"; in { + systemd.tmpfiles.rules = [ + "d ${dumpFolder} 0775 miniflux miniflux -" + ]; + + environment.systemPackages = [ + (pkgs.writeScriptBin "dump-miniflux" '' + #!/bin/sh + cd ${dumpFolder} + [ -e miniflux-sql ] && rm miniflux-sql + pg_dump miniflux > ${dumpFolder}/miniflux-sql + '') + ]; + services.postgresql = { enable = true; authentication = pkgs.lib.mkOverride 10 '' From 4b6673ce8fddfe962f939b1ad09f84e68f154a7b Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Fri, 1 Nov 2024 22:07:00 -0700 Subject: [PATCH 17/29] add torus syncthing --- provision/hosts/bulwark/configuration.nix | 1 + provision/hosts/kestrel/configuration.nix | 1 + provision/hosts/torus/configuration.nix | 9 +++++++++ provision/secrets/secrets.nix | 2 ++ provision/secrets/syncthing/torus/cert.pem.age | Bin 0 -> 1336 bytes provision/secrets/syncthing/torus/key.pem.age | Bin 0 -> 830 bytes 6 files changed, 13 insertions(+) create mode 100644 provision/secrets/syncthing/torus/cert.pem.age create mode 100644 provision/secrets/syncthing/torus/key.pem.age diff --git a/provision/hosts/bulwark/configuration.nix b/provision/hosts/bulwark/configuration.nix index fc86d154..c0df46a6 100644 --- a/provision/hosts/bulwark/configuration.nix +++ b/provision/hosts/bulwark/configuration.nix @@ -41,6 +41,7 @@ certPath = ../../secrets/syncthing/bulwark/cert.pem.age; devices = { "kestrel" = { id = "5WWL4FE-ARZ4FHP-J33HQCH-CZKEXLN-2RAY4KW-PDI754F-3HVPZYI-VC3ESAF"; }; + "torus" = { id = "ZVABUCA-3SA5QKR-OZSCIS5-RDAHR2V-D4R4NFK-ZBYOKDP-6HQUG2M-BNL3DAO"; }; }; }; }; diff --git a/provision/hosts/kestrel/configuration.nix b/provision/hosts/kestrel/configuration.nix index 9c78745f..1100d99f 100644 --- a/provision/hosts/kestrel/configuration.nix +++ b/provision/hosts/kestrel/configuration.nix @@ -63,6 +63,7 @@ certPath = ../../secrets/syncthing/kestrel/cert.pem.age; devices = { "bulwark" = { id = "YKPOWTQ-XMXG3SD-XKLPVEC-H4SO345-2ZZQK65-EBISRED-ISKCFMQ-T74P6Q5"; }; + "torus" = { id = "ZVABUCA-3SA5QKR-OZSCIS5-RDAHR2V-D4R4NFK-ZBYOKDP-6HQUG2M-BNL3DAO"; }; }; }; }; diff --git a/provision/hosts/torus/configuration.nix b/provision/hosts/torus/configuration.nix index f3422f2d..bdfe16cb 100644 --- a/provision/hosts/torus/configuration.nix +++ b/provision/hosts/torus/configuration.nix @@ -102,6 +102,15 @@ }; services = { ssh.enable = true; + syncthing = { + enable = true; + keyPath = ../../secrets/syncthing/torus/key.pem.age; + certPath = ../../secrets/syncthing/torus/cert.pem.age; + devices = { + "bulwark" = { id = "YKPOWTQ-XMXG3SD-XKLPVEC-H4SO345-2ZZQK65-EBISRED-ISKCFMQ-T74P6Q5"; }; + "kestrel" = { id = "5WWL4FE-ARZ4FHP-J33HQCH-CZKEXLN-2RAY4KW-PDI754F-3HVPZYI-VC3ESAF"; }; + }; + }; }; }; } diff --git a/provision/secrets/secrets.nix b/provision/secrets/secrets.nix index 02f7999e..c493811d 100644 --- a/provision/secrets/secrets.nix +++ b/provision/secrets/secrets.nix @@ -24,5 +24,7 @@ in "syncthing/kestrel/cert.pem.age".publicKeys = systems; "syncthing/bulwark/key.pem.age".publicKeys = systems; "syncthing/bulwark/cert.pem.age".publicKeys = systems; + "syncthing/torus/key.pem.age".publicKeys = systems; + "syncthing/torus/cert.pem.age".publicKeys = systems; } diff --git a/provision/secrets/syncthing/torus/cert.pem.age b/provision/secrets/syncthing/torus/cert.pem.age new file mode 100644 index 0000000000000000000000000000000000000000..8e86bd05fa141202b39db61b64216d9310bd0bad GIT binary patch literal 1336 zcmZ9_{X5eM003~L#+0r*;XJ7&p17rL-!sa!9loQfxvRO;$lT;A@fNj=Z~-sd0qNL7kRgSGK@un?)86>Jgj_1#(ePm_t%90WFtph2vPs zh$)GinV3k5XF^nAri9L>N_BZGB32CLGDKFTmaP}F83>ZhNkR+?qn65(Wp2$g36%N- zF&?1`pm-_$%MH=Ulb9+T#DjB9DG;BXp~Um}D2pN|2vJ1I6><2Kj0{_j$|TIBTQX5H zQH#~G1WE!&O)#S>p$atSphRUXsF4A3VKl17YlvcTRJ2jdOxA%0Y-D644iUtuY=B(E zQPD|U7MG#7#lj3KVwP+HKn*Nah$ZF(J)floU@?|_cvqieigsB)Rkg&nPKY5&HmUm^ zd(X@k%ldx39tA@fStc*-Mp3l&sb|%&%gvB$+=V{O#a)_49huqoNOInrl3DoM-rzj@wuN?Cr1pI?Qh(;1I=sJ`RT@ zEJCkfG|xg><7PH~ip`C%0}rftGmLhbLfgqq-80d41( za#ooTH!gxRh@sxiy#W!arDwn0Hk<#X z9eG)PPdCjNIC!noIU6Bq;FZ_UFRI{!8hd*XR9leu?O~`Xvaok-aK&KVD3j}lFjw*2x&m;y$Zbohu*PRk zjK^22(4oMLxyvNqr7t4PtG+XHCMO*G6318V@t1O{-W?NpKlz!ulX=4jYCQ42y<-J& zcRcw~Xx2^nUe6Ui4cpRnZx!T5{L@!&E=89-8viutx6J7-{TywzbO-(W{;`|?v|-_X z$Nt0ih6kJ4m)v*v;@l0HAGjVu4DNSaYDuHv$DG=oovD)r9mfgb>FGcGqc~7E6;nTF z$e$Rb`EL$#?4%iv3?DB@Z=PWmMvZ>6yCUXvi|}Lpe63$Y-O84mmA)rmivtpyd|uA9 zMXVfS=R_u$q?VH)tBCIVp}Z$x@m*Qdbc=gO`MxWz@+hIn?+9s6Z|~~OG~d5c)54Am z3EuO82GhFY-9Me%*D&}u;3Z#sPu4g`CX}vkq6uP1)6>$iC*g(lJ?1g5k^FOZ*)svb z-np~5iS-t9D5U->Jpi$oA9ltr=omQV1Ah;qmwJk=&R{&;KH7f2F3d4xxAx@sFT=a9 dAzwRR5;SvDI5JNi$!kt;bIm=haT^jF{s$ngF`WPa literal 0 HcmV?d00001 diff --git a/provision/secrets/syncthing/torus/key.pem.age b/provision/secrets/syncthing/torus/key.pem.age new file mode 100644 index 0000000000000000000000000000000000000000..4e644575a3b994b879addf4244821ca066c6f368 GIT binary patch literal 830 zcmZ9_>ucNu008h7S!++}n9Ql0#hdj3X4yURxLh5z$u*a|%UyD5+DmdU+T?P{J#xu4 zm*vq7*$1Zx(@96Ct>VOU?88KG8%%Mnh|?;5=mtZ4z`!ZE`j~<`CT{BY{{DfVtXILR zS+Rq*Q@70BmaRwJSO^>qcRDq&s>Tr{mJFxoA|1{PHz(n2V;pF?G0vG1NmQJTV=5wK z9ia{+h1rT6X?T@#S%ySBWRPi0C+aND0PGZ#)H$@40MIM|mD&Ulh;_*}CN+TP3R-mI z1}CUF4iA%5j0+4*5&Z;{V*R{J(6;WG9-3+ra#L3Ars@{*S;B)lAyISlB%MlD=)j)< zECFy7+aW4RrQ|qGiO^CyYR(ZEYoaV|+`LLQVRGS2q$<%-A~yw*jgqQCs-bzJWo0rz z0nHHtf}_d0le0>G2@cf&Jc>3jSSj%76jq~j6>b#~n^i4s7J?Oq&LO<)k}wD08#k_@ z@+m!>!)0Yk5ysnMi2xXGGM-S)Sr3qNrbJf}yny4WxMp(=DT;-RG|NOYc^=M5UMpLy z@(9v)86#R~wOrhvBuI>^n{aIo_u&u-f?>AESTsb5?KWC5btP_N4DE~;#w(~$O1R~+ zla4{r2Gl8XaOn09eSp3A;fv>~h52hejg{xl%p6kw*k#P0SReZANAFA6f72g0Pj(R;VAUG9x6-F*PO9XY<*(|2BfO&I;C>^!iT zy`UeiO_;wV+09$+u6GmcW5qpB2VL*Ct51A!g}gQJ`K8Ks{^3Qx8)WXfC_Q*R%YCw? z{~oxX|Bej4-ZAnxIJQt7E6XQ7*hXzRb?%2}XL>Jh{r0Ej7asX_Z|CHVX5Z^e(&>+R zdT95)ov;3VU0J*N?$3kk1Hwbp#L=NkHy)Ff|L#~`{fEkL-t?&!f6C~;GmH*yTRih8 zb@-*XX6|qI&QE`JZMtgg8XQ9-=#%$#i-rBtmF1%cH?4m^{mk&5wF}1<(BF^CJ(;to eSM+m{zux}ldF+kVN8`f>lCQiI9JzIt4gLpxjWRC) literal 0 HcmV?d00001 From 4f3f1c8588a0455ffccd368aee59916ce1db95e9 Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Fri, 1 Nov 2024 22:09:29 -0700 Subject: [PATCH 18/29] move unused module name --- provision/hosts/kestrel/configuration.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/provision/hosts/kestrel/configuration.nix b/provision/hosts/kestrel/configuration.nix index 1100d99f..4f9d1a32 100644 --- a/provision/hosts/kestrel/configuration.nix +++ b/provision/hosts/kestrel/configuration.nix @@ -36,7 +36,6 @@ desktop = { enable = true; gnome.enable = true; - peripherals.enable = true; }; devel = { engineering.enable = true; From 2422903f7a5de6a499d81f4f421f2ad8652e76d2 Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Fri, 1 Nov 2024 22:19:59 -0700 Subject: [PATCH 19/29] syncthing backup on torus --- home/dot_config/borgmatic.d/torus_bulk.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/home/dot_config/borgmatic.d/torus_bulk.yaml b/home/dot_config/borgmatic.d/torus_bulk.yaml index 21af3e32..e25472c5 100644 --- a/home/dot_config/borgmatic.d/torus_bulk.yaml +++ b/home/dot_config/borgmatic.d/torus_bulk.yaml @@ -1,6 +1,7 @@ source_directories: - /engi/backup # Static files and service dumps - /var/lib/nextcloud # nextcloud files (besides sql dump) + - /engi/sync # Syncthing backups before_backup: - "tree /engi > /engi/backup/tree.txt" From a9bd38f54fadc27a0aabab004d7b92487c51ba67 Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Fri, 1 Nov 2024 22:39:57 -0700 Subject: [PATCH 20/29] change sync to home directory --- home/dot_config/borgmatic.d/torus_bulk.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home/dot_config/borgmatic.d/torus_bulk.yaml b/home/dot_config/borgmatic.d/torus_bulk.yaml index e25472c5..3f0eb97b 100644 --- a/home/dot_config/borgmatic.d/torus_bulk.yaml +++ b/home/dot_config/borgmatic.d/torus_bulk.yaml @@ -1,7 +1,7 @@ source_directories: - /engi/backup # Static files and service dumps - /var/lib/nextcloud # nextcloud files (besides sql dump) - - /engi/sync # Syncthing backups + - /home/tstarr/sync # Syncthing backups before_backup: - "tree /engi > /engi/backup/tree.txt" From 48457c9b234bebe24ab1275887ed8598c55719c4 Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Wed, 6 Nov 2024 21:12:48 -0800 Subject: [PATCH 21/29] remove TODO --- TODO.md | 1 - 1 file changed, 1 deletion(-) delete mode 100644 TODO.md diff --git a/TODO.md b/TODO.md deleted file mode 100644 index 5be3426a..00000000 --- a/TODO.md +++ /dev/null @@ -1 +0,0 @@ -- Add Nix formatting and linting that works with neovim. From 295a283cb6669982871b5bb93d4f70f112717ca5 Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Thu, 7 Nov 2024 20:43:19 -0800 Subject: [PATCH 22/29] add executor to gnome on kestrel with svs status --- provision/hosts/kestrel/configuration.nix | 1 + provision/hosts/kestrel/gnome.nix | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 provision/hosts/kestrel/gnome.nix diff --git a/provision/hosts/kestrel/configuration.nix b/provision/hosts/kestrel/configuration.nix index 4f9d1a32..bb332047 100644 --- a/provision/hosts/kestrel/configuration.nix +++ b/provision/hosts/kestrel/configuration.nix @@ -2,6 +2,7 @@ { imports = [ ./backup.nix + ./gnome.nix ]; # Use performance governor for sweet gaming performance! diff --git a/provision/hosts/kestrel/gnome.nix b/provision/hosts/kestrel/gnome.nix new file mode 100644 index 00000000..7ca7e250 --- /dev/null +++ b/provision/hosts/kestrel/gnome.nix @@ -0,0 +1,23 @@ +{ config, lib, pkgs, user, home-manager, ... }: +{ + environment.systemPackages = with pkgs; [ + gnomeExtensions.executor # Execute shell commands display output top bar. + ]; + + home-manager.users.${user} = { + dconf.settings = { + "org/gnome/shell" = { + enabled-extensions = [ + "executor@raujonas.github.io" + ]; + }; + "org/gnome/shell/extensions/executor" = { + "click-on-output-active" = false; + "center-active" = false; + "left-active" = false; + "right-active" = true; + "right-commands-json" = ''{"commands":[{"isActive":true,"command":"pySVS 54:B7:E5:57:1A:7B --volume=A | grep -oP \"(?<=VOLUME': )-?\\d+\" | xargs -I{} echo \"󰓃 {}dB\"","interval":20,"uuid":"732cd6de-ff5f-46a7-b8bb-51d1c621cc60"}]}''; + }; + }; + }; +} From 3b1c85cec71a570c7211709899ef01a965e4db46 Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Thu, 7 Nov 2024 20:58:34 -0800 Subject: [PATCH 23/29] move sv command to scriptBin for gnome run dialog --- home/dot_aliases | 6 ------ provision/modules/desktop/gnome.nix | 1 + provision/modules/desktop/peripherals.nix | 4 ++++ 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/home/dot_aliases b/home/dot_aliases index a1b60e67..b6bcb559 100644 --- a/home/dot_aliases +++ b/home/dot_aliases @@ -70,9 +70,3 @@ alias google-chrome-stable="google-chrome-stable --simulate-outdated-no-au='Tue, # rsync alias rsync.net="ssh fm2120@fm2120.rsync.net" - -# svs subwoofer -sv() { - pySVS 54:B7:E5:57:1A:7B --volume="$1" -} - diff --git a/provision/modules/desktop/gnome.nix b/provision/modules/desktop/gnome.nix index ba81e591..44caf567 100644 --- a/provision/modules/desktop/gnome.nix +++ b/provision/modules/desktop/gnome.nix @@ -196,6 +196,7 @@ in { move-to-center = [ "c" ]; switch-windows = ["Tab"]; switch-windows-backward = ["Tab"]; + panel-run-dialog = ["r"]; minimize = []; }; # custom-hot-corners-extended configs diff --git a/provision/modules/desktop/peripherals.nix b/provision/modules/desktop/peripherals.nix index 8754ad9c..bd365ff2 100644 --- a/provision/modules/desktop/peripherals.nix +++ b/provision/modules/desktop/peripherals.nix @@ -7,6 +7,10 @@ in { libimobiledevice # Library to support iPhone, iPod Touch and iPad devices on Linux ifuse # fuse filesystem implementation to access the contents of iOS devices pySVS # control SVS subwoofers from the command-line + (pkgs.writeScriptBin "sv" '' + #!/bin/sh + pySVS 54:B7:E5:57:1A:7B --volume="$1" + '') opensc # Open source smart card tools and middleware pcsc-tools # Tools are used to test a PC/SC drivers pkcs11helper # Library that simplifies the interaction with PKCS#11 From 7ddac3af4917febcc80ed6638f95770b1a246457 Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Fri, 8 Nov 2024 17:39:20 -0800 Subject: [PATCH 24/29] add script to clean home directory --- home/bin/executable_linux-clean-home | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 home/bin/executable_linux-clean-home diff --git a/home/bin/executable_linux-clean-home b/home/bin/executable_linux-clean-home new file mode 100644 index 00000000..c5d45772 --- /dev/null +++ b/home/bin/executable_linux-clean-home @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +tmp_dir="$HOME/tmp/$(date +'%Y%m%dT%H%M%S')" + +mkdir -p $tmp_dir +ls -p ~ | grep -v '^\.' \ + | grep -v 'bin' \ + | grep -v 'Desktop' \ + | grep -v 'devel' \ + | grep -v 'documents' \ + | grep -v 'media' \ + | grep -v 'mnt' \ + | grep -v 'Screenshots' \ + | grep -v 'sync' \ + | grep -v 'tmp' \ + | xargs -I {} mv ~/{} $tmp_dir From ab8f5de80a28117c9b7ef72243fc0a31cba69437 Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Sun, 10 Nov 2024 19:32:05 -0800 Subject: [PATCH 25/29] change sv script and executor to use a temporary file --- provision/hosts/kestrel/gnome.nix | 2 +- provision/modules/desktop/peripherals.nix | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/provision/hosts/kestrel/gnome.nix b/provision/hosts/kestrel/gnome.nix index 7ca7e250..4456f5b3 100644 --- a/provision/hosts/kestrel/gnome.nix +++ b/provision/hosts/kestrel/gnome.nix @@ -16,7 +16,7 @@ "center-active" = false; "left-active" = false; "right-active" = true; - "right-commands-json" = ''{"commands":[{"isActive":true,"command":"pySVS 54:B7:E5:57:1A:7B --volume=A | grep -oP \"(?<=VOLUME': )-?\\d+\" | xargs -I{} echo \"󰓃 {}dB\"","interval":20,"uuid":"732cd6de-ff5f-46a7-b8bb-51d1c621cc60"}]}''; + "right-commands-json" = ''{"commands":[{"isActive":true,"command":"echo \"󰓃 $(cat /tmp/svs)dB\"","interval":10,"uuid":"732cd6de-ff5f-46a7-b8bb-51d1c621cc60"}]}''; }; }; }; diff --git a/provision/modules/desktop/peripherals.nix b/provision/modules/desktop/peripherals.nix index bd365ff2..241e0169 100644 --- a/provision/modules/desktop/peripherals.nix +++ b/provision/modules/desktop/peripherals.nix @@ -9,7 +9,11 @@ in { pySVS # control SVS subwoofers from the command-line (pkgs.writeScriptBin "sv" '' #!/bin/sh - pySVS 54:B7:E5:57:1A:7B --volume="$1" + pySVS 54:B7:E5:57:1A:7B --volume="$1" && echo "$1" > /tmp/svs + '') + (pkgs.writeScriptBin "svv" '' + #!/bin/sh + pySVS 54:B7:E5:57:1A:7B --volume=A | grep -oP "(?<=VOLUME': )-?\\d+" > /tmp/svs '') opensc # Open source smart card tools and middleware pcsc-tools # Tools are used to test a PC/SC drivers From a71fb05600fed201d4a4d965c036c63c2dc5e73f Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Sun, 10 Nov 2024 22:38:09 -0800 Subject: [PATCH 26/29] update nixos and apply needed fixes. Includes GNOME 47! --- provision/flake.lock | 26 +++++++++---------- provision/hosts/default/default.nix | 2 +- provision/modules/gaming/emulation.nix | 2 +- provision/modules/programs/kitty.nix | 2 +- provision/overlays/default.nix | 2 +- provision/pkgs/sudachi/default.nix | 21 +++++++++------ provision/pkgs/sudachi/remove_agx.patch | 16 ++++++++++++ provision/pkgs/{yuzu.nix => yuzu/default.nix} | 26 +++++++++++++++++++ provision/pkgs/yuzu/remove_agx.patch | 16 ++++++++++++ 9 files changed, 88 insertions(+), 25 deletions(-) create mode 100644 provision/pkgs/sudachi/remove_agx.patch rename provision/pkgs/{yuzu.nix => yuzu/default.nix} (90%) create mode 100644 provision/pkgs/yuzu/remove_agx.patch diff --git a/provision/flake.lock b/provision/flake.lock index 7509496c..aef575b4 100644 --- a/provision/flake.lock +++ b/provision/flake.lock @@ -105,11 +105,11 @@ ] }, "locked": { - "lastModified": 1725831139, - "narHash": "sha256-9syY5nEehCswE8AMcjpUO4T0iX9nrNbzq69Kqcs92L0=", + "lastModified": 1731235328, + "narHash": "sha256-NjavpgE9/bMe/ABvZpyHIUeYF1mqR5lhaep3wB79ucs=", "owner": "nix-community", "repo": "home-manager", - "rev": "8a175a89137fe798b33c476d4dae17dba5fb3fd3", + "rev": "60bb110917844d354f3c18e05450606a435d2d10", "type": "github" }, "original": { @@ -121,11 +121,11 @@ "jovian-nixos": { "flake": false, "locked": { - "lastModified": 1725600800, - "narHash": "sha256-wst7p3RZ9kZUNzN22d27wU8YSBB7Grlx6Q03A7boRaU=", + "lastModified": 1731227601, + "narHash": "sha256-aGUQ6W/Oxd9xjH9RQbnUtC61sTK2fWlKr+J7kavT/RQ=", "ref": "development", - "rev": "2d050e65a71e02a1f19d1a35c086bd2e3dfb2cdb", - "revCount": 918, + "rev": "7691d0ac1deb6ac7482c5a22fe1a14a34ca608b0", + "revCount": 1019, "type": "git", "url": "https://github.com/Jovian-Experiments/Jovian-NixOS" }, @@ -144,11 +144,11 @@ ] }, "locked": { - "lastModified": 1727464323, - "narHash": "sha256-XhiLvnM95aNpRm3qJ9hsVV/prin4GVapn4snMN4Ol6k=", + "lastModified": 1730453870, + "narHash": "sha256-d+kIgz4BvTXb7emjSFV3zjNydGmLUmuluQjdBb51R9o=", "owner": "nix-community", "repo": "NixOS-WSL", - "rev": "4aef94d5afb4a791e5e9a3ee844c68ad01f54a14", + "rev": "adb6bc4b661a43328752b4575be4968a4990c033", "type": "github" }, "original": { @@ -175,11 +175,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1725634671, - "narHash": "sha256-v3rIhsJBOMLR8e/RNWxr828tB+WywYIoajrZKFM+0Gg=", + "lastModified": 1731139594, + "narHash": "sha256-IigrKK3vYRpUu+HEjPL/phrfh7Ox881er1UEsZvw9Q4=", "owner": "nixos", "repo": "nixpkgs", - "rev": "574d1eac1c200690e27b8eb4e24887f8df7ac27c", + "rev": "76612b17c0ce71689921ca12d9ffdc9c23ce40b2", "type": "github" }, "original": { diff --git a/provision/hosts/default/default.nix b/provision/hosts/default/default.nix index f21acec4..91659a5d 100644 --- a/provision/hosts/default/default.nix +++ b/provision/hosts/default/default.nix @@ -1,7 +1,7 @@ { config, pkgs, user, lib, inputs, ... }: { nix = { - package = pkgs.nixFlakes; + package = pkgs.nixVersions.stable; extraOptions = "experimental-features = nix-command flakes"; settings.auto-optimise-store = true; gc = { diff --git a/provision/modules/gaming/emulation.nix b/provision/modules/gaming/emulation.nix index 8e9dd597..e27a8739 100644 --- a/provision/modules/gaming/emulation.nix +++ b/provision/modules/gaming/emulation.nix @@ -7,7 +7,7 @@ in { environment.systemPackages = with pkgs; [ ryujinx # Fuck Nintendo! sudachi # Nintendo Switch emulator written in C++. - yuzu # Fuck Nintendo! + #yuzu # Fuck Nintendo! dolphin-emu # GameCube and Wii emulator. ppsspp # PSP emulator. mgba # Game Boy Advance emulator. diff --git a/provision/modules/programs/kitty.nix b/provision/modules/programs/kitty.nix index 4a8071a9..a56ecb7e 100644 --- a/provision/modules/programs/kitty.nix +++ b/provision/modules/programs/kitty.nix @@ -11,7 +11,7 @@ in { programs.kitty = { enable = true; - theme = "Gruvbox Dark"; + themeFile = "GruvboxMaterialDarkHard"; font.name = "JetBrainsMono Nerd Font"; shellIntegration.mode = "no-cursor"; settings = { diff --git a/provision/overlays/default.nix b/provision/overlays/default.nix index 1abcece9..e1b3413c 100644 --- a/provision/overlays/default.nix +++ b/provision/overlays/default.nix @@ -7,5 +7,5 @@ final: prev: { pySVS = final.callPackage ../pkgs/pySVS.nix {}; ryujinx = final.callPackage ../pkgs/ryujinx/default.nix {}; sudachi = final.qt6.callPackage ../pkgs/sudachi/default.nix {}; - yuzu = final.libsForQt5.callPackage ../pkgs/yuzu.nix {}; + yuzu = final.libsForQt5.callPackage ../pkgs/yuzu/default.nix {}; } diff --git a/provision/pkgs/sudachi/default.nix b/provision/pkgs/sudachi/default.nix index 2bf9f8e9..54efb9e8 100644 --- a/provision/pkgs/sudachi/default.nix +++ b/provision/pkgs/sudachi/default.nix @@ -59,7 +59,10 @@ stdenv.mkDerivation (finalAttrs: { stripRoot = false; }; - patches = [ ./sdl2_fix.patch ]; + patches = [ + ./remove_agx.patch + ./sdl2_fix.patch + ]; nativeBuildInputs = [ cmake @@ -143,13 +146,7 @@ stdenv.mkDerivation (finalAttrs: { # making the build fail, as that path does not exist dontFixCmake = true; - preConfigure = '' - # see https://github.com/NixOS/nixpkgs/issues/114044, setting this through cmakeFlags does not work. - cmakeFlagsArray+=( - "-DTITLE_BAR_FORMAT_IDLE=${finalAttrs.pname} | ${finalAttrs.version} (nixpkgs) {}" - "-DTITLE_BAR_FORMAT_RUNNING=${finalAttrs.pname} | ${finalAttrs.version} (nixpkgs) | {}" - ) - + prePatch = '' # Copy suyu externals rm -R externals/ cp -R ${suyu}/externals . @@ -157,6 +154,14 @@ stdenv.mkDerivation (finalAttrs: { # replace "SUYU" with "SUDACHI" in externals cmake args chmod u+rw -R externals/ grep -rl SUYU | xargs sed -i 's/SUYU/SUDACHI/g' + ''; + + preConfigure = '' + # see https://github.com/NixOS/nixpkgs/issues/114044, setting this through cmakeFlags does not work. + cmakeFlagsArray+=( + "-DTITLE_BAR_FORMAT_IDLE=${finalAttrs.pname} | ${finalAttrs.version} (nixpkgs) {}" + "-DTITLE_BAR_FORMAT_RUNNING=${finalAttrs.pname} | ${finalAttrs.version} (nixpkgs) | {}" + ) # provide pre-downloaded tz data mkdir -p build/externals/nx_tzdb diff --git a/provision/pkgs/sudachi/remove_agx.patch b/provision/pkgs/sudachi/remove_agx.patch new file mode 100644 index 00000000..e6c5f535 --- /dev/null +++ b/provision/pkgs/sudachi/remove_agx.patch @@ -0,0 +1,16 @@ +Submodule externals/Vulkan-Utility-Libraries contains modified content +diff --git a/externals/Vulkan-Utility-Libraries/include/vulkan/vk_enum_string_helper.h b/externals/Vulkan-Utility-Libraries/include/vulkan/vk_enum_string_helper.h +index 9d2af46..bb490ac 100644 +--- a/externals/Vulkan-Utility-Libraries/include/vulkan/vk_enum_string_helper.h ++++ b/externals/Vulkan-Utility-Libraries/include/vulkan/vk_enum_string_helper.h +@@ -3478,8 +3478,8 @@ static inline const char* string_VkDriverId(VkDriverId input_value) { + return "VK_DRIVER_ID_MESA_NVK"; + case VK_DRIVER_ID_IMAGINATION_OPEN_SOURCE_MESA: + return "VK_DRIVER_ID_IMAGINATION_OPEN_SOURCE_MESA"; +- case VK_DRIVER_ID_MESA_AGXV: +- return "VK_DRIVER_ID_MESA_AGXV"; ++ //case VK_DRIVER_ID_MESA_AGXV: ++ // return "VK_DRIVER_ID_MESA_AGXV"; + default: + return "Unhandled VkDriverId"; + } diff --git a/provision/pkgs/yuzu.nix b/provision/pkgs/yuzu/default.nix similarity index 90% rename from provision/pkgs/yuzu.nix rename to provision/pkgs/yuzu/default.nix index 4d157a39..41bfdec6 100644 --- a/provision/pkgs/yuzu.nix +++ b/provision/pkgs/yuzu/default.nix @@ -37,6 +37,17 @@ , gnutar , nx_tzdb }: + +let + suyu = fetchFromGitea { + domain = "git.suyu.dev"; + owner = "suyu"; + repo = "suyu"; + rev = "ee365bad9501c73ff49936e72ec91cd9c3ce5c24"; + hash = "sha256-vw9VcSbCaG4MS0PL/fJ73CDALLbd3n0CBT7gkyp5hRc="; + fetchSubmodules = true; + }; +in stdenv.mkDerivation(finalAttrs: { pname = "yuzu"; @@ -51,6 +62,10 @@ stdenv.mkDerivation(finalAttrs: { fetchSubmodules = true; }; + patches = [ + ./sdl2_fix.patch + ]; + nativeBuildInputs = [ cmake glslang @@ -144,6 +159,17 @@ stdenv.mkDerivation(finalAttrs: { "--prefix LD_LIBRARY_PATH : ${vulkan-loader}/lib" ]; + prePatch = '' + # Copy suyu externals + rm -R externals/ + cp -R ${suyu}/externals . + + # replace "SUYU" with "YUZU" in externals cmake args + chmod u+rw -R externals/ + grep -rl SUYU | xargs sed -i 's/SUYU/YUZU/g' + + ''; + preConfigure = '' # see https://github.com/NixOS/nixpkgs/issues/114044, setting this through cmakeFlags does not work. cmakeFlagsArray+=( diff --git a/provision/pkgs/yuzu/remove_agx.patch b/provision/pkgs/yuzu/remove_agx.patch new file mode 100644 index 00000000..e6c5f535 --- /dev/null +++ b/provision/pkgs/yuzu/remove_agx.patch @@ -0,0 +1,16 @@ +Submodule externals/Vulkan-Utility-Libraries contains modified content +diff --git a/externals/Vulkan-Utility-Libraries/include/vulkan/vk_enum_string_helper.h b/externals/Vulkan-Utility-Libraries/include/vulkan/vk_enum_string_helper.h +index 9d2af46..bb490ac 100644 +--- a/externals/Vulkan-Utility-Libraries/include/vulkan/vk_enum_string_helper.h ++++ b/externals/Vulkan-Utility-Libraries/include/vulkan/vk_enum_string_helper.h +@@ -3478,8 +3478,8 @@ static inline const char* string_VkDriverId(VkDriverId input_value) { + return "VK_DRIVER_ID_MESA_NVK"; + case VK_DRIVER_ID_IMAGINATION_OPEN_SOURCE_MESA: + return "VK_DRIVER_ID_IMAGINATION_OPEN_SOURCE_MESA"; +- case VK_DRIVER_ID_MESA_AGXV: +- return "VK_DRIVER_ID_MESA_AGXV"; ++ //case VK_DRIVER_ID_MESA_AGXV: ++ // return "VK_DRIVER_ID_MESA_AGXV"; + default: + return "Unhandled VkDriverId"; + } From bad66ee29ee5b51bd4a0e6513da82ca375a6977e Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Sun, 10 Nov 2024 22:59:43 -0800 Subject: [PATCH 27/29] update extensions for gnome 47 --- provision/overlays/default.nix | 2 +- provision/overlays/focus-changer.nix | 12 ------------ .../default.nix} | 4 ++++ .../version.patch | 17 +++++++++++++++++ provision/pkgs/gnome-set-panel-monitor.nix | 4 ++-- 5 files changed, 24 insertions(+), 15 deletions(-) delete mode 100644 provision/overlays/focus-changer.nix rename provision/pkgs/{gnome-fullscreen-to-empty-workspace.nix => gnome-fullscreen-to-empty-workspace/default.nix} (96%) create mode 100644 provision/pkgs/gnome-fullscreen-to-empty-workspace/version.patch diff --git a/provision/overlays/default.nix b/provision/overlays/default.nix index e1b3413c..3ad623e4 100644 --- a/provision/overlays/default.nix +++ b/provision/overlays/default.nix @@ -1,7 +1,7 @@ final: prev: { advcpmv = final.callPackage ../pkgs/advcpmv.nix {}; ftw = final.callPackage ../pkgs/ftw.nix {}; - gnome-fullscreen-to-empty-workspace = final.callPackage ../pkgs/gnome-fullscreen-to-empty-workspace.nix {}; + gnome-fullscreen-to-empty-workspace = final.callPackage ../pkgs/gnome-fullscreen-to-empty-workspace/default.nix {}; gnome-set-panel-monitor = final.callPackage ../pkgs/gnome-set-panel-monitor.nix {}; nx_tzdb = final.callPackage ../pkgs/nx_tzdb.nix {}; pySVS = final.callPackage ../pkgs/pySVS.nix {}; diff --git a/provision/overlays/focus-changer.nix b/provision/overlays/focus-changer.nix deleted file mode 100644 index 1d78c3cd..00000000 --- a/provision/overlays/focus-changer.nix +++ /dev/null @@ -1,12 +0,0 @@ -self: super: { - gnomeExtensions = super.gnomeExtensions // { - focus-changer = super.gnomeExtensions.focus-changer.overrideAttrs (old: { - src = super.fetchFromGitHub { - owner = "martinhjartmyr"; - repo = "gnome-shell-extension-focus-changer"; - rev = "4de5bc334a1624fd8eb22203ab229a6045320923"; - sha256 = "sha256-hvLDsLQl7+Flrlg26HNIuwLnWqpB09ZO1xNHRms22g0="; - }; - }); - }; -} diff --git a/provision/pkgs/gnome-fullscreen-to-empty-workspace.nix b/provision/pkgs/gnome-fullscreen-to-empty-workspace/default.nix similarity index 96% rename from provision/pkgs/gnome-fullscreen-to-empty-workspace.nix rename to provision/pkgs/gnome-fullscreen-to-empty-workspace/default.nix index 2adc694e..8d64645f 100644 --- a/provision/pkgs/gnome-fullscreen-to-empty-workspace.nix +++ b/provision/pkgs/gnome-fullscreen-to-empty-workspace/default.nix @@ -11,6 +11,10 @@ stdenv.mkDerivation { hash = "sha256-S9mvODQqOBCmA+L1TBJm/c1v5Y+qVKuFpQf799LEwcI="; }; + patches = [ + ./version.patch + ]; + installPhase = '' runHook preInstall mkdir -p "$out/share/gnome-shell/extensions/fullscreen-to-empty-workspace@aiono.dev" diff --git a/provision/pkgs/gnome-fullscreen-to-empty-workspace/version.patch b/provision/pkgs/gnome-fullscreen-to-empty-workspace/version.patch new file mode 100644 index 00000000..bae98012 --- /dev/null +++ b/provision/pkgs/gnome-fullscreen-to-empty-workspace/version.patch @@ -0,0 +1,17 @@ +diff --git a/src/metadata.json b/src/metadata.json +index 66a2ea3..a98e00c 100644 +--- a/src/metadata.json ++++ b/src/metadata.json +@@ -4,8 +4,9 @@ + "url": "https://github.com/onsah/fullscreen-to-new-workspace", + "uuid": "fullscreen-to-empty-workspace@aiono.dev", + "shell-version": [ +- "46" ++ "47" + ], + "version": 15, + "settings-schema": "org.gnome.shell.extensions.fullscreen-to-empty-workspace" +-} +\ No newline at end of file ++} ++ diff --git a/provision/pkgs/gnome-set-panel-monitor.nix b/provision/pkgs/gnome-set-panel-monitor.nix index 7e5cad82..c79326b3 100644 --- a/provision/pkgs/gnome-set-panel-monitor.nix +++ b/provision/pkgs/gnome-set-panel-monitor.nix @@ -7,8 +7,8 @@ stdenv.mkDerivation { src = fetchFromGitHub { owner = "starr-dusT"; repo = "gnome-set-panel-monitor"; - rev = "62d1a7e7ed83d56b33e32f1ad948c99a559b6dbd"; - hash = "sha256-NB/DycA/VxIeFQk2l0MW7G5VVdJI/Zemy2l28VZx2Cc="; + rev = "89204ab29a4872c201f8185cee758384be073a73"; + hash = "sha256-MJVUjvrEe5b38MkRPt96NOH3cz1FzjoQWTPNtRFRVck="; }; installPhase = '' From 4d14699b8da53908ad2db01456cd07fcabb6534d Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Sun, 10 Nov 2024 23:12:56 -0800 Subject: [PATCH 28/29] fix yuzu and kitty theme --- provision/modules/gaming/emulation.nix | 2 +- provision/modules/programs/kitty.nix | 2 +- provision/pkgs/yuzu/default.nix | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/provision/modules/gaming/emulation.nix b/provision/modules/gaming/emulation.nix index e27a8739..8e9dd597 100644 --- a/provision/modules/gaming/emulation.nix +++ b/provision/modules/gaming/emulation.nix @@ -7,7 +7,7 @@ in { environment.systemPackages = with pkgs; [ ryujinx # Fuck Nintendo! sudachi # Nintendo Switch emulator written in C++. - #yuzu # Fuck Nintendo! + yuzu # Fuck Nintendo! dolphin-emu # GameCube and Wii emulator. ppsspp # PSP emulator. mgba # Game Boy Advance emulator. diff --git a/provision/modules/programs/kitty.nix b/provision/modules/programs/kitty.nix index a56ecb7e..87dfa72a 100644 --- a/provision/modules/programs/kitty.nix +++ b/provision/modules/programs/kitty.nix @@ -11,7 +11,7 @@ in { programs.kitty = { enable = true; - themeFile = "GruvboxMaterialDarkHard"; + themeFile = "gruvbox-dark"; font.name = "JetBrainsMono Nerd Font"; shellIntegration.mode = "no-cursor"; settings = { diff --git a/provision/pkgs/yuzu/default.nix b/provision/pkgs/yuzu/default.nix index 41bfdec6..2645484b 100644 --- a/provision/pkgs/yuzu/default.nix +++ b/provision/pkgs/yuzu/default.nix @@ -63,7 +63,7 @@ stdenv.mkDerivation(finalAttrs: { }; patches = [ - ./sdl2_fix.patch + ./remove_agx.patch ]; nativeBuildInputs = [ From bd5a3f50ee93cfc4f4983016d21c52249c178e8b Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Mon, 11 Nov 2024 15:14:42 -0800 Subject: [PATCH 29/29] use gnome by default --- provision/hosts/bulwark/steam-deck.nix | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/provision/hosts/bulwark/steam-deck.nix b/provision/hosts/bulwark/steam-deck.nix index 5f4c7f3f..9fde8111 100644 --- a/provision/hosts/bulwark/steam-deck.nix +++ b/provision/hosts/bulwark/steam-deck.nix @@ -8,13 +8,11 @@ steam.desktopSession = "gnome"; steam.enable = true; steam.user = "${user}"; - steam.autoStart = true; + steam.autoStart = false; devices.steamdeck.enable = true; devices.steamdeck.autoUpdate = true; }; - services.xserver.displayManager.gdm.enable = lib.mkForce false; - environment.systemPackages = with pkgs; [ jupiter-dock-updater-bin # Binary package for updating firmware on Jupiter Dock, a hardware accessory for certain laptops. steamdeck-firmware # Firmware package for Valve's Steam Deck, a handheld gaming device.