From 360d3c410349ee354255ba8a5533621467dc700e Mon Sep 17 00:00:00 2001 From: Jolie <412895109@qq.com> Date: Tue, 4 Nov 2025 16:43:03 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BB=E5=BD=95=E9=A1=B5UI=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/images/login_bg.png | Bin 0 -> 237201 bytes lib/generated/assets.dart | 1 + lib/pages/mine/login_page.dart | 422 ++++++++++++++++----------------- pubspec.lock | 260 +++++++++++--------- pubspec.yaml | 1 + 5 files changed, 350 insertions(+), 334 deletions(-) create mode 100644 assets/images/login_bg.png diff --git a/assets/images/login_bg.png b/assets/images/login_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..e52b02bfb87c0d67a3e7358e8cdc3b6dfab5902a GIT binary patch literal 237201 zcmeFaXH-+$7B&nKkfwqN2qIDh1f=&KrPwGcO$be-N|)ZrQ30hXNEZ@C>Am-GM0yDj zAwXz~^xjJdd^_HI#<*j=2F~~I9q;g$XLz#K-fPxp&iSnEtNWU_&QLN_5)l!dxpQ0P zArTRI4-pX^IXM~dHx}{?Y``DHt`BeBB+Bn*nIj@%Bf6t#d|K5=R9gAnDYqpxg}Y7h}Ih=iPm4SdXh zz~40Z^|}YX!%*~Gn6G_Eas01;ZDc}1VnYo&dFvpsEirLY-;%!kzxZtsQ3TVmFZ$mz zToYgeYggl5^Bi}m|NfQ+E^_Lm^W%T|nUuulZiVUEzxgdl-0Hu(AN#iO(jX#@xo!T` zf1v_!P&4(v5Igxh1{yf;Xh0L)u}}Wb+mZJq{0pHILHj@;@z0n7uM_PA*p`@C>|Y3- z?Y<#6DBTT9uk|nF#0Gvsc7lQa+T|`4dCxmX#E*Yto+LJ%|3c`0jPs9ip5X6)jPt}m z^CxotiJZsgggnDZof`Ui9VDTt1@kv|2|Np;qrYW+{Oe!PwR zDTw|QL%n1A}5$Ck?Y8sJZ#^G_50_=drsCj3crjXx8jKNF(kZRF2{ zh#-plui*ZSFaPfvU*5PJoBIzJ;Q#Cu{;AymRPKK&cLFj04+-S>sx0Ua3FHq$>Gv1{_%$da(qt*m|XrLf&3wX{GWy0|NhM%63FobewshT<3Fr; z0yW@2W7|I@5W*<#KP|!kM_Wm7Mkq=|hBX?+F2fpw;FbK# zp0UMll*Z>hdhx$8_xEj5=eI#bU8+Wohg#4^L7C;~#=`>QM5#OOZEkVu(*;U3%NjXe zq5pmx$BfR!ih{orj}&y%ol@qIY#LPG$Wfblb_yp2Jn+Oh;8I4(svT6jPczw@qMIea z-*?5cG{$zi&2MkNiihz8e*iiIa4q1Dj-tdB=RDlLgtY4t%BuUbFGXK2iEa1RvnwaA zU$q04n_h~oovhRpY;C1qQK&}5{tta2WaBx{#J~JGNM{A zQK>FqtnFW1Uh>KT^Z=P+U9I{6likqzi82rk)HH-Q|BI!SI^dw`hefCB0uh=X$!iQ~ zjp!zA(Zq-fGP#p47AxR?+a<8+(L;qt|p4cjt85f%gT0qB|$9o`?kA+w&`;B`4>F^pCs;~*I`4T+?*=t(-G7MY%F()0&B{PXlLiSU3!r3~?yNt(mDBe|Yb>zHuRmKiA=8lQc5|#63BWMl5f8 z-7Pnb-lpI|7m&tXiD}zJ?^HcMQD0v6z`LKGUzvtH+nh@;ksDV0{!MY}C&&M~+;0W& z6u6EifBR@B*`gxgjk%+a8Xz#Flusg>ur2?Sc%S1>Y;V^+J~)?mEZ#)m*abkxt3)qHKD-zbO)OYmH7~e&;v16zF-t5#uhxNcsYGLGLnFU}!VP7y zwdR2Id3~~+r~x_A?(}9P@7s={X0945*%`b%an(f_5T18^wr3*!tFvI!0!rL5w*S8t z7C(VG&KJ1+vL+`5{*$d~@;o40eT0dJuk6*OO(uOMP>H3e=~hXc?myBe=t|Hvzzf0) ztcCDV!ext7IGJZ-CSahL^0)f`-|d7I0pYyeS}fEkS5hmVgF1Q2-eb5zR(}V>d7@VG zxq(a~F?`6Vm=dia=RZAoG#snHnBF%3#FDt|q-&ngVZi!1=Z_p?7SWu;tGCOCHKO}7 z-r5gHo_I?VItEyh4^Lh9UrU>bTk%&j7IIC!b%~SONA=}SI`C~08#PhVnw7Qyspzgq zhh*dRO>g_;a?=wd99#$xRQ=V0%I>*0xd@Xr(ztGv6V3mM^0)GWX5)`Jd$8^M%z3}F zU$)=9t(`(#f1^zJq&K}-4H#g9oZARbveT*YpRE-N)*qmJ<~^fe)W0S&p8Q0WpgM6~3lhQe8lz z)HS|=JL!Gl`FPd%jBBP0`MKFMp_+n088U~yd9Qk3v+FX1`P<+3lTA&b+#TMG6 zxfTivU^*_Nrtp{6hM~=>X04zM?Pr7B*rmcljL06-r^K$1Tx+M}J$$ze@RouIpSs35 zvASpVzC}&0qFWtDo^pm0vY-s*VoZIiwCh5Qm0(upf{E5A+sCEb)+a#vW_*_Ih?Mc4 zjvKbFv)g00&9JE?r&fcfNS632I81w8?9A`R+>Y-weA7IW(!KHQ`2C*K0@nSQ|GlEC z@}ih&+5S7X7%?Z0OHh8QQl$8jWaGX%D*5hm^j_ag@0i65`>|nknFDw=evb^~$ld*q zJGqM3pPi~^j`gp>axPXC0YMX;N3#G-+q?eBBlbhlwPUTh4yXY(+xL)Rz&X`=;%n3I zr7D`P2l-NL@;l3N*Ia3PJibz`3|X2IPwMaSuv9uh4S|5AK-8b3tQ|l2t;um47hix^ z4R)PcVU$jZX2`ZX(y4l{ru`W;e;o7_)&w@WwAnQ$CIt>?2a!{_^GBDxSnF<2Od(D!xoTvDvHH#?n}Y0- zcdA1KwOx*tQ@9FHp|(dD9;LoN=sRd{cY*|z-<|HLP*~sv&5%pGPmjlPmsreQ$aGa} zQ#f`fBLiTk*A4hG$fb$#(Y`TgiB5Fs0y87jj$GP*US1dWP!8F4e0ns}$L~=OgnACg zbN7T4uP(*!2!i}6OX)IzEYety)V<;>0MqteJj{+f#-$rB0vR^{8&?L>h@!m3G9IX> zN?S+;bWPwuzhgtdR>?S?qEo-Elc!%$*;VRzqXba(rrO>(RUTrOYd_Y;7vizSJI7ro zVEy3-2q<;2Z%gTHjGXA4`MzOB5Hs-V&Pd_ZwS212tSjgo|@3o(Yp1Q90 z$gDzhJNXNdf9x1nPSjrx{w{_g#~hFdx&iFfT_KC@-a`L$lg4^TjopB!$fGpjF0@`z zV5|-b$nzrzYkK5i1{lq?wDD9kM3nJZ{fz*3iSrhC#|-fT`LX z>h~;A5=javTuZK+g2%=K@{zmvZRWPA+%q0*hWosnO5d-@zKoH;B5-`J zU;CW7yt}k zGaAQA>Kjl2&t>goJSjfxLz%}_RfDm9+Su@zum%~B0HA~Tr-4Z03i<>k9aBDX>M7Hb@xR+QdN?|E`?!V` z_%d)#Rv&-+4DExl#+z}Ki4F6veE}jX9IH;CFJg@eQG23^dBH`DHOIC#CPV=H@|j)0 zqs8sQH(ZX~tDBfElPOhBdg5e6_4JpH-|Yt8@`nadA_jrp zGaRgltcDJr$BN^du_ltD#NQLYOXQ}2QJNo52zwLEK-gQ+8O5tUCCuv}9TYRSV9Ou~ z3gmGfH;Vrgj3Ttn@ZoZDq{euM$65YrveO;E;5?;o zm-58%{pJXhX^CSc^Nt39Dy3Z+7C0_^iPX$HvH99%I}d3L3kbG8P*~R9@~|r-GNSrY zb$s>I6A!5BWi(c!7-G8n26LJVFlTuA6EP_U>B}))`s|gLN_GxqdG2g!KD}{Ve8V$^ z1Z@N5{L^tia9(Z7%a@~rV)%h#4zr@_HN8EJ_L=mH?TkYkj#eLgE*(1HT<}RC(Gl6f zD>SXz)*Hc6))0Mq8FD*;%9?I6ShjY6c7`|uB9ltlJ(to zOa#I*k6!pE$jZ1C)oFV~UEpPYYHc&Ts6(nM*q5_kT1D1aAnrwCF)Pk}e~D8aovE*@ zl{!y2!oA0jQ-b^UcRt~M^hyLkn?lei8lxzo9z}(cz4?{pG|&CHjiVyZj1C9Rdl;J- zF^NI{BeYjH%o7tWy%Bab&r$3Ajq_r9s&17#jx?Euy3s7qTZyzH^H{!>N8=*q@w!&! zwAiJ~JG^UY2CuBjr9*6~k26vSJiafa+e_ZZpv&#!y+`;94?ae;)&(2y`jL%keos_p zw6crbA-|r=QC$3LEeD*6b11iI?@_;Z3O@9M7c)=MCtY`p`8wd8vXCmr$>dALcX*sc z$P_x%&(>}e!iJHw#B!${fi_MPhr>MgDvx-jQE!*7L~*45C4PBG07V#UZ{m?(OkLOb z$atnADhGA6s#Os8L?n=QFpsmGUtF0sL9km_Jy=nb-db<*-DKX~50dP+-Ss&xbpZP<)Y>J;x5mBkyg6ajSPmJ)_8nXWa? zekjQy^hrg;VBY?amGJWi8@Xy}Q)4tyBa%V$ioId$y||h4S(dnVtp^Xob^lfw1lx*Cxg2}m+Sm_=|#?g@dclxnbHSr{P!$h zW+_H}&`H_Duv)o)u%CJ7kaDc7b%Bg>z?~DVs(UMM4{NoRn0xcd<}Eg5(gml+tma-= z3cn{;NlWNl?uc*soa0cEJyvqnRq^#B^4`+9M@du!@jcuVFbyS#toXG$xpBmG8**K~ z{krFY`HmaRZ@+_{41x>{`1sYgTrJ@fXKINQ;Yg^b+P#(ySbkPP8G$Fg@KbhQ;SK0)$}ioP{a~ zhZq{R)fhm+=fZOpOZFLPZ_T6?fI5U|(_BpTrE=XZE6s5J69NvwWmB+x57CI$_N)F( zOi694>Zz`iTF?WK?5oZ5g_>y1L=c)8vMAyRSCi$_)~c0-y!P zSQ$r`g$3(olq>w>InErorG)sTE425jd7|&KZ*|&Df=0)7KN|RqBtweKL8hYi`D{$7 z_QZFXM|VeVJ{^s4Ww#x3w+B}+4zwbq|9j;P(~rfGjE`}E^G=}zhFAx@$Hp-MSefynTaXnZVzBlsj-2`lF2?)o!Q+c|OOt%MujeQ8<7(3F zd*k|VSBrWqgf3~Fp&QukgQrEBH8Y>?N;wwm}W;9MJ4d_Obqar=I;EX0%Wkb?S#Ss^iVzjd&4?Ga>h zQN%pE?$(T?adKI=gTWKJ?s?A1J5Qp7HYd6uUjwvfA2N-l_FMM|)@akiG2ru&w z!`79@bfUpZq-2cnw)nM-`1Ozg$4p(EvDqGr$Ww23O5dHFhJCIdg=sh82@MA#=6!v9 z+R5>ubtOjjoGW!tFSzUnj6*$4b_Dxpj*)9S{Y9f7tD4BcEJf{Q-uZ^nIMdquOAV4Z zIaS?{)uoW71Uvp5bxX4iU7FlwI?-S8SgC*G7*SLU3TF~&=%pC=N0AFWt`2Z4NIhy) z(hvN4ni&Y6{m5&i<-CjyS(pdMVZwRXd z+7Y%1w+Cjz#7UEfx3&@mm!oCIxd1fAXqtCrtX^%gyiBpL(TAfauHh>$$@clTO0MD4 zBx*6CQ?9Pa9gAb);W7m^H#kP%vCgU4F=Bxy&6BoYe`JNrRo#jOVVA0=B5q7DK!-%l zt1G8sru?}vB&lD-Le`h(G%KjCr*byOV3by3j&b0|^A}Zun#1-UU!EV=mrGIYWDRlX z+3tsBd-#R5DxCpUkasfBqNW63*Js4Oh)qeydB@w&#m2rmHchIM>|cS)q(Y>!$nXD@ z-rPvaz5BMGH+-8ilcs;HZmzvkR6d41iMyGXXnIDSZWE^HD*pOWfWv61`Y~KD_-9bv zxgH<`*67~b(#T1foEKB{wHuu&|TQ2+$-U^z_DEMMu63?L(z zbAiiR_ds=Ldwzy>^;d-UFiiK!%x(oD8CZwf8*N}g+fSD;G5Ot@uZSX6)v;Rl=w?3R z_^b%y4z^V(sL5#?$pYHFzs4?>HyrSqe+1oFIQw_jQddRj0gBDJ037^N^twJ;`lYoA z=h>R-)LEGda+^uFup}g5Lk;Hb!4PTGe=|Z*yK3j{>qDDdzk1#L>;TGHp>6TU!$)KK zgiem>D2Xn`M$<215|77^5~kuqdv_19m8S?F9*iLMxdd+;&}dOcNFnE6Q+RnBc4l?w z0AK*Ck)pMkTTk_k0ZyAbH}W7!fU`I@<_6)+3Z4*ynvmJ7H~H1WrN}=uG@?T<7TJU~ zI9@99cj&P1OcMhAGTI;gNV^_Tk~(HX~ncMC>S_o7qiQ2Gdc82ZM(vsKHecb7TZ*YdlEC}J>GW_ z?l4rH66)_rnk8CxrL6Er8#)j{MqAJG;|v*7Z7sAq{APd1n9K8SL@poGN9_R=PHGd0 z4ej5lcX+!s!udu>eWNL>x3EFPeCzyM(=;+DA4xW4kHxCp2D8hcu87@E?me^e@C3nm z0DlrzIl0>dxIR8p$G5|Q&#bP-v^(=Mz;$PX)@zINXV z$cc%Tx?*Xjc&KUcs`)th1o&b1X`AACbv@Xtv@_hR84W;kmgUs0Xb|D|%B0kl!op$t zdSR(}&?aTmJ|;MZd_Lxw_mXgb?Jn)CUy$18poiTzoScfiUSHJmt*O-$RQF1c#q?qC z#L~joHa?BFT+MlFsVjOcvKc3ly$qLG|@PsV1o6M#*6XBQ^;{$noHY**-=I@~=~L|ynunAh1D;d|BD?p{1Atxo+r zzeFEOBnw~QyVEqgI%d_O2?Am44*29&WM|wj1f@2x9BkiJnYdUqo&rgpg1JW=Br2rb zvXI~cda$ObNf+_KnWdXfP0 zR$I@#7)beZyl8!a^SPL%eo|GlTuzJS8*XJ6!dVlp3DqREk#w42lp}+3fY3Uhu02yi zAMi~q^uDr*0l#hM_#);oTx2yZipLVk-X0KGl7NWT--*mQT^EX4*))Pvbg210PB9Y- zFK}vTH;K(Usg_=iF!=@gYld$>&f<)AU|_N#QScKQn=o)NhbYThud@}VSi7rR*$#1Z zP}1Hh`MeEdwezzN<%*n+qD|}l%#ZUV^ay+>CWQiDVX&Or5g5n_;ky5cqp47(-M~SQ zcaXd!_W7LPXNsRx+xD34iXx1fz3DyQcbD8BvE?LPN4R+rb7}ZjydKQIS8Z^nqHVQv z@%v=K8gu#tEg_iIKtv)-3-9%KLc~+_7gslogBwNZC_e$Q3U$CKaPTu;BpJS1==Hkw zEZi!MJ%PjZK%fJs zZPvMv^S&xxkH;~}kNUqbAZaJ>=z3lm^A{6$r9@_uNYr+%G`ud!zOBc&=gqP+GY|+e zy*${!oKbloTk8Qfwngjwy!aFCO*S2Hf%#pV}y0($qaDHr9^%t97W47gLVQo7Z`M zt0Rq2z<@?lmCAzCw$xg*^czuE%wwV1trZ2dayQDey+$iYpdo>WHLsrD;R@Q`WnijJ z==7;=xN@(f;5jw>j?AvKZ+OC4Ga+oCVcr`8aj#SvUPjC;1je|4tL4LBrkS4Jmo<<$ zojSAr&Fk{81|CpaXh^{k&a*%IeH@Y`n5O#TL(=pQBp>~B33krlpKAWc_>5Br~tO=Wb((V|r2^;h>sHn7{<0vyj&@vd#2h}69Ig1V5+R2VvtXHPFsKF73RDNXZZYS@5xnAXKkjWRljJa-I z%J5sXK&fmPp_?@V^R@QkRu=bXQO>&<$6ig{8{X_cqH9NxqdR}z#xlriOMnA&?jngJ z{Y5QK2Ca&K;hEC=u4L6$-w1W_l!Q_P|4Wbp4<|zI>ASBW&ec6L4Y(rx(nf6*BPT|% zR2pXQsV3^WALv_sx#fdWNkTV=RTR!ZD}`SM0LL7WSXtP-0m(8=E8{dD*C?@cZj>gF z4O2<4mkG+j9)BNt>@NTjAOLo*LEr%W($59fZ(U0+;F}!ciBPPV&GeC~3(Yee#8J@L zJcMhphaLE82Ot#}lP)-*OK=BH=zxSX1U8(F2Il}_b;NUSw$wMjMD?rN(6UUqiw7oF zQrcmJ(Uk)XmxtPKl^i@A!zEQ~msiW{QlZw@qXb$RBAMQa5{9{G@=|Va$+(LBSbk!) z9fjX@;lR*@P6}hr3Asxx8a3xYr_NC4CzlKyr6F~#WEl87cRZwL`$kp(| zC*K`9_{7uheD5$OSTIo=!Pkf)%0*5oLFoko_qaG9(idS=@3WOGFTFX%3)nsNEqIs` z=L_q6CD^2`3fa>$gnS_gObb;zC2lB1Kg59^;pl0KPpin?7(-fM((O;113264HVAMi zmk_=f00;%hT1U~MhL&JE1WEB`(x3=3o8mJ!>Mw|rzY|zp)f)0#9LJRx(AGE{4OprI zalZ1ZaNz3%bs^*a$Rj~{*KtJ)iE8S8W+LSt0mr5LB^FStX#&MWDj`D>L zbk$#gBK$8TD5HAQs6PvQXkqVV!okqt)mKn@Zex;Q594(P`-8LlcV(}=kp2353U6&0~C_f zJ`YhLe_nboLP!lLMeI*(3nXe4# zOb`mdYw$Y{2mu{%&!YLHJsXy{Lf*wMV~D!8=24bkbDQ#H@=bejupY^!0A)`=v`Qe9 z!Pmti;{}yC873H$8=r~x$i^p()e+Db!Pkx1DtnxJHWDhs&$*C*}x3T zT!iVvS2IvgXgMh_&=M&R)AjKpw!)$4Q@3^sp5BhYx7H)Er;=evUZl zrai*woi1r{br5Zl@vTL@tN6$>VGXsPjCtHI8E&8F`Lu{fUc1ACd}!dyB0GV-;W3~x z62MaVJS3Y@p-rd)G-c0)66{{~p7vJ@AKc9THia&1zdUU~IS6b38sc-=`>lB+BY=LAm$Z*-cp?1j{fp|NK>VZZ0$9g6*w{S74C`P_ zhW*t(?h1rV+f57pj;Jeu?k&R7!B6mwKyn%wjXfpH++U>=X0(531_3GW~7pbSL3f7P;BK0%DR&+qIR zG<{)xmzCCJ+Ekv4DU}H~#kGIyiVk#|W9|wgFg#fQY-1X-s=ni~UBbXV?CkEO)K#hU zpJwI3R_1lxdfQmfP9hDmV^|Iiqr^!-|JX0f$xqPP&hlNw5vOm&uR#h5SeRYxfN}|p z2(?STkkH8~3f|}iW*7Z0fKJ6cW9G;G&{cID)@y}sMvFFPuFiAKn-IoM{m8poa%R@qIH`n%^ZCcpj+PZ(B)I5u_;6Z-<-ny zIGb;;$Hot_NLc7Y*GW2bEyrY>gTOn9BET-5$cJwWpLpt9PZJD45+Es3o8qTmvSNYE z#h8c3VseI*S+dXG?#5FUCpCQT`Qq+rfB01QOw#ysJ1b|(E=w;fqeboEQhL{C^gu(E z^|0zFKN%fLO@C?h!Zoqm{Tjq21WjO!)RD5s%Rpz5NW+SDqs1H@;6}f&aM13>yc@&r0r!)Tdw@Z1(8%EDJSBj zg<2yGxH_~69l9nUzz{X#oYpR8xvb{8Q(a+b<|;;bBm^u1%8{XBUej&ncv4NFzKr;S z8n>6*3h^%vu`B+RJuDtGlD2A|B#yWwbb6kguYEd>uGPa19XuAvlD zG9Lb1jfsK3nu8V80%nd6Hkd$D>{J3^lKY%**t4m%35M~8LQ=}pHl^qJ zJnjQSG0Rs%k3BGhGQ* zAK`cILa)qWH^SJ~>ZToV2aQS&DT&?$JG$-^7btrG#Jm@cuDo7&aQjw6j9u%cl0Ikc~duthBTHrm;dW%5iK>qIPs%?;(?A6nUrVl`i1t;-)6`^oYh5eE^*5=RUjg8u_D|AKw)Ep19D% zT-R=rpq|A^pt z!sps58W62yvBR4<(s<9>_2{FP(267D)DZsezk?CFv^F_i9`r?!3U`m`tr~E>j>1dp z=BZ(p9a?^e;da%_tD^yji9dbSi=MxMR!(U-yf4+|pB`w*DV8t|I78SOgh>yX@$G60 zT@rxZf}+~8AJs9Jc#Tk4TRK`)p@jpppGWtZJW{FaO2QY8M(q#g6en zZcF!^+-H_X3|{9ncgOsOvXS}+dCU)BXgh-Z?}h?UAc;+_JYRsye70A#5L)+Cb*+#w zMUPjOzqb&^O_l7YW~?U?J^^x%RZ;bLF!yO_1ZkoEn3sW8totGeEib=iO69WWtjaeZGL1I&nJ8DV0 z%M*{hIg0pDyU+SImIQbP>!EE$&*LjDl$n)ClTFOeFchWi$?}jwq#A`hw#1SODgTK&dsXynfY$ zzeU!;JOHU+Diyu=5a<8YB#2?~6TVLjLQ6Q`3AP#-3clx+PK?8_CN2#XYe0;jY@9D* zjLr$GkwP+QaTdFyte*fRjXa+c3o7>eVPHnXn**Tlgi1j(Ghk4nZ||jzh`kQhwvQQp z1fACLp622>60c@|ljkgYO@C&vR&`OzU9q^&HR}H2DIF$eo_~n& zj)x_DNYwVS^7E!=8iV-P_@(dz_er(b5an^Eq4>)Gw~<&Gpg8kZP7ZN%Vl2f)evQXo z@pvvI<~^-?ed zTM4F=QAXeyg&_vbN*#Mr5&%riy$=NAHwXcfPaMkqks0j(dqP(%-shM(i^h`hlb!2_x8h?)sr{|r4K%Ui{AU<(TLf?zHm-}k4v&9VPCx_pD z&!x5nqK^^Jo9}bfdB?;d;P#T>qU)vXBw(u4?p$0kO_R$EQ-O zXiUqxDY4157t$FA`wSaOLyCxR}J4zKPsELbnm5pdX` z1_3-lHnVI>Dyqzr*P}Ffq`*J;{TN5Fe@rhe^ubqAex&-a$auw(U5k9@M}N=`S=|d^ zOhty(x64pT9o~h=xI_ZnXs9D_HQTQ+(4g%qe^TjV03o$=1BKO)6}z&ydlZn{G4@QO z=WUcb3SdpeAPv2bBIE~x&Q9)m_PiB+9G!o2IG2EfZKi>4(j`9d=)wIf1nI+10Xx{E z^2P*U20M`Eri|_(sl~&cc&e5rfWMc|T-7NWmcM7v*2=b8(qK<3BEWtz^UGUT)d@vt zE{TM%O}Xw*fBsclLaBZNATf5Cz8KzqrjYZ{!krSx4r^D<*Nmc~<21IU_1E5c*Au1a zyUbvhtMJ2z<(d$!oqO=k`*6xzIN3{jsQ2IiW2>?nY6!vB5*PvKJOG3AD@qj_#E2L7 zwao`QBt4LuiAG$mKQLSxc_!rHL@O72Gy7%!?6N@{C%;dri^Ziv`_oo5x1np|9GLJ} ziSmMar&!B5MUsbXNA=Rc*wPD4$T>;&+1bDwD8*?fI-!!k+A{rp$xS=L!4K9buVS8IXlqhvh zwJ+k4gxV6bz&|G5rG<(Ao>*Rg0B~asaCj`T_xYflk}08WTQ=k}E}v2z7&e^G@z(hc z*M-n$kJeZRTLE14XiTF8rmD+sN4_%w98a>oAa%r=sB5bk7>PV86-gN7(sw0vpT!-| z8-9}t^iTyHmZG(d{I&N!wK6sVbURW0XH!#lnoCIoGlAjDl_cPD9F{(!E<) zeq7@@4Pf@{bgpo{pdH6ZBweNPgu1Ka=MTK%INY}J`|<@o4tjpBM+bN5 z$nr9*%T6U&4#@i4sL;JL{V$5=Tdbz0o|$%|=TyyFzKGeve(^vX&nF0Qq)X`dw>rab zuGG){!v%F_1(CR zrLpQqxbs7ok^$4i?}-_qYoE5na8LdkN*BPCF*VY*#VE82tv1-5#pS~0LQ}KVLOORn;}!_X z@q2XvjQi(QJ>pxCqn%WiJgL`Ihk2BD^xhBUhmAMJj-H=2zqZWzo!ZO6qjHx4eSRz>2mFw`5}u7i>iHnmX%xB<77oKptmT;aLp+OR`q)<0zM)k zqleq>H%%$D@IV|b7S2o-Hy~qgpJh_>LgmjD8+sPZLa-F33!@5Qs#dA70L`64U(Yon zNKYbPxza8bL!DV)aa)I}08^8SO&pIRNO+l0g5DstsUG{mbxM5i+32njTVS$}tdhRL zpo8s}0o>_(;!d3*P+shI%*KN+1&~qLY%QqwmnGqeWV$(KOu_uhG{G>BLrpKafqG0ikUK&h5fk$*F&bo z4i8?3i@&&wm#oas8q-vMo4z$sKvlE5z=ENfUPw)1`h9D^frf+(Af17me(WL2PZ^Is z63VKscAYjZZ?JjhsIWG6_tPR)${*3FXpXC!Gw=#906FBm`}Fj-fgEN7YY`jW5=zY$ zC@DHvv&ZUkpS^(Y^hbyBC|Rgg^zXrl@I~kifQ6#!tCusoKUn|t&bKWE@gpp$CbW_o zY4Q03>pA+2{h}%dYUgGA;4NU+P*nni4uEyhXapaYCgxfxwO88(YidE)Q;!a=cXasw z-U`jU@SN7tEQjX0mV5m{zNG&33!uF|r$ZJIR(F4{_?eXjT=4@;fz1;y?k>@vh5M$M ztCNenM9m0c!=gsq0fy>oOcZ>&5;R5v_dU zWKecW>Lsa}GMD*X-YcrtOCI)pN?B-q%I@8arwCg3!iE}`me#hDL%S}aBq`qyyL1gp zivi>A-=pj$+FAD?tG%iHakwLL;6Ns3Qqg>?u1ic@3Pev~fq7-$G|(q}Q#D6Xm!kLl zXTH&=D{{aHwY1WG!sBugMAvR&dG!3X9COpu9C=eUUlOaZ(79rT4G}s5P^d=_I!0z= z)e-8)^ex9F+zaKArVn{4(nJ!xpS&?FO)q!Fq2}o!jYwjJgC3&$*2^@H6|K>dWCb<# zd%2p?x;Dkk5xuqGWxM49g3MMUhFO6BAg`dGGdp?z?Z>E^ry4MdcR2Hkd&4ctU*{q5 zR`&S@Q|vhkZjXNswToF%>$5>7Ex{s3V>;V3A9*30``E3$l}5DPE+H&mc^#m+YSdF3 z%J1a3qmY*GR~iiI2tIG9x?D`f{M@ zv*zrf8V=8{RrTPsXD~u}7Yt7TuYkmXw#gk*#2w@ClKq_8@a(ZcI)H`o`7W#OYfCf1 z=dNlsr0X-9hX-?g(s+WRaZ*uL9G7tF0l9v7NA+aO&e~4gd_-X2m#lU5a)kONk#^%p;E3YOulJgMsC`HUWDn%p>6sD9fD~!9Zt#Z78^nu_L28c zTAhXZ<;^)IqHRDA^#*gA543IZ7FX`s0Hth`7P{a2PEf-PsE(p1yjjUmYU|+T-vBxA zaQPA4Y(c}^lD|IN6PcM>J2xx=-hXvy>wuRAb$@BL{)#zQ z?!2x%q0bRsV4T$mvRY$#t4kCtJa*_ro>SV)PU*F`vzDK8p|8FmRNHxjm*Z%0o~C_q zzS~%7Wlvc}Z|CVV3rwN?9Zz{lnXmvw$ZjbN`&9S$Vdj1Tp85(bZd1` zitqKI*m`&XC~f{W*4oEJb$&nrN;*N1)dO7L}2+iUUWB@olk4rd**`-C480M!J5o=|XV&8XsJoPf@& z9}E&O+Z=E(jpk#L?}=fMcS6Y}&z|?b2dAQ_eYdhK&4QVVDK%_zP$Pe5PqbyMYs$PyPZcfoDv5v-r3$WJg-xt5QwlVSCFn-6eo8xn)pV> z(DfFp%&iYaYbuUvF`A_eqCuJePNDwIW_SxSAO0^?6-5)P{&TP9e{S5&WHJHzxIz_!`lZX02!TmoJz21=psxsI^e`$6hsUEi#}DMcJ>-7a(9KtQD| z_}O)#QLda6%l?x3C?ElbHqWMlVf6)8URE`I4;OJ4tU4+WSU>eY-l-StO89LPhNPMY z&xE~iVqqeCcc_^QBh5qtkjUuIYxbu#8z;HT&CL6P6|ka#iyo>`cCk7is`PUA7D|4o z>!r>?bn6dT<73N%4e5CUHLaQwZA17eC64+ZlMxUez+(njs@!{!N-eZNAyVHOz{|qG z^Vr@9d2TFt%FlhVuMue(l{Ci=M^t&Z#Ce-+%yhpA<`W+sUZQ?vVFy!;ve!?fw+&w3 zNjYFj#LAYgDEKQj61vkmN;|6_G_6y`0g;NReh%4E-+0;QXuPF80s~V3MJd0$Hs~j; zqLuQ@P+!+IeKVU_>wp36m+2!VI&Gt(ZxZ_7l3iGBZ=uojlBrs@&xyp4s{)%A+i4=l;wcboEMktZ$9fe7= zw$a!WG`!*W{#M4nrvTh99`zHd4D*})`vq(bxcV|A+hP+BCVMq=?h8W|KNItaBga{c zqyI|BirA#VS2ylQ!}$e*C4{~qK$~~2=V!;q0}Z>$6%Ym;YHw#oW0MxNs_tL&OkO3o zcZHS6*>>T_0IN&g|a*+dxq_K2arn9p>`Y!tco2L^@3H^F+8!sMkl z%zlBQ$J~u6%JsrywUYY&AE?%|eJ)@=Q(p!gJJYmb{CT#B5~=N3+My*!H~BzVXCSh$ z3wb1mxb?pI+KTrp{@tXJOe-=<)D9TQt&^E!c;w{4pv#dG6~KbMBe^|~zpW;LblK)DoCXY0ymL&<)%I}d(keb4dcGXZox#cgj1cF@QH2D1b}d4-nx zMTS0*Gpm*k8{b&Ji;kdh0i@*H2 zC2cR2s?y2Iv96Wo2c>>|rjBc{E*t2pImgGv0zZ}~EERdE9x#6j6>?J6J&os1DKe}| zU~s73mZ#!3DYo8sP}}7r&SgYD7|PDb7CXns8M`zeK-eyPNtw^};JbJkzVY8TRzNL{ zQGDXJ$#t#@0|Q9L1~nxT4~(ls(!p47|675i^so&jH3d+}ldsd5s`bPN>SpqNo);otizkOR=6|;9dMbtrZR0RsoVhibd{t#*j{)dHl~}5jGah%xZdjn_QIOTI zU~nm;qXd)3S$rP2OzH^Dy|8sn-nHUMi{qPE8`0Y_(4_R7K8x7mT+x`vFQ~gR4F~cY z-_1P1^&QCA#@r>d5|xgz9w2O-G_%2A&i{|SFAs-$`yXc-WoaQxC6!ANLS@L_RHQHx z*|L^m>{+sJQ@7HBio)0?GD4QJg)rTUl3^k#dtoG7Wy}6MQ=faU?&Y5M_wS$Qxqr-a zb>8Qk*S;SBr#q3-U7_|Yh9(#2x&tyTrR}H<$6jPNJSf1;w0+{pcr_%v;qLpP&l%bg zwo-F1(>27Yd2`=SZzB#gPsFYCy;hS+e0ci5x)5oSgr;SnF2Zhthb!56-&xm!iHCl} zbl_Pq$&z1^L?=HBl5no#MT8Li?cOQg=6 zSR?&1-51oYWu;w;bvV2jkx>NE_N!=J923uTqqNQ@+;_~lAzicz^dy6r+Y#{~Gi$j| z4&i&xVK$^I98{Z)ctY%)u$*%$!b}deSMJ>}vmyP>%{0qY(G1!tSz^oFZ`btC*z^jl zIgy>YXjv^NCd>rdm?dH$_Sz)+;b_(5)ESFYZ$+EiMcIl+y<9S{Va-t+65c-^Q=%xu zt82^1%VcRaxG&;8F^sfyo_mtm2d#21UMHXUhfKI8GG0iuZ*k{(YTY`v=c+oi7zI?&(RQR>p(Ou6q_0L!gaId<`wG z>52bWy|Uh!8c+UIL!C=x+m91YJTI=W4_}h2sg46xmscrbhjKsbM9a+0?oLpz1__wE z(j``lS=x+n#um0?{3OtO@NiT0yXATNI&!WWm*<@jq0>Ydz18WZ$72hgnX!%>7d($C z0UoVa)fwB^3O~GvL{EG=b^T&A0zQ163zUiGg65urogk?3?Ls#_69hFP=;&|iU;B3n zS@JLvG55?nyt58Q0J9LpDFGC$Tzj&!Dn#gx=2R35B>Y?Pd*Qx}^ zJD?1~#lq%TBDQR2O>pdI-O(67&=I_w|}f z7xo1h5NYMQw-qbH={7<=GT#+&H5wR3voEjgGH6*_jq^f>=6fQ3y zwA;#k;Kh(@@=Jy7@-;(VVCY9sqM4uQe~<|4%6+5}CaQ;Lpn^-DX@~bU>~{NTvx z>fI7MtG5_fY=2s(@*ljw_!B7zmBIpg&t^WpcM0$s2H`qQ76L_4lj>_2 zgPO>fuT7Up-*@ZfXN&)!TgIPg?u3#bVWZ1mw1>hDUBr*Ywn=6*a#T^OF&Q=0zNOk% zp>x@9v9<`1VpM!hEMJD@b&-FV(Kla41K&5`$`#Cmlm6wUb73wW2I(`6#^PU=`PH#ts`3{MgtFZ;T z9p3UrN$*`u<%=CT#mmn!6<>fY5z-oKkHHO2 z;{|s4g+yz|#$B*oTr&P7Lc%N?4@eg=s_u(Bd z9C~c30R}9%_D^ay$;`dpE|j5yPJ5<0-+TwsTP$8dNfW~Yj?+}4$ZYXfDWJ% zP?YUAp1C~WJQ&bZOe5RTE>U1_(~)*D>by)?tY>NO9xFexMs2wJ(jGH~s}yPL@W^ed zmT$&T^X%-;Y*Z%x#OYsL^RFMzEEz56Iu)6yRA4H(U#H*8ueaPFTJL_9{Bo;Mo?Y?i zy$Jy*s&O6RKt_Qoz(~)aJ^c56G_6Er#)nN2gr4T&#l)%dZ_BX?p>Y+=ni@ExODRePc^yh&XxA!;z=A>?%dQ)p+ z6Pr4taLE0IE;UQ(l>kntqBF#GR^jrCx%f=tqPeEOgfYnvly9^)=UUXtKgCqu*Bcf# zj+krvv_Ag)?hV&trdg{_S^a0@{!e>-?`XhY;w_o2!e6bU^{6yQF%G|V5 z+i<1)!<*i9s-xEK|y!I22)62fYtKS8NMTbL1ytEg4oWL3+D=dCGM5S!Gi|0 zW|yyjo##J(fP?=vtz^AZ~7{j^V zPJ4&I$7UknnOTURzOO<;%p|P!ioc^Bi((y}#KMD5>fEzz55?O*fE}eZ}5-r%-d@TnEwI8zy7oYOo%bCM41T0%o3Z!B+`=1gh2>s zo+Sk|Pk${0uO)51WE%aKzFN}e{{KuZefZ%K?um3B?YvkfR+@{KWZ$Oa_CDr z^uI&V|B|9hGV}j8nMv3|P)I+RJy~fv7jH@saaf_f_~4PhU=zX}Jv>xbJ=xyelN~hk zZEnur$7ibfm77WV;DLY9)B@zzF~RaSl{#XPKRYp{L7-0z%Q7QiOUeqA%aPcL`s7nQ z`1@;+EGXnQzAED$U{JrV?a5v2@W97CobY9WMpglJ)p&!>cq7?>yGhuH5@`|0!~@1h z{Ur#A*$(ywmfoML=c+TY!I~UPE^I$|!CXA-Z1W4AHeSH&Sd5Z`C&9mYef@Lnk zIc4c-(&M4YSog$4OC+Ur0$X!b&)Nhy)t7EzA^Ne*B>Y1+{Dt0mKdiuuoh`Ff+pnM|>FG)^!H&%h3M(995> zZX+QxQF+)?oQ3H0&6O9v3lm`ldtQotSY->AK;M;>r8y51iyboO2G%mY;(V1%9~UoP zj=k#iFTU&|A1GL7oT!+q8bH4RV6E}F7&>ePz??!w?R_N^mF`UnwbW22sn&&>Lpk_l_j^!uNq(u;Dhqo_3<&Wpb7H4lPc$|zh%5>1XIVXcLK>FHSn zkgL~4C#OqR3LGHN*Ly8K7;+xGzpIn-)8B{xc9f)0(Q1xlk2bW80pOzZYCQPW=e$hk z!+ze$=fRhWP|o6;!M{Q!z^1eu6^dK*@s@eVl0QZ&-8?=LbM_1i@j$1SJA4;x0cE{G zfWlkAKE^>_2*jcq2ZP_N*?90_qh4MJHprsfw~w;6Y|r~BLF>vQy+i=4OYGMy8k+BD zeD`r@A$H1~K_S@YE@gv7d)^-sG_|b6I|%lug;SUGU>Wp-KrOsRxgV3wK69mw8A)g6{~@sU1AkJN%4bL0ho?ttqoNASOLs(# zK2k+;DzqF=w82#r^&&|MJ{XQu@QVlPRbNq9KO3f}>Z#p4&RLA*+bu|?hVi`(huAUg zf!!++SZ(rAfV_&no#BV0iHQ);u+`!|abXg$xx=VOo96Sv!lx57CrKK($7$>%(3MT( z*$^z)587#kYz{2)*4Zx~@ZU-^ZTQsl^(&ey6D4$yDyt@7-4k}iE&6!U--N*l z9ECsZ0@hMDsIp^h4?WqiFoJ%O4<}Hi2BCprcYtuZab6#Ra7sdhuHuh!JAOgS!s{qQ zfFtv}1*E_Y!UW>Z{cXA}wwQC<&VvRRN8i+;YT7IBD_v7M&VA4U0n1H=Xu-SD+gvqSw-)sa8a5-eDD+k z*X|t45B;+PurPQYMCTV=E_l8WKI24euIgp_i*OY6#^fLlzJzt%C-A^kr4X=x`i2G< z{OaFC2h1Y^9t0Me+;$ND4`=#$apY$b)E&sT-~5S$br&o%MF1z(W23;Ka9s;9_r64C zF?yS4+hGl;K#z8A2i9w@mn{;}XkcY18TEfzFvmKg)ev2I2Ees*FbfV>W>h&V!!6pi z72M)ci3EaMP^5pb-1@aFMC+E;TX2rUcI+W^YZ#RF*Ct_e%Zrqd2;s-VIjRI3AZOZu z6<7Mab_w$t6MtSqGZF;2ljm@pl?}JmT zav5`A9B$ZT1NO71LliXovW-w`*$JXpDaOd60@5HJte4O&A)8Na>B0kNw=qKvZpVjsJE=j5J*VD zoJ4H-vCtLem4^v7<;tx{0x=z$400~{rePFlPM~YDm+?e8HZx>PVP+1uHPhEHXZy zZoVo(bL{K2N3zozo}YRWJYJ2W-X>-tGS+n&itluDDs4MW8MAvGA|f~r%wr%AGQc*5 zH?xog(Q~dcA~8=HyY#P(ja`sX{-T(lKODt!y7ln@WZD(^NLbX9>-z)`@pP=I7|pTs zlQ0i+$xt?k=weLJXq@I^%&n_(9$gKP1R}if&4=ubFbrMjrg$ zp7We>_th(DnMh>X;5vM^!MO782MP4qm1c;f4E6{2&oHrL3Y#YufAQjPq)-l{2Yncf za(KT7eDW|bshU|1W_+G0XqTY1(CJ1<@FBW38U&%z>8ot@NJY%lBS_F*BMRK9M<2v6 z?3kWcb(fJWapnXOQS8@P}VN)|UD6w3fsfX1^0We5yu!7pf3vcc$V z{&{hlKlNoHlB*|Z|4>GS{&>OVG0QX$2nF;g zvdDG4XJ=-=hcZ#E1Iv(b$vXn&%jO$pi3fshR;>HXiUeNaY}XDv8z~Kq0GoIs-K0lO z2Zd33q^q%@MEC~)z0IuTHM#`BEjm2|5d_TybCwZW{tzp40~7q8oK{3MSl%7=)K6`0 zptCTwkUa4wW-b8#p$#!$5{pQ`UQ zRVlbL3P8^6CLIc8rFHAw@ghcXVjXdfZ*>$7MVP8=KwI!|l6<&mwJ@+#+E@zi%Magj z8ZOO`5TqLE&CZkqxIJD26`LL5C^7YGQ6bZ|FOx5a2;A+}*)~+yrpd=i5}WYs5B&!x z{EJ&0w_Ya?eTWHt8)WkyEN&AbPVZfbTEogpQx5LdhwXj_O>hl);S_7XsVF|e9+ThJ zCO5@LdSB6+4#O2mnZUDaC0Eg;_CV+HP`Zc1z$wn}n%H2v#BX!Z5()tt}k9qJDiO`c-co8@pTIBKUK9csXPPTWmYjbx(Mdjvu=C7*fMOLNs9 z8=AF!?{npoPWtQWlO_{e8Jd6u)dU0$mO2lI)>AF$W659FB9RVf1PPHs7l#R}rzuCX z8}Lml0z2wk0ZsMO#Wz7?|NfFY6NJelqh1;_Nxedov-eW>4i>TC!~Di|U;&U7+|d;w zuJZ5hB+5J2s{yo59O+ySn7{IoZ7Ng|?|Q7UUDdt)z>D`W1y}I~$wh1Kf6GSW#mlkH zP#U1%3V{fRI?iu z?^1!#Q5|YXgW0l_AXMkJlf>Z1;@2~19!312f^`{@&u1)x$&Vx+{07^3XEx<3sU{O zn|x2kuCDFk4Bb_Zb?$yM#^t0m*J5L41RhZ_cga|+qUX=M5Ju4eT#wt_G|a_}l3w!K zUGoJ`x_mBGQi39Bj)zueSGuAuk88%Rbo4$Z8vyxnf(Xxn_*NG+tyJG^ z<6v@INiMYNiYA+Zw|U%#Dr)AT?_WBEVdYTjQ3}ct;5p+BsK(nm0c!US>Q`Kt ze#pU06v}>1hOTx1Oqx9*`L)kMmZ-1REVZjd!IBH8PW4(BnCisdK|S3jguCE8*wI`y z5Lav#TCx2gxN>wx4j1goI}-s3_}|v5ej~@_wB?4W(uQUZR+?kb3eWk9VnKk}tOEiy zf*q4vQloMrXl+tV^GM7D8lP}95xh1EQ#Qu|Eg{ zlJ4(-YeSsgJ-db~;>Y=2!8dOZl{H|cc|)_UR;j3`3PLIIn+IQ1YH~Sc^HbxF0C}i` zbBD^qbLfiSPV#d!UC*o*r^yw9r|zV*tRHU$X3W~eEzqmFvAB7QT*6=5#Bn!7s?g)J zr+)=+m7;$vwWzc0DS=9eoK;_i)8$HL{g0{7?2sm?eR5q014Swi6kQAVnZKru~1*cRgTsY6)$DIctPsmW%Fcb(Lv@TK+cUVo3wSfSSwRaFZr(zE}a%mLz9j zDMwcn*IJF&GAx8c^?9|m55_IoY5g-7<6)l3YH3nv{f9&fFR9OYAAhG8Gc$iSv;si@ zYxP(Sc)hNU1hWewg&y`qYo%#lUuOOxXjoVPD_D4@Dl={+%7nDnu6JZ&8!PR*AJjZu zEwuBo#@+LA4ZF(ufc}|msXHu7+n+=8fb z4h&AMQKRdvj>bk5Mx(^FXVKTwe=a8+;OP3Iz54Zf^z7C%PQ7o`^JX6Sqw!&9+jXEt ziYGxx!c%8Cp`49jFuF(DV^Ek`DJT)1XVbQRCNI!W3!BQJhNqyr? zOhh3Eo3-CP^I!zG?5$PI#44$3PlzZBrmX#;Gq%~t_1s{vj8a2m-Qi&Rq3ky%(505> zV|Tt{=sbAv(0YBGjFeIo6ZK)44fLiBtoQcoQwpc)m9@+SCFAOs| zHz^npr?|zJTYUmuER{6yN;QiK_kP^kYazhQX9Ft(!iTjt$Och)@0ig|biO1z_RNFA zSodI!Pa&|i9To(EgqH^Ry3)O0HWB<-^wgqE70-^(T9po=@o#erpe-Kv_6x4SyD5pD z2hiSTn9M~o`ADWh>)piHt#329lQzwMwLLIMJT)bP3HP=3`En>)CQ(JV>d%-2nM-We zBH0N~stOUEY9+C`ndJ?zwb%zJ1#HB5%yPmu7C;QmkN82j^X48$XBc91A7C}PI!z=} zuVm*WWTu7`l(5(ptVdx?@0mux==Ye=&Q)BU#xHH0a(xNp%lN5~0`u|hC`_NPDKzqQ zOmyetjQ#qpDGiT5@VxHk#Fe-Gh7c!uf;g_HDOH)x9?wxuSqI&(yfCo4y%~kk;)sRD z&ik#7O~|70^gXiBVxV`KKr+arv~I3_BF_1OnOGJcVpB$C zr&Zh9i9mPtBeYc6c_;39oa2XC5oa!FYui*9;z{NNw9#*LYCm+n3&U#3b88ykX5>~} z5c)|c+r==Le)fROd)(p+ly?;u= zU%p2nu+;JFGF!c}C#_(*!k%)dwz;&9R@M9E2uVJeT$Jxo6{NZw zjo zD$P>$Dd<^mv4T{Qz};P}ks`nh&IeAz)KEMdEz;9{3|dPe&i%;nj)I1oj>LL2JI{-O zI5$~hIZz!aY3gklfU!=f`t`e3=MOXmhHt%Ys&F=SZ=uIpl0u!<8AB*dkSN}l0Zkm& zefLHhcn!dauCJA0qdndMoOl?d1pl;`G}kc<#KLfMc3Nbh^%%6>NqlYe#Squ~_@@QF z#)SI9@MI2}z}N0IMRvvu_eD#-w)-JG{ zS*-wGiO>qWm8cZpQb+pAj6sWTJhw6=U~Y0>OY2cI-qR~(wc0|gH2;cK+|hc^yro<$ zJ=Fw(Q|b-%JAx_Vs7}sZp&2_)bD`F-fw2CwZfhu-I(V5g<1AheH>ZFk#O<51((})- zAaQ+(#S(=sa;!(4275%F-Qo$QUr%Y$t@^?2N5#w7X~(=y%R%GjpZR{q>x;urj4OeZ z(EHb?6`?lWJ#{O7VYhAk=do-c#I&vDoXRhfW&s69SjNuC-){QS5oQ(#knd`A@&F9^ z9qR%AZ|Y2NkWXR4ttvbf4qE{H{d%5V7M{NHmFbLN6*1%CQ5aToj{I;T0}`ldpFyZK ztuvwj<^t#c1y%jWt-Qkzm8jl%dJBZ3^}h|g+xW}h7XXHQ2oQq`YTVR)tNWwX0XBKg zZjysyGfZNqg%G*-QIFTR0YEbaxrOk`jW1V&4RsQp@d3mjF*Z0s+!)YUE?84p4Avkq zGC05Qw-OK{b8&;PF*4&q@JuSuw-I&mTc)m2u7Yi(QIiTVm` zrda2c9R!kJqtr}j3X4_wx9gy{QWKcCMIek$=abz6#Y;{!AhD~jH~XGsCLXXXhxSqt zsuhfEjdHe(w|x1WS__G_!sY9_hU6FNRYLMm2$xJjTl7u%m?vVTu03Q*jw?}}RBskZb zEU10wM_>pbniU3&tCiq{thAQoE@(aiOA;s8U5S?B+Kn+VZ?=gAnTTs`f55ME^G}P% z5@-qkZC&j!#4w{8*zw&XqYe4yYF$@UR!B7pV~0nTz9JBnX$;Y?l@e>|+N^-x9m-XI zrngBX862pU>0+vjJderVq5H*!1R>Of6V)@gOYLg6NBrc+rQ zE+rvZbK{PFj(uCPGL0O&p;;_JU627NYd2JLH^a{Hy~bG9=A{;ZiZ09cLTNaKZ({4} z(8yA=o;LXzrXJk1w@I;^??^rn5XW6=%3!L8iIB>2QA^EP{nWJ7^{chOQFYbeCDxYL zFcW*%?lM?^7sQ?SK!fC*@^RSJeqDw-;TP4yPz|13=5sA}xlUPM^!2eI4p&q%2F-(D zNp3)b&IS@1#WC#`B^`EGUR2oa*n4j)cDTuWN*1c#bRST>vvRv>{9Q#TT$bAK=NGr| zfxp{X#5<(5bI^8dbFhHY6Umz(Ft}doxr=+mssfzaxLkW(QNDiGp@=y#5T=dv6oz}E ztoOyQFT*GtvYwWrm8)Zl66>!eKf40L*)kS6&RzCSk2eEsmQOd#-8&TFWluX_tEBtu^T(L-UquO((d=bbjbj(=%!1n)H26moB7&>U6V9@z;9*InDk z&rHm8X_$m68LTU+=rk>I8GpqQ)DIfh|Kr8JRDX^7FTU#F8*824Y=$Ex3FzI4;j@uI z&J7P{?IUg>q>7pQ%GaM9izbK~*;T2=7q<;@@QX4z1I->VGl$d;(1D2!}tQYoBQV_C07wI5g)>v)%>9xEqQ z=$3xg>^!FEx&9U4)sFHF#QtKKE`%Rr9LUt{)$d`#t*(2c3^=sbR=!l08a|APaxe2e z4_z;a735$PY(4zGgT~-=X>Mj>Kx-<3c@{DpD|<{|ZRsq*Uinn6?*GOy&GKL{c~;2- z9{aM|M`#(eeYE2d_JaOUCOg3Vg>c$!IMmOwTpVXr$E#MyJ~FuT{uKy(yuvB2fa(U| z`iNu7>j%@oPSle@XSJaL7S{g5AXv8bG=8?EPQ~C37wLU{`!QR%yyE*2l(KM~6c-(w z3^BV*9{UZeKeei9FZ_%|ka-26%WJXNdbJUkQ3qDqo1jYwrqtZux)aCMc{=5}xCxoT zliOlvUdgc_%hsU{`GAbK{lW-mOIZF<{fdoNz0w|Td0DkH;{QD%c|+E!9>oHrm-~pv zFEQaV_t>_>+1CbD6sqss18OMUI8s}x(tsM!@1wro0|!wIBmDokr|X4{>2?Q@DJg9* zy#Pq=e$S~r&~35Xegyw+IeK1jDgaVEJBNnSVx{c}w%3Ge5)jh@Na{0ai@NfVK)d1q#oBKo33_So?^|JMZ(;v@PkngQL-Strh?Cb;*iv=5VEujY` zZ70}W1BMSEqDGB8b8~)V)pE=z7Iu)fbrq8}1f(wZMf#Q`+>E$Njpz!5UCNt@(Q~CH#KN2m0`Wk3)&h<51hk1#8xO|+N(P3U7=hODL}qk9W%mY5}>KH|cqa7h0f!oqdVdwM_zggd;Fj02TC zHvuCeiP8sSZ=up@{>24m7wD#H^^tzJP?+wv(0DlJc^Nr=S0D3rugAJA$Utj*S;Mt9 z_BmrWGYcuzhzwe!A|orb0iG2?r>|RI%cY+_yFOQd1e_BTCfDr2;f3_zKb+Qb4n}Rr z^_Qq^Mu4Qh9)#)^W)ug52MEohTuz08V-flsG-Wm<4ebO!hDoJsPYjtI*qnd19OT6t zo8hg=6lNB%?9s?9XkIz3f?_5<9DM2wy%=E=JA>=`zgQg+5Mwk-k?#WHs&jhB0j1;| zQvxWLtaA<@r#;ck0Hi!j8=Z)T+Xr9be$>Lcm$x=&|5%q>xQ?z2m$wfX_%0{%ye?Po z62!3q5%#-j&I+gq>)`xBC+^LlEOSGn6jr}Nn*B*risXAauGWi;m70EB2z+0GgA6g00YV1?ci*1`7rWz(gI+8cs|F}q zUgO!pCpT_N-2s&z^>Rv}*$hGB3}~m$00Ogp%l_hgSNrDCEx@asq#MGu0qe9V!)9VR z#D^~qDYI0hMRz?mo~|7V>)*K1F% z)~X-KP(}b6W>lxbNlg~VQ=O7OECDJJRH)&c9N;nV|-7)H|%WXHASVvQKbWZG>_<6JR~nHip5`s^|hhxyd$Tfn3@@Jg646`x3m6|=4RGG6bTuy^Md0#-nX#Kkp_&GuI&apd1m-B(o=X-4E z>ktcm^PXW2I2tHP4AU`fKlcrxNf&^AEf8DVc9x2u(bRiCqdZ4Jh;Mb6@`L<_pgM+! z)&CGgP$r4-aBP4!1mF|wBR&o1ah)tb%?k{yQCTIZq{nuMfgtvJ=_4~9UVA?mhj>0= zD9#eU-SDJ3Yri_+;bt6N$8e^w+u0!4M!{4D9?M2stbGBDkC2LxPe-_LCD(puqVCSJ zfyY)@LDgTJupaSrdb+4xbI4#`H5a&}t1N<%NLGBn)Lnncgq$9D^M?acbcu=Dl0=7x zd|9i-t_w*GalNiqu#0!^=FrW+MNV z^D1yKU0Qoc|JfOZH#g>d-xXZ_H0dJ=a(AN`XdYS+YsE$QamnOxGk+1IJ2CDc!Iowx zg@AVV|0r+az*)S{`w=vfY2+luXw|_LI1}LlqsUv6Lt5|2h&#iIO6#a|x&f!!>nv_8 zL=YniiOvQ7cIY~2@dqpCJ#|5KvkcmshwUum?-?RNnUO*4#PcDzpg8I&=MBKu$H!Ac z$N}-@h-$I`4;gYZkYVCfl(f#i#8e{H2+&W)xj?wdz-eq^rL3VnDR1s)GTJWWrj%*~ z6pw^&AhgbzmGd1I)L>McIDdh|?4grzalOMvZjukR7Fy^JpdQP*a;Oot=~Gb)=F>+=EP&KJbJ95mfOmwX;S1QR9x5tCTR^n zj<-ahCgm9IHFixN9M5;O#S1l!6%Bx5n;sHFOeyefQGI^+M`(v=-#H9bOt5|bvr z&aDqbTYDT-dPY^+3eiO^zkLxq6Y(v`XwL7#WhD{Q!3c)T?xttk(X+zwB~xBIukT=%9T zNJhdv*BplUo#B+shtKn^s8@u4v|C&YnI$krDU^8c>P;qHtJ+=i=;)z~&#oD2v$S5#gxN)e73i|U zK+TErnIQXRqm-3FGairCwCe?A8dNmG#75f(mCiF!19W188m93#-`+QCwi}LUhH{2{ zFm|%-o886F7)IQD#mkXErIr}A0dV7fyxuIxK&wd2Fb>M+PN5hPh=9VSN1N>V?} z7`~%_68*EwH8a@80J~`! zAu`Es*g)mWAB8R1`S8=A(8NRfR~{LB{@zKe=slkTf}fUouE2HZFtKcR3A>3|K09VqJ4+VVg>b$jPp6K=5TEWIb(!n;<^{$dSpV6SbWG2u*Cs=4#T$B2-I_^Gw!9rZ| zm6fzVYXN>Crvx5QZ*yIuPVMfp$_-`qoxn`*nwp%>6)_^d4DY|4unPtn@U`cxcYixM zxj7*Qq?@dl3ry;()z3~G2hG3US=3RLP4Wq&=i(FLT1A5G?)S{l`bcL3yD-dbLj}ky zUyc%#A4U@sVQdAIC)>5Cz0v`91#vZgBQ8Onp!mAOPOhj)J4?~MTJzwVLlcp|+G|x6R ze}guT31UgB8FWA6dlU56O>VxM)){Fz_)tkbZ=g1jjW+!SFO)SvL@*+aqQkNoB=urW z5XWA>P3seCn(g7>BfVs?&2wn#we+i8kbZx`ohrxUwWOEBX3dJBXJhGchvvqHH>}=7 zn!q>S{ifY|q#3GWm_YY0_hv+8YEUF{mpgsZ=M&XSyoz}I=p4Jx6u zwu-rFr3#SKPQ;Z3^t+8S^BdUOd*2*`7b)Hs+v&A2wbri|6y%$x)>WQBVHA{;ziIc@ zzMfr(!G6)TgnSmaThXp&&J7sZ8yT-7l~;3-?3#FrG-D91W0wsbH97gXEziP2Om?=+jLny+E|2D6`%$c@m_jYr2?15#-AR zzdXifF_Hw1vgEYOd542VlRh(reyKJ*^0pXiAX7H8RGes@-D_trmv&CyDVUz@RKGbf zSq2HQ|ExzNN^0;6lW#RE7;GTf5qX-=mNtF6Yz)uC3+BX8JXU4z*fUou(_^Splu~~@ zxtJ-mO2$EDRUe#aG`L?h*t+o&*H#d3;nUe^Eq}U3T0>H!wAc< z8$zJ=(MBhdXCujuKQop+;7S2JV$pB*vqk%gfPU6>85drn5Rfo6Y_chB`)?e13LWwR zj+YCX!ldh>`IhY(>DvI^CiR#sN&$|E8sN=66hf93ew!%TU_b0Uqqb+pXC&* zdAkt7^GX!vpA#L@Ms^v6kV#CqD~7)05ii>yIB)GkU%V4`UgtnppoX+l0Yj0H@tTA2 zqib`a!xaGGeqOsi`$;7G!K~X6rV6Dw?}bp9#<#d^7J~RANmB$d`!~X%0JxsxPNcyR z#qQhswU>^_t)X>wXmi)6+wdWX`f+|Q{L#&!|0mvMsgU1tJpgWh zqQ$xINn#^>Kym2fA&p8;W+HG`+($PcDX}4`5x%Z9xS-_bZ6ok4VT;yXM?O+fzO%2; zH~o(e4@BWgfwG!~{9C$~mv)-ZqtQ1a42`g9Hq>=1bfuLS=&rdzo(z-Kp&poO+YU+r zlYR69vR{QkB?I9A+Z%q;VX^1(1zzn9pP7j*1!;D9&c#y~{o%Tw^W7mUO)k3@{MU6+ z@nn&2d&jSx1uUXwYHoYqZ+!r?i3WtqQYrFp{IXmfg<6mHoNi#kWhuK`W~Ewq!>1de zLHQ1e4pa^ptwc4l&IgpL)-{G(zKHmoZ+Bo-e!$CjY^qPk1=ORK&dojW5>>jn)pSEJ zRmVnF`ia&TPUYoCD9W|N;6D!n$H@!ELd;rQ1MZSggeD5!rGei*K^e&*Z?n)W?&KYGJWIeF1 zrB$8y2Ue>Q&_JAhRhY~1lFBydSF(h5u2`!RlsH?w#zcEA@Ct`NPqA^8w6zN0`H$`K2Foz@^f(dPqXo6Wd?ibm;n2Pl zqsU?_=O2F#Gaj^I(zWQ|z@2f)hPT9ev6UmQ^TAB9w>+;OV#eWm-IQ;;Y)Ubw;=6Ce z_ADp<*{^MuCC07Mk4tOGoV@&-WuRh1TCQ+{Z;OQ2w$x^$p@L5t z(rxkOk>Qupy2f68#SIt^LN&hW+DEZ}$Q;pRbF>?sGJd6egKmzo-qJVgeM@CIo=p5W z#^a@E-m?O4kK>whyl()@z7bxt2(*tpRI(a6K`iO?&}n!@%$&(j6HU!6OyDN%3a}ZF z^MO`r8f%a$FAMb@%KY*+PG_0cnA|OLCB>jc`#^NUMi6q4FnqTI&Tg#tMRYYa^Y4%O zN;~sJi;$j0w!eFFDoSb@rckV5vYH8ZD(EKvcu6x%P*KR}!NEF=@6&u10#UEbN9Kmj zD}B4FRvx+csCV6O&$!3xrPV9wh?P!$j1N@Z+@yKdzrLIJ0SBdt6vkw}W>j6 zFWULWVP#nGWNjMe0{t;lXlHDbSAi1DdZ1K*CR4e$*DrL((eHFcexwFRW>|u7resLV zd+me_7a5NET6aM~FD(kPTyAe`XX^l$U~bU^cT;oQz33dit7zH+-EnM~Fc(F4QJ-rI zE}nNuM>Q}$OgPm0pRSbr=0Qg3QycK>&BE!V`*yd?{YI;(on zr5Njcr2Zp$CshlV5>vOeJIl_bq_~$pMs-WgsUFA>U5*!uGUs)80Q*)j(nq93hH#Jh5xQfFA6%y}@)TsNcrupIQx1sY}QeR>eQt+(j zMv9G8qp=aM8oQdCrH`!o?g$i)dHK<@`MP~!3-G>F$NJQU%U;8T!b;@;p<^;?!6Kg< z>9Mix(ZsO{CLEa2WaDMJec{D_)5`a2lvZ=i!#osKleI5g!u*NZ$0w~Ptx#0lOjG2? zTKAf{34Ac!W3}OD-Q@Dwbf|fQVT&Wv9tXNdhF_)NQCraXkAr=Bk0&$YhRfy9_-8c- zn|FMM)L0P8SjaDh>bX>;P|0lm>q%*rQ9`q-J=1H#SK#$#tT45BJnR$9s8V+MsE*)%15s#vKlGXCosY0ZT4}@wyS_`UPo4&cPU{b8pY&ju zZ6A(Qu5UhY3&Nl~i?Nbow{{nwoAg`veJ9p^d^FW}uCKg&`URRu6dJEdLeSgH7fq&V z@8hq>_g}VPQ6*xBMXfqf!N_0nrz^2?=PvWf<4# zJ`EH`thGxxoh370OW^t6}lnKOj^m{HbjkEyhlOAb1fs#G*e&f4i> z{IQbtB(ZMG&47S5eaMTTABR5b@h+Vrrr{ohj_j2+9jKGpS}=X@UT#uvym|m^aWEyH1xS34v3k4xp*yMh&96tt z_bUF;8;HWqWFG+%zxjsw5bJYTh>;M=t{q|byPaH9T)cE2=(3sf0Ue^7u(!P|3c6v| z3p2`(S3Y!>ll=C1zrYOI#u!$%mL+0^2&-5htF*mTBd+qW-m4`q zj1^ALPaHcAt@2-Q)Zvj=kBK?>=0ppQW;~&xA)l{JdXT~I)CzACcf?Y@>TJaSQ4s}Z zvVL7|vKc0{1E?S9~c6lk*+VWUJB#DTv*K%oq2dsB+u-3iXFvOvD zH?p%;8ig5y_ap7R7A#2JnHiWz8xMCOIyE|je z5NKarEA~2VYmM6);r%&+S{A^Dt<~nntAZ4!<9cX7Dwt9ld>OOJBqF6weG1k=%}ne44e?6mv!d@fK0h-Os=%Z8^n z?T&vNSu0=AJ0lG`OUl=@!Oc=m@7t7KM-ov_QVe&8-zXMaBi4P$ZgR?93RLlZ^0^JC z-ZLi%3Rq$7VflVBWf@#TQE)jEm4&kuI!6}N|6Qcmtp^z6kFaZFJECtZBqiDg)OOTV z(jJ(iV@OUsdH(H$$<9PxB|=9ZZM1 zfoNY&`O|iTgUe)9c;4tf-4^aR`Q04|EApKc&Is~Ej(VhV>x8!}YpPd)VIEy?3${b~ z6pR*P(K$h!h)#{)BJaUoqg^SB>ygX!XQSO;**^-ERZIj2wl`wh?utWpdn;8+Po1$D zyvjt)_q;a*3!wnWSr~WBV5wrpxi|WFh%q8mZEoAF9C8I{vihUWA707?5^FfZ#EaDW z2S@5J(J#w71Y%k*ouYTfkiS${wNJJ530DHG&q4|W8N5kaM<{$k z6w{YElCB_Z=FVQBJ?EZyT>%&K9&1JKR0XnB4wIV-!u+cdfOa)Y+j9HO8#l_R|eq`%ZyqDobXkLkYJwk6L?2~+}@TBjSw*IxR108tIu!IjiBTh z@ZA)5$o6*CY{e~W@}+KZngrVfW#*rR-=2xUN2mZT$XVp>nLz}^3;58E5Yn`pa4^`W z-aJnp$qu<7dQ(Fl7K9o;pwwUu0H%t^QTV(baAjLik{yTZ*@xr|o6-EsFe#UgHy{vl zg4hlMR&63|qS9aaP4OunpRcxYNC*M#Db0D51@GCe&hoblzPL1rlN7|d%f+vNnymnC zzF?+Y@13jmi+}C!9p%BB5_Ct!H3)c{bwrQ`WT?uU^yLVE$c$Qp7OL{9*-P)d^LAVE zi>rG<_1!-e@&YH!@gszYV{@mZ#1Z^sY=6u90yhO&Qyb%Bfhd3kR^&ZA`xv%46)w?Unc^uP;hK!5{J^59p} zcF^r7d5-cTIlnH7EB`bKRD$c4?1zW*mY>M5(*F=pb4;!IrxtW8(}m_rWU)e0I6Xy9KS zD75?vMxcMs5xmQ1<@i(4 z**GdRAaGAuJ$~anYAQlwrFpz|Qb!^Nl!1(XAclnVFM^4Z8;WNTu@I0EJbFlAjV|T^ zaM`o&HUlo{*8p5jkMqKPXHLQEKX{GbAJHZZ754)w{blv+|3Tw_{mB?SviATmRf4dY(9Ca1;Sy1ygpSfc0+^?JR+$&a8s~ zrgq|xNU5EScOhv5Mo7d2_@>IA>gX@nFYse$9@aXTyfXBzHxj83$Rbp=rn;dU==&5s zVd>eH>?>7>z|IwN4~2Q^VR{D%QLO=r%8?z(dF}v9@}hG&A~6A?@(9E$6X6a+*PO<0 zeU3yZj7V@E4Lp-2^~1{MHvz`HBxyJN1=dm{g!m;v)4XHD6f( zi~qv3x1b=_S|5p&S_!O98ILJmL<|9J!@EfE&FUcr;DVRh!GMdw1^|~=gA&kG3OKGH zaMk$SWxpfZ1Qb~Qgv$GXRNjAqU;!}YYzI(5^v>)51uEd1Ymh;j#z(sRf6!`Xf!_b4 ztjRgC*g%$J@Zd5C2j*eB#IZ6Xt922G39B=}wtliF_!|N}n+&|GYi0khz3&cd^6vUi zLQs|(Pyu&Dg(?V+$Z){jx(8UrEdruq6lFR<1d_)pE*!-f5TdPM9~DqUh9Ic}L}k>d zsDPj#6hVfl2r_=>4#c;^n#1*8zEAu7zWs~KCU@@p+~<7G=ghCteT1Uu+5t(b=_1~W zu!LV_u0AQa5pfIbu|0R%`L8q{POH^}UIQuVn%2Vzm!@kE1S|H~*%ySiHmoiraPI26IkRKfeAU@|xaSnpyvQ)His8 zn|!rf&X0%s!!%gw+8RvajPodkDrt141CJ`-pA-+T!VZklAf7C$P6dI#logP~<~MVP zU>wD2*qIwDELC`NAYg;gUl#C(@1CzXiweeEG(mXlMS5vKX8OeQGskM~vD$`>Y;S?* zuU|F~MRPk8fr6#>PdbB%%Y_|Fuz)AJH}O0wl>mVf*R!Eko(LI8t*FKz-@0a`tKE^bTGW4QXq(uSFVEFF)t33s#|0pJWdX>n_?`+6IR@tXzsui8s<3SdHehevL~cyD7l6I!-msV0UJf0^6~WJIQ|9j|zx)j*wa_18$wxhKuk%Z&$R%aI>&p(5(OT}&(EQSAuKuYvhM1fq zoqGV=3}Zs9e+&{t#&Zw}BJm1Zt0Ib9hACcX08#U32;MJa!u-EQ)yU3&m7GbEV1uF~ z*tZMI+6#+cGJ<9CmR*{I@@8d#+o6VK7C2YQ<|pxg(EBtC_&o*9>PeS@yb7x^SBBj@ z+B@w6*4sPM?0U(1SREO0h3|oZiq&*+9P-(#1MY9be4c$-51N7x+bmMtp$los`H)tN zx>ludgpPjprJAsBc!t3_%q)1(FfikV%j*>$a!C8)^D4A+Tkz1OAL;>(hj9{H8k?@s zHMKYIcHRs(N#dAbf_$!f7s!CQocW-z7aw?t#2G|mDpga*bTB3CfU??{`+f=!P==%t zwCTfy)tc?wF$pBQiF92*>Vjz@E_s*)dDT93Q|Ze7J)J??0rq|#mWbF1?rJ@VCT@F* z!t<2rCuo}y+plmMfX+spgW^!^<(PU*DQq3x86kaj0o4K)Co8hO+UTutpi#yu&#Fv{ zO0@_ur}O^j^@}O}q6`r^G-2zl=%HO7A(k{T)exs~8X&?l=>JuqCm|O^3NBBU>whv>1p^v z-6M7ZtK}73;73QfyD_yW-I)Lb=lstidcUcnK}=@vrHEc{%8?HUcQP*;)1?5{^!>fN z|MZ)2=QdlTr-<-9(I z7=j8%5Hm$O)H}r|>w;pwg1}~7yx9UwM@J2dZjpG+npumvG?Qgw0u=jM(*v4fU-}Lx zwu67%RZRCZRdfxUwoa$FDBJRbb7U*eIxN7f*V<<`Tfu7uklqM3CDZAfJ{ zXMz2WTnzu`BYwG0_-Tg176L=(!fEvGJD(|0suN=^Hxk} zsN+UqJnV40H%Qhh_;ODj!g}BhyMUC=4X;GqUI>Ick2mELo6bD$>D$NCdm<(# zqj0Ue@coS-qpXA$~-1 z3|MYR`bw5)>tMHRiiD_H)5|(Igs$9kk*(E&?lxIXgxdq2SaMiVB|N*#+@YNenAP zP`Z8*V;jb6-5t(}Z`>A0RW3b0e4nRFi;t^?6r<@H17(VGL%$0qYOOf{@I278Rq^T^ z7sl0Uv8Bb`1C+(~Rl!C>1ZlpA-O;eNhsr-P zV61+djne-2D$4(AGlP!)Su_6pFCC#e0zuk142qA4qe;=mwS!U6w$~8s($%e4?HHvS`1#dj=_RD!Fw+N68q>Vwiq=i8Y&eCL2UcM&(G zJ74D8?!OQrR+CXhR{_PZ9yG+TrcS_`G?MLp!1$ni9eCK&Pg8?YS612Zl?;jc?JK>7 zVdd;9^&96~-h0fiT)N(WZAAW7VX5V5)Gux6u`^FkT<+nKHS5oa{HK4Z=?i+})wf_f zg6E2DAq0us4RQO@VzZzp6_JkTuEXVcBzJSnPw#wENa29M?x=C~4seJgJa;wW2zWEnXA z*oRllJaKVZe`QamwPwzn1iRIW56x2HB$#k6G?mEI>&U3dl$XOjR1IPoJZzF($V3d; z8b6bw>Wrq>W9aIyb0Lm<@uaT^p@v0^AvSY9pS>mQ1131edcn^3k}l; z(cJfleH8!1Xw_~(>6#)}3Y%>H2|cD_(#7VpWui>(?xTfpW(;BXHUkVz z=)NCy`8iythU3K^kZW3ey9YCKmtid`?Kv9KZ>!h(q8#iCNCO>Rx=RV;&O(QB#TK@C zu^0<6HUMAta7*I0aU7IrR;vKM>xq3jUG~LTtlex7&Ew*Ea?!jsEt`bVgxQcC8NdA( zYs@1+;UMQtl0_K?E4?AMD;>Jm6=NbfX8~*$yF}Mnn4v@yO;e`HRPh9i&OlJ_)R4I1 zVmmT9-+dK=iS8XWbG%hCLiu7zqd1$Om6*0Ep@;JK%*+G^h8%N_Ed>MZ;UGT#Va!Ox z+_IycaOaD%{pAqc#U288;8Dm3Mi_>^4kXfASh|S5))7}A2k_2J(xg~fg&BYrnNONl zMP`&^csO^&zu?;64HtbZOMHfJ6fLK72EZ7XFK@;4T)4yb#1}gIl+xOxlcV;ht|KHv zuWS|jUKbLc z;}yRnSj(<9$tcx(miC7QA*W|)=Il-Mv&G28h}GK!L)s+wp^ouWt{cWOn9QKfe}0@l z|BK^V8EyROpavq4;*N-FqedPMOpGm*YVTa+U(VSnOX;dW@H=xB;#YJRK^C>f6PKHH zpeV1xTPQB71RSc9ebg@)WUHc6*Kr*Q)-?EIL+>6$#0qSc!8D1gRTh1BdM4&x#`XXy zHkfaMpoFI0(r0V?9Y@e!?w88Z(gu|2u<3Sw;TViju#Jav#ffjW^u_d77CoTt4S3>N zoo6kWtA`H)@_oCuL{7fFE*JlV`JM^DbaLn;CCm$mGJ*$qy(tvajZpLgZ1iY%U&IR% zNDkAWz9f45wpa{IaJ(1M4vd+3{aVXG#Py5ru{7^Q_wT&7-TaJGCIuprNSuzrDcGt+ z3k9Y%2|$ZH#AGLCO)#?21B+htMq$@gnb9?mOT>&f2&h0P!9`rp=!@}20_vMK_C0-3(su~( z5>KQhx_?Dmg`Can7xfV3Tt@-??)}~c1M52=q|>;v1XVy>2`*bkzwb6L!x#t!;0yK1 zd!x;9d6hsq832?ZaC`Hh&%XLLRgs)l);m%-wySPC)3n>Nt1G6#v||tqnj;v30^lMK znnjuhJT9+|Y@Cfq_cB>Jn$T#YV{sm}+K}UYktUv3sk)V$<1s!gVJ84oUiut)@V4jN z9n}8TFaRE(%V$1d{PBh%(8aTMSyxOmdCfYxfF7^*utEtal1}*<)KiEL3k~TiF8H*C zOGL34d>v0`OimQL%JIAIMggX{Tr?M~Yv%dusI+Jn)J8&wSNSN$K_=^{7AMDUZNIJ< z({jHoL#fAQug4=q!(>IOK);f0*7Jdw8)4hfRhpYRe4E0(oiTB0s2=dos#>v}e;!)p zjoKy90FtcBoPgqS-@s?phhLwA0ktgp{$1*hp2)H~Z-99K+O$TAeO}uZVEDN}GPyl? z*;9$MC?gQiQ;$1x0cBLWVvx$cCvd3wrqB9f-dZ@_0oG$vH%tdu!fsl9LQ*R?9PSm0 z>Anz1uG3Kd?8AqtD1AFh^9;}+P%m-}?T6a!Vs z5K`AUImRP;qc{mN`=SN(DkBu76X4o=lIY!AUAXHXkyXwdZ)g~e8hiXQG z>ZCU{VUqV$8OSF~=hycbRT$8{9mg%-t!!0%Ew5sQW?mcd3g$_!07Z7^l;SbYR@ zLpq$Di(1~BPifCWc?suRun_tqF@%~@^tT%^q)_MzpDj3d`)f=V&3+(VQz|tXm-2jk z6(*%X70nZ_q`Y1pACGD65=hpxYtWiLwOoWmg|@T?S@f4v^3bFn-7rkmd^Th-!{Q7u zHf;ATeD>$l=9mH_obA`1E%1qagDG~x5T+JTa+57dc_`lSo^DPsFp(5v-j?M;I{LGE z_9oHg^#+VI7phJ&3fPiAPBxwZrNG0fA24^d^&;e$f^~{eb_q2kTpEXQjCOND zhce>KF;gOv#ei6`KTZfl1nfoM%k^zYXHSd^V6v*|5U@J&v7yL|OR8&o!n zMGLd(JE?kQ!DmKmK9)lOJ2mfw4@j3+DvV=>O~t%5@9m&&J^ziupPV4tjN!oE+u>G*`d=&W`5txaH4PvhhrW?=@mL1f!hDos zrKr&Yh?u#k05doW$KgQ=p;0x`Ui)Pz#vxUAe{VzC9({2(;My9$LhEHHCkek&qQl?P zE8PO6bIEj12Mt@63l?HpnBLIQ;0uq3(JiV5Oly-58*DI^ycxPoo~o95Vm^BTT;z&Z zQdHAWbq|_D_?4|+W`lTHl(-xCM``*98=N;yY4?x5%a3s60J96nb@J&@+MhPH#%KIweS zTS}p^>S>y%J>uF-mId^MW@Vr*yiFD@8iaN#NWFlF6Qs0L^x{H`Fw9l4dD7Ic7>IBE z00uav;9Mf&qwKk~n|s^cW~j9ehO%ui01}WCaz}{5n;*fthw7s)ymuJz-`(Nvz27R2 z&{3>1j+;PZ+`4U(S18`q-@vq;EQch+^{9uA7#--<4&WLQsPuc|Z}9t-+Xw?pXBGE= z<}`nyzL#Mx$^?IHhwuA^YfoS%dAW2kxuDfSXHIIPK`5KoYbNSi?fPx~fP*rHB zSc`<^pm5Su7RGA5=pKy+v&}P`MaK}wT|n>3C~+?x$x6j{!DM+s^1bwFYB|DcrSxq) zHwcXgu*D4jcIpXn^fTSz?X`vMvdLvBui?w9gzPvvTRsM!iA*Y7O6-jbn&o{$p zcw0Z=OLbmwszDke{?#x9nd~@Gh;jrSniql=g%5ok5vz10B{bo@pK%=5|M+j9o99@cO&5$8bNA3f-eNr-X>fn;W6=HJFO{WW$6!R((X z6HKfczj5ig?wA0&1PHK&!9onP))+>=s;>i4vx5wLKP)H~cH7D@@z9=_JQ}?O#i=2F zMT`uM7BDl9-NE%sU4+hKlp@-y|Hu+;T&ss0a_*2pK=0$s5*8w^6CMPR8|0R|4r4i+ zmFF_8f7)DKjJYzCwM^~C>+1AGS@K}9GH+Sc!;=VV#@1r}1i_lJh>h#C-9jf!CfJnT z#XJFAoF!s^k80sfgI1%xSC$52^m;IxmdvhkiI_Gix(Vw-Q@Y2?cFnR54B5C6^R5n2 z!^DgIg!`=8)@i<}YSew3drSoo*8b4|2StSfKuY@m+z`84PKWth+P#UzwR#DT+l`L+)t+@oM=OFv8w|JV|)CQO8^9f-nC zjo~$g=^JFU=^RURvXFt9e9_mL#^yQ9vRR2ZT$a&67-jP|?}DRi6*JZmP#SYCc_l)1 zf<{q#(0*NTB>{0^SezcoYV`_jtJQ&}mAm!}QG7oXcOb1L)AG|$^p@QSy%BE`%_1=* z$oqT9y-q*iiXlNckpe+Pc8bLq1hh$l*;>%CAO6ND9+P9{x?2caC)o6mnc6UMV*bOv zm>!d&HLP8NQgsKhPw)6XpR%BufXe(kw+%BixBp`NRZ8o&M*sLBd8;a?Sa+Lb*xAX~ za7CAHJFWB<-mfYCBR^ixGGtokWxYe)eOq(GSIq-49>NV?&(`7xm8c~GBZb=qrOB42 znFCNz{;ht^*)q%YV*eDQRW?lP$C>9aFSh1u`d3N=#0}g8E6k>)oFOqw|b+ zCTjrwz#M5f<_X?g0+`nq+)cv}i;i7bCdsSSi%l_h!Hv1JNk9e~6q+~xc^X>I+sqoCtV$We-GUaIP_#!~O_`^(pjPR)dM;CY}t5i^I}}X*7p*(u+*{r>nm0b^-|*>8QhFAT0{C*@)la&y@z?p z>;(|%7|!s=D00ksK<+&07R(AQ3B6Zpa)ukGlySM|A{d2t$;x0RKQ8OgPC94NMk zel{fxQ`3yOAgK;>8z^G5NRZFd?g{_WSE~ z>*c;KGp)X!r`R1yylFRJ+Funxy9AOi_Uw_9Czqsl; z+?A6g1Hu_?^2^HGFbJbioJY_f9b4-$0mY3WM_ih6(BY5N>Qj%h4l*r|-zS7&;<6f8 zOLnp8y;gn|BrA&KSa9K&yT!t4FRza6@U-CCN9Gm;Ddh$0Ia@a&!@ zsqq+-(Ez5V(aIQ)VQR~ua@ee1gQ*<4gFI@wNihCb3g#tEWnjF9hK>w`6AqSPB9?VV zHT7kA?esZ5D7<JO6pv(Q%e&UkU0Mj}K~1#R0R&?W<@9;k^2{_831o!oDb7 zP@38$2oyIRrMPoIQ)*v6#RRQ2!H|kf$Kd4%de?JfQ-6#xaK*Jwz4rjEzaP+oC^yv$9xro zeHB|V8H$x3Tr};zGWB1hD(oke`)8;3+yCM1#X}Zu<5CMzyk!U6_>KSuCfNHA#t}1F z|0qeI~-G#$zzJFytHggNWth>i1Sa7<44(b;AU&04J5S*4!MRwb*2TkFo_Aa zDe%5^TkTNMskaHto4b|hC^iQss}Crvsbv%<#h{W*ueULKt&X9>L12=72INXHZ11Uh z(}#v&0G+6Xsa9^)t-DcS5a<0|@W4m=XFb6@XE;nUY)$*c0h4d|yIeRSET9zpSa?fq zU8>(x%h4IAyXSrjQ>sJ9?>>wXy(ci-(75Rs32ujvUi)DYCOOJAfKC33Lof?VJ94uv z-B=KUH_wwcZEf-SV6|?=U=)joWhMF=u9%e>)KRF~RP?`$Q4$p}oNGmC7y`NhmV+i$ zEyq*O5H%obKwANc6cnOCMM32Pc`v{pi@T&I##SK(JONPy zq6UDbL=A`<5H*l-3gQ$98UR@$YCzP0r~#dCAl!hU0Z{|O4cgL91Purp5HuiYK+piJ zfT#gc1EK~pD;KDm%qf9kJ&fouI(x@*$I-~!C{acQePe#Iq8I9{BTF%|kd%2u_ zBH8To+PPDi%^R6u@mp;Bi|trK6DBh=*UApFkcy+O!gq4_`utC~E$wq)u|&}U378FP zTy0LyjiOS_O0KJHHqW8e9kW4=GUAGN{hWze$+cBgg@3i>S#ONA7Ex69Z6TPIT<^6w zIa`~rkHJXmfnILJ1gz5)ev2{gWuc%EYIo@?HRCuNB~9xFgBqCgc1-+ph74Cp#&^K2?!-1lz>nIE};a35)ev25lTQP0f$fmLJ0^Z zAd~D>CC!oi7EEBxiX0Kb{P|J{_`$4NXgoJfWfS!9})Ow*ESS~eN~Cga~^ zUx5mt1cVY0O28qMfKUQL3Alt35K2HO0Yxam-;WaPT{bR)$zV{rrG;aRZ|xfG#}_4H$!mMAPySfa2@)^MJ53*mE z?AImdMUe9%$axXuya;k$1btq_pv%dfKlTDBW%jbeEY_uFN`w({fu@+%!i3M7tDEP9 z{(KX&37Tv(Cjl7YvmCyvdCsMGIhf_`gwGN_OZY6|vxLtQK1|}JwgzX39y#NCJPG(aT)N1H#BiRH=HbIh2kYp1i^Y6C_@-N_%t|O6c=45p# zQCPCgTtK#&lWpdN!!ihmC6s`0Si)gd2qhqtfJG<)p#+2ykSqc0P?$+kb#J@nekPUj z@qgW5u|&H0m{qbQ=pqP95SAb;L0E#YFp^FVnkJ`85=!tlqXc^c>^{hQ0X{!fM3k2( z@83*$iNbO}J7-N4mMAOnILJ0^ZAe4Ym0zwH0B_NaltbkAgLJ9tVqXZ|9mHqI!UH~#pOZsF<7Z)iakcCkuwq8UJYsb{$E@pB$$VB+e4+DqBQA`*@Q9UAu-&?l&wY-X2^{KCm^z~%fTFAL0u3qtVbqze(I_J_>d`VHh)XzL^I51Z?agt zn?<)ZKi>^XXEjuaaA{{vgbS)dG?%t50t*Bd+Co~w76@Aa(nxbt z!WIZykjEDU76>d5SolrEPJ##$MErLJ5rNCOTn3}>hv}2Pp7$F?|2S?;GGw&Ilk_9) z2ub>p=Eoh#?Ve}145y@P`-=vCw5PxR<16j=WoMZppY9{4c#K2kcsXZ!zQ4k-9-gok zlRQpgw+y4CF5D!{&A^q5E0`h+r&)0YXQs3TiJyXp|9KqoqN2^wo%j(JPFmujVS%XJ z_f1x+&jf1piUYMy^Oe8eCY!&Okz9_8;w9nfx>o-1wMmE2F< zOS7(%HVw0%xS`+Ot8l(r6Mt{*Q8Oi8;;YPpVP#WxMJl*2Xi9ggU@w{#vTM*|Hg0UKI&4-a`W*IfE0%wt4#Bp8RGpRN??X3;T|K$o( zlzeq)w8uq-a-gq!Zdy?!i0_5}Q&2yX^;HWlZCr}FM^0_Z$h1_g=M$Nt@k0ICr!Js= z&S;rq>i%O9tr5#Ddx(!m>|A5t`0(v)jCydL;)9Nvg=^%LM3)Wa;okFU^>x*QOgGbC zida^B>CG<{;qCdl&*?BX+U+(YvtaW+m7IjMjLwq~cNeokn0$3j{J2q6aqq~}`yE;_ z`sC9%E9@Ju`>MQ*vfc&*G!buEGFQ24uGy;Ash#(hLySx4kw(>D5kKR8g_RxcHe-7*ix=gQRM0IWOI48>GFdZw zdi(p?Rz3TXVSUxnD}J7uU-#b`>Ze7Le@fCE-+HAYScxa?d(hyQMHpeTlhi9WY5K4- z>o$4{ocHeZk@{6MVxWx6xsbB|QFZIW=Ou8L#!9?iKjKt-kE}X^SjXTG? z`pxmC6!_BX)9`ru+Yp+`;kr){HXA!#@k?!)%;MRc^cnEf?e}l#)3UW&P&6nqdu3-G z)tr(&krqy#YMHAdD_>z0+o9*9S9+TUnEUAuxVi{Lb2V}FK!iA%thcQCLjUB_$-p95 z)?t%YU`Pb#jMlB-)vwv2{ZV^5@h|QImYFs+uhtiHqwIY;kE#brfw?UjB;{YZ5*!zJ*u{>zxyoy4vV)qXTD8(mkbogh*t0G z3qKijnkh0G3q0*?=vFC4xT`s|Y^T~6Z1~Edzc{02)($>SMv-bOz4a&ZBG0`B5mgL} zw4GAA7$cq@=5Jp{Ywd+5Bs)P*z|ur1mGAE?RlGvibP`kg~=DeV;nx~C(s}H z9eJQb2SsDcCChk2DstF-%xGn!ZJbQTQ=Sb{MmKjl%p;9S#H(XtWj6cN@$dL!{a0^MOx;`;ImY{r_lc-jGGCy7a5NSCb?-fjWkeM< zvU-JPFs#esk{H%b`)hSiWrSmb8!AQO-|GExR!im81---;;_P0hJWkuzyL}s=P(qU1 z>~~jot}iwWvGk^~x`b0X&8! z9J1{3o9{p9vv`5lv+Ig?p@3A;=6sy@lJ>ux^1-KgpH*Q50&{( z-*fCLN?N-sR=M-4=bDouqBCs;rAiJB-eZIGmBt{{+%bsN?dRjmZuq~*9pkrt6N?xA z{#4zJNDZmVy{)XwXf1`D{Jb*w;*-Y%D@3jvRCD@{e6Mk@B-~vuQ*%py#aWIeD&tR> zd)@i@`1QVQzRi2R6Vtp{VN(^xwZgM1<{qW3kCpjZHAB_zg))CJROmj0d(>32lCumc zue8~2BO9&Y`@#liK`AF9QBsley<+^SiINQD z1v7hBtcSK_^?-p`+tF?56fqQ z^!l#RHX#--$7zZ!cE7q57&^mC6dtKqvgt8*2by0m=E2QMn{2j>oqf8O?Tzc%9{0|U zpQVrutZJ;-Fn0zrJQrhg1y#e%ke;~WNl>-9?Y zjKU!JsW#_WdGmIaoHt?Fa|-+tU$2=|QaGqpakhmDlGI68g|*n*E;_tIna$sKcg&GtY?Yu8t+Zk5IqtX|&d=a8QM zN|!&M=@TleZ&kfk(m(89CJwJnvagMFXjyFT{Ik?D>TMZQ)XEsBTcz@AlT!c#{+mA8 LW>VBQj{o|9W;jWh literal 0 HcmV?d00001 diff --git a/lib/generated/assets.dart b/lib/generated/assets.dart index 44ec2a0..43f24d7 100644 --- a/lib/generated/assets.dart +++ b/lib/generated/assets.dart @@ -2,6 +2,7 @@ class Assets { Assets._(); + static const String imagesLoginBg = 'assets/images/login_bg.png'; static const String imagesLoginLogo = 'assets/images/login_logo.png'; static const String imagesManIcon = 'assets/images/man_icon.png'; static const String imagesWomenIcon = 'assets/images/women_icon.png'; diff --git a/lib/pages/mine/login_page.dart b/lib/pages/mine/login_page.dart index eb667b9..6d409c1 100644 --- a/lib/pages/mine/login_page.dart +++ b/lib/pages/mine/login_page.dart @@ -17,248 +17,230 @@ class LoginPage extends StatelessWidget { init: LoginController(), builder: (controller) { return Scaffold( - backgroundColor: Colors.white, - body: SingleChildScrollView( - padding: const EdgeInsets.all(20), - child: SizedBox( - height: MediaQuery.of(context).size.height, - child: Column( - children: [ - const SizedBox(height: 100), - - // Logo和标题区域 - Center( - child: Column( - children: [ - Image.asset( - Assets.imagesLoginLogo, - height: 60, + body: Stack( + children: [ + Image.asset( + Assets.imagesLoginBg, + width: 1.sw, + height: 1.sh, + ), + SingleChildScrollView( + padding: const EdgeInsets.all(20), + child: SizedBox( + height: MediaQuery.of(context).size.height, + child: Column( + children: [ + const SizedBox(height: 130), + + // Logo和标题区域 + Center( + child: Column( + children: [ + Image.asset( + Assets.imagesLoginLogo, + height: 60, + ), + const SizedBox(height: 10), + const Text( + '心动就动我 幸福马上行动', + style: TextStyle( + fontSize: 14, + color: Color.fromRGBO(153, 153, 153, 1), + ), + ), + ], ), - const SizedBox(height: 10), - const Text( - '心动就动我 幸福马上行动', - style: TextStyle( - fontSize: 14, - color: Color.fromRGBO(153, 153, 153, 1), - ), + ), + + const SizedBox(height: 60), + + // 错误提示已改为SmartDialog.showToast,此处不再需要UI显示 + const SizedBox(height: 5), + + // 手机号输入框 - 带+86区号 + Container( + decoration: BoxDecoration( + border: Border.all(color: Colors.grey.shade300), + borderRadius: BorderRadius.circular(8), ), - ], - ), - ), - - const SizedBox(height: 60), - - // 错误提示已改为SmartDialog.showToast,此处不再需要UI显示 - const SizedBox(height: 5), - - // 手机号输入框 - 带+86区号 - Container( - decoration: BoxDecoration( - border: Border.all(color: Colors.grey.shade300), - borderRadius: BorderRadius.circular(8), - ), - child: Row( - children: [ - // +86区号部分 - Container( - padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 14), - child: Row( - children: [ - const Text( - '+86', - style: TextStyle(fontSize: 16), + child: Row( + children: [ + // 手机号输入部分 + Expanded( + child: TextField( + decoration: const InputDecoration( + hintText: '请输入你的手机号', + border: InputBorder.none, + contentPadding: EdgeInsets.symmetric(horizontal: 15, vertical: 14), + counterText: '', + ), + keyboardType: TextInputType.phone, + maxLength: 11, + onChanged: (value) { + controller.phoneNumber.value = value; + }, + style: const TextStyle(fontSize: 16), ), - const SizedBox(width: 4), - Icon( - Icons.keyboard_arrow_down, - size: 20, - color: Colors.grey.shade500, - ), - ], - ), + ), + ], ), - Container( - width: 1, - height: 30.w, - color: Colors.grey.shade300, + ), + + const SizedBox(height: 20), + + // 验证码输入框和获取验证码按钮 + Container( + decoration: BoxDecoration( + border: Border.all(color: Colors.grey.shade300), + borderRadius: BorderRadius.circular(8), ), - // 手机号输入部分 - Expanded( - child: TextField( - decoration: const InputDecoration( - hintText: '请输入你的手机号', - border: InputBorder.none, - contentPadding: EdgeInsets.symmetric(horizontal: 15, vertical: 14), - counterText: '', + child: Row( + children: [ + // 验证码输入部分 + Expanded( + child: TextField( + decoration: const InputDecoration( + hintText: '请输入验证码', + border: InputBorder.none, + contentPadding: EdgeInsets.symmetric(horizontal: 15, vertical: 14), + counterText: '', + ), + keyboardType: TextInputType.number, + maxLength: 6, + onChanged: (value) { + controller.verificationCode.value = value; + }, + style: const TextStyle(fontSize: 16), + ), + ), + // 获取验证码按钮 + GestureDetector( + onTap: controller.isSendingCode.value || controller.countdownSeconds.value > 0 + ? null + : controller.getVerificationCode, + child: Container( + padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 14), + child: Text( + controller.countdownSeconds.value > 0 + ? '${controller.countdownSeconds.value}秒后重试' + : '获取验证码', + style: TextStyle( + fontSize: 14, + color: (controller.isSendingCode.value || controller.countdownSeconds.value > 0) + ? Colors.grey.shade400 + : const Color.fromRGBO(74, 99, 235, 1), + ), + ), + ), ), - keyboardType: TextInputType.phone, - maxLength: 11, + ], + ), + ), + + const SizedBox(height: 24), + + // 协议同意复选框 + Row( + children: [ + Obx(() => Checkbox( + value: agreeTerms.value, onChanged: (value) { - controller.phoneNumber.value = value; + agreeTerms.value = value ?? false; }, - style: const TextStyle(fontSize: 16), - ), - ), - ], - ), - ), - - const SizedBox(height: 20), - - // 验证码输入框和获取验证码按钮 - Container( - decoration: BoxDecoration( - border: Border.all(color: Colors.grey.shade300), - borderRadius: BorderRadius.circular(8), - ), - child: Row( - children: [ - // 验证码输入部分 - Expanded( - child: TextField( - decoration: const InputDecoration( - hintText: '请输入验证码', - border: InputBorder.none, - contentPadding: EdgeInsets.symmetric(horizontal: 15, vertical: 14), - counterText: '', + activeColor: Colors.grey, + side: const BorderSide(color: Colors.grey), + shape: const CircleBorder(), + materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, + )), + const Text( + '我已阅读并同意', + style: TextStyle( + fontSize: 11, + color: Color.fromRGBO(153, 153, 153, 1), ), - keyboardType: TextInputType.number, - maxLength: 6, - onChanged: (value) { - controller.verificationCode.value = value; + ), + GestureDetector( + onTap: () { + // 跳转到用户协议页面 }, - style: const TextStyle(fontSize: 16), + child: const Text( + '《动我用户协议》', + style: TextStyle( + fontSize: 11, + color: Color.fromRGBO(74, 99, 235, 1), + ), + ), ), - ), - // 获取验证码按钮 - GestureDetector( - onTap: controller.isSendingCode.value || controller.countdownSeconds.value > 0 - ? null - : controller.getVerificationCode, - child: Container( - padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 14), - child: Text( - controller.countdownSeconds.value > 0 - ? '${controller.countdownSeconds.value}秒后重试' - : '获取验证码', + const Text( + '和', + style: TextStyle( + fontSize: 11, + color: Color.fromRGBO(153, 153, 153, 1), + ), + ), + GestureDetector( + onTap: () { + // 跳转到隐私政策页面 + }, + child: const Text( + '《隐私政策》', style: TextStyle( - fontSize: 14, - color: (controller.isSendingCode.value || controller.countdownSeconds.value > 0) - ? Colors.grey.shade400 - : const Color.fromRGBO(74, 99, 235, 1), + fontSize: 11, + color: Color.fromRGBO(74, 99, 235, 1), ), ), ), - ), - ], - ), - ), - - const SizedBox(height: 24), - - // 协议同意复选框 - Row( - children: [ - Obx(() => Checkbox( - value: agreeTerms.value, - onChanged: (value) { - agreeTerms.value = value ?? false; - }, - activeColor: Colors.grey, - side: const BorderSide(color: Colors.grey), - shape: const CircleBorder(), - materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, - )), - const Text( - '我已阅读并同意', - style: TextStyle( - fontSize: 14, - color: Color.fromRGBO(153, 153, 153, 1), - ), + ], ), - const SizedBox(width: 4), - GestureDetector( - onTap: () { - // 跳转到用户协议页面 - }, - child: const Text( - '动我用户协议', - style: TextStyle( - fontSize: 14, - color: Color.fromRGBO(74, 99, 235, 1), + SizedBox(height: 50), + // 注册并登录按钮 + Container( + margin: const EdgeInsets.only(bottom: 50), + child: ElevatedButton( + onPressed: controller.isLoggingIn.value + ? null + : () { + // 登录逻辑 + if (!agreeTerms.value) { + SmartDialog.showToast('请阅读并同意用户协议和隐私政策'); + return; + } + + // 调用控制器的登录方法 + controller.login(); + }, + style: ElevatedButton.styleFrom( + minimumSize: const Size(double.infinity, 50), + backgroundColor: agreeTerms.value ? const Color.fromRGBO(74, 99, 235, 1) : Colors.grey.shade300, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(25), + ), + elevation: 0, ), - ), - ), - const SizedBox(width: 4), - const Text( - '和', - style: TextStyle( - fontSize: 14, - color: Color.fromRGBO(153, 153, 153, 1), - ), - ), - const SizedBox(width: 4), - GestureDetector( - onTap: () { - // 跳转到隐私政策页面 - }, - child: const Text( - '隐私政策', - style: TextStyle( - fontSize: 14, - color: Color.fromRGBO(74, 99, 235, 1), + child: controller.isLoggingIn.value + ? const SizedBox( + width: 20, + height: 20, + child: CircularProgressIndicator( + color: Colors.white, + strokeWidth: 2, + ), + ) + : const Text( + '注册并登录', + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + color: Colors.white, + ), ), ), ), ], ), - SizedBox(height: 50), - // 注册并登录按钮 - Container( - margin: const EdgeInsets.only(bottom: 50), - child: ElevatedButton( - onPressed: controller.isLoggingIn.value - ? null - : () { - // 登录逻辑 - if (!agreeTerms.value) { - SmartDialog.showToast('请阅读并同意用户协议和隐私政策'); - return; - } - - // 调用控制器的登录方法 - controller.login(); - }, - style: ElevatedButton.styleFrom( - minimumSize: const Size(double.infinity, 50), - backgroundColor: agreeTerms.value ? const Color.fromRGBO(74, 99, 235, 1) : Colors.grey.shade300, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(25), - ), - elevation: 0, - ), - child: controller.isLoggingIn.value - ? const SizedBox( - width: 20, - height: 20, - child: CircularProgressIndicator( - color: Colors.white, - strokeWidth: 2, - ), - ) - : const Text( - '注册并登录', - style: TextStyle( - fontSize: 18, - fontWeight: FontWeight.bold, - color: Colors.white, - ), - ), - ), - ), - ], - ), - ), + ), + ) + ], ), ); }, diff --git a/pubspec.lock b/pubspec.lock index 20c2f11..a241428 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -6,7 +6,7 @@ packages: description: name: _fe_analyzer_shared sha256: f0bb5d1648339c8308cc0b9838d8456b3cfe5c91f9dc1a735b4d003269e5da9a - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "88.0.0" analyzer: @@ -14,7 +14,7 @@ packages: description: name: analyzer sha256: "0b7b9c329d2879f8f05d6c05b32ee9ec025f39b077864bdb5ac9a7b63418a98f" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "8.1.1" ansicolor: @@ -22,7 +22,7 @@ packages: description: name: ansicolor sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.3" archive: @@ -30,7 +30,7 @@ packages: description: name: archive sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.0.7" args: @@ -38,7 +38,7 @@ packages: description: name: args sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.7.0" async: @@ -46,7 +46,7 @@ packages: description: name: async sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.13.0" boolean_selector: @@ -54,7 +54,7 @@ packages: description: name: boolean_selector sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.2" build: @@ -62,7 +62,7 @@ packages: description: name: build sha256: dfb67ccc9a78c642193e0c2d94cb9e48c2c818b3178a86097d644acdcde6a8d9 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.0.2" build_config: @@ -70,7 +70,7 @@ packages: description: name: build_config sha256: "4f64382b97504dc2fcdf487d5aae33418e08b4703fc21249e4db6d804a4d0187" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.0" build_daemon: @@ -78,7 +78,7 @@ packages: description: name: build_daemon sha256: "409002f1adeea601018715d613115cfaf0e31f512cb80ae4534c79867ae2363d" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.1.0" build_runner: @@ -86,7 +86,7 @@ packages: description: name: build_runner sha256: a9461b8e586bf018dd4afd2e13b49b08c6a844a4b226c8d1d10f3a723cdd78c3 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.10.1" built_collection: @@ -94,7 +94,7 @@ packages: description: name: built_collection sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "5.1.1" built_value: @@ -102,7 +102,7 @@ packages: description: name: built_value sha256: a30f0a0e38671e89a492c44d005b5545b830a961575bbd8336d42869ff71066d - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "8.12.0" characters: @@ -110,7 +110,7 @@ packages: description: name: characters sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.4.0" checked_yaml: @@ -118,7 +118,7 @@ packages: description: name: checked_yaml sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.4" clock: @@ -126,7 +126,7 @@ packages: description: name: clock sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.2" code_builder: @@ -134,7 +134,7 @@ packages: description: name: code_builder sha256: "11654819532ba94c34de52ff5feb52bd81cba1de00ef2ed622fd50295f9d4243" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.11.0" collection: @@ -142,7 +142,7 @@ packages: description: name: collection sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.19.1" convert: @@ -150,7 +150,7 @@ packages: description: name: convert sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.2" cross_file: @@ -158,7 +158,7 @@ packages: description: name: cross_file sha256: "942a4791cd385a68ccb3b32c71c427aba508a1bb949b86dff2adbe4049f16239" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.3.5" crypto: @@ -166,7 +166,7 @@ packages: description: name: crypto sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.6" csslib: @@ -174,7 +174,7 @@ packages: description: name: csslib sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.2" cupertino_icons: @@ -182,7 +182,7 @@ packages: description: name: cupertino_icons sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.8" dart_style: @@ -190,7 +190,7 @@ packages: description: name: dart_style sha256: c87dfe3d56f183ffe9106a18aebc6db431fc7c98c31a54b952a77f3d54a85697 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.2" dio: @@ -198,7 +198,7 @@ packages: description: name: dio sha256: d90ee57923d1828ac14e492ca49440f65477f4bb1263575900be731a3dac66a9 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "5.9.0" dio_web_adapter: @@ -206,7 +206,7 @@ packages: description: name: dio_web_adapter sha256: "7586e476d70caecaf1686d21eee7247ea43ef5c345eab9e0cc3583ff13378d78" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.1" event_bus: @@ -214,7 +214,7 @@ packages: description: name: event_bus sha256: "1a55e97923769c286d295240048fc180e7b0768902c3c2e869fe059aafa15304" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.1" fake_async: @@ -222,7 +222,7 @@ packages: description: name: fake_async sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.3" ffi: @@ -230,7 +230,7 @@ packages: description: name: ffi sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.4" file: @@ -238,7 +238,7 @@ packages: description: name: file sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "7.0.1" file_selector_linux: @@ -246,7 +246,7 @@ packages: description: name: file_selector_linux sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.9.3+2" file_selector_macos: @@ -254,7 +254,7 @@ packages: description: name: file_selector_macos sha256: "88707a3bec4b988aaed3b4df5d7441ee4e987f20b286cddca5d6a8270cab23f2" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.9.4+5" file_selector_platform_interface: @@ -262,7 +262,7 @@ packages: description: name: file_selector_platform_interface sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.6.2" file_selector_windows: @@ -270,7 +270,7 @@ packages: description: name: file_selector_windows sha256: "320fcfb6f33caa90f0b58380489fc5ac05d99ee94b61aa96ec2bff0ba81d3c2b" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.9.3+4" fixnum: @@ -278,7 +278,7 @@ packages: description: name: fixnum sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.1" flutter: @@ -291,7 +291,7 @@ packages: description: name: flutter_lints sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "5.0.0" flutter_localizations: @@ -304,7 +304,7 @@ packages: description: name: flutter_native_splash sha256: "4fb9f4113350d3a80841ce05ebf1976a36de622af7d19aca0ca9a9911c7ff002" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.7" flutter_plugin_android_lifecycle: @@ -312,7 +312,7 @@ packages: description: name: flutter_plugin_android_lifecycle sha256: "306f0596590e077338312f38837f595c04f28d6cdeeac392d3d74df2f0003687" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.32" flutter_screenutil: @@ -320,7 +320,7 @@ packages: description: name: flutter_screenutil sha256: "8239210dd68bee6b0577aa4a090890342d04a136ce1c81f98ee513fc0ce891de" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "5.9.3" flutter_smart_dialog: @@ -328,7 +328,7 @@ packages: description: name: flutter_smart_dialog sha256: "0852df132cb03fd8fc5144eb404c31eb7eb50c22aecb1cc2504f2f598090d756" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.9.8+9" flutter_test: @@ -346,7 +346,7 @@ packages: description: name: frontend_server_client sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.0.0" get: @@ -354,7 +354,7 @@ packages: description: name: get sha256: c79eeb4339f1f3deffd9ec912f8a923834bec55f7b49c9e882b8fef2c139d425 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.7.2" get_storage: @@ -362,7 +362,7 @@ packages: description: name: get_storage sha256: "39db1fffe779d0c22b3a744376e86febe4ade43bf65e06eab5af707dc84185a2" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.1" glob: @@ -370,7 +370,7 @@ packages: description: name: glob sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.3" graphs: @@ -378,7 +378,7 @@ packages: description: name: graphs sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.3.2" hotreloader: @@ -386,7 +386,7 @@ packages: description: name: hotreloader sha256: bc167a1163807b03bada490bfe2df25b0d744df359227880220a5cbd04e5734b - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.3.0" html: @@ -394,7 +394,7 @@ packages: description: name: html sha256: "6d1264f2dffa1b1101c25a91dff0dc2daee4c18e87cd8538729773c073dbf602" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.15.6" http: @@ -402,7 +402,7 @@ packages: description: name: http sha256: bb2ce4590bc2667c96f318d68cac1b5a7987ec819351d32b1c987239a815e007 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.5.0" http_multi_server: @@ -410,7 +410,7 @@ packages: description: name: http_multi_server sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.2.2" http_parser: @@ -418,15 +418,47 @@ packages: description: name: http_parser sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.1.2" + im_flutter_sdk: + dependency: "direct main" + description: + name: im_flutter_sdk + sha256: "952bd7a4846d9645adf6bf67c781573aba2825e12bbedfa7bb9f8b234bb1410b" + url: "https://pub.flutter-io.cn" + source: hosted + version: "4.15.1" + im_flutter_sdk_android: + dependency: transitive + description: + name: im_flutter_sdk_android + sha256: d809f8091b24bb70f55c8a1a040f7e0a27aef4756ac71549ce62e460f2151de6 + url: "https://pub.flutter-io.cn" + source: hosted + version: "4.15.1" + im_flutter_sdk_interface: + dependency: transitive + description: + name: im_flutter_sdk_interface + sha256: "82aef6f78bc7e4afc26768631262535b641cc885220981cc9deb871abf14efa8" + url: "https://pub.flutter-io.cn" + source: hosted + version: "4.15.1" + im_flutter_sdk_ios: + dependency: transitive + description: + name: im_flutter_sdk_ios + sha256: "5455ecd4e5877dd289051ca280ffb435d8f7f477a46f32bbb1bfc903dc03952a" + url: "https://pub.flutter-io.cn" + source: hosted + version: "4.15.1" image: dependency: transitive description: name: image sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.5.4" image_picker: @@ -434,7 +466,7 @@ packages: description: name: image_picker sha256: "736eb56a911cf24d1859315ad09ddec0b66104bc41a7f8c5b96b4e2620cf5041" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.0" image_picker_android: @@ -442,7 +474,7 @@ packages: description: name: image_picker_android sha256: ca2a3b04d34e76157e9ae680ef16014fb4c2d20484e78417eaed6139330056f6 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.8.13+7" image_picker_for_web: @@ -450,7 +482,7 @@ packages: description: name: image_picker_for_web sha256: "40c2a6a0da15556dc0f8e38a3246064a971a9f512386c3339b89f76db87269b6" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.0" image_picker_ios: @@ -458,7 +490,7 @@ packages: description: name: image_picker_ios sha256: e675c22790bcc24e9abd455deead2b7a88de4b79f7327a281812f14de1a56f58 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.8.13+1" image_picker_linux: @@ -466,7 +498,7 @@ packages: description: name: image_picker_linux sha256: "1f81c5f2046b9ab724f85523e4af65be1d47b038160a8c8deed909762c308ed4" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.2" image_picker_macos: @@ -474,7 +506,7 @@ packages: description: name: image_picker_macos sha256: "86f0f15a309de7e1a552c12df9ce5b59fe927e71385329355aec4776c6a8ec91" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.2+1" image_picker_platform_interface: @@ -482,7 +514,7 @@ packages: description: name: image_picker_platform_interface sha256: "567e056716333a1647c64bb6bd873cff7622233a5c3f694be28a583d4715690c" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.11.1" image_picker_windows: @@ -490,7 +522,7 @@ packages: description: name: image_picker_windows sha256: d248c86554a72b5495a31c56f060cf73a41c7ff541689327b1a7dbccc33adfae - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.2" intl: @@ -498,7 +530,7 @@ packages: description: name: intl sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.20.2" io: @@ -506,7 +538,7 @@ packages: description: name: io sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.5" json_annotation: @@ -514,7 +546,7 @@ packages: description: name: json_annotation sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.9.0" json_serializable: @@ -522,7 +554,7 @@ packages: description: name: json_serializable sha256: "33a040668b31b320aafa4822b7b1e177e163fc3c1e835c6750319d4ab23aa6fe" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "6.11.1" leak_tracker: @@ -530,7 +562,7 @@ packages: description: name: leak_tracker sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "11.0.2" leak_tracker_flutter_testing: @@ -538,7 +570,7 @@ packages: description: name: leak_tracker_flutter_testing sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.10" leak_tracker_testing: @@ -546,7 +578,7 @@ packages: description: name: leak_tracker_testing sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.2" lean_builder: @@ -554,7 +586,7 @@ packages: description: name: lean_builder sha256: ef5cd5f907157eb7aa87d1704504b5a6386d2cbff88a3c2b3344477bab323ee9 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.1.2" lints: @@ -562,7 +594,7 @@ packages: description: name: lints sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "5.1.1" logging: @@ -570,7 +602,7 @@ packages: description: name: logging sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.0" matcher: @@ -578,7 +610,7 @@ packages: description: name: matcher sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.12.17" material_color_utilities: @@ -586,7 +618,7 @@ packages: description: name: material_color_utilities sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.11.1" meta: @@ -594,7 +626,7 @@ packages: description: name: meta sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.16.0" mime: @@ -602,7 +634,7 @@ packages: description: name: mime sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.0" package_config: @@ -610,7 +642,7 @@ packages: description: name: package_config sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.0" path: @@ -618,7 +650,7 @@ packages: description: name: path sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.9.1" path_provider: @@ -626,7 +658,7 @@ packages: description: name: path_provider sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.5" path_provider_android: @@ -634,7 +666,7 @@ packages: description: name: path_provider_android sha256: e122c5ea805bb6773bb12ce667611265980940145be920cd09a4b0ec0285cb16 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.20" path_provider_foundation: @@ -642,7 +674,7 @@ packages: description: name: path_provider_foundation sha256: efaec349ddfc181528345c56f8eda9d6cccd71c177511b132c6a0ddaefaa2738 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.3" path_provider_linux: @@ -650,7 +682,7 @@ packages: description: name: path_provider_linux sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.1" path_provider_platform_interface: @@ -658,7 +690,7 @@ packages: description: name: path_provider_platform_interface sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.2" path_provider_windows: @@ -666,7 +698,7 @@ packages: description: name: path_provider_windows sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.3.0" petitparser: @@ -674,7 +706,7 @@ packages: description: name: petitparser sha256: "1a97266a94f7350d30ae522c0af07890c70b8e62c71e8e3920d1db4d23c057d1" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "7.0.1" platform: @@ -682,7 +714,7 @@ packages: description: name: platform sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.6" plugin_platform_interface: @@ -690,7 +722,7 @@ packages: description: name: plugin_platform_interface sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.8" pool: @@ -698,7 +730,7 @@ packages: description: name: pool sha256: "978783255c543aa3586a1b3c21f6e9d720eb315376a915872c61ef8b5c20177d" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.5.2" posix: @@ -706,7 +738,7 @@ packages: description: name: posix sha256: "6323a5b0fa688b6a010df4905a56b00181479e6d10534cecfecede2aa55add61" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "6.0.3" protobuf: @@ -714,7 +746,7 @@ packages: description: name: protobuf sha256: "826d6a306be26f29e5cd9faeb0c97aad5897270341dab6dbd7b8acd675937006" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "5.0.0" pub_semver: @@ -722,7 +754,7 @@ packages: description: name: pub_semver sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.0" pubspec_parse: @@ -730,7 +762,7 @@ packages: description: name: pubspec_parse sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.5.0" retrofit: @@ -738,7 +770,7 @@ packages: description: name: retrofit sha256: "7d78824afa6eeeaf6ac58220910ee7a97597b39e93360d4bda230b7c6df45089" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.9.0" retrofit_generator: @@ -746,7 +778,7 @@ packages: description: name: retrofit_generator sha256: "47998fb9f214935e4eb00741aebc636ffcb62cb8ae73b474ac88127ce2744428" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "10.1.2" shelf: @@ -754,7 +786,7 @@ packages: description: name: shelf sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.4.2" shelf_web_socket: @@ -762,7 +794,7 @@ packages: description: name: shelf_web_socket sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.0" sky_engine: @@ -775,7 +807,7 @@ packages: description: name: source_gen sha256: "9098ab86015c4f1d8af6486b547b11100e73b193e1899015033cb3e14ad20243" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.0.2" source_helper: @@ -783,7 +815,7 @@ packages: description: name: source_helper sha256: "6a3c6cc82073a8797f8c4dc4572146114a39652851c157db37e964d9c7038723" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.8" source_span: @@ -791,7 +823,7 @@ packages: description: name: source_span sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.10.1" stack_trace: @@ -799,7 +831,7 @@ packages: description: name: stack_trace sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.12.1" stream_channel: @@ -807,7 +839,7 @@ packages: description: name: stream_channel sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.4" stream_transform: @@ -815,7 +847,7 @@ packages: description: name: stream_transform sha256: ad47125e588cfd37a9a7f86c7d6356dde8dfe89d071d293f80ca9e9273a33871 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.1" string_scanner: @@ -823,7 +855,7 @@ packages: description: name: string_scanner sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.4.1" term_glyph: @@ -831,7 +863,7 @@ packages: description: name: term_glyph sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.2" test_api: @@ -839,7 +871,7 @@ packages: description: name: test_api sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.7.6" typed_data: @@ -847,7 +879,7 @@ packages: description: name: typed_data sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.4.0" universal_io: @@ -855,7 +887,7 @@ packages: description: name: universal_io sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.2" vector_math: @@ -863,7 +895,7 @@ packages: description: name: vector_math sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.0" vm_service: @@ -871,7 +903,7 @@ packages: description: name: vm_service sha256: "45caa6c5917fa127b5dbcfbd1fa60b14e583afdc08bfc96dda38886ca252eb60" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "15.0.2" watcher: @@ -879,7 +911,7 @@ packages: description: name: watcher sha256: "592ab6e2892f67760543fb712ff0177f4ec76c031f02f5b4ff8d3fc5eb9fb61a" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.4" web: @@ -887,7 +919,7 @@ packages: description: name: web sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.1" web_socket: @@ -895,7 +927,7 @@ packages: description: name: web_socket sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.1" web_socket_channel: @@ -903,7 +935,7 @@ packages: description: name: web_socket_channel sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.3" xdg_directories: @@ -911,7 +943,7 @@ packages: description: name: xdg_directories sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" xml: @@ -919,7 +951,7 @@ packages: description: name: xml sha256: "971043b3a0d3da28727e40ed3e0b5d18b742fa5a68665cca88e74b7876d5e025" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "6.6.1" xxh3: @@ -927,7 +959,7 @@ packages: description: name: xxh3 sha256: "399a0438f5d426785723c99da6b16e136f4953fb1e9db0bf270bd41dd4619916" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.0" yaml: @@ -935,7 +967,7 @@ packages: description: name: yaml sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.3" sdks: diff --git a/pubspec.yaml b/pubspec.yaml index a1ffd83..e7ca007 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -47,6 +47,7 @@ dependencies: dio: ^5.9.0 retrofit: ^4.9.0 flutter_native_splash: ^2.4.7 + im_flutter_sdk: ^4.15.1 dev_dependencies: flutter_test: