From 1cf0b3c028e9b8ca38733f45e6aa209b359a3677 Mon Sep 17 00:00:00 2001 From: Tgui Date: Wed, 23 Aug 2006 04:01:45 +0000 Subject: [PATCH] Updated enginuity to use singleton for ECUEditor for easier access to MDI git-svn-id: http://svn.3splooges.com/romraider-arch/trunk@255 d2e2e1cd-ba16-0410-be16-b7c4453c7c2d --- lib/Graph3d/linux/Graph3d.jar | Bin 34474 -> 34748 bytes lib/Graph3d/windows/Graph3d.jar | Bin 34474 -> 34748 bytes src/enginuity/ECUEditor.java | 67 +---------------------- src/enginuity/ECUEditorManager.java | 13 +++++ src/enginuity/ECUExec.java | 76 ++++++++++++++++++++++++++ src/enginuity/swing/TableFrame.java | 14 ----- src/enginuity/swing/TableToolBar.java | 24 +++++++- 7 files changed, 112 insertions(+), 82 deletions(-) create mode 100644 src/enginuity/ECUEditorManager.java create mode 100644 src/enginuity/ECUExec.java diff --git a/lib/Graph3d/linux/Graph3d.jar b/lib/Graph3d/linux/Graph3d.jar index f04d1608ef1710761c210f170706e5a2933cd192..fc655666db758e00b0446b365e6551a6e1462321 100644 GIT binary patch delta 11589 zcmZvC1ymnB(=YB)ibHXCcX#(9MT@(;F7Czt#ogVlxL0te$RBr#yI=ae-#y>+-g9?P zHrdHcHZzmW5f%q56F7nSo2;;1u< zx`l5k8{2G6!nBtRLli9v2BY_t9hcROyKd)kZ7Rz|X7xK(cKpiyFZ(^5TbN6FJFYet zLV=phjQTw=!UWOQkcg@RJVH~%oLLJb1jG&$1jPUP*DV5v3*uiFBZy2C3-kno0LVGG znY%a`+ey0^+nY0++8MjLeo+=ufEL5bN?nP_!KFw!u%p!d7FpaU9Z4JUB`KislMCU= zjoE3zy+8qhXc}s{b?D+K&7z3GjVBYIE?Fn2?0zkGsMBCNFeq2+8J- zdMq2mlnrU;(_mkQ96X|Flh9@)8~7Zni#uSY{ekeWk=mv|XMo?#p$LioZ!67q{2l-F zAZ2)LfRZD9B{Y<>HvxholMFE`kQ4@&5)vgmkdjpFql1M*QqZT(QL};eCiT?l`Qnx# z-7ifz{>>g7n08fQ!)D!O8@(e9y^hw8MyU%6H(jOv*U#ggr;1vU&qt81J+3`FetQCs z_skQ|TM8-|Q%LTqnOHMVqKxXcu;k6z&W#-m0G8~m1IA}frz12Dn=tUUNrrdtAFfAR zO#gf!BhlEH!<1DorKlDO*d4nV z0t+1GG*CKYoVCA%7wrIjBGVfj6UR35*vx1c)gamooKeWid`+#K@#+aVx!-^qEd+`o=Lc z)A{qj5g|RBK~#&v5RH$;<8;^!J#a;b_nRe3=R%N>TBTzv{z*N%Tey-_4HZ5-G%Qey zvWa!_Lfr^Pf>uv8X1LA2vW*jh_)LoWK_2?JKF8{v>l28Ip5k{wamPq>%vl$aGr(bD zK!8Nu(QEYVl8AlyM;>adE#HdPTX^Os`d3wF)p^7BU!gsjIp!VtrPuX&JH?E;_LE4u z179`k?L3*;s<~+6QGyOphD)J>#<|KOEs)&0#fG?>`tsfrE?KG4jlD1H%Uk4bTFm3) z98tm*TgRlkoyO5+0x@&{lyQY!vH(=^laZUidET5xc?u}HpCy>!?(MBo#VmhM7Q-<$ z<#UJNO!=W3e3!fkXcLREjuO=-_-H%9hRQz@4h6^5eA|S=52A-Tf7 zs|sDSrzOHAe5DztlMqBum}8%vf=l@ZrlK^yk;{IX?D>&ryRZ8W4#xC}WF}Z{h=^aVL|i3VTNp2xD9FGzZRo>UR9ny0#heRpsU8 z1h#Y$)9jo~;ohb@uopiISR9a%Om_@9)XK^@CUjQ|^Qi zW;Lg1BibW`H%rh%Fiw{y2(Q%mZIH>k3U>nm_UbLV;6?`|sp{Pv*$!++uH}Ix^C2h; zuU35YUmY_C!SD;hdsl3j!V%DsaitcCnZ#!FV+dZRjKocwO1q*}G{8Zzm@X6hbCDSO zROz}#AHHv7xm~Q*Z~x`dvc>Z2UrOi#iMr@Kq2yYeLA+bVTURXPEh-dfTAbWV1ef?B z#Dx>$rh)!4D~ENP&J4fb^M`7T6F17ijrizM=kn|$UrA9L?WLJt*IUVyHPSdN8QbR< zIurEaL`ZDyT6KJQp8=>V#?Y5!+B^D-?}`NB1rW?NTE^jBQTpSLLL_!bq?j=Y^jl2F zg>mJbaME)b3sYWWmmK~=UaDqp{*Vq0P|8zMAGa&}*1!bfUyYMFmhtJofCYD4u^PtmU2l z{O!r1%VGWe0JltF#A?MihX7vV*@wT9C^4~;Qpg)Yx(OBgDNQqrxl``dcry1u#9n#- zx05j^KKlR}2c(5vH2-+DN$t1(tiYBoHw$-y#?a+I*;atT+-t0TAIZ?5%jd5%QQlc$ zeY9&9{71QC)?HUP&$VfT^3H*$cxThGf8M>Hn&EK}lmB==VL4oiUTZkMX~$C-NiQ(Q z8RANbK;EM=p9!|`rTrj})*B>-Ba544YSGT;iS!XaNsG&CQKHgd@7Zs}l$T|XP`{Vs zvkC7GcViE*iUO|%%kpJtpwA5{w#lt=l#$(w8h6>E?uT3o+dQplG2DcF{IPvqJILU7 z*dE@Wtv1=KX07xVw7%kRZCTdyUh$?hC6)Z0`rj|fpbbfxZ7+AnR8{l%2iC(n5$Xxc zu0HiEGp291Pe)R&pC{3E?!lyAnh0y$RHm_`;|=ft&ID=t)=t>kTdF_F4?Dz-i%hzI z9c3hzTOrv{-|s%?{1)DK$vNG?Zs$kQ<3g-l4h546p3xf~?>5eOcNp-XkTS*Mb%sxf zMHQIZRxL-zpfOgb6?CVq?CiQHTnwIk5#kNPzGbx=1I=5p)b3n{(v zW!iQ*Qt8$3po4^oJhJoXVuG9y+U>mW(D0t`O>L(+PblY~4Y zC`w!p&j<-fdp{4Wh*xobBpNNmTP%D$Q&tUdNo+HX|4~5~lw-JMWZJX6N8=BN-XasA zI%$i^qarC_8XVfurI8Cs4@4IpbS|>-sn)oQs{1TgZ#Q{zADI;THC&EIV)8~WaX7}k zux9f~Rb_||g$|Fq>C<6>Qi>`e50Q+}I30>MWxsFK*6tjE{fIscl@T}$sG$U~^r#H? z-GmxoaqZeUsY8EqE$riAlkcuN(a8lUZ+^aT)}Z70F_82{4{Dwl9Ve2}o7W`#kQZEn zwSnJ8)iq|YmOB8ES+?fgCG_30%GWY(D=Lpo(ms=L-IakIZxnRy()w=CfAks1*=)1J zCmJ|0C1Zo2tt0S7(Gt?(lYu}Iw@Xq=VX%Hk{5j1Zo$57hxMD$(IpT4wZA(D!jx0oE z=m**PH|(fuT}(m4_Q=(v9htishZkJhYinnMr?R52>Ri@`P3_jWyN7GcmYzfnnJ@F* zX`Osy+#8exjU>D8f?fK-o&tY#S;yF5GP}BsYHvR@!Rf-c?}*p=RS1MDb+vQ^=T#Y& z1)hF&?NwVBCrXvoIWtr_*9HSm$!>V*f@|xwayX>wqN&|${TYsUPqowbZn_7VBVOdV zYA4nqxf_m%*v@I6tu>ZFrw{{4PE9HJVrgD+_eH>72{K`e{e_R7n$hDq%cA-H4jO`7 zg@`p((hKj$IYpfpoe1KY*o#`E2jdpGy0tZ;_$W%-&M`J17eAs$77h6LSjYyD&tszN z5d3NA2fwIB^h}Y&N=+y}KwGR_(3o<)?CMO5e5MLoR5ZCIcsgG$+V46Z8=QQ`aP1|D z35S0=PU(Rcyu1xdGRQA0LEJ->d2fxxBPAdqB)b{PP8vD;8zGwq2*XEx7<0laMG5r{ z?xp-BZj!!AhU8NxHVCxcUjNvjE+&Yky5O(xI-Js}dtj`t)aC$|Eg z#*T|d>ase!ZALnX!Pq4scuE@V;N!J}&|PNt33BN0Q2UvR`oa@n{!yi4^qca#!>%WS z*TFFn;#{ADNXN6ICyhVVr$w!vin1Nk4kj)Ir1zr}R2mOqc&5+gmt-uj(ZJTOQT%cT z*?h?K$okraToK?Osf9Rl!Y^eqPfC1@8nR}F6-NAX2+^@|`T*1o=kivs*IvoR5r0GZlE`IS#00Yl;Ho644X0HC2-<7e+kZ^|rT9#e*l;cMzq z4<#o}l|LLj(|=EqeoDUB#f=TCRykpjCy_##AI>`y>M!q>tT;r+YnHAVFB;$I3#u=| zpJ(};PtW-=(TSSHjyfr`Ukj#2m6nnFqg;teMf}jF*g>{=*jI-!z5D59oMUXQ?rg%*1_? z3k6%tn8Mp-t6Mq3Q;i8C73Zb&DHHi#O}W^j&1p?}%*$vUb9%t3a79k|mvZ zVc>zGoy1xNAQJ!9j!32tW+dx8=X~38f&SgN1e7V0YiX;n;~mA!5132tXV?7=2~l5ooxJlv@-cL{B2Lex4mi0r7KZ`}AIpH((IGsuz`di(E|Mra%}@T5Cd>zZKiY&Fuhy$>yy}b$0Q{(>R0=;g-BP@Jbg$G z;j1eJQJi*IXo>PKAwXcr%V`>oq`q&k@B*iJm%Zk|)g8B;lZxIoD=NCRTo$N+g)4qi z!+tIdJa9F~kNdr6id%fmj)9gIuf$S*zs=YuAhLVU)%fOC{c6)CmqCh!PeJ1<1GOus z!07AbFRU)Mhn(aB5lw(u;#uCl!!tyRB>b5;40RR$v7Lnb9DoSDCzbS$)jiN~gB5}b z5<S{!Hqg2l2L&aqh3{kba_29IRWJzmt!RiBd?k* zbp-?SOsRZl4(KYVh$;0z!9Hh{1f+B|O89e`Boexq-5Xhsa{C`bt*1kd4ww zFzj}YDO9N2eb6~dYB~E3ZQBS-3z?wNwcUa>QA51Z(6YGLbw9Pp?7h7$6X9(b{Y=q` z2en&lQl!&h7n<6NAI>(~?4DyHd<0WlHA1w}Y(J#W1B~uHxM=u^u`O(+Zz{R3VmR1c zdPm%EV)0b}+Tt(dJf&qK+92BBF<$+YD$?JvCU}qb=_i z;TGZ|_|UcuKNT zKmcuZB8MzAeo|~nG4&MYmvH5fk2&id3uZ?*6t*t%jSJu6XH3`{8q~`MyXd-m#zPjW zg;k^8Ge}Hd$WH&^7o6*4)}xz?3IFs2v!V6nTq=t!?Os7pd^0jfvGC_GWYjwnfF$VX z?!w#4@A>JXzeJ4w8474j%T+pW?dfIt-76?d-7`%kCwtHO`q?nwG9m7#ufMl3m~EJe zrRo`GjFzR!TXcOVqzPd^pb3r)ZWVrd$urm}44&S-_|Ec7NLFSTSr4vUE!^V7Ka%^m zYe1W__{2QcYYp=cxB!;T+^rFBAoz8#u3Y9&P78&s7gp7oB)Fhic5VH<4+v;{GIW^`819)BvI&=6E}l25#><|dbWqj^Qg{?^IVqRL8vovkQ-5SvD?K1j|)A6SI#gE4eNv8TWa_?QPIE8qt zo{n5No*TOCn7X_HSC_qQ|0`i#u2b5v8pU{C4mMNc`_KSu&pe|C4}N$@qG85Gx<1mi z#bQlEq#|u;s-M;AWMKBHHKdtJxN_32UC1Rp-MW%}UVFMRBaTbn>dAUD3+qHo#b|d{ zI_2`A+i68>I&cRi>GnKk5OR<;UIv^O}7%`n=$n3f+ii zgC~P#{fK5<@6rmj=DI!YHnnWnpCOoax{wUxJIz->i7p~7`qN{bZW#9c`Yh9-oha=3 zk2xEzJbZ){jAl4hvYx<6CgX-kqms*6zCeo$!jC0P9cen%V=$vMqQx+KO#Dm9xHxF) zZ3bE@YJ#b_I8jIkx_a6ZJ7FBzaXuZUAMe~<#QJ)I6!;MP*C5n-WNOagi(Y{u*e4p@ zQ6L|Xe_@!rSWEEilsdY%U+M*9PR`>jYSyS3Fe_S%vZ?Gp9&x&Unk&Da8T6Ok#&R~w zW_U|HLP!&wwBxzNVV(q7xQg-pX>dc~oJhjaeCjDe8p-Oot13phy9C?L?L?S73YqF( zmMd~g1S&S9TKzSfIaz=V2b~=C4)wzZ6QEh7cqv}pr0r&9)2h1A%y=>E*5)*Si@)DH zip5u-cQ2w?;>S6t<@9vA1_l9#q*xt3r3iZ>B7R``+w|&ps#S}x7|v~#>QviWjXzZz z%Vo#%KMl*6+c4j2;+y=&Z_;Nfn6p8w4uN&}sM&bT8Hmm#=S6=m=-d~^|@klal^Lr+-wvgr)`cbkN_Mlib zThheDyTsauxxkdC{Fyu$J(_|)P{Y6^CvC0Pfr(9F$TWjoZ9AOYsidFtFf3%@T_?Vu zp?h{Wvx&Qq|5BePWWXnlgWF!bN|M60!!Bj1zC-`GxwQl_9GFb=7x8zc$Ug3Ph<2ak z!8%nAVnRk}2?N^Uw4-BU8H zDHcRC)FM$dax6F*pS!g|ePA!C@M)Xa8M)bs?eS0SKz@wtwO_;dc1;9H&=#BszV`3m ze?f*VeSk;~T)IExrd>P!_{BiGT%b%DtaN=SVR~{!z`keybLD``>~GQ22Q^)wD||HD zFvPW#CpYEraQVv&n9QwAfcO>t??EM1Ehn7D2M7o)-hZD{iuEK8@&MHz?KKEBu>zR4 zVdtr+CZ|j0aCD0iCu^|fD<|a@!b(DMVKpGJQ@6S8EE`8C39at2Uywy&IQkOtMV9bi zBY=VPHcx0WiG$d<&ObRqw>f))dwjPmBCjvUo)DgO_%fNj&A~=3X8Cr>^fxyt8fChT z!+1>N%Q*%~$-LxHV1VVAXxYWS){M!a`)inJUL}@;FSkbhNRpn5Pka}l&Ju^S$w<<% zoOYgwr&f&{e5V1cC9THkREx%zsR>r~jlO zW(c;e(p4nq%hp3jnspco%DTkRABrHwpMR1y!BkCi`?jL04wQHbS1A z1w8_~qg;Y;aDek_?>p&DJRI33ViC+%Cp}WR8{>7gwBBpC%d%mj16ZviG^XBn!rXim zxd?-m>^dGdzwfO0Gf@}5E3OQE3+!v|)NsENiz!-|jrwx@+d)Zd&RTE|tDtLmF>`vy zW!Wbs*HF&D~K7`^Kd;>Sa?zH6ZJVw>%Fkh42-OK#*3bB{%s zIVMNij^903+<6#l=9Zp3-!5ZWs_Je{73muxiir=w$WO#d?Z9i$#c%4HYD-BIrHbS?z8ohCC6qD3@Mpr zkDNd8xY|dwVl{evKc2ie6Y?jP@`Pp=$fzm2+ke|=H*}yAwA;b@B`A(dQ@EH46Z0Zn zSZz`r#Jwtdq`J9KzdFd~w#z3E5(t_So8rEr=(`g;ZF+_LJ59({^vt|MLqOmo{Ck>! zC~Z`x)I^4U1AjD@u&AO#y%Fw&@gV;pV2X~yL%BsXZpb)7{ms?ok4gUKUG*X_}zyS!I* z%;NVoI=F2I-oVJ>h*qYUhZd@YSKh{q!bP&+t^N zXuyvfR-Krq_BH(x6&{EG42NwRgKCAE&Hz zRezRH(*(_0*4kbw*k5gZI#xQYm-F!f=Y4_Zl|3=6rk+e?a8MZ@{27d>-J9kavsyrs z!ONKNCHrGlnMb(!)ev zC`KGkyEWf){FAG+>=ZW{ZC7;SzjZY8S#7fbssV$PcdNspQLa$vV|Uss1QSk~0bFM+ zk6a6;WU2nG1aJXDF4a?DVVs;^5Zuph%hXBk9H?fzN*~%PN81J_E>*83X^a^~`FHn9 zEXu1nD?f4S!*1>*ai|1M*P$9aT<5>@u#OO_-`1)-o?3)fE7`Aq3M#y%wfCcQZ$}jb zXeN8I&$f=lbS^Wg=^5vqzJ;+fA08Rju}0w9bw)ZS^(NIS{8|tfV>z>9EEv8GYaJ%u zvnL$Imi8zrAWDZdKB57K@!lk@wlg}pw9fh)BaH1NeQ~sR*^n|cCR@2!+-y{dJz5O^ zqS@IW>e})r>?mN=L!P9qBtDk&SGjLCp!(gMP}@n<)1{EBO=!nHr`>G9&W~`7EW+H; zp1KAto}&7+p25SO>3!{x&|1&*x1$Vf2T$2khv&Wu$(b!6h4mWkN4jdbh~C+=%w2T7jGrX$m(YZFqQv9lRs*jI`4N9NrF*f) zDC>4KLm2E+U-;Lx@s&dtf7?k`$*1R;)KC<@L0nC}&?-q9MeA<9Q=~Hgk#G`AwsrO0 zir1elV>}1XyhMl;wX|m^ZG1Il2AGN_t=1Avw-;HiPH1Q(((vGW)KzZf$jeU0q~WQ1 zZ976_qdhkACms%It&&%tmrwrMZzP}G^xm{sUOMVl9$O*`NTx55A5E2&rgFeQNp?dl zkvF7qE87-9NRh`z{FMB_)u(k}C|)XWMCDd~wT1|$=a5UFzho1m8=&MJ1`rU1hVKaT zwbM%x{fD0t>SWSisjn*IQW1PLf8-)Qeodx8p*=F_4={fQv6eNshCZ(M$ zOk;uau|mYX(&#vJ!#JA|%2jyGBT`72szoiDA*^j*8Z>574Klj^%x@RZt`twt78jh-xxTvMGapg(fNazi2L}#}v-q{t z#Z?^P{t(_V4dM0Z+I2Dy-_Y0fN-sP_>4QFstE+5+ACiyE&rzvC3y>^NIPv`Pj_XfR zsDAzrm|6IbL>4f@11l(&!cuLUqielT%a`}4o!hhAXY9|SkH#alj(KfC?&0h6+OWb8 zPx1V_o_tO+5601OK)AK*SN49&Sd&1&H>X4-Lc=R3RZroAeWH!R?5b`3pt64N(VcK1 zs_GS?7e|U~cDe1ZPuty;Q(($x9J$j4#x?2@F@C0KPrOf(to9O$S;C9<$36ZHF(l5? zgRAjd+en>{LwnELFXO&xdqOU2d(Vuk&#SL*Fh_UA?*%*Mf3Vi@J5$bspY7qUOD&n``4nhz402L(rMiB+shoJnW_`XptA$e05F0iiH5(!jk|P1=DD*$ySPvnDda->YGlJ;el=^G! zqFGw0x2{1P!azW<{g+a74*$rf+u{5p|F+5isf7_jWjOuQM6BryGtMh2@>4hZ)Gtu`uP)FlZ_YuyA-#NN?TVFCMK4X4?&1O2q>tscC;9mBD(E zK3cCd>o*&TiKY^UTi(PXJH+Zi#EALc0uv8=Z>AMJ(5lfke~x1NnkN{h7Oqx0TA)7? zD_>;cE~XlwUsv8RH#hh9W@%_#l zF!`L(86#DpoO&@v9*rhUX->}&_Y`pi}zwl6i(B``FXgc$NKjBP$o@z?|SVYDKya6*dV!^ZxdAlx(9G0C(*2xZKi-QWf&e91_ z>-NY7x37vOM5;CAzB0?MWNX#aw-Y1W#1xsWZXO{Z1DTQ$p7=NpyCuSn`nVns&$wQ_ zsrTA|Qhx?N#SS)l-CF(=I~hW)o=MU)Yy`DuedeHGz$7j}FZB_jEx**dYTHMJm5>Nw z>T>oH)|9|U)l48*pWmT)FY&pwfU)Fne%BgGY5rt8bIaW7-1nOwG5B5tHmPVdS?RYR zZ*lzO0J~4V;vFZhXJ3y`H;&PU6Lg!uYURHKBes{s!q2-3_938C_GDQ|D}VE21OcvC zByn!d`)S5NPXa9avQN&%sJv0sW}L7$yvg()SUiD_5>E$wJuw~gL%oJJ=-F)fV){7e zuM*$Q98U$5^Y=L=c`#iGNE8FMt|gg2WMU;dnzdpfpQql*tQ*5bT|D(ZP4eJU@ZTL zVo;G@xlNj|BmbCO2v?*oTqP%^4I3gcjv;8ji|k})65n!z-7Hc&pT{F!ottZgl2H`b zhsOvgLo3T?Q3uXppGwTiifhAoqege8_^6_)$g3@m>78`t~6kR#VRJ1`~6)b$`q-O zTr;n`sRMmi2%OkX0OnQ!R((teNpM`z<@jkPpNsk3VaXrLqIU%Gko2-vPi+B zYSxYLo8`O%E&%H^tDw#OG;})LB551A??YPAcy>UHm)pzNN;8c?9 z>Iql=*2Dl7bMJAdL{?A6KuolodedZtE6M#f{nf?zW8j-#Z{jijr^Ipcc+Gde#FK2J z^F8oVj(%Nr=AGBoSbByHj@RAtu{MpkBcW90i`SCyrdz6XhHLmI_stB_#rcGW&d6YH zW6Gro8ZI$S&0L=9x}0K3EIkE=`Z>fP;t4)x*auZA6*9M8aJ!dwyu;mMKW-dTeV;RZ1CD*;S<(*10z?td`p?w5qi&S)bjmcHYfH zp0X}B(<-r^mT(XK5B=i{5WU0^POsP%liS7qJ9rv$uCf=~;^SEZlXHc6Eg=os&n`_1OL$QqD!=2q z#AlS5qn*cbkkzc(!vLge2LRnD_tsNlkEe-YclA zIo;K~8FiiNRQ#}OOTF70%zW&nmGp}uY5|Z+#HcuA)TFUxPXw*K;-FWXzofKktx?s(J!w$pOivxs69!EfULePeT>r> ztta=?JbNZ3i($A!9h^^WD!=cBsX*HhJNC6oEGjpOCg+=yuk~lpP<{-#BJd4TZ8Xs1 zm(fY3QHGJp)gUIi-n)jO@me=~fGzF_4!9YUsWgjcSLMu?&#C^hEYASe|uuskBc38y<_+T|9pAKM1CbL!_RAtb4$0iqe`>0%u4 z{6o3g-1Ek9Q=v_yt`X>2Hq*AG)?Aht6RvY!inJGmM4TxH$gc5XT(@L%xnJyt9j1MK zl*e-6)mT)*#8B<%EmcA~+-t;=xbe74BM!Wvq|hNa8vBuIkb>=MOE?ND7Ku+mJ8-PnzQ~#$XK74$(r~l!nezte%fIM zSA`q4j^q2j3h%R?#p7 z*4v{()?!5gTpZ90M+LR%XC&Bne5VhS8~IS znG`o;jK&}Z@wbLD9^(yttF|(`oPp>VVbbF>?tE07@6!$v0cFm$&BxSn0PoW?ZMnsi zp#8MTH5VJK8(;ml9Kjy%W zwEO7j=%^m1K#l$Tzd2!@N+OAMltqo^<)acssp$v;palO2 zBOtC3RLM*}6n7nW@PvBJLD(^@cDeo2W?JEz9goF+jA0>bht}Baf%gYV&*SAH-(I`* z^wj%wMa0JgOJ1S?p|z(H7xJ0pCG z$F)xjp9L;lq0{q^sLJsl@Uq$z-jSQ`Gn8o&Lm8ISIY(37G%>iB?Ca!TS<96CawuO= z%$c%X3mkWtA1lOwg4Z8>c_w}7vhOTI1I@|CwFsRubst!qLRS3ke9FclwC2doD;%q> zi^{9L zTv&{Lz^tK|-1g{})TvO^4ck)H(;MV8D;%oBom+LsOu14V{$>$A zrqkswgojrO`sB$yC3cFy=$9Oat1#G7jrR`OQ_z9zf=~WHFokf~e}DG?y6>J21Pf+D z1FH8J$xyT<{Vdpm)y4(f^*Pw_mBem{e(6!7uORC8b8NJ0{lbvYa9fA48}T4v>WwMr z`|2<{G+&_m$)fflu0}e8Zy^=TC z)fhePn_K8nK9K_0jZ57aIzG+{EkS8Dg0Wk-_}cTy80m zQvrt*C$fP?rm|dXm79_tLf zW5xRJ29|MwZPcDOnQ~3oY)i^kaqrrLZ{871xG?S%A+_CMB-$o(Oaa^ZY4MrLl_jwq zu5ZHk818p6GUT+$J!d%AkpZSknws=SOM@0+?)R*P1&+q}j>_AeMhF~Vxy)LGj>{u& zQQ9f8scmnYRwqDh(BOy$`Iv@f;IjJK#2UA{3BwPe^cgv(_>cL}p6Jg-Xt`s%=7f#K znMzhtGm|V2oy_jf%gO#O*I`yYymi)O__&M$s!m0siaH6^2&GKEeA6v)5j4bMU7b-i zj+gt6coNnv$TFYqO`e^8Vl)k$DSS4$wf?{r$E8W^%e6b2GK0VIAzbK(2oQY&Mlcvc ztbOP2^wG%2^t*govloyP~u)LP@jU2dMLS^0fcU4q{CW15F;p8;^Uk@VR z>2n^R_aC3bdOWTyy7lF(3sZxJSy~RpBI*JfHm+$9Wv7Bhe@)!A+_TXN&*%lk{_b$E zT)a?#aTXGpp_s(mvmm_}4gy4mWT-Dw@ndea3IxAGa5~2NFn=HFKj)}Gz&o7xVsZ@o zi-l!#kYar;^9yr6AM>t_Yx_0AB%YEL+Du84+g`Fj6;R6)OPGE=9dD>%{n8!e=Db7W zS5qeo15$Fdris>)NgET=C?o*IQ<)c$44!3ucgG2J^Tg>TG_orj1)woGBz;yIfssTx zn!RDJd}!+V6>neAC$G+8a!Drn^8?xo1z=G6y$4PqT{YVml_>dJLE|`EZ~vEZhx?{# z-MLz;tf6}JI~&RuWmg^HGH7bKoA;HTy@WyK=}u#Wc1tGdpF3B-VVY+^J^AU^mCF8D zog=$B<1qP67~aWfKnp-3W!g;q6@s!fO2-Io@3=|z-Qr^mc@lW@ z(2#l;xWx}AH0`BfggNkf8UE&-L$S#vV;PiseE&vai{%dK>;x>wH_<3mKEAgdc%YkqX?yja==Axa{Ex*QZ;2EEh_Xq@}ZZ2jM2P52%5=0$A@SGTgh{|zvoul z?$WTg{FXCNAG?Qvp^Smc@|SfEKI&t|--T_<%D$+|^X>>0E~G?0e*85A{B%M5qd^>T_324QS5N-=eg(dC-*r?zdpGAY^6D>6s3emoAXd) zD&K`;QYqpjytn=9_l4f`8nzFQWSi3s`~BTB!mO}lMGIi&kwx{%1}pZqxX0lWONjmO z0J6gu)nhOV3=jX`)z`lxTOyHe=7T|hHCSGgUdILig@tfwMV|YMXH3N?s)*>xVKRj8 zDbEf;uVJr*d*Ut`bNK%KlyI0muhl&la@GeB&fN*o_coh6_plw(_B)d#*G$}rI3E1S ze@|dkuNr}lvM4hWMg>XzZ_A{OtW0sHk~rmPyv&&*nJ+8}3npLUDeG=m&|HTTXy>sk zNSc+yt9LGW;ln=GL$HsW+?C&@vq?O{e^i4HWyG7@3mx|~)*nXc!$%2`3S|WSN`(~6 zXo-545LsJ4R-4{2)-bv;tS6#`@veT4)DMF%?kWcMnu33Ca+*69Rc2b1Y6niC7t|8V zR5}{82D9Q@#`N%9DTyBlN=&549xf7)MD-Wdujeuq%`H?^6)FqY6z0P4DUa2%%HtTN z7jeh0IPi2t_r~Nq(S!NC*)+AXLDtR%dEL{x$#6fjKy3=0hrD<4ngHZ>#HSW%XWjbA zV;GnX;pv*3h^kFo%Q{M|E{bLu!jx*81xJtml3U)5D-?k;v zUse%fSM%Ik=YP`ZrJYfuEtF@DDGN2AhTF^_iR252-913WQ+kywW=p9h^l5n{l=6w2 z)<^pz!H7LROd_s&@S%{cTY27lf|DJ4RC$XM=kg5|@}1x)Ltpyv@jMT;X%!!&WIzjt z;_#1)V2U22X=!cZ=%2qD^z(*ArxH;N*7Se9%BLsaF9nOo@Jyqcghq^sOAr(%i}f*Q z`9?s|y%e4z5mfAywcC+F51Ucct;$il47e0+=-TtwC6e*+eA_J=V($&Wn%k*6J{aj5 zHEAn*JXv0*E}k1KOI7*?vRxpTHv#Aye|o_@BRoe|x5?e9Xpy~Sxo=}Mw?-Vh76ygq z?t_^!KuI{NOV`MVzW(HVJN&E(ipl^F&WLt^b<2-$gA)lEcWn!9)2rUY($9REym#mR`i4sMHd%Nt_-{pmwPuy|vkDB7> zPMU_TBD0!;i;vvP=RhtxtV&CE3`xiC2ov*XA4_id&KN)fYgUK6XL{)+YY!ON@M_g- zAt2rDC{2F5q&b#+>y1TTPXM%Vrk3gQiMgjf`MW`n*T#`whjARJVhfsIpMr@IWe2uF zRYddnP#d2Zwn3WW=1NP`DU-VaLv}3My537yhQjBM_+#EsNkAb zUs@z@?3k(Y)ndU$tIsN^0o2~M7cwQPTO5jD0iH{1N2zAMkX z)(9o^a$vCwn@sHlOdp1XvrK|3Yj;7_)^y1I8ATyt!u1wb0dRFAt=WfC9k8ia5zc9g zhY>IT64x#EN^yXUokCu~%0*t1y*Mi7ZHmj?(%5Jnhk)2X3sRod%!r-atx|{A54w(S zRg41KZg~BgxkN;OxK2$)W%SuO*y|`B-1;23S(nK6G&%20?es!T+oML>zvZc$va=Zy z7sPUp3JWQ-z&z_rlMjcME9vPSmF;iP@{)dScpLS&57j75L$t6A;VdlHauC+2#A9&D zN{J&VRqpS#$0OooDk3%NmjQX!TwoRm5{T@cf6aRx_?Rq0;>hcSJ1-yHND<~E)3O$7 z0M+IG%zwESWMCP$iCY1^%qe@pqfUTFr>#z~cU+POxTC)sodXw;$x=RvO$`j%(&dRnX~*TK~_JLv^~9 z<$A#{tAQ1_AE$6~iA3EO+E2iOjS$|HCeQ?ABvNrAQO5nNX`BV^ibv+5c(pm+B>QVkxAX@v7q)wmJ417hnqmALyRjgx6q|w&{c>GgMmjI;!2`$6%!fnBr&hD zjD9xH)QPB&LA-yc?Y|=H(hAitG^EFE1nR;uiKgb}!PDHv3s@Pzr{+e|B zo_W(>rfaB6WQJ6wLZsXFWmx-~d+dWO_7*nsCqagNcqqAP(L@VEL@!KwPTrt9XC#Ow zpm^a-q(WEvL@EPi7BDE{h^N9$|BT>qIe^t9hv^ix%c~qGJcNAzoow3YTN|{O=#AMr z+Q10>S&Ad(122rzBI0^UlMdl-l2HRm@p=b+Q~da^V%H5>&*_c_;CVSf&{Ry*+Yjy&-CYfRx(E zKtrNJDaOT#7YSEgijF7$*$z9q7oFSXM~DTbe$3s8XUxHZzbx#b;vWbU(6hY&?LYi> zd&%#sfPH>HQ6Z?)V}OttvS<291dX1w+7TO&Y6Hus_s3Fsw_z_NyQogBg?I&dZ-yLu z=^uNI58Z#3xmCE~bLwV|#jywW*$n!v0@J!ihvdj+Oc?NpSE#Uec3~aK4Rk|>nkPRp zS@J8s$Nb|Fc|St?x@F|Qh+rQC(D*l*GIX>u>{zL>M|KLV5c=IJHC9vd=1#Tj4MSL!?q zlZ0256gyal$omqnddmGSHd{ylfAf+M^OyPKoY@DAxjamN4w|t%^Nm+hu2+)$;!49O zqjH6+amA`}e)*!!@#|4r2X~wi20Xzs_Cf>Jm;E?S@OQ`l1(jc4jGi0Sx=Z3yQf6(x zilMf|lzSHWJ{8VAeB=)TmS(xD!%%os0!i~aNsr})Nh4aq?L&foM)J%FwTEx5v2HX5?)n!MK!fX+`LsSf5ziDrVX8 zOI?Z7_B%Qr>QZ`_dRW$ba~i z_USQmb<0%u8DUBM2q!eWR?#{|`C^FM<8`15+%&osv+(tjbf8~&neJiA7YowXL4VXb zQ%T5b^JMC`XR~Fhjo13;*m{k>8`=++M{y{i9*`Gj{)NDL=FSGflbF+sTJ`t_a6pk3 z!S9DL_yB{5F_{;@PV*>6yv?B4OXK-xu;gl*wRW-&oz8qE#@xFG-RVh*)hspedk?}~ z$t#bvcj0Y{@#}xFS0mDd8`h>lbEu>4tYfpN=BHni{SqVCS|lE)&l9U75;_jcw5?q?Bn7yP)zcr?_H`Lg~!3)K6`;YF%$BvHIy|1v!w)vaT@pP))6vWwh@p z)I`b0>2k}pnrU_67iy3fKhLMPS!v3>{OB!c$fI>w*(+$!8cG;>9|B@ynC&T~FFT;f zADLAxH|YU>K7HUYKS)wsWv<&F`5U6As+C}%nrqO-Zd$=gGxMPnA>EbP^%Sb%$$R+( zofCe$9xcFy`-Mpl(vSXM z@&70J^$XPpnp2SXha$f@U>@dswzP32LjDyI+eq)CDrOB(4&YVET0vi zmBee&D$Ks2+-nEhBZEVp-&LuWz^0EosFpRIzB6tVBxj?9Pr}LMIkME$P;pEhJ+-;v zO*#A#DE^t+Z)vgl%^Cs8bZmU0edcFS`F#Owscu4TI|PUBw zd==w*R^B7On3nfX(fH#tEF?TVezRg)Bykg(SYOy^9b(Q>!Qbc{*n%0JNp)VqL3>`I zj$7cU{B37E{Ie&WsMBIUeH5}vB`8m2?d%zB!vwaT(AN_ZBi_Sqg~nY{$WV*UD9;9R z@5;BNc>E+9Ia$2}U)t%*nm#OeNm+ZSHj)=E5n4?#$1L*8P8qGFOU%bdoFE;Nc4*V| z^8I41-p5{G*piTds?y6k=~#^_`y z=XTltO7ABrZMh86{_#b_`-4h;P%s976Y!U!vM|l zeb?yn0$r-&HR>Ne3yj`yzjujVJ9Q+cO5Ls_bd`3U-BNM=2w}pF$S?kC`k{I|ex_KnDFa?0%0w0Y>T1UZSMuMH?+*CTYRECKqijfv8@;TmCcaR@%FnCg9S*6;1kbqbK6zVJXEUPRJ>`8G;>6Ig-Hw& zo#zMoetXT{3qq{*A;t_(0{4@>tR{kMr^E+!p)19$gFn&hS{E<1wmE-5^;7?`2;$X` zQpu6L(oa`IjF>M;@YNuuGTq+A+E6YjRR}%f73kPKy^g7$6WC0xZjxgHOziamHJ<1} zpZAG=ueAy3YdvF-MK!DB>=29ibi*JPT6GQPD|7Gq_7xf?8C8$E6H=D8&h6P7bWT;_ zgbg=lQ_I(tKwLCdg2#mqMtV!1llVm&A>QR*a*Dk(jY}z3;)ER}THhYkGTenH@#x3i zrvJQd&C^)S`s(vJzTb9jMka^czQX=k88#E(7%vMN%;mssdR%8rlWHMq>K2i-G zQRA7>0Jc@TLMM&3QEOAwD=8caDr!nhm83vIRVn-$ISNxmyH%C4DiNw!!QaVh znRE3_y2-&~<*Pp4txuc6hns60kEZ~oAIz4`eO7pCfJxGzJOEPHa8^(P-1tf>_r)6t z4h}3?AZflrNJ_M5-^X6?MKu4MDE!>nF;m~R9Tl}t@nP0NRoCZQa-NH}{;ir@PWU{{ z+F*fRNP$jtRTT|Z)Txj>wHD2lFt9aU+dx}wf)A)GMr#R?9;iurHqXsj z1BW~EX>qXW0WFv>xa$;>{Oio*Cq^n`Nu~KS4b<@Qr!ps7!VW z1M>9Q-{l}y%=vE^s45|9N5%P?s4uKBeNh5J!s(mj0NXE|P7DA;SM;jwG8#ky_l^V1 zYy~pG0Bv)Ie>un+%^Eoc-F8$6);WJ?(~WdLMp}CfI&+|Mw;B~y6`48- z^L;Yv`SwLqvjDAu`}T}lL>JNxN5OG`@ zxX=hbW419~?7s9#;&|vQ5ekhU~`kDp~(Xkxp$T1YPWS z;b^J0CbnODb!_`!e1#iJxzb#jX;%nJ^L5u`T#eU`L(%UDp>LY4W+mor)P!`h2Os=6 zrCQ$UwR!X-=w-@c5`5}!`D*3_v1HrUV}59K!>`Mlm3a}RT$!gWId|(N6GuF0$rtzu z%;>DAU2!Yx|3F7%-Nkp-x?M8Qhy3Q9eZ+1vo?3i&X+8hvFH>||wf2j9*!B4WWu^Qu zT29N-S%<#yxjSRIMus}qZD_s$J9x@Mf#9o&Le61C^WxXpJ0p|zURF8VaUZkH6we?L zdB`j_OKBAm!KU#a=}z^=zO0L|l|k=%Aip^9NFP{=d}`1LqA|3-SGcNAqP^k}Tk9zy zo0+bsSu%P}3nC(0RpU&P{!lfy`i;dE_d$5sIc8(06Rz&^lj#G$H_GLZaQ~Y4x?U-Qi3t$aDZS;&MFFjjKS);Q;WOk z(yY#QWZ5^~)by0DC($X^aO9p#JS^%p!*EP8ATBvv1e+}F^u6oo9zvc1-K*45a+zFU zTp1>kYC1trl6mwr&BPRP$1J}Da0FhYM0zT`F%a)M^^C7IaDNVR6kR3m{nqg79a-Wn zVX#(f_sE@RS{60Md@# z+Bo$iV5ReHvB_AW9TT(mCt%k;23&Mbe%aiPL3BcJdVEFv)h+S;Q$#-x-z*QrNN~1O z4mecbGVA^W^t1^43?Gu=xjZ|@baFqfp(nb>n;LiAHyKabm~|Vk=Og643~Xx&XB<-S z_Wj9KZD;I;Yl9}XRDrPBal=FYCoHpt<}bYzY+nPh{0KWT4N*6JHn8W3QSvY{EQKSZ zQ@DzAb2Jp+5At8|56od-g(~Wd$dPjPk1=T2|2WGEx^9v+pg9go-#;4f%hSq5={4^(BtQ&@kvO_1IpNNHF$(VD>}@v!u77LI-h;ye7{Jwm z#8m%i%>w@=DEdch_MbKZ2R35E1z*4*#b2O;+XK+3`27gD{>`cXJ)RKp{~Q0NL_!5y z2BN(&D|jT33`U&xe>~*x3EzZo&@gyV|C{g|0fVW6NMX`g-`w;c|Lw9f$K>*FP1);s zOXvCRV*O8AZ`P?WI6g?|AHD|9yv;`teVb1NMhGT;V{R~YFd58(%>M+em1PD4!Dw$h z4vv09rRDz*r38yAApBRnH-_gjP%PS?dy`gGy-BMW|0^Ds_5V!7vOxjIhLFDP0>G6a zWH5%d|37*d^6qU<0KR++GGqULC@uJJ2pSc{mw@Zv>&5V2A3k>gQ+wfog+h_Q*`cJc zZz~8!3nhgqbpJp2{o7iC+d|1;lsw-M1~5z*Bh0!Vm?ex8Cd?mf8pcWM4M0J$nAjS* cxHuZQTB<0(ztsg46z*H6f3s}A{qy$!0K-v;eE)Qna|c>)>AOE$;4a#l3<%MPA$~?tbZa&OPV*@47Q< zCYhb=O!nTHd9sqH;tNz~JQS*`0yGRZ1j5@10fCo@+6;Zzi3?hS;Q`bP6o|yJg%_%J z2iV!CtZZ##pA}n*WA4(X@x;X?=;;nFzX|R)ErRPh=3lBMG9^eKpdSk5PqSe@5So47 zU5R%+ZS#D2dcG#=g)~g5|F9ow{XUHijfGRVt-+Wi3xO|IIi8a^lS4@28T3*B?XLkd zE~Bbe;%Mh`FHUQr_#1dH-@ibHXXJF)3El5v9K&wes?UdSi|oo9yfW) zZ1Spd5Rb5`Mwm`0ucJ{`piFoDP{@FAgfyaqIjc@rsBYR+KAG}fg%FcaGBfRV;XLfu z`1O#YHsRs9tfkhUwi(76JLP?})3p&X0U>p-SOW=a-l2QDc@Mxb(M4`mW8Wl~`iPF= z?o#N}p&Fse^dQwxUe8bZ?NX$P6(%g=0GiqH=_4ktAM;@g!vhj1h32`NFW!L>kQ(k zGm55#e<>TsY)#U%mmE_JEeZy+_mu;W&5fsS=W%T+%S2}NJ9c*b%Kb09bowSRwy*Z1iow2Ly7iD1uXmRYU)Rl-FJj#>y^VG1A(IQ7dJ`LvKzi^qn*6amzR&%sOyBZ>;j>#n#mHC>Z93yBVQ_p zLTGs#OJ$a=EX~@$zg8i6lwQ2*`y*P zCnsX(CPrK;z?E6JS$ty*)G<+R-;coTRxTP?;ft?6;CD%>HV0oxh)7BQxEtJW@uCLGl)A8R(^cw!{XFh@s;CwDd<5y*L2?KANWO(=f z;eNEm^3S)jv~L%Uu&%jU$ngKATe%QTW6RnCmmv{Vgwwp~aKSdG+)wNgj@7(u(x)o( z6Nx8H&ebh3wcHPC+P*#~G&!el`!FipC%qyA#Y^I-9 zN6Cp^i6kI#{-I$ANiWEZ4%d9sr-T5J5hDif#}zJBhs1e3@qJW{stm^%0@L!ySIh7p zSNK6@LP8H2xsx%~>lU1!gZk4S_%fQ7!1$3vfVh%zDRYlj7Sj}Fj7*vqkJ7sjKGP{p z-#BMxI)5HGBBWoi}{{721=TW8RTpdR?ElQ_Q4m zKZ&F}@Kv+k&Xa|`nwu^jCFl@kxD+aAoVzU20?Dmge2Ay1FYg`El9ej`*t@d6yhWa- z#XNql5hXnFbu9YZX&71Z{k07pDPNKTu`#^nA9Qj@~?qpI`VecpkVQfp0=D@X2(@s!Y*EU13 zs=VBsz@9E@nw^s=(%WGSf&w)d% zlsjRBSQqAogbD1{bR5Z_ku))gy7iwY&078lPF z;Uz%`N#TTqX`sK%%3)gjY%A9o&36udw}z%3IRv03rYA%NF-_u;Q3OH8b!6!J!pZbHR>O4H7#C>hK8$X-6n zTsb=Uq?ccST^I7S_ciJC`%^U91;^wDhokAuxZ|!hs$GBH*NclLT5;g*XPPFeV&B-E z=Kga3pch~>IkCT2#|g;j4SKSs8_IolHGH6cUQ+6jC`mTFKBqLMWNHsU} zZ($Z2zM0Ov^5uON)cExg3-tl|8PjXfnZi)oha!`@xttWC*Qn2K2;_jH+$r~JJehkS zYOlQi+sT-VfMbB16Vk#iT421|r1o2XR$xn)n}s`JW9agqY%9QE?lsoFk926z<@48> zDDSMWKDspvfur0p>#i%@=i0PEdFQ}W{IluUKN#<(W_TUM*BXv*+VK`f zG6;@wg}727Q1qzGXM!z!>E6qu^#+OK%Hk!NTD0?fB7G!C(&F}7l&mz^d-fYK`t4;Q*Su4E-t*`i7TbA{_SG*~0Nu@xi{`X6AXhSj<+soZCRnI>YJG<@)7lS8Xg!zJSZrSX{K=W3twL6!gv}L~XrTyJ{ z7ItiR5~~OReL5Jdg>9$vQiI^^p?|soS5lza$HgbB+ThD=P4(71QPOW1w=lBln; zad52)cPsyqp)=+dQ7Tp8Dm|bZ!5YuV`Ygcty%eG)uYE+4%!pOTI_QI20Vcn|Az3}j zNkX0x6cwI_XM`lAy`P6w#H)k=60H{EEj9tZDVqkkB(|B>|EQn~$}!wBGVR&kqw$AB zZ;=U5owUX5QIQld4G!(-(#VBm0HO;IIv3gbRcqYE)P0t#x0^h9j!X*u8ZO5pvG}5w zI343&*s}Shsxl;oLWjrQ^y#rdDMgi#he$?fTnvfnpqYj=*oe#GyG$_O0>)KCIg zdsK$|ZbA*Pxp(cH)S*AQ7WVP7%Xe3u=;Q)aH$PvvYS8ih7)kr02Q|-&juXil%xe;U z$O|pO+Q4t4>KZdz%N>BoEnD;M68di06_v*(>7Gfs@5;cAHwrp;X??fnKl%*h zY_>Vz6Ahf0lW{=M))53^XbI`?$v_~f+a(#52v|QP{+#xYPW75LT(OYo9LYHLwk4o< zM;;C&J0z~wZXtsvKxN7(As*f94?uj= zQ9^x#d#OH2n53_gBl*;c4+3qs*FQFIEY1Q==rI{dFuuFp4tAI#GO|NnMMHqqx$}Oh$pm_!Cq%|sZ~9z*NzVEj4Q%Zi z#V>b|&xcHptgl_j6#@Q{T8JYj0#YXPWF*I^A!}yXVI)6?5FHz*4?x{84sH+4ua6;p z0QQj^wM0af&W@jS3%O=*j4G=u7J&BUxWh`g4ZOA-{ zpJ6;X52B{Ndo4{(H*wQ;Nkd9voP;$_a}+$rP&maK4#Pe|fiL#UXk=vvkdPvG_(` zP<;`>JnQFt2Ck2ZPBg4`G)bBLS}--LbWA)SoN*l|ZV}JeiUO0`G zX@ZK|yWYv^idipsg`^bBxaOMGKJ8Cu;C}(h6wK!dEWHpnxNR}#xpGocEF3Gl4X+d{ zb;gl?@h~qXP%&MmYCR5So(MRO!2A`#{mdgDD%?g=ekKkh-K@s_O;ecSfS#9amIgD) zOu{F*P^h(xIlNuAx|K6Lg{4st6gs@FC23HVF?eMzr<29+rOv*yGxPiLE?cXB7RB}B zm`#KpV4r*QvYO*qrZB7gh%~Gm;BQ@>`EjXTvl0XsOFVs5Yjaiswu#p>5ExHhB`yUf7i@6*Z=58v5l#XYhw3gJvWUv&kB z0J&lRBGE|qm%y7l#Ow*#@RFX}$Zu7jQT0_-w|Jnm__A(HF(Qk8M{FyQw-Z%e188C09|dfFtJGdG;8Gs+S?J_Q?aLn(ON`C;FBYIom-5)Jeq7QA zrQ4u-2TRp_hZw68hnVb^L2Cu;6bDPe2j_>de)i-oixPCnN*vYo+yQPM4MI+gQ- zu`2e^X@x-Rgh6@%$#ZA>^j?lPU=Y2k7nOR8TukYvKom|=>OSChgaJm|zoC$#Z-<`b zpUy2n_c!ERHxxRB5{yDiK(-r&MMmz8ekVXwWdJQ+1$}hbJ9+(i={}HW6857CYEu-U zH8S_sq6FRy$&z&H3>wm;d2dsEO+m=4f^mBWg`2R{fpqi~=HYik#0NHM;G|GQK>GQL z4RvyFU)U|UCg1Wv_W{yCrq*=mhuD;|9!lDyv;Wqa2D8I_0)oD^?1!9Ua?ExGNs1dg z)TnjW!2Fz(Quw^@@**e8!6gc8GIh)l190SRrt}Xmy<7I{lQ?(Bq$M)ySNn8@NLSLl zeMk=Bt1AUjTz1%KiSjQYKw!wrX&UVZecxb_1uls$d(DBXJ03eH6}@XVRCH^(EKmU} zcl@M={ahG$;A&0)?|aV_kHnfCBOM)niKYC0o3T$oWcQw{@y)IJ)uu}>qZBK@g2q(_ zYFAEy(bvge*j?-oImrd0ngEOBv%GzWXNVMO_%lfu>MHzWJ1NgO01$d59*9)Mg>xgdQ}C|<@LCbJFNaSL6Z)7>j<9`UXo(?&Z%if>U zVtnJkxZ63VP@!)3Ugs#O2=PX<{g6H{FuM2PqTwgbzOa?PspP(j z>0o#19dW;j&0GCzOQ4YJl#ZErgLr?(c=c1NXn)6&-}-RzfZwO=4NezzzaeLaNpOxa zPqE4o61)r_^4>w!$nDPK3jK+M>Av(Ou2MG`!E?qH*$+0jYebuEc;ArEs=)Gd{DeeQ zPKf6nk55hnARK_l^h`3lC$*%!R%&qdF8zuUX==m`x=X@yy7G$L2X*+y)F(1P!YI^U zR8ADS#Ap)vigEOgdo@6^=WRuCQm$<7^fS-v_~Mmsib@PcujxAzFX<&@h@`xr(ID{q zP3XMIbtaLY#$`r`U1OMHEULGbaZtl>UwXFi^WLl80h%Yfm1K4xk}W=3ryLCbXwVsE zTiz|gEyP9ep=}#MGzfmFcGvKP^4UgQChQFj>Scpn^xZw< zAq&+aD$%0ebK8Lryz`!$O+s?Q*_TjCoNNpImqbnazedNLPp@*z+L6 zTdLCIsqy1!;G|C4uoMe)I_~n%4vN@pv^AxU0Kc~HXUCBDF&+;DI@g9{xN6ZP3HdC; zwPo%&(Q4z)O#j|2i4BQ2Caev2W&~b@^6aQ+8Sjt-UDlCOFY%fM%L@pe_zGI#)$Ex| zuR6QZc&qjd64Mv5(|`B{=Q^47=;mUPk?J;RLAu~vDDt?z_1A?ybwqg~>6%V9O!vZj7uZZX^>lWt?~0y zWm&=m4QXvjSZCb$wm`-1^@S2>d;@u3e^s_xA05XbkBV2qzjYebj~&~Y2n-FtyNWuN z!h6H}hqLBm$G9#@u5I)9#MR~*oh7>^-8M=H?{A>7Y%1pl;9? zTbyiYeJdYnL+5;Cw}lXnIJ*^oGJFf6hro3iPgiW)8K%r*!#z!M;n>i~sfL3+i?4Of z1zCh=U+1`1+c5GzNrk%ia3CPPrh=^5%@Z=AT4M@FJHz<7X&fo7yfL_PhOw8_64pqW z+h=x&xak8=glg)3#5QCn}n1?aF7S$ z^vTx@`nC>;;-sDtY`GQl=F`kc;-PHI#G{D+3&*;HJ0N#;!m}!x| zk8EwRSkn-xNL!lvXLUL`n4@Y9X{HjcoUCgXa!F6Ou4JFjo_@@T^OCQ6vfj+XIuT1T z+MSJFxqRq$TG5&w?7UkXVaZ{!n>zlRwSH%DKuTZtqpqrMnGw*#XH!{AF-6-=kl}{x z_6MQqk>~f(F&FYiL<_6Sx1kZL$6ttdFJMidVps6vA5v7W?zjyA2_B$ zH=^0#$)H(3q8ZP-v_h@9Zcn>SEgSY{2v(ggB;)u_^A%8{i%5t5^jN1GhI79@%Y0}j z2D|=a&W1aW03ijl8BUeFCvcM4xFOQ0Z{MU7f~$v;~dm-dOBSLgMdp~tPY=2gfkHlKd}65di6W?s>N4K=eA09>TRvY zpQ?@JvSaz5hGoocSnf3mOnwtI=`$D1*&tSjz&d=?Y$9lBA<}A5nNwA*E()njrm8AJ z2eh0+bQO4^yA|w<3T-%ri&`cv=cKr*TBbo2$vIk&Tr;coQHW94>s)@VVW?r z_C*5>6(*{S{%&IKwt_Nhg*Cyy8`OTARep;ruX@MeFIbOw^dW8YdnSptu;v!}QL;GB zpm;TV(!>NtV(r6RV9HbeOdgCLZNVR?VPKMru2$>7#HKK0no+K{9Zv4_gP-#-EM(zb zCxM@#dv-UAiMz1>QlBSez$cA^+g|)i(!#aFE@i2{L;twBwFGfom`w8*35-%?A9s92 zyHE09ohk=$VIwqz^gq}ij3h0~Y=8Xu#@4viKN^S3DY%-^R-dHxUFZQ#g*ZL(RvMt& zQ!=e77D6-BB2_eUEI1jTyR|`m;3%o^X`9#?x!H;B@lWhPevIq2U&H)%O$2na2{fA3R@_aqMT0@WYwHHb8^ z16a0U=c%bDr%UE=b&C-vYjET%C*>8wN<#5qH6U?Pw|VR=8%L;!tnP7MkVRuS`w|I6 zmk3@XfPwQiPiS(S_{`(WIR;6|d=yY%fc2Po*~PxrjM<_4YnWJGCANbvk4F7SlAeoCd>4_<5~s7t zNYb&KcAluGR*e(9qyPP~t_ z#+woaG-3Xp&mG$JR41+ z8aB>$hd$gWU1y@k(p4!jB_w()ndT*v78JkL&^zZDV@?)!t0_#1!1PiZ%i$g7KlY)g z|D+*i2)3=#RW#?z)-@^lW}ei|!RcS7yaF z!k(Q4J%YNU+(K}0fb(iEhV&*ru51&DC|0YJ9+}*Y@w!@C@3q@y*)Z_|tkw}4b1#Mn z4?krt!eAwbj>paKJ1c=q)P?VgD?{G``W$irrKg~X!A9U8ZkLTzMmg`6S&as_ z?q^a<^2l{$w#bo_zx5^~cjR7$UUT5I?@Uco*HVl4JR?oFmaTnpu$Ym?`aF58O)~6Y zMz61(OJkSm0Wf0<7LvLQnDXBExrrrMr$?C6-%8UBy}|PC#D3XJuH4 zV#y+{h;SK)Vv6#8$eM%^6qpV~j>{L>uS{33%iA2jNrSIBGy(AmHF1iBFu1W*md zKUEGC5SN=a$=N0x^o`I-d)KVPaeVuQH0>p88#i$Gp7JhdtHw$cwS0r*#5RcMj9z4> z*zR+%RwmFwb1qidBpwU@QT|izOtg({v{o!XDe+PAoU@n>X}oXF{CTYVZ2gClW3vaw zluWZnuAlha?IT*T8a=)rPhOmf1QJVmL$eEH)D$rG-xk^p9q5JZcCdd5N#M~IE~di7 zyhs;Tn^Xt!tco3}ZZ6cX4zj!L^2>t+gQmo%c&;e>?!-@Q>U)8-`^CH;jUZqWuIB0FkQig!px@YJ0FAtOz%@@4qTcdg`5X>pvk6JfEJv zLaZy?wFQOtCfb++)Ti3o7Ya&_?)+snJCp$P@Whl*xeU@Z8Armqgw)OvLy@aPh5PAE z>Ym}LSh0W~H*7jFPwi{^BPzT$eIr3ef~Qi3^}-AZ-dvx5azg!Dk^MyGUZZx&OqJMd z+>5=>0_P4`_?u5Tj(f-Cv#w(kX|gi;j){r3!fQ;q)X}g3`km-6So$P`0$EDLM`{?m zBOj-%bX9+r(9j0WTGrZLD%f9beL7Y;te5lg0q1>z=94`!tfrYvWpq#(9{d@MsNI|9 z8M9hIn!(4E@Fo45t2p)pO`MB|vFlA*U@>AxVop=SKv@uGP(E?PCO-OnNmqO8Hm`kF zFa8jh*0YZ@2G508;B;D~V6$-c z@~1f8+kw!NAU>t~@_Ql#SuSjdhOqbS#D-QTSW z64JxOUMNPKPP;YVbNrL5wCof&nQT{d;=gq?^IL7R0;&OnRClYxp;4|-=wo-y%bCiN!OD*RfI5NAEJV=5TF z4Qm}H*|R4a#gX zi9K2j|DxI1AL`ojC+sL-)I*-Mtt38{>sPsNHlX_5oJiYA)6=DpyG?kCwJ zD$)jCzY~Q$q_D(>DAI=F3Fq$ywkijYPVOs%f>b=ahD3YRC2r12c?vRor;gv*&NX-( zJAu|+$K~_kb#$E^ll6A2*x zZc6uJi&56?XofJ@r@8R2YvV76F8;QYtdh^bJE@^4a)Y>X>Ue5Xil{v+We zmVE2#yA_{5d&YPUzIll-8ER?IPTKft$_y|SO;)WXmToV)T%FL+NUY((|ER0n%9)p) zjz!B`_u6)Z$WC``sGccijX3YgZL@=fxA!Zz)+%8-iX?*{Avvm%)lv^z;MYfPCr1!Hw+*k z3J>2Avv_3}P#5a1DiK@NMK` zcGXphcA3ToV|POA(X4|nn$FNF;|OOG(%Y1zBFjeq#9&&{h8k`o?R)P zo-Hm+A0biFx5@8nP?<^b<+5F@l>>PbWRpRck*@_(XHAq$d1MNKL}E} zD;s!6-XsVq`s$G63sb~TlOzu`4P4+KvwLUVd>c)+P>#)Z3(t}q$F#hoiHlzy{3ZBB zV7%qSN>cRLVP3=_$DW4ZOjbWEn4kHGq6cK7t~fYw zVxGmXr7o`Giu8x@jcJIiN7t^Cd-#UFu2*{DBT66iQC?kT6aM({$nqSO8ngh(`h*)V z5bwDD6ou;N|A3W6@JMU{BQmgpVksikwmG`i3$=WCkJ`CC%X7x@EcR$TQtO!47UUkj zKCcZc^6(Tdu9r;0TR1blN!L?bl3a#Hma-rFbID9o5ARu;;{|$j} zNcG8!6yXgT@j$+Tl9+D{SMGl^B&k3Xf%G7SAbhgFkoUi|KnMt?|KUph&GbTn*n@~f z|373&RRu^WY>5A&(Z2Bqx&J+5r}~dJZlV9S0m=!&BNOkz<^DHjQ~yWBEV8$Xgo!7p zpvX`ZGKf-iZe!eD0mwJQmT({-=>DVb2^HvE1`D(wMEMuhL1@85P*QCFh)#oHL1dyx zAf@1UZ@>>S4t@`nCi<@u0#IEr%0EgyZ%Pef|6N4#hVCHrkoQnQvTqVGkbMZsUy1LV zGeBx#L{J${|MZdA2@$m7feFeC zLm}&bi|60a|KG^d|3^ELF8{57kM{2{y_r)U_8tn>`=3%jFI>=B7z5PT0MPqzE+|m| nq#n*i#SsVr@n39MCu27&RR!3$p#||4W^9Pyw;WZ_->3fr?*#e% delta 11350 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 dja*zDja)5N6yV 0) { - - try { - Socket socket = new java.net.Socket(serverName,serverPort); // create socket and connect - pw = new java.io.PrintWriter(socket.getOutputStream(), true); // create reader and writer - br = new java.io.BufferedReader(new java.io.InputStreamReader(socket.getInputStream())); - pw.println(args[0]); // send msg to the server - String answer = br.readLine(); // get data from the server - - pw.close(); // close everything - br.close(); - socket.close(); - - } catch (Throwable e) { e.printStackTrace(); } - // after sending filename, exit - System.exit(0); - } - } - - // launch editor - ECUEditor editor = new ECUEditor(); - - // open files, if passed - try { - if (args.length > 0) { - editor.openImage(new File(args[0])); - } - } catch (Exception ex) { ex.printStackTrace(); } - - // listen for files - try { - - while (true) { - sock = new java.net.ServerSocket(serverPort); // create socket and bind to port - clientSocket = sock.accept(); // wait for client to connect - pw = new java.io.PrintWriter(clientSocket.getOutputStream(),true); - br = new java.io.BufferedReader( - new java.io.InputStreamReader(clientSocket.getInputStream())); - String msg = br.readLine(); // read msg from client - - // open file from client - editor.openImage(new File(msg)); - - pw.close(); // close everything - br.close(); - clientSocket.close(); - sock.close(); - } - - } catch (Throwable e) { e.printStackTrace(); } - } + } \ No newline at end of file diff --git a/src/enginuity/ECUEditorManager.java b/src/enginuity/ECUEditorManager.java new file mode 100644 index 00000000..a6e41f87 --- /dev/null +++ b/src/enginuity/ECUEditorManager.java @@ -0,0 +1,13 @@ +package enginuity; + +public class ECUEditorManager { + private static ECUEditor editor = null; + + public static ECUEditor getECUEditor(){ + if(editor == null){ + editor = new ECUEditor(); + } + + return editor; + } +} diff --git a/src/enginuity/ECUExec.java b/src/enginuity/ECUExec.java new file mode 100644 index 00000000..2ab39b7f --- /dev/null +++ b/src/enginuity/ECUExec.java @@ -0,0 +1,76 @@ +package enginuity; + +import java.io.BufferedReader; +import java.io.File; +import java.io.PrintWriter; +import java.net.ServerSocket; +import java.net.Socket; + +public class ECUExec { + public static void main(String args[]) { + // try create socket listener for shell opening new files + ServerSocket sock = null; // original server socket + String serverName = "localhost"; + Socket clientSocket = null; // socket created by accept + PrintWriter pw = null; // socket output stream + BufferedReader br = null; // socket input stream + int serverPort = 8753; + + try { + sock = new java.net.ServerSocket(serverPort); // create socket and bind to port + sock.close(); + + } catch (Exception ex) { + // pass filename if file present + if (args.length > 0) { + + try { + Socket socket = new java.net.Socket(serverName,serverPort); // create socket and connect + pw = new java.io.PrintWriter(socket.getOutputStream(), true); // create reader and writer + br = new java.io.BufferedReader(new java.io.InputStreamReader(socket.getInputStream())); + pw.println(args[0]); // send msg to the server + String answer = br.readLine(); // get data from the server + + pw.close(); // close everything + br.close(); + socket.close(); + + } catch (Throwable e) { e.printStackTrace(); } + // after sending filename, exit + System.exit(0); + } + } + + // launch editor + ECUEditor editor = ECUEditorManager.getECUEditor(); + + // open files, if passed + try { + if (args.length > 0) { + editor.openImage(new File(args[0])); + } + } catch (Exception ex) { ex.printStackTrace(); } + + // listen for files + try { + + while (true) { + sock = new java.net.ServerSocket(serverPort); // create socket and bind to port + clientSocket = sock.accept(); // wait for client to connect + pw = new java.io.PrintWriter(clientSocket.getOutputStream(),true); + br = new java.io.BufferedReader( + new java.io.InputStreamReader(clientSocket.getInputStream())); + String msg = br.readLine(); // read msg from client + + // open file from client + editor.openImage(new File(msg)); + + pw.close(); // close everything + br.close(); + clientSocket.close(); + sock.close(); + } + + } catch (Throwable e) { e.printStackTrace(); } + } +} diff --git a/src/enginuity/swing/TableFrame.java b/src/enginuity/swing/TableFrame.java index 6ef611b5..87d7a18d 100644 --- a/src/enginuity/swing/TableFrame.java +++ b/src/enginuity/swing/TableFrame.java @@ -6,12 +6,9 @@ import enginuity.maps.Table; import java.awt.BorderLayout; import javax.swing.BorderFactory; import javax.swing.JInternalFrame; -import javax.swing.JPanel; import javax.swing.event.InternalFrameEvent; import javax.swing.event.InternalFrameListener; -import com.ecm.graphics.Graph3dJPanel; - public class TableFrame extends JInternalFrame implements InternalFrameListener { private Table table; @@ -32,17 +29,6 @@ public class TableFrame extends JInternalFrame implements InternalFrameListener addInternalFrameListener(this); } - public TableFrame(Graph3dJPanel graph3dJPanel) { - super("Test Title", true, true); - this.add(graph3dJPanel); - setFrameIcon(null); - setBorder(BorderFactory.createBevelBorder(0)); - setVisible(false); - setDefaultCloseOperation(HIDE_ON_CLOSE); - addInternalFrameListener(this); - } - - public TableToolBar getToolBar() { return toolBar; } diff --git a/src/enginuity/swing/TableToolBar.java b/src/enginuity/swing/TableToolBar.java index 39d18b93..87551577 100644 --- a/src/enginuity/swing/TableToolBar.java +++ b/src/enginuity/swing/TableToolBar.java @@ -1,10 +1,12 @@ package enginuity.swing; +import enginuity.ECUEditorManager; import enginuity.maps.DataCell; import enginuity.maps.Scale; import enginuity.maps.Table; import enginuity.maps.Table3D; +import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; @@ -21,12 +23,14 @@ import java.util.Iterator; import java.util.Vector; import javax.swing.AbstractAction; import javax.swing.Action; +import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.InputMap; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JDesktopPane; import javax.swing.JFormattedTextField; +import javax.swing.JFrame; import javax.swing.JInternalFrame; import javax.swing.JLabel; import javax.swing.JTextArea; @@ -256,9 +260,25 @@ public class TableToolBar extends JToolBar implements MouseListener, ItemListene String zLabel = ((Table3D)table).getYAxis().getName(); String yLabel = ((Table3D)table).getCategory(); + //TODO Figure out mix between heavy weight and lightweight components + //Below is initial work on making graph3d a JInternal Frame + /* Graph3dJPanel graph3dJPanel = new Graph3dJPanel(graphValues, testX, testZ,xLabel, yLabel, zLabel); - TableFrame frame = new TableFrame(graph3dJPanel); - RomTree.container.displayTable(frame); + graph3dJPanel.addModifiedDataListener(this); + JInternalFrame graphFrame = new JInternalFrame(); + graphFrame.add(graph3dJPanel); + graphFrame.setSize(200, 200); + + graphFrame.setFrameIcon(null); + graphFrame.setBorder(BorderFactory.createBevelBorder(0)); + graphFrame.setVisible(true); + graphFrame.setDefaultCloseOperation(JInternalFrame.HIDE_ON_CLOSE); + ECUEditorManager.getECUEditor().rightPanel.add(graphFrame); + */ + + //TODO Remove this when above is working + Graph3dManager.openGraph3dFrame(graphValues, testX, testZ,xLabel, yLabel, zLabel, table.getName()); + Graph3dManager.addListener(this); }