From a4890a4d2591008fa0d15a68974cfacb5013361c Mon Sep 17 00:00:00 2001 From: jinyaqiu Date: Tue, 19 Aug 2025 16:32:26 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=9B=BE=E7=89=87=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E4=BA=92=E8=8E=B7=E5=8F=96url?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 119657 -> 119683 bytes wake/View/Components/Upload/Avatar.swift | 207 ++++++++-- wake/View/Components/Upload/Upload.swift | 354 ------------------ 3 files changed, 166 insertions(+), 395 deletions(-) diff --git a/wake.xcodeproj/project.xcworkspace/xcuserdata/elliwood.xcuserdatad/UserInterfaceState.xcuserstate b/wake.xcodeproj/project.xcworkspace/xcuserdata/elliwood.xcuserdatad/UserInterfaceState.xcuserstate index 145f50a500155887163755621b61f1598ab4d18a..3ac497c8595ec5c413042f9fef20165b2b820b3f 100644 GIT binary patch literal 119683 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 mk!9OXjKK_TcVqW${r_S9`%khY|L?!^`u}r zot%7xK@4VChGTd}#|VsJe4E+9s!&Nq`Ghw4RfRK3;M?dn)fJWF+f)?H3>H?0Yz$hw zHqT-nkvlXvFIbcoCVG|8Gvb)s>ip`Uf*!PrZpO$+jGOT=UM7J_WRjRB6kUd{LD!<|(DmpB zv2CoU1$wji#DTs(S7KC^Z?q5o< zIQj&AiatYMqi@j9=oj=Wwqpl&Vi$H}5BB01?8AN>ivzeL?u0wz1e}O_tX$DJlmP=#`a?SvT1B4o5c=iN3tdCOm-Gq%9gR^Yz14%Ucy$f zA$AUXIeR606}ybRk-dps&fdnZV((<{V%M;1*?ZVc>}K{}_CfX`_F;A#yN7+2eV#qQ zzRJGFzQw-B9%DadPq5#!Kd?Wte{c+kILzrd183rrxfCvy>%w*Ax^dmP9$ZhZ7uTD+ zi0i}kal^PAZX`E`8_P}PCUJS(G_HsXawXhMuAHmjLR>XBmz&4k#4YD;=5FC` z>BS#BTq9Jil)i95o*#=XwH!M(#B z<&JZoaG!EtaNlyLxZk+b-0$2O?hl^f4ZM+;c$v5IZr;bY;9K(@_>O#cz6alv@5T4# z2k_~92A{KVK98Tq7x6Rr626Qt=R}xA80Z z)%+U1j$hAj=I`b2@LTzv{7d`+{viJ{f0%!Re}{jU|B(NPKgNH?pWr{& zF*;7i>qMPFXVRHTx`3{guC=b6uD!0aE<7{MSI1xb(vlVB5^f=_56 z#0hPLRH3`jL%2xjBlH*2giK+eFhm$C6beN`P$(9r3p0cgVWu!kC>6?tON6V);eeZu|1v%)^%Ibpx>yzqkXqVSS%KsYG8EF2cz z7CsV=2_Fkz3SS973%>}z3a5lKdaO6-jr!L5Hu`vdTYWoydwmCeM|~%KXMKV`Mc-53 zU!SHQpdY3mt{GSl{^fUA&dZJ&Xze0bd{wn=q{nh#<`lb47^w;W_>2K5D zrC+08tKY1@SAU=We*MGxE&8YQJN5hY&*_iqKhS@u|44sK|FQnK{uBMD`p@(y^k3a|U@#fX2D`yw@EE*?SVO?j%Fx=-&d}b_*^ppJF{B#08+sTnGW0R@ zH>4Rd4Fe5B3_}gsh8)9a!x+N^!$iYWL!P0~P-K{4C^3{7$_-V9kYSEtuHi<*O@`%$ zn+>-ZZZ+IySYcRcSY^1~aF=0&;aN7@jx0VED*z%O zxWTy5c(?H$<0j)~;{(Pm#;1%sjk}D`8TT6x84nwe7+*8KWqi+g-1v#{jPVbNk&uKX zR^lXH(n*4(mn6w9IV7hPD+Qz$Qah==)IsVZb(OkF-KE~r#Zo_MkTh7DCgn>7QlV5N z1*KwXx->&7k!DKeQjN4gx?EZ)T`et3 zUnyTDFP5*Cm&i-y>*ZVITjks2yW}U%kax+?$@}FGwW3?`#VGRY>Z$!Ur;1xzhWai*504yKN# z0j6|QhAGoD&@{+2*py`&Vj5~1X38;*GmSS*Fy)&HOogUdrczUxsnRsxbgAhw(*hGQ zU1eHqy1}%}bhqgq(yji|I+zQ>LA!eWvG3`%Q;ThfPOJ zubJL5y=OXZ`o#39=`+&_(|4wmW`o&imdvu*WHy^EW~(Nw%a|QZ3yreJvMT z`dJ2923xW$BQ2vWxt1xGsg^v;G)s|XhNZ+Z(^6##S+2EQXSv>TgJqfJM$1i><(8W* zw^(kqtg@`N++*2f*=%{tvcwN2_*2}C5te0CCS`{m?F0x)>z1n(%b(wXA zb)|Kcwa&WUy1}~9y4m`Gb*uGp>o)6d>mKVn)_1M%S>LxFwSHjz(E5?}nDt}paqB16 z&#m8CPg+k|f3u#paW>wjvsr9bo6TmoxotjMCtGJ*f-TXOWJ|WC*m~J|+xpwmY+1G; zwgOwBt;iO%72BrUX4pz>Gi|eMrM61j9NR*hVk5StwrgzH+HSSoW?NxfX}iO=)^?9= zlWmV}ukC5uGqz`K`)tqI_S>Gfy7o{bGARdw=^7`%wEZ`*8b6`xyHa z`&4_LeY$;yU9l7UBKsBgEA3a=7u&D4FR?GRUt_<)eyja9`(5@m_OS%1091LLmi_W6CINrlO08lprgW3>A1vE z<(Tc5?^xux!m-+MhvQDiU5+)5wT^X;T1TB@y<>x8lj9-BHph0y4#!@{(~bjt(dx^8kUcirq-;acsw z!?oVE!L`w~)3wXB+qK8F*Y&jP8P~I}eXi$R`&}=&4!hoQz3Y0ud>s!}%u9L3s zT|c{ibF*&F?RUqz1MU{?ICo2TD|c&m8+W|Bt-GT;#of!@+kKHc-JRjibZ5JB+#}ti z++*Dn-39JK_oeR3+zZ^7yBE3@H*qg=U*W#eeU*Eu`$qRo?p5yF-K*Vo?)B~s?g!lu zxgT~v;@;}s;oj?h+Wn6EUH5zL_uWU`AGkksf8;*q{@8uoeZu{%`xp1G?o%G@VLhD3 zF4S1N%IWwq37$evktgUW z_RRE@duDs)coupT&q~iK&+VSoo;y5udhYV9@vQZ%^VE7adhYi;;MwYV+_TNI+q1{B z*YlF+fajp+WzS*H8=j+{4?Mqke)XL4{N_3B`Q3BI^M{x5A}{vpyt3Eib$Q)hkGGY# zwYQBo-rK>O;O*w^?(O02=k4zu@15YC=$+)9?49DB>do^`^X7XCyv5!!Z@G82caC?i zSMd_>BJXwH>%BL4mw9jYuJEq$uJvy7Zujo+KH+`R`;>R5cb9j!caL|kcc1rw_n`N6 z?;GAXy&rjxc|Z0Z_nz>6<^9q7llN!uFELCEit)z8#Q0+TF|jd$m=-Z{F)d?S#k7uT z7n2y16w@Q7XH2h{w3q=g=`q7&M#N;t9g%>0;3V=jwX5OaCV!Wbon z#4L)rBIfFt8)9yYSrM}`rZ%Q7W_`?tm`ySF$83q&8uNI}wwT>9dt%;-c{}Evn0I5| zi+MlhXv_yOAI5wXb1df5n6G1giupO_7a!w8KBG_a$v%_M=5zT1z81b7zMj5bzTUoz ze0_XzI z9lkq#clp-%*80}@YJGLS^}Y?hO}>YG5BnbR?eIO}d(!ue?^)kI-z&aXeTRI9eQ)^Q z@qOX@()X3`Yu`7%Z++kSe)XO5Gk)a9euLlWZ|!g6kN3CrxAV96ckp-gck*}kC-_tR zJ^lUtY5oEJVgBL%5&mp{u78|A&p*wd?=SJs^e^&X;lI*x zZ}hM5uk^3-uk+XX>-_in@AKd9f84*#zumvXztg|h|APNT|1tl^{^R~n{Ga+i^Plj4 z?*GF7rT;7ccm7{unOGEyV-2y!SZAy&)*b7K^~c7=wvX))n-)7DHa#{YHZyi$?4a1e zv01T0Vu!|N$BvC17n>J5EjB-PR%~f(S!{W1RqX88%VQVDDzQsqm&V>4yE=AF?A@{V z#y%SRMC`8E-LWsl9*8{{`*Q3nv9HD+ihVuy-PreH-;ezy_S4wUVo$_=9eXnNbnNf3 zXJY>dumOEQ3>X5ofIZ*{cmjbyt3c~Ohd{?bVxW8AqCnq3|G>b&puph3u)wIm*ub3(4O9j~f!Tq}10--|;KsmBf#rdl1GfZL1a1%98CV<>I2cq#B^;H|*hfp-G$2Hp$2A2=E~9{48kZQ#4W z$-wu4-veh_;1;?Tt`_bVo)+E~F)d=pv?;GCEj`T0jEONb7RJuF#*N5LoE4lGnh5`g zeNSWC6qe?PLbZ&Qu_;(#YZ(XQR5*ezRuc0pZMvkU^z7cHOP7SSE-3>Ox@Pw1me8|j zT5>|hfF9jb2lVRRvqySnp2d-skvXoSYF4N+zc83lQCL$JEU%7~9K*C`I^Vk~%j7YxX+8kZj$TM{Y(UgJutXXKWYPcIF^lRV4ClrYjx zNJ+0Kudb>nEe%%Xr4G!?AKD^iy{i>Kk4TF?4NqCU?OpVB=!E+x5VkGPbS)NXM- zyY`GrNbQ*#*DD#4d!^E6-MYm^2BjC1&UD_y^kyz%`Y?T&i>Th@P$@XHIUWkRLLffEeX!a z2o}^#pAOw^u@4WHRaDIzRFz*jqaig?hx!txKyjHxC1Jji){kfM>6DznOk^f8lbI>Z zR3?v^ruY=U5~~E17D}AbQfYM$Q@|85MNE(>W~MVUm=dM6lA@$47b`=Q3T3`>1#NZW z_`-^!U?LPVw4^$*zRHOMptZ9qD@w|%Ls}xtrtH!p=z!c{DKs=#R8I?@-$7LsHI>=} z@DqpfEUoL=j;N?EDGY{G?&`-z`TX@%O$%2$B+nA}Cy(prUY^DGCnUovrb8|M?CC(j zRHQGfnfXlT4NMI)o0-GRW#%bulz64B(oSi=fw>fBOFVNqvry>(v&5uyRFaeg3coPC zMnOm9S=vEDLwD6TZ(vDjb+9VCe0W7sNl9@@5c)3u{FIsH6#qbH2D(T$j|RwV5-J^# znqL_T7F7q!LRzxx(o2&&$0ejBFX$Y1X=>Nh&T&0@CNEeJY1kqvBt{<8GId%# znm30c+3sc@U^;JP?qN1Do0)r=`&g z`JgspN+>Lb z0*ymf3rH+JFm!FLJEqp-ZOw%LwBFrD`&8@mx9(rwU;Wa$|J6&>4|;2x#6CkuPncR* zR#`)?Sh8a6hP&_EvUU5D&mMgBZ7m-{+W(-BHT`o;6E??~k3lKQoLgC{X;j%Y)ukon zLAn5^se6;Om%{^H#~f!qVOBPqKF?B+H@bRI`q-528DmE`lmQD^YWIe(jfxySuQC|w z5iTxoY;InclmRhDx;)%;(G(%$Kl6eXR^thAG39 z5wJ>SZ)Cn@zGF^;e)9vUn>orzr5H4ua!u8wlN6X2&PuN+qce$)l`8l1EN*zD%9+ts zbPSu+!+G~)z56I9KtgVI4V0(j zhR5OT7945J8N|_r_7B7$gfL>2QA(~dS{b8^-GF##L>r_>qB0JeAS;uUGKy@f|Ee{G z4$FsWS)@*6Z5>t9(@H^2DVj%%FCSP@H6l1CC%*=8pf)Jak^=b$=g$simBW{SK=nX>!qSQmtfX<7Veql~6pxXLXQE=Bw?G3(k#9`?!kY zxN*?!X_b|Up&9vA!6G`ROX&oKh6k%GoHiDHP~SX@A4a!9NWij9kx9EFC%>es7F|q5 z#d&EW&FD{?p%l?tj~_jQPSd!Q$TJ&r5}u6*ycSrPNa7GRaRyCs@W(9Y~i%3s{DDiD4SVnU-*aiM|+%$M(0`DLra>BOGC4oE-tlb3~g1j z>9sP(q487eXRcb4Iy8>fWpa<=f?!d8m(t=hzQ=#-F@(xqFE-hKL|WeglL zY()0RQDeqUm^3A?plJHJw1GNfSREKcjnj|?{fQ#b;ZE23GwW4FV7<|3cZ{aX?if{t zfE+G2s0Av?YEUKgqF1gpQgy)>PT%tL%a9t|f@Tej$(}>u$-?uN_4($*^VV)Hm&FZV z+O~(PwHudPQBwsg=@mdSoYt!yBzL4u&Y?}FwRFkw zEtl3|^!W6Osvyk`$zvmV3!i}J!IIds2Esv7Bj zOQvaxoF3eGZ6GwP4>J_PzZOD>*HSP?S1@-lwaj|3?Y2P}*FNS&2;zF3d58HJG`BC9 zubJs|*6OE=3E`l@OA( z9D=b{qC3$>2*r93?SLSx{Sbb22)&0sLSLY7(GTbhW-yOU5OC#&5UZ9r9zv{=a2E)z zN`s)PYzV8GfD7<+JQG*oxp)BtQC*8~gz%}ma4m#OJ%S&@+wo5P0zQCW!EfP@AXMsW zt*JPo#D<#cu=wY&!h{x}D?njFmqT3@M9?DTQspvbfpWRBa0B&ApvCBFv_$nwC<;*) zQ4vXX6M&i~_Q7cc4hooYjqD@UGNL}Z##E{mJ7Avr%ns|OrfSuzqoCupIx9yb|A(q- zsaYL`5eG%X;vLdf{2NhVtpY;q9E(A>)CCJPqFYp=Nb6Ui+nLU_FgmN0E0wEi(Q0&u zvRJv9w$gh^O|WWSPCoU1g1#AQaAQuY46P{F zG}Qt5)rB*t$vrwaw_4481SZu(=wVQ59syPDF|=iZnrU>fs%#?ls}$uHR#XNjs)=ez z%5|V!-KgAj7_vN$wxR7XCkKzN27cqAL1omGP?jmzgVBhdL{Fie6TlH3QgsyNhKVKR z#TALFfvBy}yU`vsC^Mp6s&sW|H`>dr1ow=l+i0ZEpl8o&gIa%D(OR^RY6nymuWw-e z!?V)s8?JGE9=)LH(@irr>Bd_0B4tmt?(d}gI;7mD ztf)mt&}+&{WfdLJc3=in!o#828?aXCY0%5K~D$AY-1X2dcKWP z*D592=l4)xJ$fGMAfXD@udss*~nBC@G*m?RoVwInu=^ z&=*YSb?9?t?K-9nSZ2_*K5A}-s3jN{19XMgoPD84wr|n*bY#9mCzV>Iu9nIxRZ>BA zXMOfz;9?FIMeN8H<44s$2^)`eYoy+6iLgF}bxh}b(QoK9`W>A?e}I5S7-JT5m{&F^ z89;Qsyqa`_AAP($|2=2LG1}j zA*eS&7ZIfT1??~;GlIqWHKo;>t*QF|I}QkfE*_+-IT#+H3hLes=8b{L7VZqqTd!Ho z=CB|J5s_OxuQWKZ;o;Qb`EyIkO6J$ws?G*Ce=dNy-X?EdSyfU7&ZWp>H2}M)sRj?u zF3p?`R;hXEfPl|3TpBc>q!RX(DAyc~*|7Y16*b_xj*A$%5$?f!l`L%WP`fcM+y^-{ z20TPP0!_<~3^{Ir+khsI<6x0&gd`)&Fsfww43#)M{IK|TrNt!U6r75?C|i}sm2JxQ^)SOuq9ZUx zO)#h{!xMFE*fxYMsNfuRa*fKLqj|qU4R881>?%_wGPJtMLp6Iv70d(hp_Np^!U}T3 z)r3UlPUUl?p8aqd00;M1o>+$mC{I%0Sixgd-&)n1ph^=w5Cv-SAUs%kN_kp|?0Dj# zIGb_R;bC|<9--`1b}75-a1PT3k5cwP^Y$uii=1^iQjuTT>942LLN;N}u#+taGX=sMB`@=n+kG{At}I%TQzT ziP@FG@~m>$3=UaflUQP2heP8E2#IP78&L4mY;EFR^|h zuLp|Oi!Y$mjrc|U5|~H_@yqxX<+$>xazgn+`C9p=-YbZ=gLv-=wE^$grBfqtC~V0mpxSQRK;c>XXmulSW2(o=7H}2U9)e-Tde5agLm^{lcI=a1+l9H&F5K0P`mX^$^ zs3=N;)npbNqe`NFJ?)JO?4$-qL6X*xq{i)4HEaAc{sp#TLBvN~v=O&&E&i3N)8~2w zMg#s0pT@sWq}x0&2;kXNepG${x%-zjOPoui1S+d4W~$}042vc~=~SJiUgSC!vn;c+ zaS}|}8~}2#h(6DRFq3(QS)MVoIuy_9S&>Ha6y%43li>fVU@5q4X9r=%{i6K*pXe`E zVr6it!@RF$CAEJlYYIwB3biSepm{nVJg0vCQq5YEK#>kk%n44<57mSs`gl=L>j^7s z({|^Z2r(*2YFRriipCa2JyT~s>jW{&x|H9Q(nG8l`X+|;f#$R@H$Y%-g|rm|fK0>=X;h$V<4 zh$l#QPDDn))Ch!;q(qWG2W$kd+|YW_GHkhp+`~AzQ@6v&Bps0$VkzGD47(pcVwh zDUhk9rcA~(jJ!59iQ4X}YX1A9AHwQ19JVCN^1%*kdCte_0IBo}I8B*99oB#r=cLJk z9TYW^iyEp?6s4*fUoXIcrgapJw(F}dwTTtQ#i1am{n4BnQ_;Or@Q6fnf+nTaRL@Yg z-{{9wLQsbwh!s$-qjJxINT*@IS@Q_7)v$K5H3T`rCN(=3HihWotS-=Wd8U6$BICS} zCE#jj6@uV>5kYS1Y>&%<4ww$1N9AA-g}}@SX@*06heUEOW+4uyj=h>)!Y(DqLy(uC zm^$`a_B!@@f_wzU5)_~u+eTHp@~k3qK}Uh!NjeYV=!$t6B_W!z!7&9Mj;I`=64>K` zb!-leB0I$13=-fL_Ey*qOsuIXDJqy(9Smh#EH673r3dB=Y;}v{xi^;DHV-7ouSuR2 z?8>nq)5c_F)Ups+bBMhi7_5$FkoVecZzY`?kiP4M*^?Hn&wmdXwC-QDR#oF$_xGs( zGnS5#zFNnwXI!;xEn7!WD}q{sSB2fEtR$$7k~pRq#y2!IqB#r;mQSyqVRhZBRp>tU ze$5}$M0Bb8TrK+mm4(#Yi+*UquvkPiygcoB6ODs?gnhI@Y9$lYp{dl`PNmik_6hb$ z_9=EJyNjTX1a%^)GeHRiB@&eMKPI)_XFmYjkUdH$2tFjJ%XzFr_BdFF>?iD}1a&2- zN4-kUe$IY|4EaF(8b{II|Dpf9^IcreMqqh9$3e`$K%&{B?N=6V3=6F!`N95MK5ww{Cn^=v~ zR6CrYKI-J*1WpgSKz)WXdG4qQh_>C7cC@dS+^D4*yL68$S6rA$PBn7$n$`qzp63pM?BqCcZq zwI0n0ug&X-IsvK(Nb8ueZ$*2i%IFY;F=!8CwLn`i^XMUa2nT4e^}!69tUb*woDrlJ zL>mao0DTeyFVx*{b*r};vcW#N>X%ZTdk{DQzN^CEfEtK+fO67GOB)l0vWiCpgAio_ z10SiU7JUp=wQEMBwv#;wVky8m4h_(r)9v5#=}-~a=cn7&S>TC=2>^9c9eH!XWkmNO zfQ>_|cGKEI;K|u-rS^(y?3p9RSba^BXSeuKO6!UNpi~yA+`yX&HW7Gj zpwvbobLul1eXVLdTz{0h8Sml-aOqqIm&py}262PAEN+PM6G7PojU*_SpfLoEBWMCa zlL(qZP#%br24$AZriv>;IeC_$7pCc}+ncKHO*^dqL)frsRKjSjgi(2xUd=86Ovwre zGq0R6FPh&3jo;`z%b;fSqqa#XN!|NR${jl>s|>UjnikESMuL#)F z9?i8-<2pXi(!1GQ!*1krS96BOaAKaNd$SqVhmp{&+QxIBOk*}V&yw0)W(_t~V@6dP zqp1+A-&{sX^&7{3)^~F>rqeE@@2FLp2%s&gE>(dY@$+)?xvN0s<}T$f;}&q2a|<~* zZNV+#uHddDsDPkCf{F+V5>!mkbb@9OR6@{9f@W>z7IRl~OSq-nHQcq_b=>vb4csz< zN(nkb&>sZ1Cb%8J+X#M==+_ecMxx(Gm&K-`uuY|C;`nsBN#+PA}d=> z(IiYnT0;Le!-O1BQ9ck1=Umm<*Ps;wxX+ilfiR&Mwna2swM%$)xKP_Q&(iIDW!3j0 z6|>qlN2GgtX!+FlNa?vXl~m52Z80~Y`HLX{=tnv+vasL5-33Y#cPBw*>$o)pRVWFK zfwEqk)3Emnn}f~tuS7y5k|>S=f7Fp%24+iXQB+E#7I$-x(AjxUdQetHMBCaUl z)$P2zR7V#CBL~x}!5LLhQyq-(Oge8qwGLsgZzRY0OVY423{XzHrLk4k(AuWmHyFZj z^C4Ckwm6&gW6F7J27WHkI>M_?NaGlpNY8UGG*w&=aIb)&#U12cCg?JP7SwXDa<39} zIs8*~@BE@7jh{A9pie;x;Jq?fRXtBjvxlSp{)iOvCihn46bA&La_@qJi35X=D5XcZ z55QXqK1=RH?j!CP_c1-jk}+HxJeW@ef%v`xqD%-{{vU!=Ylxe=wbjneHQZ13`&`2;?Z zPaxT7->d7LF=^XJ%k?$#A>Nv%+~V5n3avbN7^=m9}Pio zd^VrMkK{-3V0?ieYCS<42---{-5dBZ{8)Y*Kb{9`>>h$P5p*v>_Y?FGZMh91&}z!c zX;@DP6cR8XVG;5)P0T2%0=pO_9z1e4eWY~_xHl)%r%%>CsV6u!&n2Hvh3fYpa=>j* z!~FRmB=9gBH!G#N6EbtP#F;d47D4yXu%MQCbBhYWFol318YW6NJ4V16Symb_(E57jdV68ox_8w@i0M;D5VoqQj-&t)jy3s zMtXGtubeew2oI9}F@mX{M|gv zqMZcoB4{_wZXPu{t}*DR!uLjwm5J~beDdIQ2#>=9l+Az1R3dCy!y+IJv`W=EmU4nXmQ}!4^$2ajm@jvsw@W1k>_}}=`{O|l3f<7ha z3xd8P=sSWy4*W>a&jkHS(CD6i*P`ZwD^sgJr&QcbWBMB*k^R~I+3dvtn@ z?VEX)4S$1ed}g=!w2b&(J>oNa(GNXS<1>52_v#ftAcLk1=&61Hny&F_z2Y-_#;2vk z_e_t^>`K#nb!kuY_v#kkv%8uNhibJiVxwh1}ew1g)YIYZ&uij_Zx~;|^4p?UV z4gU4B8ajRM*{nNhtUvibvQC(rkfO5I0@QSgx)hMHx+EQJ9DPR63E0rmb)g$tpHunx z=jQ8_h+&%po=$D;*Y$)A8;E*o*qGGy(e;bso<_NUNsrQldZ5dQ$}?Cul;+9O4Iv0j zn{Q~1hSNOXUU-d0MR6ain-Il)66Jm}QlqI+c?xvFs8&p;d47oGnHiO*Tz5%SIU$U8S~W(bCJ9~{BD^}3C^yLI>IHW92R*h;X6V1LtP z;Q@7)V+2=kGzUO*XFv<;Z@dURsxe{nEM1zzg!*!m&dq6?#tHW8n(uFpI3WPU)Ta_% zy{9y$!aw0}*6r3k17Uo+J-WTRrwJAbHV|yA(><%(r+bcIiC`1K7CIH^8G^i=VOhDO z^D;BCMrV)8%gr2?nLauzdqm#Q%n9cr$Q+-O1~y5AATEl-*sR>F0mCv!0UOFgL-YZd z5xRo}%Sy@Q#>&WS?oxkShwg3N z`?R6&=-$=6N3e}xJHd`RnC&0vK7<*Godmm@)y}_cMl-siX=QtLhst*C)+2mWNB0?R z;|YS@kv4wW`0S4E8y!UdM-3UYWL5F2Ms{6v0h!n{@*8P1`0C zLkMVSiU)|!O_)o=Y!bi+Se#I3w??7kBSo+`UJyqMpfN zgFGHSg1i1_HyA%{BH>p#WR;QHzOPzWa7j!TByLCz_Ozze_ zzaBTkgmJJJBn%fu2-!l8Fj5#LC`=Zn(1;RY8U!2SzTsd)+@Ij#Y8VL~@o%i5df6G=)9}y58VcpGUJDfjUmT7# z6sjQBPzW(6>5Jfg;7X=%N{K}m5s~wS1+Y0ITq;~fa2mk_YK6;%g#@P)oYkzzLp8Ri z6po3g%{g~iqHv|K1hyK4tAxeE)dXh{oJsJ&I$^1B4TL4)K?D!}?}sG{H!)^md303a zx7Eu!Cfzb5bd~k7kC&ZE0Z*s@kZ>!|-WE+eXY(~SF)6$FHfDsW`-BbPUhzlzd6jSn z?dRKt)dUYAcql0M!d-Or9;PHtqJgMkFZEe5hn8Pk@6rx2MNWGN8-#n*xJBV^8n=kE z8*@4Ho~P8~dB(qZ{tw{!6^iFq37#Cm^O5t#4h!!H@6$Qg;1WzNlfMOYf@cs;_%?~jajtie@6ZunhBIh?_`h6{&r11Yn_*VFi;6j3n z2oBZ>-wQub_=8NE{yzZ!-vH95qapoK#-g=n-W{-enW6H4a-|-2p#c7WFlIdyO*?A$ z(B$Tk*;IC)(Iu*2fUIlH*U-z0`(z^k)dRcGMoAnmGRd3VV^$xvL z?;>~>!KDP35nN6%$oooyFCn;!;1I#poAn+Iw0ge=T74V^ZA}EUbLv66=wHzO^Pttk zbsX#TNd(UhgI1sVCyQ`cI_rDs`@r1L_tt|7HJ9LdwfesLiwT}ju=0;B!TNOlAi$tL zL!YT1Nbscu!+O7WBPy&{YYUWjE&y@7k~BUD*_a z`q4l;CYrXFy>`cOUuK3f_sXvAPnV8ugu(IpNwl9Q2)7eVKzP*(cR@rREWj(3#B(p4 z`h0zn2HQdvwpTO*wlnoL6t=VUrTQ{`xxPYQslP;Dr4Q+=3BHQp#RP*2w1nWL1YZMp zs1SS|!7u_hY}U^X!*+fcwwF`bE{nkSrh3@k@h@!u1F*f0!WIVN#t3Y|h5F~`bo49q zx6{eAQooAeVE*V4*(D!j0WOC^RG8v*Lmn2%O6T8i97JemnHDaJwEj;nWp_RoR#50M4X zij0Uv*erRF;D-o)xK89mo`Uuff*<|wgI1InvnWRcac(#6DtQ@nW$bmno)+1H^POL(CKhii5<#VwP^5IF!o}hl?Y`Y%vG#5=V)- z;%ISBoiTPrISSS{8>0&WAfZ(SH-bL^pf?-4GS%RM< z_<4d~B=`Wq5I_RvIv9tC34V>>Hwb=<;CBcH+wUmBAF7*m5ZM8S{c(anB^Wj_zJRkn z_$z|HAsFni?+N~qU_ipJ1ph|x?*#urSVUNsusmS}!it175>_UxnXp!RLWs4)Q6bv) z5^<(DODq-3#B#AhtQ0R1tHh94E!K#$#W~_!ah^C|yi~kQTp(U9E)*4!h>OH4#4E+C z#Kq#(;u3MGc#U|ic%68?c!Ri1yivSKTrS=$-Xh*A-X^XPSBk5|+X?F=Y-hp_B5VO+ zFC#3ZY$5Ecg#C(e2Ew%`+#tdg6K)aV?jqba!o5MblZ1~Wd>_IW5q=@zR}+3K;a?^E z7evPsT??Y?PIM!Qu8hDItFD&lo+P?Ai0*qLn26Ax2pL3}M!*p!tRlh|0*1E$N8I2S z3{#1IIML4}`YW5xur=BY+u6(=&cx{u5I4OXj@35u+lyLwKfO3(aI<$fX_R8)>l5g8 zWLf2vHPun4iNsA>9rxy0axRR$c4iAAhVx6qajmpet$^ra!kfL%Tu6*Z{UL=W2NW9j zO?dZr--R6Cs^=Q{Fg(8;;u<2iXfzx)6T>^g`!6J*M(ug6YhY^%ZpDi3itwH=+z6M} z>>gJGvqRdcChc=H-@V#MzH}iQ*nf3kN_|_v}RB!=BHQWw!*3mQZRgLALf8rdQ_`1gI$ln}%dK&Xwga3}k7GmKp@Q9>( zMnt_eH7U0g&dX=f`_}SHqkG{4tpo^*yRajTNzEFz;~IAeTx)(*)!EW0cSbNsZ&N>4 z?LXJ}Ll9e!W={+4C}v7(bYFaJ|zTm`O6gbXkj3Hbt^Y7IBe7$1O0z5IqtED%a z_gRt$Dj$rV%myvS6MuHWi(hWAu%f((c6~#@e^jR!v@lEz$8VY+J#@}h+Moqr;xFM= z%I0(d4MA!&>;^5!5`X=F77HbRA{GoW&Z0G^f@+}Dp9nF77Fvlm%sTP|!l6xrZZ4PF=`ysmVn+rb{mzi)I-P2swQr!ZD&V!D0bI zrh0DUqu+*bG{>0>nPOTUqbsLHVX(}F=!S<%G z-fa-gus~xdT}aHc#_%ikOL+3zuUxKUlzUzu{rf9ZiME?<;>{X>1fse9_lFX6@m{~^OppxqTsyZFhJezvEEJ$e6@S(0_` zU2v!>;tMtGH9V_2HVw~E$0pke9GkcuY&q`xvrR|Ci-y-JvR*PAFdQ_zY0RcDM0qTF4$cXCW4ING)!MjzB&BG{VgIyzu}9`U}PvjV}?nCzzd0*g18^gT|LB z(B~3%-v0p5UkC8M5e;6HYIGI%9=z+O&re_9VQaQW1^U}S`%X0Ngt8^C?R+YIKIGE5%6QQ@DY!H~nMKmExqwX*vnRqH4v0(_-TQfDcFu*(Sxi^eT=Qj(NR;d?7#Z~O1VSL(r-rJm7{yx~;K zYd)Ku*89q3r`QFVTUiQU=^~)*6HWWp@;OJR6%QJyu+~f2UeAEp4tHz&8TC)3FZxUA zDvqTADvnnHj-@tq?S)&!&ayQkS+XR!1ZlH0L>ej$lZHzpq--fi8YzvEatXVdu;8Y+ zldyLYb`4?I5_TP7YYAM}&92`pjnRNCP0-d}X$l4Mh6s=$HZQ#PKKk$4`_Hev(ku$( zQo?SG0J-9PDzh|OqNQ*_mF7#A5_U6T@BiljtVmS#6K^8z~C+rTwf{OJdVV@%G zPQvcmEIk&6?KTO1=Z1-wo}{qd9f9p$!X8x5hq5pK3)}wyY~dG()=4iCc25Mh2i5f# zACpY@7_7X?SL$2+^^?+T(wh{xuS;(b_G!XCQ!BkCy-nC>3A_KF1MX4jBMrC^vJv*!SUpxAqPyG#eT0?s6}fA94@5Ct*Jz?1!~-Z}}p^eni;g{}_zr{xVhn zgxh6^TLu^(gGnf7QW$@H4j4<3stu7x0F33K@-TTgVLu`8^B?SIb#k_xLt%V^u;9S` zZ#%l=ag13W9}UgNN{r<$=YZii+;()*+dX~;my`dHJPBwgN7L%Q+A~f*GswHEuKKD@ zj~0I0umH<>a)E~4d=M(lehS7T&Mei>W^q!8Om(%}?-v0o4uc7D#FT<}9 z^xiF*(NC>p=~Es?6-D?do_d!Ky2`~cxt!ohDO@OAP-^22~%PDeQ5 ze*nMR0F&FJF*&*VbiZST0~bH=6rSx~wFyp30DhkY+NYvvxBtF3yR;^oSxk~{+QCn! zPVGn+?3SO_@Vl4dmlMy^agi*~%SR}FUyxsvUy={V2j!RLSL9daL-Jw583`v5P9~g* zaAv|;2xldnjc|6tIX26$h4K5A{I>iK6ED99_~o2o{Bj<`!Pj{3U~z5#1@M0Wz+X@R ze@Qr31i;^@%dh;MoFs$1eV=e{?HvH@jg0osGW-Npt^AApE8)C^i>Z}=lTQ=QN4S<0 zzJK}aZq3;-G9eS}^wycMi8TQP{e+7pT%gXRGYJ%kEeIF)-v^=zu8B06qrtV@BHgs& znqi5Hv!~rSV)2U;C=g9HptVQSZhQ4q@#9Yne0lM}sYibdUIzC7M}TN@nW&#oxZUJY zC0Hu}qRB@kSnFsBru(3E|2R#LwzLWll&O^|UPZF0jf&)U=V1`Z(#g~vkZkH~N-!mw zl1#~_6jQ3Hi>a%r8{s+-t|Q?(5w0`g5(t+_xFo_Q6E1~tshdqbG$flYGWDTIHua-O z?h-+A55i@Hk(~K2lK*)mn}!3DO(O``HH>7_NI8@I-RM1^f3tj$?+$(bdtaXN2y0Yx zVcLufJK@e{sqBi$PLHX}W3ujBmYS0~6JO%dD(*}ivpV&1rRz1R7o=X8dQs}dscTa& zNxd}nvQ$FSUn~Q}!W?OkSO$w_h*-#@VPY9BmJt=HS5)eHL+ZxVGIYI3={oT+hh>ad zrimp}jnG-gb^QM?@)+klvqZ`KhbqtyFU@{ov9Bf$=#QF zzgWhKWn5Y6gQ*XRWxQB;a^P=B_o&iORI(>k-Rw<$H1)C6$Hg*1EEB~tsXX3ta)7>nyR%7E7*J z=7=RvEcs%YTao%pT+6nU__t-7p|m_NF-EhZOZ-}wrS!OzkG+&_9;9sZilv}(h_(fg zvMs0`P>7|FXsauhVzHEz+3ML&7R!9GEIMYxv#qg>o4(|* zt!XTW7m$LsG?l{(tK_i#r-Wr~Y+QpYx3#skv$Yq?VzDd{%c>Bg6>91bUv**s@+unL} zRXethOK9IV&^9C{UEAQ8bmb_1OL#5aHU;V0M%hN&#@NQ%#@WW(CfFw0CfVpL&k%NE zw45cDv&FJZEa!-2xmeB>%Xwlszrr@PQo5Oy(w(8CyCNao)rX~fd^M%YXEl!HN~E@8 zCEXIStV~FEA=1^puq{@UGErI;|H!es5}_8`nM%4#ZNznrSS~2Don<4k7m8)=v6Jq3 zHtzS9+0IupYu0KSSY}(rQy!L!kNA|wfrM!n+b&buU2D6 zRr)8i`<&A5^I}OXs$|=bcK`IjO4}Q@x0R&cw7n&ktzx;p%=V7$U9sFCmTkvQw;$Qm ztdAl0lh}}ZBk6baw`go%*}hYn{o3}8?OS0JQ_Ia_xux9pz3rgV>~^u-`tNJju4y)V zQdJ#3ddBil$F=<)zI}3+Y0qA{t59jy&W`hTy=vK83l5B|{qO+&_Q0yrEB6dhUw|tG zXgBTEW16*}5Ywz$Q|ahVvpeizBx`rtU3RzK!z~D(-ER-rgLbY}-YJ&5#Ii%!-PMAE z?-k2VvD_yXzA!ydVUNTmYp-KJ(Oy@pXRoIu`(R?Y-7S`9#PY2A*8AM?sq(R(D%)G3 zS$k`-JXAT}+S{R7dwY8ag;;ip<>B}zljT+FML+I@^Pv=385$KzFo4u`QTVcIDBIP_~DZ69Oj`}h;W?y;7q z%I)Lr6O?|R77II}{o7-%Jp)ZnJAx+L=G&gHIpmRLcWxTIbLC6*WBSde?DVQ-Q)}p* zJ4_ka?3|m&1?uiP_bkfR?cSpDTklB;Z_Kvm#icwaCgtak;={xtMfTH`mW%Br_WAY& z_J#IE_Qm!k_EYVA*LYDZ`^EB-SY8&(E5gpXme<7cx>(*2%bOMU(n>9#86SS_=O`_| zmC*7#ho{b89GCJxAmz16%FHp}PDpv3l5*YT`U=&FqGa_>LE_B@`$oIEaceKLGm&E8 zeXq>E+0InzeX)G1M0`wcFWIlNtNXn6t@i8fjO-tX6);XZGm!+FjRe(qCpYjEJer{?W@ zgt7@i-Dg+#dFjUYJaN#VS)=6|Pdl@85~Af3M_D1b<1${U;^&pY4YfqHCfj#XlLjQ|;9&bHt%LOw!6> zbr_>%NA!Xrj%E&C1-{zR+>z#J;b`e-5qw6*^Dx8H0Otj=Ax+wb=%arANYSJ~Ou(NA=r=>9Ut00#*a5ItDhY)nx`!Hn#p zNo<*wS&%a)CodzfXmoCVW=8I)TsDkOq|pdRIx9~&Mv5NZ=olq>q_o-Z4jG?O%<3%} zMLC&?BgQ)>#kyL@MAg;mwT_ami9@D2<}gWeWID1O*^cRs8IGBb9LFrjY)7u>bwuYZ zbwxi(^m?M7EP8#>8;IUe^hOnqy!a%^Q4pUbIZEhb^~RNxB%R&F;&m|_g(I|!f~bOEk$o7dh2q>RgMj+?`tD^+y6k{w}t-fnyUTTk>1;O zTu0fhRm=YQd)tm19XH1ZjhkYFMth~g?P}2IP<7BqZIFo0osPTX+T9V;Zl|Lhl{n-9 z#}iDG91l7ka_n+E?AYyi#IeWmsN*rm6WLw`9x<;|CC^zO(7iSRzBpR$3fW&0m|I;Y9SgYMt_)cB9qb-MHX zU#CdUu(K{xBxl4Kb=Gp$cGht+){YZ>yyz1|pD6ky(I>~INY0a;^^>M0T~Rqjnj-os zrA5q>{)s8lUrlt5K218>1S=8wmd-XRDf>E^5i&EH`n#FY@8&m&BRV;|Fb{IFs(Ho{ z=Rt{bJ)M1GJ*cyHtOw0JN+u=_8RQ(p?8iCSIm9{CIm|iSIl?*8neH6rBm=WWpDy|g z(PxUDBl;}SXN%6PXpZQ470$8o*^hH#eD>pIWz`2;ra4vK%61_n5!ZPO)=c%IeMPvRk>j<4o zooA^^&fw0fUQAzD<~*A_t9r>1?yTDTClc^{=W5jtu5hk&t`dEL=nF+(RPJ2kyg>DX zi$!1ZALs`!qiYrpRZDzD)FUL|^dJ;vSn&|UP87{AzSCuDOn29869iKKbgg_AyG|@$K{T`DowIk~vc_w+R?3Ex*qctMpUbflh_FzplP7fQXK zIzMxMF8W2HUo86Ca_5)M14_M@h|Yp)|MoRu=Rthwd{b~PTR44){uHDe%f4T?aUK?`BlBHB$p+oURO#?z3YzRxJs|NPH=fp zudBMNhO4G4)n#+pT@IJi<#M@2XOhF$#`U6KCHe-@H;P^+db#MEMBiND^2P^US1|ta zyeq2Idv#*aWnqQ*%k%p7UA|iy{@LBZ>dzTD@_f$^^@OL@Xh1X7>PmG)y~zC z%y6}LbrAhp(JRVaom|Y}t`q&HV|Ka0)x*V{uiVws)yvge^sS;_FZvDTuD&TNT>VAA z5&4N8dkW*^Dwm<>=4LFMQJ}6Hj?6AB&MitWVq==A_Gp!YgVQE z1@^gyYBtxfs;cV0ZTn9zZRnkS_QoyI@B7~Ll2V{+BxTd9mW}@K#1&gd4lKE6=T{d! zv1KIRjuLleTw`40m7m9|c?X+o4J>m_;9UuwC%}*Ju0%?`gbGh_WyXa&EhgMsc_+X% zLA?{8-%_Q^OB|EqDpJaw<(lovbo7zU;+6@IaI6Jf+<8MSmcn+*K&owK}Pt zLi7hqGh!c%x+f$;eThrGaqGI&b(!e9M1Q!0TM%OkqZSUy%*7cp}uZ#Xhnd_kI2hraY{rzJ%+Yx|`)y*ZW%H%DWUVR3C41~8>+X+a-2+7b zu5zq(v%2!1KRoPCcaKr2G|J5t$AhB(Q05-%9w+*bqW^r%###4d_bF6jtaDF|eY^eX zud{EudzKRU4EIbobIC)Z{~}hc+&$Z!i^#1>Vom-Jh`bQt7F8WOe`r?c;fCD@eYS0K zPSf)8d;7*jKA*A+s+P^ld1v3myL(Ju>Ggiv>E73DzY+Oj_h~pSrObV*8fLAQzjoT0 z?o~>%XSvUIFLR&cUhY2EeV+S#_X_t)v0BAyh}9HpHL;!`*6L!dA=a8=O%O3sj$Z^U31CqU3Np_1^9SO-+D9QfW)nxZg?(IslH@j~Ut4plz zGWV_S+r;V-tMAxJc8B}kxMbM@cc56kWZz$06?H%4ene?@m-}J&Zn65s8W3x++`Y&B zsM2gmtl|HFW}ilf`>N{jNY|3x&r$aIs%8KDTC#h;`<1w6Uyf-u`Zv7xmitpB+PB^B zxZicZ=YHS)f%`-ENA8c^pNO@#SnG%t@z)hAf~+Ujlf_zJtPRB4u)_UWrDzYNWTs?k z_1xbo(KbqmwuvM$*0ZaRSX&=g?Xg#_$AW4->}uS&Qnelv)$$la?0?(=ivKThIm%=6 zIJk@Gv5U3oMvqgh&HmPmxbkbK$Lk5AEsxLR_n@lgVoeiki*ipWWrZgq)|LoMtgX}; z|HaiLJasjj=cKB7nflz?{mp;q*=y&cB@>r!%6L_cho1VBZBVuBlb)r$qVxNnc#(Ve z3(K7qYV1t7ps`22^qW%V;mvm>(S{2~DLiG}MUvPO>B!3)ds=(CAudlFPg_qrPkT=X zPe)HDPiIdTPgk+F6Ki|1b`Wbvv33$`XR&q>E5Gk1*6tOa?s0K>ddEjZPk$w@9tm;v zK0G20JFcyNKwD#!w#JIJXF^*O(3WRna(#tZdzC&M`{066twefE^JJ4Ao=i`cSo?^z zZ<%MhXNFk&iFL@|Qrh2HKf;sinX6xE~g_j&&M6E#lLuU)pMa|y%O$4o{K$eJ(qYc z^<3sz=egW-h387KjudOUSVxIlM}+dQwjGj?SMk8Q&=%VeIVRwiR`%F^N>oY2Rsjo^%SvY zlzDb}koPpPW*@WZtmiS$6I5cX^X!dHXERAb&r{rAwPsZrJM4EQEPKwgU#b0h&kLRx z#fs(hCo{`EFL_>8YR?http9-8-$KD}S5@%#p%?v>vU%W`OFo=-Zu{+pKgZPm9%bLJ zTDGwG&Y3CI`h2|pilz7UOZmFaZ`A&gN4@sTp!-Qoy17U3Tf%E!dDLPrp07RMc)s;~ z=lR}q(DQ@mN6$~5pT(LdR{G7kVx1?}0E@UPDQD z0XkK0%~%&DZm(L;J}%v3FI}%%?8WO9>%vOudevete>$J_*7nvVGrV=Y^yrJlx}?l| zl9w+ir;7EAV>aG;8+n=Ym3td|n|Paw^)#`bF4od=Z*#BO-NPzkUHb1U(A!S4dD~Z2 z)vSzqAFXUR@bZn_(;gVo-QQR#(A$Z!N7&tCleJ&J#a9k^{=9w~{4(A&-1 zQ~9~O8gI{3KXJjuYOk6rp#3cW_L%-a#?lEDIAo-E zGP?Dqdq;Ukd&hXkddGRkdnb4&dMAl>xmeE?>v>{5U#vKOrC3*qb+uU6i1mUB@09qE z>z(G!R126=`igkT_!8Pku$A$Y32)9THmrnGegm4!iT<^jfsS2^O2M*y= zpNzVR+wa~|?^3>wdXdm28@*?Ul?}4~#+#~%Tv_HlPwDa;?{Y7BahX_2&dbZa=X+Nu zU0xy9EB^z!ya=sbTveCzv+f%bUDNM|@|L^a`s%Jn)t;04yq8k;vZ`fsyta9-<_*}s zcE%SUP5$B*-gxKT@J7E|+|YZacSBriSH+~ZK}oGlNo`{lsW}|I5+2;*y;-U48t=8< z3h#B^t={XsH+XOKZu8zG)^f3K66=c+H&r$1+i!pL!Z(Mk-WeHmsOi-EKZxn~d&(ZHTK0}NUpl$Rmwjif zExl~(>yK~u{AOJJ$@@!OwufS}-SL-B^XWc2lJ!}AhR^g>^PS+U?yKRe=}Yz5#Cnfd z?-lD#vEC=v`^EZzSot>dkXUz#_2CMiBQ9B=CoWlEKuLCYLb7`fOZNEEEdRjMN51+< z*2g9DM=B-jYm8)TzMNcNp_X`NJqJDxujk-v=~J(W_*(f|ixsIqR_1H#<7(mKVtw+M ziPqQI*NsYyb-u2#Z=`$4KVJ_uY&=nQ*wC{ohYep}-#~=x>*wq58z9!F#QL;Y_m%qw z`35WDJ|os=|9#>5(lwiJR8=v)khE>$?T+qGExl&W=w(+Niaq?`V`mTF5q9=?y8APi zjhZ-g;RRj0b?o=C`!|b>`zHFP#Dwdc922fuiRI56m+)GaFJCD)+c(`e!#C5H^%3UVb#7Znaw(nrC9pCv1wamZuo%km++fX9d7x*q#>b=l+kyzgo z>-%NCwZ2Ql`hi$KK6dK8!gp0%z3XG@{ZJ+0My1}5s;bwL*fPs^wXZ^{cZ=^DA2T{` z@O>)Q&&qw*`L-(celAvarTMp?*Z19mBDYsn?{Mwzx@(NS=ajxPxmJ-$bMkNF<=?e#q&*006-jaa`G>vv-PUaSYj`h!@16zfl7{kg*TRHb^KtsHmN z`^DBnmE*3VCB|K&#&Pxj1L}QGsrP-cCKgul@igI|Ur_RW>HAvg_JHpzF_OecF7tik z`&Nt;F|5Z+*3hfy)^4jzK)>#E@vpOGf6&j8GRW4?GaM(1QS&H%OL(oWzZtUipX9ISKiOa3-@xC{ z-^kzC-^AZk44W8sF&ttz#c+w?7Q-WkR}7yR{tAEdxNQBc;%^4#NBBpI5f&p-<{#xB zEk;xfZp{CUi%Ngz&Z~cdpIKkIf1-bqf3g_0#HcMsopS$F|0zm?q$JPB{@X*Re+Igm zSyflw>_=~V^}T-mFPVJ(FYDZG_Qy0ho3go8%Wivm-3Nh5LqEU%%>}Q0So+lWztLd6 zzaZ9k`FXpWzN;P@{IliH5*l3KS1%qT+eIl@}KQr=0C^3 z+<&hBJTV%I(MXKOVl)v06*m*3xfp3;v=F0Zg?~k*Y}dr+%KnR$Y!mzG7;O`CWuxcu z(e~Jnw*GP@+f8C5w$t%%LAEtg{nskgC19gX{FAxz$%*{9(XW<@@o)3rBt|9hQ2-H7B0GZm{j@nBbqK z>~mGi-rx1p&%Pej|G?E3PMJ09fids?M({8C)tkqtmsj)X;d&j#aS5-z>HkEj_bvb1 z{&)QE`rq@v@BhI6q5mWQ$71vmgKoW_82!ZB?ATb7uF+_}^75+~v)%#`Tp!y>IHw|e$GL3>eQ@rD$!ByO!$Piy zA9xBh3$##vZq5x@V-h`BS)e61V2#N~x&fQ?Y9c!A1D#^p4RnlYcPiQqv{aqmVrWjdbWQ##I%n)Oy7&&6hst62; zYd0_=uHC?BrQO*H?dBcU?xN$`{Rgz0skBR6aueE}fp+bO0yzq`dZ;lc{)u`$iD2gk z)MPF&H!x3(d@<&h1quU2V(_n`V>a>z76z73iLoxQI5zSYs3bg1C1GKeBy{Nc3DeF9 zEK{04GjLYmY%z+(C=p|RdElJDa;5nNVl4a*Xnr+1UQ=~6bzXO$Yj;+!UoQChiC5NL zvqLS$zc0Xz;J^`X1XoXgAk#Z;V4XGBblI8zb17fq6Aw8CE)85BSMR!*dKVwXaS5+& z3~W{EEen(fHU%~Zt`2MoTobr9P!YIJj8nxpO^nmUC>2A*SSrRDVw@?)Sz?@B5xBlm zy*CAJws+9#1#VU9U6xSqxnitk@pztqGA=nT-+w^94=VXSB*r-j`R-Oj?<3xY3Nd2O zPQ*TuZ^uNmpA76%@_j1sv>4}!aei6gnE-*Od_0h;hMxK!`k37&yW+g~Myz>GoXQ|Nb>ACby5C^wrjw5I>^q$5lmpVbh+? zX6)|X?(zXEdc5F!bM$Y7_*vk~cn|hPtOvVD3Gpk{gH_%2#!;_!-R|*6GqgmQ4hDXT z>-fi*jxRmR;gyF3lY=$UaWExl3F<*>&XVJ;|ejZ6l1*@SBbGf zjE!QHiBVn=OpWU}=!}oTL9f#Bri6~S93F*lIWFU4FXP}z$T(O}jLnrY4mLo>!G_88 z6=Gb?U0(Hph!abm2GfGA$c|u(U`sKs5#!pjVC!HTF)GBk{+Nxy!Hz*z4`d7uc8+E6 zb);aho66v=RmWgUV)=_;?;z_pmk0X<`v&>Kc7qrZvOYB9~`0C zf+MTSdF}oiZm!$2$A@Rs?f&q*t6YYXesDBp$5btQZmMt0!(R-uUiOf+;}s*WnE$Kv zgX4pfV%iPH7Lzu%AH{JA?M@4-#iWCo!K`3*aC&e?aAq(kI4d|im@CF@V%#pq9b()m z#$96U5aVt!?h)f&F?Lo2^Wu*l2MdCQeodyYfDvWEf2oC zb??xD#-?R`4xHfZ%!9zlu!6GJRV{l#pxTJf`whDKjEC>rHo3+78NZR?4Z)k@{nxfw z|Mj?%;Vr8FVuPYTymjX|;rqJXoBZzS$l#qpb@4ByEEro>+E9zd{Mq3N6+aN%t5p18 z@S)(Y;KRY)!AF97f{z9t3qCH!J~5sVgPGQIVmvR#3u3$|#(ptg6658H;1iW2@V?3s z_<5z`#9}eV;l*N%`iTGVH5{tzIKS0EuyX=P)y!NBM1jjyq74hf614_hS z1iuvHbur#33w{;+T8uZvc>CCmzz2hB637VrV=RN;A_f2AzDX!KWJUL(l#nH)i}8*a zH0!2>eA>KGfxS>F7>a13b z`75v04mC!&p*o=xLv=$Zh3bV)4%H7e2sI3G)94d1J{99LF+LaL3o(c{mo>T5Pqe?O z2sMcdHUKZrcLQ)}K`4F;IJ8LV*ffrEcp|bATEV^!p{1cSLT84~3Y{HV7CI-iJalg8ywLe# zRul6CF{_JNL(H0DB1)T>b}=1dI>mHd7g`ygONTB<-59zkbTM+i1UZ}T%GtE(7t1s; z`Au`B=(PVmMgKpwu|r6$J`>s^rl)f59a5{$cqS&b3tb<&LA_?5A*NSMAKI^L*AqE% zOXxPG{_UY##SDlUEDPNpx59+? zNz>wcJD812FBG#WyF2_7dpjI$cZR>-;_7HSKO`c5AoLCS;^-S-*JVs;d>lbD?=!v1&{8V;v!E8LHsE!;cYC)`)eUSjqZvrl=re|UiE+4xnze}6U< z9_DnF0sTD&=cQK2k6iM#RUz$4v_KjDXj5~qdL;xLFeD<2r);BnJ(riF-MCzM$EAl z;ra0|GvUQtOS~5Gp030@uJS&BIVpB6v5gY%%;Vxc_FrbgE0lOwia96V+$RRwgtp?E@0=UKi$4Us?F_@D*ZC7IR8jczyUPF{g?-?U-GP2yY5+ zQI%{~*?USXd#_=wbTflxtg0lUqx#5%Z8wB(R=U42ye)i_n3-Z`iJ4s3+JH zGyVg*XCdkE5f+j@Z9YhtCuiA0` zw;MnI&4!-g2g47?6}&5^;2c)}3SWcUa9$P9CEWIS_yr~5z2PUqPllfgKTU`8O!(RG zbK&R3oGoUqm~+I;6Ek1Txnj-}vp~#3F^ej~FIGzUmH36kFgyB+S)7pY{KTz1bLnvf z{{sqUk?D=$&&4cBDEI&h{?m7?!w19a`d;{l@Q-3H5OZN!_~-B;F&BxsJYDQ8cHZe~X^E5F}FON7PP9@q>G3DPEZ6u)CBEhOc zOln!(JH2E7oohb&X+^`^hWXWC9f?pjTD9!>Ip;ig?>)UnT-IQuvmoo#4}Tr3BXuGt z#Y7w78yDZZ&iHGmHHxrrZ$+eWq)DV{q*B=|;b@jX9AHJ51IqK$)fzDB0oKNq-E(AIL`~%)<0A~oeC@obEHWv=$a}Gvmmjk! zb7Wd%x>8|gBrB3F=2|f?5%bdWlogSgksS0V=4E28Q`P<>eEj{_V%-)+f$lRAc2{v6HQz45^M~<-QbXn1=;!&>*E4%%x+P1oV&xrg+h4Uke zl%E%I$|$Ze8*r$icHgS>Ljg(bC&GP zqWHzN*v8=b#f887Wv|?fLUs*ra+LC;Vq1X6&vBIE>Djqdm7SGn(qMK8FXAE|XFvG} zXP+AX-EU7m)$Xn=n2|XaBiTHXie5R9C`xx|>RKo{hYa{AKbNB*Kf4 z{gIae<0j;Z#Re-?`D!r4XnbB`2=x;=I`+~C^VH1W($^ymuAfJ~(3))6@T-=-ihPIkB40rLyQqS#gvwAE|gE>3$o#$|U-mSrLnLR3p;SBr$jXCel$$RF7ICFN^tr znD>i$Uo5`=zobTl>+NW=@X(!=PK#ELrv5&{QJaeJgDS#DjOh`7nK+v#>it~^qJd~g zYqBvK6m$2+XjsfWzw0=nb>bbzBV_A>rVEsmo95=vp#SLEvTe_vZQ8bL+M!L`w5F}w zwP@e8L$97aoAyrY-KK5dR;_w}%L9KJzqp@S@ML4O ziI|U<=CG!D@|V%($zMd%qAil@X>Fr*lI>IN_Ur|7GxD-V6=dWUW)|ekEgGMbmzBL> zct+7oG53~grkIaNQm1_yIUa2nZ9moS9niba;QSeX%+K;@hiFHY+<)@-BWE?MvPV0M z`DFb3U8CK`3{4+eoSRz~?W$dxXnK!mFRs-_xuo{=#%OOb_mwuAj1faK=47WA73Ad2 z7^S+~c#C;wb))7eO+I{qE;=MS49BV8ZH#i|=DEtzBAT8QjhD<#)H629yreujE;>HS z%;W_zUlenHd2~{Aa&(HAFNyiOm~X|V4AefdIImZJUQzafqLJB|s?Sf)oS8i*yKqqU z!m0K)M=CHlqp*kpBa0(@XBQUbGqG&!P8&xyHqxVoUQR)2XqTg4#IJ!j4H^h8XdDfP6chWu4 z($bYv?VURG=-a15yI!Ps+YarTwr<_BRnzu8d$nrXw^h4VX+7F>=+h#t$JCs;GxPJZ z3v=ca=Vq`G-qZ!{+fHrUI&q>i{%=o|u==d%xs1Bev!lzR=R}u_`L>wvi21IV?`?{n z7d=0^BDzw{_r?4`%n!xjmHCAo+59i@%U{p(f90yF z_6C2~(0E)gj>Wa%BD3R`FH{D^(&N(jFE3Ae?cVDT|MK#92H1Zd^dgh<%988jzf8^f zv?X7v4yVP&=vK{J5iN_BM>j<`N3V`cFur0bxVKZwcq{GUpjO~@(i zlbbUmXId_fcNfLxGreQJ$KyrQ^9$zC3H|oh0}4@UW~|FpFUZL+pv_b5jgMZi zC$r-8?70~Qv0l&K@aU!Eb&Sc#EzTZMJJF|o9sT|YHaprze~9wbtVgQVlxnG^O*6IH z^^&#P`=Y;Swpv=PBsC0VWfWx$b6BcRo12?cSd^CbY*KQHMYkF!j610$9**%RWvB$_ zU!zW9B0cV;{AudTN1;7l?H9}ms&OkOZ8G0Ls(yi6xn0?yJuqj0R+URBLIm`~L0escUN z8pk>IQo}5@miox$WC+m_r>e|^}L7EHu%TC z{HB3kXKB)zmQqu-tVNqpdCOLh$mjv13;F(a_)q)1sa?Bo?8X%`x2n5mpHNw^-leuu zds*LprH)dksx`#f6K7Um1oI09WHHIfnVyqfK!Xqeb=1PS*}wk9uGy{oh7KD(VnRHk zd3bbO{6Di}p3k92$j?KpWy41jl3}rw;)qeBrwmOWQe2clpWdUOAY)2W(_>BHi18EXvj6DavWX*)@LNhxo>G|`Ws^tp&r>q!rhk)dS@Aq9o5tZs_`POo z4lT$S)lh4xwbKS@gS8P_x|XjMYfH4VwDYygw9BCml@sG3n=|Uy`lK)sm|x*G#r2JCohX-sINFLz9Omk4zq$ zJS};4@`B{W$!8`nPrfwyisVhnw(zQ!*q54;4?^DaD#doT!qwm+MR_lc5hqY?d zqPL;nbVxNPU8huYNj3M?shyMS*K*WyvQslFF81bKoNDw-US7v}Saqf+9=+F7+4Yx& zu!%zTkA5aqD7|Q*8i4+y<+vyEmKyi(v_z z3Y+0(*af>`4`8Dk8{JRB)9?&D2QR=!@CkedU%&zQ8oq_^;RpB$4rv-2BWWItxyw*cqxeh%2?GoTt&hnipmZ1sg93bg@$`LNx`c;RaR?Et^}mc!+M z&wSYEdl6oSSK$r7P9Jvq@P|JIET98*`t1+`&g&+ywYJh+V%x&Vkt z^ek8gjJnO zXmc&vTniu9+5z~o7Wq|+xYRZQKi1~lwHrVqXadb34YFVkU~g^CT^oCAFM-pb6tK1S zr9d6EsiQV^)ZPRK;YUrYV*z4ShjZ8I2gIfhKB+SfXhWS$z%O<1OC9`DhkEKzPaWD& z2cOizCw1^iovVQu)FBt@+zq>ccGRJsI)~^^8$wG!11I(ed~{+SEQT}TY&ZwV%MT+}V?%t}5T7=r?uP4u_BEt^4QXG)?LeCv(x!%w!LvZ! z4L^l%;TKJ7)(S%qu z!8c8&!)dSqu7`&J`{!5)0%mJ_BX@+W>*hxD{@PJApcy5sPNDu^DY_MjM;a#%8p!8EtI#nWi~6jk&V;k!9H8Fj#J~A^z^Bd0f#%l&dC(mHHop;W z0&<}_^)`PUJ^=jK{E()l>0ki)T#+ke=BmR742w+pIYIERtw=uAP%ke z0_SS=siw82y{&744QNwq+SHmhwe~>(LeLu80_SYaIa_ni)?J}H;MdlRfgEUkE}Rc5 zVKrO;7r|O6hs{9ST9X&8Z-WP67tq$$w6!&P*qXMsrmd~9uQhFLO&eSP2tUIwn%0Im zv_V&GOu)`I*x3d<+hAv#2G9ubL7QgK3Hky4ZbN>w84Y9MYQPU|sJqRh@CJMcU&FWX zy{5H28Hj0H&e66f424r*4itmH8E_UXgXaOe+rA6Lr=13AKn}DU4%FQ)7dW=v0$2p( zUptO(w*k;gyUp-0JObF&jySb@5}t-<;5m2!zJRX)Tiao4yC2{uKu7Hja07m6AA|_h zhPptT+T)}4Z2$w?V_SRL*StG8IyQjO(3TF>fE?|R z3gl-8+Sb7f#JocYXkUkpFdj~YtKdN(o*iofxzKSC%!GM>{T=7SLRbpt!3tOfYv4k- z7>Gwl;?eOMpdB4=fNek=I=%te+Yx&^VsA&{(eXR@0e;prT&i`V4V@apWH=3$0e(c5Vpmfl52~hDkuo zI@7++i-ERvCf_>~kIq|xc66p4oo|Nia1T5Rd*LadeVxhW&immNAV!_BsWa{D{5gCH zhcvAVZR|oDyI27Gy12jt*w}@Bx(m71r2#a8cF+N^u?q)w83^QBm!U8mCIh+F1-rXs z!dxhX5}+MjmHbG?uGl{0oVhN!xQi{(5^18!h7%)5UVaf z0d46@Te^~KT~7e~-PH!PsVn~N+5~z4wsxHc#jpSb@NHLY>bf4tk*-_edbkm=rz`b! zeFNSG>g`HScKrnKW7h-l4SWwj0(Nvu0{qzxTe@LOH}a=jGiU*=0Y7%bkKOQNH;nGq z9eP1u7yyG|7>tBbFb3wqO1J@bz+0NuopW~&Lrb81_e@v>7Xd!)z8}7TgPPVO73@HK zd!V}>0pQpkwctdk2gJDtw)SWW9icN|Ul07&V-;Kh_^8JQD2LYpKlJzvsHX?<=-CCx zi=MQh=TH~{7XruhEQ3vec6z=8UxGRY|MkRwz3@*j>g$C+di8`pKzn*EgXM4@tb`}w z6?hHa0OHcSHeh#ej_b{Fz5Bx;z=qz~&>KJY9t#s-GMobBKyPxO_hL8=$c5f#0`>Ji z7s!j=s{#9aUkp3pWlig&1M%up3U>oO=z9`OfpdVeeJ_Q}VLfaF{MC0G+zi{{c1`P- z3L!{?R?rs6i+=dMUpJsF{b)-++R~4<^rJ2PGGRK*gxQb>^PmXk1ODo_1WpIq(~r9P zVRL_M?%xLRMSpzRe+S_E0d)bt49J3P;M@Z^_W*n|fO8Ev6=>&xvw*e@AO-{Q%Yduk z7NGqD_Q0d?80>}Tf!rJL3J{|KpTi+d8<+$ZFo4`0m;tk(5IFZh&OLA?Tmn}BbqpkD z25y3z;10mK*tVQ18HR;TKICR0CW}nd zLKA2P_676KL09ANYZK28W;lP{-g# zKs|%0V{m8a2E=$U^$qR^rvW|~d=cP-!Rz2k*Z|i8^$xxf@Wo)_I`}rA{~6K(rUJei z!rzDRw;{K~U9b}#fL*W~zSFd!^`I^EfT1uJCO{_S0r41$Ekm(o=vuf8h{w>YfI5b5 z26B1mEr1O}?}WR7x`q;$q0hsYnl`LDc;G~64ET2#whn6rw0~GP=n1`{Ka7A;fIY*; z1GzWsY`~6TD`5>>2>4^zHE!S;K4C-$pxzPGJA!&g41hr}1~MQQ76P#v zAwYhPSPtjID!^YOuxrG%fK4N?X#_TnxE0XS2<#d0FzkWH;YrvB_;19Anl=)9Mn<7N zkh>$BLUU*jouDgV-^c+l7>2G&(1yh?8i_${6MN+-Y4$**+sD;>Mi z(_u7>17em=4y9KBzDdV7qsY5aSuh=D!fdz>@YN`^G>RM>wNukZW7B9GV8>_|5VO%7 zH+miv0_`8Y061nenj4LOM?VI%aZC`fdrU)U49$S@W0u01fWOAzuQ5--tMC@Q3m?Fz z@Hvn>W60&Pb|5}uIp0|PFt!PBzOlq+EO8l2-i+-FgJ1{@hmkN5robsM4f3G~=EEX5 z9muD#*fSP;#+Jc0xD)WfSmHMJKG+N7%h>1OMZn&%uLCxZeFw02>=%H&W3hK!5?G-c z)ByZ94*!kAf8+d62Tp>Mp#ijkj?e{Y&$vF&4+aAHHf}VGg9$JRav%?g!#LVAZXqm& z)1Vaa>$vk_C9H-kfwqm?4CKPN>w!ENcQb5p*b*Kq; za6$;8P#aE!=FlEGL09Mjy(G-w6HVPa1pk0x^Ni6ek>PsHaFC&N_0*AvN=i7S9QCte6^fx0JN1^9U)ex8U8 z6CZ((x#d;^i1j4=GpQv|&!l$H9q`d4@^=#Lm^2oM@g(Y+bPCJ>Vm%4}Ou|2ti1(yL za4M9-QaBIJ2Vy;m*iO0??grX9=>gaUkHZu2G&~E>13sM`1Y$Lr{F*!kG9U}41NBXw z3k7gGP}k(M;2faN$+Um+I=BMX!$x=uK8G*hOZX~wt5KU$ou8@T05|x6x~J5G2GAIq zK?`UNZ2_N5=>z>>AUp~$zfHXKA6@V@bxruXxgQ4J3I@o!W-~5ybGVfckl!J1hglU_GHqYOdXuy z1KN-offJz~;LFTLFa&17e89F$finTSGFQSHxCkzR%isa{TGO&T5C!6q)fIXGzRwy9 zoG%MMXDtHqA&a(VodxFt`Iof{IB(XKuoZ5A+ujZ|DoeESs2R6SHh|lsyvgb2fHoj|XCv zeKFh#)R~Pxr{k~b17IfLm+70}de{cHz^!mE>;~+g{ut~9+A#fTcnyfx^!I@HPA6v5 zzXbd^{aa0&;exi%3$Skn_RYY)8R>v+GsXcqH6sVGZw8v4K@QD01IX7ID_}K{w=>oP z`7+~v_)61ex`DXQ#1}KWKzE=mGsghuo0$s>;WQxjGtY$Oa2~7#&O7reAWkzm=gfzI zcFuehXyeSM;2C%xh||nh;B}yFGl|vAgYYB#tZ7uI<)i?4nPb2SKrC}op)m}EJfO~; z?eG#D(zIFFKMU>68V}PT8;HfMSx^W|;B>(LS=c`dpUgT3h~unva3ySj&2SA|2gGj{ zw$J($e$cepNnio&nvGqv9f0p<`ydEm=mYZs|IXeBHvm4FjZbFdi`m#aoAb^70%&h; zGSJps6KaAT$k|-Zn_CyspbfN#PC#sO$<~m>bE_UT^gPQ?A=H3o>!QF5#U~}$+unXSOv^hyo52$m_Y(SfH$mu!H0y&h2 z-FX4P2YI!i4m5&Rfc<&xpaal`ye=>hh5_2j8x0d+GMoa$FYhcUgB#&CxD&7~Zzntq zd*E?EKY8dU?*~oGZvsOApXB3{{1R9QOJNmozWmKVoAYUJKJCrF2Oa?8lfN4{Z~lw$ zE_?)^!WZxjd~nJ= zALc6U0=L0SK%MhyLtmH$%Yi(dw+o&Cd@zq#%zGYQhYtYz=Y0a70d1If z0DjT50&=*(fD^z5PVj&aI>K1U0^(ed2iR6n1msr%`BgxE6_8&AXsF;ucvI5~lL4O; z;*-M0&M6Vl?t{JX z6g&g8w{Sna479nBHW$+7!p}9W=p<+XErIwHwE<#MbS-esBF zP6Y?J!3RNz0C6s^3nxQEXadcFb`;Zw;`V@!in{_nD!vA;gBt)J6>o>z;VvM*i}6`8 zS}sO6#e3j!coO!(bMPYIzv9<`SQftn?*qOp{uIca;;-OaI0&?-nD&&=o)X$qLVHSR zPYLZQp*7Z?bGVJM7% zrLYRtz=g0Du(9Mbz^;-5@QtR;?+>G4ER2UqupaQs{OjRHxEZj0K{deM1vSAA>2L~6 zgDfCV7jWDHa$*5KTyQt+)U<^faLhs*(9VUlb0KvtoDMT#7R-UIa3|~l{J#+YFFdGe zi>!dJ7M%c`XVGw&3{xQksCyAME~2hQU0?ad9oE11G^;I2BF@fir>J zUHlmAg(qR3rY*tNC1HpHaackemT>G6j$OjBOE`83$1Wi+mXO;^$b}^@!K<2fYCUKP zt)VS+0FF8Jd{_yqftZ|1-kka|dc#2Dr;Dq27JV0=FcbKc|{qml*t~DQq?0fJ1+fO=k=FB1pIu=K^ z9joByI@ZKqJO0Ga{K_AAx1)DEdbgu@J9@WMb_!z7PHv`?o9XmD9qEjl=+uK99Ol2D zImXE#=v)$ScJ^lH8bs2I;f!PyWASsH&vTK>=(|g4{9G45*QFM9&}SEKb%~}oX7A$N zE`Gj?ce{AEi+8)4x2t)(db_I{UCrC|H+tgzu6^jw77lO-HM-hex188@w_=#Jn?AaI zfjxEeez)KGi+Fakhke*tcW-vDM-&Zdg7> zTaJBRz&`r4p&jq>As-{lJ~HfMCw=U_j~V*dOP@~k!|&BT!x)Jy`^d77Ec?i^&st7% z1O4^UUmyMTl~rH8^$jB}Imk^h%2JMsR6#a<>k>sHn(zba_uYVRsqbN~;+?(^gP@;z z`>EGY_WerYZu*tSjQy%pliH};Pfq>bMa_QZ>?fywX6z@YeqHEJH1h8!|9U7^gqB(22{Wd z1MFpheGIUR0k6=K*LZ`sd52DnWhV1jh~5S)!+i}{kNX<1nXTLof`LV`hBTt+?vZ{ZdO-VcI7avGG45|qZA zgXA>GjDxCD1NjfKvq9z^q_;uu@ID{nJ_p(5pwIb=Z}<*b4*H3o8Oj3oPr zhS=v2y$#XZ5WNlY{t$(RjKXe**zFMC&XAed@sPPJU=c@yU}zT99$JltyoG%X^~O+j zhpIQU7sDCNI3_Zc>8LyOAC|L`BOK!-XE5i`OPFz}tcKp^9uI?Hn74;LPc~j4CvJ3D zJ_=BfA{0ZO!}K@o6MEy#VLQ1K1jBP7+u?3?xIGO2i_UbT2Ll+1{)g*-xc-MvW-4YF zZieCi62~fJH#~vOY-0yz7$J`l`WvCQ5rrs9DavApBg*5hM!2gHt$CAnyocKwA+r%* z@h#u;BQhGH{)lV1rID$zhmqbHS(tLDH?k3}c$bf`hmq=ybe|)?LslcrKGMu12Vu66 zGq9(TbC}N}mLRKSEPZ6^*vDvZj8=DydSlX% z4YxKXFZn5q8yHgpb;nev5o(TkA9Ie8(-F5m{nU&YK5(qpy>1t~&t>}f(- zWImxHRgl$$TC|}pZ{T;|gm%2ghkT6LCw$JAd`)j=unlicd>(t7DD#PbU_TR=u!i-> zYvLw$lf+SubBeQ^=OXub%(Ebvl!7#vWl|=xP#RfJ^3Ei^O={0)=xNfoxT{HipG@jX z5A1Q0o0v3~3B)jySpTd8 zX<^vIH1A9+LV47i)|j@u&AWWSCw#`2s5{LKPV0r5(_}PlGG?46`)RY7%K{d&6q!x4 z!)bfi#{mv;gkzlKH0O}xG~e#@w3vH(GrnOkb~pVn4})Na-e**%Hg+*X?=u?Finp+j z8TK*5K4$2DhW=;R%Z#7V{|wp9klhTq&FD=(1~8u;cxQ&bW}M+XdYW;QJGiSEk9ZOU zGmGLLX8uN31`@+m<`9Q^Gk24Wd!2a}bI!bqJZ9cP-Ply5;W?fsKk|>YhuD%tApcmu zUt-N3Yv$NCm@QT|vGx@EKYqlVv3iRAlTPR@wgYcz?E2Gm%}ao@4DG zb|LbMP2@%p{F9w3w8P&1G2cJ&n8%L=v(k}~EQI4*nN znq!t(ZL!Z;?r+vF=y%q1JThx83vdUsma~%8*zc^}Bq6t1N4bc;XWix=4})NK2s@sg zhVG#U-UKGGg~vfK-(Kdsh534&-;gG>;eFJbZ~pmibbd5_Fz5Us3}Ynf z&Y!_Q$Y%b(tY;HjaRc-Bun)7(cMJ2)JYQZ5%(g%_3&P1p4$QegPYVj*P8aBHK?x$M zOMPUwpb<@JPD|vsKz<8e$DJAw~-4BArxo`uEBdCX6EcV7?br-9*_Eu@f^cmeb;c93~m_E_SPn&9>OREVjpg{a*Pu1*u6(dNPuQaI)eq|82>S zc=O+791DUaDbfEDSuS}GSuFXIZ}^U1>4N^3=zocwEU}X%?rzCI-0+e~m|@9uW-%A} zEs@`n-N<8Uh%nNjx25`8nhp6Z%}FszQiVwLvowlE*yqyLyv7^6MOV~cYClWuW$7jC zVwrcAnSYtvU8df$GE}EF@>wRIWlebn`&g##vJWutGBuaUeVG}TnQ@t%mJMbYBN>hC zmrZ0bOIgkeR|;iL;M5yNG*-_i4{(e970iwYXWxI!=Fa`is+FoEwYNTb$nF^cLs+xJ%sR z4)=K!1S?YDrdGJA6?$KhiOPJA+ADk)D<&Z8751^h8!OaZq27uUT;&#bdBD>kSm{<* zs=G23?s8=TDp8dhL}JdBQJ8V1tX4Ls6|ds$m0$4<-|;;^@e9B6C!Oemn_VfZm8&@w z1gp%l%3fEs#CNbt|EuP+g99XSlw+Ld2DiD#Lu9n-SrDuak&@@gPEPV*meqxj-|FJX zX|;Y=cR+8e|DrQJh^7zy7{hq}!7f+Z5F=6CJ~DpSmOrPtYR&0V2vACquv^`ui1r}*IW*QwPsr@o3&|3kIdJabFHk_`c~KG zA}{%In`^63jT+RV4)rnnTKTP&-`ZDb!B?1h?Hs(h)^6A3CX#oN-MUf4FqIkTf89b> zup0fZ)Bif(*g88|w-33kJIZm+aGpzC34--{Utfmm)Wuz`*VlS|t@jv!#nZ4 zu#b2%$4_G=Ygmu@;$;-S4c};dB4&-(SNvg;xx;-P@|dSVutBdI^twTQ8`6=1%-F+* z=ZQcT8{Er=VJtAe)4fJPU%21<}XGid3OGwW*7IHa4U!Z}JIW^BsEL*a3I4u@haf z$BogEE2>)hf_5Nwh4mT-zv0yA$h^Oo{dqAE3r#D2Hf@0Pc4>s#LA13to@x9EM# zmwb(VZ}}cGY#D?ex9q{2TkUqMytaOf47N^U6?)z(|E=5E$w5wV8vSq8|5o4S)+=1Y z&29@}hHYucNEV*QUbnf8ZLjemdfVnMw|$Ggw%O}8d)?NNE_A~#w0J>|sYWUZ(@2h~rog>{M%~ zKfBXhJ7u+V2zuM;j&}MpJLR%dk2^P$$UY8`#1ZUk=W+DB^Cow=&yyh76_65d>?%kD z+F*aX-sW9C!Y+4xhJEgm%P#xd)r*1XXV-B4#vXUsg@9v8_yT>q|NlalnYVBTvZ)f)kR_L%SabL1HdyV2(ulOzcWD zeUN#go)h()=&eNgC#s*g2=x=yPh5$eCaRyf6MIZNfg4CX$7Ot{i8pWqds2{v!W5$< zWsuvR3RFhEd(6J4Hucck9y{Li4)5^+zPCM}VkdjPAeS|3~cPi2FKXh9mZJ#6FJL#Syt3`I$fHNEf;>jrHu}07>ZW$Z_1(5w~^3Z5?r2 zM{Wke(LB_|j*r^OQ9C(0lF>|N9_k%Uz|2R@d(^x~lR1SskNPH$Ug9B7f*?6Pey=1y zk9?AI^CIpb**=oZoE*ukm@!#K$>vLbpO27zvVA3+HCbQD-_w)c^u>K94`c|#(QmRG zljWE^o{6mFNDzo5IOfe`4f&cu%w-39KIVHkb`QNDdmIGEQ$n+?=cNQ? zF~jkSRHG)faeK$#Ll(yeFq9GK?YO><>+86k9(QBM7qOO2Y(+oEcVoZD?e};xC$Qra z8HvPxPT0$d4)nqYZ3ZJifydZuNv)J+YVl975d_@;_nTlWLxn(McJdl+j5u zp3Fl&UZOC?@V%Zi+evqMG75V<*_dXupcQRs%NxAK&&cKEGQ4^6SrD8mLKF0VDw-+G z#(kYy$YNHp5&fUClT+IZ_AmY^|T z$uw=e>WvI1!Ym5>;_q=iS!%2I&2KQ+{MBYM+B1kF^FkNQc)>kh=tF-7;q41Eh-DUY zn2&Gl!oMsfj+Mysg8nW%3WAII@#e)(=*wJWd+|yTT(XBtS$P4sdMOWuDTAF{Du)>^ z*~_IWMA3v-Xvu5H?vk6k^bWrvk4rMRq`yo0yQIHM%h21URk-gC6}X1Tlq^)4rJjMJRsBGugdkR z-mluh)y-@}?^kz|#3|08|EqR#^%8Qr`j96bL~ zP)0C{u}mO_B`il?*WJN&JGj1{1U9jS?bye4`?!8J2ySGe9NxU~3*%VJarAyOFGVPh z-fxznGPSXfo9^{yBbs1_o6WI{o9|)41{Z*3fSof9prsW-p)3-otiXw z=XOTi({1zKu7!+l%jkAP%y|11WPiI2ZIS)$c9`w9zHWEG9&i7~pLC)N-O%&xUi4u) z30w?OVRh8WbELMZ|=@nu5q77=>M+%@1`IXVPwUf-8IAAd=#Q6 zC6M3U#(c%E{6%Nw#D0~yamX5;tEUAJ}DZQWf-Ja&9{3wC^0Zg=%`uOx2Z z-fMiwPuRshZ`@P&o_hBtGmphAC5|=7?cN5|z2^q*o#MZm=Dhbb2=0e4<9#{ZPfsSE z!@T!jz-;$@SNHAlet9ZVh3dGS`;pY8J`Hf2_q#9^Z{EKY1P{Wgg#I7=$RK3#U@UIz z!6af?i2fhg$%AE>;eow8u#X3J@gNb|JxJmx$2l1U58c_rf<#c6YUu4@Z5raf9=flG zEoqHgcsL6?erP8T?d0KI9t6Ro6l6iYM@2C6BlA8o@1t7O!<>&Aq3)wMX~*Y$!~Zbj zqhImPqrY&gj|MP?d6@IjznJmS3Rbg@4Qyg7JJ8o7xB2Ki7rD$eZgPivJmfL5e4Gb; zK7J3k@puY$_t@{FCvtsK8a+R0LtFIzt;J+{Ck*$p4u;eD*r#fA%)-@&O;wp3nG#ujqx|p2_6d zl^_&^Q-yZ?&M5w6HS5^GMs{(C!yM%pCpg7*?r@(+K`0cEk}%RzgvPYxZQkVrKH)RI z;48czie>ZX{; zTvo7~y&ND3bEY_s8B?6)0++cKgi?AtWg60vflNF{R7%8WWnD9 zky>x5^_5y*sq^y^FH?a!G@>cZX~i4pJN3JKz(@2&{nW{v<8}}Vvx_kAgqc6A0P2NR zrarO{YleKnUZpK>qHdU(!+u81umPAc%#2}j4;#%m>?>?C)0oLB*0P=rY-9`D*@+y( zEt!8n={Y6Z%i1CAu zP1^AuAJU%B_>)d_p&LEug$&d8XCOlu#t0UY$lV~6!J8Rs;*K)(ME@Cl3mHyuktHiOC{uY}uGYOcoHwD)gU4|5@xL%SQI% zp9NWtaE#NOLw;E<2chTm{#p6WrCzt2!?zz`_i*|J9U+nj}w!*e|=rUw-s)W;qE#70greRg#3>Lq32VOikGNEd%XF4EW5ZJ zgtBJE4P|Y~o7h2C-&ocU_<|qkz_0v4M>^A$f%vYnj$||wFiTe7QC8VyjYk$)|9eMo zSs(K(2xZe#wlLC>f!w@ENqjTeDpG~&*l)Hd>^ECe>^Pf#vZeY-Hh2~l)XFA^r1h#*X%>_O=b5@ zWuMJl=CcSHW?x1et60N2j`1`Iy-*NuzVJB%Sb+XtxE_RZWa0(fSB|{oqZlt!0sZID ze-1mz;qG!o;=9Vx3Nz$z!#QM^<2^p)V`QCUGV{<|j^(UGUpY3ih3)Jjkw-x&XBpgZ z&Npb!FZ@n72BBWgX)I(ZX3e>Z^&}vZoa*L0#1SrV75U_pPfmA`^S^hV2BBO5Suk&| za>zYb70j4RPPyt(pN2F+_PN|?E`8{D>TL={c94bNxw2#$fhb$w4T$ zH**)JDc{ncS!~7*a_{3HNu1&`*SN_Y?(>kxK`2i;G80ZVWS7S*dGh0%%M*z#@^~kY z-tzp+Z|EscXS(5^2YH4uk}0^WJad@OBJ4NMD%KK@9p}+cUiI_3;k<4j@0-{|Uhm{J zd*1G-mv=PNF<;)fxVOAZSjGy}%`5-BX3hIwO*7^-V_q}nl~LZOLFmO0sYpY5GU1M2 zEJ86#P>Qn1@I@KESea_nK#niIjk#YO$7<{~pWWpvgG}@3Jzp;dV;A}Ko^KQ}{DXbu zvyXiCkx&2m^q0*vCb#Ah!ZHxW!!_@Q5ct$p6|FdMO3+d&#}L zREPF>^Cfe>WN$B-uV7ZnV+RG_q#f_^0blR~9ngP4{TK9I73@f7`ZEMG6#N?*7o5ms z{Bxk-I?iwtdo1`6y%o||A$=8cSB2a{p`7HQI1%WlP$lfw->DHQR1do?)EJo+@;wz& zzmWYDvX??fu!}<8DP;b_X;H6mKHO(vc@?gJ+bmpzTGT<^!mTlHVKoc?%x{>nu$&5a zr3by}%K+SI;c3joeHNb0To$mHrO2`HO5A(lwIpNiB628FpU<$nBJR3~9E#|@XhyPQ z7e)16^hJsifqfLUkD~TbRR2ZwU(_CowxkVhd7F2UThWiuchMO1R`g$dH${E-MfFtF z-io@bqVB5bPIe=kVx?)$>wJuT6tjJ_v1VrDJoUW=Kt*hJAVe+wj3 zG6h-4hW<9L;q6o+~*Yy_8(SD%?)V zc8k~ zyu*DS@iYjPmQm?cq#-?-cn-6bE>218uyk34kKz{ z&WQTRBf_mls2lMX@9+sf@C(257hUO&oFe2O@i%6TFjs_JBJ3z)1Dh~ognlA+vlo3u zBq6hi+vqRi0Wynt5`_F)a-o;?`m)(yPDchZqxYAeCxRB}>1F$Vc`0^Q&Yvw;hFAEC zUJS;cDL0Z)#PAPun8!l?MU8UH(SJGjSx&#@^jl89l6{--0dKKR0 zGt{Z@3o@x7lM0>bhFTSdG6K0&7{fRwV*UzKSjItoFBP*=iPpTw$9&2c=((bvD|)Nq z&!}H<5b9S{zoMO19Lsp@wW8arXpa@$Kt(rD(G67G!ZvndrxlNLB?whAXQkAn#k`d= z6HYdAkee4Nfc`2~r8+gS>q>R86Mt_>s8SQ;Ua1AG_=bMSxKbi_gHYwX)Zu;XzOubk zwu{QsiDedxS;bo7*@*rt>%X!)sGN+9Dxc;8m$}A`AXG))Rm!2aD)O)5JF3zQJymJT zo3!ISKA<;oxUDK@xEX}1+DBFUsA>;Y^PyhVikP)(L(J*#9tl-#&1<}lx>emn)h}@m zRsW3oCRIh=atA9v)^j`f7e9zVYpd(%Aj{d9bzj|N#Gnxs+ zFcq^@pN*WWFTjme*KhS_L8yk_YNR1OS$Ll8xUCvRDM4jw;Vx?UZfn?ajpn$a8n0r% zHS}6TKQ+uz!)|KWNsWt`$N#w?R5KkfpkB?=R3nnQM9~D9)oh8}YRbN*-PDv%%^vi^ zd^P1$b1=ggiCJroVo>~o&;oAQ-(FSV+S=a2ccT>s1<=XYjt1@a<7$) z-Xn8U2)l^Xdt@mpQj6N?KhjPj8_TdUKF zF8JM8M^<%Kb1DecHA`K4t=p0x(SP0f_|EDcAc>-(cm!EJ&BmL{#hLG8^+nxxc8@m@CR$QNF(@IW;Qwlvd&~t-| zROVBL6VH_()G!r(uAxjDnz5muYgiJQG;Ba)n$ZIJG}Lp$fsADmQ<#o#u;EC;yNXgc_&BeKvMW zjh`nQ`fsfN#^!Ep?#AYB{5k40w)4i_(0}9J3}7%rv5&^F*l*))Y-b0%aIcMzbBeRL zp~jcE&qE$#wkG!5q%Kjoi6&-iVy-4F`3iG1F^9i417oF%z526`_ zT{N`|e@{!u-^~(g`VabRs=uasYwFu->f356*QW6#a4rZn%a3=PwdHNR+w6VXBg5P0| z>Bm5ZV5V2bGYNCOGM!jvaWDuqx7X%+Z|-NC``PAxrn#SK?q{0&v(5e4<_lTDYBsSO zeKprh^SeCYG0%cfixi|LEg8s6IN2ycDa!IP<u#QVX zsC6#fZR6xZ?+wW_u9_H8*Nvy0W-CAD{W75hVyu@ z?Nx5@Gzh&OA|+v@BLkVpf?dA;7Tqwz>;EGA*Zt>V{`*&|6#wtP=J%iR`2YSDdVTl* E0o1$d`v3p{ diff --git a/wake/View/Components/Upload/Avatar.swift b/wake/View/Components/Upload/Avatar.swift index 359836a..5f25271 100644 --- a/wake/View/Components/Upload/Avatar.swift +++ b/wake/View/Components/Upload/Avatar.swift @@ -1,6 +1,163 @@ import SwiftUI import PhotosUI +/// 上传管理器,处理图片上传 +/// 图片上传管理器 +class ImageUploader: ObservableObject { + private let baseURL = "https://api.memorywake.com/api/v1/file/generate-upload-url" + + func uploadImage(_ image: UIImage, completion: @escaping (Result) -> Void) { + print("🔄 开始准备上传图片...") + // 1. 将图片转换为Data + guard let imageData = image.jpegData(compressionQuality: 0.7) else { + let error = NSError(domain: "ImageError", code: -1, userInfo: [NSLocalizedDescriptionKey: "图片数据转换失败"]) + print("❌ 错误:\(error.localizedDescription)") + completion(.failure(error)) + return + } + + // 2. 检查URL是否有效 + guard let url = URL(string: baseURL) else { + let error = NSError(domain: "URLError", code: -1, userInfo: [NSLocalizedDescriptionKey: "无效的URL"]) + print("❌ 错误:\(error.localizedDescription)") + completion(.failure(error)) + return + } + + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + request.setValue("application/json", forHTTPHeaderField: "Accept") + request.setValue("Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJFZERTQSJ9.eyJqdGkiOjczNjM0ODY2MTE1MDc2NDY0NjQsImlkZW50aXR5IjoiNzM1MDQzOTY2MzExNjYxOTg4OCIsImV4cCI6MTc1NjE5NjgxNX0.hRC_So6LHuR6Gx-bDyO8aliVOd-Xumul8M7cydi2pTxHPweBx4421AfZ5BjGoEEwRZPIXJ5z7a1aDB7qvjpLCA", forHTTPHeaderField: "Authorization") + + // 3. 准备请求参数 + let fileName = "avatar_\(UUID().uuidString).jpg" + let parameters: [String: Any] = [ + "filename": fileName, + "content_type": "image/jpeg", + "file_size": imageData.count + ] + + do { + request.httpBody = try JSONSerialization.data(withJSONObject: parameters) + print("📤 准备上传请求,文件名: \(fileName), 大小: \(Double(imageData.count) / 1024.0) KB") + print("📡 请求参数: \(parameters)") + } catch { + print("❌ 序列化请求参数失败: \(error.localizedDescription)") + completion(.failure(error)) + return + } + + // 4. 打印调试信息 + print("🌐 请求URL: \(url.absoluteString)") + print("📋 请求头: \(request.allHTTPHeaderFields ?? [:])") + + // 5. 发起获取上传URL的请求 + print("🌐 正在获取上传链接...") + let task = URLSession.shared.dataTask(with: request) { [weak self] data, response, error in + // 切换到主线程处理响应 + DispatchQueue.main.async { + if let error = error { + print("❌ 请求失败: \(error.localizedDescription)") + completion(.failure(error)) + return + } + + guard let httpResponse = response as? HTTPURLResponse else { + let error = NSError(domain: "NetworkError", code: -1, userInfo: [NSLocalizedDescriptionKey: "无效的服务器响应"]) + print("❌ 错误:\(error.localizedDescription)") + completion(.failure(error)) + return + } + + print("📊 响应状态码: \(httpResponse.statusCode)") + print("📦 响应头: \(httpResponse.allHeaderFields)") + + guard let data = data else { + let error = NSError(domain: "NetworkError", code: -1, userInfo: [NSLocalizedDescriptionKey: "没有接收到数据"]) + print("❌ 错误:\(error.localizedDescription)") + completion(.failure(error)) + return + } + + // 打印原始响应数据 + if let responseString = String(data: data, encoding: .utf8) { + print("📡 原始响应数据: \(responseString)") + } + + // 5. 解析获取上传URL的响应 + do { + guard let json = try JSONSerialization.jsonObject(with: data) as? [String: Any] else { + throw NSError(domain: "ParseError", code: -1, userInfo: [NSLocalizedDescriptionKey: "响应数据格式错误"]) + } + + print("📋 解析后的JSON: \(json)") + + // 根据实际API响应结构调整这里的键名 + if let uploadUrlString = json["url"] as? String, + let uploadUrl = URL(string: uploadUrlString) { + print("✅ 成功获取上传链接: \(uploadUrlString)") + self?.uploadImageData(imageData, to: uploadUrl, fileName: fileName, completion: completion) + } else { + throw NSError(domain: "APIError", code: -1, userInfo: [NSLocalizedDescriptionKey: "无法获取上传链接: \(json)"]) + } + } catch { + print("❌ 解析响应数据失败: \(error.localizedDescription)") + completion(.failure(error)) + } + } + } + + task.resume() + } + + private func uploadImageData(_ data: Data, to url: URL, fileName: String, completion: @escaping (Result) -> Void) { + var request = URLRequest(url: url) + request.httpMethod = "PUT" + request.setValue("image/jpeg", forHTTPHeaderField: "Content-Type") + request.httpBody = data + + print("🚀 开始上传图片数据...") + + let task = URLSession.shared.dataTask(with: request) { _, response, error in + DispatchQueue.main.async { + if let error = error { + print("❌ 上传失败: \(error.localizedDescription)") + completion(.failure(error)) + return + } + + // 处理上传响应 + if let httpResponse = response as? HTTPURLResponse { + print("📊 上传响应状态码: \(httpResponse.statusCode)") + + if (200...299).contains(httpResponse.statusCode) { + let fileUrl = "https://your-cdn-domain.com/\(fileName)" // 替换为实际的CDN域名 + print("✅ 上传成功!文件URL: \(fileUrl)") + completion(.success(fileUrl)) + } else { + let errorMessage = "上传失败,状态码: \(httpResponse.statusCode)" + print("❌ \(errorMessage)") + let error = NSError(domain: "UploadError", + code: httpResponse.statusCode, + userInfo: [NSLocalizedDescriptionKey: errorMessage]) + completion(.failure(error)) + } + } else { + let errorMessage = "无效的服务器响应" + print("❌ \(errorMessage)") + let error = NSError(domain: "UploadError", + code: -1, + userInfo: [NSLocalizedDescriptionKey: errorMessage]) + completion(.failure(error)) + } + } + } + + task.resume() + } +} + /// 照片选择器,封装了系统相册选择功能 struct PhotoPicker: UIViewControllerRepresentable { // MARK: - 属性 @@ -14,13 +171,12 @@ struct PhotoPicker: UIViewControllerRepresentable { /// 图片过滤器,默认为图片类型 let filter: PHPickerFilter + /// 图片上传管理器 + private let uploader = ImageUploader() + // MARK: - 初始化方法 /// 初始化照片选择器 - /// - Parameters: - /// - selectedImages: 绑定的已选图片数组 - /// - selectionLimit: 最多可选图片数量,默认为1 - /// - filter: 图片过滤器,默认为.images init(selectedImages: Binding<[UIImage]>, selectionLimit: Int = 1, filter: PHPickerFilter = .images) { self._selectedImages = selectedImages self.selectionLimit = selectionLimit @@ -29,11 +185,7 @@ struct PhotoPicker: UIViewControllerRepresentable { // MARK: - UIViewControllerRepresentable 协议方法 - /// 创建并返回PHPickerViewController实例 - /// - Parameter context: 上下文 - /// - Returns: 配置好的PHPickerViewController func makeUIViewController(context: Context) -> PHPickerViewController { - // 配置照片选择器 var configuration = PHPickerConfiguration(photoLibrary: PHPhotoLibrary.shared()) configuration.filter = filter configuration.selectionLimit = selectionLimit @@ -44,54 +196,41 @@ struct PhotoPicker: UIViewControllerRepresentable { return picker } - /// 更新视图控制器 - /// - Parameters: - /// - uiViewController: 要更新的视图控制器 - /// - context: 上下文 func updateUIViewController(_ uiViewController: PHPickerViewController, context: Context) {} - /// 创建协调器 - /// - Returns: 协调器实例 func makeCoordinator() -> Coordinator { Coordinator(self) } // MARK: - 协调器类 - /// 协调器,处理PHPickerViewController的代理方法 class Coordinator: NSObject, PHPickerViewControllerDelegate { - /// 父视图引用 let parent: PhotoPicker - /// 初始化方法 - /// - Parameter parent: 父视图 init(_ parent: PhotoPicker) { self.parent = parent } - /// 用户完成图片选择时调用 - /// - Parameters: - /// - picker: 图片选择器 - /// - results: 选中的图片结果 func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) { - // 清空之前选中的图片 parent.selectedImages.removeAll() - // 使用DispatchGroup管理异步图片加载 let group = DispatchGroup() var loadedImages: [Int: UIImage] = [:] - // 遍历所有选中的图片 for (index, result) in results.enumerated() { group.enter() - // 检查是否支持加载图片 if result.itemProvider.canLoadObject(ofClass: UIImage.self) { - // 异步加载图片 result.itemProvider.loadObject(ofClass: UIImage.self) { (image, error) in if let image = image as? UIImage { // 保存加载的图片,保持原始顺序 loadedImages[index] = image + + // 上传图片 + self.parent.uploader.uploadImage(image) { result in + // 这里可以添加上传完成后的处理 + // 目前按需求暂时不处理 + } } group.leave() } @@ -100,14 +239,9 @@ struct PhotoPicker: UIViewControllerRepresentable { } } - // 所有图片加载完成后的处理 group.notify(queue: .main) { - // 按原始顺序排序图片 let sortedImages = loadedImages.sorted { $0.key < $1.key }.map { $0.value } - // 更新选中的图片数组 self.parent.selectedImages.append(contentsOf: sortedImages) - - // 关闭图片选择器 picker.dismiss(animated: true) } } @@ -135,20 +269,16 @@ struct AvatarUploader: View { var body: some View { Button(action: { - // 点击按钮时显示图片选择器 isImagePickerPresented = true }) { ZStack { - // 显示选中的头像或默认占位图 if let selectedImage = selectedImage { - // 已选择的头像图片 Image(uiImage: selectedImage) .resizable() .scaledToFill() .frame(width: size, height: size) .clipShape(RoundedRectangle(cornerRadius: size * 0.1)) } else { - // 默认头像占位容器 Color.gray.opacity(0.1) .frame(width: size, height: size) .overlay( @@ -163,22 +293,17 @@ struct AvatarUploader: View { } } .frame(width: size, height: size) - // 使整个区域可点击 .contentShape(Rectangle()) } - // 移除按钮默认高亮效果 .buttonStyle(PlainButtonStyle()) - // 显示图片选择器 .sheet(isPresented: $isImagePickerPresented) { PhotoPicker( - // 绑定选中的图片 selectedImages: Binding( get: { [selectedImage].compactMap { $0 } }, set: { images in selectedImage = images.first } ), - // 限制只能选择一张图片 selectionLimit: 1 ) } diff --git a/wake/View/Components/Upload/Upload.swift b/wake/View/Components/Upload/Upload.swift index 402ac0f..e69de29 100644 --- a/wake/View/Components/Upload/Upload.swift +++ b/wake/View/Components/Upload/Upload.swift @@ -1,354 +0,0 @@ -import SwiftUI -import PhotosUI - -/// 上传响应数据结构体,用于解析服务器返回的上传URL和表单字段 -struct UploadResponse: Codable { - let url: String // 上传文件的目标URL - let fields: [String: String] // 上传所需的表单字段 -} - -/// 图片上传管理器,负责处理图片上传相关逻辑 -class ImageUploader: ObservableObject { - // MARK: - 发布属性 - @Published var isUploading = false // 是否正在上传 - @Published var uploadProgress: Double = 0 // 上传进度 - @Published var error: Error? // 上传错误信息 - - // 基础API地址 - private let baseURL = "https://api.memorywake.com/api/v1" - - /// 上传图片到服务器 - /// - Parameters: - /// - image: 要上传的图片 - /// - completion: 完成回调,返回上传结果 - func uploadImage(_ image: UIImage, completion: @escaping (Result) -> Void) { - // 1. 将图片转换为JPEG数据 - guard let imageData = image.jpegData(compressionQuality: 0.8) else { - completion(.failure(NSError(domain: "", code: -1, - userInfo: [NSLocalizedDescriptionKey: "图片数据转换失败"]))) - return - } - - // 2. 构建获取上传URL的请求 - guard let url = URL(string: "\(baseURL)/iam/file/generate-upload-url") else { - completion(.failure(NSError(domain: "", code: -1, - userInfo: [NSLocalizedDescriptionKey: "无效的URL"]))) - return - } - - var request = URLRequest(url: url) - request.httpMethod = "POST" - request.setValue("application/json", forHTTPHeaderField: "Content-Type") - - // 3. 发起获取上传URL的请求 - URLSession.shared.dataTask(with: request) { [weak self] data, response, error in - guard let self = self else { return } - - // 处理网络错误 - if let error = error { - DispatchQueue.main.async { completion(.failure(error)) } - return - } - - // 检查响应数据 - guard let data = data else { - let error = NSError(domain: "", code: -1, - userInfo: [NSLocalizedDescriptionKey: "未收到服务器响应"]) - DispatchQueue.main.async { completion(.failure(error)) } - return - } - - do { - // 4. 解析上传URL响应 - let uploadResponse = try JSONDecoder().decode(UploadResponse.self, from: data) - // 5. 开始实际上传文件 - self.uploadFile(to: uploadResponse.url, - with: uploadResponse.fields, - imageData: imageData, - completion: completion) - } catch { - DispatchQueue.main.async { completion(.failure(error)) } - } - }.resume() - } - - /// 实际上传文件到指定的URL - /// - Parameters: - /// - url: 上传URL - /// - fields: 上传所需的表单字段 - /// - imageData: 图片数据 - /// - completion: 完成回调 - private func uploadFile(to url: String, - with fields: [String: String], - imageData: Data, - completion: @escaping (Result) -> Void) { - - // 验证上传URL - guard let uploadURL = URL(string: url) else { - completion(.failure(NSError(domain: "", code: -1, - userInfo: [NSLocalizedDescriptionKey: "无效的上传URL"]))) - return - } - - // 配置上传请求 - var request = URLRequest(url: uploadURL) - request.httpMethod = "POST" - - // 设置multipart/form-data边界 - let boundary = "Boundary-\(UUID().uuidString)" - request.setValue("multipart/form-data; boundary=\(boundary)", - forHTTPHeaderField: "Content-Type") - - // 构建请求体 - var body = Data() - - // 添加表单字段 - for (key, value) in fields { - body.append("--\(boundary)\r\n".data(using: .utf8)!) - body.append("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n".data(using: .utf8)!) - body.append("\(value)\r\n".data(using: .utf8)!) - } - - // 添加图片数据 - let filename = "\(UUID().uuidString).jpg" - body.append("--\(boundary)\r\n".data(using: .utf8)!) - body.append("Content-Disposition: form-data; name=\"file\"; filename=\"\(filename)\"\r\n".data(using: .utf8)!) - body.append("Content-Type: image/jpeg\r\n\r\n".data(using: .utf8)!) - body.append(imageData) - body.append("\r\n--\(boundary)--\r\n".data(using: .utf8)!) - - request.httpBody = body - - // 执行上传任务 - URLSession.shared.dataTask(with: request) { _, _, error in - DispatchQueue.main.async { - if let error = error { - completion(.failure(error)) - } else { - completion(.success("上传成功")) - } - } - }.resume() - } -} - -/// 照片选择器,封装了系统相册选择功能 -struct PhotoPicker: UIViewControllerRepresentable { - // MARK: - 属性 - @Binding var selectedImages: [UIImage] // 绑定的已选图片数组 - let selectionLimit: Int // 最多可选图片数量 - let filter: PHPickerFilter // 图片过滤器 - var onUploadComplete: ((Result) -> Void)? = nil // 上传完成回调 - private let uploader = ImageUploader() // 图片上传器 - - // MARK: - 初始化方法 - init(selectedImages: Binding<[UIImage]>, - selectionLimit: Int = 1, - filter: PHPickerFilter = .images, - onUploadComplete: ((Result) -> Void)? = nil) { - self._selectedImages = selectedImages - self.selectionLimit = selectionLimit - self.filter = filter - self.onUploadComplete = onUploadComplete - } - - // MARK: - UIViewControllerRepresentable 协议方法 - - /// 创建并返回PHPickerViewController实例 - func makeUIViewController(context: Context) -> PHPickerViewController { - var configuration = PHPickerConfiguration(photoLibrary: PHPhotoLibrary.shared()) - configuration.filter = filter - configuration.selectionLimit = selectionLimit - configuration.preferredAssetRepresentationMode = .current - - let picker = PHPickerViewController(configuration: configuration) - picker.delegate = context.coordinator - return picker - } - - /// 更新视图控制器 - func updateUIViewController(_ uiViewController: PHPickerViewController, context: Context) {} - - /// 创建协调器 - func makeCoordinator() -> Coordinator { - Coordinator(self) - } - - // MARK: - 协调器类 - - /// 协调器,处理PHPickerViewController的代理方法 - class Coordinator: NSObject, PHPickerViewControllerDelegate { - let parent: PhotoPicker - - init(_ parent: PhotoPicker) { - self.parent = parent - } - - /// 用户完成图片选择时调用 - func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) { - parent.selectedImages.removeAll() - - let group = DispatchGroup() - var loadedImages: [Int: UIImage] = [:] - - // 加载选中的图片 - for (index, result) in results.enumerated() { - group.enter() - - // 检查是否支持加载图片 - if result.itemProvider.canLoadObject(ofClass: UIImage.self) { - result.itemProvider.loadObject(ofClass: UIImage.self) { [weak self] (image, error) in - if let image = image as? UIImage { - // 保存加载的图片 - loadedImages[index] = image - - // 立即上传图片 - self?.parent.uploader.uploadImage(image) { result in - self?.parent.onUploadComplete?(result) - } - } - group.leave() - } - } else { - group.leave() - } - } - - // 所有图片加载完成后的处理 - group.notify(queue: .main) { - // 按原始顺序排序图片 - let sortedImages = loadedImages.sorted { $0.key < $1.key }.map { $0.value } - self.parent.selectedImages.append(contentsOf: sortedImages) - - // 关闭选择器 - picker.dismiss(animated: true) - } - } - } -} - -// MARK: - 头像上传组件 - -/// 头像上传视图,提供头像选择、上传和显示功能 -struct AvatarUploader: View { - // MARK: - 属性 - @Binding var selectedImage: UIImage? // 当前选中的头像图片 - let size: CGFloat // 头像尺寸 - - // MARK: - 状态 - @State private var isImagePickerPresented = false // 是否显示图片选择器 - @State private var isUploading = false // 是否正在上传 - @State private var uploadError: Error? // 上传错误信息 - - // MARK: - 视图 - var body: some View { - Button(action: showImagePicker) { - ZStack { - // 显示选中的图片或默认占位图 - if let selectedImage = selectedImage { - // 已选中的头像图片 - Image(uiImage: selectedImage) - .resizable() - .scaledToFill() - .frame(width: size, height: size) - .clipShape(RoundedRectangle(cornerRadius: size * 0.1)) - } else { - // 默认头像占位图 - Color.gray.opacity(0.1) - .frame(width: size, height: size) - .overlay( - SVGImage(svgName: "Avatar") - .frame(width: size * 0.8, height: size * 0.8) - ) - .clipShape(RoundedRectangle(cornerRadius: size * 0.1)) - .overlay( - RoundedRectangle(cornerRadius: size * 0.1) - .stroke(Color.gray.opacity(0.3), lineWidth: 1) - ) - } - - // 上传加载指示器 - if isUploading { - ProgressView() - .progressViewStyle(CircularProgressViewStyle(tint: .white)) - .scaleEffect(1.5) - .frame(maxWidth: .infinity, maxHeight: .infinity) - .background(Color.black.opacity(0.5)) - .clipShape(RoundedRectangle(cornerRadius: size * 0.1)) - } - } - .frame(width: size, height: size) - .contentShape(Rectangle()) // 使整个区域可点击 - } - .buttonStyle(PlainButtonStyle()) // 移除按钮默认样式 - .alert("上传失败", isPresented: .constant(uploadError != nil)) { - Button("确定") { - uploadError = nil - } - } message: { - if let error = uploadError { - Text(error.localizedDescription) - } else { - Text("请重试") - } - } - .sheet(isPresented: $isImagePickerPresented) { - // 图片选择器 - PhotoPicker( - selectedImages: Binding( - get: { [selectedImage].compactMap { $0 } }, - set: { images in - selectedImage = images.first - } - ), - selectionLimit: 1, - onUploadComplete: handleUploadResult - ) - .onAppear { - isUploading = true - } - } - } - - // MARK: - 私有方法 - - /// 显示图片选择器 - private func showImagePicker() { - isImagePickerPresented = true - } - - /// 处理上传结果 - private func handleUploadResult(_ result: Result) { - isUploading = false - - switch result { - case .success(let message): - print("上传成功: \(message)") - case .failure(let error): - uploadError = error - print("上传失败: \(error.localizedDescription)") - } - } -} - -// MARK: - 预览提供程序 -#if DEBUG -struct AvatarUploader_Previews: PreviewProvider { - static var previews: some View { - VStack(spacing: 20) { - // 默认状态预览 - AvatarUploader(selectedImage: .constant(nil), size: 100) - .padding() - .previewDisplayName("默认状态") - - // 已选择图片状态预览 - AvatarUploader( - selectedImage: .constant(UIImage(systemName: "person.crop.circle.fill")), - size: 120 - ) - .padding() - .previewDisplayName("已选择图片") - } - } -} -#endif \ No newline at end of file