From f4cc0ca360c41ab237d6072369dfcd0c339cc75e Mon Sep 17 00:00:00 2001 From: Branislav Stojkovic Date: Mon, 4 Feb 2019 18:48:40 +0100 Subject: [PATCH] tube socket extract constants --- diylc/diylc-library/lib/diylc-core.jar | Bin 244009 -> 244009 bytes .../org/diylc/components/tube/TubeSocket.java | 51 ++++++++++-------- diylc/diylc-swing/lib/diylc-core.jar | Bin 244009 -> 244009 bytes diylc/diylc-swing/library/main.jar | Bin 578348 -> 578551 bytes 4 files changed, 30 insertions(+), 21 deletions(-) diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index 40754e424a7b35ae00068207b17bbd03f1aab037..58b7bcfe3c27914382739338e89245a60fa90b5d 100644 GIT binary patch delta 4877 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 delta 4877 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 diff --git a/diylc/diylc-library/src/org/diylc/components/tube/TubeSocket.java b/diylc/diylc-library/src/org/diylc/components/tube/TubeSocket.java index e3b8560c..9757ebc3 100644 --- a/diylc/diylc-library/src/org/diylc/components/tube/TubeSocket.java +++ b/diylc/diylc-library/src/org/diylc/components/tube/TubeSocket.java @@ -57,6 +57,17 @@ import org.diylc.utils.Constants; zOrder = IDIYComponent.COMPONENT, keywordPolicy = KeywordPolicy.SHOW_VALUE) public class TubeSocket extends AbstractTransparentComponent { + private static final Size B9A_PIN_SPACING_CHASSIS = new Size(12.5d, SizeUnit.mm); + private static final Size B9A_PIN_SPACING_PCB = new Size(21d, SizeUnit.mm); + private static final Size OCTAL_PIN_SPACING = new Size(17.5d, SizeUnit.mm); + private static final Size B7G_PIN_SPACING = new Size(12d, SizeUnit.mm); + private static final Size B7G_CUTOUT_DIAMETER = new Size(4d, SizeUnit.mm); + private static final Size B9A_CUTOUT_DIAMETER = new Size(5.5d, SizeUnit.mm); + + private static final Size OCTAL_DIAMETER = new Size(25d, SizeUnit.mm); + private static final Size B9A_DIAMETER = new Size(3 / 4d, SizeUnit.in); + private static final Size B7G_DIAMETER = new Size(17d, SizeUnit.mm); + private static final long serialVersionUID = 1L; private static Color BODY_COLOR = Color.decode("#F7F7EF"); @@ -67,7 +78,7 @@ public class TubeSocket extends AbstractTransparentComponent { private static Size PIN_WIDTH = new Size(0.08d, SizeUnit.in); private static Size PIN_THICKNESS = new Size(0.02d, SizeUnit.in); public static Size HOLE_SIZE = new Size(5d, SizeUnit.mm); - public static Size TICK_SIZE = new Size(2d, SizeUnit.mm); + public static Size OCTAL_TICK_SIZE = new Size(2d, SizeUnit.mm); private Base base = Base.B9A; private String type = ""; @@ -152,22 +163,22 @@ public class TubeSocket extends AbstractTransparentComponent { private void updateControlPoints() { Point firstPoint = controlPoints[0]; int pinCount; - int pinCircleDiameter; + int pinSpacing; boolean hasEmptySpace; switch (base) { case B7G: pinCount = 7; - pinCircleDiameter = getClosestOdd(new Size(12d, SizeUnit.mm).convertToPixels()); + pinSpacing = getClosestOdd(B7G_PIN_SPACING.convertToPixels()); hasEmptySpace = true; break; case OCTAL: pinCount = 8; - pinCircleDiameter = getClosestOdd(new Size(17.5d, SizeUnit.mm).convertToPixels()); + pinSpacing = getClosestOdd(OCTAL_PIN_SPACING.convertToPixels()); hasEmptySpace = false; break; case B9A: pinCount = 9; - pinCircleDiameter = getClosestOdd(getMount() == Mount.PCB ? new Size(21d, SizeUnit.mm).convertToPixels() : new Size(12.5d, SizeUnit.mm).convertToPixels()); + pinSpacing = getClosestOdd(getMount() == Mount.PCB ? B9A_PIN_SPACING_PCB.convertToPixels() : B9A_PIN_SPACING_CHASSIS.convertToPixels()); hasEmptySpace = true; break; default: @@ -181,8 +192,8 @@ public class TubeSocket extends AbstractTransparentComponent { controlPoints[0] = firstPoint; for (int i = 0; i < pinCount; i++) { controlPoints[i + 1] = - new Point((int) (firstPoint.getX() + Math.cos(theta) * pinCircleDiameter / 2), - (int) (firstPoint.getY() + Math.sin(theta) * pinCircleDiameter / 2)); + new Point((int) (firstPoint.getX() + Math.cos(theta) * pinSpacing / 2), + (int) (firstPoint.getY() + Math.sin(theta) * pinSpacing / 2)); theta += angleIncrement; } } @@ -192,17 +203,18 @@ public class TubeSocket extends AbstractTransparentComponent { int bodyDiameter; switch (base) { case B7G: - bodyDiameter = getClosestOdd(new Size(17d, SizeUnit.mm).convertToPixels()); + bodyDiameter = getClosestOdd(B7G_DIAMETER.convertToPixels()); break; case B9A: - bodyDiameter = getClosestOdd(new Size(3 / 4d, SizeUnit.in).convertToPixels()); + bodyDiameter = getClosestOdd(B9A_DIAMETER.convertToPixels()); break; case OCTAL: - bodyDiameter = getClosestOdd(new Size(25d, SizeUnit.mm).convertToPixels()); + bodyDiameter = getClosestOdd(OCTAL_DIAMETER.convertToPixels()); break; default: throw new RuntimeException("Unexpected base: " + base); - } + } + body = new Ellipse2D.Double(controlPoints[0].x - bodyDiameter / 2, controlPoints[0].y - bodyDiameter / 2, bodyDiameter, bodyDiameter); @@ -212,18 +224,18 @@ public class TubeSocket extends AbstractTransparentComponent { / 2, holeSize, holeSize))); if (base == Base.OCTAL) { - int tickSize = getClosestOdd(TICK_SIZE.convertToPixels()); + int tickSize = getClosestOdd(OCTAL_TICK_SIZE.convertToPixels()); double theta = Math.toRadians(getAngle()); int centerX = (int) (controlPoints[0].x + Math.cos(theta) * holeSize / 2); int centerY = (int) (controlPoints[0].y + Math.sin(theta) * holeSize / 2); bodyArea.subtract(new Area(new Ellipse2D.Double(centerX - tickSize / 2, centerY - tickSize / 2, tickSize, tickSize))); } else if (base == Base.B9A && getMount() == Mount.CHASSIS) { - double cutoutDiameter = getClosestOdd(new Size(5.5d, SizeUnit.mm).convertToPixels()); + double cutoutDiameter = getClosestOdd(B9A_CUTOUT_DIAMETER.convertToPixels()); bodyArea.subtract(new Area(new Ellipse2D.Double(controlPoints[0].x - cutoutDiameter / 2, controlPoints[0].y - bodyDiameter / 2 - cutoutDiameter * 3 / 4, cutoutDiameter, cutoutDiameter))); bodyArea.subtract(new Area(new Ellipse2D.Double(controlPoints[0].x - cutoutDiameter / 2, controlPoints[0].y + bodyDiameter / 2 - cutoutDiameter / 4, cutoutDiameter, cutoutDiameter))); } else if (base == Base.B7G && getMount() == Mount.CHASSIS) { - double cutoutDiameter = getClosestOdd(new Size(4d, SizeUnit.mm).convertToPixels()); + double cutoutDiameter = getClosestOdd(B7G_CUTOUT_DIAMETER.convertToPixels()); bodyArea.subtract(new Area(new Ellipse2D.Double(controlPoints[0].x - cutoutDiameter / 2, controlPoints[0].y - bodyDiameter / 2 - cutoutDiameter * 3 / 4, cutoutDiameter, cutoutDiameter))); bodyArea.subtract(new Area(new Ellipse2D.Double(controlPoints[0].x - cutoutDiameter / 2, controlPoints[0].y + bodyDiameter / 2 - cutoutDiameter / 4, cutoutDiameter, cutoutDiameter))); } @@ -235,13 +247,10 @@ public class TubeSocket extends AbstractTransparentComponent { @Override public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project, - IDrawingObserver drawingObserver) { - // g2d.setColor(Color.black); + IDrawingObserver drawingObserver) { + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); - // for (int i = 0; i < controlPoints.length; i++) { - // g2d.drawString(Integer.toString(i), controlPoints[i].x, - // controlPoints[i].y); - // } + // Draw body Shape body = getBody(); Composite oldComposite = g2d.getComposite(); @@ -291,7 +300,7 @@ public class TubeSocket extends AbstractTransparentComponent { } } - // draw labels + // draw electrode labels if (electrodeLabels != null) { g2d.setColor(getLabelColor()); g2d.setFont(project.getFont().deriveFont((float) (project.getFont().getSize2D() * 0.8))); diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index 40754e424a7b35ae00068207b17bbd03f1aab037..58b7bcfe3c27914382739338e89245a60fa90b5d 100644 GIT binary patch delta 4877 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 delta 4877 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 diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index 39f5e813a4b1120e3fc90d02866f84f5e16f6dca..4159e36d972bf706151132d52da4d513e8168963 100644 GIT binary patch delta 13858 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 F{y(noRonmo delta 13604 zcmY*=1ymJZ)Gyqor39qAL|Osql1>Q)>68X(hd|@2%#FxgAT6_r{xd!D+qh420I3P{IJo*qEea%+`(8mJmjJWlvMgWX-GEiB^Xrm)c9*T$e3V~r(LeOKZ z9-~kg{!kQkQ;e<#6j0$L(0Dln!^7(!#H3h3{!>W|MbS4g7`_3bel;{P+;=ua2-vRJsHdIf8sk=_6HA}-fhAvnGy4ieS{h5r!e2|G`YPli*$?$F^g;j+P^nDEyC z&Mp`JRp0?%5dRq=0CYOg_o@5k==f4#^mkzNm@C})BpCO26ajWx53QU4e&Sn-9X&p(q9J* z!=i_z$LM9C*sxWR5Ko-JOU4)o70xGfHpC3@5RwZy1W>|TfPnSa_ymCg3F+-X-U3!!Um!h9IOS~us3E|SCWbx){FJjn!Pb1`fK~tw zGjBoH0i7Tzs4(EUMg|%KD2v~Psso}hW9S7SLf?m)0^L~jhH8Sbe4+M0?UNJ!i?x{q zeGDjDKZBM7Iz(wuBm+b&4JjuS5zw zt5_Uij99EQY=s^dCL;8@cZSRVk1z8gjhWF-C?#t&wcldAspCkY?5TJq;pJCZRJe3`oDA1#zGguyw9vwbh84y`Q;d6kp7zG>+ zB+x<)HzNkX`8|5waqY5?vCzv_UmoP^wJ2t+DI1&vungsZ?*h1-#o@!>x0SvBUpjczyC6pOV_=C$+^cfb#f+gOEPXIm_zrinn zhlNA<7hvBF!4L!hwrL^+3)mTao_)FbBrK#T$* z?rb3B0AO)Dh){ro`i|fRVhJB1#DPI_`i&Sv0@EV-A@(2RW$_Y$X<@+R6C$r-y`V@z za2qwqRE~vQzVh=4F`ko`uY7q{Bn)E#MN(lH2T>&0Z*XJ`kf|RbvJikl$BN_zIEtJ| zLf}D%7a0UV9p^{V0l+?sAVKgJ;z)6TlP--60CdRYkW@$l+`Dn%#_GgnGw&h!Fn>o- zbXX5nBp0B9Q9}kJQ8*QjyF#m&Tr`p&Gdg`%`2f;AS@k$pVOovXFzoW}T@(Rs$k*HL?KcAZsg9kO&z6-_qv=G?yLp z#mL`Q1dj!r9)@%VMTY$~j0^xj@FteT z>3c5^%_Ldy@D-hrZ+Z#qy6xPQhp_jlb_G-`}pDwL9vJS-`uk8W3R{O)@wOV zoVbpmuR;GXDtWlCNsEw-JUUB?;1RFhYoE#+&)z2R$S*8Lf694}|KnX!p}NqZM$yK- zkd+L{_7B?0W6E~-d<5>ib@LZ|b5U7do~d`JJU~?@&f)oBfY?ENa)Vdt&F2>JNlh$# zvNC|Hm_~fi{)8e!yjrax!9K=18#9xOnaRhnZrlI4DR`fNwwYx9v&DPiFTNIzao8%F ziQmgdbSG7IwrDlWikLu~Kt)T*< zt9%Z(OuR+rmkGcAQRHh+9ggOg{Am)4ZW}H0+ZG{y{LkCaZ^TiQg3CeV5I;!#!O0}# zu*95GKJ%GcRs1@_onn6g!<@4*q<^z=4BKb&B zk!{*;!&g|&@#j2wu9=o-srPfVtC!vX@JN%txj8RmtGSs;3Oa33(UusZ>H47LZimSe zinHlE|%5xT=Px;Z0*;X~=m&;#@>DXK zb6jq=;Rng(1x8DX@da^e;TZ{|T1cjdJnIk*rRqL0uMf}Z{>96dll{f#<$Lmk^vz$M z*p5OrE9M>9{gsa3Z?CpjS1vBLe+%NxnGz`V=Ap`j1ZsZSUOm|j5Pw&N(eh2>ni99jw#XfMEegAJl=BMWnEQZJ^-kTDVuOVlf8TfS^BOAy zjV5?04U%YlqF?e~8yIYAHHh-_?RcH8&6WC9g)q=R=hLIB*GJ6jOf($OzJ`K}&FsIP z)4!q1p!nya-I}h<+ZN+a^P_U;RStn7-9$sDN{lkm-J%F1264`*rX(uU&MXJL6Jj>&?0k)mQ`h1D zD1uI57ik=gH+4|6$b2wNi#`(B4B)Uu4ZIEW#nd`J&*xd|;w?sA{3)c%cb}kL*TERi zxZQqG8JzzmX?8A6c=XKH(WQiEpzQ5-N3;G1VUni_36{#71CzTh2Xf;fRVF?+C1=jC z?SJfqZ>uot7s@eCk{)j2HA1y-j|z}Hgini4(odwIJ`&bOY+MVRA44CJJBK}18DWLI z7`3G>l^lGtK;QrLT;j#C`l7~67NuNtR1KdqBy3c+sGFZ?oO3Pt+}%-c_h{wYwC)j< zM7c$vFg&xB+O@!J3AuFJ**?moca=?h<-F>4vie%(&N2Ckn-@*jVj=tgo^saL+s&Dn zlvAWCelup_6v>RfX+3ONLbj)-@Ac?W!08>yZv^D{zvbTyEH*j%_gwhB$+zt3xqt~J z#(JSL)vPEC*j{Hy{S#t~1juVlGd2R<{B`_l~`9Tk<;I1$fq*M1Km zK1%qQIn`K$z3-4{-MD%4%U;=!4>#`)xOI9n&K=&b+@9C+Md#fFruQZ)-!V>FK+fh0 zLzlG(PrBRVJ0@-`6;;{u&AC#6af^F4pBE|YbAwhH{ao*0AHPK9F&GeA?;#J7Y7)_M{QeI_mX}gWg`P7fM5?1cMl8+;p z`jHcJzOebD^xrEjA9K3M5W-ly<$=fKWVD2iu^8c)Kst=x^O>jkvMA=iOnnHH`GIRIe8h?-+6k$`&kS3(G{T)YLCabh8)3267 zz0YW~FN03qR|*qXyZI!5^Eyv}=n*|xQLRDQ_1b8dQL400^8vx8^TV&UZ;M!SqrS9} zBkE=aESuI?U3m$B7|D&kVe4w`<1;1YY<2hD zyY1zBtCOFiuX8+uJqzQF;f6x8Bs>PLtf4CMq_Sj$MY`N(LCHiEe z_$gFA{h-~7yVj?_3*EL#;JS&0K?UH``0M>J-Pjlb5l;z*6da_8J{gG!xWj2{P_%S{eUG6iaw#Z~Q zoi_U7)ApfZ*5DQC;$kbUJ_VZRn^H*kjqk?ptzJzlaGyhwVDy8H>a*J`$3*+Scmx5M zjswEZRN;SAXR=dWjLW}?AGoYG?2!}?j6SfhtBPL>NKU(HIWqN(Xzw5h?%^3uFE{bD zGbQ+zFuBLphCtHk_P(#-rqk`sJXgw_UpwDLV>h;6y;_O(U#Fq%5%m79NxZ4!?$_=~ zvpVEs>9@HO@RSn$eW>oByY6V&-MxFOzwYB>(tw=#(*rBhzTbgo7BL55M3A2(G~Wi0 zfoDq6XWH&eTU+GtvyKAhI!6kI`nsTbmMkK&O`e{eD;`plQ`n#H?>q>AJ#9Y_4q5Kr zdvp7I?FN%fU%`t<>(~dLM4_?%q4V8)c@oq;v1|UD!XXLUXtY(`L}FS$UC%!0AJ$uP z-kVPkxhGRzGX6A#qlb~9ucrhVeiF-V+(Z7I?cVFPuM?Ad?*HoXJ4V$zecMza7JW2V z@DzT;DBdp--bqw#DUaw;tZ#`yDskNCQLVrEv*?etRq6 z{w96y*H!WOsbvo*voELB$+{KNpHJUogQR4{q>DKjb}NW?mLmUZpe2foPF=cptdtXt z{dO?U6I!0z!7F)H1WMohYfo?HcMQ+XD7aKD-Iva}-AONle*3+|xyj>e>i6r+$PP3M z!>nS1lf7%bX4QU48TfYV5>i$5k?OLA^^zn|C`={9f zt{s{eLi601vKyjdW06pNirnGDT;)8|m6|(6!jhs-&|a^l5GQ)Ytjdzh@7VtqY`uSc zabL@JW9Ns84Eh4v@RboNE0_3DHA>w;tcw+`{AKJw8v^ zZE^UmZ)(1#nhbaDar^GoMmDzxcD`6A#6YIV#kDW!@ozf$+*(Z?Kb{FLTzLW;&7`k3 ziIYQkWjd!isGfz$T=~NJP!F5->^qUO{$@9SKcp7^!MD-$X2s!PrQ3<-CoEE%NF>lu z$_I06b$0L^?YvvT7M$@S!+bK|i%K!`oSeh1Ns5*zwZbXgScy(ZEl$rp1 zzxrv3#0(b$@#s>qlx+s4T6t?<1dc9V_n`ih_a{)l4@32*D?-pvqOgF);CRYH?sizw z3ERi?53WlO4+d7Nc4fLwu2t!dm#kc|+fxp~fBY=&1)B3msFvfsuC8M)z6xzJxY(w- z#dxTpmt&ch=AB~XkA>4yPrWnB4ozBD!gK?F0nzgFNhky*9-t}x8?>$+yMA^Ky7G~y$D2WTslDXWapyv- zXGn-mZD}LF@K@7sWZ8cg7Yom#LWC2luVl}$-(90lRtfoQ>NrS~K>BRDF)FKSg1gb5 z^9}{$Mqiwz%j{x~eX@)L{&!W=06uI^*w^<(f8%7Ypha!e5eBaEtVV|Jb*NJBddGnbHEDl&Lfxhd;a~ls`3*X1rf7D)zXX;_nW2>h zW_`Er{t^AF($`b@^VXl+k^f>7{tcolesXn}ZW>gh^$*t$V08V$6+*@4Z*KND%mzHH z92FzpQ&8{7^<{Ni!W%2U%Cn`{)oMEQZyo(A&}``6hIx0Rd9-D(C}DT;X2;L`gzv`} zBd^Zz&tyNX68!04i{p1p@;}SB(qoQ$X!MQ3KR^%hz^}NtpP&q154uM4{KF@mB+3Al z@&oOKmuSMo`pW)c^T5nlKbuHBD`j$0BZ+8DYC1(u|H1?kZKz$Qeyi4VBFA z_Ct*(6;-I42qGjXEm&wu6DVR%n1_GUNAXCHPN9|Rb;)1I^DzAzZc+B9>*pLTPLQ;z zWz#Sc)_q=4WPZ229&;ERcFla!q_ZU9+$Nlj&!|D~x`9f%geJ9P;!uehb!GWg&AUGd zq-)|zE6d4S5=@8JK3AHu8dut+mm8{dl^ZHY@?DEIqh^{>HmENzs@$wjXyU(Wa@XW~ zh3S2?zS2!;BZs@!+0}a`B`}aE(VPr1fkUy1qI=a_8~xEFMoi;p8agArY}bD+I6O^F zn`>N2RQsp9Hp)JE`)e-Sy~U|aL4TVAMTCg9e1y=)=j60QFLpm(PvDhhE7MS&c!bG_ z$qs59C{?8r!6E1%F>UF@M;Y1JO>nx6p%#o_u#s^5$a^}^IN1h1;zjj+~>UbWC{sC}x*n8e8H##zE!)%0^f-&Q_8 zk8@lyVVY9bwuqJ6FTH*D#iXC6q2Zk@#T`%hjFZv($3CEBO|pwJZ&4BnU(F>BLF$0D?khMR$ikj$PrUc+yhBM> z*+w%mBtg`Tom)m$klSi;Hg82T7W9`Kv&37uo!8@O(<<->2HB$Ak{xBzycN5+v^m)#4G-(rPX4BGQ$c@v2g@H% zwCj(J$t;^@Q91PG)u$P>N%KV1^}B0a>qe`x<69zW9LQQtY4Ya&F(6d^%6jhqeBjR==Jp?E-q8la=Q4aAS8_j(333J< z{VtKzm1KNex0&>$du~VCKJl%rO0ij=f=pOUqf(eXI}2$<>Gk=bE3RVo%&<~ovWQ4D zJ-2onsiJDu4`IDqrcXR=C1F{NNNWnl*FnmwKcEjMc6{+@!l;dv5CN>n_wxA7eZ)?& zi=IrAk))>h^aV^e`^lVNKD5G$>ft+V@}Zm2h_nK;h!-{tqJ2J3&j(EP zEu3v6i51yqbWFDxBDcs#KdLh+D>|-vxduL8de39utU;)w@u1*JTvH6`z~bL)FFBM0V@svjZg7k&NFSUrX6+N}DI-3_O9Lr~^ zvuJqsSZBTxqBUL1<@PeN%g*9AI!>EaqzaR&zQRAXD=U&umeLSFYr)kLlBl)iB@w10 z5w|Fm5bcRF+tA-H`KxLpBKl9!bJH&3uNlQ0u|qvCg7E7v#!fY@nnA*Vcw@MjEz_U; zpsNx{pPd*JH3Ey6i4C#?K7u*3f&rJehCAIY2Y2=)OOxEgCO_&G_I?=}LUXIl2@w8? zN0d+yc6von@d~p#^&c@w$VJh`Ej*O$bC@(&zTdj;HQF3-ow?sN5x&OGc;^Nw9mT^I zd9Eecp{|Ycsp002y98e~Q>OiXJ#f{q)J{0K&Kz?*Rci0;ta3E#?c@A;(2$wc<59hP zWT67GAT(QmmNwz(wNFmhF8tA`Yh!O2@Na#el!fIRi(JtzyK8drM}kLmSRtjD?u1#P zu()`7k~XP#Po_S(H-JRw-TO9{`2~uw7(&-E3bPuHu<>-^u^K;)`cadknh@LWfj{@p zxxLPW+{J2Xf~}qwj%@FT3+9~Mz7-v+B>q1B4Lx7|QH{*U-NCe)C>^sl^vmA+R@&wP zLEC~EX%&vK8w$|H_2MZ4aEkD(?;GDj8^H(+`N#d-mT3Wdoz5jhSb z>pAK&?P~La>{H#Tit!zz`V48Wf6>i;cN8Yd=bku#ghE22(+^xu`aPz}dWPsXRF+8u zH}rqX@UBkS@OH9&SSM4AMVky+1Ze*u|I6`Lk?^OIbA$P#Zu-9(@B1|LZan|x!EQ=& za4XvoWyAX?FNie4AO0uOxCS=1AD#pI^kP&UNhEh67#np4~o~(6p$7jsqz)%4cVU9r+#FS#nY06GA&Q6d32igMDWhu zON|pT9ul3_+Urc`N5Ek4(d{KWYDEvc${f6whPR5HrNo~TSJ{O!Y0Wfq?ht5gyo2Ny)P{YgvbN zs@y2U1{9Ge>D5iCy$4U{4*YVT{PsdH^=JK*xcc$T^Xgw($B%+SXryKDtDh7Zn_ncJ zDlUnngnup~@$p%|8N@zxKS1WIt!-L7R*9hNTzjfBGgfZA5)7hkzbyJ7UKXrf;uY4S7d2tUbt4vGuE2Vz;WT1Y zPw=HTmZZRzU3o_P*H-xNdV*7H(dgAG^|HxSz%HZFh zjr*nsdwnE_!?9O5!Gufq8}YA9dOT(=_lF4?5J5o{ z*G(W96Ct0QD4aLSZR^w9rePiVtv(s-T@xpK34ZPx6&C2xO-KxC8t>kO=4Z~K;jBT< z#WuAv^m2{>CrJaJ!dv5}m_A>|5ySQC6J1$VHezbL*6S<;!&e($o2BvO-R_P`$vFq5cyw}jhQ&Vll-Q3|GH1M)S6I5dK5!-&}^SY5F*TUK+H z#!AG1yypq}3bPc!rtUa|_~;*HD#Gh!_)pgx3bQ=ahx7!8IjF-NU1qPgSlJf4saYyy z9ydRF!|fzusW0BLV4^!9^@s*zA>5HK=JbjnB${CPp7CFfWf8&`^iY@Q!WfQlZ!URB zFZexEgm`TA^|JC)p5^TOBo9(mTNv$fKSr+(G)5uO_3US@0|)09R?PT~Ke~SRr3ZK9 z#;O04r;N;nIB-(*UUyb6_MoJ|vD^Y&-q3>0C-w|JJF4IFzKbm|nFYrozPq%is&t@TNO5Z$rl_x)P zTeShMY*yTcSh{I*JAXUorg@b$^4^*t6jSC_PxOsLz+cbPmwVaJ1n+G2jNdm}FV^H^ zOO&D9lY_H=|LYgp*eFWW6#?9>sSJ6P0`3|xX3-ZVd3i?}L*<8(zr1gUG4?|V;b@#6 z>LyO!>xYuU(La7D1ss+0M`__`vOh`UeRyf)og7Uyo{>LZ_98G+Tvc}PG|E+aGQFgd>b0}z!LZggu zYfCiB0Y^vBC^sCv8HRd@qeWpTGaUUFhI)Xb7U3vU9Bm6n-N#X?2$Um^K8`@S;OJfi zC|8aIalME{SzhupqEIF{@x3U}Oa=D+Vyb#KxeUadt;BU^)h| zV4BUbpgu_)sOSD4eG>=TUyldn(eWV6jd;+HRs!g!Isx=Unh37l6G6T4|0q`ym_}F< z$_5wzQxb?qI1?)y%3d$X~CP@Xud8LB-OR1n-Ar0i0rh(l=JqP*j&rz;8yXF6=Mmnfhn+|q^ zJ_AfUCIgK7Ed#W>ivhdaivi>CWrFh5Oi=$K^S`vRKtB`zQHgA@447=NY-ibEIgE0^ za@FOajB$97xnLXYazTG@a=|w9<$*Lh5A?s42ewHrAJosy2jyq^V0-Sp0P`Dp@!wPy zfN?VlP`bD{+XbM$Vj&o(rVzw|EJEqy<93P*(%vgbAqz>-Mf1vmED z`qQWd^Qfu?`6P89ez*VVR2}F~tR6fyO6x(~gbiRF?HWLQoedx^?nV$-LL=z+OCvbu zcbmZZ9c)7R;PQ}c2K^Q^1MxCiz%g=b0oiX`K)52UAgt%DV46Q$LHA}@kalB1K3f|I zJE9HL|I`MSU+xtMqu>f$I>Gd$yFk5? zF0hS+-JqUVH&~YU-C!KK9+W+Bov-$O&ln4aycF)uLc9LFD*Si<=^`RH^CEo|G z%lp7lhxdb{Xx5fRDCZvsd+}r(to8SCFu%JKARjvc z>d{Yvcpp!K{`Mw8e@0UvA3Fu&V0{hZh<^>{v-=vvYw!lltLhEdTf{U-t*1f#v1!l` z{|u-XHG?w!A6F_r&!F^ytF6GbHQ8CzRfyv;hI|gig$bEO(Xildv;lX0F7JCjxV*3| zg!ljdl!T*CLDk+|;6=Fqbs^*bTj7<2+heZGU4BAb4!q_ZiUCqX dfpMNgiQv|GxOI;lreh9u6M^S@dE*`L{{Wuh2zvkk