From 896265e102dd570aec04e9b161e20cbd3c410b12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Lemaire?= Date: Tue, 6 Jun 2017 00:05:34 +0200 Subject: [PATCH] map: Added action menu --- TODO | 3 +- graphics/ui/map.svg | 63 ++++++++--------- out/assets/images/map/action.png | Bin 0 -> 49042 bytes out/assets/images/map/button-jump.png | Bin 9607 -> 0 bytes out/assets/images/map/subname.png | Bin 0 -> 4906 bytes src/ui/Preload.ts | 3 +- src/ui/battle/OutcomeDialog.ts | 8 +-- src/ui/common/UIComponent.ts | 13 +++- src/ui/map/CurrentLocationMarker.ts | 10 ++- src/ui/map/FleetDisplay.ts | 10 ++- src/ui/map/MapLocationMenu.ts | 65 ++++++++++++++++++ src/ui/map/StarSystemDisplay.ts | 11 +-- src/ui/map/UniverseMapView.ts | 93 +++++++++++++++++--------- src/ui/menu/LoadDialog.ts | 4 +- 14 files changed, 199 insertions(+), 84 deletions(-) create mode 100644 out/assets/images/map/action.png delete mode 100644 out/assets/images/map/button-jump.png create mode 100644 out/assets/images/map/subname.png create mode 100644 src/ui/map/MapLocationMenu.ts diff --git a/TODO b/TODO index a771b35..0106a4c 100644 --- a/TODO +++ b/TODO @@ -32,7 +32,7 @@ * Outcome: disable the loot button if there is no loot * Ensure that tweens and particle emitters get destroyed once animation is done (or view changes) * Controls: do not focus on ship while targetting for area effects (dissociate hover and target) -* Controls: fix hover being stuck when the cursor exits the window +* Controls: fix hover being stuck when the cursor exits the window, or the item moves or is hidden * Drones: add hull points and take area damage * Drones: find a way to avoid arena cluttering * Add a battle log display @@ -51,7 +51,6 @@ * AI: new duel page with producers/evaluators tweaking * AI: work in a dedicated process * Map: remove jump links that cross the radius of other systems -* Map: disable interaction (zoom, selection) while moving/jumping * Tutorial * Campaign: Add ship personality (with icons to identify ?), with reaction to battle and map movements * Campaign: Add factions and reputation diff --git a/graphics/ui/map.svg b/graphics/ui/map.svg index 286ad73..0296002 100644 --- a/graphics/ui/map.svg +++ b/graphics/ui/map.svg @@ -845,10 +845,10 @@ inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:zoom="1.4142136" - inkscape:cx="927.30708" - inkscape:cy="480.99508" + inkscape:cx="338.69768" + inkscape:cy="912.57657" inkscape:document-units="mm" - inkscape:current-layer="layer5" + inkscape:current-layer="layer2" showgrid="false" units="px" inkscape:snap-bbox="true" @@ -1347,36 +1347,39 @@ inkscape:label="Buttons" style="display:inline"> - + id="g4765"> + + + + + + id="path4962" + d="m 128.41296,23.565172 -9.48927,9.51663 H 27.908258 l -9.489268,-9.51663 9.489268,-9.516629 h 91.015432 z" + style="display:inline;fill:#3b526d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5500)" /> - - wZ5d)_W~P{#9Yf5_%pkL4W@cu7{`cAE-nZ7i z=dJse)RLx0T~ky2HBNmMrljx{1(6UD005v!OG&5z01)CI$rm2>BZpfNK=SbgYbg6w z0`UINE2q6E{v!v$R!YMG06^{gCqX1Kq7r>%!Z}LIOTul!!Xgs`-?fy}0RVDqLOjY zd40#DQF;CS((}nThT%A-L(lVTDW`Fv=Zuo2`Uwy3bxn)PppY!>&5vXN?@unrCWGon z4(~stgbpogO!tw)jtwn}PJrl79*PVjiY^iCPYzEhE{YBvoBJPsTY!}I>YW#SSRhKN z`cwOYhT8caG7hG|gf?J^r(nFbfp~J7k+~n*#DEqZG5)uR9!Iu06ZpLezp63zV0%|+ z(G*Prq1V3Nb%qd0^uXfeO+PrYcC0e~Rf6m0b&nG`DiTD0R-DLs0>T1eOYHa6C8g8& z-cRs7e@FgPW4X^p?Ze2=1e9qIi+;qUqUeRH!9G_HpKKC(DL+bpFOEq)Pa-rN)X?^$ z$-LjSsQ)FKb4>G^sOspCdHH$b|14R$x4{&G%D5O9^7TW_#Lby#;TscPrVk6YBX^#W z2w!U=rLl25*81Gdyo*hL*y>yN1CO|ZcU0L^x^eq0=-;>cA9f8aE;L`=F#@OuaPM5e z`?J=wdp?DQyz~ECwBG%%ulEe4rt@^X?mL$*QheAS#>KbcFn%q?eF-Bl)?@fbpTore zteg~+fk6VzH*5?v=9#pA8$9tftYsk|E@}{)HO~HY{bt{zF)qkm^`+v~eywE&j)4*3~ zu$k|FLF7X;aHr~{Qg7K`mf*$^E(QU_v|z^nWs-;9_uv0kTkqK`+8ZhqH(vQ|s`vbzq8ag@mZa~QL2;N( zSy&{;xcce8ZuWnJu8}r{-Li#Vq(K7VpFi(;{QNSl7Y;#1nyFC}#AQND=LyVHa9LSsM@l>w8 zIlSmZcLvm$zZ1Ppe#5gSAbe)CxJ0FXXSK33X`^)Umy1+`X% zX2m=Yl2u)7!JY}emC&}~1U`)Wb>!Mf20|BWjZ7Wy!LhmU)jM!Lb|8UaDKUY z$cQMFR@lJJt@-jrM^p2sC+<|C4OEh_-w^r?U7w5h#!KGZi?YcH9)>QeTye>k5^jy5{nx^2U}k!TOyt2RSuzd^;Zv+sasqT5YPb54SbFgHe| zIaU8su7+ntU%o`Z+G@riw%p)N3)O{?LDw*LzBJb5(B)8I7QK~%bv&Y50lqoVxaffE zQvU_RaMfmD?8<>)$0vCp(b(1|r>)?IUCcB?-bMI zQ;#~W1QUX4v8L#zF?*ZQWCMN$P`F^Qx~8UKHjiY=d;qcyEX7(MC6&p*)fGF*YOBQa zFA|!zH<8#qhP+mygG}iGs>Y5yb2)1g7mrDgRR77RQx%im+v`9{eT)dB8p4JWgvuGc zPx{@1!uO!Rde_gR(XV2Q`k8w~WNDp!;xk08%TO`SCT`OmO? z!if5C5S_f5t8aTmqM_UY@TsXu5Pa_N@j=}8#4wA@<22aG1+Nu(I`z=p^Pd>7v}!l} z7aAb&@7i~8{YNu0_yU~#8|TfcbhFeP9EMi)3BYvt|W3uQ!>2lcRKrV8q-N~CmKdkp>cz!$gm(^};wPAez3)phA*osY&rse^>z zXjM)*A2{<^4Fyc| z?x#G3Qx|S`DG?`&tmyFha-nJ1rR~89iDxKZ15-{2y|LQdA!LPra>tO_~6!aI)e!ur2#&T z#oM*z?}Vlu8KX|U{#AcT<#xk_&l6Zg>e{7HORhIXdw$E(_ciP2w2tN--}ku^4udPX zndP#7D+0V6WSx4$Les7^@M{`&b8IYEP`$`xzLT57WXbd5HRJneW4Ylx7JYCH(7-1675 z4j7Ls)>zv)8)EWQ3-vUf@tAkwqr>5!Q-Z(x<$+%R)jv6@Yld=2%`>k37>ZF(6p^fT zEl?fLz+`k@_-(>j$ftbwzEC^_`vMUDx6w!Vj0ctPzQ^Hjx*|hZ<+`A3Yn6qZXRniF zL_|ehRJ?Bd%>Wjuvc+H8(I#WOqL!G0=_y~iJ?lY)akECfxM(_D?X2eKOfgGcGk1y8 zmbN9|VGc-5vrj9iQP#f0gOc-*`f_z-n%3Kl2H#)yjSIh#en#Lh_~jg+phEhDHz_?* zE$K8O0G%UG-%DkF*+n}=<+SWHz13~2F7=J50{+|nSPhfpqJgEQ{@){esYJUx%Q)i< zDsbGgy`Ur)&5-W+EhaxQf@aSc;~?Wzm`6LpcaF%%xDyWjMzFLaYRQjp4*l^XaHgc50T|)KT6#_Ag>= zeMY-w7T$gemqaMb5mS&_nnJ1P7O(l(F117ft=^!aWzT0LvE#axBnTS!4w;v?-xzXr z*$tycSDa^;C7iMb!F3vm1+vLd0O^Qk2ATN^0+|at=_e|Ugq5UYf6HiGe4h0b@(9f3 zqCxZcZ5)f74&A_qp>OS(b9+930k3(nKsdA-zLrMKyS3_tjF+uA?xD)8C%)IuJw1?L zyeQ|zwP-q=mA6#;lfOseAkS2D*Ct>5#PU6xI>XNn5wUL$2FBi~bfsme5SL@20^=Z*VmSk}Wn+IK z`u$A58j}4%jW9Tk+%p=VV5G4}e=VU*xaY|sorXFnT_YXS>zo_`eYpHdOJ~nnHEH2= z(W;GYOEzXZRPnjy>0%Jgs0dh!#^PreFmf4wH#Zyj&{}8pOhooP$k~=EF*I7&hHMWB zo!QaO`}%{A&vTJ~dCq9qhRD~T#OyCE!#A=?h0vPZJf=%459#cy*lp^_mUPt?ZQD`76ZXOSq zaTF691-h?sNmthCaWyEyikOdGZu7aX90VRufMamtkgqsnzbBeF53_HIr3jhxDJKk15H54FDY=6mXXLVm+rE%nmUY_Ny;CtZ zvtUE)-lNa(_kpwj@cS*C%Nz_WI2U$j9%EzXzh97OCWii~xX*#* z8G$O|-|@0q&q2vgD%|k&aT%BQM%5ZW&WMt9>yqena~c?WpjA_=9j2G;mkU@n@hhzh z6G%Ob7)p6heqiMJ)TrpHi27@!B1gQ|mVFHTg$!r>6u31vSCNv%5&4H54C%H^(rWIl zRJ<%w^IRH=F>VoyPHXCbjbzZ?J);D{62WH&CTW*t>S3`M z>7IcE{|`7j^+X!fkB-Ynlpapm#~2Cns)B#+ah})6Mp@gsG1dwkjM_79i$wye*lIkL z*@B%1a4tyhbMQNA&ljLPFUS{*V>j!u4J89}I>)X~P%5PY?GSG=$r&S74G+M-IC79` zi_F?fi*+HR8{gd^Q0L4OxZrJ7o@Bolv;*sIXXEwaU$&eD%gwYsg;x8efeLQbH$8Xi zu0bdMFKv_lJK@iwu?w0RhD%mtF6n_1PzBiY zGrz;AO3L=sGs1sA3n`~bC4g!ii>D;wI1^7Pq!rNf<(rvmbv%p(1z~we;fEgUk*Tvd>+;g~?VUj@g-Y zX9>hA8qh2A;Tf&`BoPI^?CY8-+j!Sv|DlV#kC4@$zb>U?@vF^OWX^sHZ|Icr&Aox) zlj2m)c-y)Yq8+;2nWyS(8l7bb1>zc_XEUb9OF1s#BQ_>}HZE=>0m~ER+44)V;AYh5 zX2c>V)y*>X@2FH6D*US0rpno!zDV}VP&E{7sd`mdqgH}hZLWz%Jfc#7Isr0+@bZ|q5`;|pp_Ky-N z=aC)kk;RgSP$q)#Z=~rzw;Y}qzVO06R{LbUY-Ag8uloveX<1EmA91zr83Gt)sALv^KsE$_il&ffmS7B4rj}6GOQ_0k%ErKgqq)Jn87+FRvfrBLi z?NsG^$h-;3zoYs>nZ%pOBBs>$Y8sd9m1UlFk0u9Fh)gmYTzQDC<8XBbW#_gKRO+-N zjVz_Y`_VIV%M&MNx%y{3x?FC$c6S=VJgyfTjAv$Udwoa3#(C?e1C8E~XOF^dEXME; z7O4awqA3Adkqo96Ht416a+uF#Co5a2xo)~Hs-~T+YM#Db>j)d2&;UweiVZ8=heR;$ zraIwDK2?QNF4`fssww82u@XyimEUSt|9yuE}Gf>6{-DOFKe> zs#rPH;>C*gqP`Tb{U94Uw{2tm9lYeGktLbd+#e+g94nTEyMT;)`R6yzodukhb zz>Ot31*dux_!ra1It~0&z#zt{hSQGzWEp8Of^!8ZW3VNbL;-40T(}=0939GO;k}Ft)c66yQBShC6Oe{M^-LD>gd$lNS zhwao*$G5Ulcrau5?JHPa23f61+b`h&^iTxg3O!gp^B7zC+Q7%USrW&Ai>*wg53|7< z?}nFd{HM-K*81SI$#(M>Zp(n#GlAioS7h9Ieo}L^U$)VJH|$#v%5A@L{2{l%+v>8O zC&(%w$HBp)nEQMX!TB>Y@(AajWquvP(JjuVsE_3q{qN8#6qVy}E=+mmqi^dBGRznn z^2V_Fu;Efzu>?~wI0bT?bp%e+Tsb(@niv{+5?Ha6guA@vl$2ZwG-dD^Sk=q0G>}9- zdKk?vKtJYKpV9gjbxQdJP1z*&nt>P@OzyQH91NmqC1ZM8oO&F{5yAQ7HqaH)GrbBI zaM#q{upz%5w#@FzSl0OS_a;REG6oDp4fPf|9}+8;Jz%FJ`Adur>dx(sdSOq5QQN~v zomr0wkmqz9DVfqC8@`ta7!ps(h-&z~51EU#c|91}5{I!0E1xasC1FgKH?2)7z}SIS zv3GPdL!>$gB#S%8D$Yh*won5y9P|~vtT^x(R2fu(YOINPHe<&$(6n0(Aw?`;L@1Q!&;)3auP~?wt|l9Jt3S~grIvYQ zb~uIE^|BUyxpcSY{XELhC?M5nS2Tg|xGMLRh?)B=^p=QkXjp z4s0Hf7%2!Jv-6+0EiUKcWkh}_E%7h z&LmWG1rqU4s&-N-#;J*hG}+iV1T=;XNvT7=%(ajlj3zbViNmWi;v=<5-F?vg$Y43# zktVJ|@-NWMxd~*uxFRv6Y#USu`Krlz2IZl-02qH|Us#ImjPFeS6l~@d@b<>3_0**7 zwGBxjUR#{hbIp*L_q1TFAZ!sX6)7#;MXB7`8YxkcyqF$C9;E|EY}l%Ud_*V!$FYb9 z?t*WR_C%7{Nec|A>NsFwH>s}}$u8_MalA7H!Ytr$l7n`B&3#?Rq4Vj8THMG7H%E)$ z#$#lGY|ZuY38V2y% z9{W=me#6Hb6lN>-tpANx+OAof^E(Yggw}6AEW>XaWnswt7%k%%lHbpXrzDaR8N*V; zox7DVEhHs^LlY<>?fq4vFh>of*_6kVurUan@1>O&pS7f7LMiFvv}g+`MF3I@aUhx^ zPM%Fax`a;4)KD+Px}*e3L#>gCAW2yn{_dbd%ruM5sAxF?H_9U>rtDSS@r8B6W0n8cEAY2wt?BTWU5e4h_}-jo5Pm zh+0Dvnt4^zNC>}FW)AxP9cR-jkS{NUgEcaCt9@G6XcaOSh!8qiWt5pwvVvpH$9G5Q zcK1RrRioNY?`z-WD82^mGzJG}bxoh0Q|gPznu?U@P+hzpmx@TlBq8MQ1~DSs-flj=Obz5G+{_9r$~nK(#p{KxJC#tz zt|LSAEd>4fGd2nqU@vpO>!a8UlCLoGq$2x6ayIW`>uyKu9$EXIRWO>*#S2l&0~(-A zT~;qI;Z+0ncI|oZbls&|?<_i6?_r|R;&wl{_8B>qnlMTaqN$6k@F^ST#y)P{5uPA0C3MNi_@7u9@tG;Ka8J1%vX|8y_ zB^uLtNJCc)w2p_~BCJ_?fkZ2*c0p)aeg05E$K>8uIqag&$*e(&u&20GX36QgJ_+MR zgt60JXu7I;(I$Np;BXak9CHJl@WAq5>yYR0vFuI^UHF}ds^#{nT*pbhJ|&Iw)PxtB z$(?i6 zGgu*cvI3t^d*v>M53Fm(Uo2QXH>`5*#uYpmyxrG6p6*n^iPBpfDIe*cPQf&r;8Q z$TZbaD=}yl=(cF2jhw|LfvqE`5=q1atML3Qjt+xRkO7mTKg>1`US1)sG6~+i243fy znqWtQoZWIotv7!tMvEXthry}FezyfLIhX>8@-)8CpQ3>!DEPaSkVc%%IOTX)!m*rz zi9JmnG}g|3sWDI)e?9mQO@{RVHmE9W86wJJFrY>*AAb%h7CU|nNtExM-kA$h%5M>q zk!y5k37$FSvwee7S?YpjFN+;}fCDT&m%eI7ZFRUbTe^U$N;rx=&Br0AAf6lFxO*<&m(VXEtL&HAHWr1(h1Q{xP+9d1{XZ3Om>@kIa-6LT zzGo?Bo`3*rUnPWZizn{(K1R2fcU-RlT|rc#erDKrBR~e#0{~xm$nt%*n|sO(%$%Jd z)aNVDxz=O^+j$C3v{@CvfwY#qhTBN$Upb$9Z0FZ>640!iFMo4J!o>sc()Ti0cL}iW ztG%b7AmNOWqoiz^jQ_VUz%VOv4hxMUok!&A>D6@eNY~*=Olngj4}JvzxPXmaA8tt zV&;p1F>|$jrkVCL(SXm)(RvFp{iI_BK8Fx&z56)m>{5W%YK1p#CzaongEF3R>te*cp~kg-kojBm93!5_d?7V*td1xsOz1GmQW5q z!|g9WHPE7RQTo zMOGr56P~A=KReV-PmylM9X*;rmvI8}ums}2vb^0_z1?q+OB_c_n}PrG@xAo#a`sox zY7tU?e2&4gzAVR1*2b^MF7iGX zKye4od^`=kRl^P{utK_1Tc1f@3b+~#TWhoskLIE(1m1q_@_(49XhCMS9K8RF%+9XE zFsISRiCLfq(M5OG1C$>qw*;GLuGHSQWXW3979XY$z-wQ!<=|O)*pUEk!3zzne=FU7 zTM1|oHhyl8oUl4sdO)1OT|N@_H+S{oIP_3h6L_3Q91P7fGG@7Ba)5bbPp(npna5l^ z8s==EOoA;tJT7kxZcR46>30Jk$|IL8n))UG)?yYQk1E3gqxxx2ChfS@J{aW2m1B zMZ=r`_z+jQ44OI!y(r5el@4xwosW`GU9x`>X<7G>0Hj#E&=JFgtK%?ORW=>Gzq>Jm zu;$Xx2SP-fVQuKv)pFoRc6{fQg2RKaiG#6Uv^~kW(-HqP*}Qn&C*{hoZCUFIzROgN%ovhoSLJ2&#vcMC`+r+aaqZ@An@1)Kvzk(MRt>%x79)m%;#y zRmmxF)gfUd&{Q3(nba6}=ZAStuy^}{e_<3mQnK;pv3kb2xwM8d1|8u@LAltIy-+ znMqH6H4v&_BxD@3c{BoK^&(^dY!O58P`nV#Cam`xvct_LGq+V;e$9+CHS*PF?2Vc) z+b^Bjr@2JP#>OSJrs(W{?3l9NbOEU~UR|S}BES4Th8d)ns&!NFZSUtMVra_@gf<;|4(y;fYy z%xd*q0#|dn1b*8{;tfBs*RrfLjyh7%ar{=?Mt$}TcNd*#H)J73<&4nyz3F*oKhc2# zXmTh$zEc6 z;S&l%*j#%vI`u@6)D^U3_+GY=$}dn$X2QhckDK_LLIH`e8c?MPWCO}x9Y2sks~Z^h z+wVD_t9JvXH2kT>;?T=l-C=er&88$a0s-^CVCQx!e>;fV<-DpSeCxbvL+1!$Vr%4VYr>Eo3)w2#+_sV5YszMn3&m+8y_o{-k;h}pSU530Bku6 z(GMWA-Ra-iX%LevR@Fp#+i|pPQXE|;zcNiuh3OpgR&y+m2MK?9(a9593?&XS8X*Rd zzlKmgpGq>^%=mUI9&{x&U$%e@Rp;zeHckF~ne4^xb%aOJDiq@ma85vc7FmZZk3riOdvm(hjhdfV#LF<)UjM)9@2?u1S zs-)==hTic1J3RXy*8L6#*p_?%C+-DUOd)p3g?OT!N1GY>5C*T55InDjB?sKqcvu3#j6<| zO^|qgsuUW7FqSs&{mY(T$7ZbwW0Av54@ya})5G%7A~FHxIE^!~jqX^-%lhInPk;26w`=DD9w^b^=yIOWS`n3v&ksAZ&0Us``2GumG?%(`1%4g*NIbX%_ypv$R=s_l8(Xs@KyX|JW zS(8CvHU<$5if2b=C!$Wt>&p0?-yc5g5^MAU;eFDlJ12}1x?&24PWS~397UbJTW7Q7 z$6ue3vE5oen;}a#-=49OTz6hSdwj1{4$Rhhu8iE&Q$xH??YDW`(%Z>43V6@*jqZGA zj(}_Uxh30)xGR97^>fQnXLodVw)mMAwd0p*@e~80gH+9FNnhG`T+9>qFrP|pp>TEZile&y;lQa=6+!CvfH+5&1GFJ5ZSm_#6 zG?G~7T5+p*Pr~qd1woih9hMpKC=D&)p62$zM<$WEoqyTT$_LnQ^T}WJQBL4YV-InB zfs9yTppxn)v1O!XmzFWliZ#cg0Djrw)j(I4k@FUU=brTgvCp;CEVkU)Rt49?BBpI- z?}y93^O4&x<21{%r%2IOacK+Yt=x7?^b4s{TbHn$_NDa3L1I)p8$!oA-BHn??6T}% z#D4}L%NmOs@Ud{0CugIp7FB%h(eziHDsZyS5-ZnfKc>Q#Ujg_gR3JYVzce>5G1|O% zi#kqLeCo%(#wKLN5D72GOGW+WXm?a7VN3GGa&b6PolTtWdrIl#gs0V?kF6Tql$tUr zJB9E>F}8X7AC!s4O>a_Jf?d|hU2`uTpHsz4te;g277(>CMk>17)vUF z&AYLN3J!Y)%Qegr>aEB&#?6`5EIlNRQLe7Vlmd&-sE|VVn44a$`)~8rXGoJ;=O6PF zHJ0-1O@_O&+GHgt<%#t{t@9yS1FX)3BMkigHLde< zb=?h|tt(UBv71`n$eL`x?=)iznZgDu#Zi$~^>hi#^dhv=XR1CX1R1}nzcO== zoAa;=aC917WdtX)UORoGj3o7d!Vs#_p!ED@J z(&UKWXJ+NJ+;7tOtLTa>ebGH$TDLUMaXH_6-BWc|faK8zU2N2-1qFm1Qi#LRIsRO_^sLB;PcqeEG*HXQ~*RyOm=E0bgga>3lX`kO(9#%wz zU8I4lq(aFA-pNCKFuQ&k<`<+J?sJMTL#}try#u}@Yrb=eoV!kFHN1Cs2b7JkdA#AV z=!K@&ed@SaNm8M#BFUU%K%pHq`=$rWnPdop_!FkW6u_W^8m4W1Hn=i>x6!rTw9iTqg} zM)_v+_HyUA$a<8d(mj-#%l>_C*??qz{;?v3J5paP1IV7}_4l+#G9sVSR*S5Lzj=2* zb?hz!I-6<)&o|&wAIHdB8l^P=Z~m!1^ykb%7}4}?lw#1f7aO8M1=PfXoI>*kAMV1# znT++*1V~8u@rFil5%Gpz1`m5bE(elfP|T~fkvr0GtAiwS%Z3MK4qcW1ln@^??nxpE zNc#5`B8m4$2uUJ|er879jR%>HT5Cd=#KGV812N273~As|*Mctzhn*IKZsmO=fY2aM zdJ-V>Q4-Fr*v-sK$YoB!i(`Ryhf0KK(E4xl#J0AMgO@;i{8tpqAO5GKSNe5bU2fWr zY419%I)st9sc7P+4V0A;)IH$MAMpmGtywL$+(ZtQkf)HnReAf@Odck+xAGMU=)D#} z(*%{mzBAW3RU+TxvD4$Ws_F^HycU#%xGNI4-P(8DTPXqW3%E&0l5Oe<@y2X83z9pb zd4f|q4`eD-EEdC)C3HH?r{4#SEa;xc<26GT`t#|UsB7t;&2%qH%24jD7kde!)FAI>G0tiM*m zhN|pV8ho~6cIr*#Ki%Ee%D!ehouP}GW%9}#bR&95w2eIJYL{QIB=U`GEl^`t;TC@h z=m-nKS-C^1%)Yk=!unp0CoPFxjT8-*Gf}Ni4yfyJF9NA{<39mX!~#JYB-UErSQvIy zj06vV;KjR4a74)la|ssFMgRVzc22J^+weB>VRj&L;vg;J>z=x2(kl`pYfafy zQO`%*2A5Wiq%Ty|x?43V+crV2p9Ari2$CR5k|t(<-1zbPR36gu0RQDM6$5$ z{oaGweVp5YZz8Y{ui=X`JcyKr_`XEql@>{TxMLdbloCL<2|kVaa3Ol| ztcffjklCTC@WSd!8{?OzVWz318LD*EW@Itt`on^+Co`_I_C-^zK@Fsav)4rYvFh~j zOjKY91LBg!P%xpAS%(bsr|lG>T>qgF288m9!M-v4X@Vvtm+>`_-%(BG=HgOkG*NI}a3pQ`cy#K^oAL$5_K=x5T7m^t|@ybhwPJ_-jG7inQc% za_wgKInV2XsQE$N6sV(Ds{algz6(q9Sb4@c*5;3WWZahU{ zbVVu8C5>s0n2ay09Bj{@1X`d~@UQ07@i6>hb~|`H?MV$i%xe$qc3&huQzJvmLpo$h z(vfl#b?q05nsyLlOuG6jJ+;Xu?J2pK&T0fLmqdo%`2J%?Pu#|~w0B`aQ{8vAp-bJ@)E0L2Z9I$~olH3Lw+C8VUV(6B1H26(0T;Yo08YoD3_`V31j;t{ zy#cU+VW7WX@~^D9K56bYHIqcNMpu-UV{x^5q&Jd1wD05^yyGO3R5F#3XwqpU0R(ej zoMUvNbPbD4zIA8aLHr*?tXR(8(|k&iWR{5M4r4{43N*UujeZuqp=0{$j2#9>Ohc+3 zVx+UM2j;58$I6}DNz(=>f_UROutvEuF>K#A}htyXn;UtU{ zs-ekmB+!dr%sd>gBB&SrWuwfxBWhsE*=heGe7LDi(~kxYi+?g7*b20%jRfHd7iBEA zN{1&;G(m$2{2e(5^_aMG_};U_8sMgyckqVCX$AD5%V*d&gYxl~9soeW&XiV#)DXbY z2R`*Op29bQU+G~xRFQ++tbXM18+h_%i5Lok zy~jUhA;@u#poZfdQ6jo{V=5Uy?v6DK{g+~PVDmh`Z)X)a2ukz7DqPY^-0WSyutD1_eSstjjTq1x47vz6D5*Z&m zT9PQ+=s^!Z5$tCEhQ5ZvIVr|%=iJ**@e67TpYt2~DybSl{3#lg_J6tC_hh8}7=&?0}<%ht5Z@>8ZKB<%*QWb2*q#!-G}L|BY(!2RmyPS5)FR_+4i zPZV$KfR24lBs;?iN6B9-yjy3jQ|hYs;~36o5*ei8<~oS%$PcIp(=MYA2|P5ze*$O{ zmJ||LLh@>1D?1$(`A+PA3w5Xj)RqQ%9EMrofmDK) zfZwWg4yDsjN;fybee-9U9UEABi`&O4dS=&*!5xu_?JSS|YJq*3WNP2M|LGon61Zbc ziFYf5iGK$6^$;$iw1URx*L~0vPp@a0OgGSl*2y!Jss%H5LaGjy} zQ#*({<2O&%b!hrqAr&vHlu8QFltPsrmv0fF{Yf7pSCE~kZ01D(9TQZ`lu0FP@We@w zb{nS>T+QQ0u1IbfN_}+aQsDmk;wFZLroWscROXsXap{w}BqdY+-Z?_(8m8?bJWf8eo2sFWvGh}k=>D(;?nQ^$Y3Z`CHdbc3o<=77ep#HwTr=r`(w;_| z_NbRxA<_t(q3%tW3)R8^(KSOP(^Zo-Z9lMy$tMBON6yt#UU4K_UmBFcxg)UXb`Ww{ zCcCOC;g?Hn>L5#J`A^TZDcCvT%NMw4xB#w;pJD&P zz>z1d5M+qD*qKT?^1zfaJvq0voZOv&h#}6J1{3QpPguC)E*dDs0J8tM5Oj8G3WFVo zt3*TlZpO~vDo%ZPB;kBh{B}X;NdP7?)zBaW>_bcu3VA>f&vrh-zxZ>jr)eU`n9NIi z|Dw)m%9)0xsT)~0_jJC4jkNr`Ac5V?D&L2g60SQqDA6Ov63Z$~xfJY!HZF)SGW1%B zy3|Xcl+K&m35;EShuZRi=)_jG+`4V2wQ2MbwzmYfCNf{Uy!Ce<*p}b`IAM??Kl1%b zl+r_~Jc7asW+j+vC_~PcPV;Y88~`%K5QDbZbeO~|J~-V5hrUjwoGeD>=ED=Wr+ZDA zb66+tSerK^N`bDkDn)RrYmD>4Ns;@Ms z%0fy*;M)27I#Q1=q*AkfdohRNa#y12ms1-{424Ey;J4817t8apKF{QgX@6VZKU#n{ zGJqMY_sQGpwXioyqWBD{NdrsY@9eYA0jfu7-dvc?#E$a{AV&B{zbkZ;i*$ZjdMA%f z$uaYfrxQ#bFfM=wKAE1RVPdV(V-v5UHCy(LGnqz06x~`y8ccys@xjn$$Ntx6M&HM} zP`B;=WgEIp{#P)08>RP)ppC{$HPI&AkE_O?aTJU99d6I}5H~`+gda5d|J(O3xV)PG z_67LAE2XuWORM(qk<@<$lEcqLGT|`%|6}U^Z$f{An9BOa6C9aWra^oA?|9+2h3)eu z@(`&H#;{zl>R~oTKN%_IGbXQqKe<#Y)4#8h;!MEa3BOUt&vuJOvI#%%wb2B?I1g3N!9R8$X=EOHr+82#~9exM@ z4?zI*y-5SLKpFpVd6|2QvRxmthyF{X>xRyGvlZvgUC?ZDmazLlPX0gF^{?g1@)dsJ-mDCybaitGS z<>rpDzUvr`ni~I08J7RF0Be8bElvFHH@O9t?T?5HDL)C`E+>RvnEx&FE#TZ|9q$OE zQOzBg6=(MmjzJFTgX|tw-zmQ2tvT?)L}#7-KZI=fCO^|MoDF4=9?9_$F`xwWaD#>B zQ~GbhI2@_xjY8F#qv`0r_jxs0jN^x8zq58&*G!Xfg}+-{{ka?dpDFZ(cEQ;&tY|e* z|3E~p968&2Yx7+dHR8k6z}`x)=ZQAhGX85450!uE#{3bv0W)r$W<&V@A?q6(D`A2z z?~R>_ZQHi(Ol;hEVjGiWVw)4&wvCBx%)~Y}&%676+JDep)m>dxea@+||M9TS|F0)u zT#jSNmHrF?-ta#rD@)lW61u)>nfQNa0D1f2q9gpfg)yfP$^RG#b9fD*sd!s;?W5}d zZZ0vO8EVKqO**!Cebzpe!lp!aBxAHPd^(}91@z{He@FS-k|u(Gn+%N*#k^Vo z&fgOcnRV8-{U>Td;J~5fC_l*G+x83@bwE!>@ zdblL|1dYTJrQT?^?yfdi%&g!YjiLa!=cs2JERY?t*yUIl?R8|O7H>IH_tFrMeLi2^ z);HX~3*M#=T>76*xnaO@G{L8!y3jbV0R>;r8XC8CYiQejS6Yy{J#P*$4)(00Z@OX;3E*B3RE>V|=oCyg~8 z$oqzd_Fdju(RMaA@Tapp zv3cASi?Ne_Ot}?gyY41;SL~7hu(GnHrJMQqDufJZecU4OIZ zWl7&G6{LO+XX}bp@ycW74wRU z&kO-yz~bU!#+jgD8y6Rqz4Gpw@#Ha=uaB{D;7oQ!P7ORfJi_GenRecC=AqqsmiY3L z8}n5s)`7MYO+BO$(&i7W$Ve#`p`H;c2@jf_L$NTVcr;Q<7?#ekn(lA*Za6VbUtHm# zYJKKL=wVc!>mjVN^>Y)qW(6CYcul7vjfs%=E2et zB`rN2INP_T6RQ^l(QJQ-DKzr(!n-Ks3AwxGobP1s=EiA#I`JF%#1je>cg$07n{#}W zCEs8h80f5}_4j(U!TImK*T(t9Zd227*|yLGpS#;LTCPXD+j++R{zwOmOx^P7^_RzJ z3I~gdps}^AzmXPjYU!GJwCTx*Fd`B@SUCvA5M9oFdD?dmjcM*;Q@?TDj@SJH-)^1r zH$0XsaC)k0Znc4if$>O7SFZGHU%mnb>FG#O+EhlsUYNg{0c#_A%8TfsDn@qT-00C!JrVqYw*pD~I&}ah6eNq>5 z$8;zq)t2?5I0&f%lrQs|ozqTD;ha3$_f5)+$|S@$!QwP1ZeGwwt>zJP+gQMivS8m? zxnTm1j1ZWy??%?XSy&vNQ+K{p)`Znuyq&qU>*eIyFjHC>LG|LMIlBe1Z=6rpvWRJA zI;OaK{-~aL|KMk$zvG_JLD&fWLc4s{@VNBj3vCU3yuUt=qRa|B;t#JjAd3r3@5BD_ zygGrq1`%3l#plcYlw0X&(GGciI3E~GWH@nCikAy!ux?VdZZatL>#3PzFKTKEnPbl< z*DfKKDcxQ!Y@!6r>Ley^?jpFh}fPBL1I-irG8!-%(=zW=gHeKp0t8_}F^9Ft+Qk;(Yyw=aFR`472MU zt&e9+9eqlwr>m=0@F)D}NT;zqBY{O97b(9|p>%yQi9AD+Ok?8UZ#9sHhHvz!~n_d4oS|Dy3Sb@9HB zMAg;rw5v&`GHzo|-kbd(SsS2jEtcwd4~f!MNha*XQI=zat8Uq!zRG{%uh!J$x) zWoR^5oiZU2Wm@29yZ9)jL;qmPnd!Gn!+$;4aWyL@C-AW1XCA(S`kj!+qOrUC=w{0N z6YpIOZhLQYObpNs+C!Mh7|Go$#Ad>@2&_Hjb<-bdwrgu>Xe_p}T+*FCbHMg;#_Fgx zovt0~UwIUeaS+Unr{9sr%scgV-~=CbB)1|CG{$bOXE|>1-abF9Fr(?T!1s31FPW1( z#vUQGTOY3k99mPP1AUQQvm5n9FQ_6M^jl{`J0>4h^4I(f2rh(HSH2tmz}j0wJ_1=tR4m-xyQnCOmU}nVgmI zrLa9W+b>9+3F$?n9LOZtv>=5Zx|(|(LZ5xifc-d}d98$)@wdIz9h->uO!gnF2%*JR z-vKB9sLA817e6RgaZKi{G_p3;?UuF8b5hX=2ZmH*1vX?F7Z2`QyACZzHmpc(z4nk% zPbf&wx=18B3CliiC|A5V-#j1v!+1! zp~i?IcHUU8epa`h_5-upA-c=1_#?I`KlUw~8|GP#Z5ya%&|vv2HylYLSz)HP50Vj;zF4SrjmkW%cLMA+(^ZI zW5eTAPegf>529dz&az}3)sfYwe;(NmHej?&>a+$ID|(q-^cVwCGhfkjJod1mp&xfY zUSlDW1icOPtLwsQBFo-55JS=E`0WV|yWb!lA0Aq@=soUFq9P?my1I11jh7KYORLw8 zrutkN3);)(r?0jk_=hfCapSN;EgxJ0i-yT888%eQUBP-gzBC-Ua0SWr=D+Qj7cIc+ zhnph?&;qw2%TK5Vt93wL{Azd>oThX@=Z=Wg%1B3B>TGL4cOp2N$<`tC#9_w}oLxl@ zg^H}e;=qlDNqWk}ba8YC@jC(1qVLlB>~gVRVMp9V z;}Yi93Mpx}W1vvF$d(`{OSQsIC|bZvj|y?smve7vwxfed2xvIfIm)6Fn{;3@;ttI1 zn6H!=Jdg48_GHuAg@Ki(u>zBFACC&BuAJ>sS(il>=X6R{wGP6Epk8Z+bvIq6IFfhE zRs$mq(qFDze__5$wws=P{7LW?2Iw@a|Nf$a+VZrZdAO4OpEctp)!y92E8)LgjR<-? z+xysMj2>(6s-;ctAJ*@$Z~OJ0E=#dxu5v$UEbR3SH_mtOY)T;HWH76xQMi+}C!sRb z44X+NP9FU+O3L(MhLTCxWr%#of@A({X+}<+iK1qRSAm7eFUm zKHut{EJXNOm_*);sft>MHeP^@NeFjImeK5dspe5Q%44#Xon_GH!5V`Ds;)kbQ&nBZ zbo207al+PN#GC=F%&RF04BehxA+jaP_({*rhtn7law?dJn@k5+&AR6D_#AIL?{)wKssB+(R{2k~=Ksd8oqi`P*76il zPEO_GnQM`6>J&KLIzLpXEAmKmbRAw4 B;0BE70TE~7PU!nzsgig7GF<;(}d|2KN z^(?v~j*>SN8vm`b!sVDkS$FHJ_Kw%A-YB5T!EXIJ;sHQpfyPRV9KvBd4AA`BCbEIo zU6`OFL4sdSZ|vL72=dhu)SxbtE+s2qXRYZM2AGr-VkTvp>K?Znh)>}$9q;iY1biFO zlKsXdg0>dU7Gq1=l9mI)bZUew@7q|}hU89>iNvzqb#sW5w`U^E;Hslm-gjYglA(6T zgd}U!@EW>t7!wZt(>MbS5n=?vRxV6qQt0%bsI|M%D zwrgKEunMJB3yZB(pIcDBjnQjED5xg%uQi*CW6MZ}NCYfeQpN#1rVJ_7cx|f12koRg zyE+3uM0K$YsrL-#ijAZb(hn};4&|2g-LI2v6dF1v8efQNVd>;vXhyrv{%#(x8APF=#m*)UF$ps#-tNT7 z5v@C2{p^FepTTsAR`>+e~-kv z{P@LkrUcIGvwrq>#(&~xiI7kiztb=bmphkxLp2$h<)S2WgH=&Hh=)#QetXJVl8p^K z2~Z(>cjTSm=H1oRt#bO@ti5Jtm0QGM|3I^y%E`-slIfp1^TSLxOLSLqTI(gw5nrYu zaKK2fN@HVlb6{&rP*G8Kv4l=D;C9|0R_h9sO^9a)m#M=2g=h1_V0m1P_WS;Fw^zo$d~1# zgET%;hJnTEV3lgt-%z5Y<6NfQJ-pkxIvwT4Lct<>cf+au27h5BM605bWB0~wkVe$b zHLH_=qnF!szD(FS;LyR;XDm3UA+oboYse-10wKo4#0DBrV`Rz_!(nI{!ALw+t6M`rrbHqGjq-jaQgX`Hhi}V(oFg5H!PboAW-kvf5 zOE_Z8Z9~DIY-z%n7qAG^EN4w{QZmKokS74h$M=4USFfzV7JuT{ofM6DV~V4=(f=h|*6+^gIaMItlnnN!ax0dG)3)&5DtL(Ls^yij zQym=#g&$=1XbhUi@tLu|yl!YWYvjc|Y{bKCfCXgr0e<9x@P?iml>qpT-67uW9*iGGT2M8}7>c z=&?h9p)PW^Gk^8PrUCIKciM`Jt-b&>j`(cBZO_lEHVWpZpzUrSsLY?`f0YL<-og zh^6Ss$QFFqmCJn_oiQBwZ?Vu<3|jh~GlKqIuU0gKoO{FFheEHp27WKwt@b*?%Tq3N zf`8bDe5muG>mJ(DWI!??bqI4PASG(t;M|{ZlTZj%R`I+K#BP;hy{gGB1E-W-J?>as z)fG^s6+;6BKt#y2y!cnhCRiG&u)}=a5{m6#gA`yl{>rBO`n2D9P2AY++)R7hFP5YG zuHvd&@Wb~U0Si%Dg`geIT3H$CfEuMeX0|^80F>jtd2mp%GyR>bJ&{H7LFr7{0hz8N z(YXA0TjOKauVxMj7?2FP4NDmL*C)ssTXx4O2zNy9b%~}McV5Zx9;53!@Y?s%JNLh< z4g=^p@A$V(;QGl7wkpIg)1~?+o1c@YyppDigEZP+p zL$MsnH@Fx;wjC*wR)QVy*6>Emla%Qn}t zcB80n_2$28z>^N=t1zbj61slE;^UD71c0Buy48X?s(<2l23mjX9z(zP)6eq`0Kp9^ z*v`}XX9{b-bR9Znq)Yb;DEH0)l7M~-SSay4X2@DgOp3#yWRE6iNaBvneO2tV0o+S}SS1_T@_R~7vw;B!CekfBOUD?G#r=ucltr?-k`LCZ8Hrv*xH;w)hR zapyt-60`uzLytA>Z6iROlniIqRnR7s8Y#ERFj!|xZH1-9RgGTc=A5;`zRO<@MBEMX zBzxuM8PZ)&(?W`jh)+K07Rl1P$#=p z=>TyDq9E3+N*{S zDBTltB%!qYqQH`1MnyI36os4MN}0#NGSPWinhYJ|7};iyx;aC8xSHI!F#ebqV&mho zaWyuDO9A;3 zRi>>_qhFl)wa|+>pBxi>3gU%kRfq-GY}volC;?EBLope}^VS?+DKr*y?j`t>9UxQH zVE*Q60J-O)I%qlR^S%z*@P&NvvIcYJzt^V^*}tj2Uy4xTC3;{W7j_3+vV*1Nt?SZ% z#NMaa=N0VXL9e63TZi5aB8%9hI=qxg(G{^MiS##fUqWK~39bljM)7?@O&PInY;9b` zBvhl~90jD60WPwDsE7_bVu6?WfwTj;83iIBPQD%$&*qf9OdX#mg`DmcQ3d~PsBgaf ziB&=Em}Xt!!koyx*E}e>iCjhdUrZpI86!VQr_1*+rEfcH9x|RCn{`5=CUORcGUSILr`45SmR=VK_RdsK&P0?ggz@d{FNKzU}g4 z7}3c8(*&~J0tlEm?DBfMW(&Q+BctqE0`K7kUfbdcwq6>0ll*uqi1Yup6CLw{_Icm3 z@ick2Q=`9bec4U-_)}3y>5psvKl6(-b`^tCTH=&cJ4|EDKh4=nV<%`=L+Ccbw^pwZ z0Y!hblN39E-L_346#+{Nahp`VKuPk}c8*eo?Cym^o5SXRPxXa;XrV87-HRn$3*|21 zx59^jjpBXIk!tTBo$@xU6-Vn+BTCCzQp|6le6sxPk%s^LX zrGR8_-!ejU>Sp_mJ&$#bEiRBZuy(3Rp$5e3=9ODtc<+|EvrC+T+k`b&!S&;f9-Ron(NyYMz&~xq z2MUnmhui9O81dDXsC1khZ|h7O>gV`HjY9G$gKlNw)n=h>Y#eH5a}1~pAXXMu9#1HY z3h9$m4y2cn!G(h6@1u+h9sruzaOAQ3h@i@+l+z^9CYEMPW3d0!Kx12f5PHUiR6BRc zR7@dTaW;|8Ja>e;qYPkcr3l%a45<%7Ic&``C6M|Jn5l$ld3j~%vt-SksocMG6maj> zEn7N0EnTL{>3CqswVKv_tk7jP&lH|nnz1+i*q+q#4)Tmts1AgOy$Z1_?jfutO?JOn zCt*OFpw|c~nsb9&m&c8ZTW@BSNj~R+&52mc&9mwe)C4?|&Z+mf#~mq{8bEng{R-3; zm$ll|R9yp@6s0>Mw=uc+_(WwrHum_7U@_{=Emq9zr&|Q@U3N;T-HnJL3%Crk`yIqL zB#!s|6C7v>LcVsteBN@okL2=8DMkisWkL3R{JhKO6TJOfFte80txovFHlw${wRH=? zG9?4WVw*ejlQLv%VSgG#iXE;rm<)nN;8@{kVj4+uqcF6p>Qiq> zA$D*e1UR}2?eDmxP6kzJ`fS5pmbRPaHH(k|wek_$QllF!C6zp#l(Wh3jNhfDO#^g| zP(k54=!S{S`>sFW3ff%xDVO^vQ^|<15^q6AoHr?7@1Q5<`eWy_;1Xl2YiFdr)qSEh zKa2OR9n;RR9f=jeahj|bPX>*=#d@MPnp{j$QAV3YPKGQoNeUZJnUW$gP({{7fnql8)ar+Ae{ zSNji?i!WQj=V@+-xw(G{@swKWK|@1p(LXp`?-6{r@xsVfw% zNqO^171k@E-$E1G>^K(65CDy^VSh}Xja9NLwC0^0(-AkDTZ4`6PVP7KhKeSJU& z^;N;e_ilTz0j_tIX!U&`c8F;1NQAj~SKQyvkvFdYefcmqK&gu8$|;?rOk@A=+ICNA zmOdZfP->l)t^7f;Re{yoOVGp`dsW7es5K_;h$=E;Y;URLA8j)c92_35*)%ixe05w) zCN)JF9xB8EK-xmHK6*o2)P@9e`pGCoRFm^4ae5g97$zGmMlF8#1vMlwP>s&xANuK^ z-+o-rH!n?A8rX*7#&K#(G8$J=>CnV%X{HBmB?cpC5eN#xVfXEJeopXDq=QpBs$CoA zg5ybjS$$diboI2s<9V^H?yGm+>&p&k@Cv$)ne#dr>#R*)YiU(B%LAi6loQ4LJ(bjn zwoo{_pyuW9!EPkw`3@CGE_EX@4F2ZrYb^#SHCW8YHBN-YD^=_TY>`KZ??&q8A-3za zl#ulc$N|TMp7IfHCl8=9o<*O#zGABn!JDX76Pp)!}$?I&#*A}EIez3uxJA&1?0 zCilr?xuW!W_;rJ-tiw$x?8@cM~BnOGXuUawrnS#ff~8G4oPhSFr$KB@=kyzLE79JT?#nF! z%S`bP-C2|acK?}Po1(r-wAa3<^P zbLr{|O6>=wO>t7;@@0W(#R#)U%O(nc-^*a7381*Yz*n22R=cnPM}ym+h(QQLV09yL zwfQ-#nm}f+iO-1Sv<-68El!|-UCfH^$6VTzF~+x(}vAR6ShH%h2{0#!nf@P3K>|(Y*IhJZeqCZ<3V`KilfFxk_3zA8pr9<<7AX z+Uwi;i*MOv7Xxo8UtE04k8{&5Ui_9sBaPcHVJy_ceosTjRR|8?_pyvR()qE{vcgv1GIKxY6LuNDQ;7m1vVk+`PDF4)RNn2P^^E*~-&HqsS`?Lx01(qzKs;aANvn z;fFVAF{jUdud2qOw*hQ`?T@a2;bgHf*`52VK{y8loAHd|(+iF}f2BHkDn>AnUjoGO zRqE z4q4qZI}Z)(fJ0C>Ubb4eDMG&rcq13((?RN;%w6~xcq@+^Vv>Qv2&YTbX3%=JPil#2HaQLDx&yygDHKzaN;M zXD{&G?dOlk+>dMINTPSkbe(T2=qHSc6a11!f!>#0nwm8qoHcr$Eio}jPox3dZNVd2 ztE7-h8j@2{c7R?40oGx8q;x%Y0!ey0bg()I5F5=ghFS)lboA;fE6uTdvv{Vw2r19* zQ2;6g>G%du(Exe)mNWg(zU*o>rQQv}C&8Nzs|)s^KqlX^v~j~$x8$&}U+?vG#XLt&Rz55^ za_RYyp~iiV*xa~0cWmr@9TtXjD*!tdEJ^kubwvf^;GB5X0`&@C1Th>HHQH-v!cvF+emGavXTrBP(0w{nLziIOj z!=$+cBaJu4H&?UIdgP6m+vRBMO$F|HOt5i^79(I>*U*0-oO8Z~G@NrL zRbN$9B8dRtjVd7fEinj(Ba+d#NUhKmIZI3yY%r<_!wM`ZVP}`2B!yl9I5Euw#JLBS z+Xf>NGNX(brsGht$yH^pP0)`_VMk4`?SP?nm^48t;N`_;5ZD~wc~a|n#Ib{h!Z?3U zF*ktWiNycBhfP5&uX9eoR%d|NwUG5|%Ub^!vRc}-`V<9g11_=oH8)7$Q1o9r0)orh*~&9ot$L#D2*?fDAeDJ3W~K-T1Wf8iRdgO@dL=H>+N*?VIMS6?|$rd?cz{H=Sp{WDic+& zQY){(ZqvZhMQi8YZCI5f@krvIJbCued44Aga;bO*$>QQ8-Es+tMT%Zn6M&Q1Ebf>{ zy$GumtD2kY7{w#&aj94ynh5dtRTsF$=)GLJKeI^WOWd4N>c>65K`!z?vBAQz%gS<6 zDbhN@jM1q+8|kP5gCS(6m{b}^VS>uhaHS!;v4=V_!BF8~md?vx@xX4tmeR0I)4$uj zr)Q9Mw)}*5EN^XRIFMe0i|KAU)nl?as-^8Zl&~#tds>y{;Nb0y!20P~1I&elDD&c1 zNP?|2H^eB+qfSP*{M{RESFM^HSV;4i8Mj~V97mG45;G1)DvhM9a1=5N6RA(Qf~9m< z8Kp}0uUEaQ6A8}&@h%KDy+~a0aixxeis(0bDUax97xL!%B=prls8MU9Z-t7&v1d3@ zIF>5u#-ft&g~~T57wI5)@rJl)FkWIjm`exN>Xj+Buq~c#E1t@S6?Umfv6aY@0yn0a zw&jhn0=#MWE%%Zfz7x-9*4Cb$SSg~PguadP*RL6=EIkEepMA$Ug6}c*?e53_G~FsX zMJABn-y;1D4rUhI_}(AXQ2l_#GigtJB5rY81|^NJ1^~_RpC=`2F3&ZHe)}a<#1LnE zLJ#?opC`rB`3;r7>%|E1H!QXv?2xbLXN0Wm`MNI+QUYQwm zhig~qNn(xF%rjI^A`w!?$OCjXL-Qcp82i4n37(vpn#GkD^->PGsCrbf@`qyCk^D}1 zbjpzRtUfm_1q*>~t`?BSSdxY;=&orTIx7UL&eF8dIF zF%YUUCtu!_T#30+OkJnQkf)PG5@1wD^Os|N(0Ye$0|ivC>aBcAkLNzCdS6}0+f||o ztUe$QDIY{g> zrb~Ib`s7g`@uT~ct$l#^tLcX;P>o2)c{WJs{^o)CN61~_-)Wd-OzNL52a1@B5BH4s z2mR}bo;PKmn?$@BMy`Q>6{ev|gdbF-pA-T9OwaB<^Bqj@N11zUoisRkeKo?Z8i7~t zByYVQ9{;)|-@pbRA+C-QJ%su?FrMlh?VlBeKfwdg0zapAmUC%$*;*Ob+&AE046UF0 zv)ylQ4k2?-dN;KPf-elf><7&ChMh}(RTNzxKv>Sv>`U5n{fHZwotJdNhX#>pPN3cL z&!r9_7#zw!PIgP~>V6MUvqq<((Jtr&aZsT6sT~O{(kB!@baWCldrJ~=2FF=n%Dd(^ zHvPZ}r@IiI*JAI3H&q82nGKH0tQQ5DP@0+%W2KblaVOww_p%6^Lw!%)v>iH{ zPLfT5@nL@K%lk8G^kigK%$#vx{+aO|j3^pit_;XkN;`OitHVep+rvsqxeQf{zL`6}UrHs0){bSSt1E#`}KQNZE^+n4SWgI+c%3?i0} zIZQ9-pAlAONwKKW>WK}H4}7UMIiNJ6obH_0L5ey3_QH1FH{(r!LTT50==_@0oNj{$ z#{_(9gNW`^eV(3^ufUayL=d-T&#tlyL?LjR=ARn<~5k`PYyp8u=H$6_ehlJD6YN*T^7EvOPy>_di!k>-*V;&C)%Uy)F5L zQ5&#E2rKTNgV0QVM~fd1`^W*GkXvE?*R~_aIerPy%c#fM*M$oFcF|vrN#P#$i;Ih0 z2taKxWqjJQl{JWf83DU|#z8oevPqOMpPgwJ5*y{>%-dqyBJ}Z2>sq6mex}6(C1u<) zhu6+OM(3}y{*U1qzEMsb+7-py6;we^D-+>ziR)5@H$y9^Lv9+Fnc_XY4eI408?>Bg z4ko^!MSLZMR67uiI8Z9$s|2zLs5zRGCt)sT=!L`C#f+cl)LLz9$0JKHFyl0VD{wVU-s?*lpWivn5%uD0pDcJ0GO0_wT8eZqvxBY?i?x z6?=soww3&AsvL-)#&l_P4IO{xbU;IFE6Y|O;haCV(k%yfc~C9nTz2F1Q0Wcp`{zpn zuEu8IS$sVCeOiw_dbsLY$!jt$cI+7eaMTO7qJ3tB)zQmX>z{wdWfMK2y{EYB;C_t{ z-1(X~+IzVLE_n4<6XDyX`CbkGN9M@(Tk$gjFktJQI?q1n>StY_dvn{n@waX80mGcP z!1amPxA2b+tP7zhhqU)SqIcg1rIg_JpEK`2J|JOIseQo%481veUSWEndjNjd-hGeV z#{%4~FYLbNorFxPz7z0#!;Ak|9v>LJBalh!h{iPXTq%om~oO&v)nuMkg-xJZI}bTcGD@O@I&%3v>Eb# zLXmkj7T9fV+47VQ<#qm1qygedTHVn+c<2@J&4M7fAWVt4-8*W^y9MLJ?}0^s!4iQN zLzNi8@l(lve~3@n4q@_VD@TT;*z)fE*>aM}r_&a@XeLVIp`3Ry&E<(`o%Y5f#@ z#jVAs&ELoi3RSRn8>iKWqKo(!551kb42unh~e|s!)!FcP9nUfw%>G zXW>mMvT0F%P=&03&(j#4|mEJp9eB3d=I&P zF9%9n{_bz8Zv5{`f>@vL*R&rjffh%mpIbfmSUnd98YA+815(P8$%cXf@2RPMOj$nT zSIxcy_6!JEd>yUpX~Syk`s|qc^^sP&6Wr4AiH64NGc+ljx1Z z8#k@8vLLew$~MGcUAT-Ua_~u%rRJS)g&hqP>4%b3nc6|@I)e})rNV<8-x5kOoM>wY z2ZiBki%v3PX-yo~k+qWd{^3_%zv@}Yq6Zvs!YnygsOB`)sQmm>8h)hQ#w{rhDO?xQ z7Y^cJGX?9AO^0Kn?WOwepQk{3%g&<#DP;GSP#cY6%CwKS^^{ziNrqy2PL$Qn6l(!C z371j_l-39!uR3dil0u87#h9S^GZ?WOx`#$CcO6|8p>WOg1@&3&`O@}dFf!$cif9s5 zfc*uV#iOXqVBDqAG9_QxJz&-GT?(8-;jh`LNzWlZh08=GI)c?2r;}p6bVQOIrLZik zhyq@|w5m1we(4hWw04?gThW?F2D9V=_HV0WKOcIIZ0~iBZrsGMN4Sd@!HqCV(%ENg zZaB_c?sEagjXD@zPkw)n5YCZ{>{q{=gZch<&AqkbhL4>yNq*-~F|QrkJKt?+g$630 zbisj7DuPSjj!S}1`~V^7D~R6Qmtptw_ZvKGO0^G7c*8xVut3z$a@7yD8i)|U)sOY( zZK;vej1X_3tFSq6fdBVifeN>eKFu%TBrT~005TYtn?)zI{m8%0w6O{`(`D?}L)ciQ zfZz{EFg|H;9-Uu#Gn~wafxQSn4wzj4lGv#(Gq!7(!r%>iLbkMQclj__glf-zC6GKR z%3tvyJTME+%S-VTEH_3WU+GbSa!@_Ha1dM3%GrztV57Ue9Km9+zh`0^K_j~|ob-cp z=(7xyklN8fjU>>@d*QClE2iE4;N~5qppKrnD#nSyW~9&;JORckt|g+YDu|&l3LDTS zG z7~QFNz%fMO8SD|DLCoiTd#tftxuO71hOkRG^ue`v^6y^(z~|AiioJ82O4g`c*L zTfe6PhkBgq!TST>8N12|SSDTH7;61nw=efs6_Kq2dP%y=Rp;!;qWB9MyIeOcgHTe{1$8!g_ z_vhRC=?;GBiTuTQ;3!6ViYI!$sg=@|zv+YK(epmu3WInz748V|`**9f^@L`Rk1dOS z^>JhRLKAtn4Es@)`_$c$RLE&$gbHyg{KL2Vs#_xBhas{6Yw(W=G z^FVV&-~sJ`T-)Fu77#o&?ftqkKo~%9c4nJxrt!HvW$p71;36D`S*BfD1?w4)dswG^ zZ1n^G8;*jL$CD05F<*9}r#kdHzE3hYm_o08l+j?nax~CQXcAQPRvc_ICy5ZVq2ny^lB{J%V^^RG@wW ze@tr`LX(zc46q2iviT`0{_{X>!t|ruVf+|Wb*IZbafWT98Kp4|Ys$lxNJ*Dc-u~`+ zQ$D$&JYI~!(R0!B{-eYlTP;ovI9OJd)Hgk&1&5-Txj~`kA{wx}2u9pY58(h);wqB@ zvd)Ow6SL(cl~?l`4u>kUT3E`dw{%l~kv*4fz|pASS%Xhq+F97V<^+1Lj0igHf`LYc z5C25+pH$yG?a(4u3r-ar=Nzyp`2;?mrFOqP?GxXfP(kTN?e7CVlwiJ?eA|jg_CCiS z$jVRN0L!CxV8{?2mpR9{+C7mbbCq&o^NeT$N1ZKuZ$l$moHPp zwYOcLDz832-#*_kw09X&y=%Ei11EZis-`-6YjvFdj#S!&1_SWxbEAkvYxb__QhJ`;z&6yyjBULq<0` zoYnRyzJLnNzz#<)hs!RH|I8e?93^z=`!#0W-e>uPX!-5HqIrY*8hX3w5hXwtc9@2{5Fu+fT;*#q^C3m95&DV^a2d&3qNq^}x@fzSzu%6HMbpUWlhAfR4rET& z*uz(iU6cpn2WA+pqC7m~JUhnp4RUC^i+Y;Rb}8PgPxLA^-|3UfBmGN!G#NV^hyE7} zaG}xy7;HexE7leKxF69>?Qn0#IgR}ILdEi7iu#`i3rwLo6d9|jjQH*Wn@190wXJt^@ zS}5t!gFO7ANPPewI{ZI74YlV!16g&&f}W(dU^t$gT-OXWpC2P@Xe8?nFBe*$Cx{Io zYJ0eUTnMMTU(wZ{oq-M9WBf@DO&tl;Z`f?*dt#l(qCj@eJdhENfC_{H{9*UA>2*F{ z$dHW>owMXBR^TWpN$Oxba%9n`{3oYN*-#8#Y-Fh(iuJt*lrAjLXiPT$3muQe3{^V_ zO&OyHlT`P+Mn0}OBBs9y&7D*&n86q&jmU!X_hPzQ2opr?akSc`%ZT5kfS|CNK4-Ni znYf5_b@Z=!&JJ`KKbsmBddvm4f7kIwYN*-RRkcjWg_5bm8X=CmL6*^=Q7(-$P%P2o z6N3enkzY#y?Pa8CjA$pjl2C#qh|TguqI8-gheV82vzLcSc*LNRNvnvPro(Bn+7%JT z=g82_KV@;3MD_!J?_j;RgMO#cSa5M-s!c1XG-s#CgIE-nieM}T)Q8@o2-AQ&P%U3&k@$ z(0kp6M`_x}A~i&uA9=?PPkPkhNHJ4ZGwp{O=? z$I{BiK0XaT1}M(v2P>C9PIK4Wbp@DQtWL{B#_V!5GqSEGh|gx*>N3|9{OKi5p9Rna zIu%0^qy43xMHiNZfQ?gmpnHRn402`NH<3&h)ZhCIN5dRrZZcKRpgp!w+ATGT8l}QMOYJ#Z?BvV3h-!ktK5iimhGtgpT9g3>_PvFp z;-nS;PaL8iv?B3K--`k7s^~{wg_c&aT%JmS&NwqH`Wp=@Hl|`Hhr28e;JI>`F{bpXB!MZ_vFzZ zqwv3>RAc$6Z+yq@e@il6cQd(Z_&asj{{8*Q9nS%n{ou#1z2nQ)VW2+-08ib>&le9L zUVN$0nkt~2SzdhZNgf^~0>BHnhHU|5Hor?a0lL{-T{jn&zK?%uuz09^-kYgcfK z7A@xUg)&;WugaV_lQ2T(;2`N7{{QygHOR8-IuHBSTKk-PZ$Abz)93*P9B`;10Fr=c zNdY63B_$qPW^9X+Evqz?6PGQQBil?=N+l`#my?1~c2yjwDk+&RS1OK_SdJozqlXne zC|RTgk&-(C8ClwQsV`3sEkXg&*VJ}m1W=DkXG2YZH=8L=2qFp`idAQ_1mbEPbm8a!|Yvl3XDs>D<$raD=73yJd02KRG!s}g17 za|cK=mP(l`C6U4V2LCKv?(@$GAb)lpcK86y{48$pZuZ$ zPXahqtzZ8D!G4aw-}g#h`8+8@KEDZS=@Wc~-Q15vb zcs?KW6F|B8Eato9sJe$+&73Ba%to`IYixIjxuv>xC`=TIITEEvUL*+!As__b8X*J( zA3p>U5fdm;q5$#kgj}uba(a2AOZTJn{|dm_`?q4Y{z1b8Id?$U<^9-ymU7;SgBb-j z&ZbPmlaNB5X6Vw4&ax%m?Yol7XsgdV#8zR$1V3ivUcAI^06OYlpyTk zabV*CAWHsD{bdI^M9E-$pjguH8P0pD-&@1HWp837LEvech9CiyMK?lzuONZ|AV`2| zV$SD+7ZE}8NW{EHDMsSh5^5(AaknAiZNhwv*es}7%(6@#aBa3r^XGT=Qwiy7-hg~(jxM@ZMFgQzu&5Ea zr~nuRRKTJ{Y(~Kf3nUhWu@OX>LShQZvJDA=6S8lVF{g6tYt|Aqy->21LIIXqi%BQAVYual8DLOlH(gfoMJ^gTFuVQay#3Eo4?*bga!< zD!8diL{U3|jBcMrtLZ3L~VdA!`#6MKHlt zt8)r31Z1($KqJW>B7yQ|^aj;ZR0-b2M=W($snWj}6W|$tNnD z{}DhcF!F?>r|G=2jB|ro&Z2pqNde7u5CpcM>iUJq1p#J*z)DL=X?g^)Iq~x5ZWlph zkSW+Y^5o-a4m?BG060*uT3uwl29qdd z!UW{6A?o)@?f_)wJc*Jg>x{avnuxN}3_O45k}(LmNTa1DW{B1`+3C3FiqK z%6V3Xe{=>h11YN?ah5L^@szDMOo2eCxVF3xVdS}Km*`4lmQaa66KEu2iv-V7R*9ei zL=l>dNE5=CEj2``jug_^QfR>`k;{w`RS2-k$Mc#NsOuVr5r8?yqXl#^GM?C!Fy$rBIT6Bl5h+ZU4u#gcmf ze9A_qHhfjVHzz=z`%YJHQwf^Y`HhFCn@B^cE z=L^60^!E4v-sh*M%HtpZ(yjYG^Yrw;X~~|d1z+DL+xpi}>wmSE@IQH#&;G&R`7kvv z^}dfj`Y2tvaKRpUU~1=Pu<0xs@C=@R9$0OUTeEhDP2xKYJHRe>fISbDt2DL|<`|7e z7y(!;;8!^Sb>(WloFY{rARvHJqLe@tr=0UkBq5-bPS_F?C8FTC#RM9OWHY5)yvP$C zH2B$62)QuQg$bUQKP})3CJ3Lm%iqyG7Klh(kFsh8G>eCSAd*ILka+x$C4h9j|xXfJ#!?0NL z_wG5$Y7qMJQrNtIj}3n|Q>NfGK)>iFB5Jx^BZuJow~AC{BQOty;Gr@RC5lu5NU5c| z%3)MKQ|Aj{GM*!)6IQDlR)LN2s!cJ)-K%OhavJ|w1KXV?`^ImDUEgW!o+}UAg$uAp zUZksLUugWvrds-B27t3Wd(C72_SyD7 zj)|VG1gDAUpHPM8KlAj?{4*R@#J5{mPT^uRi{~{s>?r01%=d{K${? z;Q3N(YwNr{{4nh9oyK+-(T<%^n=j08;|6Zw7TQ(~y8u@9a@+dM!(;%vv854eq!?+; zL@~8g*O5{pB97#F6C#m@HGxdMDYptlvGvAX4i1VHftWx&OnSj25D|sG>RgmhSb*Tt zt7N8ZW?i3L9(JITFc%Tzc@Y0S^@;LMd!Lkq8O-d7mplo<%%I>&fA8&yUf*C3m%*N6 zG!QW}0tI6h6L|kL513Y{NIShiE_1;7^{dK1V$P?L1tSw96Az&|7>R>q0VX3i$Ko7P z4{yxkdBwr)c8@d3uSL?m2RIm*jlo7H2KCQW@_R&N6oOGG7Y?|XYG#?CBJJ2E+$>Ar zej|R2{Fr&-mh-WMA9;1zF3;EcW3{{~{5uh5Wblr?ut5P@n+-aS!Ta3WDvdE+(5hEThU z(0ByQ=D-9qU|qz!3#dmEn^=Q(42*2yAtSfM zRsj{jyO9!+ip5cv`(~vy-HoOi>9FzR(r{oB4H(!87+-o zWybXK!ek7TtUJKAK2***!YJ`4~n3fA7?1Pdsw%!JQ4&_(_<(zY5i_ z9Ri3{LgXPBKK9sSbo$0QJ9Q4W^VDzi{Eqin+iux-Dn3xwKwfoL&(b3s05|}1=GE z$z%55)|TCFz&7_07Do7MO||x&A2_wX#0b^m|NHg#9)IkmfUw)AZ^ru1fAYp3C&k|b z@Xassuw;av7uLW1(GPDtQSSV~k4-ln5b=J1KHJ822#926c=XXn>5)hL0A9QZ+T47M z*4NkRsi!8iwpP=Z(k(eLn=nqyWM#a`+c)QeNh7OT$)2?`)*x-80d*AEilB;81(DQh zK%0cQ=0r`1EsNB|h^?3rSK~l&u43G>NR1eY11T9L)+O;z>Bgv(To2GAqEb=z76+eF zKqr6SPm92rp;9-9@AJppO{Va0d=9;6sEY<5duh19Xg8zWS$(3D(PH!lP(}EmZ*CsQ z`e$Y<-FRUUX)j(Vp#2awWPZ9&@_+v*+N&H4U4qG>^nYg-rH9CWDNw4#M!oS<>d0r7 z>7w2`w3lP-CH^~us9aQGc5TCsZF;4olMZux0_&^*h&$HlQej!nOS5Gt=fVrKS!WpK zGmq9+_w%5)Wh((=qflwmlpD8Ogb>ssT-qzJs9-xu5D(^9pLpUi`eT3W zJb+7h=pk>9Ilk4{bXwW!WKFlWl*a37tCNXce<9+IV`E#)cTiPp#t`hrhH8?ojzvVo zOjJuiLQ6^&MFIs$6jDW~h>QYNq$I&pL(!OnO8|IpH6lSlT>MMShY*OQV~%72wPZsh zDq{F+A||43Gg}sWMCPX$8w8aO5>fqC90%I@M4nLD)}P7cI=VneFQcIhLK6={barzQE1+JE3Bf~Y?%yvv zF6ZeGf-y6o3B;T+*;5zJ8Z%B)}V!N1PJYKPr>$UF9YdaR^_T0`hcIVn1diPFa=N<;8w;8nk*I(GaUvw!)_^N^M zO=X6!#oEshXM5Y<_QQYm-Yd(j@FHz)ZW3@FTU!_Tp@%Nu>eZ)tXXhH%bw#VIBc9E6 zcy)CmH*eN5<2Fo2m6*2DAO+shK%)>MEEq--Mu{nEh|$7`D^6%bgbH)u7+a}XSur9t zVrFHcM5fF!f|ZnN5kyt4yUO5z9cE_bIk}Ww>jZ@4^T8#G%(6~J{t0>HZs=F+xkc(! zY09{jKfmY``g2{Y&wJVmo814nj+y3uHyMaGlrd-Pm?xIR0E%JM&^(?xt-piOE?NI~ z>}QOxX7zTV8I+goLwg|XfUP_)dk=E~*;GIm)`#EP%`|%o(S=z{nB6fzw$8+f*t*uA zVi;e{uDi!UJ1f%Sm+hpl2X*Gm9E;_tJLnnrfb28O5I4Nf#!}3^&oVPCP|%bVA&^EF z_I44r2$K*}N;3pmP06A%nQCi_QI)7|70?ty9h0hB&=^2*x0MvY5v``Gim@JXTyT|W z5fivh33WUnZQ8CD=^f)^scDie7N56Mr%vf?HnZvUVf&5Wcnl9d=DP$x4gjB)$?V%-3m|+`nc-`(_A|uEWbKnb_!BRD+nvAxt;F^9OSHB15H4T-JWVDc zH&6%K-o8nb$%wYM0bq*pXk?h}p`n_N)j+cjv`vc@1hf@^1u;UTDvY2pF$t&w$W(bW z8i7@Ts4O86S)gPl-j7P8S`(8}2)SygEtBQ(y3#l+9>x|aFeN31r{aojD6`Lga<&Qe zd?7%BtS(Kt^n%<>m=&ZmXi2U*I~I|fSc-HYME+*PYa+;M+ z?jGc?g^=8r?x0m#8Y^el0w5PoNQkm!1dwGPyATHke5OK37uIoUPNzE_3Fq84P;*=Vx>%gi(Mx!WZRk*pgU02maf{GAH zXrW=TXe+6S0ShTv5GJmeI2sExag46X7eXMj#1sNq+p?+x7*7~jE~i)ZzQc|*44u)3rSy4Rz=2%{y3SPChF z*JsMTis)x_%(94t)4uL?C_j#gEoBLrVhhj}e6p;6`5c~CM7A*)GS&n}sa_X`S#puZ zYP5Cb!VuIfxm|&Yu_YriHLy`&B{gL>oyTY)aMG4F1WSS{M%TnnM4FnGB1KK>6KWe! ztZRwWos{ZP6UX2PgebB|A&k;u(dcZp(8*+7cXnnvn>Dt!wy8Tijh#C;v+30HhVS{7 zKYbrZ`lOn@gNQ!8J^S*9zV*HDoxYYh@|FO@0*IDFW`lipbtQe<2Nu8n{Dlh_@YrLZ z_4P}1_3BlgOx{PMQK0GcI+qZ6Jgzy$k)+g!YAa@y)O8fqAVeBahY80u={0hMDr5-@M40cOQQhOCC8-Qp5x*kKdZ^0>vzb>tiL)Bbp zQSDL|*&}7hVspVG^~D~B_eyrfm#oKCLSQo-TGU}i_I~#8m@_bXxDP9#bDnl__Go^8xS<*BW|>*4!GOrJ2HBKdT^ zGXKzfH}BkeCH~28D=-9rzxgxMQ}ZT%!VK>xqR&=5{geOWg)`4N7=o@|{Wwo1@1vca zYrM8L;n{4;lgWrjqncw}NJ=A7ZAG<`x)uR6sEPn70E=KILS$8p!NG9eghUcxELBBp zq7tJDYsJiom5f!z8>UsWn3ojA=w8!>2KJJfx#bR+Z1!FNC*SWvPoS>y+vnek+;=Pd+6#4Dg5Hlw?Aw? z7#8n;LSNB+$;S*Tv4_2`bwYuIyrB-O%tLc}E&Y8qNKW?deKcTs7*wy-0j=Z@J0Q+L z&Q=Og*)(d9cVuLt03PE>L_t&-E*4Sm zymOr9^Hz6v7rMTFQWuM8v)LcmsZ*!4-gwu$!J|*W>>bSf>7B)u@A#(s?wh_+Gx@h0 z7?PRcZ~g4f=B$aIAmIHl`s_-*^TBt&@Z9q!PIybrWD;n7{TffF6W$*pPbQV5)Jk1f zGM}eFq#=YLfQGi!09X)ViP8TxV+p}Rj24>40$0SjRx7H+X2gL&O3G%$-d@|fKmtjY zZ!gO7N(G!W-%m>*=MB&uIOJ9q%N6AUGUd6sH<^}HOtQ&PS2~p*)QY#p5a>D<$kKz@ zesJoFCPs&ayQLcKAbImy7K%E(mcw1Z+%5wuIkWVkT zz>|qOuywMP0g!Gg#G89_fra*M1#g5V3@ti`)TLJ{?2zU*_|&r?(%a<*xoc3ieYr^n zzp@Q4ui&woCrxgLq?x%TRUFpy*sFndM`!T+!V(#j)o=Vlq7b4?-ueP_9~6pV?PIHiTSJt<`cM`C7GKd)E;CJ`c$J=)u=X*3c#d2$1@ zS%cH3y`|>P`@iYFVD>LSbdQ?-W}CLYQ?g&yC2-%Yd>LT zU%Ne@{OZp>gAaboXvU$C;OQIZW8++awX2d~Y7S*kg(#~x8C{AGx+kC zpQg4QQ3wsy^+}}EfSG8q=m*z*;}ca?O))mvHBB-o68qE>v(Fea11cWvd5G-yd!Ddn zg(^|V?9r#zJj^vys@R*Kwe*~bOIMLfS0xtVKGY;DgEER^T5es)YI$>{O zW*Vq6s}U;c^LTj%uB(qq&tHbvRPvZy@c`7ihT{XRG6mT9008n5t2~?)@~i7L2BCm#pw9s>U+==z_%`G-&MEW5icrTOd#3=ia-4&L_cmfQ|g;&oP_r(PUE5Y{pdA9_D6YJ_0}~rR?_`a@cH4B+Lx+8VU z+A8MrIgQ5vb3@FOZ;@0ZGZ)jOY+*@(RFzegnG^fZmYJY3<${TWqcL;2pSoKCPBYIf zc5EO^d4@sKylekZAQ&5`0Z1u>Etsakl*3Y$t)I3q3zl-CtHk?A{vMJO@my{LMQ36z zf6bu(&f7DFbG^_!I;ft^hxwz*jcu8oWfiJorFYWE z6@>g+%i<1P{z~Hk=o9xvj`Eu2IFqr7arZs2SvNV7lwlUk_D#+#G1ruJ7c3aGj{-RP zUMVR8>IyTyw+cv#XwFqrvAgCNRmj!a*o-(v6W_1e?OW!ue>Gq9U9PUGKyG`Tx)oSj^ov9egze(F@51)>Awc-ZQJDN{*4N<=x1Ol) z{?j*F{$(P1=-I{UFMVo@zT=M`pS`fRw@WFFXk}#uvst3Lt^g?7wk4pVx(X?FGQxgzis%>eR z@u>%kr5V}_DS2KMnPP+-dX|RhuAkn3PR;Jp?hGiw#-1MECWs(ktfON>_%W7Z##fevAlkOc zrr{&hwIaqyRpo#P2vQ;nA>~lI7{#Z2)$<;{93GRZkw`E3-{&FS>aNSo>2liXB~R#b zQW+rR8@bOzk*R_tuzA6RyYVnDz$CbDJ8T#j6rl!|KG)Svtz>C}K4kXyw(i8-S2Xdd zKw9EghXA1Nn?V+0d*gP*AqPCGChP}CS%%KiL1W9fu6;vwSIY%tsTHPYh62}_gbu$` z-j^0gUUCR*J*W;?9x<3LUj*~>504z_MfQ^0(t?nD?ipq!m!rs-mu*B9L`+2hR`aG7 z5u~I8qTpSVZkJo3Z6k$1sOuU)lg}OhTkp7c<6K>>{0tGDHsD{%&I{jt{fjqu*48#~ z`SN8tb?TG>z=aF0GXPw$BQSgo)`NI@>x#DO6hqO#yYMbl*BcM1z71Ew`H3pxP~VXunHt0V-i~eqN%3gz)vu z;^?qN@Bl;X4kq;#W-d941Erw?;O<1|jL-V&v>ApV*8!iV>|EC+GJ2o`0m(g=%lG8G zE32TXb?|1d5*jkWBxaZhU?%W_hhG4RjLh7x#uduVbDkh%o>k9O=r7r7CyYKz;JW(w4Gc3!q%@pb>=&sweX8Ddf(;g ziJzslTi^2yA({ZlEXvY0fQ=p*ai*QvecvaMx?Q& zzZ~%Z4R!E2OO9^|ZTMh#T~ZdgCs9DfI;I1-?)6d;$W`-WSfb`KSwj71pyjuw*J(Ur zILqwJFi)}=%q(?^Ic0CV&x^C-lzdN%h^17Hi=PWI9(FGEf5ha(9bYq=9Q#QF?uOdG z+TEF6*ty#77MtE9Fnoj72R5&5{r=56zw_xP{Ja70yF9()r$?B6_-pEG*Q;vH0JWx> z1E^5f!P>S(2*Faa3~pw=Rn0`qQsR6c3^2>{qCOw$!V2zjq1tWmAv*aLSKriWp#6ZE zK@-cM*#n!Zk`}}H4$QP`2QdQ;fu@%iD<)HPo1k_1Lzum`$7Lv>kON*EZk%gfer}js zEdi!GLvG9dF=iL~PwR7{@_qNmRU0?xVz58ru&z`l} z%#AZIUIdDa*AW=LigoVX%&uOo2>`BK@pAq*p5ESSpPhWyl{oq5MtI+oyXzkd692-x zv3CPdR8^IM&CD#A1DYsRvIf%QY(b1o*hn};F%q_9LZmDr6iwL@v9J>5v1BQ|VFXea zJnT=sq+eB|ks>cus5lso{kyWb+dWqg8Si7hecn;^WoHi$4e?*j6GXnc&JCYL=~6o; zD2mu#H8(R0;-V5H-Y#JV6QV@INs}oNC0J5Mh$NbzqX?lGh+;*SkSHQp94RN6RL82x z=pPyAZa{zQ+VeO6qRn2|6>%rMlP9B%Mt9j_@p%A;dA>c0*Q=uZmIlL%7lF;q$MV(Y zNdWKbes}%)HT-)gMpu7t`_!NR(ron4jp@Cg-9G-4Wcr`HYaDO*)y*=)^Xp#-e0=5P ziJvfFfS3zuxe7YGV zyLhoDC}+=}wX0X3rj3pJY&yMe$BrGhww>V{H*aoL*H^#$>Akg|G4OjoJKgv{VK@HL z+40_u5Q4^Ng(2!9VP|CcHw2vV(Ya!JZbe@ZR>T%S$eCvv3Ivu|l*qdIHe%P;KUzoY zO@P7f8coPP59EU>MF$~cUbbN{-`76mm;EFB{|#j1gQb?qf;q5~5mVmc1_piZ#`7CJ#*%aZEbyt zfK>oMjL8;@TX=9aY*m52=L^%dpGu1N{@dLX|11c7-#cY?L&Vevl7hmT+0JuY|25zW zHfAg$DrPKZD&Ax0<9V)Hqq(8F_oyw^=V1=btImmzPRyhAMlUm2k^n0Om6ZBIO3oju zSu$o;RaN(;;zUHrT~IWoq$vc70LPS40yuh2nIk|EkO;6V){w*`6I)qnEreuMb%)Jn zjcsgf+EY*M;^s|YX9u`(19;$pBWCytY5pMT z1VBTeq-t7#kcd-CoQRSVNg|>Ij8ogrbTncGpiQ%|(P&i{i)et^Y_<)N+NRTMm`v7j z<;t_z+&pcwS;V<>588AJJAWQ_@#4k9&iW$>uUEPrc;I1MUk9#U{XA`Mp0+Djo~3ub z^NfA@%THr68QIE;Sd7UYSlQk(ZNK*qXUBdr0q^r(PaLxi#g=Tf7@KvDW=9j!MQ3Oj*W&AqTiN{vj!EJj7o z49Uz$y}eL0MpHNL;{;f8rs#~2IVFHojIEBxE2(XhHchngxKhLnwz1*Gle1?}*=%+Rz!VoRp7(g~QJ`oUzK#ilw+1=f#|-J>#f#*!|Gfvw)vH%| zG`cU#{!e)}8)w=7M(Voalq&hc^w?d0usi-3k=;+w%Qfj|2~13h2ymk$C=rOyg7nb5l-&XT_G@-wR!{p^6 z%5?g$ojZ34SFc_s;CkVfRb}$|(QztM537KW3 z9%h(3`gtR^87zTK$TS&Djn&+&R8^rM*0m~qF2xz-!x+}q)_L39e2jo~?ChMiG9y{o;bbB@ z9#;T%5#ug3O{H~R;hp0bw$81|&#MMejS_;eY7`M+vm_}oi$qR|xvq&+nNy0r209H@ zJVKU84@k)sJIYv}i#;5zqxEL22+86cWrR+ovclPAmh zLOKG&mrjEC@p|NuN9@r@AEiegdBj}pqGyMb32^o5GqkZWvgx!k0NCEXX_Lvw7K@3F zMl;kk&@>fdY!L!b*J86-6cI5Z=9H3#K%7#|AtY|w$jmi~RFqO;AX1F3+7Tm&D3Uj| z#z7^y2f`4JPRpb9CO}~fAPNSwT@g>DjG)4r#>eSY%~W9_z|5kB0AnUyERu<+iUiGC z=i0VWnL}!tpfM(0U9Cz1MUNk6C2Dm(U)9N^*0xQyvC&%7Gy_)Xxx$_mE{DiR%MM1q;MFsrh7 zgWptPDMhO)QIV0(=W`RObTop-Xets^wN;{|Z97wu6Y2PI)~0E7GFjE>bjw0mH!qqT zv&G``_T-aKVrS=U*IRhId1UI-l}BLsa+kA1kQY)8vct=l(S^$ZP*pciU>2 z77G@kY&KW5i!;E7)>)K=7v-WRpq39v1kb(jK_tIf`A6V_~L$H6WNst&2sp(Wut>yfLC$ zCzEw+nrQ3mCv`s%Ub+N4@W5l(+B$FE1%d;tFzaEyE{$k!)hgyv1NNhjK1#qNc;pe6 z4j(pRKlRjv*48f5{rBIGXPybPvvZB>x}v%cR8>MD2+d|Y9D!2V$upbHP}lyms^)*q zMx(Lq?d@SaR!eDODXFETR@Y-qNo{3CEv00W$*RWalO}DOa*ij{Q$)tuoW?9c%bDAHcQbUL+j=YXf4I*X=haOMo~%rhH08U?EB=c%eHx_&)m zmKZ1mp%7}@-4zOfNn|&hV6S6!wWZmNiMas~Xt9{l%F0TSe#yBgarsop0E#(mn+DxClJ1snc)F;SQz3Xk33S0W#H9iV10d^fQK=e zJVBQ)*EE>~8jY^dwQDsMmgqSZXNuD)QwZA>g3#`+(6M8{-X7EXy8r8W!CeB@F`Mmm z{;l zIwpAXWVE*3w5Cb+%rjrY=H|j?vorfb<7FVs=jwqu%l;+}s=hBH&?jP50jq zJoC&lDBgWHaQ(W6&)eHK>Ey``OsBW##EBD_PPYj-ju55<00kubtLzQ|#}0hJH%rL! zXdSKLnojrMv+c3W%3AKj&6o1k9{7C!9m*w|>6*x=)j zyZU@7mV6}u;oBArhxtPQC^cH97-6x$&JqhK zdid}R0q;Tq#%tG}r_-l_Yu73QfFVG3*VpYEw6OsIcOIQtN9(I_In&#JZvj34*w|?8 z$`xP;fWXt3&CVE5K(G`^9?sny_=*C;w+k2^$`D_gCH9~QJdCHFdg4%E1dzcI0PY0< zT)Xx>0l?|g<(=-y_ir7s!=v?8vo*F8LbyMf`$0>qvrE`wqTpUZO!V+49|1ON}IpUFSJ>(CFewdKHh z=FHK_cC^0o))3qdUr)pL@0kwx3i|_GCa(bCOMzfvg8<%iAbh)l;cY|a7XwA$0xn#@ z5-@)5bC)t>EX$cA02GiMuFID%=jYykbhaI>uaeavT?cf-_4wod?-2O*gCBrg906V~ z2s#kHu^{+%1;ZC*iHCvWivwf#mBYj8{UCX?j@Damc{|L*`2>1w`Aq1*?=S%LaQJp0 z_+|p(+ZhaBlqL3{2;3eR%es)i@cy2IV0pBT)>~(tKY!l*To~Tl|4_j1o$5~|70Z{@g;tY<8$R&c11cD(z zxD&~DJLhzFz57RXbyrnapYweofLq_wUsqRGcUQf?daqU8hw%SNI`dCA9;6biCdDfm zyox|8!B`A|F#w|g78ZK|m;$gHz!VfFL3kF7tsrb;LEA(hTYm7x^PhOR`ZAY9FLwjN ziD}KnUpYpwcoTz96@uOXV3BDo1zPPFapoO@O&zLh|?C{jPVX~PA-1}Jpd%bI>? z0D9y4^-=5DL)Qut=Yen<0S5pT7*zbT8(ii?hyf)cHr2WK$8Hrc@Dvz7WYD*|iypq| z$LrT;FSJklBE9SYt-bWC$3Us~2;jX09ApFHfgXHC(W5zWg{>G-u zFZjvap0sb%%LEY986W!UIZ*s@BK$s}2~O7D0OEjDWWrqJKf>8nd9S<#rvS_xmw+<; zA_sr+#tr9R_i~89mlUA&>(`6ho?Uhp!0Soi#6h6=BFzVCZ#gI++Def(2rOpY3*yhr zEPUkeUrO=!k^ywaMH|ls@#lzelmmsio6 zn=U(l#~evAr}Ux$^y&+*jQ8s#|4D#9AqXS01tuio3=mCvDAbWA?y=9YF%&|;`1=4* ziZR9DzkGTo``jIW`zPsMl4@XjQ2;valCLj~IQzCByp{+M0bm5eAlaY{(?fPyQ>s~S zR+$UV0I(QPr~{>{<6jDacYXhVu6tSSW~Xrz7l!+1fVq^{rafrr`HIg z(?tmc1;v^0ftj@)@*3>oy$BzTr)`ju**dOv1hnR>HN(}8~^sYPhT*x*F-hl ze4#g3d+C=KiA-Ei0;l-k2pbgG0M$805Ne{$_m7Hft>Lrbps@Z4_&dc(Uz`Q>PMKE$ zkeG2h7-!vZ#k!~Wp1Lm(pff-4Z6*|iVznK??BjktB!-t z=`g(m9~gVj(5!#z4(brSQ=a26Kq$qWDSMPM_4*(D&HEnS8#?b5KxcpC%Kh>zzLf~8Yv5Rf z59*_uxErpIn)T4$bI?%z6Vf~IjRXz=Q(a@7f3T1I^*3Ms{wL>3>p25-_JvoDWUcsz zLgJK0aLRmx73Tox0W$<70CmT8NUDIb426N#9Yld zus~=MXLT#i14(hQ$Bj?-(zEAcf=9Eh2mlkiCqE+$I5lo@i61l+P&XvP;;sS)aLa*; zqpV$HVpGA0HL^IQxSCM_RXn5AHO2K@Txe#Hn2P&3;1d)W!g{uX9&}|R1=jB0j{X|J zM`lIvS@f?=Yc9F!tr2jYAWb(x1R;il;~NUT0a3H&s2<%OriVfuVJ|a#{lh^{Dmemm z1EE3h7_RZlnTg(U!)53H(>?>}v`fCeG)8upAS@CV2wKd!I%l9h3Wz+{a2TwQhQ;MV zDJ0sO;%&Zx5Y{)9NE-xFd8}-)$0om%dk0VAQQ7d7tT^0*ls+aPdaZ2>R_=pAMc92Z!n@bjm-=^KXWqoF!z&+e&@ zO5&635iV+*Yevrs9CIB8h&$K@LtqMg2p84$4_W%h0*fq>MwS=^73Z{WDRl}4>m33h zK=5bC^*I7Dg9s<@*N!g*@aaMHAIL$4XuD4kMoSSU!T{Ojvk`et!~r337XZZr&FO&O z6OVfUmpj~J_MA{S$4-P`m`HPU4?7$bD4%AcV+M)3fgBX8> zvARKeD2R_$Py#|4v64$lZqb}V%#QWuL>{0EY``my(&r5K5bJ)J@~R=II-$!)a^}wg z_;*bhG;+||i#MJwiEps|ohH5GmhGiJD#aVsf$>2?gOOkgxgtu)NT}%@t87@TEu?n> z`o%k6*GIO0lq>btrZo;hfX+SlYB_oE-T(QQM*fK_dEz(p`gRJwF2=f|2uBc-+ z{U{BFRg+65{}90c_WL0G0)Ruhv<+b{HDT*?So24Ml zwSi5F>N-(eD;+UR#WOI_>8_Utbnk3vV*m}D2lK~W&8d_03(ok^^0yOku`RBAqWB_D zHt3_KP7We~D=Mi@JfTAwLWsf=Bv6sBZ9qK_Ph3Jb#+0MBC#TF!P3Oo~gT=V79~)D> zVD$r6oV59l2Y+$xHoIC~#3}wbi2+JFAoARi;wtjks+29Ycr%kU8L1T4nb)#Re@hxaYajPkp>2_)i*28#Ge50J@@WbI^&`* zzlwyo(^vLV_#+#hXmCS6O`H}KdBO$SH^FU=D8aGvWhWevxMm!fy`OhtZ?;c^${O?i zodJGLJ+xCC=K+Hux9gg6$m2I%{@!01Oq>D1B;KPtK7f1R831-YhqIdfCffk0xX0)Y z7aU;$B!nn7a`q$y1c^%jP*G;rwXQGkSKiy=;PM{u+7gfmUSC7BaPs8<3)5GFkiW;q zqy*@V>(@s_c(-#gW|1%D`v8$=*R63=CDL3XiHi8nMj$HkatvQ>mL(1bqzxe05;*P4k zG_T7#prQ;|GI`L%n*rS903=A9*Mu-U0wcgZH6T6WH~LLPHE;}<1TC|2pinuGT>Vpl z1E#_VU@%o6X%nm11Vb=`l`4$_RVZ>ngqrzf`88YvOA}cTtaD+*092ee^s~+@qVo(u z#b99q;mxLVE(jh-Hh3ZKu=16-8}2uSz!B8o<4{OsHRo$O%DGnodZDMv=lX37w7s^z zJVb}N40toZh}M*h0{~}!@Tm9gqxxYk;{vg$-_FV?9o*%XSwW?ceB4SR46z zglu4pQQ#U1B)of=%>u^tr@XcW`w-B%C6O)KG)Wq-Zbef*c+Celt}X#m#HYFy!)Vt) zr~%L{@{CxqEg*f*N`%-W*bvKb5fwz%<>vn6a7#!O+Td09sB=$AtZEdO00>Pqlwz?I zk#NLip+hQN6rkB`=`1AP1Qa@mz^D4LuDt=wA2|eVH`t@c5V{;m zHNYqUm}lj|IEai`0L&Rwu8=8!k{ARX2O}aVR_OOqB&`HQ0#X*-V1q+|%5w-IkmadX z{K$~R36#`I7%E4ercg>DQwnjEAW9-g8G%StW}C(aIqPSuJOir?d76U3$T9^fC4`h< zR=S^@gR?$VmLt!rH4DZeo$00k1XxIrh(IC&LIIO{EM004aHtN(yrKSQT8idMUYNJd%|k>)6+6tXnM+t&O6=Fc0$mIoffKmYU& zjEsyTiX-g5XaP=p!%5`;+jR4-c=*vLFgiMhq}_&;vXD+(c=$Q;EJL@~#jB59g%gfj zU0(b7zqtwu0!ga{RthJbcq~r&z2h+`DP}zWmp54q-pgW062W<5-J=vE?WZ_m`Jv9W6MLRVw>yKh-$#~Z$g|-ubqgXKa?t)bd(G?d zXCL_Y7>$A6%p}sZuf?wEQ-D^DbdU2@5prGyVO5&Vg|h*S8GsfaCZ+uzdi^d&(l(?Z zOK|hnblvv^#CY zNFYo{sfe$s9E;|UVcz(dbM4H`6cPqntrl2u`P?*3@!|jc-yot0QJiQo1|W`O9C*Nf zIBU%tanupZu>azPc>j54;V(CQQ;Rr~pol=l^X;`HwmyO-{`5&+B|un3<>0p%*DjwT@!Wi%B)(f0*E?ww}shr&7qX9Goky_^szW`Q%fG zq6jMvUxr?{tM9E;DKZNMi9E|n?s@8|>NTD;O`-C7Z?n+ONk0dj8T4=U9;gW5t#C(!RWH%$W4E+inK{yz;oC(d+lLn8}s% zJZ6PF&#>~y<@%am{L*U+tf)hk;v~Vy*f_@LFTlJ7i!guTV$5H-7z-9I#@M_C_})#o zmUUMwKLly7i#$&OHWL=jfY|$@5i124i$lcpJ6)Cq3W5&|RMw->pSh~eYTMcN+%2$R z_TF=;n!GdV&b#ggGvlZuk3=j5(zIXdHe)&ED#yYF^Du9G3=P2-{8?0}R4tByJX{az1gnrfehmDWF5 zjw6>H0sy#c^F3Ph6-i2|^+l-ZRzyNd2_dvOE~SKsA{?-IQCYX!>lbFdH91w0AVdK_ zjSEl#katCpuyeUNHGpm1By=D9+JbLN#qM5UbCov5O^TBi?%sSa0N}V|jz+)VLz?yq zM^u~GX_n&1!GiKJ>u&$e zPVG!v96meR8Br+41sLNrp!Oi3LMa4P^SzoNv_L@xlwZ3vA_~*lq$Ejj-?j(A%s716 zVMyW_y}mZ>IoA<`#YVhMPU4{*I}yi8dA(Us5|Yzt+DCV08Z%Rqn3~#ysfj&MX&3u1 z9L0Oz@fMu)s$&2EkM4RBzuxv6L~#Nkr1>tv(B9kU7(5;U7#mP;U~1%mArGI^HA6>F zT?0l@gnmE8j)xz?;mem|<%;FlwtXkkejkD)vNXl=BenJRt9$Qkl} zNfLbH@2(iykIBg?eD(_)A>$TW?KWf-LkMBrsUcCV!gyHF&NbO9|9%Hj6h%mq7Pf5D zFIOLX^eXgw-NLEuqu=kB;%)OizeXGes2aB0QA!o|9ab<_}G8{Jf3=P0-e!u zB&`l)6zfpapb_2F7XXt077eQyO04umSQ+v(qCpVUUVQs5cttfmTCc%&nH3cm0#ZiU zzGEkpVk|xE5VYGZbh}*;5f(38fbp?WOiWJV;hm2mP7=g%1yDsu_jzfW;m`j3e;|rt z#H}`jlmG-212f$&o_X$hWH}HeEsV`ygjQ!1QL6(XBYn?dB&naDh(MTN8z6@u1MbNT z1qD_)Smh94C`kY!5J?CW%a{}oxL4@zCZu1rrHVq=nxLJ@Vns}uh#+NzTrqY&`WTik zJrpZf9FEQRYEydoD~|>MY`*6{2qDo*S~^zex6By;+IM>7vB%NrjG{d{uA>Pgi{-+E zk?{o(B8G?)$fyk&Cq=+iK-JeI4#Z1$ohBkMCX8oov*5ss3n!6Pjz2hY1zvs35m3yy z>?_xR+Z{-1frJc7JofHWhk`|<_FA-#~jR4SUw=p_Cj?sAwktA&}Nj;Sg zfJp!(txZ5dXb07vJ{mw1yAnf9L{ONp*Ovyzv>C}|yojN|;5^6pXd8zu*&hsGW@-{( z1t|quu{KGQcI@1XNR&QIw^s!?M@KsN?Zh;)JVRb^C6it-2q^9F@R?3n4!gq)Y+C`Qui zpwk&a+!_Id1elNmU{&my^qdnjh{@${7X!DfUNj*s9S3ctvN3TMf_L25_==b|b(+pXbB2QEF`+fA% z9uC-VAzG~#0ASbSPk^NMG0MSXH&PHHDUkzs_>so|0LQFeiPc9P0YHm45&}spK@`W1 zqiQ%O6zU-%AtMPXV?6s9JpKq|)@U#I7LCMTz`?ZMw5i4zE6M3WsNE@BZv zB93Bgdr&{)RmUHTS04Kc0KlDh{|a#wBaV||LNDy2cxtF}jLQi{6UCqs6o0H#_u+b3 zMOJ4I01&h_BGA@SbcHT1LS*IM6qBCq{Pnh-*!}zj7S12XJI^^C{eFu39@v41a=h-8 z6L8A!p8x>3{m#vpoSMPn{l_3h1Q|tOR@ij&tvKwEC1|%>_~4(MkGnSCi|sphVrsez z#R~IAJ6L+?5*&ZrYP6CB%#44$_WK|q&}z34#l>u?OQWoHmL*#)H zh%slt0Bof*|8(O)i1~3nT|I{>Z!mxydD=s7W)J4KBb;&SNqE&OS7UxL0k-S$Cvn>^ z@5W8H{3}RE%$qkK^B2rVr_<4+77A&Kl@#^=q)`~?dzHZ~7Q(n78>LeJC2#IcQ z2JKj2|3wSX@Aq-v)(6l_Gt8g25bco;STQ0=SbE5TNYfOz{qk<)~K%}0A=3^Hy3B+EteX7Pw#EN?BGw?1Yumnm;396$hY#wAxhBM6Iw z>k`aDa$ohSBdtLOp)97_|%*-reOw$aJl!)ROt#%tDBV!mH9Ybey1nqVkQb^<~N80OS zW_lX^eh)H=(CW0&Zgn7}K$@nQo}4PD$b}GSw>xN$j3SOBD8+g@etHJIeiuXnNzy_b z$571Z_4=5eoFu^GbYB%Tz6YwMv_dnv6cI$C7iGjr3o7e@^9&$HBnXj=khBuCS}n9%Nf9;HE6o6C z>!&3&QQIwKX;#dk=rBDA?R3U*j3i0WYPFHHT9tu7fFKQEXLJN{y9Gf4QKYRZB7sN( zoz4iPl*lsu3pO&25k*o@g9}ESBmf9;5`(#zau5Qf7;!=vA&D%{0TLh?gM_S!H{1HN zMVB!U95IMWcQuH_e+G(maSXbJ8E-e{s?j|aAV&9C`NEV106`Ii6o{i3;5JaWXHsZ~ zF_NOt3k0*;n7L5KV2}`qWec&2p;}xxs$9+YNKxD;hKwX4DM3TNew5m2e(SQT%v6*Hnr zK^2>sCDkiEt*xn^xrf=5D#6mvbKkmC9O!?5I~>}090dP*i>5AMhNkrROFO9>D_ z493kNRtup$tbr!4?8XGavOiYD#mIF*s)()v#OD%#=8c;{RP2CLw!tB2bK4cH0oF7q z0|OV{y&RA2S9)%!t;)!!3~^Vk<-=7wb5q|9^aurW*>9SJkXRUC>NLhkzJ_RCXB z0Ys{tx+tetxmfc|1R{N%UXfMkvg(dy&K7efbYm8;RFUxN*!%u<{hd@;@3DpkT!>Rb zTsC09E23}J0O~D%^v2HarB5*9APgeB1(cmvg-+2A^{)5oI-3Qe|Aw0aK*~&Q7aNMV z=BV)VsRGBwz8V)?63PZDv^9NRthOO^Tya|ccOEQ28i1_C8+Og#HTomd{L+2i@#7z> z6|Xtx5Q6?#Y_;^LT09Yay#!UcN#*sht}Xe%n-?Kta9jVm{1@N~l!Oj)20X&U7z1^1 zz&7_31C3q1QwJ-+5w&aU+!GRo%F35@KwrABlI7~f@}LElum z$mk9V>6b!pDUWc%a2XhYF%I0(Ld7%m%UK0T%pj`16hgM{AzuTT&e*1`4URj4l~rzo zV1pCl`tqE0FJIiboYl-d%s@`~E58dh4g#3YxMbsIK{#$UTvYqANUbc)E!DC6KB&z( zhMOEtDq3BFIb@|wg7YlLx2GF=a#oRlehkTo2Gl58R&z#-JvSK%qTnC|UW{1FWIbk+F zU;Vry`YRut27rL^C&sR3=51z#h1gax2MmC^QQ#}sLGs-vlp$ztfbhVoeFul#YfE6P zNU;w2vjz{)m2|V%q2mMg{Fz2%WW&IAUyys z;iKXf4tKEmjty0xNHLFRYcQ|{b=}IgcRFto$~_L~2d)5B?1I+>jtzDQG~aJhjA@ap zj}F41k%ItW`_Hc3v*I=9FadAYTw-yNy#*{On_DPQUc%#m?MSDJ$gCl?k4uZpx{iG! zp#sE_{cuHDu#R;c{N)o1oSH5Qa!i106@TJ}FT5`(+Dsby<@u+(>1PjU$LBENH6|Ws zbA;w7E|&Vb++t#Djs6asR~QT63+`YmUkwDdxUGPf-5XkrC?UJvSIWe>_il4&4;f#Oy;;t5EeWBPGJ}fiVigTJE#l*K^4`6t&9Kw z1o%lrK~yJ(jDoQLGrJDh99AClFp%mYt%{pm0EUUY7y9EG14W!k+kbZLo+C~^=RN_v zo9yvw5vfU}xv4JF08gyhb*w#G$0d<{F=uT~AkwO5>y{cwsPs`#+?ChP&II@MPEpQ^ z@$MThUw7L8l9y>#00F@E+pgVq#K~`8K)}gOx@RazT(8+!hjl$exRCxa$Ah*eJycG% zq2idDKB^safRkn;@|^O|-MC@h@VCH)H1(Mn*gvF3a$&DJ|)m$5CD zs`Iwqv14zho^8s*z6Y0;8sV;S9b8do17prP9A<&^f_@^c*mB^8XS(UfXHW52>L5Fv zec_cOX*>SEQkWl7Z;nb2`jNq!-a*(Y9Tb0?ZR0C&xH@hWadmy{yq>u>tfe|T!HwB9R#fEW3PZUcZg;4}aei1d`n2E^3y^FA;^P^@}2J%k`Q zFZ~bQnsnv|zPt>P*hJ*vH|TNml${pYCNB z{^WmM`0R^8%NK=%?DUooer1Ui_-jG*9#^adR;dOIfLa)O zddk%Y_tw9eZFY|&o90A-y-Y6|Kmf3Q{d#fRv&+tc;6Eqe_nQ2jaQw|}@GP09Opf01k85JK?jJF5 z55S)t+co~J(9dbUSm`ANs7g$yUvkyi#Po3@yaw<@T~QGBe>^c)%a}(vyDA?5stJ^$ z_~&5yCSIdbdlc$04ZX#Mk;Ddo7Mnais=!O?PDDy!*M2|CY zBPsRmu_wlFeksM+p!7Qfke|-_(BB=MDe)!&aVm)a4S@Xy>7ND(=a#wR?P)Om3ln}M zDZAzSm%ab~ebe%Nn|@~j^3$6C`1J##R(~}^u43ku#8?Tzi-~BA8RGyJp!)vmB!J%% xVStMQK*qt}Pmi*L z@<6R}8ho(Z85tmeL*^&1u`n4N;q)-P=LG<~?aVJEFfESmoi<%1-n4J(q!SKBXBa(Ni9V6MSS(SNb)QNU6KL3Bv0mJVH#n%fipMjy{8D+ra+y|pYjGN`Xb@U!N*In)`$At5 z^tka^ZAIz24u;h|f^B5334OnuAcA5~#}ysKs99hdf&2UJ%OcbxS%22OW#oxwHnsJh zzbn-ZMm|0p4)C-ZmpV_1heOSGcG%<4(sexyYM9aF`jBfPnyUBdhJ2?QdaB02*EA^K z^{%XqtMeG}?fi&M?LX;LOkEp>`&H?RCc2U+)*v^jZ?_dmo}BLH%e5zkN4RtnJ#;W- zEhgJdCgND~(m-wy!&?dKgTvuhcTguAA52BuK0K1A^u3l=P5+>P6) z&6I+B5!`tOEjE0pCPuQN>>q=0+}W+08jSR&D;ghE_)&qO^~fOm{q?ISpU%qb&@<73Bw3?@N#Pe%6>s{~il zFZLe#ovhnvX2{jEOE#4yF3=^Z$-$RCz3^qc?s&ZA^3xOAep0@F0#FywQ4K8vNWu?3 zSynv?2^rR`+~4xl!H6$bU<@&=s2}l}UGf!l92fyNiXd`~rw@DLuX988BU$;h3YTWZ zRT`doYr>=dGX~_Md8B7q1xYR`yN!nxd1!JBzI={14$apkLz}PuFA2n#G&5Z<;>M?0 z_#}uNNeFsItPNS+JuMWLHuS`Nl5_KGDL~57RxS+*S}xZ!$=_Ai>p2HV%;iQ3uiasB zgfrtM-kqb>%C@|7I3(vcV9n_qQDp48r$kLMaDO>(CUu4J&i&$`kCXB3$(w*|9#81H zDsz!J&Yktv8mA?_)vC_to)-q7T zFi8XTwF}A?9>*hdE(-0b0Sb>NU%qzzV2Rm^;#ypcj+?%$BR-X!wV3o1rFn{&{9md5 z`(64x=YFaz>?!HC>E2vxN#Jcwl0LO@D5K0gnWJ971}OU4#gH<;!e+<^9c=?sg1J)} z{ZUsszJ5MImz*Z{?z>S!Jia5x9bE){&M8|3Pp%Du)Anu!grVy3{h&1~ipz(4RXY5eXk zmp5d`9a#I+Jt7Kb*VvGtQrf|Kk74J|iRi86P2SK|NS5_o!pt9#D6;RS8ViN>!NLA$ zPOcIWfe<>_2~mB+x_&A91S)@@#l?I;tV~!%a%nL}u~WOIrsCRv5FH_hs`!KN#Ou@j#H18fy-_w93^k2XglH$N|#7@;^RmjMzY zIYSCw2igjXR3u&U|0*=0n)|V`*Xx8u8lcX_!e`-lqG0!~!%Bg$ER!#P+_=rP zp4P&9iICxEv|232nEGXUnyYd6b_ z#7K)Xrba2uF5#@IbI)E6QfS0Xyt zL^~1lW2f1n`_(;v@vHR3@*`t>FxaBw`q;-gs?}%X3~x7>>=+`-H#fdpB~hng-&Pu| z9d9jFw8m=Wl6+4=r+69+@42oh+zXg*4k2*9eKx@ZQZhr?>!o1#Hw;!3gT-o-9pBpd z4N2M@>eCs1PA%15eHy#)PSBz3#Kv@4z2xUpg&V{9o!(dLtEW0u#2WbNAxF3mZ$K}) zOC0X`H=QtR*#S*?9#5wZn!aA|--xMraL9$+qN#j#`;+jyy)<>=LPP4BDy#ErC5KU} zNRH;(Rp#6AVq>)4#lz-qvU`B=8BewTH(EGBKHaji*i8|L#Z&h@OFM4=&f12L#e;=L6Dp;|jM&hKSOdVdC zO4b-7W_wafS08|_QxSDQ%V9Xa*dB$XR)_L9*DITUY3r%7&Hf@xcjLRf$v!Qvp3zAf zu}Dc7tvm*ZqCmq*6BTEgH$i>X(AJ*&)?qv}HlG9qlG_CmNTMzVRfQZmVM~2D4=?Mm zBHbMfaW2;8ZXRHtH52v&c8AvjEbrL*eku1^wHqy|$1c{~tlR1kVChn28@}27KAk?> z5w8e3`YGa;%Lt=gz9y2OH=tl^q1|7o%!AhhHje#4z0M=D#737IY=vBUGsOc%(FMZ7 zWHSF^bHrqlGkn_geV1OAaX77b-YK5cz!HSQ6Oj(dvFHexQJDP^bq;!>Y!i=^zGY%J z;}_@Da!}CkE1q97SIa+Tugkz-ftWsVmB|)5T5S8NTz=g1NWxmiUT#~vk=X`Er6uy* z7<$Iz?_T0cdR@h`K7uW!x>nN&7u$VgcHYbP9pRN42f#jtL{!iDGCDS4X zs9a&^S^95(5AysojdeV8zTwn#DU(v95>X)uLCEX%QW9!nt&~{f;n{xTP~S8kJL1Mr z=MDD;p1W>HsBn5TPt$C$wKTyr(x<0AZdaC!5$zOxO(I}c_k|{z_xr5b{p4J&!ct#f zJGTS>s7be@S6n(*PA9alHu0K}OgM~5GWn^zjLn6Mmv_N>K|C599uG$nb{3WmAR0$w zrLd3Jx)W#NeNssWO=IL$WgzWHAmZ9^N#&>ETjz4rn`TN(RUE6qS|t994pSR^R}Yv9=*0FoQoL|qGND< zf{B&JflFAfP-v{9zWv2x6kWzU&aJvELL&L()8ouA9Y7xIH5^)L;66~3=I<~!|0&dV z<;EQd#TV|hLj5vLrR`SkH`ai(n+q6hH+~DX{wqOI7DfafIBwcP9;C_NJO>`e1i!i^ zU>C^7I#H0&y$!aupY$BiY3(pG;$VAq5|#kuut@XMNQUUHM$LSo=7*sTD6Q!i2~o5r zb|xHxGd%Am4juZCC=V>%df?Xr>szgVD*ntnXAl^L03{?B9hSbKlYKk39=$GDCLvi8 zV-v?TI+O<3LjN0$AhcePBaCa8oi8et8qY{n1S8YT0>%CUGCB1c+Gr_j;&(b>RqM8X zQzw}IE^89EO(h8J|A1>enY!!HF=xX?3TB$qGEB~jEu?gBA?Kfb)aC8?WG5qp+<+{2 z2<eivLOa>RNyT z1YH~XLu1Y-j#BW%Pp{q5WAcrYYorPJt?Q5Qt~CMZGd{&|5_DS__tm(mSUdqrfA%*VG*&i^kfcSQZMN)StDElaR+M@XRzz^X~C{m-xyCtQ6&0E+bf zgG~R?xzw)=#G~@igb~{LBbKrn#4)(MZUKre6z>z>1qedDgBEKzMBjvq(D!pTPVZh;0t3f*04+v+8epVI3 zGnF;J;TeDtvjuNZFf;LS&4S@O-C)g33fcrZQcT16|Lw$S&fk0f(52`9yHZkp`Je>wRx3_UCd{_HEd_7?km39`w zMfI`fO-ZYh!@;U;f<>(_DhJwBk9m@^aNvE6Nuv(jq?5wZe8^hvuCV^~^2RIhRtva} Lyoo5k_8|O!RJn&X literal 0 HcmV?d00001 diff --git a/src/ui/Preload.ts b/src/ui/Preload.ts index 02273cc..2a8434d 100644 --- a/src/ui/Preload.ts +++ b/src/ui/Preload.ts @@ -70,10 +70,11 @@ module TS.SpaceTac.UI { this.loadImage("map/starsystem-background.png"); this.loadImage("map/current-location.png"); this.loadImage("map/name.png"); + this.loadImage("map/subname.png"); + this.loadSheet("map/action.png", 323, 192); this.loadImage("map/orbit.png"); this.loadImage("map/boundaries.png"); this.loadSheet("map/button-zoom.png", 115, 191); - this.loadImage("map/button-jump.png"); this.loadImage("map/location-star.png"); this.loadImage("map/location-planet.png"); this.loadImage("map/location-warp.png"); diff --git a/src/ui/battle/OutcomeDialog.ts b/src/ui/battle/OutcomeDialog.ts index 0654b0a..815f1a4 100644 --- a/src/ui/battle/OutcomeDialog.ts +++ b/src/ui/battle/OutcomeDialog.ts @@ -15,20 +15,20 @@ module TS.SpaceTac.UI { this.addButton(502, 871, () => { parent.character_sheet.show(nn(outcome.winner).ships[0]); parent.character_sheet.setLoot(outcome.loot); - }, "battle-outcome-button-loot", undefined, "Open character sheet to loot equipment from defeated fleet"); + }, "battle-outcome-button-loot", 0, 0, "Open character sheet to loot equipment from defeated fleet"); this.addButton(924, 871, () => { parent.exitBattle(); - }, "battle-outcome-button-map", undefined, "Exit the battle and go back to the map"); + }, "battle-outcome-button-map", 0, 0, "Exit the battle and go back to the map"); } else { this.addButton(502, 871, () => { parent.revertBattle(); - }, "battle-outcome-button-revert", undefined, "Go back to where the fleet was before the battle happened"); + }, "battle-outcome-button-revert", 0, 0, "Go back to where the fleet was before the battle happened"); this.addButton(924, 871, () => { // Quit the game, and go back to menu parent.gameui.quitGame(); - }, "battle-outcome-button-menu", undefined, "Quit the game, and go back to main menu"); + }, "battle-outcome-button-menu", 0, 0, "Quit the game, and go back to main menu"); } this.addText(780, 270, "You", "#ffffff", 20); diff --git a/src/ui/common/UIComponent.ts b/src/ui/common/UIComponent.ts index 35a7bac..e75a8c6 100644 --- a/src/ui/common/UIComponent.ts +++ b/src/ui/common/UIComponent.ts @@ -131,11 +131,20 @@ module TS.SpaceTac.UI { } } + /** + * Clear from all added content. + */ + clearContent(): void { + while (this.container.children.length > 0) { + this.container.removeChildAt(0); + } + } + /** * Add a button in the component, positioning its center. */ - addButton(x: number, y: number, on_click: Function, bg_normal: string, bg_hover = bg_normal, tooltip = "", angle = 0) { - let button = new Phaser.Button(this.view.game, x, y, bg_normal, on_click); + addButton(x: number, y: number, on_click: Function, background: string, frame_normal = 0, frame_hover = frame_normal, tooltip = "", angle = 0) { + let button = new Phaser.Button(this.view.game, x, y, background, on_click, undefined, frame_hover, frame_normal); button.anchor.set(0.5, 0.5); button.angle = angle; if (tooltip) { diff --git a/src/ui/map/CurrentLocationMarker.ts b/src/ui/map/CurrentLocationMarker.ts index 8dbd5a9..cc3b584 100644 --- a/src/ui/map/CurrentLocationMarker.ts +++ b/src/ui/map/CurrentLocationMarker.ts @@ -25,8 +25,14 @@ module TS.SpaceTac.UI { } show() { - this.position.set(this.fleet.x, this.fleet.y); - let scale = (this.zoom >= 2) ? (this.fleet.scale.x * 4) : 0.002; + let scale = 1; + if (this.zoom == 2) { + this.position.set(this.fleet.x, this.fleet.y); + scale = this.fleet.scale.x * 4; + } else { + this.position.set(this.fleet.location.star.x, this.fleet.location.star.y); + scale = (this.zoom == 1) ? 0.002 : 0.016; + } this.alpha = 0; this.scale.set(scale * 10, scale * 10); diff --git a/src/ui/map/FleetDisplay.ts b/src/ui/map/FleetDisplay.ts index 4fae1ba..f978dff 100644 --- a/src/ui/map/FleetDisplay.ts +++ b/src/ui/map/FleetDisplay.ts @@ -39,6 +39,10 @@ module TS.SpaceTac.UI { this.loopOrbit(); } + get location(): StarLocation { + return this.fleet.location || new StarLocation(); + } + /** * Animate to a given position in orbit of its current star location */ @@ -71,7 +75,7 @@ module TS.SpaceTac.UI { /** * Make the fleet move to another location in the same system */ - moveToLocation(location: StarLocation, speed = 1, on_leave: ((duration: number) => any) | null = null) { + moveToLocation(location: StarLocation, speed = 1, on_leave: ((duration: number) => any) | null = null, on_finished: Function | null = null) { if (this.fleet.location && location != this.fleet.location) { let dx = location.universe_x - this.fleet.location.universe_x; let dy = location.universe_y - this.fleet.location.universe_y; @@ -93,6 +97,10 @@ module TS.SpaceTac.UI { this.map.updateInfo(location.star); this.loopOrbit(); } + + if (on_finished) { + on_finished(); + } }); tween.start(); }, true); diff --git a/src/ui/map/MapLocationMenu.ts b/src/ui/map/MapLocationMenu.ts new file mode 100644 index 0000000..d1059d1 --- /dev/null +++ b/src/ui/map/MapLocationMenu.ts @@ -0,0 +1,65 @@ +/// + +module TS.SpaceTac.UI { + /** + * Menu to display selected map location, and associated actions + */ + export class MapLocationMenu extends UIComponent { + constructor(view: BaseView) { + super(view, 478, 500); + } + + /** + * Set information displayed, with title and actions to show in menu + */ + setInfo(title: string, actions: [string, Function][]) { + this.clearContent(); + + if (title) { + this.addImage(239, 57, "map-subname"); + this.addText(239, 57, title, "#b8d2f1", 22, false, true); + } + + for (let idx = actions.length - 1; idx >= 0; idx--) { + let [label, action] = actions[idx]; + this.addButton(172, 48 + idx * 100 + 96, action, "map-action", 0, 1); + this.addText(186, 48 + idx * 100 + 136, label, "#b8d2f1", 20, false, true); + } + } + + /** + * Automatically set menu content from current location + */ + setFromLocation(location: StarLocation | null, view: UniverseMapView) { + if (location) { + let actions: [string, Function][] = []; + if (location.shop) { + actions.push(["Go to dockyard", () => view.openShop()]); + } + + switch (location.type) { + case StarLocationType.WARP: + this.setInfo("Warp-zone", actions.concat([["Engage jump drive", () => view.doJump()]])); + break; + case StarLocationType.STAR: + this.setInfo("Class II Star", actions); + break; + case StarLocationType.PLANET: + this.setInfo("Rock planet", actions); + break; + case StarLocationType.ASTEROID: + this.setInfo("Huge asteroid", actions); + break; + case StarLocationType.STATION: + this.setInfo("Space station", actions); + break; + default: + this.setInfo("Somewhere in space", actions); + break; + } + } else { + this.setInfo("", []); + } + } + } +} \ No newline at end of file diff --git a/src/ui/map/StarSystemDisplay.ts b/src/ui/map/StarSystemDisplay.ts index 12c061b..8e675c3 100644 --- a/src/ui/map/StarSystemDisplay.ts +++ b/src/ui/map/StarSystemDisplay.ts @@ -33,16 +33,7 @@ module TS.SpaceTac.UI { // Show locations starsystem.locations.map(location => { let location_sprite: Phaser.Image | null = null; - let fleet_move = () => { - if (location == this.player.fleet.location) { - if (location.shop) { - this.view.character_sheet.setShop(location.shop); - this.view.character_sheet.show(this.player.fleet.ships[0]); - } - } else { - this.fleet_display.moveToLocation(location); - } - } + let fleet_move = () => this.view.moveToLocation(location); if (location.type == StarLocationType.STAR) { location_sprite = this.addImage(location.x, location.y, "map-location-star", 0, fleet_move); diff --git a/src/ui/map/UniverseMapView.ts b/src/ui/map/UniverseMapView.ts index 23194c5..970165d 100644 --- a/src/ui/map/UniverseMapView.ts +++ b/src/ui/map/UniverseMapView.ts @@ -28,14 +28,16 @@ module TS.SpaceTac.UI { // Frame to highlight current location current_location: CurrentLocationMarker - // Button to jump to another system - button_jump: Phaser.Button + // Actions for selected location + actions: MapLocationMenu // Character sheet character_sheet: CharacterSheet // Zoom level zoom = 0 + zoom_in: Phaser.Button + zoom_out: Phaser.Button /** * Init the view, binding it to a universe @@ -82,20 +84,18 @@ module TS.SpaceTac.UI { this.current_location = new CurrentLocationMarker(this, this.player_fleet); this.layer_universe.add(this.current_location); - this.button_jump = new Phaser.Button(this.game, 0, 0, "map-button-jump", () => this.doJump()); - this.button_jump.anchor.set(0.5, 0.5); - this.button_jump.visible = false; - this.layer_universe.add(this.button_jump); - this.tooltip.bindStaticText(this.button_jump, "Engage warp drive to jump to another star system"); + this.actions = new MapLocationMenu(this); + this.actions.setPosition(30, 30); + this.actions.moveToLayer(this.layer_overlay); - let button = new Phaser.Button(this.game, 1520, 100, "map-button-zoom", () => this.setZoom(this.zoom + 1), undefined, 1, 0); - button.anchor.set(0.5, 0.5); - this.layer_overlay.add(button); - this.tooltip.bindStaticText(button, "Zoom in"); - button = new Phaser.Button(this.game, 1520, 980, "map-button-zoom", () => this.setZoom(this.zoom - 1), undefined, 3, 2); - button.anchor.set(0.5, 0.5); - this.layer_overlay.add(button); - this.tooltip.bindStaticText(button, "Zoom out"); + this.zoom_in = new Phaser.Button(this.game, 1520, 100, "map-button-zoom", () => this.setZoom(this.zoom + 1), undefined, 1, 0); + this.zoom_in.anchor.set(0.5, 0.5); + this.layer_overlay.add(this.zoom_in); + this.tooltip.bindStaticText(this.zoom_in, "Zoom in"); + this.zoom_out = new Phaser.Button(this.game, 1520, 980, "map-button-zoom", () => this.setZoom(this.zoom - 1), undefined, 3, 2); + this.zoom_out.anchor.set(0.5, 0.5); + this.layer_overlay.add(this.zoom_out); + this.tooltip.bindStaticText(this.zoom_out, "Zoom out"); this.character_sheet = new CharacterSheet(this, this.getWidth() - 307); this.character_sheet.show(this.player.fleet.ships[0], false); @@ -133,7 +133,7 @@ module TS.SpaceTac.UI { /** * Update info on all star systems (fog of war, available data...) */ - updateInfo(current_star: Star | null) { + updateInfo(current_star: Star | null, interactive = true) { this.current_location.setZoom(this.zoom); this.starlinks.forEach(linkgraphics => { @@ -143,14 +143,10 @@ module TS.SpaceTac.UI { this.starsystems.forEach(system => system.updateInfo(this.zoom, system.starsystem == current_star)); - let location = this.player.fleet.location; - if (location && location.type == StarLocationType.WARP && this.zoom >= 2) { - let angle = Math.atan2(location.y, location.x); - this.button_jump.scale.set(location.star.radius * 0.002, location.star.radius * 0.002); - this.button_jump.position.set(location.star.x + location.x + 0.02 * Math.cos(angle), location.star.y + location.y + 0.02 * Math.sin(angle)); - this.animations.setVisible(this.button_jump, true, 300); - } else { - this.animations.setVisible(this.button_jump, false, 300); + this.actions.setFromLocation(this.player.fleet.location, this); + + if (interactive) { + this.setInteractionEnabled(true); } } @@ -207,18 +203,55 @@ module TS.SpaceTac.UI { /** * Do the jump animation to another system + * + * This will only work if current location is a warp */ - doJump() { - if (this.player.fleet.location && this.player.fleet.location.type == StarLocationType.WARP && this.player.fleet.location.jump_dest) { - this.animations.setVisible(this.button_jump, false, 300); - - let dest_location = this.player.fleet.location.jump_dest; + doJump(): void { + let location = this.player.fleet.location; + if (location && location.type == StarLocationType.WARP && location.jump_dest) { + let dest_location = location.jump_dest; let dest_star = dest_location.star; this.player_fleet.moveToLocation(dest_location, 3, duration => { - this.timer.schedule(duration / 2, () => this.updateInfo(dest_star)); + this.timer.schedule(duration / 2, () => this.updateInfo(dest_star, false)); this.setCamera(dest_star.x, dest_star.y, dest_star.radius * 2, duration, Phaser.Easing.Cubic.Out); + }, () => { + this.setInteractionEnabled(true); }); + this.setInteractionEnabled(false); } } + + /** + * Open the dockyard interface + * + * This will only work if current location has a dockyard + */ + openShop(): void { + let location = this.player.fleet.location; + if (location && location.shop) { + this.character_sheet.setShop(location.shop); + this.character_sheet.show(this.player.fleet.ships[0]); + } + } + + /** + * Move the fleet to another location + */ + moveToLocation(dest: StarLocation): void { + if (dest != this.player.fleet.location) { + this.setInteractionEnabled(false); + this.player_fleet.moveToLocation(dest, 1, null, () => this.updateInfo(dest.star)); + } + } + + /** + * Set the interactive state + */ + setInteractionEnabled(enabled: boolean) { + this.actions.setVisible(enabled && this.zoom == 2, 300); + this.animations.setVisible(this.zoom_in, enabled && this.zoom < 2, 300); + this.animations.setVisible(this.zoom_out, enabled && this.zoom > 0, 300); + this.animations.setVisible(this.character_sheet, enabled, 300); + } } } diff --git a/src/ui/menu/LoadDialog.ts b/src/ui/menu/LoadDialog.ts index 89cf620..26a97ec 100644 --- a/src/ui/menu/LoadDialog.ts +++ b/src/ui/menu/LoadDialog.ts @@ -13,8 +13,8 @@ module TS.SpaceTac.UI { constructor(parent: MainMenu) { super(parent, 1344, 566, "menu-load-bg"); - this.addButton(600, 115, () => this.paginateSave(-1), "common-arrow", "common-arrow", "Scroll to newer saves", 180); - this.addButton(1038, 115, () => this.paginateSave(1), "common-arrow", "common-arrow", "Scroll to older saves", 0); + this.addButton(600, 115, () => this.paginateSave(-1), "common-arrow", 0, 0, "Scroll to newer saves", 180); + this.addButton(1038, 115, () => this.paginateSave(1), "common-arrow", 0, 0, "Scroll to older saves", 0); this.addButton(1224, 115, () => this.load(), "common-button-ok"); this.addButton(1224, 341, () => this.join(), "common-button-ok");