From dfe7d57ea4274f5c0627792a40902a0cac6a2dfa Mon Sep 17 00:00:00 2001 From: UUBulb <35923940+uubulb@users.noreply.github.com> Date: Tue, 4 Feb 2025 11:19:52 +0800 Subject: [PATCH] feat: batch set server config (#114) * feat: batch set server config * make every field optional * chore: auto-fix linting and formatting issues * update * [WIP] improve batch edit ux * chore: auto-fix linting and formatting issues --- bun.lockb | Bin 197035 -> 207740 bytes package.json | 96 +++++++++++------------ src/api/server.ts | 19 +++-- src/components/server-config-batch.tsx | 104 +++++++++++++++++++++++++ src/components/server-config.tsx | 43 ++++++++-- src/components/xui/icon-button.tsx | 5 ++ src/components/xui/pusher.tsx | 50 ++++++++++++ src/routes/server.tsx | 11 ++- src/types/api.ts | 29 ++++--- src/types/server.ts | 69 ++++++++++++++++ 10 files changed, 349 insertions(+), 77 deletions(-) create mode 100644 src/components/server-config-batch.tsx create mode 100644 src/components/xui/pusher.tsx create mode 100644 src/types/server.ts diff --git a/bun.lockb b/bun.lockb index edf28749140e82bf0b70e500300e0e144e26ce5b..131c0d1cf2607e26bbd2ae42e805073fe10ad1bc 100755 GIT binary patch delta 56421 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

@FOnQ3m=Sq@WBs80d%-nO$xIC z{0}@_L{-IVXt0=^AYVbn?vCJWcrfC2e!vIY`w1WXV8nbB6L|g=;(E9cwnxK-{|(}D zbSh;jw*VymM4S|Ye=rL3bd1;_gU9(1>tdi|gX4Jl{|W_B{|Kr z{W5ngsdHO0qJfvAXz6KEYL=GUfp9_c| zj5x{3;|UmXay<|8c{)Z>(6{n9KVpO1c{)Gh4Qvlj$B2`Ac^o5lXg?s-=THtp0_Pp# zWgO-4Qa~KZNu0?;T=5K#V-yE|1&|3?4~QpQ6Cif%5g@ML3aAJ;z~f(e`6Gbi@ca{k z(%3MAhvK+4JQ%Sq0f;3jo{kafQltTK1M)l_BX&d^PzI0%hz~DUKwQofPz*2#5O4Ky zfZ}-mr9%RHz7`O7bpar5U=yGO;2uEiNC_Z*Fye?V^7#J^a_9g5jREY?|3!Ur{b2*+ z!B8VFqW|xZZ2!O2FdoB)JO?pq0UrXy%kKwI$B2jSCy!&q$zMGFUl1PyxWaEX(xZ3^(pW5jj@c}VA>5HBAi&KCy6^%y+P5#<&5Plzkx->2gTBTkOvaf~=$g2yr9 z2BdhpG*8Ef_3=DimeglbZ~||!io6UZGK2CzK^mIBk33OTc~;bTRxsilp+1je#O@mK zI7aN2A&+Ck`9?g>k66M#*T)Y(;`$~6u$5>-!jD$~BR1sE;~23c3wazPPA=kce#F~a zEa-S2O##I9Rs-UOGI`}OV*6PW5nCj z6+qnZO`gt=Sh@xO;D&GW^8ZB6KMQ;uCmY}&jE(RQHgFFU9^zyZkN+#g+hZFqA0u9i z&v_gp4&3Y|Pr!(USAe*oE}o7NSM1?&j8t^^pc>cnexCZT5L@}c%g2bVf8yb1p8lT@ zw>k{v@I3#)D~}P|{V9Nd*hnV+D)V8lFzS232y<9R$m z5Ut#<#O-4TD2B(*iHEZQaa%4tbOpo@My$KR=kM2J=mhR-GVZy*UypHb{QY`NF1f#7 zkGZpf^7rfU->=7izaIZ@-cq^8^8cnHUU>fx)FZE6f4?68{d)ZO>oNB%!>`GIzaHbR z;D1g2`}O$m*W-Wre*XW5*JDTS!sUBk=DrU9_g{~pI?DJX-o7RGQ;^u4=S3sQ9x9fE z`})X^lb@(@2yW#`bIND7Q7gc-`r}I@YLu$ zGOkeI?CkuJDLs0oU`e8uV!)}EH-ioO()~BKr_E7Hxq7qko{jsuGeKPpKhc<%X%BY< zUP`voJN)^EP)5(Wx7nvg-uUAGXh5a>lK2IP-#5n|!NozetxNsu3buQTbQtZs9=U8= z4}Esto)41chn{sC+r3;_r*&C0YE<#cK){?GQjt;Pbo;vp{t#dD?A)}}^4S+u?NLXC z0-9gRrou1#DgsdPc_tdFU{i&W!}$Q@a)F5|D%l?Ri@>o*(D>km^kUAmPO+D7TQ*CM zJolP$``z0g^}nn&V)}Xleo6|+ehViIhXac)of7-#Iy>PoOJkTLdHnOOq%iSY69eo} z{{;nPT*an}p&ighX(bblo@Y~;$n`=13cScfIaO>A{1wXBBN%KZ@*pSB&q&K;m3z-G zfz_>-DV*Y0+1K3FPOS0gNUg9+Jn%_@QTDja{ba4y=8HzXs{S6kwom+JK3?w5Q9A1k z8oj81Jg&2;QpA2iY5=Od#B@Iszuog${Pc`F9Roj0h2P4j?DF2ddtS#w)4<_rv%dr@ zocm;(^Tz4Xo$D3fLY>0ZA z+U~CSmUYebNq1L0pX?j@q}?6=unHD93fC|1Q7t)_PeTt^TQGi&pub zu;7_W@944q-^MfALq(f)H+_CGJU7Rv(%q`K`1(Q9FZq(S8~KdlZ{Efp!IqlZ(~ZWj zokJ!+OJP$vADb6rFvde&sk2u|}s8c5#I59E(RR zYLWdN_(O@RD+|3S0POpw8JN2hihVQ5?_aXAS)cxCL z`2W79+$PoZp1#+n`gi=Ns@siDQ&#RVGp;>Z#O{9Z#^H6Luos`NyszK5?g}1>*BqWZ z4%Jyx#)~Q};Fvxw-x;>KwnXp1Zlsdi7vj#y)mRpDCPq>9b;%$5_0?Q@lP07cObsZ_ zh%kG>v7CHmJyN-<;4b?%zUfHZmI+5ozUl~UBTiIjPK`V2x+LgAS(47Ud#L8pj5pD$ zp}o#g9e&cQ=>3YZv+gHtX$s+7TyUi&e%1zOKJQde=%oPEdXo7nzFP){`zHD6&BaVLljg4i~c4PRRJ?bj9OUqHB1y!%cf377lDb?GLgzHHq``0-Ga3WtPz+gQoIdo z>=qMc+-6hFP(3h(+e~C!$ELDST3rCD1J(h|0vXi9WUOPNf_gU93bg^#uV*5g1~%0O zmEVU^1J)1B4q4m@KzR*JwC4_+>VSHIncra|kGpK@47B4e#0P8?m@{&1g!t}4e2r}C zEc6YSOC!X0j}3o!T6PcO1IE11hQCuYX@L0dL43eGP$#g!`&HZ)yirsWMDze6YGPA; zk>W#$s0ku^$fo+CdSD6^L5y~Y=qZd?JDVDZE&>y2hY@?mrY4}M zXAmE-Mqo)uu><0J2Jv;UsVS%)m_i4{_nb{#fzqBse84(@r6GeC5Z`l%?**Hhj@p3f zzkv8&vZ)zp{Y!`sSU)fhvgm~PUP64GY-$$j1!mp}@x5YG*Pr@y4W2+ zEksgp1E@tP>Mcaq4bi=2QxQ@G`;l)Ux*j%l8>$DU&;!x+vZ(}0>xJlgm>jz|u}==a zXneaU|6;DW@qm7aLfS5`goPm=5C6Kw%#qj-n585wQGl&%C1rr)2qN43V&!lY2nmg6;;Q}X4>bA zDNEESP4Hi(R4AoACF}MPr$=i`cSr9E>9cWViz^Z|suNBvKbdnN*VWuG>4h4f zce}=10~CD7x?1`R#y`Ae<=(sBGs@NGa z&WTYXFigANW-BQ5{)oW#9KT!gB1olAfg_%M<^I|iI&yXOL(a^ghOg%?q-FM(e;Bu; z{!(m*zVubjriU*Z>JL^brmQ}jAu}KuQ66EalKDCAefNDw=R{NTmnP(uY3yfm*h#_O zjHq9=Ryl8VH%@mK5LkUWRe#VqZ2#x|H=LFIeSU6BbqIeeajm&oQFJD!P^Q(gO8lC0 z_}lJ9H-yXAKHUGY%VR!j1n++5j(+b;cKp3uV)^yYT4{FkSS9hQhc$M7RbAZo)K@OB z+`~#+XSb-5^vWvf_!F(@X)B_lIwodQTwCVFvy&ew3Z<(ayK(BoQKRW4*|MD*p1lsu+>>l$|4VowE15KpGhWO zd#Qi2QdZUbYUpuk_U0#(6jz1_Uiwy*CGqPBy*1;HNu>3jUpZ>}>ynHi6pdk>zVI_@FcR zhe~5N!^8aEjZb?fHec?L{PNV^bvJetmM^+la%#e{YCCVcTcuBx^k3_F-8r}J!7jzM z3Hq~5Cm%ywC7K{mmoB&}#wu}jc;><9T^ZWZ51aG{*v|Xe)Z@tY z18mYCVLSi8_BhG!dFo1gAG%i1`N+gr=;qXm2UO$Xul1+ zhjJ`C@T7l~KDsTl&y#pzhJMUoEHUN0ltvz(6x_q)id{CeS&QyJRc+CuOs{!!T2pr1x% zAK^?KfYap@n_7;7KEbI0tP0pU#2A26<1?Ht18k29{xHr;#@R;I)e~#m{45H*^DM%C zTz*=hoY?hY>D;`5sOUX+{07=|hms6bCqLF5ZJ~^lL-Ab&1taB~?l>N1OP9Ul3*!R6b6pQljwBweIO{g4b==Rh2L~^#?)zyYWb$oA`-Cnh zPEl~~r$yBZ1VV!J=1Q_e11PDqi{|VP5nrOzk-8pHmdrf;J)^1{uSo57Q3D2 zSp!Kd?+X%5!Cfr#nmsE5M#QiFDAlh0-F^C`^rB^g>$=omMLSJz*=6|EZP6ZsfTx8> z?^!$lj(!m-et|2)ARND6*dCYpeWj&qty-0PSfWPurJi!k%AifvuPcj1*CjEGO7bqh z2sXa`tbC^E&YDv#TNCd-^`E!SQhAfdS)b=-xhK_IttAuJAeA8nQ2)^h}#VNm19`vwU5C6H$M_4Q3b` z{K2NyqHP;gA=07r?lld)7()pglzTs(7_Ve?bh0VT* z*F3-bWeIDbYO%D4tjtRG;XU*l?u;S_(WzPo-YyClk8HjvpxU2o_!AbXQCMW(nC=(q z1)P>PES$LVd+X!e%J??v&x!NoI;Ta>9Gq2Ql)3Q1yzYQ-Ikl>$Oogx`XPj5Q5ze}( z9C^;H^Q>E;%+}y;OTIAfpzC0?^g9#j{9=3H|1>`K2)3w1XT2{nGJf}FaGa^vKn3l@ zBJ1+vz^9gH>!&|i^~9iYv*s*?d>s$R`|I`Wo*u3Eb+mVUne=l*E%iUlz6P!SuIRF2MVDt>R=Z`>bNyb*)5Uis4O@zbg2O#c zl|slL-jdgyHlh<-P5sT}eEryOk0yvktUG>|I23t$YD~nMQ$0>wh$E7pR!sC-G4l0^ z-Pe1|kJxz06{YIs%tR+OJTza(XTM)V>kIiZu4UM+2ifTINez_+IgYt@m(9WzBO3BE#0IQA*M63!i44@gw6nh3>iewg z2->DXRdAmyIDA+?a?m1d?R$mRgUfeb>U?M1Cwbw;A8VbQHeR3oalwNZCm*hrX~=l} z)$mtDsbO`L)b2|jx|hYTJqX&~aki4ryAGn4Mh)23N@a4K6$+du-u$eixuEjc=%yuI zqpxJHe>q0GefHgWw{c8AzH9u*U_Y9ay4es9rjmG&Gg>7V$V4~ zt1tLtPV-A=)m;y!ziqf+YkM>2%cCmlP>9mX zwdkR!)>MNbmnW?{3la6v-{L2Uwwa=l(bS6)YAlt?k*`ICN z7B$71mCNk;w#_VM%DD@CX1fT6FqrKDvqX$Al}&v^l;d`a1wcp<0pTriT?7OdK@fBp zAoLOm3=l>@a5p;~75?q?fac!tizE4_%L7v1OpsWTDOJ%MRHqqpeveb~A}`U|w9mrh zhYhmE?{43n+b$zhD^qU#DR)YU{;Og91M0D}^c_);&6d((SS5YTSc4bBLa!33ez7d^>ZOfBk;schB41LMHcG z`v>ju*MEH5=;@rWeT`UP-%abljT&#{g4aoZ@L}dYk+)I&^z-VGYr>|s$5W0N8ZKKt ze8j0>%{`G1vA)D8cJJ-X2uYuz!gm{%`ZlPZeR5^M{XqKkRnZxqhiG$sKQZUdqb=X6 z7ib>bB3kO}KEt5c*Htt~Rb1Ts>enGj!O)NdzTO-AGaBrrU?u0m&Ef?mH)6_WmxR0v zoO7Lq=G;5wtoNYvkE3W}u(90Joxv9avK3t~P5Lx=`#_0S%;Orvh4zZ^{_$+@H%pxy ziIc+M-UQp<`x{nqX0J#;nA<=d+;`q>W7p!Gy0ed4lN(-!SX@FmjXihNPFLQpolv5^ zCwZ1ixYJO2i`z3-dHu)5Y7$y}?tS6!J;jpCG0BQ=0u`&~z1Q1u>L*pXV9ncgiu&sx z?JAj+ykx)g)-%&yP|qu_FMC|VIhQ$&)$%(;WI;x>r)}Gr5HBswd}6)`xYt~8LTkZ; zMqRJBHDO9mUvC>+r!iVBUty>ur;l57G!G1KjKM8Qme!P_n9W#CzKGWT#&< zTi?#Pmrn#S#+H2KKH@_+4*;G-{5m^ znBTp=jbCHlA57ZjzVGw4C+O3_w?&RF4ht%lH1By7FmXq%mv+SNnu(J06^k{NY8{zZ zyln0cu?I?T%+3ltLbsL$Px(&MGqj49r<`Rv&@KNUn}v@3TW7ZR27;NK9w@w@kv*OuRhwE>?-q18bygN>ir7(DL^!A#%6=4gyKRGNiYrV1EnS^Qmus|H2xsVL`6pu|G+}wgo5YJIx4jFz{xZPY%+2JeoIm*%_~xV^g~JTt1w= zl0&b}Hg@=W;KR{37k$@iY>at4qH<7M`+m%?M{~baKT}x!F2S2?m?B~i#>W1pjcYiE z6+JJuE0OJVbvJXuHuEL)93}U!jnZ@OH^im15w^`Y8-0-b+KBCuN*%jDC3YG3eE#%) zhuEFRVul)J5)mf&uXym^I*F)*wO`mG?-Bg2{_vfphv|MjJ)P4{=Y)(GZ%<1o_?i4v z{&R~;!l#ucC;TUu9w>P+MIEg?=Un3|{z6DL-hFXuc;m6U;ICRr=DeOz2YbKAi~h9usj15xx4c~axFdE$N ztmJ;-*=H5qb9FlN8EH|fjz?bPY;7>O`82rUQMtW}4a7j*%LHuSb*PQwteV>aVz3x z3QrEN2{!&CI`M2`o*fqb zE}QXS-Yzz282|t1QUv)8cfQV!%#h4!yr*#l|77-At}s{NF#u9**EyW!Y1d9d9d^ zwO-TR#aV2H?rU7T(v{%z$FlS@p{2+4w}&?9u_wsnzndcF=eqdJ!RcCJl)4qK%+38Y zB;$Iri!jKemf!m#cl7vRm&y^& zHcu(%zKQ;K2i`SgMX$U$TYJFn1=aQD=KYuX3=8uc7I|SGaZOu##mocQ7rN7Z_iuS* zUtY7R*`a%N2XQOd1L^PHdxJ4}@?_q!y9?7(g?E?vH|w2|FrQU1AXE49Kqq-^7vc7V z$k^W+;_eVE|1tPS*n^x~o>@~jJ-H>lAr&XFI&t|n|DoO!dBYPVwyxzmEXXy?;CJ|aTD8PUtCzBs9UDISgxbB>qB8u& z;k`WZ+KpMrIUO0hB4V+u_7}zVI&Z8b7+X`H_aj52ZB={S7Oe3+Z`zk7?#MMv;~Ey_ zH@wfe$aF+bqj~z^-t_Fj&$6)O=g9 zVV<;E#G45&C664k=4yuEze~h_#~^}#s)GMWcI*-K9J*ZX^>gs6+(_n4 zoe?&gnyV=!yTaw-UB~i2B8+EgmA{_UY=pLKKEJ+g&CTaBYjv|DCeQNL+S>uPsPIdD zY*(D$?(7%B3#?opdfnZ8r0U16OFx$E;Iul;ct0zqS;8ekJ7vjzNOHICBAba zXKCkV?_BVQZp+RcDt+r3hECVXU*#I6h``VEDNKIDL9dVR5*LpA#++3&T%X%>LoPVB za^11~sh3yP{Z3eSXd$J3R`jWJg9{IwD$c$o(7dTZbMDoI9lip$IMU=Xs0` zkNtTt?hU~$Hr0D_c8};C+Ogx|>$M*S?Q-Wfi*&Wl+c)vh1D_i0>0d;$jXx+@UA&&+ zO3~b|9C&EM!HoUydiuw!27hrG_DtnDjE__{DAGeB1OkTZ&bjl3}^qfs>obUVQ1(k)-olPv@SJ592wE4NLMH zj(_-aWy!IC+VYH=I*V5$=3+j@*BAviSMKr(&=l=yj=UVdz{ieQ{7<5#rJY(9p z_>^C@l8Nk1{dI7bT&{Y3yGrR40cAA#-I8hdD@M6?Gr7Mr!FK@O<4F-b zujI$L_AXb-PAExiMtM;h?GCGV#hdY0ChYufI*gUl>m?<_G6GIzF|-xyd?n?i82gI z1XT(^nFzu#fhfnILNKHOREbawYQ#kh>V%XGfCdqTL6f+SL5olv51>sXV9+7zG3XK+ zvebaNdVd8;5e!?})jpp-&u>?+8PO3)HAyad4evS{ms)?@tbC$u z-e%WRD=qc1Z`jocIqumWUvO6K+U!GCd@<@%kz>DqkO9B>OA^aBJ3c>DHZPj}J=-p& z*`#y7RCi2s|5N&}Ia8?AxVqD4hW8%Wa}B-d{t;fkDc8QH#%`JR{7tNjeTcEl2v4A~ zx5|lxq8bEYNF-n|BI+?16B_COlZZ47lZhq_QwReM023k$fT&b~*WEW7@VaYCm}r6! zsS3h2O%Tk8PAn*>f#9qK0*ffp0-+8ILs+mN9JE15RR`g)HV9V402cH$K=9K6!G_qc z141hn=(-@-5#G8WbAj}}jvCxABS$zMpEa*%GflVY#1ff(Hgk~&w5E_Oc1nPm1V+ev5(S!vNeGtry zK=3BAj6kTw!W%635+=qVL>hpw%@_nfq7w@W6G3pE1VR8&GztEx1HnD1(nC7PVOwvl zd;H=%ry|y!mXnB5W<9oC<`~=@n1`!UE!ECA_v~zeev@?(B#qH=DfiMb!$9(=tv{l7I&MiB|WjcjvB2{79 zWbk^v4Le@@X%|QCWe)OD)kyAbjuGFa*XVh|?7gnn9XHKc7b}G%=SsbH=zH8Q{FrDo zg7=wB@A@B-o(Hoo1Sxtqe;ih>w)}a-UhTv)nUTfDk~=&nUmrSNt-Si8qm=#Uu62#3 z6SK@Uj;#KjVemd7?&@+RjW1JUQxSg|IQ9shyj1mz`STd7Z~VD!wm-Er2b`0iy^@^d z^RBpi<4=pzC3d6KU-LTVDsE9*bmFd-_zP15r>E#}m2~ywS8+e)uA1geWEjI2Ol!^^ zobzavU22#v=efF5ZHu@{OGw8)>WqVWsJL3X7^gEV@ok>ip*5E0b5{ zy{eTqYnLnxel6?~OhGs~1%w3R8x|_DpfU}FBqC}W2$9op z6)dC>Cgvb0n8DXpo$R^2QhN7)I%(he#Hl)y;(FuxrIC$-YTXu(ieAqix_aWE^gy1JtXk`4@8wsH1v$$84&8Bgs`C;)Usv$=FSiH*S5`u>Zz!R0YviSLV-mb-eS#(lSeQnXmg5r~^z3Qu~B8CYS7M!yk(_w;V@EiUWEF0jgu*T&__28L@ zo5#va*)#>Xl%jShy-0OXAA*C{9{>;~BuSJD6FQVo4&en3h{lorl`=K>o zcdjQI!7hho!irQqzsf{OX?kX8k-5?8y2rIsRP!Z=s}qkq{Bb8ud;Ph3`G}W0WS8(lPU&5~A+I(T-+wa&T=+!Xc@vYiV*RoL53EHQv_pJSdBbIaC zwS*2&iuX8U8DZ4FZA#)MC&i<)T9-&ntb8_ZgM{0s2-(T6N|Kg3xj(*RNo1Hq*h3Z& zHvYzP>=C?~QPWm(+QoFRBF;OaDBcaA2_Ww&>&=ez#qQ z9z|0>N#;4o#;c~dcs*_3OF8({k}$S_uz!7X))y6it#AA+_o{ZKcbvcphVW*J!q(>x zQ&v(>*GpXJQ2Ur9Fg;>^;jGVJHdQaseANFud)xeDOTNeI*<1DA=L;LZsf;~>s!Ad& zcZZL6wz6C>T}jRE{7((G{9={6stcES7q-p|&s-!aaojNek|OJ#`#w=s2i1UBJ*Q_U zeiolQrqS1|B$#oT=m7VKQA=3cIfSbftnFe;yd7A9kV|~Sf{PUh^Q}QxPbAobFoFf9 z4V6vXKt=ft{zR!Y2vs0Z3kZfSlnAr|A;uPj&BR44h}eRl0{>^{v?3~cTJKL(Vu5P| zkv1ajK*+F%D%*&18>pgS4}!4+2n3Pl074xWIzS-Q9bk7ZaD=Q~M4KaI={rJ}%?uFs z5bI}v(29kAEbJpJoIuE%0m2?95cU(jSTJ`2fouLCvBMdJ9xRMHLy5zL>r4=eok2J` z6NID0H!Qf!9IH}Bl+6NR1Pe?TC~=$!asi=q76?^XI7u*EK?rmKA;uMi)5JwAh`55F z;s!!F5#bFVV!9w(Tj@M5=b;(y*(z531Gj~ls zn=WEgxe6w-W@EQpiSjo&M&5|wPNmz*VQqT^@(C3Wn7SHL*(E{4=0^_iN)21R-YIZt zsr<_z8}wpSQCeGfjgV!F?XEVnmIFQO6LBl3j~kZ zAlxK&%m$$c3!_-5C0xBhD4q=`nTz^n!CisIP1ZJ?AK?_EW{TpcooDjZ{+J{EVVAei zv5++mWvi#;Of)j;>ex2*^V@c@SrpSXP204)-)A$fFCO9l68tuQh?1v*!~QUnxZ#nb zyV<~}@+if*>QMI*DZP@zca(>0)-0Kks6SibS*_xB+T>;O=VVpYw~n&U_Uv6DKrPj| z{X!@>p0M$T5OZX~-+H16UQDPBgn=Bu9U=?EU7`&`BVi&BaF1Az;Xcuc;Q?Wx0MJAf zVR%UNVt7P2C;~htc3@~G1~5D!T$KP?i2WE^iEkL%2ybP8r$iZsc7i$q;29Bwp@S&L z@SI?%0K6bVF}x(cL5EU132z^OS40_xE`sU{@R|t10ROcOLpQ;g1Mrpz#n3}s#L!Df z`2qA1Q2?}eRFwG3pZ1=*?J3ot+D}}^c^?Qxe}Iof0)|gSJ%#~7BLLttk%r+5(S%`; zFbD(~BC;@iCE73y6DC1aFE};G$vDD4Qg$0wmLEBDwEK7R+{dSvOfH(Ic4cJJjk_^w zM?EyM!?)g1UA;f4Xotn@yf1a8r@NW+gV%N_XP3387j^C}Vz7nC_hZuTH-5VpHm>>p zBV_MPEi=u-@+x74BC|N3DrF9aar(txeMwW1I&3_}{LJCA)mt8}jTF#vzLAz@6jZo+ zB-P>M6ZZ?v&tKycc+BDN{Dwt+l+F6TZ#$uL>0RH8Zn(@aTQ$Tsd^q-hnmZ4;D6a1B z?_B93y>}E93k$ncjUq;3MFo3BsS45rL?kM!i8a<(t|AJy*n7d2sIkOe6JzhOcTHl8 zzP~dw%OZm2dEWNlk6&lzo^yM@bLaBpd_VsUXP1m^TJ+-lroZll>UWrv{G^Wk?XGd5 z?R}efQ?=}Sf8@7c-&L30*Yl>V!@-br~2;cG}ZOtrN08x?y=$59=`KCl)Qag zvh~!{cL!Lv?&|jD+LT$VJN5Rhb+k{FRwM3**9nBIOo#M2Im{kQG`Cg%cF|p8Vxt z!Dd>qyA3zZ#d?QLu3&*bA`(^ImlEc!K;bsl{>|h`CB5^6FPQ$q2}mch-GZFA;V*{@ zk)&v+i?n!5jfM(=6tP4psE(q?h`P2zAq{;T!e&D8DG^Hi@`bfM$!i-iXQclF1d|hV zA{c&)Uh{kBh0y$W@1-A^NiX@OgK^3}(}5nf$N;}3uud+}_dvm9fFB)RMrO3er#*pX z84T!|P7yJu8~o^SGjfYgW|7a9%2%wBEz_|iXGn^lQ~|Jliu-f2**aN|z6zR2zT+ot zW0KAh@j^yNgt-rZ?otg-V#;A1I=;BA89{=Sf~`?a;Ue6iqiQi zU&&@$Wixu2&_Xt&o`&3@lki%?jEw2HHvALMEeV$OsG}t_IyEgMUpA!mSF%j!f;EuM zcFBsiFxxE0L|S8)&NkX2n@KNHr2}sEL6?4eWV;Ty&y@A(Js$Z%r>W5jHAOsszpO~7 z^3W+T^rL=~6rDjIn4yY^2hNe$1)P>0JSy8oJ0TvVgo{F2VP zaT3q=;Dls1U*Um=UjhB(mp=+m+z){#6#7%LC)IIJ$J0bHnwlY(@q8oc1m0IoZM5Fgy%Ja^#|{=#6{Yg+vxE$!2v(4(N9o zW|UfW!6iU?S7p6=xW5eOcTF~{kNYct^sdLshCX<>3g~x3c2J4?7l1tbL)P=f{dGY4 zw`4Ov+~1JRZp&sT2d3{(MB zQBQ+k!Eb=-=vhGZ@;tZzE`m$oGPnY+f@|P9xB+f5B=jG+xdm>6JK!$32kwIh;30Sf z9)l;~DR>5+13DD22+%QJKY%4*DOd)UgB4&ESPj;I1%QqKqlRJ%;B;QtRNTx01)vDb z1I3^aP)ji%ECSQP3~(GC9s_hf-&8Oe&?$v`4;E0lU5J}SU@`asECEZwGO!%104u>Nuo|oZYr#6O z9&7*`!6vX7lz=T@8`utLKgf^ZC$JOj0=vP_U=KsN*^8TfU_bZ;8~_KwA#fPDd8eg@76Kp?0EYJ+?S{73KA|AD)-m*Y4%0ZxI_fclO@;4nA>=7ZTlJlGWW`Xlgk z&f#5{8RJT4M$&0?bfVo;a1WdV=fMSV5nKWXz(G3aa1U2a17~Wtlu)b= z%z!y41VaIJ&AmVo?u$WZ+|$8uUw}rSA-Dxc&I0OosYlHLBcV$@X)K5YQJ^Cr`wt-h z1yFDKJM7S3z7}t^illT5Lh2>=1L_&6*SiA9oOTgD1JrRn1W&;|a2?zLv=QwOa1#_W zDl8~$HqzCk(I9_ys7HWDR#IL5QM zM)I=(u7w$=gF!>k0JH#Y!B?OS2&b@qft#iv6f^>jK^SNP==n>~473L109kGhT7j1Ga|EuD zfb6sb?LkM-0dxahKqt@{bOq6%7wAc8)mwgu#We=>1#uuA^aF{2Qi+l;1yE8ZgLIGv z$ei+XpnN|F*DOG(O0sN_2Zn&J!B8*^i~t(=ub2QvgHhmHK>4Ntg&7Ld+(@Ew=| z$ieC0d!PZ7&r`t^Kpss48bIdsJO>m2{W9p`zB3un%>qyiioksN{s&wagGFE=pjZ~; zx(uuUO99!ZXOb<)btRcm)6y(|4c!8Ao~|1~Rr#K*P()*@lUqNPF{kHUK=wn|wCslA9+@+^{sxYML*O7d0JNUdl>&YQ90tDvt(}v&Cp*W% zF>nHq{4_WPw07wJFcmFB+zbF@>38``p7#Jf!8xFf6~)vBI0Acc30Q#(zyxRmSdqR~ z_agKxff?DMqE+6KHO$BZa+nm$%jKjK<>h5w(7z9~0d>Ybxpy5n0dlu&K=SQiK%Urw zYv3xNkeLGqP*JQXVC6m52I>#U?txo?Ji7^Q0BvN*ZE{z(pI_SVkYQOzwD-4Ru1(In zxW6M)Q6MPh6=jb$xyyJg`-}9aB>PlyQ9hGrWmAe$r=pb6x>LStPaaX|%EpdLv$hPB&*!qqTQ*-QW)%fQ8_;t3uFdv_Vt!Ex zrG`YSTv4fC1-Z2#O(_4y{S<1yd`({Bb^u6L@Sx{{+L(smG%wKOQ*R6QR_`GC2fPJu zz-tAc2{r6Pb9^p1=Tl3Jw+rIHI|o-9IMM(y1q=W*g^mV&0Sz{LgC3we=muyy(iPCW zsXgcj_o(4%hx-UX^C#_G>MPvSbi4_msrX15>V@DY7-(QA2v?fp&~#P>XjVbV&oiFm zogPhg37Yu&gJ9SQ!1W72bB0EsF$e`=pc$Z9|CfNKaBV>6@w^1 zLF@uL1DXnU0=?*Ol=Q?6r3KA9v~i}mQvCV@ib_0)1r&uC5C;-L0_X>l0oft>Adm{Q zX`O}pOfV2+09wk>rgcx+H~hbu*q=@7G7a3Hk#LQb7XP21{GP z2FbFxB2VRlI&rG8Yrr}@j{@I<Rq(?f( zfYvkZ;O}>sk$a@`Sm-7VH_34dgw~T6xPJ~PX`ce}wtJu%s8m59)>{k%HLt&aQP|Vs)>n}DDFc+M5I*pg z;1C?3^vg)k%8tv*QuK;BcIZKb(FkaSC}CTgp!)Lr&Rm%U9g-K zEY26u?`w)`YUXv|q=b>Jl5dl?l=QN|hhdqv>nGArK8Ab?6kL*;_P`hy8cHfQAb3 zRAb}s9_b7K9JZ#vb6rl z@f}|{*ODbFei2rk1CS0-u!q9B=NG~L#oK&eJ@(2B4Jylr$nv@5SW z)?aiG8OLwF6-KxqsWTH|;^NobbP5*=5|VnvKd9;At+?Q54p+jKDphly z7W+XdSQ!W(6rokba;(XpyQPYM)3nuOJrKppPtgVvDzjf~9_4f6Nrt6pM@;6PkYF6B zQKybeWPUBrK!S3pMq$ZHPfJV4M0Gx!r5v5*yor55*&3`w(q|2ZIer)O1`bu8EUp7f zut5boNp@~^0yq0-;wev2f`Y^&-wFPdsCnt}qE(-u8~0m;=kJDszY^)A;zjQS2OE^p z8jzz#YMg9qT8^mE@rVsS47+&c{{EfdXlx^dHb&8ci<43M`1bdLtv)To`f*FfY>mZR zSe`$lDRX42^k$ebwIDt?H^7Vq16s|UrQ^-doH58?LLHb;s)%wI!9bksXbw9)@k+Pl zOAs>h2+=h);F`wFfw>v*Fdt^)f=Z}RL7QsDsH?;C`#P>WEk{&MMaaQ`G{OzI2a1yc zqNM0yFk=dH6byJqeV8B_6yxBgAMQzW0n8i7_dgo&NR@nl&VWA%WezTX!Y@zwwO~w`;K~NHY~W-U*$`u%X#5`rfr9tQfZ0*FUFhM2 zK6Bw#e$4HYk&wM7ML*dIb!nJC6HeaOh*^9-oyx|rrYTd9>JO-UYOE&-dNNToLTN5hisF71C2%c(!L z?)xFB3Q6P9?GLP*712$Us7S(F`yt~`LLLP9S7tM-urI~LH`1E%WIa~*V0)CN+``|Gj#qC+NcVbvQ}r8EdP(ngj1a&lgV@=Kv@ z{qkUn{^Nz6EQDu>7S*YC{2LS2mPK3gQzlI9(jPq*g+SG0QO%*>SUMpDh%U7@11-5n zRTja9TJp52%pqtLG^yjepSpKWx7$&Np^4UydXveJP%}5wp!b}{6BbivL479Nm}|** zz%E;A$=&KP2mYuka|&87tNW!NpFP!nSRh4O>biHyUN|qyzq0!FCWY*U3S%Zq9%_o( zdP%n1eMOCX)kfv)fQHzUVr*i`GfffPzE*q}G}&M)e%_R+nZ}BnRfG9dE8eRba}c`m zOV!YN#aZ(ycw`yYe0eoi*LW+^h8jjm>}-JEk;;Lil~qco8s@)>Q4&WNcHGhot&KZx z(uq0pa5Ls4c=J9matVbUO7l?`y;4%X6$&X{=;JZ07;DR?o3Xkzra}XYQks?MIjNWF zzVnfO;pK8Gg0ea)F; zek%+BNa5w{ulxVpZTey+s9{1yy*sXyU9Q!y)!1cRokkYHk{`K{P`@6QVy5ACsmMvxSmTKu>La}2CJiYg31DDpjo!VAs+E<$&tEhcL2 zY6+_)P$0J-#P{fYsnM=*C^Qg<5sFVZ`l%@CAxcu5g_iswyuepkhE~jHtMM{?rP|EGgQ#1t`X$FQd#|n4B|c$h)4dP=!-ep}8jyvql!o_vAgS zQ86x5=aX=C(O^tKHWv7wX;-xPRj}wi22Ns?x@e7{FSV3XGizMScN-Ub4HY%S%J7|+ z6sdZ@EzCSQV0|x9A_g6;Mzjq}6e9RO8|LqFwU)S0saZU(xJKP}3qqktjR%^D7qz&J zEz`Ko@_o<P~o+Bcxnn1CB&#biO|OS=WAqHhRytG)D8{&`3+ zZsEm_%uateqF#qz!=O!H>?fq#1SBTDG9^>#mK4|_jLaRGgZm*!sS&7+oTrws*R(F0 zdwqJJWkN7b8n~wcvz_@~&jTkYH2zpFf&@vcSv7w^*TbDdpF*O>lnjz`!8A-1N4O!} z1LGr#3&ws}+X>)iPN*1D0=TymtE;~V$!;vBn8_--h09QB=ZgMok`uG2X@hb{_VC&f zS8Iq(m!CM%P_MAR7$gg#Zo$@0e|VjIx%fd6u4rPbFrb+Fco@b z##SBM$AyX!`djo_xA+KGW@m@H^3y&WY{S3i${cGvgJmm9jW48`?4D~AW~NT|H_!!7 zazqb~+~iftbW3)cE6jWC&)VlCZLtc}jYlxFZeTEH~oi9Tyi<6)Y7$m3!=9?F;r zlSbAKJWZd~*N&KVBf{2ivHTzH4HxLYNUJbu%y2*X>(RyygNhKwV5K?;Bf093P!%(8 z*8GBbBIi;`f4FC;W#aeA5ha9Nw`<8_kIFn*#gv(pP!v<~Cfz0sk>Kv$}c;XyIO zuFkR%{FS*1`XQhF>aeM^J27LhxPTgPP7n)LP8a;O;bL+4#sS~~cn&Qz=Z)$kiR7uD2YLsEQ*)^%@6r?YUmcW)u7Qd@N&fX*xl+#^ zSVcZgfR8j{zCGT#m(Zt{tdyc5 zI`jW?Rk2*;bZyoLf%@+o&Hs`0x3sL4i@n&`ooXwMo_F{>ZyGdr59UH>>SzHZ2m}x#s16Tv7Yaa`iJUwM*sQwpSO!@}OhFPW3Ur;Apl4JLI$Q<^ak$ISGUltCHTYLarHrTOBf zQ_&jZRT36s_?l+Sz6$R7Ls}jUXuuygXAY5=$7W|qLuJ!eHnS$(tMU^jn*mD9K(Li0 zDLVk} zf9yJAT{N7eIklP(566pvjp58zPepH$W<$9xIy!M-Y^raMiM2L0ZeSzKX)k^-rrC-s z&CG{y8I*M(?Q`sbd`|7teOAs?MjB`ZjXRpl#4!y~1x z?DFNEb62Q;Y@jEgC!;rUiYbuLEc$?9ByWBv^=F-A5hT=?cL+UE&&Abp2}$xLOWR~i z4zFLUIvfg0&{;YLi8z&Z_S<&)Zd?zYYQJ6 z64NLta6c;^wWxKMh3Vy&hT8)onl>hFZL~DNAoZ5cl3KQO;hV(fs+s3^>mU+g>LcEqheg%G+P~?#6tb zq(F8qrSF3GXQpn&QnNO>*UENc?cN%jyW9MwlkA0rB6NFZ_Otm-{@SjSoPmVWwEh75 ze8cB^lAG&9_aUMfjn!M(zmH|ZT%F_{BorgH<*+W-wsnZrNo+bui8}3z2Q`u>7L3(N zydj|=?EYiwQfvDbf9oU-WjnD4{?fP)UDSD+PSg$}3WAYkXuU1M^dmY+jO<)c#F5SO zzu%arlkDy;74pz%w&T~wMptO8hu77pF2}lax34hvdI$|#=h*cA!7~%5LpAjTl-2-R zsx$5(Exc^Ev9szudG<)1#H$BSfnArz&>*{K)Z5=reAZRaX>{+wi^=sYXwXdfyUG6) zmejDkr_-1L39ZSzjGjF_pzzRpon%W7{)p_Jfd(xuZK$c&+waaOYn{fQkYEj0^Zf{y z?!$Bb^wvond-6tTlUy3~l&XKH%RA?fc`?FCr_r@1&wxfy7Bpy)Vr=G|+Ly+*s;1MJ z0txvWRq*IhSnj#b;yXO=ct<*|*aYtqo+6GcfNH-#fXstoJU&BJ^1qm&~ zzQ7fW@|vt2omZ@8=Co{x3={o~=T|#3n|3slsuwR6z001CRwj+jm^h-QjRT4%kWho@ zXwcQm**k|e6krLHW)5v2v4A9D_}#&o-LKIKGFI#P>ehH;LpBvXp+KcJD`G(BzRgCC z60NFfD3b~awWU4Ac;+?O^cO91!_goVv^+>CxD8cpIysHFvJw(1fhugPfrQ$_7w2o( z&R=$;iD(CJ{jn$Nqe5#UT0*g18P6lzun5PN$U1rx5;;6&$HjFU$XQxD55k774$Qgr zPqN#S=CAMk&#>d2A(j{JPeDS_pEKL*r?%6UynqCGMzOmL301G#tA|YOdVL_~T9mNd zDFW}x{CQvm3uaH_d0GVWUy;DaMqnjgdfDj6e~ZBKyhQ?k0z(&PtPt0PJ6)Vwo^*e@ z;UL_RV;q*iL)&5n-kle9z?-)SDAMYbt;M?Sd6Uy-iHfugtLT})CqU8iqt25bZ_8@1 z`3d|*TX?@Nflq0N!oD32QDF(0=`-DPj}`eyTZiD#z69P28d^>5HSl8_!(|&4yyT;K zBNkAlmwZ8g_LDq2IB}?%J^L+}p~V&RQ!xV_J>^N4sKf1IEH=_xXnMYAKOmDXC))A(?h2OY(zff8dtGwJyB?{?u;W>L8y?w%Z2qVNb7=c2TPn>D zUdCSPV{H_G;K=2C%phq=^1i8uW7Uy0)nXLH%xIk>b#iSkj;PVt@Kq}@3M#5PSWR@+ z`h?^i-w}(R;e(}4;IqvR@7tQ`xm4Wlgdo~Y;<=_Z(zs1LFKCS@^o-}n@ElZG(-HW| zrh~h*LBapHp(xi*;APj`Hh7WusrGm1&wV`;JAzeX@yKDi6iPiA>iw(srk_qWM}&68mTuh*#5 zRfU8azGJp6n=X2hd`HZ7u|QPb4t=736Z;y62z$6nz39}EJ$sU>t1!9M_J9G9P%p|Z zjvhK|oIkc#XeAvXp&l^J?fK5%&U!V_O2i(p(dT=>@_nm?kOdbp1<>#(9hp<&Y58gD zg;v7)lYPf%-N#(wKMoUKC&P{x++OB->A-L6zrq_{DIQ{ItA9SUVwiY`L}slYOt1I& zTD;5E$MCAZB{%IP_6D>kBfs+e`ETM=`S_vYZcgcdB2uA8e0Cq^92|nTx)qAWuCvl~ zr6$FpeZZ$mU*%=&lPUi%MoN{3_eC6E+lo1;J0fo@DvAFGa=p+5FRt#|7c!X$quPc&VMV}@}!R*QW_IEFnJSI{$zMu@%DkrcT`olUrH=# z?ckaPqT%9i6;ktr*IYzH?%fYTLc_QAul8)(p%+^K33Y{Th~a&RXlA*0_24h9gz&E+ zqAfX)jOPhm(LF33E{!^N=FfV2t!a-wP>?p(BH8%HuB^a$7c|I;!d>&fZ&f20`(QS} zgoeDo^Q3OfA4ed0kmQV^nAXy+C(6^&4&03P zL;V+0(eO^*HkvtFcNi^AiT-YMu1Rm(ov3gv_>gG!g|l*u6v8g+ zHU=6U9_TB^M104!fgg{?cAQsZxLY5LVWP%KRkk4V4&ncDed z$HOK`j<@AaVvtiY@?(j^zKbVLyt^roP@vIo;pIo6I;+)`5M1+cQ`mE#T!^cK& z3*jsrqvq|$$x^^KzH&Q1MKf;;92MXA`za1UQVSY~H@LTMlHBSWNkVVNA5G>KvCPJu z?(L>Xxi-30Xq$yE#{MH|(XLQ$-Yk~Y^9+Q76P&4dDHH{bmO=yhljh8xw*Gv2DU)l$ z(G6h5(uo(~zsQdlD>d+r+OGd%u~IQSlAE?bIjV4ZQEWpNMe;Cc1XZ|}C~8!=mMBVY zMDj^wx5AY}QRAbPLt23oB_2`yB89BNWkOM-c@(#33D+xJ6cjZ+Tojbo1Vzc{C>~9A zD_j8-H7Z;I6eWA3_)6Gysc=zG)UfHmuafH(F4Tz{+J(9g*6Bn^yAE85(M3>&t8$`7 z^)RW9e7IwU+7)TrgpC2+|HApoScLL2mlhaJzyGR}<+o=s=d7!celIw`3JrO)g^dT< zs?cq*KEZ8eoTM#Y6KC@si5Qgp$mb?7dp94yEwiPWp(638y$`1hyeQUHu`7_am^cJk zA>bA$sO2}|_$iLUt|ue`LnqF9Hgx^vG8Jz&e+O@asuf5Bffm0885^#w%R*c# zOe1)R?`6b&K@ReMY+HSF!MEJ`=z5s2e&CP;YgNc26OcQV@0pQ9Ev2s``!EvH)|?u1 z`2%t!aIUmUc7H{};(4cvHtSLkt+)p=iD5H#!$d4E{EIy^0g4ZE7JsH5cZ^iz?X8gyBdT>RkKMxoP-?jpr{D zS(q)|XU8O^3{FamZ_)Eqtw;6N)z;^&`Z0IxO-;hZlVQ1#dYB8Hzh2aJg@H6Ke^6Jtx5@D~@_Leqsr}*?5(K zuV6AWm_0Wh$W**9V*HTE&=3>1B!Sv#635%$LfxPVc z5(KN&VD=q%Sq=*kc}Q2p(3=;f;cj9!UJASaz#I+n*&`(tnb`AYnaoc=8cWq7JhT9b zio_4#lQNl`m8cY-kev{h?UR-sk9^>kClJEFGub>oKaF|tO<7D`O;qcbKssr0d}<0b zI%cyBA%v?^nI~_t5YZFk<3_>0k4NcT5R|JSaF7FjGSs6tO#!p2g3s^x-U1en(p6^;>t-zOdlp?QoWp#mAX(y* z)%jyt4JtO~+Iy54NBjvIF$}%uFjIbf4zs|YS40Ozma_+C#-{sZWuw@nhGh@QNXYV) zwm)Yfs?wbg9SSU#$2#Q<6EYFlkIWG6U_O5_@&ZM~z*=$yin43;6(xnny{y*|mwkj2 zQkqznx2@vyrz3{ph0GIgsQq~VLe`&q-hxr_YGzQHh_9~a&tpSOvELSP3`>eh z%gN$R2Qas`+D)Cl87YJMC8haf4C)t_)jvH0HP2To^O0pKNdpHZ#fRm^#0`jv|45oW zIEkx^kn6LGP?WkAp#WDeW_65Xva>UjVh3d>a8)t#u6r>`%8nvz9nMKe$xbNQUd${Q zUo;(}2MZ7htTJ(nh0MuYZniy!4)u^XqKBapXD6kn`6gxgWMrmi_~gW-B*k-24P0Ei z5OpehA@UXla0Zo;h0F!_PoEyXva8!1XPa4STa1^&Jsw|fL1T{e?b68Ev zrK)_-Ko(S5A1Cmu%Taj~m!n>zK6;i|u3+H;+N~}tS-eSrGMC&8ROa$+E7>6-xMb8S z79vy$LbmT(&0h2RtC9BuSD}_|Tf?R?r7vAub2b@uN%Ni=^7OS>fDYu}t!3Y!dYG?c z#c&%f$9P_2FjhD{HsF)S?(11Sx~onhQ1j92SvzjF5iW=gMD#|ytqJ5qHnJU(f!O3E zZDJ|bQkG}N#3$wY3`+9NM7`!uHldBVunCbB^&B@N1;0;00*LL`%FS##Pu|RYONN!; zQ&+LQnzD=g*HZZCu}>~vtK8W#qG$V@3terqAw@6 zGf#7Rc}IB~o0R5@Z?^fmhs>S3?_j20^!i0A>SYTN_2o)G%Bs-DYBdkv!9uv(BxZvE zi6!O{-G^|S{j3Sqn3690S&C34CNq_<{e{&MZ}$Ac=Am`ky^SjK0ThYv58!LWvIb`l zF#9qFM%?Kj%A`)ih({k}uH_AkoZwAR0BU`DMnYO_R=kh+>_ad0OMNrqKO96kDP!P~ zmXKYl49jI7%h=60gpfWv$gH(?MT4M2x{$)4&IiIn9}3O5)nQ$zMeBVJ>%t-$tURns z3en)%;SW48;|-6L3BnOpv((2UC_)F0luIYmqdE_e)<(R;Q4Fx;*k>GL#(eHkRPk~K zhWx=%okLnRLmqOhOz4h@jitKe`VJOk%mZ^#c;6MGj{SIyx#`i1Y#w$KeWdSklzHJM z%DmYvv@R~knRR{X6n42qq;m-H`c-UE#D%la#z@t$hE`I#?Le|oRil=0Y3p>!w zU4Fp~%#c~KOAVAN{JFCes38-Mvuga^b>>jg_XKMw@akuobIF^N%-@uIokoF+yv!DG z+smvee|DL5<4+HuW%IbsteMJ>I*{tT_zE*LP0oVb$yq+4yINycL0$6G6_&(!pXlLk6{! z29d{^6^D~Rv0uHws4i*?vH~e-!=wIWUV^G5=TFwB3JUm{mu!N8Sjd8SyHu%> zvxK>72MTG2RAfx(eq@K~A?8)m@&FrPP%`Wldsc=2uo}fp?0nF{cyQyjta?fMKWtGI zGIS~J=j?cm#}Fey4SDl4@_q{%U~#NM<3DOwXc&n66p#Lxv4geJqqdZr3snmL7g1HM Ab^rhX delta 51329 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 I1j&~EAKKCwa{vGU diff --git a/package.json b/package.json index 96a256b..a2eef24 100644 --- a/package.json +++ b/package.json @@ -13,68 +13,68 @@ "preview": "vite preview" }, "dependencies": { - "@hookform/resolvers": "^3.9.1", - "@radix-ui/react-alert-dialog": "^1.1.2", - "@radix-ui/react-avatar": "^1.1.1", - "@radix-ui/react-checkbox": "^1.1.2", - "@radix-ui/react-dialog": "^1.1.2", - "@radix-ui/react-dropdown-menu": "^2.1.2", - "@radix-ui/react-label": "^2.1.0", - "@radix-ui/react-navigation-menu": "^1.2.1", - "@radix-ui/react-popover": "^1.1.2", - "@radix-ui/react-scroll-area": "^1.2.1", - "@radix-ui/react-select": "^2.1.2", - "@radix-ui/react-separator": "^1.1.0", + "@hookform/resolvers": "^3.10.0", + "@radix-ui/react-alert-dialog": "^1.1.5", + "@radix-ui/react-avatar": "^1.1.2", + "@radix-ui/react-checkbox": "^1.1.3", + "@radix-ui/react-dialog": "^1.1.5", + "@radix-ui/react-dropdown-menu": "^2.1.5", + "@radix-ui/react-label": "^2.1.1", + "@radix-ui/react-navigation-menu": "^1.2.4", + "@radix-ui/react-popover": "^1.1.5", + "@radix-ui/react-scroll-area": "^1.2.2", + "@radix-ui/react-select": "^2.1.5", + "@radix-ui/react-separator": "^1.1.1", "@radix-ui/react-slot": "^1.1.1", - "@radix-ui/react-tabs": "^1.1.1", - "@tanstack/react-table": "^8.20.5", - "@trivago/prettier-plugin-sort-imports": "^5.2.0", + "@radix-ui/react-tabs": "^1.1.2", + "@tanstack/react-table": "^8.20.6", + "@trivago/prettier-plugin-sort-imports": "^5.2.2", "@types/luxon": "^3.4.2", "@xterm/addon-attach": "^0.11.0", "@xterm/addon-fit": "^0.10.0", "@xterm/xterm": "^5.5.0", - "class-variance-authority": "^0.7.0", + "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "cmdk": "^1.0.0", + "cmdk": "^1.0.4", "copy-to-clipboard": "^3.3.3", - "framer-motion": "^11.14.1", - "i18next": "^24.0.2", - "i18next-browser-languagedetector": "^8.0.0", + "framer-motion": "^11.18.2", + "i18next": "^24.2.2", + "i18next-browser-languagedetector": "^8.0.2", "jotai-zustand": "^0.6.0", "lucide-react": "^0.454.0", "luxon": "^3.5.0", "next-themes": "^0.3.0", - "prettier-plugin-tailwindcss": "^0.6.9", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-hook-form": "^7.53.1", - "react-i18next": "^15.1.2", - "react-router-dom": "^6.27.0", - "react-virtuoso": "^4.12.0", - "sonner": "^1.6.1", - "swr": "^2.2.5", - "tailwind-merge": "^2.5.4", + "prettier-plugin-tailwindcss": "^0.6.11", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-hook-form": "^7.54.2", + "react-i18next": "^15.4.0", + "react-router-dom": "^7.1.5", + "react-virtuoso": "^4.12.3", + "sonner": "^1.7.4", + "swr": "^2.3.0", + "tailwind-merge": "^2.6.0", "tailwindcss-animate": "^1.0.7", - "vaul": "^1.1.1", - "zod": "^3.23.8", - "zustand": "^5.0.1" + "vaul": "^1.1.2", + "zod": "^3.24.1", + "zustand": "^5.0.3" }, "devDependencies": { - "@eslint/js": "^9.13.0", - "@types/node": "^22.8.6", - "@types/react": "^18.3.12", - "@types/react-dom": "^18.3.1", - "@vitejs/plugin-react": "^4.3.3", + "@eslint/js": "^9.19.0", + "@types/node": "^22.13.0", + "@types/react": "^18.3.18", + "@types/react-dom": "^18.3.5", + "@vitejs/plugin-react": "^4.3.4", "autoprefixer": "^10.4.20", - "eslint": "^9.13.0", - "eslint-plugin-react-hooks": "^5.0.0", - "eslint-plugin-react-refresh": "^0.4.14", - "globals": "^15.11.0", - "postcss": "^8.4.47", - "swagger-typescript-api": "^13.0.22", - "tailwindcss": "^3.4.14", - "typescript": "~5.6.2", - "typescript-eslint": "^8.11.0", - "vite": "^5.4.10" + "eslint": "^9.19.0", + "eslint-plugin-react-hooks": "^5.1.0", + "eslint-plugin-react-refresh": "^0.4.18", + "globals": "^15.14.0", + "postcss": "^8.5.1", + "swagger-typescript-api": "^13.0.23", + "tailwindcss": "^3.4.17", + "typescript": "~5.6.3", + "typescript-eslint": "^8.22.0", + "vite": "^6.0.11" } } diff --git a/src/api/server.ts b/src/api/server.ts index 0ff1ec2..fe35fc6 100644 --- a/src/api/server.ts +++ b/src/api/server.ts @@ -1,4 +1,9 @@ -import { ModelForceUpdateResponse, ModelServer, ModelServerForm } from "@/types" +import { + ModelServer, + ModelServerConfigForm, + ModelServerForm, + ModelServerTaskResponse, +} from "@/types" import { FetcherMethod, fetcher } from "./api" @@ -10,8 +15,8 @@ export const deleteServer = async (id: number[]): Promise => { return fetcher(FetcherMethod.POST, "/api/v1/batch-delete/server", id) } -export const forceUpdateServer = async (id: number[]): Promise => { - return fetcher(FetcherMethod.POST, "/api/v1/force-update/server", id) +export const forceUpdateServer = async (id: number[]): Promise => { + return fetcher(FetcherMethod.POST, "/api/v1/force-update/server", id) } export const getServers = async (): Promise => { @@ -19,9 +24,11 @@ export const getServers = async (): Promise => { } export const getServerConfig = async (id: number): Promise => { - return fetcher(FetcherMethod.GET, `/api/v1/server/${id}/config`, null) + return fetcher(FetcherMethod.GET, `/api/v1/server/config/${id}`, null) } -export const setServerConfig = async (id: number, data: string): Promise => { - return fetcher(FetcherMethod.POST, `/api/v1/server/${id}/config`, data) +export const setServerConfig = async ( + data: ModelServerConfigForm, +): Promise => { + return fetcher(FetcherMethod.POST, `/api/v1/server/config`, data) } diff --git a/src/components/server-config-batch.tsx b/src/components/server-config-batch.tsx new file mode 100644 index 0000000..57a2ed6 --- /dev/null +++ b/src/components/server-config-batch.tsx @@ -0,0 +1,104 @@ +import { setServerConfig } from "@/api/server" +import { Button, ButtonProps } from "@/components/ui/button" +import { + Dialog, + DialogClose, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog" +import { Input } from "@/components/ui/input" +import { Label } from "@/components/ui/label" +import { ScrollArea } from "@/components/ui/scroll-area" +import { Textarea } from "@/components/ui/textarea" +import { IconButton } from "@/components/xui/icon-button" +import { ModelServerTaskResponse } from "@/types" +import { useState } from "react" +import { useTranslation } from "react-i18next" +import { toast } from "sonner" + +import { Pusher } from "./xui/pusher" + +interface ServerConfigCardBatchProps extends ButtonProps { + sid: number[] +} + +export const ServerConfigCardBatch: React.FC = ({ sid, ...props }) => { + const { t } = useTranslation() + const [data, setData] = useState>({}) + const [open, setOpen] = useState(false) + const [currentKey, setCurrentKey] = useState("") + const [currentVal, setCurrentVal] = useState("") + + const onSubmit = async () => { + let resp: ModelServerTaskResponse = {} + try { + resp = await setServerConfig({ config: JSON.stringify(data), servers: sid }) + } catch (e) { + console.error(e) + toast(t("Error"), { + description: t("Results.UnExpectedError"), + }) + return + } + toast(t("Done"), { + description: + t("Results.ForceUpdate") + + (resp.success?.length ? t(`Success`) + ` [${resp.success.join(",")}]` : "") + + (resp.failure?.length ? t(`Failure`) + ` [${resp.failure.join(",")}]` : "") + + (resp.offline?.length ? t(`Offline`) + ` [${resp.offline.join(",")}]` : ""), + }) + setOpen(false) + } + + return ( +

+ + + + + +
+ + {t("EditServerConfig")} + + +
+ + { + setCurrentKey(e.target.value) + }} + /> + +