From a129f218b64632e13a6ff8d9eaba378311abe86a Mon Sep 17 00:00:00 2001 From: cedrick2711 Date: Wed, 15 Jul 2026 18:01:00 -0400 Subject: [PATCH] =?UTF-8?q?ajout=20d'un=20boite=20de=20reception=20et=20d?= =?UTF-8?q?=C3=A9pot=20des=20documents=20(pour=20les=20contrats)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 + __pycache__/models.cpython-313.pyc | Bin 22452 -> 25576 bytes __pycache__/seed.cpython-313.pyc | Bin 18740 -> 18740 bytes instance/team_tryouts.db | Bin 135168 -> 135168 bytes models.py | 54 ++++++ routes/__pycache__/users.cpython-313.pyc | Bin 20716 -> 31445 bytes routes/users.py | 206 ++++++++++++++++++++++- templates/layouts/base.html | 6 + templates/pages/contracts.html | 120 +++++++++++++ templates/pages/profile.html | 41 ++++- templates/pages/upload_contract.html | 45 +++++ 11 files changed, 472 insertions(+), 5 deletions(-) create mode 100644 .gitignore create mode 100644 templates/pages/contracts.html create mode 100644 templates/pages/upload_contract.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7028253 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +*.env +instance/ +documents/ +__pycache__/ +*.pyc \ No newline at end of file diff --git a/__pycache__/models.cpython-313.pyc b/__pycache__/models.cpython-313.pyc index f4abcd0bd4c6d922544c6cbe04a1a01322d9bbfe..71e0b93a038f28a67b6aeb287356ac92e456b88f 100644 GIT binary patch delta 4160 zcma)9dr*^C7XR*-gd_yWg9Ji&1yCeDa1py2Un~eNRs|(Q>tl>DiI6QMcoV8%Td=$1 zpzSV?I~Lp>m#DKFa?77cW89XpmgsgM z$Ai$sLYdhl7(bHPEt1VlXIn^KWy@{5Hhmvwe*oZ6(btfEz@WV_l#(`tcL!Sn4yB~5 zX$$(MO*<5iD6ubX-z@HX)RHXNk2Y1VXu#V_2jaEaN|nhEth0m`qskG4KzyhD7owX2 z-I;u#t;HMN6Q->%L9{-cM!ti{Kgl!zBT3WPQ0H+stanj0O2~=8iL{ODD;w9;H*D~% zuCK0f(H^$9Xc>7k{$|l4q7H&Yog;(YsWewfYLCYs_IW%sgccMCVT3jWOg7zzz#ZI+ z6ux-!P4pmJK6`%tJIFkQfX3-cgmQ%A9N3}RAClwo`r<;7xEU?!Br*2q66bsfe>Mno zrnn;kT8hc>1pRb7>J%Z&LXh3Hg1eTkpCRM1o^t=*KoRaU?-v&i4mNveqv0LDjJNo1nA2wZ{Z3DkBx`56|ForwoB~03zynv zD#{hqyAuE1!e&CQ@KCmtjS})b<|xl8jNxQHf(<}|PHPHAq5&H4Cmgo$N<7wKbWhSo zX-Bv{3e}Xfa#FFd54$R*PMY?3qm)mhyzWOO2?4#7G;QHXFd7Vprgx0S>-PtE68Y-Y zp++K!yQ(g!Ql>P)`)qz~mh8N3HvD=ep~J+~-x9zu~xOi~&2bI{4DQ$)tK) z3QvjL{ZF&K@_4aIlFsk#@Pzkx_5}jZQw{o}MMy@Nq5bKX=+!}lDJ8?<l;56jf7Q{S>vy4`U?>S!XmEb>=;U)K;Zrxkdi%r+EpNFOJZz>SNUTu62odw6m3?(bw@LSfGm&F#;q_M7sGN2vIH7AEvRHw7I zYSLMI-2<8!SYLHEpJ~ZYWrwQ^6H=*arAy-!scFi5I{Rg{thvpVqH(3V(m=q>1&Zp^ z*+_$$WZ;ODvi_uWVrBgc%t>6xmSBIYI!lqgBZ-|*XX^DkbPI_~;W9WCG*{-O8h4}s z&je=kWKNfUM{0tT?@G4`)b26^7Pu_5uqnflDQQ-RLs9DWMT6@h8J%+`hIY7EwDXihHXH?`5XxOgQ2D=J@8+Y z!;_W12jCL{CLSda3i!W!2Min)+=SiIo0V>%L1cY~Yy|XXLGXf1Q-Z~Q ztXGpN_HX?XBC^WD^emXeCnUN>Jmc~4ngqcuvI3=&>Fd$@&T{Y^OnMRJaun?92x{!h{_agei|iw*uYmn)IzH$)SeaHV1sq+k<=T zUVA&-ne0Aq$o@hwu+JWC4o2(~2`z1;8gPgDkOAasT^ACplLu0yGx z7+yS4{4Oj$jHf-zY6W2yT&+77%#_{swwAEh5BbKX4frQ>40kzxKgMhVT?RiClN7;M zOeDsLS&&V5B6Zw?WP2z@6O(-IMa)$u=<{3|%)R>#?;DymTzaf@R9|vUQzCDe^2S&6 zw8uX$Ha7ehWEE_lHvyIE7Q58MRhkQ(DF|tb@UUU`#x% zJ*hoYbSmwlWi+FryPg@XRvYMLW=)$mk7lfb>7QG(tT3Hs=-ql`Yabo#80d(Z*h^=E zqp3?-|6+4jcg?uTJm?s33{?%UJGO4bdLjRO{-~+4d)>IfG^icW4iyg1J2r1bIcj*O zd#!BBbHp>WdBiy~@6v(MR9E+!ab0R}#gU33=g7B5oTIvx-PPlIV{g}yuAvu3c3xXt zJ*uziuKh}BQdzz(QK%ep6Jf&Y93+Qra);rY__EvF^%fT390LDr;~T*h9O7=pKV|r} zkIuy*ziHs94W}OfF9J5^-bTNp)pAhK*yrUq5+!RV~2n9EU+#5pP mA2lnwRbM5=>o;#FwtGS{nSIYzP8>b7cmLu2UkgBTqyGnPT`2$n delta 2532 zcmbtWYfKzf809W3Y`3yf+NH1*3Z=A6Yl?s`2+-74(%M1`EU}NYa@15zJtQlpN%hul zQ;W(n?XXU-jJZe)yFXA$2ACFjeANk@d6|RcrZ2&sanM)TwZMwPIcr2EFO15{eL#A3 z-cc;Yb+2*Db~l@v5~hRPW`E}St%2O%QZhq)b&}9^2z?QtS}zowb+tUf?PK2Kkxs>I zGibPvYj4Fi{1S0Kyj0~Y+Y@YRkXxE|HPbXiIBCI#Z_lnR!Mfc|_43x;+a77A&$Bm+ zs>u7+w?*aTU(;nPkPVd_Bg1T^R7oV(DEa&MBc=$j7T~bW zPQ;d;LBOI+1;2L@A~-j~Y62Vsqymluo&v-G=t}mpv^9ac=G`n9PGP8R8ve%l}*}fbemE7HnvIt``GuJa`JEsuc)YcG2D*60-=u$R`?4O zB^^?1x2c<*8tr4-ORFUzNvPS2TNagcmW`D@lu*wE&P`bVm39y^Ap|{Lc9G;i!`(r; zoa4XVxQI=tM3j5jctxP`Uo^}HzP3}uOQQ%|62MWh@-`+xG>ecXGA?Ff zkx3|xkHT3nNDFJ>R*g=V1SDo>c@oP>mbH1DOT#?;vH2QF74tB{E^m2oL7N;{H0wuk z)fIqfbWg;H>ZWdV&1-Ahqo}IWIWYt;1;kT4@bI|1ZBC1PioE~_dr36Zp{d=Snku@5 z3Wk4SI|JJ@6B|}c9vGikF&t26XT<%o5|vSqGRZo%J(rLx?81&W4mmYhf9Ewh4?^fR z`Z?eWz?baYqXqpJU}8vYub?8Ey%BBE7n$u5BxPN7ta5HSFE><_?!!H95#oH5(to}4F1dV!)z)WQ zqm924*UcpMR&$3?Nk?!(h=jg796{UT6p&X$Xj+0g$WdL@oHyY=c*L}pviP^t4LD22*sg~yR)banM=#$po)*j-$k>n-CBJzLUEmqI~ diff --git a/__pycache__/seed.cpython-313.pyc b/__pycache__/seed.cpython-313.pyc index 2a8e04773fba7860f1f49240828c5e6b80410849..96b06258987ef43c51823ee00720122a5a3845e3 100644 GIT binary patch delta 21 bcmdloiE+y$My}7iyj%=G!18V*mzF00NR9>2 delta 21 bcmdloiE+y$My}7iyj%=GVDw@mmzF00NrVOX diff --git a/instance/team_tryouts.db b/instance/team_tryouts.db index f3d14f2e1891c54df68f3486f7fc5574ce058776..07fe449e98b8541d0f4a561b6285a91a169c30d4 100644 GIT binary patch literal 135168 zcmeIb36Lb&Stb~faYr6e)mL_@y1Js2RqD>J%kQHkhRUway1MS8uW%;iXJ%AoW@JS~ zR#lcjO$03vf?Z%h#tdRKj5q|dfX%R&!R(r8Sz$KI&J0>xSTJPF?5wdM*c}E2v|?l{ zWV_$<@bGZ=@Ryb8-5PdrSh^rg!UnW=|%Y&77{+ zGnpAVlgS*yZyvuBnM~!rca4ACpX~60{x2|2eB!ABDr9S4Bh{X$eQoOKbhG-ClYdtJ za_N(W59Yp@`Fid%wXfE`N=JF`OZv=AY4*sGkG+4YG&?t!{lsKfH&$)?zP`Gtcbl#C zPT+Fp%#Fo`TZ{Eu3ol<dVd5W_N46plh2e>&<(cc3hFZ_Mp|i zJ6@u9yUp&V74x0eeY>r%u6kcNd+F-JEz-Q%T3fT%yPf*2#W&m!Hd>t~;c}^M56Uc; z+WKn?H_n`2xbdRM%)8%f+j#d69g)xq<5AA78t1;qt&61cp}sk|&(R>&Z(q4^{q|!0MSnz&)qVPp4M)@E+QmA1^~U0bb5{ud z=qvN}8;fTbZ!BIpvv{*U0P6Uy2fyJXhrY4dvD@+WgF{XEN_AeGF3w(<%VwJEmi@4E z4`XaE>6_h_`}fl5Ry#{<;E!5=X|gmcirIH`SGK+TZ`;ewPPaV}^0?2YL((2s;~OOQ zgPz&#@iFgo_3mcJmm6*%H|wpgJrcG!xd@JocO#IP_i8Mw^Y6S~EzKT0nEm*7xD1=E zbr5TIp_tyqRESIe<827^1!$<)VXI>6YXPepR;%4yZm#RAOHOmu zUf0*`5tE`gAFA5v!lqa|s7RoeHuUa_k0mlp1gp8cPQxNS?~KaFk=zP981~H#@Af0s z!vl|e`Zyu+*$)W`U46TQ@d(v!wU?L3=kW^f_tzb+&=*I|ROkDRN@-SAv+rDYCClrV z)$DAv)|&<~^G&-G|LJ5%=Hlxl7C=kiT535<4{ZBxtbjsO+ufyZ6Ea5Zcu2PFb&FDB zzH1K<)bz&-iO-|1~0i9(5R>uSa!#3H#dkM z^c^E{Y_6{h@w3`8!~T&27F`e4^oL7>TkQ;of>a)IX>1KY4K;%CS+=`NLm>^AjNq4d zsWziFDFRKfgF`gli_jN`y&I?ywBdZQG&?_^edkqoyojPKEyIqryZUk`{8u?Ndf~Ed z2GOlZ3D!tU0V@|aa>H);6^Ds5U#QNrh2reuK^pZwSxc;cS$Zdz zEzQo(X1~Yw1>cqT&P0f4Z-A-E2q_N{twd#1?{ts_SW7E;0yA`r@;X-E< zDM6@}vEj7W^yaFs2jiNu(pn#Bniu7HE_P_l2=C3#5~8f;eMG^g+1gz1)?dDQ_0r

e)FhBA5s;*Xda)X?DZzYhM*K1#!{7Uu9mA@!| zrS$Vfr|?4Vk0yRJd-=W3zQ1V^`{$->nFIan`(8MHAX8aTk2LNKe6)lpU~8j$isxiW zIi;Lp53>tb?mfJGX2ZPthTOcjaP_b(ND^a6jxCuc$E&7bTBfbLXu)_U4T@-{Kw}HXTk^Op!Nb z%Tg@cVR*r26hk*;#sFQm#ObzWnLKAPs$xnCC$KW3vNo@)9M8+9BJsSV*rqBl25(yq z=SY&RE0UuM2Fse9ZL@-4v$mvKFb5{fS(0ujB4>*nhJmpLw{xYXuhehpTdS@1Ixfdp z6sRn6XNXm^+sAKq+s(UnojZ0zZ>}4y2lboHhxoOZZ32F4PLfz*8$L<1UAF`MZ=D>l zdB~MZ@yKnDO<|19v-j7P_VT&c-(t;&uRgTo!;nMSfqvZUh!g%?R}h?XvxI%_hFW!fkd6cqx?^N>M~6CIV44gA9iyzDrJ z#q$gY(Zz+th@#9xZU=1MY;CMSE-%@3$GsY(lc&>p6%$qu^sc!ACSTJr9{PHBfOlz* zhemEg;h-_h4E8@%^%!*JQ9d+ekRN04uCvu$SiSb>{H+J-I(PBS!%#Gxb96=&WI+}U zn=w>b6Vk&n zhNAKU&vCY6=!)WqifEf0D_D-{n4D}$qT&d)Ee#mF)YRANFSlC{)>m;g#ve!Jk6qZX zAA!`YCB|}OfpHYWP%NJ1Z9~W32JE5^#f27|qAD`1A={$JGbm<6 z$H51T#ptSR>bfm(iewv-1ZxQK5jjXBuR=^=auti=b<^9s#TOP1@->4 zc+ri+UT>~;TI+Yn^%#!~oyQ?-$D;PpMSXov=2UhY9^LjHxJ~!AO0~?s{`J{8*B&As zK|r|K9jEaX>CQdFe)HVzd(ySLcQ=*~g9u%;9aa=M!xnW`!MH23qsxXQ@VqW73?u2h z<8X!qlPL&}AThdPFf8Xll^K?o8TcRg9SK6|@L*7JOc^?ESqvi++oy_9eN#sC&4Fu^ z*L4L$!|9g9initUb72(@t}Ti0=UnnaNZR7WlvNEB%l)ZW|0!M)G(M2K+jZmu(K z$Idav#Yb;hHq*YrG*_-#hgA*+Ua>&4%)&}Jmf+|X{3oL@P!v{yZt9M%N~&oYa0-H8 zIEX%Q2k;$&1c`&t;M$Zq-h%t&I7gHjL1YBegp|oPXTt0;s>-PjuS$|2Gn}l#BM>(y z=m=m)I(UZsufBk}@HS+~{pf@q!vIK**GEC=ydUfFo-K4ZPL z2r6&FciED~TMWVk!$AZFiI-rFOoMlzV+b;EKPs%c4f}&Z6yP!)6FT4stjHK}n+_)- zEP+>G6iY%kNnEF^0t}gBm@53ND#|)*fEB10Z@~dTi&WKN0}KozH2cwjfwdS0s9_pm zARouTxcqk>z}a8BV_bSoyVy>));`e7MPoFxOpN)S;*>yFIwrYInSvOjQvL5`ft%XCr#%M9EgXo-VF6 zSGVe~==Yl)n_R{aKn;onsrUB8fPg`&0yE&jjtjxYIric`wRwfJc$IsTd34yaApU}i z%t6pO#CY(O62~*TXmIem#L{7?O~{8ME9kl+>(CZNG=>ecXMq(M3?2h&=#nYPiortJ z1yzR_*s_cOM}Yh@tRh&f<=84b3%CJ;JTJk8u^i|1^fC#K;Y&!A(OJVEF$_?{8bR#m zvbD^?{`G?|3`Jn0ZFia$S;UNHYiDHc(Y*`I)oXX0wUzTCcUXt96IEnhFy$igoRYvm zfuXcEXA6QPsH`K4Htf8P+k;z0^oDTO!N8+3$-M+lRT=mMMR%b5;KgDY1*6VEJ|Gb= zig3f6xexAsz| z_J!K7*M7D36SbFWKV19n+E#6~wp6=OTdXOyFV((S`*Q6UP%-^U8AusO8AusO8AusO z8AusO8AusO8AusO8Th7WU^;g&JDhK4_Da4d&!TF*A>ET*ULuTkZO5dK-^c z-zrePfM*N5m@Q`Z;|pHRe0)t=5EQchpRau`Q~QJ3=kN@GuTX9<{WxVHWgulBWgulB zWgulBWgulBWgulBWgulBW#Dg&fm&`Z8<=y*lj8@GX@wj)r4XJtn5gFVSG=hKvi|?n z^vO)^f2;lT+7H#*wac{=wW*muoB55IADg*1b9IK9sZRgl^si0-`1JkhYp9t1qzt4C zqzt4Cqzt4Cqzt4Cqzt4CqzwG+VBp|W#Y}b|o7wwHtE<JPol!y z@x6NkZygHPYCX7i=I|4!^}>;-_k>=U<(_I^A@A01uP$yh&G+v`ts^h&-E#(?k@v^E zvf14lRWe)FwKMPEgF46OGPUSSQE(jo!3ud-wAndaL!FaHGPSWc(fE~CTdRj>NNY#; z&II50;~t?mS9QE1T*qsGuAMnBjamohGc&`tu>@+|*H`OPr1EXM-f-m)2a@Mb% zd0`SYUO4*nbm-PY)dqKetcr>!U)Vo2_V%mMi>;R0(ru&JX*u1)71TcdLS`z;L!h$R zd9F;l_d;fJ*n9s4PfMipC6vw`**h5+yHN!)ZU>6w`$zUxhqvdy;mEzWxdMuh%R82jh3 z695B}DGyr<7Na?`{{Pg>$1}Cxul*(70PxGTe_Z=}wePImtG!iwxpuI2V&?0$Ju_dJ z`J! zJheBUoy!JiP@a4;pM4=4o-KLeiG21*HZ(V~_nCb5cy??mWY26qdonvd`%!ZdLh~In zGx_X+tUtLi?f&UcW=y%=2+v$hy5QrJ6jiq`W78287tx=8D7&{BoNy?)75oW?qT9#N zghIis;ZGmr-42XT7v$Uyj7<+rOydqK{&awQ{(t&oncCl-`R`^9;3EA=8AusO8AusO z8AusO8AusO8AusO8AuuU#xc-)IzO3Fw+wS>#nJP6$32GLY^|U04}SCB_ZQmsy53x0+Gw|y z@w)p?EjQuU5$ha#N?=Yg(g{{kc!}#B%uQv~UgglygQR0`wl=#f!6WPSGy2*_;0Sx& z#NTe8wpyF(%eaY+Rej5Dck10%-S2sK#crb4cbluL9j}AZaZWtbT3f^U_U=~wY|~z~ z%+}h*s@=7%S}qsgLs^yB-g6UEnGg1IhmIZ~Jv>V`N(45<*Kf6(`f6wJf45_3yzY=% z1CCt2PSnpgmsbWos;`n0`SrGaZ?oC9Ew6vdaYne+25*GsGa%k>Z*HK6__H<d7@AdO(qEQ-q$Cx8ulT6=T;X$t z4;Lo#Kb1e5`;*)!a>pjVFmZ3-14@GKe7axn_Wh8v5!dmc&~k4{PyZ7zVmdwC%kQf%MdcD45h(04B|1S4M5-4g9k z0G$gH&Fzetcv&atf>s})Lob7Bia~zts1l5LVRuWkg8}rgct>mkmECx0C+M8^ypLYs zk}(r6?gX9H4g}C6A{c3mB9V$py(>n0E`Xj$A{B*(t|;365qgB^ofu!-ze3d}Mb_RI zKu;ty3RRmFN!vF<9}~fdfX3KC(s!!7E28$SkDiCjgycOk475?D%DWJ)h1cg zY9sVy7Fecglgw)~K04yyh%?$5GgNJoIc<7`4v7r9x`=>MC6X%dGOJAm(03pHLL%Yd zDB~@u+GGGdk*>nf(9jjFIzmr2suES+C0VPC&?Bn9Ln|gx~=%RoW%Ck@vxqIaQG^>`WsE za5vX0C$j<~Rn|qdG2w$JGmj!QP!i=v)(3|yK3-aoa_{S3!~YNUKY;%q?0q}_|6K0| z{(qqNBL4sENAbV?xA4E&m&p2mcE-ryzw{?%AY~wBAY~wBAY~wBAY~wBAY~wBAY~wB z;9W5AUHh|pFdxBm&lw1BeUWX zD`Rzp$1gyhq+?J8qGD(YBU$T>m}m;cgoq)Q?Q)h}g?l zdzsq*Qv2E3x7V)J>NEcrp8faZGp(7IXP%z^()6!Pe`2~ZeQfIgnfk4%pPafsbz$m# zlmB7z*Cu~x(wdYftJUAH{vy7f{-g|~45SRC45SRC45SRC45SR~jDe#EOW3lva3GW4 z6Nz83Rxe?5DS4lBp@npEc1 zVddk`cpb^b_S&ti1UmBc5IeTtZgpvhee|hed5ihuzIZgxz&RN&J4Rk z8A+haepjZ4*p!h(Whu~=sbO`>SfaW(s(y5G*cHlHqPj5b%F*huGG#1Ld87)JVP(o# zqO#BTOXX6gLQDgNZb=aQfqbdt)unKaVe~ukQqikRAzGAWU-*s{+`5M{6rM$alSjlI z%X_scG>eQH81a{KUOy--3wS}_kmZ*qyt)*U1zz&|{8HAdOW~MPSzi-L{{MV7lc{}I ztu*s}$oM}sy=Ursr>2qLKVALq>SW~yDo>XGQF*rXsnWsXXRzb{Q-#_559e#S@5_}Y zJ~}ax{TROd|Kp$D#Pc=ypTSS*+x9OkQdT)6f2E^7EVT4H=Z})}#+gFS~E7 z5BYqdP^g}s-JK|IKOjo{#y8RjxtD!5+J|Z(U#x?5Ahqi&<7s!@JzH1l|ms`sTOz3!{D?S?QZ$_eP5&x^4m`byYMtb zvXUgApa_TT_|P%e~9g;MqOf!+1sa?^6i zp+0Ia;&)4uUWgxga@2`|aV+Pnxe_e&PVawP%Zw%{#t|j_qbF(zK|Jqp751rCD1rl@ zfOBnI@76c$HV$I0>FcI_!acCrspEX*TC-zs?-j^OM?57cksj@hww*5)E9J^i3*L3x z@ta6lv@P@sdq$0C?_ua?isd|1uz0T3vcflf#kQ?Zy}5>4zHgHinL17(c5pJWu7jP< ziR}lUVJMroSyIxj1-fw={Lkd`l~SQv8t(=ghuR5Ad$WoU{z2zBFn)dk>^n5rr1<-|ol$F%(b&LDCJTS1yjaQMw1OTY(n9 z?+s(H-S>v-eqm@SM|wz!{IC${$z_D36+~jt$YDe}-jlEi+$QoM_!M;{CEfg}( zseQHf=d~}@{w?+a{HxmM@h-rBTKjD6)3s05z8^CKkMKT#mD*D6cJ0;LLQSq6ug%r= z)oQiE%-3fA0$)ylQU+26QU+26QU+26QU+26QU+26QU+26QU?CN!9b-z=J2t!`~2`K zf55w%Dm*v5%J28CCJXNyUgh_BSJlF^!>jzPcU37oGrY<_?Ol}%PYti~PnHX0^`KUG z!n?@t9bC*5_jnii+TdckFyme1rw12P#VPNiFzH?7F)cspydJn$fPGZjmg`j2M4$_uL-EBdyT zS!KHR)l8-I$;|YR*M771nW>}G&FW81{#p6UrB4<$%ThXTVqg25@tsiZB*f?oZUv94A z?HS_*UE5q)Z{FLq6@#Tga$jy4IYj=EMi<67s$apsb ziFvQavO53H>($ci!Gqb4e}~KP;Bhl%7m7)qJA;d<5SRYP+Ysmr&``0%Rt081U=#*w zvf9#dFm}n<3Y3Jt)oM4Fo9p`OlGDUF8a!-g#H1+BhpKkEuqoCKDiWxr4IOU-8fh~V z!5Ta}C$>@2bMFy1@knlk9Sr;ChIjiB>*0Y%K7E{!`0R&-gs#5ixkF$*RJ+w)ULv2z zE4<%dcep}d95qv&?>8!?Syj!xbKR9JuV3TdnxkiWJu=XznNG7 zEq!aLQAQ*r|s28<-7@CEe3EyQ=|>Vj@~#*&Vap+#u%Gw^hWkxxOyM&uYsI`$wF7cU@Av z`CHQ;E)8zAGaL${G(#?pt>LGkMle3hc6Vtgqydu={PHf~24DnD2%&R(6T#S(sN zF0)H)`0q;pgL&8Ay|d_!gFj6EMKQ#_|M51&hujek{DiqPTe`VIkx`0(4`p!&B0P)? zNgu|D95zj1GAhx-W{oY%7pn7Yp*XvEkVd^v))MPqmfp!_OS7}H+3&G^!FT1oGZ7-% z8(^x5BIO~Xl?cxpdZ&Xdz*<_-J0p+Ia!PnO+O3eK3l}<@NC`r%j18x~rZ-o8Js8)N zmDc)5)4V9pbFo8XMtE;_mJnRwwRrf)#A^n-^_Q<+y|lP+Wg8Pllw}kw!et_PvX;h( zAzdaYtG2$3G@{iZuh1hAir;GvArq+)r@ljh8p662hab8(KPG06k07e^^SR>ex6IN6 z#~u77&i$t_Kk@jgu2y$)NUO^vwI=KT<=mCb^v_JaQu#-fmGY@lDgX2MApJ=hNEz5A z1O3L{(k#mklkPRW3kSA=ptxx^H*`F!bo`U2L$-Xpd>ijMs7#4l{5W`MJHvq>NnJWk zD>Q>NoU!q(oi|0JTO`BWflCbrdBe_y9HRRnEb(yaCin%v!=Z1uhRv;yg!_#>Zs7jC zCD$K%VBSAZjq^wvqIyMtMj)P__bRN9q(sDbgfb!5-Rw5>CsNhj+6cI%h({mABe8ck zERGB*@kVSU-XfoIk)!~pyu7fyP#A@ zj=|JQvqz3(-jg#r?qu25iJ78YbYeQ=+7 zPD$Q4||a?{KMsv;lw9Vl>Y39f&O{CyZ1o<`o0&AAIMe~)FX{MgCorn9s#tq z(LKd;vZS0+PO*pCg)8?SUOuy7UVTGu-dnhOSQaFSF(k*9Oq1hPQ!p*nmIagL9nryS zkS&u{MIEneWEfr*MBNe;3IAF;XDEt{OW867g;7{V5>;CfSk;vAmSIa&BvZiF70Yxa z+hirfaZFQ@ZPsKJQFJ85VO54x#X(1}t~T#C_4;LUUVXjg{&CuUZp8^az)uv#;|$A+ z6LAloWF?jp`5P_suHCI)a-W`Y3|mjS>v&k*0QK@5$EnInx4Y3fb@Jrk0UNE(iRI;! zgSJl&+FNtm?q9;IhzXT*^MuOlhhF!n6vwEPH*eluJa^u@V{hJg^DXYtVbkGs#T0o{ zwk*Z69flWdMlp0lW(@FUOPp?7mdSG#qbjDPZ~`kcDr@t)%JIBxDtPO+qu8b@Fa~d1 z4(CXctt*nF3I@xXoNcp$V6(QQT6h?U$#RyY8;Z!;B8PEctikPEY3VEVTl&^&tG$lP zF&YIrjocaXP!qd-{ARb^yldCFV>k5Xy3u-2zuA072O0^oMYRJ3cZtL!vu+{ z;h3z>=q4+gczHF;7ZA$|RFE#bG`pfOs zgY{KhjS(38US3zN*@X@JA*f%*a|=4YRuj0F=M9DKl7jIPS2uG<2qNVXwKFo-06UNj*jwk;?yeTJ+HpoM`X;R37*vY}hLVcDi2!N@TNBY`zjl{nQ>3`doDTZF)Y zbJ+sd4ri*m0;T6Im1R}kfeEz@)$mxn=st((_2z1)wSI?OkMYP*-3v2h?O4=6x~Q+u z$(+h=!=u~Y1Gnkk7Tz_!uYY}Z?)ZUBWdZIT4}{w6j??&xbmyL7zj^NVJ?YxryBo`g zL4+>a4l9bBVT(FT-YKofjxHM#-rcUt3d2Y`?>L+x!Db4ABS?&{7!1ofP-TYYWdf0S1iyhv#?T*B{;eT4~mytLs3`-x~V(5DygPrz$*xX;UECP z9l&`A5+n{ngKJafcnc1c;~Y_D1d$O;6H+GIoC&kXs4AyAyedh8%y6;_mq7fSpd*GM zkApiy{#ReXvvAvxA@`#bdJF>~nZkh5dmArSA7^0P6g8DwXCz+PcRgFzJFGaVB;;0Ub981S18Cm}F_ zS6~!NLN`fhr>g=CnPZqL9IYzKI%|Lxs26X+0YHmX)nNk+41zTK(SU)q7zSeB@9xR~ z7{CkO#~B!x|IPz=`)hZMORuRnZ0G*kVUA^GI2lov4a1TR)v{D5x@gjD{OErm4^Em#Us3(+=A8D>|3F%}X0nye$S4ni(Tf$B)4AqKI6 zs=|0609HlQG({=Ez^#?m+J-L!-53VoBq=f=_dbf3&BK)LpF8Pk!J59VFWc>LDLC_L z_u?aC>w5da1$*oK*7d_OoH$DchLs?q2-qE&n8LnJVWy3ZU z!xT*h@i(yu23SD|&m$@@5Oi|*f=#@XDyxtZxF20+5fQKk&zPzr8YBXW{(_3+LC`q_dGM4H$1}QUaPYgt(qX7g$cG~<=(-~7&=y2Ah7Gf4ffX1G9s_FV zk}1iG!9v*uRfibZvWx&nfc!J8B3P{D*eW~=xB-JaFTsVe9Ow1)GKr4iOGuQ_S;HSO z3{b-wLG0(Uwamf(^@A@AMPQ?ClSg9VFqKf1T zrd%YRQxX^`FqGEjY(bC&m33s%hMm`OdvL3W-Vo0^76gH%Dg&RO=nj-0yjU!w zVAMIt2P6VU5pI}s9948okmlg-p*bqtiOq0=-_@IX8=1z%*2+3mp+o+NVSyT)2pq}( zU&{PMruLJyvort4%=gcnoc^up?({QLzdH5SMoZ{igm=lcq!>YI*{TV0foWSvHtQ~Yqq{ckJ%Pu&_htc>@TU78^6XSvl zjTcAYq@TgA?hHIueO++A@q!P|${{qc6mDzW0=N*dGU1kRjSmFDgJ_YqsI&czkd}z!_CL4Dc)&&~h;f$A%k=v5Xv#S(Vt($t_W|xd8g^<%OWf zh9!e`wf6_mcP}smJzmt^675g`oeLAq?TndtStsa%Rv)25FN11|L4NG05{!6ZcT2Q` z0raqVM{Gi@%n*!tX(uI|_Pmc?;F2*DFYa!;+JOLiLB4>=dfJD}pu~K;ONMBz=#Kdx)J;cflQTmS=ROj(4!_d zET9yL#GE9pMAG(*&?BlpX71y)Nv3L(ENZn8dNK=45=lzCyf)*bW0E-HjCRHhRhwi^ zn;xMG0rX^jkJod8&S+Z!^xaD|Feo{ZTcSN2p(m3WN=`)3745+Y z9d;z7jXRmY07kr5Bj~brKY$)_1(7r(&K41jc&|oEByDqqp1@}k45~IMVxtRm*Y8Y5 zJaEJ$#+p$APE{sFXmot=1hE7Gr|OczHQFQaM8Zy10b{~X(k$D!=YvNA!pIO%A*h<9 zFpZ57`0i6^^pBFTkP@}g^1+i?N3sPeo)%eYtOvn^VRN)C8U$61WVx{haM#yQCeu+$ zE<|V%8>>O^P|qXwfYx)W63Ig2t`DBfc99nVQ#j|fI{ci^3%70U7l>fT?56ge2^zTaFSvpkwe9dic+wnmd2s#+ni>Yp0HCzBk?`X|Ui zWYt$k@Cg?D2?$m0B}MBiKKw*Nc&glE1+*^*;3I0fgCvghp6X5{sFf6gPcXEUHBh(V zMqdQHJ6*gdnb=d-KnXhE=nFo2R1SAY4K+r?B50oc$~q5y}o5=#0mH2Noe z^kjBkq>icxnK|yGCkrhFs;LoSD31Z%o!YGxlc*DigE;ZTlM=0ebOav_RU`32?C1f6 z5?YcHtxq<2d%aIWJwPbxiW2xhvdw!4zxx?d5F=1VmNcyO$wu!X_q(6OB=8g;NE+7q zWUKc8zK}$xI2;+L4lP6S|M%zajIaOyv#A@CU!MGtNfG(~gX*)De_na3{I&9rm%pX- zzn0!E)rsg^N{-l zE&vZBpcqlW!~K#4=K*{niFXG)#k->fi3C}49>OOGd;mi6?kIuekVWSq{O)JR$&(r= zGdn1OclVc__mTq^p=IZt1mggq4lNJ&>#sZS%_m9!5zkVGmdDWg3(tU0B=;P3XgLh6 zzw+$%K1fbv4lmw^qxaOI)ry5$`RmVa?}L&P zoot}>o;tKFhSpzz-aC;@?y)C?)-Ziv3g!{tK`m4|&Ct`tjurn3QV0cIaWoQ`; zt-lNn_ym*HfTwA#q+)3Ob!ZnpC^^yA;`>NDCrR!La|~o5+MSo$i;)d#Rb(V64A4$8 z5_HTlkcH?0dbG0<14QdPO=mID+31snXb(LCw=w6!syV^nYY=!xPpoSUPKH#VpCZvcI;oSjUcXiHb(qk`)T;nQBAnRB7P>F z?68mY7p6QwWb;g=yu}g2t<5V=9V;wXn5eecS8gsUaZ}c2HB)B z08bDd5r}vv6SFe=8OS&f_RibP?boO8f0sR*Yn*^f)a45 z5{Y7iY|QY$cb|h1aH^bR;-75G@M#J8wMf)XlNPEdik#+e%BU2R7#EJGtSaDn7eM#- zWK_tsf3WWn@rm_b1cTCd(yr!j$pCr++BqIam|{62C7Qn@qeA9PLVXVl5EX;6OBCpe z=5NTTB$;#oGnDlfw?y;zV*q{k(@6w_BJC)VG=DorC7%$T;xkCQn!g*Pl4L@I^qrzi zC=oP&GX~IiA3qaxiq{||n!gtV%tXS%9b_&9JwASROEiBg2GDmOX#s;WNl4Hc&EJVp z$t9SIA?Os_juJ)lH)2%Cp6ie{MO8N@pC;%O<4#I6e;)?=9x;j$?@iHn$^;~7SJeD% z7(m~B-a;^_5{daoe;0;}9*PDcB1G#uRU&y_^EY7tJp#8giKI+!lDpzGe-B0_(VlBy zQ0+VBHpvzYcitE1iAI$&bBexmsz$b8c<9M|6J_F*peq{Lf-&rSLE?JI6Q34vYbK zGV4y6PA0r?4YC2l2M?LBuqUD3JXP2^wn6q^c(gZ0`h{w%x~KBbDmTkt zDgS6$E&YD!J4y$!{%;lwh0hi)Hmz$ox*`K0W={ zdL%1$RbV>Fo=qIYrcC#^C0dW<#Y6b0`wKb8cu@j8MZ-vm)+3p*2cJa8077wCq(tkH z+;|9|Ai4wyCCWhwr}ap7JcLhRIsrn_Gt#iuBl+k7UaO^f58q z5i_&{Y(Q5UJ(4YZ=!v9;vdfzEU2gP9w(OyY!-O4$YQUh1JZ5iuBwO})Ph@Rq)3>DE zMvr96e&0jZAbcw{iKNZn0$phINVe?vJtXguOod`8X%o0WhrE+)*_}3mH==cmk5g@o`FodP@pKR;&%e6pdXxG2CQ@bi;qz$frg zGD}&0766aH&(E5t$Uf+xIopw;2RtS4BPCjoq|I*N=fdyW76XK;R(ME9k0j0m_(U_8 zfTyYz&VKet>g>TMiOc{`m3us(R%*rg())k8st7YX-6^0l=Xi!EUSb3 z{}I{$e`e+nXFfLbf$9GN=l?5H|77ab$v>U^FD6e^|EKCkb#LXruG}vFr}952f3Wm# zvH$;2@z;xXu~hiE!mIiJkpF=^llz}@?c9?SzdUg}`&Zc?%_^BMW**V=e^R3L{BslT zjRh4tIzLXkF{(Ty zJc3W=Cuyk`8iq>D1>h6eYFaV`czBxkkKm&^5Sh@RNDeI<0z5SC&j2@q-kM>3)VfOm72sboq^%ZSh} zGNR{v^hnGQ8E2Xsqh&-u=NrBKK6=7&rMelCZ@te)Pm-gfht%MWWJLRd=s_nl)>z!U z6m~*WgDa8|J?o<Z`Mao78ugklus4V>$%CYpDSU#Y&i@FYV|z&+*A1%{S^lH`v$s~tzrh|}!9JdgFPq0-FAQW4S5~x*v1fL{u0ti*DaAc&H^WhV1jRHJXtr)1) zL;ya4vBy)zX=;TMt(P6aCkcrGPg5(DXuXUNpJ@65@RX?|Qlh;bKu?fM0fVMhDB1D) z|1VW;mH(>z_sgeB|EBa&od5rP(JB@TKbv&@|J#Q*HM48VgcGcQCw9cdJ;M^M_mL2M z(9lK9>bRTrKw`4zVTsmz6oB8QE_)y`%I1|o*|tLPq27lxE^6;%lx^6s)_WL$-{soM z03moh)7-bulXubO*_{dm3HdFCHV${Jafe+jC;mOIq1l-3h_<8Vf zGTjmUZeuqOgesU4oJ?l~zgt7+!N)k6VZ&OlJ%Zn@lkq^PaxX#d?*-s@xjx~+Q{`TQ zU~Y`y$3!I@MvukK1NgXOA;S`_*BZg^Hn{RYsB%w|+;zaa6C*Rp#6B*`_1Z;}yEZ~k zWYFT0Tn`*LVN8Z$!!AN zom@yds#Jv{N$yGzJ!s3u61(W6j@Lt~K8ctzS{|W?-O^(x(+22qNv>Cd6xtb~C*nQs z{Kl}|M$h)qlbK<>p`0SC0<_8U(UV!>xYHqC-y!d&kDkoG#+`xi(BVQ1pu6e+Garg#0QFOLF>IUo&dJ^!f%)8y&Np^2l%CD0x`#U212Nt`w!Cy4{( z*|;s%gN9ioag6|cq`Q$>uvpCmJjK6~60P@^4^N(y5*pea!p9_WUhffCz8Qeu<bAq=<@CnJGsuh_NycvK`;0bv)ZccE(J>#wacXzV?|3>-CHT=B!j2|WMrZ2nL3-4)aM*At``@h#^FU&xb=Yty``@h@^*~~z zbyyP4{&y)(9!QL|4ogDWes#awAoMiug{v2}e(R-oDB~|Rnc4dH zjB@{E#+b4=PtcJIk=)l#LGM> zLGTpJ|96?~ty7`|!Ba5*Poh=|ZK0Ah9M1nEIc-GC;zmHi%p47RkC&2#^8X|TnVegth%7mn63qXT*c@_Nj|MMK zPj6=Ol}~3XpPu=Zsgu<|pyll8=P3gz11SS311SS311SS31OGV~=r7FFG6(wC_stzW zkgY7pbFbgoSk<@ew%jq>TN~X|JSR)aDdiM*bnQM>}7l1>bQt! z=J4)Jex=*p=$txva@E$CH|UM}?!&vn%`4I?H{ZOtxq9m`?v%A{%TaM}rX?7TVj4PQDYC<;rXWj_jdLKTs5pkn znW(9VmcSaafLu^jOja~45!6evCCa+3>zpC*hJ#r_5Ge^3YLckGo`SFdwJ z%!N5Y;N@+Y95$zuw)b{Uwq>*ud}=* z@Vd?0IvxeVnu;YFx}=z@!MC!rw#8b!p>vMmSdOidz3sZAIJ_La z@Z@m>V1O|#UKH?P4@)=6t73S;5DklwbxW1-oDoJgbr8s_vY?1Ii^H`zCMhbmErU*o zH_wW;qw0>s7>vwVlHm+kT)3~-UteiU4%qWn~$AoZLW9i_VJtD zcJr=X=YahB99}rUZbPJgzkjwikV7yC!}v|d;5J6_y`oTmK*n#d|G%^S`u|4tiOMfm zUMqjK{A1-0;r)N#iSz%T$MgU4g`dXy{~zZ+o}bVC%iP`E)Wk1LT*>}<_6M_U=C?8( ziigzt{?YkblIM_MJ&2FhQnE9Qye-Q=IuH2WPZSc6SP6FF@!DPg=zJ~FyS@M)KOaLH z#;axgqw|2@{cI8eiJylgC3uaSe{>$?Bv{h|Nc=pc+pyO6kIvVUJm!Re#Lq*L61*kO zKRRC{@A?X^;zlO47JpWY|%crlKDbROhH7o9^l zLxZP0Zx`@*-fo{9op%?8(EHu5+z=3|T9G%EJvV|+Fb7QFsdA4e?)J&y`9bfKJm!SJ zyG{-<&kx}f$$i|$P!AqzMUKx8;di-v&;y~W6*h+U$@%#q z{O+gs2?bQOBCl~H2k1xeLA8q7h?rR2Wtgf~*cjR;C+G+8NuFgwdQVj=@|L)#NASrk zX57Zm!Kh&0X`h^-AND>G_q3PLaSR^r+b4(U-JK(~1nZ&ThVpb@QX)6{>1~>`8G(C2mishmLnPkwf$Y^d$RI(08iDvv@;1IYaO6OQ|I@^px!p;EYileR70; zfS%0GQ+7uXbjUk7LGSlHNc7mP#Pd!$#7)rQMf?NwGvxF_2!1CXoDnDsmDu)zN8I)O z1N4C3{ev9{2xVMJiPrZI(9e)(F9v%bm7-XoWUy2jFRmzoCG!u^yS)#}{8%^=$2~wO zfiY=V>-z`jXOb*&gB;32B`Lws`UmJ|$k~e^IXjXZfIvnl_XQ8`AD{<(SX3gdQ9&qi zHyXw(9sL9JE_|r>;nt||6k7>+1PJ~C`k6#=H$W&J93==4`~&oWPbQdDxyK{J`~CrX zz(@9SM1m>G08$Th) Xd5+z81mJghID+^ifKcLYQu6--ulzE7Yf01b9G zNJ8ti+%4I$z2jZS@thpnvvcD3k;Ha(9j}k$#Ie^W$ach~kh zu_rT`}IQ|D{7RBHNKDwR5p-yD7?QmNt>@HdO!;ZJ(_g8mm6XTSdt0Z3QBMzTF#{o2&2 z=|=e{CjYqjrNSrkeCBTM&nMvaJ;~&qY+`_SNf)!($ezc)yp@?XU`3)F<)C=ytKHyc;mw2E%yo9k-5E!1@dpVL5Q2bJl{Jt zU6`4fNxvt0l(}5Bt79bLD|B{RJI(D5je$*l!}gw@WtjN@vu4ZIJ7B`ti6nlQykDY* zH3~d>$Ne;#tYJaMPT(tkw!Zt>$->O+Z2J2rUAFA|`ues`+P3X`IUQimmk^sjuNfl= z8kEqa3SfK72EA>w*|LWKuKcYw)*GFj@q~_Tu5C8%ZQD^v`o@E1>#gw=z0+xQwylWo zH1FFjeSLlKl}p!_7H*T`&F032z1eBkZZE#(ey}yrla-d;PqSQVJ;52M&9Iq5^02*y z?0eIv3rja{-CkaRme;oX&pB$O+MOF$Z{As~J=d2MNc8ENNB`-XpX+hm+_%Vi$P|eq zJo&XhP`uv+_=QxQ%FkS#O{W^0mi@4O4{dC(=-Zv9`+jBgsO=Tj_omWYDHmo$G5wz2 zw*>u%Y1yldcBj=B@&PA-&!z&>9+l%8B=-GU*sbw4Z+G<0cH5I1u5WHPn;m;3Y>%|F z?|WOq*49gf8C6ZcchhBf(D+uPz17@o7(^Kxc02mh$pFjId3NF1le3}z2Mn;K@2oVP zl?S%{R%AN(Y;{&T4H$9KO$EMdZ(5X;uU}97lJ7kMMN`W2@17|ZW{w<5e-G=EUx+U0 znA+t4e}fNqAq=)`ebi-f;V#Rv+h(h=<@V}B^F_>$+m#3SS#O#_D@L%0T1N}%hW>D+ z|ETR@Q@FNr_bw9cvubx%nyuB9kelNFa>!slN&|-NN9_*7#%a73fwmgf&htF3sSV<0XoTNLn=R1$j>az(=5JMn#=488+>2t zeJER)Id&}l-lE$MUNd!P+ znzgc~x7R#DWjQ4%%B^O=(ghQpZ8&a$QpVhOdqZ!m`{2X1SZi*MG;PoqM_8#wdqp=p zjr;IbOtZPY*{Qv_v~+E8;f7y4LMDtT%cx67M+z6$S{WmTRGFZx+xjY;+GcxYtJQQG z{>K(YH%FBE4h3om>t-B&=sx_Im_-fJy!Iaqyyi3cnUBoS1jlXs70&&Wou7DgR#&Ur znf{piv9fP$K2!bLFe+R==+-%v3Gg8nmXFMdHCd+ zqp8w@dZPYjzmJyS1?+5fUf?-dQeIGAVCO86f8cC2c3zgRURRn|UYT~91=F@UOJZ0?R}D!OZCf=I-Ew5v76nE&nSMo=)*JU5dhI&=xW;DFeRJLw z-Ln{JiK2LhVOf!5IOz-{pJBxs$GpHwFEGqmo)Z{BSZa4<9tjY_H!kCUO z3Y=+4qG_OJFTtHUx*`bxu@FL$)OjnOJ=2Scc+of+FcEgEo>) zRq8*^ji$adSGAH8C3*{2FT?N%N9-OfT(b`$Z~x)Z#B2pAeYx{yY0Rjqm!r7 z$t_`8;ep;U*TCefI@&|u?DX-j&GOL5T`24qwr<arxM5M)*oBnfT6=%Sy*P_T=Xarxlw^=1dlyQ6bzbn) znH!@|y!zs{CEYVGHpP4FwY#_HEI}Ydz_`gM&E#~Gft<*a$S9VfOS*1?ItLO3nZq+E zx?szWjb}Fu({VThs;iiiVaphf#CoWk)U#~VBk5#u3ux&;PAhP6%6 zltlsN&@v?3MjpvxMO9E(L*zx1mkdE2n|s;aD5PM^h>TtDn?W4+zne3QH$fKqH zQ`ud3bjy3-7Tw(`R8xn0H)m#DdkB974&ioZoW@%l8>aM76yI1|T{l}d_&M1z9oA&g z(XxilI|dIeSKR)_<^*)64sSTNZs@9ISqjLLRGE<>fUII02D0jsrLr<7a6BYb;uXcQ zO(Kwt&Y)|y1d$aj!LTh@L6cZjgZKh6Yq5}d^ioh4)N^4S3b_mqxTWiOd7gNYa8yTK zGy|(Zkw&KbPQL%_^E?qEJi9yA8MkAdRn>TDdC6J7^w!S9>q~FV@d|@(6lR>~bzR^M z7SFCj4K3E>EJKv=pUA;gWG_~bjg9iHB{EISx(d)!BAzLRVAH+qhP~8Iksf7 ztR%DWBut%GdDgTzjx|-skRTDV&I$NHg4BQqVv=;xLAU5wlB0?u`b?RDLjk`8K865K zP2wGr8(oLvW1#P$*>Cq5*oa_&>Zb8Z_nmAM1LN|4#kl)Gx_Mz|apR4Jm+ve}bCw}n z9D|-*MAu?)45>ccDTP%{2~SV@I7JmW_($l0U{v6W>Ub;`Y5_gq;5?{s1$4Nyya1<3 zbs*ueAQCH!hR8YK65blzFGgl0Vu6A0 z%($lX$n3d+7HsI7`l{U;mx3Ehm#^K^#kW)nV%)lOb6MH8Uc7Sk?Mv+KIURk0#aKFzRuSO4!2^M)Dk>+T>*XCr!I(tnUfEzFH@E6HQh_?mNVHnb_Ko{U~ z+i;u|2CO+4kGM^BojAwnONf`z-oTp(2B>ZgFZD9%YU)_;=CPAQ5!hS9%?{(kjeRKHaH+sK&wBn%`BBn%`BBn%`BBn%`BBn%`BBn%`BBn*7hGccVw zmLATxGY6+KM~Cm!1HLy()%QlO_})m zoebmi-b*g$y=1fGi^DmsjPDIQF_k%1^5zfR@qgvVQdP6^nd-yp4_5zX_1CK(uKZTz z$Er)!`N}U;zgSII{;2wg)kEL(4V*k+!a%}6!a%}6!a%}6!a%}6!a%}6!a%~nUkn3J zX4rJ2tsD0Gx-Z`D;NzK77}#R9dlWl%;9%xtTEFkhRVBIX&YJGaRXLP7lMcr;Pd}EK zPX_~Zr%1kVnCT?R7mS=NlaGSIfF)9FD6p+a;KFfQg_#WBAHN5qm-3^}12H|h(dU6k zm+TXnbErco{3An(3`ayv9Lk(4jYS9ynwIS4e`@f16n_unw}#(i`27HWkK^}g{2m$n zK7+p`4@rL#za;G-eh&=(4nHI5L%bml!64r!l-%ypN4>CtCvz(=l`i{8!wWdgn@*Cgn@*Cgn@*Cgn@*C zgn@*Cgn@*Cgn@(s3InII`P3{$XO5HxQv+oE|IqZgRQ0#3f3NzNtF7ww>e=d4<&P_$ zt^8=^US+AmRLax8JN@g^pPIfu{R%QBKM4Z~0|^5O0|^5O0|^5O0|^5O0|^7)8Vnpe zluxA(v#Em@n;pHz4Y#M`Hl&UAiiOYS9!G}RGY1d)ZXF8dYCd@7!rWuXb@Id$2Lcyn zxx3oe$PLJ?^~J4*`RqaDI&t#gfeZMI+#hpsyR$ROWHzl=Elj4C#D0B9>~^z`qO1(Ja_WQ)Y$D; zql>LpTGAb((QZ1Oxe{`pIhmRY^We*Dwx21I>YYqY4r}jS@U%iIUqI^YiG!2Awi{(2 z?RGRzzJKCidH8tV4M*;?&E}ANV*X&+PvI!bfI-9x5C$;<@83l=y5NUY;)93|NS{OU zSY!F}p}9^VCLn!gK2;1quz)UuMERuPZ@tNkDYqKInTtsme0-9k?AB#$ zI-=wvdh-uO_fh>54h1)ZH^Gp1>lm0&$hkSZ>4U6Wf$`~rj9Y=R>4Ax9JYmV34siGX zPk(o+`fZi}wsI6NlAnZugn@*Cgn@*Cgn@*Cgn@*Cgn@*Cgn@4y1KlUGlPPuQ_=(wc zI=yhWvDvX(wX2&}6Pvwntu-H*dfOhnZ4chouyK5|Q*)5Ry%DalxmwdVty%|L&ueXW z8+xO;dDh$b%@4l6(6Tr6#^%aatGSBn?%UPOgqKIGam)*>^a8`2QpLu{?ojX#%{yy$1GRpu zvA*6OR8Ts@i5Hq18`$68*{NM>*z1( zUhUfbOyv3PPNUPfZ=W znphH4CI_i5RX;~$`)KuR)vr|l1b6-YUiE*i{)_5At$uFuCnqnL|DgPd^4ZdFmRhAl z#a}AER`|2RrwSj<|8~BYpUZtFx0Wkse=d6?^KUahlo2MrIPq}e>GZFrzdfBv{q*~% zF!kq)sdVwwsfC3S$GyNaL_`_)hvV_u_m<(LGmLzO^~TGkRod* zeCSNDvLT)#n-mxnVn~WMH$q37`WtbqiKA!-h7ipRNzrC~=yIU$tP&`Uiow%Uv}b+j zN)SExC{zrVn!;(veduzavTX2Cs2B`2h1F_4^ccFtimXaSXS8D;dM=(svI-5IRkRO` z(8q)%Kok{&Vr1}CvUYTYj$YO;k$4-hXcT#8soKO!+A|({HYPJvd1poKhz~tvZ~48| zoht9FpgrwFkH-wfih*}tJ3K;%fctshqr9_JZDLvNDGwb^N|1`ZSuvKXO)R6$jL_p* zF@~y5jH*33LWj)wnF)&!MIsrhyfcdS#0Whe?+jJm8Cg3tLJxZYdy`0p+IujP_PB=* z&nZr;GE{A1MD4KvdVu#(VKm;U+QjhMK_7ZZ1oz@_up&d%CWg}v_|W6Y3{{&LR;!NC zL&~|gepOKE^3K#NKrgxeOsqx~R9feOV(Zf*@E8s%E6^NNq$u?%4?LDC2`WvMP;7nD z5AN@X_R2X;lLS?)mp$-UCPq+ciiDJUX#^gpR}xg39wDV(9D#@QCM5UKN-C%{K^Ii6 zUhu#}B;&2W2`HWh#%Af>6K}2Iyd!OQ$IWP9aBqF&rW`M^0SjaGWq7@ zMK&WRQ5omdoQZ2#OR%l zy=mFjsSgY@S816=)ysTzn7Oit%+CxnPg6519`cc4<|%4sd6@ak({ASDsq7>@bIV?B zw6VHqTW1arvzMva#ZmTCPYtS)q10Q!YTvLbr)GwkDfJFyesY+ZQg37)G4jMPGo{wZ zJYwXKoB4PuQ;L2>lG*o&j}Nhn)a;`7h>s02PaLFV<~Y{Nd~leVB73qTNnYjy!^{-f zlR0^mxjM{Dkv(J{)wwdvOliYF=ILQ(N*f}x;MI9*n3>Xsfy|S`%#=1nX5K?C4>MER z5Sh7Q<})QX^YPRKr3I0h9X0srVj)#ZFC0%%h?XRQ8RdSy;O0J>qA)G-yw~8*=LdNy zL`w|giS+ZiL0$^aq9l0__}LHTm&^QGnDZxwG9 zzEF5M{~P%mxzFY0G&-&1KI& z?YKX;aFmEuvl?v@dPELQ=?5CstZg^;hQ$AnD5bO48~N%e1wyBkfp3o$fkl#7%ufr3l!&I)6&*yXJ5B~`H z`O&@B0r6(5)CxpTdXfrA-HE6CH6ScZWs8Mkws8Ik@BZwy29IJPdUBLhLhPnz{FOM2 zN=)YRnq0ML(^VgCqaXcR*qdoB6?wi)Pj5a(5MpWkCVnIXS2C7+GDSxaJi|k zH|Y8hz3xHEX5V>yRCeLxgn&}6oGX=b=RdGN%dp$SbJ1%fr~s#S(~tRUK%Tyo%@p&w z@_sdPcM>?NW#W`>`e3*Y#ay;jEa%T3-Jez1T@)#yU4#d@J8{5Y2VxhB*d%SKZZH@8?W zy)R8I@swCd2`TD>tiNb9bqP&f&h7oN=}nEGeTqAW6!BrkS1?g&^x*|~Qo|nfQBA#@ zbOWE_Kp}b4NU@*q8l11!rN(I(L~6Kd34xt8;ZhxptbU^UF5&{V zs!mm_E?2KqKUx*4&sS^JC#zHVTJn=HkT8%ikT8%ikT8%ikT8%ikT8%ikT8%i@E-{S zr5u?h#xmlO;j8S^gI80z!^2nErv|Skb2GzN*(V3D%DE?oud;^*uS&Vchp)1a4PF&< z2Zyh+2Z}i|KV8jN2QPA!{)1~R)4nIt-e-0jW@|p!a%}6!a%}6!a%}6!a%}6!a%}6!a%}6 z!oW8h1M_)|meWTTCde&+)ZJ#XinD~D&ylQ07bd25-J?bFawoHS>_0oaFuBV{GB@LM z8ItkHLV33h1SBUrk4bMNEk>M zNEk>MNEk>MNEk>MNEk>MNEq-lFkSs>s+{Lj)1Rt-uKL%fPE9w;KQZ~o#V-{;nddWi zbALWDpZW^2e3Sk3m`Y*h#EJBKvmMUUR=1nSi8OO;ork+H>U+j+wi9fma}+N%r87p^QU zKPNKt1W~teO42tTG+S?tr{FNyMrYfK_)hb_-NMzZgRfk=wzP1Y6pu?z zH*joSyLNl=HTQ$z6{ssMyPsyc)Ovz5P@7>hh2&v-3)%OkPZySM+`7HI04=ZKW?J%` zqeiOTxpDR8oyFR7eMteOrw6y)x-b1)kL%{XMb2wjio_9~{MsKV-fsf@LMl$>XRgks zQwwzgg>%&2Pmy_+t>gT^Pv zHa0gK22sX_?VfLHw^l-*P6k+x{^l+`dvZ3^|9}Cu^qrNav+}^U--=8JpRLYHrvW2Q zx~af-ac(;$RtPp2wAZVP<|l{oc!Ndl3t^vI<9`)zMem z!FR<#>jl$xX+$?8#VI2tc@_daOQ6w))$lUlY}8;5v{A>w8IxWPzTc`*q>gtt-V=De z&7i8MYozG0j%APtxIk>;Ri3X@@pexwSN=h<9-X7Lz}dXKCX z)_YlaFOzm%?!RPvg73QI)>q-|HQOsV4%TV-A6pdN98u~!6sRGrn{oJ| z`|x987Bxuo+J7+cn$P5CJ~BfS9JldTIQLH$5dx3Q>S}d6g8_Y!4C>wZ|3W!6U7wzt z{7U&B71!`4`AHZ^7)TgM7)TiSmSLb*KTw!q+2ORthTehmxrG63!)$Enn134o~Lro7<9N!L%U%G=IDlVVxE8X^~@a)D;My7-4EeKMa_tM6%KsE zbxH?KryFSA(O4p~^@qtJ50?l98yYK-&$!TMQI4yB`oyC)(30LfNW?et&Pl{hI{9NA2oy`31#3zxI{OpN=-W6QFd$f1+@X0er)1?LVME%YF zM684mz@4qm3p|ILV_#5SVCO86f8cC2c3zgRURRn|UYTE#mk1^aJ#o6b@Pqu(i^&<^NFhH);cH^!hVlBf%QCNCxOAOan&WNG zfppoD=$H({C>*qxkt|cRM8&p5L**1llmt<hoF8HYoBdTs|nnTvuJgG7y3v^1}U<40oPU!6dLp`cnZyp(I;Mg zaodvanHQVlJ@(q&+jEv65F%jTWRzxdy2(ILWJzQc%g`lVH$j~Pk%G|SE@ed*Y}v8# z?1o`F4rf4l6;m>7S>#MygsaG$4tZrbB95wIb1;;K0A4v5RH(MfI3lMQl4Z$~gZp=l zK7ETD8+z@s-ZC4yjhAEm5di57BcEZ#8ppiAN-r?XS)TC6_U&P<>3Ad#rI3JLo)rX< z+l53@+^Sn}?-Fj{CM=#fMTGEUv#$^Im>pyB&BeBOWlg<)abfYT)#cZOIfdgzjyHH* z@NM#tJKX{UBE#CIXv(4hgJ>C&Z6l9lv7#y{tReEE$xDVHGPcYJ64a72MTIdej<*CE zS0<~H70cvokdAG6NZf?FwUXSq@ zeIGXAkr}dfI&2_a)Vs4Xr?R{7=$7}uExJo?6hGX%IWv3aXsWb;?i~T4+nsS5Z*6Rt z(nC>vV{LWaY~A4JWXE(^lSN<48anS7JhWVKdmNh+(4RWI;n=#NtCnRcAWu?dMuq^g ziftIks!Nv2%ACOQkWh(N6vsA+Kr%Xm-q{jFR@+8G9qAGx{jCU$qG3FRY$!v6Mc)j%VPH(Txm|8eV!jYyBq5~ZpS*Ss`1kDlCys4 zt(}M0m)@G=6$TwC>^RTsy1*MOo?V9;TCB-ghA81bk%M(-3|cLBWXS#KtRBIDMAJuJ?Y@JH)yEkaH$~PRXW^1@Y2)_w<=0H!VdqR$b#%#r!8KIY zu~|;k9l=m#omC~BgR5Y}KsmN#vaBSt@Fh&0S9#X7IF2<{$B-Zqvd#(kK!VhO2V#3`E~E4~gTI?swv%d6?28v*!j{u%U12t9EN#3T`Z2zIIO+ z?>b9wFK^$wrOc65v3c3z6-l&AM=~YFFdRpQ|HCSRX`;I_MOX!179idtC*ncjz%vkT zTSnumj3VJd;he)}a73IqN9Wd4Y$+NCrc^Er<@okZuLK0H522j zo+IP`=To@vSI+)i_D1I4W_~CmOnhG+;tkJb+YE@&SFc$#ot%*P>}6*&qoNRhP@K6EBn z*$_{W4F?PgF(gHs8=<33{f#)*#8I>ZBf9fYNs2b>Lze?}XO%!<(Lx7|Xv<8{dF@#r zx)MYWJ_;2*THgserycj9%Yn+W!AGH@N4w|*oz-eS^ccFtimXa6S3BmR=i*5uW_>8q z#46ecM(ATg5+I6-K`}CTDp@-^LdW>fFOhf~uxPXzQniVdv}Zi@Y)odT^3ICd5g&TU z-tv2^J5}CUL3`SV9*-G{6$9_Qc6fvi0r&I1M|o$d+QhQjQyzLI+>Cp(Vk}jgSVo%} zp~tgg3{{&LReN%T4w>;Y6BZ$gL{f&Cump^vJuyO$$2&uncShC@jnKm$z}_U1q4pk( zq&@DTV_GpN;CpLT%$m_S6ScC+wdx2xq?~)}R|Stzo-mWdHCmq4RMsFz0Iae5^|rRfn;>ctUwNN+-N zPpcnI&;^yN7d-F~$$0B;0_wxldJREk>v@2?W2Iu)j)z#H)EonON{Y(Vb0hFL)81QtDX`Jj6q&_oG5kl}M5684nx-u>i??Yfy!%M2b|O@WA6~DAs*xw21Ze2s}6d z7;{r8%u+>B;isp!Q`yp|Q>9N={_fPd^6$KFL-qtHVIW~3VIW~3VIW~3VIW~31_Ql? z${=p$6bXcrXNQ4s^4JnpN4LLZL*vpF`}xgy1+QR&S9M&VS)(Aa(FDkV)C99 z@E^hpO_5O%r+|5W#IWcbt2+uJ?qn59f}%Z$o9V3So3#t;dJCa}csUmEAz|Vy!fhq7 z3W68$;SWJtBrq3dWm(uQ^vEsDB*pe#I_R$R9iC^&N+&!2@nO^qGe+VoH4FpSmPoz?VoE*TwD5&gnp~ zs|$K%mSq)nmk1=cz%_uRQt21nK(1pa35z$6-5Q9bGR7j`y0X>2-q{d4Z*mf|vpEOd z<)D~YOczAn5FLxbG^}Vjh<`H?MPv&KA}kdI0h@>lbQsIx3*t9+>R zOQqL}e^&fd@uP*`F7yg>`OoCn@}=C*w_J@CPYqIMn~-{`_e&SUlq)_V6x@S)I}J%p6FAdz!?{erdLwhw;a zF}E&AWUNg;MeB7&@QCCKNY0}JC|!`qkhOk_)@%FVLy{P33W{LLk->s#Y@8s_BCdv9UMqC8}CUs@B`| z!G}a86wOBAUZSd%q-ed35&Ztczz8|mP(~|Q)_UtB_;?mmqRPD_X}!06@FBAIW^*K} z+)HA;_a@-o@Y{p&8h z>Y?vHGSNk+s+7dkdya>`|5#Ikj^jEgyo+kRXOGZhS$eE0)6kWA&jPv|${JH`XVtvglTMQGEvjnHFRF~n!n>JDxCxQ8B3n*^$b7tn!dKzCjJ17yqPzI_9c zEDlFjo}_5K`UpNwy8?tFlSmP@-WwzMeGOFHvr-UXg2ObZwTI*Mx(_~vz5<>im84*; z_nHrW-vQ!o?I~gjcz8B4T5q69b;ARubPI z|KCeh|9bU8<##LJUHRbje?Pr8U7Grtsh21JXz~Xz{{KRGt9-EZ3#D7de^>luQ7ZiN z!o$Mh{IBFcp8J1uKc2gg{k`n>WKU*3n`vaq6F)m~E&YF`|MT>@)NiKlMUMZqF4+<9 z8o8;={xtz-=pe`^%1rcAv@Y2bKY-uAJLQ5zwnjfi>w3H5r!xCDaxO?@YxGmJuD2~7 z@cZroT#!gt(@o*DuD36KY69H*H31z$pudUeMqH3cBiAoj>v|jGr^w*b4w_dOPC*AB!9z(#R2bLDjn6)_9P!Z)es8i8ONk6s_y+jYsYGZ6;ihNF&!z(YoH| zc(-Z&Z5e85n)2YxE?TRITG!hh?~>zh+K>`cL8x*s2wKnxq-v0Q>d`N@#WGms! zQu-;RNLtt1An(ElY9F-B(fk60qOT-H>v}unCu5!70uTy0Bt`3bTjT-1Z)coW0YcFz zq@bVj_Q->r7^WB?6qONHt#DjPm+YAz!pD*v+Ib~1_6%rUvTME%AItRy2vzQJU`dzkn;*c3*w~}J zr=3_r3f8)0=ll>p9y!$R1V@&1$=>-PIkAia?aUI?9%@B)&kt)KORccIh$8nmw4_V+ z&kt+A@A(CywX{=9NQ%}aJLvoHF&4#Kc&b|A*phC_2fyzTI^ePKib@Wnz2ifV!wt?| zr=X+U{`mjX{qz6+kIMH~PEUV+dTaWzsb8FWb@Ho|KRWs0^1mv7SNYk}KQ1|?V)18+ z*9w1J_`w2~|7ZF8`KNM!Kc{8?pX^`DUda4@=KC_IC%!Pzns_4p%jq{#f1dhuqir}d(oD%44AMjt$u2f(ScPL9LLDkL()t9ihC2@P*(w9s@B#nwq&#-Qf$ zT9nqo;c)3XiOO)t8aXeIXMe|}YQ1=*Z3UrDmP0H20Pz=;PWKi~^NWh>t6r^0ui^Oo5@waN2C>pzz zRt37Cd4U)}4-p-5UTEkPcLM0V=EY&S%mnHlB8rAiv0p&vG%pOJ9BXt342q3G3afch z80B1?0S1nYruY)1T#W=_xQ>vE9z)(~R)&XVcV6>?Fv_t8i+Fyjydx06i@^YTJZ7l! zjyM1>1Ow<{{K_K^Zz^3Pfq>v z)Ekq3KKbd%^X19eIbOH;-Fs`yIbPYXX>kn+Eke>?w7?$>hPo}0-2WcG6A z4>CWHVJ80R#QllG>3@)3Nl&DHYF|VB-7?ond`O>xF$E8(KdtAFj_!0B;OZngWB?vd zFsSN|;7$@7GHAP4ey&8-cEom)$PjnnRgN=E$9+B2?gycruXx~Lhd=Zn6m1l#x-Kg9 zr4e|jKL}YZ8aP$e5!iWS1Rkqrqs5ny3y$j7N8q8V?#;kPhjkKB6ovXV4?Lcni_~5d zQJpXQ!DDoq*hoZc4X*yu2t1Y&(E>j}3#(lPxZB^C_O}D7e+e5dDx)p*B1O=y_|Rj> z3ot07MUtXj9-)Wawvg)*O)fAf762)%c4>qjXSB$xm@|uPR8p?C7(fs7$a}E?K&KcO zQm%G!gdU<|O!%Wbe_&873@KN;;GxG_;spl9#E=y2#SwZO>j(_WXpy973qJH%5=jdU z0J@-^51{)EL3q$kkqla70ML2uV;*`o&L|xi6f=VqPWz}2J;ov$FsRyuxPXuN&|{1% zc$F3wK+4rVJVKABtF)*9Qm*zPA9{>&1u&@EgrI;IeCRReNr6t)Cd34&BlLJS5_iu~ zWECL+$_PDZP$~$5KSRZ<cc=1XYz7u71V?A9F84Y8&ls zFw}mDVe6*>?vBLba!yqwhN++Oz+>4jg|-5QTi)FD|Hn$p^!@*5%AYSc%Lht-2bq$e zgn@*Cgn@*Cgn@*Cgn@*C2nMuwy%6++F*Yv&3lcdE(l1zh z*9$>+o7O)g8k+2i8e6&`k>kRC!P>iC2s+^Rz2xtLL{5bCQ?z%z5cGp2a>+keF~-&S z7{~>QT&C=&XzzL<=m%r$OL0LWCtCU`+Phu|I%>b~*iIKDa(LKJ(cbk!&|Px;O*^Ir z6mlqP1&v^}cfAmF!0&s7gw!!QuFI`G)XED%2lt_Qr$UnYAfR80P(Xn0qg0-F(=&i{)sqwdy`s#duF4?WoPsRz4{|F_DIm431GYVoVZA1!{k@UIHrRd_c4kMmBx znEP9~m$HAD{Y3Um=JT0m=D@_?nOIJLDgDD~G4(}&(totBM_MJujnx9Vw1%Q?Bt`3z z@OXF0utEfO-=>b^q8G;8g0a(y1jvuz{Y}0nV*z-Ix{-plE(wtz!pGiG;}y;Nutzz*BlLlA?7w$K8AY*5USjhjk8|3d?iM(rb|xbOr)CvwesTSUHE|9 zhg?w#_t7h4{ercw7cgIm5xz!1qL;|r6sVOKF<*&sz=I1yRV%V_)(e?O?L%yYPH=&_73OI0Zr$2*Xq`2jPrgeH2GjBv)_cn1B2v@1$Ju6Ie${D7HQ@{ainih;vQ zS(gOO576W2DjU7y3hm8eKUdcanxBrbDN0}%L8ermq-b3)YJNJ#nIHr{I=;G}qIJEn zdDK3Ji3dETgF*`YJ}+(_wT~h50HJhHq+qS<1DOl@zk@GG& z`<8luP&AeltaZK6`RQ1*7XYECEJ@M2UhMpItnoiUC^}10w5}IC5BL~L3lK^dNK&+} z7d<~6Yk-cM{~}{KT)Br@k??ufDF%E{R6>I{n&d=BG81?aMu7y-58&f?9{{1Ml?b&W z(dm8o7-zP*b)>452(=>d=|lJ!Q#+_VRjov^KmKp;KK^gw{J;OEbf@_5i$7BQP~l$| z-YFc<|HHhQ&*pwAcPab7XTLW)pZSf#@CZJZU}B#s#iSuc>peAskJ+>| zwUV(o(VH2;$81`fTFKaS-h0vqA4~3|cb$_~A&V1F_~2t{Ep2fE@HmA25a8VbdNq#o z01T>D;p~jw<0JGKojcH}N~Pcs`o~7-p^;%|?KQeD!R6#MsZ?<3!a)x`o=`?_J9nEE zhtMAYx;s#;#zd!Tl!8O(s~&pHR;5b3f>q&^}Of>7vAqZh1`*7xduFS!iyZx z??o>FKGw1l25XV3hJrzk7rju4aV&~U0fl?Oql@*T7XTkaECE6>2S`B|>qReAVhwQt zLeW^Hpo{gQ7b-DMMsdlZ^nrj!ALvCdp!P8)M*u>x2qZ=8dC?1~eGF5KwIixv^5_G- z=mnRYz@Q{l8b$n~&+#R+@sN8jdI99b7*YX*D)&6(-iuy9?PE9yfTzkmkC`Jcdckel zfKdpybW~^u;Hh$t{i9tkdI3w>G5im}Q(Q}uqIJFK1;EE6hpJXQ*B}4ir;Y!AVDen~ ze=4`jPn7;{>Gk5*ivMNtV}<{%@GkEE`|q&+U&#H<+|}$KWdF15>CERco0;mw&rjS; z|7rTKq=nS~oVrgL|Knq=M|PLHlNtwNDKjoLpeQp^;4hQ?8d7m6|$dsS^@X#gF(gB2GD@cmg^Y)q_h;=O`Kq$6?q-Z^Fv$+c&u+t&krq!Ne zD*%r^(%Wr*fXvhS;X_Rk?S%k@Vk=0B*1P0!PcGH;a~~>=3QyHqZ1e9e`ryNcIZzr6 zp5_~(_E4*fBlxhWgxqKf_cY&7R z!GkB!1%Am1YZ;9ks#+1>@VpN`M0RKnl?G2$D_kGZ`Ajouc<)4?UjFx|`;uGmLzO6>F#<>)qFd+bMcv-}#{Kp(%w> zGgI1?=GKZlZl~yxedm4jko^jIp)`X)^J;;PnH{q4d{FmLW%nkNG^ZBmnAsuw&b?Ok z+sbew)0m+u6psr4$-Z-s8Na%Q#-&tdsQScXW{2!MAE3uF#59i<%wT4R>^pa77!HKG zjZh;~>rU-OcxV&ZcRoOmF;qbfsoKOto5;TNK6)Hy90&AJ7D7o%y+`()59%I^cUoX3 z(9wl>`_8K|&e6g2kV1>zBPm*sY&>^8vudpH0)S9DK%}7dWb63|-mg$&HaTh(2M~&1 zNeb3_Wb=6+KGpyoAQXKi1#3OB{d@=?V~_|Cio%kDwccqTd<;7b5K0F~3f6k3M(`o~ zvRCdYekI`HS3W<2j}tiw5Q;@0DOzvd2OqD*7`7P0>Sec4kO|L-sUe|h*+ z(p0=17ZzrYBzaTY09>w41{)3L&=0Z*B}ASqhco4%MPVb*@` z_b55EaTeeaZsSc~xbXgNCR`dtFlpl~z$5IGOkcR3)pQ(h92k^dhNRTHWcI>C_fr#U z=V;Fg7*wSa5X4O;FZ$?VruQg0e9erftV!%v{MJHfTIsl{~h?~q?xIX7}NJ#M3FG4h#p^bt_ zx%DoYw&XJE&LEU3XWc0C< zB%TnXpe~uR7}Pz+OdUehC_V|$(Swi~3)h>Sim{SNu8pLf+Kv>!lPQY<{QhNWa?rFzi+K|K_dM=Hw9`%<}QZt`!;9brZ;W~elpL5^NeCGcc>fj4^ra`ru1b3v%~o@_7hW-q2$_y?Y2Yew$sf_cK4k7 zBq19?%meqmt&1JC^Xhfdx@D!{g!kx)p1yOvg&qSj zc#OnI-&MUuo?=q$DIp~u6ES(r#O$#Ui^oc=9viWF?8FXu&5T#wTk3HT2c4wpE%TI- zGLMru1?HGy9plv=EBETW1?@^wajasnL#)!8#2+|y&SSh+?_jpzVc^OB5+RFJU+6V> zjm-*gQM&?gi`T%d%Hr0R04AHkG_8TTj$*QUvth-e7I9KxQD&&(ty@@`m}9)S#9CA} z+2xJ)6|+jkcNFFlIJjd!OX|F34u;fcQEQ#ci+Ib|prj#(S&@fXxdx^yhbiQpu4)a; z#vJClJk07fFxTfWYw|E_*T8JbVy>^t!>nHebAz`5IN;9W*Shk~)wl+Ja~89H{R*}= zt%18Si(9)Pj|%r1m@PTX=Dhtku7SBJi@BjC4|CHRn5|>1tM%t76a6l&7*Y1{k}etu z`$tX$Ljm!Q@*!3${z}V>B>2MFJE#?3)PO-p+lW zbva-)Nkt-|K-2}Ahi@Fd5e+nn3V|AdQQV|%G#5eB#S)wpMd1{rEu-S3y0f4GUU=*c zh)boLZvRrfQ^!__O+^jWmC#EB1nUvh0+3XJ312WIsV2uG;Q(1Do-W$YR*8RKw2gI& zs^TxUbs**=09-24itQ={n-QR5N`|RufQ*d6AxO+O7IoEA!eOEFr6#oz(W=FFiyPud zE&+SQkYWU80Fq`b5DNvPF-aATk>DgHh`4dM8No)x;Z8<^Ve$~ZKa8LaJ9WAJ$WH9c z5lKuqtO)u^AvQG8Kr|YRge9f;LW#c3fPICNzG(Dxg!o6sebI4AJsO#q2*z9`WCyN9 zkBE%Pqhp=8SW>B$cNbZcvvTF0k~Z)OI7Bc!MmllgZgIP*%uq;>Yy>$(j>5a; zcF1%|1()%@y-_V+hPa{BrS8IMyToIq_QFS@=`!T;@X!Db%8bNTHv&8y*@s{d!2twF zv`evkil_oQ1c6XOcz+-ihy`R)j={hY@fW4vVqLet=D5pIf}G;HN<-^P36Zo&Itr-F z4SGDv9C|bWj-y@#6mJzzcfr84UKk|-Uo7Ak zd{IGSs|cQ+AU9m*JQhT>*xiF*4+0N@WqHc+M$&=u#XuU5pOI82f&_#LZ#<7%`|%aI z< z*wS06_p)0LGmHf-IDsH)MaT%WrY(=5{S$m4kVO9(As7}w=G~-H>}aa2 zq1GU0>qt9J-HKovg6#-8#ZNU=$5C*n3sGC5?ko!)gFY80Ta@KBc4KcXSxcmQalO3= z(Duv3=Y(6nnd3M>-2q-e&XmSw^_R_NAC4@a7Y!!qN3hatQBx^j^|Cpk3PNoP)f}q6 z)Vio}0hDhrPODV;Aj6F08E0|`Q9>844C$%S%yKadSYN)a zaJO?-J2WK?*z4oLa6nSUB7WZ)QY!A>WN}a2d=}refN~-h1dIAKyt-79 zM%LS?q$YvrR0u|K0bE65{ZV8)f* z6_OHcFRM0{EJ_~IOel?N-{d5OF63G4K`P0gB0vI(4gd%-J=I0*xCB5_0_USBfk>Nt zYgVMJbmGhd)S(q%Sn;P@@4_{Fd7D>Rj+=tT;$mke1M+?f==r%C0Evr+jtcfu;)ag0 zu5s)@WEqLlLr-Os)hFi+BxMj{EF_gs89^pbQYJqoKHE_iM?sJov3&ehGEaq^?zILN zAoRf@$qN7YS+xL__U`-G=V^)fUk#97aN5WRo(e2I<6 zaqJv|^9bZ^_`Gepv72&zSyZTCE$@{Jxm*gVXvL+1^Cj0|ffb>bITLyzruaX53skQF z#*?CWcb-Ojb zyv>-}rJ3IL=y+iCln^{2_|Q`lVbljMlST7kqRDZ2$Lx-@sWEA4yw!E5`_=A*sWD;No;K}Dns%j3T{GIZc+;Y# z^zzZ!qn96_ef;{Kl*K)>`z@p8g}Q6*EAAUTuk_yRO*tN3u$3+FMO2Wd8w;AVBt}Pp zvfP8_QVIX>mw?njm50p)n+keiCmswol^-S8Q;yv1R}%s45~#5LMUG9HLJavcEzAcd}Di=iXB+L zjG$3?wLm5vsb+`RoJ@k-8DdS$L1k3Y4EkkadLVp=wBlk#`xJeU4e*S>gt@RX6JvLj zoAtw}PxKjdicgf8*h;ap+*HqHbNlS?ACAEbhpVznd38e=)yHN2_+X1eEY`4U;0om5 zs6qe|!^#tki=XZ~7z~_Vr5UmDfB^YF34~*^4mHTa=n_C}%3#F?K1;41zIi2yl?=%*0WA+R!F zNl8v0CAFM+QOk+mctlPRR5U@L+mLU?xfBA*ZOZ6UpFRf?s&r1leYCIZT%_RzL}o4jJ8Eb#kIyOjcJEF>2Tlb znH&G^sW(m~9PWf;Fzq;)bR0}M4qwvz{+`uw`Q+@$w6!s5ZM>yTSQ``8_Ox|J(z+vM z?U?EQ8DH|_hUQf1#=p>9Z@E@;wdST~#*--BxM&xy8Lk-8_6cXeSY)eFYy;b%=@!r03d9|~CSAsgoMFVRWtHM@HD<*y zBhIxt)o4XzaCB!>q!#;aR4 zN-QhBzrDilEkFa-t@PEST>|>)lQR$CY|Hs!A=Axx_3etVVr@Jn6rshwg4&0b!MqKfpzJSLk>b4lP}x>J+dvn5!iu#@a4oh- zY^gNy%V(;?(19<;EyLUpH`svh76UclA2^?F6gRGSivQka7N@%k6oVVZms^|;ugPoP zg3bn>uxhwbZZXW@CUHP-;Zg) zNbNC82gQw>wblXFYYS_JG&w{_iHCC(6%DC|F$Jg3kY;cz_z#o#lU9v2%j>XqHEmVe zENw&Dux>yxqzdcu7D29L7BPeihB2e3&)`lxw_>mpd1kZcPQvHSRf}&Fnvra?f$^3O z@e~#qm{wI-KcpAW7n+N_4sU6WHhtbn4qwf67sAzaqhBg5%x(jW+>@nbNFg&Xqasa1 z1w;Cw!n|k=#B4~3jPsVYYr=+M42|eBxR?680bJW=$Xk0g#(rRdL;QlhQ0aud;80pP zN_nf&TOk%#R*FHJIgW(@`gkjcSg+8ofbvt-bmfp7_xW=EEfe_3Cf-e6hdI;R2g0E< z!X%`(K|grBXj8_k5or0sewYhEU?93?API#SSmM37SuU-t@(W&QVx`y&F@--IZXUPqzG>6Uc<$mrAr@?Z)A7DmR8MTKZ^Ed1@8 z(F5>hK&~Z^L{9Zj7uFuBov8JX)b`ZI`)a)sJ0h`yOCx6|=;ERFE?4LLQ1OH~SSpT? z;8-y13*|m6z?X(tgaqWz5?IKkHPXPyq%Ss3zK#5-el$}N%p4txvC*l~QK*}rml||wlwXKDQIW3ns&~Qr{5&(G}4M6q^@*vkjm$SY7fFc*zF_?52X&fU*G*rNli4uo&Nd+0E z!2VPqp~4Y}`z9ow<|!v4AwT3iP@~2RLY(j6R2^0mpsp}6N&W%1`aX6-J|urMiek2t z&6RU0Golz*-2izTdcTRmQn?a?rQc{7tvRiUW3@FQbfz?&i`v43Vegyc^V&m;M%z_Q zLU<@;e>i1qOK97E1KAE>)6y&?Gu11Snb-E-8F+PoCNo`WlP78Nq)dAunK^Lm^EHWJ!Cf zWZR79p2i>+yY2DUq6u?N!n_TNyG6Fk`dNLtNJth5*KIe}rHVGBi&~RKt*N3dGpc(= z*UL?Jb!p?Sq;c1xzBo~GAaU^VdHu+usqAWZqGnslxjkjtkRx0k)(0M47b1=FYdUoJU7fg)Vcu~7~z<8q>Jm4#dX)uq>5W+ z)C-%p-s!*7|LkeHf7&P{jly;7S1Vqum^W^Glbhjwr)Km;iw@_t`YZLF;_arzuA)Ldpxms zB;ok@jB&x?N;_JTj+R^1x1uS>wizR=Zn0hNp6$N8cXsdfQo7WFR)0} z*|}h?TrfMZ(7#w#f34$6$3jK(f^$7|zf~s8)?W9&Yt)(xX0*R4VRUi+V!?%ii-rq^ zOP`q63dlToPisq)+R}M#**%cpqSjlx)0?}Jo4XRNkIn5*7`oqtA@2hcO@rKr=WI!S zPlDT%$))px)a_6*+?rK0FrGUxY+VQ6I!4eM2mGU;O1TFEUC=7#eoP7R>^gB@Z?*VD ztx5db)`Ejs$J&s=rg0vhoeDW&E)oQ{j&_AU!>HKw@hY<`WPc$Bpo^_G`Y z{o&;>3>4F~|ie5%px!hgg^?2 zI2B??xkbt5VrvLP;LVQVNHv!Yf3jy5n8TeRbc*zWb@LMT?5yV8tRXg3oW=EO;jJY5 zHk^x?A+me9rQF7bEV;3!Y-`Ysp^>=bv5NRIE8s6tvQ&Nan}Q6#bSN7I$&!-`hTPLF zH1xrAUyg|KV;txW5+S~N4h?w7-vOl(FON}YPQC*@G=hPT+EhSCB(>a_uJh84+`emj za{243t2FOp9~3*Sj8u$8v5Ys7SA@?U@bx}U{qhfR-+x4aA|U&yG`7%Dkskqo7(*r~ z=bVf3I%uc?q{e))si<6@S5L)8!3Dz~Ovv+mvAiNQR&wF92tOK$%PtUfle~p{Eg<+F zf}a9dT|2O@I6*EdBfkJ#CB(?lqoB~#Ef(1?{>gBZDmrxf{p5*J# zbuDQ4r_Y{0`+_2+aeUY;Fq)+eH@H^{<2MUa_Jqr^A^V|VI6Po8a=Yr6X7B(e?O=)3k zQrLR8ExpZ~+~!RT`BOsRT+cjLzF@65*YlZy#nP&4m0ze#l{TL1iO+M^MNa*+=e#G) zS(2P(p0nNKbcupZxAx3)I~RG==erZmO(}D0ir<{zHp@1)_Csx~KXN*ZAC%X&uD^!6 zdY;K9(W294&9}6>vbN%nx3n}v&RLEjR(z+{%y~IzfPsvARrIsEdb+eLL#B|Q2SAAD zes9Z%rw`flLG=z2hOB#$vlyz>2W~2)LSGcVrpF-b!CU~o9m%^@`$sTFg%9&+vE-N; zKSw|`2nzZnlo2y}S%AY-{ZJdA==UGkfjY9{!$WbFm}O;v3J=qO%J6Y$e5f*D_3P@f zG~bxy8>zHDHU}PgAIf-qMdWyoH(xrOw$vvr^|xYgwxxRmN%+T~NN^`)foS?j0`Z|< z_W-Ew2g}9(iw6dgfDa&BKS0#DkLHDW6R?>+@^YM4l@&EL6*bMYkSA)gIm}57%^uz4 zm$1OHQaqx`DrGeJ8n#>rpk@iy zU^`Gb6$LNQys)W9eTo~}4waY>(I%NJPV zy9x{YF-2}-#S(|_OB*w2iK6Nofm;V}jGU`TusbMz56gO%ciOqc(T=5qirkd#b5G8V zOC2J0EXNv8hczQOpjQ0rp KE{7eImH!LjBMF=U delta 3761 zcmZ`*TWlOx8J^kQ*_*w-uI-K2mv!t-JSK`0Qm3(Vt1l_(xOSVaY1}65cAcHr+pc$4 z|BRE^MQk2GfBk|_Kc4zdORRjtt0*^=l#){C6+P{#Z)xAop)qk-k6-Wgqy%f6`d+CVyRexXK#ZW5Tt4u&q zeyab}D+zZ)o%@?o&8f(^C)G0PVQy;!ZoJA(wlP!PX0|tA_EnktJ03f=vjMli%1uTm zR98E`zpDXrpvs)+e(cnq2He4MB^5iTQX;jdSD~Tm&SY=h9q|VH_Ewo<-V^qQQvKq` zYL^#IWFI95>g*nDuzRGsJDI3s4mDsVcbI$Yn8OX2`>ME$mxxAy5)`|s_2E>E*b85dh z-f>)wiK`v&^&JQE1cR>8IL7^eLx98LU}v`<>hZq64t4rlFdP(@I!DV;ihO`JKqrF} zST*f@&axfNvME=R_tO}bKLa=bj_=K4u0Wr~{0QJF2t%uxb(8GOszp-}?&w4vSoY+y z)QmyEGA%1tEI3{fjy9_i(G%_Oox~2QIqa>wZ$K0-dXu1`fZI}U+f+8yRH{M>ecb2T7{-BvYN%wT!i9 zX49pNWnC>&mUN_(6=X$6E^FN>`~sY1F-!aIxT@ zg{rx({M)ZI$M3|)f0Mu4G<(N4OUcUb_ALeVo!(GaE46}*;b2rHT@c5|<7!--A0Hfn z2HQ;mBfPcfDBx+pF~CXj?)Y#S0o{tYS+{KkO|wk*xixwS)Wd)oNRtFF)2?`b4zjZV zSnH~}6M1?KveyB!T}rRCVaiRY>{gE3aGry(W|=g~fUH52Az7HavPYJqOsf~L4arpN z&Ro~KQv4-FN!PVCN`b%B;KI*C=5`kzSum}dXzsro*=E^qs$Mjib+giYc+z(!%0nk` zskpw9E0~UE7qgj7>VnW`=hjVKbyV9zrfv6&mP|IAK5{6%o-1tFrbRX{-4iz_j&aMl zJJI7!IQ~*TvuV;2XPGSC1I+kTOP-xdF5J>+UTBj?_P|=FHJh_a#X@c+m(STbet&gP zlQ=hdcyU*J5=?gevlrWZcrVa(2&JRH0AXlu`jzzJ^un1GeG&5@Q!c{*DvLXlJ+V#D zuVY2cS|}vx92yq?o7|&)jpu)<^iQ4imT##}$kjj1Z;CBmptl+H2(@E82#`r5vq|0$ zrAR8_&y-4LAxmF^1ZvQi0cAjlffM&S#$N$^mBI0{w=HBH)Zs{pyC>uRZ}I$7Mf~gJ zZT9KUPNls4IGrQmvo}kodob$#fqb!F5%HM;bxTam#OJ=jQmKkdk{3($d)(SMgLSk) z$D1qIQYVrL0C$z7yGXn<6E7pGuEjMwcO|sUU?|qeT>b!%9%-@c4B2U%oaQTPYB`bm z;BVH4gpU+QW~17>JZP^xKl^L#n7l?h6n4{h0f>$6rClbYXUT{m{Z5Oc&kdAi+lQ5O z13-Z90lp8YS=uPJuY>Zq;rxooZ&+*eO)NFCUphvHJM8$fnJjzY2jITX;P|Y3(RR1p zgisnK<0K3D9hO;P2IPbLxb+)D+10y@>m|Lik$;PR!t9C4)5d>2#@BJ;X@(^|{N#L< zov3Ehj=Hph?Mc9}czYqPeaORA@!rBYPQ!mJyswt8VC^d48o<4&sqUs(h-E}-X#-Ex zxlrDYJ9UrKR&UTI3QpRO7*{_}qT8P*V769!#U}lfDJ2nmu^fQDi~6Wox-vH9G+oYT zthdtn;wpa_!j0|+aoD_On+1IBS*|AN!;XKw$cJ0<3rgI+!mZ#+UwH(ZUIr`!-T>fT zNG3oQw#*o`3__t2(o_b4;4i6Jy(d}b1W)i)8+r2-{eq`xrq&!A`OvGX>V0MTp0a#b zS-!74bzcdL-dEE1l(hK6)jxNu>YVz>t9aS~eGh$@KlE3Ad+n$i{->`=-6w/upload_signed', methods=['POST']) +@login_required +def upload_signed_contract(contract_id): + """Upload a signed contract.""" + contract = Contract.query.get_or_404(contract_id) + + if not contract.can_upload_signed(current_user): + flash('Only the player can upload their signed contract.', 'danger') + return redirect(url_for('users.list_contracts')) + + if 'signed_file' not in request.files: + flash('No file selected.', 'danger') + return redirect(url_for('users.list_contracts')) + + file = request.files['signed_file'] + if file.filename == '': + flash('No file selected.', 'danger') + return redirect(url_for('users.list_contracts')) + + # Generate unique filename for signed contract + original_filename = secure_filename(file.filename) + signed_filename = f"signed_{contract.stored_filename}" + + # Save file + file.save(contract.file_path.replace(contract.stored_filename, signed_filename)) + + # Update contract record + contract.signed_filename = signed_filename + contract.signed_file_path = contract.file_path.replace(contract.stored_filename, signed_filename) + contract.status = 'signed' + contract.signed_at = datetime.utcnow() + db.session.commit() + + flash('Signed contract uploaded successfully!', 'success') + return redirect(url_for('users.list_contracts')) + + +@users_bp.route('/contracts//download') +@login_required +def download_contract(contract_id): + """Download a contract file.""" + contract = Contract.query.get_or_404(contract_id) + + if not contract.can_view(current_user): + flash('You do not have permission to download this contract.', 'danger') + return redirect(url_for('users.list_contracts')) + + return send_file(contract.file_path, as_attachment=True, download_name=contract.original_filename) + + +@users_bp.route('/contracts//download_signed') +@login_required +def download_signed_contract(contract_id): + """Download a signed contract file.""" + contract = Contract.query.get_or_404(contract_id) + + if not contract.can_view(current_user): + flash('You do not have permission to download this contract.', 'danger') + return redirect(url_for('users.list_contracts')) + + if not contract.signed_file_path: + flash('No signed contract available.', 'danger') + return redirect(url_for('users.list_contracts')) + + return send_file(contract.signed_file_path, as_attachment=True, download_name=contract.signed_filename) diff --git a/templates/layouts/base.html b/templates/layouts/base.html index 1e2a8cb..1106c27 100644 --- a/templates/layouts/base.html +++ b/templates/layouts/base.html @@ -67,6 +67,12 @@ {% endif %} +

  • + + + Contracts + +
  • diff --git a/templates/pages/contracts.html b/templates/pages/contracts.html new file mode 100644 index 0000000..56af425 --- /dev/null +++ b/templates/pages/contracts.html @@ -0,0 +1,120 @@ +{% extends "layouts/base.html" %} +{% block title %}Contracts - TryoutPro{% endblock %} +{% block page_title %}Contracts{% endblock %} +{% block breadcrumb %}Home / Profile / Contracts{% endblock %} + +{% block header_actions %} +{% if current_user.role in ['president', 'manager', 'coach'] %} + + Upload Contract + +{% endif %} +{% endblock %} + +{% block content %} +
    +
    +

    Contract Dropbox

    +
    +
    + {% if contracts %} +
    + + + + + + + + + + + + + {% for contract in contracts %} + + + + + + + + + {% endfor %} + +
    PlayerTeamContractStatusUploadedActions
    {{ contract.player.full_name }}{{ contract.team.name if contract.team else 'N/A' }}{{ contract.original_filename }} + {% if contract.status == 'signed' %} + Signed + {% else %} + Pending Signature + {% endif %} + {{ contract.uploaded_at.strftime('%Y-%m-%d %H:%M') }} +
    + + Download + + {% if contract.signed_file_path %} + + Signed + + {% endif %} + {% if current_user.role == 'player' and contract.status == 'pending' %} + + {% endif %} +
    +
    +
    + {% else %} +
    + +

    No contracts found

    + {% if current_user.role == 'player' %} +

    No contracts have been uploaded for you yet. Contact your coach or manager.

    + {% else %} +

    No contracts have been uploaded yet. Upload a contract using the button above.

    + {% endif %} +
    + {% endif %} +
    +
    + +{% if current_user.role == 'player' %} + + +{% endif %} + + +{% endblock %} \ No newline at end of file diff --git a/templates/pages/profile.html b/templates/pages/profile.html index 1457d0e..f344ef0 100644 --- a/templates/pages/profile.html +++ b/templates/pages/profile.html @@ -5,6 +5,9 @@ {% block header_actions %}
    + + Contracts + Edit Profile @@ -151,5 +154,41 @@ {% endif %}
    + + + {% if user.role == 'player' %} +
    +
    +

    My Contracts

    +
    +
    + {% if contracts %} +
    +
    + Contracts Pending + + {% set pending = contracts | selectattr('status', 'equalto', 'pending') | list %} + {{ pending | length }} + +
    +
    + Contracts Signed + + {% set signed = contracts | selectattr('status', 'equalto', 'signed') | list %} + {{ signed | length }} + +
    +
    + + {% else %} +

    No contracts have been uploaded for you yet.

    + {% endif %} +
    +
    + {% endif %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/templates/pages/upload_contract.html b/templates/pages/upload_contract.html new file mode 100644 index 0000000..7b66e2f --- /dev/null +++ b/templates/pages/upload_contract.html @@ -0,0 +1,45 @@ +{% extends "layouts/base.html" %} +{% block title %}Upload Contract - TryoutPro{% endblock %} +{% block page_title %}Upload Contract{% endblock %} +{% block breadcrumb %}Home / Contracts / Upload{% endblock %} + +{% block content %} +
    +
    +

    Upload Contract for Player

    +
    +
    +
    + + +
    + + +
    + +
    + + + Accepted formats: PDF, DOC, DOCX, JPG, PNG +
    + +
    + + +
    + +
    + Cancel + +
    +
    +
    +
    +{% endblock %} \ No newline at end of file