From 904a88088602899c840e9bb70a7a47b32a25a7eb Mon Sep 17 00:00:00 2001 From: nico Date: Wed, 18 Jun 2025 23:13:01 +0100 Subject: [PATCH] Application - User Account & Profil Picture --- Notes.docx | Bin 37678 -> 40420 bytes blog-app/blogapp/__init__.py | 2 +- blog-app/blogapp/forms.py | 27 ++++++++- blog-app/blogapp/models.py | 2 +- blog-app/blogapp/routes.py | 35 +++++++++++- blog-app/blogapp/static/main.css | 6 ++ .../blogapp/static/profil_pics/default.svg | 1 + .../static/profil_pics/f49fd8e7ae9e59c8.jpeg | Bin 0 -> 4371 bytes blog-app/blogapp/templates/account.html | 53 ++++++++++++++++++ blog-app/blogapp/templates/login.html | 1 + blog-app/blogapp/templates/register.html | 1 + blog-app/instance/blogsite.db | Bin 20480 -> 20480 bytes 12 files changed, 121 insertions(+), 7 deletions(-) create mode 100644 blog-app/blogapp/static/profil_pics/default.svg create mode 100644 blog-app/blogapp/static/profil_pics/f49fd8e7ae9e59c8.jpeg diff --git a/Notes.docx b/Notes.docx index 8d0c737c09728f69be454eec9b935811ef62fddc..85fe73e6bbfc7f726ed1efe85c9551472da1c886 100644 GIT binary patch delta 29233 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 delta 26478 zcmV)fK&8Lry8^DJ0QEdAo+Y5Z>?b$ac zI{UY)fB*j9{`K+AC>YKrjvq5<2tRuBI32z{yN~1Po6E~+c<)T?=wjjy!ypRA@x?Hh zTn6K@J9I7|gK%`ovm8r)n})&Ai6Znp-S!{s=qw#>_?2$7QD{G+m+^q$a(HitvGa8? z2DkPg;-z}2EDywQFc5-}=az>O)*ec_#Isr&e+X!gQ?@Ao8usy*fIJuyt|y(;g{L;H5zzo$L_%O-1r+Bla;bzY}fy? z!Hm#b^ARS(XzdZ?%SkYDJYkfL61+W|h5noL{nzvN@zmcW@25YqH$octlUIyXIS|M% ze?!MZxCs2{-kr`Re6s0i=;nPk$ipfi9wuJ)+~bs^6qh>nWF)9u3`jHm6#o-1nfdAw zIhKMVc!>EMG*c*kGn>f-apB^_8=)qLT#izKWCQR^14u)MQsHM~DCroN!-a(6aa>B# z$i_*ig2!vn%8o4T8}({Bw%#fj3h-wBI47lw_7w4O2fOe^-%R ziSbn#XuJdr16_TCys*)yw`VLX1I}cX`K6B`zNl!DVrcV=hBLNjUX1SmMF66i-T8qUe*F01f71=vL&-cUaL#guAj+_abAeN3 z$eRlU=P*W#^Wx)c;57_6((Gy`u>p& z#(r>yOM|R<-tz3|%LQ|dz{$^V>Vy*~jzgQVXJ46FjN+-tj-6Q;;h9G0Y1fa2p&L52 zGsg2ZdC4-k5}&F-Rsm(QGwDIU$d)X1=q|JP3;; zo-ZonY7v)!fLt@HWZHN^vP>QF`w;Q9)z=3s5K$!puKwSD(daQwHbk9Qv15>TI80Vj z4Q0VL+W?uW>gnhBf1BrI@Lao5{1MIJF0`lji9PdYlav>|2QPb$o!@&m%C3PF4e1LQ zu+$nPkpB>)phu62c&PzjG%DT6wK#2U z!OQri8ik^4>XHsiQo^yiA!+&|&Z?bz39qYBn40RnNQqdKlE=m%qarBJu6ee9mtAxG z*FS!y^38KPe_&tVCUW=wr+1$|ynk>0*?fP)pxpjRH@o^Vh=x0i*s2=1D-;UFw&y*4ryc%kE$5kf)FnH&VpOLd^K>?G5{zazY@isW zNYZV?KQxgqD4dAa3WTER)Au2Y-hP>_nDYLD$Cv3^KZ&>wjj@bU^_bh~=hmXjDqI)< zsIr>!f3}b4=R}e1hD)+jD-TN%THWY1le3qUy> zh1B4b5m0%Y9$HgsQZHHJG~&0>h|Ifs@8>&+J(o%x}N*am4Y67w~eAjK12bM}I#LNQRzchxn0U;00ki4El5IdN_n3 zfB%sY?vWa^$VH4zZvLt3Ao!9E#sWwl9=l-_e+tm|iQkIi_~fs}O+D~t6I|++-OnzN zNBrOi4F%ZqzkW*oA|J)H&*2GU1^;@7exflFs1;t#7GiRb#8nJf3^O@awpgV>*WM5g z5miah*@S^J@d|%%+`IcYLx(7k5D?EIe|ut>{G0uil2K(jlEl~#neg}1FP2P;sLO_U zAR)=&i#7mr2^V|L7>`+q$wDi@s^{^I9SvRg?U^3TLKpe@@0~~d(R=7e%U6d{@e&!3 z;4_8uQ z^XQHr3T&tT=`Q}4DjT`q*`rXI6;ouKyyhxfM;vi%4}bId4+BFqS0Ftk19GFgGTBnwcN zt8_sjy@2aAUZd!~_(nDIfCVJW6iYPjT+pmidO`n3f2OVtF?C@pWsOrnXZpdsAj*1_@q53pRV#Le=1d3>w=D? zhUfK!c|e{QDP_g35rt>O@s^?jv0MPaE0$^r#R7m{>F+ZPkrhc*3@&v+cDL}fwKrPg z7Z&I!3@JGY0B{=4ZWgA=3KEnTYf-sr7VnU0rkB>AW-8Mp46%o?``|F%@4x-MIsl2> zxVG{F&%zQ!RY_(MUo96Df2>lEj$awhtP`b(Iy6+vqDc^!aN8t{yF_?4_dZHFe3Vj2 zcFy7KT&zp0R%J2}bq$z$Z^nFjw-!T zq-|q*W0~MNMD>Zm;f287Ia-F#dkSiSWXu?p+uRrfZ5o8f6l3<<&fp-gI}e5>vSI8gpd_N zM9yS@i>^yV|e?s#ZY;_^bDuHbe3*xQ0w7XeF0RU(oCPUq??`7Ue1tBC}=XDi#WXuQt60fP6 zRP2Gb-w>_A_{oyYnk=^e`QVFHc@>fZ=*2Ya9fjf@GR>SWdA{Ha1s=oM^ywdAAAwOu zU`&L25#j@U90oIk!;nVm2xoY04NF<*{4#SxfAUgv5r3u8Ns_557H`r-Y=_~oY?^(< zcKC>`MB)0%c}e6I(KH)&!FDH%(;-x#NwYJ)5{31KyFzkKY}HH7h^VMim4ODKpp{~m-WF{|w4#Y3en9Gu zWDe6ZA%G+ZJS=yYtt7P&QE0_GyIBA$O;eUtkt3dP z6YoCfG&xSPM4c*Ow$?Orhbg7gOtcmW!>(O?*r?1ZCC2B!YsyWd&%0%%;)cJ_$mv5fWI9r|(hHf7u{h z)!M*e#OD3Sne~tH=ey@w#fQP19j@D@iv1b>wR8ee*xHVcs)1~JK zA+B*4Fr9|(1krXEk%GWUI%Jg%qU=6WII&2f;EYr(xQeoFDx%on^K~bDutbRyAk8+# zN)*=TR$FRR)~%c6fMBpvIS&bVi?vv>Sm9K!Wg#a+X}%BYR2NVWG2t~@fAc&ht$9|v zoGt2_*3c}iQbBgEU(dpJw>E%l(#7qeRyY~C;X3W1SzeTMsoXJ51d6KhESb<8Lq(O^ zE8DWNEwWBGnm@KnPch+y`Te*5!>lI(0B``7C16jHPM-wGf{JBA@QPuwx>+h2rzb?c ze%eLIImh}IMG2A$Iiwgie^`Fod;S1t3H%4gC&$9xJ$?6|zK1p%!5&TA$Vtiya4MmA z$bH=*^;rgjl!c?GvaU+M%-p1<(sb(J`h`n;n!)8cZms0wo=Fj&#W?UsxO^ck5Kl_t zlcCX!{D%t)p_X_bwFWiZOEm7hF)KPQBCLOUZCreBh4iss3t zsJxV4qlQ`5FeRO)tJ`y?00k6+>Ts!1&VH;#pBKw~|JLWlvU={kj*l~jUwL*GjhR(Eo|)BJXA;=d8UEDswRpVWsf|mpgHB0x%636gPt%EE`zFA#3m|fMlfj>QhOW7#}y!m^$IaiQ~{_ zMpa6qMsYe>vy$&PyGPktWW{*xYEUxIRHhr_5NXDNKg0>_G`%^(o&T41%e_m^B5)_u zAdKzgvB-W1f83CuHk%bjK+vAC=@p*aE2xweX*u2T8bd4rA#fSf2oo#lIpBy5c(CosykE1A7Nf| z(}OSwqfIe;B)x^QMS$8A{ScWY$Hzm&SYe!+uuqd*!(8T>D3SQ+TZGvEoUzAlvTTJ! z!;MohMbbF%p8hdGza~S6M} z{fbEze{yxQl30L-q)7M-s#91o0U~E8fSjJzub8ZzdRy%saEfG!kl%Qd=V>mZY?@M2 zAg{orHlZEK4U#=e9g1x6g8cLPb>dFEj*tuSIy1BsW{~Ag-cZ?%%gp+8$Bxn+f~i0# z!j01%mdpy=;zY}J{gLgn8Hf!;Sr;3u;Eq(+f3r025ut$o-z*tEK`<@Dw2GZ*Dw_@0 zL%55MK96sH9%eTOLA*1lIRGFJL5VRXOH)l1EcUz;%U;!#sUGUxG-cWk)Bp++?omm> z&4$ETq}wYU)Wye-3u;MXImF9&-g&4E+)$E~aWrtaB#5k1eM;+2INYC2k|$m70ekXE ze@rpI_ipa^iYd(V7gpeFK>kR2{UGo8*X%)oPacbY)v=k$U2AkKQatSBBiMvn1xud$ z9R65kPr6;t;2M7Z6NNj0f+G_GW8;48&)FNCGc_ogM#&YDELLVMSY-ZE2-6hTq!Z20 zeRmDR)6WtzRp(INC8?)*zQiKsva49Ce|b!jC#K-agnL$`kSUl7D24!$wV`0DH3?I^ zvm2)BQ#FTA)f5G+9GVms32;>!Nt-mLYVtym>A|+8YD@`=B1hxJJcH!4J5?h=Q@4Oo zs(unoPEa(yXf7(*bFH&!+kxA@XH@pjUT5F8($4Vzaupo8B*zg=d8x#>wb-v_f31cS zs#ckq_Q-v418)h$N^Rdd5Zy%~9ob%2fVkQs3X;j0KrQ9RBoViCI?%tVkqy#gTtDV8fsgC8;`FHJssWa}yqW*w-3=4W82!`D z^*{el3UvZlh0`snV;P>2@Y&q^u>bI3|D29_-NzditLXTvjS+qqiZLu!e-m_zW)IHx zLUL-`R}J3MO}&)N28N{}twcUihuafDBYm9TjtOIvlxz*9Fi)H&1Hj7olX>ni0jKG? z(#f7Xy2Kqg;gkPgT8mE|A^~Vv;!1^z^1gE^>q9hS+f2D{c8KsojlEW{n5eKbi36-G}##VKVPO z+OEB<#e{^xaI}-h}N^nIe=~}i+bvDR$0Y&F^FD=ikW|_>1$=7GG>$#DQ z(_3T%Qc})>ORX=en4@mA5A*b!vvQ5301xpjUq`=qwl_pZ@7t;u4P8`}^u?Mvy!`O# z&#%a4ODEZzIS%cK^B9C*(k^=WeV91oHyl2FA31n~>DL8aeGIQqpNh1gS3}!fUICW-mic&PLj}wT*iN6krik#6 zL(G8A>ehn=JbFus(KRtQ4DeR8Bs)qWvZ83>R=YI&%hHc;A+iV6?R}>6@R`m^7MWkn zv7LnMtjWR#f41vP`cpJ`D5yNmUbIRS)`v*N$4@c+DaeK;@a1N;yvhMqVT-wnO5D~L zIJFkHeSuTaXtb}usa4fXM>fAzrAu9^Q)+8b(#n#ZgRs-CK&gv&stpyZs5}p}-U-+x z8H&CEallePF!NNG3Bk*d)l9N9n$PoS5cv_xVs9!ze`6AxRp7jMhu~b1c!k&VI4@@; zl8ILv-9i|MWAHTE^yW?cNszkKMWjwW;4uXO06iP?oI%0u%#BH1%%U3(W?$E59&op% z%IpSWa<|lIv-BC(kOU<;=d?DUr+B}JkKCXs8?M#HCF@vKY~@4?#nn>tmpZi8^@E|J z)v6J2f8SH|>cx~sw}>LgA>J$1095Lhbn-=H*N5@N#|fY3z^~$SmaHC-i1ga^5l~#Z zbuXpOfc#M%>}Sv&I(SDQYl%W`jiTgRn0JA!|}RlN+oA&GL89MDU}TfO3Zxf)fCmBt^dntv|7h41?(s$S?f;xp&Uj|!yp)&A^t=nxrj|CpJO|WQ@%WEAg|Kqq7_b6C19qX zdJ1i%9ciYRwL`>>1>FH|M(R>^PU2+U;AH_T(~VT(k&5l^W5+V$1W`~;o!{7&tQ9)8 z6LCx8lmlaL^9LH6nCSfc?coqbcO;8Xe=aB9f~rz#lW`bKN^0a8Alpq=sz!$-%jVAy zN$uIObI!~{?{*x7=Y+!d_<@ldIzyVuO&0Q^qFLn) zc)f~Sq2iX)Qb!>p_b7Jr^6}fiL-6iQ{T%{oI;w30=qlBCyU67?Xvr>e0F4Iie>4w# z{`YIRx^k@}W`x2l@VdbQVCrYZ(q5o)x|Um&+JObwX~Lv;jC;p;1A)NBq4hoDddK+a z3HZsmLy7}e@&>+zh)w8(Fz3K%oBg;*eAU$~egOD(#p3_##q)!*kKD>bU6nbmG8;G03-2V9K z-AT}!#sYSc=E)wfHZtp45_Xg(uf;(Hiu_WU5ibK?T(ov1e>!v@)u;V___;BI zrX&eM$(Zq)BuR4VM9H<{3~LJn3YXJiG+j`dj^L58Wv1iA1o5$-aHOBWQ>uK60YVq^BL}i1&c_ z67P5)yS^LZ&UaB9f6j*SENM}fY)3Ee@2`~9e*bm9|GMxFbE^BVt96CNLzr%xSnNF( zE!_|rj<`tnUkic+p^_+o%w}%7|C#`SQGW#cuVsPM2$xD71lg3Ks*!khHD2qNsw#Bw z^8V{*^_b|al&ERI-~l$2`M^;YbivRThIO?;D&DCvNc%#@f1*684Dphk%T4NVv%%Kv z56t^u_TYF7v5l9BrChY>%{R(@IYTCw#$6Q*PPR0v-U21cHTf4uO3rFD03LaILis$| z)}vwHLD6%{$g@TJMD7~ug$@9}0@UPGgaZ7Sb@!4>{SiU`>@Xi9$S>z_)~pfk2o^?z zi&Nw9KL;bnf1@FOT@`glNdM{$h2OwxrU*2#v=O2=n7zSVHkb_h@6?ouJ30kpNn1^Q zd^YsJ?9jA2))CWjp_4>bZ$z6))q4)_lES-q=f}>S6P}-(nVW|0#16mResLN)Omsx7 z-`<2XhbFHkONwj=R7XSa!#~ci+ll0amc^lA`0qsXfA&sv??fN7cEL$(yfx}{Elcl8 z_pWsBN}rh8J84(?a~vWs! zqG0F{MNwz{62m%3#>niWqZ3dY&ct@h>y@WO@;)>wb3`8+^`TMMIsD>uHC`GTaeZub zg2eA*f1^G&%Ev~60!_2Dyu=!U$O4N{r(a&`1E@ZLS|1Va#J+QG$FAo*KR%w%*z}=Q zNj3MORUcaQ9Nw=w^)7b1#X51Z&zVu`@xDlZx%hc{_kzar2CS+Xf<)8zykC{*o$Ax8 z2(_c=F$nwZ554!?d(ZXM@4e@q!@K4^OTG8pe{lszpP&{*RyBDMqdey(bAriAytQa= z*M5(<_j-G;7kRxw6c>BWofgS^m-jRsf~$+r@yKC((Y;%40(*jvZ?$;5eDM+KhZm>k z9AVss&iHf{=Rex ze@N6c0~#t#Kf)4@5}rzXkkTP8y>tM?tbj z$Xn|ZFt@j%GYxNV8Hv$8F8JyCbx{=$cg0wae)U z_5Swaoau%0bcC}AW#`gmTW&_^j8MNS`bw9Tezq*}P}N16=6aQWcKwQT$Fpm|e~?5= z%Fg&%zj(EDyv^#R`Xf8ZW-G)AqNHjTkcx-{CSWyz6$*%}J_4u~aTP}ZrI!wXxHZy} zxk(*vHdqrhoO&~z4Lo<4EJ41+%kWg0c!6gnku9B9R4E5-BIo)CEK_nnFf@&)s(Eh} zy7p|*o>P_%V68Vl9p?b>AJ{L)f9w0t4)Y;Aw3m$?IJ!sNs)J!pNTOf8DHrrrTM0=M zWm6IH0gE{+A+d(Snnp4E-CKzhw-U`YqMcJCH4*;k`SI{0M2-ri5hB}Uu4e_y2c1x~;h zh~2m`(cilRy}f9yJ1`n#TSYk*?-kAVPSS5H1RRHqgjup3G?~bC!^!FA_#2YO6s&7E zia(+`+=ce^K7l%4ZAFsSd!*6YdEKoRJ6J<9MP4Zd@**@?-2{szp;`kiLP^&adpw^N z^9!`*kzcs_9P3M%(}&5Af8<&`@RkX|S)2knj%LF^ed%EFPK{HPN2$ygk-7~hnWk#V zY-txTE9-_Sl{jhl0Mt5DDSr~(RBeeq_)Df}#nbL&8icXKcs4T*{2^Y7Vn%lC#O@?r zsG7yD=c1>V9-+yru^bY9mZdodf#n2IszhS(&iY8qrk3(4`jIO4e}PvJ*Bh+Q{}{Sy z{WiM&7j)|p3n~^LQsHgS;$VLJ9r@;C^1=Bdqp$Y-2`vamP8gBDf@$_4Kkyy=eDrHN zc1jlVJCWY}hcHZ=y*UWtIGAkqZkRWi>%HnCO*L|U*yiP*HhDQwMLCp5_n1CpoT2B~ zVfh{O=h*c;+!zc0e;*+sR+1LEh`ANpk;S#dN@>=dyw^eSCHn#kAQ@rohEe<}KwLpy zMusx^YjHF2D026+3*-?$_(8LMEIY|xKP7(=J)J-}=U&XK_}4r16OF+TUPSUHEuPID zi9@DdVWpKN77w%Xig~pPs{u{pa8=0)`Mn|U=VUU@+^6sde<#mJqL2yZ{E1=mZ}wLz zaRdmA`l3Yblc2<`rB=M?x3QY2YbI9tYg)2GeN%REwRJeM!V@}E$*H2Qn8a<`2t)N- zsGb!=YgCvVU`t3{g-K$;Nf8Oz`ZfthGhAFULPp&kgtm*uq}d0@nug9p5xeSLBH|9& zoVP?)LIFmPf1&4*fK5V4x*byEFqo8`=EH-xZ8jqZQBAgT?%6*-uzRCrq7P4rniR@i zP*n?Ra(QN$Um=JBOLiM5q{H2SOc z1hg;#&zaEiQLKI&JCmu0l-W5m3%%QM5S|kX-{S{He{Sdui|D9PafZTbI-u#}(5tu< z=0mK}JdcVyp4F#qRNQU!i)VX7H2k+CSX+HAZP$8Qe*X7sm{76fYMnw&vnCJ)Nh$5e z0HO{g0CYUDIyJqnMm~vE&}ZSH-fP`Vr3c}pX?scUwH`46KRI_ui-aWCY9V5tGuOeL zOMa!$e|#JZRK;Mij(ZLVwJ%MW6GBmR)8xvL0?$b*uWez14py2V$#_-0yxs!v4seA8 zK*tUM;5o<%YH1TZE|3yfb+O}p#{ekYVQVYwpMx1Ltssjrp^pS1VxGQxPv0jF7AI0e z;l#`k376x~m|tct^MHOw7f?9-^gTv`;|Fo*e=y0u;Y+fKxZ20+OB?#qhQd2cU)qq9 z?5ffR0qDFg2@M5mNohmQnr>a%pt9W2ls2H)+JsQ0DbH&2Nf&fRNmgV46ux9tS=QtY zjwg=sY9^~M+NH8o`@+!4_Q^nOC|c&m`QRfZ=f3)6NS3a0z@TX>Qi-lD{j_5a2y5jf ze+Nb@16rDX7YBfG{f#S)>4@f@7VV)OMc;~c5{aTWMcXBew*LeQd^uL-OLev^uX8LX z6#Gx?L;LpKm!DM|3q0rr; zixi|g?Yu?eM&EjbwL~BaR88kQ=p5|6z2#9_n%y@w!W9a)c)i7GPb%W@t(`i@3@x&C z2k7+JlebI4d|@D+cH>T*CLgDJWN(}QvlXz3Z&U`glPq20x%v1ceD=%OC=W3DYUY@a84RnOi7ozYv+-pb#qG_-I>(d+| zBu+AUAQo3=wmkH!qSMVBf2nJLwFH1Fi@d~R6_nqZXlgnDGWK6_w}I% zpjM320TXp=ILy?WMa<8?|MvH%@3B4bTxRAwOjtHH$>WZf9G2ktxVKKZzW~z^YvsP2 zBG*kgT93%jS%&Ax_3u2VY#OjpsGim<+zZGNzv9-H7l*ZbHvUWjv7u5i%M@&dkdb>Z0&^wP;GR3ZWsF&bq5q@_+}r zylAXd0J1_}i;u4_f3Mkm`?gelTdKl4%&E4eDz#5a1hA?tm1s()hU71~S|`-qZc7EA zEGzm_cC1RVRpPbY5vk}^)ykuYL`?u32OG|1t5W@|wS0Q%0LWNlrRo6NjW%jal{42- z;;2y=ZCO@D-DGLbN~<*5^?lfml$_OQ04i&W0@Z;um1sCpf3DtZ?ji@qG0*>Tn|4zN zfN>973x7lqK091Hq8&xMsdf^HqTN)Bs6@5Q2t+983fwqC?6vGM^8jUrxFh20j=Cbd z8x}mblWa|;vn^7&bY;#xnT}DqXxm}6lX|&!Se=o!x3ulB1X%>C0BAZF@59N-r@=+i z!Sl^Mg3a~sf0Dlmw7nVRUyl37#M&-y%H?-{jRx~Fy&JqBT4 zqSxEj-UaH(w3Q1a^)687Qbnu|bwg81?QLXB1DbA`cqVgSr*cPU@9VTro?GhcY}NS* zH-2d7f2VOgWZlDg1+8?D_Ij97m&tt*roD8cdw2Ts1@2w=qLrq5D-OVj4x9SXc9{*{ zzOZNUeGr}??LGU~*6g_0?r@yC-5B`Fq754UH-o=6aaG;+M7E%)HSARFcH0vPNKll- zjax$~7ANL<*ROVxkF4zprITF6bNEM9>pelye^e8ir5-6fs|%1NrywlQS>NukcqhSJ zaw&(oWF?w(8oG9UC+SW_fJ$+?25d`_lV$={=TmW6$rQT6aRyOyWhjbwo&yS56cKCV zNG}J4r17FAT18sahk7h0h*GijWO``{iliza1t6Q+l5Wnu9bdfGjuI;d$&N#)>8j`W3{v7g`4DakX#1mLLLno-p?j}U zt4x;sSE(|yPaS2KFJ5iz@>S%}73Pi=OkOuYNgj^h+^wcvy=CK6po*eSp~Nat2qaEZ z1WKLInRc{vs#TUaXs9g4P9C>FG$cVQ$|F8`RZaii|$`i?G|7~-2yDmLaZ4BtjirI=90FXqeg>^Vd&uVa%|6|VzW}kziFJGzGpy2oxUaI<#mddefxd z9I0DmC3#gBcn*{{Fo`@qn#CvrVDcgl7rE7hlS&tJP!;cN0M&r}F(AiHG-`nKYYnes z!O|}3{24rsssoKLXp*{d#JXYDoRFPduklOt5AT06KYf1p;XPx%XFfvxe^2m_CS#b) z_3yv^9e(_H{Z5BB_%4Ok5P%L;T`n=JU|G7xStKV`N9!C}AqRARt~v-=O(EU;J@vXbdke^=^aiL%S}RR3XLwt-!sAIJT?FZ;UrPwJO!M39om5J`ok zRHiOOH(V)FA|uW@apF7InDp9sReEoB^>J>0HNT!_-Xxt4)qk#6XX8xGVJNd~I`3!m zX=-kzKi_}t&&``Z&IjH|`@-+Pei~%yRJ+6HdO)*u`2NoLohQ@rfBU=p{}`q-?{0Aa zRekmEW&$~kEDl)FNBa)P*Ymq{_Tp~ve%c!-6*l{q-{<|)^I_=&c=TX;)AwV=^?o|) zr`~w(^>2G0=c%Vp3D#<_H=p**_io0czIpm&s>VB*rB!jR=RA!FPJE}1>jhEk7Ifv# z_MBe~t@Fx1zE{3he|ImJa@i{%i!gvj^Iw8j9>zWb*eTvzOTuO#RkQtFnpZyYAr{0k zkTIta;INwT+Af|hv@LD7=SADno>w8ukquXGL3MuiCmQ?8WnCKJPG0uoCHL^BYXxM6 zx~2c@`J^!it7a)3`OLQD)6-9|R@$z9R~(bmD+5h)Y~lMNe@kMK=iq?g07f{8BE7?v zlqpiic}#*Tc5kD_;^GEC-zn4MTm!~kl&^dBt1Q*){#f)^`yx=5P(I@PluieUhcF_D z`MM0I;^UHuFOq5?t&{lkmiRW!4Il}o|4L_YIvS`?Ui)f%$In(***fmf6B!1T_ zONI0An5J=6f4HU6`G(WAjuKk0d-WU?KPL<)3|oqyLJSEld8RH`$Gb<#PGi6>aOd5- z!Dx`Zdv}y-XV>}t&eM|`^zH_~+wwOO0RH-QJ(;puC`ND03zZ0ctZwr zPJ_;Qc)%zufRy=6XfwF%X=EXl0bWtPh7k`LuiPUFf6D?tku0`*1As7rjOmo|4HzYi zXb{w%h#N2t%vQSVtlpasj#1cR92{+Z70VyKd-d|q^82@S zQPwv0tpj1ji?fRF)tegvr zViFJuC1h5D6o_RY!=!4BTD$P3t+{&VB0=6_f1f$}0XOb>wf@P&&uM?#v#8VAU`(&$ zrz20SoeU-mG^4S|yU()^0|)E@5|Jb{v@|G!SWxL#VOkY;ZCvFwFs(D?7Tf$fBM@SK z5ZdKawOg6b5jNd2)@WY6vwf9(y^K&qX&4AA1PdUEW0CjXZ`x%az#g+Sra|pRh5mfB zf6NkGllIbr)~^x)jmaWovL1aTC_rj^S^+pes68f-fV30{otu*Tg(_DP}$@F1a<$J1T2Ssg~(e>L0V z^-1zkY{eEgY{_8~`GUH*j4U#2tIH2H;|I2;s$4Ej<51&2K#yQuG+hTwj+q6Y8+H*Qa+jGzSi9JbeHLnWNLp$JMKXyc za)7|iO%~5gKWkDpx2LV8O%_LQUfK9Er&4bv`cYdZyf zqH~rN3U_L(0R#z^2I&mSwuq=tWQ1+s0}BI*5|h2LLAf;dXns=P!=V+gfBsKh!~+IC z=ag9iW)%C9L$Qa*JzDY_=P_k`%_c%P2CU>g*JH9mHk)E+HF2EclH;u2n-7niyjD0Z z9iGFR9c_X9eCq{2zWt;8{_V?Tk>D09^!4N0m*2g76TFo_zJBAy z!S`>x?_a%rExl4AoP#Q*e?Y>RF)NZsW58npt0C3qNZ!%`yrl$KTU3K3@T%E0W4$T6 z>QBE+veX2lhGV68bPtf;EU)7njdd4~a_g zu5QW`a$2cfhTYL;*tIL@vh@XhKjeWHn$1y|5Q!wt*U?j313PBe(O6K9?B@LkS~(?p zopyeR8-8F|KqeBq&{u*8lCW?CuIe_!!@Fff;QL8jIKj7PL~{!0 zu3n9H6h)L_O_{XZ^AIFHC8f5rhV6A;xm|7WT)0afi2C6nfB`3B=Y*x^;qB`B+Ca`I zAiOG>2$0 z*X0k2<*FIBa1H5P#>MwB${#ZOCDMzzbj@B(pKT~pn#SHQ(TeizpMU(X4k{Cd9PudD zOesq~LZMHiYM;Twa;06OPzf<|AYuR3$qE_{U zMJNP8e`vRXute!>%9c52Fox8Md>(4$Tv+pEg*75Ygeq-e972VZs%WE@wjtq?)%Hm_ zS=vTgM$L`g5;wbZ51mH8zvFc4P5;RG(3@mS=V+#|wgaf3kb_YDzf+A5$cw7RG}}_K zJ1+L`bw-eoC|U-Vap}T{N3{*8NH8aM&qSOce}R}~19OhTpjI@XWE4HLarq~0ybXKP z;+T_#6{pvMKH=pio%Kd8j!}(^;=rkvw>poFE23uF#iiZ3)4}Y=huO7kuY=h@MAXNd z`u3d<%m#iOLE{5H{K~m7n9ULheMT&|HVi58lalwpk+#h+`($a`!R*C99n5}IJ~%>a ze+WXE5Yv0HQ-@CptpQ?GyD7G3#DOqty}Y16`VyMhTQ?Qb9ZE-) zRPEX!U73bNjv9q0LBxSMlVp>GSjN{Te~nW8x?y5z!kuZ7|M>V#lUladnI<>{C=ua? zG>P*$evxt-5&AeQ=h93QnD~I3O6W3eBg8pyp>4BiaDGazLKQ_X!n1zrEW(pVF2^AQ6%$e=g~* zTbXQoqkYS=UZ43j}YBFL@QE&#_0y?|;(`Bu@aorhVd7-azK z)6525Pqzg1(wm#KpUv;THfbX3om&~jSM$-n#`YrCR{#8Ov~~M0-nE)hVQSl_9&P`| zb@TeU_ovjGr1PJ>VXE`%GJP6|e@PeB=i;^vu>KV$ZaCA%`F=y~O{e$&sBkG>VR{g)fyL3&02_lBOuFEhFlIW_B3N6Q#XB&=1F5D>jj~Bu2x^>>Pygtqq_|MN*zt%dU z)m_k55m*xHa{1im1%5Z~fA{Wg$Ft1)R&W3u-rx4L@x0aU-ERh0w^=rsef#3Yb^7VK zT3OE~w}a>X@$kj)%QL(6`}RZMf^Dgymh0QDdi}n3k?8uwbmZL)KCJtMwi#BHcBOQX z8rp3xp4^&Qd%mzg9^DK+%uO+|QlVa^NU8p|^Ep1J?+-d}r`cC7PcPd&Q+@I^8BY%I}xY7%s3Hs?RP)TvQ{4RW)$JCr@+|9iQ4E3*Tu$9CP9%n1aoS=G59kSFA`zUem4Js4i$hrr zeRXxaohPg-C^#S=e@v{g=Kv+3lnIAmLnNeAh=;G%^aOW)uA8JUyFBSt^xR<)aTxiGe?iL_0Rasd6xE&YamqoK zM2QyXEU!!rGtK$P8;yrm61Zp!!2>^xcPJ>?p#Z6?WIjQ|qrQ@Paj_&yG$xS@>}9=W zSX@E3CEU0K*Tw<_2=4B|-Q8US!D+m)V8J1{d$8bc!QH)acXu7`d%th)Gc)z))Kh2w zIaRx=)~dbFDzoE>`HL{zZ;7Gq-l9xqmC{o!)CO$!paz+FpV)z@ zpL)8rM2P~j!ongkcR`A0IxZ2LV4JIpQfWqzKMepHXG5Xb+jV&3!l1+i2V?yQLZv)$ z2&FHwvOY7j_!DNgI|;M}YXG3U|Hh+-LDSB?urs$ww_3XYTIrBOu1p3O^%Hpr>%XpL zT-HziVFil$V7ezz)k~NOubhua;(=D-o}CHrg-N2gYmaN|swuv9G#myHOjwj?LsZ3s ztWcvU1wl*V?sg{X${OvhJkxi#!buoZ>K1)=kJvwaISUNt39Go0`lgKtu(9aP?^Ykg zmXt6jm65gRD&)m=;glaTF^(?KBeJ|5@9CO-a(l7-eNv-Y%#|8F!0lYhn|*$FwA90` zrU_)xQ^g!H%CMZnH>1JEm zk98DHN?0hmfoElF4b2Cr)=bX(5=l3TV}q0OBfAm?$v|_wu(^@I9}zC;D3tY^^o4Dy z*~iC7Wur!)c}~BreO)gK3<+=B73QdlMEr!+^So^qQU^d>~+X*!a~M1v$hx| zjp9sri)v`tUxZ~$`8VO&#kYW!|LJU3>7Xr7w|B4s+hQ{rhm3sqj1y)j%-jHUDZUga ziStu0^wW##H_p34X`ck<`k81vR-BX$#ntG&i27>M2+H211}a1<^_}C!%pE=2GBxtY zEZ!569HG5%0&rscVb!pxM~w8!jrBWZrmEZ1Cm);AHVDCugs9&ygh#2`AP-R+kD#-(F(Y!pfdHcjT$1%8>yaD?zH=#6%g%B<}l0Z7el4hoJ;aVqP?DYrwU~X3RbcZTBatC-Ay{Iie2^;Qo#i) z)SPAFK-iaxA%L)Cui~-k3If#5+}=EvSg_`jv;~;I+<6~q%$E`iPs-g6!DZCEpm9bm z4dsgnjjuNwhcQ$U75?;m0xi?;uWFIE?F0|cc~cuF$$d@LP(x3$1^7;fx?^ikWD_$j z81~BV&`*)+Is${oS;9xhUXOo?xPESgk{XVjZ!gr?Gp{?efIS}PO-B9+(97tfBLOsfuJ&YuhQuZ|HN5T8))_!dJsF z`Uq8urixl#;V3wW?%E_|07|gvY++8d9!cm;ah`U74;lk|S`8%<&_+WIV!DIpQf??2 zdjTUI{M#7@Y7dZ?!^Q#JqS43wl^mkkUYlLmBw$I|h$dxt{&(B62>mzBQ#)M{E6E)^ z=qaoD&8f0{*ON9o3a zMqeLWM-L``fPsLf1079b1v>l4x_ep?G=?ew`eqtZPyxk|KDAJ7sNdG;qa(N9dh7L` zk|W-}m;!mG5b15mpLlTDJ161Iz=vh$_o*-g{>;fRO3ita8zeG6{js*wSv9M%toito z>;%n!Rz>YCB)jV7%<9*bpB*A?EV%hB^Ffd~ zq)T=yp+xgwwbA-|9{GO3{UDAALeIbC;AA}bdmFBM=(^YbkQgo0K3Um|f4-*BapM*< z0XjG2DgT^7hDC7}pTDyE&6O9!o)?2Bj9etW)L^1mK@ho{jM9L^mKDC(cR=9~nm|ni zh8}I4l?s!_CLJ8zkhz~T=dv+7|HLsGXeV&K?lmEdQbP=A8m(hNCv^AgA}}@%YB`%< z{O80T4TG0ASg8n|!LHKX!x_or!I4QFPHI-wFhC^$>onJZ75`Axun!Z*VLsAZFWBW^ zJoKU(^?NNFtQNYspjv#bS3!a~jJ`yEo9ZNrr60N3!VOM4e7Vq>e`W#JzcO4l3%Rnt zFCi@8b432-R`6yTn!p(rhaFrqJx=QETUO}md~)kK$1>pG$o}980q^lK76ye%+JMWD zuh9Dm`^3+blzZagJ`OyeTh|VmpSyS#HjOv%8oeh_(PUhOBvWGiD)W z9`6?y7IRzcHvktNlr({KFCk&?mw&Te*K?CBA(W-Kp+}j5b_~2Na>BHC2F2{>mXn<% z2N$A-2Q7ceXNm~*EAZfz0nMw8f89lNdY9{RY{4|z`p!nmT>1QEyO$M7RHP%e+K0v# zws!uPRte4uFJWI7nZq16B%Ez%7oZY(B;9lW0)&!kZ0l#I8P40#ZVeLwOboVrt20GWBhS$^2=GjA-=H zP@B{%b;`%4xS@dwdm7ZFWhFVGY1_lb!N6aU;72TIU>LQ?)^;FbCd?7J0#ry9KwI~p z)6TO$MrRs|LwB*=B=B}AyyF>ZxdN)lhq4+&D)3hEt~w}Sd5im6di{UuoCcY!62`fE$71}zwI z%REoRNCPc*wrsjH5D$b6SOoQ%J7B%d_E zt&^0e=1xSJJ8KnESJqaGq;5>W{&{(zXx8@Obz!#yd>UCXz=YNf-YANpezC0byBz!hfyB%Bav_%`-};HOCnV)HeVm4TgAFHA2J zODHfTPR=AY(i2+KYCQ2{(KQRv)ORLYPTQhQ?OM{{Xn(i$w@;{{d(C@fMGZiL`wek3 zwxB`#7n_NYho|6>D0pue)uwYS13*JhFN#=f@h-T{(1Uv{0tHPet=&KZw!qgnyY-hs zE2YUX#YP+lZW+qmTP(?KeSDQA{=!U#=4G`IhV;=6-^(q&*BkwcQL6+Nc`e|18KEHLQl*Gt)`utF%=@*IhKU<1WF^kL-UpK;Q$mM91;zhFVxuX9KP^RYev z^=ywhj#<(J)9v?p7BKe`AQbpKZYZ6d8Y~a-oqHrlHAz~pxEIrf{1|@-qd{sU)Pg~x z#TtTdB?BqO2Vdmyz}hq}L3sMC~s;;+otRYVWWC)6?290%0J+@qEx@}c8 zsIM{yNelCgz?PQpYFRlMMi12ZKS@mp=&>8vd-V%l*Qj2<=lG4VE z1xS2=k;Gelk}Hs{zMtGxvh4Nprk^#f=ZTs9qyvAbquN8+_)bp!l2F$Knbo^VxCFQC zU<;a%UuN-JOTqJsrs(``j@;6Qx0~y{fx_8b+9$|r0ykyQyQYj3DMT>|q?IRx0Fp?L)=iL?ARA1Zhz)llT&%Tkhd(3)It` z!%W7~g9{x4r4ko}jP`=55t$>Lf zfM!bgSY0Kre_uaC4EU?VkB>v1EgUV2bYqq|6^L;_7J94t;n`&L^(&Jx7I!ri12G8sv zk*Ar%TKar(@4Iiuu8!;_A97X&XZ4m^(&hSNmyYH9#Z;=1HPT#6sy zDbBUm_4ZCWC;Ik6cZIVbg$ZrdN>+ss&6cmDSFN|2EmTgAe7eYbIuTUA5K*{NDi97X zv?f-AKo4r(q8UJ;AIsRbGK+2TWgw<0*-(9!_>`B5ngk8x2r=EUqne{fhD+C}_`X6c z`c^w2ybX~#6i|N10 zLvmyKipDM6)RxWD=0|IHkiB=l=^mT+qC}$~!Z^8mBK;F_Y4_U%9?Yd*51?t@{2$ zK$pL^;A@Mu^Hy5kuVgG)JAZI43sUSiCK9xk(}UPeSQ@DCYt3bT*1V-j$bxhUJ~2Zf z3TAb`92Qddi{1E~hXnMWLy=~#I>Jz~ON+)_T)DMs0^`G}sMEWTh?)amyzx`_D(#Su z@M+XjKCDLsnLm|+Cas1}eHMm_Gp2* zMoVGv1;e;?d~TnWO0(3Xw#Mblw#*VtG3$n;edkSIgFPV`InEvf-{zk^$Rg5xtL8zY zJ9-1rhmsPUqJ7eLH{%f%tNnTpm#frva|$*IzfqOQiUj=BoJfqaK`{O9J%9|yshc8O zk4#-;#vhAbCe}$bUKc#Cd7hGso4gXDSxx~b>VSKQ`&`Mt=;2c}wFUlUXYRk%duF48 zP6Q)k_MS^8ko6(m0QEB1sPv~oBekB=E+mTcxK#YFoPU%6Mnub?s*-JtD0EuvS@e-j zW+aK70OFB$=6aJg!fuF|G?tnyS0)Rjtt8E9Fjc09i$|PW69Jri?hJjSS$0UCVS=>5 zN6^H_F$@z8)2TbWi%r%%-|+pzb6CabnVL~6v~`xQT$`YSQ?NEdlDaIm{>k^3OEhS{%*TT=x8&qM%Rv;r$Z zgqxs}Ue?Hp6K@7MOefm*yt#N+H!=*)N5O&o}aq05RFmVqkwlJ39{MnJ@NiC zG&xK~PK-!;eyTX9P-F=mY``qR_K49x&Gyw;9>QPV1&50qbXQZ2GU{WN5X8Y z)5`sHtL7*>$`q)}FtW|ouwm6S>f=Ql+PYEZed2hFpNGmwUn85b^43fezf^Lscir?{ z5WKa>#A&>sRxG+VdJfV#^36bRli?#NO668j1vj>_-g-R-KA$dh-dff=83`Bd#EyEu z8Wd-{Hv1lWIW1P)eVx}MCOPs#p4FhAkQ>QsldQVHHrDKsoc(Fm-4$-Na=2|5-&I&` z&WMz*q7@}eGj+@+TI?S&_(K2@Zd1j&W{$|Fm63pd)(vrXu70ZVnSai{wiqgh#B5Eu z9}HB5XzZ4wrkh-+GHz%1SZXaHrejjFp`8X5Ld_1C=V{I^DRxQ)jgeuJE6NwzOVEkK zRvogr4I(AtSZU15KJc|ZiHI%4xct=MB%F)ARpVpBylJ6=;Gks7bAC~jYT>*sKn&Bm zY-sV#pLDcM)B3N_Z;rc;8`*t{2oqv8IL54jeB6nP4F6G<^?8!2d?sLpQG^M}42P;( zLT?yRBT?t4Goejuu~M#B2g#Kn;#K_~?|&buu4mIT*ZYJz)U0vP&mY^&Y}%@ZVk?>* zxMP>XTMorR5#8!WihY)l*}?KT!qF_Q%2Hm&*YspOX=tz%Q5O9vr_7#4$^ z)07S%2hSZPj7Nfz**oaOeiF}GG#>+ni;IHJCE4Fl*n(Lk*%0Nu7Zs2TKNdMlpRv;R zDim`6c;HViO@Q>EHhx&+B)B0nlInI2YC~!WV_Lxz|B`T^M2a##_UC;6eof`F=Q@FK z%*6B3se7AM94R%l9wsw{Ht;kVU!yfLm>0{D}tqyz0RN@N@oYNES!kn6968&_$* z8>-xi0hi6@@KE75S1qkydKN9J-1u@={W?tQ3CDSMmCQ+Z*5 z%n+i!=hIb*aIfatwd#O%U+bp<0;8fo-j6XF-8j$rG56sH1Z~s=9NT)^vT`~3vVOJI7O`pj*1}LbYUaYmF8J|JGfRwT3brQI#$b>mruUgcAp|YA?LQQQy6X6t)l@w38+|smO|;8?Rn z*XrK`3X0bpD(c8gUF^+Kqc%-bwPd-rLqtz^t828J8|zzsDl}p#Zu0*_Bt3%!*@j%b zViV3pvL8ix_{D-H_cT-O>0Lh3tGMS6Y}d37jOwCtkqAoS!p*E@_UGK~9J;0k3CCXx zEDVmIpC)WvICe*1WhwLazrN#KUEOINozz(Org={Q-dT)i|YCb&f4Y1)oL+_z* z?-qauT#k2S0%y1NQh6C~SZ-em3o*)?QaffjvpUapoLDf;y1Y*FIz0@staO{4^xx@& znT>srEZzm~i=u2LqWao;*mJP zt+s&fa=sNT!}Wu@-UP;QNsnVMI+6rt@+Z=L6NZQ{#G9$ud5HT=J($@DIuT!xP*b}w z&)|8K`USvjx5dSX=vUz?j*1m=0IHJBlO(1)B3;s4G~64f(Y2& zm?>*-a*!E^bJm7aupWk(V4mN0Fh6kx)|r>0za{QH!HBZab7ivAjerovp%1!8$O8vf z6UTZK&^A3gE;5H2Ri6dD;?#e}KkqXtEGld%HHKlgvJnENI9ikqhPO@Fyi#mU>;|5B zF9q0|F?dwQH<8-hZzE5T^5zeb!g_;MSdL%do(K>-ImeTvpCOOtOAd)LhjZWq^gA2U zgq-MXK6GiX#I=Gs$BoLl_^1-^(J{?k@V7zI6021z;7Yzv=YILg>!KE3q+7BLyy9$}}vk>F6j@Cx2Q({*^#id!FTI|3u5 zN(egl)~uzfGBG`a65Kk?tbXLxq+VtQZmJ7PHVmwyRBBR8&efE%HK|T?ZDe?e)C*60>w0o4=0QFf{h$v-xLM*rUcc z+>1Qf$M|O+SH6a40BnRY#|loA>Vwv>DK zk4uitggkqJ{6HS;goeLKM#CyNrfu2Hgi(Md>7x7RxmCuTd)ngAX^K?xZJRbdXl9hX zuL;XiHEMmqW94guPuwdMbI?GT8V%_-M>y_TJ6uZf@-R|yw999r@CU2XrANX0(@sEq zG)`@{ryCBkZ}LIu3Jd^XDVgv&nht!9o-Y$ne!!BW7h18}&M;NYB7;NuHTwA&M7i{* z4OW7L%#{fZOB~0dgFKt!DnpFc^ZBf!5)V{)EVr)z^(K(=)51;%O?vvs&d5HxgM7__ z*gTHTE)gj8L_fQ&_35#=5wbg9@#aq6Mg0s{!tq)&&YYltc*>^m?6ZAT-U+^__`b2V z406NUsB4uuE`Ppn@J)Db853=$D`PuRl?;=;V_S_WdAMyEUG>ghpRYtRd#-cArFkk^ zPqYUsL*Bxc=Rp#X$CX>b$l}Vc?R@m<2n2MWk>)Jc9@qZ%z@b>K=c^#6sj(#;9i{sV zDEJFvDL1zYEA*Ujs#^0d(1L%>xXuPC>WsQ(Eu^M?GYU3!iAUylR0wU*8RXLGOr>v` z;iDqmalh><8Bgw9<>(mE#H9(C!#8f~qY-!szC;hLJ~$hAGC>@|l@H5nJH8+2bLS?E%enU zrj}fsj(QtoJZi^jFo_U1&N2h&+4+nfJ%PCu)i1upQjou5_ozgwxc+pHLb%X|kMzbk z%81KCgE&3db{K~>BYlb{Oqj{<2d%{lR>6DVP4O11$Dih}`fAY|+ksl5$o4e2h(b&r z$c?QWfk6H5rU_c&^uu7(r^Sbz)Wl#N+BhHcs}0=>T+#fXD1|k)?%zd8WRFcd0sQ%a zGC!*oV6SE_W7T~-?*?U;W$igq^`Xy1#W_~v?Dx2;HyBf56SsPKVSMQ*t7Xk%Z{lyV zbt7QeRUN~WFn#ndB3LY7cbnG4;n8)fih{L6Y((s?blFRrG*Q4qodS>h@WuKV(qw4Q zxWJ4oh=`sgBd4Wo;S{kISE!|=jOpTsOd#*L9oh)F!=x-N$3WS|MK2*85aQ6BC-`M~ zd$5|6NP^Xb=fM@Fb==>m`-t)n7UAK5K_t#pFq#pfPz}ESjV_W1jgVcmf+72lW=^bo zuDk@&ERb^m|00-mP#EM8pk~r>;RQ`e)odQ|{RYn}cY*^`bMv^9S>}BxlhQr} z@|hIS2k(GXtgGyU#L4ABSD%EDN7%M&me3d|-Ot;DfAu96?CwfeIH@li)LQ(PS|~5c z$pUAy2@FDenJ1(`dnD|R*=H>&gzcCz5r?1P>6Pln&{z2JC8)8NZm2@?qWav!l#1c< z;eP!uKaU3S3QInrkvL!DDZI{lNDWhG3wlTE*-Hax^#-C}|2+G0{XB5VP)67JdL3g# zUB3hlZGJ-kuSqT)KL8CEltq@}U5oRZ8VW4e!-CCgs$4SHc9Fj5X#2 zhKcEn*uM>9Q*XbNv-lnsJn*TP*vLI)`}=EivS%L#lKvl(fMl+G{%;ow0NAS?NoIrs zN6e5NLQC|;njV1|FTD3^5 zu1@$T>T1TP14DqKcORpC3i(gZRr=Hv^}6xpB!r0%>fbe%h}KeoUpTyyGo8n0aKzvK zxSzXG8!%r$DyR9#p_Ep&<6FRpOietlS@z#+je zLkQZ%J)t9mocMpXYXAV}|F`_l(=90BIpZ62P-uc+CMEHIX8ebXy+Qvs1^pjW*@y(+ fObX)v?SmhCKgR#O{iwY}CbVUKfya;iuh#zsr)PgG diff --git a/blog-app/blogapp/__init__.py b/blog-app/blogapp/__init__.py index 75d94a1..efd6fcf 100644 --- a/blog-app/blogapp/__init__.py +++ b/blog-app/blogapp/__init__.py @@ -13,6 +13,6 @@ db = SQLAlchemy(app) bcrypt = Bcrypt(app) login_manager = LoginManager(app) login_manager.login_view = 'login' -# login_manager.login_message_category = 'info' bootstrap class + from blogapp import routes diff --git a/blog-app/blogapp/forms.py b/blog-app/blogapp/forms.py index 16d0797..9bcb4bd 100644 --- a/blog-app/blogapp/forms.py +++ b/blog-app/blogapp/forms.py @@ -1,4 +1,6 @@ from flask_wtf import FlaskForm +from flask_wtf.file import FileField, FileAllowed +from flask_login import current_user #type: ignore from wtforms import StringField, PasswordField, SubmitField, BooleanField from wtforms.validators import DataRequired, Length, Email, EqualTo, ValidationError from blogapp.models import User @@ -6,7 +8,7 @@ from blogapp.models import User class RegistrationForm(FlaskForm): username = StringField('Username', - validators=[DataRequired(), Length(min=2, max=20)]) + validators=[DataRequired(), Length(min=4, max=20)]) email = StringField('Email', validators=[DataRequired(), Email()]) @@ -31,4 +33,25 @@ class LoginForm(FlaskForm): password = PasswordField('Password' , validators=[DataRequired()]) remember = BooleanField('Remember Me') - submit =SubmitField('Login') \ No newline at end of file + submit =SubmitField('Login') + +class UpdateAccountForm(FlaskForm): + username = StringField('Username', + validators=[DataRequired(), Length(min=4, max=20)]) + email = StringField('Email', + validators=[DataRequired(), Email()]) + + picture = FileField('Update Profile Picture', validators=[FileAllowed(['jpg','png','jpeg'])]) + submit =SubmitField('Update') + + def validate_username(self, username): + if username.data != current_user.username: + user = User.query.filter_by(username=username.data).first() + if user: + raise ValidationError('That username is taken. Please choose a different one') + + def validate_email(self, email): + if email.data != current_user.email: + user = User.query.filter_by(email=email.data).first() + if user: + raise ValidationError('That email is taken. Please choose a different one') diff --git a/blog-app/blogapp/models.py b/blog-app/blogapp/models.py index 5677c70..8d44b3f 100644 --- a/blog-app/blogapp/models.py +++ b/blog-app/blogapp/models.py @@ -11,7 +11,7 @@ class User(db.Model, UserMixin): username = db.Column(db.String(20), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) image_file = db.Column(db.String(20), nullable=False, - default='default.jpg') + default='default.svg') password = db.Column(db.String(60), nullable=False) posts = db.relationship('Post', backref='author', lazy=True) diff --git a/blog-app/blogapp/routes.py b/blog-app/blogapp/routes.py index 2a621c4..ae184e8 100644 --- a/blog-app/blogapp/routes.py +++ b/blog-app/blogapp/routes.py @@ -1,6 +1,9 @@ +import os +import secrets +from PIL import Image #type: ignore from flask import render_template, url_for, flash, redirect, request from blogapp import app, db, bcrypt -from blogapp.forms import RegistrationForm, LoginForm +from blogapp.forms import RegistrationForm, LoginForm, UpdateAccountForm from blogapp.models import User, Post from flask_login import login_user, current_user, logout_user, login_required # type: ignore @@ -65,7 +68,33 @@ def logout(): logout_user() return redirect(url_for('home')) -@app.route("/account") +def save_picture(form_picture): + random_hex = secrets.token_hex(8) + _, f_ext = os.path.splitext(form_picture.filename) + picture_fn = random_hex + f_ext + picture_path = os.path.join(app.root_path, 'static/profil_pics', picture_fn) + output_size = (125,125) + i = Image.open(form_picture) + i.thumbnail(output_size) + i.save(picture_path) + return picture_fn + +@app.route("/account", methods=['GET', 'POST']) @login_required def account(): - return render_template('account.html', title='account', pagetitle=pagetitle) \ No newline at end of file + form = UpdateAccountForm() + if form.validate_on_submit(): + if form.picture.data: + picture_file = save_picture(form.picture.data) + current_user.image_file = picture_file + current_user.username = form.username.data + current_user.email = form.email.data + db.session.commit() + flash('Your account has been updated') + return redirect(url_for('account')) + elif request.method == 'GET': + form.username.data = current_user.username + form.email.data = current_user.email + image_file = url_for('static', filename='profil_pics/' + current_user.image_file) + return render_template('account.html', title='account', pagetitle=pagetitle, + image_file=image_file, form=form) \ No newline at end of file diff --git a/blog-app/blogapp/static/main.css b/blog-app/blogapp/static/main.css index eb75506..2790656 100644 --- a/blog-app/blogapp/static/main.css +++ b/blog-app/blogapp/static/main.css @@ -1,3 +1,9 @@ .invalid { color:red; +} + +.round-image{ + width: 100px; + height:100px; + border-radius: 50%; } \ No newline at end of file diff --git a/blog-app/blogapp/static/profil_pics/default.svg b/blog-app/blogapp/static/profil_pics/default.svg new file mode 100644 index 0000000..b243d79 --- /dev/null +++ b/blog-app/blogapp/static/profil_pics/default.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/blog-app/blogapp/static/profil_pics/f49fd8e7ae9e59c8.jpeg b/blog-app/blogapp/static/profil_pics/f49fd8e7ae9e59c8.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..b1ff4bf54847105d2b0573b3dfe1ed384540b5fa GIT binary patch literal 4371 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 literal 0 HcmV?d00001 diff --git a/blog-app/blogapp/templates/account.html b/blog-app/blogapp/templates/account.html index 4b8de3d..74cd7ea 100644 --- a/blog-app/blogapp/templates/account.html +++ b/blog-app/blogapp/templates/account.html @@ -2,6 +2,59 @@ {% block content %} + +

Welcome {{ current_user.username }}

+
+
+ {{ form.hidden_tag() }} +
+
+ Account Info +
+ {{ form.username.label() }} + {% if form.username.errors %} + {{ form.username()}} +
+ {% for error in form.username.errors %} + {{ error }} + {% endfor %} +
+ {% else %} + {{ form.username() }} + {% endif %} +
+
+
+ {{ form.email.label() }} + {% if form.email.errors %} + {{ form.email() }} +
+ {% for error in form.email.errors %} + {{ error }} + {% endfor %} +
+ {% else %} + {{ form.email() }} + {% endif %} +
+
+
+ {{ form.picture.label() }} + {{ form.picture() }} + {% if form.picture.errors %} + {% for error in form.picture.errors %} +
{{ error }}
+ {% endfor %} + {% endif %} +
+ +
+
+ {{ form.submit() }} +
+
+
+ {% endblock content %} \ No newline at end of file diff --git a/blog-app/blogapp/templates/login.html b/blog-app/blogapp/templates/login.html index d9d19c1..db33905 100644 --- a/blog-app/blogapp/templates/login.html +++ b/blog-app/blogapp/templates/login.html @@ -5,6 +5,7 @@
{{ form.hidden_tag() }} +
Login
diff --git a/blog-app/blogapp/templates/register.html b/blog-app/blogapp/templates/register.html index 4e4017f..64e136b 100644 --- a/blog-app/blogapp/templates/register.html +++ b/blog-app/blogapp/templates/register.html @@ -5,6 +5,7 @@
{{ form.hidden_tag() }} +
Join Today
diff --git a/blog-app/instance/blogsite.db b/blog-app/instance/blogsite.db index 893a6ec2fda8184b378862b7482d6a189d98fd75..9a35935b0c1db37b72fb174ecf568ff27a938b1c 100644 GIT binary patch delta 370 zcmZozz}T>Wae}m@)Q zrn!b*QIYw{;Z6bm;i<(=g?agUuDOl@sUH3w;T1U+Gnfme2pKNrxuO#JT{_&E)xnD4BD|o06aa@N3y@?6VkV#sZ}Wae}lU3j+fKD-go~(?lI(MwX2U%lO&M82IP$n{5_U(BiL8V`68J)>m$1 z%}FdRO3f>QQV!|4iJ3Wi$@#e{scDI&IVE~o1?ehANh*d$Dpl@L5lJDgu0}qdelA%d z`H@~O`4#?_CXR`|seWO}9)?vOrC}+lS;i%isevU?KBfM_DWwUF>)0}BF* zT%1f@+|0OuUS;Bc!@&QB|Ho!Uhx`1B4BX7pj8Gpju``Quf-Ht8yTQPJgZ~{c49@WD di8AZMR3ZG$B*?4@R*w+k1%;&m*yxE9qye#CYV803