From 53f69e6ee653cbcec8a10048d820fc53773ea822 Mon Sep 17 00:00:00 2001 From: Ronald Loyko <108372764+ronaldloyko@users.noreply.github.com> Date: Mon, 3 Oct 2022 04:02:16 +0300 Subject: [PATCH] feat: add keila (#746) --- public/v4/apps/keila.yml | 163 ++++++++++++++++++++++++++++++++++++++ public/v4/logos/keila.png | Bin 0 -> 14387 bytes 2 files changed, 163 insertions(+) create mode 100644 public/v4/apps/keila.yml create mode 100644 public/v4/logos/keila.png diff --git a/public/v4/apps/keila.yml b/public/v4/apps/keila.yml new file mode 100644 index 0000000..2caf900 --- /dev/null +++ b/public/v4/apps/keila.yml @@ -0,0 +1,163 @@ +captainVersion: 4 +services: + $$cap_appname: + caproverExtra: + containerHttpPort: $$cap_KEILA_PORT + image: pentacent/keila:$$cap_KEILA_VERSION + hostname: $$cap_appname.$$cap_root_domain + environment: + DB_URL: postgres://$$cap_POSTGRES_USER:$$cap_POSTGRES_PASSWORD@srv-captain--$$cap_appname-db/$$cap_POSTGRES_DATABASE + DB_ENABLE_SSL: $$cap_KEILA_DB_ENABLE_SSL + KEILA_USER: $$cap_KEILA_USER + KEILA_PASSWORD: $$cap_KEILA_PASSWORD + URL_HOST: $$cap_appname.$$cap_root_domain + URL_PATH: $$cap_KEILA_URL_PATH + URL_SCHEMA: $$cap_KEILA_URL_SCHEMA + URL_PORT: $$cap_KEILA_URL_PORT + PORT: $$cap_KEILA_PORT + SECRET_KEY_BASE: $$cap_KEILA_SECRET_KEY_BASE + DISABLE_REGISTRATION: $$cap_KEILA_DISABLE_REGISTRATION + DISABLE_PRECEDENCE_HEADER: $$cap_KEILA_DISABLE_PRECEDENCE_HEADER + MAILER_TYPE: $$cap_KEILA_MAILER_TYPE + MAILER_SMTP_HOST: $$cap_KEILA_MAILER_SMTP_HOST + MAILER_SMTP_PORT: $$cap_KEILA_MAILER_SMTP_PORT + MAILER_SMTP_USER: $$cap_KEILA_MAILER_SMTP_USER + MAILER_SMTP_PASSWORD: $$cap_KEILA_MAILER_SMTP_PASSWORD + HCAPTCHA_SITE_KEY: $$cap_KEILA_HCAPTCHA_SITE_KEY + HCAPTCHA_SECRET_KEY: $$cap_KEILA_HCAPTCHA_SECRET_KEY + HCAPTCHA_URL: $$cap_KEILA_HCAPTCHA_URL + depends_on: + - $$cap_appname-db + + $$cap_appname-db: + caproverExtra: + notExposeAsWebApp: 'true' + image: postgres:$$cap_POSTGRES_VERSION + environment: + POSTGRES_USER: $$cap_POSTGRES_USER + POSTGRES_PASSWORD: $$cap_POSTGRES_PASSWORD + POSTGRES_DB: $$cap_POSTGRES_DATABASE + volumes: + - $$cap_appname-db:/var/lib/postgresql/data +caproverOneClickApp: + instructions: + start: |- + Keila is an open source alternative to newsletter tools like Mailchimp or Sendinblue. + With Keila you can easily send out newsletter campaigns and create sign-up forms. + For smaller newsletters, you can use your own email inbox to send out campaigns. + For larger newsletter projects, AWS SES, Sendgrid, and Mailgun are supported in addition to SMTP. + end: |- + Keila has been successfully deployed! It might take few moments before it's fully started. + You can access it at `http://$$cap_appname.$$cap_root_domain`. + Root user is `$$cap_KEILA_USER` with password `$$cap_KEILA_PASSWORD`. + displayName: Keila + isOfficial: true + description: Free and open source email newsletter tool. + documentation: https://www.keila.io/docs + variables: + - id: $$cap_KEILA_VERSION + label: Keila | Version Tag + description: Check out their valid tags at https://hub.docker.com/r/pentacent/keila/tags + defaultValue: '0.9' + validRegex: /.{1,}/ + - id: $$cap_KEILA_PORT + label: Keila | Port + description: Port of Keila host. + defaultValue: 4000 + validRegex: /.{1,}/ + - id: $$cap_KEILA_DB_ENABLE_SSL + label: Keila | Database SSL + description: Whether to use SSL for database connection. + defaultValue: 'false' + validRegex: /^(true|false)$/ + - id: $$cap_KEILA_USER + label: Keila | Administrator User + description: Email address for the root user. + validRegex: /.{1,}/ + - id: $$cap_KEILA_PASSWORD + label: Keila | Administrator Password + description: Password for the root user. + defaultValue: $$cap_gen_random_hex(16) + validRegex: /.{1,}/ + - id: $$cap_KEILA_URL_PATH + label: Keila | URL Path + description: Path of your Keila instance. + defaultValue: / + validRegex: /.{1,}/ + - id: $$cap_KEILA_URL_SCHEMA + label: Keila | URL Schema + description: Use `http` or `https`. URL scheme of your Keila instance. + defaultValue: http + validRegex: /^(http|https)$/ + - id: $$cap_KEILA_URL_PORT + label: Keila | URL Port + description: Port of your Keila instance. Use `80` for schema `http` or `443` for schema `https`. + defaultValue: 80 + validRegex: /^(80|443)$/ + - id: $$cap_KEILA_SECRET_KEY_BASE + label: Keila | Secret Key Base + description: Strong secret with at least 64 characters. Can be generated with `head -c 48 /dev/urandom` + defaultValue: $$cap_gen_random_hex(128) + validRegex: /.{1,}/ + - id: $$cap_KEILA_DISABLE_REGISTRATION + label: Keila | Disable Registration + description: Disable user registration by setting this variable to `true`. + defaultValue: 'true' + validRegex: /^(true|false)$/ + - id: $$cap_KEILA_DISABLE_PRECEDENCE_HEADER + label: Keila | Disable Precedence Header + description: >- + Disable the `Precedence: Bulk` header by setting this variable to `true`. + defaultValue: 'false' + validRegex: /^(true|false)$/ + - id: $$cap_KEILA_MAILER_TYPE + label: Keila | Mailer Type + description: Mail delivery type. Currently only `smtp` is supported. + defaultValue: smtp + validRegex: /.{1,}/ + - id: $$cap_KEILA_MAILER_SMTP_HOST + label: Keila | SMTP Server Hostname + description: Hostname of the SMTP server. + validRegex: /.{1,}/ + - id: $$cap_KEILA_MAILER_SMTP_PORT + label: Keila | SMTP Server Port + description: Port of the SMTP server. + defaultValue: 587 + validRegex: /.{1,}/ + - id: $$cap_KEILA_MAILER_SMTP_USER + label: Keila | SMTP User + description: Username for the SMTP server. + validRegex: /.{1,}/ + - id: $$cap_KEILA_MAILER_SMTP_PASSWORD + label: Keila | SMTP Password + description: Password for the SMTP server. + validRegex: /.{1,}/ + - id: $$cap_KEILA_HCAPTCHA_SITE_KEY + label: Keila | hCaptcha Site Key + description: Site key for hCaptcha. + - id: $$cap_KEILA_HCAPTCHA_SECRET_KEY + label: Keila | hCaptcha Secret Key + description: Secret key for hCaptcha. + - id: $$cap_KEILA_HCAPTCHA_URL + label: Keila | hCaptcha Verification URL + description: Verification URL for hCaptcha. + - id: $$cap_POSTGRES_VERSION + label: PostgreSQL | Version Tag + description: Check out their valid tags at https://hub.docker.com/_/postgres/tags + defaultValue: '14.5' + validRegex: /.{1,}/ + - id: $$cap_POSTGRES_USER + label: PostgreSQL | User + description: Database user. + defaultValue: keila + validRegex: /.{1,}/ + - id: $$cap_POSTGRES_PASSWORD + label: PostgreSQL | Password + description: Database user password. + defaultValue: $$cap_gen_random_hex(16) + validRegex: /.{1,}/ + - id: $$cap_POSTGRES_DATABASE + label: PostgreSQL | Database + description: Database name. + defaultValue: keila + validRegex: /.{1,}/ diff --git a/public/v4/logos/keila.png b/public/v4/logos/keila.png new file mode 100644 index 0000000000000000000000000000000000000000..e216983b7ce4a186ce53acfe4a8bd37ffbafd353 GIT binary patch literal 14387 zcmeHtbyQSe`!8J*=O7(2bTcq?58aJONzTyS-5?;~poDZcO1A)!v~S)Vy`&aFcVI5YZ7~U|^7Fs4E*{U|=?*&tDN> zqmOUP5x+1nD3n5sP5lgQ10h~Mo(|4#NQhss7ZQRDa(2ML2wHlcYxa;qGC<|JiHINb zu#rKA*kLI;tHBpk2zYdx-CqNSd`O#qYman|BrvK<`ubph{)*n3{pYri^Yb)wS?l00 zAg5>db=c&o@XyPLUg-VRz>o8vJu3E9q!jl1`cBV-N#xTap+67kIQGZnKU6pD`qeJJ% zXY-U)MiU2}3qdzOCvP$C)(nE&fj&9Mj2>>z4C5+Zk{uj@A;@Rf^FGTfBeSx2m7mi8S~0`_e<-k zXmRG`IvUA;MdNI-OL^OUJf4Xy`L<6&04h;)+$5)kxH4zz$9f920|W?8g-12R8D;6w z`kKqyu=Na{t}O#4UyU34v!*Qf7>6;1VFrdesmm!M8YZvf&z-xBlv>IkYH_!b+K-dnxXEfYjt{FEab=HSDx+EYI~U``O^N^LoDFskrdz@Uttk zxppU~Gd=0r89F~- z)f(>WbhMW1od?U`7<_NI;QB`KVb0LxE6PYLe;-vscT=|x_a5im3g4yr^_mK)H?x!e z^hIQWa)_B{5uERama|>yy86h1*v><$#wCbt1_}6CLdHt=| z-lb0ix)Z)$W|v(B#^NIGX^q>6DryzY&fZ9k`0;qd{53s%<=3v=pl2>iJ{4!toQUTB z1{XPzT6AA=OEcoJ{8rJ=hJ+% z&HL*6QymBStRfvYwEAl%7PWOyqDl{-pXMaGUnD{+d}g0wlXUOMPw@@INXKHenCrf; zzhK3Nf3)z!K=)VgRW{DgOYbSq@`i6G%^b}L&GHvgSv5+k&rCnV9dH#Ec99l>tG1^~ zif-K)aZ7oe_mcL>*%81a*BNg)fAF-KT@S!wO1;{0#h zqF;CxYnrSNu{wO-Qwoe`G~L+L?{77{MQQk~Q29x_Xw_?( zIAi0zC&z{6?suI?LPB2JwqrDyrLDd5a!r|m7APC6dXN~#e&Vu=?S<|@bl9#N=jvQw zE`;7%jL(TvXq;0V=FK>}d+wsVX2zYiZ;&2^kuUT>`GZGqcz>D1d5y6(nnc;lRB_Ar zc!b|_x@fwog=Z&`t-8euUesni6gz^O*7QQcES&1p{Kjp@i*BJ*O3o(S-g?Pg%R|Y{ zn6QeOC&PFYwA~hTq=KsfHrwXsxTl9T#&INcCs8IN!FZ~25(`SpuseB}Kb?%PiCQZS z3Nie6UwE;$(#yJ0)y+v_1p;bp=20lxZ>o)>8(#u^pS(|E`j+o8fs1-$>BpU7(a&10 zL@RdE&3gJ)*=o^RGgfQZ63(BBgL-0mg_%8?z^H{laT6KFxHRYO;>#*5#M|^>N<9}O zj`DnygpyLp;<6`U`Y?Vr z-5-!h-;cLNTb--@5y+_)yk}Io&GusOTMFq1GFDm=XWwcLd0dVOk2s#-eDelJ1y|_? z!Zw8@IS^u#3km?i%y$N3u%d&87;nK7sZH_O#i}SE6`eR5YvtmaxrTDuq{^xo{!)bu zsP_`6t!&ET$nAXWR*U)rL~Z9oLb}SEZX)CmBG#$dbZL%!kq|wfUxr52IpoH1g}PXW z*u4BNhhLZyxY4mu!<&0}3M;Gw3*?%`67Z*W6CiBb>T>U--j`J8$kaf{;gXO?tnTiI zy<>eIIzgc9(E^z?)7xNH+BWw`4l<0H#llWXa^)$o>9r#~#Wgao!&jbO%$@09)eRiF zKC?z=#2;*St(7RGw+jm3(Al%%s8sdh9r%~dzm;CbtB4$I9hr-_9}FGHrvKu{_PX4a ze{=1wx|ULeo}s%0vQ5DD-sdNN%ppgj{Ku0Ma?|_2ZnzEHP}L#@`w1*f!A`*h0@w|i zc!*Q#cNf}A7DWl)@d7h<8w8}Knp|*g`L&J!aiv7v1du-9MCBSgw1ebERSzI*1IBJV za%k5Gxd-DCQYL!Y$guu&H37-B7Zp|kX^k?mS%HO-qB3&X9DuAj9HkO?)Sys4vY4aSKTT#aPVPK1`*^~&;ZI*MZh28Yy%xE+12WY)l zdj#-<>Fh*gupR~euo0-&Vqhn@8O1KsGfRO&m1Ib;Zp4V=;Jj=UQf^x#5#FYypqQl` zP}7o5TqF9HwPx$WPQM->inE?DLw^9P!9M$xb4$YD=XmE-0#Ws|%xEFImNeX1Lj|2Z z2Kf5hnR!}fNffJ5k9Rpa!*YdTBuN>TP>(8#^E({6s~Rx+D^46E#CUTFchL*PW+kv8 zJgU7(mm2Ef#mZ_WXp|vkr7RQwGvN^csruqp{Y~1W_>L1zK6ePgOfbif&d;UN`bB1v zio`gI9MQKuPbE+xxkU4rG>lv%o3F;mO||V#2OqO<7?Q=q>Fo$+)JL$eS{QhW64Hi` z$-Kf_`{fCvf6QaC1gPT~of~5~C`+qOdN(T*2ESCdVJa|LbZ zV?>M3HjQFc!b+?E8#M?Eaj6bw+OykZtXclZZ_jKhj?G#bdQTpTLOmHV@LK+NC zJBaRdX7|%eX&ZUiwO?%NS>RK=0Kue$Es*Pm_~pOqf#| z%-o!XtxiHaF-8=}h`s%*@#KQ7&Ev&~fi4Wnc<-dYgh~;Wz$$TIL`piwxf6874AVXS z*$;b%uZn}-e!(BSCVcVgy!2<}_Y0=w$_v++YluXZJ$IJOZk&r=I(%pNbWO<9KoS48 zNTu{cEH2)I7%@=~g-bm0-J62A8KX{u8w?-KT)O=FTKCQ95TY0@|j^@hA<4tbzok`RcbnF&{{pK-gugHg9>@!eHneb zMx?u)Ke~#)zj)xejq1gm)*w_E-w}R4)uu-46U;KU3csZMhPQw)dS5rO4v5PRTi-PoE^Pm^VXit zh!4WRRT)l~xE&{JB|KgeDJH7m`@QY8awoHL4!x@2gL>u$T7uf;!k7i?o;7d`!!ygu zZkbo?rw0UUPDH&*{N##8d6S;xjM3!BN8#N-{TEuT57Y;V9#jPbNRjYVKaM(a z{1B}cTX|3rSJ?l{o-RL8muea7)OeS28&3u?C&tdVM98r2Wi{-kc)nwL`FQR!880A_>>Ov~dnjghjMS9`ojwY${7kHSx0c@YCUPT*u zH7OagcFk8;b6)lvD{l<-rvqH1UT;}3nf<9RF!ZXNtl@PkUqlSE$e-;u(mWncg6eX@ z?E-~yGz(%T2!sJlozjPvOOiyTQam1@8JyBfflDETYWXG2tLGGROB&^`*Q)J9h{d|O zZO%fJU+d)`mCP9s7JKUw6#dF)tXrSq`r5F;kGtTms=;pD`a#)TZSZTEsUy$)gLIb1 zrs0KleAT^=H9M?2lHXro3kA<-?kx|)MTG6|0wOnN3y%9mY#l&JFTTNXxkwieV z)GzK5!Yi%SSB5maveLzOT~yBWtiOubP%#zWerGL!0qabUZb)#I%jK-6cQN<7N+{^FX9Irba%pfJHWyI&ZAy=@3 zQ`1x)6q~BN`)F_sI)EqS=ESJU>mxcro6OOvH5U)*t{f(AZkDi_d({y4V5+AX^Ql&! z^Q!0Drn)lfK&(Xgd0Kg$ON{PONF{_jb?V*aO^pmb!qZoEX%}KG;fPvVUqR<#o%tax zcJ)nsSvO_OcjVn=At=FE%3IDm9n^Yr21Qogh4;5?GPWH#gNZN9wXQ!?jwJ*=Rhop4 z9!Zp9SM$=Qry3-Uux#6s`}$yyWJZ5O^^{x*o^STOIZUtUdj;RWoD8$?2{@)S=$A^_1?2^N>D3{dpgYK z(Wr&1JQc^b^#v8a?ab367SSUcn(uG%80%jU-qs^q;~ny}cu=rsM|CDE8iQHmw`yuz zMsU0VaV4(O;WDCl^*zR>S~!W0{`*;>=lSZD0Zk@Z$t%)u=9}J&ghsLW7#JvWaVOVt zr%<9Mg0mMH+zL4TP@emxFJ^yO;7HsT;WDQ=O|aDMl_IbkgAlvBeX-EVV~%rY9@Kp( zQ8IA{TU$K2#-K{kj0_T=Ekv9Wa0(fz?7P&aFh>FZwzJ5jj^ zV2F7nR_z(`10zK;S<`~}ssncMzF`k47j%4%X-2tQ!pCg2);M3%Veltt7gB zRk60Ov89%3xreB)WqnMY%*OKjC=lV4?5%=Hfe-I$V^7VB4N0P zCn=0SejX0oj0{Y|WhiGra`?P5(iV+1yEv^{jw^2S_h8 z#tC@9-vohR!PTvv6v2K#?T;dF@Wwb#yKk~>1!w{{k@%t zZX)J~r^~9pf-?+S8&#O|kbZ-FLY4S8LwG(_-{w+`*XM2Bw(;4b7I9WLw`9PbkBMcv ze;c3L@h+n!uEKZhfvHiADHY92YeOgS^9yhJl@FoI&#~hi;+;+2NEC003KwW6E-u&7 z1gQX6FB40w9kPTtHMoP)8bW{m458jITiN)9U9{0?@PkKW}*v?`4Z~(MxS{T%%Zh2S(>Vayvb*jRccbdn7@3)xL zw4BJE-B1b+N9OE^sG$Z}vLFg^F;ZjI#R(Emq`0Z3TZ_JbCzFmyvLxynv-x5Qr=&v+ zll{W)>uDo;bkoC-3-hRV;Y5v?U>EC2f_o&>`+yys@ABApLWZr~v4o4t#ih)T2xyk^ z1fELgHsf3FVJPV(xQ(TKsp6&}>c5~3HzFli#d;yy(QzWD%M?ZIpV^H`N*X=If@}zV z*3;0_5&5R|;sO)e>63!GAL)W_`_eh1+qSU{fmJiBOl~t zYwwEmgV-S*ojqh(_IvtRAkGL`mOG+4f;wJGNGE6Y5Feybh_11Hh^xIMf<<1ANG3=M zP2i67vxNk?yLtFZ1j{ z8^rJ7%lez*FAim-uf316m!Gqz2jn-Wt(~X8pDYUtdK~h1``o>BbpAo_;rq8JpyL4z zvh{)r2?#>n-J$*?=fk5majdib&aD}|bdj{ZLw ze!Jx8?C$l)DRl7uZ83!XKlHr(ecb-&Anc(?H>5k7)E8}^(7);XIXnC_SpR0*?~y<5 z{Hr18<^I9{Z`yzN{f{zQOGiga+0)+t_o5ogvMj&tl|p#hJ0qn2oC->ylOZlF$uA;| zL?1*QMELDs=)_0}i;Id&BJ7c3Vu*jC((v&0v-Pk?{-#2c3pk^BghV9m>?8#x`NeEu z4*Viwl9K$k=xO{8;v(V>FkzUet+4ICQ0VzMqpQ-^?O(0>O@;VP<$$oa6&4rg7qt}= zc*&+CC#l=Km2!tRK<{USQb6!bM@SzrQ!|CH#v+4?zn`nb!oXghoO z2mN!v*x4OvXdsBJ8D9(Tuj} z!f|%DbwonFJRJW_`JEOiv@__y+WxLnH1i)h+7~G$AEd3Hr;o9xr<*LxZ(AY1DgTr= zMCPxgs5|?jHG+Rv{NHNc28C2jdd1w~-|B1nWdI^T9keqjemTRTa6NeKtUUlI8S zyRWB%U!biIQo#}JDcT!!0sZj?!u2P{+<%<@hjyS7@^=6Q(Iq4#$S(*phQXwSC8Pue zc?E^hM;7Sc9ESeBtN-q?4D^4CiOe5`f7u4m^Zt^dw-@wo1^vf%^|zRzE%^WW`CBgj ze=Y%m{CAQ6D8By<*MGzHA4T9lQvPps{Wo0yQ3U=Y<^NXK|Fdur{qunb>4E+i6o`JD zDL2XJ$H2fU*4H*x0T_7zPADKK0tku%l2U+_6d)}PD9HoL@_-5)&{hU?lmT58Kvxye zQw2;kfjeku0j64jnHFHJ2iTyY57_DhcKU$50pM&5xS(+xa7Duea6{t`;BEr=m;=6M zfUh~=X94(I009<2pd}Dw34~b#;Wj{oH4te7MA-sSc0jZ(kbnRZkib1O9DqazAjuI( zb^wwcf%}d?iW89L3_NfFP%c2aEAY@2c!Y)p0)Xm3pgIVs2?A<^fx2Lz9*q#- zNeJ*X6le$q8pD7lG{S-AaG(W^2%t3rXhS0sXh$Oo=!gV5qkyhxkcJba%4b(tGb(TSQ|_(xAYqQ*p6wZrKXILh|8#sz995cH}l27xN-CM7ZW2lp9U?&_tVf(!CxoB zy2*hd^qK)JBB#($Rxl1)`c`miO`%5LFGQt2duPyT;IW;XL9Csd5D$kK1#vMKo(eY> z7Exf!@RV<9H9-JCF{{pJV9b}eV3nF{r!Dt_Jk^QsdW^SGS~|2N+;Kl`e&Z~OEL2=r zdi6t&V_|?CL3wNvnKmW_8xsMEB1T1HzyLVj2pof!0D}Enf`h{REx{W3Bl$loeG)*B zo@!tMLTUByzlhY)v;VS6+7#TCU8=Bp_59nn7aFok!AmF0-SW?btar!o+Q*;VQku)K z^=}#YMoB*`b>dQbZXx}6Ow?IYEqHp*%semk_-0qY<8LjaMk6O(1&`l#i)0fu|G-)P zgzWYm(nh?$`*|aNxP?@ z{A|d+Qq~qBVkU)kydd7s~h__Fkic@ zC;RNKBcZ@BK)vPx^_v|y{)DLo7dhxEfib|A!(L~P`pVtwR;Ua z&>t{>x8G#?HUBGd#R+lDe>qWUn13H5W?|(0P`bNSjLr+$sl3z)aYqLE4%Z$dR#m=x zfp7H^(!;5flg`S-8EKnS*B!-Ms55(Wm~om`QQinSVJ}~C5TZ087!kog&+X?P3Kt2& zrd4wYO?gkBfMK?y<$b3yg_iQd{!^QKk3!iQ7i?hSK(r*L`So4<5rK~+U0OaakH|+}eM6%wK6S9Cflb zFe5%3%uxI&n49|I#wWjNVf67kPIKwl(_VRF4{i|>+FHGhjgW_XRl!Cyt7FML%9x9w z%u{Om))cm$_SLeAhTUU~GBNF}7*LlfIa?;!85!7}tA8n`F`8 zmvvj+Pq{+sEoKwlpik8Ma0-9}?Gv`A-6KBjb`BtmDtSm0v#ZIho-^vy@DhJq(vq(Xp^<%rh@~B(%1x;EOHhOiUOt&kCp;x~ts6j8F?BB`xcURdE+Dr_ z3*FGBWn#$X`ngg2suHrp>!;wLDs$y%d{|aff~DqZN4-4~w^4hwos_=O4cQR2V1lh2 z(G~|#;I<@g5nj|}rE)n2h=%FP7}V)Kj;fc};PdN`V3;WM-E`pc{;`OlSp>5;{5VRe zFKP?w>IS0ZeVcf;6a(nRfA%aHd^z~oo7JT2$UBVj>#jvON~$>|0*fzNz?<~m#`ljM z#Qq2@dfVG^U%<_gzwdUN~_IgaNemj_qYnJeEa z?1xiXZw6)ZUr{({uD#n!t%kghJuT>})p3-Ac4dBSJ-VmK()E5x3(O%4jA^%gL~A2_ zQIee^gdiu{hriR+Q`l7}Q^qx;m77+pzw@NU=fc^6%5#N~$ORETr1yl5)+`BxRWb!l9o02u3_nxKQYPR4@iTuiM$i$6+(J3bgfG(lM z<-!X>dDq524AA_)gm;A(pZu~JdGd88vz1bS$ChL8`GnPK$X<)_=;^ZA9&S|>u_!Rr zOU8byNOyo)$Uthz^k(xe_X34wS>b}J*txWd5EFti`@MnEG1s^6*V~>IPZu*jW;!q{ zRS_7CQUfV!8Vyd-gG7K!nx_X*In z@L?ouk>hnvYzpnpr(z3T)9TT%K4;uS(q<3tm|xSi?_LkyI-%#0Ey<_%i_J^-9uJI_ z9EqUzuKi)_v5`1$`^=7@KoimPIsg2=iR*>UqiSJeJibEP_wpYd5IU7Chn!XdpLYF= zuXwhi87thJ@7$|rqq_*}l&`F9{nTQWZN^jOA^!f-U7R%!j=MmPKT$0 zA8|of!&d#>p+=#-7H3$H4_eeP)zhV)_wwOjVNc$N`@6O8lo4?u@~mo3XR@F3_wQ{& zSnY&QO5F2t-%Ts&Tm+n8_LK(vFclui_E2^>95i7RrW(@GI>WxRbAr;TW}&4{aQ;5A z32$!~4f!Y`-us1!%(~ObE^1KG_~cM#u=Mt&cmc$ib=>s>e z2u1J3c5BM_OvNq4<_WYTQUzDOCf#9ut?6f46ztDF8Gm3OB%4w@c^p|$+xeYLtHAJL ze~16BV^yl#Y5y5a^yjAug@AnPU?zeF5rR3yUZN`HBC*eGr<+@;VfYjIBbM>1WWJqC zzOL6)WD*`kFgg7py4_3SLJq2pJGT?%nsF6x+vB8N+*aRkJ;6h0zp~p(GqmtvvT00B z=V_h{d-B!m&h2kpq>Yxf+{23O%`}{3X^g`Qav7f2Mo@UW5=+%&cPnz?>;5;a7C{|E ze3%Wq-qcQq|AJI?ByQ?wT4Bf9AzoepA}KV#A+vt%>1fflM2C}UqUvZ_!Y*Sr1^4(v z?pG^M8hC)FFGk7^7cr5KdXgia_pM&RLgFa+pIkf2Cd- z)55sA(~rTdc~bi69@moA!*~{0FI)20lv(PIqH_Zd?)ijo=>{rGsHD8g#`9i70hu&k zWOgXgqO+ooc9CC=@e6BJvc;aTzAL{KVQ)p6nh(|-%~hW-qc&jTvv-;kT0&8o2X%Iz zpfGm7EeNZN;M@T;uw^B*Pz~Yz)d-$I#LAY&P<}ZQQC@Wqb#O6?ZAQlAju8Dh>{)NU z{Y3hUQXwnZG+ebD^Eh)ifc_%MqEI0KV}p>}^g9qk*dEaPObGaXSt15X{T23P*XUH69=kCVq(Wf5u36$;b18&A%l@q4~up)}K zUkkn>>Bxh^jg04X`-eAKmVIG*ZnR2-W+sAZUmj{2*<1zZkm^A`XZ4s4(md`pMm1%= z_*vgOVPw899QTv5N$JudfW$yCL5knE=}?QS_P7u}SM*#^z3HrnA{{Kuq|e_X5!JI%?XWo(wu``ncbI8a~c(yU2 zs|bC=&7#kki2CQlr3)SWX>`q3VR!R2#3nlyx7w05q|$D5_sMtOX>w?348z?QT8M4Z zJ(6pr%<>xD*%zhj_%hBqKIng|C{fP%o#k3H zT3JQhj>3XT@kS2jabf6q{S^BDiIQ{^)4shoW8(AejR-_!OS?)1P3C2g=E&}hU{g7d zY{!<<)pm~qs}d)F^NGE#Be4-k_KhhE zynH%EH70DV`*G{6ZhNELQq^yH&#DsARTs{=5)r zvNTdEzCE9kBf*Z(%8v*;vUnMge#JOUt+w|_X7yv>L`YWFP@-n%+L}Ih#lgLHR!zmg zTyq(eP@az20GI?a~vv0%_^r@5%W6!*7 zi-EG(%Qa|(e8-rl;}MFvPg^ou3Hqr$D~vDkerpji%a5M2WKacBjX(9xUEz3*CDOyk zPAeUXWG_k}7G$LDj?czxavS1!5k44kV9+3}R`;N=)6cQHc;Ur3Oqr6FPIG-`;@6kU zlH^HtN_@I&;-O&Tx*nDWWd})TDVPJ6?hU}`?e@*v#D~E`r706)Cfv~4w%&LlL{257 zrSg^_J+04Lsr;LPlqsYy1-_&V{*)?5^%aj8)V(*te#9y#b|P2bRt#pG!&7&RjO;WC zh`X<=-~Oe==QanKVCh{}@dUmRHpJXxcXaiUbP6Aszw5cB0lhfr2uDed=p!4Ii(K~` z1BmQLPLPiW-L^M)m7D3nY_^vtX zYoq)`RfU*Rfai(UuZNOd!N+A*1gmW+sGel`YW7p!=)472&(U7OS7mXJz+b{8`B{xR zyR-L*{qtIv*c`^kL?OZkM6TDNrz>SuErn_Hhb7nPisHxJho9EG-@M9Jjem0%`u&WY zf7STVHZH|Z0oEAl#2~a*CUdL`G zMZX4cp5S;=iiPsWKseb;7?d|iLv}Dm^t}m6zC8%QfbFX#{HOvZvgR>=pEhG_cuss* zgs&fu05{?0$ywsCsEPOK%*Gv>`oEr#qk?5&#@vEw4sqD92DOCVo5#bLFsN#RzC90Q z$7V$THqGxJ)D^2EbUTb`?UNZIzPv}9@4S5+i_?Ku4*f!xOhWyaLcwQt<(p0C&k-AM zGmGts`ws}3!+8r#Q!*eI5607|{Oc&bcQTn-wccig#kmx9;Za70x6u%E(V8*UxgZj^ zx|G?B-Ih|_F-8kUhMeFDZy^Wj^^Grv;qiX-&72~rw)NOn90n{m4~02JLbE(_$%{AF zet4qO(&_A#>ONY9lAn@22_eEvi{bgBX0=#mTDC@wZgv*a-f#!8W-{Y&I#yTNYFxey z+c`>9FjMoqW~BQe5jSE7Ge?}owZcSJP}wbBTRCb%E4@uK=bA11+3;D^L|*#yEUdn0 zBiw+`!%-9C>21kRUdjX4&sJ>UbC{^Mq_XaV*X3OI+sGh0TqCAltDblW#v6-y0_au< zChV`a2jrqpIl%gM(xd}?U3R3E5ZxDv(ta*86~9YpbHLCHzdNFeP4$M^bvAw%3oU?M zXfY1FY{9(0fhzg1>cT;FMWuhh1~c|^Owa1Bp}m1Gjgjn_{(tSW{O-J_hyX8 cqif89659R}SlB4KWrU%jqO1H=(I)190nm)TO#lD@ literal 0 HcmV?d00001