From 3ef2c9c6bc42b69138e60a5f3d1f920b8dcaff94 Mon Sep 17 00:00:00 2001 From: Aether Date: Wed, 16 Oct 2024 16:35:21 -0400 Subject: [PATCH] bruh this dont even work --- build.gradle | 26 +- .../assets/minecraft/server/test.txt | 1 + .../resources/assets/minecraft/sounds.json | 17 + .../sounds/block/chorus_flower/death1.ogg | Bin 0 -> 16467 bytes .../sounds/block/chorus_flower/death2.ogg | Bin 0 -> 16267 bytes .../sounds/block/chorus_flower/death3.ogg | Bin 0 -> 10243 bytes .../sounds/block/chorus_flower/grow1.ogg | Bin 0 -> 13938 bytes .../sounds/block/chorus_flower/grow2.ogg | Bin 0 -> 15249 bytes .../sounds/block/chorus_flower/grow3.ogg | Bin 0 -> 17264 bytes .../sounds/block/chorus_flower/grow4.ogg | Bin 0 -> 14078 bytes .../minecraft/block/BlockChorusFlower.java | 7 +- .../client/renderer/RenderGlobal.java | 7 + .../TileEntityItemStackRenderer.java | 20 +- .../java/net/minecraft/entity/Entity.java | 24 +- .../minecraft/world/gen/ChunkProviderEnd.java | 337 ++++++++++++------ .../world/gen/feature/WorldGenEndIsland.java | 33 ++ .../v1_8/internal/PlatformAssets.java | 9 + .../v1_8/internal/PlatformRuntime.java | 2 + .../net/hoosiertransfer/ServerAssets.java | 53 +++ .../lax1dude/eaglercraft/v1_8/EagRuntime.java | 1 + .../v1_8/sp/SingleplayerServerController.java | 2 + .../sp/ipc/IPCPacket1DUploadServerAsset.java | 61 ++++ .../v1_8/sp/ipc/IPCPacketManager.java | 1 + .../server/EaglerIntegratedServerWorker.java | 11 + .../v1_8/sp/server/EaglerMinecraftServer.java | 1 + .../v1_8/internal/PlatformAssets.java | 12 + .../v1_8/internal/PlatformRuntime.java | 3 + 27 files changed, 474 insertions(+), 154 deletions(-) create mode 100644 resources/resources/assets/minecraft/server/test.txt create mode 100644 resources/resources/assets/minecraft/sounds/block/chorus_flower/death1.ogg create mode 100644 resources/resources/assets/minecraft/sounds/block/chorus_flower/death2.ogg create mode 100644 resources/resources/assets/minecraft/sounds/block/chorus_flower/death3.ogg create mode 100644 resources/resources/assets/minecraft/sounds/block/chorus_flower/grow1.ogg create mode 100644 resources/resources/assets/minecraft/sounds/block/chorus_flower/grow2.ogg create mode 100644 resources/resources/assets/minecraft/sounds/block/chorus_flower/grow3.ogg create mode 100644 resources/resources/assets/minecraft/sounds/block/chorus_flower/grow4.ogg create mode 100644 src/game/java/net/minecraft/world/gen/feature/WorldGenEndIsland.java create mode 100644 src/main/java/net/hoosiertransfer/ServerAssets.java create mode 100644 src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket1DUploadServerAsset.java diff --git a/build.gradle b/build.gradle index acbf07f..7055ddd 100644 --- a/build.gradle +++ b/build.gradle @@ -42,7 +42,7 @@ def folder = "javascript" def name = "classes.js" teavm.js { - obfuscated = true + obfuscated = false sourceMap = true targetFileName = "../" + name optimization = OptimizationLevel.BALANCED // Change to "AGGRESSIVE" for release @@ -56,17 +56,17 @@ teavm.js { debugInformation = false } -tasks.named("generateJavaScript") { - doLast { +// tasks.named("generateJavaScript") { +// doLast { - // NOTE: This step may break at any time, and is not required for 99% of browsers +// // NOTE: This step may break at any time, and is not required for 99% of browsers - def phile = file(folder + "/" + name) - def dest = phile.getText("UTF-8") - def i = dest.substring(0, dest.indexOf("=\$rt_globals.Symbol('jsoClass');")).lastIndexOf("let ") - dest = dest.substring(0, i) + "var" + dest.substring(i + 3) - def j = dest.indexOf("function(\$rt_globals,\$rt_exports){") - dest = dest.substring(0, j + 34) + "\n" + file(folder + "/ES6ShimScript.txt").getText("UTF-8") + "\n" + dest.substring(j + 34) - phile.write(dest, "UTF-8") - } -} \ No newline at end of file +// def phile = file(folder + "/" + name) +// def dest = phile.getText("UTF-8") +// def i = dest.substring(0, dest.indexOf("=\$rt_globals.Symbol('jsoClass');")).lastIndexOf("let ") +// dest = dest.substring(0, i) + "var" + dest.substring(i + 3) +// def j = dest.indexOf("function(\$rt_globals,\$rt_exports){") +// dest = dest.substring(0, j + 34) + "\n" + file(folder + "/ES6ShimScript.txt").getText("UTF-8") + "\n" + dest.substring(j + 34) +// phile.write(dest, "UTF-8") +// } +// } \ No newline at end of file diff --git a/resources/resources/assets/minecraft/server/test.txt b/resources/resources/assets/minecraft/server/test.txt new file mode 100644 index 0000000..8def50d --- /dev/null +++ b/resources/resources/assets/minecraft/server/test.txt @@ -0,0 +1 @@ +hello :3 \ No newline at end of file diff --git a/resources/resources/assets/minecraft/sounds.json b/resources/resources/assets/minecraft/sounds.json index 9a26e83..4aab198 100644 --- a/resources/resources/assets/minecraft/sounds.json +++ b/resources/resources/assets/minecraft/sounds.json @@ -1678,6 +1678,23 @@ "random/glass3" ] }, + "block.chorus_flower.grow": { + "category": "block", + "sounds": [ + "block/chorus_flower/grow1", + "block/chorus_flower/grow2", + "block/chorus_flower/grow3", + "block/chorus_flower/grow4" + ] + }, + "block.chorus_flower.death": { + "category": "block", + "sounds": [ + "block/chorus_flower/death1", + "block/chorus_flower/death2", + "block/chorus_flower/death3" + ] + }, "game.potion.smash": { "category": "neutral", "sounds": [ diff --git a/resources/resources/assets/minecraft/sounds/block/chorus_flower/death1.ogg b/resources/resources/assets/minecraft/sounds/block/chorus_flower/death1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..f1d1c25084e865d3362771922ce78148c9512d95 GIT binary patch literal 16467 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 W0HZUa`Yo%2I4_;_^|+r1;Qs-DKn9Hf literal 0 HcmV?d00001 diff --git a/resources/resources/assets/minecraft/sounds/block/chorus_flower/death2.ogg b/resources/resources/assets/minecraft/sounds/block/chorus_flower/death2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..90689466d5dafa827f230ce5a589453cf5a451be GIT binary patch literal 16267 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 literal 0 HcmV?d00001 diff --git a/resources/resources/assets/minecraft/sounds/block/chorus_flower/grow1.ogg b/resources/resources/assets/minecraft/sounds/block/chorus_flower/grow1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..1717e606dc096462cb889ad75831992329d73e37 GIT binary patch literal 13938 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 za~≻D|ba|4gyVUdL10PwUEO347(*U8xxlvJ&+9Ii9k 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

2d0`1O94#D;Ex+3v zy?&IWtJpRUTpoX=#7uTE&FVuR0-zc&*VuKAkbkUjup!mHt75Ga5(&fsFtsCE_k#t= zBa=f@HXUP3!i9Xi97fM$O}JfNBn4PAs^JqZm>fcGgA|){z%oJ*+o9qv_`iA?$qr5fX%tsO?TY`02h$dqm}rVI71rsk{C9d!^p^ z^$*?3%1chsuV7zhlxQt2X^lg$S<3lSN4XH?*lJq zDmk=QbLv_S#>&OLpIdl6M%j8{ePDZYWt+8snm25uQAqZzy`S(Q+9(fP<&YP=SKCxR zeEyq`77Q)gkvJAuYLT?6t6b(^Hgzc%I`^nS{;)3VW8O&F@Q$zA2)e|)=C0sUd5Pcf zCosIT)|nQr=KQlQtK(YA-!4FP^d^UX*> z{&m06>8sVvO$(g#7_*lPCt}NLz9$^tGg@BV>d))tb!f2-ug-hp2~EJCZA78xZe2(X zM&zS8kDzU3diKe)-DQbRzZ`!3me-Ayak(kffeK~Lz%c$r=ICNGqo{FFp;jBclu$Uu zQUF=M+|Y@0VnVy^o#SjsckQhrA;D`N3#56}fc8M%@8s%Y(Z>Tv@^X|T2!?bqVsz7cME-fB^2xI55T``dtWs-E2H?+yo#Cy!7z8kxu2kR;2) zK$g>`<#8f-%!S3E_k4iWmt2C4F>xtAGldfavgn@$VI&t0Or_wM2+w-G1J3wzfrTAu&2cEpl!@ig6#-GFxf$LrNF|o<5O$o_Bptyjel}2PRPHwHX)y?e=As+rro+LWD)x3DmP}vbFH@=$B9?~s@LzTJHqL$? zS)sY2<2L3ee@l6@gy%C+oAXKfE83kBhlbeY9A2{jN;z8YhPG9_`sEVxgGDtlAGe#% zetr=B>CaMT;>X~~U@M6s=Gxo|494V94_6(}hI`3$|1*zThFC7PN`vz0fVvOuQVw3v z8iv$-7m?TXWZ@}SE$`=PLV-oLu#upaQ3#n8pr{;S+>Try!-rO67 z0O~XzZ>rKwF}>*fa+eVZMGvmn%^(8e5~9xm!jEaW9w=2+W>v6d*W>=fuFA695LJ-R zmfW@j)>;(W#UlAF*DZia>`6ufFhZIGx_3| zSUGrR#sY(x-)&#Z%>7EBMiCM}Ae*(JT~%MXb*e2@kfok0-pIs|6o&YUmeyiE>ujKk z_jfY&l_#E3n6KZFP_~J`Pc(|>wVoX^4!D&}qVf8SCmpV5tCRb9sZ)4PPbA+u)zTl7 z{qrZka}#^Ww-_21;l1W+tVw3T^f#w=(i|fvsb+w?hK&ZMfd{f;C0y7jrlYcKf#BL7 z6%B5_T`9wv0D=RD07=KnQX+!E+XwZ+FiwQavu>Te&QGFEGP*?xrk4Eool6EmgShVS z5o^>WCH`;@w~Z!*29^^J*0;4QmfFbfvRjzO)Zz;2;z zvg3DpmNzeGn3a`Pq*PNtNw(wocD^EkblylQks0`RSES{Cc0~|i;PGo$hnLi}G*r}- z%nVFSbj@Y86jT(jT@OlXdPWLLN=hn9N@iw8S_&Az#LPfNLCwTS&%#Pa$HK_Sz{tW( zPff$b!chIGyr!9&k(sHcxa1?|0;Y9VQKj`CUIc61w3!U+^2k-D&1^fFI8sX@L#(?}i_U z91$EAp0C+uzcMPI00Wc@5(oZ|*D?T{T0)88=knuED;`H>Z&l7b-yq)UjkV6;(Eh~R zh;X#kWp^K_l)_m|vP7zSH&C)%l|NfDn($f(KwJPHe#bEvga2L}kB#*8(n+&=25!Q~ z%us;*h2;Xa>?9L#tk>?dh%;Hfh6x95T6~OP(%2IL&kAbWoun7GOaGsRLXg3xF6sB!(FU7ZZPz!szf`Eq}h zsB%B?;(jk-E-lw=8eDOuC8`6Sf17)BTc|WRrUB8h>sV_|6fGyI)Jzhq)W_@j9ls{< z(l?Rh%Ue5DsL#|NjYp*bV?U^ReXa9?-EzG_fSvFja=A~{QPS&?2dL-+gHBazsd>%d zrrm{?ZtyOZ3|Gjb_kg4#@=J$o2l9TpHMD6|x5EjUcRH{mBkhY?)E#*kEo=rs@qB{ zFqLCy-Dd^^4CQ4S;S~8!gD;MG!a7&!tqKdfSd5uzeS)1Hxn5}9y6~}W>=h{nmW$c+ zBMPH|9mj}bGx&eZlIe+-xKr)*BYs|*3ou<3gIiLp8K@lHUh?CQV z{e_HjVJq~v7J$Biw7;hKiU2`-ZF}WCw;z#!kOMs9Du&FPYXG-rBD5s9#W+hy9pxS) zcUf#x{HE>-V1#xSUDE(a2gtZCiFZg|AGnt-gXMBw>y^-nE|fx@*Qf~R;({zcT}v%| zHfk&1D3nWo*6v|D9Nqvvax^KQFUI!OR9!1A^50GW%vh??h7G}bag#U z-S)?Ut0X4?(RJLV^)SJNVeh3;xmHGLE36x`*Pp(IxS;@WY1#z0b)P zq48Tg95js|L};p5lyiMPOFzIPh`F(g?fXD#P zSAT^=f38|P^@Y%V6U=A_2p2*hKV3f-BcR@`;f2RYlJymJ2U3nu?tIF_?S!LT8uIB| z=~mmVniXGVw$R9jn{l4NX>VH1&Nf)7r|MLREhK@XgerMhe!5*}K^qCd)TlF2Nh2@j zBft0GS}sQ^J*dB~aqh#%)Zg-X!F|T_(y0!fJGz>oZLivF<^|bp9mDp98p-9ey>l+|9$K3ojUQ`JG3TIfB9?+fx4q$8Y!u1A zw;8OgHm-FY-QTT!i+d*V^EY#TF84waG9xq~j6nC%zU0I@`QnYs7r~^5o9^Gc*F0Dm z`F7e2*2IiZtewJJ0Qms!!W;Eud}E^Br673AA6i{JJux)&jS8ljuOTlj17RCB2>ZQO zQ)PqLohwu#GuX?}K9rTrf#IyC`Krq?EW#xQ6|BP`AYv98{%7U3qIzr|JTbmj9kU~9 zH>4KzR7-%Rs-fmHbU4F3@vx3@yt3O=s)>>&J5iW@%*?qgX z$5XX55Tj-;yBAeYGYN}h(FJQ1F*-OX;bXZSqag{H=MY_^oN1qp9{p?)JX{>mwhbBGI%8nLMV^Ej@A;frq3hDsdx}tB>6Ced;KbP#f15pIJizU&I7Q3tTK48=dElj#wO9tWrK;M8buA zj~4@Px=pz^EU0e>>ic}H@&k9WOtj-q0(E}^l$!{0YbdbT5YG4YEYTo#{0>90UdNUG zYnNSb{u5PsjFmhO0Mn4emgzB=xCh>7^d`wMMiIw9XQDZGo&E98)GMalFY*~#QbA_0 zX`f2G_YrtA2bl8bYW-3aGrX0nMQRQ?m);WQcVd37C5`as#(K~JZ5bg?KzKH>W3c3L zi^QX^o?s$|4%7+kt0&|$#)VdUi#aJh>`?K5=M&@K?3}b4Wbdfvf2UpcC~H?6N;@6v zAt$+(eW54Fk-rBL^U^14_v&^Mqmv)ZaulLu$glcidj08O7c=%qOe4w3&oEE)$Mr$h zj6j+ql5D8g0B=bB`UJzDXKb}U{Lymk!VW=|1Cnn)M~bR);%?%-boy9X9cfiF=WClv zNC2$06xodHWywrCmA&n#r$Ul3VaXwXi_ImVP8dgTkbNHXXuOTwrqyaCp_pps?vPEv zuBVyUJ%Bzw=`K56^5gu+H+{;G#vO;xvQ1EgM)lr6o0x=y5JkC_w1mS?&v=^^;m z{_#C`8g#d{9mzaP zM*>ftwsKrrB{JV<+(o32V`8Gf$NowlB`Ho|FEv!5lc}hf48=o^u?`t7I(qjpWbMWu zoLuwvQYb8xntFm=1ce?$$Ni!gjX0Pw6PMEx8nz!xzp_tpv+DDed!A^dBY^4rQN-%1Uy#BI?7r{+80aA#@omhL%$<4yDaD+Ns2wUCh zY*jk@hgZHUdkc&BrkMfv8+R>BWC3xWnouITg!F;zijt|!g@)kC^YzlrK?Gz+9+M(T zW6f(R?5H5*x5oV|l>JR)i$W9$sz0U+m@i%HzPNGCS)=IW)0y1~ayi~r(8Y^ppVl7U z%be|uY}=P~o(_YNRmIw9+uTi8%2OKN{Q1+#mDe16JAU?V;%CXPb?3LFG$kF$xagE& zF#*3$@RUrpqb`I?%dk67q+Nts<)&b}cXv7*?SpoN09+6EM$NXWVUA(59J>fg>4^bLNAh zUp5_%K3C0$EePZ-@|UmS1Swa_$Xb@U?jFvnLmoeuwJ|TQnqc4$sZFq{VBS#N<~gW? z?+$L4Th@#h@|-B{6Y7s})SP>~RcjZTEHRSI$DjmRE;N1~jqOM&dgS7D8O0UBV1i2X z!C^>>tKh+5BR%oGlkLT4FH*#QtXQ`-$#qC(%Bk_p=1=yfHQ$3@;H+P7Xcpc(H>yqM z^ev$!`Jzb+XL<`Cd5WN5JG|fUbBXTJPcUV@XOu7xiNiYWnNczEu$t42IY(cBF(NQnw;Lq-_w}#Sp9Bi&s$3TA6;$H2Yqhy>%0@e00)5sVM&3@aE!u9rjrNWOm$C z%4fV{SvEn7Z$i<~23k=xgXv%qN!E*gj zWjwj!O2$7d7w&rNd7ikp`+S|e>(7L}?t7pe+4ygyZfqMR4N9Tv$=W8Vrr_Nd3RCcm z)Wg;fkXn=$=oe%073|ymB8lQCCV>~}xIf6o#X-vcuWtEY!(x~nwj6P2K)LuDia5IqX55Mw|2z{9>VVjUj+Hx%}l@v(+a_i`%4vhU$&7)BtIA6lkusw?+MmxOxH7M+^Nj~$e z)4e--njMYYS-$@Tx|*6A1jV$~ddJ9gEo@Cdy;S0KRp(Q-nihsO85JSJyXr-fLt6E( zb|A=aF#p{j0T&;~Pfa{_cVE7p^M)BYBod78n-M7RRC{vV&AyLQ#=3ZS-c~0{fp?hn z;WHLGS*ruG6GH&s;^BA9iBU2{_onJZve0HN)Qoxb{xu^d>mX$=$1l&v$HuP`SHvfL zoeNESEe->vtO5_xG{RzrgvFUvyvpF=fvy($(@b>?&itK?a;jjAAR9~T)7^|ErBJmr zel1IL_xEHrAJ=(b;oDZs%)5$}IQol0+$tnx;;}p93kd`tzCi@`Rury}q7943`>W13 ze`NQbZ;fHTbg9^Q`%ZV}(OOSuX9u1^mRb0eCS-+eSY&WJF~-9=@452NVa-jayC)#=dHRf zP_H+8GJ0N_2ecC)4<%&lXkvCanehvL6uFliyE?t9)>rPDuCT&A4<42n*nTC((&R@& z58YC(MEyFWL2i#R1+7VttD7KlZ({j2$nC#A!69k@2anE{_gge1dJDk;Ph!hJGrrQj zx68yp|Eodvgc7j@^@ZF-EVABhw}}mXytk4_IO-r(2;DVnB4+q(d-axZ!&m3ngD8Eo zC0sEJIGE=Rt^$;H0#M}k*t0Dl5znbFv=t75*`9($2mfo*6NSq###FgtkMC;B>!XIe z_l!w)OZ>!VguEZRhe-94)p@2t3f}55`bU+w{OXYKkNx^|h+Z6+DphAeq?&u5?|&5g zTi@Zxs;InP_bglT*5&)mBtNFhWq~dCOC`(&@+_i%wq43!Y=pi-e|FVLE>^9T2fbF? z4f4scBygsv!?Y@49=;smq2<*$Lk?R)#!sBr(Z+^$DAtR$d{)f$^zZ_A)kaa|t83sp z-BB!Z=%=ONehuus%olg3ix2PO_TCXl#%$T7VtpjQIbVIA=@VD>sL5FhlznT zqI$G#zIFy9thb_X=(Pz?f|Q||UB`Q&0$22LQ~~a&$gf(v zy~1p`8Wb|}#;iY1`@C9+klONnK4FI`n7!_H{hFPFq8;Pbyw@lc&TYThYdObjitsi_ z@$k$pdHg6y&cB=X70r^ju>XXJ)}c&un}aw@bo6P+lvd0_X6Co729(yA{pp~1icNE4geq?#X5(SLo0G?h`VqJ-c%U}L z2>O1lX0amj=1ZqoU`w8Tjt~Dc?Z~s~q2#(lPwDgT7TrPfBKihmvv$AAk>fVDQA0Y! zhQbntSbd(^G3vhhT0KM}Mt)FgCKi6vbzb*fkPghRL;96msz>B~^LH%4Ak#M2>{sqV zZj)hEu%kkEQZ{d<^R5TNjNIBq%-#lDxS6u2b0H!G`s9TC@W7r(8k{+Qfwh*kB^h}r z(IhgM#W+yxxaHD4{L|m&x~nIk$4}u^oUV5HyCnqM=wNvr4q=&?ofU9h$la+*Wvjcy z2w8u_1eROS3g1hQ@#CiTki?GlT_zVZH{Nisn0yM=Q7)H*jjQ+Ilmc|e`o;yp*(&!j z+|LF;7p!GLh$JF*-=!;ChW%CGSYl(y-m)^#ZwTDA7X^$uf-4^(m5O8Crsp+*=2eL1 zKUs3;zV&>$tx$#g`Z+k0uMx?k;XG_1TXfLEQut89#?b5d@_drFO!;7XVk9E#s7S`=<4L8CU2FR%sBrpUI@6A|8U;=_(B-F26c z8679YQoJ63c65>OhI<+)h1yRuW{_gKmdw9Y_C@P*=2LX9W@$GO=R94dwx;LlxbO}c z!N@7QarV`~?hEU!z`YfuSm&U}S@O{J@f;xPkfvjCT8K!yOJ=R85?2qb!?>Hj%NStLuaeeqM_aFA(^DpO! zJ6!WR%Q44ov=ATlZj{5b<8!QdBL1|o7EKs^$=m(1_Zip~ojJqUS%Czp*I?W8;rWn^ z5!7TXJnDvAMackdI-~djV4+zm?yBb~o=DQps(btOj^;nhrHy3{=3xS5k*rXPK=@o1Z_;3Z@_pPR)^2sjV^D$nP4 zdcVVzM8&d>FKxr zCB7Pg9zoBV0kBTf!e@ZbqRy;jU$s5%qNUZqRdA7i(_^*GoqZkIx<=W;;n7VC{JgUc`%YfT0S}8 zjqP&p6G9UBj>rw;=&L6R(NdCOlAHnWem>#g66x0jJ>h491W!g5@-iTbR|GEKaW>(4 zsf+QMw-6`r?$m~mFaqv)HWI#?k^2$+Ivq0AjIS|!{iRzB|MC~g#T5IDA5D^9QH3Xq z3IEyZ5q=F@vV_`b=AObXo$PA~u1JLt+AU@dlorW4L(udONY30Ep5qjYd8uN()R0~$ z8v6>3qvn8VS`n(F{JS8k9Txr63}0V+Y{7+f>u}7;YB<Vmj_*6csXi#`q z_j&wp2X$BW(1vdl>V{Fytda<3{x?aJUl8(}?j(E+zFYK=ydD5AVqLH)@vy5TnD=1q z?i2eeEAE(t;DYn2mI&MJNp$-X&NPpVnY0aaeEHlI^AgngM8xWvcz0~NJXlbgj|Q&- z!kVtJgCH@ryHc8bIvM!HKGWJf8L@+ z?ahW4(Qml1lb>C-m6xKJsyxbifn-FlU4_1ieR%CC+%WCmVB zOX@CQ(u8`ln?BF`o^yVE zxw5;nlbJ~}naR#(vx?^CDgY$#Z(_7zlzas*4VQ}`h#=hTos2ArJ9xw7Vj0E%t>r4jnw}NCy^#$WoBV! zW@F_bp%Hg8b@Ft#Fm*DeeU*g+K0YYQ%Zn?h3Me_*8=E>io0^aqd6KBuYeK;MBb7|_ zgE|Bt3;-0)ICK(4&e*|dc%n+UTLhxx)!V&+B)+Tp$>2o~qj zL<8e~lLVuRwqyiV@PLUaIHZ(Sc8rPKjH~~)DpabN7jM?j}8D2rjv>+l#1DwN}$k6p!}P6Bfc_> z)cwt@f7zt~KuH-%+z|`zFP{kjz<=S6EYgfDvWVOZkAV*kt$+jq000_X4f_Wbe#s=U z301X)Cfk+&m32}~asRS|b%-`?X;uas&J2YM`*$3`%?Ln`WbO<2kCFp$WKi-EDtR`t zw!UbgWXRO=5N1g=dM0E>w({&{IgkI?&0-k`L-|=+NEu+dy{x`3T8RHZ)U}?I8Fa5W z$MOA-S?B{`h^o>vE+e`T48c@d#$?FWf+49^Pf(`pE6({<)Zf!V|2{z$=Id=~XKPC4 zWIq^E9N1saLi;btU%J0a2KQGOEi~G2l@@+_&w@k(-3X6$U*zUDGXh>vmgvFMZ;Qet zUUB7A1iY|LTtftb0*dT$4EESII`)UpuLj3 zrpRKC$TE+}QjeJ5;RzP$DWzo@^uxtRZB>W=zx?K}fl~m03x%W;g(QeV90UgbYBvDs zRl5YeEEM8S3?tL*|MYPRQvj?`4VQl=jeiFK0FZvvV2w->$YW5>ff&_P80SFZb1G{8 zza&4yE{_RTEW)e9PHH=kR;I>?{H{nHqAC2cpun?RxG+i+n6-z-Vw^SzV)=kHkRlSC z1OrwYG@uOjE0!UaJ_4t4=>rP!aUMFtq5&SsvVvJRqL%R@a-^7k+y6( zVUeo!*IFXI1f#B(l8Ho zb|MCC5%`vNFDq$WdN(U^TABuIA3YG@LzITyL>xe)27Wpa$S1PPV^PXuiYsF2Entez zC9{vQb118-$z#dSsj6vV%d4eO%CpJKW2vcNimSal{Erb&Kb&UHr3bz|OjC*5}C z7R=_VmJ(tBrdtU4>xB;s? zbS@>^@W!|3Pdug_MntofqAG=sxTy?;_wWD2C{Oyh|p@Lwaha~_2NI4p) zkkATvU=td^3C{W;ClZbo1fB|LgX2JbIKiVlw7AY7QQEQ)5a=^bP#g~xrL%$zOy4v8p{p{&FN9_pf`zXhW_blE}R zDHJ@>X*1CFYw}Q22F1w0krpM$$Wa#Ie4wjMPBH=)ENa`d_NO`16!j;_*iaT}>d5gl z;W)>1QunAB0~ojB_qQEZWUM*il_`&l!^?vRYvr*bDA<%wO~=Q zEb~gB&)@=C85Xc8yV{+35evpb3}YI~0c_){%0|2owEt8-hizQh`C2*UK!Qy4Yvs|c z;OS7Ib|*u-qP2g~+P3v7!+El-QCmf>^|e*4Fj~$hok5e}p7$%sL{&Cw>qPN{{ablt zBUqGm?KQXnEJ{{}qY1}4hT}RzyBu6#ZB@IQ;e5)nyQpH#(Trmau0tCvYIoik9Q8n< zfTstlq)%YKhkW&WXi^y#*gTPNmc2rDc$VF)q)3)Ml0p#6EE zK-PIlAdpoh*zX}<{T`p45*rTewv<2|BJk0HVC0-%nO$wkjp4_I*c3b1vk3oUz}{y& z@(;$4p*qog6rB%h#?Pev)y6a>BILkzCi%^0}Tg!fy7sr=cc(QFkI*>7WD-@W!09swXhGXf8A7T6EL-3C(=fFI5@l%T&j6j69elmFm~ zlA`{hLnum0_?HeGN3iaF0rP@!Aeq0s@UPJRe{r<0k?r47TFU=IMZst?G_Q1E-J*$t zPycH9Ke&Yd;y|GP;J`!mFI^Hy8XSTWaDz=1M}!(z4co8);T=)HU;7mX0IWWBm56MS zQ5N$uQh1iqGEo`YP?itFB*nBUh@>H;&XJ^$dHw3L{on^X8Z-b8RsplH5;GKlgn}jr zCqgak&;X8ZMNLAb*cqV1;F1A!mbU-}70ouJa7e%SazBgkI+|9Hji4prN7vLSQ=tprQYH=jl=Zr||Wi=N0c-3sJ@nk)K{#Pee>a zL`Y0bMngqFNljK$O+!UNNJ&A_MM6PAK|@(bOiV~gOI2IeP+L$@-tx5(SZ+K@#h;)d zs%W89#wVI$X=;v5%kn0SeWA$8$iQwy7SxYeBmjsJbVgC(36JBvWM&Gig(w zEUxTm(G&dX_+I2E#M9{r8%{?vyadR$$M@d3rzj~#NsTIe4+HkiYaSWc;T`*V13szv zv{gE>^Eg|#&;Gu1CKFNe#o$_^STX!zU|8<8p^fa#Yh2XIC7Yz@obcO>%eDtvzY+Qw zk05Yc`1ns-K@2$$2#y!!VDYHQtBqYm`XgXzx?db}=;SvdzZE_ZDs<{7#CG+&w0S{A z&aN@bln(}?KmCR6x}425)YcO^{M%8(@<}YIj{N(s_=#(`M&)d8KN%PNptS+~3&~4( z@d)N$_r2AeRFq?B$2T;cO`XWZ+y4;P?0JNu6!`&*Zoi6&7ozo7u>F z&z2iAjW7D@<{SHtZ+}5&*bdlj-c1~CHt?@03NUKJ5wd>?)1sgu?Gfm@^xfE|N zW_#3J=a(kmDY*5G$o`rfc;Z5O!EXAKhN!hU`b|srmTD(k)5qHz%=)aG{un4Ds;F5m zrj?J{LY{`ho~I|@=-C{OzMh?$9kbz9oVOmRuX5JVUz(TNY`oy^SBu@lv9SEaJ+0_U zhRXDMvg5)p=(aEEC6#pB@+%rCF}HU&m1HipsVCwLuKwdJ_y3;GQsM35FO*1D!2>83P7+l z=ZL&0`u;<$6xSU=7?Q0L-z-o#IjM!a`pobtV0I#IP09Yy$Mgp~jJ>&iZsZ9zOx9$E z&`Rv;F%AP(VZZ$d-~6?9QH9g?oATO-CAO?dUtwu)0KOb}b7Q7C(!eQmt4=jyOWu*w zA%?UJ9Xx6GBKHmkZ4suUFiVGotot}Wccc;0@qvA52V{+qG-+D^vLmL>?C17$jU_*^ z=NjjETkZN(FP=U0mS$C719BT+B@ zb1RBK#U$-xfu|M=^eCy%f`rzo_lzfg6JDd$Hua+-{86+kpZR_}|1yxJwtbOS zb7>-=JL2p}oJbx_iad>uSkNONT#5;`iOb1m4>p3{Hn6?g(LCj=!@l`(U-h1~3)6P0 z3CZ63sH#$(E)2(3r+(TB*2Y!$95Y7uQn-pd!jILdG#uNAmBPZ?ns5azOcwB>9A#=re%cf`Sz zm1&Y0(|~N5k4KUM5T%4Vf~kyDlS0WuDLf0p)RYxorA9L{)G zq<(`5Jg9LroJEU*B)t@&PQd@={;8p*Q{(Pn7)QXYl7{Bfoc*R#R&`_TRrgjd4s|uC zTA*XZSXJn3;OW2s`ZaH(9(}7pD}7(L`yt)J`-4NZ?ddYbCJ)9Q^2KQf(AU>8F;)6VMn1C5q_*pSR>TmDa&@9>iA_9u^CEZX51;TN^n3Ij;dRiyCz4#1a2K$ z3{|?VG#le_NH}E-n+KmIPtZdbPO9u+etVX&sPWL*FdCm-;ZpeR)-C!8p{2EmKhDe{ z%~T3?bW-94xoaUYfn@V_Sf|SrWAXG zfYZv=l$S>3)Dib?G!!&Bl&ftvkyn^xF7IPGQG1-RXu#N;=w z?aCfzeD@D)l|Qhc`;;DdHB$DU!JL4caJ zAM5ZT%lB|eOKCm3?^j}lj@CwWYEAX*t-LMX49PKpsNg>-PB;^DjXel84-B)$xcdEI zLC61%s$_1Q5TtkBdDv|8+n=EbS$y7Nnh?%Nn{6w~TAQD2K6yz`V^OQfGjVE!s`k@5 z{pXTIBrPMa=Ht%B<9gcD@5148@{vIYUod-dXQoX3QjTg6_^+t6ZoWDF${derO3(?( z%2_R67q}Toy%}mAiT>2?K8d>kG>oTw#dwAQcqqS^)|pF|CU>xpVb&#R$YZ7|LnMRk z)nB%;;myYCo45;UeyN6i_s5OuO1%xW*l(wiCU6atkG}cv-3HXcIH$hF$WgVeHGRW>|}tA=SEX)k-J(;EYLO%2m6JKBgD@El|}cN))b)~mT#-ph5=Nd+gcBxXsn z(nzqe9A%vizv$p5@Cn|jHwO5ntnYHoLwXpyQihBR%V zD6d$kaLB-VTcgFMm2!S!p?je)si8=DeL}@?1FRi^l#XN9Biu6)H z8nEk2iJ36!kU9s+9lKa9(0WyFG~SjrZWQ_KX46PytSafdjA~H<>&;0&D7Gev;FUg@ zB$szfC>k*9&^t3y7sRkbCOn9*_-n)D4Z z+~@^=z#XlO?Y)Gij~#}oq=ojp-O}xLz-nTP*d?pWj|ilNY$O#oKC1B6y1}J}ktN1( zdVax{;4&&T!*~-mWSwmSo+W(eg>+VxeG+y^%KhbyKU@(FMtF>gY$LW2>=vnh(eL?YC*X4sMY}V9l zse02)!z|eN=n<4y5t6fIEf#30L%RM<`(as#zRk#oEhr!lJ%qu{A_NV@5u=TiH!9SO z!`>Sir8(EmPI|H>>m9}T^IaU}`RQHz;>cai!DS}1#Vnr&WK%zerQ2GW0S81X-=iQe zcK8z5vk!mp?4E_$8t;^_+)#DJR%2gQR9HHG9Oj?v@Zl2ANN4Wwt!!Gz@-9noW>OZL ztF2woi7-_tR;G1(wl)mU5k!Qio4utj5M|j5$>3w=6D?F5hcaf*0UdbK|Yj>Ov&B_-TRe3$xXUaFS+WuDevj7<`QbY zLB`aqH$$7rNz_8H+eIbTlm@tW>gqJwkb?_!o7vM3#TSuAtbIoHQ#u#P&8m za1=KsP;c^GMA?vISIK^SU_~Am?nusMA!KZ%)Q|THY>jS07s_U;#qovIn)Bh4Mlue} zdx$lYYvzM^qiNr#r0sPGv!}lie4r3yyB5wAOG-tk5wD(%rm1{SO(j1>#N-XdwB6pU z={R!Y^(mSS$Gl&~Hg9f;IT4T8b_pKo#_MB_U;q3eqxxfHFcvE0t1g zjxw4vtVVMaFZ=4r=;iP;p;7F-m0V`Fle*kC);;WIekp^2?FqY23o(7Qbj3zOfW5=S zWb*0v)F(M;!7BR3j+nHD9_y4M4Ci{@DD1Y5IWh?oJ3#VTXCLL%d+(I^%gkx%giPF|P%SC<11Pi3y122Yo3 z&Anz#P!S9TzT}JzsEX`51gK$+&i5>}ztKJ~^QU^Ss6SdTXtU?D#Bv-r`pb~26A-Wb z8XX~ex1 z1p}jV7ZBjha_C*t(1EFau3+&)5%Pz_atEe*vq|N^@IXESwv`Nc-DGG~J1_xecc1~1 zQF!b44*%Z##&tQd+GfOI&u9h9QwKGy|J!c!00-%WZV?gXLS;+fprRQ1TUSBRO|g2P zKR@9HR1TT(6P$~=#+O5)1Wkjweg=tOsLh7eEDRL&9)w-Rm|sUzwyS%~T+ZHGFo5vO zuWrj5c+M!yo1Jb{cGUG9lnjh;v+F|r6f3Y*KgckaF5pcOT_=b2^|4)?Z-;J**dqV@ z_fxNM?*A-%K!HKl@o`fSAt5Ct4HbCRgNB-hl9+~;l9qy!hK7QOijtawn3|S`h=Q7m zkd%m+^z}+j+tElsOiW5hL(xn`On^^FM?*YNZuKXapBkTSLCQ1+|K?;rSBD^dr%2| zXu7q%^qB{^oV{}V4W&sJ5VItJoh?(-EyVL}uqZTGAQY1+*PS2waYXW?X)~ zAPED1c8Coa)5Y)nDiIrrqGEKans>1uXT?&zP=Rml0UB+09F9eZ`P8d+Iy-+ta^2ir zfyYU*^vef(XW*0Um9^5D${QyH539Y+k;KYPG)yFwb@gbKlI{F)Akhh#mbu9Vdsbz+QKE_Dwp|HAtrybFbG`(ylkF$C7a{R#3> zE;3`ybCkf{#KEzf@2nD<&PmR$66FO0Vyv|E2N~dUT5RYi5fIV|@TDFf#$v@Fs#m|& zSt(bcrB&CafjF8JOYHXr7$pOAW*5y6*)*z7!+6(zU78Iae@56l>G(rkackUdj=epa zRf=>9RVWA{u{2s0S14x{VZL!KpkM4ewy;Zh9Deqd`6_AeI0hP8t+LA}SD{c0rcM4# z*vIkIxwCVs@cm@B?;E^iZHVmdGQ2SC)k#w|*d=d(OaOR1(&DT%G%G$ndC{lvnSi6! z>GMCnnne};=&D~#A^S{E?X(yJ7ehBM5h+qy+cx9}j_0Tb zrxUD)&(Gh^<8F!>pFDX-Kp#(2p|_{|p2O~-C^&&FfpGQ09v@HHvDU-R!%5YPmS1(I zuAMauE1OQF5TlcYewOZ9uDx}Yh0XHMbpmt`CAMS4#rMS0E%Nn|4H0rGVBOLr{=AuZ z1Mn~%IIJ{W^K}Mi5NtT6q=+vCr$8Ug3%mb@!tsXHCDs^-!d25adz(|RUi*fTYYn^Z`u@^b8F7m9Yq^q2ev1X?#%dsL;N1} zoXzpLFF|uYNq!Mw!L2fW^n?>Zr)H6A0JKW9deALuz`0~ksxg+`^L+4rXl$QistaRZ zFjRedWqqv8H-Q=8Xjaa-BT*=z7WZSGo2d)up<;!pq%1QvqNQ@fH`ui5a&z3oNr>%9 zG~X)#ItOaHJ=68>qZ(%#F5>8!3%8ecqZ{P*tg!t9fKd)J$rjvJknzCU5_fJe>B z)<-CuM}>gyv;+5YBrZ#*CQZlk5$*dpQU2$GHgTgL2$!mB9cK_p#69t*DCscAol9LC zIT}i1+E;DoAc-9k{JG=v%fe;EZG~etyBBu6aB2Hef`s|4D!+CE)Z%VM{j!7o@n>*gmcjg!(xxf?D(6&M`e3u< z28+?B+E`*>9^Yx7O)`b#Y%Q(i#qLK26s=I&s?VU z$)*kt#MC7M77PS<*<~sFsudVr`(wf%?t>ROxx;+h=zANw7Yb6FKu`r|nhxYQf15WuZ%sPNl* z@I2^qWOHvQ%v?)7RYq5h%o&NW6GZTT6i>n9MJk9)Um)CmtHi;db+pVDVU8^s6OwrK zk+))T@>OFR9!bt0So+OA|qhUV}RIhuUTI~TV@t9tHnB&4w|v~>T%=FfMu zLDI*pi)3}{#*o=h^W1jO0D&6nDEgHUvam4kfZIhxY)g}KY7Kc?>rtOF&9)qCmN)SI z4icxJDwyoM@|8O6GhabKneacs^F?%2^b%XC)IxJOqe*vF?uxoE9%qhG(sX0&Vf!R~Fl z=9m(bht?O&XQqw=kY>2wDfGT{V+Uk$M0;UIQzPtn#}Rlhi1!!htkNOPka<2qSa?9V zWhW;^2cdB$9duzKu+=i>*LdUM16T{=mpKIhTH!n4m-=aYSj!J|8>N}({&L;N=oCw> zS>#s+-I&6FDYU}Ays|>3HeU5*UA_$`#Zrh*pw>%cVj(O91=269j;@l4PI{e5zOx-& z09sANaWxwC<2wYOvXXfv4Ql6a+Rem%F7_^$(`VTd6Juj)t4}X40{Q@!ayzrXPz-Kq zk|RagY1L0|*{xfO^^Q(DoVu>N2O*ykN5WgT0xfI;otdpW)Gud54u>M=3Pr0|cOVF!V#UV&0t(F+>W>T4FnzFVgZ~`@?8Yga(BA3wb6pdsp1_xD z7=k6MXJ&uk(Ebg>pSgO3B@$51S_2P15g0OPrjc9 zI+f)lv89<^Ne9slf|&7N0g8on?VFoiOa^jDZt0i^3%t}C6IvR{3DtIvt3kXE#mj1cLKP+j z?1Os6xZ+Xc*Pt7TGIpOp?5HFHuiD`)=Ey1kXGCeSM#&t|vD{6~mda zNZ1mhO)f=sGY}~5IrpKFti;_?D2{X}&{MTQnuAI7G z%5yUma5|^XYXlx;jKcBXBQ|WKZCsgQ?iKiJ3?JE4`rDDatB zLY~jL+fErpeHy@HVmc$cHN!eYpv zf0lH5vg~&%x^#G`+Pe$*o=54mzx94uYHBL~s1`$wweLD_(`=sF@pJ5b>ftqE-6n!P zJ>tVz%DqkN$d{iT@M33?yI6?xo8@lyl)70zOZU5F=UmR6BO*NfqvA_Ba%_xF)+MZ_ zQgEZ1U(ivL9*IAu-8&mGqFujnY@M&lf7)-5O#A)9er_`C{}cMXo`AWB9D|Ogt@{In zl0NoO$7!7(C86>iw_Bt0Tykdfg9fhkpuEvC1%)26uJcQNEj!u$F3ZVC<(7SS=ZNS1 z)&co(QB8gb=@cvE)2>dgwoV5yr%Ga{hj-Ll0MWUxho{ob}tvwzLewQX%H4k&~t-Pu0EvKBk>N zYX29hM@p5F%W|jl5|kxMX15Z>jc4{yj!~1@X>2xCs_GIQ4N{vb-EWdanXG@V+kJaN z_ijGNc6ibW{&70Z#1}}vsXBDCWzWF)ecnmy8S}=0q=a_eU}M-tY`p_Qe?NhQVLv7pFAL$HFrYfm*o->M{ZRizOR^E+pDEv{sr#8E8;i={! zj?wiI6th2HuRJD2=!a;QlZrMnh$7y^rLGo#@T2HSI6vb~(%aQvTrKxmy?5EC5a|o& z38<=Lhl{zPt4Co#r5=Jwf#>j|@w&${xKS54NdZ{jN7XM5S(!4CbFPTOV_g@iFAw=;|s??o}7K;7-2>V0!+<7KEbnEs)7IexF8-iulB@K?cd-1Qi=HVeY zxVwVbITG@}vf&bRxPutW^(r;QtIq`|_I#1An9HFUD7&d^3Xg75uqU(rv%CTEcdH2S zx~t=L&j&eeCJi|ecx8i#lz@(gikzZ7x1y@Nq@t{-qAIH>EiF4MEhjxSF9~afbFZ%t z3ay9yORKi>xQj@j4qsbWzDk;2;+qHndgd$dl#7rP6WVQ&Bqd1qiC}-;h-O+2P5U84 z3b<57efWS17~1z>&OsTGh+?5PWK5oS*&0m^i_;QAt1w;n|5|B>gO_T3F}Sfb-MoA1 ztG<^S54!h3fL+3(3DI6&KRj)VSw&9BHe@TC0oud4U%u)ZW5{^b-nyM9`#H zzLrx{m5c68J=DGp{~>u1L+cJ~D+yi5+;y>Gl6+x0qi5{UM^%GGF5h*f?Uusao;E(w zIfk;(fM|Odwb`fG3~m+@G}W~+uxyf)93d8Oe2L(Bd@*MMZ-kxm6>n-b$ZY>zkwq}l z>1Tj)X|1i%U}7L3DbP{OeP+aY|EtjZ6u{ajV%-u5*v^9R*zB>Ii!5K2E64pY^MZZ7 zJR;Xe?{r%#OGyO7u*Rlt+WM@F>s1wImR3I~iH z(Mlsxp=x~l_$^$1Snjwm;-2%!?(tao0`uj`_33#crD4tOo-@fxQFOCoYA!d-#z1X3 zL&mWz@}_!}msRd-x9KddR;r0P#m|Q2Yqvd@>_+thit|8X1U3ux+<{aSG}#%3wjX)WrELK&Ps>; zPcKi@=`76P5P;`>8>caj1ZvHK0h1Y)g*{AHDQ_tRV|I)nL(xiS0s?oJ6)$!-Rll17 zeEU)h?}ljea)BbB_s1p_)F&|~Lw?OubA}1OqfW7^YSSB5)NKmdo|A8%{oJCJn5EA? zep%Q+mAhC`r@wN&^7!JgLbGf#-G25C2D*hwx2zF++q5-yI6i6)o4SFMU8j~YiNqSj zZboO9PbQx6zNUi*f{N%q>q%QTNkt!8iLax!KtEeRqIsPBMi`2fjS_)X$rEqhbBF8r zC3ZuuenC7&&>1OEgQ$QhMviRc%v0BfE62{ESn1Q~FKG!eWeY6yxBf{S{a5{*bF3~& zGq_k`rH%c{;@Qm>4O7h8@=?m2PF1X|`oz|2H0@nvw|96N4GcB{(`pyI2O}Hvx%EkG zPVLBf^N8QG^bPxEZ0VHV=w-6Hn@NXXoUx;!fd9t1(?aLDK`0c(fA8Z=CGoS^{6Ug@ zr{rAgU7_mkfKs8G03tW--NEJ}oCz5iiDBIb!n)jFOUvDKu&eHayJ=5s$2RXyJ~2AP9r zdy!DCPXfvD#eB3H1$udT6$)^jcEL`@sgN?LYh#+Zb@cnC>t`^&9<;vc5nUR3)@RcD(a2E5WPN9qEy*R1F>!#o1o2e zgc)dMsAyri5n}1M_2C-|!M1ahu09;z+Lp^AR}bR*t~Pv`5PS2*HrV|3qr&07Ps(D? zI&L9O_`ZAv)6iJd82Y^OTZVulfHxajBB;_Sw#Z5L0nH+=w(v6w;{I-eGJpI3Q@;2$9BO6a%AMU)*yefNV_!zGByq#w$ejfnRRM00VWwy zfllxw1pAI&a)ASdyW{4Bzh;$d_1;O~$t^kQ&o!oZV~a0~waO2tENH3h0Ec5YNK4Gr z2Y4Fpw#*nov?3ngn;k1SwX;dhlW|%TncUTU-@4L8pe#h#7*%>mHfXJf3~fvNyrFR? zx32u+FKICrcWjT$UYpB|M9g6jf5cS85y74P)Vm6*Xf(3rRa24z{CJPA%phv8f=A_! zhjv|Zq~i1>&AHOi>To_*T`kFsJ?L~g^uAOIT<<%DS-xWz^fw>Lv9eZccxG7_snds|Jo}TMINBTkWzrW(V0+x#P9z=o zmv`7`Hn;nA%#7QQ)md><@`j$k4F+%gW^#<{Jp$!rA6xPGtz<>V=$n_;v*^pV?;`L3 zCh$xib7hw#p>!|lyPnm(*pOq1;Nr-0FbAM!?>hGFsf-ZiYp}0+S07-!g1y?ow!fQ+r0g(H8$^{>`o%F;a)Z7kdD{w|9x36A z0-Lx1t0iPh!v+NM^HRl*84L{+I93rv!r$+U%%Uby1ys1^eO?s5#G_2x~@S!$+i}AyLInM{sDg6B4#~R zt#G!MB()iAX_pmdO5=*fvgrM|vqMvQb=HSs>cRaXs8kl7P9vXhGL&6wN$rI#1v=#? z%6c5(x!8I{D2FV={G~Bpw3U~RmW4$ac__$^zGgMo8sA1Ee#9twCm($E{%hRJOyRQ! zOKSyB<3@oK^iP_YUv>7HQ%vQuMH%p}OV2otn$T^0L0fJOf^Qbq6x!}iX;gscyNZ!! z${KuS+nJ2zEj_B@nskP|A$Y)K0E_$sbHK#q_JK)M-?35z>U8{Wq4`yjLvVI(`Cwmy z$O_>ba*PUw0l#zpChB))i#f|Ry-QY3DeNnu5{k?|sKkQaVKbk2TxDu!*y)zUF3aar zLs#j4{I+w=sTIZeJU95zt6o?|Xewn$_t>A4SfzAqN1wK4nAz7MQymeL90P;U_2cq5 zl`;wuKYy<(;56aTv02kBVZ#__RUw!sHqsQ9w)_~tp`@HPTsz8?U zgH>aTW!LYD57KpnO9xAzId7d^%}k*-ch0{n%9gq^etmaH_Qf(eVZ54h8})2G!M0AR zW^f4-b1@5A%0rpF)I8lm&{`pepFbEeKe+a40w+S90M z$0=}fQh;D<$B9r}c31=VI-AwNin95%Ei<$PWZZrh1u2fwvPmC=eg z7D5QNJ}z&>WoKq$=6F~Se5Mur_!-_7;Y|SV%#T_$BnLLZcJG_|nJR^hs%eU=mr~_E zkJduQ&|pRLOjbK_0p)tzJl41NQyQc97hDkio8fxwYv|0D&s{K9lI&P@2$eXR`peE0F>k%7T16=K1-llAqzai0wq^!1|9w*uJMv zov7_BsSv`p^^xiE-c)%}VR)XGONDa0v2^9V9Q*m~Vc>6a$x9eDqdb?+PxTUGb`?#V zH#=D;!^2tRPST+Z;}4-c;?jCQO|MfU=|6nQt4aOvXq%+|JRm*)U|Yq#6f()@eQE}Y z_}ud7|9&%AtBsA;t`xVKXH(J<6EdC(Hky(YlBR4no{L82I^|aNswdGPADorRZ=++R#++-qh zZ$1rF{*O;s)LeN9vfa5Wbu=>$T8WASn^N` z^dc{KxX~!WMNxF&>{9+br^rMh@65vOM!kZNOx5cu#t3MG2P3bh{B&GbaD~ak){w2~sbI%f3&64@p>pLN^ zFhZ&O?m@7Ma~=IX;(W;1trQix?G-ymt#=2qe^m@E?InI}jd$}W@|t(Cwi58kG%%kK z{J>hPT0r@Jgu|^wZ+Cc=Nk8PNWfYpzhaCt(a)BG26KpcE@Ho+I-Z14cHRid2M_fDK zciH#rqEqPpWIji4>ti~#eI))W3C31rsix)SkK~jKBtL1}PjJbn{RP#V)nO*17)%Gt zsZEl+U&D4ecSmDadp~4$Es2E3>qm369_+9?gB;I_aQk3eVkF@(@P=D$_SjuNcvUnvX?A6qf@=3Eg$^_nD#W;Cxf zz=AAzn`gId6S?WXz9vF*RPP)2VZrPxm7x>NtI!->lC7F7-fvLhg6yxu`|RX zqs+)=Fo1SUk1~_Hl5%7z5nW^=h1V&Z9Y0u*a4~@;&#Klhw?wJDu2CD-xgGF()mut@ z#o|;=9%si|WGZGMRKq-w#%!BehJ*CeLB2f+W$K+c{r-YqnaX~hTCJh7WumxXm;s6h z{PFTb0w=Y6mRX4X5>e79h03xaW507S(gh3-O0sy6hhj=koWg;2TAvoD*!Y7W=H8eL zJL$Qt$=5#>4~6Ri2S8e$vnZ8fx*IA8+uXZYw5-yiO z2iyI%)6zNw-FFxuus3r z5B}pI#eKl`J8ZGm^5Ju%QN*R~XAYG4pFB&eTxhe+EmZeG9xSqt!G84IOZLJ9GH4V) zSM#HP?%Tjj99-7e7g;=J z4F|E$y~x)Ki8W72rtCJ6ieL3v7sncB>xTHAgH{;HSvOjPyiVQ~)y+i6&^p>@)!Fkx z+j(r_ZtOSugO2mKdj0#HUF6cbWukGG>qa)obOYmB#^^j;gH}H{2)@Q2A&@YDVDqDp zIYcuTa*h()x{3MECE+?Yr~o;X9k2r{_*uGQ6p&VK>zY`zmQrDqie6Q637#rhI>#Gi zpaySdWcu&$z+G%uJ1c$?p0)oJwYp7ouSiO_3>zaZWE|d8$jm*h6tS2$9XS*%bi@;& z={FyoRy^T3vT1fM8W~`4`1<^HvmBHK;${C7C*04A*36azE=zJQ` zA#%y7!uEcY1tFUiy%)TpoCQZo#D62Qzw*U&?;X4mYU|e@RJ$`}J?~&Db)qdLJ@GgvOou(>0fun*ZRCi9yeaVx8 zJM2@cMC%MRskl<({2C!KP91VD6~2ArUU8L2+NmTMjP=G#N64KqJG)Q;zE#CL@ zyzl$hH@~^AJ=dw3Idjg;nE?%JYi$4-__uI4a40;0C#JJGNYqFk&aP&*@CO7^K;y#? z00aml{r&xhr12p6-|`^&K-u9xtisd1|6k=T%0FsY5mY_fS2mm)uGX{;wr0A2mD4KG z@^bTVbMx^E&@#(;Sh{+7+E}_;vOMS_Lp-t?YHD)oI^vqH&gPbIxTOWHnHR0LvmO%K zKU(Q!WOb1MDF6V&$ynuc;3Pr#6f&CRDKv6RgU1Sp!)XvTv{;q@j8%YqV0CVKKRqmhTfjBau zDS=7?7ZgF((yvMWX#*^+7!!yt{gW(6UK-H@bdhgFL4DHs6hW*am^4AO{1(JO3;=xo z${hZc85^IX5*zpl0Qgc`MBOf+o{ylO3J?zFBYiZ)>;RYuKE?2C#pqSVSg?L9r#75%46OyCdK~Mh+lT#`}s@ zBC?dW@>w4*MY%$RDowG*D>gN}USuN;KG?IK#xsb3zNYEprXct>(mFotWB&s&Rd@}j zus+~i2De_OJ?TO~j3r(%DN!{D2(836Iz^=d0V&pdK~q&8aPS9Je_z|3Tc9+;htK@x z`oz@XP6VXUwY8Xr|6i8Be1DCM7_St5NR;V33+CvC4XykWGYZ}<>GMr)EQ-K1neCBH zo9uW|Oh|$YRGH}?gChe{m~_EJP{see%tGlx$Xt6_@;<*)W-ZA78p+$oUe*8iCAw2w zg(rr~(}6F`R?-30b`+S@v)>chNC~XgHLx$Kfhx1)#6z+F+K(1tdl__cix{m3&1Ru2 zd19^Cpyil=k+z@_OxN*wqN8E0`&^Rc+_~@4|Efk9e}_l_ z0HU!BEV1+~u`9ySU?nM=pR9ls`a?v9FEdB42*-kzVj;G%)?SJE$thdO8LWkWSpfV8 zmWL9a`#QYfb$I^k=*`ero8-j&f)uvi+?|HfKmWgq^Vh+_0N@5za0M$s!E#Up@YlKl zxDVC^{on!1xw7|-^8Yi&5khfCNJ#pUl~xr_@E(v#0u*-=%Hf^O%3?hVsbbb|p#& z#iJpNh6-pQ;)>@dPY1|#P-z=1Hz>kNmD44nP>?mQrCgC~Af}vCt7E^ChWPAd&M{Ca zqRP>+FRVZa0T_q}=gV*mF_IJ!0KCP8VzUItn+>vT#6WvR)2U-sIfze|jkNedrS-J9Q6*-Cf3zVX9vNnS3poIv3HbF2q!!1oMg&nKl+z$Gnj(~& zNZ=pf7tqpysS&A7=)m+z)L@AaH9j>pBA7Oz9E=#Iou~$@u^i%eoY8?TkiaHtEe+3n zpC`I6@Ttu_d?Kjsh)<(h$AzT-s)9}Fz~%%IQ~@nFBQ2PvK0>pHk^U6y`J^vG^MtnA z3^5Fr2%DL(geAJ0xWN{5jb^4``jftMlffpFzU}#i4NkqKrA3v+*Oi>t4ZDBhmBv&b zIyCW23#RtG#!=hd(U4GXiWoMLD5vd?(Bf<2ZaFjcY{Xp-mSFkNWP+uUr{(iHgoq=| z!*|Ke$SBF(NYBdfJb29A-6+9w>A9u;xusF}r2Epj>R7GX)P(yO%zbIneJ$B>?gAm^ z4oeI+LGVol|MqfPAkEN%xi7>UnIObSolJygTb!PjIhxN&RF*N|Dzucd8_fwew5WY@ zU)ZFS{Vf#2KUVFC(6``bWRm2*VDqOzQwL`B+;Zj|_WaBj(TU$@zDs1VsdI$MLnac_ zP0xLE_HYtlwZVuUY7;4~9GLd2sArLfbz?@T~sT@&|Lt$tyARj6HGc7JwgefQfFQH$AH9Ziqgd!F? z19p~9JrO2IV6-v@T~4gBDkO(YmbD@w-V8yQHgKr#`~+vt>5Nr&faK^Is*2Q-!J{7< zXZqWCP7M@lp8$sq(xS+;BTebe7SM_N6@V(~1VZ_KgHI*YvY77h`Mc)70cz6v$m3_q- zf`Cw^qAXBLW*;qZmSRwZAlTbgtf#>DdDf@3?FH({>=A7kAXKeSnj^9v6gYY*ASiZDb}ZEXOFR^6 zSAvLp`#9#w2UxE6Lo@(*KW<1z?j-QS2BO;6HF9s2Pj(z`N+}#)c z^1$4UjLx5F2_PI8;o#y3DFjCU%y&%ZFQzuwgdg@Cfl0Jn(ldJCsdYCb)17$0I2sCt z7*4q_oClkVh}Jp%Y1qGRKNRZ*fCE$v;4?C%u7WTN1rGb)ULg`U#N0|N(gorpw$dDY zs4`-0BzuKOOSr$_5>ZqV0HFw9#r%laBBSCT_Q?k*C!XNHx!M0@Y5xa811>a#feXp$ z&ny+fQeWuUkOB}&+sJZ0x#Egqu?R$ppnr*vM_9@z8RBX~DHBV-XcsPbP~%m--ezc`kM%=Ryp1@d1gCkS7e`GF5%TYMSB>t8GX2N(Na z92EK=9Ac{e<%@?ZAyQC~Fv3;Iq?yQJB&Jzdq|^a_{Z|SAh&pt&!_uYud8`ZQFnRI| zWRzJ#cw~ENb6K>p>4NFt;dIDfI(1b#5gR)`Du9VF0k@PUHwu7@hcAI4%_Q}z8j;<~ zScE9@v!lMpNC2Mj5CdRF=2c{=;7+;OPBb_2U+*~gMDbW@ z|3Xdw3dMLhNB}PZ;4uJnqv1ap0m+ASp)0)a#!y6L!-(nMdaz;=`He0k8d46%e5cO;4>!{ZdLx#ll#|2xfxN zFtI=&)HF2o)Kshx7B(hY5G{y~ijk42t{}e(L=9nLtSTt1p`Z#HoWewlE{{f`4VYu+ z+oHH**xSAkS}u+Dm!|+IYJH5<7l)}1f>M^(Pu+zGH<8B~<3aSuQUxVeA-0QU9AR}` ze@Y!21>M#S=55q`eoqb7ht=w4Xca}-)%bw&>f~z08L-9h!XKMtMbAHR$w0{*IOk&= z{O$LKm5_ML{(XP=!Mw|#3z>x#h2+RBMPj@!Hk7F)IEFlpWvFYWifo$=NCz`OM(xe% zC%`3eQ&5|7(Q6M^;R6Mo5Jf;FIk6=jnG~N0sLPjUR6%jpp)@H}d^e#~mCJe=_Us9^ z)91)HTyL`4Uw9jMX!0qf{M7cVFUt&))|Szna4C0DW#WW_wa(S{({C7vSGb}HrQbWw zw%An!4;^nmNub1OVK&iKEc5i+%u$nr$&-3bW0M=ry zPYIJ-b8`6?j|+(pXq+*pjEc0AjLK%HC{F!TH?+Tl#|GJo?LQ~l$Br>3lzvm*bq~DOi$qt7uK{n^scpHB!Y1HEe6ELnz zi)I`4i=iqSKmQhGM!7n;61rnc&&G?q=Ox~xcwJq)dVlK+FLS1Rf41<&_q@{Jv@aLu zYAZ!+xSsV=-dD9QN!WT<-y3Ua?!f88qT>%S``;V5CiNz9Pj9c~=#P$AFfv_hqf>>) z#tpdO{ZN@ohWA4LTMUOpq+#&&brE|RxaE>cJ$_l(NL>0)7)lZIX^?r=W&LN+Sdla1 zj|qO4rO-SduEWaZ8jrjIQVH7tq&DP?x+V_u_K%ND@`>w`xRLD?2y9PO@nz^VJ6-9m z9UimH6eT}Tjau@VrBy1i=cBXqy}@ni`;@8@#gG@#K!`R=rqK1%!5 z&Hdi}1o{^YNs>mV=kP(Bh~)hRIWaDaN0_FD>5*>8Jt zYt^1v@6G%hCY=AgZmIrWCmF?jA=!Z}QRmA4&KFhCt(y*ome#{uCPWkS z0#wQ7CD=N89K)_GrhY}Sy%D*LUkEbB;8<$W)D0oPK87K{@vRZ0q8a&Kv$QuFI9VXQvQ!Q0HRx zD@yV-`ry~9rUc8Wzd20N)Y@?kbG&zR3b$tlJZdd`v5cf_HSFzv82MlIo^PxPtNSn2 zjgy~2tH7vxCvYQG$#wPIu>CTPX*7(IGnFNFqy8bvaC@2<@~JUg??j@?wF4*PnQWh*f0$!kwd`#diTo9?*7U0i= zAJ`8Z&60^m9}6_COEftX>tMK&74Vb!*!91k6P$VVBQ0IL6Y7B1INr&gj{&S|()5qN z_Y|X(W=J2|(`VhwpgZ22&>H@6S4NFxU$EFTOhkC$yG{&<^w~gU$2VLYpK@_YewTcGky*nmi}fs9(S_(N(Fg#e^rrmBlx}K^dQh%Ijk=fDDI!(V5?VS zhz5H6INxXU1$jH9y7#S6p01ka+{2IazxCU3uIO!X`N{{Vx#GQK_8pS6fSi2krsP>%>w^>w}OnCv;@sQ);axHVw^J;a=`hA z$JYK9w|cEST^!QwP3$$CfBJHzu-g26P-%qNm~m`1tKV>9N;s8p;vl<>Vd+~abR+i< z^USMUBeBaNv)!b8bJA&V5oNW!mQTy4_m3e1iK;Sl^TZiEULF2%p|-n^6BAbVeof_U zd!+7u4rm2=qj}mLYOytOasQk~p4a49cnz#^wOuDswSqy&>UUZGeL<(8js)Oaq@FYt875W@N`o0J&?$Ulo8|JP@w~!9iiw)>8*V)d0Ct! zVfr&v{gd?3KI)FT(fl2fq9=fz+bd8?-ur5w_dL}L%=q>0JnODGJx6SV+VS8(UjbMh z{^V$m9BV)_0Qf3Vfl*F8e&ZP$hyMybKnCoC_N`QgvEir$8t+0DD#d^)bJ zzUbXGQKw2D&^0u8y6kzN!GWH_=xO~kn{P<{uJEK@{<$}yXz%Z~?A>_v_;;nVTiguN zd_Td@WojUv;MI_}Y`QHB1LF5=mor%WaD9Wq&l0Uk^~I_m5r9;L!Oi($aNTm%r)X)E zZA;ykyWp;h4ynICc6bisr5=;!l0qq`H2WWa;|(6PZ!32W$ep5v4X2a9xT^A?zJFRH z`m=Sf45v4Zw`j*=2JN1cB3)y&%)oqqe8%pX{RebR*>^7>O%8(-+a&v72MzYXCTrxI z-julp$pSfAN;j&-DTYCau=RFkRFtT**b1@npS$lR>BRPpGn;|nCp(G`@cGP^7iKfp z{dMiQPV0@=wM1Ob-%DcYzHEoSB>(Cx$;Gp(2y-O3)e?+1Y^XMMZg6pt^|ITs>ksUP zzc$-NmS02C=q@r)Wg|fu@26{i<$2yG@IxNOPn0he?nnsdFI%b=JP=zs(iJRQfjH*) zI4Ej!O#tJA7s+R5`|-MZcta8WseVt0JcX9NCcS2qUn-!ZnY|KP%3dvmBG0Q+a&%Kk z9Z(&7Gvf{|G2gA5d>udXD`tLjr=#dt59>xf{o_I=($B3WUeH$N!~)~5G5ZdGF7@nO z0utOI8xuD_E#NKbFWOPd$gH2n#P>Evr3L5`HU_ZabflX>T5JBa+TpghR%#g;oTGM* zpAKj~2OVwP)PQ%?2MX9J(eMYwe}%?qvn9)!DSD2+G0>PWLi?c0Tlqm^N8Ob&0$J)c z<*T+&o)0wbfexjIYf&xJULShYHfWs}XZMTU)?YU3LzH!3G#?Ja$~Vo9dB2Y%n&j`o5t2`!>zQrSh z!1nRpUf&ls*E@xddQ2_T_DfufK6>vunZV7J(|rr;`-Ds1XJ)PdLV<2YZ-RI#?7~Sz z(9NKf8`GS!76e5MB1G6;;1@?7OvleiY~0a)BoqETA}e|A4*w{zxb45nspo9@+)m57 z@5{I-94X`5iLdQ^oNPx51^wLMP;In`P<2090XY1n#0P$#M9QgVRq+-UVPAS}$`6pP z9CmOmNrb#f6cFaN|04dh3eJQeYHHhNK#kz+OIsZ z*esFR#9Ca_Ih4OdO;%A(qOn zgSyWZd|z^hWw{K{ao+K?sDXvB?!K}A5xrDB3lEWr+l9bYe@?({$P@Wx$fU9GL&$3< zPyJeZO+M5m3E7j4cTxMTN7D(ilzqkifae&aIneVRU#@q%d(+PEI7%1yKq&tj<$X#O zSrT%IIi$0Ai?W2Tk5}yWB>Y>Z@WRQSY9vH-XaCC^BA5|BrWj}@1Gme=`={4C`jc*X zAK5?dYEM&2-Q!vvqiNs9qJ|0>GAS7v3rg#C3@nx{0cUlQHH=fpBT}WwJNb7-c~=)9 zd1c?YJU{SnLCxs&QZ|x*NdB?%z5aE7Kjp`*+wz8Z!`@cJsm$~|(}^`Wd(PHZIjC{f zprLYQ{251v?g#q1_4V>}OSX~LoU@8tP(u|wYxrnVvG6Dh(mJ1 zED=qU$N%KiN0Q6gUh$c^SXF%nr(;F698`(5?t2~cbJp;Q%|3{AA{`6SaDfgkI6~ABQ#@L%eAUG2j4`ZRfPPKD%Ab(LXEDm zltx3h=C!r8hX)uPv5J$PQ3tf!1!TkfpJee1T0Nd$fkE@WT@FMRKP!#0)u|~$9`7$u z6+cIU+DR?sxb(fqNt{Lr_oH1g;ewJY3vN5#?FM%Qs*3_d&yPSY8vZHGigWHF$Iq8U zj)DEPoW!JqVtu}^a_@}|6kMv_qRmbPFmzX0k?$Sa%6wN9RX(iZt`O zI)g8JS=(~FjpW?&W#zCs{)DrgPF*p!*gW1)?C^wZ=y}j)QsjVksv0{H(1O)GIm(|_ zwe1*W$7pD6oS@W=o|??a0_D-H*-1<0o6O=kwsWXY!F%G?onro_e5+F+J*_`wrkn26 z;X2#AI`j{Xj%nq2=tR-@Wknl<=d9{uO4J+WlfsmzuygoHTy+kLuE@nz3r7^}qT{BJ z@BRvc*fz0;xHfVZrbs*SOLGL|qqaHBn{1Ho>^@Bzmy)Rb5JDoA>>(btx}`X>hvWF+ zvISQX6J%@^`$i92#L2BPQm$Flpn0S6@@Z?Dac89a8ZApVUhYlVaK1rAw%iBChURaZ zsVNQ45uB)IFj&zd=?S+_o}-}cVF$)Dq}YL?9B|`vI%rQktHGp0!Kh-c#7D}^+S3J5 z5NpoG9#IQw0O)X6Jw%;N7S^h+eAZ# z2dg}a?dE$*#a(9qsNqX&uG#58Ii>Ds-SaY=rOI8!xJh{t-qy=gf!QD|%w?1yDjEt~2 zGq|XNih_!UiXO~BMa9Gbp`rjo7?{8f6*ZulNMG+(7i`S&*HiMx5$L!1cag(+mQ$)2 zaBcvkKgPv{o2|eA(T$xmbU$@RLwl?JSJ!2gGeMarz$Adc-o|N8r4wVf+oUQKN9XUmMHaD6X zU!c1QZ)s(w<*Xeud?6(o!+f3fnAQtVxTykGo#Ij}@EAI0DEa%d7FYC5r{3TZ>)mNq zh$036HXO6{!{ug-qwe2DDprw6H=)etWDWXwF~{>Ju6Pl*cYf{n>LCU0=*9S2Xvi3e zERU9VB{C2sFDtdvYrz}}tn1~fe%>;SJ^#R&?UzL7T))Q{_;`@BXYNC09K4=CF~hyZ z`xN!d5iv*ecwDZt>?x@{WPI!v#x=+{r=5pwpx)e>>wMOC=D3lajmp>5NZn9+xt1AI z;43BSriNA+`_$rdd(YFNv=7kaSCV~)%vH#SwLVc*qKo%iq;hWl6t;?kkKwBiD399^8H+R>rZvnm6Wtz7}?U?(yxghm&;zyt{_T${EeH5wJ113UQ zQM1Wabv#+GP*Q|0QUUNxxbr;1i>Re~a;y7s>4;jvxk|og&zg3E>2$y|D+85UGyzCW z1fhJ@SvnT;cW*PI{lcN{fq#r%12<5~!LXX&Q@CVpSvxe(hxE=X#TD+^cZI=j)Tk4% zFOqwH%?zYiqrY7=jkIX=9xtj^2f6LVjQO#%&t%D4Hr?{akY#)AJ(In!;;*D~Sl-Gp z0W)~56qc=HqfRZXx89);`2aXN&wD%jh3m-Y@S2WtJ>ZwWTl}(@#jgidj?_R?h5lws zz62wmMYQH-6zXdJKuRu;Sdb~=H&K}`{drzdqiQ=ZhHd%QiURFVtsr`88@+S71F(H; z@8R%Wq?6IcxBkNiY7B4D3kKi#eRH;w1!xc z8vmJk;{SLS6SC#|LUrmu@VnD8HZaT=g&NdsEvkem{NV|$X*x?3v$K0q?sa0#74@HW zro_lse2w{e_QhTDn^LkTDm@Rsjn&*6H72@?&K`14PsRGUi}f{Y zwB}?-qMh@p>8_HTA9=Uk42QK3&E|Tx9JUKGAFbo#oNWfVluYR|%oX}>GaUV~?3MJ( z@c9}#T{I}3vKxwOkzxZ5``+7iAD3?I?f)h=xe_F^g5XTII_yxv9bQ`YMp6>FYaCfugT>6G1_-N72GYK0&fy%{Azr z4;r>@vfJ|UK9sG&+^4BJRyPwL2Uo*hr{_;nI688p$4Sg53j#d9B2recQ@sQZvD=BJ z#v*ylqauL{slbj1@fXeuvHD)Gs`g2fQ<*!G)sa9`LHCUN*YDB$>JgjM=hUa@br@`! z5oW?}$MvDyMtkZJA5p=E8rOufsq2c!te1^~)1+PnOM4l9ULrOsW7$?-*{4D6`bbxp z!Eg3Rt13Rd3oGow24ZG#-pc28jF3xnFF!>gu(_~`%DjQSCY$+F^?TSbj%7kC87IfF zX{cG}B2=aIU{+>Mx9?Wd@#MnRZ@e?)#zyh;iMsglx=Xi2OCn4{uY9(H{XC2a7S7+qf zCx4@-S-`6rwG<-aS@+ah2`%&c``bBo!1$_oEG3MSdna-tEu_R!7ttW{)zBrtkg zn!cNsv)h%n=Oi17h+0`s_fH5e?n@;ePYTCdS;C>UU%g8#H`bOXxZ9ma&R~tY9(6dE z=d!IG|J2fX`9xI7gDwR1XZDts63Mih*<*7vyFVEp5r31u)E)U<$~Ecm*vJ9pdvNG7 zqy1^XrqkSLWTNw)w~p3C;$x@dz7O)Uy5Yj9Mr=t8#Rlry3WeuYU2HE(Bh@YLFm|82 zciw?K)5s5(LefV^sR-Y=!Hndt}Gxy_0-@r!7#bHPx7RYGoy_WL7>PaYt^(vBfjs z1;VhrEqmjwym}UcyoA*gkU$xIS8v6LSUps? zya-=q==}1eS7sV?15({GfEinuJ%PUE{3f^M(^U1CK26ID+gaFOk^vki00{w zR98QRkbQk{mYEPS7bMwKxi4bt%I&EOM_$#+=j)V-n0M%exO0K@f!+Y}OM$i>SWltm zryVowM5j8RdKMiN+y%pGig9rOwE&sSe~*@hlu*7(T%V9J1r2UcQNapY==U6#ltP{c z(uV7F3OLo53kgkHcHyB5^M1PA8QGhjILf!S_Iy9& zf;3_!A20nbUAMyl&xv)Q1pDJ4A$z{4vHkG&6UtD_mt0Oq85#RtR3byJv#^Sy-2CTp z7m5CvCc|6?TfgncykGpO^(vEjAIVg)5XKCEjZo6a)-e>DFsh@c-#rP|>9`A@+}*zJ z`%>3{S6h0yVq9!}Yy_~I1U^MclmrNkq;3UyiXDlK6i zUXckGXD%!$3;{wY67a^xj1`;Q!NY+E<*m^9g-Brc;*#4z#+S+dU_%@an>X6dnL@&T zRFf9G#nMRKWb}AbWGSZ^F?7_$vxmYMIo9*dTJge5-Lz} ze-N8G=TZ-<-~E0|?U3kHQY^|j6pu_aSL0&ptTh@|k9PTisq01e)74o@Kj)O0>W20H z02Qrm8yjQ;+o-jl3EWau%28N|i(P$H8!}#5Zqp&}z+gM?q06%j<4->qkKY)_c{pAz z|6VfMddau<6PtuuLA;>P&hUD+r!wy@toR3op|0HAw`lpXFT4w}4zVkrAzXoPN)opo zXXaU(rwCE#1alkAqz4?54jkojQh3r zX8%LlTI5yDQLmmkhDa&hQ_;h&4e!Ri4MV+--m8xLWBoBuVufumrWB5}!pgg?j;QV9 zJiRIJ^7lna3o&ma&=Ss=*YTY(Dg`_vSOrr4vcjkehG#Y664ie) z=wG$V3=WD5_hoJ2w!~$cLvQpPSp>jRj-GS45?XMzpqyT^o0+9?$#C=X1;A zE6$kYefRFVLc)dog#gjmoR#ObG-i3yx7)+1k(>J6-?e<_LS7zGqhI=v`U#!Vc#t2O z=sB-PdR>|-i$Wn%#`Y)y=)Wt@%uVJw`uQqFBnW^NQrzbgK;zdjaD-|S? z!#de~fjS5>=yS`gn%GAP;|ja-h-3VUIK$a^7Wl7zReILtR};rnkXiD+Fh!>QRkF!m zUtWGYVMPxTXd&UF7mpNb%&%r(wYH{t_}Y#h%bwLBemg?DHH&GYtfxT$m3?MROK#4y z1P@bjWKn?QL$-IUI2C4%LF&1(A{J<*w#(Sx4+UtiGt?`JTV6;;7va2^yx_$>8D8DL zThuB19=qw9!pAt}dGS5RB<1kOc4&5*-*(ISZps2VcxG+*;Ji;pil#Y+n>~B6HznvY ze${kMWI`gdra8c5a3M;|orn~v9@g*z zZDDodaCrI8tFt3C-$-2VRe8TOW5TNqekaPeuRasX?8ZFY*^GZ;4ntZ_%EAa3>b=@K z&v@gRB9gH`C_!P2SCx4mCZ2RLzmyru!=|~BBgdU+u)gtP9KLf`18*GauH2*gFyz{E z=;MLjOO-2;{nGfw4(fHh=sC6&r-iMu_1Zo`&$q)CN~*d5YVYz6!>q|aIB8D?q^Kt| zYqah^-j9sP!4!NA_bix9ugjJM%gvYWvP6$04`ErKE~8x7ci zmil6jE`1Ljid~KS2Ny*#xW8_EwYhx(#+3$t^=Y@}^! ze$L1pvO5>#lGg3}4t+WN<;*Jgc4BoofP*`eo%bRh1KQ%FHO0iQ7VnNn8p&V9 zMTCk-1{ZzYRy@78p=7FoS6kDP(q`cc6Fp(zp(BH7w*B}iD51X={~LUFrd^Orj?A+E z3IE7hPwa((O6!5fcv4C405LXkk7R9KM{eh|RoOc{3V&6{*886LPdmzM6}*s0)tKNj zZcNDABTx9ZffLiO@;^W`n*x85K3y(S%E|t@u_~fyR#r+aIrhH&I9lqL_Iv#&_g46I zecjdX?DzWQ?U!;F9Bq#nkhY4;K0G#^ilANrUC)RHVRFs<=@E$cAb~teo4+@dL;`k0 zj)QU^S5OIxkxZX^9{TxTV;%_l-Q&|>;b9$KUw6ajewvHF^^B<0kNs0FNzpNf^7o1Z z_2u^eTyZ@7e+9<;PArIqhJlHho(V!l&sQfvCsGXOX%kq}@`aVRGk`mV zx2S)=EjKrcF=TEN%%chTW7 zeIdMKUUiRCf==iOdLGNmXo=@Ys7hyX=+`>b?4vth7}=F#mS!#WJ=BMy8CB*gNQF8z zbI78b{Ld4~ZhlU)igut#`94k&y?he{M2jx)u_=#hYEnICZl|FTS!9psW^;B9)jcrbfY3UsKV%%hiDp!5P3wd( zzHL`hZEieaNqt`YWK~yB!5dEK{KzA*3Z?8}eHUl@?hzaVrt^6YMG51jH?{6Ky*;+D z!jjIhf`S{u$B#3wAvjlcC#4E@qa^q#Z&Vb~fS;;d*z!MLT4f}W=z=S~sn1{bg`wa6 zkf2a4m-;~8eVv*~78Q53y5eY-WXP(0!TtCwOt`@Fnrym2zZ7x&xt7w#OE8r zlDtZNXMBh>$NEBp>FUR(6`_u(mh|#v(~C&m8P{i>t|h@M@9s-Hnm)6e8&6PurEk2F zcx^>%nE->H+GhW>Z=raN$);8@5Onk226p44H&wiUGL1*yzxKH; z`Cb%ZWnW2-{N0g_eNqf%^y8LRs(rB@Eo(>2fmDiqJ4q47$UP=gG^zF1l?k@SRQgXl zVp}Pq{$yfy-2mFpsGYBKaZF&_{>;KjOf$Ui3fRoshSKUO<2F#>+y94h3MJU*~KI*oRSH-SY$P5YCDhil^*_U$?7T42K?e==9^-r!*g-d|a@ ze*9iq>vx=?>Js_W!gzwNx$FJV^K}%eQa9;vj&bTrLW*=`VDTHMTSQkB!&_?MM@b#r z0PgyjeC!zxl#Yz+@`qOmTle>|+2U*4-BY_mlEIRz^o<(lY%U|U&$&w#6*)g!X6dw> zy*`SYF8cQE<1}2o6Dm)TGkQBflk^psaGvp_Vi&9kUSib2aI2lSdlR5|>hNf<{B$+X zIT5gzeq?PM`CjyJbOpR*rIt^q`Sg2Es(oXSrI?CF`{?CIoFZk(?aC2SYM`Yqt*fFY z--*FNy43wKR~0u$Aj8ZAg$iT1HLo%ON=r09qrycy&W8UwWbuLus*8;!I-FlYJqa%Cx$J*ektfv^P+rk^~8SyU~>SeOsFHeDFNZuw|I}lJly} zKu8>L%3l7r#nnvpw_xT8Y9VqO*4}6mh;kSIJAC>!Luk?Zlr;0t*w!E ziii(oujQ+xybX>p3#3-He$?JxnZ$KFZ)yUFK>Buz2LaD6|Eq!Na3x{MgFCuCluW=LkE|+W>vt7;D zxC~WF+XeT|+QNXTHRCMrRh@-K2h`u&_+iW_1v$0O5zQ?@sfuWgIViutli*vIYA@PigD6c z(AOi~#`%X;hRoSq<{KSA)|ijK6CO&X-6k2eE0F8xuG*#pwAA>dv&GFKIp?!Dc_Rb7 zvht|1+`!9K-nqgP7Lu(r4=y(E9QFHFYjaQ9FXd^du3C@feya>Hze}N&5bs!VRZq+m zm^Bm#)9{Kc?2FY6)AisT2tunVM%xv**@|z%CKQA%^bik=^s>gPwY8%Hcz?_P19=S- Ap#T5? literal 0 HcmV?d00001 diff --git a/src/game/java/net/minecraft/block/BlockChorusFlower.java b/src/game/java/net/minecraft/block/BlockChorusFlower.java index 561cc3f..4d86597 100644 --- a/src/game/java/net/minecraft/block/BlockChorusFlower.java +++ b/src/game/java/net/minecraft/block/BlockChorusFlower.java @@ -126,13 +126,12 @@ public class BlockChorusFlower extends Block { private void placeGrownFlower(World p_185602_1_, BlockPos p_185602_2_, int p_185602_3_) { p_185602_1_.setBlockState(p_185602_2_, this.getDefaultState().withProperty(AGE, Integer.valueOf(p_185602_3_)), 2); - // TODO: implement soundf - // p_185602_1_.playAuxSFX(1033, p_185602_2_, 0); + p_185602_1_.playAuxSFX(1033, p_185602_2_, 0); } private void placeDeadFlower(World p_185605_1_, BlockPos p_185605_2_) { p_185605_1_.setBlockState(p_185605_2_, this.getDefaultState().withProperty(AGE, Integer.valueOf(5)), 2); - // p_185605_1_.playAuxSFX(1034, p_185605_2_, 0); + p_185605_1_.playAuxSFX(1034, p_185605_2_, 0); } private static boolean areAllNeighborsEmpty(World p_185604_0_, BlockPos p_185604_1_, EnumFacing p_185604_2_) { @@ -270,7 +269,7 @@ public class BlockChorusFlower extends Block { if (!flag) { worldIn.setBlockState(p_185601_1_.up(i), - EaglerItems.getEaglerBlock("chorus_plant").getDefaultState().withProperty(AGE, Integer.valueOf(5)), + EaglerItems.getEaglerBlock("chorus_flower").getDefaultState().withProperty(AGE, Integer.valueOf(5)), 2); } } diff --git a/src/game/java/net/minecraft/client/renderer/RenderGlobal.java b/src/game/java/net/minecraft/client/renderer/RenderGlobal.java index 1ebd04d..1a7c4fd 100644 --- a/src/game/java/net/minecraft/client/renderer/RenderGlobal.java +++ b/src/game/java/net/minecraft/client/renderer/RenderGlobal.java @@ -49,6 +49,7 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.ISound; import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.audio.SoundCategory; import net.minecraft.client.multiplayer.WorldClient; import net.minecraft.client.particle.EntityFX; import net.minecraft.client.renderer.chunk.CompiledChunk; @@ -2390,6 +2391,12 @@ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListene this.theWorld.playSoundAtPos(blockpos, "random.anvil_land", 0.3F, this.theWorld.rand.nextFloat() * 0.1F + 0.9F, false); break; + case 1033: + this.theWorld.playSoundAtPos(blockpos, "block.chorus_flower.grow", 1.0F, 1.0F, false); + break; + case 1034: + this.theWorld.playSoundAtPos(blockpos, "block.chorus_flower.death", 1.0F, 1.0F, false); + break; case 2000: int j1 = j % 3 - 1; int k = j / 3 % 3 - 1; diff --git a/src/game/java/net/minecraft/client/renderer/tileentity/TileEntityItemStackRenderer.java b/src/game/java/net/minecraft/client/renderer/tileentity/TileEntityItemStackRenderer.java index d7b4d14..d39d87c 100644 --- a/src/game/java/net/minecraft/client/renderer/tileentity/TileEntityItemStackRenderer.java +++ b/src/game/java/net/minecraft/client/renderer/tileentity/TileEntityItemStackRenderer.java @@ -64,16 +64,18 @@ public class TileEntityItemStackRenderer { if (itemStackIn.getItem() == Items.banner) { this.banner.setItemValues(itemStackIn); TileEntityRendererDispatcher.instance.renderTileEntityAt(this.banner, 0.0D, 0.0D, 0.0D, 0.0F); - } else if (itemStackIn.getItem() == EaglerItems.getEaglerItem("shield")) { - { - Minecraft.getMinecraft().getTextureManager().bindTexture(SHIELD_BASE_TEXTURE); + } + // else if (itemStackIn.getItem() == EaglerItems.getEaglerItem("shield")) { + // { + // Minecraft.getMinecraft().getTextureManager().bindTexture(SHIELD_BASE_TEXTURE); - GlStateManager.pushMatrix(); - GlStateManager.scale(1.0F, -1.0F, -1.0F); - this.modelShield.render(); - GlStateManager.popMatrix(); - } - } else if (itemStackIn.getItem() == Items.skull) { + // GlStateManager.pushMatrix(); + // GlStateManager.scale(1.0F, -1.0F, -1.0F); + // this.modelShield.render(); + // GlStateManager.popMatrix(); + // } + // } + else if (itemStackIn.getItem() == Items.skull) { GameProfile gameprofile = null; if (itemStackIn.hasTagCompound()) { NBTTagCompound nbttagcompound = itemStackIn.getTagCompound(); diff --git a/src/game/java/net/minecraft/entity/Entity.java b/src/game/java/net/minecraft/entity/Entity.java index 5329e4c..b8d93cb 100644 --- a/src/game/java/net/minecraft/entity/Entity.java +++ b/src/game/java/net/minecraft/entity/Entity.java @@ -2323,18 +2323,18 @@ public abstract class Entity implements ICommandSender { return Entity.this.getName(); } }); - category.addCrashSection("Entity\'s Exact location", String.format("%.2f, %.2f, %.2f", - new Object[] { Double.valueOf(this.posX), Double.valueOf(this.posY), Double.valueOf(this.posZ) })); - category.addCrashSection("Entity\'s Block location", - CrashReportCategory.getCoordinateInfo((double) MathHelper.floor_double(this.posX), - (double) MathHelper.floor_double(this.posY), (double) MathHelper.floor_double(this.posZ))); - category.addCrashSection("Entity\'s Momentum", String.format("%.2f, %.2f, %.2f", new Object[] { - Double.valueOf(this.motionX), Double.valueOf(this.motionY), Double.valueOf(this.motionZ) })); - category.addCrashSectionCallable("Entity\'s Rider", new Callable() { - public String call() throws Exception { - return Entity.this.riddenByEntity.toString(); - } - }); + // category.addCrashSection("Entity\'s Exact location", String.format("%.2f, %.2f, %.2f", + // new Object[] { Double.valueOf(this.posX), Double.valueOf(this.posY), Double.valueOf(this.posZ) })); + // category.addCrashSection("Entity\'s Block location", + // CrashReportCategory.getCoordinateInfo((double) MathHelper.floor_double(this.posX), + // (double) MathHelper.floor_double(this.posY), (double) MathHelper.floor_double(this.posZ))); + // category.addCrashSection("Entity\'s Momentum", String.format("%.2f, %.2f, %.2f", new Object[] { + // Double.valueOf(this.motionX), Double.valueOf(this.motionY), Double.valueOf(this.motionZ) })); + // category.addCrashSectionCallable("Entity\'s Rider", new Callable() { + // public String call() throws Exception { + // return Entity.this.riddenByEntity.toString(); + // } + // }); category.addCrashSectionCallable("Entity\'s Vehicle", new Callable() { public String call() throws Exception { return Entity.this.ridingEntity.toString(); diff --git a/src/game/java/net/minecraft/world/gen/ChunkProviderEnd.java b/src/game/java/net/minecraft/world/gen/ChunkProviderEnd.java index 757d187..d2cb420 100644 --- a/src/game/java/net/minecraft/world/gen/ChunkProviderEnd.java +++ b/src/game/java/net/minecraft/world/gen/ChunkProviderEnd.java @@ -2,6 +2,7 @@ package net.minecraft.world.gen; import java.util.List; import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; +import net.minecraft.block.BlockChorusFlower; import net.minecraft.block.BlockFalling; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -15,6 +16,7 @@ import net.minecraft.world.biome.BiomeGenBase; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.ChunkPrimer; import net.minecraft.world.chunk.IChunkProvider; +import net.minecraft.world.gen.feature.WorldGenEndIsland; /** * + @@ -46,73 +48,85 @@ import net.minecraft.world.chunk.IChunkProvider; * */ public class ChunkProviderEnd implements IChunkProvider { - private EaglercraftRandom endRNG; - private NoiseGeneratorOctaves noiseGen1; - private NoiseGeneratorOctaves noiseGen2; - private NoiseGeneratorOctaves noiseGen3; - public NoiseGeneratorOctaves noiseGen4; + private EaglercraftRandom rand; + protected static final IBlockState END_STONE = Blocks.end_stone.getDefaultState(); + protected static final IBlockState AIR = Blocks.air.getDefaultState(); + private final NoiseGeneratorOctaves lperlinNoise1; + private final NoiseGeneratorOctaves lperlinNoise2; + private final NoiseGeneratorOctaves perlinNoise1; + public NoiseGeneratorOctaves noiseGen5; - private World endWorld; - private double[] densities; + + public NoiseGeneratorOctaves noiseGen6; + + private final World worldObj; + + private final boolean mapFeaturesEnabled; + // private final MapGenEndCity endCityGen = new MapGenEndCity(this); + private final NoiseGeneratorSimplex islandNoise; + private double[] buffer; + private BiomeGenBase[] biomesForGeneration; - double[] noiseData1; - double[] noiseData2; - double[] noiseData3; - double[] noiseData4; - double[] noiseData5; + double[] pnr; + double[] ar; + double[] br; + private final WorldGenEndIsland endIslands = new WorldGenEndIsland(); public ChunkProviderEnd(World worldIn, long parLong1) { - this.endWorld = worldIn; - this.endRNG = new EaglercraftRandom(parLong1, !worldIn.getWorldInfo().isOldEaglercraftRandom()); - this.noiseGen1 = new NoiseGeneratorOctaves(this.endRNG, 16); - this.noiseGen2 = new NoiseGeneratorOctaves(this.endRNG, 16); - this.noiseGen3 = new NoiseGeneratorOctaves(this.endRNG, 8); - this.noiseGen4 = new NoiseGeneratorOctaves(this.endRNG, 10); - this.noiseGen5 = new NoiseGeneratorOctaves(this.endRNG, 16); + this.worldObj = worldIn; + this.mapFeaturesEnabled = true; // TODO: add this + this.rand = new EaglercraftRandom(parLong1, !worldIn.getWorldInfo().isOldEaglercraftRandom()); + this.lperlinNoise1 = new NoiseGeneratorOctaves(this.rand, 16); + this.lperlinNoise2 = new NoiseGeneratorOctaves(this.rand, 16); + this.perlinNoise1 = new NoiseGeneratorOctaves(this.rand, 8); + this.noiseGen5 = new NoiseGeneratorOctaves(this.rand, 10); + this.noiseGen6 = new NoiseGeneratorOctaves(this.rand, 16); + this.islandNoise = new NoiseGeneratorSimplex(this.rand); } public void func_180520_a(int parInt1, int parInt2, ChunkPrimer parChunkPrimer) { - byte b0 = 2; - int i = b0 + 1; - byte b1 = 33; - int j = b0 + 1; - this.densities = this.initializeNoiseField(this.densities, parInt1 * b0, 0, parInt2 * b0, i, b1, j); + int i = 2; + int j = i + 1; + int k = 33; + int l = i + 1; + this.buffer = this.initializeNoiseField(this.buffer, parInt1 * i, 0, parInt2 * i, j, k, l); - for (int k = 0; k < b0; ++k) { - for (int l = 0; l < b0; ++l) { - for (int i1 = 0; i1 < 32; ++i1) { + for (int i1 = 0; i1 < i; ++i1) { + for (int j1 = 0; j1 < i; ++j1) { + for (int k1 = 0; k1 < 32; ++k1) { double d0 = 0.25D; - double d1 = this.densities[((k + 0) * j + l + 0) * b1 + i1 + 0]; - double d2 = this.densities[((k + 0) * j + l + 1) * b1 + i1 + 0]; - double d3 = this.densities[((k + 1) * j + l + 0) * b1 + i1 + 0]; - double d4 = this.densities[((k + 1) * j + l + 1) * b1 + i1 + 0]; - double d5 = (this.densities[((k + 0) * j + l + 0) * b1 + i1 + 1] - d1) * d0; - double d6 = (this.densities[((k + 0) * j + l + 1) * b1 + i1 + 1] - d2) * d0; - double d7 = (this.densities[((k + 1) * j + l + 0) * b1 + i1 + 1] - d3) * d0; - double d8 = (this.densities[((k + 1) * j + l + 1) * b1 + i1 + 1] - d4) * d0; + double d1 = this.buffer[((i1 + 0) * l + j1 + 0) * k + k1 + 0]; + double d2 = this.buffer[((i1 + 0) * l + j1 + 1) * k + k1 + 0]; + double d3 = this.buffer[((i1 + 1) * l + j1 + 0) * k + k1 + 0]; + double d4 = this.buffer[((i1 + 1) * l + j1 + 1) * k + k1 + 0]; + double d5 = (this.buffer[((i1 + 0) * l + j1 + 0) * k + k1 + 1] - d1) * d0; + double d6 = (this.buffer[((i1 + 0) * l + j1 + 1) * k + k1 + 1] - d2) * d0; + double d7 = (this.buffer[((i1 + 1) * l + j1 + 0) * k + k1 + 1] - d3) * d0; + double d8 = (this.buffer[((i1 + 1) * l + j1 + 1) * k + k1 + 1] - d4) * d0; - for (int j1 = 0; j1 < 4; ++j1) { + for (int l1 = 0; l1 < 4; ++l1) { double d9 = 0.125D; double d10 = d1; double d11 = d2; double d12 = (d3 - d1) * d9; double d13 = (d4 - d2) * d9; - for (int k1 = 0; k1 < 8; ++k1) { + for (int i2 = 0; i2 < 8; ++i2) { double d14 = 0.125D; double d15 = d10; double d16 = (d11 - d10) * d14; - for (int l1 = 0; l1 < 8; ++l1) { - IBlockState iblockstate = null; + for (int j2 = 0; j2 < 8; ++j2) { + IBlockState iblockstate = AIR; + if (d15 > 0.0D) { - iblockstate = Blocks.end_stone.getDefaultState(); + iblockstate = END_STONE; } - int i2 = k1 + k * 8; - int j2 = j1 + i1 * 4; - int k2 = l1 + l * 8; - parChunkPrimer.setBlockState(i2, j2, k2, iblockstate); + int k2 = i2 + i1 * 8; + int l2 = l1 + k1 * 4; + int i3 = j2 + j1 * 8; + parChunkPrimer.setBlockState(k2, l2, i3, iblockstate); d15 += d16; } @@ -128,37 +142,38 @@ public class ChunkProviderEnd implements IChunkProvider { } } } - } public void func_180519_a(ChunkPrimer parChunkPrimer) { for (int i = 0; i < 16; ++i) { for (int j = 0; j < 16; ++j) { - byte b0 = 1; - int k = -1; - IBlockState iblockstate = Blocks.end_stone.getDefaultState(); - IBlockState iblockstate1 = Blocks.end_stone.getDefaultState(); + int k = 1; + int l = -1; + IBlockState iblockstate = END_STONE; + IBlockState iblockstate1 = END_STONE; + + for (int i1 = 127; i1 >= 0; --i1) { + IBlockState iblockstate2 = parChunkPrimer.getBlockState(i, i1, j); - for (int l = 127; l >= 0; --l) { - IBlockState iblockstate2 = parChunkPrimer.getBlockState(i, l, j); if (iblockstate2.getBlock().getMaterial() == Material.air) { - k = -1; + l = -1; } else if (iblockstate2.getBlock() == Blocks.stone) { - if (k == -1) { - if (b0 <= 0) { - iblockstate = Blocks.air.getDefaultState(); - iblockstate1 = Blocks.end_stone.getDefaultState(); + if (l == -1) { + if (k <= 0) { + iblockstate = AIR; + iblockstate1 = END_STONE; } - k = b0; - if (l >= 0) { - parChunkPrimer.setBlockState(i, l, j, iblockstate); + l = k; + + if (i1 >= 0) { + parChunkPrimer.setBlockState(i, i1, j, iblockstate); } else { - parChunkPrimer.setBlockState(i, l, j, iblockstate1); + parChunkPrimer.setBlockState(i, i1, j, iblockstate1); } - } else if (k > 0) { - --k; - parChunkPrimer.setBlockState(i, l, j, iblockstate1); + } else if (l > 0) { + --l; + parChunkPrimer.setBlockState(i, i1, j, iblockstate1); } } } @@ -173,14 +188,19 @@ public class ChunkProviderEnd implements IChunkProvider { * MP client it will generates all the blocks for the specified * chunk from the map seed and chunk seed */ - public Chunk provideChunk(int i, int j) { - this.endRNG.setSeed((long) i * 341873128712L + (long) j * 132897987541L); + public Chunk provideChunk(int x, int z) { + this.rand.setSeed((long) x * 341873128712L + (long) z * 132897987541L); ChunkPrimer chunkprimer = new ChunkPrimer(); - this.biomesForGeneration = this.endWorld.getWorldChunkManager().loadBlockGeneratorData(this.biomesForGeneration, - i * 16, j * 16, 16, 16); - this.func_180520_a(i, j, chunkprimer); + this.biomesForGeneration = this.worldObj.getWorldChunkManager().loadBlockGeneratorData(this.biomesForGeneration, + x * 16, z * 16, 16, 16); + this.func_180520_a(x, z, chunkprimer); this.func_180519_a(chunkprimer); - Chunk chunk = new Chunk(this.endWorld, chunkprimer, i, j); + + if (this.mapFeaturesEnabled) { + // this.endCityGen.generate(this.worldObj, x, z, chunkprimer); + } + + Chunk chunk = new Chunk(this.worldObj, chunkprimer, x, z); byte[] abyte = chunk.getBiomeArray(); for (int k = 0; k < abyte.length; ++k) { @@ -195,51 +215,90 @@ public class ChunkProviderEnd implements IChunkProvider { return this.provideChunk(parInt1, parInt2); } + private float getIslandHeightValue(int p_185960_1_, int p_185960_2_, int p_185960_3_, int p_185960_4_) { + float f = (float) (p_185960_1_ * 2 + p_185960_3_); + float f1 = (float) (p_185960_2_ * 2 + p_185960_4_); + float f2 = 100.0F - MathHelper.sqrt_float(f * f + f1 * f1) * 8.0F; + + if (f2 > 80.0F) { + f2 = 80.0F; + } + + if (f2 < -100.0F) { + f2 = -100.0F; + } + + for (int i = -12; i <= 12; ++i) { + for (int j = -12; j <= 12; ++j) { + long k = (long) (p_185960_1_ + i); + long l = (long) (p_185960_2_ + j); + + if (k * k + l * l > 4096L + && this.islandNoise.func_151605_a((double) k, (double) l) < -0.8999999761581421D) { + float f3 = (MathHelper.abs((float) k) * 3439.0F + MathHelper.abs((float) l) * 147.0F) % 13.0F + + 9.0F; + f = (float) (p_185960_3_ - i * 2); + f1 = (float) (p_185960_4_ - j * 2); + float f4 = 100.0F - MathHelper.sqrt_float(f * f + f1 * f1) * f3; + + if (f4 > 80.0F) { + f4 = 80.0F; + } + + if (f4 < -100.0F) { + f4 = -100.0F; + } + + if (f4 > f2) { + f2 = f4; + } + } + } + } + + return f2; + } + + public boolean isIslandChunk(int p_185961_1_, int p_185961_2_) { + return (long) p_185961_1_ * (long) p_185961_1_ + (long) p_185961_2_ * (long) p_185961_2_ > 4096L + && this.getIslandHeightValue(p_185961_1_, p_185961_2_, 1, 1) >= 0.0F; + } + /** * + * generates a subset of the level's terrain data. Takes 7 * arguments: the [empty] noise array, the position, and the * size. */ - private double[] initializeNoiseField(double[] parArrayOfDouble, int parInt1, int parInt2, int parInt3, int parInt4, - int parInt5, int parInt6) { - if (parArrayOfDouble == null) { - parArrayOfDouble = new double[parInt4 * parInt5 * parInt6]; + private double[] initializeNoiseField(double[] p_185963_1_, int p_185963_2_, int p_185963_3_, int p_185963_4_, + int p_185963_5_, int p_185963_6_, int p_185963_7_) { + if (p_185963_1_ == null) { + p_185963_1_ = new double[p_185963_5_ * p_185963_6_ * p_185963_7_]; } double d0 = 684.412D; double d1 = 684.412D; - this.noiseData4 = this.noiseGen4.generateNoiseOctaves(this.noiseData4, parInt1, parInt3, parInt4, parInt6, - 1.121D, 1.121D, 0.5D); - this.noiseData5 = this.noiseGen5.generateNoiseOctaves(this.noiseData5, parInt1, parInt3, parInt4, parInt6, - 200.0D, 200.0D, 0.5D); d0 = d0 * 2.0D; - this.noiseData1 = this.noiseGen3.generateNoiseOctaves(this.noiseData1, parInt1, parInt2, parInt3, parInt4, - parInt5, parInt6, d0 / 80.0D, d1 / 160.0D, d0 / 80.0D); - this.noiseData2 = this.noiseGen1.generateNoiseOctaves(this.noiseData2, parInt1, parInt2, parInt3, parInt4, - parInt5, parInt6, d0, d1, d0); - this.noiseData3 = this.noiseGen2.generateNoiseOctaves(this.noiseData3, parInt1, parInt2, parInt3, parInt4, - parInt5, parInt6, d0, d1, d0); - int i = 0; + this.pnr = this.perlinNoise1.generateNoiseOctaves(this.pnr, p_185963_2_, p_185963_3_, p_185963_4_, p_185963_5_, + p_185963_6_, p_185963_7_, d0 / 80.0D, d1 / 160.0D, d0 / 80.0D); + this.ar = this.lperlinNoise1.generateNoiseOctaves(this.ar, p_185963_2_, p_185963_3_, p_185963_4_, p_185963_5_, + p_185963_6_, p_185963_7_, d0, d1, d0); + this.br = this.lperlinNoise2.generateNoiseOctaves(this.br, p_185963_2_, p_185963_3_, p_185963_4_, p_185963_5_, + p_185963_6_, p_185963_7_, d0, d1, d0); + int i = p_185963_2_ / 2; + int j = p_185963_4_ / 2; + int k = 0; - for (int j = 0; j < parInt4; ++j) { - for (int k = 0; k < parInt6; ++k) { - float f = (float) (j + parInt1) / 1.0F; - float f1 = (float) (k + parInt3) / 1.0F; - float f2 = 100.0F - MathHelper.sqrt_float(f * f + f1 * f1) * 8.0F; - if (f2 > 80.0F) { - f2 = 80.0F; - } + for (int l = 0; l < p_185963_5_; ++l) { + for (int i1 = 0; i1 < p_185963_7_; ++i1) { + float f = this.getIslandHeightValue(i, j, l, i1); - if (f2 < -100.0F) { - f2 = -100.0F; - } - - for (int l = 0; l < parInt5; ++l) { + for (int j1 = 0; j1 < p_185963_6_; ++j1) { double d2 = 0.0D; - double d3 = this.noiseData2[i] / 512.0D; - double d4 = this.noiseData3[i] / 512.0D; - double d5 = (this.noiseData1[i] / 10.0D + 1.0D) / 2.0D; + double d3 = this.ar[k] / 512.0D; + double d4 = this.br[k] / 512.0D; + double d5 = (this.pnr[k] / 10.0D + 1.0D) / 2.0D; + if (d5 < 0.0D) { d2 = d3; } else if (d5 > 1.0D) { @@ -249,27 +308,29 @@ public class ChunkProviderEnd implements IChunkProvider { } d2 = d2 - 8.0D; - d2 = d2 + (double) f2; - byte b0 = 2; - if (l > parInt5 / 2 - b0) { - double d6 = (double) ((float) (l - (parInt5 / 2 - b0)) / 64.0F); + d2 = d2 + (double) f; + int k1 = 2; + + if (j1 > p_185963_6_ / 2 - k1) { + double d6 = (double) ((float) (j1 - (p_185963_6_ / 2 - k1)) / 64.0F); d6 = MathHelper.clamp_double(d6, 0.0D, 1.0D); d2 = d2 * (1.0D - d6) + -3000.0D * d6; } - b0 = 8; - if (l < b0) { - double d7 = (double) ((float) (b0 - l) / ((float) b0 - 1.0F)); + k1 = 8; + + if (j1 < k1) { + double d7 = (double) ((float) (k1 - j1) / ((float) k1 - 1.0F)); d2 = d2 * (1.0D - d7) + -30.0D * d7; } - parArrayOfDouble[i] = d2; - ++i; + p_185963_1_[k] = d2; + ++k; } } } - return parArrayOfDouble; + return p_185963_1_; } /** @@ -284,12 +345,56 @@ public class ChunkProviderEnd implements IChunkProvider { * + * Populates chunk with ores etc etc */ - public void populate(IChunkProvider var1, int i, int j) { + public void populate(IChunkProvider var1, int x, int z) { BlockFalling.fallInstantly = true; - BlockPos blockpos = new BlockPos(i * 16, 0, j * 16); - this.endWorld.getBiomeGenForCoords(blockpos.add(16, 0, 16)).decorate(this.endWorld, this.endWorld.rand, - blockpos); - BlockFalling.fallInstantly = false; + BlockPos blockpos = new BlockPos(x * 16, 0, z * 16); + + if (this.mapFeaturesEnabled) + { + // this.endCityGen.generateStructure(this.worldObj, this.rand, new ChunkPos(x, z)); + } + + this.worldObj.getBiomeGenForCoords(blockpos.add(16, 0, 16)).decorate(this.worldObj, this.worldObj.rand, blockpos); + long i = (long)x * (long)x + (long)z * (long)z; + + if (i > 4096L) + { + float f = this.getIslandHeightValue(x, z, 1, 1); + + if (f < -20.0F && this.rand.nextInt(14) == 0) + { + this.endIslands.generate(this.worldObj, this.rand, blockpos.add(this.rand.nextInt(16) + 8, 55 + this.rand.nextInt(16), this.rand.nextInt(16) + 8)); + + if (this.rand.nextInt(4) == 0) + { + this.endIslands.generate(this.worldObj, this.rand, blockpos.add(this.rand.nextInt(16) + 8, 55 + this.rand.nextInt(16), this.rand.nextInt(16) + 8)); + } + } + + if (this.getIslandHeightValue(x, z, 1, 1) > 40.0F) + { + int j = this.rand.nextInt(5); + + for (int k = 0; k < j; ++k) + { + int l = this.rand.nextInt(16) + 8; + int i1 = this.rand.nextInt(16) + 8; + int j1 = this.worldObj.getHeight(blockpos.add(l, 0, i1)).getY(); + + if (j1 > 0) + { + int k1 = j1 - 1; + + if (this.worldObj.isAirBlock(blockpos.add(l, k1 + 1, i1)) && this.worldObj.getBlockState(blockpos.add(l, k1, i1)).getBlock() == Blocks.end_stone) + { + BlockChorusFlower.generatePlant(this.worldObj, blockpos.add(l, k1 + 1, i1), this.rand, 8); + } + } + } + } + } + + BlockFalling.fallInstantly = false; } public boolean func_177460_a(IChunkProvider var1, Chunk var2, int var3, int var4) { @@ -342,7 +447,7 @@ public class ChunkProviderEnd implements IChunkProvider { public List getPossibleCreatures(EnumCreatureType enumcreaturetype, BlockPos blockpos) { - return this.endWorld.getBiomeGenForCoords(blockpos).getSpawnableList(enumcreaturetype); + return this.worldObj.getBiomeGenForCoords(blockpos).getSpawnableList(enumcreaturetype); } public BlockPos getStrongholdGen(World var1, String var2, BlockPos var3) { diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenEndIsland.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenEndIsland.java new file mode 100644 index 0000000..67de342 --- /dev/null +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenEndIsland.java @@ -0,0 +1,33 @@ +package net.minecraft.world.gen.feature; + +import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; +import net.minecraft.init.Blocks; +import net.minecraft.util.BlockPos; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; + +public class WorldGenEndIsland extends WorldGenerator +{ + public boolean generate(World worldIn, EaglercraftRandom rand, BlockPos position) + { + float f = (float)(rand.nextInt(3) + 4); + + for (int i = 0; f > 0.5F; --i) + { + for (int j = MathHelper.floor_float(-f); j <= MathHelper.ceiling_float_int(f); ++j) + { + for (int k = MathHelper.floor_float(-f); k <= MathHelper.ceiling_float_int(f); ++k) + { + if ((float)(j * j + k * k) <= (f + 1.0F) * (f + 1.0F)) + { + this.setBlockAndNotifyAdequately(worldIn, position.add(j, i, k), Blocks.end_stone.getDefaultState()); + } + } + } + + f = (float)((double)f - ((double)rand.nextInt(2) + 0.5D)); + } + + return true; + } +} diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java index 085de7e..64974b7 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java @@ -61,6 +61,15 @@ public class PlatformAssets { } } + public static List listFilesAtPath(String path) { + List ret = new ArrayList<>(); + File f = new File("resources", path); + if(f.isDirectory()) { + listFilesAtPath(f, ret, path); + } + return ret; + } + public static ImageData loadImageFile(InputStream data) { return loadImageFile(data, "image/png"); } diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java index 6ce6659..440ca82 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java @@ -313,6 +313,8 @@ public class PlatformRuntime { GLES30.glEnable(KHRDebug.GL_DEBUG_OUTPUT_KHR); GLES30.glEnable(KHRDebug.GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR); + + ServerAssets.initialize(); logger.info("Initializing Audio..."); PlatformAudio.platformInitialize(); diff --git a/src/main/java/net/hoosiertransfer/ServerAssets.java b/src/main/java/net/hoosiertransfer/ServerAssets.java new file mode 100644 index 0000000..fbebd68 --- /dev/null +++ b/src/main/java/net/hoosiertransfer/ServerAssets.java @@ -0,0 +1,53 @@ +package net.hoosiertransfer; + +import java.util.HashMap; +import java.util.Map; +import java.util.List; +import java.util.ArrayList; +import java.io.InputStream; +import java.io.ByteArrayInputStream; + +import net.lax1dude.eaglercraft.v1_8.internal.PlatformAssets; +import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; +import net.lax1dude.eaglercraft.v1_8.log4j.Logger; +import net.lax1dude.eaglercraft.v1_8.sp.SingleplayerServerController; +import net.lax1dude.eaglercraft.v1_8.sp.ipc.IPCPacket1DUploadServerAsset; + +public class ServerAssets { + public static final Logger logger = LogManager.getLogger("ServerAssets"); + private static Map serverAssets = new HashMap<>(); + private static List filenamesForClient = new ArrayList<>(); + + // ! I might want to call initialize when the server starts up instead of when the client starts up + public static void initialize() { + filenamesForClient = PlatformAssets.listFilesAtPath("assets/minecraft/server"); + } + + public static void sendAssetsToServer() { + for (String path : filenamesForClient) { + byte[] data = PlatformAssets.getResourceBytes(path); + if (data != null) { + logger.info("Uploading asset: " + path); + SingleplayerServerController.sendIPCPacket(new IPCPacket1DUploadServerAsset(path, data)); + } + } + } + + public static void uploadAsset(String path, byte[] data) { + serverAssets.put(path, data); + logger.info("Uploaded asset: " + path); + } + + public static byte[] getAssetBytes(String path) { + return serverAssets.get(path); + } + + public static InputStream getAssetStream(String path) { + byte[] data = serverAssets.get(path); + if (data != null) { + return new ByteArrayInputStream(data); + } else { + return null; + } + } +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/EagRuntime.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/EagRuntime.java index 501a1a7..4e4c7d7 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/EagRuntime.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/EagRuntime.java @@ -13,6 +13,7 @@ import java.util.List; import java.util.function.Consumer; import net.hoosiertransfer.EaglerLUpdateThread; +import net.hoosiertransfer.ServerAssets; import net.lax1dude.eaglercraft.v1_8.internal.EaglerMissingResourceException; import net.lax1dude.eaglercraft.v1_8.internal.EnumPlatformANGLE; import net.lax1dude.eaglercraft.v1_8.internal.EnumPlatformAgent; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/SingleplayerServerController.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/SingleplayerServerController.java index ef490a2..90aa90f 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/SingleplayerServerController.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/SingleplayerServerController.java @@ -13,6 +13,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformWebRTC; import org.apache.commons.lang3.StringUtils; +import net.hoosiertransfer.ServerAssets; import net.lax1dude.eaglercraft.v1_8.EagRuntime; import net.lax1dude.eaglercraft.v1_8.internal.EnumEaglerConnectionState; import net.lax1dude.eaglercraft.v1_8.internal.IPCPacketData; @@ -314,6 +315,7 @@ public class SingleplayerServerController implements ISaveFormat { switch(pkt.ack) { case 0xFF: logger.info("Integrated server signaled a successful boot"); + ServerAssets.sendAssetsToServer(); sendIPCPacket(new IPCPacket14StringList(IPCPacket14StringList.LOCALE, StringTranslate.dump())); statusState = IntegratedServerState.WORLD_NONE; break; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket1DUploadServerAsset.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket1DUploadServerAsset.java new file mode 100644 index 0000000..1fbcb4d --- /dev/null +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket1DUploadServerAsset.java @@ -0,0 +1,61 @@ +package net.lax1dude.eaglercraft.v1_8.sp.ipc; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +/** + * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ +public class IPCPacket1DUploadServerAsset implements IPCPacketBase { + + public static final int ID = 0x1D; + + public String path; + public byte[] data; + + public IPCPacket1DUploadServerAsset() { + } + + public IPCPacket1DUploadServerAsset(String path, byte[] data) { + this.path = path; + this.data = data; + } + + @Override + public void deserialize(DataInput bin) throws IOException { + path = bin.readUTF(); + data = new byte[bin.readInt()]; + bin.readFully(data); + } + + @Override + public void serialize(DataOutput bin) throws IOException { + bin.writeUTF(path); + bin.writeInt(data.length); + bin.write(data); + } + + @Override + public int id() { + return ID; + } + + @Override + public int size() { + return IPCPacketBase.strLen(path) + 4 + data.length; + } + +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacketManager.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacketManager.java index 6363efa..ef89611 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacketManager.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacketManager.java @@ -58,6 +58,7 @@ public class IPCPacketManager { mappings.put(IPCPacket1ALoggerMessage.ID, IPCPacket1ALoggerMessage::new); mappings.put(IPCPacket1BEnableLogging.ID, IPCPacket1BEnableLogging::new); mappings.put(IPCPacket1CIssueDetected.ID, IPCPacket1CIssueDetected::new); + mappings.put(IPCPacket1DUploadServerAsset.ID, IPCPacket1DUploadServerAsset::new); mappings.put(IPCPacketFFProcessKeepAlive.ID, IPCPacketFFProcessKeepAlive::new); } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerIntegratedServerWorker.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerIntegratedServerWorker.java index 0aad61c..ff392cc 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerIntegratedServerWorker.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerIntegratedServerWorker.java @@ -9,6 +9,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; +import net.hoosiertransfer.ServerAssets; import net.lax1dude.eaglercraft.v1_8.EagRuntime; import net.lax1dude.eaglercraft.v1_8.EagUtils; import net.lax1dude.eaglercraft.v1_8.internal.IPCPacketData; @@ -395,6 +396,16 @@ public class EaglerIntegratedServerWorker { enableLoggingRedirector(((IPCPacket1BEnableLogging)ipc).enable); break; } + case IPCPacket1DUploadServerAsset.ID: { + IPCPacket1DUploadServerAsset pkt = (IPCPacket1DUploadServerAsset)ipc; + if(!isServerStopped()) { + ServerAssets.uploadAsset(pkt.path, pkt.data); + }else { + logger.error("Client tried to upload asset while server was stopped"); + sendTaskFailed(); + } + break; + } default: logger.error("IPC packet type 0x{} class \"{}\" was not handled", Integer.toHexString(id), ipc.getClass().getSimpleName()); sendTaskFailed(); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerMinecraftServer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerMinecraftServer.java index 7f99536..3ae91ff 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerMinecraftServer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerMinecraftServer.java @@ -6,6 +6,7 @@ import java.util.List; import com.google.common.collect.Lists; +import net.hoosiertransfer.ServerAssets; import net.lax1dude.eaglercraft.v1_8.EagRuntime; import net.lax1dude.eaglercraft.v1_8.internal.vfs2.VFile2; import net.lax1dude.eaglercraft.v1_8.log4j.Logger; diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java index 96b6774..75416f5 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java @@ -3,6 +3,8 @@ package net.lax1dude.eaglercraft.v1_8.internal; import java.io.InputStream; import java.util.HashMap; import java.util.Map; +import java.util.List; +import java.util.ArrayList; import org.teavm.interop.Async; import org.teavm.interop.AsyncCallback; @@ -90,6 +92,16 @@ public class PlatformAssets { return data == MISSING_FILE ? null : data; } } + + public static List listFilesAtPath(String path) { + List ret = new ArrayList<>(); + for(String s : assets.keySet()) { + if(s.startsWith(path)) { + ret.add(s); + } + } + return ret; + } public static ImageData loadImageFile(InputStream data) { return loadImageFile(data, "image/png"); diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java index 2d0d010..92d6eff 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java @@ -11,6 +11,7 @@ import java.util.List; import java.util.Set; import java.util.function.Consumer; +import net.hoosiertransfer.ServerAssets; import net.lax1dude.eaglercraft.v1_8.EagRuntime; import net.lax1dude.eaglercraft.v1_8.EagUtils; import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; @@ -444,6 +445,8 @@ public class PlatformRuntime { logger.info("Loaded {} resources from EPKs", PlatformAssets.assets.size()); + ServerAssets.initialize(); + if(allowBootMenu && BootMenuEntryPoint.checkShouldLaunchFlag(win)) { logger.info("Boot menu enable flag is set, entering boot menu..."); enterBootMenu();