From b721d0bb1d7709fcdd23acb0a3c0d390e64a6236 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Noah=20F=C3=BCreder?= Date: Fri, 9 Jun 2023 15:23:55 +0200 Subject: [PATCH] Add forgejo --- apps/forgejo/config.json | 18 ++++ apps/forgejo/data/forgejo/gitea/conf/app.ini | 88 +++++++++++++++++++ apps/forgejo/docker-compose.yml | 44 ++++++++++ apps/forgejo/metadata/description.md | 6 ++ apps/forgejo/metadata/logo.jpg | Bin 0 -> 15304 bytes 5 files changed, 156 insertions(+) create mode 100644 apps/forgejo/config.json create mode 100644 apps/forgejo/data/forgejo/gitea/conf/app.ini create mode 100644 apps/forgejo/docker-compose.yml create mode 100644 apps/forgejo/metadata/description.md create mode 100644 apps/forgejo/metadata/logo.jpg diff --git a/apps/forgejo/config.json b/apps/forgejo/config.json new file mode 100644 index 00000000..40711b53 --- /dev/null +++ b/apps/forgejo/config.json @@ -0,0 +1,18 @@ +{ + "$schema": "../schema.json", + "name": "Forgejo", + "port": 8195, + "available": true, + "exposable": true, + "id": "forgejo", + "tipi_version": 7, + "version": "1.19.3-0", + "categories": [ + "development" + ], + "description": "Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.", + "short_desc": "Beyond coding. We forge. · Lightweight and performant · Guaranteed 100% Free Software", + "author": "forgejo", + "source": "https://codeberg.org/forgejo/forgejo/", + "form_fields": [] +} \ No newline at end of file diff --git a/apps/forgejo/data/forgejo/gitea/conf/app.ini b/apps/forgejo/data/forgejo/gitea/conf/app.ini new file mode 100644 index 00000000..48e6686c --- /dev/null +++ b/apps/forgejo/data/forgejo/gitea/conf/app.ini @@ -0,0 +1,88 @@ +APP_NAME = Forgejo Beyond coding. We forge. +RUN_MODE = prod +RUN_USER = git + +[repository] +ROOT = /data/git/repositories + +[repository.local] +LOCAL_COPY_PATH = /data/gitea/tmp/local-repo + +[repository.upload] +TEMP_PATH = /data/gitea/uploads + +[server] +APP_DATA_PATH = /data/git +DOMAIN = localhost +SSH_DOMAIN = localhost +HTTP_PORT = 3000 +ROOT_URL = http://localhost:8108/ +DISABLE_SSH = false +SSH_PORT = 22 +SSH_LISTEN_PORT = 22 +LFS_START_SERVER = true +LFS_CONTENT_PATH = /data/git/lfs +LFS_JWT_SECRET = wo2G20l0nGsspUp8xsLNSNF7H8U-GQUVth5gj_q5cDk +OFFLINE_MODE = false + +[database] +PATH = /data/gitea/gitea.db +DB_TYPE = postgres +HOST = forgejo-db:5432 +NAME = forgejo +USER = forgejo +PASSWD = forgejo +LOG_SQL = false +SCHEMA = +SSL_MODE = disable +CHARSET = utf8 + +[indexer] +ISSUE_INDEXER_PATH = /data/gitea/indexers/issues.bleve + +[session] +PROVIDER_CONFIG = /data/gitea/sessions +PROVIDER = file + +[picture] +AVATAR_UPLOAD_PATH = /data/gitea/avatars +REPOSITORY_AVATAR_UPLOAD_PATH = /data/gitea/repo-avatars +DISABLE_GRAVATAR = false +ENABLE_FEDERATED_AVATAR = true + +[attachment] +PATH = /data/gitea/attachments + +[log] +MODE = console +LEVEL = info +ROUTER = console +ROOT_PATH = /data/gitea/log + +[security] +INSTALL_LOCK = true +SECRET_KEY = +REVERSE_PROXY_LIMIT = 1 +REVERSE_PROXY_TRUSTED_PROXIES = * +INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE2NTMyODU5ODh9.l7fPuVA8LSHZvdBum8YDrH47RZjEx_cZLbswO5pMDk8 +PASSWORD_HASH_ALGO = pbkdf2 + +[service] +DISABLE_REGISTRATION = false +REQUIRE_SIGNIN_VIEW = false +REGISTER_EMAIL_CONFIRM = false +ENABLE_NOTIFY_MAIL = false +ALLOW_ONLY_EXTERNAL_REGISTRATION = false +ENABLE_CAPTCHA = false +DEFAULT_KEEP_EMAIL_PRIVATE = false +DEFAULT_ALLOW_CREATE_ORGANIZATION = true +DEFAULT_ENABLE_TIMETRACKING = true +NO_REPLY_ADDRESS = noreply.localhost + +[mailer] +ENABLED = false + +[openid] +ENABLE_OPENID_SIGNIN = true +ENABLE_OPENID_SIGNUP = true + diff --git a/apps/forgejo/docker-compose.yml b/apps/forgejo/docker-compose.yml new file mode 100644 index 00000000..013ee4ff --- /dev/null +++ b/apps/forgejo/docker-compose.yml @@ -0,0 +1,44 @@ +version: "3.7" + +services: + forgejo: + image: codeberg.org/forgejo/forgejo:1.19.3-0 + container_name: forgejo + environment: + - USER_UID=1000 + - USER_GID=1000 + - FORGEJO__database__DB_TYPE=postgres + - FORGEJO__database__HOST=forgejo-db:5432 + - FORGEJO__database__NAME=forgejo + - FORGEJO__database__USER=forgejo + - FORGEJO__database__PASSWD=forgejo + restart: unless-stopped + volumes: + - ${APP_DATA_DIR}/data/forgejo:/data + ports: + - ${APP_PORT}:3000 + - "222:22" + depends_on: + - forgejo-db + networks: + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.forgejo.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.forgejo.entrypoints: websecure + traefik.http.routers.forgejo.service: forgejo + traefik.http.routers.forgejo.tls.certresolver: myresolver + traefik.http.services.forgejo.loadbalancer.server.port: 3000 + + forgejo-db: + container_name: forgejo-db + image: postgres:14 + restart: unless-stopped + environment: + - POSTGRES_USER=forgejo + - POSTGRES_PASSWORD=forgejo + - POSTGRES_DB=forgejo + volumes: + - ${APP_DATA_DIR}/data/postgres:/var/lib/postgresql/data + networks: + - tipi_main_network diff --git a/apps/forgejo/metadata/description.md b/apps/forgejo/metadata/description.md new file mode 100644 index 00000000..e8555c16 --- /dev/null +++ b/apps/forgejo/metadata/description.md @@ -0,0 +1,6 @@ +# Forgejo Beyond coding. We forge. + +Hi there! Tired of big platforms playing monopoly? Providing Git hosting for your project, friends, company or community? Forgejo (/for'd͡ʒe.jo/ inspired by forĝejo – the Esperanto word for forge) has you covered with its intuitive interface, light and easy hosting and a lot of builtin functionality. + +Forgejo was [created in 2022](https://forgejo.org/2022-12-15-hello-forgejo/) because we think that the project should be owned by an independent community. If you second that, then Forgejo is for you! Our promise: Independent Free/Libre Software forever! + diff --git a/apps/forgejo/metadata/logo.jpg b/apps/forgejo/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f871c17ea8ef2c0ce23e79931b4427449b991d99 GIT binary patch literal 15304 zcmbumb$pvW(k^U=nXzGJY?wI>Gcz@5n3*d$5&{Yi1`ZAu1{M|`0R;&j0T}@n76}6h85Ip39UTr46AJ?k3k3}w?KcS!^xXyw z92y)P8Vw#69_|17dg}ooLxBK50H8o(00=S=6dCx|2fzaW0U)67?gHPP{l^6f1qKfB zUI+aSYh&tgahSkuuONAwdFxt`(dH-|A!SE{YNQx z0ihNsi527+EuJqnORSb|cg9-?R@jtCI>4Vz%kx``gS@SIef&PeKwB*ur}NQs2tSa|3jlyHtz`b@^YCP)WYAcG+qYm}Z;QduW&dL8 z!YqLL5~KwwHR}5(%fh`sVGGSP0xz$6WM80p1f%~rgJ9AA03Bb(D7-T<#2?!tm^HJ58vpoZlk(~1 zV0O9iEdd{*TJa@!Dr%5S|>xv#&7&Yoz1pZ0&41J_iwXz0gh{pUGNz_7`IXz zL_C^STzK57KT5;*PnCbl$aP92gXmG;k!F3Z%A|?d@8+kRcv9a%h=w+c(Zvq(qMiOb z)o&K^x@_lPO`y`)Ia|rQCgZn-&tv~!g9_%0H9BrshAOe;PD{s5D>EPZ{b}K>d@?hV zqpsJl1&_ZSPyB42&1weSmj@ivymRhCMn@2QrB=D& zDOkE4cb;=nl_%AYR~|XJeT6Qc0&sED)Pw4pxUJFY4nB1xH3BDFAj`CG6q{FH%k~Hy zdG5IFA;)|H=dA3YKJlyWTpv9D%?1D=ir)QXSlj5jYG_f3s3-7gQT0_k;{E`2Ucl=L z0I;B`&$N)1w+Xt~+Ts2lUDvAZ;lyTGjlGh&-l;Ef3A`Kng9}Vp`-JTCR)tS@?JQul zFY8)toEJE!0Q~u9C;Ura!0F7%znQy^=@)?hMy%BVy-Qk+@L%8`ui$1uU)3#A+Jtp& zp_!LeBINiLz+&+KQ21L^{bX(u-0U&Ly5E&-#j9TT0xp1p8~Qi=Zvm)5RFeE*@0{>Q z28c%8jp6JsbigNj!hb9LEzNH$z0hY^^kv?3;XC;KSP5rpUEi~zNk4Lj3FI~WTkUVb z^$y)=)xRkrsUzgagiXBdX`|csnk)lclulrs6%}xJqBM^;Yhr(U#cDL!lc3W zImklNu&`FzCDN$P2=DM$-)^}H?8VB}d=x_@=>n*PTIlK4Q`Ld(NlDC>aCzKv>r2jHwmrRn3Lp zv`t0HWbM;)p{f6x_!MV%7>Sy~^g5^cV@;Csa8oZxAs zi1N{fBHjqs4=a{$fMqxG{Sbc$d&jhE_AYHQt^U4|7#2)$H_y`spHucGDcbE?g`>eA zBz8ALtE$dyi7gf2t0>+$Tsz8ONi?ELer+AjEBv?V!?J$J5^&RaEorGr;QDC+V;2p} z+1j!i$%_0Key1s;O2R@3$~4*?DP@TSp#LCeVs{$snlWNDF03k2F~3|??IH31!DtnT zM&E2^BjoWHvsr^6+s>F;L{E}R=`b2Ad_oZ~RcTbw!l-EjjTGlZ(sdr$9GMCGO&OFfly3$6rB`5AK9z(tzP^vdpa z8_e(H;*G20&1n0N8cGxsB4V*ax_KV;@J3qKoffT%M{^r8?K1OdfW@UuRqk9S$`vp9 z!0?KK*(&s`>v1W(Hn)nP_e%JOn8UEAbgUkBzTTN6vMa0`ebm0SX)N$gfFJvu-Z{Er z6}BPgz*(gCV%6;YL-AnWLHth3e)0kHV>*B9O0v&TbLRBR`fBZ~=-7VD+3jA=6}>5o zk4q!%8z9aBMbStk!g&?CY4>*dx~{Q^xTrr3CpjYx9}2s<$24*SnNgZ37IjP;a226~ zBeP`teKX-=<>Q3bl@(XW^6oW;ZuLb=-OPqP32lxSL1eyH&657lPhKJ59@_OOC2`u> zCfKXmANF4Ad_fkT8scaODs-`zSKG2S4;1&O*tio=(uugq26F9Nv}7I6@MW)TiX0AU z)~e~aQqt!o^S_YGd5{%VZK!VVUNh1M?l*fm=1t#po+W~jH``-6+1a~1i<%JD7kSYj zrq&=IJ{Pk$XfeyN!lA8Vz&8MzRfz7b8HI06u9PfU!IB|;*J-Fwro5!+ z?sAUMmsm`S88x=89eohdUY25}eb_8H-6!ReXaSYSDVLKIp#+*G!VLC=c$LRF@L=hv zvpcWT7nYbik8-(!M)01~M{$-g>HZIL)IV9(1F!0Yo@~dSC}WqtjEl`+E1N3MG+M@P zcCu>HA+#@qh(zJc=oMDvz?$!t2oe@AD<_RQwzMtr)5)=XRl9lvVAq6Ir5OmjE*?1+ z$*QJb2%K+yP8WuPZ=eTFE(|IxJg-ar8GiJ|eZVp+{A;?>@k9OR5wajjXq@1F8Q+p~ zv*!Yx3@bWPB9Ki^6lw*-&F#yYnrO-wDvH{Hjk!qg-Ze8;XH(jSIJ={9a#U3CN%ALF z;lP=?I-4CURku0DB|G<^!j2LKsy&-Ufli>gB@+yX*vqp++qK=4w&N=Jw}tgY#}B`h zHioSFS#s-eLhJb&#$u7~@+)?-MZOw-li1TS&r)%i2)7k@9yH7wxDGQASG2pBkm+mAPIQGU6v|SaxWn z9n9GjB@x1dxzQ~^u|cYl zS0+Xi&GhlmZ)|_&ZleZz4oHr`Mipg2cja6)kQA{6RUOSjc4y~28B-%o^%!Cthro1)1|vB;f|e% zNG`4#nK{L6DBn_7&dset_&PfI@_VGtBs8P?e`GEXbL?jcVeczoR=wj)3$P`Wv<@<$9%0;s9R$flSu?f$2fn8Civld5}M}S z)txy(sRqdDQgp}IKUr9mz0Bb!TyVH%7B#H8?QoPiM$(AjDE4dNh(Ai0RQooR$z+dk zc~DQybOzbwCaEK9xxHIU~TGV-vMC0f#(C%aJevZ+XG(dKjUd3i#Z#b*Xz z>Dj2)pkc)3b<9KbPU8u#Bh1HF1jBK;?{9(tC2N}+*-XO8bHchj`n}uvPjt3XcNCC0J52G^XW3S z=owA9Z(y0MtY%Ul321)(YEM>u?6r!NC}!hU2sZVQe00JHY>5ww6f9ZzSUutFA@R80 zXIfZFBQa3+lZi3d#JmH&mLxY^U`_()urrlsEkg9_J=&sNSem++}81GXGU zCEyO(izv(X*$3k_PO?f!DGfPgY1!fnBo#EqtfkqNnR+t6Sh)mE>2&=vP2$*G#}u@r z5;dJUK*E((64AH)8m)%nrW8!Kr0XHTjKPGSt-Gg`nRwnrYp7P=k93-av!ZC5d!%)Iq}BVH zBO38*_OSYwLIIy(PgJ3mp!c3_b1ohyc$_AvE_MP%32Z$dvog0k?)tqF0?5vo{qjtxUuT4LvzN3|>4S;X# z6^gfwlLqJEPE938pRk+F5bP@YBn5+TQxtE(bkYGrG@gK+zz(ozF84eYG}d z=_qy?2jx{=8E89`^z84+^Y5=%H9_@F*W(&2)%<4}$8Bz~5#HTS>e(Ea(orU~=m}J} zW?#aqANgA}HpECyk-~N6_oJO=akSFDkLF2q2)8Rb?`PLjhBGBj7tGz9t9ub$O`5(fmFkLEV3oiEZbw3Kd+N06&{XePPFu~0STfeFCL zLi@OY1F_Ato4d@q2tQ{!8oF&xW?r#SV1%uF$Qh0QuKn>gcNqz>lVi}7_R^7$?@ZMb^w`4w*izQImfCWYEGrEBH3GCNzGe6li zop}?Pm3PtmaU$sTp7K<|)%6M2p)yzKlz;l9I4q5)=IuV7=fv|ftv07iHD3wiW4sm* z1J5ZP#rM3wV;HJuezTN(KC-elFkflX8l2~9(cn=x0d;P1tNZ{zb{RLpc)L&O#@BlE zIa@TGEOdE%fO5**s@~PkVx?hwT1b6amf3l^NP9b3MR?+ieis8amS!0(af0ySYNfb~ z(qvt2p~hbxSZ7|sv(#77i>@3eTdkGv99!v}mPyhkkM|rNw0*f_6qDoZUir=Z^i{l%Qs*H! zrkXacT3pG@gbi5`&mE`Ja;zS;&U97nrsx9kbEJ%J!~Pa z{oI@nfypb9sANSXhk;`Dw|SM!+Izz@a@*=tBJsFOYpk}BP_H06U6#2L8rw~`q z&C@&yBePW_H4L0?T&B7TJ8D=N3>^jQ+lXm;Ox{Fw>S?Ha?EvO?&!!ErHVDvPhU?9% zw~`)%P_X31QDD)Z`uwAGAilG9tIy$aH`RW_r+r#~#E zz4!a!Bc>rkzCU_PyjZisr|;EUwXh8jHJKMN?ZF#iof*o7Sg76ogNbi|x`Wi<2f+Qt zJoSS5NCt!J7UzCpM;<@UaU=y4v%hOFYWDYl#hZ*n*-N|*45x$dja!3P?Bhf1W2S$J z76-dH`yc1EE_NPRudm>*v5(8|?Vi&g9v~hfZ&aT-US&L=13U-Z%=^t1(2REa1$peS z3Pctbeq#5=?0C}9VYCEEGD5;9qRyM3&?_XlUbp^ZRO7vmYOOWFFi420`taJ-29=>+ z!Q3)ozhG#Rkr1wABl`kq^2p8X+ZZF5i!TSu@pfN=8koN(^$(9u0QGqBm)~=F) zDwgPO5<6SF`ia-WotB^@UJx4v=D#e}aO;gGsp_Z-n57AwT=By7N zua76vbG?eP@D_=FMPn9DQAeQZgWNWQJTQ$Na(T3*`UC5g z6?TlK_uFhE%>ax_&g&Z{t9mD_&292>Wd~S0MprjyGlc}|pR~zHm9>wR?5m#z-(KEu zRopI^V0;qW@{rjcZ7$98u4p@)A#5Owh=SQ~?Q7w$8 zf>9Xa2tWI4supF;Hr@u_q(6Qk>c`%2mefE81yjSv_8aG1EY~tEDy`CNKV|g-04Ue6 zYFW{o%?yVqy)mXOdqyf81F?d`Iy;7K2lKDS>{uAeLmu1y#tmZ5&$#)iqq#SNh ztSw_G0*`o>Z41X2ZIkVy4H5Ju9n}PR!WQ@+<0HT|$->F{O0z4-qD*9dMu^gxhZEfz zSB_+x>(bfIOe?7IO-CqhW5tuM=P&YK%e}9xXp!F2_&{)|_bvQ?Zj%F%0q=_{1p`8P zyZ6jc_XT4$(zL+VrLX?KlK%We?@51_3jvp+Y3bHOl|lzHIS}uWL@Ecu4Yk(nNT4*z zJtlf(u9T5)6?zD4G$gKe@k?2SxJO^l5Q7_9C0bIs2h)9BZov_&6JVletZ<~xT zjNqr_Dt?Q-q-*4i1DukLg19?o9$w>FHeD%NYrk3(Xpf9JRedXJOlE z9(sk7JQ;*IxT_{hMY>5bz`!g}d*V(e<#N)F`tlkP;H-9$Jv*{RJq)V6<8WMgyDCZ? zW9Lpb=q|iNo#gzXkD;`5(w-J&P0nK|hWppOzG~-<)`Ma~*JO@yS`(FRoPBbqRBX)*;xTBhf2IMN41a z^Y#V3JiVt)XObWL<*DtIH6Sc}j-1cJrK|j|N~t(8X_@N#)wsv(xo2+~@3|$G>j8Yl z!yAC4iY;N9F$z|9@PZlBF9-VT)CuMqNCk%5Ktxy@_b+kx+1=R{2Z@(HpYlrk8lLA> z-E4Znh$8)D5&}$za$V$uMs~yfT%P8nVCk^F6lWguH^2_UglzP#Dt@^YVu}=`Nl6~M z5wsx(=v_>gp+w`-y}kL#oGyv{s`qPU8l=_7Q=J`t6A$+ETN{>U5v{}N@(-CG>)WS# zw_}IL5M)V?%|@U;rEo`V%wH15br)J@!q@dgL=Q;bmRz2}p2<+IED|2E)I7uL(g_)( zTTrxCEOO5pae)@mC0{Q>%T_4gi@_j|8m@7X-(s}LZu7qAfk0w#c@!X+hhf%eeQs0PX+t183AzzPDlSQ; zmr`Tp&jJQehv=fWTa4P%++FrmcrZ}cJ=$w(f6-ze)!&d%0v{ioT*2+u1c-@Evw!8Q<}hwnc>eij#^Y4WiN2Hmcly>c+iQS*%Sp{tJMMqV_- z?Xb-gPB^zx#-B3M#7th0oL<1oNOR@vSp4}Op6!mbwqRa)RDh=SvCX`y?|D%*TUU4>aw&5 zT(O~IdZe+z;aE7s^AS2@$NUkNMXtKtWsEaB&igj<7wcpf!ea^rzcr5N8^Bi^SLE;w zFvu(<0ZmF8n~>^nqXDPMnG8-wu3@(PIgT1EGJQ#nC#u(&(WO1&YHm8bY1EVfGRGfk zFKQGkaX~Ml>tcAlz>yjW!ck57+l-AP<9)0;&_lxQWx9}UQ%Kw$nC#2|-$C9p6@$bK z6D2kW$+fi}v9kTj8rl%}zK^txZpc3&6AElET`DN}wH^-Z(wy>5SYKk1`08-s*WQN{ z7&|45sGlrtN6|fFg90S0H|wD*Oe>HvW77uHJu%$^+BndpY>C+7U=Re!WHD88+|v?5 zx04JbnUdK3ELcDc%D6>{o+NEF7kN+Q>j(RpEY7WVw4MdGMyoKx>V`>9TdJH2Rv2M#aYA`vmHNGaw5Awu&$i>9uCQw+L65djn=vD3F6W|RsK zBv2CekO{T4b|k2H4wY}DQpr52UnaM;0zS|pbk^hgcL`wIsGD0`L;EZJ;D)%epT2-i zu)Ouw4)1{52%lTuUeupqQD(3_kZR0Pt%riq{8SYhz0}WflNs*+zXty^0!;3+= zjc&MbF4DstrcK>e`GP3MP(43ioj&dj!1A85_~-dC0O)(F0_l2^=l`V~oVNWJ^NIGS zH^9sP35?a^^mfixw)y;LleeZm?@j?;H~KnV{sUorC;7+Y)o0Y_KdgpdeghXzaQyX? zod1E0{|0VwuP3XXUQ_58%ieZ9iKw*o{`{Ate?4DxdNsZQ{{8;nn4Z_49{#)D z$7|&e`@iciZM^=L{}lfJ>I=@jOy&MdyB@17w;TVnp8jrw^S1JT)^px&aJqE<&w7U0 zQQiNh&*Sh0@JRbF4e(r@Yyau@|3ZFWeNrR;UVTDP#qL{MS#LsKh{tZ9gxBi!juOVT(H_Wr!IDP>Dvmi9^$Yb z$roz#C)%AgQCQTN;LlaR_leHf#5>!a`e@yJ{a1sDSh-K)7RTzF<{=y z=F2FSlgt`w4VG<}lukcyKtktCrJaUnCVN$HKH|FF%?yCT18|WwhAQqWg$Wk#R zjI(-HdWswO!3IN2tO8G)4%`5s?~Wn{2fN-ks9sw=9hB2~`nk(EkYR$T_m&4H9L+3) z?1f4{{v%6P1%BPytCjZy zQ$P#N8OaTGd;0T7$dQ^&2$E_~-a(=oWsqHKai#bd%{FsynnMJIMJ=BxFU{KTaTG)x z9ncmSjKsc__@QCAYk}QA*d-M+V~*!{lrFVkq<)1Mwu70gf4l(ie_2=nu-eMG=159H z!ig$YS^LLFZh^~m8-noqagjwvmTa;z;mR0q!i$KnZC>%0s`+y;)MFr_BS#vZ+a+%3 zN5rV^lDM{xXSq81_+0k*>1{sj`ly!s$*YsUuL}EEQE9s|8gs>}N#)~%^_c_^sej>M zORzt{!-3M7Y(_~#uI;{)s!rj>2vi7{&*!c`2M+}shq;$rsCUYHExZA~KGn0$QGXS( zWA4i|8~{@!L!IU{il}O;A6`f*KPT?r_G|zE2Q(@e>^o_h8AgVuRgTvyERHJgwDx8p z6Hk9n=r zP`BJo1P}!2(v$eQ>G7Oz&hKd5=(=2(UzR^sa#E}6g_&HLnXefJBY<@15?1Gf=gQkp zb4A5p<>BI+=bBNFVCFGMi9&7i8_wI=)cAdZWlu^H$~wbOFewa@gdf1K`w>Kq|Gh~^ z>@j+2JACtbLe3TTmB+y`R$XW{Ge(201|xPEh2Oz8AwgU zW5h2t1W@?nJ7DNKXKgF30$5l{~1UCpb!xMKJ5*BKjVP(`##q0cOdDWCaiuBB#i$!((rqy z?sp(rRY7c0wLZB6pek_;$_k`6AwA$%AJsec;L-lzCa=QQZRFV~V@W{Y{p`Zj?P?LL zq5F&cHl%1q_{=Nc<19jW{up6n)_B5A_L#s!gY~N;yC&|U0UI{SqUrJgz6AeHfdi&M z+G*PGH)!`-+xEq)8Dzar?dx|ELf@_405}U6I{Nc@9vR{1&s9}%EaNDZoHrCvF_DZ* zkf*L(%2JW6d~nXelqr>G8*CjQyhQM+TpZCwkz>a$%-;wrZmAb*7D3NEQJ#K5G@lp^ z4Nz2}s%^@LRhv1P@G1FIjHUE>tIffP85bTU9%MzLv+nIQ&1PMU2-r*fRNkXh`P}Wn z68A*AeO^Gfs%zzn1oMe-VpcFOhI>6#D{jcUX#oPc)WK+UL=V~#EG`&uIA?9tJVu0^ zVEik^$a$N>-Q)}+Bn6LyLfm%+f9}AXk-UnDv#id{C}VWLZ8#nErzg=|*vkYc5*!RJ z4x;0k#gwLEbL1NUcU{}uZ1<37nPV5zL@SI zkfis})E-CY{(?++q_Xg6{!48HKDz)?wEHYk2L^wZSxt{X*0{+Bcf2>{l9B)8>k(LcZG+WkB>E!ch_KwC=PrLS;PK%vLgv+hui-DVlRGAw> zr7_nski3y`eF`CZqBbfjJyq)Z4;h!TB$#U%`s|h(&OO9ExVWg{c3AwQ$ej8cPe$5& zk3wWdFbJmTji#}Uo%bP&kYlAE`D*IJ~@e7cnGgQ(`tAPXXMe;F9!VFYY ze*PXTV;I68k2#~Si39_YQN{0KRy!`AQr2OLC95DaX>An)s0;L+2}hUhX2+$33r$P7 zus{T%Q6^~t`JW&soDon!yTXwcSMJ;LF_zdL>gwqurgDmPeclw5 zj*74kaja*YhQ#SWd)fS`{T-r4<1odN(^x1}Toy{uo;Fv~JL&2>rZVW`=R@|Mb8N_{ z)@Km&tpbsTQ?f)CHPzCyJ?@3z4qQBcUjgs{-w$;SU=$$;J)%xZN5_2?ug-`B7`dF3`m&0EJMyo*rgw;r@ z#`!NSuh?5%?#X$uS#$B^1M(d<@oq|0+74OZ(PzBm-vGhtms`8_EnHm0<19>BAj4UL zrRn>(h?_ARJi7UYX4R-TfhDVAi?V1j$HE6-P)tbh;aRq-w8r)G=54TBGNJ;4?vnyn z0>%KzW&{7E^rE6?%i|~ht&c2t@wQzwDm~C}Kc1N`13=*KuA1HtD#cu;e#VOJCLpWY z#B)l@Z4VhwSmxS;@#DfYGnW;BCDfGw`6DvxZkC>VFMzR-yzVtvb+ z#+~s26j<^?D~Dy)XHrBsnC$4vOf=#vefM4rA{4*_=-TcLWRbZ@sFTeg`m7Z(A){EN zuTV$;iT(i+S3tC}a4V!I>1Sjo^EQpDG(8s;0S8!H^6XY}dYQ9;w^f_}fu+o{ECElyP=p?HD;Rv93xXqM(wDW`WQ160&V zz()MUjwGH67<=@Qo0YCSH?vyQzn(yJ+p7zAi+qIn5W0IIV2>vw$c3P6kv?-M;>7^! zEMd?apO1e=i74ld49p>GDOX!%2rDMbWphjcimulYvLa0zB&m$mcF{Mn9CodR?ZHes zDX^kCRiSHwY@2{gXBT|bsW0x0x)w=OF)z(&(VjfL6x!SkeNVt4fIwUh8Oy{;b4h%! zP1eJ2v=W&nX^NK9Y6(nP_q$7`Ubp!2(%SJPNARs1)K}U78o9=n>INS|c@exXG_z$7 z^k8AFB%SmYb+}Yf!jI_}C_4jIl?*tuVB9lGRjZ$&$r$)1buzEHEs(qggWAk|5b&UX znMdHdE?L1z@Bbj|f<7Tn-{<|~Uf@J7z!+R)t~;F&hR#qgufvuK&KmoHkwI}>*b^Vj zn6Yf2en448wdO+P!<26~SE#*={t%G54vt28LU8|auTgEO+)s_OIQBfWeU~aZjwpQ1 zqSC!Lw8=>ED!Y!7Od6`kgEW$cni$&JWun*M6zoMdaK<_}1Kc)2AV41sfPo;PsVpGb zu+x$Ssb{F9iV}K&qXQ@l=LnW8;2o~k&)34(DUK2#<u7YivbmGBvYk#Cx*vtLY85>ar&X;{=_Wg7C z&tVI*?9}F$*o({b1j+?994mX+SfVvsvML`J4b7+gQK<0+m_`yPI}=&iAstZQJinmJ z1hU=`W=nMFR!gR^?F5LPSy$6iRRux-l4b)s?a6>KOBAgRibI`6@KFw_!v|GO@N?{ia0iCvn4%Ynp| zT(-72G-Y)7!&IvMc9m8dkKW~2{#C>X17$mw2)+GYshLw%6Z97zjxQor{(U;z-0Pg- z&Y?0`AL6ye1~82_p5gmx#`jpIL4)zjBp1Q0!gf*I$X_H>wDxeV!+A=Hn+t~KL~s?I zpc$#_)y7yvICGa<{o;$NKqg50EP-6L>KN}|=~-y;xcqr~oC&Q`T&#ejh+AQlfif7? zf}Tki^VkC$Kt%@*aTai5|Jf^`VG*o4j&GkYQq~+vc!qq6d#gxd3!B6m)~{Q8&{eF* zEq|)LF6a!n)a};7NumF}MJUBRfrVwHx{QKN+-QDxH$kHOCusVI1PLw}XW+36nq!k! zG&G?w2qCBd2hdjtxi(aqiTQqtS0O<){o_S*p#yCO+#O=s=jxAQ1Xy*M7?gM-u1NWK zz9^-!SjlF4#30#_WsM|kN?X_B!7MOTh&CC%L+E6-5~sDks+Gzi&1mK&`bLaNVJY9& z4EHS?3xCe0OM(DC#rm`a@PYZ}BZV2;a_LW7hOK_SSB7BYc}_)bRS>M@io=E@%KfU5 zM5p55N^AlpV5WERP-x-@Ln_1gD(s^8$b1|$gFkN7bYZGel>st@WEAU%1gJubHg_T> z_2m^*_F$&$6dA&sMs_}v&@Q%<2qIOrSrUN5hKu{vTG(c1DJbN2xFcun