From 9858b8e40ec18835f06e1a3df77243c7372b7c7a Mon Sep 17 00:00:00 2001 From: Evelin Date: Fri, 20 Mar 2026 02:13:59 +0100 Subject: [PATCH] feat(renderers): migrate renderErrorCard to satori (phase 2) - Add ErrorCard.tsx JSX component for satori-compatible layout - Refactor renderErrorCard to async, using satori for SVG generation - Add Inter WOFF fonts (400, 600) for satori font rendering - Update callers in api/stats.ts and api/languages.ts to await - Update tests to be async; replace literal text check with diff check since satori renders text as SVG path outlines --- api/languages.ts | 2 +- api/stats.ts | 2 +- scripts/assets/fonts/inter-400.woff | Bin 0 -> 30696 bytes scripts/assets/fonts/inter-600.woff | Bin 0 -> 31260 bytes scripts/renderers/ErrorCard.tsx | 72 ++++++++++++++++++++++ scripts/renderers/renderErrorCard.test.ts | 20 +++--- scripts/renderers/renderErrorCard.ts | 43 ++++++++----- 7 files changed, 112 insertions(+), 27 deletions(-) create mode 100644 scripts/assets/fonts/inter-400.woff create mode 100644 scripts/assets/fonts/inter-600.woff create mode 100644 scripts/renderers/ErrorCard.tsx diff --git a/api/languages.ts b/api/languages.ts index 207f637..3bb51c8 100644 --- a/api/languages.ts +++ b/api/languages.ts @@ -36,6 +36,6 @@ export default async (req: VercelRequest, res: VercelResponse): Promise => res.send(renderLangPercent(data, color ?? "")); } catch { res.setHeader("Content-Type", "image/svg+xml"); - res.status(500).send(renderErrorCard("Could not fetch data")); + res.status(500).send(await renderErrorCard("Could not fetch data")); } }; diff --git a/api/stats.ts b/api/stats.ts index fdacf53..cf3e6d4 100644 --- a/api/stats.ts +++ b/api/stats.ts @@ -31,6 +31,6 @@ export default async (req: VercelRequest, res: VercelResponse): Promise => res.send(renderStatCard(data, color ?? "", peng)); } catch { res.setHeader("Content-Type", "image/svg+xml"); - res.status(500).send(renderErrorCard("Could not fetch data")); + res.status(500).send(await renderErrorCard("Could not fetch data")); } }; diff --git a/scripts/assets/fonts/inter-400.woff b/scripts/assets/fonts/inter-400.woff new file mode 100644 index 0000000000000000000000000000000000000000..2f21ed484182ce5eeaf53879ea2bd2460ee06324 GIT binary patch literal 30696 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 literal 0 HcmV?d00001 diff --git a/scripts/assets/fonts/inter-600.woff b/scripts/assets/fonts/inter-600.woff new file mode 100644 index 0000000000000000000000000000000000000000..323fa679d99c6d019afca278b5b23fa77a1c29bd GIT binary patch literal 31260 zcmZU31CTAtwr$(Cz1y~J?zV03w$0tPZQHhO+qUuhoO|QF7x611t8$Jt=Exb9Rf$#8 zMNU){01)8kaK{0F|G5A{Zv5E)BLATO_Ye~n5&a>k{b12QWrl*0LRsv$oZ=650sw$% z1^}S?!RyyyD5j_^2mpZn8vp6^=vy2AU_ZWqlt1w~ zvPBu1{jqg$1OTwV0RRA}0sufzkRql(cU}861PIm#01&kMTn#k=L?HiLjN-Scra&rZ zFEdFGOivkL3_)fNOaM8Ld&e{#3i+H*YWwxDAQkR~ysF3iChtQNz85HAVCoyp|fa_XdB5+EEI)cdgX||PZMWgk4nDzRUk-_@KN|W_^lQnjH=k-w5 z{o?7m^7UeiWcP9eGO^U?um~}9azeD!VKgN%T{x=eMh68LJXY6d zhRgM2!XK5oKSr3Zv0pWgUn6mMCZ}8Wf$g?JJ=pf^_8!1*wq7`8$YW>~1FERl z#d~@9f~9&no-pX~DSOhYZt{Cl()YRK*1#LeUHvSm`Ofoh=JT(Wbo zB(~tQC|253#2W$UlHX@pUP1@ zC3%zktp8H+sp4C(Jy(5PS2-WZd$1`NZpAtRmoKZ-gkCP-nzLT5mT)O(2H)Rpd{A$O z*V(Uh({ahuoNGM!a#Vk&{Ls7!Zk_}_hJ(o%zkGc1V)tV!mWa{MmXVd#chr-0xUq3Q zf?5G^5K_`hu~YCuzfEhV3Z9Zn>HF$P3xc_~k#R@iq<2ua3IG-&^Cjk}?2#p58;F4L zXm5PbvAv2w#W(_akh*a|jO=_xCJ%_Gm+jkNA_)!Gib;pogEE9N1fHlq#(gHzLi0+= zyzDY;%K_d;oA~P9xQFMYXYFAJc34B!Wtylq(iAr4gx*Yn^KfXx#$7Q@A2DUWm^_u= z;_35D!k&7Cvp3}Yu>snsexkv^G_eVSdA~SvO%L?O#wntjkL=`t&4tg0uV+H~aeicE zoS3wX(a$m;J1zIFcc0uAf%~DjePJ<9+%tSi{3x5FXoqhb%J2nY&+FUDLf_bMJL);7 zd9>quf=}&Dei0g_xWK<>jzo4cEXE-$iVClds+rU58wW)sDc4CPjiIeloEtT3iL?>U z+UuAX9_H1Jjs8Ma98931YziY*RmNUasVbK(s~0Y>;#YE66rx~(!C(=L9LPK+_{}5` z$XO~|ih&e55?xX)pPjcQ*7?_c^*e$3d)#clQf2o3BxMU}!{b^W{i^dl1&fqdOV(h_ zjyPIK7u0jmgW46AWPNmZxF)uORBH62eZrG8Ufyu@4GgHsFa{f?ONGMNXx}+|Dw8+ z7OqnJqKbT52?Y1BX6EAN?%`Hj#YCXbt=IgjCYk=!P)26enC4}wk4e-hlW9Km>xFe& z&38xh)ETSRcTLoNmLvBb;rE%7g#Uxc9Fy z_{qj&Zo74{HJYB@Jh<$95da4OAJ-EQ2oOhvi9~=JMvN$#2MU$LLYf0uq(>R7&uL-+ za-_#4Duu5`>$Q{f;HNkTPAiV@O7r-&q&nyd4}BMGKHB(}2OyV&6suIm2z7dBNH}(8 z{#fVUUpM8p-5XF4D*4J~EJy;jBf&V=>~yy$ft?QkB@~{%8+x64lMa(i1eTS&E5g1b zjG@QuAFQcIi#wqd2(1MOj1yL~XMx#d%(6Zg%x##SJ^p6#R!74HVk@`{IQ0k%%%G3x z{PeZQv=rZphXd7EXvLCTPOt*+ul*`8)aYdx3rRQ(1rT|c+PIkIvr8hIa4RfpB&dDS z+UGNL1d#ta#V~9h)d=H?tLkD5wqF72jdW5i1)@_5?9+nDM zeGeEiwt#(!TVm`9-g_I0n(elo>H>IQHDC*YgvUR_VRB%@4$Ma^+rkx>1!ZermG)J@ zr%SSjImI$?rIN5y+FhRCPXhM-94d++{A zD={#R{KiT(qR6zWtBezhQnnvejH8fNq?}JJMKNKJqEBBf8^JkB8P+<|;Ei@mqBF`R zLaSA)3H%jSpHS#;OkMwGAKycwqTZFp;@?=IoZ(b~Tw&U|$W|ktGLKfjJ*JXANv6v} zk;4xOMWJLKCS4myrNS`CQ`W2VbVmDBE9bN_?ai|1dz!RQ0InR_kE3GER@K80Rhl8i zb_hbY&{HVY>gbegGm_px;~L_Es(yYx^tjm)g`MoUFKL70us>v@)f-vfVgtNf$opK?bU`k!TjD*uIli3R;4q! zSl-Tgh1<$(6LBtj6&9XkKRY5~*=}ZsPIH}CsKtDg*QnJ{8eY_5#)DpYQN2uRqrQlW z{dV41N0sC>m{z5>tXqBP8o&mUecy`ErfDZ({CMjXX5iIFZC0#t`JIn<#x{(3{pi6}w9;B7B#pN^%2Yn{w)FCcS)D-6rIo8)XXm>0C#I z)q8sA8ZxS^fj-qHEFP;XSM4P(YL`m~!j{rNn0?^mrelXef}tpIIMsrIhTA5LVU&`N zanT@c@aP6ylRB&qKP;3aF7CG}pSe?1O*C$WVb~*&`R1M`mSVC|J=5fr9#3r7GAQnR zt%<3Ir^h$i_>)<>3WV~qnDEOfg(x`ZY&xPe39!ddj0{}8S`Vpok|&gO-H342&Cdc6 zrhEkAezb{~Yy$lPKAU3C>?J6E7k!*FFl5Du$vCu6!XOuqVu?(Uw{(e&W{xII{Q*uD z6LE-X_RT7Mvgryf9B4eeVjESKQdT2n0wVlxZlw02=*meM(%Xp2iJmGfoI%$lP4g{j zdT&|zM^+YDzw_izV+T}2p*Jzg_;q7Kl51v(k!|tjiPY83WPBZxxtHGa&ayFBT}3G( z;F@kVmCV~!D-YE?bR&(DS=TNKF}BA;_b8fn_^W95)`^i{;@kzyi7FRY-RWP$og4sC zaUl9Hd_Pl>A&@DTqt^P?&Q;)4leKj9qA9lJ`qHaSm$Imc*x-ZJ^FxPQ?KO0RgGpOm zS>4x!n=)5BXP9;4E8?`J)M<*Sm`=gCV{RUf)%s>aL>DS~d-4!fYhc_{0tu;P20t>L zcQXs+Goz>h*mS~7ieRzoB=N&#Jwa_9v+^EgTL}p_?yBexn@OT(IdaWJmK4bIJu`4( zaDakHrppUr^EWjpZ(=W1SP#IuEEB3G$S4Y`x68Cg_E^ND2l)Lx*rtD0MGodNk_C2_ zNo+AnQyhu=9M{`w#SseD?2>9nz6D!m=9o2Bb7w1!x|NEG28=h+xSI5c(df$Dsb71Y z#pe_GI+kayc17c)M#WWweyIr#9S7VUsRn6*TUOA z|0PNL@arC-b3=LovP`Y{z$d3R6ZjAz~ykgt6Y$Fn&2&2N$|<<({-Z zeA)Ii#WPV&NN#HuK7ZRu1izelO$}+U*IxMi8^+Be45KA2k1}TFeTh zc2@mp*4E=Uw`9QMop0(AVW>+`82;ogdvINHrIFAYSw^aU*%Ipk_*)Xo2h?!$)A;JE;HOrm$7(rsENUv<2FT4na+)Y2RwV0# z4*Z%?fk-<3oze1iyBB5|{5$-1Kuxou(QLCm=?gp;Sje0IJ_HF=|5dI|pT#v`V*Hh9s@xqMU9yRPq}67=(n^1`m206DVf7Hbsby zbOsfTYc?Wuq|!9PQqxx)Tj#zQgfj77BDKW2D;1{PsD0=nE3b0;zHy7%#h69|kDL?^ zq9&oM`s1fx^s9A%F)4y%;Am$&zk!&$Xl3EE)7?kU=iuvFz&j+#rGQwWf0@$fY{^|) zi9rsG(R^Y#u>Mk(@Vb?y&D-l@t+eba6meo^1V_@vVqDRvDnzUFH}y(1sxvR7SgC-* zX4h|YdJPu8jG&i?q&co56ksu7BJBuO^n><)rs?jAcT zw>3@j7FX=9;PDT^7DPu5$+xT(N0 zOqb~&sk8KPmy@QME-Kwuq*-SvJ2=U^Gz<)6B&E8~+uxUJ=<_ODDxDet_6t>yL}n7_55nNc^UWdL=w+K z9;FqAG8Zn0mv~omq9sTNYDQO(7LzQ|qfb;~h_SFZ6~~2r$d9!0;ICr}1tRyn#x8${ zKU!^yWG`e_SG2k&UK4Hc)kC*ih7?`g=uzcQ|-n^6diz?-pQp$m)oWc7%_Wi1t z*k8{9;*kdBoNXxjRj5AM##QYm@p+x*u_ynDr7P#+3)dKAVvl(-R_YlOWb8 zK%ATnJu(*#XU^lmnq`hOi(_OL#I!OK)@07J#+pToG)os<$cJG~$V*S?4c7Ums+5ms zT$78tSpdU|Qt(fem}WlKW-j*WR2JhLp&dd5IzeEMFzrmR%2xf=ehs+#3fHO!(~tyr^Cvl6Y;tXrvB3D+?64G~&B)XWZx!ee{= zrxI_{Cdj0nn_8u}Pr}N$LT=b^KDzdb>1@b3VAq{4{Cd8XtqJEBwON*;<&6R zWPec;#8l}FUujDY{#^1|{iCcqG)>}39Dk#wyrHHeOWB~xzPc6#wehbmi-1xy7s5Ev zV1!m@Mqe`n7g|f&56yeN7iyP-n3{XW!vI3RyAzu z#X{Cj2%p;MK=HrX9&%qjo`L_fV#Gi5+iQi3h-Ih1uZ$0zy~R^hS|~hM9#%VTArw3x(Cz zNUJPBJ<**!-SfrHIHI=;0q5QY4ZxE-0HP&=de)XlGsH|X1QkRK{&S-HZK7!qr((pA z^v9DTskRe`sz%`u8B&N{8nFv5*6g5+>VLx`LVygXOt#l@%l}}i?saOJD?gr5*61Yy zo)~2uxFGMBrc<}EL6U)HWvg*a!ybJc$RLoLguG}pxMnoxOF^`tiv@`#!XP{nrGa)p zhRUT6%VST=0nNAx-~*Zk_nO5AW`HpLgLdqSjkTPTP{?LGu~=_5t28~gt}}wFesOvM zc@cOSaG7-pAohjWB-12AEo22b@;Y48RdYqe+G4=LFo&wG)SxiiqYHunPn6CQ z3FS@pJLt%4rFGq1?%m&GXUs!X+G6hmi~mLZ63 z-q4loUF;wF`uv6#hW7jlcID}#Dp6Ya#csFquSu~;v92|Ot(0smE}(_$yTF?v&sWBe zooE1%y>>d$$$E&xwf)+NXb|yen2}I>@@S}%P|1=A%91dPk|?Z_zZxZxoF(DzCDEd0 z=5Wa>W|Pj?4I*3(V&IO#WR9Zfjv{Q1V(} z{{M+|&L^_y8ZV$0L(HpG#MHb8h{~#l7%GnlD~}k=fC$Zim`}@PFy5{Qwv&Ae+iRhs zaCG89-v*I0HP17D%%0ajKXzsjq6vu8P+VKGUBbfM!~P+u#NOA^04!lCl6Z3#Shi|8 z-4dGqSpLYU)<vg`F{)xPLKAmUHSpDsLR%%7^Wkz3-wjl5Y{QEH;e0bMaI3 zmEy6QBCZsrpFY*yS)Yye){%A}s%j6bY9GvI56xyD(EOF?0C#I2m?c3J*y6mm-l1eo zLw^3x-_Q2662b&5dmoz9=vG*#A}&`AgXOfCp-~=?c$1mr=QIwHKu}@{CnmB}Q&SlxevbXodqL$g%d5`y&a^8p`d=UkwOQ-*ERE&S z2A-Q!LpZ1~B2s9$iFR1{KGH}C!2nVb?2y#1zhYIn}{2B7QSkK~m;bFV<|D5k!=z)C}y!oFsomnsLm&Y&egYzCQb#J@{Yrb!; z9W6OF&;3B$drP)ppGG}Sz_jAkFxL=1s5-${Q3{o-puA)gIR%x^ zimuLbz0ayGjG6g?S;PZar2AQfg;)fM7Zp1fG`$v7^O-danN{|gbmQ>RH6%Syb|9yGi-iG@*g`Kc?+$gi2_&$+| zw`l0DC3hmhQ&{{Mk+taHu0wYs0t2aI&(EUqw?RTvqD<$pV6mW{++}qtzu0D8=z$21 zTIPeuPAHGcPQk$1z=8Z@PB!iM@Smswu#l(UsVh{6+I7U?(kyhMiCiSDM*2^?f3Hf^7nn)RZ-C zmDI38>Vxi6e7QtTvQm&P_;TM7h-E>a zsHXJ44ZrstDriS*;gb8ma(>8NKR?#>-*9*<#^t{%zToJRkH+$VWbf-qL}6*}I~+*b zR}k?l5h{vXhgv4G`qr(<3UVAmEEWY6ICV`Ghu|%SKadd2V7vEQ37a^2PjQ{$Z5kF4 zEBf6k3cO}|o4yfu`e{YGMs%4_&jEwHrDa2pfx5$;%FQb6U^`*YHOJVD*U#C;R1wUu zhHRtU>Izs4mMqDDJ`oil-|+15uZc@z6KBZhO$=BR4M!pI3gtxf-yt=@t!K+^K<*{LKgb@Vl<1qVA?Bp9J`HIbK3}3g$;9K-=Ky##FX#xWie?965A_(^f4Kr z=fU1Kp4=;k;-DO^M2{fRZ|D=cRsq)H2%#DR20Z9)VwsB(4u?rrtF^rV-Voy%07bV< zsPq0Y>qU4bqyGYteL-e_Ap5hH-NW+%xq&Q%Bt&-8B?OLN2A-*r^GmBZ--(&+97?+v z{Q>(ki|*`K=Y%Sx_(=g!o&#JqeN|&v4_fx}{Q$Ez9<}I1q*{3d&IcV9o}J&ERdO2bmsRN`z>~nU?e*7@bh=^Sh`4vF``$UHnve9;2;wDBlBaIt{24 znw@pr3Q<%FO|HhC1r^i^tjIg+4xk1GIt*p1Q2+?>3=hQ~u}w=({4u`(-7t0ck`d#P_CivFX+mi zA#`@I=(X8QW;-BFub-Bw(~d(-TEWc^Aby-Uo~q&3G&XmeyP(s}Vx6ncXpLf>>U0K+ zyWNN~ZdJdgMYiwX-KXRbj}h$PCI>JihPFQ&vTnN{bRyCotrGTEN4|MG_#jOfV`E{8 z_;^YmRL>}UWUii;Pb7SlujVpmuifa!K7Vh?lPn$-u{xcwZdQpss_jnA9JP1fxufJ) zRHuh^&7wM$uXiAUQ=g|w2SWk%&?lGr`syRrXC)#sF&nrm{>8XfZ;q~mD5X(gdYH_1 zh?9rEc_YKo`oKSgJ%ruGKcVQO3sen457gc@*Qe#C-9V~>x9o4- zJ@{k9PJe-y6yzz0zzqOs@RRj$p_Q>_`|k$gzaP@po18y0`EE76d!t|RwhyR0v*d2& zd3)O3ux$@mIx^62wX%BS-Eg80eAw5~J&fTm(lTp>n);VkkcvfxE&^?+|YIo&SNH>Vss5dDkPe@_Vd-O6mhj zft}YQitzj1rNh_(<__Tc11a0Xy8=|M2PhrDKo8;0&t(SGm;;0oz#RjrAV3rf8oNXH z2Vz&z6%{W?b60^K6)s3yUr`MeEl6Eo0Rt5*NGDg(>`_QsU0Om~zQ?%}Js!En+IFB| zuwZ~>kfd*5cmPnZ7ET%*5kizx;<7*>&hr+j#2#^egBbqc6ZuY zxvAIJnNQX@;F>cARG#V4zi&w9!~ec0?o(qjjm4Xd(QyrGL7*wY3>blUW+9{{;bY`~ zKSsh9#6wRYsJ!oFwnm6s36Bp#FBqM+xKl~@jZz-sZRTXtQrFrktDtvNbBCPX!HrLb z5_5x1OKB2w{eRA=HZ9M-bmqGDDqQ86i&K=QiS=U|4#({U+I34t=^6inRBF$49aK2~ z!&3fXp(YqXDKja({uU8Bg!|H!!=tn*8Oa^t`xrp)7^dPL1l|~8(Hg+S8790KgtHPI zETf+EpO|Wpo=Aa-2KeZK)#`!7>4CH2mmD4N`RG&i?6KtT7ux7`(&|&s=+VFEm$edz zUQ|yCN{v5FO{m3;_1AszHEjuyV)ye}F}NxOJn@4w^8+i1yo<~B{upBO9KhxtCf*o? z)f(c+7(l!jrnMRbs~Ekb9^050Ifxh^A^F-t*4e?U+ChQS!(P%uG||f_-Q&u^L@CQ- zh9YKTBxXS(W+ftSc#*(A4OT4*>!uN=8=V%o=ykU0`$;~Co0zVUo(znbs=4WB>*yuk z=;6TWrM2o|oaiNq;OBD`pkn5iNf47i5EUg6(-HM)zl5fu$rGveT@in`x}sJ?!^0xWrjk>yl^3JRxY#X* zpQcJOnJlnz8jU?n7iihvmeoyp`z}^3*+lIaPclx7mMKUb4}mMsW>)cw!{cE=FfUCA zILwSeQKo@_?Qx%hY2o;{p$AMwZ1)vP8Qog03Gm|GHRKqWTvOUFXXUPj?)D1rZ%B#Z zXos0e(WxRs7SRAJoYwI73hw?$_FZRu1pkfg>lcTEo?LXM%DU*bbAabXX#d(lb9R;aAI=Gi9!c=q7MbxyQtx|+Gnso z3@k(*I8^o*K3EAdTDw>qwp5A4nP!#I^>XQmI?X*BMMne>sZ3CLwx9Q zqbG7>U~;3ca%1RnqnBr6{BvV?b7NGSzUBb>btu_Tkb~6O4OJM5_BibOR@WM#2d`bA z+Hh=rge$iLd7P{CJdm^1LGY6eCd7i&Sa8s8>2J0`&)?w?0h`*0N-knjf}$#b@yOf= zdLQXve&vLl?wjwU@1gHlzA?U4zM1W<>@{2U=L*}3@m{963l#;b9nI@>OTNmPS>AVP z3tmRHNjHau3sztm4=*x_5z~(#{9B_NE&(YOQ+e(__?D>plnB2W37)K8dMG)4j9_;1 zzkLiY5P$H45nW;W#Wl@e5a0*B0s8-JEbO=K1Pn8JM3ovr31mY{D@5vyzz^9&a~LJ6P+bI#w)}k zDh&G#%a(YULbdh1kM4cSRKgj%Z%NK4^9t32;Uc&s&IPFNfW;#f^bHAnml zX+QLgqeAj&+$sBvgZv8ckc1k?sj|<8!MQaCcg_}`W1q%;vw}OlV3qtyqqQR0Bs1Q$ z5hE}taY~Zb$ykHraxW(Jh;rDf_V_QG6bD*~Kjz$o-Q_hiLvio}7Tu>21=*-e-U@O7 zKG}AyY*0SWcRukTE}>(KTECWC2sx+P7UV24?kp0lJaVEu+F<4;W=RF`z-6I@yX34; z)#kyPa@FUqVPNEA{ku5!rRB4Wbw~6Y{eudAt|V9cQeFNKuGTl%WnhET(c%~;%Q874 zSo@WMiiq2C8H-}4%;9gj$EDweKXVQ4sb%>VX&D<#{(ZMaPJ#-Ni@G#iOq7G zO1y`1t5U3?@iJ9zULLB}Jq1}o1vCXsK|)MRiJ30Ci1&f8$>uF}l^MfiLCMi?;jdSg zctHhJr6-^=nv<}Ouw%PQYuZu=NksTY9*=aS)q`~9)H?BG`7juJNiuB><1rkqO6jvl zN&$;w<+!=kT%)RszlVt=N$R9ZOCWp0$n(V&NfuDzhpJaEQ$Dhg7$kG?iKQ{3)3QfG z5(xrsN`g)cf>I3v9*%9jOP9sD~*ldRZ?9@Gb@=GI~L^hF~{_)?MN8 z_Y^(-vTvxq`uJS;-nj7~$B*#)?Sw#Z8kpAd8Snbw37l#WllCmIFkdi+#A96C&<})o zQ7ld!(%CK8@MTvf_v~py`~dj}qxV3Py8#E8C}MtcT@Cg0oeaYC^o;fNSWGy^dwS@h z1(`C9)yA3e#hGdtnS9BUz`%kX38=yWq5S>50x;p|=|A45y?3$^fPsg#izr}VBJKt3 zsqHF~eG`Cy;Q=Q15omvOL3?Wf0r?RCYBu=H04$JC0B|+USbnmZ-Txv`GIBDy&%N4z z4+cKF--jZs58oj$Nk~Yk5)3NA5{3$B5J)LZ2;6|jkb&#`Bon)?IYj{bY6_r;OlM}V zIde(;&vM#&-8p@&>GF#A9sul*?+p8irgN$}KV01oIC@M4z11Ea$5O&TtM1h8YLc=q;nTcy}qwWBGAo z(P~c}l&h@ki77?XqgB(Vs9B*} zPsDd=w4s^^Lc@s^rlknr{Xz0ne$rt5n8sQb#%7hV&xEBTsHK%PHBwbdgpRRERLP)L zty6xD$x8^4wiIk3uHHa2K;!IE#hdjGIH>nM=&y^(baLv8i&a{%pv)jPeSRkfQ`1{h z)1aV9LH+uvyc$%hmwLq)qRi_o27Ud=U41jOhhW}Nt-%SXbWpGEbyg}XO*J({EDe+= zZ43l`k(+FN`u$1zxXU0! z=WJi)o8?)$5y1De7mpI4BSZ^X7R1M8`4fq{GzRD#s(Lbwml$B4nf|aDgE7JNY_F`X z_w{W^QzoXu_Z}$Qm|k9%Kh!oSYf|mvb_BVc|LJ*}CKFX1gw;*tJA69-XdiKwaS*n~ z^1;O%l7_4<-^G_)8}4G^Xr>r!fluzVwm7W)`<<4Atd3~Jjy}pg3Lk;HGCqVxrD-B2f0RE=eqLg6wc0jP%i#RT zckT08jMbiEhge9KT!@h633qrpO)p-W^EP(qjnMZ!fER!A^lKB|uKzd@5-n4ke6{ewg+!Z&XTZFK>dn)^gr+eMgdT$__?StIhC)wwD82p1P z#Ji&9dC0GQo;iy!9}wN4mr1e2RJuRLo1kMGln9uJF3#kUA zTR7$~H!Zq5ZjnI^&wrl4QlUhDCxsr)wzVbo;jG`qdyJ1*2B|l;i?;NFfz^R#4ll(J z&yV+y0hnSPBTwIfwqEB5cdfsD3~fspzSAYlrWQ)l=8cU_v5GF8TzWrvGuq?7w=O`& zJ}~!AI#*i7#si@84xIRKSDqcboGs>Fo`kON;g=v08{#Z}p%X#mN+M39+^V3=RVEgw zJ+!{q;?50=#qfSBWfGXHb_WlCpUM*Prz{^pVT|h39K$bUIg*@-dGtm@w{Z~E`PAG% z5$9iiDAqBFueG7ra~>QRij)>Yk3BK4HQw z_t7zVnSX2hR?qfjI~xD~;M_4ZdL-IfTFll09BN zqc71O>O!x;86Vf~y&J)AYKR3Wxo5Ix|LeqdNPpV)1zo(mte^$y^vq&h)i)GKh+wbVle0gq_QPxh~+FOaKLpesFDY>njHSDxH+hU(1h z2M8CoQ?zK+Pv<7g@uZ;`8FHVRK^*x86;|U{RE2`1M$?%UC5-76ir61S5$4m^2Wmq) zY6XEk)jH4%K!LrrQ zvT9w!Gc0LDV3nR{-cp|)@8BGcZwZp;jbBeb&PPgJVw4~9lPKz1={ICrL&_Tqqa5~P zf!H1KqH{|{uJOPqPQ8bFLSg2AYH`C`@!Jc7s**)=MF}U6r_iI)V3PK(G6arrI~+ac zZicYyQt)#0FS6XyQYIx0&#$XavDeRN{M+~F4;AS2_31_@KKzw$Mcmn-yF3SOK{fQI zd`ZM=^jp@2WFu-{9|AYsGI$kdlaEkGJ(X18)e06t|JhG!V?8q>DnVaMkj93X-@Un9 z{wgu<@k$CUR-V51;*{^Cr6?u(v>Z8pZ)6uyc7XD|s`#jWypmqPk4_O#6ZYyh0;6d& zh}DXf_8d7&!9^VcPD0?T0vOqk3}-BJNbsl+m`LVPKMl2{}Liz^J`D< zyU(6exPy5gmgoYae_*|Idn_#|^?pTfHEM0FzVW%MF~YmuXUDVxOJ4dZ_XJh|FKs#$ zlW7a?;Z^H}c#iqF-Vi{wj7?t2=5l&%Wj+h2uLiY>Mdu!Hxy;@?2PTBQx1Mc%bv~D2 z$aD>BgW`cj1UXO9HnXylV&coZEa|g}6IuGW1$5sVNGtxixu~7~by@$_X!Y7$Pk{VE z?LM^BM$Y(sqPBp4+LtyPL3xTbBfbp4G<3Si0)V8eXbDbH?mPHaSjfM7`Fv*)gPief zjz0g}YiHI#>uHf#GRkuOf@GaPSsI~^kYIBt#J2r?oBMR^yNkAkG4Oa|dg@*`9uHd#l z^_D>>qeiFUbM?n$qDw_rd~VjO*Xf#glcsKsTW@O*Yc~aDIfLfu*n7uL8cAMtoNgU` z&Fs_!^5#cpZrvU*dV4Hg zkLIm7ko^h!b-cZkDIJ35Eij-ub$Q_}hj+=%9+Oz2mD7sC0N(?s&kX!E z@lz}G4!wwp$_!78oJ1hg93aqqypB=+P;c$BTDq8XO00O0b2%yulWf&X$8Vs*_>tnx z_kIT3gWow7cT1c52tLXxqC*}@yR7=EIU(YMRL^9K$Ce^dD6Q>uqr!3>?3)rMN)&%z zOUo1zdbR(G*A$|5baFB>S!(8=!e^RBfo*KU({Ln>zm%h(ddXeLzN*k2^t3HZe%}b5 zq7nwDL~fi$k@?tB`sXgBE-v;Rhrbv$g8sn{j@7X+ zk_ww2 z4OAP941{IA9RAZp{nQ2u4;K1edkrnqLN8A_X77!=yU`| zvFQQv=*3#t=UbR&z}3Y4lOu_r-T`ilCzrJpGjEqzBJ7%ARd?|S9UrQnWqmz~E-GW#DK-_t;@ z$uV85)Gdw`ZAz>aMftrGMv=#hsOpPxp|P#Z8An>}cjv<)QS}Rn70Ly#4S=mUTR4g9 zoy~mq+Vfh8FT&k7&=87j&E}Tb2n=Q;7m1ZKNxkOs#DZK5<%mQH) zoQa-o=Txt^ZzlWH|C$VO?>$WJVT(<6Y3Mps(pb9x-g&r~IPL9SG}(2Fy5>(jZZp(5 z!09?4V93h;cH6zW-FG>P-q6wMqDmgA4^>6%BAB)(G)WuH0PNU7b>mO_7RK}Hy3Ynt z=%y(D0RM|IaKJBI=wO`2$w+fB_fnJ4sW8&WY;b#!8J(7ne>t(u%G7`Gw@dMNotTZx z@82?2$2WSWon)k#k?S<7L{E{;F-AeAR~Lv-$r#sugY9Gy>x$eXWLq+^yky(ye-5C@ zhgHi*z6Z40!y>-q6h*Gs@=K1g2PJOd7ZYNj%^=;%z4b2m!k4#&kp#j=22>XqnVnT2 zEeFW4xHu5Fl=G^E(|eP^&6{fqI?t%yIhHNXswc5FQ}oKBTdKNDB$&XBq~Rf}rbe>x zP?W4$@plc$5YmuSk3%=V9DRlv=sxZ@v=0y0#g49V_`F>R6GQ&J9~y+tb7mI^9K-%R z;O67=<2YiDjPb1zmQQ@wK%AQn;*ghD?E>L~? ztj>CWxd?Y8s!u{R5pagPf=jyNEswLy$u}&$Fv^cL2_n6l!1UYCc}w#VOdKw_LG3OL zD2R5N+C=eP?=0f`WNa&xq^;ifkbPoMEYC_rQQSQO)D>A zl7QTg<+u>Lc26K7I$+gs;rT-k`P!Y}#UeR&mO@4M#qB9mM zBB^(*zeV_vw!*bO#z&q*MH$UMxxBa!%C)G6t?6LFvysmxm656>&tr2uzqVcKMiuZ@ zb(ywLj8%64|Nh*}Mjq7DMdBT}EBdW`-$j73A%aRzO-9)Xaj(T6oeKlQl&*iLlo{$7 za^Ff1!W-}grc`=hz0Hy03m8+v;@6&P+a820yB-~4vVW%dHH+^QqP)Vl%B;LM@P>rF z*nnocKcp-r$Vti)xg0)XLzrrAXP)d+4sxULvIABtOF<%4P9@P)PSx})P+2`-e~LzY zN$mJ(UMqrx{dSq+8d-1vY?vh**;Z&c7;QnfUaJdBlE>QRw5SGTZjvH|@gD<0#Re?5 z+tCx^FUIa_3>)gI9Ow^%NA8DeyAL2Dw$7v@pAeQ>q4KANVk7CFg(V_E?ar^tcqoYf z7jrm_#}whDf{w)whc=_Gh0mqzs&&1yE85m74vC3Acn(;I$; zIoK^Lkx9g1PKx`58w@amP< zOZJQ%x2L3J_xQ1UN(g_-htAmxnw_Jw2bGCvTN%l4M|8Dwi@7CGD|BSMU#)riYS%nP z8EKKz0YMikDhOI*X;wb5vY%-Lk+;UoWa@h~mvNq=G_*DO|DEj)Ky~=Pw;yXo z3&RXcw2^Iu_;Y0f8I>4;;{5LQ?uFjGh`}kuW>3N+MrlpFQV~17x5TGme{G_#Ph5>A zhL4gE#xr_yAu*g|T_eKW;$F>&Vq7D_UE*E}arBjtBr)CjJ?KPpMpI*jxmIE?*QERC zm6^4OHx|?Sxir;BoK|+v7f6}oT8TYP_VH-#^d2IE@}-gSsStU)G&wBbRo(JHftY3} z)Xrjt@~S*s72l~3d24Y`D%-b9{Y)#1xwLVP5Z{mV=G{9J6Sw|V}FzAgp|jqCkZ==cLS+^FVNWLy#N z=z2z1-fWl~#-OQ-a9`y|!v+-7szZy}o*7i3HD?6atLcMA(IN<<4nuOx?7g<%f`5;r6&1%h8jEBY_1>wT6%0#mV01ooWEC?iKETB z=@YjTFHjk%%r^utxG@aDc@>dO#5<6^czWCh)pHkOBPt>lN@fl(Vg>*zXx`9wAiVLq z+FL6Z-JVxHZq=JrR~H@MIH6(j^xCwbY_IC^W1G0dS;tE9-kvpm|Ij`LZJTBu8~t@< zesSIBfyMqKYo`~#xJL5fuE+Q-$#}+6lMmA(fS;w5M5vPF#;{r8$Co$djUPwfzu18;tG1>MgrBr+k^C@_k;+2j z!O+ma&`vQO_2ajq3jXdQK%h)+=e-Dr;Gt(SQU?wgFfcXajQUIUJ?8}cN-nP`y)zcej zdmWkbLv6;c8RM7FPi@obV;C70!VlndqkNW=RlMntUy zl*Dr?BjS=fBHqd@V|wd(bUO!pQUh4!bTKNF<)W+=|9$T%Y2fgEVwyd3)P zq-Rb2=)Ia{_i-~+7La)0yc`*Jyzy&&{jYCy@K4}Ipe~+p!&uqL>#ecwl z%XB)NY%uoL93oX!bn2WIzQrAyH~ev_RJxr$FzB~e%iL_ z!K|vb=J<+?0ezi@2My=H8FDpulE=E`mKKQRFJ#w-`qvbWtO*RLku>Ib_%`wHT|B}+ zU%v41*4KVr=oW21YE-;xRnzzouXUay`}Cdt=dsLnMI*P4%H2?uzcG*GZiQXm+zshA z#uIY4Xois}Ne1R%O^<_&>4r<9PN^^l08W4Da!SvA$s{m`DgzZ9P}Ud_x*=QO(eua8 z(wqpZT)k7^Fu1;`qNZ_l4LuJ|2uO>hN5L~EEK#^dCPoH%h19s(28SmF+I(_c$JLjd z5BE2gq7&xyaM;gT_w*^5yB{18D;@OsLSx~4*v~_D9JNS|2a=QIf#$}@95qV&3?PTd z{fvkoz`N<-U1w6=u~rJ@%5G(7%@Tv$pn_PhG}l(by}l5tl{JO+(?k7Jgo34mv5BdP zLwB(;0UFjE@o_oJX!zR?W}afy?cD^H+6*v zYwe3m!=@!&diP#j!2k(oWfP!WxsJ@?VNiSh6EY(|AY|5HT1#u0cq^buRcyfvaz6!x znjgGCMA?Fr#5*7)$i_uR^9W;fCZ6A=Yv8e`JiIh(=-A}esVDf`sg7o!`p?Grr2krT z$5do>qT)*GXq%k!@bWz#hPrIq23rR^n=SGoRa0$z`rU|99eq7*)E2p|z1@b<>8~G) zjs9YgQeIJMWy@%u4dcFh<=HUbzk4yYaELhle_y}Sa%y<*CRhP168F5#c){|h*jg3fOP2cN$_^&zIJ!hw`^ z2-dI^pP(+GAww>%E-|G(CU#!ooH@zUBm5^st14qL--Q=HSh4o&+BLP~S0pU^ z!>sK6hTxH2!^T8JjSu|9uOvJa4g*JqHJmP;a&qd-0|O0=3fJT}T$}=)C+>AmrqgG``bB>Bz zCbsP?O5JdC-r`&H`tpC8&nzClGC|*V>hj^u*Xrgy-Z6Y;T+ED=z_Cfru`|u$_9F9- z&mxzr<&)0TW{$7>ertH1SHoA!R^6X>D``$@%Irk9l<@({bA~g*b1`w6h*Jm~>2X}A z9?Jf%p2ywS`|gJqW(-T^KStxtg9+_Em4sQU)V#jp{#U1j=_@o|zWvXoBbH`YENi;G zV)^aa%co{7Osu5aK57`X`_Ewa2cq5S z{zW~mRmX?Too>XWiXVbs5_Ia4Tl0*Oj#smoGlU$0xxv3=r|9pH{HYJo;^1xkHcAPnm9-b7t&;rj_TePjM%~nFD~srwjH1KE?5 zWHVCIgL!j%sX1M3rE+r%1xx^P;EqpB*fk}7ucE*mI!_@*^PiWv54E(Bqo$3=vu=;;L|6u&*aa(|w8c2E&AHPpAi9qOg4`xSq;FrlRM&Hgcw zffJ+CQygsh=b3~3Y*J!8;~c$RW#*GkRpc!W@bfn?jN4iO70CRJg;6zQU8DK;`wz;W zw)AR@fk78j9yZhlFEUY<%*a>Rne@jC0?mEG9Rr3tM7b+Ue09mXy9ZW}U%*E!%^_H8 zmbC%JKrf=!$0lf?XxQ0CCS`jqKY z(`CZN{AzMBw=YMf%Fb4)a^TvOuHV?-Vdb-?s|lUQT4|KLCyg?K`K&!In&Xih7Mbgp z>#ryX=DOI%_L+;XPp=pglqjDblb=sz{m`^|b(Vv3d2&FyhwI3wMaT1t57#xk9%L6? zlx)g7YU@zK*KoSrWI+z|g@=Fd;IaI~TrsyUy1u+R(*-pTUau8OOzF@Cb`JlPzjo{fIuBzc!59(37``SZN*|0J z6c#3A6O|=pjQ8}P82==(GGfk5{=q5aiFBLRqC}Lsxt2f5Z`gI44{m1=-2;}x7&2Nj zgoILIei5}@y~;n3MYa7oqK(K}4t@NDK2SZC!%kX$^(t!RAGAr{YI}By^jXS3V157V zy@K^Edt-Wtr*nz5b&0cQ$n-bLX64F@a}oUH7Rz&I{Wp6BNXc4&1Pm|owrN|*V+iH>+^2|I*V`w0O z1*BRf4tgHZT@3aicXFJRINgHlJ^^B1J**h|J-_AY%o&eS!JQi@>3*$!&bq0=)6?{H z2CS=GaI&QQd_(b~LHcJDK9LDlY5Vy7Z}T0;3k%O6i}zC3*V{#Utv|Xpd$O~|G-~;tNM$5#WwMQF@>{kuU`I5L$p_sy2K|k>&VhY58o*n zbC&<*;5+=oQ$+)8`y97)8H5{S7LT1!?;F>cnzbyQtnnvc-#SS5wJ5r;B>^2lX%(f( zKDnII(UdL++Kw!59RpmZFi$8`nD)=Sr68H#5Z$cr%fRDeVuR3Kou z=zfRn-QOqat|IH>C;WYMoa_*Ew!>sMg&v>$3_oa-I!XGIIu##$g@*(w5XO|pchYCi zb;xRf5$l3)QV!Dtjae$wqcoD^m&|wjOhvLN)FGl+*Uc)!B^O&z`cK_K6 zJ=)UnLXWo0M&Ce-OlU#O6t)Gm^yo50`DZ=bf)(nIp*OU#2k7|Y>G>gpJ zlHvvYe#&0z3}i3i%in&>dwlmD8TTaQ{rk9R;x9W=JvG*RULA+=^=R%LG>@;#MoVv? zC4A)#zJkuSZ@3nGPMo1Fop$)#-Mi3o4DJx#;u7dc2st1Gwz5QsGvN2~`*xyi`UmCg z;P;{IG(zq`IVgKKzXy%n&F|y)k{tUY+*P!2wKRtusNsO@d!mSy_Pi&Y(Zh)R{D|=U z{BZIbk(Y;0efgz&0s<^A4=~mO6=<3Zh)vGIJ<1NaN71Jls;H~nnAqklYPyYP@w0C8 zjqDw~<}+l-KlzORKV+cZf9n>p)E3mhU1FW-856Av3l&*Ns)R#RvN2n3=Y}uMiK$QV z2(tH6p>{TPNp}3q1TTMkWei5!<{r!ph;ekt$eMF7GbF;rHYJbVpB&{DO9n%1Rxu2{ z^SKGgaf(bAkWb-WXbl$*NHrjv06EG01fIJENDUyX$@&EMLM?1AAhklDW6ZDMlY4;F z3CKmb7iy810a7m@XW?FGheQg<3_w-_vIU!hre^_Z0AwBL{v~qY5?M@U0HRUCmZ~SS z)4^D@!Nf$W%JLF zPWH3DcnNaYxpB^%%{!3;e{1LFIdeAd`XSis9vRKfR6<6Rz-V@4G&@rq)`$OW zJc{LyO+?OpuJu7q6ZqpOW*mQ`&qFln%8{MBj8;qo-$72mHsGc|i%QD{mqTt7A>C8Y4Rtf^pegG6 zCm=sSsS2> zNn0_r9e0g)bB}j(i+6X6cLg4ScrhCxdC15a?;ak)Cxl?=mp&gPFjc~d8s&+`Wh@w8 zvN>ybvFq^o#9ZSK22R>IGJJMv#7DY=n><7F6-F_sgW_`1@nZj}BMK&X>F5{?8psU` z4Rn^rk5O1fOd78KxN=z12Df;(0^PoPoSv^jp#+(tVUBGBnf^1qpERGFFyUOY=5K7i zhkHS6bb*IQ0bWvmzG?Oa_+awvrVC{URMqhb)1y_@3Gvk`;E{;$BYT;)4vcV1qRW6h6>)=xnt@)KVdJ@dX&n-QUX4tRUgeO zYe9+^^b^1UN}&S|s6A9>_N{4QL0XZs%7O1tjT;tR8iUi*zIyN74{dMtPt6>W;}YwP z3{|6jLrPURINo~VDe1s?e-`%-@aP&CQn!EXHZlr>}Bl5?UX+(O-q8?6ef!y+bx zV0PI2{H;gd*z7tYJwD7m!rf%%(1NKUkrP5C5}T3Ze8+7_!$%Fx!hPi7!_4Z8%)^v+ zQNzs1ITkw;+ei=7jDpxnru4%$pX=VdDm~oUisv*QnL%r;>`XRLdWIQ9bCmANmAPDS zCq&f42;fVZEIXWf#8lWbyA@`okJ z_QSX(Y$clo&d`K8BLC}iVd&=Q{p0YLXk>&cV`O4cQFwYnNN6VhsA$Ki zv70i>GAb%c-efC7r^U`}(bY4$Cw8-bomcRN56W%?vc4NF;~7c@4^)+st5FtLxW2U@o2(g5eEn&GLl;=29Z z4mKL1d3KUcbnX38Sc9}ZPp36{&1d@9@Vw0hX-%oRrwxJ}W76~nO;f4LL*G~tkQf(W z8)(Z(5_PRITbfp$FODdWl-tj$2#AQBp4hm1_3(gU!{vdtzO>dC0%9y+{j|>+tH2a9 za6JDuUaR-oR`ocB73H)7IsN{Vb4D>pO|=7dNx|xL*Em=I*rYk>Y4eie{hZ_6GgcP_ zM#cL1#YF{qga&(g1qJJdjF0fl2+-9t8W$WkDj;xlNXS?tJ)OXGuZZy>i-NoqAt4IS zU^Ld>&CSox&CQ?M@hQj`0ojq8w$~txUn+75Yos?_BL$gerZuJLoi+$`@>JRB4z7$; zO%6?7obO#VF)D9EzGI**W)p+_6JzxwrbNk|0wyH|sG_P9)8{4)PTM|r)x~18*FMz7 zCo?6$Kbd|$xE{ZWkI=gi`YnhGa}stay1jkfwQKb^mVf^F@*B`^GK$B0(Vg!57`#_~ z8Qpp9HPB=Ra~|)-<6gdVnt@%^H?Rx3wr(B&c>Q{YaO!#o9cAC9yBzU^f>i4?aZ~B2 za@!XgJs{9?U&3&-HtWL^k@NZ6RS}E!O_@$VEW~pUl-im;Js<8cT zQI1K8!z&KV5352}^CM1tm|gXIEnGLZ>j|36bo}M+TH+fY?+d?%@k;Ve8BbPN{u9*5 z9PGZIFNywQF(9{jE6DI;@G5*)@)ee$jSPb~0WutKLhvmjfNTKX}OP?JgvI3BA0of@am8=DR zQ<4J6E&-X$-otyjnSksTkQr<~-Yda??CHJ=C!wR#L_qcmh&LdW6xl}*VpUv<=CY;4 zs;D=s;!^qozYMV}nu;3PG;O;Aa)%#6tjI9ZU9hJ(XsigY8?fg4GB&ea3?uX?=(WdI zwx0G#gC5T%UqQ z(<&W1c1c|P($V7<$HXok8?98ts{DMp__0f4oV7AL zdu3K~)~c*Mg@MTd#U=j9frXuNpnGpxOtx5Z*ULS`o>D9F`7^5b7NG4YeTC4-NP^j$ zQd9A%=Hc9PHk7tMq4Wuf0h=h50o_LFcO(k@i{uW_t&~pT_Tx#?y+HpTrLXY?ID&Bl z8m1tFME-&w_rnJ|xQF!P8Ay}`+7PQSMdMo4i-kr8b#oHej$hQ5BzF!TWRNJ6rRM&S zZm*hUkKS@grFe;Je6Ye|$PoM*J2u-bHb61JYB0B!oggt7>@ZkqKdpJN{a`nb%4Q;Q zBd*FXYnPs3f1A;8 z(mf%G{SP^tPaKJ*6^Vw77u?y=al#y zJ`29>XwOKu z18rD6&`XzP4f}wech;yQ1wOius15&_k4*6rpXU+MGd+B6ulajEtJP7I4_NSkU_l22 zqa#0L{L@-={^0`?OFm>RKC4`d&VGT;tx<;w{Xu_XKcT;$gXSWx{~9FgtmN|3N4(h1 zF6E!C!S5?qBc1m25$#B)=W5WZm#bx-Ymv_Ld|74sh-ZtWJNak8_|>bycaPv|dRp>o zT)kuyq;0U50&bjo6yCDtTu;Dp=XzIZdQWbAChCHRrHvt#%D-Irw#bbPG$-Iqn>+F z2~HB`54VJR?^*hYbg6s#2;xQl*=k`TQD2T2k)A$6Gd5V|AI8?JT7z_+x%Z4MYbSAa z?y1p;blu8-7#l3kFw#iLLo$C%5t2EG- z_W!1vhIT@K%j7ed)M_M~Xtf1wXHCCcpto-vCWUs~%Ilmt)64e`qbzrAb=Sy$sVN|IMjoFo;qieKbLt?J2(O~Z3LL zW%oDZ6N{o3bo|s*-c(>j>^nVG6SS$qEA`3=?g^U+Qd60G&p8p;`ET=1{`~B_r?@AB z?X{B6*{Fod4e=}0!INZ9|C9Jlu8)qcPfo6jiK$D5x{;5MN+s2an4(fmj)<77Qca0y zid1+hZE}nFldQ;^aC+UC+$>e;knm^Z)<=c-muNWME)m zVQ>=VOuQG*Z}XLbnS%iY9+kCEfYNh+Uilj>vWnv|kju=#1QG=ROuP*Zc-muNWME)F z@K1<=LA2!Om2br&t2h`?0TVL-oo5DPc-pPfQ?x8u5Jl0I2bH&N+qP|^*m$;W+qP}n zZQHhOTf5xP{Fq}$GPg0Y(05hG%?Cje!jYt{Ot!~e+2{FeUwVSgPA#X=3u`aReXKU_193tR;IlBi}rpW>i86O z^gU|%gQ?-hlJtjABVGHGs3-T!aA_nd=^+hdjMPup=4h^$W(Df)p*$qj<>Xv`m&8r%7k|dlUD~)^|bhH&MzAW_p?{MNBH2zqmtgl82<8okBmU z7yd(y4XtU;`}=?BY)d%Yyvr}92hXHyyNZ4eC=nO((3-s|&D4xBJnc@Aotf$^Q|+s? zG$+e0G<5sX(Db9VOb@3sU70mG`^+XOCpY>%C?_}i%FL429+H*0yidk$;+{9` z{b1kVIu~b|P}8iNx)0)U*5P`6FDM&WyupYWJprJ%YBuXEc@5&GvMY%G=_O z$j?M0(}{+clPuYe$IP?Ll5y_iU}xK(sEcri9mgVbH!(Al=Yd%=P8P`>nn?%aKyW~i z1b}cdPi%h&Pwdq+o8jbu?e7TKt7$;KPCwrnp2%moQ_dEgjac?{!x#ksfgaI8q7sv; z^1Li^?*==&k4359RoB5CXpeHd++nVzOYk*=(BA(5eJ|?3c-joX0|3}C006MA#;V)4 zZQHhO+qP}nwr$(CZ6*MK7XMEGbHEC)1snipzzy&Od;os}8Ke(#2gQRS!Gz!xj0aP} zim)#10tdh`a0XlgH^4pc1iS(tz&8k?{HQdljyj+|Xat&u7NK=$7dnP6p?l~R`i3!1 zh>PROxIS)&d*NaDDt?IHl0+mO$wi8hN@N6?LKcueRMIFk0Zl`5&?2+~twUSTE_47L zLqD)YtOTpVX0YSzGP}=H@oc;hugV+p;e0Zm&sX#9{4hVyZ}aE;vj~J1(M4iWR8$mo z#d5J(>=&oSbs0q_kVR!hSy#4{UFASIR?d`19(IVGW0%{b_M*LOU)%4FIPc24+OD}9=VrR4Zll}lKDs|%_*%Z1@8tXW zQGS|VS9#PCbkoMiNnN6;yiJcxJ|q+J`&$aS)>9|8L5WU zM4Blrk*-URq<7LUIf*RFNOt9da#^{iJVd@7C=r+wI2KG9Y!I9pTp7F-vO`5f14HLR z50$*iXl1{0UAeD3SKce%L0pg&qy-_M0|v5yf}k9z2I_(N;5K*+UW3ozH%tgqLJ5YU z1wEJ*=7mLJSy&a;g-u~w*cJAL!{B&011^NC;AXf79);)NwV2`J;b!3>;S*{q)mJO1 zjnppcR`spcUhA&)*M@83wdvY?ZH4v_$9E2PH(rf zN81OT1Wv$d>a2A3I;Wg_&L65!pXQ-OX*pV*HlQtOC)%41p=0SZI-jnf8|f~3nBJl< z=ueh{g;_r~jE!T{*gUq3tz+BRK6ZxPW-r{dt`cimcaS^V-R-`Qn33F(T9KZSYthWn zhSBlSBhjBcK2OdC4mja1&&YG~g1jWJ$ZPV3d=j7c{}FzhfACZ76D6Rk=3#N?=XfJ3r zE~K`g+PH{uUW|)BbxN4#$+(nu9*k?{pNqu>1yr+bJV`y%#qO)`xxppn!K=2GMwA5ejA%r} zF2cA)VUqR)Icm5VmK(>z9?Ecuhko4s8u=vT=nix<$uOfDV=Um2n`DS-G?dKXP;#&F zxpmG3M_LR2KIdH8LrQ$7{G-|Zqq%{;ikve0YIVlZvzQiL%5mxZe1}u*5&TjP)Mky8 zPOm(DnRM^>|7Kt2Rqvi*9BPK-s;x62@?m$U?-hmgSvddzc-m~iLx30t006<=yV$mE z+qP}nHXGZvZQFKZ){SlJof!i7>B|<@@CyNffFz+2Ygxkyj?vfv0}WzO#v9DwBsB!d zXu@Zb8ehrXwBbWCbf)$;y?g&*0zpyDN8x)S)cMYu%V5pU}Kw5ksda+na!z0ANsO@Ui755Eo^BkTeE@6 zwxJ4DZEHKK+1?I}pt>FHL=6Vo*)H^_9|P=aH@j2Q9`>Y`z3got`%>F})L|!&?C$^v z`kRBO>tKiQmLo9Gh238Dn%BMIO>cSIJO1IH{^j5P}h)bq0`^FzM?rY86=cK2>#acd1)q zW@)an_)v)4taENHw>yc;-O2*m%D=PC)h<5N6;po81#Zk8eoyw&1^NotA#erUsCr)^ z&$fWA?E`nlw-rwlW`3)e--JMvb1a~3{Gh3Gd>~Ha+Qv@^Q}YmR-~3rSylt<58^l{g z8P5XRP_Y5-#y^*7Tpl$Eo@@N3n=9jY&Gc>H#`sem^UvNEJYWD^tMniQ;`lok=)=DO z?u@@5i};xte^b-p-w9_0D|xBnVF*;)u$%GyOZm$El?(KNq4A$4K7#nw66lz*u720p zOus80aBDJsnd=C+25zw)YBo3I2rU!;ksj8xOt z<$Q&8J4UYGmI&^^6urJ%;8$bu(e^!~(9N|`>f3jKs1OB4O$Vcf*19>b-e~6mp)=S5 zzZ$-@do^CvzF)L9VFcV_7LM_zZ`lI|z{q&lx9ohes|#VivqCJY2SemcLiHl8L3J#c zw9N-m7lizo;w68T@sd5WToT3~kCjZwITaWjM3%)38J<|dMWS4(kjYa;4sj_nCnd{x z8=9Qrg5@cDsAL`)1u9SW&8S%$BBKq>r1iuq1m`f@@b$SUdfsT2;krh7Er~q6q+7ia ze0T8m5{JjP(~%}K14F<}Sy?tXdMsF6v4Upze;ubXc1r6~Ix?OU8E17`@l*OHD<=Gz zCp0jb)}~D3^1#(|kw1vbrY0|+WEyos+d0~`_EhzRMHRb{Dh=zZlK{sII$&ORV!E+u zirONbEI0<`DLzOtqL;9;Wa0jn<`*lvx*YxWM{}R`S2(}epBXD0VR=L_bDSjI$z*nH|2>w;?a4&!)~~v^PHx=v5vKw&iVtLUrck_8>PV) zd7TwTPB4&fx2#X)K)zl{M)ZD(4(Wj>xyUF@5=xTHB7a=Thz)l*qC}Dhmp_-5mO7=BWS{C;k?OD))e)Xx z(&lN-l}XO}G*m(HlFvG6>McMY8Ml3rdP0ah-pSR2J{flx!pV8lQ?LIhB4gH_LyrYy zT ( +
+
+ + Error + +
+
+
+ + {message} + +
+
+); + +export { ErrorCard }; diff --git a/scripts/renderers/renderErrorCard.test.ts b/scripts/renderers/renderErrorCard.test.ts index 466e80d..647f538 100644 --- a/scripts/renderers/renderErrorCard.test.ts +++ b/scripts/renderers/renderErrorCard.test.ts @@ -2,21 +2,21 @@ import { renderErrorCard } from './renderErrorCard'; import { CARD_WIDTH, CARD_HEIGHT } from '../utils/constants'; describe('renderErrorCard', () => { - test('returns an SVG string', () => { - const result = renderErrorCard('Test error'); + test('returns an SVG string', async () => { + const result = await renderErrorCard('Test error'); expect(result).toContain(''); }); - test('includes the error message', () => { - const message = 'Could not fetch data'; - const result = renderErrorCard(message); - expect(result).toContain(message); + test('renders different output for different messages', async () => { + const result1 = await renderErrorCard('Could not fetch data'); + const result2 = await renderErrorCard('Invalid username'); + expect(result1).not.toBe(result2); }); - test('uses the correct card dimensions', () => { - const result = renderErrorCard('Test'); - expect(result).toContain(`width="${ CARD_WIDTH }"`); - expect(result).toContain(`height="${ CARD_HEIGHT }"`); + test('uses the correct card dimensions', async () => { + const result = await renderErrorCard('Test'); + expect(result).toContain(`width="${CARD_WIDTH}"`); + expect(result).toContain(`height="${CARD_HEIGHT}"`); }); }); diff --git a/scripts/renderers/renderErrorCard.ts b/scripts/renderers/renderErrorCard.ts index ba4e627..afebae3 100644 --- a/scripts/renderers/renderErrorCard.ts +++ b/scripts/renderers/renderErrorCard.ts @@ -1,19 +1,32 @@ -import { CARD_WIDTH, CARD_HEIGHT, ERROR_DIVIDER_Y } from "../utils/constants"; +import satori from 'satori'; +import { readFileSync } from 'fs'; +import { join } from 'path'; +import React from 'react'; +import { ErrorCard } from './ErrorCard'; +import { CARD_WIDTH, CARD_HEIGHT } from '../utils/constants'; -const renderErrorCard = (message: string): string => { - return ` - - Error - - ${message} - `; +const fontRegular = readFileSync(join(__dirname, '../assets/fonts/inter-400.woff')); +const fontBold = readFileSync(join(__dirname, '../assets/fonts/inter-600.woff')); + +const renderErrorCard = async (message: string): Promise => { + return satori(React.createElement(ErrorCard, { message }), { + width: CARD_WIDTH, + height: CARD_HEIGHT, + fonts: [ + { + name: 'Inter', + data: fontRegular, + weight: 400, + style: 'normal', + }, + { + name: 'Inter', + data: fontBold, + weight: 600, + style: 'normal', + }, + ], + }); }; export { renderErrorCard };