From 7daaa15d972bb7d1a4d807c1b3af1c8460532eae Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Tue, 7 Nov 2017 22:26:22 +0100 Subject: [PATCH] Initial commit --- README.md | 44 ++++++++++++++++ description.txt | 1 + init.lua | 131 +++++++++++++++++++++++++++++++++++++++++++++++ mod.conf | 1 + screenshot.png | Bin 0 -> 37124 bytes settingtypes.txt | 4 ++ 6 files changed, 181 insertions(+) create mode 100644 README.md create mode 100644 description.txt create mode 100644 init.lua create mode 100644 mod.conf create mode 100644 screenshot.png create mode 100644 settingtypes.txt diff --git a/README.md b/README.md new file mode 100644 index 0000000..d494e04 --- /dev/null +++ b/README.md @@ -0,0 +1,44 @@ +# Spawn Builder +Version 1.0.0 + +## Description +This mod generates a simple stone platform at the world origin +or the static spawn point. +Ideal for the `singlenode` map generator. + +## Usage +Activate this *before* the spawn area got generated (ideally +in a new world), then just join the world. +Recommended to be used in the `singlenode` mapgen, but it works +in other map generators, too. + +### Settings +With the setting `spawnbuilder_width` you can change the width of +the spawn platform. Note that values below 3 are not recommended. + +If the static spawn point (`static_spawnpoint`) is set on the +first start of the mod, the platform is centered at this +position instead. + +## Behaviour +This mod generates a stone platform of size 33×2×33 with +a single cobblestone in the center. Also, 3 layers +above the platform are turned into air because the +center position might be buried in the ground. + +As a safety measure, nodes with the property +`is_ground_content=false` will never be overwritten. + +Also, no platform is generated if the center position is +already in a safe spawn (in air, a few blocks below solid +ground). + +## Dependencies +This mod works with almost all subgames out of the box. + +The only requirement is that the subgame defines the mapgen +aliases `mapgen_stone` and `mapgen_cobble` which is almost +certainly the case. + +## License of everything in this mod +MIT License. diff --git a/description.txt b/description.txt new file mode 100644 index 0000000..f0e8423 --- /dev/null +++ b/description.txt @@ -0,0 +1 @@ +Generates a stone platform below the world origin or static spawn point. Ideal for the singlenode mapgen. diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..b7e7d8b --- /dev/null +++ b/init.lua @@ -0,0 +1,131 @@ +local storage_ref = minetest.get_mod_storage() +local stored_centerpos = {} +local check = storage_ref:get_string("spawnbuilder_centerpos_x") +if check ~= "" then + stored_centerpos.x = storage_ref:get_int("spawnbuilder_centerpos_x") + stored_centerpos.y = storage_ref:get_int("spawnbuilder_centerpos_y") + stored_centerpos.z = storage_ref:get_int("spawnbuilder_centerpos_z") + minetest.log("action", "[spawnbuilder] Spawn platform position loaded: "..minetest.pos_to_string(stored_centerpos)) +else + stored_centerpos = minetest.setting_get_pos("static_spawnpoint") + -- Default position + if not stored_centerpos then + stored_centerpos = { x=0, y=-1, z=0 } + end + storage_ref:set_int("spawnbuilder_centerpos_x", stored_centerpos.x) + storage_ref:set_int("spawnbuilder_centerpos_y", stored_centerpos.y) + storage_ref:set_int("spawnbuilder_centerpos_z", stored_centerpos.z) + minetest.log("action", "[spawnbuilder] Initial spawn platform position registered and saved: "..minetest.pos_to_string(stored_centerpos)) +end + +-- Width of the stored_centerpos platform +local WIDTH +check = storage_ref:get_string("spawnbuilder_width") +if check ~= "" then + WIDTH = check +else + WIDTH = tonumber(minetest.setting_get("spawnbuilder_width")) + if type(WIDTH) == "number" then + WIDTH = math.floor(WIDTH) + else + WIDTH = 33 + end +end +minetest.log("action", "[spawnbuilder] Using spawn platform width of "..WIDTH..".") + +-- Height of the platform +local HEIGHT = 2 + +-- Number of air layers above the platform +local AIRSPACE = 3 + +-- Generates the platform or platform piece within minp and maxp with the center at centerpos +local function generate_platform(minp, maxp, centerpos) + -- Get stone and cobble nodes, based on the mapgen aliases. This allows for great compability with practically + -- all subgames! + local c_stone = minetest.get_content_id("mapgen_stone") + local c_cobble + if minetest.registered_aliases["mapgen_cobble"] == "air" or minetest.registered_aliases["mapgen_cobble"] == nil then + -- Fallback option: If cobble mapgen alias is inappropriate or missing, use stone instead. + c_cobble = c_stone + else + c_cobble = minetest.get_content_id("mapgen_cobble") + end + + local w_neg, w_pos + w_pos = math.floor(WIDTH / 2) + if math.fmod(WIDTH, 2) == 0 then + w_neg = -w_pos + 1 + else + w_neg = -w_pos + end + + local xmin = math.max(centerpos.x + w_neg, minp.x) + local xmax = math.min(centerpos.x + w_pos, maxp.x) + local zmin = math.max(centerpos.z + w_neg, minp.z) + local zmax = math.min(centerpos.z + w_pos, maxp.z) + local ymin = math.max(centerpos.y - (HEIGHT-1), minp.y) + local ymax = math.min(centerpos.y + AIRSPACE, maxp.y) + + if maxp.x >= xmin and minp.x <= xmax and maxp.y >= ymin and minp.y <= ymax and maxp.z >= zmin and minp.z <= zmax then + local vm, emin, emax = minetest.get_mapgen_object("voxelmanip") + local data = vm:get_data() + local area = VoxelArea:new({MinEdge=emin, MaxEdge=emax}) + + for x = xmin, xmax do + for y = ymin, ymax do + for z = zmin, zmax do + local p_pos = area:index(x, y, z) + local pos = {x=x,y=y,z=z} + if minetest.registered_nodes[minetest.get_node(pos).name].is_ground_content == true then + if y <= centerpos.y then + if x == centerpos.x and y == centerpos.y and z == centerpos.z then + data[p_pos] = c_cobble + minetest.log("action", "[spawnbuilder] Spawn platform center generated at "..minetest.pos_to_string(pos)..".") + else + data[p_pos] = c_stone + end + elseif y >= centerpos.y + 1 and y <= ymax then + data[p_pos] = core.CONTENT_AIR + end + end + end + end + end + + vm:set_data(data) + vm:calc_lighting() + vm:write_to_map() + end +end + +minetest.register_on_generated(function(minp, maxp, seed) + local centerpos = table.copy(stored_centerpos) + + if minp.x <= centerpos.x and maxp.x >= centerpos.x and minp.y <= centerpos.y and maxp.y >= centerpos.y and minp.z <= centerpos.z and maxp.z >= centerpos.z then + if not WIDTH or WIDTH <= 0 then + minetest.log("warning", "[spawnbuilder] Invalid spawnbuilder_width. Spawn platform will NOT be generated.") + return + end + + local ground = false + local air = true + -- Check for solid ground + for y = 3, -6, -1 do + local nn = minetest.get_node({x=centerpos.x, y=centerpos.y+y, centerpos.z}).name + local walkable = minetest.registered_nodes[nn].walkable + if y >= 0 and nn ~= "air" then + air = false + elseif y < 0 and walkable then + ground = true + end + end + -- Player has enough space and ground to spawn safely. No change required + if air and ground then + minetest.log("action", "[spawnbuilder] Safe player spawn detected. Spawn platform will NOT be generated.") + return + end + end + + generate_platform(minp, maxp, centerpos) +end) diff --git a/mod.conf b/mod.conf new file mode 100644 index 0000000..f967225 --- /dev/null +++ b/mod.conf @@ -0,0 +1 @@ +name = spawnbuilder diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..a147ec410d215fc58bd7bb5c501f32332da705e5 GIT binary patch literal 37124 zcmV)NK)1h%P)S~&wFU!#3ik*N3&XAHOazCm?mj#qP(7`NmjL0USpHk zI8CC&R7@?cSrZ>wzU5D@@6AK#?XEACRj%Co9nS1c?@nIx>WT9oI(p_^yT>lvd|wAhv56ICLA2WdVJ)lUGnz)Wr+?GvWzUk${-1v49zt*AlMA;I=!oNou;fsUiQj_0U7;8z-(^iNxLi!~Cru&))dX@I_CMRUVkRYUhcy z*4D$lgIj>(llSdi#=E4u`CA?v@W{Z+?H~ zhPO{$_~@?D^Vjb@Rjc)eU0tEeEt~aRLex-N=n6Tm0G`B+mTJDAtUKuih5irC! zDT}RRCX<4>6?lb7BI{XQnI{tq0%KPP5?~UhkfTB)<^l>;;$-p5DpaEgy_s{_JsjC$rb=JazV#1Jk`{Y^&A!QWHhp-4u14%UQ$+lui?c z@x%iR{HR%ywprp8-hQK*DOwncEyU7vLA79vD}N0+F?eg1g-s`?+*&(9A&X2nwscLWu7C4CNRIT=;DdJPmlG!4Gw9YS5#6t8Cx1b;-t8sh>eh_jR#aPKCsNk4_v09^+ zvjUMi+ylIJy=My)aiELqEXZ5(Qi1BIHUf<4aD~z;7iARQv=m$7E;V)nu8u(Qj|MWN z!$V;&c^qhM9lrPp->vzVLg-V)Rs zf)J)#a8b8&P!;4T9fe7J_#_5?ij9TEen64AL=uM9F{)Gh@(7VpcEv@p$|5+DVpk;+ z79U-`gAYXc_CMY{guZdI>>4K!ICK4*C(nQQ(Bh4|M$X%~Z>oR&-oC-jsjZP!23=iA zVB)Z#2nN(k#DoWqvP~Xe>7n#T=^usX)l#AlSEprR- z9G^t0!W6ENYmG`d1&>=T!cc5sj}gOu7(%NFQ^rfMsK&Hmobs!Lf0U}nMsslds+a$w z649H7P${L(<>qhwh$@bsdQDvQ^6|6p**|sJ(2f&%&$^^iG2L`5QMqn1E=bTp966f+ zAcfqjFOKY8q|d+42PIW#}C?P&kHU0IgH zfDKKGNK^uzGu22c()9Ija3af)dvFCwDq46ILJq8)C4i)^gWKt)A0)|;!QSzw`Ck`sTP1{ViRad-GTdMylZ3H&$v-}p& z4wZirgU@GzT9(}!X6c)yY}>H04ZBC@ZvJ4&AL##|L#V`3?9JTt-pTVH**kIR;MQaH zMt|PuOD$?6sM?R3YmHR#r5GfHdQ!QfvZ{~*^w8?qS~wAA2v)+T#v@@sC}PDV%EtQY zbC#0D6#b9|63SE-6wAa98U?xPu@n(@^s11P5~@wgwu7#UU~~5pQL*x2Nv^Hm6wR2&i9ZSk<6NsJAElIs+vt-A{cXFLm;Vg!_h&%A;WZws0X9OSU(29 zFCv}BO4eL1S|y-7Hmtc|u+%BP`aSxr*rArvvP{9+O&!>`HU1Y!O_%4`wlhIn=4;sJ^I_ zS=FG}(1uU{wlgkAairD4K!@@Q<_ZgH^GY4HE50v~GAF7=zknvoOI-t_)|y(D@FbvnoE_?0gnTf1ZX@ztJzU$J)= zPtIIR7Qp{RQ@2_wQcK;ozsJnX%*-qAhM8wp1N&iS*bOt~&0pP&dTX<-2!%u4uCJ<8 zo#&pDCo`|!3^~aRYwDuY3SIPGlPMNvfeQ%?{pqH|DkjC$heC76~Xx$`H$0Tu|k{r;bbN zK(`b>S`l0>4oeTSeY$g+F;jbVDd$gG+R2=!Qg;;G;G==Xl*-JgBxjqmx)`SI6AcV!F^oTfQgZW>0! z)y;$1`>ZdI#69514XjK+O$c)Br5`V3V42H9w_Hn5w;Bnqs8ll+pGX-%?80 z03JVLxuBqc0kVo)f=TWr4Bv#YsSkTO-%eRYNUpBpVb$wW8Mao^cF#R)b=&PolCoD0 zS)CA7x{>J3G%|JLrU?$t$24H4ydQ1ca4yM2df3t>urVI?&{j#jKJekVoImu9pScwD zUt}Qs%1{5r^&<}l-j<V z!!{c4!@&t}ZK&oF2bXx$dq4m6pa0uSLH|Vr!apCccLI0LxzZ{zTd=h|)1Q2K#e<}j zVMuXR21CG%p+_zPo&bvDbv6ToTAyU^rg^06zvToLFL4*=-h-yR7C;jBB2v?d!P&VZ zR;Q@+QvHpVlX1nVs>05(#3$8#Hm9MI8hcnzn^@{O>U?)R6OCgM{*+=8)N64uO0R(? zKBFToaPb})Iy3F9tZ&Ki%)u|7aJ(m3^ABV$v7P*o%a8^GZxX}f`TkX3{INf{ST!#O z5JvjzftT>$!}IN#f@&}x;B$Z_ z*f{n`O%iDMprbkf4U$Itkzfl%r!^DxWG$!gc zETNerTsxdOMNSn*iul#E?1oK58zie)vptRpGrWIL4`!&+zMv~U$B*8Y1qzE7W72?2htp|d7;*AC#QlqAbolG`a7pm!OYf7nACe(Er zOj8Q)x~S9|Ts^KLw`#kiPOSwcSmI?Za4H(u)M89g#_j+q>&!x zz;Sh2#Wy!h5T+VjYvq7Pg`$q*n5#gR4KrBdqDRD1O`DL6Vf4y5b2J-J+PcrUl-wQn zpBFvuu69$&!hAC72MYHF4qYp551f_>P!~=W#U5bR=>|*n(B|AZ3h*cb1H_7ogey0Q z*4giw@VjHE5>AMBF?|_gjc>`#D&VBx|*C%zTSf zcSNRB1zPA^%tM7v$*Wqf!AVAR=n60ZGv$vm%)pW;r+!zvD6Ll@tg;)LLVz`)$C%}s zcAIgO9M-AkJ~5>2J7sx7bg1&l5&1Ae+AA?kYJ!~4%dzxW;-ZQoBqb{IDO6~{#*scd z(@0AY_SVko!=h8!L7WqS-9J><)cg)lj%dD8-@cYbL;E(b^fK){()h#x^6dTC$^ zxll@)x{8M8xU2Z3nl&^=f7vn1*(Wea6NqJya79UMU&0E65 zDNXG{bDpw%(mKIoieDy1u zu*LV9I}KF_llwWoycxa)%)~`+lpnw{p(_v(NS&%V{`*1aifVyT-Iafmb`;RLBj_5b za%eSk<944n&Z);0@OovkC347|ipJz1U0pbN1M>>_?ueG91ftX<*!wuFT~7dD<`e?B zvF`ayGY_+k5-DeuOmLNI#@ZL~i{D#=tTm^Urm^LI7W7{*7`T8ix~`)WZQLKMqks`> zr);E(X~0I~wJ0P7dpUdCv8ASG31>5cS#??hxq~HIqP%P#K%%u!;wP@oykH2hucn3SR%ZM&-`=^ zs~#`Ps*(?SR}0C$?bh1rQMfTA?0$N0x&`ib%pH4^ku&#p&^WCMCz|ySb;dy~nu<48G_OPQ;r9Frm;m4S5SSaZMkJQo z(kxVlhPwbi#!F^vmj*lxSw3?q(&`GR-UD>H-`#iuZ+_nwW2>GE0$&gyeEUbgy$lnF zlLc3bOT-V|MF7#-d>XA?KXxsHisR))l1ceq&Cxz__e6vjmI$>*bK(cwg@h%XtpXRReze9oVji!ot#fJ>c_26Nxh`2f; z)!ItU1r&&)@|WY-uUvuiD6iPg|qC^suJ{X;S)XE{#MzPOE09Llqf1^E%dedg4Q0|EUs8dhmx$zxB2XY>zMjq@qwYYk^K{m0p!Giqz_Zi3pPg@mH%2TC+%8 zOKqbF=Qi8WDwz?c)_yhg`OyAh@UT$6JKc%AH5P}e^3$0t)+RE|7M-$JQ&t(c`o3ZL z?5Y7FwFIFb$OHgDA|1QYdNP7syEYZx(zA^V(V1)XH$OS)(Ss_MuYE_x zZtJ&D44^;RbfQ5>;XTcbOG1JuitrK~9Mtk@5F>|>O{&*qO7%Oy>So@;1U;pv#6M>` z*FsRSu?p6C03>rS__vN(8uC-=C36OEr$2diV@SAA3b%}qUXYMjo(N8)$Mz7%I7CvX zO)PiKz||v^Ryjm5om$3V0UOJT8bea?QQ<-3i!=KY3ribq@5#_CvhjEy4HEJ|HTv2c zZpbx)ey)U2D`Mhv%`D<&e(H%=y)_E@&rf5`1%yw$>TOX~W1}k-)Sv2@L{x4Hl+tMq zAP9-BD8w<@t>08oZ5Bp2nc~%gqu!AA=};{=hU*o_Azuo_LEUak0nEY|g^GK21)D@C zs-ci-;@M?rF3k$MbE`Fc04h~02P#E5Wyabh#@_fWP}$wm@6A*M*A&hb75%0Rq{q(< zius;r!_r)DgQhT8=;PN8AXU_<_FDU+Cfl!lt(F+cxz@ipj3!qLNn|d)8ksWV5*f;Koh4pC_^Q{xdm2VK(Z7F4U__i%t(nvj`l~C`n^(w7VRuJmWpsv@C=|H% zVyM1i#gu@ovhFYLb z(#d7QhCkv4Lb9Hk2)rMM#`z_}Q8(mU7t%+Kk3UEeac11M1_n2iA7_FYect(y_i-oK zJ8)u7SJz9sf&CC4!3>lN2cMQChCt6jOVdC;G{~)`NGZ2nYI28;L2}EB3jVap=u^e{ z`MQ1GyFMEurWX)CmmvJN`v-4|I-%}ROS|NX$4Dks3vwERLqv({79+<>FB4;Iq+64N zIT4@++xs!hRl#S>0v(A_q^bgrI;vHLq2ha5)bZO$(TFzDj-o}<#W1EXdV)X{!ABVm zLz#q}8*HP6g`1Dh@mOzg8LS$CNg&C6e%li$Qc{JlX({=kOXD23swSEJs|x|i=GBMf zB)r)!n@`MDH6;B&hcrlCwDQUA{s5#VXP8DHM~mt`XRcezS9il;tno0s@(u6KF{tNc z9Pt9e*g~f4Q0}>oFb)J?q&JAR2!OXLyHjGdAs=6d34vIITD%wZKx-^8^=;K5M)C=a zYfn*J$7O{IEhZwb%KeI&afkQGYywUys11nMN>U1F?c)sF+B_f6dm2(Zmzw}7?}RGe zx}8+wb#GqJU8)9?epriSrO)Nkal>97wE{hqR)Iu|c{cs6c`sQtV2E357eq#Qe_I@l(Ahe_~0EYRyJF+d1)ee4<*{RfLEi6~xh+LR@`+i+xt8 zHQg#a6*UQ=*;^~-P-}S>j{`_ z=q0|O(D>j_-amQjs-C?W_Xbp6oBeO}b|IiNoO zM3QC-4v*;qt5{@U2(16l}4O`E*zsvr7}|iWt?zeCc!zx#CzOyh2Jf zU)O=uadl;r^D(yE(oKqZWb2JvDsHj0)Ih`@dNFWbL84y=wb~QaB@%VFmL%hdHGGtd zLYhWxU(=D&uBuO2R=tOAh2`3vrww3fqQj<7=hGcW&9klD9IIt#%mks@XsT=ogwf3- zA4y6a9=!T3pZlTTdUiK)yMS=q?KEEU!4cZ(#r1wsW;dgs&FC+RxMF=Zs2Yx+?-H_3 z^K$CtgtdVZ6h&Iq>jV?R0qG&tm(Xz=Lj&qA;`qGzrm=Gds6-3bg`GoC2|?lR((*>% zFRwp_k4g~6J)=Pptlbox+&050AT;(KbmA6qsnLhw(JY^;k+w6m%MspI7W@O@*n8M~ zn+0J{6+45iqNetIPO>)>*WrAA z@V+no@b`ZGzb+trwsOK4tCvyO1~-DNwuea@eXQL$Bg%DSP-3N2(|O-VJZ1CR-P-NF z**P;JrdcV6F;tLnw`V3wITr&n;^z#_ebZxtyI4r2UOFd1@(oJIo}s0|u#Yo5etx2n zhG6P5_<@i(KK;Kcm|lgc-X(!8|S9hN((J5ZztfMg`>XD_&B9?t1Y%`@>92?dY4>vpLxQHF;m<|R&@JD9yQMeewpPC zN;S}^4ZtQq)vl1>4_K;js5%;VoL~8d_k8vTf9n~}5-%W(O@7DR7YM`HcfFx*Lv&_y zg`K}^?HX7+yC{W4vmze_B@gxzM4LvA)&PVQcs}V9e)dkswrxvSA!--D{LL0TkV*iI|v z4oUdd+wJa2wRsG`0bsT@z)Id8d*m@@K%>)XMoNj66T;L;EySzPtb~}k92vI!KYMrm z97pzS3H+aXFko9ut!|+u+vE8%Gc(ih%wuL|W@ct)reF8m{8VLVnRlN(j_6Rxa(CCQ zTQ}+C$;=eXag6hEtL2wQgw$T-gAqk!k&47dL;m9#mf#JtjckZ8NsLz~b=Zf^we_v_ zjZ}DTZ)_eN=0XdZOlrk~aSTYsvM>^4*L;<%H`)VE8M2W^#(<*j&7A?OR4UINVxMx( zHNzK(cCTd7Eb@bt(o~B$H-_SnLxU`X;oaWYfU;j`fe`*56T;oit$psORPW@DLLJ7TJScM^&{ti7;>e?Oyilvj zUiTmaviZB#c(72b~$Veum&oLwB$a3})eRY=_X=riUSaXR7n54ynpq3m-tqlC)o`mwdP5n~t`?v{;5vs>#-=UUml zK(Yjhw9p{IV}PY+wNxgz8})Vus3S@7b~j~>_3k!}xdo+R-P^``05I_3_`o&_Hnyl{ zim(>;Urf#srHN#2l|jp|)LejN*EGtANFg4UBF3qpX2 z_*(PKuroyu!|g1cr`?0H(ZqXAGMq?>g~upU636G&4E}{*nd0RNHOmZ6 zCz7h3$fCvJ*suD%$O90_aXF|+EO@5&^-KXn-M#dc>L9FW)3Q`;46Ut(-%LR+%~++e zTH`vVqwQ|*m@&%cTurNRW!e0wjGW7Sp%!%vHT~u6=AY>vkb(($c3FO>{H*$IZ?12a zepw}nPbTwb=}OGOW)Uf<*Q`w=yyoAQO+JNqX)eAh&MLuc&T4KsPa)TBU)^FPUGiU^ zkp^E#cD|Xu6DD||I;LhAUR=}k7yjSkd_NGvy{(;2);qyX3Q*MzuS zz5_yHF?DI+yXJ@zB;b?Ix$W-^)@#xOonf<{uAs-R?!lv@KnY7B;i|g$Bb0z6u0A_f zc;onHhP~EPHzl&YGGdKOV$E59l#vRurk-((EyG<84|(__lV#)UE{gorB^^G35&-Gd z1e$h;vs1#RdtWBrAj zQ-PmEp7Z96SQR_mxx6#sYQ+b*IKPajOFQwamvsij>e90f_Ba@xRGg{R^5nhGe^=7Z z4}|c4S_t3$>~};lbJh6$yG1W#e8%AQnyJuZRoW++;4+g~_7CV?&R3752m}zlwg^f9R$a9Uq4m}QW=@baCk_!p}&X2%L{Z&xkOMo%y4h?gFI*^eFAUl)q3j|yR9fH|x8XeWy^uttysRctcpNdiT5AMF|Z6EonU-%#H| z%k&McT*!f8Mr;vuG5Rvz5f78b?OI#q;UutopJ)u>9AkbsxP^S4Ikk8yONMvv!10w7 zQ7<>7vD#^4(053wPq`88VQe7&1KfxzDT{O#`zde1=D5?bjM;7r3bHv#u@auJ z8mtF=N&$tS#|N$+R=}PE;I^WZQsQWd4j*;&&<-^^**MH#ipZu;r`|nf+KM=x@k6!V%Ptlh- zd{MN5s~!mmi)Vor_xh))1kF)6=9KS0Q0*?rWGoisDJ_j}2Ql}pb0bo@eKDyt@ z$g05c4$u_HRb1+fN`397W$uOX=UvNHkOv+~YS|^peU9RDB-8}d7WJ-w3swvfVIK0r5b48b9yM%Kv*uX7Wl7pB#rjlu8UP-r?DTY!Re;HTgeXED4{5T=@y#Z#*(mpE*G!t(4S*U@)&Ydoe& z2V}e-6gigDX5s_OpfZ4YiMM@8)FrU3=ZZH0gT_?dGAXIb{phO5wV8eF^NMMYcxu`gMq8%zSf4MOK%S3Qck0!0;Wh?Bs@&+ zw?YtK&XuJsx^G1{s$h#W#?IH`od!qMAfr?NAg(N_yT2GMj-c0#?RXYFs9c!mOWdy! zQO9Mp8?MA7mCl*PEUS|1A6ic`-TLVf>WnAvDg{C9b6*wmqi$=+-xDe67n~|=H3>|l zd5(_+Rn!M<xBh-}+#U#FSM>hd>g?`tY^oj5t(%ui54D^tu9{FV zjr8m_x09k(&(`y686`#)BBDGO*n>>NJ}innm0w0G5&$swQ^Smj)=!Z^7M2=|i}MTF z_N#e(QUqXhbSQ{Ugg`Y&xa@iUslU^STB`knETi*XaHHUmkd3rI~F}lh6{4r%RBv-r_6=U0(PBX`kYXp;MbxW3t zGPcz35Hi6CWTuy+pn0wnAb)ig52X8Xbb1C@r_P$wlV>bg716;+n$E)D$Xl{4jo>$s zquRYuN=_6~4m1eA%m=-vo3)WZ;78s}8u{VdA1xdfDDfo0iajfz0BnFxU%Wv!k ziZd3=oFkn;Y^d8+6bjLT zz4axWpcv0`hS|xX-6n%C=&dYNln5jIrVoGd)8F$~Giv%k2!Av}_=dT*XreVm-mrM{ z0Kx*9aqZ!HX=SbDd*e51kpu>M8KQdSwU||7;xxd9sLVqZY;^Coiou3=$3Aqnz*&(V z+}hkGTDLFna1J#=aYn^^0CWrE3N9;j$vH6nuj_rge>O+dbYXz1oXrrw85-69Q(l3# zs>(pz?y6C&0*jEa8wv`%$)u=Ply12?9vD^$f6@SwCZciRAJiOuv@8n=%hjMsW3_BA zy*Z(~Gh8`%>Q!E>4lwIys1>qsO?fD+9HKlzY&ZPxUWulr&&_GZBcn$w43C#n04qv^ zb39ef(F}mChHHK2)oHn(*_bbGA@usbzrB3ymCRi?9qVufazKkyX`0YT?m0lpSTVna zf5|%w2~K9;$%)6bLK6Xd#6&1&V~Bv96gg`~4i9&y5Jj^?**O_AXpopwB7u<{8N%H? z)UdpiM;^=$TimBOX}YbA9%ll)O4CP{@-wG|49F959YbnaR3aw_x+z4uznO(7?Y6VI zvns)3V|yx#-u^D3q&Tos7RJess4(3U5{&TRkrq>QubxFDiW4DZMF31=wPyc7P&vaC z9D8M9*>ew3xzmK%)P=Mp->ejTe$VE(gwcz+9cz;`vFt*pxq-cmMd&?#-i_&#m1@)%{M5!k*LIDg%)LyY{aUj*yCC z(pm3jQKP2-rOB#(Heb0i{jS`25M?#nk% z(E%cRc@`*s-rq0*jUb)K8D14B59lBrns3WwzE6Gg?+6iJq?Ry3$V=(=fv~duQgy<2 zDT=-LQAL%ME3?s#Bc4Txh0onD<03KLse2K77wZ5<| z{~J%(qtq#fKMx(Lt~`5*sHu|NuSb@ZP{H~kgcd8*WP9cMvEF&V(im88nklNs=*|#COrQA)1l$b>)+}l0)@R$Frvfvk=5Ps*Mo?X1O0>bei**(?Pyo-Q% zd9fiqz#X4M?Sdj5dXA0aQ=y))KRnfu{dZ*JWEDrJb!4~SB7TT9wk57J9A_QmPc%3-j@CB<}`DoiptG$EG2uZWiW>jq1PoS z1)DZmSN|)4S#znH#V$!0HYxYGCtFyXeIv04l?2ui+>++xew^X6Zd6C5%KhdeKAR5I zZ}`9$B%%MTg#L?12tV|UK| zvU?lbLcYthi|h}YUf#f*M$P4e(h~J>=PG%4h=v`T3DXHU&$6o!! zxBsz3;)_KHKmN79a(VH1q-e%1P7=t8^yHe)kI!IwISTnnRvQv9giMk;uikDILo5~1 z<;)bngp@8hCqM%A;L9R&8Tu=|tFWz_DeY)_9iJB6vtUzD8=&35Fi6HQ95Gc1w(wtCvR6BLx z2vUpd5CDntx$QJ=XEUdzn+O9_-2DO-7K()w>{IaF7l%JtMqnvav*7mer2a%WIV+G7 zrl#`F0#2aoIZ#J6(^YD+ZgJ+NbO}{+Us$ki$W7!HyUdqzr16Fxtli<_ih*J%W?i85 zi;7;Jvu*71qSI0nSO?wP!u@tAA!tWc>4tP&OQG&e0aq6y8H~Xgav7|Ussf>*@7TbF zqT$)n1{uN!&WotK7hX(z*RqIXC4hrk9*Ly_@?U8l_4N1tjf%wk-x8jk-x1Z=Wok*D zu$%ePZ4Tn;(U2c{ZoBLc=GyI>w|Pp^{rV9xM7$$>#pDJnni^jotD?JJ8y`tObmS7Y zay6$zz}37Ia6%N)`a#yKyVp?pl57#k&9%)41NuDtgla?V zt8c23b{&}z?kNj7I(;s*9YI6Gwm}|x+;J)Rk*856cGg^=rPVxe8kl`hEEWH zCXtFcw>GvxAVQ!ksO*xsR#Z9lfZ|Adb>BCLE0lKUws8m#s)s+fmJ6p=gKT>!yVVz~BR3gy z&P)A8TesOEY=5|jHP{zjbwQ1~L>^X;7S0NxDL9E74Y$Kev;T+_6GBsu3DT3Idovg* z4rV|9)MCp3efC^B8XvF>?5=iFuxLTY$=R(Bf7wszr+EJg;g|o^@zKzW%em4t$8G{h zs;|imWGxL+huSCpCJ8iIW7aC6x-Y|FA!*9ebd&(H<0u|3zDZL^pMc*=T5;ZNUshl^n=~ zGCb&C6T3K93VC^e*;z(FKTn!ZeG@;2f`^`sYKB1p9h^pqsS()lQmX6z>HLIDN~B^T zx8$Vs`dEWfV~yXnv4EF2G$4n#!SQ329q@kh4HBf3LL_#a6}AF>yi%HN6Lc}mj>VS) zx{6~Vy*fltdb^hZMf+x}4Y;(imt4}8&&oWy(4xv)I`PPk{M z6q{yih#8zlDJLB%i=cB6!RVn&=33@?NU}k3ytz|+ajp<4%N(6{-{CwnnTCBl!?}=@ zo0>`Vh2 zQ$DY0MQ|W7p|17$k}T5s7Vn92JAF!#6u7&WEIR$SdoP(K=GHzdDhm?j_#g&AMc%=-TKg%{^WfqgztIb`xnIt z)H>y?b~COQV<@0Xj3EZlDne~LD?tm6>hdcHAwXX^#{vHiph@j%A44b>mqpxTwxWYy-lBQWAuy!T^vNV z4=3=mJ7p9rC>B_242zV}k&s}e*=L=RnQk%h*&zu8Lr?)biEF1^g`H&d+Ox_-%~r;_5&(D%KF)OH$w{xTmT~zGfa3*S zEGk!a)@eFAcuAJbpchV{tV!O$ z55!zCR+T?bK84nyxyfn(Z}U4hGFpj$A#$s^6eGWS*i*5Jz0m!Ffu&)(ZLDqBPkuYv zUB%D)`HMZdb$&}k-5ta+>6CY{qC6lm3+{w%0meYHI0E7bSdK1rS!XV7oiBOiTR!vc ze?$)N2O)gtli#w?o@^FBz~IELF3n_$h#a7VMA!Iv#u!O+qr|}uH8Zf2+KlSZwMCd> zNNG?~)J+hSz^Pv6A**l)qOd2>@LZIeRBC?33(a)_Jf15B-+?PVElb922Ary|k3Ob) z6zu20+XQk8)?-f~eg)fZL7TEmA|itv%vTLxq&xr4Lr9O+h;WjPrU3;BViWZNw@A3k zW7&e}1!+C3BMwD$hjo%zu`vw@$1c+BK@dy5t!TgoZM}d2IK$?MOU+J3_{MH6^e(RH?e~At zkJcIf`+Hsp-|@sZ<-}+=$hjJr)$SfQzya!3F$xP}n%WcNQ_a277S0VOmuB+I0y!o6 z5f{aHk+B(E+3!L)Xm~g9L}fCw=`4ZV@J5aivWexv?51|W#xyx1ER2=&$E3)6f`Z11 z66*{;wudx#T;lPw6uCeVKZ}WgKyXU=5xrFW=_PNo=jUXp+V)LnqgRCMddm<-= zwV%QjCn7@Q*7Pm^$Hev?65oQ45bB1!-pbH8J#>xx% zAVo+pq>*cMz#JM=(DzHdRICT8zA^pB6%K9RVI_YJHnYRV17d zAn>_aZl|H2p>Fw|jcr1Vg(-I!9^mc-VB~1d0im{^x%b;yY6`w2xO1UMkuZT<&KKxL z7@kyq5i)QBJ0`?ItA3Ni%gE{Pu@f;(uwU(%Mcv#1MN*p^TR~RyRV-c-HhIg2S#GZs-d;2knbLtm_#Z zRpaga9*ZrLv0szuqeOr=F@P}4JP7^;f;gnQYlxx%P(ZK0;C8o+l;I#4Wi)~%wDC)2j4531Lmtp}MQ+l$24+##U9>UYqfNLOl{z>l!C1T>6w^v$URYsIs*;S@?Cl3xaVX27y4g-9GQ>%>PBT?AF9D=fAwF8( zV~Aw8Hqnckw(Ic5AVDWXVHB(7G~j(USJPV+caP0MUIabVQd=P0gMl@1>YhoF>MEzi?x(JbMpAp4CQ>shU=fOAQ<>q+mK zc@_z|b8*Lfd`Nnk=yNEgNm5stXrPp=fh(SmC(<_SFDK7jhrB=E>ElX=vv2uSvyo=> zm2EsSoOtc}+O*o@tjRa#!O2^;=btrKH{qR$AvCw=fq6LDd91A?xPlC3E{e`Ndh+Y- zTX!7?ST$BwB4;xmTn+!xm!NyMDe8|NOti97^#C}!y4TFE*5TbdkJEZik;U}rfAl7O zw6bF=QM9z$-<_Nhk3Md5w&*3Ven*Pb$>F^ugs*?^b4kvwN~1G?=nKIod#Dg8B54cC zzVh|N>iX- z(kyQtR=T63YDYhlu*avs`k=pNmau*#s>%NRa1OaJ_^2#DkWerBKrBwoY2l@gV{%`e z(^uvrW`_Mngp>ujm)IQ4c!d;+b?ZceL+Hens|%KTumrBDMK(~>ZJOJ~P=2Mo(&$yi zuO1p|A1eU+j|kCd440hE^O@Oh z7nJwRiPp2Kx|&SrqSnBL5oXg<9*r)0`#ZaIuFtv6lDn^%DjluW$~#z#QNv9~cqhU8q&Bj=;n5LpRk43L6ulo|%HG zF=9e3B21BiE3psD|m0n4p7rx&TraCF_*xS=ACerBi>#xyVQ!^^EHtozU7_FSI z+u87}R^fH094NRDYdt%Fs^rstb+SAy>P17uc1i8RNqIWPu<<|fS~$RIZqhXIvr^5d z1)+9utr`FQIt=W&coJUi$>yf?gOfr8N7t!a_*(daY!)g{eka&UiuKDmsJqMWo5dGT zdU?c66}_LGUc|pk4U`b^9uUG;zT=4qn?~2;P*&#xUS)1c2B|gNG^?m4PImeTkOSJv zp}~+G#=-8F+Lm36-;$?j46txT-O5)5fn?`RU+JOt9O>Nb@TRsVGvdgyIXY7bO{-G&HgBA# zI>Enle+|@1YU@Oy$*_ClrnEoXuY8PCSXyZ~-f}j+lfKJ>h3>GKZo$m%2~$H<*ehxg z84&V$d~tB{g&~E>*FjcUPSqIfGoGC=Z0coPENzuB`PnI`PJ!wHcV6cw?kmC0{+J0P zX9GvEy_7|cN|p+;Ue2TPqATgvDgocSytrjg0@W0vyC*)UGGN{LOZ2iZ3bY$o;o|OV zpZv~0yElaJb?<&!ud!^aek~eQ=XZx#G-8Ns@Ms;D(1<*qX^uq^O88e!o09pirO5AH zPsEpFZzY8UV`zu5iVE!wEo>@`WI7LLUm-%dxCtyVxhxnqDAa5~m3S+0%%_NfxFv7n zmr5#d%bi`h6L3Ffx%1>B5qOa^klij30LWq7;O^-F=gil_ISCRAoWs-*ZVoPxW*Uhx zC)S}vm}p&v0Q{)-Gb^AJ(*bjebMDCE0Gf2q;Z$+LZtI^Pv!ffuL=~)32E-lCB-KME zv#{>Anvd(MENO|W7#Z-Oj}>s>#3Aw4CO4pM84bPCG8P<|U7e?tm_k#{4JybS&EOxq z^;lT~wHG6i2qe#XF3+NE?tbK}e@Te=?^g&@9`g8W-o+gP9!NqowGudylPYJGx8>0? zWjsBtlej>gyVqAUnXZ9V6yhh+!ye9Q?#{59@ZyD0mHwO!vZ83*} z3;B=wUr~hiy9YJ(seH>bF-iAUqGHsu#W|c}%d&esy~A>Mm!)Nc#fhf!l7A;B1l1wa zr6OzQT1SKkvmCUX8`DAKz?P)l&_tC%X@Xw$A4hly=ao4Cd$>X2CAfmKnwP}DYA*X6 zB(?f-x{nGNXSyO`M<3k`&y$Bj17=IDS&WCkq`jgne7;tx6tl0^@w{+>TeW+dqZ51n zcH}33r?vy4K93tqF*e|_+jpm^lF-gBYjPNPc_{DsMafkb1_I#A49{z}!?#}Xu1|mK zAO5?ygx~wuuXw}zGU~a)$U;IQ z8>%`{?+G-BNUsEd_JNoaJv18}AGVErUA|v4Oa%eB#n6t?V`eupzuD0jSpP~-`@tC? z?J!=XO4$8)x~%9B@}aPmu2uuZA#W1*9SlbYk!>x234p3Xq>~|abvR)CX9bXQyiv(i z4>*pIPg=%|N7PLRH(J2qhFcV4b{w+yuGtV~WWTt61MfW@Vy^@toOPNjQ6+kJo@{NqF>IM*Y+!wO)1&V#$*M?)wS!iphiC0OY& zIUB~IXF*!-UFt@Ut$<8r}h8)@-&BBW6ureVm%T_Mn8yI%H zM@BC{xtDauYB_S7a7g?(dzE9#D~YPo70#%P{FHDPKFPT;XhnrNvhzZ?L|x#sXvu@C zyyD!J|Li7g39PN=Fi=f?+I&TZ0%KrU{zEtY|>awY_UW7iBPD$KnA_X9P7 z`z3@uG+QsARRQiu7!vVfEh1qUu(l-_&$(RI9G6DwLg1moJ(u$~`Ze;CxAB>se)7Yw zTNXnAGN~%3lZr8Vm8PF8ST$BUg#FM>a+uNOJR(7C7b4azOc{C76}64Ykn`O$?t93Q zy{d^FH}{L_Dj|uG6wf@1r`Pm=x^wF>l-K-je{=wFzGb>i{6w&JUpf^~1W0E*a4Dbs zLIASukKMYI{WXCJsBSHn4ggZJ&o@INL7Z>Swk)Klw z%ua0L?%825K>=M@1l9&y@{t_HYmcnocyx39#t_0N(s#Y^gIv&iDOsOx$7g4EG>wi# z4JdNz*EBN>D?S;Z_B;~f|N4)xAU_2&q$=Zawth7R0$qMlzaE&Omy z5#_iyx_9wspy9}hn7cTcIUk6N0=E1Pl4WW0YL18mlyFN$jG^`>u>cI+ARcDk4^E&^ z_`NYf;1)tFnr)C1WRk^5Ipj1~gmW@O!NY2a@kCSefm?F?uuqSRGL{?Xz&pF}Qu;2o zOLRbJLA7WAVpRSxSkied7Ty5Z0FoM5P_?IJ-*_vsd?I-QtV~o|PhLSVM&lgKuzAvw zYW$OTQ6T~Jj%%Z+lC#4;3%`MLvOzGsGWeD~W#JbUbi~I#ElQA_bCws+b8~Gc;&<(l zjq8tYKK$7a-+lc@KK>2A^}IoA_m&Vo_1%AY>(0x$7F+`9-R;t6O)s3iFC*Fq)SjcM zvk*0`GvW}Ed62pjKQ+2%4`(vh&}a3Xs9|XyF`h@&kBV6MgeejgnJ|?q)`QKMP>YHw zz8Azg{mGI+4p@VfN&p7t`h&x!q;tRk82LE)2gy3nzJ#(+Y{^@LwP;;|G}FEMmQ^IK zn25TGgP@@>aUK3!f$!a_VL5l8Hp^qrB_P;3p~UowFM#KFZ{O|V zc^Fi&gsXhYcsA)oEN#fmTuKV_%d1#5ORgs6tC2_a(bmS!wMW)&T-$o|;kES}`F%Yu z=;r$VJD&NjK#ZM=xc4k!BK)qP*O|}J=jC$}M9Dg!z(}0J3fYHXboI2>l**JqZ3@+g zrvdLSEKaazz5@9vcymMY!(eJLsz^YFAgAQY&_4*_bgG&lE*(_m-etkO?eL+>+ald{y6BGO`t3926z_v+1cEsJ^)J~ zfSCk)MDmp^NXK`oo!adt=wjn6J6l2WMZEkbZB%n15O;B0cErZjEf9&giy(f*{t3sHl$1}^Or{jYl$`N5Y zoF|DsJjNcDpgSFOw5Pj}wA1S6jg~3c<8AUkY09`^U>mF@aa~LY3)4v|mM;5aBK_Zm@M~M#zU$TnhkD+s-lObLOWnY1++_gqPltzSD*{pM_e%-0>ATb%0QO zAXIhn8}O6H$%~aR9f{wV%f$iXQ9IvST2yD@%InnaNQ9c(!_mODXM%?Bx~Ox!8s=K^ zS{_KOIBx%N2rzaLu(U@28C;j@`_8_0d33kW(b6IgcEn6#DSwfeQJz1q{MO)nSBKal zS{=5x&+BH`4d=>Fg#p}GUH9{Gt=5KLv$l2P+GdH|X0i^CJiIpK@N=(iZX7)R#!tNK zx$lbs)S~+y7sAyUuK;%$Nt!tEyLjybNLUTGUd$lX6F>r_hFci*M%&2;05jQ1wECQ_ z?CkdDaJ_~Co{P!?=V+*I+Dssvcq70A!>+;ZL=+Y$`JqjCedo6MB+K#=VTQ~#kRbo1 z;LQ;nrlZ>3_pA%erck#`eUqf>`TOU*uZ=DChtUh-f>gEGGX?(C5N{qJr>^ZM8|x*R zQ5_Svb7}s$urPmDJA$Q!KPcE6xJYedv(JmpwwKVWV)CIt?_56C9aCjx;(=!|S+Yn5r15ps~gXjW0*SbVizS+=)~qRINj)Ktnb=%^|o1hjm450=ra zv9tNAW>D2=?tDo%hO>B8ky=Fn?wDLI=xM_|R8`|c>>d;WzXk&xm9?(H!+mU7t;vkH!jqBI9u0OIF z=W~5+_xdC2k3MuG(wIpCHy?lNJD&T#WdGXvyl;f?&-OPra{{3Ab1-nCJ91Vdy2>uEj%U(bJkpqNGyOu!yQjW6yLlTowe8OU7%uMQHW!tO z1h-~ef*T(crl)xX(X=37Ke=bcgL-Kb1ob*DkC8zzombv0&Z-BG_n6;BR!V8egY*Cs2Xb&s<#31J6{MtW zEWQ<*FH2(RN_;jPRK$y(Q6U?a1iJ6+8DKkw0md4j(d4UySani|VbLlgTSsn@OOP`) z@)!+#Yg8>E35tlFe04-w&3M}rSZZts<!WDAV#HkNEMld95WUnYXYT*nkrN8AtrTd)%t9+p|&DJJLe%a?kHg2o=~6LyI-wUbV>vXcT4b?(4~!(Af_Czdxh}&> z7XqGhV@a`i#Fc@SgRYv_(MdjUz(&j4(#byF5ghM$Q7;oA>Zb*=N$?pAmj-RER(*Hb}ffbzAJhzZUfk3#>CE$;`Losc^Q9ooZuZ;=!mHp z6OoUIJP|?;2Pc*fgV)PT(R2(Ot~{u7bMrVbbLZTJXU1dX?k;Ej9iyZ|H(_cILdYr6 z)yplAe1DnE!Z6XC>g1P+y6W}391gPwCGoj=ibX2uTK1UK9*<-G2@RF^43Dme#X9zB zV#^@-HX}W7baXD&vL$LO?paSnZeCdah$<;XB$L#<8FHIn)KY0-nimj7XD#_XF@H8T z%TvE%>%hEO;ml~&&3WWqvh&Qi=7^X>+PdlN7*Uj!%@M-*W$sj6WqX@BhLd-rt_E z^6WcOf?lA=mICw%xv6SHeedA`w+mY*7}8Ute+<07RC4|p-PxVU)CcVq2_~?Zgt(Dx zy7wt&hjYf^(eQ`8HOak;+$nNLke?Z&H$e6ZZs~6Y``Y#G)X*hkj36b;{Igj9f=~4P zY7M$)CVS3tz)$Hr&8+lUEUa>rs~XkP`iqts{JY|;2W-UGp?dN*>o+$OSaMXt#yQM& z69o{wtOtydZdY?cpA*H&p0j#$ylx2Le@XflrnC}gQOx)klV?o4Nv~` zLfc~93T5zEFn%K`ikR_1s_1DvIGRNbYAzj_G{XlqS38CBNLL$cTaSG1jq4AuN8XZZ zUmLlHU@#jyJ4dhmz?b|t2%q=25dOmlzxYR&d;7qvp~8y>O(`1aA(+AN+%E%_7a^1= zuUy=5&bn}4?ub956Pc_UyXxt3)lkobK+x?hK-z6phwo^1)p~{u;o;CGrHN5+QZ$`L zILmPwC$c@>QDEA2eO2v2Fy;*PB(%8&$;q2%m%?4gbQN%_&{VlW#2`5a_)5MrA!y!% zOv^(v0Gu~#K7M}YjOs1}tmpJ;j*BS@uYMhpYCzk;gXh0@LZmi z7$dvIb?3V(FG65IJ>y>-)xu&G(LoDa8uUQ&KLOFkFzz29ROBUCI4V`e#^TnhW}?kU zFOmUxri=b|rTh4t8*w|YJ#>9%=j7sL?|jRrzd6R>zftjU|69V$MO&mdPMs(1Tfoy) zuj5i~MzH&_#oR>!fJVy*`$5UZBLN%Mxk)3FYFWKo^oU*K_>gyHilqAm^nf@rKV$aT431$2<(n%)7(P^f5CtGcz+YbKU+)T4vt$IXZLvJdP|S zx7B^CtE%Pm7U9OT;^@#HwFym=Z26MA?m<3NFM~~s!jMXzvaWBq%hmdLLqcaeLI+!5YYxT z%{dMIVM_ygK`6u0$^oK)QKgDbgy7SvlTjk^&U0HGGDFeO?!jelA?FJ{B{vs zaxb~C!SKReWc4R1%&600=LMMHK?x*7$))CI^GWbyZdSSBY`iD@6WHsasY&S13PkM+ zf#PS|o1jLFPmd`@6|n<1$djVYS1fP1S^b&XE;pCa=m(Q%8piToBo3pE;=62(M;nJ1 z?tIhpKlap*{Hw~-@p&DD5q-S+{;!>^mnD1Edxmx7zz#znD~-~0-s>tgS62Y7=H)vpHDw*)HY)_X(boDYUgnKWga{7CTiw z<3TV$IQ(pq2ehi8yBy#0$R8?3JOPcYJTk-*lNeK?l*GDoey}OI`n$k}BlXy-6u}j) z_YP|e6~Jr`mGfZnq~hSGXs&}UoE@XWgl;RnY@I{$LXSlr_=4@AjP3FOrGdhXLCChb zrE)mr$W+v`yw3mCE>fNhQ_9hy1{QHo{b}|Y`s|7Yvjnr{TOO??*R3sYDLxZ^r;m@0 zf6>YLnOkmp&13KUnqPVPNB`};Qr{v7pZei{x%st^tSzsQW768?ATkg+Ss!^$=bs+K zCPiy2*|Wh35ib)tass9cat7f~Di#Q}Rp?ne^zQOcvWZ-YD3Vpm?R!T2qMo#Wlb|4$ z+$`g5F~~p#kA>?3@*~yTXg!I%Fxw#aV)$8IOuGxhWx88Gn9qmZmK%Wp>s!>IyqR=; zR8gHv#a7M!Gq!8*nNjl@W_Bg{omQu@)Igf%eJPl)PVlF67d(pX^b)~NHrNa=$_sP{ zAqn{8Po@UuU7r`gnAW5%RXc}5JzJq`&y0tp012#Be~#uUoM));6K2TSxeLU@Jcf+m zEh1?C*VgECbbX1y{I|tkI(`Yir4!>zcf9RwU-okkeaD}q+3*1X&qWZ1{&VM>pWfbR zC|`Ao8j}bT2n&t7jK4u=+E-;8Y0Lm@WX-|KIUP21abu!Pl`Z*1$V)0BcwN?9w6>Ej z+80f_~klF)^IIE`FwJX=jn1M24A^&6{TKfVfW4%701ssczn`RocW|8kbr$&lV`N@6}>hjXqM<5sX1}bsYqd@njC7a z#38yiYD>G3k}~4E0Bl+suZIzbc?%l$J50$9I)aPCVNIXLO>vztPH49XE-A>d`D`Fb zmJ2B%M9R%Ju-Cn}Qm{-Ma>BORD+M5Dmn715r-nwB9iRRV*Ow>)z+-$R39j+R4Zg;b?)n|DN}STYX`E z(!zx6d(w4r8jlQQcD3?@1xK4RXp7JWShnQD5W+^k?Cr)3{Z{Vg$CdFpCxbx7E%4z% zvtJ7Ff@h~KpEC`}g9h(R1z{u$PXp@8;u5wpAsUEO-AP~5-e}kW>Uo(1;J5&ggtytI z7)ZI1)nwYr_BNT9&R-ln>`bi+YL)llMnxhGT(_S6UL&}SD({_M4aMxlmn@w=etKT#X)cQ(3`lkJE8ao6Y6+?|$mf=q#(CeYf~wHkV;D!VdbL~S+#J zs}V;^MqnZh2}tmy8lSSs6$<7q<~t*k3c{>2Text$@?AomySvm~9RF?NDM+sxSVLk@ z(knp#i!p?}oQxz*H@u zLr|k#CX8XQ>R1Ql(TD6-s@tz@lT#9b?;ksmY*F(ZzR;Ym&Be4ZPhQGj+a{0ZLIDr7u+K6Eu9?4)${1eE8qIk zPel&?378kZ2*Rg-^xyZ--Mq2Zjo_iaL3{y(SVlq5=B1`MqqY@bO)QG%; z6(_F|5G5tlAm`<&p4Yv0sl`CF)tEXOZY00R$64r*J)0$(aYjjblV%r6nKS5KWLE=g z)%VM5A5I+`zCY$9H+bYM-_@C4RKrd3j4(Wx6fRgWL%NN&bE}=6TOMl2mC-Uu0q$jf zOP(nN;~Wf<_sEDaZxCfP=(2A#0I)?)=`aTgzefi5Ue*%1mpn3%#U_=vp)!5IPx7(% zY|}GLNZ!jY9C((mhM!T>r*|4%U&8NnWju&W*wrgRKF95McGIgLzUS+HZp|1fb&GCtj;zbVrqfJswavUb>99Lml_2}(8EEKfJVvj8 zvDHugZ^LBDeRP}JJ;xw9wT$BMRrdG?CPU?Y*3N85@r?NbRb%5Ek14E9N~n}rNlNGjLEzxB0Ge9wd5_D4bT zKGET~$b>)kAM-*!La;*VnAa-Ifdi41VY}$T31zWe+$uQnY^5f1lsE$B>CU2y8|S3R zs2YF@w(aT;(}t4v4obpYiMa^s!vS}-A4Ab7)$hh~IW#j$taP-8pUrqGC11We_=ksm zYV7^m7m3nAfhr+0{N#_C5)r>y=$f#1&MvOznQ3jC5Z2;6nXRG=D2Iuw%pOs<2hd{>S0h(qAqz=o1saWYaWKni=I%s&yEz7qW%o9 zw6U@wM003|Il;fY*S>6WY=vj5~J$% zd(}hV8n`8??~}gkTV%q6`Cj1-rnI)&kD+BfBUhm;==tmnrhU)a zI!IwtPwTn1cw6p9f99OUp?Ob=Gm>QIX5SN_hk1G+Q^T%GFy6?`Hc`U_6+uqPkqb`g zTbRxKDEXk~s7Q3!C$dUIFAJ34SZ`__%-DQU?kI~}fvpE^-e68rS$)q~JRZJzZ~$7( zR2m3k8uUB;CQxao%|qS8)*47dh{TZ^NXvx6Z_?{*q_bzsHGASS2#HW}2LayTm&zj%gS(>F?*XrvDk`J1C)& zV5Loy3G+G^1K$sVVxkD0q?E|5xa+%A8qdXS^j>LfJ96gSBR&la#(ZPz@-;84cAGgk zAi1L)7fNA}bMnS@Hco2SE?=*bVF#$ozvEJmQ5SI9lB#&7?MUhyXg36h5^vC>{L?TG zpQc{Z+_v&AN#(){nRhQ1!Lx4g38zt zDM8aY;Q7muspd0pz}#pcG_Q1rLE)u>Jv*;wbBZ)vFm!NnJ6QdYsG(fKR}#Y-6+jUz zDt;$@kE<0<7@+~>t6FPP37AI~I-1TfAKMtS1c@jzl`TonYZP#s&wLUKC#lc->OI*e zm0RGGoHN-bVT0W!wdUeEv^VWfKlVK|%T`YoOS^(xdME$ewJT<$2z;tLYEq!KD=zS< z+tHQV5)3)#$A-6^%OlCt&DRa4kCdOoSQ|{&DhhB3qrJ=%C*Af0A!_wzS`Mcx8sqnQ z_3nG$^3qQ|_mltqX=t@Cf-o@Gec$vuE2FVy9pee`31PSps*TNgRV4tEbd{y=c0q#J zXV8>dVLL>tmI$ns!xBn&4m%kc)pTgWnW2M>zv9f*?B12N!YMT!o~AB{Uz_ZylV%Kk z&Bx{_!CFsv7ny552QroEHFS|vC~AvaNR?|VmHn#t7p^Hgfu&-`Eh{69gBE*-g?t$L zyIF;3BG8;O6$e6m%Fg`w(7Vq~*+py5P9|?CrRTn`uL$g|FvtS3uV! z9G4s^JJ*&ckk2H*QHU=mM(1z5?oH4A$bH}RyD2*(EB&-B{Y4Po|Bb&jEhY#5>8zWq z5>*zOKZ653@r|MsBYdt^Q(nP#p*C0M=8+&Jn`OE9XMQ}{HQ`MxW0g-!sbD@9Tj&H~ zUSp`{F|VPYhq}p17tdczH(BVq62JyqKBP_jOgO4Z`U#0p+XDPrp!x({9^jT-k6=iF zg~JHLhc3o5TxWNff+B44BKKkp4r(a9zoH%FmYDgk31rDLK}6M@)ACT@V~-^~sVb|H zIS(7iZb~*cXsH9lTBBOFF-Ym|w8gX3vck5jZ$W*}xFyd5%@PclWIw}wSC&_>Qu!L8 zN@57?6)BX6A=i@|w4LL^=rXVca$lNzr9}V^cLs1~j{;O1_?a`5qRNckcAfnswgz~X zbv&=(fiK47GbwR!Z~>4=VkV{Rnd!OLk|gI(L%;PZTHgqa3{$P@eO@sg4;ln!O5+7-&WRsFrQ2Jxb~l&Auon)3~vZjPbc#TT2FfHg|uyd%eU(_|}?tGai4 zAulC|_$=qe&Mi0B9E?Zw?)8AAre%V}WVM_#O>=fNX<87vS@&g@ORfPa!mJxt z%S}f^0&!f;Im`%ITiuABJ?@?9E+qC!+^|-5y6dNposN6_?QeczaC7<0>o+X+gx~O+ z^AZPS9m`8aKshiSK9A%}r&JSz#j3=mn1ff6FnpB{AcGAyS<0IVXDSBhx|HiV?*hqaDJr$&=F z9`#X2?8jGAmR=jL?lZcrA!m6UP@uCIGcp>sq-BT5n%4rud@^jcMBw>OUFCnxOmEL? z6>@Wh>8G!z4%g2hAWV1*U@jPjF;ORR5ZvC}ji#aEtxf7n0yH@+PM+h@W*7u-c=`vj z-}}t1JQqP2H0+H}eb1b=b}cMY32_owC9A6VE=|3vgA7-aXVR!hSQ4`*r5uz$8kIU*jak{|&T3|TUgVrM zQDJHKmW_u;WnjfeY`d_i(&M%|5c%7U4v{|MgkW>stijo1gjK!!*SE(R{&6E>=fA5tx;v$y>H|9r{1`?G8Ll z^LP7B^gPdX5~N9~W^hCqY<9ix8nI#+B~3s?KwR8+3Vls^hOb=U(6#_J>AtgC;s7u| zMCs0#;<&06$#YRgIuhwl3$}R;7|nkbf%y^DECq(LbHBI>L?L?pNG)8(iYvFgQ9z}c z*nx{K)qYF?&x8iDRahpf@yisqB)nu3IdT_C^7&OW(J@y{89%L=wWfuo>`c5h zh@}aOTIE@JZ`^D=kDorcaMv52{=vvWP~{e+4z8P;47!sU;5WZ{mJ`=6CPG894L|}PEOd&2+I$q+(a(~ zBjxk~6qy$Mn|l-|pvVLjQd`R4+%?oBA4uxcKh(&ru8Hq2Gi?PwIx_H9ysUg#UFB5E2H}ySx?z?k&x##vnHjls4T-(w@n&9>mEhWHD?~TWUVZh;?)};azx59jexJ3eZ&8ju z^_|Ib+vOAlgfzs%u8fFQ*B&XE%R>Stt12;B*v1qym;wm1RLz6(i#idiPqwo+5O&+BkpmX42-67PKLi}!xRZ$A3nf4PXg&*mWH z^7O_hvUZyre3`5eQe3@sHCc%J2%OV0<&j>Ncr&dFyhQsqgUH2d4bZ#fc~7ROy)I^? zJM0rJ3i016UQ&kgl>!Oc7ny>h-zei9;fqfigqyHo!IrbxHh;jOQG^r*x{_?&=> z{1=-{hh3$rj>`Kc^+E99oE)F@{kRVq0)Y;y2dL)UTo01Ih7~X^$Vb&@ zv^}Vk5T2HT*ApeNuONiCw=@HgHw2xOy)O3I(4Ux8QC<4FLu5K8`T5esjJtz8*{T_A zDpb_!DqbuZ2o3pVRL(;R&5=B8&RGuL-uW>5g1CNY*_W+widYVUtD|Z&gkq-I(D*J* z)xH{Or{LL@^MDpHKCPgof&lO9>xXa;Ncz($U# zRz7A)o(@Tm#Itlo=>; zrVi!@)zyGp+rk!yC58&kjq$du9z+K;I)KURtl#%X2sA!|^TQi& zeD+5k{*FI=Jo<(O=<+$432%G-W7FLv7AA$e)V*7!Mba@hTT5<1n`$wcZB(r-HC_w6 z+Jj|D>1Cs&R7jXsd7yEZa~g16xNpVh?uMfRpE z-}N=W8aJ2EZFcn{2><1_SKrGr-7u}ddU{+cQaK^7OZzk7DxFYazi0L;r73-&nlqs| zN^c-x$#}PBA&CK%o@yh{;qLQ8C zD7V?#kK3V)HR5OqaG9^t@|sOsP4)&XY5f_fl9O`)$S3PTaKJnwzXuNpy%Tly%5u}N zLpV7pCHxYKHN0W8I@-K^*SjA0=HKV$vN%3pf-udcb64-8=?0@?Ip#H=`B`=0vnZ8t zjhj{hz_>w5oR(!+-ei%c*Uz0k0h4`Kl8oreqQvSJJhKX2ooKCyyct#}$Khm>3*|IH z*Qfu^o;?fta#2ikc?nUoC`^x149D3`50EP{xu7{P#Jf7|az?q`!3&WGDD6vOYyE?9vINF>YT)+FB zU-`&){dpX$7wqcK$8z+hJ71r5V;tue3V#W6lyHNNZkS%!jpM3T;c7`DXm*kW5)4Ql zI_#b0d(8>!8ql6UJzz4BeohI4(Nc-PpqfMmAlY<5T-2su!K>ZZW5c z=+(f3aiB5xfktU2hvp|fbiM+&Q@Y0O+}xamPLzHL&r*Y|)A01jFf=Aaa4sGujaDDx zkWJg#>SoBC<4#hvm8c7^I>$IozvD|=lcSqo_rzOX{K?0@_pj4$Sb#2{znSpL&9BNz z+NgRg!5|F=+h`2ZeijnBYW`~!voWC9&yX9`Q2l-OXX%gU43R|SoYt!$WSSQFaNcY& z-+O1Iac3B%7F;ey0ZGO>_)4J)fNiiV4}1Q12&*|1u8^Ufa+Gk*O}-Gkw|uJt*mzRh za{ZQ+xUzV*%u+-{GQ}IPuRFfN4 zNc(a$5BVxS!!LUEBi~VF=ie^Y{em&`4;QcAMGV0mh({=)9kixIy^W&HtAej#x2(%? zz1*o+vu~scCU?^CNJxN2^c9l#m|xiB4ULW~7qTt+= zsWghFXD9#X#lSR5R#bN8s1AFRI3xk4&mN^;dVLpfd2>?V(?9m_i&pz02)pCq@BGt? zS8u0Yx5rcR*;%Eu+o)j-)!mw-VoMjMpyYM=^Q|RFsMoXZ(Ypr3RZtn7T@DUgorXPG zu%Q^NCSIFTIH@@hHPeE#=pZ## zf%9=8DM}XIEYEqOEfX3ctHdH@gTIsK1vk1IS8fpXRql3)UF-b`Nh z)E05<1bCA;Sbx>-m94X9Uiv=ld_LCArBneS!+`beV~!L0IYLn4kkpn&aFjD1Sqdd* zNDgvKc_6gs2uOyd(%D$D@q|+xSkhLM1z;{DI!1GO2a{Ijqy!E$>v9Qe6nJp=;P_`W ztugA1b1BeO^P$d|wgy(go2qlU0ek{9gT-u~G%E(7hYuZgzS7+xVf)YFvA>=<6q3>W4F$IDVB114phwA zPa%TqjZpp7nz@;1nPf;411FS|n~{@r-t^+kso==@jeTa&XU>t1qp2tMe}qxqwG9&# z(Wrq|Y&BDK*H(+r9$M&{<)Q(;rYv0Qlrr!{sc}2)ttk1^d@p`-tuE5{dOtI&l-SOD z0fytkz!Se}B8r4xg!QSZ9h>Ii)~OeRiH&pSE4jhbZczG| z0#;?IAwJ^T7UH_)5vwz$@nLi=k%a}_DEGXZyKKiB)f`I>drKZ!-8vX@WVfOD0A{^d zXp;IzxyjgG-{wUtpO}Thn;p-pgi^?BU<02piiT!7YKRIyNp+?c7r)enC{3g}Z?0|5 zXSV6^xyMwT=R*w98W~2_Dh*)fw38Q+Ta@_?5Gi{W5<4x8#g zG5aVz-yFYQMji22_yqm)jU4UgoYn|baEO)5M{XDBepGe3H5~|?f?m4z%(XOA`u8_J zhv1Y_1%&s${rA__p9(T$0c;SH?-o z=addsZ<^wwMxNh$ttGS@Q?ahW6t_F@U{aFUZt}@V%LFQ7$s?uRHGaHwWYiA4na$jp zs_TvLU&?lez!&BXZ&0bMBdD5V`K}&f`6&L#2sB;H5I3Of8|C$Zy`h~ho-Vt__Aftu z`lav1%>{8onY$Dae(rVWTYvY!(&28q!xkHWv0cz&h(j7eIC;|ij*ey|%c&{|ZgeJi zd0v$#sR^QK3cZ9Ye?)@{26KL%>mEQ zV=9;F!7t0)c5ZaqG{!f|6=f%}XYkvOd?BK0IYqDKNtKG@ZaG(XAz!W;!zG^2cl~Jo?(jPv zIB08yRU9`}m9P&4 zW>j{(x(Os7?(QUNM9Csm@@`JGmL6!N^xburEXG=doio7pYrmHhV7v{OByqF7aVo>AG$@x8#F zB3kgNIg-0_H-{-i3O<@vs1sx3-Hav6q3ALuWsZov-RTal?m;&+-n_aL34um)_dD4@FI^`DBeD=uUa&4DyXO z-iqZz8I*@!Wr0D?PBN!69=^JQhfZKly+#{+6wm!1L|q7tl++YZ7nMg%6EoAr3{kUe zLOcSrlYP>6DL2Tl3XNC*lHJn1B5-91p&ULm7WviaX>&h$u9V48ZcSWhYoIYjfYD2J zE<-~I#`pm=7ldM-Y@4_TN-J}GYBFhxfP18c1;-`loO}&#=R}RYUntzi$;8;-UwZoD z+doO)E8>PPbrld^c;kmm8j47!yn6B5%s5fuxj|weQ)Rum>a!_qcUL|l*2M36N_aUL zdO0-HH>R37O-asY)5sV4n9Wo6jL4z#Gj;Fg!q!eTZG&&8g`s(4qi+hpdYmn@8A?FY zf!D~IBo%b4GfY*n*>Qa8)s8D14;`QCW3NN0<08;&xC(1};}Z|5Y)BP+96@uQgo24> z!`@xvQ$g&U<|`UMfXCO`O!PxI)`%Nm3o&#lzjp6(6%by2^M?j>yyUN_r2s{(xTh`H z`ZC-7fID$%F@Rwq#q}Uo{}>=@UN6trQcAD?1)pQY0=<#vF5+F*Wv2pyU0a+|21Uaz z^mw8zJa2Ok!3uupRG;g_6n4anCoRBJ{m7JcrcSS$%+^OCYv60r%_=it?$Uyf{p7jV z)6M073%mNksB#>A?fZMJw!BJkq9|U6mB4^Hz@%vN25_Q-s4@j_jH5LJFg8ZQIHzc0 zv?idNmqVSijhfIu24f{YhtE%Y#c;$31z^%>oVyz08@)HROK$%FFfX#@E_#|x&K(Kc z@Hx{iK9>#5T2kLoVeP(e*S_h=#>TNbWQM))y?<2(o)1H92Pys47QVyAdmU5*b*}9pzF~fYn-1xcT@8+;ado};m0Sq5* zWQsI#UdO~`x~{ST?9uTI4@)!#&1GtAYHt6=@jKsg>zjX@e_$DSKIm0Ihz94`OK%J# z{?eVLI|R?1zw~IZ+h{2D!E zRXX8`8}IF9yryhVN`1O9z3K_ERB5KU3xBE@*B-TyVPi^l4W{M&Zu}Xp(kd%EnMZ0G z!dfPcabwS(3A<69Xo-NIMvBf|!8@l}`7YII)U?w$CgG&S%rkuio4NEu>DQjjv*`TN zQ`@IszJs{oXNtJtA*|8~w@%%!OwXizHiSRAiNewzB~eqYV5KzZX4sQ|Y^9($To6Eym1%xmpSD!f3-Z7u&?8oAJE!XHqn(2&2kK*}i+Pw47 z{C6X4`$^Q!TqMRjT@I^hNU@)zsjBvv@nrrx8~kw2tu0n33VllUfDL zcchpx>eNgLK`qUYF${pLH|C$c^1hdT@bAi%?@_1%!tJA17|htXxR}uu0gS{;Gh6hW zXFCUGR9ZB5lH6G~grKR`OtN*`Hb|kS2h|i1wP7+oKL}xx3WE|W{Br{qOIhth1ZN;*!yXS2E7wz zS*ZA!aPAF?8Sqn3n^xA1@jVl*_JL!!zTwWd|KZC&{Ex*^;!&&82{)g+)SK-fIAVs$ zIE0ajm%1mno-}#|jRF{xI66wnWM{y^Qh`!B&2%MaFJ+9`Xk^Nh*t2KTGw4EsOaApH z$_5B!(fV@VP??hE5(X12*?C^Cb$f%&bFcphZZ5?~@R6+o!oyFVfp~c^?U-m&s&YH+ zp6UdSl;L8S@y@CW)fu6?<(=KMnZch^y^>Lc+zEqxlXOsnWx%cD7O0+lRI83{ZoOV@ z&rGuAOBcVDbv}z zmKdlANH_1iheaPeHSO!2%J{dMwRjsBLXMzXr|AW1NJ|=!wm=<4m&=&w2B%Q2e^cYN z%x{3?Ikxh|MM8^S{Jy__t+=^7CRIA&`sTBo61|@3X5Y^cLI7q^(d77KD^oSQ7$~L0 zfm%z8?xc6l=>!86Mhdtty82C|OEwaC+3ND68e`L|VtkBxcV9Gnln!ub+A4`(OCpzeHAB;8*H#JdQ3O z+yYTcsn7##jA1|#PpEW8Gk_&hvf0<;iAHBLa!e~;eRZX+g=J`J-fQV45lMY%;$lqn zOddqRUZ8Qjg0%0s>mLMr{73LuA3IAG5H2jPvYF7XqMyJ+D8#AK&}l#jdxrMdN+Wvx zo#>O&JGGgh4N7h6%`!@DO~zm|BHFp^DX6VgX0?uo<5I8pVVRw{_wB*1F5-q#1%#M8 z?D@(sX9J;n-BiHQmcrOGhc1AS*ZT09)xMh4HpZtI7Vbo*RB3eKT|Hh?STtmu!LHsn z!^q~D%kNzK+Fz#c<-oIaKdMv#;Sc{~ZE7+nD;;$YIA<&Er48!81igE8WtB+`Wy%uI zBm5|vXPW26b^$?cdU$eVZBAr#CS#b%F>30-+VM;8{1jams_Mu745dny!Az%K2XD?@ zm~dix4?T?*r)%}_n7T8AFuxa32`qb7_IPEfnX{W@# zS#OW5Tr#D-3Gh;7%j-ta&9b&mzrvpVGdgybDpf$p5%KE#e!AOeFkB%}g^8%1PRwbT z%CuTx+*Ge3VqnQW1@KbHSJOk@I(h%w!5%EL&tl?Is#F2tmG}Ns zr`|wY3X?NN8YK~z*Ai*h(`rI>D-h1;KeuDwe=Q8jtRjPpS z`Uie)t{st}LnHb=THY=j1y=2tM=0vkK~P;E*y9P+A8ej_@w=gzeLg=xsZs@m|3*0B zpw}}uw^^G7W-?j=Y*QbeyQI!2(u>-2t835QxcY%#c;oXIHKnP*w=*_Pk`^vA_ z{Z+fhc8!hi8An4j5!b)4kO-0|CW3n>GbwsvY5f$tzI)&K$6&7vJWCZ2ej%G7J?-9i z{PFd#`;}8KeD~4oU%P(n?&A7sJPNB-B8_H|)vi8$4eXUgU#SAZFJjTzz!)tKr)n^X zn&GXV{eSEOSvC+=OK?hQeWeNr-<|qWPCHALDj+OXs#F1CsZs@mrAn3h5ZZv&PbVLa QmH+?%07*qoM6N<$f|)_d;s5{u literal 0 HcmV?d00001 diff --git a/settingtypes.txt b/settingtypes.txt new file mode 100644 index 0000000..55899bc --- /dev/null +++ b/settingtypes.txt @@ -0,0 +1,4 @@ +#Side length of the surface area of the spawn platform +#If the number is odd, the platform will be centered at spawn. +#Using a width lower than 3 is not recommended. +spawnbuilder_width (Spawn platform width) int 33 1