From 911bf08dfe6b0b7e7bcf17511c6886f0bdf65721 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 26 Nov 2020 23:44:04 +0100 Subject: [PATCH] some fixes --- {api => closet/api}/api.lua | 0 {api => closet/api}/api_container.lua | 52 ++++++------------ closet.lua => closet/closet.lua | 10 ++++ init.lua => closet/init.lua | 0 {locale => closet/locale}/closet.es.tr | 0 mod.conf => closet/mod.conf | 2 +- {models => closet/models}/closet.blend | Bin {models => closet/models}/closet.mtl | 0 {models => closet/models}/closet.obj | 0 {models => closet/models}/closet_inv.png | Bin {models => closet/models}/closet_open.blend | Bin {models => closet/models}/closet_open.blend1 | Bin {models => closet/models}/closet_open.mtl | 0 {models => closet/models}/closet_open.obj | 0 {nodeboxes => closet/nodeboxes}/closet.nbe | Bin .../nodeboxes}/closet_opened.nbe | Bin .../textures}/closet_closet.png | Bin .../textures}/closet_closet_inv.png | Bin .../textures}/closet_closet_open.png | Bin mirrors/init.lua | 42 ++++++++++++++ mirrors/locale/mirrors.es.tr | 2 + mirrors/mod.conf | 5 ++ mirrors/textures/mirrors_mirror.png | Bin 0 -> 9470 bytes mirrors/textures/mirrors_mirror_back.png | Bin 0 -> 8621 bytes mirrors/textures/mirrors_mirror_inv.png | Bin 0 -> 1559 bytes modpack.txt | 0 26 files changed, 78 insertions(+), 35 deletions(-) rename {api => closet/api}/api.lua (100%) rename {api => closet/api}/api_container.lua (79%) rename closet.lua => closet/closet.lua (69%) rename init.lua => closet/init.lua (100%) rename {locale => closet/locale}/closet.es.tr (100%) rename mod.conf => closet/mod.conf (69%) rename {models => closet/models}/closet.blend (100%) rename {models => closet/models}/closet.mtl (100%) rename {models => closet/models}/closet.obj (100%) rename {models => closet/models}/closet_inv.png (100%) rename {models => closet/models}/closet_open.blend (100%) rename {models => closet/models}/closet_open.blend1 (100%) rename {models => closet/models}/closet_open.mtl (100%) rename {models => closet/models}/closet_open.obj (100%) rename {nodeboxes => closet/nodeboxes}/closet.nbe (100%) rename {nodeboxes => closet/nodeboxes}/closet_opened.nbe (100%) rename {textures => closet/textures}/closet_closet.png (100%) rename {textures => closet/textures}/closet_closet_inv.png (100%) rename {textures => closet/textures}/closet_closet_open.png (100%) create mode 100644 mirrors/init.lua create mode 100644 mirrors/locale/mirrors.es.tr create mode 100644 mirrors/mod.conf create mode 100644 mirrors/textures/mirrors_mirror.png create mode 100644 mirrors/textures/mirrors_mirror_back.png create mode 100644 mirrors/textures/mirrors_mirror_inv.png create mode 100644 modpack.txt diff --git a/api/api.lua b/closet/api/api.lua similarity index 100% rename from api/api.lua rename to closet/api/api.lua diff --git a/api/api_container.lua b/closet/api/api_container.lua similarity index 79% rename from api/api_container.lua rename to closet/api/api_container.lua index c940025..947e3bb 100644 --- a/api/api_container.lua +++ b/closet/api/api_container.lua @@ -7,7 +7,7 @@ function closet.container.get_container_formspec(pos, clicker) local texture if minetest.get_modpath("3d_armor")~=nil then local clicker_name = clicker:get_player_name() - texture = minetest.formspec_escape(armor.textures[clicker_name].skin)..",".. + texture = armor.textures[clicker_name].skin..",".. armor.textures[clicker_name].armor..","..armor.textures[clicker_name].wielditem else texture = clicker:get_properties().textures[1] @@ -16,13 +16,11 @@ function closet.container.get_container_formspec(pos, clicker) local formspec = "size[8,8.25]" .. - "list[nodemeta:" .. spos .. ";main;5,0.25;3,12;]" .. "model[0,0;5,5;preview_model;"..model..";"..texture..";-10,195]" .. + "list[current_player;cloths;3,0.25;1,4]" .. + "list[nodemeta:" .. spos .. ";closet;5,0.25;3,12;]" .. "list[current_player;main;0,4.5;8,1;]" .. "list[current_player;main;0,5.5;8,3;8]" .. - "list[current_player;cloths;3,0.25;1,4]" .. - "listring[nodemeta:" .. spos .. ";main]" .. - "listring[current_player;main]" .. default.get_hotbar_bg(0,4.5) return formspec end @@ -36,9 +34,19 @@ minetest.register_allow_player_inventory_action(function(player, action, invento local stack = inventory:get_stack(inventory_info.from_list, inventory_info.from_index) if stack then local stack_name = stack:get_name() - if minetest.get_item_group(stack_name , "cloth") > 0 then - return 1 + local item_group = minetest.get_item_group(stack_name , "cloth") + if item_group == 0 then --not a cloth + return 0 end + --search for another cloth of the same type + local cloth_list = player:get_inventory():get_list("cloths") + for i = 1, #cloth_list do + local cloth_type = minetest.get_item_group(cloth_list[i]:get_name(), "cloth") + if cloth_type == item_group then + return 0 + end + end + return 1 end return 0 end) @@ -120,12 +128,12 @@ function closet.register_container(name, d) local meta = minetest.get_meta(pos) meta:set_string("infotext", d.description) local inv = meta:get_inventory() - inv:set_size("main", 12*1) + inv:set_size("closet", 12*1) end def.can_dig = function(pos,player) local meta = minetest.get_meta(pos); local inv = meta:get_inventory() - return inv:is_empty("main") + return inv:is_empty("closet") end def.on_rightclick = function(pos, node, clicker) minetest.sound_play(def.sound_open, {gain = 0.3, pos = pos, max_hear_distance = 10}) @@ -141,36 +149,12 @@ function closet.register_container(name, d) end def.on_blast = function(pos) local drops = {} - default.get_inventory_drops(pos, "main", drops) + default.get_inventory_drops(pos, "closet", drops) drops[#drops+1] = "closet:" .. name minetest.remove_node(pos) return drops end - def.on_metadata_inventory_move = function(pos, from_list, from_index, - to_list, to_index, count, player) - minetest.log("action", player:get_player_name() .. - " moves stuff in container at " .. minetest.pos_to_string(pos)) - end - def.on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name() .. - " moves " .. stack:get_name() .. - " to container at " .. minetest.pos_to_string(pos)) - end - def.on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name() .. - " takes " .. stack:get_name() .. - " from container at " .. minetest.pos_to_string(pos)) - end - def.allow_metadata_inventory_put = function(pos, listname, index, stack, player) - if listname == "main" then - if minetest.get_item_group(stack:get_name(), "cloth") > 0 then - return 1 - end - end - return 0 - end - local def_opened = table.copy(def) local def_closed = table.copy(def) diff --git a/closet.lua b/closet/closet.lua similarity index 69% rename from closet.lua rename to closet/closet.lua index f0a9f63..e3ac3d4 100644 --- a/closet.lua +++ b/closet/closet.lua @@ -16,3 +16,13 @@ closet.register_container("closet", { sound_close = "default_chest_close", groups = {choppy = 2, oddly_breakable_by_hand = 2}, }) + +minetest.register_craft({ + output = "closet:closet", + type = "shaped", + recipe = { + {"", "group:wood", "group:wood"}, + {"", "group:wood", "group:mirror"}, + {"", "group:wood", "group:wood"}, + } +}) diff --git a/init.lua b/closet/init.lua similarity index 100% rename from init.lua rename to closet/init.lua diff --git a/locale/closet.es.tr b/closet/locale/closet.es.tr similarity index 100% rename from locale/closet.es.tr rename to closet/locale/closet.es.tr diff --git a/mod.conf b/closet/mod.conf similarity index 69% rename from mod.conf rename to closet/mod.conf index 049abd0..b87522e 100644 --- a/mod.conf +++ b/closet/mod.conf @@ -1,5 +1,5 @@ name = closet description = A Wardove for put/store cloths -depends = default, player_api +depends = default, player_api, mirrors optional_depends = version = diff --git a/models/closet.blend b/closet/models/closet.blend similarity index 100% rename from models/closet.blend rename to closet/models/closet.blend diff --git a/models/closet.mtl b/closet/models/closet.mtl similarity index 100% rename from models/closet.mtl rename to closet/models/closet.mtl diff --git a/models/closet.obj b/closet/models/closet.obj similarity index 100% rename from models/closet.obj rename to closet/models/closet.obj diff --git a/models/closet_inv.png b/closet/models/closet_inv.png similarity index 100% rename from models/closet_inv.png rename to closet/models/closet_inv.png diff --git a/models/closet_open.blend b/closet/models/closet_open.blend similarity index 100% rename from models/closet_open.blend rename to closet/models/closet_open.blend diff --git a/models/closet_open.blend1 b/closet/models/closet_open.blend1 similarity index 100% rename from models/closet_open.blend1 rename to closet/models/closet_open.blend1 diff --git a/models/closet_open.mtl b/closet/models/closet_open.mtl similarity index 100% rename from models/closet_open.mtl rename to closet/models/closet_open.mtl diff --git a/models/closet_open.obj b/closet/models/closet_open.obj similarity index 100% rename from models/closet_open.obj rename to closet/models/closet_open.obj diff --git a/nodeboxes/closet.nbe b/closet/nodeboxes/closet.nbe similarity index 100% rename from nodeboxes/closet.nbe rename to closet/nodeboxes/closet.nbe diff --git a/nodeboxes/closet_opened.nbe b/closet/nodeboxes/closet_opened.nbe similarity index 100% rename from nodeboxes/closet_opened.nbe rename to closet/nodeboxes/closet_opened.nbe diff --git a/textures/closet_closet.png b/closet/textures/closet_closet.png similarity index 100% rename from textures/closet_closet.png rename to closet/textures/closet_closet.png diff --git a/textures/closet_closet_inv.png b/closet/textures/closet_closet_inv.png similarity index 100% rename from textures/closet_closet_inv.png rename to closet/textures/closet_closet_inv.png diff --git a/textures/closet_closet_open.png b/closet/textures/closet_closet_open.png similarity index 100% rename from textures/closet_closet_open.png rename to closet/textures/closet_closet_open.png diff --git a/mirrors/init.lua b/mirrors/init.lua new file mode 100644 index 0000000..3892fde --- /dev/null +++ b/mirrors/init.lua @@ -0,0 +1,42 @@ +-- +-- mirrors +-- License:GPLv3 +-- + +local modname = "mirrors" +local modpath = minetest.get_modpath(modname) +-- internationalization boilerplate +local S = minetest.get_translator(minetest.get_current_modname()) + +-- +-- Mirrors Mod +-- + +minetest.register_node("mirrors:mirror", { + description = S("Mirror"), + inventory_image = "mirrors_mirror_inv.png", + wield_image = "mirror_mirror_inv.png", + tiles = {"mirrors_mirror.png", "mirrors_mirror.png", "mirrors_mirror.png", "mirrors_mirror.png", + "mirrors_mirror_back.png","mirrors_mirror.png"}, + groups = {mirror = 1, cracky=1}, + sounds = default.node_sound_glass_defaults(), + paramtype2 = "facedir", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.375, 0.5, 0.5, 0.5 }, + }, + }, +}) + +minetest.register_craft({ + output = "mirror:mirror", + type = "shaped", + recipe = { + {"default:stick", "default:stick", "default:stick"}, + {"default:stick", "xpanes:pane_flat", "default:stick"}, + {"default:stick", "default:stick", "default:stick"}, + } +}) + diff --git a/mirrors/locale/mirrors.es.tr b/mirrors/locale/mirrors.es.tr new file mode 100644 index 0000000..b412767 --- /dev/null +++ b/mirrors/locale/mirrors.es.tr @@ -0,0 +1,2 @@ +# textdomain: mirrors +Mirror=Espejo diff --git a/mirrors/mod.conf b/mirrors/mod.conf new file mode 100644 index 0000000..b8dd5ab --- /dev/null +++ b/mirrors/mod.conf @@ -0,0 +1,5 @@ +name = mirrors +description = A Wardove for put/store cloths +depends = default, xpanes +optional_depends = +version = diff --git a/mirrors/textures/mirrors_mirror.png b/mirrors/textures/mirrors_mirror.png new file mode 100644 index 0000000000000000000000000000000000000000..7a6dc2d021eedc1f7426c777cff74e82e9383f1d GIT binary patch literal 9470 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 aFa_=ql`g(1hST0n0ET*}bj!8Rh5a89eA=P_ literal 0 HcmV?d00001 diff --git a/mirrors/textures/mirrors_mirror_back.png b/mirrors/textures/mirrors_mirror_back.png new file mode 100644 index 0000000000000000000000000000000000000000..ac2926847f66f449e170ae9836bc2f93f00c4ceb GIT binary patch literal 8621 zcmeHKc{tST+aLR0M5M$RBxGhVmYIxw8(Xq3NwZ;!nQ3O2v1VVgq~eezQ4*rX9#NE? zO3F#1LPEBPWP6ADozwZf=RLpoT-W>lcjmgjGxI#p=l*3~Pep3Sj7Xbj?l0bWBnk||RBvVM91Rp$*7C^=W@eG0|0Kgb1&2YIO zTPt9+8Nj;_Ur+jl^7Q68{_f~0UhIzNL zSEq;1os}L`r4LlJ)72Z7HJ8Olhr<0D7HBhtB;m?+ zojtlzi*%63FvrkpZgfPD=i~hQ>AdgOfrr2XzWR znU87)x|tKRok&<|qD9Q*iL4=uk(`g3{U6l&uos6Pa&(f?qTj9f&(yAFsUKkP$z4^c zXtjO%xka?+wS3u`^<}4Dvd&FFMszqRI7@cKPcgJIz5 z)hbGlhtg(E<3(TH;EgNSXW=E6%cW)myK1sM3U$f`)mj9Mry9~$L>k&1Ioxtv3NP#u zmQ*&=_-fgo&DAoJ?^aefvV^qOR8jdh&1X7WxRbb-==i`pl(mS>R%hnxE?4I~*2SnD z;dL9GqV#lMdhLWFAH+%E(`m~OjIqsc8I5WmCFD}6RiTf0>*`enl%le!Er^)#xWgoy z=K^!%3$JzG?bU<6fjUWi^7rO^E7iUZa;nke;yjRigthMO5D&MIsBEINZ+`i!=+V37 zkAv*8Wm0yBA+E0qt^-8VFL>;kzycqimFIKLqMxlZ4Eg-TH%bs_+jcYNVE@uZU4&J$T!9t<3qSs15{iQusxe|2${)(v0U|(CS zquZ(b<=$Q&dS2(S+~29&6ep9U-Ere;lFt20=$1>Km+>!Od3uCK8%y4*?KAX|oUYH%2318={6ni-wvcc6in2_0MMmVuzkW^O?e4TvZqHLF5 zmnqjskoYw{Ft;#LK!!qJ7a8uZ3YCSw z@^qypg*KfyISlAd|0H(uc0xkoa@x{fLhaKX=ki*#Gc>FR?i;DC;wtsqM89>dXJ6V~ zV=<+Tl(Qg)}-x3FwMw_tLJoQKk zQn(->)X)@Qy~|H%sDQmg#@ga$7Ahbz?6Irl1J>RF&_lgP>>V45CtDQIv-nzPLTt-m zmxxvw()LI~{HWQ34{7smM*=NEm-TFOVJ5{V0K!kx$?N8ca(Jhe&$D0+%cd;xSf}gP zpL02Ix}VO`_F`St(%$6&A9y9m$!(_P^EzV5grz=EJ;k+9bF6PS(b#f=6s>9)-u+TY z*6PCfw_>k^%FgWvi>CW45wh}SX>mQSd^^evx)qPH2S|<|*kj(yUE;_!cPtb86is%< zJAch&m3tPP-}P+ObzaR_OzzMPrw5lue+hIl=;1RSzn%TD&4HDLmVaFx^&uf=(G=#q zd~w31ZitnBsz1$yL#FU;d`=+4O!3LYn}frnFJgpr~5y?!OYxT%hRmK1qI0OLteCZN(;;Y zA8()h=IjsMZJ4xc4rCm0-s^JojrO@`7RU&vu$w(g!cwJq+)b9poK$$s=kaHeguJX?aWzKD%3hpJp|K+^7X`W%_(^PV~sEXXFHr>?j!AA-2+9mGvR(7U@KhPID z5qnXx1x4qLaZr>p9Qjf|V=AGz-%Yf^$?(V2?J_a=OEpgnwO zWwL+L72Y3fmLAW>(PeRNnX!J>S3N$YSXrQBlw%z*6hHlWPxN#`@&lu2r+JymeD0$7 zurD3Jlu0XE_b%dYrxW=};k0Wk%Q#(EGuw=qD-?67Acu;_mu^*6c^#y$ct@_Z*Ca06 z(TMbKy&5hUln~nRHPj|u@D8ol`;mON>q|jZsTW53bL?%skDe)W6)grTusHYn$ltZ` zc_VP3=U{AEK2p$1!GF_cmSw8A<|9tLcT9R!T?qft*Q|thg*O(+zeq=<_}_K`_1>WI zec2CVEg5xt^mRZusa3ck#kLhJbP|2&8UGcV7dHosrIxc-saUJ`B}INha6Px$?&U~Le7rfzI7V4p2(?g6DcxqQg1!EFG1G*P`AZKf7%(t zgf|?m+)+YSi{^gEY9rFVH0p7)X@Sx#%OT!1=crmcp0M-F1&P;&)ZLa(m`l*NLgn$* zWW0B<#Hb7}8u}OF($_lQq2XNzoF;Z9+^fX&k6jNuU-UBC5m#)VlBz>ov_W0VwDffh zpUUM8E9AW7Qr+Y*%`PkAWR8*74XSxtajiv+U$ethEx0e*Y!70tJT@$y=PQbf5eITK zyILiwFLLdwd+qGm*j?6}Sqt9E7Y(t5F(k5jBjYv4X!t#!zHobk#S-0>iKAtah=`jK zmc9uRm#$-P2tHhba?L$AOh)F6{RhJ6;|k^~-9>q^mTqe|e;R zmTs|qd=hAOJnXa`=JAlsOi{N$hHzC*DudrTq_}i`z@4TZ*V8c#W|0IEtzb@(dK| zp%xz%-Kn!UrDk|!bmL|4TdcW5?7HujVuPZEajU*;E8pJD{Nz=geQwVZ#jC|Wqy6;gQyR- z05)M6FqThPM%dz_2%9i4imh3s8OJ7rr2?Nf{o3{`AW`7qQ~pC2`BPD>XZJ?pEfbY% z6Kzi%V`BpYpqU~sMbEG20027;3Ctt1vy~+ROY#MyaU={L%PYEy8Y2wNkQ z9~8_M668&zkr5CGolXbS)xac*7eoaPheM#M5LH!WCPJASK%}7=%0#Nn7R7fCBRmyL zVJb%;5rJErXbj1Zh6I6_%}Te=!En4LcyY_+%PsWcn}#caTs@52N@RH0BUWvHsM zDjf2&J#*B`>Njg5^@oZ~Js}J<8KMG)LVSJyU_qrB`~U9mPc5kS%$o|t7EdMlQLuPp ze>{;U^RrX3k014CpMF&QR@ZjiJ~&SZGpKFPKiin1tZaU>*^<$V;7i`N*h2q|#9@EK zk^Lw>+ZY@cg7?AuG6SJ9nN|LPXWIW}@Tae{O};G@!ia?R+hRc(AwgRKAaEos0f+eh z7p{rN;ju7f3=F2O48!2Gl+kEU4Q0HVDh3L}qBT9y(4VMKL@EtU#NxN8nB-srlLv;y z;I*{SYRXtuC`K8krjAvHt7>Q{t9#;LIJ_oa3#tkKiQ))_z)Wql&(Be9QQ??Wnw~f; z77bTbR>!ERDZ}8NP-a{>ys{@u1*3t+Xkj%}G`6X>ghlAvppYO{@b~z(du)8rG*1%6 z7YVW?5d9dxL+uH^csm+;OEeV?sJgm_x+)B=r2>Phs{9Ue#8arutli>Nfr7QR2XI(~ z36l`bOdf(S+6xaM6TP+vm?0w!DR?xEM6oB4e2}260DxPT+ob^1{*mMeOA;2nRSer; zJZ`H_epHG9+6%JX)Q0>O_`fmPd6VeG{~gco(BD|}DKt8Xa_R`>2<9XnOZ#h{KLh{9 zWXoKms5D9d>OZ{Hzu~mMXQdg_mP85o$-f=`^!L{Hg~W%jEfo;BUAzc1c1uMhh>G^d zHbfE-x(|kSUizR`m4}?hJ2Uhr~QH%^Y=dHKE&MCAiwQvKhk2Wa{eDb zKho|0(F2qEA18lH-+$!#N3Or6z~2J@lU@JF^|uuGTi}1P>;FtH-rsM=cp~$lM`zx9 zKSA@lnRjL$vY87N007HuJuHj@U4LdL7Y$`)%r(j=LILJJSqFzFRjT zz>mW?kWQd^1Gi4@PT@P4AkIpZk-oiib543UNfssa_>9mc2Yj7Z{m3PkJ9Q60>!26_w@cEGc!*sCBTcJ?m~dU1CL0kXhr4Z=ck zWB zjRYk#_KAr-`L)5B`sGt5>C7@RbhR^Ay7Alm^80maZ&! zGF@?wmJ*^bLkq5jy`9N8?AhX3?lNP{E);G$*D^lb)J3KmrR8p{u?+<*cLoQ4@w$r} zn}!4@yUlK%PZbslH?iqD31EHm&QQ^K1-t!@j8$Qk%!j0J!Gehx+2ubgumEvAv)R(|!|2jEV`>66dy5N=6 zruL)xiP6BekuTgr*^9{aXF~6eiz&vWNAQk<4UJy2ijrrJO4Yz6D`oKD#SqheJcw1T zwRvLoa@lMR64#-nuQyaC4@i#fA_pJSSMRP7f8G5{fP_K;P*K*3Ym{}yx+A`93c9mt z|IwoOxI@1E{L%(=TB2lEYFx?@>vNMsh{`~E7cV+F%|IcV+f=SPB%xqFGd1-vrT@HY zXMV`O=6yJkOE|u z^VbI|k%aOhZ(Yl`-zbK`*Qec!%1HuTY0s~9Hvo$}VNr+QC8tMd_RWH+w{R8BcI*q< z{WTDG_@E%mg%ghAzL&=b5IgOoLqDS2P3&9&4w0=997-JL-R1S{pJtbQHG*0TdphzZ zvjL71y^{aKnDFg9qL_erB|h2a68J&*90XM z8k||JAvt zO|c`VJP2pyqv6Iri5XawD(XE{I(fk4E>@!`cdAYO#bDA&8KtB6k3qKP-A?v*6SzOO zzv9ieU1%?LOB<#JozG!`KYf%Q0ofdns&J~8J`-zkv|#G+1+OmN%w1me8EM7Q2erW) z?8}$j3afeOK4nG~9yh8ed4kL9<7^n$4*}!ZpgI57NT}L%!twVe>@G#6hEb}?HR3Z5 zwUYTd?0RVKIu&rgAS2=dvNy{9Xq2F+4peD(TrAev6YDLWPQdJyAIu?Ss%V04oc+)& zujqble`dF4I6adahSBiGrvorT5_O+3yJByW;Yau&eYb|V)K$S z>Kss-r(&+(9UTiijyP|8Vz4aW&QJt*?bN=`>7>XKjjZExOD+1wOK$*X#R=c6M(mS{ zXOWL?s%70d0RTVxf$!;;J^tZt%YL;KXi&?yvBA-NL^Sk1*YhJ zU1z(j(`d5!O(hPzv?}O)I3(c3DM+?o*OZD!yve-KoYY&8W4)D;UM6#w1E7qpjmiv8 GMEn=OCNBB_ literal 0 HcmV?d00001 diff --git a/mirrors/textures/mirrors_mirror_inv.png b/mirrors/textures/mirrors_mirror_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..69a865a5f750893c538ff03803bdddfddd634ad9 GIT binary patch literal 1559 zcmV+y2I%>TP)y5Ed6XB;`it0000PbVXQnLvL+uWo~o;Lvm$dbY)~9 zcWHEJAV*0}P*;Ht7XSbSkx4{BR9M69mp_jrR~5y7_r8DCRoyc^JIwwwS|kXNKyu;$ z$s`~mA}}F>ufbP9BH$YkI>8bINKTL(S;!lJkwsuYh_wvXYIaw(Ad=>b91QLLaMm>C#|fQbS& zJjlRgxMpUE2w<2AqJjV)|MMYTyW$t`e7ME+mkHdv|CH~3?+w2B?H?iPIA1)Vl$NSF zqHovukm&oC+^q?z!N&w;xHspPcD*2XE$g!<+pRhERLwO2-fY+W>Al~;J0J2w0i9104s)Bp%lX~R0QumF-AfRc;`?RR0XGka}Jf^zOUZ8 z%}HBve!3b`bQOW~RXdi#ChAq8aM zN%VdTx>0Qd;=Lz?fcJi^^Da0HejCm^%*vIi-661ia)y1`woNkUjHn`_TWJS_d2|Hc zC~_Ix%<$eJxS?Z~{G9t=NTB4NCnt}FI*n~t5kl~U5O;u8b-U{j0;;+L9zw*sAq6F$ zVI<e;exlqUo zP1BIl@UYG9HzvFcE@Mv!A&^oURdEOcR||l7=`ZqnE8A@dV#I% zF-AfN+g)#z8px(CG0f=up4?~D??Zp#t1AigT_$ZaXE^V$0)`P{WHOl$V?;#g`<_w? zF-GdTW;&g2n-W0Rb&z`uShovAZoE1LtCJN6Hx9uB)hS)u4MQd+>ZaKmaWe~2O4M~t z(@dF6s%=Vg&h&jhq(y||<4kk(Ibx_zX{P%ipsqrllB$a45_l;E5us_C5xlu@ya=Tf z`rK1W9*E?OI6hw^ij#ndAp*;K|~ghYt!zN7tF{?V+l4T}RjVIOk}ZhW-70 zrn4D!T@NYQwBTa&eWq<&x~`{~v0O5=V|xVw5m=wESe~_*!EA4j>e>9K#H6mNstGA3 zybq{zs0>rYFp3q**p#ZOq7*n;oxKQuw*+UWXQXMx>AJ-?@cZAs&Hc~*#qsfdM1*>} z$F=<#H?QBs#|Q{#s|A9vTr4olxH#e8_wRGIIN|1NcR0F!9gWcShUzQEaqfm)ww>Xt zTfF=B&oP4=U%E*)qnbsQ58>}0KPLB!3k}8LbOxHn2pX#;{PmOf_~5jq*}qLeI6Zy* z@>w7veDuNJ`0)?EMK!BAIJkyWhdRCd`uDlMHp~nwL+MUVACq(DkMIA5X9U