From 9fdc21ca7da98fed56ca4828d379cf2d371cbb35 Mon Sep 17 00:00:00 2001 From: Danylo Cherednychenko Date: Mon, 30 Mar 2026 10:27:37 +0000 Subject: [PATCH] Upload files to "/" --- Docker flask mongo website documentation.docx | Bin 0 -> 121485 bytes Dockerfile | 15 + README.md | 16 + app.py | 380 ++++++++++++++++++ docker-compose.yml | 90 +++++ edit.html | 189 +++++++++ index.html | 316 +++++++++++++++ prepare-app.sh | 50 +++ remove-app.sh | 10 + requirements.txt | 2 + start-app.sh | 33 ++ stop-app.sh | 19 + ~$cker flask mongo website documentation.docx | Bin 0 -> 162 bytes 13 files changed, 1120 insertions(+) create mode 100644 Docker flask mongo website documentation.docx create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 app.py create mode 100644 docker-compose.yml create mode 100644 edit.html create mode 100644 index.html create mode 100644 prepare-app.sh create mode 100644 remove-app.sh create mode 100644 requirements.txt create mode 100644 start-app.sh create mode 100644 stop-app.sh create mode 100644 ~$cker flask mongo website documentation.docx diff --git a/Docker flask mongo website documentation.docx b/Docker flask mongo website documentation.docx new file mode 100644 index 0000000000000000000000000000000000000000..54f93fb45844e855b131857e8ed47d0e6b2e8a63 GIT binary patch literal 121485 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%0D!L*-oM1i<|YQlCJu~$OT>7x^p70| z#NkWob60^@r9)A_5_v&nmucNHo45x{WZ}FO`@IzL?)Me<*%}qdkn=)#qsd9%7&Eft z-PzQwUZh%>G#d*6tSVj0P@ubzQxD;>h1_U2pi&t zy=6ACZ&6SNIUAr9p9pvs0{JNPHs&0;2IPKta+&MqxSUFL#+57gc?TOX1yhRi$_ zBSZM62L-Y&nm=amL=YnZi@*}36m%vf1p4aF&zhU$ne(-7Oe%z+b{p!ZbYQ0gj{QRV zQ{?uw^}-MToD?$!5Lg2waqMD)MCEn=yTY)Mnjjp0n4Y*Thjq$nuB4T2&Gd9VVYoA* z?iTI<$Ng*+*2aDtDUtnY(Z2nxLS!PQmW>uQbL`%EF1BpsoMu2$3|AM8)KGywpu5U; zB#bLbWn|=ss6!rCjpi`klY$HgB95)lkyxoP{7h%B6bN2W^Y$n=@C=3nW?utUT1Lz1 z*WKqW6C6MVm+IX!kBBsb*(d{TO76lZynFwA37i&IoXvYRKW#I~-gBLWtH|3*m!;_Z zJ}wQ3GCdOZqxzB2#4h3|kwO=Uf`8x{_?}+eZ-?J_)138VZU^Lf{?=im+FqZe zefld<#&)!p!4Qsd;5EKUj3Cs1hPvuKe7M z$nyE?t=+aS)qmH=$nULx2L%~GB`{O(0`$A-$>qDXxX0D!q=18oN860FowQXQyCugD zD;c$2WoT}y#apLP&(00M6dK#KVY(MtdP$BX)jIJ^D$5}CF(k)`%-7A^ikt4r;=r<=X^hl`{Ilp`0^9mSJG48Cpe+Bp>V>&iDnU|}g|u|1 zOe_LtCi(AADW}+X7@kj<|Ee<0XfN%@e1RAV_a8v~yIT97AQpUqxXOX(cL{UmOW?Gk zLy$|#-9$V`_Xg{5v>-9Ns%suzHy>V*RPgrnh5e^-3Y=$SVX{(a%q5*`P?h(<9WC^A0PXtfR_1Z%2ZfA zJJ~hkg3~0&bTdz$lqFW078Pfb0j5H5j3U_5X=`UiGKFO7g1)8TfWLWh&$JS^X3lS< zL|Qw)<1C7PIgDUW);;*mU3-*0XFxABZ*$m*UKF0Wg_xDF-8iGWU4cODY*VKrS?_NdYI7nZdIkS(xa$K2SVI z1<8%SC5@p^8=U3>f>cy4Lm8@js=M^A^3*;d51Ty81YqK$@^l;0u%meT6EmI7-x!2fvPNlR|-M*UX? z4|NiX4)AGHg@1KsDNw*2RnQ{+drg!|b*+eZ-D!Y}8qj1%Qor$IZQx6eahkUI^ssqMa=drLV-dCbpno+6;X9*Q*SRF{ zuMDM6d-4LJRZO0M-H0vFJQ|P(sBg<`8p)YVt?T@vTt_1 z@FA^Z>^B`ftGMrQtjU2T*{@jN+ujwv@y2qPo@kd@|BlY}RqFa#PVr(z7Zryyf~fJl zNzbq;dgnVT5TF-tKY?~sArkwjvH{tupcve$OE!j9_L$Qh+t+j07mcib-t#?_C`KL= ze0SNa0gpCQ2Ko`$sPICc^IO{mZ~>ooPGE7^?CFH6>*K96sb*blL2c=T@!gv7%|wQg zYOp?Sp#hcNDT1aHB}byPePJ?hABTDmDVR#$IG3`LnKZ9jF+fae}^fXX)r5~8#A2vrVKB) zhs`!_6ni8ylJ?n(-7m>1FjLH!sO+| z;h?eq{t8Y~LPQY&0R4L60^|S*{$=U3bcp!+0&-Lo7XnoM!8!gq05ubo6$AikV_@D4 zz`l;5>?AZC0RZ^^zi*)7A0@^Bfa<-Zh@i5Y?)f_RIIWuZ=jZUV)@U^(Xd*Zmi4g{y z@=`n;DR{!m(w#oHA~s#!F$3x_DiGH<`>;IJuBn0@9M`ZQdkHkU_*~$2Mhdb~(YRI# zIeF;M?8k=>oGvr>37bpaNq4%-WR^o7&&lz$#)a{$#syc?$*$ulBk_0=$*&jnbN>0~ zzjn(Ro(TS$;#Ezq1phHrj&241(@XPLFT_7h4OD>$|1?>sfaCwuG*br4C-K)*pn~NU z`;V!d>Az3(cOw4n=g4{X+i;U_HudMd-ly~3>*lA=t5iJvq0Xhp;`9XjW`{SaB-fa( z_x=32Uc8g~rTe63lP}aE+mnFs&C6-^4?W45?KPKGo3BVa&TxC)Pj2>=oH1DUc|Bk4 z2JLns{Pzl0+@5OR_tS~LfpuK@#oSDm&vk?z&bsrWj(GEi$LRy^-}(3p>I#T|NQ~DW zar!5{PFsVw+Lu}JFVZf`AP5M2Pg~Qo-}yT;iNCs+{w0;0;p#8<6J}ps&^`8lsloF6 z1sZ1UZm9Nr^Ki7hy36D4fBM7V?L@761r+Dw%cJ*4f4DDsJa)p!n;c0b&8D+IpR<2_ z#uxOry+5or`$B!W&BFh?*A9v}|Jyb~bM;rBb!qy}hIi?B__3}2`@drVR;$wHe0e+M z?|y#my!5`D?tI*6f7Xh3V&i>SGFt5>Ij(`_)1LfFL$r63pKp`mzV~XrjnCm3liu=_%5;H>0>n^MR zCvM*wVI-}t7wM`FGygxN#P$Ee8UMf`&c5k&`|yk8n8x!TLUd#%d2Yu|!>fJn%f<2E zwji3TlV0bmeVp&YzIz$Io*W(ZLg25-a8+FTJhqGLecU8BSHEn0JT&8Xp4|QR$e_a}Gax7|mwg26|`F=6sa?yU-m5<XI1Ay9arc^1sSagW#6IVlT1UZZfQ; zGv-?5&H2|kXlETKd0p>z@ju;eA3+d!YII%@^h#6OtDjcH(p|`!uK&hjTf0_E!qBb& z@4qUY&h1(Kr0u8X5cNheiYvtx4MG5@I~hnXP#2LS8S=0U)h%2 zNE3N_j7xf9H!$7V=WEb5o4gg8S>Cp_v&a2iq-Ea2xUMpMv0o8MIRl{+&~-BD`*C|t zohb$i)uKhHH>i(~&mJv) zo36inWcyn62P8Vx3FqW*#Pi-Sc)f&5&vjYKn!yL)9w%&gKdz_4kiSiyw(9L~QSpuW zzRYHCbln~-3aqfCc02XR;)mb4s|uwz=e%_cv;5KJP4RxgZb4?0O-|0 zRKSOCt6oz9qPHv?{<@!ga?1nwgBAV$wJl*;-;wXTM|Zh`CS`E9D<>eqUoaKz5eDSo zbGZUW^f?37!E>a2&i#BCLF}?nde|HpBR}0IKwww>eGtZ&_H7Lo4A$9Xn}%N z>W}AM1fQCBt7RR8g2_xsD0sW=pnG>8z_UblI?zkJp2F`QzT;`~vSa^-A@HZWc_`$$ z4-W6rf@B}G_qP|NLL>Dg0Wn~BR^K_biG02i~Vzn=4&hTrZ<)T}+q+ z%i`xN%1`V$aAfzw6N^YMChUUULs??en6Hv%E zMRz|-8xGB9dFIa5jo>xl<$Mb2r9V!g8ZBq751WT(Mp%j&OYi$cI>$8-lvc6QzI&h7 zb)uiv`p8;U>29ptxlAOJNMftLW+^p)EK=V}UwBAl`w5=NZxNm>;;8>9<7af9?@X#@ zzpB!^bUVro5rdc+Pj?KV^lnWV#W%@>jy)?+vMA#h?T$T^za#4s>%&C=rJz{+N*~Qo zITBx~!9^gEi9Bedr?MT%6+@_>zw==a;CX9jF2>?IS2 z5${5^#Z4yrhSu)FmzKT)N4o1$%t&zW*S&;U@|#)v8^VMAM!CfS>#b+XFq2GgoqJ4} zQ}Er%Ps+FT@Lslo{>l^XAVGZ?opNkD{X}8K7y>+aYXWY7rcSS_^ zU#rhnuBSqNCMTqjri=(6eFpA1Gn@I|yS3`z1;1W-A44kqdkxFZE?HUMKLQ?>SSJjw zVl`*#48)dx0r!)@FP8W42&E=h2IBVxY^YItfyuoJN!6Rx*w`HQePbamM|&d#?cR`b zgD)DUBT#-oWT*GGxWt*Q-yyOhP*4L$Y8?<|O{O?i;j!Uo2!9CQr@b+!=rDznr7$M) zV{12YCpGIB=kP5o)z~~-DueJ~yk@pxQNi5uKaYHuTfl{zRL``xF5Eac$Yfb|?c7z2 zC&AT)gND6#K3xngt~yY2?rcR+srKHf{Sdw^hm|fwV18`1vUWTJifB)4E@EH6=Lst1 z%7<^^HZhmd59Qm_^ft;w_;QwVAfzyPkVoD~NS&BXh}<4)XPXxTVmT0isKh<=&wROB z^=lRyzLy-p5quSvF7>Gj9S+hWj%?GU97!jMQv?vuBkau}ODm3dq%=0&?tu?0qx56M z7Y}sclO;zo!UJErJnsVYs>!|lUT^~vz2Sy|sAy|1>oMiT6*I7HLIrfrrg_z@`wtYP zOfKwMOsV&Gqsb5aKE4t`U@mB*VKVo_PsZ^{dm)bk!8BG{$*)CmL+c&P)mcv16H6+V){smWwELWAWR+7qEK1tfkwJi|up@P<-!DQ^7R4Vf49A6HW!s=x2 zk&o2X#f86giQfnDpn8>D9tMqvI9PUKH<*9_?Mwg;t}g>h$-!tRWK{E8fId)c0qYwB z_*g9X<~&h&s`(FauY%N$`ZM{DL-Vn?UgObTwh{h7JzXR7EolZa|BN)>83|1&P!if3 zJ{9u4xUl<`jzYeGyOo!m5A`I1f-Kds9Vsj6agth z2xtJ266qp@A}UQ<=!B;9U;s%05|W(7e$IQw_>b{^JRjci@-?(I=Uj7M*YCdWwN9Q5 znU&7fux@;PWi}!<_x%R{S)z;;2jT);eK_recf<@sb2VZJ3ddeXlHW&+ELG2FmR}m& zJnEM@5ysAUN<>5li~NdadWkg+`j@0A1HP2e)+Qh(S*Ir2*LEULo2muwneE0kxQ=Yz zy!3J5!CXgZHrBnpM&9tutpK8^w|dpCQoHHpg-t-ko2LJd|$)XConH2rnabO^2&`Jb1E<07zk~yy7&$3w*OP4 z0nbq_e))O6Lz--_G9|1QUnB5k%Ggfo(aub|7=O}KO+`l@tBWSbw~qoUC{fqJ zhaXN4(R){hCxJW+PSvizd}w{ej_2z;NLi_H+qA}dLDh0tWtE!HJsrLR%C=^OxPZ7F zf3@A=oKpAei2cyxUw$p5LTIId_kDB3yK+cIW9Z2f4|z#0HR-?so-o?vI_&>G?1Qz7 z;#w*CNokA2NXr#g-J*#FXLauT+WHt21q1GkmLL~DYeU2{R0BEhd6>lr)S2-7YFvAw z!Ip7fqUO-tI|wmU_0G5t>?1uy;z>C~le7HAP;*pxd}Ka+PGqi@6@l6? z|AZJ>yLn|b39lc0+Bi`0-mL}`@!Q*86U|h#E6$g{4%Q6m%D(p=mdvcnG|9{g_Hh}T zC(4dgC5ogRsL7H%0qtiahi^f{^FBnxPn37+h7bgb9r5h8G2y@BZ(2***%^pgqeT!K z?yOXM76@tkI^ruKGiYuf|70Q2sADEKEjP^|z<{9b#(2_u#X)4n5)cRhTf1;S&#u z3g9N*a3|la7KPRur+KB98Qc|j@F@Q?yp#fQ625g0M#tqgofZ{+SYQ|&SiZhAuB1Km zqM~6l-d9L-a8}FxgTGF{p7^B=Z}-QuV}A+qLITBAr7e+8lH>_Myq3V&-q#3+st0Zd zNuQMx_?8F=uSBvt0jeLVL<=D$W&~Y&+C1n6dmO_Nr>CO>XW6{4H1535NKpQe<`bw4Nftqt_t3pHcy;ADF#V%4N5C6Q!vwh~0-fC5 z+~7)}urIpp^$Z=D)JLzy%loB_l#w>pFr`k}VKSyI!kTK-Ncbyx;qPxL*pdg}Z9~wU zKBASgmA}*M$r{gXeK8~*VK?mcADkIrBQJ@zZnm)M@v~PAA7IOt?>_S3IZ5|}RTc#C zpNsA+#E+zygB4dj(?s|tEEiLt`ska?OLihF*)Xs&dR$=42f62@gb(`tY`b5qP54;j zLbBeh+D+{7)R7ZTBYN;>jpsa7(8UoOjh;0aaZ7WInNmC`;^);gWB0gYjXZDqeMXT; z*DoWekeINpM8R*<&U@?iVU3iE%i^rew`1MrOVL*JdINDu>uLH}D^QX3_d5w#5sVZF z@Xrjq)+m4K=08n`MN><_#^5-PDo+ses+g*J_L-B9pI)R}4Dv609jEb*kchhpSpC$ik!PWqUR`-^vTH<^2tE}Drt1&=-rzuxR=762ht0b7x_oC zs1qJq{&2%6;u)hb$K(%%cIEgTW?N_DQbCm3ZTjhkk+}@!A?)z!$ahP*-jBz$`9iPp zq{D+Y0sx8Xr_a11AeuwIhB?i)W1e-)^g70lQ&b-v|LNzZTz~SeyTlr7%Mjlvs($*= zG2*?P!lvZ1*R7>)7I4RH##=D^QTl-8;xlfRP_<)zh}~>C47oO5+-!IF2;+8-s>Vw` z;}?rrtt-n}`!u32q`p1irS4B|QOKL;3&mQ=2rktABZf;KcbjW*5{Y;9^Ev`~DG;}} z^}A5Ax)-I0UDAH}VOI3WQOmrij+sptF8KX^Z%@*>l!Q?g{kUSRsd3gG?>e(j7)c9M zm01Z@t|civ?$DQ8$VfuM_aI937~?2>Gp;jo){~R{2{h^Xt4Z3=qT|-<$;%!;c%ca- z()Nr2IR#bjO`xc?-rg~2AlKRJdq+K*E*9@Ag$H#)&vDL#uXG$%eS9P1GDK>NlU+#vChcINp|NW%8eb#(9d2ayxG*Z(SD;tWKsc60 zrXFK7dX#0xAL??@IcHK!deHWIr)$T7qi#sLPe}I`t;S9=Y&fat0X2H|qkwS}K4!^L zdQMA?aMW$14T%Pp68Rh})DM(ePA&$4HtU}*i*w|U$8{Pt6q`c7ZIH8V$01g4zTS0&F=ar_ zSUfV7Tc3Y3{#du+I<9Iyn)tJ%&=#f`oi-;?&dS)od1u>UM}qTHg>xUcO^wAeEp&|7 zANh#N^wUjy2BmW)E$AD<OWk0ju+P+^K8lkZ^JHINu0O`}bJ`z8n)b6^A%VQL}Hl zGqZ6NN~&nUUm9HYIec90)->B@<>hJn;qI_)n3LvK+cpKk@p)5D-{9}LA-#@Kkdd*A zS5wR?IY#~B$r;d1oZwIV7T~z){i8pDF|p|I#@F3#tKdA~8HeLInj#UatYzgsn#+4d zd!9cN!%vn3yNX3>r!smd(-#|?Dm&dX+dchNr3FI8j%`c+-N-}n2VB|PFb&m@d8o?I zcaMvwc2?1j*;pEAW+8E!AzI&Lsja++3tYEwJ0Uy_pEwKS_^f#l>(ybF7r|KuBqd(9 zfbz|!wE*}`+yqR24oDZqXzoDi&m$*AYK~of> z{XE@Bw^Vq{EsgsN)MLQ-OZ4RLeppyFMhAI@{p(^Tcxpv49o-w+rMFkQB--oKM^dIb zFGBY6gM15@4Owv%o8?k^*003$Wgf_xwf(Kwbnz>5Ph?D(h9;|JC&M49NSi|+Z=()4 zr7Td^2#yks9Q;%H>7tyN$gRMDHEqxkwwGm(`4R$H99vs(9;`e;f1kqfKB*xfJx#b1(Z_Ybfo zutqQLO%6oWv)3O5t#tesA02%3*y!q|=-m#m-&y(Bz&8=s+S|CvdK(j#)3J|jp^T~& z1Xox0fb&Ju0QT{ib>rU+`ecJ$fZPJNp_NS`g`EL@yUVSASuw!Z2yX#jO60vDAM98N3DF=m6G`nO*{9)Zel2CW&2r8>z8U|l#pm%o zN-V#$Hghl$Izs3gOK(y)hk))bzB#@=7dD5kVa7Fn_$T{voX-ZvM7zd9Ws4pgZ@0e_7>iN$x>KmjC0A}!fJNV}Gf2$nvApXZ|#G<}uPeGD% zE94&?ep~JH9Zrw_e01oMnOEwb+xo#$SV?S8)Vg$tLn|>vS42;mxMiJ?BAh_{#fI|j z3osH>#|~z7=NO%tk(%M`~XFQ%hUx%ok!S4vk^$RfJVKF3Q!3gr}~IQ{EW}S_Wt0};Rjnn z7lR;gz7w-~gZ_AysbK#4d7FupP2ic_C?%dHlt=1jdRFEt=fGg@I@H z3hpEy7mq8{dmJn}yZ0}(Zl%h`kI*izy&dxO*?d#ZGg7FhLzY(y?XTa>WW{9qVG=-UWEY#4m~h~ zcCZh!#`pEWI8BAEYw;Q1t^*K9;P4ZHhhm~2!3$zEPgVWk5|4brnAv$TftYoDVoy9N z@q+*oPPpuk>nzAI))N{9$zcS>)VnrEPq4X8{Z&m@mSs-1*~%sfndgBM!5x@#9V2jXWqfvDzS!qla@Y)q(13xnpnq zN^@lwFN)}w)=bygj2<$J$huZmoCRIYE`?te2fPL7xPF0%mA;^M>|@gCzuv}GD%$hs z>GwLI!Do@1lzc!GD@*yg!R2~BsaU_k?k_^{MLK^S$6i5Q4LEPOHX2zXX}4FLoCa2~ zavj&TLfJtO$+@^JnZxT_^R~eC;QD;(HAiLQH%UdOv<^1f;t}Wxp21R%Vtgdu0^u-{ z5@C5%+J=XZ7W9p&tf=>@fjJ%9h$iVwY?!;c|1yYpb9?=b(#4P*_6?f{{i08r#O^DG zUzuITK?E-Wu9*2lKMCaYBlM#{Ld4CRC&fHs^g^DC@@!Q>1cH7puwsM!#>GE(r?r`o zU-5ZeAnGSve^Gs^P4t4{lH+TC^1X9b#JBxfI8&%&313Yd%EOsgu2`HnrCRfAWE-&W z_sh_eD0-BLX2o4|tZmjhJ^rVLQ23hX&4q66O*nnCv3Ub9j3&cjTA#%Y;}rR z%Cr43_ale@DMbHC&$>ybngJ(^VUu_%R# z5l^cW4yvir%H6JM7E6#|5*tb*(H(K z#K@urn^^wGKa1|k*r?X|r@8fL-R9^0Pr?z9F=pJo{m&y;;S zeJoJl$yb_pYdHJl9wz8abYyFzJaaA;L$bG*K z74tOZVrEF}tkegKkrnGct1`~#uW8TiA%)9HO_JZ3J{HV0pE6cqrm?P|0Cf6L-rdHF z_xf+aWLRA?+3nDm)BC8S4e3euRCDpCVm6z8$6z8i5#xvb1oc%989r+>>46=3vcFPj zY$5)l@swZBpYZm$MnMEc@;e*#6p$y`sDOAV@m6ax)NZ4{Naglu?Xqk6`}l>aFkL}F zF1F0w;^LwF8`sPBiUzbx@cn8f=VRVbfl9YD`Prjx{!G2&AJNhM8X?sZ9nbzY;(>i2 ztmH>j8obO(JWXtS{23eM18s00J;du#bo1U;ey~@}^4Q_tvs;I(U-;y0oip6S#Wu4x zn((i%6e?$W+dgQgb9yPzzWdKOBYNm{zz(2?TDuCcoUbGC6|GdvrtgOL>dd6g=CY(y z@tc&_oVgbCtcxZ6@bKnqr(`wDQIh#vXgd@`RWE3iF?B=!dXrPD0x*Pk4Ii<^Pa%&a zwVyp!^M%RfSvIEiKl37AuI{1=JCsPNrbFYA^;#<;^4gt(To*2-6P z(jnGz8hrcHiwEW6K0D-IshN208PKaA3g30hVNSSiW}WmSGwo+q=26wk$o!hwyS(aw zX;yEqZz(JRbDZ%cJxEZ_Du?v(yNh3UK)Ofgwq95hph62&7++PQ0$Aj}7DW5rZdVa30dc622RjO zyQ5s3dYbgzp4a+6=)vjHL)#`uY&2(&qUZkx-}~gfdrn6D`H(B~_sXGue=^R9Nccpj zLIbx4I2Eio=w90MG@`Nq^jBg2$Ksap&@{49NPqX^jTn?A-_E5wV7fxr9Q}*+Rpi{K z@}-j4y#HvwIC{e=D4JOd{WI{Fk5mwt_trXYEU0Xw*J%J4Z@6f<+M%M&5r)gEo$4b` z)n2aMsz~7P#I`F|&yAJYqH)6CvEsj~p~DVykdG7TOPwvcsn6YLhUQt-m*~nHsdsvY z7-bGw8sU$0*B_DyiC=3rpj77!mEN6gDVznzZtRmU<0vcF;~QC z>oBDK?0aHToSBJyp9G{E4NgQp)>)&x_1h`Ra-G@-`$B-tQ9suC`?k#Myn+kFd#VH6 zyt|#mpNtA1C1Vzfupx(al;LrV|nR*Wv@;K`- zIq436G2F1X%l&dZO?Eo}>&&rzL&mFP*5B&(;ip#eQ7gP&zcICE!W3@R8Hv z`zlzL|5jEF{3I57_9yI*nU%Q`ATp`J+2L1Ic@_n}h;3~!ad)?k553_N`nFLodPO&g zIt>kebmNG^^zqNbxzxWGol4xd3`?YsWu)34Ib9CZ)lAVWxHf-JvA||C(9!lRa1ZG* zABD{#SB79w+rm62(}LqgBei4nTVrB5UX85SSnr5lL!RlouRLQ0=EM7W&N~)M?Vha= zs5fqdV?8xvj3fHA+;kjJVMmT#uxY8%_sltS%y&y55oh64IxI8eiA9HMytAtth(0?Npr00YPa`A}!H==>l-*6m zPS7e7(|>10?`4f|*t}H0ShencRk_S1`KQ;O{+Gf$HWIk5CiA;Lk-AXJ57u7Z?K#@K z{^P;oMPu6TkNiqyx;mF@DahtDrog6c9Al;B&& zx*g$0cQ)#O-*Ze;5L`bhy$d84)gqVUHDa4iY}@4}e$q`_Il4tH<`e9fj;35m>(8ue z>*!T!ZQgTB6YBH)*XrSp^YS0lmE5lXj`N&1PQ%gB8$noVGQat!_J6aqYtv0Tvk`*& zW<9|2V8xZp44HW`J2x z`2S%d`TvAusfOGjS~Tzm2Y^lmYe#QGq62BB(GPyzN$ZcF<8pR#&C`S^Dcs!@t@PPo zzyF=XUJKqLVh%>e{C{M$b?FD;P+wpl1BB~j@Q?hxHW>z%vxZHc{hb^pc>r8UVRgj- zi5WKqsu2b#fM!JmZxVL=<}kpc+xHh&0UGx4bofCeCOIEPF72E16bmuN*hm9qdELQH zcXA;pXay7I$4n_1%4(q%S#f`EFZD9~&tRNHly|odjuQhmZ8*2pErL>KM|zqE;RX2- z=wnv%Kc0xVPPFJHhirUWuk4e-&>zu&m};=H_^qDpULcRy}a7K~DjiQfO+*?^z@ zhmm`NUtkNC8`eU_j4S*83Mx#PKe0BwYIK5aR9r`WN%`QPqfoK_8BK|6lK$!A#+qWN zU@jZ7*I;IjT7Tss0e+br#i3%s?7q4EzUBHIV0(*h z47K2jii>8R(Y^5?V;mTMR(%lbSm1|!L(YPsU**r%b(hW8&4?FGYSn_4OV5{%zxzIO z-6dabzm>bgy`F{lC}?pAwH6~^eh1;KC=2(P@IVs~fBgAI=xJyTfyCr75autASJ)x5W!MbGBzROOSp8tDkXBc#EaR>;R<@#WtUq?TI6ta}eq| ze$pnzez|WAABzuzwC=+Q=^$bSD?#J@MXGHIZgQjbeV-}QYBHL@PAR10gge#2%5nCt z$R{cjtpWRm)6G%j(vr(~Fq$^hw=S#Fy!H8^RAzTVHB+y0x4sE$NbVPXu@^|VoQr!@}QM=mT|ONrCWZlwD(qL z{JvH)tbDxBQx1k3`m~hke3{zq-{d-`<7dOS()WrYKoRM=hQ8yIk+YPYQ2+HR(s^=V z66}sCgjZ+rB|ssB?HZ-!n+%k1zfLhgQspV@Hg5d2H3W}@DdQ=(F|Q&eA6Aa$jBE7Y zrQ^lpv(AdV!XN$7x;sG~o8m zO+O4Kn@S@eP^H)FA(+Uv&1PzU-(|;qdf-ogo|EO+$Pa><*s1H*s(E)EGxzqfh+0TR zGmNQm#d1-Jgn;SiS*AzzeBU}Q$uH>lqA)5B}9iL1(&2wkPJ^ERSb}zxRp7(S9p{L(@ z696^X*h=FEuCO}+6+Z` z7Q3T8RBNUs=x~>S3aQceK-^Te-k|@TkJyeX%Ph?FKZlipIeK;WR>7QgW3F<1=PAw0TjJH_`f<~OzBfu9 z?-8z3Q-v)zE9-Z*KZiQB)+d_dmwglknK1})Gl^**pJ9J@_c`$kp5)r`?GY%@u>nx$LWi%cH{g^X1rUITrqA`Tp8g3Gb#up z4n%GCt#^l>gTs;up9aRxsdHXzIJbHj46)<@$<_qO93CXNMB9vhrO~7Q=@SI_od!PZF3;vFzt%^%WzAZ5@CKbp3k>}F65FZMF7$lR>_W&aJa@k@ zfcgUz9Zq#kwtJvQ{|IRv5u+|krq|sqAGX$1sc;3FK7!3Ud6ulWW!Cz;sXJbq$@~b? z8SbE8vD7cCH89R!$CPQ^8NXn~tteI>mn9w>ds|++m(h@^Vn^JdA5NIsG^tx>lCwum4^l1yGN@C`A|5}PA66oH!%mvZM+v-2m4y3UIhOM*^+h*K6{p6!ZzA=Xh zNJc}jIEFQElJx7hG31RyNo1FB!N*hDI)B)R<^~3uhzpCi0h{lAb;(_}fR~vLsyfo(x*X|kUeE(QlirfZ5W~vb54WH!eUeN?SCq_5m9FULsy^LL z43?r7-PJiga6C|8v>A}jW;C5gJ}7jGtR01#T7*t?kD!4Z8la~4%uyy@?(Zr}`j*)X z?Q8}HXjpaW$}7B)Vz+aTel6%*&v(xlbbiSCs~pL>G~FhB@_v^DR0C;qPQEG#A5w!)pE>;8fYQcp0bAPV?fC^_ zpfr)l>B^wlCoq90UMp$^n_6CEy+98#N>ZWjw>uRG`*zE-EMPfbK*XP1v6Xw$37(?p zp|46iRuX<<-}$Hz&0c?pOWYjx!Yfl>BRe6l*X2^-BpGo`h}@~0a$^Vu^#ijzXzxB7|0Fxe`}jm1Oa4N2$1ZJuhKC4Vf7^ z&u-5zolgw8eX-vFIvgpIkCC3S(^AD3O{g{6@!Sf1>)orXW8nmN|(gQ2wK{|y=Gyh0C*0TqfzkKFKZslwr#>elQ@qGD`_&VK%_|O|> zV?uhjKB6y6t&VI;a+*a2J`l^SSX0Lv>@BTJSf1yBv}febY5LWzk05Z?;RYh~FS@=> z*P=>@Wst|2@`iRE+H3PB{=44m*YWRs$=`! zY-k=(1H8N}#Rb24>B;5H5HEfot_sD8R0*R?dFSTS9$lnLlS)x*f<-q;zwY4CmBq}b z2%Ve(mPI_sYbVFyp*5@3BKq%;v@oW$qI2C|_63#jR{I9y{AvNOmk+nIxe-f!D9Tl7 zhx}I3f|pmcg%hb!5W2{#v19TzF@1@YehgB|l=b-Op9z;R5a3MuWqSVPF&t@26@u{8 z&sC~xOh`DjG$dsdDqDz|y)`(_Pan#ZU6M}IE$@ZA?qMB}(0v2`kS<-qBSmC>`m9Z3 zgjXC>eny&j&lTSyja+=$*IdXZy(bkyyY043F?J~xbv=@c@w5n1@!jtdEJcr|I>mh} z$A}QVSux$ah^lC2L~YLLSeu}?8Y>+~ss1lKxPk#(yR@}!Szx9ci0{F^_L5!POv)VTiZ z(>_tneN8tg%ka2GFPb>kHJ5aOs!TGVuuRi%jYQCEl2&dS?E_2?xmwQ{T+*-2*coK~ zNL?}*f&OR=(q|nQ{f~_DL}`}ur=fqrmO1hKwZRzvQn!{!B&(mkJ9#S;3D_%Z4;iz6 zg4jMH0IWz0&J6JESV%F9n!zu}x|Pk_uY_+FCQ7Sq71#kOi38HHmLc~sRfgw}2VLU< zyYIi+!3>th&j*wL+wO<6+gK~XLYZr@XcP?q84rYGWF`(GG(#);W+l)5Pa8WHNPryt zx&P7Y4){d>oBw8!K8XUZKNj+N3|pduFYZC!Bpa8AfGmD`zTJIx4v0C)GjHr^9$tIX z9sc7a_Hd^(O9w^|E0oqou2(epaiae{hT}`VZP!k)Hd~`v{ga)r-&=o9A0S8I!nf@V zO8NO>nu~?{KX38`ea!>Owt7ltWIZck=XYYo?t{@lItxGr(4XDkf_fas;d>w;(3QS^ zvti`7O7vcD-@3~jQkix9_NN+7W!PUSiwccka{l$M) z;^Kf;V6Rex@3u4WQ(Bt`2nhH-5IOIY!A6_!Tu#cu(}ncvI$;m#&-JMF-?Imup%#R{ z=wXq88xyK+fAYHmc34Yq}+xj=X~Z$nngdY*7c@v~GFb#!b=R?mFuf8Tk{c>v!yOr`pf} z9!>Ef6>($W%3%$Un>`KWip#Xulkd1xS{4o?SJ_^j(Undxz56#IWRe-oR4R? z&G3Tfh1J%5<7@5RXAZ|gu#tf^1KI%);N|KkDQzv4rt>oERf_l_pR32Re>{WaPblUl z#04Lu@^Z9lrI9l3#!$yZM77e9(~Ct7(!GNPL%^a9b{h0o=mNUxMWomo%-G1YD3O9< z)eST3E!L07;DcFX_7R?=Jik6U23`DzdW$z#syp#-%xjRv^OgT>{a^t-h&4zINPaUu zBpeej*Xs$bwj_E=lOFtJqf<`{p0xw5scTEVo-=VwYb`{r-E+3+86E3@g3F6Y`8Au) zis=a2n5Xl8zk|MkZhu|GGFe5KfK-T|GBHTXTIjAlks5qvd#NBA!fszo4Qrt^P7VKBkHv( z2|aNKIn+$A^(94}op%0EX}xFH-y|X<&rJ;dG82~&s+SD6q|Yz-3$^7L?dG2EeGml| z&67d8NK{GIdVM_T=Fb_(pfH4*73Wwd<0-1Gt#MQxfSET%W>|NbKEe_jHdeHv*! zLnEh$taq!iN?h_O3Yg1o@OFOkBlD;T4+T)^`fNaYb*gKhe|`GCt@Z4{cCbQt-=B!R zi^OhJ1+UoD{t`~(w1B8?K#?+P{h@1O+gYufmfzgcu?W_*YP^c`qfaOwQIyrkG#J*3gt*N+^%r4}(;jPb|*i_Py zPPay5x3^~pp;o9660n_&u>Zx!ZYfI#2v8kwbt1$q^}4~?G*{=-zym)Wcgl4SW<^1- zG|K4W@}+>24Qd~L8a<-(wcXxyPZ3zm);4lBAuSoLpoNz6^ByNy3z$%Y3dTX#4L(MA znC(qn9NUu_{U&2u$-K9+*r7{c!VKyl#Z~hrK=o|dWSD#EXT<^co1=2T^3z18%pGVv~p&S&~k^_O+XB7P^0ik z5T#{0`F=7@5Vc<7mreAyn0rz>-g%YWXpePwB}J3!{4&i97~2@s1Md_N(}B<;5|Rcl zVfeg+7lfIfU$ZeKTpAj|)U0g^&a@A!k8v%;vYjT!DJ@e=;lHGW?bzFr!XbK&B@Kq# zj+DM$&ZBi1`lR03Z%~P@7Q?cB^wzy!ZTwWAKTjoaYq+3R=v1Vr?mIGnbrxP$l4jx+ zM?+B~z}3yBZ2IEgcZb&r_BT%x*9EI1Y`GNkK*e2Ejnxf|Mo_ir1-SJW`eK&;=uYvX zsHARpQel7Ej&7Ao1Y~ZcV`5y?HeojEe#Dy5=ramkT$1P>rJ{1_w0qa3;amu?Y~Kjt zti-(+hPB9a__t;H)G|#lVajkjt;PKn)CO-QO>WqB&9#12-^{REzAGtXl_`t2D8dh| zL*hAyLo#aZ>UEYxZ=@qBEtJs!AX|8bnDvX^C`Z>G%kma{6=H4pxXZz1ao07?Z(HqF z*xFqE(gr;@NWUH)cY*GZ(&=hoMens6dyTIeSa+C3v8N?_;hk5ZD};eN%YsrXB{NU< zO8XXg0$JnEQrM@Ts7Nq9Rz5K}auC7&B#pc$O~OzM{@6;D$~1uH_|G*;gH&Y+g^2oX zBkTf*xXeAhCJEjjCti~-*RB;>(&cOk_VasHQ5Mokb&1E6O1XvXyd58>^9weZ-%t;n zYmIa#ug8i(RL|<}-!HD_sT>PWy4fLSw)yMrM zU;p*;q_l^Eibb^YEudI^-!B3>GTt`Pd;#=A0wt=uHVBf1t>JGGS}gE$ulXmE=v)-L zx_lgZ?!%ktn9{_>I@_~7srn6F{!G158!SR(ts}WeXUr2L&+_wP?+mKoVA*b(y%9}4 zQ8HG{^ybP=Yakc2AvV>yudg@N;<1@{#5QFwhmkLt;sbqAWuIxt9yXlWH*82&bL|O# zqcya`7u_%mr2GB2y1B}hTR$|!nW}PB6u%2BY9MUYB!>rGeyX&3rV8{2&+WyluR=sW zsI+%uOB%NC-T%q6162I{trL6>o*#3Wo1&?U5Nj{UW7|=!^7p#C8(BU=#IuA0c^TzI z9Wn*a zqc_71AD{s#a|bu`t1jtMNfO4V+%T)%P7@MsuHJe`%bqCRJ8Uj~5e}RayGtt3jeF77 z2KDbCaYtyE{6DP~TVXR=#L-nQELgc|^s8E8^ci5NAW7|79(a-ME->3^c~sW|8CKdk zd^Yw^avpmySB;O1W(?fWNjzZo{wtV=7O?M*O>OU8}Mr1Ho8@$S?@UPkA3YQhITmt(F0 z_aXCxdefT*tkzEz%OMbgcNywc2tkoc^a6>!zD7G5%kG4HoX>Zk>Lv8Qk!q;neQAa;k_q#(I z_BI1;UH<8k`?jrD5AKrRJ2RJ8dz|ls{;4JOQn=JqNmui0?)0SXX2PR0ubHu+NO!8? z6nZj!X+0oU5Am%&3rT45OS{weT)|xH2*O}EE$VwEaaOuoWkTIkuQ8&&=W@`BFN}B> z)#-CEYd{Cu;UH!Od3(p3qF`l!~f-=_^OHf0;7APK=PoJ=vdU z8bMGRpJmB4sJoI7iqBW_7Ce5SYu;~F4}PANb{I_*XC@nx7J2Us=ZWvyDqBZJ+AD?o zzsvL4tXV{tzgSFJB6nZjwEw=sn;bf;TurE|wKdfA-?xf##5aJ+tdO}gNv;c$Yk4E- zQmmwqh>$p6e{b-BPCwx4o%#6SlucROfCi0CD`f;#mct_SMpfPg2FQviI+Zv0NaVNt z2c0}y-|nsvztl)HT%&^{mfZKMpaKa!hW5;1+Fpc**n4iqy;Y%@!u{lK#&P#rGyn2R zb^q>`evWAG#m>Wa$uJHidM)evw;&T%{C<)2%5qg$Uh4QPD=`Cp|JTGDMFP7$!jhFI z>{olR7@m2MP3p=DLARh9aIp4vx|!RSYh_*oM3S$2dTdT8bNDg6QW5SQ1tJv-Ourt@ zj2+iF_71ri-*)_OkfpP-jk0wMJyWUPI46R%S`=WWzk1fg7p7t2p}_qW|Gli*EwCC< z=OGYx3Fo+CmxWWml~ortwGz2_7`j+B^Dy6H=z9M;r?S0J2CQQ~#&pL_t7Um!=Oq>1 zl|hm2JCY56mcg~_7EK|4@SL22GXFxfDkCnSC@Z#gZZ`b-8J9?29yZz|pdSWPd$gj= z8;vORU)x%R4zgHq{-ejL*64qO+NNBQMUM$lB zdSybTkrF-pL^n9wh0!_U`E1~d!LpB`dU0~+R4b+jF10^Cz=K?+Z-SEcU&6LY7f*OB z>VL6+;8fbHKI1>jA%ATQjZ8&Er7b?`hfQp8ehW>vpvnsOIw4v_Ec=1)~4BxtfL62>(3EIP;-t9Nl(lG^5C75{+kWb4h$*^gEM||-K719KqG1WgDT8}qBQ6{Y8EB+_`q{ zd+#k4??G^2*}vXx6e@*|T~uKoS*}Bmo=Jlc3prDqTkJ_9Eo*|2I%WDcQZbifK67W3 zaqk>>&rEDjkGttz?w?n!j+fS}+suZ`@BL)s#-;rM40|@SqSFSG#XJkfebor|^)MK7 zyg;8=599N&YU%1sbxH0lq|~_9cdJ>Jj?Z$skgb=I{zt4I#@2ZuZ8_<`2an(L zh62xBp_`mWaI(APc}8V@)xE|-x^`?Dv)!^hCl@ioS3Hz z(pZ*guGW}op`b5mriu|XKF>38htG%RJju5tCE-A4%60?Q`uoaECxl_m_=*fTN2|C3 zw*8tTiH`_TA4x0(>EF?^NX6@Zcp#_Jj9qwZzg+JZ?!xjWEL2dM#@SbqQyS*a5rR_A zr4mG!3m)=qnrD~pIm5eF(iSeQRlAlYFJwE^OP{Fo>rCd!guAM2!l|~Ww+Ga6x=j6B z@0aWUO9CFtRKfQ?RNNyUa*tvgEyg=Y$XY8{5?5e633cUuQ{>4^ z$zSE_4R>YOjlGrkyu`9HL5kzfq5aIoGK0+J2@iwJnXm|W_CSD6@CxvJD6JcOXH0lv zGzZ6&DV|b2gBZ~5J~zBuY71rL%X}$>U25{mkez*Ic_UunP)V`t2d^yl_v$7|3B@^* zeL>|)ards*_@zHdo&uL^=fZBU2fTX`Bqf)G?h}Kh!jj8eWfl}0pG7C12;BIMdA%UK zu)J2;367yOXNyILsZPxxq(mrM=V9rL0{4Jt=Pko9unS)#mg1| z(?kiVu9X}p9?z(@4C7u**lgo*Rh&Kzw3hydfEjnUJnQ!VV(-nPp?v@U@lhfQl_Z3E z^`cS;jeXFjvhTa0gcw_PhCzi?sO&SAkll=R>|z5wT2 zTmhIG^$}LGnqG%OoC}5LZ_Y3QBKt}j#@hmPA`gSA`Qzu==fFXXFW7aaCF-AdS6kUI z^<1hgL0oAG|0uR}Y4cmSXX*>KtYcRK5VD~u4>#@sCoMi>S4&>(?fJ6Eu1GA6Xao!} z-ul?V@E`ThfKnR3`T-zRJC5J-XpjC!2=sr%QV(au|4|2aet!Od5qV~~Dr-ml0icQt zdURjo9_Eha3oX^7^#4lo@^J3!L{UMY!+-xfNnY{)y(BMVAP97H`}?RH-M0uV8D%n?2kaG<8eKW&Zih-I9FZI5Ko?rBh3T3QX?e~L17Fz(2LB!kEc zy;(6xq&)=LpeE-wTMA(e+!GYa4dkGnyQ)>sotB=Ce(=KbpZ;7FTH@$jOj_W|*REX~ z(8?bS7BVS){lv;DzmQRB-^Pjgk%mV1>eLnYjd`(eU%wi?WC~(>@y{)lq_0~l&hjjq z;IcH5bQ)e1B=C`4W8M^!|~;c&i{8!Fa2eGRpB*!7?@#rcD3b7IfTjM+hX@ z5S}ySwKn}I=7zDE^^fSkHjcf&=CYdS{HpTEL^?$}1~&Yph~A<%c^ z-_EX%)7NJX8T5wQ=I974T?3txbvr56e8x@fpP_+{OYQsxk_1!s_trJPed9>)v;Yk~ ziMTXt^d#cifA=H^JQgR^s4w{l$k;YQfWH2pC%JfG1_hE95HJpA<|xeqDGel8g~?=| z0s&I+zgnP6RHQv9t7lIl@WSH=f!X*wp#Qw*FY0y21H*f>G=~L1Eea9W{<}}^`o6xS z@1vwK|NJu0CED5kKiz^rN}u1Vs1Q=D^aok_N=>-xE`RHCmwj-1KoM;PS- z!l*WpkAOFhp%4l}ScpTqpo?$=jM$fAi z89i~!(Ko@DQl+k~t-TqYcpG%`V)^O++#YzC%XBN6inRQ#v0WvAvC^9nH&C8s}u?6k-SuM%TK5|rFFD&fO8YRYKFTb7$@)@D>w_WOcz$!GcLB{W%E3|J(lJ_Ts>Lx1wFM#m4$U{FVhy(;mzOy%UG;Z}t3`LO*v<}FCtepefnpe` zV_8yT-nuXM!F|cdrgx|nynIU13g@3Oc5uS*82ptKwGyF?W36qwtIa8u(CUulBTqY* zMIS7t9GuS%P>|5v_0UpO^EOCNS>+uY=+x%SyLV~#{v0Zv>icZ*?@@HQ`va*^WWCSX zeeNOVz;ef746wryaR>f)!on_>+>)pC-Gp)RNI8|oaf@KILs^G6cCKjLp1*<=&ngx& zEPK$&Szc!qjOB(~)LWY7W}%$3^Bq&vwd;-j`UBLQS+etGbidsE+G!VKj(huK{noc@ zOHj!D6lXcM0M66%Ia&MZfWoe-b1fx;FJNzc;MV%HCiQJtGEiOpum$dY@>y@n)lSbn zCrpL%`$zj6cbFAhN8-K9%9x)vf547E>*%b`cmnpY4jsrfZbN(_%`5xM&GDe+o1y1Kghg_gHDuIUUWpQ%c_|JJCrMML=KNKfr9I06eXWD9`0$;#(9V3(Nq z^0_mug+8;5f$bEvMe(Ije&D6p*v_ry$-t1O%TlhJ&WiXuG@)qt>+jpQ{l&Eo#8_C* zJHWH`A0!LkXS8mtD)lHG7>7ESAo##e>g(OfMAFufdQ|5^XZc5Rb1{^x`x2jHP_VUI z5nCebh$`o)R!6RX0*}_V*OX@@;E@-U96fNU#k2BLH2?FN1{DnQ`9#vHJ9Ip&(`#nT z0Gcukc2aa)_3Z#}4_I!F+VCelPqE(4e>vw_u7D$MQHpALU+fD9S9W(s^g*^Z2DS|? z@ZnNp4v;agaR~6$_}$iGPKZ<}`R{IOqfNl2-m6$vFS6`?lwExqXGPre z^vsQQCj;rhEvC;-Nk0f>PH4!i6(zu9%P8l-DrgtvS?oC~nbPH*OjWNGbEM_(zv?|Q zh~Ty=D1ogw$`a@k9Gi0nq_^gL&3y$oGRxXG7s^w|he#5bw=jDMr0A9-+|>UxF{E+F;>uvzsz?s%E%C_$8(sb%G%?$D18H!X10Izjj&{7r0Q7LHb^#QdOk zczn@8`+^~m9-QWcOKf!XH0Ago+Z#WAF#?=38D{px?fZVPI_{8}FxMt;1N|~yQ{v<2 z?D1^;+WaJDb#fqAWY7CmeK~mHL)K)$2N>N-TY?+dWkRa}@PBZ9z3eXwRxzZV?yI$* z5xyG+@DWE!0HrPQ$Kt`J72l=#cBJ$&H*PliI-9q-=AcBs)Z;WnKQ}C-RN*Nk#Y^N(x*pd7Pj1NU=_{*QMuwc2`&Dcle z`E%9z)KL%r8AlUxOg|ivVuzFIBxmijlf7wtRbDQTT1iK`1m}{{alO#z$;1i06MNh& z5uYaTjx7_-r5;2{^X}XXNoPWS!%IGF3X`a4-L@ibDuZjJy~uC%+l}VA2N8Y^zI=bI zE6&c#OX4_!B1SkZuK@CPvIBr=r;`Y5on4FI>o56iAZEh|fr)p3VrV5rxqy(&ubGhb zL&|;YxP>EZ0EV*9PA0Qc?DN*jC~Nu7rg<3Wu31)kynSuXL*iCV=&7+QccEC10vS`e zK5$LO?jAC66YJ;@TB6QuidE&@eU&mstneijjNQ&dBSyJB2P>6fk`*>NQx-2J&*mv6 zU>sS=?C&YG2wge++zKoL;8!~@r~Pot90Hdg#WQP84NZG7)=nE{3{CEC?1(^6rOQ&y z$>;kdRd>~a^|MJ?w)XBn!e)(1y23z%J@ZY$^=A4%fz$z?#eoeMw|1~$j&2rgFQlTP zRO6IN?2UzOzqt+)dhU<=ck%r4sX_YM^;zMreB<@}i-WxTn+tANCPm+~%TxDgE<@8L z?YHN&iKCV0Kq$+<#GZe~yC6b1_^=QXA%hO4GW+ngfiYGh?{xxt>(Pnp63i@UlkW)i z3-CO7OATMk#8P~^r=9YPc|+;O6*;3z6bru+L1d?;)B_U!!0DoaFu}*S=~gvwwn4>X zwjj!sT=Go$WM6sy382^c6#>x zzvP$jHMR_k<^=|Nop<>r3;LJbE~O|0tzV?iWNl2pPOi?yPcX?h4k_oSY&a zcS}=4?DbvAb{Ia{qjhR--AF0*MTvW{DN4xa1dc1T|-72*y4`s~dSboy~aQUVnk+z7qrS2xQ)oU2>*zx9Y z+g@geBv%su4d`A{6OLL%d^)qdv4VHpD7lP2H7Jjp-sNA)nY=D2h>m2T68;SEebmS$ zmpp^G>X37b1K%6H-_ip{`y0t?-XiEnGoKQ+dZcTkZ=+qtm3%2HyBCmw9f8ghAA)joyKEz%O#r{4Ru6&z({dO@u;Fs)_p9cbfpw^FJQQ1g(=77<)oAiPp){h*e9^QjlDW=Zl zYJ{BU*dA(>IuS;>Z8xH!?rzU59Z1!@F<^KUp|7|l?yKq??p9kKYB}DVmjcCiIgK`| ztP%6@@m`xWv%5GJ+D3nme=oc0+@XutiP0Tis6qraQ%9%~ADjBSR2@f&;_9QE z8&QTy7I^t7HPCXh?T>H_X+|crad*QsWvtoBWPQMH7_+ki&b2V)BgYNsxvgM5dXMb> zI2uCF+J~kM3YvjeP?HZ`M5@Th1-I`el>{Kru=cAK%h#??}by4dp^$!Tvot||n#)_unW~VOhdANnvbNZzl6Wv7VB7mSO zph+auVWK`&2wGFIPa`*MM&|<(Wy#&CcSG|LFWkPcDc z8D4s>AqMtBuSmYwb-2$;ofnDm&-4^|wY^g6I>Q|!q^}|-78LPwXzP!Mo}-z9ODu0b zEJ*aLy)Q4;KRS4e>3w2itvj_XL1IAs8T2BknrWVOlqul!yHdeVM=6iqt*fTq3H~oQ zKs@R&MzKNWq#D%u$^3HaxRLBvH0-yQA-U$&nfp|{!e-x+ObQHSiuH%=?&(`owj2bx zR-W4LQa6Bg^VO#L1K3CV=-^pMNhUVl>K{Z2q*U=;3LI$lM5HSjg6lnb zE6_o#`IOrYvF5Y?M%6&D?%eY>KHdnhqaKb{)(eFDsStKheGF_=8fkiG90Z`p@N{FOTYS=p2yt!bXLke*XMfil8x&#slgR3?Oma z2(H<|$A@sko%POt{@@T%pl|H!tDbmqLhtj#(;T8uGagBYzF1+?1@`kwA#Gw`E?oZ? z63M0k_2_;#02ImnVq?Gbt*L1d5D(A`J0pN~9;fqPZ!ag*_~b?KL6py*tbY=5Y&PC9 zf@Svn;|Pw~_{WF1$sN*RdC6bx6ejKC$IXs zM`ngWgD!Xm&(MbD=SM6r9=PIH)K9$Vy<@Q@{m+9dRkY&i3Q@Kbs@o^(C6)xX|1*8& z*#Ey1O*>%k!<`tQ*4IDnHR#yVFD&x+FY0|F{+-Jp&|ma)H~+a31iE+pzb3KLS6QF6 z&l*Y8yE!@6Fq5Saj)pf8A`{$C^nfy(93p0e$!}Z^SAfjl0s{8|eU&VY6a`11Lf~Oj zLg;@|qJvcculX!HyOrj#wOA%ZB)_6fa9r>S&SJ#d?(Xi*lH&&U_PHLk-RbYT2Ct!| z^TG5Dj}M=&`1{_Zs)mN(#-CAMh`%T;DH(h5yw76Ghjf)kj||L;q`!S#8*aUJ?fW%Z z*NxY(fC&9xAj%gOU_4J70f_B!@INLNx4AR%;@Am-mC~}nSRStspkC71;%_5|B89Kq1R+bG( zqhAxlPx$cSnET&lfry9UJ!$?~Sn+H6xawKDK)0}eP?Q!vOcC8=@H-JeP}o1ga2w`V z8IYGex)}wDb^DUbu<~a5YWrYxewO6ts~Lq}khOUBEQ%57ytyGnIs8c@X7~wcr=>gn z0ZC``f}E!w;EAUOkNd&G%VBtBsS$68`uOibU9`ArkRNY;#8uf7mX`T>FDC_If{D3~ zpD!Qxe0H#Z6qBPZWM1_dfCIAu%reKWxAm{$u!W_k?v>_8y<1})eTnEWLZw@|kYU|D zKs7)oN-%DyGnro_Nkcy`ga601$y-I#G@J5Vm!K0pg42P8CjxPM;QNhIdpW)LYsi0H zb=i9t(qE@!Zhs2&fV)>=kANkbH!_gMXw}STU-x|DjMLp&o6*A|c)xx7Hsq!P_)*<; z{=4oA87xcJl*U?}Kz@sTkJ=Mu9+cR&YrDD@3+Y{TR+kE>5vf_Z<3aSS#n`*W^qZ01v9)7bq@O8W1o6%TyjJ&gif9((Ff@4kw@C0_MPs4ag5b>{+E9o%!x#8tODgg@{atp>~Jcx2XAoy&?yi!@fg*LC&xTb*bgOAfViB<1xL5b1PpUcO6@!Vc-!@{*` zR7xMl+|=CV_OjWDmGA0#3UoQk8vHs@)}u;ccS$wR0TWhc z?@_6L8vW#3DKTrfoZKgh%kN3Mui8_ZJkvL&QyBH zW$wgKe}WT{1(fX4yc=>-4*;C^yca zNv_;5LnY1|jIvywh?lUfLr@oN`}2+4nFHG+%&R?FSoq|-l25e2jhO;DMfW?Hz1aBV zKLdH1T+=O{zO?%%a3*z`1>MK><5Su z`?9a!OVU&DR0>aivCJfw__T$PuB2bYrQch`ho9|C&UW2tI6pL}ETo_S$G0&Be&{VebI&&fH(KRU zB$RQO(VD7LdmE7wprG5E)mhvG->lIm4VPno%vE2`$_T&K6AFt0+o|S$T*?-Ye#FG?3O#_+>4*;V=HrG z?BlL}Vz5rr&-tXMz=qO4*x%&`Blb)UDuLi&{>ODU&#Ad!2pn-}Cv>r0#3zUI^wNUS zz+0KicOe22PdZag;Y+rOfQE%$UTh%`-OUcH*3pR^UBzC`6wPv^1erjQ6)^L#2I>b$ zxy{YtEdtUPEZVwOr<%bN4G8~Wrr+ieC)I&4hY2`;ruV>-x^^-!{G)*Cv#yDN z9QTDp*o!|dc2D5`L8*yq%|Q^HW|Ee#lkpMQbe1?ksO4{EPNPoY)k)IN?-bx98|<}L z51Rfa=(uG;#DIj14rp&xcc zXy*UEdG?59B0QD8Ua*BWY_UuH`L>l<)EsKkE)x1PQgOda_p-9dr4_eM#i+})Bent{ zNww|W>40PxTCa8s0MCooJ*nXLayyv|MHz(p`%n!w;~|ip13z!)D{i zU#n(f&uzTcA59cVPxc`s{}hc^2n;=m&;uM6JkhzvUh_Lwrspt@kL!uP2)F#S#Xza{ z3MxR(g*8;{GdtB&1ZyEzo?zPPx8*HF17h=;^7T!0lIJb z^I(bzy_wlw!2$NkyAa;^cTVFASM!t$Ppc`%>CzSEJcc~}0;lfG#TX3rwu&kidqz`x^V-niFt)w@1OZW5(arHpp)efIKB`uQ+E#ucz*5GySsX>cu8;=B%Pac+Hre#y%Tp&4Mu0<5Fd3K)dNjy7-2#hs^P@y z+7wSI?pO5jwVEG>W~!n)p~#@jIr^>QE%LatrVO!mOE5DOzmvf9DFwcK41S}Kd@jJ& zQFY6*49#9*4w-X1($TzZs0JV?w2hy{4)^SCuwh8rvQ90Ya z7;^&55OeY`5L80n!XfW7;;wunzRGtaDK*zNa>k31Ez{aCVAqsCPtj&;0@V+O4SXf; z;P$bRB30S%fWUjmEf6%=2>7I6o3`r)N?ea73sAPlYwY_8ZfB7j^~>ZdW8<4iyEhhYf9&Id3h;37nn9+Hm=Nza{71$YOqI%l5s@@b%FFv?=f1 zF&3hfG()3Hnccb#*wM8tn6Y=`%@86vDE}HtYqaE=i>_qv$hyoi^70NOj?&1cXhfdd zN3^ALN%hhl?lRIT!sb+66GJHGlE926%q8+*qgNb`NtE#TaZ4Sw8QjllpCE3nU+w9L zb*EW42{G)gr?C0zYrGB*?^iVIZF95XlPK^B_aQ}VW*Lu0(oJ@ZzH)iVps@;bsm+qK zk2Y`vT>OiegMqwsBmqN#k)A7N`po`Vq=iB3<84ySdqs*u=pnQ)F5H8Zs+4`_7b13G z9hgF8b8<5{{`sy?fF1U|DGd*0B6?tEd}=#~W>T)Bq@4Sk!cl0Eb1$tUROeoNKP%-l z^0Z%x)q1dS(vXO)3>iqWi#Uiqwiv+>SmK2m?3kWl5p?ah)> zz0c+Lgi4|$c9uM{?p&}rUV75PrmhWI?lkIK;L~QAx#Nm#uHEC6L-g_#Xcqoh-Vbe; zWWoA4tox(12IF>Ehnkg~9qU)|!uWbKUJ=RX)GcLV@f3n*rAq_$|;T`ow?Ip#wLp0CaKF zOle#8`OjAXrgZ_e0B)DtwI3=@FqduB`z$7%b{yT_xy9_t0YVMvS50{7beDO6?V;XF>+K zmJp}W;%~kugL7i+E87|~dLa>`Nw_k>AA1lga8&yY@eeSenkYcBo z6K=frnX*B_k3XYsi1u3GGu!nCi1G>6US!XbOf}ly{&jFN(Mo;Ytj<_bV$_Xqipo=E zGBvAAzqMXavsmNU?s+SI=UyXBOjwatx&syG7e%v@0(#y$fGT|X$4!s0CT>j8w&VoBzUCXm{JwY(345_#Kh zy3gMofVrKZDosCut5DFFt*su;4L)gilQ#jy zT_56;Z-On>@3=0Y+GKj=h%r-;x)RQPVQu3RpR`3^Zj6E4bIM}Z!Bc?FLXbV3V=S@G zoju1so*59XWsi`}fufOyT0|(Ox~YJPN&TkZ{k-e>&!yJu41{$;-{Wsxc8EoN5VL}o z-7#eUSd~!Bq|)x@B=`ypem2*Z^jP!JI^eTqC{jfl=`j|5Vx!4t;%(0pMc^TwnFAQ( z6j=}ZVcnjw&it*nVF$M1sEdR77I=(#{`1DRsU7YsHYi_2ij5rd(>`rWvG9nu*FjC) zB{ciE*5D2Nt1mV(Ha8~=D^FjPXsG#3hM9X=?R)Ue{>e~#bbIMYSE;csi@$pz@qm1p z+8K4Z)W>ZlhO3RjvCh42Qu3}TT(l&G?u%jAnQtCTgGGTp_ksK2IO=)0|NLiGaghm}S$^ zR_!p+WX2$2yTE=3*j=Eo<#}Dy&Z>3GH~xNAt4oi>ImA?uv~w4 z)6mpfLbzNnS5Lb!`FyUpwJNNyrJK4re1B6SNZ4!}oy<$CA%ZhDzT)_?v2=-SBMA`; zfA!sbyd0@0(pze0LG_?pfa8bA<12^L*9?H_uM&b?3M-=J8Jmj57vgePn8D zW8q0EAU)FzJDI6$>*OM}%frn6H&s$|X>-&|HQ!P?p70sWYtOc;A)&5_st2F)8m~`o zS7Pkla-%HjlXRLA?bnd+2~jyo4r9H%O11-grJ`G#HJgNv&FEX1%7wNiT|x1MW3*kD zt=1)DtKmM8O~-SDuwDP+HPoSjLBKx7{UkGGl+SA17#>#Iyq%nMEBXIaqK5|R()l_{qg8G6`1T+iI;V}({X;MgXPyKb*ME~uw{;(mie=5$cw!>#?P+s@FEL5k>_4BnW(Fq^*$)DmFSZBeyz;|e`fRP z9ZPlv6yZmvWTCTS6BkpNCX{`RAvb}vUnk#asX6PTD={pTC5o3Z%DndM(5Ur0KUXF% z11yFmpgfI?fS_O#^h5rw>nVqGo7*d*g20#ie`Hn8fe-v|uM1gZIn}A(tR8Wn z>i=j+nz*(|oA9f?kf3&+%sQ-i;1>dX*fZ#k@^uNsJw@D*H3Y)c+m|2IeX>p7!MzXB zPCtXj&&C1~zk1+e>$RbdXE$jze6sEjGt1^GEfpHOQrY0a^_2-<<^;1=w#*JLEf1jI zdOR3p*EmSSSON&Dx0*$9(w$!5Rl6Q#9gqGE+WIj1y-2S^M-5nz zr+9es;L8hkF&4fHV7x-KgZ`r8qR#+3FGnM0Bz zr&N8uGqaI8wL!cEU)7SC#@VUgi_A%V&O5RmkjbMS)xFvK;VKv`{1(2DVM}S^5w+W1 zY0f|A*l7Ici_I;+&3}pIZm7c3TFLThZ_o%9cBR@qR<}5*`=-+f(O`mr>aa=#yhq zbONAv+;V$-XQH6)hkW+Q2XbD^Wg<14!X~$Fe6eVxw*<;kdg-H0i~*6CpkxG9#($Tz z1@%uy7FSNq9y)UAk(ox5&N#%@to^|`B_|2>3Hj~FeZmYu)WUoJKK{`c?cIbDR(^$P zUy*K)FMHKsXQx{zT_8P;f9{YK7ks4wM-0bb@$QcXTT3`DsfrSGKLf%DEzIufx}C{D z6{6sc_uFqpGfg9#4xuyEAuqDO|E*_TrwUB!XZ_XDR_q(x0LQSsomUAi$?k|mNv0NE zDN$F);X;ODZBVKqwTWQ7Pj%l3C%SBc$-S~K=P1R;ZBFz!zC_)lw;2z zv05t9W~7|U{%~D_z9i&mZ&P^+Y+yHATdolY&?S7tfgCFccV;Ykd$qvy<+bYmvbmu` zg;LDtKo`qm#@@C0F!n3A{I*L700$u1&ovuRcL?l9=H#4qV9-TuPwpFR!<^m&+K9Gj zLJkBzmTQ7N;ZJ<0p}GyI6fJ)H#4t&Fd=zX(1=HF)|zPZT5h>Q zy&Wl4k|}Cje2=V2Rm###Df(j3`_$cOo3;g%u_!#qe)!?9s_ma^n|<#RqL9kyVLKiV#w5$nWDuz>Z?f`c%q9SwE2@5yQsKQ!8i5ZERXNS6wm zvvZ@~545ZCPf?S+>*C1p>c*#DuZcEPGB~whPL?V%-nR^Hhg8e>Gi+5=`gB;?v!b@Z z<4NSQ&Ao_|C71Op9-aoM z?GgNnnESuqw5K#GZq^{7 zLFotM2dS;xQaa;xTc(|ic}7J~JegX!W(jlmInAF&9_zd%C2y@_ax5}d7)AVX-85Gt z$z*{pX^0I#xU4)3cK}q*sQ1u8pTc6A%IF>z$%? z(mh4rCf~_Z=L632^Jg`@WF+XWm76gI25H4d1p`P5@L3ICXmAEH7}>X9QgflT%vi)} z&te`BPv)b;Rd$ED5267utzvT8ENc$-Lrthtnn3K7ST*jRuCPDPPULRAd>{*#@V$BbFjc{R zZ-1>-2+)YwHQ>xpb_e*SD)~$S0SEpClxNYxrX~Q-FKe;yd&O>r!|pVn`On@tGT6$` z{&;9uB6A?8$R5!Zi=$RofhJAY0co1$5K2E@qhQ&N26*9H=}bQAx2wj&|WgD5rMd7~_s zi=D?RSb#*psuyISc;9jcWHC9{SjV)+3a3MBeRB~<$v15%xnSR|(XF0pR^srM0vK0Q zsn2?j?xw4W=gWsBihwq2Cv_&SpHO6#)l=2|w)oDtkiL+Kx-#mVs=D;M5?A1uknjoI zYLgt0pt}DMeG>KNRc4bXdCbeG`37*BMyUn3Lb>B&>2JD2i_dWRL1vPiSGLdkEZtq} z-m0m?9Ga>~R2|6z$ob}@2s}K?&!nMHbG3d2c<&c=%uknFSv8sK7f8#KG zYLq@GkI(JrFlG*@Y+?XahH}?~PNe~K0TVB&KUt3!ZgxIS0Qfn~z}NZ1_0#S>LO$!b zo9R6Ll94Uj-3|$5y)yFTDCp9UFofRk?gRJU!5msxy1T^;6zf{#Y~UzT#LD5hpG$AT z!cxPye_wU+Ex?L!3ukGu1C9>$9kQClrjM1>wtGJCzSIB;ya7OF*nbW@-D$vrr_c4~ zd)wQ;(fOEjERnO#Q*szJJJR@@ZBcpm1H1m8Zg0&Zxv>EsP;buFYCVYHD{2OUBj945 z$EHj=BFo4%ag2xp+7TK=XsHtbHX=JCRpD?=Qn|kLM6QYyd z6OE*xOT{QCvsZ;i4nXqb( zI8FI8jeyRS=&xET{`(`S!|lID13GmHSf~HF^Tj*=9w7t%^3}!vBF+UK2To)C=StA& z7yl=+(h|23EY{|vYP7nA0%#la#g+a+<}1)Q2Sus3SF9$oQ` z&*RLfaRHfT1bISQJ$ZviN7Jyjbd=9+V25Hwtq6s@C@gk0x@-PnGP2>egIG+M=w}_Q z>^y<5)}2gp)XR8HGdoqhkz6+T#QLm7_G=NlKJ9Xrz0hSx-TRknJhY0-5Jf@;f=~=P z&4d@D9|_%B+%z*PU;i>~>OSc&K{{QY%e_6S68`L2NInFwg2!ur}Vhi(L<|!5b#K~vGu+`PLgW3h=0EQ_IR|P9(-%Lzv_Ne zwDhO9+|dP}V~;BKcRbzQF^l$dFCf;I+wF|tZCyOje(U#C8>0PjZ$DIwxgUb3=0` zA6GcF+`cj}-xx~BQ?6y@mi0*2AVhV-^6Kzu7ZGJAY}>qO*uzB<*mCc1mkE5$uEtV0 zo#0mbRpe-noMInuxKsDEJZn%)m3EjpoEUX?(_8uxG`)MW%BdxJItd9`69iXGyHdCg zYFR%MdN1GBLM!F>Efs7ISs!-$TK?A_^jiM94Y5`2PM%K*r_e`nw&}pj68+`FZa+-e za6>NBZY+F!ndO&Xtyf(lD$qimsALDn@D}E=W^h2$o$3qq&Ly`LJH6ZwJ8Y5r-Jz1| zEn6Gq?@f2w<29#JKID`@6+P9O_d<>mDj$a<5)}-NIy-#&*uA-=pkw$>YuxZIn&HAc zq?47=)5)cF>!C;985pi4!xVBD=k zqTk6Lk=~eb=>B!aH}K&vigVy`tw%9JL-$p4&)M`b%>Ni#bE1`Gzd46}`&z5$4X)zj zVp-*b%Yujk3;a9XIqBVNqB$meODz|i`Q#<{pWxwaUGUb-98DQ`T9*F_O22G%VrZMM zzC8k^>{q3Bz1bsnN>FCMwhn3&7j#qa`z~AH0;5vNk} zIY5-Y;*71C-Klk3`h4x3;rtzi_B~0RbY;)eJ9iv{t8Xp54a!~6WB2a7SG(sUf(_?E zecB~w+edm+b+29XTupqfA6%W>A4uKIjw4Y$UYgT?(Q5Gp;DR@VbGj9;lw+Y69W9uRJKsa zCyn;p+$TfchuKWKyMD&{`2@8jhKQaGj!+JVeCeHYyA-~=jgObvqVpTCEA$mYnQ|?P z@_&-%rdkd3Xs@8$o0Hs0g>xqd!oWeXctb1Pa6;YK^-%DJ$rV_IburDsM&lU~Zv`$y z5&d&x4If2XN8hjjJC2U;nV8-+-?{O|QC!W+S5Chff-%+=&%T|k&O*eOsV0kPsR5!= zwz;{waw*8@GIbumyepam!hGWvgf6WC&5f_z>hnZuL~C4WR-E1rm1$9KQ;yVT$=I^s z-_ja}rur@^!G>m3eQ!v;rnr{rG;$MKS1)k0wiYft&Z1GjoN#{b*lrn5n`i)bgjBDE+%P2d|_0s!chKc4j^%U{pwf4uppL8YkDbmo-EUQAM-Ak>b zw_N(%(b9<-&ez>JOtS6lsvS(lZ8O)MttU_VY=KUpuTwWa^gBOTz;aq)}DTlA_^>=_t{wM)UK#8R3GKhQ?C`!{5=%=v+-hGbCI#M;1zP8 zSKTg3hP7gI3Kim?4PIz%osj+*Rx

tvUO`BjvvOEEq`Yn&Iv`f#S(b^X%u~Uos*<1| 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�q_u}?G^u9Zb^gkRxY3yAIh5p}o{Nb%7~aSLYu>G&-2qxCDaA2eD+?_w zQLe7_$j@YwEfmjwI-ywiI7dIhT*C9$xt|T}*{?3?S;c$6Z zK>Zp~VsA?zMlt0b{~C4C^5&Z<+_wnVTa9T~hS%y)?cz!PUL}zhgYAnostq+p9Xv@K z_sUkCTyN?34qWwW6;9$1EW3m>k^Vx)!_nnCORtSb1zf!*d3Ri#>L+GN?rgCSWq+?% z@?~sn+54Drx$@MC3rFCB@X}l6T1lqp8{^5^{=m}lyQ<BpcJP5mHv-pCoHMg_$_y~z9e2%kE4`d2Vr2>cmeJF zsd6|=3O_0lzV;JYRuQUgC0CH`l=cX14BgMJVaVkFa|Qjc+cmZ1BapV&`}vCcMs%)K z*XZs1HnAJCa*BOU%Jnn8`IPhM_Rdn5c}hSZu)o-p z0`LwQz#RN1;g6k+8}=z619m|EpUv8pTele&TEGSwg~3~!`naR6TCKmsjrF$^9EjmB zo(3?6zq7YMXj67wH|LZEQP27I>t5XOh}jPz?m>Xb4=CTZZW+)TR^}Iz0~U+N zVDXziA@mR8?V~058Nho2_|5X3|1g9AiLo|Dg2LGUS9tXO)OrhGsfhx~GSx<4HDVKyG>9T2J>x zYdtEz&~7MuXIoikH(N)P+!1$-ouZ9G zfdJl|K>8F^^wU6}wu45Y82^i6YZ4E7`1W8v8W;q!N(28Xw2z)(d-U5@0=IN}0$MB_ zJqvvd7>y_Q{;#Ll77<2|r*~$e;YDBkGYkK5ZK4O$9~aTUYqh_?bcaXu4D=>8je-5` zFNSRfH$8s4Ekr|uKo8!5LBCl>^ziMw&#mw)EnDEf_M-IY?F-^o^ghbgU+_=Mqp?2Y TM&i3YfCiic%sk=Fb#v|CaJ^Qh literal 0 HcmV?d00001 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f7aa775 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,15 @@ +FROM python:3.12-slim + +WORKDIR /app + +ENV PYTHONDONTWRITEBYTECODE=1 +ENV PYTHONUNBUFFERED=1 + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . + +EXPOSE 8080 + +CMD ["python", "app.py"] \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..b060c74 --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# I will create everything needed for the application +./prepare-app.sh + +# I will start the application +./start-app.sh + +# The app should be available at: +# http://localhost:8080 + +# I will open a web browser and work with the application. + +# I will pause the application +./stop-app.sh + +# I will delete everything related to the application +./remove-app.sh \ No newline at end of file diff --git a/app.py b/app.py new file mode 100644 index 0000000..9740f68 --- /dev/null +++ b/app.py @@ -0,0 +1,380 @@ +# Imports the os module so the app can read environment variables +# such as SECRET_KEY, MONGO_URI, and PORT. +import os + +# Imports time so the code can wait and retry when MongoDB is not ready yet. +import time + +# Imports datetime so the app can store the current date and time +# when a new product is created. +from datetime import datetime + +# Flask imports: +# - Flask creates the web application +# - render_template loads HTML files from the templates folder +# - request reads form data sent from the browser +# - redirect sends the user to another page +# - url_for builds a URL from a route function name +# - flash stores short success/error messages to show on the next page +from flask import Flask, render_template, request, redirect, url_for, flash + +# PyMongo imports: +# - MongoClient connects Python to MongoDB +# - ASCENDING is used when creating an index in ascending order +from pymongo import MongoClient, ASCENDING + +# Import the specific error raised when trying to insert a duplicate value +# into a field that has a unique index. +from pymongo.errors import DuplicateKeyError + +# Imports ObjectId so MongoDB document IDs in the URL can be converted +# into the correct MongoDB ID type for queries. +from bson.objectid import ObjectId + +# Creates the Flask application object. +app = Flask(__name__) + +# Sets the secret key used by Flask for flash messages and sessions. +# It first tries to read SECRET_KEY from the environment. +# If not found, it uses "dev-secret-key" as a default. +app.secret_key = os.getenv("SECRET_KEY", "dev-secret-key") + +# Reads the MongoDB connection string from an environment variable. +# If none is provided, it uses the default Docker service connection. +MONGO_URI = os.getenv("MONGO_URI", "mongodb://admin:admin123@mongo:27017/") + +# Reads the MongoDB database name from the environment. +# Defaults to "appdb". +MONGO_DB_NAME = os.getenv("MONGO_DB_NAME", "appdb") + +# Reads the MongoDB collection name from the environment. +# Defaults to "products". +MONGO_COLLECTION_NAME = os.getenv("MONGO_COLLECTION_NAME", "products") + +# Reads the port number for the Flask app from the environment. +# Defaults to 8080 and converts it into an integer. +PORT = int(os.getenv("PORT", "8080")) + +# These variables will be filled later after MongoDB is connected. +# mongo_client will store the MongoClient object. +# products_collection will store the products collection object. +mongo_client = None +products_collection = None + + +# This function connects the application to MongoDB. +# It retries multiple times because, in Docker, MongoDB may take a few +# seconds to start after the Flask app container starts. +def connect_to_mongo(): + # Tells Python that these names refer to the global variables above, + # not new local variables inside the function. + global mongo_client, products_collection + + # Try up to 30 times to connect to MongoDB. + for attempt in range(30): + try: + # Create the MongoDB client. + # serverSelectionTimeoutMS=2000 means each failed attempt times out + # after 2 seconds instead of hanging too long. + mongo_client = MongoClient(MONGO_URI, serverSelectionTimeoutMS=2000) + + # Ping the database to confirm it is reachable. + mongo_client.admin.command("ping") + + # Select the database configured in MONGO_DB_NAME. + db = mongo_client[MONGO_DB_NAME] + + # Select the collection configured in MONGO_COLLECTION_NAME. + products_collection = db[MONGO_COLLECTION_NAME] + + # Create a unique index on product_id. + # This prevents two products from having the same product_id. + products_collection.create_index( + [("product_id", ASCENDING)], + unique=True + ) + + # If connection and setup succeed, exit the function. + return + + except Exception as e: + # If connection fails, print a message showing which retry attempt failed. + print(f"MongoDB not ready yet (attempt {attempt + 1}/30): {e}") + + # Wait 2 seconds before trying again. + time.sleep(2) + + # If all 30 attempts fail, stop the app with an error. + raise RuntimeError("Could not connect to MongoDB after multiple attempts.") + + +# Converts a form value into a float. +# Used for fields like price and rating. +def parse_float(value): + # If value is None, replace it with an empty string, then strip spaces. + value = (value or "").strip() + + # If the field was left empty, return None instead of crashing. + if value == "": + return None + + # Convert the value to a float. + return float(value) + + +# Converts a form value into an integer. +# Used for product_id. +def parse_int(value): + # If value is None, replace it with an empty string, then strip spaces. + value = (value or "").strip() + + # If the field was left empty, return None. + if value == "": + return None + + # Convert the value to an integer. + return int(value) + + +# Converts a comma-separated string of tags into a Python list. +# Example: "gaming, pc, accessories" becomes ["gaming", "pc", "accessories"]. +def parse_tags(value): + # Replace None with empty string and trim spaces. + value = (value or "").strip() + + # If the field is empty, return None. + if not value: + return None + + # Split on commas, trim spaces around each tag, and discard empty tags. + return [tag.strip() for tag in value.split(",") if tag.strip()] + + +# Converts a raw MongoDB document into a cleaner dictionary for HTML templates. +# This makes values easier to display and avoids issues with ObjectId or None values. +def normalize_product(product): + return { + # Convert MongoDB's ObjectId into a normal string so it can be used in URLs. + "_id": str(product.get("_id")), + + # Read product_id, defaulting to empty string if missing. + "product_id": product.get("product_id", ""), + + # Read product name. + "name": product.get("name", ""), + + # Read category. + "category": product.get("category", ""), + + # If price is None, use empty string so the form field looks blank. + # Otherwise keep the real price value. + "price": "" if product.get("price") is None else product.get("price"), + + # Make sure in_stock is always a real boolean. + "in_stock": bool(product.get("in_stock", False)), + + # If rating is None, use empty string for cleaner display. + "rating": "" if product.get("rating") is None else product.get("rating"), + + # Always return tags as a list. + "tags": product.get("tags") or [], + + # Also create a comma-separated version of tags for text input fields. + "tags_text": ", ".join(product.get("tags") or []), + + # Format created_at as a readable date-time string if it exists. + "created_at": product.get("created_at").strftime("%Y-%m-%d %H:%M:%S") + if product.get("created_at") else "", + + # Read supplier name and country. + "supplier_name": product.get("supplier_name", ""), + "supplier_country": product.get("supplier_country", "") + } + + +# This route handles visits to the home page "/". +# It loads all products from MongoDB and shows them in index.html. +@app.route("/") +def index(): + # Find all documents in the collection and sort them by product_id ascending. + raw_products = list(products_collection.find().sort("product_id", 1)) + + # Normalize every MongoDB document before sending it to the template. + products = [normalize_product(p) for p in raw_products] + + # Render the HTML page and pass the products list into it. + return render_template("index.html", products=products) + + +# This route handles form submissions for creating a new product. +# It only accepts POST requests. +@app.route("/create", methods=["POST"]) +def create_product(): + try: + # Build a new product dictionary from submitted form values. + product = { + # Convert product_id to integer. + "product_id": parse_int(request.form.get("product_id")), + + # Read the required name field and trim spaces. + "name": request.form.get("name", "").strip(), + + # Optional text fields become None if left blank. + "category": request.form.get("category", "").strip() or None, + + # Convert numeric fields. + "price": parse_float(request.form.get("price")), + + # Checkbox is "on" when checked. + "in_stock": request.form.get("in_stock") == "on", + + # Convert rating to float. + "rating": parse_float(request.form.get("rating")), + + # Convert tags from text to list. + "tags": parse_tags(request.form.get("tags")), + + # Store the current UTC time as the creation time. + "created_at": datetime.utcnow(), + + # Optional supplier fields. + "supplier_name": request.form.get("supplier_name", "").strip() or None, + "supplier_country": request.form.get("supplier_country", "").strip() or None + } + + # Validate that product_id was provided. + if not product["product_id"]: + flash("Product ID is required.", "error") + return redirect(url_for("index")) + + # Validate that name was provided. + if not product["name"]: + flash("Name is required.", "error") + return redirect(url_for("index")) + + # Insert the new product into MongoDB. + products_collection.insert_one(product) + + # Store a success message to show on the next page load. + flash("Product created.", "success") + + except DuplicateKeyError: + # Happens when another product already has the same product_id. + flash("That product_id already exists.", "error") + + except ValueError: + # Happens when user enters invalid numbers in numeric fields. + flash("Invalid number entered for product_id, price, or rating.", "error") + + except Exception as e: + # Catch-all for any other error. + flash(f"Create failed: {e}", "error") + + # Return the user to the home page after processing. + return redirect(url_for("index")) + + +# This route opens the edit page for a specific product. +# The product's MongoDB _id is passed in the URL. +@app.route("/edit/") +def edit_product(product_id): + try: + # Look up the product by its MongoDB ObjectId. + product = products_collection.find_one({"_id": ObjectId(product_id)}) + + # If no product is found, show an error and go back home. + if not product: + flash("Product not found.", "error") + return redirect(url_for("index")) + + # Render edit.html with the normalized product data. + return render_template("edit.html", product=normalize_product(product)) + + except Exception: + # Happens if product_id is not a valid ObjectId or something else fails. + flash("Invalid product id.", "error") + return redirect(url_for("index")) + + +# This route handles updating an existing product. +# It accepts POST data from the edit form. +@app.route("/update/", methods=["POST"]) +def update_product(product_id): + try: + # Build a dictionary of updated field values from the form. + updated_product = { + "name": request.form.get("name", "").strip(), + "category": request.form.get("category", "").strip() or None, + "price": parse_float(request.form.get("price")), + "in_stock": request.form.get("in_stock") == "on", + "rating": parse_float(request.form.get("rating")), + "tags": parse_tags(request.form.get("tags")), + "supplier_name": request.form.get("supplier_name", "").strip() or None, + "supplier_country": request.form.get("supplier_country", "").strip() or None + } + + # Require the name field. + if not updated_product["name"]: + flash("Name is required.", "error") + return redirect(url_for("edit_product", product_id=product_id)) + + # Update the matching document in MongoDB. + # $set changes only the listed fields instead of replacing the whole document. + result = products_collection.update_one( + {"_id": ObjectId(product_id)}, + {"$set": updated_product} + ) + + # If no document matched the given ID, show an error. + if result.matched_count == 0: + flash("Product not found.", "error") + else: + # Otherwise report success. + flash("Product updated.", "success") + + except ValueError: + # Numeric parsing failed. + flash("Invalid number entered for price or rating.", "error") + + except Exception as e: + # Any other problem during update. + flash(f"Update failed: {e}", "error") + + # Return to the main page after update. + return redirect(url_for("index")) + + +# This route deletes a product. +# It accepts POST requests so deletion is triggered by a form submission. +@app.route("/delete/", methods=["POST"]) +def delete_product(product_id): + try: + # Delete the document whose _id matches the URL parameter. + result = products_collection.delete_one({"_id": ObjectId(product_id)}) + + # If nothing was deleted, the product was not found. + if result.deleted_count == 0: + flash("Product not found.", "error") + else: + # Otherwise show a success message. + flash("Product deleted.", "success") + + except Exception as e: + # Handle invalid ObjectId or any other delete error. + flash(f"Delete failed: {e}", "error") + + # Return the user to the home page. + return redirect(url_for("index")) + + +# This block only runs when this file is executed directly. +# It will not run if the app is imported from another file. +if __name__ == "__main__": + # Connect to MongoDB before starting the web server. + connect_to_mongo() + + # Start the Flask development server. + # host="0.0.0.0" makes it accessible from outside the container. + # port=PORT uses the configured port. + # debug=False disables Flask debug mode. + app.run(host="0.0.0.0", port=PORT, debug=False) \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..c46d741 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,90 @@ +# Docker Compose file format version +# 3.9 is a commonly used Compose file version +# version: "3.9" + +# Defines all containers (services) that belong to this application +services: + + # MongoDB database service + mongo: + # Uses the official MongoDB image, version 7 + image: mongo:7 + + # Gives the container a fixed name so it is easier to identify in Docker + container_name: mongo-crud-db + + # Automatically restarts the container if it stops because of a failure + restart: on-failure + + # Environment variables passed into the MongoDB container + environment: + # Creates the MongoDB root/admin username on first startup + MONGO_INITDB_ROOT_USERNAME: admin + + # Creates the MongoDB root/admin password on first startup + MONGO_INITDB_ROOT_PASSWORD: admin123 + + # Connects this container to the custom Docker network below + networks: + - mongo-crud-net + + # Mounts a named Docker volume into MongoDB's data folder + # This keeps database data persistent even if the container is recreated + volumes: + - mongo_crud_data:/data/db + + # Flask web application service + web: + # Builds the image from the Dockerfile in the current folder + build: . + + # Gives the web container a fixed name + container_name: mongo-crud-web + + # Automatically restarts the container if it fails + restart: on-failure + + # Tells Docker to start the mongo service before the web service + # Note: this does not guarantee MongoDB is fully ready, only that it starts first + depends_on: + - mongo + + # Environment variables passed into the Flask application + environment: + # MongoDB connection string used by the Flask app + # The hostname "mongo" works because it is the service name on the Docker network + MONGO_URI: mongodb://admin:admin123@mongo:27017/ + + # MongoDB database name the app should use + MONGO_DB_NAME: appdb + + # MongoDB collection name the app should use + MONGO_COLLECTION_NAME: products + + # Flask secret key used for sessions and flash messages + SECRET_KEY: mongo-crud-secret + + # Port the Flask app listens on inside the container + PORT: 8080 + + # Maps ports between the host machine and the container + # Left side = host port, right side = container port + ports: + - "8080:8080" + + # Connects the web container to the same Docker network as MongoDB + networks: + - mongo-crud-net + +# Defines custom Docker networks used by the application +networks: + mongo-crud-net: + # Explicitly sets the network name instead of letting Docker generate one + name: mongo-crud-net + +# Defines named Docker volumes used by the application +volumes: + mongo_crud_data: + # Explicitly sets the volume name + # This volume stores MongoDB files persistently + name: mongo_crud_data \ No newline at end of file diff --git a/edit.html b/edit.html new file mode 100644 index 0000000..12871bf --- /dev/null +++ b/edit.html @@ -0,0 +1,189 @@ + + + + + + + + + + + + Edit Product + + + + + +

+ + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..5c15f6d --- /dev/null +++ b/index.html @@ -0,0 +1,316 @@ + + + + + + + + + + + + MongoDB Products Manager + + + + + +
+ +

MongoDB Products Manager

+ + +
+ + + {% with messages = get_flashed_messages(with_categories=true) %} + + + {% if messages %} +
+ + + {% for category, message in messages %} + + +
{{ message }}
+ {% endfor %} +
+ {% endif %} + {% endwith %} + + +

Add Product

+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ +
+
+
+ + +
+

Products

+ + + {% if products %} +
+ + + + + + + + + + + + + + + + + + + + + {% for product in products %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {% endfor %} + +
product_idnamecategorypricein_stockratingtagssupplier_namesupplier_countrycreated_atactions
{{ product.product_id }}{{ product.name }}{{ product.category or '' }}{{ product.price if product.price != '' else '' }}{{ product.in_stock }}{{ product.rating if product.rating != '' else '' }}{{ product.tags_text }}{{ product.supplier_name or '' }}{{ product.supplier_country or '' }}{{ product.created_at }} +
+ + Edit + + +
+ + +
+
+
+
+ + + {% else %} +
No products found yet.
+ {% endif %} +
+
+ + \ No newline at end of file diff --git a/prepare-app.sh b/prepare-app.sh new file mode 100644 index 0000000..ef0c608 --- /dev/null +++ b/prepare-app.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash +# Uses the user's Bash interpreter to run this script + +set -e +# Stops the script immediately if any command fails + +echo "Preparing application..." +# Prints a message so the user knows the setup process has started + +echo "Creating Docker network..." +# Prints a message before checking or creating the Docker network + +docker network inspect mongo-crud-net >/dev/null 2>&1 || docker network create mongo-crud-net +# Tries to inspect the Docker network named "mongo-crud-net" +# >/dev/null hides normal output +# 2>&1 hides error output +# If the network does not exist, the command after || runs and creates it + +echo "Creating Docker volume..." +# Prints a message before checking or creating the Docker volume + +docker volume inspect mongo_crud_data >/dev/null 2>&1 || docker volume create mongo_crud_data +# Tries to inspect the Docker volume named "mongo_crud_data" +# If the volume does not exist, it creates it +# This volume will be used to store MongoDB data persistently + +echo "Building application images..." +# Prints a message before building the Docker images + +docker compose build +# Builds the Docker images defined in docker-compose.yml +# This usually builds the web app image and prepares everything needed to run the app + +echo "" +# Prints an empty line for cleaner terminal output + +echo "Preparation complete." +# Prints a message showing the setup finished successfully + +echo "Created or verified:" +# Prints a heading for the summary of what now exists + +echo " - network: mongo-crud-net" +# Shows the Docker network that was checked or created + +echo " - volume: mongo_crud_data" +# Shows the Docker volume that was checked or created + +echo " - images: built via docker compose" +# Shows that the Docker images were built from the Compose configuration \ No newline at end of file diff --git a/remove-app.sh b/remove-app.sh new file mode 100644 index 0000000..4b393d7 --- /dev/null +++ b/remove-app.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +set -e + +echo "Removing application containers, network, and volume..." + +docker compose down -v --remove-orphans || true +docker network rm mongo-crud-net >/dev/null 2>&1 || true +docker volume rm mongo_crud_data >/dev/null 2>&1 || true + +echo "Application removed completely." \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..4eb487a --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +Flask==3.0.3 +pymongo==4.8.0 \ No newline at end of file diff --git a/start-app.sh b/start-app.sh new file mode 100644 index 0000000..78d8937 --- /dev/null +++ b/start-app.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash +# Uses the user's Bash interpreter to run this script + +set -e +# Stops the script immediately if any command fails + +echo "Starting application..." +# Prints a message so the user knows the startup process has begun + +docker compose up -d +# Starts the services defined in docker-compose.yml in detached mode +# "detached mode" means the containers run in the background + +echo "" +# Prints an empty line for cleaner terminal output + +echo "Application started." +# Confirms that the application startup command completed successfully + +echo "Open the website at:" +# Prints a label for the website address + +echo " http://localhost:8080" +# Shows the browser address where the user can open the web application + +echo "" +# Prints another empty line for readability + +echo "To follow logs, run:" +# Prints a label for the log command + +echo " docker compose logs -f" +# Shows the command that displays live logs from the running containers \ No newline at end of file diff --git a/stop-app.sh b/stop-app.sh new file mode 100644 index 0000000..26530c0 --- /dev/null +++ b/stop-app.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +# Uses the user's Bash interpreter to run this script + +set -e +# Stops the script immediately if any command fails + +echo "Stopping application services..." +# Prints a message so the user knows the shutdown process has started + +docker compose stop +# Stops the running containers defined in docker-compose.yml +# The containers are stopped but not deleted + +echo "Application stopped." +# Confirms that the application services were stopped successfully + +echo "State is preserved because containers were stopped, not removed." +# Explains that data and container state are still kept +# because stop does not remove containers or volumes \ No newline at end of file diff --git a/~$cker flask mongo website documentation.docx b/~$cker flask mongo website documentation.docx new file mode 100644 index 0000000000000000000000000000000000000000..fc25aab1287ae6a3bd10678fc12e8bf85bcfb888 GIT binary patch literal 162 zcmd;zGRQNCQYg+$&to7Sa4|$N7%=1kaTJ3BLoq`pLpqShz_8`o*{oSe^oklr6hoPy hJeYXT=9ade{dX9*J&>(2?PXwq@pnMYslBYb2LLXcAt(R< literal 0 HcmV?d00001