From 09ce7fb3ebfadeff68da57ee51e672a605edb839 Mon Sep 17 00:00:00 2001 From: mohan-bee Date: Mon, 31 Aug 2026 00:17:54 +0530 Subject: [PATCH 1/4] up --- ...reference-text-core-canvas-before.snap.png | Bin 0 -> 21681 bytes tests/reference-text-core-canvas.test.tsx | 60 ++++++++++++++++-- 2 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 tests/__snapshots__/reference-text-core-canvas-before.snap.png diff --git a/tests/__snapshots__/reference-text-core-canvas-before.snap.png b/tests/__snapshots__/reference-text-core-canvas-before.snap.png new file mode 100644 index 0000000000000000000000000000000000000000..6c7b3c10dbb94f405aa13b6a98c4c89cfb682d08 GIT binary patch literal 21681 zcmeFZcT`hp+cz33jwsBG1r-Gq5S6A>>Ek%k4JrhrqcrIlN(cmkGRg=70@4Ynv>}wx zF+e~?N=QNwgwRnb0Ro`}5<=Ry<2=v%p7*Tto%7fE<6G--=}Puy@4H<0Resm+y72jJ zu<_x8rw)QZpu?snf7}Iu_Ev*HyZaC92kyk|dyWA<_6GlMYJC9sgE-*+7jV5R_^$Eq zpsK#piy+Whkm(=St;6${C*gUh&?uIG6*`}njn991*8JYSeZR22hm~7DD!-ZVwlm7N zoY~j_@pTxtUvF#*t0{)i{QVo0LpzFx;*V9Hx4Dxbd2qMc-WvxTnC_|B+Jr5R%sImc zzh0iT=wlJ}3X(;V^`KS3Vg*>KpNMc0YsYzLQaX4#;;sG}U`e2hq$k4f zjyNv7HB#F3T15CIM)$nyF5vUF`Yuu7<=da`32z_0^?o<-@%rKJACKQW0&E-@C?{qg z@bTN{y^6xi_zVAe^*>_zKTRdRyXS|HtVP83$JI@?!mb$X^&g|2^wk(Fr|I#V z1n0Cc(>aG78cVBaFA_BwF_Be7N#~7ETm~&ao1;%vS`3LSL%Xj(S#RZOSP}*WYd8*~ zJxY7!mD|RcM1G2FnJ2d#SS&#bFm|G8BDxo?L92~s{IS#wPPMoN+ejoJbDFq>n|6)i z(O^BFPALq0J1UuwP_Xe*Uy8Q1q<)IiXBEgs$x{cM%HM%vTEM^pV+tP4zA;ag9WNaN z1PL~Pe`Yb(Rh%*?xa~*U^uKO|88(g6Jc?>o1Iwp3$u2|!|ND%Hw+|=_=lJ^p(EGft z7Ba$GXL3p^85RB|p1UCf##7pm{x;L~kCNSx+$8dR3ace@ial0JCED_>fG6pcWc5>v zOeO*&+WrV~oG7V(z~v_pF+k|Ff`?c27U8>=qZ^B6d-H28xpW`Y+Ek%K@y zXv{J$)4?E{G0lAfh#yRL;Lp9?jL=mv^ixN3EkyT#cK-Mw_GXTqKr3xfSLKMF;1-!2 zyBcL-!0aSIN0TXZmWB&%c?_`@Jl(fyK)b`{YE@0)mVAmno9Ir)YU+ZBa?BrNl%Y|% zRnyUot;|-on_ZLl`PC?1T`dCtL>IxMO^4neo@&-!MXU_MR*@R2-wk3xSFD6S)}+>( zmZZnBG|Z9{?Plg}DZT-#iL312tDIU4OjQShemVytzDjx8U3IN#vSCyfka72Hi2O_; z2`~o*7M$yw>69xY?v%Rf7nl-_8nS;_VmHk@P|aU~5+wuI|v&$r08DTrct@wZ_Ww+WAcG zpaS&!X9Xsl`)8retQ(U5ggZYfUhwVG8%NT0ap5*iH=11{5z&n0I4_^(w3^SOTaQBd z+YgWTNsm)&Znj8COZ%^c`uWvo!vuKkY^~wm@B3!d4CG(+0(t-f?WYU)^J!t-Z+%z>b_rgX#QsBvFcDS4zq3j09t{SpNwP)%hWlil# zDTuX1&eSYI^KY6Chh`}wqigFLs-yhNpS)kHK_^ZbSKP}}1GgBr@ndPwMR8l|aN?0g zW`wsodV-O4gF);zJS(ofHKMl&6I>maFHMuhAef8V)OGP5jzO?De}-l&XW9o}<}o>I5BaV5bjS zk_zca7=YgPFR-c65Bp_KtB;3Scr3n!bM(T-<2S-eBVU$2`F75A*A-tb>sWc3Y}}dJ zhb%W09wXU{(Re0OZ?$NKo-uDCLz%8!d`&(8BHl8@dAoHPkbJ}+Gl-y&G5o z9vq{mAb+|+&l0}XBEB^78(SE@gjm2dwGM2k(T#D;w{4ws3I3*4)!cD0bnH_1>|qu7 z?*^gkbJ#UW+cTe@KaQQN5pVPALwvfVy;EHrD>bK#<V%6IYpjwWY8)$ zKh|y`71n+p=Zp$;f=2~RzEesYM9Jb)6pmA`mQKnLj*|%4mhW3Uz=E`%a~mEk+rNpKw;lQ0{4(7NF~MWPq*3)ay>>F`qD?gf9PBseM`3 z9Bbw6F>$MvW|ZRlGwgw;=)87ze_I7HEDwxoE6{wCc?1T$4ZM1Ma~XQ&Ek=3(&8&Bpane?yLpHf__2 z@j5NJm!teH1T!NMJ%e`KPAuP;&lEsU?LNL1ypt>LlqZr`uNoMRKLTZ=B^g3kSgxHa z^yAud^f)SMmG?kQ*Zn^5?;D-sH`1za%iGL&+;^Buo=IGIO(G<&_EPFk6>KGw=e%UpiMvi@3ChAtX)x22;Mj3@m~Q)f3tP+8sFd0i%lYw3i53k^u*(eJPSAQ{P+QxoT>5+vr|sRt87 zptBiacOiBye`gQ5;X^~^ZT&_wZt0c`E^ZOE{$O0y`sp6=Z%IlZUT(Tw*%Uf`B)O-9 z9_%PQS%zi7j%OR3Z7HHJb;VtXti%NkP4mr?TFZ>>Pf3e;JdxE~ZWPM{?cs~bj90ep zx`mZdtIzB1Gs4yn9u%epD;W3~Jv?1j{!H*gqf?0?QTKK;-=I_Bm7ZY7=8ImI4N#26 z%8SxW&s0zJm$KkxV9X46)zB(E_eTabZ&ALQ{-mTZuP)mo+2VAaT?r?*aMG0|7vvfN zUu7<$a&48u=;2K32X1$h#Us>RO;%K#C+C@wjze30x^H%Ocolu_5pX&HlnY?6?imQ= zx$S!c2&6XLPd(YWP0T)U$Ai2B+a)(oGb8NLG077NF>tNX5e9rT+3m~_`f3cJ##?_QfCwIaW-H%v8W zNlfburk0_tFpgKVwWPk7BdE3ysk*#jJdWwS9?E!D3Fl*_d!HL)dL&(#=75odF1`rg zH*pL&Jb6W@EHz4FonGQZwsd;3tX;lQpW}GnPv#OOqYHv=cgBau4EcmudW-G!OG@k3 zG=nS8dlCrV6*Kus;cM03sfs71NuySkr>C&K(ojiLu~k_>&b97{O)*=k?A5P*B2B+k zXI&kKS$I9@ZqqV05E!;+vYdjv`Sc-6(#S$v(}Qt?(Y{7rs}v~9i7A1p!bVTN_uT#L zMsQKej0A~{mmKpx^P7%$aWC*qJNh$M-FSy}XB5#dt@+5SOOLfB-TO>w9DsD8tK4J+ zBYr45hYskAOVro5t+eSjgV-axL2~!51*%KK2N{g_X-Q)<>p%uZWlXo~$V=fKxYq5O z^VK|sjSNDxG59K*$`(& zBB0GE{MO3JtV5uSc&|QAq7Z7ZBDgO*8I1MG(RVAyfTpP zAj$m+0v-BtB$^`)oht7WB2D%V3q!DuB=fF1kW%uhq40pQY7J`C!uQ9dpI()M2Udo# zkM5{-FF&OIwu+>fq9i3622g)np>B!^za$%DIex7%U4Zi2me4 z!H1NNH;FqIlSS%Gn<#{wn#CL#9eOKaIzsXq=Mag@4Uas-b6ZGUAW^qe9|{@b`wzGsfV-gRjkX@Mrm{3w3z@H zu9}OROBGcu*MHgNMyyKc11Wl|pLZYMv`cr7 zF3%1QSa7#H71eVC-?a%{eCt^d6gT}d5!f@PsxIJxDpgu1zoThL z`|bFr6{2vy!W}cJJ*W6SeaW_IElA#W_tpzX!o!pv$j-U zPbGRI)=C3CQ6FGlqFX1Z(r}P3*(d|>6_U3hzF!|;TZ3K>h1Nzjrtes*>a;L$HDyG!{eG><6kzfxA^9>zg8Wo_AG+;c~~_1P!=*U`o$cG zi!I~k7+dk#R4v8_l)NkHu1eHWhuC(KR>$&lab4}ec78dK8v-WxQpdE(wsf3EAM9`9w$o(DPq^g>fOFc_ZmE%_+M8FPHvu13m|;57DBbx z-N27QJ0|aQWExkp`hZXt(C;R^HQ_C!Fm3?!jzv-5!=*h_tU9o2icYBXs=#>%0lMNR zBnO_Eq1+=|(vqwEJX=4T?7aNzLL|=5WqOe?S#MS#4tkaXWUuf0vwdKUxll=~t;I${ zD9Qr11Iw%&pzeveF9RItm5?P_t9>GOFFqQi&Cwxq<9p-A72Da@qGX!RgPiADDj`Mv(XaUIas8F??Pu9+GqKV z8E8}=GwB0__3GyP-LB#Q(Nx=jWK2 zzl`VFs8J{S@wKP7J=#K36Bp+OZjvk-#1ZLMi;P|Gulx$+xhHf0?&msM(PAj`H+9ry zh_uSMQj`Jcgy!zy(-c2-Rb>5W6YpdyYTDygSaZ~9>9_7Y+l2j~%%!$G1d*Ooum;X;F$P!FCqrjLw+vn3^o6)oGuzyprqJj| zC^<98?Bbp5la><-8I*MleL0)rGykbL0m`&iVA&7$g-3YPo9`BZQEo5`YQ1b)S@7Js z1jh4YD~@&EzG3yc!Or=9}!b-PpBxbrCuMlv${9&|I-h zN0IGD!THz-9WO}r4v5?1H!zRcuqhuqUOQ~RBzvUHinZRHIY5maEiwZTi@FdXhL;9s+IXv{o}M!8%lDakw*J{~ z#2_2Hq1DHByZ4W}>fo7S^3qPDM4?(o9-?F~Z`DRcm8wX;1I*Vm7f8svRdNc_D2;SZxohtGWqdgL^z>=cvBa*tp8#=n{4S&>7rvO592C>}5psQtQjX|Cc50%+ z)$os2ibfZ#qNH|LrWk?q;u*&4%T++#>-}wX>I-%B={juM{4STOTy?9tEG5(nVoG8U zte{=VpPKxgZ3VDq?}KPtRA|Fx({kHVv>1ZbjO}5&UHDO4I#euloYbzHq|F&k5!5mQ z6M)G-qID~Xf8xRqwsgVT)CjP+X<3}hKe9**z+`H;L8M-}Z-S=F)7(k-(&@w4x?NaC zceRkaI-%oMnUdFru*~v*YGZzAb(+i-iJE&$A1ab8j`-R ztac4#BRb(pML)g_X|G~QJ`rM$q0r%57W3R2-ND<9I>sTAu!uUUbE<<;gf{XHDzph) zVoOF@FLSRd`h6D@ikcP@iH(>UcC3afN)8ZEc7nlMwFWrhrETCuPTy%q{aNnSL;qNe zJ<9z-GfGs;ug5s~Bq_&6HC?yuh%*XMdi@;4cGhRdchNV1kRQCE>O@Vx|Ml130YiD_ z>?H4Sp)~kgC56TX35ZFhur*;~e+S`CYzA<#$q3NXqa1&)3fq9=;xuTTx`D0Y;U5=xv$5pJrF zwexMjri&9!TX^1_>5sw-?mGyj^m;E48ioN(8^HLZPZDJ&J%0PHd>XCAoAr%ZwgRx) z&h3|Mfo!7g4?n>88ZAQxLMt_a_l{b=&zS)>)o1}0k9fgDr&)wHXD{8W71oo3(|-i# zGMdhjGPRtY7zuBR>4m$jP$co+p%`?;}o%|Yo4;P9a9JBitTEU%fZ|9;FGEz58q zgMfc5)Z~ZX`p3+!KwNfz4nbQ-wbC96V|?{5)$@NnWpr(Tk5)= z4B$S{W=f2PabD1u4Fs3$a&6(NSbV`mwL$WBV$

L%`2pTb_!QiphR78{Zi#b>EfV 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 KpUXO@geCxDtG=B8 literal 0 HcmV?d00001 diff --git a/tests/reference-text-core-canvas.test.tsx b/tests/reference-text-core-canvas.test.tsx index 2a9ccfe5..28d2da37 100644 --- a/tests/reference-text-core-canvas.test.tsx +++ b/tests/reference-text-core-canvas.test.tsx @@ -10,9 +10,11 @@ const BOARD_WIDTH_MM = 30 const BOARD_HEIGHT_MM = 18 const CANVAS_WIDTH_PX = 1200 const CANVAS_HEIGHT_PX = 720 -const EXPECTED_REFERENCE_FONT_SIZE_MM = 0.6 +const PREVIOUS_FOOTPRINTER_REFERENCE_FONT_SIZE_MM = 0.2 +const PREVIOUS_RENDERED_REFERENCE_FONT_SIZE_MM = 0.4 +const CURRENT_RENDERED_REFERENCE_FONT_SIZE_MM = 0.6 -function getPreviewFootprintCircuitJson(footprintName: string) { +function getCurrentPreviewFootprintCircuitJson(footprintName: string) { switch (footprintName) { case "0402": case "0603": @@ -38,14 +40,47 @@ function getPreviewFootprintCircuitJson(footprintName: string) { throw new Error(`Unknown preview footprint: ${footprintName}`) } -test("render 0.6mm reference text through Core and circuit-to-canvas", async () => { +function getPreviewFootprintCircuitJson({ + footprintName, + referenceFontSizeMm, +}: { + footprintName: string + referenceFontSizeMm?: number +}) { + const footprintCircuitJson = + getCurrentPreviewFootprintCircuitJson(footprintName) + if (referenceFontSizeMm === undefined) { + return footprintCircuitJson + } + + return footprintCircuitJson.map((element) => { + if (element.type !== "pcb_silkscreen_text") { + return element + } + + return { ...element, font_size: referenceFontSizeMm } + }) +} + +async function expectReferenceTextCanvasSnapshot({ + footprintReferenceFontSizeMm, + renderedReferenceFontSizeMm, + snapshotName, +}: { + footprintReferenceFontSizeMm?: number + renderedReferenceFontSizeMm: number + snapshotName: string +}) { const circuit = new Circuit({ platform: { schematicDisabled: true, routingDisabled: true, footprintLibraryMap: { preview: async (footprintName) => ({ - footprintCircuitJson: getPreviewFootprintCircuitJson(footprintName), + footprintCircuitJson: getPreviewFootprintCircuitJson({ + footprintName, + referenceFontSizeMm: footprintReferenceFontSizeMm, + }), }), }, }, @@ -85,7 +120,7 @@ test("render 0.6mm reference text through Core and circuit-to-canvas", async () expect(referenceTexts).toHaveLength(8) for (const referenceText of referenceTexts) { - expect(referenceText.font_size).toBeCloseTo(EXPECTED_REFERENCE_FONT_SIZE_MM) + expect(referenceText.font_size).toBeCloseTo(renderedReferenceFontSizeMm) } const canvas = createCanvas(CANVAS_WIDTH_PX, CANVAS_HEIGHT_PX) @@ -108,6 +143,21 @@ test("render 0.6mm reference text through Core and circuit-to-canvas", async () await expectPngToMatchSnapshot({ png: canvas.toBuffer("image/png"), testPath: import.meta.path, + snapshotName, + }) +} + +test("render the previous 0.4mm reference text through Core and circuit-to-canvas", async () => { + await expectReferenceTextCanvasSnapshot({ + footprintReferenceFontSizeMm: PREVIOUS_FOOTPRINTER_REFERENCE_FONT_SIZE_MM, + renderedReferenceFontSizeMm: PREVIOUS_RENDERED_REFERENCE_FONT_SIZE_MM, + snapshotName: "reference-text-core-canvas-before", + }) +}) + +test("render the current 0.6mm reference text through Core and circuit-to-canvas", async () => { + await expectReferenceTextCanvasSnapshot({ + renderedReferenceFontSizeMm: CURRENT_RENDERED_REFERENCE_FONT_SIZE_MM, snapshotName: "reference-text-core-canvas", }) }) From 5c2ed456e5e315fcf74ffee13061482a7845ebc4 Mon Sep 17 00:00:00 2001 From: mohan-bee Date: Mon, 31 Aug 2026 00:21:06 +0530 Subject: [PATCH 2/4] up --- ...ng => reference-text-core-canvas-after.snap.png} | Bin tests/reference-text-core-canvas.test.tsx | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename tests/__snapshots__/{reference-text-core-canvas.snap.png => reference-text-core-canvas-after.snap.png} (100%) diff --git a/tests/__snapshots__/reference-text-core-canvas.snap.png b/tests/__snapshots__/reference-text-core-canvas-after.snap.png similarity index 100% rename from tests/__snapshots__/reference-text-core-canvas.snap.png rename to tests/__snapshots__/reference-text-core-canvas-after.snap.png diff --git a/tests/reference-text-core-canvas.test.tsx b/tests/reference-text-core-canvas.test.tsx index 28d2da37..d8b77b3e 100644 --- a/tests/reference-text-core-canvas.test.tsx +++ b/tests/reference-text-core-canvas.test.tsx @@ -158,6 +158,6 @@ test("render the previous 0.4mm reference text through Core and circuit-to-canva test("render the current 0.6mm reference text through Core and circuit-to-canvas", async () => { await expectReferenceTextCanvasSnapshot({ renderedReferenceFontSizeMm: CURRENT_RENDERED_REFERENCE_FONT_SIZE_MM, - snapshotName: "reference-text-core-canvas", + snapshotName: "reference-text-core-canvas-after", }) }) From 00e41b6425723578b26e36911a3ebcbd4938b3f7 Mon Sep 17 00:00:00 2001 From: mohan-bee Date: Mon, 31 Aug 2026 00:26:56 +0530 Subject: [PATCH 3/4] up --- .../reference-text-core-canvas-after.snap.png | Bin 24195 -> 0 bytes ...reference-text-core-canvas-before.snap.png | Bin 21681 -> 0 bytes .../reference-text-core-canvas.snap.png | Bin 0 -> 34145 bytes tests/reference-text-core-canvas.test.tsx | 39 ++++++++++-------- 4 files changed, 22 insertions(+), 17 deletions(-) delete mode 100644 tests/__snapshots__/reference-text-core-canvas-after.snap.png delete mode 100644 tests/__snapshots__/reference-text-core-canvas-before.snap.png create mode 100644 tests/__snapshots__/reference-text-core-canvas.snap.png diff --git a/tests/__snapshots__/reference-text-core-canvas-after.snap.png b/tests/__snapshots__/reference-text-core-canvas-after.snap.png deleted file mode 100644 index d7ded47603d1d48488013eb07282e75aa9426ca3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24195 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

Yy?;FM#NCm~h7a{eC-kq5{8x6)notQ) z`7c1?mH|#RNmhG*Yg$-*s2AYd?V%CE&^QM&3Meot-lBIsT&`-Ie#g?9AgXC2uD60} ztRSGO66LaPS7+pK1%iN^V_dQMb`g*PtEnDEpgtK{PE}V?W2LD;E5q-Z>9-lzW?H!j z^iw#hWc=!q$9Wr9U1KF7h+*(VQKeG%-Y{+Mv!S{w5-wP3nwe1UOQj^b0~J}>+uyZ) zzAwa;Xmx0cLRngSveZ82n%!5*AL@enzzuwoGx40Zt9RhM6S?)SZTT*j z`6o9E@ade?zT&S}SzSg&3qaS78tdqZj~Yh1pw?q);)}}&Vwf2%^9#~D9>gC?v`o$$ zEd0UqDsOyjTNegU@4wlX@|W7Sz4}-%Yc2X6cRBjHIn}os3`PcgUDEl0qCE;j7W7)~ zpuk#{!gFwe|pmYPw&6Co>1P;p`~j$bhufl_>I0!;e)ma zpc&^lq`Ka9@-?Imv4MbN7l8Ypke2(pmIN6K`?x?Wv>DFo*AA+0NpNq0FXa0^aOMGY zbXqqvW{j4fFn1AsaCueWT*Mm6`VvA~ia?pQ?@^vuKIqRT;GH?_cwz7v6Sz0rFWV&w-EC?47=XBNI-f;=y=BN(6MXRIBQ1C#O7vv`gC89z>w_pki0Bvd0{aAMIZv9F~pglzcxL)x%@s|!f=!IEsC(!Rv*5D z1+AH!T66CnHmpj=aLF|w-DcNhl~6#C?RY_2#KGK1{N`jGGeF#|69KGq?-+{=!^9lj z_=rA~x0#zGbS5zln#vCJ^nL}JR6(Ge$ED2-1^!y^8U=J&)}LYwl#U@yr2vMNKm5Y~`>&qA zf!1S?_F=Y52;$N;}F@wTWC|&+J{!O zv89G>X3%C?XODs~#XZ})oDCb50to^{@VD5kQN@(OX$L;c1L;)x4#~}%W zem&BpH~Eb(_=k!{@O$5##WTAM>VPHs0EIzX1<`cL2-$dj8|9*)Pu^V%)4#%To17@d zY9N7}@?K}Ob-bSp3`Hz={>R(Bl$2dNbz|#0?pWU zZU;*XbS8T9{`1ZkhgsS)ta~Tx32se)6J0mI`fb$ofDn3Mm`&@jfaS$EQOwb6eG76( zk=&a6qxErvdy@Rojd2;gLk;vf2Qqn7t>GX`)HeS6y`|69;@;CLQp3>^hYfjayjOx1 zr}ACl=!=ZJJ7mBmov5)b(3PT%sA;za68%tdK%xORaC4BhdG*9r^UjZIC-(uqUsJt0 z#tlqNs#KN;c&{aMU{F4r8J-o?Ov>q0Vpc8fb%@Rs`>+2zX;EULZpGYM6(=`n&}-Xj z+}ZLE0Xz2ai9(6p`$*jiPB+z{u={sm=w;rRoI1t76=d*E)<|lwCT`|Fbr+D+g%4!T4JBgz))ET*nim6^KAT6U{X6-B znR^)o(-z}qys=ul*y#)p_hMDn>Ip^ zvt7zpW!cXG7baXJ4L1n%(wshsh?=6-!>7dp>_jd|mncKy1Sa?Ag$++!aSEYfH*tW6 zFHG!ANF5m0?$7J>J9WRB#+B+h>$lyl<(2SXnAAzX&+p`yN+`#U~8?r$_@OQal+f+Ck=tlinlKEpxGbvO%kNgt;wQ@t0Mj7EU?Wdar5dO9$)1e#epk#j+(t93>Q&IXS?FIe$E4*~G zb^Hm-EPPg5Y2Hdh8f7(`!_Fx8oJ@1N9R3zDPHuH8QF~EjD5z$%qrup}TKnYMOS+bs z3&C3clyyFx<#GkhA(`-mfjY`j^|@q8TMxKaMtwD!liygV8uhdbvm%y{9!Gj&GX$tqh* zB$OkPoM@$CQppqEeGkCd04L!VWkwpi5tsJ0mrxQ?XEc7)b-2Y^uT$bxs zv!J+d;vB%!;a!yU>JjB zM4&`*eY}2jmVHQ91otOy)m_gCm-~>y*0mS{I#&Ob4?oJ=9&XAXxJ6fhpmng=sHy1?F zmH?-s(FgPTJ`BfRPJd!m^7|y$M{8A(_d6Opz@9@s$BqK{!L0FlOx&kECsQCWJMEguYT!gEnU>z-=Nm$kyH;~N%HY676))?6XA zEB4j4XX>AxjcoXp5jr?UEv_N14VJ%m(0%z9!2W#y$@T&PDxFiK+JgB@5cA_ex9L{? z0=JF#f>je(OY)Vz7A|b&pmw$(TqXZBi^KA{s9mN=|Gp7K?lMtuzM)aHU}ySuqZ@rH z8M-l!q`ET~=nA9drXX2}{=%>MbKSdh%)^%+Hv_j#5LOy^y(10<6iS%W#IAWKV>Oue zrT~o&*dTU09#ryAR8&5}ZWOQIXU3x!f-L+y%D49`W@zbVXN;@QrmY<-dnW%7iyNAx zz8cZNMheVK97}eUHYTT%uaz{=lf7Z#V}E8k%mRUPBX3 zJFFmZ*;m1P1K3cbO&CDar=d4}sEl8it`7h2~-Q*05FRN~8YRRd&3uqTO@TnpY_b?vt{3o6zND%n$*q zWXWl?dYIFCuRHI212vk&>3f@yljxL^1WFP5=aq*c@xGWGyCD zIG9ktxk?SpD)a;2898VD2_Z05_f(M4%1Nol1SQ_Q?OM-R&X0d}kYeG~ukdPXYA&-A z0IGgB$6-w9nk%$F3RBA1A2Y<)Z^g~7bf|>rFJyyS3`Spn06ABcG(yP{RwcOFP-#|a0~Vmj1?fkiJe6vhHzZKN1S3(GssZY6iu|=*7RS*5Ncp;j-uqb$$_w#EIWi$!AO2t}y z0j48=%XnDuV5GLXq_TF#j!hm=bQu#fS#n*exPURul# z87DDQ$*HAPJ`-20!dhv)W;~g*5VO)N#X;@?&bDJ%`B1{J%Cl!m$C7y^dPu!d)4sF6 z=oSlnk)gtkfu1KyAj`Mu2B1Pgp&NMRo@)!H)36bOr)DSd*T{8;KB1Cp+Y_44pKBiH z=FdJ^EzGqxm2&OiW!y+)GuzVR=AOHcJ^+W$=hEs?#*Q55=V$^T(?x*&GwhZ^BHe%e zJt=_Bv9JgZSc-HaDY|Y=T{?X#WjI@EcySkmz+TSnu+^oLs*s6}U9*!P zFV3qdwh_FY2LcIPWc|MYo)r_fR6bb=_e=~c<^&Z<^fm!`+!?XNN9S3Ip!J>ye=apL z$#Q78_`TmBBVrD=2x~cGaC0%#&S!Z(kI1)Tgng!W_tD?LL^pedVcM)?-xl(DKYmH4 zo)t-*h=DP^=R~>Ky1)Ige*+Z5wPV;aC;j&IQLh+1 zFXgKaZv;2rjv_EWZ`dyJ0g92M$X~mlR*`U8<#C4V^o@h#uG*Sj_i~^3B@I{BJ;aO; z<-V~h^)mq>zQq)O;PHxiSt`_-rWZfwdQT-NzIs#d%)R9M;?9!#@1=9kS@%EFeD0GHDjhn~x)+|RAwRH21f9o!eGZQG1f`>+wKQKg)enz8Hrq_P-U>zy zQ^y6QxCdtBXX$MYll#@N9+MTOKOCb1C^qvi-p@Pf-LEq!Vf5y`iEdsE&J$%=hZxOk z82RhqnzlygADb>d+3ad3kKki!c9!a29Lc|eyDTsK()4@UD7d@I@M3HV#lMGqI9fbO z<^1dVTqw1lbpHsCW!KdYi@i?YpE^DXG|z+?#-~QFb#WQ|>N$~iB!c@dkaMIgW~cgj zO29-*O#3F|+w1z{+A%gU_KNuwg)h~AT4g=MBGX)nN^UDQycJ*9DupG}?wAzSxvIIA z?(p1Wk7CwHfLDdTK@YKXWN{Fxot)HlN2^Kff4F`%{uP>_)4!=BmFosnXHn zvitXOxJdQk=6NCgxBcfXrN7n+#`Rq1eN;)^RfhZ^*hn8hLmEdfMny(QVEXFWWDl`j z0_D6MS^K1@Kd5px?Q-tiMGh%l2cM3cRz)6>Mx{?VZ;FSk%v}oI;MT-9iKV8yoz_u7 z$@}RyD>7QpSP={q`tuJSakWQ}H67L|Bj_@4?OyoNXaTm{XFWV{gH0}`D3`9aCLOEF zAl(~E3t2lAsQSQrn#aMX?N)#AXAOYA`D{)dJ#e~SFkl{D)R9JILEXh7Lr!#h^h|im zw{{CHXVVOCqK9Rn;}x1>ifkdh7cCs0t+u%`#-GJw+YykWET{E6BIZ)Sk0ljV z`1j$Q%^Fd%Ha6_>Qke5eZL`D1ps;92Nz{z?!_7O^Q!xn{&yS-Uej>ngb#5mo4=M#L zEO*DsVcnxS-y%GdjD24+#MQ92rB<`c>d==WbRKZO3=}drl5cQNE#jfuv+%#AHJ!A- z`Ro;6LZfBB|0%_nE@rF}m#4`Mzjby+_erT+))1nzkuJYNd-*{zUx=s*0xifiLE`Rs^r(ftDc2y0% zL+|=c+HEel8gb@iP&o*dlawsDo#a-`y!;sy6+`U;6!#NDqsaxirti|Aq zQz)t8#E3z@j}db?myLz$UL-rR4GJh&@^Ut6Tw zTht8c(+~4h8$}2eS;XC(TwP6~+KX_PymO5FEiMuqVupWw7;c|7Og~Y87j7GGG&~jJ z8J_2V`bn|De%)7H3GK*AzgQm*p&LS4Tswa`>Bv4jR#;m{cxB>jXtZ9PaUtW;l(`BF z|CgrwtaEj-B(je8Eh22~C(|C7`2$N}7JVI>k^-m1GO`vXBB$O(SoLtHQ+ZMpZ))Zr zeETYO`u5{LIvV1|9X-^)JB}Bhk7+%$)*-D);u&iAd>IG(96P-BN*eqm+R*5a`HVzx z`Rh}xOy&33tv=Ni>tZHz_m1^O3;KU6FS;l%;d+lR)3m$s*N z$R{zb)BElBB`e!Wah++J$A-fRmnHl1eJl%%wvzDOGO9~sD@|&4 z{oQ%oZ{IqG|6|-sUNLd5ubx#ph&Sk&Tkfu0>y{fSs}hs$?~PR7-c74b8D2NzA4xOp zoAVS%b2+`0HlQo_szz{w*GcOKA9gKyHHPQBUdH0F7~Q1M*;~ig3sDOJG3p(*G7u<0 zkt^>TOXC!!MZ|XL@MDuy+lUcoXLHk$s-p$)^sd$-OP6!;-Y;9* ztnWLISpB+I?F-N;x6qA?UeyRpg}N+hUr|+Zbt>bMk;Q7jj0mT@Zb%@}SRt*hFY>ELH~LQBI2Hj-JsiW!HhRiVgu_bvjzO{Ee z0kLwy`o$WH7l9=!8X$VguaRKg(wZfsdh`bxq_PW~n?QxzwVhAv$^3B<0|63;QK@TJ zyDK4sC)Lo$W3r*+I^HBX-rwCt(~#Tje7y7fgmGvuxhy27Cy4Mf~S$b1X{ z9Z*7l0f4QG9h;$o`P@iZUWU`jQG91ZN$%WE_SoJjMG|w zgWXvZp!7j?eaKZ(UM6qW26IBdCioq9(N|jzU3=>sGZCaBVwP|jywPmeBb_hzPpGCy zYd*anE@l#V+nzVW$<*L9%*tZ z_&E_-Vf?2zN5%Orn!10=YZ6zpxZcH?|9q(>{3Yckh_b+n`FnBc#)mJOA{lQK9ozJP z=>H82s+9mRbe%N?fU=Y?a)KDRZEI`SL9W%fb^j@#429jybTj`tkL*xH^ByX=m7h@} ztZO(Kth@Aq_qnx;ctHjv<$7$&Zzndgu%YxqvWcUPlhf_&d1D{t)U9`baXVh#RZ{Bdirqin@wn&4@X>tEmpnNfz)oof^Sf^%p_CRx z2WzLY1rI}eQkJ^oXq$fB-dG?5C@byw0(t7bAMTSiBWM9YuQwVHFn1~by;{|QRRrSEIwpRQ6mpFXU8kNx7N3OTVeT2_T9 ztFQo`@p)lxiWh0jt-SsECTP!!EwS`xYIW%cTxpfwv(1-hgg#XLU+tU!KhtX;$9LyQ zamXo7k}t{Ej8h{@<%CXTlrPyZ!hKk*#nMe=R7CoQ%+$^t6Na>5U8nQel*~+3Zj_ z$;f6@Hj?A+{@{MxKirS|AGjZnuAknY&*Ssu`h2eU^}e3(*L7WBWD3TDxtt2QwdJn% zAdwdu0IR{>V2jqAbzq>8TQ;S+!}>-WVgg1t2dq75x4&PR1&~k?TCnrRg%@pOI&=x? zN!10H{ftaa%R{y$rT9A%=J+#qT4UEJjPT=XMbFoqrKs8Dx8SS zp8WSXJE56v_DaTf-b794E`;evk9;o9gFj&alyU4WLtS8wNHBcX$@K{r%^rogyWYC9 z`OI-`v0nn6tL4YFhKv58TUfQ*^VJVWO z)ZN3tu2c($V;QX z?^lWOJ9JHURb6zghO9%l_dNE~>xpw#7gH*%nBLZfc}?K+oy`3u2i>T+avJ$}+B8(l zI7VftzXkY+2?dE{HpH{4*V{wuNoi-1_4bGp{Wfx2TLLthCQo`J+ny~)!H(yJU%F$b zii9(!m%0}`DFsVz^okP;b`Ax(VP(!00}cZuqCtAt+v&QkKQFx~9Gi~{nk4aPBtp5M zM^5H>c@3-*v0GspX`tJ zT9q8tM9O^Cxf86u-*=F$KK37`-9cU)w`Mc&q4B)CRpw`s+8*5Twc3*H(g&+H*QtZXoE%Lv_izVv8f+tF zrZe^w8akPq?eQ`BN*IsNK2W|OKF>ch$5l0aAK&ocSeGyr7k}LxHx(RNXh&gnicPJ!yUi0MWL=8%ybUZ{hwM-_}K|PK>qE>V$+YC-xxfKSrr{d3?KyHLMq7wu`9TJ*=^85}0nvKwY z+B&g>3VrPB^B<`v)JPOl4@f;S&Fq|8`**%@`0W=Q2yL?>ghAe#xh`fry!B5FKubH) z8M`n3SlKZ9Y2RtZu>~aOkT3S=UCd8~iY9CZ>_d!#RGxKmL%{qxIkal@Xe4`Q3T zQR9@iP)sLjkHylaV^asOnY%*ePjTjOD7*#GVh-X4`z%_ z#=Ae3BScku((r77v>E%WpiAs5+8AfzTy*e$LX;D_Y5`j+59T4`JUD z7AtnC^9`MIL%15*yEH(~hJ^bb4o~dmeo5lcUShBKL?t`xfZDzi<&J=K4FaL8*4d{c z6Q|_TgYgI4_ktOZs)n3_VVW<0GS|!_+ROQj3x?~MAW-`Hm4!AjgN?XHXYbM*#d-aKi4}r6IRr6~I7@7YEEP$&Kw;EF%yoe--;sbtVWU-%#b=O4GeT zR1qzFz}QUWn4N1w_@}tnnJ+`3Fer z^PZIH%BpGbLdNz|0m_e<5`>}DJY)qsT`%%?q@5!meav_?ZPp;EU~(EBx?z3;6dC99pizuKemG!T)kU zp&34}MZ5zB+wixnzi)yXqYkv@rrGVl!y3P~=6_ZC0g{0#?mo4kUpjmF5RgXNYgT6F zfI*-R>yjf*dHO)roQv4O^(K@MJ^Xy8TCeoMlT`fGho?>#)w>r5mMI#Bk|kzPB~J`z zoicUs!(})_)K&%Dcfm!LsjoeTWUPz>(QcR{QE9;Bj4a=x64Ex{A{WMCQeqngU>Ek%k4JrhrqcrIlN(cmkGRg=70@4Ynv>}wx zF+e~?N=QNwgwRnb0Ro`}5<=Ry<2=v%p7*Tto%7fE<6G--=}Puy@4H<0Resm+y72jJ zu<_x8rw)QZpu?snf7}Iu_Ev*HyZaC92kyk|dyWA<_6GlMYJC9sgE-*+7jV5R_^$Eq zpsK#piy+Whkm(=St;6${C*gUh&?uIG6*`}njn991*8JYSeZR22hm~7DD!-ZVwlm7N zoY~j_@pTxtUvF#*t0{)i{QVo0LpzFx;*V9Hx4Dxbd2qMc-WvxTnC_|B+Jr5R%sImc zzh0iT=wlJ}3X(;V^`KS3Vg*>KpNMc0YsYzLQaX4#;;sG}U`e2hq$k4f zjyNv7HB#F3T15CIM)$nyF5vUF`Yuu7<=da`32z_0^?o<-@%rKJACKQW0&E-@C?{qg z@bTN{y^6xi_zVAe^*>_zKTRdRyXS|HtVP83$JI@?!mb$X^&g|2^wk(Fr|I#V z1n0Cc(>aG78cVBaFA_BwF_Be7N#~7ETm~&ao1;%vS`3LSL%Xj(S#RZOSP}*WYd8*~ zJxY7!mD|RcM1G2FnJ2d#SS&#bFm|G8BDxo?L92~s{IS#wPPMoN+ejoJbDFq>n|6)i z(O^BFPALq0J1UuwP_Xe*Uy8Q1q<)IiXBEgs$x{cM%HM%vTEM^pV+tP4zA;ag9WNaN z1PL~Pe`Yb(Rh%*?xa~*U^uKO|88(g6Jc?>o1Iwp3$u2|!|ND%Hw+|=_=lJ^p(EGft z7Ba$GXL3p^85RB|p1UCf##7pm{x;L~kCNSx+$8dR3ace@ial0JCED_>fG6pcWc5>v zOeO*&+WrV~oG7V(z~v_pF+k|Ff`?c27U8>=qZ^B6d-H28xpW`Y+Ek%K@y zXv{J$)4?E{G0lAfh#yRL;Lp9?jL=mv^ixN3EkyT#cK-Mw_GXTqKr3xfSLKMF;1-!2 zyBcL-!0aSIN0TXZmWB&%c?_`@Jl(fyK)b`{YE@0)mVAmno9Ir)YU+ZBa?BrNl%Y|% zRnyUot;|-on_ZLl`PC?1T`dCtL>IxMO^4neo@&-!MXU_MR*@R2-wk3xSFD6S)}+>( zmZZnBG|Z9{?Plg}DZT-#iL312tDIU4OjQShemVytzDjx8U3IN#vSCyfka72Hi2O_; z2`~o*7M$yw>69xY?v%Rf7nl-_8nS;_VmHk@P|aU~5+wuI|v&$r08DTrct@wZ_Ww+WAcG zpaS&!X9Xsl`)8retQ(U5ggZYfUhwVG8%NT0ap5*iH=11{5z&n0I4_^(w3^SOTaQBd z+YgWTNsm)&Znj8COZ%^c`uWvo!vuKkY^~wm@B3!d4CG(+0(t-f?WYU)^J!t-Z+%z>b_rgX#QsBvFcDS4zq3j09t{SpNwP)%hWlil# zDTuX1&eSYI^KY6Chh`}wqigFLs-yhNpS)kHK_^ZbSKP}}1GgBr@ndPwMR8l|aN?0g zW`wsodV-O4gF);zJS(ofHKMl&6I>maFHMuhAef8V)OGP5jzO?De}-l&XW9o}<}o>I5BaV5bjS zk_zca7=YgPFR-c65Bp_KtB;3Scr3n!bM(T-<2S-eBVU$2`F75A*A-tb>sWc3Y}}dJ zhb%W09wXU{(Re0OZ?$NKo-uDCLz%8!d`&(8BHl8@dAoHPkbJ}+Gl-y&G5o z9vq{mAb+|+&l0}XBEB^78(SE@gjm2dwGM2k(T#D;w{4ws3I3*4)!cD0bnH_1>|qu7 z?*^gkbJ#UW+cTe@KaQQN5pVPALwvfVy;EHrD>bK#<V%6IYpjwWY8)$ zKh|y`71n+p=Zp$;f=2~RzEesYM9Jb)6pmA`mQKnLj*|%4mhW3Uz=E`%a~mEk+rNpKw;lQ0{4(7NF~MWPq*3)ay>>F`qD?gf9PBseM`3 z9Bbw6F>$MvW|ZRlGwgw;=)87ze_I7HEDwxoE6{wCc?1T$4ZM1Ma~XQ&Ek=3(&8&Bpane?yLpHf__2 z@j5NJm!teH1T!NMJ%e`KPAuP;&lEsU?LNL1ypt>LlqZr`uNoMRKLTZ=B^g3kSgxHa z^yAud^f)SMmG?kQ*Zn^5?;D-sH`1za%iGL&+;^Buo=IGIO(G<&_EPFk6>KGw=e%UpiMvi@3ChAtX)x22;Mj3@m~Q)f3tP+8sFd0i%lYw3i53k^u*(eJPSAQ{P+QxoT>5+vr|sRt87 zptBiacOiBye`gQ5;X^~^ZT&_wZt0c`E^ZOE{$O0y`sp6=Z%IlZUT(Tw*%Uf`B)O-9 z9_%PQS%zi7j%OR3Z7HHJb;VtXti%NkP4mr?TFZ>>Pf3e;JdxE~ZWPM{?cs~bj90ep zx`mZdtIzB1Gs4yn9u%epD;W3~Jv?1j{!H*gqf?0?QTKK;-=I_Bm7ZY7=8ImI4N#26 z%8SxW&s0zJm$KkxV9X46)zB(E_eTabZ&ALQ{-mTZuP)mo+2VAaT?r?*aMG0|7vvfN zUu7<$a&48u=;2K32X1$h#Us>RO;%K#C+C@wjze30x^H%Ocolu_5pX&HlnY?6?imQ= zx$S!c2&6XLPd(YWP0T)U$Ai2B+a)(oGb8NLG077NF>tNX5e9rT+3m~_`f3cJ##?_QfCwIaW-H%v8W zNlfburk0_tFpgKVwWPk7BdE3ysk*#jJdWwS9?E!D3Fl*_d!HL)dL&(#=75odF1`rg zH*pL&Jb6W@EHz4FonGQZwsd;3tX;lQpW}GnPv#OOqYHv=cgBau4EcmudW-G!OG@k3 zG=nS8dlCrV6*Kus;cM03sfs71NuySkr>C&K(ojiLu~k_>&b97{O)*=k?A5P*B2B+k zXI&kKS$I9@ZqqV05E!;+vYdjv`Sc-6(#S$v(}Qt?(Y{7rs}v~9i7A1p!bVTN_uT#L zMsQKej0A~{mmKpx^P7%$aWC*qJNh$M-FSy}XB5#dt@+5SOOLfB-TO>w9DsD8tK4J+ zBYr45hYskAOVro5t+eSjgV-axL2~!51*%KK2N{g_X-Q)<>p%uZWlXo~$V=fKxYq5O z^VK|sjSNDxG59K*$`(& zBB0GE{MO3JtV5uSc&|QAq7Z7ZBDgO*8I1MG(RVAyfTpP zAj$m+0v-BtB$^`)oht7WB2D%V3q!DuB=fF1kW%uhq40pQY7J`C!uQ9dpI()M2Udo# zkM5{-FF&OIwu+>fq9i3622g)np>B!^za$%DIex7%U4Zi2me4 z!H1NNH;FqIlSS%Gn<#{wn#CL#9eOKaIzsXq=Mag@4Uas-b6ZGUAW^qe9|{@b`wzGsfV-gRjkX@Mrm{3w3z@H zu9}OROBGcu*MHgNMyyKc11Wl|pLZYMv`cr7 zF3%1QSa7#H71eVC-?a%{eCt^d6gT}d5!f@PsxIJxDpgu1zoThL z`|bFr6{2vy!W}cJJ*W6SeaW_IElA#W_tpzX!o!pv$j-U zPbGRI)=C3CQ6FGlqFX1Z(r}P3*(d|>6_U3hzF!|;TZ3K>h1Nzjrtes*>a;L$HDyG!{eG><6kzfxA^9>zg8Wo_AG+;c~~_1P!=*U`o$cG zi!I~k7+dk#R4v8_l)NkHu1eHWhuC(KR>$&lab4}ec78dK8v-WxQpdE(wsf3EAM9`9w$o(DPq^g>fOFc_ZmE%_+M8FPHvu13m|;57DBbx z-N27QJ0|aQWExkp`hZXt(C;R^HQ_C!Fm3?!jzv-5!=*h_tU9o2icYBXs=#>%0lMNR zBnO_Eq1+=|(vqwEJX=4T?7aNzLL|=5WqOe?S#MS#4tkaXWUuf0vwdKUxll=~t;I${ zD9Qr11Iw%&pzeveF9RItm5?P_t9>GOFFqQi&Cwxq<9p-A72Da@qGX!RgPiADDj`Mv(XaUIas8F??Pu9+GqKV z8E8}=GwB0__3GyP-LB#Q(Nx=jWK2 zzl`VFs8J{S@wKP7J=#K36Bp+OZjvk-#1ZLMi;P|Gulx$+xhHf0?&msM(PAj`H+9ry zh_uSMQj`Jcgy!zy(-c2-Rb>5W6YpdyYTDygSaZ~9>9_7Y+l2j~%%!$G1d*Ooum;X;F$P!FCqrjLw+vn3^o6)oGuzyprqJj| zC^<98?Bbp5la><-8I*MleL0)rGykbL0m`&iVA&7$g-3YPo9`BZQEo5`YQ1b)S@7Js z1jh4YD~@&EzG3yc!Or=9}!b-PpBxbrCuMlv${9&|I-h zN0IGD!THz-9WO}r4v5?1H!zRcuqhuqUOQ~RBzvUHinZRHIY5maEiwZTi@FdXhL;9s+IXv{o}M!8%lDakw*J{~ z#2_2Hq1DHByZ4W}>fo7S^3qPDM4?(o9-?F~Z`DRcm8wX;1I*Vm7f8svRdNc_D2;SZxohtGWqdgL^z>=cvBa*tp8#=n{4S&>7rvO592C>}5psQtQjX|Cc50%+ z)$os2ibfZ#qNH|LrWk?q;u*&4%T++#>-}wX>I-%B={juM{4STOTy?9tEG5(nVoG8U zte{=VpPKxgZ3VDq?}KPtRA|Fx({kHVv>1ZbjO}5&UHDO4I#euloYbzHq|F&k5!5mQ z6M)G-qID~Xf8xRqwsgVT)CjP+X<3}hKe9**z+`H;L8M-}Z-S=F)7(k-(&@w4x?NaC zceRkaI-%oMnUdFru*~v*YGZzAb(+i-iJE&$A1ab8j`-R ztac4#BRb(pML)g_X|G~QJ`rM$q0r%57W3R2-ND<9I>sTAu!uUUbE<<;gf{XHDzph) zVoOF@FLSRd`h6D@ikcP@iH(>UcC3afN)8ZEc7nlMwFWrhrETCuPTy%q{aNnSL;qNe zJ<9z-GfGs;ug5s~Bq_&6HC?yuh%*XMdi@;4cGhRdchNV1kRQCE>O@Vx|Ml130YiD_ z>?H4Sp)~kgC56TX35ZFhur*;~e+S`CYzA<#$q3NXqa1&)3fq9=;xuTTx`D0Y;U5=xv$5pJrF zwexMjri&9!TX^1_>5sw-?mGyj^m;E48ioN(8^HLZPZDJ&J%0PHd>XCAoAr%ZwgRx) z&h3|Mfo!7g4?n>88ZAQxLMt_a_l{b=&zS)>)o1}0k9fgDr&)wHXD{8W71oo3(|-i# zGMdhjGPRtY7zuBR>4m$jP$co+p%`?;}o%|Yo4;P9a9JBitTEU%fZ|9;FGEz58q zgMfc5)Z~ZX`p3+!KwNfz4nbQ-wbC96V|?{5)$@NnWpr(Tk5)= z4B$S{W=f2PabD1u4Fs3$a&6(NSbV`mwL$WBV$

L%`2pTb_!QiphR78{Zi#b>EfV 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 KpUXO@geCxDtG=B8 diff --git a/tests/__snapshots__/reference-text-core-canvas.snap.png b/tests/__snapshots__/reference-text-core-canvas.snap.png new file mode 100644 index 0000000000000000000000000000000000000000..f71467c554febb0174914687fca652b0ac358634 GIT binary patch literal 34145 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 Gy!$_J-cMWr literal 0 HcmV?d00001 diff --git a/tests/reference-text-core-canvas.test.tsx b/tests/reference-text-core-canvas.test.tsx index d8b77b3e..9107b46c 100644 --- a/tests/reference-text-core-canvas.test.tsx +++ b/tests/reference-text-core-canvas.test.tsx @@ -1,5 +1,5 @@ import { expect, test } from "bun:test" -import { createCanvas } from "@napi-rs/canvas" +import { createCanvas, loadImage } from "@napi-rs/canvas" import { CircuitToCanvasDrawer } from "circuit-to-canvas" import type { PcbSilkscreenText } from "circuit-json" import { Circuit } from "tscircuit" @@ -10,6 +10,7 @@ const BOARD_WIDTH_MM = 30 const BOARD_HEIGHT_MM = 18 const CANVAS_WIDTH_PX = 1200 const CANVAS_HEIGHT_PX = 720 +const COMPARISON_CANVAS_WIDTH_PX = CANVAS_WIDTH_PX * 2 const PREVIOUS_FOOTPRINTER_REFERENCE_FONT_SIZE_MM = 0.2 const PREVIOUS_RENDERED_REFERENCE_FONT_SIZE_MM = 0.4 const CURRENT_RENDERED_REFERENCE_FONT_SIZE_MM = 0.6 @@ -62,14 +63,12 @@ function getPreviewFootprintCircuitJson({ }) } -async function expectReferenceTextCanvasSnapshot({ +async function renderReferenceTextCanvas({ footprintReferenceFontSizeMm, renderedReferenceFontSizeMm, - snapshotName, }: { footprintReferenceFontSizeMm?: number renderedReferenceFontSizeMm: number - snapshotName: string }) { const circuit = new Circuit({ platform: { @@ -140,24 +139,30 @@ async function expectReferenceTextCanvasSnapshot({ layers: ["top_copper", "top_silkscreen"], }) - await expectPngToMatchSnapshot({ - png: canvas.toBuffer("image/png"), - testPath: import.meta.path, - snapshotName, - }) + return canvas.toBuffer("image/png") } -test("render the previous 0.4mm reference text through Core and circuit-to-canvas", async () => { - await expectReferenceTextCanvasSnapshot({ +test("compare 0.4mm and 0.6mm reference text through Core and circuit-to-canvas", async () => { + const previousReferenceTextPng = await renderReferenceTextCanvas({ footprintReferenceFontSizeMm: PREVIOUS_FOOTPRINTER_REFERENCE_FONT_SIZE_MM, renderedReferenceFontSizeMm: PREVIOUS_RENDERED_REFERENCE_FONT_SIZE_MM, - snapshotName: "reference-text-core-canvas-before", }) -}) - -test("render the current 0.6mm reference text through Core and circuit-to-canvas", async () => { - await expectReferenceTextCanvasSnapshot({ + const currentReferenceTextPng = await renderReferenceTextCanvas({ renderedReferenceFontSizeMm: CURRENT_RENDERED_REFERENCE_FONT_SIZE_MM, - snapshotName: "reference-text-core-canvas-after", + }) + const previousReferenceTextImage = await loadImage(previousReferenceTextPng) + const currentReferenceTextImage = await loadImage(currentReferenceTextPng) + const comparisonCanvas = createCanvas( + COMPARISON_CANVAS_WIDTH_PX, + CANVAS_HEIGHT_PX, + ) + const comparisonCtx = comparisonCanvas.getContext("2d") + comparisonCtx.drawImage(previousReferenceTextImage, 0, 0) + comparisonCtx.drawImage(currentReferenceTextImage, CANVAS_WIDTH_PX, 0) + + await expectPngToMatchSnapshot({ + png: comparisonCanvas.toBuffer("image/png"), + testPath: import.meta.path, + snapshotName: "reference-text-core-canvas", }) }) From 12bb826030edaa160dacf112ef177f5cbb2c2f91 Mon Sep 17 00:00:00 2001 From: mohan-bee Date: Mon, 31 Aug 2026 00:30:18 +0530 Subject: [PATCH 4/4] up --- .../reference-text-core-canvas.snap.png | Bin 21681 -> 24029 bytes tests/reference-text-core-canvas.test.tsx | 50 +++--------------- 2 files changed, 7 insertions(+), 43 deletions(-) diff --git a/tests/__snapshots__/reference-text-core-canvas.snap.png b/tests/__snapshots__/reference-text-core-canvas.snap.png index 6c7b3c10dbb94f405aa13b6a98c4c89cfb682d08..f77fd59ae6c12bbe18d23c69958cf4e75d76410d 100644 GIT binary patch literal 24029 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%0As~U2E?T##l^F~lVN9X$Cg8YS?J`3T$$g!Q+UREL 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 literal 21681 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

L%`2pTb_!QiphR78{Zi#b>EfV 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 KpUXO@geCxDtG=B8 diff --git a/tests/reference-text-core-canvas.test.tsx b/tests/reference-text-core-canvas.test.tsx index 64a58d43..2a9ccfe5 100644 --- a/tests/reference-text-core-canvas.test.tsx +++ b/tests/reference-text-core-canvas.test.tsx @@ -1,5 +1,5 @@ import { expect, test } from "bun:test" -import { createCanvas, loadImage } from "@napi-rs/canvas" +import { createCanvas } from "@napi-rs/canvas" import { CircuitToCanvasDrawer } from "circuit-to-canvas" import type { PcbSilkscreenText } from "circuit-json" import { Circuit } from "tscircuit" @@ -10,10 +10,9 @@ const BOARD_WIDTH_MM = 30 const BOARD_HEIGHT_MM = 18 const CANVAS_WIDTH_PX = 1200 const CANVAS_HEIGHT_PX = 720 -const PREVIOUS_FOOTPRINTER_REFERENCE_FONT_SIZE_MM = 0.2 -const EXPECTED_REFERENCE_FONT_SIZE_MM = 0.4 +const EXPECTED_REFERENCE_FONT_SIZE_MM = 0.6 -function getCurrentPreviewFootprintCircuitJson(footprintName: string) { +function getPreviewFootprintCircuitJson(footprintName: string) { switch (footprintName) { case "0402": case "0603": @@ -39,28 +38,14 @@ function getCurrentPreviewFootprintCircuitJson(footprintName: string) { throw new Error(`Unknown preview footprint: ${footprintName}`) } -function getPreviousPreviewFootprintCircuitJson(footprintName: string) { - return getPreviewFootprintCircuitJson(footprintName).map((element) => { - if (element.type !== "pcb_silkscreen_text") { - return element - } - - return { - ...element, - font_size: PREVIOUS_FOOTPRINTER_REFERENCE_FONT_SIZE_MM, - } - }) -} - -test("render 0.4mm reference text through Core and circuit-to-canvas", async () => { +test("render 0.6mm reference text through Core and circuit-to-canvas", async () => { const circuit = new Circuit({ platform: { schematicDisabled: true, routingDisabled: true, footprintLibraryMap: { preview: async (footprintName) => ({ - footprintCircuitJson: - getPreviousPreviewFootprintCircuitJson(footprintName), + footprintCircuitJson: getPreviewFootprintCircuitJson(footprintName), }), }, }, @@ -100,7 +85,7 @@ test("render 0.4mm reference text through Core and circuit-to-canvas", async () expect(referenceTexts).toHaveLength(8) for (const referenceText of referenceTexts) { - expect(referenceText.font_size).toBeCloseTo(renderedReferenceFontSizeMm) + expect(referenceText.font_size).toBeCloseTo(EXPECTED_REFERENCE_FONT_SIZE_MM) } const canvas = createCanvas(CANVAS_WIDTH_PX, CANVAS_HEIGHT_PX) @@ -120,29 +105,8 @@ test("render 0.4mm reference text through Core and circuit-to-canvas", async () layers: ["top_copper", "top_silkscreen"], }) - return canvas.toBuffer("image/png") -} - -test("compare 0.4mm and 0.6mm reference text through Core and circuit-to-canvas", async () => { - const previousReferenceTextPng = await renderReferenceTextCanvas({ - footprintReferenceFontSizeMm: PREVIOUS_FOOTPRINTER_REFERENCE_FONT_SIZE_MM, - renderedReferenceFontSizeMm: PREVIOUS_RENDERED_REFERENCE_FONT_SIZE_MM, - }) - const currentReferenceTextPng = await renderReferenceTextCanvas({ - renderedReferenceFontSizeMm: CURRENT_RENDERED_REFERENCE_FONT_SIZE_MM, - }) - const previousReferenceTextImage = await loadImage(previousReferenceTextPng) - const currentReferenceTextImage = await loadImage(currentReferenceTextPng) - const comparisonCanvas = createCanvas( - COMPARISON_CANVAS_WIDTH_PX, - CANVAS_HEIGHT_PX, - ) - const comparisonCtx = comparisonCanvas.getContext("2d") - comparisonCtx.drawImage(previousReferenceTextImage, 0, 0) - comparisonCtx.drawImage(currentReferenceTextImage, CANVAS_WIDTH_PX, 0) - await expectPngToMatchSnapshot({ - png: comparisonCanvas.toBuffer("image/png"), + png: canvas.toBuffer("image/png"), testPath: import.meta.path, snapshotName: "reference-text-core-canvas", })