From 85090d8b7a6d52fb831e7918714d559438fc0e5b Mon Sep 17 00:00:00 2001 From: sonicaj Date: Tue, 14 Nov 2023 21:03:56 +0000 Subject: [PATCH] Publish new changes in catalog --- community/mealie/1.0.0/Chart.lock | 6 + community/mealie/1.0.0/Chart.yaml | 26 + community/mealie/1.0.0/README.md | 11 + community/mealie/1.0.0/app-readme.md | 11 + .../mealie/1.0.0/charts/common-1.2.3.tgz | Bin 0 -> 63001 bytes community/mealie/1.0.0/ci/basic-values.yaml | 17 + community/mealie/1.0.0/ci/extra-values.yaml | 26 + community/mealie/1.0.0/ci/hostNet-values.yaml | 18 + community/mealie/1.0.0/ix_values.yaml | 58 ++ community/mealie/1.0.0/metadata.yaml | 13 + community/mealie/1.0.0/questions.yaml | 590 ++++++++++++++++++ community/mealie/1.0.0/templates/NOTES.txt | 1 + .../mealie/1.0.0/templates/_configuration.tpl | 49 ++ community/mealie/1.0.0/templates/_mealie.tpl | 54 ++ .../mealie/1.0.0/templates/_persistence.tpl | 31 + community/mealie/1.0.0/templates/_portal.tpl | 35 ++ .../mealie/1.0.0/templates/_postgres.tpl | 6 + community/mealie/1.0.0/templates/_service.tpl | 17 + community/mealie/1.0.0/templates/common.yaml | 13 + community/mealie/item.yaml | 8 + 20 files changed, 990 insertions(+) create mode 100644 community/mealie/1.0.0/Chart.lock create mode 100644 community/mealie/1.0.0/Chart.yaml create mode 100644 community/mealie/1.0.0/README.md create mode 100644 community/mealie/1.0.0/app-readme.md create mode 100644 community/mealie/1.0.0/charts/common-1.2.3.tgz create mode 100644 community/mealie/1.0.0/ci/basic-values.yaml create mode 100644 community/mealie/1.0.0/ci/extra-values.yaml create mode 100644 community/mealie/1.0.0/ci/hostNet-values.yaml create mode 100644 community/mealie/1.0.0/ix_values.yaml create mode 100644 community/mealie/1.0.0/metadata.yaml create mode 100644 community/mealie/1.0.0/questions.yaml create mode 100644 community/mealie/1.0.0/templates/NOTES.txt create mode 100644 community/mealie/1.0.0/templates/_configuration.tpl create mode 100644 community/mealie/1.0.0/templates/_mealie.tpl create mode 100644 community/mealie/1.0.0/templates/_persistence.tpl create mode 100644 community/mealie/1.0.0/templates/_portal.tpl create mode 100644 community/mealie/1.0.0/templates/_postgres.tpl create mode 100644 community/mealie/1.0.0/templates/_service.tpl create mode 100644 community/mealie/1.0.0/templates/common.yaml create mode 100644 community/mealie/item.yaml diff --git a/community/mealie/1.0.0/Chart.lock b/community/mealie/1.0.0/Chart.lock new file mode 100644 index 0000000000..340b0a245d --- /dev/null +++ b/community/mealie/1.0.0/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: file://../../../common + version: 1.2.3 +digest: sha256:e6ff49b06bf5d4d159e505ae6d153f36cd46170bb519caf90462cd5caebfd0fb +generated: "2023-11-08T20:33:44.485716889+02:00" diff --git a/community/mealie/1.0.0/Chart.yaml b/community/mealie/1.0.0/Chart.yaml new file mode 100644 index 0000000000..6756c1fee4 --- /dev/null +++ b/community/mealie/1.0.0/Chart.yaml @@ -0,0 +1,26 @@ +name: mealie +description: Mealie is a self-hosted recipe manager and meal planner +annotations: + title: Mealie +type: application +version: 1.0.0 +apiVersion: v2 +appVersion: latest +kubeVersion: '>=1.16.0-0' +maintainers: + - name: truenas + url: https://www.truenas.com/ + email: dev@ixsystems.com +dependencies: + - name: common + repository: file://../../../common + version: 1.2.3 +home: https://mealie.io +icon: https://media.sys.truenas.net/apps/mealie/icons/icon.png +sources: + - https://github.com/truenas/charts/tree/master/library/ix-dev/community/mealie + - https://github.com/ndom91/briefkasten + - https://nightly.mealie.io/ +keywords: + - recipes + - meal planner diff --git a/community/mealie/1.0.0/README.md b/community/mealie/1.0.0/README.md new file mode 100644 index 0000000000..f85048e992 --- /dev/null +++ b/community/mealie/1.0.0/README.md @@ -0,0 +1,11 @@ +# Mealie + +[Mealie](https://mealie.io) is a self-hosted recipe manager and meal planner + +> When application is installed, a container will be launched with **root** privileges. +> This is required in order to apply the correct permissions to the `postgres` directories. +> Afterward, the `postgres` container will run as a **non**-root user (`999`). +> On each upgrade, a container will be launched with **root** privileges in order to apply the correct +> permissions to the `postgres` **backups** directory. Container that performs the backup will run as a **non**-root user (`999`) afterwards. +> Keep in mind the permissions on the backup directory will be changed to `999:999` on **every** update. +> But will only be changed once for the `postgres` data directories. diff --git a/community/mealie/1.0.0/app-readme.md b/community/mealie/1.0.0/app-readme.md new file mode 100644 index 0000000000..f85048e992 --- /dev/null +++ b/community/mealie/1.0.0/app-readme.md @@ -0,0 +1,11 @@ +# Mealie + +[Mealie](https://mealie.io) is a self-hosted recipe manager and meal planner + +> When application is installed, a container will be launched with **root** privileges. +> This is required in order to apply the correct permissions to the `postgres` directories. +> Afterward, the `postgres` container will run as a **non**-root user (`999`). +> On each upgrade, a container will be launched with **root** privileges in order to apply the correct +> permissions to the `postgres` **backups** directory. Container that performs the backup will run as a **non**-root user (`999`) afterwards. +> Keep in mind the permissions on the backup directory will be changed to `999:999` on **every** update. +> But will only be changed once for the `postgres` data directories. diff --git a/community/mealie/1.0.0/charts/common-1.2.3.tgz b/community/mealie/1.0.0/charts/common-1.2.3.tgz new file mode 100644 index 0000000000000000000000000000000000000000..149b102ef722314e117cdd128cec4ebec17638c1 GIT binary patch literal 63001 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Π-t7_L|0wnD$l zs~l5TYip}wy0c%n6~1FlJBlQy28>IYTBQJA`#eq^rFTwyg_0^1Qn}=?49u0BG$rnq z=c8GJ(>SH8K&c{Vl~O`m3RW76-Aw7eR<)0>6iZAC=EWqX@fb-@=D-qtg12diQ_*T| zH2wy0O7}Z^VE%SPZ-0SDg3$nRed2@}1xVkid$Z)&`Xs&qMXEt(l>nT|6|W(E-|A?p zavY|3H}}dm8)?6;y~GPfj7>0!(Ir?h(_TFE${s>9*(XUHqCm8_3=(At$OgS)X7?Z2yd?EG)VWG}~bU^Mtc7z?cNEZID;X<}dbD}Z2(2!TU%4(TWW zK~TI<>8b2f`I1s>w%To~`7QP4p zhV?-6pNb;{6`Z^5{$!2V%5>{xX}V;P%19PA{B3HA%;)CS`kKOH_K%cw%Bbn-&qf6D zpd@B^TPBn1>UQPF*;`cy0sdxnM*gB*u5h<%T8uTv85}Bcz7iuvDbEnB)iMA^8`YT| zlo_Jjp)b9Ij^A%wG&xNY5y4;Hf+K*@vkXUM$GGjnx)jyjx;jMo7~UX2P)ZOF**y*Y z836d@jWW1yvt|D`g8 z#IlwU!ZAuhNRXt$)u>hGQwL1{2t7$0Tw}O}>Dk9>995S`J;T6eg5MM0xG@(?{r#~m z7ZX+MQ+CgfnuYo+nIMmjFV2mx5vR3`n(&zZ84BY;999J+HWt371O5YT{aGCYSRi{x zR<(X-rb<;)(=cHc4P#5LxIm{;C&3osqiymw_eHveM_(TK%w~NlshL8O(QVNT!`r8f z4b>I1T1huN-HZBU2sVDpPJ>8eH>RYS8JhA48$JLHIm2TmG6|PwWOb)ml|)NdcZij4 zpHZy_E12RVJVG`a#GgR06Zk-^KXG%INC6qYLr9^@69O4!xrKQINCL?SyxVy{KkS=X zfphn!&}*Ec00h5bLa(qkjRhe1C63}8@fdqBDFm_k`g545jlB}bd^*mKhkU2 zDN$@*UQG4jl+tRBg#uw0FA*hPM*iWZJ@Qj;r=ij^G)7Rot#A7CR}5d@VE^Nx&AK{| za94)P-1&e$p|Gtzu;Kh~cmKeR|FnO2yt}slt>Urle{52LnBwJ_{u&~yR@(lGxT>4t z$2V&Xv`4rsYoIJ7#?A}KpB@h-Lxg1zLPxrs?anAuK7W?YJmG;3*}&d&PbyN{e4AAwD=jBh(82mlYL;hS`ajIG< zCHG-4GM1C+WT}}Sa^I%+~&Sf$)?ZXAQ6)ArF zzW6>9Z)O>F+xioV$!KTUWz+RD!`zeB(^YmDH8UNVv(hmB`}+;K{71lp#Rler*kC`FQC+ z`b1Hl!sJCtQ9ghn+WAmKpPl^{Km+|h*xNsHLf8HoQ$i!L97SGV?7KfIqM&%lDyZ`_xcgc>fZ11Mss{p zx4akdE6aE4^hwXOR{NbAPN&}M_}aJ22|*i{A%z}!(ZKyR=qtD(B=(;gt=42~D+ zo7JDA%d(O^N58z0y3TpfRntW)8u4V{ghCpJ^#M=30E-3}SaJo}v)zT1{d%FQUv)fb zgyZYYs|qB%I6pIJLh2c~D0hJ;ltHkSq6*x&SZzP8=9K!OdcueCa|xa&;C6&k3$3xZ zrtnS_dtbja(Z`0txW0PcwOoNoj|$?gWzCpVKuJE8MS%6A7b>J4ZpI*tHBazXI z5TWk%>bXa4H1>oiO)1ZK`*bNBydk9M7W$l;X9P_)G&@)``#rCP^i@7y`9B`RAv&KV z$t4PNM0Y-fIf4`koyjcbv|(UoVr63LLt%b(|ChpbARj0XR^wsWN3)ox4x=6QD7S6IGf2 zVYbfj83?r28ODkWFV0l+28>*(@@r5O?3l}71Ar^GC&>s;k_hC8OcKi2Gr?m-M{zm? zNqmF&#+7GTa&)qz6a4~!K=)z21_oYFK(ML**fxu3w6Y@l537j49Q!VQSsyv#PC&4w z+dt9Gbig$v=;)wGuA@YX`;B|KcjdMaR&2fl9Lz!jc)SuPWszCrj~dgY9sgg%`qzB^ zb9Cg!|JXg)UHkv9uS|vFZ~}Q3fW+HKENb7 zEjG}c0iYV_fB$gzz>WWOyuZ%>vyw+B6b6mt2PrT|07j8G8fVmB>;kd~Q&5YlXRoOM zY=Zmy7ANhM_0?u!Kuz)-r8K#dMpZ^tc-p}z0u01_n{RG}v@TSCM@jc7vLIO9a`&(A zUQ}$}|1UYqojdqz3;A#F$l3q9$43Y2{lAijZyPbitJ(UZueo-;s>=4-2qohl8SQY( z5BKt@aYf?RAtnY8@mp?Q);i8X_Bx*V3i4Tz-o30_-#1%W0PVF5cFIJ%%Y9qNsa)XLojq@@X8Z zN^>GL7mfLcF%z{_)7@LU?mXPnK>thb5A#Tajs8FVe(C<_?%MxzC67!e<~awf7YZ{R zU1lg;3RfsCvU40+qL#;9)Qkqky#~$TV8xLEh=nsy<)MLLYhY!idy#Y`iqoNpU}@L{ zG91mqwi?H_?DK<|b@C#O&?n@LA*zyOuoBy{xJa1nB?Af% z9*bsPa_d$%Fu^E6aLQJC9NzH$5=bb|T*DJ1u@^ePv!@?1uP<30V;;*PR`vK|0%D_G zJP_{@QPw`jIJV7I$Pedyu~T*GG@hh}H`8&}R@t4!Ts@veDLzyp%NtC;39Ql8D7RnzTvTFSG0j&%ktmO(;)ws>|PIW{@33>D4+lB?XBhi zRXq0nuMq-b#x0^TgShLllbWYX&ANcNhvgOdp=EuQ99(qRGro1!ZiF*Dt@i(dCg8^X zzvue@@mK5pzk;V~|I35+nYX@aqg~3bPm~qV-tgk}dap0~H0=M(vQ|9M`R~4a{kIGTB$4MZIZUI|BpboklQB3nPeIls!v8ey{|7(+ z?eDwx|MmIr%AWf3-z9JTdCz{0s%!hfa-W9%F9fqiHh+uzKc)D8yT^NL{eLx&l>bv6 z0!z4L0z7cU|AqE_3)y~CN%Oq7Wts^#EyIAKIxWeL>clvGlXy9K45S8Pel%?+tc3aZ z3@3O5q4cHh$2kY#Ur+6h+#^15)M3GAyU1>X&8d58VTLETVc#omycP#uHzufR?ly10 z{k@JlwmB_^>qHqdO!vlsZPUH+Ve@8rH%v_|mFMUIQFZDp#s%_?hNHr-N4xaM z-^!&YAcg-=;hWPFQG!wg?(jtMczH6dOo+EQzezBh$&becz6C$Gyn3$gGGuu5Tov(O zj6&L*!1z;<-NHG8*A?8OxVkHyOYI^e`kCF>=OS9#k{nvi;H?dQt=j*>=NP(XEMMVi zp#O_q{FF}<{XaZ(1&GctoF`hT?V`v318 z9v`jg|0*8q{GUzvxMIo|VF*kvuWNgjfY1*g|M?t8Z6ZH64{BB&p&=T;rtXau8bIZa zs(nGzn8q-P|Bb*P$77)+33rJA;H=>4n)tejWF7D53`cJ=aqwR^P$!{t0cH78LCY3v z9A4i{QJ%+<%%+~<=r5$**qluA84Bkf)QnBlxV#t5eyww@YWiP9Hec-Yr;+|2^>^L# z-=pKbwf$!$k468Bfba_v`>;s={hd;FV+6}4<2*vlo9lmZDxTvp4?DHhCX)iMsqPZZ zlP=X1Qa35e$0~H`%%B*R=L5t^18&gNB8?3nFaPeusM9#?rZ~SdUQ#$T8aSUM z$vIBqP-Y6(#WMXtl&18q1PrBj;0s$SaFS5Tba`Pyqc|-U=WqQL^qEsD{4SmowV!LsV^%lyU@IWQIbFgM;LSW3kW-vY#)#{)i-T%3HY>!f5Srs_vYS=eN-18z$OIxD{8jnN3~&wz#XPeb zN~eDzfM5`ds6*FGT0!9rig>YTk|6?q+A(=>5e(F{g`#x&bdsUK8yL0K1fq2MYmUc@ zPoHe4{p6u^I$QSlLHr3t&(i6#=E{oX)(%x)vFn#HS=uUf*VQDgURi5D%JuW7cKZKi z25%QK12p-69v_zOf9)Nw_5YPTD*mgO>V+IVEVWrKn(tr#*8^Fy8K9jY$Rlw4UOq;h zg;SJ+zvv!biRliHm-{e4gV;=07kf6?50r+(uFVF4i?X;$FXnzitZw zubTfybKm!Lp9cPac+hv_e;yw0ulfH<9?Sm!^z|i>W-gdUGA#U}B0*FU!R>pH0-|&d zSI;K7)7ZU9+kh%xrg)YQzqih@&3&`BpReGnc$fJY3DyOqCJf; zp|3^EB@h!Ja%RB z*;f74r`FV26x8CLF^gu=i|n}4HE-u9@K3g&Bz!V*BE^6WiAROLL3f1T70A)YNu1lM zrDSSJSzF+tkb^&0C2Qc4JIbdhCjkfuf_XSX?5EiHBye>CD^Y{ohi-m`T2z{uG1Ttv zJt9v85ik)g$N!Fv<$cf1+faXr$~KYeMpbU|;#jHJC~`DC110*M#D@M`AxbtbMseZ< zKJ>I#!sU>Htpuf@*8%(OF$l&u=lPdY@NWOTiAbZfC#4J@q9Y#)`3s}&i6Vm$ZEL%17Ou))reakR7lC=lOT2Eh3`PKOM&N-4+E!8Lw6@|Y| zj#EwlnOb$4#E_sx?SM_^fBmEVa{QMy{a?vr(SN4I0y*c4QhsCke77Xu8pG0Wb4Waw z0=O*S#%GMfxz-?GKBz5jk>0hX0D2mb>VGeG&taOi{WyCfbPa%0@UsEolV0FY$5`r> zRZ2bS0h&8!HF>0W87sd91l(IX&I-*a&K$)`gLC2-Sqwm%RK$f&lGe}n_|)@%Y5RRx z{=a*$UylE__WxPUQ|ABbbYThnzxwFl`{Dn349n*K#v#mV6+B~9jy|M7s#WLA6R6eb zajgKZuUDh4sW$$YY_6XEGqHgY|HT+U6aC-om-N5=!?pgmlE*{;bzY{$h`(@Y`;IBU z7{Ei2edWp+1g#tobd?hAlb(r=G+#;U;(<}EAU3#rEx5q zHN@j#(R^L<)>OFd%ksYLtq!b?Yt$r3RH(@<$E&^Wc44i1eMf-RDH+QYnBF@9l}Ti2 zK0&VUw%J&9`dB|Qot%*N#{wgkv%bo)8v9bo!cqdw&qf~A!pAL%LlpSow)4Rj8c}^p z*;Y+0j0B&Pg)?g@rlpy~xq~X<;UYt}s(S$$j;at>e~n;C!}8j7YlDTWoUeAn?xrX^ki^sSulm+N~6vvk&P_9EPl zIl4f=z66}t7{uNG1U%MqlC&*8$%Z+MkSK256WpYCndSW~peQ=fbxna|d#^`DzgY7Wi$P6w2&qAUS11=lFVW5lEZ(akpJiV$35 zoVYAbxkalUgnxUPyBPp6A*fsClQmTeQ*xQrRkA+DcTMbgT&zo2XDg(_&pLQvPNkCz zTOES3`cHy7rVRA`3ek`Xq0Xnt2TsFP&qA)Un-q(^$!ENBOkyOndE(0+Z9uBr$(MbB z){^)a7Wy4rmM^2O@4n7?_thji7if&9NZh*MX&NFdC{30ncL1k=QBM#$EWD|IBg~W$ zX{G^Y8Jwt8Vdp1srLxE)zBvdGg+*DxWg~#5DCMM35}X#0%7{n|;3-NGDLjf~BY~iM zr6ph2R*qm4FRL*oMAAuC+thb)nc3oWLZhNs`l$@e1$GT(k`TULUBH;M=*Tntl8(dV z>j|JSyxMw#5Gwu8>Ds(R?PG$KhH^Jm#S8L6NIzCHuFO+8R4qG|E-^jarSS#F`&P(! zbB@=Q5Wl7I&N6E;b^Ng&d;p(U7(%{U|7Ucz|Y*a1r8Sh5K~#iMZy`A)YC6pI)Mg^Nv`U(Kp%=Sk%a=-C~RHVF#V zf;kcP*g`RBIiyP0p_#mmo!0G>4+Ba8Ja0b7ULV7I>w_Sk<19kBH#P42+$2&KA6OaLS#9;Q;B64D?s zgsl#5Qgr&33Hn!vP+kyTGqoUu1hH;Ko*FsUVKzDCd7MvdtAN4(o}a%pY%=aNg)l+S z&)*stl&3W#lp}EjqOzg^5!@gWH^mdN3bjnABn;i1b97Nw*XvI}wyInD!d0ZQE?;27 zZ&k4@B=#^U<2)w2fL?jWNUrdHybu52yvLSi;na$qh}F6uL#C&Xz8t%ALB zIcfhpH~_o-@`vpqRUvpk;02^ym411t1_ zYlo%%kfJ*DEFt_xr)*-ZTO@ZRq&zR9olUk_9io8k`V*vx_Tp@M(2KJV6(bKo!0%cF z#%c33aIxQ+O<%!zamX5{+%+k%z#S02ghf!1Es8I>f!1Fn2t1KDYPhPbSj$1*O68p` z39Y~@!O7yCz97JgpZV4K@)&%gM7h)%U!|VNI4uWk)~_DCKY+?&2cPw)UQmF^fC7Ad38?sbQmQ6tzdt-QmUZnI*{u<+oIWL+s zI~8$78ZhSwQuR#W{(htUwsgek7V)$Pv_v>`wd@}@^B>8V$F!36@XhS zu;;NxH|-HtF#rJ+#^S;&qxjlk-s*lfwzC;e_81kX03~nJG^t`5H}89#{hCuP{y~`GW-Kvqw`BE0+?U&*Px;6lDp%V}hKEpIh`-MZJ& zl=@sEW*zW5(bs#P_rx>oa)+~z_`mRV0D`j|r|g$+(CFi82d&rDHsEV+sl(5T?XgTD zs)qkhQW}rZSpo@pE$;!&*GB{YKj^#n|MvQOyX*6xl{_~87gG-SoG;}fpu32^UooIG zkY!5(vIqBG;BtikXB0NKRSQ>`m3<3n0IEvQ2! zH^P8fPzB=M2Afm9I%Thx_pn08w1DRfrzB?k$T+%6?pP^dG>8e8rh z##5AT%b8~^p>&Y(Eu9c|NZ^lgL3@e zwfw)5$CCeL%u*odd?^}0c^Q4TI)HB|%hm!2R5!Dggm3jBKA-W~Ie9FTKzT2R+rWAq zeC!gIu+1j;^)eE!xu;zYTve_yy8rSG_2S#68FIuURwz->>2fLe(496LucOO(eQbbV zQASMeV*sOQ*M8T1sLSa!gPHS=`V1|$L(mK;su454{?+wmt%Hgow(*=9QoFg`HWp7v z!59-(_|hgDg0PwnjF2Pg-6Qh82Y#7|)E3|t@2Z$`z~>x@Ne6P)7nKET zm(+JF7B-A(*%IQg=%cNzc>c)YwPUkIMiZ_FjVJyfFv$dcG)t=Dlj=AEMx&j&?)W`* z^Hq!EYqR)D*jo+##|g@zTm}yr|M}qf$j$$HyuY`%rvIyWZ2DhJ`NE{WXzKeV?B*Dj zO~#GJSCIn3?9SHojSnr!b^%X@qiSG$qk48Fk+3 z=~rKXG`H}(0CxIS-GEA0DeAJnT2&J#Vns#qcdM#sFknl%s4HKzs!VaBxFSDu(l|4D zWf?uDlg+bFF`*;?!LyGOn79|AU5_b^&7v*$_IH&-jmd3PWsg^Wjr)|*rT*P)98!)# z1?+mLTQ~<>+-AjdeTtua?n((7g}b&l%#AUw8+7-CcWAwpuG}Kys2>d~`6!3%z2B?6 zX;5M!J8CtynibC&W`UM>S-MCeQCL3+x$rGFKK$$x3MUlt%(|E12t|{G{c)b70m_Y6 zrB%xBfXSV+WiMIzR`utf*@pEh>dttFM0KcswOpzk`trS}VykyL&JcO&Hv_9o5!QwO$@5OIX*?eDD-^f{7T$rf1#!|MJ&N3gO%@T$MxCVLmubj^#n}gMm+XaGCV)iVc(ddp z9&9la83+V`h(I6^VMJmp58q~dmhhNoJNiT62AyfOHXVjA2yUTwCzI20U( zPcH8_bq*v|l_Z{`T{S1f=)2DR416mO{8amzQ(MV#qd2#tDA@(x7(vjLo`%rvkR#>(adXub~vQj z5BzEGSN@y*VE;NrPOTnt80+d@K0a?vUyKLjv{1PJlS**!W4aa>-U(Kn{~R9L@&Efr z{q6bxMvAfjJLg0F8b)#_xSEY%DL4OuJ3@(FqfMdSmlf|0m4l?FrHVguSD|EZ5PfUt z3=)!k{+uV7PH}$@#1^dh99nBxMO=5|P{9 zlsDlk>upi{#U#j`it4>IhDy;Yzw-1?YF&WjlvVJugMoKwgg(87i8luA|L=W&?_WRs zcJ%wxc3O2MWE{g8Vzk5|7?OAbIoE#wk9Pm`^zqE6!KR2Q{L6g)P&wmUw4xqwKIcyU=5Y!!V86@g*d)^#BW6b9i zaa|`W@*#2Lq{cZl|jTA%w7eftpl#Q#i+I>Kwx#6*G0#rvlq}wlSY2{$M$&ioy))fKX$Cm61cr{H68L;?SdLFdzZcI-uJ!N zy&u6IK%*|$|Gu*e>{_^YiF?<$_dV{t#=ReLS{Jj*mjT2fxCj$8LNUN0xSc16syh9H zBUb6)-lged*H{TfY}>au|H@LquUV5trNX#b`Iq9x1{`XP;Bq#rmxA*@yQVjX8hI+N~zr@S?vC03eD}PY=&uB`~ z;x1|0_d*L$6s^<(^p+ipfd0Bf7qFeWRP%J9-lSjiOk6VNK)qhMlpE9XHzd=rEO{&T zKkb62A&DnEN`(J|2B}^*WprtsbUU|@A{W$dUTZS&bf#6!diR%7n2pR#d>BQedgSYS z1V#jqnOxpkkC~=(kAP3Y1Pn#yPM&yhR}8ZmB0|!_49Q{o?^M&)h9y!BtBjiIV?k>N zVO=JnnjTpC^5W(&M7{;SLjwj-zw-|Z>iS*qnWqf_+JNy{apO7gM;I({=bQ0=>L~LpRZQ+cVEAH zY+66>#i|wlXyz$hcJD=P!R48xk^sILs-;S?i9- z=Gxmls51Sq_Y8cGLKMS9rJ%>ZOcC(-n1)afXON=7x)1#T#fJxUIx!kAm<0yDJb}A> z#lKxx@Td1K6Ty4eZ?Mh0zBdn--utvSLMG{ntJP;@dl)3*7k>q$|E;`P4&k^0oqo2Lp7D;sg(|#{_iQ z_0crOpRA<9PG;?thv+Mq9kL(WJEhw@rQ18Djg(Wda)dT2{(iH)R_a3BZgqRD^idS2 z{vY2$ulJD$U(<8_EE)^6>i);+{;7Tbf7;*Q>i?T4rTPC}VVdw9_H05dvmapJTlwZ5 z){fxaw`b?+exUaZT*8Tmw`x7|-2FZ|pW>M9DPv za=v&?+Du{8Y;%U<+hyA0-xstc$=-VgGHUY4wwFB^SpJC`;W@;;)bNqbx6k00DM?B$ zk@lW}jFwU69ukewL)GQ~0StHo5x2N;0oZNUHU6tJLlTeD~*3;=6Hm{Ht~C<(VzLkb9M zO#NNd;MaQ+P{RLtZaJQIY`y-!`= zk+FTYZaCl?ywU++&z&RJO!%st995qjx2V|bm(q-Er-;g1#JMnJtXJB<`ESk6CG3Ly zDW*V~r|lp{9E@SS)+}-wJ_RYG&O$$Jq9FH?av>Q*`XfIIW!2lVa=Qa|p6YbXCHUz* z1K%;l6?2gmBW~smVg&s;fN7hyr84WEM)IPgU&)`}hQXX$#GnvxFL7N(?eXZi; z|H9E>WfGuL|35mk`Tt3OtN(ALh>&d3?{g)bU-}ErG@dPW|3ZDA&09^8Zvha%TNF^C z(u=>9-Y>y3Eiep8B9hRGirRyGZ9m;2@V$ZczJ@?@^lJsCI$u>W*@7IA;!D(JRyuXr zQk}qwd|XzeWzJan)ke15B40MvT>0ftLuhHl6S*QghEHUArKDCD zzT-EA|1IIS8}E=r7$@JzaF=Z-Vqce%Us4MAKi>%VK1L*7zy0Uv@SvZw|D0~~|8As6 z{x1w4d*G4{_;TEzgX;2`Q#km=`i~kc$x0eb;zY|9te^Gsk+TjcwE9Kcj!2^9^76^usFM^@-2iC-23dm%2=x(A zkavYZN`JFWg>pi-wl5rCj){gie`aAVa>HIaYHM$-Z$jcD*B9yYobL<2Gyr(}`F&R2 zeVkRy`?82W{RQlBzia*@^A>VDPvk$wVIu!7KvL^=9aOXG4umyW(py}6VtI&{pl*QS z9k9m6(T#L0>U2U?c61?yBRi1(u8+P3f+O#qCdyk|pRd~Lux5gKm{Uc38G)}_l(b*wP3I|{ zdDm9ttn*+>6BJ)uwjDych(?acSN7|)t>zSQ$Gj>Dd6hO*XpM3aBRdpOlD;6QpSI1b zzrm|MQBta~MvEzm2JB{Q$!gt1)2%v|5V_)f zFB^MnS-6bvxo)Zzmg@NOCbD@{$oN^6g4!}9?rIO+Qv=o#=k6sizRc0PBDr?@t{&wM z;MI$=GkDd(rHr+qvA$Kla7|LbOob^h-u6U{1g z0xz@oY}gOLGy!sdfF^q%4e?c20ZYPlW%U02_g4C2;JE0uCZ^kT{i9C_ibEJ&T-Nss zs$Boa2lo0u-rxHFZ=_i3UmM<4Z~zV5W8(n^>MK4Aa0KDb$gV4FDzqCvpfBJFWtwI+ zi&%91U&nAb#NH(dus5&Z1eN~ZhxYnEK0e<1e{ZA|tbb#8SIG$sz>k$DSe;n2j^G{> zZS6me#G^q$pnkm;cAdzzLHiZ)V9@TE+gJNEK{b?uDi22MIxcW_reWHdtaXV{K1%KH zzqgz%DQBjPgn#gTY*YS^qwnAZ2URTJC>8ww;P|+2>wo=&ZTz2&6pR0>;avsGSFj!% zm(TECx7w##k}Tce)YBC$8SjT4nco@=KC?Cv^-8=)&6fkXa6}l z*v9|aOtIvD(eSS1h`0duW77|c`?1=M;8WQUYruJotY3=B=T#{})5>6?H}aQS080EE zbzqN$1OBl~Q~pm8rI>_g!yyiFQg0hr!T%5YIsSjNJ^$NKvH1U$7+#>pcNKi!nlg`# z-RIC>_pZ=t&}7$8J*_bI$$GZA52G-V{`VoO+V`bxY0#Q){jBaZ)XVjjQ-qw`KdT+F z|4X}I_7nZ0z0$~H_N{7U1W(NEQut?GPXaalh~(%bc!J23dwq4~-&e>Zq3^oYsbx>g z?(a$fW^D_)y1XlYI=Z+q4xTkQYVO{m zzuZ$+G|qP7s(rC5H<6GxYGwBehqCyY{iMWEZL7b1?WL~%cNHOzrtV*CWvtHrzn{zh zbl5-K=6~NvvGl+6iXLDCz7p*(Lf+%`1hcVU)eb+IM`(~yyH&K;=FEP>rj^eiiSZ;e zm~(xmBqP$QoP9*Q9sTU~;!-nAcfn^6;?PH70uJ)_{F)a_RO zg});8R`zdY|D%=tb(>zD`{z~%S!pSg|1w$O(qW(~_y4E%`Op5r>Gu48BgK&aDuL!& zu83Q?OP2{wQ3C3V#;DK|CYK~icHZk&iC}9)u5cwm)@=68ZhC9&HVb5-dgO{{VU5p% zx4>-_m%R|4jzK=og=*sQ+zVGIukn6(Mz7M46pD7+d*Y9=xaEIBVmLy*kI?fFrLT#< zR3hLi`QNwm{~q-FCtLZyks|Wn{mgUF@WBRrw3m_h(ah^=6XziWfsbZh9rYrI`Knw! zWF-#<0ph-VUHPZ(Jg2p6$Ntk_nGS$C&j7n>Dy8%n$|FR7Se~GR%Z-|_E5pd=;kcX$ z`L5&4B#Lw%c!!|>*BB@0ZRnx4_|1g+YZ%Vk+H3natA0uR?4FyZ$`y8QLVQ%=Zj*DJ z;oszXQ0_eQCu(>mX!tyr>0&EAXVeVSJ!tYsaO|8uG{U`|BmXG9*|()>DVP7@ke**% zESmtP%K!iH*v|iTa(cWy|KCXABL2;HSK$2WVyR8Om@-{4V;ZOXT}0To0PtfxL$UaX zXDyJG#q(|p@Lh_kA^rwXSjhR?F^rLX$^K* zJ*O6boN;M3W-)>Z0uW3?{L2)9F%10x?aFTVcz>S6i0$Oi9*m;B840En^oG$*B|hg* ze&8SSCNtUeC;H@1v~9UVa(Wt%I2H9LSuzO${47agd^=6ll`}O!GP;Eez7_654w~x& z(YjWDE3_&~Isd1V+YRvlK zO9}*Q3Oy)uU_HK`>p@eyUxgSbF$?ydaW-@@~X-f1;pY>$5;`X4Rc$cLgG4_KCJl+Hx654L7KRV zVQyf6)bgCvgUz$yz0dmbL1w~}^E+>FG_0%{f#kKd#rkIlCgE+#;WyL-ef$d%$!iz- zXJ#5tyRph#sul*~?DsMzx9~QYgDFMBDVxsV`~px9g)qj1noa?gL@RIfX`UAuc>`K6 z`S6RSO+tOm@HX$z983@lDF}(Npjv+&;{XA8OHr7Vd^V*>sOxeu88E&@9%L29D3}16 z#5iJ0Z5P}l5F+F=Rh_+N{3anFMp2A-b0|Z)r7uA?CSGnGXe)59tylQ{_m(}m28x5F zZfJbg9~2T;CW&`sTYUHiaCD zMq5pa73!ijrpp&|YR+P!w(*5PvDa^b`)bF>)8ON49x z``!nqqn7kUyMFuP?Estw0l5bx4Ca7F$iqYIv9&@$k8d>0XSZ`D&i~zTx8(EtEvqs3 z3lDRbA0iUvk{;?y)j43w|6u~7HiyuBu(URw13pbuG(N_!iqm37NvB+=RV#-?NtY=- z|X!IG{EDH`=W7M@ok`rp;-Z`Y##9iQ0u|M&N|_y0FjO#N@=2SI-<{cnk5qpwH*yL$a?k^ZNq z*V^?z(4JBhhum1(jv%G?B=$F|6=q#sy;i6zgtkT~=BmS~KgH(-_Ia-m#|!+M_$03w zmS~1KEF5ZSGaOc~oBsPFR8C!U=8Gz)4ul?`a#}&vKe%#QOaEK+;-@TC{y!%tN0$H3 z>FM_TcQZvCI-r~OOU+S$=&+dLXisGW$ zrAZtLJ8FPXU4GA|dcL=gR1O6wY~<#olmFk7_%0yO?|t-Q68@9iUPZ`TTmn?>{||Eh zKmCKP|Nmx+VDB*r|AX8v9rQ=do31u(HtFxfw&va#`O`q{&gCzDj2@E^3`snJ$u6J> zfpL;VbkOUeuzQd1aD;peyCfd<*smU|&ZLS*LT?(!DD=|AGJMam3%(>>V{l|m+m3D9 zwl=nH?8e;Kwr$%^Hn#1JZES2inQxx=`#CjLU43RwSKWP){EqS29W-))4+C;eOs@cG z0~dL383$%mA^|{rnD!lzY4yWDl$tvcE9&eJYvhky5f;t?$|CFifY1aZCiN!la3QQ$ zz7A>Gr|PN$o_gSn)e5-(_&`%G4w4iz$|E>I5y$7Bx$KVQI1lp1(CFI{F|=}ndzE+U z4l{W?YQrGUXOJIMg7MZHvZ6d?=h$4=8BeLU2k$qGAm0*- z!i?u?m0RvgJD6Qw^R%%z_-$@U=XWPdn1gXrf#DKH8KX22%3C9kbfhXFpRGsfNp@}O z58~2lqGSVSQTB{Vy_EEn^^`tEh z(t_vm*vf*Yb%f5AU0UK|4(z11Y+&m|kM5T*R{ud2-kjLJylVZiO~kbqUONgjn4I7- zSU?s?A7BUgU_FYSynC8S3~QQ*P<;r_v!Yyt0@`h7b!F(-jOVD)|Kya zfIh|I9qj|&Y0+6eB)U{N(>SAGUN>NZCZShZF?!G_u`&k4cQA!s4)v~*#V7nU&o;v{ zSFJ?Ut4`ZdMWFr%_LDAp$4$am9a$zPx{Mc;;jX&P(tb+VPaO>|g$Y~?^yo)NU}H4f zlZ1(qZ4KHwg7Nhcbz>sY6nNJkAZ}~rgpbkQB^x)=D0>c% zYKKiCY}1Sl--_fQPuz;a`*O#sMk`h82ad{NQZ-h6$~9`7xn_8Y>S_i)2EDfUwqAv zN+p0p2$fjnnqrTw2IApw`=D7zqu(5BCX`^i1W8_)?jTD^o{;esm zBgYxo49QRkzN(~0n5Z44BL{d7#H_NNw)ul$)yPy*WC>v!Y@3dR`;K?}w&z9laa z26FE@*u@vdfp7B&>#3$#M;MaK8a2?7!3C3$0o^I?S5D6~Y4l78=M%;&F=2=51kz|g z0J&0O6MYTFAQ}SY5t6B%Gy}32B5xQZF#fwR{^zD2_NQyiAO^(mhkOO^x2(XTZvUMv zcoZB3BZMIcQaCqd_a!si`?X5etB4ENHkcS0X=5nf)l5s8PI8?t>U}O5SSu#u`kBut z<0O#|38KsbU3W^10BZC@lZ*mGrnAuG6m>lZTMm$53xpRi4lz)zcos~3@*r69MYf(4oRwL4+S3%Wie)d`WJNZfsCzSxq}OSNQc!19544A3d`5| zY%Yp!7~edjG}NkBd+Ra03DZ);G`*W7pLWFi3-`0p zMi*8e)3bK`7!Wd!F(!U7$Kn=W6*pSWaqb@?2EG58#05oM9~4~rc>lPm5rwk+p*md6 zF?A}kJ4t9L$?5__tl1|__w}4DD+buxwji>toCA;_Fynuf12I&=%guMd#NC-Da12NN z78*9l{U%23Yp8yqGvd=M`p#kZG6_Kw38uEo=!lK}A}St5I7SXD+Ae}ycsAGI?F zY9Q66SevOd7E*D_S}kqu_+?iIC_><(F;Z)S%5C0=PLj6hacVc%zpbT%N44ex%nv4m z-}#oh&FHYQKfYh&W5x8FgN99+X`NRjrWWA+=BbLdXy22SnU@PT;Yq2l3N{W4A!Z`_ z=WVlyg$K|W| zk+mXKJ+bX#n4^u;C3xUG#J&hlg0$YM`x-QE;M$FevvG#4h1!j*(oNSb=T=l}w}|^!qP^V?bUf7+~vDRyq|h_U*_7 zc$xTi1GFU?zXEEHufwmT-<*d&h@%NX)-^ew8_cwm^Q*f^;vNXMW74W~f$^Qw7MfSb z*JW;KO<~wRQ(vTra^~MHM~nO4`s}HV;cM;PgTA?&nQdk|UgB+hN7!%o3Z-*X_D_|x z)w@IEpw;cZ#s*hY+B5%-dQY_Sm`08cvidMDP9w3rlzd;iFX{e(k){&D6>t;5(>~8L z6+mn~z{DOT33*dK>{Eu|zz$jEUUTZr>WF*=$oanI^JM(c0IfRo2aNXuoLxNHV*$O1 z#vlH*KOr3yvRth|%b*jTJb(cshc^mJXRya*^9JTty)TnDu z{$fAD{z=!d$jMQEM5dE%CaKE?TTxiQ0)*}@X-Y4+1@FNFNM30hBXa=4)L4BfbV4rM z!kBfu@G5^T-a1fGz>-l$9|*RWN*8sjDNQ$`u7pG@nE}|FAAoqgd%#}3{RAL*5r|@~ z#-=O*oJWHEyKd_CQ(G1U`sU57hwQtjuAZF@(ymrxCso6xds1A|OX1ejcDpYUY|Vth zwjqCk^IY|d)+&#e>WTFo@}{^_0*ip{&z^XaHCEi8NA%=_kyKIwK3L%%zGi*MG){!p zq<^iC!{7e>nAO;?^leb(uYPQ-8Etq|HTbR$pH2;+d-M0O8uJ(87uX*4-;mxn{;qSf z7-&l{wqLFi#`p&tbJAJwJ-Of>@8?(#|Q zdf*_t4)gW~mV_MxJTwML2MQWt9|A~9TOv}mn#qSeW>Wd$j1D0Xl`U*;aV>hYpysOz zFW2MvF~z92n%g+f>?kt+wbdaxDe>OOV82h+i7R(Dmnh6fAh3xcL{lObWNehsE`CAC z0a{{gcrw|H`NnI`GjeYP{=M-0)fE+qDG-8Y3AI+jXo9unJnwf6{4@V(i}RNUR;}PZ zDZu7WEa{k3(yT};k|4uJ;OiwI7KEzzR=(Uj#nrq(>k^1hFHX6+PKL54dw$Hx!c%-=2dw=v$=HpeAaF9?L z{&*N9bfRRLEx)cl+TgCrLC`08!HN$CEeP}|Pc=n+e*uqX+wG5t$TJ$Ra> z>BU1*2Fj`@kNmH1>{kJja0Y-nn8!>qbPzgSILm2DX3f%C?Cvmkn7PXKr>Vza97oFJ zGcbQX?=Rrdpkl3g=0)-9j_QxvkS%O&M)8~amovugi&#v!Q5nYYv9?TBd>$9(YYtDN zc#GoAA~L-(-djB%)lM{50g8Fjg7!QD5r@*A0~Kf!#%V?EPF^Hw{^|=t!W_$CJ<|=Q zR@~ygo0rRFMcNyxkJ!#EL`j2W1i~~3F(P*Q1K*!QNU5)O{_tpa+G~&;OiNVb+?jk% zwxd>P3m&lv{Zn(&z6fK|zpSvv0$jNgaI<+2cs<-Rr3Y}SAUxpyy)=JM#IK0Ts=as& zV+%M)3?kic%=ITz+@hjLx$(g)E2-5qv>|TwF^){q0VMr+5wxnBO7ba?1qks>ANh0h zuh#-%F^o26!|-$^Zu1lZBoqLO(^^e0*iEP>=~;pO%`Mg~F3x;Uh5?V?YvH}`;daHm z?iG@kIxzfbr8~i1(P?LEyp1PVPuMULCzsAWBZ@OVjJ@ia`z^Yc-u^{bjn-O&_(3Yc zZsCh0C@%u}ZV;jJQyt@XtQ2<;rcz!U<{)*;Y2>-#HoOTc$44z_U@BUupfCWLD?g%`k!2<-h)3_pojU1{J-lS8;{mqDed0{J40$!AmY~Fx2 zs=WW$$w;8^#C1Waspd!W*Sh;ilF*1|^2hp6cfS&~6T4%+s14QSvbm0my_n+IJ}8`* znTT72XZajm4ne%8sioY_fLx93FAdr>0MFvnpqKE`+iu_$0BEWPE^b@mz?39(_%oAi zj~m3Y1ckeImL4jj*hU9be5V0`0 zFNXbL>4j52g<8J+k={QxU+c1I4?dYs@WD)N8q7xgXKYInZ)bh=EYSOtRWxT&qNpOe zUHf01$g#kRM-X*ji2^hGkNJ>ie-9P}vHCbxoxU(9xs;=4~dLmHq=RKR&{#!+8Mt$u&TxPeM8< ze^#q?|70g3wuB#0q}(W_z2K`*dlB!lr+kyJ|kvz;uIyNg=hJl^4=`Wawi~PKg1iHnw#Jb;!wUZ zge1#Tw`yKQJ6r(mG6!rN8w%NfYNV1NtvY1bfnsnzI5(f>z;js!VTKtbQY1)RPzfz4 zz#}0tl2$=^OJ=h_|Jjdlp~pv!jX5!%j6&B)2Idx^TIiBS66@sUf3UYZV0Ut^E&$Y-MD$$f?YyW+Tr`Ur*x(;8#x_^%wG2pnP)v(-msI^&A6r5SvAj zic&j9OTv|ZYfnIjlRtlKC=fueEIzJQUZkJ8cuLqAY1kQ=A)Ph|Us@WIoMiZdzj$Fg~TLO2hJ@$;Hmi;(UGOx=eWno zjPQ+zfxLr8AtRr<7`tq+x|mr{7VQ4jH6i%poz@{D$%CwVs8I*Xex>%*)0xm(~{ZsrT_9|!mR!u_8%>r01kfBb5hEg;b5ZD2D8KM0l8 zX((N%E97N+->$73X>pOxG-d5V7i2?Jxl82WN<&E*m{K^~?)4C6myYp&3SAVOPGahB zmeeOPy!vmc+5lqh_oEQ{Q(yYxYydaOe!xgfYjO$Q{qN^X9}Vi>1ASj|@cLJApf0Yk zip_C0R%&u`NU&hrE0g|}g9$<8goCF^$wh}9kju{I+@HL$N8Os#9@2E6Qi3v4M~^eMuxvRx z#Xp*3#yb9k0(!1)j%4vBiA&-6cRHVVA&vCLT0k7M63f8L&sZUuNl<5bHTpP}ebSCz+ z$(GYnWqP$TeL65vW&6t)NFDKWuEJsbH}UxxkNFGm?Cbz`$8m}ctq<@A!48$ zb>yEGVfhPOIP_D9|B4tmQZN1oU`Vq*^wmh;nj8JYkNmuBf*KUeEqe;_anW!CXdH@ney;@(HmwDjgJA!eX^T_<}9P$})zp7}B2yYFH_;3)ZHP`uM3 z=q|Ql95f@wh-|eFSvn&$eHT)Vjz|RvLC!A>F;w$aTuTo3MI}JffO78>!S8cLj?+tt zq8xzS4r@g{939s$8i|0pa?>B8typ%rj!4aRT!@Q?EQ*^M??NsWfSKD02$aOSWu6~e z?=tTH`E@KcldQoxaF%}={DZXE={Kk7c(hDAgDOzQ^rJe9=Szv($DR!^<_BQ$2LN6j zfH+qXLt=Tbzn6ey0i%|PPJ_2z=T9Dp?5Y&W!T9n5?Mx2Aae{$6Wq8cLT_t?6LYT9S zI{0C68t~WTU)#bmtbn3XZ}y*0X1AIZH-d1hsnP zNB=2rJBIuD`pQ|q*{Du?2%wWcdY=Wn#K&KKGEmc=64HHr|IZrYB8&Y z@TQO_K^njTrlH0bV?bmC(dG`4WIPZoo8U;$KsbyqS&h0oaH}qu;UvQb7)?Hm?0|f9 z6XL=xlRL(A3#Sv98mbSz*38t#l3HF;Y#_!1q*jU z(jgvXnAdPX|CeXlB?mx#(W4kafMc zbAy8jxdhU^0S1f!6`MELFP%27|5T)nn;SXlUi|^DbFBa(BKxmCF15S>xeN*#B%TKp zaAvUkEk(z@CQ4M18>BdttJXXiCZ%!}@q-XBUP%!UNze|=XzcJ}J(OY)Dv!~h&TK1r zLv!{5prm-P_}7XU#iZXMJ_DuS=H>LF9|;Nm6UtzyQ6d3iOSY~Cy1w1A(lOdf{T<3f z{(^mAf^nABe1kIa0Qxz5S9||h?@xm#L;mvy|0N|}cyHVSozrava+YDxq8f8OFXEOw zSNnavi(g!s^?foiQZ?oP{|nex+|dkq+IEk-q}EOq`3wdt*M@jQCH43TA)Rg9r-*nj zWTye05q&^TsoRM|W71zhk@_33AO7*`2^gop4V+o~VE{44Q8L^hO~F{39mt1eeMjWy zBiypDQ%x?^%r>BG8LON7DBd_wdjwQ0B*mH+u-wTS8CV|CAcGSb;iMqD{WNg(W4QfX z0TZgXu_5oVuVtHFgCM5M!zPmt5n_9ZBnhl@<18BI6)2C5JQKA(sPINqyki*gYxw_g zi)yH27J(&~@>%29w!I79QlRlTd*m#b``cx(NDe`$WK}JU^G9k3S|d9B7{GMH5$8)G`{=JWpP8g=-oAIV^dBkr9y2 zFkkJwhFGtth97}0sBXx}DaC}vJbCj&#K`2C5)}sGeWxXXEv%5&NCy4YyOaF}+jnt_ zHZDtIs{vvgk6a%OqhB7R;Fq5*=u#f`R)XitA8F_gj{KJJm%44nL*{1AMe} zB;R;}#LP>%FlrY27| zJ6*80Eh11U@|R-4N^%y3D#U{JdDa&e7u#ZQTVBee{$H(7$(S(EB<()YrE6f4c>}W! zOB5SaBLGKyr`2L44RE8M*W>Zk$akl;CYkzWE_4ELba3kI0W>5g!S+6|HO%DQ!PTrZ znfnWPzZ@S-zkoY@4UJ%O1NJYsf3&xQ+3)BFuQJc>=muZ3?QN#-9ZWAjtygO?8w6lu z1D7`Fd*5s_uSq+|L+J*9LZUalA=Bdj-kf71eDOJ$*B2$boX<-UCJt4;5HND()pJPn z5fkBvC8uI;K$$GgkS8DYD4iB0A-@dNN!cQ&XkXvXKLhYlq0^dJU^i=PaX)6Hp`zGP zCN!!wDqQ10Q?DO~Y^J6tx**f;vN$%$#C%qU_d^`8h>)5J3y7i@ds1F!9*|Ab=%S1{ zgY>XUvWJaF^amJ`nT|)h`(LzbE9C`5vqVM;9c2YjRG_4&S{7EV${Gf-!jWO9IS7sJ z{G^ptv*b>;f`^&!5siLuV-@ZoJ)=Q{mp6owqPe!q{Qk$t37AC!TY>~>e}oL6`k(YYF&g?f;^%a7#K#Yqk z@&8de>?@jiox@@0Grc1CWhOy@+WkJlBtL~^k=$YaUi-snY=$I{jdbKVvg?}qGEa|d zo!o+Lj2iKAYAry>s1MjGmG}o9&HleF1p0ovdoAt$cQ^0-u6rV9L*+~Y8+U2mG>m$+ zgkP;9QFt2gi{O+~nmbI~Om%zG z6u-kjc2cZ{;+yah>pDyKfJxEHw+Zdy)K>@>`<&pOSj?WYFa0ZSDErj{u{=%UY8o6C zJ)*|@PBbxowt6nse#8?}syX_K%%m`a6B z$-s>lEU!Mk6!Ssvafx0<=!t-1Mcv|M$m< z&3y6yiGE?_zZa?v@(s#b)Ib?U z1+YOif+EZ-j4pe#PhQy8V=$z)l?88T0wDstDDc&N1kksjhM3|rKcW9c`2SJ;3jp`o z{Ab+zqO#b!(ht1KmWOwI0ybY~vuQiOsC!__V%W3jMLfO6}LVm zi^!1WTuz+2Uk9u#Q(S2`_^+^iM)__>`&R#GwA20vIp#!Pj(v$$jlCBKCf6!&98yMpE!o}JC)qPyFj_z)O$cNn{RUVp%N z=Gt8t!%(PU3om4655_BpTu(5qD;|v~j3=hAr71;U4*Mon7D`wv2Q2WARAclqXOdU) zCyW)2GW-#MWhYQ;ge3_>PJ+#UTKCW~r#hMcJ2uQwD2Ql1G*j{~_!o1nsgCIAv_fI|PcqIh;vM5r`K|Gw==AAl_{GoxM{E%)`73DKwQ@ z$EeO6?qB_b!#d~wg}Lp-GtHx^-m5*oL07r%kZMVhCj6rMGLXxwZC*}#Wm_C%1k(^M zdJ;N_8|5r``T+t)7f`lZ!_gWUPLh2Eq9&};uv${A1>ZR8RlTfTf>k`uxDq4#3$4Yb zC(D2@?PF#2im|oN+q3uVv2BG8WqJ3u{-YBNtx7$tStX>*^YIpWJdveDM!e0fT#`Gv zf3OX!jP2YI?0_8%@{qeDrcS9xaXQ#cWdG9k9`DEEEo$pG7x_6|5lW%TJ8H|h;i=m& z7Wg;_#%bv7lySkRgf*|{x=+EWbZn+Fl3*{2Fzeb#EblQxMJo2z)?F!7xxb=k`=(BW zTt8TtrNk(29uA$23mCyI{hHE>RKau&u#L4_u45(Hh^PEIBsF=EY$&Bziz*KFqr&hI zg3^)w)H#s%2T6tZ|N2^%I(^d)yX3Dovc4`PS?KhNSJnacVF?)BU@Im87l*e?&j9XA z`=`EGj3acE2l_Fe7&FaG%N)o}r4tdtovFYaXPoS#Hr6PZ5!lER+d0L(3dD_h4j3kx zfFAXmgEd59oi5KrUuZu-k6}C^YE}i}bKY}}50g+zw@ZPB^d8LTx3^BScV>}^?$>zz zR(rhe*AsD~$ADbF#tFce5AY)54{*5vbR-(r`tMWs9lmSjJEuEaWs$JE`=0%&vn-dF zduyi8dE&_*r(^!hz|8<%tvvH?3#DkxqNERzbz;Z{?e7>V2avBe+mln0Nwd??&ko$a^e7e0*m z?)Lt~VH|WN>jwpaay3XFU-NF&1F`s9T>R7CqSzA^6%aU$_;B0~pX69qiduO%kSob5 zmT1K?z;F9d0uACYUlm8pSDp_;n9woaMZlbE-D#b1*NQi!r2%A2B9gq(cK02YK2Dk4 zfKJMMv_X&(tOE8S*~AZ8tl=+fh1L z)u-wwN_yua4Dl~YdXnLlt2Rqo0|0B0DV}%4v!Iv7z$xPMaqOSt6@Le)|e z&>{onNf2B1wvM7lf36@+5;@JAXYq&&OU~N7T*?SW=N~!y^)>Z;c9x}>Zg5EHC0O$Y zAhrv07y%-9+g1<$*Sftw5h5lZ`WABltMi(`|9HO}76fExq7Z6BnEto=-{{84toJst zgG)E;*?^jWKI3J}cP9)5M9d@|Zq+^cvwyc|!j|D?!ll;9*b1R}l}VhEYWgBQ`31nE zA(;xBRifbpX9-&MhT{?X!c4C<-Ot_PnlGTVY^%x8DZlHdNdJ)_ZV(>_c3V`*%xH?>xbHkGtPwwR9Ma{& zkI9x)(!SLOll%_3>5^psWLml`PPT!R1BYQE_SbImH1M3H*K=n=$j9jIxG0$wNJ5en zV{;uc^NU{?4WX9ZXK9nZrD3NA6(_&*x>k#zUX%akWWZ<(@c)-UvqaSn?^eeHIcAG7 zf5Fpy0-OIb0=i)-??ol%XDKoi=d9Tf&6>xoW|4WM*xKUR(f>+#)EYKx^@+4NaJH7a z`De^E*923iY5&=wvIfnJ0cSc0ab7 znMqV4pX)yu;eB`x)^~+W{OmTYUy$llg7p_GZ(DbMBmbE3$bJC^K^jB&68-#H)pno- zHRNM(n4@~sn54h=4?Xc?l4aP#MfC^62xsL1tQ;4=2z*K*$GPi(ZVPqE^^^fixZWaL zc4}yol#h(DiZ2@F12#95(xMRMy13bs1Bf5{fns!5h*iph!?y9H%ko1ySSCknRhE}c zbco5JTskf145bsC+dZ_*^^Gyx06;Fl(wv(I{4W-? zS*4@gi+9Rx|1f)`V-LG)C?^8g>bZWTMFLJoop}mdrrnhsE*7dPE6D`u+6S1pj6~x= z_KFDcT>)((L6w+qk*{U$IcsXxyU@SJ7^zPN4_qpvU|-=-U;?EVP$xi4kY{(}Z&Tv% zOeTd{ito?4Mdr`d_C5#W=@B7NW~5*!V@%VLmnvVj?qZqEh5!ZHA@wb_5*Fc2a=1ew zzfqu&Nn!J0u>xhAiB)V1CsGLJx@b;oxbip_AyT3ekgP>uRi~%#dO}2P!ltlbZd=pQ zET{wkIEqSrqMK!Rz;yUPTZIM)%`@%6MK-1jlUUuhsi9gD$J`=>l8{k=0IPPndSo&l z(QtO2XfjDOpP&rs`nrjWaYX2>wpn}`s{MyzU49w|3J%C%kZc^0vR^XMh~d8jEpqlB z%|l;t1;7+82-r21c%fjBP(lZbAl1G0Cu#EN?HpNc)j54XQ$}6A3W7uHRgrQi*$;%$ z;l3{#vM1l1#Qs3-;?afrcTWh9&u`Weq`{166OjdLg>-{Xg;hbNqCb|HyK^y!>eU!3 zkHIaci7kgsM`_x>reY`7j)=-cWmUv=x?1~Q>4&|UM96=yE&*<-Wg=Y<{ka7jX8|8$Qk$ld3>yiLa8}(Hmf*G8f=`0q7~bhZx`6WkcpuV)>SYfbY2@0!>u+HFYvynv5Z&CeaC4M*XJE=q zk#!^`t#tZFxSY5c#>2BkB%$k%#x9@)lrAT)*dXv!VmV%Bt>gg@Aqm!2PjZ` zWb(@Vhdjylx8*(MH;on{-a&w!X6@Mlce+XXHE$%lzuNpHWgq~8oKR<#c=JGseEtxh zDzH^iW)aqH%m$2PNBL_|1kl|keuuJGXu2f8$8fPVI@r-C;P#LLXo}c-H1+=OOH8`= z@2wqxKTx2i!C=bO#quFe(7|!&num7`kk%oSq(j|V2#A~Dxb2W27bp9CWJDgrk4r!% z!>ATMsF~f9;%KX(RhTjd0htXS|Mn?YgkE1HR%QWRJr64RLzj5mr%!S|l2P0v+*LDc zSl?y?N}CY)F#9J1IadR(W%E6!qvD=bV?8Td6)-xc??he!|NQ~@w7+}p16&9V%xo%$ z9D)Ot+=MFsj@x$a56jIhc~wZz1tKo@RWSapHwTI&9AmmK?4AeYVR%CI_(srysHI(^Zn_3xd*LVCxWYD4Ofp3hq4HEF*I3*C^MabKoL8o8ny(dJ z3Yt||PzBD$^i&#k-#CaAkUiYQS1{;bu3{F|SxBcD7x3q&2?Czm9@R9O-@jAgGn~_L zEjJQT))5X7BQxqOH{p)5EgUr(>)LK~uMs?J5G9n%PVS6(&}euK`9k`TenzvUg7e*a2h>d zXs3V+*MgR|wpFVRo`Hhp&W?`EA(=TgUUIvTY2}EDZnmSJ0pRt!*n+n2TZ;Kv=)XbY z-qgG?mYlns!Rwj7wC~cz4+fz_q?-iU-1sW*!reqNn_JvDN|g#)2xM-2m@@+}DhLTK>t6;8it(1fs@^ zo2k&^0D`9E%}`bLt^yAt7l~V9*FfuH%eJ}L;X@MrTW#KlE>A@QosX-fk3!T~7H_ee zly?krjR3>gd4ai5iF2R5E8?$j#TAGQ4B3GiqnlN=>u75TS!LE<{z4bd=++Hc|A9^H z6+w-?`@j_kC=tQ{BbYe%_Xmw>ONW*0XI{(f8QcXzSwNB=3$@z!6V41uK)`_mM*XZq zMtx5ef161Gh3w~EeD(E~%je>VU9^!fIspV2oD$(*F~z$pCY3hSB-X5yy_PA8KxoG!6RJ1J{#Q1*o1U9=7F2wTf(3}LknUoRUNid;XLmPr=j z1+8TV%=nKuAKz~x5in3$Ob|7bGToT2*sfhez2+8Y4(vNlOB)1H@@9Mmz*LE*t zs2#%=^8@yw^jK&I+>4@{pwmR-Kg5HZx!(1i7DIEhVoXA+{UcTDFtp+qPuczSxjQ(x z{P(tgl=?spVh1Llt%yK)j@0L0-i&1Ta8UI9F_n)q26QBh->4T6pc;ftRi2+1JO2Wm z-CW5GYeq?BPdQrVIs?0f3wK`+Y~02!FGG++?zAUJKLiHB9#iMaKyjmHxE-{-Li z>l?PMeDEWQGy|SFGnJVlbY3BCgd?W{df{J^VlKtqC}T9xoeYyU8@Z4;s?_LuD8TQg zigFS_MncVF;fr*UTz;kevmAHpJpnBlY?>GKY&bFp-$r%ALPd8#_;;8S0{c$UBsH{0 zG(#)BM;K4>kCZr+=p3UEp&WLety4f zOc--;N`>(Yw%*$S9c|FHyS*NKAlS(?RQzS`o#%dXdq;{Cnofy0=q@zH&|EV=V24E#< zYG3ybu__E_Gwd-a6ERIbmt2pB3(8n{Rf-&w*bp~U5+y++_J1HV7BD-$4eN`5&mFtX zB>l>Is&p|%=r`K6EbSEC;TWAD7;oulk*--ID`o6x*(ghM7S*mJoHR^OpW&uNI9IVt zj13ZKle5$c(C2a=?GSv7so-rU_1d1wXVS+gY>Oz^za`Ka1Zpn02|%Sq!oT9|<^*PmqlrVlnvUUJxI#)}HFn1%#;P#e|v3Qkh1o z)hl#4_u(Ep#mX5L=Rb@^6~u0Gc8kZek^2rO%}(bnF(4y$F<}W@J_nuaoG%ALG4ObU>b%%7k?Hz+r|qbF6rfP6qKh8ssH3&(>DZ( zQ~Lhv@3`y@vhgL@X5-K$QN@q!fiZB&s;1qf#4e%YeY`Zo!7cHw^7{jXL{0Uvyv#*y z1uxO~CYPmEnipOyWt3UN?DS)ScL>g;D0r#A33^7qN43~N=F|9{ok?B(E#j52{~NO) z9B7z=_XF8+a_SpRq5eqj^;nrKragCBdDsmjJT(TBib%`i6vW=Dw))*h!>+v4`Jry< z%aYbB{nL)|(zx%j$ko>4-oBF)YxQA1Hx~d!yqF zqDFa}V8}m*jI_Q`6n_&TLB?f-5b}I)F!KKEJu6t=0KdU~0|)y;<~y&uGst$U61z1MzlDW)a0H^-OMhmz?2XVEA=U$y7da;S+Uu2sF4vS8 z5K0q;B-Fn(TMl$ieb=El+Y2WXbQ(_h zP3%tv^?>*xkf0S53Y!RaIufGFguc%3;#_P4gNf?4f7}O{1@wZVL!>TBc|m}%9C5*^ z+mIQo0O|k?wfQUCn2kTO4?w~>MCPDPVMuU>)?OmweeNvX_(fE}ScDSWX`LAQ&frEU zAAc$MZF$nGB8VZs?YY$!mi(scLv~Dtb_X{_#&KgosZz4Xi#0xtjz-;Xfl!#c0bC^e zq}r;F050>jfo?x!C8gH??0$Ksjxu-zKA1#KJk0y_p$*48T3_t7UMIg+hB~FR3F2L3 z)E9=>%qnz_s(x}+9_BhJ;=690RR$J-s1j{tTVYIKnNy`dXY}3{f+a`s>CsXNCG?l$ zqKPIBt|+IP6p>BJt(Cg{`=r$CEi`eJfRTceM$k8;`{smE2S*oZ6}dab*m_g4EV86S zE8y>0q?UlB@=6FwH7o+>n6K;~4u`d2Q5p_z#GL|_Wd=*8IrrQBg+Yp=77)6o1ZkkH zbERT7PD{i_9NF1HB7=@g0ed-2MuvK`N)*pT23Wdqjj}H>%>c|eaIb4dWuGp8wlWh*^mY3M8($Fdo8=5EF*{4Fq9Iai5G)sgg z!NDp8f4k6#49>0Nfu2D#8NIS4kV8SJ&C$!(&&@ami2IGGpDagXk*Rwb{;!%X) z_n#}1p#>7B7Y<{}Ue=1ix%6vD&kc_ia#Gt+#KeZ;M}Dvx!+~6M;^>kDBxPi)Sdk=B zIGY&PLcl_Ch!tu}{W)OUP9nmnPOUx73xzW)Z-L%PaG1TD&%@krQm0*3R?|MSMk7x& zOg_8ivMj|v(&nRBoWmygi6fa=5mpE=lKL)0aAqNzN9MaUcoKI;`>rqkQoaG_7YBM| z=72|Uc8L=&Sw~#xG6J9`R^kK#s88P3n36Ai52S31#5-wdB!V*sV$k>hEtH3RM}63b zU{36|WUztV-TM52SqAGr`aSnI0g2LJ8n0{{kG(<~Gj55-TxnQd?cI@czj0B-*#%mA zGSCOS=r9{~WG@i>P7T-??QmU8p%U<#Ih0JjM>ZTuwRkbL-y&_~F83typbg>N&^*d} zCrk0%*tlUama?j7rLmU^cSl!PDmNp0XG_+BqA$anZzbnK-NQ|Qo=^DfthGMn9@w1f zo}ufBR9gnrWQga8z;NOxM}FK!G$o$wL5dvY1fIcjIi>E@$GZ}-Pk47 zWi?sg?z}^|bZysI7Wp~e07}^!ia6<>0ni^~Ut8Y*!)$;p`4KF4w3Lgh4nVbZiwz#; z*uUmYwodJ=LI>ffWR1s?kWQLhBeX_Eg6n!}ja|U=uRs>5;jTXm1VfAzU-Kd)w%EQi zS?%FfRcr*@A#`THAtOg&$vEtYvL2QkWMr|I02M~%R20o4uGdhAE!P;#7R$nx%YYIF zVmaupfdXw*Qyhy+JMZn661Merm>Un3!7Ns&t9k$TvQY&p5zg7l^8&Vx<7Ys$&bK*M zm`1ZoD&XYsbS?=nCiS87zmNf;{y6{|T|c%m2*=qsq-hsNw^I-^BMN2C?;`J-1x4dW zOxSMfy_jh~PQ?wibtRp>iLsCCF=)?vV|jvrW#S9$T)S^(o7!rt;vhhN9s$wXN8i82 ztG64;N%UK`9N)|$$mAKm3`=b{0q20Qg%g4xPrQUM%2K^qt;bKPA~*;{#n$KT_o9~I7Whq0e5GR zlKWl}*U*)s&E%V!)&Te6b;K^NLZTN^(PGn*K#!%i;;E|bX#Uhqt>Db90CtH|S+%f_ zS)Ek<0HLZ9ivjD48Dr$qQoD^kv1F|}K+gMGmvqg9?Jtb#-h@v9Q#T6nmt>tj6Y*4+ ztF$WAhG=1`syUJ0A7+IG%B2??3cWfr@G)lW7CzLMf=RsxmXQ1>hsLM}oy(pGw*HIk zQ1;-TIxEvNEwZ6rOx__AIMN@S zitE{`Yu|kwtw=L5CS1nT>u=`YnVW|$>zb1T&Wdz-qcnb$(G4WQ$EKg|pJ-<&NlrPEmuj4Dn&pH%M zz_K9>;z>b6*%x(h@26*pcXN9DI)wK8zkQz1%hPAzpyQ%Jax^NuL7t(*e~b06&|a;A z@PmFnmuWj1vqj3+?$WH-=~2H@L5mNMa#$bH-Qh$1%H`v5ciSHyRWS(l{FGQMQk3ax z4BDpI3&%NrpC6K28z zMwIHHuk53?J(mB4)WaGVZ6i4yoaJgG!AO9;wt?&SZoR(dNT6n0TvqevjxrtX)b*@F z%+iLUn!tKWvPF zR5sj78*RJVun23dYNRzv{pNZHo#(rai@3-Y<(;Qf+Nm%(l7+mEHilwtPN@`7t2%vM z{hrS$-KWfyHnf+}x2-;#8u8jLvXUjNkq1h;fvwFSZyK=PE95$B@R3>C%8W*I==be4 zRnKG4*YOv>bZrg8A^SIwS0OhT0WHz(^cKZ*-%|d&K!cf&k4I-Jkn30KcenXN9D@Dx z3T8Mi35wD!MZ*A>t`V6t&R)0f&!-^jjWAuuA5@lNYU~T{BUhB^etk|TmQp%pyg@tPjdP4 zmhuHc4n38rwh7IJu+1Lcx7X{V_2_u}-R}3zF?ajj#^)FN5;aC8fZIRCRR?fs1iMFZ zl&p?)k>A!ft3OR#yV7cJDZNHHoO+Py*h9lOl`=>Yu6J2N`piB20M}Pa=>-37a7S0g z*IL7?c!xw8Cn8=APbjg%Tx{PaSG6VO_w%}8G?Os9J>2gerrcx5b9}w;&JW%Xj+P6k zihmJeYUDV^5tU%XiyHC&D5!BZ$Ub;}va!)f|C`JB&-$tfHmU*I+kWnAtS|9(X3OcA z?dW&tE=N>Zq^0i6LOVfLf_Q7X8vxW^vCZsiqzABC9K^UQIr0s7J!LTm2nlSx18hq8 zLF<-&`rmyCv2a*@X|vE*ijerW`c%Ay%BFfN$07ovM3pZoLgT133jlOjRw7en9*xMWV507_Rr_xkeuLS>Fo z>k{K}0E*ne}I*n0;~fpHyU!d;V1rpR_)Z>)xMTAUD& zCJ7Yt$T06TWv-qo8vhrvGfm723w;bU=s0AmhDaR-B8X$!xNmC>YLP{L{Cc*ZX`jqJ zq!bhO#!_U`Wc(+0vBVJv1L#37Oz=v~xf@_ZZM|UJW&r-&|8w7Z!4~lV1jK^@`_ul6 z-?-?p|LpIwiI>M(OQP|I*%G_=e`)aNm9$a5|Jy%0K0LMee+Q@A{oh8)6L87L`oV1e z?Bd=GiehdFv-ggTVVzQThMY(1%WW|8JGw?E%oUr@Rh9K`Vg;9~OH@#x#E7D+UBIf~ zR@6#M$w_z~v2>HhyR))gvYbhhmj`%;LPRUb_3)|0NR#%3_pK&`64)7)Vg!9$Nv6j^ zrK~S2A(KWW9yi?1`0qgGF;GeMWi?Ytr;I5BwW*|Y?;;D;E=as+7mVV_YhbJ@ zqLOZ-vXF5^l$0c}%vQ@&NtuTlQE5#^Fc+0{JD7zGC@_k#@#!UA)YC_!#6Y$#Dme{p z26Fr#+Q8ydNTs5nGaFrT%FI=#RGPwQFEws9wT2Z@Nw-&7$dt=C2bBuUWOd4-GOn4q zt#WP^QHiqMAI}*KgBK`(^DE?$(5H?SS4kz;JJVTk2!r4jdUtZyM!Ou9Ydk?@npl{* zkP`loR!$zf5)J{Ce>N?pREkiHiGO8)UKy1vZ^R~qGVzigi{^?mYAivY8dORIjs}@l zNTo%IWTEAvl2v6{GL=$k2yrlt(e*e+bW8$&wNzS^NI9&2&mRNi>MTd6QYz7@=OIcT z7?pBZIjEGYqfu!m-3l{>Q0-+VQ-B8TREk{_;S+v@gF=jjUO5$i)HJx3LALWN_9n zxuUa*%@UlI>=lu#l$t)84^iUPK7{&e$R+tkb7C!YCYYa+&KUXNu~Ya_oFTf;|MVQM z%ePVG|Jgr2vCjWa`up4X{~IY!z&kb8590`MnM*jp+w>I1O@<*e9A{!W+|~ zCKcQW~t zoduVl7oyZ7iH1he8qun(YmI18i`GGl2JAv%kr5-$FI1hSso|o92P1fk1Ds&XLcAiG zT8|b676r60>a3j>UFiD;EsWGDi_oGuB{&XF!*#CKQuL^#g&$`@6;?ru1xUeBsHO$4 zwhS>`w4liI$RxUq$q*X>6IQcE>QTc&!foxgDlNH6s%fFQ>E}|VG^fQPgb*0G4C}6X zjco+N>@>qwV@-45RMU>7DlNMQ)YHkru8xVfAoh5Xw0tE89 zRzXDvIWjzz*Kdk%Cz}`b?fn+=tGD_WQiq=cTnqusI0TQEsbPpj?7kc5`yvD%V;?tw zgvGc$d-mq-^|NOj#|er@$ZtKjaOA=JV=@s0XvpW@L*MT)G(OyP!MD>aDkjkag-+HQ zJl-C%ug9Ej^~|(=>$;Z1(J9@=4#4rrpYyNyuFmn!xyy0DFWLgQ@=sS_WuOM6CCoHxB?Hbs{B6(NBg$_*Wtm||7#=V3AoP2`eB&<>w17K z7wd18UR?{?#5oSyQp?k!u9r+M#*zlKaywvQ(VZYl;Rwkr_se7f(y)*~#f3e$JBb?$ z5@65a(zGNN0;2X_3Y{r=Hb{%@i@0T*o40ULH8#=UWfrj+%%vvsdH zP;b-dNVY^T6Y0y#b&j63kZMxT%8P7BxattE{01{0%4o{dY4DaI1q>>+=x49=_v{-z z2kM6!2pV3+B?$gN0-t6%QiUl7m*;M*MlcsqC7%(w96^=ESH(G@fW+X12y{XV$k_ zW}Yr2VFLuaF&bf-*lyW15p;yuP2rUx*#yBUMX^lyxe^3Zc&kD%f|TBq*k2WbDZEu7 zh$avRDdSikK>@E~68>NIzJ0fG9P4xc&QlOc1LFj?D$cDM#%^KLsp_5#x>7+UHH~kB zpsh%B%!w>&L@9}9y53-4VP9^a=|MYJ0`8o6SWNQn6?4&F@O7q=S9%Hq5 z!0JL2c!un-d|#C5VYMxA)v5s7u99=L+#4p~pRv8P5LS2OqC5eM<;}y z-C@fRyG(!lZy_VM94s9HGGC2AY76k>aHG1g7WYE${$lyN+WPcNyGhS7PsiK>aof<- z%#-v+>PgY_%wud-P995tK?(Vzv|MIfbmQO+2r%^XzmKEtf<9}dTK<2OIsYGyk9zt4 zM#>Igs<+&kzqT8;vYubTKt6k9Szav?K?4v@M5+0MIAz%JLGK9JyvN&1%0;ff*Hn< z@D=9m%L}WtFY0L2|8fq8(I)vCG2JzO!{@4NAbK_df3W>v2mA&-2U89XgR8UCUwIz- z>$&YefFryoCm z+C={U@yYQxC;#vBKWwP%fXigmTT1@xtg%JPfmL(+uQd@vNol8rsKt)dQB<^Gc-ESa zp``GzjL9VHauCXuCdJAAWhn`$n+_?YHk<*)km7ZC;DU-331e8zI>IsGP3}AbnW(34V%613=VWO>; zpNQ6M4X{ES*!LzYxAK}RW>%MAX%wy#vvROVeAjYbZ3-+&;Rfba6cRlK3=Vy6VF6Azr3qNpO@Q6n?CK`LqBOa{o<+hFjpC-yHYg|CYNaJu zIdkFH1y*7rt>#u2h;;>4o+WFy8%_%ty{Q>23PGCH>MC>J2Efu7o)%ykkxHs82n%Cm zwbp`JXJF-6vX*?-)X3=-#S`L*AMQ3XuQ~)P$C9;V9j0bZujDgKv07_ItD#j+)G)0_*pGfA3L}BbiaR{wOrb)&0 zC8kM5M9N1Lv0ER^V}uX2&o z?SM!h8g?~!bZ!U1qm#5JWl*$5`CHYYq*AwoyQ65z_Kwev2E8+zgDsY$0Bh+^7R!+$W&-~GU2}5N;Rz^3$t@E^qBd@7SEo+) zWL3=_KpYdgqA*+fthjMykc}86eMnwiZ7>YDt_tc)YjWF_BK^O)p99->za-=~IMB&#<0;P)ULhFRt}AzuS?qa?T$_j(6T6u{vAgAjimm7~ zc8fxjHHjIJ>}{;V0n4a(2NOpP#6%YhJEA-1_Wt|#@3(jBA&MfnNC~Jb{9)389x|>l z+?|Bdz^fHeas+Iv4Lz&TdPr7;Rp%(JO87k0r?EDnS|;mN2`x;DU4zhcJfpuO_>?&l z;Tf3f=QKK%ZgkCd%7*iHpe*rrtz!P($aXF4VDyN+a_%cx{^_-3UDEC_n0Y0c)j(%g zweMvjz6f@mjgI85M%)wT0WQay*9K*@=)dFKQwN5p-hx}jn<+*7pE}fb&_)ISH$Hj) zK5PGZ(&vBJOxXb+*+@5F{<@3LRG*dWE+A9IULu7&*?pwVHj=KZRpA!I2QHe;V92&6B+M4j4A}Wvg^ZcW zc_H&Qi0lUlY%Mr|!@MGgz(WsE#rY#~5O|Pnc^(U>NOIC<<@q`U1Ovo<8R7_e=wFgs zW9!xH*nVC3SiSLbirEE;x{!Iii|{)YrBNTv3HZsw&V%@3JJ|(`)_+Yvx^f#;>;K`& zarXQ_KJ3^3jg*~4{8ncNSZi#)I@`foBlA@m=h4N+uq!lMo@p(=q6LcNSx8CYL5+=K z0bLX~anUoX}Y;NX`&ja{Y` zt^b;`Yvnd7*Z-qz{6z*K#!>K_k}qBMO-= zaQP)X3!xpoWv$%iO40hCGD=vnjf(aE=>1WS|35tL*Z+-_9nBr8{tmzwqH8S;OjW$k zf>M=x^M$;7QzX>gqKaK~E5eL6EHCBAtCxz+Ob>m@#$MU2XH{GUktK^ti3K~W&KxOo zt$vjm5=wE=gJZrFF4+K`n*pcFlPj{3FNp=3irJ_VHN-H~9ZT;$d}n(G|I$b2D{m;9 zIZFB-&AEN2>w-C5!V;+HWkICO&JM5-VqZjX0fW!Tbv^jR9J;vGr|l8-5{kHesS7QRh6Tu?KqH-&)9_|;R)YyWpM#6so;|}Q90F`$!Dq5ZVHLT<=@YS0L=i3{z3pj z{=Elfa2c6r$xebA4wD##whVx{;(QU3m}K;oy0>t?q=RzSo-kLmC1VCUMneKfv(KS* z`GcF>BEqHa6m=$~zhhxpdEzYOgX=Jc7pGSu@X!ZvF086!B8ZQ0Xx~HNcs3#2yaM_E z;BJU_OD-c)6T0OA;F_;L)L7Po|D+MszXpQ|F6uTSLQJ*0bVm1bik?*ygP$|4G;NrEGS zPt06|2UHPt5+EMD0SCz*MnAN(tMk=*U!&9q=;l^H#F2v2>g^1XCk`IB(N( zkv5l_012+@1t4lGv3UuByLNg6YZSOE$FSytcfP4jz+yS#Kdr^m#S0txmWLhN;}6lb zbOPSdhv?5F7J-ePr&w(HQvrVi9PH*yjm4Nk^H9Kbt5!pt<0u7y1+nL3)8tk-(=H_LK;FdO=T#pr;q|ln8lx0Z#%B|05Mu zrNeVW1!X!o8X+vO*5%)afTAnM+3{?&XxmaT2^EoC5TO(8Ot$?J;MhKpbO;b4%#4!O zUMd7T+#c%8vk4JlZn^>|35{7q*{cU9D>wbK$xOFCfDt&K0ezNe4(~EJW$Hve+4{f^ zf!m{P_KP20qd4>l6Y>qg(;PW-uzfSDOyr5eg8fk((Q~Bg2)>ZTfBgQV6rDn zfcANf#J(_!=1_@IQfu`@{W)T*LK2Qgiau25-h|0vUtUoulK-giwH>rkA^$l%ILgL< zJU%%X_wt`jlpT>Hs}KJ8hJ!!yA^Z=D{3trqhkcX})(HD3Fk5ZV*BSG%CV{o7>;pb( zq1qX?)qJm5>_H~fqj}V-ad;9Ow z(%XNRmEQils`U2X6{WZT?(M&O`|q`uH)8*N_4%jX{@X-d3Lq0PYcJ&h#RP^q`O`}Q z^vy)f+Dkb=flbI04&4mZF9Xn}iI}yQ-h-f`^d1BirS~AHC~wJwK$Aa!x9>raav+eq zA-gR9V0Yv;!0yODs+Q-LZY zmwsDy(NzM!TGA{b)=MYDr>)rp(2BA`*P8gU#o&hi%h{?11n1b!0)qdFJ(qA=nE(j2 zo*E{CEx~XY2+rCuloLE#GSapAredS1=-}2~pHU zJAxfACJ_vOLvHrK-xdR2of*q#AgtsCe^;qtc1%BWC&KsSyk zRCZ80$&E`1!BW@MHNvXit`SxhcaE?|a+e4{!tgG?4zG?dtG5-pbqH4IauT{hSdiSR znAhQ$S)1inww2f6sjQh}S-#@7AlQ09zMCSrA;Knu#3`+m3+WQ_*)Xn-u$9q?bVD$$ zbX^3?1+!CvWu@(iW=>(h&7lvbd6s7i5D_-eL#E9~o~Q5nl!4LMgVPjuP{q4@Xw=@(B=Qcu|0SO!wAigV@Dlj|F87_JKoRb|2#f8>gE3% zDLdebjylkW{S_($UZ239k(B*l%1~NesPAYE70C8YL|HfVMT1OybvbyJs=;;Q=H-Nt z@dUfoL}jwYbt;K1ayqLdDwC?MdugkIvPz@a4N}_ygwUWk#7ndQ2vhaBM47=LLaAHoq%cN5z7gqDX@K)|MdWuQ>%hA&%#j5 zrR#h)eW8NSmXDP1+1a)!YoP`q!%QVMBZ8R*|Nfriisd!rPQaKk7hC^@V`lu!O@lI@ zwk^?)iSm@io`;`U*L@TOFj|>jPE6KhXNM;jW5dj8Ly?ScA`eypcHb#W57|~**F!~U zf#V^q1?&Kc7ha%<9dw7>j$Cuu6;>=HzEjzQ3$0Gx(PrtilsqJVD0OuQ;E;PYme*D2 z{U~OB#_ahk2Y^Q@$V8!|G;HRn*!%x(q{#E19Co0_y@fZh zEa^j`R@C`0{q&lH#^`M|_Teo*Ru+`?hnPuGCXWrdZ@11!rL}8X(T@+wB@tA@XNPz z5a1y8*co;f;swxLazi+SAw3Y0-Lh_>z%Gs9nv)u|=$1hYRMl*)Qqe6dQV|^t-CE0N zv2L+u2d*;@hJes1=rl`ZQ`IeA=lSIs_Gjom4(()PNq<{HuH!AaCpLdCp>em?N+{ks zzXa*_M8znY8!GOsTh`6_rNN@6o6$@Ey@}Vb(J;JF zZlW=JRTSw1vM zONhD`$>h%ezg&Ln+6SyM{_8la|2;f9df%V_H&NvI|Ch^eZ4dm~X@4!DU|XKqjk@0s z59Y~+_{-(DhImQd#h?rB;%u!`R(Yt*P$o_+m6XYo$!|=4p7v@e2Bd^C>qhz$8+^^$ zV0Jx+YW1W964p>T0JX@oZqoAk6qjvK#hMwJ>y#M2ioO(O_d#6RjSO(9AuXXy4(YWR z!Uwn%itWHgj6|V2(E?kMA_hva5VZ9?C&T$0(SNDrq+kxnuF_6Rbn<>Pbh&E8xTGg% zo@dcCY##ux3%c~iUxa$@9!9_p0_eMt^FYi}3`~!Xgl2oZ|DFX=n36aMJjg;Pc*4)a z;(9(Lc}4sLLX0C15|Z?i-((>RR3B?_Qome&n^v$rzg&LfjLv-!OU_~kocsUay=3x_ ztFzNzKY?%O?=(ROS3my{!kKu9fva65)kx%_QhAq<~rW)t`wOM?%xLz-r9r2l%6k@nMhFvkBzu zTZL6%@=%!wi9IygO5*L8c~@|e5l5R>PnXWu>32hi!BB^CC8^QfTor#PhL6b{frtFW z?;?WFk!Ymn{$8@A`9J3N^G>+&onLmu3Rd}l9FMc{pN52B#5~IYBp6k9t9mi!O!*r zdCN=eA*XWUwdzR9!XVY!;EIJHzlv< z(vh028QQPY5$i_cRTlcIe%hsyjx538{POW=2+l7bPnsBflyrnZLJ;;(XY8C)HMdrs zTB0>z%jO1W9)f;!emMje*so_YP^%+cwP-n_dMiQ;h~wxAI@os!=d+PtIJK%eBC2EO z5!nSp@AgMOo*eD(=et$X5vjL0zpOKD3k^K7)*V#=q*9NHo;D+;^HL8a>n8c5;1evg ztH>HvR7H15J$kJxnO0f(S1L6_7z_A#_+lAut4-))@h(rM#)m}gvnZ$^XCa91JVfRf zIQj~0cX{f%AtVHnd?<$V%Ly32Kd{Cp*1^7YaClhv{q#0A0opdE-$%NmK3!gg!;hL@ z$=&h3b+Auq*tZUkL}Y-}qBBuzf$1(^l4NyqWlH4z=_P6c*wSHA8>oQ7910vJUj6is zj2a<79OfZ0HIz|6sF!gVO~8-)T5UMO4)!Ks9z{W>x=Zo&kNa=<3~M_7U0@f|&TYv5 z|78Cl@BhEQ-=F_BQFeeF?f&?eIe_)YzyA2wAOHH}Uw{021;@Vz-$)myyY(H>>U<*| zp1^8!r|}5t9~P@KM`*Z1Y#W)o6HdWiXGc4{8UOh!cGd-jXERTTE5_E%pJ*o zBh6MVS~oi>q=O;C=KvGv%IFO~b_*P+UcteZ635Ouwa>L&nWt~%Re3{xB@=MC|F%!DeQ8@v=YO@Vbks)q`G0(Pbez@y9vzJj`t$!L$_@|#S64ay zH?s>gmD2R@uORn(uB;$tXlKS)x4ed2@VTOMZ_S}@Y;|cWCE3r-DLYzcPwJ!;v%59k zZEPfJDy4u)V^WUQirJewDP;$pf<#csyA5qxO-0$cnj0v#eQozqtX@h0D@v1;yxZ6S z)>KMoSdppjOTkqNSY^bN%>tIUEPfHxN&qW~FCyM;XyBYLQ)Sp@#LT$p^Y|m`#i2U! zHVZ?NYpX%eGXTGC___)bgcBrcP_*WMoRp#uqNmEhM*Q}Z=Uab}wZEEP#ZaASywHSKduB8njPLF~IQRGb@q5W2v= z!;h6p`kH_hg{2sfU4Te7E`@|5D0VO^I3XE zJX7S@*abR;#z)*-n2A*4^BNk0 zGV*c~{MA!e70Kc4f{`mFPj1)6?+913eVS+ zZL5UFQu4B~=GzKn(~;zp({nzFtqLY9q^-5d!(pZ6q~Xgo#25^)n~%9xw6-;kpj)f! zFCRx&OK{v>{M@p>H;kg2dVhmlzi6=@^RGR;o3VTRDG`wKeB5z_SpuT;tJnAe`V371 z8BB7ql&6KvmrX2|Ta67?gaLdGJmjFrTe9~NuYyfUdQu3OD8?PgP<6ZD&L&LS70tm^ zUbSvgq3r14*S!j$W0lfeX_6_PW|o|rVG^I%m8uzMt(8`8S#~{1$H>;=o71IeTHUfvmQpJgRYTDMzwxv##h~mgo~LQk7$_-%{v|XaSyferL8X;oil#2? z-$bePEto|WEf%*@44R}$dr=Is@{ndglwwe6%a@|5Vbb!lQevZ()S&GPQWKQ=G6o-E z;Nj&0`q2=ah1mZaz8iwS;k&FpuzWq>2f~^dyv)8Jd@8&26IfJ3mDP6#TB&_C>LO%H>r1BtAS%shqf*-;QXQh`d8#X7$#mT3<>}+ zw3ov{Vo-;+E-(loiR>^c^|5bhl2w30xLHty1h8qW#aglG^8nZt#8p()5CaPZMKrD1L^IbO zn?&q*Fhv22JVEIs%>ikQf&Bg|^SrKo9{g2N!c%+0wpg^sz`CJ7mBeZD^WcU}gj+rn z6j{^eh}6Qs^+{y}uyz;}tc*#6Y!ws+fIp*6QF=gtp029?B>mu47PY`Vel5r!?+g9iKow|poi zJdeQ$TxjGCKHJaWu#W9;dknPSpq>n6Ej&^I1~t0g76St9(3zW-mRB(kt|WPE64VV{ z*AfHkhX1$2g4fj#CE)L(Fsy(lyOQox4Q-mu4~ZNF$NY6=+C_Wcch zBHJ6bw|BJ~gk-q}ZCzkMpc98Y{3lB+XvSa_PEm&<(;B6s<=|F`bvyY*IT6mc)rN+Wr^Az(7mGvI+*N^W)}Ej#Hnx zjmYpnjHbR|laM21zWIGMZkEchj#JFw#g33;d)|`yKoux3rs9mES%+wDeBc9^X1Tg4_if|OdBFCU zLIT2?^<5SDOu4Szd-%@wEcARfx5G$&oc<$nk^MDW`Ect4Kr>*2UoO8fpE}`_$Gio# zuphLgE64UA_>5fFgHLwINFY`1+OB(%YkHcviCJ4807aI&21-vpcA8@zX|!i~NJJD0 z79Nhi$Nd!*wRh0N{yhN^rq%E5@kL;74@`X+StxisvQY4Q><1xwL>|0{?(YE(qu-gO z#x!wIOpU5=kfZH-_z99oIwfAR5Ksdgf+>#%g=Sh*c#5izg^xCLcYz--?kJ)f(xNYg z#0JQ}|NWkB>A#1R!KqIoi+F_Y=j$Q2+=o&w7n|^&{7tk~;WwFD!J39mkuQ@@1E(Yo zLL+dKSj*lHT=iRqP7(IAw*x1{{y*@Yyw0x4znf6TRnQGKxv7ZnA}`zyEGr42lX$i< zvd;CTx9G_ox1D#-MkJ{eo&(UIxsMlN31$hX9oyOr*w<@!XZGA$C%X6RWxAe1_p z%Gqr2T^x}V9Bf`r!1lqm;c@8tM2@Z|8r0{4l)O%aTwbe%3o9o;$ttybIU(Kz9G<9| zl->QsG!~af4!yo5p-i1f64HctU;>U$e#~CfWd@UstRNYr+}S#fs9vu)2N@yP*bg@2 zIN!lGb<;?U_YaQ1$?@^waqo-$7K_pUJK4QEX`?Ft>%rkTm;d#BpZ|3uWk>ovwRQjg zBk}ewP4+5F&ZoPr19wYrZKFeWaaz}0Y3*-aE~+3x1!hE8NvI40DpS6?oFFP4HLSQP z6UN1Ue`o>!h5cG27v>7o6)V^OCm(9Jq>)C%I@ovOFoeF7OE+7eScUG-IJ`sd)QoSw zslln|;in<^3Ioq};1KZlcgsnh*~o+L-|!vzE21pt@>jG#Dn4{snomP^OaP|iw31mT zxumH^D3jQ6AR)8Z%hlD2xNG@)w5y=jw z95!7pKWDQ{R?Oub$q3wClLuAnf$z>}>NmGqTjv`Nd2B$N2jP((j^WYLKNS=-l z_6zsDlBODwY&#KpgvO7!>xog)RG#EoX=RnjljW6FUhtX3va0XpsbxEmc=5!tk_V+% zBzuyMI7W{oNvtu!6y$@FT}yUBKAPK%CxC6n?526!n}7pONZ}4M0U|f8c|lKPQuTOh<{}11v9B0n|C;JD-{rP_rWd|f0o%RvnnhF8*QWoT` zqu_3>1G}v%EGQ^l#cZoO*@Sik?<>mFKE>aU zh#>5z+37>UPV;e?0J%8uSM(u~Olx|I%G!Y%UwK7mD?8$6Gd&bqcG>{Q=+x!4*91a_ zw>I*B9qNAmM-Be(FdzT-Xx!_6Hd1y#Tis86o=@ZOnlp55c(*oeTMM47os_md=amx9 zHW$mb638}_U@19la|vuK*=tMrT61A*D=}+B?8YYSYROewNmQFLSW1xET!h+6c-qCt w){>UKX*sDBqrFABA`2(i6%QtX=%t2z=}TYw(z5(_00030|Ip=-9snK)0C=XK&Hw-a literal 0 HcmV?d00001 diff --git a/community/mealie/1.0.0/ci/basic-values.yaml b/community/mealie/1.0.0/ci/basic-values.yaml new file mode 100644 index 0000000000..701de48426 --- /dev/null +++ b/community/mealie/1.0.0/ci/basic-values.yaml @@ -0,0 +1,17 @@ +mealieNetwork: + webPort: 31000 + +mealieConfig: + allowSignup: true + defaultGroup: Home + defaultAdminEmail: admin@example.com + defaultAdminPassword: supersecret + baseURL: http://localhost:31000 + +mealieStorage: + data: + type: pvc + pgData: + type: pvc + pgBackup: + type: emptyDir diff --git a/community/mealie/1.0.0/ci/extra-values.yaml b/community/mealie/1.0.0/ci/extra-values.yaml new file mode 100644 index 0000000000..dacefce860 --- /dev/null +++ b/community/mealie/1.0.0/ci/extra-values.yaml @@ -0,0 +1,26 @@ +mealieNetwork: + webPort: 31000 + +mealieConfig: + allowSignup: false + defaultGroup: Home + defaultAdminEmail: admin@example.com + defaultAdminPassword: supersecret + baseURL: http://localhost:31000 + +mealieRunAs: + user: 1000 + group: 1000 + +mealieStorage: + data: + type: pvc + pgData: + type: pvc + pgBackup: + type: emptyDir + additionalStorages: + - type: pvc + mountPath: /data1 + - type: pvc + mountPath: /data2 diff --git a/community/mealie/1.0.0/ci/hostNet-values.yaml b/community/mealie/1.0.0/ci/hostNet-values.yaml new file mode 100644 index 0000000000..a52e58081a --- /dev/null +++ b/community/mealie/1.0.0/ci/hostNet-values.yaml @@ -0,0 +1,18 @@ +mealieNetwork: + webPort: 31000 + hostNetwork: true + +mealieConfig: + allowSignup: true + defaultGroup: Home + defaultAdminEmail: admin@example.com + defaultAdminPassword: supersecret + baseURL: http://localhost:31000 + +mealieStorage: + data: + type: pvc + pgData: + type: pvc + pgBackup: + type: emptyDir diff --git a/community/mealie/1.0.0/ix_values.yaml b/community/mealie/1.0.0/ix_values.yaml new file mode 100644 index 0000000000..50b2e6e448 --- /dev/null +++ b/community/mealie/1.0.0/ix_values.yaml @@ -0,0 +1,58 @@ +image: + repository: ghcr.io/mealie-recipes/mealie + pullPolicy: IfNotPresent + tag: v1.0.0-RC1.1 + +resources: + limits: + cpu: 4000m + memory: 8Gi + +mealieConfig: + allowSignup: true + defaultGroup: Home + defaultAdminEmail: '' + defaultAdminPassword: '' + baseURL: '' + additionalEnvs: [] + +mealieRunAs: + user: 568 + group: 568 + +mealieNetwork: + webPort: 31001 + hostNetwork: false + +mealieStorage: + data: + type: ixVolume + ixVolumeConfig: + datasetName: data + additionalStorages: [] + pgData: + type: ixVolume + ixVolumeConfig: + datasetName: pgData + pgBackup: + type: ixVolume + ixVolumeConfig: + datasetName: pgBackup + +notes: + custom: | + ## Database + You can connect to the database using the pgAdmin App from the catalog + +
+ Database Details + + - Database: `mealie` + - Username: `mealie` + - Password: `{{ .Values.mealieDbPass }}` + - Host: `{{ .Values.mealieDbHost }}.{{ .Release.Namespace }}.svc.cluster.local` + - Port: `5432` + +
+ {{- $_ := unset .Values "mealieDbPass" }} + {{- $_ := unset .Values "mealieDbHost" }} diff --git a/community/mealie/1.0.0/metadata.yaml b/community/mealie/1.0.0/metadata.yaml new file mode 100644 index 0000000000..80076f1399 --- /dev/null +++ b/community/mealie/1.0.0/metadata.yaml @@ -0,0 +1,13 @@ +runAsContext: + - userName: mealie + groupName: mealie + gid: 568 + uid: 568 + description: Mealie can runs as any non-root user. + - userName: postgres + groupName: postgres + gid: 999 + uid: 999 + description: Postgres runs as a non-root user. +capabilities: [] +hostMounts: [] diff --git a/community/mealie/1.0.0/questions.yaml b/community/mealie/1.0.0/questions.yaml new file mode 100644 index 0000000000..caf382bfcf --- /dev/null +++ b/community/mealie/1.0.0/questions.yaml @@ -0,0 +1,590 @@ +groups: + - name: Mealie Configuration + description: Configure Mealie + - name: User and Group Configuration + description: Configure User and Group for Mealie + - name: Network Configuration + description: Configure Network for Mealie + - name: Storage Configuration + description: Configure Storage for Mealie + - name: Resources Configuration + description: Configure Resources for Mealie + +portals: + web_portal: + protocols: + - "$kubernetes-resource_configmap_portal_protocol" + host: + - "$kubernetes-resource_configmap_portal_host" + ports: + - "$kubernetes-resource_configmap_portal_port" + path: "$kubernetes-resource_configmap_portal_path" + +questions: + - variable: TZ + group: Mealie Configuration + label: Timezone + schema: + type: string + default: Etc/UTC + required: true + $ref: + - definitions/timezone + + - variable: mealieConfig + label: "" + group: Mealie Configuration + schema: + type: dict + attrs: + - variable: baseURL + label: Base URL + description: | + The URL that Mealie will be accessible from.
+ Example:
+ http://server.ip:30080
+ https://Mealie.example.com + schema: + type: uri + default: "" + required: true + - variable: allowSignup + label: Allow Signup + description: Allow users to signup for Mealie. + schema: + type: boolean + default: true + - variable: defaultGroup + label: Default Group + description: The default group for new users. + schema: + type: string + default: Home + required: true + - variable: defaultAdminEmail + label: Default Admin Email + description: The default admin email. + schema: + type: string + default: "" + immutable: true + required: true + - variable: defaultAdminPassword + label: Default Admin Password + description: The default admin password. + schema: + type: string + default: "" + required: true + immutable: true + private: true + - variable: additionalEnvs + label: Additional Environment Variables + description: Configure additional environment variables for Mealie. + schema: + type: list + default: [] + items: + - variable: env + label: Environment Variable + schema: + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + + - variable: mealieRunAs + label: "" + group: User and Group Configuration + schema: + type: dict + attrs: + - variable: user + label: User ID + description: The user id that Mealie will run as. + schema: + type: int + min: 2 + default: 568 + required: true + - variable: group + label: Group ID + description: The group id that Mealie will run as. + schema: + type: int + min: 2 + default: 568 + required: true + + - variable: mealieNetwork + label: "" + group: Network Configuration + schema: + type: dict + attrs: + - variable: webPort + label: Web Port + description: The port for the Mealie Web UI. + schema: + type: int + default: 31001 + min: 9000 + max: 65535 + required: true + - variable: hostNetwork + label: Host Network + description: | + Bind to the host network. It's recommended to keep this disabled.
+ schema: + type: boolean + default: false + + - variable: mealieStorage + label: "" + group: Storage Configuration + schema: + type: dict + attrs: + - variable: data + label: Mealie Data Storage + description: The path to store Mealie Data. + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + immutable: true + default: "ixVolume" + enum: + - value: "hostPath" + description: Host Path (Path that already exists on the system) + - value: "ixVolume" + description: ixVolume (Dataset created automatically by the system) + - variable: ixVolumeConfig + label: ixVolume Configuration + description: The configuration for the ixVolume dataset. + schema: + type: dict + show_if: [["type", "=", "ixVolume"]] + $ref: + - "normalize/ixVolume" + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + default: false + - variable: datasetName + label: Dataset Name + description: The name of the dataset to use for storage. + schema: + type: string + required: true + immutable: true + hidden: true + default: "data" + - variable: aclEntries + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + - variable: hostPathConfig + label: Host Path Configuration + schema: + type: dict + show_if: [["type", "=", "hostPath"]] + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + default: false + - variable: acl + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + $ref: + - "normalize/acl" + - variable: hostPath + label: Host Path + description: The host path to use for storage. + schema: + type: hostpath + show_if: [["aclEnable", "=", false]] + required: true + - variable: pgData + label: Postgres Data Storage + description: The path to store Postgres Data. + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + immutable: true + default: "ixVolume" + enum: + - value: "hostPath" + description: Host Path (Path that already exists on the system) + - value: "ixVolume" + description: ixVolume (Dataset created automatically by the system) + - variable: ixVolumeConfig + label: ixVolume Configuration + description: The configuration for the ixVolume dataset. + schema: + type: dict + show_if: [["type", "=", "ixVolume"]] + # Nothing to show for the user + hidden: true + $ref: + - "normalize/ixVolume" + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + default: false + # Postgres does a CHMOD at startup + # Which fails with ACL + hidden: true + - variable: datasetName + label: Dataset Name + description: The name of the dataset to use for storage. + schema: + type: string + required: true + immutable: true + hidden: true + default: "pgData" + - variable: aclEntries + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + - variable: hostPathConfig + label: Host Path Configuration + schema: + type: dict + show_if: [["type", "=", "hostPath"]] + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + default: false + # Postgres does a CHMOD at startup + # Which fails with ACL + hidden: true + - variable: acl + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + $ref: + - "normalize/acl" + - variable: hostPath + label: Host Path + description: The host path to use for storage. + schema: + type: hostpath + show_if: [["aclEnable", "=", false]] + required: true + - variable: pgBackup + label: Postgres Backup Storage + description: The path to store Postgres Backup. + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + immutable: true + default: "ixVolume" + enum: + - value: "hostPath" + description: Host Path (Path that already exists on the system) + - value: "ixVolume" + description: ixVolume (Dataset created automatically by the system) + - variable: ixVolumeConfig + label: ixVolume Configuration + description: The configuration for the ixVolume dataset. + schema: + type: dict + show_if: [["type", "=", "ixVolume"]] + # Nothing to show for the user + hidden: true + $ref: + - "normalize/ixVolume" + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + default: false + # Postgres does a CHMOD at startup + # Which fails with ACL + hidden: true + - variable: datasetName + label: Dataset Name + description: The name of the dataset to use for storage. + schema: + type: string + required: true + immutable: true + hidden: true + default: "pgBackup" + - variable: aclEntries + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + - variable: hostPathConfig + label: Host Path Configuration + schema: + type: dict + show_if: [["type", "=", "hostPath"]] + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + default: false + # Postgres does a CHMOD at startup + # Which fails with ACL + hidden: true + - variable: acl + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + $ref: + - "normalize/acl" + - variable: hostPath + label: Host Path + description: The host path to use for storage. + schema: + type: hostpath + show_if: [["aclEnable", "=", false]] + required: true + + - variable: additionalStorages + label: Additional Storage + description: Additional storage for SearXNG. + schema: + type: list + default: [] + items: + - variable: storageEntry + label: Storage Entry + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system.
+ SMB Share: Is a SMB share that is mounted to a persistent volume claim. + schema: + type: string + required: true + default: "ixVolume" + immutable: true + enum: + - value: "hostPath" + description: Host Path (Path that already exists on the system) + - value: "ixVolume" + description: ixVolume (Dataset created automatically by the system) + - value: "smb-pv-pvc" + description: SMB Share (Mounts a persistent volume claim to a SMB share) + - variable: readOnly + label: Read Only + description: Mount the volume as read only. + schema: + type: boolean + default: false + - variable: mountPath + label: Mount Path + description: The path inside the container to mount the storage. + schema: + type: path + required: true + - variable: hostPathConfig + label: hostPathConfig + schema: + type: dict + show_if: [["type", "=", "hostPath"]] + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + default: false + - variable: acl + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + $ref: + - "normalize/acl" + - variable: hostPath + label: Host Path + description: The host path to use for storage. + schema: + type: hostpath + show_if: [["aclEnable", "=", false]] + required: true + - variable: ixVolumeConfig + label: ixVolume Configuration + description: The configuration for the ixVolume dataset. + schema: + type: dict + show_if: [["type", "=", "ixVolume"]] + $ref: + - "normalize/ixVolume" + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + default: false + - variable: datasetName + label: Dataset Name + description: The name of the dataset to use for storage. + schema: + type: string + required: true + immutable: true + default: "storage_entry" + - variable: aclEntries + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + - variable: smbConfig + label: SMB Share Configuration + description: The configuration for the SMB Share. + schema: + type: dict + show_if: [["type", "=", "smb-pv-pvc"]] + attrs: + - variable: server + label: Server + description: The server for the SMB share. + schema: + type: string + required: true + - variable: share + label: Share + description: The share name for the SMB share. + schema: + type: string + required: true + - variable: domain + label: Domain (Optional) + description: The domain for the SMB share. + schema: + type: string + - variable: username + label: Username + description: The username for the SMB share. + schema: + type: string + required: true + - variable: password + label: Password + description: The password for the SMB share. + schema: + type: string + required: true + private: true + - variable: size + label: Size (in Gi) + description: The size of the volume quota. + schema: + type: int + required: true + min: 1 + default: 1 + + - variable: resources + group: Resources Configuration + label: "" + schema: + type: dict + attrs: + - variable: limits + label: Limits + schema: + type: dict + attrs: + - variable: cpu + label: CPU + description: CPU limit for Mealie. + schema: + type: string + max_length: 6 + valid_chars: '^(0\.[1-9]|[1-9][0-9]*)(\.[0-9]|m?)$' + valid_chars_error: | + Valid CPU limit formats are
+ - Plain Integer - eg. 1
+ - Float - eg. 0.5
+ - Milicpu - eg. 500m + default: "4000m" + required: true + - variable: memory + label: Memory + description: Memory limit for Mealie. + schema: + type: string + max_length: 12 + valid_chars: '^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$' + valid_chars_error: | + Valid Memory limit formats are
+ - Suffixed with E/P/T/G/M/K - eg. 1G
+ - Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
+ - Plain Integer in bytes - eg. 1024
+ - Exponent - eg. 134e6 + default: "8Gi" + required: true diff --git a/community/mealie/1.0.0/templates/NOTES.txt b/community/mealie/1.0.0/templates/NOTES.txt new file mode 100644 index 0000000000..ba4e01146c --- /dev/null +++ b/community/mealie/1.0.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{ include "ix.v1.common.lib.chart.notes" $ }} diff --git a/community/mealie/1.0.0/templates/_configuration.tpl b/community/mealie/1.0.0/templates/_configuration.tpl new file mode 100644 index 0000000000..9a81cb93ba --- /dev/null +++ b/community/mealie/1.0.0/templates/_configuration.tpl @@ -0,0 +1,49 @@ +{{- define "mealie.configuration" -}} + {{- $fullname := (include "ix.v1.common.lib.chart.names.fullname" $) -}} + + {{- $dbHost := (printf "%s-postgres" $fullname) -}} + {{- $dbUser := "mealie" -}} + {{- $dbName := "mealie" -}} + + {{- $dbPass := (randAlphaNum 32) -}} + {{- with (lookup "v1" "Secret" .Release.Namespace (printf "%s-postgres-creds" $fullname)) -}} + {{- $dbPass = ((index .data "POSTGRES_PASSWORD") | b64dec) -}} + {{- end -}} + + {{- $dbURL := (printf "postgres://%s:%s@%s:5432/%s?sslmode=disable" $dbUser $dbPass $dbHost $dbName) -}} + {{/* Temporary set dynamic db details on values, + so we can print them on the notes */}} + {{- $_ := set .Values "mealieDbPass" $dbPass -}} + {{- $_ := set .Values "mealieDbHost" $dbHost -}} + +secret: + mealie: + enabled: true + data: + DB_ENGINE: postgres + POSTGRES_USER: {{ $dbUser }} + POSTGRES_PASSWORD: {{ $dbPass }} + POSTGRES_SERVER: {{ $dbHost }} + POSTGRES_PORT: "5432" + POSTGRES_DB: {{ $dbName }} + + postgres-creds: + enabled: true + data: + POSTGRES_USER: {{ $dbUser }} + POSTGRES_DB: {{ $dbName }} + POSTGRES_PASSWORD: {{ $dbPass }} + POSTGRES_HOST: {{ $dbHost }} + POSTGRES_URL: {{ $dbURL }} + +configmap: + mealie: + enabled: true + data: + API_PORT: {{ .Values.mealieNetwork.webPort | quote }} + BASE_URL: {{ .Values.mealieConfig.baseURL | quote }} + ALLOW_SIGNUP: {{ .Values.mealieConfig.allowSignup | quote }} + DEFAULT_GROUP: {{ .Values.mealieConfig.defaultGroup | quote }} + DEFAULT_EMAIL: {{ .Values.mealieConfig.defaultAdminEmail | quote }} + DEFAULT_PASSWORD: {{ .Values.mealieConfig.defaultAdminPassword | quote }} +{{- end -}} diff --git a/community/mealie/1.0.0/templates/_mealie.tpl b/community/mealie/1.0.0/templates/_mealie.tpl new file mode 100644 index 0000000000..571501ee7e --- /dev/null +++ b/community/mealie/1.0.0/templates/_mealie.tpl @@ -0,0 +1,54 @@ +{{- define "mealie.workload" -}} +workload: + mealie: + enabled: true + primary: true + type: Deployment + podSpec: + hostNetwork: {{ .Values.mealieNetwork.hostNetwork }} + containers: + mealie: + enabled: true + primary: true + imageSelector: image + securityContext: + runAsUser: {{ .Values.mealieRunAs.user }} + runAsGroup: {{ .Values.mealieRunAs.group }} + readOnlyRootFilesystem: false + fixedEnv: + PUID: {{ .Values.mealieRunAs.user }} + envFrom: + - secretRef: + name: mealie + - configMapRef: + name: mealie + {{ with .Values.mealieConfig.additionalEnvs }} + envList: + {{ range $env := . }} + - name: {{ $env.name }} + value: {{ $env.value }} + {{ end }} + {{ end }} + probes: + liveness: + enabled: true + type: exec + command: + - python + - /app/mealie/scripts/healthcheck.py + readiness: + enabled: true + type: exec + command: + - python + - /app/mealie/scripts/healthcheck.py + startup: + enabled: true + type: exec + command: + - python + - /app/mealie/scripts/healthcheck.py + initContainers: + {{- include "ix.v1.common.app.postgresWait" (dict "name" "01-postgres-wait" + "secretName" "postgres-creds") | nindent 8 }} +{{- end -}} diff --git a/community/mealie/1.0.0/templates/_persistence.tpl b/community/mealie/1.0.0/templates/_persistence.tpl new file mode 100644 index 0000000000..b18c9f85d5 --- /dev/null +++ b/community/mealie/1.0.0/templates/_persistence.tpl @@ -0,0 +1,31 @@ +{{- define "mealie.persistence" -}} +persistence: + data: + enabled: true + {{- include "ix.v1.common.app.storageOptions" (dict "storage" .Values.mealieStorage.data) | nindent 4 }} + targetSelector: + mealie: + mealie: + mountPath: /app/data + tmp: + enabled: true + type: emptyDir + targetSelector: + mealie: + mealie: + mountPath: /tmp + {{- range $idx, $storage := .Values.mealieStorage.additionalStorages }} + {{ printf "mealie-%v:" (int $idx) }} + enabled: true + {{- include "ix.v1.common.app.storageOptions" (dict "storage" $storage) | nindent 4 }} + targetSelector: + mealie: + mealie: + mountPath: {{ $storage.mountPath }} + {{- end -}} + + {{- include "ix.v1.common.app.postgresPersistence" + (dict "pgData" .Values.mealieStorage.pgData + "pgBackup" .Values.mealieStorage.pgBackup + ) | nindent 2 }} +{{- end -}} diff --git a/community/mealie/1.0.0/templates/_portal.tpl b/community/mealie/1.0.0/templates/_portal.tpl new file mode 100644 index 0000000000..2ff6f714c4 --- /dev/null +++ b/community/mealie/1.0.0/templates/_portal.tpl @@ -0,0 +1,35 @@ +{{- define "mealie.portal" -}} + {{- $host := "$node_ip" -}} + {{- $port := "" -}} + {{- $protocol := "http" -}} + {{- if hasPrefix "https://" .Values.mealieConfig.baseURL -}} + {{- $protocol = "https" -}} + {{- end -}} + + {{- with .Values.mealieConfig.baseURL -}} {{/* Trim protocol and trailing slash */}} + {{- $host = . | trimPrefix "https://" | trimPrefix "http://" | trimSuffix "/" -}} + + {{- if contains ":" $host -}} + {{- $port = (split ":" $host)._1 -}} + {{- $host = (split ":" $host)._0 -}} + {{- end -}} + + {{- if not $port -}} + {{- if eq $protocol "https" -}} + {{- $port = "443" -}} + {{- else -}} + {{- $port = "80" -}} + {{- end -}} + {{- end -}} + {{- end }} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: portal +data: + path: "/" + port: {{ $port | quote }} + protocol: {{ $protocol }} + host: {{ $host }} +{{- end -}} diff --git a/community/mealie/1.0.0/templates/_postgres.tpl b/community/mealie/1.0.0/templates/_postgres.tpl new file mode 100644 index 0000000000..0c050b6ca0 --- /dev/null +++ b/community/mealie/1.0.0/templates/_postgres.tpl @@ -0,0 +1,6 @@ +{{- define "postgres.workload" -}} +workload: +{{- include "ix.v1.common.app.postgres" (dict "secretName" "postgres-creds" + "resources" .Values.resources + "ixChartContext" .Values.ixChartContext) | nindent 2 }} +{{- end -}} diff --git a/community/mealie/1.0.0/templates/_service.tpl b/community/mealie/1.0.0/templates/_service.tpl new file mode 100644 index 0000000000..1000d9318f --- /dev/null +++ b/community/mealie/1.0.0/templates/_service.tpl @@ -0,0 +1,17 @@ +{{- define "mealie.service" -}} +service: + mealie: + enabled: true + primary: true + type: NodePort + targetSelector: mealie + ports: + webui: + enabled: true + primary: true + port: {{ .Values.mealieNetwork.webPort }} + nodePort: {{ .Values.mealieNetwork.webPort }} + targetSelector: mealie + {{- include "ix.v1.common.app.postgresService" $ | nindent 2 }} + +{{- end -}} diff --git a/community/mealie/1.0.0/templates/common.yaml b/community/mealie/1.0.0/templates/common.yaml new file mode 100644 index 0000000000..51ebb65fbf --- /dev/null +++ b/community/mealie/1.0.0/templates/common.yaml @@ -0,0 +1,13 @@ +{{- include "ix.v1.common.loader.init" . -}} + +{{/* Merge the templates with Values */}} +{{- $_ := mustMergeOverwrite .Values (include "mealie.workload" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "mealie.service" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "mealie.persistence" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "mealie.configuration" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "postgres.workload" $ | fromYaml) -}} + +{{/* Create the configmap for portal manually*/}} +{{- include "mealie.portal" $ -}} + +{{- include "ix.v1.common.loader.apply" . -}} diff --git a/community/mealie/item.yaml b/community/mealie/item.yaml new file mode 100644 index 0000000000..aead0ef835 --- /dev/null +++ b/community/mealie/item.yaml @@ -0,0 +1,8 @@ +icon_url: https://media.sys.truenas.net/apps/mealie/icons/icon.png +categories: + - productivity +screenshots: + - https://media.sys.truenas.net/apps/mealie/screenshots/screenshot1.png +tags: + - recipes + - meal planner