From 36319afbbef29e58d5b136f2ad8113ee524a53de Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Mon, 28 Aug 2017 16:59:10 +0200 Subject: [PATCH] Basic powered rails implementation --- mods/ENTITIES/mcl_minecarts/functions.lua | 10 --- mods/ENTITIES/mcl_minecarts/init.lua | 26 +++--- mods/ENTITIES/mcl_minecarts/rails.lua | 79 ++++++++++++++---- .../textures/carts_rail_crossing_pwr.png | Bin 562 -> 263 bytes .../textures/carts_rail_curved_pwr.png | Bin 459 -> 223 bytes .../mcl_minecarts/textures/carts_rail_pwr.png | Bin 276 -> 256 bytes .../textures/carts_rail_t_junction_pwr.png | Bin 596 -> 258 bytes .../textures/default_rail_crossing.png | Bin 542 -> 247 bytes .../textures/default_rail_t_junction.png | Bin 576 -> 238 bytes ...minecarts_rail_golden_crossing_powered.png | Bin 0 -> 263 bytes ...l_minecarts_rail_golden_curved_powered.png | Bin 0 -> 223 bytes .../mcl_minecarts_rail_golden_powered.png | Bin 0 -> 257 bytes ...necarts_rail_golden_t_junction_powered.png | Bin 0 -> 254 bytes .../mcl_minecarts/textures/rail_detector.png | Bin 300 -> 283 bytes .../textures/rail_detector_powered.png | Bin 299 -> 277 bytes .../textures/rail_golden_powered.png | Bin 281 -> 0 bytes 16 files changed, 78 insertions(+), 37 deletions(-) create mode 100644 mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_crossing_powered.png create mode 100644 mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_curved_powered.png create mode 100644 mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_powered.png create mode 100644 mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_t_junction_powered.png delete mode 100644 mods/ENTITIES/mcl_minecarts/textures/rail_golden_powered.png diff --git a/mods/ENTITIES/mcl_minecarts/functions.lua b/mods/ENTITIES/mcl_minecarts/functions.lua index 1a298841..42cdecd1 100644 --- a/mods/ENTITIES/mcl_minecarts/functions.lua +++ b/mods/ENTITIES/mcl_minecarts/functions.lua @@ -138,13 +138,3 @@ function mcl_minecarts:get_rail_direction(pos_, dir, ctrl, old_switch, railtype) return {x=0, y=0, z=0} end -function mcl_minecarts:boost_rail(pos, amount) - minetest.get_meta(pos):set_string("cart_acceleration", tostring(amount)) - for _,obj_ in ipairs(minetest.get_objects_inside_radius(pos, 0.5)) do - if not obj_:is_player() and - obj_:get_luaentity() and - obj_:get_luaentity().name == "mcl_minecarts:minecart" then - obj_:get_luaentity():on_punch() - end - end -end diff --git a/mods/ENTITIES/mcl_minecarts/init.lua b/mods/ENTITIES/mcl_minecarts/init.lua index 23a95e72..5333613b 100644 --- a/mods/ENTITIES/mcl_minecarts/init.lua +++ b/mods/ENTITIES/mcl_minecarts/init.lua @@ -31,6 +31,7 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick) _start_pos = nil, -- Used to calculate distance for “On A Rail” achievement _old_dir = {x=0, y=0, z=0}, _old_pos = nil, + _old_vel = {x=0, y=0, z=0}, _old_switch = 0, _railtype = nil, } @@ -128,6 +129,18 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick) ctrl = player:get_player_control() end end + + -- Stop cart if velocity vector flips + if self._old_vel and self._old_vel.y == 0 and + (self._old_vel.x * vel.x < 0 or self._old_vel.z * vel.z < 0) then + self._old_vel = {x = 0, y = 0, z = 0} + self._old_pos = pos + self.object:setvelocity(vector.new()) + self.object:setacceleration(vector.new()) + return + end + self._old_vel = vector.new(vel) + if self._old_pos then local diff = vector.subtract(self._old_pos, pos) for _,v in ipairs({"x","y","z"}) do @@ -187,17 +200,9 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick) -- Slow down or speed up local acc = dir.y * -1.8 - local speed_mod = tonumber(minetest.get_meta(pos):get_string("cart_acceleration")) + local speed_mod = minetest.registered_nodes[minetest.get_node(pos).name]._rail_acceleration if speed_mod and speed_mod ~= 0 then - if speed_mod > 0 then - for _,v in ipairs({"x","y","z"}) do - if math.abs(vel[v]) >= max_vel then - speed_mod = 0 - break - end - end - end - acc = acc + (speed_mod * 8) + acc = acc + speed_mod else acc = acc - 0.4 end @@ -214,6 +219,7 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick) for _,v in ipairs({"x","y","z"}) do if math.abs(vel[v]) > max_vel then vel[v] = mcl_minecarts:get_sign(vel[v]) * max_vel + new_acc[v] = 0 update.vel = true end end diff --git a/mods/ENTITIES/mcl_minecarts/rails.lua b/mods/ENTITIES/mcl_minecarts/rails.lua index f68a738c..fb2a97b1 100644 --- a/mods/ENTITIES/mcl_minecarts/rails.lua +++ b/mods/ENTITIES/mcl_minecarts/rails.lua @@ -33,11 +33,26 @@ minetest.register_craft({ } }) --- Rail to speed up -minetest.register_node("mcl_minecarts:golden_rail", { +-- Function that get the input/output rules of the powered rails +local get_input_rules = function() + return { + {x = -1, y = 0, z = 0}, + {x = 1, y = 0, z = 0}, + {x = 0, y = 0, z = -1}, + {x = 0, y = 0, z = 1}, + } +end + +local get_output_rules = function() + return {} +end + +-- Powered rail + +local powered_rail_template = { description = "Powered Rail", - _doc_items_longdesc = "Rails can be used to build transport tracks for minecarts. Powered rails will accelerate moving minecarts, up to a maximum speed.", - _doc_items_usagehelp = railuse, + _doc_items_longdesc = "Rails can be used to build transport tracks for minecarts. Powered rails are able to accelerate and brake minecarts.", + _doc_items_usagehelp = railuse .. "\n" .. "Without redstone power, the rail will brake minecarts. To make this rail accelerate minecarts, power it with redstone power.", drawtype = "raillike", tiles = {"carts_rail_pwr.png", "carts_rail_curved_pwr.png", "carts_rail_t_junction_pwr.png", "carts_rail_crossing_pwr.png"}, inventory_image = "carts_rail_pwr.png", @@ -47,31 +62,61 @@ minetest.register_node("mcl_minecarts:golden_rail", { walkable = false, selection_box = { type = "fixed", - -- but how to specify the dimensions for curved and sideways rails? fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, }, groups = {handy=1,pickaxey=1, attached_node = 1, rail = 1, connect_to_raillike = 1, dig_by_water = 1,destroy_by_lava_flow=1, transport = 1}, - - after_place_node = function(pos, placer, itemstack) - if not mesecon then - minetest.get_meta(pos):set_string("cart_acceleration", "0.5") - end - end, + sounds = mcl_sounds.node_sound_metal_defaults(), mesecons = { effector = { action_on = function(pos, node) - mcl_minecarts:boost_rail(pos, 0.5) - end, - - action_off = function(pos, node) - minetest.get_meta(pos):set_string("cart_acceleration", "0") + minetest.swap_node(pos, {name = "mcl_minecarts:golden_rail_on", param2 = node.param2 }) + mesecon:receptor_on(pos, get_input_rules()) end, }, + receptor = { + state = mesecon.state.off, + rules = get_output_rules, + }, }, + + _rail_acceleration = -3, _mcl_blast_resistance = 3.5, _mcl_hardness = 0.7, -}) +} +minetest.register_node("mcl_minecarts:golden_rail", powered_rail_template) + + +-- Powered rail (activated by redstone) +local powered_rail_on = table.copy(powered_rail_template) +powered_rail_on.description = nil +powered_rail_on._doc_items_create_entry = false +powered_rail_on._doc_items_longdesc = nil +powered_rail_on._doc_items_usagehelp = nil +powered_rail_on.tiles = {"mcl_minecarts_rail_golden_powered.png", "mcl_minecarts_rail_golden_curved_powered.png", "mcl_minecarts_rail_golden_t_junction_powered.png", "mcl_minecarts_rail_golden_crossing_powered.png"} +powered_rail_on.inventory_image = "mcl_minecarts_rail_golden_powered.png" +powered_rail_on.wield_image = "mcl_minecarts_rail_golden_powered.png" +powered_rail_on.groups.not_in_creative_inventory = 1 +powered_rail_on.groups.transport = nil +powered_rail_on.mesecons = { + effector = { + action_off = function(pos, node) + minetest.swap_node(pos, {name = "mcl_minecarts:golden_rail", param2 = node.param2 }) + mesecon:receptor_off(pos, get_input_rules()) + end, + }, + receptor = { + state = mesecon.state.on, + rules = get_output_rules, + } +} +powered_rail_on._rail_acceleration = 4 + +minetest.register_node("mcl_minecarts:golden_rail_on", powered_rail_on) + +if minetest.get_modpath("doc") then + doc.add_entry_alias("nodes", "mcl_minecarts:golden_rail", "nodes", "mcl_minecarts:golden_rail_on") +end minetest.register_craft({ output = "mcl_minecarts:golden_rail 6", diff --git a/mods/ENTITIES/mcl_minecarts/textures/carts_rail_crossing_pwr.png b/mods/ENTITIES/mcl_minecarts/textures/carts_rail_crossing_pwr.png index 9ea9335d6a39d0271c1290e45c80a18465e7187a..df8f6bfbe1b4c15053b372090b787ae39fb459f7 100644 GIT binary patch delta 247 zcmdnQ(#|wNqMn7Bfq~)e-A6$T3=CQUJ|V6Q3=E#0o;o@@wzjr4@jgl3)@nRFJ~A?$ zS$?Lbrpn67g<&r9Dif|OH|0&)zJY;(fw3gWFPOpM*^M*?28M1=7srqa#^eNnBnBo| z1+$`3?M??bb(p4M!TDRoX};SFHZe1wUUOr2`FgFqga;dL zY47;3Es2?V_r+VGtMk_CBqSJr5{;=yPi100t}|iEGG=D&h>b-I0n^=&bLBtfUeMUq>R;Q_PG_k~LXO&CCaa`kgr=akR{01UlV Aj{pDw delta 549 zcmZo?+Qc$JqMn0|fq_B(^Z!H!1_s9BAa^H*b?0PWGB7Z{@pN$vu{hm2**8NtP~dp| zZjqZarka%UFXdQt@cH#9t|s=48g&ZXk6bw_I@u5IX7~TPV!6}a>d(wA4eZTAF8oPV zYo`YtW#yeDv}&EF`2AmE{Oj7E>`lpB`2X^mKj~@r|CF<}aWvH{e6F=mX8*BoKC5HG zC$%k#OIaSg>(!1le`Wl5>Pq|i_8D_h-W`&;yW;%AztxqW{$;OQxOBItrsri7cdI_; z4XW!bua|E8vUzGy^dzoUChJ1618-j)&Dkk?`SsTwRi7BtwSN0N`diiA`pU-sv7Gcp z`Fk~Y7R2Zke@p1B?vINSW~e{f#C(L|Nav#~Z)RnFNGju!_~Gqe&iG)LUZaZE}6f#Y> zpSSfVi>NopZ;R+|o2aR9s<7|zh2CF_*^J|6UX{Op@!RTYxl(pDdylO>ef;O#KZ`?r zdOMgM53UN)y7?oi$65bE*_@rMx)*-fzW92z^|AKbO1U7fnCr5+i}oG!TYh+H^5r9) zr(`cLyzK7t=H@5$76FslzS`xzQv9#-*B08#O%Zza`q*{l>_6=D_8d!Ze(Cs>fq{X+ M)78&qol`;+0K!xT!vFvP diff --git a/mods/ENTITIES/mcl_minecarts/textures/carts_rail_curved_pwr.png b/mods/ENTITIES/mcl_minecarts/textures/carts_rail_curved_pwr.png index a9ab6eeb42b79cbd432a7cd134821fd4bff02d6e..d557a358ae9e4ebd23c98f5f840fed43d0a7ba5e 100644 GIT binary patch delta 207 zcmX@je4lZGL_G^L0|Ud`yN`kx7#MT|d_r6q7#MtHWGsY)JUu;4O-*fWZFO{XlDw@u zv;35ml?%gMUL8!TiT9aTnQ&#fsawhpDFy}x#*!evUkF9Q5X_-sJ-|dXqEn2ykv^6==)+6=`SSq1==H)^(0r%WME)y^>lFzu{gbV@`D;TYOcV%~XdFZ~P8SlS8tA5Y>$A9mfnVer$IJeiIzp~+3)ufh+OwMfG zK#{~A#)J}y;%TV|tN9x`6qKf<{(LXKW`Bj)ymNk^zP{kf)@3+nx#ilE%DUsmm-r0~ zmszJhmr-&G6nS-e_tAN~YZ>?J%O$OKb%|Jc_G`#q@eAj)m2}Se87xySi(AjyV1IUg zGvmGLQ=3%I7k^zMRII7nP|x=y&S6^W!mC+|N(_4{|9kp|%6>!&jd_{O+OP>CeG3GV||#d9b@!t7}oC^vzsu$$vufxPil7Tzo47Uv-LRt4w19*?|08%=rKiIf`Ng7!PC{xWt~$( F69AF7&FTOE diff --git a/mods/ENTITIES/mcl_minecarts/textures/carts_rail_pwr.png b/mods/ENTITIES/mcl_minecarts/textures/carts_rail_pwr.png index 712820326d7b9388fb79a90c3536a546e3ac344d..87a0b7bd562cc92fb150b2a3dd3239c3d4d54904 100644 GIT binary patch delta 199 zcmbQj)W9@BLWG5xfq~)e-A6$T3=9SVJ|V7#hI$h%b?e_RY>4%b4%-im)^P7>u^yJf|O-B@S7?$Q)PslxVvHZh}cauxypaDR0|NtNNswPKgTu2MX$%Yu4W2HJAr*|t z2?9wBOs)!MO-2!i?wmd?-OMU!aac@uX2yyoM-HSuyDBj&d&v!kkTXiNwm8mgY;^B1 zJW=Ru#LT>Y;)ZKq*jMuK{Bd)elcd1roFL&mOJc%7!4-SoFHCvG!lw6dNvQX(5OD_H vITtOHyH*J?H%p$-Tk5dl?WrJxbRR~BZ4afNFf0rF&H(a`tDnm{r-UW|C=pi# delta 583 zcmZo-y23I+qMn0|fq_B(^Z!H!1_s9BAa^H*b?0PWGB7aldAc};Se%|a*)T&mQ07>@ zc=XQc)ek*vT)N#k8Z#cwX*#%Yp^_f^CEtaUAFP<%TvE8ExjRpmdl$#uHM=Y|v|5vv z%Ox={Ea5bXyKnmKkhR8J%OyLvtqA$MjQ#!p|NGznuf5;Q{9|AJ{Hl4=i++cv zOmX61YS3_>X|tDEyym|DV+*%z-^Dq}oRgzN z+w;;*v%My@B%5v9w%sx-UBs2eF`>uOHEdV4P27(k?$Yeck8XHOV!2-GIZ35{vE}bS zy%)2#GF1FHv@mMzvi-6jp4FVdQ&MBb@0JAs}7ytkO diff --git a/mods/ENTITIES/mcl_minecarts/textures/default_rail_crossing.png b/mods/ENTITIES/mcl_minecarts/textures/default_rail_crossing.png index 22556d38ddb3ff5b81f190bd4aec172548317641..409f14b8231d43f464edae502910b9305ea47591 100644 GIT binary patch delta 231 zcmbQo@||&lL_G^L0|Ud`yN`kx7#I`-d_r6q7#KV~J#}<+Y;A38;(e05tvj>)OifLd zm6Z#_T;^3Ku(3XP#K6G7SQ6wH%;50sMj8VHLyM=2V@L&Ka)Lk-1Cy(QS&?r7C$kaD z+0)%;PoL(MoML4)%f!lRiiCxB+S;h8E8iSA5F{w_a@8t}gvQ3JNnTM=%aWKv!mT5I zGfmS_XkMGN?DndeulRV@h&nEuxat(6Lu{UA-n>)75>`{Dn9Q0oWr_q#Yj0y22RBph j{8tAgFP&g0byH?$aG#-|(YkiI6$8i*u6{1-oD!M(0r%WME*t;pyTSVsW~6vSEj?qe$C+ zPR+7BbDiuko^}D#4UNfbnXcc`*raegv@9t?BDnDSiA_BkU0?V`|9!hJ{+9dy zQO<_r{M$Z-%kRq;oT{g~dBJ2p`+DXDx49<<6;(gJ6m#TX!W!*knP%cTO?JsS^}(0k zwnn)ep3xu45>YP8SO3pp?)%Ww3^GgA8K#_Jy4|b2{M7NN9EQNvS3kKX>o`fi@HgDc zJ@0v8nf#R6&_|1w#$H$T6w*08t9!+^LJOIq?8Q!V($?(ev))~OYh_n;;Rnw1pI?+% qC1pyB&f9lK{QsjXC%E=Adj376%(ryT4+aJ<1_n=8KbLh*2~7Yz7xnJ| diff --git a/mods/ENTITIES/mcl_minecarts/textures/default_rail_t_junction.png b/mods/ENTITIES/mcl_minecarts/textures/default_rail_t_junction.png index fc5b3ba31411b3c5ce1e10666b4110758ad5da94..f25c510f53f243d9d570388bcf01b2dc4e4d4638 100644 GIT binary patch delta 222 zcmX@W@{VzWL_G^L0|Ud`yN`kx7#I`-d_r6q7#KV~J(ZP}b#!!0O-*fWZ41L(YT|u5 zv;300t>;xHWPkd4nt_3Vu_VYZn8D%MjWh-ZhH6h2$B+ufOjzLySc?JL~e-IqUPVKZBP^0M(+o?git%|>Bsqtf1RZ0tT5B6P|? ahnYeDoWz9vd#rsJKu&k{b6Mw<&;$U8x=h>v delta 563 zcmaFIcz|VsL_G%^0|SHn=l_We3=E9LLGDfr>(0r%WME+Y<>}%WVsU!uWc!TZK#^nh z`e_x{Z8!}BFFBnM$S`FS&s?^s+wt8a4GRuGzC6E2?;b6ho$PpL&XHFN79t0iW~$3K zIR_n{{9JzB`;V`BpHE$M{@}Np0@iyJr`;=d);F?aOjYen$nMb@85jWQu=bM^qp+&uk*X{dY9hsTN!Ir`;u$!m#1Zm9-CBD zUYXmK(siIT_Sv&%9+yQX#yju*`(S18df8>Sb&Pp@{T@}``^V+daxh`S_nOcDgwyNy zMXH(@9=_nCS-|ivX8(+}IXTH|Re7A(#aetl?pkI2>(DEWg%>jnf^Vd}ys5pM)cHmnEB&96WdKco(*hJ^WmlWtg2+ zVC_efJ#u^46*!ot1YOD6dcS(X)^kk?2fo)nU!aq{CPb@Z-f^GA;!iXFiOzdo`0R(` du|+>P)vWJ}PXC|#gn@y9!PC{xWt~$(698bJ8595j diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_crossing_powered.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_crossing_powered.png new file mode 100644 index 0000000000000000000000000000000000000000..81526029d480d777a968fa401fc3c46df4475b30 GIT binary patch literal 263 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdsSyd_r6q7#KV~J#}<+Y;A38 z;(e05tqYi#rZY2lX8D<#nkp+R7lygat4z4E-1P28p?C%c2F8*gzhDN3XE)Lq7#O-e zT^vIy7?TqOk{Fm=70ilCwL2M%Saj3MGZ$)nS^31?O)Sr}=K*#LRqp z&5hmV>$UO{9&EU!z2n2SBxdH_7jK2G&ReUKkYM~tG^Qdwm5KSd&V(t;n3=UBHWo1i zOm{!dmH(8NXZ4gRTf{UqH4Qnqq?z9eh_T$-cXh2*iX!tBNp4Ao2h2L(7cLDnVE}o_ L)z4*}Q$iB}@90)+ literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_curved_powered.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_curved_powered.png new file mode 100644 index 0000000000000000000000000000000000000000..ff1b917e25688eeae40aec0bcfc5135dd3c96b94 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdq5|d_r6q7#OBAGZ!#1d3t)9 znwr|$+Un@&BzaqRX89>AD;I{jygHav6Yn#xGU3W{Q};tJ<}xraFqQ=Q1v5B2yOGAg zz>whS;uuoFnC!sX!xhlBX|>^uG(JCX=Abuc^)4T%(VLukM}TuXt3X@kuSh!s<(~An zwi|lXoj==bkmTfJ$iZzsfiZDcO X5Z2_kOuop#z`)??>gTe~DWM4f^SVg3 literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_powered.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_powered.png new file mode 100644 index 0000000000000000000000000000000000000000..c118032ef4b90b476b7ea791eb7950ef184bb3e9 GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QUotZg4rmkI#<_2!|K~Um(^TyJvW{CUJx{U(JGONkKUN+Z;TAww!>=uj@>7mJr;T_ zTbiMo_P)0;prmVJVGpD9v&V80hab%3E9Ut4!}HzTT$xVkCwG|3)8_NEGB7YOc)I$z JtaD0e0s!z+T6q8f literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_t_junction_powered.png b/mods/ENTITIES/mcl_minecarts/textures/mcl_minecarts_rail_golden_t_junction_powered.png new file mode 100644 index 0000000000000000000000000000000000000000..6a4af02094c9c0bc4faa0ad357879e720e1cd23b GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdq5|d_r6q7#KV~J#}<+Y;A1| z!(2>FO_i0E=T#90*y!G2c%snRh?#l)#0}TJu&;CwR95yg6lhj7=u!0LIq`tw%DwLaMx{*5(+e)G zQjJ~3-N1J4#T-M|(9Xt#JSo$I6t0w|YR)iT#=x+RNBZG()>KUfkWXCwT-G@yGywoa C!Bj#3 literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mcl_minecarts/textures/rail_detector.png b/mods/ENTITIES/mcl_minecarts/textures/rail_detector.png index d4548bc21dcd9f7aa4d627a0626888caf20fa502..88eef9f6de762c4223252ff674c4350833c92f4e 100644 GIT binary patch delta 255 zcmZ3(G@EIHO1*u6Pl&6bp`NFwr;d(}t*vcMyiZ}6OJ|nfyvhV+Wo1)S(YU9d-Uf2cSthnNpe1Sk_5wleqr9J3%aSkh>GZx^prwCn}267lyf*nwlyrE6=M;=*;q~iT6qJwr*)`>g(w! zFDcGWh|JB)vJevTk&#j3;qi5}iu7}zpzeZRh`<#Hl-q`Gr zGmf5if~jkE9`j?9-TVF8w~NNwU!NNu6W`-^QJ zGDq*Yb~VphxazB)Bf2WC87wWPF7$A5uP)b-Lx2G@?OF9g$G2sSL6 zG*fA@JF~^Cs0deyuD#cr`U`@jCdis?_#kcIX#0TAAeP1B(1yFm85kHCJYD@<);T3K F0RYk3WtIQ{ delta 272 zcmbQrw3=yxNGZx^prw85kIx0(?ST|NsB*>FKGXqho7pTNvhIYHF&itURwW zp)<>`Cf+B>+uGOBs->~1ucxEDq_~NfH#;FRH!mxLiD^1Ba{&{Rp`qTvsY_NdFfcHd z1o;IsI6S+N#=yYP<>}%WB5^skKalUR0f%!ZvyRJ>?CW>y|F3CQxwPzK;u7@(Z5>=0 z;-_-#7c7fn-R>^7x`09N#fxK#T4D>P&NyLo?N;&ff3me^QJGG`CDMm5AOTy@~g#BDO3YiGJl5Y723QUged$+S(R|xtN-oDl03`t4!$3@~esWN%FS7vfT95!6ap6X*gY~8l@3vic{%@+C z;4*d5K7Qq127Z?#PU$VXU+~^2s18}y$>zZ0@5ya*h;70v?X*}2FTr%o5{w1)|p4@1?P;Y`;WFi guDkxr{sZfC3+8I+Bc+EJ7#J8lUHx3vIVCg!05jiTv;Y7A