From 80cd767e4ae5b488fae5fe3fa812cb7ebf7bc3a8 Mon Sep 17 00:00:00 2001 From: Jacob Kiers Date: Wed, 15 Feb 2023 23:52:17 +0100 Subject: [PATCH] Initial commit Signed-off-by: Jacob Kiers --- cloudron-headscale/.dockerignore | 7 +++ cloudron-headscale/.gitignore | 5 ++ cloudron-headscale/CloudronManifest.json | 17 ++++++ cloudron-headscale/Dockerfile | 19 +++++++ cloudron-headscale/README.md | 5 ++ cloudron-headscale/logo.png | Bin 0 -> 50413 bytes cloudron-headscale/start.sh | 50 ++++++++++++++++++ .../supervisor-headscale-server.conf | 10 ++++ 8 files changed, 113 insertions(+) create mode 100644 cloudron-headscale/.dockerignore create mode 100644 cloudron-headscale/.gitignore create mode 100644 cloudron-headscale/CloudronManifest.json create mode 100644 cloudron-headscale/Dockerfile create mode 100644 cloudron-headscale/README.md create mode 100644 cloudron-headscale/logo.png create mode 100755 cloudron-headscale/start.sh create mode 100644 cloudron-headscale/supervisor-headscale-server.conf diff --git a/cloudron-headscale/.dockerignore b/cloudron-headscale/.dockerignore new file mode 100644 index 0000000..bb31638 --- /dev/null +++ b/cloudron-headscale/.dockerignore @@ -0,0 +1,7 @@ +.dockerignore +.git +.gitignore +docker-compose.yml +node_modules +helpers/* +runner/* diff --git a/cloudron-headscale/.gitignore b/cloudron-headscale/.gitignore new file mode 100644 index 0000000..c576c17 --- /dev/null +++ b/cloudron-headscale/.gitignore @@ -0,0 +1,5 @@ +.env +runner/.env +secrets.txt +.tags +.vscode/* diff --git a/cloudron-headscale/CloudronManifest.json b/cloudron-headscale/CloudronManifest.json new file mode 100644 index 0000000..6abb80a --- /dev/null +++ b/cloudron-headscale/CloudronManifest.json @@ -0,0 +1,17 @@ +{ + "version": "0.0.1", + "id": "com.github.juanfont.headscale", + "icon": "file://logo.png", + "healthCheckPath": "/", + "httpPort": 8000, + "addons": { + "localstorage": {} + }, + "manifestVersion": 2, + "website": "https://github.com/juanfont/headscale", + "title": "Headscale", + "author": "Headscale developers", + "tagline": "Self-hosted tailscale control plane", + "tags": [ "golang", "vpn", "wireguard" ], + "documentationUrl": "https://github.com/juanfont/headscale/tree/main/docs" +} diff --git a/cloudron-headscale/Dockerfile b/cloudron-headscale/Dockerfile new file mode 100644 index 0000000..dc0b842 --- /dev/null +++ b/cloudron-headscale/Dockerfile @@ -0,0 +1,19 @@ +FROM cloudron/base:4.0.0@sha256:31b195ed0662bdb06a6e8a5ddbedb6f191ce92e8bee04c03fb02dd4e9d0286df + +ENV HS_VERSION 0.20.0 +EXPOSE 8000 + +RUN curl --proto '=https' --tlsv1.2 -sSfL \ + https://github.com/juanfont/headscale/releases/download/v${HS_VERSION}/headscale_${HS_VERSION}_linux_amd64 \ + -o /bin/headscale \ + && chmod +x /bin/headscale + +RUN sed -e 's,^logfile=.*$,logfile=/run/supervisord.log,' -i /etc/supervisor/supervisord.conf +COPY supervisor-headscale-server.conf /etc/supervisor/conf.d/ + + +COPY start.sh /app/pkg/ + +WORKDIR /app/data + +CMD [ "/app/pkg/start.sh" ] diff --git a/cloudron-headscale/README.md b/cloudron-headscale/README.md new file mode 100644 index 0000000..a0b2f10 --- /dev/null +++ b/cloudron-headscale/README.md @@ -0,0 +1,5 @@ +# Cloudron Headscale + +This is the repository to create a headscale server for cloudron. + + diff --git a/cloudron-headscale/logo.png b/cloudron-headscale/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8463e5ec2bde6a8115e00567a4a040c6434d12ab GIT binary patch literal 50413 zcmeEuWn7bQ{O%Mi1d)&qMMRL6MnV+C(TpAqk|U(0K?Df}snMVyAhD67OOWmw(g@Ne z-R#`^{m*%O-k;CsJTKUk?RoC_#`V3v*G-t3iaZGs9T5ZqA%VV@g+U_VD?a`y4#?In?7`Ly=szVdmX1Gu1a% zG*t>B?>ArJoOq z9yny)oIBjy+RjyYa@TravZ``WwDC+jVhDa4i~<7r+?Vf0@ZYnyydDSU>Aj-! z+&qry^rYeTsogn!raX+h;aJ7yGpSnvqkN6&>XhRZ^>uZrJKs3t6_DT#f0?h)Ja0&x zN@0Zx$FszKjAeardUf4&QTfNDqaBLbMb=Uf0&$SR`!{W;pZiPXM*{F2k5^Y9MQ zAOXn_fkOvyy{RAspYwS6e~kmBO)R?q`x_t@{7(pY6R7p|3Pec$|9la@z5%0fWj!cI zYn?2JEo|V~YDe0!CKxQI0N+c&zylM%vN#wLlmE>Mj@Z(@0?`hF5PxmZLt0E$OmSS# z?L0(=*6v0t`pbIa7b;kK4x8Col6~IcC26!z^|3m%_C8I%H0UEa1vW zrD$X?PAADQ9`@ZBOs)-omszZ>6C-5ZHeP5_-;xIc`DcO;t0vQA##bPo&wmo)1Lyzy zq4vGT`gK8e6eg6MOdXEM?y-uu=2i$>p~q2@4Q4v{T`nC#ng|9a>MBEFl@0OVjcXQk z)L$Mo2pWh&AXus^??(4~2{~D8w%^D}FCq+)^vp#YzkW#j8iiruzMIjIw^lZSL-2x> zt;4x^;~{wNEJE)SL4M#q`P5l{ryBkVcasV2$WVdyOQ?RhaXy{=QQj3rAPQiAw-gVBQW!+|cY zIMy(%cy*`GXblwgwp-va)JzIm3MaLBTfZ<(v^V#%R;_+mV!?GtlP?Rz|Cz{> za)sK*=9N z3n>=G@-bh-(`^s526gPOty-&da<(PY5DPL=IQHO_sT3MDQQFj0R7=at_@7HlNF*|U z)Rt0i)K-YNg+2WJ{Q-DwC5RDeX=#j%j7zx9&CSwGN}njFkz?&G_sUFI-gg~)KR-WD z&v64@mp{#Xh1vxy^EK#YPflI~MaAwA68a&84i}Y0tHpft706rZn@vZ`2#uNUBlobB$A>y@=I6kk33&@>s>*XR0x*!^6WA6cjpWgQWCy;V_ZN zg%{uMvp6xVPbO~XYZq`ThUTEHUnDGh2EQ+F^c_ITT^rW#tjksiIL%9bEE4a zdCM+;fSE8}IZoGprJT(gzOX7M$)Ca%w+|b4+$>&r&2mfby@K5PaMn|m{x6XUMkiYJ zy9IF8@GSPo@AkcC-H2L zA4`Ks(!b~BTVuD9NQ&C1HEtn{$9w(dr9(+k_ZH5~J~4W)qu z=-&<4o^KQH6%i-t+<-mhPf_agEFqsn>gr$!yCX!H3vv701(Imt{@4}P(0uY>7PGJ_ zE$(59q$)}(J50&&%m_*xu5@}a{KF1%z(tb8cEQ8LlP>LlIaTcfp6p~e_9h*K!KS5s z{h?6rsO7k#+`@R~b|3KnZS))&t zQv;?qUS`E>Q1$lW)NRa-yE}YAS9a*OM|XW#t>hm`DHVn-0oh_{Hq%4JXZNg zDD8rW4p##&(woqtZZ)9*Z=IbTlCb0!)xB{ z%qIz0^^n}w*f4Aavrzsb8mZhP{PKDvv-IUoJ2TjA&;E2t@IAiay5So|OH~la$g`{e zh}hmHGg)zj%ICzC*!1&Gm}=g;rJyL%&fQI?<=vA=AM<2sBa4rauGj2Ir>(?NYR z@3NwEimJb z|9oV=bLWoKf`Fa*!uD@V7L#32p4E6_YzyvCIwUYj3Jhi&6iP%s;U`M z_6iMbM_7r|85a8(T1H7p$%~~FM<%e9b3cQ;4>$NZ-JmX?B%v=Ce*gacIK#*JPxH0e zBe`F3J}z#5v|l-CbT&FKc4aFjRM=0tuMB*%pR7o_Jw~hpFj9Q-Ge}BbI4sl6$LXoK z^cFQ7gZ;S+L+QKE_K2gQT-lE%OVjce*Wxt}w`9P!vmank36Q@5dhuhWg}^3BrH<$R zcE+ODa|SE1sI%*<&4VmY1qAl`o^3OL@zu^=Y@rQnzYkI~2r=7$MK);T`z$;&O6qiFAxhfauyTvXU_yl==<(yn z{yP!I5<9;r`X%;0L3f83gnR(d6oMeQ6;|(m>i^vRyL{P81`{*v)HfTBHD!P@oWTkk zaM=fHjb+|yc8Um8;yvOK6}WV2a%qXwT7+<69WuScMt zLEN=tV{4c%du~6yRma%Z?QcgkEH4i2KJ-n&~x%#+~d}E74co+Wv;K zhl8C80+ApJy^ht{`NyQ)M05m>O^6p<7Y<1t#%wEX(=^8KyaZ4hc_HiSnY zI?CETBzIc=eHNKH26con_;6oepI4(T1mcs$Ry*chwm_a%&5~ifOMXkC+pBe%{v#F2 zO$~nd;+C{TtU)RznYyQ8?`>-Xwu`==p7UAUnZIhfgiS~v*746#vK1STTX|o-det*Db#O*8tscW_N${tnq{RQc-Cyv5@mfU{38d-5 zI+Lh)bznt7==?lWXHbSAN$_{aQ4Qu!b3Uw#F6q`Xa!S53!dzr6ZZ7^=PR_kgY+M#o zr7jy?0s|kcvMPq|x}EN?R?hlO+9^IHQ9rKFVukjQ9)pp9v|6`6q!|3-8`LH$2n34DSPP_5DKiBpij!g#>K<4}edox7174rU` zzBs7YFygqQ(A^8WJqkxK#wARj*dEW=NH+SIyRC$*^q^8-RovGKxPrQ*=gakXh;aB$H0e4ZL$kySS6K{H_^@Id2>HJuEf z-LSl9VIR4Xk$+k2;!g9wq;Y%Fyj)x(|BXmWNcoyB)W-(a_vs9IPqX_o8Lr_Pw~Xib z5z)`H+_ZM4(i`68=^*Xv1FASQxd zkcR3F4cEhP0dalh7xN0JpK7G&n1YNNS$47@n3EY}JIiHoo@n@{VT$aUUBX;BL49%Y+qIFr!9n%CB-g}D zY>fd=E~zj*(xBc8RPaB4{*-6({GOXDzxJKR&2csA?aq8FZ{zvy>A`yN3mMs-7~xg6 z>?HyCx@aUdH8n^e(?dh0AofanA12aFL2_Ai{@aGLG5-sly;8f0a}y)@sO9_{2a80I_IW3~OV_bywWGg0T=u|0B^QpIvSGo>LTbWkC_tUCrihuHPw4a-; zt?ipPZ$OEBcC@{{vht%-wS;Y`c{`p{r{Q=$;^f40Pqj=WZ%RUkvp?uo(^AHw^U40| zF!;PTKoa2U-6YVi)uXV4YzE(^_S;LD?Fhd=SU$w@bGbi*^!=Q?^l5aGUUG{FL-t5J zv;R3jA33p=i0MrD(=qn&%q;n+>oRYT|NTjwt%E@3E`_X%##{}{??k1!EVX18I%#Hb8AuJY63{8x|Dp zeR;Vwlq%}fEPHKen>&V;U*OOsK5&@+RU__VTQya5@ZFg}QF^u8yRE5ek(qZd*Zw+i zKp;ohfGfYxgCkXp+^O<^4rQvW^iBl>fbm`uLz%|hzqzqeF5tECy9A&x8&noMythlx z(!iA_1ONnl;>`A|akYH6IX^$YUewr7Tx_y+RpPDHv`>-V(^HU-Xz1y?p=^2bmc%E( z24=k0xy$AR9IP@&Ha0dIFD4tI4qK8O*^x|=UTY&9E{H;GZ|B3kS39FR#*AXlvcHu{ zAZj=|K1jrCABU+VIFUm4dD`W5`1_$!7aMWfdOvgjIRkOGwUO2cYQ^j!xLYy?n+;o? zz#zbO46bEx6Ii~prwPH&e?e3@J736if<2t8Tip3?$Hs=8%2TK>|LPGar5aCq9fvNE zi0L1xPu=Fi!ovJ?>FM?39^VwHGhHZd{ZGQ{urgcur8h1>F*8Q3B3M?<5uwsa#%rlBC!O3pdg=N ze3yh0(2_0yO5DHs{=RO@w4Rb=duib;?(%5SIf?ijm8c;CFxt8?ZX#8@Z>By;{2zcG z7H!5OYoC%Psel9dpKVt5*3E8Asu}kLdvDhtsbom?))GR#qJ`8TSa=+(hRf-QwNN3^ zMbeq808Tc;H+vbmH(bV_SETvG7dYs8xgknV?BsWe`B;&0e?O_;v*F@}_9$RcDEYi6 zP;!Cd^OeCY#97bh-a6TYgarSC0^{u3x1%-cZcVazbVv&2Q$}WHe~>5GCuXI~%+7%U z_^l2-+H*qb6GEDTtiM1Cdo3&CZTC+eO;%uDJIL=XX~eOnFUVyW$FXaB(%tqwKX#g| z7~_B^E^|>50jH@R@p`^Aoj6IMsHm8$lBQ58YUBcqiR)er3%kWeFe~kn>323cdtIiu zD{r;8t?>56<=M7z)!PRP>=r}YLqjo1;auNm&n#8q>?iSCYH4MqC&>g+%cWz5q^ywp z`3<_%*-|dLNah+0i~rCz*pz+zs;3b#&47x-mzn^<0V6s+h*IWX111Ej=9mTaznz74 z#`b78hi|a8!?a9Dk`q-t|h|cNhr&18@=N% zC%d&nT82u~#0TpNdBEL*@Bul^HWXr)bD2)>!3k;~Xd~%sMNHjBkM?|YUNSF{{i#;2 zY6cG_5$%2nuu{+6?|+MK+MOnsm6cKR8Yvw~8a0{+n^x7;`G95a+^G+c;4{SCrsnZE zUCmwBK|0!5>dG^;J2sr;geDr)%=8qT29Zi7rluMc#Q#lJj$t*W0r2j7SruZM1p;YE zJ0)#`N09s4%NQpXB9YL>f^V2RK?<&3n!Itg>4BW_UB}1ot{0Rgv-~?)AG5Nw#2!2+ zwR3eXS7U$UUKJf3-4m%5HFWU<@6?^W?otOGvLFlRfpX)y!`4VW`ePXv;?0}C0F@bR zPeMQU+I@08Ki=6}?iZk?fv9<`NkCHa8b{gB=VQ$EU0>+%4u)-?{#mAer1JgMq8i0x z5XzIs$>L$bFa7`zjVXH{lK0vez>W z#hLw%|9~!y-dZLj_$e#U1{d9q?p7@O6QIC~X!FzMK6|EhRT9|HOD(2Xe|o;-SG z|A*C?3?=N+kN{wpIh)5)(hiq;oaW}{dWRaZthDs>u@ax(3;T8fR00z8HJL9m)EWr; za4`)HjdkC`8u$H`K`?JV;yho}t;vd6zq3t+?9!P=-^R1)?H*?f!V0aYm3|-`Km2_K zJoJDe02BJ!+4pC1Dk+j0QE#U~Fj!MlM`@UAc~|Naf5cuaGX9dV8 zfY#9M1=FR4e8jWf+mbIPk|Q!#fbp>>bdPhH17dV-blsS1_+>b+vR5?Gd!nF>u|(uo z183^@Z+zO$1qJZD9FtZ{jJzw-&y0Pz3~g5Cc#9(GMw<Tyy|#n5$bm#|#U?;yBq}|6e@zH*b$rmot!F zV$)=3Z;xb*#ni6409*=u*%s3ktp7O2OIk?CZK)>-UU>}?;Hd3?<@f7X=o4<#o7sbG zHxRpZLV1n*k2}(rPZ}~72aLN*LF46$=;NM#BQB~ku8@?IwpKHBXYE@>4_ug}&Nc)N zqYND_P5)3lR^j61EgH?c{2QxUWxL*6$oQ{a`cmE5g@6naP@7i?Da61Ocy(fSR*N+= z&uh2JRo*K|cq!{-*;!sq>5E;jNnakXNNar{2l_!4Vv!o`l&n^aRamTcX9W~#kred8 z0r?B0C{VTPp|q=P&&BOc?_;+vj6W$AM9-f3GgYXgm5Xy z#zZ61XJf3}$}ApydN_MHKe*09%Y7q_HOzhzu!(wi0xRrmK@3)7|BG73PEV)p4D_;x zdwF}8NtmT4jkSOb(R;(w+f(p6A2EPgrtVn1#alQ)3rY5Ok8-1~TTUKYW%#m*)qcDQ zY2sdcf+s0ltLcoBB7>Y!`oj`&A4ZRNH7&bkQu>Am2GnRmk`_s{KYz>rKU#q9(h7&^ zJAyNm>wHjK9jo8sU8oLc3ab= zlw(UAt&vmyNjTRpbyf&Rp)IxkfOkDdzFP}#+NNaAz}A0Q1T8=@ZJjH+VXWfS;+&=( z8?$ycWMS=AvaBhF2^ehpG6@NZ#el!iGl=6vd0tkQxgqI3WXS9tL;Lvt!h)#Z%D0an zc8fwo*|TF<#r)2zZZ%;XRLb}eGCEJ(N@xHBX zK9=MPWDdRd7?0WBc>OG3lc9M-(egG3#G#mKi+Z)L-C{r>yrq;|Px}?a%8}3ws-A>< z^dFZ#Vrx(+d%&EoOA<}kEsc+jRa$gYnG!Da3cNkpT?`JscJ-}tqP-iF9d`g2Lp8b< z%iUa`cyECyxETxsF---5Y~}l1EhZ;}vRSt7$y)K>r8ds`g|Ja(Taqo+CF<6knV6hB z+MLv3r^Gr6ab;_QW(?rLgdL_5TlQ1D09ccIV|e2O0tJ$?d6Xnubsd=+Cy4O}61?39 zzfCj?MuB-(S64e87_KTF0ruVQJVjEYUfN?TmA1Uu{vqV~ol%V<6`ibiwosg+ z46&FdD)lL3%2_xOG|NW%o*gDxBw-&$ab(*~MrL+=Z}53~bXB6?d!wYi$5S^-!?Z$* zj)`e&bMw&!okE^-wGRjz_iu*6Xa#wgU`}p`cJI72%mF8mZw7dmH6~GEu zd$8zzYXECu)t*$q2 zmW2fXV_vF=kxfK%T}C2F;1x*6H?I|DYkSLcwpbUlXXCQGQ-Lt|l1EAB?hnazJf3G` zz?^)ys+X0F-BG1Uo=bo&0rV@lByx>g1h=2fp7epX7-&#%b;Ap;>mwIy&^(%s5xK6<+s2c!It!{*_vONL*w>2fUWiX-;!zyz(k>m%>H4^+-ZZ_o* z(0$lBI4Opi9Xj?}gB^WiD^;dG;4F}LhlE5DFq%jU(78W-ZZ?#)eFkXw3D9&-E*B8s zt^4;vUtj;5+80a}Y%@5*>==P^}+{^96|LC z2$aYLH`{v+(Va~IL>9We1Z}S%Fb)=$n4Sb53jvCvie}NF`1{o*RIaa}op0sR*dV;arso^(oHuhT027KgM125^s?ml5fdAX~*`{knX zrG=H1RSYXJt)UGt1qzr893hah?`O2Oq}_UaTvh$@S6T#|KkI9ITbu3lUEmg9nQA=X z5wD+?-AA|oTb>wV@%tv%&oh0l^GfMD=!WcZ7S#>S%owp#GPGCYHmr8jE%YoSB42#_ z2YAlysp_(=)Al6^_Uv@er6hS~Uri2+!&gsp=cQCbJ;`T}7~5&-=)g!5!dqEZkK6&G zgT{R$Mwv#JZNJuFDr<6OOPW4q#^lzEt z$jKxt4c6VC%gWm6_wz=)Zqw&aY5np{T-?a-WD%fmP;s+_XNpFGj!=C4gNBwG7gf-GKE>dqqU2ONzr*+p!T2Qh z@S2*MI}D=5P77`OdzfPz=dM(KiU7nkG6#7nZd~h*DkxZ=aXIKsKqe#r!WzWB`0I16 zt*wrAZy}I3g-lnALwT-snu#fta*5CPxn`5M2U4`nqZiW4J>t+o7~n{ola(3IJhtXr zBLLfuUQdp9j7jOad}Y~J97-rNFfmaB`VOEA=W6$+US102CNJL(7^P|OKLS>LpQ55} z$e1kcv^m*b^0F+kCI-&R+|@;nPEJ0PkN{g{S)CNSnu31Q*VzL|B_v-S6GbUbDOKHo}l(_;j05~bbNdaYW}-~@d~XQM(dvG+h>3|uCMnU&QS(k!#IVv#Lr5fW+&pCcosb~_%{jY1&K z*-}^EJ}rA=L#7@Vu-D`~_0AG1u0PC}U+NHG(b@ZTXdHi4gQ1H?0tR9svllB>VV^=& zY%2ci!06bpbDyKPf3ao@*u~u3*U%59iL7C?3=WeO3!;@uNjd+#NtepOx~Dv9?^MTR zVri^>_@J5^b9H_Vz%@0bqw)&C*rK*9W7W%-@~0$}MlqoeyN^ zzs9bcOb>E*YR|e>-Vn@p&0gQPYFyMzEW)A#4}R8ZDz&GXmV26PO&m7>2jrbCzw4T( z8J-zhfMiBmaPtay+=6`JbyK^7UCh6e#Y(0gPHf-}n(nS&T`4&qdk{=Ibk_9V^>vKC z>`*=~D@xCU@N#o&J&6Z4WNd!*U%l}t7@pe^S9@7;kP zoG9DB&l;#biF}y%iu?n{fvC7mY3HrGJJQzEFVU@dh{3J>s-xE*b{t6g;?S6+q$Icq zAtazEFGwXF{lV|s>s&Sw*Hl)t_5`5`4>4UIfEnD~A>S&%%IoUheE)n4rYM+^nwHjE zV^NjM3Iz&{4@7+U$KQu2irpQfxb#~3K*gOIF2|vRn5Hx_OpGpf9p3|$jxFZNQR;Q2 zYodd?&h{XFHR6N9`uD^OQGcNlpIi8P0j6E#&+v^LY}THntJVru7KoMoty zhX_-1hO_V(%p{^ZTKFhKZeM{oXWhA49BGD1vQ2)d0F*DLT>CZyZ(~?*wG6mU0jP8y z2J50E-#&gs7M2;h(_d|dj?BRBkR9jt(Ay_zvg&r~wviIy7q$5oHW|O!=jI02mxK(*%55pYTQeBNz1`}sZ zG<&vEWK9}W+mvRa0u{$%y-0KqOlW3A27(k-aeXn+MfNCDPJZWeRA9)LzAM6m2@LVf zmiJb?dEeiYBdZlz{+tJyJp)3SFC`$KDh%d!K6r7JE@qr0@hFv{=7^;qtnR3DXtD(4 zz9TRJ&ao0r#`3Z-YqIRPZr5jmlzV0sT-~33|HY(n;vvxX4y4^l_nP>}7*;2STr3K3 z-l}U4bSID&gA~2AkIcqeB5oWb?Iwj09Aw$MEd~*1x0;$kKpKQo01d9E#tqt6)fL%X z-&A9n6~fq^HsF;6y54LMipO{1+H?WY6qf&77}}2-T!65z4Gb&7J_7ba zh)pMsyq%m3eVgu+g&unS36iNJ$@S*`G&*9v<}}AHCB!>y;kRbMN$^$3Us*#!6GgD@ zyzn?!MIOY(WgPp67^gA8ST~H;BI<>nD;<9+z}6UNqdkw<&mJXT$n{cCU5gyYeBj(H_85o@{8fL zzcDM$N>tFb=ni-Fw)Y?CtGG z$X(<(fDlkeCt=FwN#2Q)w|DKbCsK>leP>n_l9FkY%!h9HBm_&;BbAK0lgA10qB`S)c4;pa@HsV@h=EeiE;sub=WSgaFbJD}JlVaPuksNX@;wKw&F~ zs4Xy*Ew|RnBDOoN&Cvh>9Wb{*;s(A_ZGhH%Vp-2XVGiU_;C8(a>3OdgorlG+0zpd# zka{I_XTty-_~kSOG(cQbw}W5k=#1foY$RfOu}e$_V*mu)dVe2EKBQ^SkzJ0JxjR++ z#oDL`7zkb?*LRH?y<|6e=$r8fl%}2<%vW^XDhRV5g*;ylw9u0=I1mqqWt}?4up%uu zK*$_gSy=&T@$cX7CqrH2*5W#R(3pmXhQPqUZ{Hpa-xKIpi>N5djvw@Jc6PS2vjac9 zye90blhVW2$BI(qllkfZwgbIE@M)Lpp+776EI7MMh3zNe8qjJl;fUC*>({UU-SQ~v z3Ff4Vn5ym|ZFd6m2F0Og#udn4g*3uB?0Z{IFD*t*f>$zQG2~;sA5bDXOynhc+KiX!It~2m!>qXBpi?6 z^4S)Mm-=n;!ne317r=+N0r_uAgY32t=-u|)4Wqqd4>MzE$M<2D(>&haFXk#}nE!kt z!_}RfnD`F#M8HxbS;II^X1u)<<7d%$9?_Hr$m1^08gXaUF3Z{~UqV8yQ4y_Xj*dmW zhYLdSJm256N&7DZ$^Gg%DQc(JCuu931|*BldI$vawxDM9k?!=SjL>}?HU?W^@fcZJ zGa*|_kFy)v26Lx(tmEhBH^sVp6_;DiXXpv81Jy%HQc_+mabcXe%TkZNWBon3=sY{= ze|dbJC&PfZ1hTuoOSUf&lM~_=eJubR+D+yN8|gmjkg@yeQOMa^kBe!KB^GFCRa=8F4yz`V%tSFA?{oH2dtS~42 ztZLpKQ%~g$nY$r>zzBq-r5*LO4GE=P9?l`j<_dgXkmYF?0HvUq*Zz+$fsRjQ5CDyv z(m21c?XK8NPfvgG?X5I*^Z6@cV&b=xnH4>2#5oR*Z22QKauCQl6xbKpAe_tM$nkD_ z_q#ujzQ={?cG3O5KYk}+6yA8YRclIv{_~-S723?Fsc_Nme=dKQ@PyQl?E*-|{Pzdt zR}+_oJmIJVuzr9K1I%5?>0>+MoW=&=qlbs??M^EVW7w_f+U>pQB?V9zq2Q>cbCH_B zq`-C1>HhYSDW+}0{SIV+22XGN6B@V|mrzJ&FEP0h=WJI?r-f=z>9i$a9S)WR8lL%i zvuv2&WJwn^CNZyAK9V8Yhgw?sG%X`T+WGJ68sEVQDgSJk7?6d4q3roEl>*uEvL~tJ z{@vjKLT>pmrsBAMos|kf|PW*%QP7M+Bl4XIj2wwmDrpwn5dsrmj(FNUZD%ggPZRG6AaiYANK@h zQfF7!eb8oGboNX`ZVbUwpsk?gM_z*xIXJ>!-suVbW3S8=V_3sk1TIe|)BQCBg|GcR zu%_SQ4$owK<_@w41Tv*}L1^-b#ms)AP`f+QB05lD>6wF8tF}k&o2q-GprZ#^;W4)d zndM)-cK<>>VAM>FAtOy?(DWlqBwg`rX9CLxlbl0c1B1E$$94$aFj?pY#hP2^7eVdzX%J z3KFd-^v_`9#-%^=;0clpSNeChR#4dX#lyT|)019qA z31H=N8LbfWUGoXpOr3@c)JIqD6|<5Kl|H?vS(%tOTGuC;9Rng@ ze_yaf#-V|dlu3d{j%-0pAS-Uy*B>+=f`Wob-6wikX27`%6H3=MgR$vGe}6^A+mpDf z5a)vQtHnR)wM@>w`GsW`9?sjiE3BJ%cFs6-HLe?xkHAwn5=C3ba8fm8o6-p zI-zu$oSuH?eG_3Z@tyoQTN|6C)YP6i-4iP#VjxXrWMKGyGnKZCb@FG>4d!Fo9`BCJ zi!;V{Qz8$`9?BSk8+ST-6~V!^JEM~sKj;-r?SE9%G;EhqVrw+!@9Cp1Nw6Wp(Og}P zY|ex-YER-b+2PwQ**88fRKZa^yu6BiA(zRI@=8A~Ix+C_@L0N6r3&zdy!?1)aZPKm zDGmmR?K^isU2iY6Y=AK2qQc8X`uA>{)ACJfO9CRIk08 z<{;yC!k9U3Qcj13TIQ@tzgo>NR_ABRp+_pNQkxrMR zjdBefmF|w8WS%XCj!=f7UC-SJXoWTGU53nsd)ea^Xvd1mu{q>-s;ik}LM4Ds7~`P0 zprKHW291(>zG1F+_%TeatjI~#&;nBsRb=kfv`+Dy{;Ka zc0H||DREdCoADV*YpK574krdH>BXVFIs^N6v60vN8?L7IChH$Gr{e0pkKEnd#3Ey3 z6Xdgo;L-;p8kWMVPgF4{hd?$oHPt-VjABN)(S)cQb!qkUQBfu5m#rd!)%G43|YJUFTb%_&v@Icvyp^6sIl(_`Xa9^yNka_N5r zeG!OAOMEg9Aj7|Z#f5T4LUMDFk&(F>eiM5V=n3%>t^zf72_Q}eO5bxp7VZ{F5fo3+ zL?TEX@4PQ<&6pI*{Z*D`%P_@`v-As*?B@hc{p~-r?IpMT#8#V;mJ5~LTv=W}^1+djz&KL#TR>wwoU^~Q_4uBge&-|)U#bR#?NRuf>OJy=B?(?Q^S zIei_Zzsw1uzQ`+;&&l5PaxB&W0q|lqEvcXI#p8CTQiIyj{XYg{y??YtTFv;+h~Ady z#!YE9yDW}dWeDX4M_x`mU7Q6b3bH*Lv{bwCY^g8ULeJ*FPdS~6lOsFb_fT)lO`t*R z1`u=PE#ouHMjC+@=dNKCah+w{?(NoM>&chC8KiWm~{8{_D0GV-d=q-VU_L~vQv)eo(kOc#jWOMATcv9um)8i9+8rgQWIU%Zh^nF zT+agJI{=5@^{W68;^KC>tPr7#EOUHa-dCkI-ozFC)u8mqo-BI93YQbHb%&Vv4b{04 z4i7{tHqS>wm42;lZ5{ebmkp-C*I{`hv$GjLOV%Q*32%@xZLF-A2o+*1!pqZ_QSH26 zt6?8WnRC1vE3_lwHy~e)Mm!rqvBKd^i05JY?Bd>)x@o9P1mBsCgS%>_ z-8c-$tL96k#4whEPCBxqMRc|E3ao)2UKRjB4`=VTi+LKaOeHFDK47GQ31>> zNLav}yuJ^Yd*OBXDZyLCUQ5l4Qa-;w!IvullZJmflKxij_%lkcdFt>tb6VGkH%WqXj_7(AB}LG?^@7!1VL zera6Y_E~DC7EEEh!jPS^0cfC#)&se~krZapw3yg ztgNg>r^rlZvQGe9>&2XnP8wT|Rh6m+lyK(ATCgczlMGx;`QFaiEY7b)_l?}j=xZGk zA3)3x^^a6QfiX9RtkeL|U4VUG>tDOcSGOr+!`K#m_WR|$_)_|dUU1m17K3p!49b9Y zNt`^4l3=OcXiM_G0#e5Syl6e(t;<7`*#=(_L_KTCzHqK4d4hZQz!y^sZkXqXg3d`Z zkc*DJU0kl^_uv6tt;Kj95WmOFg@jRV4DG!2`!EE8GYFJeZn+NtiJqAJ$HYT$V5`#o z?}NHg#zxHaM1AL)%~%qzkK40hEiDDf!{6qmeP=tz4LAU!(Zg%c3arEvfRL45#DR+{ zVx5va4i>qfi^Mq2N_8%N4lv*+_@)ns`yID1msa-$@e8~LcC-r`qL%J0tp-)fDZ=&t znr|20yf6WMT&f75Y3~7yw?GwWo;4*SQl$+=4x@bE=>N_SB7ywQ?!8v2z<+;d#dyNCIy{DGGYQR)OxGP*tyiqC6oWokaK#?>#F@dc!FkdRJ zMk5aYb?kjLcHuPv#5LYB^F+}08hCAwDJU?(*n9UpJLp|9)4kU6Kr7OsOv%Iibwb)% zr>Y;Q=>_~clV;h-Ji)GkrhD)G!=6Z^v7RpnB=o}PEArAYZcK>;kfu|cD(Q20oPDk8 zW`6$fBcG@LMAU#EX^A*x{N||M7)Yco#<%U(YY@6trl>!4R@NZt)uiy4{1dA0%vHj7r(*|YidoT*lV2R)Ah#!byT7Fts*Sji(B-h#iBYylE}Q6SU&>22RBj zKmKy^qt0nFz0AF*$DWUdbq;-TH>8hcK;L(*JvrHtmy!s*emQqTdSzpy@XIZ_0SM%O z{w_d*oIy_>INT(>m#H(05Rt|#d+Jx%f$o#W7Usi&2nFL!xyrA0+i&hzz2ItkcQ zptINkL4w5U3($zLhHanuUyS*0o;BD{8dP}~0|F9`TUGV%YSw`Sc#Vbn?>h1jZAz4I zhCZBqKrkByYtXsrx*}1nc;cXf^lf-ZaSlirW3Ux~2moEUCjG?3eGvSIMn?~*{dcHA z>~pIOjp%HWKK@B+FlMOC@w@PZiv`49pS8T)5Bq0dhYV|tz!HM`>gm7fL<$QBiA~VP zTWa)TBdEk+F7|V!F%J2r-p-ud6S%*RrTOK&RVeYA#+3~IY}ZT_T6lX^QVU9R+m|!@ z{6&fFqf3D^O~khl{mYqLL30KvpW~)L0&vvjndgkEPLC_l5M@U$Y)oL*@uBCN+K<}w z)DxK)R$3YwJ^`9uSj}p}*79WUQ(^Ra1qM?O=mXHC6Bbe$+9psu8sk6U@81(ms^ok8 z%WWF;qz?z>nS~nrFb*T1iKiwf&tfyqWjW*+kKLEjhQH4O7a5%fge#;H@w@R&7c3Jq zF|g+6;i&bf!MMXdSOB4LZl*XoI^%JqP>``av8}K=B-GNwzq5M)u`7Q>rSS%2<@8E64!=tkE&{Dh1=`4@$!h5e6 z{0hL6Q{KyY-qX`l_H*>Dy;C~`;%vO%4?8;A>N6KVH1_AH;iw*uN^MbBVgp4SXU_LB za8r8{O9Vx4LL{F>?v-U+0JpaXXO^FvzqOqXIQSlCt!{s9d%S)$s{bVa(ao-yzdyFM z2oz3Qk;Px@9v_99E8eL%ulHxmO-k|x@%T4rGlCNKF&kS>PR`Jc?|Lc-`_pk~jH`!- z<5ZOs@FYC#CV;dUbz4((ys`gZt%pA$`S~+ANcP_e$;X^3a$ZdHq7F7TtJ~Ym3=C7H z77?o*F@9rTs@Yr3b{uhsj<^G3oErfCH{Tls*C)SL48MXX}lZ>!6Ar;)Q%Q6?BClQxInNB({_4|CG2iOjB|3 zLS5XU@uBRE7)d+zEsENn=|FLX#yr7lOnLbR*d}nU4^*sxlyh<_G2lt)Uc7%(q92fT zpaY4)U~+SFLDlP1wCW@BN`$AklI1BM{<_<~bAEmf+K=F1hUSxO7zZ?FUKt#H0EaPO z7yM#7U3&6S5E2{6*nZNFJCVj6RyNjyvy9oWXajUnI!Siif~Z0sh%=27HEsxpmvNm< zfX~A%Hl8QoPnLi#7dQ%1?>X`z4rckIL)HIOqYP#u#R~{&(yxOA#Xu{A(ME6jS&54C z&$qW0!&GDyHQemtoVmK)Q-4&hNJ+4=9B7@@8`9z8V6A3O;E?E%pU<6j6@-}uF;G7J zcbzdssXp8P?D52zW!h{RDE9|}V0~{f!C1RswA^e~v!|jYaseOs0Ock|st%kPNR>9M zq|XkD{CzhkFwWIeAE^841SpAuLDbyB3t;!3_HRS1Un{F!5mvfRRZ?N^`V5|*VZ5J){aVM$^4X9`JM$cg%};wbJDxic z4w|?1)7*OK&aCM!=EhD{Is5FRhfF{&1LESCv46eh6QRyH6M>&I6`P>s+W7aU1*UVm zFUi|hA&=VVovDe*9IA4LJerR<#Z~6(4<;#Z)9T4 zcJGcfLmJIaHutS3rsN_^g(lfP?e`|by~1Z&^jl${6Z`@t1X{kGot@z({m&d7>kqI% z|Jw6*<&~ic$MkwfX<>q~pC`b3u#dM<*&@6E8JwM-8u?!wfNnZqw3}MK4g1ysiWwi( zU7e0kYrv*V|!TG`;>tRPrQgVQm@Atpl1GSv+KT-GYQoBia zLl3}`g1@VAIR+?nR_NM(KK{&ka^6*+*qRbZ>2LkB!p~`g<4%?E61&GguEW<)FUuS= zi;Rh%EdD5JrJv!7#nENEsN~ zZ}X_m-d-R&Dc9l`;pOT+1s-m0gp`S9ZQgDWx5sa}#>xy}2|+Ups;QAA>Tdwlsn+iv{Y`DFQB@3N6v z?16P#l+aMmox&6*9V>(Rye*s|g0<)RLsLPyY8t~Nd#>I`H{WkBzS_U0cC$e~nza+;A3&;t zlloHc{x!XMn&;%l!5n-1t&EnI7EqrYoSYBSUC(W~WFOVMKiZx(*3fWSX!~4J!XLwG zUPAM&f+jUFSNX22jLgsIhw`9@a`T?b=yeF>uJY`a#MgzN)LJ-Y zlsxFfI56Wb0t3f~bi^1>1BGr&%JoM)2HM(Kz-fLA3E7&dUqA4&NnW}k$9dlTs2MeA z{a3Va(;b91kWk6!?90I4>-hbCi-2!C<6-8lA-nGgq90F51^$?~`B-M9nV9`~{lRBQ zr;w5r>YUnX_rO|Qp>1{7&Rkviq<^(x<@lOf`L9<$ffs_x9|ZJzf1IDO@&97)z5lWN z|Mzi8LMkLHPf3?OQb|I?-q~3h$;`+~Rzyf-T}D~il$5N9jFf~#i0m@TC`ES0_qck$ zKmWn!hwtt7{hmL(UT)8>abD;7IPZ`9{kR{;aZm4ajFRWNGxVg(^nGNHl6guS7`!Ey zoA%Tm(LR3pK}BMvi~hd@sl)Q@PzqcVSZHIF<%_fXR)dn%d7{RoIY3qPEqMHRU#!_) z<~=YNIZg598pF}gRvC|JCOZdLf}>N+GA_q|w6X2&u@sV{lb4JWRbgPaJ;tIEaf1Eg z9V7b!i6*^xjSfZ`I`-CBMitIgay~OI{}@uwZ42@$V3YTvU#-KBISxkhF*S!@4v ze0BMqcKgnx8r>DsX`|pbJSqg03;zyKXRvWzb##31D6W*P9eQacHFcPW)?fUH`T1H4 z&=!F;PZ(6GuG1*j!BR?&sy;>9=wO6sXK0IG7FV<>?Hk*~&o9D~vZ?!7cHK6N+W0;* z{&X~EJWj+kipT!eCsp}u?d>w(`_-j(Ju18#PtS=2#cN)5D4^b}2XI?2+h?_RqY8LGUq@@00`#@@S|Ni|+QRHL+>xZNFnoPY_6f9Avrm@pgz6fFH_28HS=>_o83APLtnG zq_i#mJ8;`T>cUQd$Bp71`ggv*>Nk7M7LX*=I; zzQpbHEg)fBC4u?{^SL;Np#nd<;yy?0l%&v4U@$T?ybu4Dg9n#=YBIInIf{3QrG@GH zi48qVYWt>Ld8h8TX{Fz2E?@Y;k{J(4HC57q7|Aeq$FM?=!3T}(kCE*sxvgw$z!t|5 zDw~NA1F_QFoa-6dlr|e8VIQ;e1}lRw+sw`#j%JLJ{z05!E)tGnY(vi1?d|QgwY5Dx z#q0LFXNkV6!3sFQNwzC?^4-LiEHP(DwqID!p9xp6$u*OTIb761+gZ3JgiAj45KH1^ z7UHEB5=w7QMNKG&TiO#vwJ0=V#WYy>IxRSzY&va@8Aqt3+$l>wxp^__u)j{Zf)nMr zG4bodkWS&4?JMPFxZ_nbJi)u}UpMmW`#vF!u5rmb9~7f}JIR;Fe-Tt{tgIk;%PG5HN=ThAsAx(` z8uq%5xO`&ZH46B&vXx^mdHi_Sgxj1!+mr{mT9WKh@~k~d)+8UIn{9MAcc_Zxo^7t* z`jNnWN1kKYi>j5LLh1KV9feE`;p}|Um)^quET_$8b&Jtvfx^yB0kRCg6kpdi8+S{Y z!$F)YQ?FiGxOjV?VvBrhS!^iub}Pg@{__1RQL#6*7L_;AGpMsV$`=gySM>OJ&{@5~;cuE`PtyfmZxSysCIYSIIzIEfZ z=EaeU^zacnG%m{NZpPL39`7*_-_*Z;vEn~^1qKQgt*y1&`Fff?n%n;xyiF{~Aj|Mc zIlg}@dfm=2qLCOEcX+hy&e!rg9LiJSv|Ii1;alyCuZg?yH5SkTjedA}DfqYu3W<90 zLu6`KoqVQ!Sce(Z1f5-oe|LUNM8tXLu z=h3AlCReqKj4XyR(V9BQf+duoLL?}p-_CkywPz>UYKAxdEr&#Fnzj*7p$-ydi)>C0 zACs`MAluQv3}(c?f4kD?ihxm5Q$wm`_eVET7nfT_joBsp|7kl35@T%Ow(C7 zL_+!jyWYA`LUUuIf`1RZ7;j3zZ7c(%1#LZ@h*e~1qIW;qiLua9ftK5~@y@TFKX&cNtGg37$f!!46>UeqSpOKF^M_u2S%xp!;VR*jjlF@vca7IV(`leOezIXY}tRVO!h#E`ZH6>z>l z7QaU+H=R6$4`q2f`3=?$A;1)Iza6?}|q0ut7NScgn8oY*MXV2Dc^qv$K@Bit! z+OmBuXMyZJW$$QB+(5wTiI#tcrKeW>YSEGeYP4g=4${@82226`1)l|d1i7g49yzeT zNXP&EmHU7DN%;Ri?;JCt!OfOpc4osd@RAb)?!P6wnR( zy2lp7Zx5l?r*)MM4i0y&@@+APUZSPEHJ7i>qpPS$8Q}WlfJ~tE+xhHt?-@(g!J8#P4p7E0v%}r#uI9f=DsuUlWd3{=KKbK6X|SjWyjb8kqi6ETJSXzIEJQEJj2sAwlNFkDS)?ELw5OG_OU^q+j*)^n^kIan#A_ z=Zo8KEQ_C*TZplxozHI?oAZ)JxmTH)Lm9wdV^-8VlQ6D>r}m5xUcH}@5n*?VW>)7aM9+WP)|eAPQ+BuQxbi?R%kCfrdI z6&FX6mG$s{iWt-}sCW8W3*2xs5H@f?!s%akmWB4ra$I|aJXhekFGgGU2rBnl6G;5X zw6wUmxU{sNp4I#`hyN1xMK?k6&hrn(W@2VGFfd5>RYrSzCshY#O5SE%V3Y8N$uv_Cn`-NAD!hhLywf%$vPsfRVx^{%PCGZTVc$OYglur|iN=XTRrb9?&{ zetwz5Psfq3LJ9IeG+CC=*r|LJ=W%hm7fHttw-;7x{LcbMex*Nnu;fz%sZaY2H{Qd? zkC#?fR_5fO(2F7PH$|hEtV6eL$voiOd)A5pVI>uL6Em|~;32<%|HfjQw>_+a;7TIv zL`FtVMqa$?>gozvS9=XEzQRlPY{Yy^J2gek>|zY`~61%c`(FJ18jV-aZp_Ue>xwlUAn8fCB@l&VxXKe3&_mGST4@WUmP*BjZGv+4Q zI(uqBLQ<-2jlalz>Ymr*u@{b;66Kg}_c4t>ezLN$iT*oOk6L{3Yw72;^<-pZP&=xq zP>1&N*yArRFE6Oyq@FzJYE=SZa-~+}vD{#8J^tzLW9&dAzvR+Qu%?RDI}1j7h|s zzxnqA?OVojW+Iwt%evO(CD=Lsr)D-bR=s@GFfk1eKyq@HeHGRrWM!3=5|I|hJg&jX|*B`%JnIlgd#M_*^u*Z=vdJul3J$!l^y2IOiZe=l7RADpB?mG`F*Ko@%a1p_CGI9MlP2v zuF&h46)mF!?^#__RpkTFw`$sE5KhPCpm?H}ijd%uaLLo8pCp{?5%qrBj zFF|ZU1kMMp?8m>`-e}c()TCu1&r*KjEYl%I8eG-gw6yO|Ysu3AjGA&kpI-{svXT;p zxS|IRPEL_^@#_pnR7J7$0ZSrpILyy|=hA&BuW_`}gx6U5`vfSzZFDhBHfo?)O7fTpZDRp^@Ib`^C^K zI(~28D*h~QJj+b}Tl3j*wYgdq5yG61IlV;G<+tBHPbpO8#fY?WTP1zSBgfYw#^Lsb zhu0o}8h-?my|1rt11`ah@UlFu&&N3Z;|DuCyWY3laR*tPAO1VEg7UOX*eTIbyLSEh zp9o4p4eUWmX?XGhj}Clw$*Gp-FM0OtcO$cTj{iG#3HDl_#VgPag4zvWMQ6QB_b^8^ z(D0G!>qlx16De2^l8)<=Y53{DJUafI--$r{Ax#P=7aq<{4dez3q#E22clSTIe%g<; zvd?h>w;k^5d-Ps%FJjOfoafGNu3Sd59Iy1arg@Ic-%^0d18yp|=T zW{-;{5S?rE`n|rotl*d8r%$md@OR^J$2yaglEQ<0fQ`+{_?A+no(KQsVng&Oe*bpC zexabCP!*9)js_Xd{Q7kzuBodh2iaOnUjW@i2_4P5Q|T#n}8LPgz% z6HXoI{in{37CSK?;L1Swooyq1b{HeB!hH(*@@Md106{9hD`}P?SC5Zz4Ni72GK*(d z^ZIDF0Jbq&==g{yMfa?|4PtJEpSk=Js|`5L($W$dw{o$9KmQLG0AFgi`So4bhvWRL z@5Am*rGJZGQ?b6~P&}~VVM=eBls;RM^A7YL^jxe=MKACa8~zxs@dY;sFn`zklHJX~ zG%EwPYO6#h`uow=AHZt^x9@yb`hf`>3p9(u&6W-P=$_(szI#VvOO~(gwl-RVg&9zL z&FeC7E|Qd#ge|&enq+R|^=d3JsJ0g)mQ+NTB2N3QJj0F)GC4Zf##b^wH(&{)1)TXl zP@ug8aR3xpltuWDg0>2$y%O;^G!lTRot>X%P=18o;pZ6BIDqQR_btBhWrlE=4V|kI3JBBVaI9zfJ}!E%$>jOEX=+Ki)9~0 z=JX;ta)(;52_O@ic+afCQI~fa?fN0--X#X3b&s3)&(=}i{!b?+to=FcFI~#a`2Gt> zzDzcbQBz4@40Dx6C~RzEcNMZ4KUS%xyggMaGyrbK%G~9IZ@FzNX>Gu&XQrn+O%vlS zjh?qOI_@#L?FFI~dAPQIwXHbegi~!XH)V>Vhe7dq*FiH9*jaS5qPpR<-aO z!_^`l6KVwkG#a6OvDe&Sh{D(359H{IhKfi=VLB>!_6DYx3a>tQv2PN653M-qYAzM* zcr6N+7OF3jOVN@@TtTtW0G{pP;iuD+)x&7e;1tmG@%%NMHe2#eq3CqI5OaX^TiQ0d zE550&A0?#9&q+GwnCk96j>mN5#_|x@nQyPKus7j}L`2!o#58RcTXT-nWuhek4W+h= zcn~F}rGL0c0O0jBEBeau#Y=j)rzh_>Ek-Nm935-YgLpeE#0bC&F)AP3H}Cqx!2A(@r_=ki~Y{|($w+oYo#zPe~? zMt4mO+C-oBxjDf^OL=x{-FU44C@ec@Fd}Kd7)PvNn7X9%B=V+eCFcg4cQod{St9W?uR>J2%*0UjAOPZq&8U<`9 zCv+niUj14QSo~x_YI}-=Eg-HHU3`)CG-)~oil54wn$ttMUQsw%%`>a=`_s8XFOh%; zFrj24yH?+Pm3W$+Jw_Tlke8p|Wy(ZNyLOlby-QnZ0?{oGM=p#r*?fOmvp7zM6savBwlq^PCcVkz)D+B=iT+n!&qUt6d-0{0w&{#1HOZS6{%?=$ z)KYf8eft*T1>&rZqnZT!H!1Z_)0ihh!ooLTa0tf;_3JX7oGi4U+MoYaC)MP7(s^(N zbf?U~B(`=pL|>>}^!{Aq+ zS;%xU+KcP3GPPLeyB&M>Nh$E&A|f?jayY zWb$kf6%$R!hxD^Yenu+v@E;IrB|(44e`0hT-jJ2aVU~p)?4S=1CClkqQCj>sA+#DPaFPC ztz`Z@z0eSkewEt^EoHHL1TPJ{sYEN^HQDX{_>wr?H>L}pZ(6loyLk7`5UVIhq3)O; z9+J(W>m%MZW<~)t8eJ$gQR}v$N`1f8_z%NIsn$o>QF9Lw1iLGV2Qs88`Y)`*5ruJK zH<4gpZVaKglX%KMka0boQK6Ak|8Yb#j?Q_Zex@J~Ja;ay(RlU4dK|Cj^d%#q&`TuI zRPt9%o6=Kw>*2$<>I$i8U%yEYYqZ4H5_rzS$w?#XYrs0eHfpT9eAfcD(-r8rXw1TyvrTL`Q1l)|uz^@7VfFdiV^P z1g$NLKaXr}UVqWcmSf*PFUAwc&ldRHj<^e`K4) z>H@SdNeN(hPf9ai+E+qV+NYcxnKLlgKD?xSck#(HcmJLl&CP9Z6)cOF{JSEgsIrrp z48t2OA+U;l)Q89F_%e0oF5YKC)s>Z#i#~AI#$n}S*#>YDOON+_s`A_>pPQkP5y|45 zkI<@2K_p-^0Q!I?1g?$*dyr2qf*dE^@4p+Q@_kX&@SQRt>ozTWL}TsNrthlpBOoZ4 zFyQPg65zVyv@UBXHRUbb8o&a;1TI~YDM+-B8iNFJXAoyMF%UW=DJiMO|I~<9;C`V& zi?0&jGQagIhE$KIrL6!#K^#Vsy^`=+KG7=;lmf)1!%9(vfP(R2Ay^=ew44+luoJ^C zAvKX0Nyq1(o*(lqS#0d>@9cdIlQta3u6L|R$I-7y}zefIh)gDMv$dit#Lo$sgjNsY2i`Vd1-2M zSU*)`zwN%SEXU6@slVqvMMyD;cw7B;ceVa+mr;f6kMNCzIk2+V`HBHkoYp1h%w@8dtrG=Erk+0i(Av7M z?A8nuzTu$$dcfPUx#s3(RAjL1vQK|PArt%>5B=D|t1ssiQG1rzCMNdIY`~A6kiO5M z*bo2_fQImhh&ZE~!GAy+5Fo%KL7eOUTL2}HSWQma&9@)6`qE8x`!x(;M{=APA(}$I zAdE_1NJu?TH#pC}*4hbs289f;VthSL4Bi^{b&O}ye}Pih1-jdqXEnF9({wD2xqQ^3 zaMLWUX#DbrY`iRwGwe?=W)YCXE4`#$Vs^R7#Sx(XAIGq^ag zJ($-DefmuZ&%*gm&&*W3IC#^Jy$RR~6d0-l4o>C9=Dt5qa2Nfm+fmf}7Xe*O;{E-s zhgn&qHvpV?RB%Ug{~dWKV1ZH+>ym9sz1=C{hkSsQweK6NUGgUQj!9NW3CuJhBBoV@ zug^S*gg^810)m1l#m0xVUd=21TB=@PHTZCp35lxPA_J2_zO*f!GMh?`ds!4La zj_kXNV=xV5gZ<$V_$}ANBBycj#YeFlOFxXb%Z~k?aZ{=8jRmezR8;ijiH0i=o^)Ur zu+;6}v~e7e=~{r|Q{T)?>%1~+`wzAKF>e{gULJ=XCRhY(J)UJLzAR`#+2Olip_wxz1DUh6l>sqyOI`{e8 zlRU5=8vp)X&8@)}`Al8i7RtuXCF23d=OiymyOZTvcG6^}W&!J)F<~RIZic&eb6cGc z_xWDgc&_kryve?^LFr@F7AotVsd1YK*Si|@(GK8_gPoo7+-!z_U0rGE@#a^lDaW7nZ+AhB z2hL2caUU^n3TqWYkQ}c!jIAXo#1P_|*SYYrPV(QRB#h?gocoK5q|`Y05p)C_$heRY z&@G(KvL~78J}f987O;Q>{S-#T0SPWWb^zp%2loe*<7t6B3D!-IY<99lz9l&qS5_Jl zOI7SFEl2;fpS^d5uCm#xzsC1EULT&`3asgW^6=)1MQyAs+YA}7H-ey7N|4KP6gNTb zjlEcBU46l)24^riGZR*_AKb7o$S*w%|aWQ%!5~RhHh4@EJ`*Td!m5no%A18@4A8I&yeu2S=RxOxIFVJl#;hE51q!`=* ze_dW&#J&fef&d?%@`j|&g~zCD%kuKx+KG`Gl3Q;g6|=E{8GMpusrj zZjC*i^n^4MB$M+{4#9sI75am<6UUW_?>~HaT2$2j?wz5T8B@)u>hpa2Dx?|(1y}H@lyvs+ESQXE2OlbrRUU`TI>G9*sDd`& z8q#P3RL}{c5*-t6NQlAGVWp)^Z@=gFY7{Hh;#=1GLhvFbcssMbfk z#v<|XclV0muAs(&@s1FaiJ>9gvNV8aaKKP|-Z3Hh2Q5hn^M^~ie7PBxF8HpaBPQdk z0e-CdFQuqU_d$RZTHT$Ca-8IN4TLE%At84&>3(diwyEjR;GpBNB;+@7TP^Zjv8aW? zlIk`XCS(qgu}3yJFS}}Ay5>>EH&9s-+T!_6;@hebUwBJ<7W)O~L+3;-`?o4B?zcQ6 z?g?4q28W*eMIu_!I8&%PU{6Ji4JmynRK-lS8r?fzA` z|Iy;#NV8T73x#SPr^OMbJgadhLFBBYt#=*l?$*l+l+)f;2@64N%YTb1jGvHvHq~eL zeEzuvYC4`_aAKaAH1UN?-dOWM9Aa;z1JDKM?(eux&FKY&g+IX2z2fYA!8jnS*$RlT z)0HdXirLM*Usyv~+1U{z4Bi#JC@JA;HmihSqx&>2{EzXq_f{X zQZW4a^SiUrU}#*2aUQ{7X9nLD2uv_d2CP(#s~YWgVz>cld(crFJ$^jSYViak4K%&I zy}ggK)~W&(w~ID4&eBp%YjE!_bG1EXs;k^F^)lQlG(qIOjqSa#%7<_JE$)l7CRAxL zU;>LwKtRATTNlYRAoprkwA`E|7{3l4ZSXm7-uW9r2&SM6-x{2R*&@xVJor~91WiSH z0k$BAiSPR5bSw$mB4{&yXVSwGfv_{~xxM--aC&z=vSv;H#Riea&ojSKSN5#MmxK@Iz##{O@W$>=zWuy!m8j&NvG~JkVq&Xl30M@HA zcQ>J};p=adal~{zBtx%Hn(^fyZnZ2H6BEOJ57BYh{m<-F6c-E(R%KSG>Q$~dIQTA1 zYU7er51oY`fr3?OQY4)*MV|hIzO?v9W@!Y8&}Hh6uSXiM3{>R{z*i;3^9W}Qc;0c z=YC2GT9+W0QPnql0kMlba8jOhJusvJo)nqy_ug-_8F=BI-)seK_W8WEsjCta{}Y6hhqkWloMUXM0u; zp)V(^^d8RF$PtiIKNKPR)B2XjowBqKc-j$UssgKzRq2ppJ}fLm_l$8(fAQ~zVs>m6 zUkJq)ApSq2TaKr+fmeT_Wo>*nC5BaO;0apulO>W&mE(Wg^HPnXrA2z~{;e?RBF-b6 z5P#WdB4B;$?jB$M8<+G0O=o4|_{l?R5r9<)rvyHIb$Pk5G=Qx^wKhmh!$42ZOZova z-puxFgkbCjMZFPZLLZQ(!^J?sz&!2zchHi7`X#KZ6I1}XKYRMr+28+6(v5=%XUNOr zlm4VDIBdIbVd#9m-ixKG`|@Xf8NOdjN;duPBwnxWh*tm7aJ2s?r_&>oR}Q<@6YH|B z^B_iGV@ftoG&-5m1|}<0gu+4@P1G3hUp&?E$3-PF>*~xqN+MIR`=&{I>j*C^<#!pO zUF5N4>tD;K(KT>THz%0vB}xtSO02$-qb-4Qo~B=0Jd&1DPC;QuYl&=i^h>iN3fe)T z7h9NbV#w8t4bMbC@OfU_4-g6X9&B|hD-v5r;I2PX?qDF$`dbKDDCtr8MvLb}(s!va zt0#ydcqFLNxgt6`I%0Me)8a$~1=U(pegm&4qK+6$2X)=IgSv|4HV8o(J;frE+7qQpy{c!>{oA zkI$K@-W2V*gErKzm4<$QncKCJuG$I2l}k5g98l%c{wvxT;&HQe8m#>+TV{#05BSXm z&H)*yRPUMjsCWdS)42g;KUY|19wi#~hLrcLNcmwJtp`DnehY3YpO}d86SiYn(=PvH;g*ElCAsXQ`Mwoo-9r!XMF1K_dy<> z{gI@t&9@<2a^FE77{Pob+<6vzEefT#Seklz?Y@bK6M#vyJgBUUmSFqH;Jl+w10@X* zxaQQ%+}sJwdeWUw{n-Y16pQ$CM+fKRLoGgnU7EDAvdu{fTqbzm@Oz4ll%jd?_kGgw ztj9%Y*kBSx>~rOkPGhp+GjdM!rbP?eX5JqfSacB+`YGReHR-(z1{ zNZeQxtMfnd4g`9&g{mjc6{JGUz;tZ_PcrF&#qUQa3Fu?|bLIJu_GEdjZd21@S0C31 zEB1F73XDqhR1>_7D5xpOvy}MerVLDLLJk0wz~CG~o6>iIlSrqP{mpki8mzrxvhbdc zNI);8DCWdfd3datBi2=^9g09YX!Y$QNf=pPu3t5p6WBC%3ex~4i>_3O(w1&8@=6XX zE1WWQLR^Fg7X9_YfuE%DN4sdcwcP0%?8LzTzhKvENwUJKufJKQ(BFWWEs2Tp7p^K3 zrQrjG{Q)a89Hqz);9*lDA&H=hAU!f0EXLMD%9Gq?y}07ha)9$u*57or%!n5+NLnwj z+~kk$dM2k{puS6>SH+rUQ>1v<>LjJI4y?T@W3}0o>s|scA#FB;H$<5txJ#X%2cuk7 zD56y-j-xC?hL$6&V+=v2T5j5B6Yy}F?>dfPx00nS=V|`w`Plj8oeZ{6V;;#CClpf) zH_&4z&2>`0tW;HqbHA}xR%ugf(2($~A(4Q`>QSUgPo~^$c(PhYo{o+m z!&)D`@U;2EhYLd;Yxynh?E%358Z{h930z@HnrhXq`uNvZ997)iE44hXWp>C_PUv$9 z_}|qcQV3VqJ?L}1Fr@xbxbost%uCW39Nmq8G&(FtjWuIM-ia^5^57QI^!e1=D`>@% zuLp=%A(}9V`l`QomKf7IL7LtW{#JGuO})T>cX^-Ki3#|8eT)tE`mndswbvBEK2S4L z?4CsJ^9z{ZR9C)kmlq?rMM-OaF`)?6fr>$@*Z}4UVm49ytd587TfJr-)2FnfC3C6Tvdpbte*jWwAGKh_W{o*DiRFH(4J2 z=uU<)xH(V#?|%m+LITZ!un8TBC^ff))^S)ADK99K^o{v9zT}Rh=s$7%pckOig}e(m z7h}~r>HIEl$jZ!Dz zPs&JqVxF_;5V}7Kd!P6r-RVBF&$bl(NXs+N%CbH_%xL@6D}@VHbs@;_DIh4_CO)n?O{ucpi!O zY*W_#1JLoSybP?koH@n|T~0wk-Pz8$fj6ReCu=uANMZaD7t4fX;lx~M@A97x<{#E-pNk(PB6`9VHCRrHJZLam!`D0X_?u$K34Glq)H&RlPlgoTs zB|U%KPfWB@tA=!)`ihCV-IXhyon95e0NK#qy(8gbW23m>7!v zL5D_P$mv^sXj0yZJl%)@F{%^y`YYW%2K~&cD&vb+d{%yEPHM2lbq^1V%qlT6GO|m1 zY0b~`H32R|o|Q7ILzqBYebnbQf;IYdC#07POG&z8$R&9=c|jI6em4}jCMByZTA2_BQ0g)iMC|* zJgcQ;oe1nu4YIFVMRM+EtUerNlM)-lZ{y<0(PqRX0@lb#`#~Nefi&ZzurS?&1^LkW z?DaY|wLe;<*9+7$=1pbYcT^BNpLk&IM&s#RFlTf|vQjM-vvKpy z8RrP+TSXaMU+-8ArFA+>?S+RB?NEeGWwZjBDjxqq!`6ei(+m^lLQcA5?DR?*om;`K z%Q;$)jU~s?_41Bm$RO)B#J7&ROR$q9nmFa8r_JL~U^BWhDrgtgZB}u--5U701Yjw* znsHhj=G4xwBj8G8ch#Y6_j{W^m;xxTXO1o^uab98Rs@;)_e>v=u>Zpau#N4ryfCWI zlpXkOJ!sLw!_r)BaVZqK0x=r>`S3_jj%+z?cm#BAS)vi7-pN*{{6tggZHwfi5>oA zJp3(MMX{b21x!A3QiyQch}TKHvd|jbS(BTqFmTwW7X^c@r|0vIY_O-s`QDepTRdDs z;K&h8wG?&7CTwnc6|b)#=!L1!?71!X`0+bwHK?(P70>dJ*$m~a@V{o+lqu$^fTux-$Rxg7`TmoCuzRf z+M`+y2^UU$?WDHqEJcq$wt9E!6vgMivfU^szgSHB-1PPFk@)K1Jn`+@75{~Ilw65Q z50aCO&CY+!y8yrn+9TQMV=S~J+X;OCG5;fU`%iBn>{T|cgO5^vT4C!E`1|qFr5~m| zoc|<%e<`d+ons2a(y-Nbv|~D6OYhN#c^7jrTgXSd?yoTx$$7A;%gp*7>o!;yU@pIi z?NKyg;3j`ynCEYdN1@km>F)3%<9zD#VjMT8i0tJ>Hx~CXD%en)gam0cOB#X}z!m!0TbiTh+SWYw zpb!pXvNz-Cw*yk_NY6aqX>;g*hTELL8VrH<7Zb8yS#c$Rj2_B`{X;!`YwVT+T*q`1ze> zp;f0TN(O#P8YQX-jP@9Q{FyTN`7@u#@h}Tfi4!Ndb-jt16ITQiesKvI1CBo)?DQcv z$i5yO#5c71(M{RwZQ|Cl+VNrMzkuLyil+2I*qtDtYiQOSi&xM`RTRF&J;_H^XDnaw`D3#IZb@e$CLE$lz>jkv**6< ztD8A-^5ib3IfHL}c5Rdvot9js!PmMTlk=BpN(uOqF@1Ep50vx$`Gk0sM6!o5GX~)5 zv4q=npX5mY&~7xC0vwkA#S$sTd8|Bcwn8^5_L1~78i6sW+-G&9L&A1kMeX)@{04sx zm&ZaOIuzv&_tZnS(aVcnLNEKq`PRWg1g-sox;bfKWIyJ-JO(yep%9V%l?e409BcFD z!}9vb)F-MS9rC^(*}xPO_3psUd;fT|!5kshXf4pqJxnaxci-BGp11c;zrg`;oI!#0 zxHp<4U#5d}Cz~cA<9)e4vKoa#Pv4*YC!ChIV@Mn5sWg&Sh{USS^_>S2trhMjb(7wX zmERa;qP-`*9dIIH;o;hv&ncR05s>+0_i9`4KJ(n}@&I_E44uuP_9+%Qs^MXEGS{*6 zYs3C;(IsM#yet1EDs14aJAr}TBW%dI>Dooj;_QsExyp{W2H{!ptgD^5Sy>H^7Y6<3 z2`b?;6)&OQ{hl5mvLIN*Bx_K9NQJ@4JNy{wk~W^X{W{R9#0scEcuAjIigjy_VgATt1$gf7Xa zTu*@pa;p&C7!`9<&*vZ8*#dcAqV& z5wAJvbsK<6=1g)>p?r73fddETq>bBudVYtGZ#82$&* zSqa>g=%=lZ*KPgpZjSbss=|^*G9Xo=w1+2AA0`+@tM8&0RBkTblNc6COA;H{Ur!7) zYDKS00s9w8+LgpnluB_`{QSX96_ZQ;>1uO-ntQnHi?kXN;^3`Re zZziDQE+u7>H~)~iv!96sBYG-BE^Rsc_`;os&4Nz<2{}<(9MkQ(wH!zFNO(5=HLixhVCV>^}Y$bj9v&NtNt%oM`2&tvNhLK9Tl8rS(5RVUAU zrI3k_kGEJe3qp1*`CaXeuZUnIrA76-Z!Xv9q$!M_k_ly6N)*p?JqEU$5fKsA0@PuLvl8!~ zS+{-Fwr(Wv_r4>$Hn2mJIrLmUxxK;Yxf73K%IY68?YposbS86~Vezi!oY;<+sLm9A zNR^++?EPq2ERlBJzBPkY)xniH);4}gkPqy9mFx5mrjSvq_z#sJ*(9+I(5MnH<&*tS+Ps3-$n+8Aq#qF}~vs1V{m+VOaPL+8KSxn3po#yuNHVfheYF#!%N2AeArEH>QtVlya z9%Kgj-!rb+Qo|=bXmMDG-k%MU4*7KDG)9b)2q&5UZ60u8@BR4ksHo`gPPHSCoZUIo z+nZd;mo`cbg;f7G1a$};J2uS3C}qc81CYJHKe;1&6J9#4+ANC<+BX1=w)6?fWp6Va zpm^&Wm0*3?g1-D*=q0hzZdEqwNHLQ!iSv`W@?^t7eU6@zX)UX%+1KQZ@yI7_yU!Vh zo&pAmq@E2hldrM5rNy^^R;#q%%5Th16_`G(;He`OH5NQv;zD0he?1zsdvMBHMwkDF za5RY04!<40V2SMvUZbTpAu;}TP$>dCWPX@por=d z6Yc(2?d-sbz(iEybTHx$NKrsmBtU>|xZSktiRq;yCv)kO)iIGl@NJKa+6e772~)b8 z6ACmJ2}U>K>2H4Ao+>i6yIwpcl3|Uyn{|TX%Q;R?J5@qvPJ>`v!#>Wd@Cu=jx%k43 zd$qVjI%*6YKUf)Hl6@)i*T&fc!DNM=vPBlq7-{SpV9~ky`_PEG_EB{M#>Ec~#as@Z zeq?Xy>`Zr2-jdaAV+uA?qR9EKb6%0b$8|U5_UBW>$wSTt3fnuteT6|wx|;8a%f+8T zf8BypHO8LlHgu^f+x?_TyR3SPhqjqNphI;!bEkwUU`j$^Esx5My>6Ku+g}E%M_Al3 zl-o;qRZ4^LTGNFeB+d7FZ_mJ=LOfJ4tZnr*`#CS|mZ}OhrsgI`3dJFr3aAPFoCG=y)Z6Bnh zkV4`b=xPG_M-=Q#I68~Ssc&!`8ajOs4w*@1wPJG#=ea6B40;aWFmicA}8AVIkNc#N$dP^@Q%l#&-#M~i6VoTevvLS!I;8g zhpb>I`)?7an`Ehq40|lpiA>v{$;@ms+$NU+_tYylwCN5-p02-AxRL)rc9{F(#ZwO# zOpyexeYv$49dH4q)f%&3a8&ifauf61ahS}3Oe71R_XLA!J8JS|WU14UaZVN2`M{4O_S=*%nzf$tD*i z%DAn+Nal3~9qMSE6@KaH@r)&t#4@cL8b>DHZ|fPYklmdkR*)8!CJKh4z*4*34(cXW znj2yQm&y-J=)R-aX8a|HsD8(c!9Vk5N1Kd%IR(h9BI%(Q9s5n+)FM#O-QO zh`(jyY(%7URq`2&Jc%C8I3I0J?6+hwv2=fGZuMP@=8bzb6Ds3d*$FKOdw>7;=g%y{R(am)N!nXBSI}fhIQLMGOId(i4*)UdVoUbn-Gojx_qA+#$shhkD zTv=vw7ulP>x??+!X7#ywLd6}cf0z7JaEH`8>=EkRfmVi3F31!q=}x-Cx;mt=%D&i; zqK1R{x|D|wD|+|qZCCyOv#f?naDK!rl5xTnGqUyXivR%i5%(VQ_5 zWr_E^A+=jHr7g&;D9*Qb*iM-2vTa>_^SgI+3qBqq{Ba#M=VD_YsGZuYmT3-qMEwwi zKxDWEY3ET!lE^-_kRptyKS47E1N-K$Dfa#J%nXtD(_sVnHn~_C)E-h{cN`s#$;B4$ zyj#I#OgE2GNLtHNSWGx>?VzTrC+Z@$E{wXd-{#%u33`<=+)pLM)QY~3|Hh0t^ZxzZ z-UWa&z#~-CDQJTZwIjcCe!c|7i)%2?zMSgs4Y&P{XC5rYsp*-QE4goDIbHvVE6X|Z zyu}U%pa0Mo6?;h)Lx_(%WS{)J&oO9^N?+ayf!x%dNX9>2(se71N8sbApIN=zspEfu zc>PD>bo~Jm80&;P%${lBa_!pw_UtE!-3Wf}?6+0?`mZJVXqI}&M@j{KiC}+Cdg|wSe<*{{(Hz-as(|94IdvSkY}}L-m)IEq6wTVSbi#)Z z%T0FPFhlX#V7L82ZwmG9`rxRPGbhyXBmTpWDEl6xrPIz*$h)8enqRXXgVXO-KkV9d zUq)5cw3$yrsL_NEg~G&@KH~gb*2hWACLd?f;S(d?7pE3VP3vpAUFf#|&(^^7fyO==7mF%@N&^H=C5innaWB$@2GEV6&AE_G=8Q zJ{|P4ae&+qF3_E7L>cnIu3<|QM3oCuxlclq4l zq^oB!RsdCIe^sX!_5<}0Z7JzT=?ZW1oRMz1#Zz=D_-?OD`q$_PoS z2WB2qwD_G1w|l7b?Fi8fG~LSUPG2!&1$csNG#eWm@i~jEFM21?-ZnK{4d==_aL{Qc zCDYVm7m&SmmSSIN0m;gZXwap#pnLg2;^!Nnv?^` zJz0n2p2QNor@Q$h8o4I zxGDYvj{2%0;V*$vy8RE{PBoM` zYHDg$sb%hAR3ME+=r}}-4tiQpz)*D;NC_!dVA@VRBu2K6!gXu&hIF(SIPG>1{6*mZ z1;BhV<{alu?G9?Zjzr$`IeAEqEYym+<`x|V6v~I>WV(47X`sgOf{v;oWEXl98ozj& z(P@?K4WC_$T?Qq#L2_v=5A{FO(JQ1*Yef-0ahPQySFF3co9XvKil=P zYvT<$iZ`=)GRgW&t2MeiGl%e;n?Y3JX5j8G@9 zzW8*xr*mb)zj|o6yW0baL|D8o3?of5CW7GLn(h6|!3#`!uCr?p1r*l#jnbla{xV!*-ob`PrckwL#~KtYe&=&J5sAR>8zAoO%(Qhu{$9v(R3z3FgXLU$2u;&VlCp7X-I7+mWK z@Zuik2xw-sM$3IvF)p=f!+h1yk$wP0Fp0cfb8V&v6t;&4c(!k2Y2gzPAQpdD4T%HF zzXhTEwp^nM(&+L3o?kL$jjIph#6TJ~r$50Q(chPQij{=DV>6)JoO^AYo!b7r+ILxG z$M86{9i<^%Fx`HUez+yy<=zY83TQCu*(zL{g3mCon$-a6kfW)B`B{MjKVhwW$3xIk z2YrJKB@3#8LFymNe=(MpPD}GDg!q_I`_YIHLPl%-|Frkrk67-1+$toMQnx}fvk8@q zjIxR{Gop;7LL!nKg_a0MMk&Nywi^+d$t>AXICjX+ip=MAb)M&6cz*g`Kb+$@+^*~T zd_M2_dcEG(N1g`+1RSRj9nnt103ft#rH@Vk*sQ6cL9goREeu8p7|V^RDCM=j6G*~9 zRfxwmr_%*~vikh#)0R1*(jFg(K3kjBlJki(vEi8A#_eBHfi2-nV9Vj8ga3wbeLx=n z5CAdDQ$FjSRt=jVasdv@wz(8QbTQG`KVDvU45c)V9;16bVId&^pRaH=rgoRyPJL(F zNo*fxX1ci)G@>8;+`@5Sqd4iTi3#R#G5<6m_F($wkuvz(NJp~9l`C%o4_zt?(cPo8 z)4!xdVP1piacJ2x4LR1KOb@>cg+wLKs<6^z;Ehcs%@1I;{^sbcMVJrT|r7lhUMntSR>T?S#k|%P5?<_`%_0tQ?sks zQwsNeeFIHzh!#WC89sMUS?Uw{KnAeJT;Z^K+ipl->`~l}5D_((^@sZAD6s3RO>aE0 z6C7|r;7AVIIbi97d=`W)5^Y9_l&J4_Da5m;-dB2rkOp-w`Z=K>HB_J0baGBIQd&_LS4RQN z0ZZjiv0zV)7R|TT)=!=FUEjYmuU2PKU$U_w$U7$ue*yP9DEdy(XU)sY)m)xk8*qj| zn-qXI$H&KYj;IqiuAb0j*Ii^>bq~@zB@LZ+4i1r7&Bp`<)vMY_s^rAP+V5XQ={_R* zMqpJ`5{!-()-cT>S3_MrR7!McVHs)uehO2mJbMF7ujT5Hn%^C7C8c6{5kbKb2oHz3 zPQa$XIwidIw|RI*ODjg^=8)fxUvyeD(O4PEN8|*sFmAMhY@A?&!(AvJTdx`=E0UUfA2aBycM#`Inr}4wlYc-+1=u|HA_O z>Qj!c;~V%0Ebi#MM`h<*4Q%e2D_S@&o~ujqi~Dw?ii>VraPXp$fdOyAWcstVvyK$PG;lO0v-d9TGaxsX$yF@xam;5{zl0ws<&?!kL#V+N}SC* z?K{u_9wBc2{qw;w#%J_xWAoWpXHZcEC4_W!Dgh~T?Y?u>C%t~RU!7qmAzTXzE}M2m z2MwAAI#u@!Qw_SGJ?>MXx<7-oy6DiyX``KEC@IZU(d3#;px(#ipdAN3+91;zD3Dxv z+g0R#*nWu(N+3aRc?!YfBiLA`SUS&<=GVxqE=Q9Xo7Yyp@9%)ZE9#Y@_Lb{<8|NsT zbTfwAXg*sVqM22>JwIvyhIi5A_)g*@SK+regwJkS*S~?@d{K~$FK3b0pBV&~j)wyr z@v|)a8olO#c|ndpGH@%vO<1=6WGao*rym#1rMB88y#L)wzfoK%J|#uNjHM3}EO_eb zYULkzj%;nd?>RPM$V1-A&tMvWX157|*&ud;I+V5`1L2qXv2U9u+N%8l?5a&N;ScpT zxOBUEyt%mud<=*%u>B^YiZm09Z65DNd=w@8RK(> zz?O=0tSmFe3qW-Aq#BLZrw<>F={c!qI+o8C6eI*!`P7K& zvYp*H3bKLoj(v#h3aT}@}&Df7Y?=qfr}_~xpHL)(3VF{hndk@MpARR zG#+RT9GCFxdLhW#`~=k|oZeeHt0>dE-5sKD_oHFNfKM)pQ=!#=dMa7cevtB5sue4x zHmMW#u+L~1hJ*N5!z1$J4XZo}NY31HcBXb#kJ@wtbQ%Ee#HAd)yjBQ*Ewc7uy$z%b z1P#Q=^r3xR>D2pS15I=eEAT`!dy+L?Xbqzo#{Bs53ZevHHCcXoKltfxRT%=7PP^iF zFp+3;c}G@+;H9zJOrS(rMJyf7BgVISmN~HwyKWZ(|dq zquJ*~7~AFh<~@KS+{iktaq5&b_*z-SHd&$3i|ZRPZz;n>;?olJ115PUGp?#M1KUj3SUHk)7O z2x}eSzn0c2>YP+OUvo?*a98YK-lgspGb1{5pKC2eMMUt`ApS}j$*UvtqThJAQ2B9E zCCC95_ZP?(?s#BpGX{C=CWs{0WGzYGNc9e6}iQg!zI zQy`;|okwOF8Imf2vO4*x_bXhag5Hak;aOAst*W4XedBJX5bID2nu8tIIdVl3U|-Ui z6C#ivTj}gs+q2ep-vXlLi7}*`sibVkhNtMaD$8o5F$ zD!QOPF+AXjQhE*s9&lW6@UZ0xO#KNcg8oJeeWzjV*G zDU;fSyX#*IZ*7FZg_$ESjaIDRdCYbP>Gb_5WN8@>CCSc-Y<^x4`w4%vc{8Ah z306$;ICHB@x1j$6R9^_cFj&IakV*90O8If@FrtNc^M80_8-|_UV+u9McOh?|Xn^Nv z_je3Wq)%gu5$(A|LuO*#;Fp`W#Z==lUk$HHqY0lXVOen0{jSOFju;0SFs>qDeWuMnM0q3OK+&8_v3d%VE+@qKio-I(& zZikw}4Ur5ZhCvKA@ae^L1~Y%UG81{U+Vh=zE|epapc(< z3}#X#xkP(w+uEj-SG$%V>?cj7sj%At%7K@5l-xV<;^2 zM3jq0`gF4gjx7!_eGXrGh1H?`K(6+4X(YBls0}ZJwxDy}4;p^4a_)yDCDA00w|eU0 z=C+7n72$2TQSERZlBI;cs$yYe^XRWs(XT9gsjGw2N2UcJ30;+FVV5`JRmkDhMkno6 zod(n&Z%}ys9u->=5eMbuaQak{FJ{A%AsDFHBRerNVqDpPaOBzZKI1+_tf~IfwFy z5%+$xT|eG1egf?hW2swh!Gn)5e0E43rU%c3d*bEzq$);NfrGkGUju-VRfJ`QX`+7dz zkmfv%I?BGN)4+XZFL$7d+};k>9q#p=Yjs_@1%fuXIrPa5Y^6nng~u>DK;pSK%|`K$ zX+=dB5?i_;5mX}?p%B{uWER^KY<#fe;Q2xhe)#1kheA7S!CNL#_XejK0l zm490z>WeS6TnWP*>2sRQ`~o;d0EJ;eLkyc^qoOj~?O-Kp=riCd!RF2~_f4)AuWQqi1*_caFgRCHxNHjVKrB z{foEdv1nGFj#KV8Cf@ZAHg^6)=s*XBE47CZ4#jF6EY45OX=i#C9}T zI#9kHla^k@(SUkfuhde>ReWrd%kkAhu#ll1i&2AYKRmS5u|qIfrOA2)BNy?1lx0`Z z{OUk7j}qGtmpLpb+c6gr`Z01v5R~xn2H=-_3n{SO*d_oWBIbsL;+mjF0S}3Dsn?%F zi*+7TpX=)tT*l8?8ClY*?;d0-xSeoza+zYdKD~t{xxYT3F_)ipv8P@n&!?9v5Ou2v z?#T>#Q%@^w0c;mNarIGWqA!JILG^^jhYPiTlwV$GT}6kBo6_ovc@OaQ)z(XrWSK=0g|coDlJ7qIrpw-ZaJb1f7np!p zUk7ag|NbF*UyGyB7@L7oZg@vDp$U5E(9BTXzQh)mmFEXf>{QWRfvSpv82HbLt! zT2DsHiuC7D;+r?b-1_sO%C0#k*C9Fq>NHUY=lAF5=ikpzjd;QL!V2_~)}X(o)^`9q zSHX4ig81+z9~JaGus+!9#CA8|FWSZWpu7oQH2!7{&Ojb?%yhi2T$XuR53?<_tcmIe zUO09U{;5%UI<`UT$dLo-d|R{ELJsio3}B;kq#1cl_p6S4A8liozcrvVG^Q{ zIE&|2t7D}dm3}*_1dL5imbgvF`*s=WlD@&t85%}JMke-_UvzP48+0o6nAZq>=`odM zl8${C^#1kZsf)DCj6frkTW!Oin1xglFO2fk;4&B_+0{ZXq!{u;NMEv0M zdXaO9{&A(Ak%>1}z9HY_q$5^y>ZF3O!gs z7)-<$P*jECVq#l{Uu?R0!0zYYH4;Z(_BvG<{Ur@4DS7$Z^F0lygu_w5up(!J#K&cA z3H38)fZ2ci?$J|x5*9E3*!6TwEoh@irlsZL zx?ZY20}&61O8xUse9MT6?$;40enFrO$;F_#I@*{yr1-ws1tLJ`%!A_h(Cv_RyEO!u zICIL51ycYhs^!KN3pkV$8f^E1v6bK(iiQQTV4W9MXp78E)-kC{Kt7`Gxn%S8aQiGyI$_tgfoVu#py??5z3{d+q9-VOh;LTB z|D@9L&rq}j*bm{OZU}nU*47s2V;;r-oc%*$6ZJ5{OE@Bypo!Gc?Ux0j7L?GG7V^&g zy_}t$(^g*NZ2mo->irZvr(x>t1zz6bLqVrB{)svo{er>g9 zU7mr@fqJ7jw*Wu?a4Mw)QOMRS$J$G=S9h)m?$v+<+kavyx_VSL4HBlB zaN>M+RfnvJa_B-`)qQs8)P6HoMqw#eI5x6RXy-(P**e$ic?E71+Te$qE;J{^#r1;k zicD>r?r|n+E@!_xGBPp}j)p(b1I0L*gXSe{F?%0042RKPFaPD59;3gVU=e05rhvZH z0|IH~ zbMSn8R<{3}2D^wVE}U-D3vXVu)G$Zw(R&&?TE9L}$sUDY7Q;bTT=}I;wv|440eK2? ziaZ?0@2kY-l6Cq~19<19h0}}D#b!N?jhTqMnjOec$bKR17@s0kAT;iO3cCrqLHk-7 z{Co6FwHcb!Qr@vHyyupZS^((Sd%?LRUmrmdjGa$y7TLHFguzo%2mZlJ7?>GC&^pmm zs(8Q3o>*6SfvUy`MO_kjVQk9VkuTuZ7pDi1s0U8%ZE*;Xj9dq;x9Pq1F&)@JMW~6a zFkJ(fiU6QuqoIJ93%xnyQ-RADA0l)Cgp&)Vt9iR_R6)%6Llc-3q&}CO?TfeSDJgwK z=+%En#w(=Nb`?@f?*E34WA<-R`x4;%N-1sT^2Rn!?H7&3x)U^jx9 zrSqx5>I{}{b+T~EvfqYHAl;A{4Vuq}nL8(zBTH9!o3Af2udn>$Abv-A?-6y6>)y@= zQ~KQ~S8?9C?(|$m_x#RHFM|PdZ*JC0H#{aQ%Q~2NGd%_l9A-VHMWtMsREg(CV*q4Du}B)0;;iQR=yv9=a)K2PC67H}Ks z2}%-S$VPJg12ItWBB={5WaQ5k+3w%vdJoHgBW%;`Nzj!Q5b{*%}b)myh)UQ%YzSEApfs;Y{&7OqwH$P^harlBS! zCFyk17ce2U1<4XTP;}M<-ZKXI`};#IXry=fR30xY)84(%nIY7-^YWyI>@zs&0N243 zWaHIjlO}b_H^4bF^Ya(c5_om&t>)3x)+NBqE0&~;cT!`SF4snYUW3juW$jdJ6nsK9 zl*`fH%=aPWIv^n1je-!AHY65mP@ww`G%L7g{RvC<7yhYYKo^8!TDT{EprV`)9T_w> z(T}q65}SDA@F3}uI5XH+2#4U1;}bV_k3NcrmZGtNL1m!^sS=@k_|vDvah~^UWQ@eT zKeT}JFN9Dyi_IXz?=mu^mg#&m4n`M;pY`Uo7{z#SE^zoz9G}{6O)|#odH6Qn@mgD& zjPp+&1l-WShFmo{dbbEZ!KUR6s`07A^1Mv5SYm)^FhDK9`KF;Tq<;Xg!SXe4FDs1* z4RyqzF`%w7s@#9J;?Qe!9p(2}X4J=Tqqa~<#-aB0-56ch*3`r(+`yP_2&sD$Q`7yc zxmM*wkpT7!C{dVGC~7=%zNvt7e;J({Au$&wwA5Fi+lm6Jg6D6M=imD2VazPC6=1Da zG+or0qETP4Of^LpfBlNo3L--`ZdQvEaWV(cG1H`xibrBX4>bIdx zjbdWO3T9N}<)YiVWB&c^6WF<^Uj+?FCQYZ{mce9(X(oET?{?RF2OFlQCnvYRyMCT6 zt=*V+qjDCv7QgtDi=f?%g=um88O;cy7?tt)<;mH zha^+Axh(xA^h84EB3xg<-h$f)AAN7eXZo4HXVWZ!e%UPNhGDjv*NP+H#ti zJ~|hPs}FMpkkMg+?j=iyOfw1v`#U4!$#OZJp>lyA(l9ii5mhwTx%XhVqTH7@B&wgK z)zO%DvHU*P2+ycG%PknBb{3kPNSP4B;Q*x3eR$}i_YNAC(C(X>m;kFYFoks!Lc~hU zdQw$&H0ITI#KyygmJv>nlk7_v)lmD;kg%}XPyDeJw8Scb`Z4bTz&$k5RA?n(uOJG5%@e4WkR2=2$WfdB1^uJE($XILypunMkai(b z$L;9^UZZyQ;c>f(?k(D1u?n|YM{jRdOK=441)CPZLwpZT7{X9QMHNP`wh|lK%*+fc zi~8IJ_QrVW;Oa|n+rh`!&v0^)!&qHi9foDSoMSC+@$Nu_srUOYv)VdI0D`1Jux#y!|i17`e`Jj1jH`WWiA8a{D{zP*gpth)x zgVG9I(0@5g<*{}cE`T~vCTmtqwr8?M(E#dJ&FT6nv!PK@P}+rjALNX9_A){(^1ahd z$S;uoyoeXT(7!a(La222SY|aoT6qXpUD##+wjCWEtI{PTWLOGhqy*zw=pJqP!1T5q zJ4!J=;KmII?Fr5wE>%ix#b*Eq0TJWB>93oz;5CHGy+#^cB}fc_1j;qRQ#oXv!ykO8 z3!<%u3OXVv*ar6@__DI9G#)Yu#ihjxeg~k}5G71!AZpe3&5g?&`@`Sk&-NA&d-JuBl_9 zK2h-AqgX*yv~E%Omc1E$GkiZ(Ss{jw3tu2e!p`w296w8{eCmp@4X{hW5|y*^aOH_> z6r_eY`N7q*p)pZfiQ+|Rb{Ioyr>=5B|Gc||y7ti)3W9Lv=`GQy!hbT?M6#fz1wkw? z^0ik@*5ty77cZay*p^{>4Y<}Thl52{*hd(%W-jr`b0fn!xkpAL_#PAXHY|)@|7Gd% z0YDHK8z|(&M_*HSs)j14*rAFV<9cd!o8W%c0vozEPbp->;nB5IHm8927&Hfd<_($r zYb(=HVKF{I9h=;a@D0X>hfd01P?7foLTig|j3+KGoI~8^)11cSV6MQv|Hhxi(FclP z7BLl-{$0$|!=-~77xC}oO#gRingJ&jF$3;@Kk&czKx_l5|Lunl|KHz3pU(#Wj;|F? S-u=SF-&R-EQpr%V@clo$q<(1t literal 0 HcmV?d00001 diff --git a/cloudron-headscale/start.sh b/cloudron-headscale/start.sh new file mode 100755 index 0000000..7c1ed3c --- /dev/null +++ b/cloudron-headscale/start.sh @@ -0,0 +1,50 @@ +#!/bin/sh + +set -x + +random_string() { + LC_CTYPE=C tr -dc 'a-zA-Z0-9' < /dev/urandom | head -c32 +} + + +if [ ! -e /app/data/config.yaml ]; then + cat <<-EOF > "/app/data/config.yaml" +--- +server_url: $CLOUDRON_APP_ORIGIN +listen_addr: 0.0.0.0:8000 + +disable_check_updates: true + +db_type: sqlite3 +db_path: /app/data/db.sqlite + +## Use already defined certificates: +tls_cert_path: "" +tls_key_path: "" + +# Path to a file containg ACL policies. +# ACLs can be defined as YAML or HUJSON. +# https://tailscale.com/kb/1018/acls/ +acl_policy_path: "" + +private_key_path: /app/data/private.key +noise: + private_key_path: /app/data/noise_private.key +EOF +fi + + +if [ ! -e /app/data/README.md ]; then + cat <<-'EOF' > "/app/data/README.md" +# Hey there! + +Configuration for headscale is stored in the file called ``. After you have made changes to it you can restart just drone-server by running `supervisorctl restart drone-server`. + +To work with drone you need to configure a provider in your `.env` file. See https://docs.drone.io/server/overview/ for instructions. +EOF +fi + +echo "=> Ensure permissions" +chown -R cloudron:cloudron /run /app/data + +exec /usr/bin/supervisord --configuration /etc/supervisor/supervisord.conf --nodaemon -i headscale-server diff --git a/cloudron-headscale/supervisor-headscale-server.conf b/cloudron-headscale/supervisor-headscale-server.conf new file mode 100644 index 0000000..a2b6a1c --- /dev/null +++ b/cloudron-headscale/supervisor-headscale-server.conf @@ -0,0 +1,10 @@ +[program:headscale-server] +command=/bin/headscale --config /app/data/config.yaml serve +directory=/app/data +user=cloudron +autostart=true +autorestart=true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0